/* The following code was generated by JFlex 1.4.3 on 2023/04/06 21:02 */

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package org.netbeans.modules.php.editor.lexer;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Objects;
import org.netbeans.spi.lexer.LexerInput;
import org.netbeans.spi.lexer.LexerRestartInfo;
import org.netbeans.modules.web.common.api.ByteStack;

@org.netbeans.api.annotations.common.SuppressWarnings({"SF_SWITCH_FALLTHROUGH", "URF_UNREAD_FIELD", "DLS_DEAD_LOCAL_STORE", "DM_DEFAULT_ENCODING", "EI_EXPOSE_REP"})

/**
 * This class is a scanner generated by
 * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
 * on 2023/04/06 21:02 from the specification file
 * <tt>/home/junichi11/NetBeansProjects/netbeans/php/php.editor/tools/Php5ColoringScanner.flex</tt>
 */
public class PHP5ColoringLexer {

  /** This character denotes the end of file */
  public static final int YYEOF = LexerInput.EOF;

  /** initial size of the lookahead buffer */
  private static final int ZZ_BUFFERSIZE = 16384;

  /** lexical states */
  public static final int ST_PHP_END_NOWDOC = 22;
  public static final int ST_PHP_NOWDOC = 18;
  public static final int ST_PHP_END_HEREDOC = 16;
  public static final int ST_PHP_COMMENT = 32;
  public static final int ST_PHP_START_HEREDOC = 14;
  public static final int ST_PHP_QUOTES_AFTER_VARIABLE = 8;
  public static final int ST_PHP_IN_SCRIPTING = 2;
  public static final int ST_PHP_LOOKING_FOR_CONSTANT_NAME = 28;
  public static final int ST_PHP_LOOKING_FOR_STATIC_PROPERTY = 10;
  public static final int ST_PHP_DOC_COMMENT = 34;
  public static final int ST_PHP_LINE_COMMENT = 36;
  public static final int ST_PHP_LOOKING_FOR_FUNCTION_NAME = 26;
  public static final int ST_PHP_BACKQUOTE = 6;
  public static final int ST_PHP_START_NOWDOC = 20;
  public static final int ST_PHP_HEREDOC = 12;
  public static final int ST_HALTED_COMPILER = 40;
  public static final int ST_PHP_HIGHLIGHTING_ERROR = 38;
  public static final int ST_PHP_LOOKING_FOR_PARAMETER_NAME = 44;
  public static final int ST_PHP_LOOKING_FOR_TRUE_FALSE_NULL = 42;
  public static final int ST_PHP_VAR_OFFSET = 30;
  public static final int YYINITIAL = 0;
  public static final int ST_PHP_DOUBLE_QUOTES = 4;
  public static final int ST_PHP_LOOKING_FOR_PROPERTY = 24;

  /**
   * 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,  3,  4,  4,  5,  5,  6,  6,  7,  7,
     8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15,
    16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22
  };

  /**
   * Translates characters to character classes
   */
  private static final String ZZ_CMAP_PACKED =
    "\11\0\1\22\1\21\2\0\1\25\22\0\1\22\1\36\1\27\1\114"+
    "\1\26\1\42\1\43\1\111\1\112\1\76\1\40\1\35\1\113\1\5"+
    "\1\3\1\41\1\6\1\12\6\14\2\1\1\122\1\24\1\37\1\33"+
    "\1\34\1\47\1\46\1\51\1\11\1\101\1\53\1\4\1\10\1\106"+
    "\1\110\1\102\1\124\1\121\1\105\1\117\1\52\1\13\1\103\1\125"+
    "\1\50\1\100\1\104\1\107\1\123\1\120\1\7\1\116\1\17\1\115"+
    "\1\30\1\23\1\45\1\2\1\31\1\62\1\66\1\73\1\70\1\71"+
    "\1\57\1\65\1\110\1\54\1\72\1\121\1\60\1\74\1\55\1\61"+
    "\1\77\1\125\1\64\1\63\1\56\1\107\1\67\1\120\1\75\1\116"+
    "\1\17\1\32\1\44\1\126\1\46\1\16\52\17\1\17\12\17\1\17"+
    "\4\17\1\17\5\17\27\17\1\17\37\17\1\17\10\17\u01c2\15\4\0"+
    "\14\15\16\0\5\15\7\0\1\15\1\0\1\15\201\0\5\15\1\0"+
    "\2\15\2\0\4\15\1\0\1\15\6\0\1\15\1\0\3\15\1\0"+
    "\1\15\1\0\24\15\1\0\123\15\1\0\213\15\10\0\246\15\1\0"+
    "\46\15\2\0\1\15\7\0\47\15\110\0\33\15\5\0\3\15\55\0"+
    "\53\15\25\0\12\20\4\0\2\15\1\0\143\15\1\0\1\15\17\0"+
    "\2\15\7\0\2\15\12\20\3\15\2\0\1\15\20\0\1\15\1\0"+
    "\36\15\35\0\131\15\13\0\1\15\16\0\12\20\41\15\11\0\2\15"+
    "\4\0\1\15\5\0\26\15\4\0\1\15\11\0\1\15\3\0\1\15"+
    "\27\0\31\15\7\0\13\15\65\0\25\15\1\0\10\15\106\0\66\15"+
    "\3\0\1\15\22\0\1\15\7\0\12\15\4\0\12\20\1\0\20\15"+
    "\4\0\10\15\2\0\2\15\2\0\26\15\1\0\7\15\1\0\1\15"+
    "\3\0\4\15\3\0\1\15\20\0\1\15\15\0\2\15\1\0\3\15"+
    "\4\0\12\20\2\15\12\0\1\15\10\0\6\15\4\0\2\15\2\0"+
    "\26\15\1\0\7\15\1\0\2\15\1\0\2\15\1\0\2\15\37\0"+
    "\4\15\1\0\1\15\7\0\12\20\2\0\3\15\20\0\11\15\1\0"+
    "\3\15\1\0\26\15\1\0\7\15\1\0\2\15\1\0\5\15\3\0"+
    "\1\15\22\0\1\15\17\0\2\15\4\0\12\20\11\0\1\15\13\0"+
    "\10\15\2\0\2\15\2\0\26\15\1\0\7\15\1\0\2\15\1\0"+
    "\5\15\3\0\1\15\36\0\2\15\1\0\3\15\4\0\12\20\1\0"+
    "\1\15\21\0\1\15\1\0\6\15\3\0\3\15\1\0\4\15\3\0"+
    "\2\15\1\0\1\15\1\0\2\15\3\0\2\15\3\0\3\15\3\0"+
    "\14\15\26\0\1\15\25\0\12\20\25\0\10\15\1\0\3\15\1\0"+
    "\27\15\1\0\20\15\3\0\1\15\32\0\3\15\5\0\2\15\4\0"+
    "\12\20\20\0\1\15\4\0\10\15\1\0\3\15\1\0\27\15\1\0"+
    "\12\15\1\0\5\15\3\0\1\15\40\0\1\15\1\0\2\15\4\0"+
    "\12\20\1\0\2\15\22\0\10\15\1\0\3\15\1\0\51\15\2\0"+
    "\1\15\20\0\1\15\5\0\3\15\10\0\3\15\4\0\12\20\12\0"+
    "\6\15\5\0\22\15\3\0\30\15\1\0\11\15\1\0\1\15\2\0"+
    "\7\15\37\0\12\20\21\0\60\15\1\0\2\15\14\0\7\15\11\0"+
    "\12\20\47\0\2\15\1\0\1\15\2\0\2\15\1\0\1\15\2\0"+
    "\1\15\6\0\4\15\1\0\7\15\1\0\3\15\1\0\1\15\1\0"+
    "\1\15\2\0\2\15\1\0\4\15\1\0\2\15\11\0\1\15\2\0"+
    "\5\15\1\0\1\15\11\0\12\20\2\0\4\15\40\0\1\15\37\0"+
    "\12\20\26\0\10\15\1\0\44\15\33\0\5\15\163\0\53\15\24\0"+
    "\1\15\12\20\6\0\6\15\4\0\4\15\3\0\1\15\3\0\2\15"+
    "\7\0\3\15\4\0\15\15\14\0\1\15\1\0\12\20\6\0\46\15"+
    "\1\0\1\15\5\0\1\15\2\0\53\15\1\0\u014d\15\1\0\4\15"+
    "\2\0\7\15\1\0\1\15\1\0\4\15\2\0\51\15\1\0\4\15"+
    "\2\0\41\15\1\0\4\15\2\0\7\15\1\0\1\15\1\0\4\15"+
    "\2\0\17\15\1\0\71\15\1\0\4\15\2\0\103\15\45\0\20\15"+
    "\20\0\126\15\2\0\6\15\3\0\u026c\15\2\0\21\15\1\0\32\15"+
    "\5\0\113\15\6\0\10\15\7\0\15\15\1\0\4\15\16\0\22\15"+
    "\16\0\22\15\16\0\15\15\1\0\3\15\17\0\64\15\43\0\1\15"+
    "\4\0\1\15\3\0\12\20\46\0\12\20\6\0\130\15\10\0\5\15"+
    "\2\0\42\15\1\0\1\15\5\0\106\15\12\0\37\15\47\0\12\20"+
    "\36\15\2\0\5\15\13\0\54\15\4\0\32\15\6\0\12\20\46\0"+
    "\27\15\11\0\65\15\53\0\12\20\6\0\12\20\15\0\1\15\135\0"+
    "\57\15\21\0\7\15\4\0\12\20\51\0\36\15\15\0\2\15\12\20"+
    "\54\15\32\0\44\15\34\0\12\20\3\0\3\15\12\20\44\15\2\0"+
    "\11\15\140\0\4\15\1\0\4\15\3\0\2\15\11\0\300\15\100\0"+
    "\u0116\15\2\0\6\15\2\0\46\15\2\0\6\15\2\0\10\15\1\0"+
    "\1\15\1\0\1\15\1\0\1\15\1\0\37\15\2\0\65\15\1\0"+
    "\7\15\1\0\1\15\3\0\3\15\1\0\7\15\3\0\4\15\2\0"+
    "\6\15\4\0\15\15\5\0\3\15\1\0\7\15\164\0\1\15\15\0"+
    "\1\15\20\0\15\15\145\0\1\15\4\0\1\15\2\0\12\15\1\0"+
    "\1\15\3\0\5\15\6\0\1\15\1\0\1\15\1\0\1\15\1\0"+
    "\4\15\1\0\13\15\2\0\4\15\5\0\5\15\4\0\1\15\64\0"+
    "\2\15\u0a7b\0\57\15\1\0\57\15\1\0\205\15\6\0\4\15\3\0"+
    "\2\15\14\0\46\15\1\0\1\15\5\0\1\15\2\0\70\15\7\0"+
    "\1\15\20\0\27\15\11\0\7\15\1\0\7\15\1\0\7\15\1\0"+
    "\7\15\1\0\7\15\1\0\7\15\1\0\7\15\1\0\7\15\120\0"+
    "\1\15\u01d5\0\2\15\52\0\5\15\5\0\2\15\4\0\126\15\6\0"+
    "\3\15\1\0\132\15\1\0\4\15\5\0\52\15\2\0\136\15\21\0"+
    "\33\15\65\0\20\15\u0200\0\u19b6\15\112\0\u51eb\15\25\0\u048d\15\103\0"+
    "\56\15\2\0\u010d\15\3\0\20\15\12\20\2\15\24\0\57\15\20\0"+
    "\37\15\2\0\106\15\61\0\11\15\2\0\147\15\2\0\44\15\1\0"+
    "\10\15\77\0\13\15\1\0\3\15\1\0\4\15\1\0\27\15\35\0"+
    "\64\15\16\0\62\15\34\0\12\20\30\0\6\15\3\0\1\15\1\0"+
    "\1\15\2\0\12\20\34\15\12\0\27\15\31\0\35\15\7\0\57\15"+
    "\34\0\1\15\12\20\6\0\5\15\1\0\12\15\12\20\5\15\1\0"+
    "\51\15\27\0\3\15\1\0\10\15\4\0\12\20\6\0\27\15\3\0"+
    "\1\15\3\0\62\15\1\0\1\15\3\0\2\15\2\0\5\15\2\0"+
    "\1\15\1\0\1\15\30\0\3\15\2\0\13\15\7\0\3\15\14\0"+
    "\6\15\2\0\6\15\2\0\6\15\11\0\7\15\1\0\7\15\1\0"+
    "\53\15\1\0\12\15\12\0\163\15\15\0\12\20\6\0\u2ba4\15\14\0"+
    "\27\15\4\0\61\15\u2104\0\u016e\15\2\0\152\15\46\0\7\15\14\0"+
    "\5\15\5\0\1\15\1\0\12\15\1\0\15\15\1\0\5\15\1\0"+
    "\1\15\1\0\2\15\1\0\2\15\1\0\154\15\41\0\u016b\15\22\0"+
    "\100\15\2\0\66\15\50\0\14\15\164\0\5\15\1\0\207\15\23\0"+
    "\12\20\7\0\32\15\6\0\32\15\13\0\131\15\3\0\6\15\2\0"+
    "\6\15\2\0\6\15\2\0\3\15\43\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 =
    "\27\0\2\1\1\2\1\3\1\4\1\5\1\4\1\6"+
    "\1\3\5\4\1\7\1\5\1\10\1\5\1\11\1\12"+
    "\1\13\1\14\14\6\1\5\24\4\1\2\1\5\1\15"+
    "\1\16\3\4\1\5\1\4\1\17\1\20\1\21\1\22"+
    "\2\21\1\20\3\21\4\23\1\24\1\23\3\25\1\21"+
    "\1\2\1\21\1\26\1\27\1\26\1\30\1\2\1\31"+
    "\1\2\2\31\3\32\1\33\1\0\2\2\1\34\1\35"+
    "\2\34\1\36\2\37\1\3\1\40\1\3\1\41\1\42"+
    "\1\40\1\43\4\0\4\44\2\45\1\46\1\47\1\50"+
    "\7\51\1\0\1\52\1\53\2\0\1\3\1\0\1\4"+
    "\1\3\1\0\6\4\1\54\3\0\2\4\1\55\2\4"+
    "\1\0\1\4\1\0\1\56\1\57\2\0\1\21\2\0"+
    "\2\6\1\0\1\60\1\16\1\61\1\0\1\62\4\4"+
    "\1\63\4\4\1\64\1\4\1\65\36\4\13\0\1\66"+
    "\2\4\1\67\3\0\2\70\2\71\1\72\1\73\1\71"+
    "\3\0\1\70\2\71\1\74\1\0\1\75\3\0\1\76"+
    "\1\0\1\27\1\0\1\30\3\0\1\77\1\0\1\31"+
    "\2\100\1\0\1\33\1\0\1\101\3\0\1\102\1\0"+
    "\1\70\1\0\1\103\1\0\1\104\1\105\1\44\1\106"+
    "\5\0\1\107\3\0\1\110\2\0\10\4\1\0\10\4"+
    "\2\3\1\111\1\112\3\4\1\0\1\4\3\0\1\113"+
    "\5\4\1\114\4\4\1\115\3\4\1\116\6\4\1\117"+
    "\13\4\1\120\16\4\1\121\12\0\2\4\3\122\1\123"+
    "\1\124\1\0\1\125\1\0\1\76\1\77\1\126\1\127"+
    "\1\130\1\44\10\0\11\4\1\131\7\4\1\132\1\133"+
    "\1\134\6\4\4\0\1\135\6\4\1\136\12\4\1\137"+
    "\2\4\1\140\1\4\1\141\3\4\1\142\1\4\1\143"+
    "\1\144\4\4\1\145\12\4\12\0\2\4\1\124\1\44"+
    "\1\146\3\0\1\147\1\0\14\4\1\150\2\4\1\0"+
    "\1\4\1\151\1\4\1\152\1\153\1\4\1\154\2\155"+
    "\3\0\4\4\1\156\10\4\1\157\1\4\1\160\1\161"+
    "\1\162\1\163\6\4\1\164\1\165\1\4\1\166\1\167"+
    "\1\170\1\171\1\4\1\172\3\4\1\173\10\0\1\174"+
    "\1\0\1\175\1\176\1\44\1\0\1\107\3\0\12\4"+
    "\1\177\3\4\3\200\1\201\3\4\3\0\1\4\1\202"+
    "\13\4\1\203\1\204\1\205\1\206\1\207\4\4\1\210"+
    "\1\211\5\0\1\44\1\212\1\1\3\4\1\213\5\4"+
    "\1\214\4\4\2\0\1\215\1\216\1\4\2\217\1\0"+
    "\1\4\1\220\2\4\1\221\1\222\3\4\1\223\5\4"+
    "\1\224\3\0\1\44\1\0\1\225\3\4\1\226\6\4"+
    "\1\227\2\0\1\230\1\0\1\231\1\4\1\232\5\4"+
    "\1\233\1\4\1\234\1\235\1\4\1\0\1\44\1\0"+
    "\2\4\1\236\1\237\4\4\1\240\2\0\1\50\1\4"+
    "\1\241\1\242\1\243\3\4\1\244\1\0\1\44\1\0"+
    "\2\4\1\245\1\4\1\246\1\247\2\0\1\4\1\250"+
    "\1\4\1\251\1\252\1\44\1\0\3\4\2\0\2\4"+
    "\1\0\1\253\2\4\1\254\1\0\1\255\1\256\1\0"+
    "\1\257\1\4\2\0\1\4\1\0\1\260\14\0\1\261"+
    "\1\0";

