// Generated by JFlex 1.9.2 http://jflex.de/  (tweaked for IntelliJ platform)
// source: groovy.flex

// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.plugins.groovy.lang.lexer;

import com.intellij.lexer.FlexLexer;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.containers.Stack;
import static org.jetbrains.plugins.groovy.lang.groovydoc.parser.GroovyDocElementTypes.*;
import static org.jetbrains.plugins.groovy.lang.psi.GroovyElementTypes.*;


public class _GroovyLexer extends GroovyLexerBase implements FlexLexer {

  /** This character denotes the end of file */
  public static final int YYEOF = -1;

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

  /** lexical states */
  public static final int YYINITIAL = 0;
  public static final int IN_INJECTION = 2;
  public static final int IN_INJECTION_BRACES = 4;
  public static final int DIVISION_EXPECTED = 6;
  public static final int IN_TRIPLE_STRING = 8;
  public static final int IN_SINGLE_GSTRING = 10;
  public static final int IN_TRIPLE_GSTRING = 12;
  public static final int IN_SLASHY_STRING = 14;
  public static final int IN_DOLLAR_SLASH_STRING = 16;
  public static final int IN_GSTRING_DOLLAR = 18;
  public static final int IN_GSTRING_DOT = 20;
  public static final int IN_GSTRING_DOT_IDENT = 22;
  public static final int NLS_AFTER_LBRACE = 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
  };

  /**
   * Top-level table for translating characters to character classes
   */
  private static final int [] ZZ_CMAP_TOP = zzUnpackcmap_top();

  private static final String ZZ_CMAP_TOP_PACKED_0 =
    "\1\0\1\u0100\1\u0200\1\u0300\1\u0400\1\u0500\1\u0600\1\u0700"+
    "\1\u0800\1\u0900\1\u0a00\1\u0b00\1\u0c00\1\u0d00\1\u0e00\1\u0f00"+
    "\1\u1000\1\u0100\1\u1100\1\u1200\1\u1300\1\u0100\1\u1400\1\u1500"+
    "\1\u1600\1\u1700\1\u1800\1\u1900\1\u1a00\1\u1b00\1\u0100\1\u1c00"+
    "\1\u1d00\1\u1e00\12\u1f00\1\u2000\1\u2100\1\u2200\1\u1f00\1\u2300"+
    "\1\u2400\2\u1f00\31\u0100\1\u2500\121\u0100\1\u2600\4\u0100\1\u2700"+
    "\1\u0100\1\u2800\1\u2900\1\u2a00\1\u2b00\1\u2c00\1\u2d00\53\u0100"+
    "\1\u2e00\10\u2f00\31\u1f00\1\u0100\1\u3000\1\u3100\1\u0100\1\u3200"+
    "\1\u3300\1\u3400\1\u3500\1\u1f00\1\u3600\1\u3700\1\u3800\1\u3900"+
    "\1\u0100\1\u3a00\1\u3b00\1\u3c00\1\u3d00\1\u3e00\1\u3f00\1\u4000"+
    "\1\u1f00\1\u4100\1\u4200\1\u4300\1\u4400\1\u4500\1\u4600\1\u4700"+
    "\1\u4800\1\u4900\1\u4a00\1\u4b00\1\u4c00\1\u1f00\1\u4d00\1\u4e00"+
    "\1\u4f00\1\u1f00\3\u0100\1\u5000\1\u5100\1\u5200\12\u1f00\4\u0100"+
    "\1\u5300\17\u1f00\2\u0100\1\u5400\41\u1f00\2\u0100\1\u5500\1\u5600"+
    "\2\u1f00\1\u5700\1\u5800\27\u0100\1\u5900\2\u0100\1\u5a00\45\u1f00"+
    "\1\u0100\1\u5b00\1\u5c00\11\u1f00\1\u5d00\27\u1f00\1\u5e00\1\u5f00"+
    "\1\u6000\1\u6100\11\u1f00\1\u6200\1\u6300\5\u1f00\1\u6400\1\u6500"+
    "\4\u1f00\1\u6600\21\u1f00\246\u0100\1\u6700\20\u0100\1\u6800\1\u6900"+
    "\25\u0100\1\u6a00\34\u0100\1\u6b00\14\u1f00\2\u0100\1\u6c00\u0e05\u1f00";

  private static int [] zzUnpackcmap_top() {
    int [] result = new int[4352];
    int offset = 0;
    offset = zzUnpackcmap_top(ZZ_CMAP_TOP_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackcmap_top(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;
  }


  /**
   * Second-level tables for translating characters to character classes
   */
  private static final int [] ZZ_CMAP_BLOCKS = zzUnpackcmap_blocks();

  private static final String ZZ_CMAP_BLOCKS_PACKED_0 =
    "\11\0\1\1\1\2\1\3\1\4\1\5\22\0\1\1"+
    "\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15"+
    "\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25"+
    "\1\26\10\27\1\30\1\31\1\32\1\33\1\34\1\35"+
    "\1\36\1\37\1\40\1\37\1\41\1\42\1\43\1\44"+
    "\1\45\1\46\2\45\1\47\13\45\1\50\2\45\1\51"+
    "\1\52\1\53\1\54\1\55\1\0\1\56\1\57\1\60"+
    "\1\61\1\62\1\63\1\64\1\65\1\66\1\45\1\67"+
    "\1\70\1\71\1\72\1\73\1\74\1\45\1\75\1\76"+
    "\1\77\1\100\1\101\1\102\1\103\1\104\1\105\1\106"+
    "\1\107\1\110\1\111\6\0\1\3\44\0\1\45\12\0"+
    "\1\45\4\0\1\45\5\0\27\45\1\0\37\45\1\0"+
    "\u01ca\45\4\0\14\45\16\0\5\45\7\0\1\45\1\0"+
    "\1\45\201\0\5\45\1\0\2\45\2\0\4\45\1\0"+
    "\1\45\6\0\1\45\1\0\3\45\1\0\1\45\1\0"+
    "\24\45\1\0\123\45\1\0\213\45\10\0\246\45\1\0"+
    "\46\45\2\0\1\45\6\0\51\45\107\0\33\45\4\0"+
    "\4\45\55\0\53\45\43\0\2\45\1\0\143\45\1\0"+
    "\1\45\17\0\2\45\7\0\2\45\12\0\3\45\2\0"+
    "\1\45\20\0\1\45\1\0\36\45\35\0\131\45\13\0"+
    "\1\45\30\0\41\45\11\0\2\45\4\0\1\45\5\0"+
    "\26\45\4\0\1\45\11\0\1\45\3\0\1\45\27\0"+
    "\31\45\7\0\13\45\65\0\25\45\1\0\10\45\106\0"+
    "\66\45\3\0\1\45\22\0\1\45\7\0\12\45\17\0"+
    "\20\45\4\0\10\45\2\0\2\45\2\0\26\45\1\0"+
    "\7\45\1\0\1\45\3\0\4\45\3\0\1\45\20\0"+
    "\1\45\15\0\2\45\1\0\3\45\16\0\2\45\12\0"+
    "\1\45\10\0\6\45\4\0\2\45\2\0\26\45\1\0"+
    "\7\45\1\0\2\45\1\0\2\45\1\0\2\45\37\0"+
    "\4\45\1\0\1\45\23\0\3\45\20\0\11\45\1\0"+
    "\3\45\1\0\26\45\1\0\7\45\1\0\2\45\1\0"+
    "\5\45\3\0\1\45\22\0\1\45\17\0\2\45\27\0"+
    "\1\45\13\0\10\45\2\0\2\45\2\0\26\45\1\0"+
    "\7\45\1\0\2\45\1\0\5\45\3\0\1\45\36\0"+
    "\2\45\1\0\3\45\17\0\1\45\21\0\1\45\1\0"+
    "\6\45\3\0\3\45\1\0\4\45\3\0\2\45\1\0"+
    "\1\45\1\0\2\45\3\0\2\45\3\0\3\45\3\0"+
    "\14\45\26\0\1\45\64\0\10\45\1\0\3\45\1\0"+
    "\27\45\1\0\20\45\3\0\1\45\32\0\3\45\5\0"+
    "\2\45\36\0\1\45\4\0\10\45\1\0\3\45\1\0"+
    "\27\45\1\0\12\45\1\0\5\45\3\0\1\45\40\0"+
    "\1\45\1\0\2\45\17\0\2\45\22\0\10\45\1\0"+
    "\3\45\1\0\51\45\2\0\1\45\20\0\1\45\5\0"+
    "\3\45\10\0\3\45\30\0\6\45\5\0\22\45\3\0"+
    "\30\45\1\0\11\45\1\0\1\45\2\0\7\45\72\0"+
    "\60\45\1\0\2\45\14\0\7\45\72\0\2\45\1\0"+
    "\1\45\1\0\5\45\1\0\30\45\1\0\1\45\1\0"+
    "\12\45\1\0\2\45\11\0\1\45\2\0\5\45\1\0"+
    "\1\45\25\0\4\45\40\0\1\45\77\0\10\45\1\0"+
    "\44\45\33\0\5\45\163\0\53\45\24\0\1\45\20\0"+
    "\6\45\4\0\4\45\3\0\1\45\3\0\2\45\7\0"+
    "\3\45\4\0\15\45\14\0\1\45\21\0\46\45\1\0"+
    "\1\45\5\0\1\45\2\0\53\45\1\0\115\45\1\0"+
    "\4\45\2\0\7\45\1\0\1\45\1\0\4\45\2\0"+
    "\51\45\1\0\4\45\2\0\41\45\1\0\4\45\2\0"+
    "\7\45\1\0\1\45\1\0\4\45\2\0\17\45\1\0"+
    "\71\45\1\0\4\45\2\0\103\45\45\0\20\45\20\0"+
    "\126\45\2\0\6\45\3\0\u016c\45\2\0\21\45\1\0"+
    "\32\45\5\0\113\45\6\0\10\45\7\0\15\45\1\0"+
    "\4\45\16\0\22\45\16\0\22\45\16\0\15\45\1\0"+
    "\3\45\17\0\64\45\43\0\1\45\4\0\1\45\103\0"+
    "\131\45\7\0\5\45\2\0\42\45\1\0\1\45\5\0"+
    "\106\45\12\0\37\45\61\0\36\45\2\0\5\45\13\0"+
    "\54\45\4\0\32\45\66\0\27\45\11\0\65\45\122\0"+
    "\1\45\135\0\57\45\21\0\7\45\67\0\36\45\15\0"+
    "\2\45\12\0\54\45\32\0\44\45\51\0\3\45\12\0"+
    "\44\45\2\0\11\45\7\0\53\45\2\0\3\45\51\0"+
    "\4\45\1\0\6\45\1\0\2\45\3\0\1\45\5\0"+
    "\300\45\100\0\26\45\2\0\6\45\2\0\46\45\2\0"+
    "\6\45\2\0\10\45\1\0\1\45\1\0\1\45\1\0"+
    "\1\45\1\0\37\45\2\0\65\45\1\0\7\45\1\0"+
    "\1\45\3\0\3\45\1\0\7\45\3\0\4\45\2\0"+
    "\6\45\4\0\15\45\5\0\3\45\1\0\7\45\53\0"+
    "\2\3\107\0\1\45\15\0\1\45\20\0\15\45\145\0"+
    "\1\45\4\0\1\45\2\0\12\45\1\0\1\45\3\0"+
    "\5\45\6\0\1\45\1\0\1\45\1\0\1\45\1\0"+
    "\4\45\1\0\13\45\2\0\4\45\5\0\5\45\4\0"+
    "\1\45\64\0\2\45\u017b\0\57\45\1\0\57\45\1\0"+
    "\205\45\6\0\4\45\3\0\2\45\14\0\46\45\1\0"+
    "\1\45\5\0\1\45\2\0\70\45\7\0\1\45\20\0"+
    "\27\45\11\0\7\45\1\0\7\45\1\0\7\45\1\0"+
    "\7\45\1\0\7\45\1\0\7\45\1\0\7\45\1\0"+
    "\7\45\120\0\1\45\325\0\2\45\52\0\5\45\5\0"+
    "\2\45\4\0\126\45\6\0\3\45\1\0\132\45\1\0"+
    "\4\45\5\0\53\45\1\0\136\45\21\0\33\45\65\0"+
    "\306\45\112\0\360\45\20\0\215\45\103\0\56\45\2\0"+
    "\15\45\3\0\20\45\12\0\2\45\24\0\57\45\20\0"+
    "\37\45\2\0\106\45\61\0\11\45\2\0\147\45\2\0"+
    "\65\45\2\0\5\45\60\0\13\45\1\0\3\45\1\0"+
    "\4\45\1\0\27\45\35\0\64\45\16\0\62\45\76\0"+
    "\6\45\3\0\1\45\1\0\2\45\13\0\34\45\12\0"+
    "\27\45\31\0\35\45\7\0\57\45\34\0\1\45\20\0"+
    "\5\45\1\0\12\45\12\0\5\45\1\0\51\45\27\0"+
    "\3\45\1\0\10\45\24\0\27\45\3\0\1\45\3\0"+
    "\62\45\1\0\1\45\3\0\2\45\2\0\5\45\2\0"+
    "\1\45\1\0\1\45\30\0\3\45\2\0\13\45\7\0"+
    "\3\45\14\0\6\45\2\0\6\45\2\0\6\45\11\0"+
    "\7\45\1\0\7\45\1\0\53\45\1\0\14\45\10\0"+
    "\163\45\35\0\244\45\14\0\27\45\4\0\61\45\4\0"+
    "\u0100\112\156\45\2\0\152\45\46\0\7\45\14\0\5\45"+
    "\5\0\1\45\1\0\12\45\1\0\15\45\1\0\5\45"+
    "\1\0\1\45\1\0\2\45\1\0\2\45\1\0\154\45"+
    "\41\0\153\45\22\0\100\45\2\0\66\45\50\0\14\45"+
    "\164\0\5\45\1\0\207\45\44\0\32\45\6\0\32\45"+
    "\13\0\131\45\3\0\6\45\2\0\6\45\2\0\6\45"+
    "\2\0\3\45\43\0\14\45\1\0\32\45\1\0\23\45"+
    "\1\0\2\45\1\0\17\45\2\0\16\45\42\0\173\45"+
    "\205\0\35\45\3\0\61\45\57\0\40\45\15\0\24\45"+
    "\1\0\10\45\6\0\46\45\12\0\36\45\2\0\44\45"+
    "\4\0\10\45\60\0\236\45\22\0\44\45\4\0\44\45"+
    "\4\0\50\45\10\0\64\45\234\0\67\45\11\0\26\45"+
    "\12\0\10\45\230\0\6\45\2\0\1\45\1\0\54\45"+
    "\1\0\2\45\3\0\1\45\2\0\27\45\12\0\27\45"+
    "\11\0\37\45\101\0\23\45\1\0\2\45\12\0\26\45"+
    "\12\0\32\45\106\0\70\45\6\0\2\45\100\0\1\45"+
    "\17\0\4\45\1\0\3\45\1\0\35\45\52\0\35\45"+
    "\3\0\35\45\43\0\10\45\1\0\34\45\33\0\66\45"+
    "\12\0\26\45\12\0\23\45\15\0\22\45\156\0\111\45"+
    "\67\0\63\45\15\0\63\45\15\0\44\45\334\0\35\45"+
    "\12\0\1\45\10\0\26\45\232\0\27\45\14\0\65\45"+
    "\113\0\55\45\40\0\31\45\32\0\44\45\35\0\1\45"+
    "\13\0\43\45\3\0\1\45\14\0\60\45\16\0\4\45"+
    "\25\0\1\45\1\0\1\45\43\0\22\45\1\0\31\45"+
    "\124\0\7\45\1\0\1\45\1\0\4\45\1\0\17\45"+
    "\1\0\12\45\7\0\57\45\46\0\10\45\2\0\2\45"+
    "\2\0\26\45\1\0\7\45\1\0\2\45\1\0\5\45"+
    "\3\0\1\45\22\0\1\45\14\0\5\45\236\0\65\45"+
    "\22\0\4\45\24\0\1\45\40\0\60\45\24\0\2\45"+
    "\1\0\1\45\270\0\57\45\51\0\4\45\44\0\60\45"+
    "\24\0\1\45\73\0\53\45\15\0\1\45\107\0\33\45"+
    "\345\0\54\45\164\0\100\45\37\0\1\45\240\0\10\45"+
    "\2\0\47\45\20\0\1\45\1\0\1\45\34\0\1\45"+
    "\12\0\50\45\7\0\1\45\25\0\1\45\13\0\56\45"+
    "\23\0\1\45\42\0\71\45\7\0\11\45\1\0\45\45"+
    "\21\0\1\45\61\0\36\45\160\0\7\45\1\0\2\45"+
    "\1\0\46\45\25\0\1\45\31\0\6\45\1\0\2\45"+
    "\1\0\40\45\16\0\1\45\u0147\0\23\45\15\0\232\45"+
    "\346\0\304\45\274\0\57\45\321\0\107\45\271\0\71\45"+
    "\7\0\37\45\161\0\36\45\22\0\60\45\20\0\4\45"+
    "\37\0\25\45\5\0\23\45\260\0\100\45\200\0\113\45"+
    "\5\0\1\45\102\0\15\45\100\0\2\45\1\0\1\45"+
    "\34\0\370\45\10\0\363\45\15\0\37\45\61\0\3\45"+
    "\21\0\4\45\10\0\u018c\45\4\0\153\45\5\0\15\45"+
    "\3\0\11\45\7\0\12\45\146\0\125\45\1\0\107\45"+
    "\1\0\2\45\2\0\1\45\2\0\2\45\2\0\4\45"+
    "\1\0\14\45\1\0\1\45\1\0\7\45\1\0\101\45"+
    "\1\0\4\45\2\0\10\45\1\0\7\45\1\0\34\45"+
    "\1\0\4\45\1\0\5\45\1\0\1\45\3\0\7\45"+
    "\1\0\u0154\45\2\0\31\45\1\0\31\45\1\0\37\45"+
    "\1\0\31\45\1\0\37\45\1\0\31\45\1\0\37\45"+
    "\1\0\31\45\1\0\37\45\1\0\31\45\1\0\10\45"+
    "\64\0\55\45\12\0\7\45\20\0\1\45\u0171\0\54\45"+
    "\24\0\305\45\73\0\104\45\7\0\1\45\264\0\4\45"+
    "\1\0\33\45\1\0\2\45\1\0\1\45\2\0\1\45"+
    "\1\0\12\45\1\0\4\45\1\0\1\45\1\0\1\45"+
    "\6\0\1\45\4\0\1\45\1\0\1\45\1\0\1\45"+
    "\1\0\3\45\1\0\2\45\1\0\1\45\2\0\1\45"+
    "\1\0\1\45\1\0\1\45\1\0\1\45\1\0\1\45"+
    "\1\0\2\45\1\0\1\45\2\0\4\45\1\0\7\45"+
    "\1\0\4\45\1\0\4\45\1\0\1\45\1\0\12\45"+
    "\1\0\21\45\5\0\3\45\1\0\5\45\1\0\21\45"+
    "\104\0\327\45\51\0\65\45\13\0\336\45\2\0\u0182\45"+
    "\16\0\u0131\45\37\0\36\45\342\0";

  private static int [] zzUnpackcmap_blocks() {
    int [] result = new int[27904];
    int offset = 0;
    offset = zzUnpackcmap_blocks(ZZ_CMAP_BLOCKS_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackcmap_blocks(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 DFA states to action switch labels.
   */
  private static final int [] ZZ_ACTION = zzUnpackAction();

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

  private static int [] zzUnpackAction() {
    int [] result = new int[754];
    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\113\0\226\0\341\0\u012c\0\u0177\0\u01c2\0\u020d"+
    "\0\u0258\0\u02a3\0\u02ee\0\u0339\0\u0384\0\u03cf\0\u03cf\0\u041a"+
    "\0\u041a\0\u0465\0\u04b0\0\u04fb\0\u0546\0\u0591\0\u05dc\0\u0627"+
    "\0\u03cf\0\u03cf\0\u0672\0\u06bd\0\u03cf\0\u0708\0\u0753\0\u079e"+
    "\0\u07e9\0\u0834\0\u087f\0\u03cf\0\u08ca\0\u0915\0\u0960\0\u09ab"+
    "\0\u03cf\0\u09f6\0\u03cf\0\u0a41\0\u03cf\0\u0a8c\0\u0ad7\0\u0b22"+
    "\0\u0b6d\0\u0bb8\0\u0c03\0\u0c4e\0\u0c99\0\u0ce4\0\u0d2f\0\u0d7a"+
    "\0\u0dc5\0\u0e10\0\u0e5b\0\u0ea6\0\u0ef1\0\u0f3c\0\u03cf\0\u0f87"+
    "\0\u03cf\0\u03cf\0\u03cf\0\u03cf\0\u03cf\0\u03cf\0\u0fd2\0\u101d"+
    "\0\u0a41\0\u03cf\0\u1068\0\u10b3\0\u10fe\0\u03cf\0\u03cf\0\u03cf"+
    "\0\u1149\0\u1194\0\u11df\0\u122a\0\u1275\0\u12c0\0\u03cf\0\u130b"+
    "\0\u1356\0\u13a1\0\u13ec\0\u03cf\0\u1437\0\u1482\0\u14cd\0\u1518"+
    "\0\u1563\0\u15ae\0\u15f9\0\u1644\0\u168f\0\u16da\0\u1725\0\u1770"+
    "\0\u17bb\0\u1806\0\u1851\0\u189c\0\u18e7\0\u03cf\0\u03cf\0\u1932"+
    "\0\u03cf\0\u03cf\0\u197d\0\u19c8\0\u1a13\0\u1a5e\0\u1aa9\0\u1af4"+
    "\0\u1b3f\0\u1b8a\0\u1bd5\0\u03cf\0\u03cf\0\u03cf\0\u03cf\0\u1c20"+
    "\0\u1c6b\0\u1cb6\0\u1d01\0\u03cf\0\u03cf\0\u03cf\0\u03cf\0\u03cf"+
    "\0\u03cf\0\u03cf\0\u03cf\0\u1d4c\0\u1d97\0\u1de2\0\u1e2d\0\u1e78"+
    "\0\u1ec3\0\u03cf\0\u1f0e\0\u03cf\0\u03cf\0\u03cf\0\u03cf\0\u1f59"+
    "\0\u1fa4\0\u03cf\0\u1fef\0\u203a\0\u2085\0\u20d0\0\u03cf\0\u03cf"+
    "\0\u211b\0\u03cf\0\u03cf\0\u03cf\0\u2166\0\u21b1\0\u03cf\0\u21fc"+
    "\0\u2247\0\u2292\0\u22dd\0\u2328\0\u2373\0\u23be\0\u2409\0\u2454"+
    "\0\u249f\0\u24ea\0\u2535\0\u2580\0\u25cb\0\u2616\0\u2661\0\u26ac"+
    "\0\u26f7\0\u09f6\0\u2742\0\u278d\0\u27d8\0\u2823\0\u286e\0\u28b9"+
    "\0\u2904\0\u294f\0\u299a\0\u29e5\0\u2a30\0\u2a7b\0\u2ac6\0\u2b11"+
    "\0\u2b5c\0\u2ba7\0\u2bf2\0\u2c3d\0\u2c88\0\u2cd3\0\u2d1e\0\u2d69"+
    "\0\u2db4\0\u2dff\0\u03cf\0\u03cf\0\u03cf\0\u03cf\0\u03cf\0\u2e4a"+
    "\0\u03cf\0\u2e95\0\u2ee0\0\u2f2b\0\u03cf\0\u03cf\0\u03cf\0\u03cf"+
    "\0\u03cf\0\u2f76\0\u2fc1\0\u300c\0\u3057\0\u30a2\0\u30ed\0\u3138"+
    "\0\u3183\0\u31ce\0\u3219\0\u3264\0\u32af\0\u32fa\0\u3345\0\u3390"+
    "\0\u33db\0\u3426\0\u3471\0\u1437\0\u34bc\0\u3507\0\u3552\0\u359d"+
    "\0\u35e8\0\u3633\0\u367e\0\u36c9\0\u3714\0\u375f\0\u37aa\0\u37f5"+
    "\0\u3840\0\u388b\0\u38d6\0\u3921\0\u396c\0\u39b7\0\u3a02\0\u3a4d"+
    "\0\u3a98\0\u3ae3\0\u3b2e\0\u3b79\0\u3bc4\0\u19c8\0\u03cf\0\u3c0f"+
    "\0\u03cf\0\u3c5a\0\u3ca5\0\u3cf0\0\u03cf\0\u03cf\0\u3d3b\0\u3d86"+
    "\0\u03cf\0\u03cf\0\u03cf\0\u03cf\0\u3dd1\0\u3e1c\0\u3e67\0\u3eb2"+
    "\0\u3efd\0\u3f48\0\u3f93\0\u3fde\0\u03cf\0\u03cf\0\u03cf\0\u03cf"+
    "\0\u03cf\0\u03cf\0\u4029\0\u03cf\0\u4074\0\u40bf\0\u410a\0\u4155"+
    "\0\u41a0\0\u41eb\0\u4236\0\u4281\0\u42cc\0\u4317\0\u4362\0\u43ad"+
    "\0\u43f8\0\u4443\0\u448e\0\u44d9\0\u4524\0\u456f\0\u09f6\0\u45ba"+
    "\0\u4605\0\u4650\0\u469b\0\u46e6\0\u09f6\0\u4731\0\u477c\0\u47c7"+
    "\0\u4812\0\u485d\0\u48a8\0\u48f3\0\u493e\0\u4989\0\u49d4\0\u4a1f"+
    "\0\u4a6a\0\u4ab5\0\u4b00\0\u4b4b\0\u4b96\0\u4be1\0\u4c2c\0\u4c77"+
    "\0\u4cc2\0\u09f6\0\u09f6\0\u4d0d\0\u4d58\0\u4da3\0\u4dee\0\u03cf"+
    "\0\u2e95\0\u2ee0\0\u4e39\0\u03cf\0\u4e84\0\u4ecf\0\u4f1a\0\u4f65"+
    "\0\u4fb0\0\u4ffb\0\u5046\0\u5091\0\u50dc\0\u5127\0\u5172\0\u51bd"+
    "\0\u5208\0\u5253\0\u529e\0\u52e9\0\u5334\0\u537f\0\u1437\0\u53ca"+
    "\0\u5415\0\u5460\0\u54ab\0\u54f6\0\u1437\0\u5541\0\u558c\0\u55d7"+
    "\0\u5622\0\u566d\0\u56b8\0\u5703\0\u574e\0\u5799\0\u57e4\0\u582f"+
    "\0\u587a\0\u58c5\0\u5910\0\u595b\0\u59a6\0\u59f1\0\u5a3c\0\u5a87"+
    "\0\u5ad2\0\u1437\0\u1437\0\u5b1d\0\u5b68\0\u5bb3\0\u5bfe\0\u03cf"+
    "\0\u5c49\0\u3c5a\0\u5c94\0\u5cdf\0\u5d2a\0\u5d75\0\u5dc0\0\u5e0b"+
    "\0\u5e56\0\u5ea1\0\u5eec\0\u5f37\0\u03cf\0\u5f82\0\u5fcd\0\u03cf"+
    "\0\u03cf\0\u6018\0\u6063\0\u60ae\0\u60f9\0\u09f6\0\u09f6\0\u6144"+
    "\0\u09f6\0\u618f\0\u61da\0\u6225\0\u6270\0\u09f6\0\u09f6\0\u62bb"+
    "\0\u6306\0\u6351\0\u639c\0\u63e7\0\u6432\0\u647d\0\u64c8\0\u09f6"+
    "\0\u6513\0\u655e\0\u09f6\0\u65a9\0\u65f4\0\u663f\0\u668a\0\u66d5"+
    "\0\u6720\0\u676b\0\u67b6\0\u6801\0\u684c\0\u6897\0\u68e2\0\u692d"+
    "\0\u6978\0\u09f6\0\u69c3\0\u6a0e\0\u6a59\0\u09f6\0\u09f6\0\u6aa4"+
    "\0\u6aef\0\u6b3a\0\u6b85\0\u6bd0\0\u6c1b\0\u6c66\0\u1437\0\u1437"+
    "\0\u6cb1\0\u1437\0\u6cfc\0\u6d47\0\u6d92\0\u6ddd\0\u1437\0\u1437"+
    "\0\u6e28\0\u6e73\0\u6ebe\0\u6f09\0\u6f54\0\u6f9f\0\u6fea\0\u7035"+
    "\0\u1437\0\u7080\0\u1437\0\u70cb\0\u7116\0\u7161\0\u71ac\0\u71f7"+
    "\0\u7242\0\u728d\0\u72d8\0\u7323\0\u736e\0\u73b9\0\u7404\0\u744f"+
    "\0\u749a\0\u1437\0\u74e5\0\u7530\0\u757b\0\u1437\0\u1437\0\u75c6"+
    "\0\u7611\0\u765c\0\u76a7\0\u76f2\0\u773d\0\u7788\0\u77d3\0\u781e"+
    "\0\u5eec\0\u03cf\0\u7869\0\u78b4\0\u78ff\0\u794a\0\u09f6\0\u09f6"+
    "\0\u09f6\0\u7995\0\u79e0\0\u7a2b\0\u7a76\0\u09f6\0\u7ac1\0\u09f6"+
    "\0\u7b0c\0\u7b57\0\u7ba2\0\u7bed\0\u7c38\0\u7c83\0\u7cce\0\u7d19"+
    "\0\u7d64\0\u7daf\0\u7dfa\0\u7e45\0\u7e90\0\u7edb\0\u09f6\0\u7f26"+
    "\0\u7f71\0\u09f6\0\u7fbc\0\u8007\0\u8052\0\u09f6\0\u809d\0\u80e8"+
    "\0\u09f6\0\u09f6\0\u8133\0\u817e\0\u81c9\0\u1437\0\u1437\0\u1437"+
    "\0\u8214\0\u825f\0\u82aa\0\u82f5\0\u1437\0\u8340\0\u1437\0\u838b"+
    "\0\u83d6\0\u8421\0\u846c\0\u84b7\0\u8502\0\u854d\0\u8598\0\u85e3"+
    "\0\u862e\0\u8679\0\u86c4\0\u870f\0\u1437\0\u875a\0\u87a5\0\u1437"+
    "\0\u87f0\0\u883b\0\u8886\0\u1437\0\u88d1\0\u891c\0\u1437\0\u1437"+
    "\0\u8967\0\u03cf\0\u7869\0\u89b2\0\u09f6\0\u89fd\0\u8a48\0\u8a93"+
    "\0\u09f6\0\u8ade\0\u8b29\0\u8b74\0\u09f6\0\u8bbf\0\u8c0a\0\u09f6"+
    "\0\u8c55\0\u8ca0\0\u8ceb\0\u8d36\0\u8d81\0\u09f6\0\u09f6\0\u09f6"+
    "\0\u09f6\0\u09f6\0\u8dcc\0\u09f6\0\u8e17\0\u09f6\0\u8e62\0\u8ead"+
    "\0\u8ef8\0\u1437\0\u8f43\0\u8f8e\0\u8fd9\0\u1437\0\u9024\0\u906f"+
    "\0\u90ba\0\u1437\0\u9105\0\u9150\0\u1437\0\u919b\0\u91e6\0\u9231"+
    "\0\u927c\0\u1437\0\u1437\0\u1437\0\u1437\0\u1437\0\u92c7\0\u1437"+
    "\0\u9312\0\u1437\0\u935d\0\u93a8\0\u93f3\0\u943e\0\u09f6\0\u9489"+
    "\0\u09f6\0\u09f6\0\u09f6\0\u94d4\0\u951f\0\u956a\0\u95b5\0\u09f6"+
    "\0\u09f6\0\u09f6\0\u9600\0\u964b\0\u9696\0\u96e1\0\u972c\0\u9777"+
    "\0\u1437\0\u97c2\0\u1437\0\u1437\0\u1437\0\u980d\0\u9858\0\u98a3"+
    "\0\u1437\0\u1437\0\u1437\0\u98ee\0\u9939\0\u9984\0\u99cf\0\u9a1a"+
    "\0\u9a65\0\u09f6\0\u09f6\0\u9ab0\0\u9afb\0\u9b46\0\u9b91\0\u9bdc"+
    "\0\u09f6\0\u9c27\0\u9c72\0\u09f6\0\u1437\0\u1437\0\u9cbd\0\u9d08"+
    "\0\u9d53\0\u9d9e\0\u1437\0\u9de9\0\u9e34\0\u1437\0\u9e7f\0\u9eca"+
    "\0\u9f15\0\u09f6\0\u9f60\0\u09f6\0\u9fab\0\u09f6\0\u9ff6\0\ua041"+
    "\0\u1437\0\u1437\0\ua08c\0\u1437\0\ua0d7\0\u09f6\0\u09f6\0\u03cf"+
    "\0\ua122\0\u1437\0\u1437\0\ua16d\0\ua1b8\0\ua203\0\ua24e\0\u03cf"+
    "\0\u09f6\0\u1437";

  private static int [] zzUnpackRowMap() {
    int [] result = new int[754];
    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() - 1;
    while (i < l) {
      int high = packed.charAt(i++) << 16;
      result[j++] = high | packed.charAt(i++);
    }
    return j;
  }

  /**
   * The transition table of the DFA
   */
  private static final int [] ZZ_TRANS = zzUnpacktrans();

  private static final String ZZ_TRANS_PACKED_0 =
    "\1\16\1\17\2\20\1\21\1\20\1\22\1\23\1\24"+
    "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+
    "\1\35\1\36\1\37\1\40\1\41\2\42\1\43\1\44"+
    "\1\45\1\46\1\47\1\50\1\51\12\52\1\53\1\54"+
    "\1\55\1\56\1\52\1\57\1\60\1\61\1\62\1\63"+
    "\1\64\2\52\1\65\1\52\1\66\1\52\1\67\1\52"+
    "\1\70\1\71\1\72\1\73\1\52\1\74\1\75\1\52"+
    "\1\76\1\52\1\77\1\100\1\101\1\102\1\0\1\16"+
    "\1\17\2\20\1\21\1\20\1\22\1\23\1\24\1\25"+
    "\1\26\1\27\1\30\1\31\1\32\1\33\1\34\1\35"+
    "\1\36\1\37\1\40\1\41\2\42\1\43\1\44\1\45"+
    "\1\46\1\47\1\50\1\51\12\52\1\53\1\54\1\55"+
    "\1\56\1\52\1\57\1\60\1\61\1\62\1\63\1\64"+
    "\2\52\1\65\1\52\1\66\1\52\1\67\1\52\1\70"+
    "\1\71\1\72\1\73\1\52\1\74\1\75\1\52\1\76"+
    "\1\52\1\103\1\100\1\104\1\102\1\0\1\16\1\17"+
    "\2\20\1\21\1\20\1\22\1\23\1\24\1\25\1\26"+
    "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36"+
    "\1\37\1\40\1\41\2\42\1\43\1\44\1\45\1\46"+
    "\1\47\1\50\1\51\12\52\1\53\1\54\1\55\1\56"+
    "\31\52\1\103\1\100\1\105\1\102\1\0\1\106\1\17"+
    "\2\106\1\17\4\106\1\107\12\106\1\110\25\106\1\111"+
    "\40\106\14\112\1\113\35\112\1\114\40\112\2\115\1\116"+
    "\2\115\1\116\1\115\1\117\1\115\1\120\40\115\1\121"+
    "\40\115\7\122\1\123\1\122\1\120\40\122\1\124\40\122"+
    "\11\125\1\126\12\125\1\127\25\125\1\130\40\125\11\131"+
    "\1\132\12\131\1\133\66\131\37\134\12\135\4\134\1\135"+
    "\1\136\1\137\1\140\1\141\1\142\1\143\2\135\1\144"+
    "\1\135\1\145\1\135\1\146\1\135\1\147\1\150\1\151"+
    "\1\152\1\135\1\153\1\154\1\135\1\155\1\135\1\156"+
    "\4\134\23\157\1\160\67\157\37\161\12\135\4\161\31\135"+
    "\5\161\1\162\5\163\44\162\1\164\40\162\114\0\5\20"+
    "\44\0\1\165\73\0\1\166\32\0\1\167\24\0\2\170"+
    "\1\0\2\170\1\0\1\170\1\171\1\170\1\0\40\170"+
    "\1\172\40\170\6\0\1\173\115\0\1\52\12\0\1\174"+
    "\3\52\7\0\12\52\4\0\31\52\40\0\1\175\72\0"+
    "\1\176\17\0\1\177\57\0\2\200\1\0\2\200\1\0"+
    "\6\200\1\201\35\200\1\202\40\200\17\0\1\203\3\0"+
    "\1\204\7\0\1\205\77\0\1\206\12\0\1\207\101\0"+
    "\1\210\10\0\1\211\1\212\71\0\1\213\7\0\1\214"+
    "\1\0\3\215\102\0\1\216\4\0\1\217\111\0\1\220"+
    "\1\0\3\42\10\0\1\221\1\222\1\223\1\224\1\225"+
    "\1\0\1\226\1\227\1\230\4\0\1\231\1\0\1\221"+
    "\1\0\1\222\1\223\1\224\1\225\1\0\1\226\1\0"+
    "\1\227\12\0\1\230\32\0\1\220\1\0\3\42\11\0"+
    "\1\222\1\223\1\224\1\225\1\0\1\226\1\227\5\0"+
    "\1\231\3\0\1\222\1\223\1\224\1\225\1\0\1\226"+
    "\1\0\1\227\52\0\1\232\105\0\1\233\6\0\1\234"+
    "\1\235\112\0\1\236\55\0\1\237\34\0\1\240\1\241"+
    "\101\0\1\242\4\0\1\243\2\0\1\244\1\0\1\245"+
    "\66\0\1\52\13\0\3\52\7\0\12\52\4\0\31\52"+
    "\7\0\3\17\1\246\140\0\1\247\70\0\1\52\13\0"+
    "\3\52\7\0\12\52\4\0\2\52\1\250\16\52\1\251"+
    "\7\52\16\0\1\52\13\0\3\52\7\0\12\52\4\0"+
    "\16\52\1\252\1\52\1\253\6\52\1\254\1\52\16\0"+
    "\1\52\13\0\3\52\7\0\12\52\4\0\1\52\1\255"+
    "\6\52\1\256\2\52\1\257\2\52\1\260\12\52\16\0"+
    "\1\52\13\0\3\52\7\0\12\52\4\0\5\52\1\261"+
    "\10\52\1\262\12\52\16\0\1\52\13\0\3\52\7\0"+
    "\12\52\4\0\13\52\1\263\1\52\1\264\10\52\1\265"+
    "\2\52\16\0\1\52\13\0\3\52\7\0\12\52\4\0"+
    "\1\52\1\266\7\52\1\267\1\52\1\270\2\52\1\271"+
    "\12\52\16\0\1\52\13\0\3\52\7\0\12\52\4\0"+
    "\6\52\1\272\5\52\1\273\1\274\13\52\16\0\1\52"+
    "\13\0\3\52\7\0\12\52\4\0\16\52\1\275\12\52"+
    "\16\0\1\52\13\0\3\52\7\0\12\52\4\0\1\52"+
    "\1\276\3\52\1\277\10\52\1\300\4\52\1\301\5\52"+
    "\16\0\1\52\13\0\3\52\7\0\12\52\4\0\1\52"+
    "\1\302\3\52\1\303\12\52\1\304\2\52\1\305\5\52"+
    "\16\0\1\52\13\0\3\52\7\0\12\52\4\0\5\52"+
    "\1\306\23\52\16\0\1\52\13\0\3\52\7\0\12\52"+
    "\4\0\5\52\1\307\2\52\1\310\11\52\1\311\1\312"+
    "\1\52\1\313\1\52\1\314\1\52\16\0\1\52\13\0"+
    "\3\52\7\0\12\52\4\0\10\52\1\315\7\52\1\316"+
    "\10\52\16\0\1\52\13\0\3\52\7\0\12\52\4\0"+
    "\1\52\1\317\14\52\1\320\12\52\16\0\1\52\13\0"+
    "\3\52\7\0\12\52\4\0\10\52\1\321\20\52\16\0"+
    "\1\52\13\0\3\52\7\0\12\52\4\0\11\52\1\322"+
    "\17\52\40\0\1\323\53\0\1\324\27\0\1\325\105\0"+
    "\1\326\4\0\1\326\6\0\1\327\73\0\1\330\76\0"+
    "\113\112\2\115\1\0\2\115\1\0\1\115\1\0\1\115"+
    "\1\0\40\115\1\0\40\115\1\331\1\332\2\331\1\332"+
    "\45\331\1\333\40\331\7\122\1\0\1\122\1\0\40\122"+
    "\1\0\40\122\7\0\1\334\103\0\2\331\4\0\104\331"+
    "\1\0\11\125\1\0\12\125\1\0\25\125\1\0\40\125"+
    "\37\335\12\0\4\335\32\0\4\335\24\0\1\336\66\0"+
    "\11\131\1\0\12\131\1\0\66\131\11\337\1\340\12\337"+
    "\1\340\12\337\12\0\4\337\32\0\4\337\11\0\1\341"+
    "\126\0\3\135\7\0\12\135\4\0\31\135\32\0\3\135"+
    "\7\0\12\135\4\0\2\135\1\342\16\135\1\343\7\135"+
    "\32\0\3\135\7\0\12\135\4\0\16\135\1\344\1\135"+
    "\1\345\6\135\1\346\1\135\32\0\3\135\7\0\12\135"+
    "\4\0\1\135\1\347\6\135\1\350\2\135\1\351\2\135"+
    "\1\352\12\135\32\0\3\135\7\0\12\135\4\0\5\135"+
    "\1\353\10\135\1\354\12\135\32\0\3\135\7\0\12\135"+
    "\4\0\13\135\1\355\1\135\1\356\10\135\1\357\2\135"+
    "\32\0\3\135\7\0\12\135\4\0\1\135\1\360\7\135"+
    "\1\361\1\135\1\362\2\135\1\363\12\135\32\0\3\135"+
    "\7\0\12\135\4\0\6\135\1\364\5\135\1\365\1\366"+
    "\13\135\32\0\3\135\7\0\12\135\4\0\16\135\1\367"+
    "\12\135\32\0\3\135\7\0\12\135\4\0\1\135\1\370"+
    "\3\135\1\371\10\135\1\372\4\135\1\373\5\135\32\0"+
    "\3\135\7\0\12\135\4\0\1\135\1\374\3\135\1\375"+
    "\12\135\1\376\2\135\1\377\5\135\32\0\3\135\7\0"+
    "\12\135\4\0\5\135\1\u0100\23\135\32\0\3\135\7\0"+
    "\12\135\4\0\5\135\1\u0101\2\135\1\u0102\11\135\1\u0103"+
    "\1\u0104\1\135\1\u0105\1\135\1\u0106\1\135\32\0\3\135"+
    "\7\0\12\135\4\0\10\135\1\u0107\7\135\1\u0108\10\135"+
    "\32\0\3\135\7\0\12\135\4\0\1\135\1\u0109\14\135"+
    "\1\u010a\12\135\32\0\3\135\7\0\12\135\4\0\10\135"+
    "\1\u010b\20\135\32\0\3\135\7\0\12\135\4\0\11\135"+
    "\1\u010c\17\135\44\0\12\u010d\4\0\31\u010d\6\0\5\163"+
    "\44\0\1\u010e\42\0\4\163\107\0\4\20\140\0\1\u010f"+
    "\151\0\1\u0110\20\0\2\170\1\0\2\170\1\0\1\170"+
    "\1\u0111\1\170\1\0\40\170\1\172\40\170\7\0\1\u0112"+
    "\103\0\1\170\1\u0113\2\170\1\u0113\45\170\1\u0114\40\170"+
    "\2\173\1\0\2\173\1\0\105\173\2\200\1\0\2\200"+
    "\1\0\6\200\1\u0115\35\200\1\202\40\200\14\0\1\u0116"+
    "\76\0\1\200\1\u0117\2\200\1\u0117\45\200\1\u0118\40\200"+
    "\33\0\1\u0119\102\0\1\u011a\6\0\1\u011b\105\0\3\215"+
    "\11\0\1\222\1\223\1\224\1\u011c\10\0\1\u011d\3\0"+
    "\1\222\1\223\1\224\1\u011c\26\0\17\u011e\1\u011f\73\u011e"+
    "\2\217\1\0\2\217\1\0\105\217\25\0\3\215\110\0"+
    "\2\u0120\104\0\1\u0121\1\0\1\u0121\2\0\3\u0122\110\0"+
    "\3\u0123\7\0\5\u0123\12\0\6\u0123\54\0\3\42\25\0"+
    "\1\231\60\0\1\u0124\122\0\1\u0125\113\0\1\u0126\111\0"+
    "\1\u0127\1\u0128\54\0\1\u0129\34\0\1\u012a\1\u012b\101\0"+
    "\1\u012c\71\0\1\17\121\0\1\52\13\0\3\52\7\0"+
    "\12\52\4\0\21\52\1\u012d\7\52\16\0\1\52\13\0"+
    "\3\52\7\0\12\52\4\0\21\52\1\u012e\7\52\16\0"+
    "\1\52\13\0\3\52\7\0\12\52\4\0\16\52\1\u012f"+
    "\12\52\16\0\1\52\13\0\3\52\7\0\12\52\4\0"+
    "\5\52\1\u0130\23\52\16\0\1\52\13\0\3\52\7\0"+
    "\12\52\4\0\22\52\1\u0131\6\52\16\0\1\52\13\0"+
    "\3\52\7\0\12\52\4\0\21\52\1\u0132\1\u0133\6\52"+
    "\16\0\1\52\13\0\3\52\7\0\12\52\4\0\1\52"+
    "\1\u0134\27\52\16\0\1\52\13\0\3\52\7\0\12\52"+
    "\4\0\1\52\1\u0135\27\52\16\0\1\52\13\0\3\52"+
    "\7\0\12\52\4\0\15\52\1\u0136\13\52\16\0\1\52"+
    "\13\0\3\52\7\0\12\52\4\0\6\52\1\u0137\22\52"+
    "\16\0\1\52\13\0\3\52\7\0\12\52\4\0\23\52"+
    "\1\u0138\5\52\16\0\1\52\13\0\3\52\7\0\12\52"+
    "\4\0\21\52\1\u0139\7\52\16\0\1\52\13\0\3\52"+
    "\7\0\12\52\4\0\23\52\1\u013a\5\52\16\0\1\52"+
    "\13\0\3\52\7\0\12\52\4\0\22\52\1\u013b\6\52"+
    "\16\0\1\52\13\0\3\52\7\0\12\52\4\0\13\52"+
    "\1\u013c\15\52\16\0\1\52\13\0\3\52\7\0\12\52"+
    "\4\0\15\52\1\u013d\13\52\16\0\1\52\13\0\3\52"+
    "\7\0\12\52\4\0\16\52\1\u013e\12\52\16\0\1\52"+
    "\13\0\3\52\7\0\12\52\4\0\20\52\1\u013f\10\52"+
    "\16\0\1\52\13\0\3\52\7\0\12\52\4\0\17\52"+
    "\1\u0140\11\52\16\0\1\52\13\0\3\52\7\0\12\52"+
    "\4\0\21\52\1\u0141\1\u0142\6\52\16\0\1\52\13\0"+
    "\3\52\7\0\12\52\4\0\15\52\1\u0143\13\52\16\0"+
    "\1\52\13\0\3\52\7\0\12\52\4\0\22\52\1\u0144"+
    "\6\52\16\0\1\52\13\0\3\52\7\0\12\52\4\0"+
    "\25\52\1\u0145\3\52\16\0\1\52\13\0\3\52\7\0"+
    "\12\52\4\0\15\52\1\u0146\13\52\16\0\1\52\13\0"+
    "\3\52\7\0\12\52\4\0\13\52\1\u0147\15\52\16\0"+
    "\1\52\13\0\3\52\7\0\12\52\4\0\3\52\1\u0148"+
    "\25\52\16\0\1\52\13\0\3\52\7\0\12\52\4\0"+
    "\20\52\1\u0149\10\52\16\0\1\52\13\0\3\52\7\0"+
    "\12\52\4\0\11\52\1\u014a\4\52\1\u014b\12\52\16\0"+
    "\1\52\13\0\3\52\7\0\12\52\4\0\2\52\1\u014c"+
    "\26\52\16\0\1\52\13\0\3\52\7\0\12\52\4\0"+
    "\3\52\1\u014d\16\52\1\u014e\6\52\16\0\1\52\13\0"+
    "\3\52\7\0\12\52\4\0\1\52\1\u014f\27\52\16\0"+
    "\1\52\13\0\3\52\7\0\12\52\4\0\16\52\1\u0150"+
    "\12\52\16\0\1\52\13\0\3\52\7\0\12\52\4\0"+
    "\1\52\1\u0151\16\52\1\u0152\10\52\16\0\1\52\13\0"+
    "\3\52\7\0\12\52\4\0\17\52\1\u0153\11\52\16\0"+
    "\1\52\13\0\3\52\7\0\12\52\4\0\11\52\1\u0154"+
    "\17\52\16\0\1\52\13\0\3\52\7\0\12\52\4\0"+
    "\15\52\1\u0155\13\52\16\0\1\52\13\0\3\52\7\0"+
