diff --git a/python/src/com/jetbrains/python/lexer/BuildLexer.bat b/python/src/com/jetbrains/python/lexer/BuildLexer.bat
deleted file mode 100644
index 783ad28cf1ee..000000000000
--- a/python/src/com/jetbrains/python/lexer/BuildLexer.bat
+++ /dev/null
@@ -1,4 +0,0 @@
-set JAVA_HOME="C:\Program Files\Java\jdk1.5.0_12"
-call C:\Src\jflex-1.4.1\bin\jflex.bat --table --skel idea-skeleton Python.flex
-python FixLexer.py
-
diff --git a/python/src/com/jetbrains/python/lexer/FixLexer.py b/python/src/com/jetbrains/python/lexer/FixLexer.py
deleted file mode 100644
index 836b98a1de70..000000000000
--- a/python/src/com/jetbrains/python/lexer/FixLexer.py
+++ /dev/null
@@ -1,13 +0,0 @@
-import os, os.path
-if os.path.exists("_PythonLexerBad.java"): os.unlink("_PythonLexerBad.java")
-os.rename("_PythonLexer.java", "_PythonLexerBad.java")
-f = open("_PythonLexerBad.java", "r")
-out = open("_PythonLexer.java", "w")
-for line in f.readlines():
- i = line.find("zzBufferL[")
- if i >= 0:
- line = line [0:i-1] + "zzBufferL.charAt(" + line [i+10:-3] + ");\n"
- out.write(line)
-f.close()
-out.close()
-os.unlink("_PythonLexerBad.java")
diff --git a/python/src/com/jetbrains/python/lexer/Python.flex b/python/src/com/jetbrains/python/lexer/Python.flex
index e3b44ebf9a74..70bf908c9229 100644
--- a/python/src/com/jetbrains/python/lexer/Python.flex
+++ b/python/src/com/jetbrains/python/lexer/Python.flex
@@ -3,6 +3,7 @@ package com.jetbrains.python.lexer;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
+import com.jetbrains.python.PyTokenTypes;
%%
@@ -100,7 +101,6 @@ TRIPLE_APOS_LITERAL = {THREE_APOS} {STRING_3CHAR_APOS}* {THREE_APOS}
"not" { return PyTokenTypes.NOT_KEYWORD; }
"or" { return PyTokenTypes.OR_KEYWORD; }
"pass" { return PyTokenTypes.PASS_KEYWORD; }
-"print" { return PyTokenTypes.PRINT_KEYWORD; }
"raise" { return PyTokenTypes.RAISE_KEYWORD; }
"return" { return PyTokenTypes.RETURN_KEYWORD; }
"try" { return PyTokenTypes.TRY_KEYWORD; }
diff --git a/python/src/com/jetbrains/python/lexer/PythonHighlightingLexer.java b/python/src/com/jetbrains/python/lexer/PythonHighlightingLexer.java
index 4e92461223f7..1e4bc2fc0226 100644
--- a/python/src/com/jetbrains/python/lexer/PythonHighlightingLexer.java
+++ b/python/src/com/jetbrains/python/lexer/PythonHighlightingLexer.java
@@ -21,6 +21,10 @@ public class PythonHighlightingLexer extends PythonLexer {
if (tokenText.equals("with")) return PyTokenTypes.WITH_KEYWORD;
if (tokenText.equals("as")) return PyTokenTypes.AS_KEYWORD;
}
+ if (myLanguageLevel.hasPrintStatement()) {
+ final String tokenText = getTokenText();
+ if (tokenText.equals("print")) return PyTokenTypes.PRINT_KEYWORD;
+ }
return super.getTokenType();
}
}
diff --git a/python/src/com/jetbrains/python/lexer/_PythonLexer.java b/python/src/com/jetbrains/python/lexer/_PythonLexer.java
index f9096b77f757..7042894115ee 100644
--- a/python/src/com/jetbrains/python/lexer/_PythonLexer.java
+++ b/python/src/com/jetbrains/python/lexer/_PythonLexer.java
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.2 on 10/10/08 9:30 PM */
+/* The following code was generated by JFlex 1.4.1 on 15.01.10 16:04 */
/* It's an automatically generated code. Do not modify it. */
package com.jetbrains.python.lexer;
@@ -10,9 +10,9 @@ import com.jetbrains.python.PyTokenTypes;
/**
* This class is a scanner generated by
- * JFlex 1.4.2
- * on 10/10/08 9:30 PM from the specification file
- * Python.flex
+ * JFlex 1.4.1
+ * on 15.01.10 16:04 from the specification file
+ * C:/JetBrains/IDEA/tools/lexer/../../python/src/com/jetbrains/python/lexer/Python.flex
*/
class _PythonLexer implements FlexLexer {
/** initial size of the lookahead buffer */
@@ -21,16 +21,6 @@ class _PythonLexer implements FlexLexer {
/** lexical states */
public static final int YYINITIAL = 0;
- /**
- * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
- * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
- * at the beginning of a line
- * l is of the form l = 2*k, k a non negative integer
- */
- private static final int ZZ_LEXSTATE[] = {
- 0, 0
- };
-
/**
* Translates characters to character classes
*/
@@ -62,19 +52,18 @@ class _PythonLexer implements FlexLexer {
"\1\24\1\25\1\26\1\1\1\27\1\30\1\31\1\32"+
"\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+
"\1\2\2\0\1\2\1\43\1\0\1\44\1\45\6\10"+
- "\1\46\1\47\1\50\16\3\1\51\10\3\1\52\1\53"+
+ "\1\46\1\47\1\50\16\3\1\51\7\3\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\2\1\43"+
"\1\0\1\10\2\0\1\3\1\72\1\3\1\73\1\74"+
- "\1\75\6\3\1\76\6\3\1\77\5\3\1\100\1\101"+
+ "\1\75\6\3\1\76\6\3\1\77\4\3\1\100\1\101"+
"\1\102\1\103\6\0\2\3\1\104\1\105\1\106\10\3"+
- "\1\107\1\110\4\3\4\0\3\3\1\111\1\3\1\112"+
- "\1\113\3\3\1\114\1\115\1\3\1\116\1\117\1\120"+
- "\1\121\1\122\1\3\1\123\1\3\1\124\1\3\1\125"+
- "\1\126";
+ "\1\107\1\110\3\3\4\0\3\3\1\111\1\3\1\112"+
+ "\1\113\3\3\1\114\1\3\1\115\1\116\1\117\1\120"+
+ "\1\121\1\3\1\122\1\3\1\123\1\3\1\124\1\125";
private static int [] zzUnpackAction() {
- int [] result = new int[201];
+ int [] result = new int[197];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -110,24 +99,23 @@ class _PythonLexer implements FlexLexer {
"\0\u0bc7\0\u0c0a\0\u0c4d\0\u0c90\0\u0cd3\0\u0d16\0\u010c\0\u010c"+
"\0\u010c\0\u0d59\0\u0d9c\0\u0ddf\0\u0e22\0\u0e65\0\u0ea8\0\u0eeb"+
"\0\u0f2e\0\u0f71\0\u0fb4\0\u0ff7\0\u103a\0\u107d\0\u10c0\0\u010c"+
- "\0\u1103\0\u1146\0\u1189\0\u11cc\0\u120f\0\u1252\0\u1295\0\u12d8"+
- "\0\103\0\103\0\103\0\u131b\0\103\0\u135e\0\103\0\103"+
- "\0\103\0\103\0\103\0\u13a1\0\103\0\103\0\u13e4\0\103"+
- "\0\u1427\0\u146a\0\u14ad\0\103\0\u14f0\0\u1533\0\u1576\0\u010c"+
- "\0\u15b9\0\u010c\0\u010c\0\u010c\0\u15fc\0\u163f\0\u1682\0\u16c5"+
- "\0\u1708\0\u174b\0\u010c\0\u178e\0\u17d1\0\u1814\0\u1857\0\u189a"+
- "\0\u18dd\0\u010c\0\u1920\0\u1963\0\u19a6\0\u19e9\0\u1a2c\0\103"+
- "\0\103\0\103\0\103\0\u1a6f\0\u1ab2\0\u1af5\0\u1b38\0\u1b7b"+
- "\0\u1bbe\0\u1c01\0\u1c44\0\u010c\0\u010c\0\u010c\0\u1c87\0\u1cca"+
- "\0\u1d0d\0\u1d50\0\u1d93\0\u1dd6\0\u1e19\0\u1e5c\0\u010c\0\u010c"+
+ "\0\u1103\0\u1146\0\u1189\0\u11cc\0\u120f\0\u1252\0\u1295\0\103"+
+ "\0\103\0\103\0\u12d8\0\103\0\u131b\0\103\0\103\0\103"+
+ "\0\103\0\103\0\u135e\0\103\0\103\0\u13a1\0\103\0\u13e4"+
+ "\0\u1427\0\u146a\0\103\0\u14ad\0\u14f0\0\u1533\0\u010c\0\u1576"+
+ "\0\u010c\0\u010c\0\u010c\0\u15b9\0\u15fc\0\u163f\0\u1682\0\u16c5"+
+ "\0\u1708\0\u010c\0\u174b\0\u178e\0\u17d1\0\u1814\0\u1857\0\u189a"+
+ "\0\u010c\0\u18dd\0\u1920\0\u1963\0\u19a6\0\103\0\103\0\103"+
+ "\0\103\0\u19e9\0\u1a2c\0\u1a6f\0\u1ab2\0\u1af5\0\u1b38\0\u1b7b"+
+ "\0\u1bbe\0\u010c\0\u010c\0\u010c\0\u1c01\0\u1c44\0\u1c87\0\u1cca"+
+ "\0\u1d0d\0\u1d50\0\u1d93\0\u1dd6\0\u010c\0\u010c\0\u1e19\0\u1e5c"+
"\0\u1e9f\0\u1ee2\0\u1f25\0\u1f68\0\u1fab\0\u1fee\0\u2031\0\u2074"+
- "\0\u20b7\0\u20fa\0\u213d\0\u010c\0\u2180\0\u010c\0\u010c\0\u21c3"+
- "\0\u2206\0\u2249\0\u010c\0\u010c\0\u228c\0\u010c\0\u010c\0\u010c"+
- "\0\u010c\0\u010c\0\u22cf\0\u010c\0\u2312\0\u010c\0\u2355\0\u010c"+
- "\0\u010c";
+ "\0\u010c\0\u20b7\0\u010c\0\u010c\0\u20fa\0\u213d\0\u2180\0\u010c"+
+ "\0\u21c3\0\u010c\0\u010c\0\u010c\0\u010c\0\u010c\0\u2206\0\u010c"+
+ "\0\u2249\0\u010c\0\u228c\0\u010c\0\u010c";
private static int [] zzUnpackRowMap() {
- int [] result = new int[201];
+ int [] result = new int[197];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -147,920 +135,213 @@ class _PythonLexer implements FlexLexer {
/**
* The transition table of the DFA
*/
- private static final int ZZ_TRANS [] = {
- 1, 2, 3, 3, 4, 4, 4, 5, 6, 4,
- 7, 4, 8, 4, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 4, 21, 22, 23,
- 24, 4, 25, 26, 27, 9, 28, 4, 29, 30,
- 4, 31, 32, 4, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 56, 57, 56, -1, 58,
- 59, -1, -1, -1, 60, 61, -1, 62, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 61, -1, -1, -1, -1, -1, 59, -1, -1,
- -1, 58, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 3, 3, 3, -1, -1, 59, -1, -1,
- -1, 60, 61, -1, 62, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 61, -1,
- -1, -1, -1, -1, 59, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,
- 4, 4, 4, 4, 4, -1, -1, 4, -1, 4,
- -1, 4, 4, 4, -1, -1, -1, 4, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 5, 5, 5, 5, 5,
- 5, 5, 5, -1, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, -1, -1, -1, -1, -1, -1, -1, -1,
- 6, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 60, 60, 60, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 63, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 4, 4, 4, 4, 4, 4,
- -1, -1, 4, -1, 4, -1, 4, 4, 10, 11,
- -1, 13, 4, -1, -1, -1, 4, 4, 4, 4,
- 4, 10, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, -1, -1, 4,
- -1, 4, -1, 4, 4, 4, 11, -1, 13, 4,
- -1, -1, -1, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 64, 64, 64,
- 64, 64, 64, 64, 64, -1, 64, 64, 64, 64,
- 64, 64, 64, 65, 66, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 67, 67, 67, 67, 67, 67,
- 67, 67, -1, 67, 67, 67, 67, 67, 67, 67,
- 67, 68, 69, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, -1, 4, 4, 4, 4, 4, 4, -1, -1,
- 4, -1, 4, -1, 4, 4, 4, -1, -1, -1,
- 4, -1, -1, -1, 4, 70, 4, 71, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 72, 4, 4,
- 4, 73, 4, 4, 4, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,
- 4, 4, 4, 4, 4, -1, -1, 4, -1, 4,
- -1, 4, 4, 4, -1, -1, -1, 4, -1, -1,
- -1, 4, 74, 4, 75, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, -1, -1, 4, -1, 4, -1, 4, 4,
- 4, -1, -1, -1, 4, -1, -1, -1, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 76,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 4, 4, 4, 4, 4, 4, -1,
- -1, 4, -1, 4, -1, 4, 4, 4, -1, -1,
- -1, 4, -1, -1, -1, 4, 4, 4, 4, 77,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 4, 4, 4, 4, 4, 4, -1, -1, 4, -1,
- 4, -1, 4, 4, 4, -1, -1, -1, 4, -1,
- -1, -1, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 78, 4, 4, 4, 79, 4, 4, 4,
- 4, 4, 4, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, -1, -1, 4, -1, 4, -1, 4,
- 4, 4, 11, -1, 13, 4, -1, -1, -1, 80,
- 4, 4, 4, 81, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 4, 4, 4, 4, 4, 4,
- -1, -1, 4, -1, 4, -1, 4, 4, 4, -1,
- -1, -1, 4, -1, -1, -1, 4, 4, 4, 4,
- 4, 82, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, -1, -1, 4,
- -1, 4, -1, 4, 4, 4, -1, -1, -1, 4,
- -1, -1, -1, 4, 4, 4, 4, 4, 83, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 4, 4,
- 4, 4, 4, 4, -1, -1, 4, -1, 4, -1,
- 4, 4, 4, -1, -1, -1, 4, -1, -1, -1,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 84, 85, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 4, 4, 4, 4, 4,
- 4, -1, -1, 4, -1, 4, -1, 4, 4, 4,
- -1, -1, -1, 4, -1, -1, -1, 86, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 4, 4, 4, 4, 4, 4, -1, -1,
- 4, -1, 4, -1, 4, 4, 4, -1, -1, -1,
- 4, -1, -1, -1, 4, 4, 4, 4, 4, 87,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,
- 4, 4, 4, 4, 4, -1, -1, 4, -1, 4,
- -1, 4, 4, 4, -1, -1, -1, 88, -1, -1,
- -1, 4, 4, 4, 4, 4, 89, 4, 4, 4,
- 4, 4, 90, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, -1, -1, 4, -1, 4, -1, 4, 4,
- 4, -1, -1, -1, 4, -1, -1, -1, 91, 4,
- 4, 4, 4, 92, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 4, 4, 4, 4, 4, 4, -1,
- -1, 4, -1, 4, -1, 4, 4, 4, -1, -1,
- -1, 93, -1, -1, -1, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 4, 4, 4, 4, 4, 4, -1, -1, 4, -1,
- 4, -1, 4, 4, 4, -1, -1, -1, 4, -1,
- -1, -1, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 94, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, -1, -1, 4, -1, 4, -1, 4,
- 4, 4, -1, -1, -1, 4, -1, -1, -1, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 95,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 96, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 97, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 98, 99, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 100,
- -1, 101, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 102, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 103, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 104, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 105, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 106, -1, -1, -1, -1, -1,
- -1, 107, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 108, -1, -1, -1, -1, -1, -1, 109, 110,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 111, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 56, 57, 56, -1, -1, 59, -1, -1, -1,
- 60, 61, -1, 62, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 61, -1, -1,
- -1, -1, -1, 59, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 57, 57,
- 57, -1, -1, -1, -1, -1, -1, 60, 61, -1,
- 62, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 61, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 112, 112, 112, 112, -1,
- -1, -1, -1, -1, -1, 112, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 112, -1, 112,
- -1, 112, -1, -1, 112, -1, 112, -1, -1, -1,
- 112, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 60, 60, 60, -1, -1, -1, -1, -1,
- -1, -1, 61, -1, 62, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 61, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 113,
- 113, 113, -1, -1, -1, -1, -1, -1, -1, -1,
- 114, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 114, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 64, 64, 64, 64, 64,
- 64, 64, 64, -1, 64, 64, 64, 64, 64, 64,
- 64, 115, 66, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 116, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 67, 67, 67, 67,
- 67, 67, 67, 67, -1, 67, 67, 67, 67, 67,
- 67, 67, 67, 68, 115, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 117, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 4, 4,
- 4, 4, 4, 4, -1, -1, 4, -1, 4, -1,
- 4, 4, 4, -1, -1, -1, 4, -1, -1, -1,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 118, 4, 4, 4, 4,
- 4, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 4, 4, 4, 4, 4,
- 4, -1, -1, 4, -1, 4, -1, 4, 4, 4,
- -1, -1, -1, 4, -1, -1, -1, 4, 4, 119,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 4, 4, 4, 4, 4, 4, -1, -1,
- 4, -1, 4, -1, 4, 4, 4, -1, -1, -1,
- 4, -1, -1, -1, 4, 4, 4, 120, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,
- 4, 4, 4, 4, 4, -1, -1, 4, -1, 4,
- -1, 4, 4, 4, -1, -1, -1, 4, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, 121, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, -1, -1, 4, -1, 4, -1, 4, 4,
- 4, -1, -1, -1, 4, -1, -1, -1, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 122, 4,
- 4, 123, 4, 4, 4, 4, 4, 4, 4, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 4, 4, 4, 4, 4, 4, -1,
- -1, 4, -1, 4, -1, 4, 4, 4, -1, -1,
- -1, 124, -1, -1, -1, 4, 4, 4, 125, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 4, 4, 4, 4, 4, 4, -1, -1, 4, -1,
- 4, -1, 4, 4, 4, -1, -1, -1, 4, -1,
- -1, -1, 4, 4, 4, 4, 126, 4, 4, 4,
- 4, 127, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, -1, -1, 4, -1, 4, -1, 4,
- 4, 4, -1, -1, -1, 128, -1, -1, -1, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 4, 4, 4, 4, 4, 4,
- -1, -1, 4, -1, 4, -1, 4, 4, 4, -1,
- -1, -1, 4, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, 129, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, -1, -1, 4,
- -1, 4, -1, 4, 4, 4, -1, -1, -1, 4,
- -1, -1, -1, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 130,
- 4, 4, 4, 4, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 4, 4,
- 4, 4, 4, 4, -1, -1, 4, -1, 4, -1,
- 4, 4, 4, -1, -1, -1, 4, -1, -1, -1,
- 4, 4, 4, 4, 131, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 4, 4, 4, 4, 4,
- 4, -1, -1, 4, -1, 4, -1, 4, 4, 4,
- -1, -1, -1, 4, -1, -1, -1, 132, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 4, 4, 4, 4, 4, 4, -1, -1,
- 4, -1, 4, -1, 4, 4, 4, -1, -1, -1,
- 4, -1, -1, -1, 4, 133, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,
- 4, 4, 4, 4, 4, -1, -1, 4, -1, 4,
- -1, 4, 4, 4, -1, -1, -1, 4, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 134, 4,
- 4, 4, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, -1, -1, 4, -1, 4, -1, 4, 4,
- 4, -1, -1, -1, 4, -1, -1, -1, 4, 135,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 4, 4, 4, 4, 4, 4, -1,
- -1, 4, -1, 4, -1, 4, 4, 4, -1, -1,
- -1, 4, -1, -1, -1, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 136, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 4, 4, 4, 4, 4, 4, -1, -1, 4, -1,
- 4, -1, 4, 4, 4, -1, -1, -1, 4, -1,
- -1, -1, 4, 4, 4, 4, 4, 137, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, -1, -1, 4, -1, 4, -1, 4,
- 4, 4, -1, -1, -1, 4, -1, -1, -1, 4,
- 4, 4, 138, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 4, 4, 4, 4, 4, 4,
- -1, -1, 4, -1, 4, -1, 4, 4, 4, -1,
- -1, -1, 139, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, -1, -1, 4,
- -1, 4, -1, 4, 4, 4, -1, -1, -1, 4,
- -1, -1, -1, 4, 4, 4, 4, 140, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 4, 4,
- 4, 4, 4, 4, -1, -1, 4, -1, 4, -1,
- 4, 4, 4, -1, -1, -1, 4, -1, -1, -1,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 141, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 4, 4, 4, 4, 4,
- 4, -1, -1, 4, -1, 4, -1, 4, 4, 4,
- -1, -1, -1, 142, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 143, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 144, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 145, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 146, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 112, 112, 112, 112, -1, 59, -1, -1, -1, -1,
- 112, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 112, -1, 112, -1, 112, -1, -1, 112,
- -1, 112, 59, -1, -1, 112, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 113, 113, 113,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 62,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 113, 113, 113, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 147, 148, 116, 149,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 150, 151, 152, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, -1, 4, 4, 4, 4, 4,
- 4, -1, -1, 4, -1, 4, -1, 4, 4, 4,
- -1, -1, -1, 4, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 153, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 4, 4, 4, 4, 4, 4, -1, -1,
- 4, -1, 4, -1, 4, 4, 4, -1, -1, -1,
- 4, -1, -1, -1, 4, 4, 4, 4, 154, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,
- 4, 4, 4, 4, 4, -1, -1, 4, -1, 4,
- -1, 4, 4, 4, -1, -1, -1, 4, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 155, 4, 4, 4, 4, 4,
- 4, 4, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, -1, -1, 4, -1, 4, -1, 4, 4,
- 4, -1, -1, -1, 4, -1, -1, -1, 4, 4,
- 4, 4, 156, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 4, 4, 4, 4, 4, 4, -1,
- -1, 4, -1, 4, -1, 4, 4, 4, -1, -1,
- -1, 4, -1, -1, -1, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 157, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 4, 4, 4, 4, 4, 4, -1, -1, 4, -1,
- 4, -1, 4, 4, 4, -1, -1, -1, 4, -1,
- -1, -1, 4, 4, 4, 4, 158, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, -1, -1, 4, -1, 4, -1, 4,
- 4, 4, -1, -1, -1, 4, -1, -1, -1, 4,
- 4, 4, 159, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 4, 4, 4, 4, 4, 4,
- -1, -1, 4, -1, 4, -1, 4, 4, 4, -1,
- -1, -1, 4, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 160, 4,
- 4, 4, 4, 4, 4, 4, 4, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, -1, -1, 4,
- -1, 4, -1, 4, 4, 4, -1, -1, -1, 4,
- -1, -1, -1, 161, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 4, 4,
- 4, 4, 4, 4, -1, -1, 4, -1, 4, -1,
- 4, 4, 4, -1, -1, -1, 4, -1, -1, -1,
- 4, 4, 4, 162, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 4, 4, 4, 4, 4,
- 4, -1, -1, 4, -1, 4, -1, 4, 4, 4,
- -1, -1, -1, 4, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, 163, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 4, 4, 4, 4, 4, 4, -1, -1,
- 4, -1, 4, -1, 4, 4, 4, -1, -1, -1,
- 4, -1, -1, -1, 4, 4, 4, 4, 4, 4,
- 4, 164, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,
- 4, 4, 4, 4, 4, -1, -1, 4, -1, 4,
- -1, 4, 4, 4, -1, -1, -1, 4, -1, -1,
- -1, 165, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, -1, -1, 4, -1, 4, -1, 4, 4,
- 4, -1, -1, -1, 4, -1, -1, -1, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 166, 4, 4, 4, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 4, 4, 4, 4, 4, 4, -1,
- -1, 4, -1, 4, -1, 4, 4, 4, -1, -1,
- -1, 4, -1, -1, -1, 4, 4, 4, 167, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 4, 4, 4, 4, 4, 4, -1, -1, 4, -1,
- 4, -1, 4, 4, 4, -1, -1, -1, 4, -1,
- -1, -1, 4, 168, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, -1, -1, 4, -1, 4, -1, 4,
- 4, 4, -1, -1, -1, 4, -1, -1, -1, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 169,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 4, 4, 4, 4, 4, 4,
- -1, -1, 4, -1, 4, -1, 4, 4, 4, -1,
- -1, -1, 4, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, 4, 170, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, -1, -1, 4,
- -1, 4, -1, 4, 4, 4, -1, -1, -1, 4,
- -1, -1, -1, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 171, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 172, 148, 116, 173, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 173, 148, 116,
- 173, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 150, 174, 175, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 150,
- 175, 175, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, -1,
- 4, 4, 4, 4, 4, 4, -1, -1, 4, -1,
- 4, -1, 4, 4, 4, -1, -1, -1, 4, -1,
- -1, -1, 4, 4, 4, 4, 4, 176, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, -1, -1, 4, -1, 4, -1, 4,
- 4, 4, -1, -1, -1, 4, -1, -1, -1, 4,
- 4, 4, 4, 4, 177, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 4, 4, 4, 4, 4, 4,
- -1, -1, 4, -1, 4, -1, 4, 4, 4, -1,
- -1, -1, 4, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 178, 4, 4, 4, 4, 4, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, -1, -1, 4,
- -1, 4, -1, 4, 4, 4, -1, -1, -1, 4,
- -1, -1, -1, 4, 4, 4, 4, 179, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 4, 4,
- 4, 4, 4, 4, -1, -1, 4, -1, 4, -1,
- 4, 4, 4, -1, -1, -1, 4, -1, -1, -1,
- 4, 4, 4, 4, 4, 180, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 4, 4, 4, 4, 4,
- 4, -1, -1, 4, -1, 4, -1, 4, 4, 4,
- -1, -1, -1, 4, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, 4, 4, 181, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 4, 4, 4, 4, 4, 4, -1, -1,
- 4, -1, 4, -1, 4, 4, 4, -1, -1, -1,
- 4, -1, -1, -1, 4, 4, 4, 182, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,
- 4, 4, 4, 4, 4, -1, -1, 4, -1, 4,
- -1, 4, 4, 4, -1, -1, -1, 183, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, -1, -1, 4, -1, 4, -1, 4, 4,
- 4, -1, -1, -1, 4, -1, -1, -1, 4, 4,
- 184, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 4, 4, 4, 4, 4, 4, -1,
- -1, 4, -1, 4, -1, 4, 4, 4, -1, -1,
- -1, 4, -1, -1, -1, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 185, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 4, 4, 4, 4, 4, 4, -1, -1, 4, -1,
- 4, -1, 4, 4, 4, -1, -1, -1, 4, -1,
- -1, -1, 4, 4, 4, 4, 4, 4, 186, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, -1, -1, 4, -1, 4, -1, 4,
- 4, 4, -1, -1, -1, 4, -1, -1, -1, 4,
- 4, 187, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 4, 4, 4, 4, 4, 4,
- -1, -1, 4, -1, 4, -1, 4, 4, 4, -1,
- -1, -1, 4, -1, -1, -1, 188, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, -1, -1, 4,
- -1, 4, -1, 4, 4, 4, -1, -1, -1, 4,
- -1, -1, -1, 4, 4, 4, 4, 189, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 115, 148, 116, -1, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- -1, 148, 116, -1, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 150, 115,
- -1, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 150, -1, -1, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, -1, 4, 4, 4, 4,
- 4, 4, -1, -1, 4, -1, 4, -1, 4, 4,
- 4, -1, -1, -1, 4, -1, -1, -1, 4, 4,
- 4, 4, 4, 4, 190, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 4, 4, 4, 4, 4, 4, -1,
- -1, 4, -1, 4, -1, 4, 4, 4, -1, -1,
- -1, 4, -1, -1, -1, 4, 4, 4, 4, 4,
- 4, 191, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 4, 4, 4, 4, 4, 4, -1, -1, 4, -1,
- 4, -1, 4, 4, 4, -1, -1, -1, 4, -1,
- -1, -1, 4, 4, 4, 4, 4, 4, 192, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, -1, -1, 4, -1, 4, -1, 4,
- 4, 4, -1, -1, -1, 4, -1, -1, -1, 4,
- 193, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 4, 4, 4, 4, 4, 4,
- -1, -1, 4, -1, 4, -1, 4, 4, 4, -1,
- -1, -1, 4, -1, -1, -1, 4, 194, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, -1, -1, 4,
- -1, 4, -1, 4, 4, 4, -1, -1, -1, 4,
- -1, -1, -1, 195, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 4, 4,
- 4, 4, 4, 4, -1, -1, 4, -1, 4, -1,
- 4, 4, 4, -1, -1, -1, 4, -1, -1, -1,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 196, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 4, 4, 4, 4, 4,
- 4, -1, -1, 4, -1, 4, -1, 4, 4, 4,
- -1, -1, -1, 4, -1, -1, -1, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 197, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 4, 4, 4, 4, 4, 4, -1, -1,
- 4, -1, 4, -1, 4, 4, 4, -1, -1, -1,
- 4, -1, -1, -1, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 198, 4, 4, 4,
- 4, 4, 4, 4, 4, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,
- 4, 4, 4, 4, 4, -1, -1, 4, -1, 4,
- -1, 4, 4, 4, -1, -1, -1, 4, -1, -1,
- -1, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 199, 4, 4,
- 4, 4, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 4, 4, 4, 4,
- 4, 4, -1, -1, 4, -1, 4, -1, 4, 4,
- 4, -1, -1, -1, 4, -1, -1, -1, 4, 4,
- 4, 4, 200, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1,
- };
+ private static final int [] ZZ_TRANS = zzUnpackTrans();
+
+ private static final String ZZ_TRANS_PACKED_0 =
+ "\1\2\1\3\2\4\3\5\1\6\1\7\1\5\1\10"+
+ "\1\5\1\11\1\5\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\5"+
+ "\1\26\1\27\1\30\1\31\1\5\1\32\1\33\1\34"+
+ "\1\12\1\35\1\5\1\36\1\37\1\5\1\40\1\41"+
+ "\1\5\1\42\1\43\1\44\1\45\1\46\1\47\1\50"+
+ "\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"+
+ "\104\0\1\71\1\72\1\71\1\0\1\73\1\74\3\0"+
+ "\1\75\1\76\1\0\1\77\15\0\1\76\5\0\1\74"+
+ "\3\0\1\73\36\0\3\4\2\0\1\74\3\0\1\75"+
+ "\1\76\1\0\1\77\15\0\1\76\5\0\1\74\42\0"+
+ "\6\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+
+ "\1\5\3\0\25\5\27\0\10\6\1\0\72\6\10\0"+
+ "\1\7\73\0\3\75\154\0\1\100\26\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\2\5\1\13\1\14\1\0"+
+ "\1\16\1\5\3\0\5\5\1\13\17\5\30\0\6\5"+
+ "\2\0\1\5\1\0\1\5\1\0\3\5\1\14\1\0"+
+ "\1\16\1\5\3\0\25\5\27\0\10\101\1\0\7\101"+
+ "\1\102\1\103\61\101\10\104\1\0\10\104\1\105\1\106"+
+ "\60\104\1\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\1\5\1\107\1\5\1\110"+
+ "\11\5\1\111\3\5\1\112\3\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\1\5\1\113\1\5\1\114\21\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\13\5\1\115\11\5\30\0\6\5\2\0\1\5\1\0"+
+ "\1\5\1\0\3\5\3\0\1\5\3\0\4\5\1\116"+
+ "\20\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\12\5\1\117\3\5\1\120"+
+ "\6\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\1\14\1\0\1\16\1\5\3\0\1\121\3\5"+
+ "\1\122\20\5\30\0\6\5\2\0\1\5\1\0\1\5"+
+ "\1\0\3\5\3\0\1\5\3\0\5\5\1\123\17\5"+
+ "\30\0\6\5\2\0\1\5\1\0\1\5\1\0\3\5"+
+ "\3\0\1\5\3\0\5\5\1\124\17\5\30\0\6\5"+
+ "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+
+ "\3\0\12\5\1\125\1\126\11\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\1\127\24\5\30\0\6\5\2\0\1\5\1\0\1\5"+
+ "\1\0\3\5\3\0\1\5\3\0\5\5\1\130\17\5"+
+ "\30\0\6\5\2\0\1\5\1\0\1\5\1\0\3\5"+
+ "\3\0\1\131\3\0\5\5\1\132\5\5\1\133\11\5"+
+ "\30\0\6\5\2\0\1\5\1\0\1\5\1\0\3\5"+
+ "\3\0\1\5\3\0\1\134\24\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\135\3\0"+
+ "\25\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\12\5\1\136\12\5\30\0"+
+ "\6\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+
+ "\1\5\3\0\24\5\1\137\104\0\1\140\102\0\1\141"+
+ "\102\0\1\142\1\143\101\0\1\144\1\0\1\145\100\0"+
+ "\1\146\102\0\1\147\102\0\1\150\102\0\1\151\102\0"+
+ "\1\152\6\0\1\153\73\0\1\154\6\0\1\155\1\156"+
+ "\72\0\1\157\26\0\1\71\1\72\1\71\2\0\1\74"+
+ "\3\0\1\75\1\76\1\0\1\77\15\0\1\76\5\0"+
+ "\1\74\42\0\3\72\6\0\1\75\1\76\1\0\1\77"+
+ "\15\0\1\76\50\0\4\160\6\0\1\160\13\0\1\160"+
+ "\1\0\1\160\1\0\1\160\2\0\1\160\1\0\1\160"+
+ "\3\0\1\160\37\0\3\75\7\0\1\76\1\0\1\77"+
+ "\15\0\1\76\50\0\3\161\10\0\1\162\37\0\1\162"+
+ "\26\0\10\101\1\0\7\101\1\163\1\103\61\101\20\0"+
+ "\1\164\62\0\103\101\10\104\1\0\10\104\1\105\1\163"+
+ "\163\104\22\0\1\165\61\0\6\5\2\0\1\5\1\0"+
+ "\1\5\1\0\3\5\3\0\1\5\3\0\17\5\1\166"+
+ "\5\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\2\5\1\167\22\5\30\0"+
+ "\6\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+
+ "\1\5\3\0\3\5\1\170\21\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\6\5\1\171\16\5\30\0\6\5\2\0\1\5\1\0"+
+ "\1\5\1\0\3\5\3\0\1\5\3\0\12\5\1\172"+
+ "\2\5\1\173\7\5\30\0\6\5\2\0\1\5\1\0"+
+ "\1\5\1\0\3\5\3\0\1\174\3\0\3\5\1\175"+
+ "\21\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\4\5\1\176\4\5\1\177"+
+ "\13\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\200\3\0\25\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\6\5\1\201\16\5\30\0\6\5\2\0\1\5\1\0"+
+ "\1\5\1\0\3\5\3\0\1\5\3\0\20\5\1\202"+
+ "\4\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\4\5\1\203\20\5\30\0"+
+ "\6\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+
+ "\1\5\3\0\1\204\24\5\30\0\6\5\2\0\1\5"+
+ "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\1\5"+
+ "\1\205\23\5\30\0\6\5\2\0\1\5\1\0\1\5"+
+ "\1\0\3\5\3\0\1\5\3\0\21\5\1\206\3\5"+
+ "\30\0\6\5\2\0\1\5\1\0\1\5\1\0\3\5"+
+ "\3\0\1\5\3\0\1\5\1\207\23\5\30\0\6\5"+
+ "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+
+ "\3\0\13\5\1\210\11\5\30\0\6\5\2\0\1\5"+
+ "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\5\5"+
+ "\1\211\17\5\30\0\6\5\2\0\1\5\1\0\1\5"+
+ "\1\0\3\5\3\0\1\5\3\0\3\5\1\212\21\5"+
+ "\30\0\6\5\2\0\1\5\1\0\1\5\1\0\3\5"+
+ "\3\0\1\5\3\0\4\5\1\213\20\5\30\0\6\5"+
+ "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+
+ "\3\0\13\5\1\214\11\5\30\0\6\5\2\0\1\5"+
+ "\1\0\1\5\1\0\3\5\3\0\1\215\3\0\25\5"+
+ "\104\0\1\216\102\0\1\217\102\0\1\220\102\0\1\221"+
+ "\26\0\4\160\1\0\1\74\4\0\1\160\13\0\1\160"+
+ "\1\0\1\160\1\0\1\160\2\0\1\160\1\0\1\160"+
+ "\1\74\2\0\1\160\37\0\3\161\11\0\1\77\66\0"+
+ "\3\161\77\0\20\164\1\222\1\223\1\164\1\224\57\164"+
+ "\21\165\1\225\1\226\1\227\57\165\1\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\13\5\1\230\11\5\30\0\6\5\2\0\1\5\1\0"+
+ "\1\5\1\0\3\5\3\0\1\5\3\0\4\5\1\231"+
+ "\20\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\15\5\1\232\7\5\30\0"+
+ "\6\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+
+ "\1\5\3\0\4\5\1\233\20\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\11\5\1\234\13\5\30\0\6\5\2\0\1\5\1\0"+
+ "\1\5\1\0\3\5\3\0\1\5\3\0\4\5\1\235"+
+ "\20\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\3\5\1\236\21\5\30\0"+
+ "\6\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+
+ "\1\5\3\0\14\5\1\237\10\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\1\240\24\5\30\0\6\5\2\0\1\5\1\0\1\5"+
+ "\1\0\3\5\3\0\1\5\3\0\3\5\1\241\21\5"+
+ "\30\0\6\5\2\0\1\5\1\0\1\5\1\0\3\5"+
+ "\3\0\1\5\3\0\6\5\1\242\16\5\30\0\6\5"+
+ "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+
+ "\3\0\7\5\1\243\15\5\30\0\6\5\2\0\1\5"+
+ "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\1\244"+
+ "\24\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\21\5\1\245\3\5\30\0"+
+ "\6\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+
+ "\1\5\3\0\3\5\1\246\21\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\12\5\1\247\12\5\30\0\6\5\2\0\1\5\1\0"+
+ "\1\5\1\0\3\5\3\0\1\5\3\0\7\5\1\250"+
+ "\15\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\12\5\1\251\12\5\27\0"+
+ "\20\164\1\252\1\223\1\164\1\253\202\164\1\253\1\223"+
+ "\1\164\1\253\57\164\124\165\1\225\1\254\1\255\100\165"+
+ "\1\225\2\255\57\165\1\0\6\5\2\0\1\5\1\0"+
+ "\1\5\1\0\3\5\3\0\1\5\3\0\5\5\1\256"+
+ "\17\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\5\5\1\257\17\5\30\0"+
+ "\6\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+
+ "\1\5\3\0\17\5\1\260\5\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\4\5\1\261\20\5\30\0\6\5\2\0\1\5\1\0"+
+ "\1\5\1\0\3\5\3\0\1\5\3\0\5\5\1\262"+
+ "\17\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\10\5\1\263\14\5\30\0"+
+ "\6\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+
+ "\1\5\3\0\3\5\1\264\21\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\265\3\0"+
+ "\25\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\2\5\1\266\22\5\30\0"+
+ "\6\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+
+ "\1\5\3\0\12\5\1\267\12\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\2\5\1\270\22\5\30\0\6\5\2\0\1\5\1\0"+
+ "\1\5\1\0\3\5\3\0\1\5\3\0\1\271\24\5"+
+ "\30\0\6\5\2\0\1\5\1\0\1\5\1\0\3\5"+
+ "\3\0\1\5\3\0\4\5\1\272\20\5\27\0\20\164"+
+ "\1\163\1\223\1\164\1\0\77\164\1\0\1\223\1\164"+
+ "\1\0\57\164\21\165\1\225\1\163\1\0\100\165\1\225"+
+ "\2\0\57\165\1\0\6\5\2\0\1\5\1\0\1\5"+
+ "\1\0\3\5\3\0\1\5\3\0\6\5\1\273\16\5"+
+ "\30\0\6\5\2\0\1\5\1\0\1\5\1\0\3\5"+
+ "\3\0\1\5\3\0\6\5\1\274\16\5\30\0\6\5"+
+ "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+
+ "\3\0\6\5\1\275\16\5\30\0\6\5\2\0\1\5"+
+ "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\1\5"+
+ "\1\276\23\5\30\0\6\5\2\0\1\5\1\0\1\5"+
+ "\1\0\3\5\3\0\1\5\3\0\1\5\1\277\23\5"+
+ "\30\0\6\5\2\0\1\5\1\0\1\5\1\0\3\5"+
+ "\3\0\1\5\3\0\1\300\24\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\12\5\1\301\12\5\30\0\6\5\2\0\1\5\1\0"+
+ "\1\5\1\0\3\5\3\0\1\5\3\0\12\5\1\302"+
+ "\12\5\30\0\6\5\2\0\1\5\1\0\1\5\1\0"+
+ "\3\5\3\0\1\5\3\0\14\5\1\303\10\5\30\0"+
+ "\6\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+
+ "\1\5\3\0\20\5\1\304\4\5\30\0\6\5\2\0"+
+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+
+ "\4\5\1\305\20\5\27\0";
+
+ private static int [] zzUnpackTrans() {
+ int [] result = new int[8911];
+ 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;
@@ -1084,13 +365,13 @@ class _PythonLexer implements FlexLexer {
private static final String ZZ_ATTRIBUTE_PACKED_0 =
"\1\0\1\11\12\1\1\11\2\1\3\11\32\1\14\11"+
- "\1\1\2\0\1\11\1\1\1\0\2\11\40\1\3\11"+
+ "\1\1\2\0\1\11\1\1\1\0\2\11\37\1\3\11"+
"\1\1\1\11\1\1\5\11\1\1\2\11\1\1\1\11"+
- "\2\1\1\0\1\11\2\0\31\1\4\11\6\0\23\1"+
- "\4\0\31\1";
+ "\2\1\1\0\1\11\2\0\30\1\4\11\6\0\22\1"+
+ "\4\0\30\1";
private static int [] zzUnpackAttribute() {
- int [] result = new int[201];
+ int [] result = new int[197];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -1202,7 +483,14 @@ class _PythonLexer implements FlexLexer {
// For Demetra compatibility
public void reset(CharSequence buffer, int initialState){
- reset(buffer, 0, buffer.length(), initialState);
+ zzBuffer = buffer;
+ zzBufferArray = null;
+ zzCurrentPos = zzMarkedPos = zzStartRead = 0;
+ zzPushbackPos = 0;
+ zzAtEOF = false;
+ zzAtBOL = true;
+ zzEndRead = buffer.length();
+ yybegin(initialState);
}
/**
@@ -1352,14 +640,14 @@ class _PythonLexer implements FlexLexer {
zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
- zzState = ZZ_LEXSTATE[zzLexicalState];
+ zzState = zzLexicalState;
zzForAction: {
while (true) {
if (zzCurrentPosL < zzEndReadL)
- zzInput =zzBufferL.charAt(zzCurrentPosL++);
+ zzInput = zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++]:zzBufferL.charAt(zzCurrentPosL++);
else if (zzAtEOF) {
zzInput = YYEOF;
break zzForAction;
@@ -1379,7 +667,7 @@ class _PythonLexer implements FlexLexer {
break zzForAction;
}
else {
- zzInput =zzBufferL.charAt(zzCurrentPosL++);
+ zzInput = zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++]:zzBufferL.charAt(zzCurrentPosL++);
}
}
int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
@@ -1400,350 +688,346 @@ class _PythonLexer implements FlexLexer {
zzMarkedPos = zzMarkedPosL;
switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
- case 77:
+ case 76:
{ return PyTokenTypes.YIELD_KEYWORD;
}
- case 87: break;
+ case 86: break;
case 2:
{ return PyTokenTypes.INTEGER_LITERAL;
}
- case 88: break;
+ case 87: break;
case 16:
{ return PyTokenTypes.DIV;
}
- case 89: break;
+ case 88: break;
case 17:
{ return PyTokenTypes.PERC;
}
- case 90: break;
+ case 89: break;
case 9:
{ return PyTokenTypes.BACKSLASH;
}
- case 91: break;
+ case 90: break;
case 25:
{ return PyTokenTypes.RPAR;
}
- case 92: break;
+ case 91: break;
case 1:
{ return PyTokenTypes.BAD_CHARACTER;
}
- case 93: break;
+ case 92: break;
case 28:
{ return PyTokenTypes.LBRACE;
}
- case 94: break;
+ case 93: break;
case 7:
{ return PyTokenTypes.MINUS;
}
- case 95: break;
+ case 94: break;
case 74:
{ return PyTokenTypes.BREAK_KEYWORD;
}
- case 96: break;
+ case 95: break;
case 27:
{ return PyTokenTypes.RBRACKET;
}
- case 97: break;
+ case 96: break;
case 6:
{ return PyTokenTypes.DOT;
}
- case 98: break;
+ case 97: break;
case 3:
{ return PyTokenTypes.IDENTIFIER;
}
- case 99: break;
+ case 98: break;
case 24:
{ return PyTokenTypes.LPAR;
}
- case 100: break;
+ case 99: break;
case 22:
{ return PyTokenTypes.LT;
}
- case 101: break;
+ case 100: break;
case 38:
{ return PyTokenTypes.IN_KEYWORD;
}
- case 102: break;
+ case 101: break;
case 73:
{ return PyTokenTypes.RAISE_KEYWORD;
}
- case 103: break;
+ case 102: break;
case 8:
{ return PyTokenTypes.STRING_LITERAL;
}
- case 104: break;
+ case 103: break;
case 66:
{ return PyTokenTypes.GTGTEQ;
}
- case 105: break;
+ case 104: break;
case 10:
{ return PyTokenTypes.SPACE;
}
- case 106: break;
- case 81:
+ case 105: break;
+ case 80:
{ return PyTokenTypes.EXCEPT_KEYWORD;
}
- case 107: break;
+ case 106: break;
case 36:
{ return PyTokenTypes.IMAGINARY_LITERAL;
}
- case 108: break;
+ case 107: break;
case 12:
{ return PyTokenTypes.FORMFEED;
}
- case 109: break;
+ case 108: break;
case 34:
{ return PyTokenTypes.SEMICOLON;
}
- case 110: break;
+ case 109: break;
case 21:
{ return PyTokenTypes.GT;
}
- case 111: break;
+ case 110: break;
case 26:
{ return PyTokenTypes.LBRACKET;
}
- case 112: break;
+ case 111: break;
case 32:
{ return PyTokenTypes.COLON;
}
- case 113: break;
+ case 112: break;
case 67:
{ return PyTokenTypes.LTLTEQ;
}
- case 114: break;
+ case 113: break;
case 19:
{ return PyTokenTypes.OR;
}
- case 115: break;
+ case 114: break;
case 69:
{ return PyTokenTypes.ELSE_KEYWORD;
}
- case 116: break;
+ case 115: break;
case 44:
{ return PyTokenTypes.MULTEQ;
}
- case 117: break;
- case 85:
+ case 116: break;
+ case 84:
{ return PyTokenTypes.FINALLY_KEYWORD;
}
- case 118: break;
- case 78:
+ case 117: break;
+ case 77:
{ return PyTokenTypes.WHILE_KEYWORD;
}
- case 119: break;
+ case 118: break;
case 15:
{ return PyTokenTypes.MULT;
}
- case 120: break;
- case 80:
+ case 119: break;
+ case 79:
{ return PyTokenTypes.ASSERT_KEYWORD;
}
- case 121: break;
+ case 120: break;
case 47:
{ return PyTokenTypes.FLOORDIV;
}
- case 122: break;
- case 84:
+ case 121: break;
+ case 83:
{ return PyTokenTypes.GLOBAL_KEYWORD;
}
- case 123: break;
- case 83:
+ case 122: break;
+ case 82:
{ return PyTokenTypes.LAMBDA_KEYWORD;
}
- case 124: break;
+ case 123: break;
case 51:
{ return PyTokenTypes.XOREQ;
}
- case 125: break;
+ case 124: break;
case 63:
{ return PyTokenTypes.FOR_KEYWORD;
}
- case 126: break;
+ case 125: break;
case 30:
{ return PyTokenTypes.AT;
}
- case 127: break;
+ case 126: break;
case 59:
{ return PyTokenTypes.NOT_KEYWORD;
}
- case 128: break;
+ case 127: break;
case 13:
{ return PyTokenTypes.PLUS;
}
- case 129: break;
+ case 128: break;
case 37:
{ return PyTokenTypes.MINUSEQ;
}
- case 130: break;
- case 76:
- { return PyTokenTypes.PRINT_KEYWORD;
- }
- case 131: break;
+ case 129: break;
case 57:
{ return PyTokenTypes.NE;
}
- case 132: break;
+ case 130: break;
case 31:
{ return PyTokenTypes.COMMA;
}
- case 133: break;
+ case 131: break;
case 43:
{ return PyTokenTypes.EQEQ;
}
- case 134: break;
+ case 132: break;
case 33:
{ return PyTokenTypes.TICK;
}
- case 135: break;
+ case 133: break;
case 45:
{ return PyTokenTypes.EXP;
}
- case 136: break;
- case 86:
+ case 134: break;
+ case 85:
{ return PyTokenTypes.CONTINUE_KEYWORD;
}
- case 137: break;
+ case 135: break;
case 56:
{ return PyTokenTypes.LTLT;
}
- case 138: break;
+ case 136: break;
case 54:
{ return PyTokenTypes.LE;
}
- case 139: break;
+ case 137: break;
case 58:
{ return PyTokenTypes.AND_KEYWORD;
}
- case 140: break;
+ case 138: break;
case 41:
{ return PyTokenTypes.OR_KEYWORD;
}
- case 141: break;
+ case 139: break;
case 70:
{ return PyTokenTypes.EXEC_KEYWORD;
}
- case 142: break;
+ case 140: break;
case 72:
{ return PyTokenTypes.PASS_KEYWORD;
}
- case 143: break;
+ case 141: break;
case 4:
{ return PyTokenTypes.END_OF_LINE_COMMENT;
}
- case 144: break;
+ case 142: break;
case 50:
{ return PyTokenTypes.OREQ;
}
- case 145: break;
+ case 143: break;
case 53:
{ return PyTokenTypes.GTGT;
}
- case 146: break;
+ case 144: break;
case 18:
{ return PyTokenTypes.AND;
}
- case 147: break;
+ case 145: break;
case 46:
{ return PyTokenTypes.DIVEQ;
}
- case 148: break;
- case 82:
+ case 146: break;
+ case 81:
{ return PyTokenTypes.RETURN_KEYWORD;
}
- case 149: break;
- case 79:
+ case 147: break;
+ case 78:
{ return PyTokenTypes.IMPORT_KEYWORD;
}
- case 150: break;
+ case 148: break;
case 52:
{ return PyTokenTypes.GE;
}
- case 151: break;
+ case 149: break;
case 42:
{ return PyTokenTypes.PLUSEQ;
}
- case 152: break;
+ case 150: break;
case 61:
{ return PyTokenTypes.DEF_KEYWORD;
}
- case 153: break;
+ case 151: break;
case 39:
{ return PyTokenTypes.IS_KEYWORD;
}
- case 154: break;
+ case 152: break;
case 35:
{ return PyTokenTypes.FLOAT_LITERAL;
}
- case 155: break;
+ case 153: break;
case 65:
{ return PyTokenTypes.FLOORDIVEQ;
}
- case 156: break;
+ case 154: break;
case 5:
{ return PyTokenTypes.LINE_BREAK;
}
- case 157: break;
+ case 155: break;
case 48:
{ return PyTokenTypes.PERCEQ;
}
- case 158: break;
+ case 156: break;
case 62:
{ return PyTokenTypes.TRY_KEYWORD;
}
- case 159: break;
+ case 157: break;
case 49:
{ return PyTokenTypes.ANDEQ;
}
- case 160: break;
+ case 158: break;
case 14:
{ return PyTokenTypes.EQ;
}
- case 161: break;
+ case 159: break;
case 71:
{ return PyTokenTypes.FROM_KEYWORD;
}
- case 162: break;
+ case 160: break;
case 64:
{ return PyTokenTypes.EXPEQ;
}
- case 163: break;
+ case 161: break;
case 68:
{ return PyTokenTypes.ELIF_KEYWORD;
}
- case 164: break;
+ case 162: break;
case 29:
{ return PyTokenTypes.RBRACE;
}
- case 165: break;
+ case 163: break;
case 75:
{ return PyTokenTypes.CLASS_KEYWORD;
}
- case 166: break;
+ case 164: break;
case 40:
{ return PyTokenTypes.IF_KEYWORD;
}
- case 167: break;
+ case 165: break;
case 11:
{ return PyTokenTypes.TAB;
}
- case 168: break;
+ case 166: break;
case 55:
{ return PyTokenTypes.NE_OLD;
}
- case 169: break;
+ case 167: break;
case 23:
{ return PyTokenTypes.TILDE;
}
- case 170: break;
+ case 168: break;
case 20:
{ return PyTokenTypes.XOR;
}
- case 171: break;
+ case 169: break;
case 60:
{ return PyTokenTypes.DEL_KEYWORD;
}
- case 172: break;
+ case 170: break;
default:
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true;
diff --git a/python/src/com/jetbrains/python/lexer/idea-skeleton b/python/src/com/jetbrains/python/lexer/idea-skeleton
deleted file mode 100644
index b7fbc6be9516..000000000000
--- a/python/src/com/jetbrains/python/lexer/idea-skeleton
+++ /dev/null
@@ -1,256 +0,0 @@
- /** initial size of the lookahead buffer */
---- private static final int ZZ_BUFFERSIZE = ...;
-
- /** lexical states */
---- lexical states, charmap
-
- /* 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;
- private static final char[] EMPTY_BUFFER = new char[0];
- private static final int YYEOF = -1;
- private static java.io.Reader zzReader = null; // Fake
-
- /* 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"
- };
-
---- isFinal list
- /** 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 CharSequence zzBuffer = "";
-
- /** this buffer may contains the current text array to be matched when it is cheap to acquire it */
- private char[] zzBufferArray;
-
- /** 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;
-
- /**
- * zzAtBOL == true <=> the scanner is currently at the beginning of a line
- */
- private boolean zzAtBOL = true;
-
- /** zzAtEOF == true <=> the scanner is at the EOF */
- private boolean zzAtEOF;
-
---- user class code
-
---- constructor declaration
-
- public final int getTokenStart(){
- return zzStartRead;
- }
-
- public final int getTokenEnd(){
- return getTokenStart() + yylength();
- }
-
- public void reset(CharSequence buffer, int start, int end,int initialState){
- zzBuffer = buffer;
- zzBufferArray = com.intellij.util.text.CharArrayUtil.fromSequenceWithoutCopying(buffer);
- zzCurrentPos = zzMarkedPos = zzStartRead = start;
- zzPushbackPos = 0;
- zzAtEOF = false;
- zzAtBOL = true;
- zzEndRead = end;
- yybegin(initialState);
- }
-
- // For Demetra compatibility
- public void reset(CharSequence buffer, int initialState){
- reset(buffer, 0, buffer.length(), initialState);
- }
-
- /**
- * Refills the input buffer.
- *
- * @return false, iff there was new input.
- *
- * @exception java.io.IOException if any I/O-Error occurs
- */
- private boolean zzRefill() throws java.io.IOException {
- return true;
- }
-
-
- /**
- * 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 CharSequence yytext() {
- return zzBuffer.subSequence(zzStartRead, zzMarkedPos);
- }
-
-
- /**
- * Returns the character at position pos from the
- * matched text.
- *
- * It is equivalent to yytext().charAt(pos), but faster
- *
- * @param pos the position of the character to fetch.
- * A value from 0 to yylength()-1.
- *
- * @return the character at position pos
- */
- public final char yycharat(int pos) {
- return zzBufferArray != null ? zzBufferArray[zzStartRead+pos]:zzBuffer.charAt(zzStartRead+pos);
- }
-
-
- /**
- * Returns the length of the matched text region.
- */
- public final int yylength() {
- return zzMarkedPos-zzStartRead;
- }
-
-
- /**
- * Reports an error that occured while scanning.
- *
- * In a wellformed scanner (no or only correct usage of
- * yypushback(int) and a match-all fallback rule) this method
- * will only be called with things that "Can't Possibly Happen".
- * If this method is called, something is seriously wrong
- * (e.g. a JFlex bug producing a faulty scanner etc.).
- *
- * Usual syntax/scanner level error handling should be done
- * in error fallback rules.
- *
- * @param errorCode the code of the errormessage to display
- */
---- zzScanError declaration
- String message;
- try {
- message = ZZ_ERROR_MSG[errorCode];
- }
- catch (ArrayIndexOutOfBoundsException e) {
- message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
- }
-
---- throws clause
- }
-
-
- /**
- * 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()!
- */
---- yypushback decl (contains zzScanError exception)
- if ( number > yylength() )
- zzScanError(ZZ_PUSHBACK_2BIG);
-
- zzMarkedPos -= number;
- }
-
-
---- zzDoEOF
- /**
- * 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
- */
---- yylex declaration
- int zzInput;
- int zzAction;
-
- // cached fields:
- int zzCurrentPosL;
- int zzMarkedPosL;
- int zzEndReadL = zzEndRead;
- CharSequence zzBufferL = zzBuffer;
- char[] zzBufferArrayL = zzBufferArray;
- char [] zzCMapL = ZZ_CMAP;
-
---- local declarations
-
- while (true) {
- zzMarkedPosL = zzMarkedPos;
-
---- start admin (line, char, col count)
- zzAction = -1;
-
- zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
-
---- start admin (lexstate etc)
-
- zzForAction: {
- while (true) {
-
---- next input, line, col, char count, next transition, isFinal action
- zzAction = zzState;
- zzMarkedPosL = zzCurrentPosL;
---- line count update
- }
-
- }
- }
-
- // store back cached position
- zzMarkedPos = zzMarkedPosL;
---- char count update
-
---- actions
- default:
- if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
- zzAtEOF = true;
---- eofvalue
- }
- else {
---- no match
- }
- }
- }
- }
-
---- main
-
-}
diff --git a/python/src/com/jetbrains/python/parsing/ParsingContext.java b/python/src/com/jetbrains/python/parsing/ParsingContext.java
index 99b2fa9e9b9f..e4cb1a1673fa 100644
--- a/python/src/com/jetbrains/python/parsing/ParsingContext.java
+++ b/python/src/com/jetbrains/python/parsing/ParsingContext.java
@@ -25,10 +25,10 @@ public class ParsingContext {
private final PsiBuilder myBuilder;
private final LanguageLevel myLanguageLevel;
- public ParsingContext(final PsiBuilder builder, LanguageLevel languageLevel) {
+ public ParsingContext(final PsiBuilder builder, LanguageLevel languageLevel, StatementParsing.FUTURE futureFlag) {
myBuilder = builder;
myLanguageLevel = languageLevel;
- stmtParser = new StatementParsing(this);
+ stmtParser = new StatementParsing(this, futureFlag);
expressionParser = new ExpressionParsing(this);
functionParser = new FunctionParsing(this);
}
diff --git a/python/src/com/jetbrains/python/parsing/PyParser.java b/python/src/com/jetbrains/python/parsing/PyParser.java
index 13eb44bd9af4..5c51d2fd1754 100644
--- a/python/src/com/jetbrains/python/parsing/PyParser.java
+++ b/python/src/com/jetbrains/python/parsing/PyParser.java
@@ -15,6 +15,7 @@ public class PyParser implements PsiParser {
private static final Logger LOGGER = Logger.getInstance(PyParser.class.getName());
private final LanguageLevel myLanguageLevel;
+ private StatementParsing.FUTURE myFutureFlag;
public PyParser() {
myLanguageLevel = LanguageLevel.getDefault();
@@ -29,7 +30,7 @@ public class PyParser implements PsiParser {
builder.setDebugMode(false);
long start = System.currentTimeMillis();
final PsiBuilder.Marker rootMarker = builder.mark();
- ParsingContext context = new ParsingContext(builder, myLanguageLevel);
+ ParsingContext context = new ParsingContext(builder, myLanguageLevel, myFutureFlag);
StatementParsing stmt_parser = context.getStatementParser();
builder.setTokenTypeRemapper(stmt_parser); // must be done before touching the caching lexer with eof() call.
while (!builder.eof()) {
@@ -42,4 +43,8 @@ public class PyParser implements PsiParser {
LOGGER.debug("Parsed " + String.format("%.1f", kb) + "K file in " + diff + "ms");
return ast;
}
+
+ public void setFutureFlag(StatementParsing.FUTURE future) {
+ myFutureFlag = future;
+ }
}
diff --git a/python/src/com/jetbrains/python/parsing/StatementParsing.java b/python/src/com/jetbrains/python/parsing/StatementParsing.java
index aba42aacb7af..a535dc10a801 100644
--- a/python/src/com/jetbrains/python/parsing/StatementParsing.java
+++ b/python/src/com/jetbrains/python/parsing/StatementParsing.java
@@ -22,18 +22,23 @@ public class StatementParsing extends Parsing implements ITokenTypeRemapper {
@NonNls protected static final String TOK_FUTURE_IMPORT = "__future__";
@NonNls protected static final String TOK_WITH_STATEMENT = "with_statement";
@NonNls protected static final String TOK_NESTED_SCOPES = "nested_scopes";
+ @NonNls protected static final String TOK_PRINT_FUNCTION = "print_function";
@NonNls protected static final String TOK_WITH = "with";
@NonNls protected static final String TOK_AS = "as";
+ @NonNls protected static final String TOK_PRINT = "print";
protected enum Phase {NONE, FROM, FUTURE, IMPORT} // 'from __future__ import' phase
private Phase myFutureImportPhase = Phase.NONE;
private boolean myExpectAsKeyword = false;
- protected enum FUTURE {ABSOLUTE_IMPORT, DIVISION, GENERATORS, NESTED_SCOPES, WITH_STATEMENT}
+ public enum FUTURE {ABSOLUTE_IMPORT, DIVISION, GENERATORS, NESTED_SCOPES, WITH_STATEMENT, PRINT_FUNCTION}
protected Set myFutureFlags = EnumSet.noneOf(FUTURE.class);
- protected StatementParsing(ParsingContext context) {
+ protected StatementParsing(ParsingContext context, @Nullable FUTURE futureFlag) {
super(context);
+ if (futureFlag != null) {
+ myFutureFlags.add(futureFlag);
+ }
}
public void parseStatement() {
@@ -89,7 +94,7 @@ public class StatementParsing extends Parsing implements ITokenTypeRemapper {
if (firstToken == null) {
return;
}
- if (firstToken == PyTokenTypes.PRINT_KEYWORD) {
+ if (firstToken == PyTokenTypes.PRINT_KEYWORD && hasPrintStatement()) {
parsePrintStatement(builder, inSuite);
return;
}
@@ -193,6 +198,10 @@ public class StatementParsing extends Parsing implements ITokenTypeRemapper {
builder.error("statement expected, found " + firstToken.toString());
}
+ private boolean hasPrintStatement() {
+ return myContext.getLanguageLevel().hasPrintStatement() && !myFutureFlags.contains(FUTURE.PRINT_FUNCTION);
+ }
+
private void checkEndOfStatement(boolean inSuite) {
PsiBuilder builder = myContext.getBuilder();
if (builder.getTokenType() == PyTokenTypes.STATEMENT_BREAK) {
@@ -398,6 +407,9 @@ public class StatementParsing extends Parsing implements ITokenTypeRemapper {
else if (TOK_NESTED_SCOPES.equals(token_text)) {
myFutureFlags.add(FUTURE.NESTED_SCOPES);
}
+ else if (TOK_PRINT_FUNCTION.equals(token_text)) {
+ myFutureFlags.add(FUTURE.PRINT_FUNCTION);
+ }
}
}
myExpectAsKeyword = true; // possible 'as' comes as an ident; reparse it as keyword if found
@@ -723,6 +735,10 @@ public class StatementParsing extends Parsing implements ITokenTypeRemapper {
) {
return PyTokenTypes.WITH_KEYWORD;
}
+ else if (hasPrintStatement() && source == PyTokenTypes.IDENTIFIER &&
+ isWordAtPosition(text, start, end, TOK_PRINT)) {
+ return PyTokenTypes.PRINT_KEYWORD;
+ }
return source;
}
diff --git a/python/src/com/jetbrains/python/psi/LanguageLevel.java b/python/src/com/jetbrains/python/psi/LanguageLevel.java
index 80a18ffccb1d..bace3c251e93 100644
--- a/python/src/com/jetbrains/python/psi/LanguageLevel.java
+++ b/python/src/com/jetbrains/python/psi/LanguageLevel.java
@@ -10,22 +10,28 @@ import org.jetbrains.annotations.NotNull;
* @author yole
*/
public enum LanguageLevel {
- PYTHON24(false), PYTHON25(false), PYTHON26(true);
+ PYTHON24(false, true), PYTHON25(false, true), PYTHON26(true, true), PYTHON30(true, false);
public static LanguageLevel getDefault() {
return PYTHON26;
}
private boolean myHasWithStatement;
+ private boolean myHasPrintStatement;
- LanguageLevel(boolean hasWithStatement) {
+ LanguageLevel(boolean hasWithStatement, boolean hasPrintStatement) {
myHasWithStatement = hasWithStatement;
+ myHasPrintStatement = hasPrintStatement;
}
public boolean hasWithStatement() {
return myHasWithStatement;
}
+ public boolean hasPrintStatement() {
+ return myHasPrintStatement;
+ }
+
public static LanguageLevel fromPythonVersion(String pythonVersion) {
if (pythonVersion.startsWith("2.6")) {
return PYTHON26;
@@ -33,6 +39,9 @@ public enum LanguageLevel {
if (pythonVersion.startsWith("2.5")) {
return PYTHON25;
}
+ if (pythonVersion.startsWith("3.0") || pythonVersion.startsWith("3.1")) {
+ return PYTHON30;
+ }
return PYTHON24;
}
diff --git a/python/src/com/jetbrains/python/psi/PyFileElementType.java b/python/src/com/jetbrains/python/psi/PyFileElementType.java
index ce0e227461ea..844232874b6a 100644
--- a/python/src/com/jetbrains/python/psi/PyFileElementType.java
+++ b/python/src/com/jetbrains/python/psi/PyFileElementType.java
@@ -1,6 +1,9 @@
package com.jetbrains.python.psi;
-import com.intellij.lang.*;
+import com.intellij.lang.ASTNode;
+import com.intellij.lang.Language;
+import com.intellij.lang.PsiBuilder;
+import com.intellij.lang.PsiBuilderFactory;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
@@ -9,6 +12,7 @@ import com.intellij.psi.impl.source.tree.FileElement;
import com.intellij.psi.tree.IStubFileElementType;
import com.jetbrains.python.lexer.PythonIndentingLexer;
import com.jetbrains.python.parsing.PyParser;
+import com.jetbrains.python.parsing.StatementParsing;
/**
* @author yole
@@ -20,7 +24,7 @@ public class PyFileElementType extends IStubFileElementType {
@Override
public int getStubVersion() {
- return 4;
+ return 5;
}
@Override
@@ -34,7 +38,12 @@ public class PyFileElementType extends IStubFileElementType {
final PsiBuilder builder = factory.createBuilder(project, chameleon, lexer, getLanguage(), chameleon.getChars());
- final PsiParser parser = new PyParser(languageLevel);
+ final PyParser parser = new PyParser(languageLevel);
+ if (languageLevel == LanguageLevel.PYTHON26 &&
+ node.getPsi().getContainingFile().getName().equals("__builtin__.py")) {
+ parser.setFutureFlag(StatementParsing.FUTURE.PRINT_FUNCTION);
+ }
+
return parser.parse(this, builder).getFirstChildNode();
}
diff --git a/python/testData/psi/PrintAsFunction26.py b/python/testData/psi/PrintAsFunction26.py
new file mode 100644
index 000000000000..baa12db7082c
--- /dev/null
+++ b/python/testData/psi/PrintAsFunction26.py
@@ -0,0 +1,2 @@
+from __future__ import print_function
+print('a')
diff --git a/python/testData/psi/PrintAsFunction26.txt b/python/testData/psi/PrintAsFunction26.txt
new file mode 100644
index 000000000000..f13bab80c231
--- /dev/null
+++ b/python/testData/psi/PrintAsFunction26.txt
@@ -0,0 +1,22 @@
+PyFile:PrintAsFunction26.py
+ PyFromImportStatement
+ PsiElement(Py:FROM_KEYWORD)('from')
+ PsiWhiteSpace(' ')
+ PyReferenceExpression: __future__
+ PsiElement(Py:IDENTIFIER)('__future__')
+ PsiWhiteSpace(' ')
+ PsiElement(Py:IMPORT_KEYWORD)('import')
+ PsiWhiteSpace(' ')
+ PyImportElement
+ PyReferenceExpression: print_function
+ PsiElement(Py:IDENTIFIER)('print_function')
+ PsiWhiteSpace('\n')
+ PyExpressionStatement
+ PyCallExpression: print
+ PyReferenceExpression: print
+ PsiElement(Py:IDENTIFIER)('print')
+ PyArgumentList
+ PsiElement(Py:LPAR)('(')
+ PyStringLiteralExpression: a
+ PsiElement(Py:STRING_LITERAL)(''a'')
+ PsiElement(Py:RPAR)(')')
\ No newline at end of file
diff --git a/python/testSrc/com/jetbrains/python/PythonParsingTest.java b/python/testSrc/com/jetbrains/python/PythonParsingTest.java
index 27e952890629..def8e21f57f3 100644
--- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java
+++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java
@@ -100,6 +100,10 @@ public class PythonParsingTest extends ParsingTestCase {
doTest(LanguageLevel.PYTHON26);
}
+ public void testPrintAsFunction26() throws Exception {
+ doTest(LanguageLevel.PYTHON26);
+ }
+
public void doTest() throws Exception {
doTest(LanguageLevel.PYTHON25);
}