  private static int [] zzUnpackAction() {
    int [] result = new int[822];
    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\127\0\256\0\u0105\0\u015c\0\u01b3\0\u020a\0\u0261"+
    "\0\u02b8\0\u030f\0\u0366\0\u03bd\0\u0414\0\u046b\0\u04c2\0\u0519"+
    "\0\u0570\0\u05c7\0\u061e\0\u0675\0\u06cc\0\u0723\0\u077a\0\u07d1"+
    "\0\u0828\0\u087f\0\u08d6\0\u092d\0\u0984\0\u09db\0\u0a32\0\u0a89"+
    "\0\u0ae0\0\u0b37\0\u0b8e\0\u0be5\0\u0c3c\0\u0c93\0\u087f\0\u087f"+
    "\0\u0cea\0\u0d41\0\u087f\0\u087f\0\u087f\0\u0d98\0\u0def\0\u0e46"+
    "\0\u0e9d\0\u0ef4\0\u0f4b\0\u0fa2\0\u0ff9\0\u1050\0\u10a7\0\u10fe"+
    "\0\u087f\0\u1155\0\u11ac\0\u1203\0\u125a\0\u12b1\0\u1308\0\u135f"+
    "\0\u13b6\0\u140d\0\u1464\0\u14bb\0\u1512\0\u1569\0\u15c0\0\u1617"+
    "\0\u166e\0\u16c5\0\u171c\0\u1773\0\u17ca\0\u1821\0\u1878\0\u18cf"+
    "\0\u087f\0\u1926\0\u197d\0\u19d4\0\u1a2b\0\u1a82\0\u1ad9\0\u087f"+
    "\0\u1b30\0\u1b87\0\u087f\0\u1bde\0\u1c35\0\u1c8c\0\u1ce3\0\u1d3a"+
    "\0\u1d91\0\u087f\0\u1de8\0\u1e3f\0\u1e96\0\u1eed\0\u1f44\0\u1f9b"+
    "\0\u1ff2\0\u2049\0\u20a0\0\u20f7\0\u1e3f\0\u087f\0\u214e\0\u21a5"+
    "\0\u21fc\0\u2253\0\u22aa\0\u2301\0\u2358\0\u23af\0\u087f\0\u2406"+
    "\0\u245d\0\u24b4\0\u250b\0\u2562\0\u250b\0\u087f\0\u25b9\0\u2610"+
    "\0\u2667\0\u087f\0\u087f\0\u26be\0\u2715\0\u087f\0\u276c\0\u087f"+
    "\0\u087f\0\u27c3\0\u087f\0\u281a\0\u2871\0\u28c8\0\u291f\0\u2976"+
    "\0\u087f\0\u29cd\0\u2a24\0\u2a7b\0\u2ad2\0\u087f\0\u2b29\0\u06cc"+
    "\0\u087f\0\u2b80\0\u2bd7\0\u2c2e\0\u2c85\0\u2cdc\0\u2d33\0\u2d8a"+
    "\0\u2de1\0\u2e38\0\u2e8f\0\u2ee6\0\u2f3d\0\u2f94\0\u2feb\0\u3042"+
    "\0\u3099\0\u30f0\0\u3147\0\u319e\0\u31f5\0\u324c\0\u32a3\0\u087f"+
    "\0\u32fa\0\u3351\0\u33a8\0\u33ff\0\u3456\0\u0c3c\0\u34ad\0\u3504"+
    "\0\u355b\0\u35b2\0\u1878\0\u0c3c\0\u3609\0\u0d41\0\u3660\0\u087f"+
    "\0\u36b7\0\u370e\0\u3765\0\u37bc\0\u3813\0\u386a\0\u087f\0\u38c1"+
    "\0\u3918\0\u396f\0\u39c6\0\u3a1d\0\u3a74\0\u3acb\0\u0c3c\0\u3b22"+
    "\0\u3b79\0\u3bd0\0\u3c27\0\u0c3c\0\u3c7e\0\u0c3c\0\u3cd5\0\u3d2c"+
    "\0\u3d83\0\u3dda\0\u3e31\0\u3e88\0\u3edf\0\u3f36\0\u3f8d\0\u3fe4"+
    "\0\u403b\0\u4092\0\u40e9\0\u4140\0\u4197\0\u41ee\0\u4245\0\u429c"+
    "\0\u42f3\0\u434a\0\u43a1\0\u43f8\0\u444f\0\u44a6\0\u44fd\0\u4554"+
    "\0\u45ab\0\u4602\0\u4659\0\u46b0\0\u4707\0\u475e\0\u47b5\0\u480c"+
    "\0\u18cf\0\u4863\0\u48ba\0\u4911\0\u4968\0\u49bf\0\u4a16\0\u087f"+
    "\0\u4a6d\0\u4ac4\0\u087f\0\u4b1b\0\u1bde\0\u4b72\0\u4bc9\0\u4c20"+
    "\0\u4b1b\0\u087f\0\u087f\0\u087f\0\u4b72\0\u4c77\0\u1d3a\0\u4cce"+
    "\0\u4d25\0\u4c77\0\u4cce\0\u087f\0\u4d7c\0\u087f\0\u4dd3\0\u4e2a"+
    "\0\u4e81\0\u4ed8\0\u4f2f\0\u087f\0\u21a5\0\u087f\0\u2253\0\u2301"+
    "\0\u22aa\0\u4f86\0\u2358\0\u4fdd\0\u2406\0\u087f\0\u245d\0\u087f"+
    "\0\u2562\0\u087f\0\u5034\0\u26be\0\u508b\0\u087f\0\u50e2\0\u5139"+
    "\0\u5190\0\u087f\0\u51e7\0\u087f\0\u087f\0\u523e\0\u5295\0\u52ec"+
    "\0\u5343\0\u539a\0\u2c85\0\u53f1\0\u087f\0\u5448\0\u549f\0\u54f6"+
    "\0\u087f\0\u554d\0\u55a4\0\u55fb\0\u5652\0\u56a9\0\u5700\0\u5757"+
    "\0\u57ae\0\u5805\0\u585c\0\u58b3\0\u590a\0\u5961\0\u59b8\0\u5a0f"+
    "\0\u5a66\0\u5abd\0\u5b14\0\u5b6b\0\u5bc2\0\u5c19\0\u5c70\0\u5cc7"+
    "\0\u5d1e\0\u5d75\0\u5dcc\0\u5e23\0\u5e7a\0\u5ed1\0\u5f28\0\u5f7f"+
    "\0\u087f\0\u5fd6\0\u602d\0\u6084\0\u60db\0\u6132\0\u0c3c\0\u6189"+
    "\0\u61e0\0\u6237\0\u628e\0\u0c3c\0\u62e5\0\u633c\0\u6393\0\u62e5"+
    "\0\u63ea\0\u6441\0\u6498\0\u64ef\0\u6546\0\u659d\0\u0c3c\0\u65f4"+
    "\0\u664b\0\u66a2\0\u66f9\0\u6750\0\u67a7\0\u67fe\0\u6855\0\u68ac"+
    "\0\u6903\0\u695a\0\u0c3c\0\u69b1\0\u6a08\0\u6a5f\0\u6ab6\0\u6b0d"+
    "\0\u6b64\0\u6bbb\0\u6c12\0\u6c69\0\u6cc0\0\u6d17\0\u6d6e\0\u6dc5"+
    "\0\u6e1c\0\u0c3c\0\u6e73\0\u6eca\0\u6f21\0\u6f78\0\u6fcf\0\u7026"+
    "\0\u707d\0\u70d4\0\u712b\0\u7182\0\u71d9\0\u7230\0\u087f\0\u1b30"+
    "\0\u1c8c\0\u087f\0\u7287\0\u72de\0\u087f\0\u7335\0\u087f\0\u087f"+
    "\0\u087f\0\u087f\0\u087f\0\u738c\0\u73e3\0\u743a\0\u7491\0\u74e8"+
    "\0\u753f\0\u7596\0\u75ed\0\u7644\0\u769b\0\u76f2\0\u7749\0\u77a0"+
    "\0\u77f7\0\u784e\0\u78a5\0\u78fc\0\u7953\0\u0c3c\0\u79aa\0\u7a01"+
    "\0\u7a58\0\u7aaf\0\u7b06\0\u7b5d\0\u7bb4\0\u7c0b\0\u0c3c\0\u0c3c"+
    "\0\u7c62\0\u7cb9\0\u7d10\0\u7d67\0\u7dbe\0\u7e15\0\u7e6c\0\u7ec3"+
    "\0\u7f1a\0\u7f71\0\u5f7f\0\u7fc8\0\u801f\0\u8076\0\u80cd\0\u8124"+
    "\0\u817b\0\u0c3c\0\u81d2\0\u8229\0\u8280\0\u82d7\0\u832e\0\u8385"+
    "\0\u83dc\0\u8433\0\u848a\0\u84e1\0\u0c3c\0\u8538\0\u858f\0\u0c3c"+
    "\0\u85e6\0\u0c3c\0\u863d\0\u8694\0\u86eb\0\u0c3c\0\u8742\0\u0c3c"+
    "\0\u0c3c\0\u8799\0\u87f0\0\u8847\0\u889e\0\u0c3c\0\u88f5\0\u894c"+
    "\0\u89a3\0\u89fa\0\u8a51\0\u8aa8\0\u8aff\0\u8b56\0\u8bad\0\u8c04"+
    "\0\u8c5b\0\u8cb2\0\u8d09\0\u8d60\0\u8db7\0\u8e0e\0\u8e65\0\u8ebc"+
    "\0\u8f13\0\u8f6a\0\u8fc1\0\u9018\0\u087f\0\u906f\0\u087f\0\u90c6"+
    "\0\u911d\0\u9174\0\u087f\0\u91cb\0\u9222\0\u9279\0\u92d0\0\u9327"+
    "\0\u937e\0\u93d5\0\u942c\0\u9483\0\u94da\0\u9531\0\u9588\0\u95df"+
    "\0\u0c3c\0\u9636\0\u968d\0\u96e4\0\u973b\0\u0c3c\0\u9792\0\u0c3c"+
    "\0\u97e9\0\u9840\0\u0c3c\0\u087f\0\u9897\0\u98ee\0\u9945\0\u999c"+
    "\0\u99f3\0\u9a4a\0\u9aa1\0\u9af8\0\u0c3c\0\u9b4f\0\u9ba6\0\u9bfd"+
    "\0\u9c54\0\u9cab\0\u9d02\0\u9d59\0\u9db0\0\u0c3c\0\u9e07\0\u0c3c"+
    "\0\u0c3c\0\u0c3c\0\u0c3c\0\u9e5e\0\u9eb5\0\u9f0c\0\u9f63\0\u9fba"+
    "\0\ua011\0\u0c3c\0\u0c3c\0\ua068\0\u0c3c\0\u0c3c\0\u0c3c\0\u0c3c"+
    "\0\ua0bf\0\u0c3c\0\ua116\0\ua16d\0\ua1c4\0\u0c3c\0\ua21b\0\ua272"+
    "\0\ua2c9\0\ua320\0\ua377\0\ua3ce\0\ua425\0\ua47c\0\u087f\0\ua4d3"+
    "\0\ua52a\0\u0c3c\0\ua581\0\ua5d8\0\ua62f\0\ua686\0\ua6dd\0\ua734"+
    "\0\ua78b\0\ua7e2\0\ua839\0\ua890\0\ua8e7\0\ua93e\0\ua995\0\ua9ec"+
    "\0\uaa43\0\uaa9a\0\uaaf1\0\uab48\0\uab9f\0\uabf6\0\u087f\0\uac4d"+
    "\0\uaca4\0\u0c3c\0\uacfb\0\uad52\0\uada9\0\uae00\0\uae57\0\uaeae"+
    "\0\uaf05\0\u0c3c\0\uaf5c\0\uafb3\0\ub00a\0\ub061\0\ub0b8\0\ub10f"+
    "\0\ub166\0\ub1bd\0\ub214\0\ub26b\0\ub2c2\0\u0c3c\0\u0c3c\0\u0c3c"+
    "\0\u0c3c\0\u0c3c\0\ub319\0\ub370\0\ub3c7\0\ub41e\0\u0c3c\0\u0c3c"+
    "\0\ub475\0\ub4cc\0\ub523\0\ub57a\0\ub5d1\0\ub628\0\u087f\0\ub67f"+
    "\0\ub6d6\0\ub72d\0\ub784\0\u0c3c\0\ub7db\0\ub832\0\ub889\0\ub8e0"+
    "\0\ub937\0\u0c3c\0\ub98e\0\ub9e5\0\uba3c\0\uba93\0\ubaea\0\ubb41"+
    "\0\u0c3c\0\u0c3c\0\ubb98\0\u087f\0\ubbef\0\ubc46\0\ubc9d\0\ubcf4"+
    "\0\ubd4b\0\ubda2\0\u0c3c\0\u0c3c\0\ubdf9\0\ube50\0\ubea7\0\ubefe"+
    "\0\ubf55\0\ubfac\0\uc003\0\uc05a\0\uc0b1\0\u0c3c\0\uc108\0\uc15f"+
    "\0\uc1b6\0\uc20d\0\uc264\0\u0c3c\0\uc2bb\0\uc312\0\uc369\0\u0c3c"+
    "\0\uc3c0\0\uc417\0\uc46e\0\uc4c5\0\uc51c\0\uc573\0\u0c3c\0\uc5ca"+
    "\0\uc621\0\u0c3c\0\uc678\0\u0c3c\0\uc6cf\0\u0c3c\0\uc726\0\uc77d"+
    "\0\uc7d4\0\uc82b\0\uc882\0\u0c3c\0\uc8d9\0\u0c3c\0\u0c3c\0\uc930"+
    "\0\uc987\0\uc9de\0\uca35\0\uca8c\0\ucae3\0\u0c3c\0\u0c3c\0\ucb3a"+
    "\0\ucb91\0\ucbe8\0\ucc3f\0\u0c3c\0\ucc96\0\ucced\0\ucd44\0\ucd9b"+
    "\0\u0c3c\0\u0c3c\0\u0c3c\0\ucdf2\0\uce49\0\ucea0\0\u0c3c\0\ucef7"+
    "\0\ucf4e\0\ucfa5\0\ucffc\0\ud053\0\u0c3c\0\ud0aa\0\u0c3c\0\u0c3c"+
    "\0\ud101\0\ud158\0\ud1af\0\u0c3c\0\ud206\0\u0c3c\0\u087f\0\ucd44"+
    "\0\ud25d\0\ud2b4\0\ud30b\0\ud362\0\ud3b9\0\ud410\0\ud467\0\ud4be"+
    "\0\ud515\0\u0c3c\0\ud56c\0\ud5c3\0\u087f\0\ud61a\0\u0c3c\0\u0c3c"+
    "\0\ud671\0\u0c3c\0\ud6c8\0\ud71f\0\ud776\0\ud7cd\0\ud824\0\u0c3c"+
    "\0\ud87b\0\ud8d2\0\ud929\0\ud980\0\ud9d7\0\uda2e\0\uda85\0\udadc"+
    "\0\udb33\0\udb8a\0\udbe1\0\udc38\0\u087f\0\udc8f";

  private static int [] zzUnpackRowMap() {
    int [] result = new int[822];
    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 =
    "\37\30\1\31\67\30\1\32\1\33\1\34\1\35\1\36"+
    "\1\37\1\40\1\41\1\42\1\43\1\33\1\44\1\33"+
    "\3\45\1\32\2\46\1\47\1\50\1\46\1\51\1\52"+
    "\1\53\1\54\1\55\1\56\1\57\1\60\1\61\1\62"+
    "\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\72"+
    "\1\73\1\74\1\75\1\76\1\77\1\100\1\101\1\102"+
    "\1\103\1\104\1\74\1\105\1\73\1\106\1\107\1\110"+
    "\1\76\1\36\1\45\1\111\1\112\1\41\1\47\1\113"+
    "\1\114\1\111\1\115\1\113\1\101\1\103\1\106\1\116"+
    "\1\45\1\117\1\120\1\121\1\122\1\47\1\123\1\124"+
    "\1\125\1\45\1\126\1\127\2\45\1\130\26\131\1\132"+
    "\1\133\1\134\1\131\1\135\74\131\26\136\1\137\1\136"+
    "\1\140\1\133\1\141\74\136\5\142\1\143\24\142\1\144"+
    "\14\142\1\145\61\142\1\146\1\142\1\146\2\142\3\146"+
    "\1\142\1\146\1\142\3\146\1\142\2\46\2\142\1\46"+
    "\22\142\26\146\1\142\12\146\5\142\4\146\1\147\3\146"+
    "\1\142\21\150\1\151\3\150\1\152\1\153\1\150\1\154"+
    "\1\150\1\155\74\150\2\156\1\157\1\156\1\157\2\156"+
    "\3\157\1\156\1\157\1\156\3\157\2\156\1\160\25\156"+
    "\26\157\1\156\12\157\5\156\4\157\1\156\3\157\1\156"+
    "\2\32\1\161\1\32\1\161\2\32\3\161\1\32\1\161"+
    "\1\32\3\161\1\32\1\0\1\162\25\32\26\161\1\32"+
    "\12\161\5\32\4\161\1\32\3\161\1\32\2\163\1\164"+
    "\1\163\1\164\2\163\3\164\1\163\1\164\2\163\2\164"+
    "\1\163\1\165\3\163\1\166\22\163\26\164\1\163\12\164"+
    "\5\163\4\164\1\163\3\164\1\163\2\167\1\170\1\167"+
    "\1\170\2\167\3\170\1\167\1\170\1\167\3\170\2\167"+
    "\1\171\25\167\26\170\1\167\12\170\5\167\4\170\1\167"+
    "\3\170\1\167\2\32\1\172\1\32\1\172\2\32\3\172"+
    "\1\32\1\172\1\32\3\172\1\32\1\173\1\174\2\32"+
    "\1\175\22\32\26\172\1\32\12\172\5\32\4\172\1\32"+
    "\3\172\1\32\2\176\1\177\1\176\1\177\1\200\1\176"+
    "\3\177\1\176\1\177\1\176\3\177\1\176\2\46\2\176"+
    "\1\46\21\176\1\201\26\177\1\176\12\177\5\176\4\177"+
    "\1\176\3\177\3\176\1\177\1\176\1\177\2\176\3\177"+
    "\1\176\1\177\1\176\3\177\1\176\2\46\2\176\1\46"+
    "\22\176\26\177\1\176\12\177\1\176\1\202\3\176\4\177"+
    "\1\176\3\177\1\176\2\203\1\204\1\203\1\204\2\203"+
    "\3\204\1\203\1\204\1\203\3\204\1\203\2\46\2\203"+
    "\1\46\22\203\26\204\1\203\12\204\5\203\4\204\1\203"+
    "\3\204\1\203\1\32\1\205\1\45\1\206\1\45\1\32"+
    "\1\207\3\45\1\205\1\45\1\205\3\45\1\32\2\210"+
    "\1\211\1\206\1\210\1\212\1\206\1\210\2\206\6\32"+
    "\1\206\5\32\1\206\26\45\1\206\12\45\1\210\2\206"+
    "\1\210\1\213\4\45\1\206\3\45\1\206\40\214\1\215"+
    "\66\214\40\216\1\217\66\216\21\220\1\221\3\220\1\222"+
    "\11\220\1\223\2\220\1\224\4\220\1\225\57\220\21\226"+
    "\2\227\2\226\1\227\101\226\127\230\10\231\1\232\10\231"+
    "\2\46\2\231\1\46\24\231\1\233\2\231\1\233\1\234"+
    "\1\232\24\231\1\234\24\231\1\235\1\231\1\235\2\231"+
    "\3\235\1\231\1\235\1\231\3\235\1\231\2\46\2\231"+
    "\1\46\22\231\13\235\1\236\12\235\1\231\1\237\1\236"+
    "\2\235\1\237\5\235\5\231\4\235\1\231\3\235\1\231"+
    "\37\30\1\240\126\30\1\0\2\30\1\241\4\30\1\242"+
    "\4\30\1\0\1\30\1\0\4\30\1\243\1\0\6\30"+
    "\1\0\2\30\2\0\12\30\1\0\14\30\130\0\1\33"+
    "\1\244\1\245\1\246\1\0\1\33\3\0\1\33\1\0"+
    "\1\33\54\0\1\246\36\0\1\45\1\247\1\0\1\45"+
    "\1\0\13\45\27\0\26\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\1\250\1\0\1\251\2\0\1\250"+
    "\3\0\1\250\1\0\1\250\16\0\1\71\74\0\2\45"+
    "\1\0\1\45\1\0\1\45\1\252\11\45\27\0\2\45"+
    "\1\253\2\45\1\253\2\45\1\254\6\45\1\255\3\45"+
    "\1\256\1\257\1\252\1\0\2\45\1\256\3\45\1\254"+
    "\3\45\5\0\1\45\1\257\2\45\1\0\1\255\2\45"+
    "\6\0\1\71\25\0\1\71\1\260\73\0\1\33\1\244"+
    "\1\245\1\246\1\0\1\33\1\261\1\0\1\262\1\33"+
    "\1\263\1\33\44\0\1\263\4\0\1\262\2\0\1\246"+
    "\3\0\1\261\32\0\2\45\1\0\1\45\1\0\5\45"+
    "\1\44\5\45\27\0\11\45\1\44\14\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\5\45\1\264\5\45\27\0\1\45\1\265\1\266"+
    "\1\45\1\267\1\266\3\45\1\264\1\265\13\45\1\0"+
    "\3\45\1\267\4\45\1\270\1\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\6\0"+
    "\1\52\7\0\1\271\10\0\1\272\13\45\1\272\11\45"+
    "\1\0\12\45\1\273\4\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\1\274\13\45"+
    "\1\274\11\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\26\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\22\0\2\46"+
    "\2\0\1\46\103\0\1\275\1\0\1\275\2\0\3\275"+
    "\1\0\1\275\1\0\3\275\30\0\26\275\1\0\12\275"+
    "\5\0\4\275\1\0\3\275\1\0\26\276\1\277\1\300"+
    "\1\301\1\276\1\302\74\276\33\0\1\70\1\71\125\0"+
    "\1\71\1\70\125\0\1\71\1\0\1\71\124\0\1\70"+
    "\126\0\1\303\1\71\2\0\1\304\1\0\1\305\120\0"+
    "\1\71\4\0\1\70\121\0\1\71\4\0\1\306\1\307"+
    "\120\0\1\71\1\310\125\0\1\71\7\0\1\71\116\0"+
    "\1\71\10\0\1\71\115\0\1\71\100\0\1\311\26\0"+
    "\1\312\12\0\1\70\60\0\2\45\1\0\1\313\1\0"+
    "\13\45\27\0\21\45\1\313\4\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\3\45\1\314\7\45\27\0\1\315\1\45\1\316\2\45"+
    "\1\316\5\45\1\317\1\315\1\45\1\314\7\45\1\0"+
    "\1\45\1\317\10\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\320\1\0\13\45\27\0\1\45\1\321"+
    "\10\45\1\321\6\45\1\320\4\45\1\0\10\45\1\322"+
    "\1\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\323\1\0\5\45\1\324\5\45\27\0\4\45\1\325"+
    "\4\45\1\324\7\45\1\323\4\45\1\0\3\45\1\325"+
    "\6\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\2\45\1\326\10\45\27\0\2\45\1\327"+
    "\2\45\1\330\1\331\1\326\3\45\1\332\10\45\1\333"+
    "\1\45\1\0\1\45\1\332\10\45\5\0\1\45\1\333"+
    "\2\45\1\0\3\45\2\0\2\45\1\0\1\320\1\0"+
    "\13\45\27\0\1\45\1\321\10\45\1\321\6\45\1\334"+
    "\4\45\1\0\10\45\1\322\1\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\1\335\13\45\1\335\11\45\1\0\11\45\1\336\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\5\45\1\264\5\45\27\0\1\45\1\265\1\266\1\45"+
    "\1\267\1\266\2\45\1\337\1\264\1\265\13\45\1\0"+
    "\3\45\1\267\4\45\1\270\1\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\4\45\1\340\21\45\1\0\3\45\1\340\6\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\1\274\13\45\1\274\1\45\1\341\7\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\342\1\0\13\45\27\0\6\45\1\343\12\45"+
    "\1\342\4\45\1\0\5\45\1\344\4\45\5\0\2\45"+
    "\1\345\1\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\5\45\1\346\5\45\27\0\10\45\1\347\1\346"+
    "\14\45\1\0\6\45\1\347\3\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\6\0"+
    "\1\52\7\0\1\271\10\0\1\272\10\45\1\350\2\45"+
    "\1\272\11\45\1\0\12\45\1\273\4\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\1\45\1\351\7\45\1\352\1\351\13\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\5\45\1\353\5\45\27\0\1\45\1\354\6\45"+
    "\1\355\1\353\1\354\13\45\1\0\6\45\1\355\3\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\1\45\1\356\2\45\1\357\5\45"+
    "\1\356\13\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\1\360"+
    "\1\361\10\45\1\361\1\45\1\360\11\45\1\0\10\45"+
    "\1\362\1\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\342\1\0\13\45\27\0\6\45\1\344\12\45"+
    "\1\342\4\45\1\0\5\45\1\344\4\45\5\0\2\45"+
    "\1\345\1\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\2\45\1\326\10\45\27\0\2\45\1\327\2\45"+
    "\1\327\1\45\1\326\3\45\1\332\10\45\1\333\1\45"+
    "\1\0\1\45\1\332\10\45\5\0\1\45\1\333\2\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\2\45\1\363\2\45\1\363\5\45\1\364\12\45"+
    "\1\0\1\45\1\364\10\45\5\0\4\45\1\0\3\45"+
    "\1\0\30\273\1\365\60\273\1\300\15\273\10\0\1\366"+
    "\1\367\1\0\1\370\6\0\1\371\25\0\1\372\1\373"+
    "\1\0\1\374\1\375\2\0\1\366\1\0\1\370\1\373"+
    "\1\376\1\372\1\0\1\367\1\0\1\374\7\0\1\376"+
    "\1\0\1\375\4\0\1\377\134\0\1\u0100\12\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\4\45\1\u0101\21\45"+
    "\1\0\3\45\1\u0101\6\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\1\45"+
    "\1\356\10\45\1\356\13\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\26\45\1\0\11\45\1\u0102\5\0\4\45\1\0"+
    "\3\45\123\0\1\u0103\5\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\1\45\1\351\10\45\1\351\13\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\1\0\26\131\1\u0104"+
    "\1\0\1\u0105\1\131\1\u0106\76\131\1\u0107\1\131\1\u0107"+
    "\2\131\3\u0107\1\131\1\u0107\1\131\1\u0108\2\u0107\6\131"+
    "\1\u0109\1\u010a\1\u0105\1\131\1\u010b\15\131\26\u0107\1\131"+
    "\12\u0107\5\131\4\u0107\1\131\3\u0107\156\131\1\u010c\1\u010a"+
    "\1\u0105\1\131\1\u010d\74\131\26\136\1\u010e\1\136\1\u010f"+
    "\1\0\1\u0110\76\136\1\u0107\1\136\1\u0107\2\136\3\u0107"+
    "\1\136\1\u0107\1\136\1\u0111\2\u0107\6\136\1\u0112\1\136"+
    "\1\u010f\1\u010a\1\u010b\15\136\26\u0107\1\136\12\u0107\5\136"+
    "\4\u0107\1\136\3\u0107\156\136\1\u010c\1\136\1\u010f\1\u010a"+
    "\1\u0113\74\136\34\0\1\u0114\120\0\1\u010c\105\0\1\u0115"+
    "\122\0\2\146\1\0\1\146\1\0\13\146\27\0\26\146"+
    "\1\0\12\146\5\0\4\146\1\0\3\146\123\0\1\u0116"+
    "\4\0\21\150\1\0\3\150\1\0\1\u0117\1\150\1\u0118"+
    "\1\150\1\u0119\76\150\1\u011a\1\150\1\u011a\2\150\3\u011a"+
    "\1\150\1\u011a\1\150\3\u011a\1\150\1\0\1\151\2\150"+
    "\1\0\1\u0117\1\150\1\u0118\1\150\1\u0119\15\150\26\u011a"+
    "\1\150\12\u011a\5\150\4\u011a\1\150\3\u011a\3\150\1\u011a"+
    "\1\150\1\u011a\2\150\3\u011a\1\150\1\u011a\1\150\3\u011a"+
    "\1\150\1\u011b\1\151\2\150\1\0\1\u0117\1\150\1\u0118"+
    "\1\150\1\u0119\15\150\26\u011a\1\150\12\u011a\5\150\4\u011a"+
    "\1\150\3\u011a\1\150\2\0\1\u0107\1\0\1\u0107\2\0"+
    "\3\u0107\1\0\1\u0107\1\0\3\u0107\12\0\1\u010b\15\0"+
    "\26\u0107\1\0\12\u0107\5\0\4\u0107\1\0\3\u0107\1\0"+
    "\127\150\21\157\1\u011c\3\157\1\u011c\101\157\2\0\1\157"+
    "\1\0\1\157\2\0\3\157\1\0\1\157\1\0\3\157"+
    "\2\0\1\u011d\25\0\26\157\1\0\12\157\5\0\4\157"+
    "\1\0\3\157\2\0\2\161\1\0\1\161\1\0\13\161"+
    "\3\0\1\u011e\23\0\26\161\1\0\12\161\5\0\4\161"+
    "\1\0\3\161\3\0\1\161\1\0\1\161\2\0\3\161"+
    "\1\0\1\161\1\0\3\161\2\0\1\u011f\25\0\26\161"+
    "\1\0\12\161\5\0\4\161\1\0\3\161\1\0\21\163"+
    "\1\0\3\163\1\0\102\163\2\u0120\1\163\1\u0120\1\163"+
    "\7\u0120\1\163\2\u0120\1\163\1\0\2\163\1\u0121\1\0"+
    "\22\163\26\u0120\1\163\12\u0120\5\163\4\u0120\1\163\3\u0120"+
    "\3\163\1\u0122\1\163\1\u0122\2\163\3\u0122\1\163\1\u0122"+
    "\1\163\3\u0122\1\163\1\u0123\1\u0124\2\163\1\u0123\22\163"+
    "\26\u0122\1\163\12\u0122\5\163\4\u0122\1\163\3\u0122\3\163"+
    "\1\u0122\1\163\1\u0122\2\163\3\u0122\1\163\1\u0122\1\163"+
    "\3\u0122\1\163\1\165\1\u0124\2\163\1\u0123\22\163\26\u0122"+
    "\1\163\12\u0122\5\163\4\u0122\1\163\3\u0122\1\163\21\u0125"+
    "\1\u0126\3\u0125\1\u0126\101\u0125\2\0\1\u0125\1\0\1\u0125"+
    "\2\0\3\u0125\1\0\1\u0125\1\0\3\u0125\2\0\1\u0127"+
    "\25\0\26\u0125\1\0\12\u0125\5\0\4\u0125\1\0\3\u0125"+
    "\2\0\2\172\1\0\1\172\1\0\13\172\3\0\1\u0128"+
    "\23\0\26\172\1\0\12\172\5\0\4\172\1\0\3\172"+
    "\3\0\1\172\1\0\1\172\2\0\3\172\1\0\1\172"+
    "\1\0\3\172\1\0\1\173\1\u0129\2\0\1\173\22\0"+
    "\26\172\1\0\12\172\5\0\4\172\1\0\3\172\3\0"+
    "\1\172\1\0\1\172\2\0\3\172\1\0\1\172\1\0"+
    "\3\172\2\0\1\u0129\25\0\26\172\1\0\12\172\5\0"+
    "\4\172\1\0\3\172\2\0\2\177\1\0\1\177\1\0"+
    "\13\177\27\0\26\177\1\0\12\177\5\0\4\177\1\0"+
    "\3\177\35\0\1\u012a\77\0\1\u012b\122\0\2\u012c\1\0"+
    "\1\u012c\1\0\13\u012c\2\u012d\2\0\1\u012d\5\0\1\u012e"+
    "\14\0\26\u012c\1\0\12\u012c\5\0\4\u012c\1\0\3\u012c"+
    "\2\0\1\205\1\u012f\3\0\1\205\3\0\1\205\1\0"+
    "\1\205\113\0\1\205\1\u012f\3\0\1\205\1\261\2\0"+
    "\1\205\1\0\1\205\60\0\1\261\33\0\1\u0130\1\0"+
    "\1\u0130\2\0\3\u0130\1\0\1\u0130\1\0\3\u0130\30\0"+
    "\26\u0130\1\0\12\u0130\5\0\4\u0130\1\0\3\u0130\1\0"+
    "\40\214\1\u0131\126\214\1\u0131\1\u0132\65\214\40\216\1\u0133"+
    "\126\216\1\u0133\1\u0134\65\216\21\220\1\221\3\220\1\221"+
    "\14\220\1\221\4\220\1\221\57\220\21\0\1\u0135\105\0"+
    "\21\220\1\221\3\220\1\221\13\220\1\u0136\1\221\4\220"+
    "\1\221\57\220\34\0\1\u0137\126\0\1\312\113\0\2\227"+
    "\2\0\1\227\152\0\1\u0138\10\0\1\u0138\153\0\1\u0139"+
    "\67\0\1\u013a\13\0\1\u013a\43\0\2\u013b\1\0\1\u013b"+
    "\1\0\13\u013b\2\u013c\2\0\1\u013c\22\0\26\u013b\1\0"+
    "\12\u013b\5\0\4\u013b\1\u013d\3\u013b\2\0\2\u013b\1\0"+
    "\1\u013e\1\0\13\u013b\2\u013c\2\0\1\u013c\22\0\6\u013b"+
    "\1\u013f\12\u013b\1\u013e\4\u013b\1\0\5\u013b\1\u013f\4\u013b"+
    "\5\0\4\u013b\1\u013d\3\u013b\2\0\2\u013b\1\0\1\u013b"+
    "\1\0\13\u013b\2\u013c\2\0\1\u013c\22\0\1\u013b\1\u0140"+
    "\10\u013b\1\u0140\13\u013b\1\0\12\u013b\5\0\4\u013b\1\u013d"+
    "\3\u013b\1\0\37\30\1\0\2\30\1\0\4\30\1\0"+
    "\4\30\1\0\1\30\1\0\4\30\2\0\6\30\1\0"+
    "\2\30\2\0\12\30\1\0\14\30\33\0\1\u0141\126\0"+
    "\1\u0141\43\0\1\u0142\3\0\1\u0142\116\0\1\u0143\5\0"+
    "\1\u0143\26\0\1\33\4\0\1\33\3\0\1\33\1\0"+
    "\1\33\113\0\1\250\2\0\1\246\1\0\1\250\3\0"+
    "\1\250\1\0\1\250\54\0\1\246\36\0\1\205\3\0"+
    "\1\u012f\1\205\3\0\1\205\1\0\1\205\20\0\1\u012f"+
    "\72\0\2\45\1\0\1\45\1\0\2\45\1\u0144\10\45"+
    "\27\0\2\45\1\u0145\1\u0146\1\45\1\u0145\1\u0147\1\u0144"+
    "\1\u0148\7\45\1\u0146\2\45\1\u0149\1\u014a\1\45\1\0"+
    "\2\45\1\u0149\2\45\1\u0147\1\u0148\2\45\1\u014b\5\0"+
    "\1\45\1\u014a\2\45\1\0\3\45\2\0\1\250\1\u014c"+
    "\1\0\1\246\1\0\1\250\3\0\1\250\1\0\1\250"+
    "\54\0\1\246\40\0\1\71\124\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\4\45\1\u014d\1\45\1\u014e\17\45"+
    "\1\0\3\45\1\u014d\1\45\1\u014e\4\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\3\45\1\u014f\14\45\1\u014f\5\45\1\0\10\45"+
    "\1\u0150\1\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\13\45\1\u0151\12\45"+
    "\1\0\1\45\1\u0151\10\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\1\45"+
    "\1\u0152\10\45\1\u0152\13\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\26\45\1\0\11\45\1\u0153\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\26\45\1\0\1\u0154\3\45\1\u0154\5\45\5\0\4\45"+
    "\1\0\3\45\2\0\1\u0155\2\0\1\u0155\1\0\1\u0155"+
    "\1\0\3\u0155\1\0\1\u0155\34\0\1\u0155\1\0\1\u0155"+
    "\3\0\1\u0155\2\0\1\u0155\3\0\1\u0155\1\0\2\u0155"+
    "\1\0\1\u0155\5\0\1\u0155\33\0\1\u0156\3\0\1\u0156"+
    "\122\0\1\u0157\3\0\1\u0157\1\0\1\u0157\113\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\1\u0158\13\45\1\u0158"+
    "\11\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\10\45\1\u0159"+
    "\15\45\1\0\6\45\1\u0159\3\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\2\45\1\u015a\2\45\1\u015a\20\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\2\45\1\u015b\2\45\1\u015b\20\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\40\0\1\u015c\70\0"+
    "\2\45\1\0\1\u015d\1\0\13\45\27\0\21\45\1\u015d"+
    "\4\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\275\1\0\1\275\1\0\13\275\27\0\26\275\1\0"+
    "\12\275\5\0\4\275\1\0\3\275\1\0\2\276\1\0"+
    "\1\276\1\0\2\276\3\0\1\276\1\0\2\276\2\0"+
    "\6\276\1\277\1\300\1\301\1\276\1\0\15\276\26\0"+
    "\1\276\12\0\5\276\4\0\1\276\3\0\156\276\1\0"+
    "\1\300\1\301\1\276\1\302\74\276\34\0\1\71\125\0"+
    "\1\71\3\0\1\u015e\152\0\1\u015f\14\0\1\u015f\66\0"+
    "\1\u0160\107\0\2\310\2\0\1\310\135\0\1\u0161\113\0"+
    "\2\312\2\0\1\312\102\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\1\45\1\u0162\4\45\1\u0163\3\45\1\u0162"+
    "\13\45\1\0\5\45\1\u0163\4\45\5\0\4\45\1\0"+
    "\2\45\1\u0164\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\13\45\1\u0165\12\45\1\0\1\45\1\u0165\10\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\1\u0166\13\45\1\u0166\11\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\3\45\1\274\14\45\1\274"+
    "\5\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\26\45\1\0"+
    "\12\45\5\0\2\45\1\u0167\1\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\24\45\1\u0168"+
    "\1\45\1\0\12\45\5\0\1\45\1\u0168\2\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\10\45\1\u0169\15\45\1\0\6\45\1\u0169\3\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\2\45\1\u016a\10\45\27\0\7\45\1\u016a\13\45\1\u016b"+
    "\2\45\1\0\2\45\1\u016b\7\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\u016c\1\0\13\45\27\0"+
    "\21\45\1\u016c\4\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\6\45\1\u016d\4\45\1\u016e\7\45\1\u016f\2\45\1\0"+
    "\1\45\1\u016e\1\u016f\2\45\1\u016d\4\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\6\45\1\u0170\4\45\1\u016e\7\45\1\u016f\2\45"+
    "\1\0\1\45\1\u016e\1\u016f\2\45\1\u016d\4\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\21\45\1\u0171\4\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\13\45\1\u0172\12\45\1\0\1\45\1\u0172"+
    "\10\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\26\45\1\0\1\u0173\3\45"+
    "\1\u0173\5\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\17\45\1\u0174\6\45"+
    "\1\0\12\45\5\0\2\45\1\u0167\1\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\1\45"+
    "\1\u0175\10\45\1\u0175\13\45\1\0\10\45\1\u0176\1\45"+
    "\5\0\1\u0177\3\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\1\u0178\13\45\1\u0178\11\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\11\45\1\u0179\14\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\13\45\1\u017a\12\45"+
    "\1\0\1\45\1\u017a\10\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\22\45"+
    "\1\u017b\3\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\10\45"+
    "\1\u017c\15\45\1\0\6\45\1\u017c\3\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\1\45\1\u017d\10\45\1\u017d\1\45\1\u017e\11\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\1\45\1\u017d\10\45"+
    "\1\u017d\13\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\4\45"+
    "\1\u017f\21\45\1\0\3\45\1\u017f\6\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\6\45\1\u0180\17\45\1\0\5\45\1\u0180\4\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\5\45\1\u0181\5\45\27\0\11\45\1\u0181\14\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\11\45\1\u0182\14\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\1\u0183\13\45\1\u0183"+
    "\11\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\4\45\1\u0184"+
    "\21\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\2\45\1\u0185"+
    "\2\45\1\u0185\20\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\6\45\1\u0186\1\45\1\u0187\2\45\1\u0188\12\45\1\0"+
    "\1\45\1\u0188\3\45\1\u0186\1\u0187\3\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\5\45"+
    "\1\u0189\5\45\27\0\1\45\1\u018a\7\45\1\u0189\1\u018a"+
    "\13\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\6\45\1\u018b"+
    "\17\45\1\0\5\45\1\u018b\4\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\25\45\1\u018c\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\5\45\1\u018d\5\45"+
    "\27\0\4\45\1\u018e\4\45\1\u018d\14\45\1\0\3\45"+
    "\1\u018e\6\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\1\u018f\13\45\1\u018f"+
    "\11\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\3\45\1\u0190\7\45\27\0"+
    "\16\45\1\u0190\7\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\13\45\1\u0191\12\45\1\0\1\45\1\u0191\10\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\u0192\1\0"+
    "\13\45\27\0\21\45\1\u0192\4\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\1\0\127\273\60\0\1\u0193\24\0"+
    "\1\u0193\34\0\1\u0194\40\0\1\u0195\4\0\1\u0194\20\0"+
    "\1\u0195\35\0\1\u0196\54\0\1\u0196\44\0\1\u0197\64\0"+
    "\1\u0197\105\0\1\u0198\13\0\1\u0198\55\0\1\u0199\45\0"+
    "\1\u0199\117\0\1\u019a\2\0\1\u019a\127\0\1\u019b\25\0"+
    "\1\u019b\74\0\1\u019c\2\0\1\u019c\52\0\2\45\1\0"+
    "\1\u019d\1\0\13\45\27\0\21\45\1\u019d\4\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\4\45\1\u019e\21\45\1\0"+
    "\3\45\1\u019e\6\45\5\0\4\45\1\0\3\45\1\0"+
    "\2\131\1\0\1\131\1\0\2\131\3\0\1\131\1\0"+
    "\2\131\2\0\6\131\1\u0109\1\u010a\1\u0105\1\131\1\0"+
    "\15\131\26\0\1\131\12\0\5\131\4\0\1\131\3\0"+
    "\27\131\1\0\1\u010a\1\u0105\1\131\1\u010d\74\131\1\0"+
    "\2\u0107\1\0\1\u0107\1\0\13\u0107\27\0\26\u0107\1\0"+
    "\12\u0107\4\0\1\u019f\4\u0107\1\0\3\u0107\1\0\1\131"+
    "\2\u0108\1\131\1\u0108\1\131\13\u0108\5\131\1\u0104\1\0"+
    "\1\u0105\1\131\1\u0106\15\131\26\u0108\1\131\12\u0108\4\131"+
    "\1\u01a0\4\u0108\1\131\3\u0108\1\131\2\136\1\0\1\136"+
    "\1\0\2\136\3\0\1\136\1\0\2\136\2\0\6\136"+
    "\1\u0112\1\136\1\u010f\1\u010a\1\0\15\136\26\0\1\136"+
    "\12\0\5\136\4\0\1\136\3\0\27\136\1\0\1\136"+
    "\1\u010f\1\u010a\1\u0113\75\136\2\u0111\1\136\1\u0111\1\136"+
    "\13\u0111\5\136\1\u010e\1\136\1\u010f\1\0\1\u0110\15\136"+
    "\26\u0111\1\136\12\u0111\4\136\1\u01a1\4\u0111\1\136\3\u0111"+
    "\1\136\34\0\1\u01a2\72\0\2\150\1\u01a3\1\150\1\u01a3"+
    "\2\150\3\u01a3\1\150\1\u01a3\2\150\2\u01a3\1\150\1\0"+
    "\3\150\1\0\1\u01a4\1\150\1\u0118\1\150\1\u01a5\15\150"+
    "\26\u01a3\1\150\12\u01a3\5\150\4\u01a3\1\150\3\u01a3\22\150"+
    "\1\0\3\150\1\0\122\150\1\0\3\150\1\0\1\u01a5"+
    "\1\150\1\u0118\1\150\1\u01a6\74\150\21\u011a\1\u01a7\3\u011a"+
    "\1\u01a7\101\u011a\2\0\1\u011a\1\0\1\u011a\2\0\3\u011a"+
    "\1\0\1\u011a\1\0\3\u011a\2\0\1\u011b\25\0\26\u011a"+
    "\1\0\12\u011a\5\0\4\u011a\1\0\3\u011a\1\0\21\u0122"+
    "\1\u01a8\3\u0122\1\u01a8\101\u0122\2\163\1\u0122\1\163\1\u0122"+
    "\2\163\3\u0122\1\163\1\u0122\1\163\3\u0122\1\163\1\0"+
    "\1\u0124\2\163\1\0\22\163\26\u0122\1\163\12\u0122\5\163"+
    "\4\u0122\1\163\3\u0122\1\163\34\0\1\u01a9\113\0\2\u012d"+
    "\2\0\1\u012d\5\0\1\u012e\74\0\1\205\4\0\1\205"+
    "\3\0\1\205\1\0\1\205\113\0\2\u0130\1\0\1\u0130"+
    "\1\0\13\u0130\27\0\26\u0130\1\0\12\u0130\5\0\4\u0130"+
    "\1\0\3\u0130\1\0\40\214\1\u0131\1\u01aa\65\214\40\216"+
    "\1\u0133\1\u01ab\65\216\21\220\1\221\3\220\1\221\14\220"+
    "\1\221\4\220\1\221\13\220\1\u01ac\14\220\1\u01ac\26\220"+
    "\21\0\2\u0137\2\0\1\u0137\161\0\1\u01ad\24\0\1\u01ad"+
    "\101\0\1\u01ae\24\0\1\u01ae\130\0\1\u01af\40\0\2\u013c"+
    "\2\0\1\u013c\74\0\1\u013d\5\0\2\u013b\1\0\1\u013b"+
    "\1\0\13\u013b\2\u013c\2\0\1\u013c\22\0\10\u013b\1\u01b0"+
    "\15\u013b\1\0\6\u013b\1\u01b0\3\u013b\5\0\4\u013b\1\u013d"+
    "\3\u013b\2\0\2\u013b\1\0\1\u013b\1\0\13\u013b\2\u013c"+
    "\2\0\1\u013c\22\0\1\u013b\1\u01b1\10\u013b\1\u01b1\13\u013b"+
    "\1\0\12\u013b\5\0\4\u013b\1\u013d\3\u013b\2\0\2\u013b"+
    "\1\0\1\u013b\1\0\13\u013b\2\u013c\2\0\1\u013c\22\0"+
    "\1\u01b2\13\u013b\1\u01b2\11\u013b\1\0\12\u013b\5\0\4\u013b"+
    "\1\u013d\3\u013b\111\0\1\u01b3\66\0\1\u01b4\13\0\1\u01b4"+
    "\43\0\2\45\1\0\1\45\1\0\13\45\27\0\4\45"+
    "\1\u01b5\21\45\1\0\3\45\1\u01b5\4\45\1\u01b6\1\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\1\45\1\u01b7\10\45\1\u01b7\13\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\4\45\1\u01b8\21\45"+
    "\1\0\3\45\1\u01b8\6\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\1\u01b9"+
    "\13\45\1\u01b9\11\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\4\45\1\u01ba\21\45\1\0\3\45\1\u01ba\6\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\10\45\1\u01bb\15\45\1\0\6\45\1\u01bb"+
    "\3\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\u01bc\1\0\13\45\27\0\21\45\1\u01bc\4\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\1\45\1\u01bd\10\45\1\u01bd"+
    "\13\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\1\250\4\0\1\250\3\0\1\250\1\0\1\250\113\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\6\45\1\u01be"+
    "\17\45\1\0\5\45\1\u01be\4\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\u01bf\1\0\13\45\27\0"+
    "\21\45\1\u01bf\4\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\2\45\1\u01c0"+
    "\10\45\27\0\3\45\1\u01c1\1\u01c2\2\45\1\u01c0\3\45"+
    "\1\u01c3\4\45\1\u01c1\5\45\1\0\1\45\1\u01c3\1\45"+
    "\1\u01c2\6\45\5\0\2\45\1\u01c4\1\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\24\45"+
    "\1\u01c5\1\45\1\0\12\45\5\0\1\45\1\u01c5\2\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\u01c6\1\0\13\45"+
    "\27\0\21\45\1\u01c6\4\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\10\45\1\u01c7\15\45\1\0\6\45\1\u01c7\3\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\5\45\1\u01c8\5\45\27\0\11\45\1\u01c8\14\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\6\45\1\u01c9\17\45"+
    "\1\0\5\45\1\u01c9\4\45\5\0\4\45\1\0\3\45"+
    "\2\0\1\u0155\1\261\1\0\1\u0155\1\0\1\u0155\1\0"+
    "\3\u0155\1\0\1\u0155\34\0\1\u0155\1\0\1\u0155\3\0"+
    "\1\u0155\2\0\1\u0155\3\0\1\u0155\1\0\2\u0155\1\0"+
    "\1\u0155\5\0\1\u0155\27\0\1\262\3\0\1\u0156\3\0"+
    "\1\u0156\116\0\1\263\3\0\1\u0157\3\0\1\u0157\1\0"+
    "\1\u0157\113\0\2\45\1\0\1\u01ca\1\0\13\45\27\0"+
    "\21\45\1\u01ca\4\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\13\45\1\u01cb\12\45\1\0\1\45\1\u01cb\10\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\1\45\1\u01cc\10\45\1\u01cc\13\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\23\45\1\u01cd\2\45\1\0"+
    "\2\45\1\u01cd\7\45\5\0\4\45\1\0\3\45\40\0"+
    "\1\u015e\70\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\1\45\1\u01ce\10\45\1\u01ce\13\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\3\0\1\u01cf\1\0\1\u01cf\2\0"+
    "\3\u01cf\1\0\1\u01cf\1\0\3\u01cf\2\0\1\u015e\4\0"+
    "\1\u01d0\20\0\26\u01cf\1\0\12\u01cf\1\u01d1\4\0\4\u01cf"+
    "\1\0\3\u01cf\74\0\1\u01d2\5\0\1\u01d2\46\0\2\u01d3"+
    "\2\0\1\u01d3\102\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\3\45\1\u01d4\14\45\1\u01d4\5\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\26\45\1\0\10\45\1\u01d5\1\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\26\45\1\0\10\45\1\u01d6\1\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\6\45\1\u01d7\17\45\1\0\5\45"+
    "\1\u01d7\4\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\1\45\1\u01d8\10\45"+
    "\1\u01d8\13\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\u01d9\1\0\13\45\27\0\21\45"+
    "\1\u01d9\4\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\10\45"+
    "\1\u01da\15\45\1\0\6\45\1\u01da\3\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\1\45\1\u01db\10\45\1\u01db\13\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\10\45\1\u01dc\15\45\1\0\6\45"+
    "\1\u01dc\3\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\u01dd\1\0\13\45\27\0\21\45\1\u01dd\4\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\6\45\1\u01de\17\45"+
    "\1\0\5\45\1\u01de\4\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\10\45"+
    "\1\u01df\15\45\1\0\6\45\1\u01df\3\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\14\45\1\u01e0\11\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\u01e1\1\0\13\45"+
    "\27\0\21\45\1\u01e1\4\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\10\45\1\u01e2\15\45\1\0\6\45\1\u01e2\3\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\21\45\1\u01e3\4\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\4\45\1\u01e4\21\45\1\0\3\45"+
    "\1\u01e4\6\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\u01e5\1\0\13\45\27\0\21\45\1\u01e5\4\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\5\45\1\u01e6\5\45\27\0\11\45"+
    "\1\u01e6\14\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\12\45"+
    "\1\u01e7\13\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\6\45"+
    "\1\u01e8\17\45\1\0\5\45\1\u01e8\4\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\21\45\1\u01e9\4\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\2\45"+
    "\1\u01ea\10\45\27\0\7\45\1\u01ea\16\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\6\45\1\u01eb\17\45\1\0\5\45"+
    "\1\u01eb\4\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\4\45\1\u01ec\21\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\6\45\1\u01ed\17\45"+
    "\1\0\5\45\1\u01ed\4\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\5\45\1\u01ee\5\45"+
    "\27\0\11\45\1\u01ee\14\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\3\45"+
    "\1\u01ef\7\45\27\0\16\45\1\u01ef\7\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\10\45\1\u01f0\15\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\20\45\1\u01f1\5\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\6\45\1\u01f2\4\45\1\u01f3\12\45"+
    "\1\0\1\45\1\u01f3\3\45\1\u01f2\4\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\23\45\1\u01f4\2\45\1\0\2\45\1\u01f4\7\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\10\45\1\u01f5\15\45\1\0\6\45"+
    "\1\u01f5\3\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\u01f6\1\0\13\45\27\0\21\45\1\u01f6\4\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\2\45\1\u01f7\2\45"+
    "\1\u01f7\20\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\13\45"+
    "\1\u01f8\12\45\1\0\1\45\1\u01f8\10\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\23\45\1\u01f9\2\45\1\0\2\45\1\u01f9\7\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\21\45\1\u01fa\4\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\6\45\1\u01fb\17\45\1\0\5\45"+
    "\1\u01fb\4\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\2\45\1\u01fc\2\45"+
    "\1\u01fc\11\45\1\u01fd\6\45\1\0\12\45\5\0\4\45"+
    "\1\0\1\u01fd\2\45\2\0\2\45\1\0\1\u01fe\1\0"+
    "\13\45\27\0\21\45\1\u01fe\4\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\10\45\1\u01ff\15\45\1\0\6\45\1\u01ff"+
    "\3\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\u0200\1\0\13\45\27\0\21\45\1\u0200\4\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\14\0\1\u0201\45\0"+
    "\1\u0201\60\0\1\u0202\45\0\1\u0202\117\0\1\u0203\2\0"+
    "\1\u0203\143\0\1\u0204\31\0\1\u0204\53\0\1\u0205\10\0"+
    "\1\u0205\114\0\1\u0206\13\0\1\u0206\151\0\1\u0207\75\0"+
    "\1\u0208\25\0\1\u0208\72\0\1\u0209\13\0\1\u0209\125\0"+
    "\1\u020a\14\0\1\u020a\27\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\10\45\1\u020b\15\45\1\0\6\45\1\u020b"+
    "\3\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\10\45\1\u020c\15\45\1\0"+
    "\6\45\1\u020c\3\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\u01a3\1\0\1\u01a3\1\0\13\u01a3\27\0\26\u01a3\1\0"+
    "\12\u01a3\4\0\1\u020d\4\u01a3\1\0\3\u01a3\1\0\2\150"+
    "\1\0\1\150\1\0\2\150\3\0\1\150\1\0\2\150"+
    "\2\0\1\150\1\0\3\150\1\0\1\u01a4\1\150\1\u0118"+
    "\1\150\1\0\15\150\26\0\1\150\12\0\5\150\4\0"+
    "\1\150\3\0\22\150\1\0\3\150\2\0\1\150\1\u0118"+
    "\1\150\1\u01a6\74\150\21\220\1\221\3\220\1\221\14\220"+
    "\1\221\4\220\1\221\23\220\1\u020e\5\220\1\u020e\25\220"+
    "\63\0\1\u01af\14\0\1\u01af\106\0\1\u020f\24\0\1\u020f"+
    "\25\0\1\u020f\64\0\1\u020f\36\0\2\u013b\1\0\1\u013b"+
    "\1\0\2\u013b\1\u0210\10\u013b\2\u013c\2\0\1\u013c\22\0"+
    "\7\u013b\1\u0210\16\u013b\1\0\12\u013b\5\0\4\u013b\1\u013d"+
    "\3\u013b\2\0\2\u013b\1\0\1\u013b\1\0\13\u013b\2\u013c"+
    "\2\0\1\u013c\22\0\6\u013b\1\u0211\17\u013b\1\0\5\u013b"+
    "\1\u0211\4\u013b\5\0\4\u013b\1\u013d\3\u013b\2\0\2\u013b"+
    "\1\0\1\u0212\1\0\13\u013b\2\u013c\2\0\1\u013c\22\0"+
    "\21\u013b\1\u0212\4\u013b\1\0\12\u013b\5\0\4\u013b\1\u013d"+
    "\3\u013b\100\0\1\u0213\3\0\1\u0213\77\0\1\u0214\25\0"+
    "\1\u0214\25\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\10\45\1\u0215\15\45\1\0\6\45\1\u0215\3\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\2\45\1\u0216\2\45\1\u0216\20\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\24\45\1\u0217\1\45\1\0"+
    "\12\45\5\0\1\45\1\u0217\2\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\1\u0218\13\45"+
    "\1\u0218\11\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\1\45"+
    "\1\u0219\10\45\1\u0219\13\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\2\45\1\u021a\2\45\1\u021a\20\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\1\45\1\u021b\10\45\1\u021b\13\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\6\45\1\u021c\17\45"+
    "\1\0\5\45\1\u021c\4\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\10\45"+
    "\1\u021d\15\45\1\0\6\45\1\u021d\3\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\2\45\1\u021e\2\45\1\u021e\20\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\5\45\1\u021f\5\45\27\0\11\45\1\u021f\14\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\u0220\1\0\13\45\27\0\21\45\1\u0220\4\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\2\45\1\u0221\10\45\27\0\7\45"+
    "\1\u0221\16\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\26\45"+
    "\1\0\12\45\5\0\2\45\1\u0222\1\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\26\45"+
    "\1\0\11\45\1\u0223\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\2\u0224\2\0\1\u0224"+
    "\22\0\26\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\4\45"+
    "\1\u0225\21\45\1\0\3\45\1\u0225\6\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\26\45\1\0\12\45\5\0\1\u0226\3\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\1\45\1\u0227\10\45\1\u0227\13\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\u0228\1\0"+
    "\13\45\27\0\21\45\1\u0228\4\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\10\45\1\u0229\15\45\1\0\6\45\1\u0229"+
    "\3\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\6\45\1\u022a\17\45\1\0"+
    "\5\45\1\u022a\4\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\26\45\1\0"+
    "\12\45\5\0\3\45\1\u022b\1\0\3\45\2\0\2\u01cf"+
    "\1\0\1\u01cf\1\0\13\u01cf\1\u022c\3\0\1\u022d\22\0"+
    "\26\u01cf\1\0\12\u01cf\5\0\4\u01cf\1\0\3\u01cf\3\0"+
    "\1\u022e\1\0\1\u022e\2\0\3\u022e\1\0\1\u022e\1\0"+
    "\3\u022e\30\0\26\u022e\1\0\12\u022e\5\0\4\u022e\1\0"+
    "\3\u022e\3\0\1\u022f\1\0\1\u022f\2\0\3\u022f\1\0"+
    "\1\u022f\1\0\3\u022f\30\0\26\u022f\1\0\12\u022f\5\0"+
    "\4\u022f\1\0\3\u022f\51\0\1\u0230\13\0\1\u0230\43\0"+
    "\2\45\1\0\1\45\1\0\5\45\1\u0231\5\45\27\0"+
    "\11\45\1\u0231\14\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\1\u0232\13\45\1\u0232\11\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\4\45\1\u0233\21\45\1\0\3\45\1\u0233\6\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\1\u0234\13\45\1\u0234\11\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\26\45\1\0\12\45\5\0"+
    "\1\u0235\3\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\13\45\1\u0236\12\45\1\0\1\45"+
    "\1\u0236\10\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\26\45\1\0\10\45"+
    "\1\u0237\1\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\1\45\1\u0238\10\45"+
    "\1\u0238\13\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\1\u0239"+
    "\13\45\1\u0239\11\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\u023a\1\0\13\45\27\0"+
    "\1\45\1\u023b\10\45\1\u023b\6\45\1\u023a\4\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\26\45\1\0\10\45\1\u023c"+
    "\1\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\12\45\1\u023d\13\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\6\45\1\u023e\17\45\1\0"+
    "\5\45\1\u023e\4\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\u023f\1\0\13\45\27\0\21\45\1\u023f"+
    "\4\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\14\45\1\u0240"+
    "\11\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\6\45\1\u0241"+
    "\17\45\1\0\5\45\1\u0241\4\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\26\45\1\0\12\45\5\0\2\45\1\u0242\1\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\6\45\1\u0243\17\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\23\45\1\u0244\2\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\4\45\1\u0245\21\45\1\0\3\45\1\u0245\6\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\5\45\1\u0246\20\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\23\45\1\u0247\2\45\1\0\2\45\1\u0247"+
    "\7\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\1\45\1\u0248\10\45\1\u0248"+
    "\13\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\4\45\1\u0249"+
    "\21\45\1\0\3\45\1\u0249\6\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\6\45\1\u024a\17\45\1\0\5\45\1\u024a\4\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\26\45\1\0\11\45\1\u024b\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\1\45\1\u024c\10\45\1\u024c\13\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\u024d"+
    "\1\0\13\45\27\0\21\45\1\u024d\4\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\13\45\1\u024e\12\45\1\0\1\45"+
    "\1\u024e\10\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\26\45\1\0\11\45"+
    "\1\u024f\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\20\45\1\u0250\5\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\u0251\1\0\13\45\27\0\21\45\1\u0251\4\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\6\45\1\u0252\17\45\1\0"+
    "\5\45\1\u0252\4\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\1\45\1\u0253"+
    "\10\45\1\u0253\13\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\2\45\1\u0254\2\45\1\u0254\20\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\4\45\1\u0255\21\45\1\0\3\45\1\u0255"+
    "\6\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\6\45\1\u0256\17\45\1\0"+
    "\5\45\1\u0256\4\45\5\0\4\45\1\0\3\45\52\0"+
    "\1\u0257\10\0\1\u0257\124\0\1\u0258\24\0\1\u0258\72\0"+
    "\1\u0259\10\0\1\u0259\50\0\1\u025a\64\0\1\u025a\115\0"+
    "\1\u025b\24\0\1\u025b\72\0\1\u025c\10\0\1\u025c\55\0"+
    "\1\u025d\54\0\1\u025d\44\0\1\u025e\15\0\1\u025b\46\0"+
    "\1\u025e\4\0\1\u025f\104\0\1\u0260\25\0\1\u0260\30\0"+
    "\1\u0257\64\0\1\u0257\36\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\3\45\1\u0261\14\45\1\u0261\5\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\u0262\1\0\13\45\27\0\21\45\1\u0262\4\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\1\0\21\220\1\221"+
    "\3\220\1\221\14\220\1\221\4\220\1\221\1\u0263\13\220"+
    "\1\u0263\42\220\1\0\2\u013b\1\0\1\u013b\1\0\13\u013b"+
    "\2\u0264\2\0\1\u0264\22\0\26\u013b\1\0\12\u013b\5\0"+
    "\4\u013b\1\u0265\3\u013b\2\0\2\u013b\1\0\1\u013b\1\0"+
    "\13\u013b\2\u013c\2\0\1\u013c\22\0\4\u013b\1\u0266\21\u013b"+
    "\1\0\3\u013b\1\u0266\6\u013b\5\0\4\u013b\1\u013d\3\u013b"+
    "\2\0\2\u013b\1\0\1\u013b\1\0\13\u013b\2\u013c\2\0"+
    "\1\u013c\22\0\2\u013b\1\u0267\2\u013b\1\u0267\20\u013b\1\0"+
    "\12\u013b\5\0\4\u013b\1\u013d\3\u013b\100\0\1\u0268\3\0"+
    "\1\u0268\24\0\2\45\1\0\1\u0269\1\0\13\45\27\0"+
    "\21\45\1\u0269\4\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\23\45\1\u026a\2\45\1\0\2\45\1\u026a\7\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\u026b\1\0"+
    "\13\45\27\0\21\45\1\u026b\4\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\1\45\1\u026c\1\0\1\45"+
    "\1\0\13\45\27\0\26\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\4\45\1\u026d\21\45\1\0\3\45\1\u026d\6\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\u026e"+
    "\1\0\13\45\27\0\21\45\1\u026e\4\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\13\45\1\u026f\12\45\1\0\1\45"+
    "\1\u026f\10\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\26\45\1\0\11\45"+
    "\1\u0270\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\6\45\1\u0271\17\45\1\0"+
    "\5\45\1\u0271\4\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\3\45\1\u0272"+
    "\14\45\1\u0272\5\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\1\u0273\13\45\1\u0273\11\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\23\45\1\u0274\2\45\1\0\2\45\1\u0274\7\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\4\45\1\u0275\21\45\1\0\3\45"+
    "\1\u0275\6\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\4\45\1\u0276\21\45"+
    "\1\0\3\45\1\u0276\6\45\5\0\4\45\1\0\3\45"+
    "\3\0\1\u0277\1\0\1\u0278\2\0\3\u0277\1\0\1\u0277"+
    "\3\0\1\u0277\1\0\2\u0224\2\0\1\u0224\22\0\4\u0277"+
    "\1\u0279\14\u0277\1\u0278\4\u0277\1\0\3\u0277\1\u0279\6\u0277"+
    "\5\0\4\u0277\1\0\3\u0277\2\0\2\45\1\0\1\45"+
    "\1\0\2\45\1\u027a\10\45\27\0\7\45\1\u027a\16\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\23\45\1\u027b\2\45"+
    "\1\0\2\45\1\u027b\7\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\10\45"+
    "\1\u027c\15\45\1\0\6\45\1\u027c\3\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\4\45\1\u027d\21\45\1\0\3\45\1\u027d\6\45"+
    "\5\0\4\45\1\0\3\45\22\0\1\u022c\106\0\2\u022e"+
    "\1\0\1\u022e\1\0\13\u022e\6\0\1\u027e\20\0\26\u022e"+
    "\1\0\12\u022e\5\0\4\u022e\1\0\3\u022e\2\0\2\u022f"+
    "\1\0\1\u022f\1\0\13\u022f\27\0\26\u022f\1\0\12\u022f"+
    "\1\u027f\4\0\4\u022f\1\0\3\u022f\55\0\1\u0280\25\0"+
    "\1\u0280\25\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\2\45\1\u0281\2\45\1\u0281\20\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\2\45\1\u0282\2\45\1\u0282\20\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\1\u0283\13\45\1\u0283\11\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\1\45\1\u0284\10\45"+
    "\1\u0284\13\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\26\45"+
    "\1\0\1\u0285\3\45\1\u0285\5\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\10\45\1\u0286\15\45\1\0\6\45\1\u0286\3\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\1\u0287\13\45\1\u0287\11\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\2\45\1\u0288\10\45\27\0\7\45\1\u0288\16\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\1\45\1\u0289\10\45"+
    "\1\u0289\13\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\2\45"+
    "\1\u028a\2\45\1\u028a\20\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\3\45\1\u028b\14\45\1\u028b\5\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\16\45\1\u028c\7\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\24\45\1\u028d\1\45\1\0\12\45"+
    "\5\0\1\45\1\u028d\2\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\6\45\1\u028e\17\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\23\45\1\u028f\2\45"+
    "\1\0\2\45\1\u028f\7\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\15\45"+
    "\1\u0290\10\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\26\45"+
    "\1\0\11\45\1\u0291\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\10\45\1\u0292"+
    "\15\45\1\0\6\45\1\u0292\3\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\2\45\1\u0293\2\45\1\u0293\20\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\3\45\1\u0294\7\45\27\0\16\45\1\u0294\7\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\23\45\1\u0295\2\45\1\0"+
    "\2\45\1\u0295\7\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\6\45\1\u0296"+
    "\17\45\1\0\5\45\1\u0296\4\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\6\45\1\u0297\17\45\1\0\5\45\1\u0297\4\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\23\45\1\u0298\2\45\1\0\2\45\1\u0298"+
    "\7\45\5\0\4\45\1\0\3\45\57\0\1\u025b\25\0"+
    "\1\u025b\26\0\1\u0299\15\0\1\u025b\46\0\1\u0299\4\0"+
    "\1\u025f\100\0\1\u025c\13\0\1\u025c\135\0\1\u0257\5\0"+
    "\1\u0257\47\0\1\u025b\53\0\1\u025f\146\0\1\u025b\70\0"+
    "\1\u029a\24\0\1\u029a\106\0\1\u029b\20\0\1\u029b\72\0"+
    "\1\u029c\2\0\1\u029c\52\0\2\45\1\0\1\45\1\0"+
    "\13\45\2\u029d\2\0\1\u029d\22\0\26\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\1\0\21\220\1\221\3\220"+
    "\1\221\14\220\1\221\4\220\1\221\4\220\1\u029e\25\220"+
    "\1\u029e\24\220\21\0\2\u0264\2\0\1\u0264\74\0\1\u0265"+
    "\126\0\1\u029f\5\0\2\u013b\1\0\1\u013b\1\0\13\u013b"+
    "\2\u013c\2\0\1\u013c\22\0\23\u013b\1\u0210\2\u013b\1\0"+
    "\2\u013b\1\u0210\7\u013b\5\0\4\u013b\1\u013d\3\u013b\2\0"+
    "\2\u013b\1\0\1\u013b\1\0\13\u013b\2\u013c\2\0\1\u013c"+
    "\22\0\6\u013b\1\u0210\17\u013b\1\0\5\u013b\1\u0210\4\u013b"+
    "\5\0\4\u013b\1\u013d\3\u013b\57\0\1\u02a0\25\0\1\u02a0"+
    "\23\0\1\45\1\u02a1\1\0\1\45\1\0\13\45\27\0"+
    "\26\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\6\45\1\u02a2"+
    "\17\45\1\0\5\45\1\u02a2\4\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\13\45\1\u02a3\12\45\1\0\1\45\1\u02a3\10\45\5\0"+
    "\4\45\1\0\3\45\2\0\1\45\1\u02a4\1\0\1\45"+
    "\1\0\13\45\27\0\26\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\6\45\1\u02a5\17\45\1\0\5\45\1\u02a5\4\45"+
    "\5\0\4\45\1\0\3\45\2\0\1\45\1\u02a6\1\0"+
    "\1\45\1\0\13\45\27\0\26\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\13\45\1\u02a7\12\45\1\0\1\45\1\u02a7"+
    "\10\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\5\45\1\u02a8\5\45\27\0\11\45\1\u02a8"+
    "\14\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\1\45\1\u02a9\1\0\1\45\1\0\13\45\27\0\26\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\13\45\1\u02aa\12\45"+
    "\1\0\1\45\1\u02aa\10\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\u02ab\1\0\13\45\27\0\21\45"+
    "\1\u02ab\4\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\10\45"+
    "\1\u02ac\15\45\1\0\6\45\1\u02ac\3\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\6\45\1\u02ad\17\45\1\0\5\45\1\u02ad\4\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\10\45\1\u02ae\15\45\1\0\6\45"+
    "\1\u02ae\3\45\5\0\4\45\1\0\3\45\10\0\1\u02af"+
    "\65\0\1\u02af\125\0\1\u02b0\22\0\1\u02b0\10\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\26\45\1\0\11\45"+
    "\1\u02b1\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\26\45\1\0\12\45\5\0"+
    "\1\u02b2\3\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\5\45\1\u02b3\5\45\27\0\11\45\1\u02b3\14\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\22\0\1\u022c"+
    "\3\0\1\u022d\122\0\1\u02b4\3\0\1\u02b5\200\0\1\u02b6"+
    "\3\0\1\u02b6\24\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\10\45\1\u02b7\15\45\1\0\6\45\1\u02b7\3\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\u02b8"+
    "\1\0\13\45\27\0\21\45\1\u02b8\4\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\23\45\1\u02b9\2\45\1\0\2\45"+
    "\1\u02b9\7\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\1\45\1\u02ba\10\45"+
    "\1\u02ba\13\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\6\45"+
    "\1\u02bb\17\45\1\0\5\45\1\u02bb\4\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\u02bc\1\0\13\45"+
    "\27\0\21\45\1\u02bc\4\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\1\45\1\u02bd\10\45\1\u02bd\13\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\3\45\1\u02be\14\45\1\u02be\5\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\23\45\1\u02bf\2\45"+
    "\1\0\2\45\1\u02bf\7\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\u02c0\1\0\13\45\27\0\21\45"+
    "\1\u02c0\4\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\10\45"+
    "\1\u02c1\15\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\u02c2\1\0\13\45\27\0\21\45"+
    "\1\u02c2\4\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\26\45"+
    "\1\0\10\45\1\u02c3\1\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\10\45"+
    "\1\u02c4\15\45\1\0\6\45\1\u02c4\3\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\6\45\1\u02c5\17\45\1\0\5\45\1\u02c5\4\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\u02c6"+
    "\1\0\13\45\27\0\21\45\1\u02c6\4\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\52\0\1\u02c7\10\0\1\u02c7"+
    "\50\0\1\u025b\64\0\1\u025b\41\0\1\u02c8\64\0\1\u02c8"+
    "\122\0\1\u025b\20\0\1\u025b\30\0\1\u02c9\10\0\2\u029d"+
    "\2\0\1\u029d\31\0\1\u02c9\47\0\21\220\1\221\3\220"+
    "\1\221\14\220\1\221\4\220\1\221\27\220\1\u02ca\3\220"+
    "\1\u02ca\23\220\21\0\2\u02cb\2\0\1\u02cb\102\0\1\45"+
    "\1\u02cc\1\0\1\45\1\0\13\45\27\0\26\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\4\45\1\u02cd\21\45\1\0"+
    "\3\45\1\u02cd\6\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\26\45\1\0"+
    "\1\u02ce\3\45\1\u02ce\5\45\5\0\4\45\1\0\3\45"+
    "\2\0\1\45\1\u02cf\1\0\1\45\1\0\13\45\27\0"+
    "\26\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\1\45\1\u02d0\1\0\1\45\1\0\13\45\27\0\26\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\1\45"+
    "\1\u02d1\1\0\1\45\1\0\13\45\27\0\26\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\3\45\1\u02d2\14\45\1\u02d2"+
    "\5\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\23\45\1\u02d3"+
    "\2\45\1\0\2\45\1\u02d3\7\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\1\45\1\u02d4\10\45\1\u02d4\13\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\1\45\1\u02d5\10\45\1\u02d5\13\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\23\45\1\u02d6\2\45\1\0"+
    "\2\45\1\u02d6\7\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\u02d7\1\0\13\45\27\0\21\45\1\u02d7"+
    "\4\45\1\0\12\45\5\0\4\45\1\0\3\45\57\0"+
    "\1\u02d8\25\0\1\u02d8\121\0\1\u02d9\3\0\1\u02d9\24\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\2\45\1\u02da"+
    "\2\45\1\u02da\20\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\22\0\1\u02b4\163\0\1\u02db\25\0\1\u02db\23\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\26\45\1\0"+
    "\12\45\5\0\1\u02dc\3\45\1\0\3\45\2\0\1\45"+
    "\1\u02dd\1\0\1\45\1\0\13\45\27\0\26\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\6\45\1\u02de\17\45\1\0"+
    "\5\45\1\u02de\4\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\23\45\1\u02df"+
    "\2\45\1\0\2\45\1\u02df\7\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\23\45\1\u02e0\2\45\1\0\2\45\1\u02e0\7\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\5\45\1\u02e1\5\45\27\0\11\45\1\u02e1\14\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\u02e2\1\0\13\45\27\0\21\45\1\u02e2\4\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\1\45\1\u02e3"+
    "\1\0\1\45\1\0\13\45\27\0\26\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\21\45\1\u02e4\4\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\2\45\1\u02e5\2\45\1\u02e5\20\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\u02e6\1\0\13\45\27\0\21\45\1\u02e6\4\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\u02e7\1\0\13\45\27\0\21\45\1\u02e7\4\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\u02e8\1\0\13\45\27\0\21\45\1\u02e8\4\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\53\0\1\u025b"+
    "\2\0\1\u025b\121\0\1\u025b\13\0\1\u025b\112\0\1\u02e9"+
    "\13\0\1\u02e9\42\0\21\220\1\221\3\220\1\221\14\220"+
    "\1\221\4\220\1\221\6\220\1\u02ea\25\220\1\u02ea\22\220"+
    "\21\0\2\u02cb\2\0\1\u02cb\32\0\1\u02eb\24\0\1\u02eb"+
    "\22\0\2\45\1\0\1\45\1\0\5\45\1\u02ec\5\45"+
    "\27\0\11\45\1\u02ec\14\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\1\45\1\u02ed\10\45\1\u02ed\13\45\1\0\12\45"+
    "\5\0\4\45\1\0\3\45\2\0\1\45\1\u02ee\1\0"+
    "\1\45\1\0\13\45\27\0\26\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\1\45\1\u02ef\1\0\1\45"+
    "\1\0\13\45\27\0\26\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\1\45\1\u02f0\1\0\1\45\1\0"+
    "\13\45\27\0\26\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\5\45\1\u02f1"+
    "\5\45\27\0\11\45\1\u02f1\14\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\23\45\1\u02f2\2\45\1\0\2\45\1\u02f2"+
    "\7\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\1\u02f3\13\45\1\u02f3\11\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\2\0\2\45"+
    "\1\0\1\45\1\0\13\45\27\0\26\45\1\0\11\45"+
    "\1\u02f4\5\0\4\45\1\0\3\45\5\0\1\u02f5\64\0"+
    "\1\u02f5\115\0\1\u02f6\24\0\1\u02f6\55\0\1\u02f7\73\0"+
    "\2\45\1\0\1\45\1\0\5\45\1\u02f8\5\45\27\0"+
    "\11\45\1\u02f8\14\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\u02f9\1\0\13\45\27\0"+
    "\21\45\1\u02f9\4\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\u02fa\1\0\13\45\27\0"+
    "\21\45\1\u02fa\4\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\2\45\1\u02fb"+
    "\10\45\27\0\7\45\1\u02fb\16\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\5\45\1\u02fc\5\45\27\0\11\45\1\u02fc\14\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\5\45\1\u02fd\5\45\27\0\11\45\1\u02fd"+
    "\14\45\1\0\12\45\5\0\4\45\1\0\3\45\2\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\6\45\1\u02fe"+
    "\17\45\1\0\5\45\1\u02fe\4\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\3\45\1\u02ff\14\45\1\u02ff\5\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\14\0\1\u0300\45\0\1\u0300\45\0"+
    "\21\220\1\221\3\220\1\221\6\220\1\u0301\5\220\1\221"+
    "\4\220\1\221\57\220\51\0\1\u0302\10\0\1\u0302\45\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\2\45\1\u0303"+
    "\2\45\1\u0303\20\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\23\45\1\u0304\2\45\1\0\2\45\1\u0304\7\45\5\0"+
    "\4\45\1\0\3\45\2\0\1\45\1\u0305\1\0\1\45"+
    "\1\0\13\45\27\0\26\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\24\45\1\u0306\1\45\1\0\12\45\5\0\1\45"+
    "\1\u0306\2\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\26\45\1\0\11\45\1\u0307\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\u0308\1\0"+
    "\13\45\27\0\21\45\1\u0308\4\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\53\0\1\u0309\2\0\1\u0309\55\0"+
    "\1\u030a\64\0\1\u030a\56\0\2\u02f7\2\0\1\u02f7\102\0"+
    "\2\45\1\0\1\45\1\0\13\45\27\0\2\45\1\u030b"+
    "\2\45\1\u030b\20\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\2\45\1\u030c"+
    "\10\45\27\0\7\45\1\u030c\16\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\2\45\1\u030d\2\45\1\u030d\20\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\2\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\13\45\1\u030e\12\45\1\0"+
    "\1\45\1\u030e\10\45\5\0\4\45\1\0\3\45\75\0"+
    "\1\u030f\22\0\1\u030f\7\0\21\220\1\u0310\1\u0301\2\220"+
    "\1\u0310\14\220\1\221\4\220\1\221\57\220\52\0\1\u0311"+
    "\2\0\1\u0311\52\0\1\45\1\u0312\1\0\1\45\1\0"+
    "\13\45\27\0\26\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\u0313\1\0\13\45\27\0"+
    "\21\45\1\u0313\4\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\2\45\1\0\1\45\1\0\13\45\27\0"+
    "\26\45\1\0\1\u0314\3\45\1\u0314\5\45\5\0\4\45"+
    "\1\0\3\45\54\0\1\u0315\14\0\1\u0315\132\0\1\u0316"+
    "\22\0\1\u0316\10\0\2\45\1\0\1\45\1\0\13\45"+
    "\27\0\23\45\1\u0317\2\45\1\0\2\45\1\u0317\7\45"+
    "\5\0\4\45\1\0\3\45\2\0\2\45\1\0\1\45"+
    "\1\0\13\45\27\0\23\45\1\u0318\2\45\1\0\2\45"+
    "\1\u0318\7\45\5\0\4\45\1\0\3\45\66\0\1\u0319"+
    "\20\0\1\u0319\21\0\1\45\1\u031a\1\0\1\45\1\0"+
    "\13\45\27\0\26\45\1\0\12\45\5\0\4\45\1\0"+
    "\3\45\2\0\1\45\1\u031b\1\0\1\45\1\0\13\45"+
    "\27\0\26\45\1\0\12\45\5\0\4\45\1\0\3\45"+
    "\2\0\2\45\1\0\1\45\1\0\13\45\27\0\4\45"+
    "\1\u031c\21\45\1\0\3\45\1\u031c\6\45\5\0\4\45"+
    "\1\0\3\45\64\0\1\u031d\14\0\1\u031d\32\0\1\u031e"+
    "\64\0\1\u031e\36\0\2\45\1\0\1\u031f\1\0\13\45"+
    "\27\0\21\45\1\u031f\4\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\2\0\2\45\1\0\1\u0320\1\0\13\45"+
    "\27\0\21\45\1\u0320\4\45\1\0\12\45\5\0\4\45"+
    "\1\0\3\45\110\0\1\u0321\20\0\1\45\1\u0322\1\0"+
    "\1\45\1\0\13\45\27\0\26\45\1\0\12\45\5\0"+
    "\4\45\1\0\3\45\2\0\2\45\1\0\1\45\1\0"+
    "\13\45\27\0\10\45\1\u0323\15\45\1\0\6\45\1\u0323"+
    "\3\45\5\0\4\45\1\0\3\45\53\0\1\u0324\2\0"+
    "\1\u0324\122\0\1\u0325\10\0\1\u0325\45\0\2\45\1\0"+
    "\1\u0326\1\0\13\45\27\0\21\45\1\u0326\4\45\1\0"+
    "\12\45\5\0\4\45\1\0\3\45\57\0\1\u0315\25\0"+
    "\1\u0315\107\0\1\u0327\20\0\1\u0327\21\0\2\45\1\0"+
    "\1\45\1\0\13\45\27\0\1\u0328\13\45\1\u0328\11\45"+
    "\1\0\12\45\5\0\4\45\1\0\3\45\5\0\1\u0329"+
    "\64\0\1\u0329\56\0\2\u0329\2\0\1\u0329\5\0\1\u032a"+
    "\114\0\2\u032a\2\0\1\u032a\1\0\1\u032b\47\0\1\u032c"+
    "\3\0\1\u032c\5\0\1\u032d\114\0\1\u032e\3\0\1\u032e"+
    "\133\0\1\u032f\115\0\1\u0330\3\0\1\u0330\133\0\1\u0331"+
    "\115\0\1\u0332\3\0\1\u0332\133\0\1\u0333\115\0\1\u0334"+
    "\3\0\1\u0334\44\0\2\u0332\2\0\1\u0332\6\0\1\u0335"+
    "\171\0\1\u0336\3\0\1\u0336\52\0\1\u0332\210\0\1\u0332"+
    "\15\0";

  private static int [] zzUnpackTrans() {
    int [] result = new int[56550];
    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 =
    "\27\0\2\1\1\11\14\1\2\11\2\1\3\11\13\1"+
    "\1\11\27\1\1\11\6\1\1\11\2\1\1\11\6\1"+
    "\1\11\13\1\1\11\10\1\1\11\3\1\1\0\2\1"+
    "\1\11\3\1\2\11\2\1\1\11\1\1\2\11\1\1"+
    "\1\11\4\0\1\1\1\11\4\1\1\11\2\1\1\11"+
    "\6\1\1\0\2\1\2\0\1\1\1\0\2\1\1\0"+
    "\6\1\1\11\3\0\5\1\1\0\1\1\1\0\2\1"+
    "\2\0\1\11\2\0\2\1\1\0\1\1\1\11\1\1"+
    "\1\0\53\1\13\0\1\11\2\1\1\11\3\0\3\1"+
    "\3\11\1\1\3\0\3\1\1\11\1\0\1\11\3\0"+
    "\1\1\1\0\1\11\1\0\1\11\3\0\1\1\1\0"+
    "\2\1\1\11\1\0\1\11\1\0\1\11\3\0\1\11"+
    "\1\0\1\1\1\0\1\11\1\0\2\11\2\1\5\0"+
    "\1\11\3\0\1\11\2\0\10\1\1\0\17\1\1\0"+
    "\1\1\3\0\1\11\61\1\12\0\2\1\1\11\2\1"+
    "\1\11\1\1\1\0\1\11\1\0\5\11\1\1\10\0"+
    "\32\1\4\0\56\1\12\0\2\1\1\11\1\1\1\11"+
    "\3\0\1\11\1\0\17\1\1\0\7\1\1\11\1\1"+
    "\3\0\46\1\10\0\1\11\1\0\3\1\1\0\1\1"+
    "\3\0\16\1\1\11\6\1\3\0\30\1\5\0\1\1"+
    "\1\11\17\1\2\0\3\1\1\11\1\1\1\0\20\1"+
    "\3\0\1\1\1\0\14\1\2\0\1\1\1\0\15\1"+
    "\1\0\1\1\1\0\11\1\2\0\11\1\1\0\1\1"+
    "\1\0\6\1\2\0\4\1\1\11\1\1\1\0\3\1"+
    "\2\0\2\1\1\0\3\1\1\11\1\0\2\1\1\0"+
    "\2\1\2\0\1\1\1\0\1\1\14\0\1\11\1\0";

  private static int [] zzUnpackAttribute() {
    int [] result = new int[822];
    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 = false;

  /* user code: */

    private final ByteStack stack = new ByteStack();
    private final Deque<String> heredocStack = new ArrayDeque<>();
    private String heredoc = null;
    private int parenBalanceInScripting = 0; // for named arguments [NETBEANS-4443] PHP 8.0
    private int parenBalanceInConst = 0; // for context sensitive lexer
    private int bracketBalanceInConst = 0; // for context sensitive lexer
    private boolean aspTagsAllowed;
    private boolean shortTagsAllowed;
    private boolean isInConst;
    private LexerInput input;

    public PHP5ColoringLexer(LexerRestartInfo info, boolean shortTagsAllowed, boolean aspTagsAllowed, boolean inPHP) {
        this.input = info.input();
        this.aspTagsAllowed = aspTagsAllowed;
        this.shortTagsAllowed = shortTagsAllowed;

        if (info.state() != null) {
            //reset state
            setState((LexerState) info.state());
        } else {
            //initial state
            stack.push(YYINITIAL);
            if (inPHP) {
                stack.push(ST_PHP_IN_SCRIPTING);
                zzState = ST_PHP_IN_SCRIPTING;
                zzLexicalState = ST_PHP_IN_SCRIPTING;
            } else {
                zzState = YYINITIAL;
                zzLexicalState = YYINITIAL;
            }
        }

    }

    public static final class LexerState  {
        final ByteStack stack;
        /* the current state of the DFA */
        final int zzState;
        /* the current lexical state */
        final int zzLexicalState;
        /* remember the heredoc */
        final String heredoc;
        final int parenBalanceInScripting;
        final Deque<String> heredocStack;

        LexerState(ByteStack stack, int zzState, int zzLexicalState, String heredoc, int parenBalanceInScripting, Deque<String> heredocStack) {
            this.stack = stack;
            this.zzState = zzState;
            this.zzLexicalState = zzLexicalState;
            this.heredoc = heredoc;
            this.parenBalanceInScripting = parenBalanceInScripting;
            this.heredocStack = heredocStack;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }

            if (obj == null || obj.getClass() != this.getClass()) {
                return false;
            }

            LexerState state = (LexerState) obj;
            return (this.stack.equals(state.stack)
                && (this.zzState == state.zzState)
                && (this.zzLexicalState == state.zzLexicalState)
                && ((this.heredoc == null && state.heredoc == null) || (this.heredoc != null && state.heredoc != null && this.heredoc.equals(state.heredoc))))
                && (this.parenBalanceInScripting == state.parenBalanceInScripting)
                && (this.heredocStack.equals(state.heredocStack));
        }

        @Override
        public int hashCode() {
            int hash = 7;
            hash = 29 * hash + Objects.hashCode(this.stack);
            hash = 29 * hash + this.zzState;
            hash = 29 * hash + this.zzLexicalState;
            hash = 29 * hash + Objects.hashCode(this.heredoc);
            hash = 29 * hash + this.parenBalanceInScripting;
            hash = 29 * hash + Objects.hashCode(this.heredocStack);
            return hash;
        }
    }

    public LexerState getState() {
        return new LexerState(stack.copyOf(), zzState, zzLexicalState, heredoc, parenBalanceInScripting, new ArrayDeque<>(heredocStack));
    }

    public void setState(LexerState state) {
        this.stack.copyFrom(state.stack);
        this.zzState = state.zzState;
        this.zzLexicalState = state.zzLexicalState;
        this.heredoc = state.heredoc;
        this.parenBalanceInScripting = state.parenBalanceInScripting;
        this.heredocStack.clear();
        this.heredocStack.addAll(state.heredocStack);
    }

    protected boolean isHeredocState(int state) {
        return state == ST_PHP_HEREDOC || state == ST_PHP_START_HEREDOC || state == ST_PHP_END_HEREDOC || state == ST_PHP_NOWDOC;
    }

    public int[] getParamenters() {
        return new int[]{zzMarkedPos, zzPushbackPos, zzCurrentPos, zzStartRead, zzEndRead, yyline, zzLexicalState};
    }

    protected int getZZLexicalState() {
        return zzLexicalState;
    }

    protected int getZZMarkedPos() {
        return zzMarkedPos;
    }

    protected int getZZEndRead() {
        return zzEndRead;
    }

    public char[] getZZBuffer() {
        return zzBuffer;
    }

    protected int getZZStartRead() {
        return this.zzStartRead;
    }

    protected int getZZPushBackPosition() {
        return this.zzPushbackPos;
    }

    protected void pushBack(int i) {
        yypushback(i);
    }

    protected void popState() {
        yybegin(stack.pop());
    }

    protected void pushState(final int state) {
        stack.push(getZZLexicalState());
        yybegin(state);
    }

    private boolean isLabelChar(char c) {
        return c == '_'
                || (c >= 'a' && c <= 'z')
                || (c >= 'A' && c <= 'Z')
                || (c >= 0x7f && c <= 0xff);
    }

    private boolean isEndNowdoc() {
        String yytext = yytext().trim();
        int lastIndexOfNewline = yytext.lastIndexOf('\n');
        if (lastIndexOfNewline == -1) {
            lastIndexOfNewline = yytext.lastIndexOf('\r');
        }
        if (lastIndexOfNewline != -1) {
            yytext = yytext.substring(lastIndexOfNewline);
        }
        return isEndHereOrNowdoc(yytext);
    }

    private boolean isEndHeredoc() {
        return isEndHereOrNowdoc(yytext());
    }

    private boolean isEndHereOrNowdoc(String text) {
        // check whether ID exists
        String trimedText = text.trim();
        boolean isEnd = false;
        if (trimedText.startsWith(heredoc)) {
            if (trimedText.length() == heredoc.length()) {
                isEnd = true;
            } else if (trimedText.length() > heredoc.length()
                    && !isLabelChar(trimedText.charAt(heredoc.length()))) {
                // e.g.
                // $test = <<< END
                // ENDING
                // END
                isEnd = true;
            }
        }
        return isEnd;
    }

    /**
     * Returns the smallest of multiple index values.
     *
     * @param values values
     * @return the smallest of multiple index values, -1 if all values are -1
     */
    private static int minIndex(int... values) {
        assert values.length != 0 : "No values"; // NOI18N
        boolean first = true;
        int min = -1;
        for (int value : values) {
            if (value == -1) {
                continue;
            }
            if (first) {
                first = false;
                min = value;
                continue;
            }
            min = Math.min(min, value);
        }
        return min;
    }

    /**
     * Get the first whitespace index of text.
     *
     * @param text the text
     * @return the first index of whitespace if whitespace exists, otherwise -1
     */
    private static int firstWhitespaceIndexOf(String text) {
        return minIndex(
            text.indexOf(' '),
            text.indexOf('\n'),
            text.indexOf('\r'),
            text.indexOf('\t')
        );
    }
 // End user code



  /**
   * 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 PHP5ColoringLexer(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 PHP5ColoringLexer(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 < 1832) {
      int  count = packed.charAt(i++);
      char value = packed.charAt(i++);
      do map[j++] = value; while (--count > 0);
    }
    return map;
  }



  /**
   * 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 input.readText().toString();
  }


  /**
   * 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 input.readText().charAt(pos);
  }


  /**
   * Returns the length of the matched text region.
   */
  public final int yylength() {
    return input.readLength();
  }


  /**
   * 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);

    input.backup(number);
    //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 PHPTokenId nextToken() 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;

      zzAction = -1;

      //zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
      int tokenLength = 0;

      zzState = ZZ_LEXSTATE[zzLexicalState];


      zzForAction: {
        while (true) {
            zzInput = input.read();

            if(zzInput == LexerInput.EOF) {
                //end of input reached
                zzInput = YYEOF;
                break zzForAction;
                //notice: currently LexerInput.EOF == YYEOF
            }

          int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
          if (zzNext == -1) break zzForAction;
          zzState = zzNext;

          int zzAttributes = zzAttrL[zzState];
          if ( (zzAttributes & 1) == 1 ) {
            zzAction = zzState;
            tokenLength = input.readLength();
            if ( (zzAttributes & 8) == 8 ) break zzForAction;
          }

        }
      }

      // store back cached position
      if(zzInput != YYEOF) {
         input.backup(input.readLength() - tokenLength);
      }

      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
        case 32:
          { //the difference from the original rules comes from the fact that we took ';' out out of tokens
    return  PHPTokenId.UNKNOWN_TOKEN;
          }
        case 178: break;
        case 106:
          { return PHPTokenId.PHP_FALSE;
          }
        case 179: break;
        case 26:
          { yypushback(1);
    yybegin(ST_PHP_NOWDOC);
          }
        case 180: break;
        case 36:
          { String yytext = yytext();
    switch (yytext.charAt(yytext.length() - 1)) {
        case '?':
        case '%':
            yypushback(1);
            break;
        default:
            popState();
    }
     return PHPTokenId.PHP_LINE_COMMENT;
          }
        case 181: break;
        case 85:
          { yypushback(2);
        return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
          }
        case 182: break;
        case 121:
          { return PHPTokenId.PHP_TYPE_MIXED;
          }
        case 183: break;
        case 68:
          { popState();
    return PHPTokenId.PHPDOC_COMMENT_END;
          }
        case 184: break;
        case 147:
          { return PHPTokenId.PHP_INCLUDE;
          }
        case 185: break;
        case 167:
          { return PHPTokenId.PHP_ENDDECLARE;
          }
        case 186: break;
        case 38:
          { return  PHPTokenId.UNKNOWN_TOKEN;
          }
        case 187: break;
        case 135:
          { return PHPTokenId.PHP_GLOBAL;
          }
        case 188: break;
        case 171:
          { return PHPTokenId.PHP__FUNCTION__;
          }
        case 189: break;
        case 18:
          { popState();
    return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
          }
        case 190: break;
        case 43:
          { if (shortTagsAllowed ) {
        //yybegin(ST_PHP_IN_SCRIPTING);
        pushState(ST_PHP_IN_SCRIPTING);
        return PHPTokenId.PHP_OPENTAG;
        //return createSymbol(ASTSymbol.T_OPEN_TAG);
    } else {
        //return createSymbol(ASTSymbol.T_INLINE_HTML);
        return PHPTokenId.T_INLINE_HTML;
    }
          }
        case 191: break;
        case 59:
          { yypushback(1);
    pushState(ST_PHP_IN_SCRIPTING);
    return PHPTokenId.PHP_CURLY_OPEN;
          }
        case 192: break;
        case 131:
          { return PHPTokenId.PHP_TYPE_OBJECT;
          }
        case 193: break;
        case 96:
          { return PHPTokenId.PHP_LIST;
          }
        case 194: break;
        case 105:
          { return PHPTokenId.PHP_EMPTY;
          }
        case 195: break;
        case 24:
          { heredoc = heredocStack.pollFirst();
    if (heredoc != null) {
        popState();
    } else {
        yybegin(ST_PHP_IN_SCRIPTING);
    }
    int back = 0;
    // mark just the label
    if (yytext().charAt(yylength() - 1)==';') {
        back++;
    }
    yypushback(back);
    return PHPTokenId.PHP_HEREDOC_TAG_END;
          }
        case 196: break;
        case 14:
          { pushState(ST_PHP_LINE_COMMENT);
    return PHPTokenId.PHP_LINE_COMMENT;
          }
        case 197: break;
        case 101:
          { return PHPTokenId.PHP_CASE;
          }
        case 198: break;
        case 47:
          { return PHPTokenId.PHP_VARIABLE;
          }
        case 199: break;
        case 50:
          { //popState();
        yybegin(YYINITIAL);
        if (yylength() > 2) {
            yypushback(yylength()-2);
        }
        stack.clear();
    return PHPTokenId.PHP_CLOSETAG;
          }
        case 200: break;
        case 23:
          { int trailingNewLineLength = 1;
        int label_len = yylength() - trailingNewLineLength;
        int back = trailingNewLineLength;

        if (yytext().charAt(label_len - 1)==';') {
           label_len--;
           back++;
        }

        if (isEndHeredoc()) {
            int indexOfHeredocId = yytext().indexOf(heredoc);
            back += label_len - indexOfHeredocId;
            yypushback(back);
            yybegin(ST_PHP_END_HEREDOC);
        } else {
            yypushback(yylength() - trailingNewLineLength);
            yybegin(ST_PHP_HEREDOC);
        }
          }
        case 201: break;
        case 8:
          { if(isInConst) {
        isInConst = false;
        parenBalanceInConst = 0;
        bracketBalanceInConst = 0;
    }
    return PHPTokenId.PHP_SEMICOLON;
          }
        case 202: break;
        case 49:
          { if (aspTagsAllowed) {
            yybegin(YYINITIAL);
            stack.clear();
        return PHPTokenId.PHP_CLOSETAG;
    }
    return  PHPTokenId.UNKNOWN_TOKEN;
          }
        case 203: break;
        case 37:
          { return PHPTokenId.PHP_LINE_COMMENT;
          }
        case 204: break;
        case 93:
          { pushState(ST_PHP_DOC_COMMENT);
    yypushback(yylength()-3);
    return PHPTokenId.PHPDOC_COMMENT_START;
          }
        case 205: break;
        case 149:
          { return PHPTokenId.PHP__FILE__;
          }
        case 206: break;
        case 111:
          { return PHPTokenId.PHP_ISSET;
          }
        case 207: break;
        case 53:
          { return PHPTokenId.PHP_IF;
          }
        case 208: break;
        case 60:
          { popState();
    pushState(ST_PHP_LOOKING_FOR_PROPERTY);
    return PHPTokenId.PHP_OBJECT_OPERATOR;
          }
        case 209: break;
        case 70:
          { if (aspTagsAllowed) {
            yybegin(YYINITIAL);
            stack.clear();
        return PHPTokenId.PHP_CLOSETAG;
    }
    String text = yytext();
    if(text.indexOf('\r') != -1 || text.indexOf('\n') != -1 ){
        popState();
    }
    return PHPTokenId.PHP_LINE_COMMENT;
          }
        case 210: break;
        case 51:
          { return PHPTokenId.PHP_AS;
          }
        case 211: break;
        case 143:
          { int bprefix = (yytext().charAt(0) != '<') ? 1 : 0;
        int startString=3+bprefix;
        /* 3 is <<<, 2 is quotes, 1 is newline */
        int heredocLength = yylength() - bprefix - 3 - 2 - 1 - (yytext().charAt(yylength() - 2) == '\r' ? 1 : 0);
        while ((yytext().charAt(startString) == ' ') || (yytext().charAt(startString) == '\t')) {
            startString++;
            heredocLength--;
        }
        // first quate
        startString++;
        if (heredoc != null) {
            heredocStack.push(heredoc);
        }
        heredoc = yytext().substring(startString, heredocLength + startString);
        if (!heredocStack.isEmpty()) {
            pushState(ST_PHP_START_NOWDOC);
        } else {
           yybegin(ST_PHP_START_NOWDOC);
        }
        return PHPTokenId.PHP_NOWDOC_TAG_START;
          }
        case 212: break;
        case 176:
          { pushState(ST_HALTED_COMPILER);
    return PHPTokenId.PHP_HALT_COMPILER;
          }
        case 213: break;
        case 81:
          { return PHPTokenId.PHP_USE;
          }
        case 214: break;
        case 115:
          { return PHPTokenId.PHP_TYPE_FLOAT;
          }
        case 215: break;
        case 175:
          { return PHPTokenId.PHP__NAMESPACE__;
          }
        case 216: break;
        case 153:
          { return PHPTokenId.PHP_READONLY;
          }
        case 217: break;
        case 69:
          { popState();
    return PHPTokenId.PHP_LINE_COMMENT;
          }
        case 218: break;
        case 73:
          { // PHP 8.1: Explicit octal integer literal notation
    // https://wiki.php.net/rfc/explicit_octal_notation
    return PHPTokenId.PHP_NUMBER;
          }
        case 219: break;
        case 174:
          { return PHPTokenId.PHP_INCLUDE_ONCE;
          }
        case 220: break;
        case 161:
          { return PHPTokenId.PHP_NAMESPACE;
          }
        case 221: break;
        case 67:
          { popState();
    return PHPTokenId.PHP_COMMENT_END;
          }
        case 222: break;
        case 155:
          { return PHPTokenId.PHP_ITERABLE;
          }
        case 223: break;
        case 66:
          { // const keyword is also used within group uses. so check "=", otherwise it matches the following:
    // use A\{const CONSTANTA, function myFunction,...}
    popState();
    String match = yytext();
    String[] segments = match.split("[ \n\r\t]+");
    int back = 1;
    if(segments.length > 1) {
        int wsLength = yylength() - 1 - segments[0].length(); // - "=" - {LABEL}
        back +=  wsLength;
    }
    yypushback(back);
    return PHPTokenId.PHP_STRING;
          }
        case 224: break;
        case 40:
          { popState();
    return PHPTokenId.T_INLINE_HTML;
          }
        case 225: break;
        case 30:
          { popState();
    parenBalanceInScripting++; // [NETBEANS-4443] PHP 8.0 Named Arguments
    return PHPTokenId.PHP_TOKEN;
          }
        case 226: break;
        case 64:
          { /* <ST_START_NOWDOC>{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */
    // there is no [\r\n] if it is the last line
    // i.e. not [\r\n] but EOF, so check not [\r\n] but [\r\n]?
    if (isEndNowdoc()) {
        int indexOfNowdocId = yytext().indexOf(heredoc);
        int back = yylength() - indexOfNowdocId - heredoc.length();
        yypushback(back);
        heredoc = heredocStack.pollFirst();
        if (heredoc != null) {
            popState();
        } else {
            yybegin(ST_PHP_IN_SCRIPTING);
        }
        return PHPTokenId.PHP_NOWDOC_TAG_END;
    } else {
        yypushback(1);
        yybegin(ST_PHP_NOWDOC);
    }
          }
        case 227: break;
        case 6:
          { return PHPTokenId.PHP_OPERATOR;
          }
        case 228: break;
        case 11:
          { pushState(ST_PHP_BACKQUOTE);
    return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
          }
        case 229: break;
        case 56:
          { pushState(ST_PHP_QUOTES_AFTER_VARIABLE);
    return PHPTokenId.PHP_VARIABLE;
          }
        case 230: break;
        case 3:
          { return PHPTokenId.PHP_NUMBER;
          }
        case 231: break;
        case 82:
          { yypushback(1);
    pushState(ST_PHP_VAR_OFFSET);
    return PHPTokenId.PHP_VARIABLE;
          }
        case 232: break;
        case 144:
          { return PHPTokenId.PHP_REQUIRE;
          }
        case 233: break;
        case 146:
          { return PHPTokenId.PHP_DECLARE;
          }
        case 234: break;
        case 118:
          { return PHPTokenId.PHP_CLONE;
          }
        case 235: break;
        case 113:
          { return PHPTokenId.PHP_TRAIT;
          }
        case 236: break;
        case 58:
          { pushState(ST_PHP_IN_SCRIPTING);
    return PHPTokenId.PHP_TOKEN;
          }
        case 237: break;
        case 76:
          { return PHPTokenId.PHP_NEW;
          }
        case 238: break;
        case 87:
          { yypushback(2);
    return PHPTokenId.PHP_COMMENT;
          }
        case 239: break;
        case 65:
          { return PHPTokenId.PHP_OBJECT_OPERATOR;
          }
        case 240: break;
        case 19:
          { yypushback(1);
        popState();
          }
        case 241: break;
        case 140:
          { return PHPTokenId.PHP_EXTENDS;
          }
        case 242: break;
        case 94:
          { return PHPTokenId.PHP_NULL;
          }
        case 243: break;
        case 103:
          { pushState(ST_PHP_IN_SCRIPTING);
    //yybegin(ST_PHP_IN_SCRIPTING);
    return PHPTokenId.PHP_OPENTAG;
    //return createSymbol(ASTSymbol.T_OPEN_TAG);
          }
        case 244: break;
        case 126:
          { return PHPTokenId.PHP_WHILE;
          }
        case 245: break;
        case 160:
          { return PHPTokenId.PHP_ENDSWITCH;
          }
        case 246: break;
        case 148:
          { return PHPTokenId.PHP_PRIVATE;
          }
        case 247: break;
        case 128:
          { yypushback(yylength() - 4); // 4: enum length
    return PHPTokenId.PHP_ENUM;
          }
        case 248: break;
        case 1:
          { return PHPTokenId.T_INLINE_HTML;
          }
        case 249: break;
        case 170:
          { return PHPTokenId.PHP_YIELD_FROM;
          }
        case 250: break;
        case 104:
          { return PHPTokenId.PHP_ENDIF;
          }
        case 251: break;
        case 33:
          { yypushback(1);
    popState();
        if (yylength() > 0)
            return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
          }
        case 252: break;
        case 102:
          { popState();
    String yytext = yytext();
    if ("true".equalsIgnoreCase(yytext)) { // NOI18N
        return PHPTokenId.PHP_TRUE;
    } else if ("false".equalsIgnoreCase(yytext)) { // NOI18N
        return PHPTokenId.PHP_FALSE;
    } else if ("null".equalsIgnoreCase(yytext)) { // NOI18N
        return PHPTokenId.PHP_NULL;
    }
    assert false : "expected \"true\", \"false\", or \"null\" but "  + "\"" + yytext + "\""; // NOI18N
    yypushback(yylength());
          }
        case 253: break;
        case 132:
          { return PHPTokenId.PHP_STATIC;
          }
        case 254: break;
        case 145:
          { return PHPTokenId.PHP_DEFAULT;
          }
        case 255: break;
        case 17:
          { return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
          }
        case 256: break;
        case 34:
          { popState();
    return PHPTokenId.PHP_TOKEN;
          }
        case 257: break;
        case 71:
          { // [NETBEANS-4443] PHP 8.0 Named Arguments
    // we can use keywords as parameter names
    // e.g. array: $array, default: 0
    int index = firstWhitespaceIndexOf(yytext());
    if (index == -1) {
        yypushback(1); // ":".length()
    } else {
        yypushback(yylength() - index);
    }
    popState();
    return PHPTokenId.PHP_STRING;
          }
        case 258: break;
        case 150:
          { return PHPTokenId.PHP__LINE__;
          }
        case 259: break;
        case 44:
          { pushState(ST_PHP_LOOKING_FOR_PROPERTY);
    return PHPTokenId.PHP_OBJECT_OPERATOR;
          }
        case 260: break;
        case 89:
          { return PHPTokenId.PHP_EXIT;
          }
        case 261: break;
        case 42:
          { if (aspTagsAllowed) {
        //yybegin(ST_PHP_IN_SCRIPTING);
        pushState(ST_PHP_IN_SCRIPTING);
        return PHPTokenId.PHP_OPENTAG;
        //return createSymbol(ASTSymbol.T_OPEN_TAG);
    } else {
        //return createSymbol(ASTSymbol.T_INLINE_HTML);
        return PHPTokenId.T_INLINE_HTML;
    }
          }
        case 262: break;
        case 48:
          { pushState(ST_PHP_COMMENT);
    return PHPTokenId.PHP_COMMENT_START;
          }
        case 263: break;
        case 108:
          { return PHPTokenId.PHP_BREAK;
          }
        case 264: break;
        case 31:
          { if(parenBalanceInConst == 0 && bracketBalanceInConst == 0) {
        isInConst = false;
    }
    yypushback(1);
    popState();
          }
        case 265: break;
        case 22:
          { yypushback(1);
        yybegin(ST_PHP_HEREDOC);
          }
        case 266: break;
        case 163:
          { return PHPTokenId.PHP_INSTEADOF;
          }
        case 267: break;
        case 120:
          { return PHPTokenId.PHP_MATCH;
          }
        case 268: break;
        case 25:
          { /* <ST_PHP_NOWDOC>{NOWDOC_CHARS}|{NEWLINE} */
        // retrun PHPTokenId when the closing marker is found
          }
        case 269: break;
        case 164:
          { return PHPTokenId.PHP_PROTECTED;
          }
        case 270: break;
        case 72:
          { String text = yytext();
    if ((text.charAt(1)=='%' && aspTagsAllowed)
        || (text.charAt(1)=='?')) {
        //yybegin(ST_PHP_IN_SCRIPTING);
        pushState(ST_PHP_IN_SCRIPTING);
        return PHPTokenId.T_OPEN_TAG_WITH_ECHO;
        //return createSymbol(ASTSymbol.T_OPEN_TAG);
    } else {
        //return createSymbol(ASTSymbol.T_INLINE_HTML);
        return PHPTokenId.T_INLINE_HTML;
    }
          }
        case 271: break;
        case 41:
          { popState();
    yypushback(1);
          }
        case 272: break;
        case 122:
          { return PHPTokenId.PHP_PRINT;
          }
        case 273: break;
        case 80:
          { return PHPTokenId.PHP_VAR;
          }
        case 274: break;
        case 177:
          { pushState(ST_PHP_IN_SCRIPTING);
    return PHPTokenId.T_INLINE_HTML;
          }
        case 275: break;
        case 13:
          { if (isInConst) {
        pushState(ST_PHP_LOOKING_FOR_CONSTANT_NAME);
    } else if (parenBalanceInScripting > 0) {
        // [NETBEANS-4443] PHP 8.0 Named Arguments
        // look for ", parameterName:"
        pushState(ST_PHP_LOOKING_FOR_PARAMETER_NAME);
    }
    return PHPTokenId.PHP_TOKEN;
          }
        case 276: break;
        case 114:
          { return PHPTokenId.PHP_THROW;
          }
        case 277: break;
        case 136:
          { return PHPTokenId.PHP_PARENT;
          }
        case 278: break;
        case 134:
          { return PHPTokenId.PHP_SWITCH;
          }
        case 279: break;
        case 88:
          { yypushback(2); // go back to mark end of comment in the next token
        return PHPTokenId.PHPDOC_COMMENT;
          }
        case 280: break;
        case 78:
          { return PHPTokenId.PHP_TYPE_INT;
          }
        case 281: break;
        case 124:
          { return PHPTokenId.PHP_CASTING;
          }
        case 282: break;
        case 46:
          { return PHPTokenId.PHP_TEXTUAL_OPERATOR;
          }
        case 283: break;
        case 39:
          { popState();return PHPTokenId.WHITESPACE;
          }
        case 284: break;
        case 77:
          { return PHPTokenId.PHP_DIE;
          }
        case 285: break;
        case 159:
          { return PHPTokenId.PHP__CLASS__;
          }
        case 286: break;
        case 2:
          { yypushback(1);
    pushState(ST_PHP_HIGHLIGHTING_ERROR);
          }
        case 287: break;
        case 119:
          { return PHPTokenId.PHP_CLASS;
          }
        case 288: break;
        case 142:
          { return PHPTokenId.PHP_FINALLY;
          }
        case 289: break;
        case 162:
          { return PHPTokenId.PHP_INTERFACE;
          }
        case 290: break;
        case 158:
          { return PHPTokenId.PHP__TRAIT__;
          }
        case 291: break;
        case 123:
          { return PHPTokenId.PHP_UNSET;
          }
        case 292: break;
        case 12:
          { return PHPTokenId.PHP_CURLY_OPEN;
          }
        case 293: break;
        case 28:
          { yypushback(1);
    popState();
          }
        case 294: break;
        case 137:
          { return PHPTokenId.PHP_PUBLIC;
          }
        case 295: break;
        case 21:
          { int indexOfNewline = yytext().indexOf("\r");
        if (indexOfNewline == -1) {
            indexOfNewline = yytext().indexOf("\n");
        }
        if (indexOfNewline > 0) {
            // if index equals 0, don't pushback (infinite loop)
            yypushback(yylength() - indexOfNewline);
        }
        return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
          }
        case 296: break;
        case 173:
          { return PHPTokenId.PHP_REQUIRE_ONCE;
          }
        case 297: break;
        case 166:
          { return PHPTokenId.PHP_ENDFOREACH;
          }
        case 298: break;
        case 45:
          { // PHP 7.4 Arrow Functions 2.0
    // https://wiki.php.net/rfc/arrow_functions_v2
    return PHPTokenId.PHP_FN;
          }
        case 299: break;
        case 86:
          { return PHPTokenId.PHP_NULLSAFE_OBJECT_OPERATOR;
          }
        case 300: break;
        case 133:
          { return PHPTokenId.PHP_TYPE_STRING;
          }
        case 301: break;
        case 91:
          { return PHPTokenId.PHP_EVAL;
          }
        case 302: break;
        case 83:
          { popState();
    pushState(ST_PHP_LOOKING_FOR_PROPERTY);
    return PHPTokenId.PHP_NULLSAFE_OBJECT_OPERATOR;
          }
        case 303: break;
        case 98:
          { return PHPTokenId.PHP_GOTO;
          }
        case 304: break;
        case 116:
          { isInConst = true;
    parenBalanceInConst = 0;
    bracketBalanceInConst = 0;
    pushState(ST_PHP_LOOKING_FOR_CONSTANT_NAME);
    return PHPTokenId.PHP_CONST;
          }
        case 305: break;
        case 20:
          { popState();
        return PHPTokenId.PHP_STRING;
          }
        case 306: break;
        case 154:
          { return PHPTokenId.PHP_ABSTRACT;
          }
        case 307: break;
        case 5:
          { if ("?".equals(yytext())) { // NOI18N
        // [NETBEANS-4443] PHP 8.0 Named Arguments
        // look for "? [true|false|null] : ..."
        pushState(ST_PHP_LOOKING_FOR_TRUE_FALSE_NULL);
    } else if ("(".equals(yytext())) { // NOI18N
        // [NETBEANS-4443] PHP 8.0 Named Arguments
        // look for "(parameterName:"
        pushState(ST_PHP_LOOKING_FOR_PARAMETER_NAME);
    }
    if(isInConst) {
        // for checking arrays
        // e.g. const CONST = [1, 2], const GOTO = 1;
        String text = yytext();
        switch (text) {
            case "[":
                bracketBalanceInConst++;
                break;
            case "]":
                bracketBalanceInConst--;
                break;
            case "(":
                parenBalanceInConst++;
                break;
            case ")":
                parenBalanceInConst--;
                break;
            default:
                break;
        }
    }
    // [NETBEANS-4443] PHP 8.0 Named Arguments
    switch (yytext()) {
        case "(":
            parenBalanceInScripting++;
            break;
        case ")":
            parenBalanceInScripting--;
            break;
        default:
            break;
    }
    return PHPTokenId.PHP_TOKEN;
          }
        case 308: break;
        case 9:
          { pushState(ST_PHP_DOUBLE_QUOTES);
    return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
          }
        case 309: break;
        case 92:
          { return PHPTokenId.PHP_ECHO;
          }
        case 310: break;
        case 107:
          { return PHPTokenId.PHP_FINAL;
          }
        case 311: break;
        case 165:
          { return PHPTokenId.PHP__METHOD__;
          }
        case 312: break;
        case 10:
          { return PHPTokenId.PHP_NS_SEPARATOR;
          }
        case 313: break;
        case 125:
          { return PHPTokenId.PHP_YIELD;
          }
        case 314: break;
        case 152:
          { pushState(ST_PHP_LOOKING_FOR_FUNCTION_NAME);
    return PHPTokenId.PHP_FUNCTION;
          }
        case 315: break;
        case 139:
          { return PHPTokenId.PHP__DIR__;
          }
        case 316: break;
        case 4:
          { return  PHPTokenId.PHP_STRING;
          }
        case 317: break;
        case 156:
          { return PHPTokenId.PHP_CONTINUE;
          }
        case 318: break;
        case 62:
          { /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */
        int trailingNewLineLength = 1;
        if (isEndHeredoc()) {
            String yytext = yytext();
            int newlineLength = yytext.startsWith("\r\n") ? 2 : 1;
            int back = yylength() - newlineLength;
            yypushback(back);
            yybegin(ST_PHP_END_HEREDOC);
        } else {
            // handle variable
            char previousChar = ' ';
            int indexOfVariable = -1;
            for (int i = 0; i < yylength(); i++) {
                char currentChar = yytext().charAt(i);
                if (currentChar == '$' && previousChar == '{') {
                    indexOfVariable = i - 1;
                    break;
                }
                if (currentChar == '$' && previousChar != '\\') {
                    indexOfVariable = i;
                    break;
                }
                previousChar = currentChar;
            }

            if (indexOfVariable == -1) {
                yypushback(trailingNewLineLength);
            } else {
                yypushback(yylength() - indexOfVariable);
                return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
            }
        }
        return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
          }
        case 319: break;
        case 169:
          { return PHPTokenId.PHP_IMPLEMENTS;
          }
        case 320: break;
        case 138:
          { // [NETBEANS-4443] PHP 8.0: Named Arguments
    int index = firstWhitespaceIndexOf(yytext());
    if (index == -1) {
        yypushback(2); // "::".length()
    } else {
        yypushback(yylength() - index);
    }
    popState();
    String yytext = yytext();
    if ("parent".equalsIgnoreCase(yytext)) { // NOI18N
        return PHPTokenId.PHP_PARENT;
    } else if ("self".equalsIgnoreCase(yytext)) { // NOI18N
        return PHPTokenId.PHP_SELF;
    } else if ("static".equalsIgnoreCase(yytext)) { // NOI18N
        return PHPTokenId.PHP_STATIC;
    }
    assert false : "expected \"parent\", \"self\", or \"static\" but " + "\"" + yytext() + "\""; // NOI18N
    yypushback(yylength());
          }
        case 321: break;
        case 75:
          { pushState(ST_PHP_LOOKING_FOR_PROPERTY);
    return PHPTokenId.PHP_NULLSAFE_OBJECT_OPERATOR;
          }
        case 322: break;
        case 79:
          { return PHPTokenId.PHP_TRY;
          }
        case 323: break;
        case 110:
          { return PHPTokenId.PHP_ARRAY;
          }
        case 324: break;
        case 7:
          { return PHPTokenId.WHITESPACE;
          }
        case 325: break;
        case 130:
          { return PHPTokenId.PHP_RETURN;
          }
        case 326: break;
        case 35:
          { return PHPTokenId.PHP_TOKEN;
          }
        case 327: break;
        case 112:
          { return PHPTokenId.PHP_TYPE_NEVER;
          }
        case 328: break;
        case 16:
          { return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
          }
        case 329: break;
        case 117:
          { return PHPTokenId.PHP_CATCH;
          }
        case 330: break;
        case 157:
          { return PHPTokenId.PHP_CALLABLE;
          }
        case 331: break;
        case 84:
          { String text = yytext();
        int lastIndexOfDollar = text.lastIndexOf('$');
        yypushback(text.length() - lastIndexOfDollar);
        return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
          }
        case 332: break;
        case 61:
          { return PHPTokenId.PHP_PAAMAYIM_NEKUDOTAYIM;
          }
        case 333: break;
        case 168:
          { return PHPTokenId.PHP_INSTANCEOF;
          }
        case 334: break;
        case 99:
          { return PHPTokenId.PHP_TYPE_BOOL;
          }
        case 335: break;
        case 127:
          { return PHPTokenId.PHP_ENDFOR;
          }
        case 336: break;
        case 74:
          { return PHPTokenId.PHP_FOR;
          }
        case 337: break;
        case 141:
          { return PHPTokenId.PHP_FOREACH;
          }
        case 338: break;
        case 55:
          { pushState(ST_PHP_LOOKING_FOR_STATIC_PROPERTY);
    return PHPTokenId.PHP_PAAMAYIM_NEKUDOTAYIM;
          }
        case 339: break;
        case 29:
          { popState();
    return PHPTokenId.PHP_STRING;
          }
        case 340: break;
        case 90:
          { return PHPTokenId.PHP_ELSE;
          }
        case 341: break;
        case 63:
          { /* <ST_PHP_NOWDOC>{NEWLINE}+{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */
        if (isEndNowdoc()) {
            String yytext = yytext();
            int trailingNewlineOffset = (yytext.endsWith("\n") || yytext.endsWith("\r")) ? 2 : 0;
            int lastIndexOfNewline = yytext.lastIndexOf('\n', yylength() - trailingNewlineOffset);
            if (lastIndexOfNewline == -1) {
                lastIndexOfNewline = yytext.lastIndexOf('\r', yylength() - trailingNewlineOffset);
            }
            int back = yylength() - lastIndexOfNewline - 1; // -1 [\r\n] length
            yypushback(back);
            yybegin(ST_PHP_END_NOWDOC);
            return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
        } else {
            yypushback(1); // [\r\n] length
        }
          }
        case 342: break;
        case 97:
          { return PHPTokenId.PHP_SELF;
          }
        case 343: break;
        case 57:
          { yypushback(1);
    return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
          }
        case 344: break;
        case 15:
          { int lastState = stack.peek();
    if (lastState != ST_PHP_IN_SCRIPTING && lastState != YYINITIAL) {
        // probably in some sub state -> "{$" or "${"
        popState();
    }
    return PHPTokenId.PHP_CURLY_CLOSE;
          }
        case 345: break;
        case 52:
          { return PHPTokenId.PHP_DO;
          }
        case 346: break;
        case 109:
          { int bprefix = (yytext().charAt(0) != '<') ? 1 : 0;
    int startString=3+bprefix;
    int heredocLength = yylength() - bprefix - 3 - 1 - (yytext().charAt(yylength() - 2) == '\r' ? 1 : 0);
    while ((yytext().charAt(startString) == ' ') || (yytext().charAt(startString) == '\t')) {
        startString++;
        heredocLength--;
    }
    // HEREDOC PHP 5.3
    if (yytext().charAt(startString) == '"') {
        heredocLength -= 2;
        startString ++;
    }
    if (heredoc != null) {
        heredocStack.push(heredoc);
    }
    heredoc = yytext().substring(startString, heredocLength + startString);
    if (!heredocStack.isEmpty()) {
        pushState(ST_PHP_START_HEREDOC);
    } else {
        yybegin(ST_PHP_START_HEREDOC);
    }
    return PHPTokenId.PHP_HEREDOC_TAG_START;
          }
        case 347: break;
        case 100:
          { return PHPTokenId.PHP_TYPE_VOID;
          }
        case 348: break;
        case 151:
          { return PHPTokenId.PHP_ENDWHILE;
          }
        case 349: break;
        case 129:
          { return PHPTokenId.PHP_ELSEIF;
          }
        case 350: break;
        case 95:
          { return PHPTokenId.PHP_TRUE;
          }
        case 351: break;
        case 54:
          { return PHPTokenId.PHP_ATTRIBUTE;
          }
        case 352: break;
        case 27:
          { heredoc = heredocStack.pollFirst();
    if (heredoc != null) {
        popState();
    } else {
        yybegin(ST_PHP_IN_SCRIPTING);
    }
    int back = 0;
    // mark just the label
    if (yytext().charAt(yylength() - 1)==';') {
        back++;
    }
    yypushback(back);
    return PHPTokenId.PHP_NOWDOC_TAG_END;
          }
        case 353: break;
        case 172:
          { yypushback(yylength() - 4); // 4: enum length
    return PHPTokenId.PHP_STRING;
          }
        case 354: break;
        default:
          if (zzInput == YYEOF)
            //zzAtEOF = true;
            switch (zzLexicalState) {
            case ST_PHP_COMMENT: {
              if (input.readLength() > 0) {
                input.backup(1);  // backup eof
                return PHPTokenId.PHP_COMMENT;
              }
              else {
                  return null;
              }
            }
            case 823: break;
            case ST_PHP_DOC_COMMENT: {
              if (input.readLength() > 0) {
                    input.backup(1);  // backup eof
                    return PHPTokenId.PHPDOC_COMMENT;
                }
                else {
                    return null;
                }
            }
            case 824: break;
            default:
              {        if(input.readLength() > 0) {
            // backup eof
            input.backup(1);
            //and return the text as error token
            return PHPTokenId.UNKNOWN_TOKEN;
        } else {
            return null;
        }
 }
            }

          else {
            zzScanError(ZZ_NO_MATCH);
          }
      }
    }
  }


}
