diff --git a/.gitignore b/.gitignore index d2c4f26..c917a38 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,9 @@ MANIFEST .vscode/ .idea/ +# Test configuration +pytest.ini + # Environments .env .envrc diff --git a/README.md b/README.md index 1efb4ea..6199401 100644 --- a/README.md +++ b/README.md @@ -536,6 +536,10 @@ PyMongoSQL can be used as a database driver in Apache Superset for querying and This allows seamless integration between MongoDB data and Superset's BI capabilities without requiring data migration to traditional SQL databases. +**Important Note on Collection Names:** + +When using collection names containing special characters (`.`, `-`, `:`), you must wrap them in double quotes to prevent Superset's SQL parser from incorrectly interpreting them. + ## Contributing Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change. diff --git a/pymongosql/__init__.py b/pymongosql/__init__.py index 34b8182..ac97a3f 100644 --- a/pymongosql/__init__.py +++ b/pymongosql/__init__.py @@ -6,7 +6,7 @@ if TYPE_CHECKING: from .connection import Connection -__version__: str = "0.4.1" +__version__: str = "0.4.2" # Globals https://www.python.org/dev/peps/pep-0249/#globals apilevel: str = "2.0" diff --git a/pymongosql/sql/partiql/PartiQLLexer.g4 b/pymongosql/sql/partiql/PartiQLLexer.g4 index 6aafc2f..131409e 100644 --- a/pymongosql/sql/partiql/PartiQLLexer.g4 +++ b/pymongosql/sql/partiql/PartiQLLexer.g4 @@ -77,6 +77,7 @@ CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'; CURRENT_USER: 'CURRENT_USER'; CURSOR: 'CURSOR'; DATE: 'DATE'; +DATETIME: 'DATETIME'; DEALLOCATE: 'DEALLOCATE'; DEC: 'DEC'; DECIMAL: 'DECIMAL'; @@ -370,7 +371,7 @@ LITERAL_DECIMAL: ; IDENTIFIER - : [A-Z$_][A-Z0-9$_]*; + : [A-Z$_][A-Z0-9$_-]*; IDENTIFIER_QUOTED : '"' ( ('""') | ~('"') )* '"'; diff --git a/pymongosql/sql/partiql/PartiQLLexer.py b/pymongosql/sql/partiql/PartiQLLexer.py index de06d41..e8c9e3c 100644 --- a/pymongosql/sql/partiql/PartiQLLexer.py +++ b/pymongosql/sql/partiql/PartiQLLexer.py @@ -1,4 +1,4 @@ -# Generated from PartiQLLexer.g4 by ANTLR 4.13.0 +# Generated from PartiQLLexer.g4 by ANTLR 4.13.1 from antlr4 import * from io import StringIO import sys @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,0,310,3091,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2, + 4,0,311,3102,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2, 5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7, 12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2, 19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7, @@ -70,260 +70,261 @@ def serializedATN(): 7,328,2,329,7,329,2,330,7,330,2,331,7,331,2,332,7,332,2,333,7,333, 2,334,7,334,2,335,7,335,2,336,7,336,2,337,7,337,2,338,7,338,2,339, 7,339,2,340,7,340,2,341,7,341,2,342,7,342,2,343,7,343,2,344,7,344, - 2,345,7,345,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4, - 1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,7,1,7, - 1,7,1,7,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,11,1,11, - 1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,13,1,13, - 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,14, - 1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16, - 1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18, - 1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,20,1,20,1,20,1,20, - 1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21, - 1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26, - 1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27, - 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,29,1,29,1,29, - 1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31, - 1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32, - 1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34, - 1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,36,1,36, - 1,36,1,36,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38, - 1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39, - 1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41, - 1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, - 1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,43,1,44, - 1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45,1,46, - 1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,47,1,47, - 1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48, - 1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49, - 1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50, - 1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,51, - 1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,53,1,53, - 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54, - 1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56, - 1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,58,1,58, - 1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59, - 1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,61, - 1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62, - 1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64, - 1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65, - 1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66, - 1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68, - 1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70, - 1,70,1,70,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1,72, - 1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74, - 1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76, - 1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77, - 1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79, - 1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81, - 1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,83, - 1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84, - 1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,86, - 1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87, - 1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1,89,1,89,1,89, - 1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,91,1,92,1,92, - 1,92,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,93,1,94, - 1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96, - 1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,99,1,99,1,99, - 1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,101,1,101,1,101, - 1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,103, - 1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,104,1,104,1,104, - 1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,106, - 1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,107,1,107, + 2,345,7,345,2,346,7,346,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,4,1,4, + 1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6, + 1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1, + 10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1, + 12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1, + 13,1,13,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1, + 16,1,16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,18,1,18,1, + 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,20,1, + 20,1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,1, + 21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1, + 26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1, + 27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1, + 27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, + 29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1, + 31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1, + 32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1, + 34,1,34,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,35,1, + 35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1, + 38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1, + 39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1, + 41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1, + 42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1, + 43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1, + 45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1, + 47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1, + 48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1, + 49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1, + 49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1, + 50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1, + 52,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1, + 54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,56,1, + 56,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,57,1, + 57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1, + 59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1, + 60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1, + 62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1, + 64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1, + 65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1, + 66,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1, + 67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1, + 69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1, + 71,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1, + 73,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1, + 75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1, + 77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1, + 79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1, + 80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1, + 82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1, + 84,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1, + 85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1, + 87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1, + 88,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1, + 91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1, + 93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1, + 95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,98,1, + 98,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,100,1,100,1,100,1,100, + 1,100,1,101,1,101,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102, + 1,102,1,102,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,104,1,104, + 1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,105, + 1,105,1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,107,1,107, 1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,108, - 1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,110,1,110, - 1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,111, - 1,111,1,111,1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,113, - 1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114, + 1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109, + 1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,1,111,1,111,1,111, + 1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,112,1,112, + 1,112,1,112,1,112,1,112,1,112,1,113,1,113,1,113,1,113,1,114,1,114, 1,114,1,114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,115, - 1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116,1,117,1,117, - 1,117,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, - 1,119,1,119,1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,121,1,121, - 1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,122, - 1,122,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,124,1,124, - 1,124,1,124,1,124,1,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126, - 1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,127,1,127,1,128,1,128, - 1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,130, - 1,130,1,130,1,130,1,131,1,131,1,131,1,131,1,132,1,132,1,132,1,132, - 1,132,1,132,1,132,1,133,1,133,1,133,1,133,1,133,1,133,1,134,1,134, - 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,135,1,135,1,135,1,135, - 1,135,1,135,1,135,1,135,1,136,1,136,1,136,1,136,1,136,1,136,1,137, - 1,137,1,137,1,137,1,137,1,138,1,138,1,138,1,139,1,139,1,139,1,139, - 1,140,1,140,1,140,1,140,1,140,1,141,1,141,1,141,1,141,1,141,1,141, - 1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,143,1,143,1,143,1,143, - 1,143,1,143,1,143,1,143,1,144,1,144,1,144,1,144,1,144,1,144,1,144, - 1,144,1,144,1,144,1,144,1,144,1,144,1,145,1,145,1,145,1,146,1,146, - 1,146,1,147,1,147,1,147,1,147,1,147,1,148,1,148,1,148,1,148,1,148, - 1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,150,1,150,1,150,1,151, - 1,151,1,151,1,151,1,151,1,151,1,152,1,152,1,152,1,152,1,152,1,152, - 1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,154,1,154,1,154,1,154, - 1,154,1,154,1,154,1,154,1,154,1,155,1,155,1,155,1,155,1,155,1,155, - 1,155,1,155,1,156,1,156,1,156,1,156,1,157,1,157,1,157,1,157,1,157, - 1,157,1,157,1,157,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158, - 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,160,1,160, + 1,115,1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116,1,116, + 1,116,1,116,1,116,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118, + 1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,120, + 1,120,1,120,1,120,1,120,1,121,1,121,1,121,1,121,1,122,1,122,1,122, + 1,122,1,122,1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,123,1,123, + 1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,125,1,125,1,125, + 1,125,1,125,1,126,1,126,1,126,1,126,1,126,1,126,1,127,1,127,1,127, + 1,127,1,127,1,128,1,128,1,128,1,128,1,128,1,128,1,129,1,129,1,129, + 1,129,1,129,1,129,1,130,1,130,1,130,1,130,1,130,1,130,1,131,1,131, + 1,131,1,131,1,132,1,132,1,132,1,132,1,133,1,133,1,133,1,133,1,133, + 1,133,1,133,1,134,1,134,1,134,1,134,1,134,1,134,1,135,1,135,1,135, + 1,135,1,135,1,135,1,135,1,135,1,135,1,136,1,136,1,136,1,136,1,136, + 1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,137,1,138,1,138, + 1,138,1,138,1,138,1,139,1,139,1,139,1,140,1,140,1,140,1,140,1,141, + 1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,142,1,142,1,143, + 1,143,1,143,1,143,1,143,1,143,1,143,1,144,1,144,1,144,1,144,1,144, + 1,144,1,144,1,144,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,145, + 1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146,1,147,1,147,1,147, + 1,148,1,148,1,148,1,148,1,148,1,149,1,149,1,149,1,149,1,149,1,150, + 1,150,1,150,1,150,1,150,1,150,1,150,1,151,1,151,1,151,1,152,1,152, + 1,152,1,152,1,152,1,152,1,153,1,153,1,153,1,153,1,153,1,153,1,154, + 1,154,1,154,1,154,1,154,1,154,1,154,1,155,1,155,1,155,1,155,1,155, + 1,155,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,156,1,156,1,156, + 1,156,1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158,1,158,1,158, + 1,158,1,158,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,160, 1,160,1,160,1,160,1,160,1,160,1,160,1,160,1,160,1,161,1,161,1,161, - 1,161,1,161,1,161,1,161,1,161,1,162,1,162,1,162,1,162,1,162,1,162, - 1,162,1,162,1,162,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163, - 1,164,1,164,1,164,1,164,1,164,1,164,1,165,1,165,1,165,1,165,1,165, - 1,165,1,165,1,165,1,165,1,165,1,165,1,166,1,166,1,166,1,166,1,166, + 1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,162,1,162,1,162,1,162, + 1,162,1,162,1,162,1,162,1,163,1,163,1,163,1,163,1,163,1,163,1,163, + 1,163,1,163,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,165, + 1,165,1,165,1,165,1,165,1,165,1,166,1,166,1,166,1,166,1,166,1,166, 1,166,1,166,1,166,1,166,1,166,1,167,1,167,1,167,1,167,1,167,1,167, - 1,167,1,168,1,168,1,168,1,168,1,168,1,169,1,169,1,169,1,169,1,169, - 1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170, - 1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,172,1,172, - 1,172,1,172,1,172,1,172,1,172,1,172,1,173,1,173,1,173,1,173,1,173, - 1,173,1,173,1,173,1,173,1,174,1,174,1,174,1,174,1,174,1,174,1,174, - 1,175,1,175,1,175,1,175,1,175,1,175,1,176,1,176,1,176,1,176,1,176, - 1,176,1,176,1,176,1,176,1,177,1,177,1,177,1,177,1,177,1,178,1,178, - 1,178,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179,1,179, - 1,179,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,181,1,181, - 1,181,1,181,1,181,1,181,1,181,1,182,1,182,1,182,1,182,1,182,1,182, - 1,182,1,182,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183, - 1,183,1,183,1,183,1,183,1,184,1,184,1,184,1,184,1,185,1,185,1,185, - 1,185,1,185,1,185,1,185,1,185,1,185,1,186,1,186,1,186,1,186,1,186, - 1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,188,1,188, - 1,188,1,188,1,188,1,189,1,189,1,189,1,189,1,189,1,189,1,190,1,190, - 1,190,1,190,1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,192, - 1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,193,1,193,1,193, - 1,193,1,193,1,193,1,193,1,193,1,193,1,194,1,194,1,194,1,194,1,194, - 1,194,1,194,1,194,1,194,1,194,1,195,1,195,1,195,1,195,1,196,1,196, - 1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,197, - 1,197,1,197,1,197,1,197,1,197,1,198,1,198,1,198,1,198,1,198,1,198, - 1,198,1,198,1,198,1,198,1,199,1,199,1,199,1,199,1,199,1,200,1,200, - 1,200,1,200,1,200,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201, - 1,201,1,201,1,202,1,202,1,202,1,203,1,203,1,203,1,203,1,203,1,203, - 1,203,1,203,1,203,1,203,1,203,1,203,1,204,1,204,1,204,1,204,1,204, + 1,167,1,167,1,167,1,167,1,168,1,168,1,168,1,168,1,168,1,168,1,168, + 1,169,1,169,1,169,1,169,1,169,1,170,1,170,1,170,1,170,1,170,1,171, + 1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,172, + 1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,173,1,173,1,173, + 1,173,1,173,1,173,1,173,1,173,1,174,1,174,1,174,1,174,1,174,1,174, + 1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,176, + 1,176,1,176,1,176,1,176,1,176,1,177,1,177,1,177,1,177,1,177,1,177, + 1,177,1,177,1,177,1,178,1,178,1,178,1,178,1,178,1,179,1,179,1,179, + 1,179,1,179,1,179,1,179,1,180,1,180,1,180,1,180,1,180,1,180,1,180, + 1,181,1,181,1,181,1,181,1,181,1,181,1,181,1,181,1,182,1,182,1,182, + 1,182,1,182,1,182,1,182,1,183,1,183,1,183,1,183,1,183,1,183,1,183, + 1,183,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184, + 1,184,1,184,1,184,1,185,1,185,1,185,1,185,1,186,1,186,1,186,1,186, + 1,186,1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187,1,188, + 1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,189,1,189,1,189, + 1,189,1,189,1,190,1,190,1,190,1,190,1,190,1,190,1,191,1,191,1,191, + 1,191,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,193,1,193, + 1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,194,1,194,1,194,1,194, + 1,194,1,194,1,194,1,194,1,194,1,195,1,195,1,195,1,195,1,195,1,195, + 1,195,1,195,1,195,1,195,1,196,1,196,1,196,1,196,1,197,1,197,1,197, + 1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,198,1,198, + 1,198,1,198,1,198,1,198,1,199,1,199,1,199,1,199,1,199,1,199,1,199, + 1,199,1,199,1,199,1,200,1,200,1,200,1,200,1,200,1,201,1,201,1,201, + 1,201,1,201,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202, + 1,202,1,203,1,203,1,203,1,204,1,204,1,204,1,204,1,204,1,204,1,204, 1,204,1,204,1,204,1,204,1,204,1,205,1,205,1,205,1,205,1,205,1,205, - 1,205,1,205,1,205,1,205,1,205,1,205,1,206,1,206,1,206,1,206,1,206, - 1,207,1,207,1,207,1,207,1,207,1,208,1,208,1,208,1,208,1,208,1,208, - 1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,210,1,210,1,210,1,210, - 1,210,1,210,1,210,1,210,1,211,1,211,1,211,1,211,1,211,1,211,1,211, - 1,212,1,212,1,212,1,212,1,212,1,212,1,213,1,213,1,213,1,213,1,213, - 1,213,1,213,1,214,1,214,1,214,1,214,1,214,1,214,1,215,1,215,1,215, - 1,215,1,215,1,216,1,216,1,216,1,216,1,216,1,216,1,217,1,217,1,217, - 1,217,1,217,1,217,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,219, - 1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,220,1,220,1,220,1,220, - 1,220,1,220,1,220,1,220,1,221,1,221,1,221,1,221,1,221,1,222,1,222, - 1,222,1,222,1,222,1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,223, - 1,223,1,224,1,224,1,224,1,224,1,224,1,224,1,225,1,225,1,225,1,225, - 1,225,1,226,1,226,1,226,1,226,1,226,1,227,1,227,1,227,1,227,1,227, - 1,227,1,228,1,228,1,228,1,228,1,228,1,229,1,229,1,229,1,229,1,230, - 1,230,1,230,1,230,1,230,1,231,1,231,1,231,1,231,1,231,1,232,1,232, - 1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,233,1,233,1,233, - 1,233,1,233,1,233,1,233,1,233,1,233,1,234,1,234,1,234,1,234,1,234, - 1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234, - 1,234,1,234,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,236, - 1,236,1,236,1,236,1,236,1,236,1,237,1,237,1,237,1,237,1,237,1,237, - 1,237,1,237,1,238,1,238,1,238,1,238,1,238,1,238,1,239,1,239,1,239, - 1,239,1,239,1,239,1,239,1,240,1,240,1,240,1,240,1,240,1,240,1,240, - 1,241,1,241,1,241,1,241,1,241,1,241,1,242,1,242,1,242,1,242,1,243, - 1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,244,1,244,1,244, - 1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,246, - 1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,247,1,247,1,247, - 1,247,1,248,1,248,1,248,1,248,1,249,1,249,1,249,1,249,1,249,1,249, - 1,249,1,249,1,250,1,250,1,250,1,250,1,250,1,250,1,251,1,251,1,251, - 1,251,1,251,1,251,1,251,1,251,1,251,1,252,1,252,1,252,1,252,1,252, - 1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,254,1,254, - 1,254,1,254,1,254,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255, - 1,255,1,256,1,256,1,256,1,256,1,256,1,257,1,257,1,257,1,257,1,257, - 1,257,1,257,1,258,1,258,1,258,1,258,1,258,1,259,1,259,1,259,1,259, - 1,259,1,259,1,259,1,259,1,260,1,260,1,260,1,260,1,260,1,260,1,260, - 1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,262,1,262,1,262,1,262, - 1,262,1,263,1,263,1,263,1,263,1,263,1,264,1,264,1,264,1,264,1,264, - 1,264,1,264,1,265,1,265,1,265,1,265,1,265,1,266,1,266,1,266,1,266, - 1,266,1,267,1,267,1,267,1,267,1,268,1,268,1,269,1,269,1,270,1,270, - 1,271,1,271,1,272,1,272,1,273,1,273,1,274,1,274,1,275,1,275,1,276, - 1,276,1,277,1,277,1,278,1,278,1,279,1,279,1,280,1,280,1,280,1,281, - 1,281,1,281,1,282,1,282,1,283,1,283,1,283,1,283,3,283,2653,8,283, - 1,284,1,284,1,284,1,285,1,285,1,286,1,286,1,287,1,287,1,287,1,288, - 1,288,1,288,1,289,1,289,1,290,1,290,1,291,1,291,1,292,1,292,1,293, - 1,293,1,294,1,294,1,295,1,295,1,295,1,295,1,295,1,296,1,296,1,297, - 1,297,1,298,1,298,1,299,1,299,1,300,1,300,1,300,1,300,5,300,2697, - 8,300,10,300,12,300,2700,9,300,1,300,1,300,1,301,1,301,5,301,2706, - 8,301,10,301,12,301,2709,9,301,1,302,4,302,2712,8,302,11,302,12, - 302,2713,1,302,1,302,5,302,2718,8,302,10,302,12,302,2721,9,302,1, - 302,1,302,3,302,2725,8,302,1,302,4,302,2728,8,302,11,302,12,302, - 2729,3,302,2732,8,302,1,302,1,302,1,302,5,302,2737,8,302,10,302, - 12,302,2740,9,302,1,302,1,302,3,302,2744,8,302,1,302,4,302,2747, - 8,302,11,302,12,302,2748,3,302,2751,8,302,1,302,1,302,5,302,2755, - 8,302,10,302,12,302,2758,9,302,1,302,1,302,3,302,2762,8,302,1,302, - 4,302,2765,8,302,11,302,12,302,2766,3,302,2769,8,302,3,302,2771, - 8,302,1,303,1,303,5,303,2775,8,303,10,303,12,303,2778,9,303,1,304, - 1,304,1,304,1,304,5,304,2784,8,304,10,304,12,304,2787,9,304,1,304, - 1,304,1,305,4,305,2792,8,305,11,305,12,305,2793,1,305,1,305,1,306, - 1,306,1,306,1,306,5,306,2802,8,306,10,306,12,306,2805,9,306,1,306, - 3,306,2808,8,306,1,306,3,306,2811,8,306,1,306,1,306,1,307,1,307, - 1,307,1,307,5,307,2819,8,307,10,307,12,307,2822,9,307,1,307,1,307, - 1,307,1,307,1,307,1,308,1,308,1,309,1,309,1,310,1,310,1,311,1,311, - 1,312,1,312,1,313,1,313,1,313,1,313,5,313,2843,8,313,10,313,12,313, - 2846,9,313,1,313,1,313,3,313,2850,8,313,1,313,1,313,1,314,1,314, - 1,314,1,314,5,314,2858,8,314,10,314,12,314,2861,9,314,1,314,1,314, - 1,314,1,314,1,314,1,315,1,315,1,315,5,315,2871,8,315,10,315,12,315, - 2874,9,315,1,315,3,315,2877,8,315,1,315,5,315,2880,8,315,10,315, - 12,315,2883,9,315,1,315,1,315,1,315,1,315,1,316,1,316,1,316,1,316, - 1,316,1,316,1,317,1,317,1,317,1,317,1,317,1,317,1,318,1,318,1,318, - 1,318,1,318,1,318,1,319,1,319,1,319,1,319,1,320,1,320,1,320,1,320, - 1,321,1,321,1,321,3,321,2918,8,321,1,322,1,322,1,323,1,323,1,323, - 1,323,1,324,1,324,5,324,2928,8,324,10,324,12,324,2931,9,324,1,325, - 1,325,5,325,2935,8,325,10,325,12,325,2938,9,325,1,326,1,326,3,326, - 2942,8,326,1,327,1,327,3,327,2946,8,327,1,328,1,328,1,328,3,328, - 2951,8,328,1,329,1,329,1,329,1,330,1,330,1,330,1,331,1,331,3,331, - 2961,8,331,1,332,1,332,5,332,2965,8,332,10,332,12,332,2968,9,332, - 1,332,1,332,5,332,2972,8,332,10,332,12,332,2975,9,332,1,332,1,332, - 5,332,2979,8,332,10,332,12,332,2982,9,332,1,332,1,332,1,333,1,333, - 5,333,2988,8,333,10,333,12,333,2991,9,333,1,333,1,333,5,333,2995, - 8,333,10,333,12,333,2998,9,333,1,333,1,333,5,333,3002,8,333,10,333, - 12,333,3005,9,333,1,333,1,333,1,334,1,334,5,334,3011,8,334,10,334, - 12,334,3014,9,334,1,334,1,334,5,334,3018,8,334,10,334,12,334,3021, - 9,334,1,334,1,334,5,334,3025,8,334,10,334,12,334,3028,9,334,1,334, - 1,334,1,335,1,335,1,336,1,336,5,336,3036,8,336,10,336,12,336,3039, - 9,336,1,337,1,337,3,337,3043,8,337,1,338,1,338,1,338,1,339,1,339, - 3,339,3050,8,339,1,340,1,340,1,340,1,340,1,340,1,340,1,341,1,341, - 1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341, - 1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,3,341,3079,8,341, - 1,342,1,342,1,342,1,342,1,342,1,343,1,343,1,344,1,344,1,345,1,345, - 4,2820,2844,2859,2936,0,346,2,1,4,2,6,3,8,4,10,5,12,6,14,7,16,8, - 18,9,20,10,22,11,24,12,26,13,28,14,30,15,32,16,34,17,36,18,38,19, - 40,20,42,21,44,22,46,23,48,24,50,25,52,26,54,27,56,28,58,29,60,30, - 62,31,64,32,66,33,68,34,70,35,72,36,74,37,76,38,78,39,80,40,82,41, - 84,42,86,43,88,44,90,45,92,46,94,47,96,48,98,49,100,50,102,51,104, - 52,106,53,108,54,110,55,112,56,114,57,116,58,118,59,120,60,122,61, - 124,62,126,63,128,64,130,65,132,66,134,67,136,68,138,69,140,70,142, - 71,144,72,146,73,148,74,150,75,152,76,154,77,156,78,158,79,160,80, - 162,81,164,82,166,83,168,84,170,85,172,86,174,87,176,88,178,89,180, - 90,182,91,184,92,186,93,188,94,190,95,192,96,194,97,196,98,198,99, - 200,100,202,101,204,102,206,103,208,104,210,105,212,106,214,107, - 216,108,218,109,220,110,222,111,224,112,226,113,228,114,230,115, - 232,116,234,117,236,118,238,119,240,120,242,121,244,122,246,123, - 248,124,250,125,252,126,254,127,256,128,258,129,260,130,262,131, - 264,132,266,133,268,134,270,135,272,136,274,137,276,138,278,139, - 280,140,282,141,284,142,286,143,288,144,290,145,292,146,294,147, - 296,148,298,149,300,150,302,151,304,152,306,153,308,154,310,155, - 312,156,314,157,316,158,318,159,320,160,322,161,324,162,326,163, - 328,164,330,165,332,166,334,167,336,168,338,169,340,170,342,171, - 344,172,346,173,348,174,350,175,352,176,354,177,356,178,358,179, - 360,180,362,181,364,182,366,183,368,184,370,185,372,186,374,187, - 376,188,378,189,380,190,382,191,384,192,386,193,388,194,390,195, - 392,196,394,197,396,198,398,199,400,200,402,201,404,202,406,203, - 408,204,410,205,412,206,414,207,416,208,418,209,420,210,422,211, - 424,212,426,213,428,214,430,215,432,216,434,217,436,218,438,219, - 440,220,442,221,444,222,446,223,448,224,450,225,452,226,454,227, - 456,228,458,229,460,230,462,231,464,232,466,233,468,234,470,235, - 472,236,474,237,476,238,478,239,480,240,482,241,484,242,486,243, - 488,244,490,245,492,246,494,247,496,248,498,249,500,250,502,251, - 504,252,506,253,508,254,510,255,512,256,514,257,516,258,518,259, - 520,260,522,261,524,262,526,263,528,264,530,265,532,266,534,267, - 536,268,538,269,540,270,542,271,544,272,546,273,548,274,550,275, - 552,276,554,277,556,278,558,279,560,280,562,281,564,282,566,283, - 568,284,570,285,572,286,574,287,576,288,578,289,580,290,582,291, - 584,292,586,293,588,294,590,295,592,310,594,296,596,297,598,298, - 600,299,602,300,604,301,606,302,608,303,610,304,612,305,614,306, - 616,307,618,308,620,0,622,0,624,0,626,0,628,0,630,0,632,0,634,0, - 636,0,638,0,640,309,642,0,644,0,646,0,648,0,650,0,652,0,654,0,656, - 0,658,0,660,0,662,0,664,0,666,0,668,0,670,0,672,0,674,0,676,0,678, - 0,680,0,682,0,684,0,686,0,688,0,690,0,692,0,2,0,1,42,2,0,65,65,97, + 1,205,1,205,1,205,1,205,1,206,1,206,1,206,1,206,1,206,1,206,1,206, + 1,206,1,206,1,206,1,206,1,206,1,207,1,207,1,207,1,207,1,207,1,208, + 1,208,1,208,1,208,1,208,1,209,1,209,1,209,1,209,1,209,1,209,1,210, + 1,210,1,210,1,210,1,210,1,210,1,210,1,211,1,211,1,211,1,211,1,211, + 1,211,1,211,1,211,1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,213, + 1,213,1,213,1,213,1,213,1,213,1,214,1,214,1,214,1,214,1,214,1,214, + 1,214,1,215,1,215,1,215,1,215,1,215,1,215,1,216,1,216,1,216,1,216, + 1,216,1,217,1,217,1,217,1,217,1,217,1,217,1,218,1,218,1,218,1,218, + 1,218,1,218,1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,220,1,220, + 1,220,1,220,1,220,1,220,1,220,1,220,1,221,1,221,1,221,1,221,1,221, + 1,221,1,221,1,221,1,222,1,222,1,222,1,222,1,222,1,223,1,223,1,223, + 1,223,1,223,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224, + 1,225,1,225,1,225,1,225,1,225,1,225,1,226,1,226,1,226,1,226,1,226, + 1,227,1,227,1,227,1,227,1,227,1,228,1,228,1,228,1,228,1,228,1,228, + 1,229,1,229,1,229,1,229,1,229,1,230,1,230,1,230,1,230,1,231,1,231, + 1,231,1,231,1,231,1,232,1,232,1,232,1,232,1,232,1,233,1,233,1,233, + 1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,234,1,234,1,234,1,234, + 1,234,1,234,1,234,1,234,1,234,1,235,1,235,1,235,1,235,1,235,1,235, + 1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235, + 1,235,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,237,1,237, + 1,237,1,237,1,237,1,237,1,238,1,238,1,238,1,238,1,238,1,238,1,238, + 1,238,1,239,1,239,1,239,1,239,1,239,1,239,1,240,1,240,1,240,1,240, + 1,240,1,240,1,240,1,241,1,241,1,241,1,241,1,241,1,241,1,241,1,242, + 1,242,1,242,1,242,1,242,1,242,1,243,1,243,1,243,1,243,1,244,1,244, + 1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,245,1,245,1,245,1,246, + 1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,247,1,247, + 1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,248,1,248,1,248,1,248, + 1,249,1,249,1,249,1,249,1,250,1,250,1,250,1,250,1,250,1,250,1,250, + 1,250,1,251,1,251,1,251,1,251,1,251,1,251,1,252,1,252,1,252,1,252, + 1,252,1,252,1,252,1,252,1,252,1,253,1,253,1,253,1,253,1,253,1,254, + 1,254,1,254,1,254,1,254,1,254,1,254,1,254,1,254,1,255,1,255,1,255, + 1,255,1,255,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256, + 1,257,1,257,1,257,1,257,1,257,1,258,1,258,1,258,1,258,1,258,1,258, + 1,258,1,259,1,259,1,259,1,259,1,259,1,260,1,260,1,260,1,260,1,260, + 1,260,1,260,1,260,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,262, + 1,262,1,262,1,262,1,262,1,262,1,262,1,263,1,263,1,263,1,263,1,263, + 1,264,1,264,1,264,1,264,1,264,1,265,1,265,1,265,1,265,1,265,1,265, + 1,265,1,266,1,266,1,266,1,266,1,266,1,267,1,267,1,267,1,267,1,267, + 1,268,1,268,1,268,1,268,1,269,1,269,1,270,1,270,1,271,1,271,1,272, + 1,272,1,273,1,273,1,274,1,274,1,275,1,275,1,276,1,276,1,277,1,277, + 1,278,1,278,1,279,1,279,1,280,1,280,1,281,1,281,1,281,1,282,1,282, + 1,282,1,283,1,283,1,284,1,284,1,284,1,284,3,284,2664,8,284,1,285, + 1,285,1,285,1,286,1,286,1,287,1,287,1,288,1,288,1,288,1,289,1,289, + 1,289,1,290,1,290,1,291,1,291,1,292,1,292,1,293,1,293,1,294,1,294, + 1,295,1,295,1,296,1,296,1,296,1,296,1,296,1,297,1,297,1,298,1,298, + 1,299,1,299,1,300,1,300,1,301,1,301,1,301,1,301,5,301,2708,8,301, + 10,301,12,301,2711,9,301,1,301,1,301,1,302,1,302,5,302,2717,8,302, + 10,302,12,302,2720,9,302,1,303,4,303,2723,8,303,11,303,12,303,2724, + 1,303,1,303,5,303,2729,8,303,10,303,12,303,2732,9,303,1,303,1,303, + 3,303,2736,8,303,1,303,4,303,2739,8,303,11,303,12,303,2740,3,303, + 2743,8,303,1,303,1,303,1,303,5,303,2748,8,303,10,303,12,303,2751, + 9,303,1,303,1,303,3,303,2755,8,303,1,303,4,303,2758,8,303,11,303, + 12,303,2759,3,303,2762,8,303,1,303,1,303,5,303,2766,8,303,10,303, + 12,303,2769,9,303,1,303,1,303,3,303,2773,8,303,1,303,4,303,2776, + 8,303,11,303,12,303,2777,3,303,2780,8,303,3,303,2782,8,303,1,304, + 1,304,5,304,2786,8,304,10,304,12,304,2789,9,304,1,305,1,305,1,305, + 1,305,5,305,2795,8,305,10,305,12,305,2798,9,305,1,305,1,305,1,306, + 4,306,2803,8,306,11,306,12,306,2804,1,306,1,306,1,307,1,307,1,307, + 1,307,5,307,2813,8,307,10,307,12,307,2816,9,307,1,307,3,307,2819, + 8,307,1,307,3,307,2822,8,307,1,307,1,307,1,308,1,308,1,308,1,308, + 5,308,2830,8,308,10,308,12,308,2833,9,308,1,308,1,308,1,308,1,308, + 1,308,1,309,1,309,1,310,1,310,1,311,1,311,1,312,1,312,1,313,1,313, + 1,314,1,314,1,314,1,314,5,314,2854,8,314,10,314,12,314,2857,9,314, + 1,314,1,314,3,314,2861,8,314,1,314,1,314,1,315,1,315,1,315,1,315, + 5,315,2869,8,315,10,315,12,315,2872,9,315,1,315,1,315,1,315,1,315, + 1,315,1,316,1,316,1,316,5,316,2882,8,316,10,316,12,316,2885,9,316, + 1,316,3,316,2888,8,316,1,316,5,316,2891,8,316,10,316,12,316,2894, + 9,316,1,316,1,316,1,316,1,316,1,317,1,317,1,317,1,317,1,317,1,317, + 1,318,1,318,1,318,1,318,1,318,1,318,1,319,1,319,1,319,1,319,1,319, + 1,319,1,320,1,320,1,320,1,320,1,321,1,321,1,321,1,321,1,322,1,322, + 1,322,3,322,2929,8,322,1,323,1,323,1,324,1,324,1,324,1,324,1,325, + 1,325,5,325,2939,8,325,10,325,12,325,2942,9,325,1,326,1,326,5,326, + 2946,8,326,10,326,12,326,2949,9,326,1,327,1,327,3,327,2953,8,327, + 1,328,1,328,3,328,2957,8,328,1,329,1,329,1,329,3,329,2962,8,329, + 1,330,1,330,1,330,1,331,1,331,1,331,1,332,1,332,3,332,2972,8,332, + 1,333,1,333,5,333,2976,8,333,10,333,12,333,2979,9,333,1,333,1,333, + 5,333,2983,8,333,10,333,12,333,2986,9,333,1,333,1,333,5,333,2990, + 8,333,10,333,12,333,2993,9,333,1,333,1,333,1,334,1,334,5,334,2999, + 8,334,10,334,12,334,3002,9,334,1,334,1,334,5,334,3006,8,334,10,334, + 12,334,3009,9,334,1,334,1,334,5,334,3013,8,334,10,334,12,334,3016, + 9,334,1,334,1,334,1,335,1,335,5,335,3022,8,335,10,335,12,335,3025, + 9,335,1,335,1,335,5,335,3029,8,335,10,335,12,335,3032,9,335,1,335, + 1,335,5,335,3036,8,335,10,335,12,335,3039,9,335,1,335,1,335,1,336, + 1,336,1,337,1,337,5,337,3047,8,337,10,337,12,337,3050,9,337,1,338, + 1,338,3,338,3054,8,338,1,339,1,339,1,339,1,340,1,340,3,340,3061, + 8,340,1,341,1,341,1,341,1,341,1,341,1,341,1,342,1,342,1,342,1,342, + 1,342,1,342,1,342,1,342,1,342,1,342,1,342,1,342,1,342,1,342,1,342, + 1,342,1,342,1,342,1,342,1,342,1,342,3,342,3090,8,342,1,343,1,343, + 1,343,1,343,1,343,1,344,1,344,1,345,1,345,1,346,1,346,4,2831,2855, + 2870,2947,0,347,2,1,4,2,6,3,8,4,10,5,12,6,14,7,16,8,18,9,20,10,22, + 11,24,12,26,13,28,14,30,15,32,16,34,17,36,18,38,19,40,20,42,21,44, + 22,46,23,48,24,50,25,52,26,54,27,56,28,58,29,60,30,62,31,64,32,66, + 33,68,34,70,35,72,36,74,37,76,38,78,39,80,40,82,41,84,42,86,43,88, + 44,90,45,92,46,94,47,96,48,98,49,100,50,102,51,104,52,106,53,108, + 54,110,55,112,56,114,57,116,58,118,59,120,60,122,61,124,62,126,63, + 128,64,130,65,132,66,134,67,136,68,138,69,140,70,142,71,144,72,146, + 73,148,74,150,75,152,76,154,77,156,78,158,79,160,80,162,81,164,82, + 166,83,168,84,170,85,172,86,174,87,176,88,178,89,180,90,182,91,184, + 92,186,93,188,94,190,95,192,96,194,97,196,98,198,99,200,100,202, + 101,204,102,206,103,208,104,210,105,212,106,214,107,216,108,218, + 109,220,110,222,111,224,112,226,113,228,114,230,115,232,116,234, + 117,236,118,238,119,240,120,242,121,244,122,246,123,248,124,250, + 125,252,126,254,127,256,128,258,129,260,130,262,131,264,132,266, + 133,268,134,270,135,272,136,274,137,276,138,278,139,280,140,282, + 141,284,142,286,143,288,144,290,145,292,146,294,147,296,148,298, + 149,300,150,302,151,304,152,306,153,308,154,310,155,312,156,314, + 157,316,158,318,159,320,160,322,161,324,162,326,163,328,164,330, + 165,332,166,334,167,336,168,338,169,340,170,342,171,344,172,346, + 173,348,174,350,175,352,176,354,177,356,178,358,179,360,180,362, + 181,364,182,366,183,368,184,370,185,372,186,374,187,376,188,378, + 189,380,190,382,191,384,192,386,193,388,194,390,195,392,196,394, + 197,396,198,398,199,400,200,402,201,404,202,406,203,408,204,410, + 205,412,206,414,207,416,208,418,209,420,210,422,211,424,212,426, + 213,428,214,430,215,432,216,434,217,436,218,438,219,440,220,442, + 221,444,222,446,223,448,224,450,225,452,226,454,227,456,228,458, + 229,460,230,462,231,464,232,466,233,468,234,470,235,472,236,474, + 237,476,238,478,239,480,240,482,241,484,242,486,243,488,244,490, + 245,492,246,494,247,496,248,498,249,500,250,502,251,504,252,506, + 253,508,254,510,255,512,256,514,257,516,258,518,259,520,260,522, + 261,524,262,526,263,528,264,530,265,532,266,534,267,536,268,538, + 269,540,270,542,271,544,272,546,273,548,274,550,275,552,276,554, + 277,556,278,558,279,560,280,562,281,564,282,566,283,568,284,570, + 285,572,286,574,287,576,288,578,289,580,290,582,291,584,292,586, + 293,588,294,590,295,592,296,594,311,596,297,598,298,600,299,602, + 300,604,301,606,302,608,303,610,304,612,305,614,306,616,307,618, + 308,620,309,622,0,624,0,626,0,628,0,630,0,632,0,634,0,636,0,638, + 0,640,0,642,310,644,0,646,0,648,0,650,0,652,0,654,0,656,0,658,0, + 660,0,662,0,664,0,666,0,668,0,670,0,672,0,674,0,676,0,678,0,680, + 0,682,0,684,0,686,0,688,0,690,0,692,0,694,0,2,0,1,42,2,0,65,65,97, 97,2,0,66,66,98,98,2,0,83,83,115,115,2,0,79,79,111,111,2,0,76,76, 108,108,2,0,85,85,117,117,2,0,84,84,116,116,2,0,69,69,101,101,2, 0,67,67,99,99,2,0,73,73,105,105,2,0,78,78,110,110,2,0,68,68,100, @@ -331,847 +332,849 @@ def serializedATN(): 90,122,122,2,0,86,86,118,118,2,0,71,71,103,103,2,0,87,87,119,119, 2,0,75,75,107,107,2,0,77,77,109,109,2,0,80,80,112,112,2,0,70,70, 102,102,2,0,88,88,120,120,2,0,74,74,106,106,2,0,81,81,113,113,1, - 0,39,39,2,0,43,43,45,45,4,0,36,36,65,90,95,95,97,122,5,0,36,36,48, - 57,65,90,95,95,97,122,1,0,34,34,2,0,10,10,13,13,1,0,48,57,2,0,65, - 90,97,122,3,0,9,10,13,13,32,32,3,0,32,33,35,91,93,65535,2,0,32,91, - 93,65535,4,0,43,43,47,57,65,90,97,122,3,0,32,38,40,91,93,65535,17, - 0,34,34,39,39,47,48,63,63,65,66,70,70,78,78,82,82,84,84,86,86,92, - 92,97,98,102,102,110,110,114,114,116,116,118,118,3,0,48,57,65,70, - 97,102,3,0,9,9,11,12,32,32,3119,0,2,1,0,0,0,0,4,1,0,0,0,0,6,1,0, - 0,0,0,8,1,0,0,0,0,10,1,0,0,0,0,12,1,0,0,0,0,14,1,0,0,0,0,16,1,0, - 0,0,0,18,1,0,0,0,0,20,1,0,0,0,0,22,1,0,0,0,0,24,1,0,0,0,0,26,1,0, - 0,0,0,28,1,0,0,0,0,30,1,0,0,0,0,32,1,0,0,0,0,34,1,0,0,0,0,36,1,0, - 0,0,0,38,1,0,0,0,0,40,1,0,0,0,0,42,1,0,0,0,0,44,1,0,0,0,0,46,1,0, - 0,0,0,48,1,0,0,0,0,50,1,0,0,0,0,52,1,0,0,0,0,54,1,0,0,0,0,56,1,0, - 0,0,0,58,1,0,0,0,0,60,1,0,0,0,0,62,1,0,0,0,0,64,1,0,0,0,0,66,1,0, - 0,0,0,68,1,0,0,0,0,70,1,0,0,0,0,72,1,0,0,0,0,74,1,0,0,0,0,76,1,0, - 0,0,0,78,1,0,0,0,0,80,1,0,0,0,0,82,1,0,0,0,0,84,1,0,0,0,0,86,1,0, - 0,0,0,88,1,0,0,0,0,90,1,0,0,0,0,92,1,0,0,0,0,94,1,0,0,0,0,96,1,0, - 0,0,0,98,1,0,0,0,0,100,1,0,0,0,0,102,1,0,0,0,0,104,1,0,0,0,0,106, - 1,0,0,0,0,108,1,0,0,0,0,110,1,0,0,0,0,112,1,0,0,0,0,114,1,0,0,0, - 0,116,1,0,0,0,0,118,1,0,0,0,0,120,1,0,0,0,0,122,1,0,0,0,0,124,1, - 0,0,0,0,126,1,0,0,0,0,128,1,0,0,0,0,130,1,0,0,0,0,132,1,0,0,0,0, - 134,1,0,0,0,0,136,1,0,0,0,0,138,1,0,0,0,0,140,1,0,0,0,0,142,1,0, - 0,0,0,144,1,0,0,0,0,146,1,0,0,0,0,148,1,0,0,0,0,150,1,0,0,0,0,152, - 1,0,0,0,0,154,1,0,0,0,0,156,1,0,0,0,0,158,1,0,0,0,0,160,1,0,0,0, - 0,162,1,0,0,0,0,164,1,0,0,0,0,166,1,0,0,0,0,168,1,0,0,0,0,170,1, - 0,0,0,0,172,1,0,0,0,0,174,1,0,0,0,0,176,1,0,0,0,0,178,1,0,0,0,0, - 180,1,0,0,0,0,182,1,0,0,0,0,184,1,0,0,0,0,186,1,0,0,0,0,188,1,0, - 0,0,0,190,1,0,0,0,0,192,1,0,0,0,0,194,1,0,0,0,0,196,1,0,0,0,0,198, - 1,0,0,0,0,200,1,0,0,0,0,202,1,0,0,0,0,204,1,0,0,0,0,206,1,0,0,0, - 0,208,1,0,0,0,0,210,1,0,0,0,0,212,1,0,0,0,0,214,1,0,0,0,0,216,1, - 0,0,0,0,218,1,0,0,0,0,220,1,0,0,0,0,222,1,0,0,0,0,224,1,0,0,0,0, - 226,1,0,0,0,0,228,1,0,0,0,0,230,1,0,0,0,0,232,1,0,0,0,0,234,1,0, - 0,0,0,236,1,0,0,0,0,238,1,0,0,0,0,240,1,0,0,0,0,242,1,0,0,0,0,244, - 1,0,0,0,0,246,1,0,0,0,0,248,1,0,0,0,0,250,1,0,0,0,0,252,1,0,0,0, - 0,254,1,0,0,0,0,256,1,0,0,0,0,258,1,0,0,0,0,260,1,0,0,0,0,262,1, - 0,0,0,0,264,1,0,0,0,0,266,1,0,0,0,0,268,1,0,0,0,0,270,1,0,0,0,0, - 272,1,0,0,0,0,274,1,0,0,0,0,276,1,0,0,0,0,278,1,0,0,0,0,280,1,0, - 0,0,0,282,1,0,0,0,0,284,1,0,0,0,0,286,1,0,0,0,0,288,1,0,0,0,0,290, - 1,0,0,0,0,292,1,0,0,0,0,294,1,0,0,0,0,296,1,0,0,0,0,298,1,0,0,0, - 0,300,1,0,0,0,0,302,1,0,0,0,0,304,1,0,0,0,0,306,1,0,0,0,0,308,1, - 0,0,0,0,310,1,0,0,0,0,312,1,0,0,0,0,314,1,0,0,0,0,316,1,0,0,0,0, - 318,1,0,0,0,0,320,1,0,0,0,0,322,1,0,0,0,0,324,1,0,0,0,0,326,1,0, - 0,0,0,328,1,0,0,0,0,330,1,0,0,0,0,332,1,0,0,0,0,334,1,0,0,0,0,336, - 1,0,0,0,0,338,1,0,0,0,0,340,1,0,0,0,0,342,1,0,0,0,0,344,1,0,0,0, - 0,346,1,0,0,0,0,348,1,0,0,0,0,350,1,0,0,0,0,352,1,0,0,0,0,354,1, - 0,0,0,0,356,1,0,0,0,0,358,1,0,0,0,0,360,1,0,0,0,0,362,1,0,0,0,0, - 364,1,0,0,0,0,366,1,0,0,0,0,368,1,0,0,0,0,370,1,0,0,0,0,372,1,0, - 0,0,0,374,1,0,0,0,0,376,1,0,0,0,0,378,1,0,0,0,0,380,1,0,0,0,0,382, - 1,0,0,0,0,384,1,0,0,0,0,386,1,0,0,0,0,388,1,0,0,0,0,390,1,0,0,0, - 0,392,1,0,0,0,0,394,1,0,0,0,0,396,1,0,0,0,0,398,1,0,0,0,0,400,1, - 0,0,0,0,402,1,0,0,0,0,404,1,0,0,0,0,406,1,0,0,0,0,408,1,0,0,0,0, - 410,1,0,0,0,0,412,1,0,0,0,0,414,1,0,0,0,0,416,1,0,0,0,0,418,1,0, - 0,0,0,420,1,0,0,0,0,422,1,0,0,0,0,424,1,0,0,0,0,426,1,0,0,0,0,428, - 1,0,0,0,0,430,1,0,0,0,0,432,1,0,0,0,0,434,1,0,0,0,0,436,1,0,0,0, - 0,438,1,0,0,0,0,440,1,0,0,0,0,442,1,0,0,0,0,444,1,0,0,0,0,446,1, - 0,0,0,0,448,1,0,0,0,0,450,1,0,0,0,0,452,1,0,0,0,0,454,1,0,0,0,0, - 456,1,0,0,0,0,458,1,0,0,0,0,460,1,0,0,0,0,462,1,0,0,0,0,464,1,0, - 0,0,0,466,1,0,0,0,0,468,1,0,0,0,0,470,1,0,0,0,0,472,1,0,0,0,0,474, - 1,0,0,0,0,476,1,0,0,0,0,478,1,0,0,0,0,480,1,0,0,0,0,482,1,0,0,0, - 0,484,1,0,0,0,0,486,1,0,0,0,0,488,1,0,0,0,0,490,1,0,0,0,0,492,1, - 0,0,0,0,494,1,0,0,0,0,496,1,0,0,0,0,498,1,0,0,0,0,500,1,0,0,0,0, - 502,1,0,0,0,0,504,1,0,0,0,0,506,1,0,0,0,0,508,1,0,0,0,0,510,1,0, - 0,0,0,512,1,0,0,0,0,514,1,0,0,0,0,516,1,0,0,0,0,518,1,0,0,0,0,520, - 1,0,0,0,0,522,1,0,0,0,0,524,1,0,0,0,0,526,1,0,0,0,0,528,1,0,0,0, - 0,530,1,0,0,0,0,532,1,0,0,0,0,534,1,0,0,0,0,536,1,0,0,0,0,538,1, - 0,0,0,0,540,1,0,0,0,0,542,1,0,0,0,0,544,1,0,0,0,0,546,1,0,0,0,0, - 548,1,0,0,0,0,550,1,0,0,0,0,552,1,0,0,0,0,554,1,0,0,0,0,556,1,0, - 0,0,0,558,1,0,0,0,0,560,1,0,0,0,0,562,1,0,0,0,0,564,1,0,0,0,0,566, - 1,0,0,0,0,568,1,0,0,0,0,570,1,0,0,0,0,572,1,0,0,0,0,574,1,0,0,0, - 0,576,1,0,0,0,0,578,1,0,0,0,0,580,1,0,0,0,0,582,1,0,0,0,0,584,1, - 0,0,0,0,586,1,0,0,0,0,588,1,0,0,0,0,590,1,0,0,0,0,592,1,0,0,0,0, - 594,1,0,0,0,0,596,1,0,0,0,0,598,1,0,0,0,0,600,1,0,0,0,0,602,1,0, - 0,0,0,604,1,0,0,0,0,606,1,0,0,0,0,608,1,0,0,0,0,610,1,0,0,0,0,612, - 1,0,0,0,0,614,1,0,0,0,0,616,1,0,0,0,0,618,1,0,0,0,1,628,1,0,0,0, - 1,630,1,0,0,0,1,632,1,0,0,0,1,634,1,0,0,0,1,636,1,0,0,0,1,638,1, - 0,0,0,1,640,1,0,0,0,1,642,1,0,0,0,2,694,1,0,0,0,4,703,1,0,0,0,6, - 710,1,0,0,0,8,714,1,0,0,0,10,718,1,0,0,0,12,727,1,0,0,0,14,733,1, - 0,0,0,16,737,1,0,0,0,18,741,1,0,0,0,20,745,1,0,0,0,22,748,1,0,0, - 0,24,752,1,0,0,0,26,762,1,0,0,0,28,765,1,0,0,0,30,779,1,0,0,0,32, - 783,1,0,0,0,34,789,1,0,0,0,36,797,1,0,0,0,38,801,1,0,0,0,40,812, - 1,0,0,0,42,815,1,0,0,0,44,823,1,0,0,0,46,832,1,0,0,0,48,837,1,0, - 0,0,50,842,1,0,0,0,52,850,1,0,0,0,54,855,1,0,0,0,56,865,1,0,0,0, - 58,882,1,0,0,0,60,894,1,0,0,0,62,900,1,0,0,0,64,906,1,0,0,0,66,915, - 1,0,0,0,68,923,1,0,0,0,70,933,1,0,0,0,72,940,1,0,0,0,74,947,1,0, - 0,0,76,955,1,0,0,0,78,966,1,0,0,0,80,977,1,0,0,0,82,989,1,0,0,0, - 84,998,1,0,0,0,86,1006,1,0,0,0,88,1020,1,0,0,0,90,1026,1,0,0,0,92, - 1033,1,0,0,0,94,1039,1,0,0,0,96,1047,1,0,0,0,98,1060,1,0,0,0,100, - 1073,1,0,0,0,102,1091,1,0,0,0,104,1104,1,0,0,0,106,1111,1,0,0,0, - 108,1116,1,0,0,0,110,1127,1,0,0,0,112,1131,1,0,0,0,114,1139,1,0, - 0,0,116,1147,1,0,0,0,118,1155,1,0,0,0,120,1166,1,0,0,0,122,1175, - 1,0,0,0,124,1182,1,0,0,0,126,1187,1,0,0,0,128,1196,1,0,0,0,130,1207, - 1,0,0,0,132,1219,1,0,0,0,134,1230,1,0,0,0,136,1239,1,0,0,0,138,1246, - 1,0,0,0,140,1253,1,0,0,0,142,1258,1,0,0,0,144,1263,1,0,0,0,146,1267, - 1,0,0,0,148,1276,1,0,0,0,150,1283,1,0,0,0,152,1289,1,0,0,0,154,1296, - 1,0,0,0,156,1306,1,0,0,0,158,1314,1,0,0,0,160,1323,1,0,0,0,162,1328, - 1,0,0,0,164,1336,1,0,0,0,166,1343,1,0,0,0,168,1351,1,0,0,0,170,1360, - 1,0,0,0,172,1368,1,0,0,0,174,1377,1,0,0,0,176,1387,1,0,0,0,178,1393, - 1,0,0,0,180,1399,1,0,0,0,182,1405,1,0,0,0,184,1411,1,0,0,0,186,1415, - 1,0,0,0,188,1423,1,0,0,0,190,1429,1,0,0,0,192,1434,1,0,0,0,194,1439, - 1,0,0,0,196,1443,1,0,0,0,198,1450,1,0,0,0,200,1453,1,0,0,0,202,1458, - 1,0,0,0,204,1464,1,0,0,0,206,1470,1,0,0,0,208,1477,1,0,0,0,210,1486, - 1,0,0,0,212,1496,1,0,0,0,214,1499,1,0,0,0,216,1509,1,0,0,0,218,1519, - 1,0,0,0,220,1525,1,0,0,0,222,1531,1,0,0,0,224,1543,1,0,0,0,226,1550, - 1,0,0,0,228,1554,1,0,0,0,230,1562,1,0,0,0,232,1572,1,0,0,0,234,1581, - 1,0,0,0,236,1586,1,0,0,0,238,1589,1,0,0,0,240,1599,1,0,0,0,242,1604, - 1,0,0,0,244,1608,1,0,0,0,246,1617,1,0,0,0,248,1622,1,0,0,0,250,1630, - 1,0,0,0,252,1635,1,0,0,0,254,1641,1,0,0,0,256,1646,1,0,0,0,258,1652, - 1,0,0,0,260,1658,1,0,0,0,262,1664,1,0,0,0,264,1668,1,0,0,0,266,1672, - 1,0,0,0,268,1679,1,0,0,0,270,1685,1,0,0,0,272,1694,1,0,0,0,274,1702, - 1,0,0,0,276,1708,1,0,0,0,278,1713,1,0,0,0,280,1716,1,0,0,0,282,1720, - 1,0,0,0,284,1725,1,0,0,0,286,1731,1,0,0,0,288,1738,1,0,0,0,290,1746, - 1,0,0,0,292,1759,1,0,0,0,294,1762,1,0,0,0,296,1765,1,0,0,0,298,1770, - 1,0,0,0,300,1775,1,0,0,0,302,1782,1,0,0,0,304,1785,1,0,0,0,306,1791, - 1,0,0,0,308,1797,1,0,0,0,310,1804,1,0,0,0,312,1813,1,0,0,0,314,1821, - 1,0,0,0,316,1825,1,0,0,0,318,1833,1,0,0,0,320,1841,1,0,0,0,322,1850, - 1,0,0,0,324,1860,1,0,0,0,326,1868,1,0,0,0,328,1877,1,0,0,0,330,1885, - 1,0,0,0,332,1891,1,0,0,0,334,1902,1,0,0,0,336,1912,1,0,0,0,338,1919, - 1,0,0,0,340,1924,1,0,0,0,342,1929,1,0,0,0,344,1940,1,0,0,0,346,1949, - 1,0,0,0,348,1957,1,0,0,0,350,1966,1,0,0,0,352,1973,1,0,0,0,354,1979, - 1,0,0,0,356,1988,1,0,0,0,358,1993,1,0,0,0,360,2000,1,0,0,0,362,2007, - 1,0,0,0,364,2015,1,0,0,0,366,2022,1,0,0,0,368,2030,1,0,0,0,370,2043, - 1,0,0,0,372,2047,1,0,0,0,374,2056,1,0,0,0,376,2061,1,0,0,0,378,2070, - 1,0,0,0,380,2075,1,0,0,0,382,2081,1,0,0,0,384,2085,1,0,0,0,386,2093, - 1,0,0,0,388,2102,1,0,0,0,390,2111,1,0,0,0,392,2121,1,0,0,0,394,2125, - 1,0,0,0,396,2137,1,0,0,0,398,2143,1,0,0,0,400,2153,1,0,0,0,402,2158, - 1,0,0,0,404,2163,1,0,0,0,406,2173,1,0,0,0,408,2176,1,0,0,0,410,2188, - 1,0,0,0,412,2198,1,0,0,0,414,2210,1,0,0,0,416,2215,1,0,0,0,418,2220, - 1,0,0,0,420,2226,1,0,0,0,422,2233,1,0,0,0,424,2241,1,0,0,0,426,2248, - 1,0,0,0,428,2254,1,0,0,0,430,2261,1,0,0,0,432,2267,1,0,0,0,434,2272, - 1,0,0,0,436,2278,1,0,0,0,438,2284,1,0,0,0,440,2291,1,0,0,0,442,2299, - 1,0,0,0,444,2307,1,0,0,0,446,2312,1,0,0,0,448,2317,1,0,0,0,450,2326, - 1,0,0,0,452,2332,1,0,0,0,454,2337,1,0,0,0,456,2342,1,0,0,0,458,2348, - 1,0,0,0,460,2353,1,0,0,0,462,2357,1,0,0,0,464,2362,1,0,0,0,466,2367, - 1,0,0,0,468,2377,1,0,0,0,470,2386,1,0,0,0,472,2404,1,0,0,0,474,2412, - 1,0,0,0,476,2418,1,0,0,0,478,2426,1,0,0,0,480,2432,1,0,0,0,482,2439, - 1,0,0,0,484,2446,1,0,0,0,486,2452,1,0,0,0,488,2456,1,0,0,0,490,2465, - 1,0,0,0,492,2468,1,0,0,0,494,2478,1,0,0,0,496,2487,1,0,0,0,498,2491, - 1,0,0,0,500,2495,1,0,0,0,502,2503,1,0,0,0,504,2509,1,0,0,0,506,2518, - 1,0,0,0,508,2523,1,0,0,0,510,2532,1,0,0,0,512,2537,1,0,0,0,514,2546, - 1,0,0,0,516,2551,1,0,0,0,518,2558,1,0,0,0,520,2563,1,0,0,0,522,2571, - 1,0,0,0,524,2578,1,0,0,0,526,2585,1,0,0,0,528,2590,1,0,0,0,530,2595, - 1,0,0,0,532,2602,1,0,0,0,534,2607,1,0,0,0,536,2612,1,0,0,0,538,2616, - 1,0,0,0,540,2618,1,0,0,0,542,2620,1,0,0,0,544,2622,1,0,0,0,546,2624, - 1,0,0,0,548,2626,1,0,0,0,550,2628,1,0,0,0,552,2630,1,0,0,0,554,2632, - 1,0,0,0,556,2634,1,0,0,0,558,2636,1,0,0,0,560,2638,1,0,0,0,562,2640, - 1,0,0,0,564,2643,1,0,0,0,566,2646,1,0,0,0,568,2652,1,0,0,0,570,2654, - 1,0,0,0,572,2657,1,0,0,0,574,2659,1,0,0,0,576,2661,1,0,0,0,578,2664, - 1,0,0,0,580,2667,1,0,0,0,582,2669,1,0,0,0,584,2671,1,0,0,0,586,2673, - 1,0,0,0,588,2675,1,0,0,0,590,2677,1,0,0,0,592,2679,1,0,0,0,594,2684, - 1,0,0,0,596,2686,1,0,0,0,598,2688,1,0,0,0,600,2690,1,0,0,0,602,2692, - 1,0,0,0,604,2703,1,0,0,0,606,2770,1,0,0,0,608,2772,1,0,0,0,610,2779, - 1,0,0,0,612,2791,1,0,0,0,614,2797,1,0,0,0,616,2814,1,0,0,0,618,2828, - 1,0,0,0,620,2830,1,0,0,0,622,2832,1,0,0,0,624,2834,1,0,0,0,626,2836, - 1,0,0,0,628,2838,1,0,0,0,630,2853,1,0,0,0,632,2867,1,0,0,0,634,2888, - 1,0,0,0,636,2894,1,0,0,0,638,2900,1,0,0,0,640,2906,1,0,0,0,642,2910, - 1,0,0,0,644,2917,1,0,0,0,646,2919,1,0,0,0,648,2921,1,0,0,0,650,2929, - 1,0,0,0,652,2936,1,0,0,0,654,2941,1,0,0,0,656,2945,1,0,0,0,658,2950, - 1,0,0,0,660,2952,1,0,0,0,662,2955,1,0,0,0,664,2960,1,0,0,0,666,2962, - 1,0,0,0,668,2985,1,0,0,0,670,3008,1,0,0,0,672,3031,1,0,0,0,674,3037, - 1,0,0,0,676,3042,1,0,0,0,678,3044,1,0,0,0,680,3049,1,0,0,0,682,3051, - 1,0,0,0,684,3078,1,0,0,0,686,3080,1,0,0,0,688,3085,1,0,0,0,690,3087, - 1,0,0,0,692,3089,1,0,0,0,694,695,7,0,0,0,695,696,7,1,0,0,696,697, - 7,2,0,0,697,698,7,3,0,0,698,699,7,4,0,0,699,700,7,5,0,0,700,701, - 7,6,0,0,701,702,7,7,0,0,702,3,1,0,0,0,703,704,7,0,0,0,704,705,7, - 8,0,0,705,706,7,6,0,0,706,707,7,9,0,0,707,708,7,3,0,0,708,709,7, - 10,0,0,709,5,1,0,0,0,710,711,7,0,0,0,711,712,7,11,0,0,712,713,7, - 11,0,0,713,7,1,0,0,0,714,715,7,0,0,0,715,716,7,4,0,0,716,717,7,4, - 0,0,717,9,1,0,0,0,718,719,7,0,0,0,719,720,7,4,0,0,720,721,7,4,0, - 0,721,722,7,3,0,0,722,723,7,8,0,0,723,724,7,0,0,0,724,725,7,6,0, - 0,725,726,7,7,0,0,726,11,1,0,0,0,727,728,7,0,0,0,728,729,7,4,0,0, - 729,730,7,6,0,0,730,731,7,7,0,0,731,732,7,12,0,0,732,13,1,0,0,0, - 733,734,7,0,0,0,734,735,7,10,0,0,735,736,7,11,0,0,736,15,1,0,0,0, - 737,738,7,0,0,0,738,739,7,10,0,0,739,740,7,13,0,0,740,17,1,0,0,0, - 741,742,7,0,0,0,742,743,7,12,0,0,743,744,7,7,0,0,744,19,1,0,0,0, - 745,746,7,0,0,0,746,747,7,2,0,0,747,21,1,0,0,0,748,749,7,0,0,0,749, - 750,7,2,0,0,750,751,7,8,0,0,751,23,1,0,0,0,752,753,7,0,0,0,753,754, - 7,2,0,0,754,755,7,2,0,0,755,756,7,7,0,0,756,757,7,12,0,0,757,758, - 7,6,0,0,758,759,7,9,0,0,759,760,7,3,0,0,760,761,7,10,0,0,761,25, - 1,0,0,0,762,763,7,0,0,0,763,764,7,6,0,0,764,27,1,0,0,0,765,766,7, - 0,0,0,766,767,7,5,0,0,767,768,7,6,0,0,768,769,7,14,0,0,769,770,7, - 3,0,0,770,771,7,12,0,0,771,772,7,9,0,0,772,773,7,15,0,0,773,774, - 7,0,0,0,774,775,7,6,0,0,775,776,7,9,0,0,776,777,7,3,0,0,777,778, - 7,10,0,0,778,29,1,0,0,0,779,780,7,0,0,0,780,781,7,16,0,0,781,782, - 7,17,0,0,782,31,1,0,0,0,783,784,7,1,0,0,784,785,7,7,0,0,785,786, - 7,17,0,0,786,787,7,9,0,0,787,788,7,10,0,0,788,33,1,0,0,0,789,790, - 7,1,0,0,790,791,7,7,0,0,791,792,7,6,0,0,792,793,7,18,0,0,793,794, - 7,7,0,0,794,795,7,7,0,0,795,796,7,10,0,0,796,35,1,0,0,0,797,798, - 7,1,0,0,798,799,7,9,0,0,799,800,7,6,0,0,800,37,1,0,0,0,801,802,7, - 1,0,0,802,803,7,9,0,0,803,804,7,6,0,0,804,805,5,95,0,0,805,806,7, - 4,0,0,806,807,7,7,0,0,807,808,7,10,0,0,808,809,7,17,0,0,809,810, - 7,6,0,0,810,811,7,14,0,0,811,39,1,0,0,0,812,813,7,1,0,0,813,814, - 7,13,0,0,814,41,1,0,0,0,815,816,7,8,0,0,816,817,7,0,0,0,817,818, - 7,2,0,0,818,819,7,8,0,0,819,820,7,0,0,0,820,821,7,11,0,0,821,822, - 7,7,0,0,822,43,1,0,0,0,823,824,7,8,0,0,824,825,7,0,0,0,825,826,7, - 2,0,0,826,827,7,8,0,0,827,828,7,0,0,0,828,829,7,11,0,0,829,830,7, - 7,0,0,830,831,7,11,0,0,831,45,1,0,0,0,832,833,7,8,0,0,833,834,7, - 0,0,0,834,835,7,2,0,0,835,836,7,7,0,0,836,47,1,0,0,0,837,838,7,8, - 0,0,838,839,7,0,0,0,839,840,7,2,0,0,840,841,7,6,0,0,841,49,1,0,0, - 0,842,843,7,8,0,0,843,844,7,0,0,0,844,845,7,6,0,0,845,846,7,0,0, - 0,846,847,7,4,0,0,847,848,7,3,0,0,848,849,7,17,0,0,849,51,1,0,0, - 0,850,851,7,8,0,0,851,852,7,14,0,0,852,853,7,0,0,0,853,854,7,12, - 0,0,854,53,1,0,0,0,855,856,7,8,0,0,856,857,7,14,0,0,857,858,7,0, - 0,0,858,859,7,12,0,0,859,860,7,0,0,0,860,861,7,8,0,0,861,862,7,6, - 0,0,862,863,7,7,0,0,863,864,7,12,0,0,864,55,1,0,0,0,865,866,7,8, - 0,0,866,867,7,14,0,0,867,868,7,0,0,0,868,869,7,12,0,0,869,870,7, - 0,0,0,870,871,7,8,0,0,871,872,7,6,0,0,872,873,7,7,0,0,873,874,7, - 12,0,0,874,875,5,95,0,0,875,876,7,4,0,0,876,877,7,7,0,0,877,878, - 7,10,0,0,878,879,7,17,0,0,879,880,7,6,0,0,880,881,7,14,0,0,881,57, - 1,0,0,0,882,883,7,8,0,0,883,884,7,14,0,0,884,885,7,0,0,0,885,886, - 7,12,0,0,886,887,5,95,0,0,887,888,7,4,0,0,888,889,7,7,0,0,889,890, - 7,10,0,0,890,891,7,17,0,0,891,892,7,6,0,0,892,893,7,14,0,0,893,59, - 1,0,0,0,894,895,7,8,0,0,895,896,7,14,0,0,896,897,7,7,0,0,897,898, - 7,8,0,0,898,899,7,19,0,0,899,61,1,0,0,0,900,901,7,8,0,0,901,902, - 7,4,0,0,902,903,7,3,0,0,903,904,7,2,0,0,904,905,7,7,0,0,905,63,1, - 0,0,0,906,907,7,8,0,0,907,908,7,3,0,0,908,909,7,0,0,0,909,910,7, - 4,0,0,910,911,7,7,0,0,911,912,7,2,0,0,912,913,7,8,0,0,913,914,7, - 7,0,0,914,65,1,0,0,0,915,916,7,8,0,0,916,917,7,3,0,0,917,918,7,4, - 0,0,918,919,7,4,0,0,919,920,7,0,0,0,920,921,7,6,0,0,921,922,7,7, - 0,0,922,67,1,0,0,0,923,924,7,8,0,0,924,925,7,3,0,0,925,926,7,4,0, - 0,926,927,7,4,0,0,927,928,7,0,0,0,928,929,7,6,0,0,929,930,7,9,0, - 0,930,931,7,3,0,0,931,932,7,10,0,0,932,69,1,0,0,0,933,934,7,8,0, - 0,934,935,7,3,0,0,935,936,7,4,0,0,936,937,7,5,0,0,937,938,7,20,0, - 0,938,939,7,10,0,0,939,71,1,0,0,0,940,941,7,8,0,0,941,942,7,3,0, - 0,942,943,7,20,0,0,943,944,7,20,0,0,944,945,7,9,0,0,945,946,7,6, - 0,0,946,73,1,0,0,0,947,948,7,8,0,0,948,949,7,3,0,0,949,950,7,10, - 0,0,950,951,7,10,0,0,951,952,7,7,0,0,952,953,7,8,0,0,953,954,7,6, - 0,0,954,75,1,0,0,0,955,956,7,8,0,0,956,957,7,3,0,0,957,958,7,10, - 0,0,958,959,7,10,0,0,959,960,7,7,0,0,960,961,7,8,0,0,961,962,7,6, - 0,0,962,963,7,9,0,0,963,964,7,3,0,0,964,965,7,10,0,0,965,77,1,0, - 0,0,966,967,7,8,0,0,967,968,7,3,0,0,968,969,7,10,0,0,969,970,7,2, - 0,0,970,971,7,6,0,0,971,972,7,12,0,0,972,973,7,0,0,0,973,974,7,9, - 0,0,974,975,7,10,0,0,975,976,7,6,0,0,976,79,1,0,0,0,977,978,7,8, - 0,0,978,979,7,3,0,0,979,980,7,10,0,0,980,981,7,2,0,0,981,982,7,6, - 0,0,982,983,7,12,0,0,983,984,7,0,0,0,984,985,7,9,0,0,985,986,7,10, - 0,0,986,987,7,6,0,0,987,988,7,2,0,0,988,81,1,0,0,0,989,990,7,8,0, - 0,990,991,7,3,0,0,991,992,7,10,0,0,992,993,7,6,0,0,993,994,7,9,0, - 0,994,995,7,10,0,0,995,996,7,5,0,0,996,997,7,7,0,0,997,83,1,0,0, - 0,998,999,7,8,0,0,999,1000,7,3,0,0,1000,1001,7,10,0,0,1001,1002, - 7,16,0,0,1002,1003,7,7,0,0,1003,1004,7,12,0,0,1004,1005,7,6,0,0, - 1005,85,1,0,0,0,1006,1007,7,8,0,0,1007,1008,7,3,0,0,1008,1009,7, - 12,0,0,1009,1010,7,12,0,0,1010,1011,7,7,0,0,1011,1012,7,2,0,0,1012, - 1013,7,21,0,0,1013,1014,7,3,0,0,1014,1015,7,10,0,0,1015,1016,7,11, - 0,0,1016,1017,7,9,0,0,1017,1018,7,10,0,0,1018,1019,7,17,0,0,1019, - 87,1,0,0,0,1020,1021,7,8,0,0,1021,1022,7,3,0,0,1022,1023,7,5,0,0, - 1023,1024,7,10,0,0,1024,1025,7,6,0,0,1025,89,1,0,0,0,1026,1027,7, - 8,0,0,1027,1028,7,12,0,0,1028,1029,7,7,0,0,1029,1030,7,0,0,0,1030, - 1031,7,6,0,0,1031,1032,7,7,0,0,1032,91,1,0,0,0,1033,1034,7,8,0,0, - 1034,1035,7,12,0,0,1035,1036,7,3,0,0,1036,1037,7,2,0,0,1037,1038, - 7,2,0,0,1038,93,1,0,0,0,1039,1040,7,8,0,0,1040,1041,7,5,0,0,1041, - 1042,7,12,0,0,1042,1043,7,12,0,0,1043,1044,7,7,0,0,1044,1045,7,10, - 0,0,1045,1046,7,6,0,0,1046,95,1,0,0,0,1047,1048,7,8,0,0,1048,1049, - 7,5,0,0,1049,1050,7,12,0,0,1050,1051,7,12,0,0,1051,1052,7,7,0,0, - 1052,1053,7,10,0,0,1053,1054,7,6,0,0,1054,1055,5,95,0,0,1055,1056, - 7,11,0,0,1056,1057,7,0,0,0,1057,1058,7,6,0,0,1058,1059,7,7,0,0,1059, - 97,1,0,0,0,1060,1061,7,8,0,0,1061,1062,7,5,0,0,1062,1063,7,12,0, - 0,1063,1064,7,12,0,0,1064,1065,7,7,0,0,1065,1066,7,10,0,0,1066,1067, - 7,6,0,0,1067,1068,5,95,0,0,1068,1069,7,6,0,0,1069,1070,7,9,0,0,1070, - 1071,7,20,0,0,1071,1072,7,7,0,0,1072,99,1,0,0,0,1073,1074,7,8,0, - 0,1074,1075,7,5,0,0,1075,1076,7,12,0,0,1076,1077,7,12,0,0,1077,1078, - 7,7,0,0,1078,1079,7,10,0,0,1079,1080,7,6,0,0,1080,1081,5,95,0,0, - 1081,1082,7,6,0,0,1082,1083,7,9,0,0,1083,1084,7,20,0,0,1084,1085, - 7,7,0,0,1085,1086,7,2,0,0,1086,1087,7,6,0,0,1087,1088,7,0,0,0,1088, - 1089,7,20,0,0,1089,1090,7,21,0,0,1090,101,1,0,0,0,1091,1092,7,8, - 0,0,1092,1093,7,5,0,0,1093,1094,7,12,0,0,1094,1095,7,12,0,0,1095, - 1096,7,7,0,0,1096,1097,7,10,0,0,1097,1098,7,6,0,0,1098,1099,5,95, - 0,0,1099,1100,7,5,0,0,1100,1101,7,2,0,0,1101,1102,7,7,0,0,1102,1103, - 7,12,0,0,1103,103,1,0,0,0,1104,1105,7,8,0,0,1105,1106,7,5,0,0,1106, - 1107,7,12,0,0,1107,1108,7,2,0,0,1108,1109,7,3,0,0,1109,1110,7,12, - 0,0,1110,105,1,0,0,0,1111,1112,7,11,0,0,1112,1113,7,0,0,0,1113,1114, - 7,6,0,0,1114,1115,7,7,0,0,1115,107,1,0,0,0,1116,1117,7,11,0,0,1117, - 1118,7,7,0,0,1118,1119,7,0,0,0,1119,1120,7,4,0,0,1120,1121,7,4,0, - 0,1121,1122,7,3,0,0,1122,1123,7,8,0,0,1123,1124,7,0,0,0,1124,1125, - 7,6,0,0,1125,1126,7,7,0,0,1126,109,1,0,0,0,1127,1128,7,11,0,0,1128, - 1129,7,7,0,0,1129,1130,7,8,0,0,1130,111,1,0,0,0,1131,1132,7,11,0, - 0,1132,1133,7,7,0,0,1133,1134,7,8,0,0,1134,1135,7,9,0,0,1135,1136, - 7,20,0,0,1136,1137,7,0,0,0,1137,1138,7,4,0,0,1138,113,1,0,0,0,1139, - 1140,7,11,0,0,1140,1141,7,7,0,0,1141,1142,7,8,0,0,1142,1143,7,4, - 0,0,1143,1144,7,0,0,0,1144,1145,7,12,0,0,1145,1146,7,7,0,0,1146, - 115,1,0,0,0,1147,1148,7,11,0,0,1148,1149,7,7,0,0,1149,1150,7,22, - 0,0,1150,1151,7,0,0,0,1151,1152,7,5,0,0,1152,1153,7,4,0,0,1153,1154, - 7,6,0,0,1154,117,1,0,0,0,1155,1156,7,11,0,0,1156,1157,7,7,0,0,1157, - 1158,7,22,0,0,1158,1159,7,7,0,0,1159,1160,7,12,0,0,1160,1161,7,12, - 0,0,1161,1162,7,0,0,0,1162,1163,7,1,0,0,1163,1164,7,4,0,0,1164,1165, - 7,7,0,0,1165,119,1,0,0,0,1166,1167,7,11,0,0,1167,1168,7,7,0,0,1168, - 1169,7,22,0,0,1169,1170,7,7,0,0,1170,1171,7,12,0,0,1171,1172,7,12, - 0,0,1172,1173,7,7,0,0,1173,1174,7,11,0,0,1174,121,1,0,0,0,1175,1176, - 7,11,0,0,1176,1177,7,7,0,0,1177,1178,7,4,0,0,1178,1179,7,7,0,0,1179, - 1180,7,6,0,0,1180,1181,7,7,0,0,1181,123,1,0,0,0,1182,1183,7,11,0, - 0,1183,1184,7,7,0,0,1184,1185,7,2,0,0,1185,1186,7,8,0,0,1186,125, - 1,0,0,0,1187,1188,7,11,0,0,1188,1189,7,7,0,0,1189,1190,7,2,0,0,1190, - 1191,7,8,0,0,1191,1192,7,12,0,0,1192,1193,7,9,0,0,1193,1194,7,1, - 0,0,1194,1195,7,7,0,0,1195,127,1,0,0,0,1196,1197,7,11,0,0,1197,1198, - 7,7,0,0,1198,1199,7,2,0,0,1199,1200,7,8,0,0,1200,1201,7,12,0,0,1201, - 1202,7,9,0,0,1202,1203,7,21,0,0,1203,1204,7,6,0,0,1204,1205,7,3, - 0,0,1205,1206,7,12,0,0,1206,129,1,0,0,0,1207,1208,7,11,0,0,1208, - 1209,7,9,0,0,1209,1210,7,0,0,0,1210,1211,7,17,0,0,1211,1212,7,10, - 0,0,1212,1213,7,3,0,0,1213,1214,7,2,0,0,1214,1215,7,6,0,0,1215,1216, - 7,9,0,0,1216,1217,7,8,0,0,1217,1218,7,2,0,0,1218,131,1,0,0,0,1219, - 1220,7,11,0,0,1220,1221,7,9,0,0,1221,1222,7,2,0,0,1222,1223,7,8, - 0,0,1223,1224,7,3,0,0,1224,1225,7,10,0,0,1225,1226,7,10,0,0,1226, - 1227,7,7,0,0,1227,1228,7,8,0,0,1228,1229,7,6,0,0,1229,133,1,0,0, - 0,1230,1231,7,11,0,0,1231,1232,7,9,0,0,1232,1233,7,2,0,0,1233,1234, - 7,6,0,0,1234,1235,7,9,0,0,1235,1236,7,10,0,0,1236,1237,7,8,0,0,1237, - 1238,7,6,0,0,1238,135,1,0,0,0,1239,1240,7,11,0,0,1240,1241,7,3,0, - 0,1241,1242,7,20,0,0,1242,1243,7,0,0,0,1243,1244,7,9,0,0,1244,1245, - 7,10,0,0,1245,137,1,0,0,0,1246,1247,7,11,0,0,1247,1248,7,3,0,0,1248, - 1249,7,5,0,0,1249,1250,7,1,0,0,1250,1251,7,4,0,0,1251,1252,7,7,0, - 0,1252,139,1,0,0,0,1253,1254,7,11,0,0,1254,1255,7,12,0,0,1255,1256, - 7,3,0,0,1256,1257,7,21,0,0,1257,141,1,0,0,0,1258,1259,7,7,0,0,1259, - 1260,7,4,0,0,1260,1261,7,2,0,0,1261,1262,7,7,0,0,1262,143,1,0,0, - 0,1263,1264,7,7,0,0,1264,1265,7,10,0,0,1265,1266,7,11,0,0,1266,145, - 1,0,0,0,1267,1268,7,7,0,0,1268,1269,7,10,0,0,1269,1270,7,11,0,0, - 1270,1271,5,45,0,0,1271,1272,7,7,0,0,1272,1273,7,23,0,0,1273,1274, - 7,7,0,0,1274,1275,7,8,0,0,1275,147,1,0,0,0,1276,1277,7,7,0,0,1277, - 1278,7,2,0,0,1278,1279,7,8,0,0,1279,1280,7,0,0,0,1280,1281,7,21, - 0,0,1281,1282,7,7,0,0,1282,149,1,0,0,0,1283,1284,7,7,0,0,1284,1285, - 7,16,0,0,1285,1286,7,7,0,0,1286,1287,7,12,0,0,1287,1288,7,13,0,0, - 1288,151,1,0,0,0,1289,1290,7,7,0,0,1290,1291,7,23,0,0,1291,1292, - 7,8,0,0,1292,1293,7,7,0,0,1293,1294,7,21,0,0,1294,1295,7,6,0,0,1295, - 153,1,0,0,0,1296,1297,7,7,0,0,1297,1298,7,23,0,0,1298,1299,7,8,0, - 0,1299,1300,7,7,0,0,1300,1301,7,21,0,0,1301,1302,7,6,0,0,1302,1303, - 7,9,0,0,1303,1304,7,3,0,0,1304,1305,7,10,0,0,1305,155,1,0,0,0,1306, - 1307,7,7,0,0,1307,1308,7,23,0,0,1308,1309,7,8,0,0,1309,1310,7,4, - 0,0,1310,1311,7,5,0,0,1311,1312,7,11,0,0,1312,1313,7,7,0,0,1313, - 157,1,0,0,0,1314,1315,7,7,0,0,1315,1316,7,23,0,0,1316,1317,7,8,0, - 0,1317,1318,7,4,0,0,1318,1319,7,5,0,0,1319,1320,7,11,0,0,1320,1321, - 7,7,0,0,1321,1322,7,11,0,0,1322,159,1,0,0,0,1323,1324,7,7,0,0,1324, - 1325,7,23,0,0,1325,1326,7,7,0,0,1326,1327,7,8,0,0,1327,161,1,0,0, - 0,1328,1329,7,7,0,0,1329,1330,7,23,0,0,1330,1331,7,7,0,0,1331,1332, - 7,8,0,0,1332,1333,7,5,0,0,1333,1334,7,6,0,0,1334,1335,7,7,0,0,1335, - 163,1,0,0,0,1336,1337,7,7,0,0,1337,1338,7,23,0,0,1338,1339,7,9,0, - 0,1339,1340,7,2,0,0,1340,1341,7,6,0,0,1341,1342,7,2,0,0,1342,165, - 1,0,0,0,1343,1344,7,7,0,0,1344,1345,7,23,0,0,1345,1346,7,21,0,0, - 1346,1347,7,4,0,0,1347,1348,7,0,0,0,1348,1349,7,9,0,0,1349,1350, - 7,10,0,0,1350,167,1,0,0,0,1351,1352,7,7,0,0,1352,1353,7,23,0,0,1353, - 1354,7,6,0,0,1354,1355,7,7,0,0,1355,1356,7,12,0,0,1356,1357,7,10, - 0,0,1357,1358,7,0,0,0,1358,1359,7,4,0,0,1359,169,1,0,0,0,1360,1361, - 7,7,0,0,1361,1362,7,23,0,0,1362,1363,7,6,0,0,1363,1364,7,12,0,0, - 1364,1365,7,0,0,0,1365,1366,7,8,0,0,1366,1367,7,6,0,0,1367,171,1, - 0,0,0,1368,1369,7,11,0,0,1369,1370,7,0,0,0,1370,1371,7,6,0,0,1371, - 1372,7,7,0,0,1372,1373,5,95,0,0,1373,1374,7,0,0,0,1374,1375,7,11, - 0,0,1375,1376,7,11,0,0,1376,173,1,0,0,0,1377,1378,7,11,0,0,1378, - 1379,7,0,0,0,1379,1380,7,6,0,0,1380,1381,7,7,0,0,1381,1382,5,95, - 0,0,1382,1383,7,11,0,0,1383,1384,7,9,0,0,1384,1385,7,22,0,0,1385, - 1386,7,22,0,0,1386,175,1,0,0,0,1387,1388,7,22,0,0,1388,1389,7,0, - 0,0,1389,1390,7,4,0,0,1390,1391,7,2,0,0,1391,1392,7,7,0,0,1392,177, - 1,0,0,0,1393,1394,7,22,0,0,1394,1395,7,7,0,0,1395,1396,7,6,0,0,1396, - 1397,7,8,0,0,1397,1398,7,14,0,0,1398,179,1,0,0,0,1399,1400,7,22, - 0,0,1400,1401,7,9,0,0,1401,1402,7,12,0,0,1402,1403,7,2,0,0,1403, - 1404,7,6,0,0,1404,181,1,0,0,0,1405,1406,7,22,0,0,1406,1407,7,4,0, - 0,1407,1408,7,3,0,0,1408,1409,7,0,0,0,1409,1410,7,6,0,0,1410,183, - 1,0,0,0,1411,1412,7,22,0,0,1412,1413,7,3,0,0,1413,1414,7,12,0,0, - 1414,185,1,0,0,0,1415,1416,7,22,0,0,1416,1417,7,3,0,0,1417,1418, - 7,12,0,0,1418,1419,7,7,0,0,1419,1420,7,9,0,0,1420,1421,7,17,0,0, - 1421,1422,7,10,0,0,1422,187,1,0,0,0,1423,1424,7,22,0,0,1424,1425, - 7,3,0,0,1425,1426,7,5,0,0,1426,1427,7,10,0,0,1427,1428,7,11,0,0, - 1428,189,1,0,0,0,1429,1430,7,22,0,0,1430,1431,7,12,0,0,1431,1432, - 7,3,0,0,1432,1433,7,20,0,0,1433,191,1,0,0,0,1434,1435,7,22,0,0,1435, - 1436,7,5,0,0,1436,1437,7,4,0,0,1437,1438,7,4,0,0,1438,193,1,0,0, - 0,1439,1440,7,17,0,0,1440,1441,7,7,0,0,1441,1442,7,6,0,0,1442,195, - 1,0,0,0,1443,1444,7,17,0,0,1444,1445,7,4,0,0,1445,1446,7,3,0,0,1446, - 1447,7,1,0,0,1447,1448,7,0,0,0,1448,1449,7,4,0,0,1449,197,1,0,0, - 0,1450,1451,7,17,0,0,1451,1452,7,3,0,0,1452,199,1,0,0,0,1453,1454, - 7,17,0,0,1454,1455,7,3,0,0,1455,1456,7,6,0,0,1456,1457,7,3,0,0,1457, - 201,1,0,0,0,1458,1459,7,17,0,0,1459,1460,7,12,0,0,1460,1461,7,0, - 0,0,1461,1462,7,10,0,0,1462,1463,7,6,0,0,1463,203,1,0,0,0,1464,1465, - 7,17,0,0,1465,1466,7,12,0,0,1466,1467,7,3,0,0,1467,1468,7,5,0,0, - 1468,1469,7,21,0,0,1469,205,1,0,0,0,1470,1471,7,14,0,0,1471,1472, - 7,0,0,0,1472,1473,7,16,0,0,1473,1474,7,9,0,0,1474,1475,7,10,0,0, - 1475,1476,7,17,0,0,1476,207,1,0,0,0,1477,1478,7,9,0,0,1478,1479, - 7,11,0,0,1479,1480,7,7,0,0,1480,1481,7,10,0,0,1481,1482,7,6,0,0, - 1482,1483,7,9,0,0,1483,1484,7,6,0,0,1484,1485,7,13,0,0,1485,209, - 1,0,0,0,1486,1487,7,9,0,0,1487,1488,7,20,0,0,1488,1489,7,20,0,0, - 1489,1490,7,7,0,0,1490,1491,7,11,0,0,1491,1492,7,9,0,0,1492,1493, - 7,0,0,0,1493,1494,7,6,0,0,1494,1495,7,7,0,0,1495,211,1,0,0,0,1496, - 1497,7,9,0,0,1497,1498,7,10,0,0,1498,213,1,0,0,0,1499,1500,7,9,0, - 0,1500,1501,7,10,0,0,1501,1502,7,11,0,0,1502,1503,7,9,0,0,1503,1504, - 7,8,0,0,1504,1505,7,0,0,0,1505,1506,7,6,0,0,1506,1507,7,3,0,0,1507, - 1508,7,12,0,0,1508,215,1,0,0,0,1509,1510,7,9,0,0,1510,1511,7,10, - 0,0,1511,1512,7,9,0,0,1512,1513,7,6,0,0,1513,1514,7,9,0,0,1514,1515, - 7,0,0,0,1515,1516,7,4,0,0,1516,1517,7,4,0,0,1517,1518,7,13,0,0,1518, - 217,1,0,0,0,1519,1520,7,9,0,0,1520,1521,7,10,0,0,1521,1522,7,10, - 0,0,1522,1523,7,7,0,0,1523,1524,7,12,0,0,1524,219,1,0,0,0,1525,1526, - 7,9,0,0,1526,1527,7,10,0,0,1527,1528,7,21,0,0,1528,1529,7,5,0,0, - 1529,1530,7,6,0,0,1530,221,1,0,0,0,1531,1532,7,9,0,0,1532,1533,7, - 10,0,0,1533,1534,7,2,0,0,1534,1535,7,7,0,0,1535,1536,7,10,0,0,1536, - 1537,7,2,0,0,1537,1538,7,9,0,0,1538,1539,7,6,0,0,1539,1540,7,9,0, - 0,1540,1541,7,16,0,0,1541,1542,7,7,0,0,1542,223,1,0,0,0,1543,1544, - 7,9,0,0,1544,1545,7,10,0,0,1545,1546,7,2,0,0,1546,1547,7,7,0,0,1547, - 1548,7,12,0,0,1548,1549,7,6,0,0,1549,225,1,0,0,0,1550,1551,7,9,0, - 0,1551,1552,7,10,0,0,1552,1553,7,6,0,0,1553,227,1,0,0,0,1554,1555, - 7,9,0,0,1555,1556,7,10,0,0,1556,1557,7,6,0,0,1557,1558,7,7,0,0,1558, - 1559,7,17,0,0,1559,1560,7,7,0,0,1560,1561,7,12,0,0,1561,229,1,0, - 0,0,1562,1563,7,9,0,0,1563,1564,7,10,0,0,1564,1565,7,6,0,0,1565, - 1566,7,7,0,0,1566,1567,7,12,0,0,1567,1568,7,2,0,0,1568,1569,7,7, - 0,0,1569,1570,7,8,0,0,1570,1571,7,6,0,0,1571,231,1,0,0,0,1572,1573, - 7,9,0,0,1573,1574,7,10,0,0,1574,1575,7,6,0,0,1575,1576,7,7,0,0,1576, - 1577,7,12,0,0,1577,1578,7,16,0,0,1578,1579,7,0,0,0,1579,1580,7,4, - 0,0,1580,233,1,0,0,0,1581,1582,7,9,0,0,1582,1583,7,10,0,0,1583,1584, - 7,6,0,0,1584,1585,7,3,0,0,1585,235,1,0,0,0,1586,1587,7,9,0,0,1587, - 1588,7,2,0,0,1588,237,1,0,0,0,1589,1590,7,9,0,0,1590,1591,7,2,0, - 0,1591,1592,7,3,0,0,1592,1593,7,4,0,0,1593,1594,7,0,0,0,1594,1595, - 7,6,0,0,1595,1596,7,9,0,0,1596,1597,7,3,0,0,1597,1598,7,10,0,0,1598, - 239,1,0,0,0,1599,1600,7,24,0,0,1600,1601,7,3,0,0,1601,1602,7,9,0, - 0,1602,1603,7,10,0,0,1603,241,1,0,0,0,1604,1605,7,19,0,0,1605,1606, - 7,7,0,0,1606,1607,7,13,0,0,1607,243,1,0,0,0,1608,1609,7,4,0,0,1609, - 1610,7,0,0,0,1610,1611,7,10,0,0,1611,1612,7,17,0,0,1612,1613,7,5, - 0,0,1613,1614,7,0,0,0,1614,1615,7,17,0,0,1615,1616,7,7,0,0,1616, - 245,1,0,0,0,1617,1618,7,4,0,0,1618,1619,7,0,0,0,1619,1620,7,2,0, - 0,1620,1621,7,6,0,0,1621,247,1,0,0,0,1622,1623,7,4,0,0,1623,1624, - 7,0,0,0,1624,1625,7,6,0,0,1625,1626,7,7,0,0,1626,1627,7,12,0,0,1627, - 1628,7,0,0,0,1628,1629,7,4,0,0,1629,249,1,0,0,0,1630,1631,7,4,0, - 0,1631,1632,7,7,0,0,1632,1633,7,22,0,0,1633,1634,7,6,0,0,1634,251, - 1,0,0,0,1635,1636,7,4,0,0,1636,1637,7,7,0,0,1637,1638,7,16,0,0,1638, - 1639,7,7,0,0,1639,1640,7,4,0,0,1640,253,1,0,0,0,1641,1642,7,4,0, - 0,1642,1643,7,9,0,0,1643,1644,7,19,0,0,1644,1645,7,7,0,0,1645,255, - 1,0,0,0,1646,1647,7,4,0,0,1647,1648,7,3,0,0,1648,1649,7,8,0,0,1649, - 1650,7,0,0,0,1650,1651,7,4,0,0,1651,257,1,0,0,0,1652,1653,7,4,0, - 0,1653,1654,7,3,0,0,1654,1655,7,18,0,0,1655,1656,7,7,0,0,1656,1657, - 7,12,0,0,1657,259,1,0,0,0,1658,1659,7,20,0,0,1659,1660,7,0,0,0,1660, - 1661,7,6,0,0,1661,1662,7,8,0,0,1662,1663,7,14,0,0,1663,261,1,0,0, - 0,1664,1665,7,20,0,0,1665,1666,7,0,0,0,1666,1667,7,23,0,0,1667,263, - 1,0,0,0,1668,1669,7,20,0,0,1669,1670,7,9,0,0,1670,1671,7,10,0,0, - 1671,265,1,0,0,0,1672,1673,7,20,0,0,1673,1674,7,3,0,0,1674,1675, - 7,11,0,0,1675,1676,7,5,0,0,1676,1677,7,4,0,0,1677,1678,7,7,0,0,1678, - 267,1,0,0,0,1679,1680,7,10,0,0,1680,1681,7,0,0,0,1681,1682,7,20, - 0,0,1682,1683,7,7,0,0,1683,1684,7,2,0,0,1684,269,1,0,0,0,1685,1686, - 7,10,0,0,1686,1687,7,0,0,0,1687,1688,7,6,0,0,1688,1689,7,9,0,0,1689, - 1690,7,3,0,0,1690,1691,7,10,0,0,1691,1692,7,0,0,0,1692,1693,7,4, - 0,0,1693,271,1,0,0,0,1694,1695,7,10,0,0,1695,1696,7,0,0,0,1696,1697, - 7,6,0,0,1697,1698,7,5,0,0,1698,1699,7,12,0,0,1699,1700,7,0,0,0,1700, - 1701,7,4,0,0,1701,273,1,0,0,0,1702,1703,7,10,0,0,1703,1704,7,8,0, - 0,1704,1705,7,14,0,0,1705,1706,7,0,0,0,1706,1707,7,12,0,0,1707,275, - 1,0,0,0,1708,1709,7,10,0,0,1709,1710,7,7,0,0,1710,1711,7,23,0,0, - 1711,1712,7,6,0,0,1712,277,1,0,0,0,1713,1714,7,10,0,0,1714,1715, - 7,3,0,0,1715,279,1,0,0,0,1716,1717,7,10,0,0,1717,1718,7,3,0,0,1718, - 1719,7,6,0,0,1719,281,1,0,0,0,1720,1721,7,10,0,0,1721,1722,7,5,0, - 0,1722,1723,7,4,0,0,1723,1724,7,4,0,0,1724,283,1,0,0,0,1725,1726, - 7,10,0,0,1726,1727,7,5,0,0,1727,1728,7,4,0,0,1728,1729,7,4,0,0,1729, - 1730,7,2,0,0,1730,285,1,0,0,0,1731,1732,7,10,0,0,1732,1733,7,5,0, - 0,1733,1734,7,4,0,0,1734,1735,7,4,0,0,1735,1736,7,9,0,0,1736,1737, - 7,22,0,0,1737,287,1,0,0,0,1738,1739,7,10,0,0,1739,1740,7,5,0,0,1740, - 1741,7,20,0,0,1741,1742,7,7,0,0,1742,1743,7,12,0,0,1743,1744,7,9, - 0,0,1744,1745,7,8,0,0,1745,289,1,0,0,0,1746,1747,7,3,0,0,1747,1748, - 7,8,0,0,1748,1749,7,6,0,0,1749,1750,7,7,0,0,1750,1751,7,6,0,0,1751, - 1752,5,95,0,0,1752,1753,7,4,0,0,1753,1754,7,7,0,0,1754,1755,7,10, - 0,0,1755,1756,7,17,0,0,1756,1757,7,6,0,0,1757,1758,7,14,0,0,1758, - 291,1,0,0,0,1759,1760,7,3,0,0,1760,1761,7,22,0,0,1761,293,1,0,0, - 0,1762,1763,7,3,0,0,1763,1764,7,10,0,0,1764,295,1,0,0,0,1765,1766, - 7,3,0,0,1766,1767,7,10,0,0,1767,1768,7,4,0,0,1768,1769,7,13,0,0, - 1769,297,1,0,0,0,1770,1771,7,3,0,0,1771,1772,7,21,0,0,1772,1773, - 7,7,0,0,1773,1774,7,10,0,0,1774,299,1,0,0,0,1775,1776,7,3,0,0,1776, - 1777,7,21,0,0,1777,1778,7,6,0,0,1778,1779,7,9,0,0,1779,1780,7,3, - 0,0,1780,1781,7,10,0,0,1781,301,1,0,0,0,1782,1783,7,3,0,0,1783,1784, - 7,12,0,0,1784,303,1,0,0,0,1785,1786,7,3,0,0,1786,1787,7,12,0,0,1787, - 1788,7,11,0,0,1788,1789,7,7,0,0,1789,1790,7,12,0,0,1790,305,1,0, - 0,0,1791,1792,7,3,0,0,1792,1793,7,5,0,0,1793,1794,7,6,0,0,1794,1795, - 7,7,0,0,1795,1796,7,12,0,0,1796,307,1,0,0,0,1797,1798,7,3,0,0,1798, - 1799,7,5,0,0,1799,1800,7,6,0,0,1800,1801,7,21,0,0,1801,1802,7,5, - 0,0,1802,1803,7,6,0,0,1803,309,1,0,0,0,1804,1805,7,3,0,0,1805,1806, - 7,16,0,0,1806,1807,7,7,0,0,1807,1808,7,12,0,0,1808,1809,7,4,0,0, - 1809,1810,7,0,0,0,1810,1811,7,21,0,0,1811,1812,7,2,0,0,1812,311, - 1,0,0,0,1813,1814,7,3,0,0,1814,1815,7,16,0,0,1815,1816,7,7,0,0,1816, - 1817,7,12,0,0,1817,1818,7,4,0,0,1818,1819,7,0,0,0,1819,1820,7,13, - 0,0,1820,313,1,0,0,0,1821,1822,7,21,0,0,1822,1823,7,0,0,0,1823,1824, - 7,11,0,0,1824,315,1,0,0,0,1825,1826,7,21,0,0,1826,1827,7,0,0,0,1827, - 1828,7,12,0,0,1828,1829,7,6,0,0,1829,1830,7,9,0,0,1830,1831,7,0, - 0,0,1831,1832,7,4,0,0,1832,317,1,0,0,0,1833,1834,7,21,0,0,1834,1835, - 7,4,0,0,1835,1836,7,0,0,0,1836,1837,7,8,0,0,1837,1838,7,9,0,0,1838, - 1839,7,10,0,0,1839,1840,7,17,0,0,1840,319,1,0,0,0,1841,1842,7,21, - 0,0,1842,1843,7,3,0,0,1843,1844,7,2,0,0,1844,1845,7,9,0,0,1845,1846, - 7,6,0,0,1846,1847,7,9,0,0,1847,1848,7,3,0,0,1848,1849,7,10,0,0,1849, - 321,1,0,0,0,1850,1851,7,21,0,0,1851,1852,7,12,0,0,1852,1853,7,7, - 0,0,1853,1854,7,8,0,0,1854,1855,7,9,0,0,1855,1856,7,2,0,0,1856,1857, - 7,9,0,0,1857,1858,7,3,0,0,1858,1859,7,10,0,0,1859,323,1,0,0,0,1860, - 1861,7,21,0,0,1861,1862,7,12,0,0,1862,1863,7,7,0,0,1863,1864,7,21, - 0,0,1864,1865,7,0,0,0,1865,1866,7,12,0,0,1866,1867,7,7,0,0,1867, - 325,1,0,0,0,1868,1869,7,21,0,0,1869,1870,7,12,0,0,1870,1871,7,7, - 0,0,1871,1872,7,2,0,0,1872,1873,7,7,0,0,1873,1874,7,12,0,0,1874, - 1875,7,16,0,0,1875,1876,7,7,0,0,1876,327,1,0,0,0,1877,1878,7,21, - 0,0,1878,1879,7,12,0,0,1879,1880,7,9,0,0,1880,1881,7,20,0,0,1881, - 1882,7,0,0,0,1882,1883,7,12,0,0,1883,1884,7,13,0,0,1884,329,1,0, - 0,0,1885,1886,7,21,0,0,1886,1887,7,12,0,0,1887,1888,7,9,0,0,1888, - 1889,7,3,0,0,1889,1890,7,12,0,0,1890,331,1,0,0,0,1891,1892,7,21, - 0,0,1892,1893,7,12,0,0,1893,1894,7,9,0,0,1894,1895,7,16,0,0,1895, - 1896,7,9,0,0,1896,1897,7,4,0,0,1897,1898,7,7,0,0,1898,1899,7,17, - 0,0,1899,1900,7,7,0,0,1900,1901,7,2,0,0,1901,333,1,0,0,0,1902,1903, - 7,21,0,0,1903,1904,7,12,0,0,1904,1905,7,3,0,0,1905,1906,7,8,0,0, - 1906,1907,7,7,0,0,1907,1908,7,11,0,0,1908,1909,7,5,0,0,1909,1910, - 7,12,0,0,1910,1911,7,7,0,0,1911,335,1,0,0,0,1912,1913,7,21,0,0,1913, - 1914,7,5,0,0,1914,1915,7,1,0,0,1915,1916,7,4,0,0,1916,1917,7,9,0, - 0,1917,1918,7,8,0,0,1918,337,1,0,0,0,1919,1920,7,12,0,0,1920,1921, - 7,7,0,0,1921,1922,7,0,0,0,1922,1923,7,11,0,0,1923,339,1,0,0,0,1924, - 1925,7,12,0,0,1925,1926,7,7,0,0,1926,1927,7,0,0,0,1927,1928,7,4, - 0,0,1928,341,1,0,0,0,1929,1930,7,12,0,0,1930,1931,7,7,0,0,1931,1932, - 7,22,0,0,1932,1933,7,7,0,0,1933,1934,7,12,0,0,1934,1935,7,7,0,0, - 1935,1936,7,10,0,0,1936,1937,7,8,0,0,1937,1938,7,7,0,0,1938,1939, - 7,2,0,0,1939,343,1,0,0,0,1940,1941,7,12,0,0,1941,1942,7,7,0,0,1942, - 1943,7,4,0,0,1943,1944,7,0,0,0,1944,1945,7,6,0,0,1945,1946,7,9,0, - 0,1946,1947,7,16,0,0,1947,1948,7,7,0,0,1948,345,1,0,0,0,1949,1950, - 7,12,0,0,1950,1951,7,7,0,0,1951,1952,7,21,0,0,1952,1953,7,4,0,0, - 1953,1954,7,0,0,0,1954,1955,7,8,0,0,1955,1956,7,7,0,0,1956,347,1, - 0,0,0,1957,1958,7,12,0,0,1958,1959,7,7,0,0,1959,1960,7,2,0,0,1960, - 1961,7,6,0,0,1961,1962,7,12,0,0,1962,1963,7,9,0,0,1963,1964,7,8, - 0,0,1964,1965,7,6,0,0,1965,349,1,0,0,0,1966,1967,7,12,0,0,1967,1968, - 7,7,0,0,1968,1969,7,16,0,0,1969,1970,7,3,0,0,1970,1971,7,19,0,0, - 1971,1972,7,7,0,0,1972,351,1,0,0,0,1973,1974,7,12,0,0,1974,1975, - 7,9,0,0,1975,1976,7,17,0,0,1976,1977,7,14,0,0,1977,1978,7,6,0,0, - 1978,353,1,0,0,0,1979,1980,7,12,0,0,1980,1981,7,3,0,0,1981,1982, - 7,4,0,0,1982,1983,7,4,0,0,1983,1984,7,1,0,0,1984,1985,7,0,0,0,1985, - 1986,7,8,0,0,1986,1987,7,19,0,0,1987,355,1,0,0,0,1988,1989,7,12, - 0,0,1989,1990,7,3,0,0,1990,1991,7,18,0,0,1991,1992,7,2,0,0,1992, - 357,1,0,0,0,1993,1994,7,2,0,0,1994,1995,7,8,0,0,1995,1996,7,14,0, - 0,1996,1997,7,7,0,0,1997,1998,7,20,0,0,1998,1999,7,0,0,0,1999,359, - 1,0,0,0,2000,2001,7,2,0,0,2001,2002,7,8,0,0,2002,2003,7,12,0,0,2003, - 2004,7,3,0,0,2004,2005,7,4,0,0,2005,2006,7,4,0,0,2006,361,1,0,0, - 0,2007,2008,7,2,0,0,2008,2009,7,7,0,0,2009,2010,7,8,0,0,2010,2011, - 7,6,0,0,2011,2012,7,9,0,0,2012,2013,7,3,0,0,2013,2014,7,10,0,0,2014, - 363,1,0,0,0,2015,2016,7,2,0,0,2016,2017,7,7,0,0,2017,2018,7,4,0, - 0,2018,2019,7,7,0,0,2019,2020,7,8,0,0,2020,2021,7,6,0,0,2021,365, - 1,0,0,0,2022,2023,7,2,0,0,2023,2024,7,7,0,0,2024,2025,7,2,0,0,2025, - 2026,7,2,0,0,2026,2027,7,9,0,0,2027,2028,7,3,0,0,2028,2029,7,10, - 0,0,2029,367,1,0,0,0,2030,2031,7,2,0,0,2031,2032,7,7,0,0,2032,2033, - 7,2,0,0,2033,2034,7,2,0,0,2034,2035,7,9,0,0,2035,2036,7,3,0,0,2036, - 2037,7,10,0,0,2037,2038,5,95,0,0,2038,2039,7,5,0,0,2039,2040,7,2, - 0,0,2040,2041,7,7,0,0,2041,2042,7,12,0,0,2042,369,1,0,0,0,2043,2044, - 7,2,0,0,2044,2045,7,7,0,0,2045,2046,7,6,0,0,2046,371,1,0,0,0,2047, - 2048,7,2,0,0,2048,2049,7,14,0,0,2049,2050,7,3,0,0,2050,2051,7,12, - 0,0,2051,2052,7,6,0,0,2052,2053,7,7,0,0,2053,2054,7,2,0,0,2054,2055, - 7,6,0,0,2055,373,1,0,0,0,2056,2057,7,2,0,0,2057,2058,7,9,0,0,2058, - 2059,7,15,0,0,2059,2060,7,7,0,0,2060,375,1,0,0,0,2061,2062,7,2,0, - 0,2062,2063,7,20,0,0,2063,2064,7,0,0,0,2064,2065,7,4,0,0,2065,2066, - 7,4,0,0,2066,2067,7,9,0,0,2067,2068,7,10,0,0,2068,2069,7,6,0,0,2069, - 377,1,0,0,0,2070,2071,7,2,0,0,2071,2072,7,3,0,0,2072,2073,7,20,0, - 0,2073,2074,7,7,0,0,2074,379,1,0,0,0,2075,2076,7,2,0,0,2076,2077, - 7,21,0,0,2077,2078,7,0,0,0,2078,2079,7,8,0,0,2079,2080,7,7,0,0,2080, - 381,1,0,0,0,2081,2082,7,2,0,0,2082,2083,7,25,0,0,2083,2084,7,4,0, - 0,2084,383,1,0,0,0,2085,2086,7,2,0,0,2086,2087,7,25,0,0,2087,2088, - 7,4,0,0,2088,2089,7,8,0,0,2089,2090,7,3,0,0,2090,2091,7,11,0,0,2091, - 2092,7,7,0,0,2092,385,1,0,0,0,2093,2094,7,2,0,0,2094,2095,7,25,0, - 0,2095,2096,7,4,0,0,2096,2097,7,7,0,0,2097,2098,7,12,0,0,2098,2099, - 7,12,0,0,2099,2100,7,3,0,0,2100,2101,7,12,0,0,2101,387,1,0,0,0,2102, - 2103,7,2,0,0,2103,2104,7,25,0,0,2104,2105,7,4,0,0,2105,2106,7,2, - 0,0,2106,2107,7,6,0,0,2107,2108,7,0,0,0,2108,2109,7,6,0,0,2109,2110, - 7,7,0,0,2110,389,1,0,0,0,2111,2112,7,2,0,0,2112,2113,7,5,0,0,2113, - 2114,7,1,0,0,2114,2115,7,2,0,0,2115,2116,7,6,0,0,2116,2117,7,12, - 0,0,2117,2118,7,9,0,0,2118,2119,7,10,0,0,2119,2120,7,17,0,0,2120, - 391,1,0,0,0,2121,2122,7,2,0,0,2122,2123,7,5,0,0,2123,2124,7,20,0, - 0,2124,393,1,0,0,0,2125,2126,7,2,0,0,2126,2127,7,13,0,0,2127,2128, - 7,2,0,0,2128,2129,7,6,0,0,2129,2130,7,7,0,0,2130,2131,7,20,0,0,2131, - 2132,5,95,0,0,2132,2133,7,5,0,0,2133,2134,7,2,0,0,2134,2135,7,7, - 0,0,2135,2136,7,12,0,0,2136,395,1,0,0,0,2137,2138,7,6,0,0,2138,2139, - 7,0,0,0,2139,2140,7,1,0,0,2140,2141,7,4,0,0,2141,2142,7,7,0,0,2142, - 397,1,0,0,0,2143,2144,7,6,0,0,2144,2145,7,7,0,0,2145,2146,7,20,0, - 0,2146,2147,7,21,0,0,2147,2148,7,3,0,0,2148,2149,7,12,0,0,2149,2150, - 7,0,0,0,2150,2151,7,12,0,0,2151,2152,7,13,0,0,2152,399,1,0,0,0,2153, - 2154,7,6,0,0,2154,2155,7,14,0,0,2155,2156,7,7,0,0,2156,2157,7,10, - 0,0,2157,401,1,0,0,0,2158,2159,7,6,0,0,2159,2160,7,9,0,0,2160,2161, - 7,20,0,0,2161,2162,7,7,0,0,2162,403,1,0,0,0,2163,2164,7,6,0,0,2164, - 2165,7,9,0,0,2165,2166,7,20,0,0,2166,2167,7,7,0,0,2167,2168,7,2, - 0,0,2168,2169,7,6,0,0,2169,2170,7,0,0,0,2170,2171,7,20,0,0,2171, - 2172,7,21,0,0,2172,405,1,0,0,0,2173,2174,7,6,0,0,2174,2175,7,3,0, - 0,2175,407,1,0,0,0,2176,2177,7,6,0,0,2177,2178,7,12,0,0,2178,2179, - 7,0,0,0,2179,2180,7,10,0,0,2180,2181,7,2,0,0,2181,2182,7,0,0,0,2182, - 2183,7,8,0,0,2183,2184,7,6,0,0,2184,2185,7,9,0,0,2185,2186,7,3,0, - 0,2186,2187,7,10,0,0,2187,409,1,0,0,0,2188,2189,7,6,0,0,2189,2190, - 7,12,0,0,2190,2191,7,0,0,0,2191,2192,7,10,0,0,2192,2193,7,2,0,0, - 2193,2194,7,4,0,0,2194,2195,7,0,0,0,2195,2196,7,6,0,0,2196,2197, - 7,7,0,0,2197,411,1,0,0,0,2198,2199,7,6,0,0,2199,2200,7,12,0,0,2200, - 2201,7,0,0,0,2201,2202,7,10,0,0,2202,2203,7,2,0,0,2203,2204,7,4, - 0,0,2204,2205,7,0,0,0,2205,2206,7,6,0,0,2206,2207,7,9,0,0,2207,2208, - 7,3,0,0,2208,2209,7,10,0,0,2209,413,1,0,0,0,2210,2211,7,6,0,0,2211, - 2212,7,12,0,0,2212,2213,7,9,0,0,2213,2214,7,20,0,0,2214,415,1,0, - 0,0,2215,2216,7,6,0,0,2216,2217,7,12,0,0,2217,2218,7,5,0,0,2218, - 2219,7,7,0,0,2219,417,1,0,0,0,2220,2221,7,5,0,0,2221,2222,7,10,0, - 0,2222,2223,7,9,0,0,2223,2224,7,3,0,0,2224,2225,7,10,0,0,2225,419, - 1,0,0,0,2226,2227,7,5,0,0,2227,2228,7,10,0,0,2228,2229,7,9,0,0,2229, - 2230,7,25,0,0,2230,2231,7,5,0,0,2231,2232,7,7,0,0,2232,421,1,0,0, - 0,2233,2234,7,5,0,0,2234,2235,7,10,0,0,2235,2236,7,19,0,0,2236,2237, - 7,10,0,0,2237,2238,7,3,0,0,2238,2239,7,18,0,0,2239,2240,7,10,0,0, - 2240,423,1,0,0,0,2241,2242,7,5,0,0,2242,2243,7,21,0,0,2243,2244, - 7,11,0,0,2244,2245,7,0,0,0,2245,2246,7,6,0,0,2246,2247,7,7,0,0,2247, - 425,1,0,0,0,2248,2249,7,5,0,0,2249,2250,7,21,0,0,2250,2251,7,21, - 0,0,2251,2252,7,7,0,0,2252,2253,7,12,0,0,2253,427,1,0,0,0,2254,2255, - 7,5,0,0,2255,2256,7,21,0,0,2256,2257,7,2,0,0,2257,2258,7,7,0,0,2258, - 2259,7,12,0,0,2259,2260,7,6,0,0,2260,429,1,0,0,0,2261,2262,7,5,0, - 0,2262,2263,7,2,0,0,2263,2264,7,0,0,0,2264,2265,7,17,0,0,2265,2266, - 7,7,0,0,2266,431,1,0,0,0,2267,2268,7,5,0,0,2268,2269,7,2,0,0,2269, - 2270,7,7,0,0,2270,2271,7,12,0,0,2271,433,1,0,0,0,2272,2273,7,5,0, - 0,2273,2274,7,2,0,0,2274,2275,7,9,0,0,2275,2276,7,10,0,0,2276,2277, - 7,17,0,0,2277,435,1,0,0,0,2278,2279,7,16,0,0,2279,2280,7,0,0,0,2280, - 2281,7,4,0,0,2281,2282,7,5,0,0,2282,2283,7,7,0,0,2283,437,1,0,0, - 0,2284,2285,7,16,0,0,2285,2286,7,0,0,0,2286,2287,7,4,0,0,2287,2288, - 7,5,0,0,2288,2289,7,7,0,0,2289,2290,7,2,0,0,2290,439,1,0,0,0,2291, - 2292,7,16,0,0,2292,2293,7,0,0,0,2293,2294,7,12,0,0,2294,2295,7,8, - 0,0,2295,2296,7,14,0,0,2296,2297,7,0,0,0,2297,2298,7,12,0,0,2298, - 441,1,0,0,0,2299,2300,7,16,0,0,2300,2301,7,0,0,0,2301,2302,7,12, - 0,0,2302,2303,7,13,0,0,2303,2304,7,9,0,0,2304,2305,7,10,0,0,2305, - 2306,7,17,0,0,2306,443,1,0,0,0,2307,2308,7,16,0,0,2308,2309,7,9, - 0,0,2309,2310,7,7,0,0,2310,2311,7,18,0,0,2311,445,1,0,0,0,2312,2313, - 7,18,0,0,2313,2314,7,14,0,0,2314,2315,7,7,0,0,2315,2316,7,10,0,0, - 2316,447,1,0,0,0,2317,2318,7,18,0,0,2318,2319,7,14,0,0,2319,2320, - 7,7,0,0,2320,2321,7,10,0,0,2321,2322,7,7,0,0,2322,2323,7,16,0,0, - 2323,2324,7,7,0,0,2324,2325,7,12,0,0,2325,449,1,0,0,0,2326,2327, - 7,18,0,0,2327,2328,7,14,0,0,2328,2329,7,7,0,0,2329,2330,7,12,0,0, - 2330,2331,7,7,0,0,2331,451,1,0,0,0,2332,2333,7,18,0,0,2333,2334, - 7,9,0,0,2334,2335,7,6,0,0,2335,2336,7,14,0,0,2336,453,1,0,0,0,2337, - 2338,7,18,0,0,2338,2339,7,3,0,0,2339,2340,7,12,0,0,2340,2341,7,19, - 0,0,2341,455,1,0,0,0,2342,2343,7,18,0,0,2343,2344,7,12,0,0,2344, - 2345,7,9,0,0,2345,2346,7,6,0,0,2346,2347,7,7,0,0,2347,457,1,0,0, - 0,2348,2349,7,15,0,0,2349,2350,7,3,0,0,2350,2351,7,10,0,0,2351,2352, - 7,7,0,0,2352,459,1,0,0,0,2353,2354,7,4,0,0,2354,2355,7,0,0,0,2355, - 2356,7,17,0,0,2356,461,1,0,0,0,2357,2358,7,4,0,0,2358,2359,7,7,0, - 0,2359,2360,7,0,0,0,2360,2361,7,11,0,0,2361,463,1,0,0,0,2362,2363, - 7,3,0,0,2363,2364,7,16,0,0,2364,2365,7,7,0,0,2365,2366,7,12,0,0, - 2366,465,1,0,0,0,2367,2368,7,21,0,0,2368,2369,7,0,0,0,2369,2370, - 7,12,0,0,2370,2371,7,6,0,0,2371,2372,7,9,0,0,2372,2373,7,6,0,0,2373, - 2374,7,9,0,0,2374,2375,7,3,0,0,2375,2376,7,10,0,0,2376,467,1,0,0, - 0,2377,2378,7,8,0,0,2378,2379,7,0,0,0,2379,2380,7,10,0,0,2380,2381, - 5,95,0,0,2381,2382,7,8,0,0,2382,2383,7,0,0,0,2383,2384,7,2,0,0,2384, - 2385,7,6,0,0,2385,469,1,0,0,0,2386,2387,7,8,0,0,2387,2388,7,0,0, - 0,2388,2389,7,10,0,0,2389,2390,5,95,0,0,2390,2391,7,4,0,0,2391,2392, - 7,3,0,0,2392,2393,7,2,0,0,2393,2394,7,2,0,0,2394,2395,7,4,0,0,2395, - 2396,7,7,0,0,2396,2397,7,2,0,0,2397,2398,7,2,0,0,2398,2399,5,95, - 0,0,2399,2400,7,8,0,0,2400,2401,7,0,0,0,2401,2402,7,2,0,0,2402,2403, - 7,6,0,0,2403,471,1,0,0,0,2404,2405,7,20,0,0,2405,2406,7,9,0,0,2406, - 2407,7,2,0,0,2407,2408,7,2,0,0,2408,2409,7,9,0,0,2409,2410,7,10, - 0,0,2410,2411,7,17,0,0,2411,473,1,0,0,0,2412,2413,7,21,0,0,2413, - 2414,7,9,0,0,2414,2415,7,16,0,0,2415,2416,7,3,0,0,2416,2417,7,6, - 0,0,2417,475,1,0,0,0,2418,2419,7,5,0,0,2419,2420,7,10,0,0,2420,2421, - 7,21,0,0,2421,2422,7,9,0,0,2422,2423,7,16,0,0,2423,2424,7,3,0,0, - 2424,2425,7,6,0,0,2425,477,1,0,0,0,2426,2427,7,4,0,0,2427,2428,7, - 9,0,0,2428,2429,7,20,0,0,2429,2430,7,9,0,0,2430,2431,7,6,0,0,2431, - 479,1,0,0,0,2432,2433,7,3,0,0,2433,2434,7,22,0,0,2434,2435,7,22, - 0,0,2435,2436,7,2,0,0,2436,2437,7,7,0,0,2437,2438,7,6,0,0,2438,481, - 1,0,0,0,2439,2440,7,12,0,0,2440,2441,7,7,0,0,2441,2442,7,20,0,0, - 2442,2443,7,3,0,0,2443,2444,7,16,0,0,2444,2445,7,7,0,0,2445,483, - 1,0,0,0,2446,2447,7,9,0,0,2447,2448,7,10,0,0,2448,2449,7,11,0,0, - 2449,2450,7,7,0,0,2450,2451,7,23,0,0,2451,485,1,0,0,0,2452,2453, - 7,4,0,0,2453,2454,7,7,0,0,2454,2455,7,6,0,0,2455,487,1,0,0,0,2456, - 2457,7,8,0,0,2457,2458,7,3,0,0,2458,2459,7,10,0,0,2459,2460,7,22, - 0,0,2460,2461,7,4,0,0,2461,2462,7,9,0,0,2462,2463,7,8,0,0,2463,2464, - 7,6,0,0,2464,489,1,0,0,0,2465,2466,7,11,0,0,2466,2467,7,3,0,0,2467, - 491,1,0,0,0,2468,2469,7,12,0,0,2469,2470,7,7,0,0,2470,2471,7,6,0, - 0,2471,2472,7,5,0,0,2472,2473,7,12,0,0,2473,2474,7,10,0,0,2474,2475, - 7,9,0,0,2475,2476,7,10,0,0,2476,2477,7,17,0,0,2477,493,1,0,0,0,2478, - 2479,7,20,0,0,2479,2480,7,3,0,0,2480,2481,7,11,0,0,2481,2482,7,9, - 0,0,2482,2483,7,22,0,0,2483,2484,7,9,0,0,2484,2485,7,7,0,0,2485, - 2486,7,11,0,0,2486,495,1,0,0,0,2487,2488,7,10,0,0,2488,2489,7,7, - 0,0,2489,2490,7,18,0,0,2490,497,1,0,0,0,2491,2492,7,3,0,0,2492,2493, - 7,4,0,0,2493,2494,7,11,0,0,2494,499,1,0,0,0,2495,2496,7,10,0,0,2496, - 2497,7,3,0,0,2497,2498,7,6,0,0,2498,2499,7,14,0,0,2499,2500,7,9, - 0,0,2500,2501,7,10,0,0,2501,2502,7,17,0,0,2502,501,1,0,0,0,2503, - 2504,7,6,0,0,2504,2505,7,5,0,0,2505,2506,7,21,0,0,2506,2507,7,4, - 0,0,2507,2508,7,7,0,0,2508,503,1,0,0,0,2509,2510,7,9,0,0,2510,2511, - 7,10,0,0,2511,2512,7,6,0,0,2512,2513,7,7,0,0,2513,2514,7,17,0,0, - 2514,2515,7,7,0,0,2515,2516,7,12,0,0,2516,2517,5,50,0,0,2517,505, - 1,0,0,0,2518,2519,7,9,0,0,2519,2520,7,10,0,0,2520,2521,7,6,0,0,2521, - 2522,5,50,0,0,2522,507,1,0,0,0,2523,2524,7,9,0,0,2524,2525,7,10, - 0,0,2525,2526,7,6,0,0,2526,2527,7,7,0,0,2527,2528,7,17,0,0,2528, - 2529,7,7,0,0,2529,2530,7,12,0,0,2530,2531,5,52,0,0,2531,509,1,0, - 0,0,2532,2533,7,9,0,0,2533,2534,7,10,0,0,2534,2535,7,6,0,0,2535, - 2536,5,52,0,0,2536,511,1,0,0,0,2537,2538,7,9,0,0,2538,2539,7,10, - 0,0,2539,2540,7,6,0,0,2540,2541,7,7,0,0,2541,2542,7,17,0,0,2542, - 2543,7,7,0,0,2543,2544,7,12,0,0,2544,2545,5,56,0,0,2545,513,1,0, - 0,0,2546,2547,7,9,0,0,2547,2548,7,10,0,0,2548,2549,7,6,0,0,2549, - 2550,5,56,0,0,2550,515,1,0,0,0,2551,2552,7,1,0,0,2552,2553,7,9,0, - 0,2553,2554,7,17,0,0,2554,2555,7,9,0,0,2555,2556,7,10,0,0,2556,2557, - 7,6,0,0,2557,517,1,0,0,0,2558,2559,7,1,0,0,2559,2560,7,3,0,0,2560, - 2561,7,3,0,0,2561,2562,7,4,0,0,2562,519,1,0,0,0,2563,2564,7,1,0, - 0,2564,2565,7,3,0,0,2565,2566,7,3,0,0,2566,2567,7,4,0,0,2567,2568, - 7,7,0,0,2568,2569,7,0,0,0,2569,2570,7,10,0,0,2570,521,1,0,0,0,2571, - 2572,7,2,0,0,2572,2573,7,6,0,0,2573,2574,7,12,0,0,2574,2575,7,9, - 0,0,2575,2576,7,10,0,0,2576,2577,7,17,0,0,2577,523,1,0,0,0,2578, - 2579,7,2,0,0,2579,2580,7,13,0,0,2580,2581,7,20,0,0,2581,2582,7,1, - 0,0,2582,2583,7,3,0,0,2583,2584,7,4,0,0,2584,525,1,0,0,0,2585,2586, - 7,8,0,0,2586,2587,7,4,0,0,2587,2588,7,3,0,0,2588,2589,7,1,0,0,2589, - 527,1,0,0,0,2590,2591,7,1,0,0,2591,2592,7,4,0,0,2592,2593,7,3,0, - 0,2593,2594,7,1,0,0,2594,529,1,0,0,0,2595,2596,7,2,0,0,2596,2597, - 7,6,0,0,2597,2598,7,12,0,0,2598,2599,7,5,0,0,2599,2600,7,8,0,0,2600, - 2601,7,6,0,0,2601,531,1,0,0,0,2602,2603,7,4,0,0,2603,2604,7,9,0, - 0,2604,2605,7,2,0,0,2605,2606,7,6,0,0,2606,533,1,0,0,0,2607,2608, - 7,2,0,0,2608,2609,7,7,0,0,2609,2610,7,23,0,0,2610,2611,7,21,0,0, - 2611,535,1,0,0,0,2612,2613,7,1,0,0,2613,2614,7,0,0,0,2614,2615,7, - 17,0,0,2615,537,1,0,0,0,2616,2617,5,94,0,0,2617,539,1,0,0,0,2618, - 2619,5,44,0,0,2619,541,1,0,0,0,2620,2621,5,43,0,0,2621,543,1,0,0, - 0,2622,2623,5,45,0,0,2623,545,1,0,0,0,2624,2625,5,47,0,0,2625,547, - 1,0,0,0,2626,2627,5,37,0,0,2627,549,1,0,0,0,2628,2629,5,64,0,0,2629, - 551,1,0,0,0,2630,2631,5,126,0,0,2631,553,1,0,0,0,2632,2633,5,42, - 0,0,2633,555,1,0,0,0,2634,2635,5,124,0,0,2635,557,1,0,0,0,2636,2637, - 5,38,0,0,2637,559,1,0,0,0,2638,2639,5,33,0,0,2639,561,1,0,0,0,2640, - 2641,5,60,0,0,2641,2642,5,61,0,0,2642,563,1,0,0,0,2643,2644,5,62, - 0,0,2644,2645,5,61,0,0,2645,565,1,0,0,0,2646,2647,5,61,0,0,2647, - 567,1,0,0,0,2648,2649,5,60,0,0,2649,2653,5,62,0,0,2650,2651,5,33, - 0,0,2651,2653,5,61,0,0,2652,2648,1,0,0,0,2652,2650,1,0,0,0,2653, - 569,1,0,0,0,2654,2655,5,124,0,0,2655,2656,5,124,0,0,2656,571,1,0, - 0,0,2657,2658,5,60,0,0,2658,573,1,0,0,0,2659,2660,5,62,0,0,2660, - 575,1,0,0,0,2661,2662,5,60,0,0,2662,2663,5,60,0,0,2663,577,1,0,0, - 0,2664,2665,5,62,0,0,2665,2666,5,62,0,0,2666,579,1,0,0,0,2667,2668, - 5,91,0,0,2668,581,1,0,0,0,2669,2670,5,93,0,0,2670,583,1,0,0,0,2671, - 2672,5,123,0,0,2672,585,1,0,0,0,2673,2674,5,125,0,0,2674,587,1,0, - 0,0,2675,2676,5,40,0,0,2676,589,1,0,0,0,2677,2678,5,41,0,0,2678, - 591,1,0,0,0,2679,2680,5,96,0,0,2680,2681,1,0,0,0,2681,2682,6,295, - 0,0,2682,2683,6,295,1,0,2683,593,1,0,0,0,2684,2685,5,58,0,0,2685, - 595,1,0,0,0,2686,2687,5,59,0,0,2687,597,1,0,0,0,2688,2689,5,63,0, - 0,2689,599,1,0,0,0,2690,2691,5,46,0,0,2691,601,1,0,0,0,2692,2698, - 5,39,0,0,2693,2694,5,39,0,0,2694,2697,5,39,0,0,2695,2697,8,26,0, - 0,2696,2693,1,0,0,0,2696,2695,1,0,0,0,2697,2700,1,0,0,0,2698,2696, - 1,0,0,0,2698,2699,1,0,0,0,2699,2701,1,0,0,0,2700,2698,1,0,0,0,2701, - 2702,5,39,0,0,2702,603,1,0,0,0,2703,2707,3,620,309,0,2704,2706,3, - 620,309,0,2705,2704,1,0,0,0,2706,2709,1,0,0,0,2707,2705,1,0,0,0, - 2707,2708,1,0,0,0,2708,605,1,0,0,0,2709,2707,1,0,0,0,2710,2712,3, - 620,309,0,2711,2710,1,0,0,0,2712,2713,1,0,0,0,2713,2711,1,0,0,0, - 2713,2714,1,0,0,0,2714,2715,1,0,0,0,2715,2719,5,46,0,0,2716,2718, - 3,620,309,0,2717,2716,1,0,0,0,2718,2721,1,0,0,0,2719,2717,1,0,0, - 0,2719,2720,1,0,0,0,2720,2731,1,0,0,0,2721,2719,1,0,0,0,2722,2724, - 7,7,0,0,2723,2725,7,27,0,0,2724,2723,1,0,0,0,2724,2725,1,0,0,0,2725, - 2727,1,0,0,0,2726,2728,3,620,309,0,2727,2726,1,0,0,0,2728,2729,1, - 0,0,0,2729,2727,1,0,0,0,2729,2730,1,0,0,0,2730,2732,1,0,0,0,2731, - 2722,1,0,0,0,2731,2732,1,0,0,0,2732,2771,1,0,0,0,2733,2734,5,46, - 0,0,2734,2738,3,620,309,0,2735,2737,3,620,309,0,2736,2735,1,0,0, - 0,2737,2740,1,0,0,0,2738,2736,1,0,0,0,2738,2739,1,0,0,0,2739,2750, - 1,0,0,0,2740,2738,1,0,0,0,2741,2743,7,7,0,0,2742,2744,7,27,0,0,2743, - 2742,1,0,0,0,2743,2744,1,0,0,0,2744,2746,1,0,0,0,2745,2747,3,620, - 309,0,2746,2745,1,0,0,0,2747,2748,1,0,0,0,2748,2746,1,0,0,0,2748, - 2749,1,0,0,0,2749,2751,1,0,0,0,2750,2741,1,0,0,0,2750,2751,1,0,0, - 0,2751,2771,1,0,0,0,2752,2756,3,620,309,0,2753,2755,3,620,309,0, - 2754,2753,1,0,0,0,2755,2758,1,0,0,0,2756,2754,1,0,0,0,2756,2757, - 1,0,0,0,2757,2768,1,0,0,0,2758,2756,1,0,0,0,2759,2761,7,7,0,0,2760, - 2762,7,27,0,0,2761,2760,1,0,0,0,2761,2762,1,0,0,0,2762,2764,1,0, - 0,0,2763,2765,3,620,309,0,2764,2763,1,0,0,0,2765,2766,1,0,0,0,2766, - 2764,1,0,0,0,2766,2767,1,0,0,0,2767,2769,1,0,0,0,2768,2759,1,0,0, - 0,2768,2769,1,0,0,0,2769,2771,1,0,0,0,2770,2711,1,0,0,0,2770,2733, - 1,0,0,0,2770,2752,1,0,0,0,2771,607,1,0,0,0,2772,2776,7,28,0,0,2773, - 2775,7,29,0,0,2774,2773,1,0,0,0,2775,2778,1,0,0,0,2776,2774,1,0, - 0,0,2776,2777,1,0,0,0,2777,609,1,0,0,0,2778,2776,1,0,0,0,2779,2785, - 5,34,0,0,2780,2781,5,34,0,0,2781,2784,5,34,0,0,2782,2784,8,30,0, - 0,2783,2780,1,0,0,0,2783,2782,1,0,0,0,2784,2787,1,0,0,0,2785,2783, - 1,0,0,0,2785,2786,1,0,0,0,2786,2788,1,0,0,0,2787,2785,1,0,0,0,2788, - 2789,5,34,0,0,2789,611,1,0,0,0,2790,2792,3,626,312,0,2791,2790,1, - 0,0,0,2792,2793,1,0,0,0,2793,2791,1,0,0,0,2793,2794,1,0,0,0,2794, - 2795,1,0,0,0,2795,2796,6,305,2,0,2796,613,1,0,0,0,2797,2798,5,45, - 0,0,2798,2799,5,45,0,0,2799,2803,1,0,0,0,2800,2802,8,31,0,0,2801, - 2800,1,0,0,0,2802,2805,1,0,0,0,2803,2801,1,0,0,0,2803,2804,1,0,0, - 0,2804,2807,1,0,0,0,2805,2803,1,0,0,0,2806,2808,5,13,0,0,2807,2806, - 1,0,0,0,2807,2808,1,0,0,0,2808,2810,1,0,0,0,2809,2811,5,10,0,0,2810, - 2809,1,0,0,0,2810,2811,1,0,0,0,2811,2812,1,0,0,0,2812,2813,6,306, - 2,0,2813,615,1,0,0,0,2814,2815,5,47,0,0,2815,2816,5,42,0,0,2816, - 2820,1,0,0,0,2817,2819,9,0,0,0,2818,2817,1,0,0,0,2819,2822,1,0,0, - 0,2820,2821,1,0,0,0,2820,2818,1,0,0,0,2821,2823,1,0,0,0,2822,2820, - 1,0,0,0,2823,2824,5,42,0,0,2824,2825,5,47,0,0,2825,2826,1,0,0,0, - 2826,2827,6,307,2,0,2827,617,1,0,0,0,2828,2829,9,0,0,0,2829,619, - 1,0,0,0,2830,2831,7,32,0,0,2831,621,1,0,0,0,2832,2833,7,33,0,0,2833, - 623,1,0,0,0,2834,2835,8,33,0,0,2835,625,1,0,0,0,2836,2837,7,34,0, - 0,2837,627,1,0,0,0,2838,2839,5,47,0,0,2839,2840,5,47,0,0,2840,2844, - 1,0,0,0,2841,2843,9,0,0,0,2842,2841,1,0,0,0,2843,2846,1,0,0,0,2844, - 2845,1,0,0,0,2844,2842,1,0,0,0,2845,2849,1,0,0,0,2846,2844,1,0,0, - 0,2847,2850,3,644,321,0,2848,2850,5,0,0,1,2849,2847,1,0,0,0,2849, - 2848,1,0,0,0,2850,2851,1,0,0,0,2851,2852,6,313,0,0,2852,629,1,0, - 0,0,2853,2854,5,47,0,0,2854,2855,5,42,0,0,2855,2859,1,0,0,0,2856, - 2858,9,0,0,0,2857,2856,1,0,0,0,2858,2861,1,0,0,0,2859,2860,1,0,0, - 0,2859,2857,1,0,0,0,2860,2862,1,0,0,0,2861,2859,1,0,0,0,2862,2863, - 5,42,0,0,2863,2864,5,47,0,0,2864,2865,1,0,0,0,2865,2866,6,314,0, - 0,2866,631,1,0,0,0,2867,2872,3,660,329,0,2868,2871,3,666,332,0,2869, - 2871,3,612,305,0,2870,2868,1,0,0,0,2870,2869,1,0,0,0,2871,2874,1, - 0,0,0,2872,2870,1,0,0,0,2872,2873,1,0,0,0,2873,2876,1,0,0,0,2874, - 2872,1,0,0,0,2875,2877,3,664,331,0,2876,2875,1,0,0,0,2876,2877,1, - 0,0,0,2877,2881,1,0,0,0,2878,2880,3,612,305,0,2879,2878,1,0,0,0, - 2880,2883,1,0,0,0,2881,2879,1,0,0,0,2881,2882,1,0,0,0,2882,2884, - 1,0,0,0,2883,2881,1,0,0,0,2884,2885,3,662,330,0,2885,2886,1,0,0, - 0,2886,2887,6,315,0,0,2887,633,1,0,0,0,2888,2889,3,646,322,0,2889, - 2890,3,650,324,0,2890,2891,3,646,322,0,2891,2892,1,0,0,0,2892,2893, - 6,316,0,0,2893,635,1,0,0,0,2894,2895,3,648,323,0,2895,2896,3,652, - 325,0,2896,2897,3,648,323,0,2897,2898,1,0,0,0,2898,2899,6,317,0, - 0,2899,637,1,0,0,0,2900,2901,3,692,345,0,2901,2902,3,674,336,0,2902, - 2903,3,692,345,0,2903,2904,1,0,0,0,2904,2905,6,318,0,0,2905,639, - 1,0,0,0,2906,2907,5,96,0,0,2907,2908,1,0,0,0,2908,2909,6,319,3,0, - 2909,641,1,0,0,0,2910,2911,9,0,0,0,2911,2912,1,0,0,0,2912,2913,6, - 320,0,0,2913,643,1,0,0,0,2914,2915,5,13,0,0,2915,2918,5,10,0,0,2916, - 2918,7,31,0,0,2917,2914,1,0,0,0,2917,2916,1,0,0,0,2918,645,1,0,0, - 0,2919,2920,5,34,0,0,2920,647,1,0,0,0,2921,2922,5,39,0,0,2922,2923, - 5,39,0,0,2923,2924,5,39,0,0,2924,649,1,0,0,0,2925,2928,3,658,328, - 0,2926,2928,3,654,326,0,2927,2925,1,0,0,0,2927,2926,1,0,0,0,2928, - 2931,1,0,0,0,2929,2927,1,0,0,0,2929,2930,1,0,0,0,2930,651,1,0,0, - 0,2931,2929,1,0,0,0,2932,2935,3,658,328,0,2933,2935,3,656,327,0, - 2934,2932,1,0,0,0,2934,2933,1,0,0,0,2935,2938,1,0,0,0,2936,2937, - 1,0,0,0,2936,2934,1,0,0,0,2937,653,1,0,0,0,2938,2936,1,0,0,0,2939, - 2942,7,35,0,0,2940,2942,3,690,344,0,2941,2939,1,0,0,0,2941,2940, - 1,0,0,0,2942,655,1,0,0,0,2943,2946,7,36,0,0,2944,2946,3,612,305, - 0,2945,2943,1,0,0,0,2945,2944,1,0,0,0,2946,657,1,0,0,0,2947,2951, - 3,678,338,0,2948,2951,3,682,340,0,2949,2951,3,684,341,0,2950,2947, - 1,0,0,0,2950,2948,1,0,0,0,2950,2949,1,0,0,0,2951,659,1,0,0,0,2952, - 2953,5,123,0,0,2953,2954,5,123,0,0,2954,661,1,0,0,0,2955,2956,5, - 125,0,0,2956,2957,5,125,0,0,2957,663,1,0,0,0,2958,2961,3,668,333, - 0,2959,2961,3,670,334,0,2960,2958,1,0,0,0,2960,2959,1,0,0,0,2961, - 665,1,0,0,0,2962,2966,3,672,335,0,2963,2965,3,612,305,0,2964,2963, - 1,0,0,0,2965,2968,1,0,0,0,2966,2964,1,0,0,0,2966,2967,1,0,0,0,2967, - 2969,1,0,0,0,2968,2966,1,0,0,0,2969,2973,3,672,335,0,2970,2972,3, - 612,305,0,2971,2970,1,0,0,0,2972,2975,1,0,0,0,2973,2971,1,0,0,0, - 2973,2974,1,0,0,0,2974,2976,1,0,0,0,2975,2973,1,0,0,0,2976,2980, - 3,672,335,0,2977,2979,3,612,305,0,2978,2977,1,0,0,0,2979,2982,1, - 0,0,0,2980,2978,1,0,0,0,2980,2981,1,0,0,0,2981,2983,1,0,0,0,2982, - 2980,1,0,0,0,2983,2984,3,672,335,0,2984,667,1,0,0,0,2985,2989,3, - 672,335,0,2986,2988,3,612,305,0,2987,2986,1,0,0,0,2988,2991,1,0, - 0,0,2989,2987,1,0,0,0,2989,2990,1,0,0,0,2990,2992,1,0,0,0,2991,2989, - 1,0,0,0,2992,2996,3,672,335,0,2993,2995,3,612,305,0,2994,2993,1, - 0,0,0,2995,2998,1,0,0,0,2996,2994,1,0,0,0,2996,2997,1,0,0,0,2997, - 2999,1,0,0,0,2998,2996,1,0,0,0,2999,3003,3,672,335,0,3000,3002,3, - 612,305,0,3001,3000,1,0,0,0,3002,3005,1,0,0,0,3003,3001,1,0,0,0, - 3003,3004,1,0,0,0,3004,3006,1,0,0,0,3005,3003,1,0,0,0,3006,3007, - 5,61,0,0,3007,669,1,0,0,0,3008,3012,3,672,335,0,3009,3011,3,612, - 305,0,3010,3009,1,0,0,0,3011,3014,1,0,0,0,3012,3010,1,0,0,0,3012, - 3013,1,0,0,0,3013,3015,1,0,0,0,3014,3012,1,0,0,0,3015,3019,3,672, - 335,0,3016,3018,3,612,305,0,3017,3016,1,0,0,0,3018,3021,1,0,0,0, - 3019,3017,1,0,0,0,3019,3020,1,0,0,0,3020,3022,1,0,0,0,3021,3019, - 1,0,0,0,3022,3026,5,61,0,0,3023,3025,3,612,305,0,3024,3023,1,0,0, - 0,3025,3028,1,0,0,0,3026,3024,1,0,0,0,3026,3027,1,0,0,0,3027,3029, - 1,0,0,0,3028,3026,1,0,0,0,3029,3030,5,61,0,0,3030,671,1,0,0,0,3031, - 3032,7,37,0,0,3032,673,1,0,0,0,3033,3036,3,658,328,0,3034,3036,3, - 676,337,0,3035,3033,1,0,0,0,3035,3034,1,0,0,0,3036,3039,1,0,0,0, - 3037,3035,1,0,0,0,3037,3038,1,0,0,0,3038,675,1,0,0,0,3039,3037,1, - 0,0,0,3040,3043,7,38,0,0,3041,3043,3,690,344,0,3042,3040,1,0,0,0, - 3042,3041,1,0,0,0,3043,677,1,0,0,0,3044,3045,5,92,0,0,3045,3046, - 3,680,339,0,3046,679,1,0,0,0,3047,3050,7,39,0,0,3048,3050,3,644, - 321,0,3049,3047,1,0,0,0,3049,3048,1,0,0,0,3050,681,1,0,0,0,3051, - 3052,5,92,0,0,3052,3053,7,23,0,0,3053,3054,1,0,0,0,3054,3055,3,688, - 343,0,3055,3056,3,688,343,0,3056,683,1,0,0,0,3057,3058,5,92,0,0, - 3058,3059,7,5,0,0,3059,3060,1,0,0,0,3060,3079,3,686,342,0,3061,3062, - 5,92,0,0,3062,3063,7,5,0,0,3063,3064,5,48,0,0,3064,3065,5,48,0,0, - 3065,3066,5,48,0,0,3066,3067,1,0,0,0,3067,3068,3,686,342,0,3068, - 3069,3,688,343,0,3069,3079,1,0,0,0,3070,3071,5,92,0,0,3071,3072, - 7,5,0,0,3072,3073,5,48,0,0,3073,3074,5,48,0,0,3074,3075,5,49,0,0, - 3075,3076,5,48,0,0,3076,3077,1,0,0,0,3077,3079,3,686,342,0,3078, - 3057,1,0,0,0,3078,3061,1,0,0,0,3078,3070,1,0,0,0,3079,685,1,0,0, - 0,3080,3081,3,688,343,0,3081,3082,3,688,343,0,3082,3083,3,688,343, - 0,3083,3084,3,688,343,0,3084,687,1,0,0,0,3085,3086,7,40,0,0,3086, - 689,1,0,0,0,3087,3088,7,41,0,0,3088,691,1,0,0,0,3089,3090,5,39,0, - 0,3090,693,1,0,0,0,58,0,1,2652,2696,2698,2707,2713,2719,2724,2729, - 2731,2738,2743,2748,2750,2756,2761,2766,2768,2770,2776,2783,2785, - 2793,2803,2807,2810,2820,2844,2849,2859,2870,2872,2876,2881,2917, - 2927,2929,2934,2936,2941,2945,2950,2960,2966,2973,2980,2989,2996, - 3003,3012,3019,3026,3035,3037,3042,3049,3078,4,3,0,0,5,1,0,0,1,0, + 0,39,39,2,0,43,43,45,45,4,0,36,36,65,90,95,95,97,122,6,0,36,36,45, + 45,48,57,65,90,95,95,97,122,1,0,34,34,2,0,10,10,13,13,1,0,48,57, + 2,0,65,90,97,122,3,0,9,10,13,13,32,32,3,0,32,33,35,91,93,65535,2, + 0,32,91,93,65535,4,0,43,43,47,57,65,90,97,122,3,0,32,38,40,91,93, + 65535,17,0,34,34,39,39,47,48,63,63,65,66,70,70,78,78,82,82,84,84, + 86,86,92,92,97,98,102,102,110,110,114,114,116,116,118,118,3,0,48, + 57,65,70,97,102,3,0,9,9,11,12,32,32,3130,0,2,1,0,0,0,0,4,1,0,0,0, + 0,6,1,0,0,0,0,8,1,0,0,0,0,10,1,0,0,0,0,12,1,0,0,0,0,14,1,0,0,0,0, + 16,1,0,0,0,0,18,1,0,0,0,0,20,1,0,0,0,0,22,1,0,0,0,0,24,1,0,0,0,0, + 26,1,0,0,0,0,28,1,0,0,0,0,30,1,0,0,0,0,32,1,0,0,0,0,34,1,0,0,0,0, + 36,1,0,0,0,0,38,1,0,0,0,0,40,1,0,0,0,0,42,1,0,0,0,0,44,1,0,0,0,0, + 46,1,0,0,0,0,48,1,0,0,0,0,50,1,0,0,0,0,52,1,0,0,0,0,54,1,0,0,0,0, + 56,1,0,0,0,0,58,1,0,0,0,0,60,1,0,0,0,0,62,1,0,0,0,0,64,1,0,0,0,0, + 66,1,0,0,0,0,68,1,0,0,0,0,70,1,0,0,0,0,72,1,0,0,0,0,74,1,0,0,0,0, + 76,1,0,0,0,0,78,1,0,0,0,0,80,1,0,0,0,0,82,1,0,0,0,0,84,1,0,0,0,0, + 86,1,0,0,0,0,88,1,0,0,0,0,90,1,0,0,0,0,92,1,0,0,0,0,94,1,0,0,0,0, + 96,1,0,0,0,0,98,1,0,0,0,0,100,1,0,0,0,0,102,1,0,0,0,0,104,1,0,0, + 0,0,106,1,0,0,0,0,108,1,0,0,0,0,110,1,0,0,0,0,112,1,0,0,0,0,114, + 1,0,0,0,0,116,1,0,0,0,0,118,1,0,0,0,0,120,1,0,0,0,0,122,1,0,0,0, + 0,124,1,0,0,0,0,126,1,0,0,0,0,128,1,0,0,0,0,130,1,0,0,0,0,132,1, + 0,0,0,0,134,1,0,0,0,0,136,1,0,0,0,0,138,1,0,0,0,0,140,1,0,0,0,0, + 142,1,0,0,0,0,144,1,0,0,0,0,146,1,0,0,0,0,148,1,0,0,0,0,150,1,0, + 0,0,0,152,1,0,0,0,0,154,1,0,0,0,0,156,1,0,0,0,0,158,1,0,0,0,0,160, + 1,0,0,0,0,162,1,0,0,0,0,164,1,0,0,0,0,166,1,0,0,0,0,168,1,0,0,0, + 0,170,1,0,0,0,0,172,1,0,0,0,0,174,1,0,0,0,0,176,1,0,0,0,0,178,1, + 0,0,0,0,180,1,0,0,0,0,182,1,0,0,0,0,184,1,0,0,0,0,186,1,0,0,0,0, + 188,1,0,0,0,0,190,1,0,0,0,0,192,1,0,0,0,0,194,1,0,0,0,0,196,1,0, + 0,0,0,198,1,0,0,0,0,200,1,0,0,0,0,202,1,0,0,0,0,204,1,0,0,0,0,206, + 1,0,0,0,0,208,1,0,0,0,0,210,1,0,0,0,0,212,1,0,0,0,0,214,1,0,0,0, + 0,216,1,0,0,0,0,218,1,0,0,0,0,220,1,0,0,0,0,222,1,0,0,0,0,224,1, + 0,0,0,0,226,1,0,0,0,0,228,1,0,0,0,0,230,1,0,0,0,0,232,1,0,0,0,0, + 234,1,0,0,0,0,236,1,0,0,0,0,238,1,0,0,0,0,240,1,0,0,0,0,242,1,0, + 0,0,0,244,1,0,0,0,0,246,1,0,0,0,0,248,1,0,0,0,0,250,1,0,0,0,0,252, + 1,0,0,0,0,254,1,0,0,0,0,256,1,0,0,0,0,258,1,0,0,0,0,260,1,0,0,0, + 0,262,1,0,0,0,0,264,1,0,0,0,0,266,1,0,0,0,0,268,1,0,0,0,0,270,1, + 0,0,0,0,272,1,0,0,0,0,274,1,0,0,0,0,276,1,0,0,0,0,278,1,0,0,0,0, + 280,1,0,0,0,0,282,1,0,0,0,0,284,1,0,0,0,0,286,1,0,0,0,0,288,1,0, + 0,0,0,290,1,0,0,0,0,292,1,0,0,0,0,294,1,0,0,0,0,296,1,0,0,0,0,298, + 1,0,0,0,0,300,1,0,0,0,0,302,1,0,0,0,0,304,1,0,0,0,0,306,1,0,0,0, + 0,308,1,0,0,0,0,310,1,0,0,0,0,312,1,0,0,0,0,314,1,0,0,0,0,316,1, + 0,0,0,0,318,1,0,0,0,0,320,1,0,0,0,0,322,1,0,0,0,0,324,1,0,0,0,0, + 326,1,0,0,0,0,328,1,0,0,0,0,330,1,0,0,0,0,332,1,0,0,0,0,334,1,0, + 0,0,0,336,1,0,0,0,0,338,1,0,0,0,0,340,1,0,0,0,0,342,1,0,0,0,0,344, + 1,0,0,0,0,346,1,0,0,0,0,348,1,0,0,0,0,350,1,0,0,0,0,352,1,0,0,0, + 0,354,1,0,0,0,0,356,1,0,0,0,0,358,1,0,0,0,0,360,1,0,0,0,0,362,1, + 0,0,0,0,364,1,0,0,0,0,366,1,0,0,0,0,368,1,0,0,0,0,370,1,0,0,0,0, + 372,1,0,0,0,0,374,1,0,0,0,0,376,1,0,0,0,0,378,1,0,0,0,0,380,1,0, + 0,0,0,382,1,0,0,0,0,384,1,0,0,0,0,386,1,0,0,0,0,388,1,0,0,0,0,390, + 1,0,0,0,0,392,1,0,0,0,0,394,1,0,0,0,0,396,1,0,0,0,0,398,1,0,0,0, + 0,400,1,0,0,0,0,402,1,0,0,0,0,404,1,0,0,0,0,406,1,0,0,0,0,408,1, + 0,0,0,0,410,1,0,0,0,0,412,1,0,0,0,0,414,1,0,0,0,0,416,1,0,0,0,0, + 418,1,0,0,0,0,420,1,0,0,0,0,422,1,0,0,0,0,424,1,0,0,0,0,426,1,0, + 0,0,0,428,1,0,0,0,0,430,1,0,0,0,0,432,1,0,0,0,0,434,1,0,0,0,0,436, + 1,0,0,0,0,438,1,0,0,0,0,440,1,0,0,0,0,442,1,0,0,0,0,444,1,0,0,0, + 0,446,1,0,0,0,0,448,1,0,0,0,0,450,1,0,0,0,0,452,1,0,0,0,0,454,1, + 0,0,0,0,456,1,0,0,0,0,458,1,0,0,0,0,460,1,0,0,0,0,462,1,0,0,0,0, + 464,1,0,0,0,0,466,1,0,0,0,0,468,1,0,0,0,0,470,1,0,0,0,0,472,1,0, + 0,0,0,474,1,0,0,0,0,476,1,0,0,0,0,478,1,0,0,0,0,480,1,0,0,0,0,482, + 1,0,0,0,0,484,1,0,0,0,0,486,1,0,0,0,0,488,1,0,0,0,0,490,1,0,0,0, + 0,492,1,0,0,0,0,494,1,0,0,0,0,496,1,0,0,0,0,498,1,0,0,0,0,500,1, + 0,0,0,0,502,1,0,0,0,0,504,1,0,0,0,0,506,1,0,0,0,0,508,1,0,0,0,0, + 510,1,0,0,0,0,512,1,0,0,0,0,514,1,0,0,0,0,516,1,0,0,0,0,518,1,0, + 0,0,0,520,1,0,0,0,0,522,1,0,0,0,0,524,1,0,0,0,0,526,1,0,0,0,0,528, + 1,0,0,0,0,530,1,0,0,0,0,532,1,0,0,0,0,534,1,0,0,0,0,536,1,0,0,0, + 0,538,1,0,0,0,0,540,1,0,0,0,0,542,1,0,0,0,0,544,1,0,0,0,0,546,1, + 0,0,0,0,548,1,0,0,0,0,550,1,0,0,0,0,552,1,0,0,0,0,554,1,0,0,0,0, + 556,1,0,0,0,0,558,1,0,0,0,0,560,1,0,0,0,0,562,1,0,0,0,0,564,1,0, + 0,0,0,566,1,0,0,0,0,568,1,0,0,0,0,570,1,0,0,0,0,572,1,0,0,0,0,574, + 1,0,0,0,0,576,1,0,0,0,0,578,1,0,0,0,0,580,1,0,0,0,0,582,1,0,0,0, + 0,584,1,0,0,0,0,586,1,0,0,0,0,588,1,0,0,0,0,590,1,0,0,0,0,592,1, + 0,0,0,0,594,1,0,0,0,0,596,1,0,0,0,0,598,1,0,0,0,0,600,1,0,0,0,0, + 602,1,0,0,0,0,604,1,0,0,0,0,606,1,0,0,0,0,608,1,0,0,0,0,610,1,0, + 0,0,0,612,1,0,0,0,0,614,1,0,0,0,0,616,1,0,0,0,0,618,1,0,0,0,0,620, + 1,0,0,0,1,630,1,0,0,0,1,632,1,0,0,0,1,634,1,0,0,0,1,636,1,0,0,0, + 1,638,1,0,0,0,1,640,1,0,0,0,1,642,1,0,0,0,1,644,1,0,0,0,2,696,1, + 0,0,0,4,705,1,0,0,0,6,712,1,0,0,0,8,716,1,0,0,0,10,720,1,0,0,0,12, + 729,1,0,0,0,14,735,1,0,0,0,16,739,1,0,0,0,18,743,1,0,0,0,20,747, + 1,0,0,0,22,750,1,0,0,0,24,754,1,0,0,0,26,764,1,0,0,0,28,767,1,0, + 0,0,30,781,1,0,0,0,32,785,1,0,0,0,34,791,1,0,0,0,36,799,1,0,0,0, + 38,803,1,0,0,0,40,814,1,0,0,0,42,817,1,0,0,0,44,825,1,0,0,0,46,834, + 1,0,0,0,48,839,1,0,0,0,50,844,1,0,0,0,52,852,1,0,0,0,54,857,1,0, + 0,0,56,867,1,0,0,0,58,884,1,0,0,0,60,896,1,0,0,0,62,902,1,0,0,0, + 64,908,1,0,0,0,66,917,1,0,0,0,68,925,1,0,0,0,70,935,1,0,0,0,72,942, + 1,0,0,0,74,949,1,0,0,0,76,957,1,0,0,0,78,968,1,0,0,0,80,979,1,0, + 0,0,82,991,1,0,0,0,84,1000,1,0,0,0,86,1008,1,0,0,0,88,1022,1,0,0, + 0,90,1028,1,0,0,0,92,1035,1,0,0,0,94,1041,1,0,0,0,96,1049,1,0,0, + 0,98,1062,1,0,0,0,100,1075,1,0,0,0,102,1093,1,0,0,0,104,1106,1,0, + 0,0,106,1113,1,0,0,0,108,1118,1,0,0,0,110,1127,1,0,0,0,112,1138, + 1,0,0,0,114,1142,1,0,0,0,116,1150,1,0,0,0,118,1158,1,0,0,0,120,1166, + 1,0,0,0,122,1177,1,0,0,0,124,1186,1,0,0,0,126,1193,1,0,0,0,128,1198, + 1,0,0,0,130,1207,1,0,0,0,132,1218,1,0,0,0,134,1230,1,0,0,0,136,1241, + 1,0,0,0,138,1250,1,0,0,0,140,1257,1,0,0,0,142,1264,1,0,0,0,144,1269, + 1,0,0,0,146,1274,1,0,0,0,148,1278,1,0,0,0,150,1287,1,0,0,0,152,1294, + 1,0,0,0,154,1300,1,0,0,0,156,1307,1,0,0,0,158,1317,1,0,0,0,160,1325, + 1,0,0,0,162,1334,1,0,0,0,164,1339,1,0,0,0,166,1347,1,0,0,0,168,1354, + 1,0,0,0,170,1362,1,0,0,0,172,1371,1,0,0,0,174,1379,1,0,0,0,176,1388, + 1,0,0,0,178,1398,1,0,0,0,180,1404,1,0,0,0,182,1410,1,0,0,0,184,1416, + 1,0,0,0,186,1422,1,0,0,0,188,1426,1,0,0,0,190,1434,1,0,0,0,192,1440, + 1,0,0,0,194,1445,1,0,0,0,196,1450,1,0,0,0,198,1454,1,0,0,0,200,1461, + 1,0,0,0,202,1464,1,0,0,0,204,1469,1,0,0,0,206,1475,1,0,0,0,208,1481, + 1,0,0,0,210,1488,1,0,0,0,212,1497,1,0,0,0,214,1507,1,0,0,0,216,1510, + 1,0,0,0,218,1520,1,0,0,0,220,1530,1,0,0,0,222,1536,1,0,0,0,224,1542, + 1,0,0,0,226,1554,1,0,0,0,228,1561,1,0,0,0,230,1565,1,0,0,0,232,1573, + 1,0,0,0,234,1583,1,0,0,0,236,1592,1,0,0,0,238,1597,1,0,0,0,240,1600, + 1,0,0,0,242,1610,1,0,0,0,244,1615,1,0,0,0,246,1619,1,0,0,0,248,1628, + 1,0,0,0,250,1633,1,0,0,0,252,1641,1,0,0,0,254,1646,1,0,0,0,256,1652, + 1,0,0,0,258,1657,1,0,0,0,260,1663,1,0,0,0,262,1669,1,0,0,0,264,1675, + 1,0,0,0,266,1679,1,0,0,0,268,1683,1,0,0,0,270,1690,1,0,0,0,272,1696, + 1,0,0,0,274,1705,1,0,0,0,276,1713,1,0,0,0,278,1719,1,0,0,0,280,1724, + 1,0,0,0,282,1727,1,0,0,0,284,1731,1,0,0,0,286,1736,1,0,0,0,288,1742, + 1,0,0,0,290,1749,1,0,0,0,292,1757,1,0,0,0,294,1770,1,0,0,0,296,1773, + 1,0,0,0,298,1776,1,0,0,0,300,1781,1,0,0,0,302,1786,1,0,0,0,304,1793, + 1,0,0,0,306,1796,1,0,0,0,308,1802,1,0,0,0,310,1808,1,0,0,0,312,1815, + 1,0,0,0,314,1824,1,0,0,0,316,1832,1,0,0,0,318,1836,1,0,0,0,320,1844, + 1,0,0,0,322,1852,1,0,0,0,324,1861,1,0,0,0,326,1871,1,0,0,0,328,1879, + 1,0,0,0,330,1888,1,0,0,0,332,1896,1,0,0,0,334,1902,1,0,0,0,336,1913, + 1,0,0,0,338,1923,1,0,0,0,340,1930,1,0,0,0,342,1935,1,0,0,0,344,1940, + 1,0,0,0,346,1951,1,0,0,0,348,1960,1,0,0,0,350,1968,1,0,0,0,352,1977, + 1,0,0,0,354,1984,1,0,0,0,356,1990,1,0,0,0,358,1999,1,0,0,0,360,2004, + 1,0,0,0,362,2011,1,0,0,0,364,2018,1,0,0,0,366,2026,1,0,0,0,368,2033, + 1,0,0,0,370,2041,1,0,0,0,372,2054,1,0,0,0,374,2058,1,0,0,0,376,2067, + 1,0,0,0,378,2072,1,0,0,0,380,2081,1,0,0,0,382,2086,1,0,0,0,384,2092, + 1,0,0,0,386,2096,1,0,0,0,388,2104,1,0,0,0,390,2113,1,0,0,0,392,2122, + 1,0,0,0,394,2132,1,0,0,0,396,2136,1,0,0,0,398,2148,1,0,0,0,400,2154, + 1,0,0,0,402,2164,1,0,0,0,404,2169,1,0,0,0,406,2174,1,0,0,0,408,2184, + 1,0,0,0,410,2187,1,0,0,0,412,2199,1,0,0,0,414,2209,1,0,0,0,416,2221, + 1,0,0,0,418,2226,1,0,0,0,420,2231,1,0,0,0,422,2237,1,0,0,0,424,2244, + 1,0,0,0,426,2252,1,0,0,0,428,2259,1,0,0,0,430,2265,1,0,0,0,432,2272, + 1,0,0,0,434,2278,1,0,0,0,436,2283,1,0,0,0,438,2289,1,0,0,0,440,2295, + 1,0,0,0,442,2302,1,0,0,0,444,2310,1,0,0,0,446,2318,1,0,0,0,448,2323, + 1,0,0,0,450,2328,1,0,0,0,452,2337,1,0,0,0,454,2343,1,0,0,0,456,2348, + 1,0,0,0,458,2353,1,0,0,0,460,2359,1,0,0,0,462,2364,1,0,0,0,464,2368, + 1,0,0,0,466,2373,1,0,0,0,468,2378,1,0,0,0,470,2388,1,0,0,0,472,2397, + 1,0,0,0,474,2415,1,0,0,0,476,2423,1,0,0,0,478,2429,1,0,0,0,480,2437, + 1,0,0,0,482,2443,1,0,0,0,484,2450,1,0,0,0,486,2457,1,0,0,0,488,2463, + 1,0,0,0,490,2467,1,0,0,0,492,2476,1,0,0,0,494,2479,1,0,0,0,496,2489, + 1,0,0,0,498,2498,1,0,0,0,500,2502,1,0,0,0,502,2506,1,0,0,0,504,2514, + 1,0,0,0,506,2520,1,0,0,0,508,2529,1,0,0,0,510,2534,1,0,0,0,512,2543, + 1,0,0,0,514,2548,1,0,0,0,516,2557,1,0,0,0,518,2562,1,0,0,0,520,2569, + 1,0,0,0,522,2574,1,0,0,0,524,2582,1,0,0,0,526,2589,1,0,0,0,528,2596, + 1,0,0,0,530,2601,1,0,0,0,532,2606,1,0,0,0,534,2613,1,0,0,0,536,2618, + 1,0,0,0,538,2623,1,0,0,0,540,2627,1,0,0,0,542,2629,1,0,0,0,544,2631, + 1,0,0,0,546,2633,1,0,0,0,548,2635,1,0,0,0,550,2637,1,0,0,0,552,2639, + 1,0,0,0,554,2641,1,0,0,0,556,2643,1,0,0,0,558,2645,1,0,0,0,560,2647, + 1,0,0,0,562,2649,1,0,0,0,564,2651,1,0,0,0,566,2654,1,0,0,0,568,2657, + 1,0,0,0,570,2663,1,0,0,0,572,2665,1,0,0,0,574,2668,1,0,0,0,576,2670, + 1,0,0,0,578,2672,1,0,0,0,580,2675,1,0,0,0,582,2678,1,0,0,0,584,2680, + 1,0,0,0,586,2682,1,0,0,0,588,2684,1,0,0,0,590,2686,1,0,0,0,592,2688, + 1,0,0,0,594,2690,1,0,0,0,596,2695,1,0,0,0,598,2697,1,0,0,0,600,2699, + 1,0,0,0,602,2701,1,0,0,0,604,2703,1,0,0,0,606,2714,1,0,0,0,608,2781, + 1,0,0,0,610,2783,1,0,0,0,612,2790,1,0,0,0,614,2802,1,0,0,0,616,2808, + 1,0,0,0,618,2825,1,0,0,0,620,2839,1,0,0,0,622,2841,1,0,0,0,624,2843, + 1,0,0,0,626,2845,1,0,0,0,628,2847,1,0,0,0,630,2849,1,0,0,0,632,2864, + 1,0,0,0,634,2878,1,0,0,0,636,2899,1,0,0,0,638,2905,1,0,0,0,640,2911, + 1,0,0,0,642,2917,1,0,0,0,644,2921,1,0,0,0,646,2928,1,0,0,0,648,2930, + 1,0,0,0,650,2932,1,0,0,0,652,2940,1,0,0,0,654,2947,1,0,0,0,656,2952, + 1,0,0,0,658,2956,1,0,0,0,660,2961,1,0,0,0,662,2963,1,0,0,0,664,2966, + 1,0,0,0,666,2971,1,0,0,0,668,2973,1,0,0,0,670,2996,1,0,0,0,672,3019, + 1,0,0,0,674,3042,1,0,0,0,676,3048,1,0,0,0,678,3053,1,0,0,0,680,3055, + 1,0,0,0,682,3060,1,0,0,0,684,3062,1,0,0,0,686,3089,1,0,0,0,688,3091, + 1,0,0,0,690,3096,1,0,0,0,692,3098,1,0,0,0,694,3100,1,0,0,0,696,697, + 7,0,0,0,697,698,7,1,0,0,698,699,7,2,0,0,699,700,7,3,0,0,700,701, + 7,4,0,0,701,702,7,5,0,0,702,703,7,6,0,0,703,704,7,7,0,0,704,3,1, + 0,0,0,705,706,7,0,0,0,706,707,7,8,0,0,707,708,7,6,0,0,708,709,7, + 9,0,0,709,710,7,3,0,0,710,711,7,10,0,0,711,5,1,0,0,0,712,713,7,0, + 0,0,713,714,7,11,0,0,714,715,7,11,0,0,715,7,1,0,0,0,716,717,7,0, + 0,0,717,718,7,4,0,0,718,719,7,4,0,0,719,9,1,0,0,0,720,721,7,0,0, + 0,721,722,7,4,0,0,722,723,7,4,0,0,723,724,7,3,0,0,724,725,7,8,0, + 0,725,726,7,0,0,0,726,727,7,6,0,0,727,728,7,7,0,0,728,11,1,0,0,0, + 729,730,7,0,0,0,730,731,7,4,0,0,731,732,7,6,0,0,732,733,7,7,0,0, + 733,734,7,12,0,0,734,13,1,0,0,0,735,736,7,0,0,0,736,737,7,10,0,0, + 737,738,7,11,0,0,738,15,1,0,0,0,739,740,7,0,0,0,740,741,7,10,0,0, + 741,742,7,13,0,0,742,17,1,0,0,0,743,744,7,0,0,0,744,745,7,12,0,0, + 745,746,7,7,0,0,746,19,1,0,0,0,747,748,7,0,0,0,748,749,7,2,0,0,749, + 21,1,0,0,0,750,751,7,0,0,0,751,752,7,2,0,0,752,753,7,8,0,0,753,23, + 1,0,0,0,754,755,7,0,0,0,755,756,7,2,0,0,756,757,7,2,0,0,757,758, + 7,7,0,0,758,759,7,12,0,0,759,760,7,6,0,0,760,761,7,9,0,0,761,762, + 7,3,0,0,762,763,7,10,0,0,763,25,1,0,0,0,764,765,7,0,0,0,765,766, + 7,6,0,0,766,27,1,0,0,0,767,768,7,0,0,0,768,769,7,5,0,0,769,770,7, + 6,0,0,770,771,7,14,0,0,771,772,7,3,0,0,772,773,7,12,0,0,773,774, + 7,9,0,0,774,775,7,15,0,0,775,776,7,0,0,0,776,777,7,6,0,0,777,778, + 7,9,0,0,778,779,7,3,0,0,779,780,7,10,0,0,780,29,1,0,0,0,781,782, + 7,0,0,0,782,783,7,16,0,0,783,784,7,17,0,0,784,31,1,0,0,0,785,786, + 7,1,0,0,786,787,7,7,0,0,787,788,7,17,0,0,788,789,7,9,0,0,789,790, + 7,10,0,0,790,33,1,0,0,0,791,792,7,1,0,0,792,793,7,7,0,0,793,794, + 7,6,0,0,794,795,7,18,0,0,795,796,7,7,0,0,796,797,7,7,0,0,797,798, + 7,10,0,0,798,35,1,0,0,0,799,800,7,1,0,0,800,801,7,9,0,0,801,802, + 7,6,0,0,802,37,1,0,0,0,803,804,7,1,0,0,804,805,7,9,0,0,805,806,7, + 6,0,0,806,807,5,95,0,0,807,808,7,4,0,0,808,809,7,7,0,0,809,810,7, + 10,0,0,810,811,7,17,0,0,811,812,7,6,0,0,812,813,7,14,0,0,813,39, + 1,0,0,0,814,815,7,1,0,0,815,816,7,13,0,0,816,41,1,0,0,0,817,818, + 7,8,0,0,818,819,7,0,0,0,819,820,7,2,0,0,820,821,7,8,0,0,821,822, + 7,0,0,0,822,823,7,11,0,0,823,824,7,7,0,0,824,43,1,0,0,0,825,826, + 7,8,0,0,826,827,7,0,0,0,827,828,7,2,0,0,828,829,7,8,0,0,829,830, + 7,0,0,0,830,831,7,11,0,0,831,832,7,7,0,0,832,833,7,11,0,0,833,45, + 1,0,0,0,834,835,7,8,0,0,835,836,7,0,0,0,836,837,7,2,0,0,837,838, + 7,7,0,0,838,47,1,0,0,0,839,840,7,8,0,0,840,841,7,0,0,0,841,842,7, + 2,0,0,842,843,7,6,0,0,843,49,1,0,0,0,844,845,7,8,0,0,845,846,7,0, + 0,0,846,847,7,6,0,0,847,848,7,0,0,0,848,849,7,4,0,0,849,850,7,3, + 0,0,850,851,7,17,0,0,851,51,1,0,0,0,852,853,7,8,0,0,853,854,7,14, + 0,0,854,855,7,0,0,0,855,856,7,12,0,0,856,53,1,0,0,0,857,858,7,8, + 0,0,858,859,7,14,0,0,859,860,7,0,0,0,860,861,7,12,0,0,861,862,7, + 0,0,0,862,863,7,8,0,0,863,864,7,6,0,0,864,865,7,7,0,0,865,866,7, + 12,0,0,866,55,1,0,0,0,867,868,7,8,0,0,868,869,7,14,0,0,869,870,7, + 0,0,0,870,871,7,12,0,0,871,872,7,0,0,0,872,873,7,8,0,0,873,874,7, + 6,0,0,874,875,7,7,0,0,875,876,7,12,0,0,876,877,5,95,0,0,877,878, + 7,4,0,0,878,879,7,7,0,0,879,880,7,10,0,0,880,881,7,17,0,0,881,882, + 7,6,0,0,882,883,7,14,0,0,883,57,1,0,0,0,884,885,7,8,0,0,885,886, + 7,14,0,0,886,887,7,0,0,0,887,888,7,12,0,0,888,889,5,95,0,0,889,890, + 7,4,0,0,890,891,7,7,0,0,891,892,7,10,0,0,892,893,7,17,0,0,893,894, + 7,6,0,0,894,895,7,14,0,0,895,59,1,0,0,0,896,897,7,8,0,0,897,898, + 7,14,0,0,898,899,7,7,0,0,899,900,7,8,0,0,900,901,7,19,0,0,901,61, + 1,0,0,0,902,903,7,8,0,0,903,904,7,4,0,0,904,905,7,3,0,0,905,906, + 7,2,0,0,906,907,7,7,0,0,907,63,1,0,0,0,908,909,7,8,0,0,909,910,7, + 3,0,0,910,911,7,0,0,0,911,912,7,4,0,0,912,913,7,7,0,0,913,914,7, + 2,0,0,914,915,7,8,0,0,915,916,7,7,0,0,916,65,1,0,0,0,917,918,7,8, + 0,0,918,919,7,3,0,0,919,920,7,4,0,0,920,921,7,4,0,0,921,922,7,0, + 0,0,922,923,7,6,0,0,923,924,7,7,0,0,924,67,1,0,0,0,925,926,7,8,0, + 0,926,927,7,3,0,0,927,928,7,4,0,0,928,929,7,4,0,0,929,930,7,0,0, + 0,930,931,7,6,0,0,931,932,7,9,0,0,932,933,7,3,0,0,933,934,7,10,0, + 0,934,69,1,0,0,0,935,936,7,8,0,0,936,937,7,3,0,0,937,938,7,4,0,0, + 938,939,7,5,0,0,939,940,7,20,0,0,940,941,7,10,0,0,941,71,1,0,0,0, + 942,943,7,8,0,0,943,944,7,3,0,0,944,945,7,20,0,0,945,946,7,20,0, + 0,946,947,7,9,0,0,947,948,7,6,0,0,948,73,1,0,0,0,949,950,7,8,0,0, + 950,951,7,3,0,0,951,952,7,10,0,0,952,953,7,10,0,0,953,954,7,7,0, + 0,954,955,7,8,0,0,955,956,7,6,0,0,956,75,1,0,0,0,957,958,7,8,0,0, + 958,959,7,3,0,0,959,960,7,10,0,0,960,961,7,10,0,0,961,962,7,7,0, + 0,962,963,7,8,0,0,963,964,7,6,0,0,964,965,7,9,0,0,965,966,7,3,0, + 0,966,967,7,10,0,0,967,77,1,0,0,0,968,969,7,8,0,0,969,970,7,3,0, + 0,970,971,7,10,0,0,971,972,7,2,0,0,972,973,7,6,0,0,973,974,7,12, + 0,0,974,975,7,0,0,0,975,976,7,9,0,0,976,977,7,10,0,0,977,978,7,6, + 0,0,978,79,1,0,0,0,979,980,7,8,0,0,980,981,7,3,0,0,981,982,7,10, + 0,0,982,983,7,2,0,0,983,984,7,6,0,0,984,985,7,12,0,0,985,986,7,0, + 0,0,986,987,7,9,0,0,987,988,7,10,0,0,988,989,7,6,0,0,989,990,7,2, + 0,0,990,81,1,0,0,0,991,992,7,8,0,0,992,993,7,3,0,0,993,994,7,10, + 0,0,994,995,7,6,0,0,995,996,7,9,0,0,996,997,7,10,0,0,997,998,7,5, + 0,0,998,999,7,7,0,0,999,83,1,0,0,0,1000,1001,7,8,0,0,1001,1002,7, + 3,0,0,1002,1003,7,10,0,0,1003,1004,7,16,0,0,1004,1005,7,7,0,0,1005, + 1006,7,12,0,0,1006,1007,7,6,0,0,1007,85,1,0,0,0,1008,1009,7,8,0, + 0,1009,1010,7,3,0,0,1010,1011,7,12,0,0,1011,1012,7,12,0,0,1012,1013, + 7,7,0,0,1013,1014,7,2,0,0,1014,1015,7,21,0,0,1015,1016,7,3,0,0,1016, + 1017,7,10,0,0,1017,1018,7,11,0,0,1018,1019,7,9,0,0,1019,1020,7,10, + 0,0,1020,1021,7,17,0,0,1021,87,1,0,0,0,1022,1023,7,8,0,0,1023,1024, + 7,3,0,0,1024,1025,7,5,0,0,1025,1026,7,10,0,0,1026,1027,7,6,0,0,1027, + 89,1,0,0,0,1028,1029,7,8,0,0,1029,1030,7,12,0,0,1030,1031,7,7,0, + 0,1031,1032,7,0,0,0,1032,1033,7,6,0,0,1033,1034,7,7,0,0,1034,91, + 1,0,0,0,1035,1036,7,8,0,0,1036,1037,7,12,0,0,1037,1038,7,3,0,0,1038, + 1039,7,2,0,0,1039,1040,7,2,0,0,1040,93,1,0,0,0,1041,1042,7,8,0,0, + 1042,1043,7,5,0,0,1043,1044,7,12,0,0,1044,1045,7,12,0,0,1045,1046, + 7,7,0,0,1046,1047,7,10,0,0,1047,1048,7,6,0,0,1048,95,1,0,0,0,1049, + 1050,7,8,0,0,1050,1051,7,5,0,0,1051,1052,7,12,0,0,1052,1053,7,12, + 0,0,1053,1054,7,7,0,0,1054,1055,7,10,0,0,1055,1056,7,6,0,0,1056, + 1057,5,95,0,0,1057,1058,7,11,0,0,1058,1059,7,0,0,0,1059,1060,7,6, + 0,0,1060,1061,7,7,0,0,1061,97,1,0,0,0,1062,1063,7,8,0,0,1063,1064, + 7,5,0,0,1064,1065,7,12,0,0,1065,1066,7,12,0,0,1066,1067,7,7,0,0, + 1067,1068,7,10,0,0,1068,1069,7,6,0,0,1069,1070,5,95,0,0,1070,1071, + 7,6,0,0,1071,1072,7,9,0,0,1072,1073,7,20,0,0,1073,1074,7,7,0,0,1074, + 99,1,0,0,0,1075,1076,7,8,0,0,1076,1077,7,5,0,0,1077,1078,7,12,0, + 0,1078,1079,7,12,0,0,1079,1080,7,7,0,0,1080,1081,7,10,0,0,1081,1082, + 7,6,0,0,1082,1083,5,95,0,0,1083,1084,7,6,0,0,1084,1085,7,9,0,0,1085, + 1086,7,20,0,0,1086,1087,7,7,0,0,1087,1088,7,2,0,0,1088,1089,7,6, + 0,0,1089,1090,7,0,0,0,1090,1091,7,20,0,0,1091,1092,7,21,0,0,1092, + 101,1,0,0,0,1093,1094,7,8,0,0,1094,1095,7,5,0,0,1095,1096,7,12,0, + 0,1096,1097,7,12,0,0,1097,1098,7,7,0,0,1098,1099,7,10,0,0,1099,1100, + 7,6,0,0,1100,1101,5,95,0,0,1101,1102,7,5,0,0,1102,1103,7,2,0,0,1103, + 1104,7,7,0,0,1104,1105,7,12,0,0,1105,103,1,0,0,0,1106,1107,7,8,0, + 0,1107,1108,7,5,0,0,1108,1109,7,12,0,0,1109,1110,7,2,0,0,1110,1111, + 7,3,0,0,1111,1112,7,12,0,0,1112,105,1,0,0,0,1113,1114,7,11,0,0,1114, + 1115,7,0,0,0,1115,1116,7,6,0,0,1116,1117,7,7,0,0,1117,107,1,0,0, + 0,1118,1119,7,11,0,0,1119,1120,7,0,0,0,1120,1121,7,6,0,0,1121,1122, + 7,7,0,0,1122,1123,7,6,0,0,1123,1124,7,9,0,0,1124,1125,7,20,0,0,1125, + 1126,7,7,0,0,1126,109,1,0,0,0,1127,1128,7,11,0,0,1128,1129,7,7,0, + 0,1129,1130,7,0,0,0,1130,1131,7,4,0,0,1131,1132,7,4,0,0,1132,1133, + 7,3,0,0,1133,1134,7,8,0,0,1134,1135,7,0,0,0,1135,1136,7,6,0,0,1136, + 1137,7,7,0,0,1137,111,1,0,0,0,1138,1139,7,11,0,0,1139,1140,7,7,0, + 0,1140,1141,7,8,0,0,1141,113,1,0,0,0,1142,1143,7,11,0,0,1143,1144, + 7,7,0,0,1144,1145,7,8,0,0,1145,1146,7,9,0,0,1146,1147,7,20,0,0,1147, + 1148,7,0,0,0,1148,1149,7,4,0,0,1149,115,1,0,0,0,1150,1151,7,11,0, + 0,1151,1152,7,7,0,0,1152,1153,7,8,0,0,1153,1154,7,4,0,0,1154,1155, + 7,0,0,0,1155,1156,7,12,0,0,1156,1157,7,7,0,0,1157,117,1,0,0,0,1158, + 1159,7,11,0,0,1159,1160,7,7,0,0,1160,1161,7,22,0,0,1161,1162,7,0, + 0,0,1162,1163,7,5,0,0,1163,1164,7,4,0,0,1164,1165,7,6,0,0,1165,119, + 1,0,0,0,1166,1167,7,11,0,0,1167,1168,7,7,0,0,1168,1169,7,22,0,0, + 1169,1170,7,7,0,0,1170,1171,7,12,0,0,1171,1172,7,12,0,0,1172,1173, + 7,0,0,0,1173,1174,7,1,0,0,1174,1175,7,4,0,0,1175,1176,7,7,0,0,1176, + 121,1,0,0,0,1177,1178,7,11,0,0,1178,1179,7,7,0,0,1179,1180,7,22, + 0,0,1180,1181,7,7,0,0,1181,1182,7,12,0,0,1182,1183,7,12,0,0,1183, + 1184,7,7,0,0,1184,1185,7,11,0,0,1185,123,1,0,0,0,1186,1187,7,11, + 0,0,1187,1188,7,7,0,0,1188,1189,7,4,0,0,1189,1190,7,7,0,0,1190,1191, + 7,6,0,0,1191,1192,7,7,0,0,1192,125,1,0,0,0,1193,1194,7,11,0,0,1194, + 1195,7,7,0,0,1195,1196,7,2,0,0,1196,1197,7,8,0,0,1197,127,1,0,0, + 0,1198,1199,7,11,0,0,1199,1200,7,7,0,0,1200,1201,7,2,0,0,1201,1202, + 7,8,0,0,1202,1203,7,12,0,0,1203,1204,7,9,0,0,1204,1205,7,1,0,0,1205, + 1206,7,7,0,0,1206,129,1,0,0,0,1207,1208,7,11,0,0,1208,1209,7,7,0, + 0,1209,1210,7,2,0,0,1210,1211,7,8,0,0,1211,1212,7,12,0,0,1212,1213, + 7,9,0,0,1213,1214,7,21,0,0,1214,1215,7,6,0,0,1215,1216,7,3,0,0,1216, + 1217,7,12,0,0,1217,131,1,0,0,0,1218,1219,7,11,0,0,1219,1220,7,9, + 0,0,1220,1221,7,0,0,0,1221,1222,7,17,0,0,1222,1223,7,10,0,0,1223, + 1224,7,3,0,0,1224,1225,7,2,0,0,1225,1226,7,6,0,0,1226,1227,7,9,0, + 0,1227,1228,7,8,0,0,1228,1229,7,2,0,0,1229,133,1,0,0,0,1230,1231, + 7,11,0,0,1231,1232,7,9,0,0,1232,1233,7,2,0,0,1233,1234,7,8,0,0,1234, + 1235,7,3,0,0,1235,1236,7,10,0,0,1236,1237,7,10,0,0,1237,1238,7,7, + 0,0,1238,1239,7,8,0,0,1239,1240,7,6,0,0,1240,135,1,0,0,0,1241,1242, + 7,11,0,0,1242,1243,7,9,0,0,1243,1244,7,2,0,0,1244,1245,7,6,0,0,1245, + 1246,7,9,0,0,1246,1247,7,10,0,0,1247,1248,7,8,0,0,1248,1249,7,6, + 0,0,1249,137,1,0,0,0,1250,1251,7,11,0,0,1251,1252,7,3,0,0,1252,1253, + 7,20,0,0,1253,1254,7,0,0,0,1254,1255,7,9,0,0,1255,1256,7,10,0,0, + 1256,139,1,0,0,0,1257,1258,7,11,0,0,1258,1259,7,3,0,0,1259,1260, + 7,5,0,0,1260,1261,7,1,0,0,1261,1262,7,4,0,0,1262,1263,7,7,0,0,1263, + 141,1,0,0,0,1264,1265,7,11,0,0,1265,1266,7,12,0,0,1266,1267,7,3, + 0,0,1267,1268,7,21,0,0,1268,143,1,0,0,0,1269,1270,7,7,0,0,1270,1271, + 7,4,0,0,1271,1272,7,2,0,0,1272,1273,7,7,0,0,1273,145,1,0,0,0,1274, + 1275,7,7,0,0,1275,1276,7,10,0,0,1276,1277,7,11,0,0,1277,147,1,0, + 0,0,1278,1279,7,7,0,0,1279,1280,7,10,0,0,1280,1281,7,11,0,0,1281, + 1282,5,45,0,0,1282,1283,7,7,0,0,1283,1284,7,23,0,0,1284,1285,7,7, + 0,0,1285,1286,7,8,0,0,1286,149,1,0,0,0,1287,1288,7,7,0,0,1288,1289, + 7,2,0,0,1289,1290,7,8,0,0,1290,1291,7,0,0,0,1291,1292,7,21,0,0,1292, + 1293,7,7,0,0,1293,151,1,0,0,0,1294,1295,7,7,0,0,1295,1296,7,16,0, + 0,1296,1297,7,7,0,0,1297,1298,7,12,0,0,1298,1299,7,13,0,0,1299,153, + 1,0,0,0,1300,1301,7,7,0,0,1301,1302,7,23,0,0,1302,1303,7,8,0,0,1303, + 1304,7,7,0,0,1304,1305,7,21,0,0,1305,1306,7,6,0,0,1306,155,1,0,0, + 0,1307,1308,7,7,0,0,1308,1309,7,23,0,0,1309,1310,7,8,0,0,1310,1311, + 7,7,0,0,1311,1312,7,21,0,0,1312,1313,7,6,0,0,1313,1314,7,9,0,0,1314, + 1315,7,3,0,0,1315,1316,7,10,0,0,1316,157,1,0,0,0,1317,1318,7,7,0, + 0,1318,1319,7,23,0,0,1319,1320,7,8,0,0,1320,1321,7,4,0,0,1321,1322, + 7,5,0,0,1322,1323,7,11,0,0,1323,1324,7,7,0,0,1324,159,1,0,0,0,1325, + 1326,7,7,0,0,1326,1327,7,23,0,0,1327,1328,7,8,0,0,1328,1329,7,4, + 0,0,1329,1330,7,5,0,0,1330,1331,7,11,0,0,1331,1332,7,7,0,0,1332, + 1333,7,11,0,0,1333,161,1,0,0,0,1334,1335,7,7,0,0,1335,1336,7,23, + 0,0,1336,1337,7,7,0,0,1337,1338,7,8,0,0,1338,163,1,0,0,0,1339,1340, + 7,7,0,0,1340,1341,7,23,0,0,1341,1342,7,7,0,0,1342,1343,7,8,0,0,1343, + 1344,7,5,0,0,1344,1345,7,6,0,0,1345,1346,7,7,0,0,1346,165,1,0,0, + 0,1347,1348,7,7,0,0,1348,1349,7,23,0,0,1349,1350,7,9,0,0,1350,1351, + 7,2,0,0,1351,1352,7,6,0,0,1352,1353,7,2,0,0,1353,167,1,0,0,0,1354, + 1355,7,7,0,0,1355,1356,7,23,0,0,1356,1357,7,21,0,0,1357,1358,7,4, + 0,0,1358,1359,7,0,0,0,1359,1360,7,9,0,0,1360,1361,7,10,0,0,1361, + 169,1,0,0,0,1362,1363,7,7,0,0,1363,1364,7,23,0,0,1364,1365,7,6,0, + 0,1365,1366,7,7,0,0,1366,1367,7,12,0,0,1367,1368,7,10,0,0,1368,1369, + 7,0,0,0,1369,1370,7,4,0,0,1370,171,1,0,0,0,1371,1372,7,7,0,0,1372, + 1373,7,23,0,0,1373,1374,7,6,0,0,1374,1375,7,12,0,0,1375,1376,7,0, + 0,0,1376,1377,7,8,0,0,1377,1378,7,6,0,0,1378,173,1,0,0,0,1379,1380, + 7,11,0,0,1380,1381,7,0,0,0,1381,1382,7,6,0,0,1382,1383,7,7,0,0,1383, + 1384,5,95,0,0,1384,1385,7,0,0,0,1385,1386,7,11,0,0,1386,1387,7,11, + 0,0,1387,175,1,0,0,0,1388,1389,7,11,0,0,1389,1390,7,0,0,0,1390,1391, + 7,6,0,0,1391,1392,7,7,0,0,1392,1393,5,95,0,0,1393,1394,7,11,0,0, + 1394,1395,7,9,0,0,1395,1396,7,22,0,0,1396,1397,7,22,0,0,1397,177, + 1,0,0,0,1398,1399,7,22,0,0,1399,1400,7,0,0,0,1400,1401,7,4,0,0,1401, + 1402,7,2,0,0,1402,1403,7,7,0,0,1403,179,1,0,0,0,1404,1405,7,22,0, + 0,1405,1406,7,7,0,0,1406,1407,7,6,0,0,1407,1408,7,8,0,0,1408,1409, + 7,14,0,0,1409,181,1,0,0,0,1410,1411,7,22,0,0,1411,1412,7,9,0,0,1412, + 1413,7,12,0,0,1413,1414,7,2,0,0,1414,1415,7,6,0,0,1415,183,1,0,0, + 0,1416,1417,7,22,0,0,1417,1418,7,4,0,0,1418,1419,7,3,0,0,1419,1420, + 7,0,0,0,1420,1421,7,6,0,0,1421,185,1,0,0,0,1422,1423,7,22,0,0,1423, + 1424,7,3,0,0,1424,1425,7,12,0,0,1425,187,1,0,0,0,1426,1427,7,22, + 0,0,1427,1428,7,3,0,0,1428,1429,7,12,0,0,1429,1430,7,7,0,0,1430, + 1431,7,9,0,0,1431,1432,7,17,0,0,1432,1433,7,10,0,0,1433,189,1,0, + 0,0,1434,1435,7,22,0,0,1435,1436,7,3,0,0,1436,1437,7,5,0,0,1437, + 1438,7,10,0,0,1438,1439,7,11,0,0,1439,191,1,0,0,0,1440,1441,7,22, + 0,0,1441,1442,7,12,0,0,1442,1443,7,3,0,0,1443,1444,7,20,0,0,1444, + 193,1,0,0,0,1445,1446,7,22,0,0,1446,1447,7,5,0,0,1447,1448,7,4,0, + 0,1448,1449,7,4,0,0,1449,195,1,0,0,0,1450,1451,7,17,0,0,1451,1452, + 7,7,0,0,1452,1453,7,6,0,0,1453,197,1,0,0,0,1454,1455,7,17,0,0,1455, + 1456,7,4,0,0,1456,1457,7,3,0,0,1457,1458,7,1,0,0,1458,1459,7,0,0, + 0,1459,1460,7,4,0,0,1460,199,1,0,0,0,1461,1462,7,17,0,0,1462,1463, + 7,3,0,0,1463,201,1,0,0,0,1464,1465,7,17,0,0,1465,1466,7,3,0,0,1466, + 1467,7,6,0,0,1467,1468,7,3,0,0,1468,203,1,0,0,0,1469,1470,7,17,0, + 0,1470,1471,7,12,0,0,1471,1472,7,0,0,0,1472,1473,7,10,0,0,1473,1474, + 7,6,0,0,1474,205,1,0,0,0,1475,1476,7,17,0,0,1476,1477,7,12,0,0,1477, + 1478,7,3,0,0,1478,1479,7,5,0,0,1479,1480,7,21,0,0,1480,207,1,0,0, + 0,1481,1482,7,14,0,0,1482,1483,7,0,0,0,1483,1484,7,16,0,0,1484,1485, + 7,9,0,0,1485,1486,7,10,0,0,1486,1487,7,17,0,0,1487,209,1,0,0,0,1488, + 1489,7,9,0,0,1489,1490,7,11,0,0,1490,1491,7,7,0,0,1491,1492,7,10, + 0,0,1492,1493,7,6,0,0,1493,1494,7,9,0,0,1494,1495,7,6,0,0,1495,1496, + 7,13,0,0,1496,211,1,0,0,0,1497,1498,7,9,0,0,1498,1499,7,20,0,0,1499, + 1500,7,20,0,0,1500,1501,7,7,0,0,1501,1502,7,11,0,0,1502,1503,7,9, + 0,0,1503,1504,7,0,0,0,1504,1505,7,6,0,0,1505,1506,7,7,0,0,1506,213, + 1,0,0,0,1507,1508,7,9,0,0,1508,1509,7,10,0,0,1509,215,1,0,0,0,1510, + 1511,7,9,0,0,1511,1512,7,10,0,0,1512,1513,7,11,0,0,1513,1514,7,9, + 0,0,1514,1515,7,8,0,0,1515,1516,7,0,0,0,1516,1517,7,6,0,0,1517,1518, + 7,3,0,0,1518,1519,7,12,0,0,1519,217,1,0,0,0,1520,1521,7,9,0,0,1521, + 1522,7,10,0,0,1522,1523,7,9,0,0,1523,1524,7,6,0,0,1524,1525,7,9, + 0,0,1525,1526,7,0,0,0,1526,1527,7,4,0,0,1527,1528,7,4,0,0,1528,1529, + 7,13,0,0,1529,219,1,0,0,0,1530,1531,7,9,0,0,1531,1532,7,10,0,0,1532, + 1533,7,10,0,0,1533,1534,7,7,0,0,1534,1535,7,12,0,0,1535,221,1,0, + 0,0,1536,1537,7,9,0,0,1537,1538,7,10,0,0,1538,1539,7,21,0,0,1539, + 1540,7,5,0,0,1540,1541,7,6,0,0,1541,223,1,0,0,0,1542,1543,7,9,0, + 0,1543,1544,7,10,0,0,1544,1545,7,2,0,0,1545,1546,7,7,0,0,1546,1547, + 7,10,0,0,1547,1548,7,2,0,0,1548,1549,7,9,0,0,1549,1550,7,6,0,0,1550, + 1551,7,9,0,0,1551,1552,7,16,0,0,1552,1553,7,7,0,0,1553,225,1,0,0, + 0,1554,1555,7,9,0,0,1555,1556,7,10,0,0,1556,1557,7,2,0,0,1557,1558, + 7,7,0,0,1558,1559,7,12,0,0,1559,1560,7,6,0,0,1560,227,1,0,0,0,1561, + 1562,7,9,0,0,1562,1563,7,10,0,0,1563,1564,7,6,0,0,1564,229,1,0,0, + 0,1565,1566,7,9,0,0,1566,1567,7,10,0,0,1567,1568,7,6,0,0,1568,1569, + 7,7,0,0,1569,1570,7,17,0,0,1570,1571,7,7,0,0,1571,1572,7,12,0,0, + 1572,231,1,0,0,0,1573,1574,7,9,0,0,1574,1575,7,10,0,0,1575,1576, + 7,6,0,0,1576,1577,7,7,0,0,1577,1578,7,12,0,0,1578,1579,7,2,0,0,1579, + 1580,7,7,0,0,1580,1581,7,8,0,0,1581,1582,7,6,0,0,1582,233,1,0,0, + 0,1583,1584,7,9,0,0,1584,1585,7,10,0,0,1585,1586,7,6,0,0,1586,1587, + 7,7,0,0,1587,1588,7,12,0,0,1588,1589,7,16,0,0,1589,1590,7,0,0,0, + 1590,1591,7,4,0,0,1591,235,1,0,0,0,1592,1593,7,9,0,0,1593,1594,7, + 10,0,0,1594,1595,7,6,0,0,1595,1596,7,3,0,0,1596,237,1,0,0,0,1597, + 1598,7,9,0,0,1598,1599,7,2,0,0,1599,239,1,0,0,0,1600,1601,7,9,0, + 0,1601,1602,7,2,0,0,1602,1603,7,3,0,0,1603,1604,7,4,0,0,1604,1605, + 7,0,0,0,1605,1606,7,6,0,0,1606,1607,7,9,0,0,1607,1608,7,3,0,0,1608, + 1609,7,10,0,0,1609,241,1,0,0,0,1610,1611,7,24,0,0,1611,1612,7,3, + 0,0,1612,1613,7,9,0,0,1613,1614,7,10,0,0,1614,243,1,0,0,0,1615,1616, + 7,19,0,0,1616,1617,7,7,0,0,1617,1618,7,13,0,0,1618,245,1,0,0,0,1619, + 1620,7,4,0,0,1620,1621,7,0,0,0,1621,1622,7,10,0,0,1622,1623,7,17, + 0,0,1623,1624,7,5,0,0,1624,1625,7,0,0,0,1625,1626,7,17,0,0,1626, + 1627,7,7,0,0,1627,247,1,0,0,0,1628,1629,7,4,0,0,1629,1630,7,0,0, + 0,1630,1631,7,2,0,0,1631,1632,7,6,0,0,1632,249,1,0,0,0,1633,1634, + 7,4,0,0,1634,1635,7,0,0,0,1635,1636,7,6,0,0,1636,1637,7,7,0,0,1637, + 1638,7,12,0,0,1638,1639,7,0,0,0,1639,1640,7,4,0,0,1640,251,1,0,0, + 0,1641,1642,7,4,0,0,1642,1643,7,7,0,0,1643,1644,7,22,0,0,1644,1645, + 7,6,0,0,1645,253,1,0,0,0,1646,1647,7,4,0,0,1647,1648,7,7,0,0,1648, + 1649,7,16,0,0,1649,1650,7,7,0,0,1650,1651,7,4,0,0,1651,255,1,0,0, + 0,1652,1653,7,4,0,0,1653,1654,7,9,0,0,1654,1655,7,19,0,0,1655,1656, + 7,7,0,0,1656,257,1,0,0,0,1657,1658,7,4,0,0,1658,1659,7,3,0,0,1659, + 1660,7,8,0,0,1660,1661,7,0,0,0,1661,1662,7,4,0,0,1662,259,1,0,0, + 0,1663,1664,7,4,0,0,1664,1665,7,3,0,0,1665,1666,7,18,0,0,1666,1667, + 7,7,0,0,1667,1668,7,12,0,0,1668,261,1,0,0,0,1669,1670,7,20,0,0,1670, + 1671,7,0,0,0,1671,1672,7,6,0,0,1672,1673,7,8,0,0,1673,1674,7,14, + 0,0,1674,263,1,0,0,0,1675,1676,7,20,0,0,1676,1677,7,0,0,0,1677,1678, + 7,23,0,0,1678,265,1,0,0,0,1679,1680,7,20,0,0,1680,1681,7,9,0,0,1681, + 1682,7,10,0,0,1682,267,1,0,0,0,1683,1684,7,20,0,0,1684,1685,7,3, + 0,0,1685,1686,7,11,0,0,1686,1687,7,5,0,0,1687,1688,7,4,0,0,1688, + 1689,7,7,0,0,1689,269,1,0,0,0,1690,1691,7,10,0,0,1691,1692,7,0,0, + 0,1692,1693,7,20,0,0,1693,1694,7,7,0,0,1694,1695,7,2,0,0,1695,271, + 1,0,0,0,1696,1697,7,10,0,0,1697,1698,7,0,0,0,1698,1699,7,6,0,0,1699, + 1700,7,9,0,0,1700,1701,7,3,0,0,1701,1702,7,10,0,0,1702,1703,7,0, + 0,0,1703,1704,7,4,0,0,1704,273,1,0,0,0,1705,1706,7,10,0,0,1706,1707, + 7,0,0,0,1707,1708,7,6,0,0,1708,1709,7,5,0,0,1709,1710,7,12,0,0,1710, + 1711,7,0,0,0,1711,1712,7,4,0,0,1712,275,1,0,0,0,1713,1714,7,10,0, + 0,1714,1715,7,8,0,0,1715,1716,7,14,0,0,1716,1717,7,0,0,0,1717,1718, + 7,12,0,0,1718,277,1,0,0,0,1719,1720,7,10,0,0,1720,1721,7,7,0,0,1721, + 1722,7,23,0,0,1722,1723,7,6,0,0,1723,279,1,0,0,0,1724,1725,7,10, + 0,0,1725,1726,7,3,0,0,1726,281,1,0,0,0,1727,1728,7,10,0,0,1728,1729, + 7,3,0,0,1729,1730,7,6,0,0,1730,283,1,0,0,0,1731,1732,7,10,0,0,1732, + 1733,7,5,0,0,1733,1734,7,4,0,0,1734,1735,7,4,0,0,1735,285,1,0,0, + 0,1736,1737,7,10,0,0,1737,1738,7,5,0,0,1738,1739,7,4,0,0,1739,1740, + 7,4,0,0,1740,1741,7,2,0,0,1741,287,1,0,0,0,1742,1743,7,10,0,0,1743, + 1744,7,5,0,0,1744,1745,7,4,0,0,1745,1746,7,4,0,0,1746,1747,7,9,0, + 0,1747,1748,7,22,0,0,1748,289,1,0,0,0,1749,1750,7,10,0,0,1750,1751, + 7,5,0,0,1751,1752,7,20,0,0,1752,1753,7,7,0,0,1753,1754,7,12,0,0, + 1754,1755,7,9,0,0,1755,1756,7,8,0,0,1756,291,1,0,0,0,1757,1758,7, + 3,0,0,1758,1759,7,8,0,0,1759,1760,7,6,0,0,1760,1761,7,7,0,0,1761, + 1762,7,6,0,0,1762,1763,5,95,0,0,1763,1764,7,4,0,0,1764,1765,7,7, + 0,0,1765,1766,7,10,0,0,1766,1767,7,17,0,0,1767,1768,7,6,0,0,1768, + 1769,7,14,0,0,1769,293,1,0,0,0,1770,1771,7,3,0,0,1771,1772,7,22, + 0,0,1772,295,1,0,0,0,1773,1774,7,3,0,0,1774,1775,7,10,0,0,1775,297, + 1,0,0,0,1776,1777,7,3,0,0,1777,1778,7,10,0,0,1778,1779,7,4,0,0,1779, + 1780,7,13,0,0,1780,299,1,0,0,0,1781,1782,7,3,0,0,1782,1783,7,21, + 0,0,1783,1784,7,7,0,0,1784,1785,7,10,0,0,1785,301,1,0,0,0,1786,1787, + 7,3,0,0,1787,1788,7,21,0,0,1788,1789,7,6,0,0,1789,1790,7,9,0,0,1790, + 1791,7,3,0,0,1791,1792,7,10,0,0,1792,303,1,0,0,0,1793,1794,7,3,0, + 0,1794,1795,7,12,0,0,1795,305,1,0,0,0,1796,1797,7,3,0,0,1797,1798, + 7,12,0,0,1798,1799,7,11,0,0,1799,1800,7,7,0,0,1800,1801,7,12,0,0, + 1801,307,1,0,0,0,1802,1803,7,3,0,0,1803,1804,7,5,0,0,1804,1805,7, + 6,0,0,1805,1806,7,7,0,0,1806,1807,7,12,0,0,1807,309,1,0,0,0,1808, + 1809,7,3,0,0,1809,1810,7,5,0,0,1810,1811,7,6,0,0,1811,1812,7,21, + 0,0,1812,1813,7,5,0,0,1813,1814,7,6,0,0,1814,311,1,0,0,0,1815,1816, + 7,3,0,0,1816,1817,7,16,0,0,1817,1818,7,7,0,0,1818,1819,7,12,0,0, + 1819,1820,7,4,0,0,1820,1821,7,0,0,0,1821,1822,7,21,0,0,1822,1823, + 7,2,0,0,1823,313,1,0,0,0,1824,1825,7,3,0,0,1825,1826,7,16,0,0,1826, + 1827,7,7,0,0,1827,1828,7,12,0,0,1828,1829,7,4,0,0,1829,1830,7,0, + 0,0,1830,1831,7,13,0,0,1831,315,1,0,0,0,1832,1833,7,21,0,0,1833, + 1834,7,0,0,0,1834,1835,7,11,0,0,1835,317,1,0,0,0,1836,1837,7,21, + 0,0,1837,1838,7,0,0,0,1838,1839,7,12,0,0,1839,1840,7,6,0,0,1840, + 1841,7,9,0,0,1841,1842,7,0,0,0,1842,1843,7,4,0,0,1843,319,1,0,0, + 0,1844,1845,7,21,0,0,1845,1846,7,4,0,0,1846,1847,7,0,0,0,1847,1848, + 7,8,0,0,1848,1849,7,9,0,0,1849,1850,7,10,0,0,1850,1851,7,17,0,0, + 1851,321,1,0,0,0,1852,1853,7,21,0,0,1853,1854,7,3,0,0,1854,1855, + 7,2,0,0,1855,1856,7,9,0,0,1856,1857,7,6,0,0,1857,1858,7,9,0,0,1858, + 1859,7,3,0,0,1859,1860,7,10,0,0,1860,323,1,0,0,0,1861,1862,7,21, + 0,0,1862,1863,7,12,0,0,1863,1864,7,7,0,0,1864,1865,7,8,0,0,1865, + 1866,7,9,0,0,1866,1867,7,2,0,0,1867,1868,7,9,0,0,1868,1869,7,3,0, + 0,1869,1870,7,10,0,0,1870,325,1,0,0,0,1871,1872,7,21,0,0,1872,1873, + 7,12,0,0,1873,1874,7,7,0,0,1874,1875,7,21,0,0,1875,1876,7,0,0,0, + 1876,1877,7,12,0,0,1877,1878,7,7,0,0,1878,327,1,0,0,0,1879,1880, + 7,21,0,0,1880,1881,7,12,0,0,1881,1882,7,7,0,0,1882,1883,7,2,0,0, + 1883,1884,7,7,0,0,1884,1885,7,12,0,0,1885,1886,7,16,0,0,1886,1887, + 7,7,0,0,1887,329,1,0,0,0,1888,1889,7,21,0,0,1889,1890,7,12,0,0,1890, + 1891,7,9,0,0,1891,1892,7,20,0,0,1892,1893,7,0,0,0,1893,1894,7,12, + 0,0,1894,1895,7,13,0,0,1895,331,1,0,0,0,1896,1897,7,21,0,0,1897, + 1898,7,12,0,0,1898,1899,7,9,0,0,1899,1900,7,3,0,0,1900,1901,7,12, + 0,0,1901,333,1,0,0,0,1902,1903,7,21,0,0,1903,1904,7,12,0,0,1904, + 1905,7,9,0,0,1905,1906,7,16,0,0,1906,1907,7,9,0,0,1907,1908,7,4, + 0,0,1908,1909,7,7,0,0,1909,1910,7,17,0,0,1910,1911,7,7,0,0,1911, + 1912,7,2,0,0,1912,335,1,0,0,0,1913,1914,7,21,0,0,1914,1915,7,12, + 0,0,1915,1916,7,3,0,0,1916,1917,7,8,0,0,1917,1918,7,7,0,0,1918,1919, + 7,11,0,0,1919,1920,7,5,0,0,1920,1921,7,12,0,0,1921,1922,7,7,0,0, + 1922,337,1,0,0,0,1923,1924,7,21,0,0,1924,1925,7,5,0,0,1925,1926, + 7,1,0,0,1926,1927,7,4,0,0,1927,1928,7,9,0,0,1928,1929,7,8,0,0,1929, + 339,1,0,0,0,1930,1931,7,12,0,0,1931,1932,7,7,0,0,1932,1933,7,0,0, + 0,1933,1934,7,11,0,0,1934,341,1,0,0,0,1935,1936,7,12,0,0,1936,1937, + 7,7,0,0,1937,1938,7,0,0,0,1938,1939,7,4,0,0,1939,343,1,0,0,0,1940, + 1941,7,12,0,0,1941,1942,7,7,0,0,1942,1943,7,22,0,0,1943,1944,7,7, + 0,0,1944,1945,7,12,0,0,1945,1946,7,7,0,0,1946,1947,7,10,0,0,1947, + 1948,7,8,0,0,1948,1949,7,7,0,0,1949,1950,7,2,0,0,1950,345,1,0,0, + 0,1951,1952,7,12,0,0,1952,1953,7,7,0,0,1953,1954,7,4,0,0,1954,1955, + 7,0,0,0,1955,1956,7,6,0,0,1956,1957,7,9,0,0,1957,1958,7,16,0,0,1958, + 1959,7,7,0,0,1959,347,1,0,0,0,1960,1961,7,12,0,0,1961,1962,7,7,0, + 0,1962,1963,7,21,0,0,1963,1964,7,4,0,0,1964,1965,7,0,0,0,1965,1966, + 7,8,0,0,1966,1967,7,7,0,0,1967,349,1,0,0,0,1968,1969,7,12,0,0,1969, + 1970,7,7,0,0,1970,1971,7,2,0,0,1971,1972,7,6,0,0,1972,1973,7,12, + 0,0,1973,1974,7,9,0,0,1974,1975,7,8,0,0,1975,1976,7,6,0,0,1976,351, + 1,0,0,0,1977,1978,7,12,0,0,1978,1979,7,7,0,0,1979,1980,7,16,0,0, + 1980,1981,7,3,0,0,1981,1982,7,19,0,0,1982,1983,7,7,0,0,1983,353, + 1,0,0,0,1984,1985,7,12,0,0,1985,1986,7,9,0,0,1986,1987,7,17,0,0, + 1987,1988,7,14,0,0,1988,1989,7,6,0,0,1989,355,1,0,0,0,1990,1991, + 7,12,0,0,1991,1992,7,3,0,0,1992,1993,7,4,0,0,1993,1994,7,4,0,0,1994, + 1995,7,1,0,0,1995,1996,7,0,0,0,1996,1997,7,8,0,0,1997,1998,7,19, + 0,0,1998,357,1,0,0,0,1999,2000,7,12,0,0,2000,2001,7,3,0,0,2001,2002, + 7,18,0,0,2002,2003,7,2,0,0,2003,359,1,0,0,0,2004,2005,7,2,0,0,2005, + 2006,7,8,0,0,2006,2007,7,14,0,0,2007,2008,7,7,0,0,2008,2009,7,20, + 0,0,2009,2010,7,0,0,0,2010,361,1,0,0,0,2011,2012,7,2,0,0,2012,2013, + 7,8,0,0,2013,2014,7,12,0,0,2014,2015,7,3,0,0,2015,2016,7,4,0,0,2016, + 2017,7,4,0,0,2017,363,1,0,0,0,2018,2019,7,2,0,0,2019,2020,7,7,0, + 0,2020,2021,7,8,0,0,2021,2022,7,6,0,0,2022,2023,7,9,0,0,2023,2024, + 7,3,0,0,2024,2025,7,10,0,0,2025,365,1,0,0,0,2026,2027,7,2,0,0,2027, + 2028,7,7,0,0,2028,2029,7,4,0,0,2029,2030,7,7,0,0,2030,2031,7,8,0, + 0,2031,2032,7,6,0,0,2032,367,1,0,0,0,2033,2034,7,2,0,0,2034,2035, + 7,7,0,0,2035,2036,7,2,0,0,2036,2037,7,2,0,0,2037,2038,7,9,0,0,2038, + 2039,7,3,0,0,2039,2040,7,10,0,0,2040,369,1,0,0,0,2041,2042,7,2,0, + 0,2042,2043,7,7,0,0,2043,2044,7,2,0,0,2044,2045,7,2,0,0,2045,2046, + 7,9,0,0,2046,2047,7,3,0,0,2047,2048,7,10,0,0,2048,2049,5,95,0,0, + 2049,2050,7,5,0,0,2050,2051,7,2,0,0,2051,2052,7,7,0,0,2052,2053, + 7,12,0,0,2053,371,1,0,0,0,2054,2055,7,2,0,0,2055,2056,7,7,0,0,2056, + 2057,7,6,0,0,2057,373,1,0,0,0,2058,2059,7,2,0,0,2059,2060,7,14,0, + 0,2060,2061,7,3,0,0,2061,2062,7,12,0,0,2062,2063,7,6,0,0,2063,2064, + 7,7,0,0,2064,2065,7,2,0,0,2065,2066,7,6,0,0,2066,375,1,0,0,0,2067, + 2068,7,2,0,0,2068,2069,7,9,0,0,2069,2070,7,15,0,0,2070,2071,7,7, + 0,0,2071,377,1,0,0,0,2072,2073,7,2,0,0,2073,2074,7,20,0,0,2074,2075, + 7,0,0,0,2075,2076,7,4,0,0,2076,2077,7,4,0,0,2077,2078,7,9,0,0,2078, + 2079,7,10,0,0,2079,2080,7,6,0,0,2080,379,1,0,0,0,2081,2082,7,2,0, + 0,2082,2083,7,3,0,0,2083,2084,7,20,0,0,2084,2085,7,7,0,0,2085,381, + 1,0,0,0,2086,2087,7,2,0,0,2087,2088,7,21,0,0,2088,2089,7,0,0,0,2089, + 2090,7,8,0,0,2090,2091,7,7,0,0,2091,383,1,0,0,0,2092,2093,7,2,0, + 0,2093,2094,7,25,0,0,2094,2095,7,4,0,0,2095,385,1,0,0,0,2096,2097, + 7,2,0,0,2097,2098,7,25,0,0,2098,2099,7,4,0,0,2099,2100,7,8,0,0,2100, + 2101,7,3,0,0,2101,2102,7,11,0,0,2102,2103,7,7,0,0,2103,387,1,0,0, + 0,2104,2105,7,2,0,0,2105,2106,7,25,0,0,2106,2107,7,4,0,0,2107,2108, + 7,7,0,0,2108,2109,7,12,0,0,2109,2110,7,12,0,0,2110,2111,7,3,0,0, + 2111,2112,7,12,0,0,2112,389,1,0,0,0,2113,2114,7,2,0,0,2114,2115, + 7,25,0,0,2115,2116,7,4,0,0,2116,2117,7,2,0,0,2117,2118,7,6,0,0,2118, + 2119,7,0,0,0,2119,2120,7,6,0,0,2120,2121,7,7,0,0,2121,391,1,0,0, + 0,2122,2123,7,2,0,0,2123,2124,7,5,0,0,2124,2125,7,1,0,0,2125,2126, + 7,2,0,0,2126,2127,7,6,0,0,2127,2128,7,12,0,0,2128,2129,7,9,0,0,2129, + 2130,7,10,0,0,2130,2131,7,17,0,0,2131,393,1,0,0,0,2132,2133,7,2, + 0,0,2133,2134,7,5,0,0,2134,2135,7,20,0,0,2135,395,1,0,0,0,2136,2137, + 7,2,0,0,2137,2138,7,13,0,0,2138,2139,7,2,0,0,2139,2140,7,6,0,0,2140, + 2141,7,7,0,0,2141,2142,7,20,0,0,2142,2143,5,95,0,0,2143,2144,7,5, + 0,0,2144,2145,7,2,0,0,2145,2146,7,7,0,0,2146,2147,7,12,0,0,2147, + 397,1,0,0,0,2148,2149,7,6,0,0,2149,2150,7,0,0,0,2150,2151,7,1,0, + 0,2151,2152,7,4,0,0,2152,2153,7,7,0,0,2153,399,1,0,0,0,2154,2155, + 7,6,0,0,2155,2156,7,7,0,0,2156,2157,7,20,0,0,2157,2158,7,21,0,0, + 2158,2159,7,3,0,0,2159,2160,7,12,0,0,2160,2161,7,0,0,0,2161,2162, + 7,12,0,0,2162,2163,7,13,0,0,2163,401,1,0,0,0,2164,2165,7,6,0,0,2165, + 2166,7,14,0,0,2166,2167,7,7,0,0,2167,2168,7,10,0,0,2168,403,1,0, + 0,0,2169,2170,7,6,0,0,2170,2171,7,9,0,0,2171,2172,7,20,0,0,2172, + 2173,7,7,0,0,2173,405,1,0,0,0,2174,2175,7,6,0,0,2175,2176,7,9,0, + 0,2176,2177,7,20,0,0,2177,2178,7,7,0,0,2178,2179,7,2,0,0,2179,2180, + 7,6,0,0,2180,2181,7,0,0,0,2181,2182,7,20,0,0,2182,2183,7,21,0,0, + 2183,407,1,0,0,0,2184,2185,7,6,0,0,2185,2186,7,3,0,0,2186,409,1, + 0,0,0,2187,2188,7,6,0,0,2188,2189,7,12,0,0,2189,2190,7,0,0,0,2190, + 2191,7,10,0,0,2191,2192,7,2,0,0,2192,2193,7,0,0,0,2193,2194,7,8, + 0,0,2194,2195,7,6,0,0,2195,2196,7,9,0,0,2196,2197,7,3,0,0,2197,2198, + 7,10,0,0,2198,411,1,0,0,0,2199,2200,7,6,0,0,2200,2201,7,12,0,0,2201, + 2202,7,0,0,0,2202,2203,7,10,0,0,2203,2204,7,2,0,0,2204,2205,7,4, + 0,0,2205,2206,7,0,0,0,2206,2207,7,6,0,0,2207,2208,7,7,0,0,2208,413, + 1,0,0,0,2209,2210,7,6,0,0,2210,2211,7,12,0,0,2211,2212,7,0,0,0,2212, + 2213,7,10,0,0,2213,2214,7,2,0,0,2214,2215,7,4,0,0,2215,2216,7,0, + 0,0,2216,2217,7,6,0,0,2217,2218,7,9,0,0,2218,2219,7,3,0,0,2219,2220, + 7,10,0,0,2220,415,1,0,0,0,2221,2222,7,6,0,0,2222,2223,7,12,0,0,2223, + 2224,7,9,0,0,2224,2225,7,20,0,0,2225,417,1,0,0,0,2226,2227,7,6,0, + 0,2227,2228,7,12,0,0,2228,2229,7,5,0,0,2229,2230,7,7,0,0,2230,419, + 1,0,0,0,2231,2232,7,5,0,0,2232,2233,7,10,0,0,2233,2234,7,9,0,0,2234, + 2235,7,3,0,0,2235,2236,7,10,0,0,2236,421,1,0,0,0,2237,2238,7,5,0, + 0,2238,2239,7,10,0,0,2239,2240,7,9,0,0,2240,2241,7,25,0,0,2241,2242, + 7,5,0,0,2242,2243,7,7,0,0,2243,423,1,0,0,0,2244,2245,7,5,0,0,2245, + 2246,7,10,0,0,2246,2247,7,19,0,0,2247,2248,7,10,0,0,2248,2249,7, + 3,0,0,2249,2250,7,18,0,0,2250,2251,7,10,0,0,2251,425,1,0,0,0,2252, + 2253,7,5,0,0,2253,2254,7,21,0,0,2254,2255,7,11,0,0,2255,2256,7,0, + 0,0,2256,2257,7,6,0,0,2257,2258,7,7,0,0,2258,427,1,0,0,0,2259,2260, + 7,5,0,0,2260,2261,7,21,0,0,2261,2262,7,21,0,0,2262,2263,7,7,0,0, + 2263,2264,7,12,0,0,2264,429,1,0,0,0,2265,2266,7,5,0,0,2266,2267, + 7,21,0,0,2267,2268,7,2,0,0,2268,2269,7,7,0,0,2269,2270,7,12,0,0, + 2270,2271,7,6,0,0,2271,431,1,0,0,0,2272,2273,7,5,0,0,2273,2274,7, + 2,0,0,2274,2275,7,0,0,0,2275,2276,7,17,0,0,2276,2277,7,7,0,0,2277, + 433,1,0,0,0,2278,2279,7,5,0,0,2279,2280,7,2,0,0,2280,2281,7,7,0, + 0,2281,2282,7,12,0,0,2282,435,1,0,0,0,2283,2284,7,5,0,0,2284,2285, + 7,2,0,0,2285,2286,7,9,0,0,2286,2287,7,10,0,0,2287,2288,7,17,0,0, + 2288,437,1,0,0,0,2289,2290,7,16,0,0,2290,2291,7,0,0,0,2291,2292, + 7,4,0,0,2292,2293,7,5,0,0,2293,2294,7,7,0,0,2294,439,1,0,0,0,2295, + 2296,7,16,0,0,2296,2297,7,0,0,0,2297,2298,7,4,0,0,2298,2299,7,5, + 0,0,2299,2300,7,7,0,0,2300,2301,7,2,0,0,2301,441,1,0,0,0,2302,2303, + 7,16,0,0,2303,2304,7,0,0,0,2304,2305,7,12,0,0,2305,2306,7,8,0,0, + 2306,2307,7,14,0,0,2307,2308,7,0,0,0,2308,2309,7,12,0,0,2309,443, + 1,0,0,0,2310,2311,7,16,0,0,2311,2312,7,0,0,0,2312,2313,7,12,0,0, + 2313,2314,7,13,0,0,2314,2315,7,9,0,0,2315,2316,7,10,0,0,2316,2317, + 7,17,0,0,2317,445,1,0,0,0,2318,2319,7,16,0,0,2319,2320,7,9,0,0,2320, + 2321,7,7,0,0,2321,2322,7,18,0,0,2322,447,1,0,0,0,2323,2324,7,18, + 0,0,2324,2325,7,14,0,0,2325,2326,7,7,0,0,2326,2327,7,10,0,0,2327, + 449,1,0,0,0,2328,2329,7,18,0,0,2329,2330,7,14,0,0,2330,2331,7,7, + 0,0,2331,2332,7,10,0,0,2332,2333,7,7,0,0,2333,2334,7,16,0,0,2334, + 2335,7,7,0,0,2335,2336,7,12,0,0,2336,451,1,0,0,0,2337,2338,7,18, + 0,0,2338,2339,7,14,0,0,2339,2340,7,7,0,0,2340,2341,7,12,0,0,2341, + 2342,7,7,0,0,2342,453,1,0,0,0,2343,2344,7,18,0,0,2344,2345,7,9,0, + 0,2345,2346,7,6,0,0,2346,2347,7,14,0,0,2347,455,1,0,0,0,2348,2349, + 7,18,0,0,2349,2350,7,3,0,0,2350,2351,7,12,0,0,2351,2352,7,19,0,0, + 2352,457,1,0,0,0,2353,2354,7,18,0,0,2354,2355,7,12,0,0,2355,2356, + 7,9,0,0,2356,2357,7,6,0,0,2357,2358,7,7,0,0,2358,459,1,0,0,0,2359, + 2360,7,15,0,0,2360,2361,7,3,0,0,2361,2362,7,10,0,0,2362,2363,7,7, + 0,0,2363,461,1,0,0,0,2364,2365,7,4,0,0,2365,2366,7,0,0,0,2366,2367, + 7,17,0,0,2367,463,1,0,0,0,2368,2369,7,4,0,0,2369,2370,7,7,0,0,2370, + 2371,7,0,0,0,2371,2372,7,11,0,0,2372,465,1,0,0,0,2373,2374,7,3,0, + 0,2374,2375,7,16,0,0,2375,2376,7,7,0,0,2376,2377,7,12,0,0,2377,467, + 1,0,0,0,2378,2379,7,21,0,0,2379,2380,7,0,0,0,2380,2381,7,12,0,0, + 2381,2382,7,6,0,0,2382,2383,7,9,0,0,2383,2384,7,6,0,0,2384,2385, + 7,9,0,0,2385,2386,7,3,0,0,2386,2387,7,10,0,0,2387,469,1,0,0,0,2388, + 2389,7,8,0,0,2389,2390,7,0,0,0,2390,2391,7,10,0,0,2391,2392,5,95, + 0,0,2392,2393,7,8,0,0,2393,2394,7,0,0,0,2394,2395,7,2,0,0,2395,2396, + 7,6,0,0,2396,471,1,0,0,0,2397,2398,7,8,0,0,2398,2399,7,0,0,0,2399, + 2400,7,10,0,0,2400,2401,5,95,0,0,2401,2402,7,4,0,0,2402,2403,7,3, + 0,0,2403,2404,7,2,0,0,2404,2405,7,2,0,0,2405,2406,7,4,0,0,2406,2407, + 7,7,0,0,2407,2408,7,2,0,0,2408,2409,7,2,0,0,2409,2410,5,95,0,0,2410, + 2411,7,8,0,0,2411,2412,7,0,0,0,2412,2413,7,2,0,0,2413,2414,7,6,0, + 0,2414,473,1,0,0,0,2415,2416,7,20,0,0,2416,2417,7,9,0,0,2417,2418, + 7,2,0,0,2418,2419,7,2,0,0,2419,2420,7,9,0,0,2420,2421,7,10,0,0,2421, + 2422,7,17,0,0,2422,475,1,0,0,0,2423,2424,7,21,0,0,2424,2425,7,9, + 0,0,2425,2426,7,16,0,0,2426,2427,7,3,0,0,2427,2428,7,6,0,0,2428, + 477,1,0,0,0,2429,2430,7,5,0,0,2430,2431,7,10,0,0,2431,2432,7,21, + 0,0,2432,2433,7,9,0,0,2433,2434,7,16,0,0,2434,2435,7,3,0,0,2435, + 2436,7,6,0,0,2436,479,1,0,0,0,2437,2438,7,4,0,0,2438,2439,7,9,0, + 0,2439,2440,7,20,0,0,2440,2441,7,9,0,0,2441,2442,7,6,0,0,2442,481, + 1,0,0,0,2443,2444,7,3,0,0,2444,2445,7,22,0,0,2445,2446,7,22,0,0, + 2446,2447,7,2,0,0,2447,2448,7,7,0,0,2448,2449,7,6,0,0,2449,483,1, + 0,0,0,2450,2451,7,12,0,0,2451,2452,7,7,0,0,2452,2453,7,20,0,0,2453, + 2454,7,3,0,0,2454,2455,7,16,0,0,2455,2456,7,7,0,0,2456,485,1,0,0, + 0,2457,2458,7,9,0,0,2458,2459,7,10,0,0,2459,2460,7,11,0,0,2460,2461, + 7,7,0,0,2461,2462,7,23,0,0,2462,487,1,0,0,0,2463,2464,7,4,0,0,2464, + 2465,7,7,0,0,2465,2466,7,6,0,0,2466,489,1,0,0,0,2467,2468,7,8,0, + 0,2468,2469,7,3,0,0,2469,2470,7,10,0,0,2470,2471,7,22,0,0,2471,2472, + 7,4,0,0,2472,2473,7,9,0,0,2473,2474,7,8,0,0,2474,2475,7,6,0,0,2475, + 491,1,0,0,0,2476,2477,7,11,0,0,2477,2478,7,3,0,0,2478,493,1,0,0, + 0,2479,2480,7,12,0,0,2480,2481,7,7,0,0,2481,2482,7,6,0,0,2482,2483, + 7,5,0,0,2483,2484,7,12,0,0,2484,2485,7,10,0,0,2485,2486,7,9,0,0, + 2486,2487,7,10,0,0,2487,2488,7,17,0,0,2488,495,1,0,0,0,2489,2490, + 7,20,0,0,2490,2491,7,3,0,0,2491,2492,7,11,0,0,2492,2493,7,9,0,0, + 2493,2494,7,22,0,0,2494,2495,7,9,0,0,2495,2496,7,7,0,0,2496,2497, + 7,11,0,0,2497,497,1,0,0,0,2498,2499,7,10,0,0,2499,2500,7,7,0,0,2500, + 2501,7,18,0,0,2501,499,1,0,0,0,2502,2503,7,3,0,0,2503,2504,7,4,0, + 0,2504,2505,7,11,0,0,2505,501,1,0,0,0,2506,2507,7,10,0,0,2507,2508, + 7,3,0,0,2508,2509,7,6,0,0,2509,2510,7,14,0,0,2510,2511,7,9,0,0,2511, + 2512,7,10,0,0,2512,2513,7,17,0,0,2513,503,1,0,0,0,2514,2515,7,6, + 0,0,2515,2516,7,5,0,0,2516,2517,7,21,0,0,2517,2518,7,4,0,0,2518, + 2519,7,7,0,0,2519,505,1,0,0,0,2520,2521,7,9,0,0,2521,2522,7,10,0, + 0,2522,2523,7,6,0,0,2523,2524,7,7,0,0,2524,2525,7,17,0,0,2525,2526, + 7,7,0,0,2526,2527,7,12,0,0,2527,2528,5,50,0,0,2528,507,1,0,0,0,2529, + 2530,7,9,0,0,2530,2531,7,10,0,0,2531,2532,7,6,0,0,2532,2533,5,50, + 0,0,2533,509,1,0,0,0,2534,2535,7,9,0,0,2535,2536,7,10,0,0,2536,2537, + 7,6,0,0,2537,2538,7,7,0,0,2538,2539,7,17,0,0,2539,2540,7,7,0,0,2540, + 2541,7,12,0,0,2541,2542,5,52,0,0,2542,511,1,0,0,0,2543,2544,7,9, + 0,0,2544,2545,7,10,0,0,2545,2546,7,6,0,0,2546,2547,5,52,0,0,2547, + 513,1,0,0,0,2548,2549,7,9,0,0,2549,2550,7,10,0,0,2550,2551,7,6,0, + 0,2551,2552,7,7,0,0,2552,2553,7,17,0,0,2553,2554,7,7,0,0,2554,2555, + 7,12,0,0,2555,2556,5,56,0,0,2556,515,1,0,0,0,2557,2558,7,9,0,0,2558, + 2559,7,10,0,0,2559,2560,7,6,0,0,2560,2561,5,56,0,0,2561,517,1,0, + 0,0,2562,2563,7,1,0,0,2563,2564,7,9,0,0,2564,2565,7,17,0,0,2565, + 2566,7,9,0,0,2566,2567,7,10,0,0,2567,2568,7,6,0,0,2568,519,1,0,0, + 0,2569,2570,7,1,0,0,2570,2571,7,3,0,0,2571,2572,7,3,0,0,2572,2573, + 7,4,0,0,2573,521,1,0,0,0,2574,2575,7,1,0,0,2575,2576,7,3,0,0,2576, + 2577,7,3,0,0,2577,2578,7,4,0,0,2578,2579,7,7,0,0,2579,2580,7,0,0, + 0,2580,2581,7,10,0,0,2581,523,1,0,0,0,2582,2583,7,2,0,0,2583,2584, + 7,6,0,0,2584,2585,7,12,0,0,2585,2586,7,9,0,0,2586,2587,7,10,0,0, + 2587,2588,7,17,0,0,2588,525,1,0,0,0,2589,2590,7,2,0,0,2590,2591, + 7,13,0,0,2591,2592,7,20,0,0,2592,2593,7,1,0,0,2593,2594,7,3,0,0, + 2594,2595,7,4,0,0,2595,527,1,0,0,0,2596,2597,7,8,0,0,2597,2598,7, + 4,0,0,2598,2599,7,3,0,0,2599,2600,7,1,0,0,2600,529,1,0,0,0,2601, + 2602,7,1,0,0,2602,2603,7,4,0,0,2603,2604,7,3,0,0,2604,2605,7,1,0, + 0,2605,531,1,0,0,0,2606,2607,7,2,0,0,2607,2608,7,6,0,0,2608,2609, + 7,12,0,0,2609,2610,7,5,0,0,2610,2611,7,8,0,0,2611,2612,7,6,0,0,2612, + 533,1,0,0,0,2613,2614,7,4,0,0,2614,2615,7,9,0,0,2615,2616,7,2,0, + 0,2616,2617,7,6,0,0,2617,535,1,0,0,0,2618,2619,7,2,0,0,2619,2620, + 7,7,0,0,2620,2621,7,23,0,0,2621,2622,7,21,0,0,2622,537,1,0,0,0,2623, + 2624,7,1,0,0,2624,2625,7,0,0,0,2625,2626,7,17,0,0,2626,539,1,0,0, + 0,2627,2628,5,94,0,0,2628,541,1,0,0,0,2629,2630,5,44,0,0,2630,543, + 1,0,0,0,2631,2632,5,43,0,0,2632,545,1,0,0,0,2633,2634,5,45,0,0,2634, + 547,1,0,0,0,2635,2636,5,47,0,0,2636,549,1,0,0,0,2637,2638,5,37,0, + 0,2638,551,1,0,0,0,2639,2640,5,64,0,0,2640,553,1,0,0,0,2641,2642, + 5,126,0,0,2642,555,1,0,0,0,2643,2644,5,42,0,0,2644,557,1,0,0,0,2645, + 2646,5,124,0,0,2646,559,1,0,0,0,2647,2648,5,38,0,0,2648,561,1,0, + 0,0,2649,2650,5,33,0,0,2650,563,1,0,0,0,2651,2652,5,60,0,0,2652, + 2653,5,61,0,0,2653,565,1,0,0,0,2654,2655,5,62,0,0,2655,2656,5,61, + 0,0,2656,567,1,0,0,0,2657,2658,5,61,0,0,2658,569,1,0,0,0,2659,2660, + 5,60,0,0,2660,2664,5,62,0,0,2661,2662,5,33,0,0,2662,2664,5,61,0, + 0,2663,2659,1,0,0,0,2663,2661,1,0,0,0,2664,571,1,0,0,0,2665,2666, + 5,124,0,0,2666,2667,5,124,0,0,2667,573,1,0,0,0,2668,2669,5,60,0, + 0,2669,575,1,0,0,0,2670,2671,5,62,0,0,2671,577,1,0,0,0,2672,2673, + 5,60,0,0,2673,2674,5,60,0,0,2674,579,1,0,0,0,2675,2676,5,62,0,0, + 2676,2677,5,62,0,0,2677,581,1,0,0,0,2678,2679,5,91,0,0,2679,583, + 1,0,0,0,2680,2681,5,93,0,0,2681,585,1,0,0,0,2682,2683,5,123,0,0, + 2683,587,1,0,0,0,2684,2685,5,125,0,0,2685,589,1,0,0,0,2686,2687, + 5,40,0,0,2687,591,1,0,0,0,2688,2689,5,41,0,0,2689,593,1,0,0,0,2690, + 2691,5,96,0,0,2691,2692,1,0,0,0,2692,2693,6,296,0,0,2693,2694,6, + 296,1,0,2694,595,1,0,0,0,2695,2696,5,58,0,0,2696,597,1,0,0,0,2697, + 2698,5,59,0,0,2698,599,1,0,0,0,2699,2700,5,63,0,0,2700,601,1,0,0, + 0,2701,2702,5,46,0,0,2702,603,1,0,0,0,2703,2709,5,39,0,0,2704,2705, + 5,39,0,0,2705,2708,5,39,0,0,2706,2708,8,26,0,0,2707,2704,1,0,0,0, + 2707,2706,1,0,0,0,2708,2711,1,0,0,0,2709,2707,1,0,0,0,2709,2710, + 1,0,0,0,2710,2712,1,0,0,0,2711,2709,1,0,0,0,2712,2713,5,39,0,0,2713, + 605,1,0,0,0,2714,2718,3,622,310,0,2715,2717,3,622,310,0,2716,2715, + 1,0,0,0,2717,2720,1,0,0,0,2718,2716,1,0,0,0,2718,2719,1,0,0,0,2719, + 607,1,0,0,0,2720,2718,1,0,0,0,2721,2723,3,622,310,0,2722,2721,1, + 0,0,0,2723,2724,1,0,0,0,2724,2722,1,0,0,0,2724,2725,1,0,0,0,2725, + 2726,1,0,0,0,2726,2730,5,46,0,0,2727,2729,3,622,310,0,2728,2727, + 1,0,0,0,2729,2732,1,0,0,0,2730,2728,1,0,0,0,2730,2731,1,0,0,0,2731, + 2742,1,0,0,0,2732,2730,1,0,0,0,2733,2735,7,7,0,0,2734,2736,7,27, + 0,0,2735,2734,1,0,0,0,2735,2736,1,0,0,0,2736,2738,1,0,0,0,2737,2739, + 3,622,310,0,2738,2737,1,0,0,0,2739,2740,1,0,0,0,2740,2738,1,0,0, + 0,2740,2741,1,0,0,0,2741,2743,1,0,0,0,2742,2733,1,0,0,0,2742,2743, + 1,0,0,0,2743,2782,1,0,0,0,2744,2745,5,46,0,0,2745,2749,3,622,310, + 0,2746,2748,3,622,310,0,2747,2746,1,0,0,0,2748,2751,1,0,0,0,2749, + 2747,1,0,0,0,2749,2750,1,0,0,0,2750,2761,1,0,0,0,2751,2749,1,0,0, + 0,2752,2754,7,7,0,0,2753,2755,7,27,0,0,2754,2753,1,0,0,0,2754,2755, + 1,0,0,0,2755,2757,1,0,0,0,2756,2758,3,622,310,0,2757,2756,1,0,0, + 0,2758,2759,1,0,0,0,2759,2757,1,0,0,0,2759,2760,1,0,0,0,2760,2762, + 1,0,0,0,2761,2752,1,0,0,0,2761,2762,1,0,0,0,2762,2782,1,0,0,0,2763, + 2767,3,622,310,0,2764,2766,3,622,310,0,2765,2764,1,0,0,0,2766,2769, + 1,0,0,0,2767,2765,1,0,0,0,2767,2768,1,0,0,0,2768,2779,1,0,0,0,2769, + 2767,1,0,0,0,2770,2772,7,7,0,0,2771,2773,7,27,0,0,2772,2771,1,0, + 0,0,2772,2773,1,0,0,0,2773,2775,1,0,0,0,2774,2776,3,622,310,0,2775, + 2774,1,0,0,0,2776,2777,1,0,0,0,2777,2775,1,0,0,0,2777,2778,1,0,0, + 0,2778,2780,1,0,0,0,2779,2770,1,0,0,0,2779,2780,1,0,0,0,2780,2782, + 1,0,0,0,2781,2722,1,0,0,0,2781,2744,1,0,0,0,2781,2763,1,0,0,0,2782, + 609,1,0,0,0,2783,2787,7,28,0,0,2784,2786,7,29,0,0,2785,2784,1,0, + 0,0,2786,2789,1,0,0,0,2787,2785,1,0,0,0,2787,2788,1,0,0,0,2788,611, + 1,0,0,0,2789,2787,1,0,0,0,2790,2796,5,34,0,0,2791,2792,5,34,0,0, + 2792,2795,5,34,0,0,2793,2795,8,30,0,0,2794,2791,1,0,0,0,2794,2793, + 1,0,0,0,2795,2798,1,0,0,0,2796,2794,1,0,0,0,2796,2797,1,0,0,0,2797, + 2799,1,0,0,0,2798,2796,1,0,0,0,2799,2800,5,34,0,0,2800,613,1,0,0, + 0,2801,2803,3,628,313,0,2802,2801,1,0,0,0,2803,2804,1,0,0,0,2804, + 2802,1,0,0,0,2804,2805,1,0,0,0,2805,2806,1,0,0,0,2806,2807,6,306, + 2,0,2807,615,1,0,0,0,2808,2809,5,45,0,0,2809,2810,5,45,0,0,2810, + 2814,1,0,0,0,2811,2813,8,31,0,0,2812,2811,1,0,0,0,2813,2816,1,0, + 0,0,2814,2812,1,0,0,0,2814,2815,1,0,0,0,2815,2818,1,0,0,0,2816,2814, + 1,0,0,0,2817,2819,5,13,0,0,2818,2817,1,0,0,0,2818,2819,1,0,0,0,2819, + 2821,1,0,0,0,2820,2822,5,10,0,0,2821,2820,1,0,0,0,2821,2822,1,0, + 0,0,2822,2823,1,0,0,0,2823,2824,6,307,2,0,2824,617,1,0,0,0,2825, + 2826,5,47,0,0,2826,2827,5,42,0,0,2827,2831,1,0,0,0,2828,2830,9,0, + 0,0,2829,2828,1,0,0,0,2830,2833,1,0,0,0,2831,2832,1,0,0,0,2831,2829, + 1,0,0,0,2832,2834,1,0,0,0,2833,2831,1,0,0,0,2834,2835,5,42,0,0,2835, + 2836,5,47,0,0,2836,2837,1,0,0,0,2837,2838,6,308,2,0,2838,619,1,0, + 0,0,2839,2840,9,0,0,0,2840,621,1,0,0,0,2841,2842,7,32,0,0,2842,623, + 1,0,0,0,2843,2844,7,33,0,0,2844,625,1,0,0,0,2845,2846,8,33,0,0,2846, + 627,1,0,0,0,2847,2848,7,34,0,0,2848,629,1,0,0,0,2849,2850,5,47,0, + 0,2850,2851,5,47,0,0,2851,2855,1,0,0,0,2852,2854,9,0,0,0,2853,2852, + 1,0,0,0,2854,2857,1,0,0,0,2855,2856,1,0,0,0,2855,2853,1,0,0,0,2856, + 2860,1,0,0,0,2857,2855,1,0,0,0,2858,2861,3,646,322,0,2859,2861,5, + 0,0,1,2860,2858,1,0,0,0,2860,2859,1,0,0,0,2861,2862,1,0,0,0,2862, + 2863,6,314,0,0,2863,631,1,0,0,0,2864,2865,5,47,0,0,2865,2866,5,42, + 0,0,2866,2870,1,0,0,0,2867,2869,9,0,0,0,2868,2867,1,0,0,0,2869,2872, + 1,0,0,0,2870,2871,1,0,0,0,2870,2868,1,0,0,0,2871,2873,1,0,0,0,2872, + 2870,1,0,0,0,2873,2874,5,42,0,0,2874,2875,5,47,0,0,2875,2876,1,0, + 0,0,2876,2877,6,315,0,0,2877,633,1,0,0,0,2878,2883,3,662,330,0,2879, + 2882,3,668,333,0,2880,2882,3,614,306,0,2881,2879,1,0,0,0,2881,2880, + 1,0,0,0,2882,2885,1,0,0,0,2883,2881,1,0,0,0,2883,2884,1,0,0,0,2884, + 2887,1,0,0,0,2885,2883,1,0,0,0,2886,2888,3,666,332,0,2887,2886,1, + 0,0,0,2887,2888,1,0,0,0,2888,2892,1,0,0,0,2889,2891,3,614,306,0, + 2890,2889,1,0,0,0,2891,2894,1,0,0,0,2892,2890,1,0,0,0,2892,2893, + 1,0,0,0,2893,2895,1,0,0,0,2894,2892,1,0,0,0,2895,2896,3,664,331, + 0,2896,2897,1,0,0,0,2897,2898,6,316,0,0,2898,635,1,0,0,0,2899,2900, + 3,648,323,0,2900,2901,3,652,325,0,2901,2902,3,648,323,0,2902,2903, + 1,0,0,0,2903,2904,6,317,0,0,2904,637,1,0,0,0,2905,2906,3,650,324, + 0,2906,2907,3,654,326,0,2907,2908,3,650,324,0,2908,2909,1,0,0,0, + 2909,2910,6,318,0,0,2910,639,1,0,0,0,2911,2912,3,694,346,0,2912, + 2913,3,676,337,0,2913,2914,3,694,346,0,2914,2915,1,0,0,0,2915,2916, + 6,319,0,0,2916,641,1,0,0,0,2917,2918,5,96,0,0,2918,2919,1,0,0,0, + 2919,2920,6,320,3,0,2920,643,1,0,0,0,2921,2922,9,0,0,0,2922,2923, + 1,0,0,0,2923,2924,6,321,0,0,2924,645,1,0,0,0,2925,2926,5,13,0,0, + 2926,2929,5,10,0,0,2927,2929,7,31,0,0,2928,2925,1,0,0,0,2928,2927, + 1,0,0,0,2929,647,1,0,0,0,2930,2931,5,34,0,0,2931,649,1,0,0,0,2932, + 2933,5,39,0,0,2933,2934,5,39,0,0,2934,2935,5,39,0,0,2935,651,1,0, + 0,0,2936,2939,3,660,329,0,2937,2939,3,656,327,0,2938,2936,1,0,0, + 0,2938,2937,1,0,0,0,2939,2942,1,0,0,0,2940,2938,1,0,0,0,2940,2941, + 1,0,0,0,2941,653,1,0,0,0,2942,2940,1,0,0,0,2943,2946,3,660,329,0, + 2944,2946,3,658,328,0,2945,2943,1,0,0,0,2945,2944,1,0,0,0,2946,2949, + 1,0,0,0,2947,2948,1,0,0,0,2947,2945,1,0,0,0,2948,655,1,0,0,0,2949, + 2947,1,0,0,0,2950,2953,7,35,0,0,2951,2953,3,692,345,0,2952,2950, + 1,0,0,0,2952,2951,1,0,0,0,2953,657,1,0,0,0,2954,2957,7,36,0,0,2955, + 2957,3,614,306,0,2956,2954,1,0,0,0,2956,2955,1,0,0,0,2957,659,1, + 0,0,0,2958,2962,3,680,339,0,2959,2962,3,684,341,0,2960,2962,3,686, + 342,0,2961,2958,1,0,0,0,2961,2959,1,0,0,0,2961,2960,1,0,0,0,2962, + 661,1,0,0,0,2963,2964,5,123,0,0,2964,2965,5,123,0,0,2965,663,1,0, + 0,0,2966,2967,5,125,0,0,2967,2968,5,125,0,0,2968,665,1,0,0,0,2969, + 2972,3,670,334,0,2970,2972,3,672,335,0,2971,2969,1,0,0,0,2971,2970, + 1,0,0,0,2972,667,1,0,0,0,2973,2977,3,674,336,0,2974,2976,3,614,306, + 0,2975,2974,1,0,0,0,2976,2979,1,0,0,0,2977,2975,1,0,0,0,2977,2978, + 1,0,0,0,2978,2980,1,0,0,0,2979,2977,1,0,0,0,2980,2984,3,674,336, + 0,2981,2983,3,614,306,0,2982,2981,1,0,0,0,2983,2986,1,0,0,0,2984, + 2982,1,0,0,0,2984,2985,1,0,0,0,2985,2987,1,0,0,0,2986,2984,1,0,0, + 0,2987,2991,3,674,336,0,2988,2990,3,614,306,0,2989,2988,1,0,0,0, + 2990,2993,1,0,0,0,2991,2989,1,0,0,0,2991,2992,1,0,0,0,2992,2994, + 1,0,0,0,2993,2991,1,0,0,0,2994,2995,3,674,336,0,2995,669,1,0,0,0, + 2996,3000,3,674,336,0,2997,2999,3,614,306,0,2998,2997,1,0,0,0,2999, + 3002,1,0,0,0,3000,2998,1,0,0,0,3000,3001,1,0,0,0,3001,3003,1,0,0, + 0,3002,3000,1,0,0,0,3003,3007,3,674,336,0,3004,3006,3,614,306,0, + 3005,3004,1,0,0,0,3006,3009,1,0,0,0,3007,3005,1,0,0,0,3007,3008, + 1,0,0,0,3008,3010,1,0,0,0,3009,3007,1,0,0,0,3010,3014,3,674,336, + 0,3011,3013,3,614,306,0,3012,3011,1,0,0,0,3013,3016,1,0,0,0,3014, + 3012,1,0,0,0,3014,3015,1,0,0,0,3015,3017,1,0,0,0,3016,3014,1,0,0, + 0,3017,3018,5,61,0,0,3018,671,1,0,0,0,3019,3023,3,674,336,0,3020, + 3022,3,614,306,0,3021,3020,1,0,0,0,3022,3025,1,0,0,0,3023,3021,1, + 0,0,0,3023,3024,1,0,0,0,3024,3026,1,0,0,0,3025,3023,1,0,0,0,3026, + 3030,3,674,336,0,3027,3029,3,614,306,0,3028,3027,1,0,0,0,3029,3032, + 1,0,0,0,3030,3028,1,0,0,0,3030,3031,1,0,0,0,3031,3033,1,0,0,0,3032, + 3030,1,0,0,0,3033,3037,5,61,0,0,3034,3036,3,614,306,0,3035,3034, + 1,0,0,0,3036,3039,1,0,0,0,3037,3035,1,0,0,0,3037,3038,1,0,0,0,3038, + 3040,1,0,0,0,3039,3037,1,0,0,0,3040,3041,5,61,0,0,3041,673,1,0,0, + 0,3042,3043,7,37,0,0,3043,675,1,0,0,0,3044,3047,3,660,329,0,3045, + 3047,3,678,338,0,3046,3044,1,0,0,0,3046,3045,1,0,0,0,3047,3050,1, + 0,0,0,3048,3046,1,0,0,0,3048,3049,1,0,0,0,3049,677,1,0,0,0,3050, + 3048,1,0,0,0,3051,3054,7,38,0,0,3052,3054,3,692,345,0,3053,3051, + 1,0,0,0,3053,3052,1,0,0,0,3054,679,1,0,0,0,3055,3056,5,92,0,0,3056, + 3057,3,682,340,0,3057,681,1,0,0,0,3058,3061,7,39,0,0,3059,3061,3, + 646,322,0,3060,3058,1,0,0,0,3060,3059,1,0,0,0,3061,683,1,0,0,0,3062, + 3063,5,92,0,0,3063,3064,7,23,0,0,3064,3065,1,0,0,0,3065,3066,3,690, + 344,0,3066,3067,3,690,344,0,3067,685,1,0,0,0,3068,3069,5,92,0,0, + 3069,3070,7,5,0,0,3070,3071,1,0,0,0,3071,3090,3,688,343,0,3072,3073, + 5,92,0,0,3073,3074,7,5,0,0,3074,3075,5,48,0,0,3075,3076,5,48,0,0, + 3076,3077,5,48,0,0,3077,3078,1,0,0,0,3078,3079,3,688,343,0,3079, + 3080,3,690,344,0,3080,3090,1,0,0,0,3081,3082,5,92,0,0,3082,3083, + 7,5,0,0,3083,3084,5,48,0,0,3084,3085,5,48,0,0,3085,3086,5,49,0,0, + 3086,3087,5,48,0,0,3087,3088,1,0,0,0,3088,3090,3,688,343,0,3089, + 3068,1,0,0,0,3089,3072,1,0,0,0,3089,3081,1,0,0,0,3090,687,1,0,0, + 0,3091,3092,3,690,344,0,3092,3093,3,690,344,0,3093,3094,3,690,344, + 0,3094,3095,3,690,344,0,3095,689,1,0,0,0,3096,3097,7,40,0,0,3097, + 691,1,0,0,0,3098,3099,7,41,0,0,3099,693,1,0,0,0,3100,3101,5,39,0, + 0,3101,695,1,0,0,0,58,0,1,2663,2707,2709,2718,2724,2730,2735,2740, + 2742,2749,2754,2759,2761,2767,2772,2777,2779,2781,2787,2794,2796, + 2804,2814,2818,2821,2831,2855,2860,2870,2881,2883,2887,2892,2928, + 2938,2940,2945,2947,2952,2956,2961,2971,2977,2984,2991,3000,3007, + 3014,3023,3030,3037,3046,3048,3053,3060,3089,4,3,0,0,5,1,0,0,1,0, 4,0,0 ] @@ -1236,263 +1239,264 @@ class PartiQLLexer(Lexer): CURRENT_USER = 51 CURSOR = 52 DATE = 53 - DEALLOCATE = 54 - DEC = 55 - DECIMAL = 56 - DECLARE = 57 - DEFAULT = 58 - DEFERRABLE = 59 - DEFERRED = 60 - DELETE = 61 - DESC = 62 - DESCRIBE = 63 - DESCRIPTOR = 64 - DIAGNOSTICS = 65 - DISCONNECT = 66 - DISTINCT = 67 - DOMAIN = 68 - DOUBLE = 69 - DROP = 70 - ELSE = 71 - END = 72 - END_EXEC = 73 - ESCAPE = 74 - EVERY = 75 - EXCEPT = 76 - EXCEPTION = 77 - EXCLUDE = 78 - EXCLUDED = 79 - EXEC = 80 - EXECUTE = 81 - EXISTS = 82 - EXPLAIN = 83 - EXTERNAL = 84 - EXTRACT = 85 - DATE_ADD = 86 - DATE_DIFF = 87 - FALSE = 88 - FETCH = 89 - FIRST = 90 - FLOAT = 91 - FOR = 92 - FOREIGN = 93 - FOUND = 94 - FROM = 95 - FULL = 96 - GET = 97 - GLOBAL = 98 - GO = 99 - GOTO = 100 - GRANT = 101 - GROUP = 102 - HAVING = 103 - IDENTITY = 104 - IMMEDIATE = 105 - IN = 106 - INDICATOR = 107 - INITIALLY = 108 - INNER = 109 - INPUT = 110 - INSENSITIVE = 111 - INSERT = 112 - INT = 113 - INTEGER = 114 - INTERSECT = 115 - INTERVAL = 116 - INTO = 117 - IS = 118 - ISOLATION = 119 - JOIN = 120 - KEY = 121 - LANGUAGE = 122 - LAST = 123 - LATERAL = 124 - LEFT = 125 - LEVEL = 126 - LIKE = 127 - LOCAL = 128 - LOWER = 129 - MATCH = 130 - MAX = 131 - MIN = 132 - MODULE = 133 - NAMES = 134 - NATIONAL = 135 - NATURAL = 136 - NCHAR = 137 - NEXT = 138 - NO = 139 - NOT = 140 - NULL = 141 - NULLS = 142 - NULLIF = 143 - NUMERIC = 144 - OCTET_LENGTH = 145 - OF = 146 - ON = 147 - ONLY = 148 - OPEN = 149 - OPTION = 150 - OR = 151 - ORDER = 152 - OUTER = 153 - OUTPUT = 154 - OVERLAPS = 155 - OVERLAY = 156 - PAD = 157 - PARTIAL = 158 - PLACING = 159 - POSITION = 160 - PRECISION = 161 - PREPARE = 162 - PRESERVE = 163 - PRIMARY = 164 - PRIOR = 165 - PRIVILEGES = 166 - PROCEDURE = 167 - PUBLIC = 168 - READ = 169 - REAL = 170 - REFERENCES = 171 - RELATIVE = 172 - REPLACE = 173 - RESTRICT = 174 - REVOKE = 175 - RIGHT = 176 - ROLLBACK = 177 - ROWS = 178 - SCHEMA = 179 - SCROLL = 180 - SECTION = 181 - SELECT = 182 - SESSION = 183 - SESSION_USER = 184 - SET = 185 - SHORTEST = 186 - SIZE = 187 - SMALLINT = 188 - SOME = 189 - SPACE = 190 - SQL = 191 - SQLCODE = 192 - SQLERROR = 193 - SQLSTATE = 194 - SUBSTRING = 195 - SUM = 196 - SYSTEM_USER = 197 - TABLE = 198 - TEMPORARY = 199 - THEN = 200 - TIME = 201 - TIMESTAMP = 202 - TO = 203 - TRANSACTION = 204 - TRANSLATE = 205 - TRANSLATION = 206 - TRIM = 207 - TRUE = 208 - UNION = 209 - UNIQUE = 210 - UNKNOWN = 211 - UPDATE = 212 - UPPER = 213 - UPSERT = 214 - USAGE = 215 - USER = 216 - USING = 217 - VALUE = 218 - VALUES = 219 - VARCHAR = 220 - VARYING = 221 - VIEW = 222 - WHEN = 223 - WHENEVER = 224 - WHERE = 225 - WITH = 226 - WORK = 227 - WRITE = 228 - ZONE = 229 - LAG = 230 - LEAD = 231 - OVER = 232 - PARTITION = 233 - CAN_CAST = 234 - CAN_LOSSLESS_CAST = 235 - MISSING = 236 - PIVOT = 237 - UNPIVOT = 238 - LIMIT = 239 - OFFSET = 240 - REMOVE = 241 - INDEX = 242 - LET = 243 - CONFLICT = 244 - DO = 245 - RETURNING = 246 - MODIFIED = 247 - NEW = 248 - OLD = 249 - NOTHING = 250 - TUPLE = 251 - INTEGER2 = 252 - INT2 = 253 - INTEGER4 = 254 - INT4 = 255 - INTEGER8 = 256 - INT8 = 257 - BIGINT = 258 - BOOL = 259 - BOOLEAN = 260 - STRING = 261 - SYMBOL = 262 - CLOB = 263 - BLOB = 264 - STRUCT = 265 - LIST = 266 - SEXP = 267 - BAG = 268 - CARET = 269 - COMMA = 270 - PLUS = 271 - MINUS = 272 - SLASH_FORWARD = 273 - PERCENT = 274 - AT_SIGN = 275 - TILDE = 276 - ASTERISK = 277 - VERTBAR = 278 - AMPERSAND = 279 - BANG = 280 - LT_EQ = 281 - GT_EQ = 282 - EQ = 283 - NEQ = 284 - CONCAT = 285 - ANGLE_LEFT = 286 - ANGLE_RIGHT = 287 - ANGLE_DOUBLE_LEFT = 288 - ANGLE_DOUBLE_RIGHT = 289 - BRACKET_LEFT = 290 - BRACKET_RIGHT = 291 - BRACE_LEFT = 292 - BRACE_RIGHT = 293 - PAREN_LEFT = 294 - PAREN_RIGHT = 295 - COLON = 296 - COLON_SEMI = 297 - QUESTION_MARK = 298 - PERIOD = 299 - LITERAL_STRING = 300 - LITERAL_INTEGER = 301 - LITERAL_DECIMAL = 302 - IDENTIFIER = 303 - IDENTIFIER_QUOTED = 304 - WS = 305 - COMMENT_SINGLE = 306 - COMMENT_BLOCK = 307 - UNRECOGNIZED = 308 - ION_CLOSURE = 309 - BACKTICK = 310 + DATETIME = 54 + DEALLOCATE = 55 + DEC = 56 + DECIMAL = 57 + DECLARE = 58 + DEFAULT = 59 + DEFERRABLE = 60 + DEFERRED = 61 + DELETE = 62 + DESC = 63 + DESCRIBE = 64 + DESCRIPTOR = 65 + DIAGNOSTICS = 66 + DISCONNECT = 67 + DISTINCT = 68 + DOMAIN = 69 + DOUBLE = 70 + DROP = 71 + ELSE = 72 + END = 73 + END_EXEC = 74 + ESCAPE = 75 + EVERY = 76 + EXCEPT = 77 + EXCEPTION = 78 + EXCLUDE = 79 + EXCLUDED = 80 + EXEC = 81 + EXECUTE = 82 + EXISTS = 83 + EXPLAIN = 84 + EXTERNAL = 85 + EXTRACT = 86 + DATE_ADD = 87 + DATE_DIFF = 88 + FALSE = 89 + FETCH = 90 + FIRST = 91 + FLOAT = 92 + FOR = 93 + FOREIGN = 94 + FOUND = 95 + FROM = 96 + FULL = 97 + GET = 98 + GLOBAL = 99 + GO = 100 + GOTO = 101 + GRANT = 102 + GROUP = 103 + HAVING = 104 + IDENTITY = 105 + IMMEDIATE = 106 + IN = 107 + INDICATOR = 108 + INITIALLY = 109 + INNER = 110 + INPUT = 111 + INSENSITIVE = 112 + INSERT = 113 + INT = 114 + INTEGER = 115 + INTERSECT = 116 + INTERVAL = 117 + INTO = 118 + IS = 119 + ISOLATION = 120 + JOIN = 121 + KEY = 122 + LANGUAGE = 123 + LAST = 124 + LATERAL = 125 + LEFT = 126 + LEVEL = 127 + LIKE = 128 + LOCAL = 129 + LOWER = 130 + MATCH = 131 + MAX = 132 + MIN = 133 + MODULE = 134 + NAMES = 135 + NATIONAL = 136 + NATURAL = 137 + NCHAR = 138 + NEXT = 139 + NO = 140 + NOT = 141 + NULL = 142 + NULLS = 143 + NULLIF = 144 + NUMERIC = 145 + OCTET_LENGTH = 146 + OF = 147 + ON = 148 + ONLY = 149 + OPEN = 150 + OPTION = 151 + OR = 152 + ORDER = 153 + OUTER = 154 + OUTPUT = 155 + OVERLAPS = 156 + OVERLAY = 157 + PAD = 158 + PARTIAL = 159 + PLACING = 160 + POSITION = 161 + PRECISION = 162 + PREPARE = 163 + PRESERVE = 164 + PRIMARY = 165 + PRIOR = 166 + PRIVILEGES = 167 + PROCEDURE = 168 + PUBLIC = 169 + READ = 170 + REAL = 171 + REFERENCES = 172 + RELATIVE = 173 + REPLACE = 174 + RESTRICT = 175 + REVOKE = 176 + RIGHT = 177 + ROLLBACK = 178 + ROWS = 179 + SCHEMA = 180 + SCROLL = 181 + SECTION = 182 + SELECT = 183 + SESSION = 184 + SESSION_USER = 185 + SET = 186 + SHORTEST = 187 + SIZE = 188 + SMALLINT = 189 + SOME = 190 + SPACE = 191 + SQL = 192 + SQLCODE = 193 + SQLERROR = 194 + SQLSTATE = 195 + SUBSTRING = 196 + SUM = 197 + SYSTEM_USER = 198 + TABLE = 199 + TEMPORARY = 200 + THEN = 201 + TIME = 202 + TIMESTAMP = 203 + TO = 204 + TRANSACTION = 205 + TRANSLATE = 206 + TRANSLATION = 207 + TRIM = 208 + TRUE = 209 + UNION = 210 + UNIQUE = 211 + UNKNOWN = 212 + UPDATE = 213 + UPPER = 214 + UPSERT = 215 + USAGE = 216 + USER = 217 + USING = 218 + VALUE = 219 + VALUES = 220 + VARCHAR = 221 + VARYING = 222 + VIEW = 223 + WHEN = 224 + WHENEVER = 225 + WHERE = 226 + WITH = 227 + WORK = 228 + WRITE = 229 + ZONE = 230 + LAG = 231 + LEAD = 232 + OVER = 233 + PARTITION = 234 + CAN_CAST = 235 + CAN_LOSSLESS_CAST = 236 + MISSING = 237 + PIVOT = 238 + UNPIVOT = 239 + LIMIT = 240 + OFFSET = 241 + REMOVE = 242 + INDEX = 243 + LET = 244 + CONFLICT = 245 + DO = 246 + RETURNING = 247 + MODIFIED = 248 + NEW = 249 + OLD = 250 + NOTHING = 251 + TUPLE = 252 + INTEGER2 = 253 + INT2 = 254 + INTEGER4 = 255 + INT4 = 256 + INTEGER8 = 257 + INT8 = 258 + BIGINT = 259 + BOOL = 260 + BOOLEAN = 261 + STRING = 262 + SYMBOL = 263 + CLOB = 264 + BLOB = 265 + STRUCT = 266 + LIST = 267 + SEXP = 268 + BAG = 269 + CARET = 270 + COMMA = 271 + PLUS = 272 + MINUS = 273 + SLASH_FORWARD = 274 + PERCENT = 275 + AT_SIGN = 276 + TILDE = 277 + ASTERISK = 278 + VERTBAR = 279 + AMPERSAND = 280 + BANG = 281 + LT_EQ = 282 + GT_EQ = 283 + EQ = 284 + NEQ = 285 + CONCAT = 286 + ANGLE_LEFT = 287 + ANGLE_RIGHT = 288 + ANGLE_DOUBLE_LEFT = 289 + ANGLE_DOUBLE_RIGHT = 290 + BRACKET_LEFT = 291 + BRACKET_RIGHT = 292 + BRACE_LEFT = 293 + BRACE_RIGHT = 294 + PAREN_LEFT = 295 + PAREN_RIGHT = 296 + COLON = 297 + COLON_SEMI = 298 + QUESTION_MARK = 299 + PERIOD = 300 + LITERAL_STRING = 301 + LITERAL_INTEGER = 302 + LITERAL_DECIMAL = 303 + IDENTIFIER = 304 + IDENTIFIER_QUOTED = 305 + WS = 306 + COMMENT_SINGLE = 307 + COMMENT_BLOCK = 308 + UNRECOGNIZED = 309 + ION_CLOSURE = 310 + BACKTICK = 311 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -1509,44 +1513,44 @@ class PartiQLLexer(Lexer): "'CONSTRAINT'", "'CONSTRAINTS'", "'CONTINUE'", "'CONVERT'", "'CORRESPONDING'", "'COUNT'", "'CREATE'", "'CROSS'", "'CURRENT'", "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURRENT_USER'", - "'CURSOR'", "'DATE'", "'DEALLOCATE'", "'DEC'", "'DECIMAL'", - "'DECLARE'", "'DEFAULT'", "'DEFERRABLE'", "'DEFERRED'", "'DELETE'", - "'DESC'", "'DESCRIBE'", "'DESCRIPTOR'", "'DIAGNOSTICS'", "'DISCONNECT'", - "'DISTINCT'", "'DOMAIN'", "'DOUBLE'", "'DROP'", "'ELSE'", "'END'", - "'END-EXEC'", "'ESCAPE'", "'EVERY'", "'EXCEPT'", "'EXCEPTION'", - "'EXCLUDE'", "'EXCLUDED'", "'EXEC'", "'EXECUTE'", "'EXISTS'", - "'EXPLAIN'", "'EXTERNAL'", "'EXTRACT'", "'DATE_ADD'", "'DATE_DIFF'", - "'FALSE'", "'FETCH'", "'FIRST'", "'FLOAT'", "'FOR'", "'FOREIGN'", - "'FOUND'", "'FROM'", "'FULL'", "'GET'", "'GLOBAL'", "'GO'", - "'GOTO'", "'GRANT'", "'GROUP'", "'HAVING'", "'IDENTITY'", "'IMMEDIATE'", - "'IN'", "'INDICATOR'", "'INITIALLY'", "'INNER'", "'INPUT'", - "'INSENSITIVE'", "'INSERT'", "'INT'", "'INTEGER'", "'INTERSECT'", - "'INTERVAL'", "'INTO'", "'IS'", "'ISOLATION'", "'JOIN'", "'KEY'", - "'LANGUAGE'", "'LAST'", "'LATERAL'", "'LEFT'", "'LEVEL'", "'LIKE'", - "'LOCAL'", "'LOWER'", "'MATCH'", "'MAX'", "'MIN'", "'MODULE'", - "'NAMES'", "'NATIONAL'", "'NATURAL'", "'NCHAR'", "'NEXT'", "'NO'", - "'NOT'", "'NULL'", "'NULLS'", "'NULLIF'", "'NUMERIC'", "'OCTET_LENGTH'", - "'OF'", "'ON'", "'ONLY'", "'OPEN'", "'OPTION'", "'OR'", "'ORDER'", - "'OUTER'", "'OUTPUT'", "'OVERLAPS'", "'OVERLAY'", "'PAD'", "'PARTIAL'", - "'PLACING'", "'POSITION'", "'PRECISION'", "'PREPARE'", "'PRESERVE'", - "'PRIMARY'", "'PRIOR'", "'PRIVILEGES'", "'PROCEDURE'", "'PUBLIC'", - "'READ'", "'REAL'", "'REFERENCES'", "'RELATIVE'", "'REPLACE'", - "'RESTRICT'", "'REVOKE'", "'RIGHT'", "'ROLLBACK'", "'ROWS'", - "'SCHEMA'", "'SCROLL'", "'SECTION'", "'SELECT'", "'SESSION'", - "'SESSION_USER'", "'SET'", "'SHORTEST'", "'SIZE'", "'SMALLINT'", - "'SOME'", "'SPACE'", "'SQL'", "'SQLCODE'", "'SQLERROR'", "'SQLSTATE'", - "'SUBSTRING'", "'SUM'", "'SYSTEM_USER'", "'TABLE'", "'TEMPORARY'", - "'THEN'", "'TIME'", "'TIMESTAMP'", "'TO'", "'TRANSACTION'", - "'TRANSLATE'", "'TRANSLATION'", "'TRIM'", "'TRUE'", "'UNION'", - "'UNIQUE'", "'UNKNOWN'", "'UPDATE'", "'UPPER'", "'UPSERT'", - "'USAGE'", "'USER'", "'USING'", "'VALUE'", "'VALUES'", "'VARCHAR'", - "'VARYING'", "'VIEW'", "'WHEN'", "'WHENEVER'", "'WHERE'", "'WITH'", - "'WORK'", "'WRITE'", "'ZONE'", "'LAG'", "'LEAD'", "'OVER'", - "'PARTITION'", "'CAN_CAST'", "'CAN_LOSSLESS_CAST'", "'MISSING'", - "'PIVOT'", "'UNPIVOT'", "'LIMIT'", "'OFFSET'", "'REMOVE'", "'INDEX'", - "'LET'", "'CONFLICT'", "'DO'", "'RETURNING'", "'MODIFIED'", - "'NEW'", "'OLD'", "'NOTHING'", "'TUPLE'", "'INTEGER2'", "'INT2'", - "'INTEGER4'", "'INT4'", "'INTEGER8'", "'INT8'", "'BIGINT'", + "'CURSOR'", "'DATE'", "'DATETIME'", "'DEALLOCATE'", "'DEC'", + "'DECIMAL'", "'DECLARE'", "'DEFAULT'", "'DEFERRABLE'", "'DEFERRED'", + "'DELETE'", "'DESC'", "'DESCRIBE'", "'DESCRIPTOR'", "'DIAGNOSTICS'", + "'DISCONNECT'", "'DISTINCT'", "'DOMAIN'", "'DOUBLE'", "'DROP'", + "'ELSE'", "'END'", "'END-EXEC'", "'ESCAPE'", "'EVERY'", "'EXCEPT'", + "'EXCEPTION'", "'EXCLUDE'", "'EXCLUDED'", "'EXEC'", "'EXECUTE'", + "'EXISTS'", "'EXPLAIN'", "'EXTERNAL'", "'EXTRACT'", "'DATE_ADD'", + "'DATE_DIFF'", "'FALSE'", "'FETCH'", "'FIRST'", "'FLOAT'", "'FOR'", + "'FOREIGN'", "'FOUND'", "'FROM'", "'FULL'", "'GET'", "'GLOBAL'", + "'GO'", "'GOTO'", "'GRANT'", "'GROUP'", "'HAVING'", "'IDENTITY'", + "'IMMEDIATE'", "'IN'", "'INDICATOR'", "'INITIALLY'", "'INNER'", + "'INPUT'", "'INSENSITIVE'", "'INSERT'", "'INT'", "'INTEGER'", + "'INTERSECT'", "'INTERVAL'", "'INTO'", "'IS'", "'ISOLATION'", + "'JOIN'", "'KEY'", "'LANGUAGE'", "'LAST'", "'LATERAL'", "'LEFT'", + "'LEVEL'", "'LIKE'", "'LOCAL'", "'LOWER'", "'MATCH'", "'MAX'", + "'MIN'", "'MODULE'", "'NAMES'", "'NATIONAL'", "'NATURAL'", "'NCHAR'", + "'NEXT'", "'NO'", "'NOT'", "'NULL'", "'NULLS'", "'NULLIF'", + "'NUMERIC'", "'OCTET_LENGTH'", "'OF'", "'ON'", "'ONLY'", "'OPEN'", + "'OPTION'", "'OR'", "'ORDER'", "'OUTER'", "'OUTPUT'", "'OVERLAPS'", + "'OVERLAY'", "'PAD'", "'PARTIAL'", "'PLACING'", "'POSITION'", + "'PRECISION'", "'PREPARE'", "'PRESERVE'", "'PRIMARY'", "'PRIOR'", + "'PRIVILEGES'", "'PROCEDURE'", "'PUBLIC'", "'READ'", "'REAL'", + "'REFERENCES'", "'RELATIVE'", "'REPLACE'", "'RESTRICT'", "'REVOKE'", + "'RIGHT'", "'ROLLBACK'", "'ROWS'", "'SCHEMA'", "'SCROLL'", "'SECTION'", + "'SELECT'", "'SESSION'", "'SESSION_USER'", "'SET'", "'SHORTEST'", + "'SIZE'", "'SMALLINT'", "'SOME'", "'SPACE'", "'SQL'", "'SQLCODE'", + "'SQLERROR'", "'SQLSTATE'", "'SUBSTRING'", "'SUM'", "'SYSTEM_USER'", + "'TABLE'", "'TEMPORARY'", "'THEN'", "'TIME'", "'TIMESTAMP'", + "'TO'", "'TRANSACTION'", "'TRANSLATE'", "'TRANSLATION'", "'TRIM'", + "'TRUE'", "'UNION'", "'UNIQUE'", "'UNKNOWN'", "'UPDATE'", "'UPPER'", + "'UPSERT'", "'USAGE'", "'USER'", "'USING'", "'VALUE'", "'VALUES'", + "'VARCHAR'", "'VARYING'", "'VIEW'", "'WHEN'", "'WHENEVER'", + "'WHERE'", "'WITH'", "'WORK'", "'WRITE'", "'ZONE'", "'LAG'", + "'LEAD'", "'OVER'", "'PARTITION'", "'CAN_CAST'", "'CAN_LOSSLESS_CAST'", + "'MISSING'", "'PIVOT'", "'UNPIVOT'", "'LIMIT'", "'OFFSET'", + "'REMOVE'", "'INDEX'", "'LET'", "'CONFLICT'", "'DO'", "'RETURNING'", + "'MODIFIED'", "'NEW'", "'OLD'", "'NOTHING'", "'TUPLE'", "'INTEGER2'", + "'INT2'", "'INTEGER4'", "'INT4'", "'INTEGER8'", "'INT8'", "'BIGINT'", "'BOOL'", "'BOOLEAN'", "'STRING'", "'SYMBOL'", "'CLOB'", "'BLOB'", "'STRUCT'", "'LIST'", "'SEXP'", "'BAG'", "'^'", "','", "'+'", "'-'", "'/'", "'%'", "'@'", "'~'", "'*'", "'|'", "'&'", "'!'", @@ -1563,21 +1567,21 @@ class PartiQLLexer(Lexer): "COLLATE", "COLLATION", "COLUMN", "COMMIT", "CONNECT", "CONNECTION", "CONSTRAINT", "CONSTRAINTS", "CONTINUE", "CONVERT", "CORRESPONDING", "COUNT", "CREATE", "CROSS", "CURRENT", "CURRENT_DATE", "CURRENT_TIME", - "CURRENT_TIMESTAMP", "CURRENT_USER", "CURSOR", "DATE", "DEALLOCATE", - "DEC", "DECIMAL", "DECLARE", "DEFAULT", "DEFERRABLE", "DEFERRED", - "DELETE", "DESC", "DESCRIBE", "DESCRIPTOR", "DIAGNOSTICS", "DISCONNECT", - "DISTINCT", "DOMAIN", "DOUBLE", "DROP", "ELSE", "END", "END_EXEC", - "ESCAPE", "EVERY", "EXCEPT", "EXCEPTION", "EXCLUDE", "EXCLUDED", - "EXEC", "EXECUTE", "EXISTS", "EXPLAIN", "EXTERNAL", "EXTRACT", - "DATE_ADD", "DATE_DIFF", "FALSE", "FETCH", "FIRST", "FLOAT", - "FOR", "FOREIGN", "FOUND", "FROM", "FULL", "GET", "GLOBAL", - "GO", "GOTO", "GRANT", "GROUP", "HAVING", "IDENTITY", "IMMEDIATE", - "IN", "INDICATOR", "INITIALLY", "INNER", "INPUT", "INSENSITIVE", - "INSERT", "INT", "INTEGER", "INTERSECT", "INTERVAL", "INTO", - "IS", "ISOLATION", "JOIN", "KEY", "LANGUAGE", "LAST", "LATERAL", - "LEFT", "LEVEL", "LIKE", "LOCAL", "LOWER", "MATCH", "MAX", "MIN", - "MODULE", "NAMES", "NATIONAL", "NATURAL", "NCHAR", "NEXT", "NO", - "NOT", "NULL", "NULLS", "NULLIF", "NUMERIC", "OCTET_LENGTH", + "CURRENT_TIMESTAMP", "CURRENT_USER", "CURSOR", "DATE", "DATETIME", + "DEALLOCATE", "DEC", "DECIMAL", "DECLARE", "DEFAULT", "DEFERRABLE", + "DEFERRED", "DELETE", "DESC", "DESCRIBE", "DESCRIPTOR", "DIAGNOSTICS", + "DISCONNECT", "DISTINCT", "DOMAIN", "DOUBLE", "DROP", "ELSE", + "END", "END_EXEC", "ESCAPE", "EVERY", "EXCEPT", "EXCEPTION", + "EXCLUDE", "EXCLUDED", "EXEC", "EXECUTE", "EXISTS", "EXPLAIN", + "EXTERNAL", "EXTRACT", "DATE_ADD", "DATE_DIFF", "FALSE", "FETCH", + "FIRST", "FLOAT", "FOR", "FOREIGN", "FOUND", "FROM", "FULL", + "GET", "GLOBAL", "GO", "GOTO", "GRANT", "GROUP", "HAVING", "IDENTITY", + "IMMEDIATE", "IN", "INDICATOR", "INITIALLY", "INNER", "INPUT", + "INSENSITIVE", "INSERT", "INT", "INTEGER", "INTERSECT", "INTERVAL", + "INTO", "IS", "ISOLATION", "JOIN", "KEY", "LANGUAGE", "LAST", + "LATERAL", "LEFT", "LEVEL", "LIKE", "LOCAL", "LOWER", "MATCH", + "MAX", "MIN", "MODULE", "NAMES", "NATIONAL", "NATURAL", "NCHAR", + "NEXT", "NO", "NOT", "NULL", "NULLS", "NULLIF", "NUMERIC", "OCTET_LENGTH", "OF", "ON", "ONLY", "OPEN", "OPTION", "OR", "ORDER", "OUTER", "OUTPUT", "OVERLAPS", "OVERLAY", "PAD", "PARTIAL", "PLACING", "POSITION", "PRECISION", "PREPARE", "PRESERVE", "PRIMARY", "PRIOR", @@ -1616,51 +1620,51 @@ class PartiQLLexer(Lexer): "COMMIT", "CONNECT", "CONNECTION", "CONSTRAINT", "CONSTRAINTS", "CONTINUE", "CONVERT", "CORRESPONDING", "COUNT", "CREATE", "CROSS", "CURRENT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", - "CURRENT_USER", "CURSOR", "DATE", "DEALLOCATE", "DEC", - "DECIMAL", "DECLARE", "DEFAULT", "DEFERRABLE", "DEFERRED", - "DELETE", "DESC", "DESCRIBE", "DESCRIPTOR", "DIAGNOSTICS", - "DISCONNECT", "DISTINCT", "DOMAIN", "DOUBLE", "DROP", - "ELSE", "END", "END_EXEC", "ESCAPE", "EVERY", "EXCEPT", - "EXCEPTION", "EXCLUDE", "EXCLUDED", "EXEC", "EXECUTE", - "EXISTS", "EXPLAIN", "EXTERNAL", "EXTRACT", "DATE_ADD", - "DATE_DIFF", "FALSE", "FETCH", "FIRST", "FLOAT", "FOR", - "FOREIGN", "FOUND", "FROM", "FULL", "GET", "GLOBAL", "GO", - "GOTO", "GRANT", "GROUP", "HAVING", "IDENTITY", "IMMEDIATE", - "IN", "INDICATOR", "INITIALLY", "INNER", "INPUT", "INSENSITIVE", - "INSERT", "INT", "INTEGER", "INTERSECT", "INTERVAL", "INTO", - "IS", "ISOLATION", "JOIN", "KEY", "LANGUAGE", "LAST", - "LATERAL", "LEFT", "LEVEL", "LIKE", "LOCAL", "LOWER", - "MATCH", "MAX", "MIN", "MODULE", "NAMES", "NATIONAL", - "NATURAL", "NCHAR", "NEXT", "NO", "NOT", "NULL", "NULLS", - "NULLIF", "NUMERIC", "OCTET_LENGTH", "OF", "ON", "ONLY", - "OPEN", "OPTION", "OR", "ORDER", "OUTER", "OUTPUT", "OVERLAPS", - "OVERLAY", "PAD", "PARTIAL", "PLACING", "POSITION", "PRECISION", - "PREPARE", "PRESERVE", "PRIMARY", "PRIOR", "PRIVILEGES", - "PROCEDURE", "PUBLIC", "READ", "REAL", "REFERENCES", "RELATIVE", - "REPLACE", "RESTRICT", "REVOKE", "RIGHT", "ROLLBACK", - "ROWS", "SCHEMA", "SCROLL", "SECTION", "SELECT", "SESSION", - "SESSION_USER", "SET", "SHORTEST", "SIZE", "SMALLINT", - "SOME", "SPACE", "SQL", "SQLCODE", "SQLERROR", "SQLSTATE", - "SUBSTRING", "SUM", "SYSTEM_USER", "TABLE", "TEMPORARY", - "THEN", "TIME", "TIMESTAMP", "TO", "TRANSACTION", "TRANSLATE", - "TRANSLATION", "TRIM", "TRUE", "UNION", "UNIQUE", "UNKNOWN", - "UPDATE", "UPPER", "UPSERT", "USAGE", "USER", "USING", - "VALUE", "VALUES", "VARCHAR", "VARYING", "VIEW", "WHEN", - "WHENEVER", "WHERE", "WITH", "WORK", "WRITE", "ZONE", - "LAG", "LEAD", "OVER", "PARTITION", "CAN_CAST", "CAN_LOSSLESS_CAST", - "MISSING", "PIVOT", "UNPIVOT", "LIMIT", "OFFSET", "REMOVE", - "INDEX", "LET", "CONFLICT", "DO", "RETURNING", "MODIFIED", - "NEW", "OLD", "NOTHING", "TUPLE", "INTEGER2", "INT2", - "INTEGER4", "INT4", "INTEGER8", "INT8", "BIGINT", "BOOL", - "BOOLEAN", "STRING", "SYMBOL", "CLOB", "BLOB", "STRUCT", - "LIST", "SEXP", "BAG", "CARET", "COMMA", "PLUS", "MINUS", - "SLASH_FORWARD", "PERCENT", "AT_SIGN", "TILDE", "ASTERISK", - "VERTBAR", "AMPERSAND", "BANG", "LT_EQ", "GT_EQ", "EQ", - "NEQ", "CONCAT", "ANGLE_LEFT", "ANGLE_RIGHT", "ANGLE_DOUBLE_LEFT", - "ANGLE_DOUBLE_RIGHT", "BRACKET_LEFT", "BRACKET_RIGHT", - "BRACE_LEFT", "BRACE_RIGHT", "PAREN_LEFT", "PAREN_RIGHT", - "BACKTICK", "COLON", "COLON_SEMI", "QUESTION_MARK", "PERIOD", - "LITERAL_STRING", "LITERAL_INTEGER", "LITERAL_DECIMAL", + "CURRENT_USER", "CURSOR", "DATE", "DATETIME", "DEALLOCATE", + "DEC", "DECIMAL", "DECLARE", "DEFAULT", "DEFERRABLE", + "DEFERRED", "DELETE", "DESC", "DESCRIBE", "DESCRIPTOR", + "DIAGNOSTICS", "DISCONNECT", "DISTINCT", "DOMAIN", "DOUBLE", + "DROP", "ELSE", "END", "END_EXEC", "ESCAPE", "EVERY", + "EXCEPT", "EXCEPTION", "EXCLUDE", "EXCLUDED", "EXEC", + "EXECUTE", "EXISTS", "EXPLAIN", "EXTERNAL", "EXTRACT", + "DATE_ADD", "DATE_DIFF", "FALSE", "FETCH", "FIRST", "FLOAT", + "FOR", "FOREIGN", "FOUND", "FROM", "FULL", "GET", "GLOBAL", + "GO", "GOTO", "GRANT", "GROUP", "HAVING", "IDENTITY", + "IMMEDIATE", "IN", "INDICATOR", "INITIALLY", "INNER", + "INPUT", "INSENSITIVE", "INSERT", "INT", "INTEGER", "INTERSECT", + "INTERVAL", "INTO", "IS", "ISOLATION", "JOIN", "KEY", + "LANGUAGE", "LAST", "LATERAL", "LEFT", "LEVEL", "LIKE", + "LOCAL", "LOWER", "MATCH", "MAX", "MIN", "MODULE", "NAMES", + "NATIONAL", "NATURAL", "NCHAR", "NEXT", "NO", "NOT", "NULL", + "NULLS", "NULLIF", "NUMERIC", "OCTET_LENGTH", "OF", "ON", + "ONLY", "OPEN", "OPTION", "OR", "ORDER", "OUTER", "OUTPUT", + "OVERLAPS", "OVERLAY", "PAD", "PARTIAL", "PLACING", "POSITION", + "PRECISION", "PREPARE", "PRESERVE", "PRIMARY", "PRIOR", + "PRIVILEGES", "PROCEDURE", "PUBLIC", "READ", "REAL", "REFERENCES", + "RELATIVE", "REPLACE", "RESTRICT", "REVOKE", "RIGHT", + "ROLLBACK", "ROWS", "SCHEMA", "SCROLL", "SECTION", "SELECT", + "SESSION", "SESSION_USER", "SET", "SHORTEST", "SIZE", + "SMALLINT", "SOME", "SPACE", "SQL", "SQLCODE", "SQLERROR", + "SQLSTATE", "SUBSTRING", "SUM", "SYSTEM_USER", "TABLE", + "TEMPORARY", "THEN", "TIME", "TIMESTAMP", "TO", "TRANSACTION", + "TRANSLATE", "TRANSLATION", "TRIM", "TRUE", "UNION", "UNIQUE", + "UNKNOWN", "UPDATE", "UPPER", "UPSERT", "USAGE", "USER", + "USING", "VALUE", "VALUES", "VARCHAR", "VARYING", "VIEW", + "WHEN", "WHENEVER", "WHERE", "WITH", "WORK", "WRITE", + "ZONE", "LAG", "LEAD", "OVER", "PARTITION", "CAN_CAST", + "CAN_LOSSLESS_CAST", "MISSING", "PIVOT", "UNPIVOT", "LIMIT", + "OFFSET", "REMOVE", "INDEX", "LET", "CONFLICT", "DO", + "RETURNING", "MODIFIED", "NEW", "OLD", "NOTHING", "TUPLE", + "INTEGER2", "INT2", "INTEGER4", "INT4", "INTEGER8", "INT8", + "BIGINT", "BOOL", "BOOLEAN", "STRING", "SYMBOL", "CLOB", + "BLOB", "STRUCT", "LIST", "SEXP", "BAG", "CARET", "COMMA", + "PLUS", "MINUS", "SLASH_FORWARD", "PERCENT", "AT_SIGN", + "TILDE", "ASTERISK", "VERTBAR", "AMPERSAND", "BANG", "LT_EQ", + "GT_EQ", "EQ", "NEQ", "CONCAT", "ANGLE_LEFT", "ANGLE_RIGHT", + "ANGLE_DOUBLE_LEFT", "ANGLE_DOUBLE_RIGHT", "BRACKET_LEFT", + "BRACKET_RIGHT", "BRACE_LEFT", "BRACE_RIGHT", "PAREN_LEFT", + "PAREN_RIGHT", "BACKTICK", "COLON", "COLON_SEMI", "QUESTION_MARK", + "PERIOD", "LITERAL_STRING", "LITERAL_INTEGER", "LITERAL_DECIMAL", "IDENTIFIER", "IDENTIFIER_QUOTED", "WS", "COMMENT_SINGLE", "COMMENT_BLOCK", "UNRECOGNIZED", "DIGIT", "LETTER", "LETTER_NOT", "WHITESPACE", "ION_INLINE_COMMENT", "ION_BLOCK_COMMENT", @@ -1678,7 +1682,7 @@ class PartiQLLexer(Lexer): def __init__(self, input=None, output:TextIO = sys.stdout): super().__init__(input, output) - self.checkVersion("4.13.0") + self.checkVersion("4.13.1") self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) self._actions = None self._predicates = None diff --git a/pymongosql/sql/partiql/PartiQLParser.g4 b/pymongosql/sql/partiql/PartiQLParser.g4 index 61b0417..198625d 100644 --- a/pymongosql/sql/partiql/PartiQLParser.g4 +++ b/pymongosql/sql/partiql/PartiQLParser.g4 @@ -723,7 +723,7 @@ functionCall // SQL-99 10.4 � ::= [ ] functionName - : (qualifier+=symbolPrimitive PERIOD)* name=( CHAR_LENGTH | CHARACTER_LENGTH | OCTET_LENGTH | BIT_LENGTH | UPPER | LOWER | SIZE | EXISTS | COUNT ) # FunctionNameReserved + : (qualifier+=symbolPrimitive PERIOD)* name=( CHAR_LENGTH | CHARACTER_LENGTH | OCTET_LENGTH | BIT_LENGTH | UPPER | LOWER | SIZE | EXISTS | COUNT | DATE | DATETIME | SUBSTRING | REPLACE | TRIM ) # FunctionNameReserved | (qualifier+=symbolPrimitive PERIOD)* name=symbolPrimitive # FunctionNameSymbol ; diff --git a/pymongosql/sql/partiql/PartiQLParser.py b/pymongosql/sql/partiql/PartiQLParser.py index 38e260b..dd6a02a 100644 --- a/pymongosql/sql/partiql/PartiQLParser.py +++ b/pymongosql/sql/partiql/PartiQLParser.py @@ -1,4 +1,4 @@ -# Generated from PartiQLParser.g4 by ANTLR 4.13.0 +# Generated from PartiQLParser.g4 by ANTLR 4.13.1 # encoding: utf-8 from antlr4 import * from io import StringIO @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,1,310,1826,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 4,1,311,1826,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7, 13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2, 20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7, @@ -188,574 +188,574 @@ def serializedATN(): 176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206, 208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238, 240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270, - 272,274,276,278,0,21,1,0,303,304,2,0,4,4,247,247,1,0,248,249,2,0, - 4,4,67,67,2,0,11,11,62,62,2,0,90,90,123,123,2,0,4,4,8,8,2,0,271, - 271,277,277,2,0,281,284,286,287,2,0,279,279,285,285,1,0,271,272, - 2,0,273,274,277,277,1,0,266,267,7,0,8,8,15,15,44,44,75,75,131,132, - 189,189,196,196,1,0,230,231,1,0,86,87,8,0,19,19,28,29,44,44,82,82, - 129,129,145,145,187,187,213,213,9,0,8,8,26,27,53,53,113,114,141, - 141,170,170,188,188,236,236,251,268,3,0,26,27,91,91,220,220,2,0, - 55,56,144,144,1,0,201,202,1991,0,294,1,0,0,0,2,315,1,0,0,0,4,317, - 1,0,0,0,6,320,1,0,0,0,8,323,1,0,0,0,10,326,1,0,0,0,12,329,1,0,0, - 0,14,331,1,0,0,0,16,333,1,0,0,0,18,350,1,0,0,0,20,355,1,0,0,0,22, - 357,1,0,0,0,24,359,1,0,0,0,26,361,1,0,0,0,28,365,1,0,0,0,30,391, - 1,0,0,0,32,402,1,0,0,0,34,404,1,0,0,0,36,412,1,0,0,0,38,422,1,0, - 0,0,40,429,1,0,0,0,42,458,1,0,0,0,44,466,1,0,0,0,46,468,1,0,0,0, - 48,485,1,0,0,0,50,487,1,0,0,0,52,495,1,0,0,0,54,503,1,0,0,0,56,506, - 1,0,0,0,58,541,1,0,0,0,60,543,1,0,0,0,62,554,1,0,0,0,64,561,1,0, - 0,0,66,573,1,0,0,0,68,594,1,0,0,0,70,596,1,0,0,0,72,606,1,0,0,0, - 74,608,1,0,0,0,76,613,1,0,0,0,78,618,1,0,0,0,80,621,1,0,0,0,82,630, - 1,0,0,0,84,634,1,0,0,0,86,642,1,0,0,0,88,657,1,0,0,0,90,674,1,0, - 0,0,92,676,1,0,0,0,94,700,1,0,0,0,96,702,1,0,0,0,98,710,1,0,0,0, - 100,717,1,0,0,0,102,719,1,0,0,0,104,728,1,0,0,0,106,732,1,0,0,0, - 108,742,1,0,0,0,110,750,1,0,0,0,112,766,1,0,0,0,114,770,1,0,0,0, - 116,775,1,0,0,0,118,785,1,0,0,0,120,795,1,0,0,0,122,805,1,0,0,0, - 124,808,1,0,0,0,126,817,1,0,0,0,128,836,1,0,0,0,130,838,1,0,0,0, - 132,841,1,0,0,0,134,844,1,0,0,0,136,847,1,0,0,0,138,851,1,0,0,0, - 140,856,1,0,0,0,142,867,1,0,0,0,144,881,1,0,0,0,146,894,1,0,0,0, - 148,896,1,0,0,0,150,899,1,0,0,0,152,901,1,0,0,0,154,922,1,0,0,0, - 156,962,1,0,0,0,158,972,1,0,0,0,160,1008,1,0,0,0,162,1010,1,0,0, - 0,164,1023,1,0,0,0,166,1034,1,0,0,0,168,1048,1,0,0,0,170,1056,1, - 0,0,0,172,1070,1,0,0,0,174,1078,1,0,0,0,176,1105,1,0,0,0,178,1130, - 1,0,0,0,180,1132,1,0,0,0,182,1148,1,0,0,0,184,1150,1,0,0,0,186,1167, - 1,0,0,0,188,1169,1,0,0,0,190,1171,1,0,0,0,192,1233,1,0,0,0,194,1235, - 1,0,0,0,196,1246,1,0,0,0,198,1260,1,0,0,0,200,1262,1,0,0,0,202,1313, - 1,0,0,0,204,1324,1,0,0,0,206,1335,1,0,0,0,208,1349,1,0,0,0,210,1372, - 1,0,0,0,212,1396,1,0,0,0,214,1398,1,0,0,0,216,1405,1,0,0,0,218,1417, - 1,0,0,0,220,1436,1,0,0,0,222,1445,1,0,0,0,224,1456,1,0,0,0,226,1466, - 1,0,0,0,228,1506,1,0,0,0,230,1522,1,0,0,0,232,1550,1,0,0,0,234,1564, - 1,0,0,0,236,1566,1,0,0,0,238,1580,1,0,0,0,240,1587,1,0,0,0,242,1594, - 1,0,0,0,244,1601,1,0,0,0,246,1608,1,0,0,0,248,1622,1,0,0,0,250,1631, - 1,0,0,0,252,1663,1,0,0,0,254,1676,1,0,0,0,256,1678,1,0,0,0,258,1684, - 1,0,0,0,260,1688,1,0,0,0,262,1698,1,0,0,0,264,1700,1,0,0,0,266,1704, - 1,0,0,0,268,1706,1,0,0,0,270,1719,1,0,0,0,272,1732,1,0,0,0,274,1745, - 1,0,0,0,276,1783,1,0,0,0,278,1823,1,0,0,0,280,292,5,83,0,0,281,282, - 5,294,0,0,282,287,3,4,2,0,283,284,5,270,0,0,284,286,3,4,2,0,285, - 283,1,0,0,0,286,289,1,0,0,0,287,285,1,0,0,0,287,288,1,0,0,0,288, - 290,1,0,0,0,289,287,1,0,0,0,290,291,5,295,0,0,291,293,1,0,0,0,292, - 281,1,0,0,0,292,293,1,0,0,0,293,295,1,0,0,0,294,280,1,0,0,0,294, - 295,1,0,0,0,295,296,1,0,0,0,296,297,3,2,1,0,297,298,5,0,0,1,298, - 1,1,0,0,0,299,301,3,14,7,0,300,302,5,297,0,0,301,300,1,0,0,0,301, - 302,1,0,0,0,302,316,1,0,0,0,303,305,3,42,21,0,304,306,5,297,0,0, - 305,304,1,0,0,0,305,306,1,0,0,0,306,316,1,0,0,0,307,309,3,28,14, - 0,308,310,5,297,0,0,309,308,1,0,0,0,309,310,1,0,0,0,310,316,1,0, - 0,0,311,313,3,16,8,0,312,314,5,297,0,0,313,312,1,0,0,0,313,314,1, - 0,0,0,314,316,1,0,0,0,315,299,1,0,0,0,315,303,1,0,0,0,315,307,1, - 0,0,0,315,311,1,0,0,0,316,3,1,0,0,0,317,318,5,303,0,0,318,319,5, - 303,0,0,319,5,1,0,0,0,320,321,5,10,0,0,321,322,3,12,6,0,322,7,1, - 0,0,0,323,324,5,13,0,0,324,325,3,12,6,0,325,9,1,0,0,0,326,327,5, - 20,0,0,327,328,3,12,6,0,328,11,1,0,0,0,329,330,7,0,0,0,330,13,1, - 0,0,0,331,332,3,188,94,0,332,15,1,0,0,0,333,334,5,80,0,0,334,343, - 3,188,94,0,335,340,3,188,94,0,336,337,5,270,0,0,337,339,3,188,94, - 0,338,336,1,0,0,0,339,342,1,0,0,0,340,338,1,0,0,0,340,341,1,0,0, - 0,341,344,1,0,0,0,342,340,1,0,0,0,343,335,1,0,0,0,343,344,1,0,0, - 0,344,17,1,0,0,0,345,346,3,12,6,0,346,347,5,299,0,0,347,349,1,0, - 0,0,348,345,1,0,0,0,349,352,1,0,0,0,350,348,1,0,0,0,350,351,1,0, - 0,0,351,353,1,0,0,0,352,350,1,0,0,0,353,354,3,12,6,0,354,19,1,0, - 0,0,355,356,3,12,6,0,356,21,1,0,0,0,357,358,3,12,6,0,358,23,1,0, - 0,0,359,360,3,12,6,0,360,25,1,0,0,0,361,362,3,12,6,0,362,27,1,0, - 0,0,363,366,3,30,15,0,364,366,3,32,16,0,365,363,1,0,0,0,365,364, - 1,0,0,0,366,29,1,0,0,0,367,368,5,45,0,0,368,369,5,198,0,0,369,374, - 3,18,9,0,370,371,5,294,0,0,371,372,3,34,17,0,372,373,5,295,0,0,373, - 375,1,0,0,0,374,370,1,0,0,0,374,375,1,0,0,0,375,392,1,0,0,0,376, - 377,5,45,0,0,377,378,5,242,0,0,378,379,5,147,0,0,379,380,3,12,6, - 0,380,381,5,294,0,0,381,386,3,46,23,0,382,383,5,270,0,0,383,385, - 3,46,23,0,384,382,1,0,0,0,385,388,1,0,0,0,386,384,1,0,0,0,386,387, - 1,0,0,0,387,389,1,0,0,0,388,386,1,0,0,0,389,390,5,295,0,0,390,392, - 1,0,0,0,391,367,1,0,0,0,391,376,1,0,0,0,392,31,1,0,0,0,393,394,5, - 70,0,0,394,395,5,198,0,0,395,403,3,18,9,0,396,397,5,70,0,0,397,398, - 5,242,0,0,398,399,3,12,6,0,399,400,5,147,0,0,400,401,3,12,6,0,401, - 403,1,0,0,0,402,393,1,0,0,0,402,396,1,0,0,0,403,33,1,0,0,0,404,409, - 3,36,18,0,405,406,5,270,0,0,406,408,3,36,18,0,407,405,1,0,0,0,408, - 411,1,0,0,0,409,407,1,0,0,0,409,410,1,0,0,0,410,35,1,0,0,0,411,409, - 1,0,0,0,412,413,3,24,12,0,413,417,3,278,139,0,414,416,3,38,19,0, - 415,414,1,0,0,0,416,419,1,0,0,0,417,415,1,0,0,0,417,418,1,0,0,0, - 418,37,1,0,0,0,419,417,1,0,0,0,420,421,5,39,0,0,421,423,3,26,13, - 0,422,420,1,0,0,0,422,423,1,0,0,0,423,424,1,0,0,0,424,425,3,40,20, - 0,425,39,1,0,0,0,426,427,5,140,0,0,427,430,5,141,0,0,428,430,5,141, - 0,0,429,426,1,0,0,0,429,428,1,0,0,0,430,41,1,0,0,0,431,433,3,78, - 39,0,432,434,3,44,22,0,433,432,1,0,0,0,434,435,1,0,0,0,435,433,1, - 0,0,0,435,436,1,0,0,0,436,438,1,0,0,0,437,439,3,92,46,0,438,437, - 1,0,0,0,438,439,1,0,0,0,439,441,1,0,0,0,440,442,3,86,43,0,441,440, - 1,0,0,0,441,442,1,0,0,0,442,459,1,0,0,0,443,445,3,130,65,0,444,446, - 3,92,46,0,445,444,1,0,0,0,445,446,1,0,0,0,446,448,1,0,0,0,447,449, - 3,44,22,0,448,447,1,0,0,0,449,450,1,0,0,0,450,448,1,0,0,0,450,451, - 1,0,0,0,451,453,1,0,0,0,452,454,3,86,43,0,453,452,1,0,0,0,453,454, - 1,0,0,0,454,459,1,0,0,0,455,459,3,84,42,0,456,459,3,56,28,0,457, - 459,3,44,22,0,458,431,1,0,0,0,458,443,1,0,0,0,458,455,1,0,0,0,458, - 456,1,0,0,0,458,457,1,0,0,0,459,43,1,0,0,0,460,467,3,58,29,0,461, - 467,3,64,32,0,462,467,3,80,40,0,463,467,3,50,25,0,464,467,3,54,27, - 0,465,467,3,52,26,0,466,460,1,0,0,0,466,461,1,0,0,0,466,462,1,0, - 0,0,466,463,1,0,0,0,466,464,1,0,0,0,466,465,1,0,0,0,467,45,1,0,0, - 0,468,472,3,12,6,0,469,471,3,48,24,0,470,469,1,0,0,0,471,474,1,0, - 0,0,472,470,1,0,0,0,472,473,1,0,0,0,473,47,1,0,0,0,474,472,1,0,0, - 0,475,476,5,290,0,0,476,477,3,276,138,0,477,478,5,291,0,0,478,486, - 1,0,0,0,479,480,5,290,0,0,480,481,3,12,6,0,481,482,5,291,0,0,482, - 486,1,0,0,0,483,484,5,299,0,0,484,486,3,12,6,0,485,475,1,0,0,0,485, - 479,1,0,0,0,485,483,1,0,0,0,486,49,1,0,0,0,487,488,5,173,0,0,488, - 489,5,117,0,0,489,491,3,12,6,0,490,492,3,6,3,0,491,490,1,0,0,0,491, - 492,1,0,0,0,492,493,1,0,0,0,493,494,3,188,94,0,494,51,1,0,0,0,495, - 496,5,214,0,0,496,497,5,117,0,0,497,499,3,12,6,0,498,500,3,6,3,0, - 499,498,1,0,0,0,499,500,1,0,0,0,500,501,1,0,0,0,501,502,3,188,94, - 0,502,53,1,0,0,0,503,504,5,241,0,0,504,505,3,46,23,0,505,55,1,0, - 0,0,506,507,5,112,0,0,507,508,5,117,0,0,508,509,3,46,23,0,509,510, - 5,218,0,0,510,513,3,188,94,0,511,512,5,13,0,0,512,514,3,188,94,0, - 513,511,1,0,0,0,513,514,1,0,0,0,514,516,1,0,0,0,515,517,3,66,33, - 0,516,515,1,0,0,0,516,517,1,0,0,0,517,519,1,0,0,0,518,520,3,86,43, - 0,519,518,1,0,0,0,519,520,1,0,0,0,520,57,1,0,0,0,521,522,5,112,0, - 0,522,523,5,117,0,0,523,525,3,12,6,0,524,526,3,60,30,0,525,524,1, - 0,0,0,525,526,1,0,0,0,526,527,1,0,0,0,527,529,3,220,110,0,528,530, - 3,62,31,0,529,528,1,0,0,0,529,530,1,0,0,0,530,542,1,0,0,0,531,532, - 5,112,0,0,532,533,5,117,0,0,533,535,3,12,6,0,534,536,3,6,3,0,535, - 534,1,0,0,0,535,536,1,0,0,0,536,537,1,0,0,0,537,539,3,188,94,0,538, - 540,3,62,31,0,539,538,1,0,0,0,539,540,1,0,0,0,540,542,1,0,0,0,541, - 521,1,0,0,0,541,531,1,0,0,0,542,59,1,0,0,0,543,544,5,294,0,0,544, - 549,3,24,12,0,545,546,5,270,0,0,546,548,3,24,12,0,547,545,1,0,0, - 0,548,551,1,0,0,0,549,547,1,0,0,0,549,550,1,0,0,0,550,552,1,0,0, - 0,551,549,1,0,0,0,552,553,5,295,0,0,553,61,1,0,0,0,554,555,5,147, - 0,0,555,557,5,244,0,0,556,558,3,68,34,0,557,556,1,0,0,0,557,558, - 1,0,0,0,558,559,1,0,0,0,559,560,3,72,36,0,560,63,1,0,0,0,561,562, - 5,112,0,0,562,563,5,117,0,0,563,564,3,46,23,0,564,565,5,218,0,0, - 565,568,3,188,94,0,566,567,5,13,0,0,567,569,3,188,94,0,568,566,1, - 0,0,0,568,569,1,0,0,0,569,571,1,0,0,0,570,572,3,66,33,0,571,570, - 1,0,0,0,571,572,1,0,0,0,572,65,1,0,0,0,573,574,5,147,0,0,574,575, - 5,244,0,0,575,576,5,225,0,0,576,577,3,188,94,0,577,578,5,245,0,0, - 578,579,5,250,0,0,579,67,1,0,0,0,580,581,5,294,0,0,581,586,3,12, - 6,0,582,583,5,270,0,0,583,585,3,12,6,0,584,582,1,0,0,0,585,588,1, - 0,0,0,586,584,1,0,0,0,586,587,1,0,0,0,587,589,1,0,0,0,588,586,1, - 0,0,0,589,590,5,295,0,0,590,595,1,0,0,0,591,592,5,147,0,0,592,593, - 5,39,0,0,593,595,3,70,35,0,594,580,1,0,0,0,594,591,1,0,0,0,595,69, - 1,0,0,0,596,597,3,12,6,0,597,71,1,0,0,0,598,599,5,245,0,0,599,607, - 5,250,0,0,600,601,5,245,0,0,601,602,5,173,0,0,602,607,3,74,37,0, - 603,604,5,245,0,0,604,605,5,212,0,0,605,607,3,76,38,0,606,598,1, - 0,0,0,606,600,1,0,0,0,606,603,1,0,0,0,607,73,1,0,0,0,608,611,5,79, - 0,0,609,610,5,225,0,0,610,612,3,188,94,0,611,609,1,0,0,0,611,612, - 1,0,0,0,612,75,1,0,0,0,613,616,5,79,0,0,614,615,5,225,0,0,615,617, - 3,188,94,0,616,614,1,0,0,0,616,617,1,0,0,0,617,77,1,0,0,0,618,619, - 5,212,0,0,619,620,3,178,89,0,620,79,1,0,0,0,621,622,5,185,0,0,622, - 627,3,82,41,0,623,624,5,270,0,0,624,626,3,82,41,0,625,623,1,0,0, - 0,626,629,1,0,0,0,627,625,1,0,0,0,627,628,1,0,0,0,628,81,1,0,0,0, - 629,627,1,0,0,0,630,631,3,46,23,0,631,632,5,283,0,0,632,633,3,188, - 94,0,633,83,1,0,0,0,634,635,5,61,0,0,635,637,3,90,45,0,636,638,3, - 92,46,0,637,636,1,0,0,0,637,638,1,0,0,0,638,640,1,0,0,0,639,641, - 3,86,43,0,640,639,1,0,0,0,640,641,1,0,0,0,641,85,1,0,0,0,642,643, - 5,246,0,0,643,648,3,88,44,0,644,645,5,270,0,0,645,647,3,88,44,0, - 646,644,1,0,0,0,647,650,1,0,0,0,648,646,1,0,0,0,648,649,1,0,0,0, - 649,87,1,0,0,0,650,648,1,0,0,0,651,652,7,1,0,0,652,653,7,2,0,0,653, - 658,5,277,0,0,654,655,7,1,0,0,655,656,7,2,0,0,656,658,3,188,94,0, - 657,651,1,0,0,0,657,654,1,0,0,0,658,89,1,0,0,0,659,660,5,95,0,0, - 660,662,3,46,23,0,661,663,3,6,3,0,662,661,1,0,0,0,662,663,1,0,0, - 0,663,665,1,0,0,0,664,666,3,8,4,0,665,664,1,0,0,0,665,666,1,0,0, - 0,666,668,1,0,0,0,667,669,3,10,5,0,668,667,1,0,0,0,668,669,1,0,0, - 0,669,675,1,0,0,0,670,671,5,95,0,0,671,672,3,46,23,0,672,673,3,12, - 6,0,673,675,1,0,0,0,674,659,1,0,0,0,674,670,1,0,0,0,675,91,1,0,0, - 0,676,677,5,225,0,0,677,678,3,188,94,0,678,93,1,0,0,0,679,681,5, - 182,0,0,680,682,3,100,50,0,681,680,1,0,0,0,681,682,1,0,0,0,682,683, - 1,0,0,0,683,701,5,277,0,0,684,686,5,182,0,0,685,687,3,100,50,0,686, - 685,1,0,0,0,686,687,1,0,0,0,687,688,1,0,0,0,688,701,3,96,48,0,689, - 691,5,182,0,0,690,692,3,100,50,0,691,690,1,0,0,0,691,692,1,0,0,0, - 692,693,1,0,0,0,693,694,5,218,0,0,694,701,3,188,94,0,695,696,5,237, - 0,0,696,697,3,188,94,0,697,698,5,13,0,0,698,699,3,188,94,0,699,701, - 1,0,0,0,700,679,1,0,0,0,700,684,1,0,0,0,700,689,1,0,0,0,700,695, - 1,0,0,0,701,95,1,0,0,0,702,707,3,98,49,0,703,704,5,270,0,0,704,706, - 3,98,49,0,705,703,1,0,0,0,706,709,1,0,0,0,707,705,1,0,0,0,707,708, - 1,0,0,0,708,97,1,0,0,0,709,707,1,0,0,0,710,715,3,188,94,0,711,713, - 5,10,0,0,712,711,1,0,0,0,712,713,1,0,0,0,713,714,1,0,0,0,714,716, - 3,12,6,0,715,712,1,0,0,0,715,716,1,0,0,0,716,99,1,0,0,0,717,718, - 7,3,0,0,718,101,1,0,0,0,719,720,5,243,0,0,720,725,3,104,52,0,721, - 722,5,270,0,0,722,724,3,104,52,0,723,721,1,0,0,0,724,727,1,0,0,0, - 725,723,1,0,0,0,725,726,1,0,0,0,726,103,1,0,0,0,727,725,1,0,0,0, - 728,729,3,188,94,0,729,730,5,10,0,0,730,731,3,12,6,0,731,105,1,0, - 0,0,732,733,5,152,0,0,733,734,5,20,0,0,734,739,3,108,54,0,735,736, - 5,270,0,0,736,738,3,108,54,0,737,735,1,0,0,0,738,741,1,0,0,0,739, - 737,1,0,0,0,739,740,1,0,0,0,740,107,1,0,0,0,741,739,1,0,0,0,742, - 744,3,188,94,0,743,745,7,4,0,0,744,743,1,0,0,0,744,745,1,0,0,0,745, - 748,1,0,0,0,746,747,5,142,0,0,747,749,7,5,0,0,748,746,1,0,0,0,748, - 749,1,0,0,0,749,109,1,0,0,0,750,752,5,102,0,0,751,753,5,158,0,0, - 752,751,1,0,0,0,752,753,1,0,0,0,753,754,1,0,0,0,754,755,5,20,0,0, - 755,760,3,114,57,0,756,757,5,270,0,0,757,759,3,114,57,0,758,756, - 1,0,0,0,759,762,1,0,0,0,760,758,1,0,0,0,760,761,1,0,0,0,761,764, - 1,0,0,0,762,760,1,0,0,0,763,765,3,112,56,0,764,763,1,0,0,0,764,765, - 1,0,0,0,765,111,1,0,0,0,766,767,5,102,0,0,767,768,5,10,0,0,768,769, - 3,12,6,0,769,113,1,0,0,0,770,773,3,192,96,0,771,772,5,10,0,0,772, - 774,3,12,6,0,773,771,1,0,0,0,773,774,1,0,0,0,774,115,1,0,0,0,775, - 776,5,232,0,0,776,778,5,294,0,0,777,779,3,118,59,0,778,777,1,0,0, - 0,778,779,1,0,0,0,779,781,1,0,0,0,780,782,3,120,60,0,781,780,1,0, - 0,0,781,782,1,0,0,0,782,783,1,0,0,0,783,784,5,295,0,0,784,117,1, - 0,0,0,785,786,5,233,0,0,786,787,5,20,0,0,787,792,3,188,94,0,788, - 789,5,270,0,0,789,791,3,188,94,0,790,788,1,0,0,0,791,794,1,0,0,0, - 792,790,1,0,0,0,792,793,1,0,0,0,793,119,1,0,0,0,794,792,1,0,0,0, - 795,796,5,152,0,0,796,797,5,20,0,0,797,802,3,108,54,0,798,799,5, - 270,0,0,799,801,3,108,54,0,800,798,1,0,0,0,801,804,1,0,0,0,802,800, - 1,0,0,0,802,803,1,0,0,0,803,121,1,0,0,0,804,802,1,0,0,0,805,806, - 5,103,0,0,806,807,3,192,96,0,807,123,1,0,0,0,808,809,5,78,0,0,809, - 814,3,126,63,0,810,811,5,270,0,0,811,813,3,126,63,0,812,810,1,0, - 0,0,813,816,1,0,0,0,814,812,1,0,0,0,814,815,1,0,0,0,815,125,1,0, - 0,0,816,814,1,0,0,0,817,819,3,12,6,0,818,820,3,128,64,0,819,818, - 1,0,0,0,820,821,1,0,0,0,821,819,1,0,0,0,821,822,1,0,0,0,822,127, - 1,0,0,0,823,824,5,299,0,0,824,837,3,12,6,0,825,826,5,290,0,0,826, - 827,5,300,0,0,827,837,5,291,0,0,828,829,5,290,0,0,829,830,5,301, - 0,0,830,837,5,291,0,0,831,832,5,290,0,0,832,833,5,277,0,0,833,837, - 5,291,0,0,834,835,5,299,0,0,835,837,5,277,0,0,836,823,1,0,0,0,836, - 825,1,0,0,0,836,828,1,0,0,0,836,831,1,0,0,0,836,834,1,0,0,0,837, - 129,1,0,0,0,838,839,5,95,0,0,839,840,3,174,87,0,840,131,1,0,0,0, - 841,842,5,225,0,0,842,843,3,192,96,0,843,133,1,0,0,0,844,845,5,240, - 0,0,845,846,3,192,96,0,846,135,1,0,0,0,847,848,5,239,0,0,848,849, - 3,192,96,0,849,137,1,0,0,0,850,852,3,146,73,0,851,850,1,0,0,0,851, - 852,1,0,0,0,852,853,1,0,0,0,853,854,3,142,71,0,854,139,1,0,0,0,855, - 857,3,146,73,0,856,855,1,0,0,0,856,857,1,0,0,0,857,858,1,0,0,0,858, - 863,3,142,71,0,859,860,5,270,0,0,860,862,3,142,71,0,861,859,1,0, - 0,0,862,865,1,0,0,0,863,861,1,0,0,0,863,864,1,0,0,0,864,141,1,0, - 0,0,865,863,1,0,0,0,866,868,3,150,75,0,867,866,1,0,0,0,867,868,1, - 0,0,0,868,870,1,0,0,0,869,871,3,148,74,0,870,869,1,0,0,0,870,871, - 1,0,0,0,871,875,1,0,0,0,872,874,3,144,72,0,873,872,1,0,0,0,874,877, - 1,0,0,0,875,873,1,0,0,0,875,876,1,0,0,0,876,143,1,0,0,0,877,875, - 1,0,0,0,878,882,3,152,76,0,879,882,3,154,77,0,880,882,3,156,78,0, - 881,878,1,0,0,0,881,879,1,0,0,0,881,880,1,0,0,0,882,145,1,0,0,0, - 883,884,7,6,0,0,884,895,5,186,0,0,885,887,5,8,0,0,886,888,5,301, - 0,0,887,886,1,0,0,0,887,888,1,0,0,0,888,895,1,0,0,0,889,890,5,186, - 0,0,890,892,5,301,0,0,891,893,5,102,0,0,892,891,1,0,0,0,892,893, - 1,0,0,0,893,895,1,0,0,0,894,883,1,0,0,0,894,885,1,0,0,0,894,889, - 1,0,0,0,895,147,1,0,0,0,896,897,3,12,6,0,897,898,5,283,0,0,898,149, - 1,0,0,0,899,900,5,303,0,0,900,151,1,0,0,0,901,903,5,294,0,0,902, - 904,3,12,6,0,903,902,1,0,0,0,903,904,1,0,0,0,904,907,1,0,0,0,905, - 906,5,296,0,0,906,908,3,164,82,0,907,905,1,0,0,0,907,908,1,0,0,0, - 908,910,1,0,0,0,909,911,3,92,46,0,910,909,1,0,0,0,910,911,1,0,0, - 0,911,912,1,0,0,0,912,913,5,295,0,0,913,153,1,0,0,0,914,916,3,160, - 80,0,915,917,3,158,79,0,916,915,1,0,0,0,916,917,1,0,0,0,917,923, - 1,0,0,0,918,920,3,172,86,0,919,921,3,158,79,0,920,919,1,0,0,0,920, - 921,1,0,0,0,921,923,1,0,0,0,922,914,1,0,0,0,922,918,1,0,0,0,923, - 155,1,0,0,0,924,926,5,294,0,0,925,927,3,150,75,0,926,925,1,0,0,0, - 926,927,1,0,0,0,927,929,1,0,0,0,928,930,3,148,74,0,929,928,1,0,0, - 0,929,930,1,0,0,0,930,932,1,0,0,0,931,933,3,144,72,0,932,931,1,0, - 0,0,933,934,1,0,0,0,934,932,1,0,0,0,934,935,1,0,0,0,935,937,1,0, - 0,0,936,938,3,92,46,0,937,936,1,0,0,0,937,938,1,0,0,0,938,939,1, - 0,0,0,939,941,5,295,0,0,940,942,3,158,79,0,941,940,1,0,0,0,941,942, - 1,0,0,0,942,963,1,0,0,0,943,945,5,290,0,0,944,946,3,150,75,0,945, - 944,1,0,0,0,945,946,1,0,0,0,946,948,1,0,0,0,947,949,3,148,74,0,948, - 947,1,0,0,0,948,949,1,0,0,0,949,951,1,0,0,0,950,952,3,144,72,0,951, - 950,1,0,0,0,952,953,1,0,0,0,953,951,1,0,0,0,953,954,1,0,0,0,954, - 956,1,0,0,0,955,957,3,92,46,0,956,955,1,0,0,0,956,957,1,0,0,0,957, - 958,1,0,0,0,958,960,5,291,0,0,959,961,3,158,79,0,960,959,1,0,0,0, - 960,961,1,0,0,0,961,963,1,0,0,0,962,924,1,0,0,0,962,943,1,0,0,0, - 963,157,1,0,0,0,964,973,7,7,0,0,965,966,5,292,0,0,966,967,5,301, - 0,0,967,969,5,270,0,0,968,970,5,301,0,0,969,968,1,0,0,0,969,970, - 1,0,0,0,970,971,1,0,0,0,971,973,5,293,0,0,972,964,1,0,0,0,972,965, - 1,0,0,0,973,159,1,0,0,0,974,975,5,272,0,0,975,976,3,162,81,0,976, - 977,5,272,0,0,977,978,5,287,0,0,978,1009,1,0,0,0,979,980,5,276,0, - 0,980,981,3,162,81,0,981,982,5,276,0,0,982,1009,1,0,0,0,983,984, - 5,286,0,0,984,985,5,272,0,0,985,986,3,162,81,0,986,987,5,272,0,0, - 987,1009,1,0,0,0,988,989,5,276,0,0,989,990,3,162,81,0,990,991,5, - 276,0,0,991,992,5,287,0,0,992,1009,1,0,0,0,993,994,5,286,0,0,994, - 995,5,276,0,0,995,996,3,162,81,0,996,997,5,276,0,0,997,1009,1,0, - 0,0,998,999,5,286,0,0,999,1000,5,272,0,0,1000,1001,3,162,81,0,1001, - 1002,5,272,0,0,1002,1003,5,287,0,0,1003,1009,1,0,0,0,1004,1005,5, - 272,0,0,1005,1006,3,162,81,0,1006,1007,5,272,0,0,1007,1009,1,0,0, - 0,1008,974,1,0,0,0,1008,979,1,0,0,0,1008,983,1,0,0,0,1008,988,1, - 0,0,0,1008,993,1,0,0,0,1008,998,1,0,0,0,1008,1004,1,0,0,0,1009,161, - 1,0,0,0,1010,1012,5,290,0,0,1011,1013,3,12,6,0,1012,1011,1,0,0,0, - 1012,1013,1,0,0,0,1013,1016,1,0,0,0,1014,1015,5,296,0,0,1015,1017, - 3,164,82,0,1016,1014,1,0,0,0,1016,1017,1,0,0,0,1017,1019,1,0,0,0, - 1018,1020,3,92,46,0,1019,1018,1,0,0,0,1019,1020,1,0,0,0,1020,1021, - 1,0,0,0,1021,1022,5,291,0,0,1022,163,1,0,0,0,1023,1024,6,82,-1,0, - 1024,1025,3,166,83,0,1025,1031,1,0,0,0,1026,1027,10,2,0,0,1027,1028, - 5,278,0,0,1028,1030,3,166,83,0,1029,1026,1,0,0,0,1030,1033,1,0,0, - 0,1031,1029,1,0,0,0,1031,1032,1,0,0,0,1032,165,1,0,0,0,1033,1031, - 1,0,0,0,1034,1035,6,83,-1,0,1035,1036,3,168,84,0,1036,1042,1,0,0, - 0,1037,1038,10,2,0,0,1038,1039,5,279,0,0,1039,1041,3,168,84,0,1040, - 1037,1,0,0,0,1041,1044,1,0,0,0,1042,1040,1,0,0,0,1042,1043,1,0,0, - 0,1043,167,1,0,0,0,1044,1042,1,0,0,0,1045,1046,5,280,0,0,1046,1049, - 3,170,85,0,1047,1049,3,170,85,0,1048,1045,1,0,0,0,1048,1047,1,0, - 0,0,1049,169,1,0,0,0,1050,1057,3,12,6,0,1051,1057,5,274,0,0,1052, - 1053,5,294,0,0,1053,1054,3,164,82,0,1054,1055,5,295,0,0,1055,1057, - 1,0,0,0,1056,1050,1,0,0,0,1056,1051,1,0,0,0,1056,1052,1,0,0,0,1057, - 171,1,0,0,0,1058,1071,5,276,0,0,1059,1060,5,276,0,0,1060,1071,5, - 287,0,0,1061,1062,5,286,0,0,1062,1071,5,276,0,0,1063,1065,5,286, - 0,0,1064,1063,1,0,0,0,1064,1065,1,0,0,0,1065,1066,1,0,0,0,1066,1068, - 5,272,0,0,1067,1069,5,287,0,0,1068,1067,1,0,0,0,1068,1069,1,0,0, - 0,1069,1071,1,0,0,0,1070,1058,1,0,0,0,1070,1059,1,0,0,0,1070,1061, - 1,0,0,0,1070,1064,1,0,0,0,1071,173,1,0,0,0,1072,1073,6,87,-1,0,1073, - 1079,3,176,88,0,1074,1075,5,294,0,0,1075,1076,3,174,87,0,1076,1077, - 5,295,0,0,1077,1079,1,0,0,0,1078,1072,1,0,0,0,1078,1074,1,0,0,0, - 1079,1100,1,0,0,0,1080,1082,10,5,0,0,1081,1083,3,186,93,0,1082,1081, - 1,0,0,0,1082,1083,1,0,0,0,1083,1084,1,0,0,0,1084,1085,5,46,0,0,1085, - 1086,5,120,0,0,1086,1099,3,182,91,0,1087,1088,10,4,0,0,1088,1089, - 5,270,0,0,1089,1099,3,182,91,0,1090,1092,10,3,0,0,1091,1093,3,186, - 93,0,1092,1091,1,0,0,0,1092,1093,1,0,0,0,1093,1094,1,0,0,0,1094, - 1095,5,120,0,0,1095,1096,3,182,91,0,1096,1097,3,184,92,0,1097,1099, - 1,0,0,0,1098,1080,1,0,0,0,1098,1087,1,0,0,0,1098,1090,1,0,0,0,1099, - 1102,1,0,0,0,1100,1098,1,0,0,0,1100,1101,1,0,0,0,1101,175,1,0,0, - 0,1102,1100,1,0,0,0,1103,1106,3,178,89,0,1104,1106,3,180,90,0,1105, - 1103,1,0,0,0,1105,1104,1,0,0,0,1106,177,1,0,0,0,1107,1108,3,192, - 96,0,1108,1109,3,12,6,0,1109,1131,1,0,0,0,1110,1112,3,192,96,0,1111, - 1113,3,6,3,0,1112,1111,1,0,0,0,1112,1113,1,0,0,0,1113,1115,1,0,0, - 0,1114,1116,3,8,4,0,1115,1114,1,0,0,0,1115,1116,1,0,0,0,1116,1118, - 1,0,0,0,1117,1119,3,10,5,0,1118,1117,1,0,0,0,1118,1119,1,0,0,0,1119, - 1131,1,0,0,0,1120,1122,3,258,129,0,1121,1123,3,6,3,0,1122,1121,1, - 0,0,0,1122,1123,1,0,0,0,1123,1125,1,0,0,0,1124,1126,3,8,4,0,1125, - 1124,1,0,0,0,1125,1126,1,0,0,0,1126,1128,1,0,0,0,1127,1129,3,10, - 5,0,1128,1127,1,0,0,0,1128,1129,1,0,0,0,1129,1131,1,0,0,0,1130,1107, - 1,0,0,0,1130,1110,1,0,0,0,1130,1120,1,0,0,0,1131,179,1,0,0,0,1132, - 1133,5,238,0,0,1133,1135,3,188,94,0,1134,1136,3,6,3,0,1135,1134, - 1,0,0,0,1135,1136,1,0,0,0,1136,1138,1,0,0,0,1137,1139,3,8,4,0,1138, - 1137,1,0,0,0,1138,1139,1,0,0,0,1139,1141,1,0,0,0,1140,1142,3,10, - 5,0,1141,1140,1,0,0,0,1141,1142,1,0,0,0,1142,181,1,0,0,0,1143,1149, - 3,176,88,0,1144,1145,5,294,0,0,1145,1146,3,174,87,0,1146,1147,5, - 295,0,0,1147,1149,1,0,0,0,1148,1143,1,0,0,0,1148,1144,1,0,0,0,1149, - 183,1,0,0,0,1150,1151,5,147,0,0,1151,1152,3,188,94,0,1152,185,1, - 0,0,0,1153,1168,5,109,0,0,1154,1156,5,125,0,0,1155,1157,5,153,0, - 0,1156,1155,1,0,0,0,1156,1157,1,0,0,0,1157,1168,1,0,0,0,1158,1160, - 5,176,0,0,1159,1161,5,153,0,0,1160,1159,1,0,0,0,1160,1161,1,0,0, - 0,1161,1168,1,0,0,0,1162,1164,5,96,0,0,1163,1165,5,153,0,0,1164, - 1163,1,0,0,0,1164,1165,1,0,0,0,1165,1168,1,0,0,0,1166,1168,5,153, - 0,0,1167,1153,1,0,0,0,1167,1154,1,0,0,0,1167,1158,1,0,0,0,1167,1162, - 1,0,0,0,1167,1166,1,0,0,0,1168,187,1,0,0,0,1169,1170,3,190,95,0, - 1170,189,1,0,0,0,1171,1172,6,95,-1,0,1172,1173,3,192,96,0,1173,1203, - 1,0,0,0,1174,1176,10,4,0,0,1175,1177,5,153,0,0,1176,1175,1,0,0,0, - 1176,1177,1,0,0,0,1177,1178,1,0,0,0,1178,1180,5,76,0,0,1179,1181, - 7,3,0,0,1180,1179,1,0,0,0,1180,1181,1,0,0,0,1181,1182,1,0,0,0,1182, - 1202,3,192,96,0,1183,1185,10,3,0,0,1184,1186,5,153,0,0,1185,1184, - 1,0,0,0,1185,1186,1,0,0,0,1186,1187,1,0,0,0,1187,1189,5,209,0,0, - 1188,1190,7,3,0,0,1189,1188,1,0,0,0,1189,1190,1,0,0,0,1190,1191, - 1,0,0,0,1191,1202,3,192,96,0,1192,1194,10,2,0,0,1193,1195,5,153, - 0,0,1194,1193,1,0,0,0,1194,1195,1,0,0,0,1195,1196,1,0,0,0,1196,1198, - 5,115,0,0,1197,1199,7,3,0,0,1198,1197,1,0,0,0,1198,1199,1,0,0,0, - 1199,1200,1,0,0,0,1200,1202,3,192,96,0,1201,1174,1,0,0,0,1201,1183, - 1,0,0,0,1201,1192,1,0,0,0,1202,1205,1,0,0,0,1203,1201,1,0,0,0,1203, - 1204,1,0,0,0,1204,191,1,0,0,0,1205,1203,1,0,0,0,1206,1208,3,94,47, - 0,1207,1209,3,124,62,0,1208,1207,1,0,0,0,1208,1209,1,0,0,0,1209, - 1210,1,0,0,0,1210,1212,3,130,65,0,1211,1213,3,102,51,0,1212,1211, - 1,0,0,0,1212,1213,1,0,0,0,1213,1215,1,0,0,0,1214,1216,3,132,66,0, - 1215,1214,1,0,0,0,1215,1216,1,0,0,0,1216,1218,1,0,0,0,1217,1219, - 3,110,55,0,1218,1217,1,0,0,0,1218,1219,1,0,0,0,1219,1221,1,0,0,0, - 1220,1222,3,122,61,0,1221,1220,1,0,0,0,1221,1222,1,0,0,0,1222,1224, - 1,0,0,0,1223,1225,3,106,53,0,1224,1223,1,0,0,0,1224,1225,1,0,0,0, - 1225,1227,1,0,0,0,1226,1228,3,136,68,0,1227,1226,1,0,0,0,1227,1228, - 1,0,0,0,1228,1230,1,0,0,0,1229,1231,3,134,67,0,1230,1229,1,0,0,0, - 1230,1231,1,0,0,0,1231,1234,1,0,0,0,1232,1234,3,194,97,0,1233,1206, - 1,0,0,0,1233,1232,1,0,0,0,1234,193,1,0,0,0,1235,1236,6,97,-1,0,1236, - 1237,3,196,98,0,1237,1243,1,0,0,0,1238,1239,10,2,0,0,1239,1240,5, - 151,0,0,1240,1242,3,196,98,0,1241,1238,1,0,0,0,1242,1245,1,0,0,0, - 1243,1241,1,0,0,0,1243,1244,1,0,0,0,1244,195,1,0,0,0,1245,1243,1, - 0,0,0,1246,1247,6,98,-1,0,1247,1248,3,198,99,0,1248,1254,1,0,0,0, - 1249,1250,10,2,0,0,1250,1251,5,7,0,0,1251,1253,3,198,99,0,1252,1249, - 1,0,0,0,1253,1256,1,0,0,0,1254,1252,1,0,0,0,1254,1255,1,0,0,0,1255, - 197,1,0,0,0,1256,1254,1,0,0,0,1257,1258,5,140,0,0,1258,1261,3,198, - 99,0,1259,1261,3,200,100,0,1260,1257,1,0,0,0,1260,1259,1,0,0,0,1261, - 199,1,0,0,0,1262,1263,6,100,-1,0,1263,1264,3,202,101,0,1264,1310, - 1,0,0,0,1265,1266,10,7,0,0,1266,1267,7,8,0,0,1267,1309,3,202,101, - 0,1268,1269,10,6,0,0,1269,1271,5,118,0,0,1270,1272,5,140,0,0,1271, - 1270,1,0,0,0,1271,1272,1,0,0,0,1272,1273,1,0,0,0,1273,1309,3,278, - 139,0,1274,1276,10,5,0,0,1275,1277,5,140,0,0,1276,1275,1,0,0,0,1276, - 1277,1,0,0,0,1277,1278,1,0,0,0,1278,1279,5,106,0,0,1279,1280,5,294, - 0,0,1280,1281,3,188,94,0,1281,1282,5,295,0,0,1282,1309,1,0,0,0,1283, - 1285,10,4,0,0,1284,1286,5,140,0,0,1285,1284,1,0,0,0,1285,1286,1, - 0,0,0,1286,1287,1,0,0,0,1287,1288,5,106,0,0,1288,1309,3,202,101, - 0,1289,1291,10,3,0,0,1290,1292,5,140,0,0,1291,1290,1,0,0,0,1291, - 1292,1,0,0,0,1292,1293,1,0,0,0,1293,1294,5,127,0,0,1294,1297,3,202, - 101,0,1295,1296,5,74,0,0,1296,1298,3,188,94,0,1297,1295,1,0,0,0, - 1297,1298,1,0,0,0,1298,1309,1,0,0,0,1299,1301,10,2,0,0,1300,1302, - 5,140,0,0,1301,1300,1,0,0,0,1301,1302,1,0,0,0,1302,1303,1,0,0,0, - 1303,1304,5,17,0,0,1304,1305,3,202,101,0,1305,1306,5,7,0,0,1306, - 1307,3,202,101,0,1307,1309,1,0,0,0,1308,1265,1,0,0,0,1308,1268,1, - 0,0,0,1308,1274,1,0,0,0,1308,1283,1,0,0,0,1308,1289,1,0,0,0,1308, - 1299,1,0,0,0,1309,1312,1,0,0,0,1310,1308,1,0,0,0,1310,1311,1,0,0, - 0,1311,201,1,0,0,0,1312,1310,1,0,0,0,1313,1314,6,101,-1,0,1314,1315, - 3,204,102,0,1315,1321,1,0,0,0,1316,1317,10,2,0,0,1317,1318,7,9,0, - 0,1318,1320,3,204,102,0,1319,1316,1,0,0,0,1320,1323,1,0,0,0,1321, - 1319,1,0,0,0,1321,1322,1,0,0,0,1322,203,1,0,0,0,1323,1321,1,0,0, - 0,1324,1325,6,102,-1,0,1325,1326,3,206,103,0,1326,1332,1,0,0,0,1327, - 1328,10,2,0,0,1328,1329,7,10,0,0,1329,1331,3,206,103,0,1330,1327, - 1,0,0,0,1331,1334,1,0,0,0,1332,1330,1,0,0,0,1332,1333,1,0,0,0,1333, - 205,1,0,0,0,1334,1332,1,0,0,0,1335,1336,6,103,-1,0,1336,1337,3,208, - 104,0,1337,1343,1,0,0,0,1338,1339,10,2,0,0,1339,1340,7,11,0,0,1340, - 1342,3,208,104,0,1341,1338,1,0,0,0,1342,1345,1,0,0,0,1343,1341,1, - 0,0,0,1343,1344,1,0,0,0,1344,207,1,0,0,0,1345,1343,1,0,0,0,1346, - 1347,7,10,0,0,1347,1350,3,208,104,0,1348,1350,3,210,105,0,1349,1346, - 1,0,0,0,1349,1348,1,0,0,0,1350,209,1,0,0,0,1351,1352,6,105,-1,0, - 1352,1373,3,212,106,0,1353,1373,3,238,119,0,1354,1373,3,226,113, - 0,1355,1373,3,228,114,0,1356,1373,3,230,115,0,1357,1373,3,232,116, - 0,1358,1373,3,242,121,0,1359,1373,3,240,120,0,1360,1373,3,244,122, - 0,1361,1373,3,216,108,0,1362,1373,3,248,124,0,1363,1373,3,234,117, - 0,1364,1373,3,246,123,0,1365,1373,3,250,125,0,1366,1373,3,214,107, - 0,1367,1373,3,256,128,0,1368,1373,3,218,109,0,1369,1373,3,224,112, - 0,1370,1373,3,220,110,0,1371,1373,3,236,118,0,1372,1351,1,0,0,0, - 1372,1353,1,0,0,0,1372,1354,1,0,0,0,1372,1355,1,0,0,0,1372,1356, - 1,0,0,0,1372,1357,1,0,0,0,1372,1358,1,0,0,0,1372,1359,1,0,0,0,1372, - 1360,1,0,0,0,1372,1361,1,0,0,0,1372,1362,1,0,0,0,1372,1363,1,0,0, - 0,1372,1364,1,0,0,0,1372,1365,1,0,0,0,1372,1366,1,0,0,0,1372,1367, - 1,0,0,0,1372,1368,1,0,0,0,1372,1369,1,0,0,0,1372,1370,1,0,0,0,1372, - 1371,1,0,0,0,1373,1382,1,0,0,0,1374,1376,10,6,0,0,1375,1377,3,254, - 127,0,1376,1375,1,0,0,0,1377,1378,1,0,0,0,1378,1376,1,0,0,0,1378, - 1379,1,0,0,0,1379,1381,1,0,0,0,1380,1374,1,0,0,0,1381,1384,1,0,0, - 0,1382,1380,1,0,0,0,1382,1383,1,0,0,0,1383,211,1,0,0,0,1384,1382, - 1,0,0,0,1385,1386,5,294,0,0,1386,1387,3,188,94,0,1387,1388,5,295, - 0,0,1388,1397,1,0,0,0,1389,1397,5,51,0,0,1390,1397,5,48,0,0,1391, - 1397,3,260,130,0,1392,1397,3,262,131,0,1393,1397,3,276,138,0,1394, - 1397,3,266,133,0,1395,1397,3,272,136,0,1396,1385,1,0,0,0,1396,1389, - 1,0,0,0,1396,1390,1,0,0,0,1396,1391,1,0,0,0,1396,1392,1,0,0,0,1396, - 1393,1,0,0,0,1396,1394,1,0,0,0,1396,1395,1,0,0,0,1397,213,1,0,0, - 0,1398,1399,5,143,0,0,1399,1400,5,294,0,0,1400,1401,3,188,94,0,1401, - 1402,5,270,0,0,1402,1403,3,188,94,0,1403,1404,5,295,0,0,1404,215, - 1,0,0,0,1405,1406,5,32,0,0,1406,1407,5,294,0,0,1407,1412,3,188,94, - 0,1408,1409,5,270,0,0,1409,1411,3,188,94,0,1410,1408,1,0,0,0,1411, - 1414,1,0,0,0,1412,1410,1,0,0,0,1412,1413,1,0,0,0,1413,1415,1,0,0, - 0,1414,1412,1,0,0,0,1415,1416,5,295,0,0,1416,217,1,0,0,0,1417,1419, - 5,23,0,0,1418,1420,3,188,94,0,1419,1418,1,0,0,0,1419,1420,1,0,0, - 0,1420,1426,1,0,0,0,1421,1422,5,223,0,0,1422,1423,3,188,94,0,1423, - 1424,5,200,0,0,1424,1425,3,188,94,0,1425,1427,1,0,0,0,1426,1421, - 1,0,0,0,1427,1428,1,0,0,0,1428,1426,1,0,0,0,1428,1429,1,0,0,0,1429, - 1432,1,0,0,0,1430,1431,5,71,0,0,1431,1433,3,188,94,0,1432,1430,1, - 0,0,0,1432,1433,1,0,0,0,1433,1434,1,0,0,0,1434,1435,5,72,0,0,1435, - 219,1,0,0,0,1436,1437,5,219,0,0,1437,1442,3,222,111,0,1438,1439, - 5,270,0,0,1439,1441,3,222,111,0,1440,1438,1,0,0,0,1441,1444,1,0, - 0,0,1442,1440,1,0,0,0,1442,1443,1,0,0,0,1443,221,1,0,0,0,1444,1442, - 1,0,0,0,1445,1446,5,294,0,0,1446,1451,3,188,94,0,1447,1448,5,270, - 0,0,1448,1450,3,188,94,0,1449,1447,1,0,0,0,1450,1453,1,0,0,0,1451, - 1449,1,0,0,0,1451,1452,1,0,0,0,1452,1454,1,0,0,0,1453,1451,1,0,0, - 0,1454,1455,5,295,0,0,1455,223,1,0,0,0,1456,1457,5,294,0,0,1457, - 1460,3,188,94,0,1458,1459,5,270,0,0,1459,1461,3,188,94,0,1460,1458, - 1,0,0,0,1461,1462,1,0,0,0,1462,1460,1,0,0,0,1462,1463,1,0,0,0,1463, - 1464,1,0,0,0,1464,1465,5,295,0,0,1465,225,1,0,0,0,1466,1467,7,12, - 0,0,1467,1476,5,294,0,0,1468,1473,3,188,94,0,1469,1470,5,270,0,0, - 1470,1472,3,188,94,0,1471,1469,1,0,0,0,1472,1475,1,0,0,0,1473,1471, - 1,0,0,0,1473,1474,1,0,0,0,1474,1477,1,0,0,0,1475,1473,1,0,0,0,1476, - 1468,1,0,0,0,1476,1477,1,0,0,0,1477,1478,1,0,0,0,1478,1479,5,295, - 0,0,1479,227,1,0,0,0,1480,1481,5,195,0,0,1481,1482,5,294,0,0,1482, - 1489,3,188,94,0,1483,1484,5,270,0,0,1484,1487,3,188,94,0,1485,1486, - 5,270,0,0,1486,1488,3,188,94,0,1487,1485,1,0,0,0,1487,1488,1,0,0, - 0,1488,1490,1,0,0,0,1489,1483,1,0,0,0,1489,1490,1,0,0,0,1490,1491, - 1,0,0,0,1491,1492,5,295,0,0,1492,1507,1,0,0,0,1493,1494,5,195,0, - 0,1494,1495,5,294,0,0,1495,1502,3,188,94,0,1496,1497,5,95,0,0,1497, - 1500,3,188,94,0,1498,1499,5,92,0,0,1499,1501,3,188,94,0,1500,1498, - 1,0,0,0,1500,1501,1,0,0,0,1501,1503,1,0,0,0,1502,1496,1,0,0,0,1502, - 1503,1,0,0,0,1503,1504,1,0,0,0,1504,1505,5,295,0,0,1505,1507,1,0, - 0,0,1506,1480,1,0,0,0,1506,1493,1,0,0,0,1507,229,1,0,0,0,1508,1509, - 5,160,0,0,1509,1510,5,294,0,0,1510,1511,3,188,94,0,1511,1512,5,270, - 0,0,1512,1513,3,188,94,0,1513,1514,5,295,0,0,1514,1523,1,0,0,0,1515, - 1516,5,160,0,0,1516,1517,5,294,0,0,1517,1518,3,188,94,0,1518,1519, - 5,106,0,0,1519,1520,3,188,94,0,1520,1521,5,295,0,0,1521,1523,1,0, - 0,0,1522,1508,1,0,0,0,1522,1515,1,0,0,0,1523,231,1,0,0,0,1524,1525, - 5,156,0,0,1525,1526,5,294,0,0,1526,1527,3,188,94,0,1527,1528,5,270, - 0,0,1528,1529,3,188,94,0,1529,1530,5,270,0,0,1530,1533,3,188,94, - 0,1531,1532,5,270,0,0,1532,1534,3,188,94,0,1533,1531,1,0,0,0,1533, - 1534,1,0,0,0,1534,1535,1,0,0,0,1535,1536,5,295,0,0,1536,1551,1,0, - 0,0,1537,1538,5,156,0,0,1538,1539,5,294,0,0,1539,1540,3,188,94,0, - 1540,1541,5,159,0,0,1541,1542,3,188,94,0,1542,1543,5,95,0,0,1543, - 1546,3,188,94,0,1544,1545,5,92,0,0,1545,1547,3,188,94,0,1546,1544, - 1,0,0,0,1546,1547,1,0,0,0,1547,1548,1,0,0,0,1548,1549,5,295,0,0, - 1549,1551,1,0,0,0,1550,1524,1,0,0,0,1550,1537,1,0,0,0,1551,233,1, - 0,0,0,1552,1553,5,44,0,0,1553,1554,5,294,0,0,1554,1555,5,277,0,0, - 1555,1565,5,295,0,0,1556,1557,7,13,0,0,1557,1559,5,294,0,0,1558, - 1560,3,100,50,0,1559,1558,1,0,0,0,1559,1560,1,0,0,0,1560,1561,1, - 0,0,0,1561,1562,3,188,94,0,1562,1563,5,295,0,0,1563,1565,1,0,0,0, - 1564,1552,1,0,0,0,1564,1556,1,0,0,0,1565,235,1,0,0,0,1566,1567,7, - 14,0,0,1567,1568,5,294,0,0,1568,1575,3,188,94,0,1569,1570,5,270, - 0,0,1570,1573,3,188,94,0,1571,1572,5,270,0,0,1572,1574,3,188,94, - 0,1573,1571,1,0,0,0,1573,1574,1,0,0,0,1574,1576,1,0,0,0,1575,1569, - 1,0,0,0,1575,1576,1,0,0,0,1576,1577,1,0,0,0,1577,1578,5,295,0,0, - 1578,1579,3,116,58,0,1579,237,1,0,0,0,1580,1581,5,24,0,0,1581,1582, - 5,294,0,0,1582,1583,3,188,94,0,1583,1584,5,10,0,0,1584,1585,3,278, - 139,0,1585,1586,5,295,0,0,1586,239,1,0,0,0,1587,1588,5,235,0,0,1588, - 1589,5,294,0,0,1589,1590,3,188,94,0,1590,1591,5,10,0,0,1591,1592, - 3,278,139,0,1592,1593,5,295,0,0,1593,241,1,0,0,0,1594,1595,5,234, - 0,0,1595,1596,5,294,0,0,1596,1597,3,188,94,0,1597,1598,5,10,0,0, - 1598,1599,3,278,139,0,1599,1600,5,295,0,0,1600,243,1,0,0,0,1601, - 1602,5,85,0,0,1602,1603,5,294,0,0,1603,1604,5,303,0,0,1604,1605, - 5,95,0,0,1605,1606,3,188,94,0,1606,1607,5,295,0,0,1607,245,1,0,0, - 0,1608,1609,5,207,0,0,1609,1617,5,294,0,0,1610,1612,5,303,0,0,1611, - 1610,1,0,0,0,1611,1612,1,0,0,0,1612,1614,1,0,0,0,1613,1615,3,188, - 94,0,1614,1613,1,0,0,0,1614,1615,1,0,0,0,1615,1616,1,0,0,0,1616, - 1618,5,95,0,0,1617,1611,1,0,0,0,1617,1618,1,0,0,0,1618,1619,1,0, - 0,0,1619,1620,3,188,94,0,1620,1621,5,295,0,0,1621,247,1,0,0,0,1622, - 1623,7,15,0,0,1623,1624,5,294,0,0,1624,1625,5,303,0,0,1625,1626, - 5,270,0,0,1626,1627,3,188,94,0,1627,1628,5,270,0,0,1628,1629,3,188, - 94,0,1629,1630,5,295,0,0,1630,249,1,0,0,0,1631,1632,3,252,126,0, - 1632,1641,5,294,0,0,1633,1638,3,188,94,0,1634,1635,5,270,0,0,1635, - 1637,3,188,94,0,1636,1634,1,0,0,0,1637,1640,1,0,0,0,1638,1636,1, - 0,0,0,1638,1639,1,0,0,0,1639,1642,1,0,0,0,1640,1638,1,0,0,0,1641, - 1633,1,0,0,0,1641,1642,1,0,0,0,1642,1643,1,0,0,0,1643,1644,5,295, - 0,0,1644,251,1,0,0,0,1645,1646,3,12,6,0,1646,1647,5,299,0,0,1647, - 1649,1,0,0,0,1648,1645,1,0,0,0,1649,1652,1,0,0,0,1650,1648,1,0,0, - 0,1650,1651,1,0,0,0,1651,1653,1,0,0,0,1652,1650,1,0,0,0,1653,1664, - 7,16,0,0,1654,1655,3,12,6,0,1655,1656,5,299,0,0,1656,1658,1,0,0, - 0,1657,1654,1,0,0,0,1658,1661,1,0,0,0,1659,1657,1,0,0,0,1659,1660, - 1,0,0,0,1660,1662,1,0,0,0,1661,1659,1,0,0,0,1662,1664,3,12,6,0,1663, - 1650,1,0,0,0,1663,1659,1,0,0,0,1664,253,1,0,0,0,1665,1666,5,290, - 0,0,1666,1667,3,188,94,0,1667,1668,5,291,0,0,1668,1677,1,0,0,0,1669, - 1670,5,290,0,0,1670,1671,5,277,0,0,1671,1677,5,291,0,0,1672,1673, - 5,299,0,0,1673,1677,3,12,6,0,1674,1675,5,299,0,0,1675,1677,5,277, - 0,0,1676,1665,1,0,0,0,1676,1669,1,0,0,0,1676,1672,1,0,0,0,1676,1674, - 1,0,0,0,1677,255,1,0,0,0,1678,1679,5,294,0,0,1679,1680,3,210,105, - 0,1680,1681,5,130,0,0,1681,1682,3,140,70,0,1682,1683,5,295,0,0,1683, - 257,1,0,0,0,1684,1685,3,210,105,0,1685,1686,5,130,0,0,1686,1687, - 3,138,69,0,1687,259,1,0,0,0,1688,1689,5,298,0,0,1689,261,1,0,0,0, - 1690,1692,5,275,0,0,1691,1690,1,0,0,0,1691,1692,1,0,0,0,1692,1693, - 1,0,0,0,1693,1699,7,0,0,0,1694,1696,5,275,0,0,1695,1694,1,0,0,0, - 1695,1696,1,0,0,0,1696,1697,1,0,0,0,1697,1699,3,264,132,0,1698,1691, - 1,0,0,0,1698,1695,1,0,0,0,1699,263,1,0,0,0,1700,1701,5,79,0,0,1701, - 265,1,0,0,0,1702,1705,3,268,134,0,1703,1705,3,270,135,0,1704,1702, - 1,0,0,0,1704,1703,1,0,0,0,1705,267,1,0,0,0,1706,1715,5,290,0,0,1707, - 1712,3,188,94,0,1708,1709,5,270,0,0,1709,1711,3,188,94,0,1710,1708, - 1,0,0,0,1711,1714,1,0,0,0,1712,1710,1,0,0,0,1712,1713,1,0,0,0,1713, - 1716,1,0,0,0,1714,1712,1,0,0,0,1715,1707,1,0,0,0,1715,1716,1,0,0, - 0,1716,1717,1,0,0,0,1717,1718,5,291,0,0,1718,269,1,0,0,0,1719,1728, - 5,288,0,0,1720,1725,3,188,94,0,1721,1722,5,270,0,0,1722,1724,3,188, - 94,0,1723,1721,1,0,0,0,1724,1727,1,0,0,0,1725,1723,1,0,0,0,1725, - 1726,1,0,0,0,1726,1729,1,0,0,0,1727,1725,1,0,0,0,1728,1720,1,0,0, - 0,1728,1729,1,0,0,0,1729,1730,1,0,0,0,1730,1731,5,289,0,0,1731,271, - 1,0,0,0,1732,1741,5,292,0,0,1733,1738,3,274,137,0,1734,1735,5,270, - 0,0,1735,1737,3,274,137,0,1736,1734,1,0,0,0,1737,1740,1,0,0,0,1738, - 1736,1,0,0,0,1738,1739,1,0,0,0,1739,1742,1,0,0,0,1740,1738,1,0,0, - 0,1741,1733,1,0,0,0,1741,1742,1,0,0,0,1742,1743,1,0,0,0,1743,1744, - 5,293,0,0,1744,273,1,0,0,0,1745,1746,3,188,94,0,1746,1747,5,296, - 0,0,1747,1748,3,188,94,0,1748,275,1,0,0,0,1749,1784,5,141,0,0,1750, - 1784,5,236,0,0,1751,1784,5,208,0,0,1752,1784,5,88,0,0,1753,1784, - 5,300,0,0,1754,1784,5,301,0,0,1755,1784,5,302,0,0,1756,1784,5,309, - 0,0,1757,1758,5,53,0,0,1758,1784,5,300,0,0,1759,1763,5,201,0,0,1760, - 1761,5,294,0,0,1761,1762,5,301,0,0,1762,1764,5,295,0,0,1763,1760, - 1,0,0,0,1763,1764,1,0,0,0,1764,1768,1,0,0,0,1765,1766,5,226,0,0, - 1766,1767,5,201,0,0,1767,1769,5,229,0,0,1768,1765,1,0,0,0,1768,1769, - 1,0,0,0,1769,1770,1,0,0,0,1770,1784,5,300,0,0,1771,1775,5,202,0, - 0,1772,1773,5,294,0,0,1773,1774,5,301,0,0,1774,1776,5,295,0,0,1775, - 1772,1,0,0,0,1775,1776,1,0,0,0,1776,1780,1,0,0,0,1777,1778,5,226, - 0,0,1778,1779,5,201,0,0,1779,1781,5,229,0,0,1780,1777,1,0,0,0,1780, - 1781,1,0,0,0,1781,1782,1,0,0,0,1782,1784,5,300,0,0,1783,1749,1,0, - 0,0,1783,1750,1,0,0,0,1783,1751,1,0,0,0,1783,1752,1,0,0,0,1783,1753, - 1,0,0,0,1783,1754,1,0,0,0,1783,1755,1,0,0,0,1783,1756,1,0,0,0,1783, - 1757,1,0,0,0,1783,1759,1,0,0,0,1783,1771,1,0,0,0,1784,277,1,0,0, - 0,1785,1824,7,17,0,0,1786,1787,5,69,0,0,1787,1824,5,161,0,0,1788, - 1792,7,18,0,0,1789,1790,5,294,0,0,1790,1791,5,301,0,0,1791,1793, - 5,295,0,0,1792,1789,1,0,0,0,1792,1793,1,0,0,0,1793,1824,1,0,0,0, - 1794,1795,5,27,0,0,1795,1799,5,221,0,0,1796,1797,5,294,0,0,1797, - 1798,5,301,0,0,1798,1800,5,295,0,0,1799,1796,1,0,0,0,1799,1800,1, - 0,0,0,1800,1824,1,0,0,0,1801,1809,7,19,0,0,1802,1803,5,294,0,0,1803, - 1806,5,301,0,0,1804,1805,5,270,0,0,1805,1807,5,301,0,0,1806,1804, - 1,0,0,0,1806,1807,1,0,0,0,1807,1808,1,0,0,0,1808,1810,5,295,0,0, - 1809,1802,1,0,0,0,1809,1810,1,0,0,0,1810,1824,1,0,0,0,1811,1815, - 7,20,0,0,1812,1813,5,294,0,0,1813,1814,5,301,0,0,1814,1816,5,295, - 0,0,1815,1812,1,0,0,0,1815,1816,1,0,0,0,1816,1820,1,0,0,0,1817,1818, - 5,226,0,0,1818,1819,5,201,0,0,1819,1821,5,229,0,0,1820,1817,1,0, - 0,0,1820,1821,1,0,0,0,1821,1824,1,0,0,0,1822,1824,3,12,6,0,1823, - 1785,1,0,0,0,1823,1786,1,0,0,0,1823,1788,1,0,0,0,1823,1794,1,0,0, - 0,1823,1801,1,0,0,0,1823,1811,1,0,0,0,1823,1822,1,0,0,0,1824,279, - 1,0,0,0,230,287,292,294,301,305,309,313,315,340,343,350,365,374, - 386,391,402,409,417,422,429,435,438,441,445,450,453,458,466,472, - 485,491,499,513,516,519,525,529,535,539,541,549,557,568,571,586, - 594,606,611,616,627,637,640,648,657,662,665,668,674,681,686,691, - 700,707,712,715,725,739,744,748,752,760,764,773,778,781,792,802, - 814,821,836,851,856,863,867,870,875,881,887,892,894,903,907,910, - 916,920,922,926,929,934,937,941,945,948,953,956,960,962,969,972, - 1008,1012,1016,1019,1031,1042,1048,1056,1064,1068,1070,1078,1082, - 1092,1098,1100,1105,1112,1115,1118,1122,1125,1128,1130,1135,1138, - 1141,1148,1156,1160,1164,1167,1176,1180,1185,1189,1194,1198,1201, - 1203,1208,1212,1215,1218,1221,1224,1227,1230,1233,1243,1254,1260, - 1271,1276,1285,1291,1297,1301,1308,1310,1321,1332,1343,1349,1372, - 1378,1382,1396,1412,1419,1428,1432,1442,1451,1462,1473,1476,1487, - 1489,1500,1502,1506,1522,1533,1546,1550,1559,1564,1573,1575,1611, - 1614,1617,1638,1641,1650,1659,1663,1676,1691,1695,1698,1704,1712, - 1715,1725,1728,1738,1741,1763,1768,1775,1780,1783,1792,1799,1806, - 1809,1815,1820,1823 + 272,274,276,278,0,21,1,0,304,305,2,0,4,4,248,248,1,0,249,250,2,0, + 4,4,68,68,2,0,11,11,63,63,2,0,91,91,124,124,2,0,4,4,8,8,2,0,272, + 272,278,278,2,0,282,285,287,288,2,0,280,280,286,286,1,0,272,273, + 2,0,274,275,278,278,1,0,267,268,7,0,8,8,15,15,44,44,76,76,132,133, + 190,190,197,197,1,0,231,232,1,0,87,88,12,0,19,19,28,29,44,44,53, + 54,83,83,130,130,146,146,174,174,188,188,196,196,208,208,214,214, + 9,0,8,8,26,27,53,53,114,115,142,142,171,171,189,189,237,237,252, + 269,3,0,26,27,92,92,221,221,2,0,56,57,145,145,1,0,202,203,1991,0, + 294,1,0,0,0,2,315,1,0,0,0,4,317,1,0,0,0,6,320,1,0,0,0,8,323,1,0, + 0,0,10,326,1,0,0,0,12,329,1,0,0,0,14,331,1,0,0,0,16,333,1,0,0,0, + 18,350,1,0,0,0,20,355,1,0,0,0,22,357,1,0,0,0,24,359,1,0,0,0,26,361, + 1,0,0,0,28,365,1,0,0,0,30,391,1,0,0,0,32,402,1,0,0,0,34,404,1,0, + 0,0,36,412,1,0,0,0,38,422,1,0,0,0,40,429,1,0,0,0,42,458,1,0,0,0, + 44,466,1,0,0,0,46,468,1,0,0,0,48,485,1,0,0,0,50,487,1,0,0,0,52,495, + 1,0,0,0,54,503,1,0,0,0,56,506,1,0,0,0,58,541,1,0,0,0,60,543,1,0, + 0,0,62,554,1,0,0,0,64,561,1,0,0,0,66,573,1,0,0,0,68,594,1,0,0,0, + 70,596,1,0,0,0,72,606,1,0,0,0,74,608,1,0,0,0,76,613,1,0,0,0,78,618, + 1,0,0,0,80,621,1,0,0,0,82,630,1,0,0,0,84,634,1,0,0,0,86,642,1,0, + 0,0,88,657,1,0,0,0,90,674,1,0,0,0,92,676,1,0,0,0,94,700,1,0,0,0, + 96,702,1,0,0,0,98,710,1,0,0,0,100,717,1,0,0,0,102,719,1,0,0,0,104, + 728,1,0,0,0,106,732,1,0,0,0,108,742,1,0,0,0,110,750,1,0,0,0,112, + 766,1,0,0,0,114,770,1,0,0,0,116,775,1,0,0,0,118,785,1,0,0,0,120, + 795,1,0,0,0,122,805,1,0,0,0,124,808,1,0,0,0,126,817,1,0,0,0,128, + 836,1,0,0,0,130,838,1,0,0,0,132,841,1,0,0,0,134,844,1,0,0,0,136, + 847,1,0,0,0,138,851,1,0,0,0,140,856,1,0,0,0,142,867,1,0,0,0,144, + 881,1,0,0,0,146,894,1,0,0,0,148,896,1,0,0,0,150,899,1,0,0,0,152, + 901,1,0,0,0,154,922,1,0,0,0,156,962,1,0,0,0,158,972,1,0,0,0,160, + 1008,1,0,0,0,162,1010,1,0,0,0,164,1023,1,0,0,0,166,1034,1,0,0,0, + 168,1048,1,0,0,0,170,1056,1,0,0,0,172,1070,1,0,0,0,174,1078,1,0, + 0,0,176,1105,1,0,0,0,178,1130,1,0,0,0,180,1132,1,0,0,0,182,1148, + 1,0,0,0,184,1150,1,0,0,0,186,1167,1,0,0,0,188,1169,1,0,0,0,190,1171, + 1,0,0,0,192,1233,1,0,0,0,194,1235,1,0,0,0,196,1246,1,0,0,0,198,1260, + 1,0,0,0,200,1262,1,0,0,0,202,1313,1,0,0,0,204,1324,1,0,0,0,206,1335, + 1,0,0,0,208,1349,1,0,0,0,210,1372,1,0,0,0,212,1396,1,0,0,0,214,1398, + 1,0,0,0,216,1405,1,0,0,0,218,1417,1,0,0,0,220,1436,1,0,0,0,222,1445, + 1,0,0,0,224,1456,1,0,0,0,226,1466,1,0,0,0,228,1506,1,0,0,0,230,1522, + 1,0,0,0,232,1550,1,0,0,0,234,1564,1,0,0,0,236,1566,1,0,0,0,238,1580, + 1,0,0,0,240,1587,1,0,0,0,242,1594,1,0,0,0,244,1601,1,0,0,0,246,1608, + 1,0,0,0,248,1622,1,0,0,0,250,1631,1,0,0,0,252,1663,1,0,0,0,254,1676, + 1,0,0,0,256,1678,1,0,0,0,258,1684,1,0,0,0,260,1688,1,0,0,0,262,1698, + 1,0,0,0,264,1700,1,0,0,0,266,1704,1,0,0,0,268,1706,1,0,0,0,270,1719, + 1,0,0,0,272,1732,1,0,0,0,274,1745,1,0,0,0,276,1783,1,0,0,0,278,1823, + 1,0,0,0,280,292,5,84,0,0,281,282,5,295,0,0,282,287,3,4,2,0,283,284, + 5,271,0,0,284,286,3,4,2,0,285,283,1,0,0,0,286,289,1,0,0,0,287,285, + 1,0,0,0,287,288,1,0,0,0,288,290,1,0,0,0,289,287,1,0,0,0,290,291, + 5,296,0,0,291,293,1,0,0,0,292,281,1,0,0,0,292,293,1,0,0,0,293,295, + 1,0,0,0,294,280,1,0,0,0,294,295,1,0,0,0,295,296,1,0,0,0,296,297, + 3,2,1,0,297,298,5,0,0,1,298,1,1,0,0,0,299,301,3,14,7,0,300,302,5, + 298,0,0,301,300,1,0,0,0,301,302,1,0,0,0,302,316,1,0,0,0,303,305, + 3,42,21,0,304,306,5,298,0,0,305,304,1,0,0,0,305,306,1,0,0,0,306, + 316,1,0,0,0,307,309,3,28,14,0,308,310,5,298,0,0,309,308,1,0,0,0, + 309,310,1,0,0,0,310,316,1,0,0,0,311,313,3,16,8,0,312,314,5,298,0, + 0,313,312,1,0,0,0,313,314,1,0,0,0,314,316,1,0,0,0,315,299,1,0,0, + 0,315,303,1,0,0,0,315,307,1,0,0,0,315,311,1,0,0,0,316,3,1,0,0,0, + 317,318,5,304,0,0,318,319,5,304,0,0,319,5,1,0,0,0,320,321,5,10,0, + 0,321,322,3,12,6,0,322,7,1,0,0,0,323,324,5,13,0,0,324,325,3,12,6, + 0,325,9,1,0,0,0,326,327,5,20,0,0,327,328,3,12,6,0,328,11,1,0,0,0, + 329,330,7,0,0,0,330,13,1,0,0,0,331,332,3,188,94,0,332,15,1,0,0,0, + 333,334,5,81,0,0,334,343,3,188,94,0,335,340,3,188,94,0,336,337,5, + 271,0,0,337,339,3,188,94,0,338,336,1,0,0,0,339,342,1,0,0,0,340,338, + 1,0,0,0,340,341,1,0,0,0,341,344,1,0,0,0,342,340,1,0,0,0,343,335, + 1,0,0,0,343,344,1,0,0,0,344,17,1,0,0,0,345,346,3,12,6,0,346,347, + 5,300,0,0,347,349,1,0,0,0,348,345,1,0,0,0,349,352,1,0,0,0,350,348, + 1,0,0,0,350,351,1,0,0,0,351,353,1,0,0,0,352,350,1,0,0,0,353,354, + 3,12,6,0,354,19,1,0,0,0,355,356,3,12,6,0,356,21,1,0,0,0,357,358, + 3,12,6,0,358,23,1,0,0,0,359,360,3,12,6,0,360,25,1,0,0,0,361,362, + 3,12,6,0,362,27,1,0,0,0,363,366,3,30,15,0,364,366,3,32,16,0,365, + 363,1,0,0,0,365,364,1,0,0,0,366,29,1,0,0,0,367,368,5,45,0,0,368, + 369,5,199,0,0,369,374,3,18,9,0,370,371,5,295,0,0,371,372,3,34,17, + 0,372,373,5,296,0,0,373,375,1,0,0,0,374,370,1,0,0,0,374,375,1,0, + 0,0,375,392,1,0,0,0,376,377,5,45,0,0,377,378,5,243,0,0,378,379,5, + 148,0,0,379,380,3,12,6,0,380,381,5,295,0,0,381,386,3,46,23,0,382, + 383,5,271,0,0,383,385,3,46,23,0,384,382,1,0,0,0,385,388,1,0,0,0, + 386,384,1,0,0,0,386,387,1,0,0,0,387,389,1,0,0,0,388,386,1,0,0,0, + 389,390,5,296,0,0,390,392,1,0,0,0,391,367,1,0,0,0,391,376,1,0,0, + 0,392,31,1,0,0,0,393,394,5,71,0,0,394,395,5,199,0,0,395,403,3,18, + 9,0,396,397,5,71,0,0,397,398,5,243,0,0,398,399,3,12,6,0,399,400, + 5,148,0,0,400,401,3,12,6,0,401,403,1,0,0,0,402,393,1,0,0,0,402,396, + 1,0,0,0,403,33,1,0,0,0,404,409,3,36,18,0,405,406,5,271,0,0,406,408, + 3,36,18,0,407,405,1,0,0,0,408,411,1,0,0,0,409,407,1,0,0,0,409,410, + 1,0,0,0,410,35,1,0,0,0,411,409,1,0,0,0,412,413,3,24,12,0,413,417, + 3,278,139,0,414,416,3,38,19,0,415,414,1,0,0,0,416,419,1,0,0,0,417, + 415,1,0,0,0,417,418,1,0,0,0,418,37,1,0,0,0,419,417,1,0,0,0,420,421, + 5,39,0,0,421,423,3,26,13,0,422,420,1,0,0,0,422,423,1,0,0,0,423,424, + 1,0,0,0,424,425,3,40,20,0,425,39,1,0,0,0,426,427,5,141,0,0,427,430, + 5,142,0,0,428,430,5,142,0,0,429,426,1,0,0,0,429,428,1,0,0,0,430, + 41,1,0,0,0,431,433,3,78,39,0,432,434,3,44,22,0,433,432,1,0,0,0,434, + 435,1,0,0,0,435,433,1,0,0,0,435,436,1,0,0,0,436,438,1,0,0,0,437, + 439,3,92,46,0,438,437,1,0,0,0,438,439,1,0,0,0,439,441,1,0,0,0,440, + 442,3,86,43,0,441,440,1,0,0,0,441,442,1,0,0,0,442,459,1,0,0,0,443, + 445,3,130,65,0,444,446,3,92,46,0,445,444,1,0,0,0,445,446,1,0,0,0, + 446,448,1,0,0,0,447,449,3,44,22,0,448,447,1,0,0,0,449,450,1,0,0, + 0,450,448,1,0,0,0,450,451,1,0,0,0,451,453,1,0,0,0,452,454,3,86,43, + 0,453,452,1,0,0,0,453,454,1,0,0,0,454,459,1,0,0,0,455,459,3,84,42, + 0,456,459,3,56,28,0,457,459,3,44,22,0,458,431,1,0,0,0,458,443,1, + 0,0,0,458,455,1,0,0,0,458,456,1,0,0,0,458,457,1,0,0,0,459,43,1,0, + 0,0,460,467,3,58,29,0,461,467,3,64,32,0,462,467,3,80,40,0,463,467, + 3,50,25,0,464,467,3,54,27,0,465,467,3,52,26,0,466,460,1,0,0,0,466, + 461,1,0,0,0,466,462,1,0,0,0,466,463,1,0,0,0,466,464,1,0,0,0,466, + 465,1,0,0,0,467,45,1,0,0,0,468,472,3,12,6,0,469,471,3,48,24,0,470, + 469,1,0,0,0,471,474,1,0,0,0,472,470,1,0,0,0,472,473,1,0,0,0,473, + 47,1,0,0,0,474,472,1,0,0,0,475,476,5,291,0,0,476,477,3,276,138,0, + 477,478,5,292,0,0,478,486,1,0,0,0,479,480,5,291,0,0,480,481,3,12, + 6,0,481,482,5,292,0,0,482,486,1,0,0,0,483,484,5,300,0,0,484,486, + 3,12,6,0,485,475,1,0,0,0,485,479,1,0,0,0,485,483,1,0,0,0,486,49, + 1,0,0,0,487,488,5,174,0,0,488,489,5,118,0,0,489,491,3,12,6,0,490, + 492,3,6,3,0,491,490,1,0,0,0,491,492,1,0,0,0,492,493,1,0,0,0,493, + 494,3,188,94,0,494,51,1,0,0,0,495,496,5,215,0,0,496,497,5,118,0, + 0,497,499,3,12,6,0,498,500,3,6,3,0,499,498,1,0,0,0,499,500,1,0,0, + 0,500,501,1,0,0,0,501,502,3,188,94,0,502,53,1,0,0,0,503,504,5,242, + 0,0,504,505,3,46,23,0,505,55,1,0,0,0,506,507,5,113,0,0,507,508,5, + 118,0,0,508,509,3,46,23,0,509,510,5,219,0,0,510,513,3,188,94,0,511, + 512,5,13,0,0,512,514,3,188,94,0,513,511,1,0,0,0,513,514,1,0,0,0, + 514,516,1,0,0,0,515,517,3,66,33,0,516,515,1,0,0,0,516,517,1,0,0, + 0,517,519,1,0,0,0,518,520,3,86,43,0,519,518,1,0,0,0,519,520,1,0, + 0,0,520,57,1,0,0,0,521,522,5,113,0,0,522,523,5,118,0,0,523,525,3, + 12,6,0,524,526,3,60,30,0,525,524,1,0,0,0,525,526,1,0,0,0,526,527, + 1,0,0,0,527,529,3,220,110,0,528,530,3,62,31,0,529,528,1,0,0,0,529, + 530,1,0,0,0,530,542,1,0,0,0,531,532,5,113,0,0,532,533,5,118,0,0, + 533,535,3,12,6,0,534,536,3,6,3,0,535,534,1,0,0,0,535,536,1,0,0,0, + 536,537,1,0,0,0,537,539,3,188,94,0,538,540,3,62,31,0,539,538,1,0, + 0,0,539,540,1,0,0,0,540,542,1,0,0,0,541,521,1,0,0,0,541,531,1,0, + 0,0,542,59,1,0,0,0,543,544,5,295,0,0,544,549,3,24,12,0,545,546,5, + 271,0,0,546,548,3,24,12,0,547,545,1,0,0,0,548,551,1,0,0,0,549,547, + 1,0,0,0,549,550,1,0,0,0,550,552,1,0,0,0,551,549,1,0,0,0,552,553, + 5,296,0,0,553,61,1,0,0,0,554,555,5,148,0,0,555,557,5,245,0,0,556, + 558,3,68,34,0,557,556,1,0,0,0,557,558,1,0,0,0,558,559,1,0,0,0,559, + 560,3,72,36,0,560,63,1,0,0,0,561,562,5,113,0,0,562,563,5,118,0,0, + 563,564,3,46,23,0,564,565,5,219,0,0,565,568,3,188,94,0,566,567,5, + 13,0,0,567,569,3,188,94,0,568,566,1,0,0,0,568,569,1,0,0,0,569,571, + 1,0,0,0,570,572,3,66,33,0,571,570,1,0,0,0,571,572,1,0,0,0,572,65, + 1,0,0,0,573,574,5,148,0,0,574,575,5,245,0,0,575,576,5,226,0,0,576, + 577,3,188,94,0,577,578,5,246,0,0,578,579,5,251,0,0,579,67,1,0,0, + 0,580,581,5,295,0,0,581,586,3,12,6,0,582,583,5,271,0,0,583,585,3, + 12,6,0,584,582,1,0,0,0,585,588,1,0,0,0,586,584,1,0,0,0,586,587,1, + 0,0,0,587,589,1,0,0,0,588,586,1,0,0,0,589,590,5,296,0,0,590,595, + 1,0,0,0,591,592,5,148,0,0,592,593,5,39,0,0,593,595,3,70,35,0,594, + 580,1,0,0,0,594,591,1,0,0,0,595,69,1,0,0,0,596,597,3,12,6,0,597, + 71,1,0,0,0,598,599,5,246,0,0,599,607,5,251,0,0,600,601,5,246,0,0, + 601,602,5,174,0,0,602,607,3,74,37,0,603,604,5,246,0,0,604,605,5, + 213,0,0,605,607,3,76,38,0,606,598,1,0,0,0,606,600,1,0,0,0,606,603, + 1,0,0,0,607,73,1,0,0,0,608,611,5,80,0,0,609,610,5,226,0,0,610,612, + 3,188,94,0,611,609,1,0,0,0,611,612,1,0,0,0,612,75,1,0,0,0,613,616, + 5,80,0,0,614,615,5,226,0,0,615,617,3,188,94,0,616,614,1,0,0,0,616, + 617,1,0,0,0,617,77,1,0,0,0,618,619,5,213,0,0,619,620,3,178,89,0, + 620,79,1,0,0,0,621,622,5,186,0,0,622,627,3,82,41,0,623,624,5,271, + 0,0,624,626,3,82,41,0,625,623,1,0,0,0,626,629,1,0,0,0,627,625,1, + 0,0,0,627,628,1,0,0,0,628,81,1,0,0,0,629,627,1,0,0,0,630,631,3,46, + 23,0,631,632,5,284,0,0,632,633,3,188,94,0,633,83,1,0,0,0,634,635, + 5,62,0,0,635,637,3,90,45,0,636,638,3,92,46,0,637,636,1,0,0,0,637, + 638,1,0,0,0,638,640,1,0,0,0,639,641,3,86,43,0,640,639,1,0,0,0,640, + 641,1,0,0,0,641,85,1,0,0,0,642,643,5,247,0,0,643,648,3,88,44,0,644, + 645,5,271,0,0,645,647,3,88,44,0,646,644,1,0,0,0,647,650,1,0,0,0, + 648,646,1,0,0,0,648,649,1,0,0,0,649,87,1,0,0,0,650,648,1,0,0,0,651, + 652,7,1,0,0,652,653,7,2,0,0,653,658,5,278,0,0,654,655,7,1,0,0,655, + 656,7,2,0,0,656,658,3,188,94,0,657,651,1,0,0,0,657,654,1,0,0,0,658, + 89,1,0,0,0,659,660,5,96,0,0,660,662,3,46,23,0,661,663,3,6,3,0,662, + 661,1,0,0,0,662,663,1,0,0,0,663,665,1,0,0,0,664,666,3,8,4,0,665, + 664,1,0,0,0,665,666,1,0,0,0,666,668,1,0,0,0,667,669,3,10,5,0,668, + 667,1,0,0,0,668,669,1,0,0,0,669,675,1,0,0,0,670,671,5,96,0,0,671, + 672,3,46,23,0,672,673,3,12,6,0,673,675,1,0,0,0,674,659,1,0,0,0,674, + 670,1,0,0,0,675,91,1,0,0,0,676,677,5,226,0,0,677,678,3,188,94,0, + 678,93,1,0,0,0,679,681,5,183,0,0,680,682,3,100,50,0,681,680,1,0, + 0,0,681,682,1,0,0,0,682,683,1,0,0,0,683,701,5,278,0,0,684,686,5, + 183,0,0,685,687,3,100,50,0,686,685,1,0,0,0,686,687,1,0,0,0,687,688, + 1,0,0,0,688,701,3,96,48,0,689,691,5,183,0,0,690,692,3,100,50,0,691, + 690,1,0,0,0,691,692,1,0,0,0,692,693,1,0,0,0,693,694,5,219,0,0,694, + 701,3,188,94,0,695,696,5,238,0,0,696,697,3,188,94,0,697,698,5,13, + 0,0,698,699,3,188,94,0,699,701,1,0,0,0,700,679,1,0,0,0,700,684,1, + 0,0,0,700,689,1,0,0,0,700,695,1,0,0,0,701,95,1,0,0,0,702,707,3,98, + 49,0,703,704,5,271,0,0,704,706,3,98,49,0,705,703,1,0,0,0,706,709, + 1,0,0,0,707,705,1,0,0,0,707,708,1,0,0,0,708,97,1,0,0,0,709,707,1, + 0,0,0,710,715,3,188,94,0,711,713,5,10,0,0,712,711,1,0,0,0,712,713, + 1,0,0,0,713,714,1,0,0,0,714,716,3,12,6,0,715,712,1,0,0,0,715,716, + 1,0,0,0,716,99,1,0,0,0,717,718,7,3,0,0,718,101,1,0,0,0,719,720,5, + 244,0,0,720,725,3,104,52,0,721,722,5,271,0,0,722,724,3,104,52,0, + 723,721,1,0,0,0,724,727,1,0,0,0,725,723,1,0,0,0,725,726,1,0,0,0, + 726,103,1,0,0,0,727,725,1,0,0,0,728,729,3,188,94,0,729,730,5,10, + 0,0,730,731,3,12,6,0,731,105,1,0,0,0,732,733,5,153,0,0,733,734,5, + 20,0,0,734,739,3,108,54,0,735,736,5,271,0,0,736,738,3,108,54,0,737, + 735,1,0,0,0,738,741,1,0,0,0,739,737,1,0,0,0,739,740,1,0,0,0,740, + 107,1,0,0,0,741,739,1,0,0,0,742,744,3,188,94,0,743,745,7,4,0,0,744, + 743,1,0,0,0,744,745,1,0,0,0,745,748,1,0,0,0,746,747,5,143,0,0,747, + 749,7,5,0,0,748,746,1,0,0,0,748,749,1,0,0,0,749,109,1,0,0,0,750, + 752,5,103,0,0,751,753,5,159,0,0,752,751,1,0,0,0,752,753,1,0,0,0, + 753,754,1,0,0,0,754,755,5,20,0,0,755,760,3,114,57,0,756,757,5,271, + 0,0,757,759,3,114,57,0,758,756,1,0,0,0,759,762,1,0,0,0,760,758,1, + 0,0,0,760,761,1,0,0,0,761,764,1,0,0,0,762,760,1,0,0,0,763,765,3, + 112,56,0,764,763,1,0,0,0,764,765,1,0,0,0,765,111,1,0,0,0,766,767, + 5,103,0,0,767,768,5,10,0,0,768,769,3,12,6,0,769,113,1,0,0,0,770, + 773,3,192,96,0,771,772,5,10,0,0,772,774,3,12,6,0,773,771,1,0,0,0, + 773,774,1,0,0,0,774,115,1,0,0,0,775,776,5,233,0,0,776,778,5,295, + 0,0,777,779,3,118,59,0,778,777,1,0,0,0,778,779,1,0,0,0,779,781,1, + 0,0,0,780,782,3,120,60,0,781,780,1,0,0,0,781,782,1,0,0,0,782,783, + 1,0,0,0,783,784,5,296,0,0,784,117,1,0,0,0,785,786,5,234,0,0,786, + 787,5,20,0,0,787,792,3,188,94,0,788,789,5,271,0,0,789,791,3,188, + 94,0,790,788,1,0,0,0,791,794,1,0,0,0,792,790,1,0,0,0,792,793,1,0, + 0,0,793,119,1,0,0,0,794,792,1,0,0,0,795,796,5,153,0,0,796,797,5, + 20,0,0,797,802,3,108,54,0,798,799,5,271,0,0,799,801,3,108,54,0,800, + 798,1,0,0,0,801,804,1,0,0,0,802,800,1,0,0,0,802,803,1,0,0,0,803, + 121,1,0,0,0,804,802,1,0,0,0,805,806,5,104,0,0,806,807,3,192,96,0, + 807,123,1,0,0,0,808,809,5,79,0,0,809,814,3,126,63,0,810,811,5,271, + 0,0,811,813,3,126,63,0,812,810,1,0,0,0,813,816,1,0,0,0,814,812,1, + 0,0,0,814,815,1,0,0,0,815,125,1,0,0,0,816,814,1,0,0,0,817,819,3, + 12,6,0,818,820,3,128,64,0,819,818,1,0,0,0,820,821,1,0,0,0,821,819, + 1,0,0,0,821,822,1,0,0,0,822,127,1,0,0,0,823,824,5,300,0,0,824,837, + 3,12,6,0,825,826,5,291,0,0,826,827,5,301,0,0,827,837,5,292,0,0,828, + 829,5,291,0,0,829,830,5,302,0,0,830,837,5,292,0,0,831,832,5,291, + 0,0,832,833,5,278,0,0,833,837,5,292,0,0,834,835,5,300,0,0,835,837, + 5,278,0,0,836,823,1,0,0,0,836,825,1,0,0,0,836,828,1,0,0,0,836,831, + 1,0,0,0,836,834,1,0,0,0,837,129,1,0,0,0,838,839,5,96,0,0,839,840, + 3,174,87,0,840,131,1,0,0,0,841,842,5,226,0,0,842,843,3,192,96,0, + 843,133,1,0,0,0,844,845,5,241,0,0,845,846,3,192,96,0,846,135,1,0, + 0,0,847,848,5,240,0,0,848,849,3,192,96,0,849,137,1,0,0,0,850,852, + 3,146,73,0,851,850,1,0,0,0,851,852,1,0,0,0,852,853,1,0,0,0,853,854, + 3,142,71,0,854,139,1,0,0,0,855,857,3,146,73,0,856,855,1,0,0,0,856, + 857,1,0,0,0,857,858,1,0,0,0,858,863,3,142,71,0,859,860,5,271,0,0, + 860,862,3,142,71,0,861,859,1,0,0,0,862,865,1,0,0,0,863,861,1,0,0, + 0,863,864,1,0,0,0,864,141,1,0,0,0,865,863,1,0,0,0,866,868,3,150, + 75,0,867,866,1,0,0,0,867,868,1,0,0,0,868,870,1,0,0,0,869,871,3,148, + 74,0,870,869,1,0,0,0,870,871,1,0,0,0,871,875,1,0,0,0,872,874,3,144, + 72,0,873,872,1,0,0,0,874,877,1,0,0,0,875,873,1,0,0,0,875,876,1,0, + 0,0,876,143,1,0,0,0,877,875,1,0,0,0,878,882,3,152,76,0,879,882,3, + 154,77,0,880,882,3,156,78,0,881,878,1,0,0,0,881,879,1,0,0,0,881, + 880,1,0,0,0,882,145,1,0,0,0,883,884,7,6,0,0,884,895,5,187,0,0,885, + 887,5,8,0,0,886,888,5,302,0,0,887,886,1,0,0,0,887,888,1,0,0,0,888, + 895,1,0,0,0,889,890,5,187,0,0,890,892,5,302,0,0,891,893,5,103,0, + 0,892,891,1,0,0,0,892,893,1,0,0,0,893,895,1,0,0,0,894,883,1,0,0, + 0,894,885,1,0,0,0,894,889,1,0,0,0,895,147,1,0,0,0,896,897,3,12,6, + 0,897,898,5,284,0,0,898,149,1,0,0,0,899,900,5,304,0,0,900,151,1, + 0,0,0,901,903,5,295,0,0,902,904,3,12,6,0,903,902,1,0,0,0,903,904, + 1,0,0,0,904,907,1,0,0,0,905,906,5,297,0,0,906,908,3,164,82,0,907, + 905,1,0,0,0,907,908,1,0,0,0,908,910,1,0,0,0,909,911,3,92,46,0,910, + 909,1,0,0,0,910,911,1,0,0,0,911,912,1,0,0,0,912,913,5,296,0,0,913, + 153,1,0,0,0,914,916,3,160,80,0,915,917,3,158,79,0,916,915,1,0,0, + 0,916,917,1,0,0,0,917,923,1,0,0,0,918,920,3,172,86,0,919,921,3,158, + 79,0,920,919,1,0,0,0,920,921,1,0,0,0,921,923,1,0,0,0,922,914,1,0, + 0,0,922,918,1,0,0,0,923,155,1,0,0,0,924,926,5,295,0,0,925,927,3, + 150,75,0,926,925,1,0,0,0,926,927,1,0,0,0,927,929,1,0,0,0,928,930, + 3,148,74,0,929,928,1,0,0,0,929,930,1,0,0,0,930,932,1,0,0,0,931,933, + 3,144,72,0,932,931,1,0,0,0,933,934,1,0,0,0,934,932,1,0,0,0,934,935, + 1,0,0,0,935,937,1,0,0,0,936,938,3,92,46,0,937,936,1,0,0,0,937,938, + 1,0,0,0,938,939,1,0,0,0,939,941,5,296,0,0,940,942,3,158,79,0,941, + 940,1,0,0,0,941,942,1,0,0,0,942,963,1,0,0,0,943,945,5,291,0,0,944, + 946,3,150,75,0,945,944,1,0,0,0,945,946,1,0,0,0,946,948,1,0,0,0,947, + 949,3,148,74,0,948,947,1,0,0,0,948,949,1,0,0,0,949,951,1,0,0,0,950, + 952,3,144,72,0,951,950,1,0,0,0,952,953,1,0,0,0,953,951,1,0,0,0,953, + 954,1,0,0,0,954,956,1,0,0,0,955,957,3,92,46,0,956,955,1,0,0,0,956, + 957,1,0,0,0,957,958,1,0,0,0,958,960,5,292,0,0,959,961,3,158,79,0, + 960,959,1,0,0,0,960,961,1,0,0,0,961,963,1,0,0,0,962,924,1,0,0,0, + 962,943,1,0,0,0,963,157,1,0,0,0,964,973,7,7,0,0,965,966,5,293,0, + 0,966,967,5,302,0,0,967,969,5,271,0,0,968,970,5,302,0,0,969,968, + 1,0,0,0,969,970,1,0,0,0,970,971,1,0,0,0,971,973,5,294,0,0,972,964, + 1,0,0,0,972,965,1,0,0,0,973,159,1,0,0,0,974,975,5,273,0,0,975,976, + 3,162,81,0,976,977,5,273,0,0,977,978,5,288,0,0,978,1009,1,0,0,0, + 979,980,5,277,0,0,980,981,3,162,81,0,981,982,5,277,0,0,982,1009, + 1,0,0,0,983,984,5,287,0,0,984,985,5,273,0,0,985,986,3,162,81,0,986, + 987,5,273,0,0,987,1009,1,0,0,0,988,989,5,277,0,0,989,990,3,162,81, + 0,990,991,5,277,0,0,991,992,5,288,0,0,992,1009,1,0,0,0,993,994,5, + 287,0,0,994,995,5,277,0,0,995,996,3,162,81,0,996,997,5,277,0,0,997, + 1009,1,0,0,0,998,999,5,287,0,0,999,1000,5,273,0,0,1000,1001,3,162, + 81,0,1001,1002,5,273,0,0,1002,1003,5,288,0,0,1003,1009,1,0,0,0,1004, + 1005,5,273,0,0,1005,1006,3,162,81,0,1006,1007,5,273,0,0,1007,1009, + 1,0,0,0,1008,974,1,0,0,0,1008,979,1,0,0,0,1008,983,1,0,0,0,1008, + 988,1,0,0,0,1008,993,1,0,0,0,1008,998,1,0,0,0,1008,1004,1,0,0,0, + 1009,161,1,0,0,0,1010,1012,5,291,0,0,1011,1013,3,12,6,0,1012,1011, + 1,0,0,0,1012,1013,1,0,0,0,1013,1016,1,0,0,0,1014,1015,5,297,0,0, + 1015,1017,3,164,82,0,1016,1014,1,0,0,0,1016,1017,1,0,0,0,1017,1019, + 1,0,0,0,1018,1020,3,92,46,0,1019,1018,1,0,0,0,1019,1020,1,0,0,0, + 1020,1021,1,0,0,0,1021,1022,5,292,0,0,1022,163,1,0,0,0,1023,1024, + 6,82,-1,0,1024,1025,3,166,83,0,1025,1031,1,0,0,0,1026,1027,10,2, + 0,0,1027,1028,5,279,0,0,1028,1030,3,166,83,0,1029,1026,1,0,0,0,1030, + 1033,1,0,0,0,1031,1029,1,0,0,0,1031,1032,1,0,0,0,1032,165,1,0,0, + 0,1033,1031,1,0,0,0,1034,1035,6,83,-1,0,1035,1036,3,168,84,0,1036, + 1042,1,0,0,0,1037,1038,10,2,0,0,1038,1039,5,280,0,0,1039,1041,3, + 168,84,0,1040,1037,1,0,0,0,1041,1044,1,0,0,0,1042,1040,1,0,0,0,1042, + 1043,1,0,0,0,1043,167,1,0,0,0,1044,1042,1,0,0,0,1045,1046,5,281, + 0,0,1046,1049,3,170,85,0,1047,1049,3,170,85,0,1048,1045,1,0,0,0, + 1048,1047,1,0,0,0,1049,169,1,0,0,0,1050,1057,3,12,6,0,1051,1057, + 5,275,0,0,1052,1053,5,295,0,0,1053,1054,3,164,82,0,1054,1055,5,296, + 0,0,1055,1057,1,0,0,0,1056,1050,1,0,0,0,1056,1051,1,0,0,0,1056,1052, + 1,0,0,0,1057,171,1,0,0,0,1058,1071,5,277,0,0,1059,1060,5,277,0,0, + 1060,1071,5,288,0,0,1061,1062,5,287,0,0,1062,1071,5,277,0,0,1063, + 1065,5,287,0,0,1064,1063,1,0,0,0,1064,1065,1,0,0,0,1065,1066,1,0, + 0,0,1066,1068,5,273,0,0,1067,1069,5,288,0,0,1068,1067,1,0,0,0,1068, + 1069,1,0,0,0,1069,1071,1,0,0,0,1070,1058,1,0,0,0,1070,1059,1,0,0, + 0,1070,1061,1,0,0,0,1070,1064,1,0,0,0,1071,173,1,0,0,0,1072,1073, + 6,87,-1,0,1073,1079,3,176,88,0,1074,1075,5,295,0,0,1075,1076,3,174, + 87,0,1076,1077,5,296,0,0,1077,1079,1,0,0,0,1078,1072,1,0,0,0,1078, + 1074,1,0,0,0,1079,1100,1,0,0,0,1080,1082,10,5,0,0,1081,1083,3,186, + 93,0,1082,1081,1,0,0,0,1082,1083,1,0,0,0,1083,1084,1,0,0,0,1084, + 1085,5,46,0,0,1085,1086,5,121,0,0,1086,1099,3,182,91,0,1087,1088, + 10,4,0,0,1088,1089,5,271,0,0,1089,1099,3,182,91,0,1090,1092,10,3, + 0,0,1091,1093,3,186,93,0,1092,1091,1,0,0,0,1092,1093,1,0,0,0,1093, + 1094,1,0,0,0,1094,1095,5,121,0,0,1095,1096,3,182,91,0,1096,1097, + 3,184,92,0,1097,1099,1,0,0,0,1098,1080,1,0,0,0,1098,1087,1,0,0,0, + 1098,1090,1,0,0,0,1099,1102,1,0,0,0,1100,1098,1,0,0,0,1100,1101, + 1,0,0,0,1101,175,1,0,0,0,1102,1100,1,0,0,0,1103,1106,3,178,89,0, + 1104,1106,3,180,90,0,1105,1103,1,0,0,0,1105,1104,1,0,0,0,1106,177, + 1,0,0,0,1107,1108,3,192,96,0,1108,1109,3,12,6,0,1109,1131,1,0,0, + 0,1110,1112,3,192,96,0,1111,1113,3,6,3,0,1112,1111,1,0,0,0,1112, + 1113,1,0,0,0,1113,1115,1,0,0,0,1114,1116,3,8,4,0,1115,1114,1,0,0, + 0,1115,1116,1,0,0,0,1116,1118,1,0,0,0,1117,1119,3,10,5,0,1118,1117, + 1,0,0,0,1118,1119,1,0,0,0,1119,1131,1,0,0,0,1120,1122,3,258,129, + 0,1121,1123,3,6,3,0,1122,1121,1,0,0,0,1122,1123,1,0,0,0,1123,1125, + 1,0,0,0,1124,1126,3,8,4,0,1125,1124,1,0,0,0,1125,1126,1,0,0,0,1126, + 1128,1,0,0,0,1127,1129,3,10,5,0,1128,1127,1,0,0,0,1128,1129,1,0, + 0,0,1129,1131,1,0,0,0,1130,1107,1,0,0,0,1130,1110,1,0,0,0,1130,1120, + 1,0,0,0,1131,179,1,0,0,0,1132,1133,5,239,0,0,1133,1135,3,188,94, + 0,1134,1136,3,6,3,0,1135,1134,1,0,0,0,1135,1136,1,0,0,0,1136,1138, + 1,0,0,0,1137,1139,3,8,4,0,1138,1137,1,0,0,0,1138,1139,1,0,0,0,1139, + 1141,1,0,0,0,1140,1142,3,10,5,0,1141,1140,1,0,0,0,1141,1142,1,0, + 0,0,1142,181,1,0,0,0,1143,1149,3,176,88,0,1144,1145,5,295,0,0,1145, + 1146,3,174,87,0,1146,1147,5,296,0,0,1147,1149,1,0,0,0,1148,1143, + 1,0,0,0,1148,1144,1,0,0,0,1149,183,1,0,0,0,1150,1151,5,148,0,0,1151, + 1152,3,188,94,0,1152,185,1,0,0,0,1153,1168,5,110,0,0,1154,1156,5, + 126,0,0,1155,1157,5,154,0,0,1156,1155,1,0,0,0,1156,1157,1,0,0,0, + 1157,1168,1,0,0,0,1158,1160,5,177,0,0,1159,1161,5,154,0,0,1160,1159, + 1,0,0,0,1160,1161,1,0,0,0,1161,1168,1,0,0,0,1162,1164,5,97,0,0,1163, + 1165,5,154,0,0,1164,1163,1,0,0,0,1164,1165,1,0,0,0,1165,1168,1,0, + 0,0,1166,1168,5,154,0,0,1167,1153,1,0,0,0,1167,1154,1,0,0,0,1167, + 1158,1,0,0,0,1167,1162,1,0,0,0,1167,1166,1,0,0,0,1168,187,1,0,0, + 0,1169,1170,3,190,95,0,1170,189,1,0,0,0,1171,1172,6,95,-1,0,1172, + 1173,3,192,96,0,1173,1203,1,0,0,0,1174,1176,10,4,0,0,1175,1177,5, + 154,0,0,1176,1175,1,0,0,0,1176,1177,1,0,0,0,1177,1178,1,0,0,0,1178, + 1180,5,77,0,0,1179,1181,7,3,0,0,1180,1179,1,0,0,0,1180,1181,1,0, + 0,0,1181,1182,1,0,0,0,1182,1202,3,192,96,0,1183,1185,10,3,0,0,1184, + 1186,5,154,0,0,1185,1184,1,0,0,0,1185,1186,1,0,0,0,1186,1187,1,0, + 0,0,1187,1189,5,210,0,0,1188,1190,7,3,0,0,1189,1188,1,0,0,0,1189, + 1190,1,0,0,0,1190,1191,1,0,0,0,1191,1202,3,192,96,0,1192,1194,10, + 2,0,0,1193,1195,5,154,0,0,1194,1193,1,0,0,0,1194,1195,1,0,0,0,1195, + 1196,1,0,0,0,1196,1198,5,116,0,0,1197,1199,7,3,0,0,1198,1197,1,0, + 0,0,1198,1199,1,0,0,0,1199,1200,1,0,0,0,1200,1202,3,192,96,0,1201, + 1174,1,0,0,0,1201,1183,1,0,0,0,1201,1192,1,0,0,0,1202,1205,1,0,0, + 0,1203,1201,1,0,0,0,1203,1204,1,0,0,0,1204,191,1,0,0,0,1205,1203, + 1,0,0,0,1206,1208,3,94,47,0,1207,1209,3,124,62,0,1208,1207,1,0,0, + 0,1208,1209,1,0,0,0,1209,1210,1,0,0,0,1210,1212,3,130,65,0,1211, + 1213,3,102,51,0,1212,1211,1,0,0,0,1212,1213,1,0,0,0,1213,1215,1, + 0,0,0,1214,1216,3,132,66,0,1215,1214,1,0,0,0,1215,1216,1,0,0,0,1216, + 1218,1,0,0,0,1217,1219,3,110,55,0,1218,1217,1,0,0,0,1218,1219,1, + 0,0,0,1219,1221,1,0,0,0,1220,1222,3,122,61,0,1221,1220,1,0,0,0,1221, + 1222,1,0,0,0,1222,1224,1,0,0,0,1223,1225,3,106,53,0,1224,1223,1, + 0,0,0,1224,1225,1,0,0,0,1225,1227,1,0,0,0,1226,1228,3,136,68,0,1227, + 1226,1,0,0,0,1227,1228,1,0,0,0,1228,1230,1,0,0,0,1229,1231,3,134, + 67,0,1230,1229,1,0,0,0,1230,1231,1,0,0,0,1231,1234,1,0,0,0,1232, + 1234,3,194,97,0,1233,1206,1,0,0,0,1233,1232,1,0,0,0,1234,193,1,0, + 0,0,1235,1236,6,97,-1,0,1236,1237,3,196,98,0,1237,1243,1,0,0,0,1238, + 1239,10,2,0,0,1239,1240,5,152,0,0,1240,1242,3,196,98,0,1241,1238, + 1,0,0,0,1242,1245,1,0,0,0,1243,1241,1,0,0,0,1243,1244,1,0,0,0,1244, + 195,1,0,0,0,1245,1243,1,0,0,0,1246,1247,6,98,-1,0,1247,1248,3,198, + 99,0,1248,1254,1,0,0,0,1249,1250,10,2,0,0,1250,1251,5,7,0,0,1251, + 1253,3,198,99,0,1252,1249,1,0,0,0,1253,1256,1,0,0,0,1254,1252,1, + 0,0,0,1254,1255,1,0,0,0,1255,197,1,0,0,0,1256,1254,1,0,0,0,1257, + 1258,5,141,0,0,1258,1261,3,198,99,0,1259,1261,3,200,100,0,1260,1257, + 1,0,0,0,1260,1259,1,0,0,0,1261,199,1,0,0,0,1262,1263,6,100,-1,0, + 1263,1264,3,202,101,0,1264,1310,1,0,0,0,1265,1266,10,7,0,0,1266, + 1267,7,8,0,0,1267,1309,3,202,101,0,1268,1269,10,6,0,0,1269,1271, + 5,119,0,0,1270,1272,5,141,0,0,1271,1270,1,0,0,0,1271,1272,1,0,0, + 0,1272,1273,1,0,0,0,1273,1309,3,278,139,0,1274,1276,10,5,0,0,1275, + 1277,5,141,0,0,1276,1275,1,0,0,0,1276,1277,1,0,0,0,1277,1278,1,0, + 0,0,1278,1279,5,107,0,0,1279,1280,5,295,0,0,1280,1281,3,188,94,0, + 1281,1282,5,296,0,0,1282,1309,1,0,0,0,1283,1285,10,4,0,0,1284,1286, + 5,141,0,0,1285,1284,1,0,0,0,1285,1286,1,0,0,0,1286,1287,1,0,0,0, + 1287,1288,5,107,0,0,1288,1309,3,202,101,0,1289,1291,10,3,0,0,1290, + 1292,5,141,0,0,1291,1290,1,0,0,0,1291,1292,1,0,0,0,1292,1293,1,0, + 0,0,1293,1294,5,128,0,0,1294,1297,3,202,101,0,1295,1296,5,75,0,0, + 1296,1298,3,188,94,0,1297,1295,1,0,0,0,1297,1298,1,0,0,0,1298,1309, + 1,0,0,0,1299,1301,10,2,0,0,1300,1302,5,141,0,0,1301,1300,1,0,0,0, + 1301,1302,1,0,0,0,1302,1303,1,0,0,0,1303,1304,5,17,0,0,1304,1305, + 3,202,101,0,1305,1306,5,7,0,0,1306,1307,3,202,101,0,1307,1309,1, + 0,0,0,1308,1265,1,0,0,0,1308,1268,1,0,0,0,1308,1274,1,0,0,0,1308, + 1283,1,0,0,0,1308,1289,1,0,0,0,1308,1299,1,0,0,0,1309,1312,1,0,0, + 0,1310,1308,1,0,0,0,1310,1311,1,0,0,0,1311,201,1,0,0,0,1312,1310, + 1,0,0,0,1313,1314,6,101,-1,0,1314,1315,3,204,102,0,1315,1321,1,0, + 0,0,1316,1317,10,2,0,0,1317,1318,7,9,0,0,1318,1320,3,204,102,0,1319, + 1316,1,0,0,0,1320,1323,1,0,0,0,1321,1319,1,0,0,0,1321,1322,1,0,0, + 0,1322,203,1,0,0,0,1323,1321,1,0,0,0,1324,1325,6,102,-1,0,1325,1326, + 3,206,103,0,1326,1332,1,0,0,0,1327,1328,10,2,0,0,1328,1329,7,10, + 0,0,1329,1331,3,206,103,0,1330,1327,1,0,0,0,1331,1334,1,0,0,0,1332, + 1330,1,0,0,0,1332,1333,1,0,0,0,1333,205,1,0,0,0,1334,1332,1,0,0, + 0,1335,1336,6,103,-1,0,1336,1337,3,208,104,0,1337,1343,1,0,0,0,1338, + 1339,10,2,0,0,1339,1340,7,11,0,0,1340,1342,3,208,104,0,1341,1338, + 1,0,0,0,1342,1345,1,0,0,0,1343,1341,1,0,0,0,1343,1344,1,0,0,0,1344, + 207,1,0,0,0,1345,1343,1,0,0,0,1346,1347,7,10,0,0,1347,1350,3,208, + 104,0,1348,1350,3,210,105,0,1349,1346,1,0,0,0,1349,1348,1,0,0,0, + 1350,209,1,0,0,0,1351,1352,6,105,-1,0,1352,1373,3,212,106,0,1353, + 1373,3,238,119,0,1354,1373,3,226,113,0,1355,1373,3,228,114,0,1356, + 1373,3,230,115,0,1357,1373,3,232,116,0,1358,1373,3,242,121,0,1359, + 1373,3,240,120,0,1360,1373,3,244,122,0,1361,1373,3,216,108,0,1362, + 1373,3,248,124,0,1363,1373,3,234,117,0,1364,1373,3,246,123,0,1365, + 1373,3,250,125,0,1366,1373,3,214,107,0,1367,1373,3,256,128,0,1368, + 1373,3,218,109,0,1369,1373,3,224,112,0,1370,1373,3,220,110,0,1371, + 1373,3,236,118,0,1372,1351,1,0,0,0,1372,1353,1,0,0,0,1372,1354,1, + 0,0,0,1372,1355,1,0,0,0,1372,1356,1,0,0,0,1372,1357,1,0,0,0,1372, + 1358,1,0,0,0,1372,1359,1,0,0,0,1372,1360,1,0,0,0,1372,1361,1,0,0, + 0,1372,1362,1,0,0,0,1372,1363,1,0,0,0,1372,1364,1,0,0,0,1372,1365, + 1,0,0,0,1372,1366,1,0,0,0,1372,1367,1,0,0,0,1372,1368,1,0,0,0,1372, + 1369,1,0,0,0,1372,1370,1,0,0,0,1372,1371,1,0,0,0,1373,1382,1,0,0, + 0,1374,1376,10,6,0,0,1375,1377,3,254,127,0,1376,1375,1,0,0,0,1377, + 1378,1,0,0,0,1378,1376,1,0,0,0,1378,1379,1,0,0,0,1379,1381,1,0,0, + 0,1380,1374,1,0,0,0,1381,1384,1,0,0,0,1382,1380,1,0,0,0,1382,1383, + 1,0,0,0,1383,211,1,0,0,0,1384,1382,1,0,0,0,1385,1386,5,295,0,0,1386, + 1387,3,188,94,0,1387,1388,5,296,0,0,1388,1397,1,0,0,0,1389,1397, + 5,51,0,0,1390,1397,5,48,0,0,1391,1397,3,260,130,0,1392,1397,3,262, + 131,0,1393,1397,3,276,138,0,1394,1397,3,266,133,0,1395,1397,3,272, + 136,0,1396,1385,1,0,0,0,1396,1389,1,0,0,0,1396,1390,1,0,0,0,1396, + 1391,1,0,0,0,1396,1392,1,0,0,0,1396,1393,1,0,0,0,1396,1394,1,0,0, + 0,1396,1395,1,0,0,0,1397,213,1,0,0,0,1398,1399,5,144,0,0,1399,1400, + 5,295,0,0,1400,1401,3,188,94,0,1401,1402,5,271,0,0,1402,1403,3,188, + 94,0,1403,1404,5,296,0,0,1404,215,1,0,0,0,1405,1406,5,32,0,0,1406, + 1407,5,295,0,0,1407,1412,3,188,94,0,1408,1409,5,271,0,0,1409,1411, + 3,188,94,0,1410,1408,1,0,0,0,1411,1414,1,0,0,0,1412,1410,1,0,0,0, + 1412,1413,1,0,0,0,1413,1415,1,0,0,0,1414,1412,1,0,0,0,1415,1416, + 5,296,0,0,1416,217,1,0,0,0,1417,1419,5,23,0,0,1418,1420,3,188,94, + 0,1419,1418,1,0,0,0,1419,1420,1,0,0,0,1420,1426,1,0,0,0,1421,1422, + 5,224,0,0,1422,1423,3,188,94,0,1423,1424,5,201,0,0,1424,1425,3,188, + 94,0,1425,1427,1,0,0,0,1426,1421,1,0,0,0,1427,1428,1,0,0,0,1428, + 1426,1,0,0,0,1428,1429,1,0,0,0,1429,1432,1,0,0,0,1430,1431,5,72, + 0,0,1431,1433,3,188,94,0,1432,1430,1,0,0,0,1432,1433,1,0,0,0,1433, + 1434,1,0,0,0,1434,1435,5,73,0,0,1435,219,1,0,0,0,1436,1437,5,220, + 0,0,1437,1442,3,222,111,0,1438,1439,5,271,0,0,1439,1441,3,222,111, + 0,1440,1438,1,0,0,0,1441,1444,1,0,0,0,1442,1440,1,0,0,0,1442,1443, + 1,0,0,0,1443,221,1,0,0,0,1444,1442,1,0,0,0,1445,1446,5,295,0,0,1446, + 1451,3,188,94,0,1447,1448,5,271,0,0,1448,1450,3,188,94,0,1449,1447, + 1,0,0,0,1450,1453,1,0,0,0,1451,1449,1,0,0,0,1451,1452,1,0,0,0,1452, + 1454,1,0,0,0,1453,1451,1,0,0,0,1454,1455,5,296,0,0,1455,223,1,0, + 0,0,1456,1457,5,295,0,0,1457,1460,3,188,94,0,1458,1459,5,271,0,0, + 1459,1461,3,188,94,0,1460,1458,1,0,0,0,1461,1462,1,0,0,0,1462,1460, + 1,0,0,0,1462,1463,1,0,0,0,1463,1464,1,0,0,0,1464,1465,5,296,0,0, + 1465,225,1,0,0,0,1466,1467,7,12,0,0,1467,1476,5,295,0,0,1468,1473, + 3,188,94,0,1469,1470,5,271,0,0,1470,1472,3,188,94,0,1471,1469,1, + 0,0,0,1472,1475,1,0,0,0,1473,1471,1,0,0,0,1473,1474,1,0,0,0,1474, + 1477,1,0,0,0,1475,1473,1,0,0,0,1476,1468,1,0,0,0,1476,1477,1,0,0, + 0,1477,1478,1,0,0,0,1478,1479,5,296,0,0,1479,227,1,0,0,0,1480,1481, + 5,196,0,0,1481,1482,5,295,0,0,1482,1489,3,188,94,0,1483,1484,5,271, + 0,0,1484,1487,3,188,94,0,1485,1486,5,271,0,0,1486,1488,3,188,94, + 0,1487,1485,1,0,0,0,1487,1488,1,0,0,0,1488,1490,1,0,0,0,1489,1483, + 1,0,0,0,1489,1490,1,0,0,0,1490,1491,1,0,0,0,1491,1492,5,296,0,0, + 1492,1507,1,0,0,0,1493,1494,5,196,0,0,1494,1495,5,295,0,0,1495,1502, + 3,188,94,0,1496,1497,5,96,0,0,1497,1500,3,188,94,0,1498,1499,5,93, + 0,0,1499,1501,3,188,94,0,1500,1498,1,0,0,0,1500,1501,1,0,0,0,1501, + 1503,1,0,0,0,1502,1496,1,0,0,0,1502,1503,1,0,0,0,1503,1504,1,0,0, + 0,1504,1505,5,296,0,0,1505,1507,1,0,0,0,1506,1480,1,0,0,0,1506,1493, + 1,0,0,0,1507,229,1,0,0,0,1508,1509,5,161,0,0,1509,1510,5,295,0,0, + 1510,1511,3,188,94,0,1511,1512,5,271,0,0,1512,1513,3,188,94,0,1513, + 1514,5,296,0,0,1514,1523,1,0,0,0,1515,1516,5,161,0,0,1516,1517,5, + 295,0,0,1517,1518,3,188,94,0,1518,1519,5,107,0,0,1519,1520,3,188, + 94,0,1520,1521,5,296,0,0,1521,1523,1,0,0,0,1522,1508,1,0,0,0,1522, + 1515,1,0,0,0,1523,231,1,0,0,0,1524,1525,5,157,0,0,1525,1526,5,295, + 0,0,1526,1527,3,188,94,0,1527,1528,5,271,0,0,1528,1529,3,188,94, + 0,1529,1530,5,271,0,0,1530,1533,3,188,94,0,1531,1532,5,271,0,0,1532, + 1534,3,188,94,0,1533,1531,1,0,0,0,1533,1534,1,0,0,0,1534,1535,1, + 0,0,0,1535,1536,5,296,0,0,1536,1551,1,0,0,0,1537,1538,5,157,0,0, + 1538,1539,5,295,0,0,1539,1540,3,188,94,0,1540,1541,5,160,0,0,1541, + 1542,3,188,94,0,1542,1543,5,96,0,0,1543,1546,3,188,94,0,1544,1545, + 5,93,0,0,1545,1547,3,188,94,0,1546,1544,1,0,0,0,1546,1547,1,0,0, + 0,1547,1548,1,0,0,0,1548,1549,5,296,0,0,1549,1551,1,0,0,0,1550,1524, + 1,0,0,0,1550,1537,1,0,0,0,1551,233,1,0,0,0,1552,1553,5,44,0,0,1553, + 1554,5,295,0,0,1554,1555,5,278,0,0,1555,1565,5,296,0,0,1556,1557, + 7,13,0,0,1557,1559,5,295,0,0,1558,1560,3,100,50,0,1559,1558,1,0, + 0,0,1559,1560,1,0,0,0,1560,1561,1,0,0,0,1561,1562,3,188,94,0,1562, + 1563,5,296,0,0,1563,1565,1,0,0,0,1564,1552,1,0,0,0,1564,1556,1,0, + 0,0,1565,235,1,0,0,0,1566,1567,7,14,0,0,1567,1568,5,295,0,0,1568, + 1575,3,188,94,0,1569,1570,5,271,0,0,1570,1573,3,188,94,0,1571,1572, + 5,271,0,0,1572,1574,3,188,94,0,1573,1571,1,0,0,0,1573,1574,1,0,0, + 0,1574,1576,1,0,0,0,1575,1569,1,0,0,0,1575,1576,1,0,0,0,1576,1577, + 1,0,0,0,1577,1578,5,296,0,0,1578,1579,3,116,58,0,1579,237,1,0,0, + 0,1580,1581,5,24,0,0,1581,1582,5,295,0,0,1582,1583,3,188,94,0,1583, + 1584,5,10,0,0,1584,1585,3,278,139,0,1585,1586,5,296,0,0,1586,239, + 1,0,0,0,1587,1588,5,236,0,0,1588,1589,5,295,0,0,1589,1590,3,188, + 94,0,1590,1591,5,10,0,0,1591,1592,3,278,139,0,1592,1593,5,296,0, + 0,1593,241,1,0,0,0,1594,1595,5,235,0,0,1595,1596,5,295,0,0,1596, + 1597,3,188,94,0,1597,1598,5,10,0,0,1598,1599,3,278,139,0,1599,1600, + 5,296,0,0,1600,243,1,0,0,0,1601,1602,5,86,0,0,1602,1603,5,295,0, + 0,1603,1604,5,304,0,0,1604,1605,5,96,0,0,1605,1606,3,188,94,0,1606, + 1607,5,296,0,0,1607,245,1,0,0,0,1608,1609,5,208,0,0,1609,1617,5, + 295,0,0,1610,1612,5,304,0,0,1611,1610,1,0,0,0,1611,1612,1,0,0,0, + 1612,1614,1,0,0,0,1613,1615,3,188,94,0,1614,1613,1,0,0,0,1614,1615, + 1,0,0,0,1615,1616,1,0,0,0,1616,1618,5,96,0,0,1617,1611,1,0,0,0,1617, + 1618,1,0,0,0,1618,1619,1,0,0,0,1619,1620,3,188,94,0,1620,1621,5, + 296,0,0,1621,247,1,0,0,0,1622,1623,7,15,0,0,1623,1624,5,295,0,0, + 1624,1625,5,304,0,0,1625,1626,5,271,0,0,1626,1627,3,188,94,0,1627, + 1628,5,271,0,0,1628,1629,3,188,94,0,1629,1630,5,296,0,0,1630,249, + 1,0,0,0,1631,1632,3,252,126,0,1632,1641,5,295,0,0,1633,1638,3,188, + 94,0,1634,1635,5,271,0,0,1635,1637,3,188,94,0,1636,1634,1,0,0,0, + 1637,1640,1,0,0,0,1638,1636,1,0,0,0,1638,1639,1,0,0,0,1639,1642, + 1,0,0,0,1640,1638,1,0,0,0,1641,1633,1,0,0,0,1641,1642,1,0,0,0,1642, + 1643,1,0,0,0,1643,1644,5,296,0,0,1644,251,1,0,0,0,1645,1646,3,12, + 6,0,1646,1647,5,300,0,0,1647,1649,1,0,0,0,1648,1645,1,0,0,0,1649, + 1652,1,0,0,0,1650,1648,1,0,0,0,1650,1651,1,0,0,0,1651,1653,1,0,0, + 0,1652,1650,1,0,0,0,1653,1664,7,16,0,0,1654,1655,3,12,6,0,1655,1656, + 5,300,0,0,1656,1658,1,0,0,0,1657,1654,1,0,0,0,1658,1661,1,0,0,0, + 1659,1657,1,0,0,0,1659,1660,1,0,0,0,1660,1662,1,0,0,0,1661,1659, + 1,0,0,0,1662,1664,3,12,6,0,1663,1650,1,0,0,0,1663,1659,1,0,0,0,1664, + 253,1,0,0,0,1665,1666,5,291,0,0,1666,1667,3,188,94,0,1667,1668,5, + 292,0,0,1668,1677,1,0,0,0,1669,1670,5,291,0,0,1670,1671,5,278,0, + 0,1671,1677,5,292,0,0,1672,1673,5,300,0,0,1673,1677,3,12,6,0,1674, + 1675,5,300,0,0,1675,1677,5,278,0,0,1676,1665,1,0,0,0,1676,1669,1, + 0,0,0,1676,1672,1,0,0,0,1676,1674,1,0,0,0,1677,255,1,0,0,0,1678, + 1679,5,295,0,0,1679,1680,3,210,105,0,1680,1681,5,131,0,0,1681,1682, + 3,140,70,0,1682,1683,5,296,0,0,1683,257,1,0,0,0,1684,1685,3,210, + 105,0,1685,1686,5,131,0,0,1686,1687,3,138,69,0,1687,259,1,0,0,0, + 1688,1689,5,299,0,0,1689,261,1,0,0,0,1690,1692,5,276,0,0,1691,1690, + 1,0,0,0,1691,1692,1,0,0,0,1692,1693,1,0,0,0,1693,1699,7,0,0,0,1694, + 1696,5,276,0,0,1695,1694,1,0,0,0,1695,1696,1,0,0,0,1696,1697,1,0, + 0,0,1697,1699,3,264,132,0,1698,1691,1,0,0,0,1698,1695,1,0,0,0,1699, + 263,1,0,0,0,1700,1701,5,80,0,0,1701,265,1,0,0,0,1702,1705,3,268, + 134,0,1703,1705,3,270,135,0,1704,1702,1,0,0,0,1704,1703,1,0,0,0, + 1705,267,1,0,0,0,1706,1715,5,291,0,0,1707,1712,3,188,94,0,1708,1709, + 5,271,0,0,1709,1711,3,188,94,0,1710,1708,1,0,0,0,1711,1714,1,0,0, + 0,1712,1710,1,0,0,0,1712,1713,1,0,0,0,1713,1716,1,0,0,0,1714,1712, + 1,0,0,0,1715,1707,1,0,0,0,1715,1716,1,0,0,0,1716,1717,1,0,0,0,1717, + 1718,5,292,0,0,1718,269,1,0,0,0,1719,1728,5,289,0,0,1720,1725,3, + 188,94,0,1721,1722,5,271,0,0,1722,1724,3,188,94,0,1723,1721,1,0, + 0,0,1724,1727,1,0,0,0,1725,1723,1,0,0,0,1725,1726,1,0,0,0,1726,1729, + 1,0,0,0,1727,1725,1,0,0,0,1728,1720,1,0,0,0,1728,1729,1,0,0,0,1729, + 1730,1,0,0,0,1730,1731,5,290,0,0,1731,271,1,0,0,0,1732,1741,5,293, + 0,0,1733,1738,3,274,137,0,1734,1735,5,271,0,0,1735,1737,3,274,137, + 0,1736,1734,1,0,0,0,1737,1740,1,0,0,0,1738,1736,1,0,0,0,1738,1739, + 1,0,0,0,1739,1742,1,0,0,0,1740,1738,1,0,0,0,1741,1733,1,0,0,0,1741, + 1742,1,0,0,0,1742,1743,1,0,0,0,1743,1744,5,294,0,0,1744,273,1,0, + 0,0,1745,1746,3,188,94,0,1746,1747,5,297,0,0,1747,1748,3,188,94, + 0,1748,275,1,0,0,0,1749,1784,5,142,0,0,1750,1784,5,237,0,0,1751, + 1784,5,209,0,0,1752,1784,5,89,0,0,1753,1784,5,301,0,0,1754,1784, + 5,302,0,0,1755,1784,5,303,0,0,1756,1784,5,310,0,0,1757,1758,5,53, + 0,0,1758,1784,5,301,0,0,1759,1763,5,202,0,0,1760,1761,5,295,0,0, + 1761,1762,5,302,0,0,1762,1764,5,296,0,0,1763,1760,1,0,0,0,1763,1764, + 1,0,0,0,1764,1768,1,0,0,0,1765,1766,5,227,0,0,1766,1767,5,202,0, + 0,1767,1769,5,230,0,0,1768,1765,1,0,0,0,1768,1769,1,0,0,0,1769,1770, + 1,0,0,0,1770,1784,5,301,0,0,1771,1775,5,203,0,0,1772,1773,5,295, + 0,0,1773,1774,5,302,0,0,1774,1776,5,296,0,0,1775,1772,1,0,0,0,1775, + 1776,1,0,0,0,1776,1780,1,0,0,0,1777,1778,5,227,0,0,1778,1779,5,202, + 0,0,1779,1781,5,230,0,0,1780,1777,1,0,0,0,1780,1781,1,0,0,0,1781, + 1782,1,0,0,0,1782,1784,5,301,0,0,1783,1749,1,0,0,0,1783,1750,1,0, + 0,0,1783,1751,1,0,0,0,1783,1752,1,0,0,0,1783,1753,1,0,0,0,1783,1754, + 1,0,0,0,1783,1755,1,0,0,0,1783,1756,1,0,0,0,1783,1757,1,0,0,0,1783, + 1759,1,0,0,0,1783,1771,1,0,0,0,1784,277,1,0,0,0,1785,1824,7,17,0, + 0,1786,1787,5,70,0,0,1787,1824,5,162,0,0,1788,1792,7,18,0,0,1789, + 1790,5,295,0,0,1790,1791,5,302,0,0,1791,1793,5,296,0,0,1792,1789, + 1,0,0,0,1792,1793,1,0,0,0,1793,1824,1,0,0,0,1794,1795,5,27,0,0,1795, + 1799,5,222,0,0,1796,1797,5,295,0,0,1797,1798,5,302,0,0,1798,1800, + 5,296,0,0,1799,1796,1,0,0,0,1799,1800,1,0,0,0,1800,1824,1,0,0,0, + 1801,1809,7,19,0,0,1802,1803,5,295,0,0,1803,1806,5,302,0,0,1804, + 1805,5,271,0,0,1805,1807,5,302,0,0,1806,1804,1,0,0,0,1806,1807,1, + 0,0,0,1807,1808,1,0,0,0,1808,1810,5,296,0,0,1809,1802,1,0,0,0,1809, + 1810,1,0,0,0,1810,1824,1,0,0,0,1811,1815,7,20,0,0,1812,1813,5,295, + 0,0,1813,1814,5,302,0,0,1814,1816,5,296,0,0,1815,1812,1,0,0,0,1815, + 1816,1,0,0,0,1816,1820,1,0,0,0,1817,1818,5,227,0,0,1818,1819,5,202, + 0,0,1819,1821,5,230,0,0,1820,1817,1,0,0,0,1820,1821,1,0,0,0,1821, + 1824,1,0,0,0,1822,1824,3,12,6,0,1823,1785,1,0,0,0,1823,1786,1,0, + 0,0,1823,1788,1,0,0,0,1823,1794,1,0,0,0,1823,1801,1,0,0,0,1823,1811, + 1,0,0,0,1823,1822,1,0,0,0,1824,279,1,0,0,0,230,287,292,294,301,305, + 309,313,315,340,343,350,365,374,386,391,402,409,417,422,429,435, + 438,441,445,450,453,458,466,472,485,491,499,513,516,519,525,529, + 535,539,541,549,557,568,571,586,594,606,611,616,627,637,640,648, + 657,662,665,668,674,681,686,691,700,707,712,715,725,739,744,748, + 752,760,764,773,778,781,792,802,814,821,836,851,856,863,867,870, + 875,881,887,892,894,903,907,910,916,920,922,926,929,934,937,941, + 945,948,953,956,960,962,969,972,1008,1012,1016,1019,1031,1042,1048, + 1056,1064,1068,1070,1078,1082,1092,1098,1100,1105,1112,1115,1118, + 1122,1125,1128,1130,1135,1138,1141,1148,1156,1160,1164,1167,1176, + 1180,1185,1189,1194,1198,1201,1203,1208,1212,1215,1218,1221,1224, + 1227,1230,1233,1243,1254,1260,1271,1276,1285,1291,1297,1301,1308, + 1310,1321,1332,1343,1349,1372,1378,1382,1396,1412,1419,1428,1432, + 1442,1451,1462,1473,1476,1487,1489,1500,1502,1506,1522,1533,1546, + 1550,1559,1564,1573,1575,1611,1614,1617,1638,1641,1650,1659,1663, + 1676,1691,1695,1698,1704,1712,1715,1725,1728,1738,1741,1763,1768, + 1775,1780,1783,1792,1799,1806,1809,1815,1820,1823 ] class PartiQLParser ( Parser ): @@ -780,9 +780,9 @@ class PartiQLParser ( Parser ): "'CONTINUE'", "'CONVERT'", "'CORRESPONDING'", "'COUNT'", "'CREATE'", "'CROSS'", "'CURRENT'", "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURRENT_USER'", - "'CURSOR'", "'DATE'", "'DEALLOCATE'", "'DEC'", "'DECIMAL'", - "'DECLARE'", "'DEFAULT'", "'DEFERRABLE'", "'DEFERRED'", - "'DELETE'", "'DESC'", "'DESCRIBE'", "'DESCRIPTOR'", + "'CURSOR'", "'DATE'", "'DATETIME'", "'DEALLOCATE'", + "'DEC'", "'DECIMAL'", "'DECLARE'", "'DEFAULT'", "'DEFERRABLE'", + "'DEFERRED'", "'DELETE'", "'DESC'", "'DESCRIBE'", "'DESCRIPTOR'", "'DIAGNOSTICS'", "'DISCONNECT'", "'DISTINCT'", "'DOMAIN'", "'DOUBLE'", "'DROP'", "'ELSE'", "'END'", "'END-EXEC'", "'ESCAPE'", "'EVERY'", "'EXCEPT'", "'EXCEPTION'", "'EXCLUDE'", @@ -842,38 +842,38 @@ class PartiQLParser ( Parser ): "CONSTRAINT", "CONSTRAINTS", "CONTINUE", "CONVERT", "CORRESPONDING", "COUNT", "CREATE", "CROSS", "CURRENT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", - "CURRENT_USER", "CURSOR", "DATE", "DEALLOCATE", "DEC", - "DECIMAL", "DECLARE", "DEFAULT", "DEFERRABLE", "DEFERRED", - "DELETE", "DESC", "DESCRIBE", "DESCRIPTOR", "DIAGNOSTICS", - "DISCONNECT", "DISTINCT", "DOMAIN", "DOUBLE", "DROP", - "ELSE", "END", "END_EXEC", "ESCAPE", "EVERY", "EXCEPT", - "EXCEPTION", "EXCLUDE", "EXCLUDED", "EXEC", "EXECUTE", - "EXISTS", "EXPLAIN", "EXTERNAL", "EXTRACT", "DATE_ADD", - "DATE_DIFF", "FALSE", "FETCH", "FIRST", "FLOAT", "FOR", - "FOREIGN", "FOUND", "FROM", "FULL", "GET", "GLOBAL", - "GO", "GOTO", "GRANT", "GROUP", "HAVING", "IDENTITY", - "IMMEDIATE", "IN", "INDICATOR", "INITIALLY", "INNER", - "INPUT", "INSENSITIVE", "INSERT", "INT", "INTEGER", - "INTERSECT", "INTERVAL", "INTO", "IS", "ISOLATION", - "JOIN", "KEY", "LANGUAGE", "LAST", "LATERAL", "LEFT", - "LEVEL", "LIKE", "LOCAL", "LOWER", "MATCH", "MAX", - "MIN", "MODULE", "NAMES", "NATIONAL", "NATURAL", "NCHAR", - "NEXT", "NO", "NOT", "NULL", "NULLS", "NULLIF", "NUMERIC", - "OCTET_LENGTH", "OF", "ON", "ONLY", "OPEN", "OPTION", - "OR", "ORDER", "OUTER", "OUTPUT", "OVERLAPS", "OVERLAY", - "PAD", "PARTIAL", "PLACING", "POSITION", "PRECISION", - "PREPARE", "PRESERVE", "PRIMARY", "PRIOR", "PRIVILEGES", - "PROCEDURE", "PUBLIC", "READ", "REAL", "REFERENCES", - "RELATIVE", "REPLACE", "RESTRICT", "REVOKE", "RIGHT", - "ROLLBACK", "ROWS", "SCHEMA", "SCROLL", "SECTION", - "SELECT", "SESSION", "SESSION_USER", "SET", "SHORTEST", - "SIZE", "SMALLINT", "SOME", "SPACE", "SQL", "SQLCODE", - "SQLERROR", "SQLSTATE", "SUBSTRING", "SUM", "SYSTEM_USER", - "TABLE", "TEMPORARY", "THEN", "TIME", "TIMESTAMP", - "TO", "TRANSACTION", "TRANSLATE", "TRANSLATION", "TRIM", - "TRUE", "UNION", "UNIQUE", "UNKNOWN", "UPDATE", "UPPER", - "UPSERT", "USAGE", "USER", "USING", "VALUE", "VALUES", - "VARCHAR", "VARYING", "VIEW", "WHEN", "WHENEVER", + "CURRENT_USER", "CURSOR", "DATE", "DATETIME", "DEALLOCATE", + "DEC", "DECIMAL", "DECLARE", "DEFAULT", "DEFERRABLE", + "DEFERRED", "DELETE", "DESC", "DESCRIBE", "DESCRIPTOR", + "DIAGNOSTICS", "DISCONNECT", "DISTINCT", "DOMAIN", + "DOUBLE", "DROP", "ELSE", "END", "END_EXEC", "ESCAPE", + "EVERY", "EXCEPT", "EXCEPTION", "EXCLUDE", "EXCLUDED", + "EXEC", "EXECUTE", "EXISTS", "EXPLAIN", "EXTERNAL", + "EXTRACT", "DATE_ADD", "DATE_DIFF", "FALSE", "FETCH", + "FIRST", "FLOAT", "FOR", "FOREIGN", "FOUND", "FROM", + "FULL", "GET", "GLOBAL", "GO", "GOTO", "GRANT", "GROUP", + "HAVING", "IDENTITY", "IMMEDIATE", "IN", "INDICATOR", + "INITIALLY", "INNER", "INPUT", "INSENSITIVE", "INSERT", + "INT", "INTEGER", "INTERSECT", "INTERVAL", "INTO", + "IS", "ISOLATION", "JOIN", "KEY", "LANGUAGE", "LAST", + "LATERAL", "LEFT", "LEVEL", "LIKE", "LOCAL", "LOWER", + "MATCH", "MAX", "MIN", "MODULE", "NAMES", "NATIONAL", + "NATURAL", "NCHAR", "NEXT", "NO", "NOT", "NULL", "NULLS", + "NULLIF", "NUMERIC", "OCTET_LENGTH", "OF", "ON", "ONLY", + "OPEN", "OPTION", "OR", "ORDER", "OUTER", "OUTPUT", + "OVERLAPS", "OVERLAY", "PAD", "PARTIAL", "PLACING", + "POSITION", "PRECISION", "PREPARE", "PRESERVE", "PRIMARY", + "PRIOR", "PRIVILEGES", "PROCEDURE", "PUBLIC", "READ", + "REAL", "REFERENCES", "RELATIVE", "REPLACE", "RESTRICT", + "REVOKE", "RIGHT", "ROLLBACK", "ROWS", "SCHEMA", "SCROLL", + "SECTION", "SELECT", "SESSION", "SESSION_USER", "SET", + "SHORTEST", "SIZE", "SMALLINT", "SOME", "SPACE", "SQL", + "SQLCODE", "SQLERROR", "SQLSTATE", "SUBSTRING", "SUM", + "SYSTEM_USER", "TABLE", "TEMPORARY", "THEN", "TIME", + "TIMESTAMP", "TO", "TRANSACTION", "TRANSLATE", "TRANSLATION", + "TRIM", "TRUE", "UNION", "UNIQUE", "UNKNOWN", "UPDATE", + "UPPER", "UPSERT", "USAGE", "USER", "USING", "VALUE", + "VALUES", "VARCHAR", "VARYING", "VIEW", "WHEN", "WHENEVER", "WHERE", "WITH", "WORK", "WRITE", "ZONE", "LAG", "LEAD", "OVER", "PARTITION", "CAN_CAST", "CAN_LOSSLESS_CAST", "MISSING", "PIVOT", "UNPIVOT", "LIMIT", "OFFSET", @@ -1124,267 +1124,268 @@ class PartiQLParser ( Parser ): CURRENT_USER=51 CURSOR=52 DATE=53 - DEALLOCATE=54 - DEC=55 - DECIMAL=56 - DECLARE=57 - DEFAULT=58 - DEFERRABLE=59 - DEFERRED=60 - DELETE=61 - DESC=62 - DESCRIBE=63 - DESCRIPTOR=64 - DIAGNOSTICS=65 - DISCONNECT=66 - DISTINCT=67 - DOMAIN=68 - DOUBLE=69 - DROP=70 - ELSE=71 - END=72 - END_EXEC=73 - ESCAPE=74 - EVERY=75 - EXCEPT=76 - EXCEPTION=77 - EXCLUDE=78 - EXCLUDED=79 - EXEC=80 - EXECUTE=81 - EXISTS=82 - EXPLAIN=83 - EXTERNAL=84 - EXTRACT=85 - DATE_ADD=86 - DATE_DIFF=87 - FALSE=88 - FETCH=89 - FIRST=90 - FLOAT=91 - FOR=92 - FOREIGN=93 - FOUND=94 - FROM=95 - FULL=96 - GET=97 - GLOBAL=98 - GO=99 - GOTO=100 - GRANT=101 - GROUP=102 - HAVING=103 - IDENTITY=104 - IMMEDIATE=105 - IN=106 - INDICATOR=107 - INITIALLY=108 - INNER=109 - INPUT=110 - INSENSITIVE=111 - INSERT=112 - INT=113 - INTEGER=114 - INTERSECT=115 - INTERVAL=116 - INTO=117 - IS=118 - ISOLATION=119 - JOIN=120 - KEY=121 - LANGUAGE=122 - LAST=123 - LATERAL=124 - LEFT=125 - LEVEL=126 - LIKE=127 - LOCAL=128 - LOWER=129 - MATCH=130 - MAX=131 - MIN=132 - MODULE=133 - NAMES=134 - NATIONAL=135 - NATURAL=136 - NCHAR=137 - NEXT=138 - NO=139 - NOT=140 - NULL=141 - NULLS=142 - NULLIF=143 - NUMERIC=144 - OCTET_LENGTH=145 - OF=146 - ON=147 - ONLY=148 - OPEN=149 - OPTION=150 - OR=151 - ORDER=152 - OUTER=153 - OUTPUT=154 - OVERLAPS=155 - OVERLAY=156 - PAD=157 - PARTIAL=158 - PLACING=159 - POSITION=160 - PRECISION=161 - PREPARE=162 - PRESERVE=163 - PRIMARY=164 - PRIOR=165 - PRIVILEGES=166 - PROCEDURE=167 - PUBLIC=168 - READ=169 - REAL=170 - REFERENCES=171 - RELATIVE=172 - REPLACE=173 - RESTRICT=174 - REVOKE=175 - RIGHT=176 - ROLLBACK=177 - ROWS=178 - SCHEMA=179 - SCROLL=180 - SECTION=181 - SELECT=182 - SESSION=183 - SESSION_USER=184 - SET=185 - SHORTEST=186 - SIZE=187 - SMALLINT=188 - SOME=189 - SPACE=190 - SQL=191 - SQLCODE=192 - SQLERROR=193 - SQLSTATE=194 - SUBSTRING=195 - SUM=196 - SYSTEM_USER=197 - TABLE=198 - TEMPORARY=199 - THEN=200 - TIME=201 - TIMESTAMP=202 - TO=203 - TRANSACTION=204 - TRANSLATE=205 - TRANSLATION=206 - TRIM=207 - TRUE=208 - UNION=209 - UNIQUE=210 - UNKNOWN=211 - UPDATE=212 - UPPER=213 - UPSERT=214 - USAGE=215 - USER=216 - USING=217 - VALUE=218 - VALUES=219 - VARCHAR=220 - VARYING=221 - VIEW=222 - WHEN=223 - WHENEVER=224 - WHERE=225 - WITH=226 - WORK=227 - WRITE=228 - ZONE=229 - LAG=230 - LEAD=231 - OVER=232 - PARTITION=233 - CAN_CAST=234 - CAN_LOSSLESS_CAST=235 - MISSING=236 - PIVOT=237 - UNPIVOT=238 - LIMIT=239 - OFFSET=240 - REMOVE=241 - INDEX=242 - LET=243 - CONFLICT=244 - DO=245 - RETURNING=246 - MODIFIED=247 - NEW=248 - OLD=249 - NOTHING=250 - TUPLE=251 - INTEGER2=252 - INT2=253 - INTEGER4=254 - INT4=255 - INTEGER8=256 - INT8=257 - BIGINT=258 - BOOL=259 - BOOLEAN=260 - STRING=261 - SYMBOL=262 - CLOB=263 - BLOB=264 - STRUCT=265 - LIST=266 - SEXP=267 - BAG=268 - CARET=269 - COMMA=270 - PLUS=271 - MINUS=272 - SLASH_FORWARD=273 - PERCENT=274 - AT_SIGN=275 - TILDE=276 - ASTERISK=277 - VERTBAR=278 - AMPERSAND=279 - BANG=280 - LT_EQ=281 - GT_EQ=282 - EQ=283 - NEQ=284 - CONCAT=285 - ANGLE_LEFT=286 - ANGLE_RIGHT=287 - ANGLE_DOUBLE_LEFT=288 - ANGLE_DOUBLE_RIGHT=289 - BRACKET_LEFT=290 - BRACKET_RIGHT=291 - BRACE_LEFT=292 - BRACE_RIGHT=293 - PAREN_LEFT=294 - PAREN_RIGHT=295 - COLON=296 - COLON_SEMI=297 - QUESTION_MARK=298 - PERIOD=299 - LITERAL_STRING=300 - LITERAL_INTEGER=301 - LITERAL_DECIMAL=302 - IDENTIFIER=303 - IDENTIFIER_QUOTED=304 - WS=305 - COMMENT_SINGLE=306 - COMMENT_BLOCK=307 - UNRECOGNIZED=308 - ION_CLOSURE=309 - BACKTICK=310 + DATETIME=54 + DEALLOCATE=55 + DEC=56 + DECIMAL=57 + DECLARE=58 + DEFAULT=59 + DEFERRABLE=60 + DEFERRED=61 + DELETE=62 + DESC=63 + DESCRIBE=64 + DESCRIPTOR=65 + DIAGNOSTICS=66 + DISCONNECT=67 + DISTINCT=68 + DOMAIN=69 + DOUBLE=70 + DROP=71 + ELSE=72 + END=73 + END_EXEC=74 + ESCAPE=75 + EVERY=76 + EXCEPT=77 + EXCEPTION=78 + EXCLUDE=79 + EXCLUDED=80 + EXEC=81 + EXECUTE=82 + EXISTS=83 + EXPLAIN=84 + EXTERNAL=85 + EXTRACT=86 + DATE_ADD=87 + DATE_DIFF=88 + FALSE=89 + FETCH=90 + FIRST=91 + FLOAT=92 + FOR=93 + FOREIGN=94 + FOUND=95 + FROM=96 + FULL=97 + GET=98 + GLOBAL=99 + GO=100 + GOTO=101 + GRANT=102 + GROUP=103 + HAVING=104 + IDENTITY=105 + IMMEDIATE=106 + IN=107 + INDICATOR=108 + INITIALLY=109 + INNER=110 + INPUT=111 + INSENSITIVE=112 + INSERT=113 + INT=114 + INTEGER=115 + INTERSECT=116 + INTERVAL=117 + INTO=118 + IS=119 + ISOLATION=120 + JOIN=121 + KEY=122 + LANGUAGE=123 + LAST=124 + LATERAL=125 + LEFT=126 + LEVEL=127 + LIKE=128 + LOCAL=129 + LOWER=130 + MATCH=131 + MAX=132 + MIN=133 + MODULE=134 + NAMES=135 + NATIONAL=136 + NATURAL=137 + NCHAR=138 + NEXT=139 + NO=140 + NOT=141 + NULL=142 + NULLS=143 + NULLIF=144 + NUMERIC=145 + OCTET_LENGTH=146 + OF=147 + ON=148 + ONLY=149 + OPEN=150 + OPTION=151 + OR=152 + ORDER=153 + OUTER=154 + OUTPUT=155 + OVERLAPS=156 + OVERLAY=157 + PAD=158 + PARTIAL=159 + PLACING=160 + POSITION=161 + PRECISION=162 + PREPARE=163 + PRESERVE=164 + PRIMARY=165 + PRIOR=166 + PRIVILEGES=167 + PROCEDURE=168 + PUBLIC=169 + READ=170 + REAL=171 + REFERENCES=172 + RELATIVE=173 + REPLACE=174 + RESTRICT=175 + REVOKE=176 + RIGHT=177 + ROLLBACK=178 + ROWS=179 + SCHEMA=180 + SCROLL=181 + SECTION=182 + SELECT=183 + SESSION=184 + SESSION_USER=185 + SET=186 + SHORTEST=187 + SIZE=188 + SMALLINT=189 + SOME=190 + SPACE=191 + SQL=192 + SQLCODE=193 + SQLERROR=194 + SQLSTATE=195 + SUBSTRING=196 + SUM=197 + SYSTEM_USER=198 + TABLE=199 + TEMPORARY=200 + THEN=201 + TIME=202 + TIMESTAMP=203 + TO=204 + TRANSACTION=205 + TRANSLATE=206 + TRANSLATION=207 + TRIM=208 + TRUE=209 + UNION=210 + UNIQUE=211 + UNKNOWN=212 + UPDATE=213 + UPPER=214 + UPSERT=215 + USAGE=216 + USER=217 + USING=218 + VALUE=219 + VALUES=220 + VARCHAR=221 + VARYING=222 + VIEW=223 + WHEN=224 + WHENEVER=225 + WHERE=226 + WITH=227 + WORK=228 + WRITE=229 + ZONE=230 + LAG=231 + LEAD=232 + OVER=233 + PARTITION=234 + CAN_CAST=235 + CAN_LOSSLESS_CAST=236 + MISSING=237 + PIVOT=238 + UNPIVOT=239 + LIMIT=240 + OFFSET=241 + REMOVE=242 + INDEX=243 + LET=244 + CONFLICT=245 + DO=246 + RETURNING=247 + MODIFIED=248 + NEW=249 + OLD=250 + NOTHING=251 + TUPLE=252 + INTEGER2=253 + INT2=254 + INTEGER4=255 + INT4=256 + INTEGER8=257 + INT8=258 + BIGINT=259 + BOOL=260 + BOOLEAN=261 + STRING=262 + SYMBOL=263 + CLOB=264 + BLOB=265 + STRUCT=266 + LIST=267 + SEXP=268 + BAG=269 + CARET=270 + COMMA=271 + PLUS=272 + MINUS=273 + SLASH_FORWARD=274 + PERCENT=275 + AT_SIGN=276 + TILDE=277 + ASTERISK=278 + VERTBAR=279 + AMPERSAND=280 + BANG=281 + LT_EQ=282 + GT_EQ=283 + EQ=284 + NEQ=285 + CONCAT=286 + ANGLE_LEFT=287 + ANGLE_RIGHT=288 + ANGLE_DOUBLE_LEFT=289 + ANGLE_DOUBLE_RIGHT=290 + BRACKET_LEFT=291 + BRACKET_RIGHT=292 + BRACE_LEFT=293 + BRACE_RIGHT=294 + PAREN_LEFT=295 + PAREN_RIGHT=296 + COLON=297 + COLON_SEMI=298 + QUESTION_MARK=299 + PERIOD=300 + LITERAL_STRING=301 + LITERAL_INTEGER=302 + LITERAL_DECIMAL=303 + IDENTIFIER=304 + IDENTIFIER_QUOTED=305 + WS=306 + COMMENT_SINGLE=307 + COMMENT_BLOCK=308 + UNRECOGNIZED=309 + ION_CLOSURE=310 + BACKTICK=311 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) - self.checkVersion("4.13.0") + self.checkVersion("4.13.1") self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) self._predicates = None @@ -1457,7 +1458,7 @@ def root(self): self.state = 294 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==83: + if _la==84: self.state = 280 self.match(PartiQLParser.EXPLAIN) self.state = 292 @@ -1471,7 +1472,7 @@ def root(self): self.state = 287 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 283 self.match(PartiQLParser.COMMA) self.state = 284 @@ -1633,8 +1634,8 @@ def statement(self): try: self.state = 315 self._errHandler.sync(self) - token = self._input.LA(1) - if token in [8, 15, 19, 23, 24, 28, 29, 32, 44, 48, 51, 53, 75, 79, 82, 85, 86, 87, 88, 129, 131, 132, 140, 141, 143, 145, 156, 160, 182, 187, 189, 195, 196, 201, 202, 207, 208, 213, 219, 230, 231, 234, 235, 236, 237, 266, 267, 271, 272, 275, 288, 290, 292, 294, 298, 300, 301, 302, 303, 304, 309]: + la_ = self._interp.adaptivePredict(self._input,7,self._ctx) + if la_ == 1: localctx = PartiQLParser.QueryDqlContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 299 @@ -1642,13 +1643,14 @@ def statement(self): self.state = 301 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==297: + if _la==298: self.state = 300 self.match(PartiQLParser.COLON_SEMI) pass - elif token in [61, 95, 112, 173, 185, 212, 214, 241]: + + elif la_ == 2: localctx = PartiQLParser.QueryDmlContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 303 @@ -1656,13 +1658,14 @@ def statement(self): self.state = 305 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==297: + if _la==298: self.state = 304 self.match(PartiQLParser.COLON_SEMI) pass - elif token in [45, 70]: + + elif la_ == 3: localctx = PartiQLParser.QueryDdlContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 307 @@ -1670,13 +1673,14 @@ def statement(self): self.state = 309 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==297: + if _la==298: self.state = 308 self.match(PartiQLParser.COLON_SEMI) pass - elif token in [80]: + + elif la_ == 4: localctx = PartiQLParser.QueryExecContext(self, localctx) self.enterOuterAlt(localctx, 4) self.state = 311 @@ -1684,14 +1688,13 @@ def statement(self): self.state = 313 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==297: + if _la==298: self.state = 312 self.match(PartiQLParser.COLON_SEMI) pass - else: - raise NoViableAltException(self) + except RecognitionException as re: localctx.exception = re @@ -1959,7 +1962,7 @@ def symbolPrimitive(self): self.state = 329 localctx.ident = self._input.LT(1) _la = self._input.LA(1) - if not(_la==303 or _la==304): + if not(_la==304 or _la==305): localctx.ident = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2081,14 +2084,14 @@ def execCommand(self): self.state = 343 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 11558071357178112) != 0) or ((((_la - 75)) & ~0x3f) == 0 and ((1 << (_la - 75)) & 234187180623281297) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 7026323504187375659) != 0) or ((((_la - 207)) & ~0x3f) == 0 and ((1 << (_la - 207)) & 1729382258948706371) != 0) or ((((_la - 271)) & ~0x3f) == 0 and ((1 << (_la - 271)) & 291666264083) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 29572469866660096) != 0) or ((((_la - 76)) & ~0x3f) == 0 and ((1 << (_la - 76)) & 234187180623281297) != 0) or ((((_la - 141)) & ~0x3f) == 0 and ((1 << (_la - 141)) & 7026323512777310251) != 0) or ((((_la - 208)) & ~0x3f) == 0 and ((1 << (_la - 208)) & 1729382258948706371) != 0) or ((((_la - 272)) & ~0x3f) == 0 and ((1 << (_la - 272)) & 291666264083) != 0): self.state = 335 localctx._expr = self.expr() localctx.args.append(localctx._expr) self.state = 340 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 336 self.match(PartiQLParser.COMMA) self.state = 337 @@ -2423,7 +2426,7 @@ def ddl(self): self.state = 363 self.createCommand() pass - elif token in [70]: + elif token in [71]: self.enterOuterAlt(localctx, 2) self.state = 364 self.dropCommand() @@ -2561,7 +2564,7 @@ def createCommand(self): self.state = 374 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==294: + if _la==295: self.state = 370 self.match(PartiQLParser.PAREN_LEFT) self.state = 371 @@ -2590,7 +2593,7 @@ def createCommand(self): self.state = 386 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 382 self.match(PartiQLParser.COMMA) self.state = 383 @@ -2792,7 +2795,7 @@ def tableDef(self): self.state = 409 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 405 self.match(PartiQLParser.COMMA) self.state = 406 @@ -2877,7 +2880,7 @@ def tableDefPart(self): self.state = 417 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==39 or _la==140 or _la==141: + while _la==39 or _la==141 or _la==142: self.state = 414 self.columnConstraint() self.state = 419 @@ -3035,7 +3038,7 @@ def columnConstraintDef(self): self.state = 429 self._errHandler.sync(self) token = self._input.LA(1) - if token in [140]: + if token in [141]: localctx = PartiQLParser.ColConstrNotNullContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 426 @@ -3043,7 +3046,7 @@ def columnConstraintDef(self): self.state = 427 self.match(PartiQLParser.NULL) pass - elif token in [141]: + elif token in [142]: localctx = PartiQLParser.ColConstrNullContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 428 @@ -3217,13 +3220,13 @@ def dml(self): self.state = 435 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==112 or _la==173 or ((((_la - 185)) & ~0x3f) == 0 and ((1 << (_la - 185)) & 72057594574798849) != 0)): + if not (_la==113 or _la==174 or ((((_la - 186)) & ~0x3f) == 0 and ((1 << (_la - 186)) & 72057594574798849) != 0)): break self.state = 438 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==225: + if _la==226: self.state = 437 self.whereClause() @@ -3231,7 +3234,7 @@ def dml(self): self.state = 441 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==246: + if _la==247: self.state = 440 self.returningClause() @@ -3246,7 +3249,7 @@ def dml(self): self.state = 445 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==225: + if _la==226: self.state = 444 self.whereClause() @@ -3260,13 +3263,13 @@ def dml(self): self.state = 450 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==112 or _la==173 or ((((_la - 185)) & ~0x3f) == 0 and ((1 << (_la - 185)) & 72057594574798849) != 0)): + if not (_la==113 or _la==174 or ((((_la - 186)) & ~0x3f) == 0 and ((1 << (_la - 186)) & 72057594574798849) != 0)): break self.state = 453 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==246: + if _la==247: self.state = 452 self.returningClause() @@ -3459,7 +3462,7 @@ def pathSimple(self): self.state = 472 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==290 or _la==299: + while _la==291 or _la==300: self.state = 469 self.pathSimpleSteps() self.state = 474 @@ -3929,7 +3932,7 @@ def insertCommandReturning(self): self.state = 516 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==147: + if _la==148: self.state = 515 self.onConflictLegacy() @@ -3937,7 +3940,7 @@ def insertCommandReturning(self): self.state = 519 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==246: + if _la==247: self.state = 518 self.returningClause() @@ -4029,7 +4032,7 @@ def insertStatement(self): self.state = 525 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==294: + if _la==295: self.state = 524 self.columnList() @@ -4039,7 +4042,7 @@ def insertStatement(self): self.state = 529 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==147: + if _la==148: self.state = 528 self.onConflict() @@ -4067,7 +4070,7 @@ def insertStatement(self): self.state = 539 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==147: + if _la==148: self.state = 538 self.onConflict() @@ -4144,7 +4147,7 @@ def columnList(self): self.state = 549 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 545 self.match(PartiQLParser.COMMA) self.state = 546 @@ -4219,7 +4222,7 @@ def onConflict(self): self.state = 557 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==147 or _la==294: + if _la==148 or _la==295: self.state = 556 self.conflictTarget() @@ -4321,7 +4324,7 @@ def insertStatementLegacy(self): self.state = 571 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==147: + if _la==148: self.state = 570 self.onConflictLegacy() @@ -4473,7 +4476,7 @@ def conflictTarget(self): self.state = 594 self._errHandler.sync(self) token = self._input.LA(1) - if token in [294]: + if token in [295]: self.enterOuterAlt(localctx, 1) self.state = 580 self.match(PartiQLParser.PAREN_LEFT) @@ -4482,7 +4485,7 @@ def conflictTarget(self): self.state = 586 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 582 self.match(PartiQLParser.COMMA) self.state = 583 @@ -4494,7 +4497,7 @@ def conflictTarget(self): self.state = 589 self.match(PartiQLParser.PAREN_RIGHT) pass - elif token in [147]: + elif token in [148]: self.enterOuterAlt(localctx, 2) self.state = 591 self.match(PartiQLParser.ON) @@ -4896,7 +4899,7 @@ def setCommand(self): self.state = 627 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 623 self.match(PartiQLParser.COMMA) self.state = 624 @@ -5029,7 +5032,7 @@ def deleteCommand(self): self.state = 637 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==225: + if _la==226: self.state = 636 self.whereClause() @@ -5037,7 +5040,7 @@ def deleteCommand(self): self.state = 640 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==246: + if _la==247: self.state = 639 self.returningClause() @@ -5108,7 +5111,7 @@ def returningClause(self): self.state = 648 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 644 self.match(PartiQLParser.COMMA) self.state = 645 @@ -5189,7 +5192,7 @@ def returningColumn(self): self.state = 651 localctx.status = self._input.LT(1) _la = self._input.LA(1) - if not(_la==4 or _la==247): + if not(_la==4 or _la==248): localctx.status = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -5197,7 +5200,7 @@ def returningColumn(self): self.state = 652 localctx.age = self._input.LT(1) _la = self._input.LA(1) - if not(_la==248 or _la==249): + if not(_la==249 or _la==250): localctx.age = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -5211,7 +5214,7 @@ def returningColumn(self): self.state = 654 localctx.status = self._input.LT(1) _la = self._input.LA(1) - if not(_la==4 or _la==247): + if not(_la==4 or _la==248): localctx.status = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -5219,7 +5222,7 @@ def returningColumn(self): self.state = 655 localctx.age = self._input.LT(1) _la = self._input.LA(1) - if not(_la==248 or _la==249): + if not(_la==249 or _la==250): localctx.age = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -5599,7 +5602,7 @@ def selectClause(self): self.state = 681 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==4 or _la==67: + if _la==4 or _la==68: self.state = 680 self.setQuantifierStrategy() @@ -5616,7 +5619,7 @@ def selectClause(self): self.state = 686 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==4 or _la==67: + if _la==4 or _la==68: self.state = 685 self.setQuantifierStrategy() @@ -5633,7 +5636,7 @@ def selectClause(self): self.state = 691 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==4 or _la==67: + if _la==4 or _la==68: self.state = 690 self.setQuantifierStrategy() @@ -5719,7 +5722,7 @@ def projectionItems(self): self.state = 707 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 703 self.match(PartiQLParser.COMMA) self.state = 704 @@ -5787,7 +5790,7 @@ def projectionItem(self): self.state = 715 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==10 or _la==303 or _la==304: + if _la==10 or _la==304 or _la==305: self.state = 712 self._errHandler.sync(self) _la = self._input.LA(1) @@ -5851,7 +5854,7 @@ def setQuantifierStrategy(self): self.enterOuterAlt(localctx, 1) self.state = 717 _la = self._input.LA(1) - if not(_la==4 or _la==67): + if not(_la==4 or _la==68): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6143,7 +6146,7 @@ def orderSortSpec(self): self.state = 743 localctx.dir_ = self._input.LT(1) _la = self._input.LA(1) - if not(_la==11 or _la==62): + if not(_la==11 or _la==63): localctx.dir_ = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6159,7 +6162,7 @@ def orderSortSpec(self): self.state = 747 localctx.nulls = self._input.LT(1) _la = self._input.LA(1) - if not(_la==90 or _la==123): + if not(_la==91 or _la==124): localctx.nulls = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6240,7 +6243,7 @@ def groupClause(self): self.state = 752 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==158: + if _la==159: self.state = 751 self.match(PartiQLParser.PARTIAL) @@ -6461,7 +6464,7 @@ def over(self): self.state = 778 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==233: + if _la==234: self.state = 777 self.windowPartitionList() @@ -6469,7 +6472,7 @@ def over(self): self.state = 781 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==152: + if _la==153: self.state = 780 self.windowSortSpecList() @@ -6547,7 +6550,7 @@ def windowPartitionList(self): self.state = 792 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 788 self.match(PartiQLParser.COMMA) self.state = 789 @@ -6627,7 +6630,7 @@ def windowSortSpecList(self): self.state = 802 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 798 self.match(PartiQLParser.COMMA) self.state = 799 @@ -6756,7 +6759,7 @@ def excludeClause(self): self.state = 814 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 810 self.match(PartiQLParser.COMMA) self.state = 811 @@ -6830,7 +6833,7 @@ def excludeExpr(self): self.state = 821 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==290 or _la==299): + if not (_la==291 or _la==300): break except RecognitionException as re: @@ -7399,7 +7402,7 @@ def gpmlPatternList(self): self.state = 856 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==4 or _la==8 or _la==186: + if _la==4 or _la==8 or _la==187: self.state = 855 localctx.selector = self.matchSelector() @@ -7409,7 +7412,7 @@ def gpmlPatternList(self): self.state = 863 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 859 self.match(PartiQLParser.COMMA) self.state = 860 @@ -7918,7 +7921,7 @@ def node(self): self.state = 903 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==303 or _la==304: + if _la==304 or _la==305: self.state = 902 self.symbolPrimitive() @@ -7926,7 +7929,7 @@ def node(self): self.state = 907 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==296: + if _la==297: self.state = 905 self.match(PartiQLParser.COLON) self.state = 906 @@ -7936,7 +7939,7 @@ def node(self): self.state = 910 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==225: + if _la==226: self.state = 909 self.whereClause() @@ -8151,7 +8154,7 @@ def pattern(self): self.state = 962 self._errHandler.sync(self) token = self._input.LA(1) - if token in [294]: + if token in [295]: self.enterOuterAlt(localctx, 1) self.state = 924 self.match(PartiQLParser.PAREN_LEFT) @@ -8166,7 +8169,7 @@ def pattern(self): self.state = 929 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==303 or _la==304: + if _la==304 or _la==305: self.state = 928 localctx.variable = self.patternPathVariable() @@ -8180,13 +8183,13 @@ def pattern(self): self.state = 934 self._errHandler.sync(self) _la = self._input.LA(1) - if not (((((_la - 272)) & ~0x3f) == 0 and ((1 << (_la - 272)) & 4472849) != 0)): + if not (((((_la - 273)) & ~0x3f) == 0 and ((1 << (_la - 273)) & 4472849) != 0)): break self.state = 937 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==225: + if _la==226: self.state = 936 localctx.where = self.whereClause() @@ -8202,7 +8205,7 @@ def pattern(self): pass - elif token in [290]: + elif token in [291]: self.enterOuterAlt(localctx, 2) self.state = 943 self.match(PartiQLParser.BRACKET_LEFT) @@ -8217,7 +8220,7 @@ def pattern(self): self.state = 948 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==303 or _la==304: + if _la==304 or _la==305: self.state = 947 localctx.variable = self.patternPathVariable() @@ -8231,13 +8234,13 @@ def pattern(self): self.state = 953 self._errHandler.sync(self) _la = self._input.LA(1) - if not (((((_la - 272)) & ~0x3f) == 0 and ((1 << (_la - 272)) & 4472849) != 0)): + if not (((((_la - 273)) & ~0x3f) == 0 and ((1 << (_la - 273)) & 4472849) != 0)): break self.state = 956 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==225: + if _la==226: self.state = 955 localctx.where = self.whereClause() @@ -8325,18 +8328,18 @@ def patternQuantifier(self): self.state = 972 self._errHandler.sync(self) token = self._input.LA(1) - if token in [271, 277]: + if token in [272, 278]: self.enterOuterAlt(localctx, 1) self.state = 964 localctx.quant = self._input.LT(1) _la = self._input.LA(1) - if not(_la==271 or _la==277): + if not(_la==272 or _la==278): localctx.quant = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() pass - elif token in [292]: + elif token in [293]: self.enterOuterAlt(localctx, 2) self.state = 965 self.match(PartiQLParser.BRACE_LEFT) @@ -8347,7 +8350,7 @@ def patternQuantifier(self): self.state = 969 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==301: + if _la==302: self.state = 968 localctx.upper = self.match(PartiQLParser.LITERAL_INTEGER) @@ -8774,7 +8777,7 @@ def edgeSpec(self): self.state = 1012 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==303 or _la==304: + if _la==304 or _la==305: self.state = 1011 self.symbolPrimitive() @@ -8782,7 +8785,7 @@ def edgeSpec(self): self.state = 1016 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==296: + if _la==297: self.state = 1014 self.match(PartiQLParser.COLON) self.state = 1015 @@ -8792,7 +8795,7 @@ def edgeSpec(self): self.state = 1019 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==225: + if _la==226: self.state = 1018 self.whereClause() @@ -9124,7 +9127,7 @@ def labelFactor(self): self.state = 1048 self._errHandler.sync(self) token = self._input.LA(1) - if token in [280]: + if token in [281]: localctx = PartiQLParser.LabelFactorNotContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 1045 @@ -9132,7 +9135,7 @@ def labelFactor(self): self.state = 1046 self.labelPrimary() pass - elif token in [274, 294, 303, 304]: + elif token in [275, 295, 304, 305]: localctx = PartiQLParser.LabelFactorPrimaryContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 1047 @@ -9254,19 +9257,19 @@ def labelPrimary(self): self.state = 1056 self._errHandler.sync(self) token = self._input.LA(1) - if token in [303, 304]: + if token in [304, 305]: localctx = PartiQLParser.LabelPrimaryNameContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 1050 self.symbolPrimitive() pass - elif token in [274]: + elif token in [275]: localctx = PartiQLParser.LabelPrimaryWildContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 1051 self.match(PartiQLParser.PERCENT) pass - elif token in [294]: + elif token in [295]: localctx = PartiQLParser.LabelPrimaryParenContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 1052 @@ -9363,7 +9366,7 @@ def edgeAbbrev(self): self.state = 1064 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==286: + if _la==287: self.state = 1063 self.match(PartiQLParser.ANGLE_LEFT) @@ -9596,7 +9599,7 @@ def tableReference(self, _p:int=0): self.state = 1082 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & 144115188612734977) != 0) or _la==176: + if ((((_la - 97)) & ~0x3f) == 0 and ((1 << (_la - 97)) & 144115188612734977) != 0) or _la==177: self.state = 1081 self.joinType() @@ -9634,7 +9637,7 @@ def tableReference(self, _p:int=0): self.state = 1092 self._errHandler.sync(self) _la = self._input.LA(1) - if ((((_la - 96)) & ~0x3f) == 0 and ((1 << (_la - 96)) & 144115188612734977) != 0) or _la==176: + if ((((_la - 97)) & ~0x3f) == 0 and ((1 << (_la - 97)) & 144115188612734977) != 0) or _la==177: self.state = 1091 self.joinType() @@ -9704,12 +9707,12 @@ def tableNonJoin(self): self.state = 1105 self._errHandler.sync(self) token = self._input.LA(1) - if token in [8, 15, 19, 23, 24, 28, 29, 32, 44, 48, 51, 53, 75, 79, 82, 85, 86, 87, 88, 129, 131, 132, 140, 141, 143, 145, 156, 160, 182, 187, 189, 195, 196, 201, 202, 207, 208, 213, 219, 230, 231, 234, 235, 236, 237, 266, 267, 271, 272, 275, 288, 290, 292, 294, 298, 300, 301, 302, 303, 304, 309]: + if token in [8, 15, 19, 23, 24, 28, 29, 32, 44, 48, 51, 53, 54, 76, 80, 83, 86, 87, 88, 89, 130, 132, 133, 141, 142, 144, 146, 157, 161, 174, 183, 188, 190, 196, 197, 202, 203, 208, 209, 214, 220, 231, 232, 235, 236, 237, 238, 267, 268, 272, 273, 276, 289, 291, 293, 295, 299, 301, 302, 303, 304, 305, 310]: self.enterOuterAlt(localctx, 1) self.state = 1103 self.tableBaseReference() pass - elif token in [238]: + elif token in [239]: self.enterOuterAlt(localctx, 2) self.state = 1104 self.tableUnpivot() @@ -10234,51 +10237,51 @@ def joinType(self): self.state = 1167 self._errHandler.sync(self) token = self._input.LA(1) - if token in [109]: + if token in [110]: self.enterOuterAlt(localctx, 1) self.state = 1153 localctx.mod = self.match(PartiQLParser.INNER) pass - elif token in [125]: + elif token in [126]: self.enterOuterAlt(localctx, 2) self.state = 1154 localctx.mod = self.match(PartiQLParser.LEFT) self.state = 1156 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==153: + if _la==154: self.state = 1155 self.match(PartiQLParser.OUTER) pass - elif token in [176]: + elif token in [177]: self.enterOuterAlt(localctx, 3) self.state = 1158 localctx.mod = self.match(PartiQLParser.RIGHT) self.state = 1160 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==153: + if _la==154: self.state = 1159 self.match(PartiQLParser.OUTER) pass - elif token in [96]: + elif token in [97]: self.enterOuterAlt(localctx, 4) self.state = 1162 localctx.mod = self.match(PartiQLParser.FULL) self.state = 1164 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==153: + if _la==154: self.state = 1163 self.match(PartiQLParser.OUTER) pass - elif token in [153]: + elif token in [154]: self.enterOuterAlt(localctx, 5) self.state = 1166 localctx.mod = self.match(PartiQLParser.OUTER) @@ -10538,7 +10541,7 @@ def exprBagOp(self, _p:int=0): self.state = 1176 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==153: + if _la==154: self.state = 1175 self.match(PartiQLParser.OUTER) @@ -10548,10 +10551,10 @@ def exprBagOp(self, _p:int=0): self.state = 1180 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==4 or _la==67: + if _la==4 or _la==68: self.state = 1179 _la = self._input.LA(1) - if not(_la==4 or _la==67): + if not(_la==4 or _la==68): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -10573,7 +10576,7 @@ def exprBagOp(self, _p:int=0): self.state = 1185 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==153: + if _la==154: self.state = 1184 self.match(PartiQLParser.OUTER) @@ -10583,10 +10586,10 @@ def exprBagOp(self, _p:int=0): self.state = 1189 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==4 or _la==67: + if _la==4 or _la==68: self.state = 1188 _la = self._input.LA(1) - if not(_la==4 or _la==67): + if not(_la==4 or _la==68): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -10608,7 +10611,7 @@ def exprBagOp(self, _p:int=0): self.state = 1194 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==153: + if _la==154: self.state = 1193 self.match(PartiQLParser.OUTER) @@ -10618,10 +10621,10 @@ def exprBagOp(self, _p:int=0): self.state = 1198 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==4 or _la==67: + if _la==4 or _la==68: self.state = 1197 _la = self._input.LA(1) - if not(_la==4 or _la==67): + if not(_la==4 or _la==68): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -10760,7 +10763,7 @@ def exprSelect(self): self.state = 1233 self._errHandler.sync(self) token = self._input.LA(1) - if token in [182, 237]: + if token in [183, 238]: localctx = PartiQLParser.SfwQueryContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 1206 @@ -10768,7 +10771,7 @@ def exprSelect(self): self.state = 1208 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==78: + if _la==79: self.state = 1207 localctx.exclude = self.excludeClause() @@ -10832,7 +10835,7 @@ def exprSelect(self): pass - elif token in [8, 15, 19, 23, 24, 28, 29, 32, 44, 48, 51, 53, 75, 79, 82, 85, 86, 87, 88, 129, 131, 132, 140, 141, 143, 145, 156, 160, 187, 189, 195, 196, 201, 202, 207, 208, 213, 219, 230, 231, 234, 235, 236, 266, 267, 271, 272, 275, 288, 290, 292, 294, 298, 300, 301, 302, 303, 304, 309]: + elif token in [8, 15, 19, 23, 24, 28, 29, 32, 44, 48, 51, 53, 54, 76, 80, 83, 86, 87, 88, 89, 130, 132, 133, 141, 142, 144, 146, 157, 161, 174, 188, 190, 196, 197, 202, 203, 208, 209, 214, 220, 231, 232, 235, 236, 237, 267, 268, 272, 273, 276, 289, 291, 293, 295, 299, 301, 302, 303, 304, 305, 310]: localctx = PartiQLParser.SfwBaseContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 1232 @@ -11178,7 +11181,7 @@ def exprNot(self): self.state = 1260 self._errHandler.sync(self) token = self._input.LA(1) - if token in [140]: + if token in [141]: localctx = PartiQLParser.NotContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 1257 @@ -11186,7 +11189,7 @@ def exprNot(self): self.state = 1258 localctx.rhs = self.exprNot() pass - elif token in [8, 15, 19, 23, 24, 28, 29, 32, 44, 48, 51, 53, 75, 79, 82, 85, 86, 87, 88, 129, 131, 132, 141, 143, 145, 156, 160, 187, 189, 195, 196, 201, 202, 207, 208, 213, 219, 230, 231, 234, 235, 236, 266, 267, 271, 272, 275, 288, 290, 292, 294, 298, 300, 301, 302, 303, 304, 309]: + elif token in [8, 15, 19, 23, 24, 28, 29, 32, 44, 48, 51, 53, 54, 76, 80, 83, 86, 87, 88, 89, 130, 132, 133, 142, 144, 146, 157, 161, 174, 188, 190, 196, 197, 202, 203, 208, 209, 214, 220, 231, 232, 235, 236, 237, 267, 268, 272, 273, 276, 289, 291, 293, 295, 299, 301, 302, 303, 304, 305, 310]: localctx = PartiQLParser.ExprNotBaseContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 1259 @@ -11483,7 +11486,7 @@ def exprPredicate(self, _p:int=0): self.state = 1266 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & 111) != 0)): + if not(((((_la - 282)) & ~0x3f) == 0 and ((1 << (_la - 282)) & 111) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -11505,7 +11508,7 @@ def exprPredicate(self, _p:int=0): self.state = 1271 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==140: + if _la==141: self.state = 1270 self.match(PartiQLParser.NOT) @@ -11525,7 +11528,7 @@ def exprPredicate(self, _p:int=0): self.state = 1276 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==140: + if _la==141: self.state = 1275 self.match(PartiQLParser.NOT) @@ -11551,7 +11554,7 @@ def exprPredicate(self, _p:int=0): self.state = 1285 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==140: + if _la==141: self.state = 1284 self.match(PartiQLParser.NOT) @@ -11573,7 +11576,7 @@ def exprPredicate(self, _p:int=0): self.state = 1291 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==140: + if _la==141: self.state = 1290 self.match(PartiQLParser.NOT) @@ -11605,7 +11608,7 @@ def exprPredicate(self, _p:int=0): self.state = 1301 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==140: + if _la==141: self.state = 1300 self.match(PartiQLParser.NOT) @@ -11709,7 +11712,7 @@ def mathOp00(self, _p:int=0): self.state = 1317 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==279 or _la==285): + if not(_la==280 or _la==286): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -11804,7 +11807,7 @@ def mathOp01(self, _p:int=0): self.state = 1328 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(_la==271 or _la==272): + if not(_la==272 or _la==273): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -11902,7 +11905,7 @@ def mathOp02(self, _p:int=0): self.state = 1339 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(((((_la - 273)) & ~0x3f) == 0 and ((1 << (_la - 273)) & 19) != 0)): + if not(((((_la - 274)) & ~0x3f) == 0 and ((1 << (_la - 274)) & 19) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -11975,12 +11978,12 @@ def valueExpr(self): self.state = 1349 self._errHandler.sync(self) token = self._input.LA(1) - if token in [271, 272]: + if token in [272, 273]: self.enterOuterAlt(localctx, 1) self.state = 1346 localctx.sign = self._input.LT(1) _la = self._input.LA(1) - if not(_la==271 or _la==272): + if not(_la==272 or _la==273): localctx.sign = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -11988,7 +11991,7 @@ def valueExpr(self): self.state = 1347 localctx.rhs = self.valueExpr() pass - elif token in [8, 15, 19, 23, 24, 28, 29, 32, 44, 48, 51, 53, 75, 79, 82, 85, 86, 87, 88, 129, 131, 132, 141, 143, 145, 156, 160, 187, 189, 195, 196, 201, 202, 207, 208, 213, 219, 230, 231, 234, 235, 236, 266, 267, 275, 288, 290, 292, 294, 298, 300, 301, 302, 303, 304, 309]: + elif token in [8, 15, 19, 23, 24, 28, 29, 32, 44, 48, 51, 53, 54, 76, 80, 83, 86, 87, 88, 89, 130, 132, 133, 142, 144, 146, 157, 161, 174, 188, 190, 196, 197, 202, 203, 208, 209, 214, 220, 231, 232, 235, 236, 237, 267, 268, 276, 289, 291, 293, 295, 299, 301, 302, 303, 304, 305, 310]: self.enterOuterAlt(localctx, 2) self.state = 1348 localctx.parent_ = self.exprPrimary(0) @@ -12491,7 +12494,7 @@ def exprTerm(self): self.state = 1396 self._errHandler.sync(self) token = self._input.LA(1) - if token in [294]: + if token in [295]: localctx = PartiQLParser.ExprTermWrappedQueryContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 1385 @@ -12513,31 +12516,31 @@ def exprTerm(self): self.state = 1390 self.match(PartiQLParser.CURRENT_DATE) pass - elif token in [298]: + elif token in [299]: localctx = PartiQLParser.ExprTermBaseContext(self, localctx) self.enterOuterAlt(localctx, 4) self.state = 1391 self.parameter() pass - elif token in [79, 275, 303, 304]: + elif token in [80, 276, 304, 305]: localctx = PartiQLParser.ExprTermBaseContext(self, localctx) self.enterOuterAlt(localctx, 5) self.state = 1392 self.varRefExpr() pass - elif token in [53, 88, 141, 201, 202, 208, 236, 300, 301, 302, 309]: + elif token in [53, 89, 142, 202, 203, 209, 237, 301, 302, 303, 310]: localctx = PartiQLParser.ExprTermBaseContext(self, localctx) self.enterOuterAlt(localctx, 6) self.state = 1393 self.literal() pass - elif token in [288, 290]: + elif token in [289, 291]: localctx = PartiQLParser.ExprTermBaseContext(self, localctx) self.enterOuterAlt(localctx, 7) self.state = 1394 self.collection() pass - elif token in [292]: + elif token in [293]: localctx = PartiQLParser.ExprTermBaseContext(self, localctx) self.enterOuterAlt(localctx, 8) self.state = 1395 @@ -12693,7 +12696,7 @@ def coalesce(self): self.state = 1412 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 1408 self.match(PartiQLParser.COMMA) self.state = 1409 @@ -12785,7 +12788,7 @@ def caseExpr(self): self.state = 1419 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 11558071357178112) != 0) or ((((_la - 75)) & ~0x3f) == 0 and ((1 << (_la - 75)) & 234187180623281297) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 7026323504187375659) != 0) or ((((_la - 207)) & ~0x3f) == 0 and ((1 << (_la - 207)) & 1729382258948706371) != 0) or ((((_la - 271)) & ~0x3f) == 0 and ((1 << (_la - 271)) & 291666264083) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 29572469866660096) != 0) or ((((_la - 76)) & ~0x3f) == 0 and ((1 << (_la - 76)) & 234187180623281297) != 0) or ((((_la - 141)) & ~0x3f) == 0 and ((1 << (_la - 141)) & 7026323512777310251) != 0) or ((((_la - 208)) & ~0x3f) == 0 and ((1 << (_la - 208)) & 1729382258948706371) != 0) or ((((_la - 272)) & ~0x3f) == 0 and ((1 << (_la - 272)) & 291666264083) != 0): self.state = 1418 localctx.case = self.expr() @@ -12807,13 +12810,13 @@ def caseExpr(self): self.state = 1428 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==223): + if not (_la==224): break self.state = 1432 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==71: + if _la==72: self.state = 1430 self.match(PartiQLParser.ELSE) self.state = 1431 @@ -12966,7 +12969,7 @@ def valueRow(self): self.state = 1451 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 1447 self.match(PartiQLParser.COMMA) self.state = 1448 @@ -13054,7 +13057,7 @@ def valueList(self): self.state = 1462 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==270): + if not (_la==271): break self.state = 1464 @@ -13131,7 +13134,7 @@ def sequenceConstructor(self): self.state = 1466 localctx.datatype = self._input.LT(1) _la = self._input.LA(1) - if not(_la==266 or _la==267): + if not(_la==267 or _la==268): localctx.datatype = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -13141,13 +13144,13 @@ def sequenceConstructor(self): self.state = 1476 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 11558071357178112) != 0) or ((((_la - 75)) & ~0x3f) == 0 and ((1 << (_la - 75)) & 234187180623281297) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 7026323504187375659) != 0) or ((((_la - 207)) & ~0x3f) == 0 and ((1 << (_la - 207)) & 1729382258948706371) != 0) or ((((_la - 271)) & ~0x3f) == 0 and ((1 << (_la - 271)) & 291666264083) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 29572469866660096) != 0) or ((((_la - 76)) & ~0x3f) == 0 and ((1 << (_la - 76)) & 234187180623281297) != 0) or ((((_la - 141)) & ~0x3f) == 0 and ((1 << (_la - 141)) & 7026323512777310251) != 0) or ((((_la - 208)) & ~0x3f) == 0 and ((1 << (_la - 208)) & 1729382258948706371) != 0) or ((((_la - 272)) & ~0x3f) == 0 and ((1 << (_la - 272)) & 291666264083) != 0): self.state = 1468 self.expr() self.state = 1473 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 1469 self.match(PartiQLParser.COMMA) self.state = 1470 @@ -13244,7 +13247,7 @@ def substring(self): self.state = 1489 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==270: + if _la==271: self.state = 1483 self.match(PartiQLParser.COMMA) self.state = 1484 @@ -13252,7 +13255,7 @@ def substring(self): self.state = 1487 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==270: + if _la==271: self.state = 1485 self.match(PartiQLParser.COMMA) self.state = 1486 @@ -13276,7 +13279,7 @@ def substring(self): self.state = 1502 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==95: + if _la==96: self.state = 1496 self.match(PartiQLParser.FROM) self.state = 1497 @@ -13284,7 +13287,7 @@ def substring(self): self.state = 1500 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==92: + if _la==93: self.state = 1498 self.match(PartiQLParser.FOR) self.state = 1499 @@ -13492,7 +13495,7 @@ def overlay(self): self.state = 1533 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==270: + if _la==271: self.state = 1531 self.match(PartiQLParser.COMMA) self.state = 1532 @@ -13522,7 +13525,7 @@ def overlay(self): self.state = 1546 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==92: + if _la==93: self.state = 1544 self.match(PartiQLParser.FOR) self.state = 1545 @@ -13669,7 +13672,7 @@ def aggregate(self): self.state = 1556 localctx.func = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 17592186077440) != 0) or ((((_la - 75)) & ~0x3f) == 0 and ((1 << (_la - 75)) & 216172782113783809) != 0) or _la==189 or _la==196): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 17592186077440) != 0) or ((((_la - 76)) & ~0x3f) == 0 and ((1 << (_la - 76)) & 216172782113783809) != 0) or _la==190 or _la==197): localctx.func = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -13679,7 +13682,7 @@ def aggregate(self): self.state = 1559 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==4 or _la==67: + if _la==4 or _la==68: self.state = 1558 self.setQuantifierStrategy() @@ -13774,7 +13777,7 @@ def windowFunction(self): self.state = 1566 localctx.func = self._input.LT(1) _la = self._input.LA(1) - if not(_la==230 or _la==231): + if not(_la==231 or _la==232): localctx.func = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -13786,7 +13789,7 @@ def windowFunction(self): self.state = 1575 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==270: + if _la==271: self.state = 1569 self.match(PartiQLParser.COMMA) self.state = 1570 @@ -13794,7 +13797,7 @@ def windowFunction(self): self.state = 1573 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==270: + if _la==271: self.state = 1571 self.match(PartiQLParser.COMMA) self.state = 1572 @@ -14191,7 +14194,7 @@ def trimFunction(self): self.state = 1614 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 11558071357178112) != 0) or ((((_la - 75)) & ~0x3f) == 0 and ((1 << (_la - 75)) & 234187180623281297) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 7026323504187375659) != 0) or ((((_la - 207)) & ~0x3f) == 0 and ((1 << (_la - 207)) & 1729382258948706371) != 0) or ((((_la - 271)) & ~0x3f) == 0 and ((1 << (_la - 271)) & 291666264083) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 29572469866660096) != 0) or ((((_la - 76)) & ~0x3f) == 0 and ((1 << (_la - 76)) & 234187180623281297) != 0) or ((((_la - 141)) & ~0x3f) == 0 and ((1 << (_la - 141)) & 7026323512777310251) != 0) or ((((_la - 208)) & ~0x3f) == 0 and ((1 << (_la - 208)) & 1729382258948706371) != 0) or ((((_la - 272)) & ~0x3f) == 0 and ((1 << (_la - 272)) & 291666264083) != 0): self.state = 1613 localctx.sub = self.expr() @@ -14280,7 +14283,7 @@ def dateFunction(self): self.state = 1622 localctx.func = self._input.LT(1) _la = self._input.LA(1) - if not(_la==86 or _la==87): + if not(_la==87 or _la==88): localctx.func = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -14372,13 +14375,13 @@ def functionCall(self): self.state = 1641 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 11558071357178112) != 0) or ((((_la - 75)) & ~0x3f) == 0 and ((1 << (_la - 75)) & 234187180623281297) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 7026323504187375659) != 0) or ((((_la - 207)) & ~0x3f) == 0 and ((1 << (_la - 207)) & 1729382258948706371) != 0) or ((((_la - 271)) & ~0x3f) == 0 and ((1 << (_la - 271)) & 291666264083) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 29572469866660096) != 0) or ((((_la - 76)) & ~0x3f) == 0 and ((1 << (_la - 76)) & 234187180623281297) != 0) or ((((_la - 141)) & ~0x3f) == 0 and ((1 << (_la - 141)) & 7026323512777310251) != 0) or ((((_la - 208)) & ~0x3f) == 0 and ((1 << (_la - 208)) & 1729382258948706371) != 0) or ((((_la - 272)) & ~0x3f) == 0 and ((1 << (_la - 272)) & 291666264083) != 0): self.state = 1633 self.expr() self.state = 1638 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 1634 self.match(PartiQLParser.COMMA) self.state = 1635 @@ -14480,6 +14483,16 @@ def EXISTS(self): return self.getToken(PartiQLParser.EXISTS, 0) def COUNT(self): return self.getToken(PartiQLParser.COUNT, 0) + def DATE(self): + return self.getToken(PartiQLParser.DATE, 0) + def DATETIME(self): + return self.getToken(PartiQLParser.DATETIME, 0) + def SUBSTRING(self): + return self.getToken(PartiQLParser.SUBSTRING, 0) + def REPLACE(self): + return self.getToken(PartiQLParser.REPLACE, 0) + def TRIM(self): + return self.getToken(PartiQLParser.TRIM, 0) def PERIOD(self, i:int=None): if i is None: return self.getTokens(PartiQLParser.PERIOD) @@ -14523,7 +14536,7 @@ def functionName(self): self.state = 1650 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==303 or _la==304: + while _la==304 or _la==305: self.state = 1645 localctx._symbolPrimitive = self.symbolPrimitive() localctx.qualifier.append(localctx._symbolPrimitive) @@ -14536,7 +14549,7 @@ def functionName(self): self.state = 1653 localctx.name = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 17592991875072) != 0) or ((((_la - 82)) & ~0x3f) == 0 and ((1 << (_la - 82)) & -9223231299366420479) != 0) or _la==187 or _la==213): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 27039190756098048) != 0) or ((((_la - 83)) & ~0x3f) == 0 and ((1 << (_la - 83)) & -9223231299366420479) != 0) or ((((_la - 174)) & ~0x3f) == 0 and ((1 << (_la - 174)) & 1116695707649) != 0)): localctx.name = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -15031,7 +15044,7 @@ def varRefExpr(self): self.state = 1691 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==275: + if _la==276: self.state = 1690 localctx.qualifier = self.match(PartiQLParser.AT_SIGN) @@ -15039,7 +15052,7 @@ def varRefExpr(self): self.state = 1693 localctx.ident = self._input.LT(1) _la = self._input.LA(1) - if not(_la==303 or _la==304): + if not(_la==304 or _la==305): localctx.ident = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -15052,7 +15065,7 @@ def varRefExpr(self): self.state = 1695 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==275: + if _la==276: self.state = 1694 localctx.qualifier = self.match(PartiQLParser.AT_SIGN) @@ -15161,12 +15174,12 @@ def collection(self): self.state = 1704 self._errHandler.sync(self) token = self._input.LA(1) - if token in [290]: + if token in [291]: self.enterOuterAlt(localctx, 1) self.state = 1702 self.array() pass - elif token in [288]: + elif token in [289]: self.enterOuterAlt(localctx, 2) self.state = 1703 self.bag() @@ -15241,13 +15254,13 @@ def array(self): self.state = 1715 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 11558071357178112) != 0) or ((((_la - 75)) & ~0x3f) == 0 and ((1 << (_la - 75)) & 234187180623281297) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 7026323504187375659) != 0) or ((((_la - 207)) & ~0x3f) == 0 and ((1 << (_la - 207)) & 1729382258948706371) != 0) or ((((_la - 271)) & ~0x3f) == 0 and ((1 << (_la - 271)) & 291666264083) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 29572469866660096) != 0) or ((((_la - 76)) & ~0x3f) == 0 and ((1 << (_la - 76)) & 234187180623281297) != 0) or ((((_la - 141)) & ~0x3f) == 0 and ((1 << (_la - 141)) & 7026323512777310251) != 0) or ((((_la - 208)) & ~0x3f) == 0 and ((1 << (_la - 208)) & 1729382258948706371) != 0) or ((((_la - 272)) & ~0x3f) == 0 and ((1 << (_la - 272)) & 291666264083) != 0): self.state = 1707 self.expr() self.state = 1712 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 1708 self.match(PartiQLParser.COMMA) self.state = 1709 @@ -15327,13 +15340,13 @@ def bag(self): self.state = 1728 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 11558071357178112) != 0) or ((((_la - 75)) & ~0x3f) == 0 and ((1 << (_la - 75)) & 234187180623281297) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 7026323504187375659) != 0) or ((((_la - 207)) & ~0x3f) == 0 and ((1 << (_la - 207)) & 1729382258948706371) != 0) or ((((_la - 271)) & ~0x3f) == 0 and ((1 << (_la - 271)) & 291666264083) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 29572469866660096) != 0) or ((((_la - 76)) & ~0x3f) == 0 and ((1 << (_la - 76)) & 234187180623281297) != 0) or ((((_la - 141)) & ~0x3f) == 0 and ((1 << (_la - 141)) & 7026323512777310251) != 0) or ((((_la - 208)) & ~0x3f) == 0 and ((1 << (_la - 208)) & 1729382258948706371) != 0) or ((((_la - 272)) & ~0x3f) == 0 and ((1 << (_la - 272)) & 291666264083) != 0): self.state = 1720 self.expr() self.state = 1725 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 1721 self.match(PartiQLParser.COMMA) self.state = 1722 @@ -15413,13 +15426,13 @@ def tuple_(self): self.state = 1741 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 11558071357178112) != 0) or ((((_la - 75)) & ~0x3f) == 0 and ((1 << (_la - 75)) & 234187180623281297) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 7026323504187375659) != 0) or ((((_la - 207)) & ~0x3f) == 0 and ((1 << (_la - 207)) & 1729382258948706371) != 0) or ((((_la - 271)) & ~0x3f) == 0 and ((1 << (_la - 271)) & 291666264083) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 29572469866660096) != 0) or ((((_la - 76)) & ~0x3f) == 0 and ((1 << (_la - 76)) & 234187180623281297) != 0) or ((((_la - 141)) & ~0x3f) == 0 and ((1 << (_la - 141)) & 7026323512777310251) != 0) or ((((_la - 208)) & ~0x3f) == 0 and ((1 << (_la - 208)) & 1729382258948706371) != 0) or ((((_la - 272)) & ~0x3f) == 0 and ((1 << (_la - 272)) & 291666264083) != 0): self.state = 1733 self.pair() self.state = 1738 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==270: + while _la==271: self.state = 1734 self.match(PartiQLParser.COMMA) self.state = 1735 @@ -15823,49 +15836,49 @@ def literal(self): self.state = 1783 self._errHandler.sync(self) token = self._input.LA(1) - if token in [141]: + if token in [142]: localctx = PartiQLParser.LiteralNullContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 1749 self.match(PartiQLParser.NULL) pass - elif token in [236]: + elif token in [237]: localctx = PartiQLParser.LiteralMissingContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 1750 self.match(PartiQLParser.MISSING) pass - elif token in [208]: + elif token in [209]: localctx = PartiQLParser.LiteralTrueContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 1751 self.match(PartiQLParser.TRUE) pass - elif token in [88]: + elif token in [89]: localctx = PartiQLParser.LiteralFalseContext(self, localctx) self.enterOuterAlt(localctx, 4) self.state = 1752 self.match(PartiQLParser.FALSE) pass - elif token in [300]: + elif token in [301]: localctx = PartiQLParser.LiteralStringContext(self, localctx) self.enterOuterAlt(localctx, 5) self.state = 1753 self.match(PartiQLParser.LITERAL_STRING) pass - elif token in [301]: + elif token in [302]: localctx = PartiQLParser.LiteralIntegerContext(self, localctx) self.enterOuterAlt(localctx, 6) self.state = 1754 self.match(PartiQLParser.LITERAL_INTEGER) pass - elif token in [302]: + elif token in [303]: localctx = PartiQLParser.LiteralDecimalContext(self, localctx) self.enterOuterAlt(localctx, 7) self.state = 1755 self.match(PartiQLParser.LITERAL_DECIMAL) pass - elif token in [309]: + elif token in [310]: localctx = PartiQLParser.LiteralIonContext(self, localctx) self.enterOuterAlt(localctx, 8) self.state = 1756 @@ -15879,7 +15892,7 @@ def literal(self): self.state = 1758 self.match(PartiQLParser.LITERAL_STRING) pass - elif token in [201]: + elif token in [202]: localctx = PartiQLParser.LiteralTimeContext(self, localctx) self.enterOuterAlt(localctx, 10) self.state = 1759 @@ -15887,7 +15900,7 @@ def literal(self): self.state = 1763 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==294: + if _la==295: self.state = 1760 self.match(PartiQLParser.PAREN_LEFT) self.state = 1761 @@ -15899,7 +15912,7 @@ def literal(self): self.state = 1768 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==226: + if _la==227: self.state = 1765 self.match(PartiQLParser.WITH) self.state = 1766 @@ -15911,7 +15924,7 @@ def literal(self): self.state = 1770 self.match(PartiQLParser.LITERAL_STRING) pass - elif token in [202]: + elif token in [203]: localctx = PartiQLParser.LiteralTimestampContext(self, localctx) self.enterOuterAlt(localctx, 11) self.state = 1771 @@ -15919,7 +15932,7 @@ def literal(self): self.state = 1775 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==294: + if _la==295: self.state = 1772 self.match(PartiQLParser.PAREN_LEFT) self.state = 1773 @@ -15931,7 +15944,7 @@ def literal(self): self.state = 1780 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==226: + if _la==227: self.state = 1777 self.match(PartiQLParser.WITH) self.state = 1778 @@ -16250,7 +16263,7 @@ def type_(self): self.state = 1785 localctx.datatype = self._input.LT(1) _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 9007199456067840) != 0) or ((((_la - 113)) & ~0x3f) == 0 and ((1 << (_la - 113)) & 144115188344291331) != 0) or ((((_la - 188)) & ~0x3f) == 0 and ((1 << (_la - 188)) & -9223090561878065151) != 0) or ((((_la - 252)) & ~0x3f) == 0 and ((1 << (_la - 252)) & 131071) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 9007199456067840) != 0) or ((((_la - 114)) & ~0x3f) == 0 and ((1 << (_la - 114)) & 144115188344291331) != 0) or ((((_la - 189)) & ~0x3f) == 0 and ((1 << (_la - 189)) & -9223090561878065151) != 0) or ((((_la - 253)) & ~0x3f) == 0 and ((1 << (_la - 253)) & 131071) != 0)): localctx.datatype = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -16272,7 +16285,7 @@ def type_(self): self.state = 1788 localctx.datatype = self._input.LT(1) _la = self._input.LA(1) - if not(_la==26 or _la==27 or _la==91 or _la==220): + if not(_la==26 or _la==27 or _la==92 or _la==221): localctx.datatype = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -16318,7 +16331,7 @@ def type_(self): self.state = 1801 localctx.datatype = self._input.LT(1) _la = self._input.LA(1) - if not(_la==55 or _la==56 or _la==144): + if not(_la==56 or _la==57 or _la==145): localctx.datatype = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -16334,7 +16347,7 @@ def type_(self): self.state = 1806 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==270: + if _la==271: self.state = 1804 self.match(PartiQLParser.COMMA) self.state = 1805 @@ -16353,7 +16366,7 @@ def type_(self): self.state = 1811 localctx.datatype = self._input.LT(1) _la = self._input.LA(1) - if not(_la==201 or _la==202): + if not(_la==202 or _la==203): localctx.datatype = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) diff --git a/pymongosql/sql/partiql/PartiQLParserListener.py b/pymongosql/sql/partiql/PartiQLParserListener.py index 2933b85..0822286 100644 --- a/pymongosql/sql/partiql/PartiQLParserListener.py +++ b/pymongosql/sql/partiql/PartiQLParserListener.py @@ -1,4 +1,4 @@ -# Generated from PartiQLParser.g4 by ANTLR 4.13.0 +# Generated from PartiQLParser.g4 by ANTLR 4.13.1 from antlr4 import * if "." in __name__: from .PartiQLParser import PartiQLParser diff --git a/pymongosql/sql/partiql/PartiQLParserVisitor.py b/pymongosql/sql/partiql/PartiQLParserVisitor.py index 772d3ea..363c054 100644 --- a/pymongosql/sql/partiql/PartiQLParserVisitor.py +++ b/pymongosql/sql/partiql/PartiQLParserVisitor.py @@ -1,4 +1,4 @@ -# Generated from PartiQLParser.g4 by ANTLR 4.13.0 +# Generated from PartiQLParser.g4 by ANTLR 4.13.1 from antlr4 import * if "." in __name__: from .PartiQLParser import PartiQLParser diff --git a/pymongosql/sql/query_handler.py b/pymongosql/sql/query_handler.py index c5ae6e6..fe95e21 100644 --- a/pymongosql/sql/query_handler.py +++ b/pymongosql/sql/query_handler.py @@ -244,7 +244,8 @@ def handle_visitor(self, ctx: PartiQLParser.FromClauseContext, parse_result: "Qu # Regular collection reference table_text = ctx.tableReference().getText() - collection_name = table_text + # Strip surrounding quotes from collection name (e.g., "user.accounts" -> user.accounts) + collection_name = re.sub(r'^"([^"]+)"$', r"\1", table_text) parse_result.collection = collection_name _logger.debug(f"Parsed regular collection: {collection_name}") return collection_name diff --git a/tests/data/user-orders.json b/tests/data/user-orders.json new file mode 100644 index 0000000..949a817 --- /dev/null +++ b/tests/data/user-orders.json @@ -0,0 +1,167 @@ +[ + { + "_id": "uo1", + "user_id": "1", + "order_id": "ord1", + "order_priority": "normal", + "notification_sent": true, + "user_notes": "Regular customer - expedite if possible", + "relationship_created_at": {"$date": "2023-12-01T10:30:00Z"}, + "customer_type": "premium", + "follow_up_required": false + }, + { + "_id": "uo2", + "user_id": "2", + "order_id": "ord2", + "order_priority": "high", + "notification_sent": true, + "user_notes": "First time buyer", + "relationship_created_at": {"$date": "2023-12-10T14:22:00Z"}, + "customer_type": "standard", + "follow_up_required": true + }, + { + "_id": "uo3", + "user_id": "3", + "order_id": "ord3", + "order_priority": "urgent", + "notification_sent": true, + "user_notes": "VIP customer - priority handling", + "relationship_created_at": {"$date": "2023-11-25T09:15:00Z"}, + "customer_type": "vip", + "follow_up_required": false + }, + { + "_id": "uo4", + "user_id": "1", + "order_id": "ord15", + "order_priority": "normal", + "notification_sent": true, + "user_notes": "Repeat order", + "relationship_created_at": {"$date": "2023-12-20T11:45:00Z"}, + "customer_type": "premium", + "follow_up_required": false + }, + { + "_id": "uo5", + "user_id": "4", + "order_id": "ord4", + "order_priority": "normal", + "notification_sent": false, + "user_notes": null, + "relationship_created_at": {"$date": "2023-12-15T16:30:00Z"}, + "customer_type": "standard", + "follow_up_required": false + }, + { + "_id": "uo6", + "user_id": "5", + "order_id": "ord5", + "order_priority": "low", + "notification_sent": true, + "user_notes": "Seasonal customer", + "relationship_created_at": {"$date": "2023-12-18T08:20:00Z"}, + "customer_type": "standard", + "follow_up_required": true + }, + { + "_id": "uo7", + "user_id": "2", + "order_id": "ord20", + "order_priority": "high", + "notification_sent": true, + "user_notes": "Special packaging requested", + "relationship_created_at": {"$date": "2024-01-05T13:10:00Z"}, + "customer_type": "standard", + "follow_up_required": false + }, + { + "_id": "uo8", + "user_id": "3", + "order_id": "ord25", + "order_priority": "urgent", + "notification_sent": true, + "user_notes": "Rush delivery requested", + "relationship_created_at": {"$date": "2024-01-10T10:00:00Z"}, + "customer_type": "vip", + "follow_up_required": true + }, + { + "_id": "uo9", + "user_id": "6", + "order_id": "ord6", + "order_priority": "normal", + "notification_sent": true, + "user_notes": "Corporate account", + "relationship_created_at": {"$date": "2023-12-22T14:55:00Z"}, + "customer_type": "corporate", + "follow_up_required": false + }, + { + "_id": "uo10", + "user_id": "7", + "order_id": "ord7", + "order_priority": "normal", + "notification_sent": false, + "user_notes": "Email bounced - alternate contact needed", + "relationship_created_at": {"$date": "2023-12-28T09:30:00Z"}, + "customer_type": "standard", + "follow_up_required": true + }, + { + "_id": "uo11", + "user_id": "1", + "order_id": "ord30", + "order_priority": "high", + "notification_sent": true, + "user_notes": "Loyalty program member", + "relationship_created_at": {"$date": "2024-01-15T12:20:00Z"}, + "customer_type": "premium", + "follow_up_required": false + }, + { + "_id": "uo12", + "user_id": "8", + "order_id": "ord8", + "order_priority": "normal", + "notification_sent": true, + "user_notes": null, + "relationship_created_at": {"$date": "2024-01-02T15:40:00Z"}, + "customer_type": "standard", + "follow_up_required": false + }, + { + "_id": "uo13", + "user_id": "9", + "order_id": "ord9", + "order_priority": "low", + "notification_sent": true, + "user_notes": "International shipping", + "relationship_created_at": {"$date": "2024-01-08T11:15:00Z"}, + "customer_type": "standard", + "follow_up_required": true + }, + { + "_id": "uo14", + "user_id": "10", + "order_id": "ord10", + "order_priority": "urgent", + "notification_sent": true, + "user_notes": "Gift order - include gift message", + "relationship_created_at": {"$date": "2024-01-12T16:50:00Z"}, + "customer_type": "premium", + "follow_up_required": false + }, + { + "_id": "uo15", + "user_id": "3", + "order_id": "ord35", + "order_priority": "urgent", + "notification_sent": true, + "user_notes": "VIP - anniversary order", + "relationship_created_at": {"$date": "2024-01-20T10:30:00Z"}, + "customer_type": "vip", + "follow_up_required": false + } +] diff --git a/tests/run_test_server.py b/tests/run_test_server.py index ee50b24..31e23f8 100644 --- a/tests/run_test_server.py +++ b/tests/run_test_server.py @@ -263,8 +263,8 @@ def setup_test_data(): ) db = client[MONGODB_DATABASE] - # List of all collections to handle - collections = ["users", "products", "categories", "orders", "analytics", "departments", "suppliers"] + # Get all collections from loaded test data (dynamic, no hardcoding) + collections = list(test_data.keys()) # Clear existing data and insert new data for each collection for collection_name in collections: diff --git a/tests/server_config.json b/tests/server_config.json index b4b26ca..9a1288a 100644 --- a/tests/server_config.json +++ b/tests/server_config.json @@ -24,6 +24,7 @@ "orders": "data/orders.json", "analytics": "data/analytics.json", "departments": "data/departments.json", - "suppliers": "data/suppliers.json" + "suppliers": "data/suppliers.json", + "user-orders": "data/user-orders.json" } } \ No newline at end of file diff --git a/tests/test_cursor_aggregate.py b/tests/test_cursor_aggregate.py index 11165f0..b14b555 100644 --- a/tests/test_cursor_aggregate.py +++ b/tests/test_cursor_aggregate.py @@ -53,6 +53,48 @@ def test_aggregate_with_projection(self, conn): assert len(rows) > 0 assert len(rows[0]) == 2 # Should have 2 columns (name, age) + def test_aggregate_with_nested_projection(self, conn): + """Test aggregate with $project stage to validate nested structure projection (e.g., address.city)""" + pipeline = json.dumps( + [{"$match": {"active": True}}, {"$project": {"name": 1, "city": "$address.city", "age": 1}}] + ) + + sql = f""" + SELECT * + FROM users.aggregate('{pipeline}', '{{}}') + LIMIT 5 + """ + + cursor = conn.cursor() + result = cursor.execute(sql) + + assert result == cursor + assert isinstance(cursor.result_set, ResultSet) + + # Check description has correct columns including projected nested field + col_names = [desc[0] for desc in cursor.result_set.description] + assert "name" in col_names + assert "city" in col_names, "city field should be projected from address.city" + assert "age" in col_names + + rows = cursor.result_set.fetchall() + assert len(rows) > 0 + + # Verify that nested city values are correctly returned + city_idx = col_names.index("city") + name_idx = col_names.index("name") + age_idx = col_names.index("age") + + for row in rows: + city_value = row[city_idx] + # City should be a string value extracted from the nested address object + assert city_value is not None + assert isinstance(city_value, str) + assert len(city_value) > 0 + # Verify other fields are also present + assert row[name_idx] is not None + assert row[age_idx] is not None + def test_aggregate_with_where_clause(self, conn): """Test aggregate pipeline combined with WHERE clause for additional filtering""" sql = """ @@ -273,4 +315,15 @@ def test_aggregate_multiple_stages(self, conn): # Should have one row with aggregated stats assert len(rows) == 1 row = rows[0] - assert len(row) >= 2 # Should have average_age and total_users + + # Verify projections defined in pipeline appear in the result + col_names = [desc[0] for desc in cursor.result_set.description] + assert "average_age" in col_names, "average_age should be in result columns" + assert "total_users" in col_names, "total_users should be in result columns" + assert "_id" not in col_names, "_id should be excluded from result columns" + + # Verify the values are present and valid + avg_age_idx = col_names.index("average_age") + total_users_idx = col_names.index("total_users") + assert row[avg_age_idx] is not None and isinstance(row[avg_age_idx], (int, float)) + assert row[total_users_idx] is not None and isinstance(row[total_users_idx], (int, float)) diff --git a/tests/test_sql_parser_general.py b/tests/test_sql_parser_general.py index 2f390d6..8354bdf 100644 --- a/tests/test_sql_parser_general.py +++ b/tests/test_sql_parser_general.py @@ -433,3 +433,51 @@ def test_select_with_alias_and_where_clause(self): "age": "user_age", } assert execution_plan.filter_stage == {"status": "active"} + + @pytest.mark.parametrize( + "collection,sql,projection,filter_condition", + [ + # Hyphen (-) tests + ("user-accounts", "SELECT * FROM user-accounts", None, {}), + ( + "user-accounts", + "SELECT name, email FROM user-accounts WHERE status = 'active'", + {"name": 1, "email": 1}, + {"status": "active"}, + ), + # Period (.) tests + ("user.accounts", 'SELECT * FROM "user.accounts"', None, {}), + ( + "customer.orders", + 'SELECT name FROM "customer.orders" WHERE total > 100', + {"name": 1}, + {"total": {"$gt": 100}}, + ), + # Colon (:) tests + ("user:accounts", 'SELECT * FROM "user:accounts"', None, {}), + ( + "service:requests", + 'SELECT id, name FROM "service:requests" WHERE resolved = false', + {"id": 1, "name": 1}, + {"resolved": False}, + ), + # Multiple special characters test + ("user-account.data:prod", 'SELECT * FROM "user-account.data:prod"', None, {}), + ], + ) + def test_collection_name_with_special_characters(self, collection, sql, projection, filter_condition): + """Test SELECT with collection names containing special characters (-, ., :)""" + parser = SQLParser(sql) + + assert not parser.has_errors, f"Parser errors: {parser.errors}" + + execution_plan = parser.get_execution_plan() + assert execution_plan.collection == collection + + # For SELECT *, projection should be a dict (possibly empty or with just keys) + if projection is None: + assert isinstance(execution_plan.projection_stage, dict) + else: + assert execution_plan.projection_stage == projection + + assert execution_plan.filter_stage == filter_condition