From f3a28722eeba56c813f7392a597771d968d87ca1 Mon Sep 17 00:00:00 2001 From: Adrian Carpente Recouso Date: Thu, 18 Dec 2025 10:40:20 +0100 Subject: [PATCH] Add SQL Support for MERGE INTO In Presto #20578 (presto-ui) Rebuild the SqlBase files to add support for the MERGE command: $ antlr4 -Dlanguage=JavaScript -o . -Xexact-output-dir src/main/antlr4/com/facebook/presto/sql/parser/SqlBase.g4 --- presto-ui/src/sql-parser/SqlBase.interp | 55 +- presto-ui/src/sql-parser/SqlBase.tokens | 916 +- presto-ui/src/sql-parser/SqlBaseLexer.interp | 53 +- presto-ui/src/sql-parser/SqlBaseLexer.js | 2225 +- presto-ui/src/sql-parser/SqlBaseLexer.tokens | 914 +- presto-ui/src/sql-parser/SqlBaseListener.js | 299 +- presto-ui/src/sql-parser/SqlBaseParser.js | 21258 ++++++++++------- 7 files changed, 14858 insertions(+), 10862 deletions(-) diff --git a/presto-ui/src/sql-parser/SqlBase.interp b/presto-ui/src/sql-parser/SqlBase.interp index 4ebff088c2ae4..1a53a2ca5584f 100644 --- a/presto-ui/src/sql-parser/SqlBase.interp +++ b/presto-ui/src/sql-parser/SqlBase.interp @@ -20,8 +20,10 @@ null 'AS' 'ASC' 'AT' +'BEFORE' 'BERNOULLI' 'BETWEEN' +'BRANCH' 'BY' 'CALL' 'CALLED' @@ -36,6 +38,7 @@ null 'COMMITTED' 'CONSTRAINT' 'CREATE' +'COPARTITION' 'CROSS' 'CUBE' 'CURRENT' @@ -52,12 +55,17 @@ null 'DELETE' 'DESC' 'DESCRIBE' +'DESCRIPTOR' 'DETERMINISTIC' +'DISABLED' 'DISTINCT' 'DISTRIBUTED' 'DROP' 'ELSE' +'EMPTY' +'ENABLED' 'END' +'ENFORCED' 'ESCAPE' 'EXCEPT' 'EXCLUDING' @@ -102,6 +110,8 @@ null 'ISOLATION' 'JSON' 'JOIN' +'KEEP' +'KEY' 'LANGUAGE' 'LAST' 'LATERAL' @@ -113,7 +123,9 @@ null 'LOCALTIMESTAMP' 'LOGICAL' 'MAP' +'MATCHED' 'MATERIALIZED' +'MERGE' 'MINUTE' 'MONTH' 'NAME' @@ -145,12 +157,15 @@ null 'POSITION' 'PRECEDING' 'PREPARE' +'PRIMARY' 'PRIVILEGES' 'PROPERTIES' +'PRUNE' 'RANGE' 'READ' 'RECURSIVE' 'REFRESH' +'RELY' 'RENAME' 'REPEATABLE' 'REPLACE' @@ -188,6 +203,7 @@ null 'TABLE' 'TABLES' 'TABLESAMPLE' +'TAG' 'TEMPORARY' 'TEXT' 'THEN' @@ -203,6 +219,7 @@ null 'UNBOUNDED' 'UNCOMMITTED' 'UNION' +'UNIQUE' 'UNNEST' 'UPDATE' 'USE' @@ -273,8 +290,10 @@ ARRAY AS ASC AT +BEFORE BERNOULLI BETWEEN +BRANCH BY CALL CALLED @@ -289,6 +308,7 @@ COMMIT COMMITTED CONSTRAINT CREATE +COPARTITION CROSS CUBE CURRENT @@ -305,12 +325,17 @@ DEFINER DELETE DESC DESCRIBE +DESCRIPTOR DETERMINISTIC +DISABLED DISTINCT DISTRIBUTED DROP ELSE +EMPTY +ENABLED END +ENFORCED ESCAPE EXCEPT EXCLUDING @@ -355,6 +380,8 @@ IS ISOLATION JSON JOIN +KEEP +KEY LANGUAGE LAST LATERAL @@ -366,7 +393,9 @@ LOCALTIME LOCALTIMESTAMP LOGICAL MAP +MATCHED MATERIALIZED +MERGE MINUTE MONTH NAME @@ -398,12 +427,15 @@ PARTITIONS POSITION PRECEDING PREPARE +PRIMARY PRIVILEGES PROPERTIES +PRUNE RANGE READ RECURSIVE REFRESH +RELY RENAME REPEATABLE REPLACE @@ -441,6 +473,7 @@ SYSTEM_VERSION TABLE TABLES TABLESAMPLE +TAG TEMPORARY TEXT THEN @@ -456,6 +489,7 @@ UESCAPE UNBOUNDED UNCOMMITTED UNION +UNIQUE UNNEST UPDATE USE @@ -528,6 +562,7 @@ language determinism nullCallClause externalRoutineName +viewSecurity queryNoWith queryTerm queryPrimary @@ -563,10 +598,18 @@ intervalField normalForm types type +tableFunctionCall +tableFunctionArgument +tableArgument +tableArgumentRelation +descriptorArgument +descriptorField +copartitionTables typeParameter baseType whenClause filter +mergeCase over windowFrame frameBound @@ -578,13 +621,23 @@ callArgument privilege qualifiedName tableVersionExpression +tableVersionState grantor principal roles identifier number +constraintSpecification +namedConstraintSpecification +unnamedConstraintSpecification +constraintType +constraintQualifiers +constraintQualifier +constraintRely +constraintEnabled +constraintEnforced nonReserved atn: -[4, 1, 250, 1919, 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, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 181, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 186, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 192, 8, 3, 1, 3, 1, 3, 3, 3, 196, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 210, 8, 3, 1, 3, 1, 3, 3, 3, 214, 8, 3, 1, 3, 1, 3, 3, 3, 218, 8, 3, 1, 3, 1, 3, 3, 3, 222, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 230, 8, 3, 1, 3, 1, 3, 3, 3, 234, 8, 3, 1, 3, 3, 3, 237, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 244, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 251, 8, 3, 10, 3, 12, 3, 254, 9, 3, 1, 3, 1, 3, 1, 3, 3, 3, 259, 8, 3, 1, 3, 1, 3, 3, 3, 263, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 269, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 276, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 285, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 294, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 305, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 312, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 322, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 329, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 337, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 345, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 353, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 363, 8, 3, 10, 3, 12, 3, 366, 9, 3, 1, 3, 1, 3, 1, 3, 3, 3, 371, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 376, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 382, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 391, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 400, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 405, 8, 3, 1, 3, 1, 3, 3, 3, 409, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 417, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 424, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 437, 8, 3, 1, 3, 3, 3, 440, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 448, 8, 3, 10, 3, 12, 3, 451, 9, 3, 3, 3, 453, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 460, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 469, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 475, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 480, 8, 3, 1, 3, 1, 3, 3, 3, 484, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 492, 8, 3, 10, 3, 12, 3, 495, 9, 3, 3, 3, 497, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 507, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 518, 8, 3, 10, 3, 12, 3, 521, 9, 3, 1, 3, 1, 3, 1, 3, 3, 3, 526, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 531, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 537, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 544, 8, 3, 10, 3, 12, 3, 547, 9, 3, 1, 3, 1, 3, 1, 3, 3, 3, 552, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 559, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 565, 8, 3, 10, 3, 12, 3, 568, 9, 3, 1, 3, 1, 3, 3, 3, 572, 8, 3, 1, 3, 1, 3, 3, 3, 576, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 584, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 590, 8, 3, 1, 3, 1, 3, 1, 3, 5, 3, 595, 8, 3, 10, 3, 12, 3, 598, 9, 3, 1, 3, 1, 3, 3, 3, 602, 8, 3, 1, 3, 1, 3, 3, 3, 606, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 616, 8, 3, 1, 3, 3, 3, 619, 8, 3, 1, 3, 1, 3, 3, 3, 623, 8, 3, 1, 3, 3, 3, 626, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 632, 8, 3, 10, 3, 12, 3, 635, 9, 3, 1, 3, 1, 3, 3, 3, 639, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 660, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 666, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 672, 8, 3, 3, 3, 674, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 680, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 686, 8, 3, 3, 3, 688, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 696, 8, 3, 3, 3, 698, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 717, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 722, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 729, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 741, 8, 3, 3, 3, 743, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 751, 8, 3, 3, 3, 753, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 769, 8, 3, 10, 3, 12, 3, 772, 9, 3, 3, 3, 774, 8, 3, 1, 3, 1, 3, 3, 3, 778, 8, 3, 1, 3, 1, 3, 3, 3, 782, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 798, 8, 3, 10, 3, 12, 3, 801, 9, 3, 3, 3, 803, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 817, 8, 3, 10, 3, 12, 3, 820, 9, 3, 1, 3, 1, 3, 3, 3, 824, 8, 3, 3, 3, 826, 8, 3, 1, 4, 3, 4, 829, 8, 4, 1, 4, 1, 4, 1, 5, 1, 5, 3, 5, 835, 8, 5, 1, 5, 1, 5, 1, 5, 5, 5, 840, 8, 5, 10, 5, 12, 5, 843, 9, 5, 1, 6, 1, 6, 3, 6, 847, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 853, 8, 7, 1, 7, 1, 7, 3, 7, 857, 8, 7, 1, 7, 1, 7, 3, 7, 861, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 867, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 5, 9, 873, 8, 9, 10, 9, 12, 9, 876, 9, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 5, 12, 888, 8, 12, 10, 12, 12, 12, 891, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 897, 8, 13, 1, 14, 5, 14, 900, 8, 14, 10, 14, 12, 14, 903, 9, 14, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 909, 8, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 917, 8, 18, 1, 19, 1, 19, 3, 19, 921, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 926, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 937, 8, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 947, 8, 23, 10, 23, 12, 23, 950, 9, 23, 3, 23, 952, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 957, 8, 23, 3, 23, 959, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 968, 8, 23, 3, 23, 970, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 978, 8, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 984, 8, 24, 1, 24, 5, 24, 987, 8, 24, 10, 24, 12, 24, 990, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 999, 8, 25, 10, 25, 12, 25, 1002, 9, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1008, 8, 25, 1, 26, 1, 26, 3, 26, 1012, 8, 26, 1, 26, 1, 26, 3, 26, 1016, 8, 26, 1, 27, 1, 27, 3, 27, 1020, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 1025, 8, 27, 10, 27, 12, 27, 1028, 9, 27, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 1034, 8, 27, 10, 27, 12, 27, 1037, 9, 27, 3, 27, 1039, 8, 27, 1, 27, 1, 27, 3, 27, 1043, 8, 27, 1, 27, 1, 27, 1, 27, 3, 27, 1048, 8, 27, 1, 27, 1, 27, 3, 27, 1052, 8, 27, 1, 28, 3, 28, 1055, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 1060, 8, 28, 10, 28, 12, 28, 1063, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 1071, 8, 29, 10, 29, 12, 29, 1074, 9, 29, 3, 29, 1076, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 1084, 8, 29, 10, 29, 12, 29, 1087, 9, 29, 3, 29, 1089, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 1098, 8, 29, 10, 29, 12, 29, 1101, 9, 29, 1, 29, 1, 29, 3, 29, 1105, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 1111, 8, 30, 10, 30, 12, 30, 1114, 9, 30, 3, 30, 1116, 8, 30, 1, 30, 1, 30, 3, 30, 1120, 8, 30, 1, 31, 1, 31, 3, 31, 1124, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 3, 33, 1135, 8, 33, 1, 33, 3, 33, 1138, 8, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 1145, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1164, 8, 34, 5, 34, 1166, 8, 34, 10, 34, 12, 34, 1169, 9, 34, 1, 35, 3, 35, 1172, 8, 35, 1, 35, 1, 35, 3, 35, 1176, 8, 35, 1, 35, 1, 35, 3, 35, 1180, 8, 35, 1, 35, 1, 35, 3, 35, 1184, 8, 35, 3, 35, 1186, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 5, 36, 1195, 8, 36, 10, 36, 12, 36, 1198, 9, 36, 1, 36, 1, 36, 3, 36, 1202, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 1211, 8, 37, 1, 38, 1, 38, 1, 39, 1, 39, 3, 39, 1217, 8, 39, 1, 39, 1, 39, 3, 39, 1221, 8, 39, 3, 39, 1223, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 1229, 8, 40, 10, 40, 12, 40, 1232, 9, 40, 1, 40, 1, 40, 1, 41, 1, 41, 3, 41, 1238, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 1249, 8, 41, 10, 41, 12, 41, 1252, 9, 41, 1, 41, 1, 41, 1, 41, 3, 41, 1257, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 1268, 8, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 3, 43, 1275, 8, 43, 1, 43, 1, 43, 3, 43, 1279, 8, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 1287, 8, 43, 10, 43, 12, 43, 1290, 9, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 1302, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 1310, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 1317, 8, 44, 10, 44, 12, 44, 1320, 9, 44, 1, 44, 1, 44, 1, 44, 3, 44, 1325, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 1333, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 1339, 8, 44, 1, 44, 1, 44, 3, 44, 1343, 8, 44, 1, 44, 1, 44, 1, 44, 3, 44, 1348, 8, 44, 1, 44, 1, 44, 1, 44, 3, 44, 1353, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 1359, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 1373, 8, 45, 10, 45, 12, 45, 1376, 9, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 4, 46, 1402, 8, 46, 11, 46, 12, 46, 1403, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 1413, 8, 46, 10, 46, 12, 46, 1416, 9, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1425, 8, 46, 1, 46, 3, 46, 1428, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1433, 8, 46, 1, 46, 1, 46, 1, 46, 5, 46, 1438, 8, 46, 10, 46, 12, 46, 1441, 9, 46, 3, 46, 1443, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 1450, 8, 46, 10, 46, 12, 46, 1453, 9, 46, 3, 46, 1455, 8, 46, 1, 46, 1, 46, 3, 46, 1459, 8, 46, 1, 46, 3, 46, 1462, 8, 46, 1, 46, 3, 46, 1465, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 1475, 8, 46, 10, 46, 12, 46, 1478, 9, 46, 3, 46, 1480, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 4, 46, 1497, 8, 46, 11, 46, 12, 46, 1498, 1, 46, 1, 46, 3, 46, 1503, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 4, 46, 1509, 8, 46, 11, 46, 12, 46, 1510, 1, 46, 1, 46, 3, 46, 1515, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 1538, 8, 46, 10, 46, 12, 46, 1541, 9, 46, 3, 46, 1543, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1552, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1558, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1564, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1570, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1580, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1589, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 1609, 8, 46, 10, 46, 12, 46, 1612, 9, 46, 3, 46, 1614, 8, 46, 1, 46, 3, 46, 1617, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 1627, 8, 46, 10, 46, 12, 46, 1630, 9, 46, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1636, 8, 47, 3, 47, 1638, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 1644, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1652, 8, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 3, 53, 1662, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 1668, 8, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 1678, 8, 56, 10, 56, 12, 56, 1681, 9, 56, 3, 56, 1683, 8, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 5, 57, 1708, 8, 57, 10, 57, 12, 57, 1711, 9, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 5, 57, 1720, 8, 57, 10, 57, 12, 57, 1723, 9, 57, 1, 57, 1, 57, 3, 57, 1727, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 1734, 8, 57, 1, 57, 1, 57, 5, 57, 1738, 8, 57, 10, 57, 12, 57, 1741, 9, 57, 1, 58, 1, 58, 3, 58, 1745, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1751, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 1771, 8, 62, 10, 62, 12, 62, 1774, 9, 62, 3, 62, 1776, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 1783, 8, 62, 10, 62, 12, 62, 1786, 9, 62, 3, 62, 1788, 8, 62, 1, 62, 3, 62, 1791, 8, 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, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1819, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 1830, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1840, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 1847, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1856, 8, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1863, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1869, 8, 70, 1, 71, 1, 71, 1, 71, 5, 71, 1874, 8, 71, 10, 71, 12, 71, 1877, 9, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 3, 73, 1888, 8, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1895, 8, 74, 1, 75, 1, 75, 1, 75, 5, 75, 1900, 8, 75, 10, 75, 12, 75, 1903, 9, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 1910, 8, 76, 1, 77, 1, 77, 1, 77, 3, 77, 1915, 8, 77, 1, 78, 1, 78, 1, 78, 0, 6, 48, 68, 86, 90, 92, 114, 79, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 0, 24, 2, 0, 26, 26, 157, 157, 2, 0, 49, 49, 97, 97, 2, 0, 74, 74, 89, 89, 2, 0, 61, 61, 90, 90, 1, 0, 166, 167, 2, 0, 12, 12, 236, 236, 2, 0, 60, 60, 203, 203, 2, 0, 19, 19, 51, 51, 2, 0, 70, 70, 104, 104, 2, 0, 12, 12, 54, 54, 2, 0, 21, 21, 183, 183, 1, 0, 227, 228, 1, 0, 229, 231, 1, 0, 221, 226, 3, 0, 12, 12, 16, 16, 178, 178, 2, 0, 67, 67, 196, 196, 5, 0, 47, 47, 86, 86, 115, 116, 170, 170, 219, 219, 1, 0, 119, 122, 2, 0, 71, 71, 144, 144, 3, 0, 81, 81, 101, 101, 190, 190, 4, 0, 55, 55, 98, 98, 112, 112, 209, 209, 2, 0, 133, 133, 218, 218, 3, 0, 184, 185, 193, 193, 212, 212, 48, 0, 10, 12, 14, 14, 16, 17, 19, 21, 24, 26, 29, 34, 39, 39, 41, 41, 45, 47, 49, 49, 51, 51, 53, 53, 55, 55, 61, 61, 64, 64, 66, 66, 68, 71, 73, 73, 76, 81, 84, 84, 86, 88, 90, 90, 92, 92, 95, 95, 97, 98, 100, 101, 103, 105, 107, 107, 109, 109, 112, 117, 119, 124, 128, 131, 133, 134, 137, 137, 139, 144, 146, 149, 151, 160, 162, 164, 166, 171, 173, 185, 187, 190, 192, 195, 197, 199, 201, 202, 205, 207, 209, 209, 211, 213, 217, 220, 2221, 0, 158, 1, 0, 0, 0, 2, 161, 1, 0, 0, 0, 4, 164, 1, 0, 0, 0, 6, 825, 1, 0, 0, 0, 8, 828, 1, 0, 0, 0, 10, 832, 1, 0, 0, 0, 12, 846, 1, 0, 0, 0, 14, 848, 1, 0, 0, 0, 16, 862, 1, 0, 0, 0, 18, 868, 1, 0, 0, 0, 20, 879, 1, 0, 0, 0, 22, 883, 1, 0, 0, 0, 24, 889, 1, 0, 0, 0, 26, 896, 1, 0, 0, 0, 28, 901, 1, 0, 0, 0, 30, 904, 1, 0, 0, 0, 32, 908, 1, 0, 0, 0, 34, 910, 1, 0, 0, 0, 36, 913, 1, 0, 0, 0, 38, 920, 1, 0, 0, 0, 40, 925, 1, 0, 0, 0, 42, 936, 1, 0, 0, 0, 44, 938, 1, 0, 0, 0, 46, 940, 1, 0, 0, 0, 48, 971, 1, 0, 0, 0, 50, 1007, 1, 0, 0, 0, 52, 1009, 1, 0, 0, 0, 54, 1017, 1, 0, 0, 0, 56, 1054, 1, 0, 0, 0, 58, 1104, 1, 0, 0, 0, 60, 1119, 1, 0, 0, 0, 62, 1121, 1, 0, 0, 0, 64, 1130, 1, 0, 0, 0, 66, 1144, 1, 0, 0, 0, 68, 1146, 1, 0, 0, 0, 70, 1185, 1, 0, 0, 0, 72, 1201, 1, 0, 0, 0, 74, 1203, 1, 0, 0, 0, 76, 1212, 1, 0, 0, 0, 78, 1214, 1, 0, 0, 0, 80, 1224, 1, 0, 0, 0, 82, 1267, 1, 0, 0, 0, 84, 1269, 1, 0, 0, 0, 86, 1278, 1, 0, 0, 0, 88, 1352, 1, 0, 0, 0, 90, 1358, 1, 0, 0, 0, 92, 1616, 1, 0, 0, 0, 94, 1637, 1, 0, 0, 0, 96, 1643, 1, 0, 0, 0, 98, 1651, 1, 0, 0, 0, 100, 1653, 1, 0, 0, 0, 102, 1655, 1, 0, 0, 0, 104, 1657, 1, 0, 0, 0, 106, 1659, 1, 0, 0, 0, 108, 1669, 1, 0, 0, 0, 110, 1671, 1, 0, 0, 0, 112, 1673, 1, 0, 0, 0, 114, 1733, 1, 0, 0, 0, 116, 1744, 1, 0, 0, 0, 118, 1750, 1, 0, 0, 0, 120, 1752, 1, 0, 0, 0, 122, 1757, 1, 0, 0, 0, 124, 1763, 1, 0, 0, 0, 126, 1818, 1, 0, 0, 0, 128, 1829, 1, 0, 0, 0, 130, 1831, 1, 0, 0, 0, 132, 1839, 1, 0, 0, 0, 134, 1846, 1, 0, 0, 0, 136, 1855, 1, 0, 0, 0, 138, 1862, 1, 0, 0, 0, 140, 1868, 1, 0, 0, 0, 142, 1870, 1, 0, 0, 0, 144, 1878, 1, 0, 0, 0, 146, 1887, 1, 0, 0, 0, 148, 1894, 1, 0, 0, 0, 150, 1896, 1, 0, 0, 0, 152, 1909, 1, 0, 0, 0, 154, 1914, 1, 0, 0, 0, 156, 1916, 1, 0, 0, 0, 158, 159, 3, 6, 3, 0, 159, 160, 5, 0, 0, 1, 160, 1, 1, 0, 0, 0, 161, 162, 3, 84, 42, 0, 162, 163, 5, 0, 0, 1, 163, 3, 1, 0, 0, 0, 164, 165, 3, 32, 16, 0, 165, 166, 5, 0, 0, 1, 166, 5, 1, 0, 0, 0, 167, 826, 3, 8, 4, 0, 168, 169, 5, 206, 0, 0, 169, 826, 3, 152, 76, 0, 170, 171, 5, 206, 0, 0, 171, 172, 3, 152, 76, 0, 172, 173, 5, 1, 0, 0, 173, 174, 3, 152, 76, 0, 174, 826, 1, 0, 0, 0, 175, 176, 5, 36, 0, 0, 176, 180, 5, 168, 0, 0, 177, 178, 5, 87, 0, 0, 178, 179, 5, 126, 0, 0, 179, 181, 5, 63, 0, 0, 180, 177, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 185, 3, 142, 71, 0, 183, 184, 5, 216, 0, 0, 184, 186, 3, 18, 9, 0, 185, 183, 1, 0, 0, 0, 185, 186, 1, 0, 0, 0, 186, 826, 1, 0, 0, 0, 187, 188, 5, 56, 0, 0, 188, 191, 5, 168, 0, 0, 189, 190, 5, 87, 0, 0, 190, 192, 5, 63, 0, 0, 191, 189, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 195, 3, 142, 71, 0, 194, 196, 7, 0, 0, 0, 195, 194, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 826, 1, 0, 0, 0, 197, 198, 5, 13, 0, 0, 198, 199, 5, 168, 0, 0, 199, 200, 3, 142, 71, 0, 200, 201, 5, 152, 0, 0, 201, 202, 5, 194, 0, 0, 202, 203, 3, 152, 76, 0, 203, 826, 1, 0, 0, 0, 204, 205, 5, 36, 0, 0, 205, 209, 5, 186, 0, 0, 206, 207, 5, 87, 0, 0, 207, 208, 5, 126, 0, 0, 208, 210, 5, 63, 0, 0, 209, 206, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 213, 3, 142, 71, 0, 212, 214, 3, 80, 40, 0, 213, 212, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 217, 1, 0, 0, 0, 215, 216, 5, 32, 0, 0, 216, 218, 3, 94, 47, 0, 217, 215, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 221, 1, 0, 0, 0, 219, 220, 5, 216, 0, 0, 220, 222, 3, 18, 9, 0, 221, 219, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 229, 5, 18, 0, 0, 224, 230, 3, 8, 4, 0, 225, 226, 5, 2, 0, 0, 226, 227, 3, 8, 4, 0, 227, 228, 5, 3, 0, 0, 228, 230, 1, 0, 0, 0, 229, 224, 1, 0, 0, 0, 229, 225, 1, 0, 0, 0, 230, 236, 1, 0, 0, 0, 231, 233, 5, 216, 0, 0, 232, 234, 5, 123, 0, 0, 233, 232, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 5, 45, 0, 0, 236, 231, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 826, 1, 0, 0, 0, 238, 239, 5, 36, 0, 0, 239, 243, 5, 186, 0, 0, 240, 241, 5, 87, 0, 0, 241, 242, 5, 126, 0, 0, 242, 244, 5, 63, 0, 0, 243, 240, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 246, 3, 142, 71, 0, 246, 247, 5, 2, 0, 0, 247, 252, 3, 12, 6, 0, 248, 249, 5, 4, 0, 0, 249, 251, 3, 12, 6, 0, 250, 248, 1, 0, 0, 0, 251, 254, 1, 0, 0, 0, 252, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 255, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 255, 258, 5, 3, 0, 0, 256, 257, 5, 32, 0, 0, 257, 259, 3, 94, 47, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 262, 1, 0, 0, 0, 260, 261, 5, 216, 0, 0, 261, 263, 3, 18, 9, 0, 262, 260, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 826, 1, 0, 0, 0, 264, 265, 5, 56, 0, 0, 265, 268, 5, 186, 0, 0, 266, 267, 5, 87, 0, 0, 267, 269, 5, 63, 0, 0, 268, 266, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 826, 3, 142, 71, 0, 271, 272, 5, 93, 0, 0, 272, 273, 5, 96, 0, 0, 273, 275, 3, 142, 71, 0, 274, 276, 3, 80, 40, 0, 275, 274, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 278, 3, 8, 4, 0, 278, 826, 1, 0, 0, 0, 279, 280, 5, 50, 0, 0, 280, 281, 5, 74, 0, 0, 281, 284, 3, 142, 71, 0, 282, 283, 5, 215, 0, 0, 283, 285, 3, 86, 43, 0, 284, 282, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 826, 1, 0, 0, 0, 286, 287, 5, 197, 0, 0, 287, 288, 5, 186, 0, 0, 288, 826, 3, 142, 71, 0, 289, 290, 5, 13, 0, 0, 290, 293, 5, 186, 0, 0, 291, 292, 5, 87, 0, 0, 292, 294, 5, 63, 0, 0, 293, 291, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 3, 142, 71, 0, 296, 297, 5, 152, 0, 0, 297, 298, 5, 194, 0, 0, 298, 299, 3, 142, 71, 0, 299, 826, 1, 0, 0, 0, 300, 301, 5, 13, 0, 0, 301, 304, 5, 186, 0, 0, 302, 303, 5, 87, 0, 0, 303, 305, 5, 63, 0, 0, 304, 302, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 307, 3, 142, 71, 0, 307, 308, 5, 152, 0, 0, 308, 311, 5, 30, 0, 0, 309, 310, 5, 87, 0, 0, 310, 312, 5, 63, 0, 0, 311, 309, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 3, 152, 76, 0, 314, 315, 5, 194, 0, 0, 315, 316, 3, 152, 76, 0, 316, 826, 1, 0, 0, 0, 317, 318, 5, 13, 0, 0, 318, 321, 5, 186, 0, 0, 319, 320, 5, 87, 0, 0, 320, 322, 5, 63, 0, 0, 321, 319, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 3, 142, 71, 0, 324, 325, 5, 56, 0, 0, 325, 328, 5, 30, 0, 0, 326, 327, 5, 87, 0, 0, 327, 329, 5, 63, 0, 0, 328, 326, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 330, 1, 0, 0, 0, 330, 331, 3, 142, 71, 0, 331, 826, 1, 0, 0, 0, 332, 333, 5, 13, 0, 0, 333, 336, 5, 186, 0, 0, 334, 335, 5, 87, 0, 0, 335, 337, 5, 63, 0, 0, 336, 334, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 339, 3, 142, 71, 0, 339, 340, 5, 10, 0, 0, 340, 344, 5, 30, 0, 0, 341, 342, 5, 87, 0, 0, 342, 343, 5, 126, 0, 0, 343, 345, 5, 63, 0, 0, 344, 341, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 347, 3, 14, 7, 0, 347, 826, 1, 0, 0, 0, 348, 349, 5, 14, 0, 0, 349, 352, 3, 142, 71, 0, 350, 351, 5, 216, 0, 0, 351, 353, 3, 18, 9, 0, 352, 350, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 826, 1, 0, 0, 0, 354, 355, 5, 36, 0, 0, 355, 356, 5, 199, 0, 0, 356, 357, 3, 142, 71, 0, 357, 370, 5, 18, 0, 0, 358, 359, 5, 2, 0, 0, 359, 364, 3, 22, 11, 0, 360, 361, 5, 4, 0, 0, 361, 363, 3, 22, 11, 0, 362, 360, 1, 0, 0, 0, 363, 366, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 364, 365, 1, 0, 0, 0, 365, 367, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 367, 368, 5, 3, 0, 0, 368, 371, 1, 0, 0, 0, 369, 371, 3, 114, 57, 0, 370, 358, 1, 0, 0, 0, 370, 369, 1, 0, 0, 0, 371, 826, 1, 0, 0, 0, 372, 375, 5, 36, 0, 0, 373, 374, 5, 135, 0, 0, 374, 376, 5, 154, 0, 0, 375, 373, 1, 0, 0, 0, 375, 376, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 378, 5, 213, 0, 0, 378, 381, 3, 142, 71, 0, 379, 380, 5, 171, 0, 0, 380, 382, 7, 1, 0, 0, 381, 379, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 384, 5, 18, 0, 0, 384, 385, 3, 8, 4, 0, 385, 826, 1, 0, 0, 0, 386, 387, 5, 56, 0, 0, 387, 390, 5, 213, 0, 0, 388, 389, 5, 87, 0, 0, 389, 391, 5, 63, 0, 0, 390, 388, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 826, 3, 142, 71, 0, 393, 394, 5, 36, 0, 0, 394, 395, 5, 114, 0, 0, 395, 399, 5, 213, 0, 0, 396, 397, 5, 87, 0, 0, 397, 398, 5, 126, 0, 0, 398, 400, 5, 63, 0, 0, 399, 396, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 404, 3, 142, 71, 0, 402, 403, 5, 32, 0, 0, 403, 405, 3, 94, 47, 0, 404, 402, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 408, 1, 0, 0, 0, 406, 407, 5, 216, 0, 0, 407, 409, 3, 18, 9, 0, 408, 406, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 416, 5, 18, 0, 0, 411, 417, 3, 8, 4, 0, 412, 413, 5, 2, 0, 0, 413, 414, 3, 8, 4, 0, 414, 415, 5, 3, 0, 0, 415, 417, 1, 0, 0, 0, 416, 411, 1, 0, 0, 0, 416, 412, 1, 0, 0, 0, 417, 826, 1, 0, 0, 0, 418, 419, 5, 56, 0, 0, 419, 420, 5, 114, 0, 0, 420, 423, 5, 213, 0, 0, 421, 422, 5, 87, 0, 0, 422, 424, 5, 63, 0, 0, 423, 421, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 826, 3, 142, 71, 0, 426, 427, 5, 151, 0, 0, 427, 428, 5, 114, 0, 0, 428, 429, 5, 213, 0, 0, 429, 430, 3, 142, 71, 0, 430, 431, 5, 215, 0, 0, 431, 432, 3, 86, 43, 0, 432, 826, 1, 0, 0, 0, 433, 436, 5, 36, 0, 0, 434, 435, 5, 135, 0, 0, 435, 437, 5, 154, 0, 0, 436, 434, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 439, 1, 0, 0, 0, 438, 440, 5, 189, 0, 0, 439, 438, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 442, 5, 76, 0, 0, 442, 443, 3, 142, 71, 0, 443, 452, 5, 2, 0, 0, 444, 449, 3, 22, 11, 0, 445, 446, 5, 4, 0, 0, 446, 448, 3, 22, 11, 0, 447, 445, 1, 0, 0, 0, 448, 451, 1, 0, 0, 0, 449, 447, 1, 0, 0, 0, 449, 450, 1, 0, 0, 0, 450, 453, 1, 0, 0, 0, 451, 449, 1, 0, 0, 0, 452, 444, 1, 0, 0, 0, 452, 453, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 455, 5, 3, 0, 0, 455, 456, 5, 159, 0, 0, 456, 459, 3, 114, 57, 0, 457, 458, 5, 32, 0, 0, 458, 460, 3, 94, 47, 0, 459, 457, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 462, 3, 24, 12, 0, 462, 463, 3, 32, 16, 0, 463, 826, 1, 0, 0, 0, 464, 465, 5, 13, 0, 0, 465, 466, 5, 76, 0, 0, 466, 468, 3, 142, 71, 0, 467, 469, 3, 112, 56, 0, 468, 467, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 470, 1, 0, 0, 0, 470, 471, 3, 28, 14, 0, 471, 826, 1, 0, 0, 0, 472, 474, 5, 56, 0, 0, 473, 475, 5, 189, 0, 0, 474, 473, 1, 0, 0, 0, 474, 475, 1, 0, 0, 0, 475, 476, 1, 0, 0, 0, 476, 479, 5, 76, 0, 0, 477, 478, 5, 87, 0, 0, 478, 480, 5, 63, 0, 0, 479, 477, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 483, 3, 142, 71, 0, 482, 484, 3, 112, 56, 0, 483, 482, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 826, 1, 0, 0, 0, 485, 486, 5, 24, 0, 0, 486, 487, 3, 142, 71, 0, 487, 496, 5, 2, 0, 0, 488, 493, 3, 138, 69, 0, 489, 490, 5, 4, 0, 0, 490, 492, 3, 138, 69, 0, 491, 489, 1, 0, 0, 0, 492, 495, 1, 0, 0, 0, 493, 491, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 497, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 496, 488, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 499, 5, 3, 0, 0, 499, 826, 1, 0, 0, 0, 500, 501, 5, 36, 0, 0, 501, 502, 5, 162, 0, 0, 502, 506, 3, 152, 76, 0, 503, 504, 5, 216, 0, 0, 504, 505, 5, 11, 0, 0, 505, 507, 3, 146, 73, 0, 506, 503, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 826, 1, 0, 0, 0, 508, 509, 5, 56, 0, 0, 509, 510, 5, 162, 0, 0, 510, 826, 3, 152, 76, 0, 511, 512, 5, 78, 0, 0, 512, 513, 3, 150, 75, 0, 513, 514, 5, 194, 0, 0, 514, 519, 3, 148, 74, 0, 515, 516, 5, 4, 0, 0, 516, 518, 3, 148, 74, 0, 517, 515, 1, 0, 0, 0, 518, 521, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 525, 1, 0, 0, 0, 521, 519, 1, 0, 0, 0, 522, 523, 5, 216, 0, 0, 523, 524, 5, 11, 0, 0, 524, 526, 5, 134, 0, 0, 525, 522, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 530, 1, 0, 0, 0, 527, 528, 5, 79, 0, 0, 528, 529, 5, 23, 0, 0, 529, 531, 3, 146, 73, 0, 530, 527, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 826, 1, 0, 0, 0, 532, 536, 5, 160, 0, 0, 533, 534, 5, 11, 0, 0, 534, 535, 5, 134, 0, 0, 535, 537, 5, 72, 0, 0, 536, 533, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 539, 3, 150, 75, 0, 539, 540, 5, 74, 0, 0, 540, 545, 3, 148, 74, 0, 541, 542, 5, 4, 0, 0, 542, 544, 3, 148, 74, 0, 543, 541, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 551, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 549, 5, 79, 0, 0, 549, 550, 5, 23, 0, 0, 550, 552, 3, 146, 73, 0, 551, 548, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 826, 1, 0, 0, 0, 553, 554, 5, 175, 0, 0, 554, 558, 5, 162, 0, 0, 555, 559, 5, 12, 0, 0, 556, 559, 5, 124, 0, 0, 557, 559, 3, 152, 76, 0, 558, 555, 1, 0, 0, 0, 558, 556, 1, 0, 0, 0, 558, 557, 1, 0, 0, 0, 559, 826, 1, 0, 0, 0, 560, 571, 5, 78, 0, 0, 561, 566, 3, 140, 70, 0, 562, 563, 5, 4, 0, 0, 563, 565, 3, 140, 70, 0, 564, 562, 1, 0, 0, 0, 565, 568, 1, 0, 0, 0, 566, 564, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 572, 1, 0, 0, 0, 568, 566, 1, 0, 0, 0, 569, 570, 5, 12, 0, 0, 570, 572, 5, 146, 0, 0, 571, 561, 1, 0, 0, 0, 571, 569, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 575, 5, 132, 0, 0, 574, 576, 5, 186, 0, 0, 575, 574, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 578, 3, 142, 71, 0, 578, 579, 5, 194, 0, 0, 579, 583, 3, 148, 74, 0, 580, 581, 5, 216, 0, 0, 581, 582, 5, 78, 0, 0, 582, 584, 5, 134, 0, 0, 583, 580, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 826, 1, 0, 0, 0, 585, 589, 5, 160, 0, 0, 586, 587, 5, 78, 0, 0, 587, 588, 5, 134, 0, 0, 588, 590, 5, 72, 0, 0, 589, 586, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 601, 1, 0, 0, 0, 591, 596, 3, 140, 70, 0, 592, 593, 5, 4, 0, 0, 593, 595, 3, 140, 70, 0, 594, 592, 1, 0, 0, 0, 595, 598, 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 602, 1, 0, 0, 0, 598, 596, 1, 0, 0, 0, 599, 600, 5, 12, 0, 0, 600, 602, 5, 146, 0, 0, 601, 591, 1, 0, 0, 0, 601, 599, 1, 0, 0, 0, 602, 603, 1, 0, 0, 0, 603, 605, 5, 132, 0, 0, 604, 606, 5, 186, 0, 0, 605, 604, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 608, 3, 142, 71, 0, 608, 609, 5, 74, 0, 0, 609, 610, 3, 148, 74, 0, 610, 826, 1, 0, 0, 0, 611, 612, 5, 177, 0, 0, 612, 618, 5, 80, 0, 0, 613, 615, 5, 132, 0, 0, 614, 616, 5, 186, 0, 0, 615, 614, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 619, 3, 142, 71, 0, 618, 613, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 826, 1, 0, 0, 0, 620, 622, 5, 64, 0, 0, 621, 623, 5, 14, 0, 0, 622, 621, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 625, 1, 0, 0, 0, 624, 626, 5, 211, 0, 0, 625, 624, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 638, 1, 0, 0, 0, 627, 628, 5, 2, 0, 0, 628, 633, 3, 132, 66, 0, 629, 630, 5, 4, 0, 0, 630, 632, 3, 132, 66, 0, 631, 629, 1, 0, 0, 0, 632, 635, 1, 0, 0, 0, 633, 631, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 636, 1, 0, 0, 0, 635, 633, 1, 0, 0, 0, 636, 637, 5, 3, 0, 0, 637, 639, 1, 0, 0, 0, 638, 627, 1, 0, 0, 0, 638, 639, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, 826, 3, 6, 3, 0, 641, 642, 5, 177, 0, 0, 642, 643, 5, 36, 0, 0, 643, 644, 5, 186, 0, 0, 644, 826, 3, 142, 71, 0, 645, 646, 5, 177, 0, 0, 646, 647, 5, 36, 0, 0, 647, 648, 5, 213, 0, 0, 648, 826, 3, 142, 71, 0, 649, 650, 5, 177, 0, 0, 650, 651, 5, 36, 0, 0, 651, 652, 5, 114, 0, 0, 652, 653, 5, 213, 0, 0, 653, 826, 3, 142, 71, 0, 654, 655, 5, 177, 0, 0, 655, 656, 5, 36, 0, 0, 656, 657, 5, 76, 0, 0, 657, 659, 3, 142, 71, 0, 658, 660, 3, 112, 56, 0, 659, 658, 1, 0, 0, 0, 659, 660, 1, 0, 0, 0, 660, 826, 1, 0, 0, 0, 661, 662, 5, 177, 0, 0, 662, 665, 5, 187, 0, 0, 663, 664, 7, 2, 0, 0, 664, 666, 3, 142, 71, 0, 665, 663, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 673, 1, 0, 0, 0, 667, 668, 5, 108, 0, 0, 668, 671, 3, 94, 47, 0, 669, 670, 5, 59, 0, 0, 670, 672, 3, 94, 47, 0, 671, 669, 1, 0, 0, 0, 671, 672, 1, 0, 0, 0, 672, 674, 1, 0, 0, 0, 673, 667, 1, 0, 0, 0, 673, 674, 1, 0, 0, 0, 674, 826, 1, 0, 0, 0, 675, 676, 5, 177, 0, 0, 676, 679, 5, 169, 0, 0, 677, 678, 7, 2, 0, 0, 678, 680, 3, 152, 76, 0, 679, 677, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 687, 1, 0, 0, 0, 681, 682, 5, 108, 0, 0, 682, 685, 3, 94, 47, 0, 683, 684, 5, 59, 0, 0, 684, 686, 3, 94, 47, 0, 685, 683, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 688, 1, 0, 0, 0, 687, 681, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 826, 1, 0, 0, 0, 689, 690, 5, 177, 0, 0, 690, 697, 5, 29, 0, 0, 691, 692, 5, 108, 0, 0, 692, 695, 3, 94, 47, 0, 693, 694, 5, 59, 0, 0, 694, 696, 3, 94, 47, 0, 695, 693, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 698, 1, 0, 0, 0, 697, 691, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 826, 1, 0, 0, 0, 699, 700, 5, 177, 0, 0, 700, 701, 5, 31, 0, 0, 701, 702, 7, 2, 0, 0, 702, 826, 3, 142, 71, 0, 703, 704, 5, 177, 0, 0, 704, 705, 5, 181, 0, 0, 705, 706, 5, 72, 0, 0, 706, 826, 3, 142, 71, 0, 707, 708, 5, 177, 0, 0, 708, 709, 5, 181, 0, 0, 709, 710, 5, 72, 0, 0, 710, 711, 5, 2, 0, 0, 711, 712, 3, 54, 27, 0, 712, 713, 5, 3, 0, 0, 713, 826, 1, 0, 0, 0, 714, 716, 5, 177, 0, 0, 715, 717, 5, 39, 0, 0, 716, 715, 1, 0, 0, 0, 716, 717, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 721, 5, 163, 0, 0, 719, 720, 7, 2, 0, 0, 720, 722, 3, 152, 76, 0, 721, 719, 1, 0, 0, 0, 721, 722, 1, 0, 0, 0, 722, 826, 1, 0, 0, 0, 723, 724, 5, 177, 0, 0, 724, 725, 5, 162, 0, 0, 725, 728, 5, 80, 0, 0, 726, 727, 7, 2, 0, 0, 727, 729, 3, 152, 76, 0, 728, 726, 1, 0, 0, 0, 728, 729, 1, 0, 0, 0, 729, 826, 1, 0, 0, 0, 730, 731, 5, 52, 0, 0, 731, 826, 3, 142, 71, 0, 732, 733, 5, 51, 0, 0, 733, 826, 3, 142, 71, 0, 734, 735, 5, 177, 0, 0, 735, 742, 5, 77, 0, 0, 736, 737, 5, 108, 0, 0, 737, 740, 3, 94, 47, 0, 738, 739, 5, 59, 0, 0, 739, 741, 3, 94, 47, 0, 740, 738, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 743, 1, 0, 0, 0, 742, 736, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 826, 1, 0, 0, 0, 744, 745, 5, 177, 0, 0, 745, 752, 5, 174, 0, 0, 746, 747, 5, 108, 0, 0, 747, 750, 3, 94, 47, 0, 748, 749, 5, 59, 0, 0, 749, 751, 3, 94, 47, 0, 750, 748, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 753, 1, 0, 0, 0, 752, 746, 1, 0, 0, 0, 752, 753, 1, 0, 0, 0, 753, 826, 1, 0, 0, 0, 754, 755, 5, 175, 0, 0, 755, 756, 5, 174, 0, 0, 756, 757, 3, 142, 71, 0, 757, 758, 5, 221, 0, 0, 758, 759, 3, 84, 42, 0, 759, 826, 1, 0, 0, 0, 760, 761, 5, 155, 0, 0, 761, 762, 5, 174, 0, 0, 762, 826, 3, 142, 71, 0, 763, 764, 5, 180, 0, 0, 764, 773, 5, 195, 0, 0, 765, 770, 3, 134, 67, 0, 766, 767, 5, 4, 0, 0, 767, 769, 3, 134, 67, 0, 768, 766, 1, 0, 0, 0, 769, 772, 1, 0, 0, 0, 770, 768, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 774, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 773, 765, 1, 0, 0, 0, 773, 774, 1, 0, 0, 0, 774, 826, 1, 0, 0, 0, 775, 777, 5, 33, 0, 0, 776, 778, 5, 217, 0, 0, 777, 776, 1, 0, 0, 0, 777, 778, 1, 0, 0, 0, 778, 826, 1, 0, 0, 0, 779, 781, 5, 164, 0, 0, 780, 782, 5, 217, 0, 0, 781, 780, 1, 0, 0, 0, 781, 782, 1, 0, 0, 0, 782, 826, 1, 0, 0, 0, 783, 784, 5, 145, 0, 0, 784, 785, 3, 152, 76, 0, 785, 786, 5, 74, 0, 0, 786, 787, 3, 6, 3, 0, 787, 826, 1, 0, 0, 0, 788, 789, 5, 48, 0, 0, 789, 790, 5, 145, 0, 0, 790, 826, 3, 152, 76, 0, 791, 792, 5, 62, 0, 0, 792, 802, 3, 152, 76, 0, 793, 794, 5, 208, 0, 0, 794, 799, 3, 84, 42, 0, 795, 796, 5, 4, 0, 0, 796, 798, 3, 84, 42, 0, 797, 795, 1, 0, 0, 0, 798, 801, 1, 0, 0, 0, 799, 797, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 800, 803, 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 802, 793, 1, 0, 0, 0, 802, 803, 1, 0, 0, 0, 803, 826, 1, 0, 0, 0, 804, 805, 5, 52, 0, 0, 805, 806, 5, 92, 0, 0, 806, 826, 3, 152, 76, 0, 807, 808, 5, 52, 0, 0, 808, 809, 5, 139, 0, 0, 809, 826, 3, 152, 76, 0, 810, 811, 5, 205, 0, 0, 811, 812, 3, 142, 71, 0, 812, 813, 5, 175, 0, 0, 813, 818, 3, 130, 65, 0, 814, 815, 5, 4, 0, 0, 815, 817, 3, 130, 65, 0, 816, 814, 1, 0, 0, 0, 817, 820, 1, 0, 0, 0, 818, 816, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 823, 1, 0, 0, 0, 820, 818, 1, 0, 0, 0, 821, 822, 5, 215, 0, 0, 822, 824, 3, 86, 43, 0, 823, 821, 1, 0, 0, 0, 823, 824, 1, 0, 0, 0, 824, 826, 1, 0, 0, 0, 825, 167, 1, 0, 0, 0, 825, 168, 1, 0, 0, 0, 825, 170, 1, 0, 0, 0, 825, 175, 1, 0, 0, 0, 825, 187, 1, 0, 0, 0, 825, 197, 1, 0, 0, 0, 825, 204, 1, 0, 0, 0, 825, 238, 1, 0, 0, 0, 825, 264, 1, 0, 0, 0, 825, 271, 1, 0, 0, 0, 825, 279, 1, 0, 0, 0, 825, 286, 1, 0, 0, 0, 825, 289, 1, 0, 0, 0, 825, 300, 1, 0, 0, 0, 825, 317, 1, 0, 0, 0, 825, 332, 1, 0, 0, 0, 825, 348, 1, 0, 0, 0, 825, 354, 1, 0, 0, 0, 825, 372, 1, 0, 0, 0, 825, 386, 1, 0, 0, 0, 825, 393, 1, 0, 0, 0, 825, 418, 1, 0, 0, 0, 825, 426, 1, 0, 0, 0, 825, 433, 1, 0, 0, 0, 825, 464, 1, 0, 0, 0, 825, 472, 1, 0, 0, 0, 825, 485, 1, 0, 0, 0, 825, 500, 1, 0, 0, 0, 825, 508, 1, 0, 0, 0, 825, 511, 1, 0, 0, 0, 825, 532, 1, 0, 0, 0, 825, 553, 1, 0, 0, 0, 825, 560, 1, 0, 0, 0, 825, 585, 1, 0, 0, 0, 825, 611, 1, 0, 0, 0, 825, 620, 1, 0, 0, 0, 825, 641, 1, 0, 0, 0, 825, 645, 1, 0, 0, 0, 825, 649, 1, 0, 0, 0, 825, 654, 1, 0, 0, 0, 825, 661, 1, 0, 0, 0, 825, 675, 1, 0, 0, 0, 825, 689, 1, 0, 0, 0, 825, 699, 1, 0, 0, 0, 825, 703, 1, 0, 0, 0, 825, 707, 1, 0, 0, 0, 825, 714, 1, 0, 0, 0, 825, 723, 1, 0, 0, 0, 825, 730, 1, 0, 0, 0, 825, 732, 1, 0, 0, 0, 825, 734, 1, 0, 0, 0, 825, 744, 1, 0, 0, 0, 825, 754, 1, 0, 0, 0, 825, 760, 1, 0, 0, 0, 825, 763, 1, 0, 0, 0, 825, 775, 1, 0, 0, 0, 825, 779, 1, 0, 0, 0, 825, 783, 1, 0, 0, 0, 825, 788, 1, 0, 0, 0, 825, 791, 1, 0, 0, 0, 825, 804, 1, 0, 0, 0, 825, 807, 1, 0, 0, 0, 825, 810, 1, 0, 0, 0, 826, 7, 1, 0, 0, 0, 827, 829, 3, 10, 5, 0, 828, 827, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 830, 1, 0, 0, 0, 830, 831, 3, 46, 23, 0, 831, 9, 1, 0, 0, 0, 832, 834, 5, 216, 0, 0, 833, 835, 5, 150, 0, 0, 834, 833, 1, 0, 0, 0, 834, 835, 1, 0, 0, 0, 835, 836, 1, 0, 0, 0, 836, 841, 3, 62, 31, 0, 837, 838, 5, 4, 0, 0, 838, 840, 3, 62, 31, 0, 839, 837, 1, 0, 0, 0, 840, 843, 1, 0, 0, 0, 841, 839, 1, 0, 0, 0, 841, 842, 1, 0, 0, 0, 842, 11, 1, 0, 0, 0, 843, 841, 1, 0, 0, 0, 844, 847, 3, 14, 7, 0, 845, 847, 3, 16, 8, 0, 846, 844, 1, 0, 0, 0, 846, 845, 1, 0, 0, 0, 847, 13, 1, 0, 0, 0, 848, 849, 3, 152, 76, 0, 849, 852, 3, 114, 57, 0, 850, 851, 5, 126, 0, 0, 851, 853, 5, 127, 0, 0, 852, 850, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 856, 1, 0, 0, 0, 854, 855, 5, 32, 0, 0, 855, 857, 3, 94, 47, 0, 856, 854, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 860, 1, 0, 0, 0, 858, 859, 5, 216, 0, 0, 859, 861, 3, 18, 9, 0, 860, 858, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 15, 1, 0, 0, 0, 862, 863, 5, 108, 0, 0, 863, 866, 3, 142, 71, 0, 864, 865, 7, 3, 0, 0, 865, 867, 5, 147, 0, 0, 866, 864, 1, 0, 0, 0, 866, 867, 1, 0, 0, 0, 867, 17, 1, 0, 0, 0, 868, 869, 5, 2, 0, 0, 869, 874, 3, 20, 10, 0, 870, 871, 5, 4, 0, 0, 871, 873, 3, 20, 10, 0, 872, 870, 1, 0, 0, 0, 873, 876, 1, 0, 0, 0, 874, 872, 1, 0, 0, 0, 874, 875, 1, 0, 0, 0, 875, 877, 1, 0, 0, 0, 876, 874, 1, 0, 0, 0, 877, 878, 5, 3, 0, 0, 878, 19, 1, 0, 0, 0, 879, 880, 3, 152, 76, 0, 880, 881, 5, 221, 0, 0, 881, 882, 3, 84, 42, 0, 882, 21, 1, 0, 0, 0, 883, 884, 3, 152, 76, 0, 884, 885, 3, 114, 57, 0, 885, 23, 1, 0, 0, 0, 886, 888, 3, 26, 13, 0, 887, 886, 1, 0, 0, 0, 888, 891, 1, 0, 0, 0, 889, 887, 1, 0, 0, 0, 889, 890, 1, 0, 0, 0, 890, 25, 1, 0, 0, 0, 891, 889, 1, 0, 0, 0, 892, 893, 5, 103, 0, 0, 893, 897, 3, 38, 19, 0, 894, 897, 3, 40, 20, 0, 895, 897, 3, 42, 21, 0, 896, 892, 1, 0, 0, 0, 896, 894, 1, 0, 0, 0, 896, 895, 1, 0, 0, 0, 897, 27, 1, 0, 0, 0, 898, 900, 3, 30, 15, 0, 899, 898, 1, 0, 0, 0, 900, 903, 1, 0, 0, 0, 901, 899, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 29, 1, 0, 0, 0, 903, 901, 1, 0, 0, 0, 904, 905, 3, 42, 21, 0, 905, 31, 1, 0, 0, 0, 906, 909, 3, 34, 17, 0, 907, 909, 3, 36, 18, 0, 908, 906, 1, 0, 0, 0, 908, 907, 1, 0, 0, 0, 909, 33, 1, 0, 0, 0, 910, 911, 5, 158, 0, 0, 911, 912, 3, 84, 42, 0, 912, 35, 1, 0, 0, 0, 913, 916, 5, 66, 0, 0, 914, 915, 5, 117, 0, 0, 915, 917, 3, 44, 22, 0, 916, 914, 1, 0, 0, 0, 916, 917, 1, 0, 0, 0, 917, 37, 1, 0, 0, 0, 918, 921, 5, 179, 0, 0, 919, 921, 3, 152, 76, 0, 920, 918, 1, 0, 0, 0, 920, 919, 1, 0, 0, 0, 921, 39, 1, 0, 0, 0, 922, 926, 5, 53, 0, 0, 923, 924, 5, 126, 0, 0, 924, 926, 5, 53, 0, 0, 925, 922, 1, 0, 0, 0, 925, 923, 1, 0, 0, 0, 926, 41, 1, 0, 0, 0, 927, 928, 5, 159, 0, 0, 928, 929, 5, 127, 0, 0, 929, 930, 5, 132, 0, 0, 930, 931, 5, 127, 0, 0, 931, 937, 5, 92, 0, 0, 932, 933, 5, 25, 0, 0, 933, 934, 5, 132, 0, 0, 934, 935, 5, 127, 0, 0, 935, 937, 5, 92, 0, 0, 936, 927, 1, 0, 0, 0, 936, 932, 1, 0, 0, 0, 937, 43, 1, 0, 0, 0, 938, 939, 3, 152, 76, 0, 939, 45, 1, 0, 0, 0, 940, 951, 3, 48, 24, 0, 941, 942, 5, 136, 0, 0, 942, 943, 5, 23, 0, 0, 943, 948, 3, 52, 26, 0, 944, 945, 5, 4, 0, 0, 945, 947, 3, 52, 26, 0, 946, 944, 1, 0, 0, 0, 947, 950, 1, 0, 0, 0, 948, 946, 1, 0, 0, 0, 948, 949, 1, 0, 0, 0, 949, 952, 1, 0, 0, 0, 950, 948, 1, 0, 0, 0, 951, 941, 1, 0, 0, 0, 951, 952, 1, 0, 0, 0, 952, 958, 1, 0, 0, 0, 953, 954, 5, 131, 0, 0, 954, 956, 5, 236, 0, 0, 955, 957, 7, 4, 0, 0, 956, 955, 1, 0, 0, 0, 956, 957, 1, 0, 0, 0, 957, 959, 1, 0, 0, 0, 958, 953, 1, 0, 0, 0, 958, 959, 1, 0, 0, 0, 959, 969, 1, 0, 0, 0, 960, 961, 5, 109, 0, 0, 961, 968, 7, 5, 0, 0, 962, 963, 5, 68, 0, 0, 963, 964, 5, 70, 0, 0, 964, 965, 5, 236, 0, 0, 965, 966, 5, 167, 0, 0, 966, 968, 5, 133, 0, 0, 967, 960, 1, 0, 0, 0, 967, 962, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 970, 1, 0, 0, 0, 969, 967, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 47, 1, 0, 0, 0, 971, 972, 6, 24, -1, 0, 972, 973, 3, 50, 25, 0, 973, 988, 1, 0, 0, 0, 974, 975, 10, 2, 0, 0, 975, 977, 5, 94, 0, 0, 976, 978, 3, 64, 32, 0, 977, 976, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 987, 3, 48, 24, 3, 980, 981, 10, 1, 0, 0, 981, 983, 7, 6, 0, 0, 982, 984, 3, 64, 32, 0, 983, 982, 1, 0, 0, 0, 983, 984, 1, 0, 0, 0, 984, 985, 1, 0, 0, 0, 985, 987, 3, 48, 24, 2, 986, 974, 1, 0, 0, 0, 986, 980, 1, 0, 0, 0, 987, 990, 1, 0, 0, 0, 988, 986, 1, 0, 0, 0, 988, 989, 1, 0, 0, 0, 989, 49, 1, 0, 0, 0, 990, 988, 1, 0, 0, 0, 991, 1008, 3, 54, 27, 0, 992, 993, 5, 186, 0, 0, 993, 1008, 3, 142, 71, 0, 994, 995, 5, 210, 0, 0, 995, 1000, 3, 84, 42, 0, 996, 997, 5, 4, 0, 0, 997, 999, 3, 84, 42, 0, 998, 996, 1, 0, 0, 0, 999, 1002, 1, 0, 0, 0, 1000, 998, 1, 0, 0, 0, 1000, 1001, 1, 0, 0, 0, 1001, 1008, 1, 0, 0, 0, 1002, 1000, 1, 0, 0, 0, 1003, 1004, 5, 2, 0, 0, 1004, 1005, 3, 46, 23, 0, 1005, 1006, 5, 3, 0, 0, 1006, 1008, 1, 0, 0, 0, 1007, 991, 1, 0, 0, 0, 1007, 992, 1, 0, 0, 0, 1007, 994, 1, 0, 0, 0, 1007, 1003, 1, 0, 0, 0, 1008, 51, 1, 0, 0, 0, 1009, 1011, 3, 84, 42, 0, 1010, 1012, 7, 7, 0, 0, 1011, 1010, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1015, 1, 0, 0, 0, 1013, 1014, 5, 129, 0, 0, 1014, 1016, 7, 8, 0, 0, 1015, 1013, 1, 0, 0, 0, 1015, 1016, 1, 0, 0, 0, 1016, 53, 1, 0, 0, 0, 1017, 1019, 5, 172, 0, 0, 1018, 1020, 3, 64, 32, 0, 1019, 1018, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1026, 3, 66, 33, 0, 1022, 1023, 5, 4, 0, 0, 1023, 1025, 3, 66, 33, 0, 1024, 1022, 1, 0, 0, 0, 1025, 1028, 1, 0, 0, 0, 1026, 1024, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1038, 1, 0, 0, 0, 1028, 1026, 1, 0, 0, 0, 1029, 1030, 5, 74, 0, 0, 1030, 1035, 3, 68, 34, 0, 1031, 1032, 5, 4, 0, 0, 1032, 1034, 3, 68, 34, 0, 1033, 1031, 1, 0, 0, 0, 1034, 1037, 1, 0, 0, 0, 1035, 1033, 1, 0, 0, 0, 1035, 1036, 1, 0, 0, 0, 1036, 1039, 1, 0, 0, 0, 1037, 1035, 1, 0, 0, 0, 1038, 1029, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 1042, 1, 0, 0, 0, 1040, 1041, 5, 215, 0, 0, 1041, 1043, 3, 86, 43, 0, 1042, 1040, 1, 0, 0, 0, 1042, 1043, 1, 0, 0, 0, 1043, 1047, 1, 0, 0, 0, 1044, 1045, 5, 82, 0, 0, 1045, 1046, 5, 23, 0, 0, 1046, 1048, 3, 56, 28, 0, 1047, 1044, 1, 0, 0, 0, 1047, 1048, 1, 0, 0, 0, 1048, 1051, 1, 0, 0, 0, 1049, 1050, 5, 85, 0, 0, 1050, 1052, 3, 86, 43, 0, 1051, 1049, 1, 0, 0, 0, 1051, 1052, 1, 0, 0, 0, 1052, 55, 1, 0, 0, 0, 1053, 1055, 3, 64, 32, 0, 1054, 1053, 1, 0, 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 1056, 1, 0, 0, 0, 1056, 1061, 3, 58, 29, 0, 1057, 1058, 5, 4, 0, 0, 1058, 1060, 3, 58, 29, 0, 1059, 1057, 1, 0, 0, 0, 1060, 1063, 1, 0, 0, 0, 1061, 1059, 1, 0, 0, 0, 1061, 1062, 1, 0, 0, 0, 1062, 57, 1, 0, 0, 0, 1063, 1061, 1, 0, 0, 0, 1064, 1105, 3, 60, 30, 0, 1065, 1066, 5, 165, 0, 0, 1066, 1075, 5, 2, 0, 0, 1067, 1072, 3, 84, 42, 0, 1068, 1069, 5, 4, 0, 0, 1069, 1071, 3, 84, 42, 0, 1070, 1068, 1, 0, 0, 0, 1071, 1074, 1, 0, 0, 0, 1072, 1070, 1, 0, 0, 0, 1072, 1073, 1, 0, 0, 0, 1073, 1076, 1, 0, 0, 0, 1074, 1072, 1, 0, 0, 0, 1075, 1067, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 1077, 1, 0, 0, 0, 1077, 1105, 5, 3, 0, 0, 1078, 1079, 5, 38, 0, 0, 1079, 1088, 5, 2, 0, 0, 1080, 1085, 3, 84, 42, 0, 1081, 1082, 5, 4, 0, 0, 1082, 1084, 3, 84, 42, 0, 1083, 1081, 1, 0, 0, 0, 1084, 1087, 1, 0, 0, 0, 1085, 1083, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1089, 1, 0, 0, 0, 1087, 1085, 1, 0, 0, 0, 1088, 1080, 1, 0, 0, 0, 1088, 1089, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1105, 5, 3, 0, 0, 1091, 1092, 5, 83, 0, 0, 1092, 1093, 5, 176, 0, 0, 1093, 1094, 5, 2, 0, 0, 1094, 1099, 3, 60, 30, 0, 1095, 1096, 5, 4, 0, 0, 1096, 1098, 3, 60, 30, 0, 1097, 1095, 1, 0, 0, 0, 1098, 1101, 1, 0, 0, 0, 1099, 1097, 1, 0, 0, 0, 1099, 1100, 1, 0, 0, 0, 1100, 1102, 1, 0, 0, 0, 1101, 1099, 1, 0, 0, 0, 1102, 1103, 5, 3, 0, 0, 1103, 1105, 1, 0, 0, 0, 1104, 1064, 1, 0, 0, 0, 1104, 1065, 1, 0, 0, 0, 1104, 1078, 1, 0, 0, 0, 1104, 1091, 1, 0, 0, 0, 1105, 59, 1, 0, 0, 0, 1106, 1115, 5, 2, 0, 0, 1107, 1112, 3, 84, 42, 0, 1108, 1109, 5, 4, 0, 0, 1109, 1111, 3, 84, 42, 0, 1110, 1108, 1, 0, 0, 0, 1111, 1114, 1, 0, 0, 0, 1112, 1110, 1, 0, 0, 0, 1112, 1113, 1, 0, 0, 0, 1113, 1116, 1, 0, 0, 0, 1114, 1112, 1, 0, 0, 0, 1115, 1107, 1, 0, 0, 0, 1115, 1116, 1, 0, 0, 0, 1116, 1117, 1, 0, 0, 0, 1117, 1120, 5, 3, 0, 0, 1118, 1120, 3, 84, 42, 0, 1119, 1106, 1, 0, 0, 0, 1119, 1118, 1, 0, 0, 0, 1120, 61, 1, 0, 0, 0, 1121, 1123, 3, 152, 76, 0, 1122, 1124, 3, 80, 40, 0, 1123, 1122, 1, 0, 0, 0, 1123, 1124, 1, 0, 0, 0, 1124, 1125, 1, 0, 0, 0, 1125, 1126, 5, 18, 0, 0, 1126, 1127, 5, 2, 0, 0, 1127, 1128, 3, 8, 4, 0, 1128, 1129, 5, 3, 0, 0, 1129, 63, 1, 0, 0, 0, 1130, 1131, 7, 9, 0, 0, 1131, 65, 1, 0, 0, 0, 1132, 1137, 3, 84, 42, 0, 1133, 1135, 5, 18, 0, 0, 1134, 1133, 1, 0, 0, 0, 1134, 1135, 1, 0, 0, 0, 1135, 1136, 1, 0, 0, 0, 1136, 1138, 3, 152, 76, 0, 1137, 1134, 1, 0, 0, 0, 1137, 1138, 1, 0, 0, 0, 1138, 1145, 1, 0, 0, 0, 1139, 1140, 3, 142, 71, 0, 1140, 1141, 5, 1, 0, 0, 1141, 1142, 5, 229, 0, 0, 1142, 1145, 1, 0, 0, 0, 1143, 1145, 5, 229, 0, 0, 1144, 1132, 1, 0, 0, 0, 1144, 1139, 1, 0, 0, 0, 1144, 1143, 1, 0, 0, 0, 1145, 67, 1, 0, 0, 0, 1146, 1147, 6, 34, -1, 0, 1147, 1148, 3, 74, 37, 0, 1148, 1167, 1, 0, 0, 0, 1149, 1163, 10, 2, 0, 0, 1150, 1151, 5, 37, 0, 0, 1151, 1152, 5, 102, 0, 0, 1152, 1164, 3, 74, 37, 0, 1153, 1154, 3, 70, 35, 0, 1154, 1155, 5, 102, 0, 0, 1155, 1156, 3, 68, 34, 0, 1156, 1157, 3, 72, 36, 0, 1157, 1164, 1, 0, 0, 0, 1158, 1159, 5, 118, 0, 0, 1159, 1160, 3, 70, 35, 0, 1160, 1161, 5, 102, 0, 0, 1161, 1162, 3, 74, 37, 0, 1162, 1164, 1, 0, 0, 0, 1163, 1150, 1, 0, 0, 0, 1163, 1153, 1, 0, 0, 0, 1163, 1158, 1, 0, 0, 0, 1164, 1166, 1, 0, 0, 0, 1165, 1149, 1, 0, 0, 0, 1166, 1169, 1, 0, 0, 0, 1167, 1165, 1, 0, 0, 0, 1167, 1168, 1, 0, 0, 0, 1168, 69, 1, 0, 0, 0, 1169, 1167, 1, 0, 0, 0, 1170, 1172, 5, 91, 0, 0, 1171, 1170, 1, 0, 0, 0, 1171, 1172, 1, 0, 0, 0, 1172, 1186, 1, 0, 0, 0, 1173, 1175, 5, 106, 0, 0, 1174, 1176, 5, 138, 0, 0, 1175, 1174, 1, 0, 0, 0, 1175, 1176, 1, 0, 0, 0, 1176, 1186, 1, 0, 0, 0, 1177, 1179, 5, 161, 0, 0, 1178, 1180, 5, 138, 0, 0, 1179, 1178, 1, 0, 0, 0, 1179, 1180, 1, 0, 0, 0, 1180, 1186, 1, 0, 0, 0, 1181, 1183, 5, 75, 0, 0, 1182, 1184, 5, 138, 0, 0, 1183, 1182, 1, 0, 0, 0, 1183, 1184, 1, 0, 0, 0, 1184, 1186, 1, 0, 0, 0, 1185, 1171, 1, 0, 0, 0, 1185, 1173, 1, 0, 0, 0, 1185, 1177, 1, 0, 0, 0, 1185, 1181, 1, 0, 0, 0, 1186, 71, 1, 0, 0, 0, 1187, 1188, 5, 132, 0, 0, 1188, 1202, 3, 86, 43, 0, 1189, 1190, 5, 208, 0, 0, 1190, 1191, 5, 2, 0, 0, 1191, 1196, 3, 152, 76, 0, 1192, 1193, 5, 4, 0, 0, 1193, 1195, 3, 152, 76, 0, 1194, 1192, 1, 0, 0, 0, 1195, 1198, 1, 0, 0, 0, 1196, 1194, 1, 0, 0, 0, 1196, 1197, 1, 0, 0, 0, 1197, 1199, 1, 0, 0, 0, 1198, 1196, 1, 0, 0, 0, 1199, 1200, 5, 3, 0, 0, 1200, 1202, 1, 0, 0, 0, 1201, 1187, 1, 0, 0, 0, 1201, 1189, 1, 0, 0, 0, 1202, 73, 1, 0, 0, 0, 1203, 1210, 3, 78, 39, 0, 1204, 1205, 5, 188, 0, 0, 1205, 1206, 3, 76, 38, 0, 1206, 1207, 5, 2, 0, 0, 1207, 1208, 3, 84, 42, 0, 1208, 1209, 5, 3, 0, 0, 1209, 1211, 1, 0, 0, 0, 1210, 1204, 1, 0, 0, 0, 1210, 1211, 1, 0, 0, 0, 1211, 75, 1, 0, 0, 0, 1212, 1213, 7, 10, 0, 0, 1213, 77, 1, 0, 0, 0, 1214, 1222, 3, 82, 41, 0, 1215, 1217, 5, 18, 0, 0, 1216, 1215, 1, 0, 0, 0, 1216, 1217, 1, 0, 0, 0, 1217, 1218, 1, 0, 0, 0, 1218, 1220, 3, 152, 76, 0, 1219, 1221, 3, 80, 40, 0, 1220, 1219, 1, 0, 0, 0, 1220, 1221, 1, 0, 0, 0, 1221, 1223, 1, 0, 0, 0, 1222, 1216, 1, 0, 0, 0, 1222, 1223, 1, 0, 0, 0, 1223, 79, 1, 0, 0, 0, 1224, 1225, 5, 2, 0, 0, 1225, 1230, 3, 152, 76, 0, 1226, 1227, 5, 4, 0, 0, 1227, 1229, 3, 152, 76, 0, 1228, 1226, 1, 0, 0, 0, 1229, 1232, 1, 0, 0, 0, 1230, 1228, 1, 0, 0, 0, 1230, 1231, 1, 0, 0, 0, 1231, 1233, 1, 0, 0, 0, 1232, 1230, 1, 0, 0, 0, 1233, 1234, 5, 3, 0, 0, 1234, 81, 1, 0, 0, 0, 1235, 1237, 3, 142, 71, 0, 1236, 1238, 3, 144, 72, 0, 1237, 1236, 1, 0, 0, 0, 1237, 1238, 1, 0, 0, 0, 1238, 1268, 1, 0, 0, 0, 1239, 1240, 5, 2, 0, 0, 1240, 1241, 3, 8, 4, 0, 1241, 1242, 5, 3, 0, 0, 1242, 1268, 1, 0, 0, 0, 1243, 1244, 5, 204, 0, 0, 1244, 1245, 5, 2, 0, 0, 1245, 1250, 3, 84, 42, 0, 1246, 1247, 5, 4, 0, 0, 1247, 1249, 3, 84, 42, 0, 1248, 1246, 1, 0, 0, 0, 1249, 1252, 1, 0, 0, 0, 1250, 1248, 1, 0, 0, 0, 1250, 1251, 1, 0, 0, 0, 1251, 1253, 1, 0, 0, 0, 1252, 1250, 1, 0, 0, 0, 1253, 1256, 5, 3, 0, 0, 1254, 1255, 5, 216, 0, 0, 1255, 1257, 5, 137, 0, 0, 1256, 1254, 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1268, 1, 0, 0, 0, 1258, 1259, 5, 105, 0, 0, 1259, 1260, 5, 2, 0, 0, 1260, 1261, 3, 8, 4, 0, 1261, 1262, 5, 3, 0, 0, 1262, 1268, 1, 0, 0, 0, 1263, 1264, 5, 2, 0, 0, 1264, 1265, 3, 68, 34, 0, 1265, 1266, 5, 3, 0, 0, 1266, 1268, 1, 0, 0, 0, 1267, 1235, 1, 0, 0, 0, 1267, 1239, 1, 0, 0, 0, 1267, 1243, 1, 0, 0, 0, 1267, 1258, 1, 0, 0, 0, 1267, 1263, 1, 0, 0, 0, 1268, 83, 1, 0, 0, 0, 1269, 1270, 3, 86, 43, 0, 1270, 85, 1, 0, 0, 0, 1271, 1272, 6, 43, -1, 0, 1272, 1274, 3, 90, 45, 0, 1273, 1275, 3, 88, 44, 0, 1274, 1273, 1, 0, 0, 0, 1274, 1275, 1, 0, 0, 0, 1275, 1279, 1, 0, 0, 0, 1276, 1277, 5, 126, 0, 0, 1277, 1279, 3, 86, 43, 3, 1278, 1271, 1, 0, 0, 0, 1278, 1276, 1, 0, 0, 0, 1279, 1288, 1, 0, 0, 0, 1280, 1281, 10, 2, 0, 0, 1281, 1282, 5, 15, 0, 0, 1282, 1287, 3, 86, 43, 3, 1283, 1284, 10, 1, 0, 0, 1284, 1285, 5, 135, 0, 0, 1285, 1287, 3, 86, 43, 2, 1286, 1280, 1, 0, 0, 0, 1286, 1283, 1, 0, 0, 0, 1287, 1290, 1, 0, 0, 0, 1288, 1286, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 87, 1, 0, 0, 0, 1290, 1288, 1, 0, 0, 0, 1291, 1292, 3, 100, 50, 0, 1292, 1293, 3, 90, 45, 0, 1293, 1353, 1, 0, 0, 0, 1294, 1295, 3, 100, 50, 0, 1295, 1296, 3, 102, 51, 0, 1296, 1297, 5, 2, 0, 0, 1297, 1298, 3, 8, 4, 0, 1298, 1299, 5, 3, 0, 0, 1299, 1353, 1, 0, 0, 0, 1300, 1302, 5, 126, 0, 0, 1301, 1300, 1, 0, 0, 0, 1301, 1302, 1, 0, 0, 0, 1302, 1303, 1, 0, 0, 0, 1303, 1304, 5, 22, 0, 0, 1304, 1305, 3, 90, 45, 0, 1305, 1306, 5, 15, 0, 0, 1306, 1307, 3, 90, 45, 0, 1307, 1353, 1, 0, 0, 0, 1308, 1310, 5, 126, 0, 0, 1309, 1308, 1, 0, 0, 0, 1309, 1310, 1, 0, 0, 0, 1310, 1311, 1, 0, 0, 0, 1311, 1312, 5, 89, 0, 0, 1312, 1313, 5, 2, 0, 0, 1313, 1318, 3, 84, 42, 0, 1314, 1315, 5, 4, 0, 0, 1315, 1317, 3, 84, 42, 0, 1316, 1314, 1, 0, 0, 0, 1317, 1320, 1, 0, 0, 0, 1318, 1316, 1, 0, 0, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1321, 1, 0, 0, 0, 1320, 1318, 1, 0, 0, 0, 1321, 1322, 5, 3, 0, 0, 1322, 1353, 1, 0, 0, 0, 1323, 1325, 5, 126, 0, 0, 1324, 1323, 1, 0, 0, 0, 1324, 1325, 1, 0, 0, 0, 1325, 1326, 1, 0, 0, 0, 1326, 1327, 5, 89, 0, 0, 1327, 1328, 5, 2, 0, 0, 1328, 1329, 3, 8, 4, 0, 1329, 1330, 5, 3, 0, 0, 1330, 1353, 1, 0, 0, 0, 1331, 1333, 5, 126, 0, 0, 1332, 1331, 1, 0, 0, 0, 1332, 1333, 1, 0, 0, 0, 1333, 1334, 1, 0, 0, 0, 1334, 1335, 5, 108, 0, 0, 1335, 1338, 3, 90, 45, 0, 1336, 1337, 5, 59, 0, 0, 1337, 1339, 3, 90, 45, 0, 1338, 1336, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 1353, 1, 0, 0, 0, 1340, 1342, 5, 99, 0, 0, 1341, 1343, 5, 126, 0, 0, 1342, 1341, 1, 0, 0, 0, 1342, 1343, 1, 0, 0, 0, 1343, 1344, 1, 0, 0, 0, 1344, 1353, 5, 127, 0, 0, 1345, 1347, 5, 99, 0, 0, 1346, 1348, 5, 126, 0, 0, 1347, 1346, 1, 0, 0, 0, 1347, 1348, 1, 0, 0, 0, 1348, 1349, 1, 0, 0, 0, 1349, 1350, 5, 54, 0, 0, 1350, 1351, 5, 74, 0, 0, 1351, 1353, 3, 90, 45, 0, 1352, 1291, 1, 0, 0, 0, 1352, 1294, 1, 0, 0, 0, 1352, 1301, 1, 0, 0, 0, 1352, 1309, 1, 0, 0, 0, 1352, 1324, 1, 0, 0, 0, 1352, 1332, 1, 0, 0, 0, 1352, 1340, 1, 0, 0, 0, 1352, 1345, 1, 0, 0, 0, 1353, 89, 1, 0, 0, 0, 1354, 1355, 6, 45, -1, 0, 1355, 1359, 3, 92, 46, 0, 1356, 1357, 7, 11, 0, 0, 1357, 1359, 3, 90, 45, 4, 1358, 1354, 1, 0, 0, 0, 1358, 1356, 1, 0, 0, 0, 1359, 1374, 1, 0, 0, 0, 1360, 1361, 10, 3, 0, 0, 1361, 1362, 7, 12, 0, 0, 1362, 1373, 3, 90, 45, 4, 1363, 1364, 10, 2, 0, 0, 1364, 1365, 7, 11, 0, 0, 1365, 1373, 3, 90, 45, 3, 1366, 1367, 10, 1, 0, 0, 1367, 1368, 5, 232, 0, 0, 1368, 1373, 3, 90, 45, 2, 1369, 1370, 10, 5, 0, 0, 1370, 1371, 5, 20, 0, 0, 1371, 1373, 3, 98, 49, 0, 1372, 1360, 1, 0, 0, 0, 1372, 1363, 1, 0, 0, 0, 1372, 1366, 1, 0, 0, 0, 1372, 1369, 1, 0, 0, 0, 1373, 1376, 1, 0, 0, 0, 1374, 1372, 1, 0, 0, 0, 1374, 1375, 1, 0, 0, 0, 1375, 91, 1, 0, 0, 0, 1376, 1374, 1, 0, 0, 0, 1377, 1378, 6, 46, -1, 0, 1378, 1617, 5, 127, 0, 0, 1379, 1617, 3, 106, 53, 0, 1380, 1381, 3, 152, 76, 0, 1381, 1382, 3, 94, 47, 0, 1382, 1617, 1, 0, 0, 0, 1383, 1384, 5, 245, 0, 0, 1384, 1617, 3, 94, 47, 0, 1385, 1617, 3, 154, 77, 0, 1386, 1617, 3, 104, 52, 0, 1387, 1617, 3, 94, 47, 0, 1388, 1617, 5, 235, 0, 0, 1389, 1617, 5, 5, 0, 0, 1390, 1391, 5, 143, 0, 0, 1391, 1392, 5, 2, 0, 0, 1392, 1393, 3, 90, 45, 0, 1393, 1394, 5, 89, 0, 0, 1394, 1395, 3, 90, 45, 0, 1395, 1396, 5, 3, 0, 0, 1396, 1617, 1, 0, 0, 0, 1397, 1398, 5, 2, 0, 0, 1398, 1401, 3, 84, 42, 0, 1399, 1400, 5, 4, 0, 0, 1400, 1402, 3, 84, 42, 0, 1401, 1399, 1, 0, 0, 0, 1402, 1403, 1, 0, 0, 0, 1403, 1401, 1, 0, 0, 0, 1403, 1404, 1, 0, 0, 0, 1404, 1405, 1, 0, 0, 0, 1405, 1406, 5, 3, 0, 0, 1406, 1617, 1, 0, 0, 0, 1407, 1408, 5, 166, 0, 0, 1408, 1409, 5, 2, 0, 0, 1409, 1414, 3, 84, 42, 0, 1410, 1411, 5, 4, 0, 0, 1411, 1413, 3, 84, 42, 0, 1412, 1410, 1, 0, 0, 0, 1413, 1416, 1, 0, 0, 0, 1414, 1412, 1, 0, 0, 0, 1414, 1415, 1, 0, 0, 0, 1415, 1417, 1, 0, 0, 0, 1416, 1414, 1, 0, 0, 0, 1417, 1418, 5, 3, 0, 0, 1418, 1617, 1, 0, 0, 0, 1419, 1420, 3, 142, 71, 0, 1420, 1421, 5, 2, 0, 0, 1421, 1422, 5, 229, 0, 0, 1422, 1424, 5, 3, 0, 0, 1423, 1425, 3, 122, 61, 0, 1424, 1423, 1, 0, 0, 0, 1424, 1425, 1, 0, 0, 0, 1425, 1427, 1, 0, 0, 0, 1426, 1428, 3, 124, 62, 0, 1427, 1426, 1, 0, 0, 0, 1427, 1428, 1, 0, 0, 0, 1428, 1617, 1, 0, 0, 0, 1429, 1430, 3, 142, 71, 0, 1430, 1442, 5, 2, 0, 0, 1431, 1433, 3, 64, 32, 0, 1432, 1431, 1, 0, 0, 0, 1432, 1433, 1, 0, 0, 0, 1433, 1434, 1, 0, 0, 0, 1434, 1439, 3, 84, 42, 0, 1435, 1436, 5, 4, 0, 0, 1436, 1438, 3, 84, 42, 0, 1437, 1435, 1, 0, 0, 0, 1438, 1441, 1, 0, 0, 0, 1439, 1437, 1, 0, 0, 0, 1439, 1440, 1, 0, 0, 0, 1440, 1443, 1, 0, 0, 0, 1441, 1439, 1, 0, 0, 0, 1442, 1432, 1, 0, 0, 0, 1442, 1443, 1, 0, 0, 0, 1443, 1454, 1, 0, 0, 0, 1444, 1445, 5, 136, 0, 0, 1445, 1446, 5, 23, 0, 0, 1446, 1451, 3, 52, 26, 0, 1447, 1448, 5, 4, 0, 0, 1448, 1450, 3, 52, 26, 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, 1455, 1, 0, 0, 0, 1453, 1451, 1, 0, 0, 0, 1454, 1444, 1, 0, 0, 0, 1454, 1455, 1, 0, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 1458, 5, 3, 0, 0, 1457, 1459, 3, 122, 61, 0, 1458, 1457, 1, 0, 0, 0, 1458, 1459, 1, 0, 0, 0, 1459, 1464, 1, 0, 0, 0, 1460, 1462, 3, 96, 48, 0, 1461, 1460, 1, 0, 0, 0, 1461, 1462, 1, 0, 0, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1465, 3, 124, 62, 0, 1464, 1461, 1, 0, 0, 0, 1464, 1465, 1, 0, 0, 0, 1465, 1617, 1, 0, 0, 0, 1466, 1467, 3, 152, 76, 0, 1467, 1468, 5, 6, 0, 0, 1468, 1469, 3, 84, 42, 0, 1469, 1617, 1, 0, 0, 0, 1470, 1479, 5, 2, 0, 0, 1471, 1476, 3, 152, 76, 0, 1472, 1473, 5, 4, 0, 0, 1473, 1475, 3, 152, 76, 0, 1474, 1472, 1, 0, 0, 0, 1475, 1478, 1, 0, 0, 0, 1476, 1474, 1, 0, 0, 0, 1476, 1477, 1, 0, 0, 0, 1477, 1480, 1, 0, 0, 0, 1478, 1476, 1, 0, 0, 0, 1479, 1471, 1, 0, 0, 0, 1479, 1480, 1, 0, 0, 0, 1480, 1481, 1, 0, 0, 0, 1481, 1482, 5, 3, 0, 0, 1482, 1483, 5, 6, 0, 0, 1483, 1617, 3, 84, 42, 0, 1484, 1485, 5, 2, 0, 0, 1485, 1486, 3, 8, 4, 0, 1486, 1487, 5, 3, 0, 0, 1487, 1617, 1, 0, 0, 0, 1488, 1489, 5, 63, 0, 0, 1489, 1490, 5, 2, 0, 0, 1490, 1491, 3, 8, 4, 0, 1491, 1492, 5, 3, 0, 0, 1492, 1617, 1, 0, 0, 0, 1493, 1494, 5, 27, 0, 0, 1494, 1496, 3, 90, 45, 0, 1495, 1497, 3, 120, 60, 0, 1496, 1495, 1, 0, 0, 0, 1497, 1498, 1, 0, 0, 0, 1498, 1496, 1, 0, 0, 0, 1498, 1499, 1, 0, 0, 0, 1499, 1502, 1, 0, 0, 0, 1500, 1501, 5, 57, 0, 0, 1501, 1503, 3, 84, 42, 0, 1502, 1500, 1, 0, 0, 0, 1502, 1503, 1, 0, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 1505, 5, 58, 0, 0, 1505, 1617, 1, 0, 0, 0, 1506, 1508, 5, 27, 0, 0, 1507, 1509, 3, 120, 60, 0, 1508, 1507, 1, 0, 0, 0, 1509, 1510, 1, 0, 0, 0, 1510, 1508, 1, 0, 0, 0, 1510, 1511, 1, 0, 0, 0, 1511, 1514, 1, 0, 0, 0, 1512, 1513, 5, 57, 0, 0, 1513, 1515, 3, 84, 42, 0, 1514, 1512, 1, 0, 0, 0, 1514, 1515, 1, 0, 0, 0, 1515, 1516, 1, 0, 0, 0, 1516, 1517, 5, 58, 0, 0, 1517, 1617, 1, 0, 0, 0, 1518, 1519, 5, 28, 0, 0, 1519, 1520, 5, 2, 0, 0, 1520, 1521, 3, 84, 42, 0, 1521, 1522, 5, 18, 0, 0, 1522, 1523, 3, 114, 57, 0, 1523, 1524, 5, 3, 0, 0, 1524, 1617, 1, 0, 0, 0, 1525, 1526, 5, 198, 0, 0, 1526, 1527, 5, 2, 0, 0, 1527, 1528, 3, 84, 42, 0, 1528, 1529, 5, 18, 0, 0, 1529, 1530, 3, 114, 57, 0, 1530, 1531, 5, 3, 0, 0, 1531, 1617, 1, 0, 0, 0, 1532, 1533, 5, 17, 0, 0, 1533, 1542, 5, 7, 0, 0, 1534, 1539, 3, 84, 42, 0, 1535, 1536, 5, 4, 0, 0, 1536, 1538, 3, 84, 42, 0, 1537, 1535, 1, 0, 0, 0, 1538, 1541, 1, 0, 0, 0, 1539, 1537, 1, 0, 0, 0, 1539, 1540, 1, 0, 0, 0, 1540, 1543, 1, 0, 0, 0, 1541, 1539, 1, 0, 0, 0, 1542, 1534, 1, 0, 0, 0, 1542, 1543, 1, 0, 0, 0, 1543, 1544, 1, 0, 0, 0, 1544, 1617, 5, 8, 0, 0, 1545, 1617, 3, 152, 76, 0, 1546, 1617, 5, 40, 0, 0, 1547, 1551, 5, 42, 0, 0, 1548, 1549, 5, 2, 0, 0, 1549, 1550, 5, 236, 0, 0, 1550, 1552, 5, 3, 0, 0, 1551, 1548, 1, 0, 0, 0, 1551, 1552, 1, 0, 0, 0, 1552, 1617, 1, 0, 0, 0, 1553, 1557, 5, 43, 0, 0, 1554, 1555, 5, 2, 0, 0, 1555, 1556, 5, 236, 0, 0, 1556, 1558, 5, 3, 0, 0, 1557, 1554, 1, 0, 0, 0, 1557, 1558, 1, 0, 0, 0, 1558, 1617, 1, 0, 0, 0, 1559, 1563, 5, 110, 0, 0, 1560, 1561, 5, 2, 0, 0, 1561, 1562, 5, 236, 0, 0, 1562, 1564, 5, 3, 0, 0, 1563, 1560, 1, 0, 0, 0, 1563, 1564, 1, 0, 0, 0, 1564, 1617, 1, 0, 0, 0, 1565, 1569, 5, 111, 0, 0, 1566, 1567, 5, 2, 0, 0, 1567, 1568, 5, 236, 0, 0, 1568, 1570, 5, 3, 0, 0, 1569, 1566, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 1617, 1, 0, 0, 0, 1571, 1617, 5, 44, 0, 0, 1572, 1573, 5, 182, 0, 0, 1573, 1574, 5, 2, 0, 0, 1574, 1575, 3, 90, 45, 0, 1575, 1576, 5, 74, 0, 0, 1576, 1579, 3, 90, 45, 0, 1577, 1578, 5, 72, 0, 0, 1578, 1580, 3, 90, 45, 0, 1579, 1577, 1, 0, 0, 0, 1579, 1580, 1, 0, 0, 0, 1580, 1581, 1, 0, 0, 0, 1581, 1582, 5, 3, 0, 0, 1582, 1617, 1, 0, 0, 0, 1583, 1584, 5, 125, 0, 0, 1584, 1585, 5, 2, 0, 0, 1585, 1588, 3, 90, 45, 0, 1586, 1587, 5, 4, 0, 0, 1587, 1589, 3, 110, 55, 0, 1588, 1586, 1, 0, 0, 0, 1588, 1589, 1, 0, 0, 0, 1589, 1590, 1, 0, 0, 0, 1590, 1591, 5, 3, 0, 0, 1591, 1617, 1, 0, 0, 0, 1592, 1593, 5, 65, 0, 0, 1593, 1594, 5, 2, 0, 0, 1594, 1595, 3, 152, 76, 0, 1595, 1596, 5, 74, 0, 0, 1596, 1597, 3, 90, 45, 0, 1597, 1598, 5, 3, 0, 0, 1598, 1617, 1, 0, 0, 0, 1599, 1600, 5, 2, 0, 0, 1600, 1601, 3, 84, 42, 0, 1601, 1602, 5, 3, 0, 0, 1602, 1617, 1, 0, 0, 0, 1603, 1604, 5, 83, 0, 0, 1604, 1613, 5, 2, 0, 0, 1605, 1610, 3, 142, 71, 0, 1606, 1607, 5, 4, 0, 0, 1607, 1609, 3, 142, 71, 0, 1608, 1606, 1, 0, 0, 0, 1609, 1612, 1, 0, 0, 0, 1610, 1608, 1, 0, 0, 0, 1610, 1611, 1, 0, 0, 0, 1611, 1614, 1, 0, 0, 0, 1612, 1610, 1, 0, 0, 0, 1613, 1605, 1, 0, 0, 0, 1613, 1614, 1, 0, 0, 0, 1614, 1615, 1, 0, 0, 0, 1615, 1617, 5, 3, 0, 0, 1616, 1377, 1, 0, 0, 0, 1616, 1379, 1, 0, 0, 0, 1616, 1380, 1, 0, 0, 0, 1616, 1383, 1, 0, 0, 0, 1616, 1385, 1, 0, 0, 0, 1616, 1386, 1, 0, 0, 0, 1616, 1387, 1, 0, 0, 0, 1616, 1388, 1, 0, 0, 0, 1616, 1389, 1, 0, 0, 0, 1616, 1390, 1, 0, 0, 0, 1616, 1397, 1, 0, 0, 0, 1616, 1407, 1, 0, 0, 0, 1616, 1419, 1, 0, 0, 0, 1616, 1429, 1, 0, 0, 0, 1616, 1466, 1, 0, 0, 0, 1616, 1470, 1, 0, 0, 0, 1616, 1484, 1, 0, 0, 0, 1616, 1488, 1, 0, 0, 0, 1616, 1493, 1, 0, 0, 0, 1616, 1506, 1, 0, 0, 0, 1616, 1518, 1, 0, 0, 0, 1616, 1525, 1, 0, 0, 0, 1616, 1532, 1, 0, 0, 0, 1616, 1545, 1, 0, 0, 0, 1616, 1546, 1, 0, 0, 0, 1616, 1547, 1, 0, 0, 0, 1616, 1553, 1, 0, 0, 0, 1616, 1559, 1, 0, 0, 0, 1616, 1565, 1, 0, 0, 0, 1616, 1571, 1, 0, 0, 0, 1616, 1572, 1, 0, 0, 0, 1616, 1583, 1, 0, 0, 0, 1616, 1592, 1, 0, 0, 0, 1616, 1599, 1, 0, 0, 0, 1616, 1603, 1, 0, 0, 0, 1617, 1628, 1, 0, 0, 0, 1618, 1619, 10, 14, 0, 0, 1619, 1620, 5, 7, 0, 0, 1620, 1621, 3, 90, 45, 0, 1621, 1622, 5, 8, 0, 0, 1622, 1627, 1, 0, 0, 0, 1623, 1624, 10, 12, 0, 0, 1624, 1625, 5, 1, 0, 0, 1625, 1627, 3, 152, 76, 0, 1626, 1618, 1, 0, 0, 0, 1626, 1623, 1, 0, 0, 0, 1627, 1630, 1, 0, 0, 0, 1628, 1626, 1, 0, 0, 0, 1628, 1629, 1, 0, 0, 0, 1629, 93, 1, 0, 0, 0, 1630, 1628, 1, 0, 0, 0, 1631, 1638, 5, 233, 0, 0, 1632, 1635, 5, 234, 0, 0, 1633, 1634, 5, 200, 0, 0, 1634, 1636, 5, 233, 0, 0, 1635, 1633, 1, 0, 0, 0, 1635, 1636, 1, 0, 0, 0, 1636, 1638, 1, 0, 0, 0, 1637, 1631, 1, 0, 0, 0, 1637, 1632, 1, 0, 0, 0, 1638, 95, 1, 0, 0, 0, 1639, 1640, 5, 88, 0, 0, 1640, 1644, 5, 129, 0, 0, 1641, 1642, 5, 156, 0, 0, 1642, 1644, 5, 129, 0, 0, 1643, 1639, 1, 0, 0, 0, 1643, 1641, 1, 0, 0, 0, 1644, 97, 1, 0, 0, 0, 1645, 1646, 5, 192, 0, 0, 1646, 1647, 5, 220, 0, 0, 1647, 1652, 3, 106, 53, 0, 1648, 1649, 5, 192, 0, 0, 1649, 1650, 5, 220, 0, 0, 1650, 1652, 3, 94, 47, 0, 1651, 1645, 1, 0, 0, 0, 1651, 1648, 1, 0, 0, 0, 1652, 99, 1, 0, 0, 0, 1653, 1654, 7, 13, 0, 0, 1654, 101, 1, 0, 0, 0, 1655, 1656, 7, 14, 0, 0, 1656, 103, 1, 0, 0, 0, 1657, 1658, 7, 15, 0, 0, 1658, 105, 1, 0, 0, 0, 1659, 1661, 5, 95, 0, 0, 1660, 1662, 7, 11, 0, 0, 1661, 1660, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1663, 1, 0, 0, 0, 1663, 1664, 3, 94, 47, 0, 1664, 1667, 3, 108, 54, 0, 1665, 1666, 5, 194, 0, 0, 1666, 1668, 3, 108, 54, 0, 1667, 1665, 1, 0, 0, 0, 1667, 1668, 1, 0, 0, 0, 1668, 107, 1, 0, 0, 0, 1669, 1670, 7, 16, 0, 0, 1670, 109, 1, 0, 0, 0, 1671, 1672, 7, 17, 0, 0, 1672, 111, 1, 0, 0, 0, 1673, 1682, 5, 2, 0, 0, 1674, 1679, 3, 114, 57, 0, 1675, 1676, 5, 4, 0, 0, 1676, 1678, 3, 114, 57, 0, 1677, 1675, 1, 0, 0, 0, 1678, 1681, 1, 0, 0, 0, 1679, 1677, 1, 0, 0, 0, 1679, 1680, 1, 0, 0, 0, 1680, 1683, 1, 0, 0, 0, 1681, 1679, 1, 0, 0, 0, 1682, 1674, 1, 0, 0, 0, 1682, 1683, 1, 0, 0, 0, 1683, 1684, 1, 0, 0, 0, 1684, 1685, 5, 3, 0, 0, 1685, 113, 1, 0, 0, 0, 1686, 1687, 6, 57, -1, 0, 1687, 1688, 5, 17, 0, 0, 1688, 1689, 5, 223, 0, 0, 1689, 1690, 3, 114, 57, 0, 1690, 1691, 5, 225, 0, 0, 1691, 1734, 1, 0, 0, 0, 1692, 1693, 5, 113, 0, 0, 1693, 1694, 5, 223, 0, 0, 1694, 1695, 3, 114, 57, 0, 1695, 1696, 5, 4, 0, 0, 1696, 1697, 3, 114, 57, 0, 1697, 1698, 5, 225, 0, 0, 1698, 1734, 1, 0, 0, 0, 1699, 1700, 5, 166, 0, 0, 1700, 1701, 5, 2, 0, 0, 1701, 1702, 3, 152, 76, 0, 1702, 1709, 3, 114, 57, 0, 1703, 1704, 5, 4, 0, 0, 1704, 1705, 3, 152, 76, 0, 1705, 1706, 3, 114, 57, 0, 1706, 1708, 1, 0, 0, 0, 1707, 1703, 1, 0, 0, 0, 1708, 1711, 1, 0, 0, 0, 1709, 1707, 1, 0, 0, 0, 1709, 1710, 1, 0, 0, 0, 1710, 1712, 1, 0, 0, 0, 1711, 1709, 1, 0, 0, 0, 1712, 1713, 5, 3, 0, 0, 1713, 1734, 1, 0, 0, 0, 1714, 1726, 3, 118, 59, 0, 1715, 1716, 5, 2, 0, 0, 1716, 1721, 3, 116, 58, 0, 1717, 1718, 5, 4, 0, 0, 1718, 1720, 3, 116, 58, 0, 1719, 1717, 1, 0, 0, 0, 1720, 1723, 1, 0, 0, 0, 1721, 1719, 1, 0, 0, 0, 1721, 1722, 1, 0, 0, 0, 1722, 1724, 1, 0, 0, 0, 1723, 1721, 1, 0, 0, 0, 1724, 1725, 5, 3, 0, 0, 1725, 1727, 1, 0, 0, 0, 1726, 1715, 1, 0, 0, 0, 1726, 1727, 1, 0, 0, 0, 1727, 1734, 1, 0, 0, 0, 1728, 1729, 5, 95, 0, 0, 1729, 1730, 3, 108, 54, 0, 1730, 1731, 5, 194, 0, 0, 1731, 1732, 3, 108, 54, 0, 1732, 1734, 1, 0, 0, 0, 1733, 1686, 1, 0, 0, 0, 1733, 1692, 1, 0, 0, 0, 1733, 1699, 1, 0, 0, 0, 1733, 1714, 1, 0, 0, 0, 1733, 1728, 1, 0, 0, 0, 1734, 1739, 1, 0, 0, 0, 1735, 1736, 10, 6, 0, 0, 1736, 1738, 5, 17, 0, 0, 1737, 1735, 1, 0, 0, 0, 1738, 1741, 1, 0, 0, 0, 1739, 1737, 1, 0, 0, 0, 1739, 1740, 1, 0, 0, 0, 1740, 115, 1, 0, 0, 0, 1741, 1739, 1, 0, 0, 0, 1742, 1745, 5, 236, 0, 0, 1743, 1745, 3, 114, 57, 0, 1744, 1742, 1, 0, 0, 0, 1744, 1743, 1, 0, 0, 0, 1745, 117, 1, 0, 0, 0, 1746, 1751, 5, 243, 0, 0, 1747, 1751, 5, 244, 0, 0, 1748, 1751, 5, 245, 0, 0, 1749, 1751, 3, 142, 71, 0, 1750, 1746, 1, 0, 0, 0, 1750, 1747, 1, 0, 0, 0, 1750, 1748, 1, 0, 0, 0, 1750, 1749, 1, 0, 0, 0, 1751, 119, 1, 0, 0, 0, 1752, 1753, 5, 214, 0, 0, 1753, 1754, 3, 84, 42, 0, 1754, 1755, 5, 191, 0, 0, 1755, 1756, 3, 84, 42, 0, 1756, 121, 1, 0, 0, 0, 1757, 1758, 5, 69, 0, 0, 1758, 1759, 5, 2, 0, 0, 1759, 1760, 5, 215, 0, 0, 1760, 1761, 3, 86, 43, 0, 1761, 1762, 5, 3, 0, 0, 1762, 123, 1, 0, 0, 0, 1763, 1764, 5, 140, 0, 0, 1764, 1775, 5, 2, 0, 0, 1765, 1766, 5, 141, 0, 0, 1766, 1767, 5, 23, 0, 0, 1767, 1772, 3, 84, 42, 0, 1768, 1769, 5, 4, 0, 0, 1769, 1771, 3, 84, 42, 0, 1770, 1768, 1, 0, 0, 0, 1771, 1774, 1, 0, 0, 0, 1772, 1770, 1, 0, 0, 0, 1772, 1773, 1, 0, 0, 0, 1773, 1776, 1, 0, 0, 0, 1774, 1772, 1, 0, 0, 0, 1775, 1765, 1, 0, 0, 0, 1775, 1776, 1, 0, 0, 0, 1776, 1787, 1, 0, 0, 0, 1777, 1778, 5, 136, 0, 0, 1778, 1779, 5, 23, 0, 0, 1779, 1784, 3, 52, 26, 0, 1780, 1781, 5, 4, 0, 0, 1781, 1783, 3, 52, 26, 0, 1782, 1780, 1, 0, 0, 0, 1783, 1786, 1, 0, 0, 0, 1784, 1782, 1, 0, 0, 0, 1784, 1785, 1, 0, 0, 0, 1785, 1788, 1, 0, 0, 0, 1786, 1784, 1, 0, 0, 0, 1787, 1777, 1, 0, 0, 0, 1787, 1788, 1, 0, 0, 0, 1788, 1790, 1, 0, 0, 0, 1789, 1791, 3, 126, 63, 0, 1790, 1789, 1, 0, 0, 0, 1790, 1791, 1, 0, 0, 0, 1791, 1792, 1, 0, 0, 0, 1792, 1793, 5, 3, 0, 0, 1793, 125, 1, 0, 0, 0, 1794, 1795, 5, 148, 0, 0, 1795, 1819, 3, 128, 64, 0, 1796, 1797, 5, 167, 0, 0, 1797, 1819, 3, 128, 64, 0, 1798, 1799, 5, 84, 0, 0, 1799, 1819, 3, 128, 64, 0, 1800, 1801, 5, 148, 0, 0, 1801, 1802, 5, 22, 0, 0, 1802, 1803, 3, 128, 64, 0, 1803, 1804, 5, 15, 0, 0, 1804, 1805, 3, 128, 64, 0, 1805, 1819, 1, 0, 0, 0, 1806, 1807, 5, 167, 0, 0, 1807, 1808, 5, 22, 0, 0, 1808, 1809, 3, 128, 64, 0, 1809, 1810, 5, 15, 0, 0, 1810, 1811, 3, 128, 64, 0, 1811, 1819, 1, 0, 0, 0, 1812, 1813, 5, 84, 0, 0, 1813, 1814, 5, 22, 0, 0, 1814, 1815, 3, 128, 64, 0, 1815, 1816, 5, 15, 0, 0, 1816, 1817, 3, 128, 64, 0, 1817, 1819, 1, 0, 0, 0, 1818, 1794, 1, 0, 0, 0, 1818, 1796, 1, 0, 0, 0, 1818, 1798, 1, 0, 0, 0, 1818, 1800, 1, 0, 0, 0, 1818, 1806, 1, 0, 0, 0, 1818, 1812, 1, 0, 0, 0, 1819, 127, 1, 0, 0, 0, 1820, 1821, 5, 201, 0, 0, 1821, 1830, 5, 144, 0, 0, 1822, 1823, 5, 201, 0, 0, 1823, 1830, 5, 71, 0, 0, 1824, 1825, 5, 39, 0, 0, 1825, 1830, 5, 166, 0, 0, 1826, 1827, 3, 84, 42, 0, 1827, 1828, 7, 18, 0, 0, 1828, 1830, 1, 0, 0, 0, 1829, 1820, 1, 0, 0, 0, 1829, 1822, 1, 0, 0, 0, 1829, 1824, 1, 0, 0, 0, 1829, 1826, 1, 0, 0, 0, 1830, 129, 1, 0, 0, 0, 1831, 1832, 3, 152, 76, 0, 1832, 1833, 5, 221, 0, 0, 1833, 1834, 3, 84, 42, 0, 1834, 131, 1, 0, 0, 0, 1835, 1836, 5, 73, 0, 0, 1836, 1840, 7, 19, 0, 0, 1837, 1838, 5, 199, 0, 0, 1838, 1840, 7, 20, 0, 0, 1839, 1835, 1, 0, 0, 0, 1839, 1837, 1, 0, 0, 0, 1840, 133, 1, 0, 0, 0, 1841, 1842, 5, 100, 0, 0, 1842, 1843, 5, 107, 0, 0, 1843, 1847, 3, 136, 68, 0, 1844, 1845, 5, 149, 0, 0, 1845, 1847, 7, 21, 0, 0, 1846, 1841, 1, 0, 0, 0, 1846, 1844, 1, 0, 0, 0, 1847, 135, 1, 0, 0, 0, 1848, 1849, 5, 149, 0, 0, 1849, 1856, 5, 202, 0, 0, 1850, 1851, 5, 149, 0, 0, 1851, 1856, 5, 34, 0, 0, 1852, 1853, 5, 153, 0, 0, 1853, 1856, 5, 149, 0, 0, 1854, 1856, 5, 173, 0, 0, 1855, 1848, 1, 0, 0, 0, 1855, 1850, 1, 0, 0, 0, 1855, 1852, 1, 0, 0, 0, 1855, 1854, 1, 0, 0, 0, 1856, 137, 1, 0, 0, 0, 1857, 1863, 3, 84, 42, 0, 1858, 1859, 3, 152, 76, 0, 1859, 1860, 5, 9, 0, 0, 1860, 1861, 3, 84, 42, 0, 1861, 1863, 1, 0, 0, 0, 1862, 1857, 1, 0, 0, 0, 1862, 1858, 1, 0, 0, 0, 1863, 139, 1, 0, 0, 0, 1864, 1869, 5, 172, 0, 0, 1865, 1869, 5, 50, 0, 0, 1866, 1869, 5, 93, 0, 0, 1867, 1869, 3, 152, 76, 0, 1868, 1864, 1, 0, 0, 0, 1868, 1865, 1, 0, 0, 0, 1868, 1866, 1, 0, 0, 0, 1868, 1867, 1, 0, 0, 0, 1869, 141, 1, 0, 0, 0, 1870, 1875, 3, 152, 76, 0, 1871, 1872, 5, 1, 0, 0, 1872, 1874, 3, 152, 76, 0, 1873, 1871, 1, 0, 0, 0, 1874, 1877, 1, 0, 0, 0, 1875, 1873, 1, 0, 0, 0, 1875, 1876, 1, 0, 0, 0, 1876, 143, 1, 0, 0, 0, 1877, 1875, 1, 0, 0, 0, 1878, 1879, 5, 72, 0, 0, 1879, 1880, 7, 22, 0, 0, 1880, 1881, 5, 18, 0, 0, 1881, 1882, 5, 130, 0, 0, 1882, 1883, 3, 90, 45, 0, 1883, 145, 1, 0, 0, 0, 1884, 1888, 5, 44, 0, 0, 1885, 1888, 5, 41, 0, 0, 1886, 1888, 3, 148, 74, 0, 1887, 1884, 1, 0, 0, 0, 1887, 1885, 1, 0, 0, 0, 1887, 1886, 1, 0, 0, 0, 1888, 147, 1, 0, 0, 0, 1889, 1890, 5, 207, 0, 0, 1890, 1895, 3, 152, 76, 0, 1891, 1892, 5, 162, 0, 0, 1892, 1895, 3, 152, 76, 0, 1893, 1895, 3, 152, 76, 0, 1894, 1889, 1, 0, 0, 0, 1894, 1891, 1, 0, 0, 0, 1894, 1893, 1, 0, 0, 0, 1895, 149, 1, 0, 0, 0, 1896, 1901, 3, 152, 76, 0, 1897, 1898, 5, 4, 0, 0, 1898, 1900, 3, 152, 76, 0, 1899, 1897, 1, 0, 0, 0, 1900, 1903, 1, 0, 0, 0, 1901, 1899, 1, 0, 0, 0, 1901, 1902, 1, 0, 0, 0, 1902, 151, 1, 0, 0, 0, 1903, 1901, 1, 0, 0, 0, 1904, 1910, 5, 239, 0, 0, 1905, 1910, 5, 241, 0, 0, 1906, 1910, 3, 156, 78, 0, 1907, 1910, 5, 242, 0, 0, 1908, 1910, 5, 240, 0, 0, 1909, 1904, 1, 0, 0, 0, 1909, 1905, 1, 0, 0, 0, 1909, 1906, 1, 0, 0, 0, 1909, 1907, 1, 0, 0, 0, 1909, 1908, 1, 0, 0, 0, 1910, 153, 1, 0, 0, 0, 1911, 1915, 5, 237, 0, 0, 1912, 1915, 5, 238, 0, 0, 1913, 1915, 5, 236, 0, 0, 1914, 1911, 1, 0, 0, 0, 1914, 1912, 1, 0, 0, 0, 1914, 1913, 1, 0, 0, 0, 1915, 155, 1, 0, 0, 0, 1916, 1917, 7, 23, 0, 0, 1917, 157, 1, 0, 0, 0, 245, 180, 185, 191, 195, 209, 213, 217, 221, 229, 233, 236, 243, 252, 258, 262, 268, 275, 284, 293, 304, 311, 321, 328, 336, 344, 352, 364, 370, 375, 381, 390, 399, 404, 408, 416, 423, 436, 439, 449, 452, 459, 468, 474, 479, 483, 493, 496, 506, 519, 525, 530, 536, 545, 551, 558, 566, 571, 575, 583, 589, 596, 601, 605, 615, 618, 622, 625, 633, 638, 659, 665, 671, 673, 679, 685, 687, 695, 697, 716, 721, 728, 740, 742, 750, 752, 770, 773, 777, 781, 799, 802, 818, 823, 825, 828, 834, 841, 846, 852, 856, 860, 866, 874, 889, 896, 901, 908, 916, 920, 925, 936, 948, 951, 956, 958, 967, 969, 977, 983, 986, 988, 1000, 1007, 1011, 1015, 1019, 1026, 1035, 1038, 1042, 1047, 1051, 1054, 1061, 1072, 1075, 1085, 1088, 1099, 1104, 1112, 1115, 1119, 1123, 1134, 1137, 1144, 1163, 1167, 1171, 1175, 1179, 1183, 1185, 1196, 1201, 1210, 1216, 1220, 1222, 1230, 1237, 1250, 1256, 1267, 1274, 1278, 1286, 1288, 1301, 1309, 1318, 1324, 1332, 1338, 1342, 1347, 1352, 1358, 1372, 1374, 1403, 1414, 1424, 1427, 1432, 1439, 1442, 1451, 1454, 1458, 1461, 1464, 1476, 1479, 1498, 1502, 1510, 1514, 1539, 1542, 1551, 1557, 1563, 1569, 1579, 1588, 1610, 1613, 1616, 1626, 1628, 1635, 1637, 1643, 1651, 1661, 1667, 1679, 1682, 1709, 1721, 1726, 1733, 1739, 1744, 1750, 1772, 1775, 1784, 1787, 1790, 1818, 1829, 1839, 1846, 1855, 1862, 1868, 1875, 1887, 1894, 1901, 1909, 1914] \ No newline at end of file +[4, 1, 267, 2341, 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, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 219, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 224, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 230, 8, 3, 1, 3, 1, 3, 3, 3, 234, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 248, 8, 3, 1, 3, 1, 3, 3, 3, 252, 8, 3, 1, 3, 1, 3, 3, 3, 256, 8, 3, 1, 3, 1, 3, 3, 3, 260, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 268, 8, 3, 1, 3, 1, 3, 3, 3, 272, 8, 3, 1, 3, 3, 3, 275, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 282, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 289, 8, 3, 10, 3, 12, 3, 292, 9, 3, 1, 3, 1, 3, 1, 3, 3, 3, 297, 8, 3, 1, 3, 1, 3, 3, 3, 301, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 307, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 314, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 323, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 332, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 343, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 350, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 360, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 367, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 375, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 383, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 391, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 401, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 408, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 416, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 421, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 432, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 437, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 448, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 459, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 466, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 474, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 481, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 489, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 499, 8, 3, 10, 3, 12, 3, 502, 9, 3, 1, 3, 1, 3, 1, 3, 3, 3, 507, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 512, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 517, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 526, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 537, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 546, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 551, 8, 3, 1, 3, 3, 3, 554, 8, 3, 1, 3, 1, 3, 3, 3, 558, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 566, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 573, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 582, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 587, 8, 3, 1, 3, 3, 3, 590, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 598, 8, 3, 10, 3, 12, 3, 601, 9, 3, 3, 3, 603, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 610, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 619, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 625, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 630, 8, 3, 1, 3, 1, 3, 3, 3, 634, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 642, 8, 3, 10, 3, 12, 3, 645, 9, 3, 3, 3, 647, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 657, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 668, 8, 3, 10, 3, 12, 3, 671, 9, 3, 1, 3, 1, 3, 1, 3, 3, 3, 676, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 681, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 687, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 694, 8, 3, 10, 3, 12, 3, 697, 9, 3, 1, 3, 1, 3, 1, 3, 3, 3, 702, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 709, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 715, 8, 3, 10, 3, 12, 3, 718, 9, 3, 1, 3, 1, 3, 3, 3, 722, 8, 3, 1, 3, 1, 3, 3, 3, 726, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 734, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 740, 8, 3, 1, 3, 1, 3, 1, 3, 5, 3, 745, 8, 3, 10, 3, 12, 3, 748, 9, 3, 1, 3, 1, 3, 3, 3, 752, 8, 3, 1, 3, 1, 3, 3, 3, 756, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 766, 8, 3, 1, 3, 3, 3, 769, 8, 3, 1, 3, 1, 3, 3, 3, 773, 8, 3, 1, 3, 3, 3, 776, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 782, 8, 3, 10, 3, 12, 3, 785, 9, 3, 1, 3, 1, 3, 3, 3, 789, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 814, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 820, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 826, 8, 3, 3, 3, 828, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 834, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 840, 8, 3, 3, 3, 842, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 850, 8, 3, 3, 3, 852, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 871, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 876, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 883, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 895, 8, 3, 3, 3, 897, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 905, 8, 3, 3, 3, 907, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 923, 8, 3, 10, 3, 12, 3, 926, 9, 3, 3, 3, 928, 8, 3, 1, 3, 1, 3, 3, 3, 932, 8, 3, 1, 3, 1, 3, 3, 3, 936, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 952, 8, 3, 10, 3, 12, 3, 955, 9, 3, 3, 3, 957, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 971, 8, 3, 10, 3, 12, 3, 974, 9, 3, 1, 3, 1, 3, 3, 3, 978, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 984, 8, 3, 1, 3, 3, 3, 987, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 4, 3, 994, 8, 3, 11, 3, 12, 3, 995, 3, 3, 998, 8, 3, 1, 4, 3, 4, 1001, 8, 4, 1, 4, 1, 4, 1, 5, 1, 5, 3, 5, 1007, 8, 5, 1, 5, 1, 5, 1, 5, 5, 5, 1012, 8, 5, 10, 5, 12, 5, 1015, 9, 5, 1, 6, 1, 6, 1, 6, 3, 6, 1020, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 1026, 8, 7, 1, 7, 1, 7, 3, 7, 1030, 8, 7, 1, 7, 1, 7, 3, 7, 1034, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 1040, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 5, 9, 1046, 8, 9, 10, 9, 12, 9, 1049, 9, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 5, 12, 1061, 8, 12, 10, 12, 12, 12, 1064, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 1070, 8, 13, 1, 14, 5, 14, 1073, 8, 14, 10, 14, 12, 14, 1076, 9, 14, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 1082, 8, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 1090, 8, 18, 1, 19, 1, 19, 3, 19, 1094, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 1099, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 1110, 8, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 1123, 8, 24, 10, 24, 12, 24, 1126, 9, 24, 3, 24, 1128, 8, 24, 1, 24, 1, 24, 1, 24, 3, 24, 1133, 8, 24, 3, 24, 1135, 8, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 1144, 8, 24, 3, 24, 1146, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1154, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1160, 8, 25, 1, 25, 5, 25, 1163, 8, 25, 10, 25, 12, 25, 1166, 9, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 1175, 8, 26, 10, 26, 12, 26, 1178, 9, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 1184, 8, 26, 1, 27, 1, 27, 3, 27, 1188, 8, 27, 1, 27, 1, 27, 3, 27, 1192, 8, 27, 1, 28, 1, 28, 3, 28, 1196, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 1201, 8, 28, 10, 28, 12, 28, 1204, 9, 28, 1, 28, 1, 28, 1, 28, 1, 28, 5, 28, 1210, 8, 28, 10, 28, 12, 28, 1213, 9, 28, 3, 28, 1215, 8, 28, 1, 28, 1, 28, 3, 28, 1219, 8, 28, 1, 28, 1, 28, 1, 28, 3, 28, 1224, 8, 28, 1, 28, 1, 28, 3, 28, 1228, 8, 28, 1, 29, 3, 29, 1231, 8, 29, 1, 29, 1, 29, 1, 29, 5, 29, 1236, 8, 29, 10, 29, 12, 29, 1239, 9, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 1247, 8, 30, 10, 30, 12, 30, 1250, 9, 30, 3, 30, 1252, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 1260, 8, 30, 10, 30, 12, 30, 1263, 9, 30, 3, 30, 1265, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 1274, 8, 30, 10, 30, 12, 30, 1277, 9, 30, 1, 30, 1, 30, 3, 30, 1281, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 1287, 8, 31, 10, 31, 12, 31, 1290, 9, 31, 3, 31, 1292, 8, 31, 1, 31, 1, 31, 3, 31, 1296, 8, 31, 1, 32, 1, 32, 3, 32, 1300, 8, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 1311, 8, 34, 1, 34, 3, 34, 1314, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1321, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 1340, 8, 35, 5, 35, 1342, 8, 35, 10, 35, 12, 35, 1345, 9, 35, 1, 36, 3, 36, 1348, 8, 36, 1, 36, 1, 36, 3, 36, 1352, 8, 36, 1, 36, 1, 36, 3, 36, 1356, 8, 36, 1, 36, 1, 36, 3, 36, 1360, 8, 36, 3, 36, 1362, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 1371, 8, 37, 10, 37, 12, 37, 1374, 9, 37, 1, 37, 1, 37, 3, 37, 1378, 8, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1387, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 3, 40, 1393, 8, 40, 1, 40, 1, 40, 3, 40, 1397, 8, 40, 3, 40, 1399, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 1405, 8, 41, 10, 41, 12, 41, 1408, 9, 41, 1, 41, 1, 41, 1, 42, 1, 42, 3, 42, 1414, 8, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 5, 42, 1425, 8, 42, 10, 42, 12, 42, 1428, 9, 42, 1, 42, 1, 42, 1, 42, 3, 42, 1433, 8, 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, 42, 3, 42, 1449, 8, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 3, 44, 1456, 8, 44, 1, 44, 1, 44, 3, 44, 1460, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 1468, 8, 44, 10, 44, 12, 44, 1471, 9, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 1483, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 1491, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 1498, 8, 45, 10, 45, 12, 45, 1501, 9, 45, 1, 45, 1, 45, 1, 45, 3, 45, 1506, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 1514, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 1520, 8, 45, 1, 45, 1, 45, 3, 45, 1524, 8, 45, 1, 45, 1, 45, 1, 45, 3, 45, 1529, 8, 45, 1, 45, 1, 45, 1, 45, 3, 45, 1534, 8, 45, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1540, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 1554, 8, 46, 10, 46, 12, 46, 1557, 9, 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, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 4, 47, 1583, 8, 47, 11, 47, 12, 47, 1584, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 1594, 8, 47, 10, 47, 12, 47, 1597, 9, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1606, 8, 47, 1, 47, 3, 47, 1609, 8, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1614, 8, 47, 1, 47, 1, 47, 1, 47, 5, 47, 1619, 8, 47, 10, 47, 12, 47, 1622, 9, 47, 3, 47, 1624, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 1631, 8, 47, 10, 47, 12, 47, 1634, 9, 47, 3, 47, 1636, 8, 47, 1, 47, 1, 47, 3, 47, 1640, 8, 47, 1, 47, 3, 47, 1643, 8, 47, 1, 47, 3, 47, 1646, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 1656, 8, 47, 10, 47, 12, 47, 1659, 9, 47, 3, 47, 1661, 8, 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, 47, 1, 47, 1, 47, 4, 47, 1678, 8, 47, 11, 47, 12, 47, 1679, 1, 47, 1, 47, 3, 47, 1684, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 4, 47, 1690, 8, 47, 11, 47, 12, 47, 1691, 1, 47, 1, 47, 3, 47, 1696, 8, 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, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 1719, 8, 47, 10, 47, 12, 47, 1722, 9, 47, 3, 47, 1724, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1733, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1739, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1745, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1751, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1761, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1770, 8, 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, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 1790, 8, 47, 10, 47, 12, 47, 1793, 9, 47, 3, 47, 1795, 8, 47, 1, 47, 3, 47, 1798, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 1808, 8, 47, 10, 47, 12, 47, 1811, 9, 47, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 1817, 8, 48, 3, 48, 1819, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1825, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 1833, 8, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 3, 54, 1843, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 1849, 8, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 5, 57, 1859, 8, 57, 10, 57, 12, 57, 1862, 9, 57, 3, 57, 1864, 8, 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, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 1889, 8, 58, 10, 58, 12, 58, 1892, 9, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 1901, 8, 58, 10, 58, 12, 58, 1904, 9, 58, 1, 58, 1, 58, 3, 58, 1908, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1915, 8, 58, 1, 58, 1, 58, 5, 58, 1919, 8, 58, 10, 58, 12, 58, 1922, 9, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 5, 59, 1929, 8, 59, 10, 59, 12, 59, 1932, 9, 59, 3, 59, 1934, 8, 59, 1, 59, 1, 59, 1, 59, 1, 59, 5, 59, 1940, 8, 59, 10, 59, 12, 59, 1943, 9, 59, 3, 59, 1945, 8, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 3, 60, 1952, 8, 60, 1, 60, 1, 60, 1, 60, 3, 60, 1957, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 1966, 8, 61, 10, 61, 12, 61, 1969, 9, 61, 3, 61, 1971, 8, 61, 1, 61, 1, 61, 3, 61, 1975, 8, 61, 3, 61, 1977, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 1985, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 1993, 8, 61, 10, 61, 12, 61, 1996, 9, 61, 1, 61, 1, 61, 1, 61, 3, 61, 2001, 8, 61, 3, 61, 2003, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 2010, 8, 62, 1, 62, 1, 62, 3, 62, 2014, 8, 62, 3, 62, 2016, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 2023, 8, 62, 1, 62, 1, 62, 3, 62, 2027, 8, 62, 3, 62, 2029, 8, 62, 3, 62, 2031, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 5, 63, 2038, 8, 63, 10, 63, 12, 63, 2041, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 2051, 8, 63, 1, 64, 1, 64, 3, 64, 2055, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 5, 65, 2063, 8, 65, 10, 65, 12, 65, 2066, 9, 65, 1, 65, 1, 65, 1, 66, 1, 66, 3, 66, 2072, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 2078, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 5, 70, 2104, 8, 70, 10, 70, 12, 70, 2107, 9, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 5, 70, 2118, 8, 70, 10, 70, 12, 70, 2121, 9, 70, 1, 70, 1, 70, 3, 70, 2125, 8, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 5, 70, 2132, 8, 70, 10, 70, 12, 70, 2135, 9, 70, 1, 70, 1, 70, 3, 70, 2139, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 2148, 8, 71, 10, 71, 12, 71, 2151, 9, 71, 3, 71, 2153, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 2160, 8, 71, 10, 71, 12, 71, 2163, 9, 71, 3, 71, 2165, 8, 71, 1, 71, 3, 71, 2168, 8, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 2196, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 2207, 8, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 2217, 8, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 2224, 8, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 2233, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 2240, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 2246, 8, 79, 1, 80, 1, 80, 1, 80, 5, 80, 2251, 8, 80, 10, 80, 12, 80, 2254, 9, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 3, 82, 2264, 8, 82, 1, 83, 1, 83, 1, 83, 3, 83, 2269, 8, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 2276, 8, 84, 1, 85, 1, 85, 1, 85, 5, 85, 2281, 8, 85, 10, 85, 12, 85, 2284, 9, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 2291, 8, 86, 1, 87, 1, 87, 1, 87, 3, 87, 2296, 8, 87, 1, 88, 1, 88, 3, 88, 2300, 8, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 3, 90, 2309, 8, 90, 1, 91, 1, 91, 1, 91, 3, 91, 2314, 8, 91, 1, 92, 5, 92, 2317, 8, 92, 10, 92, 12, 92, 2320, 9, 92, 1, 93, 1, 93, 1, 93, 3, 93, 2325, 8, 93, 1, 94, 1, 94, 1, 94, 3, 94, 2330, 8, 94, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 3, 96, 2337, 8, 96, 1, 97, 1, 97, 1, 97, 0, 6, 50, 70, 88, 92, 94, 116, 98, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 0, 25, 2, 0, 28, 28, 172, 172, 2, 0, 82, 82, 97, 97, 2, 0, 69, 69, 98, 98, 2, 0, 52, 52, 105, 105, 1, 0, 181, 182, 2, 0, 12, 12, 253, 253, 2, 0, 68, 68, 219, 219, 2, 0, 19, 19, 54, 54, 2, 0, 78, 78, 114, 114, 2, 0, 12, 12, 59, 59, 2, 0, 22, 22, 198, 198, 1, 0, 244, 245, 1, 0, 246, 248, 1, 0, 238, 243, 3, 0, 12, 12, 16, 16, 193, 193, 2, 0, 75, 75, 212, 212, 5, 0, 50, 50, 94, 94, 127, 128, 185, 185, 236, 236, 1, 0, 131, 134, 2, 0, 79, 79, 156, 156, 3, 0, 89, 89, 109, 109, 206, 206, 4, 0, 60, 60, 106, 106, 122, 122, 226, 226, 2, 0, 145, 145, 235, 235, 3, 0, 199, 200, 209, 209, 229, 229, 2, 0, 58, 58, 64, 64, 53, 0, 10, 12, 14, 14, 16, 17, 19, 22, 24, 24, 26, 28, 31, 36, 39, 39, 42, 42, 44, 44, 48, 50, 52, 52, 54, 54, 56, 58, 60, 60, 63, 64, 66, 66, 69, 69, 72, 72, 74, 74, 76, 79, 81, 81, 84, 89, 92, 92, 94, 96, 98, 98, 100, 100, 103, 103, 105, 106, 108, 109, 111, 115, 117, 117, 119, 119, 122, 129, 131, 136, 140, 143, 145, 146, 149, 149, 151, 156, 158, 163, 165, 175, 177, 179, 181, 186, 188, 200, 202, 206, 208, 211, 213, 215, 217, 218, 220, 220, 222, 224, 226, 226, 228, 230, 234, 237, 2694, 0, 196, 1, 0, 0, 0, 2, 199, 1, 0, 0, 0, 4, 202, 1, 0, 0, 0, 6, 997, 1, 0, 0, 0, 8, 1000, 1, 0, 0, 0, 10, 1004, 1, 0, 0, 0, 12, 1019, 1, 0, 0, 0, 14, 1021, 1, 0, 0, 0, 16, 1035, 1, 0, 0, 0, 18, 1041, 1, 0, 0, 0, 20, 1052, 1, 0, 0, 0, 22, 1056, 1, 0, 0, 0, 24, 1062, 1, 0, 0, 0, 26, 1069, 1, 0, 0, 0, 28, 1074, 1, 0, 0, 0, 30, 1077, 1, 0, 0, 0, 32, 1081, 1, 0, 0, 0, 34, 1083, 1, 0, 0, 0, 36, 1086, 1, 0, 0, 0, 38, 1093, 1, 0, 0, 0, 40, 1098, 1, 0, 0, 0, 42, 1109, 1, 0, 0, 0, 44, 1111, 1, 0, 0, 0, 46, 1113, 1, 0, 0, 0, 48, 1116, 1, 0, 0, 0, 50, 1147, 1, 0, 0, 0, 52, 1183, 1, 0, 0, 0, 54, 1185, 1, 0, 0, 0, 56, 1193, 1, 0, 0, 0, 58, 1230, 1, 0, 0, 0, 60, 1280, 1, 0, 0, 0, 62, 1295, 1, 0, 0, 0, 64, 1297, 1, 0, 0, 0, 66, 1306, 1, 0, 0, 0, 68, 1320, 1, 0, 0, 0, 70, 1322, 1, 0, 0, 0, 72, 1361, 1, 0, 0, 0, 74, 1377, 1, 0, 0, 0, 76, 1379, 1, 0, 0, 0, 78, 1388, 1, 0, 0, 0, 80, 1390, 1, 0, 0, 0, 82, 1400, 1, 0, 0, 0, 84, 1448, 1, 0, 0, 0, 86, 1450, 1, 0, 0, 0, 88, 1459, 1, 0, 0, 0, 90, 1533, 1, 0, 0, 0, 92, 1539, 1, 0, 0, 0, 94, 1797, 1, 0, 0, 0, 96, 1818, 1, 0, 0, 0, 98, 1824, 1, 0, 0, 0, 100, 1832, 1, 0, 0, 0, 102, 1834, 1, 0, 0, 0, 104, 1836, 1, 0, 0, 0, 106, 1838, 1, 0, 0, 0, 108, 1840, 1, 0, 0, 0, 110, 1850, 1, 0, 0, 0, 112, 1852, 1, 0, 0, 0, 114, 1854, 1, 0, 0, 0, 116, 1914, 1, 0, 0, 0, 118, 1923, 1, 0, 0, 0, 120, 1951, 1, 0, 0, 0, 122, 1958, 1, 0, 0, 0, 124, 2030, 1, 0, 0, 0, 126, 2050, 1, 0, 0, 0, 128, 2052, 1, 0, 0, 0, 130, 2056, 1, 0, 0, 0, 132, 2071, 1, 0, 0, 0, 134, 2077, 1, 0, 0, 0, 136, 2079, 1, 0, 0, 0, 138, 2084, 1, 0, 0, 0, 140, 2138, 1, 0, 0, 0, 142, 2140, 1, 0, 0, 0, 144, 2195, 1, 0, 0, 0, 146, 2206, 1, 0, 0, 0, 148, 2208, 1, 0, 0, 0, 150, 2216, 1, 0, 0, 0, 152, 2223, 1, 0, 0, 0, 154, 2232, 1, 0, 0, 0, 156, 2239, 1, 0, 0, 0, 158, 2245, 1, 0, 0, 0, 160, 2247, 1, 0, 0, 0, 162, 2255, 1, 0, 0, 0, 164, 2263, 1, 0, 0, 0, 166, 2268, 1, 0, 0, 0, 168, 2275, 1, 0, 0, 0, 170, 2277, 1, 0, 0, 0, 172, 2290, 1, 0, 0, 0, 174, 2295, 1, 0, 0, 0, 176, 2299, 1, 0, 0, 0, 178, 2301, 1, 0, 0, 0, 180, 2305, 1, 0, 0, 0, 182, 2313, 1, 0, 0, 0, 184, 2318, 1, 0, 0, 0, 186, 2324, 1, 0, 0, 0, 188, 2329, 1, 0, 0, 0, 190, 2331, 1, 0, 0, 0, 192, 2336, 1, 0, 0, 0, 194, 2338, 1, 0, 0, 0, 196, 197, 3, 6, 3, 0, 197, 198, 5, 0, 0, 1, 198, 1, 1, 0, 0, 0, 199, 200, 3, 86, 43, 0, 200, 201, 5, 0, 0, 1, 201, 3, 1, 0, 0, 0, 202, 203, 3, 32, 16, 0, 203, 204, 5, 0, 0, 1, 204, 5, 1, 0, 0, 0, 205, 998, 3, 8, 4, 0, 206, 207, 5, 223, 0, 0, 207, 998, 3, 172, 86, 0, 208, 209, 5, 223, 0, 0, 209, 210, 3, 172, 86, 0, 210, 211, 5, 1, 0, 0, 211, 212, 3, 172, 86, 0, 212, 998, 1, 0, 0, 0, 213, 214, 5, 38, 0, 0, 214, 218, 5, 183, 0, 0, 215, 216, 5, 95, 0, 0, 216, 217, 5, 138, 0, 0, 217, 219, 5, 71, 0, 0, 218, 215, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 223, 3, 160, 80, 0, 221, 222, 5, 233, 0, 0, 222, 224, 3, 18, 9, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 998, 1, 0, 0, 0, 225, 226, 5, 61, 0, 0, 226, 229, 5, 183, 0, 0, 227, 228, 5, 95, 0, 0, 228, 230, 5, 71, 0, 0, 229, 227, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 233, 3, 160, 80, 0, 232, 234, 7, 0, 0, 0, 233, 232, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 998, 1, 0, 0, 0, 235, 236, 5, 13, 0, 0, 236, 237, 5, 183, 0, 0, 237, 238, 3, 160, 80, 0, 238, 239, 5, 167, 0, 0, 239, 240, 5, 210, 0, 0, 240, 241, 3, 172, 86, 0, 241, 998, 1, 0, 0, 0, 242, 243, 5, 38, 0, 0, 243, 247, 5, 201, 0, 0, 244, 245, 5, 95, 0, 0, 245, 246, 5, 138, 0, 0, 246, 248, 5, 71, 0, 0, 247, 244, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 251, 3, 160, 80, 0, 250, 252, 3, 82, 41, 0, 251, 250, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 255, 1, 0, 0, 0, 253, 254, 5, 34, 0, 0, 254, 256, 3, 96, 48, 0, 255, 253, 1, 0, 0, 0, 255, 256, 1, 0, 0, 0, 256, 259, 1, 0, 0, 0, 257, 258, 5, 233, 0, 0, 258, 260, 3, 18, 9, 0, 259, 257, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 261, 1, 0, 0, 0, 261, 267, 5, 18, 0, 0, 262, 268, 3, 8, 4, 0, 263, 264, 5, 2, 0, 0, 264, 265, 3, 8, 4, 0, 265, 266, 5, 3, 0, 0, 266, 268, 1, 0, 0, 0, 267, 262, 1, 0, 0, 0, 267, 263, 1, 0, 0, 0, 268, 274, 1, 0, 0, 0, 269, 271, 5, 233, 0, 0, 270, 272, 5, 135, 0, 0, 271, 270, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 275, 5, 48, 0, 0, 274, 269, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 998, 1, 0, 0, 0, 276, 277, 5, 38, 0, 0, 277, 281, 5, 201, 0, 0, 278, 279, 5, 95, 0, 0, 279, 280, 5, 138, 0, 0, 280, 282, 5, 71, 0, 0, 281, 278, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 284, 3, 160, 80, 0, 284, 285, 5, 2, 0, 0, 285, 290, 3, 12, 6, 0, 286, 287, 5, 4, 0, 0, 287, 289, 3, 12, 6, 0, 288, 286, 1, 0, 0, 0, 289, 292, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 290, 291, 1, 0, 0, 0, 291, 293, 1, 0, 0, 0, 292, 290, 1, 0, 0, 0, 293, 296, 5, 3, 0, 0, 294, 295, 5, 34, 0, 0, 295, 297, 3, 96, 48, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 300, 1, 0, 0, 0, 298, 299, 5, 233, 0, 0, 299, 301, 3, 18, 9, 0, 300, 298, 1, 0, 0, 0, 300, 301, 1, 0, 0, 0, 301, 998, 1, 0, 0, 0, 302, 303, 5, 61, 0, 0, 303, 306, 5, 201, 0, 0, 304, 305, 5, 95, 0, 0, 305, 307, 5, 71, 0, 0, 306, 304, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 998, 3, 160, 80, 0, 309, 310, 5, 101, 0, 0, 310, 311, 5, 104, 0, 0, 311, 313, 3, 160, 80, 0, 312, 314, 3, 82, 41, 0, 313, 312, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 316, 3, 8, 4, 0, 316, 998, 1, 0, 0, 0, 317, 318, 5, 53, 0, 0, 318, 319, 5, 82, 0, 0, 319, 322, 3, 160, 80, 0, 320, 321, 5, 232, 0, 0, 321, 323, 3, 88, 44, 0, 322, 320, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 998, 1, 0, 0, 0, 324, 325, 5, 213, 0, 0, 325, 326, 5, 201, 0, 0, 326, 998, 3, 160, 80, 0, 327, 328, 5, 13, 0, 0, 328, 331, 5, 201, 0, 0, 329, 330, 5, 95, 0, 0, 330, 332, 5, 71, 0, 0, 331, 329, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 3, 160, 80, 0, 334, 335, 5, 167, 0, 0, 335, 336, 5, 210, 0, 0, 336, 337, 3, 160, 80, 0, 337, 998, 1, 0, 0, 0, 338, 339, 5, 13, 0, 0, 339, 342, 5, 201, 0, 0, 340, 341, 5, 95, 0, 0, 341, 343, 5, 71, 0, 0, 342, 340, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 345, 3, 160, 80, 0, 345, 346, 5, 167, 0, 0, 346, 349, 5, 32, 0, 0, 347, 348, 5, 95, 0, 0, 348, 350, 5, 71, 0, 0, 349, 347, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 3, 172, 86, 0, 352, 353, 5, 210, 0, 0, 353, 354, 3, 172, 86, 0, 354, 998, 1, 0, 0, 0, 355, 356, 5, 13, 0, 0, 356, 359, 5, 201, 0, 0, 357, 358, 5, 95, 0, 0, 358, 360, 5, 71, 0, 0, 359, 357, 1, 0, 0, 0, 359, 360, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 362, 3, 160, 80, 0, 362, 363, 5, 61, 0, 0, 363, 366, 5, 32, 0, 0, 364, 365, 5, 95, 0, 0, 365, 367, 5, 71, 0, 0, 366, 364, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 369, 3, 160, 80, 0, 369, 998, 1, 0, 0, 0, 370, 371, 5, 13, 0, 0, 371, 374, 5, 201, 0, 0, 372, 373, 5, 95, 0, 0, 373, 375, 5, 71, 0, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 376, 1, 0, 0, 0, 376, 377, 3, 160, 80, 0, 377, 378, 5, 10, 0, 0, 378, 382, 5, 32, 0, 0, 379, 380, 5, 95, 0, 0, 380, 381, 5, 138, 0, 0, 381, 383, 5, 71, 0, 0, 382, 379, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 385, 3, 14, 7, 0, 385, 998, 1, 0, 0, 0, 386, 387, 5, 13, 0, 0, 387, 390, 5, 201, 0, 0, 388, 389, 5, 95, 0, 0, 389, 391, 5, 71, 0, 0, 390, 388, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 393, 3, 160, 80, 0, 393, 394, 5, 10, 0, 0, 394, 395, 3, 176, 88, 0, 395, 998, 1, 0, 0, 0, 396, 397, 5, 13, 0, 0, 397, 400, 5, 201, 0, 0, 398, 399, 5, 95, 0, 0, 399, 401, 5, 71, 0, 0, 400, 398, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 160, 80, 0, 403, 404, 5, 61, 0, 0, 404, 407, 5, 37, 0, 0, 405, 406, 5, 95, 0, 0, 406, 408, 5, 71, 0, 0, 407, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 3, 172, 86, 0, 410, 998, 1, 0, 0, 0, 411, 412, 5, 13, 0, 0, 412, 415, 5, 201, 0, 0, 413, 414, 5, 95, 0, 0, 414, 416, 5, 71, 0, 0, 415, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 418, 3, 160, 80, 0, 418, 420, 5, 13, 0, 0, 419, 421, 5, 32, 0, 0, 420, 419, 1, 0, 0, 0, 420, 421, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 423, 3, 172, 86, 0, 423, 424, 5, 190, 0, 0, 424, 425, 5, 138, 0, 0, 425, 426, 5, 139, 0, 0, 426, 998, 1, 0, 0, 0, 427, 428, 5, 13, 0, 0, 428, 431, 5, 201, 0, 0, 429, 430, 5, 95, 0, 0, 430, 432, 5, 71, 0, 0, 431, 429, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 434, 3, 160, 80, 0, 434, 436, 5, 13, 0, 0, 435, 437, 5, 32, 0, 0, 436, 435, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 439, 3, 172, 86, 0, 439, 440, 5, 61, 0, 0, 440, 441, 5, 138, 0, 0, 441, 442, 5, 139, 0, 0, 442, 998, 1, 0, 0, 0, 443, 444, 5, 13, 0, 0, 444, 447, 5, 201, 0, 0, 445, 446, 5, 95, 0, 0, 446, 448, 5, 71, 0, 0, 447, 445, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 450, 3, 160, 80, 0, 450, 451, 5, 190, 0, 0, 451, 452, 5, 160, 0, 0, 452, 453, 3, 18, 9, 0, 453, 998, 1, 0, 0, 0, 454, 455, 5, 13, 0, 0, 455, 458, 5, 201, 0, 0, 456, 457, 5, 95, 0, 0, 457, 459, 5, 71, 0, 0, 458, 456, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 461, 3, 160, 80, 0, 461, 462, 5, 61, 0, 0, 462, 465, 5, 24, 0, 0, 463, 464, 5, 95, 0, 0, 464, 466, 5, 71, 0, 0, 465, 463, 1, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 468, 3, 96, 48, 0, 468, 998, 1, 0, 0, 0, 469, 470, 5, 13, 0, 0, 470, 473, 5, 201, 0, 0, 471, 472, 5, 95, 0, 0, 472, 474, 5, 71, 0, 0, 473, 471, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 475, 1, 0, 0, 0, 475, 476, 3, 160, 80, 0, 476, 477, 5, 61, 0, 0, 477, 480, 5, 204, 0, 0, 478, 479, 5, 95, 0, 0, 479, 481, 5, 71, 0, 0, 480, 478, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 483, 3, 96, 48, 0, 483, 998, 1, 0, 0, 0, 484, 485, 5, 14, 0, 0, 485, 488, 3, 160, 80, 0, 486, 487, 5, 233, 0, 0, 487, 489, 3, 18, 9, 0, 488, 486, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 998, 1, 0, 0, 0, 490, 491, 5, 38, 0, 0, 491, 492, 5, 215, 0, 0, 492, 493, 3, 160, 80, 0, 493, 506, 5, 18, 0, 0, 494, 495, 5, 2, 0, 0, 495, 500, 3, 22, 11, 0, 496, 497, 5, 4, 0, 0, 497, 499, 3, 22, 11, 0, 498, 496, 1, 0, 0, 0, 499, 502, 1, 0, 0, 0, 500, 498, 1, 0, 0, 0, 500, 501, 1, 0, 0, 0, 501, 503, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 503, 504, 5, 3, 0, 0, 504, 507, 1, 0, 0, 0, 505, 507, 3, 116, 58, 0, 506, 494, 1, 0, 0, 0, 506, 505, 1, 0, 0, 0, 507, 998, 1, 0, 0, 0, 508, 511, 5, 38, 0, 0, 509, 510, 5, 147, 0, 0, 510, 512, 5, 169, 0, 0, 511, 509, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 514, 5, 230, 0, 0, 514, 516, 3, 160, 80, 0, 515, 517, 3, 46, 23, 0, 516, 515, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 519, 5, 18, 0, 0, 519, 520, 3, 8, 4, 0, 520, 998, 1, 0, 0, 0, 521, 522, 5, 13, 0, 0, 522, 525, 5, 230, 0, 0, 523, 524, 5, 95, 0, 0, 524, 526, 5, 71, 0, 0, 525, 523, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 528, 3, 160, 80, 0, 528, 529, 5, 167, 0, 0, 529, 530, 5, 210, 0, 0, 530, 531, 3, 160, 80, 0, 531, 998, 1, 0, 0, 0, 532, 533, 5, 61, 0, 0, 533, 536, 5, 230, 0, 0, 534, 535, 5, 95, 0, 0, 535, 537, 5, 71, 0, 0, 536, 534, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 998, 3, 160, 80, 0, 539, 540, 5, 38, 0, 0, 540, 541, 5, 125, 0, 0, 541, 545, 5, 230, 0, 0, 542, 543, 5, 95, 0, 0, 543, 544, 5, 138, 0, 0, 544, 546, 5, 71, 0, 0, 545, 542, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 550, 3, 160, 80, 0, 548, 549, 5, 34, 0, 0, 549, 551, 3, 96, 48, 0, 550, 548, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 553, 1, 0, 0, 0, 552, 554, 3, 46, 23, 0, 553, 552, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 557, 1, 0, 0, 0, 555, 556, 5, 233, 0, 0, 556, 558, 3, 18, 9, 0, 557, 555, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 565, 5, 18, 0, 0, 560, 566, 3, 8, 4, 0, 561, 562, 5, 2, 0, 0, 562, 563, 3, 8, 4, 0, 563, 564, 5, 3, 0, 0, 564, 566, 1, 0, 0, 0, 565, 560, 1, 0, 0, 0, 565, 561, 1, 0, 0, 0, 566, 998, 1, 0, 0, 0, 567, 568, 5, 61, 0, 0, 568, 569, 5, 125, 0, 0, 569, 572, 5, 230, 0, 0, 570, 571, 5, 95, 0, 0, 571, 573, 5, 71, 0, 0, 572, 570, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 574, 1, 0, 0, 0, 574, 998, 3, 160, 80, 0, 575, 576, 5, 165, 0, 0, 576, 577, 5, 125, 0, 0, 577, 578, 5, 230, 0, 0, 578, 581, 3, 160, 80, 0, 579, 580, 5, 232, 0, 0, 580, 582, 3, 88, 44, 0, 581, 579, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 998, 1, 0, 0, 0, 583, 586, 5, 38, 0, 0, 584, 585, 5, 147, 0, 0, 585, 587, 5, 169, 0, 0, 586, 584, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 589, 1, 0, 0, 0, 588, 590, 5, 205, 0, 0, 589, 588, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 592, 5, 84, 0, 0, 592, 593, 3, 160, 80, 0, 593, 602, 5, 2, 0, 0, 594, 599, 3, 22, 11, 0, 595, 596, 5, 4, 0, 0, 596, 598, 3, 22, 11, 0, 597, 595, 1, 0, 0, 0, 598, 601, 1, 0, 0, 0, 599, 597, 1, 0, 0, 0, 599, 600, 1, 0, 0, 0, 600, 603, 1, 0, 0, 0, 601, 599, 1, 0, 0, 0, 602, 594, 1, 0, 0, 0, 602, 603, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 605, 5, 3, 0, 0, 605, 606, 5, 174, 0, 0, 606, 609, 3, 116, 58, 0, 607, 608, 5, 34, 0, 0, 608, 610, 3, 96, 48, 0, 609, 607, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 612, 3, 24, 12, 0, 612, 613, 3, 32, 16, 0, 613, 998, 1, 0, 0, 0, 614, 615, 5, 13, 0, 0, 615, 616, 5, 84, 0, 0, 616, 618, 3, 160, 80, 0, 617, 619, 3, 114, 57, 0, 618, 617, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 621, 3, 28, 14, 0, 621, 998, 1, 0, 0, 0, 622, 624, 5, 61, 0, 0, 623, 625, 5, 205, 0, 0, 624, 623, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 629, 5, 84, 0, 0, 627, 628, 5, 95, 0, 0, 628, 630, 5, 71, 0, 0, 629, 627, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 633, 3, 160, 80, 0, 632, 634, 3, 114, 57, 0, 633, 632, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 998, 1, 0, 0, 0, 635, 636, 5, 26, 0, 0, 636, 637, 3, 160, 80, 0, 637, 646, 5, 2, 0, 0, 638, 643, 3, 156, 78, 0, 639, 640, 5, 4, 0, 0, 640, 642, 3, 156, 78, 0, 641, 639, 1, 0, 0, 0, 642, 645, 1, 0, 0, 0, 643, 641, 1, 0, 0, 0, 643, 644, 1, 0, 0, 0, 644, 647, 1, 0, 0, 0, 645, 643, 1, 0, 0, 0, 646, 638, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 648, 1, 0, 0, 0, 648, 649, 5, 3, 0, 0, 649, 998, 1, 0, 0, 0, 650, 651, 5, 38, 0, 0, 651, 652, 5, 177, 0, 0, 652, 656, 3, 172, 86, 0, 653, 654, 5, 233, 0, 0, 654, 655, 5, 11, 0, 0, 655, 657, 3, 166, 83, 0, 656, 653, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 998, 1, 0, 0, 0, 658, 659, 5, 61, 0, 0, 659, 660, 5, 177, 0, 0, 660, 998, 3, 172, 86, 0, 661, 662, 5, 86, 0, 0, 662, 663, 3, 170, 85, 0, 663, 664, 5, 210, 0, 0, 664, 669, 3, 168, 84, 0, 665, 666, 5, 4, 0, 0, 666, 668, 3, 168, 84, 0, 667, 665, 1, 0, 0, 0, 668, 671, 1, 0, 0, 0, 669, 667, 1, 0, 0, 0, 669, 670, 1, 0, 0, 0, 670, 675, 1, 0, 0, 0, 671, 669, 1, 0, 0, 0, 672, 673, 5, 233, 0, 0, 673, 674, 5, 11, 0, 0, 674, 676, 5, 146, 0, 0, 675, 672, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 680, 1, 0, 0, 0, 677, 678, 5, 87, 0, 0, 678, 679, 5, 25, 0, 0, 679, 681, 3, 166, 83, 0, 680, 677, 1, 0, 0, 0, 680, 681, 1, 0, 0, 0, 681, 998, 1, 0, 0, 0, 682, 686, 5, 175, 0, 0, 683, 684, 5, 11, 0, 0, 684, 685, 5, 146, 0, 0, 685, 687, 5, 80, 0, 0, 686, 683, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 3, 170, 85, 0, 689, 690, 5, 82, 0, 0, 690, 695, 3, 168, 84, 0, 691, 692, 5, 4, 0, 0, 692, 694, 3, 168, 84, 0, 693, 691, 1, 0, 0, 0, 694, 697, 1, 0, 0, 0, 695, 693, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 701, 1, 0, 0, 0, 697, 695, 1, 0, 0, 0, 698, 699, 5, 87, 0, 0, 699, 700, 5, 25, 0, 0, 700, 702, 3, 166, 83, 0, 701, 698, 1, 0, 0, 0, 701, 702, 1, 0, 0, 0, 702, 998, 1, 0, 0, 0, 703, 704, 5, 190, 0, 0, 704, 708, 5, 177, 0, 0, 705, 709, 5, 12, 0, 0, 706, 709, 5, 136, 0, 0, 707, 709, 3, 172, 86, 0, 708, 705, 1, 0, 0, 0, 708, 706, 1, 0, 0, 0, 708, 707, 1, 0, 0, 0, 709, 998, 1, 0, 0, 0, 710, 721, 5, 86, 0, 0, 711, 716, 3, 158, 79, 0, 712, 713, 5, 4, 0, 0, 713, 715, 3, 158, 79, 0, 714, 712, 1, 0, 0, 0, 715, 718, 1, 0, 0, 0, 716, 714, 1, 0, 0, 0, 716, 717, 1, 0, 0, 0, 717, 722, 1, 0, 0, 0, 718, 716, 1, 0, 0, 0, 719, 720, 5, 12, 0, 0, 720, 722, 5, 159, 0, 0, 721, 711, 1, 0, 0, 0, 721, 719, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, 723, 725, 5, 144, 0, 0, 724, 726, 5, 201, 0, 0, 725, 724, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 727, 1, 0, 0, 0, 727, 728, 3, 160, 80, 0, 728, 729, 5, 210, 0, 0, 729, 733, 3, 168, 84, 0, 730, 731, 5, 233, 0, 0, 731, 732, 5, 86, 0, 0, 732, 734, 5, 146, 0, 0, 733, 730, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 998, 1, 0, 0, 0, 735, 739, 5, 175, 0, 0, 736, 737, 5, 86, 0, 0, 737, 738, 5, 146, 0, 0, 738, 740, 5, 80, 0, 0, 739, 736, 1, 0, 0, 0, 739, 740, 1, 0, 0, 0, 740, 751, 1, 0, 0, 0, 741, 746, 3, 158, 79, 0, 742, 743, 5, 4, 0, 0, 743, 745, 3, 158, 79, 0, 744, 742, 1, 0, 0, 0, 745, 748, 1, 0, 0, 0, 746, 744, 1, 0, 0, 0, 746, 747, 1, 0, 0, 0, 747, 752, 1, 0, 0, 0, 748, 746, 1, 0, 0, 0, 749, 750, 5, 12, 0, 0, 750, 752, 5, 159, 0, 0, 751, 741, 1, 0, 0, 0, 751, 749, 1, 0, 0, 0, 752, 753, 1, 0, 0, 0, 753, 755, 5, 144, 0, 0, 754, 756, 5, 201, 0, 0, 755, 754, 1, 0, 0, 0, 755, 756, 1, 0, 0, 0, 756, 757, 1, 0, 0, 0, 757, 758, 3, 160, 80, 0, 758, 759, 5, 82, 0, 0, 759, 760, 3, 168, 84, 0, 760, 998, 1, 0, 0, 0, 761, 762, 5, 192, 0, 0, 762, 768, 5, 88, 0, 0, 763, 765, 5, 144, 0, 0, 764, 766, 5, 201, 0, 0, 765, 764, 1, 0, 0, 0, 765, 766, 1, 0, 0, 0, 766, 767, 1, 0, 0, 0, 767, 769, 3, 160, 80, 0, 768, 763, 1, 0, 0, 0, 768, 769, 1, 0, 0, 0, 769, 998, 1, 0, 0, 0, 770, 772, 5, 72, 0, 0, 771, 773, 5, 14, 0, 0, 772, 771, 1, 0, 0, 0, 772, 773, 1, 0, 0, 0, 773, 775, 1, 0, 0, 0, 774, 776, 5, 228, 0, 0, 775, 774, 1, 0, 0, 0, 775, 776, 1, 0, 0, 0, 776, 788, 1, 0, 0, 0, 777, 778, 5, 2, 0, 0, 778, 783, 3, 150, 75, 0, 779, 780, 5, 4, 0, 0, 780, 782, 3, 150, 75, 0, 781, 779, 1, 0, 0, 0, 782, 785, 1, 0, 0, 0, 783, 781, 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 786, 1, 0, 0, 0, 785, 783, 1, 0, 0, 0, 786, 787, 5, 3, 0, 0, 787, 789, 1, 0, 0, 0, 788, 777, 1, 0, 0, 0, 788, 789, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 998, 3, 6, 3, 0, 791, 792, 5, 192, 0, 0, 792, 793, 5, 38, 0, 0, 793, 794, 5, 201, 0, 0, 794, 998, 3, 160, 80, 0, 795, 796, 5, 192, 0, 0, 796, 797, 5, 38, 0, 0, 797, 798, 5, 183, 0, 0, 798, 998, 3, 160, 80, 0, 799, 800, 5, 192, 0, 0, 800, 801, 5, 38, 0, 0, 801, 802, 5, 230, 0, 0, 802, 998, 3, 160, 80, 0, 803, 804, 5, 192, 0, 0, 804, 805, 5, 38, 0, 0, 805, 806, 5, 125, 0, 0, 806, 807, 5, 230, 0, 0, 807, 998, 3, 160, 80, 0, 808, 809, 5, 192, 0, 0, 809, 810, 5, 38, 0, 0, 810, 811, 5, 84, 0, 0, 811, 813, 3, 160, 80, 0, 812, 814, 3, 114, 57, 0, 813, 812, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 998, 1, 0, 0, 0, 815, 816, 5, 192, 0, 0, 816, 819, 5, 202, 0, 0, 817, 818, 7, 1, 0, 0, 818, 820, 3, 160, 80, 0, 819, 817, 1, 0, 0, 0, 819, 820, 1, 0, 0, 0, 820, 827, 1, 0, 0, 0, 821, 822, 5, 118, 0, 0, 822, 825, 3, 96, 48, 0, 823, 824, 5, 67, 0, 0, 824, 826, 3, 96, 48, 0, 825, 823, 1, 0, 0, 0, 825, 826, 1, 0, 0, 0, 826, 828, 1, 0, 0, 0, 827, 821, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 998, 1, 0, 0, 0, 829, 830, 5, 192, 0, 0, 830, 833, 5, 184, 0, 0, 831, 832, 7, 1, 0, 0, 832, 834, 3, 172, 86, 0, 833, 831, 1, 0, 0, 0, 833, 834, 1, 0, 0, 0, 834, 841, 1, 0, 0, 0, 835, 836, 5, 118, 0, 0, 836, 839, 3, 96, 48, 0, 837, 838, 5, 67, 0, 0, 838, 840, 3, 96, 48, 0, 839, 837, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 842, 1, 0, 0, 0, 841, 835, 1, 0, 0, 0, 841, 842, 1, 0, 0, 0, 842, 998, 1, 0, 0, 0, 843, 844, 5, 192, 0, 0, 844, 851, 5, 31, 0, 0, 845, 846, 5, 118, 0, 0, 846, 849, 3, 96, 48, 0, 847, 848, 5, 67, 0, 0, 848, 850, 3, 96, 48, 0, 849, 847, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 852, 1, 0, 0, 0, 851, 845, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 998, 1, 0, 0, 0, 853, 854, 5, 192, 0, 0, 854, 855, 5, 33, 0, 0, 855, 856, 7, 1, 0, 0, 856, 998, 3, 160, 80, 0, 857, 858, 5, 192, 0, 0, 858, 859, 5, 196, 0, 0, 859, 860, 5, 80, 0, 0, 860, 998, 3, 160, 80, 0, 861, 862, 5, 192, 0, 0, 862, 863, 5, 196, 0, 0, 863, 864, 5, 80, 0, 0, 864, 865, 5, 2, 0, 0, 865, 866, 3, 56, 28, 0, 866, 867, 5, 3, 0, 0, 867, 998, 1, 0, 0, 0, 868, 870, 5, 192, 0, 0, 869, 871, 5, 42, 0, 0, 870, 869, 1, 0, 0, 0, 870, 871, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 875, 5, 178, 0, 0, 873, 874, 7, 1, 0, 0, 874, 876, 3, 172, 86, 0, 875, 873, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 998, 1, 0, 0, 0, 877, 878, 5, 192, 0, 0, 878, 879, 5, 177, 0, 0, 879, 882, 5, 88, 0, 0, 880, 881, 7, 1, 0, 0, 881, 883, 3, 172, 86, 0, 882, 880, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 998, 1, 0, 0, 0, 884, 885, 5, 55, 0, 0, 885, 998, 3, 160, 80, 0, 886, 887, 5, 54, 0, 0, 887, 998, 3, 160, 80, 0, 888, 889, 5, 192, 0, 0, 889, 896, 5, 85, 0, 0, 890, 891, 5, 118, 0, 0, 891, 894, 3, 96, 48, 0, 892, 893, 5, 67, 0, 0, 893, 895, 3, 96, 48, 0, 894, 892, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 897, 1, 0, 0, 0, 896, 890, 1, 0, 0, 0, 896, 897, 1, 0, 0, 0, 897, 998, 1, 0, 0, 0, 898, 899, 5, 192, 0, 0, 899, 906, 5, 189, 0, 0, 900, 901, 5, 118, 0, 0, 901, 904, 3, 96, 48, 0, 902, 903, 5, 67, 0, 0, 903, 905, 3, 96, 48, 0, 904, 902, 1, 0, 0, 0, 904, 905, 1, 0, 0, 0, 905, 907, 1, 0, 0, 0, 906, 900, 1, 0, 0, 0, 906, 907, 1, 0, 0, 0, 907, 998, 1, 0, 0, 0, 908, 909, 5, 190, 0, 0, 909, 910, 5, 189, 0, 0, 910, 911, 3, 160, 80, 0, 911, 912, 5, 238, 0, 0, 912, 913, 3, 86, 43, 0, 913, 998, 1, 0, 0, 0, 914, 915, 5, 170, 0, 0, 915, 916, 5, 189, 0, 0, 916, 998, 3, 160, 80, 0, 917, 918, 5, 195, 0, 0, 918, 927, 5, 211, 0, 0, 919, 924, 3, 152, 76, 0, 920, 921, 5, 4, 0, 0, 921, 923, 3, 152, 76, 0, 922, 920, 1, 0, 0, 0, 923, 926, 1, 0, 0, 0, 924, 922, 1, 0, 0, 0, 924, 925, 1, 0, 0, 0, 925, 928, 1, 0, 0, 0, 926, 924, 1, 0, 0, 0, 927, 919, 1, 0, 0, 0, 927, 928, 1, 0, 0, 0, 928, 998, 1, 0, 0, 0, 929, 931, 5, 35, 0, 0, 930, 932, 5, 234, 0, 0, 931, 930, 1, 0, 0, 0, 931, 932, 1, 0, 0, 0, 932, 998, 1, 0, 0, 0, 933, 935, 5, 179, 0, 0, 934, 936, 5, 234, 0, 0, 935, 934, 1, 0, 0, 0, 935, 936, 1, 0, 0, 0, 936, 998, 1, 0, 0, 0, 937, 938, 5, 157, 0, 0, 938, 939, 3, 172, 86, 0, 939, 940, 5, 82, 0, 0, 940, 941, 3, 6, 3, 0, 941, 998, 1, 0, 0, 0, 942, 943, 5, 51, 0, 0, 943, 944, 5, 157, 0, 0, 944, 998, 3, 172, 86, 0, 945, 946, 5, 70, 0, 0, 946, 956, 3, 172, 86, 0, 947, 948, 5, 225, 0, 0, 948, 953, 3, 86, 43, 0, 949, 950, 5, 4, 0, 0, 950, 952, 3, 86, 43, 0, 951, 949, 1, 0, 0, 0, 952, 955, 1, 0, 0, 0, 953, 951, 1, 0, 0, 0, 953, 954, 1, 0, 0, 0, 954, 957, 1, 0, 0, 0, 955, 953, 1, 0, 0, 0, 956, 947, 1, 0, 0, 0, 956, 957, 1, 0, 0, 0, 957, 998, 1, 0, 0, 0, 958, 959, 5, 55, 0, 0, 959, 960, 5, 100, 0, 0, 960, 998, 3, 172, 86, 0, 961, 962, 5, 55, 0, 0, 962, 963, 5, 151, 0, 0, 963, 998, 3, 172, 86, 0, 964, 965, 5, 222, 0, 0, 965, 966, 3, 160, 80, 0, 966, 967, 5, 190, 0, 0, 967, 972, 3, 148, 74, 0, 968, 969, 5, 4, 0, 0, 969, 971, 3, 148, 74, 0, 970, 968, 1, 0, 0, 0, 971, 974, 1, 0, 0, 0, 972, 970, 1, 0, 0, 0, 972, 973, 1, 0, 0, 0, 973, 977, 1, 0, 0, 0, 974, 972, 1, 0, 0, 0, 975, 976, 5, 232, 0, 0, 976, 978, 3, 88, 44, 0, 977, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 998, 1, 0, 0, 0, 979, 980, 5, 126, 0, 0, 980, 981, 5, 104, 0, 0, 981, 986, 3, 160, 80, 0, 982, 984, 5, 18, 0, 0, 983, 982, 1, 0, 0, 0, 983, 984, 1, 0, 0, 0, 984, 985, 1, 0, 0, 0, 985, 987, 3, 172, 86, 0, 986, 983, 1, 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 988, 1, 0, 0, 0, 988, 989, 5, 225, 0, 0, 989, 990, 3, 70, 35, 0, 990, 991, 5, 144, 0, 0, 991, 993, 3, 86, 43, 0, 992, 994, 3, 140, 70, 0, 993, 992, 1, 0, 0, 0, 994, 995, 1, 0, 0, 0, 995, 993, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 998, 1, 0, 0, 0, 997, 205, 1, 0, 0, 0, 997, 206, 1, 0, 0, 0, 997, 208, 1, 0, 0, 0, 997, 213, 1, 0, 0, 0, 997, 225, 1, 0, 0, 0, 997, 235, 1, 0, 0, 0, 997, 242, 1, 0, 0, 0, 997, 276, 1, 0, 0, 0, 997, 302, 1, 0, 0, 0, 997, 309, 1, 0, 0, 0, 997, 317, 1, 0, 0, 0, 997, 324, 1, 0, 0, 0, 997, 327, 1, 0, 0, 0, 997, 338, 1, 0, 0, 0, 997, 355, 1, 0, 0, 0, 997, 370, 1, 0, 0, 0, 997, 386, 1, 0, 0, 0, 997, 396, 1, 0, 0, 0, 997, 411, 1, 0, 0, 0, 997, 427, 1, 0, 0, 0, 997, 443, 1, 0, 0, 0, 997, 454, 1, 0, 0, 0, 997, 469, 1, 0, 0, 0, 997, 484, 1, 0, 0, 0, 997, 490, 1, 0, 0, 0, 997, 508, 1, 0, 0, 0, 997, 521, 1, 0, 0, 0, 997, 532, 1, 0, 0, 0, 997, 539, 1, 0, 0, 0, 997, 567, 1, 0, 0, 0, 997, 575, 1, 0, 0, 0, 997, 583, 1, 0, 0, 0, 997, 614, 1, 0, 0, 0, 997, 622, 1, 0, 0, 0, 997, 635, 1, 0, 0, 0, 997, 650, 1, 0, 0, 0, 997, 658, 1, 0, 0, 0, 997, 661, 1, 0, 0, 0, 997, 682, 1, 0, 0, 0, 997, 703, 1, 0, 0, 0, 997, 710, 1, 0, 0, 0, 997, 735, 1, 0, 0, 0, 997, 761, 1, 0, 0, 0, 997, 770, 1, 0, 0, 0, 997, 791, 1, 0, 0, 0, 997, 795, 1, 0, 0, 0, 997, 799, 1, 0, 0, 0, 997, 803, 1, 0, 0, 0, 997, 808, 1, 0, 0, 0, 997, 815, 1, 0, 0, 0, 997, 829, 1, 0, 0, 0, 997, 843, 1, 0, 0, 0, 997, 853, 1, 0, 0, 0, 997, 857, 1, 0, 0, 0, 997, 861, 1, 0, 0, 0, 997, 868, 1, 0, 0, 0, 997, 877, 1, 0, 0, 0, 997, 884, 1, 0, 0, 0, 997, 886, 1, 0, 0, 0, 997, 888, 1, 0, 0, 0, 997, 898, 1, 0, 0, 0, 997, 908, 1, 0, 0, 0, 997, 914, 1, 0, 0, 0, 997, 917, 1, 0, 0, 0, 997, 929, 1, 0, 0, 0, 997, 933, 1, 0, 0, 0, 997, 937, 1, 0, 0, 0, 997, 942, 1, 0, 0, 0, 997, 945, 1, 0, 0, 0, 997, 958, 1, 0, 0, 0, 997, 961, 1, 0, 0, 0, 997, 964, 1, 0, 0, 0, 997, 979, 1, 0, 0, 0, 998, 7, 1, 0, 0, 0, 999, 1001, 3, 10, 5, 0, 1000, 999, 1, 0, 0, 0, 1000, 1001, 1, 0, 0, 0, 1001, 1002, 1, 0, 0, 0, 1002, 1003, 3, 48, 24, 0, 1003, 9, 1, 0, 0, 0, 1004, 1006, 5, 233, 0, 0, 1005, 1007, 5, 164, 0, 0, 1006, 1005, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 1013, 3, 64, 32, 0, 1009, 1010, 5, 4, 0, 0, 1010, 1012, 3, 64, 32, 0, 1011, 1009, 1, 0, 0, 0, 1012, 1015, 1, 0, 0, 0, 1013, 1011, 1, 0, 0, 0, 1013, 1014, 1, 0, 0, 0, 1014, 11, 1, 0, 0, 0, 1015, 1013, 1, 0, 0, 0, 1016, 1020, 3, 176, 88, 0, 1017, 1020, 3, 14, 7, 0, 1018, 1020, 3, 16, 8, 0, 1019, 1016, 1, 0, 0, 0, 1019, 1017, 1, 0, 0, 0, 1019, 1018, 1, 0, 0, 0, 1020, 13, 1, 0, 0, 0, 1021, 1022, 3, 172, 86, 0, 1022, 1025, 3, 116, 58, 0, 1023, 1024, 5, 138, 0, 0, 1024, 1026, 5, 139, 0, 0, 1025, 1023, 1, 0, 0, 0, 1025, 1026, 1, 0, 0, 0, 1026, 1029, 1, 0, 0, 0, 1027, 1028, 5, 34, 0, 0, 1028, 1030, 3, 96, 48, 0, 1029, 1027, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1033, 1, 0, 0, 0, 1031, 1032, 5, 233, 0, 0, 1032, 1034, 3, 18, 9, 0, 1033, 1031, 1, 0, 0, 0, 1033, 1034, 1, 0, 0, 0, 1034, 15, 1, 0, 0, 0, 1035, 1036, 5, 118, 0, 0, 1036, 1039, 3, 160, 80, 0, 1037, 1038, 7, 2, 0, 0, 1038, 1040, 5, 160, 0, 0, 1039, 1037, 1, 0, 0, 0, 1039, 1040, 1, 0, 0, 0, 1040, 17, 1, 0, 0, 0, 1041, 1042, 5, 2, 0, 0, 1042, 1047, 3, 20, 10, 0, 1043, 1044, 5, 4, 0, 0, 1044, 1046, 3, 20, 10, 0, 1045, 1043, 1, 0, 0, 0, 1046, 1049, 1, 0, 0, 0, 1047, 1045, 1, 0, 0, 0, 1047, 1048, 1, 0, 0, 0, 1048, 1050, 1, 0, 0, 0, 1049, 1047, 1, 0, 0, 0, 1050, 1051, 5, 3, 0, 0, 1051, 19, 1, 0, 0, 0, 1052, 1053, 3, 172, 86, 0, 1053, 1054, 5, 238, 0, 0, 1054, 1055, 3, 86, 43, 0, 1055, 21, 1, 0, 0, 0, 1056, 1057, 3, 172, 86, 0, 1057, 1058, 3, 116, 58, 0, 1058, 23, 1, 0, 0, 0, 1059, 1061, 3, 26, 13, 0, 1060, 1059, 1, 0, 0, 0, 1061, 1064, 1, 0, 0, 0, 1062, 1060, 1, 0, 0, 0, 1062, 1063, 1, 0, 0, 0, 1063, 25, 1, 0, 0, 0, 1064, 1062, 1, 0, 0, 0, 1065, 1066, 5, 113, 0, 0, 1066, 1070, 3, 38, 19, 0, 1067, 1070, 3, 40, 20, 0, 1068, 1070, 3, 42, 21, 0, 1069, 1065, 1, 0, 0, 0, 1069, 1067, 1, 0, 0, 0, 1069, 1068, 1, 0, 0, 0, 1070, 27, 1, 0, 0, 0, 1071, 1073, 3, 30, 15, 0, 1072, 1071, 1, 0, 0, 0, 1073, 1076, 1, 0, 0, 0, 1074, 1072, 1, 0, 0, 0, 1074, 1075, 1, 0, 0, 0, 1075, 29, 1, 0, 0, 0, 1076, 1074, 1, 0, 0, 0, 1077, 1078, 3, 42, 21, 0, 1078, 31, 1, 0, 0, 0, 1079, 1082, 3, 34, 17, 0, 1080, 1082, 3, 36, 18, 0, 1081, 1079, 1, 0, 0, 0, 1081, 1080, 1, 0, 0, 0, 1082, 33, 1, 0, 0, 0, 1083, 1084, 5, 173, 0, 0, 1084, 1085, 3, 86, 43, 0, 1085, 35, 1, 0, 0, 0, 1086, 1089, 5, 74, 0, 0, 1087, 1088, 5, 129, 0, 0, 1088, 1090, 3, 44, 22, 0, 1089, 1087, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 37, 1, 0, 0, 0, 1091, 1094, 5, 194, 0, 0, 1092, 1094, 3, 172, 86, 0, 1093, 1091, 1, 0, 0, 0, 1093, 1092, 1, 0, 0, 0, 1094, 39, 1, 0, 0, 0, 1095, 1099, 5, 57, 0, 0, 1096, 1097, 5, 138, 0, 0, 1097, 1099, 5, 57, 0, 0, 1098, 1095, 1, 0, 0, 0, 1098, 1096, 1, 0, 0, 0, 1099, 41, 1, 0, 0, 0, 1100, 1101, 5, 174, 0, 0, 1101, 1102, 5, 139, 0, 0, 1102, 1103, 5, 144, 0, 0, 1103, 1104, 5, 139, 0, 0, 1104, 1110, 5, 100, 0, 0, 1105, 1106, 5, 27, 0, 0, 1106, 1107, 5, 144, 0, 0, 1107, 1108, 5, 139, 0, 0, 1108, 1110, 5, 100, 0, 0, 1109, 1100, 1, 0, 0, 0, 1109, 1105, 1, 0, 0, 0, 1110, 43, 1, 0, 0, 0, 1111, 1112, 3, 172, 86, 0, 1112, 45, 1, 0, 0, 0, 1113, 1114, 5, 186, 0, 0, 1114, 1115, 7, 3, 0, 0, 1115, 47, 1, 0, 0, 0, 1116, 1127, 3, 50, 25, 0, 1117, 1118, 5, 148, 0, 0, 1118, 1119, 5, 25, 0, 0, 1119, 1124, 3, 54, 27, 0, 1120, 1121, 5, 4, 0, 0, 1121, 1123, 3, 54, 27, 0, 1122, 1120, 1, 0, 0, 0, 1123, 1126, 1, 0, 0, 0, 1124, 1122, 1, 0, 0, 0, 1124, 1125, 1, 0, 0, 0, 1125, 1128, 1, 0, 0, 0, 1126, 1124, 1, 0, 0, 0, 1127, 1117, 1, 0, 0, 0, 1127, 1128, 1, 0, 0, 0, 1128, 1134, 1, 0, 0, 0, 1129, 1130, 5, 143, 0, 0, 1130, 1132, 5, 253, 0, 0, 1131, 1133, 7, 4, 0, 0, 1132, 1131, 1, 0, 0, 0, 1132, 1133, 1, 0, 0, 0, 1133, 1135, 1, 0, 0, 0, 1134, 1129, 1, 0, 0, 0, 1134, 1135, 1, 0, 0, 0, 1135, 1145, 1, 0, 0, 0, 1136, 1137, 5, 119, 0, 0, 1137, 1144, 7, 5, 0, 0, 1138, 1139, 5, 76, 0, 0, 1139, 1140, 5, 78, 0, 0, 1140, 1141, 5, 253, 0, 0, 1141, 1142, 5, 182, 0, 0, 1142, 1144, 5, 145, 0, 0, 1143, 1136, 1, 0, 0, 0, 1143, 1138, 1, 0, 0, 0, 1144, 1146, 1, 0, 0, 0, 1145, 1143, 1, 0, 0, 0, 1145, 1146, 1, 0, 0, 0, 1146, 49, 1, 0, 0, 0, 1147, 1148, 6, 25, -1, 0, 1148, 1149, 3, 52, 26, 0, 1149, 1164, 1, 0, 0, 0, 1150, 1151, 10, 2, 0, 0, 1151, 1153, 5, 102, 0, 0, 1152, 1154, 3, 66, 33, 0, 1153, 1152, 1, 0, 0, 0, 1153, 1154, 1, 0, 0, 0, 1154, 1155, 1, 0, 0, 0, 1155, 1163, 3, 50, 25, 3, 1156, 1157, 10, 1, 0, 0, 1157, 1159, 7, 6, 0, 0, 1158, 1160, 3, 66, 33, 0, 1159, 1158, 1, 0, 0, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1163, 3, 50, 25, 2, 1162, 1150, 1, 0, 0, 0, 1162, 1156, 1, 0, 0, 0, 1163, 1166, 1, 0, 0, 0, 1164, 1162, 1, 0, 0, 0, 1164, 1165, 1, 0, 0, 0, 1165, 51, 1, 0, 0, 0, 1166, 1164, 1, 0, 0, 0, 1167, 1184, 3, 56, 28, 0, 1168, 1169, 5, 201, 0, 0, 1169, 1184, 3, 160, 80, 0, 1170, 1171, 5, 227, 0, 0, 1171, 1176, 3, 86, 43, 0, 1172, 1173, 5, 4, 0, 0, 1173, 1175, 3, 86, 43, 0, 1174, 1172, 1, 0, 0, 0, 1175, 1178, 1, 0, 0, 0, 1176, 1174, 1, 0, 0, 0, 1176, 1177, 1, 0, 0, 0, 1177, 1184, 1, 0, 0, 0, 1178, 1176, 1, 0, 0, 0, 1179, 1180, 5, 2, 0, 0, 1180, 1181, 3, 48, 24, 0, 1181, 1182, 5, 3, 0, 0, 1182, 1184, 1, 0, 0, 0, 1183, 1167, 1, 0, 0, 0, 1183, 1168, 1, 0, 0, 0, 1183, 1170, 1, 0, 0, 0, 1183, 1179, 1, 0, 0, 0, 1184, 53, 1, 0, 0, 0, 1185, 1187, 3, 86, 43, 0, 1186, 1188, 7, 7, 0, 0, 1187, 1186, 1, 0, 0, 0, 1187, 1188, 1, 0, 0, 0, 1188, 1191, 1, 0, 0, 0, 1189, 1190, 5, 141, 0, 0, 1190, 1192, 7, 8, 0, 0, 1191, 1189, 1, 0, 0, 0, 1191, 1192, 1, 0, 0, 0, 1192, 55, 1, 0, 0, 0, 1193, 1195, 5, 187, 0, 0, 1194, 1196, 3, 66, 33, 0, 1195, 1194, 1, 0, 0, 0, 1195, 1196, 1, 0, 0, 0, 1196, 1197, 1, 0, 0, 0, 1197, 1202, 3, 68, 34, 0, 1198, 1199, 5, 4, 0, 0, 1199, 1201, 3, 68, 34, 0, 1200, 1198, 1, 0, 0, 0, 1201, 1204, 1, 0, 0, 0, 1202, 1200, 1, 0, 0, 0, 1202, 1203, 1, 0, 0, 0, 1203, 1214, 1, 0, 0, 0, 1204, 1202, 1, 0, 0, 0, 1205, 1206, 5, 82, 0, 0, 1206, 1211, 3, 70, 35, 0, 1207, 1208, 5, 4, 0, 0, 1208, 1210, 3, 70, 35, 0, 1209, 1207, 1, 0, 0, 0, 1210, 1213, 1, 0, 0, 0, 1211, 1209, 1, 0, 0, 0, 1211, 1212, 1, 0, 0, 0, 1212, 1215, 1, 0, 0, 0, 1213, 1211, 1, 0, 0, 0, 1214, 1205, 1, 0, 0, 0, 1214, 1215, 1, 0, 0, 0, 1215, 1218, 1, 0, 0, 0, 1216, 1217, 5, 232, 0, 0, 1217, 1219, 3, 88, 44, 0, 1218, 1216, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 1223, 1, 0, 0, 0, 1220, 1221, 5, 90, 0, 0, 1221, 1222, 5, 25, 0, 0, 1222, 1224, 3, 58, 29, 0, 1223, 1220, 1, 0, 0, 0, 1223, 1224, 1, 0, 0, 0, 1224, 1227, 1, 0, 0, 0, 1225, 1226, 5, 93, 0, 0, 1226, 1228, 3, 88, 44, 0, 1227, 1225, 1, 0, 0, 0, 1227, 1228, 1, 0, 0, 0, 1228, 57, 1, 0, 0, 0, 1229, 1231, 3, 66, 33, 0, 1230, 1229, 1, 0, 0, 0, 1230, 1231, 1, 0, 0, 0, 1231, 1232, 1, 0, 0, 0, 1232, 1237, 3, 60, 30, 0, 1233, 1234, 5, 4, 0, 0, 1234, 1236, 3, 60, 30, 0, 1235, 1233, 1, 0, 0, 0, 1236, 1239, 1, 0, 0, 0, 1237, 1235, 1, 0, 0, 0, 1237, 1238, 1, 0, 0, 0, 1238, 59, 1, 0, 0, 0, 1239, 1237, 1, 0, 0, 0, 1240, 1281, 3, 62, 31, 0, 1241, 1242, 5, 180, 0, 0, 1242, 1251, 5, 2, 0, 0, 1243, 1248, 3, 86, 43, 0, 1244, 1245, 5, 4, 0, 0, 1245, 1247, 3, 86, 43, 0, 1246, 1244, 1, 0, 0, 0, 1247, 1250, 1, 0, 0, 0, 1248, 1246, 1, 0, 0, 0, 1248, 1249, 1, 0, 0, 0, 1249, 1252, 1, 0, 0, 0, 1250, 1248, 1, 0, 0, 0, 1251, 1243, 1, 0, 0, 0, 1251, 1252, 1, 0, 0, 0, 1252, 1253, 1, 0, 0, 0, 1253, 1281, 5, 3, 0, 0, 1254, 1255, 5, 41, 0, 0, 1255, 1264, 5, 2, 0, 0, 1256, 1261, 3, 86, 43, 0, 1257, 1258, 5, 4, 0, 0, 1258, 1260, 3, 86, 43, 0, 1259, 1257, 1, 0, 0, 0, 1260, 1263, 1, 0, 0, 0, 1261, 1259, 1, 0, 0, 0, 1261, 1262, 1, 0, 0, 0, 1262, 1265, 1, 0, 0, 0, 1263, 1261, 1, 0, 0, 0, 1264, 1256, 1, 0, 0, 0, 1264, 1265, 1, 0, 0, 0, 1265, 1266, 1, 0, 0, 0, 1266, 1281, 5, 3, 0, 0, 1267, 1268, 5, 91, 0, 0, 1268, 1269, 5, 191, 0, 0, 1269, 1270, 5, 2, 0, 0, 1270, 1275, 3, 62, 31, 0, 1271, 1272, 5, 4, 0, 0, 1272, 1274, 3, 62, 31, 0, 1273, 1271, 1, 0, 0, 0, 1274, 1277, 1, 0, 0, 0, 1275, 1273, 1, 0, 0, 0, 1275, 1276, 1, 0, 0, 0, 1276, 1278, 1, 0, 0, 0, 1277, 1275, 1, 0, 0, 0, 1278, 1279, 5, 3, 0, 0, 1279, 1281, 1, 0, 0, 0, 1280, 1240, 1, 0, 0, 0, 1280, 1241, 1, 0, 0, 0, 1280, 1254, 1, 0, 0, 0, 1280, 1267, 1, 0, 0, 0, 1281, 61, 1, 0, 0, 0, 1282, 1291, 5, 2, 0, 0, 1283, 1288, 3, 86, 43, 0, 1284, 1285, 5, 4, 0, 0, 1285, 1287, 3, 86, 43, 0, 1286, 1284, 1, 0, 0, 0, 1287, 1290, 1, 0, 0, 0, 1288, 1286, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1292, 1, 0, 0, 0, 1290, 1288, 1, 0, 0, 0, 1291, 1283, 1, 0, 0, 0, 1291, 1292, 1, 0, 0, 0, 1292, 1293, 1, 0, 0, 0, 1293, 1296, 5, 3, 0, 0, 1294, 1296, 3, 86, 43, 0, 1295, 1282, 1, 0, 0, 0, 1295, 1294, 1, 0, 0, 0, 1296, 63, 1, 0, 0, 0, 1297, 1299, 3, 172, 86, 0, 1298, 1300, 3, 82, 41, 0, 1299, 1298, 1, 0, 0, 0, 1299, 1300, 1, 0, 0, 0, 1300, 1301, 1, 0, 0, 0, 1301, 1302, 5, 18, 0, 0, 1302, 1303, 5, 2, 0, 0, 1303, 1304, 3, 8, 4, 0, 1304, 1305, 5, 3, 0, 0, 1305, 65, 1, 0, 0, 0, 1306, 1307, 7, 9, 0, 0, 1307, 67, 1, 0, 0, 0, 1308, 1313, 3, 86, 43, 0, 1309, 1311, 5, 18, 0, 0, 1310, 1309, 1, 0, 0, 0, 1310, 1311, 1, 0, 0, 0, 1311, 1312, 1, 0, 0, 0, 1312, 1314, 3, 172, 86, 0, 1313, 1310, 1, 0, 0, 0, 1313, 1314, 1, 0, 0, 0, 1314, 1321, 1, 0, 0, 0, 1315, 1316, 3, 160, 80, 0, 1316, 1317, 5, 1, 0, 0, 1317, 1318, 5, 246, 0, 0, 1318, 1321, 1, 0, 0, 0, 1319, 1321, 5, 246, 0, 0, 1320, 1308, 1, 0, 0, 0, 1320, 1315, 1, 0, 0, 0, 1320, 1319, 1, 0, 0, 0, 1321, 69, 1, 0, 0, 0, 1322, 1323, 6, 35, -1, 0, 1323, 1324, 3, 76, 38, 0, 1324, 1343, 1, 0, 0, 0, 1325, 1339, 10, 2, 0, 0, 1326, 1327, 5, 40, 0, 0, 1327, 1328, 5, 110, 0, 0, 1328, 1340, 3, 76, 38, 0, 1329, 1330, 3, 72, 36, 0, 1330, 1331, 5, 110, 0, 0, 1331, 1332, 3, 70, 35, 0, 1332, 1333, 3, 74, 37, 0, 1333, 1340, 1, 0, 0, 0, 1334, 1335, 5, 130, 0, 0, 1335, 1336, 3, 72, 36, 0, 1336, 1337, 5, 110, 0, 0, 1337, 1338, 3, 76, 38, 0, 1338, 1340, 1, 0, 0, 0, 1339, 1326, 1, 0, 0, 0, 1339, 1329, 1, 0, 0, 0, 1339, 1334, 1, 0, 0, 0, 1340, 1342, 1, 0, 0, 0, 1341, 1325, 1, 0, 0, 0, 1342, 1345, 1, 0, 0, 0, 1343, 1341, 1, 0, 0, 0, 1343, 1344, 1, 0, 0, 0, 1344, 71, 1, 0, 0, 0, 1345, 1343, 1, 0, 0, 0, 1346, 1348, 5, 99, 0, 0, 1347, 1346, 1, 0, 0, 0, 1347, 1348, 1, 0, 0, 0, 1348, 1362, 1, 0, 0, 0, 1349, 1351, 5, 116, 0, 0, 1350, 1352, 5, 150, 0, 0, 1351, 1350, 1, 0, 0, 0, 1351, 1352, 1, 0, 0, 0, 1352, 1362, 1, 0, 0, 0, 1353, 1355, 5, 176, 0, 0, 1354, 1356, 5, 150, 0, 0, 1355, 1354, 1, 0, 0, 0, 1355, 1356, 1, 0, 0, 0, 1356, 1362, 1, 0, 0, 0, 1357, 1359, 5, 83, 0, 0, 1358, 1360, 5, 150, 0, 0, 1359, 1358, 1, 0, 0, 0, 1359, 1360, 1, 0, 0, 0, 1360, 1362, 1, 0, 0, 0, 1361, 1347, 1, 0, 0, 0, 1361, 1349, 1, 0, 0, 0, 1361, 1353, 1, 0, 0, 0, 1361, 1357, 1, 0, 0, 0, 1362, 73, 1, 0, 0, 0, 1363, 1364, 5, 144, 0, 0, 1364, 1378, 3, 88, 44, 0, 1365, 1366, 5, 225, 0, 0, 1366, 1367, 5, 2, 0, 0, 1367, 1372, 3, 172, 86, 0, 1368, 1369, 5, 4, 0, 0, 1369, 1371, 3, 172, 86, 0, 1370, 1368, 1, 0, 0, 0, 1371, 1374, 1, 0, 0, 0, 1372, 1370, 1, 0, 0, 0, 1372, 1373, 1, 0, 0, 0, 1373, 1375, 1, 0, 0, 0, 1374, 1372, 1, 0, 0, 0, 1375, 1376, 5, 3, 0, 0, 1376, 1378, 1, 0, 0, 0, 1377, 1363, 1, 0, 0, 0, 1377, 1365, 1, 0, 0, 0, 1378, 75, 1, 0, 0, 0, 1379, 1386, 3, 80, 40, 0, 1380, 1381, 5, 203, 0, 0, 1381, 1382, 3, 78, 39, 0, 1382, 1383, 5, 2, 0, 0, 1383, 1384, 3, 86, 43, 0, 1384, 1385, 5, 3, 0, 0, 1385, 1387, 1, 0, 0, 0, 1386, 1380, 1, 0, 0, 0, 1386, 1387, 1, 0, 0, 0, 1387, 77, 1, 0, 0, 0, 1388, 1389, 7, 10, 0, 0, 1389, 79, 1, 0, 0, 0, 1390, 1398, 3, 84, 42, 0, 1391, 1393, 5, 18, 0, 0, 1392, 1391, 1, 0, 0, 0, 1392, 1393, 1, 0, 0, 0, 1393, 1394, 1, 0, 0, 0, 1394, 1396, 3, 172, 86, 0, 1395, 1397, 3, 82, 41, 0, 1396, 1395, 1, 0, 0, 0, 1396, 1397, 1, 0, 0, 0, 1397, 1399, 1, 0, 0, 0, 1398, 1392, 1, 0, 0, 0, 1398, 1399, 1, 0, 0, 0, 1399, 81, 1, 0, 0, 0, 1400, 1401, 5, 2, 0, 0, 1401, 1406, 3, 172, 86, 0, 1402, 1403, 5, 4, 0, 0, 1403, 1405, 3, 172, 86, 0, 1404, 1402, 1, 0, 0, 0, 1405, 1408, 1, 0, 0, 0, 1406, 1404, 1, 0, 0, 0, 1406, 1407, 1, 0, 0, 0, 1407, 1409, 1, 0, 0, 0, 1408, 1406, 1, 0, 0, 0, 1409, 1410, 5, 3, 0, 0, 1410, 83, 1, 0, 0, 0, 1411, 1413, 3, 160, 80, 0, 1412, 1414, 3, 162, 81, 0, 1413, 1412, 1, 0, 0, 0, 1413, 1414, 1, 0, 0, 0, 1414, 1449, 1, 0, 0, 0, 1415, 1416, 5, 2, 0, 0, 1416, 1417, 3, 8, 4, 0, 1417, 1418, 5, 3, 0, 0, 1418, 1449, 1, 0, 0, 0, 1419, 1420, 5, 221, 0, 0, 1420, 1421, 5, 2, 0, 0, 1421, 1426, 3, 86, 43, 0, 1422, 1423, 5, 4, 0, 0, 1423, 1425, 3, 86, 43, 0, 1424, 1422, 1, 0, 0, 0, 1425, 1428, 1, 0, 0, 0, 1426, 1424, 1, 0, 0, 0, 1426, 1427, 1, 0, 0, 0, 1427, 1429, 1, 0, 0, 0, 1428, 1426, 1, 0, 0, 0, 1429, 1432, 5, 3, 0, 0, 1430, 1431, 5, 233, 0, 0, 1431, 1433, 5, 149, 0, 0, 1432, 1430, 1, 0, 0, 0, 1432, 1433, 1, 0, 0, 0, 1433, 1449, 1, 0, 0, 0, 1434, 1435, 5, 115, 0, 0, 1435, 1436, 5, 2, 0, 0, 1436, 1437, 3, 8, 4, 0, 1437, 1438, 5, 3, 0, 0, 1438, 1449, 1, 0, 0, 0, 1439, 1440, 5, 2, 0, 0, 1440, 1441, 3, 70, 35, 0, 1441, 1442, 5, 3, 0, 0, 1442, 1449, 1, 0, 0, 0, 1443, 1444, 5, 201, 0, 0, 1444, 1445, 5, 2, 0, 0, 1445, 1446, 3, 118, 59, 0, 1446, 1447, 5, 3, 0, 0, 1447, 1449, 1, 0, 0, 0, 1448, 1411, 1, 0, 0, 0, 1448, 1415, 1, 0, 0, 0, 1448, 1419, 1, 0, 0, 0, 1448, 1434, 1, 0, 0, 0, 1448, 1439, 1, 0, 0, 0, 1448, 1443, 1, 0, 0, 0, 1449, 85, 1, 0, 0, 0, 1450, 1451, 3, 88, 44, 0, 1451, 87, 1, 0, 0, 0, 1452, 1453, 6, 44, -1, 0, 1453, 1455, 3, 92, 46, 0, 1454, 1456, 3, 90, 45, 0, 1455, 1454, 1, 0, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 1460, 1, 0, 0, 0, 1457, 1458, 5, 138, 0, 0, 1458, 1460, 3, 88, 44, 3, 1459, 1452, 1, 0, 0, 0, 1459, 1457, 1, 0, 0, 0, 1460, 1469, 1, 0, 0, 0, 1461, 1462, 10, 2, 0, 0, 1462, 1463, 5, 15, 0, 0, 1463, 1468, 3, 88, 44, 3, 1464, 1465, 10, 1, 0, 0, 1465, 1466, 5, 147, 0, 0, 1466, 1468, 3, 88, 44, 2, 1467, 1461, 1, 0, 0, 0, 1467, 1464, 1, 0, 0, 0, 1468, 1471, 1, 0, 0, 0, 1469, 1467, 1, 0, 0, 0, 1469, 1470, 1, 0, 0, 0, 1470, 89, 1, 0, 0, 0, 1471, 1469, 1, 0, 0, 0, 1472, 1473, 3, 102, 51, 0, 1473, 1474, 3, 92, 46, 0, 1474, 1534, 1, 0, 0, 0, 1475, 1476, 3, 102, 51, 0, 1476, 1477, 3, 104, 52, 0, 1477, 1478, 5, 2, 0, 0, 1478, 1479, 3, 8, 4, 0, 1479, 1480, 5, 3, 0, 0, 1480, 1534, 1, 0, 0, 0, 1481, 1483, 5, 138, 0, 0, 1482, 1481, 1, 0, 0, 0, 1482, 1483, 1, 0, 0, 0, 1483, 1484, 1, 0, 0, 0, 1484, 1485, 5, 23, 0, 0, 1485, 1486, 3, 92, 46, 0, 1486, 1487, 5, 15, 0, 0, 1487, 1488, 3, 92, 46, 0, 1488, 1534, 1, 0, 0, 0, 1489, 1491, 5, 138, 0, 0, 1490, 1489, 1, 0, 0, 0, 1490, 1491, 1, 0, 0, 0, 1491, 1492, 1, 0, 0, 0, 1492, 1493, 5, 97, 0, 0, 1493, 1494, 5, 2, 0, 0, 1494, 1499, 3, 86, 43, 0, 1495, 1496, 5, 4, 0, 0, 1496, 1498, 3, 86, 43, 0, 1497, 1495, 1, 0, 0, 0, 1498, 1501, 1, 0, 0, 0, 1499, 1497, 1, 0, 0, 0, 1499, 1500, 1, 0, 0, 0, 1500, 1502, 1, 0, 0, 0, 1501, 1499, 1, 0, 0, 0, 1502, 1503, 5, 3, 0, 0, 1503, 1534, 1, 0, 0, 0, 1504, 1506, 5, 138, 0, 0, 1505, 1504, 1, 0, 0, 0, 1505, 1506, 1, 0, 0, 0, 1506, 1507, 1, 0, 0, 0, 1507, 1508, 5, 97, 0, 0, 1508, 1509, 5, 2, 0, 0, 1509, 1510, 3, 8, 4, 0, 1510, 1511, 5, 3, 0, 0, 1511, 1534, 1, 0, 0, 0, 1512, 1514, 5, 138, 0, 0, 1513, 1512, 1, 0, 0, 0, 1513, 1514, 1, 0, 0, 0, 1514, 1515, 1, 0, 0, 0, 1515, 1516, 5, 118, 0, 0, 1516, 1519, 3, 92, 46, 0, 1517, 1518, 5, 67, 0, 0, 1518, 1520, 3, 92, 46, 0, 1519, 1517, 1, 0, 0, 0, 1519, 1520, 1, 0, 0, 0, 1520, 1534, 1, 0, 0, 0, 1521, 1523, 5, 107, 0, 0, 1522, 1524, 5, 138, 0, 0, 1523, 1522, 1, 0, 0, 0, 1523, 1524, 1, 0, 0, 0, 1524, 1525, 1, 0, 0, 0, 1525, 1534, 5, 139, 0, 0, 1526, 1528, 5, 107, 0, 0, 1527, 1529, 5, 138, 0, 0, 1528, 1527, 1, 0, 0, 0, 1528, 1529, 1, 0, 0, 0, 1529, 1530, 1, 0, 0, 0, 1530, 1531, 5, 59, 0, 0, 1531, 1532, 5, 82, 0, 0, 1532, 1534, 3, 92, 46, 0, 1533, 1472, 1, 0, 0, 0, 1533, 1475, 1, 0, 0, 0, 1533, 1482, 1, 0, 0, 0, 1533, 1490, 1, 0, 0, 0, 1533, 1505, 1, 0, 0, 0, 1533, 1513, 1, 0, 0, 0, 1533, 1521, 1, 0, 0, 0, 1533, 1526, 1, 0, 0, 0, 1534, 91, 1, 0, 0, 0, 1535, 1536, 6, 46, -1, 0, 1536, 1540, 3, 94, 47, 0, 1537, 1538, 7, 11, 0, 0, 1538, 1540, 3, 92, 46, 4, 1539, 1535, 1, 0, 0, 0, 1539, 1537, 1, 0, 0, 0, 1540, 1555, 1, 0, 0, 0, 1541, 1542, 10, 3, 0, 0, 1542, 1543, 7, 12, 0, 0, 1543, 1554, 3, 92, 46, 4, 1544, 1545, 10, 2, 0, 0, 1545, 1546, 7, 11, 0, 0, 1546, 1554, 3, 92, 46, 3, 1547, 1548, 10, 1, 0, 0, 1548, 1549, 5, 249, 0, 0, 1549, 1554, 3, 92, 46, 2, 1550, 1551, 10, 5, 0, 0, 1551, 1552, 5, 20, 0, 0, 1552, 1554, 3, 100, 50, 0, 1553, 1541, 1, 0, 0, 0, 1553, 1544, 1, 0, 0, 0, 1553, 1547, 1, 0, 0, 0, 1553, 1550, 1, 0, 0, 0, 1554, 1557, 1, 0, 0, 0, 1555, 1553, 1, 0, 0, 0, 1555, 1556, 1, 0, 0, 0, 1556, 93, 1, 0, 0, 0, 1557, 1555, 1, 0, 0, 0, 1558, 1559, 6, 47, -1, 0, 1559, 1798, 5, 139, 0, 0, 1560, 1798, 3, 108, 54, 0, 1561, 1562, 3, 172, 86, 0, 1562, 1563, 3, 96, 48, 0, 1563, 1798, 1, 0, 0, 0, 1564, 1565, 5, 262, 0, 0, 1565, 1798, 3, 96, 48, 0, 1566, 1798, 3, 174, 87, 0, 1567, 1798, 3, 106, 53, 0, 1568, 1798, 3, 96, 48, 0, 1569, 1798, 5, 252, 0, 0, 1570, 1798, 5, 5, 0, 0, 1571, 1572, 5, 155, 0, 0, 1572, 1573, 5, 2, 0, 0, 1573, 1574, 3, 92, 46, 0, 1574, 1575, 5, 97, 0, 0, 1575, 1576, 3, 92, 46, 0, 1576, 1577, 5, 3, 0, 0, 1577, 1798, 1, 0, 0, 0, 1578, 1579, 5, 2, 0, 0, 1579, 1582, 3, 86, 43, 0, 1580, 1581, 5, 4, 0, 0, 1581, 1583, 3, 86, 43, 0, 1582, 1580, 1, 0, 0, 0, 1583, 1584, 1, 0, 0, 0, 1584, 1582, 1, 0, 0, 0, 1584, 1585, 1, 0, 0, 0, 1585, 1586, 1, 0, 0, 0, 1586, 1587, 5, 3, 0, 0, 1587, 1798, 1, 0, 0, 0, 1588, 1589, 5, 181, 0, 0, 1589, 1590, 5, 2, 0, 0, 1590, 1595, 3, 86, 43, 0, 1591, 1592, 5, 4, 0, 0, 1592, 1594, 3, 86, 43, 0, 1593, 1591, 1, 0, 0, 0, 1594, 1597, 1, 0, 0, 0, 1595, 1593, 1, 0, 0, 0, 1595, 1596, 1, 0, 0, 0, 1596, 1598, 1, 0, 0, 0, 1597, 1595, 1, 0, 0, 0, 1598, 1599, 5, 3, 0, 0, 1599, 1798, 1, 0, 0, 0, 1600, 1601, 3, 160, 80, 0, 1601, 1602, 5, 2, 0, 0, 1602, 1603, 5, 246, 0, 0, 1603, 1605, 5, 3, 0, 0, 1604, 1606, 3, 138, 69, 0, 1605, 1604, 1, 0, 0, 0, 1605, 1606, 1, 0, 0, 0, 1606, 1608, 1, 0, 0, 0, 1607, 1609, 3, 142, 71, 0, 1608, 1607, 1, 0, 0, 0, 1608, 1609, 1, 0, 0, 0, 1609, 1798, 1, 0, 0, 0, 1610, 1611, 3, 160, 80, 0, 1611, 1623, 5, 2, 0, 0, 1612, 1614, 3, 66, 33, 0, 1613, 1612, 1, 0, 0, 0, 1613, 1614, 1, 0, 0, 0, 1614, 1615, 1, 0, 0, 0, 1615, 1620, 3, 86, 43, 0, 1616, 1617, 5, 4, 0, 0, 1617, 1619, 3, 86, 43, 0, 1618, 1616, 1, 0, 0, 0, 1619, 1622, 1, 0, 0, 0, 1620, 1618, 1, 0, 0, 0, 1620, 1621, 1, 0, 0, 0, 1621, 1624, 1, 0, 0, 0, 1622, 1620, 1, 0, 0, 0, 1623, 1613, 1, 0, 0, 0, 1623, 1624, 1, 0, 0, 0, 1624, 1635, 1, 0, 0, 0, 1625, 1626, 5, 148, 0, 0, 1626, 1627, 5, 25, 0, 0, 1627, 1632, 3, 54, 27, 0, 1628, 1629, 5, 4, 0, 0, 1629, 1631, 3, 54, 27, 0, 1630, 1628, 1, 0, 0, 0, 1631, 1634, 1, 0, 0, 0, 1632, 1630, 1, 0, 0, 0, 1632, 1633, 1, 0, 0, 0, 1633, 1636, 1, 0, 0, 0, 1634, 1632, 1, 0, 0, 0, 1635, 1625, 1, 0, 0, 0, 1635, 1636, 1, 0, 0, 0, 1636, 1637, 1, 0, 0, 0, 1637, 1639, 5, 3, 0, 0, 1638, 1640, 3, 138, 69, 0, 1639, 1638, 1, 0, 0, 0, 1639, 1640, 1, 0, 0, 0, 1640, 1645, 1, 0, 0, 0, 1641, 1643, 3, 98, 49, 0, 1642, 1641, 1, 0, 0, 0, 1642, 1643, 1, 0, 0, 0, 1643, 1644, 1, 0, 0, 0, 1644, 1646, 3, 142, 71, 0, 1645, 1642, 1, 0, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 1798, 1, 0, 0, 0, 1647, 1648, 3, 172, 86, 0, 1648, 1649, 5, 6, 0, 0, 1649, 1650, 3, 86, 43, 0, 1650, 1798, 1, 0, 0, 0, 1651, 1660, 5, 2, 0, 0, 1652, 1657, 3, 172, 86, 0, 1653, 1654, 5, 4, 0, 0, 1654, 1656, 3, 172, 86, 0, 1655, 1653, 1, 0, 0, 0, 1656, 1659, 1, 0, 0, 0, 1657, 1655, 1, 0, 0, 0, 1657, 1658, 1, 0, 0, 0, 1658, 1661, 1, 0, 0, 0, 1659, 1657, 1, 0, 0, 0, 1660, 1652, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1663, 5, 3, 0, 0, 1663, 1664, 5, 6, 0, 0, 1664, 1798, 3, 86, 43, 0, 1665, 1666, 5, 2, 0, 0, 1666, 1667, 3, 8, 4, 0, 1667, 1668, 5, 3, 0, 0, 1668, 1798, 1, 0, 0, 0, 1669, 1670, 5, 71, 0, 0, 1670, 1671, 5, 2, 0, 0, 1671, 1672, 3, 8, 4, 0, 1672, 1673, 5, 3, 0, 0, 1673, 1798, 1, 0, 0, 0, 1674, 1675, 5, 29, 0, 0, 1675, 1677, 3, 92, 46, 0, 1676, 1678, 3, 136, 68, 0, 1677, 1676, 1, 0, 0, 0, 1678, 1679, 1, 0, 0, 0, 1679, 1677, 1, 0, 0, 0, 1679, 1680, 1, 0, 0, 0, 1680, 1683, 1, 0, 0, 0, 1681, 1682, 5, 62, 0, 0, 1682, 1684, 3, 86, 43, 0, 1683, 1681, 1, 0, 0, 0, 1683, 1684, 1, 0, 0, 0, 1684, 1685, 1, 0, 0, 0, 1685, 1686, 5, 65, 0, 0, 1686, 1798, 1, 0, 0, 0, 1687, 1689, 5, 29, 0, 0, 1688, 1690, 3, 136, 68, 0, 1689, 1688, 1, 0, 0, 0, 1690, 1691, 1, 0, 0, 0, 1691, 1689, 1, 0, 0, 0, 1691, 1692, 1, 0, 0, 0, 1692, 1695, 1, 0, 0, 0, 1693, 1694, 5, 62, 0, 0, 1694, 1696, 3, 86, 43, 0, 1695, 1693, 1, 0, 0, 0, 1695, 1696, 1, 0, 0, 0, 1696, 1697, 1, 0, 0, 0, 1697, 1698, 5, 65, 0, 0, 1698, 1798, 1, 0, 0, 0, 1699, 1700, 5, 30, 0, 0, 1700, 1701, 5, 2, 0, 0, 1701, 1702, 3, 86, 43, 0, 1702, 1703, 5, 18, 0, 0, 1703, 1704, 3, 116, 58, 0, 1704, 1705, 5, 3, 0, 0, 1705, 1798, 1, 0, 0, 0, 1706, 1707, 5, 214, 0, 0, 1707, 1708, 5, 2, 0, 0, 1708, 1709, 3, 86, 43, 0, 1709, 1710, 5, 18, 0, 0, 1710, 1711, 3, 116, 58, 0, 1711, 1712, 5, 3, 0, 0, 1712, 1798, 1, 0, 0, 0, 1713, 1714, 5, 17, 0, 0, 1714, 1723, 5, 7, 0, 0, 1715, 1720, 3, 86, 43, 0, 1716, 1717, 5, 4, 0, 0, 1717, 1719, 3, 86, 43, 0, 1718, 1716, 1, 0, 0, 0, 1719, 1722, 1, 0, 0, 0, 1720, 1718, 1, 0, 0, 0, 1720, 1721, 1, 0, 0, 0, 1721, 1724, 1, 0, 0, 0, 1722, 1720, 1, 0, 0, 0, 1723, 1715, 1, 0, 0, 0, 1723, 1724, 1, 0, 0, 0, 1724, 1725, 1, 0, 0, 0, 1725, 1798, 5, 8, 0, 0, 1726, 1798, 3, 172, 86, 0, 1727, 1798, 5, 43, 0, 0, 1728, 1732, 5, 45, 0, 0, 1729, 1730, 5, 2, 0, 0, 1730, 1731, 5, 253, 0, 0, 1731, 1733, 5, 3, 0, 0, 1732, 1729, 1, 0, 0, 0, 1732, 1733, 1, 0, 0, 0, 1733, 1798, 1, 0, 0, 0, 1734, 1738, 5, 46, 0, 0, 1735, 1736, 5, 2, 0, 0, 1736, 1737, 5, 253, 0, 0, 1737, 1739, 5, 3, 0, 0, 1738, 1735, 1, 0, 0, 0, 1738, 1739, 1, 0, 0, 0, 1739, 1798, 1, 0, 0, 0, 1740, 1744, 5, 120, 0, 0, 1741, 1742, 5, 2, 0, 0, 1742, 1743, 5, 253, 0, 0, 1743, 1745, 5, 3, 0, 0, 1744, 1741, 1, 0, 0, 0, 1744, 1745, 1, 0, 0, 0, 1745, 1798, 1, 0, 0, 0, 1746, 1750, 5, 121, 0, 0, 1747, 1748, 5, 2, 0, 0, 1748, 1749, 5, 253, 0, 0, 1749, 1751, 5, 3, 0, 0, 1750, 1747, 1, 0, 0, 0, 1750, 1751, 1, 0, 0, 0, 1751, 1798, 1, 0, 0, 0, 1752, 1798, 5, 47, 0, 0, 1753, 1754, 5, 197, 0, 0, 1754, 1755, 5, 2, 0, 0, 1755, 1756, 3, 92, 46, 0, 1756, 1757, 5, 82, 0, 0, 1757, 1760, 3, 92, 46, 0, 1758, 1759, 5, 80, 0, 0, 1759, 1761, 3, 92, 46, 0, 1760, 1758, 1, 0, 0, 0, 1760, 1761, 1, 0, 0, 0, 1761, 1762, 1, 0, 0, 0, 1762, 1763, 5, 3, 0, 0, 1763, 1798, 1, 0, 0, 0, 1764, 1765, 5, 137, 0, 0, 1765, 1766, 5, 2, 0, 0, 1766, 1769, 3, 92, 46, 0, 1767, 1768, 5, 4, 0, 0, 1768, 1770, 3, 112, 56, 0, 1769, 1767, 1, 0, 0, 0, 1769, 1770, 1, 0, 0, 0, 1770, 1771, 1, 0, 0, 0, 1771, 1772, 5, 3, 0, 0, 1772, 1798, 1, 0, 0, 0, 1773, 1774, 5, 73, 0, 0, 1774, 1775, 5, 2, 0, 0, 1775, 1776, 3, 172, 86, 0, 1776, 1777, 5, 82, 0, 0, 1777, 1778, 3, 92, 46, 0, 1778, 1779, 5, 3, 0, 0, 1779, 1798, 1, 0, 0, 0, 1780, 1781, 5, 2, 0, 0, 1781, 1782, 3, 86, 43, 0, 1782, 1783, 5, 3, 0, 0, 1783, 1798, 1, 0, 0, 0, 1784, 1785, 5, 91, 0, 0, 1785, 1794, 5, 2, 0, 0, 1786, 1791, 3, 160, 80, 0, 1787, 1788, 5, 4, 0, 0, 1788, 1790, 3, 160, 80, 0, 1789, 1787, 1, 0, 0, 0, 1790, 1793, 1, 0, 0, 0, 1791, 1789, 1, 0, 0, 0, 1791, 1792, 1, 0, 0, 0, 1792, 1795, 1, 0, 0, 0, 1793, 1791, 1, 0, 0, 0, 1794, 1786, 1, 0, 0, 0, 1794, 1795, 1, 0, 0, 0, 1795, 1796, 1, 0, 0, 0, 1796, 1798, 5, 3, 0, 0, 1797, 1558, 1, 0, 0, 0, 1797, 1560, 1, 0, 0, 0, 1797, 1561, 1, 0, 0, 0, 1797, 1564, 1, 0, 0, 0, 1797, 1566, 1, 0, 0, 0, 1797, 1567, 1, 0, 0, 0, 1797, 1568, 1, 0, 0, 0, 1797, 1569, 1, 0, 0, 0, 1797, 1570, 1, 0, 0, 0, 1797, 1571, 1, 0, 0, 0, 1797, 1578, 1, 0, 0, 0, 1797, 1588, 1, 0, 0, 0, 1797, 1600, 1, 0, 0, 0, 1797, 1610, 1, 0, 0, 0, 1797, 1647, 1, 0, 0, 0, 1797, 1651, 1, 0, 0, 0, 1797, 1665, 1, 0, 0, 0, 1797, 1669, 1, 0, 0, 0, 1797, 1674, 1, 0, 0, 0, 1797, 1687, 1, 0, 0, 0, 1797, 1699, 1, 0, 0, 0, 1797, 1706, 1, 0, 0, 0, 1797, 1713, 1, 0, 0, 0, 1797, 1726, 1, 0, 0, 0, 1797, 1727, 1, 0, 0, 0, 1797, 1728, 1, 0, 0, 0, 1797, 1734, 1, 0, 0, 0, 1797, 1740, 1, 0, 0, 0, 1797, 1746, 1, 0, 0, 0, 1797, 1752, 1, 0, 0, 0, 1797, 1753, 1, 0, 0, 0, 1797, 1764, 1, 0, 0, 0, 1797, 1773, 1, 0, 0, 0, 1797, 1780, 1, 0, 0, 0, 1797, 1784, 1, 0, 0, 0, 1798, 1809, 1, 0, 0, 0, 1799, 1800, 10, 14, 0, 0, 1800, 1801, 5, 7, 0, 0, 1801, 1802, 3, 92, 46, 0, 1802, 1803, 5, 8, 0, 0, 1803, 1808, 1, 0, 0, 0, 1804, 1805, 10, 12, 0, 0, 1805, 1806, 5, 1, 0, 0, 1806, 1808, 3, 172, 86, 0, 1807, 1799, 1, 0, 0, 0, 1807, 1804, 1, 0, 0, 0, 1808, 1811, 1, 0, 0, 0, 1809, 1807, 1, 0, 0, 0, 1809, 1810, 1, 0, 0, 0, 1810, 95, 1, 0, 0, 0, 1811, 1809, 1, 0, 0, 0, 1812, 1819, 5, 250, 0, 0, 1813, 1816, 5, 251, 0, 0, 1814, 1815, 5, 216, 0, 0, 1815, 1817, 5, 250, 0, 0, 1816, 1814, 1, 0, 0, 0, 1816, 1817, 1, 0, 0, 0, 1817, 1819, 1, 0, 0, 0, 1818, 1812, 1, 0, 0, 0, 1818, 1813, 1, 0, 0, 0, 1819, 97, 1, 0, 0, 0, 1820, 1821, 5, 96, 0, 0, 1821, 1825, 5, 141, 0, 0, 1822, 1823, 5, 171, 0, 0, 1823, 1825, 5, 141, 0, 0, 1824, 1820, 1, 0, 0, 0, 1824, 1822, 1, 0, 0, 0, 1825, 99, 1, 0, 0, 0, 1826, 1827, 5, 208, 0, 0, 1827, 1828, 5, 237, 0, 0, 1828, 1833, 3, 108, 54, 0, 1829, 1830, 5, 208, 0, 0, 1830, 1831, 5, 237, 0, 0, 1831, 1833, 3, 96, 48, 0, 1832, 1826, 1, 0, 0, 0, 1832, 1829, 1, 0, 0, 0, 1833, 101, 1, 0, 0, 0, 1834, 1835, 7, 13, 0, 0, 1835, 103, 1, 0, 0, 0, 1836, 1837, 7, 14, 0, 0, 1837, 105, 1, 0, 0, 0, 1838, 1839, 7, 15, 0, 0, 1839, 107, 1, 0, 0, 0, 1840, 1842, 5, 103, 0, 0, 1841, 1843, 7, 11, 0, 0, 1842, 1841, 1, 0, 0, 0, 1842, 1843, 1, 0, 0, 0, 1843, 1844, 1, 0, 0, 0, 1844, 1845, 3, 96, 48, 0, 1845, 1848, 3, 110, 55, 0, 1846, 1847, 5, 210, 0, 0, 1847, 1849, 3, 110, 55, 0, 1848, 1846, 1, 0, 0, 0, 1848, 1849, 1, 0, 0, 0, 1849, 109, 1, 0, 0, 0, 1850, 1851, 7, 16, 0, 0, 1851, 111, 1, 0, 0, 0, 1852, 1853, 7, 17, 0, 0, 1853, 113, 1, 0, 0, 0, 1854, 1863, 5, 2, 0, 0, 1855, 1860, 3, 116, 58, 0, 1856, 1857, 5, 4, 0, 0, 1857, 1859, 3, 116, 58, 0, 1858, 1856, 1, 0, 0, 0, 1859, 1862, 1, 0, 0, 0, 1860, 1858, 1, 0, 0, 0, 1860, 1861, 1, 0, 0, 0, 1861, 1864, 1, 0, 0, 0, 1862, 1860, 1, 0, 0, 0, 1863, 1855, 1, 0, 0, 0, 1863, 1864, 1, 0, 0, 0, 1864, 1865, 1, 0, 0, 0, 1865, 1866, 5, 3, 0, 0, 1866, 115, 1, 0, 0, 0, 1867, 1868, 6, 58, -1, 0, 1868, 1869, 5, 17, 0, 0, 1869, 1870, 5, 240, 0, 0, 1870, 1871, 3, 116, 58, 0, 1871, 1872, 5, 242, 0, 0, 1872, 1915, 1, 0, 0, 0, 1873, 1874, 5, 123, 0, 0, 1874, 1875, 5, 240, 0, 0, 1875, 1876, 3, 116, 58, 0, 1876, 1877, 5, 4, 0, 0, 1877, 1878, 3, 116, 58, 0, 1878, 1879, 5, 242, 0, 0, 1879, 1915, 1, 0, 0, 0, 1880, 1881, 5, 181, 0, 0, 1881, 1882, 5, 2, 0, 0, 1882, 1883, 3, 172, 86, 0, 1883, 1890, 3, 116, 58, 0, 1884, 1885, 5, 4, 0, 0, 1885, 1886, 3, 172, 86, 0, 1886, 1887, 3, 116, 58, 0, 1887, 1889, 1, 0, 0, 0, 1888, 1884, 1, 0, 0, 0, 1889, 1892, 1, 0, 0, 0, 1890, 1888, 1, 0, 0, 0, 1890, 1891, 1, 0, 0, 0, 1891, 1893, 1, 0, 0, 0, 1892, 1890, 1, 0, 0, 0, 1893, 1894, 5, 3, 0, 0, 1894, 1915, 1, 0, 0, 0, 1895, 1907, 3, 134, 67, 0, 1896, 1897, 5, 2, 0, 0, 1897, 1902, 3, 132, 66, 0, 1898, 1899, 5, 4, 0, 0, 1899, 1901, 3, 132, 66, 0, 1900, 1898, 1, 0, 0, 0, 1901, 1904, 1, 0, 0, 0, 1902, 1900, 1, 0, 0, 0, 1902, 1903, 1, 0, 0, 0, 1903, 1905, 1, 0, 0, 0, 1904, 1902, 1, 0, 0, 0, 1905, 1906, 5, 3, 0, 0, 1906, 1908, 1, 0, 0, 0, 1907, 1896, 1, 0, 0, 0, 1907, 1908, 1, 0, 0, 0, 1908, 1915, 1, 0, 0, 0, 1909, 1910, 5, 103, 0, 0, 1910, 1911, 3, 110, 55, 0, 1911, 1912, 5, 210, 0, 0, 1912, 1913, 3, 110, 55, 0, 1913, 1915, 1, 0, 0, 0, 1914, 1867, 1, 0, 0, 0, 1914, 1873, 1, 0, 0, 0, 1914, 1880, 1, 0, 0, 0, 1914, 1895, 1, 0, 0, 0, 1914, 1909, 1, 0, 0, 0, 1915, 1920, 1, 0, 0, 0, 1916, 1917, 10, 6, 0, 0, 1917, 1919, 5, 17, 0, 0, 1918, 1916, 1, 0, 0, 0, 1919, 1922, 1, 0, 0, 0, 1920, 1918, 1, 0, 0, 0, 1920, 1921, 1, 0, 0, 0, 1921, 117, 1, 0, 0, 0, 1922, 1920, 1, 0, 0, 0, 1923, 1924, 3, 160, 80, 0, 1924, 1933, 5, 2, 0, 0, 1925, 1930, 3, 120, 60, 0, 1926, 1927, 5, 4, 0, 0, 1927, 1929, 3, 120, 60, 0, 1928, 1926, 1, 0, 0, 0, 1929, 1932, 1, 0, 0, 0, 1930, 1928, 1, 0, 0, 0, 1930, 1931, 1, 0, 0, 0, 1931, 1934, 1, 0, 0, 0, 1932, 1930, 1, 0, 0, 0, 1933, 1925, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 1944, 1, 0, 0, 0, 1935, 1936, 5, 39, 0, 0, 1936, 1941, 3, 130, 65, 0, 1937, 1938, 5, 4, 0, 0, 1938, 1940, 3, 130, 65, 0, 1939, 1937, 1, 0, 0, 0, 1940, 1943, 1, 0, 0, 0, 1941, 1939, 1, 0, 0, 0, 1941, 1942, 1, 0, 0, 0, 1942, 1945, 1, 0, 0, 0, 1943, 1941, 1, 0, 0, 0, 1944, 1935, 1, 0, 0, 0, 1944, 1945, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1947, 5, 3, 0, 0, 1947, 119, 1, 0, 0, 0, 1948, 1949, 3, 172, 86, 0, 1949, 1950, 5, 9, 0, 0, 1950, 1952, 1, 0, 0, 0, 1951, 1948, 1, 0, 0, 0, 1951, 1952, 1, 0, 0, 0, 1952, 1956, 1, 0, 0, 0, 1953, 1957, 3, 122, 61, 0, 1954, 1957, 3, 126, 63, 0, 1955, 1957, 3, 86, 43, 0, 1956, 1953, 1, 0, 0, 0, 1956, 1954, 1, 0, 0, 0, 1956, 1955, 1, 0, 0, 0, 1957, 121, 1, 0, 0, 0, 1958, 1976, 3, 124, 62, 0, 1959, 1960, 5, 153, 0, 0, 1960, 1974, 5, 25, 0, 0, 1961, 1970, 5, 2, 0, 0, 1962, 1967, 3, 86, 43, 0, 1963, 1964, 5, 4, 0, 0, 1964, 1966, 3, 86, 43, 0, 1965, 1963, 1, 0, 0, 0, 1966, 1969, 1, 0, 0, 0, 1967, 1965, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1971, 1, 0, 0, 0, 1969, 1967, 1, 0, 0, 0, 1970, 1962, 1, 0, 0, 0, 1970, 1971, 1, 0, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 1975, 5, 3, 0, 0, 1973, 1975, 3, 86, 43, 0, 1974, 1961, 1, 0, 0, 0, 1974, 1973, 1, 0, 0, 0, 1975, 1977, 1, 0, 0, 0, 1976, 1959, 1, 0, 0, 0, 1976, 1977, 1, 0, 0, 0, 1977, 1984, 1, 0, 0, 0, 1978, 1979, 5, 161, 0, 0, 1979, 1980, 5, 231, 0, 0, 1980, 1985, 5, 63, 0, 0, 1981, 1982, 5, 111, 0, 0, 1982, 1983, 5, 231, 0, 0, 1983, 1985, 5, 63, 0, 0, 1984, 1978, 1, 0, 0, 0, 1984, 1981, 1, 0, 0, 0, 1984, 1985, 1, 0, 0, 0, 1985, 2002, 1, 0, 0, 0, 1986, 1987, 5, 148, 0, 0, 1987, 2000, 5, 25, 0, 0, 1988, 1989, 5, 2, 0, 0, 1989, 1994, 3, 54, 27, 0, 1990, 1991, 5, 4, 0, 0, 1991, 1993, 3, 54, 27, 0, 1992, 1990, 1, 0, 0, 0, 1993, 1996, 1, 0, 0, 0, 1994, 1992, 1, 0, 0, 0, 1994, 1995, 1, 0, 0, 0, 1995, 1997, 1, 0, 0, 0, 1996, 1994, 1, 0, 0, 0, 1997, 1998, 5, 3, 0, 0, 1998, 2001, 1, 0, 0, 0, 1999, 2001, 3, 54, 27, 0, 2000, 1988, 1, 0, 0, 0, 2000, 1999, 1, 0, 0, 0, 2001, 2003, 1, 0, 0, 0, 2002, 1986, 1, 0, 0, 0, 2002, 2003, 1, 0, 0, 0, 2003, 123, 1, 0, 0, 0, 2004, 2005, 5, 201, 0, 0, 2005, 2006, 5, 2, 0, 0, 2006, 2007, 3, 160, 80, 0, 2007, 2015, 5, 3, 0, 0, 2008, 2010, 5, 18, 0, 0, 2009, 2008, 1, 0, 0, 0, 2009, 2010, 1, 0, 0, 0, 2010, 2011, 1, 0, 0, 0, 2011, 2013, 3, 172, 86, 0, 2012, 2014, 3, 82, 41, 0, 2013, 2012, 1, 0, 0, 0, 2013, 2014, 1, 0, 0, 0, 2014, 2016, 1, 0, 0, 0, 2015, 2009, 1, 0, 0, 0, 2015, 2016, 1, 0, 0, 0, 2016, 2031, 1, 0, 0, 0, 2017, 2018, 5, 201, 0, 0, 2018, 2019, 5, 2, 0, 0, 2019, 2020, 3, 8, 4, 0, 2020, 2028, 5, 3, 0, 0, 2021, 2023, 5, 18, 0, 0, 2022, 2021, 1, 0, 0, 0, 2022, 2023, 1, 0, 0, 0, 2023, 2024, 1, 0, 0, 0, 2024, 2026, 3, 172, 86, 0, 2025, 2027, 3, 82, 41, 0, 2026, 2025, 1, 0, 0, 0, 2026, 2027, 1, 0, 0, 0, 2027, 2029, 1, 0, 0, 0, 2028, 2022, 1, 0, 0, 0, 2028, 2029, 1, 0, 0, 0, 2029, 2031, 1, 0, 0, 0, 2030, 2004, 1, 0, 0, 0, 2030, 2017, 1, 0, 0, 0, 2031, 125, 1, 0, 0, 0, 2032, 2033, 5, 56, 0, 0, 2033, 2034, 5, 2, 0, 0, 2034, 2039, 3, 128, 64, 0, 2035, 2036, 5, 4, 0, 0, 2036, 2038, 3, 128, 64, 0, 2037, 2035, 1, 0, 0, 0, 2038, 2041, 1, 0, 0, 0, 2039, 2037, 1, 0, 0, 0, 2039, 2040, 1, 0, 0, 0, 2040, 2042, 1, 0, 0, 0, 2041, 2039, 1, 0, 0, 0, 2042, 2043, 5, 3, 0, 0, 2043, 2051, 1, 0, 0, 0, 2044, 2045, 5, 30, 0, 0, 2045, 2046, 5, 2, 0, 0, 2046, 2047, 5, 139, 0, 0, 2047, 2048, 5, 18, 0, 0, 2048, 2049, 5, 56, 0, 0, 2049, 2051, 5, 3, 0, 0, 2050, 2032, 1, 0, 0, 0, 2050, 2044, 1, 0, 0, 0, 2051, 127, 1, 0, 0, 0, 2052, 2054, 3, 172, 86, 0, 2053, 2055, 3, 116, 58, 0, 2054, 2053, 1, 0, 0, 0, 2054, 2055, 1, 0, 0, 0, 2055, 129, 1, 0, 0, 0, 2056, 2057, 5, 2, 0, 0, 2057, 2058, 3, 160, 80, 0, 2058, 2059, 5, 4, 0, 0, 2059, 2064, 3, 160, 80, 0, 2060, 2061, 5, 4, 0, 0, 2061, 2063, 3, 160, 80, 0, 2062, 2060, 1, 0, 0, 0, 2063, 2066, 1, 0, 0, 0, 2064, 2062, 1, 0, 0, 0, 2064, 2065, 1, 0, 0, 0, 2065, 2067, 1, 0, 0, 0, 2066, 2064, 1, 0, 0, 0, 2067, 2068, 5, 3, 0, 0, 2068, 131, 1, 0, 0, 0, 2069, 2072, 5, 253, 0, 0, 2070, 2072, 3, 116, 58, 0, 2071, 2069, 1, 0, 0, 0, 2071, 2070, 1, 0, 0, 0, 2072, 133, 1, 0, 0, 0, 2073, 2078, 5, 260, 0, 0, 2074, 2078, 5, 261, 0, 0, 2075, 2078, 5, 262, 0, 0, 2076, 2078, 3, 160, 80, 0, 2077, 2073, 1, 0, 0, 0, 2077, 2074, 1, 0, 0, 0, 2077, 2075, 1, 0, 0, 0, 2077, 2076, 1, 0, 0, 0, 2078, 135, 1, 0, 0, 0, 2079, 2080, 5, 231, 0, 0, 2080, 2081, 3, 86, 43, 0, 2081, 2082, 5, 207, 0, 0, 2082, 2083, 3, 86, 43, 0, 2083, 137, 1, 0, 0, 0, 2084, 2085, 5, 77, 0, 0, 2085, 2086, 5, 2, 0, 0, 2086, 2087, 5, 232, 0, 0, 2087, 2088, 3, 88, 44, 0, 2088, 2089, 5, 3, 0, 0, 2089, 139, 1, 0, 0, 0, 2090, 2091, 5, 231, 0, 0, 2091, 2092, 5, 124, 0, 0, 2092, 2093, 5, 207, 0, 0, 2093, 2094, 5, 222, 0, 0, 2094, 2095, 5, 190, 0, 0, 2095, 2096, 3, 172, 86, 0, 2096, 2097, 5, 238, 0, 0, 2097, 2105, 3, 86, 43, 0, 2098, 2099, 5, 4, 0, 0, 2099, 2100, 3, 172, 86, 0, 2100, 2101, 5, 238, 0, 0, 2101, 2102, 3, 86, 43, 0, 2102, 2104, 1, 0, 0, 0, 2103, 2098, 1, 0, 0, 0, 2104, 2107, 1, 0, 0, 0, 2105, 2103, 1, 0, 0, 0, 2105, 2106, 1, 0, 0, 0, 2106, 2139, 1, 0, 0, 0, 2107, 2105, 1, 0, 0, 0, 2108, 2109, 5, 231, 0, 0, 2109, 2110, 5, 138, 0, 0, 2110, 2111, 5, 124, 0, 0, 2111, 2112, 5, 207, 0, 0, 2112, 2124, 5, 101, 0, 0, 2113, 2114, 5, 2, 0, 0, 2114, 2119, 3, 172, 86, 0, 2115, 2116, 5, 4, 0, 0, 2116, 2118, 3, 172, 86, 0, 2117, 2115, 1, 0, 0, 0, 2118, 2121, 1, 0, 0, 0, 2119, 2117, 1, 0, 0, 0, 2119, 2120, 1, 0, 0, 0, 2120, 2122, 1, 0, 0, 0, 2121, 2119, 1, 0, 0, 0, 2122, 2123, 5, 3, 0, 0, 2123, 2125, 1, 0, 0, 0, 2124, 2113, 1, 0, 0, 0, 2124, 2125, 1, 0, 0, 0, 2125, 2126, 1, 0, 0, 0, 2126, 2127, 5, 227, 0, 0, 2127, 2128, 5, 2, 0, 0, 2128, 2133, 3, 86, 43, 0, 2129, 2130, 5, 4, 0, 0, 2130, 2132, 3, 86, 43, 0, 2131, 2129, 1, 0, 0, 0, 2132, 2135, 1, 0, 0, 0, 2133, 2131, 1, 0, 0, 0, 2133, 2134, 1, 0, 0, 0, 2134, 2136, 1, 0, 0, 0, 2135, 2133, 1, 0, 0, 0, 2136, 2137, 5, 3, 0, 0, 2137, 2139, 1, 0, 0, 0, 2138, 2090, 1, 0, 0, 0, 2138, 2108, 1, 0, 0, 0, 2139, 141, 1, 0, 0, 0, 2140, 2141, 5, 152, 0, 0, 2141, 2152, 5, 2, 0, 0, 2142, 2143, 5, 153, 0, 0, 2143, 2144, 5, 25, 0, 0, 2144, 2149, 3, 86, 43, 0, 2145, 2146, 5, 4, 0, 0, 2146, 2148, 3, 86, 43, 0, 2147, 2145, 1, 0, 0, 0, 2148, 2151, 1, 0, 0, 0, 2149, 2147, 1, 0, 0, 0, 2149, 2150, 1, 0, 0, 0, 2150, 2153, 1, 0, 0, 0, 2151, 2149, 1, 0, 0, 0, 2152, 2142, 1, 0, 0, 0, 2152, 2153, 1, 0, 0, 0, 2153, 2164, 1, 0, 0, 0, 2154, 2155, 5, 148, 0, 0, 2155, 2156, 5, 25, 0, 0, 2156, 2161, 3, 54, 27, 0, 2157, 2158, 5, 4, 0, 0, 2158, 2160, 3, 54, 27, 0, 2159, 2157, 1, 0, 0, 0, 2160, 2163, 1, 0, 0, 0, 2161, 2159, 1, 0, 0, 0, 2161, 2162, 1, 0, 0, 0, 2162, 2165, 1, 0, 0, 0, 2163, 2161, 1, 0, 0, 0, 2164, 2154, 1, 0, 0, 0, 2164, 2165, 1, 0, 0, 0, 2165, 2167, 1, 0, 0, 0, 2166, 2168, 3, 144, 72, 0, 2167, 2166, 1, 0, 0, 0, 2167, 2168, 1, 0, 0, 0, 2168, 2169, 1, 0, 0, 0, 2169, 2170, 5, 3, 0, 0, 2170, 143, 1, 0, 0, 0, 2171, 2172, 5, 162, 0, 0, 2172, 2196, 3, 146, 73, 0, 2173, 2174, 5, 182, 0, 0, 2174, 2196, 3, 146, 73, 0, 2175, 2176, 5, 92, 0, 0, 2176, 2196, 3, 146, 73, 0, 2177, 2178, 5, 162, 0, 0, 2178, 2179, 5, 23, 0, 0, 2179, 2180, 3, 146, 73, 0, 2180, 2181, 5, 15, 0, 0, 2181, 2182, 3, 146, 73, 0, 2182, 2196, 1, 0, 0, 0, 2183, 2184, 5, 182, 0, 0, 2184, 2185, 5, 23, 0, 0, 2185, 2186, 3, 146, 73, 0, 2186, 2187, 5, 15, 0, 0, 2187, 2188, 3, 146, 73, 0, 2188, 2196, 1, 0, 0, 0, 2189, 2190, 5, 92, 0, 0, 2190, 2191, 5, 23, 0, 0, 2191, 2192, 3, 146, 73, 0, 2192, 2193, 5, 15, 0, 0, 2193, 2194, 3, 146, 73, 0, 2194, 2196, 1, 0, 0, 0, 2195, 2171, 1, 0, 0, 0, 2195, 2173, 1, 0, 0, 0, 2195, 2175, 1, 0, 0, 0, 2195, 2177, 1, 0, 0, 0, 2195, 2183, 1, 0, 0, 0, 2195, 2189, 1, 0, 0, 0, 2196, 145, 1, 0, 0, 0, 2197, 2198, 5, 217, 0, 0, 2198, 2207, 5, 156, 0, 0, 2199, 2200, 5, 217, 0, 0, 2200, 2207, 5, 79, 0, 0, 2201, 2202, 5, 42, 0, 0, 2202, 2207, 5, 181, 0, 0, 2203, 2204, 3, 86, 43, 0, 2204, 2205, 7, 18, 0, 0, 2205, 2207, 1, 0, 0, 0, 2206, 2197, 1, 0, 0, 0, 2206, 2199, 1, 0, 0, 0, 2206, 2201, 1, 0, 0, 0, 2206, 2203, 1, 0, 0, 0, 2207, 147, 1, 0, 0, 0, 2208, 2209, 3, 172, 86, 0, 2209, 2210, 5, 238, 0, 0, 2210, 2211, 3, 86, 43, 0, 2211, 149, 1, 0, 0, 0, 2212, 2213, 5, 81, 0, 0, 2213, 2217, 7, 19, 0, 0, 2214, 2215, 5, 215, 0, 0, 2215, 2217, 7, 20, 0, 0, 2216, 2212, 1, 0, 0, 0, 2216, 2214, 1, 0, 0, 0, 2217, 151, 1, 0, 0, 0, 2218, 2219, 5, 108, 0, 0, 2219, 2220, 5, 117, 0, 0, 2220, 2224, 3, 154, 77, 0, 2221, 2222, 5, 163, 0, 0, 2222, 2224, 7, 21, 0, 0, 2223, 2218, 1, 0, 0, 0, 2223, 2221, 1, 0, 0, 0, 2224, 153, 1, 0, 0, 0, 2225, 2226, 5, 163, 0, 0, 2226, 2233, 5, 218, 0, 0, 2227, 2228, 5, 163, 0, 0, 2228, 2233, 5, 36, 0, 0, 2229, 2230, 5, 168, 0, 0, 2230, 2233, 5, 163, 0, 0, 2231, 2233, 5, 188, 0, 0, 2232, 2225, 1, 0, 0, 0, 2232, 2227, 1, 0, 0, 0, 2232, 2229, 1, 0, 0, 0, 2232, 2231, 1, 0, 0, 0, 2233, 155, 1, 0, 0, 0, 2234, 2240, 3, 86, 43, 0, 2235, 2236, 3, 172, 86, 0, 2236, 2237, 5, 9, 0, 0, 2237, 2238, 3, 86, 43, 0, 2238, 2240, 1, 0, 0, 0, 2239, 2234, 1, 0, 0, 0, 2239, 2235, 1, 0, 0, 0, 2240, 157, 1, 0, 0, 0, 2241, 2246, 5, 187, 0, 0, 2242, 2246, 5, 53, 0, 0, 2243, 2246, 5, 101, 0, 0, 2244, 2246, 3, 172, 86, 0, 2245, 2241, 1, 0, 0, 0, 2245, 2242, 1, 0, 0, 0, 2245, 2243, 1, 0, 0, 0, 2245, 2244, 1, 0, 0, 0, 2246, 159, 1, 0, 0, 0, 2247, 2252, 3, 172, 86, 0, 2248, 2249, 5, 1, 0, 0, 2249, 2251, 3, 172, 86, 0, 2250, 2248, 1, 0, 0, 0, 2251, 2254, 1, 0, 0, 0, 2252, 2250, 1, 0, 0, 0, 2252, 2253, 1, 0, 0, 0, 2253, 161, 1, 0, 0, 0, 2254, 2252, 1, 0, 0, 0, 2255, 2256, 5, 80, 0, 0, 2256, 2257, 7, 22, 0, 0, 2257, 2258, 3, 164, 82, 0, 2258, 2259, 3, 92, 46, 0, 2259, 163, 1, 0, 0, 0, 2260, 2261, 5, 18, 0, 0, 2261, 2264, 5, 142, 0, 0, 2262, 2264, 5, 21, 0, 0, 2263, 2260, 1, 0, 0, 0, 2263, 2262, 1, 0, 0, 0, 2264, 165, 1, 0, 0, 0, 2265, 2269, 5, 47, 0, 0, 2266, 2269, 5, 44, 0, 0, 2267, 2269, 3, 168, 84, 0, 2268, 2265, 1, 0, 0, 0, 2268, 2266, 1, 0, 0, 0, 2268, 2267, 1, 0, 0, 0, 2269, 167, 1, 0, 0, 0, 2270, 2271, 5, 224, 0, 0, 2271, 2276, 3, 172, 86, 0, 2272, 2273, 5, 177, 0, 0, 2273, 2276, 3, 172, 86, 0, 2274, 2276, 3, 172, 86, 0, 2275, 2270, 1, 0, 0, 0, 2275, 2272, 1, 0, 0, 0, 2275, 2274, 1, 0, 0, 0, 2276, 169, 1, 0, 0, 0, 2277, 2282, 3, 172, 86, 0, 2278, 2279, 5, 4, 0, 0, 2279, 2281, 3, 172, 86, 0, 2280, 2278, 1, 0, 0, 0, 2281, 2284, 1, 0, 0, 0, 2282, 2280, 1, 0, 0, 0, 2282, 2283, 1, 0, 0, 0, 2283, 171, 1, 0, 0, 0, 2284, 2282, 1, 0, 0, 0, 2285, 2291, 5, 256, 0, 0, 2286, 2291, 5, 258, 0, 0, 2287, 2291, 3, 194, 97, 0, 2288, 2291, 5, 259, 0, 0, 2289, 2291, 5, 257, 0, 0, 2290, 2285, 1, 0, 0, 0, 2290, 2286, 1, 0, 0, 0, 2290, 2287, 1, 0, 0, 0, 2290, 2288, 1, 0, 0, 0, 2290, 2289, 1, 0, 0, 0, 2291, 173, 1, 0, 0, 0, 2292, 2296, 5, 254, 0, 0, 2293, 2296, 5, 255, 0, 0, 2294, 2296, 5, 253, 0, 0, 2295, 2292, 1, 0, 0, 0, 2295, 2293, 1, 0, 0, 0, 2295, 2294, 1, 0, 0, 0, 2296, 175, 1, 0, 0, 0, 2297, 2300, 3, 178, 89, 0, 2298, 2300, 3, 180, 90, 0, 2299, 2297, 1, 0, 0, 0, 2299, 2298, 1, 0, 0, 0, 2300, 177, 1, 0, 0, 0, 2301, 2302, 5, 37, 0, 0, 2302, 2303, 3, 172, 86, 0, 2303, 2304, 3, 180, 90, 0, 2304, 179, 1, 0, 0, 0, 2305, 2306, 3, 182, 91, 0, 2306, 2308, 3, 82, 41, 0, 2307, 2309, 3, 184, 92, 0, 2308, 2307, 1, 0, 0, 0, 2308, 2309, 1, 0, 0, 0, 2309, 181, 1, 0, 0, 0, 2310, 2314, 5, 220, 0, 0, 2311, 2312, 5, 158, 0, 0, 2312, 2314, 5, 112, 0, 0, 2313, 2310, 1, 0, 0, 0, 2313, 2311, 1, 0, 0, 0, 2314, 183, 1, 0, 0, 0, 2315, 2317, 3, 186, 93, 0, 2316, 2315, 1, 0, 0, 0, 2317, 2320, 1, 0, 0, 0, 2318, 2316, 1, 0, 0, 0, 2318, 2319, 1, 0, 0, 0, 2319, 185, 1, 0, 0, 0, 2320, 2318, 1, 0, 0, 0, 2321, 2325, 3, 190, 95, 0, 2322, 2325, 3, 188, 94, 0, 2323, 2325, 3, 192, 96, 0, 2324, 2321, 1, 0, 0, 0, 2324, 2322, 1, 0, 0, 0, 2324, 2323, 1, 0, 0, 0, 2325, 187, 1, 0, 0, 0, 2326, 2330, 5, 166, 0, 0, 2327, 2328, 5, 138, 0, 0, 2328, 2330, 5, 166, 0, 0, 2329, 2326, 1, 0, 0, 0, 2329, 2327, 1, 0, 0, 0, 2330, 189, 1, 0, 0, 0, 2331, 2332, 7, 23, 0, 0, 2332, 191, 1, 0, 0, 0, 2333, 2337, 5, 66, 0, 0, 2334, 2335, 5, 138, 0, 0, 2335, 2337, 5, 66, 0, 0, 2336, 2333, 1, 0, 0, 0, 2336, 2334, 1, 0, 0, 0, 2337, 193, 1, 0, 0, 0, 2338, 2339, 7, 24, 0, 0, 2339, 195, 1, 0, 0, 0, 301, 218, 223, 229, 233, 247, 251, 255, 259, 267, 271, 274, 281, 290, 296, 300, 306, 313, 322, 331, 342, 349, 359, 366, 374, 382, 390, 400, 407, 415, 420, 431, 436, 447, 458, 465, 473, 480, 488, 500, 506, 511, 516, 525, 536, 545, 550, 553, 557, 565, 572, 581, 586, 589, 599, 602, 609, 618, 624, 629, 633, 643, 646, 656, 669, 675, 680, 686, 695, 701, 708, 716, 721, 725, 733, 739, 746, 751, 755, 765, 768, 772, 775, 783, 788, 813, 819, 825, 827, 833, 839, 841, 849, 851, 870, 875, 882, 894, 896, 904, 906, 924, 927, 931, 935, 953, 956, 972, 977, 983, 986, 995, 997, 1000, 1006, 1013, 1019, 1025, 1029, 1033, 1039, 1047, 1062, 1069, 1074, 1081, 1089, 1093, 1098, 1109, 1124, 1127, 1132, 1134, 1143, 1145, 1153, 1159, 1162, 1164, 1176, 1183, 1187, 1191, 1195, 1202, 1211, 1214, 1218, 1223, 1227, 1230, 1237, 1248, 1251, 1261, 1264, 1275, 1280, 1288, 1291, 1295, 1299, 1310, 1313, 1320, 1339, 1343, 1347, 1351, 1355, 1359, 1361, 1372, 1377, 1386, 1392, 1396, 1398, 1406, 1413, 1426, 1432, 1448, 1455, 1459, 1467, 1469, 1482, 1490, 1499, 1505, 1513, 1519, 1523, 1528, 1533, 1539, 1553, 1555, 1584, 1595, 1605, 1608, 1613, 1620, 1623, 1632, 1635, 1639, 1642, 1645, 1657, 1660, 1679, 1683, 1691, 1695, 1720, 1723, 1732, 1738, 1744, 1750, 1760, 1769, 1791, 1794, 1797, 1807, 1809, 1816, 1818, 1824, 1832, 1842, 1848, 1860, 1863, 1890, 1902, 1907, 1914, 1920, 1930, 1933, 1941, 1944, 1951, 1956, 1967, 1970, 1974, 1976, 1984, 1994, 2000, 2002, 2009, 2013, 2015, 2022, 2026, 2028, 2030, 2039, 2050, 2054, 2064, 2071, 2077, 2105, 2119, 2124, 2133, 2138, 2149, 2152, 2161, 2164, 2167, 2195, 2206, 2216, 2223, 2232, 2239, 2245, 2252, 2263, 2268, 2275, 2282, 2290, 2295, 2299, 2308, 2313, 2318, 2324, 2329, 2336] \ No newline at end of file diff --git a/presto-ui/src/sql-parser/SqlBase.tokens b/presto-ui/src/sql-parser/SqlBase.tokens index e344d5d4a10c5..b0123de97fd8f 100644 --- a/presto-ui/src/sql-parser/SqlBase.tokens +++ b/presto-ui/src/sql-parser/SqlBase.tokens @@ -18,236 +18,253 @@ ARRAY=17 AS=18 ASC=19 AT=20 -BERNOULLI=21 -BETWEEN=22 -BY=23 -CALL=24 -CALLED=25 -CASCADE=26 -CASE=27 -CAST=28 -CATALOGS=29 -COLUMN=30 -COLUMNS=31 -COMMENT=32 -COMMIT=33 -COMMITTED=34 -CONSTRAINT=35 -CREATE=36 -CROSS=37 -CUBE=38 -CURRENT=39 -CURRENT_DATE=40 -CURRENT_ROLE=41 -CURRENT_TIME=42 -CURRENT_TIMESTAMP=43 -CURRENT_USER=44 -DATA=45 -DATE=46 -DAY=47 -DEALLOCATE=48 -DEFINER=49 -DELETE=50 -DESC=51 -DESCRIBE=52 -DETERMINISTIC=53 -DISTINCT=54 -DISTRIBUTED=55 -DROP=56 -ELSE=57 -END=58 -ESCAPE=59 -EXCEPT=60 -EXCLUDING=61 -EXECUTE=62 -EXISTS=63 -EXPLAIN=64 -EXTRACT=65 -EXTERNAL=66 -FALSE=67 -FETCH=68 -FILTER=69 -FIRST=70 -FOLLOWING=71 -FOR=72 -FORMAT=73 -FROM=74 -FULL=75 -FUNCTION=76 -FUNCTIONS=77 -GRANT=78 -GRANTED=79 -GRANTS=80 -GRAPHVIZ=81 -GROUP=82 -GROUPING=83 -GROUPS=84 -HAVING=85 -HOUR=86 -IF=87 -IGNORE=88 -IN=89 -INCLUDING=90 -INNER=91 -INPUT=92 -INSERT=93 -INTERSECT=94 -INTERVAL=95 -INTO=96 -INVOKER=97 -IO=98 -IS=99 -ISOLATION=100 -JSON=101 -JOIN=102 -LANGUAGE=103 -LAST=104 -LATERAL=105 -LEFT=106 -LEVEL=107 -LIKE=108 -LIMIT=109 -LOCALTIME=110 -LOCALTIMESTAMP=111 -LOGICAL=112 -MAP=113 -MATERIALIZED=114 -MINUTE=115 -MONTH=116 -NAME=117 -NATURAL=118 -NFC=119 -NFD=120 -NFKC=121 -NFKD=122 -NO=123 -NONE=124 -NORMALIZE=125 -NOT=126 -NULL=127 -NULLIF=128 -NULLS=129 -OF=130 -OFFSET=131 -ON=132 -ONLY=133 -OPTION=134 -OR=135 -ORDER=136 -ORDINALITY=137 -OUTER=138 -OUTPUT=139 -OVER=140 -PARTITION=141 -PARTITIONS=142 -POSITION=143 -PRECEDING=144 -PREPARE=145 -PRIVILEGES=146 -PROPERTIES=147 -RANGE=148 -READ=149 -RECURSIVE=150 -REFRESH=151 -RENAME=152 -REPEATABLE=153 -REPLACE=154 -RESET=155 -RESPECT=156 -RESTRICT=157 -RETURN=158 -RETURNS=159 -REVOKE=160 -RIGHT=161 -ROLE=162 -ROLES=163 -ROLLBACK=164 -ROLLUP=165 -ROW=166 -ROWS=167 -SCHEMA=168 -SCHEMAS=169 -SECOND=170 -SECURITY=171 -SELECT=172 -SERIALIZABLE=173 -SESSION=174 -SET=175 -SETS=176 -SHOW=177 -SOME=178 -SQL=179 -START=180 -STATS=181 -SUBSTRING=182 -SYSTEM=183 -SYSTEM_TIME=184 -SYSTEM_VERSION=185 -TABLE=186 -TABLES=187 -TABLESAMPLE=188 -TEMPORARY=189 -TEXT=190 -THEN=191 -TIME=192 -TIMESTAMP=193 -TO=194 -TRANSACTION=195 -TRUE=196 -TRUNCATE=197 -TRY_CAST=198 -TYPE=199 -UESCAPE=200 -UNBOUNDED=201 -UNCOMMITTED=202 -UNION=203 -UNNEST=204 -UPDATE=205 -USE=206 -USER=207 -USING=208 -VALIDATE=209 -VALUES=210 -VERBOSE=211 -VERSION=212 -VIEW=213 -WHEN=214 -WHERE=215 -WITH=216 -WORK=217 -WRITE=218 -YEAR=219 -ZONE=220 -EQ=221 -NEQ=222 -LT=223 -LTE=224 -GT=225 -GTE=226 -PLUS=227 -MINUS=228 -ASTERISK=229 -SLASH=230 -PERCENT=231 -CONCAT=232 -STRING=233 -UNICODE_STRING=234 -BINARY_LITERAL=235 -INTEGER_VALUE=236 -DECIMAL_VALUE=237 -DOUBLE_VALUE=238 -IDENTIFIER=239 -DIGIT_IDENTIFIER=240 -QUOTED_IDENTIFIER=241 -BACKQUOTED_IDENTIFIER=242 -TIME_WITH_TIME_ZONE=243 -TIMESTAMP_WITH_TIME_ZONE=244 -DOUBLE_PRECISION=245 -SIMPLE_COMMENT=246 -BRACKETED_COMMENT=247 -WS=248 -UNRECOGNIZED=249 -DELIMITER=250 +BEFORE=21 +BERNOULLI=22 +BETWEEN=23 +BRANCH=24 +BY=25 +CALL=26 +CALLED=27 +CASCADE=28 +CASE=29 +CAST=30 +CATALOGS=31 +COLUMN=32 +COLUMNS=33 +COMMENT=34 +COMMIT=35 +COMMITTED=36 +CONSTRAINT=37 +CREATE=38 +COPARTITION=39 +CROSS=40 +CUBE=41 +CURRENT=42 +CURRENT_DATE=43 +CURRENT_ROLE=44 +CURRENT_TIME=45 +CURRENT_TIMESTAMP=46 +CURRENT_USER=47 +DATA=48 +DATE=49 +DAY=50 +DEALLOCATE=51 +DEFINER=52 +DELETE=53 +DESC=54 +DESCRIBE=55 +DESCRIPTOR=56 +DETERMINISTIC=57 +DISABLED=58 +DISTINCT=59 +DISTRIBUTED=60 +DROP=61 +ELSE=62 +EMPTY=63 +ENABLED=64 +END=65 +ENFORCED=66 +ESCAPE=67 +EXCEPT=68 +EXCLUDING=69 +EXECUTE=70 +EXISTS=71 +EXPLAIN=72 +EXTRACT=73 +EXTERNAL=74 +FALSE=75 +FETCH=76 +FILTER=77 +FIRST=78 +FOLLOWING=79 +FOR=80 +FORMAT=81 +FROM=82 +FULL=83 +FUNCTION=84 +FUNCTIONS=85 +GRANT=86 +GRANTED=87 +GRANTS=88 +GRAPHVIZ=89 +GROUP=90 +GROUPING=91 +GROUPS=92 +HAVING=93 +HOUR=94 +IF=95 +IGNORE=96 +IN=97 +INCLUDING=98 +INNER=99 +INPUT=100 +INSERT=101 +INTERSECT=102 +INTERVAL=103 +INTO=104 +INVOKER=105 +IO=106 +IS=107 +ISOLATION=108 +JSON=109 +JOIN=110 +KEEP=111 +KEY=112 +LANGUAGE=113 +LAST=114 +LATERAL=115 +LEFT=116 +LEVEL=117 +LIKE=118 +LIMIT=119 +LOCALTIME=120 +LOCALTIMESTAMP=121 +LOGICAL=122 +MAP=123 +MATCHED=124 +MATERIALIZED=125 +MERGE=126 +MINUTE=127 +MONTH=128 +NAME=129 +NATURAL=130 +NFC=131 +NFD=132 +NFKC=133 +NFKD=134 +NO=135 +NONE=136 +NORMALIZE=137 +NOT=138 +NULL=139 +NULLIF=140 +NULLS=141 +OF=142 +OFFSET=143 +ON=144 +ONLY=145 +OPTION=146 +OR=147 +ORDER=148 +ORDINALITY=149 +OUTER=150 +OUTPUT=151 +OVER=152 +PARTITION=153 +PARTITIONS=154 +POSITION=155 +PRECEDING=156 +PREPARE=157 +PRIMARY=158 +PRIVILEGES=159 +PROPERTIES=160 +PRUNE=161 +RANGE=162 +READ=163 +RECURSIVE=164 +REFRESH=165 +RELY=166 +RENAME=167 +REPEATABLE=168 +REPLACE=169 +RESET=170 +RESPECT=171 +RESTRICT=172 +RETURN=173 +RETURNS=174 +REVOKE=175 +RIGHT=176 +ROLE=177 +ROLES=178 +ROLLBACK=179 +ROLLUP=180 +ROW=181 +ROWS=182 +SCHEMA=183 +SCHEMAS=184 +SECOND=185 +SECURITY=186 +SELECT=187 +SERIALIZABLE=188 +SESSION=189 +SET=190 +SETS=191 +SHOW=192 +SOME=193 +SQL=194 +START=195 +STATS=196 +SUBSTRING=197 +SYSTEM=198 +SYSTEM_TIME=199 +SYSTEM_VERSION=200 +TABLE=201 +TABLES=202 +TABLESAMPLE=203 +TAG=204 +TEMPORARY=205 +TEXT=206 +THEN=207 +TIME=208 +TIMESTAMP=209 +TO=210 +TRANSACTION=211 +TRUE=212 +TRUNCATE=213 +TRY_CAST=214 +TYPE=215 +UESCAPE=216 +UNBOUNDED=217 +UNCOMMITTED=218 +UNION=219 +UNIQUE=220 +UNNEST=221 +UPDATE=222 +USE=223 +USER=224 +USING=225 +VALIDATE=226 +VALUES=227 +VERBOSE=228 +VERSION=229 +VIEW=230 +WHEN=231 +WHERE=232 +WITH=233 +WORK=234 +WRITE=235 +YEAR=236 +ZONE=237 +EQ=238 +NEQ=239 +LT=240 +LTE=241 +GT=242 +GTE=243 +PLUS=244 +MINUS=245 +ASTERISK=246 +SLASH=247 +PERCENT=248 +CONCAT=249 +STRING=250 +UNICODE_STRING=251 +BINARY_LITERAL=252 +INTEGER_VALUE=253 +DECIMAL_VALUE=254 +DOUBLE_VALUE=255 +IDENTIFIER=256 +DIGIT_IDENTIFIER=257 +QUOTED_IDENTIFIER=258 +BACKQUOTED_IDENTIFIER=259 +TIME_WITH_TIME_ZONE=260 +TIMESTAMP_WITH_TIME_ZONE=261 +DOUBLE_PRECISION=262 +SIMPLE_COMMENT=263 +BRACKETED_COMMENT=264 +WS=265 +UNRECOGNIZED=266 +DELIMITER=267 '.'=1 '('=2 ')'=3 @@ -268,214 +285,231 @@ DELIMITER=250 'AS'=18 'ASC'=19 'AT'=20 -'BERNOULLI'=21 -'BETWEEN'=22 -'BY'=23 -'CALL'=24 -'CALLED'=25 -'CASCADE'=26 -'CASE'=27 -'CAST'=28 -'CATALOGS'=29 -'COLUMN'=30 -'COLUMNS'=31 -'COMMENT'=32 -'COMMIT'=33 -'COMMITTED'=34 -'CONSTRAINT'=35 -'CREATE'=36 -'CROSS'=37 -'CUBE'=38 -'CURRENT'=39 -'CURRENT_DATE'=40 -'CURRENT_ROLE'=41 -'CURRENT_TIME'=42 -'CURRENT_TIMESTAMP'=43 -'CURRENT_USER'=44 -'DATA'=45 -'DATE'=46 -'DAY'=47 -'DEALLOCATE'=48 -'DEFINER'=49 -'DELETE'=50 -'DESC'=51 -'DESCRIBE'=52 -'DETERMINISTIC'=53 -'DISTINCT'=54 -'DISTRIBUTED'=55 -'DROP'=56 -'ELSE'=57 -'END'=58 -'ESCAPE'=59 -'EXCEPT'=60 -'EXCLUDING'=61 -'EXECUTE'=62 -'EXISTS'=63 -'EXPLAIN'=64 -'EXTRACT'=65 -'EXTERNAL'=66 -'FALSE'=67 -'FETCH'=68 -'FILTER'=69 -'FIRST'=70 -'FOLLOWING'=71 -'FOR'=72 -'FORMAT'=73 -'FROM'=74 -'FULL'=75 -'FUNCTION'=76 -'FUNCTIONS'=77 -'GRANT'=78 -'GRANTED'=79 -'GRANTS'=80 -'GRAPHVIZ'=81 -'GROUP'=82 -'GROUPING'=83 -'GROUPS'=84 -'HAVING'=85 -'HOUR'=86 -'IF'=87 -'IGNORE'=88 -'IN'=89 -'INCLUDING'=90 -'INNER'=91 -'INPUT'=92 -'INSERT'=93 -'INTERSECT'=94 -'INTERVAL'=95 -'INTO'=96 -'INVOKER'=97 -'IO'=98 -'IS'=99 -'ISOLATION'=100 -'JSON'=101 -'JOIN'=102 -'LANGUAGE'=103 -'LAST'=104 -'LATERAL'=105 -'LEFT'=106 -'LEVEL'=107 -'LIKE'=108 -'LIMIT'=109 -'LOCALTIME'=110 -'LOCALTIMESTAMP'=111 -'LOGICAL'=112 -'MAP'=113 -'MATERIALIZED'=114 -'MINUTE'=115 -'MONTH'=116 -'NAME'=117 -'NATURAL'=118 -'NFC'=119 -'NFD'=120 -'NFKC'=121 -'NFKD'=122 -'NO'=123 -'NONE'=124 -'NORMALIZE'=125 -'NOT'=126 -'NULL'=127 -'NULLIF'=128 -'NULLS'=129 -'OF'=130 -'OFFSET'=131 -'ON'=132 -'ONLY'=133 -'OPTION'=134 -'OR'=135 -'ORDER'=136 -'ORDINALITY'=137 -'OUTER'=138 -'OUTPUT'=139 -'OVER'=140 -'PARTITION'=141 -'PARTITIONS'=142 -'POSITION'=143 -'PRECEDING'=144 -'PREPARE'=145 -'PRIVILEGES'=146 -'PROPERTIES'=147 -'RANGE'=148 -'READ'=149 -'RECURSIVE'=150 -'REFRESH'=151 -'RENAME'=152 -'REPEATABLE'=153 -'REPLACE'=154 -'RESET'=155 -'RESPECT'=156 -'RESTRICT'=157 -'RETURN'=158 -'RETURNS'=159 -'REVOKE'=160 -'RIGHT'=161 -'ROLE'=162 -'ROLES'=163 -'ROLLBACK'=164 -'ROLLUP'=165 -'ROW'=166 -'ROWS'=167 -'SCHEMA'=168 -'SCHEMAS'=169 -'SECOND'=170 -'SECURITY'=171 -'SELECT'=172 -'SERIALIZABLE'=173 -'SESSION'=174 -'SET'=175 -'SETS'=176 -'SHOW'=177 -'SOME'=178 -'SQL'=179 -'START'=180 -'STATS'=181 -'SUBSTRING'=182 -'SYSTEM'=183 -'SYSTEM_TIME'=184 -'SYSTEM_VERSION'=185 -'TABLE'=186 -'TABLES'=187 -'TABLESAMPLE'=188 -'TEMPORARY'=189 -'TEXT'=190 -'THEN'=191 -'TIME'=192 -'TIMESTAMP'=193 -'TO'=194 -'TRANSACTION'=195 -'TRUE'=196 -'TRUNCATE'=197 -'TRY_CAST'=198 -'TYPE'=199 -'UESCAPE'=200 -'UNBOUNDED'=201 -'UNCOMMITTED'=202 -'UNION'=203 -'UNNEST'=204 -'UPDATE'=205 -'USE'=206 -'USER'=207 -'USING'=208 -'VALIDATE'=209 -'VALUES'=210 -'VERBOSE'=211 -'VERSION'=212 -'VIEW'=213 -'WHEN'=214 -'WHERE'=215 -'WITH'=216 -'WORK'=217 -'WRITE'=218 -'YEAR'=219 -'ZONE'=220 -'='=221 -'<'=223 -'<='=224 -'>'=225 -'>='=226 -'+'=227 -'-'=228 -'*'=229 -'/'=230 -'%'=231 -'||'=232 +'BEFORE'=21 +'BERNOULLI'=22 +'BETWEEN'=23 +'BRANCH'=24 +'BY'=25 +'CALL'=26 +'CALLED'=27 +'CASCADE'=28 +'CASE'=29 +'CAST'=30 +'CATALOGS'=31 +'COLUMN'=32 +'COLUMNS'=33 +'COMMENT'=34 +'COMMIT'=35 +'COMMITTED'=36 +'CONSTRAINT'=37 +'CREATE'=38 +'COPARTITION'=39 +'CROSS'=40 +'CUBE'=41 +'CURRENT'=42 +'CURRENT_DATE'=43 +'CURRENT_ROLE'=44 +'CURRENT_TIME'=45 +'CURRENT_TIMESTAMP'=46 +'CURRENT_USER'=47 +'DATA'=48 +'DATE'=49 +'DAY'=50 +'DEALLOCATE'=51 +'DEFINER'=52 +'DELETE'=53 +'DESC'=54 +'DESCRIBE'=55 +'DESCRIPTOR'=56 +'DETERMINISTIC'=57 +'DISABLED'=58 +'DISTINCT'=59 +'DISTRIBUTED'=60 +'DROP'=61 +'ELSE'=62 +'EMPTY'=63 +'ENABLED'=64 +'END'=65 +'ENFORCED'=66 +'ESCAPE'=67 +'EXCEPT'=68 +'EXCLUDING'=69 +'EXECUTE'=70 +'EXISTS'=71 +'EXPLAIN'=72 +'EXTRACT'=73 +'EXTERNAL'=74 +'FALSE'=75 +'FETCH'=76 +'FILTER'=77 +'FIRST'=78 +'FOLLOWING'=79 +'FOR'=80 +'FORMAT'=81 +'FROM'=82 +'FULL'=83 +'FUNCTION'=84 +'FUNCTIONS'=85 +'GRANT'=86 +'GRANTED'=87 +'GRANTS'=88 +'GRAPHVIZ'=89 +'GROUP'=90 +'GROUPING'=91 +'GROUPS'=92 +'HAVING'=93 +'HOUR'=94 +'IF'=95 +'IGNORE'=96 +'IN'=97 +'INCLUDING'=98 +'INNER'=99 +'INPUT'=100 +'INSERT'=101 +'INTERSECT'=102 +'INTERVAL'=103 +'INTO'=104 +'INVOKER'=105 +'IO'=106 +'IS'=107 +'ISOLATION'=108 +'JSON'=109 +'JOIN'=110 +'KEEP'=111 +'KEY'=112 +'LANGUAGE'=113 +'LAST'=114 +'LATERAL'=115 +'LEFT'=116 +'LEVEL'=117 +'LIKE'=118 +'LIMIT'=119 +'LOCALTIME'=120 +'LOCALTIMESTAMP'=121 +'LOGICAL'=122 +'MAP'=123 +'MATCHED'=124 +'MATERIALIZED'=125 +'MERGE'=126 +'MINUTE'=127 +'MONTH'=128 +'NAME'=129 +'NATURAL'=130 +'NFC'=131 +'NFD'=132 +'NFKC'=133 +'NFKD'=134 +'NO'=135 +'NONE'=136 +'NORMALIZE'=137 +'NOT'=138 +'NULL'=139 +'NULLIF'=140 +'NULLS'=141 +'OF'=142 +'OFFSET'=143 +'ON'=144 +'ONLY'=145 +'OPTION'=146 +'OR'=147 +'ORDER'=148 +'ORDINALITY'=149 +'OUTER'=150 +'OUTPUT'=151 +'OVER'=152 +'PARTITION'=153 +'PARTITIONS'=154 +'POSITION'=155 +'PRECEDING'=156 +'PREPARE'=157 +'PRIMARY'=158 +'PRIVILEGES'=159 +'PROPERTIES'=160 +'PRUNE'=161 +'RANGE'=162 +'READ'=163 +'RECURSIVE'=164 +'REFRESH'=165 +'RELY'=166 +'RENAME'=167 +'REPEATABLE'=168 +'REPLACE'=169 +'RESET'=170 +'RESPECT'=171 +'RESTRICT'=172 +'RETURN'=173 +'RETURNS'=174 +'REVOKE'=175 +'RIGHT'=176 +'ROLE'=177 +'ROLES'=178 +'ROLLBACK'=179 +'ROLLUP'=180 +'ROW'=181 +'ROWS'=182 +'SCHEMA'=183 +'SCHEMAS'=184 +'SECOND'=185 +'SECURITY'=186 +'SELECT'=187 +'SERIALIZABLE'=188 +'SESSION'=189 +'SET'=190 +'SETS'=191 +'SHOW'=192 +'SOME'=193 +'SQL'=194 +'START'=195 +'STATS'=196 +'SUBSTRING'=197 +'SYSTEM'=198 +'SYSTEM_TIME'=199 +'SYSTEM_VERSION'=200 +'TABLE'=201 +'TABLES'=202 +'TABLESAMPLE'=203 +'TAG'=204 +'TEMPORARY'=205 +'TEXT'=206 +'THEN'=207 +'TIME'=208 +'TIMESTAMP'=209 +'TO'=210 +'TRANSACTION'=211 +'TRUE'=212 +'TRUNCATE'=213 +'TRY_CAST'=214 +'TYPE'=215 +'UESCAPE'=216 +'UNBOUNDED'=217 +'UNCOMMITTED'=218 +'UNION'=219 +'UNIQUE'=220 +'UNNEST'=221 +'UPDATE'=222 +'USE'=223 +'USER'=224 +'USING'=225 +'VALIDATE'=226 +'VALUES'=227 +'VERBOSE'=228 +'VERSION'=229 +'VIEW'=230 +'WHEN'=231 +'WHERE'=232 +'WITH'=233 +'WORK'=234 +'WRITE'=235 +'YEAR'=236 +'ZONE'=237 +'='=238 +'<'=240 +'<='=241 +'>'=242 +'>='=243 +'+'=244 +'-'=245 +'*'=246 +'/'=247 +'%'=248 +'||'=249 diff --git a/presto-ui/src/sql-parser/SqlBaseLexer.interp b/presto-ui/src/sql-parser/SqlBaseLexer.interp index 22de5542d6ede..196e16f25add0 100644 --- a/presto-ui/src/sql-parser/SqlBaseLexer.interp +++ b/presto-ui/src/sql-parser/SqlBaseLexer.interp @@ -20,8 +20,10 @@ null 'AS' 'ASC' 'AT' +'BEFORE' 'BERNOULLI' 'BETWEEN' +'BRANCH' 'BY' 'CALL' 'CALLED' @@ -36,6 +38,7 @@ null 'COMMITTED' 'CONSTRAINT' 'CREATE' +'COPARTITION' 'CROSS' 'CUBE' 'CURRENT' @@ -52,12 +55,17 @@ null 'DELETE' 'DESC' 'DESCRIBE' +'DESCRIPTOR' 'DETERMINISTIC' +'DISABLED' 'DISTINCT' 'DISTRIBUTED' 'DROP' 'ELSE' +'EMPTY' +'ENABLED' 'END' +'ENFORCED' 'ESCAPE' 'EXCEPT' 'EXCLUDING' @@ -102,6 +110,8 @@ null 'ISOLATION' 'JSON' 'JOIN' +'KEEP' +'KEY' 'LANGUAGE' 'LAST' 'LATERAL' @@ -113,7 +123,9 @@ null 'LOCALTIMESTAMP' 'LOGICAL' 'MAP' +'MATCHED' 'MATERIALIZED' +'MERGE' 'MINUTE' 'MONTH' 'NAME' @@ -145,12 +157,15 @@ null 'POSITION' 'PRECEDING' 'PREPARE' +'PRIMARY' 'PRIVILEGES' 'PROPERTIES' +'PRUNE' 'RANGE' 'READ' 'RECURSIVE' 'REFRESH' +'RELY' 'RENAME' 'REPEATABLE' 'REPLACE' @@ -188,6 +203,7 @@ null 'TABLE' 'TABLES' 'TABLESAMPLE' +'TAG' 'TEMPORARY' 'TEXT' 'THEN' @@ -203,6 +219,7 @@ null 'UNBOUNDED' 'UNCOMMITTED' 'UNION' +'UNIQUE' 'UNNEST' 'UPDATE' 'USE' @@ -272,8 +289,10 @@ ARRAY AS ASC AT +BEFORE BERNOULLI BETWEEN +BRANCH BY CALL CALLED @@ -288,6 +307,7 @@ COMMIT COMMITTED CONSTRAINT CREATE +COPARTITION CROSS CUBE CURRENT @@ -304,12 +324,17 @@ DEFINER DELETE DESC DESCRIBE +DESCRIPTOR DETERMINISTIC +DISABLED DISTINCT DISTRIBUTED DROP ELSE +EMPTY +ENABLED END +ENFORCED ESCAPE EXCEPT EXCLUDING @@ -354,6 +379,8 @@ IS ISOLATION JSON JOIN +KEEP +KEY LANGUAGE LAST LATERAL @@ -365,7 +392,9 @@ LOCALTIME LOCALTIMESTAMP LOGICAL MAP +MATCHED MATERIALIZED +MERGE MINUTE MONTH NAME @@ -397,12 +426,15 @@ PARTITIONS POSITION PRECEDING PREPARE +PRIMARY PRIVILEGES PROPERTIES +PRUNE RANGE READ RECURSIVE REFRESH +RELY RENAME REPEATABLE REPLACE @@ -440,6 +472,7 @@ SYSTEM_VERSION TABLE TABLES TABLESAMPLE +TAG TEMPORARY TEXT THEN @@ -455,6 +488,7 @@ UESCAPE UNBOUNDED UNCOMMITTED UNION +UNIQUE UNNEST UPDATE USE @@ -523,8 +557,10 @@ ARRAY AS ASC AT +BEFORE BERNOULLI BETWEEN +BRANCH BY CALL CALLED @@ -539,6 +575,7 @@ COMMIT COMMITTED CONSTRAINT CREATE +COPARTITION CROSS CUBE CURRENT @@ -555,12 +592,17 @@ DEFINER DELETE DESC DESCRIBE +DESCRIPTOR DETERMINISTIC +DISABLED DISTINCT DISTRIBUTED DROP ELSE +EMPTY +ENABLED END +ENFORCED ESCAPE EXCEPT EXCLUDING @@ -605,6 +647,8 @@ IS ISOLATION JSON JOIN +KEEP +KEY LANGUAGE LAST LATERAL @@ -616,7 +660,9 @@ LOCALTIME LOCALTIMESTAMP LOGICAL MAP +MATCHED MATERIALIZED +MERGE MINUTE MONTH NAME @@ -648,12 +694,15 @@ PARTITIONS POSITION PRECEDING PREPARE +PRIMARY PRIVILEGES PROPERTIES +PRUNE RANGE READ RECURSIVE REFRESH +RELY RENAME REPEATABLE REPLACE @@ -691,6 +740,7 @@ SYSTEM_VERSION TABLE TABLES TABLESAMPLE +TAG TEMPORARY TEXT THEN @@ -706,6 +756,7 @@ UESCAPE UNBOUNDED UNCOMMITTED UNION +UNIQUE UNNEST UPDATE USE @@ -764,4 +815,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 249, 2305, 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, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 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, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 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, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 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, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 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, 29, 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, 30, 1, 30, 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, 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, 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, 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, 39, 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, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 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, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 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, 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, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 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, 52, 1, 52, 1, 52, 1, 52, 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, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 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, 60, 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, 61, 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, 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, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 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, 70, 1, 70, 1, 70, 1, 70, 1, 70, 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, 73, 1, 73, 1, 73, 1, 73, 1, 73, 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, 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, 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, 80, 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, 82, 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, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 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, 92, 1, 92, 1, 92, 1, 93, 1, 93, 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, 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, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 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, 102, 1, 102, 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, 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, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 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, 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, 110, 1, 110, 1, 110, 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, 113, 1, 113, 1, 113, 1, 113, 1, 113, 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, 114, 1, 114, 1, 114, 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, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 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, 121, 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, 124, 1, 124, 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, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 132, 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, 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, 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, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 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, 142, 1, 142, 1, 143, 1, 143, 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, 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, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 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, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 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, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 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, 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, 156, 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, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 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, 165, 1, 165, 1, 165, 1, 165, 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, 168, 1, 168, 1, 168, 1, 169, 1, 169, 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, 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, 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, 175, 1, 175, 1, 175, 1, 175, 1, 175, 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, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 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, 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, 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, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 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, 187, 1, 187, 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, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 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, 192, 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, 194, 1, 194, 1, 195, 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, 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, 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, 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, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 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, 204, 1, 204, 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, 207, 1, 208, 1, 208, 1, 208, 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, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 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, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 3, 221, 2030, 8, 221, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 227, 1, 227, 1, 228, 1, 228, 1, 229, 1, 229, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 5, 232, 2059, 8, 232, 10, 232, 12, 232, 2062, 9, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 5, 233, 2073, 8, 233, 10, 233, 12, 233, 2076, 9, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 234, 1, 234, 5, 234, 2084, 8, 234, 10, 234, 12, 234, 2087, 9, 234, 1, 234, 1, 234, 1, 235, 4, 235, 2092, 8, 235, 11, 235, 12, 235, 2093, 1, 236, 4, 236, 2097, 8, 236, 11, 236, 12, 236, 2098, 1, 236, 1, 236, 5, 236, 2103, 8, 236, 10, 236, 12, 236, 2106, 9, 236, 1, 236, 1, 236, 4, 236, 2110, 8, 236, 11, 236, 12, 236, 2111, 3, 236, 2114, 8, 236, 1, 237, 4, 237, 2117, 8, 237, 11, 237, 12, 237, 2118, 1, 237, 1, 237, 5, 237, 2123, 8, 237, 10, 237, 12, 237, 2126, 9, 237, 3, 237, 2128, 8, 237, 1, 237, 1, 237, 1, 237, 1, 237, 4, 237, 2134, 8, 237, 11, 237, 12, 237, 2135, 1, 237, 1, 237, 3, 237, 2140, 8, 237, 1, 238, 1, 238, 3, 238, 2144, 8, 238, 1, 238, 1, 238, 1, 238, 5, 238, 2149, 8, 238, 10, 238, 12, 238, 2152, 9, 238, 1, 239, 1, 239, 1, 239, 1, 239, 4, 239, 2158, 8, 239, 11, 239, 12, 239, 2159, 1, 240, 1, 240, 1, 240, 1, 240, 5, 240, 2166, 8, 240, 10, 240, 12, 240, 2169, 9, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 5, 241, 2177, 8, 241, 10, 241, 12, 241, 2180, 9, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 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, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 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, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 3, 245, 2255, 8, 245, 1, 245, 4, 245, 2258, 8, 245, 11, 245, 12, 245, 2259, 1, 246, 1, 246, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 5, 248, 2270, 8, 248, 10, 248, 12, 248, 2273, 9, 248, 1, 248, 3, 248, 2276, 8, 248, 1, 248, 3, 248, 2279, 8, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 5, 249, 2287, 8, 249, 10, 249, 12, 249, 2290, 9, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 250, 4, 250, 2298, 8, 250, 11, 250, 12, 250, 2299, 1, 250, 1, 250, 1, 251, 1, 251, 1, 2288, 0, 252, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 0, 493, 0, 495, 0, 497, 246, 499, 247, 501, 248, 503, 249, 1, 0, 9, 1, 0, 39, 39, 3, 0, 58, 58, 64, 64, 95, 95, 1, 0, 34, 34, 1, 0, 96, 96, 2, 0, 43, 43, 45, 45, 1, 0, 48, 57, 1, 0, 65, 90, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 2335, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 1, 505, 1, 0, 0, 0, 3, 507, 1, 0, 0, 0, 5, 509, 1, 0, 0, 0, 7, 511, 1, 0, 0, 0, 9, 513, 1, 0, 0, 0, 11, 515, 1, 0, 0, 0, 13, 518, 1, 0, 0, 0, 15, 520, 1, 0, 0, 0, 17, 522, 1, 0, 0, 0, 19, 525, 1, 0, 0, 0, 21, 529, 1, 0, 0, 0, 23, 535, 1, 0, 0, 0, 25, 539, 1, 0, 0, 0, 27, 545, 1, 0, 0, 0, 29, 553, 1, 0, 0, 0, 31, 557, 1, 0, 0, 0, 33, 561, 1, 0, 0, 0, 35, 567, 1, 0, 0, 0, 37, 570, 1, 0, 0, 0, 39, 574, 1, 0, 0, 0, 41, 577, 1, 0, 0, 0, 43, 587, 1, 0, 0, 0, 45, 595, 1, 0, 0, 0, 47, 598, 1, 0, 0, 0, 49, 603, 1, 0, 0, 0, 51, 610, 1, 0, 0, 0, 53, 618, 1, 0, 0, 0, 55, 623, 1, 0, 0, 0, 57, 628, 1, 0, 0, 0, 59, 637, 1, 0, 0, 0, 61, 644, 1, 0, 0, 0, 63, 652, 1, 0, 0, 0, 65, 660, 1, 0, 0, 0, 67, 667, 1, 0, 0, 0, 69, 677, 1, 0, 0, 0, 71, 688, 1, 0, 0, 0, 73, 695, 1, 0, 0, 0, 75, 701, 1, 0, 0, 0, 77, 706, 1, 0, 0, 0, 79, 714, 1, 0, 0, 0, 81, 727, 1, 0, 0, 0, 83, 740, 1, 0, 0, 0, 85, 753, 1, 0, 0, 0, 87, 771, 1, 0, 0, 0, 89, 784, 1, 0, 0, 0, 91, 789, 1, 0, 0, 0, 93, 794, 1, 0, 0, 0, 95, 798, 1, 0, 0, 0, 97, 809, 1, 0, 0, 0, 99, 817, 1, 0, 0, 0, 101, 824, 1, 0, 0, 0, 103, 829, 1, 0, 0, 0, 105, 838, 1, 0, 0, 0, 107, 852, 1, 0, 0, 0, 109, 861, 1, 0, 0, 0, 111, 873, 1, 0, 0, 0, 113, 878, 1, 0, 0, 0, 115, 883, 1, 0, 0, 0, 117, 887, 1, 0, 0, 0, 119, 894, 1, 0, 0, 0, 121, 901, 1, 0, 0, 0, 123, 911, 1, 0, 0, 0, 125, 919, 1, 0, 0, 0, 127, 926, 1, 0, 0, 0, 129, 934, 1, 0, 0, 0, 131, 942, 1, 0, 0, 0, 133, 951, 1, 0, 0, 0, 135, 957, 1, 0, 0, 0, 137, 963, 1, 0, 0, 0, 139, 970, 1, 0, 0, 0, 141, 976, 1, 0, 0, 0, 143, 986, 1, 0, 0, 0, 145, 990, 1, 0, 0, 0, 147, 997, 1, 0, 0, 0, 149, 1002, 1, 0, 0, 0, 151, 1007, 1, 0, 0, 0, 153, 1016, 1, 0, 0, 0, 155, 1026, 1, 0, 0, 0, 157, 1032, 1, 0, 0, 0, 159, 1040, 1, 0, 0, 0, 161, 1047, 1, 0, 0, 0, 163, 1056, 1, 0, 0, 0, 165, 1062, 1, 0, 0, 0, 167, 1071, 1, 0, 0, 0, 169, 1078, 1, 0, 0, 0, 171, 1085, 1, 0, 0, 0, 173, 1090, 1, 0, 0, 0, 175, 1093, 1, 0, 0, 0, 177, 1100, 1, 0, 0, 0, 179, 1103, 1, 0, 0, 0, 181, 1113, 1, 0, 0, 0, 183, 1119, 1, 0, 0, 0, 185, 1125, 1, 0, 0, 0, 187, 1132, 1, 0, 0, 0, 189, 1142, 1, 0, 0, 0, 191, 1151, 1, 0, 0, 0, 193, 1156, 1, 0, 0, 0, 195, 1164, 1, 0, 0, 0, 197, 1167, 1, 0, 0, 0, 199, 1170, 1, 0, 0, 0, 201, 1180, 1, 0, 0, 0, 203, 1185, 1, 0, 0, 0, 205, 1190, 1, 0, 0, 0, 207, 1199, 1, 0, 0, 0, 209, 1204, 1, 0, 0, 0, 211, 1212, 1, 0, 0, 0, 213, 1217, 1, 0, 0, 0, 215, 1223, 1, 0, 0, 0, 217, 1228, 1, 0, 0, 0, 219, 1234, 1, 0, 0, 0, 221, 1244, 1, 0, 0, 0, 223, 1259, 1, 0, 0, 0, 225, 1267, 1, 0, 0, 0, 227, 1271, 1, 0, 0, 0, 229, 1284, 1, 0, 0, 0, 231, 1291, 1, 0, 0, 0, 233, 1297, 1, 0, 0, 0, 235, 1302, 1, 0, 0, 0, 237, 1310, 1, 0, 0, 0, 239, 1314, 1, 0, 0, 0, 241, 1318, 1, 0, 0, 0, 243, 1323, 1, 0, 0, 0, 245, 1328, 1, 0, 0, 0, 247, 1331, 1, 0, 0, 0, 249, 1336, 1, 0, 0, 0, 251, 1346, 1, 0, 0, 0, 253, 1350, 1, 0, 0, 0, 255, 1355, 1, 0, 0, 0, 257, 1362, 1, 0, 0, 0, 259, 1368, 1, 0, 0, 0, 261, 1371, 1, 0, 0, 0, 263, 1378, 1, 0, 0, 0, 265, 1381, 1, 0, 0, 0, 267, 1386, 1, 0, 0, 0, 269, 1393, 1, 0, 0, 0, 271, 1396, 1, 0, 0, 0, 273, 1402, 1, 0, 0, 0, 275, 1413, 1, 0, 0, 0, 277, 1419, 1, 0, 0, 0, 279, 1426, 1, 0, 0, 0, 281, 1431, 1, 0, 0, 0, 283, 1441, 1, 0, 0, 0, 285, 1452, 1, 0, 0, 0, 287, 1461, 1, 0, 0, 0, 289, 1471, 1, 0, 0, 0, 291, 1479, 1, 0, 0, 0, 293, 1490, 1, 0, 0, 0, 295, 1501, 1, 0, 0, 0, 297, 1507, 1, 0, 0, 0, 299, 1512, 1, 0, 0, 0, 301, 1522, 1, 0, 0, 0, 303, 1530, 1, 0, 0, 0, 305, 1537, 1, 0, 0, 0, 307, 1548, 1, 0, 0, 0, 309, 1556, 1, 0, 0, 0, 311, 1562, 1, 0, 0, 0, 313, 1570, 1, 0, 0, 0, 315, 1579, 1, 0, 0, 0, 317, 1586, 1, 0, 0, 0, 319, 1594, 1, 0, 0, 0, 321, 1601, 1, 0, 0, 0, 323, 1607, 1, 0, 0, 0, 325, 1612, 1, 0, 0, 0, 327, 1618, 1, 0, 0, 0, 329, 1627, 1, 0, 0, 0, 331, 1634, 1, 0, 0, 0, 333, 1638, 1, 0, 0, 0, 335, 1643, 1, 0, 0, 0, 337, 1650, 1, 0, 0, 0, 339, 1658, 1, 0, 0, 0, 341, 1665, 1, 0, 0, 0, 343, 1674, 1, 0, 0, 0, 345, 1681, 1, 0, 0, 0, 347, 1694, 1, 0, 0, 0, 349, 1702, 1, 0, 0, 0, 351, 1706, 1, 0, 0, 0, 353, 1711, 1, 0, 0, 0, 355, 1716, 1, 0, 0, 0, 357, 1721, 1, 0, 0, 0, 359, 1725, 1, 0, 0, 0, 361, 1731, 1, 0, 0, 0, 363, 1737, 1, 0, 0, 0, 365, 1747, 1, 0, 0, 0, 367, 1754, 1, 0, 0, 0, 369, 1766, 1, 0, 0, 0, 371, 1781, 1, 0, 0, 0, 373, 1787, 1, 0, 0, 0, 375, 1794, 1, 0, 0, 0, 377, 1806, 1, 0, 0, 0, 379, 1816, 1, 0, 0, 0, 381, 1821, 1, 0, 0, 0, 383, 1826, 1, 0, 0, 0, 385, 1831, 1, 0, 0, 0, 387, 1841, 1, 0, 0, 0, 389, 1844, 1, 0, 0, 0, 391, 1856, 1, 0, 0, 0, 393, 1861, 1, 0, 0, 0, 395, 1870, 1, 0, 0, 0, 397, 1879, 1, 0, 0, 0, 399, 1884, 1, 0, 0, 0, 401, 1892, 1, 0, 0, 0, 403, 1902, 1, 0, 0, 0, 405, 1914, 1, 0, 0, 0, 407, 1920, 1, 0, 0, 0, 409, 1927, 1, 0, 0, 0, 411, 1934, 1, 0, 0, 0, 413, 1938, 1, 0, 0, 0, 415, 1943, 1, 0, 0, 0, 417, 1949, 1, 0, 0, 0, 419, 1958, 1, 0, 0, 0, 421, 1965, 1, 0, 0, 0, 423, 1973, 1, 0, 0, 0, 425, 1981, 1, 0, 0, 0, 427, 1986, 1, 0, 0, 0, 429, 1991, 1, 0, 0, 0, 431, 1997, 1, 0, 0, 0, 433, 2002, 1, 0, 0, 0, 435, 2007, 1, 0, 0, 0, 437, 2013, 1, 0, 0, 0, 439, 2018, 1, 0, 0, 0, 441, 2023, 1, 0, 0, 0, 443, 2029, 1, 0, 0, 0, 445, 2031, 1, 0, 0, 0, 447, 2033, 1, 0, 0, 0, 449, 2036, 1, 0, 0, 0, 451, 2038, 1, 0, 0, 0, 453, 2041, 1, 0, 0, 0, 455, 2043, 1, 0, 0, 0, 457, 2045, 1, 0, 0, 0, 459, 2047, 1, 0, 0, 0, 461, 2049, 1, 0, 0, 0, 463, 2051, 1, 0, 0, 0, 465, 2054, 1, 0, 0, 0, 467, 2065, 1, 0, 0, 0, 469, 2079, 1, 0, 0, 0, 471, 2091, 1, 0, 0, 0, 473, 2113, 1, 0, 0, 0, 475, 2139, 1, 0, 0, 0, 477, 2143, 1, 0, 0, 0, 479, 2153, 1, 0, 0, 0, 481, 2161, 1, 0, 0, 0, 483, 2172, 1, 0, 0, 0, 485, 2183, 1, 0, 0, 0, 487, 2206, 1, 0, 0, 0, 489, 2234, 1, 0, 0, 0, 491, 2252, 1, 0, 0, 0, 493, 2261, 1, 0, 0, 0, 495, 2263, 1, 0, 0, 0, 497, 2265, 1, 0, 0, 0, 499, 2282, 1, 0, 0, 0, 501, 2297, 1, 0, 0, 0, 503, 2303, 1, 0, 0, 0, 505, 506, 5, 46, 0, 0, 506, 2, 1, 0, 0, 0, 507, 508, 5, 40, 0, 0, 508, 4, 1, 0, 0, 0, 509, 510, 5, 41, 0, 0, 510, 6, 1, 0, 0, 0, 511, 512, 5, 44, 0, 0, 512, 8, 1, 0, 0, 0, 513, 514, 5, 63, 0, 0, 514, 10, 1, 0, 0, 0, 515, 516, 5, 45, 0, 0, 516, 517, 5, 62, 0, 0, 517, 12, 1, 0, 0, 0, 518, 519, 5, 91, 0, 0, 519, 14, 1, 0, 0, 0, 520, 521, 5, 93, 0, 0, 521, 16, 1, 0, 0, 0, 522, 523, 5, 61, 0, 0, 523, 524, 5, 62, 0, 0, 524, 18, 1, 0, 0, 0, 525, 526, 5, 65, 0, 0, 526, 527, 5, 68, 0, 0, 527, 528, 5, 68, 0, 0, 528, 20, 1, 0, 0, 0, 529, 530, 5, 65, 0, 0, 530, 531, 5, 68, 0, 0, 531, 532, 5, 77, 0, 0, 532, 533, 5, 73, 0, 0, 533, 534, 5, 78, 0, 0, 534, 22, 1, 0, 0, 0, 535, 536, 5, 65, 0, 0, 536, 537, 5, 76, 0, 0, 537, 538, 5, 76, 0, 0, 538, 24, 1, 0, 0, 0, 539, 540, 5, 65, 0, 0, 540, 541, 5, 76, 0, 0, 541, 542, 5, 84, 0, 0, 542, 543, 5, 69, 0, 0, 543, 544, 5, 82, 0, 0, 544, 26, 1, 0, 0, 0, 545, 546, 5, 65, 0, 0, 546, 547, 5, 78, 0, 0, 547, 548, 5, 65, 0, 0, 548, 549, 5, 76, 0, 0, 549, 550, 5, 89, 0, 0, 550, 551, 5, 90, 0, 0, 551, 552, 5, 69, 0, 0, 552, 28, 1, 0, 0, 0, 553, 554, 5, 65, 0, 0, 554, 555, 5, 78, 0, 0, 555, 556, 5, 68, 0, 0, 556, 30, 1, 0, 0, 0, 557, 558, 5, 65, 0, 0, 558, 559, 5, 78, 0, 0, 559, 560, 5, 89, 0, 0, 560, 32, 1, 0, 0, 0, 561, 562, 5, 65, 0, 0, 562, 563, 5, 82, 0, 0, 563, 564, 5, 82, 0, 0, 564, 565, 5, 65, 0, 0, 565, 566, 5, 89, 0, 0, 566, 34, 1, 0, 0, 0, 567, 568, 5, 65, 0, 0, 568, 569, 5, 83, 0, 0, 569, 36, 1, 0, 0, 0, 570, 571, 5, 65, 0, 0, 571, 572, 5, 83, 0, 0, 572, 573, 5, 67, 0, 0, 573, 38, 1, 0, 0, 0, 574, 575, 5, 65, 0, 0, 575, 576, 5, 84, 0, 0, 576, 40, 1, 0, 0, 0, 577, 578, 5, 66, 0, 0, 578, 579, 5, 69, 0, 0, 579, 580, 5, 82, 0, 0, 580, 581, 5, 78, 0, 0, 581, 582, 5, 79, 0, 0, 582, 583, 5, 85, 0, 0, 583, 584, 5, 76, 0, 0, 584, 585, 5, 76, 0, 0, 585, 586, 5, 73, 0, 0, 586, 42, 1, 0, 0, 0, 587, 588, 5, 66, 0, 0, 588, 589, 5, 69, 0, 0, 589, 590, 5, 84, 0, 0, 590, 591, 5, 87, 0, 0, 591, 592, 5, 69, 0, 0, 592, 593, 5, 69, 0, 0, 593, 594, 5, 78, 0, 0, 594, 44, 1, 0, 0, 0, 595, 596, 5, 66, 0, 0, 596, 597, 5, 89, 0, 0, 597, 46, 1, 0, 0, 0, 598, 599, 5, 67, 0, 0, 599, 600, 5, 65, 0, 0, 600, 601, 5, 76, 0, 0, 601, 602, 5, 76, 0, 0, 602, 48, 1, 0, 0, 0, 603, 604, 5, 67, 0, 0, 604, 605, 5, 65, 0, 0, 605, 606, 5, 76, 0, 0, 606, 607, 5, 76, 0, 0, 607, 608, 5, 69, 0, 0, 608, 609, 5, 68, 0, 0, 609, 50, 1, 0, 0, 0, 610, 611, 5, 67, 0, 0, 611, 612, 5, 65, 0, 0, 612, 613, 5, 83, 0, 0, 613, 614, 5, 67, 0, 0, 614, 615, 5, 65, 0, 0, 615, 616, 5, 68, 0, 0, 616, 617, 5, 69, 0, 0, 617, 52, 1, 0, 0, 0, 618, 619, 5, 67, 0, 0, 619, 620, 5, 65, 0, 0, 620, 621, 5, 83, 0, 0, 621, 622, 5, 69, 0, 0, 622, 54, 1, 0, 0, 0, 623, 624, 5, 67, 0, 0, 624, 625, 5, 65, 0, 0, 625, 626, 5, 83, 0, 0, 626, 627, 5, 84, 0, 0, 627, 56, 1, 0, 0, 0, 628, 629, 5, 67, 0, 0, 629, 630, 5, 65, 0, 0, 630, 631, 5, 84, 0, 0, 631, 632, 5, 65, 0, 0, 632, 633, 5, 76, 0, 0, 633, 634, 5, 79, 0, 0, 634, 635, 5, 71, 0, 0, 635, 636, 5, 83, 0, 0, 636, 58, 1, 0, 0, 0, 637, 638, 5, 67, 0, 0, 638, 639, 5, 79, 0, 0, 639, 640, 5, 76, 0, 0, 640, 641, 5, 85, 0, 0, 641, 642, 5, 77, 0, 0, 642, 643, 5, 78, 0, 0, 643, 60, 1, 0, 0, 0, 644, 645, 5, 67, 0, 0, 645, 646, 5, 79, 0, 0, 646, 647, 5, 76, 0, 0, 647, 648, 5, 85, 0, 0, 648, 649, 5, 77, 0, 0, 649, 650, 5, 78, 0, 0, 650, 651, 5, 83, 0, 0, 651, 62, 1, 0, 0, 0, 652, 653, 5, 67, 0, 0, 653, 654, 5, 79, 0, 0, 654, 655, 5, 77, 0, 0, 655, 656, 5, 77, 0, 0, 656, 657, 5, 69, 0, 0, 657, 658, 5, 78, 0, 0, 658, 659, 5, 84, 0, 0, 659, 64, 1, 0, 0, 0, 660, 661, 5, 67, 0, 0, 661, 662, 5, 79, 0, 0, 662, 663, 5, 77, 0, 0, 663, 664, 5, 77, 0, 0, 664, 665, 5, 73, 0, 0, 665, 666, 5, 84, 0, 0, 666, 66, 1, 0, 0, 0, 667, 668, 5, 67, 0, 0, 668, 669, 5, 79, 0, 0, 669, 670, 5, 77, 0, 0, 670, 671, 5, 77, 0, 0, 671, 672, 5, 73, 0, 0, 672, 673, 5, 84, 0, 0, 673, 674, 5, 84, 0, 0, 674, 675, 5, 69, 0, 0, 675, 676, 5, 68, 0, 0, 676, 68, 1, 0, 0, 0, 677, 678, 5, 67, 0, 0, 678, 679, 5, 79, 0, 0, 679, 680, 5, 78, 0, 0, 680, 681, 5, 83, 0, 0, 681, 682, 5, 84, 0, 0, 682, 683, 5, 82, 0, 0, 683, 684, 5, 65, 0, 0, 684, 685, 5, 73, 0, 0, 685, 686, 5, 78, 0, 0, 686, 687, 5, 84, 0, 0, 687, 70, 1, 0, 0, 0, 688, 689, 5, 67, 0, 0, 689, 690, 5, 82, 0, 0, 690, 691, 5, 69, 0, 0, 691, 692, 5, 65, 0, 0, 692, 693, 5, 84, 0, 0, 693, 694, 5, 69, 0, 0, 694, 72, 1, 0, 0, 0, 695, 696, 5, 67, 0, 0, 696, 697, 5, 82, 0, 0, 697, 698, 5, 79, 0, 0, 698, 699, 5, 83, 0, 0, 699, 700, 5, 83, 0, 0, 700, 74, 1, 0, 0, 0, 701, 702, 5, 67, 0, 0, 702, 703, 5, 85, 0, 0, 703, 704, 5, 66, 0, 0, 704, 705, 5, 69, 0, 0, 705, 76, 1, 0, 0, 0, 706, 707, 5, 67, 0, 0, 707, 708, 5, 85, 0, 0, 708, 709, 5, 82, 0, 0, 709, 710, 5, 82, 0, 0, 710, 711, 5, 69, 0, 0, 711, 712, 5, 78, 0, 0, 712, 713, 5, 84, 0, 0, 713, 78, 1, 0, 0, 0, 714, 715, 5, 67, 0, 0, 715, 716, 5, 85, 0, 0, 716, 717, 5, 82, 0, 0, 717, 718, 5, 82, 0, 0, 718, 719, 5, 69, 0, 0, 719, 720, 5, 78, 0, 0, 720, 721, 5, 84, 0, 0, 721, 722, 5, 95, 0, 0, 722, 723, 5, 68, 0, 0, 723, 724, 5, 65, 0, 0, 724, 725, 5, 84, 0, 0, 725, 726, 5, 69, 0, 0, 726, 80, 1, 0, 0, 0, 727, 728, 5, 67, 0, 0, 728, 729, 5, 85, 0, 0, 729, 730, 5, 82, 0, 0, 730, 731, 5, 82, 0, 0, 731, 732, 5, 69, 0, 0, 732, 733, 5, 78, 0, 0, 733, 734, 5, 84, 0, 0, 734, 735, 5, 95, 0, 0, 735, 736, 5, 82, 0, 0, 736, 737, 5, 79, 0, 0, 737, 738, 5, 76, 0, 0, 738, 739, 5, 69, 0, 0, 739, 82, 1, 0, 0, 0, 740, 741, 5, 67, 0, 0, 741, 742, 5, 85, 0, 0, 742, 743, 5, 82, 0, 0, 743, 744, 5, 82, 0, 0, 744, 745, 5, 69, 0, 0, 745, 746, 5, 78, 0, 0, 746, 747, 5, 84, 0, 0, 747, 748, 5, 95, 0, 0, 748, 749, 5, 84, 0, 0, 749, 750, 5, 73, 0, 0, 750, 751, 5, 77, 0, 0, 751, 752, 5, 69, 0, 0, 752, 84, 1, 0, 0, 0, 753, 754, 5, 67, 0, 0, 754, 755, 5, 85, 0, 0, 755, 756, 5, 82, 0, 0, 756, 757, 5, 82, 0, 0, 757, 758, 5, 69, 0, 0, 758, 759, 5, 78, 0, 0, 759, 760, 5, 84, 0, 0, 760, 761, 5, 95, 0, 0, 761, 762, 5, 84, 0, 0, 762, 763, 5, 73, 0, 0, 763, 764, 5, 77, 0, 0, 764, 765, 5, 69, 0, 0, 765, 766, 5, 83, 0, 0, 766, 767, 5, 84, 0, 0, 767, 768, 5, 65, 0, 0, 768, 769, 5, 77, 0, 0, 769, 770, 5, 80, 0, 0, 770, 86, 1, 0, 0, 0, 771, 772, 5, 67, 0, 0, 772, 773, 5, 85, 0, 0, 773, 774, 5, 82, 0, 0, 774, 775, 5, 82, 0, 0, 775, 776, 5, 69, 0, 0, 776, 777, 5, 78, 0, 0, 777, 778, 5, 84, 0, 0, 778, 779, 5, 95, 0, 0, 779, 780, 5, 85, 0, 0, 780, 781, 5, 83, 0, 0, 781, 782, 5, 69, 0, 0, 782, 783, 5, 82, 0, 0, 783, 88, 1, 0, 0, 0, 784, 785, 5, 68, 0, 0, 785, 786, 5, 65, 0, 0, 786, 787, 5, 84, 0, 0, 787, 788, 5, 65, 0, 0, 788, 90, 1, 0, 0, 0, 789, 790, 5, 68, 0, 0, 790, 791, 5, 65, 0, 0, 791, 792, 5, 84, 0, 0, 792, 793, 5, 69, 0, 0, 793, 92, 1, 0, 0, 0, 794, 795, 5, 68, 0, 0, 795, 796, 5, 65, 0, 0, 796, 797, 5, 89, 0, 0, 797, 94, 1, 0, 0, 0, 798, 799, 5, 68, 0, 0, 799, 800, 5, 69, 0, 0, 800, 801, 5, 65, 0, 0, 801, 802, 5, 76, 0, 0, 802, 803, 5, 76, 0, 0, 803, 804, 5, 79, 0, 0, 804, 805, 5, 67, 0, 0, 805, 806, 5, 65, 0, 0, 806, 807, 5, 84, 0, 0, 807, 808, 5, 69, 0, 0, 808, 96, 1, 0, 0, 0, 809, 810, 5, 68, 0, 0, 810, 811, 5, 69, 0, 0, 811, 812, 5, 70, 0, 0, 812, 813, 5, 73, 0, 0, 813, 814, 5, 78, 0, 0, 814, 815, 5, 69, 0, 0, 815, 816, 5, 82, 0, 0, 816, 98, 1, 0, 0, 0, 817, 818, 5, 68, 0, 0, 818, 819, 5, 69, 0, 0, 819, 820, 5, 76, 0, 0, 820, 821, 5, 69, 0, 0, 821, 822, 5, 84, 0, 0, 822, 823, 5, 69, 0, 0, 823, 100, 1, 0, 0, 0, 824, 825, 5, 68, 0, 0, 825, 826, 5, 69, 0, 0, 826, 827, 5, 83, 0, 0, 827, 828, 5, 67, 0, 0, 828, 102, 1, 0, 0, 0, 829, 830, 5, 68, 0, 0, 830, 831, 5, 69, 0, 0, 831, 832, 5, 83, 0, 0, 832, 833, 5, 67, 0, 0, 833, 834, 5, 82, 0, 0, 834, 835, 5, 73, 0, 0, 835, 836, 5, 66, 0, 0, 836, 837, 5, 69, 0, 0, 837, 104, 1, 0, 0, 0, 838, 839, 5, 68, 0, 0, 839, 840, 5, 69, 0, 0, 840, 841, 5, 84, 0, 0, 841, 842, 5, 69, 0, 0, 842, 843, 5, 82, 0, 0, 843, 844, 5, 77, 0, 0, 844, 845, 5, 73, 0, 0, 845, 846, 5, 78, 0, 0, 846, 847, 5, 73, 0, 0, 847, 848, 5, 83, 0, 0, 848, 849, 5, 84, 0, 0, 849, 850, 5, 73, 0, 0, 850, 851, 5, 67, 0, 0, 851, 106, 1, 0, 0, 0, 852, 853, 5, 68, 0, 0, 853, 854, 5, 73, 0, 0, 854, 855, 5, 83, 0, 0, 855, 856, 5, 84, 0, 0, 856, 857, 5, 73, 0, 0, 857, 858, 5, 78, 0, 0, 858, 859, 5, 67, 0, 0, 859, 860, 5, 84, 0, 0, 860, 108, 1, 0, 0, 0, 861, 862, 5, 68, 0, 0, 862, 863, 5, 73, 0, 0, 863, 864, 5, 83, 0, 0, 864, 865, 5, 84, 0, 0, 865, 866, 5, 82, 0, 0, 866, 867, 5, 73, 0, 0, 867, 868, 5, 66, 0, 0, 868, 869, 5, 85, 0, 0, 869, 870, 5, 84, 0, 0, 870, 871, 5, 69, 0, 0, 871, 872, 5, 68, 0, 0, 872, 110, 1, 0, 0, 0, 873, 874, 5, 68, 0, 0, 874, 875, 5, 82, 0, 0, 875, 876, 5, 79, 0, 0, 876, 877, 5, 80, 0, 0, 877, 112, 1, 0, 0, 0, 878, 879, 5, 69, 0, 0, 879, 880, 5, 76, 0, 0, 880, 881, 5, 83, 0, 0, 881, 882, 5, 69, 0, 0, 882, 114, 1, 0, 0, 0, 883, 884, 5, 69, 0, 0, 884, 885, 5, 78, 0, 0, 885, 886, 5, 68, 0, 0, 886, 116, 1, 0, 0, 0, 887, 888, 5, 69, 0, 0, 888, 889, 5, 83, 0, 0, 889, 890, 5, 67, 0, 0, 890, 891, 5, 65, 0, 0, 891, 892, 5, 80, 0, 0, 892, 893, 5, 69, 0, 0, 893, 118, 1, 0, 0, 0, 894, 895, 5, 69, 0, 0, 895, 896, 5, 88, 0, 0, 896, 897, 5, 67, 0, 0, 897, 898, 5, 69, 0, 0, 898, 899, 5, 80, 0, 0, 899, 900, 5, 84, 0, 0, 900, 120, 1, 0, 0, 0, 901, 902, 5, 69, 0, 0, 902, 903, 5, 88, 0, 0, 903, 904, 5, 67, 0, 0, 904, 905, 5, 76, 0, 0, 905, 906, 5, 85, 0, 0, 906, 907, 5, 68, 0, 0, 907, 908, 5, 73, 0, 0, 908, 909, 5, 78, 0, 0, 909, 910, 5, 71, 0, 0, 910, 122, 1, 0, 0, 0, 911, 912, 5, 69, 0, 0, 912, 913, 5, 88, 0, 0, 913, 914, 5, 69, 0, 0, 914, 915, 5, 67, 0, 0, 915, 916, 5, 85, 0, 0, 916, 917, 5, 84, 0, 0, 917, 918, 5, 69, 0, 0, 918, 124, 1, 0, 0, 0, 919, 920, 5, 69, 0, 0, 920, 921, 5, 88, 0, 0, 921, 922, 5, 73, 0, 0, 922, 923, 5, 83, 0, 0, 923, 924, 5, 84, 0, 0, 924, 925, 5, 83, 0, 0, 925, 126, 1, 0, 0, 0, 926, 927, 5, 69, 0, 0, 927, 928, 5, 88, 0, 0, 928, 929, 5, 80, 0, 0, 929, 930, 5, 76, 0, 0, 930, 931, 5, 65, 0, 0, 931, 932, 5, 73, 0, 0, 932, 933, 5, 78, 0, 0, 933, 128, 1, 0, 0, 0, 934, 935, 5, 69, 0, 0, 935, 936, 5, 88, 0, 0, 936, 937, 5, 84, 0, 0, 937, 938, 5, 82, 0, 0, 938, 939, 5, 65, 0, 0, 939, 940, 5, 67, 0, 0, 940, 941, 5, 84, 0, 0, 941, 130, 1, 0, 0, 0, 942, 943, 5, 69, 0, 0, 943, 944, 5, 88, 0, 0, 944, 945, 5, 84, 0, 0, 945, 946, 5, 69, 0, 0, 946, 947, 5, 82, 0, 0, 947, 948, 5, 78, 0, 0, 948, 949, 5, 65, 0, 0, 949, 950, 5, 76, 0, 0, 950, 132, 1, 0, 0, 0, 951, 952, 5, 70, 0, 0, 952, 953, 5, 65, 0, 0, 953, 954, 5, 76, 0, 0, 954, 955, 5, 83, 0, 0, 955, 956, 5, 69, 0, 0, 956, 134, 1, 0, 0, 0, 957, 958, 5, 70, 0, 0, 958, 959, 5, 69, 0, 0, 959, 960, 5, 84, 0, 0, 960, 961, 5, 67, 0, 0, 961, 962, 5, 72, 0, 0, 962, 136, 1, 0, 0, 0, 963, 964, 5, 70, 0, 0, 964, 965, 5, 73, 0, 0, 965, 966, 5, 76, 0, 0, 966, 967, 5, 84, 0, 0, 967, 968, 5, 69, 0, 0, 968, 969, 5, 82, 0, 0, 969, 138, 1, 0, 0, 0, 970, 971, 5, 70, 0, 0, 971, 972, 5, 73, 0, 0, 972, 973, 5, 82, 0, 0, 973, 974, 5, 83, 0, 0, 974, 975, 5, 84, 0, 0, 975, 140, 1, 0, 0, 0, 976, 977, 5, 70, 0, 0, 977, 978, 5, 79, 0, 0, 978, 979, 5, 76, 0, 0, 979, 980, 5, 76, 0, 0, 980, 981, 5, 79, 0, 0, 981, 982, 5, 87, 0, 0, 982, 983, 5, 73, 0, 0, 983, 984, 5, 78, 0, 0, 984, 985, 5, 71, 0, 0, 985, 142, 1, 0, 0, 0, 986, 987, 5, 70, 0, 0, 987, 988, 5, 79, 0, 0, 988, 989, 5, 82, 0, 0, 989, 144, 1, 0, 0, 0, 990, 991, 5, 70, 0, 0, 991, 992, 5, 79, 0, 0, 992, 993, 5, 82, 0, 0, 993, 994, 5, 77, 0, 0, 994, 995, 5, 65, 0, 0, 995, 996, 5, 84, 0, 0, 996, 146, 1, 0, 0, 0, 997, 998, 5, 70, 0, 0, 998, 999, 5, 82, 0, 0, 999, 1000, 5, 79, 0, 0, 1000, 1001, 5, 77, 0, 0, 1001, 148, 1, 0, 0, 0, 1002, 1003, 5, 70, 0, 0, 1003, 1004, 5, 85, 0, 0, 1004, 1005, 5, 76, 0, 0, 1005, 1006, 5, 76, 0, 0, 1006, 150, 1, 0, 0, 0, 1007, 1008, 5, 70, 0, 0, 1008, 1009, 5, 85, 0, 0, 1009, 1010, 5, 78, 0, 0, 1010, 1011, 5, 67, 0, 0, 1011, 1012, 5, 84, 0, 0, 1012, 1013, 5, 73, 0, 0, 1013, 1014, 5, 79, 0, 0, 1014, 1015, 5, 78, 0, 0, 1015, 152, 1, 0, 0, 0, 1016, 1017, 5, 70, 0, 0, 1017, 1018, 5, 85, 0, 0, 1018, 1019, 5, 78, 0, 0, 1019, 1020, 5, 67, 0, 0, 1020, 1021, 5, 84, 0, 0, 1021, 1022, 5, 73, 0, 0, 1022, 1023, 5, 79, 0, 0, 1023, 1024, 5, 78, 0, 0, 1024, 1025, 5, 83, 0, 0, 1025, 154, 1, 0, 0, 0, 1026, 1027, 5, 71, 0, 0, 1027, 1028, 5, 82, 0, 0, 1028, 1029, 5, 65, 0, 0, 1029, 1030, 5, 78, 0, 0, 1030, 1031, 5, 84, 0, 0, 1031, 156, 1, 0, 0, 0, 1032, 1033, 5, 71, 0, 0, 1033, 1034, 5, 82, 0, 0, 1034, 1035, 5, 65, 0, 0, 1035, 1036, 5, 78, 0, 0, 1036, 1037, 5, 84, 0, 0, 1037, 1038, 5, 69, 0, 0, 1038, 1039, 5, 68, 0, 0, 1039, 158, 1, 0, 0, 0, 1040, 1041, 5, 71, 0, 0, 1041, 1042, 5, 82, 0, 0, 1042, 1043, 5, 65, 0, 0, 1043, 1044, 5, 78, 0, 0, 1044, 1045, 5, 84, 0, 0, 1045, 1046, 5, 83, 0, 0, 1046, 160, 1, 0, 0, 0, 1047, 1048, 5, 71, 0, 0, 1048, 1049, 5, 82, 0, 0, 1049, 1050, 5, 65, 0, 0, 1050, 1051, 5, 80, 0, 0, 1051, 1052, 5, 72, 0, 0, 1052, 1053, 5, 86, 0, 0, 1053, 1054, 5, 73, 0, 0, 1054, 1055, 5, 90, 0, 0, 1055, 162, 1, 0, 0, 0, 1056, 1057, 5, 71, 0, 0, 1057, 1058, 5, 82, 0, 0, 1058, 1059, 5, 79, 0, 0, 1059, 1060, 5, 85, 0, 0, 1060, 1061, 5, 80, 0, 0, 1061, 164, 1, 0, 0, 0, 1062, 1063, 5, 71, 0, 0, 1063, 1064, 5, 82, 0, 0, 1064, 1065, 5, 79, 0, 0, 1065, 1066, 5, 85, 0, 0, 1066, 1067, 5, 80, 0, 0, 1067, 1068, 5, 73, 0, 0, 1068, 1069, 5, 78, 0, 0, 1069, 1070, 5, 71, 0, 0, 1070, 166, 1, 0, 0, 0, 1071, 1072, 5, 71, 0, 0, 1072, 1073, 5, 82, 0, 0, 1073, 1074, 5, 79, 0, 0, 1074, 1075, 5, 85, 0, 0, 1075, 1076, 5, 80, 0, 0, 1076, 1077, 5, 83, 0, 0, 1077, 168, 1, 0, 0, 0, 1078, 1079, 5, 72, 0, 0, 1079, 1080, 5, 65, 0, 0, 1080, 1081, 5, 86, 0, 0, 1081, 1082, 5, 73, 0, 0, 1082, 1083, 5, 78, 0, 0, 1083, 1084, 5, 71, 0, 0, 1084, 170, 1, 0, 0, 0, 1085, 1086, 5, 72, 0, 0, 1086, 1087, 5, 79, 0, 0, 1087, 1088, 5, 85, 0, 0, 1088, 1089, 5, 82, 0, 0, 1089, 172, 1, 0, 0, 0, 1090, 1091, 5, 73, 0, 0, 1091, 1092, 5, 70, 0, 0, 1092, 174, 1, 0, 0, 0, 1093, 1094, 5, 73, 0, 0, 1094, 1095, 5, 71, 0, 0, 1095, 1096, 5, 78, 0, 0, 1096, 1097, 5, 79, 0, 0, 1097, 1098, 5, 82, 0, 0, 1098, 1099, 5, 69, 0, 0, 1099, 176, 1, 0, 0, 0, 1100, 1101, 5, 73, 0, 0, 1101, 1102, 5, 78, 0, 0, 1102, 178, 1, 0, 0, 0, 1103, 1104, 5, 73, 0, 0, 1104, 1105, 5, 78, 0, 0, 1105, 1106, 5, 67, 0, 0, 1106, 1107, 5, 76, 0, 0, 1107, 1108, 5, 85, 0, 0, 1108, 1109, 5, 68, 0, 0, 1109, 1110, 5, 73, 0, 0, 1110, 1111, 5, 78, 0, 0, 1111, 1112, 5, 71, 0, 0, 1112, 180, 1, 0, 0, 0, 1113, 1114, 5, 73, 0, 0, 1114, 1115, 5, 78, 0, 0, 1115, 1116, 5, 78, 0, 0, 1116, 1117, 5, 69, 0, 0, 1117, 1118, 5, 82, 0, 0, 1118, 182, 1, 0, 0, 0, 1119, 1120, 5, 73, 0, 0, 1120, 1121, 5, 78, 0, 0, 1121, 1122, 5, 80, 0, 0, 1122, 1123, 5, 85, 0, 0, 1123, 1124, 5, 84, 0, 0, 1124, 184, 1, 0, 0, 0, 1125, 1126, 5, 73, 0, 0, 1126, 1127, 5, 78, 0, 0, 1127, 1128, 5, 83, 0, 0, 1128, 1129, 5, 69, 0, 0, 1129, 1130, 5, 82, 0, 0, 1130, 1131, 5, 84, 0, 0, 1131, 186, 1, 0, 0, 0, 1132, 1133, 5, 73, 0, 0, 1133, 1134, 5, 78, 0, 0, 1134, 1135, 5, 84, 0, 0, 1135, 1136, 5, 69, 0, 0, 1136, 1137, 5, 82, 0, 0, 1137, 1138, 5, 83, 0, 0, 1138, 1139, 5, 69, 0, 0, 1139, 1140, 5, 67, 0, 0, 1140, 1141, 5, 84, 0, 0, 1141, 188, 1, 0, 0, 0, 1142, 1143, 5, 73, 0, 0, 1143, 1144, 5, 78, 0, 0, 1144, 1145, 5, 84, 0, 0, 1145, 1146, 5, 69, 0, 0, 1146, 1147, 5, 82, 0, 0, 1147, 1148, 5, 86, 0, 0, 1148, 1149, 5, 65, 0, 0, 1149, 1150, 5, 76, 0, 0, 1150, 190, 1, 0, 0, 0, 1151, 1152, 5, 73, 0, 0, 1152, 1153, 5, 78, 0, 0, 1153, 1154, 5, 84, 0, 0, 1154, 1155, 5, 79, 0, 0, 1155, 192, 1, 0, 0, 0, 1156, 1157, 5, 73, 0, 0, 1157, 1158, 5, 78, 0, 0, 1158, 1159, 5, 86, 0, 0, 1159, 1160, 5, 79, 0, 0, 1160, 1161, 5, 75, 0, 0, 1161, 1162, 5, 69, 0, 0, 1162, 1163, 5, 82, 0, 0, 1163, 194, 1, 0, 0, 0, 1164, 1165, 5, 73, 0, 0, 1165, 1166, 5, 79, 0, 0, 1166, 196, 1, 0, 0, 0, 1167, 1168, 5, 73, 0, 0, 1168, 1169, 5, 83, 0, 0, 1169, 198, 1, 0, 0, 0, 1170, 1171, 5, 73, 0, 0, 1171, 1172, 5, 83, 0, 0, 1172, 1173, 5, 79, 0, 0, 1173, 1174, 5, 76, 0, 0, 1174, 1175, 5, 65, 0, 0, 1175, 1176, 5, 84, 0, 0, 1176, 1177, 5, 73, 0, 0, 1177, 1178, 5, 79, 0, 0, 1178, 1179, 5, 78, 0, 0, 1179, 200, 1, 0, 0, 0, 1180, 1181, 5, 74, 0, 0, 1181, 1182, 5, 83, 0, 0, 1182, 1183, 5, 79, 0, 0, 1183, 1184, 5, 78, 0, 0, 1184, 202, 1, 0, 0, 0, 1185, 1186, 5, 74, 0, 0, 1186, 1187, 5, 79, 0, 0, 1187, 1188, 5, 73, 0, 0, 1188, 1189, 5, 78, 0, 0, 1189, 204, 1, 0, 0, 0, 1190, 1191, 5, 76, 0, 0, 1191, 1192, 5, 65, 0, 0, 1192, 1193, 5, 78, 0, 0, 1193, 1194, 5, 71, 0, 0, 1194, 1195, 5, 85, 0, 0, 1195, 1196, 5, 65, 0, 0, 1196, 1197, 5, 71, 0, 0, 1197, 1198, 5, 69, 0, 0, 1198, 206, 1, 0, 0, 0, 1199, 1200, 5, 76, 0, 0, 1200, 1201, 5, 65, 0, 0, 1201, 1202, 5, 83, 0, 0, 1202, 1203, 5, 84, 0, 0, 1203, 208, 1, 0, 0, 0, 1204, 1205, 5, 76, 0, 0, 1205, 1206, 5, 65, 0, 0, 1206, 1207, 5, 84, 0, 0, 1207, 1208, 5, 69, 0, 0, 1208, 1209, 5, 82, 0, 0, 1209, 1210, 5, 65, 0, 0, 1210, 1211, 5, 76, 0, 0, 1211, 210, 1, 0, 0, 0, 1212, 1213, 5, 76, 0, 0, 1213, 1214, 5, 69, 0, 0, 1214, 1215, 5, 70, 0, 0, 1215, 1216, 5, 84, 0, 0, 1216, 212, 1, 0, 0, 0, 1217, 1218, 5, 76, 0, 0, 1218, 1219, 5, 69, 0, 0, 1219, 1220, 5, 86, 0, 0, 1220, 1221, 5, 69, 0, 0, 1221, 1222, 5, 76, 0, 0, 1222, 214, 1, 0, 0, 0, 1223, 1224, 5, 76, 0, 0, 1224, 1225, 5, 73, 0, 0, 1225, 1226, 5, 75, 0, 0, 1226, 1227, 5, 69, 0, 0, 1227, 216, 1, 0, 0, 0, 1228, 1229, 5, 76, 0, 0, 1229, 1230, 5, 73, 0, 0, 1230, 1231, 5, 77, 0, 0, 1231, 1232, 5, 73, 0, 0, 1232, 1233, 5, 84, 0, 0, 1233, 218, 1, 0, 0, 0, 1234, 1235, 5, 76, 0, 0, 1235, 1236, 5, 79, 0, 0, 1236, 1237, 5, 67, 0, 0, 1237, 1238, 5, 65, 0, 0, 1238, 1239, 5, 76, 0, 0, 1239, 1240, 5, 84, 0, 0, 1240, 1241, 5, 73, 0, 0, 1241, 1242, 5, 77, 0, 0, 1242, 1243, 5, 69, 0, 0, 1243, 220, 1, 0, 0, 0, 1244, 1245, 5, 76, 0, 0, 1245, 1246, 5, 79, 0, 0, 1246, 1247, 5, 67, 0, 0, 1247, 1248, 5, 65, 0, 0, 1248, 1249, 5, 76, 0, 0, 1249, 1250, 5, 84, 0, 0, 1250, 1251, 5, 73, 0, 0, 1251, 1252, 5, 77, 0, 0, 1252, 1253, 5, 69, 0, 0, 1253, 1254, 5, 83, 0, 0, 1254, 1255, 5, 84, 0, 0, 1255, 1256, 5, 65, 0, 0, 1256, 1257, 5, 77, 0, 0, 1257, 1258, 5, 80, 0, 0, 1258, 222, 1, 0, 0, 0, 1259, 1260, 5, 76, 0, 0, 1260, 1261, 5, 79, 0, 0, 1261, 1262, 5, 71, 0, 0, 1262, 1263, 5, 73, 0, 0, 1263, 1264, 5, 67, 0, 0, 1264, 1265, 5, 65, 0, 0, 1265, 1266, 5, 76, 0, 0, 1266, 224, 1, 0, 0, 0, 1267, 1268, 5, 77, 0, 0, 1268, 1269, 5, 65, 0, 0, 1269, 1270, 5, 80, 0, 0, 1270, 226, 1, 0, 0, 0, 1271, 1272, 5, 77, 0, 0, 1272, 1273, 5, 65, 0, 0, 1273, 1274, 5, 84, 0, 0, 1274, 1275, 5, 69, 0, 0, 1275, 1276, 5, 82, 0, 0, 1276, 1277, 5, 73, 0, 0, 1277, 1278, 5, 65, 0, 0, 1278, 1279, 5, 76, 0, 0, 1279, 1280, 5, 73, 0, 0, 1280, 1281, 5, 90, 0, 0, 1281, 1282, 5, 69, 0, 0, 1282, 1283, 5, 68, 0, 0, 1283, 228, 1, 0, 0, 0, 1284, 1285, 5, 77, 0, 0, 1285, 1286, 5, 73, 0, 0, 1286, 1287, 5, 78, 0, 0, 1287, 1288, 5, 85, 0, 0, 1288, 1289, 5, 84, 0, 0, 1289, 1290, 5, 69, 0, 0, 1290, 230, 1, 0, 0, 0, 1291, 1292, 5, 77, 0, 0, 1292, 1293, 5, 79, 0, 0, 1293, 1294, 5, 78, 0, 0, 1294, 1295, 5, 84, 0, 0, 1295, 1296, 5, 72, 0, 0, 1296, 232, 1, 0, 0, 0, 1297, 1298, 5, 78, 0, 0, 1298, 1299, 5, 65, 0, 0, 1299, 1300, 5, 77, 0, 0, 1300, 1301, 5, 69, 0, 0, 1301, 234, 1, 0, 0, 0, 1302, 1303, 5, 78, 0, 0, 1303, 1304, 5, 65, 0, 0, 1304, 1305, 5, 84, 0, 0, 1305, 1306, 5, 85, 0, 0, 1306, 1307, 5, 82, 0, 0, 1307, 1308, 5, 65, 0, 0, 1308, 1309, 5, 76, 0, 0, 1309, 236, 1, 0, 0, 0, 1310, 1311, 5, 78, 0, 0, 1311, 1312, 5, 70, 0, 0, 1312, 1313, 5, 67, 0, 0, 1313, 238, 1, 0, 0, 0, 1314, 1315, 5, 78, 0, 0, 1315, 1316, 5, 70, 0, 0, 1316, 1317, 5, 68, 0, 0, 1317, 240, 1, 0, 0, 0, 1318, 1319, 5, 78, 0, 0, 1319, 1320, 5, 70, 0, 0, 1320, 1321, 5, 75, 0, 0, 1321, 1322, 5, 67, 0, 0, 1322, 242, 1, 0, 0, 0, 1323, 1324, 5, 78, 0, 0, 1324, 1325, 5, 70, 0, 0, 1325, 1326, 5, 75, 0, 0, 1326, 1327, 5, 68, 0, 0, 1327, 244, 1, 0, 0, 0, 1328, 1329, 5, 78, 0, 0, 1329, 1330, 5, 79, 0, 0, 1330, 246, 1, 0, 0, 0, 1331, 1332, 5, 78, 0, 0, 1332, 1333, 5, 79, 0, 0, 1333, 1334, 5, 78, 0, 0, 1334, 1335, 5, 69, 0, 0, 1335, 248, 1, 0, 0, 0, 1336, 1337, 5, 78, 0, 0, 1337, 1338, 5, 79, 0, 0, 1338, 1339, 5, 82, 0, 0, 1339, 1340, 5, 77, 0, 0, 1340, 1341, 5, 65, 0, 0, 1341, 1342, 5, 76, 0, 0, 1342, 1343, 5, 73, 0, 0, 1343, 1344, 5, 90, 0, 0, 1344, 1345, 5, 69, 0, 0, 1345, 250, 1, 0, 0, 0, 1346, 1347, 5, 78, 0, 0, 1347, 1348, 5, 79, 0, 0, 1348, 1349, 5, 84, 0, 0, 1349, 252, 1, 0, 0, 0, 1350, 1351, 5, 78, 0, 0, 1351, 1352, 5, 85, 0, 0, 1352, 1353, 5, 76, 0, 0, 1353, 1354, 5, 76, 0, 0, 1354, 254, 1, 0, 0, 0, 1355, 1356, 5, 78, 0, 0, 1356, 1357, 5, 85, 0, 0, 1357, 1358, 5, 76, 0, 0, 1358, 1359, 5, 76, 0, 0, 1359, 1360, 5, 73, 0, 0, 1360, 1361, 5, 70, 0, 0, 1361, 256, 1, 0, 0, 0, 1362, 1363, 5, 78, 0, 0, 1363, 1364, 5, 85, 0, 0, 1364, 1365, 5, 76, 0, 0, 1365, 1366, 5, 76, 0, 0, 1366, 1367, 5, 83, 0, 0, 1367, 258, 1, 0, 0, 0, 1368, 1369, 5, 79, 0, 0, 1369, 1370, 5, 70, 0, 0, 1370, 260, 1, 0, 0, 0, 1371, 1372, 5, 79, 0, 0, 1372, 1373, 5, 70, 0, 0, 1373, 1374, 5, 70, 0, 0, 1374, 1375, 5, 83, 0, 0, 1375, 1376, 5, 69, 0, 0, 1376, 1377, 5, 84, 0, 0, 1377, 262, 1, 0, 0, 0, 1378, 1379, 5, 79, 0, 0, 1379, 1380, 5, 78, 0, 0, 1380, 264, 1, 0, 0, 0, 1381, 1382, 5, 79, 0, 0, 1382, 1383, 5, 78, 0, 0, 1383, 1384, 5, 76, 0, 0, 1384, 1385, 5, 89, 0, 0, 1385, 266, 1, 0, 0, 0, 1386, 1387, 5, 79, 0, 0, 1387, 1388, 5, 80, 0, 0, 1388, 1389, 5, 84, 0, 0, 1389, 1390, 5, 73, 0, 0, 1390, 1391, 5, 79, 0, 0, 1391, 1392, 5, 78, 0, 0, 1392, 268, 1, 0, 0, 0, 1393, 1394, 5, 79, 0, 0, 1394, 1395, 5, 82, 0, 0, 1395, 270, 1, 0, 0, 0, 1396, 1397, 5, 79, 0, 0, 1397, 1398, 5, 82, 0, 0, 1398, 1399, 5, 68, 0, 0, 1399, 1400, 5, 69, 0, 0, 1400, 1401, 5, 82, 0, 0, 1401, 272, 1, 0, 0, 0, 1402, 1403, 5, 79, 0, 0, 1403, 1404, 5, 82, 0, 0, 1404, 1405, 5, 68, 0, 0, 1405, 1406, 5, 73, 0, 0, 1406, 1407, 5, 78, 0, 0, 1407, 1408, 5, 65, 0, 0, 1408, 1409, 5, 76, 0, 0, 1409, 1410, 5, 73, 0, 0, 1410, 1411, 5, 84, 0, 0, 1411, 1412, 5, 89, 0, 0, 1412, 274, 1, 0, 0, 0, 1413, 1414, 5, 79, 0, 0, 1414, 1415, 5, 85, 0, 0, 1415, 1416, 5, 84, 0, 0, 1416, 1417, 5, 69, 0, 0, 1417, 1418, 5, 82, 0, 0, 1418, 276, 1, 0, 0, 0, 1419, 1420, 5, 79, 0, 0, 1420, 1421, 5, 85, 0, 0, 1421, 1422, 5, 84, 0, 0, 1422, 1423, 5, 80, 0, 0, 1423, 1424, 5, 85, 0, 0, 1424, 1425, 5, 84, 0, 0, 1425, 278, 1, 0, 0, 0, 1426, 1427, 5, 79, 0, 0, 1427, 1428, 5, 86, 0, 0, 1428, 1429, 5, 69, 0, 0, 1429, 1430, 5, 82, 0, 0, 1430, 280, 1, 0, 0, 0, 1431, 1432, 5, 80, 0, 0, 1432, 1433, 5, 65, 0, 0, 1433, 1434, 5, 82, 0, 0, 1434, 1435, 5, 84, 0, 0, 1435, 1436, 5, 73, 0, 0, 1436, 1437, 5, 84, 0, 0, 1437, 1438, 5, 73, 0, 0, 1438, 1439, 5, 79, 0, 0, 1439, 1440, 5, 78, 0, 0, 1440, 282, 1, 0, 0, 0, 1441, 1442, 5, 80, 0, 0, 1442, 1443, 5, 65, 0, 0, 1443, 1444, 5, 82, 0, 0, 1444, 1445, 5, 84, 0, 0, 1445, 1446, 5, 73, 0, 0, 1446, 1447, 5, 84, 0, 0, 1447, 1448, 5, 73, 0, 0, 1448, 1449, 5, 79, 0, 0, 1449, 1450, 5, 78, 0, 0, 1450, 1451, 5, 83, 0, 0, 1451, 284, 1, 0, 0, 0, 1452, 1453, 5, 80, 0, 0, 1453, 1454, 5, 79, 0, 0, 1454, 1455, 5, 83, 0, 0, 1455, 1456, 5, 73, 0, 0, 1456, 1457, 5, 84, 0, 0, 1457, 1458, 5, 73, 0, 0, 1458, 1459, 5, 79, 0, 0, 1459, 1460, 5, 78, 0, 0, 1460, 286, 1, 0, 0, 0, 1461, 1462, 5, 80, 0, 0, 1462, 1463, 5, 82, 0, 0, 1463, 1464, 5, 69, 0, 0, 1464, 1465, 5, 67, 0, 0, 1465, 1466, 5, 69, 0, 0, 1466, 1467, 5, 68, 0, 0, 1467, 1468, 5, 73, 0, 0, 1468, 1469, 5, 78, 0, 0, 1469, 1470, 5, 71, 0, 0, 1470, 288, 1, 0, 0, 0, 1471, 1472, 5, 80, 0, 0, 1472, 1473, 5, 82, 0, 0, 1473, 1474, 5, 69, 0, 0, 1474, 1475, 5, 80, 0, 0, 1475, 1476, 5, 65, 0, 0, 1476, 1477, 5, 82, 0, 0, 1477, 1478, 5, 69, 0, 0, 1478, 290, 1, 0, 0, 0, 1479, 1480, 5, 80, 0, 0, 1480, 1481, 5, 82, 0, 0, 1481, 1482, 5, 73, 0, 0, 1482, 1483, 5, 86, 0, 0, 1483, 1484, 5, 73, 0, 0, 1484, 1485, 5, 76, 0, 0, 1485, 1486, 5, 69, 0, 0, 1486, 1487, 5, 71, 0, 0, 1487, 1488, 5, 69, 0, 0, 1488, 1489, 5, 83, 0, 0, 1489, 292, 1, 0, 0, 0, 1490, 1491, 5, 80, 0, 0, 1491, 1492, 5, 82, 0, 0, 1492, 1493, 5, 79, 0, 0, 1493, 1494, 5, 80, 0, 0, 1494, 1495, 5, 69, 0, 0, 1495, 1496, 5, 82, 0, 0, 1496, 1497, 5, 84, 0, 0, 1497, 1498, 5, 73, 0, 0, 1498, 1499, 5, 69, 0, 0, 1499, 1500, 5, 83, 0, 0, 1500, 294, 1, 0, 0, 0, 1501, 1502, 5, 82, 0, 0, 1502, 1503, 5, 65, 0, 0, 1503, 1504, 5, 78, 0, 0, 1504, 1505, 5, 71, 0, 0, 1505, 1506, 5, 69, 0, 0, 1506, 296, 1, 0, 0, 0, 1507, 1508, 5, 82, 0, 0, 1508, 1509, 5, 69, 0, 0, 1509, 1510, 5, 65, 0, 0, 1510, 1511, 5, 68, 0, 0, 1511, 298, 1, 0, 0, 0, 1512, 1513, 5, 82, 0, 0, 1513, 1514, 5, 69, 0, 0, 1514, 1515, 5, 67, 0, 0, 1515, 1516, 5, 85, 0, 0, 1516, 1517, 5, 82, 0, 0, 1517, 1518, 5, 83, 0, 0, 1518, 1519, 5, 73, 0, 0, 1519, 1520, 5, 86, 0, 0, 1520, 1521, 5, 69, 0, 0, 1521, 300, 1, 0, 0, 0, 1522, 1523, 5, 82, 0, 0, 1523, 1524, 5, 69, 0, 0, 1524, 1525, 5, 70, 0, 0, 1525, 1526, 5, 82, 0, 0, 1526, 1527, 5, 69, 0, 0, 1527, 1528, 5, 83, 0, 0, 1528, 1529, 5, 72, 0, 0, 1529, 302, 1, 0, 0, 0, 1530, 1531, 5, 82, 0, 0, 1531, 1532, 5, 69, 0, 0, 1532, 1533, 5, 78, 0, 0, 1533, 1534, 5, 65, 0, 0, 1534, 1535, 5, 77, 0, 0, 1535, 1536, 5, 69, 0, 0, 1536, 304, 1, 0, 0, 0, 1537, 1538, 5, 82, 0, 0, 1538, 1539, 5, 69, 0, 0, 1539, 1540, 5, 80, 0, 0, 1540, 1541, 5, 69, 0, 0, 1541, 1542, 5, 65, 0, 0, 1542, 1543, 5, 84, 0, 0, 1543, 1544, 5, 65, 0, 0, 1544, 1545, 5, 66, 0, 0, 1545, 1546, 5, 76, 0, 0, 1546, 1547, 5, 69, 0, 0, 1547, 306, 1, 0, 0, 0, 1548, 1549, 5, 82, 0, 0, 1549, 1550, 5, 69, 0, 0, 1550, 1551, 5, 80, 0, 0, 1551, 1552, 5, 76, 0, 0, 1552, 1553, 5, 65, 0, 0, 1553, 1554, 5, 67, 0, 0, 1554, 1555, 5, 69, 0, 0, 1555, 308, 1, 0, 0, 0, 1556, 1557, 5, 82, 0, 0, 1557, 1558, 5, 69, 0, 0, 1558, 1559, 5, 83, 0, 0, 1559, 1560, 5, 69, 0, 0, 1560, 1561, 5, 84, 0, 0, 1561, 310, 1, 0, 0, 0, 1562, 1563, 5, 82, 0, 0, 1563, 1564, 5, 69, 0, 0, 1564, 1565, 5, 83, 0, 0, 1565, 1566, 5, 80, 0, 0, 1566, 1567, 5, 69, 0, 0, 1567, 1568, 5, 67, 0, 0, 1568, 1569, 5, 84, 0, 0, 1569, 312, 1, 0, 0, 0, 1570, 1571, 5, 82, 0, 0, 1571, 1572, 5, 69, 0, 0, 1572, 1573, 5, 83, 0, 0, 1573, 1574, 5, 84, 0, 0, 1574, 1575, 5, 82, 0, 0, 1575, 1576, 5, 73, 0, 0, 1576, 1577, 5, 67, 0, 0, 1577, 1578, 5, 84, 0, 0, 1578, 314, 1, 0, 0, 0, 1579, 1580, 5, 82, 0, 0, 1580, 1581, 5, 69, 0, 0, 1581, 1582, 5, 84, 0, 0, 1582, 1583, 5, 85, 0, 0, 1583, 1584, 5, 82, 0, 0, 1584, 1585, 5, 78, 0, 0, 1585, 316, 1, 0, 0, 0, 1586, 1587, 5, 82, 0, 0, 1587, 1588, 5, 69, 0, 0, 1588, 1589, 5, 84, 0, 0, 1589, 1590, 5, 85, 0, 0, 1590, 1591, 5, 82, 0, 0, 1591, 1592, 5, 78, 0, 0, 1592, 1593, 5, 83, 0, 0, 1593, 318, 1, 0, 0, 0, 1594, 1595, 5, 82, 0, 0, 1595, 1596, 5, 69, 0, 0, 1596, 1597, 5, 86, 0, 0, 1597, 1598, 5, 79, 0, 0, 1598, 1599, 5, 75, 0, 0, 1599, 1600, 5, 69, 0, 0, 1600, 320, 1, 0, 0, 0, 1601, 1602, 5, 82, 0, 0, 1602, 1603, 5, 73, 0, 0, 1603, 1604, 5, 71, 0, 0, 1604, 1605, 5, 72, 0, 0, 1605, 1606, 5, 84, 0, 0, 1606, 322, 1, 0, 0, 0, 1607, 1608, 5, 82, 0, 0, 1608, 1609, 5, 79, 0, 0, 1609, 1610, 5, 76, 0, 0, 1610, 1611, 5, 69, 0, 0, 1611, 324, 1, 0, 0, 0, 1612, 1613, 5, 82, 0, 0, 1613, 1614, 5, 79, 0, 0, 1614, 1615, 5, 76, 0, 0, 1615, 1616, 5, 69, 0, 0, 1616, 1617, 5, 83, 0, 0, 1617, 326, 1, 0, 0, 0, 1618, 1619, 5, 82, 0, 0, 1619, 1620, 5, 79, 0, 0, 1620, 1621, 5, 76, 0, 0, 1621, 1622, 5, 76, 0, 0, 1622, 1623, 5, 66, 0, 0, 1623, 1624, 5, 65, 0, 0, 1624, 1625, 5, 67, 0, 0, 1625, 1626, 5, 75, 0, 0, 1626, 328, 1, 0, 0, 0, 1627, 1628, 5, 82, 0, 0, 1628, 1629, 5, 79, 0, 0, 1629, 1630, 5, 76, 0, 0, 1630, 1631, 5, 76, 0, 0, 1631, 1632, 5, 85, 0, 0, 1632, 1633, 5, 80, 0, 0, 1633, 330, 1, 0, 0, 0, 1634, 1635, 5, 82, 0, 0, 1635, 1636, 5, 79, 0, 0, 1636, 1637, 5, 87, 0, 0, 1637, 332, 1, 0, 0, 0, 1638, 1639, 5, 82, 0, 0, 1639, 1640, 5, 79, 0, 0, 1640, 1641, 5, 87, 0, 0, 1641, 1642, 5, 83, 0, 0, 1642, 334, 1, 0, 0, 0, 1643, 1644, 5, 83, 0, 0, 1644, 1645, 5, 67, 0, 0, 1645, 1646, 5, 72, 0, 0, 1646, 1647, 5, 69, 0, 0, 1647, 1648, 5, 77, 0, 0, 1648, 1649, 5, 65, 0, 0, 1649, 336, 1, 0, 0, 0, 1650, 1651, 5, 83, 0, 0, 1651, 1652, 5, 67, 0, 0, 1652, 1653, 5, 72, 0, 0, 1653, 1654, 5, 69, 0, 0, 1654, 1655, 5, 77, 0, 0, 1655, 1656, 5, 65, 0, 0, 1656, 1657, 5, 83, 0, 0, 1657, 338, 1, 0, 0, 0, 1658, 1659, 5, 83, 0, 0, 1659, 1660, 5, 69, 0, 0, 1660, 1661, 5, 67, 0, 0, 1661, 1662, 5, 79, 0, 0, 1662, 1663, 5, 78, 0, 0, 1663, 1664, 5, 68, 0, 0, 1664, 340, 1, 0, 0, 0, 1665, 1666, 5, 83, 0, 0, 1666, 1667, 5, 69, 0, 0, 1667, 1668, 5, 67, 0, 0, 1668, 1669, 5, 85, 0, 0, 1669, 1670, 5, 82, 0, 0, 1670, 1671, 5, 73, 0, 0, 1671, 1672, 5, 84, 0, 0, 1672, 1673, 5, 89, 0, 0, 1673, 342, 1, 0, 0, 0, 1674, 1675, 5, 83, 0, 0, 1675, 1676, 5, 69, 0, 0, 1676, 1677, 5, 76, 0, 0, 1677, 1678, 5, 69, 0, 0, 1678, 1679, 5, 67, 0, 0, 1679, 1680, 5, 84, 0, 0, 1680, 344, 1, 0, 0, 0, 1681, 1682, 5, 83, 0, 0, 1682, 1683, 5, 69, 0, 0, 1683, 1684, 5, 82, 0, 0, 1684, 1685, 5, 73, 0, 0, 1685, 1686, 5, 65, 0, 0, 1686, 1687, 5, 76, 0, 0, 1687, 1688, 5, 73, 0, 0, 1688, 1689, 5, 90, 0, 0, 1689, 1690, 5, 65, 0, 0, 1690, 1691, 5, 66, 0, 0, 1691, 1692, 5, 76, 0, 0, 1692, 1693, 5, 69, 0, 0, 1693, 346, 1, 0, 0, 0, 1694, 1695, 5, 83, 0, 0, 1695, 1696, 5, 69, 0, 0, 1696, 1697, 5, 83, 0, 0, 1697, 1698, 5, 83, 0, 0, 1698, 1699, 5, 73, 0, 0, 1699, 1700, 5, 79, 0, 0, 1700, 1701, 5, 78, 0, 0, 1701, 348, 1, 0, 0, 0, 1702, 1703, 5, 83, 0, 0, 1703, 1704, 5, 69, 0, 0, 1704, 1705, 5, 84, 0, 0, 1705, 350, 1, 0, 0, 0, 1706, 1707, 5, 83, 0, 0, 1707, 1708, 5, 69, 0, 0, 1708, 1709, 5, 84, 0, 0, 1709, 1710, 5, 83, 0, 0, 1710, 352, 1, 0, 0, 0, 1711, 1712, 5, 83, 0, 0, 1712, 1713, 5, 72, 0, 0, 1713, 1714, 5, 79, 0, 0, 1714, 1715, 5, 87, 0, 0, 1715, 354, 1, 0, 0, 0, 1716, 1717, 5, 83, 0, 0, 1717, 1718, 5, 79, 0, 0, 1718, 1719, 5, 77, 0, 0, 1719, 1720, 5, 69, 0, 0, 1720, 356, 1, 0, 0, 0, 1721, 1722, 5, 83, 0, 0, 1722, 1723, 5, 81, 0, 0, 1723, 1724, 5, 76, 0, 0, 1724, 358, 1, 0, 0, 0, 1725, 1726, 5, 83, 0, 0, 1726, 1727, 5, 84, 0, 0, 1727, 1728, 5, 65, 0, 0, 1728, 1729, 5, 82, 0, 0, 1729, 1730, 5, 84, 0, 0, 1730, 360, 1, 0, 0, 0, 1731, 1732, 5, 83, 0, 0, 1732, 1733, 5, 84, 0, 0, 1733, 1734, 5, 65, 0, 0, 1734, 1735, 5, 84, 0, 0, 1735, 1736, 5, 83, 0, 0, 1736, 362, 1, 0, 0, 0, 1737, 1738, 5, 83, 0, 0, 1738, 1739, 5, 85, 0, 0, 1739, 1740, 5, 66, 0, 0, 1740, 1741, 5, 83, 0, 0, 1741, 1742, 5, 84, 0, 0, 1742, 1743, 5, 82, 0, 0, 1743, 1744, 5, 73, 0, 0, 1744, 1745, 5, 78, 0, 0, 1745, 1746, 5, 71, 0, 0, 1746, 364, 1, 0, 0, 0, 1747, 1748, 5, 83, 0, 0, 1748, 1749, 5, 89, 0, 0, 1749, 1750, 5, 83, 0, 0, 1750, 1751, 5, 84, 0, 0, 1751, 1752, 5, 69, 0, 0, 1752, 1753, 5, 77, 0, 0, 1753, 366, 1, 0, 0, 0, 1754, 1755, 5, 83, 0, 0, 1755, 1756, 5, 89, 0, 0, 1756, 1757, 5, 83, 0, 0, 1757, 1758, 5, 84, 0, 0, 1758, 1759, 5, 69, 0, 0, 1759, 1760, 5, 77, 0, 0, 1760, 1761, 5, 95, 0, 0, 1761, 1762, 5, 84, 0, 0, 1762, 1763, 5, 73, 0, 0, 1763, 1764, 5, 77, 0, 0, 1764, 1765, 5, 69, 0, 0, 1765, 368, 1, 0, 0, 0, 1766, 1767, 5, 83, 0, 0, 1767, 1768, 5, 89, 0, 0, 1768, 1769, 5, 83, 0, 0, 1769, 1770, 5, 84, 0, 0, 1770, 1771, 5, 69, 0, 0, 1771, 1772, 5, 77, 0, 0, 1772, 1773, 5, 95, 0, 0, 1773, 1774, 5, 86, 0, 0, 1774, 1775, 5, 69, 0, 0, 1775, 1776, 5, 82, 0, 0, 1776, 1777, 5, 83, 0, 0, 1777, 1778, 5, 73, 0, 0, 1778, 1779, 5, 79, 0, 0, 1779, 1780, 5, 78, 0, 0, 1780, 370, 1, 0, 0, 0, 1781, 1782, 5, 84, 0, 0, 1782, 1783, 5, 65, 0, 0, 1783, 1784, 5, 66, 0, 0, 1784, 1785, 5, 76, 0, 0, 1785, 1786, 5, 69, 0, 0, 1786, 372, 1, 0, 0, 0, 1787, 1788, 5, 84, 0, 0, 1788, 1789, 5, 65, 0, 0, 1789, 1790, 5, 66, 0, 0, 1790, 1791, 5, 76, 0, 0, 1791, 1792, 5, 69, 0, 0, 1792, 1793, 5, 83, 0, 0, 1793, 374, 1, 0, 0, 0, 1794, 1795, 5, 84, 0, 0, 1795, 1796, 5, 65, 0, 0, 1796, 1797, 5, 66, 0, 0, 1797, 1798, 5, 76, 0, 0, 1798, 1799, 5, 69, 0, 0, 1799, 1800, 5, 83, 0, 0, 1800, 1801, 5, 65, 0, 0, 1801, 1802, 5, 77, 0, 0, 1802, 1803, 5, 80, 0, 0, 1803, 1804, 5, 76, 0, 0, 1804, 1805, 5, 69, 0, 0, 1805, 376, 1, 0, 0, 0, 1806, 1807, 5, 84, 0, 0, 1807, 1808, 5, 69, 0, 0, 1808, 1809, 5, 77, 0, 0, 1809, 1810, 5, 80, 0, 0, 1810, 1811, 5, 79, 0, 0, 1811, 1812, 5, 82, 0, 0, 1812, 1813, 5, 65, 0, 0, 1813, 1814, 5, 82, 0, 0, 1814, 1815, 5, 89, 0, 0, 1815, 378, 1, 0, 0, 0, 1816, 1817, 5, 84, 0, 0, 1817, 1818, 5, 69, 0, 0, 1818, 1819, 5, 88, 0, 0, 1819, 1820, 5, 84, 0, 0, 1820, 380, 1, 0, 0, 0, 1821, 1822, 5, 84, 0, 0, 1822, 1823, 5, 72, 0, 0, 1823, 1824, 5, 69, 0, 0, 1824, 1825, 5, 78, 0, 0, 1825, 382, 1, 0, 0, 0, 1826, 1827, 5, 84, 0, 0, 1827, 1828, 5, 73, 0, 0, 1828, 1829, 5, 77, 0, 0, 1829, 1830, 5, 69, 0, 0, 1830, 384, 1, 0, 0, 0, 1831, 1832, 5, 84, 0, 0, 1832, 1833, 5, 73, 0, 0, 1833, 1834, 5, 77, 0, 0, 1834, 1835, 5, 69, 0, 0, 1835, 1836, 5, 83, 0, 0, 1836, 1837, 5, 84, 0, 0, 1837, 1838, 5, 65, 0, 0, 1838, 1839, 5, 77, 0, 0, 1839, 1840, 5, 80, 0, 0, 1840, 386, 1, 0, 0, 0, 1841, 1842, 5, 84, 0, 0, 1842, 1843, 5, 79, 0, 0, 1843, 388, 1, 0, 0, 0, 1844, 1845, 5, 84, 0, 0, 1845, 1846, 5, 82, 0, 0, 1846, 1847, 5, 65, 0, 0, 1847, 1848, 5, 78, 0, 0, 1848, 1849, 5, 83, 0, 0, 1849, 1850, 5, 65, 0, 0, 1850, 1851, 5, 67, 0, 0, 1851, 1852, 5, 84, 0, 0, 1852, 1853, 5, 73, 0, 0, 1853, 1854, 5, 79, 0, 0, 1854, 1855, 5, 78, 0, 0, 1855, 390, 1, 0, 0, 0, 1856, 1857, 5, 84, 0, 0, 1857, 1858, 5, 82, 0, 0, 1858, 1859, 5, 85, 0, 0, 1859, 1860, 5, 69, 0, 0, 1860, 392, 1, 0, 0, 0, 1861, 1862, 5, 84, 0, 0, 1862, 1863, 5, 82, 0, 0, 1863, 1864, 5, 85, 0, 0, 1864, 1865, 5, 78, 0, 0, 1865, 1866, 5, 67, 0, 0, 1866, 1867, 5, 65, 0, 0, 1867, 1868, 5, 84, 0, 0, 1868, 1869, 5, 69, 0, 0, 1869, 394, 1, 0, 0, 0, 1870, 1871, 5, 84, 0, 0, 1871, 1872, 5, 82, 0, 0, 1872, 1873, 5, 89, 0, 0, 1873, 1874, 5, 95, 0, 0, 1874, 1875, 5, 67, 0, 0, 1875, 1876, 5, 65, 0, 0, 1876, 1877, 5, 83, 0, 0, 1877, 1878, 5, 84, 0, 0, 1878, 396, 1, 0, 0, 0, 1879, 1880, 5, 84, 0, 0, 1880, 1881, 5, 89, 0, 0, 1881, 1882, 5, 80, 0, 0, 1882, 1883, 5, 69, 0, 0, 1883, 398, 1, 0, 0, 0, 1884, 1885, 5, 85, 0, 0, 1885, 1886, 5, 69, 0, 0, 1886, 1887, 5, 83, 0, 0, 1887, 1888, 5, 67, 0, 0, 1888, 1889, 5, 65, 0, 0, 1889, 1890, 5, 80, 0, 0, 1890, 1891, 5, 69, 0, 0, 1891, 400, 1, 0, 0, 0, 1892, 1893, 5, 85, 0, 0, 1893, 1894, 5, 78, 0, 0, 1894, 1895, 5, 66, 0, 0, 1895, 1896, 5, 79, 0, 0, 1896, 1897, 5, 85, 0, 0, 1897, 1898, 5, 78, 0, 0, 1898, 1899, 5, 68, 0, 0, 1899, 1900, 5, 69, 0, 0, 1900, 1901, 5, 68, 0, 0, 1901, 402, 1, 0, 0, 0, 1902, 1903, 5, 85, 0, 0, 1903, 1904, 5, 78, 0, 0, 1904, 1905, 5, 67, 0, 0, 1905, 1906, 5, 79, 0, 0, 1906, 1907, 5, 77, 0, 0, 1907, 1908, 5, 77, 0, 0, 1908, 1909, 5, 73, 0, 0, 1909, 1910, 5, 84, 0, 0, 1910, 1911, 5, 84, 0, 0, 1911, 1912, 5, 69, 0, 0, 1912, 1913, 5, 68, 0, 0, 1913, 404, 1, 0, 0, 0, 1914, 1915, 5, 85, 0, 0, 1915, 1916, 5, 78, 0, 0, 1916, 1917, 5, 73, 0, 0, 1917, 1918, 5, 79, 0, 0, 1918, 1919, 5, 78, 0, 0, 1919, 406, 1, 0, 0, 0, 1920, 1921, 5, 85, 0, 0, 1921, 1922, 5, 78, 0, 0, 1922, 1923, 5, 78, 0, 0, 1923, 1924, 5, 69, 0, 0, 1924, 1925, 5, 83, 0, 0, 1925, 1926, 5, 84, 0, 0, 1926, 408, 1, 0, 0, 0, 1927, 1928, 5, 85, 0, 0, 1928, 1929, 5, 80, 0, 0, 1929, 1930, 5, 68, 0, 0, 1930, 1931, 5, 65, 0, 0, 1931, 1932, 5, 84, 0, 0, 1932, 1933, 5, 69, 0, 0, 1933, 410, 1, 0, 0, 0, 1934, 1935, 5, 85, 0, 0, 1935, 1936, 5, 83, 0, 0, 1936, 1937, 5, 69, 0, 0, 1937, 412, 1, 0, 0, 0, 1938, 1939, 5, 85, 0, 0, 1939, 1940, 5, 83, 0, 0, 1940, 1941, 5, 69, 0, 0, 1941, 1942, 5, 82, 0, 0, 1942, 414, 1, 0, 0, 0, 1943, 1944, 5, 85, 0, 0, 1944, 1945, 5, 83, 0, 0, 1945, 1946, 5, 73, 0, 0, 1946, 1947, 5, 78, 0, 0, 1947, 1948, 5, 71, 0, 0, 1948, 416, 1, 0, 0, 0, 1949, 1950, 5, 86, 0, 0, 1950, 1951, 5, 65, 0, 0, 1951, 1952, 5, 76, 0, 0, 1952, 1953, 5, 73, 0, 0, 1953, 1954, 5, 68, 0, 0, 1954, 1955, 5, 65, 0, 0, 1955, 1956, 5, 84, 0, 0, 1956, 1957, 5, 69, 0, 0, 1957, 418, 1, 0, 0, 0, 1958, 1959, 5, 86, 0, 0, 1959, 1960, 5, 65, 0, 0, 1960, 1961, 5, 76, 0, 0, 1961, 1962, 5, 85, 0, 0, 1962, 1963, 5, 69, 0, 0, 1963, 1964, 5, 83, 0, 0, 1964, 420, 1, 0, 0, 0, 1965, 1966, 5, 86, 0, 0, 1966, 1967, 5, 69, 0, 0, 1967, 1968, 5, 82, 0, 0, 1968, 1969, 5, 66, 0, 0, 1969, 1970, 5, 79, 0, 0, 1970, 1971, 5, 83, 0, 0, 1971, 1972, 5, 69, 0, 0, 1972, 422, 1, 0, 0, 0, 1973, 1974, 5, 86, 0, 0, 1974, 1975, 5, 69, 0, 0, 1975, 1976, 5, 82, 0, 0, 1976, 1977, 5, 83, 0, 0, 1977, 1978, 5, 73, 0, 0, 1978, 1979, 5, 79, 0, 0, 1979, 1980, 5, 78, 0, 0, 1980, 424, 1, 0, 0, 0, 1981, 1982, 5, 86, 0, 0, 1982, 1983, 5, 73, 0, 0, 1983, 1984, 5, 69, 0, 0, 1984, 1985, 5, 87, 0, 0, 1985, 426, 1, 0, 0, 0, 1986, 1987, 5, 87, 0, 0, 1987, 1988, 5, 72, 0, 0, 1988, 1989, 5, 69, 0, 0, 1989, 1990, 5, 78, 0, 0, 1990, 428, 1, 0, 0, 0, 1991, 1992, 5, 87, 0, 0, 1992, 1993, 5, 72, 0, 0, 1993, 1994, 5, 69, 0, 0, 1994, 1995, 5, 82, 0, 0, 1995, 1996, 5, 69, 0, 0, 1996, 430, 1, 0, 0, 0, 1997, 1998, 5, 87, 0, 0, 1998, 1999, 5, 73, 0, 0, 1999, 2000, 5, 84, 0, 0, 2000, 2001, 5, 72, 0, 0, 2001, 432, 1, 0, 0, 0, 2002, 2003, 5, 87, 0, 0, 2003, 2004, 5, 79, 0, 0, 2004, 2005, 5, 82, 0, 0, 2005, 2006, 5, 75, 0, 0, 2006, 434, 1, 0, 0, 0, 2007, 2008, 5, 87, 0, 0, 2008, 2009, 5, 82, 0, 0, 2009, 2010, 5, 73, 0, 0, 2010, 2011, 5, 84, 0, 0, 2011, 2012, 5, 69, 0, 0, 2012, 436, 1, 0, 0, 0, 2013, 2014, 5, 89, 0, 0, 2014, 2015, 5, 69, 0, 0, 2015, 2016, 5, 65, 0, 0, 2016, 2017, 5, 82, 0, 0, 2017, 438, 1, 0, 0, 0, 2018, 2019, 5, 90, 0, 0, 2019, 2020, 5, 79, 0, 0, 2020, 2021, 5, 78, 0, 0, 2021, 2022, 5, 69, 0, 0, 2022, 440, 1, 0, 0, 0, 2023, 2024, 5, 61, 0, 0, 2024, 442, 1, 0, 0, 0, 2025, 2026, 5, 60, 0, 0, 2026, 2030, 5, 62, 0, 0, 2027, 2028, 5, 33, 0, 0, 2028, 2030, 5, 61, 0, 0, 2029, 2025, 1, 0, 0, 0, 2029, 2027, 1, 0, 0, 0, 2030, 444, 1, 0, 0, 0, 2031, 2032, 5, 60, 0, 0, 2032, 446, 1, 0, 0, 0, 2033, 2034, 5, 60, 0, 0, 2034, 2035, 5, 61, 0, 0, 2035, 448, 1, 0, 0, 0, 2036, 2037, 5, 62, 0, 0, 2037, 450, 1, 0, 0, 0, 2038, 2039, 5, 62, 0, 0, 2039, 2040, 5, 61, 0, 0, 2040, 452, 1, 0, 0, 0, 2041, 2042, 5, 43, 0, 0, 2042, 454, 1, 0, 0, 0, 2043, 2044, 5, 45, 0, 0, 2044, 456, 1, 0, 0, 0, 2045, 2046, 5, 42, 0, 0, 2046, 458, 1, 0, 0, 0, 2047, 2048, 5, 47, 0, 0, 2048, 460, 1, 0, 0, 0, 2049, 2050, 5, 37, 0, 0, 2050, 462, 1, 0, 0, 0, 2051, 2052, 5, 124, 0, 0, 2052, 2053, 5, 124, 0, 0, 2053, 464, 1, 0, 0, 0, 2054, 2060, 5, 39, 0, 0, 2055, 2059, 8, 0, 0, 0, 2056, 2057, 5, 39, 0, 0, 2057, 2059, 5, 39, 0, 0, 2058, 2055, 1, 0, 0, 0, 2058, 2056, 1, 0, 0, 0, 2059, 2062, 1, 0, 0, 0, 2060, 2058, 1, 0, 0, 0, 2060, 2061, 1, 0, 0, 0, 2061, 2063, 1, 0, 0, 0, 2062, 2060, 1, 0, 0, 0, 2063, 2064, 5, 39, 0, 0, 2064, 466, 1, 0, 0, 0, 2065, 2066, 5, 85, 0, 0, 2066, 2067, 5, 38, 0, 0, 2067, 2068, 5, 39, 0, 0, 2068, 2074, 1, 0, 0, 0, 2069, 2073, 8, 0, 0, 0, 2070, 2071, 5, 39, 0, 0, 2071, 2073, 5, 39, 0, 0, 2072, 2069, 1, 0, 0, 0, 2072, 2070, 1, 0, 0, 0, 2073, 2076, 1, 0, 0, 0, 2074, 2072, 1, 0, 0, 0, 2074, 2075, 1, 0, 0, 0, 2075, 2077, 1, 0, 0, 0, 2076, 2074, 1, 0, 0, 0, 2077, 2078, 5, 39, 0, 0, 2078, 468, 1, 0, 0, 0, 2079, 2080, 5, 88, 0, 0, 2080, 2081, 5, 39, 0, 0, 2081, 2085, 1, 0, 0, 0, 2082, 2084, 8, 0, 0, 0, 2083, 2082, 1, 0, 0, 0, 2084, 2087, 1, 0, 0, 0, 2085, 2083, 1, 0, 0, 0, 2085, 2086, 1, 0, 0, 0, 2086, 2088, 1, 0, 0, 0, 2087, 2085, 1, 0, 0, 0, 2088, 2089, 5, 39, 0, 0, 2089, 470, 1, 0, 0, 0, 2090, 2092, 3, 493, 246, 0, 2091, 2090, 1, 0, 0, 0, 2092, 2093, 1, 0, 0, 0, 2093, 2091, 1, 0, 0, 0, 2093, 2094, 1, 0, 0, 0, 2094, 472, 1, 0, 0, 0, 2095, 2097, 3, 493, 246, 0, 2096, 2095, 1, 0, 0, 0, 2097, 2098, 1, 0, 0, 0, 2098, 2096, 1, 0, 0, 0, 2098, 2099, 1, 0, 0, 0, 2099, 2100, 1, 0, 0, 0, 2100, 2104, 5, 46, 0, 0, 2101, 2103, 3, 493, 246, 0, 2102, 2101, 1, 0, 0, 0, 2103, 2106, 1, 0, 0, 0, 2104, 2102, 1, 0, 0, 0, 2104, 2105, 1, 0, 0, 0, 2105, 2114, 1, 0, 0, 0, 2106, 2104, 1, 0, 0, 0, 2107, 2109, 5, 46, 0, 0, 2108, 2110, 3, 493, 246, 0, 2109, 2108, 1, 0, 0, 0, 2110, 2111, 1, 0, 0, 0, 2111, 2109, 1, 0, 0, 0, 2111, 2112, 1, 0, 0, 0, 2112, 2114, 1, 0, 0, 0, 2113, 2096, 1, 0, 0, 0, 2113, 2107, 1, 0, 0, 0, 2114, 474, 1, 0, 0, 0, 2115, 2117, 3, 493, 246, 0, 2116, 2115, 1, 0, 0, 0, 2117, 2118, 1, 0, 0, 0, 2118, 2116, 1, 0, 0, 0, 2118, 2119, 1, 0, 0, 0, 2119, 2127, 1, 0, 0, 0, 2120, 2124, 5, 46, 0, 0, 2121, 2123, 3, 493, 246, 0, 2122, 2121, 1, 0, 0, 0, 2123, 2126, 1, 0, 0, 0, 2124, 2122, 1, 0, 0, 0, 2124, 2125, 1, 0, 0, 0, 2125, 2128, 1, 0, 0, 0, 2126, 2124, 1, 0, 0, 0, 2127, 2120, 1, 0, 0, 0, 2127, 2128, 1, 0, 0, 0, 2128, 2129, 1, 0, 0, 0, 2129, 2130, 3, 491, 245, 0, 2130, 2140, 1, 0, 0, 0, 2131, 2133, 5, 46, 0, 0, 2132, 2134, 3, 493, 246, 0, 2133, 2132, 1, 0, 0, 0, 2134, 2135, 1, 0, 0, 0, 2135, 2133, 1, 0, 0, 0, 2135, 2136, 1, 0, 0, 0, 2136, 2137, 1, 0, 0, 0, 2137, 2138, 3, 491, 245, 0, 2138, 2140, 1, 0, 0, 0, 2139, 2116, 1, 0, 0, 0, 2139, 2131, 1, 0, 0, 0, 2140, 476, 1, 0, 0, 0, 2141, 2144, 3, 495, 247, 0, 2142, 2144, 5, 95, 0, 0, 2143, 2141, 1, 0, 0, 0, 2143, 2142, 1, 0, 0, 0, 2144, 2150, 1, 0, 0, 0, 2145, 2149, 3, 495, 247, 0, 2146, 2149, 3, 493, 246, 0, 2147, 2149, 7, 1, 0, 0, 2148, 2145, 1, 0, 0, 0, 2148, 2146, 1, 0, 0, 0, 2148, 2147, 1, 0, 0, 0, 2149, 2152, 1, 0, 0, 0, 2150, 2148, 1, 0, 0, 0, 2150, 2151, 1, 0, 0, 0, 2151, 478, 1, 0, 0, 0, 2152, 2150, 1, 0, 0, 0, 2153, 2157, 3, 493, 246, 0, 2154, 2158, 3, 495, 247, 0, 2155, 2158, 3, 493, 246, 0, 2156, 2158, 7, 1, 0, 0, 2157, 2154, 1, 0, 0, 0, 2157, 2155, 1, 0, 0, 0, 2157, 2156, 1, 0, 0, 0, 2158, 2159, 1, 0, 0, 0, 2159, 2157, 1, 0, 0, 0, 2159, 2160, 1, 0, 0, 0, 2160, 480, 1, 0, 0, 0, 2161, 2167, 5, 34, 0, 0, 2162, 2166, 8, 2, 0, 0, 2163, 2164, 5, 34, 0, 0, 2164, 2166, 5, 34, 0, 0, 2165, 2162, 1, 0, 0, 0, 2165, 2163, 1, 0, 0, 0, 2166, 2169, 1, 0, 0, 0, 2167, 2165, 1, 0, 0, 0, 2167, 2168, 1, 0, 0, 0, 2168, 2170, 1, 0, 0, 0, 2169, 2167, 1, 0, 0, 0, 2170, 2171, 5, 34, 0, 0, 2171, 482, 1, 0, 0, 0, 2172, 2178, 5, 96, 0, 0, 2173, 2177, 8, 3, 0, 0, 2174, 2175, 5, 96, 0, 0, 2175, 2177, 5, 96, 0, 0, 2176, 2173, 1, 0, 0, 0, 2176, 2174, 1, 0, 0, 0, 2177, 2180, 1, 0, 0, 0, 2178, 2176, 1, 0, 0, 0, 2178, 2179, 1, 0, 0, 0, 2179, 2181, 1, 0, 0, 0, 2180, 2178, 1, 0, 0, 0, 2181, 2182, 5, 96, 0, 0, 2182, 484, 1, 0, 0, 0, 2183, 2184, 5, 84, 0, 0, 2184, 2185, 5, 73, 0, 0, 2185, 2186, 5, 77, 0, 0, 2186, 2187, 5, 69, 0, 0, 2187, 2188, 1, 0, 0, 0, 2188, 2189, 3, 501, 250, 0, 2189, 2190, 5, 87, 0, 0, 2190, 2191, 5, 73, 0, 0, 2191, 2192, 5, 84, 0, 0, 2192, 2193, 5, 72, 0, 0, 2193, 2194, 1, 0, 0, 0, 2194, 2195, 3, 501, 250, 0, 2195, 2196, 5, 84, 0, 0, 2196, 2197, 5, 73, 0, 0, 2197, 2198, 5, 77, 0, 0, 2198, 2199, 5, 69, 0, 0, 2199, 2200, 1, 0, 0, 0, 2200, 2201, 3, 501, 250, 0, 2201, 2202, 5, 90, 0, 0, 2202, 2203, 5, 79, 0, 0, 2203, 2204, 5, 78, 0, 0, 2204, 2205, 5, 69, 0, 0, 2205, 486, 1, 0, 0, 0, 2206, 2207, 5, 84, 0, 0, 2207, 2208, 5, 73, 0, 0, 2208, 2209, 5, 77, 0, 0, 2209, 2210, 5, 69, 0, 0, 2210, 2211, 5, 83, 0, 0, 2211, 2212, 5, 84, 0, 0, 2212, 2213, 5, 65, 0, 0, 2213, 2214, 5, 77, 0, 0, 2214, 2215, 5, 80, 0, 0, 2215, 2216, 1, 0, 0, 0, 2216, 2217, 3, 501, 250, 0, 2217, 2218, 5, 87, 0, 0, 2218, 2219, 5, 73, 0, 0, 2219, 2220, 5, 84, 0, 0, 2220, 2221, 5, 72, 0, 0, 2221, 2222, 1, 0, 0, 0, 2222, 2223, 3, 501, 250, 0, 2223, 2224, 5, 84, 0, 0, 2224, 2225, 5, 73, 0, 0, 2225, 2226, 5, 77, 0, 0, 2226, 2227, 5, 69, 0, 0, 2227, 2228, 1, 0, 0, 0, 2228, 2229, 3, 501, 250, 0, 2229, 2230, 5, 90, 0, 0, 2230, 2231, 5, 79, 0, 0, 2231, 2232, 5, 78, 0, 0, 2232, 2233, 5, 69, 0, 0, 2233, 488, 1, 0, 0, 0, 2234, 2235, 5, 68, 0, 0, 2235, 2236, 5, 79, 0, 0, 2236, 2237, 5, 85, 0, 0, 2237, 2238, 5, 66, 0, 0, 2238, 2239, 5, 76, 0, 0, 2239, 2240, 5, 69, 0, 0, 2240, 2241, 1, 0, 0, 0, 2241, 2242, 3, 501, 250, 0, 2242, 2243, 5, 80, 0, 0, 2243, 2244, 5, 82, 0, 0, 2244, 2245, 5, 69, 0, 0, 2245, 2246, 5, 67, 0, 0, 2246, 2247, 5, 73, 0, 0, 2247, 2248, 5, 83, 0, 0, 2248, 2249, 5, 73, 0, 0, 2249, 2250, 5, 79, 0, 0, 2250, 2251, 5, 78, 0, 0, 2251, 490, 1, 0, 0, 0, 2252, 2254, 5, 69, 0, 0, 2253, 2255, 7, 4, 0, 0, 2254, 2253, 1, 0, 0, 0, 2254, 2255, 1, 0, 0, 0, 2255, 2257, 1, 0, 0, 0, 2256, 2258, 3, 493, 246, 0, 2257, 2256, 1, 0, 0, 0, 2258, 2259, 1, 0, 0, 0, 2259, 2257, 1, 0, 0, 0, 2259, 2260, 1, 0, 0, 0, 2260, 492, 1, 0, 0, 0, 2261, 2262, 7, 5, 0, 0, 2262, 494, 1, 0, 0, 0, 2263, 2264, 7, 6, 0, 0, 2264, 496, 1, 0, 0, 0, 2265, 2266, 5, 45, 0, 0, 2266, 2267, 5, 45, 0, 0, 2267, 2271, 1, 0, 0, 0, 2268, 2270, 8, 7, 0, 0, 2269, 2268, 1, 0, 0, 0, 2270, 2273, 1, 0, 0, 0, 2271, 2269, 1, 0, 0, 0, 2271, 2272, 1, 0, 0, 0, 2272, 2275, 1, 0, 0, 0, 2273, 2271, 1, 0, 0, 0, 2274, 2276, 5, 13, 0, 0, 2275, 2274, 1, 0, 0, 0, 2275, 2276, 1, 0, 0, 0, 2276, 2278, 1, 0, 0, 0, 2277, 2279, 5, 10, 0, 0, 2278, 2277, 1, 0, 0, 0, 2278, 2279, 1, 0, 0, 0, 2279, 2280, 1, 0, 0, 0, 2280, 2281, 6, 248, 0, 0, 2281, 498, 1, 0, 0, 0, 2282, 2283, 5, 47, 0, 0, 2283, 2284, 5, 42, 0, 0, 2284, 2288, 1, 0, 0, 0, 2285, 2287, 9, 0, 0, 0, 2286, 2285, 1, 0, 0, 0, 2287, 2290, 1, 0, 0, 0, 2288, 2289, 1, 0, 0, 0, 2288, 2286, 1, 0, 0, 0, 2289, 2291, 1, 0, 0, 0, 2290, 2288, 1, 0, 0, 0, 2291, 2292, 5, 42, 0, 0, 2292, 2293, 5, 47, 0, 0, 2293, 2294, 1, 0, 0, 0, 2294, 2295, 6, 249, 0, 0, 2295, 500, 1, 0, 0, 0, 2296, 2298, 7, 8, 0, 0, 2297, 2296, 1, 0, 0, 0, 2298, 2299, 1, 0, 0, 0, 2299, 2297, 1, 0, 0, 0, 2299, 2300, 1, 0, 0, 0, 2300, 2301, 1, 0, 0, 0, 2301, 2302, 6, 250, 0, 0, 2302, 502, 1, 0, 0, 0, 2303, 2304, 9, 0, 0, 0, 2304, 504, 1, 0, 0, 0, 33, 0, 2029, 2058, 2060, 2072, 2074, 2085, 2093, 2098, 2104, 2111, 2113, 2118, 2124, 2127, 2135, 2139, 2143, 2148, 2150, 2157, 2159, 2165, 2167, 2176, 2178, 2254, 2259, 2271, 2275, 2278, 2288, 2299, 1, 0, 1, 0] \ No newline at end of file +[4, 0, 266, 2461, 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, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 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, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 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, 21, 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, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 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, 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, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 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, 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, 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, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 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, 38, 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, 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, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 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, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 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, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 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, 51, 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, 52, 1, 52, 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, 55, 1, 55, 1, 55, 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, 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, 57, 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, 59, 1, 59, 1, 59, 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, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 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, 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, 68, 1, 68, 1, 68, 1, 69, 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, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 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, 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, 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, 78, 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, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 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, 84, 1, 84, 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, 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, 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, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 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, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 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, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 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, 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, 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, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 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, 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, 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, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 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, 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, 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, 125, 1, 126, 1, 126, 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, 129, 1, 129, 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, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 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, 136, 1, 136, 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, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 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, 144, 1, 144, 1, 144, 1, 144, 1, 144, 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, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 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, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 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, 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, 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, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 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, 159, 1, 159, 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, 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, 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, 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, 167, 1, 167, 1, 167, 1, 167, 1, 168, 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, 169, 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, 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, 177, 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, 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, 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, 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, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 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, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 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, 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, 197, 1, 198, 1, 198, 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, 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, 200, 1, 201, 1, 201, 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, 202, 1, 202, 1, 203, 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, 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, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 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, 212, 1, 212, 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, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 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, 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, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 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, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 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, 230, 1, 231, 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, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 3, 238, 2186, 8, 238, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 244, 1, 244, 1, 245, 1, 245, 1, 246, 1, 246, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 5, 249, 2215, 8, 249, 10, 249, 12, 249, 2218, 9, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 5, 250, 2229, 8, 250, 10, 250, 12, 250, 2232, 9, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 251, 1, 251, 5, 251, 2240, 8, 251, 10, 251, 12, 251, 2243, 9, 251, 1, 251, 1, 251, 1, 252, 4, 252, 2248, 8, 252, 11, 252, 12, 252, 2249, 1, 253, 4, 253, 2253, 8, 253, 11, 253, 12, 253, 2254, 1, 253, 1, 253, 5, 253, 2259, 8, 253, 10, 253, 12, 253, 2262, 9, 253, 1, 253, 1, 253, 4, 253, 2266, 8, 253, 11, 253, 12, 253, 2267, 3, 253, 2270, 8, 253, 1, 254, 4, 254, 2273, 8, 254, 11, 254, 12, 254, 2274, 1, 254, 1, 254, 5, 254, 2279, 8, 254, 10, 254, 12, 254, 2282, 9, 254, 3, 254, 2284, 8, 254, 1, 254, 1, 254, 1, 254, 1, 254, 4, 254, 2290, 8, 254, 11, 254, 12, 254, 2291, 1, 254, 1, 254, 3, 254, 2296, 8, 254, 1, 255, 1, 255, 3, 255, 2300, 8, 255, 1, 255, 1, 255, 1, 255, 5, 255, 2305, 8, 255, 10, 255, 12, 255, 2308, 9, 255, 1, 256, 1, 256, 1, 256, 1, 256, 4, 256, 2314, 8, 256, 11, 256, 12, 256, 2315, 1, 257, 1, 257, 1, 257, 1, 257, 5, 257, 2322, 8, 257, 10, 257, 12, 257, 2325, 9, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 5, 258, 2333, 8, 258, 10, 258, 12, 258, 2336, 9, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 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, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 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, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 262, 1, 262, 3, 262, 2411, 8, 262, 1, 262, 4, 262, 2414, 8, 262, 11, 262, 12, 262, 2415, 1, 263, 1, 263, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 5, 265, 2426, 8, 265, 10, 265, 12, 265, 2429, 9, 265, 1, 265, 3, 265, 2432, 8, 265, 1, 265, 3, 265, 2435, 8, 265, 1, 265, 1, 265, 1, 266, 1, 266, 1, 266, 1, 266, 5, 266, 2443, 8, 266, 10, 266, 12, 266, 2446, 9, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 267, 4, 267, 2454, 8, 267, 11, 267, 12, 267, 2455, 1, 267, 1, 267, 1, 268, 1, 268, 1, 2444, 0, 269, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 246, 493, 247, 495, 248, 497, 249, 499, 250, 501, 251, 503, 252, 505, 253, 507, 254, 509, 255, 511, 256, 513, 257, 515, 258, 517, 259, 519, 260, 521, 261, 523, 262, 525, 0, 527, 0, 529, 0, 531, 263, 533, 264, 535, 265, 537, 266, 1, 0, 9, 1, 0, 39, 39, 3, 0, 58, 58, 64, 64, 95, 95, 1, 0, 34, 34, 1, 0, 96, 96, 2, 0, 43, 43, 45, 45, 1, 0, 48, 57, 1, 0, 65, 90, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 2491, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 1, 539, 1, 0, 0, 0, 3, 541, 1, 0, 0, 0, 5, 543, 1, 0, 0, 0, 7, 545, 1, 0, 0, 0, 9, 547, 1, 0, 0, 0, 11, 549, 1, 0, 0, 0, 13, 552, 1, 0, 0, 0, 15, 554, 1, 0, 0, 0, 17, 556, 1, 0, 0, 0, 19, 559, 1, 0, 0, 0, 21, 563, 1, 0, 0, 0, 23, 569, 1, 0, 0, 0, 25, 573, 1, 0, 0, 0, 27, 579, 1, 0, 0, 0, 29, 587, 1, 0, 0, 0, 31, 591, 1, 0, 0, 0, 33, 595, 1, 0, 0, 0, 35, 601, 1, 0, 0, 0, 37, 604, 1, 0, 0, 0, 39, 608, 1, 0, 0, 0, 41, 611, 1, 0, 0, 0, 43, 618, 1, 0, 0, 0, 45, 628, 1, 0, 0, 0, 47, 636, 1, 0, 0, 0, 49, 643, 1, 0, 0, 0, 51, 646, 1, 0, 0, 0, 53, 651, 1, 0, 0, 0, 55, 658, 1, 0, 0, 0, 57, 666, 1, 0, 0, 0, 59, 671, 1, 0, 0, 0, 61, 676, 1, 0, 0, 0, 63, 685, 1, 0, 0, 0, 65, 692, 1, 0, 0, 0, 67, 700, 1, 0, 0, 0, 69, 708, 1, 0, 0, 0, 71, 715, 1, 0, 0, 0, 73, 725, 1, 0, 0, 0, 75, 736, 1, 0, 0, 0, 77, 743, 1, 0, 0, 0, 79, 755, 1, 0, 0, 0, 81, 761, 1, 0, 0, 0, 83, 766, 1, 0, 0, 0, 85, 774, 1, 0, 0, 0, 87, 787, 1, 0, 0, 0, 89, 800, 1, 0, 0, 0, 91, 813, 1, 0, 0, 0, 93, 831, 1, 0, 0, 0, 95, 844, 1, 0, 0, 0, 97, 849, 1, 0, 0, 0, 99, 854, 1, 0, 0, 0, 101, 858, 1, 0, 0, 0, 103, 869, 1, 0, 0, 0, 105, 877, 1, 0, 0, 0, 107, 884, 1, 0, 0, 0, 109, 889, 1, 0, 0, 0, 111, 898, 1, 0, 0, 0, 113, 909, 1, 0, 0, 0, 115, 923, 1, 0, 0, 0, 117, 932, 1, 0, 0, 0, 119, 941, 1, 0, 0, 0, 121, 953, 1, 0, 0, 0, 123, 958, 1, 0, 0, 0, 125, 963, 1, 0, 0, 0, 127, 969, 1, 0, 0, 0, 129, 977, 1, 0, 0, 0, 131, 981, 1, 0, 0, 0, 133, 990, 1, 0, 0, 0, 135, 997, 1, 0, 0, 0, 137, 1004, 1, 0, 0, 0, 139, 1014, 1, 0, 0, 0, 141, 1022, 1, 0, 0, 0, 143, 1029, 1, 0, 0, 0, 145, 1037, 1, 0, 0, 0, 147, 1045, 1, 0, 0, 0, 149, 1054, 1, 0, 0, 0, 151, 1060, 1, 0, 0, 0, 153, 1066, 1, 0, 0, 0, 155, 1073, 1, 0, 0, 0, 157, 1079, 1, 0, 0, 0, 159, 1089, 1, 0, 0, 0, 161, 1093, 1, 0, 0, 0, 163, 1100, 1, 0, 0, 0, 165, 1105, 1, 0, 0, 0, 167, 1110, 1, 0, 0, 0, 169, 1119, 1, 0, 0, 0, 171, 1129, 1, 0, 0, 0, 173, 1135, 1, 0, 0, 0, 175, 1143, 1, 0, 0, 0, 177, 1150, 1, 0, 0, 0, 179, 1159, 1, 0, 0, 0, 181, 1165, 1, 0, 0, 0, 183, 1174, 1, 0, 0, 0, 185, 1181, 1, 0, 0, 0, 187, 1188, 1, 0, 0, 0, 189, 1193, 1, 0, 0, 0, 191, 1196, 1, 0, 0, 0, 193, 1203, 1, 0, 0, 0, 195, 1206, 1, 0, 0, 0, 197, 1216, 1, 0, 0, 0, 199, 1222, 1, 0, 0, 0, 201, 1228, 1, 0, 0, 0, 203, 1235, 1, 0, 0, 0, 205, 1245, 1, 0, 0, 0, 207, 1254, 1, 0, 0, 0, 209, 1259, 1, 0, 0, 0, 211, 1267, 1, 0, 0, 0, 213, 1270, 1, 0, 0, 0, 215, 1273, 1, 0, 0, 0, 217, 1283, 1, 0, 0, 0, 219, 1288, 1, 0, 0, 0, 221, 1293, 1, 0, 0, 0, 223, 1298, 1, 0, 0, 0, 225, 1302, 1, 0, 0, 0, 227, 1311, 1, 0, 0, 0, 229, 1316, 1, 0, 0, 0, 231, 1324, 1, 0, 0, 0, 233, 1329, 1, 0, 0, 0, 235, 1335, 1, 0, 0, 0, 237, 1340, 1, 0, 0, 0, 239, 1346, 1, 0, 0, 0, 241, 1356, 1, 0, 0, 0, 243, 1371, 1, 0, 0, 0, 245, 1379, 1, 0, 0, 0, 247, 1383, 1, 0, 0, 0, 249, 1391, 1, 0, 0, 0, 251, 1404, 1, 0, 0, 0, 253, 1410, 1, 0, 0, 0, 255, 1417, 1, 0, 0, 0, 257, 1423, 1, 0, 0, 0, 259, 1428, 1, 0, 0, 0, 261, 1436, 1, 0, 0, 0, 263, 1440, 1, 0, 0, 0, 265, 1444, 1, 0, 0, 0, 267, 1449, 1, 0, 0, 0, 269, 1454, 1, 0, 0, 0, 271, 1457, 1, 0, 0, 0, 273, 1462, 1, 0, 0, 0, 275, 1472, 1, 0, 0, 0, 277, 1476, 1, 0, 0, 0, 279, 1481, 1, 0, 0, 0, 281, 1488, 1, 0, 0, 0, 283, 1494, 1, 0, 0, 0, 285, 1497, 1, 0, 0, 0, 287, 1504, 1, 0, 0, 0, 289, 1507, 1, 0, 0, 0, 291, 1512, 1, 0, 0, 0, 293, 1519, 1, 0, 0, 0, 295, 1522, 1, 0, 0, 0, 297, 1528, 1, 0, 0, 0, 299, 1539, 1, 0, 0, 0, 301, 1545, 1, 0, 0, 0, 303, 1552, 1, 0, 0, 0, 305, 1557, 1, 0, 0, 0, 307, 1567, 1, 0, 0, 0, 309, 1578, 1, 0, 0, 0, 311, 1587, 1, 0, 0, 0, 313, 1597, 1, 0, 0, 0, 315, 1605, 1, 0, 0, 0, 317, 1613, 1, 0, 0, 0, 319, 1624, 1, 0, 0, 0, 321, 1635, 1, 0, 0, 0, 323, 1641, 1, 0, 0, 0, 325, 1647, 1, 0, 0, 0, 327, 1652, 1, 0, 0, 0, 329, 1662, 1, 0, 0, 0, 331, 1670, 1, 0, 0, 0, 333, 1675, 1, 0, 0, 0, 335, 1682, 1, 0, 0, 0, 337, 1693, 1, 0, 0, 0, 339, 1701, 1, 0, 0, 0, 341, 1707, 1, 0, 0, 0, 343, 1715, 1, 0, 0, 0, 345, 1724, 1, 0, 0, 0, 347, 1731, 1, 0, 0, 0, 349, 1739, 1, 0, 0, 0, 351, 1746, 1, 0, 0, 0, 353, 1752, 1, 0, 0, 0, 355, 1757, 1, 0, 0, 0, 357, 1763, 1, 0, 0, 0, 359, 1772, 1, 0, 0, 0, 361, 1779, 1, 0, 0, 0, 363, 1783, 1, 0, 0, 0, 365, 1788, 1, 0, 0, 0, 367, 1795, 1, 0, 0, 0, 369, 1803, 1, 0, 0, 0, 371, 1810, 1, 0, 0, 0, 373, 1819, 1, 0, 0, 0, 375, 1826, 1, 0, 0, 0, 377, 1839, 1, 0, 0, 0, 379, 1847, 1, 0, 0, 0, 381, 1851, 1, 0, 0, 0, 383, 1856, 1, 0, 0, 0, 385, 1861, 1, 0, 0, 0, 387, 1866, 1, 0, 0, 0, 389, 1870, 1, 0, 0, 0, 391, 1876, 1, 0, 0, 0, 393, 1882, 1, 0, 0, 0, 395, 1892, 1, 0, 0, 0, 397, 1899, 1, 0, 0, 0, 399, 1911, 1, 0, 0, 0, 401, 1926, 1, 0, 0, 0, 403, 1932, 1, 0, 0, 0, 405, 1939, 1, 0, 0, 0, 407, 1951, 1, 0, 0, 0, 409, 1955, 1, 0, 0, 0, 411, 1965, 1, 0, 0, 0, 413, 1970, 1, 0, 0, 0, 415, 1975, 1, 0, 0, 0, 417, 1980, 1, 0, 0, 0, 419, 1990, 1, 0, 0, 0, 421, 1993, 1, 0, 0, 0, 423, 2005, 1, 0, 0, 0, 425, 2010, 1, 0, 0, 0, 427, 2019, 1, 0, 0, 0, 429, 2028, 1, 0, 0, 0, 431, 2033, 1, 0, 0, 0, 433, 2041, 1, 0, 0, 0, 435, 2051, 1, 0, 0, 0, 437, 2063, 1, 0, 0, 0, 439, 2069, 1, 0, 0, 0, 441, 2076, 1, 0, 0, 0, 443, 2083, 1, 0, 0, 0, 445, 2090, 1, 0, 0, 0, 447, 2094, 1, 0, 0, 0, 449, 2099, 1, 0, 0, 0, 451, 2105, 1, 0, 0, 0, 453, 2114, 1, 0, 0, 0, 455, 2121, 1, 0, 0, 0, 457, 2129, 1, 0, 0, 0, 459, 2137, 1, 0, 0, 0, 461, 2142, 1, 0, 0, 0, 463, 2147, 1, 0, 0, 0, 465, 2153, 1, 0, 0, 0, 467, 2158, 1, 0, 0, 0, 469, 2163, 1, 0, 0, 0, 471, 2169, 1, 0, 0, 0, 473, 2174, 1, 0, 0, 0, 475, 2179, 1, 0, 0, 0, 477, 2185, 1, 0, 0, 0, 479, 2187, 1, 0, 0, 0, 481, 2189, 1, 0, 0, 0, 483, 2192, 1, 0, 0, 0, 485, 2194, 1, 0, 0, 0, 487, 2197, 1, 0, 0, 0, 489, 2199, 1, 0, 0, 0, 491, 2201, 1, 0, 0, 0, 493, 2203, 1, 0, 0, 0, 495, 2205, 1, 0, 0, 0, 497, 2207, 1, 0, 0, 0, 499, 2210, 1, 0, 0, 0, 501, 2221, 1, 0, 0, 0, 503, 2235, 1, 0, 0, 0, 505, 2247, 1, 0, 0, 0, 507, 2269, 1, 0, 0, 0, 509, 2295, 1, 0, 0, 0, 511, 2299, 1, 0, 0, 0, 513, 2309, 1, 0, 0, 0, 515, 2317, 1, 0, 0, 0, 517, 2328, 1, 0, 0, 0, 519, 2339, 1, 0, 0, 0, 521, 2362, 1, 0, 0, 0, 523, 2390, 1, 0, 0, 0, 525, 2408, 1, 0, 0, 0, 527, 2417, 1, 0, 0, 0, 529, 2419, 1, 0, 0, 0, 531, 2421, 1, 0, 0, 0, 533, 2438, 1, 0, 0, 0, 535, 2453, 1, 0, 0, 0, 537, 2459, 1, 0, 0, 0, 539, 540, 5, 46, 0, 0, 540, 2, 1, 0, 0, 0, 541, 542, 5, 40, 0, 0, 542, 4, 1, 0, 0, 0, 543, 544, 5, 41, 0, 0, 544, 6, 1, 0, 0, 0, 545, 546, 5, 44, 0, 0, 546, 8, 1, 0, 0, 0, 547, 548, 5, 63, 0, 0, 548, 10, 1, 0, 0, 0, 549, 550, 5, 45, 0, 0, 550, 551, 5, 62, 0, 0, 551, 12, 1, 0, 0, 0, 552, 553, 5, 91, 0, 0, 553, 14, 1, 0, 0, 0, 554, 555, 5, 93, 0, 0, 555, 16, 1, 0, 0, 0, 556, 557, 5, 61, 0, 0, 557, 558, 5, 62, 0, 0, 558, 18, 1, 0, 0, 0, 559, 560, 5, 65, 0, 0, 560, 561, 5, 68, 0, 0, 561, 562, 5, 68, 0, 0, 562, 20, 1, 0, 0, 0, 563, 564, 5, 65, 0, 0, 564, 565, 5, 68, 0, 0, 565, 566, 5, 77, 0, 0, 566, 567, 5, 73, 0, 0, 567, 568, 5, 78, 0, 0, 568, 22, 1, 0, 0, 0, 569, 570, 5, 65, 0, 0, 570, 571, 5, 76, 0, 0, 571, 572, 5, 76, 0, 0, 572, 24, 1, 0, 0, 0, 573, 574, 5, 65, 0, 0, 574, 575, 5, 76, 0, 0, 575, 576, 5, 84, 0, 0, 576, 577, 5, 69, 0, 0, 577, 578, 5, 82, 0, 0, 578, 26, 1, 0, 0, 0, 579, 580, 5, 65, 0, 0, 580, 581, 5, 78, 0, 0, 581, 582, 5, 65, 0, 0, 582, 583, 5, 76, 0, 0, 583, 584, 5, 89, 0, 0, 584, 585, 5, 90, 0, 0, 585, 586, 5, 69, 0, 0, 586, 28, 1, 0, 0, 0, 587, 588, 5, 65, 0, 0, 588, 589, 5, 78, 0, 0, 589, 590, 5, 68, 0, 0, 590, 30, 1, 0, 0, 0, 591, 592, 5, 65, 0, 0, 592, 593, 5, 78, 0, 0, 593, 594, 5, 89, 0, 0, 594, 32, 1, 0, 0, 0, 595, 596, 5, 65, 0, 0, 596, 597, 5, 82, 0, 0, 597, 598, 5, 82, 0, 0, 598, 599, 5, 65, 0, 0, 599, 600, 5, 89, 0, 0, 600, 34, 1, 0, 0, 0, 601, 602, 5, 65, 0, 0, 602, 603, 5, 83, 0, 0, 603, 36, 1, 0, 0, 0, 604, 605, 5, 65, 0, 0, 605, 606, 5, 83, 0, 0, 606, 607, 5, 67, 0, 0, 607, 38, 1, 0, 0, 0, 608, 609, 5, 65, 0, 0, 609, 610, 5, 84, 0, 0, 610, 40, 1, 0, 0, 0, 611, 612, 5, 66, 0, 0, 612, 613, 5, 69, 0, 0, 613, 614, 5, 70, 0, 0, 614, 615, 5, 79, 0, 0, 615, 616, 5, 82, 0, 0, 616, 617, 5, 69, 0, 0, 617, 42, 1, 0, 0, 0, 618, 619, 5, 66, 0, 0, 619, 620, 5, 69, 0, 0, 620, 621, 5, 82, 0, 0, 621, 622, 5, 78, 0, 0, 622, 623, 5, 79, 0, 0, 623, 624, 5, 85, 0, 0, 624, 625, 5, 76, 0, 0, 625, 626, 5, 76, 0, 0, 626, 627, 5, 73, 0, 0, 627, 44, 1, 0, 0, 0, 628, 629, 5, 66, 0, 0, 629, 630, 5, 69, 0, 0, 630, 631, 5, 84, 0, 0, 631, 632, 5, 87, 0, 0, 632, 633, 5, 69, 0, 0, 633, 634, 5, 69, 0, 0, 634, 635, 5, 78, 0, 0, 635, 46, 1, 0, 0, 0, 636, 637, 5, 66, 0, 0, 637, 638, 5, 82, 0, 0, 638, 639, 5, 65, 0, 0, 639, 640, 5, 78, 0, 0, 640, 641, 5, 67, 0, 0, 641, 642, 5, 72, 0, 0, 642, 48, 1, 0, 0, 0, 643, 644, 5, 66, 0, 0, 644, 645, 5, 89, 0, 0, 645, 50, 1, 0, 0, 0, 646, 647, 5, 67, 0, 0, 647, 648, 5, 65, 0, 0, 648, 649, 5, 76, 0, 0, 649, 650, 5, 76, 0, 0, 650, 52, 1, 0, 0, 0, 651, 652, 5, 67, 0, 0, 652, 653, 5, 65, 0, 0, 653, 654, 5, 76, 0, 0, 654, 655, 5, 76, 0, 0, 655, 656, 5, 69, 0, 0, 656, 657, 5, 68, 0, 0, 657, 54, 1, 0, 0, 0, 658, 659, 5, 67, 0, 0, 659, 660, 5, 65, 0, 0, 660, 661, 5, 83, 0, 0, 661, 662, 5, 67, 0, 0, 662, 663, 5, 65, 0, 0, 663, 664, 5, 68, 0, 0, 664, 665, 5, 69, 0, 0, 665, 56, 1, 0, 0, 0, 666, 667, 5, 67, 0, 0, 667, 668, 5, 65, 0, 0, 668, 669, 5, 83, 0, 0, 669, 670, 5, 69, 0, 0, 670, 58, 1, 0, 0, 0, 671, 672, 5, 67, 0, 0, 672, 673, 5, 65, 0, 0, 673, 674, 5, 83, 0, 0, 674, 675, 5, 84, 0, 0, 675, 60, 1, 0, 0, 0, 676, 677, 5, 67, 0, 0, 677, 678, 5, 65, 0, 0, 678, 679, 5, 84, 0, 0, 679, 680, 5, 65, 0, 0, 680, 681, 5, 76, 0, 0, 681, 682, 5, 79, 0, 0, 682, 683, 5, 71, 0, 0, 683, 684, 5, 83, 0, 0, 684, 62, 1, 0, 0, 0, 685, 686, 5, 67, 0, 0, 686, 687, 5, 79, 0, 0, 687, 688, 5, 76, 0, 0, 688, 689, 5, 85, 0, 0, 689, 690, 5, 77, 0, 0, 690, 691, 5, 78, 0, 0, 691, 64, 1, 0, 0, 0, 692, 693, 5, 67, 0, 0, 693, 694, 5, 79, 0, 0, 694, 695, 5, 76, 0, 0, 695, 696, 5, 85, 0, 0, 696, 697, 5, 77, 0, 0, 697, 698, 5, 78, 0, 0, 698, 699, 5, 83, 0, 0, 699, 66, 1, 0, 0, 0, 700, 701, 5, 67, 0, 0, 701, 702, 5, 79, 0, 0, 702, 703, 5, 77, 0, 0, 703, 704, 5, 77, 0, 0, 704, 705, 5, 69, 0, 0, 705, 706, 5, 78, 0, 0, 706, 707, 5, 84, 0, 0, 707, 68, 1, 0, 0, 0, 708, 709, 5, 67, 0, 0, 709, 710, 5, 79, 0, 0, 710, 711, 5, 77, 0, 0, 711, 712, 5, 77, 0, 0, 712, 713, 5, 73, 0, 0, 713, 714, 5, 84, 0, 0, 714, 70, 1, 0, 0, 0, 715, 716, 5, 67, 0, 0, 716, 717, 5, 79, 0, 0, 717, 718, 5, 77, 0, 0, 718, 719, 5, 77, 0, 0, 719, 720, 5, 73, 0, 0, 720, 721, 5, 84, 0, 0, 721, 722, 5, 84, 0, 0, 722, 723, 5, 69, 0, 0, 723, 724, 5, 68, 0, 0, 724, 72, 1, 0, 0, 0, 725, 726, 5, 67, 0, 0, 726, 727, 5, 79, 0, 0, 727, 728, 5, 78, 0, 0, 728, 729, 5, 83, 0, 0, 729, 730, 5, 84, 0, 0, 730, 731, 5, 82, 0, 0, 731, 732, 5, 65, 0, 0, 732, 733, 5, 73, 0, 0, 733, 734, 5, 78, 0, 0, 734, 735, 5, 84, 0, 0, 735, 74, 1, 0, 0, 0, 736, 737, 5, 67, 0, 0, 737, 738, 5, 82, 0, 0, 738, 739, 5, 69, 0, 0, 739, 740, 5, 65, 0, 0, 740, 741, 5, 84, 0, 0, 741, 742, 5, 69, 0, 0, 742, 76, 1, 0, 0, 0, 743, 744, 5, 67, 0, 0, 744, 745, 5, 79, 0, 0, 745, 746, 5, 80, 0, 0, 746, 747, 5, 65, 0, 0, 747, 748, 5, 82, 0, 0, 748, 749, 5, 84, 0, 0, 749, 750, 5, 73, 0, 0, 750, 751, 5, 84, 0, 0, 751, 752, 5, 73, 0, 0, 752, 753, 5, 79, 0, 0, 753, 754, 5, 78, 0, 0, 754, 78, 1, 0, 0, 0, 755, 756, 5, 67, 0, 0, 756, 757, 5, 82, 0, 0, 757, 758, 5, 79, 0, 0, 758, 759, 5, 83, 0, 0, 759, 760, 5, 83, 0, 0, 760, 80, 1, 0, 0, 0, 761, 762, 5, 67, 0, 0, 762, 763, 5, 85, 0, 0, 763, 764, 5, 66, 0, 0, 764, 765, 5, 69, 0, 0, 765, 82, 1, 0, 0, 0, 766, 767, 5, 67, 0, 0, 767, 768, 5, 85, 0, 0, 768, 769, 5, 82, 0, 0, 769, 770, 5, 82, 0, 0, 770, 771, 5, 69, 0, 0, 771, 772, 5, 78, 0, 0, 772, 773, 5, 84, 0, 0, 773, 84, 1, 0, 0, 0, 774, 775, 5, 67, 0, 0, 775, 776, 5, 85, 0, 0, 776, 777, 5, 82, 0, 0, 777, 778, 5, 82, 0, 0, 778, 779, 5, 69, 0, 0, 779, 780, 5, 78, 0, 0, 780, 781, 5, 84, 0, 0, 781, 782, 5, 95, 0, 0, 782, 783, 5, 68, 0, 0, 783, 784, 5, 65, 0, 0, 784, 785, 5, 84, 0, 0, 785, 786, 5, 69, 0, 0, 786, 86, 1, 0, 0, 0, 787, 788, 5, 67, 0, 0, 788, 789, 5, 85, 0, 0, 789, 790, 5, 82, 0, 0, 790, 791, 5, 82, 0, 0, 791, 792, 5, 69, 0, 0, 792, 793, 5, 78, 0, 0, 793, 794, 5, 84, 0, 0, 794, 795, 5, 95, 0, 0, 795, 796, 5, 82, 0, 0, 796, 797, 5, 79, 0, 0, 797, 798, 5, 76, 0, 0, 798, 799, 5, 69, 0, 0, 799, 88, 1, 0, 0, 0, 800, 801, 5, 67, 0, 0, 801, 802, 5, 85, 0, 0, 802, 803, 5, 82, 0, 0, 803, 804, 5, 82, 0, 0, 804, 805, 5, 69, 0, 0, 805, 806, 5, 78, 0, 0, 806, 807, 5, 84, 0, 0, 807, 808, 5, 95, 0, 0, 808, 809, 5, 84, 0, 0, 809, 810, 5, 73, 0, 0, 810, 811, 5, 77, 0, 0, 811, 812, 5, 69, 0, 0, 812, 90, 1, 0, 0, 0, 813, 814, 5, 67, 0, 0, 814, 815, 5, 85, 0, 0, 815, 816, 5, 82, 0, 0, 816, 817, 5, 82, 0, 0, 817, 818, 5, 69, 0, 0, 818, 819, 5, 78, 0, 0, 819, 820, 5, 84, 0, 0, 820, 821, 5, 95, 0, 0, 821, 822, 5, 84, 0, 0, 822, 823, 5, 73, 0, 0, 823, 824, 5, 77, 0, 0, 824, 825, 5, 69, 0, 0, 825, 826, 5, 83, 0, 0, 826, 827, 5, 84, 0, 0, 827, 828, 5, 65, 0, 0, 828, 829, 5, 77, 0, 0, 829, 830, 5, 80, 0, 0, 830, 92, 1, 0, 0, 0, 831, 832, 5, 67, 0, 0, 832, 833, 5, 85, 0, 0, 833, 834, 5, 82, 0, 0, 834, 835, 5, 82, 0, 0, 835, 836, 5, 69, 0, 0, 836, 837, 5, 78, 0, 0, 837, 838, 5, 84, 0, 0, 838, 839, 5, 95, 0, 0, 839, 840, 5, 85, 0, 0, 840, 841, 5, 83, 0, 0, 841, 842, 5, 69, 0, 0, 842, 843, 5, 82, 0, 0, 843, 94, 1, 0, 0, 0, 844, 845, 5, 68, 0, 0, 845, 846, 5, 65, 0, 0, 846, 847, 5, 84, 0, 0, 847, 848, 5, 65, 0, 0, 848, 96, 1, 0, 0, 0, 849, 850, 5, 68, 0, 0, 850, 851, 5, 65, 0, 0, 851, 852, 5, 84, 0, 0, 852, 853, 5, 69, 0, 0, 853, 98, 1, 0, 0, 0, 854, 855, 5, 68, 0, 0, 855, 856, 5, 65, 0, 0, 856, 857, 5, 89, 0, 0, 857, 100, 1, 0, 0, 0, 858, 859, 5, 68, 0, 0, 859, 860, 5, 69, 0, 0, 860, 861, 5, 65, 0, 0, 861, 862, 5, 76, 0, 0, 862, 863, 5, 76, 0, 0, 863, 864, 5, 79, 0, 0, 864, 865, 5, 67, 0, 0, 865, 866, 5, 65, 0, 0, 866, 867, 5, 84, 0, 0, 867, 868, 5, 69, 0, 0, 868, 102, 1, 0, 0, 0, 869, 870, 5, 68, 0, 0, 870, 871, 5, 69, 0, 0, 871, 872, 5, 70, 0, 0, 872, 873, 5, 73, 0, 0, 873, 874, 5, 78, 0, 0, 874, 875, 5, 69, 0, 0, 875, 876, 5, 82, 0, 0, 876, 104, 1, 0, 0, 0, 877, 878, 5, 68, 0, 0, 878, 879, 5, 69, 0, 0, 879, 880, 5, 76, 0, 0, 880, 881, 5, 69, 0, 0, 881, 882, 5, 84, 0, 0, 882, 883, 5, 69, 0, 0, 883, 106, 1, 0, 0, 0, 884, 885, 5, 68, 0, 0, 885, 886, 5, 69, 0, 0, 886, 887, 5, 83, 0, 0, 887, 888, 5, 67, 0, 0, 888, 108, 1, 0, 0, 0, 889, 890, 5, 68, 0, 0, 890, 891, 5, 69, 0, 0, 891, 892, 5, 83, 0, 0, 892, 893, 5, 67, 0, 0, 893, 894, 5, 82, 0, 0, 894, 895, 5, 73, 0, 0, 895, 896, 5, 66, 0, 0, 896, 897, 5, 69, 0, 0, 897, 110, 1, 0, 0, 0, 898, 899, 5, 68, 0, 0, 899, 900, 5, 69, 0, 0, 900, 901, 5, 83, 0, 0, 901, 902, 5, 67, 0, 0, 902, 903, 5, 82, 0, 0, 903, 904, 5, 73, 0, 0, 904, 905, 5, 80, 0, 0, 905, 906, 5, 84, 0, 0, 906, 907, 5, 79, 0, 0, 907, 908, 5, 82, 0, 0, 908, 112, 1, 0, 0, 0, 909, 910, 5, 68, 0, 0, 910, 911, 5, 69, 0, 0, 911, 912, 5, 84, 0, 0, 912, 913, 5, 69, 0, 0, 913, 914, 5, 82, 0, 0, 914, 915, 5, 77, 0, 0, 915, 916, 5, 73, 0, 0, 916, 917, 5, 78, 0, 0, 917, 918, 5, 73, 0, 0, 918, 919, 5, 83, 0, 0, 919, 920, 5, 84, 0, 0, 920, 921, 5, 73, 0, 0, 921, 922, 5, 67, 0, 0, 922, 114, 1, 0, 0, 0, 923, 924, 5, 68, 0, 0, 924, 925, 5, 73, 0, 0, 925, 926, 5, 83, 0, 0, 926, 927, 5, 65, 0, 0, 927, 928, 5, 66, 0, 0, 928, 929, 5, 76, 0, 0, 929, 930, 5, 69, 0, 0, 930, 931, 5, 68, 0, 0, 931, 116, 1, 0, 0, 0, 932, 933, 5, 68, 0, 0, 933, 934, 5, 73, 0, 0, 934, 935, 5, 83, 0, 0, 935, 936, 5, 84, 0, 0, 936, 937, 5, 73, 0, 0, 937, 938, 5, 78, 0, 0, 938, 939, 5, 67, 0, 0, 939, 940, 5, 84, 0, 0, 940, 118, 1, 0, 0, 0, 941, 942, 5, 68, 0, 0, 942, 943, 5, 73, 0, 0, 943, 944, 5, 83, 0, 0, 944, 945, 5, 84, 0, 0, 945, 946, 5, 82, 0, 0, 946, 947, 5, 73, 0, 0, 947, 948, 5, 66, 0, 0, 948, 949, 5, 85, 0, 0, 949, 950, 5, 84, 0, 0, 950, 951, 5, 69, 0, 0, 951, 952, 5, 68, 0, 0, 952, 120, 1, 0, 0, 0, 953, 954, 5, 68, 0, 0, 954, 955, 5, 82, 0, 0, 955, 956, 5, 79, 0, 0, 956, 957, 5, 80, 0, 0, 957, 122, 1, 0, 0, 0, 958, 959, 5, 69, 0, 0, 959, 960, 5, 76, 0, 0, 960, 961, 5, 83, 0, 0, 961, 962, 5, 69, 0, 0, 962, 124, 1, 0, 0, 0, 963, 964, 5, 69, 0, 0, 964, 965, 5, 77, 0, 0, 965, 966, 5, 80, 0, 0, 966, 967, 5, 84, 0, 0, 967, 968, 5, 89, 0, 0, 968, 126, 1, 0, 0, 0, 969, 970, 5, 69, 0, 0, 970, 971, 5, 78, 0, 0, 971, 972, 5, 65, 0, 0, 972, 973, 5, 66, 0, 0, 973, 974, 5, 76, 0, 0, 974, 975, 5, 69, 0, 0, 975, 976, 5, 68, 0, 0, 976, 128, 1, 0, 0, 0, 977, 978, 5, 69, 0, 0, 978, 979, 5, 78, 0, 0, 979, 980, 5, 68, 0, 0, 980, 130, 1, 0, 0, 0, 981, 982, 5, 69, 0, 0, 982, 983, 5, 78, 0, 0, 983, 984, 5, 70, 0, 0, 984, 985, 5, 79, 0, 0, 985, 986, 5, 82, 0, 0, 986, 987, 5, 67, 0, 0, 987, 988, 5, 69, 0, 0, 988, 989, 5, 68, 0, 0, 989, 132, 1, 0, 0, 0, 990, 991, 5, 69, 0, 0, 991, 992, 5, 83, 0, 0, 992, 993, 5, 67, 0, 0, 993, 994, 5, 65, 0, 0, 994, 995, 5, 80, 0, 0, 995, 996, 5, 69, 0, 0, 996, 134, 1, 0, 0, 0, 997, 998, 5, 69, 0, 0, 998, 999, 5, 88, 0, 0, 999, 1000, 5, 67, 0, 0, 1000, 1001, 5, 69, 0, 0, 1001, 1002, 5, 80, 0, 0, 1002, 1003, 5, 84, 0, 0, 1003, 136, 1, 0, 0, 0, 1004, 1005, 5, 69, 0, 0, 1005, 1006, 5, 88, 0, 0, 1006, 1007, 5, 67, 0, 0, 1007, 1008, 5, 76, 0, 0, 1008, 1009, 5, 85, 0, 0, 1009, 1010, 5, 68, 0, 0, 1010, 1011, 5, 73, 0, 0, 1011, 1012, 5, 78, 0, 0, 1012, 1013, 5, 71, 0, 0, 1013, 138, 1, 0, 0, 0, 1014, 1015, 5, 69, 0, 0, 1015, 1016, 5, 88, 0, 0, 1016, 1017, 5, 69, 0, 0, 1017, 1018, 5, 67, 0, 0, 1018, 1019, 5, 85, 0, 0, 1019, 1020, 5, 84, 0, 0, 1020, 1021, 5, 69, 0, 0, 1021, 140, 1, 0, 0, 0, 1022, 1023, 5, 69, 0, 0, 1023, 1024, 5, 88, 0, 0, 1024, 1025, 5, 73, 0, 0, 1025, 1026, 5, 83, 0, 0, 1026, 1027, 5, 84, 0, 0, 1027, 1028, 5, 83, 0, 0, 1028, 142, 1, 0, 0, 0, 1029, 1030, 5, 69, 0, 0, 1030, 1031, 5, 88, 0, 0, 1031, 1032, 5, 80, 0, 0, 1032, 1033, 5, 76, 0, 0, 1033, 1034, 5, 65, 0, 0, 1034, 1035, 5, 73, 0, 0, 1035, 1036, 5, 78, 0, 0, 1036, 144, 1, 0, 0, 0, 1037, 1038, 5, 69, 0, 0, 1038, 1039, 5, 88, 0, 0, 1039, 1040, 5, 84, 0, 0, 1040, 1041, 5, 82, 0, 0, 1041, 1042, 5, 65, 0, 0, 1042, 1043, 5, 67, 0, 0, 1043, 1044, 5, 84, 0, 0, 1044, 146, 1, 0, 0, 0, 1045, 1046, 5, 69, 0, 0, 1046, 1047, 5, 88, 0, 0, 1047, 1048, 5, 84, 0, 0, 1048, 1049, 5, 69, 0, 0, 1049, 1050, 5, 82, 0, 0, 1050, 1051, 5, 78, 0, 0, 1051, 1052, 5, 65, 0, 0, 1052, 1053, 5, 76, 0, 0, 1053, 148, 1, 0, 0, 0, 1054, 1055, 5, 70, 0, 0, 1055, 1056, 5, 65, 0, 0, 1056, 1057, 5, 76, 0, 0, 1057, 1058, 5, 83, 0, 0, 1058, 1059, 5, 69, 0, 0, 1059, 150, 1, 0, 0, 0, 1060, 1061, 5, 70, 0, 0, 1061, 1062, 5, 69, 0, 0, 1062, 1063, 5, 84, 0, 0, 1063, 1064, 5, 67, 0, 0, 1064, 1065, 5, 72, 0, 0, 1065, 152, 1, 0, 0, 0, 1066, 1067, 5, 70, 0, 0, 1067, 1068, 5, 73, 0, 0, 1068, 1069, 5, 76, 0, 0, 1069, 1070, 5, 84, 0, 0, 1070, 1071, 5, 69, 0, 0, 1071, 1072, 5, 82, 0, 0, 1072, 154, 1, 0, 0, 0, 1073, 1074, 5, 70, 0, 0, 1074, 1075, 5, 73, 0, 0, 1075, 1076, 5, 82, 0, 0, 1076, 1077, 5, 83, 0, 0, 1077, 1078, 5, 84, 0, 0, 1078, 156, 1, 0, 0, 0, 1079, 1080, 5, 70, 0, 0, 1080, 1081, 5, 79, 0, 0, 1081, 1082, 5, 76, 0, 0, 1082, 1083, 5, 76, 0, 0, 1083, 1084, 5, 79, 0, 0, 1084, 1085, 5, 87, 0, 0, 1085, 1086, 5, 73, 0, 0, 1086, 1087, 5, 78, 0, 0, 1087, 1088, 5, 71, 0, 0, 1088, 158, 1, 0, 0, 0, 1089, 1090, 5, 70, 0, 0, 1090, 1091, 5, 79, 0, 0, 1091, 1092, 5, 82, 0, 0, 1092, 160, 1, 0, 0, 0, 1093, 1094, 5, 70, 0, 0, 1094, 1095, 5, 79, 0, 0, 1095, 1096, 5, 82, 0, 0, 1096, 1097, 5, 77, 0, 0, 1097, 1098, 5, 65, 0, 0, 1098, 1099, 5, 84, 0, 0, 1099, 162, 1, 0, 0, 0, 1100, 1101, 5, 70, 0, 0, 1101, 1102, 5, 82, 0, 0, 1102, 1103, 5, 79, 0, 0, 1103, 1104, 5, 77, 0, 0, 1104, 164, 1, 0, 0, 0, 1105, 1106, 5, 70, 0, 0, 1106, 1107, 5, 85, 0, 0, 1107, 1108, 5, 76, 0, 0, 1108, 1109, 5, 76, 0, 0, 1109, 166, 1, 0, 0, 0, 1110, 1111, 5, 70, 0, 0, 1111, 1112, 5, 85, 0, 0, 1112, 1113, 5, 78, 0, 0, 1113, 1114, 5, 67, 0, 0, 1114, 1115, 5, 84, 0, 0, 1115, 1116, 5, 73, 0, 0, 1116, 1117, 5, 79, 0, 0, 1117, 1118, 5, 78, 0, 0, 1118, 168, 1, 0, 0, 0, 1119, 1120, 5, 70, 0, 0, 1120, 1121, 5, 85, 0, 0, 1121, 1122, 5, 78, 0, 0, 1122, 1123, 5, 67, 0, 0, 1123, 1124, 5, 84, 0, 0, 1124, 1125, 5, 73, 0, 0, 1125, 1126, 5, 79, 0, 0, 1126, 1127, 5, 78, 0, 0, 1127, 1128, 5, 83, 0, 0, 1128, 170, 1, 0, 0, 0, 1129, 1130, 5, 71, 0, 0, 1130, 1131, 5, 82, 0, 0, 1131, 1132, 5, 65, 0, 0, 1132, 1133, 5, 78, 0, 0, 1133, 1134, 5, 84, 0, 0, 1134, 172, 1, 0, 0, 0, 1135, 1136, 5, 71, 0, 0, 1136, 1137, 5, 82, 0, 0, 1137, 1138, 5, 65, 0, 0, 1138, 1139, 5, 78, 0, 0, 1139, 1140, 5, 84, 0, 0, 1140, 1141, 5, 69, 0, 0, 1141, 1142, 5, 68, 0, 0, 1142, 174, 1, 0, 0, 0, 1143, 1144, 5, 71, 0, 0, 1144, 1145, 5, 82, 0, 0, 1145, 1146, 5, 65, 0, 0, 1146, 1147, 5, 78, 0, 0, 1147, 1148, 5, 84, 0, 0, 1148, 1149, 5, 83, 0, 0, 1149, 176, 1, 0, 0, 0, 1150, 1151, 5, 71, 0, 0, 1151, 1152, 5, 82, 0, 0, 1152, 1153, 5, 65, 0, 0, 1153, 1154, 5, 80, 0, 0, 1154, 1155, 5, 72, 0, 0, 1155, 1156, 5, 86, 0, 0, 1156, 1157, 5, 73, 0, 0, 1157, 1158, 5, 90, 0, 0, 1158, 178, 1, 0, 0, 0, 1159, 1160, 5, 71, 0, 0, 1160, 1161, 5, 82, 0, 0, 1161, 1162, 5, 79, 0, 0, 1162, 1163, 5, 85, 0, 0, 1163, 1164, 5, 80, 0, 0, 1164, 180, 1, 0, 0, 0, 1165, 1166, 5, 71, 0, 0, 1166, 1167, 5, 82, 0, 0, 1167, 1168, 5, 79, 0, 0, 1168, 1169, 5, 85, 0, 0, 1169, 1170, 5, 80, 0, 0, 1170, 1171, 5, 73, 0, 0, 1171, 1172, 5, 78, 0, 0, 1172, 1173, 5, 71, 0, 0, 1173, 182, 1, 0, 0, 0, 1174, 1175, 5, 71, 0, 0, 1175, 1176, 5, 82, 0, 0, 1176, 1177, 5, 79, 0, 0, 1177, 1178, 5, 85, 0, 0, 1178, 1179, 5, 80, 0, 0, 1179, 1180, 5, 83, 0, 0, 1180, 184, 1, 0, 0, 0, 1181, 1182, 5, 72, 0, 0, 1182, 1183, 5, 65, 0, 0, 1183, 1184, 5, 86, 0, 0, 1184, 1185, 5, 73, 0, 0, 1185, 1186, 5, 78, 0, 0, 1186, 1187, 5, 71, 0, 0, 1187, 186, 1, 0, 0, 0, 1188, 1189, 5, 72, 0, 0, 1189, 1190, 5, 79, 0, 0, 1190, 1191, 5, 85, 0, 0, 1191, 1192, 5, 82, 0, 0, 1192, 188, 1, 0, 0, 0, 1193, 1194, 5, 73, 0, 0, 1194, 1195, 5, 70, 0, 0, 1195, 190, 1, 0, 0, 0, 1196, 1197, 5, 73, 0, 0, 1197, 1198, 5, 71, 0, 0, 1198, 1199, 5, 78, 0, 0, 1199, 1200, 5, 79, 0, 0, 1200, 1201, 5, 82, 0, 0, 1201, 1202, 5, 69, 0, 0, 1202, 192, 1, 0, 0, 0, 1203, 1204, 5, 73, 0, 0, 1204, 1205, 5, 78, 0, 0, 1205, 194, 1, 0, 0, 0, 1206, 1207, 5, 73, 0, 0, 1207, 1208, 5, 78, 0, 0, 1208, 1209, 5, 67, 0, 0, 1209, 1210, 5, 76, 0, 0, 1210, 1211, 5, 85, 0, 0, 1211, 1212, 5, 68, 0, 0, 1212, 1213, 5, 73, 0, 0, 1213, 1214, 5, 78, 0, 0, 1214, 1215, 5, 71, 0, 0, 1215, 196, 1, 0, 0, 0, 1216, 1217, 5, 73, 0, 0, 1217, 1218, 5, 78, 0, 0, 1218, 1219, 5, 78, 0, 0, 1219, 1220, 5, 69, 0, 0, 1220, 1221, 5, 82, 0, 0, 1221, 198, 1, 0, 0, 0, 1222, 1223, 5, 73, 0, 0, 1223, 1224, 5, 78, 0, 0, 1224, 1225, 5, 80, 0, 0, 1225, 1226, 5, 85, 0, 0, 1226, 1227, 5, 84, 0, 0, 1227, 200, 1, 0, 0, 0, 1228, 1229, 5, 73, 0, 0, 1229, 1230, 5, 78, 0, 0, 1230, 1231, 5, 83, 0, 0, 1231, 1232, 5, 69, 0, 0, 1232, 1233, 5, 82, 0, 0, 1233, 1234, 5, 84, 0, 0, 1234, 202, 1, 0, 0, 0, 1235, 1236, 5, 73, 0, 0, 1236, 1237, 5, 78, 0, 0, 1237, 1238, 5, 84, 0, 0, 1238, 1239, 5, 69, 0, 0, 1239, 1240, 5, 82, 0, 0, 1240, 1241, 5, 83, 0, 0, 1241, 1242, 5, 69, 0, 0, 1242, 1243, 5, 67, 0, 0, 1243, 1244, 5, 84, 0, 0, 1244, 204, 1, 0, 0, 0, 1245, 1246, 5, 73, 0, 0, 1246, 1247, 5, 78, 0, 0, 1247, 1248, 5, 84, 0, 0, 1248, 1249, 5, 69, 0, 0, 1249, 1250, 5, 82, 0, 0, 1250, 1251, 5, 86, 0, 0, 1251, 1252, 5, 65, 0, 0, 1252, 1253, 5, 76, 0, 0, 1253, 206, 1, 0, 0, 0, 1254, 1255, 5, 73, 0, 0, 1255, 1256, 5, 78, 0, 0, 1256, 1257, 5, 84, 0, 0, 1257, 1258, 5, 79, 0, 0, 1258, 208, 1, 0, 0, 0, 1259, 1260, 5, 73, 0, 0, 1260, 1261, 5, 78, 0, 0, 1261, 1262, 5, 86, 0, 0, 1262, 1263, 5, 79, 0, 0, 1263, 1264, 5, 75, 0, 0, 1264, 1265, 5, 69, 0, 0, 1265, 1266, 5, 82, 0, 0, 1266, 210, 1, 0, 0, 0, 1267, 1268, 5, 73, 0, 0, 1268, 1269, 5, 79, 0, 0, 1269, 212, 1, 0, 0, 0, 1270, 1271, 5, 73, 0, 0, 1271, 1272, 5, 83, 0, 0, 1272, 214, 1, 0, 0, 0, 1273, 1274, 5, 73, 0, 0, 1274, 1275, 5, 83, 0, 0, 1275, 1276, 5, 79, 0, 0, 1276, 1277, 5, 76, 0, 0, 1277, 1278, 5, 65, 0, 0, 1278, 1279, 5, 84, 0, 0, 1279, 1280, 5, 73, 0, 0, 1280, 1281, 5, 79, 0, 0, 1281, 1282, 5, 78, 0, 0, 1282, 216, 1, 0, 0, 0, 1283, 1284, 5, 74, 0, 0, 1284, 1285, 5, 83, 0, 0, 1285, 1286, 5, 79, 0, 0, 1286, 1287, 5, 78, 0, 0, 1287, 218, 1, 0, 0, 0, 1288, 1289, 5, 74, 0, 0, 1289, 1290, 5, 79, 0, 0, 1290, 1291, 5, 73, 0, 0, 1291, 1292, 5, 78, 0, 0, 1292, 220, 1, 0, 0, 0, 1293, 1294, 5, 75, 0, 0, 1294, 1295, 5, 69, 0, 0, 1295, 1296, 5, 69, 0, 0, 1296, 1297, 5, 80, 0, 0, 1297, 222, 1, 0, 0, 0, 1298, 1299, 5, 75, 0, 0, 1299, 1300, 5, 69, 0, 0, 1300, 1301, 5, 89, 0, 0, 1301, 224, 1, 0, 0, 0, 1302, 1303, 5, 76, 0, 0, 1303, 1304, 5, 65, 0, 0, 1304, 1305, 5, 78, 0, 0, 1305, 1306, 5, 71, 0, 0, 1306, 1307, 5, 85, 0, 0, 1307, 1308, 5, 65, 0, 0, 1308, 1309, 5, 71, 0, 0, 1309, 1310, 5, 69, 0, 0, 1310, 226, 1, 0, 0, 0, 1311, 1312, 5, 76, 0, 0, 1312, 1313, 5, 65, 0, 0, 1313, 1314, 5, 83, 0, 0, 1314, 1315, 5, 84, 0, 0, 1315, 228, 1, 0, 0, 0, 1316, 1317, 5, 76, 0, 0, 1317, 1318, 5, 65, 0, 0, 1318, 1319, 5, 84, 0, 0, 1319, 1320, 5, 69, 0, 0, 1320, 1321, 5, 82, 0, 0, 1321, 1322, 5, 65, 0, 0, 1322, 1323, 5, 76, 0, 0, 1323, 230, 1, 0, 0, 0, 1324, 1325, 5, 76, 0, 0, 1325, 1326, 5, 69, 0, 0, 1326, 1327, 5, 70, 0, 0, 1327, 1328, 5, 84, 0, 0, 1328, 232, 1, 0, 0, 0, 1329, 1330, 5, 76, 0, 0, 1330, 1331, 5, 69, 0, 0, 1331, 1332, 5, 86, 0, 0, 1332, 1333, 5, 69, 0, 0, 1333, 1334, 5, 76, 0, 0, 1334, 234, 1, 0, 0, 0, 1335, 1336, 5, 76, 0, 0, 1336, 1337, 5, 73, 0, 0, 1337, 1338, 5, 75, 0, 0, 1338, 1339, 5, 69, 0, 0, 1339, 236, 1, 0, 0, 0, 1340, 1341, 5, 76, 0, 0, 1341, 1342, 5, 73, 0, 0, 1342, 1343, 5, 77, 0, 0, 1343, 1344, 5, 73, 0, 0, 1344, 1345, 5, 84, 0, 0, 1345, 238, 1, 0, 0, 0, 1346, 1347, 5, 76, 0, 0, 1347, 1348, 5, 79, 0, 0, 1348, 1349, 5, 67, 0, 0, 1349, 1350, 5, 65, 0, 0, 1350, 1351, 5, 76, 0, 0, 1351, 1352, 5, 84, 0, 0, 1352, 1353, 5, 73, 0, 0, 1353, 1354, 5, 77, 0, 0, 1354, 1355, 5, 69, 0, 0, 1355, 240, 1, 0, 0, 0, 1356, 1357, 5, 76, 0, 0, 1357, 1358, 5, 79, 0, 0, 1358, 1359, 5, 67, 0, 0, 1359, 1360, 5, 65, 0, 0, 1360, 1361, 5, 76, 0, 0, 1361, 1362, 5, 84, 0, 0, 1362, 1363, 5, 73, 0, 0, 1363, 1364, 5, 77, 0, 0, 1364, 1365, 5, 69, 0, 0, 1365, 1366, 5, 83, 0, 0, 1366, 1367, 5, 84, 0, 0, 1367, 1368, 5, 65, 0, 0, 1368, 1369, 5, 77, 0, 0, 1369, 1370, 5, 80, 0, 0, 1370, 242, 1, 0, 0, 0, 1371, 1372, 5, 76, 0, 0, 1372, 1373, 5, 79, 0, 0, 1373, 1374, 5, 71, 0, 0, 1374, 1375, 5, 73, 0, 0, 1375, 1376, 5, 67, 0, 0, 1376, 1377, 5, 65, 0, 0, 1377, 1378, 5, 76, 0, 0, 1378, 244, 1, 0, 0, 0, 1379, 1380, 5, 77, 0, 0, 1380, 1381, 5, 65, 0, 0, 1381, 1382, 5, 80, 0, 0, 1382, 246, 1, 0, 0, 0, 1383, 1384, 5, 77, 0, 0, 1384, 1385, 5, 65, 0, 0, 1385, 1386, 5, 84, 0, 0, 1386, 1387, 5, 67, 0, 0, 1387, 1388, 5, 72, 0, 0, 1388, 1389, 5, 69, 0, 0, 1389, 1390, 5, 68, 0, 0, 1390, 248, 1, 0, 0, 0, 1391, 1392, 5, 77, 0, 0, 1392, 1393, 5, 65, 0, 0, 1393, 1394, 5, 84, 0, 0, 1394, 1395, 5, 69, 0, 0, 1395, 1396, 5, 82, 0, 0, 1396, 1397, 5, 73, 0, 0, 1397, 1398, 5, 65, 0, 0, 1398, 1399, 5, 76, 0, 0, 1399, 1400, 5, 73, 0, 0, 1400, 1401, 5, 90, 0, 0, 1401, 1402, 5, 69, 0, 0, 1402, 1403, 5, 68, 0, 0, 1403, 250, 1, 0, 0, 0, 1404, 1405, 5, 77, 0, 0, 1405, 1406, 5, 69, 0, 0, 1406, 1407, 5, 82, 0, 0, 1407, 1408, 5, 71, 0, 0, 1408, 1409, 5, 69, 0, 0, 1409, 252, 1, 0, 0, 0, 1410, 1411, 5, 77, 0, 0, 1411, 1412, 5, 73, 0, 0, 1412, 1413, 5, 78, 0, 0, 1413, 1414, 5, 85, 0, 0, 1414, 1415, 5, 84, 0, 0, 1415, 1416, 5, 69, 0, 0, 1416, 254, 1, 0, 0, 0, 1417, 1418, 5, 77, 0, 0, 1418, 1419, 5, 79, 0, 0, 1419, 1420, 5, 78, 0, 0, 1420, 1421, 5, 84, 0, 0, 1421, 1422, 5, 72, 0, 0, 1422, 256, 1, 0, 0, 0, 1423, 1424, 5, 78, 0, 0, 1424, 1425, 5, 65, 0, 0, 1425, 1426, 5, 77, 0, 0, 1426, 1427, 5, 69, 0, 0, 1427, 258, 1, 0, 0, 0, 1428, 1429, 5, 78, 0, 0, 1429, 1430, 5, 65, 0, 0, 1430, 1431, 5, 84, 0, 0, 1431, 1432, 5, 85, 0, 0, 1432, 1433, 5, 82, 0, 0, 1433, 1434, 5, 65, 0, 0, 1434, 1435, 5, 76, 0, 0, 1435, 260, 1, 0, 0, 0, 1436, 1437, 5, 78, 0, 0, 1437, 1438, 5, 70, 0, 0, 1438, 1439, 5, 67, 0, 0, 1439, 262, 1, 0, 0, 0, 1440, 1441, 5, 78, 0, 0, 1441, 1442, 5, 70, 0, 0, 1442, 1443, 5, 68, 0, 0, 1443, 264, 1, 0, 0, 0, 1444, 1445, 5, 78, 0, 0, 1445, 1446, 5, 70, 0, 0, 1446, 1447, 5, 75, 0, 0, 1447, 1448, 5, 67, 0, 0, 1448, 266, 1, 0, 0, 0, 1449, 1450, 5, 78, 0, 0, 1450, 1451, 5, 70, 0, 0, 1451, 1452, 5, 75, 0, 0, 1452, 1453, 5, 68, 0, 0, 1453, 268, 1, 0, 0, 0, 1454, 1455, 5, 78, 0, 0, 1455, 1456, 5, 79, 0, 0, 1456, 270, 1, 0, 0, 0, 1457, 1458, 5, 78, 0, 0, 1458, 1459, 5, 79, 0, 0, 1459, 1460, 5, 78, 0, 0, 1460, 1461, 5, 69, 0, 0, 1461, 272, 1, 0, 0, 0, 1462, 1463, 5, 78, 0, 0, 1463, 1464, 5, 79, 0, 0, 1464, 1465, 5, 82, 0, 0, 1465, 1466, 5, 77, 0, 0, 1466, 1467, 5, 65, 0, 0, 1467, 1468, 5, 76, 0, 0, 1468, 1469, 5, 73, 0, 0, 1469, 1470, 5, 90, 0, 0, 1470, 1471, 5, 69, 0, 0, 1471, 274, 1, 0, 0, 0, 1472, 1473, 5, 78, 0, 0, 1473, 1474, 5, 79, 0, 0, 1474, 1475, 5, 84, 0, 0, 1475, 276, 1, 0, 0, 0, 1476, 1477, 5, 78, 0, 0, 1477, 1478, 5, 85, 0, 0, 1478, 1479, 5, 76, 0, 0, 1479, 1480, 5, 76, 0, 0, 1480, 278, 1, 0, 0, 0, 1481, 1482, 5, 78, 0, 0, 1482, 1483, 5, 85, 0, 0, 1483, 1484, 5, 76, 0, 0, 1484, 1485, 5, 76, 0, 0, 1485, 1486, 5, 73, 0, 0, 1486, 1487, 5, 70, 0, 0, 1487, 280, 1, 0, 0, 0, 1488, 1489, 5, 78, 0, 0, 1489, 1490, 5, 85, 0, 0, 1490, 1491, 5, 76, 0, 0, 1491, 1492, 5, 76, 0, 0, 1492, 1493, 5, 83, 0, 0, 1493, 282, 1, 0, 0, 0, 1494, 1495, 5, 79, 0, 0, 1495, 1496, 5, 70, 0, 0, 1496, 284, 1, 0, 0, 0, 1497, 1498, 5, 79, 0, 0, 1498, 1499, 5, 70, 0, 0, 1499, 1500, 5, 70, 0, 0, 1500, 1501, 5, 83, 0, 0, 1501, 1502, 5, 69, 0, 0, 1502, 1503, 5, 84, 0, 0, 1503, 286, 1, 0, 0, 0, 1504, 1505, 5, 79, 0, 0, 1505, 1506, 5, 78, 0, 0, 1506, 288, 1, 0, 0, 0, 1507, 1508, 5, 79, 0, 0, 1508, 1509, 5, 78, 0, 0, 1509, 1510, 5, 76, 0, 0, 1510, 1511, 5, 89, 0, 0, 1511, 290, 1, 0, 0, 0, 1512, 1513, 5, 79, 0, 0, 1513, 1514, 5, 80, 0, 0, 1514, 1515, 5, 84, 0, 0, 1515, 1516, 5, 73, 0, 0, 1516, 1517, 5, 79, 0, 0, 1517, 1518, 5, 78, 0, 0, 1518, 292, 1, 0, 0, 0, 1519, 1520, 5, 79, 0, 0, 1520, 1521, 5, 82, 0, 0, 1521, 294, 1, 0, 0, 0, 1522, 1523, 5, 79, 0, 0, 1523, 1524, 5, 82, 0, 0, 1524, 1525, 5, 68, 0, 0, 1525, 1526, 5, 69, 0, 0, 1526, 1527, 5, 82, 0, 0, 1527, 296, 1, 0, 0, 0, 1528, 1529, 5, 79, 0, 0, 1529, 1530, 5, 82, 0, 0, 1530, 1531, 5, 68, 0, 0, 1531, 1532, 5, 73, 0, 0, 1532, 1533, 5, 78, 0, 0, 1533, 1534, 5, 65, 0, 0, 1534, 1535, 5, 76, 0, 0, 1535, 1536, 5, 73, 0, 0, 1536, 1537, 5, 84, 0, 0, 1537, 1538, 5, 89, 0, 0, 1538, 298, 1, 0, 0, 0, 1539, 1540, 5, 79, 0, 0, 1540, 1541, 5, 85, 0, 0, 1541, 1542, 5, 84, 0, 0, 1542, 1543, 5, 69, 0, 0, 1543, 1544, 5, 82, 0, 0, 1544, 300, 1, 0, 0, 0, 1545, 1546, 5, 79, 0, 0, 1546, 1547, 5, 85, 0, 0, 1547, 1548, 5, 84, 0, 0, 1548, 1549, 5, 80, 0, 0, 1549, 1550, 5, 85, 0, 0, 1550, 1551, 5, 84, 0, 0, 1551, 302, 1, 0, 0, 0, 1552, 1553, 5, 79, 0, 0, 1553, 1554, 5, 86, 0, 0, 1554, 1555, 5, 69, 0, 0, 1555, 1556, 5, 82, 0, 0, 1556, 304, 1, 0, 0, 0, 1557, 1558, 5, 80, 0, 0, 1558, 1559, 5, 65, 0, 0, 1559, 1560, 5, 82, 0, 0, 1560, 1561, 5, 84, 0, 0, 1561, 1562, 5, 73, 0, 0, 1562, 1563, 5, 84, 0, 0, 1563, 1564, 5, 73, 0, 0, 1564, 1565, 5, 79, 0, 0, 1565, 1566, 5, 78, 0, 0, 1566, 306, 1, 0, 0, 0, 1567, 1568, 5, 80, 0, 0, 1568, 1569, 5, 65, 0, 0, 1569, 1570, 5, 82, 0, 0, 1570, 1571, 5, 84, 0, 0, 1571, 1572, 5, 73, 0, 0, 1572, 1573, 5, 84, 0, 0, 1573, 1574, 5, 73, 0, 0, 1574, 1575, 5, 79, 0, 0, 1575, 1576, 5, 78, 0, 0, 1576, 1577, 5, 83, 0, 0, 1577, 308, 1, 0, 0, 0, 1578, 1579, 5, 80, 0, 0, 1579, 1580, 5, 79, 0, 0, 1580, 1581, 5, 83, 0, 0, 1581, 1582, 5, 73, 0, 0, 1582, 1583, 5, 84, 0, 0, 1583, 1584, 5, 73, 0, 0, 1584, 1585, 5, 79, 0, 0, 1585, 1586, 5, 78, 0, 0, 1586, 310, 1, 0, 0, 0, 1587, 1588, 5, 80, 0, 0, 1588, 1589, 5, 82, 0, 0, 1589, 1590, 5, 69, 0, 0, 1590, 1591, 5, 67, 0, 0, 1591, 1592, 5, 69, 0, 0, 1592, 1593, 5, 68, 0, 0, 1593, 1594, 5, 73, 0, 0, 1594, 1595, 5, 78, 0, 0, 1595, 1596, 5, 71, 0, 0, 1596, 312, 1, 0, 0, 0, 1597, 1598, 5, 80, 0, 0, 1598, 1599, 5, 82, 0, 0, 1599, 1600, 5, 69, 0, 0, 1600, 1601, 5, 80, 0, 0, 1601, 1602, 5, 65, 0, 0, 1602, 1603, 5, 82, 0, 0, 1603, 1604, 5, 69, 0, 0, 1604, 314, 1, 0, 0, 0, 1605, 1606, 5, 80, 0, 0, 1606, 1607, 5, 82, 0, 0, 1607, 1608, 5, 73, 0, 0, 1608, 1609, 5, 77, 0, 0, 1609, 1610, 5, 65, 0, 0, 1610, 1611, 5, 82, 0, 0, 1611, 1612, 5, 89, 0, 0, 1612, 316, 1, 0, 0, 0, 1613, 1614, 5, 80, 0, 0, 1614, 1615, 5, 82, 0, 0, 1615, 1616, 5, 73, 0, 0, 1616, 1617, 5, 86, 0, 0, 1617, 1618, 5, 73, 0, 0, 1618, 1619, 5, 76, 0, 0, 1619, 1620, 5, 69, 0, 0, 1620, 1621, 5, 71, 0, 0, 1621, 1622, 5, 69, 0, 0, 1622, 1623, 5, 83, 0, 0, 1623, 318, 1, 0, 0, 0, 1624, 1625, 5, 80, 0, 0, 1625, 1626, 5, 82, 0, 0, 1626, 1627, 5, 79, 0, 0, 1627, 1628, 5, 80, 0, 0, 1628, 1629, 5, 69, 0, 0, 1629, 1630, 5, 82, 0, 0, 1630, 1631, 5, 84, 0, 0, 1631, 1632, 5, 73, 0, 0, 1632, 1633, 5, 69, 0, 0, 1633, 1634, 5, 83, 0, 0, 1634, 320, 1, 0, 0, 0, 1635, 1636, 5, 80, 0, 0, 1636, 1637, 5, 82, 0, 0, 1637, 1638, 5, 85, 0, 0, 1638, 1639, 5, 78, 0, 0, 1639, 1640, 5, 69, 0, 0, 1640, 322, 1, 0, 0, 0, 1641, 1642, 5, 82, 0, 0, 1642, 1643, 5, 65, 0, 0, 1643, 1644, 5, 78, 0, 0, 1644, 1645, 5, 71, 0, 0, 1645, 1646, 5, 69, 0, 0, 1646, 324, 1, 0, 0, 0, 1647, 1648, 5, 82, 0, 0, 1648, 1649, 5, 69, 0, 0, 1649, 1650, 5, 65, 0, 0, 1650, 1651, 5, 68, 0, 0, 1651, 326, 1, 0, 0, 0, 1652, 1653, 5, 82, 0, 0, 1653, 1654, 5, 69, 0, 0, 1654, 1655, 5, 67, 0, 0, 1655, 1656, 5, 85, 0, 0, 1656, 1657, 5, 82, 0, 0, 1657, 1658, 5, 83, 0, 0, 1658, 1659, 5, 73, 0, 0, 1659, 1660, 5, 86, 0, 0, 1660, 1661, 5, 69, 0, 0, 1661, 328, 1, 0, 0, 0, 1662, 1663, 5, 82, 0, 0, 1663, 1664, 5, 69, 0, 0, 1664, 1665, 5, 70, 0, 0, 1665, 1666, 5, 82, 0, 0, 1666, 1667, 5, 69, 0, 0, 1667, 1668, 5, 83, 0, 0, 1668, 1669, 5, 72, 0, 0, 1669, 330, 1, 0, 0, 0, 1670, 1671, 5, 82, 0, 0, 1671, 1672, 5, 69, 0, 0, 1672, 1673, 5, 76, 0, 0, 1673, 1674, 5, 89, 0, 0, 1674, 332, 1, 0, 0, 0, 1675, 1676, 5, 82, 0, 0, 1676, 1677, 5, 69, 0, 0, 1677, 1678, 5, 78, 0, 0, 1678, 1679, 5, 65, 0, 0, 1679, 1680, 5, 77, 0, 0, 1680, 1681, 5, 69, 0, 0, 1681, 334, 1, 0, 0, 0, 1682, 1683, 5, 82, 0, 0, 1683, 1684, 5, 69, 0, 0, 1684, 1685, 5, 80, 0, 0, 1685, 1686, 5, 69, 0, 0, 1686, 1687, 5, 65, 0, 0, 1687, 1688, 5, 84, 0, 0, 1688, 1689, 5, 65, 0, 0, 1689, 1690, 5, 66, 0, 0, 1690, 1691, 5, 76, 0, 0, 1691, 1692, 5, 69, 0, 0, 1692, 336, 1, 0, 0, 0, 1693, 1694, 5, 82, 0, 0, 1694, 1695, 5, 69, 0, 0, 1695, 1696, 5, 80, 0, 0, 1696, 1697, 5, 76, 0, 0, 1697, 1698, 5, 65, 0, 0, 1698, 1699, 5, 67, 0, 0, 1699, 1700, 5, 69, 0, 0, 1700, 338, 1, 0, 0, 0, 1701, 1702, 5, 82, 0, 0, 1702, 1703, 5, 69, 0, 0, 1703, 1704, 5, 83, 0, 0, 1704, 1705, 5, 69, 0, 0, 1705, 1706, 5, 84, 0, 0, 1706, 340, 1, 0, 0, 0, 1707, 1708, 5, 82, 0, 0, 1708, 1709, 5, 69, 0, 0, 1709, 1710, 5, 83, 0, 0, 1710, 1711, 5, 80, 0, 0, 1711, 1712, 5, 69, 0, 0, 1712, 1713, 5, 67, 0, 0, 1713, 1714, 5, 84, 0, 0, 1714, 342, 1, 0, 0, 0, 1715, 1716, 5, 82, 0, 0, 1716, 1717, 5, 69, 0, 0, 1717, 1718, 5, 83, 0, 0, 1718, 1719, 5, 84, 0, 0, 1719, 1720, 5, 82, 0, 0, 1720, 1721, 5, 73, 0, 0, 1721, 1722, 5, 67, 0, 0, 1722, 1723, 5, 84, 0, 0, 1723, 344, 1, 0, 0, 0, 1724, 1725, 5, 82, 0, 0, 1725, 1726, 5, 69, 0, 0, 1726, 1727, 5, 84, 0, 0, 1727, 1728, 5, 85, 0, 0, 1728, 1729, 5, 82, 0, 0, 1729, 1730, 5, 78, 0, 0, 1730, 346, 1, 0, 0, 0, 1731, 1732, 5, 82, 0, 0, 1732, 1733, 5, 69, 0, 0, 1733, 1734, 5, 84, 0, 0, 1734, 1735, 5, 85, 0, 0, 1735, 1736, 5, 82, 0, 0, 1736, 1737, 5, 78, 0, 0, 1737, 1738, 5, 83, 0, 0, 1738, 348, 1, 0, 0, 0, 1739, 1740, 5, 82, 0, 0, 1740, 1741, 5, 69, 0, 0, 1741, 1742, 5, 86, 0, 0, 1742, 1743, 5, 79, 0, 0, 1743, 1744, 5, 75, 0, 0, 1744, 1745, 5, 69, 0, 0, 1745, 350, 1, 0, 0, 0, 1746, 1747, 5, 82, 0, 0, 1747, 1748, 5, 73, 0, 0, 1748, 1749, 5, 71, 0, 0, 1749, 1750, 5, 72, 0, 0, 1750, 1751, 5, 84, 0, 0, 1751, 352, 1, 0, 0, 0, 1752, 1753, 5, 82, 0, 0, 1753, 1754, 5, 79, 0, 0, 1754, 1755, 5, 76, 0, 0, 1755, 1756, 5, 69, 0, 0, 1756, 354, 1, 0, 0, 0, 1757, 1758, 5, 82, 0, 0, 1758, 1759, 5, 79, 0, 0, 1759, 1760, 5, 76, 0, 0, 1760, 1761, 5, 69, 0, 0, 1761, 1762, 5, 83, 0, 0, 1762, 356, 1, 0, 0, 0, 1763, 1764, 5, 82, 0, 0, 1764, 1765, 5, 79, 0, 0, 1765, 1766, 5, 76, 0, 0, 1766, 1767, 5, 76, 0, 0, 1767, 1768, 5, 66, 0, 0, 1768, 1769, 5, 65, 0, 0, 1769, 1770, 5, 67, 0, 0, 1770, 1771, 5, 75, 0, 0, 1771, 358, 1, 0, 0, 0, 1772, 1773, 5, 82, 0, 0, 1773, 1774, 5, 79, 0, 0, 1774, 1775, 5, 76, 0, 0, 1775, 1776, 5, 76, 0, 0, 1776, 1777, 5, 85, 0, 0, 1777, 1778, 5, 80, 0, 0, 1778, 360, 1, 0, 0, 0, 1779, 1780, 5, 82, 0, 0, 1780, 1781, 5, 79, 0, 0, 1781, 1782, 5, 87, 0, 0, 1782, 362, 1, 0, 0, 0, 1783, 1784, 5, 82, 0, 0, 1784, 1785, 5, 79, 0, 0, 1785, 1786, 5, 87, 0, 0, 1786, 1787, 5, 83, 0, 0, 1787, 364, 1, 0, 0, 0, 1788, 1789, 5, 83, 0, 0, 1789, 1790, 5, 67, 0, 0, 1790, 1791, 5, 72, 0, 0, 1791, 1792, 5, 69, 0, 0, 1792, 1793, 5, 77, 0, 0, 1793, 1794, 5, 65, 0, 0, 1794, 366, 1, 0, 0, 0, 1795, 1796, 5, 83, 0, 0, 1796, 1797, 5, 67, 0, 0, 1797, 1798, 5, 72, 0, 0, 1798, 1799, 5, 69, 0, 0, 1799, 1800, 5, 77, 0, 0, 1800, 1801, 5, 65, 0, 0, 1801, 1802, 5, 83, 0, 0, 1802, 368, 1, 0, 0, 0, 1803, 1804, 5, 83, 0, 0, 1804, 1805, 5, 69, 0, 0, 1805, 1806, 5, 67, 0, 0, 1806, 1807, 5, 79, 0, 0, 1807, 1808, 5, 78, 0, 0, 1808, 1809, 5, 68, 0, 0, 1809, 370, 1, 0, 0, 0, 1810, 1811, 5, 83, 0, 0, 1811, 1812, 5, 69, 0, 0, 1812, 1813, 5, 67, 0, 0, 1813, 1814, 5, 85, 0, 0, 1814, 1815, 5, 82, 0, 0, 1815, 1816, 5, 73, 0, 0, 1816, 1817, 5, 84, 0, 0, 1817, 1818, 5, 89, 0, 0, 1818, 372, 1, 0, 0, 0, 1819, 1820, 5, 83, 0, 0, 1820, 1821, 5, 69, 0, 0, 1821, 1822, 5, 76, 0, 0, 1822, 1823, 5, 69, 0, 0, 1823, 1824, 5, 67, 0, 0, 1824, 1825, 5, 84, 0, 0, 1825, 374, 1, 0, 0, 0, 1826, 1827, 5, 83, 0, 0, 1827, 1828, 5, 69, 0, 0, 1828, 1829, 5, 82, 0, 0, 1829, 1830, 5, 73, 0, 0, 1830, 1831, 5, 65, 0, 0, 1831, 1832, 5, 76, 0, 0, 1832, 1833, 5, 73, 0, 0, 1833, 1834, 5, 90, 0, 0, 1834, 1835, 5, 65, 0, 0, 1835, 1836, 5, 66, 0, 0, 1836, 1837, 5, 76, 0, 0, 1837, 1838, 5, 69, 0, 0, 1838, 376, 1, 0, 0, 0, 1839, 1840, 5, 83, 0, 0, 1840, 1841, 5, 69, 0, 0, 1841, 1842, 5, 83, 0, 0, 1842, 1843, 5, 83, 0, 0, 1843, 1844, 5, 73, 0, 0, 1844, 1845, 5, 79, 0, 0, 1845, 1846, 5, 78, 0, 0, 1846, 378, 1, 0, 0, 0, 1847, 1848, 5, 83, 0, 0, 1848, 1849, 5, 69, 0, 0, 1849, 1850, 5, 84, 0, 0, 1850, 380, 1, 0, 0, 0, 1851, 1852, 5, 83, 0, 0, 1852, 1853, 5, 69, 0, 0, 1853, 1854, 5, 84, 0, 0, 1854, 1855, 5, 83, 0, 0, 1855, 382, 1, 0, 0, 0, 1856, 1857, 5, 83, 0, 0, 1857, 1858, 5, 72, 0, 0, 1858, 1859, 5, 79, 0, 0, 1859, 1860, 5, 87, 0, 0, 1860, 384, 1, 0, 0, 0, 1861, 1862, 5, 83, 0, 0, 1862, 1863, 5, 79, 0, 0, 1863, 1864, 5, 77, 0, 0, 1864, 1865, 5, 69, 0, 0, 1865, 386, 1, 0, 0, 0, 1866, 1867, 5, 83, 0, 0, 1867, 1868, 5, 81, 0, 0, 1868, 1869, 5, 76, 0, 0, 1869, 388, 1, 0, 0, 0, 1870, 1871, 5, 83, 0, 0, 1871, 1872, 5, 84, 0, 0, 1872, 1873, 5, 65, 0, 0, 1873, 1874, 5, 82, 0, 0, 1874, 1875, 5, 84, 0, 0, 1875, 390, 1, 0, 0, 0, 1876, 1877, 5, 83, 0, 0, 1877, 1878, 5, 84, 0, 0, 1878, 1879, 5, 65, 0, 0, 1879, 1880, 5, 84, 0, 0, 1880, 1881, 5, 83, 0, 0, 1881, 392, 1, 0, 0, 0, 1882, 1883, 5, 83, 0, 0, 1883, 1884, 5, 85, 0, 0, 1884, 1885, 5, 66, 0, 0, 1885, 1886, 5, 83, 0, 0, 1886, 1887, 5, 84, 0, 0, 1887, 1888, 5, 82, 0, 0, 1888, 1889, 5, 73, 0, 0, 1889, 1890, 5, 78, 0, 0, 1890, 1891, 5, 71, 0, 0, 1891, 394, 1, 0, 0, 0, 1892, 1893, 5, 83, 0, 0, 1893, 1894, 5, 89, 0, 0, 1894, 1895, 5, 83, 0, 0, 1895, 1896, 5, 84, 0, 0, 1896, 1897, 5, 69, 0, 0, 1897, 1898, 5, 77, 0, 0, 1898, 396, 1, 0, 0, 0, 1899, 1900, 5, 83, 0, 0, 1900, 1901, 5, 89, 0, 0, 1901, 1902, 5, 83, 0, 0, 1902, 1903, 5, 84, 0, 0, 1903, 1904, 5, 69, 0, 0, 1904, 1905, 5, 77, 0, 0, 1905, 1906, 5, 95, 0, 0, 1906, 1907, 5, 84, 0, 0, 1907, 1908, 5, 73, 0, 0, 1908, 1909, 5, 77, 0, 0, 1909, 1910, 5, 69, 0, 0, 1910, 398, 1, 0, 0, 0, 1911, 1912, 5, 83, 0, 0, 1912, 1913, 5, 89, 0, 0, 1913, 1914, 5, 83, 0, 0, 1914, 1915, 5, 84, 0, 0, 1915, 1916, 5, 69, 0, 0, 1916, 1917, 5, 77, 0, 0, 1917, 1918, 5, 95, 0, 0, 1918, 1919, 5, 86, 0, 0, 1919, 1920, 5, 69, 0, 0, 1920, 1921, 5, 82, 0, 0, 1921, 1922, 5, 83, 0, 0, 1922, 1923, 5, 73, 0, 0, 1923, 1924, 5, 79, 0, 0, 1924, 1925, 5, 78, 0, 0, 1925, 400, 1, 0, 0, 0, 1926, 1927, 5, 84, 0, 0, 1927, 1928, 5, 65, 0, 0, 1928, 1929, 5, 66, 0, 0, 1929, 1930, 5, 76, 0, 0, 1930, 1931, 5, 69, 0, 0, 1931, 402, 1, 0, 0, 0, 1932, 1933, 5, 84, 0, 0, 1933, 1934, 5, 65, 0, 0, 1934, 1935, 5, 66, 0, 0, 1935, 1936, 5, 76, 0, 0, 1936, 1937, 5, 69, 0, 0, 1937, 1938, 5, 83, 0, 0, 1938, 404, 1, 0, 0, 0, 1939, 1940, 5, 84, 0, 0, 1940, 1941, 5, 65, 0, 0, 1941, 1942, 5, 66, 0, 0, 1942, 1943, 5, 76, 0, 0, 1943, 1944, 5, 69, 0, 0, 1944, 1945, 5, 83, 0, 0, 1945, 1946, 5, 65, 0, 0, 1946, 1947, 5, 77, 0, 0, 1947, 1948, 5, 80, 0, 0, 1948, 1949, 5, 76, 0, 0, 1949, 1950, 5, 69, 0, 0, 1950, 406, 1, 0, 0, 0, 1951, 1952, 5, 84, 0, 0, 1952, 1953, 5, 65, 0, 0, 1953, 1954, 5, 71, 0, 0, 1954, 408, 1, 0, 0, 0, 1955, 1956, 5, 84, 0, 0, 1956, 1957, 5, 69, 0, 0, 1957, 1958, 5, 77, 0, 0, 1958, 1959, 5, 80, 0, 0, 1959, 1960, 5, 79, 0, 0, 1960, 1961, 5, 82, 0, 0, 1961, 1962, 5, 65, 0, 0, 1962, 1963, 5, 82, 0, 0, 1963, 1964, 5, 89, 0, 0, 1964, 410, 1, 0, 0, 0, 1965, 1966, 5, 84, 0, 0, 1966, 1967, 5, 69, 0, 0, 1967, 1968, 5, 88, 0, 0, 1968, 1969, 5, 84, 0, 0, 1969, 412, 1, 0, 0, 0, 1970, 1971, 5, 84, 0, 0, 1971, 1972, 5, 72, 0, 0, 1972, 1973, 5, 69, 0, 0, 1973, 1974, 5, 78, 0, 0, 1974, 414, 1, 0, 0, 0, 1975, 1976, 5, 84, 0, 0, 1976, 1977, 5, 73, 0, 0, 1977, 1978, 5, 77, 0, 0, 1978, 1979, 5, 69, 0, 0, 1979, 416, 1, 0, 0, 0, 1980, 1981, 5, 84, 0, 0, 1981, 1982, 5, 73, 0, 0, 1982, 1983, 5, 77, 0, 0, 1983, 1984, 5, 69, 0, 0, 1984, 1985, 5, 83, 0, 0, 1985, 1986, 5, 84, 0, 0, 1986, 1987, 5, 65, 0, 0, 1987, 1988, 5, 77, 0, 0, 1988, 1989, 5, 80, 0, 0, 1989, 418, 1, 0, 0, 0, 1990, 1991, 5, 84, 0, 0, 1991, 1992, 5, 79, 0, 0, 1992, 420, 1, 0, 0, 0, 1993, 1994, 5, 84, 0, 0, 1994, 1995, 5, 82, 0, 0, 1995, 1996, 5, 65, 0, 0, 1996, 1997, 5, 78, 0, 0, 1997, 1998, 5, 83, 0, 0, 1998, 1999, 5, 65, 0, 0, 1999, 2000, 5, 67, 0, 0, 2000, 2001, 5, 84, 0, 0, 2001, 2002, 5, 73, 0, 0, 2002, 2003, 5, 79, 0, 0, 2003, 2004, 5, 78, 0, 0, 2004, 422, 1, 0, 0, 0, 2005, 2006, 5, 84, 0, 0, 2006, 2007, 5, 82, 0, 0, 2007, 2008, 5, 85, 0, 0, 2008, 2009, 5, 69, 0, 0, 2009, 424, 1, 0, 0, 0, 2010, 2011, 5, 84, 0, 0, 2011, 2012, 5, 82, 0, 0, 2012, 2013, 5, 85, 0, 0, 2013, 2014, 5, 78, 0, 0, 2014, 2015, 5, 67, 0, 0, 2015, 2016, 5, 65, 0, 0, 2016, 2017, 5, 84, 0, 0, 2017, 2018, 5, 69, 0, 0, 2018, 426, 1, 0, 0, 0, 2019, 2020, 5, 84, 0, 0, 2020, 2021, 5, 82, 0, 0, 2021, 2022, 5, 89, 0, 0, 2022, 2023, 5, 95, 0, 0, 2023, 2024, 5, 67, 0, 0, 2024, 2025, 5, 65, 0, 0, 2025, 2026, 5, 83, 0, 0, 2026, 2027, 5, 84, 0, 0, 2027, 428, 1, 0, 0, 0, 2028, 2029, 5, 84, 0, 0, 2029, 2030, 5, 89, 0, 0, 2030, 2031, 5, 80, 0, 0, 2031, 2032, 5, 69, 0, 0, 2032, 430, 1, 0, 0, 0, 2033, 2034, 5, 85, 0, 0, 2034, 2035, 5, 69, 0, 0, 2035, 2036, 5, 83, 0, 0, 2036, 2037, 5, 67, 0, 0, 2037, 2038, 5, 65, 0, 0, 2038, 2039, 5, 80, 0, 0, 2039, 2040, 5, 69, 0, 0, 2040, 432, 1, 0, 0, 0, 2041, 2042, 5, 85, 0, 0, 2042, 2043, 5, 78, 0, 0, 2043, 2044, 5, 66, 0, 0, 2044, 2045, 5, 79, 0, 0, 2045, 2046, 5, 85, 0, 0, 2046, 2047, 5, 78, 0, 0, 2047, 2048, 5, 68, 0, 0, 2048, 2049, 5, 69, 0, 0, 2049, 2050, 5, 68, 0, 0, 2050, 434, 1, 0, 0, 0, 2051, 2052, 5, 85, 0, 0, 2052, 2053, 5, 78, 0, 0, 2053, 2054, 5, 67, 0, 0, 2054, 2055, 5, 79, 0, 0, 2055, 2056, 5, 77, 0, 0, 2056, 2057, 5, 77, 0, 0, 2057, 2058, 5, 73, 0, 0, 2058, 2059, 5, 84, 0, 0, 2059, 2060, 5, 84, 0, 0, 2060, 2061, 5, 69, 0, 0, 2061, 2062, 5, 68, 0, 0, 2062, 436, 1, 0, 0, 0, 2063, 2064, 5, 85, 0, 0, 2064, 2065, 5, 78, 0, 0, 2065, 2066, 5, 73, 0, 0, 2066, 2067, 5, 79, 0, 0, 2067, 2068, 5, 78, 0, 0, 2068, 438, 1, 0, 0, 0, 2069, 2070, 5, 85, 0, 0, 2070, 2071, 5, 78, 0, 0, 2071, 2072, 5, 73, 0, 0, 2072, 2073, 5, 81, 0, 0, 2073, 2074, 5, 85, 0, 0, 2074, 2075, 5, 69, 0, 0, 2075, 440, 1, 0, 0, 0, 2076, 2077, 5, 85, 0, 0, 2077, 2078, 5, 78, 0, 0, 2078, 2079, 5, 78, 0, 0, 2079, 2080, 5, 69, 0, 0, 2080, 2081, 5, 83, 0, 0, 2081, 2082, 5, 84, 0, 0, 2082, 442, 1, 0, 0, 0, 2083, 2084, 5, 85, 0, 0, 2084, 2085, 5, 80, 0, 0, 2085, 2086, 5, 68, 0, 0, 2086, 2087, 5, 65, 0, 0, 2087, 2088, 5, 84, 0, 0, 2088, 2089, 5, 69, 0, 0, 2089, 444, 1, 0, 0, 0, 2090, 2091, 5, 85, 0, 0, 2091, 2092, 5, 83, 0, 0, 2092, 2093, 5, 69, 0, 0, 2093, 446, 1, 0, 0, 0, 2094, 2095, 5, 85, 0, 0, 2095, 2096, 5, 83, 0, 0, 2096, 2097, 5, 69, 0, 0, 2097, 2098, 5, 82, 0, 0, 2098, 448, 1, 0, 0, 0, 2099, 2100, 5, 85, 0, 0, 2100, 2101, 5, 83, 0, 0, 2101, 2102, 5, 73, 0, 0, 2102, 2103, 5, 78, 0, 0, 2103, 2104, 5, 71, 0, 0, 2104, 450, 1, 0, 0, 0, 2105, 2106, 5, 86, 0, 0, 2106, 2107, 5, 65, 0, 0, 2107, 2108, 5, 76, 0, 0, 2108, 2109, 5, 73, 0, 0, 2109, 2110, 5, 68, 0, 0, 2110, 2111, 5, 65, 0, 0, 2111, 2112, 5, 84, 0, 0, 2112, 2113, 5, 69, 0, 0, 2113, 452, 1, 0, 0, 0, 2114, 2115, 5, 86, 0, 0, 2115, 2116, 5, 65, 0, 0, 2116, 2117, 5, 76, 0, 0, 2117, 2118, 5, 85, 0, 0, 2118, 2119, 5, 69, 0, 0, 2119, 2120, 5, 83, 0, 0, 2120, 454, 1, 0, 0, 0, 2121, 2122, 5, 86, 0, 0, 2122, 2123, 5, 69, 0, 0, 2123, 2124, 5, 82, 0, 0, 2124, 2125, 5, 66, 0, 0, 2125, 2126, 5, 79, 0, 0, 2126, 2127, 5, 83, 0, 0, 2127, 2128, 5, 69, 0, 0, 2128, 456, 1, 0, 0, 0, 2129, 2130, 5, 86, 0, 0, 2130, 2131, 5, 69, 0, 0, 2131, 2132, 5, 82, 0, 0, 2132, 2133, 5, 83, 0, 0, 2133, 2134, 5, 73, 0, 0, 2134, 2135, 5, 79, 0, 0, 2135, 2136, 5, 78, 0, 0, 2136, 458, 1, 0, 0, 0, 2137, 2138, 5, 86, 0, 0, 2138, 2139, 5, 73, 0, 0, 2139, 2140, 5, 69, 0, 0, 2140, 2141, 5, 87, 0, 0, 2141, 460, 1, 0, 0, 0, 2142, 2143, 5, 87, 0, 0, 2143, 2144, 5, 72, 0, 0, 2144, 2145, 5, 69, 0, 0, 2145, 2146, 5, 78, 0, 0, 2146, 462, 1, 0, 0, 0, 2147, 2148, 5, 87, 0, 0, 2148, 2149, 5, 72, 0, 0, 2149, 2150, 5, 69, 0, 0, 2150, 2151, 5, 82, 0, 0, 2151, 2152, 5, 69, 0, 0, 2152, 464, 1, 0, 0, 0, 2153, 2154, 5, 87, 0, 0, 2154, 2155, 5, 73, 0, 0, 2155, 2156, 5, 84, 0, 0, 2156, 2157, 5, 72, 0, 0, 2157, 466, 1, 0, 0, 0, 2158, 2159, 5, 87, 0, 0, 2159, 2160, 5, 79, 0, 0, 2160, 2161, 5, 82, 0, 0, 2161, 2162, 5, 75, 0, 0, 2162, 468, 1, 0, 0, 0, 2163, 2164, 5, 87, 0, 0, 2164, 2165, 5, 82, 0, 0, 2165, 2166, 5, 73, 0, 0, 2166, 2167, 5, 84, 0, 0, 2167, 2168, 5, 69, 0, 0, 2168, 470, 1, 0, 0, 0, 2169, 2170, 5, 89, 0, 0, 2170, 2171, 5, 69, 0, 0, 2171, 2172, 5, 65, 0, 0, 2172, 2173, 5, 82, 0, 0, 2173, 472, 1, 0, 0, 0, 2174, 2175, 5, 90, 0, 0, 2175, 2176, 5, 79, 0, 0, 2176, 2177, 5, 78, 0, 0, 2177, 2178, 5, 69, 0, 0, 2178, 474, 1, 0, 0, 0, 2179, 2180, 5, 61, 0, 0, 2180, 476, 1, 0, 0, 0, 2181, 2182, 5, 60, 0, 0, 2182, 2186, 5, 62, 0, 0, 2183, 2184, 5, 33, 0, 0, 2184, 2186, 5, 61, 0, 0, 2185, 2181, 1, 0, 0, 0, 2185, 2183, 1, 0, 0, 0, 2186, 478, 1, 0, 0, 0, 2187, 2188, 5, 60, 0, 0, 2188, 480, 1, 0, 0, 0, 2189, 2190, 5, 60, 0, 0, 2190, 2191, 5, 61, 0, 0, 2191, 482, 1, 0, 0, 0, 2192, 2193, 5, 62, 0, 0, 2193, 484, 1, 0, 0, 0, 2194, 2195, 5, 62, 0, 0, 2195, 2196, 5, 61, 0, 0, 2196, 486, 1, 0, 0, 0, 2197, 2198, 5, 43, 0, 0, 2198, 488, 1, 0, 0, 0, 2199, 2200, 5, 45, 0, 0, 2200, 490, 1, 0, 0, 0, 2201, 2202, 5, 42, 0, 0, 2202, 492, 1, 0, 0, 0, 2203, 2204, 5, 47, 0, 0, 2204, 494, 1, 0, 0, 0, 2205, 2206, 5, 37, 0, 0, 2206, 496, 1, 0, 0, 0, 2207, 2208, 5, 124, 0, 0, 2208, 2209, 5, 124, 0, 0, 2209, 498, 1, 0, 0, 0, 2210, 2216, 5, 39, 0, 0, 2211, 2215, 8, 0, 0, 0, 2212, 2213, 5, 39, 0, 0, 2213, 2215, 5, 39, 0, 0, 2214, 2211, 1, 0, 0, 0, 2214, 2212, 1, 0, 0, 0, 2215, 2218, 1, 0, 0, 0, 2216, 2214, 1, 0, 0, 0, 2216, 2217, 1, 0, 0, 0, 2217, 2219, 1, 0, 0, 0, 2218, 2216, 1, 0, 0, 0, 2219, 2220, 5, 39, 0, 0, 2220, 500, 1, 0, 0, 0, 2221, 2222, 5, 85, 0, 0, 2222, 2223, 5, 38, 0, 0, 2223, 2224, 5, 39, 0, 0, 2224, 2230, 1, 0, 0, 0, 2225, 2229, 8, 0, 0, 0, 2226, 2227, 5, 39, 0, 0, 2227, 2229, 5, 39, 0, 0, 2228, 2225, 1, 0, 0, 0, 2228, 2226, 1, 0, 0, 0, 2229, 2232, 1, 0, 0, 0, 2230, 2228, 1, 0, 0, 0, 2230, 2231, 1, 0, 0, 0, 2231, 2233, 1, 0, 0, 0, 2232, 2230, 1, 0, 0, 0, 2233, 2234, 5, 39, 0, 0, 2234, 502, 1, 0, 0, 0, 2235, 2236, 5, 88, 0, 0, 2236, 2237, 5, 39, 0, 0, 2237, 2241, 1, 0, 0, 0, 2238, 2240, 8, 0, 0, 0, 2239, 2238, 1, 0, 0, 0, 2240, 2243, 1, 0, 0, 0, 2241, 2239, 1, 0, 0, 0, 2241, 2242, 1, 0, 0, 0, 2242, 2244, 1, 0, 0, 0, 2243, 2241, 1, 0, 0, 0, 2244, 2245, 5, 39, 0, 0, 2245, 504, 1, 0, 0, 0, 2246, 2248, 3, 527, 263, 0, 2247, 2246, 1, 0, 0, 0, 2248, 2249, 1, 0, 0, 0, 2249, 2247, 1, 0, 0, 0, 2249, 2250, 1, 0, 0, 0, 2250, 506, 1, 0, 0, 0, 2251, 2253, 3, 527, 263, 0, 2252, 2251, 1, 0, 0, 0, 2253, 2254, 1, 0, 0, 0, 2254, 2252, 1, 0, 0, 0, 2254, 2255, 1, 0, 0, 0, 2255, 2256, 1, 0, 0, 0, 2256, 2260, 5, 46, 0, 0, 2257, 2259, 3, 527, 263, 0, 2258, 2257, 1, 0, 0, 0, 2259, 2262, 1, 0, 0, 0, 2260, 2258, 1, 0, 0, 0, 2260, 2261, 1, 0, 0, 0, 2261, 2270, 1, 0, 0, 0, 2262, 2260, 1, 0, 0, 0, 2263, 2265, 5, 46, 0, 0, 2264, 2266, 3, 527, 263, 0, 2265, 2264, 1, 0, 0, 0, 2266, 2267, 1, 0, 0, 0, 2267, 2265, 1, 0, 0, 0, 2267, 2268, 1, 0, 0, 0, 2268, 2270, 1, 0, 0, 0, 2269, 2252, 1, 0, 0, 0, 2269, 2263, 1, 0, 0, 0, 2270, 508, 1, 0, 0, 0, 2271, 2273, 3, 527, 263, 0, 2272, 2271, 1, 0, 0, 0, 2273, 2274, 1, 0, 0, 0, 2274, 2272, 1, 0, 0, 0, 2274, 2275, 1, 0, 0, 0, 2275, 2283, 1, 0, 0, 0, 2276, 2280, 5, 46, 0, 0, 2277, 2279, 3, 527, 263, 0, 2278, 2277, 1, 0, 0, 0, 2279, 2282, 1, 0, 0, 0, 2280, 2278, 1, 0, 0, 0, 2280, 2281, 1, 0, 0, 0, 2281, 2284, 1, 0, 0, 0, 2282, 2280, 1, 0, 0, 0, 2283, 2276, 1, 0, 0, 0, 2283, 2284, 1, 0, 0, 0, 2284, 2285, 1, 0, 0, 0, 2285, 2286, 3, 525, 262, 0, 2286, 2296, 1, 0, 0, 0, 2287, 2289, 5, 46, 0, 0, 2288, 2290, 3, 527, 263, 0, 2289, 2288, 1, 0, 0, 0, 2290, 2291, 1, 0, 0, 0, 2291, 2289, 1, 0, 0, 0, 2291, 2292, 1, 0, 0, 0, 2292, 2293, 1, 0, 0, 0, 2293, 2294, 3, 525, 262, 0, 2294, 2296, 1, 0, 0, 0, 2295, 2272, 1, 0, 0, 0, 2295, 2287, 1, 0, 0, 0, 2296, 510, 1, 0, 0, 0, 2297, 2300, 3, 529, 264, 0, 2298, 2300, 5, 95, 0, 0, 2299, 2297, 1, 0, 0, 0, 2299, 2298, 1, 0, 0, 0, 2300, 2306, 1, 0, 0, 0, 2301, 2305, 3, 529, 264, 0, 2302, 2305, 3, 527, 263, 0, 2303, 2305, 7, 1, 0, 0, 2304, 2301, 1, 0, 0, 0, 2304, 2302, 1, 0, 0, 0, 2304, 2303, 1, 0, 0, 0, 2305, 2308, 1, 0, 0, 0, 2306, 2304, 1, 0, 0, 0, 2306, 2307, 1, 0, 0, 0, 2307, 512, 1, 0, 0, 0, 2308, 2306, 1, 0, 0, 0, 2309, 2313, 3, 527, 263, 0, 2310, 2314, 3, 529, 264, 0, 2311, 2314, 3, 527, 263, 0, 2312, 2314, 7, 1, 0, 0, 2313, 2310, 1, 0, 0, 0, 2313, 2311, 1, 0, 0, 0, 2313, 2312, 1, 0, 0, 0, 2314, 2315, 1, 0, 0, 0, 2315, 2313, 1, 0, 0, 0, 2315, 2316, 1, 0, 0, 0, 2316, 514, 1, 0, 0, 0, 2317, 2323, 5, 34, 0, 0, 2318, 2322, 8, 2, 0, 0, 2319, 2320, 5, 34, 0, 0, 2320, 2322, 5, 34, 0, 0, 2321, 2318, 1, 0, 0, 0, 2321, 2319, 1, 0, 0, 0, 2322, 2325, 1, 0, 0, 0, 2323, 2321, 1, 0, 0, 0, 2323, 2324, 1, 0, 0, 0, 2324, 2326, 1, 0, 0, 0, 2325, 2323, 1, 0, 0, 0, 2326, 2327, 5, 34, 0, 0, 2327, 516, 1, 0, 0, 0, 2328, 2334, 5, 96, 0, 0, 2329, 2333, 8, 3, 0, 0, 2330, 2331, 5, 96, 0, 0, 2331, 2333, 5, 96, 0, 0, 2332, 2329, 1, 0, 0, 0, 2332, 2330, 1, 0, 0, 0, 2333, 2336, 1, 0, 0, 0, 2334, 2332, 1, 0, 0, 0, 2334, 2335, 1, 0, 0, 0, 2335, 2337, 1, 0, 0, 0, 2336, 2334, 1, 0, 0, 0, 2337, 2338, 5, 96, 0, 0, 2338, 518, 1, 0, 0, 0, 2339, 2340, 5, 84, 0, 0, 2340, 2341, 5, 73, 0, 0, 2341, 2342, 5, 77, 0, 0, 2342, 2343, 5, 69, 0, 0, 2343, 2344, 1, 0, 0, 0, 2344, 2345, 3, 535, 267, 0, 2345, 2346, 5, 87, 0, 0, 2346, 2347, 5, 73, 0, 0, 2347, 2348, 5, 84, 0, 0, 2348, 2349, 5, 72, 0, 0, 2349, 2350, 1, 0, 0, 0, 2350, 2351, 3, 535, 267, 0, 2351, 2352, 5, 84, 0, 0, 2352, 2353, 5, 73, 0, 0, 2353, 2354, 5, 77, 0, 0, 2354, 2355, 5, 69, 0, 0, 2355, 2356, 1, 0, 0, 0, 2356, 2357, 3, 535, 267, 0, 2357, 2358, 5, 90, 0, 0, 2358, 2359, 5, 79, 0, 0, 2359, 2360, 5, 78, 0, 0, 2360, 2361, 5, 69, 0, 0, 2361, 520, 1, 0, 0, 0, 2362, 2363, 5, 84, 0, 0, 2363, 2364, 5, 73, 0, 0, 2364, 2365, 5, 77, 0, 0, 2365, 2366, 5, 69, 0, 0, 2366, 2367, 5, 83, 0, 0, 2367, 2368, 5, 84, 0, 0, 2368, 2369, 5, 65, 0, 0, 2369, 2370, 5, 77, 0, 0, 2370, 2371, 5, 80, 0, 0, 2371, 2372, 1, 0, 0, 0, 2372, 2373, 3, 535, 267, 0, 2373, 2374, 5, 87, 0, 0, 2374, 2375, 5, 73, 0, 0, 2375, 2376, 5, 84, 0, 0, 2376, 2377, 5, 72, 0, 0, 2377, 2378, 1, 0, 0, 0, 2378, 2379, 3, 535, 267, 0, 2379, 2380, 5, 84, 0, 0, 2380, 2381, 5, 73, 0, 0, 2381, 2382, 5, 77, 0, 0, 2382, 2383, 5, 69, 0, 0, 2383, 2384, 1, 0, 0, 0, 2384, 2385, 3, 535, 267, 0, 2385, 2386, 5, 90, 0, 0, 2386, 2387, 5, 79, 0, 0, 2387, 2388, 5, 78, 0, 0, 2388, 2389, 5, 69, 0, 0, 2389, 522, 1, 0, 0, 0, 2390, 2391, 5, 68, 0, 0, 2391, 2392, 5, 79, 0, 0, 2392, 2393, 5, 85, 0, 0, 2393, 2394, 5, 66, 0, 0, 2394, 2395, 5, 76, 0, 0, 2395, 2396, 5, 69, 0, 0, 2396, 2397, 1, 0, 0, 0, 2397, 2398, 3, 535, 267, 0, 2398, 2399, 5, 80, 0, 0, 2399, 2400, 5, 82, 0, 0, 2400, 2401, 5, 69, 0, 0, 2401, 2402, 5, 67, 0, 0, 2402, 2403, 5, 73, 0, 0, 2403, 2404, 5, 83, 0, 0, 2404, 2405, 5, 73, 0, 0, 2405, 2406, 5, 79, 0, 0, 2406, 2407, 5, 78, 0, 0, 2407, 524, 1, 0, 0, 0, 2408, 2410, 5, 69, 0, 0, 2409, 2411, 7, 4, 0, 0, 2410, 2409, 1, 0, 0, 0, 2410, 2411, 1, 0, 0, 0, 2411, 2413, 1, 0, 0, 0, 2412, 2414, 3, 527, 263, 0, 2413, 2412, 1, 0, 0, 0, 2414, 2415, 1, 0, 0, 0, 2415, 2413, 1, 0, 0, 0, 2415, 2416, 1, 0, 0, 0, 2416, 526, 1, 0, 0, 0, 2417, 2418, 7, 5, 0, 0, 2418, 528, 1, 0, 0, 0, 2419, 2420, 7, 6, 0, 0, 2420, 530, 1, 0, 0, 0, 2421, 2422, 5, 45, 0, 0, 2422, 2423, 5, 45, 0, 0, 2423, 2427, 1, 0, 0, 0, 2424, 2426, 8, 7, 0, 0, 2425, 2424, 1, 0, 0, 0, 2426, 2429, 1, 0, 0, 0, 2427, 2425, 1, 0, 0, 0, 2427, 2428, 1, 0, 0, 0, 2428, 2431, 1, 0, 0, 0, 2429, 2427, 1, 0, 0, 0, 2430, 2432, 5, 13, 0, 0, 2431, 2430, 1, 0, 0, 0, 2431, 2432, 1, 0, 0, 0, 2432, 2434, 1, 0, 0, 0, 2433, 2435, 5, 10, 0, 0, 2434, 2433, 1, 0, 0, 0, 2434, 2435, 1, 0, 0, 0, 2435, 2436, 1, 0, 0, 0, 2436, 2437, 6, 265, 0, 0, 2437, 532, 1, 0, 0, 0, 2438, 2439, 5, 47, 0, 0, 2439, 2440, 5, 42, 0, 0, 2440, 2444, 1, 0, 0, 0, 2441, 2443, 9, 0, 0, 0, 2442, 2441, 1, 0, 0, 0, 2443, 2446, 1, 0, 0, 0, 2444, 2445, 1, 0, 0, 0, 2444, 2442, 1, 0, 0, 0, 2445, 2447, 1, 0, 0, 0, 2446, 2444, 1, 0, 0, 0, 2447, 2448, 5, 42, 0, 0, 2448, 2449, 5, 47, 0, 0, 2449, 2450, 1, 0, 0, 0, 2450, 2451, 6, 266, 0, 0, 2451, 534, 1, 0, 0, 0, 2452, 2454, 7, 8, 0, 0, 2453, 2452, 1, 0, 0, 0, 2454, 2455, 1, 0, 0, 0, 2455, 2453, 1, 0, 0, 0, 2455, 2456, 1, 0, 0, 0, 2456, 2457, 1, 0, 0, 0, 2457, 2458, 6, 267, 0, 0, 2458, 536, 1, 0, 0, 0, 2459, 2460, 9, 0, 0, 0, 2460, 538, 1, 0, 0, 0, 33, 0, 2185, 2214, 2216, 2228, 2230, 2241, 2249, 2254, 2260, 2267, 2269, 2274, 2280, 2283, 2291, 2295, 2299, 2304, 2306, 2313, 2315, 2321, 2323, 2332, 2334, 2410, 2415, 2427, 2431, 2434, 2444, 2455, 1, 0, 1, 0] \ No newline at end of file diff --git a/presto-ui/src/sql-parser/SqlBaseLexer.js b/presto-ui/src/sql-parser/SqlBaseLexer.js index 7fa3bd7ab02e2..ac410010e2b5c 100644 --- a/presto-ui/src/sql-parser/SqlBaseLexer.js +++ b/presto-ui/src/sql-parser/SqlBaseLexer.js @@ -1,9 +1,9 @@ -// Generated from presto/presto-parser/src/main/antlr4/com/facebook/presto/sql/parser/SqlBase.g4 by ANTLR 4.13.1 +// Generated from presto/presto-parser/src/main/antlr4/com/facebook/presto/sql/parser/SqlBase.g4 by ANTLR 4.13.2 // jshint ignore: start import antlr4 from 'antlr4'; -const serializedATN = [4,0,249,2305,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3, +const serializedATN = [4,0,266,2461,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,25,2,26,7,26, @@ -42,734 +42,787 @@ const serializedATN = [4,0,249,2305,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3, 231,2,232,7,232,2,233,7,233,2,234,7,234,2,235,7,235,2,236,7,236,2,237,7, 237,2,238,7,238,2,239,7,239,2,240,7,240,2,241,7,241,2,242,7,242,2,243,7, 243,2,244,7,244,2,245,7,245,2,246,7,246,2,247,7,247,2,248,7,248,2,249,7, -249,2,250,7,250,2,251,7,251,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,4,1,4,1,5, -1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10, -1,10,1,10,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,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,16, -1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,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,20,1,20,1,21,1,21,1,21,1,21, -1,21,1,21,1,21,1,21,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,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26, -1,26,1,26,1,26,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,29,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,30,1,30,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,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,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,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,39,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,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,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,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1, -43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45, -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,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,50,1,50,1,50,1,50,1,50,1,51,1,51,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,52,1,52,1,52,1,52,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,54,1,55,1,55,1,55,1,55,1,55,1,56,1,56,1,56, -1,56,1,56,1,57,1,57,1,57,1,57,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,60,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,61,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,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,66,1,66,1, -66,1,66,1,66,1,66,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,70,1,70,1,70,1,70,1,70,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,73,1,73,1,73,1,73,1,73,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,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,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,80,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,82,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,84,1,84,1,84,1,84,1,84,1,84, -1,84,1,85,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1, -87,1,87,1,88,1,88,1,88,1,89,1,89,1,89,1,89,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,92,1,92,1,92,1,93,1,93,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,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,96,1,96,1,96,1,97,1,97,1,97,1,98,1,98,1,98,1,99, -1,99,1,99,1,99,1,99,1,99,1,99,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,102,1,102,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,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,106,1,106,1,106,1,106, -1,106,1,106,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,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,110, -1,110,1,110,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,113,1,113,1,113,1,113,1,113,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,114,1,114,1,114,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,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,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,121,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,124,1,124,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,127,1,128,1,128,1,128, -1,128,1,128,1,128,1,129,1,129,1,129,1,130,1,130,1,130,1,130,1,130,1,130, -1,130,1,131,1,131,1,131,1,132,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,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,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,138, -1,138,1,139,1,139,1,139,1,139,1,139,1,140,1,140,1,140,1,140,1,140,1,140, -1,140,1,140,1,140,1,140,1,141,1,141,1,141,1,141,1,141,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,142,1,142, -1,143,1,143,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,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,146,1,146,1,146,1,146, -1,146,1,146,1,146,1,146,1,147,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,149,1,149, -1,149,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,151,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,152,1,152, -1,152,1,152,1,152,1,153,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,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,156,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,160,1,160,1,160,1,160, -1,160,1,160,1,161,1,161,1,161,1,161,1,161,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,165,1,165,1,165,1,165,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,168,1,168,1,168,1,169,1,169,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,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,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,175,1,175,1,175,1,175,1,175,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,179,1,179,1,179,1,179,1,179,1,179,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,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,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,184,1,184,1,185,1,185,1,185,1,185, -1,185,1,185,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,187,1,187,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,188,1,189,1,189,1,189,1,189,1,189, -1,190,1,190,1,190,1,190,1,190,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,192,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,194,1,194,1,195, -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,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,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,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,201,1,201,1,202,1,202,1,202, -1,202,1,202,1,202,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,204,1,204,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,207,1,208,1,208,1,208,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,211,1,212,1,212,1,212,1,212,1,212,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,217,1,217,1,217,1,217,1,217,1,217, -1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219,1,219,1,219,1,220,1,220, -1,221,1,221,1,221,1,221,3,221,2030,8,221,1,222,1,222,1,223,1,223,1,223,1, -224,1,224,1,225,1,225,1,225,1,226,1,226,1,227,1,227,1,228,1,228,1,229,1, -229,1,230,1,230,1,231,1,231,1,231,1,232,1,232,1,232,1,232,5,232,2059,8,232, -10,232,12,232,2062,9,232,1,232,1,232,1,233,1,233,1,233,1,233,1,233,1,233, -1,233,5,233,2073,8,233,10,233,12,233,2076,9,233,1,233,1,233,1,234,1,234, -1,234,1,234,5,234,2084,8,234,10,234,12,234,2087,9,234,1,234,1,234,1,235, -4,235,2092,8,235,11,235,12,235,2093,1,236,4,236,2097,8,236,11,236,12,236, -2098,1,236,1,236,5,236,2103,8,236,10,236,12,236,2106,9,236,1,236,1,236,4, -236,2110,8,236,11,236,12,236,2111,3,236,2114,8,236,1,237,4,237,2117,8,237, -11,237,12,237,2118,1,237,1,237,5,237,2123,8,237,10,237,12,237,2126,9,237, -3,237,2128,8,237,1,237,1,237,1,237,1,237,4,237,2134,8,237,11,237,12,237, -2135,1,237,1,237,3,237,2140,8,237,1,238,1,238,3,238,2144,8,238,1,238,1,238, -1,238,5,238,2149,8,238,10,238,12,238,2152,9,238,1,239,1,239,1,239,1,239, -4,239,2158,8,239,11,239,12,239,2159,1,240,1,240,1,240,1,240,5,240,2166,8, -240,10,240,12,240,2169,9,240,1,240,1,240,1,241,1,241,1,241,1,241,5,241,2177, -8,241,10,241,12,241,2180,9,241,1,241,1,241,1,242,1,242,1,242,1,242,1,242, -1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,242, -1,242,1,242,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,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243, -1,243,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,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244, -1,244,1,244,1,244,1,244,1,245,1,245,3,245,2255,8,245,1,245,4,245,2258,8, -245,11,245,12,245,2259,1,246,1,246,1,247,1,247,1,248,1,248,1,248,1,248,5, -248,2270,8,248,10,248,12,248,2273,9,248,1,248,3,248,2276,8,248,1,248,3,248, -2279,8,248,1,248,1,248,1,249,1,249,1,249,1,249,5,249,2287,8,249,10,249,12, -249,2290,9,249,1,249,1,249,1,249,1,249,1,249,1,250,4,250,2298,8,250,11,250, -12,250,2299,1,250,1,250,1,251,1,251,1,2288,0,252,1,1,3,2,5,3,7,4,9,5,11, -6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37, -19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61, -31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85, -43,87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51,103,52,105,53,107,54, -109,55,111,56,113,57,115,58,117,59,119,60,121,61,123,62,125,63,127,64,129, -65,131,66,133,67,135,68,137,69,139,70,141,71,143,72,145,73,147,74,149,75, -151,76,153,77,155,78,157,79,159,80,161,81,163,82,165,83,167,84,169,85,171, -86,173,87,175,88,177,89,179,90,181,91,183,92,185,93,187,94,189,95,191,96, -193,97,195,98,197,99,199,100,201,101,203,102,205,103,207,104,209,105,211, -106,213,107,215,108,217,109,219,110,221,111,223,112,225,113,227,114,229, -115,231,116,233,117,235,118,237,119,239,120,241,121,243,122,245,123,247, -124,249,125,251,126,253,127,255,128,257,129,259,130,261,131,263,132,265, -133,267,134,269,135,271,136,273,137,275,138,277,139,279,140,281,141,283, -142,285,143,287,144,289,145,291,146,293,147,295,148,297,149,299,150,301, -151,303,152,305,153,307,154,309,155,311,156,313,157,315,158,317,159,319, -160,321,161,323,162,325,163,327,164,329,165,331,166,333,167,335,168,337, -169,339,170,341,171,343,172,345,173,347,174,349,175,351,176,353,177,355, -178,357,179,359,180,361,181,363,182,365,183,367,184,369,185,371,186,373, -187,375,188,377,189,379,190,381,191,383,192,385,193,387,194,389,195,391, -196,393,197,395,198,397,199,399,200,401,201,403,202,405,203,407,204,409, -205,411,206,413,207,415,208,417,209,419,210,421,211,423,212,425,213,427, -214,429,215,431,216,433,217,435,218,437,219,439,220,441,221,443,222,445, -223,447,224,449,225,451,226,453,227,455,228,457,229,459,230,461,231,463, -232,465,233,467,234,469,235,471,236,473,237,475,238,477,239,479,240,481, -241,483,242,485,243,487,244,489,245,491,0,493,0,495,0,497,246,499,247,501, -248,503,249,1,0,9,1,0,39,39,3,0,58,58,64,64,95,95,1,0,34,34,1,0,96,96,2, -0,43,43,45,45,1,0,48,57,1,0,65,90,2,0,10,10,13,13,3,0,9,10,13,13,32,32,2335, -0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0, -0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1, -0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0, -35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0, -0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57, -1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0, -0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1, -0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0, -91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0, -0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0, -0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0, -0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0, -133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143, -1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1, -0,0,0,0,155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0, -0,0,0,165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0, -0,0,175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0, -0,185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0, -195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205, -1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1, -0,0,0,0,217,1,0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0, -0,0,0,227,1,0,0,0,0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0, -0,0,237,1,0,0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0, -0,247,1,0,0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0, -257,1,0,0,0,0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267, -1,0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0,277,1, -0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0,0,0,0,287,1,0, -0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295,1,0,0,0,0,297,1,0,0, -0,0,299,1,0,0,0,0,301,1,0,0,0,0,303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0, -0,309,1,0,0,0,0,311,1,0,0,0,0,313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0, -319,1,0,0,0,0,321,1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329, -1,0,0,0,0,331,1,0,0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1, -0,0,0,0,341,1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0, -0,0,0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1,0,0, -0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0,0,367,1,0,0,0,0,369,1,0,0,0, -0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,377,1,0,0,0,0,379,1,0,0,0,0, -381,1,0,0,0,0,383,1,0,0,0,0,385,1,0,0,0,0,387,1,0,0,0,0,389,1,0,0,0,0,391, -1,0,0,0,0,393,1,0,0,0,0,395,1,0,0,0,0,397,1,0,0,0,0,399,1,0,0,0,0,401,1, -0,0,0,0,403,1,0,0,0,0,405,1,0,0,0,0,407,1,0,0,0,0,409,1,0,0,0,0,411,1,0, -0,0,0,413,1,0,0,0,0,415,1,0,0,0,0,417,1,0,0,0,0,419,1,0,0,0,0,421,1,0,0, -0,0,423,1,0,0,0,0,425,1,0,0,0,0,427,1,0,0,0,0,429,1,0,0,0,0,431,1,0,0,0, -0,433,1,0,0,0,0,435,1,0,0,0,0,437,1,0,0,0,0,439,1,0,0,0,0,441,1,0,0,0,0, -443,1,0,0,0,0,445,1,0,0,0,0,447,1,0,0,0,0,449,1,0,0,0,0,451,1,0,0,0,0,453, -1,0,0,0,0,455,1,0,0,0,0,457,1,0,0,0,0,459,1,0,0,0,0,461,1,0,0,0,0,463,1, -0,0,0,0,465,1,0,0,0,0,467,1,0,0,0,0,469,1,0,0,0,0,471,1,0,0,0,0,473,1,0, -0,0,0,475,1,0,0,0,0,477,1,0,0,0,0,479,1,0,0,0,0,481,1,0,0,0,0,483,1,0,0, -0,0,485,1,0,0,0,0,487,1,0,0,0,0,489,1,0,0,0,0,497,1,0,0,0,0,499,1,0,0,0, -0,501,1,0,0,0,0,503,1,0,0,0,1,505,1,0,0,0,3,507,1,0,0,0,5,509,1,0,0,0,7, -511,1,0,0,0,9,513,1,0,0,0,11,515,1,0,0,0,13,518,1,0,0,0,15,520,1,0,0,0,17, -522,1,0,0,0,19,525,1,0,0,0,21,529,1,0,0,0,23,535,1,0,0,0,25,539,1,0,0,0, -27,545,1,0,0,0,29,553,1,0,0,0,31,557,1,0,0,0,33,561,1,0,0,0,35,567,1,0,0, -0,37,570,1,0,0,0,39,574,1,0,0,0,41,577,1,0,0,0,43,587,1,0,0,0,45,595,1,0, -0,0,47,598,1,0,0,0,49,603,1,0,0,0,51,610,1,0,0,0,53,618,1,0,0,0,55,623,1, -0,0,0,57,628,1,0,0,0,59,637,1,0,0,0,61,644,1,0,0,0,63,652,1,0,0,0,65,660, -1,0,0,0,67,667,1,0,0,0,69,677,1,0,0,0,71,688,1,0,0,0,73,695,1,0,0,0,75,701, -1,0,0,0,77,706,1,0,0,0,79,714,1,0,0,0,81,727,1,0,0,0,83,740,1,0,0,0,85,753, -1,0,0,0,87,771,1,0,0,0,89,784,1,0,0,0,91,789,1,0,0,0,93,794,1,0,0,0,95,798, -1,0,0,0,97,809,1,0,0,0,99,817,1,0,0,0,101,824,1,0,0,0,103,829,1,0,0,0,105, -838,1,0,0,0,107,852,1,0,0,0,109,861,1,0,0,0,111,873,1,0,0,0,113,878,1,0, -0,0,115,883,1,0,0,0,117,887,1,0,0,0,119,894,1,0,0,0,121,901,1,0,0,0,123, -911,1,0,0,0,125,919,1,0,0,0,127,926,1,0,0,0,129,934,1,0,0,0,131,942,1,0, -0,0,133,951,1,0,0,0,135,957,1,0,0,0,137,963,1,0,0,0,139,970,1,0,0,0,141, -976,1,0,0,0,143,986,1,0,0,0,145,990,1,0,0,0,147,997,1,0,0,0,149,1002,1,0, -0,0,151,1007,1,0,0,0,153,1016,1,0,0,0,155,1026,1,0,0,0,157,1032,1,0,0,0, -159,1040,1,0,0,0,161,1047,1,0,0,0,163,1056,1,0,0,0,165,1062,1,0,0,0,167, -1071,1,0,0,0,169,1078,1,0,0,0,171,1085,1,0,0,0,173,1090,1,0,0,0,175,1093, -1,0,0,0,177,1100,1,0,0,0,179,1103,1,0,0,0,181,1113,1,0,0,0,183,1119,1,0, -0,0,185,1125,1,0,0,0,187,1132,1,0,0,0,189,1142,1,0,0,0,191,1151,1,0,0,0, -193,1156,1,0,0,0,195,1164,1,0,0,0,197,1167,1,0,0,0,199,1170,1,0,0,0,201, -1180,1,0,0,0,203,1185,1,0,0,0,205,1190,1,0,0,0,207,1199,1,0,0,0,209,1204, -1,0,0,0,211,1212,1,0,0,0,213,1217,1,0,0,0,215,1223,1,0,0,0,217,1228,1,0, -0,0,219,1234,1,0,0,0,221,1244,1,0,0,0,223,1259,1,0,0,0,225,1267,1,0,0,0, -227,1271,1,0,0,0,229,1284,1,0,0,0,231,1291,1,0,0,0,233,1297,1,0,0,0,235, -1302,1,0,0,0,237,1310,1,0,0,0,239,1314,1,0,0,0,241,1318,1,0,0,0,243,1323, -1,0,0,0,245,1328,1,0,0,0,247,1331,1,0,0,0,249,1336,1,0,0,0,251,1346,1,0, -0,0,253,1350,1,0,0,0,255,1355,1,0,0,0,257,1362,1,0,0,0,259,1368,1,0,0,0, -261,1371,1,0,0,0,263,1378,1,0,0,0,265,1381,1,0,0,0,267,1386,1,0,0,0,269, -1393,1,0,0,0,271,1396,1,0,0,0,273,1402,1,0,0,0,275,1413,1,0,0,0,277,1419, -1,0,0,0,279,1426,1,0,0,0,281,1431,1,0,0,0,283,1441,1,0,0,0,285,1452,1,0, -0,0,287,1461,1,0,0,0,289,1471,1,0,0,0,291,1479,1,0,0,0,293,1490,1,0,0,0, -295,1501,1,0,0,0,297,1507,1,0,0,0,299,1512,1,0,0,0,301,1522,1,0,0,0,303, -1530,1,0,0,0,305,1537,1,0,0,0,307,1548,1,0,0,0,309,1556,1,0,0,0,311,1562, -1,0,0,0,313,1570,1,0,0,0,315,1579,1,0,0,0,317,1586,1,0,0,0,319,1594,1,0, -0,0,321,1601,1,0,0,0,323,1607,1,0,0,0,325,1612,1,0,0,0,327,1618,1,0,0,0, -329,1627,1,0,0,0,331,1634,1,0,0,0,333,1638,1,0,0,0,335,1643,1,0,0,0,337, -1650,1,0,0,0,339,1658,1,0,0,0,341,1665,1,0,0,0,343,1674,1,0,0,0,345,1681, -1,0,0,0,347,1694,1,0,0,0,349,1702,1,0,0,0,351,1706,1,0,0,0,353,1711,1,0, -0,0,355,1716,1,0,0,0,357,1721,1,0,0,0,359,1725,1,0,0,0,361,1731,1,0,0,0, -363,1737,1,0,0,0,365,1747,1,0,0,0,367,1754,1,0,0,0,369,1766,1,0,0,0,371, -1781,1,0,0,0,373,1787,1,0,0,0,375,1794,1,0,0,0,377,1806,1,0,0,0,379,1816, -1,0,0,0,381,1821,1,0,0,0,383,1826,1,0,0,0,385,1831,1,0,0,0,387,1841,1,0, -0,0,389,1844,1,0,0,0,391,1856,1,0,0,0,393,1861,1,0,0,0,395,1870,1,0,0,0, -397,1879,1,0,0,0,399,1884,1,0,0,0,401,1892,1,0,0,0,403,1902,1,0,0,0,405, -1914,1,0,0,0,407,1920,1,0,0,0,409,1927,1,0,0,0,411,1934,1,0,0,0,413,1938, -1,0,0,0,415,1943,1,0,0,0,417,1949,1,0,0,0,419,1958,1,0,0,0,421,1965,1,0, -0,0,423,1973,1,0,0,0,425,1981,1,0,0,0,427,1986,1,0,0,0,429,1991,1,0,0,0, -431,1997,1,0,0,0,433,2002,1,0,0,0,435,2007,1,0,0,0,437,2013,1,0,0,0,439, -2018,1,0,0,0,441,2023,1,0,0,0,443,2029,1,0,0,0,445,2031,1,0,0,0,447,2033, -1,0,0,0,449,2036,1,0,0,0,451,2038,1,0,0,0,453,2041,1,0,0,0,455,2043,1,0, -0,0,457,2045,1,0,0,0,459,2047,1,0,0,0,461,2049,1,0,0,0,463,2051,1,0,0,0, -465,2054,1,0,0,0,467,2065,1,0,0,0,469,2079,1,0,0,0,471,2091,1,0,0,0,473, -2113,1,0,0,0,475,2139,1,0,0,0,477,2143,1,0,0,0,479,2153,1,0,0,0,481,2161, -1,0,0,0,483,2172,1,0,0,0,485,2183,1,0,0,0,487,2206,1,0,0,0,489,2234,1,0, -0,0,491,2252,1,0,0,0,493,2261,1,0,0,0,495,2263,1,0,0,0,497,2265,1,0,0,0, -499,2282,1,0,0,0,501,2297,1,0,0,0,503,2303,1,0,0,0,505,506,5,46,0,0,506, -2,1,0,0,0,507,508,5,40,0,0,508,4,1,0,0,0,509,510,5,41,0,0,510,6,1,0,0,0, -511,512,5,44,0,0,512,8,1,0,0,0,513,514,5,63,0,0,514,10,1,0,0,0,515,516,5, -45,0,0,516,517,5,62,0,0,517,12,1,0,0,0,518,519,5,91,0,0,519,14,1,0,0,0,520, -521,5,93,0,0,521,16,1,0,0,0,522,523,5,61,0,0,523,524,5,62,0,0,524,18,1,0, -0,0,525,526,5,65,0,0,526,527,5,68,0,0,527,528,5,68,0,0,528,20,1,0,0,0,529, -530,5,65,0,0,530,531,5,68,0,0,531,532,5,77,0,0,532,533,5,73,0,0,533,534, -5,78,0,0,534,22,1,0,0,0,535,536,5,65,0,0,536,537,5,76,0,0,537,538,5,76,0, -0,538,24,1,0,0,0,539,540,5,65,0,0,540,541,5,76,0,0,541,542,5,84,0,0,542, -543,5,69,0,0,543,544,5,82,0,0,544,26,1,0,0,0,545,546,5,65,0,0,546,547,5, -78,0,0,547,548,5,65,0,0,548,549,5,76,0,0,549,550,5,89,0,0,550,551,5,90,0, -0,551,552,5,69,0,0,552,28,1,0,0,0,553,554,5,65,0,0,554,555,5,78,0,0,555, -556,5,68,0,0,556,30,1,0,0,0,557,558,5,65,0,0,558,559,5,78,0,0,559,560,5, -89,0,0,560,32,1,0,0,0,561,562,5,65,0,0,562,563,5,82,0,0,563,564,5,82,0,0, -564,565,5,65,0,0,565,566,5,89,0,0,566,34,1,0,0,0,567,568,5,65,0,0,568,569, -5,83,0,0,569,36,1,0,0,0,570,571,5,65,0,0,571,572,5,83,0,0,572,573,5,67,0, -0,573,38,1,0,0,0,574,575,5,65,0,0,575,576,5,84,0,0,576,40,1,0,0,0,577,578, -5,66,0,0,578,579,5,69,0,0,579,580,5,82,0,0,580,581,5,78,0,0,581,582,5,79, -0,0,582,583,5,85,0,0,583,584,5,76,0,0,584,585,5,76,0,0,585,586,5,73,0,0, -586,42,1,0,0,0,587,588,5,66,0,0,588,589,5,69,0,0,589,590,5,84,0,0,590,591, -5,87,0,0,591,592,5,69,0,0,592,593,5,69,0,0,593,594,5,78,0,0,594,44,1,0,0, -0,595,596,5,66,0,0,596,597,5,89,0,0,597,46,1,0,0,0,598,599,5,67,0,0,599, -600,5,65,0,0,600,601,5,76,0,0,601,602,5,76,0,0,602,48,1,0,0,0,603,604,5, -67,0,0,604,605,5,65,0,0,605,606,5,76,0,0,606,607,5,76,0,0,607,608,5,69,0, -0,608,609,5,68,0,0,609,50,1,0,0,0,610,611,5,67,0,0,611,612,5,65,0,0,612, -613,5,83,0,0,613,614,5,67,0,0,614,615,5,65,0,0,615,616,5,68,0,0,616,617, -5,69,0,0,617,52,1,0,0,0,618,619,5,67,0,0,619,620,5,65,0,0,620,621,5,83,0, -0,621,622,5,69,0,0,622,54,1,0,0,0,623,624,5,67,0,0,624,625,5,65,0,0,625, -626,5,83,0,0,626,627,5,84,0,0,627,56,1,0,0,0,628,629,5,67,0,0,629,630,5, -65,0,0,630,631,5,84,0,0,631,632,5,65,0,0,632,633,5,76,0,0,633,634,5,79,0, -0,634,635,5,71,0,0,635,636,5,83,0,0,636,58,1,0,0,0,637,638,5,67,0,0,638, -639,5,79,0,0,639,640,5,76,0,0,640,641,5,85,0,0,641,642,5,77,0,0,642,643, -5,78,0,0,643,60,1,0,0,0,644,645,5,67,0,0,645,646,5,79,0,0,646,647,5,76,0, -0,647,648,5,85,0,0,648,649,5,77,0,0,649,650,5,78,0,0,650,651,5,83,0,0,651, -62,1,0,0,0,652,653,5,67,0,0,653,654,5,79,0,0,654,655,5,77,0,0,655,656,5, -77,0,0,656,657,5,69,0,0,657,658,5,78,0,0,658,659,5,84,0,0,659,64,1,0,0,0, -660,661,5,67,0,0,661,662,5,79,0,0,662,663,5,77,0,0,663,664,5,77,0,0,664, -665,5,73,0,0,665,666,5,84,0,0,666,66,1,0,0,0,667,668,5,67,0,0,668,669,5, -79,0,0,669,670,5,77,0,0,670,671,5,77,0,0,671,672,5,73,0,0,672,673,5,84,0, -0,673,674,5,84,0,0,674,675,5,69,0,0,675,676,5,68,0,0,676,68,1,0,0,0,677, -678,5,67,0,0,678,679,5,79,0,0,679,680,5,78,0,0,680,681,5,83,0,0,681,682, -5,84,0,0,682,683,5,82,0,0,683,684,5,65,0,0,684,685,5,73,0,0,685,686,5,78, -0,0,686,687,5,84,0,0,687,70,1,0,0,0,688,689,5,67,0,0,689,690,5,82,0,0,690, -691,5,69,0,0,691,692,5,65,0,0,692,693,5,84,0,0,693,694,5,69,0,0,694,72,1, -0,0,0,695,696,5,67,0,0,696,697,5,82,0,0,697,698,5,79,0,0,698,699,5,83,0, -0,699,700,5,83,0,0,700,74,1,0,0,0,701,702,5,67,0,0,702,703,5,85,0,0,703, -704,5,66,0,0,704,705,5,69,0,0,705,76,1,0,0,0,706,707,5,67,0,0,707,708,5, -85,0,0,708,709,5,82,0,0,709,710,5,82,0,0,710,711,5,69,0,0,711,712,5,78,0, -0,712,713,5,84,0,0,713,78,1,0,0,0,714,715,5,67,0,0,715,716,5,85,0,0,716, -717,5,82,0,0,717,718,5,82,0,0,718,719,5,69,0,0,719,720,5,78,0,0,720,721, -5,84,0,0,721,722,5,95,0,0,722,723,5,68,0,0,723,724,5,65,0,0,724,725,5,84, -0,0,725,726,5,69,0,0,726,80,1,0,0,0,727,728,5,67,0,0,728,729,5,85,0,0,729, -730,5,82,0,0,730,731,5,82,0,0,731,732,5,69,0,0,732,733,5,78,0,0,733,734, -5,84,0,0,734,735,5,95,0,0,735,736,5,82,0,0,736,737,5,79,0,0,737,738,5,76, -0,0,738,739,5,69,0,0,739,82,1,0,0,0,740,741,5,67,0,0,741,742,5,85,0,0,742, -743,5,82,0,0,743,744,5,82,0,0,744,745,5,69,0,0,745,746,5,78,0,0,746,747, -5,84,0,0,747,748,5,95,0,0,748,749,5,84,0,0,749,750,5,73,0,0,750,751,5,77, -0,0,751,752,5,69,0,0,752,84,1,0,0,0,753,754,5,67,0,0,754,755,5,85,0,0,755, -756,5,82,0,0,756,757,5,82,0,0,757,758,5,69,0,0,758,759,5,78,0,0,759,760, -5,84,0,0,760,761,5,95,0,0,761,762,5,84,0,0,762,763,5,73,0,0,763,764,5,77, -0,0,764,765,5,69,0,0,765,766,5,83,0,0,766,767,5,84,0,0,767,768,5,65,0,0, -768,769,5,77,0,0,769,770,5,80,0,0,770,86,1,0,0,0,771,772,5,67,0,0,772,773, -5,85,0,0,773,774,5,82,0,0,774,775,5,82,0,0,775,776,5,69,0,0,776,777,5,78, -0,0,777,778,5,84,0,0,778,779,5,95,0,0,779,780,5,85,0,0,780,781,5,83,0,0, -781,782,5,69,0,0,782,783,5,82,0,0,783,88,1,0,0,0,784,785,5,68,0,0,785,786, -5,65,0,0,786,787,5,84,0,0,787,788,5,65,0,0,788,90,1,0,0,0,789,790,5,68,0, -0,790,791,5,65,0,0,791,792,5,84,0,0,792,793,5,69,0,0,793,92,1,0,0,0,794, -795,5,68,0,0,795,796,5,65,0,0,796,797,5,89,0,0,797,94,1,0,0,0,798,799,5, -68,0,0,799,800,5,69,0,0,800,801,5,65,0,0,801,802,5,76,0,0,802,803,5,76,0, -0,803,804,5,79,0,0,804,805,5,67,0,0,805,806,5,65,0,0,806,807,5,84,0,0,807, -808,5,69,0,0,808,96,1,0,0,0,809,810,5,68,0,0,810,811,5,69,0,0,811,812,5, -70,0,0,812,813,5,73,0,0,813,814,5,78,0,0,814,815,5,69,0,0,815,816,5,82,0, -0,816,98,1,0,0,0,817,818,5,68,0,0,818,819,5,69,0,0,819,820,5,76,0,0,820, -821,5,69,0,0,821,822,5,84,0,0,822,823,5,69,0,0,823,100,1,0,0,0,824,825,5, -68,0,0,825,826,5,69,0,0,826,827,5,83,0,0,827,828,5,67,0,0,828,102,1,0,0, -0,829,830,5,68,0,0,830,831,5,69,0,0,831,832,5,83,0,0,832,833,5,67,0,0,833, -834,5,82,0,0,834,835,5,73,0,0,835,836,5,66,0,0,836,837,5,69,0,0,837,104, -1,0,0,0,838,839,5,68,0,0,839,840,5,69,0,0,840,841,5,84,0,0,841,842,5,69, -0,0,842,843,5,82,0,0,843,844,5,77,0,0,844,845,5,73,0,0,845,846,5,78,0,0, -846,847,5,73,0,0,847,848,5,83,0,0,848,849,5,84,0,0,849,850,5,73,0,0,850, -851,5,67,0,0,851,106,1,0,0,0,852,853,5,68,0,0,853,854,5,73,0,0,854,855,5, -83,0,0,855,856,5,84,0,0,856,857,5,73,0,0,857,858,5,78,0,0,858,859,5,67,0, -0,859,860,5,84,0,0,860,108,1,0,0,0,861,862,5,68,0,0,862,863,5,73,0,0,863, -864,5,83,0,0,864,865,5,84,0,0,865,866,5,82,0,0,866,867,5,73,0,0,867,868, -5,66,0,0,868,869,5,85,0,0,869,870,5,84,0,0,870,871,5,69,0,0,871,872,5,68, -0,0,872,110,1,0,0,0,873,874,5,68,0,0,874,875,5,82,0,0,875,876,5,79,0,0,876, -877,5,80,0,0,877,112,1,0,0,0,878,879,5,69,0,0,879,880,5,76,0,0,880,881,5, -83,0,0,881,882,5,69,0,0,882,114,1,0,0,0,883,884,5,69,0,0,884,885,5,78,0, -0,885,886,5,68,0,0,886,116,1,0,0,0,887,888,5,69,0,0,888,889,5,83,0,0,889, -890,5,67,0,0,890,891,5,65,0,0,891,892,5,80,0,0,892,893,5,69,0,0,893,118, -1,0,0,0,894,895,5,69,0,0,895,896,5,88,0,0,896,897,5,67,0,0,897,898,5,69, -0,0,898,899,5,80,0,0,899,900,5,84,0,0,900,120,1,0,0,0,901,902,5,69,0,0,902, -903,5,88,0,0,903,904,5,67,0,0,904,905,5,76,0,0,905,906,5,85,0,0,906,907, -5,68,0,0,907,908,5,73,0,0,908,909,5,78,0,0,909,910,5,71,0,0,910,122,1,0, -0,0,911,912,5,69,0,0,912,913,5,88,0,0,913,914,5,69,0,0,914,915,5,67,0,0, -915,916,5,85,0,0,916,917,5,84,0,0,917,918,5,69,0,0,918,124,1,0,0,0,919,920, -5,69,0,0,920,921,5,88,0,0,921,922,5,73,0,0,922,923,5,83,0,0,923,924,5,84, -0,0,924,925,5,83,0,0,925,126,1,0,0,0,926,927,5,69,0,0,927,928,5,88,0,0,928, -929,5,80,0,0,929,930,5,76,0,0,930,931,5,65,0,0,931,932,5,73,0,0,932,933, -5,78,0,0,933,128,1,0,0,0,934,935,5,69,0,0,935,936,5,88,0,0,936,937,5,84, -0,0,937,938,5,82,0,0,938,939,5,65,0,0,939,940,5,67,0,0,940,941,5,84,0,0, -941,130,1,0,0,0,942,943,5,69,0,0,943,944,5,88,0,0,944,945,5,84,0,0,945,946, -5,69,0,0,946,947,5,82,0,0,947,948,5,78,0,0,948,949,5,65,0,0,949,950,5,76, -0,0,950,132,1,0,0,0,951,952,5,70,0,0,952,953,5,65,0,0,953,954,5,76,0,0,954, -955,5,83,0,0,955,956,5,69,0,0,956,134,1,0,0,0,957,958,5,70,0,0,958,959,5, -69,0,0,959,960,5,84,0,0,960,961,5,67,0,0,961,962,5,72,0,0,962,136,1,0,0, -0,963,964,5,70,0,0,964,965,5,73,0,0,965,966,5,76,0,0,966,967,5,84,0,0,967, -968,5,69,0,0,968,969,5,82,0,0,969,138,1,0,0,0,970,971,5,70,0,0,971,972,5, -73,0,0,972,973,5,82,0,0,973,974,5,83,0,0,974,975,5,84,0,0,975,140,1,0,0, -0,976,977,5,70,0,0,977,978,5,79,0,0,978,979,5,76,0,0,979,980,5,76,0,0,980, -981,5,79,0,0,981,982,5,87,0,0,982,983,5,73,0,0,983,984,5,78,0,0,984,985, -5,71,0,0,985,142,1,0,0,0,986,987,5,70,0,0,987,988,5,79,0,0,988,989,5,82, -0,0,989,144,1,0,0,0,990,991,5,70,0,0,991,992,5,79,0,0,992,993,5,82,0,0,993, -994,5,77,0,0,994,995,5,65,0,0,995,996,5,84,0,0,996,146,1,0,0,0,997,998,5, -70,0,0,998,999,5,82,0,0,999,1000,5,79,0,0,1000,1001,5,77,0,0,1001,148,1, -0,0,0,1002,1003,5,70,0,0,1003,1004,5,85,0,0,1004,1005,5,76,0,0,1005,1006, -5,76,0,0,1006,150,1,0,0,0,1007,1008,5,70,0,0,1008,1009,5,85,0,0,1009,1010, -5,78,0,0,1010,1011,5,67,0,0,1011,1012,5,84,0,0,1012,1013,5,73,0,0,1013,1014, -5,79,0,0,1014,1015,5,78,0,0,1015,152,1,0,0,0,1016,1017,5,70,0,0,1017,1018, -5,85,0,0,1018,1019,5,78,0,0,1019,1020,5,67,0,0,1020,1021,5,84,0,0,1021,1022, -5,73,0,0,1022,1023,5,79,0,0,1023,1024,5,78,0,0,1024,1025,5,83,0,0,1025,154, -1,0,0,0,1026,1027,5,71,0,0,1027,1028,5,82,0,0,1028,1029,5,65,0,0,1029,1030, -5,78,0,0,1030,1031,5,84,0,0,1031,156,1,0,0,0,1032,1033,5,71,0,0,1033,1034, -5,82,0,0,1034,1035,5,65,0,0,1035,1036,5,78,0,0,1036,1037,5,84,0,0,1037,1038, -5,69,0,0,1038,1039,5,68,0,0,1039,158,1,0,0,0,1040,1041,5,71,0,0,1041,1042, -5,82,0,0,1042,1043,5,65,0,0,1043,1044,5,78,0,0,1044,1045,5,84,0,0,1045,1046, -5,83,0,0,1046,160,1,0,0,0,1047,1048,5,71,0,0,1048,1049,5,82,0,0,1049,1050, -5,65,0,0,1050,1051,5,80,0,0,1051,1052,5,72,0,0,1052,1053,5,86,0,0,1053,1054, -5,73,0,0,1054,1055,5,90,0,0,1055,162,1,0,0,0,1056,1057,5,71,0,0,1057,1058, -5,82,0,0,1058,1059,5,79,0,0,1059,1060,5,85,0,0,1060,1061,5,80,0,0,1061,164, -1,0,0,0,1062,1063,5,71,0,0,1063,1064,5,82,0,0,1064,1065,5,79,0,0,1065,1066, -5,85,0,0,1066,1067,5,80,0,0,1067,1068,5,73,0,0,1068,1069,5,78,0,0,1069,1070, -5,71,0,0,1070,166,1,0,0,0,1071,1072,5,71,0,0,1072,1073,5,82,0,0,1073,1074, -5,79,0,0,1074,1075,5,85,0,0,1075,1076,5,80,0,0,1076,1077,5,83,0,0,1077,168, -1,0,0,0,1078,1079,5,72,0,0,1079,1080,5,65,0,0,1080,1081,5,86,0,0,1081,1082, -5,73,0,0,1082,1083,5,78,0,0,1083,1084,5,71,0,0,1084,170,1,0,0,0,1085,1086, -5,72,0,0,1086,1087,5,79,0,0,1087,1088,5,85,0,0,1088,1089,5,82,0,0,1089,172, -1,0,0,0,1090,1091,5,73,0,0,1091,1092,5,70,0,0,1092,174,1,0,0,0,1093,1094, -5,73,0,0,1094,1095,5,71,0,0,1095,1096,5,78,0,0,1096,1097,5,79,0,0,1097,1098, -5,82,0,0,1098,1099,5,69,0,0,1099,176,1,0,0,0,1100,1101,5,73,0,0,1101,1102, -5,78,0,0,1102,178,1,0,0,0,1103,1104,5,73,0,0,1104,1105,5,78,0,0,1105,1106, -5,67,0,0,1106,1107,5,76,0,0,1107,1108,5,85,0,0,1108,1109,5,68,0,0,1109,1110, -5,73,0,0,1110,1111,5,78,0,0,1111,1112,5,71,0,0,1112,180,1,0,0,0,1113,1114, -5,73,0,0,1114,1115,5,78,0,0,1115,1116,5,78,0,0,1116,1117,5,69,0,0,1117,1118, -5,82,0,0,1118,182,1,0,0,0,1119,1120,5,73,0,0,1120,1121,5,78,0,0,1121,1122, -5,80,0,0,1122,1123,5,85,0,0,1123,1124,5,84,0,0,1124,184,1,0,0,0,1125,1126, -5,73,0,0,1126,1127,5,78,0,0,1127,1128,5,83,0,0,1128,1129,5,69,0,0,1129,1130, -5,82,0,0,1130,1131,5,84,0,0,1131,186,1,0,0,0,1132,1133,5,73,0,0,1133,1134, -5,78,0,0,1134,1135,5,84,0,0,1135,1136,5,69,0,0,1136,1137,5,82,0,0,1137,1138, -5,83,0,0,1138,1139,5,69,0,0,1139,1140,5,67,0,0,1140,1141,5,84,0,0,1141,188, -1,0,0,0,1142,1143,5,73,0,0,1143,1144,5,78,0,0,1144,1145,5,84,0,0,1145,1146, -5,69,0,0,1146,1147,5,82,0,0,1147,1148,5,86,0,0,1148,1149,5,65,0,0,1149,1150, -5,76,0,0,1150,190,1,0,0,0,1151,1152,5,73,0,0,1152,1153,5,78,0,0,1153,1154, -5,84,0,0,1154,1155,5,79,0,0,1155,192,1,0,0,0,1156,1157,5,73,0,0,1157,1158, -5,78,0,0,1158,1159,5,86,0,0,1159,1160,5,79,0,0,1160,1161,5,75,0,0,1161,1162, -5,69,0,0,1162,1163,5,82,0,0,1163,194,1,0,0,0,1164,1165,5,73,0,0,1165,1166, -5,79,0,0,1166,196,1,0,0,0,1167,1168,5,73,0,0,1168,1169,5,83,0,0,1169,198, -1,0,0,0,1170,1171,5,73,0,0,1171,1172,5,83,0,0,1172,1173,5,79,0,0,1173,1174, -5,76,0,0,1174,1175,5,65,0,0,1175,1176,5,84,0,0,1176,1177,5,73,0,0,1177,1178, -5,79,0,0,1178,1179,5,78,0,0,1179,200,1,0,0,0,1180,1181,5,74,0,0,1181,1182, -5,83,0,0,1182,1183,5,79,0,0,1183,1184,5,78,0,0,1184,202,1,0,0,0,1185,1186, -5,74,0,0,1186,1187,5,79,0,0,1187,1188,5,73,0,0,1188,1189,5,78,0,0,1189,204, -1,0,0,0,1190,1191,5,76,0,0,1191,1192,5,65,0,0,1192,1193,5,78,0,0,1193,1194, -5,71,0,0,1194,1195,5,85,0,0,1195,1196,5,65,0,0,1196,1197,5,71,0,0,1197,1198, -5,69,0,0,1198,206,1,0,0,0,1199,1200,5,76,0,0,1200,1201,5,65,0,0,1201,1202, -5,83,0,0,1202,1203,5,84,0,0,1203,208,1,0,0,0,1204,1205,5,76,0,0,1205,1206, -5,65,0,0,1206,1207,5,84,0,0,1207,1208,5,69,0,0,1208,1209,5,82,0,0,1209,1210, -5,65,0,0,1210,1211,5,76,0,0,1211,210,1,0,0,0,1212,1213,5,76,0,0,1213,1214, -5,69,0,0,1214,1215,5,70,0,0,1215,1216,5,84,0,0,1216,212,1,0,0,0,1217,1218, -5,76,0,0,1218,1219,5,69,0,0,1219,1220,5,86,0,0,1220,1221,5,69,0,0,1221,1222, -5,76,0,0,1222,214,1,0,0,0,1223,1224,5,76,0,0,1224,1225,5,73,0,0,1225,1226, -5,75,0,0,1226,1227,5,69,0,0,1227,216,1,0,0,0,1228,1229,5,76,0,0,1229,1230, -5,73,0,0,1230,1231,5,77,0,0,1231,1232,5,73,0,0,1232,1233,5,84,0,0,1233,218, -1,0,0,0,1234,1235,5,76,0,0,1235,1236,5,79,0,0,1236,1237,5,67,0,0,1237,1238, -5,65,0,0,1238,1239,5,76,0,0,1239,1240,5,84,0,0,1240,1241,5,73,0,0,1241,1242, -5,77,0,0,1242,1243,5,69,0,0,1243,220,1,0,0,0,1244,1245,5,76,0,0,1245,1246, -5,79,0,0,1246,1247,5,67,0,0,1247,1248,5,65,0,0,1248,1249,5,76,0,0,1249,1250, -5,84,0,0,1250,1251,5,73,0,0,1251,1252,5,77,0,0,1252,1253,5,69,0,0,1253,1254, -5,83,0,0,1254,1255,5,84,0,0,1255,1256,5,65,0,0,1256,1257,5,77,0,0,1257,1258, -5,80,0,0,1258,222,1,0,0,0,1259,1260,5,76,0,0,1260,1261,5,79,0,0,1261,1262, -5,71,0,0,1262,1263,5,73,0,0,1263,1264,5,67,0,0,1264,1265,5,65,0,0,1265,1266, -5,76,0,0,1266,224,1,0,0,0,1267,1268,5,77,0,0,1268,1269,5,65,0,0,1269,1270, -5,80,0,0,1270,226,1,0,0,0,1271,1272,5,77,0,0,1272,1273,5,65,0,0,1273,1274, -5,84,0,0,1274,1275,5,69,0,0,1275,1276,5,82,0,0,1276,1277,5,73,0,0,1277,1278, -5,65,0,0,1278,1279,5,76,0,0,1279,1280,5,73,0,0,1280,1281,5,90,0,0,1281,1282, -5,69,0,0,1282,1283,5,68,0,0,1283,228,1,0,0,0,1284,1285,5,77,0,0,1285,1286, -5,73,0,0,1286,1287,5,78,0,0,1287,1288,5,85,0,0,1288,1289,5,84,0,0,1289,1290, -5,69,0,0,1290,230,1,0,0,0,1291,1292,5,77,0,0,1292,1293,5,79,0,0,1293,1294, -5,78,0,0,1294,1295,5,84,0,0,1295,1296,5,72,0,0,1296,232,1,0,0,0,1297,1298, -5,78,0,0,1298,1299,5,65,0,0,1299,1300,5,77,0,0,1300,1301,5,69,0,0,1301,234, -1,0,0,0,1302,1303,5,78,0,0,1303,1304,5,65,0,0,1304,1305,5,84,0,0,1305,1306, -5,85,0,0,1306,1307,5,82,0,0,1307,1308,5,65,0,0,1308,1309,5,76,0,0,1309,236, -1,0,0,0,1310,1311,5,78,0,0,1311,1312,5,70,0,0,1312,1313,5,67,0,0,1313,238, -1,0,0,0,1314,1315,5,78,0,0,1315,1316,5,70,0,0,1316,1317,5,68,0,0,1317,240, -1,0,0,0,1318,1319,5,78,0,0,1319,1320,5,70,0,0,1320,1321,5,75,0,0,1321,1322, -5,67,0,0,1322,242,1,0,0,0,1323,1324,5,78,0,0,1324,1325,5,70,0,0,1325,1326, -5,75,0,0,1326,1327,5,68,0,0,1327,244,1,0,0,0,1328,1329,5,78,0,0,1329,1330, -5,79,0,0,1330,246,1,0,0,0,1331,1332,5,78,0,0,1332,1333,5,79,0,0,1333,1334, -5,78,0,0,1334,1335,5,69,0,0,1335,248,1,0,0,0,1336,1337,5,78,0,0,1337,1338, -5,79,0,0,1338,1339,5,82,0,0,1339,1340,5,77,0,0,1340,1341,5,65,0,0,1341,1342, -5,76,0,0,1342,1343,5,73,0,0,1343,1344,5,90,0,0,1344,1345,5,69,0,0,1345,250, -1,0,0,0,1346,1347,5,78,0,0,1347,1348,5,79,0,0,1348,1349,5,84,0,0,1349,252, -1,0,0,0,1350,1351,5,78,0,0,1351,1352,5,85,0,0,1352,1353,5,76,0,0,1353,1354, -5,76,0,0,1354,254,1,0,0,0,1355,1356,5,78,0,0,1356,1357,5,85,0,0,1357,1358, -5,76,0,0,1358,1359,5,76,0,0,1359,1360,5,73,0,0,1360,1361,5,70,0,0,1361,256, -1,0,0,0,1362,1363,5,78,0,0,1363,1364,5,85,0,0,1364,1365,5,76,0,0,1365,1366, -5,76,0,0,1366,1367,5,83,0,0,1367,258,1,0,0,0,1368,1369,5,79,0,0,1369,1370, -5,70,0,0,1370,260,1,0,0,0,1371,1372,5,79,0,0,1372,1373,5,70,0,0,1373,1374, -5,70,0,0,1374,1375,5,83,0,0,1375,1376,5,69,0,0,1376,1377,5,84,0,0,1377,262, -1,0,0,0,1378,1379,5,79,0,0,1379,1380,5,78,0,0,1380,264,1,0,0,0,1381,1382, -5,79,0,0,1382,1383,5,78,0,0,1383,1384,5,76,0,0,1384,1385,5,89,0,0,1385,266, -1,0,0,0,1386,1387,5,79,0,0,1387,1388,5,80,0,0,1388,1389,5,84,0,0,1389,1390, -5,73,0,0,1390,1391,5,79,0,0,1391,1392,5,78,0,0,1392,268,1,0,0,0,1393,1394, -5,79,0,0,1394,1395,5,82,0,0,1395,270,1,0,0,0,1396,1397,5,79,0,0,1397,1398, -5,82,0,0,1398,1399,5,68,0,0,1399,1400,5,69,0,0,1400,1401,5,82,0,0,1401,272, -1,0,0,0,1402,1403,5,79,0,0,1403,1404,5,82,0,0,1404,1405,5,68,0,0,1405,1406, -5,73,0,0,1406,1407,5,78,0,0,1407,1408,5,65,0,0,1408,1409,5,76,0,0,1409,1410, -5,73,0,0,1410,1411,5,84,0,0,1411,1412,5,89,0,0,1412,274,1,0,0,0,1413,1414, -5,79,0,0,1414,1415,5,85,0,0,1415,1416,5,84,0,0,1416,1417,5,69,0,0,1417,1418, -5,82,0,0,1418,276,1,0,0,0,1419,1420,5,79,0,0,1420,1421,5,85,0,0,1421,1422, -5,84,0,0,1422,1423,5,80,0,0,1423,1424,5,85,0,0,1424,1425,5,84,0,0,1425,278, -1,0,0,0,1426,1427,5,79,0,0,1427,1428,5,86,0,0,1428,1429,5,69,0,0,1429,1430, -5,82,0,0,1430,280,1,0,0,0,1431,1432,5,80,0,0,1432,1433,5,65,0,0,1433,1434, -5,82,0,0,1434,1435,5,84,0,0,1435,1436,5,73,0,0,1436,1437,5,84,0,0,1437,1438, -5,73,0,0,1438,1439,5,79,0,0,1439,1440,5,78,0,0,1440,282,1,0,0,0,1441,1442, -5,80,0,0,1442,1443,5,65,0,0,1443,1444,5,82,0,0,1444,1445,5,84,0,0,1445,1446, -5,73,0,0,1446,1447,5,84,0,0,1447,1448,5,73,0,0,1448,1449,5,79,0,0,1449,1450, -5,78,0,0,1450,1451,5,83,0,0,1451,284,1,0,0,0,1452,1453,5,80,0,0,1453,1454, -5,79,0,0,1454,1455,5,83,0,0,1455,1456,5,73,0,0,1456,1457,5,84,0,0,1457,1458, -5,73,0,0,1458,1459,5,79,0,0,1459,1460,5,78,0,0,1460,286,1,0,0,0,1461,1462, -5,80,0,0,1462,1463,5,82,0,0,1463,1464,5,69,0,0,1464,1465,5,67,0,0,1465,1466, -5,69,0,0,1466,1467,5,68,0,0,1467,1468,5,73,0,0,1468,1469,5,78,0,0,1469,1470, -5,71,0,0,1470,288,1,0,0,0,1471,1472,5,80,0,0,1472,1473,5,82,0,0,1473,1474, -5,69,0,0,1474,1475,5,80,0,0,1475,1476,5,65,0,0,1476,1477,5,82,0,0,1477,1478, -5,69,0,0,1478,290,1,0,0,0,1479,1480,5,80,0,0,1480,1481,5,82,0,0,1481,1482, -5,73,0,0,1482,1483,5,86,0,0,1483,1484,5,73,0,0,1484,1485,5,76,0,0,1485,1486, -5,69,0,0,1486,1487,5,71,0,0,1487,1488,5,69,0,0,1488,1489,5,83,0,0,1489,292, -1,0,0,0,1490,1491,5,80,0,0,1491,1492,5,82,0,0,1492,1493,5,79,0,0,1493,1494, -5,80,0,0,1494,1495,5,69,0,0,1495,1496,5,82,0,0,1496,1497,5,84,0,0,1497,1498, -5,73,0,0,1498,1499,5,69,0,0,1499,1500,5,83,0,0,1500,294,1,0,0,0,1501,1502, -5,82,0,0,1502,1503,5,65,0,0,1503,1504,5,78,0,0,1504,1505,5,71,0,0,1505,1506, -5,69,0,0,1506,296,1,0,0,0,1507,1508,5,82,0,0,1508,1509,5,69,0,0,1509,1510, -5,65,0,0,1510,1511,5,68,0,0,1511,298,1,0,0,0,1512,1513,5,82,0,0,1513,1514, -5,69,0,0,1514,1515,5,67,0,0,1515,1516,5,85,0,0,1516,1517,5,82,0,0,1517,1518, -5,83,0,0,1518,1519,5,73,0,0,1519,1520,5,86,0,0,1520,1521,5,69,0,0,1521,300, -1,0,0,0,1522,1523,5,82,0,0,1523,1524,5,69,0,0,1524,1525,5,70,0,0,1525,1526, -5,82,0,0,1526,1527,5,69,0,0,1527,1528,5,83,0,0,1528,1529,5,72,0,0,1529,302, -1,0,0,0,1530,1531,5,82,0,0,1531,1532,5,69,0,0,1532,1533,5,78,0,0,1533,1534, -5,65,0,0,1534,1535,5,77,0,0,1535,1536,5,69,0,0,1536,304,1,0,0,0,1537,1538, -5,82,0,0,1538,1539,5,69,0,0,1539,1540,5,80,0,0,1540,1541,5,69,0,0,1541,1542, -5,65,0,0,1542,1543,5,84,0,0,1543,1544,5,65,0,0,1544,1545,5,66,0,0,1545,1546, -5,76,0,0,1546,1547,5,69,0,0,1547,306,1,0,0,0,1548,1549,5,82,0,0,1549,1550, -5,69,0,0,1550,1551,5,80,0,0,1551,1552,5,76,0,0,1552,1553,5,65,0,0,1553,1554, -5,67,0,0,1554,1555,5,69,0,0,1555,308,1,0,0,0,1556,1557,5,82,0,0,1557,1558, -5,69,0,0,1558,1559,5,83,0,0,1559,1560,5,69,0,0,1560,1561,5,84,0,0,1561,310, -1,0,0,0,1562,1563,5,82,0,0,1563,1564,5,69,0,0,1564,1565,5,83,0,0,1565,1566, -5,80,0,0,1566,1567,5,69,0,0,1567,1568,5,67,0,0,1568,1569,5,84,0,0,1569,312, -1,0,0,0,1570,1571,5,82,0,0,1571,1572,5,69,0,0,1572,1573,5,83,0,0,1573,1574, -5,84,0,0,1574,1575,5,82,0,0,1575,1576,5,73,0,0,1576,1577,5,67,0,0,1577,1578, -5,84,0,0,1578,314,1,0,0,0,1579,1580,5,82,0,0,1580,1581,5,69,0,0,1581,1582, -5,84,0,0,1582,1583,5,85,0,0,1583,1584,5,82,0,0,1584,1585,5,78,0,0,1585,316, -1,0,0,0,1586,1587,5,82,0,0,1587,1588,5,69,0,0,1588,1589,5,84,0,0,1589,1590, -5,85,0,0,1590,1591,5,82,0,0,1591,1592,5,78,0,0,1592,1593,5,83,0,0,1593,318, -1,0,0,0,1594,1595,5,82,0,0,1595,1596,5,69,0,0,1596,1597,5,86,0,0,1597,1598, -5,79,0,0,1598,1599,5,75,0,0,1599,1600,5,69,0,0,1600,320,1,0,0,0,1601,1602, -5,82,0,0,1602,1603,5,73,0,0,1603,1604,5,71,0,0,1604,1605,5,72,0,0,1605,1606, -5,84,0,0,1606,322,1,0,0,0,1607,1608,5,82,0,0,1608,1609,5,79,0,0,1609,1610, -5,76,0,0,1610,1611,5,69,0,0,1611,324,1,0,0,0,1612,1613,5,82,0,0,1613,1614, -5,79,0,0,1614,1615,5,76,0,0,1615,1616,5,69,0,0,1616,1617,5,83,0,0,1617,326, -1,0,0,0,1618,1619,5,82,0,0,1619,1620,5,79,0,0,1620,1621,5,76,0,0,1621,1622, -5,76,0,0,1622,1623,5,66,0,0,1623,1624,5,65,0,0,1624,1625,5,67,0,0,1625,1626, -5,75,0,0,1626,328,1,0,0,0,1627,1628,5,82,0,0,1628,1629,5,79,0,0,1629,1630, -5,76,0,0,1630,1631,5,76,0,0,1631,1632,5,85,0,0,1632,1633,5,80,0,0,1633,330, -1,0,0,0,1634,1635,5,82,0,0,1635,1636,5,79,0,0,1636,1637,5,87,0,0,1637,332, -1,0,0,0,1638,1639,5,82,0,0,1639,1640,5,79,0,0,1640,1641,5,87,0,0,1641,1642, -5,83,0,0,1642,334,1,0,0,0,1643,1644,5,83,0,0,1644,1645,5,67,0,0,1645,1646, -5,72,0,0,1646,1647,5,69,0,0,1647,1648,5,77,0,0,1648,1649,5,65,0,0,1649,336, -1,0,0,0,1650,1651,5,83,0,0,1651,1652,5,67,0,0,1652,1653,5,72,0,0,1653,1654, -5,69,0,0,1654,1655,5,77,0,0,1655,1656,5,65,0,0,1656,1657,5,83,0,0,1657,338, -1,0,0,0,1658,1659,5,83,0,0,1659,1660,5,69,0,0,1660,1661,5,67,0,0,1661,1662, -5,79,0,0,1662,1663,5,78,0,0,1663,1664,5,68,0,0,1664,340,1,0,0,0,1665,1666, -5,83,0,0,1666,1667,5,69,0,0,1667,1668,5,67,0,0,1668,1669,5,85,0,0,1669,1670, -5,82,0,0,1670,1671,5,73,0,0,1671,1672,5,84,0,0,1672,1673,5,89,0,0,1673,342, -1,0,0,0,1674,1675,5,83,0,0,1675,1676,5,69,0,0,1676,1677,5,76,0,0,1677,1678, -5,69,0,0,1678,1679,5,67,0,0,1679,1680,5,84,0,0,1680,344,1,0,0,0,1681,1682, -5,83,0,0,1682,1683,5,69,0,0,1683,1684,5,82,0,0,1684,1685,5,73,0,0,1685,1686, -5,65,0,0,1686,1687,5,76,0,0,1687,1688,5,73,0,0,1688,1689,5,90,0,0,1689,1690, -5,65,0,0,1690,1691,5,66,0,0,1691,1692,5,76,0,0,1692,1693,5,69,0,0,1693,346, -1,0,0,0,1694,1695,5,83,0,0,1695,1696,5,69,0,0,1696,1697,5,83,0,0,1697,1698, -5,83,0,0,1698,1699,5,73,0,0,1699,1700,5,79,0,0,1700,1701,5,78,0,0,1701,348, -1,0,0,0,1702,1703,5,83,0,0,1703,1704,5,69,0,0,1704,1705,5,84,0,0,1705,350, -1,0,0,0,1706,1707,5,83,0,0,1707,1708,5,69,0,0,1708,1709,5,84,0,0,1709,1710, -5,83,0,0,1710,352,1,0,0,0,1711,1712,5,83,0,0,1712,1713,5,72,0,0,1713,1714, -5,79,0,0,1714,1715,5,87,0,0,1715,354,1,0,0,0,1716,1717,5,83,0,0,1717,1718, -5,79,0,0,1718,1719,5,77,0,0,1719,1720,5,69,0,0,1720,356,1,0,0,0,1721,1722, -5,83,0,0,1722,1723,5,81,0,0,1723,1724,5,76,0,0,1724,358,1,0,0,0,1725,1726, -5,83,0,0,1726,1727,5,84,0,0,1727,1728,5,65,0,0,1728,1729,5,82,0,0,1729,1730, -5,84,0,0,1730,360,1,0,0,0,1731,1732,5,83,0,0,1732,1733,5,84,0,0,1733,1734, -5,65,0,0,1734,1735,5,84,0,0,1735,1736,5,83,0,0,1736,362,1,0,0,0,1737,1738, -5,83,0,0,1738,1739,5,85,0,0,1739,1740,5,66,0,0,1740,1741,5,83,0,0,1741,1742, -5,84,0,0,1742,1743,5,82,0,0,1743,1744,5,73,0,0,1744,1745,5,78,0,0,1745,1746, -5,71,0,0,1746,364,1,0,0,0,1747,1748,5,83,0,0,1748,1749,5,89,0,0,1749,1750, -5,83,0,0,1750,1751,5,84,0,0,1751,1752,5,69,0,0,1752,1753,5,77,0,0,1753,366, -1,0,0,0,1754,1755,5,83,0,0,1755,1756,5,89,0,0,1756,1757,5,83,0,0,1757,1758, -5,84,0,0,1758,1759,5,69,0,0,1759,1760,5,77,0,0,1760,1761,5,95,0,0,1761,1762, -5,84,0,0,1762,1763,5,73,0,0,1763,1764,5,77,0,0,1764,1765,5,69,0,0,1765,368, -1,0,0,0,1766,1767,5,83,0,0,1767,1768,5,89,0,0,1768,1769,5,83,0,0,1769,1770, -5,84,0,0,1770,1771,5,69,0,0,1771,1772,5,77,0,0,1772,1773,5,95,0,0,1773,1774, -5,86,0,0,1774,1775,5,69,0,0,1775,1776,5,82,0,0,1776,1777,5,83,0,0,1777,1778, -5,73,0,0,1778,1779,5,79,0,0,1779,1780,5,78,0,0,1780,370,1,0,0,0,1781,1782, -5,84,0,0,1782,1783,5,65,0,0,1783,1784,5,66,0,0,1784,1785,5,76,0,0,1785,1786, -5,69,0,0,1786,372,1,0,0,0,1787,1788,5,84,0,0,1788,1789,5,65,0,0,1789,1790, -5,66,0,0,1790,1791,5,76,0,0,1791,1792,5,69,0,0,1792,1793,5,83,0,0,1793,374, -1,0,0,0,1794,1795,5,84,0,0,1795,1796,5,65,0,0,1796,1797,5,66,0,0,1797,1798, -5,76,0,0,1798,1799,5,69,0,0,1799,1800,5,83,0,0,1800,1801,5,65,0,0,1801,1802, -5,77,0,0,1802,1803,5,80,0,0,1803,1804,5,76,0,0,1804,1805,5,69,0,0,1805,376, -1,0,0,0,1806,1807,5,84,0,0,1807,1808,5,69,0,0,1808,1809,5,77,0,0,1809,1810, -5,80,0,0,1810,1811,5,79,0,0,1811,1812,5,82,0,0,1812,1813,5,65,0,0,1813,1814, -5,82,0,0,1814,1815,5,89,0,0,1815,378,1,0,0,0,1816,1817,5,84,0,0,1817,1818, -5,69,0,0,1818,1819,5,88,0,0,1819,1820,5,84,0,0,1820,380,1,0,0,0,1821,1822, -5,84,0,0,1822,1823,5,72,0,0,1823,1824,5,69,0,0,1824,1825,5,78,0,0,1825,382, -1,0,0,0,1826,1827,5,84,0,0,1827,1828,5,73,0,0,1828,1829,5,77,0,0,1829,1830, -5,69,0,0,1830,384,1,0,0,0,1831,1832,5,84,0,0,1832,1833,5,73,0,0,1833,1834, -5,77,0,0,1834,1835,5,69,0,0,1835,1836,5,83,0,0,1836,1837,5,84,0,0,1837,1838, -5,65,0,0,1838,1839,5,77,0,0,1839,1840,5,80,0,0,1840,386,1,0,0,0,1841,1842, -5,84,0,0,1842,1843,5,79,0,0,1843,388,1,0,0,0,1844,1845,5,84,0,0,1845,1846, -5,82,0,0,1846,1847,5,65,0,0,1847,1848,5,78,0,0,1848,1849,5,83,0,0,1849,1850, -5,65,0,0,1850,1851,5,67,0,0,1851,1852,5,84,0,0,1852,1853,5,73,0,0,1853,1854, -5,79,0,0,1854,1855,5,78,0,0,1855,390,1,0,0,0,1856,1857,5,84,0,0,1857,1858, -5,82,0,0,1858,1859,5,85,0,0,1859,1860,5,69,0,0,1860,392,1,0,0,0,1861,1862, -5,84,0,0,1862,1863,5,82,0,0,1863,1864,5,85,0,0,1864,1865,5,78,0,0,1865,1866, -5,67,0,0,1866,1867,5,65,0,0,1867,1868,5,84,0,0,1868,1869,5,69,0,0,1869,394, -1,0,0,0,1870,1871,5,84,0,0,1871,1872,5,82,0,0,1872,1873,5,89,0,0,1873,1874, -5,95,0,0,1874,1875,5,67,0,0,1875,1876,5,65,0,0,1876,1877,5,83,0,0,1877,1878, -5,84,0,0,1878,396,1,0,0,0,1879,1880,5,84,0,0,1880,1881,5,89,0,0,1881,1882, -5,80,0,0,1882,1883,5,69,0,0,1883,398,1,0,0,0,1884,1885,5,85,0,0,1885,1886, -5,69,0,0,1886,1887,5,83,0,0,1887,1888,5,67,0,0,1888,1889,5,65,0,0,1889,1890, -5,80,0,0,1890,1891,5,69,0,0,1891,400,1,0,0,0,1892,1893,5,85,0,0,1893,1894, -5,78,0,0,1894,1895,5,66,0,0,1895,1896,5,79,0,0,1896,1897,5,85,0,0,1897,1898, -5,78,0,0,1898,1899,5,68,0,0,1899,1900,5,69,0,0,1900,1901,5,68,0,0,1901,402, -1,0,0,0,1902,1903,5,85,0,0,1903,1904,5,78,0,0,1904,1905,5,67,0,0,1905,1906, -5,79,0,0,1906,1907,5,77,0,0,1907,1908,5,77,0,0,1908,1909,5,73,0,0,1909,1910, -5,84,0,0,1910,1911,5,84,0,0,1911,1912,5,69,0,0,1912,1913,5,68,0,0,1913,404, -1,0,0,0,1914,1915,5,85,0,0,1915,1916,5,78,0,0,1916,1917,5,73,0,0,1917,1918, -5,79,0,0,1918,1919,5,78,0,0,1919,406,1,0,0,0,1920,1921,5,85,0,0,1921,1922, -5,78,0,0,1922,1923,5,78,0,0,1923,1924,5,69,0,0,1924,1925,5,83,0,0,1925,1926, -5,84,0,0,1926,408,1,0,0,0,1927,1928,5,85,0,0,1928,1929,5,80,0,0,1929,1930, -5,68,0,0,1930,1931,5,65,0,0,1931,1932,5,84,0,0,1932,1933,5,69,0,0,1933,410, -1,0,0,0,1934,1935,5,85,0,0,1935,1936,5,83,0,0,1936,1937,5,69,0,0,1937,412, -1,0,0,0,1938,1939,5,85,0,0,1939,1940,5,83,0,0,1940,1941,5,69,0,0,1941,1942, -5,82,0,0,1942,414,1,0,0,0,1943,1944,5,85,0,0,1944,1945,5,83,0,0,1945,1946, -5,73,0,0,1946,1947,5,78,0,0,1947,1948,5,71,0,0,1948,416,1,0,0,0,1949,1950, -5,86,0,0,1950,1951,5,65,0,0,1951,1952,5,76,0,0,1952,1953,5,73,0,0,1953,1954, -5,68,0,0,1954,1955,5,65,0,0,1955,1956,5,84,0,0,1956,1957,5,69,0,0,1957,418, -1,0,0,0,1958,1959,5,86,0,0,1959,1960,5,65,0,0,1960,1961,5,76,0,0,1961,1962, -5,85,0,0,1962,1963,5,69,0,0,1963,1964,5,83,0,0,1964,420,1,0,0,0,1965,1966, -5,86,0,0,1966,1967,5,69,0,0,1967,1968,5,82,0,0,1968,1969,5,66,0,0,1969,1970, -5,79,0,0,1970,1971,5,83,0,0,1971,1972,5,69,0,0,1972,422,1,0,0,0,1973,1974, -5,86,0,0,1974,1975,5,69,0,0,1975,1976,5,82,0,0,1976,1977,5,83,0,0,1977,1978, -5,73,0,0,1978,1979,5,79,0,0,1979,1980,5,78,0,0,1980,424,1,0,0,0,1981,1982, -5,86,0,0,1982,1983,5,73,0,0,1983,1984,5,69,0,0,1984,1985,5,87,0,0,1985,426, -1,0,0,0,1986,1987,5,87,0,0,1987,1988,5,72,0,0,1988,1989,5,69,0,0,1989,1990, -5,78,0,0,1990,428,1,0,0,0,1991,1992,5,87,0,0,1992,1993,5,72,0,0,1993,1994, -5,69,0,0,1994,1995,5,82,0,0,1995,1996,5,69,0,0,1996,430,1,0,0,0,1997,1998, -5,87,0,0,1998,1999,5,73,0,0,1999,2000,5,84,0,0,2000,2001,5,72,0,0,2001,432, -1,0,0,0,2002,2003,5,87,0,0,2003,2004,5,79,0,0,2004,2005,5,82,0,0,2005,2006, -5,75,0,0,2006,434,1,0,0,0,2007,2008,5,87,0,0,2008,2009,5,82,0,0,2009,2010, -5,73,0,0,2010,2011,5,84,0,0,2011,2012,5,69,0,0,2012,436,1,0,0,0,2013,2014, -5,89,0,0,2014,2015,5,69,0,0,2015,2016,5,65,0,0,2016,2017,5,82,0,0,2017,438, -1,0,0,0,2018,2019,5,90,0,0,2019,2020,5,79,0,0,2020,2021,5,78,0,0,2021,2022, -5,69,0,0,2022,440,1,0,0,0,2023,2024,5,61,0,0,2024,442,1,0,0,0,2025,2026, -5,60,0,0,2026,2030,5,62,0,0,2027,2028,5,33,0,0,2028,2030,5,61,0,0,2029,2025, -1,0,0,0,2029,2027,1,0,0,0,2030,444,1,0,0,0,2031,2032,5,60,0,0,2032,446,1, -0,0,0,2033,2034,5,60,0,0,2034,2035,5,61,0,0,2035,448,1,0,0,0,2036,2037,5, -62,0,0,2037,450,1,0,0,0,2038,2039,5,62,0,0,2039,2040,5,61,0,0,2040,452,1, -0,0,0,2041,2042,5,43,0,0,2042,454,1,0,0,0,2043,2044,5,45,0,0,2044,456,1, -0,0,0,2045,2046,5,42,0,0,2046,458,1,0,0,0,2047,2048,5,47,0,0,2048,460,1, -0,0,0,2049,2050,5,37,0,0,2050,462,1,0,0,0,2051,2052,5,124,0,0,2052,2053, -5,124,0,0,2053,464,1,0,0,0,2054,2060,5,39,0,0,2055,2059,8,0,0,0,2056,2057, -5,39,0,0,2057,2059,5,39,0,0,2058,2055,1,0,0,0,2058,2056,1,0,0,0,2059,2062, -1,0,0,0,2060,2058,1,0,0,0,2060,2061,1,0,0,0,2061,2063,1,0,0,0,2062,2060, -1,0,0,0,2063,2064,5,39,0,0,2064,466,1,0,0,0,2065,2066,5,85,0,0,2066,2067, -5,38,0,0,2067,2068,5,39,0,0,2068,2074,1,0,0,0,2069,2073,8,0,0,0,2070,2071, -5,39,0,0,2071,2073,5,39,0,0,2072,2069,1,0,0,0,2072,2070,1,0,0,0,2073,2076, -1,0,0,0,2074,2072,1,0,0,0,2074,2075,1,0,0,0,2075,2077,1,0,0,0,2076,2074, -1,0,0,0,2077,2078,5,39,0,0,2078,468,1,0,0,0,2079,2080,5,88,0,0,2080,2081, -5,39,0,0,2081,2085,1,0,0,0,2082,2084,8,0,0,0,2083,2082,1,0,0,0,2084,2087, -1,0,0,0,2085,2083,1,0,0,0,2085,2086,1,0,0,0,2086,2088,1,0,0,0,2087,2085, -1,0,0,0,2088,2089,5,39,0,0,2089,470,1,0,0,0,2090,2092,3,493,246,0,2091,2090, -1,0,0,0,2092,2093,1,0,0,0,2093,2091,1,0,0,0,2093,2094,1,0,0,0,2094,472,1, -0,0,0,2095,2097,3,493,246,0,2096,2095,1,0,0,0,2097,2098,1,0,0,0,2098,2096, -1,0,0,0,2098,2099,1,0,0,0,2099,2100,1,0,0,0,2100,2104,5,46,0,0,2101,2103, -3,493,246,0,2102,2101,1,0,0,0,2103,2106,1,0,0,0,2104,2102,1,0,0,0,2104,2105, -1,0,0,0,2105,2114,1,0,0,0,2106,2104,1,0,0,0,2107,2109,5,46,0,0,2108,2110, -3,493,246,0,2109,2108,1,0,0,0,2110,2111,1,0,0,0,2111,2109,1,0,0,0,2111,2112, -1,0,0,0,2112,2114,1,0,0,0,2113,2096,1,0,0,0,2113,2107,1,0,0,0,2114,474,1, -0,0,0,2115,2117,3,493,246,0,2116,2115,1,0,0,0,2117,2118,1,0,0,0,2118,2116, -1,0,0,0,2118,2119,1,0,0,0,2119,2127,1,0,0,0,2120,2124,5,46,0,0,2121,2123, -3,493,246,0,2122,2121,1,0,0,0,2123,2126,1,0,0,0,2124,2122,1,0,0,0,2124,2125, -1,0,0,0,2125,2128,1,0,0,0,2126,2124,1,0,0,0,2127,2120,1,0,0,0,2127,2128, -1,0,0,0,2128,2129,1,0,0,0,2129,2130,3,491,245,0,2130,2140,1,0,0,0,2131,2133, -5,46,0,0,2132,2134,3,493,246,0,2133,2132,1,0,0,0,2134,2135,1,0,0,0,2135, -2133,1,0,0,0,2135,2136,1,0,0,0,2136,2137,1,0,0,0,2137,2138,3,491,245,0,2138, -2140,1,0,0,0,2139,2116,1,0,0,0,2139,2131,1,0,0,0,2140,476,1,0,0,0,2141,2144, -3,495,247,0,2142,2144,5,95,0,0,2143,2141,1,0,0,0,2143,2142,1,0,0,0,2144, -2150,1,0,0,0,2145,2149,3,495,247,0,2146,2149,3,493,246,0,2147,2149,7,1,0, -0,2148,2145,1,0,0,0,2148,2146,1,0,0,0,2148,2147,1,0,0,0,2149,2152,1,0,0, -0,2150,2148,1,0,0,0,2150,2151,1,0,0,0,2151,478,1,0,0,0,2152,2150,1,0,0,0, -2153,2157,3,493,246,0,2154,2158,3,495,247,0,2155,2158,3,493,246,0,2156,2158, -7,1,0,0,2157,2154,1,0,0,0,2157,2155,1,0,0,0,2157,2156,1,0,0,0,2158,2159, -1,0,0,0,2159,2157,1,0,0,0,2159,2160,1,0,0,0,2160,480,1,0,0,0,2161,2167,5, -34,0,0,2162,2166,8,2,0,0,2163,2164,5,34,0,0,2164,2166,5,34,0,0,2165,2162, -1,0,0,0,2165,2163,1,0,0,0,2166,2169,1,0,0,0,2167,2165,1,0,0,0,2167,2168, -1,0,0,0,2168,2170,1,0,0,0,2169,2167,1,0,0,0,2170,2171,5,34,0,0,2171,482, -1,0,0,0,2172,2178,5,96,0,0,2173,2177,8,3,0,0,2174,2175,5,96,0,0,2175,2177, -5,96,0,0,2176,2173,1,0,0,0,2176,2174,1,0,0,0,2177,2180,1,0,0,0,2178,2176, -1,0,0,0,2178,2179,1,0,0,0,2179,2181,1,0,0,0,2180,2178,1,0,0,0,2181,2182, -5,96,0,0,2182,484,1,0,0,0,2183,2184,5,84,0,0,2184,2185,5,73,0,0,2185,2186, -5,77,0,0,2186,2187,5,69,0,0,2187,2188,1,0,0,0,2188,2189,3,501,250,0,2189, -2190,5,87,0,0,2190,2191,5,73,0,0,2191,2192,5,84,0,0,2192,2193,5,72,0,0,2193, -2194,1,0,0,0,2194,2195,3,501,250,0,2195,2196,5,84,0,0,2196,2197,5,73,0,0, -2197,2198,5,77,0,0,2198,2199,5,69,0,0,2199,2200,1,0,0,0,2200,2201,3,501, -250,0,2201,2202,5,90,0,0,2202,2203,5,79,0,0,2203,2204,5,78,0,0,2204,2205, -5,69,0,0,2205,486,1,0,0,0,2206,2207,5,84,0,0,2207,2208,5,73,0,0,2208,2209, -5,77,0,0,2209,2210,5,69,0,0,2210,2211,5,83,0,0,2211,2212,5,84,0,0,2212,2213, -5,65,0,0,2213,2214,5,77,0,0,2214,2215,5,80,0,0,2215,2216,1,0,0,0,2216,2217, -3,501,250,0,2217,2218,5,87,0,0,2218,2219,5,73,0,0,2219,2220,5,84,0,0,2220, -2221,5,72,0,0,2221,2222,1,0,0,0,2222,2223,3,501,250,0,2223,2224,5,84,0,0, -2224,2225,5,73,0,0,2225,2226,5,77,0,0,2226,2227,5,69,0,0,2227,2228,1,0,0, -0,2228,2229,3,501,250,0,2229,2230,5,90,0,0,2230,2231,5,79,0,0,2231,2232, -5,78,0,0,2232,2233,5,69,0,0,2233,488,1,0,0,0,2234,2235,5,68,0,0,2235,2236, -5,79,0,0,2236,2237,5,85,0,0,2237,2238,5,66,0,0,2238,2239,5,76,0,0,2239,2240, -5,69,0,0,2240,2241,1,0,0,0,2241,2242,3,501,250,0,2242,2243,5,80,0,0,2243, -2244,5,82,0,0,2244,2245,5,69,0,0,2245,2246,5,67,0,0,2246,2247,5,73,0,0,2247, -2248,5,83,0,0,2248,2249,5,73,0,0,2249,2250,5,79,0,0,2250,2251,5,78,0,0,2251, -490,1,0,0,0,2252,2254,5,69,0,0,2253,2255,7,4,0,0,2254,2253,1,0,0,0,2254, -2255,1,0,0,0,2255,2257,1,0,0,0,2256,2258,3,493,246,0,2257,2256,1,0,0,0,2258, -2259,1,0,0,0,2259,2257,1,0,0,0,2259,2260,1,0,0,0,2260,492,1,0,0,0,2261,2262, -7,5,0,0,2262,494,1,0,0,0,2263,2264,7,6,0,0,2264,496,1,0,0,0,2265,2266,5, -45,0,0,2266,2267,5,45,0,0,2267,2271,1,0,0,0,2268,2270,8,7,0,0,2269,2268, -1,0,0,0,2270,2273,1,0,0,0,2271,2269,1,0,0,0,2271,2272,1,0,0,0,2272,2275, -1,0,0,0,2273,2271,1,0,0,0,2274,2276,5,13,0,0,2275,2274,1,0,0,0,2275,2276, -1,0,0,0,2276,2278,1,0,0,0,2277,2279,5,10,0,0,2278,2277,1,0,0,0,2278,2279, -1,0,0,0,2279,2280,1,0,0,0,2280,2281,6,248,0,0,2281,498,1,0,0,0,2282,2283, -5,47,0,0,2283,2284,5,42,0,0,2284,2288,1,0,0,0,2285,2287,9,0,0,0,2286,2285, -1,0,0,0,2287,2290,1,0,0,0,2288,2289,1,0,0,0,2288,2286,1,0,0,0,2289,2291, -1,0,0,0,2290,2288,1,0,0,0,2291,2292,5,42,0,0,2292,2293,5,47,0,0,2293,2294, -1,0,0,0,2294,2295,6,249,0,0,2295,500,1,0,0,0,2296,2298,7,8,0,0,2297,2296, -1,0,0,0,2298,2299,1,0,0,0,2299,2297,1,0,0,0,2299,2300,1,0,0,0,2300,2301, -1,0,0,0,2301,2302,6,250,0,0,2302,502,1,0,0,0,2303,2304,9,0,0,0,2304,504, -1,0,0,0,33,0,2029,2058,2060,2072,2074,2085,2093,2098,2104,2111,2113,2118, -2124,2127,2135,2139,2143,2148,2150,2157,2159,2165,2167,2176,2178,2254,2259, -2271,2275,2278,2288,2299,1,0,1,0]; +249,2,250,7,250,2,251,7,251,2,252,7,252,2,253,7,253,2,254,7,254,2,255,7, +255,2,256,7,256,2,257,7,257,2,258,7,258,2,259,7,259,2,260,7,260,2,261,7, +261,2,262,7,262,2,263,7,263,2,264,7,264,2,265,7,265,2,266,7,266,2,267,7, +267,2,268,7,268,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,4,1,4,1,5,1,5,1,5,1,6, +1,6,1,7,1,7,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1, +11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,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,16,1,16,1,16,1, +16,1,16,1,16,1,17,1,17,1,17,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,21,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,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23, +1,23,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,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,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,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,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,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,35,1,35,1,35,1,36,1,36,1,36,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, +38,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,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,43,1,43,1,43,1,43,1,43,1,43,1,43,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,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45, +1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,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,46,1,46,1,46,1,46,1,46,1,47, +1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,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,51,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,52,1,52,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,55,1,55,1,55,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, +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,57, +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,59,1,59,1,59,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,63,1,63,1,63,1,63,1,63,1,63,1, +63,1,63,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,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,68,1,68,1,68,1,69,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,70,1,70,1,71,1,71,1,71,1,71,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,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,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,78,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,80,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,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,84,1,84,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,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,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,90,1,90,1,90,1,91,1,91,1,91,1,91,1, +91,1,91,1,91,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,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,97,1, +97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,98, +1,99,1,99,1,99,1,99,1,99,1,99,1,100,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,101,1,101,1,101,1,101,1,102,1,102, +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,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,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,109,1,109,1,109,1,109,1,109,1,110,1,110, +1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,112, +1,112,1,112,1,112,1,112,1,113,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,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,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,120,1,120,1,120,1,120,1,120,1,120, +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,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,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,125,1,126,1,126,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,129,1,129,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,133,1,133, +1,133,1,133,1,133,1,134,1,134,1,134,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,136,1,136,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,139,1,139,1,139, +1,139,1,140,1,140,1,140,1,140,1,140,1,140,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,144,1,144,1,144,1,144, +1,144,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,147,1,147,1,147,1,148,1,148,1,148,1,148,1,148,1,148,1,148, +1,148,1,148,1,148,1,148,1,149,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,151,1,151,1,152,1,152, +1,152,1,152,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,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,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,157,1,157,1,157,1,157,1,158,1,158,1,158,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,159,1,159,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,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,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,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,167,1,167, +1,167,1,167,1,168,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,169,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,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,177,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,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,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,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,186,1,186,1,187,1,187,1,187,1,187,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,188,1,188,1,188, +1,189,1,189,1,189,1,189,1,190,1,190,1,190,1,190,1,190,1,191,1,191,1,191, +1,191,1,191,1,192,1,192,1,192,1,192,1,192,1,193,1,193,1,193,1,193,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,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,197,1,198,1,198,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,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,200,1,201,1,201,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,202,1,202,1,203,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,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,208,1,208,1,208,1,208,1,209, +1,209,1,209,1,210,1,210,1,210,1,210,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,212,1,212,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,213,1,213, +1,213,1,214,1,214,1,214,1,214,1,214,1,215,1,215,1,215,1,215,1,215,1,215, +1,215,1,215,1,216,1,216,1,216,1,216,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,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,221,1,221,1,221,1,221, +1,221,1,221,1,221,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,225,1,225,1,225,1,225,1,225,1,225, +1,225,1,225,1,225,1,226,1,226,1,226,1,226,1,226,1,226,1,226,1,227,1,227, +1,227,1,227,1,227,1,227,1,227,1,227,1,228,1,228,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,230, +1,231,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,234,1,234,1,234,1,234,1,234,1,234,1,235,1,235, +1,235,1,235,1,235,1,236,1,236,1,236,1,236,1,236,1,237,1,237,1,238,1,238, +1,238,1,238,3,238,2186,8,238,1,239,1,239,1,240,1,240,1,240,1,241,1,241,1, +242,1,242,1,242,1,243,1,243,1,244,1,244,1,245,1,245,1,246,1,246,1,247,1, +247,1,248,1,248,1,248,1,249,1,249,1,249,1,249,5,249,2215,8,249,10,249,12, +249,2218,9,249,1,249,1,249,1,250,1,250,1,250,1,250,1,250,1,250,1,250,5,250, +2229,8,250,10,250,12,250,2232,9,250,1,250,1,250,1,251,1,251,1,251,1,251, +5,251,2240,8,251,10,251,12,251,2243,9,251,1,251,1,251,1,252,4,252,2248,8, +252,11,252,12,252,2249,1,253,4,253,2253,8,253,11,253,12,253,2254,1,253,1, +253,5,253,2259,8,253,10,253,12,253,2262,9,253,1,253,1,253,4,253,2266,8,253, +11,253,12,253,2267,3,253,2270,8,253,1,254,4,254,2273,8,254,11,254,12,254, +2274,1,254,1,254,5,254,2279,8,254,10,254,12,254,2282,9,254,3,254,2284,8, +254,1,254,1,254,1,254,1,254,4,254,2290,8,254,11,254,12,254,2291,1,254,1, +254,3,254,2296,8,254,1,255,1,255,3,255,2300,8,255,1,255,1,255,1,255,5,255, +2305,8,255,10,255,12,255,2308,9,255,1,256,1,256,1,256,1,256,4,256,2314,8, +256,11,256,12,256,2315,1,257,1,257,1,257,1,257,5,257,2322,8,257,10,257,12, +257,2325,9,257,1,257,1,257,1,258,1,258,1,258,1,258,5,258,2333,8,258,10,258, +12,258,2336,9,258,1,258,1,258,1,259,1,259,1,259,1,259,1,259,1,259,1,259, +1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,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,260, +1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260, +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,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261, +1,261,1,261,1,262,1,262,3,262,2411,8,262,1,262,4,262,2414,8,262,11,262,12, +262,2415,1,263,1,263,1,264,1,264,1,265,1,265,1,265,1,265,5,265,2426,8,265, +10,265,12,265,2429,9,265,1,265,3,265,2432,8,265,1,265,3,265,2435,8,265,1, +265,1,265,1,266,1,266,1,266,1,266,5,266,2443,8,266,10,266,12,266,2446,9, +266,1,266,1,266,1,266,1,266,1,266,1,267,4,267,2454,8,267,11,267,12,267,2455, +1,267,1,267,1,268,1,268,1,2444,0,269,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8, +17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41, +21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65, +33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89, +45,91,46,93,47,95,48,97,49,99,50,101,51,103,52,105,53,107,54,109,55,111, +56,113,57,115,58,117,59,119,60,121,61,123,62,125,63,127,64,129,65,131,66, +133,67,135,68,137,69,139,70,141,71,143,72,145,73,147,74,149,75,151,76,153, +77,155,78,157,79,159,80,161,81,163,82,165,83,167,84,169,85,171,86,173,87, +175,88,177,89,179,90,181,91,183,92,185,93,187,94,189,95,191,96,193,97,195, +98,197,99,199,100,201,101,203,102,205,103,207,104,209,105,211,106,213,107, +215,108,217,109,219,110,221,111,223,112,225,113,227,114,229,115,231,116, +233,117,235,118,237,119,239,120,241,121,243,122,245,123,247,124,249,125, +251,126,253,127,255,128,257,129,259,130,261,131,263,132,265,133,267,134, +269,135,271,136,273,137,275,138,277,139,279,140,281,141,283,142,285,143, +287,144,289,145,291,146,293,147,295,148,297,149,299,150,301,151,303,152, +305,153,307,154,309,155,311,156,313,157,315,158,317,159,319,160,321,161, +323,162,325,163,327,164,329,165,331,166,333,167,335,168,337,169,339,170, +341,171,343,172,345,173,347,174,349,175,351,176,353,177,355,178,357,179, +359,180,361,181,363,182,365,183,367,184,369,185,371,186,373,187,375,188, +377,189,379,190,381,191,383,192,385,193,387,194,389,195,391,196,393,197, +395,198,397,199,399,200,401,201,403,202,405,203,407,204,409,205,411,206, +413,207,415,208,417,209,419,210,421,211,423,212,425,213,427,214,429,215, +431,216,433,217,435,218,437,219,439,220,441,221,443,222,445,223,447,224, +449,225,451,226,453,227,455,228,457,229,459,230,461,231,463,232,465,233, +467,234,469,235,471,236,473,237,475,238,477,239,479,240,481,241,483,242, +485,243,487,244,489,245,491,246,493,247,495,248,497,249,499,250,501,251, +503,252,505,253,507,254,509,255,511,256,513,257,515,258,517,259,519,260, +521,261,523,262,525,0,527,0,529,0,531,263,533,264,535,265,537,266,1,0,9, +1,0,39,39,3,0,58,58,64,64,95,95,1,0,34,34,1,0,96,96,2,0,43,43,45,45,1,0, +48,57,1,0,65,90,2,0,10,10,13,13,3,0,9,10,13,13,32,32,2491,0,1,1,0,0,0,0, +3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0, +0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1, +0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0, +37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0, +0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59, +1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0, +0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1, +0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0, +93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1, +0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0, +0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0, +0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0, +0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0, +145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155, +1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1, +0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0, +0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0, +0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0, +0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0, +207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217, +1,0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1, +0,0,0,0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0, +0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0, +0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0, +0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1,0,0,0,0, +269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0,277,1,0,0,0,0,279, +1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0,0,0,0,287,1,0,0,0,0,289,1, +0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295,1,0,0,0,0,297,1,0,0,0,0,299,1,0, +0,0,0,301,1,0,0,0,0,303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0, +0,0,311,1,0,0,0,0,313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0, +0,321,1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0, +331,1,0,0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0,341, +1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0,0,351,1, +0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1,0,0,0,0,361,1,0, +0,0,0,363,1,0,0,0,0,365,1,0,0,0,0,367,1,0,0,0,0,369,1,0,0,0,0,371,1,0,0, +0,0,373,1,0,0,0,0,375,1,0,0,0,0,377,1,0,0,0,0,379,1,0,0,0,0,381,1,0,0,0, +0,383,1,0,0,0,0,385,1,0,0,0,0,387,1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0,0, +393,1,0,0,0,0,395,1,0,0,0,0,397,1,0,0,0,0,399,1,0,0,0,0,401,1,0,0,0,0,403, +1,0,0,0,0,405,1,0,0,0,0,407,1,0,0,0,0,409,1,0,0,0,0,411,1,0,0,0,0,413,1, +0,0,0,0,415,1,0,0,0,0,417,1,0,0,0,0,419,1,0,0,0,0,421,1,0,0,0,0,423,1,0, +0,0,0,425,1,0,0,0,0,427,1,0,0,0,0,429,1,0,0,0,0,431,1,0,0,0,0,433,1,0,0, +0,0,435,1,0,0,0,0,437,1,0,0,0,0,439,1,0,0,0,0,441,1,0,0,0,0,443,1,0,0,0, +0,445,1,0,0,0,0,447,1,0,0,0,0,449,1,0,0,0,0,451,1,0,0,0,0,453,1,0,0,0,0, +455,1,0,0,0,0,457,1,0,0,0,0,459,1,0,0,0,0,461,1,0,0,0,0,463,1,0,0,0,0,465, +1,0,0,0,0,467,1,0,0,0,0,469,1,0,0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475,1, +0,0,0,0,477,1,0,0,0,0,479,1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0,485,1,0, +0,0,0,487,1,0,0,0,0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0,0,495,1,0,0, +0,0,497,1,0,0,0,0,499,1,0,0,0,0,501,1,0,0,0,0,503,1,0,0,0,0,505,1,0,0,0, +0,507,1,0,0,0,0,509,1,0,0,0,0,511,1,0,0,0,0,513,1,0,0,0,0,515,1,0,0,0,0, +517,1,0,0,0,0,519,1,0,0,0,0,521,1,0,0,0,0,523,1,0,0,0,0,531,1,0,0,0,0,533, +1,0,0,0,0,535,1,0,0,0,0,537,1,0,0,0,1,539,1,0,0,0,3,541,1,0,0,0,5,543,1, +0,0,0,7,545,1,0,0,0,9,547,1,0,0,0,11,549,1,0,0,0,13,552,1,0,0,0,15,554,1, +0,0,0,17,556,1,0,0,0,19,559,1,0,0,0,21,563,1,0,0,0,23,569,1,0,0,0,25,573, +1,0,0,0,27,579,1,0,0,0,29,587,1,0,0,0,31,591,1,0,0,0,33,595,1,0,0,0,35,601, +1,0,0,0,37,604,1,0,0,0,39,608,1,0,0,0,41,611,1,0,0,0,43,618,1,0,0,0,45,628, +1,0,0,0,47,636,1,0,0,0,49,643,1,0,0,0,51,646,1,0,0,0,53,651,1,0,0,0,55,658, +1,0,0,0,57,666,1,0,0,0,59,671,1,0,0,0,61,676,1,0,0,0,63,685,1,0,0,0,65,692, +1,0,0,0,67,700,1,0,0,0,69,708,1,0,0,0,71,715,1,0,0,0,73,725,1,0,0,0,75,736, +1,0,0,0,77,743,1,0,0,0,79,755,1,0,0,0,81,761,1,0,0,0,83,766,1,0,0,0,85,774, +1,0,0,0,87,787,1,0,0,0,89,800,1,0,0,0,91,813,1,0,0,0,93,831,1,0,0,0,95,844, +1,0,0,0,97,849,1,0,0,0,99,854,1,0,0,0,101,858,1,0,0,0,103,869,1,0,0,0,105, +877,1,0,0,0,107,884,1,0,0,0,109,889,1,0,0,0,111,898,1,0,0,0,113,909,1,0, +0,0,115,923,1,0,0,0,117,932,1,0,0,0,119,941,1,0,0,0,121,953,1,0,0,0,123, +958,1,0,0,0,125,963,1,0,0,0,127,969,1,0,0,0,129,977,1,0,0,0,131,981,1,0, +0,0,133,990,1,0,0,0,135,997,1,0,0,0,137,1004,1,0,0,0,139,1014,1,0,0,0,141, +1022,1,0,0,0,143,1029,1,0,0,0,145,1037,1,0,0,0,147,1045,1,0,0,0,149,1054, +1,0,0,0,151,1060,1,0,0,0,153,1066,1,0,0,0,155,1073,1,0,0,0,157,1079,1,0, +0,0,159,1089,1,0,0,0,161,1093,1,0,0,0,163,1100,1,0,0,0,165,1105,1,0,0,0, +167,1110,1,0,0,0,169,1119,1,0,0,0,171,1129,1,0,0,0,173,1135,1,0,0,0,175, +1143,1,0,0,0,177,1150,1,0,0,0,179,1159,1,0,0,0,181,1165,1,0,0,0,183,1174, +1,0,0,0,185,1181,1,0,0,0,187,1188,1,0,0,0,189,1193,1,0,0,0,191,1196,1,0, +0,0,193,1203,1,0,0,0,195,1206,1,0,0,0,197,1216,1,0,0,0,199,1222,1,0,0,0, +201,1228,1,0,0,0,203,1235,1,0,0,0,205,1245,1,0,0,0,207,1254,1,0,0,0,209, +1259,1,0,0,0,211,1267,1,0,0,0,213,1270,1,0,0,0,215,1273,1,0,0,0,217,1283, +1,0,0,0,219,1288,1,0,0,0,221,1293,1,0,0,0,223,1298,1,0,0,0,225,1302,1,0, +0,0,227,1311,1,0,0,0,229,1316,1,0,0,0,231,1324,1,0,0,0,233,1329,1,0,0,0, +235,1335,1,0,0,0,237,1340,1,0,0,0,239,1346,1,0,0,0,241,1356,1,0,0,0,243, +1371,1,0,0,0,245,1379,1,0,0,0,247,1383,1,0,0,0,249,1391,1,0,0,0,251,1404, +1,0,0,0,253,1410,1,0,0,0,255,1417,1,0,0,0,257,1423,1,0,0,0,259,1428,1,0, +0,0,261,1436,1,0,0,0,263,1440,1,0,0,0,265,1444,1,0,0,0,267,1449,1,0,0,0, +269,1454,1,0,0,0,271,1457,1,0,0,0,273,1462,1,0,0,0,275,1472,1,0,0,0,277, +1476,1,0,0,0,279,1481,1,0,0,0,281,1488,1,0,0,0,283,1494,1,0,0,0,285,1497, +1,0,0,0,287,1504,1,0,0,0,289,1507,1,0,0,0,291,1512,1,0,0,0,293,1519,1,0, +0,0,295,1522,1,0,0,0,297,1528,1,0,0,0,299,1539,1,0,0,0,301,1545,1,0,0,0, +303,1552,1,0,0,0,305,1557,1,0,0,0,307,1567,1,0,0,0,309,1578,1,0,0,0,311, +1587,1,0,0,0,313,1597,1,0,0,0,315,1605,1,0,0,0,317,1613,1,0,0,0,319,1624, +1,0,0,0,321,1635,1,0,0,0,323,1641,1,0,0,0,325,1647,1,0,0,0,327,1652,1,0, +0,0,329,1662,1,0,0,0,331,1670,1,0,0,0,333,1675,1,0,0,0,335,1682,1,0,0,0, +337,1693,1,0,0,0,339,1701,1,0,0,0,341,1707,1,0,0,0,343,1715,1,0,0,0,345, +1724,1,0,0,0,347,1731,1,0,0,0,349,1739,1,0,0,0,351,1746,1,0,0,0,353,1752, +1,0,0,0,355,1757,1,0,0,0,357,1763,1,0,0,0,359,1772,1,0,0,0,361,1779,1,0, +0,0,363,1783,1,0,0,0,365,1788,1,0,0,0,367,1795,1,0,0,0,369,1803,1,0,0,0, +371,1810,1,0,0,0,373,1819,1,0,0,0,375,1826,1,0,0,0,377,1839,1,0,0,0,379, +1847,1,0,0,0,381,1851,1,0,0,0,383,1856,1,0,0,0,385,1861,1,0,0,0,387,1866, +1,0,0,0,389,1870,1,0,0,0,391,1876,1,0,0,0,393,1882,1,0,0,0,395,1892,1,0, +0,0,397,1899,1,0,0,0,399,1911,1,0,0,0,401,1926,1,0,0,0,403,1932,1,0,0,0, +405,1939,1,0,0,0,407,1951,1,0,0,0,409,1955,1,0,0,0,411,1965,1,0,0,0,413, +1970,1,0,0,0,415,1975,1,0,0,0,417,1980,1,0,0,0,419,1990,1,0,0,0,421,1993, +1,0,0,0,423,2005,1,0,0,0,425,2010,1,0,0,0,427,2019,1,0,0,0,429,2028,1,0, +0,0,431,2033,1,0,0,0,433,2041,1,0,0,0,435,2051,1,0,0,0,437,2063,1,0,0,0, +439,2069,1,0,0,0,441,2076,1,0,0,0,443,2083,1,0,0,0,445,2090,1,0,0,0,447, +2094,1,0,0,0,449,2099,1,0,0,0,451,2105,1,0,0,0,453,2114,1,0,0,0,455,2121, +1,0,0,0,457,2129,1,0,0,0,459,2137,1,0,0,0,461,2142,1,0,0,0,463,2147,1,0, +0,0,465,2153,1,0,0,0,467,2158,1,0,0,0,469,2163,1,0,0,0,471,2169,1,0,0,0, +473,2174,1,0,0,0,475,2179,1,0,0,0,477,2185,1,0,0,0,479,2187,1,0,0,0,481, +2189,1,0,0,0,483,2192,1,0,0,0,485,2194,1,0,0,0,487,2197,1,0,0,0,489,2199, +1,0,0,0,491,2201,1,0,0,0,493,2203,1,0,0,0,495,2205,1,0,0,0,497,2207,1,0, +0,0,499,2210,1,0,0,0,501,2221,1,0,0,0,503,2235,1,0,0,0,505,2247,1,0,0,0, +507,2269,1,0,0,0,509,2295,1,0,0,0,511,2299,1,0,0,0,513,2309,1,0,0,0,515, +2317,1,0,0,0,517,2328,1,0,0,0,519,2339,1,0,0,0,521,2362,1,0,0,0,523,2390, +1,0,0,0,525,2408,1,0,0,0,527,2417,1,0,0,0,529,2419,1,0,0,0,531,2421,1,0, +0,0,533,2438,1,0,0,0,535,2453,1,0,0,0,537,2459,1,0,0,0,539,540,5,46,0,0, +540,2,1,0,0,0,541,542,5,40,0,0,542,4,1,0,0,0,543,544,5,41,0,0,544,6,1,0, +0,0,545,546,5,44,0,0,546,8,1,0,0,0,547,548,5,63,0,0,548,10,1,0,0,0,549,550, +5,45,0,0,550,551,5,62,0,0,551,12,1,0,0,0,552,553,5,91,0,0,553,14,1,0,0,0, +554,555,5,93,0,0,555,16,1,0,0,0,556,557,5,61,0,0,557,558,5,62,0,0,558,18, +1,0,0,0,559,560,5,65,0,0,560,561,5,68,0,0,561,562,5,68,0,0,562,20,1,0,0, +0,563,564,5,65,0,0,564,565,5,68,0,0,565,566,5,77,0,0,566,567,5,73,0,0,567, +568,5,78,0,0,568,22,1,0,0,0,569,570,5,65,0,0,570,571,5,76,0,0,571,572,5, +76,0,0,572,24,1,0,0,0,573,574,5,65,0,0,574,575,5,76,0,0,575,576,5,84,0,0, +576,577,5,69,0,0,577,578,5,82,0,0,578,26,1,0,0,0,579,580,5,65,0,0,580,581, +5,78,0,0,581,582,5,65,0,0,582,583,5,76,0,0,583,584,5,89,0,0,584,585,5,90, +0,0,585,586,5,69,0,0,586,28,1,0,0,0,587,588,5,65,0,0,588,589,5,78,0,0,589, +590,5,68,0,0,590,30,1,0,0,0,591,592,5,65,0,0,592,593,5,78,0,0,593,594,5, +89,0,0,594,32,1,0,0,0,595,596,5,65,0,0,596,597,5,82,0,0,597,598,5,82,0,0, +598,599,5,65,0,0,599,600,5,89,0,0,600,34,1,0,0,0,601,602,5,65,0,0,602,603, +5,83,0,0,603,36,1,0,0,0,604,605,5,65,0,0,605,606,5,83,0,0,606,607,5,67,0, +0,607,38,1,0,0,0,608,609,5,65,0,0,609,610,5,84,0,0,610,40,1,0,0,0,611,612, +5,66,0,0,612,613,5,69,0,0,613,614,5,70,0,0,614,615,5,79,0,0,615,616,5,82, +0,0,616,617,5,69,0,0,617,42,1,0,0,0,618,619,5,66,0,0,619,620,5,69,0,0,620, +621,5,82,0,0,621,622,5,78,0,0,622,623,5,79,0,0,623,624,5,85,0,0,624,625, +5,76,0,0,625,626,5,76,0,0,626,627,5,73,0,0,627,44,1,0,0,0,628,629,5,66,0, +0,629,630,5,69,0,0,630,631,5,84,0,0,631,632,5,87,0,0,632,633,5,69,0,0,633, +634,5,69,0,0,634,635,5,78,0,0,635,46,1,0,0,0,636,637,5,66,0,0,637,638,5, +82,0,0,638,639,5,65,0,0,639,640,5,78,0,0,640,641,5,67,0,0,641,642,5,72,0, +0,642,48,1,0,0,0,643,644,5,66,0,0,644,645,5,89,0,0,645,50,1,0,0,0,646,647, +5,67,0,0,647,648,5,65,0,0,648,649,5,76,0,0,649,650,5,76,0,0,650,52,1,0,0, +0,651,652,5,67,0,0,652,653,5,65,0,0,653,654,5,76,0,0,654,655,5,76,0,0,655, +656,5,69,0,0,656,657,5,68,0,0,657,54,1,0,0,0,658,659,5,67,0,0,659,660,5, +65,0,0,660,661,5,83,0,0,661,662,5,67,0,0,662,663,5,65,0,0,663,664,5,68,0, +0,664,665,5,69,0,0,665,56,1,0,0,0,666,667,5,67,0,0,667,668,5,65,0,0,668, +669,5,83,0,0,669,670,5,69,0,0,670,58,1,0,0,0,671,672,5,67,0,0,672,673,5, +65,0,0,673,674,5,83,0,0,674,675,5,84,0,0,675,60,1,0,0,0,676,677,5,67,0,0, +677,678,5,65,0,0,678,679,5,84,0,0,679,680,5,65,0,0,680,681,5,76,0,0,681, +682,5,79,0,0,682,683,5,71,0,0,683,684,5,83,0,0,684,62,1,0,0,0,685,686,5, +67,0,0,686,687,5,79,0,0,687,688,5,76,0,0,688,689,5,85,0,0,689,690,5,77,0, +0,690,691,5,78,0,0,691,64,1,0,0,0,692,693,5,67,0,0,693,694,5,79,0,0,694, +695,5,76,0,0,695,696,5,85,0,0,696,697,5,77,0,0,697,698,5,78,0,0,698,699, +5,83,0,0,699,66,1,0,0,0,700,701,5,67,0,0,701,702,5,79,0,0,702,703,5,77,0, +0,703,704,5,77,0,0,704,705,5,69,0,0,705,706,5,78,0,0,706,707,5,84,0,0,707, +68,1,0,0,0,708,709,5,67,0,0,709,710,5,79,0,0,710,711,5,77,0,0,711,712,5, +77,0,0,712,713,5,73,0,0,713,714,5,84,0,0,714,70,1,0,0,0,715,716,5,67,0,0, +716,717,5,79,0,0,717,718,5,77,0,0,718,719,5,77,0,0,719,720,5,73,0,0,720, +721,5,84,0,0,721,722,5,84,0,0,722,723,5,69,0,0,723,724,5,68,0,0,724,72,1, +0,0,0,725,726,5,67,0,0,726,727,5,79,0,0,727,728,5,78,0,0,728,729,5,83,0, +0,729,730,5,84,0,0,730,731,5,82,0,0,731,732,5,65,0,0,732,733,5,73,0,0,733, +734,5,78,0,0,734,735,5,84,0,0,735,74,1,0,0,0,736,737,5,67,0,0,737,738,5, +82,0,0,738,739,5,69,0,0,739,740,5,65,0,0,740,741,5,84,0,0,741,742,5,69,0, +0,742,76,1,0,0,0,743,744,5,67,0,0,744,745,5,79,0,0,745,746,5,80,0,0,746, +747,5,65,0,0,747,748,5,82,0,0,748,749,5,84,0,0,749,750,5,73,0,0,750,751, +5,84,0,0,751,752,5,73,0,0,752,753,5,79,0,0,753,754,5,78,0,0,754,78,1,0,0, +0,755,756,5,67,0,0,756,757,5,82,0,0,757,758,5,79,0,0,758,759,5,83,0,0,759, +760,5,83,0,0,760,80,1,0,0,0,761,762,5,67,0,0,762,763,5,85,0,0,763,764,5, +66,0,0,764,765,5,69,0,0,765,82,1,0,0,0,766,767,5,67,0,0,767,768,5,85,0,0, +768,769,5,82,0,0,769,770,5,82,0,0,770,771,5,69,0,0,771,772,5,78,0,0,772, +773,5,84,0,0,773,84,1,0,0,0,774,775,5,67,0,0,775,776,5,85,0,0,776,777,5, +82,0,0,777,778,5,82,0,0,778,779,5,69,0,0,779,780,5,78,0,0,780,781,5,84,0, +0,781,782,5,95,0,0,782,783,5,68,0,0,783,784,5,65,0,0,784,785,5,84,0,0,785, +786,5,69,0,0,786,86,1,0,0,0,787,788,5,67,0,0,788,789,5,85,0,0,789,790,5, +82,0,0,790,791,5,82,0,0,791,792,5,69,0,0,792,793,5,78,0,0,793,794,5,84,0, +0,794,795,5,95,0,0,795,796,5,82,0,0,796,797,5,79,0,0,797,798,5,76,0,0,798, +799,5,69,0,0,799,88,1,0,0,0,800,801,5,67,0,0,801,802,5,85,0,0,802,803,5, +82,0,0,803,804,5,82,0,0,804,805,5,69,0,0,805,806,5,78,0,0,806,807,5,84,0, +0,807,808,5,95,0,0,808,809,5,84,0,0,809,810,5,73,0,0,810,811,5,77,0,0,811, +812,5,69,0,0,812,90,1,0,0,0,813,814,5,67,0,0,814,815,5,85,0,0,815,816,5, +82,0,0,816,817,5,82,0,0,817,818,5,69,0,0,818,819,5,78,0,0,819,820,5,84,0, +0,820,821,5,95,0,0,821,822,5,84,0,0,822,823,5,73,0,0,823,824,5,77,0,0,824, +825,5,69,0,0,825,826,5,83,0,0,826,827,5,84,0,0,827,828,5,65,0,0,828,829, +5,77,0,0,829,830,5,80,0,0,830,92,1,0,0,0,831,832,5,67,0,0,832,833,5,85,0, +0,833,834,5,82,0,0,834,835,5,82,0,0,835,836,5,69,0,0,836,837,5,78,0,0,837, +838,5,84,0,0,838,839,5,95,0,0,839,840,5,85,0,0,840,841,5,83,0,0,841,842, +5,69,0,0,842,843,5,82,0,0,843,94,1,0,0,0,844,845,5,68,0,0,845,846,5,65,0, +0,846,847,5,84,0,0,847,848,5,65,0,0,848,96,1,0,0,0,849,850,5,68,0,0,850, +851,5,65,0,0,851,852,5,84,0,0,852,853,5,69,0,0,853,98,1,0,0,0,854,855,5, +68,0,0,855,856,5,65,0,0,856,857,5,89,0,0,857,100,1,0,0,0,858,859,5,68,0, +0,859,860,5,69,0,0,860,861,5,65,0,0,861,862,5,76,0,0,862,863,5,76,0,0,863, +864,5,79,0,0,864,865,5,67,0,0,865,866,5,65,0,0,866,867,5,84,0,0,867,868, +5,69,0,0,868,102,1,0,0,0,869,870,5,68,0,0,870,871,5,69,0,0,871,872,5,70, +0,0,872,873,5,73,0,0,873,874,5,78,0,0,874,875,5,69,0,0,875,876,5,82,0,0, +876,104,1,0,0,0,877,878,5,68,0,0,878,879,5,69,0,0,879,880,5,76,0,0,880,881, +5,69,0,0,881,882,5,84,0,0,882,883,5,69,0,0,883,106,1,0,0,0,884,885,5,68, +0,0,885,886,5,69,0,0,886,887,5,83,0,0,887,888,5,67,0,0,888,108,1,0,0,0,889, +890,5,68,0,0,890,891,5,69,0,0,891,892,5,83,0,0,892,893,5,67,0,0,893,894, +5,82,0,0,894,895,5,73,0,0,895,896,5,66,0,0,896,897,5,69,0,0,897,110,1,0, +0,0,898,899,5,68,0,0,899,900,5,69,0,0,900,901,5,83,0,0,901,902,5,67,0,0, +902,903,5,82,0,0,903,904,5,73,0,0,904,905,5,80,0,0,905,906,5,84,0,0,906, +907,5,79,0,0,907,908,5,82,0,0,908,112,1,0,0,0,909,910,5,68,0,0,910,911,5, +69,0,0,911,912,5,84,0,0,912,913,5,69,0,0,913,914,5,82,0,0,914,915,5,77,0, +0,915,916,5,73,0,0,916,917,5,78,0,0,917,918,5,73,0,0,918,919,5,83,0,0,919, +920,5,84,0,0,920,921,5,73,0,0,921,922,5,67,0,0,922,114,1,0,0,0,923,924,5, +68,0,0,924,925,5,73,0,0,925,926,5,83,0,0,926,927,5,65,0,0,927,928,5,66,0, +0,928,929,5,76,0,0,929,930,5,69,0,0,930,931,5,68,0,0,931,116,1,0,0,0,932, +933,5,68,0,0,933,934,5,73,0,0,934,935,5,83,0,0,935,936,5,84,0,0,936,937, +5,73,0,0,937,938,5,78,0,0,938,939,5,67,0,0,939,940,5,84,0,0,940,118,1,0, +0,0,941,942,5,68,0,0,942,943,5,73,0,0,943,944,5,83,0,0,944,945,5,84,0,0, +945,946,5,82,0,0,946,947,5,73,0,0,947,948,5,66,0,0,948,949,5,85,0,0,949, +950,5,84,0,0,950,951,5,69,0,0,951,952,5,68,0,0,952,120,1,0,0,0,953,954,5, +68,0,0,954,955,5,82,0,0,955,956,5,79,0,0,956,957,5,80,0,0,957,122,1,0,0, +0,958,959,5,69,0,0,959,960,5,76,0,0,960,961,5,83,0,0,961,962,5,69,0,0,962, +124,1,0,0,0,963,964,5,69,0,0,964,965,5,77,0,0,965,966,5,80,0,0,966,967,5, +84,0,0,967,968,5,89,0,0,968,126,1,0,0,0,969,970,5,69,0,0,970,971,5,78,0, +0,971,972,5,65,0,0,972,973,5,66,0,0,973,974,5,76,0,0,974,975,5,69,0,0,975, +976,5,68,0,0,976,128,1,0,0,0,977,978,5,69,0,0,978,979,5,78,0,0,979,980,5, +68,0,0,980,130,1,0,0,0,981,982,5,69,0,0,982,983,5,78,0,0,983,984,5,70,0, +0,984,985,5,79,0,0,985,986,5,82,0,0,986,987,5,67,0,0,987,988,5,69,0,0,988, +989,5,68,0,0,989,132,1,0,0,0,990,991,5,69,0,0,991,992,5,83,0,0,992,993,5, +67,0,0,993,994,5,65,0,0,994,995,5,80,0,0,995,996,5,69,0,0,996,134,1,0,0, +0,997,998,5,69,0,0,998,999,5,88,0,0,999,1000,5,67,0,0,1000,1001,5,69,0,0, +1001,1002,5,80,0,0,1002,1003,5,84,0,0,1003,136,1,0,0,0,1004,1005,5,69,0, +0,1005,1006,5,88,0,0,1006,1007,5,67,0,0,1007,1008,5,76,0,0,1008,1009,5,85, +0,0,1009,1010,5,68,0,0,1010,1011,5,73,0,0,1011,1012,5,78,0,0,1012,1013,5, +71,0,0,1013,138,1,0,0,0,1014,1015,5,69,0,0,1015,1016,5,88,0,0,1016,1017, +5,69,0,0,1017,1018,5,67,0,0,1018,1019,5,85,0,0,1019,1020,5,84,0,0,1020,1021, +5,69,0,0,1021,140,1,0,0,0,1022,1023,5,69,0,0,1023,1024,5,88,0,0,1024,1025, +5,73,0,0,1025,1026,5,83,0,0,1026,1027,5,84,0,0,1027,1028,5,83,0,0,1028,142, +1,0,0,0,1029,1030,5,69,0,0,1030,1031,5,88,0,0,1031,1032,5,80,0,0,1032,1033, +5,76,0,0,1033,1034,5,65,0,0,1034,1035,5,73,0,0,1035,1036,5,78,0,0,1036,144, +1,0,0,0,1037,1038,5,69,0,0,1038,1039,5,88,0,0,1039,1040,5,84,0,0,1040,1041, +5,82,0,0,1041,1042,5,65,0,0,1042,1043,5,67,0,0,1043,1044,5,84,0,0,1044,146, +1,0,0,0,1045,1046,5,69,0,0,1046,1047,5,88,0,0,1047,1048,5,84,0,0,1048,1049, +5,69,0,0,1049,1050,5,82,0,0,1050,1051,5,78,0,0,1051,1052,5,65,0,0,1052,1053, +5,76,0,0,1053,148,1,0,0,0,1054,1055,5,70,0,0,1055,1056,5,65,0,0,1056,1057, +5,76,0,0,1057,1058,5,83,0,0,1058,1059,5,69,0,0,1059,150,1,0,0,0,1060,1061, +5,70,0,0,1061,1062,5,69,0,0,1062,1063,5,84,0,0,1063,1064,5,67,0,0,1064,1065, +5,72,0,0,1065,152,1,0,0,0,1066,1067,5,70,0,0,1067,1068,5,73,0,0,1068,1069, +5,76,0,0,1069,1070,5,84,0,0,1070,1071,5,69,0,0,1071,1072,5,82,0,0,1072,154, +1,0,0,0,1073,1074,5,70,0,0,1074,1075,5,73,0,0,1075,1076,5,82,0,0,1076,1077, +5,83,0,0,1077,1078,5,84,0,0,1078,156,1,0,0,0,1079,1080,5,70,0,0,1080,1081, +5,79,0,0,1081,1082,5,76,0,0,1082,1083,5,76,0,0,1083,1084,5,79,0,0,1084,1085, +5,87,0,0,1085,1086,5,73,0,0,1086,1087,5,78,0,0,1087,1088,5,71,0,0,1088,158, +1,0,0,0,1089,1090,5,70,0,0,1090,1091,5,79,0,0,1091,1092,5,82,0,0,1092,160, +1,0,0,0,1093,1094,5,70,0,0,1094,1095,5,79,0,0,1095,1096,5,82,0,0,1096,1097, +5,77,0,0,1097,1098,5,65,0,0,1098,1099,5,84,0,0,1099,162,1,0,0,0,1100,1101, +5,70,0,0,1101,1102,5,82,0,0,1102,1103,5,79,0,0,1103,1104,5,77,0,0,1104,164, +1,0,0,0,1105,1106,5,70,0,0,1106,1107,5,85,0,0,1107,1108,5,76,0,0,1108,1109, +5,76,0,0,1109,166,1,0,0,0,1110,1111,5,70,0,0,1111,1112,5,85,0,0,1112,1113, +5,78,0,0,1113,1114,5,67,0,0,1114,1115,5,84,0,0,1115,1116,5,73,0,0,1116,1117, +5,79,0,0,1117,1118,5,78,0,0,1118,168,1,0,0,0,1119,1120,5,70,0,0,1120,1121, +5,85,0,0,1121,1122,5,78,0,0,1122,1123,5,67,0,0,1123,1124,5,84,0,0,1124,1125, +5,73,0,0,1125,1126,5,79,0,0,1126,1127,5,78,0,0,1127,1128,5,83,0,0,1128,170, +1,0,0,0,1129,1130,5,71,0,0,1130,1131,5,82,0,0,1131,1132,5,65,0,0,1132,1133, +5,78,0,0,1133,1134,5,84,0,0,1134,172,1,0,0,0,1135,1136,5,71,0,0,1136,1137, +5,82,0,0,1137,1138,5,65,0,0,1138,1139,5,78,0,0,1139,1140,5,84,0,0,1140,1141, +5,69,0,0,1141,1142,5,68,0,0,1142,174,1,0,0,0,1143,1144,5,71,0,0,1144,1145, +5,82,0,0,1145,1146,5,65,0,0,1146,1147,5,78,0,0,1147,1148,5,84,0,0,1148,1149, +5,83,0,0,1149,176,1,0,0,0,1150,1151,5,71,0,0,1151,1152,5,82,0,0,1152,1153, +5,65,0,0,1153,1154,5,80,0,0,1154,1155,5,72,0,0,1155,1156,5,86,0,0,1156,1157, +5,73,0,0,1157,1158,5,90,0,0,1158,178,1,0,0,0,1159,1160,5,71,0,0,1160,1161, +5,82,0,0,1161,1162,5,79,0,0,1162,1163,5,85,0,0,1163,1164,5,80,0,0,1164,180, +1,0,0,0,1165,1166,5,71,0,0,1166,1167,5,82,0,0,1167,1168,5,79,0,0,1168,1169, +5,85,0,0,1169,1170,5,80,0,0,1170,1171,5,73,0,0,1171,1172,5,78,0,0,1172,1173, +5,71,0,0,1173,182,1,0,0,0,1174,1175,5,71,0,0,1175,1176,5,82,0,0,1176,1177, +5,79,0,0,1177,1178,5,85,0,0,1178,1179,5,80,0,0,1179,1180,5,83,0,0,1180,184, +1,0,0,0,1181,1182,5,72,0,0,1182,1183,5,65,0,0,1183,1184,5,86,0,0,1184,1185, +5,73,0,0,1185,1186,5,78,0,0,1186,1187,5,71,0,0,1187,186,1,0,0,0,1188,1189, +5,72,0,0,1189,1190,5,79,0,0,1190,1191,5,85,0,0,1191,1192,5,82,0,0,1192,188, +1,0,0,0,1193,1194,5,73,0,0,1194,1195,5,70,0,0,1195,190,1,0,0,0,1196,1197, +5,73,0,0,1197,1198,5,71,0,0,1198,1199,5,78,0,0,1199,1200,5,79,0,0,1200,1201, +5,82,0,0,1201,1202,5,69,0,0,1202,192,1,0,0,0,1203,1204,5,73,0,0,1204,1205, +5,78,0,0,1205,194,1,0,0,0,1206,1207,5,73,0,0,1207,1208,5,78,0,0,1208,1209, +5,67,0,0,1209,1210,5,76,0,0,1210,1211,5,85,0,0,1211,1212,5,68,0,0,1212,1213, +5,73,0,0,1213,1214,5,78,0,0,1214,1215,5,71,0,0,1215,196,1,0,0,0,1216,1217, +5,73,0,0,1217,1218,5,78,0,0,1218,1219,5,78,0,0,1219,1220,5,69,0,0,1220,1221, +5,82,0,0,1221,198,1,0,0,0,1222,1223,5,73,0,0,1223,1224,5,78,0,0,1224,1225, +5,80,0,0,1225,1226,5,85,0,0,1226,1227,5,84,0,0,1227,200,1,0,0,0,1228,1229, +5,73,0,0,1229,1230,5,78,0,0,1230,1231,5,83,0,0,1231,1232,5,69,0,0,1232,1233, +5,82,0,0,1233,1234,5,84,0,0,1234,202,1,0,0,0,1235,1236,5,73,0,0,1236,1237, +5,78,0,0,1237,1238,5,84,0,0,1238,1239,5,69,0,0,1239,1240,5,82,0,0,1240,1241, +5,83,0,0,1241,1242,5,69,0,0,1242,1243,5,67,0,0,1243,1244,5,84,0,0,1244,204, +1,0,0,0,1245,1246,5,73,0,0,1246,1247,5,78,0,0,1247,1248,5,84,0,0,1248,1249, +5,69,0,0,1249,1250,5,82,0,0,1250,1251,5,86,0,0,1251,1252,5,65,0,0,1252,1253, +5,76,0,0,1253,206,1,0,0,0,1254,1255,5,73,0,0,1255,1256,5,78,0,0,1256,1257, +5,84,0,0,1257,1258,5,79,0,0,1258,208,1,0,0,0,1259,1260,5,73,0,0,1260,1261, +5,78,0,0,1261,1262,5,86,0,0,1262,1263,5,79,0,0,1263,1264,5,75,0,0,1264,1265, +5,69,0,0,1265,1266,5,82,0,0,1266,210,1,0,0,0,1267,1268,5,73,0,0,1268,1269, +5,79,0,0,1269,212,1,0,0,0,1270,1271,5,73,0,0,1271,1272,5,83,0,0,1272,214, +1,0,0,0,1273,1274,5,73,0,0,1274,1275,5,83,0,0,1275,1276,5,79,0,0,1276,1277, +5,76,0,0,1277,1278,5,65,0,0,1278,1279,5,84,0,0,1279,1280,5,73,0,0,1280,1281, +5,79,0,0,1281,1282,5,78,0,0,1282,216,1,0,0,0,1283,1284,5,74,0,0,1284,1285, +5,83,0,0,1285,1286,5,79,0,0,1286,1287,5,78,0,0,1287,218,1,0,0,0,1288,1289, +5,74,0,0,1289,1290,5,79,0,0,1290,1291,5,73,0,0,1291,1292,5,78,0,0,1292,220, +1,0,0,0,1293,1294,5,75,0,0,1294,1295,5,69,0,0,1295,1296,5,69,0,0,1296,1297, +5,80,0,0,1297,222,1,0,0,0,1298,1299,5,75,0,0,1299,1300,5,69,0,0,1300,1301, +5,89,0,0,1301,224,1,0,0,0,1302,1303,5,76,0,0,1303,1304,5,65,0,0,1304,1305, +5,78,0,0,1305,1306,5,71,0,0,1306,1307,5,85,0,0,1307,1308,5,65,0,0,1308,1309, +5,71,0,0,1309,1310,5,69,0,0,1310,226,1,0,0,0,1311,1312,5,76,0,0,1312,1313, +5,65,0,0,1313,1314,5,83,0,0,1314,1315,5,84,0,0,1315,228,1,0,0,0,1316,1317, +5,76,0,0,1317,1318,5,65,0,0,1318,1319,5,84,0,0,1319,1320,5,69,0,0,1320,1321, +5,82,0,0,1321,1322,5,65,0,0,1322,1323,5,76,0,0,1323,230,1,0,0,0,1324,1325, +5,76,0,0,1325,1326,5,69,0,0,1326,1327,5,70,0,0,1327,1328,5,84,0,0,1328,232, +1,0,0,0,1329,1330,5,76,0,0,1330,1331,5,69,0,0,1331,1332,5,86,0,0,1332,1333, +5,69,0,0,1333,1334,5,76,0,0,1334,234,1,0,0,0,1335,1336,5,76,0,0,1336,1337, +5,73,0,0,1337,1338,5,75,0,0,1338,1339,5,69,0,0,1339,236,1,0,0,0,1340,1341, +5,76,0,0,1341,1342,5,73,0,0,1342,1343,5,77,0,0,1343,1344,5,73,0,0,1344,1345, +5,84,0,0,1345,238,1,0,0,0,1346,1347,5,76,0,0,1347,1348,5,79,0,0,1348,1349, +5,67,0,0,1349,1350,5,65,0,0,1350,1351,5,76,0,0,1351,1352,5,84,0,0,1352,1353, +5,73,0,0,1353,1354,5,77,0,0,1354,1355,5,69,0,0,1355,240,1,0,0,0,1356,1357, +5,76,0,0,1357,1358,5,79,0,0,1358,1359,5,67,0,0,1359,1360,5,65,0,0,1360,1361, +5,76,0,0,1361,1362,5,84,0,0,1362,1363,5,73,0,0,1363,1364,5,77,0,0,1364,1365, +5,69,0,0,1365,1366,5,83,0,0,1366,1367,5,84,0,0,1367,1368,5,65,0,0,1368,1369, +5,77,0,0,1369,1370,5,80,0,0,1370,242,1,0,0,0,1371,1372,5,76,0,0,1372,1373, +5,79,0,0,1373,1374,5,71,0,0,1374,1375,5,73,0,0,1375,1376,5,67,0,0,1376,1377, +5,65,0,0,1377,1378,5,76,0,0,1378,244,1,0,0,0,1379,1380,5,77,0,0,1380,1381, +5,65,0,0,1381,1382,5,80,0,0,1382,246,1,0,0,0,1383,1384,5,77,0,0,1384,1385, +5,65,0,0,1385,1386,5,84,0,0,1386,1387,5,67,0,0,1387,1388,5,72,0,0,1388,1389, +5,69,0,0,1389,1390,5,68,0,0,1390,248,1,0,0,0,1391,1392,5,77,0,0,1392,1393, +5,65,0,0,1393,1394,5,84,0,0,1394,1395,5,69,0,0,1395,1396,5,82,0,0,1396,1397, +5,73,0,0,1397,1398,5,65,0,0,1398,1399,5,76,0,0,1399,1400,5,73,0,0,1400,1401, +5,90,0,0,1401,1402,5,69,0,0,1402,1403,5,68,0,0,1403,250,1,0,0,0,1404,1405, +5,77,0,0,1405,1406,5,69,0,0,1406,1407,5,82,0,0,1407,1408,5,71,0,0,1408,1409, +5,69,0,0,1409,252,1,0,0,0,1410,1411,5,77,0,0,1411,1412,5,73,0,0,1412,1413, +5,78,0,0,1413,1414,5,85,0,0,1414,1415,5,84,0,0,1415,1416,5,69,0,0,1416,254, +1,0,0,0,1417,1418,5,77,0,0,1418,1419,5,79,0,0,1419,1420,5,78,0,0,1420,1421, +5,84,0,0,1421,1422,5,72,0,0,1422,256,1,0,0,0,1423,1424,5,78,0,0,1424,1425, +5,65,0,0,1425,1426,5,77,0,0,1426,1427,5,69,0,0,1427,258,1,0,0,0,1428,1429, +5,78,0,0,1429,1430,5,65,0,0,1430,1431,5,84,0,0,1431,1432,5,85,0,0,1432,1433, +5,82,0,0,1433,1434,5,65,0,0,1434,1435,5,76,0,0,1435,260,1,0,0,0,1436,1437, +5,78,0,0,1437,1438,5,70,0,0,1438,1439,5,67,0,0,1439,262,1,0,0,0,1440,1441, +5,78,0,0,1441,1442,5,70,0,0,1442,1443,5,68,0,0,1443,264,1,0,0,0,1444,1445, +5,78,0,0,1445,1446,5,70,0,0,1446,1447,5,75,0,0,1447,1448,5,67,0,0,1448,266, +1,0,0,0,1449,1450,5,78,0,0,1450,1451,5,70,0,0,1451,1452,5,75,0,0,1452,1453, +5,68,0,0,1453,268,1,0,0,0,1454,1455,5,78,0,0,1455,1456,5,79,0,0,1456,270, +1,0,0,0,1457,1458,5,78,0,0,1458,1459,5,79,0,0,1459,1460,5,78,0,0,1460,1461, +5,69,0,0,1461,272,1,0,0,0,1462,1463,5,78,0,0,1463,1464,5,79,0,0,1464,1465, +5,82,0,0,1465,1466,5,77,0,0,1466,1467,5,65,0,0,1467,1468,5,76,0,0,1468,1469, +5,73,0,0,1469,1470,5,90,0,0,1470,1471,5,69,0,0,1471,274,1,0,0,0,1472,1473, +5,78,0,0,1473,1474,5,79,0,0,1474,1475,5,84,0,0,1475,276,1,0,0,0,1476,1477, +5,78,0,0,1477,1478,5,85,0,0,1478,1479,5,76,0,0,1479,1480,5,76,0,0,1480,278, +1,0,0,0,1481,1482,5,78,0,0,1482,1483,5,85,0,0,1483,1484,5,76,0,0,1484,1485, +5,76,0,0,1485,1486,5,73,0,0,1486,1487,5,70,0,0,1487,280,1,0,0,0,1488,1489, +5,78,0,0,1489,1490,5,85,0,0,1490,1491,5,76,0,0,1491,1492,5,76,0,0,1492,1493, +5,83,0,0,1493,282,1,0,0,0,1494,1495,5,79,0,0,1495,1496,5,70,0,0,1496,284, +1,0,0,0,1497,1498,5,79,0,0,1498,1499,5,70,0,0,1499,1500,5,70,0,0,1500,1501, +5,83,0,0,1501,1502,5,69,0,0,1502,1503,5,84,0,0,1503,286,1,0,0,0,1504,1505, +5,79,0,0,1505,1506,5,78,0,0,1506,288,1,0,0,0,1507,1508,5,79,0,0,1508,1509, +5,78,0,0,1509,1510,5,76,0,0,1510,1511,5,89,0,0,1511,290,1,0,0,0,1512,1513, +5,79,0,0,1513,1514,5,80,0,0,1514,1515,5,84,0,0,1515,1516,5,73,0,0,1516,1517, +5,79,0,0,1517,1518,5,78,0,0,1518,292,1,0,0,0,1519,1520,5,79,0,0,1520,1521, +5,82,0,0,1521,294,1,0,0,0,1522,1523,5,79,0,0,1523,1524,5,82,0,0,1524,1525, +5,68,0,0,1525,1526,5,69,0,0,1526,1527,5,82,0,0,1527,296,1,0,0,0,1528,1529, +5,79,0,0,1529,1530,5,82,0,0,1530,1531,5,68,0,0,1531,1532,5,73,0,0,1532,1533, +5,78,0,0,1533,1534,5,65,0,0,1534,1535,5,76,0,0,1535,1536,5,73,0,0,1536,1537, +5,84,0,0,1537,1538,5,89,0,0,1538,298,1,0,0,0,1539,1540,5,79,0,0,1540,1541, +5,85,0,0,1541,1542,5,84,0,0,1542,1543,5,69,0,0,1543,1544,5,82,0,0,1544,300, +1,0,0,0,1545,1546,5,79,0,0,1546,1547,5,85,0,0,1547,1548,5,84,0,0,1548,1549, +5,80,0,0,1549,1550,5,85,0,0,1550,1551,5,84,0,0,1551,302,1,0,0,0,1552,1553, +5,79,0,0,1553,1554,5,86,0,0,1554,1555,5,69,0,0,1555,1556,5,82,0,0,1556,304, +1,0,0,0,1557,1558,5,80,0,0,1558,1559,5,65,0,0,1559,1560,5,82,0,0,1560,1561, +5,84,0,0,1561,1562,5,73,0,0,1562,1563,5,84,0,0,1563,1564,5,73,0,0,1564,1565, +5,79,0,0,1565,1566,5,78,0,0,1566,306,1,0,0,0,1567,1568,5,80,0,0,1568,1569, +5,65,0,0,1569,1570,5,82,0,0,1570,1571,5,84,0,0,1571,1572,5,73,0,0,1572,1573, +5,84,0,0,1573,1574,5,73,0,0,1574,1575,5,79,0,0,1575,1576,5,78,0,0,1576,1577, +5,83,0,0,1577,308,1,0,0,0,1578,1579,5,80,0,0,1579,1580,5,79,0,0,1580,1581, +5,83,0,0,1581,1582,5,73,0,0,1582,1583,5,84,0,0,1583,1584,5,73,0,0,1584,1585, +5,79,0,0,1585,1586,5,78,0,0,1586,310,1,0,0,0,1587,1588,5,80,0,0,1588,1589, +5,82,0,0,1589,1590,5,69,0,0,1590,1591,5,67,0,0,1591,1592,5,69,0,0,1592,1593, +5,68,0,0,1593,1594,5,73,0,0,1594,1595,5,78,0,0,1595,1596,5,71,0,0,1596,312, +1,0,0,0,1597,1598,5,80,0,0,1598,1599,5,82,0,0,1599,1600,5,69,0,0,1600,1601, +5,80,0,0,1601,1602,5,65,0,0,1602,1603,5,82,0,0,1603,1604,5,69,0,0,1604,314, +1,0,0,0,1605,1606,5,80,0,0,1606,1607,5,82,0,0,1607,1608,5,73,0,0,1608,1609, +5,77,0,0,1609,1610,5,65,0,0,1610,1611,5,82,0,0,1611,1612,5,89,0,0,1612,316, +1,0,0,0,1613,1614,5,80,0,0,1614,1615,5,82,0,0,1615,1616,5,73,0,0,1616,1617, +5,86,0,0,1617,1618,5,73,0,0,1618,1619,5,76,0,0,1619,1620,5,69,0,0,1620,1621, +5,71,0,0,1621,1622,5,69,0,0,1622,1623,5,83,0,0,1623,318,1,0,0,0,1624,1625, +5,80,0,0,1625,1626,5,82,0,0,1626,1627,5,79,0,0,1627,1628,5,80,0,0,1628,1629, +5,69,0,0,1629,1630,5,82,0,0,1630,1631,5,84,0,0,1631,1632,5,73,0,0,1632,1633, +5,69,0,0,1633,1634,5,83,0,0,1634,320,1,0,0,0,1635,1636,5,80,0,0,1636,1637, +5,82,0,0,1637,1638,5,85,0,0,1638,1639,5,78,0,0,1639,1640,5,69,0,0,1640,322, +1,0,0,0,1641,1642,5,82,0,0,1642,1643,5,65,0,0,1643,1644,5,78,0,0,1644,1645, +5,71,0,0,1645,1646,5,69,0,0,1646,324,1,0,0,0,1647,1648,5,82,0,0,1648,1649, +5,69,0,0,1649,1650,5,65,0,0,1650,1651,5,68,0,0,1651,326,1,0,0,0,1652,1653, +5,82,0,0,1653,1654,5,69,0,0,1654,1655,5,67,0,0,1655,1656,5,85,0,0,1656,1657, +5,82,0,0,1657,1658,5,83,0,0,1658,1659,5,73,0,0,1659,1660,5,86,0,0,1660,1661, +5,69,0,0,1661,328,1,0,0,0,1662,1663,5,82,0,0,1663,1664,5,69,0,0,1664,1665, +5,70,0,0,1665,1666,5,82,0,0,1666,1667,5,69,0,0,1667,1668,5,83,0,0,1668,1669, +5,72,0,0,1669,330,1,0,0,0,1670,1671,5,82,0,0,1671,1672,5,69,0,0,1672,1673, +5,76,0,0,1673,1674,5,89,0,0,1674,332,1,0,0,0,1675,1676,5,82,0,0,1676,1677, +5,69,0,0,1677,1678,5,78,0,0,1678,1679,5,65,0,0,1679,1680,5,77,0,0,1680,1681, +5,69,0,0,1681,334,1,0,0,0,1682,1683,5,82,0,0,1683,1684,5,69,0,0,1684,1685, +5,80,0,0,1685,1686,5,69,0,0,1686,1687,5,65,0,0,1687,1688,5,84,0,0,1688,1689, +5,65,0,0,1689,1690,5,66,0,0,1690,1691,5,76,0,0,1691,1692,5,69,0,0,1692,336, +1,0,0,0,1693,1694,5,82,0,0,1694,1695,5,69,0,0,1695,1696,5,80,0,0,1696,1697, +5,76,0,0,1697,1698,5,65,0,0,1698,1699,5,67,0,0,1699,1700,5,69,0,0,1700,338, +1,0,0,0,1701,1702,5,82,0,0,1702,1703,5,69,0,0,1703,1704,5,83,0,0,1704,1705, +5,69,0,0,1705,1706,5,84,0,0,1706,340,1,0,0,0,1707,1708,5,82,0,0,1708,1709, +5,69,0,0,1709,1710,5,83,0,0,1710,1711,5,80,0,0,1711,1712,5,69,0,0,1712,1713, +5,67,0,0,1713,1714,5,84,0,0,1714,342,1,0,0,0,1715,1716,5,82,0,0,1716,1717, +5,69,0,0,1717,1718,5,83,0,0,1718,1719,5,84,0,0,1719,1720,5,82,0,0,1720,1721, +5,73,0,0,1721,1722,5,67,0,0,1722,1723,5,84,0,0,1723,344,1,0,0,0,1724,1725, +5,82,0,0,1725,1726,5,69,0,0,1726,1727,5,84,0,0,1727,1728,5,85,0,0,1728,1729, +5,82,0,0,1729,1730,5,78,0,0,1730,346,1,0,0,0,1731,1732,5,82,0,0,1732,1733, +5,69,0,0,1733,1734,5,84,0,0,1734,1735,5,85,0,0,1735,1736,5,82,0,0,1736,1737, +5,78,0,0,1737,1738,5,83,0,0,1738,348,1,0,0,0,1739,1740,5,82,0,0,1740,1741, +5,69,0,0,1741,1742,5,86,0,0,1742,1743,5,79,0,0,1743,1744,5,75,0,0,1744,1745, +5,69,0,0,1745,350,1,0,0,0,1746,1747,5,82,0,0,1747,1748,5,73,0,0,1748,1749, +5,71,0,0,1749,1750,5,72,0,0,1750,1751,5,84,0,0,1751,352,1,0,0,0,1752,1753, +5,82,0,0,1753,1754,5,79,0,0,1754,1755,5,76,0,0,1755,1756,5,69,0,0,1756,354, +1,0,0,0,1757,1758,5,82,0,0,1758,1759,5,79,0,0,1759,1760,5,76,0,0,1760,1761, +5,69,0,0,1761,1762,5,83,0,0,1762,356,1,0,0,0,1763,1764,5,82,0,0,1764,1765, +5,79,0,0,1765,1766,5,76,0,0,1766,1767,5,76,0,0,1767,1768,5,66,0,0,1768,1769, +5,65,0,0,1769,1770,5,67,0,0,1770,1771,5,75,0,0,1771,358,1,0,0,0,1772,1773, +5,82,0,0,1773,1774,5,79,0,0,1774,1775,5,76,0,0,1775,1776,5,76,0,0,1776,1777, +5,85,0,0,1777,1778,5,80,0,0,1778,360,1,0,0,0,1779,1780,5,82,0,0,1780,1781, +5,79,0,0,1781,1782,5,87,0,0,1782,362,1,0,0,0,1783,1784,5,82,0,0,1784,1785, +5,79,0,0,1785,1786,5,87,0,0,1786,1787,5,83,0,0,1787,364,1,0,0,0,1788,1789, +5,83,0,0,1789,1790,5,67,0,0,1790,1791,5,72,0,0,1791,1792,5,69,0,0,1792,1793, +5,77,0,0,1793,1794,5,65,0,0,1794,366,1,0,0,0,1795,1796,5,83,0,0,1796,1797, +5,67,0,0,1797,1798,5,72,0,0,1798,1799,5,69,0,0,1799,1800,5,77,0,0,1800,1801, +5,65,0,0,1801,1802,5,83,0,0,1802,368,1,0,0,0,1803,1804,5,83,0,0,1804,1805, +5,69,0,0,1805,1806,5,67,0,0,1806,1807,5,79,0,0,1807,1808,5,78,0,0,1808,1809, +5,68,0,0,1809,370,1,0,0,0,1810,1811,5,83,0,0,1811,1812,5,69,0,0,1812,1813, +5,67,0,0,1813,1814,5,85,0,0,1814,1815,5,82,0,0,1815,1816,5,73,0,0,1816,1817, +5,84,0,0,1817,1818,5,89,0,0,1818,372,1,0,0,0,1819,1820,5,83,0,0,1820,1821, +5,69,0,0,1821,1822,5,76,0,0,1822,1823,5,69,0,0,1823,1824,5,67,0,0,1824,1825, +5,84,0,0,1825,374,1,0,0,0,1826,1827,5,83,0,0,1827,1828,5,69,0,0,1828,1829, +5,82,0,0,1829,1830,5,73,0,0,1830,1831,5,65,0,0,1831,1832,5,76,0,0,1832,1833, +5,73,0,0,1833,1834,5,90,0,0,1834,1835,5,65,0,0,1835,1836,5,66,0,0,1836,1837, +5,76,0,0,1837,1838,5,69,0,0,1838,376,1,0,0,0,1839,1840,5,83,0,0,1840,1841, +5,69,0,0,1841,1842,5,83,0,0,1842,1843,5,83,0,0,1843,1844,5,73,0,0,1844,1845, +5,79,0,0,1845,1846,5,78,0,0,1846,378,1,0,0,0,1847,1848,5,83,0,0,1848,1849, +5,69,0,0,1849,1850,5,84,0,0,1850,380,1,0,0,0,1851,1852,5,83,0,0,1852,1853, +5,69,0,0,1853,1854,5,84,0,0,1854,1855,5,83,0,0,1855,382,1,0,0,0,1856,1857, +5,83,0,0,1857,1858,5,72,0,0,1858,1859,5,79,0,0,1859,1860,5,87,0,0,1860,384, +1,0,0,0,1861,1862,5,83,0,0,1862,1863,5,79,0,0,1863,1864,5,77,0,0,1864,1865, +5,69,0,0,1865,386,1,0,0,0,1866,1867,5,83,0,0,1867,1868,5,81,0,0,1868,1869, +5,76,0,0,1869,388,1,0,0,0,1870,1871,5,83,0,0,1871,1872,5,84,0,0,1872,1873, +5,65,0,0,1873,1874,5,82,0,0,1874,1875,5,84,0,0,1875,390,1,0,0,0,1876,1877, +5,83,0,0,1877,1878,5,84,0,0,1878,1879,5,65,0,0,1879,1880,5,84,0,0,1880,1881, +5,83,0,0,1881,392,1,0,0,0,1882,1883,5,83,0,0,1883,1884,5,85,0,0,1884,1885, +5,66,0,0,1885,1886,5,83,0,0,1886,1887,5,84,0,0,1887,1888,5,82,0,0,1888,1889, +5,73,0,0,1889,1890,5,78,0,0,1890,1891,5,71,0,0,1891,394,1,0,0,0,1892,1893, +5,83,0,0,1893,1894,5,89,0,0,1894,1895,5,83,0,0,1895,1896,5,84,0,0,1896,1897, +5,69,0,0,1897,1898,5,77,0,0,1898,396,1,0,0,0,1899,1900,5,83,0,0,1900,1901, +5,89,0,0,1901,1902,5,83,0,0,1902,1903,5,84,0,0,1903,1904,5,69,0,0,1904,1905, +5,77,0,0,1905,1906,5,95,0,0,1906,1907,5,84,0,0,1907,1908,5,73,0,0,1908,1909, +5,77,0,0,1909,1910,5,69,0,0,1910,398,1,0,0,0,1911,1912,5,83,0,0,1912,1913, +5,89,0,0,1913,1914,5,83,0,0,1914,1915,5,84,0,0,1915,1916,5,69,0,0,1916,1917, +5,77,0,0,1917,1918,5,95,0,0,1918,1919,5,86,0,0,1919,1920,5,69,0,0,1920,1921, +5,82,0,0,1921,1922,5,83,0,0,1922,1923,5,73,0,0,1923,1924,5,79,0,0,1924,1925, +5,78,0,0,1925,400,1,0,0,0,1926,1927,5,84,0,0,1927,1928,5,65,0,0,1928,1929, +5,66,0,0,1929,1930,5,76,0,0,1930,1931,5,69,0,0,1931,402,1,0,0,0,1932,1933, +5,84,0,0,1933,1934,5,65,0,0,1934,1935,5,66,0,0,1935,1936,5,76,0,0,1936,1937, +5,69,0,0,1937,1938,5,83,0,0,1938,404,1,0,0,0,1939,1940,5,84,0,0,1940,1941, +5,65,0,0,1941,1942,5,66,0,0,1942,1943,5,76,0,0,1943,1944,5,69,0,0,1944,1945, +5,83,0,0,1945,1946,5,65,0,0,1946,1947,5,77,0,0,1947,1948,5,80,0,0,1948,1949, +5,76,0,0,1949,1950,5,69,0,0,1950,406,1,0,0,0,1951,1952,5,84,0,0,1952,1953, +5,65,0,0,1953,1954,5,71,0,0,1954,408,1,0,0,0,1955,1956,5,84,0,0,1956,1957, +5,69,0,0,1957,1958,5,77,0,0,1958,1959,5,80,0,0,1959,1960,5,79,0,0,1960,1961, +5,82,0,0,1961,1962,5,65,0,0,1962,1963,5,82,0,0,1963,1964,5,89,0,0,1964,410, +1,0,0,0,1965,1966,5,84,0,0,1966,1967,5,69,0,0,1967,1968,5,88,0,0,1968,1969, +5,84,0,0,1969,412,1,0,0,0,1970,1971,5,84,0,0,1971,1972,5,72,0,0,1972,1973, +5,69,0,0,1973,1974,5,78,0,0,1974,414,1,0,0,0,1975,1976,5,84,0,0,1976,1977, +5,73,0,0,1977,1978,5,77,0,0,1978,1979,5,69,0,0,1979,416,1,0,0,0,1980,1981, +5,84,0,0,1981,1982,5,73,0,0,1982,1983,5,77,0,0,1983,1984,5,69,0,0,1984,1985, +5,83,0,0,1985,1986,5,84,0,0,1986,1987,5,65,0,0,1987,1988,5,77,0,0,1988,1989, +5,80,0,0,1989,418,1,0,0,0,1990,1991,5,84,0,0,1991,1992,5,79,0,0,1992,420, +1,0,0,0,1993,1994,5,84,0,0,1994,1995,5,82,0,0,1995,1996,5,65,0,0,1996,1997, +5,78,0,0,1997,1998,5,83,0,0,1998,1999,5,65,0,0,1999,2000,5,67,0,0,2000,2001, +5,84,0,0,2001,2002,5,73,0,0,2002,2003,5,79,0,0,2003,2004,5,78,0,0,2004,422, +1,0,0,0,2005,2006,5,84,0,0,2006,2007,5,82,0,0,2007,2008,5,85,0,0,2008,2009, +5,69,0,0,2009,424,1,0,0,0,2010,2011,5,84,0,0,2011,2012,5,82,0,0,2012,2013, +5,85,0,0,2013,2014,5,78,0,0,2014,2015,5,67,0,0,2015,2016,5,65,0,0,2016,2017, +5,84,0,0,2017,2018,5,69,0,0,2018,426,1,0,0,0,2019,2020,5,84,0,0,2020,2021, +5,82,0,0,2021,2022,5,89,0,0,2022,2023,5,95,0,0,2023,2024,5,67,0,0,2024,2025, +5,65,0,0,2025,2026,5,83,0,0,2026,2027,5,84,0,0,2027,428,1,0,0,0,2028,2029, +5,84,0,0,2029,2030,5,89,0,0,2030,2031,5,80,0,0,2031,2032,5,69,0,0,2032,430, +1,0,0,0,2033,2034,5,85,0,0,2034,2035,5,69,0,0,2035,2036,5,83,0,0,2036,2037, +5,67,0,0,2037,2038,5,65,0,0,2038,2039,5,80,0,0,2039,2040,5,69,0,0,2040,432, +1,0,0,0,2041,2042,5,85,0,0,2042,2043,5,78,0,0,2043,2044,5,66,0,0,2044,2045, +5,79,0,0,2045,2046,5,85,0,0,2046,2047,5,78,0,0,2047,2048,5,68,0,0,2048,2049, +5,69,0,0,2049,2050,5,68,0,0,2050,434,1,0,0,0,2051,2052,5,85,0,0,2052,2053, +5,78,0,0,2053,2054,5,67,0,0,2054,2055,5,79,0,0,2055,2056,5,77,0,0,2056,2057, +5,77,0,0,2057,2058,5,73,0,0,2058,2059,5,84,0,0,2059,2060,5,84,0,0,2060,2061, +5,69,0,0,2061,2062,5,68,0,0,2062,436,1,0,0,0,2063,2064,5,85,0,0,2064,2065, +5,78,0,0,2065,2066,5,73,0,0,2066,2067,5,79,0,0,2067,2068,5,78,0,0,2068,438, +1,0,0,0,2069,2070,5,85,0,0,2070,2071,5,78,0,0,2071,2072,5,73,0,0,2072,2073, +5,81,0,0,2073,2074,5,85,0,0,2074,2075,5,69,0,0,2075,440,1,0,0,0,2076,2077, +5,85,0,0,2077,2078,5,78,0,0,2078,2079,5,78,0,0,2079,2080,5,69,0,0,2080,2081, +5,83,0,0,2081,2082,5,84,0,0,2082,442,1,0,0,0,2083,2084,5,85,0,0,2084,2085, +5,80,0,0,2085,2086,5,68,0,0,2086,2087,5,65,0,0,2087,2088,5,84,0,0,2088,2089, +5,69,0,0,2089,444,1,0,0,0,2090,2091,5,85,0,0,2091,2092,5,83,0,0,2092,2093, +5,69,0,0,2093,446,1,0,0,0,2094,2095,5,85,0,0,2095,2096,5,83,0,0,2096,2097, +5,69,0,0,2097,2098,5,82,0,0,2098,448,1,0,0,0,2099,2100,5,85,0,0,2100,2101, +5,83,0,0,2101,2102,5,73,0,0,2102,2103,5,78,0,0,2103,2104,5,71,0,0,2104,450, +1,0,0,0,2105,2106,5,86,0,0,2106,2107,5,65,0,0,2107,2108,5,76,0,0,2108,2109, +5,73,0,0,2109,2110,5,68,0,0,2110,2111,5,65,0,0,2111,2112,5,84,0,0,2112,2113, +5,69,0,0,2113,452,1,0,0,0,2114,2115,5,86,0,0,2115,2116,5,65,0,0,2116,2117, +5,76,0,0,2117,2118,5,85,0,0,2118,2119,5,69,0,0,2119,2120,5,83,0,0,2120,454, +1,0,0,0,2121,2122,5,86,0,0,2122,2123,5,69,0,0,2123,2124,5,82,0,0,2124,2125, +5,66,0,0,2125,2126,5,79,0,0,2126,2127,5,83,0,0,2127,2128,5,69,0,0,2128,456, +1,0,0,0,2129,2130,5,86,0,0,2130,2131,5,69,0,0,2131,2132,5,82,0,0,2132,2133, +5,83,0,0,2133,2134,5,73,0,0,2134,2135,5,79,0,0,2135,2136,5,78,0,0,2136,458, +1,0,0,0,2137,2138,5,86,0,0,2138,2139,5,73,0,0,2139,2140,5,69,0,0,2140,2141, +5,87,0,0,2141,460,1,0,0,0,2142,2143,5,87,0,0,2143,2144,5,72,0,0,2144,2145, +5,69,0,0,2145,2146,5,78,0,0,2146,462,1,0,0,0,2147,2148,5,87,0,0,2148,2149, +5,72,0,0,2149,2150,5,69,0,0,2150,2151,5,82,0,0,2151,2152,5,69,0,0,2152,464, +1,0,0,0,2153,2154,5,87,0,0,2154,2155,5,73,0,0,2155,2156,5,84,0,0,2156,2157, +5,72,0,0,2157,466,1,0,0,0,2158,2159,5,87,0,0,2159,2160,5,79,0,0,2160,2161, +5,82,0,0,2161,2162,5,75,0,0,2162,468,1,0,0,0,2163,2164,5,87,0,0,2164,2165, +5,82,0,0,2165,2166,5,73,0,0,2166,2167,5,84,0,0,2167,2168,5,69,0,0,2168,470, +1,0,0,0,2169,2170,5,89,0,0,2170,2171,5,69,0,0,2171,2172,5,65,0,0,2172,2173, +5,82,0,0,2173,472,1,0,0,0,2174,2175,5,90,0,0,2175,2176,5,79,0,0,2176,2177, +5,78,0,0,2177,2178,5,69,0,0,2178,474,1,0,0,0,2179,2180,5,61,0,0,2180,476, +1,0,0,0,2181,2182,5,60,0,0,2182,2186,5,62,0,0,2183,2184,5,33,0,0,2184,2186, +5,61,0,0,2185,2181,1,0,0,0,2185,2183,1,0,0,0,2186,478,1,0,0,0,2187,2188, +5,60,0,0,2188,480,1,0,0,0,2189,2190,5,60,0,0,2190,2191,5,61,0,0,2191,482, +1,0,0,0,2192,2193,5,62,0,0,2193,484,1,0,0,0,2194,2195,5,62,0,0,2195,2196, +5,61,0,0,2196,486,1,0,0,0,2197,2198,5,43,0,0,2198,488,1,0,0,0,2199,2200, +5,45,0,0,2200,490,1,0,0,0,2201,2202,5,42,0,0,2202,492,1,0,0,0,2203,2204, +5,47,0,0,2204,494,1,0,0,0,2205,2206,5,37,0,0,2206,496,1,0,0,0,2207,2208, +5,124,0,0,2208,2209,5,124,0,0,2209,498,1,0,0,0,2210,2216,5,39,0,0,2211,2215, +8,0,0,0,2212,2213,5,39,0,0,2213,2215,5,39,0,0,2214,2211,1,0,0,0,2214,2212, +1,0,0,0,2215,2218,1,0,0,0,2216,2214,1,0,0,0,2216,2217,1,0,0,0,2217,2219, +1,0,0,0,2218,2216,1,0,0,0,2219,2220,5,39,0,0,2220,500,1,0,0,0,2221,2222, +5,85,0,0,2222,2223,5,38,0,0,2223,2224,5,39,0,0,2224,2230,1,0,0,0,2225,2229, +8,0,0,0,2226,2227,5,39,0,0,2227,2229,5,39,0,0,2228,2225,1,0,0,0,2228,2226, +1,0,0,0,2229,2232,1,0,0,0,2230,2228,1,0,0,0,2230,2231,1,0,0,0,2231,2233, +1,0,0,0,2232,2230,1,0,0,0,2233,2234,5,39,0,0,2234,502,1,0,0,0,2235,2236, +5,88,0,0,2236,2237,5,39,0,0,2237,2241,1,0,0,0,2238,2240,8,0,0,0,2239,2238, +1,0,0,0,2240,2243,1,0,0,0,2241,2239,1,0,0,0,2241,2242,1,0,0,0,2242,2244, +1,0,0,0,2243,2241,1,0,0,0,2244,2245,5,39,0,0,2245,504,1,0,0,0,2246,2248, +3,527,263,0,2247,2246,1,0,0,0,2248,2249,1,0,0,0,2249,2247,1,0,0,0,2249,2250, +1,0,0,0,2250,506,1,0,0,0,2251,2253,3,527,263,0,2252,2251,1,0,0,0,2253,2254, +1,0,0,0,2254,2252,1,0,0,0,2254,2255,1,0,0,0,2255,2256,1,0,0,0,2256,2260, +5,46,0,0,2257,2259,3,527,263,0,2258,2257,1,0,0,0,2259,2262,1,0,0,0,2260, +2258,1,0,0,0,2260,2261,1,0,0,0,2261,2270,1,0,0,0,2262,2260,1,0,0,0,2263, +2265,5,46,0,0,2264,2266,3,527,263,0,2265,2264,1,0,0,0,2266,2267,1,0,0,0, +2267,2265,1,0,0,0,2267,2268,1,0,0,0,2268,2270,1,0,0,0,2269,2252,1,0,0,0, +2269,2263,1,0,0,0,2270,508,1,0,0,0,2271,2273,3,527,263,0,2272,2271,1,0,0, +0,2273,2274,1,0,0,0,2274,2272,1,0,0,0,2274,2275,1,0,0,0,2275,2283,1,0,0, +0,2276,2280,5,46,0,0,2277,2279,3,527,263,0,2278,2277,1,0,0,0,2279,2282,1, +0,0,0,2280,2278,1,0,0,0,2280,2281,1,0,0,0,2281,2284,1,0,0,0,2282,2280,1, +0,0,0,2283,2276,1,0,0,0,2283,2284,1,0,0,0,2284,2285,1,0,0,0,2285,2286,3, +525,262,0,2286,2296,1,0,0,0,2287,2289,5,46,0,0,2288,2290,3,527,263,0,2289, +2288,1,0,0,0,2290,2291,1,0,0,0,2291,2289,1,0,0,0,2291,2292,1,0,0,0,2292, +2293,1,0,0,0,2293,2294,3,525,262,0,2294,2296,1,0,0,0,2295,2272,1,0,0,0,2295, +2287,1,0,0,0,2296,510,1,0,0,0,2297,2300,3,529,264,0,2298,2300,5,95,0,0,2299, +2297,1,0,0,0,2299,2298,1,0,0,0,2300,2306,1,0,0,0,2301,2305,3,529,264,0,2302, +2305,3,527,263,0,2303,2305,7,1,0,0,2304,2301,1,0,0,0,2304,2302,1,0,0,0,2304, +2303,1,0,0,0,2305,2308,1,0,0,0,2306,2304,1,0,0,0,2306,2307,1,0,0,0,2307, +512,1,0,0,0,2308,2306,1,0,0,0,2309,2313,3,527,263,0,2310,2314,3,529,264, +0,2311,2314,3,527,263,0,2312,2314,7,1,0,0,2313,2310,1,0,0,0,2313,2311,1, +0,0,0,2313,2312,1,0,0,0,2314,2315,1,0,0,0,2315,2313,1,0,0,0,2315,2316,1, +0,0,0,2316,514,1,0,0,0,2317,2323,5,34,0,0,2318,2322,8,2,0,0,2319,2320,5, +34,0,0,2320,2322,5,34,0,0,2321,2318,1,0,0,0,2321,2319,1,0,0,0,2322,2325, +1,0,0,0,2323,2321,1,0,0,0,2323,2324,1,0,0,0,2324,2326,1,0,0,0,2325,2323, +1,0,0,0,2326,2327,5,34,0,0,2327,516,1,0,0,0,2328,2334,5,96,0,0,2329,2333, +8,3,0,0,2330,2331,5,96,0,0,2331,2333,5,96,0,0,2332,2329,1,0,0,0,2332,2330, +1,0,0,0,2333,2336,1,0,0,0,2334,2332,1,0,0,0,2334,2335,1,0,0,0,2335,2337, +1,0,0,0,2336,2334,1,0,0,0,2337,2338,5,96,0,0,2338,518,1,0,0,0,2339,2340, +5,84,0,0,2340,2341,5,73,0,0,2341,2342,5,77,0,0,2342,2343,5,69,0,0,2343,2344, +1,0,0,0,2344,2345,3,535,267,0,2345,2346,5,87,0,0,2346,2347,5,73,0,0,2347, +2348,5,84,0,0,2348,2349,5,72,0,0,2349,2350,1,0,0,0,2350,2351,3,535,267,0, +2351,2352,5,84,0,0,2352,2353,5,73,0,0,2353,2354,5,77,0,0,2354,2355,5,69, +0,0,2355,2356,1,0,0,0,2356,2357,3,535,267,0,2357,2358,5,90,0,0,2358,2359, +5,79,0,0,2359,2360,5,78,0,0,2360,2361,5,69,0,0,2361,520,1,0,0,0,2362,2363, +5,84,0,0,2363,2364,5,73,0,0,2364,2365,5,77,0,0,2365,2366,5,69,0,0,2366,2367, +5,83,0,0,2367,2368,5,84,0,0,2368,2369,5,65,0,0,2369,2370,5,77,0,0,2370,2371, +5,80,0,0,2371,2372,1,0,0,0,2372,2373,3,535,267,0,2373,2374,5,87,0,0,2374, +2375,5,73,0,0,2375,2376,5,84,0,0,2376,2377,5,72,0,0,2377,2378,1,0,0,0,2378, +2379,3,535,267,0,2379,2380,5,84,0,0,2380,2381,5,73,0,0,2381,2382,5,77,0, +0,2382,2383,5,69,0,0,2383,2384,1,0,0,0,2384,2385,3,535,267,0,2385,2386,5, +90,0,0,2386,2387,5,79,0,0,2387,2388,5,78,0,0,2388,2389,5,69,0,0,2389,522, +1,0,0,0,2390,2391,5,68,0,0,2391,2392,5,79,0,0,2392,2393,5,85,0,0,2393,2394, +5,66,0,0,2394,2395,5,76,0,0,2395,2396,5,69,0,0,2396,2397,1,0,0,0,2397,2398, +3,535,267,0,2398,2399,5,80,0,0,2399,2400,5,82,0,0,2400,2401,5,69,0,0,2401, +2402,5,67,0,0,2402,2403,5,73,0,0,2403,2404,5,83,0,0,2404,2405,5,73,0,0,2405, +2406,5,79,0,0,2406,2407,5,78,0,0,2407,524,1,0,0,0,2408,2410,5,69,0,0,2409, +2411,7,4,0,0,2410,2409,1,0,0,0,2410,2411,1,0,0,0,2411,2413,1,0,0,0,2412, +2414,3,527,263,0,2413,2412,1,0,0,0,2414,2415,1,0,0,0,2415,2413,1,0,0,0,2415, +2416,1,0,0,0,2416,526,1,0,0,0,2417,2418,7,5,0,0,2418,528,1,0,0,0,2419,2420, +7,6,0,0,2420,530,1,0,0,0,2421,2422,5,45,0,0,2422,2423,5,45,0,0,2423,2427, +1,0,0,0,2424,2426,8,7,0,0,2425,2424,1,0,0,0,2426,2429,1,0,0,0,2427,2425, +1,0,0,0,2427,2428,1,0,0,0,2428,2431,1,0,0,0,2429,2427,1,0,0,0,2430,2432, +5,13,0,0,2431,2430,1,0,0,0,2431,2432,1,0,0,0,2432,2434,1,0,0,0,2433,2435, +5,10,0,0,2434,2433,1,0,0,0,2434,2435,1,0,0,0,2435,2436,1,0,0,0,2436,2437, +6,265,0,0,2437,532,1,0,0,0,2438,2439,5,47,0,0,2439,2440,5,42,0,0,2440,2444, +1,0,0,0,2441,2443,9,0,0,0,2442,2441,1,0,0,0,2443,2446,1,0,0,0,2444,2445, +1,0,0,0,2444,2442,1,0,0,0,2445,2447,1,0,0,0,2446,2444,1,0,0,0,2447,2448, +5,42,0,0,2448,2449,5,47,0,0,2449,2450,1,0,0,0,2450,2451,6,266,0,0,2451,534, +1,0,0,0,2452,2454,7,8,0,0,2453,2452,1,0,0,0,2454,2455,1,0,0,0,2455,2453, +1,0,0,0,2455,2456,1,0,0,0,2456,2457,1,0,0,0,2457,2458,6,267,0,0,2458,536, +1,0,0,0,2459,2460,9,0,0,0,2460,538,1,0,0,0,33,0,2185,2214,2216,2228,2230, +2241,2249,2254,2260,2267,2269,2274,2280,2283,2291,2295,2299,2304,2306,2313, +2315,2321,2323,2332,2334,2410,2415,2427,2431,2434,2444,2455,1,0,1,0]; const atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); @@ -784,19 +837,21 @@ export default class SqlBaseLexer extends antlr4.Lexer { static literalNames = [ null, "'.'", "'('", "')'", "','", "'?'", "'->'", "'['", "']'", "'=>'", "'ADD'", "'ADMIN'", "'ALL'", "'ALTER'", "'ANALYZE'", "'AND'", "'ANY'", "'ARRAY'", - "'AS'", "'ASC'", "'AT'", "'BERNOULLI'", "'BETWEEN'", - "'BY'", "'CALL'", "'CALLED'", "'CASCADE'", "'CASE'", - "'CAST'", "'CATALOGS'", "'COLUMN'", "'COLUMNS'", - "'COMMENT'", "'COMMIT'", "'COMMITTED'", "'CONSTRAINT'", - "'CREATE'", "'CROSS'", "'CUBE'", "'CURRENT'", "'CURRENT_DATE'", + "'AS'", "'ASC'", "'AT'", "'BEFORE'", "'BERNOULLI'", + "'BETWEEN'", "'BRANCH'", "'BY'", "'CALL'", "'CALLED'", + "'CASCADE'", "'CASE'", "'CAST'", "'CATALOGS'", + "'COLUMN'", "'COLUMNS'", "'COMMENT'", "'COMMIT'", + "'COMMITTED'", "'CONSTRAINT'", "'CREATE'", "'COPARTITION'", + "'CROSS'", "'CUBE'", "'CURRENT'", "'CURRENT_DATE'", "'CURRENT_ROLE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURRENT_USER'", "'DATA'", "'DATE'", "'DAY'", "'DEALLOCATE'", "'DEFINER'", "'DELETE'", "'DESC'", - "'DESCRIBE'", "'DETERMINISTIC'", "'DISTINCT'", - "'DISTRIBUTED'", "'DROP'", "'ELSE'", "'END'", "'ESCAPE'", - "'EXCEPT'", "'EXCLUDING'", "'EXECUTE'", "'EXISTS'", - "'EXPLAIN'", "'EXTRACT'", "'EXTERNAL'", "'FALSE'", - "'FETCH'", "'FILTER'", "'FIRST'", "'FOLLOWING'", + "'DESCRIBE'", "'DESCRIPTOR'", "'DETERMINISTIC'", + "'DISABLED'", "'DISTINCT'", "'DISTRIBUTED'", "'DROP'", + "'ELSE'", "'EMPTY'", "'ENABLED'", "'END'", "'ENFORCED'", + "'ESCAPE'", "'EXCEPT'", "'EXCLUDING'", "'EXECUTE'", + "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", "'EXTERNAL'", + "'FALSE'", "'FETCH'", "'FILTER'", "'FIRST'", "'FOLLOWING'", "'FOR'", "'FORMAT'", "'FROM'", "'FULL'", "'FUNCTION'", "'FUNCTIONS'", "'GRANT'", "'GRANTED'", "'GRANTS'", "'GRAPHVIZ'", "'GROUP'", "'GROUPING'", "'GROUPS'", @@ -804,46 +859,50 @@ export default class SqlBaseLexer extends antlr4.Lexer { "'INCLUDING'", "'INNER'", "'INPUT'", "'INSERT'", "'INTERSECT'", "'INTERVAL'", "'INTO'", "'INVOKER'", "'IO'", "'IS'", "'ISOLATION'", "'JSON'", "'JOIN'", - "'LANGUAGE'", "'LAST'", "'LATERAL'", "'LEFT'", - "'LEVEL'", "'LIKE'", "'LIMIT'", "'LOCALTIME'", - "'LOCALTIMESTAMP'", "'LOGICAL'", "'MAP'", "'MATERIALIZED'", - "'MINUTE'", "'MONTH'", "'NAME'", "'NATURAL'", "'NFC'", - "'NFD'", "'NFKC'", "'NFKD'", "'NO'", "'NONE'", - "'NORMALIZE'", "'NOT'", "'NULL'", "'NULLIF'", "'NULLS'", - "'OF'", "'OFFSET'", "'ON'", "'ONLY'", "'OPTION'", - "'OR'", "'ORDER'", "'ORDINALITY'", "'OUTER'", "'OUTPUT'", - "'OVER'", "'PARTITION'", "'PARTITIONS'", "'POSITION'", - "'PRECEDING'", "'PREPARE'", "'PRIVILEGES'", "'PROPERTIES'", - "'RANGE'", "'READ'", "'RECURSIVE'", "'REFRESH'", - "'RENAME'", "'REPEATABLE'", "'REPLACE'", "'RESET'", - "'RESPECT'", "'RESTRICT'", "'RETURN'", "'RETURNS'", - "'REVOKE'", "'RIGHT'", "'ROLE'", "'ROLES'", "'ROLLBACK'", - "'ROLLUP'", "'ROW'", "'ROWS'", "'SCHEMA'", "'SCHEMAS'", - "'SECOND'", "'SECURITY'", "'SELECT'", "'SERIALIZABLE'", - "'SESSION'", "'SET'", "'SETS'", "'SHOW'", "'SOME'", - "'SQL'", "'START'", "'STATS'", "'SUBSTRING'", "'SYSTEM'", + "'KEEP'", "'KEY'", "'LANGUAGE'", "'LAST'", "'LATERAL'", + "'LEFT'", "'LEVEL'", "'LIKE'", "'LIMIT'", "'LOCALTIME'", + "'LOCALTIMESTAMP'", "'LOGICAL'", "'MAP'", "'MATCHED'", + "'MATERIALIZED'", "'MERGE'", "'MINUTE'", "'MONTH'", + "'NAME'", "'NATURAL'", "'NFC'", "'NFD'", "'NFKC'", + "'NFKD'", "'NO'", "'NONE'", "'NORMALIZE'", "'NOT'", + "'NULL'", "'NULLIF'", "'NULLS'", "'OF'", "'OFFSET'", + "'ON'", "'ONLY'", "'OPTION'", "'OR'", "'ORDER'", + "'ORDINALITY'", "'OUTER'", "'OUTPUT'", "'OVER'", + "'PARTITION'", "'PARTITIONS'", "'POSITION'", "'PRECEDING'", + "'PREPARE'", "'PRIMARY'", "'PRIVILEGES'", "'PROPERTIES'", + "'PRUNE'", "'RANGE'", "'READ'", "'RECURSIVE'", + "'REFRESH'", "'RELY'", "'RENAME'", "'REPEATABLE'", + "'REPLACE'", "'RESET'", "'RESPECT'", "'RESTRICT'", + "'RETURN'", "'RETURNS'", "'REVOKE'", "'RIGHT'", + "'ROLE'", "'ROLES'", "'ROLLBACK'", "'ROLLUP'", + "'ROW'", "'ROWS'", "'SCHEMA'", "'SCHEMAS'", "'SECOND'", + "'SECURITY'", "'SELECT'", "'SERIALIZABLE'", "'SESSION'", + "'SET'", "'SETS'", "'SHOW'", "'SOME'", "'SQL'", + "'START'", "'STATS'", "'SUBSTRING'", "'SYSTEM'", "'SYSTEM_TIME'", "'SYSTEM_VERSION'", "'TABLE'", - "'TABLES'", "'TABLESAMPLE'", "'TEMPORARY'", "'TEXT'", - "'THEN'", "'TIME'", "'TIMESTAMP'", "'TO'", "'TRANSACTION'", - "'TRUE'", "'TRUNCATE'", "'TRY_CAST'", "'TYPE'", - "'UESCAPE'", "'UNBOUNDED'", "'UNCOMMITTED'", "'UNION'", - "'UNNEST'", "'UPDATE'", "'USE'", "'USER'", "'USING'", - "'VALIDATE'", "'VALUES'", "'VERBOSE'", "'VERSION'", - "'VIEW'", "'WHEN'", "'WHERE'", "'WITH'", "'WORK'", - "'WRITE'", "'YEAR'", "'ZONE'", "'='", null, "'<'", - "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", - "'%'", "'||'" ]; + "'TABLES'", "'TABLESAMPLE'", "'TAG'", "'TEMPORARY'", + "'TEXT'", "'THEN'", "'TIME'", "'TIMESTAMP'", "'TO'", + "'TRANSACTION'", "'TRUE'", "'TRUNCATE'", "'TRY_CAST'", + "'TYPE'", "'UESCAPE'", "'UNBOUNDED'", "'UNCOMMITTED'", + "'UNION'", "'UNIQUE'", "'UNNEST'", "'UPDATE'", + "'USE'", "'USER'", "'USING'", "'VALIDATE'", "'VALUES'", + "'VERBOSE'", "'VERSION'", "'VIEW'", "'WHEN'", "'WHERE'", + "'WITH'", "'WORK'", "'WRITE'", "'YEAR'", "'ZONE'", + "'='", null, "'<'", "'<='", "'>'", "'>='", "'+'", + "'-'", "'*'", "'/'", "'%'", "'||'" ]; static symbolicNames = [ null, null, null, null, null, null, null, null, null, null, "ADD", "ADMIN", "ALL", "ALTER", "ANALYZE", - "AND", "ANY", "ARRAY", "AS", "ASC", "AT", "BERNOULLI", - "BETWEEN", "BY", "CALL", "CALLED", "CASCADE", - "CASE", "CAST", "CATALOGS", "COLUMN", "COLUMNS", - "COMMENT", "COMMIT", "COMMITTED", "CONSTRAINT", - "CREATE", "CROSS", "CUBE", "CURRENT", "CURRENT_DATE", - "CURRENT_ROLE", "CURRENT_TIME", "CURRENT_TIMESTAMP", - "CURRENT_USER", "DATA", "DATE", "DAY", "DEALLOCATE", - "DEFINER", "DELETE", "DESC", "DESCRIBE", "DETERMINISTIC", - "DISTINCT", "DISTRIBUTED", "DROP", "ELSE", "END", + "AND", "ANY", "ARRAY", "AS", "ASC", "AT", "BEFORE", + "BERNOULLI", "BETWEEN", "BRANCH", "BY", "CALL", + "CALLED", "CASCADE", "CASE", "CAST", "CATALOGS", + "COLUMN", "COLUMNS", "COMMENT", "COMMIT", "COMMITTED", + "CONSTRAINT", "CREATE", "COPARTITION", "CROSS", + "CUBE", "CURRENT", "CURRENT_DATE", "CURRENT_ROLE", + "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_USER", + "DATA", "DATE", "DAY", "DEALLOCATE", "DEFINER", + "DELETE", "DESC", "DESCRIBE", "DESCRIPTOR", "DETERMINISTIC", + "DISABLED", "DISTINCT", "DISTRIBUTED", "DROP", + "ELSE", "EMPTY", "ENABLED", "END", "ENFORCED", "ESCAPE", "EXCEPT", "EXCLUDING", "EXECUTE", "EXISTS", "EXPLAIN", "EXTRACT", "EXTERNAL", "FALSE", "FETCH", "FILTER", "FIRST", "FOLLOWING", "FOR", "FORMAT", @@ -852,80 +911,85 @@ export default class SqlBaseLexer extends antlr4.Lexer { "GROUPS", "HAVING", "HOUR", "IF", "IGNORE", "IN", "INCLUDING", "INNER", "INPUT", "INSERT", "INTERSECT", "INTERVAL", "INTO", "INVOKER", "IO", "IS", "ISOLATION", - "JSON", "JOIN", "LANGUAGE", "LAST", "LATERAL", - "LEFT", "LEVEL", "LIKE", "LIMIT", "LOCALTIME", - "LOCALTIMESTAMP", "LOGICAL", "MAP", "MATERIALIZED", - "MINUTE", "MONTH", "NAME", "NATURAL", "NFC", "NFD", - "NFKC", "NFKD", "NO", "NONE", "NORMALIZE", "NOT", - "NULL", "NULLIF", "NULLS", "OF", "OFFSET", "ON", - "ONLY", "OPTION", "OR", "ORDER", "ORDINALITY", - "OUTER", "OUTPUT", "OVER", "PARTITION", "PARTITIONS", - "POSITION", "PRECEDING", "PREPARE", "PRIVILEGES", - "PROPERTIES", "RANGE", "READ", "RECURSIVE", "REFRESH", - "RENAME", "REPEATABLE", "REPLACE", "RESET", "RESPECT", - "RESTRICT", "RETURN", "RETURNS", "REVOKE", "RIGHT", - "ROLE", "ROLES", "ROLLBACK", "ROLLUP", "ROW", - "ROWS", "SCHEMA", "SCHEMAS", "SECOND", "SECURITY", - "SELECT", "SERIALIZABLE", "SESSION", "SET", "SETS", - "SHOW", "SOME", "SQL", "START", "STATS", "SUBSTRING", - "SYSTEM", "SYSTEM_TIME", "SYSTEM_VERSION", "TABLE", - "TABLES", "TABLESAMPLE", "TEMPORARY", "TEXT", - "THEN", "TIME", "TIMESTAMP", "TO", "TRANSACTION", - "TRUE", "TRUNCATE", "TRY_CAST", "TYPE", "UESCAPE", - "UNBOUNDED", "UNCOMMITTED", "UNION", "UNNEST", - "UPDATE", "USE", "USER", "USING", "VALIDATE", - "VALUES", "VERBOSE", "VERSION", "VIEW", "WHEN", - "WHERE", "WITH", "WORK", "WRITE", "YEAR", "ZONE", - "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", - "MINUS", "ASTERISK", "SLASH", "PERCENT", "CONCAT", - "STRING", "UNICODE_STRING", "BINARY_LITERAL", - "INTEGER_VALUE", "DECIMAL_VALUE", "DOUBLE_VALUE", - "IDENTIFIER", "DIGIT_IDENTIFIER", "QUOTED_IDENTIFIER", - "BACKQUOTED_IDENTIFIER", "TIME_WITH_TIME_ZONE", - "TIMESTAMP_WITH_TIME_ZONE", "DOUBLE_PRECISION", - "SIMPLE_COMMENT", "BRACKETED_COMMENT", "WS", "UNRECOGNIZED" ]; + "JSON", "JOIN", "KEEP", "KEY", "LANGUAGE", "LAST", + "LATERAL", "LEFT", "LEVEL", "LIKE", "LIMIT", "LOCALTIME", + "LOCALTIMESTAMP", "LOGICAL", "MAP", "MATCHED", + "MATERIALIZED", "MERGE", "MINUTE", "MONTH", "NAME", + "NATURAL", "NFC", "NFD", "NFKC", "NFKD", "NO", + "NONE", "NORMALIZE", "NOT", "NULL", "NULLIF", + "NULLS", "OF", "OFFSET", "ON", "ONLY", "OPTION", + "OR", "ORDER", "ORDINALITY", "OUTER", "OUTPUT", + "OVER", "PARTITION", "PARTITIONS", "POSITION", + "PRECEDING", "PREPARE", "PRIMARY", "PRIVILEGES", + "PROPERTIES", "PRUNE", "RANGE", "READ", "RECURSIVE", + "REFRESH", "RELY", "RENAME", "REPEATABLE", "REPLACE", + "RESET", "RESPECT", "RESTRICT", "RETURN", "RETURNS", + "REVOKE", "RIGHT", "ROLE", "ROLES", "ROLLBACK", + "ROLLUP", "ROW", "ROWS", "SCHEMA", "SCHEMAS", + "SECOND", "SECURITY", "SELECT", "SERIALIZABLE", + "SESSION", "SET", "SETS", "SHOW", "SOME", "SQL", + "START", "STATS", "SUBSTRING", "SYSTEM", "SYSTEM_TIME", + "SYSTEM_VERSION", "TABLE", "TABLES", "TABLESAMPLE", + "TAG", "TEMPORARY", "TEXT", "THEN", "TIME", "TIMESTAMP", + "TO", "TRANSACTION", "TRUE", "TRUNCATE", "TRY_CAST", + "TYPE", "UESCAPE", "UNBOUNDED", "UNCOMMITTED", + "UNION", "UNIQUE", "UNNEST", "UPDATE", "USE", + "USER", "USING", "VALIDATE", "VALUES", "VERBOSE", + "VERSION", "VIEW", "WHEN", "WHERE", "WITH", "WORK", + "WRITE", "YEAR", "ZONE", "EQ", "NEQ", "LT", "LTE", + "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", + "PERCENT", "CONCAT", "STRING", "UNICODE_STRING", + "BINARY_LITERAL", "INTEGER_VALUE", "DECIMAL_VALUE", + "DOUBLE_VALUE", "IDENTIFIER", "DIGIT_IDENTIFIER", + "QUOTED_IDENTIFIER", "BACKQUOTED_IDENTIFIER", + "TIME_WITH_TIME_ZONE", "TIMESTAMP_WITH_TIME_ZONE", + "DOUBLE_PRECISION", "SIMPLE_COMMENT", "BRACKETED_COMMENT", + "WS", "UNRECOGNIZED" ]; static ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "ADD", "ADMIN", "ALL", "ALTER", "ANALYZE", - "AND", "ANY", "ARRAY", "AS", "ASC", "AT", "BERNOULLI", - "BETWEEN", "BY", "CALL", "CALLED", "CASCADE", "CASE", - "CAST", "CATALOGS", "COLUMN", "COLUMNS", "COMMENT", - "COMMIT", "COMMITTED", "CONSTRAINT", "CREATE", "CROSS", - "CUBE", "CURRENT", "CURRENT_DATE", "CURRENT_ROLE", - "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_USER", - "DATA", "DATE", "DAY", "DEALLOCATE", "DEFINER", "DELETE", - "DESC", "DESCRIBE", "DETERMINISTIC", "DISTINCT", "DISTRIBUTED", - "DROP", "ELSE", "END", "ESCAPE", "EXCEPT", "EXCLUDING", - "EXECUTE", "EXISTS", "EXPLAIN", "EXTRACT", "EXTERNAL", - "FALSE", "FETCH", "FILTER", "FIRST", "FOLLOWING", - "FOR", "FORMAT", "FROM", "FULL", "FUNCTION", "FUNCTIONS", - "GRANT", "GRANTED", "GRANTS", "GRAPHVIZ", "GROUP", - "GROUPING", "GROUPS", "HAVING", "HOUR", "IF", "IGNORE", - "IN", "INCLUDING", "INNER", "INPUT", "INSERT", "INTERSECT", - "INTERVAL", "INTO", "INVOKER", "IO", "IS", "ISOLATION", - "JSON", "JOIN", "LANGUAGE", "LAST", "LATERAL", "LEFT", - "LEVEL", "LIKE", "LIMIT", "LOCALTIME", "LOCALTIMESTAMP", - "LOGICAL", "MAP", "MATERIALIZED", "MINUTE", "MONTH", - "NAME", "NATURAL", "NFC", "NFD", "NFKC", "NFKD", "NO", - "NONE", "NORMALIZE", "NOT", "NULL", "NULLIF", "NULLS", - "OF", "OFFSET", "ON", "ONLY", "OPTION", "OR", "ORDER", - "ORDINALITY", "OUTER", "OUTPUT", "OVER", "PARTITION", - "PARTITIONS", "POSITION", "PRECEDING", "PREPARE", - "PRIVILEGES", "PROPERTIES", "RANGE", "READ", "RECURSIVE", - "REFRESH", "RENAME", "REPEATABLE", "REPLACE", "RESET", + "AND", "ANY", "ARRAY", "AS", "ASC", "AT", "BEFORE", + "BERNOULLI", "BETWEEN", "BRANCH", "BY", "CALL", "CALLED", + "CASCADE", "CASE", "CAST", "CATALOGS", "COLUMN", "COLUMNS", + "COMMENT", "COMMIT", "COMMITTED", "CONSTRAINT", "CREATE", + "COPARTITION", "CROSS", "CUBE", "CURRENT", "CURRENT_DATE", + "CURRENT_ROLE", "CURRENT_TIME", "CURRENT_TIMESTAMP", + "CURRENT_USER", "DATA", "DATE", "DAY", "DEALLOCATE", + "DEFINER", "DELETE", "DESC", "DESCRIBE", "DESCRIPTOR", + "DETERMINISTIC", "DISABLED", "DISTINCT", "DISTRIBUTED", + "DROP", "ELSE", "EMPTY", "ENABLED", "END", "ENFORCED", + "ESCAPE", "EXCEPT", "EXCLUDING", "EXECUTE", "EXISTS", + "EXPLAIN", "EXTRACT", "EXTERNAL", "FALSE", "FETCH", + "FILTER", "FIRST", "FOLLOWING", "FOR", "FORMAT", "FROM", + "FULL", "FUNCTION", "FUNCTIONS", "GRANT", "GRANTED", + "GRANTS", "GRAPHVIZ", "GROUP", "GROUPING", "GROUPS", + "HAVING", "HOUR", "IF", "IGNORE", "IN", "INCLUDING", + "INNER", "INPUT", "INSERT", "INTERSECT", "INTERVAL", + "INTO", "INVOKER", "IO", "IS", "ISOLATION", "JSON", + "JOIN", "KEEP", "KEY", "LANGUAGE", "LAST", "LATERAL", + "LEFT", "LEVEL", "LIKE", "LIMIT", "LOCALTIME", "LOCALTIMESTAMP", + "LOGICAL", "MAP", "MATCHED", "MATERIALIZED", "MERGE", + "MINUTE", "MONTH", "NAME", "NATURAL", "NFC", "NFD", + "NFKC", "NFKD", "NO", "NONE", "NORMALIZE", "NOT", + "NULL", "NULLIF", "NULLS", "OF", "OFFSET", "ON", "ONLY", + "OPTION", "OR", "ORDER", "ORDINALITY", "OUTER", "OUTPUT", + "OVER", "PARTITION", "PARTITIONS", "POSITION", "PRECEDING", + "PREPARE", "PRIMARY", "PRIVILEGES", "PROPERTIES", + "PRUNE", "RANGE", "READ", "RECURSIVE", "REFRESH", + "RELY", "RENAME", "REPEATABLE", "REPLACE", "RESET", "RESPECT", "RESTRICT", "RETURN", "RETURNS", "REVOKE", "RIGHT", "ROLE", "ROLES", "ROLLBACK", "ROLLUP", "ROW", "ROWS", "SCHEMA", "SCHEMAS", "SECOND", "SECURITY", "SELECT", "SERIALIZABLE", "SESSION", "SET", "SETS", "SHOW", "SOME", "SQL", "START", "STATS", "SUBSTRING", "SYSTEM", "SYSTEM_TIME", "SYSTEM_VERSION", "TABLE", - "TABLES", "TABLESAMPLE", "TEMPORARY", "TEXT", "THEN", - "TIME", "TIMESTAMP", "TO", "TRANSACTION", "TRUE", - "TRUNCATE", "TRY_CAST", "TYPE", "UESCAPE", "UNBOUNDED", - "UNCOMMITTED", "UNION", "UNNEST", "UPDATE", "USE", - "USER", "USING", "VALIDATE", "VALUES", "VERBOSE", - "VERSION", "VIEW", "WHEN", "WHERE", "WITH", "WORK", - "WRITE", "YEAR", "ZONE", "EQ", "NEQ", "LT", "LTE", - "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", + "TABLES", "TABLESAMPLE", "TAG", "TEMPORARY", "TEXT", + "THEN", "TIME", "TIMESTAMP", "TO", "TRANSACTION", + "TRUE", "TRUNCATE", "TRY_CAST", "TYPE", "UESCAPE", + "UNBOUNDED", "UNCOMMITTED", "UNION", "UNIQUE", "UNNEST", + "UPDATE", "USE", "USER", "USING", "VALIDATE", "VALUES", + "VERBOSE", "VERSION", "VIEW", "WHEN", "WHERE", "WITH", + "WORK", "WRITE", "YEAR", "ZONE", "EQ", "NEQ", "LT", + "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", "CONCAT", "STRING", "UNICODE_STRING", "BINARY_LITERAL", "INTEGER_VALUE", "DECIMAL_VALUE", "DOUBLE_VALUE", "IDENTIFIER", "DIGIT_IDENTIFIER", "QUOTED_IDENTIFIER", @@ -960,235 +1024,252 @@ SqlBaseLexer.ARRAY = 17; SqlBaseLexer.AS = 18; SqlBaseLexer.ASC = 19; SqlBaseLexer.AT = 20; -SqlBaseLexer.BERNOULLI = 21; -SqlBaseLexer.BETWEEN = 22; -SqlBaseLexer.BY = 23; -SqlBaseLexer.CALL = 24; -SqlBaseLexer.CALLED = 25; -SqlBaseLexer.CASCADE = 26; -SqlBaseLexer.CASE = 27; -SqlBaseLexer.CAST = 28; -SqlBaseLexer.CATALOGS = 29; -SqlBaseLexer.COLUMN = 30; -SqlBaseLexer.COLUMNS = 31; -SqlBaseLexer.COMMENT = 32; -SqlBaseLexer.COMMIT = 33; -SqlBaseLexer.COMMITTED = 34; -SqlBaseLexer.CONSTRAINT = 35; -SqlBaseLexer.CREATE = 36; -SqlBaseLexer.CROSS = 37; -SqlBaseLexer.CUBE = 38; -SqlBaseLexer.CURRENT = 39; -SqlBaseLexer.CURRENT_DATE = 40; -SqlBaseLexer.CURRENT_ROLE = 41; -SqlBaseLexer.CURRENT_TIME = 42; -SqlBaseLexer.CURRENT_TIMESTAMP = 43; -SqlBaseLexer.CURRENT_USER = 44; -SqlBaseLexer.DATA = 45; -SqlBaseLexer.DATE = 46; -SqlBaseLexer.DAY = 47; -SqlBaseLexer.DEALLOCATE = 48; -SqlBaseLexer.DEFINER = 49; -SqlBaseLexer.DELETE = 50; -SqlBaseLexer.DESC = 51; -SqlBaseLexer.DESCRIBE = 52; -SqlBaseLexer.DETERMINISTIC = 53; -SqlBaseLexer.DISTINCT = 54; -SqlBaseLexer.DISTRIBUTED = 55; -SqlBaseLexer.DROP = 56; -SqlBaseLexer.ELSE = 57; -SqlBaseLexer.END = 58; -SqlBaseLexer.ESCAPE = 59; -SqlBaseLexer.EXCEPT = 60; -SqlBaseLexer.EXCLUDING = 61; -SqlBaseLexer.EXECUTE = 62; -SqlBaseLexer.EXISTS = 63; -SqlBaseLexer.EXPLAIN = 64; -SqlBaseLexer.EXTRACT = 65; -SqlBaseLexer.EXTERNAL = 66; -SqlBaseLexer.FALSE = 67; -SqlBaseLexer.FETCH = 68; -SqlBaseLexer.FILTER = 69; -SqlBaseLexer.FIRST = 70; -SqlBaseLexer.FOLLOWING = 71; -SqlBaseLexer.FOR = 72; -SqlBaseLexer.FORMAT = 73; -SqlBaseLexer.FROM = 74; -SqlBaseLexer.FULL = 75; -SqlBaseLexer.FUNCTION = 76; -SqlBaseLexer.FUNCTIONS = 77; -SqlBaseLexer.GRANT = 78; -SqlBaseLexer.GRANTED = 79; -SqlBaseLexer.GRANTS = 80; -SqlBaseLexer.GRAPHVIZ = 81; -SqlBaseLexer.GROUP = 82; -SqlBaseLexer.GROUPING = 83; -SqlBaseLexer.GROUPS = 84; -SqlBaseLexer.HAVING = 85; -SqlBaseLexer.HOUR = 86; -SqlBaseLexer.IF = 87; -SqlBaseLexer.IGNORE = 88; -SqlBaseLexer.IN = 89; -SqlBaseLexer.INCLUDING = 90; -SqlBaseLexer.INNER = 91; -SqlBaseLexer.INPUT = 92; -SqlBaseLexer.INSERT = 93; -SqlBaseLexer.INTERSECT = 94; -SqlBaseLexer.INTERVAL = 95; -SqlBaseLexer.INTO = 96; -SqlBaseLexer.INVOKER = 97; -SqlBaseLexer.IO = 98; -SqlBaseLexer.IS = 99; -SqlBaseLexer.ISOLATION = 100; -SqlBaseLexer.JSON = 101; -SqlBaseLexer.JOIN = 102; -SqlBaseLexer.LANGUAGE = 103; -SqlBaseLexer.LAST = 104; -SqlBaseLexer.LATERAL = 105; -SqlBaseLexer.LEFT = 106; -SqlBaseLexer.LEVEL = 107; -SqlBaseLexer.LIKE = 108; -SqlBaseLexer.LIMIT = 109; -SqlBaseLexer.LOCALTIME = 110; -SqlBaseLexer.LOCALTIMESTAMP = 111; -SqlBaseLexer.LOGICAL = 112; -SqlBaseLexer.MAP = 113; -SqlBaseLexer.MATERIALIZED = 114; -SqlBaseLexer.MINUTE = 115; -SqlBaseLexer.MONTH = 116; -SqlBaseLexer.NAME = 117; -SqlBaseLexer.NATURAL = 118; -SqlBaseLexer.NFC = 119; -SqlBaseLexer.NFD = 120; -SqlBaseLexer.NFKC = 121; -SqlBaseLexer.NFKD = 122; -SqlBaseLexer.NO = 123; -SqlBaseLexer.NONE = 124; -SqlBaseLexer.NORMALIZE = 125; -SqlBaseLexer.NOT = 126; -SqlBaseLexer.NULL = 127; -SqlBaseLexer.NULLIF = 128; -SqlBaseLexer.NULLS = 129; -SqlBaseLexer.OF = 130; -SqlBaseLexer.OFFSET = 131; -SqlBaseLexer.ON = 132; -SqlBaseLexer.ONLY = 133; -SqlBaseLexer.OPTION = 134; -SqlBaseLexer.OR = 135; -SqlBaseLexer.ORDER = 136; -SqlBaseLexer.ORDINALITY = 137; -SqlBaseLexer.OUTER = 138; -SqlBaseLexer.OUTPUT = 139; -SqlBaseLexer.OVER = 140; -SqlBaseLexer.PARTITION = 141; -SqlBaseLexer.PARTITIONS = 142; -SqlBaseLexer.POSITION = 143; -SqlBaseLexer.PRECEDING = 144; -SqlBaseLexer.PREPARE = 145; -SqlBaseLexer.PRIVILEGES = 146; -SqlBaseLexer.PROPERTIES = 147; -SqlBaseLexer.RANGE = 148; -SqlBaseLexer.READ = 149; -SqlBaseLexer.RECURSIVE = 150; -SqlBaseLexer.REFRESH = 151; -SqlBaseLexer.RENAME = 152; -SqlBaseLexer.REPEATABLE = 153; -SqlBaseLexer.REPLACE = 154; -SqlBaseLexer.RESET = 155; -SqlBaseLexer.RESPECT = 156; -SqlBaseLexer.RESTRICT = 157; -SqlBaseLexer.RETURN = 158; -SqlBaseLexer.RETURNS = 159; -SqlBaseLexer.REVOKE = 160; -SqlBaseLexer.RIGHT = 161; -SqlBaseLexer.ROLE = 162; -SqlBaseLexer.ROLES = 163; -SqlBaseLexer.ROLLBACK = 164; -SqlBaseLexer.ROLLUP = 165; -SqlBaseLexer.ROW = 166; -SqlBaseLexer.ROWS = 167; -SqlBaseLexer.SCHEMA = 168; -SqlBaseLexer.SCHEMAS = 169; -SqlBaseLexer.SECOND = 170; -SqlBaseLexer.SECURITY = 171; -SqlBaseLexer.SELECT = 172; -SqlBaseLexer.SERIALIZABLE = 173; -SqlBaseLexer.SESSION = 174; -SqlBaseLexer.SET = 175; -SqlBaseLexer.SETS = 176; -SqlBaseLexer.SHOW = 177; -SqlBaseLexer.SOME = 178; -SqlBaseLexer.SQL = 179; -SqlBaseLexer.START = 180; -SqlBaseLexer.STATS = 181; -SqlBaseLexer.SUBSTRING = 182; -SqlBaseLexer.SYSTEM = 183; -SqlBaseLexer.SYSTEM_TIME = 184; -SqlBaseLexer.SYSTEM_VERSION = 185; -SqlBaseLexer.TABLE = 186; -SqlBaseLexer.TABLES = 187; -SqlBaseLexer.TABLESAMPLE = 188; -SqlBaseLexer.TEMPORARY = 189; -SqlBaseLexer.TEXT = 190; -SqlBaseLexer.THEN = 191; -SqlBaseLexer.TIME = 192; -SqlBaseLexer.TIMESTAMP = 193; -SqlBaseLexer.TO = 194; -SqlBaseLexer.TRANSACTION = 195; -SqlBaseLexer.TRUE = 196; -SqlBaseLexer.TRUNCATE = 197; -SqlBaseLexer.TRY_CAST = 198; -SqlBaseLexer.TYPE = 199; -SqlBaseLexer.UESCAPE = 200; -SqlBaseLexer.UNBOUNDED = 201; -SqlBaseLexer.UNCOMMITTED = 202; -SqlBaseLexer.UNION = 203; -SqlBaseLexer.UNNEST = 204; -SqlBaseLexer.UPDATE = 205; -SqlBaseLexer.USE = 206; -SqlBaseLexer.USER = 207; -SqlBaseLexer.USING = 208; -SqlBaseLexer.VALIDATE = 209; -SqlBaseLexer.VALUES = 210; -SqlBaseLexer.VERBOSE = 211; -SqlBaseLexer.VERSION = 212; -SqlBaseLexer.VIEW = 213; -SqlBaseLexer.WHEN = 214; -SqlBaseLexer.WHERE = 215; -SqlBaseLexer.WITH = 216; -SqlBaseLexer.WORK = 217; -SqlBaseLexer.WRITE = 218; -SqlBaseLexer.YEAR = 219; -SqlBaseLexer.ZONE = 220; -SqlBaseLexer.EQ = 221; -SqlBaseLexer.NEQ = 222; -SqlBaseLexer.LT = 223; -SqlBaseLexer.LTE = 224; -SqlBaseLexer.GT = 225; -SqlBaseLexer.GTE = 226; -SqlBaseLexer.PLUS = 227; -SqlBaseLexer.MINUS = 228; -SqlBaseLexer.ASTERISK = 229; -SqlBaseLexer.SLASH = 230; -SqlBaseLexer.PERCENT = 231; -SqlBaseLexer.CONCAT = 232; -SqlBaseLexer.STRING = 233; -SqlBaseLexer.UNICODE_STRING = 234; -SqlBaseLexer.BINARY_LITERAL = 235; -SqlBaseLexer.INTEGER_VALUE = 236; -SqlBaseLexer.DECIMAL_VALUE = 237; -SqlBaseLexer.DOUBLE_VALUE = 238; -SqlBaseLexer.IDENTIFIER = 239; -SqlBaseLexer.DIGIT_IDENTIFIER = 240; -SqlBaseLexer.QUOTED_IDENTIFIER = 241; -SqlBaseLexer.BACKQUOTED_IDENTIFIER = 242; -SqlBaseLexer.TIME_WITH_TIME_ZONE = 243; -SqlBaseLexer.TIMESTAMP_WITH_TIME_ZONE = 244; -SqlBaseLexer.DOUBLE_PRECISION = 245; -SqlBaseLexer.SIMPLE_COMMENT = 246; -SqlBaseLexer.BRACKETED_COMMENT = 247; -SqlBaseLexer.WS = 248; -SqlBaseLexer.UNRECOGNIZED = 249; +SqlBaseLexer.BEFORE = 21; +SqlBaseLexer.BERNOULLI = 22; +SqlBaseLexer.BETWEEN = 23; +SqlBaseLexer.BRANCH = 24; +SqlBaseLexer.BY = 25; +SqlBaseLexer.CALL = 26; +SqlBaseLexer.CALLED = 27; +SqlBaseLexer.CASCADE = 28; +SqlBaseLexer.CASE = 29; +SqlBaseLexer.CAST = 30; +SqlBaseLexer.CATALOGS = 31; +SqlBaseLexer.COLUMN = 32; +SqlBaseLexer.COLUMNS = 33; +SqlBaseLexer.COMMENT = 34; +SqlBaseLexer.COMMIT = 35; +SqlBaseLexer.COMMITTED = 36; +SqlBaseLexer.CONSTRAINT = 37; +SqlBaseLexer.CREATE = 38; +SqlBaseLexer.COPARTITION = 39; +SqlBaseLexer.CROSS = 40; +SqlBaseLexer.CUBE = 41; +SqlBaseLexer.CURRENT = 42; +SqlBaseLexer.CURRENT_DATE = 43; +SqlBaseLexer.CURRENT_ROLE = 44; +SqlBaseLexer.CURRENT_TIME = 45; +SqlBaseLexer.CURRENT_TIMESTAMP = 46; +SqlBaseLexer.CURRENT_USER = 47; +SqlBaseLexer.DATA = 48; +SqlBaseLexer.DATE = 49; +SqlBaseLexer.DAY = 50; +SqlBaseLexer.DEALLOCATE = 51; +SqlBaseLexer.DEFINER = 52; +SqlBaseLexer.DELETE = 53; +SqlBaseLexer.DESC = 54; +SqlBaseLexer.DESCRIBE = 55; +SqlBaseLexer.DESCRIPTOR = 56; +SqlBaseLexer.DETERMINISTIC = 57; +SqlBaseLexer.DISABLED = 58; +SqlBaseLexer.DISTINCT = 59; +SqlBaseLexer.DISTRIBUTED = 60; +SqlBaseLexer.DROP = 61; +SqlBaseLexer.ELSE = 62; +SqlBaseLexer.EMPTY = 63; +SqlBaseLexer.ENABLED = 64; +SqlBaseLexer.END = 65; +SqlBaseLexer.ENFORCED = 66; +SqlBaseLexer.ESCAPE = 67; +SqlBaseLexer.EXCEPT = 68; +SqlBaseLexer.EXCLUDING = 69; +SqlBaseLexer.EXECUTE = 70; +SqlBaseLexer.EXISTS = 71; +SqlBaseLexer.EXPLAIN = 72; +SqlBaseLexer.EXTRACT = 73; +SqlBaseLexer.EXTERNAL = 74; +SqlBaseLexer.FALSE = 75; +SqlBaseLexer.FETCH = 76; +SqlBaseLexer.FILTER = 77; +SqlBaseLexer.FIRST = 78; +SqlBaseLexer.FOLLOWING = 79; +SqlBaseLexer.FOR = 80; +SqlBaseLexer.FORMAT = 81; +SqlBaseLexer.FROM = 82; +SqlBaseLexer.FULL = 83; +SqlBaseLexer.FUNCTION = 84; +SqlBaseLexer.FUNCTIONS = 85; +SqlBaseLexer.GRANT = 86; +SqlBaseLexer.GRANTED = 87; +SqlBaseLexer.GRANTS = 88; +SqlBaseLexer.GRAPHVIZ = 89; +SqlBaseLexer.GROUP = 90; +SqlBaseLexer.GROUPING = 91; +SqlBaseLexer.GROUPS = 92; +SqlBaseLexer.HAVING = 93; +SqlBaseLexer.HOUR = 94; +SqlBaseLexer.IF = 95; +SqlBaseLexer.IGNORE = 96; +SqlBaseLexer.IN = 97; +SqlBaseLexer.INCLUDING = 98; +SqlBaseLexer.INNER = 99; +SqlBaseLexer.INPUT = 100; +SqlBaseLexer.INSERT = 101; +SqlBaseLexer.INTERSECT = 102; +SqlBaseLexer.INTERVAL = 103; +SqlBaseLexer.INTO = 104; +SqlBaseLexer.INVOKER = 105; +SqlBaseLexer.IO = 106; +SqlBaseLexer.IS = 107; +SqlBaseLexer.ISOLATION = 108; +SqlBaseLexer.JSON = 109; +SqlBaseLexer.JOIN = 110; +SqlBaseLexer.KEEP = 111; +SqlBaseLexer.KEY = 112; +SqlBaseLexer.LANGUAGE = 113; +SqlBaseLexer.LAST = 114; +SqlBaseLexer.LATERAL = 115; +SqlBaseLexer.LEFT = 116; +SqlBaseLexer.LEVEL = 117; +SqlBaseLexer.LIKE = 118; +SqlBaseLexer.LIMIT = 119; +SqlBaseLexer.LOCALTIME = 120; +SqlBaseLexer.LOCALTIMESTAMP = 121; +SqlBaseLexer.LOGICAL = 122; +SqlBaseLexer.MAP = 123; +SqlBaseLexer.MATCHED = 124; +SqlBaseLexer.MATERIALIZED = 125; +SqlBaseLexer.MERGE = 126; +SqlBaseLexer.MINUTE = 127; +SqlBaseLexer.MONTH = 128; +SqlBaseLexer.NAME = 129; +SqlBaseLexer.NATURAL = 130; +SqlBaseLexer.NFC = 131; +SqlBaseLexer.NFD = 132; +SqlBaseLexer.NFKC = 133; +SqlBaseLexer.NFKD = 134; +SqlBaseLexer.NO = 135; +SqlBaseLexer.NONE = 136; +SqlBaseLexer.NORMALIZE = 137; +SqlBaseLexer.NOT = 138; +SqlBaseLexer.NULL = 139; +SqlBaseLexer.NULLIF = 140; +SqlBaseLexer.NULLS = 141; +SqlBaseLexer.OF = 142; +SqlBaseLexer.OFFSET = 143; +SqlBaseLexer.ON = 144; +SqlBaseLexer.ONLY = 145; +SqlBaseLexer.OPTION = 146; +SqlBaseLexer.OR = 147; +SqlBaseLexer.ORDER = 148; +SqlBaseLexer.ORDINALITY = 149; +SqlBaseLexer.OUTER = 150; +SqlBaseLexer.OUTPUT = 151; +SqlBaseLexer.OVER = 152; +SqlBaseLexer.PARTITION = 153; +SqlBaseLexer.PARTITIONS = 154; +SqlBaseLexer.POSITION = 155; +SqlBaseLexer.PRECEDING = 156; +SqlBaseLexer.PREPARE = 157; +SqlBaseLexer.PRIMARY = 158; +SqlBaseLexer.PRIVILEGES = 159; +SqlBaseLexer.PROPERTIES = 160; +SqlBaseLexer.PRUNE = 161; +SqlBaseLexer.RANGE = 162; +SqlBaseLexer.READ = 163; +SqlBaseLexer.RECURSIVE = 164; +SqlBaseLexer.REFRESH = 165; +SqlBaseLexer.RELY = 166; +SqlBaseLexer.RENAME = 167; +SqlBaseLexer.REPEATABLE = 168; +SqlBaseLexer.REPLACE = 169; +SqlBaseLexer.RESET = 170; +SqlBaseLexer.RESPECT = 171; +SqlBaseLexer.RESTRICT = 172; +SqlBaseLexer.RETURN = 173; +SqlBaseLexer.RETURNS = 174; +SqlBaseLexer.REVOKE = 175; +SqlBaseLexer.RIGHT = 176; +SqlBaseLexer.ROLE = 177; +SqlBaseLexer.ROLES = 178; +SqlBaseLexer.ROLLBACK = 179; +SqlBaseLexer.ROLLUP = 180; +SqlBaseLexer.ROW = 181; +SqlBaseLexer.ROWS = 182; +SqlBaseLexer.SCHEMA = 183; +SqlBaseLexer.SCHEMAS = 184; +SqlBaseLexer.SECOND = 185; +SqlBaseLexer.SECURITY = 186; +SqlBaseLexer.SELECT = 187; +SqlBaseLexer.SERIALIZABLE = 188; +SqlBaseLexer.SESSION = 189; +SqlBaseLexer.SET = 190; +SqlBaseLexer.SETS = 191; +SqlBaseLexer.SHOW = 192; +SqlBaseLexer.SOME = 193; +SqlBaseLexer.SQL = 194; +SqlBaseLexer.START = 195; +SqlBaseLexer.STATS = 196; +SqlBaseLexer.SUBSTRING = 197; +SqlBaseLexer.SYSTEM = 198; +SqlBaseLexer.SYSTEM_TIME = 199; +SqlBaseLexer.SYSTEM_VERSION = 200; +SqlBaseLexer.TABLE = 201; +SqlBaseLexer.TABLES = 202; +SqlBaseLexer.TABLESAMPLE = 203; +SqlBaseLexer.TAG = 204; +SqlBaseLexer.TEMPORARY = 205; +SqlBaseLexer.TEXT = 206; +SqlBaseLexer.THEN = 207; +SqlBaseLexer.TIME = 208; +SqlBaseLexer.TIMESTAMP = 209; +SqlBaseLexer.TO = 210; +SqlBaseLexer.TRANSACTION = 211; +SqlBaseLexer.TRUE = 212; +SqlBaseLexer.TRUNCATE = 213; +SqlBaseLexer.TRY_CAST = 214; +SqlBaseLexer.TYPE = 215; +SqlBaseLexer.UESCAPE = 216; +SqlBaseLexer.UNBOUNDED = 217; +SqlBaseLexer.UNCOMMITTED = 218; +SqlBaseLexer.UNION = 219; +SqlBaseLexer.UNIQUE = 220; +SqlBaseLexer.UNNEST = 221; +SqlBaseLexer.UPDATE = 222; +SqlBaseLexer.USE = 223; +SqlBaseLexer.USER = 224; +SqlBaseLexer.USING = 225; +SqlBaseLexer.VALIDATE = 226; +SqlBaseLexer.VALUES = 227; +SqlBaseLexer.VERBOSE = 228; +SqlBaseLexer.VERSION = 229; +SqlBaseLexer.VIEW = 230; +SqlBaseLexer.WHEN = 231; +SqlBaseLexer.WHERE = 232; +SqlBaseLexer.WITH = 233; +SqlBaseLexer.WORK = 234; +SqlBaseLexer.WRITE = 235; +SqlBaseLexer.YEAR = 236; +SqlBaseLexer.ZONE = 237; +SqlBaseLexer.EQ = 238; +SqlBaseLexer.NEQ = 239; +SqlBaseLexer.LT = 240; +SqlBaseLexer.LTE = 241; +SqlBaseLexer.GT = 242; +SqlBaseLexer.GTE = 243; +SqlBaseLexer.PLUS = 244; +SqlBaseLexer.MINUS = 245; +SqlBaseLexer.ASTERISK = 246; +SqlBaseLexer.SLASH = 247; +SqlBaseLexer.PERCENT = 248; +SqlBaseLexer.CONCAT = 249; +SqlBaseLexer.STRING = 250; +SqlBaseLexer.UNICODE_STRING = 251; +SqlBaseLexer.BINARY_LITERAL = 252; +SqlBaseLexer.INTEGER_VALUE = 253; +SqlBaseLexer.DECIMAL_VALUE = 254; +SqlBaseLexer.DOUBLE_VALUE = 255; +SqlBaseLexer.IDENTIFIER = 256; +SqlBaseLexer.DIGIT_IDENTIFIER = 257; +SqlBaseLexer.QUOTED_IDENTIFIER = 258; +SqlBaseLexer.BACKQUOTED_IDENTIFIER = 259; +SqlBaseLexer.TIME_WITH_TIME_ZONE = 260; +SqlBaseLexer.TIMESTAMP_WITH_TIME_ZONE = 261; +SqlBaseLexer.DOUBLE_PRECISION = 262; +SqlBaseLexer.SIMPLE_COMMENT = 263; +SqlBaseLexer.BRACKETED_COMMENT = 264; +SqlBaseLexer.WS = 265; +SqlBaseLexer.UNRECOGNIZED = 266; diff --git a/presto-ui/src/sql-parser/SqlBaseLexer.tokens b/presto-ui/src/sql-parser/SqlBaseLexer.tokens index d50a4f3e5ba2a..a1f2914f59181 100644 --- a/presto-ui/src/sql-parser/SqlBaseLexer.tokens +++ b/presto-ui/src/sql-parser/SqlBaseLexer.tokens @@ -18,235 +18,252 @@ ARRAY=17 AS=18 ASC=19 AT=20 -BERNOULLI=21 -BETWEEN=22 -BY=23 -CALL=24 -CALLED=25 -CASCADE=26 -CASE=27 -CAST=28 -CATALOGS=29 -COLUMN=30 -COLUMNS=31 -COMMENT=32 -COMMIT=33 -COMMITTED=34 -CONSTRAINT=35 -CREATE=36 -CROSS=37 -CUBE=38 -CURRENT=39 -CURRENT_DATE=40 -CURRENT_ROLE=41 -CURRENT_TIME=42 -CURRENT_TIMESTAMP=43 -CURRENT_USER=44 -DATA=45 -DATE=46 -DAY=47 -DEALLOCATE=48 -DEFINER=49 -DELETE=50 -DESC=51 -DESCRIBE=52 -DETERMINISTIC=53 -DISTINCT=54 -DISTRIBUTED=55 -DROP=56 -ELSE=57 -END=58 -ESCAPE=59 -EXCEPT=60 -EXCLUDING=61 -EXECUTE=62 -EXISTS=63 -EXPLAIN=64 -EXTRACT=65 -EXTERNAL=66 -FALSE=67 -FETCH=68 -FILTER=69 -FIRST=70 -FOLLOWING=71 -FOR=72 -FORMAT=73 -FROM=74 -FULL=75 -FUNCTION=76 -FUNCTIONS=77 -GRANT=78 -GRANTED=79 -GRANTS=80 -GRAPHVIZ=81 -GROUP=82 -GROUPING=83 -GROUPS=84 -HAVING=85 -HOUR=86 -IF=87 -IGNORE=88 -IN=89 -INCLUDING=90 -INNER=91 -INPUT=92 -INSERT=93 -INTERSECT=94 -INTERVAL=95 -INTO=96 -INVOKER=97 -IO=98 -IS=99 -ISOLATION=100 -JSON=101 -JOIN=102 -LANGUAGE=103 -LAST=104 -LATERAL=105 -LEFT=106 -LEVEL=107 -LIKE=108 -LIMIT=109 -LOCALTIME=110 -LOCALTIMESTAMP=111 -LOGICAL=112 -MAP=113 -MATERIALIZED=114 -MINUTE=115 -MONTH=116 -NAME=117 -NATURAL=118 -NFC=119 -NFD=120 -NFKC=121 -NFKD=122 -NO=123 -NONE=124 -NORMALIZE=125 -NOT=126 -NULL=127 -NULLIF=128 -NULLS=129 -OF=130 -OFFSET=131 -ON=132 -ONLY=133 -OPTION=134 -OR=135 -ORDER=136 -ORDINALITY=137 -OUTER=138 -OUTPUT=139 -OVER=140 -PARTITION=141 -PARTITIONS=142 -POSITION=143 -PRECEDING=144 -PREPARE=145 -PRIVILEGES=146 -PROPERTIES=147 -RANGE=148 -READ=149 -RECURSIVE=150 -REFRESH=151 -RENAME=152 -REPEATABLE=153 -REPLACE=154 -RESET=155 -RESPECT=156 -RESTRICT=157 -RETURN=158 -RETURNS=159 -REVOKE=160 -RIGHT=161 -ROLE=162 -ROLES=163 -ROLLBACK=164 -ROLLUP=165 -ROW=166 -ROWS=167 -SCHEMA=168 -SCHEMAS=169 -SECOND=170 -SECURITY=171 -SELECT=172 -SERIALIZABLE=173 -SESSION=174 -SET=175 -SETS=176 -SHOW=177 -SOME=178 -SQL=179 -START=180 -STATS=181 -SUBSTRING=182 -SYSTEM=183 -SYSTEM_TIME=184 -SYSTEM_VERSION=185 -TABLE=186 -TABLES=187 -TABLESAMPLE=188 -TEMPORARY=189 -TEXT=190 -THEN=191 -TIME=192 -TIMESTAMP=193 -TO=194 -TRANSACTION=195 -TRUE=196 -TRUNCATE=197 -TRY_CAST=198 -TYPE=199 -UESCAPE=200 -UNBOUNDED=201 -UNCOMMITTED=202 -UNION=203 -UNNEST=204 -UPDATE=205 -USE=206 -USER=207 -USING=208 -VALIDATE=209 -VALUES=210 -VERBOSE=211 -VERSION=212 -VIEW=213 -WHEN=214 -WHERE=215 -WITH=216 -WORK=217 -WRITE=218 -YEAR=219 -ZONE=220 -EQ=221 -NEQ=222 -LT=223 -LTE=224 -GT=225 -GTE=226 -PLUS=227 -MINUS=228 -ASTERISK=229 -SLASH=230 -PERCENT=231 -CONCAT=232 -STRING=233 -UNICODE_STRING=234 -BINARY_LITERAL=235 -INTEGER_VALUE=236 -DECIMAL_VALUE=237 -DOUBLE_VALUE=238 -IDENTIFIER=239 -DIGIT_IDENTIFIER=240 -QUOTED_IDENTIFIER=241 -BACKQUOTED_IDENTIFIER=242 -TIME_WITH_TIME_ZONE=243 -TIMESTAMP_WITH_TIME_ZONE=244 -DOUBLE_PRECISION=245 -SIMPLE_COMMENT=246 -BRACKETED_COMMENT=247 -WS=248 -UNRECOGNIZED=249 +BEFORE=21 +BERNOULLI=22 +BETWEEN=23 +BRANCH=24 +BY=25 +CALL=26 +CALLED=27 +CASCADE=28 +CASE=29 +CAST=30 +CATALOGS=31 +COLUMN=32 +COLUMNS=33 +COMMENT=34 +COMMIT=35 +COMMITTED=36 +CONSTRAINT=37 +CREATE=38 +COPARTITION=39 +CROSS=40 +CUBE=41 +CURRENT=42 +CURRENT_DATE=43 +CURRENT_ROLE=44 +CURRENT_TIME=45 +CURRENT_TIMESTAMP=46 +CURRENT_USER=47 +DATA=48 +DATE=49 +DAY=50 +DEALLOCATE=51 +DEFINER=52 +DELETE=53 +DESC=54 +DESCRIBE=55 +DESCRIPTOR=56 +DETERMINISTIC=57 +DISABLED=58 +DISTINCT=59 +DISTRIBUTED=60 +DROP=61 +ELSE=62 +EMPTY=63 +ENABLED=64 +END=65 +ENFORCED=66 +ESCAPE=67 +EXCEPT=68 +EXCLUDING=69 +EXECUTE=70 +EXISTS=71 +EXPLAIN=72 +EXTRACT=73 +EXTERNAL=74 +FALSE=75 +FETCH=76 +FILTER=77 +FIRST=78 +FOLLOWING=79 +FOR=80 +FORMAT=81 +FROM=82 +FULL=83 +FUNCTION=84 +FUNCTIONS=85 +GRANT=86 +GRANTED=87 +GRANTS=88 +GRAPHVIZ=89 +GROUP=90 +GROUPING=91 +GROUPS=92 +HAVING=93 +HOUR=94 +IF=95 +IGNORE=96 +IN=97 +INCLUDING=98 +INNER=99 +INPUT=100 +INSERT=101 +INTERSECT=102 +INTERVAL=103 +INTO=104 +INVOKER=105 +IO=106 +IS=107 +ISOLATION=108 +JSON=109 +JOIN=110 +KEEP=111 +KEY=112 +LANGUAGE=113 +LAST=114 +LATERAL=115 +LEFT=116 +LEVEL=117 +LIKE=118 +LIMIT=119 +LOCALTIME=120 +LOCALTIMESTAMP=121 +LOGICAL=122 +MAP=123 +MATCHED=124 +MATERIALIZED=125 +MERGE=126 +MINUTE=127 +MONTH=128 +NAME=129 +NATURAL=130 +NFC=131 +NFD=132 +NFKC=133 +NFKD=134 +NO=135 +NONE=136 +NORMALIZE=137 +NOT=138 +NULL=139 +NULLIF=140 +NULLS=141 +OF=142 +OFFSET=143 +ON=144 +ONLY=145 +OPTION=146 +OR=147 +ORDER=148 +ORDINALITY=149 +OUTER=150 +OUTPUT=151 +OVER=152 +PARTITION=153 +PARTITIONS=154 +POSITION=155 +PRECEDING=156 +PREPARE=157 +PRIMARY=158 +PRIVILEGES=159 +PROPERTIES=160 +PRUNE=161 +RANGE=162 +READ=163 +RECURSIVE=164 +REFRESH=165 +RELY=166 +RENAME=167 +REPEATABLE=168 +REPLACE=169 +RESET=170 +RESPECT=171 +RESTRICT=172 +RETURN=173 +RETURNS=174 +REVOKE=175 +RIGHT=176 +ROLE=177 +ROLES=178 +ROLLBACK=179 +ROLLUP=180 +ROW=181 +ROWS=182 +SCHEMA=183 +SCHEMAS=184 +SECOND=185 +SECURITY=186 +SELECT=187 +SERIALIZABLE=188 +SESSION=189 +SET=190 +SETS=191 +SHOW=192 +SOME=193 +SQL=194 +START=195 +STATS=196 +SUBSTRING=197 +SYSTEM=198 +SYSTEM_TIME=199 +SYSTEM_VERSION=200 +TABLE=201 +TABLES=202 +TABLESAMPLE=203 +TAG=204 +TEMPORARY=205 +TEXT=206 +THEN=207 +TIME=208 +TIMESTAMP=209 +TO=210 +TRANSACTION=211 +TRUE=212 +TRUNCATE=213 +TRY_CAST=214 +TYPE=215 +UESCAPE=216 +UNBOUNDED=217 +UNCOMMITTED=218 +UNION=219 +UNIQUE=220 +UNNEST=221 +UPDATE=222 +USE=223 +USER=224 +USING=225 +VALIDATE=226 +VALUES=227 +VERBOSE=228 +VERSION=229 +VIEW=230 +WHEN=231 +WHERE=232 +WITH=233 +WORK=234 +WRITE=235 +YEAR=236 +ZONE=237 +EQ=238 +NEQ=239 +LT=240 +LTE=241 +GT=242 +GTE=243 +PLUS=244 +MINUS=245 +ASTERISK=246 +SLASH=247 +PERCENT=248 +CONCAT=249 +STRING=250 +UNICODE_STRING=251 +BINARY_LITERAL=252 +INTEGER_VALUE=253 +DECIMAL_VALUE=254 +DOUBLE_VALUE=255 +IDENTIFIER=256 +DIGIT_IDENTIFIER=257 +QUOTED_IDENTIFIER=258 +BACKQUOTED_IDENTIFIER=259 +TIME_WITH_TIME_ZONE=260 +TIMESTAMP_WITH_TIME_ZONE=261 +DOUBLE_PRECISION=262 +SIMPLE_COMMENT=263 +BRACKETED_COMMENT=264 +WS=265 +UNRECOGNIZED=266 '.'=1 '('=2 ')'=3 @@ -267,214 +284,231 @@ UNRECOGNIZED=249 'AS'=18 'ASC'=19 'AT'=20 -'BERNOULLI'=21 -'BETWEEN'=22 -'BY'=23 -'CALL'=24 -'CALLED'=25 -'CASCADE'=26 -'CASE'=27 -'CAST'=28 -'CATALOGS'=29 -'COLUMN'=30 -'COLUMNS'=31 -'COMMENT'=32 -'COMMIT'=33 -'COMMITTED'=34 -'CONSTRAINT'=35 -'CREATE'=36 -'CROSS'=37 -'CUBE'=38 -'CURRENT'=39 -'CURRENT_DATE'=40 -'CURRENT_ROLE'=41 -'CURRENT_TIME'=42 -'CURRENT_TIMESTAMP'=43 -'CURRENT_USER'=44 -'DATA'=45 -'DATE'=46 -'DAY'=47 -'DEALLOCATE'=48 -'DEFINER'=49 -'DELETE'=50 -'DESC'=51 -'DESCRIBE'=52 -'DETERMINISTIC'=53 -'DISTINCT'=54 -'DISTRIBUTED'=55 -'DROP'=56 -'ELSE'=57 -'END'=58 -'ESCAPE'=59 -'EXCEPT'=60 -'EXCLUDING'=61 -'EXECUTE'=62 -'EXISTS'=63 -'EXPLAIN'=64 -'EXTRACT'=65 -'EXTERNAL'=66 -'FALSE'=67 -'FETCH'=68 -'FILTER'=69 -'FIRST'=70 -'FOLLOWING'=71 -'FOR'=72 -'FORMAT'=73 -'FROM'=74 -'FULL'=75 -'FUNCTION'=76 -'FUNCTIONS'=77 -'GRANT'=78 -'GRANTED'=79 -'GRANTS'=80 -'GRAPHVIZ'=81 -'GROUP'=82 -'GROUPING'=83 -'GROUPS'=84 -'HAVING'=85 -'HOUR'=86 -'IF'=87 -'IGNORE'=88 -'IN'=89 -'INCLUDING'=90 -'INNER'=91 -'INPUT'=92 -'INSERT'=93 -'INTERSECT'=94 -'INTERVAL'=95 -'INTO'=96 -'INVOKER'=97 -'IO'=98 -'IS'=99 -'ISOLATION'=100 -'JSON'=101 -'JOIN'=102 -'LANGUAGE'=103 -'LAST'=104 -'LATERAL'=105 -'LEFT'=106 -'LEVEL'=107 -'LIKE'=108 -'LIMIT'=109 -'LOCALTIME'=110 -'LOCALTIMESTAMP'=111 -'LOGICAL'=112 -'MAP'=113 -'MATERIALIZED'=114 -'MINUTE'=115 -'MONTH'=116 -'NAME'=117 -'NATURAL'=118 -'NFC'=119 -'NFD'=120 -'NFKC'=121 -'NFKD'=122 -'NO'=123 -'NONE'=124 -'NORMALIZE'=125 -'NOT'=126 -'NULL'=127 -'NULLIF'=128 -'NULLS'=129 -'OF'=130 -'OFFSET'=131 -'ON'=132 -'ONLY'=133 -'OPTION'=134 -'OR'=135 -'ORDER'=136 -'ORDINALITY'=137 -'OUTER'=138 -'OUTPUT'=139 -'OVER'=140 -'PARTITION'=141 -'PARTITIONS'=142 -'POSITION'=143 -'PRECEDING'=144 -'PREPARE'=145 -'PRIVILEGES'=146 -'PROPERTIES'=147 -'RANGE'=148 -'READ'=149 -'RECURSIVE'=150 -'REFRESH'=151 -'RENAME'=152 -'REPEATABLE'=153 -'REPLACE'=154 -'RESET'=155 -'RESPECT'=156 -'RESTRICT'=157 -'RETURN'=158 -'RETURNS'=159 -'REVOKE'=160 -'RIGHT'=161 -'ROLE'=162 -'ROLES'=163 -'ROLLBACK'=164 -'ROLLUP'=165 -'ROW'=166 -'ROWS'=167 -'SCHEMA'=168 -'SCHEMAS'=169 -'SECOND'=170 -'SECURITY'=171 -'SELECT'=172 -'SERIALIZABLE'=173 -'SESSION'=174 -'SET'=175 -'SETS'=176 -'SHOW'=177 -'SOME'=178 -'SQL'=179 -'START'=180 -'STATS'=181 -'SUBSTRING'=182 -'SYSTEM'=183 -'SYSTEM_TIME'=184 -'SYSTEM_VERSION'=185 -'TABLE'=186 -'TABLES'=187 -'TABLESAMPLE'=188 -'TEMPORARY'=189 -'TEXT'=190 -'THEN'=191 -'TIME'=192 -'TIMESTAMP'=193 -'TO'=194 -'TRANSACTION'=195 -'TRUE'=196 -'TRUNCATE'=197 -'TRY_CAST'=198 -'TYPE'=199 -'UESCAPE'=200 -'UNBOUNDED'=201 -'UNCOMMITTED'=202 -'UNION'=203 -'UNNEST'=204 -'UPDATE'=205 -'USE'=206 -'USER'=207 -'USING'=208 -'VALIDATE'=209 -'VALUES'=210 -'VERBOSE'=211 -'VERSION'=212 -'VIEW'=213 -'WHEN'=214 -'WHERE'=215 -'WITH'=216 -'WORK'=217 -'WRITE'=218 -'YEAR'=219 -'ZONE'=220 -'='=221 -'<'=223 -'<='=224 -'>'=225 -'>='=226 -'+'=227 -'-'=228 -'*'=229 -'/'=230 -'%'=231 -'||'=232 +'BEFORE'=21 +'BERNOULLI'=22 +'BETWEEN'=23 +'BRANCH'=24 +'BY'=25 +'CALL'=26 +'CALLED'=27 +'CASCADE'=28 +'CASE'=29 +'CAST'=30 +'CATALOGS'=31 +'COLUMN'=32 +'COLUMNS'=33 +'COMMENT'=34 +'COMMIT'=35 +'COMMITTED'=36 +'CONSTRAINT'=37 +'CREATE'=38 +'COPARTITION'=39 +'CROSS'=40 +'CUBE'=41 +'CURRENT'=42 +'CURRENT_DATE'=43 +'CURRENT_ROLE'=44 +'CURRENT_TIME'=45 +'CURRENT_TIMESTAMP'=46 +'CURRENT_USER'=47 +'DATA'=48 +'DATE'=49 +'DAY'=50 +'DEALLOCATE'=51 +'DEFINER'=52 +'DELETE'=53 +'DESC'=54 +'DESCRIBE'=55 +'DESCRIPTOR'=56 +'DETERMINISTIC'=57 +'DISABLED'=58 +'DISTINCT'=59 +'DISTRIBUTED'=60 +'DROP'=61 +'ELSE'=62 +'EMPTY'=63 +'ENABLED'=64 +'END'=65 +'ENFORCED'=66 +'ESCAPE'=67 +'EXCEPT'=68 +'EXCLUDING'=69 +'EXECUTE'=70 +'EXISTS'=71 +'EXPLAIN'=72 +'EXTRACT'=73 +'EXTERNAL'=74 +'FALSE'=75 +'FETCH'=76 +'FILTER'=77 +'FIRST'=78 +'FOLLOWING'=79 +'FOR'=80 +'FORMAT'=81 +'FROM'=82 +'FULL'=83 +'FUNCTION'=84 +'FUNCTIONS'=85 +'GRANT'=86 +'GRANTED'=87 +'GRANTS'=88 +'GRAPHVIZ'=89 +'GROUP'=90 +'GROUPING'=91 +'GROUPS'=92 +'HAVING'=93 +'HOUR'=94 +'IF'=95 +'IGNORE'=96 +'IN'=97 +'INCLUDING'=98 +'INNER'=99 +'INPUT'=100 +'INSERT'=101 +'INTERSECT'=102 +'INTERVAL'=103 +'INTO'=104 +'INVOKER'=105 +'IO'=106 +'IS'=107 +'ISOLATION'=108 +'JSON'=109 +'JOIN'=110 +'KEEP'=111 +'KEY'=112 +'LANGUAGE'=113 +'LAST'=114 +'LATERAL'=115 +'LEFT'=116 +'LEVEL'=117 +'LIKE'=118 +'LIMIT'=119 +'LOCALTIME'=120 +'LOCALTIMESTAMP'=121 +'LOGICAL'=122 +'MAP'=123 +'MATCHED'=124 +'MATERIALIZED'=125 +'MERGE'=126 +'MINUTE'=127 +'MONTH'=128 +'NAME'=129 +'NATURAL'=130 +'NFC'=131 +'NFD'=132 +'NFKC'=133 +'NFKD'=134 +'NO'=135 +'NONE'=136 +'NORMALIZE'=137 +'NOT'=138 +'NULL'=139 +'NULLIF'=140 +'NULLS'=141 +'OF'=142 +'OFFSET'=143 +'ON'=144 +'ONLY'=145 +'OPTION'=146 +'OR'=147 +'ORDER'=148 +'ORDINALITY'=149 +'OUTER'=150 +'OUTPUT'=151 +'OVER'=152 +'PARTITION'=153 +'PARTITIONS'=154 +'POSITION'=155 +'PRECEDING'=156 +'PREPARE'=157 +'PRIMARY'=158 +'PRIVILEGES'=159 +'PROPERTIES'=160 +'PRUNE'=161 +'RANGE'=162 +'READ'=163 +'RECURSIVE'=164 +'REFRESH'=165 +'RELY'=166 +'RENAME'=167 +'REPEATABLE'=168 +'REPLACE'=169 +'RESET'=170 +'RESPECT'=171 +'RESTRICT'=172 +'RETURN'=173 +'RETURNS'=174 +'REVOKE'=175 +'RIGHT'=176 +'ROLE'=177 +'ROLES'=178 +'ROLLBACK'=179 +'ROLLUP'=180 +'ROW'=181 +'ROWS'=182 +'SCHEMA'=183 +'SCHEMAS'=184 +'SECOND'=185 +'SECURITY'=186 +'SELECT'=187 +'SERIALIZABLE'=188 +'SESSION'=189 +'SET'=190 +'SETS'=191 +'SHOW'=192 +'SOME'=193 +'SQL'=194 +'START'=195 +'STATS'=196 +'SUBSTRING'=197 +'SYSTEM'=198 +'SYSTEM_TIME'=199 +'SYSTEM_VERSION'=200 +'TABLE'=201 +'TABLES'=202 +'TABLESAMPLE'=203 +'TAG'=204 +'TEMPORARY'=205 +'TEXT'=206 +'THEN'=207 +'TIME'=208 +'TIMESTAMP'=209 +'TO'=210 +'TRANSACTION'=211 +'TRUE'=212 +'TRUNCATE'=213 +'TRY_CAST'=214 +'TYPE'=215 +'UESCAPE'=216 +'UNBOUNDED'=217 +'UNCOMMITTED'=218 +'UNION'=219 +'UNIQUE'=220 +'UNNEST'=221 +'UPDATE'=222 +'USE'=223 +'USER'=224 +'USING'=225 +'VALIDATE'=226 +'VALUES'=227 +'VERBOSE'=228 +'VERSION'=229 +'VIEW'=230 +'WHEN'=231 +'WHERE'=232 +'WITH'=233 +'WORK'=234 +'WRITE'=235 +'YEAR'=236 +'ZONE'=237 +'='=238 +'<'=240 +'<='=241 +'>'=242 +'>='=243 +'+'=244 +'-'=245 +'*'=246 +'/'=247 +'%'=248 +'||'=249 diff --git a/presto-ui/src/sql-parser/SqlBaseListener.js b/presto-ui/src/sql-parser/SqlBaseListener.js index f6b7a8e24dbbb..5ee886d34fd9d 100644 --- a/presto-ui/src/sql-parser/SqlBaseListener.js +++ b/presto-ui/src/sql-parser/SqlBaseListener.js @@ -1,4 +1,4 @@ -// Generated from presto/presto-parser/src/main/antlr4/com/facebook/presto/sql/parser/SqlBase.g4 by ANTLR 4.13.1 +// Generated from presto/presto-parser/src/main/antlr4/com/facebook/presto/sql/parser/SqlBase.g4 by ANTLR 4.13.2 // jshint ignore: start import antlr4 from 'antlr4'; @@ -167,6 +167,69 @@ export default class SqlBaseListener extends antlr4.tree.ParseTreeListener { } + // Enter a parse tree produced by SqlBaseParser#addConstraint. + enterAddConstraint(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#addConstraint. + exitAddConstraint(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#dropConstraint. + enterDropConstraint(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#dropConstraint. + exitDropConstraint(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#alterColumnSetNotNull. + enterAlterColumnSetNotNull(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#alterColumnSetNotNull. + exitAlterColumnSetNotNull(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#alterColumnDropNotNull. + enterAlterColumnDropNotNull(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#alterColumnDropNotNull. + exitAlterColumnDropNotNull(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#setTableProperties. + enterSetTableProperties(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#setTableProperties. + exitSetTableProperties(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#dropBranch. + enterDropBranch(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#dropBranch. + exitDropBranch(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#dropTag. + enterDropTag(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#dropTag. + exitDropTag(ctx) { + } + + // Enter a parse tree produced by SqlBaseParser#analyze. enterAnalyze(ctx) { } @@ -194,6 +257,15 @@ export default class SqlBaseListener extends antlr4.tree.ParseTreeListener { } + // Enter a parse tree produced by SqlBaseParser#renameView. + enterRenameView(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#renameView. + exitRenameView(ctx) { + } + + // Enter a parse tree produced by SqlBaseParser#dropView. enterDropView(ctx) { } @@ -356,6 +428,15 @@ export default class SqlBaseListener extends antlr4.tree.ParseTreeListener { } + // Enter a parse tree produced by SqlBaseParser#showCreateSchema. + enterShowCreateSchema(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#showCreateSchema. + exitShowCreateSchema(ctx) { + } + + // Enter a parse tree produced by SqlBaseParser#showCreateView. enterShowCreateView(ctx) { } @@ -572,6 +653,15 @@ export default class SqlBaseListener extends antlr4.tree.ParseTreeListener { } + // Enter a parse tree produced by SqlBaseParser#mergeInto. + enterMergeInto(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#mergeInto. + exitMergeInto(ctx) { + } + + // Enter a parse tree produced by SqlBaseParser#query. enterQuery(ctx) { } @@ -743,6 +833,15 @@ export default class SqlBaseListener extends antlr4.tree.ParseTreeListener { } + // Enter a parse tree produced by SqlBaseParser#viewSecurity. + enterViewSecurity(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#viewSecurity. + exitViewSecurity(ctx) { + } + + // Enter a parse tree produced by SqlBaseParser#queryNoWith. enterQueryNoWith(ctx) { } @@ -1031,6 +1130,15 @@ export default class SqlBaseListener extends antlr4.tree.ParseTreeListener { } + // Enter a parse tree produced by SqlBaseParser#tableFunctionInvocation. + enterTableFunctionInvocation(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#tableFunctionInvocation. + exitTableFunctionInvocation(ctx) { + } + + // Enter a parse tree produced by SqlBaseParser#expression. enterExpression(ctx) { } @@ -1553,6 +1661,78 @@ export default class SqlBaseListener extends antlr4.tree.ParseTreeListener { } + // Enter a parse tree produced by SqlBaseParser#tableFunctionCall. + enterTableFunctionCall(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#tableFunctionCall. + exitTableFunctionCall(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#tableFunctionArgument. + enterTableFunctionArgument(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#tableFunctionArgument. + exitTableFunctionArgument(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#tableArgument. + enterTableArgument(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#tableArgument. + exitTableArgument(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#tableArgumentTable. + enterTableArgumentTable(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#tableArgumentTable. + exitTableArgumentTable(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#tableArgumentQuery. + enterTableArgumentQuery(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#tableArgumentQuery. + exitTableArgumentQuery(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#descriptorArgument. + enterDescriptorArgument(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#descriptorArgument. + exitDescriptorArgument(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#descriptorField. + enterDescriptorField(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#descriptorField. + exitDescriptorField(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#copartitionTables. + enterCopartitionTables(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#copartitionTables. + exitCopartitionTables(ctx) { + } + + // Enter a parse tree produced by SqlBaseParser#typeParameter. enterTypeParameter(ctx) { } @@ -1589,6 +1769,24 @@ export default class SqlBaseListener extends antlr4.tree.ParseTreeListener { } + // Enter a parse tree produced by SqlBaseParser#mergeUpdate. + enterMergeUpdate(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#mergeUpdate. + exitMergeUpdate(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#mergeInsert. + enterMergeInsert(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#mergeInsert. + exitMergeInsert(ctx) { + } + + // Enter a parse tree produced by SqlBaseParser#over. enterOver(ctx) { } @@ -1760,6 +1958,24 @@ export default class SqlBaseListener extends antlr4.tree.ParseTreeListener { } + // Enter a parse tree produced by SqlBaseParser#tableversionasof. + enterTableversionasof(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#tableversionasof. + exitTableversionasof(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#tableversionbefore. + enterTableversionbefore(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#tableversionbefore. + exitTableversionbefore(ctx) { + } + + // Enter a parse tree produced by SqlBaseParser#currentUserGrantor. enterCurrentUserGrantor(ctx) { } @@ -1886,6 +2102,87 @@ export default class SqlBaseListener extends antlr4.tree.ParseTreeListener { } + // Enter a parse tree produced by SqlBaseParser#constraintSpecification. + enterConstraintSpecification(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#constraintSpecification. + exitConstraintSpecification(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#namedConstraintSpecification. + enterNamedConstraintSpecification(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#namedConstraintSpecification. + exitNamedConstraintSpecification(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#unnamedConstraintSpecification. + enterUnnamedConstraintSpecification(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#unnamedConstraintSpecification. + exitUnnamedConstraintSpecification(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#constraintType. + enterConstraintType(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#constraintType. + exitConstraintType(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#constraintQualifiers. + enterConstraintQualifiers(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#constraintQualifiers. + exitConstraintQualifiers(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#constraintQualifier. + enterConstraintQualifier(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#constraintQualifier. + exitConstraintQualifier(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#constraintRely. + enterConstraintRely(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#constraintRely. + exitConstraintRely(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#constraintEnabled. + enterConstraintEnabled(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#constraintEnabled. + exitConstraintEnabled(ctx) { + } + + + // Enter a parse tree produced by SqlBaseParser#constraintEnforced. + enterConstraintEnforced(ctx) { + } + + // Exit a parse tree produced by SqlBaseParser#constraintEnforced. + exitConstraintEnforced(ctx) { + } + + // Enter a parse tree produced by SqlBaseParser#nonReserved. enterNonReserved(ctx) { } diff --git a/presto-ui/src/sql-parser/SqlBaseParser.js b/presto-ui/src/sql-parser/SqlBaseParser.js index 1e93e51764371..40a44939f5e21 100644 --- a/presto-ui/src/sql-parser/SqlBaseParser.js +++ b/presto-ui/src/sql-parser/SqlBaseParser.js @@ -1,8 +1,8 @@ -// Generated from presto/presto-parser/src/main/antlr4/com/facebook/presto/sql/parser/SqlBase.g4 by ANTLR 4.13.1 +// Generated from presto/presto-parser/src/main/antlr4/com/facebook/presto/sql/parser/SqlBase.g4 by ANTLR 4.13.2 // jshint ignore: start import antlr4 from 'antlr4'; import SqlBaseListener from './SqlBaseListener.js'; -const serializedATN = [4,1,250,1919,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4, +const serializedATN = [4,1,267,2341,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,26,2,27, @@ -13,705 +13,865 @@ const serializedATN = [4,1,250,1919,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4, 7,56,2,57,7,57,2,58,7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7, 63,2,64,7,64,2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70, 2,71,7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2, -78,7,78,1,0,1,0,1,0,1,1,1,1,1,1,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3, -1,3,1,3,1,3,1,3,1,3,1,3,3,3,181,8,3,1,3,1,3,1,3,3,3,186,8,3,1,3,1,3,1,3, -1,3,3,3,192,8,3,1,3,1,3,3,3,196,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, -1,3,1,3,1,3,3,3,210,8,3,1,3,1,3,3,3,214,8,3,1,3,1,3,3,3,218,8,3,1,3,1,3, -3,3,222,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,230,8,3,1,3,1,3,3,3,234,8,3,1,3, -3,3,237,8,3,1,3,1,3,1,3,1,3,1,3,3,3,244,8,3,1,3,1,3,1,3,1,3,1,3,5,3,251, -8,3,10,3,12,3,254,9,3,1,3,1,3,1,3,3,3,259,8,3,1,3,1,3,3,3,263,8,3,1,3,1, -3,1,3,1,3,3,3,269,8,3,1,3,1,3,1,3,1,3,1,3,3,3,276,8,3,1,3,1,3,1,3,1,3,1, -3,1,3,1,3,3,3,285,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,294,8,3,1,3,1,3,1, -3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,305,8,3,1,3,1,3,1,3,1,3,1,3,3,3,312,8,3,1, -3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,322,8,3,1,3,1,3,1,3,1,3,1,3,3,3,329,8, -3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,337,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,345,8, -3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,353,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,5, -3,363,8,3,10,3,12,3,366,9,3,1,3,1,3,1,3,3,3,371,8,3,1,3,1,3,1,3,3,3,376, -8,3,1,3,1,3,1,3,1,3,3,3,382,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,391,8,3, -1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,400,8,3,1,3,1,3,1,3,3,3,405,8,3,1,3,1,3, -3,3,409,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,417,8,3,1,3,1,3,1,3,1,3,1,3,3,3, -424,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,437,8,3,1,3,3,3, -440,8,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,448,8,3,10,3,12,3,451,9,3,3,3,453,8, -3,1,3,1,3,1,3,1,3,1,3,3,3,460,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,469,8, -3,1,3,1,3,1,3,1,3,3,3,475,8,3,1,3,1,3,1,3,3,3,480,8,3,1,3,1,3,3,3,484,8, -3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,492,8,3,10,3,12,3,495,9,3,3,3,497,8,3,1,3, -1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,507,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, -1,3,5,3,518,8,3,10,3,12,3,521,9,3,1,3,1,3,1,3,3,3,526,8,3,1,3,1,3,1,3,3, -3,531,8,3,1,3,1,3,1,3,1,3,3,3,537,8,3,1,3,1,3,1,3,1,3,1,3,5,3,544,8,3,10, -3,12,3,547,9,3,1,3,1,3,1,3,3,3,552,8,3,1,3,1,3,1,3,1,3,1,3,3,3,559,8,3,1, -3,1,3,1,3,1,3,5,3,565,8,3,10,3,12,3,568,9,3,1,3,1,3,3,3,572,8,3,1,3,1,3, -3,3,576,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,584,8,3,1,3,1,3,1,3,1,3,3,3,590, -8,3,1,3,1,3,1,3,5,3,595,8,3,10,3,12,3,598,9,3,1,3,1,3,3,3,602,8,3,1,3,1, -3,3,3,606,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,616,8,3,1,3,3,3,619,8, -3,1,3,1,3,3,3,623,8,3,1,3,3,3,626,8,3,1,3,1,3,1,3,1,3,5,3,632,8,3,10,3,12, -3,635,9,3,1,3,1,3,3,3,639,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, -3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,660,8,3,1,3,1,3,1,3,1,3,3,3,666,8, -3,1,3,1,3,1,3,1,3,3,3,672,8,3,3,3,674,8,3,1,3,1,3,1,3,1,3,3,3,680,8,3,1, -3,1,3,1,3,1,3,3,3,686,8,3,3,3,688,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,696,8, -3,3,3,698,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, -3,1,3,1,3,3,3,717,8,3,1,3,1,3,1,3,3,3,722,8,3,1,3,1,3,1,3,1,3,1,3,3,3,729, -8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,741,8,3,3,3,743,8,3,1,3, -1,3,1,3,1,3,1,3,1,3,3,3,751,8,3,3,3,753,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, -1,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,769,8,3,10,3,12,3,772,9,3,3,3,774,8,3,1, -3,1,3,3,3,778,8,3,1,3,1,3,3,3,782,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, -3,1,3,1,3,1,3,1,3,1,3,5,3,798,8,3,10,3,12,3,801,9,3,3,3,803,8,3,1,3,1,3, -1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,817,8,3,10,3,12,3,820,9,3,1, -3,1,3,3,3,824,8,3,3,3,826,8,3,1,4,3,4,829,8,4,1,4,1,4,1,5,1,5,3,5,835,8, -5,1,5,1,5,1,5,5,5,840,8,5,10,5,12,5,843,9,5,1,6,1,6,3,6,847,8,6,1,7,1,7, -1,7,1,7,3,7,853,8,7,1,7,1,7,3,7,857,8,7,1,7,1,7,3,7,861,8,7,1,8,1,8,1,8, -1,8,3,8,867,8,8,1,9,1,9,1,9,1,9,5,9,873,8,9,10,9,12,9,876,9,9,1,9,1,9,1, -10,1,10,1,10,1,10,1,11,1,11,1,11,1,12,5,12,888,8,12,10,12,12,12,891,9,12, -1,13,1,13,1,13,1,13,3,13,897,8,13,1,14,5,14,900,8,14,10,14,12,14,903,9,14, -1,15,1,15,1,16,1,16,3,16,909,8,16,1,17,1,17,1,17,1,18,1,18,1,18,3,18,917, -8,18,1,19,1,19,3,19,921,8,19,1,20,1,20,1,20,3,20,926,8,20,1,21,1,21,1,21, -1,21,1,21,1,21,1,21,1,21,1,21,3,21,937,8,21,1,22,1,22,1,23,1,23,1,23,1,23, -1,23,1,23,5,23,947,8,23,10,23,12,23,950,9,23,3,23,952,8,23,1,23,1,23,1,23, -3,23,957,8,23,3,23,959,8,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,3,23,968, -8,23,3,23,970,8,23,1,24,1,24,1,24,1,24,1,24,1,24,3,24,978,8,24,1,24,1,24, -1,24,1,24,3,24,984,8,24,1,24,5,24,987,8,24,10,24,12,24,990,9,24,1,25,1,25, -1,25,1,25,1,25,1,25,1,25,5,25,999,8,25,10,25,12,25,1002,9,25,1,25,1,25,1, -25,1,25,3,25,1008,8,25,1,26,1,26,3,26,1012,8,26,1,26,1,26,3,26,1016,8,26, -1,27,1,27,3,27,1020,8,27,1,27,1,27,1,27,5,27,1025,8,27,10,27,12,27,1028, -9,27,1,27,1,27,1,27,1,27,5,27,1034,8,27,10,27,12,27,1037,9,27,3,27,1039, -8,27,1,27,1,27,3,27,1043,8,27,1,27,1,27,1,27,3,27,1048,8,27,1,27,1,27,3, -27,1052,8,27,1,28,3,28,1055,8,28,1,28,1,28,1,28,5,28,1060,8,28,10,28,12, -28,1063,9,28,1,29,1,29,1,29,1,29,1,29,1,29,5,29,1071,8,29,10,29,12,29,1074, -9,29,3,29,1076,8,29,1,29,1,29,1,29,1,29,1,29,1,29,5,29,1084,8,29,10,29,12, -29,1087,9,29,3,29,1089,8,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,5,29,1098, -8,29,10,29,12,29,1101,9,29,1,29,1,29,3,29,1105,8,29,1,30,1,30,1,30,1,30, -5,30,1111,8,30,10,30,12,30,1114,9,30,3,30,1116,8,30,1,30,1,30,3,30,1120, -8,30,1,31,1,31,3,31,1124,8,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,33,1, -33,3,33,1135,8,33,1,33,3,33,1138,8,33,1,33,1,33,1,33,1,33,1,33,3,33,1145, -8,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1, -34,1,34,1,34,1,34,3,34,1164,8,34,5,34,1166,8,34,10,34,12,34,1169,9,34,1, -35,3,35,1172,8,35,1,35,1,35,3,35,1176,8,35,1,35,1,35,3,35,1180,8,35,1,35, -1,35,3,35,1184,8,35,3,35,1186,8,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,5, -36,1195,8,36,10,36,12,36,1198,9,36,1,36,1,36,3,36,1202,8,36,1,37,1,37,1, -37,1,37,1,37,1,37,1,37,3,37,1211,8,37,1,38,1,38,1,39,1,39,3,39,1217,8,39, -1,39,1,39,3,39,1221,8,39,3,39,1223,8,39,1,40,1,40,1,40,1,40,5,40,1229,8, -40,10,40,12,40,1232,9,40,1,40,1,40,1,41,1,41,3,41,1238,8,41,1,41,1,41,1, -41,1,41,1,41,1,41,1,41,1,41,1,41,5,41,1249,8,41,10,41,12,41,1252,9,41,1, -41,1,41,1,41,3,41,1257,8,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41, -3,41,1268,8,41,1,42,1,42,1,43,1,43,1,43,3,43,1275,8,43,1,43,1,43,3,43,1279, -8,43,1,43,1,43,1,43,1,43,1,43,1,43,5,43,1287,8,43,10,43,12,43,1290,9,43, -1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,3,44,1302,8,44,1,44,1, -44,1,44,1,44,1,44,1,44,3,44,1310,8,44,1,44,1,44,1,44,1,44,1,44,5,44,1317, -8,44,10,44,12,44,1320,9,44,1,44,1,44,1,44,3,44,1325,8,44,1,44,1,44,1,44, -1,44,1,44,1,44,3,44,1333,8,44,1,44,1,44,1,44,1,44,3,44,1339,8,44,1,44,1, -44,3,44,1343,8,44,1,44,1,44,1,44,3,44,1348,8,44,1,44,1,44,1,44,3,44,1353, -8,44,1,45,1,45,1,45,1,45,3,45,1359,8,45,1,45,1,45,1,45,1,45,1,45,1,45,1, -45,1,45,1,45,1,45,1,45,1,45,5,45,1373,8,45,10,45,12,45,1376,9,45,1,46,1, -46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46, -1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,4,46,1402,8,46,11,46,12,46,1403, -1,46,1,46,1,46,1,46,1,46,1,46,1,46,5,46,1413,8,46,10,46,12,46,1416,9,46, -1,46,1,46,1,46,1,46,1,46,1,46,1,46,3,46,1425,8,46,1,46,3,46,1428,8,46,1, -46,1,46,1,46,3,46,1433,8,46,1,46,1,46,1,46,5,46,1438,8,46,10,46,12,46,1441, -9,46,3,46,1443,8,46,1,46,1,46,1,46,1,46,1,46,5,46,1450,8,46,10,46,12,46, -1453,9,46,3,46,1455,8,46,1,46,1,46,3,46,1459,8,46,1,46,3,46,1462,8,46,1, -46,3,46,1465,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,5,46,1475,8,46, -10,46,12,46,1478,9,46,3,46,1480,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46, -1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,4,46,1497,8,46,11,46,12,46,1498, -1,46,1,46,3,46,1503,8,46,1,46,1,46,1,46,1,46,4,46,1509,8,46,11,46,12,46, -1510,1,46,1,46,3,46,1515,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1, -46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,5,46,1538, -8,46,10,46,12,46,1541,9,46,3,46,1543,8,46,1,46,1,46,1,46,1,46,1,46,1,46, -1,46,3,46,1552,8,46,1,46,1,46,1,46,1,46,3,46,1558,8,46,1,46,1,46,1,46,1, -46,3,46,1564,8,46,1,46,1,46,1,46,1,46,3,46,1570,8,46,1,46,1,46,1,46,1,46, -1,46,1,46,1,46,1,46,3,46,1580,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,3, -46,1589,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46, -1,46,1,46,1,46,1,46,1,46,1,46,5,46,1609,8,46,10,46,12,46,1612,9,46,3,46, -1614,8,46,1,46,3,46,1617,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,5, -46,1627,8,46,10,46,12,46,1630,9,46,1,47,1,47,1,47,1,47,3,47,1636,8,47,3, -47,1638,8,47,1,48,1,48,1,48,1,48,3,48,1644,8,48,1,49,1,49,1,49,1,49,1,49, -1,49,3,49,1652,8,49,1,50,1,50,1,51,1,51,1,52,1,52,1,53,1,53,3,53,1662,8, -53,1,53,1,53,1,53,1,53,3,53,1668,8,53,1,54,1,54,1,55,1,55,1,56,1,56,1,56, -1,56,5,56,1678,8,56,10,56,12,56,1681,9,56,3,56,1683,8,56,1,56,1,56,1,57, -1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1, -57,1,57,1,57,1,57,1,57,1,57,5,57,1708,8,57,10,57,12,57,1711,9,57,1,57,1, -57,1,57,1,57,1,57,1,57,1,57,5,57,1720,8,57,10,57,12,57,1723,9,57,1,57,1, -57,3,57,1727,8,57,1,57,1,57,1,57,1,57,1,57,3,57,1734,8,57,1,57,1,57,5,57, -1738,8,57,10,57,12,57,1741,9,57,1,58,1,58,3,58,1745,8,58,1,59,1,59,1,59, -1,59,3,59,1751,8,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1, -61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,5,62,1771,8,62,10,62,12,62,1774,9, -62,3,62,1776,8,62,1,62,1,62,1,62,1,62,1,62,5,62,1783,8,62,10,62,12,62,1786, -9,62,3,62,1788,8,62,1,62,3,62,1791,8,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,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63, -1,63,1,63,1,63,1,63,1,63,3,63,1819,8,63,1,64,1,64,1,64,1,64,1,64,1,64,1, -64,1,64,1,64,3,64,1830,8,64,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,3,66, -1840,8,66,1,67,1,67,1,67,1,67,1,67,3,67,1847,8,67,1,68,1,68,1,68,1,68,1, -68,1,68,1,68,3,68,1856,8,68,1,69,1,69,1,69,1,69,1,69,3,69,1863,8,69,1,70, -1,70,1,70,1,70,3,70,1869,8,70,1,71,1,71,1,71,5,71,1874,8,71,10,71,12,71, -1877,9,71,1,72,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,3,73,1888,8,73,1, -74,1,74,1,74,1,74,1,74,3,74,1895,8,74,1,75,1,75,1,75,5,75,1900,8,75,10,75, -12,75,1903,9,75,1,76,1,76,1,76,1,76,1,76,3,76,1910,8,76,1,77,1,77,1,77,3, -77,1915,8,77,1,78,1,78,1,78,0,6,48,68,86,90,92,114,79,0,2,4,6,8,10,12,14, -16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62, -64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108, -110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144, -146,148,150,152,154,156,0,24,2,0,26,26,157,157,2,0,49,49,97,97,2,0,74,74, -89,89,2,0,61,61,90,90,1,0,166,167,2,0,12,12,236,236,2,0,60,60,203,203,2, -0,19,19,51,51,2,0,70,70,104,104,2,0,12,12,54,54,2,0,21,21,183,183,1,0,227, -228,1,0,229,231,1,0,221,226,3,0,12,12,16,16,178,178,2,0,67,67,196,196,5, -0,47,47,86,86,115,116,170,170,219,219,1,0,119,122,2,0,71,71,144,144,3,0, -81,81,101,101,190,190,4,0,55,55,98,98,112,112,209,209,2,0,133,133,218,218, -3,0,184,185,193,193,212,212,48,0,10,12,14,14,16,17,19,21,24,26,29,34,39, -39,41,41,45,47,49,49,51,51,53,53,55,55,61,61,64,64,66,66,68,71,73,73,76, -81,84,84,86,88,90,90,92,92,95,95,97,98,100,101,103,105,107,107,109,109,112, -117,119,124,128,131,133,134,137,137,139,144,146,149,151,160,162,164,166, -171,173,185,187,190,192,195,197,199,201,202,205,207,209,209,211,213,217, -220,2221,0,158,1,0,0,0,2,161,1,0,0,0,4,164,1,0,0,0,6,825,1,0,0,0,8,828,1, -0,0,0,10,832,1,0,0,0,12,846,1,0,0,0,14,848,1,0,0,0,16,862,1,0,0,0,18,868, -1,0,0,0,20,879,1,0,0,0,22,883,1,0,0,0,24,889,1,0,0,0,26,896,1,0,0,0,28,901, -1,0,0,0,30,904,1,0,0,0,32,908,1,0,0,0,34,910,1,0,0,0,36,913,1,0,0,0,38,920, -1,0,0,0,40,925,1,0,0,0,42,936,1,0,0,0,44,938,1,0,0,0,46,940,1,0,0,0,48,971, -1,0,0,0,50,1007,1,0,0,0,52,1009,1,0,0,0,54,1017,1,0,0,0,56,1054,1,0,0,0, -58,1104,1,0,0,0,60,1119,1,0,0,0,62,1121,1,0,0,0,64,1130,1,0,0,0,66,1144, -1,0,0,0,68,1146,1,0,0,0,70,1185,1,0,0,0,72,1201,1,0,0,0,74,1203,1,0,0,0, -76,1212,1,0,0,0,78,1214,1,0,0,0,80,1224,1,0,0,0,82,1267,1,0,0,0,84,1269, -1,0,0,0,86,1278,1,0,0,0,88,1352,1,0,0,0,90,1358,1,0,0,0,92,1616,1,0,0,0, -94,1637,1,0,0,0,96,1643,1,0,0,0,98,1651,1,0,0,0,100,1653,1,0,0,0,102,1655, -1,0,0,0,104,1657,1,0,0,0,106,1659,1,0,0,0,108,1669,1,0,0,0,110,1671,1,0, -0,0,112,1673,1,0,0,0,114,1733,1,0,0,0,116,1744,1,0,0,0,118,1750,1,0,0,0, -120,1752,1,0,0,0,122,1757,1,0,0,0,124,1763,1,0,0,0,126,1818,1,0,0,0,128, -1829,1,0,0,0,130,1831,1,0,0,0,132,1839,1,0,0,0,134,1846,1,0,0,0,136,1855, -1,0,0,0,138,1862,1,0,0,0,140,1868,1,0,0,0,142,1870,1,0,0,0,144,1878,1,0, -0,0,146,1887,1,0,0,0,148,1894,1,0,0,0,150,1896,1,0,0,0,152,1909,1,0,0,0, -154,1914,1,0,0,0,156,1916,1,0,0,0,158,159,3,6,3,0,159,160,5,0,0,1,160,1, -1,0,0,0,161,162,3,84,42,0,162,163,5,0,0,1,163,3,1,0,0,0,164,165,3,32,16, -0,165,166,5,0,0,1,166,5,1,0,0,0,167,826,3,8,4,0,168,169,5,206,0,0,169,826, -3,152,76,0,170,171,5,206,0,0,171,172,3,152,76,0,172,173,5,1,0,0,173,174, -3,152,76,0,174,826,1,0,0,0,175,176,5,36,0,0,176,180,5,168,0,0,177,178,5, -87,0,0,178,179,5,126,0,0,179,181,5,63,0,0,180,177,1,0,0,0,180,181,1,0,0, -0,181,182,1,0,0,0,182,185,3,142,71,0,183,184,5,216,0,0,184,186,3,18,9,0, -185,183,1,0,0,0,185,186,1,0,0,0,186,826,1,0,0,0,187,188,5,56,0,0,188,191, -5,168,0,0,189,190,5,87,0,0,190,192,5,63,0,0,191,189,1,0,0,0,191,192,1,0, -0,0,192,193,1,0,0,0,193,195,3,142,71,0,194,196,7,0,0,0,195,194,1,0,0,0,195, -196,1,0,0,0,196,826,1,0,0,0,197,198,5,13,0,0,198,199,5,168,0,0,199,200,3, -142,71,0,200,201,5,152,0,0,201,202,5,194,0,0,202,203,3,152,76,0,203,826, -1,0,0,0,204,205,5,36,0,0,205,209,5,186,0,0,206,207,5,87,0,0,207,208,5,126, -0,0,208,210,5,63,0,0,209,206,1,0,0,0,209,210,1,0,0,0,210,211,1,0,0,0,211, -213,3,142,71,0,212,214,3,80,40,0,213,212,1,0,0,0,213,214,1,0,0,0,214,217, -1,0,0,0,215,216,5,32,0,0,216,218,3,94,47,0,217,215,1,0,0,0,217,218,1,0,0, -0,218,221,1,0,0,0,219,220,5,216,0,0,220,222,3,18,9,0,221,219,1,0,0,0,221, -222,1,0,0,0,222,223,1,0,0,0,223,229,5,18,0,0,224,230,3,8,4,0,225,226,5,2, -0,0,226,227,3,8,4,0,227,228,5,3,0,0,228,230,1,0,0,0,229,224,1,0,0,0,229, -225,1,0,0,0,230,236,1,0,0,0,231,233,5,216,0,0,232,234,5,123,0,0,233,232, -1,0,0,0,233,234,1,0,0,0,234,235,1,0,0,0,235,237,5,45,0,0,236,231,1,0,0,0, -236,237,1,0,0,0,237,826,1,0,0,0,238,239,5,36,0,0,239,243,5,186,0,0,240,241, -5,87,0,0,241,242,5,126,0,0,242,244,5,63,0,0,243,240,1,0,0,0,243,244,1,0, -0,0,244,245,1,0,0,0,245,246,3,142,71,0,246,247,5,2,0,0,247,252,3,12,6,0, -248,249,5,4,0,0,249,251,3,12,6,0,250,248,1,0,0,0,251,254,1,0,0,0,252,250, -1,0,0,0,252,253,1,0,0,0,253,255,1,0,0,0,254,252,1,0,0,0,255,258,5,3,0,0, -256,257,5,32,0,0,257,259,3,94,47,0,258,256,1,0,0,0,258,259,1,0,0,0,259,262, -1,0,0,0,260,261,5,216,0,0,261,263,3,18,9,0,262,260,1,0,0,0,262,263,1,0,0, -0,263,826,1,0,0,0,264,265,5,56,0,0,265,268,5,186,0,0,266,267,5,87,0,0,267, -269,5,63,0,0,268,266,1,0,0,0,268,269,1,0,0,0,269,270,1,0,0,0,270,826,3,142, -71,0,271,272,5,93,0,0,272,273,5,96,0,0,273,275,3,142,71,0,274,276,3,80,40, -0,275,274,1,0,0,0,275,276,1,0,0,0,276,277,1,0,0,0,277,278,3,8,4,0,278,826, -1,0,0,0,279,280,5,50,0,0,280,281,5,74,0,0,281,284,3,142,71,0,282,283,5,215, -0,0,283,285,3,86,43,0,284,282,1,0,0,0,284,285,1,0,0,0,285,826,1,0,0,0,286, -287,5,197,0,0,287,288,5,186,0,0,288,826,3,142,71,0,289,290,5,13,0,0,290, -293,5,186,0,0,291,292,5,87,0,0,292,294,5,63,0,0,293,291,1,0,0,0,293,294, -1,0,0,0,294,295,1,0,0,0,295,296,3,142,71,0,296,297,5,152,0,0,297,298,5,194, -0,0,298,299,3,142,71,0,299,826,1,0,0,0,300,301,5,13,0,0,301,304,5,186,0, -0,302,303,5,87,0,0,303,305,5,63,0,0,304,302,1,0,0,0,304,305,1,0,0,0,305, -306,1,0,0,0,306,307,3,142,71,0,307,308,5,152,0,0,308,311,5,30,0,0,309,310, -5,87,0,0,310,312,5,63,0,0,311,309,1,0,0,0,311,312,1,0,0,0,312,313,1,0,0, -0,313,314,3,152,76,0,314,315,5,194,0,0,315,316,3,152,76,0,316,826,1,0,0, -0,317,318,5,13,0,0,318,321,5,186,0,0,319,320,5,87,0,0,320,322,5,63,0,0,321, -319,1,0,0,0,321,322,1,0,0,0,322,323,1,0,0,0,323,324,3,142,71,0,324,325,5, -56,0,0,325,328,5,30,0,0,326,327,5,87,0,0,327,329,5,63,0,0,328,326,1,0,0, -0,328,329,1,0,0,0,329,330,1,0,0,0,330,331,3,142,71,0,331,826,1,0,0,0,332, -333,5,13,0,0,333,336,5,186,0,0,334,335,5,87,0,0,335,337,5,63,0,0,336,334, -1,0,0,0,336,337,1,0,0,0,337,338,1,0,0,0,338,339,3,142,71,0,339,340,5,10, -0,0,340,344,5,30,0,0,341,342,5,87,0,0,342,343,5,126,0,0,343,345,5,63,0,0, -344,341,1,0,0,0,344,345,1,0,0,0,345,346,1,0,0,0,346,347,3,14,7,0,347,826, -1,0,0,0,348,349,5,14,0,0,349,352,3,142,71,0,350,351,5,216,0,0,351,353,3, -18,9,0,352,350,1,0,0,0,352,353,1,0,0,0,353,826,1,0,0,0,354,355,5,36,0,0, -355,356,5,199,0,0,356,357,3,142,71,0,357,370,5,18,0,0,358,359,5,2,0,0,359, -364,3,22,11,0,360,361,5,4,0,0,361,363,3,22,11,0,362,360,1,0,0,0,363,366, -1,0,0,0,364,362,1,0,0,0,364,365,1,0,0,0,365,367,1,0,0,0,366,364,1,0,0,0, -367,368,5,3,0,0,368,371,1,0,0,0,369,371,3,114,57,0,370,358,1,0,0,0,370,369, -1,0,0,0,371,826,1,0,0,0,372,375,5,36,0,0,373,374,5,135,0,0,374,376,5,154, -0,0,375,373,1,0,0,0,375,376,1,0,0,0,376,377,1,0,0,0,377,378,5,213,0,0,378, -381,3,142,71,0,379,380,5,171,0,0,380,382,7,1,0,0,381,379,1,0,0,0,381,382, -1,0,0,0,382,383,1,0,0,0,383,384,5,18,0,0,384,385,3,8,4,0,385,826,1,0,0,0, -386,387,5,56,0,0,387,390,5,213,0,0,388,389,5,87,0,0,389,391,5,63,0,0,390, -388,1,0,0,0,390,391,1,0,0,0,391,392,1,0,0,0,392,826,3,142,71,0,393,394,5, -36,0,0,394,395,5,114,0,0,395,399,5,213,0,0,396,397,5,87,0,0,397,398,5,126, -0,0,398,400,5,63,0,0,399,396,1,0,0,0,399,400,1,0,0,0,400,401,1,0,0,0,401, -404,3,142,71,0,402,403,5,32,0,0,403,405,3,94,47,0,404,402,1,0,0,0,404,405, -1,0,0,0,405,408,1,0,0,0,406,407,5,216,0,0,407,409,3,18,9,0,408,406,1,0,0, -0,408,409,1,0,0,0,409,410,1,0,0,0,410,416,5,18,0,0,411,417,3,8,4,0,412,413, -5,2,0,0,413,414,3,8,4,0,414,415,5,3,0,0,415,417,1,0,0,0,416,411,1,0,0,0, -416,412,1,0,0,0,417,826,1,0,0,0,418,419,5,56,0,0,419,420,5,114,0,0,420,423, -5,213,0,0,421,422,5,87,0,0,422,424,5,63,0,0,423,421,1,0,0,0,423,424,1,0, -0,0,424,425,1,0,0,0,425,826,3,142,71,0,426,427,5,151,0,0,427,428,5,114,0, -0,428,429,5,213,0,0,429,430,3,142,71,0,430,431,5,215,0,0,431,432,3,86,43, -0,432,826,1,0,0,0,433,436,5,36,0,0,434,435,5,135,0,0,435,437,5,154,0,0,436, -434,1,0,0,0,436,437,1,0,0,0,437,439,1,0,0,0,438,440,5,189,0,0,439,438,1, -0,0,0,439,440,1,0,0,0,440,441,1,0,0,0,441,442,5,76,0,0,442,443,3,142,71, -0,443,452,5,2,0,0,444,449,3,22,11,0,445,446,5,4,0,0,446,448,3,22,11,0,447, -445,1,0,0,0,448,451,1,0,0,0,449,447,1,0,0,0,449,450,1,0,0,0,450,453,1,0, -0,0,451,449,1,0,0,0,452,444,1,0,0,0,452,453,1,0,0,0,453,454,1,0,0,0,454, -455,5,3,0,0,455,456,5,159,0,0,456,459,3,114,57,0,457,458,5,32,0,0,458,460, -3,94,47,0,459,457,1,0,0,0,459,460,1,0,0,0,460,461,1,0,0,0,461,462,3,24,12, -0,462,463,3,32,16,0,463,826,1,0,0,0,464,465,5,13,0,0,465,466,5,76,0,0,466, -468,3,142,71,0,467,469,3,112,56,0,468,467,1,0,0,0,468,469,1,0,0,0,469,470, -1,0,0,0,470,471,3,28,14,0,471,826,1,0,0,0,472,474,5,56,0,0,473,475,5,189, -0,0,474,473,1,0,0,0,474,475,1,0,0,0,475,476,1,0,0,0,476,479,5,76,0,0,477, -478,5,87,0,0,478,480,5,63,0,0,479,477,1,0,0,0,479,480,1,0,0,0,480,481,1, -0,0,0,481,483,3,142,71,0,482,484,3,112,56,0,483,482,1,0,0,0,483,484,1,0, -0,0,484,826,1,0,0,0,485,486,5,24,0,0,486,487,3,142,71,0,487,496,5,2,0,0, -488,493,3,138,69,0,489,490,5,4,0,0,490,492,3,138,69,0,491,489,1,0,0,0,492, -495,1,0,0,0,493,491,1,0,0,0,493,494,1,0,0,0,494,497,1,0,0,0,495,493,1,0, -0,0,496,488,1,0,0,0,496,497,1,0,0,0,497,498,1,0,0,0,498,499,5,3,0,0,499, -826,1,0,0,0,500,501,5,36,0,0,501,502,5,162,0,0,502,506,3,152,76,0,503,504, -5,216,0,0,504,505,5,11,0,0,505,507,3,146,73,0,506,503,1,0,0,0,506,507,1, -0,0,0,507,826,1,0,0,0,508,509,5,56,0,0,509,510,5,162,0,0,510,826,3,152,76, -0,511,512,5,78,0,0,512,513,3,150,75,0,513,514,5,194,0,0,514,519,3,148,74, -0,515,516,5,4,0,0,516,518,3,148,74,0,517,515,1,0,0,0,518,521,1,0,0,0,519, -517,1,0,0,0,519,520,1,0,0,0,520,525,1,0,0,0,521,519,1,0,0,0,522,523,5,216, -0,0,523,524,5,11,0,0,524,526,5,134,0,0,525,522,1,0,0,0,525,526,1,0,0,0,526, -530,1,0,0,0,527,528,5,79,0,0,528,529,5,23,0,0,529,531,3,146,73,0,530,527, -1,0,0,0,530,531,1,0,0,0,531,826,1,0,0,0,532,536,5,160,0,0,533,534,5,11,0, -0,534,535,5,134,0,0,535,537,5,72,0,0,536,533,1,0,0,0,536,537,1,0,0,0,537, -538,1,0,0,0,538,539,3,150,75,0,539,540,5,74,0,0,540,545,3,148,74,0,541,542, -5,4,0,0,542,544,3,148,74,0,543,541,1,0,0,0,544,547,1,0,0,0,545,543,1,0,0, -0,545,546,1,0,0,0,546,551,1,0,0,0,547,545,1,0,0,0,548,549,5,79,0,0,549,550, -5,23,0,0,550,552,3,146,73,0,551,548,1,0,0,0,551,552,1,0,0,0,552,826,1,0, -0,0,553,554,5,175,0,0,554,558,5,162,0,0,555,559,5,12,0,0,556,559,5,124,0, -0,557,559,3,152,76,0,558,555,1,0,0,0,558,556,1,0,0,0,558,557,1,0,0,0,559, -826,1,0,0,0,560,571,5,78,0,0,561,566,3,140,70,0,562,563,5,4,0,0,563,565, -3,140,70,0,564,562,1,0,0,0,565,568,1,0,0,0,566,564,1,0,0,0,566,567,1,0,0, -0,567,572,1,0,0,0,568,566,1,0,0,0,569,570,5,12,0,0,570,572,5,146,0,0,571, -561,1,0,0,0,571,569,1,0,0,0,572,573,1,0,0,0,573,575,5,132,0,0,574,576,5, -186,0,0,575,574,1,0,0,0,575,576,1,0,0,0,576,577,1,0,0,0,577,578,3,142,71, -0,578,579,5,194,0,0,579,583,3,148,74,0,580,581,5,216,0,0,581,582,5,78,0, -0,582,584,5,134,0,0,583,580,1,0,0,0,583,584,1,0,0,0,584,826,1,0,0,0,585, -589,5,160,0,0,586,587,5,78,0,0,587,588,5,134,0,0,588,590,5,72,0,0,589,586, -1,0,0,0,589,590,1,0,0,0,590,601,1,0,0,0,591,596,3,140,70,0,592,593,5,4,0, -0,593,595,3,140,70,0,594,592,1,0,0,0,595,598,1,0,0,0,596,594,1,0,0,0,596, -597,1,0,0,0,597,602,1,0,0,0,598,596,1,0,0,0,599,600,5,12,0,0,600,602,5,146, -0,0,601,591,1,0,0,0,601,599,1,0,0,0,602,603,1,0,0,0,603,605,5,132,0,0,604, -606,5,186,0,0,605,604,1,0,0,0,605,606,1,0,0,0,606,607,1,0,0,0,607,608,3, -142,71,0,608,609,5,74,0,0,609,610,3,148,74,0,610,826,1,0,0,0,611,612,5,177, -0,0,612,618,5,80,0,0,613,615,5,132,0,0,614,616,5,186,0,0,615,614,1,0,0,0, -615,616,1,0,0,0,616,617,1,0,0,0,617,619,3,142,71,0,618,613,1,0,0,0,618,619, -1,0,0,0,619,826,1,0,0,0,620,622,5,64,0,0,621,623,5,14,0,0,622,621,1,0,0, -0,622,623,1,0,0,0,623,625,1,0,0,0,624,626,5,211,0,0,625,624,1,0,0,0,625, -626,1,0,0,0,626,638,1,0,0,0,627,628,5,2,0,0,628,633,3,132,66,0,629,630,5, -4,0,0,630,632,3,132,66,0,631,629,1,0,0,0,632,635,1,0,0,0,633,631,1,0,0,0, -633,634,1,0,0,0,634,636,1,0,0,0,635,633,1,0,0,0,636,637,5,3,0,0,637,639, -1,0,0,0,638,627,1,0,0,0,638,639,1,0,0,0,639,640,1,0,0,0,640,826,3,6,3,0, -641,642,5,177,0,0,642,643,5,36,0,0,643,644,5,186,0,0,644,826,3,142,71,0, -645,646,5,177,0,0,646,647,5,36,0,0,647,648,5,213,0,0,648,826,3,142,71,0, -649,650,5,177,0,0,650,651,5,36,0,0,651,652,5,114,0,0,652,653,5,213,0,0,653, -826,3,142,71,0,654,655,5,177,0,0,655,656,5,36,0,0,656,657,5,76,0,0,657,659, -3,142,71,0,658,660,3,112,56,0,659,658,1,0,0,0,659,660,1,0,0,0,660,826,1, -0,0,0,661,662,5,177,0,0,662,665,5,187,0,0,663,664,7,2,0,0,664,666,3,142, -71,0,665,663,1,0,0,0,665,666,1,0,0,0,666,673,1,0,0,0,667,668,5,108,0,0,668, -671,3,94,47,0,669,670,5,59,0,0,670,672,3,94,47,0,671,669,1,0,0,0,671,672, -1,0,0,0,672,674,1,0,0,0,673,667,1,0,0,0,673,674,1,0,0,0,674,826,1,0,0,0, -675,676,5,177,0,0,676,679,5,169,0,0,677,678,7,2,0,0,678,680,3,152,76,0,679, -677,1,0,0,0,679,680,1,0,0,0,680,687,1,0,0,0,681,682,5,108,0,0,682,685,3, -94,47,0,683,684,5,59,0,0,684,686,3,94,47,0,685,683,1,0,0,0,685,686,1,0,0, -0,686,688,1,0,0,0,687,681,1,0,0,0,687,688,1,0,0,0,688,826,1,0,0,0,689,690, -5,177,0,0,690,697,5,29,0,0,691,692,5,108,0,0,692,695,3,94,47,0,693,694,5, -59,0,0,694,696,3,94,47,0,695,693,1,0,0,0,695,696,1,0,0,0,696,698,1,0,0,0, -697,691,1,0,0,0,697,698,1,0,0,0,698,826,1,0,0,0,699,700,5,177,0,0,700,701, -5,31,0,0,701,702,7,2,0,0,702,826,3,142,71,0,703,704,5,177,0,0,704,705,5, -181,0,0,705,706,5,72,0,0,706,826,3,142,71,0,707,708,5,177,0,0,708,709,5, -181,0,0,709,710,5,72,0,0,710,711,5,2,0,0,711,712,3,54,27,0,712,713,5,3,0, -0,713,826,1,0,0,0,714,716,5,177,0,0,715,717,5,39,0,0,716,715,1,0,0,0,716, -717,1,0,0,0,717,718,1,0,0,0,718,721,5,163,0,0,719,720,7,2,0,0,720,722,3, -152,76,0,721,719,1,0,0,0,721,722,1,0,0,0,722,826,1,0,0,0,723,724,5,177,0, -0,724,725,5,162,0,0,725,728,5,80,0,0,726,727,7,2,0,0,727,729,3,152,76,0, -728,726,1,0,0,0,728,729,1,0,0,0,729,826,1,0,0,0,730,731,5,52,0,0,731,826, -3,142,71,0,732,733,5,51,0,0,733,826,3,142,71,0,734,735,5,177,0,0,735,742, -5,77,0,0,736,737,5,108,0,0,737,740,3,94,47,0,738,739,5,59,0,0,739,741,3, -94,47,0,740,738,1,0,0,0,740,741,1,0,0,0,741,743,1,0,0,0,742,736,1,0,0,0, -742,743,1,0,0,0,743,826,1,0,0,0,744,745,5,177,0,0,745,752,5,174,0,0,746, -747,5,108,0,0,747,750,3,94,47,0,748,749,5,59,0,0,749,751,3,94,47,0,750,748, -1,0,0,0,750,751,1,0,0,0,751,753,1,0,0,0,752,746,1,0,0,0,752,753,1,0,0,0, -753,826,1,0,0,0,754,755,5,175,0,0,755,756,5,174,0,0,756,757,3,142,71,0,757, -758,5,221,0,0,758,759,3,84,42,0,759,826,1,0,0,0,760,761,5,155,0,0,761,762, -5,174,0,0,762,826,3,142,71,0,763,764,5,180,0,0,764,773,5,195,0,0,765,770, -3,134,67,0,766,767,5,4,0,0,767,769,3,134,67,0,768,766,1,0,0,0,769,772,1, -0,0,0,770,768,1,0,0,0,770,771,1,0,0,0,771,774,1,0,0,0,772,770,1,0,0,0,773, -765,1,0,0,0,773,774,1,0,0,0,774,826,1,0,0,0,775,777,5,33,0,0,776,778,5,217, -0,0,777,776,1,0,0,0,777,778,1,0,0,0,778,826,1,0,0,0,779,781,5,164,0,0,780, -782,5,217,0,0,781,780,1,0,0,0,781,782,1,0,0,0,782,826,1,0,0,0,783,784,5, -145,0,0,784,785,3,152,76,0,785,786,5,74,0,0,786,787,3,6,3,0,787,826,1,0, -0,0,788,789,5,48,0,0,789,790,5,145,0,0,790,826,3,152,76,0,791,792,5,62,0, -0,792,802,3,152,76,0,793,794,5,208,0,0,794,799,3,84,42,0,795,796,5,4,0,0, -796,798,3,84,42,0,797,795,1,0,0,0,798,801,1,0,0,0,799,797,1,0,0,0,799,800, -1,0,0,0,800,803,1,0,0,0,801,799,1,0,0,0,802,793,1,0,0,0,802,803,1,0,0,0, -803,826,1,0,0,0,804,805,5,52,0,0,805,806,5,92,0,0,806,826,3,152,76,0,807, -808,5,52,0,0,808,809,5,139,0,0,809,826,3,152,76,0,810,811,5,205,0,0,811, -812,3,142,71,0,812,813,5,175,0,0,813,818,3,130,65,0,814,815,5,4,0,0,815, -817,3,130,65,0,816,814,1,0,0,0,817,820,1,0,0,0,818,816,1,0,0,0,818,819,1, -0,0,0,819,823,1,0,0,0,820,818,1,0,0,0,821,822,5,215,0,0,822,824,3,86,43, -0,823,821,1,0,0,0,823,824,1,0,0,0,824,826,1,0,0,0,825,167,1,0,0,0,825,168, -1,0,0,0,825,170,1,0,0,0,825,175,1,0,0,0,825,187,1,0,0,0,825,197,1,0,0,0, -825,204,1,0,0,0,825,238,1,0,0,0,825,264,1,0,0,0,825,271,1,0,0,0,825,279, -1,0,0,0,825,286,1,0,0,0,825,289,1,0,0,0,825,300,1,0,0,0,825,317,1,0,0,0, -825,332,1,0,0,0,825,348,1,0,0,0,825,354,1,0,0,0,825,372,1,0,0,0,825,386, -1,0,0,0,825,393,1,0,0,0,825,418,1,0,0,0,825,426,1,0,0,0,825,433,1,0,0,0, -825,464,1,0,0,0,825,472,1,0,0,0,825,485,1,0,0,0,825,500,1,0,0,0,825,508, -1,0,0,0,825,511,1,0,0,0,825,532,1,0,0,0,825,553,1,0,0,0,825,560,1,0,0,0, -825,585,1,0,0,0,825,611,1,0,0,0,825,620,1,0,0,0,825,641,1,0,0,0,825,645, -1,0,0,0,825,649,1,0,0,0,825,654,1,0,0,0,825,661,1,0,0,0,825,675,1,0,0,0, -825,689,1,0,0,0,825,699,1,0,0,0,825,703,1,0,0,0,825,707,1,0,0,0,825,714, -1,0,0,0,825,723,1,0,0,0,825,730,1,0,0,0,825,732,1,0,0,0,825,734,1,0,0,0, -825,744,1,0,0,0,825,754,1,0,0,0,825,760,1,0,0,0,825,763,1,0,0,0,825,775, -1,0,0,0,825,779,1,0,0,0,825,783,1,0,0,0,825,788,1,0,0,0,825,791,1,0,0,0, -825,804,1,0,0,0,825,807,1,0,0,0,825,810,1,0,0,0,826,7,1,0,0,0,827,829,3, -10,5,0,828,827,1,0,0,0,828,829,1,0,0,0,829,830,1,0,0,0,830,831,3,46,23,0, -831,9,1,0,0,0,832,834,5,216,0,0,833,835,5,150,0,0,834,833,1,0,0,0,834,835, -1,0,0,0,835,836,1,0,0,0,836,841,3,62,31,0,837,838,5,4,0,0,838,840,3,62,31, -0,839,837,1,0,0,0,840,843,1,0,0,0,841,839,1,0,0,0,841,842,1,0,0,0,842,11, -1,0,0,0,843,841,1,0,0,0,844,847,3,14,7,0,845,847,3,16,8,0,846,844,1,0,0, -0,846,845,1,0,0,0,847,13,1,0,0,0,848,849,3,152,76,0,849,852,3,114,57,0,850, -851,5,126,0,0,851,853,5,127,0,0,852,850,1,0,0,0,852,853,1,0,0,0,853,856, -1,0,0,0,854,855,5,32,0,0,855,857,3,94,47,0,856,854,1,0,0,0,856,857,1,0,0, -0,857,860,1,0,0,0,858,859,5,216,0,0,859,861,3,18,9,0,860,858,1,0,0,0,860, -861,1,0,0,0,861,15,1,0,0,0,862,863,5,108,0,0,863,866,3,142,71,0,864,865, -7,3,0,0,865,867,5,147,0,0,866,864,1,0,0,0,866,867,1,0,0,0,867,17,1,0,0,0, -868,869,5,2,0,0,869,874,3,20,10,0,870,871,5,4,0,0,871,873,3,20,10,0,872, -870,1,0,0,0,873,876,1,0,0,0,874,872,1,0,0,0,874,875,1,0,0,0,875,877,1,0, -0,0,876,874,1,0,0,0,877,878,5,3,0,0,878,19,1,0,0,0,879,880,3,152,76,0,880, -881,5,221,0,0,881,882,3,84,42,0,882,21,1,0,0,0,883,884,3,152,76,0,884,885, -3,114,57,0,885,23,1,0,0,0,886,888,3,26,13,0,887,886,1,0,0,0,888,891,1,0, -0,0,889,887,1,0,0,0,889,890,1,0,0,0,890,25,1,0,0,0,891,889,1,0,0,0,892,893, -5,103,0,0,893,897,3,38,19,0,894,897,3,40,20,0,895,897,3,42,21,0,896,892, -1,0,0,0,896,894,1,0,0,0,896,895,1,0,0,0,897,27,1,0,0,0,898,900,3,30,15,0, -899,898,1,0,0,0,900,903,1,0,0,0,901,899,1,0,0,0,901,902,1,0,0,0,902,29,1, -0,0,0,903,901,1,0,0,0,904,905,3,42,21,0,905,31,1,0,0,0,906,909,3,34,17,0, -907,909,3,36,18,0,908,906,1,0,0,0,908,907,1,0,0,0,909,33,1,0,0,0,910,911, -5,158,0,0,911,912,3,84,42,0,912,35,1,0,0,0,913,916,5,66,0,0,914,915,5,117, -0,0,915,917,3,44,22,0,916,914,1,0,0,0,916,917,1,0,0,0,917,37,1,0,0,0,918, -921,5,179,0,0,919,921,3,152,76,0,920,918,1,0,0,0,920,919,1,0,0,0,921,39, -1,0,0,0,922,926,5,53,0,0,923,924,5,126,0,0,924,926,5,53,0,0,925,922,1,0, -0,0,925,923,1,0,0,0,926,41,1,0,0,0,927,928,5,159,0,0,928,929,5,127,0,0,929, -930,5,132,0,0,930,931,5,127,0,0,931,937,5,92,0,0,932,933,5,25,0,0,933,934, -5,132,0,0,934,935,5,127,0,0,935,937,5,92,0,0,936,927,1,0,0,0,936,932,1,0, -0,0,937,43,1,0,0,0,938,939,3,152,76,0,939,45,1,0,0,0,940,951,3,48,24,0,941, -942,5,136,0,0,942,943,5,23,0,0,943,948,3,52,26,0,944,945,5,4,0,0,945,947, -3,52,26,0,946,944,1,0,0,0,947,950,1,0,0,0,948,946,1,0,0,0,948,949,1,0,0, -0,949,952,1,0,0,0,950,948,1,0,0,0,951,941,1,0,0,0,951,952,1,0,0,0,952,958, -1,0,0,0,953,954,5,131,0,0,954,956,5,236,0,0,955,957,7,4,0,0,956,955,1,0, -0,0,956,957,1,0,0,0,957,959,1,0,0,0,958,953,1,0,0,0,958,959,1,0,0,0,959, -969,1,0,0,0,960,961,5,109,0,0,961,968,7,5,0,0,962,963,5,68,0,0,963,964,5, -70,0,0,964,965,5,236,0,0,965,966,5,167,0,0,966,968,5,133,0,0,967,960,1,0, -0,0,967,962,1,0,0,0,967,968,1,0,0,0,968,970,1,0,0,0,969,967,1,0,0,0,969, -970,1,0,0,0,970,47,1,0,0,0,971,972,6,24,-1,0,972,973,3,50,25,0,973,988,1, -0,0,0,974,975,10,2,0,0,975,977,5,94,0,0,976,978,3,64,32,0,977,976,1,0,0, -0,977,978,1,0,0,0,978,979,1,0,0,0,979,987,3,48,24,3,980,981,10,1,0,0,981, -983,7,6,0,0,982,984,3,64,32,0,983,982,1,0,0,0,983,984,1,0,0,0,984,985,1, -0,0,0,985,987,3,48,24,2,986,974,1,0,0,0,986,980,1,0,0,0,987,990,1,0,0,0, -988,986,1,0,0,0,988,989,1,0,0,0,989,49,1,0,0,0,990,988,1,0,0,0,991,1008, -3,54,27,0,992,993,5,186,0,0,993,1008,3,142,71,0,994,995,5,210,0,0,995,1000, -3,84,42,0,996,997,5,4,0,0,997,999,3,84,42,0,998,996,1,0,0,0,999,1002,1,0, -0,0,1000,998,1,0,0,0,1000,1001,1,0,0,0,1001,1008,1,0,0,0,1002,1000,1,0,0, -0,1003,1004,5,2,0,0,1004,1005,3,46,23,0,1005,1006,5,3,0,0,1006,1008,1,0, -0,0,1007,991,1,0,0,0,1007,992,1,0,0,0,1007,994,1,0,0,0,1007,1003,1,0,0,0, -1008,51,1,0,0,0,1009,1011,3,84,42,0,1010,1012,7,7,0,0,1011,1010,1,0,0,0, -1011,1012,1,0,0,0,1012,1015,1,0,0,0,1013,1014,5,129,0,0,1014,1016,7,8,0, -0,1015,1013,1,0,0,0,1015,1016,1,0,0,0,1016,53,1,0,0,0,1017,1019,5,172,0, -0,1018,1020,3,64,32,0,1019,1018,1,0,0,0,1019,1020,1,0,0,0,1020,1021,1,0, -0,0,1021,1026,3,66,33,0,1022,1023,5,4,0,0,1023,1025,3,66,33,0,1024,1022, -1,0,0,0,1025,1028,1,0,0,0,1026,1024,1,0,0,0,1026,1027,1,0,0,0,1027,1038, -1,0,0,0,1028,1026,1,0,0,0,1029,1030,5,74,0,0,1030,1035,3,68,34,0,1031,1032, -5,4,0,0,1032,1034,3,68,34,0,1033,1031,1,0,0,0,1034,1037,1,0,0,0,1035,1033, -1,0,0,0,1035,1036,1,0,0,0,1036,1039,1,0,0,0,1037,1035,1,0,0,0,1038,1029, -1,0,0,0,1038,1039,1,0,0,0,1039,1042,1,0,0,0,1040,1041,5,215,0,0,1041,1043, -3,86,43,0,1042,1040,1,0,0,0,1042,1043,1,0,0,0,1043,1047,1,0,0,0,1044,1045, -5,82,0,0,1045,1046,5,23,0,0,1046,1048,3,56,28,0,1047,1044,1,0,0,0,1047,1048, -1,0,0,0,1048,1051,1,0,0,0,1049,1050,5,85,0,0,1050,1052,3,86,43,0,1051,1049, -1,0,0,0,1051,1052,1,0,0,0,1052,55,1,0,0,0,1053,1055,3,64,32,0,1054,1053, -1,0,0,0,1054,1055,1,0,0,0,1055,1056,1,0,0,0,1056,1061,3,58,29,0,1057,1058, -5,4,0,0,1058,1060,3,58,29,0,1059,1057,1,0,0,0,1060,1063,1,0,0,0,1061,1059, -1,0,0,0,1061,1062,1,0,0,0,1062,57,1,0,0,0,1063,1061,1,0,0,0,1064,1105,3, -60,30,0,1065,1066,5,165,0,0,1066,1075,5,2,0,0,1067,1072,3,84,42,0,1068,1069, -5,4,0,0,1069,1071,3,84,42,0,1070,1068,1,0,0,0,1071,1074,1,0,0,0,1072,1070, -1,0,0,0,1072,1073,1,0,0,0,1073,1076,1,0,0,0,1074,1072,1,0,0,0,1075,1067, -1,0,0,0,1075,1076,1,0,0,0,1076,1077,1,0,0,0,1077,1105,5,3,0,0,1078,1079, -5,38,0,0,1079,1088,5,2,0,0,1080,1085,3,84,42,0,1081,1082,5,4,0,0,1082,1084, -3,84,42,0,1083,1081,1,0,0,0,1084,1087,1,0,0,0,1085,1083,1,0,0,0,1085,1086, -1,0,0,0,1086,1089,1,0,0,0,1087,1085,1,0,0,0,1088,1080,1,0,0,0,1088,1089, -1,0,0,0,1089,1090,1,0,0,0,1090,1105,5,3,0,0,1091,1092,5,83,0,0,1092,1093, -5,176,0,0,1093,1094,5,2,0,0,1094,1099,3,60,30,0,1095,1096,5,4,0,0,1096,1098, -3,60,30,0,1097,1095,1,0,0,0,1098,1101,1,0,0,0,1099,1097,1,0,0,0,1099,1100, -1,0,0,0,1100,1102,1,0,0,0,1101,1099,1,0,0,0,1102,1103,5,3,0,0,1103,1105, -1,0,0,0,1104,1064,1,0,0,0,1104,1065,1,0,0,0,1104,1078,1,0,0,0,1104,1091, -1,0,0,0,1105,59,1,0,0,0,1106,1115,5,2,0,0,1107,1112,3,84,42,0,1108,1109, -5,4,0,0,1109,1111,3,84,42,0,1110,1108,1,0,0,0,1111,1114,1,0,0,0,1112,1110, -1,0,0,0,1112,1113,1,0,0,0,1113,1116,1,0,0,0,1114,1112,1,0,0,0,1115,1107, -1,0,0,0,1115,1116,1,0,0,0,1116,1117,1,0,0,0,1117,1120,5,3,0,0,1118,1120, -3,84,42,0,1119,1106,1,0,0,0,1119,1118,1,0,0,0,1120,61,1,0,0,0,1121,1123, -3,152,76,0,1122,1124,3,80,40,0,1123,1122,1,0,0,0,1123,1124,1,0,0,0,1124, -1125,1,0,0,0,1125,1126,5,18,0,0,1126,1127,5,2,0,0,1127,1128,3,8,4,0,1128, -1129,5,3,0,0,1129,63,1,0,0,0,1130,1131,7,9,0,0,1131,65,1,0,0,0,1132,1137, -3,84,42,0,1133,1135,5,18,0,0,1134,1133,1,0,0,0,1134,1135,1,0,0,0,1135,1136, -1,0,0,0,1136,1138,3,152,76,0,1137,1134,1,0,0,0,1137,1138,1,0,0,0,1138,1145, -1,0,0,0,1139,1140,3,142,71,0,1140,1141,5,1,0,0,1141,1142,5,229,0,0,1142, -1145,1,0,0,0,1143,1145,5,229,0,0,1144,1132,1,0,0,0,1144,1139,1,0,0,0,1144, -1143,1,0,0,0,1145,67,1,0,0,0,1146,1147,6,34,-1,0,1147,1148,3,74,37,0,1148, -1167,1,0,0,0,1149,1163,10,2,0,0,1150,1151,5,37,0,0,1151,1152,5,102,0,0,1152, -1164,3,74,37,0,1153,1154,3,70,35,0,1154,1155,5,102,0,0,1155,1156,3,68,34, -0,1156,1157,3,72,36,0,1157,1164,1,0,0,0,1158,1159,5,118,0,0,1159,1160,3, -70,35,0,1160,1161,5,102,0,0,1161,1162,3,74,37,0,1162,1164,1,0,0,0,1163,1150, -1,0,0,0,1163,1153,1,0,0,0,1163,1158,1,0,0,0,1164,1166,1,0,0,0,1165,1149, -1,0,0,0,1166,1169,1,0,0,0,1167,1165,1,0,0,0,1167,1168,1,0,0,0,1168,69,1, -0,0,0,1169,1167,1,0,0,0,1170,1172,5,91,0,0,1171,1170,1,0,0,0,1171,1172,1, -0,0,0,1172,1186,1,0,0,0,1173,1175,5,106,0,0,1174,1176,5,138,0,0,1175,1174, -1,0,0,0,1175,1176,1,0,0,0,1176,1186,1,0,0,0,1177,1179,5,161,0,0,1178,1180, -5,138,0,0,1179,1178,1,0,0,0,1179,1180,1,0,0,0,1180,1186,1,0,0,0,1181,1183, -5,75,0,0,1182,1184,5,138,0,0,1183,1182,1,0,0,0,1183,1184,1,0,0,0,1184,1186, -1,0,0,0,1185,1171,1,0,0,0,1185,1173,1,0,0,0,1185,1177,1,0,0,0,1185,1181, -1,0,0,0,1186,71,1,0,0,0,1187,1188,5,132,0,0,1188,1202,3,86,43,0,1189,1190, -5,208,0,0,1190,1191,5,2,0,0,1191,1196,3,152,76,0,1192,1193,5,4,0,0,1193, -1195,3,152,76,0,1194,1192,1,0,0,0,1195,1198,1,0,0,0,1196,1194,1,0,0,0,1196, -1197,1,0,0,0,1197,1199,1,0,0,0,1198,1196,1,0,0,0,1199,1200,5,3,0,0,1200, -1202,1,0,0,0,1201,1187,1,0,0,0,1201,1189,1,0,0,0,1202,73,1,0,0,0,1203,1210, -3,78,39,0,1204,1205,5,188,0,0,1205,1206,3,76,38,0,1206,1207,5,2,0,0,1207, -1208,3,84,42,0,1208,1209,5,3,0,0,1209,1211,1,0,0,0,1210,1204,1,0,0,0,1210, -1211,1,0,0,0,1211,75,1,0,0,0,1212,1213,7,10,0,0,1213,77,1,0,0,0,1214,1222, -3,82,41,0,1215,1217,5,18,0,0,1216,1215,1,0,0,0,1216,1217,1,0,0,0,1217,1218, -1,0,0,0,1218,1220,3,152,76,0,1219,1221,3,80,40,0,1220,1219,1,0,0,0,1220, -1221,1,0,0,0,1221,1223,1,0,0,0,1222,1216,1,0,0,0,1222,1223,1,0,0,0,1223, -79,1,0,0,0,1224,1225,5,2,0,0,1225,1230,3,152,76,0,1226,1227,5,4,0,0,1227, -1229,3,152,76,0,1228,1226,1,0,0,0,1229,1232,1,0,0,0,1230,1228,1,0,0,0,1230, -1231,1,0,0,0,1231,1233,1,0,0,0,1232,1230,1,0,0,0,1233,1234,5,3,0,0,1234, -81,1,0,0,0,1235,1237,3,142,71,0,1236,1238,3,144,72,0,1237,1236,1,0,0,0,1237, -1238,1,0,0,0,1238,1268,1,0,0,0,1239,1240,5,2,0,0,1240,1241,3,8,4,0,1241, -1242,5,3,0,0,1242,1268,1,0,0,0,1243,1244,5,204,0,0,1244,1245,5,2,0,0,1245, -1250,3,84,42,0,1246,1247,5,4,0,0,1247,1249,3,84,42,0,1248,1246,1,0,0,0,1249, -1252,1,0,0,0,1250,1248,1,0,0,0,1250,1251,1,0,0,0,1251,1253,1,0,0,0,1252, -1250,1,0,0,0,1253,1256,5,3,0,0,1254,1255,5,216,0,0,1255,1257,5,137,0,0,1256, -1254,1,0,0,0,1256,1257,1,0,0,0,1257,1268,1,0,0,0,1258,1259,5,105,0,0,1259, -1260,5,2,0,0,1260,1261,3,8,4,0,1261,1262,5,3,0,0,1262,1268,1,0,0,0,1263, -1264,5,2,0,0,1264,1265,3,68,34,0,1265,1266,5,3,0,0,1266,1268,1,0,0,0,1267, -1235,1,0,0,0,1267,1239,1,0,0,0,1267,1243,1,0,0,0,1267,1258,1,0,0,0,1267, -1263,1,0,0,0,1268,83,1,0,0,0,1269,1270,3,86,43,0,1270,85,1,0,0,0,1271,1272, -6,43,-1,0,1272,1274,3,90,45,0,1273,1275,3,88,44,0,1274,1273,1,0,0,0,1274, -1275,1,0,0,0,1275,1279,1,0,0,0,1276,1277,5,126,0,0,1277,1279,3,86,43,3,1278, -1271,1,0,0,0,1278,1276,1,0,0,0,1279,1288,1,0,0,0,1280,1281,10,2,0,0,1281, -1282,5,15,0,0,1282,1287,3,86,43,3,1283,1284,10,1,0,0,1284,1285,5,135,0,0, -1285,1287,3,86,43,2,1286,1280,1,0,0,0,1286,1283,1,0,0,0,1287,1290,1,0,0, -0,1288,1286,1,0,0,0,1288,1289,1,0,0,0,1289,87,1,0,0,0,1290,1288,1,0,0,0, -1291,1292,3,100,50,0,1292,1293,3,90,45,0,1293,1353,1,0,0,0,1294,1295,3,100, -50,0,1295,1296,3,102,51,0,1296,1297,5,2,0,0,1297,1298,3,8,4,0,1298,1299, -5,3,0,0,1299,1353,1,0,0,0,1300,1302,5,126,0,0,1301,1300,1,0,0,0,1301,1302, -1,0,0,0,1302,1303,1,0,0,0,1303,1304,5,22,0,0,1304,1305,3,90,45,0,1305,1306, -5,15,0,0,1306,1307,3,90,45,0,1307,1353,1,0,0,0,1308,1310,5,126,0,0,1309, -1308,1,0,0,0,1309,1310,1,0,0,0,1310,1311,1,0,0,0,1311,1312,5,89,0,0,1312, -1313,5,2,0,0,1313,1318,3,84,42,0,1314,1315,5,4,0,0,1315,1317,3,84,42,0,1316, -1314,1,0,0,0,1317,1320,1,0,0,0,1318,1316,1,0,0,0,1318,1319,1,0,0,0,1319, -1321,1,0,0,0,1320,1318,1,0,0,0,1321,1322,5,3,0,0,1322,1353,1,0,0,0,1323, -1325,5,126,0,0,1324,1323,1,0,0,0,1324,1325,1,0,0,0,1325,1326,1,0,0,0,1326, -1327,5,89,0,0,1327,1328,5,2,0,0,1328,1329,3,8,4,0,1329,1330,5,3,0,0,1330, -1353,1,0,0,0,1331,1333,5,126,0,0,1332,1331,1,0,0,0,1332,1333,1,0,0,0,1333, -1334,1,0,0,0,1334,1335,5,108,0,0,1335,1338,3,90,45,0,1336,1337,5,59,0,0, -1337,1339,3,90,45,0,1338,1336,1,0,0,0,1338,1339,1,0,0,0,1339,1353,1,0,0, -0,1340,1342,5,99,0,0,1341,1343,5,126,0,0,1342,1341,1,0,0,0,1342,1343,1,0, -0,0,1343,1344,1,0,0,0,1344,1353,5,127,0,0,1345,1347,5,99,0,0,1346,1348,5, -126,0,0,1347,1346,1,0,0,0,1347,1348,1,0,0,0,1348,1349,1,0,0,0,1349,1350, -5,54,0,0,1350,1351,5,74,0,0,1351,1353,3,90,45,0,1352,1291,1,0,0,0,1352,1294, -1,0,0,0,1352,1301,1,0,0,0,1352,1309,1,0,0,0,1352,1324,1,0,0,0,1352,1332, -1,0,0,0,1352,1340,1,0,0,0,1352,1345,1,0,0,0,1353,89,1,0,0,0,1354,1355,6, -45,-1,0,1355,1359,3,92,46,0,1356,1357,7,11,0,0,1357,1359,3,90,45,4,1358, -1354,1,0,0,0,1358,1356,1,0,0,0,1359,1374,1,0,0,0,1360,1361,10,3,0,0,1361, -1362,7,12,0,0,1362,1373,3,90,45,4,1363,1364,10,2,0,0,1364,1365,7,11,0,0, -1365,1373,3,90,45,3,1366,1367,10,1,0,0,1367,1368,5,232,0,0,1368,1373,3,90, -45,2,1369,1370,10,5,0,0,1370,1371,5,20,0,0,1371,1373,3,98,49,0,1372,1360, -1,0,0,0,1372,1363,1,0,0,0,1372,1366,1,0,0,0,1372,1369,1,0,0,0,1373,1376, -1,0,0,0,1374,1372,1,0,0,0,1374,1375,1,0,0,0,1375,91,1,0,0,0,1376,1374,1, -0,0,0,1377,1378,6,46,-1,0,1378,1617,5,127,0,0,1379,1617,3,106,53,0,1380, -1381,3,152,76,0,1381,1382,3,94,47,0,1382,1617,1,0,0,0,1383,1384,5,245,0, -0,1384,1617,3,94,47,0,1385,1617,3,154,77,0,1386,1617,3,104,52,0,1387,1617, -3,94,47,0,1388,1617,5,235,0,0,1389,1617,5,5,0,0,1390,1391,5,143,0,0,1391, -1392,5,2,0,0,1392,1393,3,90,45,0,1393,1394,5,89,0,0,1394,1395,3,90,45,0, -1395,1396,5,3,0,0,1396,1617,1,0,0,0,1397,1398,5,2,0,0,1398,1401,3,84,42, -0,1399,1400,5,4,0,0,1400,1402,3,84,42,0,1401,1399,1,0,0,0,1402,1403,1,0, -0,0,1403,1401,1,0,0,0,1403,1404,1,0,0,0,1404,1405,1,0,0,0,1405,1406,5,3, -0,0,1406,1617,1,0,0,0,1407,1408,5,166,0,0,1408,1409,5,2,0,0,1409,1414,3, -84,42,0,1410,1411,5,4,0,0,1411,1413,3,84,42,0,1412,1410,1,0,0,0,1413,1416, -1,0,0,0,1414,1412,1,0,0,0,1414,1415,1,0,0,0,1415,1417,1,0,0,0,1416,1414, -1,0,0,0,1417,1418,5,3,0,0,1418,1617,1,0,0,0,1419,1420,3,142,71,0,1420,1421, -5,2,0,0,1421,1422,5,229,0,0,1422,1424,5,3,0,0,1423,1425,3,122,61,0,1424, -1423,1,0,0,0,1424,1425,1,0,0,0,1425,1427,1,0,0,0,1426,1428,3,124,62,0,1427, -1426,1,0,0,0,1427,1428,1,0,0,0,1428,1617,1,0,0,0,1429,1430,3,142,71,0,1430, -1442,5,2,0,0,1431,1433,3,64,32,0,1432,1431,1,0,0,0,1432,1433,1,0,0,0,1433, -1434,1,0,0,0,1434,1439,3,84,42,0,1435,1436,5,4,0,0,1436,1438,3,84,42,0,1437, -1435,1,0,0,0,1438,1441,1,0,0,0,1439,1437,1,0,0,0,1439,1440,1,0,0,0,1440, -1443,1,0,0,0,1441,1439,1,0,0,0,1442,1432,1,0,0,0,1442,1443,1,0,0,0,1443, -1454,1,0,0,0,1444,1445,5,136,0,0,1445,1446,5,23,0,0,1446,1451,3,52,26,0, -1447,1448,5,4,0,0,1448,1450,3,52,26,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,1455,1,0,0,0,1453,1451,1,0,0, -0,1454,1444,1,0,0,0,1454,1455,1,0,0,0,1455,1456,1,0,0,0,1456,1458,5,3,0, -0,1457,1459,3,122,61,0,1458,1457,1,0,0,0,1458,1459,1,0,0,0,1459,1464,1,0, -0,0,1460,1462,3,96,48,0,1461,1460,1,0,0,0,1461,1462,1,0,0,0,1462,1463,1, -0,0,0,1463,1465,3,124,62,0,1464,1461,1,0,0,0,1464,1465,1,0,0,0,1465,1617, -1,0,0,0,1466,1467,3,152,76,0,1467,1468,5,6,0,0,1468,1469,3,84,42,0,1469, -1617,1,0,0,0,1470,1479,5,2,0,0,1471,1476,3,152,76,0,1472,1473,5,4,0,0,1473, -1475,3,152,76,0,1474,1472,1,0,0,0,1475,1478,1,0,0,0,1476,1474,1,0,0,0,1476, -1477,1,0,0,0,1477,1480,1,0,0,0,1478,1476,1,0,0,0,1479,1471,1,0,0,0,1479, -1480,1,0,0,0,1480,1481,1,0,0,0,1481,1482,5,3,0,0,1482,1483,5,6,0,0,1483, -1617,3,84,42,0,1484,1485,5,2,0,0,1485,1486,3,8,4,0,1486,1487,5,3,0,0,1487, -1617,1,0,0,0,1488,1489,5,63,0,0,1489,1490,5,2,0,0,1490,1491,3,8,4,0,1491, -1492,5,3,0,0,1492,1617,1,0,0,0,1493,1494,5,27,0,0,1494,1496,3,90,45,0,1495, -1497,3,120,60,0,1496,1495,1,0,0,0,1497,1498,1,0,0,0,1498,1496,1,0,0,0,1498, -1499,1,0,0,0,1499,1502,1,0,0,0,1500,1501,5,57,0,0,1501,1503,3,84,42,0,1502, -1500,1,0,0,0,1502,1503,1,0,0,0,1503,1504,1,0,0,0,1504,1505,5,58,0,0,1505, -1617,1,0,0,0,1506,1508,5,27,0,0,1507,1509,3,120,60,0,1508,1507,1,0,0,0,1509, -1510,1,0,0,0,1510,1508,1,0,0,0,1510,1511,1,0,0,0,1511,1514,1,0,0,0,1512, -1513,5,57,0,0,1513,1515,3,84,42,0,1514,1512,1,0,0,0,1514,1515,1,0,0,0,1515, -1516,1,0,0,0,1516,1517,5,58,0,0,1517,1617,1,0,0,0,1518,1519,5,28,0,0,1519, -1520,5,2,0,0,1520,1521,3,84,42,0,1521,1522,5,18,0,0,1522,1523,3,114,57,0, -1523,1524,5,3,0,0,1524,1617,1,0,0,0,1525,1526,5,198,0,0,1526,1527,5,2,0, -0,1527,1528,3,84,42,0,1528,1529,5,18,0,0,1529,1530,3,114,57,0,1530,1531, -5,3,0,0,1531,1617,1,0,0,0,1532,1533,5,17,0,0,1533,1542,5,7,0,0,1534,1539, -3,84,42,0,1535,1536,5,4,0,0,1536,1538,3,84,42,0,1537,1535,1,0,0,0,1538,1541, -1,0,0,0,1539,1537,1,0,0,0,1539,1540,1,0,0,0,1540,1543,1,0,0,0,1541,1539, -1,0,0,0,1542,1534,1,0,0,0,1542,1543,1,0,0,0,1543,1544,1,0,0,0,1544,1617, -5,8,0,0,1545,1617,3,152,76,0,1546,1617,5,40,0,0,1547,1551,5,42,0,0,1548, -1549,5,2,0,0,1549,1550,5,236,0,0,1550,1552,5,3,0,0,1551,1548,1,0,0,0,1551, -1552,1,0,0,0,1552,1617,1,0,0,0,1553,1557,5,43,0,0,1554,1555,5,2,0,0,1555, -1556,5,236,0,0,1556,1558,5,3,0,0,1557,1554,1,0,0,0,1557,1558,1,0,0,0,1558, -1617,1,0,0,0,1559,1563,5,110,0,0,1560,1561,5,2,0,0,1561,1562,5,236,0,0,1562, -1564,5,3,0,0,1563,1560,1,0,0,0,1563,1564,1,0,0,0,1564,1617,1,0,0,0,1565, -1569,5,111,0,0,1566,1567,5,2,0,0,1567,1568,5,236,0,0,1568,1570,5,3,0,0,1569, -1566,1,0,0,0,1569,1570,1,0,0,0,1570,1617,1,0,0,0,1571,1617,5,44,0,0,1572, -1573,5,182,0,0,1573,1574,5,2,0,0,1574,1575,3,90,45,0,1575,1576,5,74,0,0, -1576,1579,3,90,45,0,1577,1578,5,72,0,0,1578,1580,3,90,45,0,1579,1577,1,0, -0,0,1579,1580,1,0,0,0,1580,1581,1,0,0,0,1581,1582,5,3,0,0,1582,1617,1,0, -0,0,1583,1584,5,125,0,0,1584,1585,5,2,0,0,1585,1588,3,90,45,0,1586,1587, -5,4,0,0,1587,1589,3,110,55,0,1588,1586,1,0,0,0,1588,1589,1,0,0,0,1589,1590, -1,0,0,0,1590,1591,5,3,0,0,1591,1617,1,0,0,0,1592,1593,5,65,0,0,1593,1594, -5,2,0,0,1594,1595,3,152,76,0,1595,1596,5,74,0,0,1596,1597,3,90,45,0,1597, -1598,5,3,0,0,1598,1617,1,0,0,0,1599,1600,5,2,0,0,1600,1601,3,84,42,0,1601, -1602,5,3,0,0,1602,1617,1,0,0,0,1603,1604,5,83,0,0,1604,1613,5,2,0,0,1605, -1610,3,142,71,0,1606,1607,5,4,0,0,1607,1609,3,142,71,0,1608,1606,1,0,0,0, -1609,1612,1,0,0,0,1610,1608,1,0,0,0,1610,1611,1,0,0,0,1611,1614,1,0,0,0, -1612,1610,1,0,0,0,1613,1605,1,0,0,0,1613,1614,1,0,0,0,1614,1615,1,0,0,0, -1615,1617,5,3,0,0,1616,1377,1,0,0,0,1616,1379,1,0,0,0,1616,1380,1,0,0,0, -1616,1383,1,0,0,0,1616,1385,1,0,0,0,1616,1386,1,0,0,0,1616,1387,1,0,0,0, -1616,1388,1,0,0,0,1616,1389,1,0,0,0,1616,1390,1,0,0,0,1616,1397,1,0,0,0, -1616,1407,1,0,0,0,1616,1419,1,0,0,0,1616,1429,1,0,0,0,1616,1466,1,0,0,0, -1616,1470,1,0,0,0,1616,1484,1,0,0,0,1616,1488,1,0,0,0,1616,1493,1,0,0,0, -1616,1506,1,0,0,0,1616,1518,1,0,0,0,1616,1525,1,0,0,0,1616,1532,1,0,0,0, -1616,1545,1,0,0,0,1616,1546,1,0,0,0,1616,1547,1,0,0,0,1616,1553,1,0,0,0, -1616,1559,1,0,0,0,1616,1565,1,0,0,0,1616,1571,1,0,0,0,1616,1572,1,0,0,0, -1616,1583,1,0,0,0,1616,1592,1,0,0,0,1616,1599,1,0,0,0,1616,1603,1,0,0,0, -1617,1628,1,0,0,0,1618,1619,10,14,0,0,1619,1620,5,7,0,0,1620,1621,3,90,45, -0,1621,1622,5,8,0,0,1622,1627,1,0,0,0,1623,1624,10,12,0,0,1624,1625,5,1, -0,0,1625,1627,3,152,76,0,1626,1618,1,0,0,0,1626,1623,1,0,0,0,1627,1630,1, -0,0,0,1628,1626,1,0,0,0,1628,1629,1,0,0,0,1629,93,1,0,0,0,1630,1628,1,0, -0,0,1631,1638,5,233,0,0,1632,1635,5,234,0,0,1633,1634,5,200,0,0,1634,1636, -5,233,0,0,1635,1633,1,0,0,0,1635,1636,1,0,0,0,1636,1638,1,0,0,0,1637,1631, -1,0,0,0,1637,1632,1,0,0,0,1638,95,1,0,0,0,1639,1640,5,88,0,0,1640,1644,5, -129,0,0,1641,1642,5,156,0,0,1642,1644,5,129,0,0,1643,1639,1,0,0,0,1643,1641, -1,0,0,0,1644,97,1,0,0,0,1645,1646,5,192,0,0,1646,1647,5,220,0,0,1647,1652, -3,106,53,0,1648,1649,5,192,0,0,1649,1650,5,220,0,0,1650,1652,3,94,47,0,1651, -1645,1,0,0,0,1651,1648,1,0,0,0,1652,99,1,0,0,0,1653,1654,7,13,0,0,1654,101, -1,0,0,0,1655,1656,7,14,0,0,1656,103,1,0,0,0,1657,1658,7,15,0,0,1658,105, -1,0,0,0,1659,1661,5,95,0,0,1660,1662,7,11,0,0,1661,1660,1,0,0,0,1661,1662, -1,0,0,0,1662,1663,1,0,0,0,1663,1664,3,94,47,0,1664,1667,3,108,54,0,1665, -1666,5,194,0,0,1666,1668,3,108,54,0,1667,1665,1,0,0,0,1667,1668,1,0,0,0, -1668,107,1,0,0,0,1669,1670,7,16,0,0,1670,109,1,0,0,0,1671,1672,7,17,0,0, -1672,111,1,0,0,0,1673,1682,5,2,0,0,1674,1679,3,114,57,0,1675,1676,5,4,0, -0,1676,1678,3,114,57,0,1677,1675,1,0,0,0,1678,1681,1,0,0,0,1679,1677,1,0, -0,0,1679,1680,1,0,0,0,1680,1683,1,0,0,0,1681,1679,1,0,0,0,1682,1674,1,0, -0,0,1682,1683,1,0,0,0,1683,1684,1,0,0,0,1684,1685,5,3,0,0,1685,113,1,0,0, -0,1686,1687,6,57,-1,0,1687,1688,5,17,0,0,1688,1689,5,223,0,0,1689,1690,3, -114,57,0,1690,1691,5,225,0,0,1691,1734,1,0,0,0,1692,1693,5,113,0,0,1693, -1694,5,223,0,0,1694,1695,3,114,57,0,1695,1696,5,4,0,0,1696,1697,3,114,57, -0,1697,1698,5,225,0,0,1698,1734,1,0,0,0,1699,1700,5,166,0,0,1700,1701,5, -2,0,0,1701,1702,3,152,76,0,1702,1709,3,114,57,0,1703,1704,5,4,0,0,1704,1705, -3,152,76,0,1705,1706,3,114,57,0,1706,1708,1,0,0,0,1707,1703,1,0,0,0,1708, -1711,1,0,0,0,1709,1707,1,0,0,0,1709,1710,1,0,0,0,1710,1712,1,0,0,0,1711, -1709,1,0,0,0,1712,1713,5,3,0,0,1713,1734,1,0,0,0,1714,1726,3,118,59,0,1715, -1716,5,2,0,0,1716,1721,3,116,58,0,1717,1718,5,4,0,0,1718,1720,3,116,58,0, -1719,1717,1,0,0,0,1720,1723,1,0,0,0,1721,1719,1,0,0,0,1721,1722,1,0,0,0, -1722,1724,1,0,0,0,1723,1721,1,0,0,0,1724,1725,5,3,0,0,1725,1727,1,0,0,0, -1726,1715,1,0,0,0,1726,1727,1,0,0,0,1727,1734,1,0,0,0,1728,1729,5,95,0,0, -1729,1730,3,108,54,0,1730,1731,5,194,0,0,1731,1732,3,108,54,0,1732,1734, -1,0,0,0,1733,1686,1,0,0,0,1733,1692,1,0,0,0,1733,1699,1,0,0,0,1733,1714, -1,0,0,0,1733,1728,1,0,0,0,1734,1739,1,0,0,0,1735,1736,10,6,0,0,1736,1738, -5,17,0,0,1737,1735,1,0,0,0,1738,1741,1,0,0,0,1739,1737,1,0,0,0,1739,1740, -1,0,0,0,1740,115,1,0,0,0,1741,1739,1,0,0,0,1742,1745,5,236,0,0,1743,1745, -3,114,57,0,1744,1742,1,0,0,0,1744,1743,1,0,0,0,1745,117,1,0,0,0,1746,1751, -5,243,0,0,1747,1751,5,244,0,0,1748,1751,5,245,0,0,1749,1751,3,142,71,0,1750, -1746,1,0,0,0,1750,1747,1,0,0,0,1750,1748,1,0,0,0,1750,1749,1,0,0,0,1751, -119,1,0,0,0,1752,1753,5,214,0,0,1753,1754,3,84,42,0,1754,1755,5,191,0,0, -1755,1756,3,84,42,0,1756,121,1,0,0,0,1757,1758,5,69,0,0,1758,1759,5,2,0, -0,1759,1760,5,215,0,0,1760,1761,3,86,43,0,1761,1762,5,3,0,0,1762,123,1,0, -0,0,1763,1764,5,140,0,0,1764,1775,5,2,0,0,1765,1766,5,141,0,0,1766,1767, -5,23,0,0,1767,1772,3,84,42,0,1768,1769,5,4,0,0,1769,1771,3,84,42,0,1770, -1768,1,0,0,0,1771,1774,1,0,0,0,1772,1770,1,0,0,0,1772,1773,1,0,0,0,1773, -1776,1,0,0,0,1774,1772,1,0,0,0,1775,1765,1,0,0,0,1775,1776,1,0,0,0,1776, -1787,1,0,0,0,1777,1778,5,136,0,0,1778,1779,5,23,0,0,1779,1784,3,52,26,0, -1780,1781,5,4,0,0,1781,1783,3,52,26,0,1782,1780,1,0,0,0,1783,1786,1,0,0, -0,1784,1782,1,0,0,0,1784,1785,1,0,0,0,1785,1788,1,0,0,0,1786,1784,1,0,0, -0,1787,1777,1,0,0,0,1787,1788,1,0,0,0,1788,1790,1,0,0,0,1789,1791,3,126, -63,0,1790,1789,1,0,0,0,1790,1791,1,0,0,0,1791,1792,1,0,0,0,1792,1793,5,3, -0,0,1793,125,1,0,0,0,1794,1795,5,148,0,0,1795,1819,3,128,64,0,1796,1797, -5,167,0,0,1797,1819,3,128,64,0,1798,1799,5,84,0,0,1799,1819,3,128,64,0,1800, -1801,5,148,0,0,1801,1802,5,22,0,0,1802,1803,3,128,64,0,1803,1804,5,15,0, -0,1804,1805,3,128,64,0,1805,1819,1,0,0,0,1806,1807,5,167,0,0,1807,1808,5, -22,0,0,1808,1809,3,128,64,0,1809,1810,5,15,0,0,1810,1811,3,128,64,0,1811, -1819,1,0,0,0,1812,1813,5,84,0,0,1813,1814,5,22,0,0,1814,1815,3,128,64,0, -1815,1816,5,15,0,0,1816,1817,3,128,64,0,1817,1819,1,0,0,0,1818,1794,1,0, -0,0,1818,1796,1,0,0,0,1818,1798,1,0,0,0,1818,1800,1,0,0,0,1818,1806,1,0, -0,0,1818,1812,1,0,0,0,1819,127,1,0,0,0,1820,1821,5,201,0,0,1821,1830,5,144, -0,0,1822,1823,5,201,0,0,1823,1830,5,71,0,0,1824,1825,5,39,0,0,1825,1830, -5,166,0,0,1826,1827,3,84,42,0,1827,1828,7,18,0,0,1828,1830,1,0,0,0,1829, -1820,1,0,0,0,1829,1822,1,0,0,0,1829,1824,1,0,0,0,1829,1826,1,0,0,0,1830, -129,1,0,0,0,1831,1832,3,152,76,0,1832,1833,5,221,0,0,1833,1834,3,84,42,0, -1834,131,1,0,0,0,1835,1836,5,73,0,0,1836,1840,7,19,0,0,1837,1838,5,199,0, -0,1838,1840,7,20,0,0,1839,1835,1,0,0,0,1839,1837,1,0,0,0,1840,133,1,0,0, -0,1841,1842,5,100,0,0,1842,1843,5,107,0,0,1843,1847,3,136,68,0,1844,1845, -5,149,0,0,1845,1847,7,21,0,0,1846,1841,1,0,0,0,1846,1844,1,0,0,0,1847,135, -1,0,0,0,1848,1849,5,149,0,0,1849,1856,5,202,0,0,1850,1851,5,149,0,0,1851, -1856,5,34,0,0,1852,1853,5,153,0,0,1853,1856,5,149,0,0,1854,1856,5,173,0, -0,1855,1848,1,0,0,0,1855,1850,1,0,0,0,1855,1852,1,0,0,0,1855,1854,1,0,0, -0,1856,137,1,0,0,0,1857,1863,3,84,42,0,1858,1859,3,152,76,0,1859,1860,5, -9,0,0,1860,1861,3,84,42,0,1861,1863,1,0,0,0,1862,1857,1,0,0,0,1862,1858, -1,0,0,0,1863,139,1,0,0,0,1864,1869,5,172,0,0,1865,1869,5,50,0,0,1866,1869, -5,93,0,0,1867,1869,3,152,76,0,1868,1864,1,0,0,0,1868,1865,1,0,0,0,1868,1866, -1,0,0,0,1868,1867,1,0,0,0,1869,141,1,0,0,0,1870,1875,3,152,76,0,1871,1872, -5,1,0,0,1872,1874,3,152,76,0,1873,1871,1,0,0,0,1874,1877,1,0,0,0,1875,1873, -1,0,0,0,1875,1876,1,0,0,0,1876,143,1,0,0,0,1877,1875,1,0,0,0,1878,1879,5, -72,0,0,1879,1880,7,22,0,0,1880,1881,5,18,0,0,1881,1882,5,130,0,0,1882,1883, -3,90,45,0,1883,145,1,0,0,0,1884,1888,5,44,0,0,1885,1888,5,41,0,0,1886,1888, -3,148,74,0,1887,1884,1,0,0,0,1887,1885,1,0,0,0,1887,1886,1,0,0,0,1888,147, -1,0,0,0,1889,1890,5,207,0,0,1890,1895,3,152,76,0,1891,1892,5,162,0,0,1892, -1895,3,152,76,0,1893,1895,3,152,76,0,1894,1889,1,0,0,0,1894,1891,1,0,0,0, -1894,1893,1,0,0,0,1895,149,1,0,0,0,1896,1901,3,152,76,0,1897,1898,5,4,0, -0,1898,1900,3,152,76,0,1899,1897,1,0,0,0,1900,1903,1,0,0,0,1901,1899,1,0, -0,0,1901,1902,1,0,0,0,1902,151,1,0,0,0,1903,1901,1,0,0,0,1904,1910,5,239, -0,0,1905,1910,5,241,0,0,1906,1910,3,156,78,0,1907,1910,5,242,0,0,1908,1910, -5,240,0,0,1909,1904,1,0,0,0,1909,1905,1,0,0,0,1909,1906,1,0,0,0,1909,1907, -1,0,0,0,1909,1908,1,0,0,0,1910,153,1,0,0,0,1911,1915,5,237,0,0,1912,1915, -5,238,0,0,1913,1915,5,236,0,0,1914,1911,1,0,0,0,1914,1912,1,0,0,0,1914,1913, -1,0,0,0,1915,155,1,0,0,0,1916,1917,7,23,0,0,1917,157,1,0,0,0,245,180,185, -191,195,209,213,217,221,229,233,236,243,252,258,262,268,275,284,293,304, -311,321,328,336,344,352,364,370,375,381,390,399,404,408,416,423,436,439, -449,452,459,468,474,479,483,493,496,506,519,525,530,536,545,551,558,566, -571,575,583,589,596,601,605,615,618,622,625,633,638,659,665,671,673,679, -685,687,695,697,716,721,728,740,742,750,752,770,773,777,781,799,802,818, -823,825,828,834,841,846,852,856,860,866,874,889,896,901,908,916,920,925, -936,948,951,956,958,967,969,977,983,986,988,1000,1007,1011,1015,1019,1026, -1035,1038,1042,1047,1051,1054,1061,1072,1075,1085,1088,1099,1104,1112,1115, -1119,1123,1134,1137,1144,1163,1167,1171,1175,1179,1183,1185,1196,1201,1210, -1216,1220,1222,1230,1237,1250,1256,1267,1274,1278,1286,1288,1301,1309,1318, -1324,1332,1338,1342,1347,1352,1358,1372,1374,1403,1414,1424,1427,1432,1439, -1442,1451,1454,1458,1461,1464,1476,1479,1498,1502,1510,1514,1539,1542,1551, -1557,1563,1569,1579,1588,1610,1613,1616,1626,1628,1635,1637,1643,1651,1661, -1667,1679,1682,1709,1721,1726,1733,1739,1744,1750,1772,1775,1784,1787,1790, -1818,1829,1839,1846,1855,1862,1868,1875,1887,1894,1901,1909,1914]; +78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,84,2,85, +7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91,7,91,2,92,7, +92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,1,0,1,0,1,0,1,1,1,1, +1,1,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3, +219,8,3,1,3,1,3,1,3,3,3,224,8,3,1,3,1,3,1,3,1,3,3,3,230,8,3,1,3,1,3,3,3, +234,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,248,8,3,1,3, +1,3,3,3,252,8,3,1,3,1,3,3,3,256,8,3,1,3,1,3,3,3,260,8,3,1,3,1,3,1,3,1,3, +1,3,1,3,3,3,268,8,3,1,3,1,3,3,3,272,8,3,1,3,3,3,275,8,3,1,3,1,3,1,3,1,3, +1,3,3,3,282,8,3,1,3,1,3,1,3,1,3,1,3,5,3,289,8,3,10,3,12,3,292,9,3,1,3,1, +3,1,3,3,3,297,8,3,1,3,1,3,3,3,301,8,3,1,3,1,3,1,3,1,3,3,3,307,8,3,1,3,1, +3,1,3,1,3,1,3,3,3,314,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,323,8,3,1,3,1, +3,1,3,1,3,1,3,1,3,1,3,3,3,332,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3, +3,343,8,3,1,3,1,3,1,3,1,3,1,3,3,3,350,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, +3,3,3,360,8,3,1,3,1,3,1,3,1,3,1,3,3,3,367,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3, +3,375,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,383,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3, +3,391,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,401,8,3,1,3,1,3,1,3,1,3,1, +3,3,3,408,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,416,8,3,1,3,1,3,1,3,3,3,421,8, +3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,432,8,3,1,3,1,3,1,3,3,3,437,8, +3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,448,8,3,1,3,1,3,1,3,1,3,1,3,1, +3,1,3,1,3,1,3,3,3,459,8,3,1,3,1,3,1,3,1,3,1,3,3,3,466,8,3,1,3,1,3,1,3,1, +3,1,3,1,3,3,3,474,8,3,1,3,1,3,1,3,1,3,1,3,3,3,481,8,3,1,3,1,3,1,3,1,3,1, +3,1,3,3,3,489,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,499,8,3,10,3,12,3, +502,9,3,1,3,1,3,1,3,3,3,507,8,3,1,3,1,3,1,3,3,3,512,8,3,1,3,1,3,1,3,3,3, +517,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,526,8,3,1,3,1,3,1,3,1,3,1,3,1,3, +1,3,1,3,1,3,3,3,537,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,546,8,3,1,3,1,3, +1,3,3,3,551,8,3,1,3,3,3,554,8,3,1,3,1,3,3,3,558,8,3,1,3,1,3,1,3,1,3,1,3, +1,3,3,3,566,8,3,1,3,1,3,1,3,1,3,1,3,3,3,573,8,3,1,3,1,3,1,3,1,3,1,3,1,3, +1,3,3,3,582,8,3,1,3,1,3,1,3,3,3,587,8,3,1,3,3,3,590,8,3,1,3,1,3,1,3,1,3, +1,3,1,3,5,3,598,8,3,10,3,12,3,601,9,3,3,3,603,8,3,1,3,1,3,1,3,1,3,1,3,3, +3,610,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,619,8,3,1,3,1,3,1,3,1,3,3,3,625, +8,3,1,3,1,3,1,3,3,3,630,8,3,1,3,1,3,3,3,634,8,3,1,3,1,3,1,3,1,3,1,3,1,3, +5,3,642,8,3,10,3,12,3,645,9,3,3,3,647,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, +3,3,3,657,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,668,8,3,10,3,12,3, +671,9,3,1,3,1,3,1,3,3,3,676,8,3,1,3,1,3,1,3,3,3,681,8,3,1,3,1,3,1,3,1,3, +3,3,687,8,3,1,3,1,3,1,3,1,3,1,3,5,3,694,8,3,10,3,12,3,697,9,3,1,3,1,3,1, +3,3,3,702,8,3,1,3,1,3,1,3,1,3,1,3,3,3,709,8,3,1,3,1,3,1,3,1,3,5,3,715,8, +3,10,3,12,3,718,9,3,1,3,1,3,3,3,722,8,3,1,3,1,3,3,3,726,8,3,1,3,1,3,1,3, +1,3,1,3,1,3,3,3,734,8,3,1,3,1,3,1,3,1,3,3,3,740,8,3,1,3,1,3,1,3,5,3,745, +8,3,10,3,12,3,748,9,3,1,3,1,3,3,3,752,8,3,1,3,1,3,3,3,756,8,3,1,3,1,3,1, +3,1,3,1,3,1,3,1,3,1,3,3,3,766,8,3,1,3,3,3,769,8,3,1,3,1,3,3,3,773,8,3,1, +3,3,3,776,8,3,1,3,1,3,1,3,1,3,5,3,782,8,3,10,3,12,3,785,9,3,1,3,1,3,3,3, +789,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, +1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,814,8,3,1,3,1,3,1,3,1,3,3,3,820,8,3,1,3, +1,3,1,3,1,3,3,3,826,8,3,3,3,828,8,3,1,3,1,3,1,3,1,3,3,3,834,8,3,1,3,1,3, +1,3,1,3,3,3,840,8,3,3,3,842,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,850,8,3,3,3, +852,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, +1,3,3,3,871,8,3,1,3,1,3,1,3,3,3,876,8,3,1,3,1,3,1,3,1,3,1,3,3,3,883,8,3, +1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,895,8,3,3,3,897,8,3,1,3,1,3, +1,3,1,3,1,3,1,3,3,3,905,8,3,3,3,907,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, +1,3,1,3,1,3,1,3,1,3,1,3,5,3,923,8,3,10,3,12,3,926,9,3,3,3,928,8,3,1,3,1, +3,3,3,932,8,3,1,3,1,3,3,3,936,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, +3,1,3,1,3,1,3,1,3,5,3,952,8,3,10,3,12,3,955,9,3,3,3,957,8,3,1,3,1,3,1,3, +1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,971,8,3,10,3,12,3,974,9,3,1,3,1, +3,3,3,978,8,3,1,3,1,3,1,3,1,3,3,3,984,8,3,1,3,3,3,987,8,3,1,3,1,3,1,3,1, +3,1,3,4,3,994,8,3,11,3,12,3,995,3,3,998,8,3,1,4,3,4,1001,8,4,1,4,1,4,1,5, +1,5,3,5,1007,8,5,1,5,1,5,1,5,5,5,1012,8,5,10,5,12,5,1015,9,5,1,6,1,6,1,6, +3,6,1020,8,6,1,7,1,7,1,7,1,7,3,7,1026,8,7,1,7,1,7,3,7,1030,8,7,1,7,1,7,3, +7,1034,8,7,1,8,1,8,1,8,1,8,3,8,1040,8,8,1,9,1,9,1,9,1,9,5,9,1046,8,9,10, +9,12,9,1049,9,9,1,9,1,9,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,12,5,12,1061, +8,12,10,12,12,12,1064,9,12,1,13,1,13,1,13,1,13,3,13,1070,8,13,1,14,5,14, +1073,8,14,10,14,12,14,1076,9,14,1,15,1,15,1,16,1,16,3,16,1082,8,16,1,17, +1,17,1,17,1,18,1,18,1,18,3,18,1090,8,18,1,19,1,19,3,19,1094,8,19,1,20,1, +20,1,20,3,20,1099,8,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21, +1110,8,21,1,22,1,22,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,5,24,1123, +8,24,10,24,12,24,1126,9,24,3,24,1128,8,24,1,24,1,24,1,24,3,24,1133,8,24, +3,24,1135,8,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,1144,8,24,3,24,1146, +8,24,1,25,1,25,1,25,1,25,1,25,1,25,3,25,1154,8,25,1,25,1,25,1,25,1,25,3, +25,1160,8,25,1,25,5,25,1163,8,25,10,25,12,25,1166,9,25,1,26,1,26,1,26,1, +26,1,26,1,26,1,26,5,26,1175,8,26,10,26,12,26,1178,9,26,1,26,1,26,1,26,1, +26,3,26,1184,8,26,1,27,1,27,3,27,1188,8,27,1,27,1,27,3,27,1192,8,27,1,28, +1,28,3,28,1196,8,28,1,28,1,28,1,28,5,28,1201,8,28,10,28,12,28,1204,9,28, +1,28,1,28,1,28,1,28,5,28,1210,8,28,10,28,12,28,1213,9,28,3,28,1215,8,28, +1,28,1,28,3,28,1219,8,28,1,28,1,28,1,28,3,28,1224,8,28,1,28,1,28,3,28,1228, +8,28,1,29,3,29,1231,8,29,1,29,1,29,1,29,5,29,1236,8,29,10,29,12,29,1239, +9,29,1,30,1,30,1,30,1,30,1,30,1,30,5,30,1247,8,30,10,30,12,30,1250,9,30, +3,30,1252,8,30,1,30,1,30,1,30,1,30,1,30,1,30,5,30,1260,8,30,10,30,12,30, +1263,9,30,3,30,1265,8,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,5,30,1274,8, +30,10,30,12,30,1277,9,30,1,30,1,30,3,30,1281,8,30,1,31,1,31,1,31,1,31,5, +31,1287,8,31,10,31,12,31,1290,9,31,3,31,1292,8,31,1,31,1,31,3,31,1296,8, +31,1,32,1,32,3,32,1300,8,32,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,34,1,34, +3,34,1311,8,34,1,34,3,34,1314,8,34,1,34,1,34,1,34,1,34,1,34,3,34,1321,8, +34,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35, +1,35,1,35,1,35,3,35,1340,8,35,5,35,1342,8,35,10,35,12,35,1345,9,35,1,36, +3,36,1348,8,36,1,36,1,36,3,36,1352,8,36,1,36,1,36,3,36,1356,8,36,1,36,1, +36,3,36,1360,8,36,3,36,1362,8,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,5,37, +1371,8,37,10,37,12,37,1374,9,37,1,37,1,37,3,37,1378,8,37,1,38,1,38,1,38, +1,38,1,38,1,38,1,38,3,38,1387,8,38,1,39,1,39,1,40,1,40,3,40,1393,8,40,1, +40,1,40,3,40,1397,8,40,3,40,1399,8,40,1,41,1,41,1,41,1,41,5,41,1405,8,41, +10,41,12,41,1408,9,41,1,41,1,41,1,42,1,42,3,42,1414,8,42,1,42,1,42,1,42, +1,42,1,42,1,42,1,42,1,42,1,42,5,42,1425,8,42,10,42,12,42,1428,9,42,1,42, +1,42,1,42,3,42,1433,8,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,42,3,42,1449,8,42,1,43,1,43,1,44,1,44,1,44,3,44,1456, +8,44,1,44,1,44,3,44,1460,8,44,1,44,1,44,1,44,1,44,1,44,1,44,5,44,1468,8, +44,10,44,12,44,1471,9,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1, +45,3,45,1483,8,45,1,45,1,45,1,45,1,45,1,45,1,45,3,45,1491,8,45,1,45,1,45, +1,45,1,45,1,45,5,45,1498,8,45,10,45,12,45,1501,9,45,1,45,1,45,1,45,3,45, +1506,8,45,1,45,1,45,1,45,1,45,1,45,1,45,3,45,1514,8,45,1,45,1,45,1,45,1, +45,3,45,1520,8,45,1,45,1,45,3,45,1524,8,45,1,45,1,45,1,45,3,45,1529,8,45, +1,45,1,45,1,45,3,45,1534,8,45,1,46,1,46,1,46,1,46,3,46,1540,8,46,1,46,1, +46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,5,46,1554,8,46,10,46, +12,46,1557,9,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,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,4,47,1583, +8,47,11,47,12,47,1584,1,47,1,47,1,47,1,47,1,47,1,47,1,47,5,47,1594,8,47, +10,47,12,47,1597,9,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,1606,8,47, +1,47,3,47,1609,8,47,1,47,1,47,1,47,3,47,1614,8,47,1,47,1,47,1,47,5,47,1619, +8,47,10,47,12,47,1622,9,47,3,47,1624,8,47,1,47,1,47,1,47,1,47,1,47,5,47, +1631,8,47,10,47,12,47,1634,9,47,3,47,1636,8,47,1,47,1,47,3,47,1640,8,47, +1,47,3,47,1643,8,47,1,47,3,47,1646,8,47,1,47,1,47,1,47,1,47,1,47,1,47,1, +47,1,47,5,47,1656,8,47,10,47,12,47,1659,9,47,3,47,1661,8,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,47,1,47,1,47,4,47,1678, +8,47,11,47,12,47,1679,1,47,1,47,3,47,1684,8,47,1,47,1,47,1,47,1,47,4,47, +1690,8,47,11,47,12,47,1691,1,47,1,47,3,47,1696,8,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,47,1,47,1,47,1,47,1,47,1,47,1, +47,1,47,1,47,5,47,1719,8,47,10,47,12,47,1722,9,47,3,47,1724,8,47,1,47,1, +47,1,47,1,47,1,47,1,47,1,47,3,47,1733,8,47,1,47,1,47,1,47,1,47,3,47,1739, +8,47,1,47,1,47,1,47,1,47,3,47,1745,8,47,1,47,1,47,1,47,1,47,3,47,1751,8, +47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,1761,8,47,1,47,1,47,1,47, +1,47,1,47,1,47,1,47,3,47,1770,8,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,47,1,47,1,47,1,47,1,47,1,47,5,47,1790,8,47,10,47, +12,47,1793,9,47,3,47,1795,8,47,1,47,3,47,1798,8,47,1,47,1,47,1,47,1,47,1, +47,1,47,1,47,1,47,5,47,1808,8,47,10,47,12,47,1811,9,47,1,48,1,48,1,48,1, +48,3,48,1817,8,48,3,48,1819,8,48,1,49,1,49,1,49,1,49,3,49,1825,8,49,1,50, +1,50,1,50,1,50,1,50,1,50,3,50,1833,8,50,1,51,1,51,1,52,1,52,1,53,1,53,1, +54,1,54,3,54,1843,8,54,1,54,1,54,1,54,1,54,3,54,1849,8,54,1,55,1,55,1,56, +1,56,1,57,1,57,1,57,1,57,5,57,1859,8,57,10,57,12,57,1862,9,57,3,57,1864, +8,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, +58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,5,58,1889,8,58,10,58,12, +58,1892,9,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,5,58,1901,8,58,10,58,12, +58,1904,9,58,1,58,1,58,3,58,1908,8,58,1,58,1,58,1,58,1,58,1,58,3,58,1915, +8,58,1,58,1,58,5,58,1919,8,58,10,58,12,58,1922,9,58,1,59,1,59,1,59,1,59, +1,59,5,59,1929,8,59,10,59,12,59,1932,9,59,3,59,1934,8,59,1,59,1,59,1,59, +1,59,5,59,1940,8,59,10,59,12,59,1943,9,59,3,59,1945,8,59,1,59,1,59,1,60, +1,60,1,60,3,60,1952,8,60,1,60,1,60,1,60,3,60,1957,8,60,1,61,1,61,1,61,1, +61,1,61,1,61,1,61,5,61,1966,8,61,10,61,12,61,1969,9,61,3,61,1971,8,61,1, +61,1,61,3,61,1975,8,61,3,61,1977,8,61,1,61,1,61,1,61,1,61,1,61,1,61,3,61, +1985,8,61,1,61,1,61,1,61,1,61,1,61,1,61,5,61,1993,8,61,10,61,12,61,1996, +9,61,1,61,1,61,1,61,3,61,2001,8,61,3,61,2003,8,61,1,62,1,62,1,62,1,62,1, +62,3,62,2010,8,62,1,62,1,62,3,62,2014,8,62,3,62,2016,8,62,1,62,1,62,1,62, +1,62,1,62,3,62,2023,8,62,1,62,1,62,3,62,2027,8,62,3,62,2029,8,62,3,62,2031, +8,62,1,63,1,63,1,63,1,63,1,63,5,63,2038,8,63,10,63,12,63,2041,9,63,1,63, +1,63,1,63,1,63,1,63,1,63,1,63,1,63,3,63,2051,8,63,1,64,1,64,3,64,2055,8, +64,1,65,1,65,1,65,1,65,1,65,1,65,5,65,2063,8,65,10,65,12,65,2066,9,65,1, +65,1,65,1,66,1,66,3,66,2072,8,66,1,67,1,67,1,67,1,67,3,67,2078,8,67,1,68, +1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1, +70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,5,70,2104,8,70,10,70,12,70,2107, +9,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,5,70,2118,8,70,10,70,12, +70,2121,9,70,1,70,1,70,3,70,2125,8,70,1,70,1,70,1,70,1,70,1,70,5,70,2132, +8,70,10,70,12,70,2135,9,70,1,70,1,70,3,70,2139,8,70,1,71,1,71,1,71,1,71, +1,71,1,71,1,71,5,71,2148,8,71,10,71,12,71,2151,9,71,3,71,2153,8,71,1,71, +1,71,1,71,1,71,1,71,5,71,2160,8,71,10,71,12,71,2163,9,71,3,71,2165,8,71, +1,71,3,71,2168,8,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1, +72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72, +1,72,3,72,2196,8,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,3,73,2207, +8,73,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,3,75,2217,8,75,1,76,1,76,1, +76,1,76,1,76,3,76,2224,8,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,3,77,2233, +8,77,1,78,1,78,1,78,1,78,1,78,3,78,2240,8,78,1,79,1,79,1,79,1,79,3,79,2246, +8,79,1,80,1,80,1,80,5,80,2251,8,80,10,80,12,80,2254,9,80,1,81,1,81,1,81, +1,81,1,81,1,82,1,82,1,82,3,82,2264,8,82,1,83,1,83,1,83,3,83,2269,8,83,1, +84,1,84,1,84,1,84,1,84,3,84,2276,8,84,1,85,1,85,1,85,5,85,2281,8,85,10,85, +12,85,2284,9,85,1,86,1,86,1,86,1,86,1,86,3,86,2291,8,86,1,87,1,87,1,87,3, +87,2296,8,87,1,88,1,88,3,88,2300,8,88,1,89,1,89,1,89,1,89,1,90,1,90,1,90, +3,90,2309,8,90,1,91,1,91,1,91,3,91,2314,8,91,1,92,5,92,2317,8,92,10,92,12, +92,2320,9,92,1,93,1,93,1,93,3,93,2325,8,93,1,94,1,94,1,94,3,94,2330,8,94, +1,95,1,95,1,96,1,96,1,96,3,96,2337,8,96,1,97,1,97,1,97,0,6,50,70,88,92,94, +116,98,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46, +48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94, +96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132, +134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168, +170,172,174,176,178,180,182,184,186,188,190,192,194,0,25,2,0,28,28,172,172, +2,0,82,82,97,97,2,0,69,69,98,98,2,0,52,52,105,105,1,0,181,182,2,0,12,12, +253,253,2,0,68,68,219,219,2,0,19,19,54,54,2,0,78,78,114,114,2,0,12,12,59, +59,2,0,22,22,198,198,1,0,244,245,1,0,246,248,1,0,238,243,3,0,12,12,16,16, +193,193,2,0,75,75,212,212,5,0,50,50,94,94,127,128,185,185,236,236,1,0,131, +134,2,0,79,79,156,156,3,0,89,89,109,109,206,206,4,0,60,60,106,106,122,122, +226,226,2,0,145,145,235,235,3,0,199,200,209,209,229,229,2,0,58,58,64,64, +53,0,10,12,14,14,16,17,19,22,24,24,26,28,31,36,39,39,42,42,44,44,48,50,52, +52,54,54,56,58,60,60,63,64,66,66,69,69,72,72,74,74,76,79,81,81,84,89,92, +92,94,96,98,98,100,100,103,103,105,106,108,109,111,115,117,117,119,119,122, +129,131,136,140,143,145,146,149,149,151,156,158,163,165,175,177,179,181, +186,188,200,202,206,208,211,213,215,217,218,220,220,222,224,226,226,228, +230,234,237,2694,0,196,1,0,0,0,2,199,1,0,0,0,4,202,1,0,0,0,6,997,1,0,0,0, +8,1000,1,0,0,0,10,1004,1,0,0,0,12,1019,1,0,0,0,14,1021,1,0,0,0,16,1035,1, +0,0,0,18,1041,1,0,0,0,20,1052,1,0,0,0,22,1056,1,0,0,0,24,1062,1,0,0,0,26, +1069,1,0,0,0,28,1074,1,0,0,0,30,1077,1,0,0,0,32,1081,1,0,0,0,34,1083,1,0, +0,0,36,1086,1,0,0,0,38,1093,1,0,0,0,40,1098,1,0,0,0,42,1109,1,0,0,0,44,1111, +1,0,0,0,46,1113,1,0,0,0,48,1116,1,0,0,0,50,1147,1,0,0,0,52,1183,1,0,0,0, +54,1185,1,0,0,0,56,1193,1,0,0,0,58,1230,1,0,0,0,60,1280,1,0,0,0,62,1295, +1,0,0,0,64,1297,1,0,0,0,66,1306,1,0,0,0,68,1320,1,0,0,0,70,1322,1,0,0,0, +72,1361,1,0,0,0,74,1377,1,0,0,0,76,1379,1,0,0,0,78,1388,1,0,0,0,80,1390, +1,0,0,0,82,1400,1,0,0,0,84,1448,1,0,0,0,86,1450,1,0,0,0,88,1459,1,0,0,0, +90,1533,1,0,0,0,92,1539,1,0,0,0,94,1797,1,0,0,0,96,1818,1,0,0,0,98,1824, +1,0,0,0,100,1832,1,0,0,0,102,1834,1,0,0,0,104,1836,1,0,0,0,106,1838,1,0, +0,0,108,1840,1,0,0,0,110,1850,1,0,0,0,112,1852,1,0,0,0,114,1854,1,0,0,0, +116,1914,1,0,0,0,118,1923,1,0,0,0,120,1951,1,0,0,0,122,1958,1,0,0,0,124, +2030,1,0,0,0,126,2050,1,0,0,0,128,2052,1,0,0,0,130,2056,1,0,0,0,132,2071, +1,0,0,0,134,2077,1,0,0,0,136,2079,1,0,0,0,138,2084,1,0,0,0,140,2138,1,0, +0,0,142,2140,1,0,0,0,144,2195,1,0,0,0,146,2206,1,0,0,0,148,2208,1,0,0,0, +150,2216,1,0,0,0,152,2223,1,0,0,0,154,2232,1,0,0,0,156,2239,1,0,0,0,158, +2245,1,0,0,0,160,2247,1,0,0,0,162,2255,1,0,0,0,164,2263,1,0,0,0,166,2268, +1,0,0,0,168,2275,1,0,0,0,170,2277,1,0,0,0,172,2290,1,0,0,0,174,2295,1,0, +0,0,176,2299,1,0,0,0,178,2301,1,0,0,0,180,2305,1,0,0,0,182,2313,1,0,0,0, +184,2318,1,0,0,0,186,2324,1,0,0,0,188,2329,1,0,0,0,190,2331,1,0,0,0,192, +2336,1,0,0,0,194,2338,1,0,0,0,196,197,3,6,3,0,197,198,5,0,0,1,198,1,1,0, +0,0,199,200,3,86,43,0,200,201,5,0,0,1,201,3,1,0,0,0,202,203,3,32,16,0,203, +204,5,0,0,1,204,5,1,0,0,0,205,998,3,8,4,0,206,207,5,223,0,0,207,998,3,172, +86,0,208,209,5,223,0,0,209,210,3,172,86,0,210,211,5,1,0,0,211,212,3,172, +86,0,212,998,1,0,0,0,213,214,5,38,0,0,214,218,5,183,0,0,215,216,5,95,0,0, +216,217,5,138,0,0,217,219,5,71,0,0,218,215,1,0,0,0,218,219,1,0,0,0,219,220, +1,0,0,0,220,223,3,160,80,0,221,222,5,233,0,0,222,224,3,18,9,0,223,221,1, +0,0,0,223,224,1,0,0,0,224,998,1,0,0,0,225,226,5,61,0,0,226,229,5,183,0,0, +227,228,5,95,0,0,228,230,5,71,0,0,229,227,1,0,0,0,229,230,1,0,0,0,230,231, +1,0,0,0,231,233,3,160,80,0,232,234,7,0,0,0,233,232,1,0,0,0,233,234,1,0,0, +0,234,998,1,0,0,0,235,236,5,13,0,0,236,237,5,183,0,0,237,238,3,160,80,0, +238,239,5,167,0,0,239,240,5,210,0,0,240,241,3,172,86,0,241,998,1,0,0,0,242, +243,5,38,0,0,243,247,5,201,0,0,244,245,5,95,0,0,245,246,5,138,0,0,246,248, +5,71,0,0,247,244,1,0,0,0,247,248,1,0,0,0,248,249,1,0,0,0,249,251,3,160,80, +0,250,252,3,82,41,0,251,250,1,0,0,0,251,252,1,0,0,0,252,255,1,0,0,0,253, +254,5,34,0,0,254,256,3,96,48,0,255,253,1,0,0,0,255,256,1,0,0,0,256,259,1, +0,0,0,257,258,5,233,0,0,258,260,3,18,9,0,259,257,1,0,0,0,259,260,1,0,0,0, +260,261,1,0,0,0,261,267,5,18,0,0,262,268,3,8,4,0,263,264,5,2,0,0,264,265, +3,8,4,0,265,266,5,3,0,0,266,268,1,0,0,0,267,262,1,0,0,0,267,263,1,0,0,0, +268,274,1,0,0,0,269,271,5,233,0,0,270,272,5,135,0,0,271,270,1,0,0,0,271, +272,1,0,0,0,272,273,1,0,0,0,273,275,5,48,0,0,274,269,1,0,0,0,274,275,1,0, +0,0,275,998,1,0,0,0,276,277,5,38,0,0,277,281,5,201,0,0,278,279,5,95,0,0, +279,280,5,138,0,0,280,282,5,71,0,0,281,278,1,0,0,0,281,282,1,0,0,0,282,283, +1,0,0,0,283,284,3,160,80,0,284,285,5,2,0,0,285,290,3,12,6,0,286,287,5,4, +0,0,287,289,3,12,6,0,288,286,1,0,0,0,289,292,1,0,0,0,290,288,1,0,0,0,290, +291,1,0,0,0,291,293,1,0,0,0,292,290,1,0,0,0,293,296,5,3,0,0,294,295,5,34, +0,0,295,297,3,96,48,0,296,294,1,0,0,0,296,297,1,0,0,0,297,300,1,0,0,0,298, +299,5,233,0,0,299,301,3,18,9,0,300,298,1,0,0,0,300,301,1,0,0,0,301,998,1, +0,0,0,302,303,5,61,0,0,303,306,5,201,0,0,304,305,5,95,0,0,305,307,5,71,0, +0,306,304,1,0,0,0,306,307,1,0,0,0,307,308,1,0,0,0,308,998,3,160,80,0,309, +310,5,101,0,0,310,311,5,104,0,0,311,313,3,160,80,0,312,314,3,82,41,0,313, +312,1,0,0,0,313,314,1,0,0,0,314,315,1,0,0,0,315,316,3,8,4,0,316,998,1,0, +0,0,317,318,5,53,0,0,318,319,5,82,0,0,319,322,3,160,80,0,320,321,5,232,0, +0,321,323,3,88,44,0,322,320,1,0,0,0,322,323,1,0,0,0,323,998,1,0,0,0,324, +325,5,213,0,0,325,326,5,201,0,0,326,998,3,160,80,0,327,328,5,13,0,0,328, +331,5,201,0,0,329,330,5,95,0,0,330,332,5,71,0,0,331,329,1,0,0,0,331,332, +1,0,0,0,332,333,1,0,0,0,333,334,3,160,80,0,334,335,5,167,0,0,335,336,5,210, +0,0,336,337,3,160,80,0,337,998,1,0,0,0,338,339,5,13,0,0,339,342,5,201,0, +0,340,341,5,95,0,0,341,343,5,71,0,0,342,340,1,0,0,0,342,343,1,0,0,0,343, +344,1,0,0,0,344,345,3,160,80,0,345,346,5,167,0,0,346,349,5,32,0,0,347,348, +5,95,0,0,348,350,5,71,0,0,349,347,1,0,0,0,349,350,1,0,0,0,350,351,1,0,0, +0,351,352,3,172,86,0,352,353,5,210,0,0,353,354,3,172,86,0,354,998,1,0,0, +0,355,356,5,13,0,0,356,359,5,201,0,0,357,358,5,95,0,0,358,360,5,71,0,0,359, +357,1,0,0,0,359,360,1,0,0,0,360,361,1,0,0,0,361,362,3,160,80,0,362,363,5, +61,0,0,363,366,5,32,0,0,364,365,5,95,0,0,365,367,5,71,0,0,366,364,1,0,0, +0,366,367,1,0,0,0,367,368,1,0,0,0,368,369,3,160,80,0,369,998,1,0,0,0,370, +371,5,13,0,0,371,374,5,201,0,0,372,373,5,95,0,0,373,375,5,71,0,0,374,372, +1,0,0,0,374,375,1,0,0,0,375,376,1,0,0,0,376,377,3,160,80,0,377,378,5,10, +0,0,378,382,5,32,0,0,379,380,5,95,0,0,380,381,5,138,0,0,381,383,5,71,0,0, +382,379,1,0,0,0,382,383,1,0,0,0,383,384,1,0,0,0,384,385,3,14,7,0,385,998, +1,0,0,0,386,387,5,13,0,0,387,390,5,201,0,0,388,389,5,95,0,0,389,391,5,71, +0,0,390,388,1,0,0,0,390,391,1,0,0,0,391,392,1,0,0,0,392,393,3,160,80,0,393, +394,5,10,0,0,394,395,3,176,88,0,395,998,1,0,0,0,396,397,5,13,0,0,397,400, +5,201,0,0,398,399,5,95,0,0,399,401,5,71,0,0,400,398,1,0,0,0,400,401,1,0, +0,0,401,402,1,0,0,0,402,403,3,160,80,0,403,404,5,61,0,0,404,407,5,37,0,0, +405,406,5,95,0,0,406,408,5,71,0,0,407,405,1,0,0,0,407,408,1,0,0,0,408,409, +1,0,0,0,409,410,3,172,86,0,410,998,1,0,0,0,411,412,5,13,0,0,412,415,5,201, +0,0,413,414,5,95,0,0,414,416,5,71,0,0,415,413,1,0,0,0,415,416,1,0,0,0,416, +417,1,0,0,0,417,418,3,160,80,0,418,420,5,13,0,0,419,421,5,32,0,0,420,419, +1,0,0,0,420,421,1,0,0,0,421,422,1,0,0,0,422,423,3,172,86,0,423,424,5,190, +0,0,424,425,5,138,0,0,425,426,5,139,0,0,426,998,1,0,0,0,427,428,5,13,0,0, +428,431,5,201,0,0,429,430,5,95,0,0,430,432,5,71,0,0,431,429,1,0,0,0,431, +432,1,0,0,0,432,433,1,0,0,0,433,434,3,160,80,0,434,436,5,13,0,0,435,437, +5,32,0,0,436,435,1,0,0,0,436,437,1,0,0,0,437,438,1,0,0,0,438,439,3,172,86, +0,439,440,5,61,0,0,440,441,5,138,0,0,441,442,5,139,0,0,442,998,1,0,0,0,443, +444,5,13,0,0,444,447,5,201,0,0,445,446,5,95,0,0,446,448,5,71,0,0,447,445, +1,0,0,0,447,448,1,0,0,0,448,449,1,0,0,0,449,450,3,160,80,0,450,451,5,190, +0,0,451,452,5,160,0,0,452,453,3,18,9,0,453,998,1,0,0,0,454,455,5,13,0,0, +455,458,5,201,0,0,456,457,5,95,0,0,457,459,5,71,0,0,458,456,1,0,0,0,458, +459,1,0,0,0,459,460,1,0,0,0,460,461,3,160,80,0,461,462,5,61,0,0,462,465, +5,24,0,0,463,464,5,95,0,0,464,466,5,71,0,0,465,463,1,0,0,0,465,466,1,0,0, +0,466,467,1,0,0,0,467,468,3,96,48,0,468,998,1,0,0,0,469,470,5,13,0,0,470, +473,5,201,0,0,471,472,5,95,0,0,472,474,5,71,0,0,473,471,1,0,0,0,473,474, +1,0,0,0,474,475,1,0,0,0,475,476,3,160,80,0,476,477,5,61,0,0,477,480,5,204, +0,0,478,479,5,95,0,0,479,481,5,71,0,0,480,478,1,0,0,0,480,481,1,0,0,0,481, +482,1,0,0,0,482,483,3,96,48,0,483,998,1,0,0,0,484,485,5,14,0,0,485,488,3, +160,80,0,486,487,5,233,0,0,487,489,3,18,9,0,488,486,1,0,0,0,488,489,1,0, +0,0,489,998,1,0,0,0,490,491,5,38,0,0,491,492,5,215,0,0,492,493,3,160,80, +0,493,506,5,18,0,0,494,495,5,2,0,0,495,500,3,22,11,0,496,497,5,4,0,0,497, +499,3,22,11,0,498,496,1,0,0,0,499,502,1,0,0,0,500,498,1,0,0,0,500,501,1, +0,0,0,501,503,1,0,0,0,502,500,1,0,0,0,503,504,5,3,0,0,504,507,1,0,0,0,505, +507,3,116,58,0,506,494,1,0,0,0,506,505,1,0,0,0,507,998,1,0,0,0,508,511,5, +38,0,0,509,510,5,147,0,0,510,512,5,169,0,0,511,509,1,0,0,0,511,512,1,0,0, +0,512,513,1,0,0,0,513,514,5,230,0,0,514,516,3,160,80,0,515,517,3,46,23,0, +516,515,1,0,0,0,516,517,1,0,0,0,517,518,1,0,0,0,518,519,5,18,0,0,519,520, +3,8,4,0,520,998,1,0,0,0,521,522,5,13,0,0,522,525,5,230,0,0,523,524,5,95, +0,0,524,526,5,71,0,0,525,523,1,0,0,0,525,526,1,0,0,0,526,527,1,0,0,0,527, +528,3,160,80,0,528,529,5,167,0,0,529,530,5,210,0,0,530,531,3,160,80,0,531, +998,1,0,0,0,532,533,5,61,0,0,533,536,5,230,0,0,534,535,5,95,0,0,535,537, +5,71,0,0,536,534,1,0,0,0,536,537,1,0,0,0,537,538,1,0,0,0,538,998,3,160,80, +0,539,540,5,38,0,0,540,541,5,125,0,0,541,545,5,230,0,0,542,543,5,95,0,0, +543,544,5,138,0,0,544,546,5,71,0,0,545,542,1,0,0,0,545,546,1,0,0,0,546,547, +1,0,0,0,547,550,3,160,80,0,548,549,5,34,0,0,549,551,3,96,48,0,550,548,1, +0,0,0,550,551,1,0,0,0,551,553,1,0,0,0,552,554,3,46,23,0,553,552,1,0,0,0, +553,554,1,0,0,0,554,557,1,0,0,0,555,556,5,233,0,0,556,558,3,18,9,0,557,555, +1,0,0,0,557,558,1,0,0,0,558,559,1,0,0,0,559,565,5,18,0,0,560,566,3,8,4,0, +561,562,5,2,0,0,562,563,3,8,4,0,563,564,5,3,0,0,564,566,1,0,0,0,565,560, +1,0,0,0,565,561,1,0,0,0,566,998,1,0,0,0,567,568,5,61,0,0,568,569,5,125,0, +0,569,572,5,230,0,0,570,571,5,95,0,0,571,573,5,71,0,0,572,570,1,0,0,0,572, +573,1,0,0,0,573,574,1,0,0,0,574,998,3,160,80,0,575,576,5,165,0,0,576,577, +5,125,0,0,577,578,5,230,0,0,578,581,3,160,80,0,579,580,5,232,0,0,580,582, +3,88,44,0,581,579,1,0,0,0,581,582,1,0,0,0,582,998,1,0,0,0,583,586,5,38,0, +0,584,585,5,147,0,0,585,587,5,169,0,0,586,584,1,0,0,0,586,587,1,0,0,0,587, +589,1,0,0,0,588,590,5,205,0,0,589,588,1,0,0,0,589,590,1,0,0,0,590,591,1, +0,0,0,591,592,5,84,0,0,592,593,3,160,80,0,593,602,5,2,0,0,594,599,3,22,11, +0,595,596,5,4,0,0,596,598,3,22,11,0,597,595,1,0,0,0,598,601,1,0,0,0,599, +597,1,0,0,0,599,600,1,0,0,0,600,603,1,0,0,0,601,599,1,0,0,0,602,594,1,0, +0,0,602,603,1,0,0,0,603,604,1,0,0,0,604,605,5,3,0,0,605,606,5,174,0,0,606, +609,3,116,58,0,607,608,5,34,0,0,608,610,3,96,48,0,609,607,1,0,0,0,609,610, +1,0,0,0,610,611,1,0,0,0,611,612,3,24,12,0,612,613,3,32,16,0,613,998,1,0, +0,0,614,615,5,13,0,0,615,616,5,84,0,0,616,618,3,160,80,0,617,619,3,114,57, +0,618,617,1,0,0,0,618,619,1,0,0,0,619,620,1,0,0,0,620,621,3,28,14,0,621, +998,1,0,0,0,622,624,5,61,0,0,623,625,5,205,0,0,624,623,1,0,0,0,624,625,1, +0,0,0,625,626,1,0,0,0,626,629,5,84,0,0,627,628,5,95,0,0,628,630,5,71,0,0, +629,627,1,0,0,0,629,630,1,0,0,0,630,631,1,0,0,0,631,633,3,160,80,0,632,634, +3,114,57,0,633,632,1,0,0,0,633,634,1,0,0,0,634,998,1,0,0,0,635,636,5,26, +0,0,636,637,3,160,80,0,637,646,5,2,0,0,638,643,3,156,78,0,639,640,5,4,0, +0,640,642,3,156,78,0,641,639,1,0,0,0,642,645,1,0,0,0,643,641,1,0,0,0,643, +644,1,0,0,0,644,647,1,0,0,0,645,643,1,0,0,0,646,638,1,0,0,0,646,647,1,0, +0,0,647,648,1,0,0,0,648,649,5,3,0,0,649,998,1,0,0,0,650,651,5,38,0,0,651, +652,5,177,0,0,652,656,3,172,86,0,653,654,5,233,0,0,654,655,5,11,0,0,655, +657,3,166,83,0,656,653,1,0,0,0,656,657,1,0,0,0,657,998,1,0,0,0,658,659,5, +61,0,0,659,660,5,177,0,0,660,998,3,172,86,0,661,662,5,86,0,0,662,663,3,170, +85,0,663,664,5,210,0,0,664,669,3,168,84,0,665,666,5,4,0,0,666,668,3,168, +84,0,667,665,1,0,0,0,668,671,1,0,0,0,669,667,1,0,0,0,669,670,1,0,0,0,670, +675,1,0,0,0,671,669,1,0,0,0,672,673,5,233,0,0,673,674,5,11,0,0,674,676,5, +146,0,0,675,672,1,0,0,0,675,676,1,0,0,0,676,680,1,0,0,0,677,678,5,87,0,0, +678,679,5,25,0,0,679,681,3,166,83,0,680,677,1,0,0,0,680,681,1,0,0,0,681, +998,1,0,0,0,682,686,5,175,0,0,683,684,5,11,0,0,684,685,5,146,0,0,685,687, +5,80,0,0,686,683,1,0,0,0,686,687,1,0,0,0,687,688,1,0,0,0,688,689,3,170,85, +0,689,690,5,82,0,0,690,695,3,168,84,0,691,692,5,4,0,0,692,694,3,168,84,0, +693,691,1,0,0,0,694,697,1,0,0,0,695,693,1,0,0,0,695,696,1,0,0,0,696,701, +1,0,0,0,697,695,1,0,0,0,698,699,5,87,0,0,699,700,5,25,0,0,700,702,3,166, +83,0,701,698,1,0,0,0,701,702,1,0,0,0,702,998,1,0,0,0,703,704,5,190,0,0,704, +708,5,177,0,0,705,709,5,12,0,0,706,709,5,136,0,0,707,709,3,172,86,0,708, +705,1,0,0,0,708,706,1,0,0,0,708,707,1,0,0,0,709,998,1,0,0,0,710,721,5,86, +0,0,711,716,3,158,79,0,712,713,5,4,0,0,713,715,3,158,79,0,714,712,1,0,0, +0,715,718,1,0,0,0,716,714,1,0,0,0,716,717,1,0,0,0,717,722,1,0,0,0,718,716, +1,0,0,0,719,720,5,12,0,0,720,722,5,159,0,0,721,711,1,0,0,0,721,719,1,0,0, +0,722,723,1,0,0,0,723,725,5,144,0,0,724,726,5,201,0,0,725,724,1,0,0,0,725, +726,1,0,0,0,726,727,1,0,0,0,727,728,3,160,80,0,728,729,5,210,0,0,729,733, +3,168,84,0,730,731,5,233,0,0,731,732,5,86,0,0,732,734,5,146,0,0,733,730, +1,0,0,0,733,734,1,0,0,0,734,998,1,0,0,0,735,739,5,175,0,0,736,737,5,86,0, +0,737,738,5,146,0,0,738,740,5,80,0,0,739,736,1,0,0,0,739,740,1,0,0,0,740, +751,1,0,0,0,741,746,3,158,79,0,742,743,5,4,0,0,743,745,3,158,79,0,744,742, +1,0,0,0,745,748,1,0,0,0,746,744,1,0,0,0,746,747,1,0,0,0,747,752,1,0,0,0, +748,746,1,0,0,0,749,750,5,12,0,0,750,752,5,159,0,0,751,741,1,0,0,0,751,749, +1,0,0,0,752,753,1,0,0,0,753,755,5,144,0,0,754,756,5,201,0,0,755,754,1,0, +0,0,755,756,1,0,0,0,756,757,1,0,0,0,757,758,3,160,80,0,758,759,5,82,0,0, +759,760,3,168,84,0,760,998,1,0,0,0,761,762,5,192,0,0,762,768,5,88,0,0,763, +765,5,144,0,0,764,766,5,201,0,0,765,764,1,0,0,0,765,766,1,0,0,0,766,767, +1,0,0,0,767,769,3,160,80,0,768,763,1,0,0,0,768,769,1,0,0,0,769,998,1,0,0, +0,770,772,5,72,0,0,771,773,5,14,0,0,772,771,1,0,0,0,772,773,1,0,0,0,773, +775,1,0,0,0,774,776,5,228,0,0,775,774,1,0,0,0,775,776,1,0,0,0,776,788,1, +0,0,0,777,778,5,2,0,0,778,783,3,150,75,0,779,780,5,4,0,0,780,782,3,150,75, +0,781,779,1,0,0,0,782,785,1,0,0,0,783,781,1,0,0,0,783,784,1,0,0,0,784,786, +1,0,0,0,785,783,1,0,0,0,786,787,5,3,0,0,787,789,1,0,0,0,788,777,1,0,0,0, +788,789,1,0,0,0,789,790,1,0,0,0,790,998,3,6,3,0,791,792,5,192,0,0,792,793, +5,38,0,0,793,794,5,201,0,0,794,998,3,160,80,0,795,796,5,192,0,0,796,797, +5,38,0,0,797,798,5,183,0,0,798,998,3,160,80,0,799,800,5,192,0,0,800,801, +5,38,0,0,801,802,5,230,0,0,802,998,3,160,80,0,803,804,5,192,0,0,804,805, +5,38,0,0,805,806,5,125,0,0,806,807,5,230,0,0,807,998,3,160,80,0,808,809, +5,192,0,0,809,810,5,38,0,0,810,811,5,84,0,0,811,813,3,160,80,0,812,814,3, +114,57,0,813,812,1,0,0,0,813,814,1,0,0,0,814,998,1,0,0,0,815,816,5,192,0, +0,816,819,5,202,0,0,817,818,7,1,0,0,818,820,3,160,80,0,819,817,1,0,0,0,819, +820,1,0,0,0,820,827,1,0,0,0,821,822,5,118,0,0,822,825,3,96,48,0,823,824, +5,67,0,0,824,826,3,96,48,0,825,823,1,0,0,0,825,826,1,0,0,0,826,828,1,0,0, +0,827,821,1,0,0,0,827,828,1,0,0,0,828,998,1,0,0,0,829,830,5,192,0,0,830, +833,5,184,0,0,831,832,7,1,0,0,832,834,3,172,86,0,833,831,1,0,0,0,833,834, +1,0,0,0,834,841,1,0,0,0,835,836,5,118,0,0,836,839,3,96,48,0,837,838,5,67, +0,0,838,840,3,96,48,0,839,837,1,0,0,0,839,840,1,0,0,0,840,842,1,0,0,0,841, +835,1,0,0,0,841,842,1,0,0,0,842,998,1,0,0,0,843,844,5,192,0,0,844,851,5, +31,0,0,845,846,5,118,0,0,846,849,3,96,48,0,847,848,5,67,0,0,848,850,3,96, +48,0,849,847,1,0,0,0,849,850,1,0,0,0,850,852,1,0,0,0,851,845,1,0,0,0,851, +852,1,0,0,0,852,998,1,0,0,0,853,854,5,192,0,0,854,855,5,33,0,0,855,856,7, +1,0,0,856,998,3,160,80,0,857,858,5,192,0,0,858,859,5,196,0,0,859,860,5,80, +0,0,860,998,3,160,80,0,861,862,5,192,0,0,862,863,5,196,0,0,863,864,5,80, +0,0,864,865,5,2,0,0,865,866,3,56,28,0,866,867,5,3,0,0,867,998,1,0,0,0,868, +870,5,192,0,0,869,871,5,42,0,0,870,869,1,0,0,0,870,871,1,0,0,0,871,872,1, +0,0,0,872,875,5,178,0,0,873,874,7,1,0,0,874,876,3,172,86,0,875,873,1,0,0, +0,875,876,1,0,0,0,876,998,1,0,0,0,877,878,5,192,0,0,878,879,5,177,0,0,879, +882,5,88,0,0,880,881,7,1,0,0,881,883,3,172,86,0,882,880,1,0,0,0,882,883, +1,0,0,0,883,998,1,0,0,0,884,885,5,55,0,0,885,998,3,160,80,0,886,887,5,54, +0,0,887,998,3,160,80,0,888,889,5,192,0,0,889,896,5,85,0,0,890,891,5,118, +0,0,891,894,3,96,48,0,892,893,5,67,0,0,893,895,3,96,48,0,894,892,1,0,0,0, +894,895,1,0,0,0,895,897,1,0,0,0,896,890,1,0,0,0,896,897,1,0,0,0,897,998, +1,0,0,0,898,899,5,192,0,0,899,906,5,189,0,0,900,901,5,118,0,0,901,904,3, +96,48,0,902,903,5,67,0,0,903,905,3,96,48,0,904,902,1,0,0,0,904,905,1,0,0, +0,905,907,1,0,0,0,906,900,1,0,0,0,906,907,1,0,0,0,907,998,1,0,0,0,908,909, +5,190,0,0,909,910,5,189,0,0,910,911,3,160,80,0,911,912,5,238,0,0,912,913, +3,86,43,0,913,998,1,0,0,0,914,915,5,170,0,0,915,916,5,189,0,0,916,998,3, +160,80,0,917,918,5,195,0,0,918,927,5,211,0,0,919,924,3,152,76,0,920,921, +5,4,0,0,921,923,3,152,76,0,922,920,1,0,0,0,923,926,1,0,0,0,924,922,1,0,0, +0,924,925,1,0,0,0,925,928,1,0,0,0,926,924,1,0,0,0,927,919,1,0,0,0,927,928, +1,0,0,0,928,998,1,0,0,0,929,931,5,35,0,0,930,932,5,234,0,0,931,930,1,0,0, +0,931,932,1,0,0,0,932,998,1,0,0,0,933,935,5,179,0,0,934,936,5,234,0,0,935, +934,1,0,0,0,935,936,1,0,0,0,936,998,1,0,0,0,937,938,5,157,0,0,938,939,3, +172,86,0,939,940,5,82,0,0,940,941,3,6,3,0,941,998,1,0,0,0,942,943,5,51,0, +0,943,944,5,157,0,0,944,998,3,172,86,0,945,946,5,70,0,0,946,956,3,172,86, +0,947,948,5,225,0,0,948,953,3,86,43,0,949,950,5,4,0,0,950,952,3,86,43,0, +951,949,1,0,0,0,952,955,1,0,0,0,953,951,1,0,0,0,953,954,1,0,0,0,954,957, +1,0,0,0,955,953,1,0,0,0,956,947,1,0,0,0,956,957,1,0,0,0,957,998,1,0,0,0, +958,959,5,55,0,0,959,960,5,100,0,0,960,998,3,172,86,0,961,962,5,55,0,0,962, +963,5,151,0,0,963,998,3,172,86,0,964,965,5,222,0,0,965,966,3,160,80,0,966, +967,5,190,0,0,967,972,3,148,74,0,968,969,5,4,0,0,969,971,3,148,74,0,970, +968,1,0,0,0,971,974,1,0,0,0,972,970,1,0,0,0,972,973,1,0,0,0,973,977,1,0, +0,0,974,972,1,0,0,0,975,976,5,232,0,0,976,978,3,88,44,0,977,975,1,0,0,0, +977,978,1,0,0,0,978,998,1,0,0,0,979,980,5,126,0,0,980,981,5,104,0,0,981, +986,3,160,80,0,982,984,5,18,0,0,983,982,1,0,0,0,983,984,1,0,0,0,984,985, +1,0,0,0,985,987,3,172,86,0,986,983,1,0,0,0,986,987,1,0,0,0,987,988,1,0,0, +0,988,989,5,225,0,0,989,990,3,70,35,0,990,991,5,144,0,0,991,993,3,86,43, +0,992,994,3,140,70,0,993,992,1,0,0,0,994,995,1,0,0,0,995,993,1,0,0,0,995, +996,1,0,0,0,996,998,1,0,0,0,997,205,1,0,0,0,997,206,1,0,0,0,997,208,1,0, +0,0,997,213,1,0,0,0,997,225,1,0,0,0,997,235,1,0,0,0,997,242,1,0,0,0,997, +276,1,0,0,0,997,302,1,0,0,0,997,309,1,0,0,0,997,317,1,0,0,0,997,324,1,0, +0,0,997,327,1,0,0,0,997,338,1,0,0,0,997,355,1,0,0,0,997,370,1,0,0,0,997, +386,1,0,0,0,997,396,1,0,0,0,997,411,1,0,0,0,997,427,1,0,0,0,997,443,1,0, +0,0,997,454,1,0,0,0,997,469,1,0,0,0,997,484,1,0,0,0,997,490,1,0,0,0,997, +508,1,0,0,0,997,521,1,0,0,0,997,532,1,0,0,0,997,539,1,0,0,0,997,567,1,0, +0,0,997,575,1,0,0,0,997,583,1,0,0,0,997,614,1,0,0,0,997,622,1,0,0,0,997, +635,1,0,0,0,997,650,1,0,0,0,997,658,1,0,0,0,997,661,1,0,0,0,997,682,1,0, +0,0,997,703,1,0,0,0,997,710,1,0,0,0,997,735,1,0,0,0,997,761,1,0,0,0,997, +770,1,0,0,0,997,791,1,0,0,0,997,795,1,0,0,0,997,799,1,0,0,0,997,803,1,0, +0,0,997,808,1,0,0,0,997,815,1,0,0,0,997,829,1,0,0,0,997,843,1,0,0,0,997, +853,1,0,0,0,997,857,1,0,0,0,997,861,1,0,0,0,997,868,1,0,0,0,997,877,1,0, +0,0,997,884,1,0,0,0,997,886,1,0,0,0,997,888,1,0,0,0,997,898,1,0,0,0,997, +908,1,0,0,0,997,914,1,0,0,0,997,917,1,0,0,0,997,929,1,0,0,0,997,933,1,0, +0,0,997,937,1,0,0,0,997,942,1,0,0,0,997,945,1,0,0,0,997,958,1,0,0,0,997, +961,1,0,0,0,997,964,1,0,0,0,997,979,1,0,0,0,998,7,1,0,0,0,999,1001,3,10, +5,0,1000,999,1,0,0,0,1000,1001,1,0,0,0,1001,1002,1,0,0,0,1002,1003,3,48, +24,0,1003,9,1,0,0,0,1004,1006,5,233,0,0,1005,1007,5,164,0,0,1006,1005,1, +0,0,0,1006,1007,1,0,0,0,1007,1008,1,0,0,0,1008,1013,3,64,32,0,1009,1010, +5,4,0,0,1010,1012,3,64,32,0,1011,1009,1,0,0,0,1012,1015,1,0,0,0,1013,1011, +1,0,0,0,1013,1014,1,0,0,0,1014,11,1,0,0,0,1015,1013,1,0,0,0,1016,1020,3, +176,88,0,1017,1020,3,14,7,0,1018,1020,3,16,8,0,1019,1016,1,0,0,0,1019,1017, +1,0,0,0,1019,1018,1,0,0,0,1020,13,1,0,0,0,1021,1022,3,172,86,0,1022,1025, +3,116,58,0,1023,1024,5,138,0,0,1024,1026,5,139,0,0,1025,1023,1,0,0,0,1025, +1026,1,0,0,0,1026,1029,1,0,0,0,1027,1028,5,34,0,0,1028,1030,3,96,48,0,1029, +1027,1,0,0,0,1029,1030,1,0,0,0,1030,1033,1,0,0,0,1031,1032,5,233,0,0,1032, +1034,3,18,9,0,1033,1031,1,0,0,0,1033,1034,1,0,0,0,1034,15,1,0,0,0,1035,1036, +5,118,0,0,1036,1039,3,160,80,0,1037,1038,7,2,0,0,1038,1040,5,160,0,0,1039, +1037,1,0,0,0,1039,1040,1,0,0,0,1040,17,1,0,0,0,1041,1042,5,2,0,0,1042,1047, +3,20,10,0,1043,1044,5,4,0,0,1044,1046,3,20,10,0,1045,1043,1,0,0,0,1046,1049, +1,0,0,0,1047,1045,1,0,0,0,1047,1048,1,0,0,0,1048,1050,1,0,0,0,1049,1047, +1,0,0,0,1050,1051,5,3,0,0,1051,19,1,0,0,0,1052,1053,3,172,86,0,1053,1054, +5,238,0,0,1054,1055,3,86,43,0,1055,21,1,0,0,0,1056,1057,3,172,86,0,1057, +1058,3,116,58,0,1058,23,1,0,0,0,1059,1061,3,26,13,0,1060,1059,1,0,0,0,1061, +1064,1,0,0,0,1062,1060,1,0,0,0,1062,1063,1,0,0,0,1063,25,1,0,0,0,1064,1062, +1,0,0,0,1065,1066,5,113,0,0,1066,1070,3,38,19,0,1067,1070,3,40,20,0,1068, +1070,3,42,21,0,1069,1065,1,0,0,0,1069,1067,1,0,0,0,1069,1068,1,0,0,0,1070, +27,1,0,0,0,1071,1073,3,30,15,0,1072,1071,1,0,0,0,1073,1076,1,0,0,0,1074, +1072,1,0,0,0,1074,1075,1,0,0,0,1075,29,1,0,0,0,1076,1074,1,0,0,0,1077,1078, +3,42,21,0,1078,31,1,0,0,0,1079,1082,3,34,17,0,1080,1082,3,36,18,0,1081,1079, +1,0,0,0,1081,1080,1,0,0,0,1082,33,1,0,0,0,1083,1084,5,173,0,0,1084,1085, +3,86,43,0,1085,35,1,0,0,0,1086,1089,5,74,0,0,1087,1088,5,129,0,0,1088,1090, +3,44,22,0,1089,1087,1,0,0,0,1089,1090,1,0,0,0,1090,37,1,0,0,0,1091,1094, +5,194,0,0,1092,1094,3,172,86,0,1093,1091,1,0,0,0,1093,1092,1,0,0,0,1094, +39,1,0,0,0,1095,1099,5,57,0,0,1096,1097,5,138,0,0,1097,1099,5,57,0,0,1098, +1095,1,0,0,0,1098,1096,1,0,0,0,1099,41,1,0,0,0,1100,1101,5,174,0,0,1101, +1102,5,139,0,0,1102,1103,5,144,0,0,1103,1104,5,139,0,0,1104,1110,5,100,0, +0,1105,1106,5,27,0,0,1106,1107,5,144,0,0,1107,1108,5,139,0,0,1108,1110,5, +100,0,0,1109,1100,1,0,0,0,1109,1105,1,0,0,0,1110,43,1,0,0,0,1111,1112,3, +172,86,0,1112,45,1,0,0,0,1113,1114,5,186,0,0,1114,1115,7,3,0,0,1115,47,1, +0,0,0,1116,1127,3,50,25,0,1117,1118,5,148,0,0,1118,1119,5,25,0,0,1119,1124, +3,54,27,0,1120,1121,5,4,0,0,1121,1123,3,54,27,0,1122,1120,1,0,0,0,1123,1126, +1,0,0,0,1124,1122,1,0,0,0,1124,1125,1,0,0,0,1125,1128,1,0,0,0,1126,1124, +1,0,0,0,1127,1117,1,0,0,0,1127,1128,1,0,0,0,1128,1134,1,0,0,0,1129,1130, +5,143,0,0,1130,1132,5,253,0,0,1131,1133,7,4,0,0,1132,1131,1,0,0,0,1132,1133, +1,0,0,0,1133,1135,1,0,0,0,1134,1129,1,0,0,0,1134,1135,1,0,0,0,1135,1145, +1,0,0,0,1136,1137,5,119,0,0,1137,1144,7,5,0,0,1138,1139,5,76,0,0,1139,1140, +5,78,0,0,1140,1141,5,253,0,0,1141,1142,5,182,0,0,1142,1144,5,145,0,0,1143, +1136,1,0,0,0,1143,1138,1,0,0,0,1144,1146,1,0,0,0,1145,1143,1,0,0,0,1145, +1146,1,0,0,0,1146,49,1,0,0,0,1147,1148,6,25,-1,0,1148,1149,3,52,26,0,1149, +1164,1,0,0,0,1150,1151,10,2,0,0,1151,1153,5,102,0,0,1152,1154,3,66,33,0, +1153,1152,1,0,0,0,1153,1154,1,0,0,0,1154,1155,1,0,0,0,1155,1163,3,50,25, +3,1156,1157,10,1,0,0,1157,1159,7,6,0,0,1158,1160,3,66,33,0,1159,1158,1,0, +0,0,1159,1160,1,0,0,0,1160,1161,1,0,0,0,1161,1163,3,50,25,2,1162,1150,1, +0,0,0,1162,1156,1,0,0,0,1163,1166,1,0,0,0,1164,1162,1,0,0,0,1164,1165,1, +0,0,0,1165,51,1,0,0,0,1166,1164,1,0,0,0,1167,1184,3,56,28,0,1168,1169,5, +201,0,0,1169,1184,3,160,80,0,1170,1171,5,227,0,0,1171,1176,3,86,43,0,1172, +1173,5,4,0,0,1173,1175,3,86,43,0,1174,1172,1,0,0,0,1175,1178,1,0,0,0,1176, +1174,1,0,0,0,1176,1177,1,0,0,0,1177,1184,1,0,0,0,1178,1176,1,0,0,0,1179, +1180,5,2,0,0,1180,1181,3,48,24,0,1181,1182,5,3,0,0,1182,1184,1,0,0,0,1183, +1167,1,0,0,0,1183,1168,1,0,0,0,1183,1170,1,0,0,0,1183,1179,1,0,0,0,1184, +53,1,0,0,0,1185,1187,3,86,43,0,1186,1188,7,7,0,0,1187,1186,1,0,0,0,1187, +1188,1,0,0,0,1188,1191,1,0,0,0,1189,1190,5,141,0,0,1190,1192,7,8,0,0,1191, +1189,1,0,0,0,1191,1192,1,0,0,0,1192,55,1,0,0,0,1193,1195,5,187,0,0,1194, +1196,3,66,33,0,1195,1194,1,0,0,0,1195,1196,1,0,0,0,1196,1197,1,0,0,0,1197, +1202,3,68,34,0,1198,1199,5,4,0,0,1199,1201,3,68,34,0,1200,1198,1,0,0,0,1201, +1204,1,0,0,0,1202,1200,1,0,0,0,1202,1203,1,0,0,0,1203,1214,1,0,0,0,1204, +1202,1,0,0,0,1205,1206,5,82,0,0,1206,1211,3,70,35,0,1207,1208,5,4,0,0,1208, +1210,3,70,35,0,1209,1207,1,0,0,0,1210,1213,1,0,0,0,1211,1209,1,0,0,0,1211, +1212,1,0,0,0,1212,1215,1,0,0,0,1213,1211,1,0,0,0,1214,1205,1,0,0,0,1214, +1215,1,0,0,0,1215,1218,1,0,0,0,1216,1217,5,232,0,0,1217,1219,3,88,44,0,1218, +1216,1,0,0,0,1218,1219,1,0,0,0,1219,1223,1,0,0,0,1220,1221,5,90,0,0,1221, +1222,5,25,0,0,1222,1224,3,58,29,0,1223,1220,1,0,0,0,1223,1224,1,0,0,0,1224, +1227,1,0,0,0,1225,1226,5,93,0,0,1226,1228,3,88,44,0,1227,1225,1,0,0,0,1227, +1228,1,0,0,0,1228,57,1,0,0,0,1229,1231,3,66,33,0,1230,1229,1,0,0,0,1230, +1231,1,0,0,0,1231,1232,1,0,0,0,1232,1237,3,60,30,0,1233,1234,5,4,0,0,1234, +1236,3,60,30,0,1235,1233,1,0,0,0,1236,1239,1,0,0,0,1237,1235,1,0,0,0,1237, +1238,1,0,0,0,1238,59,1,0,0,0,1239,1237,1,0,0,0,1240,1281,3,62,31,0,1241, +1242,5,180,0,0,1242,1251,5,2,0,0,1243,1248,3,86,43,0,1244,1245,5,4,0,0,1245, +1247,3,86,43,0,1246,1244,1,0,0,0,1247,1250,1,0,0,0,1248,1246,1,0,0,0,1248, +1249,1,0,0,0,1249,1252,1,0,0,0,1250,1248,1,0,0,0,1251,1243,1,0,0,0,1251, +1252,1,0,0,0,1252,1253,1,0,0,0,1253,1281,5,3,0,0,1254,1255,5,41,0,0,1255, +1264,5,2,0,0,1256,1261,3,86,43,0,1257,1258,5,4,0,0,1258,1260,3,86,43,0,1259, +1257,1,0,0,0,1260,1263,1,0,0,0,1261,1259,1,0,0,0,1261,1262,1,0,0,0,1262, +1265,1,0,0,0,1263,1261,1,0,0,0,1264,1256,1,0,0,0,1264,1265,1,0,0,0,1265, +1266,1,0,0,0,1266,1281,5,3,0,0,1267,1268,5,91,0,0,1268,1269,5,191,0,0,1269, +1270,5,2,0,0,1270,1275,3,62,31,0,1271,1272,5,4,0,0,1272,1274,3,62,31,0,1273, +1271,1,0,0,0,1274,1277,1,0,0,0,1275,1273,1,0,0,0,1275,1276,1,0,0,0,1276, +1278,1,0,0,0,1277,1275,1,0,0,0,1278,1279,5,3,0,0,1279,1281,1,0,0,0,1280, +1240,1,0,0,0,1280,1241,1,0,0,0,1280,1254,1,0,0,0,1280,1267,1,0,0,0,1281, +61,1,0,0,0,1282,1291,5,2,0,0,1283,1288,3,86,43,0,1284,1285,5,4,0,0,1285, +1287,3,86,43,0,1286,1284,1,0,0,0,1287,1290,1,0,0,0,1288,1286,1,0,0,0,1288, +1289,1,0,0,0,1289,1292,1,0,0,0,1290,1288,1,0,0,0,1291,1283,1,0,0,0,1291, +1292,1,0,0,0,1292,1293,1,0,0,0,1293,1296,5,3,0,0,1294,1296,3,86,43,0,1295, +1282,1,0,0,0,1295,1294,1,0,0,0,1296,63,1,0,0,0,1297,1299,3,172,86,0,1298, +1300,3,82,41,0,1299,1298,1,0,0,0,1299,1300,1,0,0,0,1300,1301,1,0,0,0,1301, +1302,5,18,0,0,1302,1303,5,2,0,0,1303,1304,3,8,4,0,1304,1305,5,3,0,0,1305, +65,1,0,0,0,1306,1307,7,9,0,0,1307,67,1,0,0,0,1308,1313,3,86,43,0,1309,1311, +5,18,0,0,1310,1309,1,0,0,0,1310,1311,1,0,0,0,1311,1312,1,0,0,0,1312,1314, +3,172,86,0,1313,1310,1,0,0,0,1313,1314,1,0,0,0,1314,1321,1,0,0,0,1315,1316, +3,160,80,0,1316,1317,5,1,0,0,1317,1318,5,246,0,0,1318,1321,1,0,0,0,1319, +1321,5,246,0,0,1320,1308,1,0,0,0,1320,1315,1,0,0,0,1320,1319,1,0,0,0,1321, +69,1,0,0,0,1322,1323,6,35,-1,0,1323,1324,3,76,38,0,1324,1343,1,0,0,0,1325, +1339,10,2,0,0,1326,1327,5,40,0,0,1327,1328,5,110,0,0,1328,1340,3,76,38,0, +1329,1330,3,72,36,0,1330,1331,5,110,0,0,1331,1332,3,70,35,0,1332,1333,3, +74,37,0,1333,1340,1,0,0,0,1334,1335,5,130,0,0,1335,1336,3,72,36,0,1336,1337, +5,110,0,0,1337,1338,3,76,38,0,1338,1340,1,0,0,0,1339,1326,1,0,0,0,1339,1329, +1,0,0,0,1339,1334,1,0,0,0,1340,1342,1,0,0,0,1341,1325,1,0,0,0,1342,1345, +1,0,0,0,1343,1341,1,0,0,0,1343,1344,1,0,0,0,1344,71,1,0,0,0,1345,1343,1, +0,0,0,1346,1348,5,99,0,0,1347,1346,1,0,0,0,1347,1348,1,0,0,0,1348,1362,1, +0,0,0,1349,1351,5,116,0,0,1350,1352,5,150,0,0,1351,1350,1,0,0,0,1351,1352, +1,0,0,0,1352,1362,1,0,0,0,1353,1355,5,176,0,0,1354,1356,5,150,0,0,1355,1354, +1,0,0,0,1355,1356,1,0,0,0,1356,1362,1,0,0,0,1357,1359,5,83,0,0,1358,1360, +5,150,0,0,1359,1358,1,0,0,0,1359,1360,1,0,0,0,1360,1362,1,0,0,0,1361,1347, +1,0,0,0,1361,1349,1,0,0,0,1361,1353,1,0,0,0,1361,1357,1,0,0,0,1362,73,1, +0,0,0,1363,1364,5,144,0,0,1364,1378,3,88,44,0,1365,1366,5,225,0,0,1366,1367, +5,2,0,0,1367,1372,3,172,86,0,1368,1369,5,4,0,0,1369,1371,3,172,86,0,1370, +1368,1,0,0,0,1371,1374,1,0,0,0,1372,1370,1,0,0,0,1372,1373,1,0,0,0,1373, +1375,1,0,0,0,1374,1372,1,0,0,0,1375,1376,5,3,0,0,1376,1378,1,0,0,0,1377, +1363,1,0,0,0,1377,1365,1,0,0,0,1378,75,1,0,0,0,1379,1386,3,80,40,0,1380, +1381,5,203,0,0,1381,1382,3,78,39,0,1382,1383,5,2,0,0,1383,1384,3,86,43,0, +1384,1385,5,3,0,0,1385,1387,1,0,0,0,1386,1380,1,0,0,0,1386,1387,1,0,0,0, +1387,77,1,0,0,0,1388,1389,7,10,0,0,1389,79,1,0,0,0,1390,1398,3,84,42,0,1391, +1393,5,18,0,0,1392,1391,1,0,0,0,1392,1393,1,0,0,0,1393,1394,1,0,0,0,1394, +1396,3,172,86,0,1395,1397,3,82,41,0,1396,1395,1,0,0,0,1396,1397,1,0,0,0, +1397,1399,1,0,0,0,1398,1392,1,0,0,0,1398,1399,1,0,0,0,1399,81,1,0,0,0,1400, +1401,5,2,0,0,1401,1406,3,172,86,0,1402,1403,5,4,0,0,1403,1405,3,172,86,0, +1404,1402,1,0,0,0,1405,1408,1,0,0,0,1406,1404,1,0,0,0,1406,1407,1,0,0,0, +1407,1409,1,0,0,0,1408,1406,1,0,0,0,1409,1410,5,3,0,0,1410,83,1,0,0,0,1411, +1413,3,160,80,0,1412,1414,3,162,81,0,1413,1412,1,0,0,0,1413,1414,1,0,0,0, +1414,1449,1,0,0,0,1415,1416,5,2,0,0,1416,1417,3,8,4,0,1417,1418,5,3,0,0, +1418,1449,1,0,0,0,1419,1420,5,221,0,0,1420,1421,5,2,0,0,1421,1426,3,86,43, +0,1422,1423,5,4,0,0,1423,1425,3,86,43,0,1424,1422,1,0,0,0,1425,1428,1,0, +0,0,1426,1424,1,0,0,0,1426,1427,1,0,0,0,1427,1429,1,0,0,0,1428,1426,1,0, +0,0,1429,1432,5,3,0,0,1430,1431,5,233,0,0,1431,1433,5,149,0,0,1432,1430, +1,0,0,0,1432,1433,1,0,0,0,1433,1449,1,0,0,0,1434,1435,5,115,0,0,1435,1436, +5,2,0,0,1436,1437,3,8,4,0,1437,1438,5,3,0,0,1438,1449,1,0,0,0,1439,1440, +5,2,0,0,1440,1441,3,70,35,0,1441,1442,5,3,0,0,1442,1449,1,0,0,0,1443,1444, +5,201,0,0,1444,1445,5,2,0,0,1445,1446,3,118,59,0,1446,1447,5,3,0,0,1447, +1449,1,0,0,0,1448,1411,1,0,0,0,1448,1415,1,0,0,0,1448,1419,1,0,0,0,1448, +1434,1,0,0,0,1448,1439,1,0,0,0,1448,1443,1,0,0,0,1449,85,1,0,0,0,1450,1451, +3,88,44,0,1451,87,1,0,0,0,1452,1453,6,44,-1,0,1453,1455,3,92,46,0,1454,1456, +3,90,45,0,1455,1454,1,0,0,0,1455,1456,1,0,0,0,1456,1460,1,0,0,0,1457,1458, +5,138,0,0,1458,1460,3,88,44,3,1459,1452,1,0,0,0,1459,1457,1,0,0,0,1460,1469, +1,0,0,0,1461,1462,10,2,0,0,1462,1463,5,15,0,0,1463,1468,3,88,44,3,1464,1465, +10,1,0,0,1465,1466,5,147,0,0,1466,1468,3,88,44,2,1467,1461,1,0,0,0,1467, +1464,1,0,0,0,1468,1471,1,0,0,0,1469,1467,1,0,0,0,1469,1470,1,0,0,0,1470, +89,1,0,0,0,1471,1469,1,0,0,0,1472,1473,3,102,51,0,1473,1474,3,92,46,0,1474, +1534,1,0,0,0,1475,1476,3,102,51,0,1476,1477,3,104,52,0,1477,1478,5,2,0,0, +1478,1479,3,8,4,0,1479,1480,5,3,0,0,1480,1534,1,0,0,0,1481,1483,5,138,0, +0,1482,1481,1,0,0,0,1482,1483,1,0,0,0,1483,1484,1,0,0,0,1484,1485,5,23,0, +0,1485,1486,3,92,46,0,1486,1487,5,15,0,0,1487,1488,3,92,46,0,1488,1534,1, +0,0,0,1489,1491,5,138,0,0,1490,1489,1,0,0,0,1490,1491,1,0,0,0,1491,1492, +1,0,0,0,1492,1493,5,97,0,0,1493,1494,5,2,0,0,1494,1499,3,86,43,0,1495,1496, +5,4,0,0,1496,1498,3,86,43,0,1497,1495,1,0,0,0,1498,1501,1,0,0,0,1499,1497, +1,0,0,0,1499,1500,1,0,0,0,1500,1502,1,0,0,0,1501,1499,1,0,0,0,1502,1503, +5,3,0,0,1503,1534,1,0,0,0,1504,1506,5,138,0,0,1505,1504,1,0,0,0,1505,1506, +1,0,0,0,1506,1507,1,0,0,0,1507,1508,5,97,0,0,1508,1509,5,2,0,0,1509,1510, +3,8,4,0,1510,1511,5,3,0,0,1511,1534,1,0,0,0,1512,1514,5,138,0,0,1513,1512, +1,0,0,0,1513,1514,1,0,0,0,1514,1515,1,0,0,0,1515,1516,5,118,0,0,1516,1519, +3,92,46,0,1517,1518,5,67,0,0,1518,1520,3,92,46,0,1519,1517,1,0,0,0,1519, +1520,1,0,0,0,1520,1534,1,0,0,0,1521,1523,5,107,0,0,1522,1524,5,138,0,0,1523, +1522,1,0,0,0,1523,1524,1,0,0,0,1524,1525,1,0,0,0,1525,1534,5,139,0,0,1526, +1528,5,107,0,0,1527,1529,5,138,0,0,1528,1527,1,0,0,0,1528,1529,1,0,0,0,1529, +1530,1,0,0,0,1530,1531,5,59,0,0,1531,1532,5,82,0,0,1532,1534,3,92,46,0,1533, +1472,1,0,0,0,1533,1475,1,0,0,0,1533,1482,1,0,0,0,1533,1490,1,0,0,0,1533, +1505,1,0,0,0,1533,1513,1,0,0,0,1533,1521,1,0,0,0,1533,1526,1,0,0,0,1534, +91,1,0,0,0,1535,1536,6,46,-1,0,1536,1540,3,94,47,0,1537,1538,7,11,0,0,1538, +1540,3,92,46,4,1539,1535,1,0,0,0,1539,1537,1,0,0,0,1540,1555,1,0,0,0,1541, +1542,10,3,0,0,1542,1543,7,12,0,0,1543,1554,3,92,46,4,1544,1545,10,2,0,0, +1545,1546,7,11,0,0,1546,1554,3,92,46,3,1547,1548,10,1,0,0,1548,1549,5,249, +0,0,1549,1554,3,92,46,2,1550,1551,10,5,0,0,1551,1552,5,20,0,0,1552,1554, +3,100,50,0,1553,1541,1,0,0,0,1553,1544,1,0,0,0,1553,1547,1,0,0,0,1553,1550, +1,0,0,0,1554,1557,1,0,0,0,1555,1553,1,0,0,0,1555,1556,1,0,0,0,1556,93,1, +0,0,0,1557,1555,1,0,0,0,1558,1559,6,47,-1,0,1559,1798,5,139,0,0,1560,1798, +3,108,54,0,1561,1562,3,172,86,0,1562,1563,3,96,48,0,1563,1798,1,0,0,0,1564, +1565,5,262,0,0,1565,1798,3,96,48,0,1566,1798,3,174,87,0,1567,1798,3,106, +53,0,1568,1798,3,96,48,0,1569,1798,5,252,0,0,1570,1798,5,5,0,0,1571,1572, +5,155,0,0,1572,1573,5,2,0,0,1573,1574,3,92,46,0,1574,1575,5,97,0,0,1575, +1576,3,92,46,0,1576,1577,5,3,0,0,1577,1798,1,0,0,0,1578,1579,5,2,0,0,1579, +1582,3,86,43,0,1580,1581,5,4,0,0,1581,1583,3,86,43,0,1582,1580,1,0,0,0,1583, +1584,1,0,0,0,1584,1582,1,0,0,0,1584,1585,1,0,0,0,1585,1586,1,0,0,0,1586, +1587,5,3,0,0,1587,1798,1,0,0,0,1588,1589,5,181,0,0,1589,1590,5,2,0,0,1590, +1595,3,86,43,0,1591,1592,5,4,0,0,1592,1594,3,86,43,0,1593,1591,1,0,0,0,1594, +1597,1,0,0,0,1595,1593,1,0,0,0,1595,1596,1,0,0,0,1596,1598,1,0,0,0,1597, +1595,1,0,0,0,1598,1599,5,3,0,0,1599,1798,1,0,0,0,1600,1601,3,160,80,0,1601, +1602,5,2,0,0,1602,1603,5,246,0,0,1603,1605,5,3,0,0,1604,1606,3,138,69,0, +1605,1604,1,0,0,0,1605,1606,1,0,0,0,1606,1608,1,0,0,0,1607,1609,3,142,71, +0,1608,1607,1,0,0,0,1608,1609,1,0,0,0,1609,1798,1,0,0,0,1610,1611,3,160, +80,0,1611,1623,5,2,0,0,1612,1614,3,66,33,0,1613,1612,1,0,0,0,1613,1614,1, +0,0,0,1614,1615,1,0,0,0,1615,1620,3,86,43,0,1616,1617,5,4,0,0,1617,1619, +3,86,43,0,1618,1616,1,0,0,0,1619,1622,1,0,0,0,1620,1618,1,0,0,0,1620,1621, +1,0,0,0,1621,1624,1,0,0,0,1622,1620,1,0,0,0,1623,1613,1,0,0,0,1623,1624, +1,0,0,0,1624,1635,1,0,0,0,1625,1626,5,148,0,0,1626,1627,5,25,0,0,1627,1632, +3,54,27,0,1628,1629,5,4,0,0,1629,1631,3,54,27,0,1630,1628,1,0,0,0,1631,1634, +1,0,0,0,1632,1630,1,0,0,0,1632,1633,1,0,0,0,1633,1636,1,0,0,0,1634,1632, +1,0,0,0,1635,1625,1,0,0,0,1635,1636,1,0,0,0,1636,1637,1,0,0,0,1637,1639, +5,3,0,0,1638,1640,3,138,69,0,1639,1638,1,0,0,0,1639,1640,1,0,0,0,1640,1645, +1,0,0,0,1641,1643,3,98,49,0,1642,1641,1,0,0,0,1642,1643,1,0,0,0,1643,1644, +1,0,0,0,1644,1646,3,142,71,0,1645,1642,1,0,0,0,1645,1646,1,0,0,0,1646,1798, +1,0,0,0,1647,1648,3,172,86,0,1648,1649,5,6,0,0,1649,1650,3,86,43,0,1650, +1798,1,0,0,0,1651,1660,5,2,0,0,1652,1657,3,172,86,0,1653,1654,5,4,0,0,1654, +1656,3,172,86,0,1655,1653,1,0,0,0,1656,1659,1,0,0,0,1657,1655,1,0,0,0,1657, +1658,1,0,0,0,1658,1661,1,0,0,0,1659,1657,1,0,0,0,1660,1652,1,0,0,0,1660, +1661,1,0,0,0,1661,1662,1,0,0,0,1662,1663,5,3,0,0,1663,1664,5,6,0,0,1664, +1798,3,86,43,0,1665,1666,5,2,0,0,1666,1667,3,8,4,0,1667,1668,5,3,0,0,1668, +1798,1,0,0,0,1669,1670,5,71,0,0,1670,1671,5,2,0,0,1671,1672,3,8,4,0,1672, +1673,5,3,0,0,1673,1798,1,0,0,0,1674,1675,5,29,0,0,1675,1677,3,92,46,0,1676, +1678,3,136,68,0,1677,1676,1,0,0,0,1678,1679,1,0,0,0,1679,1677,1,0,0,0,1679, +1680,1,0,0,0,1680,1683,1,0,0,0,1681,1682,5,62,0,0,1682,1684,3,86,43,0,1683, +1681,1,0,0,0,1683,1684,1,0,0,0,1684,1685,1,0,0,0,1685,1686,5,65,0,0,1686, +1798,1,0,0,0,1687,1689,5,29,0,0,1688,1690,3,136,68,0,1689,1688,1,0,0,0,1690, +1691,1,0,0,0,1691,1689,1,0,0,0,1691,1692,1,0,0,0,1692,1695,1,0,0,0,1693, +1694,5,62,0,0,1694,1696,3,86,43,0,1695,1693,1,0,0,0,1695,1696,1,0,0,0,1696, +1697,1,0,0,0,1697,1698,5,65,0,0,1698,1798,1,0,0,0,1699,1700,5,30,0,0,1700, +1701,5,2,0,0,1701,1702,3,86,43,0,1702,1703,5,18,0,0,1703,1704,3,116,58,0, +1704,1705,5,3,0,0,1705,1798,1,0,0,0,1706,1707,5,214,0,0,1707,1708,5,2,0, +0,1708,1709,3,86,43,0,1709,1710,5,18,0,0,1710,1711,3,116,58,0,1711,1712, +5,3,0,0,1712,1798,1,0,0,0,1713,1714,5,17,0,0,1714,1723,5,7,0,0,1715,1720, +3,86,43,0,1716,1717,5,4,0,0,1717,1719,3,86,43,0,1718,1716,1,0,0,0,1719,1722, +1,0,0,0,1720,1718,1,0,0,0,1720,1721,1,0,0,0,1721,1724,1,0,0,0,1722,1720, +1,0,0,0,1723,1715,1,0,0,0,1723,1724,1,0,0,0,1724,1725,1,0,0,0,1725,1798, +5,8,0,0,1726,1798,3,172,86,0,1727,1798,5,43,0,0,1728,1732,5,45,0,0,1729, +1730,5,2,0,0,1730,1731,5,253,0,0,1731,1733,5,3,0,0,1732,1729,1,0,0,0,1732, +1733,1,0,0,0,1733,1798,1,0,0,0,1734,1738,5,46,0,0,1735,1736,5,2,0,0,1736, +1737,5,253,0,0,1737,1739,5,3,0,0,1738,1735,1,0,0,0,1738,1739,1,0,0,0,1739, +1798,1,0,0,0,1740,1744,5,120,0,0,1741,1742,5,2,0,0,1742,1743,5,253,0,0,1743, +1745,5,3,0,0,1744,1741,1,0,0,0,1744,1745,1,0,0,0,1745,1798,1,0,0,0,1746, +1750,5,121,0,0,1747,1748,5,2,0,0,1748,1749,5,253,0,0,1749,1751,5,3,0,0,1750, +1747,1,0,0,0,1750,1751,1,0,0,0,1751,1798,1,0,0,0,1752,1798,5,47,0,0,1753, +1754,5,197,0,0,1754,1755,5,2,0,0,1755,1756,3,92,46,0,1756,1757,5,82,0,0, +1757,1760,3,92,46,0,1758,1759,5,80,0,0,1759,1761,3,92,46,0,1760,1758,1,0, +0,0,1760,1761,1,0,0,0,1761,1762,1,0,0,0,1762,1763,5,3,0,0,1763,1798,1,0, +0,0,1764,1765,5,137,0,0,1765,1766,5,2,0,0,1766,1769,3,92,46,0,1767,1768, +5,4,0,0,1768,1770,3,112,56,0,1769,1767,1,0,0,0,1769,1770,1,0,0,0,1770,1771, +1,0,0,0,1771,1772,5,3,0,0,1772,1798,1,0,0,0,1773,1774,5,73,0,0,1774,1775, +5,2,0,0,1775,1776,3,172,86,0,1776,1777,5,82,0,0,1777,1778,3,92,46,0,1778, +1779,5,3,0,0,1779,1798,1,0,0,0,1780,1781,5,2,0,0,1781,1782,3,86,43,0,1782, +1783,5,3,0,0,1783,1798,1,0,0,0,1784,1785,5,91,0,0,1785,1794,5,2,0,0,1786, +1791,3,160,80,0,1787,1788,5,4,0,0,1788,1790,3,160,80,0,1789,1787,1,0,0,0, +1790,1793,1,0,0,0,1791,1789,1,0,0,0,1791,1792,1,0,0,0,1792,1795,1,0,0,0, +1793,1791,1,0,0,0,1794,1786,1,0,0,0,1794,1795,1,0,0,0,1795,1796,1,0,0,0, +1796,1798,5,3,0,0,1797,1558,1,0,0,0,1797,1560,1,0,0,0,1797,1561,1,0,0,0, +1797,1564,1,0,0,0,1797,1566,1,0,0,0,1797,1567,1,0,0,0,1797,1568,1,0,0,0, +1797,1569,1,0,0,0,1797,1570,1,0,0,0,1797,1571,1,0,0,0,1797,1578,1,0,0,0, +1797,1588,1,0,0,0,1797,1600,1,0,0,0,1797,1610,1,0,0,0,1797,1647,1,0,0,0, +1797,1651,1,0,0,0,1797,1665,1,0,0,0,1797,1669,1,0,0,0,1797,1674,1,0,0,0, +1797,1687,1,0,0,0,1797,1699,1,0,0,0,1797,1706,1,0,0,0,1797,1713,1,0,0,0, +1797,1726,1,0,0,0,1797,1727,1,0,0,0,1797,1728,1,0,0,0,1797,1734,1,0,0,0, +1797,1740,1,0,0,0,1797,1746,1,0,0,0,1797,1752,1,0,0,0,1797,1753,1,0,0,0, +1797,1764,1,0,0,0,1797,1773,1,0,0,0,1797,1780,1,0,0,0,1797,1784,1,0,0,0, +1798,1809,1,0,0,0,1799,1800,10,14,0,0,1800,1801,5,7,0,0,1801,1802,3,92,46, +0,1802,1803,5,8,0,0,1803,1808,1,0,0,0,1804,1805,10,12,0,0,1805,1806,5,1, +0,0,1806,1808,3,172,86,0,1807,1799,1,0,0,0,1807,1804,1,0,0,0,1808,1811,1, +0,0,0,1809,1807,1,0,0,0,1809,1810,1,0,0,0,1810,95,1,0,0,0,1811,1809,1,0, +0,0,1812,1819,5,250,0,0,1813,1816,5,251,0,0,1814,1815,5,216,0,0,1815,1817, +5,250,0,0,1816,1814,1,0,0,0,1816,1817,1,0,0,0,1817,1819,1,0,0,0,1818,1812, +1,0,0,0,1818,1813,1,0,0,0,1819,97,1,0,0,0,1820,1821,5,96,0,0,1821,1825,5, +141,0,0,1822,1823,5,171,0,0,1823,1825,5,141,0,0,1824,1820,1,0,0,0,1824,1822, +1,0,0,0,1825,99,1,0,0,0,1826,1827,5,208,0,0,1827,1828,5,237,0,0,1828,1833, +3,108,54,0,1829,1830,5,208,0,0,1830,1831,5,237,0,0,1831,1833,3,96,48,0,1832, +1826,1,0,0,0,1832,1829,1,0,0,0,1833,101,1,0,0,0,1834,1835,7,13,0,0,1835, +103,1,0,0,0,1836,1837,7,14,0,0,1837,105,1,0,0,0,1838,1839,7,15,0,0,1839, +107,1,0,0,0,1840,1842,5,103,0,0,1841,1843,7,11,0,0,1842,1841,1,0,0,0,1842, +1843,1,0,0,0,1843,1844,1,0,0,0,1844,1845,3,96,48,0,1845,1848,3,110,55,0, +1846,1847,5,210,0,0,1847,1849,3,110,55,0,1848,1846,1,0,0,0,1848,1849,1,0, +0,0,1849,109,1,0,0,0,1850,1851,7,16,0,0,1851,111,1,0,0,0,1852,1853,7,17, +0,0,1853,113,1,0,0,0,1854,1863,5,2,0,0,1855,1860,3,116,58,0,1856,1857,5, +4,0,0,1857,1859,3,116,58,0,1858,1856,1,0,0,0,1859,1862,1,0,0,0,1860,1858, +1,0,0,0,1860,1861,1,0,0,0,1861,1864,1,0,0,0,1862,1860,1,0,0,0,1863,1855, +1,0,0,0,1863,1864,1,0,0,0,1864,1865,1,0,0,0,1865,1866,5,3,0,0,1866,115,1, +0,0,0,1867,1868,6,58,-1,0,1868,1869,5,17,0,0,1869,1870,5,240,0,0,1870,1871, +3,116,58,0,1871,1872,5,242,0,0,1872,1915,1,0,0,0,1873,1874,5,123,0,0,1874, +1875,5,240,0,0,1875,1876,3,116,58,0,1876,1877,5,4,0,0,1877,1878,3,116,58, +0,1878,1879,5,242,0,0,1879,1915,1,0,0,0,1880,1881,5,181,0,0,1881,1882,5, +2,0,0,1882,1883,3,172,86,0,1883,1890,3,116,58,0,1884,1885,5,4,0,0,1885,1886, +3,172,86,0,1886,1887,3,116,58,0,1887,1889,1,0,0,0,1888,1884,1,0,0,0,1889, +1892,1,0,0,0,1890,1888,1,0,0,0,1890,1891,1,0,0,0,1891,1893,1,0,0,0,1892, +1890,1,0,0,0,1893,1894,5,3,0,0,1894,1915,1,0,0,0,1895,1907,3,134,67,0,1896, +1897,5,2,0,0,1897,1902,3,132,66,0,1898,1899,5,4,0,0,1899,1901,3,132,66,0, +1900,1898,1,0,0,0,1901,1904,1,0,0,0,1902,1900,1,0,0,0,1902,1903,1,0,0,0, +1903,1905,1,0,0,0,1904,1902,1,0,0,0,1905,1906,5,3,0,0,1906,1908,1,0,0,0, +1907,1896,1,0,0,0,1907,1908,1,0,0,0,1908,1915,1,0,0,0,1909,1910,5,103,0, +0,1910,1911,3,110,55,0,1911,1912,5,210,0,0,1912,1913,3,110,55,0,1913,1915, +1,0,0,0,1914,1867,1,0,0,0,1914,1873,1,0,0,0,1914,1880,1,0,0,0,1914,1895, +1,0,0,0,1914,1909,1,0,0,0,1915,1920,1,0,0,0,1916,1917,10,6,0,0,1917,1919, +5,17,0,0,1918,1916,1,0,0,0,1919,1922,1,0,0,0,1920,1918,1,0,0,0,1920,1921, +1,0,0,0,1921,117,1,0,0,0,1922,1920,1,0,0,0,1923,1924,3,160,80,0,1924,1933, +5,2,0,0,1925,1930,3,120,60,0,1926,1927,5,4,0,0,1927,1929,3,120,60,0,1928, +1926,1,0,0,0,1929,1932,1,0,0,0,1930,1928,1,0,0,0,1930,1931,1,0,0,0,1931, +1934,1,0,0,0,1932,1930,1,0,0,0,1933,1925,1,0,0,0,1933,1934,1,0,0,0,1934, +1944,1,0,0,0,1935,1936,5,39,0,0,1936,1941,3,130,65,0,1937,1938,5,4,0,0,1938, +1940,3,130,65,0,1939,1937,1,0,0,0,1940,1943,1,0,0,0,1941,1939,1,0,0,0,1941, +1942,1,0,0,0,1942,1945,1,0,0,0,1943,1941,1,0,0,0,1944,1935,1,0,0,0,1944, +1945,1,0,0,0,1945,1946,1,0,0,0,1946,1947,5,3,0,0,1947,119,1,0,0,0,1948,1949, +3,172,86,0,1949,1950,5,9,0,0,1950,1952,1,0,0,0,1951,1948,1,0,0,0,1951,1952, +1,0,0,0,1952,1956,1,0,0,0,1953,1957,3,122,61,0,1954,1957,3,126,63,0,1955, +1957,3,86,43,0,1956,1953,1,0,0,0,1956,1954,1,0,0,0,1956,1955,1,0,0,0,1957, +121,1,0,0,0,1958,1976,3,124,62,0,1959,1960,5,153,0,0,1960,1974,5,25,0,0, +1961,1970,5,2,0,0,1962,1967,3,86,43,0,1963,1964,5,4,0,0,1964,1966,3,86,43, +0,1965,1963,1,0,0,0,1966,1969,1,0,0,0,1967,1965,1,0,0,0,1967,1968,1,0,0, +0,1968,1971,1,0,0,0,1969,1967,1,0,0,0,1970,1962,1,0,0,0,1970,1971,1,0,0, +0,1971,1972,1,0,0,0,1972,1975,5,3,0,0,1973,1975,3,86,43,0,1974,1961,1,0, +0,0,1974,1973,1,0,0,0,1975,1977,1,0,0,0,1976,1959,1,0,0,0,1976,1977,1,0, +0,0,1977,1984,1,0,0,0,1978,1979,5,161,0,0,1979,1980,5,231,0,0,1980,1985, +5,63,0,0,1981,1982,5,111,0,0,1982,1983,5,231,0,0,1983,1985,5,63,0,0,1984, +1978,1,0,0,0,1984,1981,1,0,0,0,1984,1985,1,0,0,0,1985,2002,1,0,0,0,1986, +1987,5,148,0,0,1987,2000,5,25,0,0,1988,1989,5,2,0,0,1989,1994,3,54,27,0, +1990,1991,5,4,0,0,1991,1993,3,54,27,0,1992,1990,1,0,0,0,1993,1996,1,0,0, +0,1994,1992,1,0,0,0,1994,1995,1,0,0,0,1995,1997,1,0,0,0,1996,1994,1,0,0, +0,1997,1998,5,3,0,0,1998,2001,1,0,0,0,1999,2001,3,54,27,0,2000,1988,1,0, +0,0,2000,1999,1,0,0,0,2001,2003,1,0,0,0,2002,1986,1,0,0,0,2002,2003,1,0, +0,0,2003,123,1,0,0,0,2004,2005,5,201,0,0,2005,2006,5,2,0,0,2006,2007,3,160, +80,0,2007,2015,5,3,0,0,2008,2010,5,18,0,0,2009,2008,1,0,0,0,2009,2010,1, +0,0,0,2010,2011,1,0,0,0,2011,2013,3,172,86,0,2012,2014,3,82,41,0,2013,2012, +1,0,0,0,2013,2014,1,0,0,0,2014,2016,1,0,0,0,2015,2009,1,0,0,0,2015,2016, +1,0,0,0,2016,2031,1,0,0,0,2017,2018,5,201,0,0,2018,2019,5,2,0,0,2019,2020, +3,8,4,0,2020,2028,5,3,0,0,2021,2023,5,18,0,0,2022,2021,1,0,0,0,2022,2023, +1,0,0,0,2023,2024,1,0,0,0,2024,2026,3,172,86,0,2025,2027,3,82,41,0,2026, +2025,1,0,0,0,2026,2027,1,0,0,0,2027,2029,1,0,0,0,2028,2022,1,0,0,0,2028, +2029,1,0,0,0,2029,2031,1,0,0,0,2030,2004,1,0,0,0,2030,2017,1,0,0,0,2031, +125,1,0,0,0,2032,2033,5,56,0,0,2033,2034,5,2,0,0,2034,2039,3,128,64,0,2035, +2036,5,4,0,0,2036,2038,3,128,64,0,2037,2035,1,0,0,0,2038,2041,1,0,0,0,2039, +2037,1,0,0,0,2039,2040,1,0,0,0,2040,2042,1,0,0,0,2041,2039,1,0,0,0,2042, +2043,5,3,0,0,2043,2051,1,0,0,0,2044,2045,5,30,0,0,2045,2046,5,2,0,0,2046, +2047,5,139,0,0,2047,2048,5,18,0,0,2048,2049,5,56,0,0,2049,2051,5,3,0,0,2050, +2032,1,0,0,0,2050,2044,1,0,0,0,2051,127,1,0,0,0,2052,2054,3,172,86,0,2053, +2055,3,116,58,0,2054,2053,1,0,0,0,2054,2055,1,0,0,0,2055,129,1,0,0,0,2056, +2057,5,2,0,0,2057,2058,3,160,80,0,2058,2059,5,4,0,0,2059,2064,3,160,80,0, +2060,2061,5,4,0,0,2061,2063,3,160,80,0,2062,2060,1,0,0,0,2063,2066,1,0,0, +0,2064,2062,1,0,0,0,2064,2065,1,0,0,0,2065,2067,1,0,0,0,2066,2064,1,0,0, +0,2067,2068,5,3,0,0,2068,131,1,0,0,0,2069,2072,5,253,0,0,2070,2072,3,116, +58,0,2071,2069,1,0,0,0,2071,2070,1,0,0,0,2072,133,1,0,0,0,2073,2078,5,260, +0,0,2074,2078,5,261,0,0,2075,2078,5,262,0,0,2076,2078,3,160,80,0,2077,2073, +1,0,0,0,2077,2074,1,0,0,0,2077,2075,1,0,0,0,2077,2076,1,0,0,0,2078,135,1, +0,0,0,2079,2080,5,231,0,0,2080,2081,3,86,43,0,2081,2082,5,207,0,0,2082,2083, +3,86,43,0,2083,137,1,0,0,0,2084,2085,5,77,0,0,2085,2086,5,2,0,0,2086,2087, +5,232,0,0,2087,2088,3,88,44,0,2088,2089,5,3,0,0,2089,139,1,0,0,0,2090,2091, +5,231,0,0,2091,2092,5,124,0,0,2092,2093,5,207,0,0,2093,2094,5,222,0,0,2094, +2095,5,190,0,0,2095,2096,3,172,86,0,2096,2097,5,238,0,0,2097,2105,3,86,43, +0,2098,2099,5,4,0,0,2099,2100,3,172,86,0,2100,2101,5,238,0,0,2101,2102,3, +86,43,0,2102,2104,1,0,0,0,2103,2098,1,0,0,0,2104,2107,1,0,0,0,2105,2103, +1,0,0,0,2105,2106,1,0,0,0,2106,2139,1,0,0,0,2107,2105,1,0,0,0,2108,2109, +5,231,0,0,2109,2110,5,138,0,0,2110,2111,5,124,0,0,2111,2112,5,207,0,0,2112, +2124,5,101,0,0,2113,2114,5,2,0,0,2114,2119,3,172,86,0,2115,2116,5,4,0,0, +2116,2118,3,172,86,0,2117,2115,1,0,0,0,2118,2121,1,0,0,0,2119,2117,1,0,0, +0,2119,2120,1,0,0,0,2120,2122,1,0,0,0,2121,2119,1,0,0,0,2122,2123,5,3,0, +0,2123,2125,1,0,0,0,2124,2113,1,0,0,0,2124,2125,1,0,0,0,2125,2126,1,0,0, +0,2126,2127,5,227,0,0,2127,2128,5,2,0,0,2128,2133,3,86,43,0,2129,2130,5, +4,0,0,2130,2132,3,86,43,0,2131,2129,1,0,0,0,2132,2135,1,0,0,0,2133,2131, +1,0,0,0,2133,2134,1,0,0,0,2134,2136,1,0,0,0,2135,2133,1,0,0,0,2136,2137, +5,3,0,0,2137,2139,1,0,0,0,2138,2090,1,0,0,0,2138,2108,1,0,0,0,2139,141,1, +0,0,0,2140,2141,5,152,0,0,2141,2152,5,2,0,0,2142,2143,5,153,0,0,2143,2144, +5,25,0,0,2144,2149,3,86,43,0,2145,2146,5,4,0,0,2146,2148,3,86,43,0,2147, +2145,1,0,0,0,2148,2151,1,0,0,0,2149,2147,1,0,0,0,2149,2150,1,0,0,0,2150, +2153,1,0,0,0,2151,2149,1,0,0,0,2152,2142,1,0,0,0,2152,2153,1,0,0,0,2153, +2164,1,0,0,0,2154,2155,5,148,0,0,2155,2156,5,25,0,0,2156,2161,3,54,27,0, +2157,2158,5,4,0,0,2158,2160,3,54,27,0,2159,2157,1,0,0,0,2160,2163,1,0,0, +0,2161,2159,1,0,0,0,2161,2162,1,0,0,0,2162,2165,1,0,0,0,2163,2161,1,0,0, +0,2164,2154,1,0,0,0,2164,2165,1,0,0,0,2165,2167,1,0,0,0,2166,2168,3,144, +72,0,2167,2166,1,0,0,0,2167,2168,1,0,0,0,2168,2169,1,0,0,0,2169,2170,5,3, +0,0,2170,143,1,0,0,0,2171,2172,5,162,0,0,2172,2196,3,146,73,0,2173,2174, +5,182,0,0,2174,2196,3,146,73,0,2175,2176,5,92,0,0,2176,2196,3,146,73,0,2177, +2178,5,162,0,0,2178,2179,5,23,0,0,2179,2180,3,146,73,0,2180,2181,5,15,0, +0,2181,2182,3,146,73,0,2182,2196,1,0,0,0,2183,2184,5,182,0,0,2184,2185,5, +23,0,0,2185,2186,3,146,73,0,2186,2187,5,15,0,0,2187,2188,3,146,73,0,2188, +2196,1,0,0,0,2189,2190,5,92,0,0,2190,2191,5,23,0,0,2191,2192,3,146,73,0, +2192,2193,5,15,0,0,2193,2194,3,146,73,0,2194,2196,1,0,0,0,2195,2171,1,0, +0,0,2195,2173,1,0,0,0,2195,2175,1,0,0,0,2195,2177,1,0,0,0,2195,2183,1,0, +0,0,2195,2189,1,0,0,0,2196,145,1,0,0,0,2197,2198,5,217,0,0,2198,2207,5,156, +0,0,2199,2200,5,217,0,0,2200,2207,5,79,0,0,2201,2202,5,42,0,0,2202,2207, +5,181,0,0,2203,2204,3,86,43,0,2204,2205,7,18,0,0,2205,2207,1,0,0,0,2206, +2197,1,0,0,0,2206,2199,1,0,0,0,2206,2201,1,0,0,0,2206,2203,1,0,0,0,2207, +147,1,0,0,0,2208,2209,3,172,86,0,2209,2210,5,238,0,0,2210,2211,3,86,43,0, +2211,149,1,0,0,0,2212,2213,5,81,0,0,2213,2217,7,19,0,0,2214,2215,5,215,0, +0,2215,2217,7,20,0,0,2216,2212,1,0,0,0,2216,2214,1,0,0,0,2217,151,1,0,0, +0,2218,2219,5,108,0,0,2219,2220,5,117,0,0,2220,2224,3,154,77,0,2221,2222, +5,163,0,0,2222,2224,7,21,0,0,2223,2218,1,0,0,0,2223,2221,1,0,0,0,2224,153, +1,0,0,0,2225,2226,5,163,0,0,2226,2233,5,218,0,0,2227,2228,5,163,0,0,2228, +2233,5,36,0,0,2229,2230,5,168,0,0,2230,2233,5,163,0,0,2231,2233,5,188,0, +0,2232,2225,1,0,0,0,2232,2227,1,0,0,0,2232,2229,1,0,0,0,2232,2231,1,0,0, +0,2233,155,1,0,0,0,2234,2240,3,86,43,0,2235,2236,3,172,86,0,2236,2237,5, +9,0,0,2237,2238,3,86,43,0,2238,2240,1,0,0,0,2239,2234,1,0,0,0,2239,2235, +1,0,0,0,2240,157,1,0,0,0,2241,2246,5,187,0,0,2242,2246,5,53,0,0,2243,2246, +5,101,0,0,2244,2246,3,172,86,0,2245,2241,1,0,0,0,2245,2242,1,0,0,0,2245, +2243,1,0,0,0,2245,2244,1,0,0,0,2246,159,1,0,0,0,2247,2252,3,172,86,0,2248, +2249,5,1,0,0,2249,2251,3,172,86,0,2250,2248,1,0,0,0,2251,2254,1,0,0,0,2252, +2250,1,0,0,0,2252,2253,1,0,0,0,2253,161,1,0,0,0,2254,2252,1,0,0,0,2255,2256, +5,80,0,0,2256,2257,7,22,0,0,2257,2258,3,164,82,0,2258,2259,3,92,46,0,2259, +163,1,0,0,0,2260,2261,5,18,0,0,2261,2264,5,142,0,0,2262,2264,5,21,0,0,2263, +2260,1,0,0,0,2263,2262,1,0,0,0,2264,165,1,0,0,0,2265,2269,5,47,0,0,2266, +2269,5,44,0,0,2267,2269,3,168,84,0,2268,2265,1,0,0,0,2268,2266,1,0,0,0,2268, +2267,1,0,0,0,2269,167,1,0,0,0,2270,2271,5,224,0,0,2271,2276,3,172,86,0,2272, +2273,5,177,0,0,2273,2276,3,172,86,0,2274,2276,3,172,86,0,2275,2270,1,0,0, +0,2275,2272,1,0,0,0,2275,2274,1,0,0,0,2276,169,1,0,0,0,2277,2282,3,172,86, +0,2278,2279,5,4,0,0,2279,2281,3,172,86,0,2280,2278,1,0,0,0,2281,2284,1,0, +0,0,2282,2280,1,0,0,0,2282,2283,1,0,0,0,2283,171,1,0,0,0,2284,2282,1,0,0, +0,2285,2291,5,256,0,0,2286,2291,5,258,0,0,2287,2291,3,194,97,0,2288,2291, +5,259,0,0,2289,2291,5,257,0,0,2290,2285,1,0,0,0,2290,2286,1,0,0,0,2290,2287, +1,0,0,0,2290,2288,1,0,0,0,2290,2289,1,0,0,0,2291,173,1,0,0,0,2292,2296,5, +254,0,0,2293,2296,5,255,0,0,2294,2296,5,253,0,0,2295,2292,1,0,0,0,2295,2293, +1,0,0,0,2295,2294,1,0,0,0,2296,175,1,0,0,0,2297,2300,3,178,89,0,2298,2300, +3,180,90,0,2299,2297,1,0,0,0,2299,2298,1,0,0,0,2300,177,1,0,0,0,2301,2302, +5,37,0,0,2302,2303,3,172,86,0,2303,2304,3,180,90,0,2304,179,1,0,0,0,2305, +2306,3,182,91,0,2306,2308,3,82,41,0,2307,2309,3,184,92,0,2308,2307,1,0,0, +0,2308,2309,1,0,0,0,2309,181,1,0,0,0,2310,2314,5,220,0,0,2311,2312,5,158, +0,0,2312,2314,5,112,0,0,2313,2310,1,0,0,0,2313,2311,1,0,0,0,2314,183,1,0, +0,0,2315,2317,3,186,93,0,2316,2315,1,0,0,0,2317,2320,1,0,0,0,2318,2316,1, +0,0,0,2318,2319,1,0,0,0,2319,185,1,0,0,0,2320,2318,1,0,0,0,2321,2325,3,190, +95,0,2322,2325,3,188,94,0,2323,2325,3,192,96,0,2324,2321,1,0,0,0,2324,2322, +1,0,0,0,2324,2323,1,0,0,0,2325,187,1,0,0,0,2326,2330,5,166,0,0,2327,2328, +5,138,0,0,2328,2330,5,166,0,0,2329,2326,1,0,0,0,2329,2327,1,0,0,0,2330,189, +1,0,0,0,2331,2332,7,23,0,0,2332,191,1,0,0,0,2333,2337,5,66,0,0,2334,2335, +5,138,0,0,2335,2337,5,66,0,0,2336,2333,1,0,0,0,2336,2334,1,0,0,0,2337,193, +1,0,0,0,2338,2339,7,24,0,0,2339,195,1,0,0,0,301,218,223,229,233,247,251, +255,259,267,271,274,281,290,296,300,306,313,322,331,342,349,359,366,374, +382,390,400,407,415,420,431,436,447,458,465,473,480,488,500,506,511,516, +525,536,545,550,553,557,565,572,581,586,589,599,602,609,618,624,629,633, +643,646,656,669,675,680,686,695,701,708,716,721,725,733,739,746,751,755, +765,768,772,775,783,788,813,819,825,827,833,839,841,849,851,870,875,882, +894,896,904,906,924,927,931,935,953,956,972,977,983,986,995,997,1000,1006, +1013,1019,1025,1029,1033,1039,1047,1062,1069,1074,1081,1089,1093,1098,1109, +1124,1127,1132,1134,1143,1145,1153,1159,1162,1164,1176,1183,1187,1191,1195, +1202,1211,1214,1218,1223,1227,1230,1237,1248,1251,1261,1264,1275,1280,1288, +1291,1295,1299,1310,1313,1320,1339,1343,1347,1351,1355,1359,1361,1372,1377, +1386,1392,1396,1398,1406,1413,1426,1432,1448,1455,1459,1467,1469,1482,1490, +1499,1505,1513,1519,1523,1528,1533,1539,1553,1555,1584,1595,1605,1608,1613, +1620,1623,1632,1635,1639,1642,1645,1657,1660,1679,1683,1691,1695,1720,1723, +1732,1738,1744,1750,1760,1769,1791,1794,1797,1807,1809,1816,1818,1824,1832, +1842,1848,1860,1863,1890,1902,1907,1914,1920,1930,1933,1941,1944,1951,1956, +1967,1970,1974,1976,1984,1994,2000,2002,2009,2013,2015,2022,2026,2028,2030, +2039,2050,2054,2064,2071,2077,2105,2119,2124,2133,2138,2149,2152,2161,2164, +2167,2195,2206,2216,2223,2232,2239,2245,2252,2263,2268,2275,2282,2290,2295, +2299,2308,2313,2318,2324,2329,2336]; const atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); @@ -726,112 +886,120 @@ export default class SqlBaseParser extends antlr4.Parser { static literalNames = [ null, "'.'", "'('", "')'", "','", "'?'", "'->'", "'['", "']'", "'=>'", "'ADD'", "'ADMIN'", "'ALL'", "'ALTER'", "'ANALYZE'", "'AND'", "'ANY'", "'ARRAY'", - "'AS'", "'ASC'", "'AT'", "'BERNOULLI'", "'BETWEEN'", - "'BY'", "'CALL'", "'CALLED'", "'CASCADE'", "'CASE'", - "'CAST'", "'CATALOGS'", "'COLUMN'", "'COLUMNS'", - "'COMMENT'", "'COMMIT'", "'COMMITTED'", "'CONSTRAINT'", - "'CREATE'", "'CROSS'", "'CUBE'", "'CURRENT'", - "'CURRENT_DATE'", "'CURRENT_ROLE'", "'CURRENT_TIME'", - "'CURRENT_TIMESTAMP'", "'CURRENT_USER'", "'DATA'", - "'DATE'", "'DAY'", "'DEALLOCATE'", "'DEFINER'", - "'DELETE'", "'DESC'", "'DESCRIBE'", "'DETERMINISTIC'", - "'DISTINCT'", "'DISTRIBUTED'", "'DROP'", "'ELSE'", - "'END'", "'ESCAPE'", "'EXCEPT'", "'EXCLUDING'", - "'EXECUTE'", "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", - "'EXTERNAL'", "'FALSE'", "'FETCH'", "'FILTER'", - "'FIRST'", "'FOLLOWING'", "'FOR'", "'FORMAT'", - "'FROM'", "'FULL'", "'FUNCTION'", "'FUNCTIONS'", - "'GRANT'", "'GRANTED'", "'GRANTS'", "'GRAPHVIZ'", - "'GROUP'", "'GROUPING'", "'GROUPS'", "'HAVING'", - "'HOUR'", "'IF'", "'IGNORE'", "'IN'", "'INCLUDING'", - "'INNER'", "'INPUT'", "'INSERT'", "'INTERSECT'", - "'INTERVAL'", "'INTO'", "'INVOKER'", "'IO'", - "'IS'", "'ISOLATION'", "'JSON'", "'JOIN'", "'LANGUAGE'", - "'LAST'", "'LATERAL'", "'LEFT'", "'LEVEL'", - "'LIKE'", "'LIMIT'", "'LOCALTIME'", "'LOCALTIMESTAMP'", - "'LOGICAL'", "'MAP'", "'MATERIALIZED'", "'MINUTE'", - "'MONTH'", "'NAME'", "'NATURAL'", "'NFC'", "'NFD'", - "'NFKC'", "'NFKD'", "'NO'", "'NONE'", "'NORMALIZE'", - "'NOT'", "'NULL'", "'NULLIF'", "'NULLS'", "'OF'", - "'OFFSET'", "'ON'", "'ONLY'", "'OPTION'", "'OR'", - "'ORDER'", "'ORDINALITY'", "'OUTER'", "'OUTPUT'", - "'OVER'", "'PARTITION'", "'PARTITIONS'", "'POSITION'", - "'PRECEDING'", "'PREPARE'", "'PRIVILEGES'", - "'PROPERTIES'", "'RANGE'", "'READ'", "'RECURSIVE'", - "'REFRESH'", "'RENAME'", "'REPEATABLE'", "'REPLACE'", - "'RESET'", "'RESPECT'", "'RESTRICT'", "'RETURN'", - "'RETURNS'", "'REVOKE'", "'RIGHT'", "'ROLE'", - "'ROLES'", "'ROLLBACK'", "'ROLLUP'", "'ROW'", - "'ROWS'", "'SCHEMA'", "'SCHEMAS'", "'SECOND'", - "'SECURITY'", "'SELECT'", "'SERIALIZABLE'", + "'AS'", "'ASC'", "'AT'", "'BEFORE'", "'BERNOULLI'", + "'BETWEEN'", "'BRANCH'", "'BY'", "'CALL'", "'CALLED'", + "'CASCADE'", "'CASE'", "'CAST'", "'CATALOGS'", + "'COLUMN'", "'COLUMNS'", "'COMMENT'", "'COMMIT'", + "'COMMITTED'", "'CONSTRAINT'", "'CREATE'", "'COPARTITION'", + "'CROSS'", "'CUBE'", "'CURRENT'", "'CURRENT_DATE'", + "'CURRENT_ROLE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", + "'CURRENT_USER'", "'DATA'", "'DATE'", "'DAY'", + "'DEALLOCATE'", "'DEFINER'", "'DELETE'", "'DESC'", + "'DESCRIBE'", "'DESCRIPTOR'", "'DETERMINISTIC'", + "'DISABLED'", "'DISTINCT'", "'DISTRIBUTED'", + "'DROP'", "'ELSE'", "'EMPTY'", "'ENABLED'", + "'END'", "'ENFORCED'", "'ESCAPE'", "'EXCEPT'", + "'EXCLUDING'", "'EXECUTE'", "'EXISTS'", "'EXPLAIN'", + "'EXTRACT'", "'EXTERNAL'", "'FALSE'", "'FETCH'", + "'FILTER'", "'FIRST'", "'FOLLOWING'", "'FOR'", + "'FORMAT'", "'FROM'", "'FULL'", "'FUNCTION'", + "'FUNCTIONS'", "'GRANT'", "'GRANTED'", "'GRANTS'", + "'GRAPHVIZ'", "'GROUP'", "'GROUPING'", "'GROUPS'", + "'HAVING'", "'HOUR'", "'IF'", "'IGNORE'", "'IN'", + "'INCLUDING'", "'INNER'", "'INPUT'", "'INSERT'", + "'INTERSECT'", "'INTERVAL'", "'INTO'", "'INVOKER'", + "'IO'", "'IS'", "'ISOLATION'", "'JSON'", "'JOIN'", + "'KEEP'", "'KEY'", "'LANGUAGE'", "'LAST'", "'LATERAL'", + "'LEFT'", "'LEVEL'", "'LIKE'", "'LIMIT'", "'LOCALTIME'", + "'LOCALTIMESTAMP'", "'LOGICAL'", "'MAP'", "'MATCHED'", + "'MATERIALIZED'", "'MERGE'", "'MINUTE'", "'MONTH'", + "'NAME'", "'NATURAL'", "'NFC'", "'NFD'", "'NFKC'", + "'NFKD'", "'NO'", "'NONE'", "'NORMALIZE'", "'NOT'", + "'NULL'", "'NULLIF'", "'NULLS'", "'OF'", "'OFFSET'", + "'ON'", "'ONLY'", "'OPTION'", "'OR'", "'ORDER'", + "'ORDINALITY'", "'OUTER'", "'OUTPUT'", "'OVER'", + "'PARTITION'", "'PARTITIONS'", "'POSITION'", + "'PRECEDING'", "'PREPARE'", "'PRIMARY'", "'PRIVILEGES'", + "'PROPERTIES'", "'PRUNE'", "'RANGE'", "'READ'", + "'RECURSIVE'", "'REFRESH'", "'RELY'", "'RENAME'", + "'REPEATABLE'", "'REPLACE'", "'RESET'", "'RESPECT'", + "'RESTRICT'", "'RETURN'", "'RETURNS'", "'REVOKE'", + "'RIGHT'", "'ROLE'", "'ROLES'", "'ROLLBACK'", + "'ROLLUP'", "'ROW'", "'ROWS'", "'SCHEMA'", "'SCHEMAS'", + "'SECOND'", "'SECURITY'", "'SELECT'", "'SERIALIZABLE'", "'SESSION'", "'SET'", "'SETS'", "'SHOW'", "'SOME'", "'SQL'", "'START'", "'STATS'", "'SUBSTRING'", "'SYSTEM'", "'SYSTEM_TIME'", "'SYSTEM_VERSION'", - "'TABLE'", "'TABLES'", "'TABLESAMPLE'", "'TEMPORARY'", - "'TEXT'", "'THEN'", "'TIME'", "'TIMESTAMP'", - "'TO'", "'TRANSACTION'", "'TRUE'", "'TRUNCATE'", - "'TRY_CAST'", "'TYPE'", "'UESCAPE'", "'UNBOUNDED'", - "'UNCOMMITTED'", "'UNION'", "'UNNEST'", "'UPDATE'", - "'USE'", "'USER'", "'USING'", "'VALIDATE'", - "'VALUES'", "'VERBOSE'", "'VERSION'", "'VIEW'", - "'WHEN'", "'WHERE'", "'WITH'", "'WORK'", "'WRITE'", - "'YEAR'", "'ZONE'", "'='", null, "'<'", "'<='", - "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", - "'||'" ]; + "'TABLE'", "'TABLES'", "'TABLESAMPLE'", "'TAG'", + "'TEMPORARY'", "'TEXT'", "'THEN'", "'TIME'", + "'TIMESTAMP'", "'TO'", "'TRANSACTION'", "'TRUE'", + "'TRUNCATE'", "'TRY_CAST'", "'TYPE'", "'UESCAPE'", + "'UNBOUNDED'", "'UNCOMMITTED'", "'UNION'", "'UNIQUE'", + "'UNNEST'", "'UPDATE'", "'USE'", "'USER'", "'USING'", + "'VALIDATE'", "'VALUES'", "'VERBOSE'", "'VERSION'", + "'VIEW'", "'WHEN'", "'WHERE'", "'WITH'", "'WORK'", + "'WRITE'", "'YEAR'", "'ZONE'", "'='", null, + "'<'", "'<='", "'>'", "'>='", "'+'", "'-'", + "'*'", "'/'", "'%'", "'||'" ]; static symbolicNames = [ null, null, null, null, null, null, null, null, null, null, "ADD", "ADMIN", "ALL", "ALTER", "ANALYZE", "AND", "ANY", "ARRAY", "AS", "ASC", - "AT", "BERNOULLI", "BETWEEN", "BY", "CALL", - "CALLED", "CASCADE", "CASE", "CAST", "CATALOGS", - "COLUMN", "COLUMNS", "COMMENT", "COMMIT", "COMMITTED", - "CONSTRAINT", "CREATE", "CROSS", "CUBE", "CURRENT", + "AT", "BEFORE", "BERNOULLI", "BETWEEN", "BRANCH", + "BY", "CALL", "CALLED", "CASCADE", "CASE", + "CAST", "CATALOGS", "COLUMN", "COLUMNS", "COMMENT", + "COMMIT", "COMMITTED", "CONSTRAINT", "CREATE", + "COPARTITION", "CROSS", "CUBE", "CURRENT", "CURRENT_DATE", "CURRENT_ROLE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_USER", "DATA", "DATE", "DAY", "DEALLOCATE", "DEFINER", "DELETE", - "DESC", "DESCRIBE", "DETERMINISTIC", "DISTINCT", - "DISTRIBUTED", "DROP", "ELSE", "END", "ESCAPE", - "EXCEPT", "EXCLUDING", "EXECUTE", "EXISTS", - "EXPLAIN", "EXTRACT", "EXTERNAL", "FALSE", - "FETCH", "FILTER", "FIRST", "FOLLOWING", "FOR", - "FORMAT", "FROM", "FULL", "FUNCTION", "FUNCTIONS", - "GRANT", "GRANTED", "GRANTS", "GRAPHVIZ", "GROUP", - "GROUPING", "GROUPS", "HAVING", "HOUR", "IF", - "IGNORE", "IN", "INCLUDING", "INNER", "INPUT", - "INSERT", "INTERSECT", "INTERVAL", "INTO", - "INVOKER", "IO", "IS", "ISOLATION", "JSON", - "JOIN", "LANGUAGE", "LAST", "LATERAL", "LEFT", - "LEVEL", "LIKE", "LIMIT", "LOCALTIME", "LOCALTIMESTAMP", - "LOGICAL", "MAP", "MATERIALIZED", "MINUTE", - "MONTH", "NAME", "NATURAL", "NFC", "NFD", "NFKC", - "NFKD", "NO", "NONE", "NORMALIZE", "NOT", "NULL", - "NULLIF", "NULLS", "OF", "OFFSET", "ON", "ONLY", - "OPTION", "OR", "ORDER", "ORDINALITY", "OUTER", - "OUTPUT", "OVER", "PARTITION", "PARTITIONS", - "POSITION", "PRECEDING", "PREPARE", "PRIVILEGES", - "PROPERTIES", "RANGE", "READ", "RECURSIVE", - "REFRESH", "RENAME", "REPEATABLE", "REPLACE", - "RESET", "RESPECT", "RESTRICT", "RETURN", "RETURNS", - "REVOKE", "RIGHT", "ROLE", "ROLES", "ROLLBACK", - "ROLLUP", "ROW", "ROWS", "SCHEMA", "SCHEMAS", - "SECOND", "SECURITY", "SELECT", "SERIALIZABLE", - "SESSION", "SET", "SETS", "SHOW", "SOME", "SQL", - "START", "STATS", "SUBSTRING", "SYSTEM", "SYSTEM_TIME", + "DESC", "DESCRIBE", "DESCRIPTOR", "DETERMINISTIC", + "DISABLED", "DISTINCT", "DISTRIBUTED", "DROP", + "ELSE", "EMPTY", "ENABLED", "END", "ENFORCED", + "ESCAPE", "EXCEPT", "EXCLUDING", "EXECUTE", + "EXISTS", "EXPLAIN", "EXTRACT", "EXTERNAL", + "FALSE", "FETCH", "FILTER", "FIRST", "FOLLOWING", + "FOR", "FORMAT", "FROM", "FULL", "FUNCTION", + "FUNCTIONS", "GRANT", "GRANTED", "GRANTS", + "GRAPHVIZ", "GROUP", "GROUPING", "GROUPS", + "HAVING", "HOUR", "IF", "IGNORE", "IN", "INCLUDING", + "INNER", "INPUT", "INSERT", "INTERSECT", "INTERVAL", + "INTO", "INVOKER", "IO", "IS", "ISOLATION", + "JSON", "JOIN", "KEEP", "KEY", "LANGUAGE", + "LAST", "LATERAL", "LEFT", "LEVEL", "LIKE", + "LIMIT", "LOCALTIME", "LOCALTIMESTAMP", "LOGICAL", + "MAP", "MATCHED", "MATERIALIZED", "MERGE", + "MINUTE", "MONTH", "NAME", "NATURAL", "NFC", + "NFD", "NFKC", "NFKD", "NO", "NONE", "NORMALIZE", + "NOT", "NULL", "NULLIF", "NULLS", "OF", "OFFSET", + "ON", "ONLY", "OPTION", "OR", "ORDER", "ORDINALITY", + "OUTER", "OUTPUT", "OVER", "PARTITION", "PARTITIONS", + "POSITION", "PRECEDING", "PREPARE", "PRIMARY", + "PRIVILEGES", "PROPERTIES", "PRUNE", "RANGE", + "READ", "RECURSIVE", "REFRESH", "RELY", "RENAME", + "REPEATABLE", "REPLACE", "RESET", "RESPECT", + "RESTRICT", "RETURN", "RETURNS", "REVOKE", + "RIGHT", "ROLE", "ROLES", "ROLLBACK", "ROLLUP", + "ROW", "ROWS", "SCHEMA", "SCHEMAS", "SECOND", + "SECURITY", "SELECT", "SERIALIZABLE", "SESSION", + "SET", "SETS", "SHOW", "SOME", "SQL", "START", + "STATS", "SUBSTRING", "SYSTEM", "SYSTEM_TIME", "SYSTEM_VERSION", "TABLE", "TABLES", "TABLESAMPLE", - "TEMPORARY", "TEXT", "THEN", "TIME", "TIMESTAMP", - "TO", "TRANSACTION", "TRUE", "TRUNCATE", "TRY_CAST", - "TYPE", "UESCAPE", "UNBOUNDED", "UNCOMMITTED", - "UNION", "UNNEST", "UPDATE", "USE", "USER", - "USING", "VALIDATE", "VALUES", "VERBOSE", "VERSION", - "VIEW", "WHEN", "WHERE", "WITH", "WORK", "WRITE", - "YEAR", "ZONE", "EQ", "NEQ", "LT", "LTE", "GT", - "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", - "PERCENT", "CONCAT", "STRING", "UNICODE_STRING", - "BINARY_LITERAL", "INTEGER_VALUE", "DECIMAL_VALUE", - "DOUBLE_VALUE", "IDENTIFIER", "DIGIT_IDENTIFIER", - "QUOTED_IDENTIFIER", "BACKQUOTED_IDENTIFIER", - "TIME_WITH_TIME_ZONE", "TIMESTAMP_WITH_TIME_ZONE", - "DOUBLE_PRECISION", "SIMPLE_COMMENT", "BRACKETED_COMMENT", - "WS", "UNRECOGNIZED", "DELIMITER" ]; + "TAG", "TEMPORARY", "TEXT", "THEN", "TIME", + "TIMESTAMP", "TO", "TRANSACTION", "TRUE", "TRUNCATE", + "TRY_CAST", "TYPE", "UESCAPE", "UNBOUNDED", + "UNCOMMITTED", "UNION", "UNIQUE", "UNNEST", + "UPDATE", "USE", "USER", "USING", "VALIDATE", + "VALUES", "VERBOSE", "VERSION", "VIEW", "WHEN", + "WHERE", "WITH", "WORK", "WRITE", "YEAR", "ZONE", + "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", + "MINUS", "ASTERISK", "SLASH", "PERCENT", "CONCAT", + "STRING", "UNICODE_STRING", "BINARY_LITERAL", + "INTEGER_VALUE", "DECIMAL_VALUE", "DOUBLE_VALUE", + "IDENTIFIER", "DIGIT_IDENTIFIER", "QUOTED_IDENTIFIER", + "BACKQUOTED_IDENTIFIER", "TIME_WITH_TIME_ZONE", + "TIMESTAMP_WITH_TIME_ZONE", "DOUBLE_PRECISION", + "SIMPLE_COMMENT", "BRACKETED_COMMENT", "WS", + "UNRECOGNIZED", "DELIMITER" ]; static ruleNames = [ "singleStatement", "standaloneExpression", "standaloneRoutineBody", "statement", "query", "with", "tableElement", "columnDefinition", "likeClause", "properties", "property", "sqlParameterDeclaration", @@ -839,8 +1007,8 @@ export default class SqlBaseParser extends antlr4.Parser { "alterRoutineCharacteristics", "alterRoutineCharacteristic", "routineBody", "returnStatement", "externalBodyReference", "language", "determinism", "nullCallClause", "externalRoutineName", - "queryNoWith", "queryTerm", "queryPrimary", "sortItem", - "querySpecification", "groupBy", "groupingElement", + "viewSecurity", "queryNoWith", "queryTerm", "queryPrimary", + "sortItem", "querySpecification", "groupBy", "groupingElement", "groupingSet", "namedQuery", "setQuantifier", "selectItem", "relation", "joinType", "joinCriteria", "sampledRelation", "sampleType", "aliasedRelation", "columnAliases", @@ -849,12 +1017,19 @@ export default class SqlBaseParser extends antlr4.Parser { "string", "nullTreatment", "timeZoneSpecifier", "comparisonOperator", "comparisonQuantifier", "booleanValue", "interval", "intervalField", "normalForm", "types", - "type", "typeParameter", "baseType", "whenClause", - "filter", "over", "windowFrame", "frameBound", - "updateAssignment", "explainOption", "transactionMode", - "levelOfIsolation", "callArgument", "privilege", - "qualifiedName", "tableVersionExpression", "grantor", - "principal", "roles", "identifier", "number", "nonReserved" ]; + "type", "tableFunctionCall", "tableFunctionArgument", + "tableArgument", "tableArgumentRelation", "descriptorArgument", + "descriptorField", "copartitionTables", "typeParameter", + "baseType", "whenClause", "filter", "mergeCase", + "over", "windowFrame", "frameBound", "updateAssignment", + "explainOption", "transactionMode", "levelOfIsolation", + "callArgument", "privilege", "qualifiedName", "tableVersionExpression", + "tableVersionState", "grantor", "principal", "roles", + "identifier", "number", "constraintSpecification", + "namedConstraintSpecification", "unnamedConstraintSpecification", + "constraintType", "constraintQualifiers", "constraintQualifier", + "constraintRely", "constraintEnabled", "constraintEnforced", + "nonReserved" ]; constructor(input) { super(input); @@ -866,17 +1041,17 @@ export default class SqlBaseParser extends antlr4.Parser { sempred(localctx, ruleIndex, predIndex) { switch(ruleIndex) { - case 24: + case 25: return this.queryTerm_sempred(localctx, predIndex); - case 34: + case 35: return this.relation_sempred(localctx, predIndex); - case 43: + case 44: return this.booleanExpression_sempred(localctx, predIndex); - case 45: - return this.valueExpression_sempred(localctx, predIndex); case 46: + return this.valueExpression_sempred(localctx, predIndex); + case 47: return this.primaryExpression_sempred(localctx, predIndex); - case 57: + case 58: return this.type_sempred(localctx, predIndex); default: throw "No predicate with index:" + ruleIndex; @@ -957,9 +1132,9 @@ export default class SqlBaseParser extends antlr4.Parser { this.enterRule(localctx, 0, SqlBaseParser.RULE_singleStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 158; + this.state = 196; this.statement(); - this.state = 159; + this.state = 197; this.match(SqlBaseParser.EOF); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -982,9 +1157,9 @@ export default class SqlBaseParser extends antlr4.Parser { this.enterRule(localctx, 2, SqlBaseParser.RULE_standaloneExpression); try { this.enterOuterAlt(localctx, 1); - this.state = 161; + this.state = 199; this.expression(); - this.state = 162; + this.state = 200; this.match(SqlBaseParser.EOF); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1007,9 +1182,9 @@ export default class SqlBaseParser extends antlr4.Parser { this.enterRule(localctx, 4, SqlBaseParser.RULE_standaloneRoutineBody); try { this.enterOuterAlt(localctx, 1); - this.state = 164; + this.state = 202; this.routineBody(); - this.state = 165; + this.state = 203; this.match(SqlBaseParser.EOF); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1032,67 +1207,67 @@ export default class SqlBaseParser extends antlr4.Parser { this.enterRule(localctx, 6, SqlBaseParser.RULE_statement); var _la = 0; try { - this.state = 825; + this.state = 997; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,93,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,111,this._ctx); switch(la_) { case 1: localctx = new StatementDefaultContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 167; + this.state = 205; this.query(); break; case 2: localctx = new UseContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 168; + this.state = 206; this.match(SqlBaseParser.USE); - this.state = 169; + this.state = 207; localctx.schema = this.identifier(); break; case 3: localctx = new UseContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 170; + this.state = 208; this.match(SqlBaseParser.USE); - this.state = 171; + this.state = 209; localctx.catalog = this.identifier(); - this.state = 172; + this.state = 210; this.match(SqlBaseParser.T__0); - this.state = 173; + this.state = 211; localctx.schema = this.identifier(); break; case 4: localctx = new CreateSchemaContext(this, localctx); this.enterOuterAlt(localctx, 4); - this.state = 175; + this.state = 213; this.match(SqlBaseParser.CREATE); - this.state = 176; + this.state = 214; this.match(SqlBaseParser.SCHEMA); - this.state = 180; + this.state = 218; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,0,this._ctx); if(la_===1) { - this.state = 177; + this.state = 215; this.match(SqlBaseParser.IF); - this.state = 178; + this.state = 216; this.match(SqlBaseParser.NOT); - this.state = 179; + this.state = 217; this.match(SqlBaseParser.EXISTS); } - this.state = 182; + this.state = 220; this.qualifiedName(); - this.state = 185; + this.state = 223; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===216) { - this.state = 183; + if(_la===233) { + this.state = 221; this.match(SqlBaseParser.WITH); - this.state = 184; + this.state = 222; this.properties(); } @@ -1101,29 +1276,29 @@ export default class SqlBaseParser extends antlr4.Parser { case 5: localctx = new DropSchemaContext(this, localctx); this.enterOuterAlt(localctx, 5); - this.state = 187; + this.state = 225; this.match(SqlBaseParser.DROP); - this.state = 188; + this.state = 226; this.match(SqlBaseParser.SCHEMA); - this.state = 191; + this.state = 229; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,2,this._ctx); if(la_===1) { - this.state = 189; + this.state = 227; this.match(SqlBaseParser.IF); - this.state = 190; + this.state = 228; this.match(SqlBaseParser.EXISTS); } - this.state = 193; + this.state = 231; this.qualifiedName(); - this.state = 195; + this.state = 233; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===26 || _la===157) { - this.state = 194; + if(_la===28 || _la===172) { + this.state = 232; _la = this._input.LA(1); - if(!(_la===26 || _la===157)) { + if(!(_la===28 || _la===172)) { this._errHandler.recoverInline(this); } else { @@ -1137,105 +1312,105 @@ export default class SqlBaseParser extends antlr4.Parser { case 6: localctx = new RenameSchemaContext(this, localctx); this.enterOuterAlt(localctx, 6); - this.state = 197; + this.state = 235; this.match(SqlBaseParser.ALTER); - this.state = 198; + this.state = 236; this.match(SqlBaseParser.SCHEMA); - this.state = 199; + this.state = 237; this.qualifiedName(); - this.state = 200; + this.state = 238; this.match(SqlBaseParser.RENAME); - this.state = 201; + this.state = 239; this.match(SqlBaseParser.TO); - this.state = 202; + this.state = 240; this.identifier(); break; case 7: localctx = new CreateTableAsSelectContext(this, localctx); this.enterOuterAlt(localctx, 7); - this.state = 204; + this.state = 242; this.match(SqlBaseParser.CREATE); - this.state = 205; + this.state = 243; this.match(SqlBaseParser.TABLE); - this.state = 209; + this.state = 247; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,4,this._ctx); if(la_===1) { - this.state = 206; + this.state = 244; this.match(SqlBaseParser.IF); - this.state = 207; + this.state = 245; this.match(SqlBaseParser.NOT); - this.state = 208; + this.state = 246; this.match(SqlBaseParser.EXISTS); } - this.state = 211; + this.state = 249; this.qualifiedName(); - this.state = 213; + this.state = 251; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===2) { - this.state = 212; + this.state = 250; this.columnAliases(); } - this.state = 217; + this.state = 255; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===32) { - this.state = 215; + if(_la===34) { + this.state = 253; this.match(SqlBaseParser.COMMENT); - this.state = 216; + this.state = 254; this.string(); } - this.state = 221; + this.state = 259; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===216) { - this.state = 219; + if(_la===233) { + this.state = 257; this.match(SqlBaseParser.WITH); - this.state = 220; + this.state = 258; this.properties(); } - this.state = 223; + this.state = 261; this.match(SqlBaseParser.AS); - this.state = 229; + this.state = 267; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,8,this._ctx); switch(la_) { case 1: - this.state = 224; + this.state = 262; this.query(); break; case 2: - this.state = 225; + this.state = 263; this.match(SqlBaseParser.T__1); - this.state = 226; + this.state = 264; this.query(); - this.state = 227; + this.state = 265; this.match(SqlBaseParser.T__2); break; } - this.state = 236; + this.state = 274; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===216) { - this.state = 231; + if(_la===233) { + this.state = 269; this.match(SqlBaseParser.WITH); - this.state = 233; + this.state = 271; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===123) { - this.state = 232; + if(_la===135) { + this.state = 270; this.match(SqlBaseParser.NO); } - this.state = 235; + this.state = 273; this.match(SqlBaseParser.DATA); } @@ -1244,59 +1419,59 @@ export default class SqlBaseParser extends antlr4.Parser { case 8: localctx = new CreateTableContext(this, localctx); this.enterOuterAlt(localctx, 8); - this.state = 238; + this.state = 276; this.match(SqlBaseParser.CREATE); - this.state = 239; + this.state = 277; this.match(SqlBaseParser.TABLE); - this.state = 243; + this.state = 281; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,11,this._ctx); if(la_===1) { - this.state = 240; + this.state = 278; this.match(SqlBaseParser.IF); - this.state = 241; + this.state = 279; this.match(SqlBaseParser.NOT); - this.state = 242; + this.state = 280; this.match(SqlBaseParser.EXISTS); } - this.state = 245; + this.state = 283; this.qualifiedName(); - this.state = 246; + this.state = 284; this.match(SqlBaseParser.T__1); - this.state = 247; + this.state = 285; this.tableElement(); - this.state = 252; + this.state = 290; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 248; + this.state = 286; this.match(SqlBaseParser.T__3); - this.state = 249; + this.state = 287; this.tableElement(); - this.state = 254; + this.state = 292; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 255; + this.state = 293; this.match(SqlBaseParser.T__2); - this.state = 258; + this.state = 296; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===32) { - this.state = 256; + if(_la===34) { + this.state = 294; this.match(SqlBaseParser.COMMENT); - this.state = 257; + this.state = 295; this.string(); } - this.state = 262; + this.state = 300; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===216) { - this.state = 260; + if(_la===233) { + this.state = 298; this.match(SqlBaseParser.WITH); - this.state = 261; + this.state = 299; this.properties(); } @@ -1305,61 +1480,61 @@ export default class SqlBaseParser extends antlr4.Parser { case 9: localctx = new DropTableContext(this, localctx); this.enterOuterAlt(localctx, 9); - this.state = 264; + this.state = 302; this.match(SqlBaseParser.DROP); - this.state = 265; + this.state = 303; this.match(SqlBaseParser.TABLE); - this.state = 268; + this.state = 306; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,15,this._ctx); if(la_===1) { - this.state = 266; + this.state = 304; this.match(SqlBaseParser.IF); - this.state = 267; + this.state = 305; this.match(SqlBaseParser.EXISTS); } - this.state = 270; + this.state = 308; this.qualifiedName(); break; case 10: localctx = new InsertIntoContext(this, localctx); this.enterOuterAlt(localctx, 10); - this.state = 271; + this.state = 309; this.match(SqlBaseParser.INSERT); - this.state = 272; + this.state = 310; this.match(SqlBaseParser.INTO); - this.state = 273; + this.state = 311; this.qualifiedName(); - this.state = 275; + this.state = 313; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,16,this._ctx); if(la_===1) { - this.state = 274; + this.state = 312; this.columnAliases(); } - this.state = 277; + this.state = 315; this.query(); break; case 11: localctx = new DeleteContext(this, localctx); this.enterOuterAlt(localctx, 11); - this.state = 279; + this.state = 317; this.match(SqlBaseParser.DELETE); - this.state = 280; + this.state = 318; this.match(SqlBaseParser.FROM); - this.state = 281; + this.state = 319; this.qualifiedName(); - this.state = 284; + this.state = 322; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===215) { - this.state = 282; + if(_la===232) { + this.state = 320; this.match(SqlBaseParser.WHERE); - this.state = 283; + this.state = 321; this.booleanExpression(0); } @@ -1368,2059 +1543,1981 @@ export default class SqlBaseParser extends antlr4.Parser { case 12: localctx = new TruncateTableContext(this, localctx); this.enterOuterAlt(localctx, 12); - this.state = 286; + this.state = 324; this.match(SqlBaseParser.TRUNCATE); - this.state = 287; + this.state = 325; this.match(SqlBaseParser.TABLE); - this.state = 288; + this.state = 326; this.qualifiedName(); break; case 13: localctx = new RenameTableContext(this, localctx); this.enterOuterAlt(localctx, 13); - this.state = 289; + this.state = 327; this.match(SqlBaseParser.ALTER); - this.state = 290; + this.state = 328; this.match(SqlBaseParser.TABLE); - this.state = 293; + this.state = 331; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,18,this._ctx); if(la_===1) { - this.state = 291; + this.state = 329; this.match(SqlBaseParser.IF); - this.state = 292; + this.state = 330; this.match(SqlBaseParser.EXISTS); } - this.state = 295; + this.state = 333; localctx.from = this.qualifiedName(); - this.state = 296; + this.state = 334; this.match(SqlBaseParser.RENAME); - this.state = 297; + this.state = 335; this.match(SqlBaseParser.TO); - this.state = 298; + this.state = 336; localctx.to = this.qualifiedName(); break; case 14: localctx = new RenameColumnContext(this, localctx); this.enterOuterAlt(localctx, 14); - this.state = 300; + this.state = 338; this.match(SqlBaseParser.ALTER); - this.state = 301; + this.state = 339; this.match(SqlBaseParser.TABLE); - this.state = 304; + this.state = 342; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,19,this._ctx); if(la_===1) { - this.state = 302; + this.state = 340; this.match(SqlBaseParser.IF); - this.state = 303; + this.state = 341; this.match(SqlBaseParser.EXISTS); } - this.state = 306; + this.state = 344; localctx.tableName = this.qualifiedName(); - this.state = 307; + this.state = 345; this.match(SqlBaseParser.RENAME); - this.state = 308; + this.state = 346; this.match(SqlBaseParser.COLUMN); - this.state = 311; + this.state = 349; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,20,this._ctx); if(la_===1) { - this.state = 309; + this.state = 347; this.match(SqlBaseParser.IF); - this.state = 310; + this.state = 348; this.match(SqlBaseParser.EXISTS); } - this.state = 313; + this.state = 351; localctx.from = this.identifier(); - this.state = 314; + this.state = 352; this.match(SqlBaseParser.TO); - this.state = 315; + this.state = 353; localctx.to = this.identifier(); break; case 15: localctx = new DropColumnContext(this, localctx); this.enterOuterAlt(localctx, 15); - this.state = 317; + this.state = 355; this.match(SqlBaseParser.ALTER); - this.state = 318; + this.state = 356; this.match(SqlBaseParser.TABLE); - this.state = 321; + this.state = 359; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,21,this._ctx); if(la_===1) { - this.state = 319; + this.state = 357; this.match(SqlBaseParser.IF); - this.state = 320; + this.state = 358; this.match(SqlBaseParser.EXISTS); } - this.state = 323; + this.state = 361; localctx.tableName = this.qualifiedName(); - this.state = 324; + this.state = 362; this.match(SqlBaseParser.DROP); - this.state = 325; + this.state = 363; this.match(SqlBaseParser.COLUMN); - this.state = 328; + this.state = 366; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,22,this._ctx); if(la_===1) { - this.state = 326; + this.state = 364; this.match(SqlBaseParser.IF); - this.state = 327; + this.state = 365; this.match(SqlBaseParser.EXISTS); } - this.state = 330; + this.state = 368; localctx.column = this.qualifiedName(); break; case 16: localctx = new AddColumnContext(this, localctx); this.enterOuterAlt(localctx, 16); - this.state = 332; + this.state = 370; this.match(SqlBaseParser.ALTER); - this.state = 333; + this.state = 371; this.match(SqlBaseParser.TABLE); - this.state = 336; + this.state = 374; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,23,this._ctx); if(la_===1) { - this.state = 334; + this.state = 372; this.match(SqlBaseParser.IF); - this.state = 335; + this.state = 373; this.match(SqlBaseParser.EXISTS); } - this.state = 338; + this.state = 376; localctx.tableName = this.qualifiedName(); - this.state = 339; + this.state = 377; this.match(SqlBaseParser.ADD); - this.state = 340; + this.state = 378; this.match(SqlBaseParser.COLUMN); - this.state = 344; + this.state = 382; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,24,this._ctx); if(la_===1) { - this.state = 341; + this.state = 379; this.match(SqlBaseParser.IF); - this.state = 342; + this.state = 380; this.match(SqlBaseParser.NOT); - this.state = 343; + this.state = 381; this.match(SqlBaseParser.EXISTS); } - this.state = 346; + this.state = 384; localctx.column = this.columnDefinition(); break; case 17: - localctx = new AnalyzeContext(this, localctx); + localctx = new AddConstraintContext(this, localctx); this.enterOuterAlt(localctx, 17); - this.state = 348; - this.match(SqlBaseParser.ANALYZE); - this.state = 349; - this.qualifiedName(); - this.state = 352; + this.state = 386; + this.match(SqlBaseParser.ALTER); + this.state = 387; + this.match(SqlBaseParser.TABLE); + this.state = 390; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===216) { - this.state = 350; - this.match(SqlBaseParser.WITH); - this.state = 351; - this.properties(); - } + var la_ = this._interp.adaptivePredict(this._input,25,this._ctx); + if(la_===1) { + this.state = 388; + this.match(SqlBaseParser.IF); + this.state = 389; + this.match(SqlBaseParser.EXISTS); + } + this.state = 392; + localctx.tableName = this.qualifiedName(); + this.state = 393; + this.match(SqlBaseParser.ADD); + this.state = 394; + this.constraintSpecification(); break; case 18: - localctx = new CreateTypeContext(this, localctx); + localctx = new DropConstraintContext(this, localctx); this.enterOuterAlt(localctx, 18); - this.state = 354; - this.match(SqlBaseParser.CREATE); - this.state = 355; - this.match(SqlBaseParser.TYPE); - this.state = 356; - this.qualifiedName(); - this.state = 357; - this.match(SqlBaseParser.AS); - this.state = 370; + this.state = 396; + this.match(SqlBaseParser.ALTER); + this.state = 397; + this.match(SqlBaseParser.TABLE); + this.state = 400; this._errHandler.sync(this); - switch(this._input.LA(1)) { - case 2: - this.state = 358; - this.match(SqlBaseParser.T__1); - this.state = 359; - this.sqlParameterDeclaration(); - this.state = 364; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===4) { - this.state = 360; - this.match(SqlBaseParser.T__3); - this.state = 361; - this.sqlParameterDeclaration(); - this.state = 366; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 367; - this.match(SqlBaseParser.T__2); - break; - case 10: - case 11: - case 12: - case 14: - case 16: - case 17: - case 19: - case 20: - case 21: - case 24: - case 25: - case 26: - case 29: - case 30: - case 31: - case 32: - case 33: - case 34: - case 39: - case 41: - case 45: - case 46: - case 47: - case 49: - case 51: - case 53: - case 55: - case 61: - case 64: - case 66: - case 68: - case 69: - case 70: - case 71: - case 73: - case 76: - case 77: - case 78: - case 79: - case 80: - case 81: - case 84: - case 86: - case 87: - case 88: - case 90: - case 92: - case 95: - case 97: - case 98: - case 100: - case 101: - case 103: - case 104: - case 105: - case 107: - case 109: - case 112: - case 113: - case 114: - case 115: - case 116: - case 117: - case 119: - case 120: - case 121: - case 122: - case 123: - case 124: - case 128: - case 129: - case 130: - case 131: - case 133: - case 134: - case 137: - case 139: - case 140: - case 141: - case 142: - case 143: - case 144: - case 146: - case 147: - case 148: - case 149: - case 151: - case 152: - case 153: - case 154: - case 155: - case 156: - case 157: - case 158: - case 159: - case 160: - case 162: - case 163: - case 164: - case 166: - case 167: - case 168: - case 169: - case 170: - case 171: - case 173: - case 174: - case 175: - case 176: - case 177: - case 178: - case 179: - case 180: - case 181: - case 182: - case 183: - case 184: - case 185: - case 187: - case 188: - case 189: - case 190: - case 192: - case 193: - case 194: - case 195: - case 197: - case 198: - case 199: - case 201: - case 202: - case 205: - case 206: - case 207: - case 209: - case 211: - case 212: - case 213: - case 217: - case 218: - case 219: - case 220: - case 239: - case 240: - case 241: - case 242: - case 243: - case 244: - case 245: - this.state = 369; - this.type(0); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - break; - - case 19: - localctx = new CreateViewContext(this, localctx); - this.enterOuterAlt(localctx, 19); - this.state = 372; - this.match(SqlBaseParser.CREATE); - this.state = 375; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===135) { - this.state = 373; - this.match(SqlBaseParser.OR); - this.state = 374; - this.match(SqlBaseParser.REPLACE); - } - - this.state = 377; - this.match(SqlBaseParser.VIEW); - this.state = 378; - this.qualifiedName(); - this.state = 381; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===171) { - this.state = 379; - this.match(SqlBaseParser.SECURITY); - this.state = 380; - _la = this._input.LA(1); - if(!(_la===49 || _la===97)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } - - this.state = 383; - this.match(SqlBaseParser.AS); - this.state = 384; - this.query(); - break; - - case 20: - localctx = new DropViewContext(this, localctx); - this.enterOuterAlt(localctx, 20); - this.state = 386; - this.match(SqlBaseParser.DROP); - this.state = 387; - this.match(SqlBaseParser.VIEW); - this.state = 390; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,30,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,26,this._ctx); if(la_===1) { - this.state = 388; + this.state = 398; this.match(SqlBaseParser.IF); - this.state = 389; + this.state = 399; this.match(SqlBaseParser.EXISTS); } - this.state = 392; - this.qualifiedName(); - break; - - case 21: - localctx = new CreateMaterializedViewContext(this, localctx); - this.enterOuterAlt(localctx, 21); - this.state = 393; - this.match(SqlBaseParser.CREATE); - this.state = 394; - this.match(SqlBaseParser.MATERIALIZED); - this.state = 395; - this.match(SqlBaseParser.VIEW); - this.state = 399; + this.state = 402; + localctx.tableName = this.qualifiedName(); + this.state = 403; + this.match(SqlBaseParser.DROP); + this.state = 404; + this.match(SqlBaseParser.CONSTRAINT); + this.state = 407; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,31,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,27,this._ctx); if(la_===1) { - this.state = 396; + this.state = 405; this.match(SqlBaseParser.IF); - this.state = 397; - this.match(SqlBaseParser.NOT); - this.state = 398; + this.state = 406; this.match(SqlBaseParser.EXISTS); } - this.state = 401; - this.qualifiedName(); - this.state = 404; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===32) { - this.state = 402; - this.match(SqlBaseParser.COMMENT); - this.state = 403; - this.string(); - } - - this.state = 408; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===216) { - this.state = 406; - this.match(SqlBaseParser.WITH); - this.state = 407; - this.properties(); - } + this.state = 409; + localctx.name = this.identifier(); + break; - this.state = 410; - this.match(SqlBaseParser.AS); - this.state = 416; + case 19: + localctx = new AlterColumnSetNotNullContext(this, localctx); + this.enterOuterAlt(localctx, 19); + this.state = 411; + this.match(SqlBaseParser.ALTER); + this.state = 412; + this.match(SqlBaseParser.TABLE); + this.state = 415; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,34,this._ctx); - switch(la_) { - case 1: - this.state = 411; - this.query(); - break; - - case 2: - this.state = 412; - this.match(SqlBaseParser.T__1); + var la_ = this._interp.adaptivePredict(this._input,28,this._ctx); + if(la_===1) { this.state = 413; - this.query(); + this.match(SqlBaseParser.IF); this.state = 414; - this.match(SqlBaseParser.T__2); - break; + this.match(SqlBaseParser.EXISTS); } - break; - - case 22: - localctx = new DropMaterializedViewContext(this, localctx); - this.enterOuterAlt(localctx, 22); + this.state = 417; + localctx.tableName = this.qualifiedName(); this.state = 418; - this.match(SqlBaseParser.DROP); - this.state = 419; - this.match(SqlBaseParser.MATERIALIZED); + this.match(SqlBaseParser.ALTER); this.state = 420; - this.match(SqlBaseParser.VIEW); - this.state = 423; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,35,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,29,this._ctx); if(la_===1) { - this.state = 421; - this.match(SqlBaseParser.IF); - this.state = 422; - this.match(SqlBaseParser.EXISTS); + this.state = 419; + this.match(SqlBaseParser.COLUMN); } + this.state = 422; + localctx.column = this.identifier(); + this.state = 423; + this.match(SqlBaseParser.SET); + this.state = 424; + this.match(SqlBaseParser.NOT); this.state = 425; - this.qualifiedName(); + this.match(SqlBaseParser.NULL); break; - case 23: - localctx = new RefreshMaterializedViewContext(this, localctx); - this.enterOuterAlt(localctx, 23); - this.state = 426; - this.match(SqlBaseParser.REFRESH); + case 20: + localctx = new AlterColumnDropNotNullContext(this, localctx); + this.enterOuterAlt(localctx, 20); this.state = 427; - this.match(SqlBaseParser.MATERIALIZED); + this.match(SqlBaseParser.ALTER); this.state = 428; - this.match(SqlBaseParser.VIEW); - this.state = 429; - this.qualifiedName(); - this.state = 430; - this.match(SqlBaseParser.WHERE); + this.match(SqlBaseParser.TABLE); this.state = 431; - this.booleanExpression(0); - break; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,30,this._ctx); + if(la_===1) { + this.state = 429; + this.match(SqlBaseParser.IF); + this.state = 430; + this.match(SqlBaseParser.EXISTS); - case 24: - localctx = new CreateFunctionContext(this, localctx); - this.enterOuterAlt(localctx, 24); + } this.state = 433; - this.match(SqlBaseParser.CREATE); + localctx.tableName = this.qualifiedName(); + this.state = 434; + this.match(SqlBaseParser.ALTER); this.state = 436; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===135) { - this.state = 434; - this.match(SqlBaseParser.OR); + var la_ = this._interp.adaptivePredict(this._input,31,this._ctx); + if(la_===1) { this.state = 435; - this.match(SqlBaseParser.REPLACE); - } + this.match(SqlBaseParser.COLUMN); - this.state = 439; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===189) { - this.state = 438; - this.match(SqlBaseParser.TEMPORARY); } - + this.state = 438; + localctx.column = this.identifier(); + this.state = 439; + this.match(SqlBaseParser.DROP); + this.state = 440; + this.match(SqlBaseParser.NOT); this.state = 441; - this.match(SqlBaseParser.FUNCTION); - this.state = 442; - localctx.functionName = this.qualifiedName(); + this.match(SqlBaseParser.NULL); + break; + + case 21: + localctx = new SetTablePropertiesContext(this, localctx); + this.enterOuterAlt(localctx, 21); this.state = 443; - this.match(SqlBaseParser.T__1); - this.state = 452; + this.match(SqlBaseParser.ALTER); + this.state = 444; + this.match(SqlBaseParser.TABLE); + this.state = 447; this._errHandler.sync(this); - _la = this._input.LA(1); - if((((_la) & ~0x1f) === 0 && ((1 << _la) & 3879427072) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 548070023) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2513695477) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 2413794779) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794171) !== 0) || ((((_la - 239)) & ~0x1f) === 0 && ((1 << (_la - 239)) & 15) !== 0)) { - this.state = 444; - this.sqlParameterDeclaration(); - this.state = 449; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===4) { - this.state = 445; - this.match(SqlBaseParser.T__3); - this.state = 446; - this.sqlParameterDeclaration(); - this.state = 451; - this._errHandler.sync(this); - _la = this._input.LA(1); - } + var la_ = this._interp.adaptivePredict(this._input,32,this._ctx); + if(la_===1) { + this.state = 445; + this.match(SqlBaseParser.IF); + this.state = 446; + this.match(SqlBaseParser.EXISTS); + } + this.state = 449; + localctx.tableName = this.qualifiedName(); + this.state = 450; + this.match(SqlBaseParser.SET); + this.state = 451; + this.match(SqlBaseParser.PROPERTIES); + this.state = 452; + this.properties(); + break; + case 22: + localctx = new DropBranchContext(this, localctx); + this.enterOuterAlt(localctx, 22); this.state = 454; - this.match(SqlBaseParser.T__2); + this.match(SqlBaseParser.ALTER); this.state = 455; - this.match(SqlBaseParser.RETURNS); - this.state = 456; - localctx.returnType = this.type(0); - this.state = 459; + this.match(SqlBaseParser.TABLE); + this.state = 458; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===32) { + var la_ = this._interp.adaptivePredict(this._input,33,this._ctx); + if(la_===1) { + this.state = 456; + this.match(SqlBaseParser.IF); this.state = 457; - this.match(SqlBaseParser.COMMENT); - this.state = 458; - this.string(); - } + this.match(SqlBaseParser.EXISTS); + } + this.state = 460; + localctx.tableName = this.qualifiedName(); this.state = 461; - this.routineCharacteristics(); + this.match(SqlBaseParser.DROP); this.state = 462; - this.routineBody(); - break; - - case 25: - localctx = new AlterFunctionContext(this, localctx); - this.enterOuterAlt(localctx, 25); - this.state = 464; - this.match(SqlBaseParser.ALTER); + this.match(SqlBaseParser.BRANCH); this.state = 465; - this.match(SqlBaseParser.FUNCTION); - this.state = 466; - this.qualifiedName(); - this.state = 468; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===2) { - this.state = 467; - this.types(); + if(_la===95) { + this.state = 463; + this.match(SqlBaseParser.IF); + this.state = 464; + this.match(SqlBaseParser.EXISTS); } - this.state = 470; - this.alterRoutineCharacteristics(); + this.state = 467; + localctx.name = this.string(); break; - case 26: - localctx = new DropFunctionContext(this, localctx); - this.enterOuterAlt(localctx, 26); - this.state = 472; - this.match(SqlBaseParser.DROP); - this.state = 474; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===189) { - this.state = 473; - this.match(SqlBaseParser.TEMPORARY); - } - - this.state = 476; - this.match(SqlBaseParser.FUNCTION); - this.state = 479; + case 23: + localctx = new DropTagContext(this, localctx); + this.enterOuterAlt(localctx, 23); + this.state = 469; + this.match(SqlBaseParser.ALTER); + this.state = 470; + this.match(SqlBaseParser.TABLE); + this.state = 473; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,43,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,35,this._ctx); if(la_===1) { - this.state = 477; + this.state = 471; this.match(SqlBaseParser.IF); - this.state = 478; + this.state = 472; this.match(SqlBaseParser.EXISTS); } - this.state = 481; - this.qualifiedName(); - this.state = 483; + this.state = 475; + localctx.tableName = this.qualifiedName(); + this.state = 476; + this.match(SqlBaseParser.DROP); + this.state = 477; + this.match(SqlBaseParser.TAG); + this.state = 480; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===2) { - this.state = 482; - this.types(); + if(_la===95) { + this.state = 478; + this.match(SqlBaseParser.IF); + this.state = 479; + this.match(SqlBaseParser.EXISTS); } + this.state = 482; + localctx.name = this.string(); break; - case 27: - localctx = new CallContext(this, localctx); - this.enterOuterAlt(localctx, 27); + case 24: + localctx = new AnalyzeContext(this, localctx); + this.enterOuterAlt(localctx, 24); + this.state = 484; + this.match(SqlBaseParser.ANALYZE); this.state = 485; - this.match(SqlBaseParser.CALL); - this.state = 486; this.qualifiedName(); - this.state = 487; - this.match(SqlBaseParser.T__1); - this.state = 496; + this.state = 488; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4282080292) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2695561095) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2514219775) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 4292867547) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794175) !== 0) || ((((_la - 227)) & ~0x1f) === 0 && ((1 << (_la - 227)) & 327619) !== 0)) { - this.state = 488; - this.callArgument(); - this.state = 493; + if(_la===233) { + this.state = 486; + this.match(SqlBaseParser.WITH); + this.state = 487; + this.properties(); + } + + break; + + case 25: + localctx = new CreateTypeContext(this, localctx); + this.enterOuterAlt(localctx, 25); + this.state = 490; + this.match(SqlBaseParser.CREATE); + this.state = 491; + this.match(SqlBaseParser.TYPE); + this.state = 492; + this.qualifiedName(); + this.state = 493; + this.match(SqlBaseParser.AS); + this.state = 506; + this._errHandler.sync(this); + switch(this._input.LA(1)) { + case 2: + this.state = 494; + this.match(SqlBaseParser.T__1); + this.state = 495; + this.sqlParameterDeclaration(); + this.state = 500; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 489; + this.state = 496; this.match(SqlBaseParser.T__3); - this.state = 490; - this.callArgument(); - this.state = 495; + this.state = 497; + this.sqlParameterDeclaration(); + this.state = 502; this._errHandler.sync(this); _la = this._input.LA(1); } + this.state = 503; + this.match(SqlBaseParser.T__2); + break; + case 10: + case 11: + case 12: + case 14: + case 16: + case 17: + case 19: + case 20: + case 21: + case 22: + case 24: + case 26: + case 27: + case 28: + case 31: + case 32: + case 33: + case 34: + case 35: + case 36: + case 39: + case 42: + case 44: + case 48: + case 49: + case 50: + case 52: + case 54: + case 56: + case 57: + case 58: + case 60: + case 63: + case 64: + case 66: + case 69: + case 72: + case 74: + case 76: + case 77: + case 78: + case 79: + case 81: + case 84: + case 85: + case 86: + case 87: + case 88: + case 89: + case 92: + case 94: + case 95: + case 96: + case 98: + case 100: + case 103: + case 105: + case 106: + case 108: + case 109: + case 111: + case 112: + case 113: + case 114: + case 115: + case 117: + case 119: + case 122: + case 123: + case 124: + case 125: + case 126: + case 127: + case 128: + case 129: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 140: + case 141: + case 142: + case 143: + case 145: + case 146: + case 149: + case 151: + case 152: + case 153: + case 154: + case 155: + case 156: + case 158: + case 159: + case 160: + case 161: + case 162: + case 163: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 173: + case 174: + case 175: + case 177: + case 178: + case 179: + case 181: + case 182: + case 183: + case 184: + case 185: + case 186: + case 188: + case 189: + case 190: + case 191: + case 192: + case 193: + case 194: + case 195: + case 196: + case 197: + case 198: + case 199: + case 200: + case 202: + case 203: + case 204: + case 205: + case 206: + case 208: + case 209: + case 210: + case 211: + case 213: + case 214: + case 215: + case 217: + case 218: + case 220: + case 222: + case 223: + case 224: + case 226: + case 228: + case 229: + case 230: + case 234: + case 235: + case 236: + case 237: + case 256: + case 257: + case 258: + case 259: + case 260: + case 261: + case 262: + this.state = 505; + this.type(0); + break; + default: + throw new antlr4.error.NoViableAltException(this); } - - this.state = 498; - this.match(SqlBaseParser.T__2); break; - case 28: - localctx = new CreateRoleContext(this, localctx); - this.enterOuterAlt(localctx, 28); - this.state = 500; + case 26: + localctx = new CreateViewContext(this, localctx); + this.enterOuterAlt(localctx, 26); + this.state = 508; this.match(SqlBaseParser.CREATE); - this.state = 501; - this.match(SqlBaseParser.ROLE); - this.state = 502; - localctx.name = this.identifier(); - this.state = 506; + this.state = 511; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===216) { - this.state = 503; - this.match(SqlBaseParser.WITH); - this.state = 504; - this.match(SqlBaseParser.ADMIN); - this.state = 505; - this.grantor(); + if(_la===147) { + this.state = 509; + this.match(SqlBaseParser.OR); + this.state = 510; + this.match(SqlBaseParser.REPLACE); } - break; - - case 29: - localctx = new DropRoleContext(this, localctx); - this.enterOuterAlt(localctx, 29); - this.state = 508; - this.match(SqlBaseParser.DROP); - this.state = 509; - this.match(SqlBaseParser.ROLE); - this.state = 510; - localctx.name = this.identifier(); - break; - - case 30: - localctx = new GrantRolesContext(this, localctx); - this.enterOuterAlt(localctx, 30); - this.state = 511; - this.match(SqlBaseParser.GRANT); - this.state = 512; - this.roles(); this.state = 513; - this.match(SqlBaseParser.TO); + this.match(SqlBaseParser.VIEW); this.state = 514; - this.principal(); - this.state = 519; + this.qualifiedName(); + this.state = 516; this._errHandler.sync(this); _la = this._input.LA(1); - while(_la===4) { + if(_la===186) { this.state = 515; - this.match(SqlBaseParser.T__3); - this.state = 516; - this.principal(); - this.state = 521; - this._errHandler.sync(this); - _la = this._input.LA(1); + this.viewSecurity(); } + + this.state = 518; + this.match(SqlBaseParser.AS); + this.state = 519; + this.query(); + break; + + case 27: + localctx = new RenameViewContext(this, localctx); + this.enterOuterAlt(localctx, 27); + this.state = 521; + this.match(SqlBaseParser.ALTER); + this.state = 522; + this.match(SqlBaseParser.VIEW); this.state = 525; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===216) { - this.state = 522; - this.match(SqlBaseParser.WITH); + var la_ = this._interp.adaptivePredict(this._input,42,this._ctx); + if(la_===1) { this.state = 523; - this.match(SqlBaseParser.ADMIN); + this.match(SqlBaseParser.IF); this.state = 524; - this.match(SqlBaseParser.OPTION); - } + this.match(SqlBaseParser.EXISTS); - this.state = 530; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===79) { - this.state = 527; - this.match(SqlBaseParser.GRANTED); - this.state = 528; - this.match(SqlBaseParser.BY); - this.state = 529; - this.grantor(); } - + this.state = 527; + localctx.from = this.qualifiedName(); + this.state = 528; + this.match(SqlBaseParser.RENAME); + this.state = 529; + this.match(SqlBaseParser.TO); + this.state = 530; + localctx.to = this.qualifiedName(); break; - case 31: - localctx = new RevokeRolesContext(this, localctx); - this.enterOuterAlt(localctx, 31); + case 28: + localctx = new DropViewContext(this, localctx); + this.enterOuterAlt(localctx, 28); this.state = 532; - this.match(SqlBaseParser.REVOKE); + this.match(SqlBaseParser.DROP); + this.state = 533; + this.match(SqlBaseParser.VIEW); this.state = 536; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,51,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,43,this._ctx); if(la_===1) { - this.state = 533; - this.match(SqlBaseParser.ADMIN); this.state = 534; - this.match(SqlBaseParser.OPTION); + this.match(SqlBaseParser.IF); this.state = 535; - this.match(SqlBaseParser.FOR); + this.match(SqlBaseParser.EXISTS); } this.state = 538; - this.roles(); + this.qualifiedName(); + break; + + case 29: + localctx = new CreateMaterializedViewContext(this, localctx); + this.enterOuterAlt(localctx, 29); this.state = 539; - this.match(SqlBaseParser.FROM); + this.match(SqlBaseParser.CREATE); this.state = 540; - this.principal(); + this.match(SqlBaseParser.MATERIALIZED); + this.state = 541; + this.match(SqlBaseParser.VIEW); this.state = 545; this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===4) { - this.state = 541; - this.match(SqlBaseParser.T__3); + var la_ = this._interp.adaptivePredict(this._input,44,this._ctx); + if(la_===1) { this.state = 542; - this.principal(); - this.state = 547; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 551; - this._errHandler.sync(this); + this.match(SqlBaseParser.IF); + this.state = 543; + this.match(SqlBaseParser.NOT); + this.state = 544; + this.match(SqlBaseParser.EXISTS); + + } + this.state = 547; + this.qualifiedName(); + this.state = 550; + this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===79) { + if(_la===34) { this.state = 548; - this.match(SqlBaseParser.GRANTED); + this.match(SqlBaseParser.COMMENT); this.state = 549; - this.match(SqlBaseParser.BY); - this.state = 550; - this.grantor(); + this.string(); } - break; - - case 32: - localctx = new SetRoleContext(this, localctx); - this.enterOuterAlt(localctx, 32); this.state = 553; - this.match(SqlBaseParser.SET); - this.state = 554; - this.match(SqlBaseParser.ROLE); - this.state = 558; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,54,this._ctx); - switch(la_) { - case 1: - this.state = 555; - this.match(SqlBaseParser.ALL); - break; + _la = this._input.LA(1); + if(_la===186) { + this.state = 552; + this.viewSecurity(); + } - case 2: + this.state = 557; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===233) { + this.state = 555; + this.match(SqlBaseParser.WITH); this.state = 556; - this.match(SqlBaseParser.NONE); - break; - - case 3: - this.state = 557; - localctx.role = this.identifier(); - break; - + this.properties(); } - break; - case 33: - localctx = new GrantContext(this, localctx); - this.enterOuterAlt(localctx, 33); - this.state = 560; - this.match(SqlBaseParser.GRANT); - this.state = 571; + this.state = 559; + this.match(SqlBaseParser.AS); + this.state = 565; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,56,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,48,this._ctx); switch(la_) { case 1: - this.state = 561; - this.privilege(); - this.state = 566; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===4) { - this.state = 562; - this.match(SqlBaseParser.T__3); - this.state = 563; - this.privilege(); - this.state = 568; - this._errHandler.sync(this); - _la = this._input.LA(1); - } + this.state = 560; + this.query(); break; case 2: - this.state = 569; - this.match(SqlBaseParser.ALL); - this.state = 570; - this.match(SqlBaseParser.PRIVILEGES); + this.state = 561; + this.match(SqlBaseParser.T__1); + this.state = 562; + this.query(); + this.state = 563; + this.match(SqlBaseParser.T__2); break; } - this.state = 573; - this.match(SqlBaseParser.ON); - this.state = 575; + break; + + case 30: + localctx = new DropMaterializedViewContext(this, localctx); + this.enterOuterAlt(localctx, 30); + this.state = 567; + this.match(SqlBaseParser.DROP); + this.state = 568; + this.match(SqlBaseParser.MATERIALIZED); + this.state = 569; + this.match(SqlBaseParser.VIEW); + this.state = 572; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===186) { - this.state = 574; - this.match(SqlBaseParser.TABLE); + var la_ = this._interp.adaptivePredict(this._input,49,this._ctx); + if(la_===1) { + this.state = 570; + this.match(SqlBaseParser.IF); + this.state = 571; + this.match(SqlBaseParser.EXISTS); + } + this.state = 574; + this.qualifiedName(); + break; + case 31: + localctx = new RefreshMaterializedViewContext(this, localctx); + this.enterOuterAlt(localctx, 31); + this.state = 575; + this.match(SqlBaseParser.REFRESH); + this.state = 576; + this.match(SqlBaseParser.MATERIALIZED); this.state = 577; - this.qualifiedName(); + this.match(SqlBaseParser.VIEW); this.state = 578; - this.match(SqlBaseParser.TO); - this.state = 579; - localctx.grantee = this.principal(); - this.state = 583; + this.qualifiedName(); + this.state = 581; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===216) { + if(_la===232) { + this.state = 579; + this.match(SqlBaseParser.WHERE); this.state = 580; - this.match(SqlBaseParser.WITH); - this.state = 581; - this.match(SqlBaseParser.GRANT); - this.state = 582; - this.match(SqlBaseParser.OPTION); + localctx.where = this.booleanExpression(0); } break; - case 34: - localctx = new RevokeContext(this, localctx); - this.enterOuterAlt(localctx, 34); - this.state = 585; - this.match(SqlBaseParser.REVOKE); + case 32: + localctx = new CreateFunctionContext(this, localctx); + this.enterOuterAlt(localctx, 32); + this.state = 583; + this.match(SqlBaseParser.CREATE); + this.state = 586; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===147) { + this.state = 584; + this.match(SqlBaseParser.OR); + this.state = 585; + this.match(SqlBaseParser.REPLACE); + } + this.state = 589; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,59,this._ctx); - if(la_===1) { - this.state = 586; - this.match(SqlBaseParser.GRANT); - this.state = 587; - this.match(SqlBaseParser.OPTION); + _la = this._input.LA(1); + if(_la===205) { this.state = 588; - this.match(SqlBaseParser.FOR); - + this.match(SqlBaseParser.TEMPORARY); } - this.state = 601; + + this.state = 591; + this.match(SqlBaseParser.FUNCTION); + this.state = 592; + localctx.functionName = this.qualifiedName(); + this.state = 593; + this.match(SqlBaseParser.T__1); + this.state = 602; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,61,this._ctx); - switch(la_) { - case 1: - this.state = 591; - this.privilege(); - this.state = 596; + _la = this._input.LA(1); + if(((((_la - 10)) & ~0x1f) === 0 && ((1 << (_la - 10)) & 669474519) !== 0) || ((((_la - 42)) & ~0x1f) === 0 && ((1 << (_la - 42)) & 1231410629) !== 0) || ((((_la - 74)) & ~0x1f) === 0 && ((1 << (_la - 74)) & 2775907517) !== 0) || ((((_la - 106)) & ~0x1f) === 0 && ((1 << (_la - 106)) & 2130652141) !== 0) || ((((_la - 140)) & ~0x1f) === 0 && ((1 << (_la - 140)) & 4278057583) !== 0) || ((((_la - 172)) & ~0x1f) === 0 && ((1 << (_la - 172)) & 3758063343) !== 0) || ((((_la - 204)) & ~0x1f) === 0 && ((1 << (_la - 204)) & 3344789239) !== 0) || ((((_la - 236)) & ~0x1f) === 0 && ((1 << (_la - 236)) & 15728643) !== 0)) { + this.state = 594; + this.sqlParameterDeclaration(); + this.state = 599; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 592; + this.state = 595; this.match(SqlBaseParser.T__3); - this.state = 593; - this.privilege(); - this.state = 598; + this.state = 596; + this.sqlParameterDeclaration(); + this.state = 601; this._errHandler.sync(this); _la = this._input.LA(1); } - break; - - case 2: - this.state = 599; - this.match(SqlBaseParser.ALL); - this.state = 600; - this.match(SqlBaseParser.PRIVILEGES); - break; - } - this.state = 603; - this.match(SqlBaseParser.ON); + + this.state = 604; + this.match(SqlBaseParser.T__2); this.state = 605; + this.match(SqlBaseParser.RETURNS); + this.state = 606; + localctx.returnType = this.type(0); + this.state = 609; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===186) { - this.state = 604; - this.match(SqlBaseParser.TABLE); + if(_la===34) { + this.state = 607; + this.match(SqlBaseParser.COMMENT); + this.state = 608; + this.string(); } - this.state = 607; - this.qualifiedName(); - this.state = 608; - this.match(SqlBaseParser.FROM); - this.state = 609; - localctx.grantee = this.principal(); - break; - - case 35: - localctx = new ShowGrantsContext(this, localctx); - this.enterOuterAlt(localctx, 35); this.state = 611; - this.match(SqlBaseParser.SHOW); + this.routineCharacteristics(); this.state = 612; - this.match(SqlBaseParser.GRANTS); + this.routineBody(); + break; + + case 33: + localctx = new AlterFunctionContext(this, localctx); + this.enterOuterAlt(localctx, 33); + this.state = 614; + this.match(SqlBaseParser.ALTER); + this.state = 615; + this.match(SqlBaseParser.FUNCTION); + this.state = 616; + this.qualifiedName(); this.state = 618; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===132) { - this.state = 613; - this.match(SqlBaseParser.ON); - this.state = 615; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===186) { - this.state = 614; - this.match(SqlBaseParser.TABLE); - } - + if(_la===2) { this.state = 617; - this.qualifiedName(); + this.types(); } + this.state = 620; + this.alterRoutineCharacteristics(); break; - case 36: - localctx = new ExplainContext(this, localctx); - this.enterOuterAlt(localctx, 36); - this.state = 620; - this.match(SqlBaseParser.EXPLAIN); + case 34: + localctx = new DropFunctionContext(this, localctx); + this.enterOuterAlt(localctx, 34); this.state = 622; + this.match(SqlBaseParser.DROP); + this.state = 624; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===205) { + this.state = 623; + this.match(SqlBaseParser.TEMPORARY); + } + + this.state = 626; + this.match(SqlBaseParser.FUNCTION); + this.state = 629; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,65,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,58,this._ctx); if(la_===1) { - this.state = 621; - this.match(SqlBaseParser.ANALYZE); + this.state = 627; + this.match(SqlBaseParser.IF); + this.state = 628; + this.match(SqlBaseParser.EXISTS); } - this.state = 625; + this.state = 631; + this.qualifiedName(); + this.state = 633; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===211) { - this.state = 624; - this.match(SqlBaseParser.VERBOSE); + if(_la===2) { + this.state = 632; + this.types(); } - this.state = 638; + break; + + case 35: + localctx = new CallContext(this, localctx); + this.enterOuterAlt(localctx, 35); + this.state = 635; + this.match(SqlBaseParser.CALL); + this.state = 636; + this.qualifiedName(); + this.state = 637; + this.match(SqlBaseParser.T__1); + this.state = 646; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,68,this._ctx); - if(la_===1) { - this.state = 627; - this.match(SqlBaseParser.T__1); - this.state = 628; - this.explainOption(); - this.state = 633; + _la = this._input.LA(1); + if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4252720164) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2539125919) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 3690135461) !== 0) || ((((_la - 96)) & ~0x1f) === 0 && ((1 << (_la - 96)) & 4289705621) !== 0) || ((((_la - 128)) & ~0x1f) === 0 && ((1 << (_la - 128)) & 3752263675) !== 0) || ((((_la - 160)) & ~0x1f) === 0 && ((1 << (_la - 160)) & 4159635439) !== 0) || ((((_la - 192)) & ~0x1f) === 0 && ((1 << (_la - 192)) & 3607068159) !== 0) || ((((_la - 224)) & ~0x1f) === 0 && ((1 << (_la - 224)) & 4231019637) !== 0) || ((((_la - 256)) & ~0x1f) === 0 && ((1 << (_la - 256)) & 79) !== 0)) { + this.state = 638; + this.callArgument(); + this.state = 643; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 629; + this.state = 639; this.match(SqlBaseParser.T__3); - this.state = 630; - this.explainOption(); - this.state = 635; + this.state = 640; + this.callArgument(); + this.state = 645; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 636; - this.match(SqlBaseParser.T__2); - } - this.state = 640; - this.statement(); - break; - - case 37: - localctx = new ShowCreateTableContext(this, localctx); - this.enterOuterAlt(localctx, 37); - this.state = 641; - this.match(SqlBaseParser.SHOW); - this.state = 642; - this.match(SqlBaseParser.CREATE); - this.state = 643; - this.match(SqlBaseParser.TABLE); - this.state = 644; - this.qualifiedName(); - break; - case 38: - localctx = new ShowCreateViewContext(this, localctx); - this.enterOuterAlt(localctx, 38); - this.state = 645; - this.match(SqlBaseParser.SHOW); - this.state = 646; - this.match(SqlBaseParser.CREATE); - this.state = 647; - this.match(SqlBaseParser.VIEW); this.state = 648; - this.qualifiedName(); + this.match(SqlBaseParser.T__2); break; - case 39: - localctx = new ShowCreateMaterializedViewContext(this, localctx); - this.enterOuterAlt(localctx, 39); - this.state = 649; - this.match(SqlBaseParser.SHOW); + case 36: + localctx = new CreateRoleContext(this, localctx); + this.enterOuterAlt(localctx, 36); this.state = 650; this.match(SqlBaseParser.CREATE); this.state = 651; - this.match(SqlBaseParser.MATERIALIZED); + this.match(SqlBaseParser.ROLE); this.state = 652; - this.match(SqlBaseParser.VIEW); - this.state = 653; - this.qualifiedName(); - break; - - case 40: - localctx = new ShowCreateFunctionContext(this, localctx); - this.enterOuterAlt(localctx, 40); - this.state = 654; - this.match(SqlBaseParser.SHOW); - this.state = 655; - this.match(SqlBaseParser.CREATE); + localctx.name = this.identifier(); this.state = 656; - this.match(SqlBaseParser.FUNCTION); - this.state = 657; - this.qualifiedName(); - this.state = 659; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===2) { - this.state = 658; - this.types(); + if(_la===233) { + this.state = 653; + this.match(SqlBaseParser.WITH); + this.state = 654; + this.match(SqlBaseParser.ADMIN); + this.state = 655; + this.grantor(); } break; - case 41: - localctx = new ShowTablesContext(this, localctx); - this.enterOuterAlt(localctx, 41); + case 37: + localctx = new DropRoleContext(this, localctx); + this.enterOuterAlt(localctx, 37); + this.state = 658; + this.match(SqlBaseParser.DROP); + this.state = 659; + this.match(SqlBaseParser.ROLE); + this.state = 660; + localctx.name = this.identifier(); + break; + + case 38: + localctx = new GrantRolesContext(this, localctx); + this.enterOuterAlt(localctx, 38); this.state = 661; - this.match(SqlBaseParser.SHOW); + this.match(SqlBaseParser.GRANT); this.state = 662; - this.match(SqlBaseParser.TABLES); - this.state = 665; + this.roles(); + this.state = 663; + this.match(SqlBaseParser.TO); + this.state = 664; + this.principal(); + this.state = 669; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===74 || _la===89) { - this.state = 663; + while(_la===4) { + this.state = 665; + this.match(SqlBaseParser.T__3); + this.state = 666; + this.principal(); + this.state = 671; + this._errHandler.sync(this); _la = this._input.LA(1); - if(!(_la===74 || _la===89)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 664; - this.qualifiedName(); } - - this.state = 673; + this.state = 675; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===108) { - this.state = 667; - this.match(SqlBaseParser.LIKE); - this.state = 668; - localctx.pattern = this.string(); - this.state = 671; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===59) { - this.state = 669; - this.match(SqlBaseParser.ESCAPE); - this.state = 670; - localctx.escape = this.string(); - } - + if(_la===233) { + this.state = 672; + this.match(SqlBaseParser.WITH); + this.state = 673; + this.match(SqlBaseParser.ADMIN); + this.state = 674; + this.match(SqlBaseParser.OPTION); } - break; - - case 42: - localctx = new ShowSchemasContext(this, localctx); - this.enterOuterAlt(localctx, 42); - this.state = 675; - this.match(SqlBaseParser.SHOW); - this.state = 676; - this.match(SqlBaseParser.SCHEMAS); - this.state = 679; + this.state = 680; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===74 || _la===89) { + if(_la===87) { this.state = 677; - _la = this._input.LA(1); - if(!(_la===74 || _la===89)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } + this.match(SqlBaseParser.GRANTED); this.state = 678; - this.identifier(); + this.match(SqlBaseParser.BY); + this.state = 679; + this.grantor(); } - this.state = 687; + break; + + case 39: + localctx = new RevokeRolesContext(this, localctx); + this.enterOuterAlt(localctx, 39); + this.state = 682; + this.match(SqlBaseParser.REVOKE); + this.state = 686; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===108) { - this.state = 681; - this.match(SqlBaseParser.LIKE); - this.state = 682; - localctx.pattern = this.string(); + var la_ = this._interp.adaptivePredict(this._input,66,this._ctx); + if(la_===1) { + this.state = 683; + this.match(SqlBaseParser.ADMIN); + this.state = 684; + this.match(SqlBaseParser.OPTION); this.state = 685; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===59) { - this.state = 683; - this.match(SqlBaseParser.ESCAPE); - this.state = 684; - localctx.escape = this.string(); - } + this.match(SqlBaseParser.FOR); } - - break; - - case 43: - localctx = new ShowCatalogsContext(this, localctx); - this.enterOuterAlt(localctx, 43); + this.state = 688; + this.roles(); this.state = 689; - this.match(SqlBaseParser.SHOW); + this.match(SqlBaseParser.FROM); this.state = 690; - this.match(SqlBaseParser.CATALOGS); - this.state = 697; + this.principal(); + this.state = 695; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===108) { + while(_la===4) { this.state = 691; - this.match(SqlBaseParser.LIKE); + this.match(SqlBaseParser.T__3); this.state = 692; - localctx.pattern = this.string(); - this.state = 695; + this.principal(); + this.state = 697; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===59) { - this.state = 693; - this.match(SqlBaseParser.ESCAPE); - this.state = 694; - localctx.escape = this.string(); - } - } - - break; - - case 44: - localctx = new ShowColumnsContext(this, localctx); - this.enterOuterAlt(localctx, 44); - this.state = 699; - this.match(SqlBaseParser.SHOW); - this.state = 700; - this.match(SqlBaseParser.COLUMNS); this.state = 701; + this._errHandler.sync(this); _la = this._input.LA(1); - if(!(_la===74 || _la===89)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); + if(_la===87) { + this.state = 698; + this.match(SqlBaseParser.GRANTED); + this.state = 699; + this.match(SqlBaseParser.BY); + this.state = 700; + this.grantor(); } - this.state = 702; - this.qualifiedName(); + break; - case 45: - localctx = new ShowStatsContext(this, localctx); - this.enterOuterAlt(localctx, 45); + case 40: + localctx = new SetRoleContext(this, localctx); + this.enterOuterAlt(localctx, 40); this.state = 703; - this.match(SqlBaseParser.SHOW); + this.match(SqlBaseParser.SET); this.state = 704; - this.match(SqlBaseParser.STATS); - this.state = 705; - this.match(SqlBaseParser.FOR); - this.state = 706; - this.qualifiedName(); - break; - - case 46: - localctx = new ShowStatsForQueryContext(this, localctx); - this.enterOuterAlt(localctx, 46); - this.state = 707; - this.match(SqlBaseParser.SHOW); + this.match(SqlBaseParser.ROLE); this.state = 708; - this.match(SqlBaseParser.STATS); - this.state = 709; - this.match(SqlBaseParser.FOR); - this.state = 710; - this.match(SqlBaseParser.T__1); - this.state = 711; - this.querySpecification(); - this.state = 712; - this.match(SqlBaseParser.T__2); - break; - - case 47: - localctx = new ShowRolesContext(this, localctx); - this.enterOuterAlt(localctx, 47); - this.state = 714; - this.match(SqlBaseParser.SHOW); - this.state = 716; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===39) { - this.state = 715; - this.match(SqlBaseParser.CURRENT); + var la_ = this._interp.adaptivePredict(this._input,69,this._ctx); + switch(la_) { + case 1: + this.state = 705; + this.match(SqlBaseParser.ALL); + break; + + case 2: + this.state = 706; + this.match(SqlBaseParser.NONE); + break; + + case 3: + this.state = 707; + localctx.role = this.identifier(); + break; + } + break; - this.state = 718; - this.match(SqlBaseParser.ROLES); + case 41: + localctx = new GrantContext(this, localctx); + this.enterOuterAlt(localctx, 41); + this.state = 710; + this.match(SqlBaseParser.GRANT); this.state = 721; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===74 || _la===89) { - this.state = 719; + var la_ = this._interp.adaptivePredict(this._input,71,this._ctx); + switch(la_) { + case 1: + this.state = 711; + this.privilege(); + this.state = 716; + this._errHandler.sync(this); _la = this._input.LA(1); - if(!(_la===74 || _la===89)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); + while(_la===4) { + this.state = 712; + this.match(SqlBaseParser.T__3); + this.state = 713; + this.privilege(); + this.state = 718; + this._errHandler.sync(this); + _la = this._input.LA(1); } - this.state = 720; - this.identifier(); - } + break; - break; + case 2: + this.state = 719; + this.match(SqlBaseParser.ALL); + this.state = 720; + this.match(SqlBaseParser.PRIVILEGES); + break; - case 48: - localctx = new ShowRoleGrantsContext(this, localctx); - this.enterOuterAlt(localctx, 48); + } this.state = 723; - this.match(SqlBaseParser.SHOW); - this.state = 724; - this.match(SqlBaseParser.ROLE); + this.match(SqlBaseParser.ON); this.state = 725; - this.match(SqlBaseParser.GRANTS); + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===201) { + this.state = 724; + this.match(SqlBaseParser.TABLE); + } + + this.state = 727; + this.qualifiedName(); this.state = 728; + this.match(SqlBaseParser.TO); + this.state = 729; + localctx.grantee = this.principal(); + this.state = 733; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===74 || _la===89) { - this.state = 726; - _la = this._input.LA(1); - if(!(_la===74 || _la===89)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 727; - this.identifier(); + if(_la===233) { + this.state = 730; + this.match(SqlBaseParser.WITH); + this.state = 731; + this.match(SqlBaseParser.GRANT); + this.state = 732; + this.match(SqlBaseParser.OPTION); } break; - case 49: - localctx = new ShowColumnsContext(this, localctx); - this.enterOuterAlt(localctx, 49); - this.state = 730; - this.match(SqlBaseParser.DESCRIBE); - this.state = 731; - this.qualifiedName(); - break; - - case 50: - localctx = new ShowColumnsContext(this, localctx); - this.enterOuterAlt(localctx, 50); - this.state = 732; - this.match(SqlBaseParser.DESC); - this.state = 733; - this.qualifiedName(); - break; - - case 51: - localctx = new ShowFunctionsContext(this, localctx); - this.enterOuterAlt(localctx, 51); - this.state = 734; - this.match(SqlBaseParser.SHOW); + case 42: + localctx = new RevokeContext(this, localctx); + this.enterOuterAlt(localctx, 42); this.state = 735; - this.match(SqlBaseParser.FUNCTIONS); - this.state = 742; + this.match(SqlBaseParser.REVOKE); + this.state = 739; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===108) { + var la_ = this._interp.adaptivePredict(this._input,74,this._ctx); + if(la_===1) { this.state = 736; - this.match(SqlBaseParser.LIKE); + this.match(SqlBaseParser.GRANT); this.state = 737; - localctx.pattern = this.string(); - this.state = 740; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===59) { - this.state = 738; - this.match(SqlBaseParser.ESCAPE); - this.state = 739; - localctx.escape = this.string(); - } + this.match(SqlBaseParser.OPTION); + this.state = 738; + this.match(SqlBaseParser.FOR); } - - break; - - case 52: - localctx = new ShowSessionContext(this, localctx); - this.enterOuterAlt(localctx, 52); - this.state = 744; - this.match(SqlBaseParser.SHOW); - this.state = 745; - this.match(SqlBaseParser.SESSION); - this.state = 752; + this.state = 751; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===108) { + var la_ = this._interp.adaptivePredict(this._input,76,this._ctx); + switch(la_) { + case 1: + this.state = 741; + this.privilege(); this.state = 746; - this.match(SqlBaseParser.LIKE); - this.state = 747; - localctx.pattern = this.string(); - this.state = 750; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===59) { + while(_la===4) { + this.state = 742; + this.match(SqlBaseParser.T__3); + this.state = 743; + this.privilege(); this.state = 748; - this.match(SqlBaseParser.ESCAPE); - this.state = 749; - localctx.escape = this.string(); + this._errHandler.sync(this); + _la = this._input.LA(1); } + break; - } - - break; + case 2: + this.state = 749; + this.match(SqlBaseParser.ALL); + this.state = 750; + this.match(SqlBaseParser.PRIVILEGES); + break; - case 53: - localctx = new SetSessionContext(this, localctx); - this.enterOuterAlt(localctx, 53); - this.state = 754; - this.match(SqlBaseParser.SET); + } + this.state = 753; + this.match(SqlBaseParser.ON); this.state = 755; - this.match(SqlBaseParser.SESSION); - this.state = 756; - this.qualifiedName(); + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===201) { + this.state = 754; + this.match(SqlBaseParser.TABLE); + } + this.state = 757; - this.match(SqlBaseParser.EQ); + this.qualifiedName(); this.state = 758; - this.expression(); + this.match(SqlBaseParser.FROM); + this.state = 759; + localctx.grantee = this.principal(); break; - case 54: - localctx = new ResetSessionContext(this, localctx); - this.enterOuterAlt(localctx, 54); - this.state = 760; - this.match(SqlBaseParser.RESET); + case 43: + localctx = new ShowGrantsContext(this, localctx); + this.enterOuterAlt(localctx, 43); this.state = 761; - this.match(SqlBaseParser.SESSION); + this.match(SqlBaseParser.SHOW); this.state = 762; - this.qualifiedName(); - break; - - case 55: - localctx = new StartTransactionContext(this, localctx); - this.enterOuterAlt(localctx, 55); - this.state = 763; - this.match(SqlBaseParser.START); - this.state = 764; - this.match(SqlBaseParser.TRANSACTION); - this.state = 773; + this.match(SqlBaseParser.GRANTS); + this.state = 768; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===100 || _la===149) { + if(_la===144) { + this.state = 763; + this.match(SqlBaseParser.ON); this.state = 765; - this.transactionMode(); - this.state = 770; this._errHandler.sync(this); _la = this._input.LA(1); - while(_la===4) { - this.state = 766; - this.match(SqlBaseParser.T__3); - this.state = 767; - this.transactionMode(); - this.state = 772; - this._errHandler.sync(this); - _la = this._input.LA(1); + if(_la===201) { + this.state = 764; + this.match(SqlBaseParser.TABLE); } + + this.state = 767; + this.qualifiedName(); } break; - case 56: - localctx = new CommitContext(this, localctx); - this.enterOuterAlt(localctx, 56); - this.state = 775; - this.match(SqlBaseParser.COMMIT); - this.state = 777; + case 44: + localctx = new ExplainContext(this, localctx); + this.enterOuterAlt(localctx, 44); + this.state = 770; + this.match(SqlBaseParser.EXPLAIN); + this.state = 772; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===217) { - this.state = 776; - this.match(SqlBaseParser.WORK); - } - - break; + var la_ = this._interp.adaptivePredict(this._input,80,this._ctx); + if(la_===1) { + this.state = 771; + this.match(SqlBaseParser.ANALYZE); - case 57: - localctx = new RollbackContext(this, localctx); - this.enterOuterAlt(localctx, 57); - this.state = 779; - this.match(SqlBaseParser.ROLLBACK); - this.state = 781; + } + this.state = 775; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===217) { - this.state = 780; - this.match(SqlBaseParser.WORK); + if(_la===228) { + this.state = 774; + this.match(SqlBaseParser.VERBOSE); } - break; - - case 58: - localctx = new PrepareContext(this, localctx); - this.enterOuterAlt(localctx, 58); - this.state = 783; - this.match(SqlBaseParser.PREPARE); - this.state = 784; - this.identifier(); - this.state = 785; - this.match(SqlBaseParser.FROM); - this.state = 786; - this.statement(); - break; - - case 59: - localctx = new DeallocateContext(this, localctx); - this.enterOuterAlt(localctx, 59); this.state = 788; - this.match(SqlBaseParser.DEALLOCATE); - this.state = 789; - this.match(SqlBaseParser.PREPARE); - this.state = 790; - this.identifier(); - break; - - case 60: - localctx = new ExecuteContext(this, localctx); - this.enterOuterAlt(localctx, 60); - this.state = 791; - this.match(SqlBaseParser.EXECUTE); - this.state = 792; - this.identifier(); - this.state = 802; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===208) { - this.state = 793; - this.match(SqlBaseParser.USING); - this.state = 794; - this.expression(); - this.state = 799; + var la_ = this._interp.adaptivePredict(this._input,83,this._ctx); + if(la_===1) { + this.state = 777; + this.match(SqlBaseParser.T__1); + this.state = 778; + this.explainOption(); + this.state = 783; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 795; + this.state = 779; this.match(SqlBaseParser.T__3); - this.state = 796; - this.expression(); - this.state = 801; + this.state = 780; + this.explainOption(); + this.state = 785; this._errHandler.sync(this); _la = this._input.LA(1); } + this.state = 786; + this.match(SqlBaseParser.T__2); + } + this.state = 790; + this.statement(); + break; + + case 45: + localctx = new ShowCreateTableContext(this, localctx); + this.enterOuterAlt(localctx, 45); + this.state = 791; + this.match(SqlBaseParser.SHOW); + this.state = 792; + this.match(SqlBaseParser.CREATE); + this.state = 793; + this.match(SqlBaseParser.TABLE); + this.state = 794; + this.qualifiedName(); + break; + case 46: + localctx = new ShowCreateSchemaContext(this, localctx); + this.enterOuterAlt(localctx, 46); + this.state = 795; + this.match(SqlBaseParser.SHOW); + this.state = 796; + this.match(SqlBaseParser.CREATE); + this.state = 797; + this.match(SqlBaseParser.SCHEMA); + this.state = 798; + this.qualifiedName(); break; - case 61: - localctx = new DescribeInputContext(this, localctx); - this.enterOuterAlt(localctx, 61); + case 47: + localctx = new ShowCreateViewContext(this, localctx); + this.enterOuterAlt(localctx, 47); + this.state = 799; + this.match(SqlBaseParser.SHOW); + this.state = 800; + this.match(SqlBaseParser.CREATE); + this.state = 801; + this.match(SqlBaseParser.VIEW); + this.state = 802; + this.qualifiedName(); + break; + + case 48: + localctx = new ShowCreateMaterializedViewContext(this, localctx); + this.enterOuterAlt(localctx, 48); + this.state = 803; + this.match(SqlBaseParser.SHOW); this.state = 804; - this.match(SqlBaseParser.DESCRIBE); + this.match(SqlBaseParser.CREATE); this.state = 805; - this.match(SqlBaseParser.INPUT); + this.match(SqlBaseParser.MATERIALIZED); this.state = 806; - this.identifier(); + this.match(SqlBaseParser.VIEW); + this.state = 807; + this.qualifiedName(); break; - case 62: - localctx = new DescribeOutputContext(this, localctx); - this.enterOuterAlt(localctx, 62); - this.state = 807; - this.match(SqlBaseParser.DESCRIBE); + case 49: + localctx = new ShowCreateFunctionContext(this, localctx); + this.enterOuterAlt(localctx, 49); this.state = 808; - this.match(SqlBaseParser.OUTPUT); + this.match(SqlBaseParser.SHOW); this.state = 809; - this.identifier(); - break; - - case 63: - localctx = new UpdateContext(this, localctx); - this.enterOuterAlt(localctx, 63); + this.match(SqlBaseParser.CREATE); this.state = 810; - this.match(SqlBaseParser.UPDATE); + this.match(SqlBaseParser.FUNCTION); this.state = 811; this.qualifiedName(); - this.state = 812; - this.match(SqlBaseParser.SET); this.state = 813; - this.updateAssignment(); - this.state = 818; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===4) { - this.state = 814; - this.match(SqlBaseParser.T__3); - this.state = 815; - this.updateAssignment(); - this.state = 820; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 823; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===215) { - this.state = 821; - this.match(SqlBaseParser.WHERE); - this.state = 822; - localctx.where = this.booleanExpression(0); + if(_la===2) { + this.state = 812; + this.types(); } break; - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } + case 50: + localctx = new ShowTablesContext(this, localctx); + this.enterOuterAlt(localctx, 50); + this.state = 815; + this.match(SqlBaseParser.SHOW); + this.state = 816; + this.match(SqlBaseParser.TABLES); + this.state = 819; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===82 || _la===97) { + this.state = 817; + _la = this._input.LA(1); + if(!(_la===82 || _la===97)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 818; + this.qualifiedName(); + } + this.state = 827; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===118) { + this.state = 821; + this.match(SqlBaseParser.LIKE); + this.state = 822; + localctx.pattern = this.string(); + this.state = 825; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===67) { + this.state = 823; + this.match(SqlBaseParser.ESCAPE); + this.state = 824; + localctx.escape = this.string(); + } + } - query() { - let localctx = new QueryContext(this, this._ctx, this.state); - this.enterRule(localctx, 8, SqlBaseParser.RULE_query); - var _la = 0; - try { - this.enterOuterAlt(localctx, 1); - this.state = 828; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===216) { - this.state = 827; - this.with_(); - } + break; - this.state = 830; - this.queryNoWith(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } + case 51: + localctx = new ShowSchemasContext(this, localctx); + this.enterOuterAlt(localctx, 51); + this.state = 829; + this.match(SqlBaseParser.SHOW); + this.state = 830; + this.match(SqlBaseParser.SCHEMAS); + this.state = 833; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===82 || _la===97) { + this.state = 831; + _la = this._input.LA(1); + if(!(_la===82 || _la===97)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 832; + this.identifier(); + } + this.state = 841; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===118) { + this.state = 835; + this.match(SqlBaseParser.LIKE); + this.state = 836; + localctx.pattern = this.string(); + this.state = 839; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===67) { + this.state = 837; + this.match(SqlBaseParser.ESCAPE); + this.state = 838; + localctx.escape = this.string(); + } + } - with_() { - let localctx = new WithContext(this, this._ctx, this.state); - this.enterRule(localctx, 10, SqlBaseParser.RULE_with); - var _la = 0; - try { - this.enterOuterAlt(localctx, 1); - this.state = 832; - this.match(SqlBaseParser.WITH); - this.state = 834; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===150) { - this.state = 833; - this.match(SqlBaseParser.RECURSIVE); - } + break; - this.state = 836; - this.namedQuery(); - this.state = 841; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===4) { - this.state = 837; - this.match(SqlBaseParser.T__3); - this.state = 838; - this.namedQuery(); + case 52: + localctx = new ShowCatalogsContext(this, localctx); + this.enterOuterAlt(localctx, 52); this.state = 843; + this.match(SqlBaseParser.SHOW); + this.state = 844; + this.match(SqlBaseParser.CATALOGS); + this.state = 851; this._errHandler.sync(this); _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } + if(_la===118) { + this.state = 845; + this.match(SqlBaseParser.LIKE); + this.state = 846; + localctx.pattern = this.string(); + this.state = 849; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===67) { + this.state = 847; + this.match(SqlBaseParser.ESCAPE); + this.state = 848; + localctx.escape = this.string(); + } + } + break; - tableElement() { - let localctx = new TableElementContext(this, this._ctx, this.state); - this.enterRule(localctx, 12, SqlBaseParser.RULE_tableElement); - try { - this.state = 846; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case 10: - case 11: - case 12: - case 14: - case 16: - case 17: - case 19: - case 20: - case 21: - case 24: - case 25: - case 26: - case 29: - case 30: - case 31: - case 32: - case 33: - case 34: - case 39: - case 41: - case 45: - case 46: - case 47: - case 49: - case 51: case 53: + localctx = new ShowColumnsContext(this, localctx); + this.enterOuterAlt(localctx, 53); + this.state = 853; + this.match(SqlBaseParser.SHOW); + this.state = 854; + this.match(SqlBaseParser.COLUMNS); + this.state = 855; + _la = this._input.LA(1); + if(!(_la===82 || _la===97)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 856; + this.qualifiedName(); + break; + + case 54: + localctx = new ShowStatsContext(this, localctx); + this.enterOuterAlt(localctx, 54); + this.state = 857; + this.match(SqlBaseParser.SHOW); + this.state = 858; + this.match(SqlBaseParser.STATS); + this.state = 859; + this.match(SqlBaseParser.FOR); + this.state = 860; + this.qualifiedName(); + break; + case 55: - case 61: - case 64: - case 66: - case 68: - case 69: - case 70: - case 71: - case 73: - case 76: - case 77: - case 78: - case 79: - case 80: - case 81: - case 84: - case 86: - case 87: - case 88: - case 90: - case 92: - case 95: - case 97: - case 98: - case 100: - case 101: - case 103: - case 104: - case 105: - case 107: - case 109: - case 112: - case 113: - case 114: - case 115: - case 116: - case 117: - case 119: - case 120: - case 121: - case 122: - case 123: - case 124: - case 128: - case 129: - case 130: - case 131: - case 133: - case 134: - case 137: - case 139: - case 140: - case 141: - case 142: - case 143: - case 144: - case 146: - case 147: - case 148: - case 149: - case 151: - case 152: - case 153: - case 154: - case 155: - case 156: - case 157: - case 158: - case 159: - case 160: - case 162: - case 163: - case 164: - case 166: - case 167: - case 168: - case 169: - case 170: - case 171: - case 173: - case 174: - case 175: - case 176: - case 177: - case 178: - case 179: - case 180: - case 181: - case 182: - case 183: - case 184: - case 185: - case 187: - case 188: - case 189: - case 190: - case 192: - case 193: - case 194: - case 195: - case 197: - case 198: - case 199: - case 201: - case 202: - case 205: - case 206: - case 207: - case 209: - case 211: - case 212: - case 213: - case 217: - case 218: - case 219: - case 220: - case 239: - case 240: - case 241: - case 242: - this.enterOuterAlt(localctx, 1); - this.state = 844; - this.columnDefinition(); - break; - case 108: - this.enterOuterAlt(localctx, 2); - this.state = 845; - this.likeClause(); + localctx = new ShowStatsForQueryContext(this, localctx); + this.enterOuterAlt(localctx, 55); + this.state = 861; + this.match(SqlBaseParser.SHOW); + this.state = 862; + this.match(SqlBaseParser.STATS); + this.state = 863; + this.match(SqlBaseParser.FOR); + this.state = 864; + this.match(SqlBaseParser.T__1); + this.state = 865; + this.querySpecification(); + this.state = 866; + this.match(SqlBaseParser.T__2); break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - columnDefinition() { - let localctx = new ColumnDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 14, SqlBaseParser.RULE_columnDefinition); - var _la = 0; - try { - this.enterOuterAlt(localctx, 1); - this.state = 848; - this.identifier(); - this.state = 849; - this.type(0); - this.state = 852; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===126) { - this.state = 850; - this.match(SqlBaseParser.NOT); - this.state = 851; - this.match(SqlBaseParser.NULL); - } - - this.state = 856; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===32) { - this.state = 854; - this.match(SqlBaseParser.COMMENT); - this.state = 855; - this.string(); - } - - this.state = 860; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===216) { - this.state = 858; - this.match(SqlBaseParser.WITH); - this.state = 859; - this.properties(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } + case 56: + localctx = new ShowRolesContext(this, localctx); + this.enterOuterAlt(localctx, 56); + this.state = 868; + this.match(SqlBaseParser.SHOW); + this.state = 870; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===42) { + this.state = 869; + this.match(SqlBaseParser.CURRENT); + } + this.state = 872; + this.match(SqlBaseParser.ROLES); + this.state = 875; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===82 || _la===97) { + this.state = 873; + _la = this._input.LA(1); + if(!(_la===82 || _la===97)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 874; + this.identifier(); + } + break; - likeClause() { - let localctx = new LikeClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 16, SqlBaseParser.RULE_likeClause); - var _la = 0; - try { - this.enterOuterAlt(localctx, 1); - this.state = 862; - this.match(SqlBaseParser.LIKE); - this.state = 863; - this.qualifiedName(); - this.state = 866; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===61 || _la===90) { - this.state = 864; - localctx.optionType = this._input.LT(1); + case 57: + localctx = new ShowRoleGrantsContext(this, localctx); + this.enterOuterAlt(localctx, 57); + this.state = 877; + this.match(SqlBaseParser.SHOW); + this.state = 878; + this.match(SqlBaseParser.ROLE); + this.state = 879; + this.match(SqlBaseParser.GRANTS); + this.state = 882; + this._errHandler.sync(this); _la = this._input.LA(1); - if(!(_la===61 || _la===90)) { - localctx.optionType = this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); + if(_la===82 || _la===97) { + this.state = 880; + _la = this._input.LA(1); + if(!(_la===82 || _la===97)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 881; + this.identifier(); } - this.state = 865; - this.match(SqlBaseParser.PROPERTIES); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } + break; + case 58: + localctx = new ShowColumnsContext(this, localctx); + this.enterOuterAlt(localctx, 58); + this.state = 884; + this.match(SqlBaseParser.DESCRIBE); + this.state = 885; + this.qualifiedName(); + break; + case 59: + localctx = new ShowColumnsContext(this, localctx); + this.enterOuterAlt(localctx, 59); + this.state = 886; + this.match(SqlBaseParser.DESC); + this.state = 887; + this.qualifiedName(); + break; - properties() { - let localctx = new PropertiesContext(this, this._ctx, this.state); - this.enterRule(localctx, 18, SqlBaseParser.RULE_properties); - var _la = 0; - try { - this.enterOuterAlt(localctx, 1); - this.state = 868; - this.match(SqlBaseParser.T__1); - this.state = 869; - this.property(); - this.state = 874; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===4) { - this.state = 870; - this.match(SqlBaseParser.T__3); - this.state = 871; - this.property(); - this.state = 876; + case 60: + localctx = new ShowFunctionsContext(this, localctx); + this.enterOuterAlt(localctx, 60); + this.state = 888; + this.match(SqlBaseParser.SHOW); + this.state = 889; + this.match(SqlBaseParser.FUNCTIONS); + this.state = 896; this._errHandler.sync(this); _la = this._input.LA(1); - } - this.state = 877; - this.match(SqlBaseParser.T__2); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } + if(_la===118) { + this.state = 890; + this.match(SqlBaseParser.LIKE); + this.state = 891; + localctx.pattern = this.string(); + this.state = 894; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===67) { + this.state = 892; + this.match(SqlBaseParser.ESCAPE); + this.state = 893; + localctx.escape = this.string(); + } + } + break; - property() { - let localctx = new PropertyContext(this, this._ctx, this.state); - this.enterRule(localctx, 20, SqlBaseParser.RULE_property); - try { - this.enterOuterAlt(localctx, 1); - this.state = 879; - this.identifier(); - this.state = 880; - this.match(SqlBaseParser.EQ); - this.state = 881; - this.expression(); + case 61: + localctx = new ShowSessionContext(this, localctx); + this.enterOuterAlt(localctx, 61); + this.state = 898; + this.match(SqlBaseParser.SHOW); + this.state = 899; + this.match(SqlBaseParser.SESSION); + this.state = 906; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===118) { + this.state = 900; + this.match(SqlBaseParser.LIKE); + this.state = 901; + localctx.pattern = this.string(); + this.state = 904; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===67) { + this.state = 902; + this.match(SqlBaseParser.ESCAPE); + this.state = 903; + localctx.escape = this.string(); + } + + } + + break; + + case 62: + localctx = new SetSessionContext(this, localctx); + this.enterOuterAlt(localctx, 62); + this.state = 908; + this.match(SqlBaseParser.SET); + this.state = 909; + this.match(SqlBaseParser.SESSION); + this.state = 910; + this.qualifiedName(); + this.state = 911; + this.match(SqlBaseParser.EQ); + this.state = 912; + this.expression(); + break; + + case 63: + localctx = new ResetSessionContext(this, localctx); + this.enterOuterAlt(localctx, 63); + this.state = 914; + this.match(SqlBaseParser.RESET); + this.state = 915; + this.match(SqlBaseParser.SESSION); + this.state = 916; + this.qualifiedName(); + break; + + case 64: + localctx = new StartTransactionContext(this, localctx); + this.enterOuterAlt(localctx, 64); + this.state = 917; + this.match(SqlBaseParser.START); + this.state = 918; + this.match(SqlBaseParser.TRANSACTION); + this.state = 927; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===108 || _la===163) { + this.state = 919; + this.transactionMode(); + this.state = 924; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 920; + this.match(SqlBaseParser.T__3); + this.state = 921; + this.transactionMode(); + this.state = 926; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + + break; + + case 65: + localctx = new CommitContext(this, localctx); + this.enterOuterAlt(localctx, 65); + this.state = 929; + this.match(SqlBaseParser.COMMIT); + this.state = 931; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===234) { + this.state = 930; + this.match(SqlBaseParser.WORK); + } + + break; + + case 66: + localctx = new RollbackContext(this, localctx); + this.enterOuterAlt(localctx, 66); + this.state = 933; + this.match(SqlBaseParser.ROLLBACK); + this.state = 935; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===234) { + this.state = 934; + this.match(SqlBaseParser.WORK); + } + + break; + + case 67: + localctx = new PrepareContext(this, localctx); + this.enterOuterAlt(localctx, 67); + this.state = 937; + this.match(SqlBaseParser.PREPARE); + this.state = 938; + this.identifier(); + this.state = 939; + this.match(SqlBaseParser.FROM); + this.state = 940; + this.statement(); + break; + + case 68: + localctx = new DeallocateContext(this, localctx); + this.enterOuterAlt(localctx, 68); + this.state = 942; + this.match(SqlBaseParser.DEALLOCATE); + this.state = 943; + this.match(SqlBaseParser.PREPARE); + this.state = 944; + this.identifier(); + break; + + case 69: + localctx = new ExecuteContext(this, localctx); + this.enterOuterAlt(localctx, 69); + this.state = 945; + this.match(SqlBaseParser.EXECUTE); + this.state = 946; + this.identifier(); + this.state = 956; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===225) { + this.state = 947; + this.match(SqlBaseParser.USING); + this.state = 948; + this.expression(); + this.state = 953; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 949; + this.match(SqlBaseParser.T__3); + this.state = 950; + this.expression(); + this.state = 955; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + + break; + + case 70: + localctx = new DescribeInputContext(this, localctx); + this.enterOuterAlt(localctx, 70); + this.state = 958; + this.match(SqlBaseParser.DESCRIBE); + this.state = 959; + this.match(SqlBaseParser.INPUT); + this.state = 960; + this.identifier(); + break; + + case 71: + localctx = new DescribeOutputContext(this, localctx); + this.enterOuterAlt(localctx, 71); + this.state = 961; + this.match(SqlBaseParser.DESCRIBE); + this.state = 962; + this.match(SqlBaseParser.OUTPUT); + this.state = 963; + this.identifier(); + break; + + case 72: + localctx = new UpdateContext(this, localctx); + this.enterOuterAlt(localctx, 72); + this.state = 964; + this.match(SqlBaseParser.UPDATE); + this.state = 965; + this.qualifiedName(); + this.state = 966; + this.match(SqlBaseParser.SET); + this.state = 967; + this.updateAssignment(); + this.state = 972; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 968; + this.match(SqlBaseParser.T__3); + this.state = 969; + this.updateAssignment(); + this.state = 974; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 977; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===232) { + this.state = 975; + this.match(SqlBaseParser.WHERE); + this.state = 976; + localctx.where = this.booleanExpression(0); + } + + break; + + case 73: + localctx = new MergeIntoContext(this, localctx); + this.enterOuterAlt(localctx, 73); + this.state = 979; + this.match(SqlBaseParser.MERGE); + this.state = 980; + this.match(SqlBaseParser.INTO); + this.state = 981; + this.qualifiedName(); + this.state = 986; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(((((_la - 10)) & ~0x1f) === 0 && ((1 << (_la - 10)) & 669474775) !== 0) || ((((_la - 42)) & ~0x1f) === 0 && ((1 << (_la - 42)) & 1231410629) !== 0) || ((((_la - 74)) & ~0x1f) === 0 && ((1 << (_la - 74)) & 2775907517) !== 0) || ((((_la - 106)) & ~0x1f) === 0 && ((1 << (_la - 106)) & 2130652141) !== 0) || ((((_la - 140)) & ~0x1f) === 0 && ((1 << (_la - 140)) & 4278057583) !== 0) || ((((_la - 172)) & ~0x1f) === 0 && ((1 << (_la - 172)) & 3758063343) !== 0) || ((((_la - 204)) & ~0x1f) === 0 && ((1 << (_la - 204)) & 3344789239) !== 0) || ((((_la - 236)) & ~0x1f) === 0 && ((1 << (_la - 236)) & 15728643) !== 0)) { + this.state = 983; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===18) { + this.state = 982; + this.match(SqlBaseParser.AS); + } + + this.state = 985; + this.identifier(); + } + + this.state = 988; + this.match(SqlBaseParser.USING); + this.state = 989; + this.relation(0); + this.state = 990; + this.match(SqlBaseParser.ON); + this.state = 991; + this.expression(); + this.state = 993; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + this.state = 992; + this.mergeCase(); + this.state = 995; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while(_la===231); + break; + + } } catch (re) { if(re instanceof antlr4.error.RecognitionException) { localctx.exception = re; @@ -3437,15 +3534,22 @@ export default class SqlBaseParser extends antlr4.Parser { - sqlParameterDeclaration() { - let localctx = new SqlParameterDeclarationContext(this, this._ctx, this.state); - this.enterRule(localctx, 22, SqlBaseParser.RULE_sqlParameterDeclaration); + query() { + let localctx = new QueryContext(this, this._ctx, this.state); + this.enterRule(localctx, 8, SqlBaseParser.RULE_query); + var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 883; - this.identifier(); - this.state = 884; - this.type(0); + this.state = 1000; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===233) { + this.state = 999; + this.with_(); + } + + this.state = 1002; + this.queryNoWith(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { localctx.exception = re; @@ -3462,19 +3566,33 @@ export default class SqlBaseParser extends antlr4.Parser { - routineCharacteristics() { - let localctx = new RoutineCharacteristicsContext(this, this._ctx, this.state); - this.enterRule(localctx, 24, SqlBaseParser.RULE_routineCharacteristics); + with_() { + let localctx = new WithContext(this, this._ctx, this.state); + this.enterRule(localctx, 10, SqlBaseParser.RULE_with); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 889; + this.state = 1004; + this.match(SqlBaseParser.WITH); + this.state = 1006; this._errHandler.sync(this); _la = this._input.LA(1); - while(_la===25 || _la===53 || _la===103 || _la===126 || _la===159) { - this.state = 886; - this.routineCharacteristic(); - this.state = 891; + if(_la===164) { + this.state = 1005; + this.match(SqlBaseParser.RECURSIVE); + } + + this.state = 1008; + this.namedQuery(); + this.state = 1013; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 1009; + this.match(SqlBaseParser.T__3); + this.state = 1010; + this.namedQuery(); + this.state = 1015; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -3494,34 +3612,32 @@ export default class SqlBaseParser extends antlr4.Parser { - routineCharacteristic() { - let localctx = new RoutineCharacteristicContext(this, this._ctx, this.state); - this.enterRule(localctx, 26, SqlBaseParser.RULE_routineCharacteristic); + tableElement() { + let localctx = new TableElementContext(this, this._ctx, this.state); + this.enterRule(localctx, 12, SqlBaseParser.RULE_tableElement); try { - this.state = 896; + this.state = 1019; this._errHandler.sync(this); - switch(this._input.LA(1)) { - case 103: + var la_ = this._interp.adaptivePredict(this._input,115,this._ctx); + switch(la_) { + case 1: this.enterOuterAlt(localctx, 1); - this.state = 892; - this.match(SqlBaseParser.LANGUAGE); - this.state = 893; - this.language(); + this.state = 1016; + this.constraintSpecification(); break; - case 53: - case 126: + + case 2: this.enterOuterAlt(localctx, 2); - this.state = 894; - this.determinism(); + this.state = 1017; + this.columnDefinition(); break; - case 25: - case 159: + + case 3: this.enterOuterAlt(localctx, 3); - this.state = 895; - this.nullCallClause(); + this.state = 1018; + this.likeClause(); break; - default: - throw new antlr4.error.NoViableAltException(this); + } } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3539,19 +3655,288 @@ export default class SqlBaseParser extends antlr4.Parser { - alterRoutineCharacteristics() { - let localctx = new AlterRoutineCharacteristicsContext(this, this._ctx, this.state); - this.enterRule(localctx, 28, SqlBaseParser.RULE_alterRoutineCharacteristics); + columnDefinition() { + let localctx = new ColumnDefinitionContext(this, this._ctx, this.state); + this.enterRule(localctx, 14, SqlBaseParser.RULE_columnDefinition); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 901; + this.state = 1021; + this.identifier(); + this.state = 1022; + this.type(0); + this.state = 1025; this._errHandler.sync(this); _la = this._input.LA(1); - while(_la===25 || _la===159) { - this.state = 898; + if(_la===138) { + this.state = 1023; + this.match(SqlBaseParser.NOT); + this.state = 1024; + this.match(SqlBaseParser.NULL); + } + + this.state = 1029; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===34) { + this.state = 1027; + this.match(SqlBaseParser.COMMENT); + this.state = 1028; + this.string(); + } + + this.state = 1033; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===233) { + this.state = 1031; + this.match(SqlBaseParser.WITH); + this.state = 1032; + this.properties(); + } + + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + likeClause() { + let localctx = new LikeClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 16, SqlBaseParser.RULE_likeClause); + var _la = 0; + try { + this.enterOuterAlt(localctx, 1); + this.state = 1035; + this.match(SqlBaseParser.LIKE); + this.state = 1036; + this.qualifiedName(); + this.state = 1039; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===69 || _la===98) { + this.state = 1037; + localctx.optionType = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===69 || _la===98)) { + localctx.optionType = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 1038; + this.match(SqlBaseParser.PROPERTIES); + } + + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + properties() { + let localctx = new PropertiesContext(this, this._ctx, this.state); + this.enterRule(localctx, 18, SqlBaseParser.RULE_properties); + var _la = 0; + try { + this.enterOuterAlt(localctx, 1); + this.state = 1041; + this.match(SqlBaseParser.T__1); + this.state = 1042; + this.property(); + this.state = 1047; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 1043; + this.match(SqlBaseParser.T__3); + this.state = 1044; + this.property(); + this.state = 1049; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1050; + this.match(SqlBaseParser.T__2); + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + property() { + let localctx = new PropertyContext(this, this._ctx, this.state); + this.enterRule(localctx, 20, SqlBaseParser.RULE_property); + try { + this.enterOuterAlt(localctx, 1); + this.state = 1052; + this.identifier(); + this.state = 1053; + this.match(SqlBaseParser.EQ); + this.state = 1054; + this.expression(); + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + sqlParameterDeclaration() { + let localctx = new SqlParameterDeclarationContext(this, this._ctx, this.state); + this.enterRule(localctx, 22, SqlBaseParser.RULE_sqlParameterDeclaration); + try { + this.enterOuterAlt(localctx, 1); + this.state = 1056; + this.identifier(); + this.state = 1057; + this.type(0); + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + routineCharacteristics() { + let localctx = new RoutineCharacteristicsContext(this, this._ctx, this.state); + this.enterRule(localctx, 24, SqlBaseParser.RULE_routineCharacteristics); + var _la = 0; + try { + this.enterOuterAlt(localctx, 1); + this.state = 1062; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===27 || _la===57 || _la===113 || _la===138 || _la===174) { + this.state = 1059; + this.routineCharacteristic(); + this.state = 1064; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + routineCharacteristic() { + let localctx = new RoutineCharacteristicContext(this, this._ctx, this.state); + this.enterRule(localctx, 26, SqlBaseParser.RULE_routineCharacteristic); + try { + this.state = 1069; + this._errHandler.sync(this); + switch(this._input.LA(1)) { + case 113: + this.enterOuterAlt(localctx, 1); + this.state = 1065; + this.match(SqlBaseParser.LANGUAGE); + this.state = 1066; + this.language(); + break; + case 57: + case 138: + this.enterOuterAlt(localctx, 2); + this.state = 1067; + this.determinism(); + break; + case 27: + case 174: + this.enterOuterAlt(localctx, 3); + this.state = 1068; + this.nullCallClause(); + break; + default: + throw new antlr4.error.NoViableAltException(this); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + alterRoutineCharacteristics() { + let localctx = new AlterRoutineCharacteristicsContext(this, this._ctx, this.state); + this.enterRule(localctx, 28, SqlBaseParser.RULE_alterRoutineCharacteristics); + var _la = 0; + try { + this.enterOuterAlt(localctx, 1); + this.state = 1074; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===27 || _la===174) { + this.state = 1071; this.alterRoutineCharacteristic(); - this.state = 903; + this.state = 1076; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -3576,7 +3961,7 @@ export default class SqlBaseParser extends antlr4.Parser { this.enterRule(localctx, 30, SqlBaseParser.RULE_alterRoutineCharacteristic); try { this.enterOuterAlt(localctx, 1); - this.state = 904; + this.state = 1077; this.nullCallClause(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3598,17 +3983,17 @@ export default class SqlBaseParser extends antlr4.Parser { let localctx = new RoutineBodyContext(this, this._ctx, this.state); this.enterRule(localctx, 32, SqlBaseParser.RULE_routineBody); try { - this.state = 908; + this.state = 1081; this._errHandler.sync(this); switch(this._input.LA(1)) { - case 158: + case 173: this.enterOuterAlt(localctx, 1); - this.state = 906; + this.state = 1079; this.returnStatement(); break; - case 66: + case 74: this.enterOuterAlt(localctx, 2); - this.state = 907; + this.state = 1080; this.externalBodyReference(); break; default: @@ -3635,9 +4020,9 @@ export default class SqlBaseParser extends antlr4.Parser { this.enterRule(localctx, 34, SqlBaseParser.RULE_returnStatement); try { this.enterOuterAlt(localctx, 1); - this.state = 910; + this.state = 1083; this.match(SqlBaseParser.RETURN); - this.state = 911; + this.state = 1084; this.expression(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3661,15 +4046,15 @@ export default class SqlBaseParser extends antlr4.Parser { var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 913; + this.state = 1086; this.match(SqlBaseParser.EXTERNAL); - this.state = 916; + this.state = 1089; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===117) { - this.state = 914; + if(_la===129) { + this.state = 1087; this.match(SqlBaseParser.NAME); - this.state = 915; + this.state = 1088; this.externalRoutineName(); } @@ -3693,19 +4078,19 @@ export default class SqlBaseParser extends antlr4.Parser { let localctx = new LanguageContext(this, this._ctx, this.state); this.enterRule(localctx, 38, SqlBaseParser.RULE_language); try { - this.state = 920; + this.state = 1093; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,108,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,126,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 918; + this.state = 1091; this.match(SqlBaseParser.SQL); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 919; + this.state = 1092; this.identifier(); break; @@ -3730,19 +4115,19 @@ export default class SqlBaseParser extends antlr4.Parser { let localctx = new DeterminismContext(this, this._ctx, this.state); this.enterRule(localctx, 40, SqlBaseParser.RULE_determinism); try { - this.state = 925; + this.state = 1098; this._errHandler.sync(this); switch(this._input.LA(1)) { - case 53: + case 57: this.enterOuterAlt(localctx, 1); - this.state = 922; + this.state = 1095; this.match(SqlBaseParser.DETERMINISTIC); break; - case 126: + case 138: this.enterOuterAlt(localctx, 2); - this.state = 923; + this.state = 1096; this.match(SqlBaseParser.NOT); - this.state = 924; + this.state = 1097; this.match(SqlBaseParser.DETERMINISTIC); break; default: @@ -3768,31 +4153,31 @@ export default class SqlBaseParser extends antlr4.Parser { let localctx = new NullCallClauseContext(this, this._ctx, this.state); this.enterRule(localctx, 42, SqlBaseParser.RULE_nullCallClause); try { - this.state = 936; + this.state = 1109; this._errHandler.sync(this); switch(this._input.LA(1)) { - case 159: + case 174: this.enterOuterAlt(localctx, 1); - this.state = 927; + this.state = 1100; this.match(SqlBaseParser.RETURNS); - this.state = 928; + this.state = 1101; this.match(SqlBaseParser.NULL); - this.state = 929; + this.state = 1102; this.match(SqlBaseParser.ON); - this.state = 930; + this.state = 1103; this.match(SqlBaseParser.NULL); - this.state = 931; + this.state = 1104; this.match(SqlBaseParser.INPUT); break; - case 25: + case 27: this.enterOuterAlt(localctx, 2); - this.state = 932; + this.state = 1105; this.match(SqlBaseParser.CALLED); - this.state = 933; + this.state = 1106; this.match(SqlBaseParser.ON); - this.state = 934; + this.state = 1107; this.match(SqlBaseParser.NULL); - this.state = 935; + this.state = 1108; this.match(SqlBaseParser.INPUT); break; default: @@ -3819,7 +4204,7 @@ export default class SqlBaseParser extends antlr4.Parser { this.enterRule(localctx, 44, SqlBaseParser.RULE_externalRoutineName); try { this.enterOuterAlt(localctx, 1); - this.state = 938; + this.state = 1111; this.identifier(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3837,53 +4222,86 @@ export default class SqlBaseParser extends antlr4.Parser { + viewSecurity() { + let localctx = new ViewSecurityContext(this, this._ctx, this.state); + this.enterRule(localctx, 46, SqlBaseParser.RULE_viewSecurity); + var _la = 0; + try { + this.enterOuterAlt(localctx, 1); + this.state = 1113; + this.match(SqlBaseParser.SECURITY); + this.state = 1114; + _la = this._input.LA(1); + if(!(_la===52 || _la===105)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + queryNoWith() { let localctx = new QueryNoWithContext(this, this._ctx, this.state); - this.enterRule(localctx, 46, SqlBaseParser.RULE_queryNoWith); + this.enterRule(localctx, 48, SqlBaseParser.RULE_queryNoWith); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 940; + this.state = 1116; this.queryTerm(0); - this.state = 951; + this.state = 1127; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===136) { - this.state = 941; + if(_la===148) { + this.state = 1117; this.match(SqlBaseParser.ORDER); - this.state = 942; + this.state = 1118; this.match(SqlBaseParser.BY); - this.state = 943; + this.state = 1119; this.sortItem(); - this.state = 948; + this.state = 1124; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 944; + this.state = 1120; this.match(SqlBaseParser.T__3); - this.state = 945; + this.state = 1121; this.sortItem(); - this.state = 950; + this.state = 1126; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 958; + this.state = 1134; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===131) { - this.state = 953; + if(_la===143) { + this.state = 1129; this.match(SqlBaseParser.OFFSET); - this.state = 954; + this.state = 1130; localctx.offset = this.match(SqlBaseParser.INTEGER_VALUE); - this.state = 956; + this.state = 1132; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===166 || _la===167) { - this.state = 955; + if(_la===181 || _la===182) { + this.state = 1131; _la = this._input.LA(1); - if(!(_la===166 || _la===167)) { + if(!(_la===181 || _la===182)) { this._errHandler.recoverInline(this); } else { @@ -3894,48 +4312,44 @@ export default class SqlBaseParser extends antlr4.Parser { } - this.state = 969; + this.state = 1145; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,116,this._ctx); - if(la_===1) { - this.state = 967; + _la = this._input.LA(1); + if(_la===76 || _la===119) { + this.state = 1143; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case 109: - this.state = 960; - this.match(SqlBaseParser.LIMIT); - this.state = 961; - localctx.limit = this._input.LT(1); - _la = this._input.LA(1); - if(!(_la===12 || _la===236)) { - localctx.limit = this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - break; - case 68: - this.state = 962; - this.match(SqlBaseParser.FETCH); - this.state = 963; - this.match(SqlBaseParser.FIRST); - this.state = 964; - localctx.fetchFirstNRows = this.match(SqlBaseParser.INTEGER_VALUE); - this.state = 965; - this.match(SqlBaseParser.ROWS); - this.state = 966; - this.match(SqlBaseParser.ONLY); - break; - case -1: - case 3: - case 216: - break; + switch(this._input.LA(1)) { + case 119: + this.state = 1136; + this.match(SqlBaseParser.LIMIT); + this.state = 1137; + localctx.limit = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===12 || _la===253)) { + localctx.limit = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + break; + case 76: + this.state = 1138; + this.match(SqlBaseParser.FETCH); + this.state = 1139; + this.match(SqlBaseParser.FIRST); + this.state = 1140; + localctx.fetchFirstNRows = this.match(SqlBaseParser.INTEGER_VALUE); + this.state = 1141; + this.match(SqlBaseParser.ROWS); + this.state = 1142; + this.match(SqlBaseParser.ONLY); + break; default: - break; + throw new antlr4.error.NoViableAltException(this); } - } + } catch (re) { if(re instanceof antlr4.error.RecognitionException) { localctx.exception = re; @@ -3959,8 +4373,8 @@ export default class SqlBaseParser extends antlr4.Parser { const _parentState = this.state; let localctx = new QueryTermContext(this, this._ctx, _parentState); let _prevctx = localctx; - const _startState = 48; - this.enterRecursionRule(localctx, 48, SqlBaseParser.RULE_queryTerm, _p); + const _startState = 50; + this.enterRecursionRule(localctx, 50, SqlBaseParser.RULE_queryTerm, _p); var _la = 0; try { this.enterOuterAlt(localctx, 1); @@ -3968,41 +4382,41 @@ export default class SqlBaseParser extends antlr4.Parser { this._ctx = localctx; _prevctx = localctx; - this.state = 972; + this.state = 1148; this.queryPrimary(); this._ctx.stop = this._input.LT(-1); - this.state = 988; + this.state = 1164; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,120,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,138,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 986; + this.state = 1162; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,119,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,137,this._ctx); switch(la_) { case 1: localctx = new SetOperationContext(this, new QueryTermContext(this, _parentctx, _parentState)); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_queryTerm); - this.state = 974; + this.state = 1150; if (!( this.precpred(this._ctx, 2))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)"); } - this.state = 975; + this.state = 1151; localctx.operator = this.match(SqlBaseParser.INTERSECT); - this.state = 977; + this.state = 1153; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===12 || _la===54) { - this.state = 976; + if(_la===12 || _la===59) { + this.state = 1152; this.setQuantifier(); } - this.state = 979; + this.state = 1155; localctx.right = this.queryTerm(3); break; @@ -4010,37 +4424,37 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new SetOperationContext(this, new QueryTermContext(this, _parentctx, _parentState)); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_queryTerm); - this.state = 980; + this.state = 1156; if (!( this.precpred(this._ctx, 1))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 981; + this.state = 1157; localctx.operator = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===60 || _la===203)) { + if(!(_la===68 || _la===219)) { localctx.operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 983; + this.state = 1159; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===12 || _la===54) { - this.state = 982; + if(_la===12 || _la===59) { + this.state = 1158; this.setQuantifier(); } - this.state = 985; + this.state = 1161; localctx.right = this.queryTerm(2); break; } } - this.state = 990; + this.state = 1166; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,120,this._ctx); + _alt = this._interp.adaptivePredict(this._input,138,this._ctx); } } catch( error) { @@ -4061,56 +4475,56 @@ export default class SqlBaseParser extends antlr4.Parser { queryPrimary() { let localctx = new QueryPrimaryContext(this, this._ctx, this.state); - this.enterRule(localctx, 50, SqlBaseParser.RULE_queryPrimary); + this.enterRule(localctx, 52, SqlBaseParser.RULE_queryPrimary); try { - this.state = 1007; + this.state = 1183; this._errHandler.sync(this); switch(this._input.LA(1)) { - case 172: + case 187: localctx = new QueryPrimaryDefaultContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 991; + this.state = 1167; this.querySpecification(); break; - case 186: + case 201: localctx = new TableContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 992; + this.state = 1168; this.match(SqlBaseParser.TABLE); - this.state = 993; + this.state = 1169; this.qualifiedName(); break; - case 210: + case 227: localctx = new InlineTableContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 994; + this.state = 1170; this.match(SqlBaseParser.VALUES); - this.state = 995; + this.state = 1171; this.expression(); - this.state = 1000; + this.state = 1176; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,121,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,139,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 996; + this.state = 1172; this.match(SqlBaseParser.T__3); - this.state = 997; + this.state = 1173; this.expression(); } - this.state = 1002; + this.state = 1178; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,121,this._ctx); + _alt = this._interp.adaptivePredict(this._input,139,this._ctx); } break; case 2: localctx = new SubqueryContext(this, localctx); this.enterOuterAlt(localctx, 4); - this.state = 1003; + this.state = 1179; this.match(SqlBaseParser.T__1); - this.state = 1004; + this.state = 1180; this.queryNoWith(); - this.state = 1005; + this.state = 1181; this.match(SqlBaseParser.T__2); break; default: @@ -4134,20 +4548,20 @@ export default class SqlBaseParser extends antlr4.Parser { sortItem() { let localctx = new SortItemContext(this, this._ctx, this.state); - this.enterRule(localctx, 52, SqlBaseParser.RULE_sortItem); + this.enterRule(localctx, 54, SqlBaseParser.RULE_sortItem); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1009; + this.state = 1185; this.expression(); - this.state = 1011; + this.state = 1187; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===19 || _la===51) { - this.state = 1010; + if(_la===19 || _la===54) { + this.state = 1186; localctx.ordering = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===19 || _la===51)) { + if(!(_la===19 || _la===54)) { localctx.ordering = this._errHandler.recoverInline(this); } else { @@ -4156,16 +4570,16 @@ export default class SqlBaseParser extends antlr4.Parser { } } - this.state = 1015; + this.state = 1191; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===129) { - this.state = 1013; + if(_la===141) { + this.state = 1189; this.match(SqlBaseParser.NULLS); - this.state = 1014; + this.state = 1190; localctx.nullOrdering = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===70 || _la===104)) { + if(!(_la===78 || _la===114)) { localctx.nullOrdering = this._errHandler.recoverInline(this); } else { @@ -4192,90 +4606,90 @@ export default class SqlBaseParser extends antlr4.Parser { querySpecification() { let localctx = new QuerySpecificationContext(this, this._ctx, this.state); - this.enterRule(localctx, 54, SqlBaseParser.RULE_querySpecification); + this.enterRule(localctx, 56, SqlBaseParser.RULE_querySpecification); try { this.enterOuterAlt(localctx, 1); - this.state = 1017; + this.state = 1193; this.match(SqlBaseParser.SELECT); - this.state = 1019; + this.state = 1195; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,125,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,143,this._ctx); if(la_===1) { - this.state = 1018; + this.state = 1194; this.setQuantifier(); } - this.state = 1021; + this.state = 1197; this.selectItem(); - this.state = 1026; + this.state = 1202; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,126,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,144,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 1022; + this.state = 1198; this.match(SqlBaseParser.T__3); - this.state = 1023; + this.state = 1199; this.selectItem(); } - this.state = 1028; + this.state = 1204; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,126,this._ctx); + _alt = this._interp.adaptivePredict(this._input,144,this._ctx); } - this.state = 1038; + this.state = 1214; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,128,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,146,this._ctx); if(la_===1) { - this.state = 1029; + this.state = 1205; this.match(SqlBaseParser.FROM); - this.state = 1030; + this.state = 1206; this.relation(0); - this.state = 1035; + this.state = 1211; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,127,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,145,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 1031; + this.state = 1207; this.match(SqlBaseParser.T__3); - this.state = 1032; + this.state = 1208; this.relation(0); } - this.state = 1037; + this.state = 1213; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,127,this._ctx); + _alt = this._interp.adaptivePredict(this._input,145,this._ctx); } } - this.state = 1042; + this.state = 1218; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,129,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,147,this._ctx); if(la_===1) { - this.state = 1040; + this.state = 1216; this.match(SqlBaseParser.WHERE); - this.state = 1041; + this.state = 1217; localctx.where = this.booleanExpression(0); } - this.state = 1047; + this.state = 1223; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,130,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,148,this._ctx); if(la_===1) { - this.state = 1044; + this.state = 1220; this.match(SqlBaseParser.GROUP); - this.state = 1045; + this.state = 1221; this.match(SqlBaseParser.BY); - this.state = 1046; + this.state = 1222; this.groupBy(); } - this.state = 1051; + this.state = 1227; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,131,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,149,this._ctx); if(la_===1) { - this.state = 1049; + this.state = 1225; this.match(SqlBaseParser.HAVING); - this.state = 1050; + this.state = 1226; localctx.having = this.booleanExpression(0); } @@ -4297,32 +4711,32 @@ export default class SqlBaseParser extends antlr4.Parser { groupBy() { let localctx = new GroupByContext(this, this._ctx, this.state); - this.enterRule(localctx, 56, SqlBaseParser.RULE_groupBy); + this.enterRule(localctx, 58, SqlBaseParser.RULE_groupBy); try { this.enterOuterAlt(localctx, 1); - this.state = 1054; + this.state = 1230; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,132,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,150,this._ctx); if(la_===1) { - this.state = 1053; + this.state = 1229; this.setQuantifier(); } - this.state = 1056; + this.state = 1232; this.groupingElement(); - this.state = 1061; + this.state = 1237; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,133,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,151,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 1057; + this.state = 1233; this.match(SqlBaseParser.T__3); - this.state = 1058; + this.state = 1234; this.groupingElement(); } - this.state = 1063; + this.state = 1239; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,133,this._ctx); + _alt = this._interp.adaptivePredict(this._input,151,this._ctx); } } catch (re) { @@ -4343,106 +4757,106 @@ export default class SqlBaseParser extends antlr4.Parser { groupingElement() { let localctx = new GroupingElementContext(this, this._ctx, this.state); - this.enterRule(localctx, 58, SqlBaseParser.RULE_groupingElement); + this.enterRule(localctx, 60, SqlBaseParser.RULE_groupingElement); var _la = 0; try { - this.state = 1104; + this.state = 1280; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,139,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,157,this._ctx); switch(la_) { case 1: localctx = new SingleGroupingSetContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1064; + this.state = 1240; this.groupingSet(); break; case 2: localctx = new RollupContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1065; + this.state = 1241; this.match(SqlBaseParser.ROLLUP); - this.state = 1066; + this.state = 1242; this.match(SqlBaseParser.T__1); - this.state = 1075; + this.state = 1251; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4282080292) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2695561095) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2514219775) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 4292867547) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794175) !== 0) || ((((_la - 227)) & ~0x1f) === 0 && ((1 << (_la - 227)) & 327619) !== 0)) { - this.state = 1067; + if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4252720164) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2539125919) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 3690135461) !== 0) || ((((_la - 96)) & ~0x1f) === 0 && ((1 << (_la - 96)) & 4289705621) !== 0) || ((((_la - 128)) & ~0x1f) === 0 && ((1 << (_la - 128)) & 3752263675) !== 0) || ((((_la - 160)) & ~0x1f) === 0 && ((1 << (_la - 160)) & 4159635439) !== 0) || ((((_la - 192)) & ~0x1f) === 0 && ((1 << (_la - 192)) & 3607068159) !== 0) || ((((_la - 224)) & ~0x1f) === 0 && ((1 << (_la - 224)) & 4231019637) !== 0) || ((((_la - 256)) & ~0x1f) === 0 && ((1 << (_la - 256)) & 79) !== 0)) { + this.state = 1243; this.expression(); - this.state = 1072; + this.state = 1248; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1068; + this.state = 1244; this.match(SqlBaseParser.T__3); - this.state = 1069; + this.state = 1245; this.expression(); - this.state = 1074; + this.state = 1250; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 1077; + this.state = 1253; this.match(SqlBaseParser.T__2); break; case 3: localctx = new CubeContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 1078; + this.state = 1254; this.match(SqlBaseParser.CUBE); - this.state = 1079; + this.state = 1255; this.match(SqlBaseParser.T__1); - this.state = 1088; + this.state = 1264; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4282080292) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2695561095) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2514219775) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 4292867547) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794175) !== 0) || ((((_la - 227)) & ~0x1f) === 0 && ((1 << (_la - 227)) & 327619) !== 0)) { - this.state = 1080; + if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4252720164) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2539125919) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 3690135461) !== 0) || ((((_la - 96)) & ~0x1f) === 0 && ((1 << (_la - 96)) & 4289705621) !== 0) || ((((_la - 128)) & ~0x1f) === 0 && ((1 << (_la - 128)) & 3752263675) !== 0) || ((((_la - 160)) & ~0x1f) === 0 && ((1 << (_la - 160)) & 4159635439) !== 0) || ((((_la - 192)) & ~0x1f) === 0 && ((1 << (_la - 192)) & 3607068159) !== 0) || ((((_la - 224)) & ~0x1f) === 0 && ((1 << (_la - 224)) & 4231019637) !== 0) || ((((_la - 256)) & ~0x1f) === 0 && ((1 << (_la - 256)) & 79) !== 0)) { + this.state = 1256; this.expression(); - this.state = 1085; + this.state = 1261; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1081; + this.state = 1257; this.match(SqlBaseParser.T__3); - this.state = 1082; + this.state = 1258; this.expression(); - this.state = 1087; + this.state = 1263; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 1090; + this.state = 1266; this.match(SqlBaseParser.T__2); break; case 4: localctx = new MultipleGroupingSetsContext(this, localctx); this.enterOuterAlt(localctx, 4); - this.state = 1091; + this.state = 1267; this.match(SqlBaseParser.GROUPING); - this.state = 1092; + this.state = 1268; this.match(SqlBaseParser.SETS); - this.state = 1093; + this.state = 1269; this.match(SqlBaseParser.T__1); - this.state = 1094; + this.state = 1270; this.groupingSet(); - this.state = 1099; + this.state = 1275; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1095; + this.state = 1271; this.match(SqlBaseParser.T__3); - this.state = 1096; + this.state = 1272; this.groupingSet(); - this.state = 1101; + this.state = 1277; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1102; + this.state = 1278; this.match(SqlBaseParser.T__2); break; @@ -4465,44 +4879,44 @@ export default class SqlBaseParser extends antlr4.Parser { groupingSet() { let localctx = new GroupingSetContext(this, this._ctx, this.state); - this.enterRule(localctx, 60, SqlBaseParser.RULE_groupingSet); + this.enterRule(localctx, 62, SqlBaseParser.RULE_groupingSet); var _la = 0; try { - this.state = 1119; + this.state = 1295; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,142,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,160,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 1106; + this.state = 1282; this.match(SqlBaseParser.T__1); - this.state = 1115; + this.state = 1291; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4282080292) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2695561095) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2514219775) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 4292867547) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794175) !== 0) || ((((_la - 227)) & ~0x1f) === 0 && ((1 << (_la - 227)) & 327619) !== 0)) { - this.state = 1107; + if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4252720164) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2539125919) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 3690135461) !== 0) || ((((_la - 96)) & ~0x1f) === 0 && ((1 << (_la - 96)) & 4289705621) !== 0) || ((((_la - 128)) & ~0x1f) === 0 && ((1 << (_la - 128)) & 3752263675) !== 0) || ((((_la - 160)) & ~0x1f) === 0 && ((1 << (_la - 160)) & 4159635439) !== 0) || ((((_la - 192)) & ~0x1f) === 0 && ((1 << (_la - 192)) & 3607068159) !== 0) || ((((_la - 224)) & ~0x1f) === 0 && ((1 << (_la - 224)) & 4231019637) !== 0) || ((((_la - 256)) & ~0x1f) === 0 && ((1 << (_la - 256)) & 79) !== 0)) { + this.state = 1283; this.expression(); - this.state = 1112; + this.state = 1288; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1108; + this.state = 1284; this.match(SqlBaseParser.T__3); - this.state = 1109; + this.state = 1285; this.expression(); - this.state = 1114; + this.state = 1290; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 1117; + this.state = 1293; this.match(SqlBaseParser.T__2); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 1118; + this.state = 1294; this.expression(); break; @@ -4525,27 +4939,27 @@ export default class SqlBaseParser extends antlr4.Parser { namedQuery() { let localctx = new NamedQueryContext(this, this._ctx, this.state); - this.enterRule(localctx, 62, SqlBaseParser.RULE_namedQuery); + this.enterRule(localctx, 64, SqlBaseParser.RULE_namedQuery); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1121; + this.state = 1297; localctx.name = this.identifier(); - this.state = 1123; + this.state = 1299; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===2) { - this.state = 1122; + this.state = 1298; this.columnAliases(); } - this.state = 1125; + this.state = 1301; this.match(SqlBaseParser.AS); - this.state = 1126; + this.state = 1302; this.match(SqlBaseParser.T__1); - this.state = 1127; + this.state = 1303; this.query(); - this.state = 1128; + this.state = 1304; this.match(SqlBaseParser.T__2); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4565,13 +4979,13 @@ export default class SqlBaseParser extends antlr4.Parser { setQuantifier() { let localctx = new SetQuantifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 64, SqlBaseParser.RULE_setQuantifier); + this.enterRule(localctx, 66, SqlBaseParser.RULE_setQuantifier); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1130; + this.state = 1306; _la = this._input.LA(1); - if(!(_la===12 || _la===54)) { + if(!(_la===12 || _la===59)) { this._errHandler.recoverInline(this); } else { @@ -4596,31 +5010,31 @@ export default class SqlBaseParser extends antlr4.Parser { selectItem() { let localctx = new SelectItemContext(this, this._ctx, this.state); - this.enterRule(localctx, 66, SqlBaseParser.RULE_selectItem); + this.enterRule(localctx, 68, SqlBaseParser.RULE_selectItem); var _la = 0; try { - this.state = 1144; + this.state = 1320; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,146,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,164,this._ctx); switch(la_) { case 1: localctx = new SelectSingleContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1132; + this.state = 1308; this.expression(); - this.state = 1137; + this.state = 1313; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,145,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,163,this._ctx); if(la_===1) { - this.state = 1134; + this.state = 1310; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===18) { - this.state = 1133; + this.state = 1309; this.match(SqlBaseParser.AS); } - this.state = 1136; + this.state = 1312; this.identifier(); } @@ -4629,18 +5043,18 @@ export default class SqlBaseParser extends antlr4.Parser { case 2: localctx = new SelectAllContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1139; + this.state = 1315; this.qualifiedName(); - this.state = 1140; + this.state = 1316; this.match(SqlBaseParser.T__0); - this.state = 1141; + this.state = 1317; this.match(SqlBaseParser.ASTERISK); break; case 3: localctx = new SelectAllContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 1143; + this.state = 1319; this.match(SqlBaseParser.ASTERISK); break; @@ -4668,20 +5082,20 @@ export default class SqlBaseParser extends antlr4.Parser { const _parentState = this.state; let localctx = new RelationContext(this, this._ctx, _parentState); let _prevctx = localctx; - const _startState = 68; - this.enterRecursionRule(localctx, 68, SqlBaseParser.RULE_relation, _p); + const _startState = 70; + this.enterRecursionRule(localctx, 70, SqlBaseParser.RULE_relation, _p); try { this.enterOuterAlt(localctx, 1); localctx = new RelationDefaultContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1147; + this.state = 1323; this.sampledRelation(); this._ctx.stop = this._input.LT(-1); - this.state = 1167; + this.state = 1343; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,148,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,166,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { @@ -4691,52 +5105,52 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new JoinRelationContext(this, new RelationContext(this, _parentctx, _parentState)); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_relation); - this.state = 1149; + this.state = 1325; if (!( this.precpred(this._ctx, 2))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)"); } - this.state = 1163; + this.state = 1339; this._errHandler.sync(this); switch(this._input.LA(1)) { - case 37: - this.state = 1150; + case 40: + this.state = 1326; this.match(SqlBaseParser.CROSS); - this.state = 1151; + this.state = 1327; this.match(SqlBaseParser.JOIN); - this.state = 1152; + this.state = 1328; localctx.right = this.sampledRelation(); break; - case 75: - case 91: - case 102: - case 106: - case 161: - this.state = 1153; + case 83: + case 99: + case 110: + case 116: + case 176: + this.state = 1329; this.joinType(); - this.state = 1154; + this.state = 1330; this.match(SqlBaseParser.JOIN); - this.state = 1155; + this.state = 1331; localctx.rightRelation = this.relation(0); - this.state = 1156; + this.state = 1332; this.joinCriteria(); break; - case 118: - this.state = 1158; + case 130: + this.state = 1334; this.match(SqlBaseParser.NATURAL); - this.state = 1159; + this.state = 1335; this.joinType(); - this.state = 1160; + this.state = 1336; this.match(SqlBaseParser.JOIN); - this.state = 1161; + this.state = 1337; localctx.right = this.sampledRelation(); break; default: throw new antlr4.error.NoViableAltException(this); } } - this.state = 1169; + this.state = 1345; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,148,this._ctx); + _alt = this._interp.adaptivePredict(this._input,166,this._ctx); } } catch( error) { @@ -4757,59 +5171,59 @@ export default class SqlBaseParser extends antlr4.Parser { joinType() { let localctx = new JoinTypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 70, SqlBaseParser.RULE_joinType); + this.enterRule(localctx, 72, SqlBaseParser.RULE_joinType); var _la = 0; try { - this.state = 1185; + this.state = 1361; this._errHandler.sync(this); switch(this._input.LA(1)) { - case 91: - case 102: + case 99: + case 110: this.enterOuterAlt(localctx, 1); - this.state = 1171; + this.state = 1347; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===91) { - this.state = 1170; + if(_la===99) { + this.state = 1346; this.match(SqlBaseParser.INNER); } break; - case 106: + case 116: this.enterOuterAlt(localctx, 2); - this.state = 1173; + this.state = 1349; this.match(SqlBaseParser.LEFT); - this.state = 1175; + this.state = 1351; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===138) { - this.state = 1174; + if(_la===150) { + this.state = 1350; this.match(SqlBaseParser.OUTER); } break; - case 161: + case 176: this.enterOuterAlt(localctx, 3); - this.state = 1177; + this.state = 1353; this.match(SqlBaseParser.RIGHT); - this.state = 1179; + this.state = 1355; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===138) { - this.state = 1178; + if(_la===150) { + this.state = 1354; this.match(SqlBaseParser.OUTER); } break; - case 75: + case 83: this.enterOuterAlt(localctx, 4); - this.state = 1181; + this.state = 1357; this.match(SqlBaseParser.FULL); - this.state = 1183; + this.state = 1359; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===138) { - this.state = 1182; + if(_la===150) { + this.state = 1358; this.match(SqlBaseParser.OUTER); } @@ -4835,40 +5249,40 @@ export default class SqlBaseParser extends antlr4.Parser { joinCriteria() { let localctx = new JoinCriteriaContext(this, this._ctx, this.state); - this.enterRule(localctx, 72, SqlBaseParser.RULE_joinCriteria); + this.enterRule(localctx, 74, SqlBaseParser.RULE_joinCriteria); var _la = 0; try { - this.state = 1201; + this.state = 1377; this._errHandler.sync(this); switch(this._input.LA(1)) { - case 132: + case 144: this.enterOuterAlt(localctx, 1); - this.state = 1187; + this.state = 1363; this.match(SqlBaseParser.ON); - this.state = 1188; + this.state = 1364; this.booleanExpression(0); break; - case 208: + case 225: this.enterOuterAlt(localctx, 2); - this.state = 1189; + this.state = 1365; this.match(SqlBaseParser.USING); - this.state = 1190; + this.state = 1366; this.match(SqlBaseParser.T__1); - this.state = 1191; + this.state = 1367; this.identifier(); - this.state = 1196; + this.state = 1372; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1192; + this.state = 1368; this.match(SqlBaseParser.T__3); - this.state = 1193; + this.state = 1369; this.identifier(); - this.state = 1198; + this.state = 1374; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1199; + this.state = 1375; this.match(SqlBaseParser.T__2); break; default: @@ -4892,24 +5306,24 @@ export default class SqlBaseParser extends antlr4.Parser { sampledRelation() { let localctx = new SampledRelationContext(this, this._ctx, this.state); - this.enterRule(localctx, 74, SqlBaseParser.RULE_sampledRelation); + this.enterRule(localctx, 76, SqlBaseParser.RULE_sampledRelation); try { this.enterOuterAlt(localctx, 1); - this.state = 1203; + this.state = 1379; this.aliasedRelation(); - this.state = 1210; + this.state = 1386; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,156,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,174,this._ctx); if(la_===1) { - this.state = 1204; + this.state = 1380; this.match(SqlBaseParser.TABLESAMPLE); - this.state = 1205; + this.state = 1381; this.sampleType(); - this.state = 1206; + this.state = 1382; this.match(SqlBaseParser.T__1); - this.state = 1207; + this.state = 1383; localctx.percentage = this.expression(); - this.state = 1208; + this.state = 1384; this.match(SqlBaseParser.T__2); } @@ -4931,13 +5345,13 @@ export default class SqlBaseParser extends antlr4.Parser { sampleType() { let localctx = new SampleTypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 76, SqlBaseParser.RULE_sampleType); + this.enterRule(localctx, 78, SqlBaseParser.RULE_sampleType); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1212; + this.state = 1388; _la = this._input.LA(1); - if(!(_la===21 || _la===183)) { + if(!(_la===22 || _la===198)) { this._errHandler.recoverInline(this); } else { @@ -4962,31 +5376,31 @@ export default class SqlBaseParser extends antlr4.Parser { aliasedRelation() { let localctx = new AliasedRelationContext(this, this._ctx, this.state); - this.enterRule(localctx, 78, SqlBaseParser.RULE_aliasedRelation); + this.enterRule(localctx, 80, SqlBaseParser.RULE_aliasedRelation); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1214; + this.state = 1390; this.relationPrimary(); - this.state = 1222; + this.state = 1398; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,159,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,177,this._ctx); if(la_===1) { - this.state = 1216; + this.state = 1392; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===18) { - this.state = 1215; + this.state = 1391; this.match(SqlBaseParser.AS); } - this.state = 1218; + this.state = 1394; this.identifier(); - this.state = 1220; + this.state = 1396; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,158,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,176,this._ctx); if(la_===1) { - this.state = 1219; + this.state = 1395; this.columnAliases(); } @@ -5010,27 +5424,27 @@ export default class SqlBaseParser extends antlr4.Parser { columnAliases() { let localctx = new ColumnAliasesContext(this, this._ctx, this.state); - this.enterRule(localctx, 80, SqlBaseParser.RULE_columnAliases); + this.enterRule(localctx, 82, SqlBaseParser.RULE_columnAliases); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1224; + this.state = 1400; this.match(SqlBaseParser.T__1); - this.state = 1225; + this.state = 1401; this.identifier(); - this.state = 1230; + this.state = 1406; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1226; + this.state = 1402; this.match(SqlBaseParser.T__3); - this.state = 1227; + this.state = 1403; this.identifier(); - this.state = 1232; + this.state = 1408; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1233; + this.state = 1409; this.match(SqlBaseParser.T__2); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5050,23 +5464,23 @@ export default class SqlBaseParser extends antlr4.Parser { relationPrimary() { let localctx = new RelationPrimaryContext(this, this._ctx, this.state); - this.enterRule(localctx, 82, SqlBaseParser.RULE_relationPrimary); + this.enterRule(localctx, 84, SqlBaseParser.RULE_relationPrimary); var _la = 0; try { - this.state = 1267; + this.state = 1448; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,164,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,182,this._ctx); switch(la_) { case 1: localctx = new TableNameContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1235; + this.state = 1411; this.qualifiedName(); - this.state = 1237; + this.state = 1413; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,161,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,179,this._ctx); if(la_===1) { - this.state = 1236; + this.state = 1412; this.tableVersionExpression(); } @@ -5075,44 +5489,44 @@ export default class SqlBaseParser extends antlr4.Parser { case 2: localctx = new SubqueryRelationContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1239; + this.state = 1415; this.match(SqlBaseParser.T__1); - this.state = 1240; + this.state = 1416; this.query(); - this.state = 1241; + this.state = 1417; this.match(SqlBaseParser.T__2); break; case 3: localctx = new UnnestContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 1243; + this.state = 1419; this.match(SqlBaseParser.UNNEST); - this.state = 1244; + this.state = 1420; this.match(SqlBaseParser.T__1); - this.state = 1245; + this.state = 1421; this.expression(); - this.state = 1250; + this.state = 1426; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1246; + this.state = 1422; this.match(SqlBaseParser.T__3); - this.state = 1247; + this.state = 1423; this.expression(); - this.state = 1252; + this.state = 1428; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1253; + this.state = 1429; this.match(SqlBaseParser.T__2); - this.state = 1256; + this.state = 1432; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,163,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,181,this._ctx); if(la_===1) { - this.state = 1254; + this.state = 1430; this.match(SqlBaseParser.WITH); - this.state = 1255; + this.state = 1431; this.match(SqlBaseParser.ORDINALITY); } @@ -5121,24 +5535,37 @@ export default class SqlBaseParser extends antlr4.Parser { case 4: localctx = new LateralContext(this, localctx); this.enterOuterAlt(localctx, 4); - this.state = 1258; + this.state = 1434; this.match(SqlBaseParser.LATERAL); - this.state = 1259; + this.state = 1435; this.match(SqlBaseParser.T__1); - this.state = 1260; + this.state = 1436; this.query(); - this.state = 1261; + this.state = 1437; this.match(SqlBaseParser.T__2); break; case 5: localctx = new ParenthesizedRelationContext(this, localctx); this.enterOuterAlt(localctx, 5); - this.state = 1263; + this.state = 1439; this.match(SqlBaseParser.T__1); - this.state = 1264; + this.state = 1440; this.relation(0); - this.state = 1265; + this.state = 1441; + this.match(SqlBaseParser.T__2); + break; + + case 6: + localctx = new TableFunctionInvocationContext(this, localctx); + this.enterOuterAlt(localctx, 6); + this.state = 1443; + this.match(SqlBaseParser.TABLE); + this.state = 1444; + this.match(SqlBaseParser.T__1); + this.state = 1445; + this.tableFunctionCall(); + this.state = 1446; this.match(SqlBaseParser.T__2); break; @@ -5161,10 +5588,10 @@ export default class SqlBaseParser extends antlr4.Parser { expression() { let localctx = new ExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 84, SqlBaseParser.RULE_expression); + this.enterRule(localctx, 86, SqlBaseParser.RULE_expression); try { this.enterOuterAlt(localctx, 1); - this.state = 1269; + this.state = 1450; this.booleanExpression(0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5189,11 +5616,11 @@ export default class SqlBaseParser extends antlr4.Parser { const _parentState = this.state; let localctx = new BooleanExpressionContext(this, this._ctx, _parentState); let _prevctx = localctx; - const _startState = 86; - this.enterRecursionRule(localctx, 86, SqlBaseParser.RULE_booleanExpression, _p); + const _startState = 88; + this.enterRecursionRule(localctx, 88, SqlBaseParser.RULE_booleanExpression, _p); try { this.enterOuterAlt(localctx, 1); - this.state = 1278; + this.state = 1459; this._errHandler.sync(this); switch(this._input.LA(1)) { case 2: @@ -5207,8 +5634,8 @@ export default class SqlBaseParser extends antlr4.Parser { case 19: case 20: case 21: + case 22: case 24: - case 25: case 26: case 27: case 28: @@ -5218,60 +5645,61 @@ export default class SqlBaseParser extends antlr4.Parser { case 32: case 33: case 34: + case 35: + case 36: case 39: - case 40: - case 41: case 42: case 43: case 44: case 45: case 46: case 47: + case 48: case 49: - case 51: - case 53: - case 55: - case 61: + case 50: + case 52: + case 54: + case 56: + case 57: + case 58: + case 60: case 63: case 64: - case 65: case 66: - case 67: - case 68: case 69: - case 70: case 71: + case 72: case 73: + case 74: + case 75: case 76: case 77: case 78: case 79: - case 80: case 81: - case 83: case 84: + case 85: case 86: case 87: case 88: - case 90: + case 89: + case 91: case 92: + case 94: case 95: - case 97: + case 96: case 98: case 100: - case 101: case 103: - case 104: case 105: - case 107: + case 106: + case 108: case 109: - case 110: case 111: case 112: case 113: case 114: case 115: - case 116: case 117: case 119: case 120: @@ -5280,23 +5708,24 @@ export default class SqlBaseParser extends antlr4.Parser { case 123: case 124: case 125: + case 126: case 127: case 128: case 129: - case 130: case 131: + case 132: case 133: case 134: + case 135: + case 136: case 137: case 139: case 140: case 141: case 142: case 143: - case 144: + case 145: case 146: - case 147: - case 148: case 149: case 151: case 152: @@ -5304,36 +5733,36 @@ export default class SqlBaseParser extends antlr4.Parser { case 154: case 155: case 156: - case 157: case 158: case 159: case 160: + case 161: case 162: case 163: - case 164: + case 165: case 166: case 167: case 168: case 169: case 170: case 171: + case 172: case 173: case 174: case 175: - case 176: case 177: case 178: case 179: - case 180: case 181: case 182: case 183: case 184: case 185: - case 187: + case 186: case 188: case 189: case 190: + case 191: case 192: case 193: case 194: @@ -5342,84 +5771,99 @@ export default class SqlBaseParser extends antlr4.Parser { case 197: case 198: case 199: - case 201: + case 200: case 202: + case 203: + case 204: case 205: case 206: - case 207: + case 208: case 209: + case 210: case 211: case 212: case 213: + case 214: + case 215: case 217: case 218: - case 219: case 220: - case 227: + case 222: + case 223: + case 224: + case 226: case 228: - case 233: + case 229: + case 230: case 234: case 235: case 236: case 237: - case 238: - case 239: - case 240: - case 241: - case 242: + case 244: case 245: + case 250: + case 251: + case 252: + case 253: + case 254: + case 255: + case 256: + case 257: + case 258: + case 259: + case 262: localctx = new PredicatedContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1272; + this.state = 1453; localctx._valueExpression = this.valueExpression(0); - this.state = 1274; + this.state = 1455; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,165,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,183,this._ctx); if(la_===1) { - this.state = 1273; + this.state = 1454; this.predicate(localctx._valueExpression); } break; - case 126: + case 138: localctx = new LogicalNotContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1276; + this.state = 1457; this.match(SqlBaseParser.NOT); - this.state = 1277; + this.state = 1458; this.booleanExpression(3); break; default: throw new antlr4.error.NoViableAltException(this); } this._ctx.stop = this._input.LT(-1); - this.state = 1288; + this.state = 1469; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,168,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,186,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 1286; + this.state = 1467; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,167,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,185,this._ctx); switch(la_) { case 1: localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_booleanExpression); - this.state = 1280; + this.state = 1461; if (!( this.precpred(this._ctx, 2))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)"); } - this.state = 1281; + this.state = 1462; localctx.operator = this.match(SqlBaseParser.AND); - this.state = 1282; + this.state = 1463; localctx.right = this.booleanExpression(3); break; @@ -5427,21 +5871,21 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_booleanExpression); - this.state = 1283; + this.state = 1464; if (!( this.precpred(this._ctx, 1))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 1284; + this.state = 1465; localctx.operator = this.match(SqlBaseParser.OR); - this.state = 1285; + this.state = 1466; localctx.right = this.booleanExpression(2); break; } } - this.state = 1290; + this.state = 1471; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,168,this._ctx); + _alt = this._interp.adaptivePredict(this._input,186,this._ctx); } } catch( error) { @@ -5462,134 +5906,134 @@ export default class SqlBaseParser extends antlr4.Parser { predicate(value) { let localctx = new PredicateContext(this, this._ctx, this.state, value); - this.enterRule(localctx, 88, SqlBaseParser.RULE_predicate); + this.enterRule(localctx, 90, SqlBaseParser.RULE_predicate); var _la = 0; try { - this.state = 1352; + this.state = 1533; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,177,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,195,this._ctx); switch(la_) { case 1: localctx = new ComparisonContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1291; + this.state = 1472; this.comparisonOperator(); - this.state = 1292; + this.state = 1473; localctx.right = this.valueExpression(0); break; case 2: localctx = new QuantifiedComparisonContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1294; + this.state = 1475; this.comparisonOperator(); - this.state = 1295; + this.state = 1476; this.comparisonQuantifier(); - this.state = 1296; + this.state = 1477; this.match(SqlBaseParser.T__1); - this.state = 1297; + this.state = 1478; this.query(); - this.state = 1298; + this.state = 1479; this.match(SqlBaseParser.T__2); break; case 3: localctx = new BetweenContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 1301; + this.state = 1482; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===126) { - this.state = 1300; + if(_la===138) { + this.state = 1481; this.match(SqlBaseParser.NOT); } - this.state = 1303; + this.state = 1484; this.match(SqlBaseParser.BETWEEN); - this.state = 1304; + this.state = 1485; localctx.lower = this.valueExpression(0); - this.state = 1305; + this.state = 1486; this.match(SqlBaseParser.AND); - this.state = 1306; + this.state = 1487; localctx.upper = this.valueExpression(0); break; case 4: localctx = new InListContext(this, localctx); this.enterOuterAlt(localctx, 4); - this.state = 1309; + this.state = 1490; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===126) { - this.state = 1308; + if(_la===138) { + this.state = 1489; this.match(SqlBaseParser.NOT); } - this.state = 1311; + this.state = 1492; this.match(SqlBaseParser.IN); - this.state = 1312; + this.state = 1493; this.match(SqlBaseParser.T__1); - this.state = 1313; + this.state = 1494; this.expression(); - this.state = 1318; + this.state = 1499; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1314; + this.state = 1495; this.match(SqlBaseParser.T__3); - this.state = 1315; + this.state = 1496; this.expression(); - this.state = 1320; + this.state = 1501; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1321; + this.state = 1502; this.match(SqlBaseParser.T__2); break; case 5: localctx = new InSubqueryContext(this, localctx); this.enterOuterAlt(localctx, 5); - this.state = 1324; + this.state = 1505; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===126) { - this.state = 1323; + if(_la===138) { + this.state = 1504; this.match(SqlBaseParser.NOT); } - this.state = 1326; + this.state = 1507; this.match(SqlBaseParser.IN); - this.state = 1327; + this.state = 1508; this.match(SqlBaseParser.T__1); - this.state = 1328; + this.state = 1509; this.query(); - this.state = 1329; + this.state = 1510; this.match(SqlBaseParser.T__2); break; case 6: localctx = new LikeContext(this, localctx); this.enterOuterAlt(localctx, 6); - this.state = 1332; + this.state = 1513; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===126) { - this.state = 1331; + if(_la===138) { + this.state = 1512; this.match(SqlBaseParser.NOT); } - this.state = 1334; + this.state = 1515; this.match(SqlBaseParser.LIKE); - this.state = 1335; + this.state = 1516; localctx.pattern = this.valueExpression(0); - this.state = 1338; + this.state = 1519; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,174,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,192,this._ctx); if(la_===1) { - this.state = 1336; + this.state = 1517; this.match(SqlBaseParser.ESCAPE); - this.state = 1337; + this.state = 1518; localctx.escape = this.valueExpression(0); } @@ -5598,38 +6042,38 @@ export default class SqlBaseParser extends antlr4.Parser { case 7: localctx = new NullPredicateContext(this, localctx); this.enterOuterAlt(localctx, 7); - this.state = 1340; + this.state = 1521; this.match(SqlBaseParser.IS); - this.state = 1342; + this.state = 1523; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===126) { - this.state = 1341; + if(_la===138) { + this.state = 1522; this.match(SqlBaseParser.NOT); } - this.state = 1344; + this.state = 1525; this.match(SqlBaseParser.NULL); break; case 8: localctx = new DistinctFromContext(this, localctx); this.enterOuterAlt(localctx, 8); - this.state = 1345; + this.state = 1526; this.match(SqlBaseParser.IS); - this.state = 1347; + this.state = 1528; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===126) { - this.state = 1346; + if(_la===138) { + this.state = 1527; this.match(SqlBaseParser.NOT); } - this.state = 1349; + this.state = 1530; this.match(SqlBaseParser.DISTINCT); - this.state = 1350; + this.state = 1531; this.match(SqlBaseParser.FROM); - this.state = 1351; + this.state = 1532; localctx.right = this.valueExpression(0); break; @@ -5657,12 +6101,12 @@ export default class SqlBaseParser extends antlr4.Parser { const _parentState = this.state; let localctx = new ValueExpressionContext(this, this._ctx, _parentState); let _prevctx = localctx; - const _startState = 90; - this.enterRecursionRule(localctx, 90, SqlBaseParser.RULE_valueExpression, _p); + const _startState = 92; + this.enterRecursionRule(localctx, 92, SqlBaseParser.RULE_valueExpression, _p); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1358; + this.state = 1539; this._errHandler.sync(this); switch(this._input.LA(1)) { case 2: @@ -5676,8 +6120,8 @@ export default class SqlBaseParser extends antlr4.Parser { case 19: case 20: case 21: + case 22: case 24: - case 25: case 26: case 27: case 28: @@ -5687,60 +6131,61 @@ export default class SqlBaseParser extends antlr4.Parser { case 32: case 33: case 34: + case 35: + case 36: case 39: - case 40: - case 41: case 42: case 43: case 44: case 45: case 46: case 47: + case 48: case 49: - case 51: - case 53: - case 55: - case 61: + case 50: + case 52: + case 54: + case 56: + case 57: + case 58: + case 60: case 63: case 64: - case 65: case 66: - case 67: - case 68: case 69: - case 70: case 71: + case 72: case 73: + case 74: + case 75: case 76: case 77: case 78: case 79: - case 80: case 81: - case 83: case 84: + case 85: case 86: case 87: case 88: - case 90: + case 89: + case 91: case 92: + case 94: case 95: - case 97: + case 96: case 98: case 100: - case 101: case 103: - case 104: case 105: - case 107: + case 106: + case 108: case 109: - case 110: case 111: case 112: case 113: case 114: case 115: - case 116: case 117: case 119: case 120: @@ -5749,23 +6194,24 @@ export default class SqlBaseParser extends antlr4.Parser { case 123: case 124: case 125: + case 126: case 127: case 128: case 129: - case 130: case 131: + case 132: case 133: case 134: + case 135: + case 136: case 137: case 139: case 140: case 141: case 142: case 143: - case 144: + case 145: case 146: - case 147: - case 148: case 149: case 151: case 152: @@ -5773,36 +6219,36 @@ export default class SqlBaseParser extends antlr4.Parser { case 154: case 155: case 156: - case 157: case 158: case 159: case 160: + case 161: case 162: case 163: - case 164: + case 165: case 166: case 167: case 168: case 169: case 170: case 171: + case 172: case 173: case 174: case 175: - case 176: case 177: case 178: case 179: - case 180: case 181: case 182: case 183: case 184: case 185: - case 187: + case 186: case 188: case 189: case 190: + case 191: case 192: case 193: case 194: @@ -5811,91 +6257,106 @@ export default class SqlBaseParser extends antlr4.Parser { case 197: case 198: case 199: - case 201: + case 200: case 202: + case 203: + case 204: case 205: case 206: - case 207: + case 208: case 209: + case 210: case 211: case 212: case 213: + case 214: + case 215: case 217: case 218: - case 219: case 220: - case 233: + case 222: + case 223: + case 224: + case 226: + case 228: + case 229: + case 230: case 234: case 235: case 236: case 237: - case 238: - case 239: - case 240: - case 241: - case 242: - case 245: + case 250: + case 251: + case 252: + case 253: + case 254: + case 255: + case 256: + case 257: + case 258: + case 259: + case 262: localctx = new ValueExpressionDefaultContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1355; + this.state = 1536; this.primaryExpression(0); break; - case 227: - case 228: + case 244: + case 245: localctx = new ArithmeticUnaryContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1356; + this.state = 1537; localctx.operator = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===227 || _la===228)) { + if(!(_la===244 || _la===245)) { localctx.operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1357; + this.state = 1538; this.valueExpression(4); break; default: throw new antlr4.error.NoViableAltException(this); } this._ctx.stop = this._input.LT(-1); - this.state = 1374; + this.state = 1555; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,180,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,198,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 1372; + this.state = 1553; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,179,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,197,this._ctx); switch(la_) { case 1: localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_valueExpression); - this.state = 1360; + this.state = 1541; if (!( this.precpred(this._ctx, 3))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 1361; + this.state = 1542; localctx.operator = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 229)) & ~0x1f) === 0 && ((1 << (_la - 229)) & 7) !== 0))) { + if(!(((((_la - 246)) & ~0x1f) === 0 && ((1 << (_la - 246)) & 7) !== 0))) { localctx.operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1362; + this.state = 1543; localctx.right = this.valueExpression(4); break; @@ -5903,21 +6364,21 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_valueExpression); - this.state = 1363; + this.state = 1544; if (!( this.precpred(this._ctx, 2))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)"); } - this.state = 1364; + this.state = 1545; localctx.operator = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===227 || _la===228)) { + if(!(_la===244 || _la===245)) { localctx.operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1365; + this.state = 1546; localctx.right = this.valueExpression(3); break; @@ -5925,34 +6386,34 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new ConcatenationContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_valueExpression); - this.state = 1366; + this.state = 1547; if (!( this.precpred(this._ctx, 1))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 1367; + this.state = 1548; this.match(SqlBaseParser.CONCAT); - this.state = 1368; + this.state = 1549; localctx.right = this.valueExpression(2); break; case 4: localctx = new AtTimeZoneContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_valueExpression); - this.state = 1369; + this.state = 1550; if (!( this.precpred(this._ctx, 5))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)"); } - this.state = 1370; + this.state = 1551; this.match(SqlBaseParser.AT); - this.state = 1371; + this.state = 1552; this.timeZoneSpecifier(); break; } } - this.state = 1376; + this.state = 1557; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,180,this._ctx); + _alt = this._interp.adaptivePredict(this._input,198,this._ctx); } } catch( error) { @@ -5978,21 +6439,21 @@ export default class SqlBaseParser extends antlr4.Parser { const _parentState = this.state; let localctx = new PrimaryExpressionContext(this, this._ctx, _parentState); let _prevctx = localctx; - const _startState = 92; - this.enterRecursionRule(localctx, 92, SqlBaseParser.RULE_primaryExpression, _p); + const _startState = 94; + this.enterRecursionRule(localctx, 94, SqlBaseParser.RULE_primaryExpression, _p); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1616; + this.state = 1797; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,209,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,227,this._ctx); switch(la_) { case 1: localctx = new NullLiteralContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1378; + this.state = 1559; this.match(SqlBaseParser.NULL); break; @@ -6000,7 +6461,7 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new IntervalLiteralContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1379; + this.state = 1560; this.interval(); break; @@ -6008,9 +6469,9 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new TypeConstructorContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1380; + this.state = 1561; this.identifier(); - this.state = 1381; + this.state = 1562; this.string(); break; @@ -6018,9 +6479,9 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new TypeConstructorContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1383; + this.state = 1564; this.match(SqlBaseParser.DOUBLE_PRECISION); - this.state = 1384; + this.state = 1565; this.string(); break; @@ -6028,7 +6489,7 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new NumericLiteralContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1385; + this.state = 1566; this.number(); break; @@ -6036,7 +6497,7 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new BooleanLiteralContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1386; + this.state = 1567; this.booleanValue(); break; @@ -6044,7 +6505,7 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new StringLiteralContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1387; + this.state = 1568; this.string(); break; @@ -6052,7 +6513,7 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new BinaryLiteralContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1388; + this.state = 1569; this.match(SqlBaseParser.BINARY_LITERAL); break; @@ -6060,7 +6521,7 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new ParameterContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1389; + this.state = 1570; this.match(SqlBaseParser.T__4); break; @@ -6068,17 +6529,17 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new PositionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1390; + this.state = 1571; this.match(SqlBaseParser.POSITION); - this.state = 1391; + this.state = 1572; this.match(SqlBaseParser.T__1); - this.state = 1392; + this.state = 1573; this.valueExpression(0); - this.state = 1393; + this.state = 1574; this.match(SqlBaseParser.IN); - this.state = 1394; + this.state = 1575; this.valueExpression(0); - this.state = 1395; + this.state = 1576; this.match(SqlBaseParser.T__2); break; @@ -6086,23 +6547,23 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new RowConstructorContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1397; + this.state = 1578; this.match(SqlBaseParser.T__1); - this.state = 1398; + this.state = 1579; this.expression(); - this.state = 1401; + this.state = 1582; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 1399; + this.state = 1580; this.match(SqlBaseParser.T__3); - this.state = 1400; + this.state = 1581; this.expression(); - this.state = 1403; + this.state = 1584; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===4); - this.state = 1405; + this.state = 1586; this.match(SqlBaseParser.T__2); break; @@ -6110,25 +6571,25 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new RowConstructorContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1407; + this.state = 1588; this.match(SqlBaseParser.ROW); - this.state = 1408; + this.state = 1589; this.match(SqlBaseParser.T__1); - this.state = 1409; + this.state = 1590; this.expression(); - this.state = 1414; + this.state = 1595; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1410; + this.state = 1591; this.match(SqlBaseParser.T__3); - this.state = 1411; + this.state = 1592; this.expression(); - this.state = 1416; + this.state = 1597; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1417; + this.state = 1598; this.match(SqlBaseParser.T__2); break; @@ -6136,27 +6597,27 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new FunctionCallContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1419; + this.state = 1600; this.qualifiedName(); - this.state = 1420; + this.state = 1601; this.match(SqlBaseParser.T__1); - this.state = 1421; + this.state = 1602; this.match(SqlBaseParser.ASTERISK); - this.state = 1422; + this.state = 1603; this.match(SqlBaseParser.T__2); - this.state = 1424; + this.state = 1605; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,183,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,201,this._ctx); if(la_===1) { - this.state = 1423; + this.state = 1604; this.filter(); } - this.state = 1427; + this.state = 1608; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,184,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,202,this._ctx); if(la_===1) { - this.state = 1426; + this.state = 1607; this.over(); } @@ -6166,85 +6627,85 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new FunctionCallContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1429; + this.state = 1610; this.qualifiedName(); - this.state = 1430; + this.state = 1611; this.match(SqlBaseParser.T__1); - this.state = 1442; + this.state = 1623; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4282080292) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2699755399) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2514219775) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 4292867547) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794175) !== 0) || ((((_la - 227)) & ~0x1f) === 0 && ((1 << (_la - 227)) & 327619) !== 0)) { - this.state = 1432; + if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4252720164) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2673343647) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 3690135461) !== 0) || ((((_la - 96)) & ~0x1f) === 0 && ((1 << (_la - 96)) & 4289705621) !== 0) || ((((_la - 128)) & ~0x1f) === 0 && ((1 << (_la - 128)) & 3752263675) !== 0) || ((((_la - 160)) & ~0x1f) === 0 && ((1 << (_la - 160)) & 4159635439) !== 0) || ((((_la - 192)) & ~0x1f) === 0 && ((1 << (_la - 192)) & 3607068159) !== 0) || ((((_la - 224)) & ~0x1f) === 0 && ((1 << (_la - 224)) & 4231019637) !== 0) || ((((_la - 256)) & ~0x1f) === 0 && ((1 << (_la - 256)) & 79) !== 0)) { + this.state = 1613; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,185,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,203,this._ctx); if(la_===1) { - this.state = 1431; + this.state = 1612; this.setQuantifier(); } - this.state = 1434; + this.state = 1615; this.expression(); - this.state = 1439; + this.state = 1620; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1435; + this.state = 1616; this.match(SqlBaseParser.T__3); - this.state = 1436; + this.state = 1617; this.expression(); - this.state = 1441; + this.state = 1622; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 1454; + this.state = 1635; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===136) { - this.state = 1444; + if(_la===148) { + this.state = 1625; this.match(SqlBaseParser.ORDER); - this.state = 1445; + this.state = 1626; this.match(SqlBaseParser.BY); - this.state = 1446; + this.state = 1627; this.sortItem(); - this.state = 1451; + this.state = 1632; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1447; + this.state = 1628; this.match(SqlBaseParser.T__3); - this.state = 1448; + this.state = 1629; this.sortItem(); - this.state = 1453; + this.state = 1634; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 1456; + this.state = 1637; this.match(SqlBaseParser.T__2); - this.state = 1458; + this.state = 1639; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,190,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,208,this._ctx); if(la_===1) { - this.state = 1457; + this.state = 1638; this.filter(); } - this.state = 1464; + this.state = 1645; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,192,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,210,this._ctx); if(la_===1) { - this.state = 1461; + this.state = 1642; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===88 || _la===156) { - this.state = 1460; + if(_la===96 || _la===171) { + this.state = 1641; this.nullTreatment(); } - this.state = 1463; + this.state = 1644; this.over(); } @@ -6254,11 +6715,11 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new LambdaContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1466; + this.state = 1647; this.identifier(); - this.state = 1467; + this.state = 1648; this.match(SqlBaseParser.T__5); - this.state = 1468; + this.state = 1649; this.expression(); break; @@ -6266,33 +6727,33 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new LambdaContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1470; + this.state = 1651; this.match(SqlBaseParser.T__1); - this.state = 1479; + this.state = 1660; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) === 0 && ((1 << _la) & 3879427072) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 548070023) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2513695477) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 2413794779) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794171) !== 0) || ((((_la - 239)) & ~0x1f) === 0 && ((1 << (_la - 239)) & 15) !== 0)) { - this.state = 1471; + if(((((_la - 10)) & ~0x1f) === 0 && ((1 << (_la - 10)) & 669474519) !== 0) || ((((_la - 42)) & ~0x1f) === 0 && ((1 << (_la - 42)) & 1231410629) !== 0) || ((((_la - 74)) & ~0x1f) === 0 && ((1 << (_la - 74)) & 2775907517) !== 0) || ((((_la - 106)) & ~0x1f) === 0 && ((1 << (_la - 106)) & 2130652141) !== 0) || ((((_la - 140)) & ~0x1f) === 0 && ((1 << (_la - 140)) & 4278057583) !== 0) || ((((_la - 172)) & ~0x1f) === 0 && ((1 << (_la - 172)) & 3758063343) !== 0) || ((((_la - 204)) & ~0x1f) === 0 && ((1 << (_la - 204)) & 3344789239) !== 0) || ((((_la - 236)) & ~0x1f) === 0 && ((1 << (_la - 236)) & 15728643) !== 0)) { + this.state = 1652; this.identifier(); - this.state = 1476; + this.state = 1657; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1472; + this.state = 1653; this.match(SqlBaseParser.T__3); - this.state = 1473; + this.state = 1654; this.identifier(); - this.state = 1478; + this.state = 1659; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 1481; + this.state = 1662; this.match(SqlBaseParser.T__2); - this.state = 1482; + this.state = 1663; this.match(SqlBaseParser.T__5); - this.state = 1483; + this.state = 1664; this.expression(); break; @@ -6300,11 +6761,11 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new SubqueryExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1484; + this.state = 1665; this.match(SqlBaseParser.T__1); - this.state = 1485; + this.state = 1666; this.query(); - this.state = 1486; + this.state = 1667; this.match(SqlBaseParser.T__2); break; @@ -6312,13 +6773,13 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new ExistsContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1488; + this.state = 1669; this.match(SqlBaseParser.EXISTS); - this.state = 1489; + this.state = 1670; this.match(SqlBaseParser.T__1); - this.state = 1490; + this.state = 1671; this.query(); - this.state = 1491; + this.state = 1672; this.match(SqlBaseParser.T__2); break; @@ -6326,31 +6787,31 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new SimpleCaseContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1493; + this.state = 1674; this.match(SqlBaseParser.CASE); - this.state = 1494; + this.state = 1675; this.valueExpression(0); - this.state = 1496; + this.state = 1677; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 1495; + this.state = 1676; this.whenClause(); - this.state = 1498; + this.state = 1679; this._errHandler.sync(this); _la = this._input.LA(1); - } while(_la===214); - this.state = 1502; + } while(_la===231); + this.state = 1683; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===57) { - this.state = 1500; + if(_la===62) { + this.state = 1681; this.match(SqlBaseParser.ELSE); - this.state = 1501; + this.state = 1682; localctx.elseExpression = this.expression(); } - this.state = 1504; + this.state = 1685; this.match(SqlBaseParser.END); break; @@ -6358,29 +6819,29 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new SearchedCaseContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1506; + this.state = 1687; this.match(SqlBaseParser.CASE); - this.state = 1508; + this.state = 1689; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 1507; + this.state = 1688; this.whenClause(); - this.state = 1510; + this.state = 1691; this._errHandler.sync(this); _la = this._input.LA(1); - } while(_la===214); - this.state = 1514; + } while(_la===231); + this.state = 1695; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===57) { - this.state = 1512; + if(_la===62) { + this.state = 1693; this.match(SqlBaseParser.ELSE); - this.state = 1513; + this.state = 1694; localctx.elseExpression = this.expression(); } - this.state = 1516; + this.state = 1697; this.match(SqlBaseParser.END); break; @@ -6388,17 +6849,17 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new CastContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1518; + this.state = 1699; this.match(SqlBaseParser.CAST); - this.state = 1519; + this.state = 1700; this.match(SqlBaseParser.T__1); - this.state = 1520; + this.state = 1701; this.expression(); - this.state = 1521; + this.state = 1702; this.match(SqlBaseParser.AS); - this.state = 1522; + this.state = 1703; this.type(0); - this.state = 1523; + this.state = 1704; this.match(SqlBaseParser.T__2); break; @@ -6406,17 +6867,17 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new CastContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1525; + this.state = 1706; this.match(SqlBaseParser.TRY_CAST); - this.state = 1526; + this.state = 1707; this.match(SqlBaseParser.T__1); - this.state = 1527; + this.state = 1708; this.expression(); - this.state = 1528; + this.state = 1709; this.match(SqlBaseParser.AS); - this.state = 1529; + this.state = 1710; this.type(0); - this.state = 1530; + this.state = 1711; this.match(SqlBaseParser.T__2); break; @@ -6424,31 +6885,31 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new ArrayConstructorContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1532; + this.state = 1713; this.match(SqlBaseParser.ARRAY); - this.state = 1533; + this.state = 1714; this.match(SqlBaseParser.T__6); - this.state = 1542; + this.state = 1723; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4282080292) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2695561095) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2514219775) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 4292867547) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794175) !== 0) || ((((_la - 227)) & ~0x1f) === 0 && ((1 << (_la - 227)) & 327619) !== 0)) { - this.state = 1534; + if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4252720164) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2539125919) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 3690135461) !== 0) || ((((_la - 96)) & ~0x1f) === 0 && ((1 << (_la - 96)) & 4289705621) !== 0) || ((((_la - 128)) & ~0x1f) === 0 && ((1 << (_la - 128)) & 3752263675) !== 0) || ((((_la - 160)) & ~0x1f) === 0 && ((1 << (_la - 160)) & 4159635439) !== 0) || ((((_la - 192)) & ~0x1f) === 0 && ((1 << (_la - 192)) & 3607068159) !== 0) || ((((_la - 224)) & ~0x1f) === 0 && ((1 << (_la - 224)) & 4231019637) !== 0) || ((((_la - 256)) & ~0x1f) === 0 && ((1 << (_la - 256)) & 79) !== 0)) { + this.state = 1715; this.expression(); - this.state = 1539; + this.state = 1720; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1535; + this.state = 1716; this.match(SqlBaseParser.T__3); - this.state = 1536; + this.state = 1717; this.expression(); - this.state = 1541; + this.state = 1722; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 1544; + this.state = 1725; this.match(SqlBaseParser.T__7); break; @@ -6456,7 +6917,7 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new ColumnReferenceContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1545; + this.state = 1726; this.identifier(); break; @@ -6464,7 +6925,7 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new SpecialDateTimeFunctionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1546; + this.state = 1727; localctx.name = this.match(SqlBaseParser.CURRENT_DATE); break; @@ -6472,17 +6933,17 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new SpecialDateTimeFunctionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1547; + this.state = 1728; localctx.name = this.match(SqlBaseParser.CURRENT_TIME); - this.state = 1551; + this.state = 1732; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,201,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,219,this._ctx); if(la_===1) { - this.state = 1548; + this.state = 1729; this.match(SqlBaseParser.T__1); - this.state = 1549; + this.state = 1730; localctx.precision = this.match(SqlBaseParser.INTEGER_VALUE); - this.state = 1550; + this.state = 1731; this.match(SqlBaseParser.T__2); } @@ -6492,17 +6953,17 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new SpecialDateTimeFunctionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1553; + this.state = 1734; localctx.name = this.match(SqlBaseParser.CURRENT_TIMESTAMP); - this.state = 1557; + this.state = 1738; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,202,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,220,this._ctx); if(la_===1) { - this.state = 1554; + this.state = 1735; this.match(SqlBaseParser.T__1); - this.state = 1555; + this.state = 1736; localctx.precision = this.match(SqlBaseParser.INTEGER_VALUE); - this.state = 1556; + this.state = 1737; this.match(SqlBaseParser.T__2); } @@ -6512,17 +6973,17 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new SpecialDateTimeFunctionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1559; + this.state = 1740; localctx.name = this.match(SqlBaseParser.LOCALTIME); - this.state = 1563; + this.state = 1744; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,203,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,221,this._ctx); if(la_===1) { - this.state = 1560; + this.state = 1741; this.match(SqlBaseParser.T__1); - this.state = 1561; + this.state = 1742; localctx.precision = this.match(SqlBaseParser.INTEGER_VALUE); - this.state = 1562; + this.state = 1743; this.match(SqlBaseParser.T__2); } @@ -6532,17 +6993,17 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new SpecialDateTimeFunctionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1565; + this.state = 1746; localctx.name = this.match(SqlBaseParser.LOCALTIMESTAMP); - this.state = 1569; + this.state = 1750; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,204,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,222,this._ctx); if(la_===1) { - this.state = 1566; + this.state = 1747; this.match(SqlBaseParser.T__1); - this.state = 1567; + this.state = 1748; localctx.precision = this.match(SqlBaseParser.INTEGER_VALUE); - this.state = 1568; + this.state = 1749; this.match(SqlBaseParser.T__2); } @@ -6552,7 +7013,7 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new CurrentUserContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1571; + this.state = 1752; localctx.name = this.match(SqlBaseParser.CURRENT_USER); break; @@ -6560,27 +7021,27 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new SubstringContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1572; + this.state = 1753; this.match(SqlBaseParser.SUBSTRING); - this.state = 1573; + this.state = 1754; this.match(SqlBaseParser.T__1); - this.state = 1574; + this.state = 1755; this.valueExpression(0); - this.state = 1575; + this.state = 1756; this.match(SqlBaseParser.FROM); - this.state = 1576; + this.state = 1757; this.valueExpression(0); - this.state = 1579; + this.state = 1760; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===72) { - this.state = 1577; + if(_la===80) { + this.state = 1758; this.match(SqlBaseParser.FOR); - this.state = 1578; + this.state = 1759; this.valueExpression(0); } - this.state = 1581; + this.state = 1762; this.match(SqlBaseParser.T__2); break; @@ -6588,23 +7049,23 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new NormalizeContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1583; + this.state = 1764; this.match(SqlBaseParser.NORMALIZE); - this.state = 1584; + this.state = 1765; this.match(SqlBaseParser.T__1); - this.state = 1585; + this.state = 1766; this.valueExpression(0); - this.state = 1588; + this.state = 1769; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===4) { - this.state = 1586; + this.state = 1767; this.match(SqlBaseParser.T__3); - this.state = 1587; + this.state = 1768; this.normalForm(); } - this.state = 1590; + this.state = 1771; this.match(SqlBaseParser.T__2); break; @@ -6612,17 +7073,17 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new ExtractContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1592; + this.state = 1773; this.match(SqlBaseParser.EXTRACT); - this.state = 1593; + this.state = 1774; this.match(SqlBaseParser.T__1); - this.state = 1594; + this.state = 1775; this.identifier(); - this.state = 1595; + this.state = 1776; this.match(SqlBaseParser.FROM); - this.state = 1596; + this.state = 1777; this.valueExpression(0); - this.state = 1597; + this.state = 1778; this.match(SqlBaseParser.T__2); break; @@ -6630,11 +7091,11 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new ParenthesizedExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1599; + this.state = 1780; this.match(SqlBaseParser.T__1); - this.state = 1600; + this.state = 1781; this.expression(); - this.state = 1601; + this.state = 1782; this.match(SqlBaseParser.T__2); break; @@ -6642,62 +7103,62 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new GroupingOperationContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1603; + this.state = 1784; this.match(SqlBaseParser.GROUPING); - this.state = 1604; + this.state = 1785; this.match(SqlBaseParser.T__1); - this.state = 1613; + this.state = 1794; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) === 0 && ((1 << _la) & 3879427072) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 548070023) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2513695477) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 2413794779) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794171) !== 0) || ((((_la - 239)) & ~0x1f) === 0 && ((1 << (_la - 239)) & 15) !== 0)) { - this.state = 1605; + if(((((_la - 10)) & ~0x1f) === 0 && ((1 << (_la - 10)) & 669474519) !== 0) || ((((_la - 42)) & ~0x1f) === 0 && ((1 << (_la - 42)) & 1231410629) !== 0) || ((((_la - 74)) & ~0x1f) === 0 && ((1 << (_la - 74)) & 2775907517) !== 0) || ((((_la - 106)) & ~0x1f) === 0 && ((1 << (_la - 106)) & 2130652141) !== 0) || ((((_la - 140)) & ~0x1f) === 0 && ((1 << (_la - 140)) & 4278057583) !== 0) || ((((_la - 172)) & ~0x1f) === 0 && ((1 << (_la - 172)) & 3758063343) !== 0) || ((((_la - 204)) & ~0x1f) === 0 && ((1 << (_la - 204)) & 3344789239) !== 0) || ((((_la - 236)) & ~0x1f) === 0 && ((1 << (_la - 236)) & 15728643) !== 0)) { + this.state = 1786; this.qualifiedName(); - this.state = 1610; + this.state = 1791; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1606; + this.state = 1787; this.match(SqlBaseParser.T__3); - this.state = 1607; + this.state = 1788; this.qualifiedName(); - this.state = 1612; + this.state = 1793; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 1615; + this.state = 1796; this.match(SqlBaseParser.T__2); break; } this._ctx.stop = this._input.LT(-1); - this.state = 1628; + this.state = 1809; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,211,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,229,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 1626; + this.state = 1807; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,210,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,228,this._ctx); switch(la_) { case 1: localctx = new SubscriptContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState)); localctx.value = _prevctx; this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_primaryExpression); - this.state = 1618; + this.state = 1799; if (!( this.precpred(this._ctx, 14))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 14)"); } - this.state = 1619; + this.state = 1800; this.match(SqlBaseParser.T__6); - this.state = 1620; + this.state = 1801; localctx.index = this.valueExpression(0); - this.state = 1621; + this.state = 1802; this.match(SqlBaseParser.T__7); break; @@ -6705,21 +7166,21 @@ export default class SqlBaseParser extends antlr4.Parser { localctx = new DereferenceContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState)); localctx.base = _prevctx; this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_primaryExpression); - this.state = 1623; + this.state = 1804; if (!( this.precpred(this._ctx, 12))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 12)"); } - this.state = 1624; + this.state = 1805; this.match(SqlBaseParser.T__0); - this.state = 1625; + this.state = 1806; localctx.fieldName = this.identifier(); break; } } - this.state = 1630; + this.state = 1811; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,211,this._ctx); + _alt = this._interp.adaptivePredict(this._input,229,this._ctx); } } catch( error) { @@ -6740,29 +7201,29 @@ export default class SqlBaseParser extends antlr4.Parser { string() { let localctx = new StringContext(this, this._ctx, this.state); - this.enterRule(localctx, 94, SqlBaseParser.RULE_string); + this.enterRule(localctx, 96, SqlBaseParser.RULE_string); try { - this.state = 1637; + this.state = 1818; this._errHandler.sync(this); switch(this._input.LA(1)) { - case 233: + case 250: localctx = new BasicStringLiteralContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1631; + this.state = 1812; this.match(SqlBaseParser.STRING); break; - case 234: + case 251: localctx = new UnicodeStringLiteralContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1632; + this.state = 1813; this.match(SqlBaseParser.UNICODE_STRING); - this.state = 1635; + this.state = 1816; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,212,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,230,this._ctx); if(la_===1) { - this.state = 1633; + this.state = 1814; this.match(SqlBaseParser.UESCAPE); - this.state = 1634; + this.state = 1815; this.match(SqlBaseParser.STRING); } @@ -6788,23 +7249,23 @@ export default class SqlBaseParser extends antlr4.Parser { nullTreatment() { let localctx = new NullTreatmentContext(this, this._ctx, this.state); - this.enterRule(localctx, 96, SqlBaseParser.RULE_nullTreatment); + this.enterRule(localctx, 98, SqlBaseParser.RULE_nullTreatment); try { - this.state = 1643; + this.state = 1824; this._errHandler.sync(this); switch(this._input.LA(1)) { - case 88: + case 96: this.enterOuterAlt(localctx, 1); - this.state = 1639; + this.state = 1820; this.match(SqlBaseParser.IGNORE); - this.state = 1640; + this.state = 1821; this.match(SqlBaseParser.NULLS); break; - case 156: + case 171: this.enterOuterAlt(localctx, 2); - this.state = 1641; + this.state = 1822; this.match(SqlBaseParser.RESPECT); - this.state = 1642; + this.state = 1823; this.match(SqlBaseParser.NULLS); break; default: @@ -6828,31 +7289,31 @@ export default class SqlBaseParser extends antlr4.Parser { timeZoneSpecifier() { let localctx = new TimeZoneSpecifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 98, SqlBaseParser.RULE_timeZoneSpecifier); + this.enterRule(localctx, 100, SqlBaseParser.RULE_timeZoneSpecifier); try { - this.state = 1651; + this.state = 1832; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,215,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,233,this._ctx); switch(la_) { case 1: localctx = new TimeZoneIntervalContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1645; + this.state = 1826; this.match(SqlBaseParser.TIME); - this.state = 1646; + this.state = 1827; this.match(SqlBaseParser.ZONE); - this.state = 1647; + this.state = 1828; this.interval(); break; case 2: localctx = new TimeZoneStringContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1648; + this.state = 1829; this.match(SqlBaseParser.TIME); - this.state = 1649; + this.state = 1830; this.match(SqlBaseParser.ZONE); - this.state = 1650; + this.state = 1831; this.string(); break; @@ -6875,13 +7336,13 @@ export default class SqlBaseParser extends antlr4.Parser { comparisonOperator() { let localctx = new ComparisonOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 100, SqlBaseParser.RULE_comparisonOperator); + this.enterRule(localctx, 102, SqlBaseParser.RULE_comparisonOperator); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1653; + this.state = 1834; _la = this._input.LA(1); - if(!(((((_la - 221)) & ~0x1f) === 0 && ((1 << (_la - 221)) & 63) !== 0))) { + if(!(((((_la - 238)) & ~0x1f) === 0 && ((1 << (_la - 238)) & 63) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -6906,13 +7367,13 @@ export default class SqlBaseParser extends antlr4.Parser { comparisonQuantifier() { let localctx = new ComparisonQuantifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 102, SqlBaseParser.RULE_comparisonQuantifier); + this.enterRule(localctx, 104, SqlBaseParser.RULE_comparisonQuantifier); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1655; + this.state = 1836; _la = this._input.LA(1); - if(!(_la===12 || _la===16 || _la===178)) { + if(!(_la===12 || _la===16 || _la===193)) { this._errHandler.recoverInline(this); } else { @@ -6937,13 +7398,13 @@ export default class SqlBaseParser extends antlr4.Parser { booleanValue() { let localctx = new BooleanValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 104, SqlBaseParser.RULE_booleanValue); + this.enterRule(localctx, 106, SqlBaseParser.RULE_booleanValue); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1657; + this.state = 1838; _la = this._input.LA(1); - if(!(_la===67 || _la===196)) { + if(!(_la===75 || _la===212)) { this._errHandler.recoverInline(this); } else { @@ -6968,20 +7429,20 @@ export default class SqlBaseParser extends antlr4.Parser { interval() { let localctx = new IntervalContext(this, this._ctx, this.state); - this.enterRule(localctx, 106, SqlBaseParser.RULE_interval); + this.enterRule(localctx, 108, SqlBaseParser.RULE_interval); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1659; + this.state = 1840; this.match(SqlBaseParser.INTERVAL); - this.state = 1661; + this.state = 1842; this._errHandler.sync(this); _la = this._input.LA(1); - if(_la===227 || _la===228) { - this.state = 1660; + if(_la===244 || _la===245) { + this.state = 1841; localctx.sign = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===227 || _la===228)) { + if(!(_la===244 || _la===245)) { localctx.sign = this._errHandler.recoverInline(this); } else { @@ -6990,17 +7451,17 @@ export default class SqlBaseParser extends antlr4.Parser { } } - this.state = 1663; + this.state = 1844; this.string(); - this.state = 1664; + this.state = 1845; localctx.from = this.intervalField(); - this.state = 1667; + this.state = 1848; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,217,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,235,this._ctx); if(la_===1) { - this.state = 1665; + this.state = 1846; this.match(SqlBaseParser.TO); - this.state = 1666; + this.state = 1847; localctx.to = this.intervalField(); } @@ -7022,13 +7483,13 @@ export default class SqlBaseParser extends antlr4.Parser { intervalField() { let localctx = new IntervalFieldContext(this, this._ctx, this.state); - this.enterRule(localctx, 108, SqlBaseParser.RULE_intervalField); + this.enterRule(localctx, 110, SqlBaseParser.RULE_intervalField); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1669; + this.state = 1850; _la = this._input.LA(1); - if(!(_la===47 || ((((_la - 86)) & ~0x1f) === 0 && ((1 << (_la - 86)) & 1610612737) !== 0) || _la===170 || _la===219)) { + if(!(_la===50 || _la===94 || _la===127 || _la===128 || _la===185 || _la===236)) { this._errHandler.recoverInline(this); } else { @@ -7053,13 +7514,13 @@ export default class SqlBaseParser extends antlr4.Parser { normalForm() { let localctx = new NormalFormContext(this, this._ctx, this.state); - this.enterRule(localctx, 110, SqlBaseParser.RULE_normalForm); + this.enterRule(localctx, 112, SqlBaseParser.RULE_normalForm); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1671; + this.state = 1852; _la = this._input.LA(1); - if(!(((((_la - 119)) & ~0x1f) === 0 && ((1 << (_la - 119)) & 15) !== 0))) { + if(!(((((_la - 131)) & ~0x1f) === 0 && ((1 << (_la - 131)) & 15) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -7084,33 +7545,33 @@ export default class SqlBaseParser extends antlr4.Parser { types() { let localctx = new TypesContext(this, this._ctx, this.state); - this.enterRule(localctx, 112, SqlBaseParser.RULE_types); + this.enterRule(localctx, 114, SqlBaseParser.RULE_types); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1673; + this.state = 1854; this.match(SqlBaseParser.T__1); - this.state = 1682; + this.state = 1863; this._errHandler.sync(this); _la = this._input.LA(1); - if((((_la) & ~0x1f) === 0 && ((1 << _la) & 3879427072) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 548070023) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2513695477) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 2413794779) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794171) !== 0) || ((((_la - 239)) & ~0x1f) === 0 && ((1 << (_la - 239)) & 127) !== 0)) { - this.state = 1674; + if(((((_la - 10)) & ~0x1f) === 0 && ((1 << (_la - 10)) & 669474519) !== 0) || ((((_la - 42)) & ~0x1f) === 0 && ((1 << (_la - 42)) & 1231410629) !== 0) || ((((_la - 74)) & ~0x1f) === 0 && ((1 << (_la - 74)) & 2775907517) !== 0) || ((((_la - 106)) & ~0x1f) === 0 && ((1 << (_la - 106)) & 2130652141) !== 0) || ((((_la - 140)) & ~0x1f) === 0 && ((1 << (_la - 140)) & 4278057583) !== 0) || ((((_la - 172)) & ~0x1f) === 0 && ((1 << (_la - 172)) & 3758063343) !== 0) || ((((_la - 204)) & ~0x1f) === 0 && ((1 << (_la - 204)) & 3344789239) !== 0) || ((((_la - 236)) & ~0x1f) === 0 && ((1 << (_la - 236)) & 133169155) !== 0)) { + this.state = 1855; this.type(0); - this.state = 1679; + this.state = 1860; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1675; + this.state = 1856; this.match(SqlBaseParser.T__3); - this.state = 1676; + this.state = 1857; this.type(0); - this.state = 1681; + this.state = 1862; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 1684; + this.state = 1865; this.match(SqlBaseParser.T__2); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7135,113 +7596,113 @@ export default class SqlBaseParser extends antlr4.Parser { const _parentState = this.state; let localctx = new TypeContext(this, this._ctx, _parentState); let _prevctx = localctx; - const _startState = 114; - this.enterRecursionRule(localctx, 114, SqlBaseParser.RULE_type, _p); + const _startState = 116; + this.enterRecursionRule(localctx, 116, SqlBaseParser.RULE_type, _p); var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1733; + this.state = 1914; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,223,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,241,this._ctx); switch(la_) { case 1: - this.state = 1687; + this.state = 1868; this.match(SqlBaseParser.ARRAY); - this.state = 1688; + this.state = 1869; this.match(SqlBaseParser.LT); - this.state = 1689; + this.state = 1870; this.type(0); - this.state = 1690; + this.state = 1871; this.match(SqlBaseParser.GT); break; case 2: - this.state = 1692; + this.state = 1873; this.match(SqlBaseParser.MAP); - this.state = 1693; + this.state = 1874; this.match(SqlBaseParser.LT); - this.state = 1694; + this.state = 1875; this.type(0); - this.state = 1695; + this.state = 1876; this.match(SqlBaseParser.T__3); - this.state = 1696; + this.state = 1877; this.type(0); - this.state = 1697; + this.state = 1878; this.match(SqlBaseParser.GT); break; case 3: - this.state = 1699; + this.state = 1880; this.match(SqlBaseParser.ROW); - this.state = 1700; + this.state = 1881; this.match(SqlBaseParser.T__1); - this.state = 1701; + this.state = 1882; this.identifier(); - this.state = 1702; + this.state = 1883; this.type(0); - this.state = 1709; + this.state = 1890; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1703; + this.state = 1884; this.match(SqlBaseParser.T__3); - this.state = 1704; + this.state = 1885; this.identifier(); - this.state = 1705; + this.state = 1886; this.type(0); - this.state = 1711; + this.state = 1892; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1712; + this.state = 1893; this.match(SqlBaseParser.T__2); break; case 4: - this.state = 1714; + this.state = 1895; this.baseType(); - this.state = 1726; + this.state = 1907; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,222,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,240,this._ctx); if(la_===1) { - this.state = 1715; + this.state = 1896; this.match(SqlBaseParser.T__1); - this.state = 1716; + this.state = 1897; this.typeParameter(); - this.state = 1721; + this.state = 1902; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===4) { - this.state = 1717; + this.state = 1898; this.match(SqlBaseParser.T__3); - this.state = 1718; + this.state = 1899; this.typeParameter(); - this.state = 1723; + this.state = 1904; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1724; + this.state = 1905; this.match(SqlBaseParser.T__2); } break; case 5: - this.state = 1728; + this.state = 1909; this.match(SqlBaseParser.INTERVAL); - this.state = 1729; + this.state = 1910; localctx.from = this.intervalField(); - this.state = 1730; + this.state = 1911; this.match(SqlBaseParser.TO); - this.state = 1731; + this.state = 1912; localctx.to = this.intervalField(); break; } this._ctx.stop = this._input.LT(-1); - this.state = 1739; + this.state = 1920; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,224,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,242,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { @@ -7250,16 +7711,16 @@ export default class SqlBaseParser extends antlr4.Parser { _prevctx = localctx; localctx = new TypeContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_type); - this.state = 1735; + this.state = 1916; if (!( this.precpred(this._ctx, 6))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)"); } - this.state = 1736; + this.state = 1917; this.match(SqlBaseParser.ARRAY); } - this.state = 1741; + this.state = 1922; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,224,this._ctx); + _alt = this._interp.adaptivePredict(this._input,242,this._ctx); } } catch( error) { @@ -7278,174 +7739,60 @@ export default class SqlBaseParser extends antlr4.Parser { - typeParameter() { - let localctx = new TypeParameterContext(this, this._ctx, this.state); - this.enterRule(localctx, 116, SqlBaseParser.RULE_typeParameter); + tableFunctionCall() { + let localctx = new TableFunctionCallContext(this, this._ctx, this.state); + this.enterRule(localctx, 118, SqlBaseParser.RULE_tableFunctionCall); + var _la = 0; try { - this.state = 1744; + this.enterOuterAlt(localctx, 1); + this.state = 1923; + this.qualifiedName(); + this.state = 1924; + this.match(SqlBaseParser.T__1); + this.state = 1933; this._errHandler.sync(this); - switch(this._input.LA(1)) { - case 236: - this.enterOuterAlt(localctx, 1); - this.state = 1742; - this.match(SqlBaseParser.INTEGER_VALUE); - break; - case 10: - case 11: - case 12: - case 14: - case 16: - case 17: - case 19: - case 20: - case 21: - case 24: - case 25: - case 26: - case 29: - case 30: - case 31: - case 32: - case 33: - case 34: - case 39: - case 41: - case 45: - case 46: - case 47: - case 49: - case 51: - case 53: - case 55: - case 61: - case 64: - case 66: - case 68: - case 69: - case 70: - case 71: - case 73: - case 76: - case 77: - case 78: - case 79: - case 80: - case 81: - case 84: - case 86: - case 87: - case 88: - case 90: - case 92: - case 95: - case 97: - case 98: - case 100: - case 101: - case 103: - case 104: - case 105: - case 107: - case 109: - case 112: - case 113: - case 114: - case 115: - case 116: - case 117: - case 119: - case 120: - case 121: - case 122: - case 123: - case 124: - case 128: - case 129: - case 130: - case 131: - case 133: - case 134: - case 137: - case 139: - case 140: - case 141: - case 142: - case 143: - case 144: - case 146: - case 147: - case 148: - case 149: - case 151: - case 152: - case 153: - case 154: - case 155: - case 156: - case 157: - case 158: - case 159: - case 160: - case 162: - case 163: - case 164: - case 166: - case 167: - case 168: - case 169: - case 170: - case 171: - case 173: - case 174: - case 175: - case 176: - case 177: - case 178: - case 179: - case 180: - case 181: - case 182: - case 183: - case 184: - case 185: - case 187: - case 188: - case 189: - case 190: - case 192: - case 193: - case 194: - case 195: - case 197: - case 198: - case 199: - case 201: - case 202: - case 205: - case 206: - case 207: - case 209: - case 211: - case 212: - case 213: - case 217: - case 218: - case 219: - case 220: - case 239: - case 240: - case 241: - case 242: - case 243: - case 244: - case 245: - this.enterOuterAlt(localctx, 2); - this.state = 1743; - this.type(0); - break; - default: - throw new antlr4.error.NoViableAltException(this); + var la_ = this._interp.adaptivePredict(this._input,244,this._ctx); + if(la_===1) { + this.state = 1925; + this.tableFunctionArgument(); + this.state = 1930; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 1926; + this.match(SqlBaseParser.T__3); + this.state = 1927; + this.tableFunctionArgument(); + this.state = 1932; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + + } + this.state = 1944; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===39) { + this.state = 1935; + this.match(SqlBaseParser.COPARTITION); + this.state = 1936; + this.copartitionTables(); + this.state = 1941; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 1937; + this.match(SqlBaseParser.T__3); + this.state = 1938; + this.copartitionTables(); + this.state = 1943; + this._errHandler.sync(this); + _la = this._input.LA(1); + } } + + this.state = 1946; + this.match(SqlBaseParser.T__2); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { localctx.exception = re; @@ -7462,180 +7809,40 @@ export default class SqlBaseParser extends antlr4.Parser { - baseType() { - let localctx = new BaseTypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 118, SqlBaseParser.RULE_baseType); + tableFunctionArgument() { + let localctx = new TableFunctionArgumentContext(this, this._ctx, this.state); + this.enterRule(localctx, 120, SqlBaseParser.RULE_tableFunctionArgument); try { - this.state = 1750; + this.enterOuterAlt(localctx, 1); + this.state = 1951; this._errHandler.sync(this); - switch(this._input.LA(1)) { - case 243: - this.enterOuterAlt(localctx, 1); - this.state = 1746; - this.match(SqlBaseParser.TIME_WITH_TIME_ZONE); + var la_ = this._interp.adaptivePredict(this._input,247,this._ctx); + if(la_===1) { + this.state = 1948; + this.identifier(); + this.state = 1949; + this.match(SqlBaseParser.T__8); + + } + this.state = 1956; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,248,this._ctx); + switch(la_) { + case 1: + this.state = 1953; + this.tableArgument(); break; - case 244: - this.enterOuterAlt(localctx, 2); - this.state = 1747; - this.match(SqlBaseParser.TIMESTAMP_WITH_TIME_ZONE); + + case 2: + this.state = 1954; + this.descriptorArgument(); break; - case 245: - this.enterOuterAlt(localctx, 3); - this.state = 1748; - this.match(SqlBaseParser.DOUBLE_PRECISION); + + case 3: + this.state = 1955; + this.expression(); break; - case 10: - case 11: - case 12: - case 14: - case 16: - case 17: - case 19: - case 20: - case 21: - case 24: - case 25: - case 26: - case 29: - case 30: - case 31: - case 32: - case 33: - case 34: - case 39: - case 41: - case 45: - case 46: - case 47: - case 49: - case 51: - case 53: - case 55: - case 61: - case 64: - case 66: - case 68: - case 69: - case 70: - case 71: - case 73: - case 76: - case 77: - case 78: - case 79: - case 80: - case 81: - case 84: - case 86: - case 87: - case 88: - case 90: - case 92: - case 95: - case 97: - case 98: - case 100: - case 101: - case 103: - case 104: - case 105: - case 107: - case 109: - case 112: - case 113: - case 114: - case 115: - case 116: - case 117: - case 119: - case 120: - case 121: - case 122: - case 123: - case 124: - case 128: - case 129: - case 130: - case 131: - case 133: - case 134: - case 137: - case 139: - case 140: - case 141: - case 142: - case 143: - case 144: - case 146: - case 147: - case 148: - case 149: - case 151: - case 152: - case 153: - case 154: - case 155: - case 156: - case 157: - case 158: - case 159: - case 160: - case 162: - case 163: - case 164: - case 166: - case 167: - case 168: - case 169: - case 170: - case 171: - case 173: - case 174: - case 175: - case 176: - case 177: - case 178: - case 179: - case 180: - case 181: - case 182: - case 183: - case 184: - case 185: - case 187: - case 188: - case 189: - case 190: - case 192: - case 193: - case 194: - case 195: - case 197: - case 198: - case 199: - case 201: - case 202: - case 205: - case 206: - case 207: - case 209: - case 211: - case 212: - case 213: - case 217: - case 218: - case 219: - case 220: - case 239: - case 240: - case 241: - case 242: - this.enterOuterAlt(localctx, 4); - this.state = 1749; - this.qualifiedName(); - break; - default: - throw new antlr4.error.NoViableAltException(this); + } } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7653,50 +7860,129 @@ export default class SqlBaseParser extends antlr4.Parser { - whenClause() { - let localctx = new WhenClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 120, SqlBaseParser.RULE_whenClause); + tableArgument() { + let localctx = new TableArgumentContext(this, this._ctx, this.state); + this.enterRule(localctx, 122, SqlBaseParser.RULE_tableArgument); + var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1752; - this.match(SqlBaseParser.WHEN); - this.state = 1753; - localctx.condition = this.expression(); - this.state = 1754; - this.match(SqlBaseParser.THEN); - this.state = 1755; - localctx.result = this.expression(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } + this.state = 1958; + this.tableArgumentRelation(); + this.state = 1976; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===153) { + this.state = 1959; + this.match(SqlBaseParser.PARTITION); + this.state = 1960; + this.match(SqlBaseParser.BY); + this.state = 1974; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,251,this._ctx); + switch(la_) { + case 1: + this.state = 1961; + this.match(SqlBaseParser.T__1); + this.state = 1970; + this._errHandler.sync(this); + _la = this._input.LA(1); + if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4252720164) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2539125919) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 3690135461) !== 0) || ((((_la - 96)) & ~0x1f) === 0 && ((1 << (_la - 96)) & 4289705621) !== 0) || ((((_la - 128)) & ~0x1f) === 0 && ((1 << (_la - 128)) & 3752263675) !== 0) || ((((_la - 160)) & ~0x1f) === 0 && ((1 << (_la - 160)) & 4159635439) !== 0) || ((((_la - 192)) & ~0x1f) === 0 && ((1 << (_la - 192)) & 3607068159) !== 0) || ((((_la - 224)) & ~0x1f) === 0 && ((1 << (_la - 224)) & 4231019637) !== 0) || ((((_la - 256)) & ~0x1f) === 0 && ((1 << (_la - 256)) & 79) !== 0)) { + this.state = 1962; + this.expression(); + this.state = 1967; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 1963; + this.match(SqlBaseParser.T__3); + this.state = 1964; + this.expression(); + this.state = 1969; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + + this.state = 1972; + this.match(SqlBaseParser.T__2); + break; + case 2: + this.state = 1973; + this.expression(); + break; + } + } + + this.state = 1984; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 161: + this.state = 1978; + this.match(SqlBaseParser.PRUNE); + this.state = 1979; + this.match(SqlBaseParser.WHEN); + this.state = 1980; + this.match(SqlBaseParser.EMPTY); + break; + case 111: + this.state = 1981; + this.match(SqlBaseParser.KEEP); + this.state = 1982; + this.match(SqlBaseParser.WHEN); + this.state = 1983; + this.match(SqlBaseParser.EMPTY); + break; + case 3: + case 4: + case 39: + case 148: + break; + default: + break; + } + this.state = 2002; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===148) { + this.state = 1986; + this.match(SqlBaseParser.ORDER); + this.state = 1987; + this.match(SqlBaseParser.BY); + this.state = 2000; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,255,this._ctx); + switch(la_) { + case 1: + this.state = 1988; + this.match(SqlBaseParser.T__1); + this.state = 1989; + this.sortItem(); + this.state = 1994; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 1990; + this.match(SqlBaseParser.T__3); + this.state = 1991; + this.sortItem(); + this.state = 1996; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1997; + this.match(SqlBaseParser.T__2); + break; + + case 2: + this.state = 1999; + this.sortItem(); + break; + + } + } - filter() { - let localctx = new FilterContext(this, this._ctx, this.state); - this.enterRule(localctx, 122, SqlBaseParser.RULE_filter); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1757; - this.match(SqlBaseParser.FILTER); - this.state = 1758; - this.match(SqlBaseParser.T__1); - this.state = 1759; - this.match(SqlBaseParser.WHERE); - this.state = 1760; - this.booleanExpression(0); - this.state = 1761; - this.match(SqlBaseParser.T__2); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { localctx.exception = re; @@ -7713,76 +7999,90 @@ export default class SqlBaseParser extends antlr4.Parser { - over() { - let localctx = new OverContext(this, this._ctx, this.state); - this.enterRule(localctx, 124, SqlBaseParser.RULE_over); + tableArgumentRelation() { + let localctx = new TableArgumentRelationContext(this, this._ctx, this.state); + this.enterRule(localctx, 124, SqlBaseParser.RULE_tableArgumentRelation); var _la = 0; try { - this.enterOuterAlt(localctx, 1); - this.state = 1763; - this.match(SqlBaseParser.OVER); - this.state = 1764; - this.match(SqlBaseParser.T__1); - this.state = 1775; + this.state = 2030; this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===141) { - this.state = 1765; - this.match(SqlBaseParser.PARTITION); - this.state = 1766; - this.match(SqlBaseParser.BY); - this.state = 1767; - localctx._expression = this.expression(); - localctx.partition.push(localctx._expression); - this.state = 1772; + var la_ = this._interp.adaptivePredict(this._input,263,this._ctx); + switch(la_) { + case 1: + localctx = new TableArgumentTableContext(this, localctx); + this.enterOuterAlt(localctx, 1); + this.state = 2004; + this.match(SqlBaseParser.TABLE); + this.state = 2005; + this.match(SqlBaseParser.T__1); + this.state = 2006; + this.qualifiedName(); + this.state = 2007; + this.match(SqlBaseParser.T__2); + this.state = 2015; this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===4) { - this.state = 1768; - this.match(SqlBaseParser.T__3); - this.state = 1769; - localctx._expression = this.expression(); - localctx.partition.push(localctx._expression); - this.state = 1774; + var la_ = this._interp.adaptivePredict(this._input,259,this._ctx); + if(la_===1) { + this.state = 2009; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===18) { + this.state = 2008; + this.match(SqlBaseParser.AS); + } + + this.state = 2011; + this.identifier(); + this.state = 2013; this._errHandler.sync(this); _la = this._input.LA(1); + if(_la===2) { + this.state = 2012; + this.columnAliases(); + } + + } - } + break; - this.state = 1787; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===136) { - this.state = 1777; - this.match(SqlBaseParser.ORDER); - this.state = 1778; - this.match(SqlBaseParser.BY); - this.state = 1779; - this.sortItem(); - this.state = 1784; + case 2: + localctx = new TableArgumentQueryContext(this, localctx); + this.enterOuterAlt(localctx, 2); + this.state = 2017; + this.match(SqlBaseParser.TABLE); + this.state = 2018; + this.match(SqlBaseParser.T__1); + this.state = 2019; + this.query(); + this.state = 2020; + this.match(SqlBaseParser.T__2); + this.state = 2028; this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===4) { - this.state = 1780; - this.match(SqlBaseParser.T__3); - this.state = 1781; - this.sortItem(); - this.state = 1786; + var la_ = this._interp.adaptivePredict(this._input,262,this._ctx); + if(la_===1) { + this.state = 2022; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===18) { + this.state = 2021; + this.match(SqlBaseParser.AS); + } + + this.state = 2024; + this.identifier(); + this.state = 2026; this._errHandler.sync(this); _la = this._input.LA(1); + if(_la===2) { + this.state = 2025; + this.columnAliases(); + } + + } - } + break; - this.state = 1790; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===84 || _la===148 || _la===167) { - this.state = 1789; - this.windowFrame(); } - - this.state = 1792; - this.match(SqlBaseParser.T__2); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { localctx.exception = re; @@ -7799,150 +8099,54 @@ export default class SqlBaseParser extends antlr4.Parser { - windowFrame() { - let localctx = new WindowFrameContext(this, this._ctx, this.state); - this.enterRule(localctx, 126, SqlBaseParser.RULE_windowFrame); - try { - this.state = 1818; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,232,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 1794; - localctx.frameType = this.match(SqlBaseParser.RANGE); - this.state = 1795; - localctx.start = this.frameBound(); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 1796; - localctx.frameType = this.match(SqlBaseParser.ROWS); - this.state = 1797; - localctx.start = this.frameBound(); - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 1798; - localctx.frameType = this.match(SqlBaseParser.GROUPS); - this.state = 1799; - localctx.start = this.frameBound(); - break; - - case 4: - this.enterOuterAlt(localctx, 4); - this.state = 1800; - localctx.frameType = this.match(SqlBaseParser.RANGE); - this.state = 1801; - this.match(SqlBaseParser.BETWEEN); - this.state = 1802; - localctx.start = this.frameBound(); - this.state = 1803; - this.match(SqlBaseParser.AND); - this.state = 1804; - localctx.end = this.frameBound(); - break; - - case 5: - this.enterOuterAlt(localctx, 5); - this.state = 1806; - localctx.frameType = this.match(SqlBaseParser.ROWS); - this.state = 1807; - this.match(SqlBaseParser.BETWEEN); - this.state = 1808; - localctx.start = this.frameBound(); - this.state = 1809; - this.match(SqlBaseParser.AND); - this.state = 1810; - localctx.end = this.frameBound(); - break; - - case 6: - this.enterOuterAlt(localctx, 6); - this.state = 1812; - localctx.frameType = this.match(SqlBaseParser.GROUPS); - this.state = 1813; - this.match(SqlBaseParser.BETWEEN); - this.state = 1814; - localctx.start = this.frameBound(); - this.state = 1815; - this.match(SqlBaseParser.AND); - this.state = 1816; - localctx.end = this.frameBound(); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - frameBound() { - let localctx = new FrameBoundContext(this, this._ctx, this.state); - this.enterRule(localctx, 128, SqlBaseParser.RULE_frameBound); + descriptorArgument() { + let localctx = new DescriptorArgumentContext(this, this._ctx, this.state); + this.enterRule(localctx, 126, SqlBaseParser.RULE_descriptorArgument); var _la = 0; try { - this.state = 1829; + this.state = 2050; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,233,this._ctx); - switch(la_) { - case 1: - localctx = new UnboundedFrameContext(this, localctx); + switch(this._input.LA(1)) { + case 56: this.enterOuterAlt(localctx, 1); - this.state = 1820; - this.match(SqlBaseParser.UNBOUNDED); - this.state = 1821; - localctx.boundType = this.match(SqlBaseParser.PRECEDING); - break; - - case 2: - localctx = new UnboundedFrameContext(this, localctx); - this.enterOuterAlt(localctx, 2); - this.state = 1822; - this.match(SqlBaseParser.UNBOUNDED); - this.state = 1823; - localctx.boundType = this.match(SqlBaseParser.FOLLOWING); - break; - - case 3: - localctx = new CurrentRowBoundContext(this, localctx); - this.enterOuterAlt(localctx, 3); - this.state = 1824; - this.match(SqlBaseParser.CURRENT); - this.state = 1825; - this.match(SqlBaseParser.ROW); - break; - - case 4: - localctx = new BoundedFrameContext(this, localctx); - this.enterOuterAlt(localctx, 4); - this.state = 1826; - this.expression(); - this.state = 1827; - localctx.boundType = this._input.LT(1); + this.state = 2032; + this.match(SqlBaseParser.DESCRIPTOR); + this.state = 2033; + this.match(SqlBaseParser.T__1); + this.state = 2034; + this.descriptorField(); + this.state = 2039; + this._errHandler.sync(this); _la = this._input.LA(1); - if(!(_la===71 || _la===144)) { - localctx.boundType = this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); + while(_la===4) { + this.state = 2035; + this.match(SqlBaseParser.T__3); + this.state = 2036; + this.descriptorField(); + this.state = 2041; + this._errHandler.sync(this); + _la = this._input.LA(1); } + this.state = 2042; + this.match(SqlBaseParser.T__2); break; - + case 30: + this.enterOuterAlt(localctx, 2); + this.state = 2044; + this.match(SqlBaseParser.CAST); + this.state = 2045; + this.match(SqlBaseParser.T__1); + this.state = 2046; + this.match(SqlBaseParser.NULL); + this.state = 2047; + this.match(SqlBaseParser.AS); + this.state = 2048; + this.match(SqlBaseParser.DESCRIPTOR); + this.state = 2049; + this.match(SqlBaseParser.T__2); + break; + default: + throw new antlr4.error.NoViableAltException(this); } } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7960,76 +8164,22 @@ export default class SqlBaseParser extends antlr4.Parser { - updateAssignment() { - let localctx = new UpdateAssignmentContext(this, this._ctx, this.state); - this.enterRule(localctx, 130, SqlBaseParser.RULE_updateAssignment); + descriptorField() { + let localctx = new DescriptorFieldContext(this, this._ctx, this.state); + this.enterRule(localctx, 128, SqlBaseParser.RULE_descriptorField); + var _la = 0; try { this.enterOuterAlt(localctx, 1); - this.state = 1831; + this.state = 2052; this.identifier(); - this.state = 1832; - this.match(SqlBaseParser.EQ); - this.state = 1833; - this.expression(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - explainOption() { - let localctx = new ExplainOptionContext(this, this._ctx, this.state); - this.enterRule(localctx, 132, SqlBaseParser.RULE_explainOption); - var _la = 0; - try { - this.state = 1839; + this.state = 2054; this._errHandler.sync(this); - switch(this._input.LA(1)) { - case 73: - localctx = new ExplainFormatContext(this, localctx); - this.enterOuterAlt(localctx, 1); - this.state = 1835; - this.match(SqlBaseParser.FORMAT); - this.state = 1836; - localctx.value = this._input.LT(1); - _la = this._input.LA(1); - if(!(_la===81 || _la===101 || _la===190)) { - localctx.value = this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - break; - case 199: - localctx = new ExplainTypeContext(this, localctx); - this.enterOuterAlt(localctx, 2); - this.state = 1837; - this.match(SqlBaseParser.TYPE); - this.state = 1838; - localctx.value = this._input.LT(1); - _la = this._input.LA(1); - if(!(_la===55 || _la===98 || _la===112 || _la===209)) { - localctx.value = this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - break; - default: - throw new antlr4.error.NoViableAltException(this); + _la = this._input.LA(1); + if(((((_la - 10)) & ~0x1f) === 0 && ((1 << (_la - 10)) & 669474519) !== 0) || ((((_la - 42)) & ~0x1f) === 0 && ((1 << (_la - 42)) & 1231410629) !== 0) || ((((_la - 74)) & ~0x1f) === 0 && ((1 << (_la - 74)) & 2775907517) !== 0) || ((((_la - 106)) & ~0x1f) === 0 && ((1 << (_la - 106)) & 2130652141) !== 0) || ((((_la - 140)) & ~0x1f) === 0 && ((1 << (_la - 140)) & 4278057583) !== 0) || ((((_la - 172)) & ~0x1f) === 0 && ((1 << (_la - 172)) & 3758063343) !== 0) || ((((_la - 204)) & ~0x1f) === 0 && ((1 << (_la - 204)) & 3344789239) !== 0) || ((((_la - 236)) & ~0x1f) === 0 && ((1 << (_la - 236)) & 133169155) !== 0)) { + this.state = 2053; + this.type(0); } + } catch (re) { if(re instanceof antlr4.error.RecognitionException) { localctx.exception = re; @@ -8046,43 +8196,34 @@ export default class SqlBaseParser extends antlr4.Parser { - transactionMode() { - let localctx = new TransactionModeContext(this, this._ctx, this.state); - this.enterRule(localctx, 134, SqlBaseParser.RULE_transactionMode); + copartitionTables() { + let localctx = new CopartitionTablesContext(this, this._ctx, this.state); + this.enterRule(localctx, 130, SqlBaseParser.RULE_copartitionTables); var _la = 0; try { - this.state = 1846; + this.enterOuterAlt(localctx, 1); + this.state = 2056; + this.match(SqlBaseParser.T__1); + this.state = 2057; + this.qualifiedName(); + this.state = 2058; + this.match(SqlBaseParser.T__3); + this.state = 2059; + this.qualifiedName(); + this.state = 2064; this._errHandler.sync(this); - switch(this._input.LA(1)) { - case 100: - localctx = new IsolationLevelContext(this, localctx); - this.enterOuterAlt(localctx, 1); - this.state = 1841; - this.match(SqlBaseParser.ISOLATION); - this.state = 1842; - this.match(SqlBaseParser.LEVEL); - this.state = 1843; - this.levelOfIsolation(); - break; - case 149: - localctx = new TransactionAccessModeContext(this, localctx); - this.enterOuterAlt(localctx, 2); - this.state = 1844; - this.match(SqlBaseParser.READ); - this.state = 1845; - localctx.accessMode = this._input.LT(1); + _la = this._input.LA(1); + while(_la===4) { + this.state = 2060; + this.match(SqlBaseParser.T__3); + this.state = 2061; + this.qualifiedName(); + this.state = 2066; + this._errHandler.sync(this); _la = this._input.LA(1); - if(!(_la===133 || _la===218)) { - localctx.accessMode = this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - break; - default: - throw new antlr4.error.NoViableAltException(this); } + this.state = 2067; + this.match(SqlBaseParser.T__2); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { localctx.exception = re; @@ -8099,91 +8240,190 @@ export default class SqlBaseParser extends antlr4.Parser { - levelOfIsolation() { - let localctx = new LevelOfIsolationContext(this, this._ctx, this.state); - this.enterRule(localctx, 136, SqlBaseParser.RULE_levelOfIsolation); + typeParameter() { + let localctx = new TypeParameterContext(this, this._ctx, this.state); + this.enterRule(localctx, 132, SqlBaseParser.RULE_typeParameter); try { - this.state = 1855; + this.state = 2071; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,236,this._ctx); - switch(la_) { - case 1: - localctx = new ReadUncommittedContext(this, localctx); + switch(this._input.LA(1)) { + case 253: this.enterOuterAlt(localctx, 1); - this.state = 1848; - this.match(SqlBaseParser.READ); - this.state = 1849; - this.match(SqlBaseParser.UNCOMMITTED); - break; - - case 2: - localctx = new ReadCommittedContext(this, localctx); - this.enterOuterAlt(localctx, 2); - this.state = 1850; - this.match(SqlBaseParser.READ); - this.state = 1851; - this.match(SqlBaseParser.COMMITTED); - break; - - case 3: - localctx = new RepeatableReadContext(this, localctx); - this.enterOuterAlt(localctx, 3); - this.state = 1852; - this.match(SqlBaseParser.REPEATABLE); - this.state = 1853; - this.match(SqlBaseParser.READ); - break; - - case 4: - localctx = new SerializableContext(this, localctx); - this.enterOuterAlt(localctx, 4); - this.state = 1854; - this.match(SqlBaseParser.SERIALIZABLE); + this.state = 2069; + this.match(SqlBaseParser.INTEGER_VALUE); break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - callArgument() { - let localctx = new CallArgumentContext(this, this._ctx, this.state); - this.enterRule(localctx, 138, SqlBaseParser.RULE_callArgument); - try { - this.state = 1862; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,237,this._ctx); - switch(la_) { - case 1: - localctx = new PositionalArgumentContext(this, localctx); - this.enterOuterAlt(localctx, 1); - this.state = 1857; - this.expression(); - break; - - case 2: - localctx = new NamedArgumentContext(this, localctx); + case 10: + case 11: + case 12: + case 14: + case 16: + case 17: + case 19: + case 20: + case 21: + case 22: + case 24: + case 26: + case 27: + case 28: + case 31: + case 32: + case 33: + case 34: + case 35: + case 36: + case 39: + case 42: + case 44: + case 48: + case 49: + case 50: + case 52: + case 54: + case 56: + case 57: + case 58: + case 60: + case 63: + case 64: + case 66: + case 69: + case 72: + case 74: + case 76: + case 77: + case 78: + case 79: + case 81: + case 84: + case 85: + case 86: + case 87: + case 88: + case 89: + case 92: + case 94: + case 95: + case 96: + case 98: + case 100: + case 103: + case 105: + case 106: + case 108: + case 109: + case 111: + case 112: + case 113: + case 114: + case 115: + case 117: + case 119: + case 122: + case 123: + case 124: + case 125: + case 126: + case 127: + case 128: + case 129: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 140: + case 141: + case 142: + case 143: + case 145: + case 146: + case 149: + case 151: + case 152: + case 153: + case 154: + case 155: + case 156: + case 158: + case 159: + case 160: + case 161: + case 162: + case 163: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 173: + case 174: + case 175: + case 177: + case 178: + case 179: + case 181: + case 182: + case 183: + case 184: + case 185: + case 186: + case 188: + case 189: + case 190: + case 191: + case 192: + case 193: + case 194: + case 195: + case 196: + case 197: + case 198: + case 199: + case 200: + case 202: + case 203: + case 204: + case 205: + case 206: + case 208: + case 209: + case 210: + case 211: + case 213: + case 214: + case 215: + case 217: + case 218: + case 220: + case 222: + case 223: + case 224: + case 226: + case 228: + case 229: + case 230: + case 234: + case 235: + case 236: + case 237: + case 256: + case 257: + case 258: + case 259: + case 260: + case 261: + case 262: this.enterOuterAlt(localctx, 2); - this.state = 1858; - this.identifier(); - this.state = 1859; - this.match(SqlBaseParser.T__8); - this.state = 1860; - this.expression(); + this.state = 2070; + this.type(0); break; - + default: + throw new antlr4.error.NoViableAltException(this); } } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -8201,27 +8441,27 @@ export default class SqlBaseParser extends antlr4.Parser { - privilege() { - let localctx = new PrivilegeContext(this, this._ctx, this.state); - this.enterRule(localctx, 140, SqlBaseParser.RULE_privilege); + baseType() { + let localctx = new BaseTypeContext(this, this._ctx, this.state); + this.enterRule(localctx, 134, SqlBaseParser.RULE_baseType); try { - this.state = 1868; + this.state = 2077; this._errHandler.sync(this); switch(this._input.LA(1)) { - case 172: + case 260: this.enterOuterAlt(localctx, 1); - this.state = 1864; - this.match(SqlBaseParser.SELECT); + this.state = 2073; + this.match(SqlBaseParser.TIME_WITH_TIME_ZONE); break; - case 50: + case 261: this.enterOuterAlt(localctx, 2); - this.state = 1865; - this.match(SqlBaseParser.DELETE); + this.state = 2074; + this.match(SqlBaseParser.TIMESTAMP_WITH_TIME_ZONE); break; - case 93: + case 262: this.enterOuterAlt(localctx, 3); - this.state = 1866; - this.match(SqlBaseParser.INSERT); + this.state = 2075; + this.match(SqlBaseParser.DOUBLE_PRECISION); break; case 10: case 11: @@ -8232,82 +8472,84 @@ export default class SqlBaseParser extends antlr4.Parser { case 19: case 20: case 21: + case 22: case 24: - case 25: case 26: - case 29: - case 30: + case 27: + case 28: case 31: case 32: case 33: case 34: + case 35: + case 36: case 39: - case 41: - case 45: - case 46: - case 47: + case 42: + case 44: + case 48: case 49: - case 51: - case 53: - case 55: - case 61: + case 50: + case 52: + case 54: + case 56: + case 57: + case 58: + case 60: + case 63: case 64: case 66: - case 68: case 69: - case 70: - case 71: - case 73: + case 72: + case 74: case 76: case 77: case 78: case 79: - case 80: case 81: case 84: + case 85: case 86: case 87: case 88: - case 90: + case 89: case 92: + case 94: case 95: - case 97: + case 96: case 98: case 100: - case 101: case 103: - case 104: case 105: - case 107: + case 106: + case 108: case 109: + case 111: case 112: case 113: case 114: case 115: - case 116: case 117: case 119: - case 120: - case 121: case 122: case 123: case 124: + case 125: + case 126: + case 127: case 128: case 129: - case 130: case 131: + case 132: case 133: case 134: - case 137: - case 139: + case 135: + case 136: case 140: case 141: case 142: case 143: - case 144: + case 145: case 146: - case 147: - case 148: case 149: case 151: case 152: @@ -8315,63 +8557,78 @@ export default class SqlBaseParser extends antlr4.Parser { case 154: case 155: case 156: - case 157: case 158: case 159: case 160: + case 161: case 162: case 163: - case 164: + case 165: case 166: case 167: case 168: case 169: case 170: case 171: + case 172: case 173: case 174: case 175: - case 176: case 177: case 178: case 179: - case 180: case 181: case 182: case 183: case 184: case 185: - case 187: + case 186: case 188: case 189: case 190: + case 191: case 192: case 193: case 194: case 195: + case 196: case 197: case 198: case 199: - case 201: + case 200: case 202: + case 203: + case 204: case 205: case 206: - case 207: + case 208: case 209: + case 210: case 211: - case 212: case 213: + case 214: + case 215: case 217: case 218: - case 219: case 220: - case 239: - case 240: - case 241: - case 242: + case 222: + case 223: + case 224: + case 226: + case 228: + case 229: + case 230: + case 234: + case 235: + case 236: + case 237: + case 256: + case 257: + case 258: + case 259: this.enterOuterAlt(localctx, 4); - this.state = 1867; - this.identifier(); + this.state = 2076; + this.qualifiedName(); break; default: throw new antlr4.error.NoViableAltException(this); @@ -8392,28 +8649,180 @@ export default class SqlBaseParser extends antlr4.Parser { - qualifiedName() { - let localctx = new QualifiedNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 142, SqlBaseParser.RULE_qualifiedName); + whenClause() { + let localctx = new WhenClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 136, SqlBaseParser.RULE_whenClause); try { this.enterOuterAlt(localctx, 1); - this.state = 1870; - this.identifier(); - this.state = 1875; + this.state = 2079; + this.match(SqlBaseParser.WHEN); + this.state = 2080; + localctx.condition = this.expression(); + this.state = 2081; + this.match(SqlBaseParser.THEN); + this.state = 2082; + localctx.result = this.expression(); + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + filter() { + let localctx = new FilterContext(this, this._ctx, this.state); + this.enterRule(localctx, 138, SqlBaseParser.RULE_filter); + try { + this.enterOuterAlt(localctx, 1); + this.state = 2084; + this.match(SqlBaseParser.FILTER); + this.state = 2085; + this.match(SqlBaseParser.T__1); + this.state = 2086; + this.match(SqlBaseParser.WHERE); + this.state = 2087; + this.booleanExpression(0); + this.state = 2088; + this.match(SqlBaseParser.T__2); + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + mergeCase() { + let localctx = new MergeCaseContext(this, this._ctx, this.state); + this.enterRule(localctx, 140, SqlBaseParser.RULE_mergeCase); + var _la = 0; + try { + this.state = 2138; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,239,this._ctx) - while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { - if(_alt===1) { - this.state = 1871; - this.match(SqlBaseParser.T__0); - this.state = 1872; - this.identifier(); + var la_ = this._interp.adaptivePredict(this._input,274,this._ctx); + switch(la_) { + case 1: + localctx = new MergeUpdateContext(this, localctx); + this.enterOuterAlt(localctx, 1); + this.state = 2090; + this.match(SqlBaseParser.WHEN); + this.state = 2091; + this.match(SqlBaseParser.MATCHED); + this.state = 2092; + this.match(SqlBaseParser.THEN); + this.state = 2093; + this.match(SqlBaseParser.UPDATE); + this.state = 2094; + this.match(SqlBaseParser.SET); + this.state = 2095; + localctx._identifier = this.identifier(); + localctx.targetColumns.push(localctx._identifier); + this.state = 2096; + this.match(SqlBaseParser.EQ); + this.state = 2097; + localctx._expression = this.expression(); + localctx.values.push(localctx._expression); + this.state = 2105; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 2098; + this.match(SqlBaseParser.T__3); + this.state = 2099; + localctx._identifier = this.identifier(); + localctx.targetColumns.push(localctx._identifier); + this.state = 2100; + this.match(SqlBaseParser.EQ); + this.state = 2101; + localctx._expression = this.expression(); + localctx.values.push(localctx._expression); + this.state = 2107; + this._errHandler.sync(this); + _la = this._input.LA(1); } - this.state = 1877; + break; + + case 2: + localctx = new MergeInsertContext(this, localctx); + this.enterOuterAlt(localctx, 2); + this.state = 2108; + this.match(SqlBaseParser.WHEN); + this.state = 2109; + this.match(SqlBaseParser.NOT); + this.state = 2110; + this.match(SqlBaseParser.MATCHED); + this.state = 2111; + this.match(SqlBaseParser.THEN); + this.state = 2112; + this.match(SqlBaseParser.INSERT); + this.state = 2124; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,239,this._ctx); - } + _la = this._input.LA(1); + if(_la===2) { + this.state = 2113; + this.match(SqlBaseParser.T__1); + this.state = 2114; + localctx._identifier = this.identifier(); + localctx.columns.push(localctx._identifier); + this.state = 2119; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 2115; + this.match(SqlBaseParser.T__3); + this.state = 2116; + localctx._identifier = this.identifier(); + localctx.columns.push(localctx._identifier); + this.state = 2121; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2122; + this.match(SqlBaseParser.T__2); + } + + this.state = 2126; + this.match(SqlBaseParser.VALUES); + this.state = 2127; + this.match(SqlBaseParser.T__1); + this.state = 2128; + localctx._expression = this.expression(); + localctx.values.push(localctx._expression); + this.state = 2133; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 2129; + this.match(SqlBaseParser.T__3); + this.state = 2130; + localctx._expression = this.expression(); + localctx.values.push(localctx._expression); + this.state = 2135; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2136; + this.match(SqlBaseParser.T__2); + break; + } } catch (re) { if(re instanceof antlr4.error.RecognitionException) { localctx.exception = re; @@ -8430,31 +8839,76 @@ export default class SqlBaseParser extends antlr4.Parser { - tableVersionExpression() { - let localctx = new TableVersionExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 144, SqlBaseParser.RULE_tableVersionExpression); + over() { + let localctx = new OverContext(this, this._ctx, this.state); + this.enterRule(localctx, 142, SqlBaseParser.RULE_over); var _la = 0; try { - localctx = new TableVersionContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1878; - this.match(SqlBaseParser.FOR); - this.state = 1879; - localctx.tableVersionType = this._input.LT(1); + this.state = 2140; + this.match(SqlBaseParser.OVER); + this.state = 2141; + this.match(SqlBaseParser.T__1); + this.state = 2152; + this._errHandler.sync(this); _la = this._input.LA(1); - if(!(((((_la - 184)) & ~0x1f) === 0 && ((1 << (_la - 184)) & 268435971) !== 0))) { - localctx.tableVersionType = this._errHandler.recoverInline(this); + if(_la===153) { + this.state = 2142; + this.match(SqlBaseParser.PARTITION); + this.state = 2143; + this.match(SqlBaseParser.BY); + this.state = 2144; + localctx._expression = this.expression(); + localctx.partition.push(localctx._expression); + this.state = 2149; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 2145; + this.match(SqlBaseParser.T__3); + this.state = 2146; + localctx._expression = this.expression(); + localctx.partition.push(localctx._expression); + this.state = 2151; + this._errHandler.sync(this); + _la = this._input.LA(1); + } } - else { - this._errHandler.reportMatch(this); - this.consume(); + + this.state = 2164; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===148) { + this.state = 2154; + this.match(SqlBaseParser.ORDER); + this.state = 2155; + this.match(SqlBaseParser.BY); + this.state = 2156; + this.sortItem(); + this.state = 2161; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 2157; + this.match(SqlBaseParser.T__3); + this.state = 2158; + this.sortItem(); + this.state = 2163; + this._errHandler.sync(this); + _la = this._input.LA(1); + } } - this.state = 1880; - this.match(SqlBaseParser.AS); - this.state = 1881; - this.match(SqlBaseParser.OF); - this.state = 1882; - this.valueExpression(0); + + this.state = 2167; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===92 || _la===162 || _la===182) { + this.state = 2166; + this.windowFrame(); + } + + this.state = 2169; + this.match(SqlBaseParser.T__2); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { localctx.exception = re; @@ -8471,33 +8925,78 @@ export default class SqlBaseParser extends antlr4.Parser { - grantor() { - let localctx = new GrantorContext(this, this._ctx, this.state); - this.enterRule(localctx, 146, SqlBaseParser.RULE_grantor); + windowFrame() { + let localctx = new WindowFrameContext(this, this._ctx, this.state); + this.enterRule(localctx, 144, SqlBaseParser.RULE_windowFrame); try { - this.state = 1887; + this.state = 2195; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,240,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,280,this._ctx); switch(la_) { case 1: - localctx = new CurrentUserGrantorContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1884; - this.match(SqlBaseParser.CURRENT_USER); + this.state = 2171; + localctx.frameType = this.match(SqlBaseParser.RANGE); + this.state = 2172; + localctx.start = this.frameBound(); break; case 2: - localctx = new CurrentRoleGrantorContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1885; - this.match(SqlBaseParser.CURRENT_ROLE); + this.state = 2173; + localctx.frameType = this.match(SqlBaseParser.ROWS); + this.state = 2174; + localctx.start = this.frameBound(); break; case 3: - localctx = new SpecifiedPrincipalContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 1886; - this.principal(); + this.state = 2175; + localctx.frameType = this.match(SqlBaseParser.GROUPS); + this.state = 2176; + localctx.start = this.frameBound(); + break; + + case 4: + this.enterOuterAlt(localctx, 4); + this.state = 2177; + localctx.frameType = this.match(SqlBaseParser.RANGE); + this.state = 2178; + this.match(SqlBaseParser.BETWEEN); + this.state = 2179; + localctx.start = this.frameBound(); + this.state = 2180; + this.match(SqlBaseParser.AND); + this.state = 2181; + localctx.end = this.frameBound(); + break; + + case 5: + this.enterOuterAlt(localctx, 5); + this.state = 2183; + localctx.frameType = this.match(SqlBaseParser.ROWS); + this.state = 2184; + this.match(SqlBaseParser.BETWEEN); + this.state = 2185; + localctx.start = this.frameBound(); + this.state = 2186; + this.match(SqlBaseParser.AND); + this.state = 2187; + localctx.end = this.frameBound(); + break; + + case 6: + this.enterOuterAlt(localctx, 6); + this.state = 2189; + localctx.frameType = this.match(SqlBaseParser.GROUPS); + this.state = 2190; + this.match(SqlBaseParser.BETWEEN); + this.state = 2191; + localctx.start = this.frameBound(); + this.state = 2192; + this.match(SqlBaseParser.AND); + this.state = 2193; + localctx.end = this.frameBound(); break; } @@ -8517,37 +9016,57 @@ export default class SqlBaseParser extends antlr4.Parser { - principal() { - let localctx = new PrincipalContext(this, this._ctx, this.state); - this.enterRule(localctx, 148, SqlBaseParser.RULE_principal); + frameBound() { + let localctx = new FrameBoundContext(this, this._ctx, this.state); + this.enterRule(localctx, 146, SqlBaseParser.RULE_frameBound); + var _la = 0; try { - this.state = 1894; + this.state = 2206; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,241,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,281,this._ctx); switch(la_) { case 1: - localctx = new UserPrincipalContext(this, localctx); + localctx = new UnboundedFrameContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1889; - this.match(SqlBaseParser.USER); - this.state = 1890; - this.identifier(); + this.state = 2197; + this.match(SqlBaseParser.UNBOUNDED); + this.state = 2198; + localctx.boundType = this.match(SqlBaseParser.PRECEDING); break; case 2: - localctx = new RolePrincipalContext(this, localctx); + localctx = new UnboundedFrameContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1891; - this.match(SqlBaseParser.ROLE); - this.state = 1892; - this.identifier(); + this.state = 2199; + this.match(SqlBaseParser.UNBOUNDED); + this.state = 2200; + localctx.boundType = this.match(SqlBaseParser.FOLLOWING); break; case 3: - localctx = new UnspecifiedPrincipalContext(this, localctx); + localctx = new CurrentRowBoundContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 1893; - this.identifier(); + this.state = 2201; + this.match(SqlBaseParser.CURRENT); + this.state = 2202; + this.match(SqlBaseParser.ROW); + break; + + case 4: + localctx = new BoundedFrameContext(this, localctx); + this.enterOuterAlt(localctx, 4); + this.state = 2203; + this.expression(); + this.state = 2204; + localctx.boundType = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===79 || _la===156)) { + localctx.boundType = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } break; } @@ -8567,26 +9086,17 @@ export default class SqlBaseParser extends antlr4.Parser { - roles() { - let localctx = new RolesContext(this, this._ctx, this.state); - this.enterRule(localctx, 150, SqlBaseParser.RULE_roles); - var _la = 0; + updateAssignment() { + let localctx = new UpdateAssignmentContext(this, this._ctx, this.state); + this.enterRule(localctx, 148, SqlBaseParser.RULE_updateAssignment); try { this.enterOuterAlt(localctx, 1); - this.state = 1896; + this.state = 2208; this.identifier(); - this.state = 1901; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===4) { - this.state = 1897; - this.match(SqlBaseParser.T__3); - this.state = 1898; - this.identifier(); - this.state = 1903; - this._errHandler.sync(this); - _la = this._input.LA(1); - } + this.state = 2209; + this.match(SqlBaseParser.EQ); + this.state = 2210; + this.expression(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { localctx.exception = re; @@ -8603,24 +9113,241 @@ export default class SqlBaseParser extends antlr4.Parser { - identifier() { - let localctx = new IdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 152, SqlBaseParser.RULE_identifier); + explainOption() { + let localctx = new ExplainOptionContext(this, this._ctx, this.state); + this.enterRule(localctx, 150, SqlBaseParser.RULE_explainOption); + var _la = 0; try { - this.state = 1909; + this.state = 2216; this._errHandler.sync(this); switch(this._input.LA(1)) { - case 239: - localctx = new UnquotedIdentifierContext(this, localctx); + case 81: + localctx = new ExplainFormatContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1904; - this.match(SqlBaseParser.IDENTIFIER); + this.state = 2212; + this.match(SqlBaseParser.FORMAT); + this.state = 2213; + localctx.value = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===89 || _la===109 || _la===206)) { + localctx.value = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } break; - case 241: - localctx = new QuotedIdentifierContext(this, localctx); + case 215: + localctx = new ExplainTypeContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1905; - this.match(SqlBaseParser.QUOTED_IDENTIFIER); + this.state = 2214; + this.match(SqlBaseParser.TYPE); + this.state = 2215; + localctx.value = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===60 || _la===106 || _la===122 || _la===226)) { + localctx.value = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + break; + default: + throw new antlr4.error.NoViableAltException(this); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + transactionMode() { + let localctx = new TransactionModeContext(this, this._ctx, this.state); + this.enterRule(localctx, 152, SqlBaseParser.RULE_transactionMode); + var _la = 0; + try { + this.state = 2223; + this._errHandler.sync(this); + switch(this._input.LA(1)) { + case 108: + localctx = new IsolationLevelContext(this, localctx); + this.enterOuterAlt(localctx, 1); + this.state = 2218; + this.match(SqlBaseParser.ISOLATION); + this.state = 2219; + this.match(SqlBaseParser.LEVEL); + this.state = 2220; + this.levelOfIsolation(); + break; + case 163: + localctx = new TransactionAccessModeContext(this, localctx); + this.enterOuterAlt(localctx, 2); + this.state = 2221; + this.match(SqlBaseParser.READ); + this.state = 2222; + localctx.accessMode = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===145 || _la===235)) { + localctx.accessMode = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + break; + default: + throw new antlr4.error.NoViableAltException(this); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + levelOfIsolation() { + let localctx = new LevelOfIsolationContext(this, this._ctx, this.state); + this.enterRule(localctx, 154, SqlBaseParser.RULE_levelOfIsolation); + try { + this.state = 2232; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,284,this._ctx); + switch(la_) { + case 1: + localctx = new ReadUncommittedContext(this, localctx); + this.enterOuterAlt(localctx, 1); + this.state = 2225; + this.match(SqlBaseParser.READ); + this.state = 2226; + this.match(SqlBaseParser.UNCOMMITTED); + break; + + case 2: + localctx = new ReadCommittedContext(this, localctx); + this.enterOuterAlt(localctx, 2); + this.state = 2227; + this.match(SqlBaseParser.READ); + this.state = 2228; + this.match(SqlBaseParser.COMMITTED); + break; + + case 3: + localctx = new RepeatableReadContext(this, localctx); + this.enterOuterAlt(localctx, 3); + this.state = 2229; + this.match(SqlBaseParser.REPEATABLE); + this.state = 2230; + this.match(SqlBaseParser.READ); + break; + + case 4: + localctx = new SerializableContext(this, localctx); + this.enterOuterAlt(localctx, 4); + this.state = 2231; + this.match(SqlBaseParser.SERIALIZABLE); + break; + + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + callArgument() { + let localctx = new CallArgumentContext(this, this._ctx, this.state); + this.enterRule(localctx, 156, SqlBaseParser.RULE_callArgument); + try { + this.state = 2239; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,285,this._ctx); + switch(la_) { + case 1: + localctx = new PositionalArgumentContext(this, localctx); + this.enterOuterAlt(localctx, 1); + this.state = 2234; + this.expression(); + break; + + case 2: + localctx = new NamedArgumentContext(this, localctx); + this.enterOuterAlt(localctx, 2); + this.state = 2235; + this.identifier(); + this.state = 2236; + this.match(SqlBaseParser.T__8); + this.state = 2237; + this.expression(); + break; + + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + privilege() { + let localctx = new PrivilegeContext(this, this._ctx, this.state); + this.enterRule(localctx, 158, SqlBaseParser.RULE_privilege); + try { + this.state = 2245; + this._errHandler.sync(this); + switch(this._input.LA(1)) { + case 187: + this.enterOuterAlt(localctx, 1); + this.state = 2241; + this.match(SqlBaseParser.SELECT); + break; + case 53: + this.enterOuterAlt(localctx, 2); + this.state = 2242; + this.match(SqlBaseParser.DELETE); + break; + case 101: + this.enterOuterAlt(localctx, 3); + this.state = 2243; + this.match(SqlBaseParser.INSERT); break; case 10: case 11: @@ -8631,82 +9358,84 @@ export default class SqlBaseParser extends antlr4.Parser { case 19: case 20: case 21: + case 22: case 24: - case 25: case 26: - case 29: - case 30: + case 27: + case 28: case 31: case 32: case 33: case 34: + case 35: + case 36: case 39: - case 41: - case 45: - case 46: - case 47: + case 42: + case 44: + case 48: case 49: - case 51: - case 53: - case 55: - case 61: + case 50: + case 52: + case 54: + case 56: + case 57: + case 58: + case 60: + case 63: case 64: case 66: - case 68: case 69: - case 70: - case 71: - case 73: + case 72: + case 74: case 76: case 77: case 78: case 79: - case 80: case 81: case 84: + case 85: case 86: case 87: case 88: - case 90: + case 89: case 92: + case 94: case 95: - case 97: + case 96: case 98: case 100: - case 101: case 103: - case 104: case 105: - case 107: + case 106: + case 108: case 109: + case 111: case 112: case 113: case 114: case 115: - case 116: case 117: case 119: - case 120: - case 121: case 122: case 123: case 124: + case 125: + case 126: + case 127: case 128: case 129: - case 130: case 131: + case 132: case 133: case 134: - case 137: - case 139: + case 135: + case 136: case 140: case 141: case 142: case 143: - case 144: + case 145: case 146: - case 147: - case 148: case 149: case 151: case 152: @@ -8714,72 +9443,195 @@ export default class SqlBaseParser extends antlr4.Parser { case 154: case 155: case 156: - case 157: case 158: case 159: case 160: + case 161: case 162: case 163: - case 164: + case 165: case 166: case 167: case 168: case 169: case 170: case 171: + case 172: case 173: case 174: case 175: - case 176: case 177: case 178: case 179: - case 180: case 181: case 182: case 183: case 184: case 185: - case 187: + case 186: case 188: case 189: case 190: + case 191: case 192: case 193: case 194: case 195: + case 196: case 197: case 198: case 199: - case 201: + case 200: case 202: + case 203: + case 204: case 205: case 206: - case 207: + case 208: case 209: + case 210: case 211: - case 212: case 213: + case 214: + case 215: case 217: case 218: - case 219: case 220: - localctx = new UnquotedIdentifierContext(this, localctx); - this.enterOuterAlt(localctx, 3); - this.state = 1906; - this.nonReserved(); - break; - case 242: - localctx = new BackQuotedIdentifierContext(this, localctx); + case 222: + case 223: + case 224: + case 226: + case 228: + case 229: + case 230: + case 234: + case 235: + case 236: + case 237: + case 256: + case 257: + case 258: + case 259: this.enterOuterAlt(localctx, 4); - this.state = 1907; - this.match(SqlBaseParser.BACKQUOTED_IDENTIFIER); + this.state = 2244; + this.identifier(); break; - case 240: - localctx = new DigitIdentifierContext(this, localctx); - this.enterOuterAlt(localctx, 5); - this.state = 1908; - this.match(SqlBaseParser.DIGIT_IDENTIFIER); + default: + throw new antlr4.error.NoViableAltException(this); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + qualifiedName() { + let localctx = new QualifiedNameContext(this, this._ctx, this.state); + this.enterRule(localctx, 160, SqlBaseParser.RULE_qualifiedName); + try { + this.enterOuterAlt(localctx, 1); + this.state = 2247; + this.identifier(); + this.state = 2252; + this._errHandler.sync(this); + var _alt = this._interp.adaptivePredict(this._input,287,this._ctx) + while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { + if(_alt===1) { + this.state = 2248; + this.match(SqlBaseParser.T__0); + this.state = 2249; + this.identifier(); + } + this.state = 2254; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input,287,this._ctx); + } + + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + tableVersionExpression() { + let localctx = new TableVersionExpressionContext(this, this._ctx, this.state); + this.enterRule(localctx, 162, SqlBaseParser.RULE_tableVersionExpression); + var _la = 0; + try { + localctx = new TableVersionContext(this, localctx); + this.enterOuterAlt(localctx, 1); + this.state = 2255; + this.match(SqlBaseParser.FOR); + this.state = 2256; + localctx.tableVersionType = this._input.LT(1); + _la = this._input.LA(1); + if(!(((((_la - 199)) & ~0x1f) === 0 && ((1 << (_la - 199)) & 1073742851) !== 0))) { + localctx.tableVersionType = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 2257; + this.tableVersionState(); + this.state = 2258; + this.valueExpression(0); + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + tableVersionState() { + let localctx = new TableVersionStateContext(this, this._ctx, this.state); + this.enterRule(localctx, 164, SqlBaseParser.RULE_tableVersionState); + try { + this.state = 2263; + this._errHandler.sync(this); + switch(this._input.LA(1)) { + case 18: + localctx = new TableversionasofContext(this, localctx); + this.enterOuterAlt(localctx, 1); + this.state = 2260; + this.match(SqlBaseParser.AS); + this.state = 2261; + this.match(SqlBaseParser.OF); + break; + case 21: + localctx = new TableversionbeforeContext(this, localctx); + this.enterOuterAlt(localctx, 2); + this.state = 2262; + this.match(SqlBaseParser.BEFORE); break; default: throw new antlr4.error.NoViableAltException(this); @@ -8795,809 +9647,3001 @@ export default class SqlBaseParser extends antlr4.Parser { } finally { this.exitRule(); } - return localctx; + return localctx; + } + + + + grantor() { + let localctx = new GrantorContext(this, this._ctx, this.state); + this.enterRule(localctx, 166, SqlBaseParser.RULE_grantor); + try { + this.state = 2268; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,289,this._ctx); + switch(la_) { + case 1: + localctx = new CurrentUserGrantorContext(this, localctx); + this.enterOuterAlt(localctx, 1); + this.state = 2265; + this.match(SqlBaseParser.CURRENT_USER); + break; + + case 2: + localctx = new CurrentRoleGrantorContext(this, localctx); + this.enterOuterAlt(localctx, 2); + this.state = 2266; + this.match(SqlBaseParser.CURRENT_ROLE); + break; + + case 3: + localctx = new SpecifiedPrincipalContext(this, localctx); + this.enterOuterAlt(localctx, 3); + this.state = 2267; + this.principal(); + break; + + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + principal() { + let localctx = new PrincipalContext(this, this._ctx, this.state); + this.enterRule(localctx, 168, SqlBaseParser.RULE_principal); + try { + this.state = 2275; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,290,this._ctx); + switch(la_) { + case 1: + localctx = new UserPrincipalContext(this, localctx); + this.enterOuterAlt(localctx, 1); + this.state = 2270; + this.match(SqlBaseParser.USER); + this.state = 2271; + this.identifier(); + break; + + case 2: + localctx = new RolePrincipalContext(this, localctx); + this.enterOuterAlt(localctx, 2); + this.state = 2272; + this.match(SqlBaseParser.ROLE); + this.state = 2273; + this.identifier(); + break; + + case 3: + localctx = new UnspecifiedPrincipalContext(this, localctx); + this.enterOuterAlt(localctx, 3); + this.state = 2274; + this.identifier(); + break; + + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + roles() { + let localctx = new RolesContext(this, this._ctx, this.state); + this.enterRule(localctx, 170, SqlBaseParser.RULE_roles); + var _la = 0; + try { + this.enterOuterAlt(localctx, 1); + this.state = 2277; + this.identifier(); + this.state = 2282; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===4) { + this.state = 2278; + this.match(SqlBaseParser.T__3); + this.state = 2279; + this.identifier(); + this.state = 2284; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + identifier() { + let localctx = new IdentifierContext(this, this._ctx, this.state); + this.enterRule(localctx, 172, SqlBaseParser.RULE_identifier); + try { + this.state = 2290; + this._errHandler.sync(this); + switch(this._input.LA(1)) { + case 256: + localctx = new UnquotedIdentifierContext(this, localctx); + this.enterOuterAlt(localctx, 1); + this.state = 2285; + this.match(SqlBaseParser.IDENTIFIER); + break; + case 258: + localctx = new QuotedIdentifierContext(this, localctx); + this.enterOuterAlt(localctx, 2); + this.state = 2286; + this.match(SqlBaseParser.QUOTED_IDENTIFIER); + break; + case 10: + case 11: + case 12: + case 14: + case 16: + case 17: + case 19: + case 20: + case 21: + case 22: + case 24: + case 26: + case 27: + case 28: + case 31: + case 32: + case 33: + case 34: + case 35: + case 36: + case 39: + case 42: + case 44: + case 48: + case 49: + case 50: + case 52: + case 54: + case 56: + case 57: + case 58: + case 60: + case 63: + case 64: + case 66: + case 69: + case 72: + case 74: + case 76: + case 77: + case 78: + case 79: + case 81: + case 84: + case 85: + case 86: + case 87: + case 88: + case 89: + case 92: + case 94: + case 95: + case 96: + case 98: + case 100: + case 103: + case 105: + case 106: + case 108: + case 109: + case 111: + case 112: + case 113: + case 114: + case 115: + case 117: + case 119: + case 122: + case 123: + case 124: + case 125: + case 126: + case 127: + case 128: + case 129: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 140: + case 141: + case 142: + case 143: + case 145: + case 146: + case 149: + case 151: + case 152: + case 153: + case 154: + case 155: + case 156: + case 158: + case 159: + case 160: + case 161: + case 162: + case 163: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 173: + case 174: + case 175: + case 177: + case 178: + case 179: + case 181: + case 182: + case 183: + case 184: + case 185: + case 186: + case 188: + case 189: + case 190: + case 191: + case 192: + case 193: + case 194: + case 195: + case 196: + case 197: + case 198: + case 199: + case 200: + case 202: + case 203: + case 204: + case 205: + case 206: + case 208: + case 209: + case 210: + case 211: + case 213: + case 214: + case 215: + case 217: + case 218: + case 220: + case 222: + case 223: + case 224: + case 226: + case 228: + case 229: + case 230: + case 234: + case 235: + case 236: + case 237: + localctx = new UnquotedIdentifierContext(this, localctx); + this.enterOuterAlt(localctx, 3); + this.state = 2287; + this.nonReserved(); + break; + case 259: + localctx = new BackQuotedIdentifierContext(this, localctx); + this.enterOuterAlt(localctx, 4); + this.state = 2288; + this.match(SqlBaseParser.BACKQUOTED_IDENTIFIER); + break; + case 257: + localctx = new DigitIdentifierContext(this, localctx); + this.enterOuterAlt(localctx, 5); + this.state = 2289; + this.match(SqlBaseParser.DIGIT_IDENTIFIER); + break; + default: + throw new antlr4.error.NoViableAltException(this); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + number() { + let localctx = new NumberContext(this, this._ctx, this.state); + this.enterRule(localctx, 174, SqlBaseParser.RULE_number); + try { + this.state = 2295; + this._errHandler.sync(this); + switch(this._input.LA(1)) { + case 254: + localctx = new DecimalLiteralContext(this, localctx); + this.enterOuterAlt(localctx, 1); + this.state = 2292; + this.match(SqlBaseParser.DECIMAL_VALUE); + break; + case 255: + localctx = new DoubleLiteralContext(this, localctx); + this.enterOuterAlt(localctx, 2); + this.state = 2293; + this.match(SqlBaseParser.DOUBLE_VALUE); + break; + case 253: + localctx = new IntegerLiteralContext(this, localctx); + this.enterOuterAlt(localctx, 3); + this.state = 2294; + this.match(SqlBaseParser.INTEGER_VALUE); + break; + default: + throw new antlr4.error.NoViableAltException(this); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + constraintSpecification() { + let localctx = new ConstraintSpecificationContext(this, this._ctx, this.state); + this.enterRule(localctx, 176, SqlBaseParser.RULE_constraintSpecification); + try { + this.state = 2299; + this._errHandler.sync(this); + switch(this._input.LA(1)) { + case 37: + this.enterOuterAlt(localctx, 1); + this.state = 2297; + this.namedConstraintSpecification(); + break; + case 158: + case 220: + this.enterOuterAlt(localctx, 2); + this.state = 2298; + this.unnamedConstraintSpecification(); + break; + default: + throw new antlr4.error.NoViableAltException(this); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + namedConstraintSpecification() { + let localctx = new NamedConstraintSpecificationContext(this, this._ctx, this.state); + this.enterRule(localctx, 178, SqlBaseParser.RULE_namedConstraintSpecification); + try { + this.enterOuterAlt(localctx, 1); + this.state = 2301; + this.match(SqlBaseParser.CONSTRAINT); + this.state = 2302; + localctx.name = this.identifier(); + this.state = 2303; + this.unnamedConstraintSpecification(); + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + unnamedConstraintSpecification() { + let localctx = new UnnamedConstraintSpecificationContext(this, this._ctx, this.state); + this.enterRule(localctx, 180, SqlBaseParser.RULE_unnamedConstraintSpecification); + try { + this.enterOuterAlt(localctx, 1); + this.state = 2305; + this.constraintType(); + this.state = 2306; + this.columnAliases(); + this.state = 2308; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,295,this._ctx); + if(la_===1) { + this.state = 2307; + this.constraintQualifiers(); + + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + constraintType() { + let localctx = new ConstraintTypeContext(this, this._ctx, this.state); + this.enterRule(localctx, 182, SqlBaseParser.RULE_constraintType); + try { + this.state = 2313; + this._errHandler.sync(this); + switch(this._input.LA(1)) { + case 220: + this.enterOuterAlt(localctx, 1); + this.state = 2310; + this.match(SqlBaseParser.UNIQUE); + break; + case 158: + this.enterOuterAlt(localctx, 2); + this.state = 2311; + this.match(SqlBaseParser.PRIMARY); + this.state = 2312; + this.match(SqlBaseParser.KEY); + break; + default: + throw new antlr4.error.NoViableAltException(this); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + constraintQualifiers() { + let localctx = new ConstraintQualifiersContext(this, this._ctx, this.state); + this.enterRule(localctx, 184, SqlBaseParser.RULE_constraintQualifiers); + var _la = 0; + try { + this.enterOuterAlt(localctx, 1); + this.state = 2318; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(((((_la - 58)) & ~0x1f) === 0 && ((1 << (_la - 58)) & 321) !== 0) || _la===138 || _la===166) { + this.state = 2315; + this.constraintQualifier(); + this.state = 2320; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + constraintQualifier() { + let localctx = new ConstraintQualifierContext(this, this._ctx, this.state); + this.enterRule(localctx, 186, SqlBaseParser.RULE_constraintQualifier); + try { + this.state = 2324; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,298,this._ctx); + switch(la_) { + case 1: + this.enterOuterAlt(localctx, 1); + this.state = 2321; + this.constraintEnabled(); + break; + + case 2: + this.enterOuterAlt(localctx, 2); + this.state = 2322; + this.constraintRely(); + break; + + case 3: + this.enterOuterAlt(localctx, 3); + this.state = 2323; + this.constraintEnforced(); + break; + + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + constraintRely() { + let localctx = new ConstraintRelyContext(this, this._ctx, this.state); + this.enterRule(localctx, 188, SqlBaseParser.RULE_constraintRely); + try { + this.state = 2329; + this._errHandler.sync(this); + switch(this._input.LA(1)) { + case 166: + this.enterOuterAlt(localctx, 1); + this.state = 2326; + this.match(SqlBaseParser.RELY); + break; + case 138: + this.enterOuterAlt(localctx, 2); + this.state = 2327; + this.match(SqlBaseParser.NOT); + this.state = 2328; + this.match(SqlBaseParser.RELY); + break; + default: + throw new antlr4.error.NoViableAltException(this); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + constraintEnabled() { + let localctx = new ConstraintEnabledContext(this, this._ctx, this.state); + this.enterRule(localctx, 190, SqlBaseParser.RULE_constraintEnabled); + var _la = 0; + try { + this.enterOuterAlt(localctx, 1); + this.state = 2331; + _la = this._input.LA(1); + if(!(_la===58 || _la===64)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + constraintEnforced() { + let localctx = new ConstraintEnforcedContext(this, this._ctx, this.state); + this.enterRule(localctx, 192, SqlBaseParser.RULE_constraintEnforced); + try { + this.state = 2336; + this._errHandler.sync(this); + switch(this._input.LA(1)) { + case 66: + this.enterOuterAlt(localctx, 1); + this.state = 2333; + this.match(SqlBaseParser.ENFORCED); + break; + case 138: + this.enterOuterAlt(localctx, 2); + this.state = 2334; + this.match(SqlBaseParser.NOT); + this.state = 2335; + this.match(SqlBaseParser.ENFORCED); + break; + default: + throw new antlr4.error.NoViableAltException(this); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + nonReserved() { + let localctx = new NonReservedContext(this, this._ctx, this.state); + this.enterRule(localctx, 194, SqlBaseParser.RULE_nonReserved); + var _la = 0; + try { + this.enterOuterAlt(localctx, 1); + this.state = 2338; + _la = this._input.LA(1); + if(!((((_la) & ~0x1f) === 0 && ((1 << _la) & 2642107392) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2539066527) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 3555915045) !== 0) || ((((_la - 96)) & ~0x1f) === 0 && ((1 << (_la - 96)) & 4239373973) !== 0) || ((((_la - 128)) & ~0x1f) === 0 && ((1 << (_la - 128)) & 3752260091) !== 0) || ((((_la - 160)) & ~0x1f) === 0 && ((1 << (_la - 160)) & 4159635439) !== 0) || ((((_la - 192)) & ~0x1f) === 0 && ((1 << (_la - 192)) & 3606019583) !== 0) || ((((_la - 224)) & ~0x1f) === 0 && ((1 << (_la - 224)) & 15477) !== 0))) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + +} + +SqlBaseParser.EOF = antlr4.Token.EOF; +SqlBaseParser.T__0 = 1; +SqlBaseParser.T__1 = 2; +SqlBaseParser.T__2 = 3; +SqlBaseParser.T__3 = 4; +SqlBaseParser.T__4 = 5; +SqlBaseParser.T__5 = 6; +SqlBaseParser.T__6 = 7; +SqlBaseParser.T__7 = 8; +SqlBaseParser.T__8 = 9; +SqlBaseParser.ADD = 10; +SqlBaseParser.ADMIN = 11; +SqlBaseParser.ALL = 12; +SqlBaseParser.ALTER = 13; +SqlBaseParser.ANALYZE = 14; +SqlBaseParser.AND = 15; +SqlBaseParser.ANY = 16; +SqlBaseParser.ARRAY = 17; +SqlBaseParser.AS = 18; +SqlBaseParser.ASC = 19; +SqlBaseParser.AT = 20; +SqlBaseParser.BEFORE = 21; +SqlBaseParser.BERNOULLI = 22; +SqlBaseParser.BETWEEN = 23; +SqlBaseParser.BRANCH = 24; +SqlBaseParser.BY = 25; +SqlBaseParser.CALL = 26; +SqlBaseParser.CALLED = 27; +SqlBaseParser.CASCADE = 28; +SqlBaseParser.CASE = 29; +SqlBaseParser.CAST = 30; +SqlBaseParser.CATALOGS = 31; +SqlBaseParser.COLUMN = 32; +SqlBaseParser.COLUMNS = 33; +SqlBaseParser.COMMENT = 34; +SqlBaseParser.COMMIT = 35; +SqlBaseParser.COMMITTED = 36; +SqlBaseParser.CONSTRAINT = 37; +SqlBaseParser.CREATE = 38; +SqlBaseParser.COPARTITION = 39; +SqlBaseParser.CROSS = 40; +SqlBaseParser.CUBE = 41; +SqlBaseParser.CURRENT = 42; +SqlBaseParser.CURRENT_DATE = 43; +SqlBaseParser.CURRENT_ROLE = 44; +SqlBaseParser.CURRENT_TIME = 45; +SqlBaseParser.CURRENT_TIMESTAMP = 46; +SqlBaseParser.CURRENT_USER = 47; +SqlBaseParser.DATA = 48; +SqlBaseParser.DATE = 49; +SqlBaseParser.DAY = 50; +SqlBaseParser.DEALLOCATE = 51; +SqlBaseParser.DEFINER = 52; +SqlBaseParser.DELETE = 53; +SqlBaseParser.DESC = 54; +SqlBaseParser.DESCRIBE = 55; +SqlBaseParser.DESCRIPTOR = 56; +SqlBaseParser.DETERMINISTIC = 57; +SqlBaseParser.DISABLED = 58; +SqlBaseParser.DISTINCT = 59; +SqlBaseParser.DISTRIBUTED = 60; +SqlBaseParser.DROP = 61; +SqlBaseParser.ELSE = 62; +SqlBaseParser.EMPTY = 63; +SqlBaseParser.ENABLED = 64; +SqlBaseParser.END = 65; +SqlBaseParser.ENFORCED = 66; +SqlBaseParser.ESCAPE = 67; +SqlBaseParser.EXCEPT = 68; +SqlBaseParser.EXCLUDING = 69; +SqlBaseParser.EXECUTE = 70; +SqlBaseParser.EXISTS = 71; +SqlBaseParser.EXPLAIN = 72; +SqlBaseParser.EXTRACT = 73; +SqlBaseParser.EXTERNAL = 74; +SqlBaseParser.FALSE = 75; +SqlBaseParser.FETCH = 76; +SqlBaseParser.FILTER = 77; +SqlBaseParser.FIRST = 78; +SqlBaseParser.FOLLOWING = 79; +SqlBaseParser.FOR = 80; +SqlBaseParser.FORMAT = 81; +SqlBaseParser.FROM = 82; +SqlBaseParser.FULL = 83; +SqlBaseParser.FUNCTION = 84; +SqlBaseParser.FUNCTIONS = 85; +SqlBaseParser.GRANT = 86; +SqlBaseParser.GRANTED = 87; +SqlBaseParser.GRANTS = 88; +SqlBaseParser.GRAPHVIZ = 89; +SqlBaseParser.GROUP = 90; +SqlBaseParser.GROUPING = 91; +SqlBaseParser.GROUPS = 92; +SqlBaseParser.HAVING = 93; +SqlBaseParser.HOUR = 94; +SqlBaseParser.IF = 95; +SqlBaseParser.IGNORE = 96; +SqlBaseParser.IN = 97; +SqlBaseParser.INCLUDING = 98; +SqlBaseParser.INNER = 99; +SqlBaseParser.INPUT = 100; +SqlBaseParser.INSERT = 101; +SqlBaseParser.INTERSECT = 102; +SqlBaseParser.INTERVAL = 103; +SqlBaseParser.INTO = 104; +SqlBaseParser.INVOKER = 105; +SqlBaseParser.IO = 106; +SqlBaseParser.IS = 107; +SqlBaseParser.ISOLATION = 108; +SqlBaseParser.JSON = 109; +SqlBaseParser.JOIN = 110; +SqlBaseParser.KEEP = 111; +SqlBaseParser.KEY = 112; +SqlBaseParser.LANGUAGE = 113; +SqlBaseParser.LAST = 114; +SqlBaseParser.LATERAL = 115; +SqlBaseParser.LEFT = 116; +SqlBaseParser.LEVEL = 117; +SqlBaseParser.LIKE = 118; +SqlBaseParser.LIMIT = 119; +SqlBaseParser.LOCALTIME = 120; +SqlBaseParser.LOCALTIMESTAMP = 121; +SqlBaseParser.LOGICAL = 122; +SqlBaseParser.MAP = 123; +SqlBaseParser.MATCHED = 124; +SqlBaseParser.MATERIALIZED = 125; +SqlBaseParser.MERGE = 126; +SqlBaseParser.MINUTE = 127; +SqlBaseParser.MONTH = 128; +SqlBaseParser.NAME = 129; +SqlBaseParser.NATURAL = 130; +SqlBaseParser.NFC = 131; +SqlBaseParser.NFD = 132; +SqlBaseParser.NFKC = 133; +SqlBaseParser.NFKD = 134; +SqlBaseParser.NO = 135; +SqlBaseParser.NONE = 136; +SqlBaseParser.NORMALIZE = 137; +SqlBaseParser.NOT = 138; +SqlBaseParser.NULL = 139; +SqlBaseParser.NULLIF = 140; +SqlBaseParser.NULLS = 141; +SqlBaseParser.OF = 142; +SqlBaseParser.OFFSET = 143; +SqlBaseParser.ON = 144; +SqlBaseParser.ONLY = 145; +SqlBaseParser.OPTION = 146; +SqlBaseParser.OR = 147; +SqlBaseParser.ORDER = 148; +SqlBaseParser.ORDINALITY = 149; +SqlBaseParser.OUTER = 150; +SqlBaseParser.OUTPUT = 151; +SqlBaseParser.OVER = 152; +SqlBaseParser.PARTITION = 153; +SqlBaseParser.PARTITIONS = 154; +SqlBaseParser.POSITION = 155; +SqlBaseParser.PRECEDING = 156; +SqlBaseParser.PREPARE = 157; +SqlBaseParser.PRIMARY = 158; +SqlBaseParser.PRIVILEGES = 159; +SqlBaseParser.PROPERTIES = 160; +SqlBaseParser.PRUNE = 161; +SqlBaseParser.RANGE = 162; +SqlBaseParser.READ = 163; +SqlBaseParser.RECURSIVE = 164; +SqlBaseParser.REFRESH = 165; +SqlBaseParser.RELY = 166; +SqlBaseParser.RENAME = 167; +SqlBaseParser.REPEATABLE = 168; +SqlBaseParser.REPLACE = 169; +SqlBaseParser.RESET = 170; +SqlBaseParser.RESPECT = 171; +SqlBaseParser.RESTRICT = 172; +SqlBaseParser.RETURN = 173; +SqlBaseParser.RETURNS = 174; +SqlBaseParser.REVOKE = 175; +SqlBaseParser.RIGHT = 176; +SqlBaseParser.ROLE = 177; +SqlBaseParser.ROLES = 178; +SqlBaseParser.ROLLBACK = 179; +SqlBaseParser.ROLLUP = 180; +SqlBaseParser.ROW = 181; +SqlBaseParser.ROWS = 182; +SqlBaseParser.SCHEMA = 183; +SqlBaseParser.SCHEMAS = 184; +SqlBaseParser.SECOND = 185; +SqlBaseParser.SECURITY = 186; +SqlBaseParser.SELECT = 187; +SqlBaseParser.SERIALIZABLE = 188; +SqlBaseParser.SESSION = 189; +SqlBaseParser.SET = 190; +SqlBaseParser.SETS = 191; +SqlBaseParser.SHOW = 192; +SqlBaseParser.SOME = 193; +SqlBaseParser.SQL = 194; +SqlBaseParser.START = 195; +SqlBaseParser.STATS = 196; +SqlBaseParser.SUBSTRING = 197; +SqlBaseParser.SYSTEM = 198; +SqlBaseParser.SYSTEM_TIME = 199; +SqlBaseParser.SYSTEM_VERSION = 200; +SqlBaseParser.TABLE = 201; +SqlBaseParser.TABLES = 202; +SqlBaseParser.TABLESAMPLE = 203; +SqlBaseParser.TAG = 204; +SqlBaseParser.TEMPORARY = 205; +SqlBaseParser.TEXT = 206; +SqlBaseParser.THEN = 207; +SqlBaseParser.TIME = 208; +SqlBaseParser.TIMESTAMP = 209; +SqlBaseParser.TO = 210; +SqlBaseParser.TRANSACTION = 211; +SqlBaseParser.TRUE = 212; +SqlBaseParser.TRUNCATE = 213; +SqlBaseParser.TRY_CAST = 214; +SqlBaseParser.TYPE = 215; +SqlBaseParser.UESCAPE = 216; +SqlBaseParser.UNBOUNDED = 217; +SqlBaseParser.UNCOMMITTED = 218; +SqlBaseParser.UNION = 219; +SqlBaseParser.UNIQUE = 220; +SqlBaseParser.UNNEST = 221; +SqlBaseParser.UPDATE = 222; +SqlBaseParser.USE = 223; +SqlBaseParser.USER = 224; +SqlBaseParser.USING = 225; +SqlBaseParser.VALIDATE = 226; +SqlBaseParser.VALUES = 227; +SqlBaseParser.VERBOSE = 228; +SqlBaseParser.VERSION = 229; +SqlBaseParser.VIEW = 230; +SqlBaseParser.WHEN = 231; +SqlBaseParser.WHERE = 232; +SqlBaseParser.WITH = 233; +SqlBaseParser.WORK = 234; +SqlBaseParser.WRITE = 235; +SqlBaseParser.YEAR = 236; +SqlBaseParser.ZONE = 237; +SqlBaseParser.EQ = 238; +SqlBaseParser.NEQ = 239; +SqlBaseParser.LT = 240; +SqlBaseParser.LTE = 241; +SqlBaseParser.GT = 242; +SqlBaseParser.GTE = 243; +SqlBaseParser.PLUS = 244; +SqlBaseParser.MINUS = 245; +SqlBaseParser.ASTERISK = 246; +SqlBaseParser.SLASH = 247; +SqlBaseParser.PERCENT = 248; +SqlBaseParser.CONCAT = 249; +SqlBaseParser.STRING = 250; +SqlBaseParser.UNICODE_STRING = 251; +SqlBaseParser.BINARY_LITERAL = 252; +SqlBaseParser.INTEGER_VALUE = 253; +SqlBaseParser.DECIMAL_VALUE = 254; +SqlBaseParser.DOUBLE_VALUE = 255; +SqlBaseParser.IDENTIFIER = 256; +SqlBaseParser.DIGIT_IDENTIFIER = 257; +SqlBaseParser.QUOTED_IDENTIFIER = 258; +SqlBaseParser.BACKQUOTED_IDENTIFIER = 259; +SqlBaseParser.TIME_WITH_TIME_ZONE = 260; +SqlBaseParser.TIMESTAMP_WITH_TIME_ZONE = 261; +SqlBaseParser.DOUBLE_PRECISION = 262; +SqlBaseParser.SIMPLE_COMMENT = 263; +SqlBaseParser.BRACKETED_COMMENT = 264; +SqlBaseParser.WS = 265; +SqlBaseParser.UNRECOGNIZED = 266; +SqlBaseParser.DELIMITER = 267; + +SqlBaseParser.RULE_singleStatement = 0; +SqlBaseParser.RULE_standaloneExpression = 1; +SqlBaseParser.RULE_standaloneRoutineBody = 2; +SqlBaseParser.RULE_statement = 3; +SqlBaseParser.RULE_query = 4; +SqlBaseParser.RULE_with = 5; +SqlBaseParser.RULE_tableElement = 6; +SqlBaseParser.RULE_columnDefinition = 7; +SqlBaseParser.RULE_likeClause = 8; +SqlBaseParser.RULE_properties = 9; +SqlBaseParser.RULE_property = 10; +SqlBaseParser.RULE_sqlParameterDeclaration = 11; +SqlBaseParser.RULE_routineCharacteristics = 12; +SqlBaseParser.RULE_routineCharacteristic = 13; +SqlBaseParser.RULE_alterRoutineCharacteristics = 14; +SqlBaseParser.RULE_alterRoutineCharacteristic = 15; +SqlBaseParser.RULE_routineBody = 16; +SqlBaseParser.RULE_returnStatement = 17; +SqlBaseParser.RULE_externalBodyReference = 18; +SqlBaseParser.RULE_language = 19; +SqlBaseParser.RULE_determinism = 20; +SqlBaseParser.RULE_nullCallClause = 21; +SqlBaseParser.RULE_externalRoutineName = 22; +SqlBaseParser.RULE_viewSecurity = 23; +SqlBaseParser.RULE_queryNoWith = 24; +SqlBaseParser.RULE_queryTerm = 25; +SqlBaseParser.RULE_queryPrimary = 26; +SqlBaseParser.RULE_sortItem = 27; +SqlBaseParser.RULE_querySpecification = 28; +SqlBaseParser.RULE_groupBy = 29; +SqlBaseParser.RULE_groupingElement = 30; +SqlBaseParser.RULE_groupingSet = 31; +SqlBaseParser.RULE_namedQuery = 32; +SqlBaseParser.RULE_setQuantifier = 33; +SqlBaseParser.RULE_selectItem = 34; +SqlBaseParser.RULE_relation = 35; +SqlBaseParser.RULE_joinType = 36; +SqlBaseParser.RULE_joinCriteria = 37; +SqlBaseParser.RULE_sampledRelation = 38; +SqlBaseParser.RULE_sampleType = 39; +SqlBaseParser.RULE_aliasedRelation = 40; +SqlBaseParser.RULE_columnAliases = 41; +SqlBaseParser.RULE_relationPrimary = 42; +SqlBaseParser.RULE_expression = 43; +SqlBaseParser.RULE_booleanExpression = 44; +SqlBaseParser.RULE_predicate = 45; +SqlBaseParser.RULE_valueExpression = 46; +SqlBaseParser.RULE_primaryExpression = 47; +SqlBaseParser.RULE_string = 48; +SqlBaseParser.RULE_nullTreatment = 49; +SqlBaseParser.RULE_timeZoneSpecifier = 50; +SqlBaseParser.RULE_comparisonOperator = 51; +SqlBaseParser.RULE_comparisonQuantifier = 52; +SqlBaseParser.RULE_booleanValue = 53; +SqlBaseParser.RULE_interval = 54; +SqlBaseParser.RULE_intervalField = 55; +SqlBaseParser.RULE_normalForm = 56; +SqlBaseParser.RULE_types = 57; +SqlBaseParser.RULE_type = 58; +SqlBaseParser.RULE_tableFunctionCall = 59; +SqlBaseParser.RULE_tableFunctionArgument = 60; +SqlBaseParser.RULE_tableArgument = 61; +SqlBaseParser.RULE_tableArgumentRelation = 62; +SqlBaseParser.RULE_descriptorArgument = 63; +SqlBaseParser.RULE_descriptorField = 64; +SqlBaseParser.RULE_copartitionTables = 65; +SqlBaseParser.RULE_typeParameter = 66; +SqlBaseParser.RULE_baseType = 67; +SqlBaseParser.RULE_whenClause = 68; +SqlBaseParser.RULE_filter = 69; +SqlBaseParser.RULE_mergeCase = 70; +SqlBaseParser.RULE_over = 71; +SqlBaseParser.RULE_windowFrame = 72; +SqlBaseParser.RULE_frameBound = 73; +SqlBaseParser.RULE_updateAssignment = 74; +SqlBaseParser.RULE_explainOption = 75; +SqlBaseParser.RULE_transactionMode = 76; +SqlBaseParser.RULE_levelOfIsolation = 77; +SqlBaseParser.RULE_callArgument = 78; +SqlBaseParser.RULE_privilege = 79; +SqlBaseParser.RULE_qualifiedName = 80; +SqlBaseParser.RULE_tableVersionExpression = 81; +SqlBaseParser.RULE_tableVersionState = 82; +SqlBaseParser.RULE_grantor = 83; +SqlBaseParser.RULE_principal = 84; +SqlBaseParser.RULE_roles = 85; +SqlBaseParser.RULE_identifier = 86; +SqlBaseParser.RULE_number = 87; +SqlBaseParser.RULE_constraintSpecification = 88; +SqlBaseParser.RULE_namedConstraintSpecification = 89; +SqlBaseParser.RULE_unnamedConstraintSpecification = 90; +SqlBaseParser.RULE_constraintType = 91; +SqlBaseParser.RULE_constraintQualifiers = 92; +SqlBaseParser.RULE_constraintQualifier = 93; +SqlBaseParser.RULE_constraintRely = 94; +SqlBaseParser.RULE_constraintEnabled = 95; +SqlBaseParser.RULE_constraintEnforced = 96; +SqlBaseParser.RULE_nonReserved = 97; + +class SingleStatementContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_singleStatement; + } + + statement() { + return this.getTypedRuleContext(StatementContext,0); + }; + + EOF() { + return this.getToken(SqlBaseParser.EOF, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterSingleStatement(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitSingleStatement(this); + } + } + + +} + + + +class StandaloneExpressionContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_standaloneExpression; + } + + expression() { + return this.getTypedRuleContext(ExpressionContext,0); + }; + + EOF() { + return this.getToken(SqlBaseParser.EOF, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterStandaloneExpression(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitStandaloneExpression(this); + } + } + + +} + + + +class StandaloneRoutineBodyContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_standaloneRoutineBody; + } + + routineBody() { + return this.getTypedRuleContext(RoutineBodyContext,0); + }; + + EOF() { + return this.getToken(SqlBaseParser.EOF, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterStandaloneRoutineBody(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitStandaloneRoutineBody(this); + } + } + + +} + + + +class StatementContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_statement; + } + + + + copyFrom(ctx) { + super.copyFrom(ctx); + } + +} + + +class ExplainContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + EXPLAIN() { + return this.getToken(SqlBaseParser.EXPLAIN, 0); + }; + + statement() { + return this.getTypedRuleContext(StatementContext,0); + }; + + ANALYZE() { + return this.getToken(SqlBaseParser.ANALYZE, 0); + }; + + VERBOSE() { + return this.getToken(SqlBaseParser.VERBOSE, 0); + }; + + explainOption = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ExplainOptionContext); + } else { + return this.getTypedRuleContext(ExplainOptionContext,i); + } + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterExplain(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitExplain(this); + } + } + + +} + +SqlBaseParser.ExplainContext = ExplainContext; + +class PrepareContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + PREPARE() { + return this.getToken(SqlBaseParser.PREPARE, 0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); + }; + + statement() { + return this.getTypedRuleContext(StatementContext,0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterPrepare(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitPrepare(this); + } + } + + +} + +SqlBaseParser.PrepareContext = PrepareContext; + +class DropMaterializedViewContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + DROP() { + return this.getToken(SqlBaseParser.DROP, 0); + }; + + MATERIALIZED() { + return this.getToken(SqlBaseParser.MATERIALIZED, 0); + }; + + VIEW() { + return this.getToken(SqlBaseParser.VIEW, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + IF() { + return this.getToken(SqlBaseParser.IF, 0); + }; + + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterDropMaterializedView(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitDropMaterializedView(this); + } + } + + +} + +SqlBaseParser.DropMaterializedViewContext = DropMaterializedViewContext; + +class UseContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + this.schema = null;; + this.catalog = null;; + super.copyFrom(ctx); + } + + USE() { + return this.getToken(SqlBaseParser.USE, 0); + }; + + identifier = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(IdentifierContext); + } else { + return this.getTypedRuleContext(IdentifierContext,i); + } + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterUse(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitUse(this); + } + } + + +} + +SqlBaseParser.UseContext = UseContext; + +class AddConstraintContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + this.tableName = null;; + super.copyFrom(ctx); + } + + ALTER() { + return this.getToken(SqlBaseParser.ALTER, 0); + }; + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); + }; + + ADD() { + return this.getToken(SqlBaseParser.ADD, 0); + }; + + constraintSpecification() { + return this.getTypedRuleContext(ConstraintSpecificationContext,0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + IF() { + return this.getToken(SqlBaseParser.IF, 0); + }; + + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterAddConstraint(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitAddConstraint(this); + } + } + + +} + +SqlBaseParser.AddConstraintContext = AddConstraintContext; + +class DeallocateContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + DEALLOCATE() { + return this.getToken(SqlBaseParser.DEALLOCATE, 0); + }; + + PREPARE() { + return this.getToken(SqlBaseParser.PREPARE, 0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterDeallocate(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitDeallocate(this); + } + } + + +} + +SqlBaseParser.DeallocateContext = DeallocateContext; + +class RenameTableContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + this.from = null;; + this.to = null;; + super.copyFrom(ctx); + } + + ALTER() { + return this.getToken(SqlBaseParser.ALTER, 0); + }; + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); + }; + + RENAME() { + return this.getToken(SqlBaseParser.RENAME, 0); + }; + + TO() { + return this.getToken(SqlBaseParser.TO, 0); + }; + + qualifiedName = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(QualifiedNameContext); + } else { + return this.getTypedRuleContext(QualifiedNameContext,i); + } + }; + + IF() { + return this.getToken(SqlBaseParser.IF, 0); + }; + + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterRenameTable(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitRenameTable(this); + } + } + + +} + +SqlBaseParser.RenameTableContext = RenameTableContext; + +class CommitContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + COMMIT() { + return this.getToken(SqlBaseParser.COMMIT, 0); + }; + + WORK() { + return this.getToken(SqlBaseParser.WORK, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterCommit(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitCommit(this); + } + } + + +} + +SqlBaseParser.CommitContext = CommitContext; + +class CreateRoleContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + this.name = null;; + super.copyFrom(ctx); + } + + CREATE() { + return this.getToken(SqlBaseParser.CREATE, 0); + }; + + ROLE() { + return this.getToken(SqlBaseParser.ROLE, 0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + WITH() { + return this.getToken(SqlBaseParser.WITH, 0); + }; + + ADMIN() { + return this.getToken(SqlBaseParser.ADMIN, 0); + }; + + grantor() { + return this.getTypedRuleContext(GrantorContext,0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterCreateRole(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitCreateRole(this); + } + } + + +} + +SqlBaseParser.CreateRoleContext = CreateRoleContext; + +class ShowCreateFunctionContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); + }; + + CREATE() { + return this.getToken(SqlBaseParser.CREATE, 0); + }; + + FUNCTION() { + return this.getToken(SqlBaseParser.FUNCTION, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + types() { + return this.getTypedRuleContext(TypesContext,0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterShowCreateFunction(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitShowCreateFunction(this); + } + } + + +} + +SqlBaseParser.ShowCreateFunctionContext = ShowCreateFunctionContext; + +class DropColumnContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + this.tableName = null;; + this.column = null;; + super.copyFrom(ctx); + } + + ALTER() { + return this.getToken(SqlBaseParser.ALTER, 0); + }; + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); + }; + + DROP() { + return this.getToken(SqlBaseParser.DROP, 0); + }; + + COLUMN() { + return this.getToken(SqlBaseParser.COLUMN, 0); + }; + + qualifiedName = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(QualifiedNameContext); + } else { + return this.getTypedRuleContext(QualifiedNameContext,i); + } + }; + + IF = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.IF); + } else { + return this.getToken(SqlBaseParser.IF, i); + } + }; + + + EXISTS = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.EXISTS); + } else { + return this.getToken(SqlBaseParser.EXISTS, i); + } + }; + + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterDropColumn(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitDropColumn(this); + } + } + + +} + +SqlBaseParser.DropColumnContext = DropColumnContext; + +class DropViewContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + DROP() { + return this.getToken(SqlBaseParser.DROP, 0); + }; + + VIEW() { + return this.getToken(SqlBaseParser.VIEW, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + IF() { + return this.getToken(SqlBaseParser.IF, 0); + }; + + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterDropView(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitDropView(this); + } + } + + +} + +SqlBaseParser.DropViewContext = DropViewContext; + +class ShowTablesContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + this.pattern = null;; + this.escape = null;; + super.copyFrom(ctx); + } + + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); + }; + + TABLES() { + return this.getToken(SqlBaseParser.TABLES, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + LIKE() { + return this.getToken(SqlBaseParser.LIKE, 0); + }; + + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); + }; + + IN() { + return this.getToken(SqlBaseParser.IN, 0); + }; + + string = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(StringContext); + } else { + return this.getTypedRuleContext(StringContext,i); + } + }; + + ESCAPE() { + return this.getToken(SqlBaseParser.ESCAPE, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterShowTables(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitShowTables(this); + } + } + + +} + +SqlBaseParser.ShowTablesContext = ShowTablesContext; + +class ShowCatalogsContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + this.pattern = null;; + this.escape = null;; + super.copyFrom(ctx); + } + + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); + }; + + CATALOGS() { + return this.getToken(SqlBaseParser.CATALOGS, 0); + }; + + LIKE() { + return this.getToken(SqlBaseParser.LIKE, 0); + }; + + string = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(StringContext); + } else { + return this.getTypedRuleContext(StringContext,i); + } + }; + + ESCAPE() { + return this.getToken(SqlBaseParser.ESCAPE, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterShowCatalogs(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitShowCatalogs(this); + } + } + + +} + +SqlBaseParser.ShowCatalogsContext = ShowCatalogsContext; + +class ShowRolesContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); + }; + + ROLES() { + return this.getToken(SqlBaseParser.ROLES, 0); + }; + + CURRENT() { + return this.getToken(SqlBaseParser.CURRENT, 0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); + }; + + IN() { + return this.getToken(SqlBaseParser.IN, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterShowRoles(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitShowRoles(this); + } + } + + +} + +SqlBaseParser.ShowRolesContext = ShowRolesContext; + +class RenameColumnContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + this.tableName = null;; + this.from = null;; + this.to = null;; + super.copyFrom(ctx); + } + + ALTER() { + return this.getToken(SqlBaseParser.ALTER, 0); + }; + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); + }; + + RENAME() { + return this.getToken(SqlBaseParser.RENAME, 0); + }; + + COLUMN() { + return this.getToken(SqlBaseParser.COLUMN, 0); + }; + + TO() { + return this.getToken(SqlBaseParser.TO, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + identifier = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(IdentifierContext); + } else { + return this.getTypedRuleContext(IdentifierContext,i); + } + }; + + IF = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.IF); + } else { + return this.getToken(SqlBaseParser.IF, i); + } + }; + + + EXISTS = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.EXISTS); + } else { + return this.getToken(SqlBaseParser.EXISTS, i); + } + }; + + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterRenameColumn(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitRenameColumn(this); + } + } + + +} + +SqlBaseParser.RenameColumnContext = RenameColumnContext; + +class RevokeRolesContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + REVOKE() { + return this.getToken(SqlBaseParser.REVOKE, 0); + }; + + roles() { + return this.getTypedRuleContext(RolesContext,0); + }; + + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); + }; + + principal = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(PrincipalContext); + } else { + return this.getTypedRuleContext(PrincipalContext,i); + } + }; + + ADMIN() { + return this.getToken(SqlBaseParser.ADMIN, 0); + }; + + OPTION() { + return this.getToken(SqlBaseParser.OPTION, 0); + }; + + FOR() { + return this.getToken(SqlBaseParser.FOR, 0); + }; + + GRANTED() { + return this.getToken(SqlBaseParser.GRANTED, 0); + }; + + BY() { + return this.getToken(SqlBaseParser.BY, 0); + }; + + grantor() { + return this.getTypedRuleContext(GrantorContext,0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterRevokeRoles(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitRevokeRoles(this); + } + } + + +} + +SqlBaseParser.RevokeRolesContext = RevokeRolesContext; + +class ShowCreateTableContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); + }; + + CREATE() { + return this.getToken(SqlBaseParser.CREATE, 0); + }; + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterShowCreateTable(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitShowCreateTable(this); + } + } + + +} + +SqlBaseParser.ShowCreateTableContext = ShowCreateTableContext; + +class ShowColumnsContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); + }; + + COLUMNS() { + return this.getToken(SqlBaseParser.COLUMNS, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); + }; + + IN() { + return this.getToken(SqlBaseParser.IN, 0); + }; + + DESCRIBE() { + return this.getToken(SqlBaseParser.DESCRIBE, 0); + }; + + DESC() { + return this.getToken(SqlBaseParser.DESC, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterShowColumns(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitShowColumns(this); + } + } + + +} + +SqlBaseParser.ShowColumnsContext = ShowColumnsContext; + +class ShowRoleGrantsContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); + }; + + ROLE() { + return this.getToken(SqlBaseParser.ROLE, 0); + }; + + GRANTS() { + return this.getToken(SqlBaseParser.GRANTS, 0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); + }; + + IN() { + return this.getToken(SqlBaseParser.IN, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterShowRoleGrants(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitShowRoleGrants(this); + } + } + + +} + +SqlBaseParser.ShowRoleGrantsContext = ShowRoleGrantsContext; + +class AddColumnContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + this.tableName = null;; + this.column = null;; + super.copyFrom(ctx); + } + + ALTER() { + return this.getToken(SqlBaseParser.ALTER, 0); + }; + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); + }; + + ADD() { + return this.getToken(SqlBaseParser.ADD, 0); + }; + + COLUMN() { + return this.getToken(SqlBaseParser.COLUMN, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + columnDefinition() { + return this.getTypedRuleContext(ColumnDefinitionContext,0); + }; + + IF = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.IF); + } else { + return this.getToken(SqlBaseParser.IF, i); + } + }; + + + EXISTS = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.EXISTS); + } else { + return this.getToken(SqlBaseParser.EXISTS, i); + } + }; + + + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterAddColumn(this); + } } + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitAddColumn(this); + } + } - number() { - let localctx = new NumberContext(this, this._ctx, this.state); - this.enterRule(localctx, 154, SqlBaseParser.RULE_number); - try { - this.state = 1914; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case 237: - localctx = new DecimalLiteralContext(this, localctx); - this.enterOuterAlt(localctx, 1); - this.state = 1911; - this.match(SqlBaseParser.DECIMAL_VALUE); - break; - case 238: - localctx = new DoubleLiteralContext(this, localctx); - this.enterOuterAlt(localctx, 2); - this.state = 1912; - this.match(SqlBaseParser.DOUBLE_VALUE); - break; - case 236: - localctx = new IntegerLiteralContext(this, localctx); - this.enterOuterAlt(localctx, 3); - this.state = 1913; - this.match(SqlBaseParser.INTEGER_VALUE); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; +} + +SqlBaseParser.AddColumnContext = AddColumnContext; + +class ResetSessionContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + RESET() { + return this.getToken(SqlBaseParser.RESET, 0); + }; + + SESSION() { + return this.getToken(SqlBaseParser.SESSION, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterResetSession(this); + } } + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitResetSession(this); + } + } - nonReserved() { - let localctx = new NonReservedContext(this, this._ctx, this.state); - this.enterRule(localctx, 156, SqlBaseParser.RULE_nonReserved); - var _la = 0; - try { - this.enterOuterAlt(localctx, 1); - this.state = 1916; - _la = this._input.LA(1); - if(!((((_la) & ~0x1f) === 0 && ((1 << _la) & 3879427072) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 548070023) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2513695477) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 2413794779) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794171) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); +} + +SqlBaseParser.ResetSessionContext = ResetSessionContext; + +class DropConstraintContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + this.tableName = null;; + this.name = null;; + super.copyFrom(ctx); + } + + ALTER() { + return this.getToken(SqlBaseParser.ALTER, 0); + }; + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); + }; + + DROP() { + return this.getToken(SqlBaseParser.DROP, 0); + }; + + CONSTRAINT() { + return this.getToken(SqlBaseParser.CONSTRAINT, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + IF = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.IF); + } else { + return this.getToken(SqlBaseParser.IF, i); } - return localctx; + }; + + + EXISTS = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.EXISTS); + } else { + return this.getToken(SqlBaseParser.EXISTS, i); + } + }; + + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterDropConstraint(this); + } } + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitDropConstraint(this); + } + } -} -SqlBaseParser.EOF = antlr4.Token.EOF; -SqlBaseParser.T__0 = 1; -SqlBaseParser.T__1 = 2; -SqlBaseParser.T__2 = 3; -SqlBaseParser.T__3 = 4; -SqlBaseParser.T__4 = 5; -SqlBaseParser.T__5 = 6; -SqlBaseParser.T__6 = 7; -SqlBaseParser.T__7 = 8; -SqlBaseParser.T__8 = 9; -SqlBaseParser.ADD = 10; -SqlBaseParser.ADMIN = 11; -SqlBaseParser.ALL = 12; -SqlBaseParser.ALTER = 13; -SqlBaseParser.ANALYZE = 14; -SqlBaseParser.AND = 15; -SqlBaseParser.ANY = 16; -SqlBaseParser.ARRAY = 17; -SqlBaseParser.AS = 18; -SqlBaseParser.ASC = 19; -SqlBaseParser.AT = 20; -SqlBaseParser.BERNOULLI = 21; -SqlBaseParser.BETWEEN = 22; -SqlBaseParser.BY = 23; -SqlBaseParser.CALL = 24; -SqlBaseParser.CALLED = 25; -SqlBaseParser.CASCADE = 26; -SqlBaseParser.CASE = 27; -SqlBaseParser.CAST = 28; -SqlBaseParser.CATALOGS = 29; -SqlBaseParser.COLUMN = 30; -SqlBaseParser.COLUMNS = 31; -SqlBaseParser.COMMENT = 32; -SqlBaseParser.COMMIT = 33; -SqlBaseParser.COMMITTED = 34; -SqlBaseParser.CONSTRAINT = 35; -SqlBaseParser.CREATE = 36; -SqlBaseParser.CROSS = 37; -SqlBaseParser.CUBE = 38; -SqlBaseParser.CURRENT = 39; -SqlBaseParser.CURRENT_DATE = 40; -SqlBaseParser.CURRENT_ROLE = 41; -SqlBaseParser.CURRENT_TIME = 42; -SqlBaseParser.CURRENT_TIMESTAMP = 43; -SqlBaseParser.CURRENT_USER = 44; -SqlBaseParser.DATA = 45; -SqlBaseParser.DATE = 46; -SqlBaseParser.DAY = 47; -SqlBaseParser.DEALLOCATE = 48; -SqlBaseParser.DEFINER = 49; -SqlBaseParser.DELETE = 50; -SqlBaseParser.DESC = 51; -SqlBaseParser.DESCRIBE = 52; -SqlBaseParser.DETERMINISTIC = 53; -SqlBaseParser.DISTINCT = 54; -SqlBaseParser.DISTRIBUTED = 55; -SqlBaseParser.DROP = 56; -SqlBaseParser.ELSE = 57; -SqlBaseParser.END = 58; -SqlBaseParser.ESCAPE = 59; -SqlBaseParser.EXCEPT = 60; -SqlBaseParser.EXCLUDING = 61; -SqlBaseParser.EXECUTE = 62; -SqlBaseParser.EXISTS = 63; -SqlBaseParser.EXPLAIN = 64; -SqlBaseParser.EXTRACT = 65; -SqlBaseParser.EXTERNAL = 66; -SqlBaseParser.FALSE = 67; -SqlBaseParser.FETCH = 68; -SqlBaseParser.FILTER = 69; -SqlBaseParser.FIRST = 70; -SqlBaseParser.FOLLOWING = 71; -SqlBaseParser.FOR = 72; -SqlBaseParser.FORMAT = 73; -SqlBaseParser.FROM = 74; -SqlBaseParser.FULL = 75; -SqlBaseParser.FUNCTION = 76; -SqlBaseParser.FUNCTIONS = 77; -SqlBaseParser.GRANT = 78; -SqlBaseParser.GRANTED = 79; -SqlBaseParser.GRANTS = 80; -SqlBaseParser.GRAPHVIZ = 81; -SqlBaseParser.GROUP = 82; -SqlBaseParser.GROUPING = 83; -SqlBaseParser.GROUPS = 84; -SqlBaseParser.HAVING = 85; -SqlBaseParser.HOUR = 86; -SqlBaseParser.IF = 87; -SqlBaseParser.IGNORE = 88; -SqlBaseParser.IN = 89; -SqlBaseParser.INCLUDING = 90; -SqlBaseParser.INNER = 91; -SqlBaseParser.INPUT = 92; -SqlBaseParser.INSERT = 93; -SqlBaseParser.INTERSECT = 94; -SqlBaseParser.INTERVAL = 95; -SqlBaseParser.INTO = 96; -SqlBaseParser.INVOKER = 97; -SqlBaseParser.IO = 98; -SqlBaseParser.IS = 99; -SqlBaseParser.ISOLATION = 100; -SqlBaseParser.JSON = 101; -SqlBaseParser.JOIN = 102; -SqlBaseParser.LANGUAGE = 103; -SqlBaseParser.LAST = 104; -SqlBaseParser.LATERAL = 105; -SqlBaseParser.LEFT = 106; -SqlBaseParser.LEVEL = 107; -SqlBaseParser.LIKE = 108; -SqlBaseParser.LIMIT = 109; -SqlBaseParser.LOCALTIME = 110; -SqlBaseParser.LOCALTIMESTAMP = 111; -SqlBaseParser.LOGICAL = 112; -SqlBaseParser.MAP = 113; -SqlBaseParser.MATERIALIZED = 114; -SqlBaseParser.MINUTE = 115; -SqlBaseParser.MONTH = 116; -SqlBaseParser.NAME = 117; -SqlBaseParser.NATURAL = 118; -SqlBaseParser.NFC = 119; -SqlBaseParser.NFD = 120; -SqlBaseParser.NFKC = 121; -SqlBaseParser.NFKD = 122; -SqlBaseParser.NO = 123; -SqlBaseParser.NONE = 124; -SqlBaseParser.NORMALIZE = 125; -SqlBaseParser.NOT = 126; -SqlBaseParser.NULL = 127; -SqlBaseParser.NULLIF = 128; -SqlBaseParser.NULLS = 129; -SqlBaseParser.OF = 130; -SqlBaseParser.OFFSET = 131; -SqlBaseParser.ON = 132; -SqlBaseParser.ONLY = 133; -SqlBaseParser.OPTION = 134; -SqlBaseParser.OR = 135; -SqlBaseParser.ORDER = 136; -SqlBaseParser.ORDINALITY = 137; -SqlBaseParser.OUTER = 138; -SqlBaseParser.OUTPUT = 139; -SqlBaseParser.OVER = 140; -SqlBaseParser.PARTITION = 141; -SqlBaseParser.PARTITIONS = 142; -SqlBaseParser.POSITION = 143; -SqlBaseParser.PRECEDING = 144; -SqlBaseParser.PREPARE = 145; -SqlBaseParser.PRIVILEGES = 146; -SqlBaseParser.PROPERTIES = 147; -SqlBaseParser.RANGE = 148; -SqlBaseParser.READ = 149; -SqlBaseParser.RECURSIVE = 150; -SqlBaseParser.REFRESH = 151; -SqlBaseParser.RENAME = 152; -SqlBaseParser.REPEATABLE = 153; -SqlBaseParser.REPLACE = 154; -SqlBaseParser.RESET = 155; -SqlBaseParser.RESPECT = 156; -SqlBaseParser.RESTRICT = 157; -SqlBaseParser.RETURN = 158; -SqlBaseParser.RETURNS = 159; -SqlBaseParser.REVOKE = 160; -SqlBaseParser.RIGHT = 161; -SqlBaseParser.ROLE = 162; -SqlBaseParser.ROLES = 163; -SqlBaseParser.ROLLBACK = 164; -SqlBaseParser.ROLLUP = 165; -SqlBaseParser.ROW = 166; -SqlBaseParser.ROWS = 167; -SqlBaseParser.SCHEMA = 168; -SqlBaseParser.SCHEMAS = 169; -SqlBaseParser.SECOND = 170; -SqlBaseParser.SECURITY = 171; -SqlBaseParser.SELECT = 172; -SqlBaseParser.SERIALIZABLE = 173; -SqlBaseParser.SESSION = 174; -SqlBaseParser.SET = 175; -SqlBaseParser.SETS = 176; -SqlBaseParser.SHOW = 177; -SqlBaseParser.SOME = 178; -SqlBaseParser.SQL = 179; -SqlBaseParser.START = 180; -SqlBaseParser.STATS = 181; -SqlBaseParser.SUBSTRING = 182; -SqlBaseParser.SYSTEM = 183; -SqlBaseParser.SYSTEM_TIME = 184; -SqlBaseParser.SYSTEM_VERSION = 185; -SqlBaseParser.TABLE = 186; -SqlBaseParser.TABLES = 187; -SqlBaseParser.TABLESAMPLE = 188; -SqlBaseParser.TEMPORARY = 189; -SqlBaseParser.TEXT = 190; -SqlBaseParser.THEN = 191; -SqlBaseParser.TIME = 192; -SqlBaseParser.TIMESTAMP = 193; -SqlBaseParser.TO = 194; -SqlBaseParser.TRANSACTION = 195; -SqlBaseParser.TRUE = 196; -SqlBaseParser.TRUNCATE = 197; -SqlBaseParser.TRY_CAST = 198; -SqlBaseParser.TYPE = 199; -SqlBaseParser.UESCAPE = 200; -SqlBaseParser.UNBOUNDED = 201; -SqlBaseParser.UNCOMMITTED = 202; -SqlBaseParser.UNION = 203; -SqlBaseParser.UNNEST = 204; -SqlBaseParser.UPDATE = 205; -SqlBaseParser.USE = 206; -SqlBaseParser.USER = 207; -SqlBaseParser.USING = 208; -SqlBaseParser.VALIDATE = 209; -SqlBaseParser.VALUES = 210; -SqlBaseParser.VERBOSE = 211; -SqlBaseParser.VERSION = 212; -SqlBaseParser.VIEW = 213; -SqlBaseParser.WHEN = 214; -SqlBaseParser.WHERE = 215; -SqlBaseParser.WITH = 216; -SqlBaseParser.WORK = 217; -SqlBaseParser.WRITE = 218; -SqlBaseParser.YEAR = 219; -SqlBaseParser.ZONE = 220; -SqlBaseParser.EQ = 221; -SqlBaseParser.NEQ = 222; -SqlBaseParser.LT = 223; -SqlBaseParser.LTE = 224; -SqlBaseParser.GT = 225; -SqlBaseParser.GTE = 226; -SqlBaseParser.PLUS = 227; -SqlBaseParser.MINUS = 228; -SqlBaseParser.ASTERISK = 229; -SqlBaseParser.SLASH = 230; -SqlBaseParser.PERCENT = 231; -SqlBaseParser.CONCAT = 232; -SqlBaseParser.STRING = 233; -SqlBaseParser.UNICODE_STRING = 234; -SqlBaseParser.BINARY_LITERAL = 235; -SqlBaseParser.INTEGER_VALUE = 236; -SqlBaseParser.DECIMAL_VALUE = 237; -SqlBaseParser.DOUBLE_VALUE = 238; -SqlBaseParser.IDENTIFIER = 239; -SqlBaseParser.DIGIT_IDENTIFIER = 240; -SqlBaseParser.QUOTED_IDENTIFIER = 241; -SqlBaseParser.BACKQUOTED_IDENTIFIER = 242; -SqlBaseParser.TIME_WITH_TIME_ZONE = 243; -SqlBaseParser.TIMESTAMP_WITH_TIME_ZONE = 244; -SqlBaseParser.DOUBLE_PRECISION = 245; -SqlBaseParser.SIMPLE_COMMENT = 246; -SqlBaseParser.BRACKETED_COMMENT = 247; -SqlBaseParser.WS = 248; -SqlBaseParser.UNRECOGNIZED = 249; -SqlBaseParser.DELIMITER = 250; +} -SqlBaseParser.RULE_singleStatement = 0; -SqlBaseParser.RULE_standaloneExpression = 1; -SqlBaseParser.RULE_standaloneRoutineBody = 2; -SqlBaseParser.RULE_statement = 3; -SqlBaseParser.RULE_query = 4; -SqlBaseParser.RULE_with = 5; -SqlBaseParser.RULE_tableElement = 6; -SqlBaseParser.RULE_columnDefinition = 7; -SqlBaseParser.RULE_likeClause = 8; -SqlBaseParser.RULE_properties = 9; -SqlBaseParser.RULE_property = 10; -SqlBaseParser.RULE_sqlParameterDeclaration = 11; -SqlBaseParser.RULE_routineCharacteristics = 12; -SqlBaseParser.RULE_routineCharacteristic = 13; -SqlBaseParser.RULE_alterRoutineCharacteristics = 14; -SqlBaseParser.RULE_alterRoutineCharacteristic = 15; -SqlBaseParser.RULE_routineBody = 16; -SqlBaseParser.RULE_returnStatement = 17; -SqlBaseParser.RULE_externalBodyReference = 18; -SqlBaseParser.RULE_language = 19; -SqlBaseParser.RULE_determinism = 20; -SqlBaseParser.RULE_nullCallClause = 21; -SqlBaseParser.RULE_externalRoutineName = 22; -SqlBaseParser.RULE_queryNoWith = 23; -SqlBaseParser.RULE_queryTerm = 24; -SqlBaseParser.RULE_queryPrimary = 25; -SqlBaseParser.RULE_sortItem = 26; -SqlBaseParser.RULE_querySpecification = 27; -SqlBaseParser.RULE_groupBy = 28; -SqlBaseParser.RULE_groupingElement = 29; -SqlBaseParser.RULE_groupingSet = 30; -SqlBaseParser.RULE_namedQuery = 31; -SqlBaseParser.RULE_setQuantifier = 32; -SqlBaseParser.RULE_selectItem = 33; -SqlBaseParser.RULE_relation = 34; -SqlBaseParser.RULE_joinType = 35; -SqlBaseParser.RULE_joinCriteria = 36; -SqlBaseParser.RULE_sampledRelation = 37; -SqlBaseParser.RULE_sampleType = 38; -SqlBaseParser.RULE_aliasedRelation = 39; -SqlBaseParser.RULE_columnAliases = 40; -SqlBaseParser.RULE_relationPrimary = 41; -SqlBaseParser.RULE_expression = 42; -SqlBaseParser.RULE_booleanExpression = 43; -SqlBaseParser.RULE_predicate = 44; -SqlBaseParser.RULE_valueExpression = 45; -SqlBaseParser.RULE_primaryExpression = 46; -SqlBaseParser.RULE_string = 47; -SqlBaseParser.RULE_nullTreatment = 48; -SqlBaseParser.RULE_timeZoneSpecifier = 49; -SqlBaseParser.RULE_comparisonOperator = 50; -SqlBaseParser.RULE_comparisonQuantifier = 51; -SqlBaseParser.RULE_booleanValue = 52; -SqlBaseParser.RULE_interval = 53; -SqlBaseParser.RULE_intervalField = 54; -SqlBaseParser.RULE_normalForm = 55; -SqlBaseParser.RULE_types = 56; -SqlBaseParser.RULE_type = 57; -SqlBaseParser.RULE_typeParameter = 58; -SqlBaseParser.RULE_baseType = 59; -SqlBaseParser.RULE_whenClause = 60; -SqlBaseParser.RULE_filter = 61; -SqlBaseParser.RULE_over = 62; -SqlBaseParser.RULE_windowFrame = 63; -SqlBaseParser.RULE_frameBound = 64; -SqlBaseParser.RULE_updateAssignment = 65; -SqlBaseParser.RULE_explainOption = 66; -SqlBaseParser.RULE_transactionMode = 67; -SqlBaseParser.RULE_levelOfIsolation = 68; -SqlBaseParser.RULE_callArgument = 69; -SqlBaseParser.RULE_privilege = 70; -SqlBaseParser.RULE_qualifiedName = 71; -SqlBaseParser.RULE_tableVersionExpression = 72; -SqlBaseParser.RULE_grantor = 73; -SqlBaseParser.RULE_principal = 74; -SqlBaseParser.RULE_roles = 75; -SqlBaseParser.RULE_identifier = 76; -SqlBaseParser.RULE_number = 77; -SqlBaseParser.RULE_nonReserved = 78; +SqlBaseParser.DropConstraintContext = DropConstraintContext; -class SingleStatementContext extends antlr4.ParserRuleContext { +class InsertIntoContext extends StatementContext { - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_singleStatement; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - statement() { - return this.getTypedRuleContext(StatementContext,0); + INSERT() { + return this.getToken(SqlBaseParser.INSERT, 0); + }; + + INTO() { + return this.getToken(SqlBaseParser.INTO, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + query() { + return this.getTypedRuleContext(QueryContext,0); }; - EOF() { - return this.getToken(SqlBaseParser.EOF, 0); + columnAliases() { + return this.getTypedRuleContext(ColumnAliasesContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSingleStatement(this); + listener.enterInsertInto(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSingleStatement(this); + listener.exitInsertInto(this); } } } +SqlBaseParser.InsertIntoContext = InsertIntoContext; +class ShowSessionContext extends StatementContext { -class StandaloneExpressionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_standaloneExpression; + constructor(parser, ctx) { + super(parser); + this.pattern = null;; + this.escape = null;; + super.copyFrom(ctx); } - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); }; - EOF() { - return this.getToken(SqlBaseParser.EOF, 0); + SESSION() { + return this.getToken(SqlBaseParser.SESSION, 0); + }; + + LIKE() { + return this.getToken(SqlBaseParser.LIKE, 0); + }; + + string = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(StringContext); + } else { + return this.getTypedRuleContext(StringContext,i); + } + }; + + ESCAPE() { + return this.getToken(SqlBaseParser.ESCAPE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterStandaloneExpression(this); + listener.enterShowSession(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitStandaloneExpression(this); + listener.exitShowSession(this); } } } +SqlBaseParser.ShowSessionContext = ShowSessionContext; +class CreateSchemaContext extends StatementContext { -class StandaloneRoutineBodyContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_standaloneRoutineBody; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - routineBody() { - return this.getTypedRuleContext(RoutineBodyContext,0); + CREATE() { + return this.getToken(SqlBaseParser.CREATE, 0); }; - EOF() { - return this.getToken(SqlBaseParser.EOF, 0); + SCHEMA() { + return this.getToken(SqlBaseParser.SCHEMA, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + IF() { + return this.getToken(SqlBaseParser.IF, 0); + }; + + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); + }; + + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); + }; + + WITH() { + return this.getToken(SqlBaseParser.WITH, 0); + }; + + properties() { + return this.getTypedRuleContext(PropertiesContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterStandaloneRoutineBody(this); + listener.enterCreateSchema(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitStandaloneRoutineBody(this); + listener.exitCreateSchema(this); } } } +SqlBaseParser.CreateSchemaContext = CreateSchemaContext; +class ExecuteContext extends StatementContext { -class StatementContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_statement; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } + EXECUTE() { + return this.getToken(SqlBaseParser.EXECUTE, 0); + }; - - copyFrom(ctx) { - super.copyFrom(ctx); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + USING() { + return this.getToken(SqlBaseParser.USING, 0); + }; + + expression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ExpressionContext); + } else { + return this.getTypedRuleContext(ExpressionContext,i); + } + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterExecute(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitExecute(this); } + } + } +SqlBaseParser.ExecuteContext = ExecuteContext; -class ExplainContext extends StatementContext { +class RenameSchemaContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - EXPLAIN() { - return this.getToken(SqlBaseParser.EXPLAIN, 0); + ALTER() { + return this.getToken(SqlBaseParser.ALTER, 0); }; - statement() { - return this.getTypedRuleContext(StatementContext,0); + SCHEMA() { + return this.getToken(SqlBaseParser.SCHEMA, 0); }; - ANALYZE() { - return this.getToken(SqlBaseParser.ANALYZE, 0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; - VERBOSE() { - return this.getToken(SqlBaseParser.VERBOSE, 0); + RENAME() { + return this.getToken(SqlBaseParser.RENAME, 0); }; - explainOption = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExplainOptionContext); - } else { - return this.getTypedRuleContext(ExplainOptionContext,i); - } + TO() { + return this.getToken(SqlBaseParser.TO, 0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterExplain(this); + listener.enterRenameSchema(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitExplain(this); + listener.exitRenameSchema(this); } } } -SqlBaseParser.ExplainContext = ExplainContext; +SqlBaseParser.RenameSchemaContext = RenameSchemaContext; -class PrepareContext extends StatementContext { +class DropRoleContext extends StatementContext { constructor(parser, ctx) { super(parser); + this.name = null;; super.copyFrom(ctx); } - PREPARE() { - return this.getToken(SqlBaseParser.PREPARE, 0); + DROP() { + return this.getToken(SqlBaseParser.DROP, 0); + }; + + ROLE() { + return this.getToken(SqlBaseParser.ROLE, 0); }; identifier() { return this.getTypedRuleContext(IdentifierContext,0); }; - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterDropRole(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitDropRole(this); + } + } + + +} + +SqlBaseParser.DropRoleContext = DropRoleContext; + +class AnalyzeContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + ANALYZE() { + return this.getToken(SqlBaseParser.ANALYZE, 0); }; - statement() { - return this.getTypedRuleContext(StatementContext,0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + WITH() { + return this.getToken(SqlBaseParser.WITH, 0); + }; + + properties() { + return this.getTypedRuleContext(PropertiesContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterPrepare(this); + listener.enterAnalyze(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitPrepare(this); + listener.exitAnalyze(this); } } } -SqlBaseParser.PrepareContext = PrepareContext; +SqlBaseParser.AnalyzeContext = AnalyzeContext; -class DropMaterializedViewContext extends StatementContext { +class SetRoleContext extends StatementContext { constructor(parser, ctx) { super(parser); + this.role = null;; super.copyFrom(ctx); } - DROP() { - return this.getToken(SqlBaseParser.DROP, 0); - }; - - MATERIALIZED() { - return this.getToken(SqlBaseParser.MATERIALIZED, 0); + SET() { + return this.getToken(SqlBaseParser.SET, 0); }; - VIEW() { - return this.getToken(SqlBaseParser.VIEW, 0); + ROLE() { + return this.getToken(SqlBaseParser.ROLE, 0); }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + ALL() { + return this.getToken(SqlBaseParser.ALL, 0); }; - IF() { - return this.getToken(SqlBaseParser.IF, 0); + NONE() { + return this.getToken(SqlBaseParser.NONE, 0); }; - EXISTS() { - return this.getToken(SqlBaseParser.EXISTS, 0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDropMaterializedView(this); + listener.enterSetRole(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDropMaterializedView(this); + listener.exitSetRole(this); } } } -SqlBaseParser.DropMaterializedViewContext = DropMaterializedViewContext; +SqlBaseParser.SetRoleContext = SetRoleContext; -class UseContext extends StatementContext { +class CreateFunctionContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.schema = null;; - this.catalog = null;; + this.functionName = null;; + this.returnType = null;; super.copyFrom(ctx); } - USE() { - return this.getToken(SqlBaseParser.USE, 0); + CREATE() { + return this.getToken(SqlBaseParser.CREATE, 0); }; - identifier = function(i) { + FUNCTION() { + return this.getToken(SqlBaseParser.FUNCTION, 0); + }; + + RETURNS() { + return this.getToken(SqlBaseParser.RETURNS, 0); + }; + + routineCharacteristics() { + return this.getTypedRuleContext(RoutineCharacteristicsContext,0); + }; + + routineBody() { + return this.getTypedRuleContext(RoutineBodyContext,0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + type() { + return this.getTypedRuleContext(TypeContext,0); + }; + + OR() { + return this.getToken(SqlBaseParser.OR, 0); + }; + + REPLACE() { + return this.getToken(SqlBaseParser.REPLACE, 0); + }; + + TEMPORARY() { + return this.getToken(SqlBaseParser.TEMPORARY, 0); + }; + + sqlParameterDeclaration = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(IdentifierContext); + return this.getTypedRuleContexts(SqlParameterDeclarationContext); } else { - return this.getTypedRuleContext(IdentifierContext,i); + return this.getTypedRuleContext(SqlParameterDeclarationContext,i); } }; + COMMENT() { + return this.getToken(SqlBaseParser.COMMENT, 0); + }; + + string() { + return this.getTypedRuleContext(StringContext,0); + }; + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterUse(this); + listener.enterCreateFunction(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitUse(this); + listener.exitCreateFunction(this); } } } -SqlBaseParser.UseContext = UseContext; +SqlBaseParser.CreateFunctionContext = CreateFunctionContext; -class DeallocateContext extends StatementContext { +class ShowGrantsContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - DEALLOCATE() { - return this.getToken(SqlBaseParser.DEALLOCATE, 0); + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); }; - PREPARE() { - return this.getToken(SqlBaseParser.PREPARE, 0); + GRANTS() { + return this.getToken(SqlBaseParser.GRANTS, 0); }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + ON() { + return this.getToken(SqlBaseParser.ON, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDeallocate(this); + listener.enterShowGrants(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDeallocate(this); + listener.exitShowGrants(this); } } } -SqlBaseParser.DeallocateContext = DeallocateContext; +SqlBaseParser.ShowGrantsContext = ShowGrantsContext; -class RenameTableContext extends StatementContext { +class DropSchemaContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.from = null;; - this.to = null;; super.copyFrom(ctx); } - ALTER() { - return this.getToken(SqlBaseParser.ALTER, 0); - }; - - TABLE() { - return this.getToken(SqlBaseParser.TABLE, 0); - }; - - RENAME() { - return this.getToken(SqlBaseParser.RENAME, 0); + DROP() { + return this.getToken(SqlBaseParser.DROP, 0); }; - TO() { - return this.getToken(SqlBaseParser.TO, 0); + SCHEMA() { + return this.getToken(SqlBaseParser.SCHEMA, 0); }; - qualifiedName = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(QualifiedNameContext); - } else { - return this.getTypedRuleContext(QualifiedNameContext,i); - } + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; IF() { @@ -9608,60 +12652,75 @@ class RenameTableContext extends StatementContext { return this.getToken(SqlBaseParser.EXISTS, 0); }; + CASCADE() { + return this.getToken(SqlBaseParser.CASCADE, 0); + }; + + RESTRICT() { + return this.getToken(SqlBaseParser.RESTRICT, 0); + }; + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRenameTable(this); + listener.enterDropSchema(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRenameTable(this); + listener.exitDropSchema(this); } } } -SqlBaseParser.RenameTableContext = RenameTableContext; +SqlBaseParser.DropSchemaContext = DropSchemaContext; -class CommitContext extends StatementContext { +class ShowCreateViewContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - COMMIT() { - return this.getToken(SqlBaseParser.COMMIT, 0); + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); }; - WORK() { - return this.getToken(SqlBaseParser.WORK, 0); + CREATE() { + return this.getToken(SqlBaseParser.CREATE, 0); + }; + + VIEW() { + return this.getToken(SqlBaseParser.VIEW, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCommit(this); + listener.enterShowCreateView(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCommit(this); + listener.exitShowCreateView(this); } } } -SqlBaseParser.CommitContext = CommitContext; +SqlBaseParser.ShowCreateViewContext = ShowCreateViewContext; -class CreateRoleContext extends StatementContext { +class CreateTableContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.name = null;; super.copyFrom(ctx); } @@ -9669,214 +12728,249 @@ class CreateRoleContext extends StatementContext { return this.getToken(SqlBaseParser.CREATE, 0); }; - ROLE() { - return this.getToken(SqlBaseParser.ROLE, 0); + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; - WITH() { - return this.getToken(SqlBaseParser.WITH, 0); + tableElement = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(TableElementContext); + } else { + return this.getTypedRuleContext(TableElementContext,i); + } }; - ADMIN() { - return this.getToken(SqlBaseParser.ADMIN, 0); + IF() { + return this.getToken(SqlBaseParser.IF, 0); }; - grantor() { - return this.getTypedRuleContext(GrantorContext,0); + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); + }; + + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); + }; + + COMMENT() { + return this.getToken(SqlBaseParser.COMMENT, 0); + }; + + string() { + return this.getTypedRuleContext(StringContext,0); + }; + + WITH() { + return this.getToken(SqlBaseParser.WITH, 0); + }; + + properties() { + return this.getTypedRuleContext(PropertiesContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCreateRole(this); + listener.enterCreateTable(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCreateRole(this); + listener.exitCreateTable(this); } } } -SqlBaseParser.CreateRoleContext = CreateRoleContext; +SqlBaseParser.CreateTableContext = CreateTableContext; -class ShowCreateFunctionContext extends StatementContext { +class StartTransactionContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); - }; - - CREATE() { - return this.getToken(SqlBaseParser.CREATE, 0); - }; - - FUNCTION() { - return this.getToken(SqlBaseParser.FUNCTION, 0); + START() { + return this.getToken(SqlBaseParser.START, 0); }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + TRANSACTION() { + return this.getToken(SqlBaseParser.TRANSACTION, 0); }; - types() { - return this.getTypedRuleContext(TypesContext,0); + transactionMode = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(TransactionModeContext); + } else { + return this.getTypedRuleContext(TransactionModeContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowCreateFunction(this); + listener.enterStartTransaction(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowCreateFunction(this); + listener.exitStartTransaction(this); } } } -SqlBaseParser.ShowCreateFunctionContext = ShowCreateFunctionContext; +SqlBaseParser.StartTransactionContext = StartTransactionContext; -class DropColumnContext extends StatementContext { +class CreateTableAsSelectContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.tableName = null;; - this.column = null;; super.copyFrom(ctx); } - ALTER() { - return this.getToken(SqlBaseParser.ALTER, 0); + CREATE() { + return this.getToken(SqlBaseParser.CREATE, 0); }; TABLE() { return this.getToken(SqlBaseParser.TABLE, 0); }; - DROP() { - return this.getToken(SqlBaseParser.DROP, 0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; - COLUMN() { - return this.getToken(SqlBaseParser.COLUMN, 0); + AS() { + return this.getToken(SqlBaseParser.AS, 0); }; - qualifiedName = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(QualifiedNameContext); - } else { - return this.getTypedRuleContext(QualifiedNameContext,i); - } + query() { + return this.getTypedRuleContext(QueryContext,0); }; - IF = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SqlBaseParser.IF); - } else { - return this.getToken(SqlBaseParser.IF, i); - } + IF() { + return this.getToken(SqlBaseParser.IF, 0); }; + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); + }; - EXISTS = function(i) { + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); + }; + + columnAliases() { + return this.getTypedRuleContext(ColumnAliasesContext,0); + }; + + COMMENT() { + return this.getToken(SqlBaseParser.COMMENT, 0); + }; + + string() { + return this.getTypedRuleContext(StringContext,0); + }; + + WITH = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTokens(SqlBaseParser.EXISTS); + return this.getTokens(SqlBaseParser.WITH); } else { - return this.getToken(SqlBaseParser.EXISTS, i); + return this.getToken(SqlBaseParser.WITH, i); } }; + properties() { + return this.getTypedRuleContext(PropertiesContext,0); + }; + + DATA() { + return this.getToken(SqlBaseParser.DATA, 0); + }; + + NO() { + return this.getToken(SqlBaseParser.NO, 0); + }; + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDropColumn(this); + listener.enterCreateTableAsSelect(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDropColumn(this); + listener.exitCreateTableAsSelect(this); } } } -SqlBaseParser.DropColumnContext = DropColumnContext; +SqlBaseParser.CreateTableAsSelectContext = CreateTableAsSelectContext; -class DropViewContext extends StatementContext { +class ShowStatsContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - DROP() { - return this.getToken(SqlBaseParser.DROP, 0); - }; - - VIEW() { - return this.getToken(SqlBaseParser.VIEW, 0); + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + STATS() { + return this.getToken(SqlBaseParser.STATS, 0); }; - IF() { - return this.getToken(SqlBaseParser.IF, 0); + FOR() { + return this.getToken(SqlBaseParser.FOR, 0); }; - EXISTS() { - return this.getToken(SqlBaseParser.EXISTS, 0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDropView(this); + listener.enterShowStats(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDropView(this); + listener.exitShowStats(this); } } } -SqlBaseParser.DropViewContext = DropViewContext; +SqlBaseParser.ShowStatsContext = ShowStatsContext; -class ShowTablesContext extends StatementContext { +class ShowCreateSchemaContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.pattern = null;; - this.escape = null;; super.copyFrom(ctx); } @@ -9884,668 +12978,608 @@ class ShowTablesContext extends StatementContext { return this.getToken(SqlBaseParser.SHOW, 0); }; - TABLES() { - return this.getToken(SqlBaseParser.TABLES, 0); - }; - - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); - }; - - LIKE() { - return this.getToken(SqlBaseParser.LIKE, 0); - }; - - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); - }; - - IN() { - return this.getToken(SqlBaseParser.IN, 0); + CREATE() { + return this.getToken(SqlBaseParser.CREATE, 0); }; - string = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(StringContext); - } else { - return this.getTypedRuleContext(StringContext,i); - } + SCHEMA() { + return this.getToken(SqlBaseParser.SCHEMA, 0); }; - ESCAPE() { - return this.getToken(SqlBaseParser.ESCAPE, 0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowTables(this); + listener.enterShowCreateSchema(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowTables(this); + listener.exitShowCreateSchema(this); } } } -SqlBaseParser.ShowTablesContext = ShowTablesContext; +SqlBaseParser.ShowCreateSchemaContext = ShowCreateSchemaContext; -class ShowCatalogsContext extends StatementContext { +class DropFunctionContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.pattern = null;; - this.escape = null;; super.copyFrom(ctx); } - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); + DROP() { + return this.getToken(SqlBaseParser.DROP, 0); }; - CATALOGS() { - return this.getToken(SqlBaseParser.CATALOGS, 0); + FUNCTION() { + return this.getToken(SqlBaseParser.FUNCTION, 0); }; - LIKE() { - return this.getToken(SqlBaseParser.LIKE, 0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; - string = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(StringContext); - } else { - return this.getTypedRuleContext(StringContext,i); - } + TEMPORARY() { + return this.getToken(SqlBaseParser.TEMPORARY, 0); }; - ESCAPE() { - return this.getToken(SqlBaseParser.ESCAPE, 0); + IF() { + return this.getToken(SqlBaseParser.IF, 0); + }; + + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); + }; + + types() { + return this.getTypedRuleContext(TypesContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowCatalogs(this); + listener.enterDropFunction(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowCatalogs(this); + listener.exitDropFunction(this); } } } -SqlBaseParser.ShowCatalogsContext = ShowCatalogsContext; +SqlBaseParser.DropFunctionContext = DropFunctionContext; -class ShowRolesContext extends StatementContext { +class RevokeContext extends StatementContext { constructor(parser, ctx) { super(parser); + this.grantee = null;; super.copyFrom(ctx); } - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); + REVOKE() { + return this.getToken(SqlBaseParser.REVOKE, 0); + }; + + ON() { + return this.getToken(SqlBaseParser.ON, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); + }; + + principal() { + return this.getTypedRuleContext(PrincipalContext,0); + }; + + privilege = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(PrivilegeContext); + } else { + return this.getTypedRuleContext(PrivilegeContext,i); + } }; - ROLES() { - return this.getToken(SqlBaseParser.ROLES, 0); + ALL() { + return this.getToken(SqlBaseParser.ALL, 0); }; - CURRENT() { - return this.getToken(SqlBaseParser.CURRENT, 0); + PRIVILEGES() { + return this.getToken(SqlBaseParser.PRIVILEGES, 0); }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + GRANT() { + return this.getToken(SqlBaseParser.GRANT, 0); }; - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); + OPTION() { + return this.getToken(SqlBaseParser.OPTION, 0); }; - IN() { - return this.getToken(SqlBaseParser.IN, 0); + FOR() { + return this.getToken(SqlBaseParser.FOR, 0); + }; + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowRoles(this); + listener.enterRevoke(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowRoles(this); + listener.exitRevoke(this); } } } -SqlBaseParser.ShowRolesContext = ShowRolesContext; +SqlBaseParser.RevokeContext = RevokeContext; -class RenameColumnContext extends StatementContext { +class UpdateContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.tableName = null;; - this.from = null;; - this.to = null;; + this.where = null;; super.copyFrom(ctx); } - ALTER() { - return this.getToken(SqlBaseParser.ALTER, 0); - }; - - TABLE() { - return this.getToken(SqlBaseParser.TABLE, 0); - }; - - RENAME() { - return this.getToken(SqlBaseParser.RENAME, 0); - }; - - COLUMN() { - return this.getToken(SqlBaseParser.COLUMN, 0); - }; - - TO() { - return this.getToken(SqlBaseParser.TO, 0); + UPDATE() { + return this.getToken(SqlBaseParser.UPDATE, 0); }; qualifiedName() { return this.getTypedRuleContext(QualifiedNameContext,0); }; - identifier = function(i) { + SET() { + return this.getToken(SqlBaseParser.SET, 0); + }; + + updateAssignment = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(IdentifierContext); + return this.getTypedRuleContexts(UpdateAssignmentContext); } else { - return this.getTypedRuleContext(IdentifierContext,i); + return this.getTypedRuleContext(UpdateAssignmentContext,i); } }; - IF = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SqlBaseParser.IF); - } else { - return this.getToken(SqlBaseParser.IF, i); - } + WHERE() { + return this.getToken(SqlBaseParser.WHERE, 0); }; - - EXISTS = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SqlBaseParser.EXISTS); - } else { - return this.getToken(SqlBaseParser.EXISTS, i); - } + booleanExpression() { + return this.getTypedRuleContext(BooleanExpressionContext,0); }; - enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRenameColumn(this); + listener.enterUpdate(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRenameColumn(this); + listener.exitUpdate(this); } } } -SqlBaseParser.RenameColumnContext = RenameColumnContext; +SqlBaseParser.UpdateContext = UpdateContext; -class RevokeRolesContext extends StatementContext { +class CreateTypeContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - REVOKE() { - return this.getToken(SqlBaseParser.REVOKE, 0); + CREATE() { + return this.getToken(SqlBaseParser.CREATE, 0); }; - roles() { - return this.getTypedRuleContext(RolesContext,0); + TYPE() { + return this.getToken(SqlBaseParser.TYPE, 0); }; - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; - principal = function(i) { + AS() { + return this.getToken(SqlBaseParser.AS, 0); + }; + + sqlParameterDeclaration = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(PrincipalContext); + return this.getTypedRuleContexts(SqlParameterDeclarationContext); } else { - return this.getTypedRuleContext(PrincipalContext,i); + return this.getTypedRuleContext(SqlParameterDeclarationContext,i); } }; - ADMIN() { - return this.getToken(SqlBaseParser.ADMIN, 0); - }; - - OPTION() { - return this.getToken(SqlBaseParser.OPTION, 0); - }; - - FOR() { - return this.getToken(SqlBaseParser.FOR, 0); - }; - - GRANTED() { - return this.getToken(SqlBaseParser.GRANTED, 0); - }; - - BY() { - return this.getToken(SqlBaseParser.BY, 0); - }; - - grantor() { - return this.getTypedRuleContext(GrantorContext,0); + type() { + return this.getTypedRuleContext(TypeContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRevokeRoles(this); + listener.enterCreateType(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRevokeRoles(this); + listener.exitCreateType(this); } } } -SqlBaseParser.RevokeRolesContext = RevokeRolesContext; +SqlBaseParser.CreateTypeContext = CreateTypeContext; -class ShowCreateTableContext extends StatementContext { +class DeleteContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); - }; - - CREATE() { - return this.getToken(SqlBaseParser.CREATE, 0); + DELETE() { + return this.getToken(SqlBaseParser.DELETE, 0); }; - TABLE() { - return this.getToken(SqlBaseParser.TABLE, 0); + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); }; qualifiedName() { return this.getTypedRuleContext(QualifiedNameContext,0); }; + WHERE() { + return this.getToken(SqlBaseParser.WHERE, 0); + }; + + booleanExpression() { + return this.getTypedRuleContext(BooleanExpressionContext,0); + }; + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowCreateTable(this); + listener.enterDelete(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowCreateTable(this); + listener.exitDelete(this); } } } -SqlBaseParser.ShowCreateTableContext = ShowCreateTableContext; +SqlBaseParser.DeleteContext = DeleteContext; -class ShowColumnsContext extends StatementContext { +class MergeIntoContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); + MERGE() { + return this.getToken(SqlBaseParser.MERGE, 0); }; - COLUMNS() { - return this.getToken(SqlBaseParser.COLUMNS, 0); + INTO() { + return this.getToken(SqlBaseParser.INTO, 0); }; qualifiedName() { return this.getTypedRuleContext(QualifiedNameContext,0); }; - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); + USING() { + return this.getToken(SqlBaseParser.USING, 0); }; - IN() { - return this.getToken(SqlBaseParser.IN, 0); + relation() { + return this.getTypedRuleContext(RelationContext,0); }; - DESCRIBE() { - return this.getToken(SqlBaseParser.DESCRIBE, 0); + ON() { + return this.getToken(SqlBaseParser.ON, 0); }; - DESC() { - return this.getToken(SqlBaseParser.DESC, 0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + mergeCase = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(MergeCaseContext); + } else { + return this.getTypedRuleContext(MergeCaseContext,i); + } + }; + + AS() { + return this.getToken(SqlBaseParser.AS, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowColumns(this); + listener.enterMergeInto(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowColumns(this); + listener.exitMergeInto(this); } } } -SqlBaseParser.ShowColumnsContext = ShowColumnsContext; +SqlBaseParser.MergeIntoContext = MergeIntoContext; -class ShowRoleGrantsContext extends StatementContext { +class DescribeInputContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); - }; - - ROLE() { - return this.getToken(SqlBaseParser.ROLE, 0); - }; - - GRANTS() { - return this.getToken(SqlBaseParser.GRANTS, 0); - }; - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + DESCRIBE() { + return this.getToken(SqlBaseParser.DESCRIBE, 0); }; - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); + INPUT() { + return this.getToken(SqlBaseParser.INPUT, 0); }; - - IN() { - return this.getToken(SqlBaseParser.IN, 0); + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowRoleGrants(this); + listener.enterDescribeInput(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowRoleGrants(this); + listener.exitDescribeInput(this); } } } -SqlBaseParser.ShowRoleGrantsContext = ShowRoleGrantsContext; +SqlBaseParser.DescribeInputContext = DescribeInputContext; -class AddColumnContext extends StatementContext { +class ShowStatsForQueryContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.tableName = null;; - this.column = null;; super.copyFrom(ctx); } - ALTER() { - return this.getToken(SqlBaseParser.ALTER, 0); - }; - - TABLE() { - return this.getToken(SqlBaseParser.TABLE, 0); - }; - - ADD() { - return this.getToken(SqlBaseParser.ADD, 0); - }; - - COLUMN() { - return this.getToken(SqlBaseParser.COLUMN, 0); - }; - - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); - }; - - columnDefinition() { - return this.getTypedRuleContext(ColumnDefinitionContext,0); + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); }; - IF = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SqlBaseParser.IF); - } else { - return this.getToken(SqlBaseParser.IF, i); - } + STATS() { + return this.getToken(SqlBaseParser.STATS, 0); }; - - EXISTS = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SqlBaseParser.EXISTS); - } else { - return this.getToken(SqlBaseParser.EXISTS, i); - } + FOR() { + return this.getToken(SqlBaseParser.FOR, 0); }; - - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); + querySpecification() { + return this.getTypedRuleContext(QuerySpecificationContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterAddColumn(this); + listener.enterShowStatsForQuery(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitAddColumn(this); + listener.exitShowStatsForQuery(this); } } } -SqlBaseParser.AddColumnContext = AddColumnContext; +SqlBaseParser.ShowStatsForQueryContext = ShowStatsForQueryContext; -class ResetSessionContext extends StatementContext { +class StatementDefaultContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - RESET() { - return this.getToken(SqlBaseParser.RESET, 0); - }; - - SESSION() { - return this.getToken(SqlBaseParser.SESSION, 0); - }; - - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + query() { + return this.getTypedRuleContext(QueryContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterResetSession(this); + listener.enterStatementDefault(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitResetSession(this); + listener.exitStatementDefault(this); } } } -SqlBaseParser.ResetSessionContext = ResetSessionContext; +SqlBaseParser.StatementDefaultContext = StatementDefaultContext; -class InsertIntoContext extends StatementContext { +class TruncateTableContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - INSERT() { - return this.getToken(SqlBaseParser.INSERT, 0); + TRUNCATE() { + return this.getToken(SqlBaseParser.TRUNCATE, 0); }; - INTO() { - return this.getToken(SqlBaseParser.INTO, 0); + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; qualifiedName() { return this.getTypedRuleContext(QualifiedNameContext,0); }; - query() { - return this.getTypedRuleContext(QueryContext,0); - }; - - columnAliases() { - return this.getTypedRuleContext(ColumnAliasesContext,0); - }; - enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterInsertInto(this); + listener.enterTruncateTable(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitInsertInto(this); + listener.exitTruncateTable(this); } } } -SqlBaseParser.InsertIntoContext = InsertIntoContext; +SqlBaseParser.TruncateTableContext = TruncateTableContext; -class ShowSessionContext extends StatementContext { +class AlterColumnSetNotNullContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.pattern = null;; - this.escape = null;; + this.tableName = null;; + this.column = null;; super.copyFrom(ctx); } - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); + ALTER = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.ALTER); + } else { + return this.getToken(SqlBaseParser.ALTER, i); + } }; - SESSION() { - return this.getToken(SqlBaseParser.SESSION, 0); + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; - LIKE() { - return this.getToken(SqlBaseParser.LIKE, 0); + SET() { + return this.getToken(SqlBaseParser.SET, 0); }; - string = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(StringContext); - } else { - return this.getTypedRuleContext(StringContext,i); - } + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); }; - ESCAPE() { - return this.getToken(SqlBaseParser.ESCAPE, 0); + NULL() { + return this.getToken(SqlBaseParser.NULL, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + IF() { + return this.getToken(SqlBaseParser.IF, 0); + }; + + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); + }; + + COLUMN() { + return this.getToken(SqlBaseParser.COLUMN, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowSession(this); + listener.enterAlterColumnSetNotNull(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowSession(this); + listener.exitAlterColumnSetNotNull(this); } } } -SqlBaseParser.ShowSessionContext = ShowSessionContext; +SqlBaseParser.AlterColumnSetNotNullContext = AlterColumnSetNotNullContext; -class CreateSchemaContext extends StatementContext { +class CreateMaterializedViewContext extends StatementContext { constructor(parser, ctx) { super(parser); @@ -10556,14 +13590,26 @@ class CreateSchemaContext extends StatementContext { return this.getToken(SqlBaseParser.CREATE, 0); }; - SCHEMA() { - return this.getToken(SqlBaseParser.SCHEMA, 0); + MATERIALIZED() { + return this.getToken(SqlBaseParser.MATERIALIZED, 0); + }; + + VIEW() { + return this.getToken(SqlBaseParser.VIEW, 0); }; qualifiedName() { return this.getTypedRuleContext(QualifiedNameContext,0); }; + AS() { + return this.getToken(SqlBaseParser.AS, 0); + }; + + query() { + return this.getTypedRuleContext(QueryContext,0); + }; + IF() { return this.getToken(SqlBaseParser.IF, 0); }; @@ -10576,6 +13622,18 @@ class CreateSchemaContext extends StatementContext { return this.getToken(SqlBaseParser.EXISTS, 0); }; + COMMENT() { + return this.getToken(SqlBaseParser.COMMENT, 0); + }; + + string() { + return this.getTypedRuleContext(StringContext,0); + }; + + viewSecurity() { + return this.getTypedRuleContext(ViewSecurityContext,0); + }; + WITH() { return this.getToken(SqlBaseParser.WITH, 0); }; @@ -10586,673 +13644,802 @@ class CreateSchemaContext extends StatementContext { enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCreateSchema(this); + listener.enterCreateMaterializedView(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCreateSchema(this); + listener.exitCreateMaterializedView(this); } } } -SqlBaseParser.CreateSchemaContext = CreateSchemaContext; +SqlBaseParser.CreateMaterializedViewContext = CreateMaterializedViewContext; -class ExecuteContext extends StatementContext { +class AlterFunctionContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + ALTER() { + return this.getToken(SqlBaseParser.ALTER, 0); + }; + + FUNCTION() { + return this.getToken(SqlBaseParser.FUNCTION, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + alterRoutineCharacteristics() { + return this.getTypedRuleContext(AlterRoutineCharacteristicsContext,0); + }; + + types() { + return this.getTypedRuleContext(TypesContext,0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterAlterFunction(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitAlterFunction(this); + } + } + + +} + +SqlBaseParser.AlterFunctionContext = AlterFunctionContext; + +class SetSessionContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - EXECUTE() { - return this.getToken(SqlBaseParser.EXECUTE, 0); + SET() { + return this.getToken(SqlBaseParser.SET, 0); + }; + + SESSION() { + return this.getToken(SqlBaseParser.SESSION, 0); }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; - USING() { - return this.getToken(SqlBaseParser.USING, 0); + EQ() { + return this.getToken(SqlBaseParser.EQ, 0); }; - expression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExpressionContext); - } else { - return this.getTypedRuleContext(ExpressionContext,i); - } + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterExecute(this); + listener.enterSetSession(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitExecute(this); + listener.exitSetSession(this); } } } -SqlBaseParser.ExecuteContext = ExecuteContext; +SqlBaseParser.SetSessionContext = SetSessionContext; -class RenameSchemaContext extends StatementContext { +class CreateViewContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - ALTER() { - return this.getToken(SqlBaseParser.ALTER, 0); + CREATE() { + return this.getToken(SqlBaseParser.CREATE, 0); }; - SCHEMA() { - return this.getToken(SqlBaseParser.SCHEMA, 0); + VIEW() { + return this.getToken(SqlBaseParser.VIEW, 0); }; qualifiedName() { return this.getTypedRuleContext(QualifiedNameContext,0); }; - RENAME() { - return this.getToken(SqlBaseParser.RENAME, 0); + AS() { + return this.getToken(SqlBaseParser.AS, 0); }; - TO() { - return this.getToken(SqlBaseParser.TO, 0); + query() { + return this.getTypedRuleContext(QueryContext,0); }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + OR() { + return this.getToken(SqlBaseParser.OR, 0); + }; + + REPLACE() { + return this.getToken(SqlBaseParser.REPLACE, 0); + }; + + viewSecurity() { + return this.getTypedRuleContext(ViewSecurityContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRenameSchema(this); + listener.enterCreateView(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRenameSchema(this); + listener.exitCreateView(this); } } } -SqlBaseParser.RenameSchemaContext = RenameSchemaContext; +SqlBaseParser.CreateViewContext = CreateViewContext; -class DropRoleContext extends StatementContext { +class ShowSchemasContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.name = null;; + this.pattern = null;; + this.escape = null;; super.copyFrom(ctx); } - DROP() { - return this.getToken(SqlBaseParser.DROP, 0); + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); }; - ROLE() { - return this.getToken(SqlBaseParser.ROLE, 0); + SCHEMAS() { + return this.getToken(SqlBaseParser.SCHEMAS, 0); }; identifier() { return this.getTypedRuleContext(IdentifierContext,0); }; + LIKE() { + return this.getToken(SqlBaseParser.LIKE, 0); + }; + + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); + }; + + IN() { + return this.getToken(SqlBaseParser.IN, 0); + }; + + string = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(StringContext); + } else { + return this.getTypedRuleContext(StringContext,i); + } + }; + + ESCAPE() { + return this.getToken(SqlBaseParser.ESCAPE, 0); + }; + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDropRole(this); + listener.enterShowSchemas(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDropRole(this); + listener.exitShowSchemas(this); } } } -SqlBaseParser.DropRoleContext = DropRoleContext; +SqlBaseParser.ShowSchemasContext = ShowSchemasContext; -class AnalyzeContext extends StatementContext { +class DropTableContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - ANALYZE() { - return this.getToken(SqlBaseParser.ANALYZE, 0); + DROP() { + return this.getToken(SqlBaseParser.DROP, 0); + }; + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; qualifiedName() { return this.getTypedRuleContext(QualifiedNameContext,0); }; - WITH() { - return this.getToken(SqlBaseParser.WITH, 0); + IF() { + return this.getToken(SqlBaseParser.IF, 0); }; - properties() { - return this.getTypedRuleContext(PropertiesContext,0); + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterAnalyze(this); + listener.enterDropTable(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitAnalyze(this); + listener.exitDropTable(this); } } } -SqlBaseParser.AnalyzeContext = AnalyzeContext; +SqlBaseParser.DropTableContext = DropTableContext; -class SetRoleContext extends StatementContext { +class RollbackContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.role = null;; super.copyFrom(ctx); } - SET() { - return this.getToken(SqlBaseParser.SET, 0); - }; - - ROLE() { - return this.getToken(SqlBaseParser.ROLE, 0); - }; - - ALL() { - return this.getToken(SqlBaseParser.ALL, 0); - }; - - NONE() { - return this.getToken(SqlBaseParser.NONE, 0); + ROLLBACK() { + return this.getToken(SqlBaseParser.ROLLBACK, 0); }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + WORK() { + return this.getToken(SqlBaseParser.WORK, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSetRole(this); + listener.enterRollback(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSetRole(this); + listener.exitRollback(this); } } } -SqlBaseParser.SetRoleContext = SetRoleContext; +SqlBaseParser.RollbackContext = RollbackContext; -class CreateFunctionContext extends StatementContext { +class RenameViewContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.functionName = null;; - this.returnType = null;; + this.from = null;; + this.to = null;; super.copyFrom(ctx); } - CREATE() { - return this.getToken(SqlBaseParser.CREATE, 0); - }; - - FUNCTION() { - return this.getToken(SqlBaseParser.FUNCTION, 0); - }; - - RETURNS() { - return this.getToken(SqlBaseParser.RETURNS, 0); - }; - - routineCharacteristics() { - return this.getTypedRuleContext(RoutineCharacteristicsContext,0); - }; - - routineBody() { - return this.getTypedRuleContext(RoutineBodyContext,0); - }; - - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); - }; - - type() { - return this.getTypedRuleContext(TypeContext,0); + ALTER() { + return this.getToken(SqlBaseParser.ALTER, 0); }; - OR() { - return this.getToken(SqlBaseParser.OR, 0); + VIEW() { + return this.getToken(SqlBaseParser.VIEW, 0); }; - REPLACE() { - return this.getToken(SqlBaseParser.REPLACE, 0); + RENAME() { + return this.getToken(SqlBaseParser.RENAME, 0); }; - TEMPORARY() { - return this.getToken(SqlBaseParser.TEMPORARY, 0); + TO() { + return this.getToken(SqlBaseParser.TO, 0); }; - sqlParameterDeclaration = function(i) { + qualifiedName = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(SqlParameterDeclarationContext); + return this.getTypedRuleContexts(QualifiedNameContext); } else { - return this.getTypedRuleContext(SqlParameterDeclarationContext,i); + return this.getTypedRuleContext(QualifiedNameContext,i); } }; - COMMENT() { - return this.getToken(SqlBaseParser.COMMENT, 0); + IF() { + return this.getToken(SqlBaseParser.IF, 0); }; - string() { - return this.getTypedRuleContext(StringContext,0); + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCreateFunction(this); + listener.enterRenameView(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCreateFunction(this); + listener.exitRenameView(this); } } } -SqlBaseParser.CreateFunctionContext = CreateFunctionContext; +SqlBaseParser.RenameViewContext = RenameViewContext; -class ShowGrantsContext extends StatementContext { +class AlterColumnDropNotNullContext extends StatementContext { constructor(parser, ctx) { super(parser); + this.tableName = null;; + this.column = null;; super.copyFrom(ctx); } - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); + ALTER = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.ALTER); + } else { + return this.getToken(SqlBaseParser.ALTER, i); + } + }; + + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); + }; + + DROP() { + return this.getToken(SqlBaseParser.DROP, 0); + }; + + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); + }; + + NULL() { + return this.getToken(SqlBaseParser.NULL, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; - GRANTS() { - return this.getToken(SqlBaseParser.GRANTS, 0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; - ON() { - return this.getToken(SqlBaseParser.ON, 0); + IF() { + return this.getToken(SqlBaseParser.IF, 0); }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); }; - TABLE() { - return this.getToken(SqlBaseParser.TABLE, 0); + COLUMN() { + return this.getToken(SqlBaseParser.COLUMN, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowGrants(this); + listener.enterAlterColumnDropNotNull(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowGrants(this); + listener.exitAlterColumnDropNotNull(this); } } } -SqlBaseParser.ShowGrantsContext = ShowGrantsContext; +SqlBaseParser.AlterColumnDropNotNullContext = AlterColumnDropNotNullContext; -class DropSchemaContext extends StatementContext { +class DropBranchContext extends StatementContext { constructor(parser, ctx) { super(parser); + this.tableName = null;; + this.name = null;; super.copyFrom(ctx); } + ALTER() { + return this.getToken(SqlBaseParser.ALTER, 0); + }; + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); + }; + DROP() { return this.getToken(SqlBaseParser.DROP, 0); }; - SCHEMA() { - return this.getToken(SqlBaseParser.SCHEMA, 0); + BRANCH() { + return this.getToken(SqlBaseParser.BRANCH, 0); }; qualifiedName() { return this.getTypedRuleContext(QualifiedNameContext,0); }; - IF() { - return this.getToken(SqlBaseParser.IF, 0); + string() { + return this.getTypedRuleContext(StringContext,0); }; - EXISTS() { - return this.getToken(SqlBaseParser.EXISTS, 0); + IF = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.IF); + } else { + return this.getToken(SqlBaseParser.IF, i); + } }; - CASCADE() { - return this.getToken(SqlBaseParser.CASCADE, 0); - }; - RESTRICT() { - return this.getToken(SqlBaseParser.RESTRICT, 0); + EXISTS = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.EXISTS); + } else { + return this.getToken(SqlBaseParser.EXISTS, i); + } }; + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDropSchema(this); + listener.enterDropBranch(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDropSchema(this); + listener.exitDropBranch(this); } } } -SqlBaseParser.DropSchemaContext = DropSchemaContext; +SqlBaseParser.DropBranchContext = DropBranchContext; -class ShowCreateViewContext extends StatementContext { +class DropTagContext extends StatementContext { constructor(parser, ctx) { super(parser); + this.tableName = null;; + this.name = null;; super.copyFrom(ctx); } - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); + ALTER() { + return this.getToken(SqlBaseParser.ALTER, 0); }; - CREATE() { - return this.getToken(SqlBaseParser.CREATE, 0); + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; - VIEW() { - return this.getToken(SqlBaseParser.VIEW, 0); + DROP() { + return this.getToken(SqlBaseParser.DROP, 0); + }; + + TAG() { + return this.getToken(SqlBaseParser.TAG, 0); }; qualifiedName() { return this.getTypedRuleContext(QualifiedNameContext,0); }; + string() { + return this.getTypedRuleContext(StringContext,0); + }; + + IF = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.IF); + } else { + return this.getToken(SqlBaseParser.IF, i); + } + }; + + + EXISTS = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.EXISTS); + } else { + return this.getToken(SqlBaseParser.EXISTS, i); + } + }; + + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowCreateView(this); + listener.enterDropTag(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowCreateView(this); + listener.exitDropTag(this); } } } -SqlBaseParser.ShowCreateViewContext = ShowCreateViewContext; +SqlBaseParser.DropTagContext = DropTagContext; -class CreateTableContext extends StatementContext { +class GrantRolesContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - CREATE() { - return this.getToken(SqlBaseParser.CREATE, 0); + GRANT() { + return this.getToken(SqlBaseParser.GRANT, 0); }; - TABLE() { - return this.getToken(SqlBaseParser.TABLE, 0); + roles() { + return this.getTypedRuleContext(RolesContext,0); }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + TO() { + return this.getToken(SqlBaseParser.TO, 0); }; - tableElement = function(i) { + principal = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(TableElementContext); + return this.getTypedRuleContexts(PrincipalContext); } else { - return this.getTypedRuleContext(TableElementContext,i); + return this.getTypedRuleContext(PrincipalContext,i); } }; - IF() { - return this.getToken(SqlBaseParser.IF, 0); - }; - - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); + WITH() { + return this.getToken(SqlBaseParser.WITH, 0); }; - EXISTS() { - return this.getToken(SqlBaseParser.EXISTS, 0); + ADMIN() { + return this.getToken(SqlBaseParser.ADMIN, 0); }; - COMMENT() { - return this.getToken(SqlBaseParser.COMMENT, 0); + OPTION() { + return this.getToken(SqlBaseParser.OPTION, 0); }; - string() { - return this.getTypedRuleContext(StringContext,0); + GRANTED() { + return this.getToken(SqlBaseParser.GRANTED, 0); }; - WITH() { - return this.getToken(SqlBaseParser.WITH, 0); + BY() { + return this.getToken(SqlBaseParser.BY, 0); }; - properties() { - return this.getTypedRuleContext(PropertiesContext,0); + grantor() { + return this.getTypedRuleContext(GrantorContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCreateTable(this); + listener.enterGrantRoles(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCreateTable(this); + listener.exitGrantRoles(this); } } } -SqlBaseParser.CreateTableContext = CreateTableContext; +SqlBaseParser.GrantRolesContext = GrantRolesContext; -class StartTransactionContext extends StatementContext { +class CallContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - START() { - return this.getToken(SqlBaseParser.START, 0); + CALL() { + return this.getToken(SqlBaseParser.CALL, 0); }; - TRANSACTION() { - return this.getToken(SqlBaseParser.TRANSACTION, 0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; - transactionMode = function(i) { + callArgument = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(TransactionModeContext); + return this.getTypedRuleContexts(CallArgumentContext); } else { - return this.getTypedRuleContext(TransactionModeContext,i); + return this.getTypedRuleContext(CallArgumentContext,i); } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterStartTransaction(this); + listener.enterCall(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitStartTransaction(this); + listener.exitCall(this); } } } -SqlBaseParser.StartTransactionContext = StartTransactionContext; +SqlBaseParser.CallContext = CallContext; -class CreateTableAsSelectContext extends StatementContext { +class RefreshMaterializedViewContext extends StatementContext { constructor(parser, ctx) { super(parser); + this.where = null;; super.copyFrom(ctx); } - CREATE() { - return this.getToken(SqlBaseParser.CREATE, 0); + REFRESH() { + return this.getToken(SqlBaseParser.REFRESH, 0); }; - TABLE() { - return this.getToken(SqlBaseParser.TABLE, 0); + MATERIALIZED() { + return this.getToken(SqlBaseParser.MATERIALIZED, 0); }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + VIEW() { + return this.getToken(SqlBaseParser.VIEW, 0); }; - AS() { - return this.getToken(SqlBaseParser.AS, 0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; - query() { - return this.getTypedRuleContext(QueryContext,0); + WHERE() { + return this.getToken(SqlBaseParser.WHERE, 0); }; - IF() { - return this.getToken(SqlBaseParser.IF, 0); + booleanExpression() { + return this.getTypedRuleContext(BooleanExpressionContext,0); }; - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); - }; + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterRefreshMaterializedView(this); + } + } - EXISTS() { - return this.getToken(SqlBaseParser.EXISTS, 0); - }; + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitRefreshMaterializedView(this); + } + } - columnAliases() { - return this.getTypedRuleContext(ColumnAliasesContext,0); - }; - COMMENT() { - return this.getToken(SqlBaseParser.COMMENT, 0); - }; +} - string() { - return this.getTypedRuleContext(StringContext,0); - }; +SqlBaseParser.RefreshMaterializedViewContext = RefreshMaterializedViewContext; - WITH = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SqlBaseParser.WITH); - } else { - return this.getToken(SqlBaseParser.WITH, i); - } +class ShowCreateMaterializedViewContext extends StatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + SHOW() { + return this.getToken(SqlBaseParser.SHOW, 0); }; + CREATE() { + return this.getToken(SqlBaseParser.CREATE, 0); + }; - properties() { - return this.getTypedRuleContext(PropertiesContext,0); + MATERIALIZED() { + return this.getToken(SqlBaseParser.MATERIALIZED, 0); }; - DATA() { - return this.getToken(SqlBaseParser.DATA, 0); + VIEW() { + return this.getToken(SqlBaseParser.VIEW, 0); }; - NO() { - return this.getToken(SqlBaseParser.NO, 0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCreateTableAsSelect(this); + listener.enterShowCreateMaterializedView(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCreateTableAsSelect(this); + listener.exitShowCreateMaterializedView(this); } } } -SqlBaseParser.CreateTableAsSelectContext = CreateTableAsSelectContext; +SqlBaseParser.ShowCreateMaterializedViewContext = ShowCreateMaterializedViewContext; -class ShowStatsContext extends StatementContext { +class ShowFunctionsContext extends StatementContext { constructor(parser, ctx) { super(parser); + this.pattern = null;; + this.escape = null;; super.copyFrom(ctx); } @@ -11260,88 +14447,83 @@ class ShowStatsContext extends StatementContext { return this.getToken(SqlBaseParser.SHOW, 0); }; - STATS() { - return this.getToken(SqlBaseParser.STATS, 0); + FUNCTIONS() { + return this.getToken(SqlBaseParser.FUNCTIONS, 0); }; - FOR() { - return this.getToken(SqlBaseParser.FOR, 0); + LIKE() { + return this.getToken(SqlBaseParser.LIKE, 0); }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + string = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(StringContext); + } else { + return this.getTypedRuleContext(StringContext,i); + } + }; + + ESCAPE() { + return this.getToken(SqlBaseParser.ESCAPE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowStats(this); + listener.enterShowFunctions(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowStats(this); + listener.exitShowFunctions(this); } } } -SqlBaseParser.ShowStatsContext = ShowStatsContext; +SqlBaseParser.ShowFunctionsContext = ShowFunctionsContext; -class DropFunctionContext extends StatementContext { +class DescribeOutputContext extends StatementContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - DROP() { - return this.getToken(SqlBaseParser.DROP, 0); - }; - - FUNCTION() { - return this.getToken(SqlBaseParser.FUNCTION, 0); - }; - - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); - }; - - TEMPORARY() { - return this.getToken(SqlBaseParser.TEMPORARY, 0); - }; - - IF() { - return this.getToken(SqlBaseParser.IF, 0); + DESCRIBE() { + return this.getToken(SqlBaseParser.DESCRIBE, 0); }; - EXISTS() { - return this.getToken(SqlBaseParser.EXISTS, 0); + OUTPUT() { + return this.getToken(SqlBaseParser.OUTPUT, 0); }; - types() { - return this.getTypedRuleContext(TypesContext,0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDropFunction(this); + listener.enterDescribeOutput(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDropFunction(this); + listener.exitDescribeOutput(this); } } } -SqlBaseParser.DropFunctionContext = DropFunctionContext; +SqlBaseParser.DescribeOutputContext = DescribeOutputContext; -class RevokeContext extends StatementContext { +class GrantContext extends StatementContext { constructor(parser, ctx) { super(parser); @@ -11349,10 +14531,18 @@ class RevokeContext extends StatementContext { super.copyFrom(ctx); } - REVOKE() { - return this.getToken(SqlBaseParser.REVOKE, 0); + GRANT = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.GRANT); + } else { + return this.getToken(SqlBaseParser.GRANT, i); + } }; + ON() { return this.getToken(SqlBaseParser.ON, 0); }; @@ -11361,8 +14551,8 @@ class RevokeContext extends StatementContext { return this.getTypedRuleContext(QualifiedNameContext,0); }; - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); + TO() { + return this.getToken(SqlBaseParser.TO, 0); }; principal() { @@ -11388,1083 +14578,1075 @@ class RevokeContext extends StatementContext { return this.getToken(SqlBaseParser.PRIVILEGES, 0); }; - GRANT() { - return this.getToken(SqlBaseParser.GRANT, 0); - }; - - OPTION() { - return this.getToken(SqlBaseParser.OPTION, 0); + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; - FOR() { - return this.getToken(SqlBaseParser.FOR, 0); + WITH() { + return this.getToken(SqlBaseParser.WITH, 0); }; - TABLE() { - return this.getToken(SqlBaseParser.TABLE, 0); + OPTION() { + return this.getToken(SqlBaseParser.OPTION, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRevoke(this); + listener.enterGrant(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRevoke(this); + listener.exitGrant(this); } } } -SqlBaseParser.RevokeContext = RevokeContext; +SqlBaseParser.GrantContext = GrantContext; -class UpdateContext extends StatementContext { +class SetTablePropertiesContext extends StatementContext { constructor(parser, ctx) { super(parser); - this.where = null;; + this.tableName = null;; super.copyFrom(ctx); } - UPDATE() { - return this.getToken(SqlBaseParser.UPDATE, 0); + ALTER() { + return this.getToken(SqlBaseParser.ALTER, 0); }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; SET() { return this.getToken(SqlBaseParser.SET, 0); }; - updateAssignment = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(UpdateAssignmentContext); - } else { - return this.getTypedRuleContext(UpdateAssignmentContext,i); - } - }; - - WHERE() { - return this.getToken(SqlBaseParser.WHERE, 0); - }; - - booleanExpression() { - return this.getTypedRuleContext(BooleanExpressionContext,0); - }; - - enterRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.enterUpdate(this); - } - } - - exitRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.exitUpdate(this); - } - } - - -} - -SqlBaseParser.UpdateContext = UpdateContext; - -class CreateTypeContext extends StatementContext { - - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } - - CREATE() { - return this.getToken(SqlBaseParser.CREATE, 0); + PROPERTIES() { + return this.getToken(SqlBaseParser.PROPERTIES, 0); }; - TYPE() { - return this.getToken(SqlBaseParser.TYPE, 0); + properties() { + return this.getTypedRuleContext(PropertiesContext,0); }; qualifiedName() { return this.getTypedRuleContext(QualifiedNameContext,0); }; - AS() { - return this.getToken(SqlBaseParser.AS, 0); - }; - - sqlParameterDeclaration = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(SqlParameterDeclarationContext); - } else { - return this.getTypedRuleContext(SqlParameterDeclarationContext,i); - } + IF() { + return this.getToken(SqlBaseParser.IF, 0); }; - type() { - return this.getTypedRuleContext(TypeContext,0); + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCreateType(this); + listener.enterSetTableProperties(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCreateType(this); + listener.exitSetTableProperties(this); } } } -SqlBaseParser.CreateTypeContext = CreateTypeContext; +SqlBaseParser.SetTablePropertiesContext = SetTablePropertiesContext; -class DeleteContext extends StatementContext { +class QueryContext extends antlr4.ParserRuleContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_query; } - DELETE() { - return this.getToken(SqlBaseParser.DELETE, 0); - }; - - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); - }; - - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); - }; - - WHERE() { - return this.getToken(SqlBaseParser.WHERE, 0); + queryNoWith() { + return this.getTypedRuleContext(QueryNoWithContext,0); }; - - booleanExpression() { - return this.getTypedRuleContext(BooleanExpressionContext,0); + + with_() { + return this.getTypedRuleContext(WithContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDelete(this); + listener.enterQuery(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDelete(this); + listener.exitQuery(this); } } } -SqlBaseParser.DeleteContext = DeleteContext; -class DescribeInputContext extends StatementContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class WithContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_with; } - DESCRIBE() { - return this.getToken(SqlBaseParser.DESCRIBE, 0); + WITH() { + return this.getToken(SqlBaseParser.WITH, 0); }; - INPUT() { - return this.getToken(SqlBaseParser.INPUT, 0); + namedQuery = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(NamedQueryContext); + } else { + return this.getTypedRuleContext(NamedQueryContext,i); + } }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + RECURSIVE() { + return this.getToken(SqlBaseParser.RECURSIVE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDescribeInput(this); + listener.enterWith(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDescribeInput(this); + listener.exitWith(this); } } } -SqlBaseParser.DescribeInputContext = DescribeInputContext; -class ShowStatsForQueryContext extends StatementContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } +class TableElementContext extends antlr4.ParserRuleContext { - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_tableElement; + } - STATS() { - return this.getToken(SqlBaseParser.STATS, 0); + constraintSpecification() { + return this.getTypedRuleContext(ConstraintSpecificationContext,0); }; - FOR() { - return this.getToken(SqlBaseParser.FOR, 0); + columnDefinition() { + return this.getTypedRuleContext(ColumnDefinitionContext,0); }; - querySpecification() { - return this.getTypedRuleContext(QuerySpecificationContext,0); + likeClause() { + return this.getTypedRuleContext(LikeClauseContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowStatsForQuery(this); + listener.enterTableElement(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowStatsForQuery(this); + listener.exitTableElement(this); } } } -SqlBaseParser.ShowStatsForQueryContext = ShowStatsForQueryContext; -class StatementDefaultContext extends StatementContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class ColumnDefinitionContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_columnDefinition; } - query() { - return this.getTypedRuleContext(QueryContext,0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + type() { + return this.getTypedRuleContext(TypeContext,0); + }; + + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); + }; + + NULL() { + return this.getToken(SqlBaseParser.NULL, 0); + }; + + COMMENT() { + return this.getToken(SqlBaseParser.COMMENT, 0); + }; + + string() { + return this.getTypedRuleContext(StringContext,0); + }; + + WITH() { + return this.getToken(SqlBaseParser.WITH, 0); + }; + + properties() { + return this.getTypedRuleContext(PropertiesContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterStatementDefault(this); + listener.enterColumnDefinition(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitStatementDefault(this); + listener.exitColumnDefinition(this); } } } -SqlBaseParser.StatementDefaultContext = StatementDefaultContext; -class TruncateTableContext extends StatementContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } +class LikeClauseContext extends antlr4.ParserRuleContext { - TRUNCATE() { - return this.getToken(SqlBaseParser.TRUNCATE, 0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_likeClause; + this.optionType = null; + } - TABLE() { - return this.getToken(SqlBaseParser.TABLE, 0); + LIKE() { + return this.getToken(SqlBaseParser.LIKE, 0); }; qualifiedName() { return this.getTypedRuleContext(QualifiedNameContext,0); }; + PROPERTIES() { + return this.getToken(SqlBaseParser.PROPERTIES, 0); + }; + + INCLUDING() { + return this.getToken(SqlBaseParser.INCLUDING, 0); + }; + + EXCLUDING() { + return this.getToken(SqlBaseParser.EXCLUDING, 0); + }; + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterTruncateTable(this); + listener.enterLikeClause(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitTruncateTable(this); + listener.exitLikeClause(this); } } } -SqlBaseParser.TruncateTableContext = TruncateTableContext; -class CreateMaterializedViewContext extends StatementContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } +class PropertiesContext extends antlr4.ParserRuleContext { - CREATE() { - return this.getToken(SqlBaseParser.CREATE, 0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_properties; + } - MATERIALIZED() { - return this.getToken(SqlBaseParser.MATERIALIZED, 0); + property = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(PropertyContext); + } else { + return this.getTypedRuleContext(PropertyContext,i); + } }; - VIEW() { - return this.getToken(SqlBaseParser.VIEW, 0); - }; + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterProperties(this); + } + } - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); - }; + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitProperties(this); + } + } - AS() { - return this.getToken(SqlBaseParser.AS, 0); - }; - query() { - return this.getTypedRuleContext(QueryContext,0); - }; +} - IF() { - return this.getToken(SqlBaseParser.IF, 0); - }; - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); - }; - EXISTS() { - return this.getToken(SqlBaseParser.EXISTS, 0); - }; +class PropertyContext extends antlr4.ParserRuleContext { - COMMENT() { - return this.getToken(SqlBaseParser.COMMENT, 0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_property; + } - string() { - return this.getTypedRuleContext(StringContext,0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; - WITH() { - return this.getToken(SqlBaseParser.WITH, 0); + EQ() { + return this.getToken(SqlBaseParser.EQ, 0); }; - properties() { - return this.getTypedRuleContext(PropertiesContext,0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCreateMaterializedView(this); + listener.enterProperty(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCreateMaterializedView(this); + listener.exitProperty(this); } } } -SqlBaseParser.CreateMaterializedViewContext = CreateMaterializedViewContext; - -class AlterFunctionContext extends StatementContext { - - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } - ALTER() { - return this.getToken(SqlBaseParser.ALTER, 0); - }; - FUNCTION() { - return this.getToken(SqlBaseParser.FUNCTION, 0); - }; +class SqlParameterDeclarationContext extends antlr4.ParserRuleContext { - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_sqlParameterDeclaration; + } - alterRoutineCharacteristics() { - return this.getTypedRuleContext(AlterRoutineCharacteristicsContext,0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; - types() { - return this.getTypedRuleContext(TypesContext,0); + type() { + return this.getTypedRuleContext(TypeContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterAlterFunction(this); + listener.enterSqlParameterDeclaration(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitAlterFunction(this); + listener.exitSqlParameterDeclaration(this); } } } -SqlBaseParser.AlterFunctionContext = AlterFunctionContext; - -class SetSessionContext extends StatementContext { - - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } - - SET() { - return this.getToken(SqlBaseParser.SET, 0); - }; - SESSION() { - return this.getToken(SqlBaseParser.SESSION, 0); - }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); - }; +class RoutineCharacteristicsContext extends antlr4.ParserRuleContext { - EQ() { - return this.getToken(SqlBaseParser.EQ, 0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_routineCharacteristics; + } - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + routineCharacteristic = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(RoutineCharacteristicContext); + } else { + return this.getTypedRuleContext(RoutineCharacteristicContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSetSession(this); + listener.enterRoutineCharacteristics(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSetSession(this); + listener.exitRoutineCharacteristics(this); } } } -SqlBaseParser.SetSessionContext = SetSessionContext; - -class CreateViewContext extends StatementContext { - - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } - - CREATE() { - return this.getToken(SqlBaseParser.CREATE, 0); - }; - - VIEW() { - return this.getToken(SqlBaseParser.VIEW, 0); - }; - - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); - }; - AS() { - return this.getToken(SqlBaseParser.AS, 0); - }; - query() { - return this.getTypedRuleContext(QueryContext,0); - }; +class RoutineCharacteristicContext extends antlr4.ParserRuleContext { - OR() { - return this.getToken(SqlBaseParser.OR, 0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_routineCharacteristic; + } - REPLACE() { - return this.getToken(SqlBaseParser.REPLACE, 0); + LANGUAGE() { + return this.getToken(SqlBaseParser.LANGUAGE, 0); }; - SECURITY() { - return this.getToken(SqlBaseParser.SECURITY, 0); + language() { + return this.getTypedRuleContext(LanguageContext,0); }; - DEFINER() { - return this.getToken(SqlBaseParser.DEFINER, 0); + determinism() { + return this.getTypedRuleContext(DeterminismContext,0); }; - INVOKER() { - return this.getToken(SqlBaseParser.INVOKER, 0); + nullCallClause() { + return this.getTypedRuleContext(NullCallClauseContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCreateView(this); + listener.enterRoutineCharacteristic(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCreateView(this); + listener.exitRoutineCharacteristic(this); } } } -SqlBaseParser.CreateViewContext = CreateViewContext; - -class ShowSchemasContext extends StatementContext { - - constructor(parser, ctx) { - super(parser); - this.pattern = null;; - this.escape = null;; - super.copyFrom(ctx); - } - - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); - }; - - SCHEMAS() { - return this.getToken(SqlBaseParser.SCHEMAS, 0); - }; - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - LIKE() { - return this.getToken(SqlBaseParser.LIKE, 0); - }; - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); - }; +class AlterRoutineCharacteristicsContext extends antlr4.ParserRuleContext { - IN() { - return this.getToken(SqlBaseParser.IN, 0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_alterRoutineCharacteristics; + } - string = function(i) { + alterRoutineCharacteristic = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(StringContext); + return this.getTypedRuleContexts(AlterRoutineCharacteristicContext); } else { - return this.getTypedRuleContext(StringContext,i); + return this.getTypedRuleContext(AlterRoutineCharacteristicContext,i); } }; - ESCAPE() { - return this.getToken(SqlBaseParser.ESCAPE, 0); - }; - enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowSchemas(this); + listener.enterAlterRoutineCharacteristics(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowSchemas(this); + listener.exitAlterRoutineCharacteristics(this); } } } -SqlBaseParser.ShowSchemasContext = ShowSchemasContext; - -class DropTableContext extends StatementContext { - - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } - - DROP() { - return this.getToken(SqlBaseParser.DROP, 0); - }; - TABLE() { - return this.getToken(SqlBaseParser.TABLE, 0); - }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); - }; +class AlterRoutineCharacteristicContext extends antlr4.ParserRuleContext { - IF() { - return this.getToken(SqlBaseParser.IF, 0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_alterRoutineCharacteristic; + } - EXISTS() { - return this.getToken(SqlBaseParser.EXISTS, 0); + nullCallClause() { + return this.getTypedRuleContext(NullCallClauseContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDropTable(this); + listener.enterAlterRoutineCharacteristic(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDropTable(this); + listener.exitAlterRoutineCharacteristic(this); } } } -SqlBaseParser.DropTableContext = DropTableContext; -class RollbackContext extends StatementContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class RoutineBodyContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_routineBody; } - ROLLBACK() { - return this.getToken(SqlBaseParser.ROLLBACK, 0); + returnStatement() { + return this.getTypedRuleContext(ReturnStatementContext,0); }; - WORK() { - return this.getToken(SqlBaseParser.WORK, 0); + externalBodyReference() { + return this.getTypedRuleContext(ExternalBodyReferenceContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRollback(this); + listener.enterRoutineBody(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRollback(this); + listener.exitRoutineBody(this); } } } -SqlBaseParser.RollbackContext = RollbackContext; -class GrantRolesContext extends StatementContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class ReturnStatementContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_returnStatement; } - GRANT() { - return this.getToken(SqlBaseParser.GRANT, 0); + RETURN() { + return this.getToken(SqlBaseParser.RETURN, 0); }; - roles() { - return this.getTypedRuleContext(RolesContext,0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; - TO() { - return this.getToken(SqlBaseParser.TO, 0); - }; + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterReturnStatement(this); + } + } - principal = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(PrincipalContext); - } else { - return this.getTypedRuleContext(PrincipalContext,i); - } - }; + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitReturnStatement(this); + } + } - WITH() { - return this.getToken(SqlBaseParser.WITH, 0); - }; - ADMIN() { - return this.getToken(SqlBaseParser.ADMIN, 0); - }; +} - OPTION() { - return this.getToken(SqlBaseParser.OPTION, 0); - }; - GRANTED() { - return this.getToken(SqlBaseParser.GRANTED, 0); + +class ExternalBodyReferenceContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_externalBodyReference; + } + + EXTERNAL() { + return this.getToken(SqlBaseParser.EXTERNAL, 0); }; - BY() { - return this.getToken(SqlBaseParser.BY, 0); + NAME() { + return this.getToken(SqlBaseParser.NAME, 0); }; - grantor() { - return this.getTypedRuleContext(GrantorContext,0); + externalRoutineName() { + return this.getTypedRuleContext(ExternalRoutineNameContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterGrantRoles(this); + listener.enterExternalBodyReference(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitGrantRoles(this); + listener.exitExternalBodyReference(this); } } } -SqlBaseParser.GrantRolesContext = GrantRolesContext; -class CallContext extends StatementContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } +class LanguageContext extends antlr4.ParserRuleContext { - CALL() { - return this.getToken(SqlBaseParser.CALL, 0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_language; + } - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + SQL() { + return this.getToken(SqlBaseParser.SQL, 0); }; - callArgument = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(CallArgumentContext); - } else { - return this.getTypedRuleContext(CallArgumentContext,i); - } + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCall(this); + listener.enterLanguage(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCall(this); + listener.exitLanguage(this); } } } -SqlBaseParser.CallContext = CallContext; - -class RefreshMaterializedViewContext extends StatementContext { - - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } - - REFRESH() { - return this.getToken(SqlBaseParser.REFRESH, 0); - }; - MATERIALIZED() { - return this.getToken(SqlBaseParser.MATERIALIZED, 0); - }; - VIEW() { - return this.getToken(SqlBaseParser.VIEW, 0); - }; +class DeterminismContext extends antlr4.ParserRuleContext { - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_determinism; + } - WHERE() { - return this.getToken(SqlBaseParser.WHERE, 0); + DETERMINISTIC() { + return this.getToken(SqlBaseParser.DETERMINISTIC, 0); }; - booleanExpression() { - return this.getTypedRuleContext(BooleanExpressionContext,0); + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRefreshMaterializedView(this); + listener.enterDeterminism(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRefreshMaterializedView(this); + listener.exitDeterminism(this); } } } -SqlBaseParser.RefreshMaterializedViewContext = RefreshMaterializedViewContext; -class ShowCreateMaterializedViewContext extends StatementContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class NullCallClauseContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_nullCallClause; } - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); + RETURNS() { + return this.getToken(SqlBaseParser.RETURNS, 0); }; - CREATE() { - return this.getToken(SqlBaseParser.CREATE, 0); + NULL = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.NULL); + } else { + return this.getToken(SqlBaseParser.NULL, i); + } }; - MATERIALIZED() { - return this.getToken(SqlBaseParser.MATERIALIZED, 0); + + ON() { + return this.getToken(SqlBaseParser.ON, 0); }; - VIEW() { - return this.getToken(SqlBaseParser.VIEW, 0); + INPUT() { + return this.getToken(SqlBaseParser.INPUT, 0); }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + CALLED() { + return this.getToken(SqlBaseParser.CALLED, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowCreateMaterializedView(this); + listener.enterNullCallClause(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowCreateMaterializedView(this); + listener.exitNullCallClause(this); } } } -SqlBaseParser.ShowCreateMaterializedViewContext = ShowCreateMaterializedViewContext; - -class ShowFunctionsContext extends StatementContext { - - constructor(parser, ctx) { - super(parser); - this.pattern = null;; - this.escape = null;; - super.copyFrom(ctx); - } - - SHOW() { - return this.getToken(SqlBaseParser.SHOW, 0); - }; - FUNCTIONS() { - return this.getToken(SqlBaseParser.FUNCTIONS, 0); - }; - LIKE() { - return this.getToken(SqlBaseParser.LIKE, 0); - }; +class ExternalRoutineNameContext extends antlr4.ParserRuleContext { - string = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(StringContext); - } else { - return this.getTypedRuleContext(StringContext,i); - } - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_externalRoutineName; + } - ESCAPE() { - return this.getToken(SqlBaseParser.ESCAPE, 0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterShowFunctions(this); + listener.enterExternalRoutineName(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitShowFunctions(this); + listener.exitExternalRoutineName(this); } } } -SqlBaseParser.ShowFunctionsContext = ShowFunctionsContext; -class DescribeOutputContext extends StatementContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class ViewSecurityContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_viewSecurity; } - DESCRIBE() { - return this.getToken(SqlBaseParser.DESCRIBE, 0); + SECURITY() { + return this.getToken(SqlBaseParser.SECURITY, 0); }; - OUTPUT() { - return this.getToken(SqlBaseParser.OUTPUT, 0); + DEFINER() { + return this.getToken(SqlBaseParser.DEFINER, 0); }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + INVOKER() { + return this.getToken(SqlBaseParser.INVOKER, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDescribeOutput(this); + listener.enterViewSecurity(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDescribeOutput(this); + listener.exitViewSecurity(this); } } } -SqlBaseParser.DescribeOutputContext = DescribeOutputContext; -class GrantContext extends StatementContext { - constructor(parser, ctx) { - super(parser); - this.grantee = null;; - super.copyFrom(ctx); +class QueryNoWithContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_queryNoWith; + this.offset = null; + this.limit = null; + this.fetchFirstNRows = null; } - GRANT = function(i) { - if(i===undefined) { - i = null; - } + queryTerm() { + return this.getTypedRuleContext(QueryTermContext,0); + }; + + ORDER() { + return this.getToken(SqlBaseParser.ORDER, 0); + }; + + BY() { + return this.getToken(SqlBaseParser.BY, 0); + }; + + sortItem = function(i) { + if(i===undefined) { + i = null; + } if(i===null) { - return this.getTokens(SqlBaseParser.GRANT); + return this.getTypedRuleContexts(SortItemContext); } else { - return this.getToken(SqlBaseParser.GRANT, i); + return this.getTypedRuleContext(SortItemContext,i); } }; - - ON() { - return this.getToken(SqlBaseParser.ON, 0); + OFFSET() { + return this.getToken(SqlBaseParser.OFFSET, 0); }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + INTEGER_VALUE = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.INTEGER_VALUE); + } else { + return this.getToken(SqlBaseParser.INTEGER_VALUE, i); + } }; - TO() { - return this.getToken(SqlBaseParser.TO, 0); + + LIMIT() { + return this.getToken(SqlBaseParser.LIMIT, 0); }; - principal() { - return this.getTypedRuleContext(PrincipalContext,0); + ROW() { + return this.getToken(SqlBaseParser.ROW, 0); }; - privilege = function(i) { - if(i===undefined) { - i = null; - } + ROWS = function(i) { + if(i===undefined) { + i = null; + } if(i===null) { - return this.getTypedRuleContexts(PrivilegeContext); + return this.getTokens(SqlBaseParser.ROWS); } else { - return this.getTypedRuleContext(PrivilegeContext,i); + return this.getToken(SqlBaseParser.ROWS, i); } }; + ALL() { return this.getToken(SqlBaseParser.ALL, 0); }; - PRIVILEGES() { - return this.getToken(SqlBaseParser.PRIVILEGES, 0); - }; - - TABLE() { - return this.getToken(SqlBaseParser.TABLE, 0); + FETCH() { + return this.getToken(SqlBaseParser.FETCH, 0); }; - WITH() { - return this.getToken(SqlBaseParser.WITH, 0); + FIRST() { + return this.getToken(SqlBaseParser.FIRST, 0); }; - OPTION() { - return this.getToken(SqlBaseParser.OPTION, 0); + ONLY() { + return this.getToken(SqlBaseParser.ONLY, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterGrant(this); + listener.enterQueryNoWith(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitGrant(this); + listener.exitQueryNoWith(this); } } } -SqlBaseParser.GrantContext = GrantContext; -class QueryContext extends antlr4.ParserRuleContext { + +class QueryTermContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -12475,85 +15657,101 @@ class QueryContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_query; + this.ruleIndex = SqlBaseParser.RULE_queryTerm; } - queryNoWith() { - return this.getTypedRuleContext(QueryNoWithContext,0); - }; - with_() { - return this.getTypedRuleContext(WithContext,0); + + copyFrom(ctx) { + super.copyFrom(ctx); + } + +} + + +class QueryTermDefaultContext extends QueryTermContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + queryPrimary() { + return this.getTypedRuleContext(QueryPrimaryContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterQuery(this); + listener.enterQueryTermDefault(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitQuery(this); + listener.exitQueryTermDefault(this); } } } +SqlBaseParser.QueryTermDefaultContext = QueryTermDefaultContext; +class SetOperationContext extends QueryTermContext { -class WithContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_with; + constructor(parser, ctx) { + super(parser); + this.left = null;; + this.operator = null;; + this.right = null;; + super.copyFrom(ctx); } - WITH() { - return this.getToken(SqlBaseParser.WITH, 0); - }; - - namedQuery = function(i) { + queryTerm = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(NamedQueryContext); + return this.getTypedRuleContexts(QueryTermContext); } else { - return this.getTypedRuleContext(NamedQueryContext,i); + return this.getTypedRuleContext(QueryTermContext,i); } }; - RECURSIVE() { - return this.getToken(SqlBaseParser.RECURSIVE, 0); + INTERSECT() { + return this.getToken(SqlBaseParser.INTERSECT, 0); + }; + + setQuantifier() { + return this.getTypedRuleContext(SetQuantifierContext,0); + }; + + UNION() { + return this.getToken(SqlBaseParser.UNION, 0); + }; + + EXCEPT() { + return this.getToken(SqlBaseParser.EXCEPT, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterWith(this); + listener.enterSetOperation(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitWith(this); + listener.exitSetOperation(this); } } } +SqlBaseParser.SetOperationContext = SetOperationContext; - -class TableElementContext extends antlr4.ParserRuleContext { +class QueryPrimaryContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -12564,192 +15762,146 @@ class TableElementContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_tableElement; + this.ruleIndex = SqlBaseParser.RULE_queryPrimary; } - columnDefinition() { - return this.getTypedRuleContext(ColumnDefinitionContext,0); - }; - likeClause() { - return this.getTypedRuleContext(LikeClauseContext,0); + + copyFrom(ctx) { + super.copyFrom(ctx); + } + +} + + +class SubqueryContext extends QueryPrimaryContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + queryNoWith() { + return this.getTypedRuleContext(QueryNoWithContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterTableElement(this); + listener.enterSubquery(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitTableElement(this); + listener.exitSubquery(this); } } } +SqlBaseParser.SubqueryContext = SubqueryContext; +class QueryPrimaryDefaultContext extends QueryPrimaryContext { -class ColumnDefinitionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_columnDefinition; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - type() { - return this.getTypedRuleContext(TypeContext,0); - }; - - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); - }; - - NULL() { - return this.getToken(SqlBaseParser.NULL, 0); - }; - - COMMENT() { - return this.getToken(SqlBaseParser.COMMENT, 0); - }; - - string() { - return this.getTypedRuleContext(StringContext,0); - }; - - WITH() { - return this.getToken(SqlBaseParser.WITH, 0); - }; - - properties() { - return this.getTypedRuleContext(PropertiesContext,0); + querySpecification() { + return this.getTypedRuleContext(QuerySpecificationContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterColumnDefinition(this); + listener.enterQueryPrimaryDefault(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitColumnDefinition(this); + listener.exitQueryPrimaryDefault(this); } } } +SqlBaseParser.QueryPrimaryDefaultContext = QueryPrimaryDefaultContext; +class TableContext extends QueryPrimaryContext { -class LikeClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_likeClause; - this.optionType = null; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - LIKE() { - return this.getToken(SqlBaseParser.LIKE, 0); + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; qualifiedName() { return this.getTypedRuleContext(QualifiedNameContext,0); }; - PROPERTIES() { - return this.getToken(SqlBaseParser.PROPERTIES, 0); - }; - - INCLUDING() { - return this.getToken(SqlBaseParser.INCLUDING, 0); - }; - - EXCLUDING() { - return this.getToken(SqlBaseParser.EXCLUDING, 0); - }; - enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterLikeClause(this); + listener.enterTable(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitLikeClause(this); + listener.exitTable(this); } } } +SqlBaseParser.TableContext = TableContext; +class InlineTableContext extends QueryPrimaryContext { -class PropertiesContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_properties; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - property = function(i) { + VALUES() { + return this.getToken(SqlBaseParser.VALUES, 0); + }; + + expression = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(PropertyContext); + return this.getTypedRuleContexts(ExpressionContext); } else { - return this.getTypedRuleContext(PropertyContext,i); + return this.getTypedRuleContext(ExpressionContext,i); } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterProperties(this); + listener.enterInlineTable(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitProperties(this); + listener.exitInlineTable(this); } } } +SqlBaseParser.InlineTableContext = InlineTableContext; - -class PropertyContext extends antlr4.ParserRuleContext { +class SortItemContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -12760,30 +15912,44 @@ class PropertyContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_property; + this.ruleIndex = SqlBaseParser.RULE_sortItem; + this.ordering = null; + this.nullOrdering = null; } - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; - EQ() { - return this.getToken(SqlBaseParser.EQ, 0); + NULLS() { + return this.getToken(SqlBaseParser.NULLS, 0); }; - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + ASC() { + return this.getToken(SqlBaseParser.ASC, 0); + }; + + DESC() { + return this.getToken(SqlBaseParser.DESC, 0); + }; + + FIRST() { + return this.getToken(SqlBaseParser.FIRST, 0); + }; + + LAST() { + return this.getToken(SqlBaseParser.LAST, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterProperty(this); + listener.enterSortItem(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitProperty(this); + listener.exitSortItem(this); } } @@ -12792,37 +15958,96 @@ class PropertyContext extends antlr4.ParserRuleContext { -class SqlParameterDeclarationContext extends antlr4.ParserRuleContext { +class QuerySpecificationContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_querySpecification; + this.where = null; + this.having = null; + } + + SELECT() { + return this.getToken(SqlBaseParser.SELECT, 0); + }; + + selectItem = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(SelectItemContext); + } else { + return this.getTypedRuleContext(SelectItemContext,i); + } + }; + + setQuantifier() { + return this.getTypedRuleContext(SetQuantifierContext,0); + }; + + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); + }; + + relation = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(RelationContext); + } else { + return this.getTypedRuleContext(RelationContext,i); + } + }; + + WHERE() { + return this.getToken(SqlBaseParser.WHERE, 0); + }; + + GROUP() { + return this.getToken(SqlBaseParser.GROUP, 0); + }; + + BY() { + return this.getToken(SqlBaseParser.BY, 0); + }; - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_sqlParameterDeclaration; - } + groupBy() { + return this.getTypedRuleContext(GroupByContext,0); + }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + HAVING() { + return this.getToken(SqlBaseParser.HAVING, 0); }; - type() { - return this.getTypedRuleContext(TypeContext,0); + booleanExpression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(BooleanExpressionContext); + } else { + return this.getTypedRuleContext(BooleanExpressionContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSqlParameterDeclaration(this); + listener.enterQuerySpecification(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSqlParameterDeclaration(this); + listener.exitQuerySpecification(this); } } @@ -12831,7 +16056,7 @@ class SqlParameterDeclarationContext extends antlr4.ParserRuleContext { -class RoutineCharacteristicsContext extends antlr4.ParserRuleContext { +class GroupByContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -12842,29 +16067,33 @@ class RoutineCharacteristicsContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_routineCharacteristics; + this.ruleIndex = SqlBaseParser.RULE_groupBy; } - routineCharacteristic = function(i) { + groupingElement = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(RoutineCharacteristicContext); + return this.getTypedRuleContexts(GroupingElementContext); } else { - return this.getTypedRuleContext(RoutineCharacteristicContext,i); + return this.getTypedRuleContext(GroupingElementContext,i); } }; + setQuantifier() { + return this.getTypedRuleContext(SetQuantifierContext,0); + }; + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRoutineCharacteristics(this); + listener.enterGroupBy(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRoutineCharacteristics(this); + listener.exitGroupBy(this); } } @@ -12873,7 +16102,7 @@ class RoutineCharacteristicsContext extends antlr4.ParserRuleContext { -class RoutineCharacteristicContext extends antlr4.ParserRuleContext { +class GroupingElementContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -12884,198 +16113,168 @@ class RoutineCharacteristicContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_routineCharacteristic; + this.ruleIndex = SqlBaseParser.RULE_groupingElement; } - LANGUAGE() { - return this.getToken(SqlBaseParser.LANGUAGE, 0); - }; - - language() { - return this.getTypedRuleContext(LanguageContext,0); - }; - - determinism() { - return this.getTypedRuleContext(DeterminismContext,0); - }; - - nullCallClause() { - return this.getTypedRuleContext(NullCallClauseContext,0); - }; - - enterRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.enterRoutineCharacteristic(this); - } - } - exitRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.exitRoutineCharacteristic(this); + + copyFrom(ctx) { + super.copyFrom(ctx); } - } - } +class MultipleGroupingSetsContext extends GroupingElementContext { -class AlterRoutineCharacteristicsContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_alterRoutineCharacteristics; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - alterRoutineCharacteristic = function(i) { + GROUPING() { + return this.getToken(SqlBaseParser.GROUPING, 0); + }; + + SETS() { + return this.getToken(SqlBaseParser.SETS, 0); + }; + + groupingSet = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(AlterRoutineCharacteristicContext); + return this.getTypedRuleContexts(GroupingSetContext); } else { - return this.getTypedRuleContext(AlterRoutineCharacteristicContext,i); + return this.getTypedRuleContext(GroupingSetContext,i); } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterAlterRoutineCharacteristics(this); + listener.enterMultipleGroupingSets(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitAlterRoutineCharacteristics(this); + listener.exitMultipleGroupingSets(this); } } } +SqlBaseParser.MultipleGroupingSetsContext = MultipleGroupingSetsContext; +class SingleGroupingSetContext extends GroupingElementContext { -class AlterRoutineCharacteristicContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_alterRoutineCharacteristic; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - nullCallClause() { - return this.getTypedRuleContext(NullCallClauseContext,0); + groupingSet() { + return this.getTypedRuleContext(GroupingSetContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterAlterRoutineCharacteristic(this); + listener.enterSingleGroupingSet(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitAlterRoutineCharacteristic(this); + listener.exitSingleGroupingSet(this); } } } +SqlBaseParser.SingleGroupingSetContext = SingleGroupingSetContext; +class CubeContext extends GroupingElementContext { -class RoutineBodyContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_routineBody; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - returnStatement() { - return this.getTypedRuleContext(ReturnStatementContext,0); + CUBE() { + return this.getToken(SqlBaseParser.CUBE, 0); }; - externalBodyReference() { - return this.getTypedRuleContext(ExternalBodyReferenceContext,0); + expression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ExpressionContext); + } else { + return this.getTypedRuleContext(ExpressionContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRoutineBody(this); + listener.enterCube(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRoutineBody(this); + listener.exitCube(this); } } } +SqlBaseParser.CubeContext = CubeContext; +class RollupContext extends GroupingElementContext { -class ReturnStatementContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_returnStatement; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - RETURN() { - return this.getToken(SqlBaseParser.RETURN, 0); + ROLLUP() { + return this.getToken(SqlBaseParser.ROLLUP, 0); }; - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + expression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ExpressionContext); + } else { + return this.getTypedRuleContext(ExpressionContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterReturnStatement(this); + listener.enterRollup(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitReturnStatement(this); + listener.exitRollup(this); } } } +SqlBaseParser.RollupContext = RollupContext; - -class ExternalBodyReferenceContext extends antlr4.ParserRuleContext { +class GroupingSetContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -13086,30 +16285,29 @@ class ExternalBodyReferenceContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_externalBodyReference; + this.ruleIndex = SqlBaseParser.RULE_groupingSet; } - EXTERNAL() { - return this.getToken(SqlBaseParser.EXTERNAL, 0); - }; - - NAME() { - return this.getToken(SqlBaseParser.NAME, 0); - }; - - externalRoutineName() { - return this.getTypedRuleContext(ExternalRoutineNameContext,0); + expression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ExpressionContext); + } else { + return this.getTypedRuleContext(ExpressionContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterExternalBodyReference(this); + listener.enterGroupingSet(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitExternalBodyReference(this); + listener.exitGroupingSet(this); } } @@ -13118,7 +16316,7 @@ class ExternalBodyReferenceContext extends antlr4.ParserRuleContext { -class LanguageContext extends antlr4.ParserRuleContext { +class NamedQueryContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -13129,26 +16327,35 @@ class LanguageContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_language; + this.ruleIndex = SqlBaseParser.RULE_namedQuery; + this.name = null; } - SQL() { - return this.getToken(SqlBaseParser.SQL, 0); + AS() { + return this.getToken(SqlBaseParser.AS, 0); + }; + + query() { + return this.getTypedRuleContext(QueryContext,0); }; identifier() { return this.getTypedRuleContext(IdentifierContext,0); }; + columnAliases() { + return this.getTypedRuleContext(ColumnAliasesContext,0); + }; + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterLanguage(this); + listener.enterNamedQuery(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitLanguage(this); + listener.exitNamedQuery(this); } } @@ -13157,7 +16364,7 @@ class LanguageContext extends antlr4.ParserRuleContext { -class DeterminismContext extends antlr4.ParserRuleContext { +class SetQuantifierContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -13168,26 +16375,26 @@ class DeterminismContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_determinism; + this.ruleIndex = SqlBaseParser.RULE_setQuantifier; } - DETERMINISTIC() { - return this.getToken(SqlBaseParser.DETERMINISTIC, 0); + DISTINCT() { + return this.getToken(SqlBaseParser.DISTINCT, 0); }; - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); + ALL() { + return this.getToken(SqlBaseParser.ALL, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDeterminism(this); + listener.enterSetQuantifier(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDeterminism(this); + listener.exitSetQuantifier(this); } } @@ -13196,7 +16403,7 @@ class DeterminismContext extends antlr4.ParserRuleContext { -class NullCallClauseContext extends antlr4.ParserRuleContext { +class SelectItemContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -13207,90 +16414,87 @@ class NullCallClauseContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_nullCallClause; + this.ruleIndex = SqlBaseParser.RULE_selectItem; } - RETURNS() { - return this.getToken(SqlBaseParser.RETURNS, 0); - }; - NULL = function(i) { - if(i===undefined) { - i = null; + + copyFrom(ctx) { + super.copyFrom(ctx); } - if(i===null) { - return this.getTokens(SqlBaseParser.NULL); - } else { - return this.getToken(SqlBaseParser.NULL, i); - } - }; +} - ON() { - return this.getToken(SqlBaseParser.ON, 0); - }; - INPUT() { - return this.getToken(SqlBaseParser.INPUT, 0); +class SelectAllContext extends SelectItemContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; - CALLED() { - return this.getToken(SqlBaseParser.CALLED, 0); + ASTERISK() { + return this.getToken(SqlBaseParser.ASTERISK, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterNullCallClause(this); + listener.enterSelectAll(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitNullCallClause(this); + listener.exitSelectAll(this); } } } +SqlBaseParser.SelectAllContext = SelectAllContext; +class SelectSingleContext extends SelectItemContext { -class ExternalRoutineNameContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_externalRoutineName; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } + expression() { + return this.getTypedRuleContext(ExpressionContext,0); + }; + identifier() { return this.getTypedRuleContext(IdentifierContext,0); }; + AS() { + return this.getToken(SqlBaseParser.AS, 0); + }; + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterExternalRoutineName(this); + listener.enterSelectSingle(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitExternalRoutineName(this); + listener.exitSelectSingle(this); } } } +SqlBaseParser.SelectSingleContext = SelectSingleContext; - -class QueryNoWithContext extends antlr4.ParserRuleContext { +class RelationContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -13301,105 +16505,109 @@ class QueryNoWithContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_queryNoWith; - this.offset = null; - this.limit = null; - this.fetchFirstNRows = null; + this.ruleIndex = SqlBaseParser.RULE_relation; } - queryTerm() { - return this.getTypedRuleContext(QueryTermContext,0); - }; - ORDER() { - return this.getToken(SqlBaseParser.ORDER, 0); - }; + + copyFrom(ctx) { + super.copyFrom(ctx); + } - BY() { - return this.getToken(SqlBaseParser.BY, 0); - }; +} - sortItem = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(SortItemContext); - } else { - return this.getTypedRuleContext(SortItemContext,i); - } - }; - OFFSET() { - return this.getToken(SqlBaseParser.OFFSET, 0); +class RelationDefaultContext extends RelationContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + sampledRelation() { + return this.getTypedRuleContext(SampledRelationContext,0); }; - INTEGER_VALUE = function(i) { - if(i===undefined) { - i = null; + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterRelationDefault(this); } - if(i===null) { - return this.getTokens(SqlBaseParser.INTEGER_VALUE); - } else { - return this.getToken(SqlBaseParser.INTEGER_VALUE, i); - } - }; + } + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitRelationDefault(this); + } + } - LIMIT() { - return this.getToken(SqlBaseParser.LIMIT, 0); - }; - ROW() { - return this.getToken(SqlBaseParser.ROW, 0); - }; +} - ROWS = function(i) { - if(i===undefined) { - i = null; - } +SqlBaseParser.RelationDefaultContext = RelationDefaultContext; + +class JoinRelationContext extends RelationContext { + + constructor(parser, ctx) { + super(parser); + this.left = null;; + this.right = null;; + this.rightRelation = null;; + super.copyFrom(ctx); + } + + relation = function(i) { + if(i===undefined) { + i = null; + } if(i===null) { - return this.getTokens(SqlBaseParser.ROWS); + return this.getTypedRuleContexts(RelationContext); } else { - return this.getToken(SqlBaseParser.ROWS, i); + return this.getTypedRuleContext(RelationContext,i); } }; + CROSS() { + return this.getToken(SqlBaseParser.CROSS, 0); + }; - ALL() { - return this.getToken(SqlBaseParser.ALL, 0); + JOIN() { + return this.getToken(SqlBaseParser.JOIN, 0); }; - FETCH() { - return this.getToken(SqlBaseParser.FETCH, 0); + joinType() { + return this.getTypedRuleContext(JoinTypeContext,0); }; - FIRST() { - return this.getToken(SqlBaseParser.FIRST, 0); + joinCriteria() { + return this.getTypedRuleContext(JoinCriteriaContext,0); }; - ONLY() { - return this.getToken(SqlBaseParser.ONLY, 0); + NATURAL() { + return this.getToken(SqlBaseParser.NATURAL, 0); + }; + + sampledRelation() { + return this.getTypedRuleContext(SampledRelationContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterQueryNoWith(this); + listener.enterJoinRelation(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitQueryNoWith(this); + listener.exitJoinRelation(this); } } } +SqlBaseParser.JoinRelationContext = JoinRelationContext; - -class QueryTermContext extends antlr4.ParserRuleContext { +class JoinTypeContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -13410,101 +16618,101 @@ class QueryTermContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_queryTerm; + this.ruleIndex = SqlBaseParser.RULE_joinType; } + INNER() { + return this.getToken(SqlBaseParser.INNER, 0); + }; - - copyFrom(ctx) { - super.copyFrom(ctx); - } - -} - + LEFT() { + return this.getToken(SqlBaseParser.LEFT, 0); + }; -class QueryTermDefaultContext extends QueryTermContext { + OUTER() { + return this.getToken(SqlBaseParser.OUTER, 0); + }; - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } + RIGHT() { + return this.getToken(SqlBaseParser.RIGHT, 0); + }; - queryPrimary() { - return this.getTypedRuleContext(QueryPrimaryContext,0); + FULL() { + return this.getToken(SqlBaseParser.FULL, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterQueryTermDefault(this); + listener.enterJoinType(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitQueryTermDefault(this); + listener.exitJoinType(this); } } } -SqlBaseParser.QueryTermDefaultContext = QueryTermDefaultContext; -class SetOperationContext extends QueryTermContext { - constructor(parser, ctx) { - super(parser); - this.left = null;; - this.operator = null;; - this.right = null;; - super.copyFrom(ctx); - } +class JoinCriteriaContext extends antlr4.ParserRuleContext { - queryTerm = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(QueryTermContext); - } else { - return this.getTypedRuleContext(QueryTermContext,i); - } - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_joinCriteria; + } - INTERSECT() { - return this.getToken(SqlBaseParser.INTERSECT, 0); + ON() { + return this.getToken(SqlBaseParser.ON, 0); }; - setQuantifier() { - return this.getTypedRuleContext(SetQuantifierContext,0); + booleanExpression() { + return this.getTypedRuleContext(BooleanExpressionContext,0); }; - UNION() { - return this.getToken(SqlBaseParser.UNION, 0); + USING() { + return this.getToken(SqlBaseParser.USING, 0); }; - EXCEPT() { - return this.getToken(SqlBaseParser.EXCEPT, 0); + identifier = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(IdentifierContext); + } else { + return this.getTypedRuleContext(IdentifierContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSetOperation(this); + listener.enterJoinCriteria(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSetOperation(this); + listener.exitJoinCriteria(this); } } } -SqlBaseParser.SetOperationContext = SetOperationContext; -class QueryPrimaryContext extends antlr4.ParserRuleContext { + +class SampledRelationContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -13515,146 +16723,172 @@ class QueryPrimaryContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_queryPrimary; + this.ruleIndex = SqlBaseParser.RULE_sampledRelation; + this.percentage = null; } + aliasedRelation() { + return this.getTypedRuleContext(AliasedRelationContext,0); + }; - - copyFrom(ctx) { - super.copyFrom(ctx); - } - -} - - -class SubqueryContext extends QueryPrimaryContext { + TABLESAMPLE() { + return this.getToken(SqlBaseParser.TABLESAMPLE, 0); + }; - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } + sampleType() { + return this.getTypedRuleContext(SampleTypeContext,0); + }; - queryNoWith() { - return this.getTypedRuleContext(QueryNoWithContext,0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSubquery(this); + listener.enterSampledRelation(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSubquery(this); + listener.exitSampledRelation(this); } } } -SqlBaseParser.SubqueryContext = SubqueryContext; -class QueryPrimaryDefaultContext extends QueryPrimaryContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class SampleTypeContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_sampleType; } - querySpecification() { - return this.getTypedRuleContext(QuerySpecificationContext,0); + BERNOULLI() { + return this.getToken(SqlBaseParser.BERNOULLI, 0); + }; + + SYSTEM() { + return this.getToken(SqlBaseParser.SYSTEM, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterQueryPrimaryDefault(this); + listener.enterSampleType(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitQueryPrimaryDefault(this); + listener.exitSampleType(this); } } } -SqlBaseParser.QueryPrimaryDefaultContext = QueryPrimaryDefaultContext; -class TableContext extends QueryPrimaryContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class AliasedRelationContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_aliasedRelation; } - TABLE() { - return this.getToken(SqlBaseParser.TABLE, 0); + relationPrimary() { + return this.getTypedRuleContext(RelationPrimaryContext,0); }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + AS() { + return this.getToken(SqlBaseParser.AS, 0); + }; + + columnAliases() { + return this.getTypedRuleContext(ColumnAliasesContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterTable(this); + listener.enterAliasedRelation(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitTable(this); + listener.exitAliasedRelation(this); } } } -SqlBaseParser.TableContext = TableContext; -class InlineTableContext extends QueryPrimaryContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } +class ColumnAliasesContext extends antlr4.ParserRuleContext { - VALUES() { - return this.getToken(SqlBaseParser.VALUES, 0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_columnAliases; + } - expression = function(i) { + identifier = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(ExpressionContext); + return this.getTypedRuleContexts(IdentifierContext); } else { - return this.getTypedRuleContext(ExpressionContext,i); + return this.getTypedRuleContext(IdentifierContext,i); } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterInlineTable(this); + listener.enterColumnAliases(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitInlineTable(this); + listener.exitColumnAliases(this); } } } -SqlBaseParser.InlineTableContext = InlineTableContext; -class SortItemContext extends antlr4.ParserRuleContext { + +class RelationPrimaryContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -13665,413 +16899,389 @@ class SortItemContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_sortItem; - this.ordering = null; - this.nullOrdering = null; + this.ruleIndex = SqlBaseParser.RULE_relationPrimary; } - expression() { - return this.getTypedRuleContext(ExpressionContext,0); - }; - NULLS() { - return this.getToken(SqlBaseParser.NULLS, 0); - }; + + copyFrom(ctx) { + super.copyFrom(ctx); + } - ASC() { - return this.getToken(SqlBaseParser.ASC, 0); - }; +} - DESC() { - return this.getToken(SqlBaseParser.DESC, 0); - }; - FIRST() { - return this.getToken(SqlBaseParser.FIRST, 0); +class SubqueryRelationContext extends RelationPrimaryContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + query() { + return this.getTypedRuleContext(QueryContext,0); }; - LAST() { - return this.getToken(SqlBaseParser.LAST, 0); + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterSubqueryRelation(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitSubqueryRelation(this); + } + } + + +} + +SqlBaseParser.SubqueryRelationContext = SubqueryRelationContext; + +class ParenthesizedRelationContext extends RelationPrimaryContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + relation() { + return this.getTypedRuleContext(RelationContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSortItem(this); + listener.enterParenthesizedRelation(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSortItem(this); + listener.exitParenthesizedRelation(this); } } } +SqlBaseParser.ParenthesizedRelationContext = ParenthesizedRelationContext; +class UnnestContext extends RelationPrimaryContext { -class QuerySpecificationContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_querySpecification; - this.where = null; - this.having = null; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - SELECT() { - return this.getToken(SqlBaseParser.SELECT, 0); - }; - - selectItem = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(SelectItemContext); - } else { - return this.getTypedRuleContext(SelectItemContext,i); - } - }; - - setQuantifier() { - return this.getTypedRuleContext(SetQuantifierContext,0); - }; - - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); + UNNEST() { + return this.getToken(SqlBaseParser.UNNEST, 0); }; - relation = function(i) { + expression = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(RelationContext); + return this.getTypedRuleContexts(ExpressionContext); } else { - return this.getTypedRuleContext(RelationContext,i); + return this.getTypedRuleContext(ExpressionContext,i); } }; - WHERE() { - return this.getToken(SqlBaseParser.WHERE, 0); - }; - - GROUP() { - return this.getToken(SqlBaseParser.GROUP, 0); - }; - - BY() { - return this.getToken(SqlBaseParser.BY, 0); - }; - - groupBy() { - return this.getTypedRuleContext(GroupByContext,0); - }; - - HAVING() { - return this.getToken(SqlBaseParser.HAVING, 0); + WITH() { + return this.getToken(SqlBaseParser.WITH, 0); }; - booleanExpression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(BooleanExpressionContext); - } else { - return this.getTypedRuleContext(BooleanExpressionContext,i); - } + ORDINALITY() { + return this.getToken(SqlBaseParser.ORDINALITY, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterQuerySpecification(this); + listener.enterUnnest(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitQuerySpecification(this); + listener.exitUnnest(this); } } } +SqlBaseParser.UnnestContext = UnnestContext; +class TableFunctionInvocationContext extends RelationPrimaryContext { -class GroupByContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_groupBy; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - groupingElement = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(GroupingElementContext); - } else { - return this.getTypedRuleContext(GroupingElementContext,i); - } + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; - setQuantifier() { - return this.getTypedRuleContext(SetQuantifierContext,0); + tableFunctionCall() { + return this.getTypedRuleContext(TableFunctionCallContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterGroupBy(this); + listener.enterTableFunctionInvocation(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitGroupBy(this); + listener.exitTableFunctionInvocation(this); } } } +SqlBaseParser.TableFunctionInvocationContext = TableFunctionInvocationContext; +class LateralContext extends RelationPrimaryContext { -class GroupingElementContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_groupingElement; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } + LATERAL() { + return this.getToken(SqlBaseParser.LATERAL, 0); + }; - - copyFrom(ctx) { - super.copyFrom(ctx); + query() { + return this.getTypedRuleContext(QueryContext,0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterLateral(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitLateral(this); } + } + } +SqlBaseParser.LateralContext = LateralContext; -class MultipleGroupingSetsContext extends GroupingElementContext { +class TableNameContext extends RelationPrimaryContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - GROUPING() { - return this.getToken(SqlBaseParser.GROUPING, 0); - }; - - SETS() { - return this.getToken(SqlBaseParser.SETS, 0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; - groupingSet = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(GroupingSetContext); - } else { - return this.getTypedRuleContext(GroupingSetContext,i); - } + tableVersionExpression() { + return this.getTypedRuleContext(TableVersionExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterMultipleGroupingSets(this); + listener.enterTableName(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitMultipleGroupingSets(this); + listener.exitTableName(this); } } } -SqlBaseParser.MultipleGroupingSetsContext = MultipleGroupingSetsContext; +SqlBaseParser.TableNameContext = TableNameContext; -class SingleGroupingSetContext extends GroupingElementContext { +class ExpressionContext extends antlr4.ParserRuleContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_expression; } - groupingSet() { - return this.getTypedRuleContext(GroupingSetContext,0); + booleanExpression() { + return this.getTypedRuleContext(BooleanExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSingleGroupingSet(this); + listener.enterExpression(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSingleGroupingSet(this); + listener.exitExpression(this); } } } -SqlBaseParser.SingleGroupingSetContext = SingleGroupingSetContext; -class CubeContext extends GroupingElementContext { + +class BooleanExpressionContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_booleanExpression; + } + + + + copyFrom(ctx) { + super.copyFrom(ctx); + } + +} + + +class LogicalNotContext extends BooleanExpressionContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - CUBE() { - return this.getToken(SqlBaseParser.CUBE, 0); + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); }; - expression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExpressionContext); - } else { - return this.getTypedRuleContext(ExpressionContext,i); - } + booleanExpression() { + return this.getTypedRuleContext(BooleanExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCube(this); + listener.enterLogicalNot(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCube(this); + listener.exitLogicalNot(this); } } } -SqlBaseParser.CubeContext = CubeContext; +SqlBaseParser.LogicalNotContext = LogicalNotContext; -class RollupContext extends GroupingElementContext { +class PredicatedContext extends BooleanExpressionContext { constructor(parser, ctx) { super(parser); + this._valueExpression = null;; super.copyFrom(ctx); } - ROLLUP() { - return this.getToken(SqlBaseParser.ROLLUP, 0); + valueExpression() { + return this.getTypedRuleContext(ValueExpressionContext,0); }; - expression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExpressionContext); - } else { - return this.getTypedRuleContext(ExpressionContext,i); - } + predicate() { + return this.getTypedRuleContext(PredicateContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRollup(this); + listener.enterPredicated(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRollup(this); + listener.exitPredicated(this); } } } -SqlBaseParser.RollupContext = RollupContext; +SqlBaseParser.PredicatedContext = PredicatedContext; -class GroupingSetContext extends antlr4.ParserRuleContext { +class LogicalBinaryContext extends BooleanExpressionContext { - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_groupingSet; + constructor(parser, ctx) { + super(parser); + this.left = null;; + this.operator = null;; + this.right = null;; + super.copyFrom(ctx); } - expression = function(i) { + booleanExpression = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(ExpressionContext); + return this.getTypedRuleContexts(BooleanExpressionContext); } else { - return this.getTypedRuleContext(ExpressionContext,i); + return this.getTypedRuleContext(BooleanExpressionContext,i); } }; + AND() { + return this.getToken(SqlBaseParser.AND, 0); + }; + + OR() { + return this.getToken(SqlBaseParser.OR, 0); + }; + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterGroupingSet(this); + listener.enterLogicalBinary(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitGroupingSet(this); + listener.exitLogicalBinary(this); } } } +SqlBaseParser.LogicalBinaryContext = LogicalBinaryContext; +class PredicateContext extends antlr4.ParserRuleContext { -class NamedQueryContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { + constructor(parser, parent, invokingState, value) { if(parent===undefined) { parent = null; } @@ -14080,338 +17290,349 @@ class NamedQueryContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_namedQuery; - this.name = null; + this.ruleIndex = SqlBaseParser.RULE_predicate; + this.value = null + this.value = value || null; } - AS() { - return this.getToken(SqlBaseParser.AS, 0); - }; - query() { - return this.getTypedRuleContext(QueryContext,0); - }; + + copyFrom(ctx) { + super.copyFrom(ctx); + this.value = ctx.value; + } - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); +} + + +class ComparisonContext extends PredicateContext { + + constructor(parser, ctx) { + super(parser); + this.right = null;; + super.copyFrom(ctx); + } + + comparisonOperator() { + return this.getTypedRuleContext(ComparisonOperatorContext,0); }; - columnAliases() { - return this.getTypedRuleContext(ColumnAliasesContext,0); + valueExpression() { + return this.getTypedRuleContext(ValueExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterNamedQuery(this); + listener.enterComparison(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitNamedQuery(this); + listener.exitComparison(this); } } } +SqlBaseParser.ComparisonContext = ComparisonContext; +class LikeContext extends PredicateContext { -class SetQuantifierContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_setQuantifier; + constructor(parser, ctx) { + super(parser); + this.pattern = null;; + this.escape = null;; + super.copyFrom(ctx); } - DISTINCT() { - return this.getToken(SqlBaseParser.DISTINCT, 0); + LIKE() { + return this.getToken(SqlBaseParser.LIKE, 0); }; - ALL() { - return this.getToken(SqlBaseParser.ALL, 0); + valueExpression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ValueExpressionContext); + } else { + return this.getTypedRuleContext(ValueExpressionContext,i); + } + }; + + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); + }; + + ESCAPE() { + return this.getToken(SqlBaseParser.ESCAPE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSetQuantifier(this); + listener.enterLike(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSetQuantifier(this); + listener.exitLike(this); } } } +SqlBaseParser.LikeContext = LikeContext; - -class SelectItemContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_selectItem; - } - - - - copyFrom(ctx) { - super.copyFrom(ctx); - } - -} - - -class SelectAllContext extends SelectItemContext { +class InSubqueryContext extends PredicateContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + IN() { + return this.getToken(SqlBaseParser.IN, 0); }; - ASTERISK() { - return this.getToken(SqlBaseParser.ASTERISK, 0); + query() { + return this.getTypedRuleContext(QueryContext,0); + }; + + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSelectAll(this); + listener.enterInSubquery(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSelectAll(this); + listener.exitInSubquery(this); } } } -SqlBaseParser.SelectAllContext = SelectAllContext; +SqlBaseParser.InSubqueryContext = InSubqueryContext; -class SelectSingleContext extends SelectItemContext { +class DistinctFromContext extends PredicateContext { constructor(parser, ctx) { super(parser); + this.right = null;; super.copyFrom(ctx); } - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + IS() { + return this.getToken(SqlBaseParser.IS, 0); }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + DISTINCT() { + return this.getToken(SqlBaseParser.DISTINCT, 0); }; - AS() { - return this.getToken(SqlBaseParser.AS, 0); + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); + }; + + valueExpression() { + return this.getTypedRuleContext(ValueExpressionContext,0); + }; + + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSelectSingle(this); + listener.enterDistinctFrom(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSelectSingle(this); + listener.exitDistinctFrom(this); } } } -SqlBaseParser.SelectSingleContext = SelectSingleContext; +SqlBaseParser.DistinctFromContext = DistinctFromContext; -class RelationContext extends antlr4.ParserRuleContext { +class InListContext extends PredicateContext { - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_relation; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } + IN() { + return this.getToken(SqlBaseParser.IN, 0); + }; + + expression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ExpressionContext); + } else { + return this.getTypedRuleContext(ExpressionContext,i); + } + }; + + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); + }; - - copyFrom(ctx) { - super.copyFrom(ctx); + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterInList(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitInList(this); } + } + } +SqlBaseParser.InListContext = InListContext; -class RelationDefaultContext extends RelationContext { +class NullPredicateContext extends PredicateContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - sampledRelation() { - return this.getTypedRuleContext(SampledRelationContext,0); + IS() { + return this.getToken(SqlBaseParser.IS, 0); + }; + + NULL() { + return this.getToken(SqlBaseParser.NULL, 0); + }; + + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRelationDefault(this); + listener.enterNullPredicate(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRelationDefault(this); + listener.exitNullPredicate(this); } } } -SqlBaseParser.RelationDefaultContext = RelationDefaultContext; +SqlBaseParser.NullPredicateContext = NullPredicateContext; -class JoinRelationContext extends RelationContext { +class BetweenContext extends PredicateContext { constructor(parser, ctx) { super(parser); - this.left = null;; - this.right = null;; - this.rightRelation = null;; + this.lower = null;; + this.upper = null;; super.copyFrom(ctx); } - relation = function(i) { + BETWEEN() { + return this.getToken(SqlBaseParser.BETWEEN, 0); + }; + + AND() { + return this.getToken(SqlBaseParser.AND, 0); + }; + + valueExpression = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(RelationContext); + return this.getTypedRuleContexts(ValueExpressionContext); } else { - return this.getTypedRuleContext(RelationContext,i); + return this.getTypedRuleContext(ValueExpressionContext,i); } }; - CROSS() { - return this.getToken(SqlBaseParser.CROSS, 0); - }; - - JOIN() { - return this.getToken(SqlBaseParser.JOIN, 0); - }; - - joinType() { - return this.getTypedRuleContext(JoinTypeContext,0); - }; - - joinCriteria() { - return this.getTypedRuleContext(JoinCriteriaContext,0); - }; - - NATURAL() { - return this.getToken(SqlBaseParser.NATURAL, 0); - }; - - sampledRelation() { - return this.getTypedRuleContext(SampledRelationContext,0); + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterJoinRelation(this); + listener.enterBetween(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitJoinRelation(this); + listener.exitBetween(this); } } } -SqlBaseParser.JoinRelationContext = JoinRelationContext; +SqlBaseParser.BetweenContext = BetweenContext; -class JoinTypeContext extends antlr4.ParserRuleContext { +class QuantifiedComparisonContext extends PredicateContext { - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_joinType; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - INNER() { - return this.getToken(SqlBaseParser.INNER, 0); - }; - - LEFT() { - return this.getToken(SqlBaseParser.LEFT, 0); - }; - - OUTER() { - return this.getToken(SqlBaseParser.OUTER, 0); + comparisonOperator() { + return this.getTypedRuleContext(ComparisonOperatorContext,0); }; - RIGHT() { - return this.getToken(SqlBaseParser.RIGHT, 0); + comparisonQuantifier() { + return this.getTypedRuleContext(ComparisonQuantifierContext,0); }; - FULL() { - return this.getToken(SqlBaseParser.FULL, 0); + query() { + return this.getTypedRuleContext(QueryContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterJoinType(this); + listener.enterQuantifiedComparison(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitJoinType(this); + listener.exitQuantifiedComparison(this); } } } +SqlBaseParser.QuantifiedComparisonContext = QuantifiedComparisonContext; - -class JoinCriteriaContext extends antlr4.ParserRuleContext { +class ValueExpressionContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -14422,226 +17643,219 @@ class JoinCriteriaContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_joinCriteria; + this.ruleIndex = SqlBaseParser.RULE_valueExpression; } - ON() { - return this.getToken(SqlBaseParser.ON, 0); - }; - booleanExpression() { - return this.getTypedRuleContext(BooleanExpressionContext,0); - }; + + copyFrom(ctx) { + super.copyFrom(ctx); + } - USING() { - return this.getToken(SqlBaseParser.USING, 0); - }; +} - identifier = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(IdentifierContext); - } else { - return this.getTypedRuleContext(IdentifierContext,i); - } + +class ValueExpressionDefaultContext extends ValueExpressionContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + primaryExpression() { + return this.getTypedRuleContext(PrimaryExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterJoinCriteria(this); + listener.enterValueExpressionDefault(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitJoinCriteria(this); + listener.exitValueExpressionDefault(this); } } } +SqlBaseParser.ValueExpressionDefaultContext = ValueExpressionDefaultContext; +class ConcatenationContext extends ValueExpressionContext { -class SampledRelationContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_sampledRelation; - this.percentage = null; + constructor(parser, ctx) { + super(parser); + this.left = null;; + this.right = null;; + super.copyFrom(ctx); } - aliasedRelation() { - return this.getTypedRuleContext(AliasedRelationContext,0); - }; - - TABLESAMPLE() { - return this.getToken(SqlBaseParser.TABLESAMPLE, 0); - }; - - sampleType() { - return this.getTypedRuleContext(SampleTypeContext,0); + CONCAT() { + return this.getToken(SqlBaseParser.CONCAT, 0); }; - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + valueExpression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ValueExpressionContext); + } else { + return this.getTypedRuleContext(ValueExpressionContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSampledRelation(this); + listener.enterConcatenation(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSampledRelation(this); + listener.exitConcatenation(this); } } } +SqlBaseParser.ConcatenationContext = ConcatenationContext; +class ArithmeticBinaryContext extends ValueExpressionContext { -class SampleTypeContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_sampleType; + constructor(parser, ctx) { + super(parser); + this.left = null;; + this.operator = null;; + this.right = null;; + super.copyFrom(ctx); } - BERNOULLI() { - return this.getToken(SqlBaseParser.BERNOULLI, 0); + valueExpression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ValueExpressionContext); + } else { + return this.getTypedRuleContext(ValueExpressionContext,i); + } + }; + + ASTERISK() { + return this.getToken(SqlBaseParser.ASTERISK, 0); + }; + + SLASH() { + return this.getToken(SqlBaseParser.SLASH, 0); }; - SYSTEM() { - return this.getToken(SqlBaseParser.SYSTEM, 0); + PERCENT() { + return this.getToken(SqlBaseParser.PERCENT, 0); + }; + + PLUS() { + return this.getToken(SqlBaseParser.PLUS, 0); + }; + + MINUS() { + return this.getToken(SqlBaseParser.MINUS, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSampleType(this); + listener.enterArithmeticBinary(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSampleType(this); + listener.exitArithmeticBinary(this); } } } +SqlBaseParser.ArithmeticBinaryContext = ArithmeticBinaryContext; +class ArithmeticUnaryContext extends ValueExpressionContext { -class AliasedRelationContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_aliasedRelation; + constructor(parser, ctx) { + super(parser); + this.operator = null;; + super.copyFrom(ctx); } - relationPrimary() { - return this.getTypedRuleContext(RelationPrimaryContext,0); - }; - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + valueExpression() { + return this.getTypedRuleContext(ValueExpressionContext,0); }; - AS() { - return this.getToken(SqlBaseParser.AS, 0); + MINUS() { + return this.getToken(SqlBaseParser.MINUS, 0); }; - columnAliases() { - return this.getTypedRuleContext(ColumnAliasesContext,0); + PLUS() { + return this.getToken(SqlBaseParser.PLUS, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterAliasedRelation(this); + listener.enterArithmeticUnary(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitAliasedRelation(this); + listener.exitArithmeticUnary(this); } } } +SqlBaseParser.ArithmeticUnaryContext = ArithmeticUnaryContext; +class AtTimeZoneContext extends ValueExpressionContext { -class ColumnAliasesContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_columnAliases; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - identifier = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(IdentifierContext); - } else { - return this.getTypedRuleContext(IdentifierContext,i); - } + valueExpression() { + return this.getTypedRuleContext(ValueExpressionContext,0); + }; + + AT() { + return this.getToken(SqlBaseParser.AT, 0); + }; + + timeZoneSpecifier() { + return this.getTypedRuleContext(TimeZoneSpecifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterColumnAliases(this); + listener.enterAtTimeZone(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitColumnAliases(this); + listener.exitAtTimeZone(this); } } } +SqlBaseParser.AtTimeZoneContext = AtTimeZoneContext; - -class RelationPrimaryContext extends antlr4.ParserRuleContext { +class PrimaryExpressionContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -14652,7 +17866,7 @@ class RelationPrimaryContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_relationPrimary; + this.ruleIndex = SqlBaseParser.RULE_primaryExpression; } @@ -14664,542 +17878,548 @@ class RelationPrimaryContext extends antlr4.ParserRuleContext { } -class SubqueryRelationContext extends RelationPrimaryContext { +class DereferenceContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); + this.base = null;; + this.fieldName = null;; super.copyFrom(ctx); } - query() { - return this.getTypedRuleContext(QueryContext,0); + primaryExpression() { + return this.getTypedRuleContext(PrimaryExpressionContext,0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSubqueryRelation(this); + listener.enterDereference(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSubqueryRelation(this); + listener.exitDereference(this); } } } -SqlBaseParser.SubqueryRelationContext = SubqueryRelationContext; +SqlBaseParser.DereferenceContext = DereferenceContext; -class ParenthesizedRelationContext extends RelationPrimaryContext { +class TypeConstructorContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - relation() { - return this.getTypedRuleContext(RelationContext,0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + string() { + return this.getTypedRuleContext(StringContext,0); + }; + + DOUBLE_PRECISION() { + return this.getToken(SqlBaseParser.DOUBLE_PRECISION, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterParenthesizedRelation(this); + listener.enterTypeConstructor(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitParenthesizedRelation(this); + listener.exitTypeConstructor(this); } } } -SqlBaseParser.ParenthesizedRelationContext = ParenthesizedRelationContext; +SqlBaseParser.TypeConstructorContext = TypeConstructorContext; -class UnnestContext extends RelationPrimaryContext { +class SpecialDateTimeFunctionContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); + this.name = null;; + this.precision = null;; super.copyFrom(ctx); } - UNNEST() { - return this.getToken(SqlBaseParser.UNNEST, 0); + CURRENT_DATE() { + return this.getToken(SqlBaseParser.CURRENT_DATE, 0); }; - expression = function(i) { + CURRENT_TIME() { + return this.getToken(SqlBaseParser.CURRENT_TIME, 0); + }; + + INTEGER_VALUE() { + return this.getToken(SqlBaseParser.INTEGER_VALUE, 0); + }; + + CURRENT_TIMESTAMP() { + return this.getToken(SqlBaseParser.CURRENT_TIMESTAMP, 0); + }; + + LOCALTIME() { + return this.getToken(SqlBaseParser.LOCALTIME, 0); + }; + + LOCALTIMESTAMP() { + return this.getToken(SqlBaseParser.LOCALTIMESTAMP, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterSpecialDateTimeFunction(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitSpecialDateTimeFunction(this); + } + } + + +} + +SqlBaseParser.SpecialDateTimeFunctionContext = SpecialDateTimeFunctionContext; + +class SubstringContext extends PrimaryExpressionContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + SUBSTRING() { + return this.getToken(SqlBaseParser.SUBSTRING, 0); + }; + + valueExpression = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(ExpressionContext); + return this.getTypedRuleContexts(ValueExpressionContext); } else { - return this.getTypedRuleContext(ExpressionContext,i); + return this.getTypedRuleContext(ValueExpressionContext,i); } }; - WITH() { - return this.getToken(SqlBaseParser.WITH, 0); + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); }; - ORDINALITY() { - return this.getToken(SqlBaseParser.ORDINALITY, 0); + FOR() { + return this.getToken(SqlBaseParser.FOR, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterUnnest(this); + listener.enterSubstring(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitUnnest(this); + listener.exitSubstring(this); } } } -SqlBaseParser.UnnestContext = UnnestContext; +SqlBaseParser.SubstringContext = SubstringContext; -class LateralContext extends RelationPrimaryContext { +class CastContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - LATERAL() { - return this.getToken(SqlBaseParser.LATERAL, 0); + CAST() { + return this.getToken(SqlBaseParser.CAST, 0); }; - query() { - return this.getTypedRuleContext(QueryContext,0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); + }; + + AS() { + return this.getToken(SqlBaseParser.AS, 0); + }; + + type() { + return this.getTypedRuleContext(TypeContext,0); + }; + + TRY_CAST() { + return this.getToken(SqlBaseParser.TRY_CAST, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterLateral(this); + listener.enterCast(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitLateral(this); + listener.exitCast(this); } } } -SqlBaseParser.LateralContext = LateralContext; +SqlBaseParser.CastContext = CastContext; -class TableNameContext extends RelationPrimaryContext { +class LambdaContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + identifier = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(IdentifierContext); + } else { + return this.getTypedRuleContext(IdentifierContext,i); + } }; - tableVersionExpression() { - return this.getTypedRuleContext(TableVersionExpressionContext,0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterTableName(this); + listener.enterLambda(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitTableName(this); + listener.exitLambda(this); } } } -SqlBaseParser.TableNameContext = TableNameContext; +SqlBaseParser.LambdaContext = LambdaContext; -class ExpressionContext extends antlr4.ParserRuleContext { +class ParenthesizedExpressionContext extends PrimaryExpressionContext { - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_expression; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - booleanExpression() { - return this.getTypedRuleContext(BooleanExpressionContext,0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterExpression(this); + listener.enterParenthesizedExpression(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitExpression(this); + listener.exitParenthesizedExpression(this); } } } +SqlBaseParser.ParenthesizedExpressionContext = ParenthesizedExpressionContext; - -class BooleanExpressionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_booleanExpression; - } - - - - copyFrom(ctx) { - super.copyFrom(ctx); - } - -} - - -class LogicalNotContext extends BooleanExpressionContext { +class ParameterContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); - }; - - booleanExpression() { - return this.getTypedRuleContext(BooleanExpressionContext,0); - }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterLogicalNot(this); + listener.enterParameter(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitLogicalNot(this); + listener.exitParameter(this); } } } -SqlBaseParser.LogicalNotContext = LogicalNotContext; +SqlBaseParser.ParameterContext = ParameterContext; -class PredicatedContext extends BooleanExpressionContext { +class NormalizeContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); - this._valueExpression = null;; super.copyFrom(ctx); } + NORMALIZE() { + return this.getToken(SqlBaseParser.NORMALIZE, 0); + }; + valueExpression() { return this.getTypedRuleContext(ValueExpressionContext,0); }; - predicate() { - return this.getTypedRuleContext(PredicateContext,0); + normalForm() { + return this.getTypedRuleContext(NormalFormContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterPredicated(this); + listener.enterNormalize(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitPredicated(this); + listener.exitNormalize(this); } } } -SqlBaseParser.PredicatedContext = PredicatedContext; +SqlBaseParser.NormalizeContext = NormalizeContext; -class LogicalBinaryContext extends BooleanExpressionContext { +class IntervalLiteralContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); - this.left = null;; - this.operator = null;; - this.right = null;; super.copyFrom(ctx); } - booleanExpression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(BooleanExpressionContext); - } else { - return this.getTypedRuleContext(BooleanExpressionContext,i); - } - }; - - AND() { - return this.getToken(SqlBaseParser.AND, 0); - }; - - OR() { - return this.getToken(SqlBaseParser.OR, 0); + interval() { + return this.getTypedRuleContext(IntervalContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterLogicalBinary(this); + listener.enterIntervalLiteral(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitLogicalBinary(this); + listener.exitIntervalLiteral(this); } } } -SqlBaseParser.LogicalBinaryContext = LogicalBinaryContext; +SqlBaseParser.IntervalLiteralContext = IntervalLiteralContext; -class PredicateContext extends antlr4.ParserRuleContext { +class NumericLiteralContext extends PrimaryExpressionContext { - constructor(parser, parent, invokingState, value) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_predicate; - this.value = null - this.value = value || null; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } + number() { + return this.getTypedRuleContext(NumberContext,0); + }; - - copyFrom(ctx) { - super.copyFrom(ctx); - this.value = ctx.value; + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterNumericLiteral(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitNumericLiteral(this); } + } + } +SqlBaseParser.NumericLiteralContext = NumericLiteralContext; -class ComparisonContext extends PredicateContext { +class BooleanLiteralContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); - this.right = null;; super.copyFrom(ctx); } - comparisonOperator() { - return this.getTypedRuleContext(ComparisonOperatorContext,0); - }; - - valueExpression() { - return this.getTypedRuleContext(ValueExpressionContext,0); + booleanValue() { + return this.getTypedRuleContext(BooleanValueContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterComparison(this); + listener.enterBooleanLiteral(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitComparison(this); + listener.exitBooleanLiteral(this); } } } -SqlBaseParser.ComparisonContext = ComparisonContext; +SqlBaseParser.BooleanLiteralContext = BooleanLiteralContext; -class LikeContext extends PredicateContext { +class SimpleCaseContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); - this.pattern = null;; - this.escape = null;; + this.elseExpression = null;; super.copyFrom(ctx); } - LIKE() { - return this.getToken(SqlBaseParser.LIKE, 0); + CASE() { + return this.getToken(SqlBaseParser.CASE, 0); }; - valueExpression = function(i) { + valueExpression() { + return this.getTypedRuleContext(ValueExpressionContext,0); + }; + + END() { + return this.getToken(SqlBaseParser.END, 0); + }; + + whenClause = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(ValueExpressionContext); + return this.getTypedRuleContexts(WhenClauseContext); } else { - return this.getTypedRuleContext(ValueExpressionContext,i); + return this.getTypedRuleContext(WhenClauseContext,i); } }; - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); + ELSE() { + return this.getToken(SqlBaseParser.ELSE, 0); }; - ESCAPE() { - return this.getToken(SqlBaseParser.ESCAPE, 0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterLike(this); + listener.enterSimpleCase(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitLike(this); + listener.exitSimpleCase(this); } } } -SqlBaseParser.LikeContext = LikeContext; +SqlBaseParser.SimpleCaseContext = SimpleCaseContext; -class InSubqueryContext extends PredicateContext { +class ColumnReferenceContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - IN() { - return this.getToken(SqlBaseParser.IN, 0); - }; - - query() { - return this.getTypedRuleContext(QueryContext,0); - }; - - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterInSubquery(this); + listener.enterColumnReference(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitInSubquery(this); + listener.exitColumnReference(this); } } } -SqlBaseParser.InSubqueryContext = InSubqueryContext; - -class DistinctFromContext extends PredicateContext { - - constructor(parser, ctx) { - super(parser); - this.right = null;; - super.copyFrom(ctx); - } - - IS() { - return this.getToken(SqlBaseParser.IS, 0); - }; - - DISTINCT() { - return this.getToken(SqlBaseParser.DISTINCT, 0); - }; +SqlBaseParser.ColumnReferenceContext = ColumnReferenceContext; - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); - }; +class NullLiteralContext extends PrimaryExpressionContext { - valueExpression() { - return this.getTypedRuleContext(ValueExpressionContext,0); - }; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); + NULL() { + return this.getToken(SqlBaseParser.NULL, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDistinctFrom(this); + listener.enterNullLiteral(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDistinctFrom(this); + listener.exitNullLiteral(this); } } } -SqlBaseParser.DistinctFromContext = DistinctFromContext; +SqlBaseParser.NullLiteralContext = NullLiteralContext; -class InListContext extends PredicateContext { +class RowConstructorContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - IN() { - return this.getToken(SqlBaseParser.IN, 0); - }; - expression = function(i) { if(i===undefined) { i = null; @@ -15211,1164 +18431,1337 @@ class InListContext extends PredicateContext { } }; - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); + ROW() { + return this.getToken(SqlBaseParser.ROW, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterInList(this); + listener.enterRowConstructor(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitInList(this); + listener.exitRowConstructor(this); } } } -SqlBaseParser.InListContext = InListContext; +SqlBaseParser.RowConstructorContext = RowConstructorContext; -class NullPredicateContext extends PredicateContext { +class SubscriptContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); + this.value = null;; + this.index = null;; super.copyFrom(ctx); } - IS() { - return this.getToken(SqlBaseParser.IS, 0); - }; - - NULL() { - return this.getToken(SqlBaseParser.NULL, 0); + primaryExpression() { + return this.getTypedRuleContext(PrimaryExpressionContext,0); }; - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); + valueExpression() { + return this.getTypedRuleContext(ValueExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterNullPredicate(this); + listener.enterSubscript(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitNullPredicate(this); + listener.exitSubscript(this); } } } -SqlBaseParser.NullPredicateContext = NullPredicateContext; +SqlBaseParser.SubscriptContext = SubscriptContext; -class BetweenContext extends PredicateContext { +class SubqueryExpressionContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); - this.lower = null;; - this.upper = null;; super.copyFrom(ctx); } - BETWEEN() { - return this.getToken(SqlBaseParser.BETWEEN, 0); - }; - - AND() { - return this.getToken(SqlBaseParser.AND, 0); - }; - - valueExpression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ValueExpressionContext); - } else { - return this.getTypedRuleContext(ValueExpressionContext,i); - } - }; - - NOT() { - return this.getToken(SqlBaseParser.NOT, 0); + query() { + return this.getTypedRuleContext(QueryContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterBetween(this); + listener.enterSubqueryExpression(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitBetween(this); + listener.exitSubqueryExpression(this); } } } -SqlBaseParser.BetweenContext = BetweenContext; +SqlBaseParser.SubqueryExpressionContext = SubqueryExpressionContext; -class QuantifiedComparisonContext extends PredicateContext { +class BinaryLiteralContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - comparisonOperator() { - return this.getTypedRuleContext(ComparisonOperatorContext,0); - }; - - comparisonQuantifier() { - return this.getTypedRuleContext(ComparisonQuantifierContext,0); - }; - - query() { - return this.getTypedRuleContext(QueryContext,0); + BINARY_LITERAL() { + return this.getToken(SqlBaseParser.BINARY_LITERAL, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterQuantifiedComparison(this); + listener.enterBinaryLiteral(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitQuantifiedComparison(this); + listener.exitBinaryLiteral(this); } } } -SqlBaseParser.QuantifiedComparisonContext = QuantifiedComparisonContext; +SqlBaseParser.BinaryLiteralContext = BinaryLiteralContext; -class ValueExpressionContext extends antlr4.ParserRuleContext { +class CurrentUserContext extends PrimaryExpressionContext { - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_valueExpression; + constructor(parser, ctx) { + super(parser); + this.name = null;; + super.copyFrom(ctx); } + CURRENT_USER() { + return this.getToken(SqlBaseParser.CURRENT_USER, 0); + }; - - copyFrom(ctx) { - super.copyFrom(ctx); + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterCurrentUser(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitCurrentUser(this); } + } + } +SqlBaseParser.CurrentUserContext = CurrentUserContext; -class ValueExpressionDefaultContext extends ValueExpressionContext { +class ExtractContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - primaryExpression() { - return this.getTypedRuleContext(PrimaryExpressionContext,0); + EXTRACT() { + return this.getToken(SqlBaseParser.EXTRACT, 0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + FROM() { + return this.getToken(SqlBaseParser.FROM, 0); + }; + + valueExpression() { + return this.getTypedRuleContext(ValueExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterValueExpressionDefault(this); + listener.enterExtract(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitValueExpressionDefault(this); + listener.exitExtract(this); } } } -SqlBaseParser.ValueExpressionDefaultContext = ValueExpressionDefaultContext; +SqlBaseParser.ExtractContext = ExtractContext; -class ConcatenationContext extends ValueExpressionContext { +class StringLiteralContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); - this.left = null;; - this.right = null;; super.copyFrom(ctx); } - CONCAT() { - return this.getToken(SqlBaseParser.CONCAT, 0); - }; - - valueExpression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ValueExpressionContext); - } else { - return this.getTypedRuleContext(ValueExpressionContext,i); - } + string() { + return this.getTypedRuleContext(StringContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterConcatenation(this); + listener.enterStringLiteral(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitConcatenation(this); + listener.exitStringLiteral(this); } } } -SqlBaseParser.ConcatenationContext = ConcatenationContext; +SqlBaseParser.StringLiteralContext = StringLiteralContext; -class ArithmeticBinaryContext extends ValueExpressionContext { +class ArrayConstructorContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); - this.left = null;; - this.operator = null;; - this.right = null;; super.copyFrom(ctx); } - valueExpression = function(i) { + ARRAY() { + return this.getToken(SqlBaseParser.ARRAY, 0); + }; + + expression = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(ValueExpressionContext); + return this.getTypedRuleContexts(ExpressionContext); } else { - return this.getTypedRuleContext(ValueExpressionContext,i); + return this.getTypedRuleContext(ExpressionContext,i); } }; - ASTERISK() { - return this.getToken(SqlBaseParser.ASTERISK, 0); - }; - - SLASH() { - return this.getToken(SqlBaseParser.SLASH, 0); - }; - - PERCENT() { - return this.getToken(SqlBaseParser.PERCENT, 0); - }; - - PLUS() { - return this.getToken(SqlBaseParser.PLUS, 0); - }; - - MINUS() { - return this.getToken(SqlBaseParser.MINUS, 0); - }; - enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterArithmeticBinary(this); + listener.enterArrayConstructor(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitArithmeticBinary(this); + listener.exitArrayConstructor(this); } } } -SqlBaseParser.ArithmeticBinaryContext = ArithmeticBinaryContext; +SqlBaseParser.ArrayConstructorContext = ArrayConstructorContext; -class ArithmeticUnaryContext extends ValueExpressionContext { +class FunctionCallContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); - this.operator = null;; super.copyFrom(ctx); } - valueExpression() { - return this.getTypedRuleContext(ValueExpressionContext,0); - }; - - MINUS() { - return this.getToken(SqlBaseParser.MINUS, 0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; - PLUS() { - return this.getToken(SqlBaseParser.PLUS, 0); + ASTERISK() { + return this.getToken(SqlBaseParser.ASTERISK, 0); }; - enterRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.enterArithmeticUnary(this); - } - } - - exitRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.exitArithmeticUnary(this); - } - } - + filter() { + return this.getTypedRuleContext(FilterContext,0); + }; -} + over() { + return this.getTypedRuleContext(OverContext,0); + }; -SqlBaseParser.ArithmeticUnaryContext = ArithmeticUnaryContext; + expression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ExpressionContext); + } else { + return this.getTypedRuleContext(ExpressionContext,i); + } + }; -class AtTimeZoneContext extends ValueExpressionContext { + ORDER() { + return this.getToken(SqlBaseParser.ORDER, 0); + }; - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } + BY() { + return this.getToken(SqlBaseParser.BY, 0); + }; - valueExpression() { - return this.getTypedRuleContext(ValueExpressionContext,0); + sortItem = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(SortItemContext); + } else { + return this.getTypedRuleContext(SortItemContext,i); + } }; - AT() { - return this.getToken(SqlBaseParser.AT, 0); + setQuantifier() { + return this.getTypedRuleContext(SetQuantifierContext,0); }; - timeZoneSpecifier() { - return this.getTypedRuleContext(TimeZoneSpecifierContext,0); + nullTreatment() { + return this.getTypedRuleContext(NullTreatmentContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterAtTimeZone(this); + listener.enterFunctionCall(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitAtTimeZone(this); + listener.exitFunctionCall(this); } } } -SqlBaseParser.AtTimeZoneContext = AtTimeZoneContext; - -class PrimaryExpressionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_primaryExpression; - } - - - - copyFrom(ctx) { - super.copyFrom(ctx); - } - -} - +SqlBaseParser.FunctionCallContext = FunctionCallContext; -class DereferenceContext extends PrimaryExpressionContext { +class ExistsContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); - this.base = null;; - this.fieldName = null;; super.copyFrom(ctx); } - primaryExpression() { - return this.getTypedRuleContext(PrimaryExpressionContext,0); + EXISTS() { + return this.getToken(SqlBaseParser.EXISTS, 0); }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + query() { + return this.getTypedRuleContext(QueryContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDereference(this); + listener.enterExists(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDereference(this); + listener.exitExists(this); } } } -SqlBaseParser.DereferenceContext = DereferenceContext; +SqlBaseParser.ExistsContext = ExistsContext; -class TypeConstructorContext extends PrimaryExpressionContext { +class PositionContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + POSITION() { + return this.getToken(SqlBaseParser.POSITION, 0); }; - string() { - return this.getTypedRuleContext(StringContext,0); + valueExpression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ValueExpressionContext); + } else { + return this.getTypedRuleContext(ValueExpressionContext,i); + } }; - DOUBLE_PRECISION() { - return this.getToken(SqlBaseParser.DOUBLE_PRECISION, 0); + IN() { + return this.getToken(SqlBaseParser.IN, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterTypeConstructor(this); + listener.enterPosition(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitTypeConstructor(this); + listener.exitPosition(this); } } } -SqlBaseParser.TypeConstructorContext = TypeConstructorContext; +SqlBaseParser.PositionContext = PositionContext; -class SpecialDateTimeFunctionContext extends PrimaryExpressionContext { +class SearchedCaseContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); - this.name = null;; - this.precision = null;; + this.elseExpression = null;; super.copyFrom(ctx); } - CURRENT_DATE() { - return this.getToken(SqlBaseParser.CURRENT_DATE, 0); - }; - - CURRENT_TIME() { - return this.getToken(SqlBaseParser.CURRENT_TIME, 0); + CASE() { + return this.getToken(SqlBaseParser.CASE, 0); }; - INTEGER_VALUE() { - return this.getToken(SqlBaseParser.INTEGER_VALUE, 0); + END() { + return this.getToken(SqlBaseParser.END, 0); }; - CURRENT_TIMESTAMP() { - return this.getToken(SqlBaseParser.CURRENT_TIMESTAMP, 0); + whenClause = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(WhenClauseContext); + } else { + return this.getTypedRuleContext(WhenClauseContext,i); + } }; - LOCALTIME() { - return this.getToken(SqlBaseParser.LOCALTIME, 0); + ELSE() { + return this.getToken(SqlBaseParser.ELSE, 0); }; - LOCALTIMESTAMP() { - return this.getToken(SqlBaseParser.LOCALTIMESTAMP, 0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSpecialDateTimeFunction(this); + listener.enterSearchedCase(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSpecialDateTimeFunction(this); + listener.exitSearchedCase(this); } } } -SqlBaseParser.SpecialDateTimeFunctionContext = SpecialDateTimeFunctionContext; +SqlBaseParser.SearchedCaseContext = SearchedCaseContext; -class SubstringContext extends PrimaryExpressionContext { +class GroupingOperationContext extends PrimaryExpressionContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - SUBSTRING() { - return this.getToken(SqlBaseParser.SUBSTRING, 0); + GROUPING() { + return this.getToken(SqlBaseParser.GROUPING, 0); }; - valueExpression = function(i) { + qualifiedName = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(ValueExpressionContext); + return this.getTypedRuleContexts(QualifiedNameContext); } else { - return this.getTypedRuleContext(ValueExpressionContext,i); + return this.getTypedRuleContext(QualifiedNameContext,i); } }; - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); - }; - - FOR() { - return this.getToken(SqlBaseParser.FOR, 0); - }; - enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSubstring(this); + listener.enterGroupingOperation(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSubstring(this); + listener.exitGroupingOperation(this); } } } -SqlBaseParser.SubstringContext = SubstringContext; +SqlBaseParser.GroupingOperationContext = GroupingOperationContext; -class CastContext extends PrimaryExpressionContext { +class StringContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_string; + } + + + + copyFrom(ctx) { + super.copyFrom(ctx); + } + +} + + +class UnicodeStringLiteralContext extends StringContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - CAST() { - return this.getToken(SqlBaseParser.CAST, 0); - }; - - expression() { - return this.getTypedRuleContext(ExpressionContext,0); - }; - - AS() { - return this.getToken(SqlBaseParser.AS, 0); + UNICODE_STRING() { + return this.getToken(SqlBaseParser.UNICODE_STRING, 0); }; - type() { - return this.getTypedRuleContext(TypeContext,0); + UESCAPE() { + return this.getToken(SqlBaseParser.UESCAPE, 0); }; - TRY_CAST() { - return this.getToken(SqlBaseParser.TRY_CAST, 0); + STRING() { + return this.getToken(SqlBaseParser.STRING, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCast(this); + listener.enterUnicodeStringLiteral(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCast(this); + listener.exitUnicodeStringLiteral(this); } } } -SqlBaseParser.CastContext = CastContext; +SqlBaseParser.UnicodeStringLiteralContext = UnicodeStringLiteralContext; -class LambdaContext extends PrimaryExpressionContext { +class BasicStringLiteralContext extends StringContext { constructor(parser, ctx) { super(parser); - super.copyFrom(ctx); - } - - identifier = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(IdentifierContext); - } else { - return this.getTypedRuleContext(IdentifierContext,i); - } - }; + super.copyFrom(ctx); + } - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + STRING() { + return this.getToken(SqlBaseParser.STRING, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterLambda(this); + listener.enterBasicStringLiteral(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitLambda(this); + listener.exitBasicStringLiteral(this); } } } -SqlBaseParser.LambdaContext = LambdaContext; +SqlBaseParser.BasicStringLiteralContext = BasicStringLiteralContext; -class ParenthesizedExpressionContext extends PrimaryExpressionContext { +class NullTreatmentContext extends antlr4.ParserRuleContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_nullTreatment; } - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + IGNORE() { + return this.getToken(SqlBaseParser.IGNORE, 0); + }; + + NULLS() { + return this.getToken(SqlBaseParser.NULLS, 0); + }; + + RESPECT() { + return this.getToken(SqlBaseParser.RESPECT, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterParenthesizedExpression(this); + listener.enterNullTreatment(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitParenthesizedExpression(this); + listener.exitNullTreatment(this); } } } -SqlBaseParser.ParenthesizedExpressionContext = ParenthesizedExpressionContext; -class ParameterContext extends PrimaryExpressionContext { + +class TimeZoneSpecifierContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_timeZoneSpecifier; + } + + + + copyFrom(ctx) { + super.copyFrom(ctx); + } + +} + + +class TimeZoneIntervalContext extends TimeZoneSpecifierContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } + TIME() { + return this.getToken(SqlBaseParser.TIME, 0); + }; + + ZONE() { + return this.getToken(SqlBaseParser.ZONE, 0); + }; + + interval() { + return this.getTypedRuleContext(IntervalContext,0); + }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterParameter(this); + listener.enterTimeZoneInterval(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitParameter(this); + listener.exitTimeZoneInterval(this); } } } -SqlBaseParser.ParameterContext = ParameterContext; +SqlBaseParser.TimeZoneIntervalContext = TimeZoneIntervalContext; -class NormalizeContext extends PrimaryExpressionContext { +class TimeZoneStringContext extends TimeZoneSpecifierContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - NORMALIZE() { - return this.getToken(SqlBaseParser.NORMALIZE, 0); + TIME() { + return this.getToken(SqlBaseParser.TIME, 0); }; - valueExpression() { - return this.getTypedRuleContext(ValueExpressionContext,0); + ZONE() { + return this.getToken(SqlBaseParser.ZONE, 0); }; - normalForm() { - return this.getTypedRuleContext(NormalFormContext,0); + string() { + return this.getTypedRuleContext(StringContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterNormalize(this); + listener.enterTimeZoneString(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitNormalize(this); + listener.exitTimeZoneString(this); } } } -SqlBaseParser.NormalizeContext = NormalizeContext; +SqlBaseParser.TimeZoneStringContext = TimeZoneStringContext; -class IntervalLiteralContext extends PrimaryExpressionContext { +class ComparisonOperatorContext extends antlr4.ParserRuleContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_comparisonOperator; } - interval() { - return this.getTypedRuleContext(IntervalContext,0); + EQ() { + return this.getToken(SqlBaseParser.EQ, 0); + }; + + NEQ() { + return this.getToken(SqlBaseParser.NEQ, 0); + }; + + LT() { + return this.getToken(SqlBaseParser.LT, 0); + }; + + LTE() { + return this.getToken(SqlBaseParser.LTE, 0); + }; + + GT() { + return this.getToken(SqlBaseParser.GT, 0); + }; + + GTE() { + return this.getToken(SqlBaseParser.GTE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterIntervalLiteral(this); + listener.enterComparisonOperator(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitIntervalLiteral(this); + listener.exitComparisonOperator(this); } } } -SqlBaseParser.IntervalLiteralContext = IntervalLiteralContext; -class NumericLiteralContext extends PrimaryExpressionContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class ComparisonQuantifierContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_comparisonQuantifier; } - number() { - return this.getTypedRuleContext(NumberContext,0); + ALL() { + return this.getToken(SqlBaseParser.ALL, 0); + }; + + SOME() { + return this.getToken(SqlBaseParser.SOME, 0); + }; + + ANY() { + return this.getToken(SqlBaseParser.ANY, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterNumericLiteral(this); + listener.enterComparisonQuantifier(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitNumericLiteral(this); + listener.exitComparisonQuantifier(this); } } } -SqlBaseParser.NumericLiteralContext = NumericLiteralContext; -class BooleanLiteralContext extends PrimaryExpressionContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class BooleanValueContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_booleanValue; } - booleanValue() { - return this.getTypedRuleContext(BooleanValueContext,0); + TRUE() { + return this.getToken(SqlBaseParser.TRUE, 0); + }; + + FALSE() { + return this.getToken(SqlBaseParser.FALSE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterBooleanLiteral(this); + listener.enterBooleanValue(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitBooleanLiteral(this); + listener.exitBooleanValue(this); } } } -SqlBaseParser.BooleanLiteralContext = BooleanLiteralContext; -class SimpleCaseContext extends PrimaryExpressionContext { - constructor(parser, ctx) { - super(parser); - this.elseExpression = null;; - super.copyFrom(ctx); - } +class IntervalContext extends antlr4.ParserRuleContext { - CASE() { - return this.getToken(SqlBaseParser.CASE, 0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_interval; + this.sign = null; + this.from = null; + this.to = null; + } - valueExpression() { - return this.getTypedRuleContext(ValueExpressionContext,0); + INTERVAL() { + return this.getToken(SqlBaseParser.INTERVAL, 0); }; - END() { - return this.getToken(SqlBaseParser.END, 0); + string() { + return this.getTypedRuleContext(StringContext,0); }; - whenClause = function(i) { + intervalField = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(WhenClauseContext); + return this.getTypedRuleContexts(IntervalFieldContext); } else { - return this.getTypedRuleContext(WhenClauseContext,i); + return this.getTypedRuleContext(IntervalFieldContext,i); } }; - ELSE() { - return this.getToken(SqlBaseParser.ELSE, 0); + TO() { + return this.getToken(SqlBaseParser.TO, 0); + }; + + PLUS() { + return this.getToken(SqlBaseParser.PLUS, 0); }; - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + MINUS() { + return this.getToken(SqlBaseParser.MINUS, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSimpleCase(this); + listener.enterInterval(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSimpleCase(this); + listener.exitInterval(this); } } } -SqlBaseParser.SimpleCaseContext = SimpleCaseContext; -class ColumnReferenceContext extends PrimaryExpressionContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class IntervalFieldContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_intervalField; } - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + YEAR() { + return this.getToken(SqlBaseParser.YEAR, 0); + }; + + MONTH() { + return this.getToken(SqlBaseParser.MONTH, 0); + }; + + DAY() { + return this.getToken(SqlBaseParser.DAY, 0); + }; + + HOUR() { + return this.getToken(SqlBaseParser.HOUR, 0); + }; + + MINUTE() { + return this.getToken(SqlBaseParser.MINUTE, 0); + }; + + SECOND() { + return this.getToken(SqlBaseParser.SECOND, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterColumnReference(this); + listener.enterIntervalField(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitColumnReference(this); + listener.exitIntervalField(this); } } } -SqlBaseParser.ColumnReferenceContext = ColumnReferenceContext; -class NullLiteralContext extends PrimaryExpressionContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class NormalFormContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_normalForm; } - NULL() { - return this.getToken(SqlBaseParser.NULL, 0); + NFD() { + return this.getToken(SqlBaseParser.NFD, 0); + }; + + NFC() { + return this.getToken(SqlBaseParser.NFC, 0); + }; + + NFKD() { + return this.getToken(SqlBaseParser.NFKD, 0); + }; + + NFKC() { + return this.getToken(SqlBaseParser.NFKC, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterNullLiteral(this); + listener.enterNormalForm(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitNullLiteral(this); + listener.exitNormalForm(this); } } } -SqlBaseParser.NullLiteralContext = NullLiteralContext; -class RowConstructorContext extends PrimaryExpressionContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class TypesContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_types; } - expression = function(i) { + type = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(ExpressionContext); + return this.getTypedRuleContexts(TypeContext); } else { - return this.getTypedRuleContext(ExpressionContext,i); + return this.getTypedRuleContext(TypeContext,i); } }; - ROW() { - return this.getToken(SqlBaseParser.ROW, 0); - }; - enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRowConstructor(this); + listener.enterTypes(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRowConstructor(this); + listener.exitTypes(this); } } } -SqlBaseParser.RowConstructorContext = RowConstructorContext; -class SubscriptContext extends PrimaryExpressionContext { - constructor(parser, ctx) { - super(parser); - this.value = null;; - this.index = null;; - super.copyFrom(ctx); +class TypeContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_type; + this.from = null; + this.to = null; } - primaryExpression() { - return this.getTypedRuleContext(PrimaryExpressionContext,0); + ARRAY() { + return this.getToken(SqlBaseParser.ARRAY, 0); }; - valueExpression() { - return this.getTypedRuleContext(ValueExpressionContext,0); + LT() { + return this.getToken(SqlBaseParser.LT, 0); }; - enterRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.enterSubscript(this); - } - } - - exitRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.exitSubscript(this); - } - } - - -} - -SqlBaseParser.SubscriptContext = SubscriptContext; - -class SubqueryExpressionContext extends PrimaryExpressionContext { - - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } + type = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(TypeContext); + } else { + return this.getTypedRuleContext(TypeContext,i); + } + }; - query() { - return this.getTypedRuleContext(QueryContext,0); + GT() { + return this.getToken(SqlBaseParser.GT, 0); }; - enterRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.enterSubqueryExpression(this); - } - } + MAP() { + return this.getToken(SqlBaseParser.MAP, 0); + }; - exitRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.exitSubqueryExpression(this); - } - } + ROW() { + return this.getToken(SqlBaseParser.ROW, 0); + }; + identifier = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(IdentifierContext); + } else { + return this.getTypedRuleContext(IdentifierContext,i); + } + }; -} + baseType() { + return this.getTypedRuleContext(BaseTypeContext,0); + }; -SqlBaseParser.SubqueryExpressionContext = SubqueryExpressionContext; + typeParameter = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(TypeParameterContext); + } else { + return this.getTypedRuleContext(TypeParameterContext,i); + } + }; -class BinaryLiteralContext extends PrimaryExpressionContext { + INTERVAL() { + return this.getToken(SqlBaseParser.INTERVAL, 0); + }; - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } + TO() { + return this.getToken(SqlBaseParser.TO, 0); + }; - BINARY_LITERAL() { - return this.getToken(SqlBaseParser.BINARY_LITERAL, 0); + intervalField = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(IntervalFieldContext); + } else { + return this.getTypedRuleContext(IntervalFieldContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterBinaryLiteral(this); + listener.enterType(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitBinaryLiteral(this); + listener.exitType(this); } } } -SqlBaseParser.BinaryLiteralContext = BinaryLiteralContext; -class CurrentUserContext extends PrimaryExpressionContext { - constructor(parser, ctx) { - super(parser); - this.name = null;; - super.copyFrom(ctx); +class TableFunctionCallContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_tableFunctionCall; } - CURRENT_USER() { - return this.getToken(SqlBaseParser.CURRENT_USER, 0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + tableFunctionArgument = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(TableFunctionArgumentContext); + } else { + return this.getTypedRuleContext(TableFunctionArgumentContext,i); + } + }; + + COPARTITION() { + return this.getToken(SqlBaseParser.COPARTITION, 0); + }; + + copartitionTables = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(CopartitionTablesContext); + } else { + return this.getTypedRuleContext(CopartitionTablesContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCurrentUser(this); + listener.enterTableFunctionCall(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCurrentUser(this); + listener.exitTableFunctionCall(this); } } } -SqlBaseParser.CurrentUserContext = CurrentUserContext; -class ExtractContext extends PrimaryExpressionContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class TableFunctionArgumentContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_tableFunctionArgument; } - EXTRACT() { - return this.getToken(SqlBaseParser.EXTRACT, 0); + tableArgument() { + return this.getTypedRuleContext(TableArgumentContext,0); }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + descriptorArgument() { + return this.getTypedRuleContext(DescriptorArgumentContext,0); }; - FROM() { - return this.getToken(SqlBaseParser.FROM, 0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; - valueExpression() { - return this.getTypedRuleContext(ValueExpressionContext,0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterExtract(this); + listener.enterTableFunctionArgument(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitExtract(this); + listener.exitTableFunctionArgument(this); } } } -SqlBaseParser.ExtractContext = ExtractContext; -class StringLiteralContext extends PrimaryExpressionContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class TableArgumentContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_tableArgument; } - string() { - return this.getTypedRuleContext(StringContext,0); + tableArgumentRelation() { + return this.getTypedRuleContext(TableArgumentRelationContext,0); }; - enterRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.enterStringLiteral(this); - } - } + PARTITION() { + return this.getToken(SqlBaseParser.PARTITION, 0); + }; - exitRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.exitStringLiteral(this); + BY = function(i) { + if(i===undefined) { + i = null; } - } + if(i===null) { + return this.getTokens(SqlBaseParser.BY); + } else { + return this.getToken(SqlBaseParser.BY, i); + } + }; -} + PRUNE() { + return this.getToken(SqlBaseParser.PRUNE, 0); + }; -SqlBaseParser.StringLiteralContext = StringLiteralContext; + WHEN() { + return this.getToken(SqlBaseParser.WHEN, 0); + }; -class ArrayConstructorContext extends PrimaryExpressionContext { + EMPTY() { + return this.getToken(SqlBaseParser.EMPTY, 0); + }; - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } + KEEP() { + return this.getToken(SqlBaseParser.KEEP, 0); + }; - ARRAY() { - return this.getToken(SqlBaseParser.ARRAY, 0); + ORDER() { + return this.getToken(SqlBaseParser.ORDER, 0); }; expression = function(i) { @@ -16382,238 +19775,255 @@ class ArrayConstructorContext extends PrimaryExpressionContext { } }; + sortItem = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(SortItemContext); + } else { + return this.getTypedRuleContext(SortItemContext,i); + } + }; + enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterArrayConstructor(this); + listener.enterTableArgument(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitArrayConstructor(this); + listener.exitTableArgument(this); } } } -SqlBaseParser.ArrayConstructorContext = ArrayConstructorContext; -class FunctionCallContext extends PrimaryExpressionContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class TableArgumentRelationContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_tableArgumentRelation; } - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); - }; - ASTERISK() { - return this.getToken(SqlBaseParser.ASTERISK, 0); - }; + + copyFrom(ctx) { + super.copyFrom(ctx); + } - filter() { - return this.getTypedRuleContext(FilterContext,0); - }; +} - over() { - return this.getTypedRuleContext(OverContext,0); - }; - expression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExpressionContext); - } else { - return this.getTypedRuleContext(ExpressionContext,i); - } - }; +class TableArgumentQueryContext extends TableArgumentRelationContext { - ORDER() { - return this.getToken(SqlBaseParser.ORDER, 0); + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; - BY() { - return this.getToken(SqlBaseParser.BY, 0); + query() { + return this.getTypedRuleContext(QueryContext,0); }; - sortItem = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(SortItemContext); - } else { - return this.getTypedRuleContext(SortItemContext,i); - } + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; - setQuantifier() { - return this.getTypedRuleContext(SetQuantifierContext,0); + AS() { + return this.getToken(SqlBaseParser.AS, 0); }; - nullTreatment() { - return this.getTypedRuleContext(NullTreatmentContext,0); + columnAliases() { + return this.getTypedRuleContext(ColumnAliasesContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterFunctionCall(this); + listener.enterTableArgumentQuery(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitFunctionCall(this); + listener.exitTableArgumentQuery(this); } } } -SqlBaseParser.FunctionCallContext = FunctionCallContext; +SqlBaseParser.TableArgumentQueryContext = TableArgumentQueryContext; -class ExistsContext extends PrimaryExpressionContext { +class TableArgumentTableContext extends TableArgumentRelationContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - EXISTS() { - return this.getToken(SqlBaseParser.EXISTS, 0); + TABLE() { + return this.getToken(SqlBaseParser.TABLE, 0); }; - query() { - return this.getTypedRuleContext(QueryContext,0); + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + AS() { + return this.getToken(SqlBaseParser.AS, 0); + }; + + columnAliases() { + return this.getTypedRuleContext(ColumnAliasesContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterExists(this); + listener.enterTableArgumentTable(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitExists(this); + listener.exitTableArgumentTable(this); } } } -SqlBaseParser.ExistsContext = ExistsContext; +SqlBaseParser.TableArgumentTableContext = TableArgumentTableContext; -class PositionContext extends PrimaryExpressionContext { +class DescriptorArgumentContext extends antlr4.ParserRuleContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_descriptorArgument; } - POSITION() { - return this.getToken(SqlBaseParser.POSITION, 0); + DESCRIPTOR() { + return this.getToken(SqlBaseParser.DESCRIPTOR, 0); }; - valueExpression = function(i) { + descriptorField = function(i) { if(i===undefined) { i = null; } if(i===null) { - return this.getTypedRuleContexts(ValueExpressionContext); + return this.getTypedRuleContexts(DescriptorFieldContext); } else { - return this.getTypedRuleContext(ValueExpressionContext,i); + return this.getTypedRuleContext(DescriptorFieldContext,i); } }; - IN() { - return this.getToken(SqlBaseParser.IN, 0); + CAST() { + return this.getToken(SqlBaseParser.CAST, 0); + }; + + NULL() { + return this.getToken(SqlBaseParser.NULL, 0); + }; + + AS() { + return this.getToken(SqlBaseParser.AS, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterPosition(this); + listener.enterDescriptorArgument(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitPosition(this); + listener.exitDescriptorArgument(this); } } } -SqlBaseParser.PositionContext = PositionContext; - -class SearchedCaseContext extends PrimaryExpressionContext { - - constructor(parser, ctx) { - super(parser); - this.elseExpression = null;; - super.copyFrom(ctx); - } - CASE() { - return this.getToken(SqlBaseParser.CASE, 0); - }; - END() { - return this.getToken(SqlBaseParser.END, 0); - }; +class DescriptorFieldContext extends antlr4.ParserRuleContext { - whenClause = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(WhenClauseContext); - } else { - return this.getTypedRuleContext(WhenClauseContext,i); - } - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_descriptorField; + } - ELSE() { - return this.getToken(SqlBaseParser.ELSE, 0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + type() { + return this.getTypedRuleContext(TypeContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSearchedCase(this); + listener.enterDescriptorField(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSearchedCase(this); + listener.exitDescriptorField(this); } } } -SqlBaseParser.SearchedCaseContext = SearchedCaseContext; -class GroupingOperationContext extends PrimaryExpressionContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } +class CopartitionTablesContext extends antlr4.ParserRuleContext { - GROUPING() { - return this.getToken(SqlBaseParser.GROUPING, 0); - }; + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_copartitionTables; + } qualifiedName = function(i) { if(i===undefined) { @@ -16628,22 +20038,22 @@ class GroupingOperationContext extends PrimaryExpressionContext { enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterGroupingOperation(this); + listener.enterCopartitionTables(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitGroupingOperation(this); + listener.exitCopartitionTables(this); } } } -SqlBaseParser.GroupingOperationContext = GroupingOperationContext; -class StringContext extends antlr4.ParserRuleContext { + +class TypeParameterContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -16654,83 +20064,134 @@ class StringContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_string; + this.ruleIndex = SqlBaseParser.RULE_typeParameter; } + INTEGER_VALUE() { + return this.getToken(SqlBaseParser.INTEGER_VALUE, 0); + }; - - copyFrom(ctx) { - super.copyFrom(ctx); + type() { + return this.getTypedRuleContext(TypeContext,0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterTypeParameter(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitTypeParameter(this); } + } + } -class UnicodeStringLiteralContext extends StringContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class BaseTypeContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_baseType; } - UNICODE_STRING() { - return this.getToken(SqlBaseParser.UNICODE_STRING, 0); + TIME_WITH_TIME_ZONE() { + return this.getToken(SqlBaseParser.TIME_WITH_TIME_ZONE, 0); }; - UESCAPE() { - return this.getToken(SqlBaseParser.UESCAPE, 0); + TIMESTAMP_WITH_TIME_ZONE() { + return this.getToken(SqlBaseParser.TIMESTAMP_WITH_TIME_ZONE, 0); }; - STRING() { - return this.getToken(SqlBaseParser.STRING, 0); + DOUBLE_PRECISION() { + return this.getToken(SqlBaseParser.DOUBLE_PRECISION, 0); + }; + + qualifiedName() { + return this.getTypedRuleContext(QualifiedNameContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterUnicodeStringLiteral(this); + listener.enterBaseType(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitUnicodeStringLiteral(this); + listener.exitBaseType(this); } } } -SqlBaseParser.UnicodeStringLiteralContext = UnicodeStringLiteralContext; -class BasicStringLiteralContext extends StringContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class WhenClauseContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_whenClause; + this.condition = null; + this.result = null; } - STRING() { - return this.getToken(SqlBaseParser.STRING, 0); + WHEN() { + return this.getToken(SqlBaseParser.WHEN, 0); + }; + + THEN() { + return this.getToken(SqlBaseParser.THEN, 0); + }; + + expression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ExpressionContext); + } else { + return this.getTypedRuleContext(ExpressionContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterBasicStringLiteral(this); + listener.enterWhenClause(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitBasicStringLiteral(this); + listener.exitWhenClause(this); } } } -SqlBaseParser.BasicStringLiteralContext = BasicStringLiteralContext; -class NullTreatmentContext extends antlr4.ParserRuleContext { + +class FilterContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -16741,30 +20202,30 @@ class NullTreatmentContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_nullTreatment; + this.ruleIndex = SqlBaseParser.RULE_filter; } - IGNORE() { - return this.getToken(SqlBaseParser.IGNORE, 0); + FILTER() { + return this.getToken(SqlBaseParser.FILTER, 0); }; - NULLS() { - return this.getToken(SqlBaseParser.NULLS, 0); + WHERE() { + return this.getToken(SqlBaseParser.WHERE, 0); }; - RESPECT() { - return this.getToken(SqlBaseParser.RESPECT, 0); + booleanExpression() { + return this.getTypedRuleContext(BooleanExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterNullTreatment(this); + listener.enterFilter(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitNullTreatment(this); + listener.exitFilter(this); } } @@ -16773,7 +20234,7 @@ class NullTreatmentContext extends antlr4.ParserRuleContext { -class TimeZoneSpecifierContext extends antlr4.ParserRuleContext { +class MergeCaseContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -16784,7 +20245,7 @@ class TimeZoneSpecifierContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_timeZoneSpecifier; + this.ruleIndex = SqlBaseParser.RULE_mergeCase; } @@ -16796,79 +20257,163 @@ class TimeZoneSpecifierContext extends antlr4.ParserRuleContext { } -class TimeZoneIntervalContext extends TimeZoneSpecifierContext { +class MergeInsertContext extends MergeCaseContext { constructor(parser, ctx) { super(parser); + this._identifier = null;; + this.columns = [];; + this._expression = null;; + this.values = [];; super.copyFrom(ctx); } - TIME() { - return this.getToken(SqlBaseParser.TIME, 0); + WHEN() { + return this.getToken(SqlBaseParser.WHEN, 0); }; - ZONE() { - return this.getToken(SqlBaseParser.ZONE, 0); + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); }; - interval() { - return this.getTypedRuleContext(IntervalContext,0); + MATCHED() { + return this.getToken(SqlBaseParser.MATCHED, 0); + }; + + THEN() { + return this.getToken(SqlBaseParser.THEN, 0); + }; + + INSERT() { + return this.getToken(SqlBaseParser.INSERT, 0); + }; + + VALUES() { + return this.getToken(SqlBaseParser.VALUES, 0); + }; + + expression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ExpressionContext); + } else { + return this.getTypedRuleContext(ExpressionContext,i); + } + }; + + identifier = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(IdentifierContext); + } else { + return this.getTypedRuleContext(IdentifierContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterTimeZoneInterval(this); + listener.enterMergeInsert(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitTimeZoneInterval(this); + listener.exitMergeInsert(this); } } } -SqlBaseParser.TimeZoneIntervalContext = TimeZoneIntervalContext; +SqlBaseParser.MergeInsertContext = MergeInsertContext; -class TimeZoneStringContext extends TimeZoneSpecifierContext { +class MergeUpdateContext extends MergeCaseContext { constructor(parser, ctx) { super(parser); + this._identifier = null;; + this.targetColumns = [];; + this._expression = null;; + this.values = [];; super.copyFrom(ctx); } - TIME() { - return this.getToken(SqlBaseParser.TIME, 0); + WHEN() { + return this.getToken(SqlBaseParser.WHEN, 0); }; - ZONE() { - return this.getToken(SqlBaseParser.ZONE, 0); + MATCHED() { + return this.getToken(SqlBaseParser.MATCHED, 0); }; - string() { - return this.getTypedRuleContext(StringContext,0); + THEN() { + return this.getToken(SqlBaseParser.THEN, 0); + }; + + UPDATE() { + return this.getToken(SqlBaseParser.UPDATE, 0); + }; + + SET() { + return this.getToken(SqlBaseParser.SET, 0); + }; + + EQ = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.EQ); + } else { + return this.getToken(SqlBaseParser.EQ, i); + } + }; + + + identifier = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(IdentifierContext); + } else { + return this.getTypedRuleContext(IdentifierContext,i); + } + }; + + expression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ExpressionContext); + } else { + return this.getTypedRuleContext(ExpressionContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterTimeZoneString(this); + listener.enterMergeUpdate(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitTimeZoneString(this); + listener.exitMergeUpdate(this); } } } -SqlBaseParser.TimeZoneStringContext = TimeZoneStringContext; +SqlBaseParser.MergeUpdateContext = MergeUpdateContext; -class ComparisonOperatorContext extends antlr4.ParserRuleContext { +class OverContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -16879,42 +20424,70 @@ class ComparisonOperatorContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_comparisonOperator; + this.ruleIndex = SqlBaseParser.RULE_over; + this._expression = null; + this.partition = []; } - EQ() { - return this.getToken(SqlBaseParser.EQ, 0); + OVER() { + return this.getToken(SqlBaseParser.OVER, 0); }; - NEQ() { - return this.getToken(SqlBaseParser.NEQ, 0); + PARTITION() { + return this.getToken(SqlBaseParser.PARTITION, 0); }; - LT() { - return this.getToken(SqlBaseParser.LT, 0); + BY = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTokens(SqlBaseParser.BY); + } else { + return this.getToken(SqlBaseParser.BY, i); + } }; - LTE() { - return this.getToken(SqlBaseParser.LTE, 0); + + ORDER() { + return this.getToken(SqlBaseParser.ORDER, 0); }; - GT() { - return this.getToken(SqlBaseParser.GT, 0); + sortItem = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(SortItemContext); + } else { + return this.getTypedRuleContext(SortItemContext,i); + } }; - GTE() { - return this.getToken(SqlBaseParser.GTE, 0); + windowFrame() { + return this.getTypedRuleContext(WindowFrameContext,0); + }; + + expression = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ExpressionContext); + } else { + return this.getTypedRuleContext(ExpressionContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterComparisonOperator(this); + listener.enterOver(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitComparisonOperator(this); + listener.exitOver(this); } } @@ -16923,7 +20496,7 @@ class ComparisonOperatorContext extends antlr4.ParserRuleContext { -class ComparisonQuantifierContext extends antlr4.ParserRuleContext { +class WindowFrameContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -16934,30 +20507,52 @@ class ComparisonQuantifierContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_comparisonQuantifier; + this.ruleIndex = SqlBaseParser.RULE_windowFrame; + this.frameType = null; + this.start = null; + this.end = null; } - ALL() { - return this.getToken(SqlBaseParser.ALL, 0); + RANGE() { + return this.getToken(SqlBaseParser.RANGE, 0); }; - SOME() { - return this.getToken(SqlBaseParser.SOME, 0); + frameBound = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(FrameBoundContext); + } else { + return this.getTypedRuleContext(FrameBoundContext,i); + } }; - ANY() { - return this.getToken(SqlBaseParser.ANY, 0); + ROWS() { + return this.getToken(SqlBaseParser.ROWS, 0); + }; + + GROUPS() { + return this.getToken(SqlBaseParser.GROUPS, 0); + }; + + BETWEEN() { + return this.getToken(SqlBaseParser.BETWEEN, 0); + }; + + AND() { + return this.getToken(SqlBaseParser.AND, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterComparisonQuantifier(this); + listener.enterWindowFrame(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitComparisonQuantifier(this); + listener.exitWindowFrame(this); } } @@ -16966,7 +20561,7 @@ class ComparisonQuantifierContext extends antlr4.ParserRuleContext { -class BooleanValueContext extends antlr4.ParserRuleContext { +class FrameBoundContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -16977,202 +20572,125 @@ class BooleanValueContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_booleanValue; + this.ruleIndex = SqlBaseParser.RULE_frameBound; } - TRUE() { - return this.getToken(SqlBaseParser.TRUE, 0); - }; - - FALSE() { - return this.getToken(SqlBaseParser.FALSE, 0); - }; - - enterRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.enterBooleanValue(this); - } - } - exitRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.exitBooleanValue(this); + + copyFrom(ctx) { + super.copyFrom(ctx); } - } - } +class BoundedFrameContext extends FrameBoundContext { -class IntervalContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_interval; - this.sign = null; - this.from = null; - this.to = null; + constructor(parser, ctx) { + super(parser); + this.boundType = null;; + super.copyFrom(ctx); } - INTERVAL() { - return this.getToken(SqlBaseParser.INTERVAL, 0); - }; - - string() { - return this.getTypedRuleContext(StringContext,0); - }; - - intervalField = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(IntervalFieldContext); - } else { - return this.getTypedRuleContext(IntervalFieldContext,i); - } - }; - - TO() { - return this.getToken(SqlBaseParser.TO, 0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; - PLUS() { - return this.getToken(SqlBaseParser.PLUS, 0); + PRECEDING() { + return this.getToken(SqlBaseParser.PRECEDING, 0); }; - MINUS() { - return this.getToken(SqlBaseParser.MINUS, 0); + FOLLOWING() { + return this.getToken(SqlBaseParser.FOLLOWING, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterInterval(this); + listener.enterBoundedFrame(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitInterval(this); + listener.exitBoundedFrame(this); } } -} - - - -class IntervalFieldContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_intervalField; - } - - YEAR() { - return this.getToken(SqlBaseParser.YEAR, 0); - }; - - MONTH() { - return this.getToken(SqlBaseParser.MONTH, 0); - }; +} - DAY() { - return this.getToken(SqlBaseParser.DAY, 0); - }; +SqlBaseParser.BoundedFrameContext = BoundedFrameContext; - HOUR() { - return this.getToken(SqlBaseParser.HOUR, 0); +class UnboundedFrameContext extends FrameBoundContext { + + constructor(parser, ctx) { + super(parser); + this.boundType = null;; + super.copyFrom(ctx); + } + + UNBOUNDED() { + return this.getToken(SqlBaseParser.UNBOUNDED, 0); }; - MINUTE() { - return this.getToken(SqlBaseParser.MINUTE, 0); + PRECEDING() { + return this.getToken(SqlBaseParser.PRECEDING, 0); }; - SECOND() { - return this.getToken(SqlBaseParser.SECOND, 0); + FOLLOWING() { + return this.getToken(SqlBaseParser.FOLLOWING, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterIntervalField(this); + listener.enterUnboundedFrame(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitIntervalField(this); + listener.exitUnboundedFrame(this); } } } +SqlBaseParser.UnboundedFrameContext = UnboundedFrameContext; +class CurrentRowBoundContext extends FrameBoundContext { -class NormalFormContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_normalForm; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - NFD() { - return this.getToken(SqlBaseParser.NFD, 0); - }; - - NFC() { - return this.getToken(SqlBaseParser.NFC, 0); - }; - - NFKD() { - return this.getToken(SqlBaseParser.NFKD, 0); + CURRENT() { + return this.getToken(SqlBaseParser.CURRENT, 0); }; - NFKC() { - return this.getToken(SqlBaseParser.NFKC, 0); + ROW() { + return this.getToken(SqlBaseParser.ROW, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterNormalForm(this); + listener.enterCurrentRowBound(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitNormalForm(this); + listener.exitCurrentRowBound(this); } } } +SqlBaseParser.CurrentRowBoundContext = CurrentRowBoundContext; - -class TypesContext extends antlr4.ParserRuleContext { +class UpdateAssignmentContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -17183,29 +20701,30 @@ class TypesContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_types; + this.ruleIndex = SqlBaseParser.RULE_updateAssignment; } - type = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(TypeContext); - } else { - return this.getTypedRuleContext(TypeContext,i); - } + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); + }; + + EQ() { + return this.getToken(SqlBaseParser.EQ, 0); + }; + + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterTypes(this); + listener.enterUpdateAssignment(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitTypes(this); + listener.exitUpdateAssignment(this); } } @@ -17214,7 +20733,7 @@ class TypesContext extends antlr4.ParserRuleContext { -class TypeContext extends antlr4.ParserRuleContext { +class ExplainOptionContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -17225,144 +20744,105 @@ class TypeContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_type; - this.from = null; - this.to = null; + this.ruleIndex = SqlBaseParser.RULE_explainOption; } - ARRAY() { - return this.getToken(SqlBaseParser.ARRAY, 0); - }; - - LT() { - return this.getToken(SqlBaseParser.LT, 0); - }; - - type = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(TypeContext); - } else { - return this.getTypedRuleContext(TypeContext,i); - } - }; - GT() { - return this.getToken(SqlBaseParser.GT, 0); - }; + + copyFrom(ctx) { + super.copyFrom(ctx); + } - MAP() { - return this.getToken(SqlBaseParser.MAP, 0); - }; +} - ROW() { - return this.getToken(SqlBaseParser.ROW, 0); - }; - identifier = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(IdentifierContext); - } else { - return this.getTypedRuleContext(IdentifierContext,i); - } - }; +class ExplainFormatContext extends ExplainOptionContext { - baseType() { - return this.getTypedRuleContext(BaseTypeContext,0); - }; + constructor(parser, ctx) { + super(parser); + this.value = null;; + super.copyFrom(ctx); + } - typeParameter = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(TypeParameterContext); - } else { - return this.getTypedRuleContext(TypeParameterContext,i); - } + FORMAT() { + return this.getToken(SqlBaseParser.FORMAT, 0); }; - INTERVAL() { - return this.getToken(SqlBaseParser.INTERVAL, 0); + TEXT() { + return this.getToken(SqlBaseParser.TEXT, 0); }; - TO() { - return this.getToken(SqlBaseParser.TO, 0); + GRAPHVIZ() { + return this.getToken(SqlBaseParser.GRAPHVIZ, 0); }; - intervalField = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(IntervalFieldContext); - } else { - return this.getTypedRuleContext(IntervalFieldContext,i); - } + JSON() { + return this.getToken(SqlBaseParser.JSON, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterType(this); + listener.enterExplainFormat(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitType(this); + listener.exitExplainFormat(this); } } } +SqlBaseParser.ExplainFormatContext = ExplainFormatContext; +class ExplainTypeContext extends ExplainOptionContext { -class TypeParameterContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_typeParameter; + constructor(parser, ctx) { + super(parser); + this.value = null;; + super.copyFrom(ctx); } - INTEGER_VALUE() { - return this.getToken(SqlBaseParser.INTEGER_VALUE, 0); + TYPE() { + return this.getToken(SqlBaseParser.TYPE, 0); }; - type() { - return this.getTypedRuleContext(TypeContext,0); + LOGICAL() { + return this.getToken(SqlBaseParser.LOGICAL, 0); + }; + + DISTRIBUTED() { + return this.getToken(SqlBaseParser.DISTRIBUTED, 0); + }; + + VALIDATE() { + return this.getToken(SqlBaseParser.VALIDATE, 0); + }; + + IO() { + return this.getToken(SqlBaseParser.IO, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterTypeParameter(this); + listener.enterExplainType(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitTypeParameter(this); + listener.exitExplainType(this); } } } +SqlBaseParser.ExplainTypeContext = ExplainTypeContext; - -class BaseTypeContext extends antlr4.ParserRuleContext { +class TransactionModeContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -17373,95 +20853,92 @@ class BaseTypeContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_baseType; + this.ruleIndex = SqlBaseParser.RULE_transactionMode; } - TIME_WITH_TIME_ZONE() { - return this.getToken(SqlBaseParser.TIME_WITH_TIME_ZONE, 0); - }; - TIMESTAMP_WITH_TIME_ZONE() { - return this.getToken(SqlBaseParser.TIMESTAMP_WITH_TIME_ZONE, 0); + + copyFrom(ctx) { + super.copyFrom(ctx); + } + +} + + +class TransactionAccessModeContext extends TransactionModeContext { + + constructor(parser, ctx) { + super(parser); + this.accessMode = null;; + super.copyFrom(ctx); + } + + READ() { + return this.getToken(SqlBaseParser.READ, 0); }; - DOUBLE_PRECISION() { - return this.getToken(SqlBaseParser.DOUBLE_PRECISION, 0); + ONLY() { + return this.getToken(SqlBaseParser.ONLY, 0); }; - qualifiedName() { - return this.getTypedRuleContext(QualifiedNameContext,0); + WRITE() { + return this.getToken(SqlBaseParser.WRITE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterBaseType(this); + listener.enterTransactionAccessMode(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitBaseType(this); + listener.exitTransactionAccessMode(this); } } } +SqlBaseParser.TransactionAccessModeContext = TransactionAccessModeContext; +class IsolationLevelContext extends TransactionModeContext { -class WhenClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_whenClause; - this.condition = null; - this.result = null; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - WHEN() { - return this.getToken(SqlBaseParser.WHEN, 0); + ISOLATION() { + return this.getToken(SqlBaseParser.ISOLATION, 0); }; - THEN() { - return this.getToken(SqlBaseParser.THEN, 0); + LEVEL() { + return this.getToken(SqlBaseParser.LEVEL, 0); }; - expression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExpressionContext); - } else { - return this.getTypedRuleContext(ExpressionContext,i); - } + levelOfIsolation() { + return this.getTypedRuleContext(LevelOfIsolationContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterWhenClause(this); + listener.enterIsolationLevel(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitWhenClause(this); + listener.exitIsolationLevel(this); } } } +SqlBaseParser.IsolationLevelContext = IsolationLevelContext; - -class FilterContext extends antlr4.ParserRuleContext { +class LevelOfIsolationContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -17472,187 +20949,143 @@ class FilterContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_filter; + this.ruleIndex = SqlBaseParser.RULE_levelOfIsolation; } - FILTER() { - return this.getToken(SqlBaseParser.FILTER, 0); - }; - WHERE() { - return this.getToken(SqlBaseParser.WHERE, 0); + + copyFrom(ctx) { + super.copyFrom(ctx); + } + +} + + +class ReadUncommittedContext extends LevelOfIsolationContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + READ() { + return this.getToken(SqlBaseParser.READ, 0); }; - booleanExpression() { - return this.getTypedRuleContext(BooleanExpressionContext,0); + UNCOMMITTED() { + return this.getToken(SqlBaseParser.UNCOMMITTED, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterFilter(this); + listener.enterReadUncommitted(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitFilter(this); + listener.exitReadUncommitted(this); } } } +SqlBaseParser.ReadUncommittedContext = ReadUncommittedContext; +class SerializableContext extends LevelOfIsolationContext { -class OverContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_over; - this._expression = null; - this.partition = []; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - OVER() { - return this.getToken(SqlBaseParser.OVER, 0); + SERIALIZABLE() { + return this.getToken(SqlBaseParser.SERIALIZABLE, 0); }; - PARTITION() { - return this.getToken(SqlBaseParser.PARTITION, 0); - }; + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterSerializable(this); + } + } - BY = function(i) { - if(i===undefined) { - i = null; + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitSerializable(this); } - if(i===null) { - return this.getTokens(SqlBaseParser.BY); - } else { - return this.getToken(SqlBaseParser.BY, i); - } - }; + } - ORDER() { - return this.getToken(SqlBaseParser.ORDER, 0); - }; +} - sortItem = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(SortItemContext); - } else { - return this.getTypedRuleContext(SortItemContext,i); - } - }; +SqlBaseParser.SerializableContext = SerializableContext; - windowFrame() { - return this.getTypedRuleContext(WindowFrameContext,0); +class ReadCommittedContext extends LevelOfIsolationContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + READ() { + return this.getToken(SqlBaseParser.READ, 0); }; - expression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExpressionContext); - } else { - return this.getTypedRuleContext(ExpressionContext,i); - } + COMMITTED() { + return this.getToken(SqlBaseParser.COMMITTED, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterOver(this); + listener.enterReadCommitted(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitOver(this); + listener.exitReadCommitted(this); } } } +SqlBaseParser.ReadCommittedContext = ReadCommittedContext; +class RepeatableReadContext extends LevelOfIsolationContext { -class WindowFrameContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_windowFrame; - this.frameType = null; - this.start = null; - this.end = null; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - RANGE() { - return this.getToken(SqlBaseParser.RANGE, 0); - }; - - frameBound = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(FrameBoundContext); - } else { - return this.getTypedRuleContext(FrameBoundContext,i); - } - }; - - ROWS() { - return this.getToken(SqlBaseParser.ROWS, 0); - }; - - GROUPS() { - return this.getToken(SqlBaseParser.GROUPS, 0); - }; - - BETWEEN() { - return this.getToken(SqlBaseParser.BETWEEN, 0); + REPEATABLE() { + return this.getToken(SqlBaseParser.REPEATABLE, 0); }; - AND() { - return this.getToken(SqlBaseParser.AND, 0); + READ() { + return this.getToken(SqlBaseParser.READ, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterWindowFrame(this); + listener.enterRepeatableRead(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitWindowFrame(this); + listener.exitRepeatableRead(this); } } } +SqlBaseParser.RepeatableReadContext = RepeatableReadContext; - -class FrameBoundContext extends antlr4.ParserRuleContext { +class CallArgumentContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -17663,7 +21096,7 @@ class FrameBoundContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_frameBound; + this.ruleIndex = SqlBaseParser.RULE_callArgument; } @@ -17675,113 +21108,114 @@ class FrameBoundContext extends antlr4.ParserRuleContext { } -class BoundedFrameContext extends FrameBoundContext { +class PositionalArgumentContext extends CallArgumentContext { constructor(parser, ctx) { super(parser); - this.boundType = null;; super.copyFrom(ctx); } - expression() { - return this.getTypedRuleContext(ExpressionContext,0); - }; - - PRECEDING() { - return this.getToken(SqlBaseParser.PRECEDING, 0); - }; - - FOLLOWING() { - return this.getToken(SqlBaseParser.FOLLOWING, 0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterBoundedFrame(this); + listener.enterPositionalArgument(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitBoundedFrame(this); + listener.exitPositionalArgument(this); } } } -SqlBaseParser.BoundedFrameContext = BoundedFrameContext; +SqlBaseParser.PositionalArgumentContext = PositionalArgumentContext; -class UnboundedFrameContext extends FrameBoundContext { +class NamedArgumentContext extends CallArgumentContext { constructor(parser, ctx) { super(parser); - this.boundType = null;; super.copyFrom(ctx); } - UNBOUNDED() { - return this.getToken(SqlBaseParser.UNBOUNDED, 0); - }; - - PRECEDING() { - return this.getToken(SqlBaseParser.PRECEDING, 0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; - FOLLOWING() { - return this.getToken(SqlBaseParser.FOLLOWING, 0); + expression() { + return this.getTypedRuleContext(ExpressionContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterUnboundedFrame(this); + listener.enterNamedArgument(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitUnboundedFrame(this); + listener.exitNamedArgument(this); } } } -SqlBaseParser.UnboundedFrameContext = UnboundedFrameContext; +SqlBaseParser.NamedArgumentContext = NamedArgumentContext; -class CurrentRowBoundContext extends FrameBoundContext { +class PrivilegeContext extends antlr4.ParserRuleContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_privilege; } - CURRENT() { - return this.getToken(SqlBaseParser.CURRENT, 0); + SELECT() { + return this.getToken(SqlBaseParser.SELECT, 0); }; - ROW() { - return this.getToken(SqlBaseParser.ROW, 0); + DELETE() { + return this.getToken(SqlBaseParser.DELETE, 0); + }; + + INSERT() { + return this.getToken(SqlBaseParser.INSERT, 0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCurrentRowBound(this); + listener.enterPrivilege(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCurrentRowBound(this); + listener.exitPrivilege(this); } } } -SqlBaseParser.CurrentRowBoundContext = CurrentRowBoundContext; -class UpdateAssignmentContext extends antlr4.ParserRuleContext { + +class QualifiedNameContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -17792,30 +21226,29 @@ class UpdateAssignmentContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_updateAssignment; + this.ruleIndex = SqlBaseParser.RULE_qualifiedName; } - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - EQ() { - return this.getToken(SqlBaseParser.EQ, 0); - }; - - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + identifier = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(IdentifierContext); + } else { + return this.getTypedRuleContext(IdentifierContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterUpdateAssignment(this); + listener.enterQualifiedName(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitUpdateAssignment(this); + listener.exitQualifiedName(this); } } @@ -17824,7 +21257,7 @@ class UpdateAssignmentContext extends antlr4.ParserRuleContext { -class ExplainOptionContext extends antlr4.ParserRuleContext { +class TableVersionExpressionContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -17835,7 +21268,7 @@ class ExplainOptionContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_explainOption; + this.ruleIndex = SqlBaseParser.RULE_tableVersionExpression; } @@ -17847,93 +21280,60 @@ class ExplainOptionContext extends antlr4.ParserRuleContext { } -class ExplainFormatContext extends ExplainOptionContext { +class TableVersionContext extends TableVersionExpressionContext { constructor(parser, ctx) { super(parser); - this.value = null;; + this.tableVersionType = null;; super.copyFrom(ctx); } - FORMAT() { - return this.getToken(SqlBaseParser.FORMAT, 0); - }; - - TEXT() { - return this.getToken(SqlBaseParser.TEXT, 0); - }; - - GRAPHVIZ() { - return this.getToken(SqlBaseParser.GRAPHVIZ, 0); + FOR() { + return this.getToken(SqlBaseParser.FOR, 0); }; - JSON() { - return this.getToken(SqlBaseParser.JSON, 0); + tableVersionState() { + return this.getTypedRuleContext(TableVersionStateContext,0); }; - enterRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.enterExplainFormat(this); - } - } - - exitRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.exitExplainFormat(this); - } - } - - -} - -SqlBaseParser.ExplainFormatContext = ExplainFormatContext; - -class ExplainTypeContext extends ExplainOptionContext { - - constructor(parser, ctx) { - super(parser); - this.value = null;; - super.copyFrom(ctx); - } - - TYPE() { - return this.getToken(SqlBaseParser.TYPE, 0); + valueExpression() { + return this.getTypedRuleContext(ValueExpressionContext,0); }; - LOGICAL() { - return this.getToken(SqlBaseParser.LOGICAL, 0); + SYSTEM_TIME() { + return this.getToken(SqlBaseParser.SYSTEM_TIME, 0); }; - DISTRIBUTED() { - return this.getToken(SqlBaseParser.DISTRIBUTED, 0); + SYSTEM_VERSION() { + return this.getToken(SqlBaseParser.SYSTEM_VERSION, 0); }; - VALIDATE() { - return this.getToken(SqlBaseParser.VALIDATE, 0); + TIMESTAMP() { + return this.getToken(SqlBaseParser.TIMESTAMP, 0); }; - IO() { - return this.getToken(SqlBaseParser.IO, 0); + VERSION() { + return this.getToken(SqlBaseParser.VERSION, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterExplainType(this); + listener.enterTableVersion(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitExplainType(this); + listener.exitTableVersion(this); } } } -SqlBaseParser.ExplainTypeContext = ExplainTypeContext; +SqlBaseParser.TableVersionContext = TableVersionContext; -class TransactionModeContext extends antlr4.ParserRuleContext { +class TableVersionStateContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -17944,7 +21344,7 @@ class TransactionModeContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_transactionMode; + this.ruleIndex = SqlBaseParser.RULE_tableVersionState; } @@ -17956,80 +21356,67 @@ class TransactionModeContext extends antlr4.ParserRuleContext { } -class TransactionAccessModeContext extends TransactionModeContext { +class TableversionbeforeContext extends TableVersionStateContext { constructor(parser, ctx) { super(parser); - this.accessMode = null;; super.copyFrom(ctx); } - READ() { - return this.getToken(SqlBaseParser.READ, 0); - }; - - ONLY() { - return this.getToken(SqlBaseParser.ONLY, 0); - }; - - WRITE() { - return this.getToken(SqlBaseParser.WRITE, 0); + BEFORE() { + return this.getToken(SqlBaseParser.BEFORE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterTransactionAccessMode(this); + listener.enterTableversionbefore(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitTransactionAccessMode(this); + listener.exitTableversionbefore(this); } } } -SqlBaseParser.TransactionAccessModeContext = TransactionAccessModeContext; +SqlBaseParser.TableversionbeforeContext = TableversionbeforeContext; -class IsolationLevelContext extends TransactionModeContext { +class TableversionasofContext extends TableVersionStateContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - ISOLATION() { - return this.getToken(SqlBaseParser.ISOLATION, 0); - }; - - LEVEL() { - return this.getToken(SqlBaseParser.LEVEL, 0); + AS() { + return this.getToken(SqlBaseParser.AS, 0); }; - levelOfIsolation() { - return this.getTypedRuleContext(LevelOfIsolationContext,0); + OF() { + return this.getToken(SqlBaseParser.OF, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterIsolationLevel(this); + listener.enterTableversionasof(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitIsolationLevel(this); + listener.exitTableversionasof(this); } } } -SqlBaseParser.IsolationLevelContext = IsolationLevelContext; +SqlBaseParser.TableversionasofContext = TableversionasofContext; -class LevelOfIsolationContext extends antlr4.ParserRuleContext { +class GrantorContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -18040,7 +21427,7 @@ class LevelOfIsolationContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_levelOfIsolation; + this.ruleIndex = SqlBaseParser.RULE_grantor; } @@ -18052,131 +21439,91 @@ class LevelOfIsolationContext extends antlr4.ParserRuleContext { } -class ReadUncommittedContext extends LevelOfIsolationContext { - - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } - - READ() { - return this.getToken(SqlBaseParser.READ, 0); - }; - - UNCOMMITTED() { - return this.getToken(SqlBaseParser.UNCOMMITTED, 0); - }; - - enterRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.enterReadUncommitted(this); - } - } - - exitRule(listener) { - if(listener instanceof SqlBaseListener ) { - listener.exitReadUncommitted(this); - } - } - - -} - -SqlBaseParser.ReadUncommittedContext = ReadUncommittedContext; - -class SerializableContext extends LevelOfIsolationContext { +class CurrentUserGrantorContext extends GrantorContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - SERIALIZABLE() { - return this.getToken(SqlBaseParser.SERIALIZABLE, 0); + CURRENT_USER() { + return this.getToken(SqlBaseParser.CURRENT_USER, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSerializable(this); + listener.enterCurrentUserGrantor(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSerializable(this); + listener.exitCurrentUserGrantor(this); } } } -SqlBaseParser.SerializableContext = SerializableContext; +SqlBaseParser.CurrentUserGrantorContext = CurrentUserGrantorContext; -class ReadCommittedContext extends LevelOfIsolationContext { +class SpecifiedPrincipalContext extends GrantorContext { constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } - - READ() { - return this.getToken(SqlBaseParser.READ, 0); - }; + super(parser); + super.copyFrom(ctx); + } - COMMITTED() { - return this.getToken(SqlBaseParser.COMMITTED, 0); + principal() { + return this.getTypedRuleContext(PrincipalContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterReadCommitted(this); + listener.enterSpecifiedPrincipal(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitReadCommitted(this); + listener.exitSpecifiedPrincipal(this); } } } -SqlBaseParser.ReadCommittedContext = ReadCommittedContext; +SqlBaseParser.SpecifiedPrincipalContext = SpecifiedPrincipalContext; -class RepeatableReadContext extends LevelOfIsolationContext { +class CurrentRoleGrantorContext extends GrantorContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - REPEATABLE() { - return this.getToken(SqlBaseParser.REPEATABLE, 0); - }; - - READ() { - return this.getToken(SqlBaseParser.READ, 0); + CURRENT_ROLE() { + return this.getToken(SqlBaseParser.CURRENT_ROLE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRepeatableRead(this); + listener.enterCurrentRoleGrantor(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRepeatableRead(this); + listener.exitCurrentRoleGrantor(this); } } } -SqlBaseParser.RepeatableReadContext = RepeatableReadContext; +SqlBaseParser.CurrentRoleGrantorContext = CurrentRoleGrantorContext; -class CallArgumentContext extends antlr4.ParserRuleContext { +class PrincipalContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -18187,7 +21534,7 @@ class CallArgumentContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_callArgument; + this.ruleIndex = SqlBaseParser.RULE_principal; } @@ -18199,90 +21546,75 @@ class CallArgumentContext extends antlr4.ParserRuleContext { } -class PositionalArgumentContext extends CallArgumentContext { +class UnspecifiedPrincipalContext extends PrincipalContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterPositionalArgument(this); + listener.enterUnspecifiedPrincipal(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitPositionalArgument(this); + listener.exitUnspecifiedPrincipal(this); } } } -SqlBaseParser.PositionalArgumentContext = PositionalArgumentContext; +SqlBaseParser.UnspecifiedPrincipalContext = UnspecifiedPrincipalContext; -class NamedArgumentContext extends CallArgumentContext { +class UserPrincipalContext extends PrincipalContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + USER() { + return this.getToken(SqlBaseParser.USER, 0); }; - expression() { - return this.getTypedRuleContext(ExpressionContext,0); + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterNamedArgument(this); + listener.enterUserPrincipal(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitNamedArgument(this); + listener.exitUserPrincipal(this); } } } -SqlBaseParser.NamedArgumentContext = NamedArgumentContext; +SqlBaseParser.UserPrincipalContext = UserPrincipalContext; -class PrivilegeContext extends antlr4.ParserRuleContext { +class RolePrincipalContext extends PrincipalContext { - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_privilege; + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); } - SELECT() { - return this.getToken(SqlBaseParser.SELECT, 0); - }; - - DELETE() { - return this.getToken(SqlBaseParser.DELETE, 0); - }; - - INSERT() { - return this.getToken(SqlBaseParser.INSERT, 0); + ROLE() { + return this.getToken(SqlBaseParser.ROLE, 0); }; identifier() { @@ -18291,22 +21623,22 @@ class PrivilegeContext extends antlr4.ParserRuleContext { enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterPrivilege(this); + listener.enterRolePrincipal(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitPrivilege(this); + listener.exitRolePrincipal(this); } } } +SqlBaseParser.RolePrincipalContext = RolePrincipalContext; - -class QualifiedNameContext extends antlr4.ParserRuleContext { +class RolesContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -18317,7 +21649,7 @@ class QualifiedNameContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_qualifiedName; + this.ruleIndex = SqlBaseParser.RULE_roles; } identifier = function(i) { @@ -18333,13 +21665,13 @@ class QualifiedNameContext extends antlr4.ParserRuleContext { enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterQualifiedName(this); + listener.enterRoles(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitQualifiedName(this); + listener.exitRoles(this); } } @@ -18348,7 +21680,7 @@ class QualifiedNameContext extends antlr4.ParserRuleContext { -class TableVersionExpressionContext extends antlr4.ParserRuleContext { +class IdentifierContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -18359,7 +21691,7 @@ class TableVersionExpressionContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_tableVersionExpression; + this.ruleIndex = SqlBaseParser.RULE_identifier; } @@ -18371,171 +21703,123 @@ class TableVersionExpressionContext extends antlr4.ParserRuleContext { } -class TableVersionContext extends TableVersionExpressionContext { +class BackQuotedIdentifierContext extends IdentifierContext { constructor(parser, ctx) { super(parser); - this.tableVersionType = null;; super.copyFrom(ctx); } - FOR() { - return this.getToken(SqlBaseParser.FOR, 0); - }; - - AS() { - return this.getToken(SqlBaseParser.AS, 0); - }; - - OF() { - return this.getToken(SqlBaseParser.OF, 0); - }; - - valueExpression() { - return this.getTypedRuleContext(ValueExpressionContext,0); - }; - - SYSTEM_TIME() { - return this.getToken(SqlBaseParser.SYSTEM_TIME, 0); - }; - - SYSTEM_VERSION() { - return this.getToken(SqlBaseParser.SYSTEM_VERSION, 0); - }; - - TIMESTAMP() { - return this.getToken(SqlBaseParser.TIMESTAMP, 0); - }; - - VERSION() { - return this.getToken(SqlBaseParser.VERSION, 0); + BACKQUOTED_IDENTIFIER() { + return this.getToken(SqlBaseParser.BACKQUOTED_IDENTIFIER, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterTableVersion(this); + listener.enterBackQuotedIdentifier(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitTableVersion(this); + listener.exitBackQuotedIdentifier(this); } } } -SqlBaseParser.TableVersionContext = TableVersionContext; - -class GrantorContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_grantor; - } - - - - copyFrom(ctx) { - super.copyFrom(ctx); - } - -} - +SqlBaseParser.BackQuotedIdentifierContext = BackQuotedIdentifierContext; -class CurrentUserGrantorContext extends GrantorContext { +class QuotedIdentifierContext extends IdentifierContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - CURRENT_USER() { - return this.getToken(SqlBaseParser.CURRENT_USER, 0); + QUOTED_IDENTIFIER() { + return this.getToken(SqlBaseParser.QUOTED_IDENTIFIER, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCurrentUserGrantor(this); + listener.enterQuotedIdentifier(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCurrentUserGrantor(this); + listener.exitQuotedIdentifier(this); } } } -SqlBaseParser.CurrentUserGrantorContext = CurrentUserGrantorContext; +SqlBaseParser.QuotedIdentifierContext = QuotedIdentifierContext; -class SpecifiedPrincipalContext extends GrantorContext { +class DigitIdentifierContext extends IdentifierContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - principal() { - return this.getTypedRuleContext(PrincipalContext,0); + DIGIT_IDENTIFIER() { + return this.getToken(SqlBaseParser.DIGIT_IDENTIFIER, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterSpecifiedPrincipal(this); + listener.enterDigitIdentifier(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitSpecifiedPrincipal(this); + listener.exitDigitIdentifier(this); } } } -SqlBaseParser.SpecifiedPrincipalContext = SpecifiedPrincipalContext; +SqlBaseParser.DigitIdentifierContext = DigitIdentifierContext; -class CurrentRoleGrantorContext extends GrantorContext { +class UnquotedIdentifierContext extends IdentifierContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - CURRENT_ROLE() { - return this.getToken(SqlBaseParser.CURRENT_ROLE, 0); + IDENTIFIER() { + return this.getToken(SqlBaseParser.IDENTIFIER, 0); + }; + + nonReserved() { + return this.getTypedRuleContext(NonReservedContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterCurrentRoleGrantor(this); + listener.enterUnquotedIdentifier(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitCurrentRoleGrantor(this); + listener.exitUnquotedIdentifier(this); } } } -SqlBaseParser.CurrentRoleGrantorContext = CurrentRoleGrantorContext; +SqlBaseParser.UnquotedIdentifierContext = UnquotedIdentifierContext; -class PrincipalContext extends antlr4.ParserRuleContext { +class NumberContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -18546,7 +21830,7 @@ class PrincipalContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_principal; + this.ruleIndex = SqlBaseParser.RULE_number; } @@ -18558,99 +21842,130 @@ class PrincipalContext extends antlr4.ParserRuleContext { } -class UnspecifiedPrincipalContext extends PrincipalContext { +class DecimalLiteralContext extends NumberContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + DECIMAL_VALUE() { + return this.getToken(SqlBaseParser.DECIMAL_VALUE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterUnspecifiedPrincipal(this); + listener.enterDecimalLiteral(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitUnspecifiedPrincipal(this); + listener.exitDecimalLiteral(this); } } } -SqlBaseParser.UnspecifiedPrincipalContext = UnspecifiedPrincipalContext; +SqlBaseParser.DecimalLiteralContext = DecimalLiteralContext; -class UserPrincipalContext extends PrincipalContext { +class DoubleLiteralContext extends NumberContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + DOUBLE_VALUE() { + return this.getToken(SqlBaseParser.DOUBLE_VALUE, 0); + }; + + enterRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.enterDoubleLiteral(this); + } + } + + exitRule(listener) { + if(listener instanceof SqlBaseListener ) { + listener.exitDoubleLiteral(this); + } + } + + +} + +SqlBaseParser.DoubleLiteralContext = DoubleLiteralContext; + +class IntegerLiteralContext extends NumberContext { constructor(parser, ctx) { super(parser); super.copyFrom(ctx); } - USER() { - return this.getToken(SqlBaseParser.USER, 0); - }; - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + INTEGER_VALUE() { + return this.getToken(SqlBaseParser.INTEGER_VALUE, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterUserPrincipal(this); + listener.enterIntegerLiteral(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitUserPrincipal(this); + listener.exitIntegerLiteral(this); } } } -SqlBaseParser.UserPrincipalContext = UserPrincipalContext; +SqlBaseParser.IntegerLiteralContext = IntegerLiteralContext; -class RolePrincipalContext extends PrincipalContext { +class ConstraintSpecificationContext extends antlr4.ParserRuleContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_constraintSpecification; } - ROLE() { - return this.getToken(SqlBaseParser.ROLE, 0); + namedConstraintSpecification() { + return this.getTypedRuleContext(NamedConstraintSpecificationContext,0); }; - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); + unnamedConstraintSpecification() { + return this.getTypedRuleContext(UnnamedConstraintSpecificationContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRolePrincipal(this); + listener.enterConstraintSpecification(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRolePrincipal(this); + listener.exitConstraintSpecification(this); } } } -SqlBaseParser.RolePrincipalContext = RolePrincipalContext; -class RolesContext extends antlr4.ParserRuleContext { + +class NamedConstraintSpecificationContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -18661,29 +21976,31 @@ class RolesContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_roles; + this.ruleIndex = SqlBaseParser.RULE_namedConstraintSpecification; + this.name = null; } - identifier = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(IdentifierContext); - } else { - return this.getTypedRuleContext(IdentifierContext,i); - } + CONSTRAINT() { + return this.getToken(SqlBaseParser.CONSTRAINT, 0); + }; + + unnamedConstraintSpecification() { + return this.getTypedRuleContext(UnnamedConstraintSpecificationContext,0); + }; + + identifier() { + return this.getTypedRuleContext(IdentifierContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterRoles(this); + listener.enterNamedConstraintSpecification(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitRoles(this); + listener.exitNamedConstraintSpecification(this); } } @@ -18692,7 +22009,7 @@ class RolesContext extends antlr4.ParserRuleContext { -class IdentifierContext extends antlr4.ParserRuleContext { +class UnnamedConstraintSpecificationContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -18703,135 +22020,167 @@ class IdentifierContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_identifier; + this.ruleIndex = SqlBaseParser.RULE_unnamedConstraintSpecification; } + constraintType() { + return this.getTypedRuleContext(ConstraintTypeContext,0); + }; - - copyFrom(ctx) { - super.copyFrom(ctx); - } - -} - - -class BackQuotedIdentifierContext extends IdentifierContext { - - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } + columnAliases() { + return this.getTypedRuleContext(ColumnAliasesContext,0); + }; - BACKQUOTED_IDENTIFIER() { - return this.getToken(SqlBaseParser.BACKQUOTED_IDENTIFIER, 0); + constraintQualifiers() { + return this.getTypedRuleContext(ConstraintQualifiersContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterBackQuotedIdentifier(this); + listener.enterUnnamedConstraintSpecification(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitBackQuotedIdentifier(this); + listener.exitUnnamedConstraintSpecification(this); } } } -SqlBaseParser.BackQuotedIdentifierContext = BackQuotedIdentifierContext; -class QuotedIdentifierContext extends IdentifierContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class ConstraintTypeContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_constraintType; } - QUOTED_IDENTIFIER() { - return this.getToken(SqlBaseParser.QUOTED_IDENTIFIER, 0); + UNIQUE() { + return this.getToken(SqlBaseParser.UNIQUE, 0); + }; + + PRIMARY() { + return this.getToken(SqlBaseParser.PRIMARY, 0); + }; + + KEY() { + return this.getToken(SqlBaseParser.KEY, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterQuotedIdentifier(this); + listener.enterConstraintType(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitQuotedIdentifier(this); + listener.exitConstraintType(this); } } } -SqlBaseParser.QuotedIdentifierContext = QuotedIdentifierContext; -class DigitIdentifierContext extends IdentifierContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class ConstraintQualifiersContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_constraintQualifiers; } - DIGIT_IDENTIFIER() { - return this.getToken(SqlBaseParser.DIGIT_IDENTIFIER, 0); + constraintQualifier = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ConstraintQualifierContext); + } else { + return this.getTypedRuleContext(ConstraintQualifierContext,i); + } }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDigitIdentifier(this); + listener.enterConstraintQualifiers(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDigitIdentifier(this); + listener.exitConstraintQualifiers(this); } } } -SqlBaseParser.DigitIdentifierContext = DigitIdentifierContext; -class UnquotedIdentifierContext extends IdentifierContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class ConstraintQualifierContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_constraintQualifier; } - IDENTIFIER() { - return this.getToken(SqlBaseParser.IDENTIFIER, 0); + constraintEnabled() { + return this.getTypedRuleContext(ConstraintEnabledContext,0); }; - nonReserved() { - return this.getTypedRuleContext(NonReservedContext,0); + constraintRely() { + return this.getTypedRuleContext(ConstraintRelyContext,0); + }; + + constraintEnforced() { + return this.getTypedRuleContext(ConstraintEnforcedContext,0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterUnquotedIdentifier(this); + listener.enterConstraintQualifier(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitUnquotedIdentifier(this); + listener.exitConstraintQualifier(this); } } } -SqlBaseParser.UnquotedIdentifierContext = UnquotedIdentifierContext; -class NumberContext extends antlr4.ParserRuleContext { + +class ConstraintRelyContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { if(parent===undefined) { @@ -18842,101 +22191,111 @@ class NumberContext extends antlr4.ParserRuleContext { } super(parent, invokingState); this.parser = parser; - this.ruleIndex = SqlBaseParser.RULE_number; + this.ruleIndex = SqlBaseParser.RULE_constraintRely; } + RELY() { + return this.getToken(SqlBaseParser.RELY, 0); + }; - - copyFrom(ctx) { - super.copyFrom(ctx); - } - -} - - -class DecimalLiteralContext extends NumberContext { - - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); - } - - DECIMAL_VALUE() { - return this.getToken(SqlBaseParser.DECIMAL_VALUE, 0); + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDecimalLiteral(this); + listener.enterConstraintRely(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDecimalLiteral(this); + listener.exitConstraintRely(this); } } } -SqlBaseParser.DecimalLiteralContext = DecimalLiteralContext; -class DoubleLiteralContext extends NumberContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class ConstraintEnabledContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_constraintEnabled; } - DOUBLE_VALUE() { - return this.getToken(SqlBaseParser.DOUBLE_VALUE, 0); + ENABLED() { + return this.getToken(SqlBaseParser.ENABLED, 0); + }; + + DISABLED() { + return this.getToken(SqlBaseParser.DISABLED, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterDoubleLiteral(this); + listener.enterConstraintEnabled(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitDoubleLiteral(this); + listener.exitConstraintEnabled(this); } } } -SqlBaseParser.DoubleLiteralContext = DoubleLiteralContext; -class IntegerLiteralContext extends NumberContext { - constructor(parser, ctx) { - super(parser); - super.copyFrom(ctx); +class ConstraintEnforcedContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = SqlBaseParser.RULE_constraintEnforced; } - INTEGER_VALUE() { - return this.getToken(SqlBaseParser.INTEGER_VALUE, 0); + ENFORCED() { + return this.getToken(SqlBaseParser.ENFORCED, 0); + }; + + NOT() { + return this.getToken(SqlBaseParser.NOT, 0); }; enterRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.enterIntegerLiteral(this); + listener.enterConstraintEnforced(this); } } exitRule(listener) { if(listener instanceof SqlBaseListener ) { - listener.exitIntegerLiteral(this); + listener.exitConstraintEnforced(this); } } } -SqlBaseParser.IntegerLiteralContext = IntegerLiteralContext; + class NonReservedContext extends antlr4.ParserRuleContext { @@ -18984,10 +22343,18 @@ class NonReservedContext extends antlr4.ParserRuleContext { return this.getToken(SqlBaseParser.AT, 0); }; + BEFORE() { + return this.getToken(SqlBaseParser.BEFORE, 0); + }; + BERNOULLI() { return this.getToken(SqlBaseParser.BERNOULLI, 0); }; + BRANCH() { + return this.getToken(SqlBaseParser.BRANCH, 0); + }; + CALL() { return this.getToken(SqlBaseParser.CALL, 0); }; @@ -19024,6 +22391,10 @@ class NonReservedContext extends antlr4.ParserRuleContext { return this.getToken(SqlBaseParser.COMMITTED, 0); }; + COPARTITION() { + return this.getToken(SqlBaseParser.COPARTITION, 0); + }; + CURRENT() { return this.getToken(SqlBaseParser.CURRENT, 0); }; @@ -19052,14 +22423,34 @@ class NonReservedContext extends antlr4.ParserRuleContext { return this.getToken(SqlBaseParser.DESC, 0); }; + DESCRIPTOR() { + return this.getToken(SqlBaseParser.DESCRIPTOR, 0); + }; + DETERMINISTIC() { return this.getToken(SqlBaseParser.DETERMINISTIC, 0); }; + DISABLED() { + return this.getToken(SqlBaseParser.DISABLED, 0); + }; + DISTRIBUTED() { return this.getToken(SqlBaseParser.DISTRIBUTED, 0); }; + EMPTY() { + return this.getToken(SqlBaseParser.EMPTY, 0); + }; + + ENABLED() { + return this.getToken(SqlBaseParser.ENABLED, 0); + }; + + ENFORCED() { + return this.getToken(SqlBaseParser.ENFORCED, 0); + }; + EXCLUDING() { return this.getToken(SqlBaseParser.EXCLUDING, 0); }; @@ -19160,6 +22551,14 @@ class NonReservedContext extends antlr4.ParserRuleContext { return this.getToken(SqlBaseParser.JSON, 0); }; + KEEP() { + return this.getToken(SqlBaseParser.KEEP, 0); + }; + + KEY() { + return this.getToken(SqlBaseParser.KEY, 0); + }; + LANGUAGE() { return this.getToken(SqlBaseParser.LANGUAGE, 0); }; @@ -19188,10 +22587,18 @@ class NonReservedContext extends antlr4.ParserRuleContext { return this.getToken(SqlBaseParser.MAP, 0); }; + MATCHED() { + return this.getToken(SqlBaseParser.MATCHED, 0); + }; + MATERIALIZED() { return this.getToken(SqlBaseParser.MATERIALIZED, 0); }; + MERGE() { + return this.getToken(SqlBaseParser.MERGE, 0); + }; + MINUTE() { return this.getToken(SqlBaseParser.MINUTE, 0); }; @@ -19280,6 +22687,10 @@ class NonReservedContext extends antlr4.ParserRuleContext { return this.getToken(SqlBaseParser.PRECEDING, 0); }; + PRIMARY() { + return this.getToken(SqlBaseParser.PRIMARY, 0); + }; + PRIVILEGES() { return this.getToken(SqlBaseParser.PRIVILEGES, 0); }; @@ -19288,6 +22699,10 @@ class NonReservedContext extends antlr4.ParserRuleContext { return this.getToken(SqlBaseParser.PROPERTIES, 0); }; + PRUNE() { + return this.getToken(SqlBaseParser.PRUNE, 0); + }; + RANGE() { return this.getToken(SqlBaseParser.RANGE, 0); }; @@ -19300,6 +22715,10 @@ class NonReservedContext extends antlr4.ParserRuleContext { return this.getToken(SqlBaseParser.REFRESH, 0); }; + RELY() { + return this.getToken(SqlBaseParser.RELY, 0); + }; + RENAME() { return this.getToken(SqlBaseParser.RENAME, 0); }; @@ -19432,6 +22851,10 @@ class NonReservedContext extends antlr4.ParserRuleContext { return this.getToken(SqlBaseParser.TABLESAMPLE, 0); }; + TAG() { + return this.getToken(SqlBaseParser.TAG, 0); + }; + TEMPORARY() { return this.getToken(SqlBaseParser.TEMPORARY, 0); }; @@ -19476,6 +22899,10 @@ class NonReservedContext extends antlr4.ParserRuleContext { return this.getToken(SqlBaseParser.UNCOMMITTED, 0); }; + UNIQUE() { + return this.getToken(SqlBaseParser.UNIQUE, 0); + }; + UPDATE() { return this.getToken(SqlBaseParser.UPDATE, 0); }; @@ -19561,6 +22988,7 @@ SqlBaseParser.LanguageContext = LanguageContext; SqlBaseParser.DeterminismContext = DeterminismContext; SqlBaseParser.NullCallClauseContext = NullCallClauseContext; SqlBaseParser.ExternalRoutineNameContext = ExternalRoutineNameContext; +SqlBaseParser.ViewSecurityContext = ViewSecurityContext; SqlBaseParser.QueryNoWithContext = QueryNoWithContext; SqlBaseParser.QueryTermContext = QueryTermContext; SqlBaseParser.QueryPrimaryContext = QueryPrimaryContext; @@ -19596,10 +23024,18 @@ SqlBaseParser.IntervalFieldContext = IntervalFieldContext; SqlBaseParser.NormalFormContext = NormalFormContext; SqlBaseParser.TypesContext = TypesContext; SqlBaseParser.TypeContext = TypeContext; +SqlBaseParser.TableFunctionCallContext = TableFunctionCallContext; +SqlBaseParser.TableFunctionArgumentContext = TableFunctionArgumentContext; +SqlBaseParser.TableArgumentContext = TableArgumentContext; +SqlBaseParser.TableArgumentRelationContext = TableArgumentRelationContext; +SqlBaseParser.DescriptorArgumentContext = DescriptorArgumentContext; +SqlBaseParser.DescriptorFieldContext = DescriptorFieldContext; +SqlBaseParser.CopartitionTablesContext = CopartitionTablesContext; SqlBaseParser.TypeParameterContext = TypeParameterContext; SqlBaseParser.BaseTypeContext = BaseTypeContext; SqlBaseParser.WhenClauseContext = WhenClauseContext; SqlBaseParser.FilterContext = FilterContext; +SqlBaseParser.MergeCaseContext = MergeCaseContext; SqlBaseParser.OverContext = OverContext; SqlBaseParser.WindowFrameContext = WindowFrameContext; SqlBaseParser.FrameBoundContext = FrameBoundContext; @@ -19611,9 +23047,19 @@ SqlBaseParser.CallArgumentContext = CallArgumentContext; SqlBaseParser.PrivilegeContext = PrivilegeContext; SqlBaseParser.QualifiedNameContext = QualifiedNameContext; SqlBaseParser.TableVersionExpressionContext = TableVersionExpressionContext; +SqlBaseParser.TableVersionStateContext = TableVersionStateContext; SqlBaseParser.GrantorContext = GrantorContext; SqlBaseParser.PrincipalContext = PrincipalContext; SqlBaseParser.RolesContext = RolesContext; SqlBaseParser.IdentifierContext = IdentifierContext; SqlBaseParser.NumberContext = NumberContext; +SqlBaseParser.ConstraintSpecificationContext = ConstraintSpecificationContext; +SqlBaseParser.NamedConstraintSpecificationContext = NamedConstraintSpecificationContext; +SqlBaseParser.UnnamedConstraintSpecificationContext = UnnamedConstraintSpecificationContext; +SqlBaseParser.ConstraintTypeContext = ConstraintTypeContext; +SqlBaseParser.ConstraintQualifiersContext = ConstraintQualifiersContext; +SqlBaseParser.ConstraintQualifierContext = ConstraintQualifierContext; +SqlBaseParser.ConstraintRelyContext = ConstraintRelyContext; +SqlBaseParser.ConstraintEnabledContext = ConstraintEnabledContext; +SqlBaseParser.ConstraintEnforcedContext = ConstraintEnforcedContext; SqlBaseParser.NonReservedContext = NonReservedContext;