diff --git a/src/platform/packages/shared/kbn-esql-ast/index.ts b/src/platform/packages/shared/kbn-esql-ast/index.ts index 92c175d2be4ea..3fb7f25ce64eb 100644 --- a/src/platform/packages/shared/kbn-esql-ast/index.ts +++ b/src/platform/packages/shared/kbn-esql-ast/index.ts @@ -11,7 +11,7 @@ export type { ESQLAst, ESQLAstItem, ESQLAstCommand, - ESQLAstMetricsCommand, + ESQLAstTimeseriesCommand, ESQLAstJoinCommand, ESQLCommand, ESQLCommandOption, diff --git a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_lexer.interp b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_lexer.interp index c45eb3952111b..1736bfb33f84d 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_lexer.interp +++ b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_lexer.interp @@ -15,6 +15,7 @@ null 'stats' 'where' null +null 'from' null null @@ -34,8 +35,6 @@ null null null null -'on' -'with' null null null @@ -54,10 +53,11 @@ null null null null -'by' 'and' +'as' 'asc' '=' +'by' '::' ':' ',' @@ -72,10 +72,12 @@ null 'not' 'null' 'nulls' +'on' 'or' '?' 'rlike' 'true' +'with' '==' '=~' '!=' @@ -128,7 +130,6 @@ null null null null -'as' null null null @@ -154,8 +155,9 @@ SORT STATS WHERE DEV_INLINESTATS +DEV_RERANK FROM -DEV_METRICS +DEV_TIME_SERIES DEV_FORK JOIN_LOOKUP DEV_JOIN_FULL @@ -173,8 +175,6 @@ UNKNOWN_CMD CHANGE_POINT_LINE_COMMENT CHANGE_POINT_MULTILINE_COMMENT CHANGE_POINT_WS -ON -WITH ENRICH_POLICY_NAME ENRICH_LINE_COMMENT ENRICH_MULTILINE_COMMENT @@ -193,10 +193,11 @@ PIPE QUOTED_STRING INTEGER_LITERAL DECIMAL_LITERAL -BY AND +AS ASC ASSIGN +BY CAST_OP COLON COMMA @@ -211,10 +212,12 @@ LIKE NOT NULL NULLS +ON OR PARAM RLIKE TRUE +WITH EQ CIEQ NEQ @@ -267,7 +270,6 @@ ID_PATTERN PROJECT_LINE_COMMENT PROJECT_MULTILINE_COMMENT PROJECT_WS -AS RENAME_LINE_COMMENT RENAME_MULTILINE_COMMENT RENAME_WS @@ -292,8 +294,9 @@ SORT STATS WHERE DEV_INLINESTATS +DEV_RERANK FROM -DEV_METRICS +DEV_TIME_SERIES DEV_FORK JOIN_LOOKUP DEV_JOIN_FULL @@ -320,8 +323,8 @@ CHANGE_POINT_MULTILINE_COMMENT CHANGE_POINT_WS ENRICH_PIPE ENRICH_OPENING_BRACKET -ON -WITH +ENRICH_ON +ENRICH_WITH ENRICH_POLICY_NAME_BODY ENRICH_POLICY_NAME ENRICH_MODE_UNQUOTED_VALUE @@ -367,10 +370,11 @@ UNQUOTED_ID_BODY QUOTED_STRING INTEGER_LITERAL DECIMAL_LITERAL -BY AND +AS ASC ASSIGN +BY CAST_OP COLON COMMA @@ -385,10 +389,12 @@ LIKE NOT NULL NULLS +ON OR PARAM RLIKE TRUE +WITH EQ CIEQ NEQ @@ -499,7 +505,7 @@ RENAME_PARAM RENAME_NAMED_OR_POSITIONAL_PARAM RENAME_DOUBLE_PARAMS RENAME_NAMED_OR_POSITIONAL_DOUBLE_PARAMS -AS +RENAME_AS RENAME_ID_PATTERN RENAME_LINE_COMMENT RENAME_MULTILINE_COMMENT @@ -533,4 +539,4 @@ RENAME_MODE SHOW_MODE atn: -[4, 0, 136, 1734, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 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, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 485, 8, 0, 10, 0, 12, 0, 488, 9, 0, 1, 0, 3, 0, 491, 8, 0, 1, 0, 3, 0, 494, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 503, 8, 1, 10, 1, 12, 1, 506, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 2, 514, 8, 2, 11, 2, 12, 2, 515, 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, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 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, 11, 1, 11, 1, 11, 1, 12, 1, 12, 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, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 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, 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, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 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, 4, 30, 765, 8, 30, 11, 30, 12, 30, 766, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 4, 46, 837, 8, 46, 11, 46, 12, 46, 838, 1, 46, 1, 46, 3, 46, 843, 8, 46, 1, 46, 4, 46, 846, 8, 46, 11, 46, 12, 46, 847, 1, 47, 1, 47, 1, 47, 1, 47, 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, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 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, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 4, 67, 938, 8, 67, 11, 67, 12, 67, 939, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 81, 1, 81, 3, 81, 991, 8, 81, 1, 81, 4, 81, 994, 8, 81, 11, 81, 12, 81, 995, 1, 82, 1, 82, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 3, 84, 1005, 8, 84, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 3, 86, 1012, 8, 86, 1, 87, 1, 87, 1, 87, 5, 87, 1017, 8, 87, 10, 87, 12, 87, 1020, 9, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 5, 87, 1028, 8, 87, 10, 87, 12, 87, 1031, 9, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1038, 8, 87, 1, 87, 3, 87, 1041, 8, 87, 3, 87, 1043, 8, 87, 1, 88, 4, 88, 1046, 8, 88, 11, 88, 12, 88, 1047, 1, 89, 4, 89, 1051, 8, 89, 11, 89, 12, 89, 1052, 1, 89, 1, 89, 5, 89, 1057, 8, 89, 10, 89, 12, 89, 1060, 9, 89, 1, 89, 1, 89, 4, 89, 1064, 8, 89, 11, 89, 12, 89, 1065, 1, 89, 4, 89, 1069, 8, 89, 11, 89, 12, 89, 1070, 1, 89, 1, 89, 5, 89, 1075, 8, 89, 10, 89, 12, 89, 1078, 9, 89, 3, 89, 1080, 8, 89, 1, 89, 1, 89, 1, 89, 1, 89, 4, 89, 1086, 8, 89, 11, 89, 12, 89, 1087, 1, 89, 1, 89, 3, 89, 1092, 8, 89, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 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, 101, 1, 101, 1, 101, 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, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 3, 128, 1223, 8, 128, 1, 128, 5, 128, 1226, 8, 128, 10, 128, 12, 128, 1229, 9, 128, 1, 128, 1, 128, 4, 128, 1233, 8, 128, 11, 128, 12, 128, 1234, 3, 128, 1237, 8, 128, 1, 129, 1, 129, 1, 129, 3, 129, 1242, 8, 129, 1, 129, 5, 129, 1245, 8, 129, 10, 129, 12, 129, 1248, 9, 129, 1, 129, 1, 129, 4, 129, 1252, 8, 129, 11, 129, 12, 129, 1253, 3, 129, 1256, 8, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 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, 5, 134, 1280, 8, 134, 10, 134, 12, 134, 1283, 9, 134, 1, 134, 1, 134, 3, 134, 1287, 8, 134, 1, 134, 4, 134, 1290, 8, 134, 11, 134, 12, 134, 1291, 3, 134, 1294, 8, 134, 1, 135, 1, 135, 4, 135, 1298, 8, 135, 11, 135, 12, 135, 1299, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 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, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 3, 148, 1360, 8, 148, 1, 149, 4, 149, 1363, 8, 149, 11, 149, 12, 149, 1364, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 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, 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, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 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, 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, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 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, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 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, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 1620, 8, 208, 1, 209, 1, 209, 3, 209, 1624, 8, 209, 1, 209, 5, 209, 1627, 8, 209, 10, 209, 12, 209, 1630, 9, 209, 1, 209, 1, 209, 3, 209, 1634, 8, 209, 1, 209, 4, 209, 1637, 8, 209, 11, 209, 12, 209, 1638, 3, 209, 1641, 8, 209, 1, 210, 1, 210, 4, 210, 1645, 8, 210, 11, 210, 12, 210, 1646, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 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, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 2, 504, 1029, 0, 232, 16, 1, 18, 2, 20, 3, 22, 4, 24, 5, 26, 6, 28, 7, 30, 8, 32, 9, 34, 10, 36, 11, 38, 12, 40, 13, 42, 14, 44, 15, 46, 16, 48, 17, 50, 18, 52, 19, 54, 20, 56, 21, 58, 22, 60, 23, 62, 24, 64, 25, 66, 26, 68, 27, 70, 28, 72, 29, 74, 30, 76, 31, 78, 0, 80, 0, 82, 0, 84, 0, 86, 0, 88, 0, 90, 0, 92, 32, 94, 33, 96, 34, 98, 0, 100, 0, 102, 35, 104, 36, 106, 0, 108, 37, 110, 0, 112, 38, 114, 39, 116, 40, 118, 0, 120, 0, 122, 0, 124, 0, 126, 0, 128, 0, 130, 0, 132, 0, 134, 0, 136, 0, 138, 0, 140, 41, 142, 42, 144, 43, 146, 0, 148, 0, 150, 44, 152, 45, 154, 46, 156, 47, 158, 0, 160, 0, 162, 48, 164, 49, 166, 50, 168, 51, 170, 0, 172, 0, 174, 0, 176, 0, 178, 0, 180, 0, 182, 0, 184, 0, 186, 0, 188, 0, 190, 52, 192, 53, 194, 54, 196, 55, 198, 56, 200, 57, 202, 58, 204, 59, 206, 60, 208, 61, 210, 62, 212, 63, 214, 64, 216, 65, 218, 66, 220, 67, 222, 68, 224, 69, 226, 70, 228, 71, 230, 72, 232, 73, 234, 74, 236, 75, 238, 76, 240, 77, 242, 78, 244, 79, 246, 80, 248, 81, 250, 82, 252, 83, 254, 84, 256, 85, 258, 86, 260, 87, 262, 88, 264, 89, 266, 90, 268, 91, 270, 0, 272, 92, 274, 93, 276, 94, 278, 95, 280, 96, 282, 97, 284, 98, 286, 0, 288, 99, 290, 100, 292, 101, 294, 102, 296, 0, 298, 0, 300, 0, 302, 0, 304, 0, 306, 0, 308, 0, 310, 103, 312, 0, 314, 104, 316, 0, 318, 0, 320, 105, 322, 106, 324, 107, 326, 0, 328, 0, 330, 108, 332, 109, 334, 110, 336, 0, 338, 111, 340, 0, 342, 0, 344, 112, 346, 0, 348, 0, 350, 0, 352, 0, 354, 0, 356, 113, 358, 114, 360, 115, 362, 0, 364, 0, 366, 0, 368, 0, 370, 0, 372, 0, 374, 0, 376, 116, 378, 117, 380, 118, 382, 0, 384, 0, 386, 0, 388, 0, 390, 119, 392, 120, 394, 121, 396, 0, 398, 0, 400, 0, 402, 0, 404, 0, 406, 0, 408, 0, 410, 0, 412, 122, 414, 123, 416, 124, 418, 0, 420, 0, 422, 0, 424, 0, 426, 0, 428, 0, 430, 0, 432, 0, 434, 0, 436, 125, 438, 126, 440, 127, 442, 128, 444, 0, 446, 0, 448, 0, 450, 0, 452, 0, 454, 0, 456, 0, 458, 0, 460, 129, 462, 0, 464, 130, 466, 131, 468, 132, 470, 0, 472, 133, 474, 134, 476, 135, 478, 136, 16, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 36, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 67, 67, 99, 99, 2, 0, 72, 72, 104, 104, 2, 0, 65, 65, 97, 97, 2, 0, 78, 78, 110, 110, 2, 0, 71, 71, 103, 103, 2, 0, 69, 69, 101, 101, 2, 0, 80, 80, 112, 112, 2, 0, 79, 79, 111, 111, 2, 0, 73, 73, 105, 105, 2, 0, 84, 84, 116, 116, 2, 0, 82, 82, 114, 114, 2, 0, 88, 88, 120, 120, 2, 0, 76, 76, 108, 108, 2, 0, 68, 68, 100, 100, 2, 0, 83, 83, 115, 115, 2, 0, 86, 86, 118, 118, 2, 0, 75, 75, 107, 107, 2, 0, 77, 77, 109, 109, 2, 0, 87, 87, 119, 119, 2, 0, 70, 70, 102, 102, 2, 0, 85, 85, 117, 117, 6, 0, 9, 10, 13, 13, 32, 32, 47, 47, 91, 91, 93, 93, 11, 0, 9, 10, 13, 13, 32, 32, 34, 35, 44, 44, 47, 47, 58, 58, 60, 60, 62, 63, 92, 92, 124, 124, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 8, 0, 34, 34, 78, 78, 82, 82, 84, 84, 92, 92, 110, 110, 114, 114, 116, 116, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 2, 0, 43, 43, 45, 45, 1, 0, 96, 96, 2, 0, 66, 66, 98, 98, 2, 0, 89, 89, 121, 121, 11, 0, 9, 10, 13, 13, 32, 32, 34, 34, 44, 44, 47, 47, 58, 58, 61, 61, 91, 91, 93, 93, 124, 124, 2, 0, 42, 42, 47, 47, 2, 0, 74, 74, 106, 106, 1765, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 1, 78, 1, 0, 0, 0, 1, 80, 1, 0, 0, 0, 1, 82, 1, 0, 0, 0, 1, 84, 1, 0, 0, 0, 1, 86, 1, 0, 0, 0, 1, 88, 1, 0, 0, 0, 1, 90, 1, 0, 0, 0, 1, 92, 1, 0, 0, 0, 1, 94, 1, 0, 0, 0, 1, 96, 1, 0, 0, 0, 2, 98, 1, 0, 0, 0, 2, 100, 1, 0, 0, 0, 2, 102, 1, 0, 0, 0, 2, 104, 1, 0, 0, 0, 2, 108, 1, 0, 0, 0, 2, 110, 1, 0, 0, 0, 2, 112, 1, 0, 0, 0, 2, 114, 1, 0, 0, 0, 2, 116, 1, 0, 0, 0, 3, 118, 1, 0, 0, 0, 3, 120, 1, 0, 0, 0, 3, 122, 1, 0, 0, 0, 3, 124, 1, 0, 0, 0, 3, 126, 1, 0, 0, 0, 3, 128, 1, 0, 0, 0, 3, 130, 1, 0, 0, 0, 3, 132, 1, 0, 0, 0, 3, 134, 1, 0, 0, 0, 3, 136, 1, 0, 0, 0, 3, 138, 1, 0, 0, 0, 3, 140, 1, 0, 0, 0, 3, 142, 1, 0, 0, 0, 3, 144, 1, 0, 0, 0, 4, 146, 1, 0, 0, 0, 4, 148, 1, 0, 0, 0, 4, 150, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 4, 154, 1, 0, 0, 0, 4, 156, 1, 0, 0, 0, 5, 158, 1, 0, 0, 0, 5, 160, 1, 0, 0, 0, 5, 162, 1, 0, 0, 0, 5, 164, 1, 0, 0, 0, 5, 166, 1, 0, 0, 0, 6, 168, 1, 0, 0, 0, 6, 190, 1, 0, 0, 0, 6, 192, 1, 0, 0, 0, 6, 194, 1, 0, 0, 0, 6, 196, 1, 0, 0, 0, 6, 198, 1, 0, 0, 0, 6, 200, 1, 0, 0, 0, 6, 202, 1, 0, 0, 0, 6, 204, 1, 0, 0, 0, 6, 206, 1, 0, 0, 0, 6, 208, 1, 0, 0, 0, 6, 210, 1, 0, 0, 0, 6, 212, 1, 0, 0, 0, 6, 214, 1, 0, 0, 0, 6, 216, 1, 0, 0, 0, 6, 218, 1, 0, 0, 0, 6, 220, 1, 0, 0, 0, 6, 222, 1, 0, 0, 0, 6, 224, 1, 0, 0, 0, 6, 226, 1, 0, 0, 0, 6, 228, 1, 0, 0, 0, 6, 230, 1, 0, 0, 0, 6, 232, 1, 0, 0, 0, 6, 234, 1, 0, 0, 0, 6, 236, 1, 0, 0, 0, 6, 238, 1, 0, 0, 0, 6, 240, 1, 0, 0, 0, 6, 242, 1, 0, 0, 0, 6, 244, 1, 0, 0, 0, 6, 246, 1, 0, 0, 0, 6, 248, 1, 0, 0, 0, 6, 250, 1, 0, 0, 0, 6, 252, 1, 0, 0, 0, 6, 254, 1, 0, 0, 0, 6, 256, 1, 0, 0, 0, 6, 258, 1, 0, 0, 0, 6, 260, 1, 0, 0, 0, 6, 262, 1, 0, 0, 0, 6, 264, 1, 0, 0, 0, 6, 266, 1, 0, 0, 0, 6, 268, 1, 0, 0, 0, 6, 270, 1, 0, 0, 0, 6, 272, 1, 0, 0, 0, 6, 274, 1, 0, 0, 0, 6, 276, 1, 0, 0, 0, 6, 278, 1, 0, 0, 0, 6, 280, 1, 0, 0, 0, 6, 282, 1, 0, 0, 0, 6, 284, 1, 0, 0, 0, 6, 288, 1, 0, 0, 0, 6, 290, 1, 0, 0, 0, 6, 292, 1, 0, 0, 0, 6, 294, 1, 0, 0, 0, 7, 296, 1, 0, 0, 0, 7, 298, 1, 0, 0, 0, 7, 300, 1, 0, 0, 0, 7, 302, 1, 0, 0, 0, 7, 304, 1, 0, 0, 0, 7, 306, 1, 0, 0, 0, 7, 308, 1, 0, 0, 0, 7, 310, 1, 0, 0, 0, 7, 314, 1, 0, 0, 0, 7, 316, 1, 0, 0, 0, 7, 318, 1, 0, 0, 0, 7, 320, 1, 0, 0, 0, 7, 322, 1, 0, 0, 0, 7, 324, 1, 0, 0, 0, 8, 326, 1, 0, 0, 0, 8, 328, 1, 0, 0, 0, 8, 330, 1, 0, 0, 0, 8, 332, 1, 0, 0, 0, 8, 334, 1, 0, 0, 0, 9, 336, 1, 0, 0, 0, 9, 338, 1, 0, 0, 0, 9, 340, 1, 0, 0, 0, 9, 342, 1, 0, 0, 0, 9, 344, 1, 0, 0, 0, 9, 346, 1, 0, 0, 0, 9, 348, 1, 0, 0, 0, 9, 350, 1, 0, 0, 0, 9, 352, 1, 0, 0, 0, 9, 354, 1, 0, 0, 0, 9, 356, 1, 0, 0, 0, 9, 358, 1, 0, 0, 0, 9, 360, 1, 0, 0, 0, 10, 362, 1, 0, 0, 0, 10, 364, 1, 0, 0, 0, 10, 366, 1, 0, 0, 0, 10, 368, 1, 0, 0, 0, 10, 370, 1, 0, 0, 0, 10, 372, 1, 0, 0, 0, 10, 374, 1, 0, 0, 0, 10, 376, 1, 0, 0, 0, 10, 378, 1, 0, 0, 0, 10, 380, 1, 0, 0, 0, 11, 382, 1, 0, 0, 0, 11, 384, 1, 0, 0, 0, 11, 386, 1, 0, 0, 0, 11, 388, 1, 0, 0, 0, 11, 390, 1, 0, 0, 0, 11, 392, 1, 0, 0, 0, 11, 394, 1, 0, 0, 0, 12, 396, 1, 0, 0, 0, 12, 398, 1, 0, 0, 0, 12, 400, 1, 0, 0, 0, 12, 402, 1, 0, 0, 0, 12, 404, 1, 0, 0, 0, 12, 406, 1, 0, 0, 0, 12, 408, 1, 0, 0, 0, 12, 410, 1, 0, 0, 0, 12, 412, 1, 0, 0, 0, 12, 414, 1, 0, 0, 0, 12, 416, 1, 0, 0, 0, 13, 418, 1, 0, 0, 0, 13, 420, 1, 0, 0, 0, 13, 422, 1, 0, 0, 0, 13, 424, 1, 0, 0, 0, 13, 426, 1, 0, 0, 0, 13, 428, 1, 0, 0, 0, 13, 430, 1, 0, 0, 0, 13, 436, 1, 0, 0, 0, 13, 438, 1, 0, 0, 0, 13, 440, 1, 0, 0, 0, 13, 442, 1, 0, 0, 0, 14, 444, 1, 0, 0, 0, 14, 446, 1, 0, 0, 0, 14, 448, 1, 0, 0, 0, 14, 450, 1, 0, 0, 0, 14, 452, 1, 0, 0, 0, 14, 454, 1, 0, 0, 0, 14, 456, 1, 0, 0, 0, 14, 458, 1, 0, 0, 0, 14, 460, 1, 0, 0, 0, 14, 462, 1, 0, 0, 0, 14, 464, 1, 0, 0, 0, 14, 466, 1, 0, 0, 0, 14, 468, 1, 0, 0, 0, 15, 470, 1, 0, 0, 0, 15, 472, 1, 0, 0, 0, 15, 474, 1, 0, 0, 0, 15, 476, 1, 0, 0, 0, 15, 478, 1, 0, 0, 0, 16, 480, 1, 0, 0, 0, 18, 497, 1, 0, 0, 0, 20, 513, 1, 0, 0, 0, 22, 519, 1, 0, 0, 0, 24, 535, 1, 0, 0, 0, 26, 544, 1, 0, 0, 0, 28, 554, 1, 0, 0, 0, 30, 564, 1, 0, 0, 0, 32, 571, 1, 0, 0, 0, 34, 578, 1, 0, 0, 0, 36, 586, 1, 0, 0, 0, 38, 592, 1, 0, 0, 0, 40, 599, 1, 0, 0, 0, 42, 607, 1, 0, 0, 0, 44, 615, 1, 0, 0, 0, 46, 630, 1, 0, 0, 0, 48, 637, 1, 0, 0, 0, 50, 648, 1, 0, 0, 0, 52, 656, 1, 0, 0, 0, 54, 665, 1, 0, 0, 0, 56, 673, 1, 0, 0, 0, 58, 681, 1, 0, 0, 0, 60, 690, 1, 0, 0, 0, 62, 702, 1, 0, 0, 0, 64, 714, 1, 0, 0, 0, 66, 721, 1, 0, 0, 0, 68, 728, 1, 0, 0, 0, 70, 740, 1, 0, 0, 0, 72, 747, 1, 0, 0, 0, 74, 756, 1, 0, 0, 0, 76, 764, 1, 0, 0, 0, 78, 770, 1, 0, 0, 0, 80, 775, 1, 0, 0, 0, 82, 779, 1, 0, 0, 0, 84, 783, 1, 0, 0, 0, 86, 787, 1, 0, 0, 0, 88, 791, 1, 0, 0, 0, 90, 795, 1, 0, 0, 0, 92, 799, 1, 0, 0, 0, 94, 803, 1, 0, 0, 0, 96, 807, 1, 0, 0, 0, 98, 811, 1, 0, 0, 0, 100, 816, 1, 0, 0, 0, 102, 821, 1, 0, 0, 0, 104, 826, 1, 0, 0, 0, 106, 833, 1, 0, 0, 0, 108, 842, 1, 0, 0, 0, 110, 849, 1, 0, 0, 0, 112, 853, 1, 0, 0, 0, 114, 857, 1, 0, 0, 0, 116, 861, 1, 0, 0, 0, 118, 865, 1, 0, 0, 0, 120, 871, 1, 0, 0, 0, 122, 875, 1, 0, 0, 0, 124, 879, 1, 0, 0, 0, 126, 883, 1, 0, 0, 0, 128, 887, 1, 0, 0, 0, 130, 891, 1, 0, 0, 0, 132, 895, 1, 0, 0, 0, 134, 899, 1, 0, 0, 0, 136, 903, 1, 0, 0, 0, 138, 907, 1, 0, 0, 0, 140, 911, 1, 0, 0, 0, 142, 915, 1, 0, 0, 0, 144, 919, 1, 0, 0, 0, 146, 923, 1, 0, 0, 0, 148, 928, 1, 0, 0, 0, 150, 937, 1, 0, 0, 0, 152, 941, 1, 0, 0, 0, 154, 945, 1, 0, 0, 0, 156, 949, 1, 0, 0, 0, 158, 953, 1, 0, 0, 0, 160, 958, 1, 0, 0, 0, 162, 963, 1, 0, 0, 0, 164, 967, 1, 0, 0, 0, 166, 971, 1, 0, 0, 0, 168, 975, 1, 0, 0, 0, 170, 979, 1, 0, 0, 0, 172, 981, 1, 0, 0, 0, 174, 983, 1, 0, 0, 0, 176, 986, 1, 0, 0, 0, 178, 988, 1, 0, 0, 0, 180, 997, 1, 0, 0, 0, 182, 999, 1, 0, 0, 0, 184, 1004, 1, 0, 0, 0, 186, 1006, 1, 0, 0, 0, 188, 1011, 1, 0, 0, 0, 190, 1042, 1, 0, 0, 0, 192, 1045, 1, 0, 0, 0, 194, 1091, 1, 0, 0, 0, 196, 1093, 1, 0, 0, 0, 198, 1096, 1, 0, 0, 0, 200, 1100, 1, 0, 0, 0, 202, 1104, 1, 0, 0, 0, 204, 1106, 1, 0, 0, 0, 206, 1109, 1, 0, 0, 0, 208, 1111, 1, 0, 0, 0, 210, 1113, 1, 0, 0, 0, 212, 1118, 1, 0, 0, 0, 214, 1120, 1, 0, 0, 0, 216, 1126, 1, 0, 0, 0, 218, 1132, 1, 0, 0, 0, 220, 1135, 1, 0, 0, 0, 222, 1138, 1, 0, 0, 0, 224, 1143, 1, 0, 0, 0, 226, 1148, 1, 0, 0, 0, 228, 1152, 1, 0, 0, 0, 230, 1157, 1, 0, 0, 0, 232, 1163, 1, 0, 0, 0, 234, 1166, 1, 0, 0, 0, 236, 1168, 1, 0, 0, 0, 238, 1174, 1, 0, 0, 0, 240, 1179, 1, 0, 0, 0, 242, 1182, 1, 0, 0, 0, 244, 1185, 1, 0, 0, 0, 246, 1188, 1, 0, 0, 0, 248, 1190, 1, 0, 0, 0, 250, 1193, 1, 0, 0, 0, 252, 1195, 1, 0, 0, 0, 254, 1198, 1, 0, 0, 0, 256, 1200, 1, 0, 0, 0, 258, 1202, 1, 0, 0, 0, 260, 1204, 1, 0, 0, 0, 262, 1206, 1, 0, 0, 0, 264, 1208, 1, 0, 0, 0, 266, 1210, 1, 0, 0, 0, 268, 1212, 1, 0, 0, 0, 270, 1215, 1, 0, 0, 0, 272, 1236, 1, 0, 0, 0, 274, 1255, 1, 0, 0, 0, 276, 1257, 1, 0, 0, 0, 278, 1262, 1, 0, 0, 0, 280, 1267, 1, 0, 0, 0, 282, 1272, 1, 0, 0, 0, 284, 1293, 1, 0, 0, 0, 286, 1295, 1, 0, 0, 0, 288, 1303, 1, 0, 0, 0, 290, 1305, 1, 0, 0, 0, 292, 1309, 1, 0, 0, 0, 294, 1313, 1, 0, 0, 0, 296, 1317, 1, 0, 0, 0, 298, 1322, 1, 0, 0, 0, 300, 1326, 1, 0, 0, 0, 302, 1330, 1, 0, 0, 0, 304, 1334, 1, 0, 0, 0, 306, 1339, 1, 0, 0, 0, 308, 1343, 1, 0, 0, 0, 310, 1347, 1, 0, 0, 0, 312, 1359, 1, 0, 0, 0, 314, 1362, 1, 0, 0, 0, 316, 1366, 1, 0, 0, 0, 318, 1370, 1, 0, 0, 0, 320, 1374, 1, 0, 0, 0, 322, 1378, 1, 0, 0, 0, 324, 1382, 1, 0, 0, 0, 326, 1386, 1, 0, 0, 0, 328, 1391, 1, 0, 0, 0, 330, 1396, 1, 0, 0, 0, 332, 1400, 1, 0, 0, 0, 334, 1404, 1, 0, 0, 0, 336, 1408, 1, 0, 0, 0, 338, 1413, 1, 0, 0, 0, 340, 1418, 1, 0, 0, 0, 342, 1422, 1, 0, 0, 0, 344, 1428, 1, 0, 0, 0, 346, 1437, 1, 0, 0, 0, 348, 1441, 1, 0, 0, 0, 350, 1445, 1, 0, 0, 0, 352, 1449, 1, 0, 0, 0, 354, 1453, 1, 0, 0, 0, 356, 1457, 1, 0, 0, 0, 358, 1461, 1, 0, 0, 0, 360, 1465, 1, 0, 0, 0, 362, 1469, 1, 0, 0, 0, 364, 1474, 1, 0, 0, 0, 366, 1478, 1, 0, 0, 0, 368, 1482, 1, 0, 0, 0, 370, 1486, 1, 0, 0, 0, 372, 1491, 1, 0, 0, 0, 374, 1495, 1, 0, 0, 0, 376, 1499, 1, 0, 0, 0, 378, 1503, 1, 0, 0, 0, 380, 1507, 1, 0, 0, 0, 382, 1511, 1, 0, 0, 0, 384, 1517, 1, 0, 0, 0, 386, 1521, 1, 0, 0, 0, 388, 1525, 1, 0, 0, 0, 390, 1529, 1, 0, 0, 0, 392, 1533, 1, 0, 0, 0, 394, 1537, 1, 0, 0, 0, 396, 1541, 1, 0, 0, 0, 398, 1546, 1, 0, 0, 0, 400, 1550, 1, 0, 0, 0, 402, 1554, 1, 0, 0, 0, 404, 1558, 1, 0, 0, 0, 406, 1562, 1, 0, 0, 0, 408, 1566, 1, 0, 0, 0, 410, 1570, 1, 0, 0, 0, 412, 1574, 1, 0, 0, 0, 414, 1578, 1, 0, 0, 0, 416, 1582, 1, 0, 0, 0, 418, 1586, 1, 0, 0, 0, 420, 1591, 1, 0, 0, 0, 422, 1595, 1, 0, 0, 0, 424, 1599, 1, 0, 0, 0, 426, 1603, 1, 0, 0, 0, 428, 1607, 1, 0, 0, 0, 430, 1611, 1, 0, 0, 0, 432, 1619, 1, 0, 0, 0, 434, 1640, 1, 0, 0, 0, 436, 1644, 1, 0, 0, 0, 438, 1648, 1, 0, 0, 0, 440, 1652, 1, 0, 0, 0, 442, 1656, 1, 0, 0, 0, 444, 1660, 1, 0, 0, 0, 446, 1665, 1, 0, 0, 0, 448, 1669, 1, 0, 0, 0, 450, 1673, 1, 0, 0, 0, 452, 1677, 1, 0, 0, 0, 454, 1681, 1, 0, 0, 0, 456, 1685, 1, 0, 0, 0, 458, 1689, 1, 0, 0, 0, 460, 1693, 1, 0, 0, 0, 462, 1696, 1, 0, 0, 0, 464, 1700, 1, 0, 0, 0, 466, 1704, 1, 0, 0, 0, 468, 1708, 1, 0, 0, 0, 470, 1712, 1, 0, 0, 0, 472, 1717, 1, 0, 0, 0, 474, 1722, 1, 0, 0, 0, 476, 1726, 1, 0, 0, 0, 478, 1730, 1, 0, 0, 0, 480, 481, 5, 47, 0, 0, 481, 482, 5, 47, 0, 0, 482, 486, 1, 0, 0, 0, 483, 485, 8, 0, 0, 0, 484, 483, 1, 0, 0, 0, 485, 488, 1, 0, 0, 0, 486, 484, 1, 0, 0, 0, 486, 487, 1, 0, 0, 0, 487, 490, 1, 0, 0, 0, 488, 486, 1, 0, 0, 0, 489, 491, 5, 13, 0, 0, 490, 489, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, 493, 1, 0, 0, 0, 492, 494, 5, 10, 0, 0, 493, 492, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 496, 6, 0, 0, 0, 496, 17, 1, 0, 0, 0, 497, 498, 5, 47, 0, 0, 498, 499, 5, 42, 0, 0, 499, 504, 1, 0, 0, 0, 500, 503, 3, 18, 1, 0, 501, 503, 9, 0, 0, 0, 502, 500, 1, 0, 0, 0, 502, 501, 1, 0, 0, 0, 503, 506, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 504, 502, 1, 0, 0, 0, 505, 507, 1, 0, 0, 0, 506, 504, 1, 0, 0, 0, 507, 508, 5, 42, 0, 0, 508, 509, 5, 47, 0, 0, 509, 510, 1, 0, 0, 0, 510, 511, 6, 1, 0, 0, 511, 19, 1, 0, 0, 0, 512, 514, 7, 1, 0, 0, 513, 512, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 513, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 518, 6, 2, 0, 0, 518, 21, 1, 0, 0, 0, 519, 520, 4, 3, 0, 0, 520, 521, 7, 2, 0, 0, 521, 522, 7, 3, 0, 0, 522, 523, 7, 4, 0, 0, 523, 524, 7, 5, 0, 0, 524, 525, 7, 6, 0, 0, 525, 526, 7, 7, 0, 0, 526, 527, 5, 95, 0, 0, 527, 528, 7, 8, 0, 0, 528, 529, 7, 9, 0, 0, 529, 530, 7, 10, 0, 0, 530, 531, 7, 5, 0, 0, 531, 532, 7, 11, 0, 0, 532, 533, 1, 0, 0, 0, 533, 534, 6, 3, 1, 0, 534, 23, 1, 0, 0, 0, 535, 536, 7, 7, 0, 0, 536, 537, 7, 5, 0, 0, 537, 538, 7, 12, 0, 0, 538, 539, 7, 10, 0, 0, 539, 540, 7, 2, 0, 0, 540, 541, 7, 3, 0, 0, 541, 542, 1, 0, 0, 0, 542, 543, 6, 4, 2, 0, 543, 25, 1, 0, 0, 0, 544, 545, 7, 7, 0, 0, 545, 546, 7, 13, 0, 0, 546, 547, 7, 8, 0, 0, 547, 548, 7, 14, 0, 0, 548, 549, 7, 4, 0, 0, 549, 550, 7, 10, 0, 0, 550, 551, 7, 5, 0, 0, 551, 552, 1, 0, 0, 0, 552, 553, 6, 5, 3, 0, 553, 27, 1, 0, 0, 0, 554, 555, 7, 15, 0, 0, 555, 556, 7, 10, 0, 0, 556, 557, 7, 16, 0, 0, 557, 558, 7, 16, 0, 0, 558, 559, 7, 7, 0, 0, 559, 560, 7, 2, 0, 0, 560, 561, 7, 11, 0, 0, 561, 562, 1, 0, 0, 0, 562, 563, 6, 6, 4, 0, 563, 29, 1, 0, 0, 0, 564, 565, 7, 7, 0, 0, 565, 566, 7, 17, 0, 0, 566, 567, 7, 4, 0, 0, 567, 568, 7, 14, 0, 0, 568, 569, 1, 0, 0, 0, 569, 570, 6, 7, 4, 0, 570, 31, 1, 0, 0, 0, 571, 572, 7, 6, 0, 0, 572, 573, 7, 12, 0, 0, 573, 574, 7, 9, 0, 0, 574, 575, 7, 18, 0, 0, 575, 576, 1, 0, 0, 0, 576, 577, 6, 8, 4, 0, 577, 33, 1, 0, 0, 0, 578, 579, 7, 14, 0, 0, 579, 580, 7, 10, 0, 0, 580, 581, 7, 19, 0, 0, 581, 582, 7, 10, 0, 0, 582, 583, 7, 11, 0, 0, 583, 584, 1, 0, 0, 0, 584, 585, 6, 9, 4, 0, 585, 35, 1, 0, 0, 0, 586, 587, 7, 12, 0, 0, 587, 588, 7, 9, 0, 0, 588, 589, 7, 20, 0, 0, 589, 590, 1, 0, 0, 0, 590, 591, 6, 10, 4, 0, 591, 37, 1, 0, 0, 0, 592, 593, 7, 16, 0, 0, 593, 594, 7, 9, 0, 0, 594, 595, 7, 12, 0, 0, 595, 596, 7, 11, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 6, 11, 4, 0, 598, 39, 1, 0, 0, 0, 599, 600, 7, 16, 0, 0, 600, 601, 7, 11, 0, 0, 601, 602, 7, 4, 0, 0, 602, 603, 7, 11, 0, 0, 603, 604, 7, 16, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 6, 12, 4, 0, 606, 41, 1, 0, 0, 0, 607, 608, 7, 20, 0, 0, 608, 609, 7, 3, 0, 0, 609, 610, 7, 7, 0, 0, 610, 611, 7, 12, 0, 0, 611, 612, 7, 7, 0, 0, 612, 613, 1, 0, 0, 0, 613, 614, 6, 13, 4, 0, 614, 43, 1, 0, 0, 0, 615, 616, 4, 14, 1, 0, 616, 617, 7, 10, 0, 0, 617, 618, 7, 5, 0, 0, 618, 619, 7, 14, 0, 0, 619, 620, 7, 10, 0, 0, 620, 621, 7, 5, 0, 0, 621, 622, 7, 7, 0, 0, 622, 623, 7, 16, 0, 0, 623, 624, 7, 11, 0, 0, 624, 625, 7, 4, 0, 0, 625, 626, 7, 11, 0, 0, 626, 627, 7, 16, 0, 0, 627, 628, 1, 0, 0, 0, 628, 629, 6, 14, 4, 0, 629, 45, 1, 0, 0, 0, 630, 631, 7, 21, 0, 0, 631, 632, 7, 12, 0, 0, 632, 633, 7, 9, 0, 0, 633, 634, 7, 19, 0, 0, 634, 635, 1, 0, 0, 0, 635, 636, 6, 15, 5, 0, 636, 47, 1, 0, 0, 0, 637, 638, 4, 16, 2, 0, 638, 639, 7, 19, 0, 0, 639, 640, 7, 7, 0, 0, 640, 641, 7, 11, 0, 0, 641, 642, 7, 12, 0, 0, 642, 643, 7, 10, 0, 0, 643, 644, 7, 2, 0, 0, 644, 645, 7, 16, 0, 0, 645, 646, 1, 0, 0, 0, 646, 647, 6, 16, 5, 0, 647, 49, 1, 0, 0, 0, 648, 649, 4, 17, 3, 0, 649, 650, 7, 21, 0, 0, 650, 651, 7, 9, 0, 0, 651, 652, 7, 12, 0, 0, 652, 653, 7, 18, 0, 0, 653, 654, 1, 0, 0, 0, 654, 655, 6, 17, 6, 0, 655, 51, 1, 0, 0, 0, 656, 657, 7, 14, 0, 0, 657, 658, 7, 9, 0, 0, 658, 659, 7, 9, 0, 0, 659, 660, 7, 18, 0, 0, 660, 661, 7, 22, 0, 0, 661, 662, 7, 8, 0, 0, 662, 663, 1, 0, 0, 0, 663, 664, 6, 18, 7, 0, 664, 53, 1, 0, 0, 0, 665, 666, 4, 19, 4, 0, 666, 667, 7, 21, 0, 0, 667, 668, 7, 22, 0, 0, 668, 669, 7, 14, 0, 0, 669, 670, 7, 14, 0, 0, 670, 671, 1, 0, 0, 0, 671, 672, 6, 19, 7, 0, 672, 55, 1, 0, 0, 0, 673, 674, 4, 20, 5, 0, 674, 675, 7, 14, 0, 0, 675, 676, 7, 7, 0, 0, 676, 677, 7, 21, 0, 0, 677, 678, 7, 11, 0, 0, 678, 679, 1, 0, 0, 0, 679, 680, 6, 20, 7, 0, 680, 57, 1, 0, 0, 0, 681, 682, 4, 21, 6, 0, 682, 683, 7, 12, 0, 0, 683, 684, 7, 10, 0, 0, 684, 685, 7, 6, 0, 0, 685, 686, 7, 3, 0, 0, 686, 687, 7, 11, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 6, 21, 7, 0, 689, 59, 1, 0, 0, 0, 690, 691, 4, 22, 7, 0, 691, 692, 7, 14, 0, 0, 692, 693, 7, 9, 0, 0, 693, 694, 7, 9, 0, 0, 694, 695, 7, 18, 0, 0, 695, 696, 7, 22, 0, 0, 696, 697, 7, 8, 0, 0, 697, 698, 5, 95, 0, 0, 698, 699, 5, 128020, 0, 0, 699, 700, 1, 0, 0, 0, 700, 701, 6, 22, 8, 0, 701, 61, 1, 0, 0, 0, 702, 703, 7, 19, 0, 0, 703, 704, 7, 17, 0, 0, 704, 705, 5, 95, 0, 0, 705, 706, 7, 7, 0, 0, 706, 707, 7, 13, 0, 0, 707, 708, 7, 8, 0, 0, 708, 709, 7, 4, 0, 0, 709, 710, 7, 5, 0, 0, 710, 711, 7, 15, 0, 0, 711, 712, 1, 0, 0, 0, 712, 713, 6, 23, 9, 0, 713, 63, 1, 0, 0, 0, 714, 715, 7, 15, 0, 0, 715, 716, 7, 12, 0, 0, 716, 717, 7, 9, 0, 0, 717, 718, 7, 8, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 6, 24, 10, 0, 720, 65, 1, 0, 0, 0, 721, 722, 7, 18, 0, 0, 722, 723, 7, 7, 0, 0, 723, 724, 7, 7, 0, 0, 724, 725, 7, 8, 0, 0, 725, 726, 1, 0, 0, 0, 726, 727, 6, 25, 10, 0, 727, 67, 1, 0, 0, 0, 728, 729, 4, 26, 8, 0, 729, 730, 7, 10, 0, 0, 730, 731, 7, 5, 0, 0, 731, 732, 7, 16, 0, 0, 732, 733, 7, 10, 0, 0, 733, 734, 7, 16, 0, 0, 734, 735, 7, 11, 0, 0, 735, 736, 5, 95, 0, 0, 736, 737, 5, 128020, 0, 0, 737, 738, 1, 0, 0, 0, 738, 739, 6, 26, 10, 0, 739, 69, 1, 0, 0, 0, 740, 741, 4, 27, 9, 0, 741, 742, 7, 12, 0, 0, 742, 743, 7, 12, 0, 0, 743, 744, 7, 21, 0, 0, 744, 745, 1, 0, 0, 0, 745, 746, 6, 27, 4, 0, 746, 71, 1, 0, 0, 0, 747, 748, 7, 12, 0, 0, 748, 749, 7, 7, 0, 0, 749, 750, 7, 5, 0, 0, 750, 751, 7, 4, 0, 0, 751, 752, 7, 19, 0, 0, 752, 753, 7, 7, 0, 0, 753, 754, 1, 0, 0, 0, 754, 755, 6, 28, 11, 0, 755, 73, 1, 0, 0, 0, 756, 757, 7, 16, 0, 0, 757, 758, 7, 3, 0, 0, 758, 759, 7, 9, 0, 0, 759, 760, 7, 20, 0, 0, 760, 761, 1, 0, 0, 0, 761, 762, 6, 29, 12, 0, 762, 75, 1, 0, 0, 0, 763, 765, 8, 23, 0, 0, 764, 763, 1, 0, 0, 0, 765, 766, 1, 0, 0, 0, 766, 764, 1, 0, 0, 0, 766, 767, 1, 0, 0, 0, 767, 768, 1, 0, 0, 0, 768, 769, 6, 30, 4, 0, 769, 77, 1, 0, 0, 0, 770, 771, 3, 168, 76, 0, 771, 772, 1, 0, 0, 0, 772, 773, 6, 31, 13, 0, 773, 774, 6, 31, 14, 0, 774, 79, 1, 0, 0, 0, 775, 776, 3, 102, 43, 0, 776, 777, 1, 0, 0, 0, 777, 778, 6, 32, 15, 0, 778, 81, 1, 0, 0, 0, 779, 780, 3, 460, 222, 0, 780, 781, 1, 0, 0, 0, 781, 782, 6, 33, 16, 0, 782, 83, 1, 0, 0, 0, 783, 784, 3, 212, 98, 0, 784, 785, 1, 0, 0, 0, 785, 786, 6, 34, 17, 0, 786, 85, 1, 0, 0, 0, 787, 788, 3, 208, 96, 0, 788, 789, 1, 0, 0, 0, 789, 790, 6, 35, 18, 0, 790, 87, 1, 0, 0, 0, 791, 792, 3, 288, 136, 0, 792, 793, 1, 0, 0, 0, 793, 794, 6, 36, 19, 0, 794, 89, 1, 0, 0, 0, 795, 796, 3, 284, 134, 0, 796, 797, 1, 0, 0, 0, 797, 798, 6, 37, 20, 0, 798, 91, 1, 0, 0, 0, 799, 800, 3, 16, 0, 0, 800, 801, 1, 0, 0, 0, 801, 802, 6, 38, 0, 0, 802, 93, 1, 0, 0, 0, 803, 804, 3, 18, 1, 0, 804, 805, 1, 0, 0, 0, 805, 806, 6, 39, 0, 0, 806, 95, 1, 0, 0, 0, 807, 808, 3, 20, 2, 0, 808, 809, 1, 0, 0, 0, 809, 810, 6, 40, 0, 0, 810, 97, 1, 0, 0, 0, 811, 812, 3, 168, 76, 0, 812, 813, 1, 0, 0, 0, 813, 814, 6, 41, 13, 0, 814, 815, 6, 41, 14, 0, 815, 99, 1, 0, 0, 0, 816, 817, 3, 276, 130, 0, 817, 818, 1, 0, 0, 0, 818, 819, 6, 42, 21, 0, 819, 820, 6, 42, 22, 0, 820, 101, 1, 0, 0, 0, 821, 822, 7, 9, 0, 0, 822, 823, 7, 5, 0, 0, 823, 824, 1, 0, 0, 0, 824, 825, 6, 43, 23, 0, 825, 103, 1, 0, 0, 0, 826, 827, 7, 20, 0, 0, 827, 828, 7, 10, 0, 0, 828, 829, 7, 11, 0, 0, 829, 830, 7, 3, 0, 0, 830, 831, 1, 0, 0, 0, 831, 832, 6, 44, 23, 0, 832, 105, 1, 0, 0, 0, 833, 834, 8, 24, 0, 0, 834, 107, 1, 0, 0, 0, 835, 837, 3, 106, 45, 0, 836, 835, 1, 0, 0, 0, 837, 838, 1, 0, 0, 0, 838, 836, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 841, 3, 206, 95, 0, 841, 843, 1, 0, 0, 0, 842, 836, 1, 0, 0, 0, 842, 843, 1, 0, 0, 0, 843, 845, 1, 0, 0, 0, 844, 846, 3, 106, 45, 0, 845, 844, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 845, 1, 0, 0, 0, 847, 848, 1, 0, 0, 0, 848, 109, 1, 0, 0, 0, 849, 850, 3, 108, 46, 0, 850, 851, 1, 0, 0, 0, 851, 852, 6, 47, 24, 0, 852, 111, 1, 0, 0, 0, 853, 854, 3, 16, 0, 0, 854, 855, 1, 0, 0, 0, 855, 856, 6, 48, 0, 0, 856, 113, 1, 0, 0, 0, 857, 858, 3, 18, 1, 0, 858, 859, 1, 0, 0, 0, 859, 860, 6, 49, 0, 0, 860, 115, 1, 0, 0, 0, 861, 862, 3, 20, 2, 0, 862, 863, 1, 0, 0, 0, 863, 864, 6, 50, 0, 0, 864, 117, 1, 0, 0, 0, 865, 866, 3, 168, 76, 0, 866, 867, 1, 0, 0, 0, 867, 868, 6, 51, 13, 0, 868, 869, 6, 51, 14, 0, 869, 870, 6, 51, 14, 0, 870, 119, 1, 0, 0, 0, 871, 872, 3, 202, 93, 0, 872, 873, 1, 0, 0, 0, 873, 874, 6, 52, 25, 0, 874, 121, 1, 0, 0, 0, 875, 876, 3, 208, 96, 0, 876, 877, 1, 0, 0, 0, 877, 878, 6, 53, 18, 0, 878, 123, 1, 0, 0, 0, 879, 880, 3, 212, 98, 0, 880, 881, 1, 0, 0, 0, 881, 882, 6, 54, 17, 0, 882, 125, 1, 0, 0, 0, 883, 884, 3, 104, 44, 0, 884, 885, 1, 0, 0, 0, 885, 886, 6, 55, 26, 0, 886, 127, 1, 0, 0, 0, 887, 888, 3, 436, 210, 0, 888, 889, 1, 0, 0, 0, 889, 890, 6, 56, 27, 0, 890, 129, 1, 0, 0, 0, 891, 892, 3, 288, 136, 0, 892, 893, 1, 0, 0, 0, 893, 894, 6, 57, 19, 0, 894, 131, 1, 0, 0, 0, 895, 896, 3, 234, 109, 0, 896, 897, 1, 0, 0, 0, 897, 898, 6, 58, 28, 0, 898, 133, 1, 0, 0, 0, 899, 900, 3, 272, 128, 0, 900, 901, 1, 0, 0, 0, 901, 902, 6, 59, 29, 0, 902, 135, 1, 0, 0, 0, 903, 904, 3, 268, 126, 0, 904, 905, 1, 0, 0, 0, 905, 906, 6, 60, 30, 0, 906, 137, 1, 0, 0, 0, 907, 908, 3, 274, 129, 0, 908, 909, 1, 0, 0, 0, 909, 910, 6, 61, 31, 0, 910, 139, 1, 0, 0, 0, 911, 912, 3, 16, 0, 0, 912, 913, 1, 0, 0, 0, 913, 914, 6, 62, 0, 0, 914, 141, 1, 0, 0, 0, 915, 916, 3, 18, 1, 0, 916, 917, 1, 0, 0, 0, 917, 918, 6, 63, 0, 0, 918, 143, 1, 0, 0, 0, 919, 920, 3, 20, 2, 0, 920, 921, 1, 0, 0, 0, 921, 922, 6, 64, 0, 0, 922, 145, 1, 0, 0, 0, 923, 924, 3, 278, 131, 0, 924, 925, 1, 0, 0, 0, 925, 926, 6, 65, 32, 0, 926, 927, 6, 65, 14, 0, 927, 147, 1, 0, 0, 0, 928, 929, 3, 206, 95, 0, 929, 930, 1, 0, 0, 0, 930, 931, 6, 66, 33, 0, 931, 149, 1, 0, 0, 0, 932, 938, 3, 180, 82, 0, 933, 938, 3, 170, 77, 0, 934, 938, 3, 212, 98, 0, 935, 938, 3, 172, 78, 0, 936, 938, 3, 186, 85, 0, 937, 932, 1, 0, 0, 0, 937, 933, 1, 0, 0, 0, 937, 934, 1, 0, 0, 0, 937, 935, 1, 0, 0, 0, 937, 936, 1, 0, 0, 0, 938, 939, 1, 0, 0, 0, 939, 937, 1, 0, 0, 0, 939, 940, 1, 0, 0, 0, 940, 151, 1, 0, 0, 0, 941, 942, 3, 16, 0, 0, 942, 943, 1, 0, 0, 0, 943, 944, 6, 68, 0, 0, 944, 153, 1, 0, 0, 0, 945, 946, 3, 18, 1, 0, 946, 947, 1, 0, 0, 0, 947, 948, 6, 69, 0, 0, 948, 155, 1, 0, 0, 0, 949, 950, 3, 20, 2, 0, 950, 951, 1, 0, 0, 0, 951, 952, 6, 70, 0, 0, 952, 157, 1, 0, 0, 0, 953, 954, 3, 276, 130, 0, 954, 955, 1, 0, 0, 0, 955, 956, 6, 71, 21, 0, 956, 957, 6, 71, 34, 0, 957, 159, 1, 0, 0, 0, 958, 959, 3, 168, 76, 0, 959, 960, 1, 0, 0, 0, 960, 961, 6, 72, 13, 0, 961, 962, 6, 72, 14, 0, 962, 161, 1, 0, 0, 0, 963, 964, 3, 20, 2, 0, 964, 965, 1, 0, 0, 0, 965, 966, 6, 73, 0, 0, 966, 163, 1, 0, 0, 0, 967, 968, 3, 16, 0, 0, 968, 969, 1, 0, 0, 0, 969, 970, 6, 74, 0, 0, 970, 165, 1, 0, 0, 0, 971, 972, 3, 18, 1, 0, 972, 973, 1, 0, 0, 0, 973, 974, 6, 75, 0, 0, 974, 167, 1, 0, 0, 0, 975, 976, 5, 124, 0, 0, 976, 977, 1, 0, 0, 0, 977, 978, 6, 76, 14, 0, 978, 169, 1, 0, 0, 0, 979, 980, 7, 25, 0, 0, 980, 171, 1, 0, 0, 0, 981, 982, 7, 26, 0, 0, 982, 173, 1, 0, 0, 0, 983, 984, 5, 92, 0, 0, 984, 985, 7, 27, 0, 0, 985, 175, 1, 0, 0, 0, 986, 987, 8, 28, 0, 0, 987, 177, 1, 0, 0, 0, 988, 990, 7, 7, 0, 0, 989, 991, 7, 29, 0, 0, 990, 989, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 993, 1, 0, 0, 0, 992, 994, 3, 170, 77, 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, 179, 1, 0, 0, 0, 997, 998, 5, 64, 0, 0, 998, 181, 1, 0, 0, 0, 999, 1000, 5, 96, 0, 0, 1000, 183, 1, 0, 0, 0, 1001, 1005, 8, 30, 0, 0, 1002, 1003, 5, 96, 0, 0, 1003, 1005, 5, 96, 0, 0, 1004, 1001, 1, 0, 0, 0, 1004, 1002, 1, 0, 0, 0, 1005, 185, 1, 0, 0, 0, 1006, 1007, 5, 95, 0, 0, 1007, 187, 1, 0, 0, 0, 1008, 1012, 3, 172, 78, 0, 1009, 1012, 3, 170, 77, 0, 1010, 1012, 3, 186, 85, 0, 1011, 1008, 1, 0, 0, 0, 1011, 1009, 1, 0, 0, 0, 1011, 1010, 1, 0, 0, 0, 1012, 189, 1, 0, 0, 0, 1013, 1018, 5, 34, 0, 0, 1014, 1017, 3, 174, 79, 0, 1015, 1017, 3, 176, 80, 0, 1016, 1014, 1, 0, 0, 0, 1016, 1015, 1, 0, 0, 0, 1017, 1020, 1, 0, 0, 0, 1018, 1016, 1, 0, 0, 0, 1018, 1019, 1, 0, 0, 0, 1019, 1021, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1021, 1043, 5, 34, 0, 0, 1022, 1023, 5, 34, 0, 0, 1023, 1024, 5, 34, 0, 0, 1024, 1025, 5, 34, 0, 0, 1025, 1029, 1, 0, 0, 0, 1026, 1028, 8, 0, 0, 0, 1027, 1026, 1, 0, 0, 0, 1028, 1031, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1029, 1027, 1, 0, 0, 0, 1030, 1032, 1, 0, 0, 0, 1031, 1029, 1, 0, 0, 0, 1032, 1033, 5, 34, 0, 0, 1033, 1034, 5, 34, 0, 0, 1034, 1035, 5, 34, 0, 0, 1035, 1037, 1, 0, 0, 0, 1036, 1038, 5, 34, 0, 0, 1037, 1036, 1, 0, 0, 0, 1037, 1038, 1, 0, 0, 0, 1038, 1040, 1, 0, 0, 0, 1039, 1041, 5, 34, 0, 0, 1040, 1039, 1, 0, 0, 0, 1040, 1041, 1, 0, 0, 0, 1041, 1043, 1, 0, 0, 0, 1042, 1013, 1, 0, 0, 0, 1042, 1022, 1, 0, 0, 0, 1043, 191, 1, 0, 0, 0, 1044, 1046, 3, 170, 77, 0, 1045, 1044, 1, 0, 0, 0, 1046, 1047, 1, 0, 0, 0, 1047, 1045, 1, 0, 0, 0, 1047, 1048, 1, 0, 0, 0, 1048, 193, 1, 0, 0, 0, 1049, 1051, 3, 170, 77, 0, 1050, 1049, 1, 0, 0, 0, 1051, 1052, 1, 0, 0, 0, 1052, 1050, 1, 0, 0, 0, 1052, 1053, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 1058, 3, 212, 98, 0, 1055, 1057, 3, 170, 77, 0, 1056, 1055, 1, 0, 0, 0, 1057, 1060, 1, 0, 0, 0, 1058, 1056, 1, 0, 0, 0, 1058, 1059, 1, 0, 0, 0, 1059, 1092, 1, 0, 0, 0, 1060, 1058, 1, 0, 0, 0, 1061, 1063, 3, 212, 98, 0, 1062, 1064, 3, 170, 77, 0, 1063, 1062, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1063, 1, 0, 0, 0, 1065, 1066, 1, 0, 0, 0, 1066, 1092, 1, 0, 0, 0, 1067, 1069, 3, 170, 77, 0, 1068, 1067, 1, 0, 0, 0, 1069, 1070, 1, 0, 0, 0, 1070, 1068, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1079, 1, 0, 0, 0, 1072, 1076, 3, 212, 98, 0, 1073, 1075, 3, 170, 77, 0, 1074, 1073, 1, 0, 0, 0, 1075, 1078, 1, 0, 0, 0, 1076, 1074, 1, 0, 0, 0, 1076, 1077, 1, 0, 0, 0, 1077, 1080, 1, 0, 0, 0, 1078, 1076, 1, 0, 0, 0, 1079, 1072, 1, 0, 0, 0, 1079, 1080, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 1082, 3, 178, 81, 0, 1082, 1092, 1, 0, 0, 0, 1083, 1085, 3, 212, 98, 0, 1084, 1086, 3, 170, 77, 0, 1085, 1084, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1085, 1, 0, 0, 0, 1087, 1088, 1, 0, 0, 0, 1088, 1089, 1, 0, 0, 0, 1089, 1090, 3, 178, 81, 0, 1090, 1092, 1, 0, 0, 0, 1091, 1050, 1, 0, 0, 0, 1091, 1061, 1, 0, 0, 0, 1091, 1068, 1, 0, 0, 0, 1091, 1083, 1, 0, 0, 0, 1092, 195, 1, 0, 0, 0, 1093, 1094, 7, 31, 0, 0, 1094, 1095, 7, 32, 0, 0, 1095, 197, 1, 0, 0, 0, 1096, 1097, 7, 4, 0, 0, 1097, 1098, 7, 5, 0, 0, 1098, 1099, 7, 15, 0, 0, 1099, 199, 1, 0, 0, 0, 1100, 1101, 7, 4, 0, 0, 1101, 1102, 7, 16, 0, 0, 1102, 1103, 7, 2, 0, 0, 1103, 201, 1, 0, 0, 0, 1104, 1105, 5, 61, 0, 0, 1105, 203, 1, 0, 0, 0, 1106, 1107, 5, 58, 0, 0, 1107, 1108, 5, 58, 0, 0, 1108, 205, 1, 0, 0, 0, 1109, 1110, 5, 58, 0, 0, 1110, 207, 1, 0, 0, 0, 1111, 1112, 5, 44, 0, 0, 1112, 209, 1, 0, 0, 0, 1113, 1114, 7, 15, 0, 0, 1114, 1115, 7, 7, 0, 0, 1115, 1116, 7, 16, 0, 0, 1116, 1117, 7, 2, 0, 0, 1117, 211, 1, 0, 0, 0, 1118, 1119, 5, 46, 0, 0, 1119, 213, 1, 0, 0, 0, 1120, 1121, 7, 21, 0, 0, 1121, 1122, 7, 4, 0, 0, 1122, 1123, 7, 14, 0, 0, 1123, 1124, 7, 16, 0, 0, 1124, 1125, 7, 7, 0, 0, 1125, 215, 1, 0, 0, 0, 1126, 1127, 7, 21, 0, 0, 1127, 1128, 7, 10, 0, 0, 1128, 1129, 7, 12, 0, 0, 1129, 1130, 7, 16, 0, 0, 1130, 1131, 7, 11, 0, 0, 1131, 217, 1, 0, 0, 0, 1132, 1133, 7, 10, 0, 0, 1133, 1134, 7, 5, 0, 0, 1134, 219, 1, 0, 0, 0, 1135, 1136, 7, 10, 0, 0, 1136, 1137, 7, 16, 0, 0, 1137, 221, 1, 0, 0, 0, 1138, 1139, 7, 14, 0, 0, 1139, 1140, 7, 4, 0, 0, 1140, 1141, 7, 16, 0, 0, 1141, 1142, 7, 11, 0, 0, 1142, 223, 1, 0, 0, 0, 1143, 1144, 7, 14, 0, 0, 1144, 1145, 7, 10, 0, 0, 1145, 1146, 7, 18, 0, 0, 1146, 1147, 7, 7, 0, 0, 1147, 225, 1, 0, 0, 0, 1148, 1149, 7, 5, 0, 0, 1149, 1150, 7, 9, 0, 0, 1150, 1151, 7, 11, 0, 0, 1151, 227, 1, 0, 0, 0, 1152, 1153, 7, 5, 0, 0, 1153, 1154, 7, 22, 0, 0, 1154, 1155, 7, 14, 0, 0, 1155, 1156, 7, 14, 0, 0, 1156, 229, 1, 0, 0, 0, 1157, 1158, 7, 5, 0, 0, 1158, 1159, 7, 22, 0, 0, 1159, 1160, 7, 14, 0, 0, 1160, 1161, 7, 14, 0, 0, 1161, 1162, 7, 16, 0, 0, 1162, 231, 1, 0, 0, 0, 1163, 1164, 7, 9, 0, 0, 1164, 1165, 7, 12, 0, 0, 1165, 233, 1, 0, 0, 0, 1166, 1167, 5, 63, 0, 0, 1167, 235, 1, 0, 0, 0, 1168, 1169, 7, 12, 0, 0, 1169, 1170, 7, 14, 0, 0, 1170, 1171, 7, 10, 0, 0, 1171, 1172, 7, 18, 0, 0, 1172, 1173, 7, 7, 0, 0, 1173, 237, 1, 0, 0, 0, 1174, 1175, 7, 11, 0, 0, 1175, 1176, 7, 12, 0, 0, 1176, 1177, 7, 22, 0, 0, 1177, 1178, 7, 7, 0, 0, 1178, 239, 1, 0, 0, 0, 1179, 1180, 5, 61, 0, 0, 1180, 1181, 5, 61, 0, 0, 1181, 241, 1, 0, 0, 0, 1182, 1183, 5, 61, 0, 0, 1183, 1184, 5, 126, 0, 0, 1184, 243, 1, 0, 0, 0, 1185, 1186, 5, 33, 0, 0, 1186, 1187, 5, 61, 0, 0, 1187, 245, 1, 0, 0, 0, 1188, 1189, 5, 60, 0, 0, 1189, 247, 1, 0, 0, 0, 1190, 1191, 5, 60, 0, 0, 1191, 1192, 5, 61, 0, 0, 1192, 249, 1, 0, 0, 0, 1193, 1194, 5, 62, 0, 0, 1194, 251, 1, 0, 0, 0, 1195, 1196, 5, 62, 0, 0, 1196, 1197, 5, 61, 0, 0, 1197, 253, 1, 0, 0, 0, 1198, 1199, 5, 43, 0, 0, 1199, 255, 1, 0, 0, 0, 1200, 1201, 5, 45, 0, 0, 1201, 257, 1, 0, 0, 0, 1202, 1203, 5, 42, 0, 0, 1203, 259, 1, 0, 0, 0, 1204, 1205, 5, 47, 0, 0, 1205, 261, 1, 0, 0, 0, 1206, 1207, 5, 37, 0, 0, 1207, 263, 1, 0, 0, 0, 1208, 1209, 5, 123, 0, 0, 1209, 265, 1, 0, 0, 0, 1210, 1211, 5, 125, 0, 0, 1211, 267, 1, 0, 0, 0, 1212, 1213, 5, 63, 0, 0, 1213, 1214, 5, 63, 0, 0, 1214, 269, 1, 0, 0, 0, 1215, 1216, 3, 42, 13, 0, 1216, 1217, 1, 0, 0, 0, 1217, 1218, 6, 127, 35, 0, 1218, 271, 1, 0, 0, 0, 1219, 1222, 3, 234, 109, 0, 1220, 1223, 3, 172, 78, 0, 1221, 1223, 3, 186, 85, 0, 1222, 1220, 1, 0, 0, 0, 1222, 1221, 1, 0, 0, 0, 1223, 1227, 1, 0, 0, 0, 1224, 1226, 3, 188, 86, 0, 1225, 1224, 1, 0, 0, 0, 1226, 1229, 1, 0, 0, 0, 1227, 1225, 1, 0, 0, 0, 1227, 1228, 1, 0, 0, 0, 1228, 1237, 1, 0, 0, 0, 1229, 1227, 1, 0, 0, 0, 1230, 1232, 3, 234, 109, 0, 1231, 1233, 3, 170, 77, 0, 1232, 1231, 1, 0, 0, 0, 1233, 1234, 1, 0, 0, 0, 1234, 1232, 1, 0, 0, 0, 1234, 1235, 1, 0, 0, 0, 1235, 1237, 1, 0, 0, 0, 1236, 1219, 1, 0, 0, 0, 1236, 1230, 1, 0, 0, 0, 1237, 273, 1, 0, 0, 0, 1238, 1241, 3, 268, 126, 0, 1239, 1242, 3, 172, 78, 0, 1240, 1242, 3, 186, 85, 0, 1241, 1239, 1, 0, 0, 0, 1241, 1240, 1, 0, 0, 0, 1242, 1246, 1, 0, 0, 0, 1243, 1245, 3, 188, 86, 0, 1244, 1243, 1, 0, 0, 0, 1245, 1248, 1, 0, 0, 0, 1246, 1244, 1, 0, 0, 0, 1246, 1247, 1, 0, 0, 0, 1247, 1256, 1, 0, 0, 0, 1248, 1246, 1, 0, 0, 0, 1249, 1251, 3, 268, 126, 0, 1250, 1252, 3, 170, 77, 0, 1251, 1250, 1, 0, 0, 0, 1252, 1253, 1, 0, 0, 0, 1253, 1251, 1, 0, 0, 0, 1253, 1254, 1, 0, 0, 0, 1254, 1256, 1, 0, 0, 0, 1255, 1238, 1, 0, 0, 0, 1255, 1249, 1, 0, 0, 0, 1256, 275, 1, 0, 0, 0, 1257, 1258, 5, 91, 0, 0, 1258, 1259, 1, 0, 0, 0, 1259, 1260, 6, 130, 4, 0, 1260, 1261, 6, 130, 4, 0, 1261, 277, 1, 0, 0, 0, 1262, 1263, 5, 93, 0, 0, 1263, 1264, 1, 0, 0, 0, 1264, 1265, 6, 131, 14, 0, 1265, 1266, 6, 131, 14, 0, 1266, 279, 1, 0, 0, 0, 1267, 1268, 5, 40, 0, 0, 1268, 1269, 1, 0, 0, 0, 1269, 1270, 6, 132, 4, 0, 1270, 1271, 6, 132, 4, 0, 1271, 281, 1, 0, 0, 0, 1272, 1273, 5, 41, 0, 0, 1273, 1274, 1, 0, 0, 0, 1274, 1275, 6, 133, 14, 0, 1275, 1276, 6, 133, 14, 0, 1276, 283, 1, 0, 0, 0, 1277, 1281, 3, 172, 78, 0, 1278, 1280, 3, 188, 86, 0, 1279, 1278, 1, 0, 0, 0, 1280, 1283, 1, 0, 0, 0, 1281, 1279, 1, 0, 0, 0, 1281, 1282, 1, 0, 0, 0, 1282, 1294, 1, 0, 0, 0, 1283, 1281, 1, 0, 0, 0, 1284, 1287, 3, 186, 85, 0, 1285, 1287, 3, 180, 82, 0, 1286, 1284, 1, 0, 0, 0, 1286, 1285, 1, 0, 0, 0, 1287, 1289, 1, 0, 0, 0, 1288, 1290, 3, 188, 86, 0, 1289, 1288, 1, 0, 0, 0, 1290, 1291, 1, 0, 0, 0, 1291, 1289, 1, 0, 0, 0, 1291, 1292, 1, 0, 0, 0, 1292, 1294, 1, 0, 0, 0, 1293, 1277, 1, 0, 0, 0, 1293, 1286, 1, 0, 0, 0, 1294, 285, 1, 0, 0, 0, 1295, 1297, 3, 182, 83, 0, 1296, 1298, 3, 184, 84, 0, 1297, 1296, 1, 0, 0, 0, 1298, 1299, 1, 0, 0, 0, 1299, 1297, 1, 0, 0, 0, 1299, 1300, 1, 0, 0, 0, 1300, 1301, 1, 0, 0, 0, 1301, 1302, 3, 182, 83, 0, 1302, 287, 1, 0, 0, 0, 1303, 1304, 3, 286, 135, 0, 1304, 289, 1, 0, 0, 0, 1305, 1306, 3, 16, 0, 0, 1306, 1307, 1, 0, 0, 0, 1307, 1308, 6, 137, 0, 0, 1308, 291, 1, 0, 0, 0, 1309, 1310, 3, 18, 1, 0, 1310, 1311, 1, 0, 0, 0, 1311, 1312, 6, 138, 0, 0, 1312, 293, 1, 0, 0, 0, 1313, 1314, 3, 20, 2, 0, 1314, 1315, 1, 0, 0, 0, 1315, 1316, 6, 139, 0, 0, 1316, 295, 1, 0, 0, 0, 1317, 1318, 3, 168, 76, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1320, 6, 140, 13, 0, 1320, 1321, 6, 140, 14, 0, 1321, 297, 1, 0, 0, 0, 1322, 1323, 3, 276, 130, 0, 1323, 1324, 1, 0, 0, 0, 1324, 1325, 6, 141, 21, 0, 1325, 299, 1, 0, 0, 0, 1326, 1327, 3, 278, 131, 0, 1327, 1328, 1, 0, 0, 0, 1328, 1329, 6, 142, 32, 0, 1329, 301, 1, 0, 0, 0, 1330, 1331, 3, 206, 95, 0, 1331, 1332, 1, 0, 0, 0, 1332, 1333, 6, 143, 33, 0, 1333, 303, 1, 0, 0, 0, 1334, 1335, 4, 144, 10, 0, 1335, 1336, 3, 204, 94, 0, 1336, 1337, 1, 0, 0, 0, 1337, 1338, 6, 144, 36, 0, 1338, 305, 1, 0, 0, 0, 1339, 1340, 3, 208, 96, 0, 1340, 1341, 1, 0, 0, 0, 1341, 1342, 6, 145, 18, 0, 1342, 307, 1, 0, 0, 0, 1343, 1344, 3, 202, 93, 0, 1344, 1345, 1, 0, 0, 0, 1345, 1346, 6, 146, 25, 0, 1346, 309, 1, 0, 0, 0, 1347, 1348, 7, 19, 0, 0, 1348, 1349, 7, 7, 0, 0, 1349, 1350, 7, 11, 0, 0, 1350, 1351, 7, 4, 0, 0, 1351, 1352, 7, 15, 0, 0, 1352, 1353, 7, 4, 0, 0, 1353, 1354, 7, 11, 0, 0, 1354, 1355, 7, 4, 0, 0, 1355, 311, 1, 0, 0, 0, 1356, 1360, 8, 33, 0, 0, 1357, 1358, 5, 47, 0, 0, 1358, 1360, 8, 34, 0, 0, 1359, 1356, 1, 0, 0, 0, 1359, 1357, 1, 0, 0, 0, 1360, 313, 1, 0, 0, 0, 1361, 1363, 3, 312, 148, 0, 1362, 1361, 1, 0, 0, 0, 1363, 1364, 1, 0, 0, 0, 1364, 1362, 1, 0, 0, 0, 1364, 1365, 1, 0, 0, 0, 1365, 315, 1, 0, 0, 0, 1366, 1367, 3, 314, 149, 0, 1367, 1368, 1, 0, 0, 0, 1368, 1369, 6, 150, 37, 0, 1369, 317, 1, 0, 0, 0, 1370, 1371, 3, 190, 87, 0, 1371, 1372, 1, 0, 0, 0, 1372, 1373, 6, 151, 38, 0, 1373, 319, 1, 0, 0, 0, 1374, 1375, 3, 16, 0, 0, 1375, 1376, 1, 0, 0, 0, 1376, 1377, 6, 152, 0, 0, 1377, 321, 1, 0, 0, 0, 1378, 1379, 3, 18, 1, 0, 1379, 1380, 1, 0, 0, 0, 1380, 1381, 6, 153, 0, 0, 1381, 323, 1, 0, 0, 0, 1382, 1383, 3, 20, 2, 0, 1383, 1384, 1, 0, 0, 0, 1384, 1385, 6, 154, 0, 0, 1385, 325, 1, 0, 0, 0, 1386, 1387, 3, 280, 132, 0, 1387, 1388, 1, 0, 0, 0, 1388, 1389, 6, 155, 39, 0, 1389, 1390, 6, 155, 34, 0, 1390, 327, 1, 0, 0, 0, 1391, 1392, 3, 168, 76, 0, 1392, 1393, 1, 0, 0, 0, 1393, 1394, 6, 156, 13, 0, 1394, 1395, 6, 156, 14, 0, 1395, 329, 1, 0, 0, 0, 1396, 1397, 3, 20, 2, 0, 1397, 1398, 1, 0, 0, 0, 1398, 1399, 6, 157, 0, 0, 1399, 331, 1, 0, 0, 0, 1400, 1401, 3, 16, 0, 0, 1401, 1402, 1, 0, 0, 0, 1402, 1403, 6, 158, 0, 0, 1403, 333, 1, 0, 0, 0, 1404, 1405, 3, 18, 1, 0, 1405, 1406, 1, 0, 0, 0, 1406, 1407, 6, 159, 0, 0, 1407, 335, 1, 0, 0, 0, 1408, 1409, 3, 168, 76, 0, 1409, 1410, 1, 0, 0, 0, 1410, 1411, 6, 160, 13, 0, 1411, 1412, 6, 160, 14, 0, 1412, 337, 1, 0, 0, 0, 1413, 1414, 7, 35, 0, 0, 1414, 1415, 7, 9, 0, 0, 1415, 1416, 7, 10, 0, 0, 1416, 1417, 7, 5, 0, 0, 1417, 339, 1, 0, 0, 0, 1418, 1419, 3, 460, 222, 0, 1419, 1420, 1, 0, 0, 0, 1420, 1421, 6, 162, 16, 0, 1421, 341, 1, 0, 0, 0, 1422, 1423, 3, 102, 43, 0, 1423, 1424, 1, 0, 0, 0, 1424, 1425, 6, 163, 15, 0, 1425, 1426, 6, 163, 14, 0, 1426, 1427, 6, 163, 4, 0, 1427, 343, 1, 0, 0, 0, 1428, 1429, 7, 22, 0, 0, 1429, 1430, 7, 16, 0, 0, 1430, 1431, 7, 10, 0, 0, 1431, 1432, 7, 5, 0, 0, 1432, 1433, 7, 6, 0, 0, 1433, 1434, 1, 0, 0, 0, 1434, 1435, 6, 164, 14, 0, 1435, 1436, 6, 164, 4, 0, 1436, 345, 1, 0, 0, 0, 1437, 1438, 3, 314, 149, 0, 1438, 1439, 1, 0, 0, 0, 1439, 1440, 6, 165, 37, 0, 1440, 347, 1, 0, 0, 0, 1441, 1442, 3, 190, 87, 0, 1442, 1443, 1, 0, 0, 0, 1443, 1444, 6, 166, 38, 0, 1444, 349, 1, 0, 0, 0, 1445, 1446, 3, 206, 95, 0, 1446, 1447, 1, 0, 0, 0, 1447, 1448, 6, 167, 33, 0, 1448, 351, 1, 0, 0, 0, 1449, 1450, 3, 284, 134, 0, 1450, 1451, 1, 0, 0, 0, 1451, 1452, 6, 168, 20, 0, 1452, 353, 1, 0, 0, 0, 1453, 1454, 3, 288, 136, 0, 1454, 1455, 1, 0, 0, 0, 1455, 1456, 6, 169, 19, 0, 1456, 355, 1, 0, 0, 0, 1457, 1458, 3, 16, 0, 0, 1458, 1459, 1, 0, 0, 0, 1459, 1460, 6, 170, 0, 0, 1460, 357, 1, 0, 0, 0, 1461, 1462, 3, 18, 1, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1464, 6, 171, 0, 0, 1464, 359, 1, 0, 0, 0, 1465, 1466, 3, 20, 2, 0, 1466, 1467, 1, 0, 0, 0, 1467, 1468, 6, 172, 0, 0, 1468, 361, 1, 0, 0, 0, 1469, 1470, 3, 168, 76, 0, 1470, 1471, 1, 0, 0, 0, 1471, 1472, 6, 173, 13, 0, 1472, 1473, 6, 173, 14, 0, 1473, 363, 1, 0, 0, 0, 1474, 1475, 3, 206, 95, 0, 1475, 1476, 1, 0, 0, 0, 1476, 1477, 6, 174, 33, 0, 1477, 365, 1, 0, 0, 0, 1478, 1479, 3, 208, 96, 0, 1479, 1480, 1, 0, 0, 0, 1480, 1481, 6, 175, 18, 0, 1481, 367, 1, 0, 0, 0, 1482, 1483, 3, 212, 98, 0, 1483, 1484, 1, 0, 0, 0, 1484, 1485, 6, 176, 17, 0, 1485, 369, 1, 0, 0, 0, 1486, 1487, 3, 102, 43, 0, 1487, 1488, 1, 0, 0, 0, 1488, 1489, 6, 177, 15, 0, 1489, 1490, 6, 177, 40, 0, 1490, 371, 1, 0, 0, 0, 1491, 1492, 3, 314, 149, 0, 1492, 1493, 1, 0, 0, 0, 1493, 1494, 6, 178, 37, 0, 1494, 373, 1, 0, 0, 0, 1495, 1496, 3, 190, 87, 0, 1496, 1497, 1, 0, 0, 0, 1497, 1498, 6, 179, 38, 0, 1498, 375, 1, 0, 0, 0, 1499, 1500, 3, 16, 0, 0, 1500, 1501, 1, 0, 0, 0, 1501, 1502, 6, 180, 0, 0, 1502, 377, 1, 0, 0, 0, 1503, 1504, 3, 18, 1, 0, 1504, 1505, 1, 0, 0, 0, 1505, 1506, 6, 181, 0, 0, 1506, 379, 1, 0, 0, 0, 1507, 1508, 3, 20, 2, 0, 1508, 1509, 1, 0, 0, 0, 1509, 1510, 6, 182, 0, 0, 1510, 381, 1, 0, 0, 0, 1511, 1512, 3, 168, 76, 0, 1512, 1513, 1, 0, 0, 0, 1513, 1514, 6, 183, 13, 0, 1514, 1515, 6, 183, 14, 0, 1515, 1516, 6, 183, 14, 0, 1516, 383, 1, 0, 0, 0, 1517, 1518, 3, 208, 96, 0, 1518, 1519, 1, 0, 0, 0, 1519, 1520, 6, 184, 18, 0, 1520, 385, 1, 0, 0, 0, 1521, 1522, 3, 212, 98, 0, 1522, 1523, 1, 0, 0, 0, 1523, 1524, 6, 185, 17, 0, 1524, 387, 1, 0, 0, 0, 1525, 1526, 3, 436, 210, 0, 1526, 1527, 1, 0, 0, 0, 1527, 1528, 6, 186, 27, 0, 1528, 389, 1, 0, 0, 0, 1529, 1530, 3, 16, 0, 0, 1530, 1531, 1, 0, 0, 0, 1531, 1532, 6, 187, 0, 0, 1532, 391, 1, 0, 0, 0, 1533, 1534, 3, 18, 1, 0, 1534, 1535, 1, 0, 0, 0, 1535, 1536, 6, 188, 0, 0, 1536, 393, 1, 0, 0, 0, 1537, 1538, 3, 20, 2, 0, 1538, 1539, 1, 0, 0, 0, 1539, 1540, 6, 189, 0, 0, 1540, 395, 1, 0, 0, 0, 1541, 1542, 3, 168, 76, 0, 1542, 1543, 1, 0, 0, 0, 1543, 1544, 6, 190, 13, 0, 1544, 1545, 6, 190, 14, 0, 1545, 397, 1, 0, 0, 0, 1546, 1547, 3, 212, 98, 0, 1547, 1548, 1, 0, 0, 0, 1548, 1549, 6, 191, 17, 0, 1549, 399, 1, 0, 0, 0, 1550, 1551, 3, 234, 109, 0, 1551, 1552, 1, 0, 0, 0, 1552, 1553, 6, 192, 28, 0, 1553, 401, 1, 0, 0, 0, 1554, 1555, 3, 272, 128, 0, 1555, 1556, 1, 0, 0, 0, 1556, 1557, 6, 193, 29, 0, 1557, 403, 1, 0, 0, 0, 1558, 1559, 3, 268, 126, 0, 1559, 1560, 1, 0, 0, 0, 1560, 1561, 6, 194, 30, 0, 1561, 405, 1, 0, 0, 0, 1562, 1563, 3, 274, 129, 0, 1563, 1564, 1, 0, 0, 0, 1564, 1565, 6, 195, 31, 0, 1565, 407, 1, 0, 0, 0, 1566, 1567, 3, 288, 136, 0, 1567, 1568, 1, 0, 0, 0, 1568, 1569, 6, 196, 19, 0, 1569, 409, 1, 0, 0, 0, 1570, 1571, 3, 284, 134, 0, 1571, 1572, 1, 0, 0, 0, 1572, 1573, 6, 197, 20, 0, 1573, 411, 1, 0, 0, 0, 1574, 1575, 3, 16, 0, 0, 1575, 1576, 1, 0, 0, 0, 1576, 1577, 6, 198, 0, 0, 1577, 413, 1, 0, 0, 0, 1578, 1579, 3, 18, 1, 0, 1579, 1580, 1, 0, 0, 0, 1580, 1581, 6, 199, 0, 0, 1581, 415, 1, 0, 0, 0, 1582, 1583, 3, 20, 2, 0, 1583, 1584, 1, 0, 0, 0, 1584, 1585, 6, 200, 0, 0, 1585, 417, 1, 0, 0, 0, 1586, 1587, 3, 168, 76, 0, 1587, 1588, 1, 0, 0, 0, 1588, 1589, 6, 201, 13, 0, 1589, 1590, 6, 201, 14, 0, 1590, 419, 1, 0, 0, 0, 1591, 1592, 3, 212, 98, 0, 1592, 1593, 1, 0, 0, 0, 1593, 1594, 6, 202, 17, 0, 1594, 421, 1, 0, 0, 0, 1595, 1596, 3, 208, 96, 0, 1596, 1597, 1, 0, 0, 0, 1597, 1598, 6, 203, 18, 0, 1598, 423, 1, 0, 0, 0, 1599, 1600, 3, 234, 109, 0, 1600, 1601, 1, 0, 0, 0, 1601, 1602, 6, 204, 28, 0, 1602, 425, 1, 0, 0, 0, 1603, 1604, 3, 272, 128, 0, 1604, 1605, 1, 0, 0, 0, 1605, 1606, 6, 205, 29, 0, 1606, 427, 1, 0, 0, 0, 1607, 1608, 3, 268, 126, 0, 1608, 1609, 1, 0, 0, 0, 1609, 1610, 6, 206, 30, 0, 1610, 429, 1, 0, 0, 0, 1611, 1612, 3, 274, 129, 0, 1612, 1613, 1, 0, 0, 0, 1613, 1614, 6, 207, 31, 0, 1614, 431, 1, 0, 0, 0, 1615, 1620, 3, 172, 78, 0, 1616, 1620, 3, 170, 77, 0, 1617, 1620, 3, 186, 85, 0, 1618, 1620, 3, 258, 121, 0, 1619, 1615, 1, 0, 0, 0, 1619, 1616, 1, 0, 0, 0, 1619, 1617, 1, 0, 0, 0, 1619, 1618, 1, 0, 0, 0, 1620, 433, 1, 0, 0, 0, 1621, 1624, 3, 172, 78, 0, 1622, 1624, 3, 258, 121, 0, 1623, 1621, 1, 0, 0, 0, 1623, 1622, 1, 0, 0, 0, 1624, 1628, 1, 0, 0, 0, 1625, 1627, 3, 432, 208, 0, 1626, 1625, 1, 0, 0, 0, 1627, 1630, 1, 0, 0, 0, 1628, 1626, 1, 0, 0, 0, 1628, 1629, 1, 0, 0, 0, 1629, 1641, 1, 0, 0, 0, 1630, 1628, 1, 0, 0, 0, 1631, 1634, 3, 186, 85, 0, 1632, 1634, 3, 180, 82, 0, 1633, 1631, 1, 0, 0, 0, 1633, 1632, 1, 0, 0, 0, 1634, 1636, 1, 0, 0, 0, 1635, 1637, 3, 432, 208, 0, 1636, 1635, 1, 0, 0, 0, 1637, 1638, 1, 0, 0, 0, 1638, 1636, 1, 0, 0, 0, 1638, 1639, 1, 0, 0, 0, 1639, 1641, 1, 0, 0, 0, 1640, 1623, 1, 0, 0, 0, 1640, 1633, 1, 0, 0, 0, 1641, 435, 1, 0, 0, 0, 1642, 1645, 3, 434, 209, 0, 1643, 1645, 3, 286, 135, 0, 1644, 1642, 1, 0, 0, 0, 1644, 1643, 1, 0, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 1644, 1, 0, 0, 0, 1646, 1647, 1, 0, 0, 0, 1647, 437, 1, 0, 0, 0, 1648, 1649, 3, 16, 0, 0, 1649, 1650, 1, 0, 0, 0, 1650, 1651, 6, 211, 0, 0, 1651, 439, 1, 0, 0, 0, 1652, 1653, 3, 18, 1, 0, 1653, 1654, 1, 0, 0, 0, 1654, 1655, 6, 212, 0, 0, 1655, 441, 1, 0, 0, 0, 1656, 1657, 3, 20, 2, 0, 1657, 1658, 1, 0, 0, 0, 1658, 1659, 6, 213, 0, 0, 1659, 443, 1, 0, 0, 0, 1660, 1661, 3, 168, 76, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1663, 6, 214, 13, 0, 1663, 1664, 6, 214, 14, 0, 1664, 445, 1, 0, 0, 0, 1665, 1666, 3, 202, 93, 0, 1666, 1667, 1, 0, 0, 0, 1667, 1668, 6, 215, 25, 0, 1668, 447, 1, 0, 0, 0, 1669, 1670, 3, 208, 96, 0, 1670, 1671, 1, 0, 0, 0, 1671, 1672, 6, 216, 18, 0, 1672, 449, 1, 0, 0, 0, 1673, 1674, 3, 212, 98, 0, 1674, 1675, 1, 0, 0, 0, 1675, 1676, 6, 217, 17, 0, 1676, 451, 1, 0, 0, 0, 1677, 1678, 3, 234, 109, 0, 1678, 1679, 1, 0, 0, 0, 1679, 1680, 6, 218, 28, 0, 1680, 453, 1, 0, 0, 0, 1681, 1682, 3, 272, 128, 0, 1682, 1683, 1, 0, 0, 0, 1683, 1684, 6, 219, 29, 0, 1684, 455, 1, 0, 0, 0, 1685, 1686, 3, 268, 126, 0, 1686, 1687, 1, 0, 0, 0, 1687, 1688, 6, 220, 30, 0, 1688, 457, 1, 0, 0, 0, 1689, 1690, 3, 274, 129, 0, 1690, 1691, 1, 0, 0, 0, 1691, 1692, 6, 221, 31, 0, 1692, 459, 1, 0, 0, 0, 1693, 1694, 7, 4, 0, 0, 1694, 1695, 7, 16, 0, 0, 1695, 461, 1, 0, 0, 0, 1696, 1697, 3, 436, 210, 0, 1697, 1698, 1, 0, 0, 0, 1698, 1699, 6, 223, 27, 0, 1699, 463, 1, 0, 0, 0, 1700, 1701, 3, 16, 0, 0, 1701, 1702, 1, 0, 0, 0, 1702, 1703, 6, 224, 0, 0, 1703, 465, 1, 0, 0, 0, 1704, 1705, 3, 18, 1, 0, 1705, 1706, 1, 0, 0, 0, 1706, 1707, 6, 225, 0, 0, 1707, 467, 1, 0, 0, 0, 1708, 1709, 3, 20, 2, 0, 1709, 1710, 1, 0, 0, 0, 1710, 1711, 6, 226, 0, 0, 1711, 469, 1, 0, 0, 0, 1712, 1713, 3, 168, 76, 0, 1713, 1714, 1, 0, 0, 0, 1714, 1715, 6, 227, 13, 0, 1715, 1716, 6, 227, 14, 0, 1716, 471, 1, 0, 0, 0, 1717, 1718, 7, 10, 0, 0, 1718, 1719, 7, 5, 0, 0, 1719, 1720, 7, 21, 0, 0, 1720, 1721, 7, 9, 0, 0, 1721, 473, 1, 0, 0, 0, 1722, 1723, 3, 16, 0, 0, 1723, 1724, 1, 0, 0, 0, 1724, 1725, 6, 229, 0, 0, 1725, 475, 1, 0, 0, 0, 1726, 1727, 3, 18, 1, 0, 1727, 1728, 1, 0, 0, 0, 1728, 1729, 6, 230, 0, 0, 1729, 477, 1, 0, 0, 0, 1730, 1731, 3, 20, 2, 0, 1731, 1732, 1, 0, 0, 0, 1732, 1733, 6, 231, 0, 0, 1733, 479, 1, 0, 0, 0, 70, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 486, 490, 493, 502, 504, 515, 766, 838, 842, 847, 937, 939, 990, 995, 1004, 1011, 1016, 1018, 1029, 1037, 1040, 1042, 1047, 1052, 1058, 1065, 1070, 1076, 1079, 1087, 1091, 1222, 1227, 1234, 1236, 1241, 1246, 1253, 1255, 1281, 1286, 1291, 1293, 1299, 1359, 1364, 1619, 1623, 1628, 1633, 1638, 1640, 1644, 1646, 41, 0, 1, 0, 5, 1, 0, 5, 2, 0, 5, 5, 0, 5, 6, 0, 5, 7, 0, 5, 8, 0, 5, 9, 0, 5, 10, 0, 5, 12, 0, 5, 13, 0, 5, 14, 0, 5, 15, 0, 7, 51, 0, 4, 0, 0, 7, 35, 0, 7, 129, 0, 7, 63, 0, 7, 61, 0, 7, 99, 0, 7, 98, 0, 7, 94, 0, 5, 4, 0, 5, 3, 0, 7, 37, 0, 7, 58, 0, 7, 36, 0, 7, 125, 0, 7, 74, 0, 7, 92, 0, 7, 91, 0, 7, 93, 0, 7, 95, 0, 7, 60, 0, 5, 0, 0, 7, 14, 0, 7, 59, 0, 7, 104, 0, 7, 52, 0, 7, 96, 0, 5, 11, 0] \ No newline at end of file +[4, 0, 137, 1757, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 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, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 493, 8, 0, 10, 0, 12, 0, 496, 9, 0, 1, 0, 3, 0, 499, 8, 0, 1, 0, 3, 0, 502, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 511, 8, 1, 10, 1, 12, 1, 514, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 2, 522, 8, 2, 11, 2, 12, 2, 523, 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, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 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, 11, 1, 11, 1, 11, 1, 12, 1, 12, 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, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 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, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 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, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 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, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 4, 31, 778, 8, 31, 11, 31, 12, 31, 779, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 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, 47, 4, 47, 848, 8, 47, 11, 47, 12, 47, 849, 1, 47, 1, 47, 3, 47, 854, 8, 47, 1, 47, 4, 47, 857, 8, 47, 11, 47, 12, 47, 858, 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, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 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, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 4, 68, 949, 8, 68, 11, 68, 12, 68, 950, 1, 69, 1, 69, 1, 69, 1, 69, 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, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 82, 1, 82, 3, 82, 1002, 8, 82, 1, 82, 4, 82, 1005, 8, 82, 11, 82, 12, 82, 1006, 1, 83, 1, 83, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 3, 85, 1016, 8, 85, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 3, 87, 1023, 8, 87, 1, 88, 1, 88, 1, 88, 5, 88, 1028, 8, 88, 10, 88, 12, 88, 1031, 9, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1039, 8, 88, 10, 88, 12, 88, 1042, 9, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1049, 8, 88, 1, 88, 3, 88, 1052, 8, 88, 3, 88, 1054, 8, 88, 1, 89, 4, 89, 1057, 8, 89, 11, 89, 12, 89, 1058, 1, 90, 4, 90, 1062, 8, 90, 11, 90, 12, 90, 1063, 1, 90, 1, 90, 5, 90, 1068, 8, 90, 10, 90, 12, 90, 1071, 9, 90, 1, 90, 1, 90, 4, 90, 1075, 8, 90, 11, 90, 12, 90, 1076, 1, 90, 4, 90, 1080, 8, 90, 11, 90, 12, 90, 1081, 1, 90, 1, 90, 5, 90, 1086, 8, 90, 10, 90, 12, 90, 1089, 9, 90, 3, 90, 1091, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 4, 90, 1097, 8, 90, 11, 90, 12, 90, 1098, 1, 90, 1, 90, 3, 90, 1103, 8, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 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, 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, 109, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 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, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 126, 1, 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 3, 132, 1245, 8, 132, 1, 132, 5, 132, 1248, 8, 132, 10, 132, 12, 132, 1251, 9, 132, 1, 132, 1, 132, 4, 132, 1255, 8, 132, 11, 132, 12, 132, 1256, 3, 132, 1259, 8, 132, 1, 133, 1, 133, 1, 133, 3, 133, 1264, 8, 133, 1, 133, 5, 133, 1267, 8, 133, 10, 133, 12, 133, 1270, 9, 133, 1, 133, 1, 133, 4, 133, 1274, 8, 133, 11, 133, 12, 133, 1275, 3, 133, 1278, 8, 133, 1, 134, 1, 134, 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, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 5, 138, 1302, 8, 138, 10, 138, 12, 138, 1305, 9, 138, 1, 138, 1, 138, 3, 138, 1309, 8, 138, 1, 138, 4, 138, 1312, 8, 138, 11, 138, 12, 138, 1313, 3, 138, 1316, 8, 138, 1, 139, 1, 139, 4, 139, 1320, 8, 139, 11, 139, 12, 139, 1321, 1, 139, 1, 139, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 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, 146, 1, 146, 1, 146, 1, 146, 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, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 3, 152, 1382, 8, 152, 1, 153, 4, 153, 1385, 8, 153, 11, 153, 12, 153, 1386, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 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, 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, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 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, 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, 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, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 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, 191, 1, 191, 1, 191, 1, 191, 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, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 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, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 1642, 8, 212, 1, 213, 1, 213, 3, 213, 1646, 8, 213, 1, 213, 5, 213, 1649, 8, 213, 10, 213, 12, 213, 1652, 9, 213, 1, 213, 1, 213, 3, 213, 1656, 8, 213, 1, 213, 4, 213, 1659, 8, 213, 11, 213, 12, 213, 1660, 3, 213, 1663, 8, 213, 1, 214, 1, 214, 4, 214, 1667, 8, 214, 11, 214, 12, 214, 1668, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 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, 220, 1, 220, 1, 220, 1, 220, 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, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 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, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 2, 512, 1040, 0, 236, 16, 1, 18, 2, 20, 3, 22, 4, 24, 5, 26, 6, 28, 7, 30, 8, 32, 9, 34, 10, 36, 11, 38, 12, 40, 13, 42, 14, 44, 15, 46, 16, 48, 17, 50, 18, 52, 19, 54, 20, 56, 21, 58, 22, 60, 23, 62, 24, 64, 25, 66, 26, 68, 27, 70, 28, 72, 29, 74, 30, 76, 31, 78, 32, 80, 0, 82, 0, 84, 0, 86, 0, 88, 0, 90, 0, 92, 0, 94, 33, 96, 34, 98, 35, 100, 0, 102, 0, 104, 0, 106, 0, 108, 0, 110, 36, 112, 0, 114, 37, 116, 38, 118, 39, 120, 0, 122, 0, 124, 0, 126, 0, 128, 0, 130, 0, 132, 0, 134, 0, 136, 0, 138, 0, 140, 0, 142, 40, 144, 41, 146, 42, 148, 0, 150, 0, 152, 43, 154, 44, 156, 45, 158, 46, 160, 0, 162, 0, 164, 47, 166, 48, 168, 49, 170, 50, 172, 0, 174, 0, 176, 0, 178, 0, 180, 0, 182, 0, 184, 0, 186, 0, 188, 0, 190, 0, 192, 51, 194, 52, 196, 53, 198, 54, 200, 55, 202, 56, 204, 57, 206, 58, 208, 59, 210, 60, 212, 61, 214, 62, 216, 63, 218, 64, 220, 65, 222, 66, 224, 67, 226, 68, 228, 69, 230, 70, 232, 71, 234, 72, 236, 73, 238, 74, 240, 75, 242, 76, 244, 77, 246, 78, 248, 79, 250, 80, 252, 81, 254, 82, 256, 83, 258, 84, 260, 85, 262, 86, 264, 87, 266, 88, 268, 89, 270, 90, 272, 91, 274, 92, 276, 93, 278, 0, 280, 94, 282, 95, 284, 96, 286, 97, 288, 98, 290, 99, 292, 100, 294, 0, 296, 101, 298, 102, 300, 103, 302, 104, 304, 0, 306, 0, 308, 0, 310, 0, 312, 0, 314, 0, 316, 0, 318, 105, 320, 0, 322, 106, 324, 0, 326, 0, 328, 107, 330, 108, 332, 109, 334, 0, 336, 0, 338, 110, 340, 111, 342, 112, 344, 0, 346, 113, 348, 0, 350, 0, 352, 114, 354, 0, 356, 0, 358, 0, 360, 0, 362, 0, 364, 115, 366, 116, 368, 117, 370, 0, 372, 0, 374, 0, 376, 0, 378, 0, 380, 0, 382, 0, 384, 118, 386, 119, 388, 120, 390, 0, 392, 0, 394, 0, 396, 0, 398, 121, 400, 122, 402, 123, 404, 0, 406, 0, 408, 0, 410, 0, 412, 0, 414, 0, 416, 0, 418, 0, 420, 124, 422, 125, 424, 126, 426, 0, 428, 0, 430, 0, 432, 0, 434, 0, 436, 0, 438, 0, 440, 0, 442, 0, 444, 127, 446, 128, 448, 129, 450, 130, 452, 0, 454, 0, 456, 0, 458, 0, 460, 0, 462, 0, 464, 0, 466, 0, 468, 0, 470, 0, 472, 131, 474, 132, 476, 133, 478, 0, 480, 134, 482, 135, 484, 136, 486, 137, 16, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 36, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 67, 67, 99, 99, 2, 0, 72, 72, 104, 104, 2, 0, 65, 65, 97, 97, 2, 0, 78, 78, 110, 110, 2, 0, 71, 71, 103, 103, 2, 0, 69, 69, 101, 101, 2, 0, 80, 80, 112, 112, 2, 0, 79, 79, 111, 111, 2, 0, 73, 73, 105, 105, 2, 0, 84, 84, 116, 116, 2, 0, 82, 82, 114, 114, 2, 0, 88, 88, 120, 120, 2, 0, 76, 76, 108, 108, 2, 0, 68, 68, 100, 100, 2, 0, 83, 83, 115, 115, 2, 0, 86, 86, 118, 118, 2, 0, 75, 75, 107, 107, 2, 0, 77, 77, 109, 109, 2, 0, 87, 87, 119, 119, 2, 0, 70, 70, 102, 102, 2, 0, 85, 85, 117, 117, 6, 0, 9, 10, 13, 13, 32, 32, 47, 47, 91, 91, 93, 93, 11, 0, 9, 10, 13, 13, 32, 32, 34, 35, 44, 44, 47, 47, 58, 58, 60, 60, 62, 63, 92, 92, 124, 124, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 8, 0, 34, 34, 78, 78, 82, 82, 84, 84, 92, 92, 110, 110, 114, 114, 116, 116, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 2, 0, 43, 43, 45, 45, 1, 0, 96, 96, 2, 0, 66, 66, 98, 98, 2, 0, 89, 89, 121, 121, 11, 0, 9, 10, 13, 13, 32, 32, 34, 34, 44, 44, 47, 47, 58, 58, 61, 61, 91, 91, 93, 93, 124, 124, 2, 0, 42, 42, 47, 47, 2, 0, 74, 74, 106, 106, 1788, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 1, 80, 1, 0, 0, 0, 1, 82, 1, 0, 0, 0, 1, 84, 1, 0, 0, 0, 1, 86, 1, 0, 0, 0, 1, 88, 1, 0, 0, 0, 1, 90, 1, 0, 0, 0, 1, 92, 1, 0, 0, 0, 1, 94, 1, 0, 0, 0, 1, 96, 1, 0, 0, 0, 1, 98, 1, 0, 0, 0, 2, 100, 1, 0, 0, 0, 2, 102, 1, 0, 0, 0, 2, 104, 1, 0, 0, 0, 2, 106, 1, 0, 0, 0, 2, 110, 1, 0, 0, 0, 2, 112, 1, 0, 0, 0, 2, 114, 1, 0, 0, 0, 2, 116, 1, 0, 0, 0, 2, 118, 1, 0, 0, 0, 3, 120, 1, 0, 0, 0, 3, 122, 1, 0, 0, 0, 3, 124, 1, 0, 0, 0, 3, 126, 1, 0, 0, 0, 3, 128, 1, 0, 0, 0, 3, 130, 1, 0, 0, 0, 3, 132, 1, 0, 0, 0, 3, 134, 1, 0, 0, 0, 3, 136, 1, 0, 0, 0, 3, 138, 1, 0, 0, 0, 3, 140, 1, 0, 0, 0, 3, 142, 1, 0, 0, 0, 3, 144, 1, 0, 0, 0, 3, 146, 1, 0, 0, 0, 4, 148, 1, 0, 0, 0, 4, 150, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 4, 154, 1, 0, 0, 0, 4, 156, 1, 0, 0, 0, 4, 158, 1, 0, 0, 0, 5, 160, 1, 0, 0, 0, 5, 162, 1, 0, 0, 0, 5, 164, 1, 0, 0, 0, 5, 166, 1, 0, 0, 0, 5, 168, 1, 0, 0, 0, 6, 170, 1, 0, 0, 0, 6, 192, 1, 0, 0, 0, 6, 194, 1, 0, 0, 0, 6, 196, 1, 0, 0, 0, 6, 198, 1, 0, 0, 0, 6, 200, 1, 0, 0, 0, 6, 202, 1, 0, 0, 0, 6, 204, 1, 0, 0, 0, 6, 206, 1, 0, 0, 0, 6, 208, 1, 0, 0, 0, 6, 210, 1, 0, 0, 0, 6, 212, 1, 0, 0, 0, 6, 214, 1, 0, 0, 0, 6, 216, 1, 0, 0, 0, 6, 218, 1, 0, 0, 0, 6, 220, 1, 0, 0, 0, 6, 222, 1, 0, 0, 0, 6, 224, 1, 0, 0, 0, 6, 226, 1, 0, 0, 0, 6, 228, 1, 0, 0, 0, 6, 230, 1, 0, 0, 0, 6, 232, 1, 0, 0, 0, 6, 234, 1, 0, 0, 0, 6, 236, 1, 0, 0, 0, 6, 238, 1, 0, 0, 0, 6, 240, 1, 0, 0, 0, 6, 242, 1, 0, 0, 0, 6, 244, 1, 0, 0, 0, 6, 246, 1, 0, 0, 0, 6, 248, 1, 0, 0, 0, 6, 250, 1, 0, 0, 0, 6, 252, 1, 0, 0, 0, 6, 254, 1, 0, 0, 0, 6, 256, 1, 0, 0, 0, 6, 258, 1, 0, 0, 0, 6, 260, 1, 0, 0, 0, 6, 262, 1, 0, 0, 0, 6, 264, 1, 0, 0, 0, 6, 266, 1, 0, 0, 0, 6, 268, 1, 0, 0, 0, 6, 270, 1, 0, 0, 0, 6, 272, 1, 0, 0, 0, 6, 274, 1, 0, 0, 0, 6, 276, 1, 0, 0, 0, 6, 278, 1, 0, 0, 0, 6, 280, 1, 0, 0, 0, 6, 282, 1, 0, 0, 0, 6, 284, 1, 0, 0, 0, 6, 286, 1, 0, 0, 0, 6, 288, 1, 0, 0, 0, 6, 290, 1, 0, 0, 0, 6, 292, 1, 0, 0, 0, 6, 296, 1, 0, 0, 0, 6, 298, 1, 0, 0, 0, 6, 300, 1, 0, 0, 0, 6, 302, 1, 0, 0, 0, 7, 304, 1, 0, 0, 0, 7, 306, 1, 0, 0, 0, 7, 308, 1, 0, 0, 0, 7, 310, 1, 0, 0, 0, 7, 312, 1, 0, 0, 0, 7, 314, 1, 0, 0, 0, 7, 316, 1, 0, 0, 0, 7, 318, 1, 0, 0, 0, 7, 322, 1, 0, 0, 0, 7, 324, 1, 0, 0, 0, 7, 326, 1, 0, 0, 0, 7, 328, 1, 0, 0, 0, 7, 330, 1, 0, 0, 0, 7, 332, 1, 0, 0, 0, 8, 334, 1, 0, 0, 0, 8, 336, 1, 0, 0, 0, 8, 338, 1, 0, 0, 0, 8, 340, 1, 0, 0, 0, 8, 342, 1, 0, 0, 0, 9, 344, 1, 0, 0, 0, 9, 346, 1, 0, 0, 0, 9, 348, 1, 0, 0, 0, 9, 350, 1, 0, 0, 0, 9, 352, 1, 0, 0, 0, 9, 354, 1, 0, 0, 0, 9, 356, 1, 0, 0, 0, 9, 358, 1, 0, 0, 0, 9, 360, 1, 0, 0, 0, 9, 362, 1, 0, 0, 0, 9, 364, 1, 0, 0, 0, 9, 366, 1, 0, 0, 0, 9, 368, 1, 0, 0, 0, 10, 370, 1, 0, 0, 0, 10, 372, 1, 0, 0, 0, 10, 374, 1, 0, 0, 0, 10, 376, 1, 0, 0, 0, 10, 378, 1, 0, 0, 0, 10, 380, 1, 0, 0, 0, 10, 382, 1, 0, 0, 0, 10, 384, 1, 0, 0, 0, 10, 386, 1, 0, 0, 0, 10, 388, 1, 0, 0, 0, 11, 390, 1, 0, 0, 0, 11, 392, 1, 0, 0, 0, 11, 394, 1, 0, 0, 0, 11, 396, 1, 0, 0, 0, 11, 398, 1, 0, 0, 0, 11, 400, 1, 0, 0, 0, 11, 402, 1, 0, 0, 0, 12, 404, 1, 0, 0, 0, 12, 406, 1, 0, 0, 0, 12, 408, 1, 0, 0, 0, 12, 410, 1, 0, 0, 0, 12, 412, 1, 0, 0, 0, 12, 414, 1, 0, 0, 0, 12, 416, 1, 0, 0, 0, 12, 418, 1, 0, 0, 0, 12, 420, 1, 0, 0, 0, 12, 422, 1, 0, 0, 0, 12, 424, 1, 0, 0, 0, 13, 426, 1, 0, 0, 0, 13, 428, 1, 0, 0, 0, 13, 430, 1, 0, 0, 0, 13, 432, 1, 0, 0, 0, 13, 434, 1, 0, 0, 0, 13, 436, 1, 0, 0, 0, 13, 438, 1, 0, 0, 0, 13, 444, 1, 0, 0, 0, 13, 446, 1, 0, 0, 0, 13, 448, 1, 0, 0, 0, 13, 450, 1, 0, 0, 0, 14, 452, 1, 0, 0, 0, 14, 454, 1, 0, 0, 0, 14, 456, 1, 0, 0, 0, 14, 458, 1, 0, 0, 0, 14, 460, 1, 0, 0, 0, 14, 462, 1, 0, 0, 0, 14, 464, 1, 0, 0, 0, 14, 466, 1, 0, 0, 0, 14, 468, 1, 0, 0, 0, 14, 470, 1, 0, 0, 0, 14, 472, 1, 0, 0, 0, 14, 474, 1, 0, 0, 0, 14, 476, 1, 0, 0, 0, 15, 478, 1, 0, 0, 0, 15, 480, 1, 0, 0, 0, 15, 482, 1, 0, 0, 0, 15, 484, 1, 0, 0, 0, 15, 486, 1, 0, 0, 0, 16, 488, 1, 0, 0, 0, 18, 505, 1, 0, 0, 0, 20, 521, 1, 0, 0, 0, 22, 527, 1, 0, 0, 0, 24, 543, 1, 0, 0, 0, 26, 552, 1, 0, 0, 0, 28, 562, 1, 0, 0, 0, 30, 572, 1, 0, 0, 0, 32, 579, 1, 0, 0, 0, 34, 586, 1, 0, 0, 0, 36, 594, 1, 0, 0, 0, 38, 600, 1, 0, 0, 0, 40, 607, 1, 0, 0, 0, 42, 615, 1, 0, 0, 0, 44, 623, 1, 0, 0, 0, 46, 638, 1, 0, 0, 0, 48, 648, 1, 0, 0, 0, 50, 655, 1, 0, 0, 0, 52, 661, 1, 0, 0, 0, 54, 669, 1, 0, 0, 0, 56, 678, 1, 0, 0, 0, 58, 686, 1, 0, 0, 0, 60, 694, 1, 0, 0, 0, 62, 703, 1, 0, 0, 0, 64, 715, 1, 0, 0, 0, 66, 727, 1, 0, 0, 0, 68, 734, 1, 0, 0, 0, 70, 741, 1, 0, 0, 0, 72, 753, 1, 0, 0, 0, 74, 760, 1, 0, 0, 0, 76, 769, 1, 0, 0, 0, 78, 777, 1, 0, 0, 0, 80, 783, 1, 0, 0, 0, 82, 788, 1, 0, 0, 0, 84, 792, 1, 0, 0, 0, 86, 796, 1, 0, 0, 0, 88, 800, 1, 0, 0, 0, 90, 804, 1, 0, 0, 0, 92, 808, 1, 0, 0, 0, 94, 812, 1, 0, 0, 0, 96, 816, 1, 0, 0, 0, 98, 820, 1, 0, 0, 0, 100, 824, 1, 0, 0, 0, 102, 829, 1, 0, 0, 0, 104, 834, 1, 0, 0, 0, 106, 839, 1, 0, 0, 0, 108, 844, 1, 0, 0, 0, 110, 853, 1, 0, 0, 0, 112, 860, 1, 0, 0, 0, 114, 864, 1, 0, 0, 0, 116, 868, 1, 0, 0, 0, 118, 872, 1, 0, 0, 0, 120, 876, 1, 0, 0, 0, 122, 882, 1, 0, 0, 0, 124, 886, 1, 0, 0, 0, 126, 890, 1, 0, 0, 0, 128, 894, 1, 0, 0, 0, 130, 898, 1, 0, 0, 0, 132, 902, 1, 0, 0, 0, 134, 906, 1, 0, 0, 0, 136, 910, 1, 0, 0, 0, 138, 914, 1, 0, 0, 0, 140, 918, 1, 0, 0, 0, 142, 922, 1, 0, 0, 0, 144, 926, 1, 0, 0, 0, 146, 930, 1, 0, 0, 0, 148, 934, 1, 0, 0, 0, 150, 939, 1, 0, 0, 0, 152, 948, 1, 0, 0, 0, 154, 952, 1, 0, 0, 0, 156, 956, 1, 0, 0, 0, 158, 960, 1, 0, 0, 0, 160, 964, 1, 0, 0, 0, 162, 969, 1, 0, 0, 0, 164, 974, 1, 0, 0, 0, 166, 978, 1, 0, 0, 0, 168, 982, 1, 0, 0, 0, 170, 986, 1, 0, 0, 0, 172, 990, 1, 0, 0, 0, 174, 992, 1, 0, 0, 0, 176, 994, 1, 0, 0, 0, 178, 997, 1, 0, 0, 0, 180, 999, 1, 0, 0, 0, 182, 1008, 1, 0, 0, 0, 184, 1010, 1, 0, 0, 0, 186, 1015, 1, 0, 0, 0, 188, 1017, 1, 0, 0, 0, 190, 1022, 1, 0, 0, 0, 192, 1053, 1, 0, 0, 0, 194, 1056, 1, 0, 0, 0, 196, 1102, 1, 0, 0, 0, 198, 1104, 1, 0, 0, 0, 200, 1108, 1, 0, 0, 0, 202, 1111, 1, 0, 0, 0, 204, 1115, 1, 0, 0, 0, 206, 1117, 1, 0, 0, 0, 208, 1120, 1, 0, 0, 0, 210, 1123, 1, 0, 0, 0, 212, 1125, 1, 0, 0, 0, 214, 1127, 1, 0, 0, 0, 216, 1132, 1, 0, 0, 0, 218, 1134, 1, 0, 0, 0, 220, 1140, 1, 0, 0, 0, 222, 1146, 1, 0, 0, 0, 224, 1149, 1, 0, 0, 0, 226, 1152, 1, 0, 0, 0, 228, 1157, 1, 0, 0, 0, 230, 1162, 1, 0, 0, 0, 232, 1166, 1, 0, 0, 0, 234, 1171, 1, 0, 0, 0, 236, 1177, 1, 0, 0, 0, 238, 1180, 1, 0, 0, 0, 240, 1183, 1, 0, 0, 0, 242, 1185, 1, 0, 0, 0, 244, 1191, 1, 0, 0, 0, 246, 1196, 1, 0, 0, 0, 248, 1201, 1, 0, 0, 0, 250, 1204, 1, 0, 0, 0, 252, 1207, 1, 0, 0, 0, 254, 1210, 1, 0, 0, 0, 256, 1212, 1, 0, 0, 0, 258, 1215, 1, 0, 0, 0, 260, 1217, 1, 0, 0, 0, 262, 1220, 1, 0, 0, 0, 264, 1222, 1, 0, 0, 0, 266, 1224, 1, 0, 0, 0, 268, 1226, 1, 0, 0, 0, 270, 1228, 1, 0, 0, 0, 272, 1230, 1, 0, 0, 0, 274, 1232, 1, 0, 0, 0, 276, 1234, 1, 0, 0, 0, 278, 1237, 1, 0, 0, 0, 280, 1258, 1, 0, 0, 0, 282, 1277, 1, 0, 0, 0, 284, 1279, 1, 0, 0, 0, 286, 1284, 1, 0, 0, 0, 288, 1289, 1, 0, 0, 0, 290, 1294, 1, 0, 0, 0, 292, 1315, 1, 0, 0, 0, 294, 1317, 1, 0, 0, 0, 296, 1325, 1, 0, 0, 0, 298, 1327, 1, 0, 0, 0, 300, 1331, 1, 0, 0, 0, 302, 1335, 1, 0, 0, 0, 304, 1339, 1, 0, 0, 0, 306, 1344, 1, 0, 0, 0, 308, 1348, 1, 0, 0, 0, 310, 1352, 1, 0, 0, 0, 312, 1356, 1, 0, 0, 0, 314, 1361, 1, 0, 0, 0, 316, 1365, 1, 0, 0, 0, 318, 1369, 1, 0, 0, 0, 320, 1381, 1, 0, 0, 0, 322, 1384, 1, 0, 0, 0, 324, 1388, 1, 0, 0, 0, 326, 1392, 1, 0, 0, 0, 328, 1396, 1, 0, 0, 0, 330, 1400, 1, 0, 0, 0, 332, 1404, 1, 0, 0, 0, 334, 1408, 1, 0, 0, 0, 336, 1413, 1, 0, 0, 0, 338, 1418, 1, 0, 0, 0, 340, 1422, 1, 0, 0, 0, 342, 1426, 1, 0, 0, 0, 344, 1430, 1, 0, 0, 0, 346, 1435, 1, 0, 0, 0, 348, 1440, 1, 0, 0, 0, 350, 1444, 1, 0, 0, 0, 352, 1450, 1, 0, 0, 0, 354, 1459, 1, 0, 0, 0, 356, 1463, 1, 0, 0, 0, 358, 1467, 1, 0, 0, 0, 360, 1471, 1, 0, 0, 0, 362, 1475, 1, 0, 0, 0, 364, 1479, 1, 0, 0, 0, 366, 1483, 1, 0, 0, 0, 368, 1487, 1, 0, 0, 0, 370, 1491, 1, 0, 0, 0, 372, 1496, 1, 0, 0, 0, 374, 1500, 1, 0, 0, 0, 376, 1504, 1, 0, 0, 0, 378, 1508, 1, 0, 0, 0, 380, 1513, 1, 0, 0, 0, 382, 1517, 1, 0, 0, 0, 384, 1521, 1, 0, 0, 0, 386, 1525, 1, 0, 0, 0, 388, 1529, 1, 0, 0, 0, 390, 1533, 1, 0, 0, 0, 392, 1539, 1, 0, 0, 0, 394, 1543, 1, 0, 0, 0, 396, 1547, 1, 0, 0, 0, 398, 1551, 1, 0, 0, 0, 400, 1555, 1, 0, 0, 0, 402, 1559, 1, 0, 0, 0, 404, 1563, 1, 0, 0, 0, 406, 1568, 1, 0, 0, 0, 408, 1572, 1, 0, 0, 0, 410, 1576, 1, 0, 0, 0, 412, 1580, 1, 0, 0, 0, 414, 1584, 1, 0, 0, 0, 416, 1588, 1, 0, 0, 0, 418, 1592, 1, 0, 0, 0, 420, 1596, 1, 0, 0, 0, 422, 1600, 1, 0, 0, 0, 424, 1604, 1, 0, 0, 0, 426, 1608, 1, 0, 0, 0, 428, 1613, 1, 0, 0, 0, 430, 1617, 1, 0, 0, 0, 432, 1621, 1, 0, 0, 0, 434, 1625, 1, 0, 0, 0, 436, 1629, 1, 0, 0, 0, 438, 1633, 1, 0, 0, 0, 440, 1641, 1, 0, 0, 0, 442, 1662, 1, 0, 0, 0, 444, 1666, 1, 0, 0, 0, 446, 1670, 1, 0, 0, 0, 448, 1674, 1, 0, 0, 0, 450, 1678, 1, 0, 0, 0, 452, 1682, 1, 0, 0, 0, 454, 1687, 1, 0, 0, 0, 456, 1691, 1, 0, 0, 0, 458, 1695, 1, 0, 0, 0, 460, 1699, 1, 0, 0, 0, 462, 1703, 1, 0, 0, 0, 464, 1707, 1, 0, 0, 0, 466, 1711, 1, 0, 0, 0, 468, 1715, 1, 0, 0, 0, 470, 1719, 1, 0, 0, 0, 472, 1723, 1, 0, 0, 0, 474, 1727, 1, 0, 0, 0, 476, 1731, 1, 0, 0, 0, 478, 1735, 1, 0, 0, 0, 480, 1740, 1, 0, 0, 0, 482, 1745, 1, 0, 0, 0, 484, 1749, 1, 0, 0, 0, 486, 1753, 1, 0, 0, 0, 488, 489, 5, 47, 0, 0, 489, 490, 5, 47, 0, 0, 490, 494, 1, 0, 0, 0, 491, 493, 8, 0, 0, 0, 492, 491, 1, 0, 0, 0, 493, 496, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 498, 1, 0, 0, 0, 496, 494, 1, 0, 0, 0, 497, 499, 5, 13, 0, 0, 498, 497, 1, 0, 0, 0, 498, 499, 1, 0, 0, 0, 499, 501, 1, 0, 0, 0, 500, 502, 5, 10, 0, 0, 501, 500, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 504, 6, 0, 0, 0, 504, 17, 1, 0, 0, 0, 505, 506, 5, 47, 0, 0, 506, 507, 5, 42, 0, 0, 507, 512, 1, 0, 0, 0, 508, 511, 3, 18, 1, 0, 509, 511, 9, 0, 0, 0, 510, 508, 1, 0, 0, 0, 510, 509, 1, 0, 0, 0, 511, 514, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 512, 510, 1, 0, 0, 0, 513, 515, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 515, 516, 5, 42, 0, 0, 516, 517, 5, 47, 0, 0, 517, 518, 1, 0, 0, 0, 518, 519, 6, 1, 0, 0, 519, 19, 1, 0, 0, 0, 520, 522, 7, 1, 0, 0, 521, 520, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 521, 1, 0, 0, 0, 523, 524, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 526, 6, 2, 0, 0, 526, 21, 1, 0, 0, 0, 527, 528, 4, 3, 0, 0, 528, 529, 7, 2, 0, 0, 529, 530, 7, 3, 0, 0, 530, 531, 7, 4, 0, 0, 531, 532, 7, 5, 0, 0, 532, 533, 7, 6, 0, 0, 533, 534, 7, 7, 0, 0, 534, 535, 5, 95, 0, 0, 535, 536, 7, 8, 0, 0, 536, 537, 7, 9, 0, 0, 537, 538, 7, 10, 0, 0, 538, 539, 7, 5, 0, 0, 539, 540, 7, 11, 0, 0, 540, 541, 1, 0, 0, 0, 541, 542, 6, 3, 1, 0, 542, 23, 1, 0, 0, 0, 543, 544, 7, 7, 0, 0, 544, 545, 7, 5, 0, 0, 545, 546, 7, 12, 0, 0, 546, 547, 7, 10, 0, 0, 547, 548, 7, 2, 0, 0, 548, 549, 7, 3, 0, 0, 549, 550, 1, 0, 0, 0, 550, 551, 6, 4, 2, 0, 551, 25, 1, 0, 0, 0, 552, 553, 7, 7, 0, 0, 553, 554, 7, 13, 0, 0, 554, 555, 7, 8, 0, 0, 555, 556, 7, 14, 0, 0, 556, 557, 7, 4, 0, 0, 557, 558, 7, 10, 0, 0, 558, 559, 7, 5, 0, 0, 559, 560, 1, 0, 0, 0, 560, 561, 6, 5, 3, 0, 561, 27, 1, 0, 0, 0, 562, 563, 7, 15, 0, 0, 563, 564, 7, 10, 0, 0, 564, 565, 7, 16, 0, 0, 565, 566, 7, 16, 0, 0, 566, 567, 7, 7, 0, 0, 567, 568, 7, 2, 0, 0, 568, 569, 7, 11, 0, 0, 569, 570, 1, 0, 0, 0, 570, 571, 6, 6, 4, 0, 571, 29, 1, 0, 0, 0, 572, 573, 7, 7, 0, 0, 573, 574, 7, 17, 0, 0, 574, 575, 7, 4, 0, 0, 575, 576, 7, 14, 0, 0, 576, 577, 1, 0, 0, 0, 577, 578, 6, 7, 4, 0, 578, 31, 1, 0, 0, 0, 579, 580, 7, 6, 0, 0, 580, 581, 7, 12, 0, 0, 581, 582, 7, 9, 0, 0, 582, 583, 7, 18, 0, 0, 583, 584, 1, 0, 0, 0, 584, 585, 6, 8, 4, 0, 585, 33, 1, 0, 0, 0, 586, 587, 7, 14, 0, 0, 587, 588, 7, 10, 0, 0, 588, 589, 7, 19, 0, 0, 589, 590, 7, 10, 0, 0, 590, 591, 7, 11, 0, 0, 591, 592, 1, 0, 0, 0, 592, 593, 6, 9, 4, 0, 593, 35, 1, 0, 0, 0, 594, 595, 7, 12, 0, 0, 595, 596, 7, 9, 0, 0, 596, 597, 7, 20, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 6, 10, 4, 0, 599, 37, 1, 0, 0, 0, 600, 601, 7, 16, 0, 0, 601, 602, 7, 9, 0, 0, 602, 603, 7, 12, 0, 0, 603, 604, 7, 11, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 6, 11, 4, 0, 606, 39, 1, 0, 0, 0, 607, 608, 7, 16, 0, 0, 608, 609, 7, 11, 0, 0, 609, 610, 7, 4, 0, 0, 610, 611, 7, 11, 0, 0, 611, 612, 7, 16, 0, 0, 612, 613, 1, 0, 0, 0, 613, 614, 6, 12, 4, 0, 614, 41, 1, 0, 0, 0, 615, 616, 7, 20, 0, 0, 616, 617, 7, 3, 0, 0, 617, 618, 7, 7, 0, 0, 618, 619, 7, 12, 0, 0, 619, 620, 7, 7, 0, 0, 620, 621, 1, 0, 0, 0, 621, 622, 6, 13, 4, 0, 622, 43, 1, 0, 0, 0, 623, 624, 4, 14, 1, 0, 624, 625, 7, 10, 0, 0, 625, 626, 7, 5, 0, 0, 626, 627, 7, 14, 0, 0, 627, 628, 7, 10, 0, 0, 628, 629, 7, 5, 0, 0, 629, 630, 7, 7, 0, 0, 630, 631, 7, 16, 0, 0, 631, 632, 7, 11, 0, 0, 632, 633, 7, 4, 0, 0, 633, 634, 7, 11, 0, 0, 634, 635, 7, 16, 0, 0, 635, 636, 1, 0, 0, 0, 636, 637, 6, 14, 4, 0, 637, 45, 1, 0, 0, 0, 638, 639, 4, 15, 2, 0, 639, 640, 7, 12, 0, 0, 640, 641, 7, 7, 0, 0, 641, 642, 7, 12, 0, 0, 642, 643, 7, 4, 0, 0, 643, 644, 7, 5, 0, 0, 644, 645, 7, 18, 0, 0, 645, 646, 1, 0, 0, 0, 646, 647, 6, 15, 4, 0, 647, 47, 1, 0, 0, 0, 648, 649, 7, 21, 0, 0, 649, 650, 7, 12, 0, 0, 650, 651, 7, 9, 0, 0, 651, 652, 7, 19, 0, 0, 652, 653, 1, 0, 0, 0, 653, 654, 6, 16, 5, 0, 654, 49, 1, 0, 0, 0, 655, 656, 4, 17, 3, 0, 656, 657, 7, 11, 0, 0, 657, 658, 7, 16, 0, 0, 658, 659, 1, 0, 0, 0, 659, 660, 6, 17, 5, 0, 660, 51, 1, 0, 0, 0, 661, 662, 4, 18, 4, 0, 662, 663, 7, 21, 0, 0, 663, 664, 7, 9, 0, 0, 664, 665, 7, 12, 0, 0, 665, 666, 7, 18, 0, 0, 666, 667, 1, 0, 0, 0, 667, 668, 6, 18, 6, 0, 668, 53, 1, 0, 0, 0, 669, 670, 7, 14, 0, 0, 670, 671, 7, 9, 0, 0, 671, 672, 7, 9, 0, 0, 672, 673, 7, 18, 0, 0, 673, 674, 7, 22, 0, 0, 674, 675, 7, 8, 0, 0, 675, 676, 1, 0, 0, 0, 676, 677, 6, 19, 7, 0, 677, 55, 1, 0, 0, 0, 678, 679, 4, 20, 5, 0, 679, 680, 7, 21, 0, 0, 680, 681, 7, 22, 0, 0, 681, 682, 7, 14, 0, 0, 682, 683, 7, 14, 0, 0, 683, 684, 1, 0, 0, 0, 684, 685, 6, 20, 7, 0, 685, 57, 1, 0, 0, 0, 686, 687, 4, 21, 6, 0, 687, 688, 7, 14, 0, 0, 688, 689, 7, 7, 0, 0, 689, 690, 7, 21, 0, 0, 690, 691, 7, 11, 0, 0, 691, 692, 1, 0, 0, 0, 692, 693, 6, 21, 7, 0, 693, 59, 1, 0, 0, 0, 694, 695, 4, 22, 7, 0, 695, 696, 7, 12, 0, 0, 696, 697, 7, 10, 0, 0, 697, 698, 7, 6, 0, 0, 698, 699, 7, 3, 0, 0, 699, 700, 7, 11, 0, 0, 700, 701, 1, 0, 0, 0, 701, 702, 6, 22, 7, 0, 702, 61, 1, 0, 0, 0, 703, 704, 4, 23, 8, 0, 704, 705, 7, 14, 0, 0, 705, 706, 7, 9, 0, 0, 706, 707, 7, 9, 0, 0, 707, 708, 7, 18, 0, 0, 708, 709, 7, 22, 0, 0, 709, 710, 7, 8, 0, 0, 710, 711, 5, 95, 0, 0, 711, 712, 5, 128020, 0, 0, 712, 713, 1, 0, 0, 0, 713, 714, 6, 23, 8, 0, 714, 63, 1, 0, 0, 0, 715, 716, 7, 19, 0, 0, 716, 717, 7, 17, 0, 0, 717, 718, 5, 95, 0, 0, 718, 719, 7, 7, 0, 0, 719, 720, 7, 13, 0, 0, 720, 721, 7, 8, 0, 0, 721, 722, 7, 4, 0, 0, 722, 723, 7, 5, 0, 0, 723, 724, 7, 15, 0, 0, 724, 725, 1, 0, 0, 0, 725, 726, 6, 24, 9, 0, 726, 65, 1, 0, 0, 0, 727, 728, 7, 15, 0, 0, 728, 729, 7, 12, 0, 0, 729, 730, 7, 9, 0, 0, 730, 731, 7, 8, 0, 0, 731, 732, 1, 0, 0, 0, 732, 733, 6, 25, 10, 0, 733, 67, 1, 0, 0, 0, 734, 735, 7, 18, 0, 0, 735, 736, 7, 7, 0, 0, 736, 737, 7, 7, 0, 0, 737, 738, 7, 8, 0, 0, 738, 739, 1, 0, 0, 0, 739, 740, 6, 26, 10, 0, 740, 69, 1, 0, 0, 0, 741, 742, 4, 27, 9, 0, 742, 743, 7, 10, 0, 0, 743, 744, 7, 5, 0, 0, 744, 745, 7, 16, 0, 0, 745, 746, 7, 10, 0, 0, 746, 747, 7, 16, 0, 0, 747, 748, 7, 11, 0, 0, 748, 749, 5, 95, 0, 0, 749, 750, 5, 128020, 0, 0, 750, 751, 1, 0, 0, 0, 751, 752, 6, 27, 10, 0, 752, 71, 1, 0, 0, 0, 753, 754, 4, 28, 10, 0, 754, 755, 7, 12, 0, 0, 755, 756, 7, 12, 0, 0, 756, 757, 7, 21, 0, 0, 757, 758, 1, 0, 0, 0, 758, 759, 6, 28, 4, 0, 759, 73, 1, 0, 0, 0, 760, 761, 7, 12, 0, 0, 761, 762, 7, 7, 0, 0, 762, 763, 7, 5, 0, 0, 763, 764, 7, 4, 0, 0, 764, 765, 7, 19, 0, 0, 765, 766, 7, 7, 0, 0, 766, 767, 1, 0, 0, 0, 767, 768, 6, 29, 11, 0, 768, 75, 1, 0, 0, 0, 769, 770, 7, 16, 0, 0, 770, 771, 7, 3, 0, 0, 771, 772, 7, 9, 0, 0, 772, 773, 7, 20, 0, 0, 773, 774, 1, 0, 0, 0, 774, 775, 6, 30, 12, 0, 775, 77, 1, 0, 0, 0, 776, 778, 8, 23, 0, 0, 777, 776, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 777, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 782, 6, 31, 4, 0, 782, 79, 1, 0, 0, 0, 783, 784, 3, 170, 77, 0, 784, 785, 1, 0, 0, 0, 785, 786, 6, 32, 13, 0, 786, 787, 6, 32, 14, 0, 787, 81, 1, 0, 0, 0, 788, 789, 3, 236, 110, 0, 789, 790, 1, 0, 0, 0, 790, 791, 6, 33, 15, 0, 791, 83, 1, 0, 0, 0, 792, 793, 3, 200, 92, 0, 793, 794, 1, 0, 0, 0, 794, 795, 6, 34, 16, 0, 795, 85, 1, 0, 0, 0, 796, 797, 3, 216, 100, 0, 797, 798, 1, 0, 0, 0, 798, 799, 6, 35, 17, 0, 799, 87, 1, 0, 0, 0, 800, 801, 3, 212, 98, 0, 801, 802, 1, 0, 0, 0, 802, 803, 6, 36, 18, 0, 803, 89, 1, 0, 0, 0, 804, 805, 3, 296, 140, 0, 805, 806, 1, 0, 0, 0, 806, 807, 6, 37, 19, 0, 807, 91, 1, 0, 0, 0, 808, 809, 3, 292, 138, 0, 809, 810, 1, 0, 0, 0, 810, 811, 6, 38, 20, 0, 811, 93, 1, 0, 0, 0, 812, 813, 3, 16, 0, 0, 813, 814, 1, 0, 0, 0, 814, 815, 6, 39, 0, 0, 815, 95, 1, 0, 0, 0, 816, 817, 3, 18, 1, 0, 817, 818, 1, 0, 0, 0, 818, 819, 6, 40, 0, 0, 819, 97, 1, 0, 0, 0, 820, 821, 3, 20, 2, 0, 821, 822, 1, 0, 0, 0, 822, 823, 6, 41, 0, 0, 823, 99, 1, 0, 0, 0, 824, 825, 3, 170, 77, 0, 825, 826, 1, 0, 0, 0, 826, 827, 6, 42, 13, 0, 827, 828, 6, 42, 14, 0, 828, 101, 1, 0, 0, 0, 829, 830, 3, 284, 134, 0, 830, 831, 1, 0, 0, 0, 831, 832, 6, 43, 21, 0, 832, 833, 6, 43, 22, 0, 833, 103, 1, 0, 0, 0, 834, 835, 3, 236, 110, 0, 835, 836, 1, 0, 0, 0, 836, 837, 6, 44, 15, 0, 837, 838, 6, 44, 23, 0, 838, 105, 1, 0, 0, 0, 839, 840, 3, 246, 115, 0, 840, 841, 1, 0, 0, 0, 841, 842, 6, 45, 24, 0, 842, 843, 6, 45, 23, 0, 843, 107, 1, 0, 0, 0, 844, 845, 8, 24, 0, 0, 845, 109, 1, 0, 0, 0, 846, 848, 3, 108, 46, 0, 847, 846, 1, 0, 0, 0, 848, 849, 1, 0, 0, 0, 849, 847, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 851, 1, 0, 0, 0, 851, 852, 3, 210, 97, 0, 852, 854, 1, 0, 0, 0, 853, 847, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 856, 1, 0, 0, 0, 855, 857, 3, 108, 46, 0, 856, 855, 1, 0, 0, 0, 857, 858, 1, 0, 0, 0, 858, 856, 1, 0, 0, 0, 858, 859, 1, 0, 0, 0, 859, 111, 1, 0, 0, 0, 860, 861, 3, 110, 47, 0, 861, 862, 1, 0, 0, 0, 862, 863, 6, 48, 25, 0, 863, 113, 1, 0, 0, 0, 864, 865, 3, 16, 0, 0, 865, 866, 1, 0, 0, 0, 866, 867, 6, 49, 0, 0, 867, 115, 1, 0, 0, 0, 868, 869, 3, 18, 1, 0, 869, 870, 1, 0, 0, 0, 870, 871, 6, 50, 0, 0, 871, 117, 1, 0, 0, 0, 872, 873, 3, 20, 2, 0, 873, 874, 1, 0, 0, 0, 874, 875, 6, 51, 0, 0, 875, 119, 1, 0, 0, 0, 876, 877, 3, 170, 77, 0, 877, 878, 1, 0, 0, 0, 878, 879, 6, 52, 13, 0, 879, 880, 6, 52, 14, 0, 880, 881, 6, 52, 14, 0, 881, 121, 1, 0, 0, 0, 882, 883, 3, 204, 94, 0, 883, 884, 1, 0, 0, 0, 884, 885, 6, 53, 26, 0, 885, 123, 1, 0, 0, 0, 886, 887, 3, 212, 98, 0, 887, 888, 1, 0, 0, 0, 888, 889, 6, 54, 18, 0, 889, 125, 1, 0, 0, 0, 890, 891, 3, 216, 100, 0, 891, 892, 1, 0, 0, 0, 892, 893, 6, 55, 17, 0, 893, 127, 1, 0, 0, 0, 894, 895, 3, 246, 115, 0, 895, 896, 1, 0, 0, 0, 896, 897, 6, 56, 24, 0, 897, 129, 1, 0, 0, 0, 898, 899, 3, 444, 214, 0, 899, 900, 1, 0, 0, 0, 900, 901, 6, 57, 27, 0, 901, 131, 1, 0, 0, 0, 902, 903, 3, 296, 140, 0, 903, 904, 1, 0, 0, 0, 904, 905, 6, 58, 19, 0, 905, 133, 1, 0, 0, 0, 906, 907, 3, 240, 112, 0, 907, 908, 1, 0, 0, 0, 908, 909, 6, 59, 28, 0, 909, 135, 1, 0, 0, 0, 910, 911, 3, 280, 132, 0, 911, 912, 1, 0, 0, 0, 912, 913, 6, 60, 29, 0, 913, 137, 1, 0, 0, 0, 914, 915, 3, 276, 130, 0, 915, 916, 1, 0, 0, 0, 916, 917, 6, 61, 30, 0, 917, 139, 1, 0, 0, 0, 918, 919, 3, 282, 133, 0, 919, 920, 1, 0, 0, 0, 920, 921, 6, 62, 31, 0, 921, 141, 1, 0, 0, 0, 922, 923, 3, 16, 0, 0, 923, 924, 1, 0, 0, 0, 924, 925, 6, 63, 0, 0, 925, 143, 1, 0, 0, 0, 926, 927, 3, 18, 1, 0, 927, 928, 1, 0, 0, 0, 928, 929, 6, 64, 0, 0, 929, 145, 1, 0, 0, 0, 930, 931, 3, 20, 2, 0, 931, 932, 1, 0, 0, 0, 932, 933, 6, 65, 0, 0, 933, 147, 1, 0, 0, 0, 934, 935, 3, 286, 135, 0, 935, 936, 1, 0, 0, 0, 936, 937, 6, 66, 32, 0, 937, 938, 6, 66, 14, 0, 938, 149, 1, 0, 0, 0, 939, 940, 3, 210, 97, 0, 940, 941, 1, 0, 0, 0, 941, 942, 6, 67, 33, 0, 942, 151, 1, 0, 0, 0, 943, 949, 3, 182, 83, 0, 944, 949, 3, 172, 78, 0, 945, 949, 3, 216, 100, 0, 946, 949, 3, 174, 79, 0, 947, 949, 3, 188, 86, 0, 948, 943, 1, 0, 0, 0, 948, 944, 1, 0, 0, 0, 948, 945, 1, 0, 0, 0, 948, 946, 1, 0, 0, 0, 948, 947, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 948, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 153, 1, 0, 0, 0, 952, 953, 3, 16, 0, 0, 953, 954, 1, 0, 0, 0, 954, 955, 6, 69, 0, 0, 955, 155, 1, 0, 0, 0, 956, 957, 3, 18, 1, 0, 957, 958, 1, 0, 0, 0, 958, 959, 6, 70, 0, 0, 959, 157, 1, 0, 0, 0, 960, 961, 3, 20, 2, 0, 961, 962, 1, 0, 0, 0, 962, 963, 6, 71, 0, 0, 963, 159, 1, 0, 0, 0, 964, 965, 3, 284, 134, 0, 965, 966, 1, 0, 0, 0, 966, 967, 6, 72, 21, 0, 967, 968, 6, 72, 34, 0, 968, 161, 1, 0, 0, 0, 969, 970, 3, 170, 77, 0, 970, 971, 1, 0, 0, 0, 971, 972, 6, 73, 13, 0, 972, 973, 6, 73, 14, 0, 973, 163, 1, 0, 0, 0, 974, 975, 3, 20, 2, 0, 975, 976, 1, 0, 0, 0, 976, 977, 6, 74, 0, 0, 977, 165, 1, 0, 0, 0, 978, 979, 3, 16, 0, 0, 979, 980, 1, 0, 0, 0, 980, 981, 6, 75, 0, 0, 981, 167, 1, 0, 0, 0, 982, 983, 3, 18, 1, 0, 983, 984, 1, 0, 0, 0, 984, 985, 6, 76, 0, 0, 985, 169, 1, 0, 0, 0, 986, 987, 5, 124, 0, 0, 987, 988, 1, 0, 0, 0, 988, 989, 6, 77, 14, 0, 989, 171, 1, 0, 0, 0, 990, 991, 7, 25, 0, 0, 991, 173, 1, 0, 0, 0, 992, 993, 7, 26, 0, 0, 993, 175, 1, 0, 0, 0, 994, 995, 5, 92, 0, 0, 995, 996, 7, 27, 0, 0, 996, 177, 1, 0, 0, 0, 997, 998, 8, 28, 0, 0, 998, 179, 1, 0, 0, 0, 999, 1001, 7, 7, 0, 0, 1000, 1002, 7, 29, 0, 0, 1001, 1000, 1, 0, 0, 0, 1001, 1002, 1, 0, 0, 0, 1002, 1004, 1, 0, 0, 0, 1003, 1005, 3, 172, 78, 0, 1004, 1003, 1, 0, 0, 0, 1005, 1006, 1, 0, 0, 0, 1006, 1004, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 181, 1, 0, 0, 0, 1008, 1009, 5, 64, 0, 0, 1009, 183, 1, 0, 0, 0, 1010, 1011, 5, 96, 0, 0, 1011, 185, 1, 0, 0, 0, 1012, 1016, 8, 30, 0, 0, 1013, 1014, 5, 96, 0, 0, 1014, 1016, 5, 96, 0, 0, 1015, 1012, 1, 0, 0, 0, 1015, 1013, 1, 0, 0, 0, 1016, 187, 1, 0, 0, 0, 1017, 1018, 5, 95, 0, 0, 1018, 189, 1, 0, 0, 0, 1019, 1023, 3, 174, 79, 0, 1020, 1023, 3, 172, 78, 0, 1021, 1023, 3, 188, 86, 0, 1022, 1019, 1, 0, 0, 0, 1022, 1020, 1, 0, 0, 0, 1022, 1021, 1, 0, 0, 0, 1023, 191, 1, 0, 0, 0, 1024, 1029, 5, 34, 0, 0, 1025, 1028, 3, 176, 80, 0, 1026, 1028, 3, 178, 81, 0, 1027, 1025, 1, 0, 0, 0, 1027, 1026, 1, 0, 0, 0, 1028, 1031, 1, 0, 0, 0, 1029, 1027, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1032, 1, 0, 0, 0, 1031, 1029, 1, 0, 0, 0, 1032, 1054, 5, 34, 0, 0, 1033, 1034, 5, 34, 0, 0, 1034, 1035, 5, 34, 0, 0, 1035, 1036, 5, 34, 0, 0, 1036, 1040, 1, 0, 0, 0, 1037, 1039, 8, 0, 0, 0, 1038, 1037, 1, 0, 0, 0, 1039, 1042, 1, 0, 0, 0, 1040, 1041, 1, 0, 0, 0, 1040, 1038, 1, 0, 0, 0, 1041, 1043, 1, 0, 0, 0, 1042, 1040, 1, 0, 0, 0, 1043, 1044, 5, 34, 0, 0, 1044, 1045, 5, 34, 0, 0, 1045, 1046, 5, 34, 0, 0, 1046, 1048, 1, 0, 0, 0, 1047, 1049, 5, 34, 0, 0, 1048, 1047, 1, 0, 0, 0, 1048, 1049, 1, 0, 0, 0, 1049, 1051, 1, 0, 0, 0, 1050, 1052, 5, 34, 0, 0, 1051, 1050, 1, 0, 0, 0, 1051, 1052, 1, 0, 0, 0, 1052, 1054, 1, 0, 0, 0, 1053, 1024, 1, 0, 0, 0, 1053, 1033, 1, 0, 0, 0, 1054, 193, 1, 0, 0, 0, 1055, 1057, 3, 172, 78, 0, 1056, 1055, 1, 0, 0, 0, 1057, 1058, 1, 0, 0, 0, 1058, 1056, 1, 0, 0, 0, 1058, 1059, 1, 0, 0, 0, 1059, 195, 1, 0, 0, 0, 1060, 1062, 3, 172, 78, 0, 1061, 1060, 1, 0, 0, 0, 1062, 1063, 1, 0, 0, 0, 1063, 1061, 1, 0, 0, 0, 1063, 1064, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1069, 3, 216, 100, 0, 1066, 1068, 3, 172, 78, 0, 1067, 1066, 1, 0, 0, 0, 1068, 1071, 1, 0, 0, 0, 1069, 1067, 1, 0, 0, 0, 1069, 1070, 1, 0, 0, 0, 1070, 1103, 1, 0, 0, 0, 1071, 1069, 1, 0, 0, 0, 1072, 1074, 3, 216, 100, 0, 1073, 1075, 3, 172, 78, 0, 1074, 1073, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 1074, 1, 0, 0, 0, 1076, 1077, 1, 0, 0, 0, 1077, 1103, 1, 0, 0, 0, 1078, 1080, 3, 172, 78, 0, 1079, 1078, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 1079, 1, 0, 0, 0, 1081, 1082, 1, 0, 0, 0, 1082, 1090, 1, 0, 0, 0, 1083, 1087, 3, 216, 100, 0, 1084, 1086, 3, 172, 78, 0, 1085, 1084, 1, 0, 0, 0, 1086, 1089, 1, 0, 0, 0, 1087, 1085, 1, 0, 0, 0, 1087, 1088, 1, 0, 0, 0, 1088, 1091, 1, 0, 0, 0, 1089, 1087, 1, 0, 0, 0, 1090, 1083, 1, 0, 0, 0, 1090, 1091, 1, 0, 0, 0, 1091, 1092, 1, 0, 0, 0, 1092, 1093, 3, 180, 82, 0, 1093, 1103, 1, 0, 0, 0, 1094, 1096, 3, 216, 100, 0, 1095, 1097, 3, 172, 78, 0, 1096, 1095, 1, 0, 0, 0, 1097, 1098, 1, 0, 0, 0, 1098, 1096, 1, 0, 0, 0, 1098, 1099, 1, 0, 0, 0, 1099, 1100, 1, 0, 0, 0, 1100, 1101, 3, 180, 82, 0, 1101, 1103, 1, 0, 0, 0, 1102, 1061, 1, 0, 0, 0, 1102, 1072, 1, 0, 0, 0, 1102, 1079, 1, 0, 0, 0, 1102, 1094, 1, 0, 0, 0, 1103, 197, 1, 0, 0, 0, 1104, 1105, 7, 4, 0, 0, 1105, 1106, 7, 5, 0, 0, 1106, 1107, 7, 15, 0, 0, 1107, 199, 1, 0, 0, 0, 1108, 1109, 7, 4, 0, 0, 1109, 1110, 7, 16, 0, 0, 1110, 201, 1, 0, 0, 0, 1111, 1112, 7, 4, 0, 0, 1112, 1113, 7, 16, 0, 0, 1113, 1114, 7, 2, 0, 0, 1114, 203, 1, 0, 0, 0, 1115, 1116, 5, 61, 0, 0, 1116, 205, 1, 0, 0, 0, 1117, 1118, 7, 31, 0, 0, 1118, 1119, 7, 32, 0, 0, 1119, 207, 1, 0, 0, 0, 1120, 1121, 5, 58, 0, 0, 1121, 1122, 5, 58, 0, 0, 1122, 209, 1, 0, 0, 0, 1123, 1124, 5, 58, 0, 0, 1124, 211, 1, 0, 0, 0, 1125, 1126, 5, 44, 0, 0, 1126, 213, 1, 0, 0, 0, 1127, 1128, 7, 15, 0, 0, 1128, 1129, 7, 7, 0, 0, 1129, 1130, 7, 16, 0, 0, 1130, 1131, 7, 2, 0, 0, 1131, 215, 1, 0, 0, 0, 1132, 1133, 5, 46, 0, 0, 1133, 217, 1, 0, 0, 0, 1134, 1135, 7, 21, 0, 0, 1135, 1136, 7, 4, 0, 0, 1136, 1137, 7, 14, 0, 0, 1137, 1138, 7, 16, 0, 0, 1138, 1139, 7, 7, 0, 0, 1139, 219, 1, 0, 0, 0, 1140, 1141, 7, 21, 0, 0, 1141, 1142, 7, 10, 0, 0, 1142, 1143, 7, 12, 0, 0, 1143, 1144, 7, 16, 0, 0, 1144, 1145, 7, 11, 0, 0, 1145, 221, 1, 0, 0, 0, 1146, 1147, 7, 10, 0, 0, 1147, 1148, 7, 5, 0, 0, 1148, 223, 1, 0, 0, 0, 1149, 1150, 7, 10, 0, 0, 1150, 1151, 7, 16, 0, 0, 1151, 225, 1, 0, 0, 0, 1152, 1153, 7, 14, 0, 0, 1153, 1154, 7, 4, 0, 0, 1154, 1155, 7, 16, 0, 0, 1155, 1156, 7, 11, 0, 0, 1156, 227, 1, 0, 0, 0, 1157, 1158, 7, 14, 0, 0, 1158, 1159, 7, 10, 0, 0, 1159, 1160, 7, 18, 0, 0, 1160, 1161, 7, 7, 0, 0, 1161, 229, 1, 0, 0, 0, 1162, 1163, 7, 5, 0, 0, 1163, 1164, 7, 9, 0, 0, 1164, 1165, 7, 11, 0, 0, 1165, 231, 1, 0, 0, 0, 1166, 1167, 7, 5, 0, 0, 1167, 1168, 7, 22, 0, 0, 1168, 1169, 7, 14, 0, 0, 1169, 1170, 7, 14, 0, 0, 1170, 233, 1, 0, 0, 0, 1171, 1172, 7, 5, 0, 0, 1172, 1173, 7, 22, 0, 0, 1173, 1174, 7, 14, 0, 0, 1174, 1175, 7, 14, 0, 0, 1175, 1176, 7, 16, 0, 0, 1176, 235, 1, 0, 0, 0, 1177, 1178, 7, 9, 0, 0, 1178, 1179, 7, 5, 0, 0, 1179, 237, 1, 0, 0, 0, 1180, 1181, 7, 9, 0, 0, 1181, 1182, 7, 12, 0, 0, 1182, 239, 1, 0, 0, 0, 1183, 1184, 5, 63, 0, 0, 1184, 241, 1, 0, 0, 0, 1185, 1186, 7, 12, 0, 0, 1186, 1187, 7, 14, 0, 0, 1187, 1188, 7, 10, 0, 0, 1188, 1189, 7, 18, 0, 0, 1189, 1190, 7, 7, 0, 0, 1190, 243, 1, 0, 0, 0, 1191, 1192, 7, 11, 0, 0, 1192, 1193, 7, 12, 0, 0, 1193, 1194, 7, 22, 0, 0, 1194, 1195, 7, 7, 0, 0, 1195, 245, 1, 0, 0, 0, 1196, 1197, 7, 20, 0, 0, 1197, 1198, 7, 10, 0, 0, 1198, 1199, 7, 11, 0, 0, 1199, 1200, 7, 3, 0, 0, 1200, 247, 1, 0, 0, 0, 1201, 1202, 5, 61, 0, 0, 1202, 1203, 5, 61, 0, 0, 1203, 249, 1, 0, 0, 0, 1204, 1205, 5, 61, 0, 0, 1205, 1206, 5, 126, 0, 0, 1206, 251, 1, 0, 0, 0, 1207, 1208, 5, 33, 0, 0, 1208, 1209, 5, 61, 0, 0, 1209, 253, 1, 0, 0, 0, 1210, 1211, 5, 60, 0, 0, 1211, 255, 1, 0, 0, 0, 1212, 1213, 5, 60, 0, 0, 1213, 1214, 5, 61, 0, 0, 1214, 257, 1, 0, 0, 0, 1215, 1216, 5, 62, 0, 0, 1216, 259, 1, 0, 0, 0, 1217, 1218, 5, 62, 0, 0, 1218, 1219, 5, 61, 0, 0, 1219, 261, 1, 0, 0, 0, 1220, 1221, 5, 43, 0, 0, 1221, 263, 1, 0, 0, 0, 1222, 1223, 5, 45, 0, 0, 1223, 265, 1, 0, 0, 0, 1224, 1225, 5, 42, 0, 0, 1225, 267, 1, 0, 0, 0, 1226, 1227, 5, 47, 0, 0, 1227, 269, 1, 0, 0, 0, 1228, 1229, 5, 37, 0, 0, 1229, 271, 1, 0, 0, 0, 1230, 1231, 5, 123, 0, 0, 1231, 273, 1, 0, 0, 0, 1232, 1233, 5, 125, 0, 0, 1233, 275, 1, 0, 0, 0, 1234, 1235, 5, 63, 0, 0, 1235, 1236, 5, 63, 0, 0, 1236, 277, 1, 0, 0, 0, 1237, 1238, 3, 42, 13, 0, 1238, 1239, 1, 0, 0, 0, 1239, 1240, 6, 131, 35, 0, 1240, 279, 1, 0, 0, 0, 1241, 1244, 3, 240, 112, 0, 1242, 1245, 3, 174, 79, 0, 1243, 1245, 3, 188, 86, 0, 1244, 1242, 1, 0, 0, 0, 1244, 1243, 1, 0, 0, 0, 1245, 1249, 1, 0, 0, 0, 1246, 1248, 3, 190, 87, 0, 1247, 1246, 1, 0, 0, 0, 1248, 1251, 1, 0, 0, 0, 1249, 1247, 1, 0, 0, 0, 1249, 1250, 1, 0, 0, 0, 1250, 1259, 1, 0, 0, 0, 1251, 1249, 1, 0, 0, 0, 1252, 1254, 3, 240, 112, 0, 1253, 1255, 3, 172, 78, 0, 1254, 1253, 1, 0, 0, 0, 1255, 1256, 1, 0, 0, 0, 1256, 1254, 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1259, 1, 0, 0, 0, 1258, 1241, 1, 0, 0, 0, 1258, 1252, 1, 0, 0, 0, 1259, 281, 1, 0, 0, 0, 1260, 1263, 3, 276, 130, 0, 1261, 1264, 3, 174, 79, 0, 1262, 1264, 3, 188, 86, 0, 1263, 1261, 1, 0, 0, 0, 1263, 1262, 1, 0, 0, 0, 1264, 1268, 1, 0, 0, 0, 1265, 1267, 3, 190, 87, 0, 1266, 1265, 1, 0, 0, 0, 1267, 1270, 1, 0, 0, 0, 1268, 1266, 1, 0, 0, 0, 1268, 1269, 1, 0, 0, 0, 1269, 1278, 1, 0, 0, 0, 1270, 1268, 1, 0, 0, 0, 1271, 1273, 3, 276, 130, 0, 1272, 1274, 3, 172, 78, 0, 1273, 1272, 1, 0, 0, 0, 1274, 1275, 1, 0, 0, 0, 1275, 1273, 1, 0, 0, 0, 1275, 1276, 1, 0, 0, 0, 1276, 1278, 1, 0, 0, 0, 1277, 1260, 1, 0, 0, 0, 1277, 1271, 1, 0, 0, 0, 1278, 283, 1, 0, 0, 0, 1279, 1280, 5, 91, 0, 0, 1280, 1281, 1, 0, 0, 0, 1281, 1282, 6, 134, 4, 0, 1282, 1283, 6, 134, 4, 0, 1283, 285, 1, 0, 0, 0, 1284, 1285, 5, 93, 0, 0, 1285, 1286, 1, 0, 0, 0, 1286, 1287, 6, 135, 14, 0, 1287, 1288, 6, 135, 14, 0, 1288, 287, 1, 0, 0, 0, 1289, 1290, 5, 40, 0, 0, 1290, 1291, 1, 0, 0, 0, 1291, 1292, 6, 136, 4, 0, 1292, 1293, 6, 136, 4, 0, 1293, 289, 1, 0, 0, 0, 1294, 1295, 5, 41, 0, 0, 1295, 1296, 1, 0, 0, 0, 1296, 1297, 6, 137, 14, 0, 1297, 1298, 6, 137, 14, 0, 1298, 291, 1, 0, 0, 0, 1299, 1303, 3, 174, 79, 0, 1300, 1302, 3, 190, 87, 0, 1301, 1300, 1, 0, 0, 0, 1302, 1305, 1, 0, 0, 0, 1303, 1301, 1, 0, 0, 0, 1303, 1304, 1, 0, 0, 0, 1304, 1316, 1, 0, 0, 0, 1305, 1303, 1, 0, 0, 0, 1306, 1309, 3, 188, 86, 0, 1307, 1309, 3, 182, 83, 0, 1308, 1306, 1, 0, 0, 0, 1308, 1307, 1, 0, 0, 0, 1309, 1311, 1, 0, 0, 0, 1310, 1312, 3, 190, 87, 0, 1311, 1310, 1, 0, 0, 0, 1312, 1313, 1, 0, 0, 0, 1313, 1311, 1, 0, 0, 0, 1313, 1314, 1, 0, 0, 0, 1314, 1316, 1, 0, 0, 0, 1315, 1299, 1, 0, 0, 0, 1315, 1308, 1, 0, 0, 0, 1316, 293, 1, 0, 0, 0, 1317, 1319, 3, 184, 84, 0, 1318, 1320, 3, 186, 85, 0, 1319, 1318, 1, 0, 0, 0, 1320, 1321, 1, 0, 0, 0, 1321, 1319, 1, 0, 0, 0, 1321, 1322, 1, 0, 0, 0, 1322, 1323, 1, 0, 0, 0, 1323, 1324, 3, 184, 84, 0, 1324, 295, 1, 0, 0, 0, 1325, 1326, 3, 294, 139, 0, 1326, 297, 1, 0, 0, 0, 1327, 1328, 3, 16, 0, 0, 1328, 1329, 1, 0, 0, 0, 1329, 1330, 6, 141, 0, 0, 1330, 299, 1, 0, 0, 0, 1331, 1332, 3, 18, 1, 0, 1332, 1333, 1, 0, 0, 0, 1333, 1334, 6, 142, 0, 0, 1334, 301, 1, 0, 0, 0, 1335, 1336, 3, 20, 2, 0, 1336, 1337, 1, 0, 0, 0, 1337, 1338, 6, 143, 0, 0, 1338, 303, 1, 0, 0, 0, 1339, 1340, 3, 170, 77, 0, 1340, 1341, 1, 0, 0, 0, 1341, 1342, 6, 144, 13, 0, 1342, 1343, 6, 144, 14, 0, 1343, 305, 1, 0, 0, 0, 1344, 1345, 3, 284, 134, 0, 1345, 1346, 1, 0, 0, 0, 1346, 1347, 6, 145, 21, 0, 1347, 307, 1, 0, 0, 0, 1348, 1349, 3, 286, 135, 0, 1349, 1350, 1, 0, 0, 0, 1350, 1351, 6, 146, 32, 0, 1351, 309, 1, 0, 0, 0, 1352, 1353, 3, 210, 97, 0, 1353, 1354, 1, 0, 0, 0, 1354, 1355, 6, 147, 33, 0, 1355, 311, 1, 0, 0, 0, 1356, 1357, 4, 148, 11, 0, 1357, 1358, 3, 208, 96, 0, 1358, 1359, 1, 0, 0, 0, 1359, 1360, 6, 148, 36, 0, 1360, 313, 1, 0, 0, 0, 1361, 1362, 3, 212, 98, 0, 1362, 1363, 1, 0, 0, 0, 1363, 1364, 6, 149, 18, 0, 1364, 315, 1, 0, 0, 0, 1365, 1366, 3, 204, 94, 0, 1366, 1367, 1, 0, 0, 0, 1367, 1368, 6, 150, 26, 0, 1368, 317, 1, 0, 0, 0, 1369, 1370, 7, 19, 0, 0, 1370, 1371, 7, 7, 0, 0, 1371, 1372, 7, 11, 0, 0, 1372, 1373, 7, 4, 0, 0, 1373, 1374, 7, 15, 0, 0, 1374, 1375, 7, 4, 0, 0, 1375, 1376, 7, 11, 0, 0, 1376, 1377, 7, 4, 0, 0, 1377, 319, 1, 0, 0, 0, 1378, 1382, 8, 33, 0, 0, 1379, 1380, 5, 47, 0, 0, 1380, 1382, 8, 34, 0, 0, 1381, 1378, 1, 0, 0, 0, 1381, 1379, 1, 0, 0, 0, 1382, 321, 1, 0, 0, 0, 1383, 1385, 3, 320, 152, 0, 1384, 1383, 1, 0, 0, 0, 1385, 1386, 1, 0, 0, 0, 1386, 1384, 1, 0, 0, 0, 1386, 1387, 1, 0, 0, 0, 1387, 323, 1, 0, 0, 0, 1388, 1389, 3, 322, 153, 0, 1389, 1390, 1, 0, 0, 0, 1390, 1391, 6, 154, 37, 0, 1391, 325, 1, 0, 0, 0, 1392, 1393, 3, 192, 88, 0, 1393, 1394, 1, 0, 0, 0, 1394, 1395, 6, 155, 38, 0, 1395, 327, 1, 0, 0, 0, 1396, 1397, 3, 16, 0, 0, 1397, 1398, 1, 0, 0, 0, 1398, 1399, 6, 156, 0, 0, 1399, 329, 1, 0, 0, 0, 1400, 1401, 3, 18, 1, 0, 1401, 1402, 1, 0, 0, 0, 1402, 1403, 6, 157, 0, 0, 1403, 331, 1, 0, 0, 0, 1404, 1405, 3, 20, 2, 0, 1405, 1406, 1, 0, 0, 0, 1406, 1407, 6, 158, 0, 0, 1407, 333, 1, 0, 0, 0, 1408, 1409, 3, 288, 136, 0, 1409, 1410, 1, 0, 0, 0, 1410, 1411, 6, 159, 39, 0, 1411, 1412, 6, 159, 34, 0, 1412, 335, 1, 0, 0, 0, 1413, 1414, 3, 170, 77, 0, 1414, 1415, 1, 0, 0, 0, 1415, 1416, 6, 160, 13, 0, 1416, 1417, 6, 160, 14, 0, 1417, 337, 1, 0, 0, 0, 1418, 1419, 3, 20, 2, 0, 1419, 1420, 1, 0, 0, 0, 1420, 1421, 6, 161, 0, 0, 1421, 339, 1, 0, 0, 0, 1422, 1423, 3, 16, 0, 0, 1423, 1424, 1, 0, 0, 0, 1424, 1425, 6, 162, 0, 0, 1425, 341, 1, 0, 0, 0, 1426, 1427, 3, 18, 1, 0, 1427, 1428, 1, 0, 0, 0, 1428, 1429, 6, 163, 0, 0, 1429, 343, 1, 0, 0, 0, 1430, 1431, 3, 170, 77, 0, 1431, 1432, 1, 0, 0, 0, 1432, 1433, 6, 164, 13, 0, 1433, 1434, 6, 164, 14, 0, 1434, 345, 1, 0, 0, 0, 1435, 1436, 7, 35, 0, 0, 1436, 1437, 7, 9, 0, 0, 1437, 1438, 7, 10, 0, 0, 1438, 1439, 7, 5, 0, 0, 1439, 347, 1, 0, 0, 0, 1440, 1441, 3, 200, 92, 0, 1441, 1442, 1, 0, 0, 0, 1442, 1443, 6, 166, 16, 0, 1443, 349, 1, 0, 0, 0, 1444, 1445, 3, 236, 110, 0, 1445, 1446, 1, 0, 0, 0, 1446, 1447, 6, 167, 15, 0, 1447, 1448, 6, 167, 14, 0, 1448, 1449, 6, 167, 4, 0, 1449, 351, 1, 0, 0, 0, 1450, 1451, 7, 22, 0, 0, 1451, 1452, 7, 16, 0, 0, 1452, 1453, 7, 10, 0, 0, 1453, 1454, 7, 5, 0, 0, 1454, 1455, 7, 6, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 1457, 6, 168, 14, 0, 1457, 1458, 6, 168, 4, 0, 1458, 353, 1, 0, 0, 0, 1459, 1460, 3, 322, 153, 0, 1460, 1461, 1, 0, 0, 0, 1461, 1462, 6, 169, 37, 0, 1462, 355, 1, 0, 0, 0, 1463, 1464, 3, 192, 88, 0, 1464, 1465, 1, 0, 0, 0, 1465, 1466, 6, 170, 38, 0, 1466, 357, 1, 0, 0, 0, 1467, 1468, 3, 210, 97, 0, 1468, 1469, 1, 0, 0, 0, 1469, 1470, 6, 171, 33, 0, 1470, 359, 1, 0, 0, 0, 1471, 1472, 3, 292, 138, 0, 1472, 1473, 1, 0, 0, 0, 1473, 1474, 6, 172, 20, 0, 1474, 361, 1, 0, 0, 0, 1475, 1476, 3, 296, 140, 0, 1476, 1477, 1, 0, 0, 0, 1477, 1478, 6, 173, 19, 0, 1478, 363, 1, 0, 0, 0, 1479, 1480, 3, 16, 0, 0, 1480, 1481, 1, 0, 0, 0, 1481, 1482, 6, 174, 0, 0, 1482, 365, 1, 0, 0, 0, 1483, 1484, 3, 18, 1, 0, 1484, 1485, 1, 0, 0, 0, 1485, 1486, 6, 175, 0, 0, 1486, 367, 1, 0, 0, 0, 1487, 1488, 3, 20, 2, 0, 1488, 1489, 1, 0, 0, 0, 1489, 1490, 6, 176, 0, 0, 1490, 369, 1, 0, 0, 0, 1491, 1492, 3, 170, 77, 0, 1492, 1493, 1, 0, 0, 0, 1493, 1494, 6, 177, 13, 0, 1494, 1495, 6, 177, 14, 0, 1495, 371, 1, 0, 0, 0, 1496, 1497, 3, 210, 97, 0, 1497, 1498, 1, 0, 0, 0, 1498, 1499, 6, 178, 33, 0, 1499, 373, 1, 0, 0, 0, 1500, 1501, 3, 212, 98, 0, 1501, 1502, 1, 0, 0, 0, 1502, 1503, 6, 179, 18, 0, 1503, 375, 1, 0, 0, 0, 1504, 1505, 3, 216, 100, 0, 1505, 1506, 1, 0, 0, 0, 1506, 1507, 6, 180, 17, 0, 1507, 377, 1, 0, 0, 0, 1508, 1509, 3, 236, 110, 0, 1509, 1510, 1, 0, 0, 0, 1510, 1511, 6, 181, 15, 0, 1511, 1512, 6, 181, 40, 0, 1512, 379, 1, 0, 0, 0, 1513, 1514, 3, 322, 153, 0, 1514, 1515, 1, 0, 0, 0, 1515, 1516, 6, 182, 37, 0, 1516, 381, 1, 0, 0, 0, 1517, 1518, 3, 192, 88, 0, 1518, 1519, 1, 0, 0, 0, 1519, 1520, 6, 183, 38, 0, 1520, 383, 1, 0, 0, 0, 1521, 1522, 3, 16, 0, 0, 1522, 1523, 1, 0, 0, 0, 1523, 1524, 6, 184, 0, 0, 1524, 385, 1, 0, 0, 0, 1525, 1526, 3, 18, 1, 0, 1526, 1527, 1, 0, 0, 0, 1527, 1528, 6, 185, 0, 0, 1528, 387, 1, 0, 0, 0, 1529, 1530, 3, 20, 2, 0, 1530, 1531, 1, 0, 0, 0, 1531, 1532, 6, 186, 0, 0, 1532, 389, 1, 0, 0, 0, 1533, 1534, 3, 170, 77, 0, 1534, 1535, 1, 0, 0, 0, 1535, 1536, 6, 187, 13, 0, 1536, 1537, 6, 187, 14, 0, 1537, 1538, 6, 187, 14, 0, 1538, 391, 1, 0, 0, 0, 1539, 1540, 3, 212, 98, 0, 1540, 1541, 1, 0, 0, 0, 1541, 1542, 6, 188, 18, 0, 1542, 393, 1, 0, 0, 0, 1543, 1544, 3, 216, 100, 0, 1544, 1545, 1, 0, 0, 0, 1545, 1546, 6, 189, 17, 0, 1546, 395, 1, 0, 0, 0, 1547, 1548, 3, 444, 214, 0, 1548, 1549, 1, 0, 0, 0, 1549, 1550, 6, 190, 27, 0, 1550, 397, 1, 0, 0, 0, 1551, 1552, 3, 16, 0, 0, 1552, 1553, 1, 0, 0, 0, 1553, 1554, 6, 191, 0, 0, 1554, 399, 1, 0, 0, 0, 1555, 1556, 3, 18, 1, 0, 1556, 1557, 1, 0, 0, 0, 1557, 1558, 6, 192, 0, 0, 1558, 401, 1, 0, 0, 0, 1559, 1560, 3, 20, 2, 0, 1560, 1561, 1, 0, 0, 0, 1561, 1562, 6, 193, 0, 0, 1562, 403, 1, 0, 0, 0, 1563, 1564, 3, 170, 77, 0, 1564, 1565, 1, 0, 0, 0, 1565, 1566, 6, 194, 13, 0, 1566, 1567, 6, 194, 14, 0, 1567, 405, 1, 0, 0, 0, 1568, 1569, 3, 216, 100, 0, 1569, 1570, 1, 0, 0, 0, 1570, 1571, 6, 195, 17, 0, 1571, 407, 1, 0, 0, 0, 1572, 1573, 3, 240, 112, 0, 1573, 1574, 1, 0, 0, 0, 1574, 1575, 6, 196, 28, 0, 1575, 409, 1, 0, 0, 0, 1576, 1577, 3, 280, 132, 0, 1577, 1578, 1, 0, 0, 0, 1578, 1579, 6, 197, 29, 0, 1579, 411, 1, 0, 0, 0, 1580, 1581, 3, 276, 130, 0, 1581, 1582, 1, 0, 0, 0, 1582, 1583, 6, 198, 30, 0, 1583, 413, 1, 0, 0, 0, 1584, 1585, 3, 282, 133, 0, 1585, 1586, 1, 0, 0, 0, 1586, 1587, 6, 199, 31, 0, 1587, 415, 1, 0, 0, 0, 1588, 1589, 3, 296, 140, 0, 1589, 1590, 1, 0, 0, 0, 1590, 1591, 6, 200, 19, 0, 1591, 417, 1, 0, 0, 0, 1592, 1593, 3, 292, 138, 0, 1593, 1594, 1, 0, 0, 0, 1594, 1595, 6, 201, 20, 0, 1595, 419, 1, 0, 0, 0, 1596, 1597, 3, 16, 0, 0, 1597, 1598, 1, 0, 0, 0, 1598, 1599, 6, 202, 0, 0, 1599, 421, 1, 0, 0, 0, 1600, 1601, 3, 18, 1, 0, 1601, 1602, 1, 0, 0, 0, 1602, 1603, 6, 203, 0, 0, 1603, 423, 1, 0, 0, 0, 1604, 1605, 3, 20, 2, 0, 1605, 1606, 1, 0, 0, 0, 1606, 1607, 6, 204, 0, 0, 1607, 425, 1, 0, 0, 0, 1608, 1609, 3, 170, 77, 0, 1609, 1610, 1, 0, 0, 0, 1610, 1611, 6, 205, 13, 0, 1611, 1612, 6, 205, 14, 0, 1612, 427, 1, 0, 0, 0, 1613, 1614, 3, 216, 100, 0, 1614, 1615, 1, 0, 0, 0, 1615, 1616, 6, 206, 17, 0, 1616, 429, 1, 0, 0, 0, 1617, 1618, 3, 212, 98, 0, 1618, 1619, 1, 0, 0, 0, 1619, 1620, 6, 207, 18, 0, 1620, 431, 1, 0, 0, 0, 1621, 1622, 3, 240, 112, 0, 1622, 1623, 1, 0, 0, 0, 1623, 1624, 6, 208, 28, 0, 1624, 433, 1, 0, 0, 0, 1625, 1626, 3, 280, 132, 0, 1626, 1627, 1, 0, 0, 0, 1627, 1628, 6, 209, 29, 0, 1628, 435, 1, 0, 0, 0, 1629, 1630, 3, 276, 130, 0, 1630, 1631, 1, 0, 0, 0, 1631, 1632, 6, 210, 30, 0, 1632, 437, 1, 0, 0, 0, 1633, 1634, 3, 282, 133, 0, 1634, 1635, 1, 0, 0, 0, 1635, 1636, 6, 211, 31, 0, 1636, 439, 1, 0, 0, 0, 1637, 1642, 3, 174, 79, 0, 1638, 1642, 3, 172, 78, 0, 1639, 1642, 3, 188, 86, 0, 1640, 1642, 3, 266, 125, 0, 1641, 1637, 1, 0, 0, 0, 1641, 1638, 1, 0, 0, 0, 1641, 1639, 1, 0, 0, 0, 1641, 1640, 1, 0, 0, 0, 1642, 441, 1, 0, 0, 0, 1643, 1646, 3, 174, 79, 0, 1644, 1646, 3, 266, 125, 0, 1645, 1643, 1, 0, 0, 0, 1645, 1644, 1, 0, 0, 0, 1646, 1650, 1, 0, 0, 0, 1647, 1649, 3, 440, 212, 0, 1648, 1647, 1, 0, 0, 0, 1649, 1652, 1, 0, 0, 0, 1650, 1648, 1, 0, 0, 0, 1650, 1651, 1, 0, 0, 0, 1651, 1663, 1, 0, 0, 0, 1652, 1650, 1, 0, 0, 0, 1653, 1656, 3, 188, 86, 0, 1654, 1656, 3, 182, 83, 0, 1655, 1653, 1, 0, 0, 0, 1655, 1654, 1, 0, 0, 0, 1656, 1658, 1, 0, 0, 0, 1657, 1659, 3, 440, 212, 0, 1658, 1657, 1, 0, 0, 0, 1659, 1660, 1, 0, 0, 0, 1660, 1658, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1663, 1, 0, 0, 0, 1662, 1645, 1, 0, 0, 0, 1662, 1655, 1, 0, 0, 0, 1663, 443, 1, 0, 0, 0, 1664, 1667, 3, 442, 213, 0, 1665, 1667, 3, 294, 139, 0, 1666, 1664, 1, 0, 0, 0, 1666, 1665, 1, 0, 0, 0, 1667, 1668, 1, 0, 0, 0, 1668, 1666, 1, 0, 0, 0, 1668, 1669, 1, 0, 0, 0, 1669, 445, 1, 0, 0, 0, 1670, 1671, 3, 16, 0, 0, 1671, 1672, 1, 0, 0, 0, 1672, 1673, 6, 215, 0, 0, 1673, 447, 1, 0, 0, 0, 1674, 1675, 3, 18, 1, 0, 1675, 1676, 1, 0, 0, 0, 1676, 1677, 6, 216, 0, 0, 1677, 449, 1, 0, 0, 0, 1678, 1679, 3, 20, 2, 0, 1679, 1680, 1, 0, 0, 0, 1680, 1681, 6, 217, 0, 0, 1681, 451, 1, 0, 0, 0, 1682, 1683, 3, 170, 77, 0, 1683, 1684, 1, 0, 0, 0, 1684, 1685, 6, 218, 13, 0, 1685, 1686, 6, 218, 14, 0, 1686, 453, 1, 0, 0, 0, 1687, 1688, 3, 204, 94, 0, 1688, 1689, 1, 0, 0, 0, 1689, 1690, 6, 219, 26, 0, 1690, 455, 1, 0, 0, 0, 1691, 1692, 3, 212, 98, 0, 1692, 1693, 1, 0, 0, 0, 1693, 1694, 6, 220, 18, 0, 1694, 457, 1, 0, 0, 0, 1695, 1696, 3, 216, 100, 0, 1696, 1697, 1, 0, 0, 0, 1697, 1698, 6, 221, 17, 0, 1698, 459, 1, 0, 0, 0, 1699, 1700, 3, 240, 112, 0, 1700, 1701, 1, 0, 0, 0, 1701, 1702, 6, 222, 28, 0, 1702, 461, 1, 0, 0, 0, 1703, 1704, 3, 280, 132, 0, 1704, 1705, 1, 0, 0, 0, 1705, 1706, 6, 223, 29, 0, 1706, 463, 1, 0, 0, 0, 1707, 1708, 3, 276, 130, 0, 1708, 1709, 1, 0, 0, 0, 1709, 1710, 6, 224, 30, 0, 1710, 465, 1, 0, 0, 0, 1711, 1712, 3, 282, 133, 0, 1712, 1713, 1, 0, 0, 0, 1713, 1714, 6, 225, 31, 0, 1714, 467, 1, 0, 0, 0, 1715, 1716, 3, 200, 92, 0, 1716, 1717, 1, 0, 0, 0, 1717, 1718, 6, 226, 16, 0, 1718, 469, 1, 0, 0, 0, 1719, 1720, 3, 444, 214, 0, 1720, 1721, 1, 0, 0, 0, 1721, 1722, 6, 227, 27, 0, 1722, 471, 1, 0, 0, 0, 1723, 1724, 3, 16, 0, 0, 1724, 1725, 1, 0, 0, 0, 1725, 1726, 6, 228, 0, 0, 1726, 473, 1, 0, 0, 0, 1727, 1728, 3, 18, 1, 0, 1728, 1729, 1, 0, 0, 0, 1729, 1730, 6, 229, 0, 0, 1730, 475, 1, 0, 0, 0, 1731, 1732, 3, 20, 2, 0, 1732, 1733, 1, 0, 0, 0, 1733, 1734, 6, 230, 0, 0, 1734, 477, 1, 0, 0, 0, 1735, 1736, 3, 170, 77, 0, 1736, 1737, 1, 0, 0, 0, 1737, 1738, 6, 231, 13, 0, 1738, 1739, 6, 231, 14, 0, 1739, 479, 1, 0, 0, 0, 1740, 1741, 7, 10, 0, 0, 1741, 1742, 7, 5, 0, 0, 1742, 1743, 7, 21, 0, 0, 1743, 1744, 7, 9, 0, 0, 1744, 481, 1, 0, 0, 0, 1745, 1746, 3, 16, 0, 0, 1746, 1747, 1, 0, 0, 0, 1747, 1748, 6, 233, 0, 0, 1748, 483, 1, 0, 0, 0, 1749, 1750, 3, 18, 1, 0, 1750, 1751, 1, 0, 0, 0, 1751, 1752, 6, 234, 0, 0, 1752, 485, 1, 0, 0, 0, 1753, 1754, 3, 20, 2, 0, 1754, 1755, 1, 0, 0, 0, 1755, 1756, 6, 235, 0, 0, 1756, 487, 1, 0, 0, 0, 70, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 494, 498, 501, 510, 512, 523, 779, 849, 853, 858, 948, 950, 1001, 1006, 1015, 1022, 1027, 1029, 1040, 1048, 1051, 1053, 1058, 1063, 1069, 1076, 1081, 1087, 1090, 1098, 1102, 1244, 1249, 1256, 1258, 1263, 1268, 1275, 1277, 1303, 1308, 1313, 1315, 1321, 1381, 1386, 1641, 1645, 1650, 1655, 1660, 1662, 1666, 1668, 41, 0, 1, 0, 5, 1, 0, 5, 2, 0, 5, 5, 0, 5, 6, 0, 5, 7, 0, 5, 8, 0, 5, 9, 0, 5, 10, 0, 5, 12, 0, 5, 13, 0, 5, 14, 0, 5, 15, 0, 7, 50, 0, 4, 0, 0, 7, 73, 0, 7, 55, 0, 7, 63, 0, 7, 61, 0, 7, 101, 0, 7, 100, 0, 7, 96, 0, 5, 4, 0, 5, 3, 0, 7, 78, 0, 7, 36, 0, 7, 57, 0, 7, 127, 0, 7, 75, 0, 7, 94, 0, 7, 93, 0, 7, 95, 0, 7, 97, 0, 7, 60, 0, 5, 0, 0, 7, 14, 0, 7, 59, 0, 7, 106, 0, 7, 51, 0, 7, 98, 0, 5, 11, 0] \ No newline at end of file diff --git a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_lexer.tokens b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_lexer.tokens index 632f32f2912e1..b001acbf4f02b 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_lexer.tokens +++ b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_lexer.tokens @@ -13,49 +13,49 @@ SORT=12 STATS=13 WHERE=14 DEV_INLINESTATS=15 -FROM=16 -DEV_METRICS=17 -DEV_FORK=18 -JOIN_LOOKUP=19 -DEV_JOIN_FULL=20 -DEV_JOIN_LEFT=21 -DEV_JOIN_RIGHT=22 -DEV_LOOKUP=23 -MV_EXPAND=24 -DROP=25 -KEEP=26 -DEV_INSIST=27 -DEV_RRF=28 -RENAME=29 -SHOW=30 -UNKNOWN_CMD=31 -CHANGE_POINT_LINE_COMMENT=32 -CHANGE_POINT_MULTILINE_COMMENT=33 -CHANGE_POINT_WS=34 -ON=35 -WITH=36 -ENRICH_POLICY_NAME=37 -ENRICH_LINE_COMMENT=38 -ENRICH_MULTILINE_COMMENT=39 -ENRICH_WS=40 -ENRICH_FIELD_LINE_COMMENT=41 -ENRICH_FIELD_MULTILINE_COMMENT=42 -ENRICH_FIELD_WS=43 -SETTING=44 -SETTING_LINE_COMMENT=45 -SETTTING_MULTILINE_COMMENT=46 -SETTING_WS=47 -EXPLAIN_WS=48 -EXPLAIN_LINE_COMMENT=49 -EXPLAIN_MULTILINE_COMMENT=50 -PIPE=51 -QUOTED_STRING=52 -INTEGER_LITERAL=53 -DECIMAL_LITERAL=54 -BY=55 -AND=56 -ASC=57 -ASSIGN=58 +DEV_RERANK=16 +FROM=17 +DEV_TIME_SERIES=18 +DEV_FORK=19 +JOIN_LOOKUP=20 +DEV_JOIN_FULL=21 +DEV_JOIN_LEFT=22 +DEV_JOIN_RIGHT=23 +DEV_LOOKUP=24 +MV_EXPAND=25 +DROP=26 +KEEP=27 +DEV_INSIST=28 +DEV_RRF=29 +RENAME=30 +SHOW=31 +UNKNOWN_CMD=32 +CHANGE_POINT_LINE_COMMENT=33 +CHANGE_POINT_MULTILINE_COMMENT=34 +CHANGE_POINT_WS=35 +ENRICH_POLICY_NAME=36 +ENRICH_LINE_COMMENT=37 +ENRICH_MULTILINE_COMMENT=38 +ENRICH_WS=39 +ENRICH_FIELD_LINE_COMMENT=40 +ENRICH_FIELD_MULTILINE_COMMENT=41 +ENRICH_FIELD_WS=42 +SETTING=43 +SETTING_LINE_COMMENT=44 +SETTTING_MULTILINE_COMMENT=45 +SETTING_WS=46 +EXPLAIN_WS=47 +EXPLAIN_LINE_COMMENT=48 +EXPLAIN_MULTILINE_COMMENT=49 +PIPE=50 +QUOTED_STRING=51 +INTEGER_LITERAL=52 +DECIMAL_LITERAL=53 +AND=54 +AS=55 +ASC=56 +ASSIGN=57 +BY=58 CAST_OP=59 COLON=60 COMMA=61 @@ -70,70 +70,71 @@ LIKE=69 NOT=70 NULL=71 NULLS=72 -OR=73 -PARAM=74 -RLIKE=75 -TRUE=76 -EQ=77 -CIEQ=78 -NEQ=79 -LT=80 -LTE=81 -GT=82 -GTE=83 -PLUS=84 -MINUS=85 -ASTERISK=86 -SLASH=87 -PERCENT=88 -LEFT_BRACES=89 -RIGHT_BRACES=90 -DOUBLE_PARAMS=91 -NAMED_OR_POSITIONAL_PARAM=92 -NAMED_OR_POSITIONAL_DOUBLE_PARAMS=93 -OPENING_BRACKET=94 -CLOSING_BRACKET=95 -LP=96 -RP=97 -UNQUOTED_IDENTIFIER=98 -QUOTED_IDENTIFIER=99 -EXPR_LINE_COMMENT=100 -EXPR_MULTILINE_COMMENT=101 -EXPR_WS=102 -METADATA=103 -UNQUOTED_SOURCE=104 -FROM_LINE_COMMENT=105 -FROM_MULTILINE_COMMENT=106 -FROM_WS=107 -FORK_WS=108 -FORK_LINE_COMMENT=109 -FORK_MULTILINE_COMMENT=110 -JOIN=111 -USING=112 -JOIN_LINE_COMMENT=113 -JOIN_MULTILINE_COMMENT=114 -JOIN_WS=115 -LOOKUP_LINE_COMMENT=116 -LOOKUP_MULTILINE_COMMENT=117 -LOOKUP_WS=118 -LOOKUP_FIELD_LINE_COMMENT=119 -LOOKUP_FIELD_MULTILINE_COMMENT=120 -LOOKUP_FIELD_WS=121 -MVEXPAND_LINE_COMMENT=122 -MVEXPAND_MULTILINE_COMMENT=123 -MVEXPAND_WS=124 -ID_PATTERN=125 -PROJECT_LINE_COMMENT=126 -PROJECT_MULTILINE_COMMENT=127 -PROJECT_WS=128 -AS=129 -RENAME_LINE_COMMENT=130 -RENAME_MULTILINE_COMMENT=131 -RENAME_WS=132 -INFO=133 -SHOW_LINE_COMMENT=134 -SHOW_MULTILINE_COMMENT=135 -SHOW_WS=136 +ON=73 +OR=74 +PARAM=75 +RLIKE=76 +TRUE=77 +WITH=78 +EQ=79 +CIEQ=80 +NEQ=81 +LT=82 +LTE=83 +GT=84 +GTE=85 +PLUS=86 +MINUS=87 +ASTERISK=88 +SLASH=89 +PERCENT=90 +LEFT_BRACES=91 +RIGHT_BRACES=92 +DOUBLE_PARAMS=93 +NAMED_OR_POSITIONAL_PARAM=94 +NAMED_OR_POSITIONAL_DOUBLE_PARAMS=95 +OPENING_BRACKET=96 +CLOSING_BRACKET=97 +LP=98 +RP=99 +UNQUOTED_IDENTIFIER=100 +QUOTED_IDENTIFIER=101 +EXPR_LINE_COMMENT=102 +EXPR_MULTILINE_COMMENT=103 +EXPR_WS=104 +METADATA=105 +UNQUOTED_SOURCE=106 +FROM_LINE_COMMENT=107 +FROM_MULTILINE_COMMENT=108 +FROM_WS=109 +FORK_WS=110 +FORK_LINE_COMMENT=111 +FORK_MULTILINE_COMMENT=112 +JOIN=113 +USING=114 +JOIN_LINE_COMMENT=115 +JOIN_MULTILINE_COMMENT=116 +JOIN_WS=117 +LOOKUP_LINE_COMMENT=118 +LOOKUP_MULTILINE_COMMENT=119 +LOOKUP_WS=120 +LOOKUP_FIELD_LINE_COMMENT=121 +LOOKUP_FIELD_MULTILINE_COMMENT=122 +LOOKUP_FIELD_WS=123 +MVEXPAND_LINE_COMMENT=124 +MVEXPAND_MULTILINE_COMMENT=125 +MVEXPAND_WS=126 +ID_PATTERN=127 +PROJECT_LINE_COMMENT=128 +PROJECT_MULTILINE_COMMENT=129 +PROJECT_WS=130 +RENAME_LINE_COMMENT=131 +RENAME_MULTILINE_COMMENT=132 +RENAME_WS=133 +INFO=134 +SHOW_LINE_COMMENT=135 +SHOW_MULTILINE_COMMENT=136 +SHOW_WS=137 'enrich'=5 'explain'=6 'dissect'=7 @@ -144,20 +145,19 @@ SHOW_WS=136 'sort'=12 'stats'=13 'where'=14 -'from'=16 -'lookup'=19 -'mv_expand'=24 -'drop'=25 -'keep'=26 -'rename'=29 -'show'=30 -'on'=35 -'with'=36 -'|'=51 -'by'=55 -'and'=56 -'asc'=57 -'='=58 +'from'=17 +'lookup'=20 +'mv_expand'=25 +'drop'=26 +'keep'=27 +'rename'=30 +'show'=31 +'|'=50 +'and'=54 +'as'=55 +'asc'=56 +'='=57 +'by'=58 '::'=59 ':'=60 ','=61 @@ -172,29 +172,30 @@ SHOW_WS=136 'not'=70 'null'=71 'nulls'=72 -'or'=73 -'?'=74 -'rlike'=75 -'true'=76 -'=='=77 -'=~'=78 -'!='=79 -'<'=80 -'<='=81 -'>'=82 -'>='=83 -'+'=84 -'-'=85 -'*'=86 -'/'=87 -'%'=88 -'{'=89 -'}'=90 -'??'=91 -']'=95 -')'=97 -'metadata'=103 -'join'=111 -'USING'=112 -'as'=129 -'info'=133 +'on'=73 +'or'=74 +'?'=75 +'rlike'=76 +'true'=77 +'with'=78 +'=='=79 +'=~'=80 +'!='=81 +'<'=82 +'<='=83 +'>'=84 +'>='=85 +'+'=86 +'-'=87 +'*'=88 +'/'=89 +'%'=90 +'{'=91 +'}'=92 +'??'=93 +']'=97 +')'=99 +'metadata'=105 +'join'=113 +'USING'=114 +'info'=134 diff --git a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_lexer.ts b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_lexer.ts index 0f0a1e9f28d83..8689c0c3d9304 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_lexer.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_lexer.ts @@ -38,49 +38,49 @@ export default class esql_lexer extends lexer_config { public static readonly STATS = 13; public static readonly WHERE = 14; public static readonly DEV_INLINESTATS = 15; - public static readonly FROM = 16; - public static readonly DEV_METRICS = 17; - public static readonly DEV_FORK = 18; - public static readonly JOIN_LOOKUP = 19; - public static readonly DEV_JOIN_FULL = 20; - public static readonly DEV_JOIN_LEFT = 21; - public static readonly DEV_JOIN_RIGHT = 22; - public static readonly DEV_LOOKUP = 23; - public static readonly MV_EXPAND = 24; - public static readonly DROP = 25; - public static readonly KEEP = 26; - public static readonly DEV_INSIST = 27; - public static readonly DEV_RRF = 28; - public static readonly RENAME = 29; - public static readonly SHOW = 30; - public static readonly UNKNOWN_CMD = 31; - public static readonly CHANGE_POINT_LINE_COMMENT = 32; - public static readonly CHANGE_POINT_MULTILINE_COMMENT = 33; - public static readonly CHANGE_POINT_WS = 34; - public static readonly ON = 35; - public static readonly WITH = 36; - public static readonly ENRICH_POLICY_NAME = 37; - public static readonly ENRICH_LINE_COMMENT = 38; - public static readonly ENRICH_MULTILINE_COMMENT = 39; - public static readonly ENRICH_WS = 40; - public static readonly ENRICH_FIELD_LINE_COMMENT = 41; - public static readonly ENRICH_FIELD_MULTILINE_COMMENT = 42; - public static readonly ENRICH_FIELD_WS = 43; - public static readonly SETTING = 44; - public static readonly SETTING_LINE_COMMENT = 45; - public static readonly SETTTING_MULTILINE_COMMENT = 46; - public static readonly SETTING_WS = 47; - public static readonly EXPLAIN_WS = 48; - public static readonly EXPLAIN_LINE_COMMENT = 49; - public static readonly EXPLAIN_MULTILINE_COMMENT = 50; - public static readonly PIPE = 51; - public static readonly QUOTED_STRING = 52; - public static readonly INTEGER_LITERAL = 53; - public static readonly DECIMAL_LITERAL = 54; - public static readonly BY = 55; - public static readonly AND = 56; - public static readonly ASC = 57; - public static readonly ASSIGN = 58; + public static readonly DEV_RERANK = 16; + public static readonly FROM = 17; + public static readonly DEV_TIME_SERIES = 18; + public static readonly DEV_FORK = 19; + public static readonly JOIN_LOOKUP = 20; + public static readonly DEV_JOIN_FULL = 21; + public static readonly DEV_JOIN_LEFT = 22; + public static readonly DEV_JOIN_RIGHT = 23; + public static readonly DEV_LOOKUP = 24; + public static readonly MV_EXPAND = 25; + public static readonly DROP = 26; + public static readonly KEEP = 27; + public static readonly DEV_INSIST = 28; + public static readonly DEV_RRF = 29; + public static readonly RENAME = 30; + public static readonly SHOW = 31; + public static readonly UNKNOWN_CMD = 32; + public static readonly CHANGE_POINT_LINE_COMMENT = 33; + public static readonly CHANGE_POINT_MULTILINE_COMMENT = 34; + public static readonly CHANGE_POINT_WS = 35; + public static readonly ENRICH_POLICY_NAME = 36; + public static readonly ENRICH_LINE_COMMENT = 37; + public static readonly ENRICH_MULTILINE_COMMENT = 38; + public static readonly ENRICH_WS = 39; + public static readonly ENRICH_FIELD_LINE_COMMENT = 40; + public static readonly ENRICH_FIELD_MULTILINE_COMMENT = 41; + public static readonly ENRICH_FIELD_WS = 42; + public static readonly SETTING = 43; + public static readonly SETTING_LINE_COMMENT = 44; + public static readonly SETTTING_MULTILINE_COMMENT = 45; + public static readonly SETTING_WS = 46; + public static readonly EXPLAIN_WS = 47; + public static readonly EXPLAIN_LINE_COMMENT = 48; + public static readonly EXPLAIN_MULTILINE_COMMENT = 49; + public static readonly PIPE = 50; + public static readonly QUOTED_STRING = 51; + public static readonly INTEGER_LITERAL = 52; + public static readonly DECIMAL_LITERAL = 53; + public static readonly AND = 54; + public static readonly AS = 55; + public static readonly ASC = 56; + public static readonly ASSIGN = 57; + public static readonly BY = 58; public static readonly CAST_OP = 59; public static readonly COLON = 60; public static readonly COMMA = 61; @@ -95,70 +95,71 @@ export default class esql_lexer extends lexer_config { public static readonly NOT = 70; public static readonly NULL = 71; public static readonly NULLS = 72; - public static readonly OR = 73; - public static readonly PARAM = 74; - public static readonly RLIKE = 75; - public static readonly TRUE = 76; - public static readonly EQ = 77; - public static readonly CIEQ = 78; - public static readonly NEQ = 79; - public static readonly LT = 80; - public static readonly LTE = 81; - public static readonly GT = 82; - public static readonly GTE = 83; - public static readonly PLUS = 84; - public static readonly MINUS = 85; - public static readonly ASTERISK = 86; - public static readonly SLASH = 87; - public static readonly PERCENT = 88; - public static readonly LEFT_BRACES = 89; - public static readonly RIGHT_BRACES = 90; - public static readonly DOUBLE_PARAMS = 91; - public static readonly NAMED_OR_POSITIONAL_PARAM = 92; - public static readonly NAMED_OR_POSITIONAL_DOUBLE_PARAMS = 93; - public static readonly OPENING_BRACKET = 94; - public static readonly CLOSING_BRACKET = 95; - public static readonly LP = 96; - public static readonly RP = 97; - public static readonly UNQUOTED_IDENTIFIER = 98; - public static readonly QUOTED_IDENTIFIER = 99; - public static readonly EXPR_LINE_COMMENT = 100; - public static readonly EXPR_MULTILINE_COMMENT = 101; - public static readonly EXPR_WS = 102; - public static readonly METADATA = 103; - public static readonly UNQUOTED_SOURCE = 104; - public static readonly FROM_LINE_COMMENT = 105; - public static readonly FROM_MULTILINE_COMMENT = 106; - public static readonly FROM_WS = 107; - public static readonly FORK_WS = 108; - public static readonly FORK_LINE_COMMENT = 109; - public static readonly FORK_MULTILINE_COMMENT = 110; - public static readonly JOIN = 111; - public static readonly USING = 112; - public static readonly JOIN_LINE_COMMENT = 113; - public static readonly JOIN_MULTILINE_COMMENT = 114; - public static readonly JOIN_WS = 115; - public static readonly LOOKUP_LINE_COMMENT = 116; - public static readonly LOOKUP_MULTILINE_COMMENT = 117; - public static readonly LOOKUP_WS = 118; - public static readonly LOOKUP_FIELD_LINE_COMMENT = 119; - public static readonly LOOKUP_FIELD_MULTILINE_COMMENT = 120; - public static readonly LOOKUP_FIELD_WS = 121; - public static readonly MVEXPAND_LINE_COMMENT = 122; - public static readonly MVEXPAND_MULTILINE_COMMENT = 123; - public static readonly MVEXPAND_WS = 124; - public static readonly ID_PATTERN = 125; - public static readonly PROJECT_LINE_COMMENT = 126; - public static readonly PROJECT_MULTILINE_COMMENT = 127; - public static readonly PROJECT_WS = 128; - public static readonly AS = 129; - public static readonly RENAME_LINE_COMMENT = 130; - public static readonly RENAME_MULTILINE_COMMENT = 131; - public static readonly RENAME_WS = 132; - public static readonly INFO = 133; - public static readonly SHOW_LINE_COMMENT = 134; - public static readonly SHOW_MULTILINE_COMMENT = 135; - public static readonly SHOW_WS = 136; + public static readonly ON = 73; + public static readonly OR = 74; + public static readonly PARAM = 75; + public static readonly RLIKE = 76; + public static readonly TRUE = 77; + public static readonly WITH = 78; + public static readonly EQ = 79; + public static readonly CIEQ = 80; + public static readonly NEQ = 81; + public static readonly LT = 82; + public static readonly LTE = 83; + public static readonly GT = 84; + public static readonly GTE = 85; + public static readonly PLUS = 86; + public static readonly MINUS = 87; + public static readonly ASTERISK = 88; + public static readonly SLASH = 89; + public static readonly PERCENT = 90; + public static readonly LEFT_BRACES = 91; + public static readonly RIGHT_BRACES = 92; + public static readonly DOUBLE_PARAMS = 93; + public static readonly NAMED_OR_POSITIONAL_PARAM = 94; + public static readonly NAMED_OR_POSITIONAL_DOUBLE_PARAMS = 95; + public static readonly OPENING_BRACKET = 96; + public static readonly CLOSING_BRACKET = 97; + public static readonly LP = 98; + public static readonly RP = 99; + public static readonly UNQUOTED_IDENTIFIER = 100; + public static readonly QUOTED_IDENTIFIER = 101; + public static readonly EXPR_LINE_COMMENT = 102; + public static readonly EXPR_MULTILINE_COMMENT = 103; + public static readonly EXPR_WS = 104; + public static readonly METADATA = 105; + public static readonly UNQUOTED_SOURCE = 106; + public static readonly FROM_LINE_COMMENT = 107; + public static readonly FROM_MULTILINE_COMMENT = 108; + public static readonly FROM_WS = 109; + public static readonly FORK_WS = 110; + public static readonly FORK_LINE_COMMENT = 111; + public static readonly FORK_MULTILINE_COMMENT = 112; + public static readonly JOIN = 113; + public static readonly USING = 114; + public static readonly JOIN_LINE_COMMENT = 115; + public static readonly JOIN_MULTILINE_COMMENT = 116; + public static readonly JOIN_WS = 117; + public static readonly LOOKUP_LINE_COMMENT = 118; + public static readonly LOOKUP_MULTILINE_COMMENT = 119; + public static readonly LOOKUP_WS = 120; + public static readonly LOOKUP_FIELD_LINE_COMMENT = 121; + public static readonly LOOKUP_FIELD_MULTILINE_COMMENT = 122; + public static readonly LOOKUP_FIELD_WS = 123; + public static readonly MVEXPAND_LINE_COMMENT = 124; + public static readonly MVEXPAND_MULTILINE_COMMENT = 125; + public static readonly MVEXPAND_WS = 126; + public static readonly ID_PATTERN = 127; + public static readonly PROJECT_LINE_COMMENT = 128; + public static readonly PROJECT_MULTILINE_COMMENT = 129; + public static readonly PROJECT_WS = 130; + public static readonly RENAME_LINE_COMMENT = 131; + public static readonly RENAME_MULTILINE_COMMENT = 132; + public static readonly RENAME_WS = 133; + public static readonly INFO = 134; + public static readonly SHOW_LINE_COMMENT = 135; + public static readonly SHOW_MULTILINE_COMMENT = 136; + public static readonly SHOW_WS = 137; public static readonly EOF = Token.EOF; public static readonly CHANGE_POINT_MODE = 1; public static readonly ENRICH_MODE = 2; @@ -186,8 +187,9 @@ export default class esql_lexer extends lexer_config { "'limit'", "'row'", "'sort'", "'stats'", "'where'", null, - "'from'", null, - null, "'lookup'", + null, "'from'", + null, null, + "'lookup'", null, null, null, null, "'mv_expand'", @@ -196,8 +198,7 @@ export default class esql_lexer extends lexer_config { "'rename'", "'show'", null, null, null, - null, "'on'", - "'with'", null, + null, null, null, null, null, null, null, null, @@ -206,31 +207,33 @@ export default class esql_lexer extends lexer_config { null, null, null, "'|'", null, null, - null, "'by'", - "'and'", "'asc'", - "'='", "'::'", - "':'", "','", - "'desc'", "'.'", - "'false'", "'first'", - "'in'", "'is'", - "'last'", "'like'", - "'not'", "'null'", - "'nulls'", "'or'", + null, "'and'", + "'as'", "'asc'", + "'='", "'by'", + "'::'", "':'", + "','", "'desc'", + "'.'", "'false'", + "'first'", "'in'", + "'is'", "'last'", + "'like'", "'not'", + "'null'", "'nulls'", + "'on'", "'or'", "'?'", "'rlike'", - "'true'", "'=='", - "'=~'", "'!='", - "'<'", "'<='", - "'>'", "'>='", - "'+'", "'-'", - "'*'", "'/'", - "'%'", "'{'", - "'}'", "'??'", + "'true'", "'with'", + "'=='", "'=~'", + "'!='", "'<'", + "'<='", "'>'", + "'>='", "'+'", + "'-'", "'*'", + "'/'", "'%'", + "'{'", "'}'", + "'??'", null, null, null, - null, "']'", - null, "')'", + "']'", null, + "')'", null, null, null, null, null, - null, "'metadata'", + "'metadata'", null, null, null, null, null, null, @@ -243,9 +246,9 @@ export default class esql_lexer extends lexer_config { null, null, null, null, null, null, - null, "'as'", null, null, - null, "'info'" ]; + null, null, + "'info'" ]; public static readonly symbolicNames: (string | null)[] = [ null, "LINE_COMMENT", "MULTILINE_COMMENT", "WS", "DEV_CHANGE_POINT", @@ -255,7 +258,8 @@ export default class esql_lexer extends lexer_config { "LIMIT", "ROW", "SORT", "STATS", "WHERE", "DEV_INLINESTATS", - "FROM", "DEV_METRICS", + "DEV_RERANK", + "FROM", "DEV_TIME_SERIES", "DEV_FORK", "JOIN_LOOKUP", "DEV_JOIN_FULL", @@ -271,7 +275,6 @@ export default class esql_lexer extends lexer_config { "CHANGE_POINT_LINE_COMMENT", "CHANGE_POINT_MULTILINE_COMMENT", "CHANGE_POINT_WS", - "ON", "WITH", "ENRICH_POLICY_NAME", "ENRICH_LINE_COMMENT", "ENRICH_MULTILINE_COMMENT", @@ -289,18 +292,19 @@ export default class esql_lexer extends lexer_config { "PIPE", "QUOTED_STRING", "INTEGER_LITERAL", "DECIMAL_LITERAL", - "BY", "AND", + "AND", "AS", "ASC", "ASSIGN", - "CAST_OP", + "BY", "CAST_OP", "COLON", "COMMA", "DESC", "DOT", "FALSE", "FIRST", "IN", "IS", "LAST", "LIKE", "NOT", "NULL", - "NULLS", "OR", - "PARAM", "RLIKE", - "TRUE", "EQ", + "NULLS", "ON", + "OR", "PARAM", + "RLIKE", "TRUE", + "WITH", "EQ", "CIEQ", "NEQ", "LT", "LTE", "GT", "GTE", @@ -345,7 +349,7 @@ export default class esql_lexer extends lexer_config { "PROJECT_LINE_COMMENT", "PROJECT_MULTILINE_COMMENT", "PROJECT_WS", - "AS", "RENAME_LINE_COMMENT", + "RENAME_LINE_COMMENT", "RENAME_MULTILINE_COMMENT", "RENAME_WS", "INFO", "SHOW_LINE_COMMENT", @@ -363,30 +367,31 @@ export default class esql_lexer extends lexer_config { public static readonly ruleNames: string[] = [ "LINE_COMMENT", "MULTILINE_COMMENT", "WS", "DEV_CHANGE_POINT", "ENRICH", "EXPLAIN", "DISSECT", "EVAL", "GROK", "LIMIT", "ROW", "SORT", "STATS", - "WHERE", "DEV_INLINESTATS", "FROM", "DEV_METRICS", "DEV_FORK", "JOIN_LOOKUP", - "DEV_JOIN_FULL", "DEV_JOIN_LEFT", "DEV_JOIN_RIGHT", "DEV_LOOKUP", "MV_EXPAND", - "DROP", "KEEP", "DEV_INSIST", "DEV_RRF", "RENAME", "SHOW", "UNKNOWN_CMD", - "CHANGE_POINT_PIPE", "CHANGE_POINT_ON", "CHANGE_POINT_AS", "CHANGE_POINT_DOT", - "CHANGE_POINT_COMMA", "CHANGE_POINT_QUOTED_IDENTIFIER", "CHANGE_POINT_UNQUOTED_IDENTIFIER", - "CHANGE_POINT_LINE_COMMENT", "CHANGE_POINT_MULTILINE_COMMENT", "CHANGE_POINT_WS", - "ENRICH_PIPE", "ENRICH_OPENING_BRACKET", "ON", "WITH", "ENRICH_POLICY_NAME_BODY", - "ENRICH_POLICY_NAME", "ENRICH_MODE_UNQUOTED_VALUE", "ENRICH_LINE_COMMENT", - "ENRICH_MULTILINE_COMMENT", "ENRICH_WS", "ENRICH_FIELD_PIPE", "ENRICH_FIELD_ASSIGN", - "ENRICH_FIELD_COMMA", "ENRICH_FIELD_DOT", "ENRICH_FIELD_WITH", "ENRICH_FIELD_ID_PATTERN", - "ENRICH_FIELD_QUOTED_IDENTIFIER", "ENRICH_FIELD_PARAM", "ENRICH_FIELD_NAMED_OR_POSITIONAL_PARAM", - "ENRICH_FIELD_DOUBLE_PARAMS", "ENRICH_FIELD_NAMED_OR_POSITIONAL_DOUBLE_PARAMS", - "ENRICH_FIELD_LINE_COMMENT", "ENRICH_FIELD_MULTILINE_COMMENT", "ENRICH_FIELD_WS", - "SETTING_CLOSING_BRACKET", "SETTING_COLON", "SETTING", "SETTING_LINE_COMMENT", - "SETTTING_MULTILINE_COMMENT", "SETTING_WS", "EXPLAIN_OPENING_BRACKET", - "EXPLAIN_PIPE", "EXPLAIN_WS", "EXPLAIN_LINE_COMMENT", "EXPLAIN_MULTILINE_COMMENT", - "PIPE", "DIGIT", "LETTER", "ESCAPE_SEQUENCE", "UNESCAPED_CHARS", "EXPONENT", - "ASPERAND", "BACKQUOTE", "BACKQUOTE_BLOCK", "UNDERSCORE", "UNQUOTED_ID_BODY", - "QUOTED_STRING", "INTEGER_LITERAL", "DECIMAL_LITERAL", "BY", "AND", "ASC", - "ASSIGN", "CAST_OP", "COLON", "COMMA", "DESC", "DOT", "FALSE", "FIRST", - "IN", "IS", "LAST", "LIKE", "NOT", "NULL", "NULLS", "OR", "PARAM", "RLIKE", - "TRUE", "EQ", "CIEQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", - "ASTERISK", "SLASH", "PERCENT", "LEFT_BRACES", "RIGHT_BRACES", "DOUBLE_PARAMS", - "NESTED_WHERE", "NAMED_OR_POSITIONAL_PARAM", "NAMED_OR_POSITIONAL_DOUBLE_PARAMS", + "WHERE", "DEV_INLINESTATS", "DEV_RERANK", "FROM", "DEV_TIME_SERIES", "DEV_FORK", + "JOIN_LOOKUP", "DEV_JOIN_FULL", "DEV_JOIN_LEFT", "DEV_JOIN_RIGHT", "DEV_LOOKUP", + "MV_EXPAND", "DROP", "KEEP", "DEV_INSIST", "DEV_RRF", "RENAME", "SHOW", + "UNKNOWN_CMD", "CHANGE_POINT_PIPE", "CHANGE_POINT_ON", "CHANGE_POINT_AS", + "CHANGE_POINT_DOT", "CHANGE_POINT_COMMA", "CHANGE_POINT_QUOTED_IDENTIFIER", + "CHANGE_POINT_UNQUOTED_IDENTIFIER", "CHANGE_POINT_LINE_COMMENT", "CHANGE_POINT_MULTILINE_COMMENT", + "CHANGE_POINT_WS", "ENRICH_PIPE", "ENRICH_OPENING_BRACKET", "ENRICH_ON", + "ENRICH_WITH", "ENRICH_POLICY_NAME_BODY", "ENRICH_POLICY_NAME", "ENRICH_MODE_UNQUOTED_VALUE", + "ENRICH_LINE_COMMENT", "ENRICH_MULTILINE_COMMENT", "ENRICH_WS", "ENRICH_FIELD_PIPE", + "ENRICH_FIELD_ASSIGN", "ENRICH_FIELD_COMMA", "ENRICH_FIELD_DOT", "ENRICH_FIELD_WITH", + "ENRICH_FIELD_ID_PATTERN", "ENRICH_FIELD_QUOTED_IDENTIFIER", "ENRICH_FIELD_PARAM", + "ENRICH_FIELD_NAMED_OR_POSITIONAL_PARAM", "ENRICH_FIELD_DOUBLE_PARAMS", + "ENRICH_FIELD_NAMED_OR_POSITIONAL_DOUBLE_PARAMS", "ENRICH_FIELD_LINE_COMMENT", + "ENRICH_FIELD_MULTILINE_COMMENT", "ENRICH_FIELD_WS", "SETTING_CLOSING_BRACKET", + "SETTING_COLON", "SETTING", "SETTING_LINE_COMMENT", "SETTTING_MULTILINE_COMMENT", + "SETTING_WS", "EXPLAIN_OPENING_BRACKET", "EXPLAIN_PIPE", "EXPLAIN_WS", + "EXPLAIN_LINE_COMMENT", "EXPLAIN_MULTILINE_COMMENT", "PIPE", "DIGIT", + "LETTER", "ESCAPE_SEQUENCE", "UNESCAPED_CHARS", "EXPONENT", "ASPERAND", + "BACKQUOTE", "BACKQUOTE_BLOCK", "UNDERSCORE", "UNQUOTED_ID_BODY", "QUOTED_STRING", + "INTEGER_LITERAL", "DECIMAL_LITERAL", "AND", "AS", "ASC", "ASSIGN", "BY", + "CAST_OP", "COLON", "COMMA", "DESC", "DOT", "FALSE", "FIRST", "IN", "IS", + "LAST", "LIKE", "NOT", "NULL", "NULLS", "ON", "OR", "PARAM", "RLIKE", + "TRUE", "WITH", "EQ", "CIEQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", + "MINUS", "ASTERISK", "SLASH", "PERCENT", "LEFT_BRACES", "RIGHT_BRACES", + "DOUBLE_PARAMS", "NESTED_WHERE", "NAMED_OR_POSITIONAL_PARAM", "NAMED_OR_POSITIONAL_DOUBLE_PARAMS", "OPENING_BRACKET", "CLOSING_BRACKET", "LP", "RP", "UNQUOTED_IDENTIFIER", "QUOTED_ID", "QUOTED_IDENTIFIER", "EXPR_LINE_COMMENT", "EXPR_MULTILINE_COMMENT", "EXPR_WS", "FROM_PIPE", "FROM_OPENING_BRACKET", "FROM_CLOSING_BRACKET", @@ -410,7 +415,7 @@ export default class esql_lexer extends lexer_config { "UNQUOTED_ID_BODY_WITH_PATTERN", "UNQUOTED_ID_PATTERN", "ID_PATTERN", "PROJECT_LINE_COMMENT", "PROJECT_MULTILINE_COMMENT", "PROJECT_WS", "RENAME_PIPE", "RENAME_ASSIGN", "RENAME_COMMA", "RENAME_DOT", "RENAME_PARAM", "RENAME_NAMED_OR_POSITIONAL_PARAM", - "RENAME_DOUBLE_PARAMS", "RENAME_NAMED_OR_POSITIONAL_DOUBLE_PARAMS", "AS", + "RENAME_DOUBLE_PARAMS", "RENAME_NAMED_OR_POSITIONAL_DOUBLE_PARAMS", "RENAME_AS", "RENAME_ID_PATTERN", "RENAME_LINE_COMMENT", "RENAME_MULTILINE_COMMENT", "RENAME_WS", "SHOW_PIPE", "INFO", "SHOW_LINE_COMMENT", "SHOW_MULTILINE_COMMENT", "SHOW_WS", @@ -441,23 +446,25 @@ export default class esql_lexer extends lexer_config { return this.DEV_CHANGE_POINT_sempred(localctx, predIndex); case 14: return this.DEV_INLINESTATS_sempred(localctx, predIndex); - case 16: - return this.DEV_METRICS_sempred(localctx, predIndex); + case 15: + return this.DEV_RERANK_sempred(localctx, predIndex); case 17: + return this.DEV_TIME_SERIES_sempred(localctx, predIndex); + case 18: return this.DEV_FORK_sempred(localctx, predIndex); - case 19: - return this.DEV_JOIN_FULL_sempred(localctx, predIndex); case 20: - return this.DEV_JOIN_LEFT_sempred(localctx, predIndex); + return this.DEV_JOIN_FULL_sempred(localctx, predIndex); case 21: - return this.DEV_JOIN_RIGHT_sempred(localctx, predIndex); + return this.DEV_JOIN_LEFT_sempred(localctx, predIndex); case 22: + return this.DEV_JOIN_RIGHT_sempred(localctx, predIndex); + case 23: return this.DEV_LOOKUP_sempred(localctx, predIndex); - case 26: - return this.DEV_INSIST_sempred(localctx, predIndex); case 27: + return this.DEV_INSIST_sempred(localctx, predIndex); + case 28: return this.DEV_RRF_sempred(localctx, predIndex); - case 144: + case 148: return this.FROM_SELECTOR_sempred(localctx, predIndex); } return true; @@ -476,71 +483,78 @@ export default class esql_lexer extends lexer_config { } return true; } - private DEV_METRICS_sempred(localctx: RuleContext, predIndex: number): boolean { + private DEV_RERANK_sempred(localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { case 2: return this.isDevVersion(); } return true; } - private DEV_FORK_sempred(localctx: RuleContext, predIndex: number): boolean { + private DEV_TIME_SERIES_sempred(localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { case 3: return this.isDevVersion(); } return true; } - private DEV_JOIN_FULL_sempred(localctx: RuleContext, predIndex: number): boolean { + private DEV_FORK_sempred(localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { case 4: return this.isDevVersion(); } return true; } - private DEV_JOIN_LEFT_sempred(localctx: RuleContext, predIndex: number): boolean { + private DEV_JOIN_FULL_sempred(localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { case 5: return this.isDevVersion(); } return true; } - private DEV_JOIN_RIGHT_sempred(localctx: RuleContext, predIndex: number): boolean { + private DEV_JOIN_LEFT_sempred(localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { case 6: return this.isDevVersion(); } return true; } - private DEV_LOOKUP_sempred(localctx: RuleContext, predIndex: number): boolean { + private DEV_JOIN_RIGHT_sempred(localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { case 7: return this.isDevVersion(); } return true; } - private DEV_INSIST_sempred(localctx: RuleContext, predIndex: number): boolean { + private DEV_LOOKUP_sempred(localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { case 8: return this.isDevVersion(); } return true; } - private DEV_RRF_sempred(localctx: RuleContext, predIndex: number): boolean { + private DEV_INSIST_sempred(localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { case 9: return this.isDevVersion(); } return true; } - private FROM_SELECTOR_sempred(localctx: RuleContext, predIndex: number): boolean { + private DEV_RRF_sempred(localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { case 10: return this.isDevVersion(); } return true; } + private FROM_SELECTOR_sempred(localctx: RuleContext, predIndex: number): boolean { + switch (predIndex) { + case 11: + return this.isDevVersion(); + } + return true; + } - public static readonly _serializedATN: number[] = [4,0,136,1734,6,-1,6, + public static readonly _serializedATN: number[] = [4,0,137,1757,6,-1,6, -1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1, 2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8, 2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16, @@ -577,569 +591,577 @@ export default class esql_lexer extends lexer_config { 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,1,0,1,0,1,0,1,0,5,0,485,8,0,10,0,12, - 0,488,9,0,1,0,3,0,491,8,0,1,0,3,0,494,8,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,5, - 1,503,8,1,10,1,12,1,506,9,1,1,1,1,1,1,1,1,1,1,1,1,2,4,2,514,8,2,11,2,12, - 2,515,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,1,3,1, - 3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1, - 5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1, - 7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,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,11,1,11,1,11,1,12,1,12,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,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1, - 15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16, - 1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1, - 18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,20, - 1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1, - 21,1,21,1,22,1,22,1,22,1,22,1,22,1,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,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,26,1,26,1,26,1,26, - 1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1, - 27,1,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,4,30,765,8,30,11,30,12,30,766,1,30,1,30,1,31,1,31,1,31,1, - 31,1,31,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,35, - 1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1, - 38,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42, - 1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1, - 44,1,44,1,45,1,45,1,46,4,46,837,8,46,11,46,12,46,838,1,46,1,46,3,46,843, - 8,46,1,46,4,46,846,8,46,11,46,12,46,847,1,47,1,47,1,47,1,47,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,51,1,51,1,51,1,51,1,51, - 1,51,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,55,1, - 55,1,55,1,55,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58, - 1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,62,1,62,1, - 62,1,62,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,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,4,67,938,8,67,11,67,12,67, - 939,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,71,1, - 71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,74,1,74, - 1,74,1,74,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,77,1,77,1,78,1,78,1, - 79,1,79,1,79,1,80,1,80,1,81,1,81,3,81,991,8,81,1,81,4,81,994,8,81,11,81, - 12,81,995,1,82,1,82,1,83,1,83,1,84,1,84,1,84,3,84,1005,8,84,1,85,1,85,1, - 86,1,86,1,86,3,86,1012,8,86,1,87,1,87,1,87,5,87,1017,8,87,10,87,12,87,1020, - 9,87,1,87,1,87,1,87,1,87,1,87,1,87,5,87,1028,8,87,10,87,12,87,1031,9,87, - 1,87,1,87,1,87,1,87,1,87,3,87,1038,8,87,1,87,3,87,1041,8,87,3,87,1043,8, - 87,1,88,4,88,1046,8,88,11,88,12,88,1047,1,89,4,89,1051,8,89,11,89,12,89, - 1052,1,89,1,89,5,89,1057,8,89,10,89,12,89,1060,9,89,1,89,1,89,4,89,1064, - 8,89,11,89,12,89,1065,1,89,4,89,1069,8,89,11,89,12,89,1070,1,89,1,89,5, - 89,1075,8,89,10,89,12,89,1078,9,89,3,89,1080,8,89,1,89,1,89,1,89,1,89,4, - 89,1086,8,89,11,89,12,89,1087,1,89,1,89,3,89,1092,8,89,1,90,1,90,1,90,1, - 91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,93,1,93,1,94,1,94,1,94,1,95,1,95, - 1,96,1,96,1,97,1,97,1,97,1,97,1,97,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,101,1,101,1,101,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,105,1, - 105,1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,107,1,107,1,107,1,107,1, - 107,1,107,1,108,1,108,1,108,1,109,1,109,1,110,1,110,1,110,1,110,1,110,1, - 110,1,111,1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,113,1,113,1,113,1, - 114,1,114,1,114,1,115,1,115,1,116,1,116,1,116,1,117,1,117,1,118,1,118,1, - 118,1,119,1,119,1,120,1,120,1,121,1,121,1,122,1,122,1,123,1,123,1,124,1, - 124,1,125,1,125,1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,128,1,128,1, - 128,3,128,1223,8,128,1,128,5,128,1226,8,128,10,128,12,128,1229,9,128,1, - 128,1,128,4,128,1233,8,128,11,128,12,128,1234,3,128,1237,8,128,1,129,1, - 129,1,129,3,129,1242,8,129,1,129,5,129,1245,8,129,10,129,12,129,1248,9, - 129,1,129,1,129,4,129,1252,8,129,11,129,12,129,1253,3,129,1256,8,129,1, - 130,1,130,1,130,1,130,1,130,1,131,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,5,134,1280,8, - 134,10,134,12,134,1283,9,134,1,134,1,134,3,134,1287,8,134,1,134,4,134,1290, - 8,134,11,134,12,134,1291,3,134,1294,8,134,1,135,1,135,4,135,1298,8,135, - 11,135,12,135,1299,1,135,1,135,1,136,1,136,1,137,1,137,1,137,1,137,1,138, - 1,138,1,138,1,138,1,139,1,139,1,139,1,139,1,140,1,140,1,140,1,140,1,140, - 1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,143,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,146,1,146,1,146, - 1,146,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,148,1,148, - 1,148,3,148,1360,8,148,1,149,4,149,1363,8,149,11,149,12,149,1364,1,150, - 1,150,1,150,1,150,1,151,1,151,1,151,1,151,1,152,1,152,1,152,1,152,1,153, - 1,153,1,153,1,153,1,154,1,154,1,154,1,154,1,155,1,155,1,155,1,155,1,155, - 1,156,1,156,1,156,1,156,1,156,1,157,1,157,1,157,1,157,1,158,1,158,1,158, - 1,158,1,159,1,159,1,159,1,159,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,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,164,1,165,1,165, - 1,165,1,165,1,166,1,166,1,166,1,166,1,167,1,167,1,167,1,167,1,168,1,168, - 1,168,1,168,1,169,1,169,1,169,1,169,1,170,1,170,1,170,1,170,1,171,1,171, - 1,171,1,171,1,172,1,172,1,172,1,172,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,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,180,1,180,1,180,1,180,1,181,1,181,1,181,1,181,1,182,1,182,1,182,1,182, - 1,183,1,183,1,183,1,183,1,183,1,183,1,184,1,184,1,184,1,184,1,185,1,185, - 1,185,1,185,1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,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,192,1,192,1,192,1,192,1,193,1,193,1,193,1,193,1,194, - 1,194,1,194,1,194,1,195,1,195,1,195,1,195,1,196,1,196,1,196,1,196,1,197, - 1,197,1,197,1,197,1,198,1,198,1,198,1,198,1,199,1,199,1,199,1,199,1,200, - 1,200,1,200,1,200,1,201,1,201,1,201,1,201,1,201,1,202,1,202,1,202,1,202, - 1,203,1,203,1,203,1,203,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,207,1,207,1,207,1,207,1,208,1,208,1,208,1,208, - 3,208,1620,8,208,1,209,1,209,3,209,1624,8,209,1,209,5,209,1627,8,209,10, - 209,12,209,1630,9,209,1,209,1,209,3,209,1634,8,209,1,209,4,209,1637,8,209, - 11,209,12,209,1638,3,209,1641,8,209,1,210,1,210,4,210,1645,8,210,11,210, - 12,210,1646,1,211,1,211,1,211,1,211,1,212,1,212,1,212,1,212,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,216, - 1,216,1,216,1,216,1,217,1,217,1,217,1,217,1,218,1,218,1,218,1,218,1,219, - 1,219,1,219,1,219,1,220,1,220,1,220,1,220,1,221,1,221,1,221,1,221,1,222, - 1,222,1,222,1,223,1,223,1,223,1,223,1,224,1,224,1,224,1,224,1,225,1,225, - 1,225,1,225,1,226,1,226,1,226,1,226,1,227,1,227,1,227,1,227,1,227,1,228, - 1,228,1,228,1,228,1,228,1,229,1,229,1,229,1,229,1,230,1,230,1,230,1,230, - 1,231,1,231,1,231,1,231,2,504,1029,0,232,16,1,18,2,20,3,22,4,24,5,26,6, - 28,7,30,8,32,9,34,10,36,11,38,12,40,13,42,14,44,15,46,16,48,17,50,18,52, - 19,54,20,56,21,58,22,60,23,62,24,64,25,66,26,68,27,70,28,72,29,74,30,76, - 31,78,0,80,0,82,0,84,0,86,0,88,0,90,0,92,32,94,33,96,34,98,0,100,0,102, - 35,104,36,106,0,108,37,110,0,112,38,114,39,116,40,118,0,120,0,122,0,124, - 0,126,0,128,0,130,0,132,0,134,0,136,0,138,0,140,41,142,42,144,43,146,0, - 148,0,150,44,152,45,154,46,156,47,158,0,160,0,162,48,164,49,166,50,168, - 51,170,0,172,0,174,0,176,0,178,0,180,0,182,0,184,0,186,0,188,0,190,52,192, - 53,194,54,196,55,198,56,200,57,202,58,204,59,206,60,208,61,210,62,212,63, - 214,64,216,65,218,66,220,67,222,68,224,69,226,70,228,71,230,72,232,73,234, - 74,236,75,238,76,240,77,242,78,244,79,246,80,248,81,250,82,252,83,254,84, - 256,85,258,86,260,87,262,88,264,89,266,90,268,91,270,0,272,92,274,93,276, - 94,278,95,280,96,282,97,284,98,286,0,288,99,290,100,292,101,294,102,296, - 0,298,0,300,0,302,0,304,0,306,0,308,0,310,103,312,0,314,104,316,0,318,0, - 320,105,322,106,324,107,326,0,328,0,330,108,332,109,334,110,336,0,338,111, - 340,0,342,0,344,112,346,0,348,0,350,0,352,0,354,0,356,113,358,114,360,115, - 362,0,364,0,366,0,368,0,370,0,372,0,374,0,376,116,378,117,380,118,382,0, - 384,0,386,0,388,0,390,119,392,120,394,121,396,0,398,0,400,0,402,0,404,0, - 406,0,408,0,410,0,412,122,414,123,416,124,418,0,420,0,422,0,424,0,426,0, - 428,0,430,0,432,0,434,0,436,125,438,126,440,127,442,128,444,0,446,0,448, - 0,450,0,452,0,454,0,456,0,458,0,460,129,462,0,464,130,466,131,468,132,470, - 0,472,133,474,134,476,135,478,136,16,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, - 15,36,2,0,10,10,13,13,3,0,9,10,13,13,32,32,2,0,67,67,99,99,2,0,72,72,104, - 104,2,0,65,65,97,97,2,0,78,78,110,110,2,0,71,71,103,103,2,0,69,69,101,101, - 2,0,80,80,112,112,2,0,79,79,111,111,2,0,73,73,105,105,2,0,84,84,116,116, - 2,0,82,82,114,114,2,0,88,88,120,120,2,0,76,76,108,108,2,0,68,68,100,100, - 2,0,83,83,115,115,2,0,86,86,118,118,2,0,75,75,107,107,2,0,77,77,109,109, - 2,0,87,87,119,119,2,0,70,70,102,102,2,0,85,85,117,117,6,0,9,10,13,13,32, - 32,47,47,91,91,93,93,11,0,9,10,13,13,32,32,34,35,44,44,47,47,58,58,60,60, - 62,63,92,92,124,124,1,0,48,57,2,0,65,90,97,122,8,0,34,34,78,78,82,82,84, - 84,92,92,110,110,114,114,116,116,4,0,10,10,13,13,34,34,92,92,2,0,43,43, - 45,45,1,0,96,96,2,0,66,66,98,98,2,0,89,89,121,121,11,0,9,10,13,13,32,32, - 34,34,44,44,47,47,58,58,61,61,91,91,93,93,124,124,2,0,42,42,47,47,2,0,74, - 74,106,106,1765,0,16,1,0,0,0,0,18,1,0,0,0,0,20,1,0,0,0,0,22,1,0,0,0,0,24, - 1,0,0,0,0,26,1,0,0,0,0,28,1,0,0,0,0,30,1,0,0,0,0,32,1,0,0,0,0,34,1,0,0, - 0,0,36,1,0,0,0,0,38,1,0,0,0,0,40,1,0,0,0,0,42,1,0,0,0,0,44,1,0,0,0,0,46, - 1,0,0,0,0,48,1,0,0,0,0,50,1,0,0,0,0,52,1,0,0,0,0,54,1,0,0,0,0,56,1,0,0, - 0,0,58,1,0,0,0,0,60,1,0,0,0,0,62,1,0,0,0,0,64,1,0,0,0,0,66,1,0,0,0,0,68, - 1,0,0,0,0,70,1,0,0,0,0,72,1,0,0,0,0,74,1,0,0,0,0,76,1,0,0,0,1,78,1,0,0, - 0,1,80,1,0,0,0,1,82,1,0,0,0,1,84,1,0,0,0,1,86,1,0,0,0,1,88,1,0,0,0,1,90, - 1,0,0,0,1,92,1,0,0,0,1,94,1,0,0,0,1,96,1,0,0,0,2,98,1,0,0,0,2,100,1,0,0, - 0,2,102,1,0,0,0,2,104,1,0,0,0,2,108,1,0,0,0,2,110,1,0,0,0,2,112,1,0,0,0, - 2,114,1,0,0,0,2,116,1,0,0,0,3,118,1,0,0,0,3,120,1,0,0,0,3,122,1,0,0,0,3, - 124,1,0,0,0,3,126,1,0,0,0,3,128,1,0,0,0,3,130,1,0,0,0,3,132,1,0,0,0,3,134, - 1,0,0,0,3,136,1,0,0,0,3,138,1,0,0,0,3,140,1,0,0,0,3,142,1,0,0,0,3,144,1, - 0,0,0,4,146,1,0,0,0,4,148,1,0,0,0,4,150,1,0,0,0,4,152,1,0,0,0,4,154,1,0, - 0,0,4,156,1,0,0,0,5,158,1,0,0,0,5,160,1,0,0,0,5,162,1,0,0,0,5,164,1,0,0, - 0,5,166,1,0,0,0,6,168,1,0,0,0,6,190,1,0,0,0,6,192,1,0,0,0,6,194,1,0,0,0, - 6,196,1,0,0,0,6,198,1,0,0,0,6,200,1,0,0,0,6,202,1,0,0,0,6,204,1,0,0,0,6, - 206,1,0,0,0,6,208,1,0,0,0,6,210,1,0,0,0,6,212,1,0,0,0,6,214,1,0,0,0,6,216, - 1,0,0,0,6,218,1,0,0,0,6,220,1,0,0,0,6,222,1,0,0,0,6,224,1,0,0,0,6,226,1, - 0,0,0,6,228,1,0,0,0,6,230,1,0,0,0,6,232,1,0,0,0,6,234,1,0,0,0,6,236,1,0, - 0,0,6,238,1,0,0,0,6,240,1,0,0,0,6,242,1,0,0,0,6,244,1,0,0,0,6,246,1,0,0, - 0,6,248,1,0,0,0,6,250,1,0,0,0,6,252,1,0,0,0,6,254,1,0,0,0,6,256,1,0,0,0, - 6,258,1,0,0,0,6,260,1,0,0,0,6,262,1,0,0,0,6,264,1,0,0,0,6,266,1,0,0,0,6, - 268,1,0,0,0,6,270,1,0,0,0,6,272,1,0,0,0,6,274,1,0,0,0,6,276,1,0,0,0,6,278, - 1,0,0,0,6,280,1,0,0,0,6,282,1,0,0,0,6,284,1,0,0,0,6,288,1,0,0,0,6,290,1, - 0,0,0,6,292,1,0,0,0,6,294,1,0,0,0,7,296,1,0,0,0,7,298,1,0,0,0,7,300,1,0, - 0,0,7,302,1,0,0,0,7,304,1,0,0,0,7,306,1,0,0,0,7,308,1,0,0,0,7,310,1,0,0, - 0,7,314,1,0,0,0,7,316,1,0,0,0,7,318,1,0,0,0,7,320,1,0,0,0,7,322,1,0,0,0, - 7,324,1,0,0,0,8,326,1,0,0,0,8,328,1,0,0,0,8,330,1,0,0,0,8,332,1,0,0,0,8, - 334,1,0,0,0,9,336,1,0,0,0,9,338,1,0,0,0,9,340,1,0,0,0,9,342,1,0,0,0,9,344, - 1,0,0,0,9,346,1,0,0,0,9,348,1,0,0,0,9,350,1,0,0,0,9,352,1,0,0,0,9,354,1, - 0,0,0,9,356,1,0,0,0,9,358,1,0,0,0,9,360,1,0,0,0,10,362,1,0,0,0,10,364,1, - 0,0,0,10,366,1,0,0,0,10,368,1,0,0,0,10,370,1,0,0,0,10,372,1,0,0,0,10,374, - 1,0,0,0,10,376,1,0,0,0,10,378,1,0,0,0,10,380,1,0,0,0,11,382,1,0,0,0,11, - 384,1,0,0,0,11,386,1,0,0,0,11,388,1,0,0,0,11,390,1,0,0,0,11,392,1,0,0,0, - 11,394,1,0,0,0,12,396,1,0,0,0,12,398,1,0,0,0,12,400,1,0,0,0,12,402,1,0, - 0,0,12,404,1,0,0,0,12,406,1,0,0,0,12,408,1,0,0,0,12,410,1,0,0,0,12,412, - 1,0,0,0,12,414,1,0,0,0,12,416,1,0,0,0,13,418,1,0,0,0,13,420,1,0,0,0,13, - 422,1,0,0,0,13,424,1,0,0,0,13,426,1,0,0,0,13,428,1,0,0,0,13,430,1,0,0,0, - 13,436,1,0,0,0,13,438,1,0,0,0,13,440,1,0,0,0,13,442,1,0,0,0,14,444,1,0, - 0,0,14,446,1,0,0,0,14,448,1,0,0,0,14,450,1,0,0,0,14,452,1,0,0,0,14,454, - 1,0,0,0,14,456,1,0,0,0,14,458,1,0,0,0,14,460,1,0,0,0,14,462,1,0,0,0,14, - 464,1,0,0,0,14,466,1,0,0,0,14,468,1,0,0,0,15,470,1,0,0,0,15,472,1,0,0,0, - 15,474,1,0,0,0,15,476,1,0,0,0,15,478,1,0,0,0,16,480,1,0,0,0,18,497,1,0, - 0,0,20,513,1,0,0,0,22,519,1,0,0,0,24,535,1,0,0,0,26,544,1,0,0,0,28,554, - 1,0,0,0,30,564,1,0,0,0,32,571,1,0,0,0,34,578,1,0,0,0,36,586,1,0,0,0,38, - 592,1,0,0,0,40,599,1,0,0,0,42,607,1,0,0,0,44,615,1,0,0,0,46,630,1,0,0,0, - 48,637,1,0,0,0,50,648,1,0,0,0,52,656,1,0,0,0,54,665,1,0,0,0,56,673,1,0, - 0,0,58,681,1,0,0,0,60,690,1,0,0,0,62,702,1,0,0,0,64,714,1,0,0,0,66,721, - 1,0,0,0,68,728,1,0,0,0,70,740,1,0,0,0,72,747,1,0,0,0,74,756,1,0,0,0,76, - 764,1,0,0,0,78,770,1,0,0,0,80,775,1,0,0,0,82,779,1,0,0,0,84,783,1,0,0,0, - 86,787,1,0,0,0,88,791,1,0,0,0,90,795,1,0,0,0,92,799,1,0,0,0,94,803,1,0, - 0,0,96,807,1,0,0,0,98,811,1,0,0,0,100,816,1,0,0,0,102,821,1,0,0,0,104,826, - 1,0,0,0,106,833,1,0,0,0,108,842,1,0,0,0,110,849,1,0,0,0,112,853,1,0,0,0, - 114,857,1,0,0,0,116,861,1,0,0,0,118,865,1,0,0,0,120,871,1,0,0,0,122,875, - 1,0,0,0,124,879,1,0,0,0,126,883,1,0,0,0,128,887,1,0,0,0,130,891,1,0,0,0, - 132,895,1,0,0,0,134,899,1,0,0,0,136,903,1,0,0,0,138,907,1,0,0,0,140,911, - 1,0,0,0,142,915,1,0,0,0,144,919,1,0,0,0,146,923,1,0,0,0,148,928,1,0,0,0, - 150,937,1,0,0,0,152,941,1,0,0,0,154,945,1,0,0,0,156,949,1,0,0,0,158,953, - 1,0,0,0,160,958,1,0,0,0,162,963,1,0,0,0,164,967,1,0,0,0,166,971,1,0,0,0, - 168,975,1,0,0,0,170,979,1,0,0,0,172,981,1,0,0,0,174,983,1,0,0,0,176,986, - 1,0,0,0,178,988,1,0,0,0,180,997,1,0,0,0,182,999,1,0,0,0,184,1004,1,0,0, - 0,186,1006,1,0,0,0,188,1011,1,0,0,0,190,1042,1,0,0,0,192,1045,1,0,0,0,194, - 1091,1,0,0,0,196,1093,1,0,0,0,198,1096,1,0,0,0,200,1100,1,0,0,0,202,1104, - 1,0,0,0,204,1106,1,0,0,0,206,1109,1,0,0,0,208,1111,1,0,0,0,210,1113,1,0, - 0,0,212,1118,1,0,0,0,214,1120,1,0,0,0,216,1126,1,0,0,0,218,1132,1,0,0,0, - 220,1135,1,0,0,0,222,1138,1,0,0,0,224,1143,1,0,0,0,226,1148,1,0,0,0,228, - 1152,1,0,0,0,230,1157,1,0,0,0,232,1163,1,0,0,0,234,1166,1,0,0,0,236,1168, - 1,0,0,0,238,1174,1,0,0,0,240,1179,1,0,0,0,242,1182,1,0,0,0,244,1185,1,0, - 0,0,246,1188,1,0,0,0,248,1190,1,0,0,0,250,1193,1,0,0,0,252,1195,1,0,0,0, - 254,1198,1,0,0,0,256,1200,1,0,0,0,258,1202,1,0,0,0,260,1204,1,0,0,0,262, - 1206,1,0,0,0,264,1208,1,0,0,0,266,1210,1,0,0,0,268,1212,1,0,0,0,270,1215, - 1,0,0,0,272,1236,1,0,0,0,274,1255,1,0,0,0,276,1257,1,0,0,0,278,1262,1,0, - 0,0,280,1267,1,0,0,0,282,1272,1,0,0,0,284,1293,1,0,0,0,286,1295,1,0,0,0, - 288,1303,1,0,0,0,290,1305,1,0,0,0,292,1309,1,0,0,0,294,1313,1,0,0,0,296, - 1317,1,0,0,0,298,1322,1,0,0,0,300,1326,1,0,0,0,302,1330,1,0,0,0,304,1334, - 1,0,0,0,306,1339,1,0,0,0,308,1343,1,0,0,0,310,1347,1,0,0,0,312,1359,1,0, - 0,0,314,1362,1,0,0,0,316,1366,1,0,0,0,318,1370,1,0,0,0,320,1374,1,0,0,0, - 322,1378,1,0,0,0,324,1382,1,0,0,0,326,1386,1,0,0,0,328,1391,1,0,0,0,330, - 1396,1,0,0,0,332,1400,1,0,0,0,334,1404,1,0,0,0,336,1408,1,0,0,0,338,1413, - 1,0,0,0,340,1418,1,0,0,0,342,1422,1,0,0,0,344,1428,1,0,0,0,346,1437,1,0, - 0,0,348,1441,1,0,0,0,350,1445,1,0,0,0,352,1449,1,0,0,0,354,1453,1,0,0,0, - 356,1457,1,0,0,0,358,1461,1,0,0,0,360,1465,1,0,0,0,362,1469,1,0,0,0,364, - 1474,1,0,0,0,366,1478,1,0,0,0,368,1482,1,0,0,0,370,1486,1,0,0,0,372,1491, - 1,0,0,0,374,1495,1,0,0,0,376,1499,1,0,0,0,378,1503,1,0,0,0,380,1507,1,0, - 0,0,382,1511,1,0,0,0,384,1517,1,0,0,0,386,1521,1,0,0,0,388,1525,1,0,0,0, - 390,1529,1,0,0,0,392,1533,1,0,0,0,394,1537,1,0,0,0,396,1541,1,0,0,0,398, - 1546,1,0,0,0,400,1550,1,0,0,0,402,1554,1,0,0,0,404,1558,1,0,0,0,406,1562, - 1,0,0,0,408,1566,1,0,0,0,410,1570,1,0,0,0,412,1574,1,0,0,0,414,1578,1,0, - 0,0,416,1582,1,0,0,0,418,1586,1,0,0,0,420,1591,1,0,0,0,422,1595,1,0,0,0, - 424,1599,1,0,0,0,426,1603,1,0,0,0,428,1607,1,0,0,0,430,1611,1,0,0,0,432, - 1619,1,0,0,0,434,1640,1,0,0,0,436,1644,1,0,0,0,438,1648,1,0,0,0,440,1652, - 1,0,0,0,442,1656,1,0,0,0,444,1660,1,0,0,0,446,1665,1,0,0,0,448,1669,1,0, - 0,0,450,1673,1,0,0,0,452,1677,1,0,0,0,454,1681,1,0,0,0,456,1685,1,0,0,0, - 458,1689,1,0,0,0,460,1693,1,0,0,0,462,1696,1,0,0,0,464,1700,1,0,0,0,466, - 1704,1,0,0,0,468,1708,1,0,0,0,470,1712,1,0,0,0,472,1717,1,0,0,0,474,1722, - 1,0,0,0,476,1726,1,0,0,0,478,1730,1,0,0,0,480,481,5,47,0,0,481,482,5,47, - 0,0,482,486,1,0,0,0,483,485,8,0,0,0,484,483,1,0,0,0,485,488,1,0,0,0,486, - 484,1,0,0,0,486,487,1,0,0,0,487,490,1,0,0,0,488,486,1,0,0,0,489,491,5,13, - 0,0,490,489,1,0,0,0,490,491,1,0,0,0,491,493,1,0,0,0,492,494,5,10,0,0,493, - 492,1,0,0,0,493,494,1,0,0,0,494,495,1,0,0,0,495,496,6,0,0,0,496,17,1,0, - 0,0,497,498,5,47,0,0,498,499,5,42,0,0,499,504,1,0,0,0,500,503,3,18,1,0, - 501,503,9,0,0,0,502,500,1,0,0,0,502,501,1,0,0,0,503,506,1,0,0,0,504,505, - 1,0,0,0,504,502,1,0,0,0,505,507,1,0,0,0,506,504,1,0,0,0,507,508,5,42,0, - 0,508,509,5,47,0,0,509,510,1,0,0,0,510,511,6,1,0,0,511,19,1,0,0,0,512,514, - 7,1,0,0,513,512,1,0,0,0,514,515,1,0,0,0,515,513,1,0,0,0,515,516,1,0,0,0, - 516,517,1,0,0,0,517,518,6,2,0,0,518,21,1,0,0,0,519,520,4,3,0,0,520,521, - 7,2,0,0,521,522,7,3,0,0,522,523,7,4,0,0,523,524,7,5,0,0,524,525,7,6,0,0, - 525,526,7,7,0,0,526,527,5,95,0,0,527,528,7,8,0,0,528,529,7,9,0,0,529,530, - 7,10,0,0,530,531,7,5,0,0,531,532,7,11,0,0,532,533,1,0,0,0,533,534,6,3,1, - 0,534,23,1,0,0,0,535,536,7,7,0,0,536,537,7,5,0,0,537,538,7,12,0,0,538,539, - 7,10,0,0,539,540,7,2,0,0,540,541,7,3,0,0,541,542,1,0,0,0,542,543,6,4,2, - 0,543,25,1,0,0,0,544,545,7,7,0,0,545,546,7,13,0,0,546,547,7,8,0,0,547,548, - 7,14,0,0,548,549,7,4,0,0,549,550,7,10,0,0,550,551,7,5,0,0,551,552,1,0,0, - 0,552,553,6,5,3,0,553,27,1,0,0,0,554,555,7,15,0,0,555,556,7,10,0,0,556, - 557,7,16,0,0,557,558,7,16,0,0,558,559,7,7,0,0,559,560,7,2,0,0,560,561,7, - 11,0,0,561,562,1,0,0,0,562,563,6,6,4,0,563,29,1,0,0,0,564,565,7,7,0,0,565, - 566,7,17,0,0,566,567,7,4,0,0,567,568,7,14,0,0,568,569,1,0,0,0,569,570,6, - 7,4,0,570,31,1,0,0,0,571,572,7,6,0,0,572,573,7,12,0,0,573,574,7,9,0,0,574, - 575,7,18,0,0,575,576,1,0,0,0,576,577,6,8,4,0,577,33,1,0,0,0,578,579,7,14, - 0,0,579,580,7,10,0,0,580,581,7,19,0,0,581,582,7,10,0,0,582,583,7,11,0,0, - 583,584,1,0,0,0,584,585,6,9,4,0,585,35,1,0,0,0,586,587,7,12,0,0,587,588, - 7,9,0,0,588,589,7,20,0,0,589,590,1,0,0,0,590,591,6,10,4,0,591,37,1,0,0, - 0,592,593,7,16,0,0,593,594,7,9,0,0,594,595,7,12,0,0,595,596,7,11,0,0,596, - 597,1,0,0,0,597,598,6,11,4,0,598,39,1,0,0,0,599,600,7,16,0,0,600,601,7, - 11,0,0,601,602,7,4,0,0,602,603,7,11,0,0,603,604,7,16,0,0,604,605,1,0,0, - 0,605,606,6,12,4,0,606,41,1,0,0,0,607,608,7,20,0,0,608,609,7,3,0,0,609, - 610,7,7,0,0,610,611,7,12,0,0,611,612,7,7,0,0,612,613,1,0,0,0,613,614,6, - 13,4,0,614,43,1,0,0,0,615,616,4,14,1,0,616,617,7,10,0,0,617,618,7,5,0,0, - 618,619,7,14,0,0,619,620,7,10,0,0,620,621,7,5,0,0,621,622,7,7,0,0,622,623, - 7,16,0,0,623,624,7,11,0,0,624,625,7,4,0,0,625,626,7,11,0,0,626,627,7,16, - 0,0,627,628,1,0,0,0,628,629,6,14,4,0,629,45,1,0,0,0,630,631,7,21,0,0,631, - 632,7,12,0,0,632,633,7,9,0,0,633,634,7,19,0,0,634,635,1,0,0,0,635,636,6, - 15,5,0,636,47,1,0,0,0,637,638,4,16,2,0,638,639,7,19,0,0,639,640,7,7,0,0, - 640,641,7,11,0,0,641,642,7,12,0,0,642,643,7,10,0,0,643,644,7,2,0,0,644, - 645,7,16,0,0,645,646,1,0,0,0,646,647,6,16,5,0,647,49,1,0,0,0,648,649,4, - 17,3,0,649,650,7,21,0,0,650,651,7,9,0,0,651,652,7,12,0,0,652,653,7,18,0, - 0,653,654,1,0,0,0,654,655,6,17,6,0,655,51,1,0,0,0,656,657,7,14,0,0,657, - 658,7,9,0,0,658,659,7,9,0,0,659,660,7,18,0,0,660,661,7,22,0,0,661,662,7, - 8,0,0,662,663,1,0,0,0,663,664,6,18,7,0,664,53,1,0,0,0,665,666,4,19,4,0, - 666,667,7,21,0,0,667,668,7,22,0,0,668,669,7,14,0,0,669,670,7,14,0,0,670, - 671,1,0,0,0,671,672,6,19,7,0,672,55,1,0,0,0,673,674,4,20,5,0,674,675,7, - 14,0,0,675,676,7,7,0,0,676,677,7,21,0,0,677,678,7,11,0,0,678,679,1,0,0, - 0,679,680,6,20,7,0,680,57,1,0,0,0,681,682,4,21,6,0,682,683,7,12,0,0,683, - 684,7,10,0,0,684,685,7,6,0,0,685,686,7,3,0,0,686,687,7,11,0,0,687,688,1, - 0,0,0,688,689,6,21,7,0,689,59,1,0,0,0,690,691,4,22,7,0,691,692,7,14,0,0, - 692,693,7,9,0,0,693,694,7,9,0,0,694,695,7,18,0,0,695,696,7,22,0,0,696,697, - 7,8,0,0,697,698,5,95,0,0,698,699,5,128020,0,0,699,700,1,0,0,0,700,701,6, - 22,8,0,701,61,1,0,0,0,702,703,7,19,0,0,703,704,7,17,0,0,704,705,5,95,0, - 0,705,706,7,7,0,0,706,707,7,13,0,0,707,708,7,8,0,0,708,709,7,4,0,0,709, - 710,7,5,0,0,710,711,7,15,0,0,711,712,1,0,0,0,712,713,6,23,9,0,713,63,1, - 0,0,0,714,715,7,15,0,0,715,716,7,12,0,0,716,717,7,9,0,0,717,718,7,8,0,0, - 718,719,1,0,0,0,719,720,6,24,10,0,720,65,1,0,0,0,721,722,7,18,0,0,722,723, - 7,7,0,0,723,724,7,7,0,0,724,725,7,8,0,0,725,726,1,0,0,0,726,727,6,25,10, - 0,727,67,1,0,0,0,728,729,4,26,8,0,729,730,7,10,0,0,730,731,7,5,0,0,731, - 732,7,16,0,0,732,733,7,10,0,0,733,734,7,16,0,0,734,735,7,11,0,0,735,736, - 5,95,0,0,736,737,5,128020,0,0,737,738,1,0,0,0,738,739,6,26,10,0,739,69, - 1,0,0,0,740,741,4,27,9,0,741,742,7,12,0,0,742,743,7,12,0,0,743,744,7,21, - 0,0,744,745,1,0,0,0,745,746,6,27,4,0,746,71,1,0,0,0,747,748,7,12,0,0,748, - 749,7,7,0,0,749,750,7,5,0,0,750,751,7,4,0,0,751,752,7,19,0,0,752,753,7, - 7,0,0,753,754,1,0,0,0,754,755,6,28,11,0,755,73,1,0,0,0,756,757,7,16,0,0, - 757,758,7,3,0,0,758,759,7,9,0,0,759,760,7,20,0,0,760,761,1,0,0,0,761,762, - 6,29,12,0,762,75,1,0,0,0,763,765,8,23,0,0,764,763,1,0,0,0,765,766,1,0,0, - 0,766,764,1,0,0,0,766,767,1,0,0,0,767,768,1,0,0,0,768,769,6,30,4,0,769, - 77,1,0,0,0,770,771,3,168,76,0,771,772,1,0,0,0,772,773,6,31,13,0,773,774, - 6,31,14,0,774,79,1,0,0,0,775,776,3,102,43,0,776,777,1,0,0,0,777,778,6,32, - 15,0,778,81,1,0,0,0,779,780,3,460,222,0,780,781,1,0,0,0,781,782,6,33,16, - 0,782,83,1,0,0,0,783,784,3,212,98,0,784,785,1,0,0,0,785,786,6,34,17,0,786, - 85,1,0,0,0,787,788,3,208,96,0,788,789,1,0,0,0,789,790,6,35,18,0,790,87, - 1,0,0,0,791,792,3,288,136,0,792,793,1,0,0,0,793,794,6,36,19,0,794,89,1, - 0,0,0,795,796,3,284,134,0,796,797,1,0,0,0,797,798,6,37,20,0,798,91,1,0, - 0,0,799,800,3,16,0,0,800,801,1,0,0,0,801,802,6,38,0,0,802,93,1,0,0,0,803, - 804,3,18,1,0,804,805,1,0,0,0,805,806,6,39,0,0,806,95,1,0,0,0,807,808,3, - 20,2,0,808,809,1,0,0,0,809,810,6,40,0,0,810,97,1,0,0,0,811,812,3,168,76, - 0,812,813,1,0,0,0,813,814,6,41,13,0,814,815,6,41,14,0,815,99,1,0,0,0,816, - 817,3,276,130,0,817,818,1,0,0,0,818,819,6,42,21,0,819,820,6,42,22,0,820, - 101,1,0,0,0,821,822,7,9,0,0,822,823,7,5,0,0,823,824,1,0,0,0,824,825,6,43, - 23,0,825,103,1,0,0,0,826,827,7,20,0,0,827,828,7,10,0,0,828,829,7,11,0,0, - 829,830,7,3,0,0,830,831,1,0,0,0,831,832,6,44,23,0,832,105,1,0,0,0,833,834, - 8,24,0,0,834,107,1,0,0,0,835,837,3,106,45,0,836,835,1,0,0,0,837,838,1,0, - 0,0,838,836,1,0,0,0,838,839,1,0,0,0,839,840,1,0,0,0,840,841,3,206,95,0, - 841,843,1,0,0,0,842,836,1,0,0,0,842,843,1,0,0,0,843,845,1,0,0,0,844,846, - 3,106,45,0,845,844,1,0,0,0,846,847,1,0,0,0,847,845,1,0,0,0,847,848,1,0, - 0,0,848,109,1,0,0,0,849,850,3,108,46,0,850,851,1,0,0,0,851,852,6,47,24, - 0,852,111,1,0,0,0,853,854,3,16,0,0,854,855,1,0,0,0,855,856,6,48,0,0,856, - 113,1,0,0,0,857,858,3,18,1,0,858,859,1,0,0,0,859,860,6,49,0,0,860,115,1, - 0,0,0,861,862,3,20,2,0,862,863,1,0,0,0,863,864,6,50,0,0,864,117,1,0,0,0, - 865,866,3,168,76,0,866,867,1,0,0,0,867,868,6,51,13,0,868,869,6,51,14,0, - 869,870,6,51,14,0,870,119,1,0,0,0,871,872,3,202,93,0,872,873,1,0,0,0,873, - 874,6,52,25,0,874,121,1,0,0,0,875,876,3,208,96,0,876,877,1,0,0,0,877,878, - 6,53,18,0,878,123,1,0,0,0,879,880,3,212,98,0,880,881,1,0,0,0,881,882,6, - 54,17,0,882,125,1,0,0,0,883,884,3,104,44,0,884,885,1,0,0,0,885,886,6,55, - 26,0,886,127,1,0,0,0,887,888,3,436,210,0,888,889,1,0,0,0,889,890,6,56,27, - 0,890,129,1,0,0,0,891,892,3,288,136,0,892,893,1,0,0,0,893,894,6,57,19,0, - 894,131,1,0,0,0,895,896,3,234,109,0,896,897,1,0,0,0,897,898,6,58,28,0,898, - 133,1,0,0,0,899,900,3,272,128,0,900,901,1,0,0,0,901,902,6,59,29,0,902,135, - 1,0,0,0,903,904,3,268,126,0,904,905,1,0,0,0,905,906,6,60,30,0,906,137,1, - 0,0,0,907,908,3,274,129,0,908,909,1,0,0,0,909,910,6,61,31,0,910,139,1,0, - 0,0,911,912,3,16,0,0,912,913,1,0,0,0,913,914,6,62,0,0,914,141,1,0,0,0,915, - 916,3,18,1,0,916,917,1,0,0,0,917,918,6,63,0,0,918,143,1,0,0,0,919,920,3, - 20,2,0,920,921,1,0,0,0,921,922,6,64,0,0,922,145,1,0,0,0,923,924,3,278,131, - 0,924,925,1,0,0,0,925,926,6,65,32,0,926,927,6,65,14,0,927,147,1,0,0,0,928, - 929,3,206,95,0,929,930,1,0,0,0,930,931,6,66,33,0,931,149,1,0,0,0,932,938, - 3,180,82,0,933,938,3,170,77,0,934,938,3,212,98,0,935,938,3,172,78,0,936, - 938,3,186,85,0,937,932,1,0,0,0,937,933,1,0,0,0,937,934,1,0,0,0,937,935, - 1,0,0,0,937,936,1,0,0,0,938,939,1,0,0,0,939,937,1,0,0,0,939,940,1,0,0,0, - 940,151,1,0,0,0,941,942,3,16,0,0,942,943,1,0,0,0,943,944,6,68,0,0,944,153, - 1,0,0,0,945,946,3,18,1,0,946,947,1,0,0,0,947,948,6,69,0,0,948,155,1,0,0, - 0,949,950,3,20,2,0,950,951,1,0,0,0,951,952,6,70,0,0,952,157,1,0,0,0,953, - 954,3,276,130,0,954,955,1,0,0,0,955,956,6,71,21,0,956,957,6,71,34,0,957, - 159,1,0,0,0,958,959,3,168,76,0,959,960,1,0,0,0,960,961,6,72,13,0,961,962, - 6,72,14,0,962,161,1,0,0,0,963,964,3,20,2,0,964,965,1,0,0,0,965,966,6,73, - 0,0,966,163,1,0,0,0,967,968,3,16,0,0,968,969,1,0,0,0,969,970,6,74,0,0,970, - 165,1,0,0,0,971,972,3,18,1,0,972,973,1,0,0,0,973,974,6,75,0,0,974,167,1, - 0,0,0,975,976,5,124,0,0,976,977,1,0,0,0,977,978,6,76,14,0,978,169,1,0,0, - 0,979,980,7,25,0,0,980,171,1,0,0,0,981,982,7,26,0,0,982,173,1,0,0,0,983, - 984,5,92,0,0,984,985,7,27,0,0,985,175,1,0,0,0,986,987,8,28,0,0,987,177, - 1,0,0,0,988,990,7,7,0,0,989,991,7,29,0,0,990,989,1,0,0,0,990,991,1,0,0, - 0,991,993,1,0,0,0,992,994,3,170,77,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,179,1,0,0,0,997,998,5,64,0,0,998,181,1, - 0,0,0,999,1000,5,96,0,0,1000,183,1,0,0,0,1001,1005,8,30,0,0,1002,1003,5, - 96,0,0,1003,1005,5,96,0,0,1004,1001,1,0,0,0,1004,1002,1,0,0,0,1005,185, - 1,0,0,0,1006,1007,5,95,0,0,1007,187,1,0,0,0,1008,1012,3,172,78,0,1009,1012, - 3,170,77,0,1010,1012,3,186,85,0,1011,1008,1,0,0,0,1011,1009,1,0,0,0,1011, - 1010,1,0,0,0,1012,189,1,0,0,0,1013,1018,5,34,0,0,1014,1017,3,174,79,0,1015, - 1017,3,176,80,0,1016,1014,1,0,0,0,1016,1015,1,0,0,0,1017,1020,1,0,0,0,1018, - 1016,1,0,0,0,1018,1019,1,0,0,0,1019,1021,1,0,0,0,1020,1018,1,0,0,0,1021, - 1043,5,34,0,0,1022,1023,5,34,0,0,1023,1024,5,34,0,0,1024,1025,5,34,0,0, - 1025,1029,1,0,0,0,1026,1028,8,0,0,0,1027,1026,1,0,0,0,1028,1031,1,0,0,0, - 1029,1030,1,0,0,0,1029,1027,1,0,0,0,1030,1032,1,0,0,0,1031,1029,1,0,0,0, - 1032,1033,5,34,0,0,1033,1034,5,34,0,0,1034,1035,5,34,0,0,1035,1037,1,0, - 0,0,1036,1038,5,34,0,0,1037,1036,1,0,0,0,1037,1038,1,0,0,0,1038,1040,1, - 0,0,0,1039,1041,5,34,0,0,1040,1039,1,0,0,0,1040,1041,1,0,0,0,1041,1043, - 1,0,0,0,1042,1013,1,0,0,0,1042,1022,1,0,0,0,1043,191,1,0,0,0,1044,1046, - 3,170,77,0,1045,1044,1,0,0,0,1046,1047,1,0,0,0,1047,1045,1,0,0,0,1047,1048, - 1,0,0,0,1048,193,1,0,0,0,1049,1051,3,170,77,0,1050,1049,1,0,0,0,1051,1052, - 1,0,0,0,1052,1050,1,0,0,0,1052,1053,1,0,0,0,1053,1054,1,0,0,0,1054,1058, - 3,212,98,0,1055,1057,3,170,77,0,1056,1055,1,0,0,0,1057,1060,1,0,0,0,1058, - 1056,1,0,0,0,1058,1059,1,0,0,0,1059,1092,1,0,0,0,1060,1058,1,0,0,0,1061, - 1063,3,212,98,0,1062,1064,3,170,77,0,1063,1062,1,0,0,0,1064,1065,1,0,0, - 0,1065,1063,1,0,0,0,1065,1066,1,0,0,0,1066,1092,1,0,0,0,1067,1069,3,170, - 77,0,1068,1067,1,0,0,0,1069,1070,1,0,0,0,1070,1068,1,0,0,0,1070,1071,1, - 0,0,0,1071,1079,1,0,0,0,1072,1076,3,212,98,0,1073,1075,3,170,77,0,1074, - 1073,1,0,0,0,1075,1078,1,0,0,0,1076,1074,1,0,0,0,1076,1077,1,0,0,0,1077, - 1080,1,0,0,0,1078,1076,1,0,0,0,1079,1072,1,0,0,0,1079,1080,1,0,0,0,1080, - 1081,1,0,0,0,1081,1082,3,178,81,0,1082,1092,1,0,0,0,1083,1085,3,212,98, - 0,1084,1086,3,170,77,0,1085,1084,1,0,0,0,1086,1087,1,0,0,0,1087,1085,1, - 0,0,0,1087,1088,1,0,0,0,1088,1089,1,0,0,0,1089,1090,3,178,81,0,1090,1092, - 1,0,0,0,1091,1050,1,0,0,0,1091,1061,1,0,0,0,1091,1068,1,0,0,0,1091,1083, - 1,0,0,0,1092,195,1,0,0,0,1093,1094,7,31,0,0,1094,1095,7,32,0,0,1095,197, - 1,0,0,0,1096,1097,7,4,0,0,1097,1098,7,5,0,0,1098,1099,7,15,0,0,1099,199, - 1,0,0,0,1100,1101,7,4,0,0,1101,1102,7,16,0,0,1102,1103,7,2,0,0,1103,201, - 1,0,0,0,1104,1105,5,61,0,0,1105,203,1,0,0,0,1106,1107,5,58,0,0,1107,1108, - 5,58,0,0,1108,205,1,0,0,0,1109,1110,5,58,0,0,1110,207,1,0,0,0,1111,1112, - 5,44,0,0,1112,209,1,0,0,0,1113,1114,7,15,0,0,1114,1115,7,7,0,0,1115,1116, - 7,16,0,0,1116,1117,7,2,0,0,1117,211,1,0,0,0,1118,1119,5,46,0,0,1119,213, - 1,0,0,0,1120,1121,7,21,0,0,1121,1122,7,4,0,0,1122,1123,7,14,0,0,1123,1124, - 7,16,0,0,1124,1125,7,7,0,0,1125,215,1,0,0,0,1126,1127,7,21,0,0,1127,1128, - 7,10,0,0,1128,1129,7,12,0,0,1129,1130,7,16,0,0,1130,1131,7,11,0,0,1131, - 217,1,0,0,0,1132,1133,7,10,0,0,1133,1134,7,5,0,0,1134,219,1,0,0,0,1135, - 1136,7,10,0,0,1136,1137,7,16,0,0,1137,221,1,0,0,0,1138,1139,7,14,0,0,1139, - 1140,7,4,0,0,1140,1141,7,16,0,0,1141,1142,7,11,0,0,1142,223,1,0,0,0,1143, - 1144,7,14,0,0,1144,1145,7,10,0,0,1145,1146,7,18,0,0,1146,1147,7,7,0,0,1147, - 225,1,0,0,0,1148,1149,7,5,0,0,1149,1150,7,9,0,0,1150,1151,7,11,0,0,1151, - 227,1,0,0,0,1152,1153,7,5,0,0,1153,1154,7,22,0,0,1154,1155,7,14,0,0,1155, - 1156,7,14,0,0,1156,229,1,0,0,0,1157,1158,7,5,0,0,1158,1159,7,22,0,0,1159, - 1160,7,14,0,0,1160,1161,7,14,0,0,1161,1162,7,16,0,0,1162,231,1,0,0,0,1163, - 1164,7,9,0,0,1164,1165,7,12,0,0,1165,233,1,0,0,0,1166,1167,5,63,0,0,1167, - 235,1,0,0,0,1168,1169,7,12,0,0,1169,1170,7,14,0,0,1170,1171,7,10,0,0,1171, - 1172,7,18,0,0,1172,1173,7,7,0,0,1173,237,1,0,0,0,1174,1175,7,11,0,0,1175, - 1176,7,12,0,0,1176,1177,7,22,0,0,1177,1178,7,7,0,0,1178,239,1,0,0,0,1179, - 1180,5,61,0,0,1180,1181,5,61,0,0,1181,241,1,0,0,0,1182,1183,5,61,0,0,1183, - 1184,5,126,0,0,1184,243,1,0,0,0,1185,1186,5,33,0,0,1186,1187,5,61,0,0,1187, - 245,1,0,0,0,1188,1189,5,60,0,0,1189,247,1,0,0,0,1190,1191,5,60,0,0,1191, - 1192,5,61,0,0,1192,249,1,0,0,0,1193,1194,5,62,0,0,1194,251,1,0,0,0,1195, - 1196,5,62,0,0,1196,1197,5,61,0,0,1197,253,1,0,0,0,1198,1199,5,43,0,0,1199, - 255,1,0,0,0,1200,1201,5,45,0,0,1201,257,1,0,0,0,1202,1203,5,42,0,0,1203, - 259,1,0,0,0,1204,1205,5,47,0,0,1205,261,1,0,0,0,1206,1207,5,37,0,0,1207, - 263,1,0,0,0,1208,1209,5,123,0,0,1209,265,1,0,0,0,1210,1211,5,125,0,0,1211, - 267,1,0,0,0,1212,1213,5,63,0,0,1213,1214,5,63,0,0,1214,269,1,0,0,0,1215, - 1216,3,42,13,0,1216,1217,1,0,0,0,1217,1218,6,127,35,0,1218,271,1,0,0,0, - 1219,1222,3,234,109,0,1220,1223,3,172,78,0,1221,1223,3,186,85,0,1222,1220, - 1,0,0,0,1222,1221,1,0,0,0,1223,1227,1,0,0,0,1224,1226,3,188,86,0,1225,1224, - 1,0,0,0,1226,1229,1,0,0,0,1227,1225,1,0,0,0,1227,1228,1,0,0,0,1228,1237, - 1,0,0,0,1229,1227,1,0,0,0,1230,1232,3,234,109,0,1231,1233,3,170,77,0,1232, - 1231,1,0,0,0,1233,1234,1,0,0,0,1234,1232,1,0,0,0,1234,1235,1,0,0,0,1235, - 1237,1,0,0,0,1236,1219,1,0,0,0,1236,1230,1,0,0,0,1237,273,1,0,0,0,1238, - 1241,3,268,126,0,1239,1242,3,172,78,0,1240,1242,3,186,85,0,1241,1239,1, - 0,0,0,1241,1240,1,0,0,0,1242,1246,1,0,0,0,1243,1245,3,188,86,0,1244,1243, - 1,0,0,0,1245,1248,1,0,0,0,1246,1244,1,0,0,0,1246,1247,1,0,0,0,1247,1256, - 1,0,0,0,1248,1246,1,0,0,0,1249,1251,3,268,126,0,1250,1252,3,170,77,0,1251, - 1250,1,0,0,0,1252,1253,1,0,0,0,1253,1251,1,0,0,0,1253,1254,1,0,0,0,1254, - 1256,1,0,0,0,1255,1238,1,0,0,0,1255,1249,1,0,0,0,1256,275,1,0,0,0,1257, - 1258,5,91,0,0,1258,1259,1,0,0,0,1259,1260,6,130,4,0,1260,1261,6,130,4,0, - 1261,277,1,0,0,0,1262,1263,5,93,0,0,1263,1264,1,0,0,0,1264,1265,6,131,14, - 0,1265,1266,6,131,14,0,1266,279,1,0,0,0,1267,1268,5,40,0,0,1268,1269,1, - 0,0,0,1269,1270,6,132,4,0,1270,1271,6,132,4,0,1271,281,1,0,0,0,1272,1273, - 5,41,0,0,1273,1274,1,0,0,0,1274,1275,6,133,14,0,1275,1276,6,133,14,0,1276, - 283,1,0,0,0,1277,1281,3,172,78,0,1278,1280,3,188,86,0,1279,1278,1,0,0,0, - 1280,1283,1,0,0,0,1281,1279,1,0,0,0,1281,1282,1,0,0,0,1282,1294,1,0,0,0, - 1283,1281,1,0,0,0,1284,1287,3,186,85,0,1285,1287,3,180,82,0,1286,1284,1, - 0,0,0,1286,1285,1,0,0,0,1287,1289,1,0,0,0,1288,1290,3,188,86,0,1289,1288, - 1,0,0,0,1290,1291,1,0,0,0,1291,1289,1,0,0,0,1291,1292,1,0,0,0,1292,1294, - 1,0,0,0,1293,1277,1,0,0,0,1293,1286,1,0,0,0,1294,285,1,0,0,0,1295,1297, - 3,182,83,0,1296,1298,3,184,84,0,1297,1296,1,0,0,0,1298,1299,1,0,0,0,1299, - 1297,1,0,0,0,1299,1300,1,0,0,0,1300,1301,1,0,0,0,1301,1302,3,182,83,0,1302, - 287,1,0,0,0,1303,1304,3,286,135,0,1304,289,1,0,0,0,1305,1306,3,16,0,0,1306, - 1307,1,0,0,0,1307,1308,6,137,0,0,1308,291,1,0,0,0,1309,1310,3,18,1,0,1310, - 1311,1,0,0,0,1311,1312,6,138,0,0,1312,293,1,0,0,0,1313,1314,3,20,2,0,1314, - 1315,1,0,0,0,1315,1316,6,139,0,0,1316,295,1,0,0,0,1317,1318,3,168,76,0, - 1318,1319,1,0,0,0,1319,1320,6,140,13,0,1320,1321,6,140,14,0,1321,297,1, - 0,0,0,1322,1323,3,276,130,0,1323,1324,1,0,0,0,1324,1325,6,141,21,0,1325, - 299,1,0,0,0,1326,1327,3,278,131,0,1327,1328,1,0,0,0,1328,1329,6,142,32, - 0,1329,301,1,0,0,0,1330,1331,3,206,95,0,1331,1332,1,0,0,0,1332,1333,6,143, - 33,0,1333,303,1,0,0,0,1334,1335,4,144,10,0,1335,1336,3,204,94,0,1336,1337, - 1,0,0,0,1337,1338,6,144,36,0,1338,305,1,0,0,0,1339,1340,3,208,96,0,1340, - 1341,1,0,0,0,1341,1342,6,145,18,0,1342,307,1,0,0,0,1343,1344,3,202,93,0, - 1344,1345,1,0,0,0,1345,1346,6,146,25,0,1346,309,1,0,0,0,1347,1348,7,19, - 0,0,1348,1349,7,7,0,0,1349,1350,7,11,0,0,1350,1351,7,4,0,0,1351,1352,7, - 15,0,0,1352,1353,7,4,0,0,1353,1354,7,11,0,0,1354,1355,7,4,0,0,1355,311, - 1,0,0,0,1356,1360,8,33,0,0,1357,1358,5,47,0,0,1358,1360,8,34,0,0,1359,1356, - 1,0,0,0,1359,1357,1,0,0,0,1360,313,1,0,0,0,1361,1363,3,312,148,0,1362,1361, - 1,0,0,0,1363,1364,1,0,0,0,1364,1362,1,0,0,0,1364,1365,1,0,0,0,1365,315, - 1,0,0,0,1366,1367,3,314,149,0,1367,1368,1,0,0,0,1368,1369,6,150,37,0,1369, - 317,1,0,0,0,1370,1371,3,190,87,0,1371,1372,1,0,0,0,1372,1373,6,151,38,0, - 1373,319,1,0,0,0,1374,1375,3,16,0,0,1375,1376,1,0,0,0,1376,1377,6,152,0, - 0,1377,321,1,0,0,0,1378,1379,3,18,1,0,1379,1380,1,0,0,0,1380,1381,6,153, - 0,0,1381,323,1,0,0,0,1382,1383,3,20,2,0,1383,1384,1,0,0,0,1384,1385,6,154, - 0,0,1385,325,1,0,0,0,1386,1387,3,280,132,0,1387,1388,1,0,0,0,1388,1389, - 6,155,39,0,1389,1390,6,155,34,0,1390,327,1,0,0,0,1391,1392,3,168,76,0,1392, - 1393,1,0,0,0,1393,1394,6,156,13,0,1394,1395,6,156,14,0,1395,329,1,0,0,0, - 1396,1397,3,20,2,0,1397,1398,1,0,0,0,1398,1399,6,157,0,0,1399,331,1,0,0, - 0,1400,1401,3,16,0,0,1401,1402,1,0,0,0,1402,1403,6,158,0,0,1403,333,1,0, - 0,0,1404,1405,3,18,1,0,1405,1406,1,0,0,0,1406,1407,6,159,0,0,1407,335,1, - 0,0,0,1408,1409,3,168,76,0,1409,1410,1,0,0,0,1410,1411,6,160,13,0,1411, - 1412,6,160,14,0,1412,337,1,0,0,0,1413,1414,7,35,0,0,1414,1415,7,9,0,0,1415, - 1416,7,10,0,0,1416,1417,7,5,0,0,1417,339,1,0,0,0,1418,1419,3,460,222,0, - 1419,1420,1,0,0,0,1420,1421,6,162,16,0,1421,341,1,0,0,0,1422,1423,3,102, - 43,0,1423,1424,1,0,0,0,1424,1425,6,163,15,0,1425,1426,6,163,14,0,1426,1427, - 6,163,4,0,1427,343,1,0,0,0,1428,1429,7,22,0,0,1429,1430,7,16,0,0,1430,1431, - 7,10,0,0,1431,1432,7,5,0,0,1432,1433,7,6,0,0,1433,1434,1,0,0,0,1434,1435, - 6,164,14,0,1435,1436,6,164,4,0,1436,345,1,0,0,0,1437,1438,3,314,149,0,1438, - 1439,1,0,0,0,1439,1440,6,165,37,0,1440,347,1,0,0,0,1441,1442,3,190,87,0, - 1442,1443,1,0,0,0,1443,1444,6,166,38,0,1444,349,1,0,0,0,1445,1446,3,206, - 95,0,1446,1447,1,0,0,0,1447,1448,6,167,33,0,1448,351,1,0,0,0,1449,1450, - 3,284,134,0,1450,1451,1,0,0,0,1451,1452,6,168,20,0,1452,353,1,0,0,0,1453, - 1454,3,288,136,0,1454,1455,1,0,0,0,1455,1456,6,169,19,0,1456,355,1,0,0, - 0,1457,1458,3,16,0,0,1458,1459,1,0,0,0,1459,1460,6,170,0,0,1460,357,1,0, - 0,0,1461,1462,3,18,1,0,1462,1463,1,0,0,0,1463,1464,6,171,0,0,1464,359,1, - 0,0,0,1465,1466,3,20,2,0,1466,1467,1,0,0,0,1467,1468,6,172,0,0,1468,361, - 1,0,0,0,1469,1470,3,168,76,0,1470,1471,1,0,0,0,1471,1472,6,173,13,0,1472, - 1473,6,173,14,0,1473,363,1,0,0,0,1474,1475,3,206,95,0,1475,1476,1,0,0,0, - 1476,1477,6,174,33,0,1477,365,1,0,0,0,1478,1479,3,208,96,0,1479,1480,1, - 0,0,0,1480,1481,6,175,18,0,1481,367,1,0,0,0,1482,1483,3,212,98,0,1483,1484, - 1,0,0,0,1484,1485,6,176,17,0,1485,369,1,0,0,0,1486,1487,3,102,43,0,1487, - 1488,1,0,0,0,1488,1489,6,177,15,0,1489,1490,6,177,40,0,1490,371,1,0,0,0, - 1491,1492,3,314,149,0,1492,1493,1,0,0,0,1493,1494,6,178,37,0,1494,373,1, - 0,0,0,1495,1496,3,190,87,0,1496,1497,1,0,0,0,1497,1498,6,179,38,0,1498, - 375,1,0,0,0,1499,1500,3,16,0,0,1500,1501,1,0,0,0,1501,1502,6,180,0,0,1502, - 377,1,0,0,0,1503,1504,3,18,1,0,1504,1505,1,0,0,0,1505,1506,6,181,0,0,1506, - 379,1,0,0,0,1507,1508,3,20,2,0,1508,1509,1,0,0,0,1509,1510,6,182,0,0,1510, - 381,1,0,0,0,1511,1512,3,168,76,0,1512,1513,1,0,0,0,1513,1514,6,183,13,0, - 1514,1515,6,183,14,0,1515,1516,6,183,14,0,1516,383,1,0,0,0,1517,1518,3, - 208,96,0,1518,1519,1,0,0,0,1519,1520,6,184,18,0,1520,385,1,0,0,0,1521,1522, - 3,212,98,0,1522,1523,1,0,0,0,1523,1524,6,185,17,0,1524,387,1,0,0,0,1525, - 1526,3,436,210,0,1526,1527,1,0,0,0,1527,1528,6,186,27,0,1528,389,1,0,0, - 0,1529,1530,3,16,0,0,1530,1531,1,0,0,0,1531,1532,6,187,0,0,1532,391,1,0, - 0,0,1533,1534,3,18,1,0,1534,1535,1,0,0,0,1535,1536,6,188,0,0,1536,393,1, - 0,0,0,1537,1538,3,20,2,0,1538,1539,1,0,0,0,1539,1540,6,189,0,0,1540,395, - 1,0,0,0,1541,1542,3,168,76,0,1542,1543,1,0,0,0,1543,1544,6,190,13,0,1544, - 1545,6,190,14,0,1545,397,1,0,0,0,1546,1547,3,212,98,0,1547,1548,1,0,0,0, - 1548,1549,6,191,17,0,1549,399,1,0,0,0,1550,1551,3,234,109,0,1551,1552,1, - 0,0,0,1552,1553,6,192,28,0,1553,401,1,0,0,0,1554,1555,3,272,128,0,1555, - 1556,1,0,0,0,1556,1557,6,193,29,0,1557,403,1,0,0,0,1558,1559,3,268,126, - 0,1559,1560,1,0,0,0,1560,1561,6,194,30,0,1561,405,1,0,0,0,1562,1563,3,274, - 129,0,1563,1564,1,0,0,0,1564,1565,6,195,31,0,1565,407,1,0,0,0,1566,1567, - 3,288,136,0,1567,1568,1,0,0,0,1568,1569,6,196,19,0,1569,409,1,0,0,0,1570, - 1571,3,284,134,0,1571,1572,1,0,0,0,1572,1573,6,197,20,0,1573,411,1,0,0, - 0,1574,1575,3,16,0,0,1575,1576,1,0,0,0,1576,1577,6,198,0,0,1577,413,1,0, - 0,0,1578,1579,3,18,1,0,1579,1580,1,0,0,0,1580,1581,6,199,0,0,1581,415,1, - 0,0,0,1582,1583,3,20,2,0,1583,1584,1,0,0,0,1584,1585,6,200,0,0,1585,417, - 1,0,0,0,1586,1587,3,168,76,0,1587,1588,1,0,0,0,1588,1589,6,201,13,0,1589, - 1590,6,201,14,0,1590,419,1,0,0,0,1591,1592,3,212,98,0,1592,1593,1,0,0,0, - 1593,1594,6,202,17,0,1594,421,1,0,0,0,1595,1596,3,208,96,0,1596,1597,1, - 0,0,0,1597,1598,6,203,18,0,1598,423,1,0,0,0,1599,1600,3,234,109,0,1600, - 1601,1,0,0,0,1601,1602,6,204,28,0,1602,425,1,0,0,0,1603,1604,3,272,128, - 0,1604,1605,1,0,0,0,1605,1606,6,205,29,0,1606,427,1,0,0,0,1607,1608,3,268, - 126,0,1608,1609,1,0,0,0,1609,1610,6,206,30,0,1610,429,1,0,0,0,1611,1612, - 3,274,129,0,1612,1613,1,0,0,0,1613,1614,6,207,31,0,1614,431,1,0,0,0,1615, - 1620,3,172,78,0,1616,1620,3,170,77,0,1617,1620,3,186,85,0,1618,1620,3,258, - 121,0,1619,1615,1,0,0,0,1619,1616,1,0,0,0,1619,1617,1,0,0,0,1619,1618,1, - 0,0,0,1620,433,1,0,0,0,1621,1624,3,172,78,0,1622,1624,3,258,121,0,1623, - 1621,1,0,0,0,1623,1622,1,0,0,0,1624,1628,1,0,0,0,1625,1627,3,432,208,0, - 1626,1625,1,0,0,0,1627,1630,1,0,0,0,1628,1626,1,0,0,0,1628,1629,1,0,0,0, - 1629,1641,1,0,0,0,1630,1628,1,0,0,0,1631,1634,3,186,85,0,1632,1634,3,180, - 82,0,1633,1631,1,0,0,0,1633,1632,1,0,0,0,1634,1636,1,0,0,0,1635,1637,3, - 432,208,0,1636,1635,1,0,0,0,1637,1638,1,0,0,0,1638,1636,1,0,0,0,1638,1639, - 1,0,0,0,1639,1641,1,0,0,0,1640,1623,1,0,0,0,1640,1633,1,0,0,0,1641,435, - 1,0,0,0,1642,1645,3,434,209,0,1643,1645,3,286,135,0,1644,1642,1,0,0,0,1644, - 1643,1,0,0,0,1645,1646,1,0,0,0,1646,1644,1,0,0,0,1646,1647,1,0,0,0,1647, - 437,1,0,0,0,1648,1649,3,16,0,0,1649,1650,1,0,0,0,1650,1651,6,211,0,0,1651, - 439,1,0,0,0,1652,1653,3,18,1,0,1653,1654,1,0,0,0,1654,1655,6,212,0,0,1655, - 441,1,0,0,0,1656,1657,3,20,2,0,1657,1658,1,0,0,0,1658,1659,6,213,0,0,1659, - 443,1,0,0,0,1660,1661,3,168,76,0,1661,1662,1,0,0,0,1662,1663,6,214,13,0, - 1663,1664,6,214,14,0,1664,445,1,0,0,0,1665,1666,3,202,93,0,1666,1667,1, - 0,0,0,1667,1668,6,215,25,0,1668,447,1,0,0,0,1669,1670,3,208,96,0,1670,1671, - 1,0,0,0,1671,1672,6,216,18,0,1672,449,1,0,0,0,1673,1674,3,212,98,0,1674, - 1675,1,0,0,0,1675,1676,6,217,17,0,1676,451,1,0,0,0,1677,1678,3,234,109, - 0,1678,1679,1,0,0,0,1679,1680,6,218,28,0,1680,453,1,0,0,0,1681,1682,3,272, - 128,0,1682,1683,1,0,0,0,1683,1684,6,219,29,0,1684,455,1,0,0,0,1685,1686, - 3,268,126,0,1686,1687,1,0,0,0,1687,1688,6,220,30,0,1688,457,1,0,0,0,1689, - 1690,3,274,129,0,1690,1691,1,0,0,0,1691,1692,6,221,31,0,1692,459,1,0,0, - 0,1693,1694,7,4,0,0,1694,1695,7,16,0,0,1695,461,1,0,0,0,1696,1697,3,436, - 210,0,1697,1698,1,0,0,0,1698,1699,6,223,27,0,1699,463,1,0,0,0,1700,1701, - 3,16,0,0,1701,1702,1,0,0,0,1702,1703,6,224,0,0,1703,465,1,0,0,0,1704,1705, - 3,18,1,0,1705,1706,1,0,0,0,1706,1707,6,225,0,0,1707,467,1,0,0,0,1708,1709, - 3,20,2,0,1709,1710,1,0,0,0,1710,1711,6,226,0,0,1711,469,1,0,0,0,1712,1713, - 3,168,76,0,1713,1714,1,0,0,0,1714,1715,6,227,13,0,1715,1716,6,227,14,0, - 1716,471,1,0,0,0,1717,1718,7,10,0,0,1718,1719,7,5,0,0,1719,1720,7,21,0, - 0,1720,1721,7,9,0,0,1721,473,1,0,0,0,1722,1723,3,16,0,0,1723,1724,1,0,0, - 0,1724,1725,6,229,0,0,1725,475,1,0,0,0,1726,1727,3,18,1,0,1727,1728,1,0, - 0,0,1728,1729,6,230,0,0,1729,477,1,0,0,0,1730,1731,3,20,2,0,1731,1732,1, - 0,0,0,1732,1733,6,231,0,0,1733,479,1,0,0,0,70,0,1,2,3,4,5,6,7,8,9,10,11, - 12,13,14,15,486,490,493,502,504,515,766,838,842,847,937,939,990,995,1004, - 1011,1016,1018,1029,1037,1040,1042,1047,1052,1058,1065,1070,1076,1079,1087, - 1091,1222,1227,1234,1236,1241,1246,1253,1255,1281,1286,1291,1293,1299,1359, - 1364,1619,1623,1628,1633,1638,1640,1644,1646,41,0,1,0,5,1,0,5,2,0,5,5,0, - 5,6,0,5,7,0,5,8,0,5,9,0,5,10,0,5,12,0,5,13,0,5,14,0,5,15,0,7,51,0,4,0,0, - 7,35,0,7,129,0,7,63,0,7,61,0,7,99,0,7,98,0,7,94,0,5,4,0,5,3,0,7,37,0,7, - 58,0,7,36,0,7,125,0,7,74,0,7,92,0,7,91,0,7,93,0,7,95,0,7,60,0,5,0,0,7,14, - 0,7,59,0,7,104,0,7,52,0,7,96,0,5,11,0]; + 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,1,0,1,0,1,0,1,0,5,0,493,8,0,10,0,12,0,496,9,0,1,0,3,0,499,8, + 0,1,0,3,0,502,8,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,5,1,511,8,1,10,1,12,1,514, + 9,1,1,1,1,1,1,1,1,1,1,1,1,2,4,2,522,8,2,11,2,12,2,523,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,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1, + 4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1, + 6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1, + 8,1,8,1,8,1,9,1,9,1,9,1,9,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,11,1,11,1,11,1,12,1,12,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,14,1,14, + 1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1, + 15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17, + 1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1, + 19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,21, + 1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,22,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,23,1,23,1,23,1,23,1,23,1,24, + 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,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,26,1,26,1,27,1,27,1,27,1,27, + 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,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,29,1,29,1,30,1,30,1,30,1,30,1,30, + 1,30,1,30,1,31,4,31,778,8,31,11,31,12,31,779,1,31,1,31,1,32,1,32,1,32,1, + 32,1,32,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,36, + 1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1, + 39,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,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,47,4,47,848,8,47,11,47,12,47,849,1,47,1,47,3,47,854,8,47,1,47, + 4,47,857,8,47,11,47,12,47,858,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,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,52,1,53, + 1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1, + 56,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,60,1,60, + 1,60,1,60,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,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,66,1,66,1,66,1,66,1,66,1,67,1,67, + 1,67,1,67,1,68,1,68,1,68,1,68,1,68,4,68,949,8,68,11,68,12,68,950,1,69,1, + 69,1,69,1,69,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,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1, + 76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,78,1,78,1,79,1,79,1,80,1,80,1,80, + 1,81,1,81,1,82,1,82,3,82,1002,8,82,1,82,4,82,1005,8,82,11,82,12,82,1006, + 1,83,1,83,1,84,1,84,1,85,1,85,1,85,3,85,1016,8,85,1,86,1,86,1,87,1,87,1, + 87,3,87,1023,8,87,1,88,1,88,1,88,5,88,1028,8,88,10,88,12,88,1031,9,88,1, + 88,1,88,1,88,1,88,1,88,1,88,5,88,1039,8,88,10,88,12,88,1042,9,88,1,88,1, + 88,1,88,1,88,1,88,3,88,1049,8,88,1,88,3,88,1052,8,88,3,88,1054,8,88,1,89, + 4,89,1057,8,89,11,89,12,89,1058,1,90,4,90,1062,8,90,11,90,12,90,1063,1, + 90,1,90,5,90,1068,8,90,10,90,12,90,1071,9,90,1,90,1,90,4,90,1075,8,90,11, + 90,12,90,1076,1,90,4,90,1080,8,90,11,90,12,90,1081,1,90,1,90,5,90,1086, + 8,90,10,90,12,90,1089,9,90,3,90,1091,8,90,1,90,1,90,1,90,1,90,4,90,1097, + 8,90,11,90,12,90,1098,1,90,1,90,3,90,1103,8,90,1,91,1,91,1,91,1,91,1,92, + 1,92,1,92,1,93,1,93,1,93,1,93,1,94,1,94,1,95,1,95,1,95,1,96,1,96,1,96,1, + 97,1,97,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,101,1,101,1,101, + 1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103, + 1,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,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,109,1,110,1,110,1,110,1,111,1,111,1,111,1,112,1,112, + 1,113,1,113,1,113,1,113,1,113,1,113,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,117,1,117,1,117,1,118,1,118, + 1,118,1,119,1,119,1,120,1,120,1,120,1,121,1,121,1,122,1,122,1,122,1,123, + 1,123,1,124,1,124,1,125,1,125,1,126,1,126,1,127,1,127,1,128,1,128,1,129, + 1,129,1,130,1,130,1,130,1,131,1,131,1,131,1,131,1,132,1,132,1,132,3,132, + 1245,8,132,1,132,5,132,1248,8,132,10,132,12,132,1251,9,132,1,132,1,132, + 4,132,1255,8,132,11,132,12,132,1256,3,132,1259,8,132,1,133,1,133,1,133, + 3,133,1264,8,133,1,133,5,133,1267,8,133,10,133,12,133,1270,9,133,1,133, + 1,133,4,133,1274,8,133,11,133,12,133,1275,3,133,1278,8,133,1,134,1,134, + 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,137,1,137,1,137,1,137,1,137,1,138,1,138,5,138,1302,8,138,10,138, + 12,138,1305,9,138,1,138,1,138,3,138,1309,8,138,1,138,4,138,1312,8,138,11, + 138,12,138,1313,3,138,1316,8,138,1,139,1,139,4,139,1320,8,139,11,139,12, + 139,1321,1,139,1,139,1,140,1,140,1,141,1,141,1,141,1,141,1,142,1,142,1, + 142,1,142,1,143,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,146,1,146,1,146,1,146,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,150,1,150,1,150,1,150,1, + 151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,152,1,152,1,152,3, + 152,1382,8,152,1,153,4,153,1385,8,153,11,153,12,153,1386,1,154,1,154,1, + 154,1,154,1,155,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,157,1,157,1, + 157,1,157,1,158,1,158,1,158,1,158,1,159,1,159,1,159,1,159,1,159,1,160,1, + 160,1,160,1,160,1,160,1,161,1,161,1,161,1,161,1,162,1,162,1,162,1,162,1, + 163,1,163,1,163,1,163,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,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,168,1,169,1,169,1,169,1, + 169,1,170,1,170,1,170,1,170,1,171,1,171,1,171,1,171,1,172,1,172,1,172,1, + 172,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,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,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,183,1,183,1,183,1,183,1,184,1, + 184,1,184,1,184,1,185,1,185,1,185,1,185,1,186,1,186,1,186,1,186,1,187,1, + 187,1,187,1,187,1,187,1,187,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,191,1,191,1,191,1,191,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,195,1,195,1, + 195,1,195,1,196,1,196,1,196,1,196,1,197,1,197,1,197,1,197,1,198,1,198,1, + 198,1,198,1,199,1,199,1,199,1,199,1,200,1,200,1,200,1,200,1,201,1,201,1, + 201,1,201,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,205,1,205,1,205,1,205,1,205,1,206,1,206,1,206,1,206,1,207,1, + 207,1,207,1,207,1,208,1,208,1,208,1,208,1,209,1,209,1,209,1,209,1,210,1, + 210,1,210,1,210,1,211,1,211,1,211,1,211,1,212,1,212,1,212,1,212,3,212,1642, + 8,212,1,213,1,213,3,213,1646,8,213,1,213,5,213,1649,8,213,10,213,12,213, + 1652,9,213,1,213,1,213,3,213,1656,8,213,1,213,4,213,1659,8,213,11,213,12, + 213,1660,3,213,1663,8,213,1,214,1,214,4,214,1667,8,214,11,214,12,214,1668, + 1,215,1,215,1,215,1,215,1,216,1,216,1,216,1,216,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,220,1,220,1,220, + 1,220,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,224,1,224,1,224,1,224,1,225,1,225,1,225,1,225,1,226,1,226,1,226, + 1,226,1,227,1,227,1,227,1,227,1,228,1,228,1,228,1,228,1,229,1,229,1,229, + 1,229,1,230,1,230,1,230,1,230,1,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,234,1,234,1,234,1,234,1,235, + 1,235,1,235,1,235,2,512,1040,0,236,16,1,18,2,20,3,22,4,24,5,26,6,28,7,30, + 8,32,9,34,10,36,11,38,12,40,13,42,14,44,15,46,16,48,17,50,18,52,19,54,20, + 56,21,58,22,60,23,62,24,64,25,66,26,68,27,70,28,72,29,74,30,76,31,78,32, + 80,0,82,0,84,0,86,0,88,0,90,0,92,0,94,33,96,34,98,35,100,0,102,0,104,0, + 106,0,108,0,110,36,112,0,114,37,116,38,118,39,120,0,122,0,124,0,126,0,128, + 0,130,0,132,0,134,0,136,0,138,0,140,0,142,40,144,41,146,42,148,0,150,0, + 152,43,154,44,156,45,158,46,160,0,162,0,164,47,166,48,168,49,170,50,172, + 0,174,0,176,0,178,0,180,0,182,0,184,0,186,0,188,0,190,0,192,51,194,52,196, + 53,198,54,200,55,202,56,204,57,206,58,208,59,210,60,212,61,214,62,216,63, + 218,64,220,65,222,66,224,67,226,68,228,69,230,70,232,71,234,72,236,73,238, + 74,240,75,242,76,244,77,246,78,248,79,250,80,252,81,254,82,256,83,258,84, + 260,85,262,86,264,87,266,88,268,89,270,90,272,91,274,92,276,93,278,0,280, + 94,282,95,284,96,286,97,288,98,290,99,292,100,294,0,296,101,298,102,300, + 103,302,104,304,0,306,0,308,0,310,0,312,0,314,0,316,0,318,105,320,0,322, + 106,324,0,326,0,328,107,330,108,332,109,334,0,336,0,338,110,340,111,342, + 112,344,0,346,113,348,0,350,0,352,114,354,0,356,0,358,0,360,0,362,0,364, + 115,366,116,368,117,370,0,372,0,374,0,376,0,378,0,380,0,382,0,384,118,386, + 119,388,120,390,0,392,0,394,0,396,0,398,121,400,122,402,123,404,0,406,0, + 408,0,410,0,412,0,414,0,416,0,418,0,420,124,422,125,424,126,426,0,428,0, + 430,0,432,0,434,0,436,0,438,0,440,0,442,0,444,127,446,128,448,129,450,130, + 452,0,454,0,456,0,458,0,460,0,462,0,464,0,466,0,468,0,470,0,472,131,474, + 132,476,133,478,0,480,134,482,135,484,136,486,137,16,0,1,2,3,4,5,6,7,8, + 9,10,11,12,13,14,15,36,2,0,10,10,13,13,3,0,9,10,13,13,32,32,2,0,67,67,99, + 99,2,0,72,72,104,104,2,0,65,65,97,97,2,0,78,78,110,110,2,0,71,71,103,103, + 2,0,69,69,101,101,2,0,80,80,112,112,2,0,79,79,111,111,2,0,73,73,105,105, + 2,0,84,84,116,116,2,0,82,82,114,114,2,0,88,88,120,120,2,0,76,76,108,108, + 2,0,68,68,100,100,2,0,83,83,115,115,2,0,86,86,118,118,2,0,75,75,107,107, + 2,0,77,77,109,109,2,0,87,87,119,119,2,0,70,70,102,102,2,0,85,85,117,117, + 6,0,9,10,13,13,32,32,47,47,91,91,93,93,11,0,9,10,13,13,32,32,34,35,44,44, + 47,47,58,58,60,60,62,63,92,92,124,124,1,0,48,57,2,0,65,90,97,122,8,0,34, + 34,78,78,82,82,84,84,92,92,110,110,114,114,116,116,4,0,10,10,13,13,34,34, + 92,92,2,0,43,43,45,45,1,0,96,96,2,0,66,66,98,98,2,0,89,89,121,121,11,0, + 9,10,13,13,32,32,34,34,44,44,47,47,58,58,61,61,91,91,93,93,124,124,2,0, + 42,42,47,47,2,0,74,74,106,106,1788,0,16,1,0,0,0,0,18,1,0,0,0,0,20,1,0,0, + 0,0,22,1,0,0,0,0,24,1,0,0,0,0,26,1,0,0,0,0,28,1,0,0,0,0,30,1,0,0,0,0,32, + 1,0,0,0,0,34,1,0,0,0,0,36,1,0,0,0,0,38,1,0,0,0,0,40,1,0,0,0,0,42,1,0,0, + 0,0,44,1,0,0,0,0,46,1,0,0,0,0,48,1,0,0,0,0,50,1,0,0,0,0,52,1,0,0,0,0,54, + 1,0,0,0,0,56,1,0,0,0,0,58,1,0,0,0,0,60,1,0,0,0,0,62,1,0,0,0,0,64,1,0,0, + 0,0,66,1,0,0,0,0,68,1,0,0,0,0,70,1,0,0,0,0,72,1,0,0,0,0,74,1,0,0,0,0,76, + 1,0,0,0,0,78,1,0,0,0,1,80,1,0,0,0,1,82,1,0,0,0,1,84,1,0,0,0,1,86,1,0,0, + 0,1,88,1,0,0,0,1,90,1,0,0,0,1,92,1,0,0,0,1,94,1,0,0,0,1,96,1,0,0,0,1,98, + 1,0,0,0,2,100,1,0,0,0,2,102,1,0,0,0,2,104,1,0,0,0,2,106,1,0,0,0,2,110,1, + 0,0,0,2,112,1,0,0,0,2,114,1,0,0,0,2,116,1,0,0,0,2,118,1,0,0,0,3,120,1,0, + 0,0,3,122,1,0,0,0,3,124,1,0,0,0,3,126,1,0,0,0,3,128,1,0,0,0,3,130,1,0,0, + 0,3,132,1,0,0,0,3,134,1,0,0,0,3,136,1,0,0,0,3,138,1,0,0,0,3,140,1,0,0,0, + 3,142,1,0,0,0,3,144,1,0,0,0,3,146,1,0,0,0,4,148,1,0,0,0,4,150,1,0,0,0,4, + 152,1,0,0,0,4,154,1,0,0,0,4,156,1,0,0,0,4,158,1,0,0,0,5,160,1,0,0,0,5,162, + 1,0,0,0,5,164,1,0,0,0,5,166,1,0,0,0,5,168,1,0,0,0,6,170,1,0,0,0,6,192,1, + 0,0,0,6,194,1,0,0,0,6,196,1,0,0,0,6,198,1,0,0,0,6,200,1,0,0,0,6,202,1,0, + 0,0,6,204,1,0,0,0,6,206,1,0,0,0,6,208,1,0,0,0,6,210,1,0,0,0,6,212,1,0,0, + 0,6,214,1,0,0,0,6,216,1,0,0,0,6,218,1,0,0,0,6,220,1,0,0,0,6,222,1,0,0,0, + 6,224,1,0,0,0,6,226,1,0,0,0,6,228,1,0,0,0,6,230,1,0,0,0,6,232,1,0,0,0,6, + 234,1,0,0,0,6,236,1,0,0,0,6,238,1,0,0,0,6,240,1,0,0,0,6,242,1,0,0,0,6,244, + 1,0,0,0,6,246,1,0,0,0,6,248,1,0,0,0,6,250,1,0,0,0,6,252,1,0,0,0,6,254,1, + 0,0,0,6,256,1,0,0,0,6,258,1,0,0,0,6,260,1,0,0,0,6,262,1,0,0,0,6,264,1,0, + 0,0,6,266,1,0,0,0,6,268,1,0,0,0,6,270,1,0,0,0,6,272,1,0,0,0,6,274,1,0,0, + 0,6,276,1,0,0,0,6,278,1,0,0,0,6,280,1,0,0,0,6,282,1,0,0,0,6,284,1,0,0,0, + 6,286,1,0,0,0,6,288,1,0,0,0,6,290,1,0,0,0,6,292,1,0,0,0,6,296,1,0,0,0,6, + 298,1,0,0,0,6,300,1,0,0,0,6,302,1,0,0,0,7,304,1,0,0,0,7,306,1,0,0,0,7,308, + 1,0,0,0,7,310,1,0,0,0,7,312,1,0,0,0,7,314,1,0,0,0,7,316,1,0,0,0,7,318,1, + 0,0,0,7,322,1,0,0,0,7,324,1,0,0,0,7,326,1,0,0,0,7,328,1,0,0,0,7,330,1,0, + 0,0,7,332,1,0,0,0,8,334,1,0,0,0,8,336,1,0,0,0,8,338,1,0,0,0,8,340,1,0,0, + 0,8,342,1,0,0,0,9,344,1,0,0,0,9,346,1,0,0,0,9,348,1,0,0,0,9,350,1,0,0,0, + 9,352,1,0,0,0,9,354,1,0,0,0,9,356,1,0,0,0,9,358,1,0,0,0,9,360,1,0,0,0,9, + 362,1,0,0,0,9,364,1,0,0,0,9,366,1,0,0,0,9,368,1,0,0,0,10,370,1,0,0,0,10, + 372,1,0,0,0,10,374,1,0,0,0,10,376,1,0,0,0,10,378,1,0,0,0,10,380,1,0,0,0, + 10,382,1,0,0,0,10,384,1,0,0,0,10,386,1,0,0,0,10,388,1,0,0,0,11,390,1,0, + 0,0,11,392,1,0,0,0,11,394,1,0,0,0,11,396,1,0,0,0,11,398,1,0,0,0,11,400, + 1,0,0,0,11,402,1,0,0,0,12,404,1,0,0,0,12,406,1,0,0,0,12,408,1,0,0,0,12, + 410,1,0,0,0,12,412,1,0,0,0,12,414,1,0,0,0,12,416,1,0,0,0,12,418,1,0,0,0, + 12,420,1,0,0,0,12,422,1,0,0,0,12,424,1,0,0,0,13,426,1,0,0,0,13,428,1,0, + 0,0,13,430,1,0,0,0,13,432,1,0,0,0,13,434,1,0,0,0,13,436,1,0,0,0,13,438, + 1,0,0,0,13,444,1,0,0,0,13,446,1,0,0,0,13,448,1,0,0,0,13,450,1,0,0,0,14, + 452,1,0,0,0,14,454,1,0,0,0,14,456,1,0,0,0,14,458,1,0,0,0,14,460,1,0,0,0, + 14,462,1,0,0,0,14,464,1,0,0,0,14,466,1,0,0,0,14,468,1,0,0,0,14,470,1,0, + 0,0,14,472,1,0,0,0,14,474,1,0,0,0,14,476,1,0,0,0,15,478,1,0,0,0,15,480, + 1,0,0,0,15,482,1,0,0,0,15,484,1,0,0,0,15,486,1,0,0,0,16,488,1,0,0,0,18, + 505,1,0,0,0,20,521,1,0,0,0,22,527,1,0,0,0,24,543,1,0,0,0,26,552,1,0,0,0, + 28,562,1,0,0,0,30,572,1,0,0,0,32,579,1,0,0,0,34,586,1,0,0,0,36,594,1,0, + 0,0,38,600,1,0,0,0,40,607,1,0,0,0,42,615,1,0,0,0,44,623,1,0,0,0,46,638, + 1,0,0,0,48,648,1,0,0,0,50,655,1,0,0,0,52,661,1,0,0,0,54,669,1,0,0,0,56, + 678,1,0,0,0,58,686,1,0,0,0,60,694,1,0,0,0,62,703,1,0,0,0,64,715,1,0,0,0, + 66,727,1,0,0,0,68,734,1,0,0,0,70,741,1,0,0,0,72,753,1,0,0,0,74,760,1,0, + 0,0,76,769,1,0,0,0,78,777,1,0,0,0,80,783,1,0,0,0,82,788,1,0,0,0,84,792, + 1,0,0,0,86,796,1,0,0,0,88,800,1,0,0,0,90,804,1,0,0,0,92,808,1,0,0,0,94, + 812,1,0,0,0,96,816,1,0,0,0,98,820,1,0,0,0,100,824,1,0,0,0,102,829,1,0,0, + 0,104,834,1,0,0,0,106,839,1,0,0,0,108,844,1,0,0,0,110,853,1,0,0,0,112,860, + 1,0,0,0,114,864,1,0,0,0,116,868,1,0,0,0,118,872,1,0,0,0,120,876,1,0,0,0, + 122,882,1,0,0,0,124,886,1,0,0,0,126,890,1,0,0,0,128,894,1,0,0,0,130,898, + 1,0,0,0,132,902,1,0,0,0,134,906,1,0,0,0,136,910,1,0,0,0,138,914,1,0,0,0, + 140,918,1,0,0,0,142,922,1,0,0,0,144,926,1,0,0,0,146,930,1,0,0,0,148,934, + 1,0,0,0,150,939,1,0,0,0,152,948,1,0,0,0,154,952,1,0,0,0,156,956,1,0,0,0, + 158,960,1,0,0,0,160,964,1,0,0,0,162,969,1,0,0,0,164,974,1,0,0,0,166,978, + 1,0,0,0,168,982,1,0,0,0,170,986,1,0,0,0,172,990,1,0,0,0,174,992,1,0,0,0, + 176,994,1,0,0,0,178,997,1,0,0,0,180,999,1,0,0,0,182,1008,1,0,0,0,184,1010, + 1,0,0,0,186,1015,1,0,0,0,188,1017,1,0,0,0,190,1022,1,0,0,0,192,1053,1,0, + 0,0,194,1056,1,0,0,0,196,1102,1,0,0,0,198,1104,1,0,0,0,200,1108,1,0,0,0, + 202,1111,1,0,0,0,204,1115,1,0,0,0,206,1117,1,0,0,0,208,1120,1,0,0,0,210, + 1123,1,0,0,0,212,1125,1,0,0,0,214,1127,1,0,0,0,216,1132,1,0,0,0,218,1134, + 1,0,0,0,220,1140,1,0,0,0,222,1146,1,0,0,0,224,1149,1,0,0,0,226,1152,1,0, + 0,0,228,1157,1,0,0,0,230,1162,1,0,0,0,232,1166,1,0,0,0,234,1171,1,0,0,0, + 236,1177,1,0,0,0,238,1180,1,0,0,0,240,1183,1,0,0,0,242,1185,1,0,0,0,244, + 1191,1,0,0,0,246,1196,1,0,0,0,248,1201,1,0,0,0,250,1204,1,0,0,0,252,1207, + 1,0,0,0,254,1210,1,0,0,0,256,1212,1,0,0,0,258,1215,1,0,0,0,260,1217,1,0, + 0,0,262,1220,1,0,0,0,264,1222,1,0,0,0,266,1224,1,0,0,0,268,1226,1,0,0,0, + 270,1228,1,0,0,0,272,1230,1,0,0,0,274,1232,1,0,0,0,276,1234,1,0,0,0,278, + 1237,1,0,0,0,280,1258,1,0,0,0,282,1277,1,0,0,0,284,1279,1,0,0,0,286,1284, + 1,0,0,0,288,1289,1,0,0,0,290,1294,1,0,0,0,292,1315,1,0,0,0,294,1317,1,0, + 0,0,296,1325,1,0,0,0,298,1327,1,0,0,0,300,1331,1,0,0,0,302,1335,1,0,0,0, + 304,1339,1,0,0,0,306,1344,1,0,0,0,308,1348,1,0,0,0,310,1352,1,0,0,0,312, + 1356,1,0,0,0,314,1361,1,0,0,0,316,1365,1,0,0,0,318,1369,1,0,0,0,320,1381, + 1,0,0,0,322,1384,1,0,0,0,324,1388,1,0,0,0,326,1392,1,0,0,0,328,1396,1,0, + 0,0,330,1400,1,0,0,0,332,1404,1,0,0,0,334,1408,1,0,0,0,336,1413,1,0,0,0, + 338,1418,1,0,0,0,340,1422,1,0,0,0,342,1426,1,0,0,0,344,1430,1,0,0,0,346, + 1435,1,0,0,0,348,1440,1,0,0,0,350,1444,1,0,0,0,352,1450,1,0,0,0,354,1459, + 1,0,0,0,356,1463,1,0,0,0,358,1467,1,0,0,0,360,1471,1,0,0,0,362,1475,1,0, + 0,0,364,1479,1,0,0,0,366,1483,1,0,0,0,368,1487,1,0,0,0,370,1491,1,0,0,0, + 372,1496,1,0,0,0,374,1500,1,0,0,0,376,1504,1,0,0,0,378,1508,1,0,0,0,380, + 1513,1,0,0,0,382,1517,1,0,0,0,384,1521,1,0,0,0,386,1525,1,0,0,0,388,1529, + 1,0,0,0,390,1533,1,0,0,0,392,1539,1,0,0,0,394,1543,1,0,0,0,396,1547,1,0, + 0,0,398,1551,1,0,0,0,400,1555,1,0,0,0,402,1559,1,0,0,0,404,1563,1,0,0,0, + 406,1568,1,0,0,0,408,1572,1,0,0,0,410,1576,1,0,0,0,412,1580,1,0,0,0,414, + 1584,1,0,0,0,416,1588,1,0,0,0,418,1592,1,0,0,0,420,1596,1,0,0,0,422,1600, + 1,0,0,0,424,1604,1,0,0,0,426,1608,1,0,0,0,428,1613,1,0,0,0,430,1617,1,0, + 0,0,432,1621,1,0,0,0,434,1625,1,0,0,0,436,1629,1,0,0,0,438,1633,1,0,0,0, + 440,1641,1,0,0,0,442,1662,1,0,0,0,444,1666,1,0,0,0,446,1670,1,0,0,0,448, + 1674,1,0,0,0,450,1678,1,0,0,0,452,1682,1,0,0,0,454,1687,1,0,0,0,456,1691, + 1,0,0,0,458,1695,1,0,0,0,460,1699,1,0,0,0,462,1703,1,0,0,0,464,1707,1,0, + 0,0,466,1711,1,0,0,0,468,1715,1,0,0,0,470,1719,1,0,0,0,472,1723,1,0,0,0, + 474,1727,1,0,0,0,476,1731,1,0,0,0,478,1735,1,0,0,0,480,1740,1,0,0,0,482, + 1745,1,0,0,0,484,1749,1,0,0,0,486,1753,1,0,0,0,488,489,5,47,0,0,489,490, + 5,47,0,0,490,494,1,0,0,0,491,493,8,0,0,0,492,491,1,0,0,0,493,496,1,0,0, + 0,494,492,1,0,0,0,494,495,1,0,0,0,495,498,1,0,0,0,496,494,1,0,0,0,497,499, + 5,13,0,0,498,497,1,0,0,0,498,499,1,0,0,0,499,501,1,0,0,0,500,502,5,10,0, + 0,501,500,1,0,0,0,501,502,1,0,0,0,502,503,1,0,0,0,503,504,6,0,0,0,504,17, + 1,0,0,0,505,506,5,47,0,0,506,507,5,42,0,0,507,512,1,0,0,0,508,511,3,18, + 1,0,509,511,9,0,0,0,510,508,1,0,0,0,510,509,1,0,0,0,511,514,1,0,0,0,512, + 513,1,0,0,0,512,510,1,0,0,0,513,515,1,0,0,0,514,512,1,0,0,0,515,516,5,42, + 0,0,516,517,5,47,0,0,517,518,1,0,0,0,518,519,6,1,0,0,519,19,1,0,0,0,520, + 522,7,1,0,0,521,520,1,0,0,0,522,523,1,0,0,0,523,521,1,0,0,0,523,524,1,0, + 0,0,524,525,1,0,0,0,525,526,6,2,0,0,526,21,1,0,0,0,527,528,4,3,0,0,528, + 529,7,2,0,0,529,530,7,3,0,0,530,531,7,4,0,0,531,532,7,5,0,0,532,533,7,6, + 0,0,533,534,7,7,0,0,534,535,5,95,0,0,535,536,7,8,0,0,536,537,7,9,0,0,537, + 538,7,10,0,0,538,539,7,5,0,0,539,540,7,11,0,0,540,541,1,0,0,0,541,542,6, + 3,1,0,542,23,1,0,0,0,543,544,7,7,0,0,544,545,7,5,0,0,545,546,7,12,0,0,546, + 547,7,10,0,0,547,548,7,2,0,0,548,549,7,3,0,0,549,550,1,0,0,0,550,551,6, + 4,2,0,551,25,1,0,0,0,552,553,7,7,0,0,553,554,7,13,0,0,554,555,7,8,0,0,555, + 556,7,14,0,0,556,557,7,4,0,0,557,558,7,10,0,0,558,559,7,5,0,0,559,560,1, + 0,0,0,560,561,6,5,3,0,561,27,1,0,0,0,562,563,7,15,0,0,563,564,7,10,0,0, + 564,565,7,16,0,0,565,566,7,16,0,0,566,567,7,7,0,0,567,568,7,2,0,0,568,569, + 7,11,0,0,569,570,1,0,0,0,570,571,6,6,4,0,571,29,1,0,0,0,572,573,7,7,0,0, + 573,574,7,17,0,0,574,575,7,4,0,0,575,576,7,14,0,0,576,577,1,0,0,0,577,578, + 6,7,4,0,578,31,1,0,0,0,579,580,7,6,0,0,580,581,7,12,0,0,581,582,7,9,0,0, + 582,583,7,18,0,0,583,584,1,0,0,0,584,585,6,8,4,0,585,33,1,0,0,0,586,587, + 7,14,0,0,587,588,7,10,0,0,588,589,7,19,0,0,589,590,7,10,0,0,590,591,7,11, + 0,0,591,592,1,0,0,0,592,593,6,9,4,0,593,35,1,0,0,0,594,595,7,12,0,0,595, + 596,7,9,0,0,596,597,7,20,0,0,597,598,1,0,0,0,598,599,6,10,4,0,599,37,1, + 0,0,0,600,601,7,16,0,0,601,602,7,9,0,0,602,603,7,12,0,0,603,604,7,11,0, + 0,604,605,1,0,0,0,605,606,6,11,4,0,606,39,1,0,0,0,607,608,7,16,0,0,608, + 609,7,11,0,0,609,610,7,4,0,0,610,611,7,11,0,0,611,612,7,16,0,0,612,613, + 1,0,0,0,613,614,6,12,4,0,614,41,1,0,0,0,615,616,7,20,0,0,616,617,7,3,0, + 0,617,618,7,7,0,0,618,619,7,12,0,0,619,620,7,7,0,0,620,621,1,0,0,0,621, + 622,6,13,4,0,622,43,1,0,0,0,623,624,4,14,1,0,624,625,7,10,0,0,625,626,7, + 5,0,0,626,627,7,14,0,0,627,628,7,10,0,0,628,629,7,5,0,0,629,630,7,7,0,0, + 630,631,7,16,0,0,631,632,7,11,0,0,632,633,7,4,0,0,633,634,7,11,0,0,634, + 635,7,16,0,0,635,636,1,0,0,0,636,637,6,14,4,0,637,45,1,0,0,0,638,639,4, + 15,2,0,639,640,7,12,0,0,640,641,7,7,0,0,641,642,7,12,0,0,642,643,7,4,0, + 0,643,644,7,5,0,0,644,645,7,18,0,0,645,646,1,0,0,0,646,647,6,15,4,0,647, + 47,1,0,0,0,648,649,7,21,0,0,649,650,7,12,0,0,650,651,7,9,0,0,651,652,7, + 19,0,0,652,653,1,0,0,0,653,654,6,16,5,0,654,49,1,0,0,0,655,656,4,17,3,0, + 656,657,7,11,0,0,657,658,7,16,0,0,658,659,1,0,0,0,659,660,6,17,5,0,660, + 51,1,0,0,0,661,662,4,18,4,0,662,663,7,21,0,0,663,664,7,9,0,0,664,665,7, + 12,0,0,665,666,7,18,0,0,666,667,1,0,0,0,667,668,6,18,6,0,668,53,1,0,0,0, + 669,670,7,14,0,0,670,671,7,9,0,0,671,672,7,9,0,0,672,673,7,18,0,0,673,674, + 7,22,0,0,674,675,7,8,0,0,675,676,1,0,0,0,676,677,6,19,7,0,677,55,1,0,0, + 0,678,679,4,20,5,0,679,680,7,21,0,0,680,681,7,22,0,0,681,682,7,14,0,0,682, + 683,7,14,0,0,683,684,1,0,0,0,684,685,6,20,7,0,685,57,1,0,0,0,686,687,4, + 21,6,0,687,688,7,14,0,0,688,689,7,7,0,0,689,690,7,21,0,0,690,691,7,11,0, + 0,691,692,1,0,0,0,692,693,6,21,7,0,693,59,1,0,0,0,694,695,4,22,7,0,695, + 696,7,12,0,0,696,697,7,10,0,0,697,698,7,6,0,0,698,699,7,3,0,0,699,700,7, + 11,0,0,700,701,1,0,0,0,701,702,6,22,7,0,702,61,1,0,0,0,703,704,4,23,8,0, + 704,705,7,14,0,0,705,706,7,9,0,0,706,707,7,9,0,0,707,708,7,18,0,0,708,709, + 7,22,0,0,709,710,7,8,0,0,710,711,5,95,0,0,711,712,5,128020,0,0,712,713, + 1,0,0,0,713,714,6,23,8,0,714,63,1,0,0,0,715,716,7,19,0,0,716,717,7,17,0, + 0,717,718,5,95,0,0,718,719,7,7,0,0,719,720,7,13,0,0,720,721,7,8,0,0,721, + 722,7,4,0,0,722,723,7,5,0,0,723,724,7,15,0,0,724,725,1,0,0,0,725,726,6, + 24,9,0,726,65,1,0,0,0,727,728,7,15,0,0,728,729,7,12,0,0,729,730,7,9,0,0, + 730,731,7,8,0,0,731,732,1,0,0,0,732,733,6,25,10,0,733,67,1,0,0,0,734,735, + 7,18,0,0,735,736,7,7,0,0,736,737,7,7,0,0,737,738,7,8,0,0,738,739,1,0,0, + 0,739,740,6,26,10,0,740,69,1,0,0,0,741,742,4,27,9,0,742,743,7,10,0,0,743, + 744,7,5,0,0,744,745,7,16,0,0,745,746,7,10,0,0,746,747,7,16,0,0,747,748, + 7,11,0,0,748,749,5,95,0,0,749,750,5,128020,0,0,750,751,1,0,0,0,751,752, + 6,27,10,0,752,71,1,0,0,0,753,754,4,28,10,0,754,755,7,12,0,0,755,756,7,12, + 0,0,756,757,7,21,0,0,757,758,1,0,0,0,758,759,6,28,4,0,759,73,1,0,0,0,760, + 761,7,12,0,0,761,762,7,7,0,0,762,763,7,5,0,0,763,764,7,4,0,0,764,765,7, + 19,0,0,765,766,7,7,0,0,766,767,1,0,0,0,767,768,6,29,11,0,768,75,1,0,0,0, + 769,770,7,16,0,0,770,771,7,3,0,0,771,772,7,9,0,0,772,773,7,20,0,0,773,774, + 1,0,0,0,774,775,6,30,12,0,775,77,1,0,0,0,776,778,8,23,0,0,777,776,1,0,0, + 0,778,779,1,0,0,0,779,777,1,0,0,0,779,780,1,0,0,0,780,781,1,0,0,0,781,782, + 6,31,4,0,782,79,1,0,0,0,783,784,3,170,77,0,784,785,1,0,0,0,785,786,6,32, + 13,0,786,787,6,32,14,0,787,81,1,0,0,0,788,789,3,236,110,0,789,790,1,0,0, + 0,790,791,6,33,15,0,791,83,1,0,0,0,792,793,3,200,92,0,793,794,1,0,0,0,794, + 795,6,34,16,0,795,85,1,0,0,0,796,797,3,216,100,0,797,798,1,0,0,0,798,799, + 6,35,17,0,799,87,1,0,0,0,800,801,3,212,98,0,801,802,1,0,0,0,802,803,6,36, + 18,0,803,89,1,0,0,0,804,805,3,296,140,0,805,806,1,0,0,0,806,807,6,37,19, + 0,807,91,1,0,0,0,808,809,3,292,138,0,809,810,1,0,0,0,810,811,6,38,20,0, + 811,93,1,0,0,0,812,813,3,16,0,0,813,814,1,0,0,0,814,815,6,39,0,0,815,95, + 1,0,0,0,816,817,3,18,1,0,817,818,1,0,0,0,818,819,6,40,0,0,819,97,1,0,0, + 0,820,821,3,20,2,0,821,822,1,0,0,0,822,823,6,41,0,0,823,99,1,0,0,0,824, + 825,3,170,77,0,825,826,1,0,0,0,826,827,6,42,13,0,827,828,6,42,14,0,828, + 101,1,0,0,0,829,830,3,284,134,0,830,831,1,0,0,0,831,832,6,43,21,0,832,833, + 6,43,22,0,833,103,1,0,0,0,834,835,3,236,110,0,835,836,1,0,0,0,836,837,6, + 44,15,0,837,838,6,44,23,0,838,105,1,0,0,0,839,840,3,246,115,0,840,841,1, + 0,0,0,841,842,6,45,24,0,842,843,6,45,23,0,843,107,1,0,0,0,844,845,8,24, + 0,0,845,109,1,0,0,0,846,848,3,108,46,0,847,846,1,0,0,0,848,849,1,0,0,0, + 849,847,1,0,0,0,849,850,1,0,0,0,850,851,1,0,0,0,851,852,3,210,97,0,852, + 854,1,0,0,0,853,847,1,0,0,0,853,854,1,0,0,0,854,856,1,0,0,0,855,857,3,108, + 46,0,856,855,1,0,0,0,857,858,1,0,0,0,858,856,1,0,0,0,858,859,1,0,0,0,859, + 111,1,0,0,0,860,861,3,110,47,0,861,862,1,0,0,0,862,863,6,48,25,0,863,113, + 1,0,0,0,864,865,3,16,0,0,865,866,1,0,0,0,866,867,6,49,0,0,867,115,1,0,0, + 0,868,869,3,18,1,0,869,870,1,0,0,0,870,871,6,50,0,0,871,117,1,0,0,0,872, + 873,3,20,2,0,873,874,1,0,0,0,874,875,6,51,0,0,875,119,1,0,0,0,876,877,3, + 170,77,0,877,878,1,0,0,0,878,879,6,52,13,0,879,880,6,52,14,0,880,881,6, + 52,14,0,881,121,1,0,0,0,882,883,3,204,94,0,883,884,1,0,0,0,884,885,6,53, + 26,0,885,123,1,0,0,0,886,887,3,212,98,0,887,888,1,0,0,0,888,889,6,54,18, + 0,889,125,1,0,0,0,890,891,3,216,100,0,891,892,1,0,0,0,892,893,6,55,17,0, + 893,127,1,0,0,0,894,895,3,246,115,0,895,896,1,0,0,0,896,897,6,56,24,0,897, + 129,1,0,0,0,898,899,3,444,214,0,899,900,1,0,0,0,900,901,6,57,27,0,901,131, + 1,0,0,0,902,903,3,296,140,0,903,904,1,0,0,0,904,905,6,58,19,0,905,133,1, + 0,0,0,906,907,3,240,112,0,907,908,1,0,0,0,908,909,6,59,28,0,909,135,1,0, + 0,0,910,911,3,280,132,0,911,912,1,0,0,0,912,913,6,60,29,0,913,137,1,0,0, + 0,914,915,3,276,130,0,915,916,1,0,0,0,916,917,6,61,30,0,917,139,1,0,0,0, + 918,919,3,282,133,0,919,920,1,0,0,0,920,921,6,62,31,0,921,141,1,0,0,0,922, + 923,3,16,0,0,923,924,1,0,0,0,924,925,6,63,0,0,925,143,1,0,0,0,926,927,3, + 18,1,0,927,928,1,0,0,0,928,929,6,64,0,0,929,145,1,0,0,0,930,931,3,20,2, + 0,931,932,1,0,0,0,932,933,6,65,0,0,933,147,1,0,0,0,934,935,3,286,135,0, + 935,936,1,0,0,0,936,937,6,66,32,0,937,938,6,66,14,0,938,149,1,0,0,0,939, + 940,3,210,97,0,940,941,1,0,0,0,941,942,6,67,33,0,942,151,1,0,0,0,943,949, + 3,182,83,0,944,949,3,172,78,0,945,949,3,216,100,0,946,949,3,174,79,0,947, + 949,3,188,86,0,948,943,1,0,0,0,948,944,1,0,0,0,948,945,1,0,0,0,948,946, + 1,0,0,0,948,947,1,0,0,0,949,950,1,0,0,0,950,948,1,0,0,0,950,951,1,0,0,0, + 951,153,1,0,0,0,952,953,3,16,0,0,953,954,1,0,0,0,954,955,6,69,0,0,955,155, + 1,0,0,0,956,957,3,18,1,0,957,958,1,0,0,0,958,959,6,70,0,0,959,157,1,0,0, + 0,960,961,3,20,2,0,961,962,1,0,0,0,962,963,6,71,0,0,963,159,1,0,0,0,964, + 965,3,284,134,0,965,966,1,0,0,0,966,967,6,72,21,0,967,968,6,72,34,0,968, + 161,1,0,0,0,969,970,3,170,77,0,970,971,1,0,0,0,971,972,6,73,13,0,972,973, + 6,73,14,0,973,163,1,0,0,0,974,975,3,20,2,0,975,976,1,0,0,0,976,977,6,74, + 0,0,977,165,1,0,0,0,978,979,3,16,0,0,979,980,1,0,0,0,980,981,6,75,0,0,981, + 167,1,0,0,0,982,983,3,18,1,0,983,984,1,0,0,0,984,985,6,76,0,0,985,169,1, + 0,0,0,986,987,5,124,0,0,987,988,1,0,0,0,988,989,6,77,14,0,989,171,1,0,0, + 0,990,991,7,25,0,0,991,173,1,0,0,0,992,993,7,26,0,0,993,175,1,0,0,0,994, + 995,5,92,0,0,995,996,7,27,0,0,996,177,1,0,0,0,997,998,8,28,0,0,998,179, + 1,0,0,0,999,1001,7,7,0,0,1000,1002,7,29,0,0,1001,1000,1,0,0,0,1001,1002, + 1,0,0,0,1002,1004,1,0,0,0,1003,1005,3,172,78,0,1004,1003,1,0,0,0,1005,1006, + 1,0,0,0,1006,1004,1,0,0,0,1006,1007,1,0,0,0,1007,181,1,0,0,0,1008,1009, + 5,64,0,0,1009,183,1,0,0,0,1010,1011,5,96,0,0,1011,185,1,0,0,0,1012,1016, + 8,30,0,0,1013,1014,5,96,0,0,1014,1016,5,96,0,0,1015,1012,1,0,0,0,1015,1013, + 1,0,0,0,1016,187,1,0,0,0,1017,1018,5,95,0,0,1018,189,1,0,0,0,1019,1023, + 3,174,79,0,1020,1023,3,172,78,0,1021,1023,3,188,86,0,1022,1019,1,0,0,0, + 1022,1020,1,0,0,0,1022,1021,1,0,0,0,1023,191,1,0,0,0,1024,1029,5,34,0,0, + 1025,1028,3,176,80,0,1026,1028,3,178,81,0,1027,1025,1,0,0,0,1027,1026,1, + 0,0,0,1028,1031,1,0,0,0,1029,1027,1,0,0,0,1029,1030,1,0,0,0,1030,1032,1, + 0,0,0,1031,1029,1,0,0,0,1032,1054,5,34,0,0,1033,1034,5,34,0,0,1034,1035, + 5,34,0,0,1035,1036,5,34,0,0,1036,1040,1,0,0,0,1037,1039,8,0,0,0,1038,1037, + 1,0,0,0,1039,1042,1,0,0,0,1040,1041,1,0,0,0,1040,1038,1,0,0,0,1041,1043, + 1,0,0,0,1042,1040,1,0,0,0,1043,1044,5,34,0,0,1044,1045,5,34,0,0,1045,1046, + 5,34,0,0,1046,1048,1,0,0,0,1047,1049,5,34,0,0,1048,1047,1,0,0,0,1048,1049, + 1,0,0,0,1049,1051,1,0,0,0,1050,1052,5,34,0,0,1051,1050,1,0,0,0,1051,1052, + 1,0,0,0,1052,1054,1,0,0,0,1053,1024,1,0,0,0,1053,1033,1,0,0,0,1054,193, + 1,0,0,0,1055,1057,3,172,78,0,1056,1055,1,0,0,0,1057,1058,1,0,0,0,1058,1056, + 1,0,0,0,1058,1059,1,0,0,0,1059,195,1,0,0,0,1060,1062,3,172,78,0,1061,1060, + 1,0,0,0,1062,1063,1,0,0,0,1063,1061,1,0,0,0,1063,1064,1,0,0,0,1064,1065, + 1,0,0,0,1065,1069,3,216,100,0,1066,1068,3,172,78,0,1067,1066,1,0,0,0,1068, + 1071,1,0,0,0,1069,1067,1,0,0,0,1069,1070,1,0,0,0,1070,1103,1,0,0,0,1071, + 1069,1,0,0,0,1072,1074,3,216,100,0,1073,1075,3,172,78,0,1074,1073,1,0,0, + 0,1075,1076,1,0,0,0,1076,1074,1,0,0,0,1076,1077,1,0,0,0,1077,1103,1,0,0, + 0,1078,1080,3,172,78,0,1079,1078,1,0,0,0,1080,1081,1,0,0,0,1081,1079,1, + 0,0,0,1081,1082,1,0,0,0,1082,1090,1,0,0,0,1083,1087,3,216,100,0,1084,1086, + 3,172,78,0,1085,1084,1,0,0,0,1086,1089,1,0,0,0,1087,1085,1,0,0,0,1087,1088, + 1,0,0,0,1088,1091,1,0,0,0,1089,1087,1,0,0,0,1090,1083,1,0,0,0,1090,1091, + 1,0,0,0,1091,1092,1,0,0,0,1092,1093,3,180,82,0,1093,1103,1,0,0,0,1094,1096, + 3,216,100,0,1095,1097,3,172,78,0,1096,1095,1,0,0,0,1097,1098,1,0,0,0,1098, + 1096,1,0,0,0,1098,1099,1,0,0,0,1099,1100,1,0,0,0,1100,1101,3,180,82,0,1101, + 1103,1,0,0,0,1102,1061,1,0,0,0,1102,1072,1,0,0,0,1102,1079,1,0,0,0,1102, + 1094,1,0,0,0,1103,197,1,0,0,0,1104,1105,7,4,0,0,1105,1106,7,5,0,0,1106, + 1107,7,15,0,0,1107,199,1,0,0,0,1108,1109,7,4,0,0,1109,1110,7,16,0,0,1110, + 201,1,0,0,0,1111,1112,7,4,0,0,1112,1113,7,16,0,0,1113,1114,7,2,0,0,1114, + 203,1,0,0,0,1115,1116,5,61,0,0,1116,205,1,0,0,0,1117,1118,7,31,0,0,1118, + 1119,7,32,0,0,1119,207,1,0,0,0,1120,1121,5,58,0,0,1121,1122,5,58,0,0,1122, + 209,1,0,0,0,1123,1124,5,58,0,0,1124,211,1,0,0,0,1125,1126,5,44,0,0,1126, + 213,1,0,0,0,1127,1128,7,15,0,0,1128,1129,7,7,0,0,1129,1130,7,16,0,0,1130, + 1131,7,2,0,0,1131,215,1,0,0,0,1132,1133,5,46,0,0,1133,217,1,0,0,0,1134, + 1135,7,21,0,0,1135,1136,7,4,0,0,1136,1137,7,14,0,0,1137,1138,7,16,0,0,1138, + 1139,7,7,0,0,1139,219,1,0,0,0,1140,1141,7,21,0,0,1141,1142,7,10,0,0,1142, + 1143,7,12,0,0,1143,1144,7,16,0,0,1144,1145,7,11,0,0,1145,221,1,0,0,0,1146, + 1147,7,10,0,0,1147,1148,7,5,0,0,1148,223,1,0,0,0,1149,1150,7,10,0,0,1150, + 1151,7,16,0,0,1151,225,1,0,0,0,1152,1153,7,14,0,0,1153,1154,7,4,0,0,1154, + 1155,7,16,0,0,1155,1156,7,11,0,0,1156,227,1,0,0,0,1157,1158,7,14,0,0,1158, + 1159,7,10,0,0,1159,1160,7,18,0,0,1160,1161,7,7,0,0,1161,229,1,0,0,0,1162, + 1163,7,5,0,0,1163,1164,7,9,0,0,1164,1165,7,11,0,0,1165,231,1,0,0,0,1166, + 1167,7,5,0,0,1167,1168,7,22,0,0,1168,1169,7,14,0,0,1169,1170,7,14,0,0,1170, + 233,1,0,0,0,1171,1172,7,5,0,0,1172,1173,7,22,0,0,1173,1174,7,14,0,0,1174, + 1175,7,14,0,0,1175,1176,7,16,0,0,1176,235,1,0,0,0,1177,1178,7,9,0,0,1178, + 1179,7,5,0,0,1179,237,1,0,0,0,1180,1181,7,9,0,0,1181,1182,7,12,0,0,1182, + 239,1,0,0,0,1183,1184,5,63,0,0,1184,241,1,0,0,0,1185,1186,7,12,0,0,1186, + 1187,7,14,0,0,1187,1188,7,10,0,0,1188,1189,7,18,0,0,1189,1190,7,7,0,0,1190, + 243,1,0,0,0,1191,1192,7,11,0,0,1192,1193,7,12,0,0,1193,1194,7,22,0,0,1194, + 1195,7,7,0,0,1195,245,1,0,0,0,1196,1197,7,20,0,0,1197,1198,7,10,0,0,1198, + 1199,7,11,0,0,1199,1200,7,3,0,0,1200,247,1,0,0,0,1201,1202,5,61,0,0,1202, + 1203,5,61,0,0,1203,249,1,0,0,0,1204,1205,5,61,0,0,1205,1206,5,126,0,0,1206, + 251,1,0,0,0,1207,1208,5,33,0,0,1208,1209,5,61,0,0,1209,253,1,0,0,0,1210, + 1211,5,60,0,0,1211,255,1,0,0,0,1212,1213,5,60,0,0,1213,1214,5,61,0,0,1214, + 257,1,0,0,0,1215,1216,5,62,0,0,1216,259,1,0,0,0,1217,1218,5,62,0,0,1218, + 1219,5,61,0,0,1219,261,1,0,0,0,1220,1221,5,43,0,0,1221,263,1,0,0,0,1222, + 1223,5,45,0,0,1223,265,1,0,0,0,1224,1225,5,42,0,0,1225,267,1,0,0,0,1226, + 1227,5,47,0,0,1227,269,1,0,0,0,1228,1229,5,37,0,0,1229,271,1,0,0,0,1230, + 1231,5,123,0,0,1231,273,1,0,0,0,1232,1233,5,125,0,0,1233,275,1,0,0,0,1234, + 1235,5,63,0,0,1235,1236,5,63,0,0,1236,277,1,0,0,0,1237,1238,3,42,13,0,1238, + 1239,1,0,0,0,1239,1240,6,131,35,0,1240,279,1,0,0,0,1241,1244,3,240,112, + 0,1242,1245,3,174,79,0,1243,1245,3,188,86,0,1244,1242,1,0,0,0,1244,1243, + 1,0,0,0,1245,1249,1,0,0,0,1246,1248,3,190,87,0,1247,1246,1,0,0,0,1248,1251, + 1,0,0,0,1249,1247,1,0,0,0,1249,1250,1,0,0,0,1250,1259,1,0,0,0,1251,1249, + 1,0,0,0,1252,1254,3,240,112,0,1253,1255,3,172,78,0,1254,1253,1,0,0,0,1255, + 1256,1,0,0,0,1256,1254,1,0,0,0,1256,1257,1,0,0,0,1257,1259,1,0,0,0,1258, + 1241,1,0,0,0,1258,1252,1,0,0,0,1259,281,1,0,0,0,1260,1263,3,276,130,0,1261, + 1264,3,174,79,0,1262,1264,3,188,86,0,1263,1261,1,0,0,0,1263,1262,1,0,0, + 0,1264,1268,1,0,0,0,1265,1267,3,190,87,0,1266,1265,1,0,0,0,1267,1270,1, + 0,0,0,1268,1266,1,0,0,0,1268,1269,1,0,0,0,1269,1278,1,0,0,0,1270,1268,1, + 0,0,0,1271,1273,3,276,130,0,1272,1274,3,172,78,0,1273,1272,1,0,0,0,1274, + 1275,1,0,0,0,1275,1273,1,0,0,0,1275,1276,1,0,0,0,1276,1278,1,0,0,0,1277, + 1260,1,0,0,0,1277,1271,1,0,0,0,1278,283,1,0,0,0,1279,1280,5,91,0,0,1280, + 1281,1,0,0,0,1281,1282,6,134,4,0,1282,1283,6,134,4,0,1283,285,1,0,0,0,1284, + 1285,5,93,0,0,1285,1286,1,0,0,0,1286,1287,6,135,14,0,1287,1288,6,135,14, + 0,1288,287,1,0,0,0,1289,1290,5,40,0,0,1290,1291,1,0,0,0,1291,1292,6,136, + 4,0,1292,1293,6,136,4,0,1293,289,1,0,0,0,1294,1295,5,41,0,0,1295,1296,1, + 0,0,0,1296,1297,6,137,14,0,1297,1298,6,137,14,0,1298,291,1,0,0,0,1299,1303, + 3,174,79,0,1300,1302,3,190,87,0,1301,1300,1,0,0,0,1302,1305,1,0,0,0,1303, + 1301,1,0,0,0,1303,1304,1,0,0,0,1304,1316,1,0,0,0,1305,1303,1,0,0,0,1306, + 1309,3,188,86,0,1307,1309,3,182,83,0,1308,1306,1,0,0,0,1308,1307,1,0,0, + 0,1309,1311,1,0,0,0,1310,1312,3,190,87,0,1311,1310,1,0,0,0,1312,1313,1, + 0,0,0,1313,1311,1,0,0,0,1313,1314,1,0,0,0,1314,1316,1,0,0,0,1315,1299,1, + 0,0,0,1315,1308,1,0,0,0,1316,293,1,0,0,0,1317,1319,3,184,84,0,1318,1320, + 3,186,85,0,1319,1318,1,0,0,0,1320,1321,1,0,0,0,1321,1319,1,0,0,0,1321,1322, + 1,0,0,0,1322,1323,1,0,0,0,1323,1324,3,184,84,0,1324,295,1,0,0,0,1325,1326, + 3,294,139,0,1326,297,1,0,0,0,1327,1328,3,16,0,0,1328,1329,1,0,0,0,1329, + 1330,6,141,0,0,1330,299,1,0,0,0,1331,1332,3,18,1,0,1332,1333,1,0,0,0,1333, + 1334,6,142,0,0,1334,301,1,0,0,0,1335,1336,3,20,2,0,1336,1337,1,0,0,0,1337, + 1338,6,143,0,0,1338,303,1,0,0,0,1339,1340,3,170,77,0,1340,1341,1,0,0,0, + 1341,1342,6,144,13,0,1342,1343,6,144,14,0,1343,305,1,0,0,0,1344,1345,3, + 284,134,0,1345,1346,1,0,0,0,1346,1347,6,145,21,0,1347,307,1,0,0,0,1348, + 1349,3,286,135,0,1349,1350,1,0,0,0,1350,1351,6,146,32,0,1351,309,1,0,0, + 0,1352,1353,3,210,97,0,1353,1354,1,0,0,0,1354,1355,6,147,33,0,1355,311, + 1,0,0,0,1356,1357,4,148,11,0,1357,1358,3,208,96,0,1358,1359,1,0,0,0,1359, + 1360,6,148,36,0,1360,313,1,0,0,0,1361,1362,3,212,98,0,1362,1363,1,0,0,0, + 1363,1364,6,149,18,0,1364,315,1,0,0,0,1365,1366,3,204,94,0,1366,1367,1, + 0,0,0,1367,1368,6,150,26,0,1368,317,1,0,0,0,1369,1370,7,19,0,0,1370,1371, + 7,7,0,0,1371,1372,7,11,0,0,1372,1373,7,4,0,0,1373,1374,7,15,0,0,1374,1375, + 7,4,0,0,1375,1376,7,11,0,0,1376,1377,7,4,0,0,1377,319,1,0,0,0,1378,1382, + 8,33,0,0,1379,1380,5,47,0,0,1380,1382,8,34,0,0,1381,1378,1,0,0,0,1381,1379, + 1,0,0,0,1382,321,1,0,0,0,1383,1385,3,320,152,0,1384,1383,1,0,0,0,1385,1386, + 1,0,0,0,1386,1384,1,0,0,0,1386,1387,1,0,0,0,1387,323,1,0,0,0,1388,1389, + 3,322,153,0,1389,1390,1,0,0,0,1390,1391,6,154,37,0,1391,325,1,0,0,0,1392, + 1393,3,192,88,0,1393,1394,1,0,0,0,1394,1395,6,155,38,0,1395,327,1,0,0,0, + 1396,1397,3,16,0,0,1397,1398,1,0,0,0,1398,1399,6,156,0,0,1399,329,1,0,0, + 0,1400,1401,3,18,1,0,1401,1402,1,0,0,0,1402,1403,6,157,0,0,1403,331,1,0, + 0,0,1404,1405,3,20,2,0,1405,1406,1,0,0,0,1406,1407,6,158,0,0,1407,333,1, + 0,0,0,1408,1409,3,288,136,0,1409,1410,1,0,0,0,1410,1411,6,159,39,0,1411, + 1412,6,159,34,0,1412,335,1,0,0,0,1413,1414,3,170,77,0,1414,1415,1,0,0,0, + 1415,1416,6,160,13,0,1416,1417,6,160,14,0,1417,337,1,0,0,0,1418,1419,3, + 20,2,0,1419,1420,1,0,0,0,1420,1421,6,161,0,0,1421,339,1,0,0,0,1422,1423, + 3,16,0,0,1423,1424,1,0,0,0,1424,1425,6,162,0,0,1425,341,1,0,0,0,1426,1427, + 3,18,1,0,1427,1428,1,0,0,0,1428,1429,6,163,0,0,1429,343,1,0,0,0,1430,1431, + 3,170,77,0,1431,1432,1,0,0,0,1432,1433,6,164,13,0,1433,1434,6,164,14,0, + 1434,345,1,0,0,0,1435,1436,7,35,0,0,1436,1437,7,9,0,0,1437,1438,7,10,0, + 0,1438,1439,7,5,0,0,1439,347,1,0,0,0,1440,1441,3,200,92,0,1441,1442,1,0, + 0,0,1442,1443,6,166,16,0,1443,349,1,0,0,0,1444,1445,3,236,110,0,1445,1446, + 1,0,0,0,1446,1447,6,167,15,0,1447,1448,6,167,14,0,1448,1449,6,167,4,0,1449, + 351,1,0,0,0,1450,1451,7,22,0,0,1451,1452,7,16,0,0,1452,1453,7,10,0,0,1453, + 1454,7,5,0,0,1454,1455,7,6,0,0,1455,1456,1,0,0,0,1456,1457,6,168,14,0,1457, + 1458,6,168,4,0,1458,353,1,0,0,0,1459,1460,3,322,153,0,1460,1461,1,0,0,0, + 1461,1462,6,169,37,0,1462,355,1,0,0,0,1463,1464,3,192,88,0,1464,1465,1, + 0,0,0,1465,1466,6,170,38,0,1466,357,1,0,0,0,1467,1468,3,210,97,0,1468,1469, + 1,0,0,0,1469,1470,6,171,33,0,1470,359,1,0,0,0,1471,1472,3,292,138,0,1472, + 1473,1,0,0,0,1473,1474,6,172,20,0,1474,361,1,0,0,0,1475,1476,3,296,140, + 0,1476,1477,1,0,0,0,1477,1478,6,173,19,0,1478,363,1,0,0,0,1479,1480,3,16, + 0,0,1480,1481,1,0,0,0,1481,1482,6,174,0,0,1482,365,1,0,0,0,1483,1484,3, + 18,1,0,1484,1485,1,0,0,0,1485,1486,6,175,0,0,1486,367,1,0,0,0,1487,1488, + 3,20,2,0,1488,1489,1,0,0,0,1489,1490,6,176,0,0,1490,369,1,0,0,0,1491,1492, + 3,170,77,0,1492,1493,1,0,0,0,1493,1494,6,177,13,0,1494,1495,6,177,14,0, + 1495,371,1,0,0,0,1496,1497,3,210,97,0,1497,1498,1,0,0,0,1498,1499,6,178, + 33,0,1499,373,1,0,0,0,1500,1501,3,212,98,0,1501,1502,1,0,0,0,1502,1503, + 6,179,18,0,1503,375,1,0,0,0,1504,1505,3,216,100,0,1505,1506,1,0,0,0,1506, + 1507,6,180,17,0,1507,377,1,0,0,0,1508,1509,3,236,110,0,1509,1510,1,0,0, + 0,1510,1511,6,181,15,0,1511,1512,6,181,40,0,1512,379,1,0,0,0,1513,1514, + 3,322,153,0,1514,1515,1,0,0,0,1515,1516,6,182,37,0,1516,381,1,0,0,0,1517, + 1518,3,192,88,0,1518,1519,1,0,0,0,1519,1520,6,183,38,0,1520,383,1,0,0,0, + 1521,1522,3,16,0,0,1522,1523,1,0,0,0,1523,1524,6,184,0,0,1524,385,1,0,0, + 0,1525,1526,3,18,1,0,1526,1527,1,0,0,0,1527,1528,6,185,0,0,1528,387,1,0, + 0,0,1529,1530,3,20,2,0,1530,1531,1,0,0,0,1531,1532,6,186,0,0,1532,389,1, + 0,0,0,1533,1534,3,170,77,0,1534,1535,1,0,0,0,1535,1536,6,187,13,0,1536, + 1537,6,187,14,0,1537,1538,6,187,14,0,1538,391,1,0,0,0,1539,1540,3,212,98, + 0,1540,1541,1,0,0,0,1541,1542,6,188,18,0,1542,393,1,0,0,0,1543,1544,3,216, + 100,0,1544,1545,1,0,0,0,1545,1546,6,189,17,0,1546,395,1,0,0,0,1547,1548, + 3,444,214,0,1548,1549,1,0,0,0,1549,1550,6,190,27,0,1550,397,1,0,0,0,1551, + 1552,3,16,0,0,1552,1553,1,0,0,0,1553,1554,6,191,0,0,1554,399,1,0,0,0,1555, + 1556,3,18,1,0,1556,1557,1,0,0,0,1557,1558,6,192,0,0,1558,401,1,0,0,0,1559, + 1560,3,20,2,0,1560,1561,1,0,0,0,1561,1562,6,193,0,0,1562,403,1,0,0,0,1563, + 1564,3,170,77,0,1564,1565,1,0,0,0,1565,1566,6,194,13,0,1566,1567,6,194, + 14,0,1567,405,1,0,0,0,1568,1569,3,216,100,0,1569,1570,1,0,0,0,1570,1571, + 6,195,17,0,1571,407,1,0,0,0,1572,1573,3,240,112,0,1573,1574,1,0,0,0,1574, + 1575,6,196,28,0,1575,409,1,0,0,0,1576,1577,3,280,132,0,1577,1578,1,0,0, + 0,1578,1579,6,197,29,0,1579,411,1,0,0,0,1580,1581,3,276,130,0,1581,1582, + 1,0,0,0,1582,1583,6,198,30,0,1583,413,1,0,0,0,1584,1585,3,282,133,0,1585, + 1586,1,0,0,0,1586,1587,6,199,31,0,1587,415,1,0,0,0,1588,1589,3,296,140, + 0,1589,1590,1,0,0,0,1590,1591,6,200,19,0,1591,417,1,0,0,0,1592,1593,3,292, + 138,0,1593,1594,1,0,0,0,1594,1595,6,201,20,0,1595,419,1,0,0,0,1596,1597, + 3,16,0,0,1597,1598,1,0,0,0,1598,1599,6,202,0,0,1599,421,1,0,0,0,1600,1601, + 3,18,1,0,1601,1602,1,0,0,0,1602,1603,6,203,0,0,1603,423,1,0,0,0,1604,1605, + 3,20,2,0,1605,1606,1,0,0,0,1606,1607,6,204,0,0,1607,425,1,0,0,0,1608,1609, + 3,170,77,0,1609,1610,1,0,0,0,1610,1611,6,205,13,0,1611,1612,6,205,14,0, + 1612,427,1,0,0,0,1613,1614,3,216,100,0,1614,1615,1,0,0,0,1615,1616,6,206, + 17,0,1616,429,1,0,0,0,1617,1618,3,212,98,0,1618,1619,1,0,0,0,1619,1620, + 6,207,18,0,1620,431,1,0,0,0,1621,1622,3,240,112,0,1622,1623,1,0,0,0,1623, + 1624,6,208,28,0,1624,433,1,0,0,0,1625,1626,3,280,132,0,1626,1627,1,0,0, + 0,1627,1628,6,209,29,0,1628,435,1,0,0,0,1629,1630,3,276,130,0,1630,1631, + 1,0,0,0,1631,1632,6,210,30,0,1632,437,1,0,0,0,1633,1634,3,282,133,0,1634, + 1635,1,0,0,0,1635,1636,6,211,31,0,1636,439,1,0,0,0,1637,1642,3,174,79,0, + 1638,1642,3,172,78,0,1639,1642,3,188,86,0,1640,1642,3,266,125,0,1641,1637, + 1,0,0,0,1641,1638,1,0,0,0,1641,1639,1,0,0,0,1641,1640,1,0,0,0,1642,441, + 1,0,0,0,1643,1646,3,174,79,0,1644,1646,3,266,125,0,1645,1643,1,0,0,0,1645, + 1644,1,0,0,0,1646,1650,1,0,0,0,1647,1649,3,440,212,0,1648,1647,1,0,0,0, + 1649,1652,1,0,0,0,1650,1648,1,0,0,0,1650,1651,1,0,0,0,1651,1663,1,0,0,0, + 1652,1650,1,0,0,0,1653,1656,3,188,86,0,1654,1656,3,182,83,0,1655,1653,1, + 0,0,0,1655,1654,1,0,0,0,1656,1658,1,0,0,0,1657,1659,3,440,212,0,1658,1657, + 1,0,0,0,1659,1660,1,0,0,0,1660,1658,1,0,0,0,1660,1661,1,0,0,0,1661,1663, + 1,0,0,0,1662,1645,1,0,0,0,1662,1655,1,0,0,0,1663,443,1,0,0,0,1664,1667, + 3,442,213,0,1665,1667,3,294,139,0,1666,1664,1,0,0,0,1666,1665,1,0,0,0,1667, + 1668,1,0,0,0,1668,1666,1,0,0,0,1668,1669,1,0,0,0,1669,445,1,0,0,0,1670, + 1671,3,16,0,0,1671,1672,1,0,0,0,1672,1673,6,215,0,0,1673,447,1,0,0,0,1674, + 1675,3,18,1,0,1675,1676,1,0,0,0,1676,1677,6,216,0,0,1677,449,1,0,0,0,1678, + 1679,3,20,2,0,1679,1680,1,0,0,0,1680,1681,6,217,0,0,1681,451,1,0,0,0,1682, + 1683,3,170,77,0,1683,1684,1,0,0,0,1684,1685,6,218,13,0,1685,1686,6,218, + 14,0,1686,453,1,0,0,0,1687,1688,3,204,94,0,1688,1689,1,0,0,0,1689,1690, + 6,219,26,0,1690,455,1,0,0,0,1691,1692,3,212,98,0,1692,1693,1,0,0,0,1693, + 1694,6,220,18,0,1694,457,1,0,0,0,1695,1696,3,216,100,0,1696,1697,1,0,0, + 0,1697,1698,6,221,17,0,1698,459,1,0,0,0,1699,1700,3,240,112,0,1700,1701, + 1,0,0,0,1701,1702,6,222,28,0,1702,461,1,0,0,0,1703,1704,3,280,132,0,1704, + 1705,1,0,0,0,1705,1706,6,223,29,0,1706,463,1,0,0,0,1707,1708,3,276,130, + 0,1708,1709,1,0,0,0,1709,1710,6,224,30,0,1710,465,1,0,0,0,1711,1712,3,282, + 133,0,1712,1713,1,0,0,0,1713,1714,6,225,31,0,1714,467,1,0,0,0,1715,1716, + 3,200,92,0,1716,1717,1,0,0,0,1717,1718,6,226,16,0,1718,469,1,0,0,0,1719, + 1720,3,444,214,0,1720,1721,1,0,0,0,1721,1722,6,227,27,0,1722,471,1,0,0, + 0,1723,1724,3,16,0,0,1724,1725,1,0,0,0,1725,1726,6,228,0,0,1726,473,1,0, + 0,0,1727,1728,3,18,1,0,1728,1729,1,0,0,0,1729,1730,6,229,0,0,1730,475,1, + 0,0,0,1731,1732,3,20,2,0,1732,1733,1,0,0,0,1733,1734,6,230,0,0,1734,477, + 1,0,0,0,1735,1736,3,170,77,0,1736,1737,1,0,0,0,1737,1738,6,231,13,0,1738, + 1739,6,231,14,0,1739,479,1,0,0,0,1740,1741,7,10,0,0,1741,1742,7,5,0,0,1742, + 1743,7,21,0,0,1743,1744,7,9,0,0,1744,481,1,0,0,0,1745,1746,3,16,0,0,1746, + 1747,1,0,0,0,1747,1748,6,233,0,0,1748,483,1,0,0,0,1749,1750,3,18,1,0,1750, + 1751,1,0,0,0,1751,1752,6,234,0,0,1752,485,1,0,0,0,1753,1754,3,20,2,0,1754, + 1755,1,0,0,0,1755,1756,6,235,0,0,1756,487,1,0,0,0,70,0,1,2,3,4,5,6,7,8, + 9,10,11,12,13,14,15,494,498,501,510,512,523,779,849,853,858,948,950,1001, + 1006,1015,1022,1027,1029,1040,1048,1051,1053,1058,1063,1069,1076,1081,1087, + 1090,1098,1102,1244,1249,1256,1258,1263,1268,1275,1277,1303,1308,1313,1315, + 1321,1381,1386,1641,1645,1650,1655,1660,1662,1666,1668,41,0,1,0,5,1,0,5, + 2,0,5,5,0,5,6,0,5,7,0,5,8,0,5,9,0,5,10,0,5,12,0,5,13,0,5,14,0,5,15,0,7, + 50,0,4,0,0,7,73,0,7,55,0,7,63,0,7,61,0,7,101,0,7,100,0,7,96,0,5,4,0,5,3, + 0,7,78,0,7,36,0,7,57,0,7,127,0,7,75,0,7,94,0,7,93,0,7,95,0,7,97,0,7,60, + 0,5,0,0,7,14,0,7,59,0,7,106,0,7,51,0,7,98,0,5,11,0]; private static __ATN: ATN; public static get _ATN(): ATN { diff --git a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.g4 b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.g4 index 408ced1895e45..6164c39b7a63b 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.g4 +++ b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.g4 @@ -40,7 +40,7 @@ sourceCommand | rowCommand | showCommand // in development - | {this.isDevVersion()}? metricsCommand + | {this.isDevVersion()}? timeSeriesCommand ; processingCommand @@ -63,6 +63,7 @@ processingCommand | {this.isDevVersion()}? changePointCommand | {this.isDevVersion()}? insistCommand | {this.isDevVersion()}? forkCommand + | {this.isDevVersion()}? rerankCommand | {this.isDevVersion()}? rrfCommand ; @@ -90,8 +91,8 @@ fromCommand : FROM indexPatternAndMetadataFields ; -metricsCommand - : DEV_METRICS indexPatternAndMetadataFields +timeSeriesCommand + : DEV_TIME_SERIES indexPatternAndMetadataFields ; indexPatternAndMetadataFields: @@ -289,4 +290,8 @@ forkSubQueryProcessingCommand rrfCommand : DEV_RRF - ; \ No newline at end of file + ; + +rerankCommand + : DEV_RERANK queryText=constant ON fields WITH inferenceId=identifierOrParameter + ; \ No newline at end of file diff --git a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.interp b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.interp index d35df04f6fe34..2552f1cd2dbbc 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.interp +++ b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.interp @@ -15,6 +15,7 @@ null 'stats' 'where' null +null 'from' null null @@ -34,8 +35,6 @@ null null null null -'on' -'with' null null null @@ -54,10 +53,11 @@ null null null null -'by' 'and' +'as' 'asc' '=' +'by' '::' ':' ',' @@ -72,10 +72,12 @@ null 'not' 'null' 'nulls' +'on' 'or' '?' 'rlike' 'true' +'with' '==' '=~' '!=' @@ -128,7 +130,6 @@ null null null null -'as' null null null @@ -154,8 +155,9 @@ SORT STATS WHERE DEV_INLINESTATS +DEV_RERANK FROM -DEV_METRICS +DEV_TIME_SERIES DEV_FORK JOIN_LOOKUP DEV_JOIN_FULL @@ -173,8 +175,6 @@ UNKNOWN_CMD CHANGE_POINT_LINE_COMMENT CHANGE_POINT_MULTILINE_COMMENT CHANGE_POINT_WS -ON -WITH ENRICH_POLICY_NAME ENRICH_LINE_COMMENT ENRICH_MULTILINE_COMMENT @@ -193,10 +193,11 @@ PIPE QUOTED_STRING INTEGER_LITERAL DECIMAL_LITERAL -BY AND +AS ASC ASSIGN +BY CAST_OP COLON COMMA @@ -211,10 +212,12 @@ LIKE NOT NULL NULLS +ON OR PARAM RLIKE TRUE +WITH EQ CIEQ NEQ @@ -267,7 +270,6 @@ ID_PATTERN PROJECT_LINE_COMMENT PROJECT_MULTILINE_COMMENT PROJECT_WS -AS RENAME_LINE_COMMENT RENAME_MULTILINE_COMMENT RENAME_WS @@ -287,7 +289,7 @@ rowCommand fields field fromCommand -metricsCommand +timeSeriesCommand indexPatternAndMetadataFields indexPattern clusterString @@ -333,6 +335,7 @@ forkSubQuery forkSubQueryCommand forkSubQueryProcessingCommand rrfCommand +rerankCommand booleanExpression regexBooleanExpression matchBooleanExpression @@ -357,4 +360,4 @@ joinPredicate atn: -[4, 1, 136, 722, 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, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 164, 8, 1, 10, 1, 12, 1, 167, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 175, 8, 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, 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, 202, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 5, 7, 215, 8, 7, 10, 7, 12, 7, 218, 9, 7, 1, 8, 1, 8, 1, 8, 3, 8, 223, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 5, 11, 236, 8, 11, 10, 11, 12, 11, 239, 9, 11, 1, 11, 3, 11, 242, 8, 11, 1, 12, 1, 12, 1, 12, 3, 12, 247, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 254, 8, 12, 3, 12, 256, 8, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 268, 8, 16, 10, 16, 12, 16, 271, 9, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 3, 18, 278, 8, 18, 1, 18, 1, 18, 3, 18, 282, 8, 18, 1, 19, 1, 19, 1, 19, 5, 19, 287, 8, 19, 10, 19, 12, 19, 290, 9, 19, 1, 20, 1, 20, 1, 20, 3, 20, 295, 8, 20, 1, 21, 1, 21, 1, 21, 5, 21, 300, 8, 21, 10, 21, 12, 21, 303, 9, 21, 1, 22, 1, 22, 1, 22, 5, 22, 308, 8, 22, 10, 22, 12, 22, 311, 9, 22, 1, 23, 1, 23, 1, 23, 5, 23, 316, 8, 23, 10, 23, 12, 23, 319, 9, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 3, 25, 326, 8, 25, 1, 26, 1, 26, 3, 26, 330, 8, 26, 1, 27, 1, 27, 3, 27, 334, 8, 27, 1, 28, 1, 28, 1, 28, 3, 28, 339, 8, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 348, 8, 30, 10, 30, 12, 30, 351, 9, 30, 1, 31, 1, 31, 3, 31, 355, 8, 31, 1, 31, 1, 31, 3, 31, 359, 8, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 5, 34, 371, 8, 34, 10, 34, 12, 34, 374, 9, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 384, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 5, 39, 396, 8, 39, 10, 39, 12, 39, 399, 9, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 419, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 425, 8, 44, 10, 44, 12, 44, 428, 9, 44, 3, 44, 430, 8, 44, 1, 45, 1, 45, 1, 45, 3, 45, 435, 8, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 448, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 454, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 461, 8, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 51, 4, 51, 470, 8, 51, 11, 51, 12, 51, 471, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 5, 53, 484, 8, 53, 10, 53, 12, 53, 487, 9, 53, 1, 54, 1, 54, 1, 54, 3, 54, 492, 8, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 503, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 510, 8, 56, 10, 56, 12, 56, 513, 9, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 520, 8, 56, 1, 56, 1, 56, 1, 56, 3, 56, 525, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 533, 8, 56, 10, 56, 12, 56, 536, 9, 56, 1, 57, 1, 57, 3, 57, 540, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 547, 8, 57, 1, 57, 1, 57, 1, 57, 3, 57, 552, 8, 57, 1, 58, 1, 58, 1, 58, 3, 58, 557, 8, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 567, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 573, 8, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 581, 8, 60, 10, 60, 12, 60, 584, 9, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 594, 8, 61, 1, 61, 1, 61, 1, 61, 5, 61, 599, 8, 61, 10, 61, 12, 61, 602, 9, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 610, 8, 62, 10, 62, 12, 62, 613, 9, 62, 1, 62, 1, 62, 3, 62, 617, 8, 62, 3, 62, 619, 8, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 5, 64, 629, 8, 64, 10, 64, 12, 64, 632, 9, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 653, 8, 66, 10, 66, 12, 66, 656, 9, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 664, 8, 66, 10, 66, 12, 66, 667, 9, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 675, 8, 66, 10, 66, 12, 66, 678, 9, 66, 1, 66, 1, 66, 3, 66, 682, 8, 66, 1, 67, 1, 67, 1, 68, 1, 68, 3, 68, 688, 8, 68, 1, 69, 3, 69, 691, 8, 69, 1, 69, 1, 69, 1, 70, 3, 70, 696, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 5, 75, 715, 8, 75, 10, 75, 12, 75, 718, 9, 75, 1, 76, 1, 76, 1, 76, 0, 5, 2, 106, 112, 120, 122, 77, 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, 0, 9, 2, 0, 52, 52, 104, 104, 1, 0, 98, 99, 2, 0, 57, 57, 62, 62, 2, 0, 65, 65, 68, 68, 1, 0, 84, 85, 1, 0, 86, 88, 2, 0, 64, 64, 76, 76, 2, 0, 77, 77, 79, 83, 2, 0, 19, 19, 21, 22, 748, 0, 154, 1, 0, 0, 0, 2, 157, 1, 0, 0, 0, 4, 174, 1, 0, 0, 0, 6, 201, 1, 0, 0, 0, 8, 203, 1, 0, 0, 0, 10, 206, 1, 0, 0, 0, 12, 208, 1, 0, 0, 0, 14, 211, 1, 0, 0, 0, 16, 222, 1, 0, 0, 0, 18, 226, 1, 0, 0, 0, 20, 229, 1, 0, 0, 0, 22, 232, 1, 0, 0, 0, 24, 255, 1, 0, 0, 0, 26, 257, 1, 0, 0, 0, 28, 259, 1, 0, 0, 0, 30, 261, 1, 0, 0, 0, 32, 263, 1, 0, 0, 0, 34, 272, 1, 0, 0, 0, 36, 275, 1, 0, 0, 0, 38, 283, 1, 0, 0, 0, 40, 291, 1, 0, 0, 0, 42, 296, 1, 0, 0, 0, 44, 304, 1, 0, 0, 0, 46, 312, 1, 0, 0, 0, 48, 320, 1, 0, 0, 0, 50, 325, 1, 0, 0, 0, 52, 329, 1, 0, 0, 0, 54, 333, 1, 0, 0, 0, 56, 338, 1, 0, 0, 0, 58, 340, 1, 0, 0, 0, 60, 343, 1, 0, 0, 0, 62, 352, 1, 0, 0, 0, 64, 360, 1, 0, 0, 0, 66, 363, 1, 0, 0, 0, 68, 366, 1, 0, 0, 0, 70, 375, 1, 0, 0, 0, 72, 379, 1, 0, 0, 0, 74, 385, 1, 0, 0, 0, 76, 389, 1, 0, 0, 0, 78, 392, 1, 0, 0, 0, 80, 400, 1, 0, 0, 0, 82, 404, 1, 0, 0, 0, 84, 407, 1, 0, 0, 0, 86, 411, 1, 0, 0, 0, 88, 414, 1, 0, 0, 0, 90, 434, 1, 0, 0, 0, 92, 438, 1, 0, 0, 0, 94, 443, 1, 0, 0, 0, 96, 449, 1, 0, 0, 0, 98, 462, 1, 0, 0, 0, 100, 465, 1, 0, 0, 0, 102, 469, 1, 0, 0, 0, 104, 473, 1, 0, 0, 0, 106, 477, 1, 0, 0, 0, 108, 491, 1, 0, 0, 0, 110, 493, 1, 0, 0, 0, 112, 524, 1, 0, 0, 0, 114, 551, 1, 0, 0, 0, 116, 553, 1, 0, 0, 0, 118, 566, 1, 0, 0, 0, 120, 572, 1, 0, 0, 0, 122, 593, 1, 0, 0, 0, 124, 603, 1, 0, 0, 0, 126, 622, 1, 0, 0, 0, 128, 624, 1, 0, 0, 0, 130, 635, 1, 0, 0, 0, 132, 681, 1, 0, 0, 0, 134, 683, 1, 0, 0, 0, 136, 687, 1, 0, 0, 0, 138, 690, 1, 0, 0, 0, 140, 695, 1, 0, 0, 0, 142, 699, 1, 0, 0, 0, 144, 701, 1, 0, 0, 0, 146, 703, 1, 0, 0, 0, 148, 708, 1, 0, 0, 0, 150, 710, 1, 0, 0, 0, 152, 719, 1, 0, 0, 0, 154, 155, 3, 2, 1, 0, 155, 156, 5, 0, 0, 1, 156, 1, 1, 0, 0, 0, 157, 158, 6, 1, -1, 0, 158, 159, 3, 4, 2, 0, 159, 165, 1, 0, 0, 0, 160, 161, 10, 1, 0, 0, 161, 162, 5, 51, 0, 0, 162, 164, 3, 6, 3, 0, 163, 160, 1, 0, 0, 0, 164, 167, 1, 0, 0, 0, 165, 163, 1, 0, 0, 0, 165, 166, 1, 0, 0, 0, 166, 3, 1, 0, 0, 0, 167, 165, 1, 0, 0, 0, 168, 175, 3, 82, 41, 0, 169, 175, 3, 18, 9, 0, 170, 175, 3, 12, 6, 0, 171, 175, 3, 86, 43, 0, 172, 173, 4, 2, 1, 0, 173, 175, 3, 20, 10, 0, 174, 168, 1, 0, 0, 0, 174, 169, 1, 0, 0, 0, 174, 170, 1, 0, 0, 0, 174, 171, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 175, 5, 1, 0, 0, 0, 176, 202, 3, 34, 17, 0, 177, 202, 3, 8, 4, 0, 178, 202, 3, 64, 32, 0, 179, 202, 3, 58, 29, 0, 180, 202, 3, 36, 18, 0, 181, 202, 3, 60, 30, 0, 182, 202, 3, 66, 33, 0, 183, 202, 3, 68, 34, 0, 184, 202, 3, 72, 36, 0, 185, 202, 3, 74, 37, 0, 186, 202, 3, 88, 44, 0, 187, 202, 3, 76, 38, 0, 188, 202, 3, 146, 73, 0, 189, 190, 4, 3, 2, 0, 190, 202, 3, 94, 47, 0, 191, 192, 4, 3, 3, 0, 192, 202, 3, 92, 46, 0, 193, 194, 4, 3, 4, 0, 194, 202, 3, 96, 48, 0, 195, 196, 4, 3, 5, 0, 196, 202, 3, 98, 49, 0, 197, 198, 4, 3, 6, 0, 198, 202, 3, 100, 50, 0, 199, 200, 4, 3, 7, 0, 200, 202, 3, 110, 55, 0, 201, 176, 1, 0, 0, 0, 201, 177, 1, 0, 0, 0, 201, 178, 1, 0, 0, 0, 201, 179, 1, 0, 0, 0, 201, 180, 1, 0, 0, 0, 201, 181, 1, 0, 0, 0, 201, 182, 1, 0, 0, 0, 201, 183, 1, 0, 0, 0, 201, 184, 1, 0, 0, 0, 201, 185, 1, 0, 0, 0, 201, 186, 1, 0, 0, 0, 201, 187, 1, 0, 0, 0, 201, 188, 1, 0, 0, 0, 201, 189, 1, 0, 0, 0, 201, 191, 1, 0, 0, 0, 201, 193, 1, 0, 0, 0, 201, 195, 1, 0, 0, 0, 201, 197, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 202, 7, 1, 0, 0, 0, 203, 204, 5, 14, 0, 0, 204, 205, 3, 112, 56, 0, 205, 9, 1, 0, 0, 0, 206, 207, 3, 48, 24, 0, 207, 11, 1, 0, 0, 0, 208, 209, 5, 11, 0, 0, 209, 210, 3, 14, 7, 0, 210, 13, 1, 0, 0, 0, 211, 216, 3, 16, 8, 0, 212, 213, 5, 61, 0, 0, 213, 215, 3, 16, 8, 0, 214, 212, 1, 0, 0, 0, 215, 218, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 15, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 219, 220, 3, 42, 21, 0, 220, 221, 5, 58, 0, 0, 221, 223, 1, 0, 0, 0, 222, 219, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 225, 3, 112, 56, 0, 225, 17, 1, 0, 0, 0, 226, 227, 5, 16, 0, 0, 227, 228, 3, 22, 11, 0, 228, 19, 1, 0, 0, 0, 229, 230, 5, 17, 0, 0, 230, 231, 3, 22, 11, 0, 231, 21, 1, 0, 0, 0, 232, 237, 3, 24, 12, 0, 233, 234, 5, 61, 0, 0, 234, 236, 3, 24, 12, 0, 235, 233, 1, 0, 0, 0, 236, 239, 1, 0, 0, 0, 237, 235, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 241, 1, 0, 0, 0, 239, 237, 1, 0, 0, 0, 240, 242, 3, 32, 16, 0, 241, 240, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 23, 1, 0, 0, 0, 243, 244, 3, 26, 13, 0, 244, 245, 5, 60, 0, 0, 245, 247, 1, 0, 0, 0, 246, 243, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 256, 3, 30, 15, 0, 249, 250, 4, 12, 8, 0, 250, 253, 3, 30, 15, 0, 251, 252, 5, 59, 0, 0, 252, 254, 3, 28, 14, 0, 253, 251, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 256, 1, 0, 0, 0, 255, 246, 1, 0, 0, 0, 255, 249, 1, 0, 0, 0, 256, 25, 1, 0, 0, 0, 257, 258, 7, 0, 0, 0, 258, 27, 1, 0, 0, 0, 259, 260, 7, 0, 0, 0, 260, 29, 1, 0, 0, 0, 261, 262, 7, 0, 0, 0, 262, 31, 1, 0, 0, 0, 263, 264, 5, 103, 0, 0, 264, 269, 5, 104, 0, 0, 265, 266, 5, 61, 0, 0, 266, 268, 5, 104, 0, 0, 267, 265, 1, 0, 0, 0, 268, 271, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 33, 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 272, 273, 5, 8, 0, 0, 273, 274, 3, 14, 7, 0, 274, 35, 1, 0, 0, 0, 275, 277, 5, 13, 0, 0, 276, 278, 3, 38, 19, 0, 277, 276, 1, 0, 0, 0, 277, 278, 1, 0, 0, 0, 278, 281, 1, 0, 0, 0, 279, 280, 5, 55, 0, 0, 280, 282, 3, 14, 7, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 37, 1, 0, 0, 0, 283, 288, 3, 40, 20, 0, 284, 285, 5, 61, 0, 0, 285, 287, 3, 40, 20, 0, 286, 284, 1, 0, 0, 0, 287, 290, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 39, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 291, 294, 3, 16, 8, 0, 292, 293, 5, 14, 0, 0, 293, 295, 3, 112, 56, 0, 294, 292, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 41, 1, 0, 0, 0, 296, 301, 3, 56, 28, 0, 297, 298, 5, 63, 0, 0, 298, 300, 3, 56, 28, 0, 299, 297, 1, 0, 0, 0, 300, 303, 1, 0, 0, 0, 301, 299, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 43, 1, 0, 0, 0, 303, 301, 1, 0, 0, 0, 304, 309, 3, 50, 25, 0, 305, 306, 5, 63, 0, 0, 306, 308, 3, 50, 25, 0, 307, 305, 1, 0, 0, 0, 308, 311, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 45, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 312, 317, 3, 44, 22, 0, 313, 314, 5, 61, 0, 0, 314, 316, 3, 44, 22, 0, 315, 313, 1, 0, 0, 0, 316, 319, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 47, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 320, 321, 7, 1, 0, 0, 321, 49, 1, 0, 0, 0, 322, 326, 5, 125, 0, 0, 323, 326, 3, 52, 26, 0, 324, 326, 3, 54, 27, 0, 325, 322, 1, 0, 0, 0, 325, 323, 1, 0, 0, 0, 325, 324, 1, 0, 0, 0, 326, 51, 1, 0, 0, 0, 327, 330, 5, 74, 0, 0, 328, 330, 5, 92, 0, 0, 329, 327, 1, 0, 0, 0, 329, 328, 1, 0, 0, 0, 330, 53, 1, 0, 0, 0, 331, 334, 5, 91, 0, 0, 332, 334, 5, 93, 0, 0, 333, 331, 1, 0, 0, 0, 333, 332, 1, 0, 0, 0, 334, 55, 1, 0, 0, 0, 335, 339, 3, 48, 24, 0, 336, 339, 3, 52, 26, 0, 337, 339, 3, 54, 27, 0, 338, 335, 1, 0, 0, 0, 338, 336, 1, 0, 0, 0, 338, 337, 1, 0, 0, 0, 339, 57, 1, 0, 0, 0, 340, 341, 5, 10, 0, 0, 341, 342, 5, 53, 0, 0, 342, 59, 1, 0, 0, 0, 343, 344, 5, 12, 0, 0, 344, 349, 3, 62, 31, 0, 345, 346, 5, 61, 0, 0, 346, 348, 3, 62, 31, 0, 347, 345, 1, 0, 0, 0, 348, 351, 1, 0, 0, 0, 349, 347, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 61, 1, 0, 0, 0, 351, 349, 1, 0, 0, 0, 352, 354, 3, 112, 56, 0, 353, 355, 7, 2, 0, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 358, 1, 0, 0, 0, 356, 357, 5, 72, 0, 0, 357, 359, 7, 3, 0, 0, 358, 356, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 63, 1, 0, 0, 0, 360, 361, 5, 26, 0, 0, 361, 362, 3, 46, 23, 0, 362, 65, 1, 0, 0, 0, 363, 364, 5, 25, 0, 0, 364, 365, 3, 46, 23, 0, 365, 67, 1, 0, 0, 0, 366, 367, 5, 29, 0, 0, 367, 372, 3, 70, 35, 0, 368, 369, 5, 61, 0, 0, 369, 371, 3, 70, 35, 0, 370, 368, 1, 0, 0, 0, 371, 374, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 69, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 375, 376, 3, 44, 22, 0, 376, 377, 5, 129, 0, 0, 377, 378, 3, 44, 22, 0, 378, 71, 1, 0, 0, 0, 379, 380, 5, 7, 0, 0, 380, 381, 3, 122, 61, 0, 381, 383, 3, 142, 71, 0, 382, 384, 3, 78, 39, 0, 383, 382, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 73, 1, 0, 0, 0, 385, 386, 5, 9, 0, 0, 386, 387, 3, 122, 61, 0, 387, 388, 3, 142, 71, 0, 388, 75, 1, 0, 0, 0, 389, 390, 5, 24, 0, 0, 390, 391, 3, 42, 21, 0, 391, 77, 1, 0, 0, 0, 392, 397, 3, 80, 40, 0, 393, 394, 5, 61, 0, 0, 394, 396, 3, 80, 40, 0, 395, 393, 1, 0, 0, 0, 396, 399, 1, 0, 0, 0, 397, 395, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 79, 1, 0, 0, 0, 399, 397, 1, 0, 0, 0, 400, 401, 3, 48, 24, 0, 401, 402, 5, 58, 0, 0, 402, 403, 3, 132, 66, 0, 403, 81, 1, 0, 0, 0, 404, 405, 5, 6, 0, 0, 405, 406, 3, 84, 42, 0, 406, 83, 1, 0, 0, 0, 407, 408, 5, 94, 0, 0, 408, 409, 3, 2, 1, 0, 409, 410, 5, 95, 0, 0, 410, 85, 1, 0, 0, 0, 411, 412, 5, 30, 0, 0, 412, 413, 5, 133, 0, 0, 413, 87, 1, 0, 0, 0, 414, 415, 5, 5, 0, 0, 415, 418, 5, 37, 0, 0, 416, 417, 5, 35, 0, 0, 417, 419, 3, 44, 22, 0, 418, 416, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 429, 1, 0, 0, 0, 420, 421, 5, 36, 0, 0, 421, 426, 3, 90, 45, 0, 422, 423, 5, 61, 0, 0, 423, 425, 3, 90, 45, 0, 424, 422, 1, 0, 0, 0, 425, 428, 1, 0, 0, 0, 426, 424, 1, 0, 0, 0, 426, 427, 1, 0, 0, 0, 427, 430, 1, 0, 0, 0, 428, 426, 1, 0, 0, 0, 429, 420, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 89, 1, 0, 0, 0, 431, 432, 3, 44, 22, 0, 432, 433, 5, 58, 0, 0, 433, 435, 1, 0, 0, 0, 434, 431, 1, 0, 0, 0, 434, 435, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 437, 3, 44, 22, 0, 437, 91, 1, 0, 0, 0, 438, 439, 5, 23, 0, 0, 439, 440, 3, 24, 12, 0, 440, 441, 5, 35, 0, 0, 441, 442, 3, 46, 23, 0, 442, 93, 1, 0, 0, 0, 443, 444, 5, 15, 0, 0, 444, 447, 3, 38, 19, 0, 445, 446, 5, 55, 0, 0, 446, 448, 3, 14, 7, 0, 447, 445, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 95, 1, 0, 0, 0, 449, 450, 5, 4, 0, 0, 450, 453, 3, 42, 21, 0, 451, 452, 5, 35, 0, 0, 452, 454, 3, 42, 21, 0, 453, 451, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 460, 1, 0, 0, 0, 455, 456, 5, 129, 0, 0, 456, 457, 3, 42, 21, 0, 457, 458, 5, 61, 0, 0, 458, 459, 3, 42, 21, 0, 459, 461, 1, 0, 0, 0, 460, 455, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 97, 1, 0, 0, 0, 462, 463, 5, 27, 0, 0, 463, 464, 3, 46, 23, 0, 464, 99, 1, 0, 0, 0, 465, 466, 5, 18, 0, 0, 466, 467, 3, 102, 51, 0, 467, 101, 1, 0, 0, 0, 468, 470, 3, 104, 52, 0, 469, 468, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 469, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 103, 1, 0, 0, 0, 473, 474, 5, 96, 0, 0, 474, 475, 3, 106, 53, 0, 475, 476, 5, 97, 0, 0, 476, 105, 1, 0, 0, 0, 477, 478, 6, 53, -1, 0, 478, 479, 3, 108, 54, 0, 479, 485, 1, 0, 0, 0, 480, 481, 10, 1, 0, 0, 481, 482, 5, 51, 0, 0, 482, 484, 3, 108, 54, 0, 483, 480, 1, 0, 0, 0, 484, 487, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 107, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 488, 492, 3, 8, 4, 0, 489, 492, 3, 60, 30, 0, 490, 492, 3, 58, 29, 0, 491, 488, 1, 0, 0, 0, 491, 489, 1, 0, 0, 0, 491, 490, 1, 0, 0, 0, 492, 109, 1, 0, 0, 0, 493, 494, 5, 28, 0, 0, 494, 111, 1, 0, 0, 0, 495, 496, 6, 56, -1, 0, 496, 497, 5, 70, 0, 0, 497, 525, 3, 112, 56, 8, 498, 525, 3, 118, 59, 0, 499, 525, 3, 114, 57, 0, 500, 502, 3, 118, 59, 0, 501, 503, 5, 70, 0, 0, 502, 501, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 504, 1, 0, 0, 0, 504, 505, 5, 66, 0, 0, 505, 506, 5, 96, 0, 0, 506, 511, 3, 118, 59, 0, 507, 508, 5, 61, 0, 0, 508, 510, 3, 118, 59, 0, 509, 507, 1, 0, 0, 0, 510, 513, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 514, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 514, 515, 5, 97, 0, 0, 515, 525, 1, 0, 0, 0, 516, 517, 3, 118, 59, 0, 517, 519, 5, 67, 0, 0, 518, 520, 5, 70, 0, 0, 519, 518, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 522, 5, 71, 0, 0, 522, 525, 1, 0, 0, 0, 523, 525, 3, 116, 58, 0, 524, 495, 1, 0, 0, 0, 524, 498, 1, 0, 0, 0, 524, 499, 1, 0, 0, 0, 524, 500, 1, 0, 0, 0, 524, 516, 1, 0, 0, 0, 524, 523, 1, 0, 0, 0, 525, 534, 1, 0, 0, 0, 526, 527, 10, 5, 0, 0, 527, 528, 5, 56, 0, 0, 528, 533, 3, 112, 56, 6, 529, 530, 10, 4, 0, 0, 530, 531, 5, 73, 0, 0, 531, 533, 3, 112, 56, 5, 532, 526, 1, 0, 0, 0, 532, 529, 1, 0, 0, 0, 533, 536, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 113, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 537, 539, 3, 118, 59, 0, 538, 540, 5, 70, 0, 0, 539, 538, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 542, 5, 69, 0, 0, 542, 543, 3, 142, 71, 0, 543, 552, 1, 0, 0, 0, 544, 546, 3, 118, 59, 0, 545, 547, 5, 70, 0, 0, 546, 545, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 549, 5, 75, 0, 0, 549, 550, 3, 142, 71, 0, 550, 552, 1, 0, 0, 0, 551, 537, 1, 0, 0, 0, 551, 544, 1, 0, 0, 0, 552, 115, 1, 0, 0, 0, 553, 556, 3, 42, 21, 0, 554, 555, 5, 59, 0, 0, 555, 557, 3, 10, 5, 0, 556, 554, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 559, 5, 60, 0, 0, 559, 560, 3, 132, 66, 0, 560, 117, 1, 0, 0, 0, 561, 567, 3, 120, 60, 0, 562, 563, 3, 120, 60, 0, 563, 564, 3, 144, 72, 0, 564, 565, 3, 120, 60, 0, 565, 567, 1, 0, 0, 0, 566, 561, 1, 0, 0, 0, 566, 562, 1, 0, 0, 0, 567, 119, 1, 0, 0, 0, 568, 569, 6, 60, -1, 0, 569, 573, 3, 122, 61, 0, 570, 571, 7, 4, 0, 0, 571, 573, 3, 120, 60, 3, 572, 568, 1, 0, 0, 0, 572, 570, 1, 0, 0, 0, 573, 582, 1, 0, 0, 0, 574, 575, 10, 2, 0, 0, 575, 576, 7, 5, 0, 0, 576, 581, 3, 120, 60, 3, 577, 578, 10, 1, 0, 0, 578, 579, 7, 4, 0, 0, 579, 581, 3, 120, 60, 2, 580, 574, 1, 0, 0, 0, 580, 577, 1, 0, 0, 0, 581, 584, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 582, 583, 1, 0, 0, 0, 583, 121, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 585, 586, 6, 61, -1, 0, 586, 594, 3, 132, 66, 0, 587, 594, 3, 42, 21, 0, 588, 594, 3, 124, 62, 0, 589, 590, 5, 96, 0, 0, 590, 591, 3, 112, 56, 0, 591, 592, 5, 97, 0, 0, 592, 594, 1, 0, 0, 0, 593, 585, 1, 0, 0, 0, 593, 587, 1, 0, 0, 0, 593, 588, 1, 0, 0, 0, 593, 589, 1, 0, 0, 0, 594, 600, 1, 0, 0, 0, 595, 596, 10, 1, 0, 0, 596, 597, 5, 59, 0, 0, 597, 599, 3, 10, 5, 0, 598, 595, 1, 0, 0, 0, 599, 602, 1, 0, 0, 0, 600, 598, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 123, 1, 0, 0, 0, 602, 600, 1, 0, 0, 0, 603, 604, 3, 126, 63, 0, 604, 618, 5, 96, 0, 0, 605, 619, 5, 86, 0, 0, 606, 611, 3, 112, 56, 0, 607, 608, 5, 61, 0, 0, 608, 610, 3, 112, 56, 0, 609, 607, 1, 0, 0, 0, 610, 613, 1, 0, 0, 0, 611, 609, 1, 0, 0, 0, 611, 612, 1, 0, 0, 0, 612, 616, 1, 0, 0, 0, 613, 611, 1, 0, 0, 0, 614, 615, 5, 61, 0, 0, 615, 617, 3, 128, 64, 0, 616, 614, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 619, 1, 0, 0, 0, 618, 605, 1, 0, 0, 0, 618, 606, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 621, 5, 97, 0, 0, 621, 125, 1, 0, 0, 0, 622, 623, 3, 56, 28, 0, 623, 127, 1, 0, 0, 0, 624, 625, 5, 89, 0, 0, 625, 630, 3, 130, 65, 0, 626, 627, 5, 61, 0, 0, 627, 629, 3, 130, 65, 0, 628, 626, 1, 0, 0, 0, 629, 632, 1, 0, 0, 0, 630, 628, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 633, 1, 0, 0, 0, 632, 630, 1, 0, 0, 0, 633, 634, 5, 90, 0, 0, 634, 129, 1, 0, 0, 0, 635, 636, 3, 142, 71, 0, 636, 637, 5, 60, 0, 0, 637, 638, 3, 132, 66, 0, 638, 131, 1, 0, 0, 0, 639, 682, 5, 71, 0, 0, 640, 641, 3, 140, 70, 0, 641, 642, 5, 98, 0, 0, 642, 682, 1, 0, 0, 0, 643, 682, 3, 138, 69, 0, 644, 682, 3, 140, 70, 0, 645, 682, 3, 134, 67, 0, 646, 682, 3, 52, 26, 0, 647, 682, 3, 142, 71, 0, 648, 649, 5, 94, 0, 0, 649, 654, 3, 136, 68, 0, 650, 651, 5, 61, 0, 0, 651, 653, 3, 136, 68, 0, 652, 650, 1, 0, 0, 0, 653, 656, 1, 0, 0, 0, 654, 652, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 657, 1, 0, 0, 0, 656, 654, 1, 0, 0, 0, 657, 658, 5, 95, 0, 0, 658, 682, 1, 0, 0, 0, 659, 660, 5, 94, 0, 0, 660, 665, 3, 134, 67, 0, 661, 662, 5, 61, 0, 0, 662, 664, 3, 134, 67, 0, 663, 661, 1, 0, 0, 0, 664, 667, 1, 0, 0, 0, 665, 663, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 668, 1, 0, 0, 0, 667, 665, 1, 0, 0, 0, 668, 669, 5, 95, 0, 0, 669, 682, 1, 0, 0, 0, 670, 671, 5, 94, 0, 0, 671, 676, 3, 142, 71, 0, 672, 673, 5, 61, 0, 0, 673, 675, 3, 142, 71, 0, 674, 672, 1, 0, 0, 0, 675, 678, 1, 0, 0, 0, 676, 674, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 679, 1, 0, 0, 0, 678, 676, 1, 0, 0, 0, 679, 680, 5, 95, 0, 0, 680, 682, 1, 0, 0, 0, 681, 639, 1, 0, 0, 0, 681, 640, 1, 0, 0, 0, 681, 643, 1, 0, 0, 0, 681, 644, 1, 0, 0, 0, 681, 645, 1, 0, 0, 0, 681, 646, 1, 0, 0, 0, 681, 647, 1, 0, 0, 0, 681, 648, 1, 0, 0, 0, 681, 659, 1, 0, 0, 0, 681, 670, 1, 0, 0, 0, 682, 133, 1, 0, 0, 0, 683, 684, 7, 6, 0, 0, 684, 135, 1, 0, 0, 0, 685, 688, 3, 138, 69, 0, 686, 688, 3, 140, 70, 0, 687, 685, 1, 0, 0, 0, 687, 686, 1, 0, 0, 0, 688, 137, 1, 0, 0, 0, 689, 691, 7, 4, 0, 0, 690, 689, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 693, 5, 54, 0, 0, 693, 139, 1, 0, 0, 0, 694, 696, 7, 4, 0, 0, 695, 694, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 697, 1, 0, 0, 0, 697, 698, 5, 53, 0, 0, 698, 141, 1, 0, 0, 0, 699, 700, 5, 52, 0, 0, 700, 143, 1, 0, 0, 0, 701, 702, 7, 7, 0, 0, 702, 145, 1, 0, 0, 0, 703, 704, 7, 8, 0, 0, 704, 705, 5, 111, 0, 0, 705, 706, 3, 148, 74, 0, 706, 707, 3, 150, 75, 0, 707, 147, 1, 0, 0, 0, 708, 709, 3, 24, 12, 0, 709, 149, 1, 0, 0, 0, 710, 711, 5, 35, 0, 0, 711, 716, 3, 152, 76, 0, 712, 713, 5, 61, 0, 0, 713, 715, 3, 152, 76, 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, 151, 1, 0, 0, 0, 718, 716, 1, 0, 0, 0, 719, 720, 3, 118, 59, 0, 720, 153, 1, 0, 0, 0, 66, 165, 174, 201, 216, 222, 237, 241, 246, 253, 255, 269, 277, 281, 288, 294, 301, 309, 317, 325, 329, 333, 338, 349, 354, 358, 372, 383, 397, 418, 426, 429, 434, 447, 453, 460, 471, 485, 491, 502, 511, 519, 524, 532, 534, 539, 546, 551, 556, 566, 572, 580, 582, 593, 600, 611, 616, 618, 630, 654, 665, 676, 681, 687, 690, 695, 716] \ No newline at end of file +[4, 1, 137, 733, 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, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 166, 8, 1, 10, 1, 12, 1, 169, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 177, 8, 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, 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, 206, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 5, 7, 219, 8, 7, 10, 7, 12, 7, 222, 9, 7, 1, 8, 1, 8, 1, 8, 3, 8, 227, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 5, 11, 240, 8, 11, 10, 11, 12, 11, 243, 9, 11, 1, 11, 3, 11, 246, 8, 11, 1, 12, 1, 12, 1, 12, 3, 12, 251, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 258, 8, 12, 3, 12, 260, 8, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 272, 8, 16, 10, 16, 12, 16, 275, 9, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 3, 18, 282, 8, 18, 1, 18, 1, 18, 3, 18, 286, 8, 18, 1, 19, 1, 19, 1, 19, 5, 19, 291, 8, 19, 10, 19, 12, 19, 294, 9, 19, 1, 20, 1, 20, 1, 20, 3, 20, 299, 8, 20, 1, 21, 1, 21, 1, 21, 5, 21, 304, 8, 21, 10, 21, 12, 21, 307, 9, 21, 1, 22, 1, 22, 1, 22, 5, 22, 312, 8, 22, 10, 22, 12, 22, 315, 9, 22, 1, 23, 1, 23, 1, 23, 5, 23, 320, 8, 23, 10, 23, 12, 23, 323, 9, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 3, 25, 330, 8, 25, 1, 26, 1, 26, 3, 26, 334, 8, 26, 1, 27, 1, 27, 3, 27, 338, 8, 27, 1, 28, 1, 28, 1, 28, 3, 28, 343, 8, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 352, 8, 30, 10, 30, 12, 30, 355, 9, 30, 1, 31, 1, 31, 3, 31, 359, 8, 31, 1, 31, 1, 31, 3, 31, 363, 8, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 5, 34, 375, 8, 34, 10, 34, 12, 34, 378, 9, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 388, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 5, 39, 400, 8, 39, 10, 39, 12, 39, 403, 9, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 423, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 429, 8, 44, 10, 44, 12, 44, 432, 9, 44, 3, 44, 434, 8, 44, 1, 45, 1, 45, 1, 45, 3, 45, 439, 8, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 452, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 458, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 465, 8, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 51, 4, 51, 474, 8, 51, 11, 51, 12, 51, 475, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 5, 53, 488, 8, 53, 10, 53, 12, 53, 491, 9, 53, 1, 54, 1, 54, 1, 54, 3, 54, 496, 8, 54, 1, 55, 1, 55, 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, 3, 57, 514, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 5, 57, 521, 8, 57, 10, 57, 12, 57, 524, 9, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 531, 8, 57, 1, 57, 1, 57, 1, 57, 3, 57, 536, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 5, 57, 544, 8, 57, 10, 57, 12, 57, 547, 9, 57, 1, 58, 1, 58, 3, 58, 551, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 558, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 563, 8, 58, 1, 59, 1, 59, 1, 59, 3, 59, 568, 8, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 578, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 584, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 592, 8, 61, 10, 61, 12, 61, 595, 9, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 605, 8, 62, 1, 62, 1, 62, 1, 62, 5, 62, 610, 8, 62, 10, 62, 12, 62, 613, 9, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 5, 63, 621, 8, 63, 10, 63, 12, 63, 624, 9, 63, 1, 63, 1, 63, 3, 63, 628, 8, 63, 3, 63, 630, 8, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 5, 65, 640, 8, 65, 10, 65, 12, 65, 643, 9, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 664, 8, 67, 10, 67, 12, 67, 667, 9, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 675, 8, 67, 10, 67, 12, 67, 678, 9, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 686, 8, 67, 10, 67, 12, 67, 689, 9, 67, 1, 67, 1, 67, 3, 67, 693, 8, 67, 1, 68, 1, 68, 1, 69, 1, 69, 3, 69, 699, 8, 69, 1, 70, 3, 70, 702, 8, 70, 1, 70, 1, 70, 1, 71, 3, 71, 707, 8, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 5, 76, 726, 8, 76, 10, 76, 12, 76, 729, 9, 76, 1, 77, 1, 77, 1, 77, 0, 5, 2, 106, 114, 122, 124, 78, 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, 0, 9, 2, 0, 51, 51, 106, 106, 1, 0, 100, 101, 2, 0, 56, 56, 62, 62, 2, 0, 65, 65, 68, 68, 1, 0, 86, 87, 1, 0, 88, 90, 2, 0, 64, 64, 77, 77, 2, 0, 79, 79, 81, 85, 2, 0, 20, 20, 22, 23, 759, 0, 156, 1, 0, 0, 0, 2, 159, 1, 0, 0, 0, 4, 176, 1, 0, 0, 0, 6, 205, 1, 0, 0, 0, 8, 207, 1, 0, 0, 0, 10, 210, 1, 0, 0, 0, 12, 212, 1, 0, 0, 0, 14, 215, 1, 0, 0, 0, 16, 226, 1, 0, 0, 0, 18, 230, 1, 0, 0, 0, 20, 233, 1, 0, 0, 0, 22, 236, 1, 0, 0, 0, 24, 259, 1, 0, 0, 0, 26, 261, 1, 0, 0, 0, 28, 263, 1, 0, 0, 0, 30, 265, 1, 0, 0, 0, 32, 267, 1, 0, 0, 0, 34, 276, 1, 0, 0, 0, 36, 279, 1, 0, 0, 0, 38, 287, 1, 0, 0, 0, 40, 295, 1, 0, 0, 0, 42, 300, 1, 0, 0, 0, 44, 308, 1, 0, 0, 0, 46, 316, 1, 0, 0, 0, 48, 324, 1, 0, 0, 0, 50, 329, 1, 0, 0, 0, 52, 333, 1, 0, 0, 0, 54, 337, 1, 0, 0, 0, 56, 342, 1, 0, 0, 0, 58, 344, 1, 0, 0, 0, 60, 347, 1, 0, 0, 0, 62, 356, 1, 0, 0, 0, 64, 364, 1, 0, 0, 0, 66, 367, 1, 0, 0, 0, 68, 370, 1, 0, 0, 0, 70, 379, 1, 0, 0, 0, 72, 383, 1, 0, 0, 0, 74, 389, 1, 0, 0, 0, 76, 393, 1, 0, 0, 0, 78, 396, 1, 0, 0, 0, 80, 404, 1, 0, 0, 0, 82, 408, 1, 0, 0, 0, 84, 411, 1, 0, 0, 0, 86, 415, 1, 0, 0, 0, 88, 418, 1, 0, 0, 0, 90, 438, 1, 0, 0, 0, 92, 442, 1, 0, 0, 0, 94, 447, 1, 0, 0, 0, 96, 453, 1, 0, 0, 0, 98, 466, 1, 0, 0, 0, 100, 469, 1, 0, 0, 0, 102, 473, 1, 0, 0, 0, 104, 477, 1, 0, 0, 0, 106, 481, 1, 0, 0, 0, 108, 495, 1, 0, 0, 0, 110, 497, 1, 0, 0, 0, 112, 499, 1, 0, 0, 0, 114, 535, 1, 0, 0, 0, 116, 562, 1, 0, 0, 0, 118, 564, 1, 0, 0, 0, 120, 577, 1, 0, 0, 0, 122, 583, 1, 0, 0, 0, 124, 604, 1, 0, 0, 0, 126, 614, 1, 0, 0, 0, 128, 633, 1, 0, 0, 0, 130, 635, 1, 0, 0, 0, 132, 646, 1, 0, 0, 0, 134, 692, 1, 0, 0, 0, 136, 694, 1, 0, 0, 0, 138, 698, 1, 0, 0, 0, 140, 701, 1, 0, 0, 0, 142, 706, 1, 0, 0, 0, 144, 710, 1, 0, 0, 0, 146, 712, 1, 0, 0, 0, 148, 714, 1, 0, 0, 0, 150, 719, 1, 0, 0, 0, 152, 721, 1, 0, 0, 0, 154, 730, 1, 0, 0, 0, 156, 157, 3, 2, 1, 0, 157, 158, 5, 0, 0, 1, 158, 1, 1, 0, 0, 0, 159, 160, 6, 1, -1, 0, 160, 161, 3, 4, 2, 0, 161, 167, 1, 0, 0, 0, 162, 163, 10, 1, 0, 0, 163, 164, 5, 50, 0, 0, 164, 166, 3, 6, 3, 0, 165, 162, 1, 0, 0, 0, 166, 169, 1, 0, 0, 0, 167, 165, 1, 0, 0, 0, 167, 168, 1, 0, 0, 0, 168, 3, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 170, 177, 3, 82, 41, 0, 171, 177, 3, 18, 9, 0, 172, 177, 3, 12, 6, 0, 173, 177, 3, 86, 43, 0, 174, 175, 4, 2, 1, 0, 175, 177, 3, 20, 10, 0, 176, 170, 1, 0, 0, 0, 176, 171, 1, 0, 0, 0, 176, 172, 1, 0, 0, 0, 176, 173, 1, 0, 0, 0, 176, 174, 1, 0, 0, 0, 177, 5, 1, 0, 0, 0, 178, 206, 3, 34, 17, 0, 179, 206, 3, 8, 4, 0, 180, 206, 3, 64, 32, 0, 181, 206, 3, 58, 29, 0, 182, 206, 3, 36, 18, 0, 183, 206, 3, 60, 30, 0, 184, 206, 3, 66, 33, 0, 185, 206, 3, 68, 34, 0, 186, 206, 3, 72, 36, 0, 187, 206, 3, 74, 37, 0, 188, 206, 3, 88, 44, 0, 189, 206, 3, 76, 38, 0, 190, 206, 3, 148, 74, 0, 191, 192, 4, 3, 2, 0, 192, 206, 3, 94, 47, 0, 193, 194, 4, 3, 3, 0, 194, 206, 3, 92, 46, 0, 195, 196, 4, 3, 4, 0, 196, 206, 3, 96, 48, 0, 197, 198, 4, 3, 5, 0, 198, 206, 3, 98, 49, 0, 199, 200, 4, 3, 6, 0, 200, 206, 3, 100, 50, 0, 201, 202, 4, 3, 7, 0, 202, 206, 3, 112, 56, 0, 203, 204, 4, 3, 8, 0, 204, 206, 3, 110, 55, 0, 205, 178, 1, 0, 0, 0, 205, 179, 1, 0, 0, 0, 205, 180, 1, 0, 0, 0, 205, 181, 1, 0, 0, 0, 205, 182, 1, 0, 0, 0, 205, 183, 1, 0, 0, 0, 205, 184, 1, 0, 0, 0, 205, 185, 1, 0, 0, 0, 205, 186, 1, 0, 0, 0, 205, 187, 1, 0, 0, 0, 205, 188, 1, 0, 0, 0, 205, 189, 1, 0, 0, 0, 205, 190, 1, 0, 0, 0, 205, 191, 1, 0, 0, 0, 205, 193, 1, 0, 0, 0, 205, 195, 1, 0, 0, 0, 205, 197, 1, 0, 0, 0, 205, 199, 1, 0, 0, 0, 205, 201, 1, 0, 0, 0, 205, 203, 1, 0, 0, 0, 206, 7, 1, 0, 0, 0, 207, 208, 5, 14, 0, 0, 208, 209, 3, 114, 57, 0, 209, 9, 1, 0, 0, 0, 210, 211, 3, 48, 24, 0, 211, 11, 1, 0, 0, 0, 212, 213, 5, 11, 0, 0, 213, 214, 3, 14, 7, 0, 214, 13, 1, 0, 0, 0, 215, 220, 3, 16, 8, 0, 216, 217, 5, 61, 0, 0, 217, 219, 3, 16, 8, 0, 218, 216, 1, 0, 0, 0, 219, 222, 1, 0, 0, 0, 220, 218, 1, 0, 0, 0, 220, 221, 1, 0, 0, 0, 221, 15, 1, 0, 0, 0, 222, 220, 1, 0, 0, 0, 223, 224, 3, 42, 21, 0, 224, 225, 5, 57, 0, 0, 225, 227, 1, 0, 0, 0, 226, 223, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 229, 3, 114, 57, 0, 229, 17, 1, 0, 0, 0, 230, 231, 5, 17, 0, 0, 231, 232, 3, 22, 11, 0, 232, 19, 1, 0, 0, 0, 233, 234, 5, 18, 0, 0, 234, 235, 3, 22, 11, 0, 235, 21, 1, 0, 0, 0, 236, 241, 3, 24, 12, 0, 237, 238, 5, 61, 0, 0, 238, 240, 3, 24, 12, 0, 239, 237, 1, 0, 0, 0, 240, 243, 1, 0, 0, 0, 241, 239, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 244, 246, 3, 32, 16, 0, 245, 244, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 23, 1, 0, 0, 0, 247, 248, 3, 26, 13, 0, 248, 249, 5, 60, 0, 0, 249, 251, 1, 0, 0, 0, 250, 247, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 260, 3, 30, 15, 0, 253, 254, 4, 12, 9, 0, 254, 257, 3, 30, 15, 0, 255, 256, 5, 59, 0, 0, 256, 258, 3, 28, 14, 0, 257, 255, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 260, 1, 0, 0, 0, 259, 250, 1, 0, 0, 0, 259, 253, 1, 0, 0, 0, 260, 25, 1, 0, 0, 0, 261, 262, 7, 0, 0, 0, 262, 27, 1, 0, 0, 0, 263, 264, 7, 0, 0, 0, 264, 29, 1, 0, 0, 0, 265, 266, 7, 0, 0, 0, 266, 31, 1, 0, 0, 0, 267, 268, 5, 105, 0, 0, 268, 273, 5, 106, 0, 0, 269, 270, 5, 61, 0, 0, 270, 272, 5, 106, 0, 0, 271, 269, 1, 0, 0, 0, 272, 275, 1, 0, 0, 0, 273, 271, 1, 0, 0, 0, 273, 274, 1, 0, 0, 0, 274, 33, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 276, 277, 5, 8, 0, 0, 277, 278, 3, 14, 7, 0, 278, 35, 1, 0, 0, 0, 279, 281, 5, 13, 0, 0, 280, 282, 3, 38, 19, 0, 281, 280, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 285, 1, 0, 0, 0, 283, 284, 5, 58, 0, 0, 284, 286, 3, 14, 7, 0, 285, 283, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 37, 1, 0, 0, 0, 287, 292, 3, 40, 20, 0, 288, 289, 5, 61, 0, 0, 289, 291, 3, 40, 20, 0, 290, 288, 1, 0, 0, 0, 291, 294, 1, 0, 0, 0, 292, 290, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 39, 1, 0, 0, 0, 294, 292, 1, 0, 0, 0, 295, 298, 3, 16, 8, 0, 296, 297, 5, 14, 0, 0, 297, 299, 3, 114, 57, 0, 298, 296, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 41, 1, 0, 0, 0, 300, 305, 3, 56, 28, 0, 301, 302, 5, 63, 0, 0, 302, 304, 3, 56, 28, 0, 303, 301, 1, 0, 0, 0, 304, 307, 1, 0, 0, 0, 305, 303, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 43, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 308, 313, 3, 50, 25, 0, 309, 310, 5, 63, 0, 0, 310, 312, 3, 50, 25, 0, 311, 309, 1, 0, 0, 0, 312, 315, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 45, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 316, 321, 3, 44, 22, 0, 317, 318, 5, 61, 0, 0, 318, 320, 3, 44, 22, 0, 319, 317, 1, 0, 0, 0, 320, 323, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 47, 1, 0, 0, 0, 323, 321, 1, 0, 0, 0, 324, 325, 7, 1, 0, 0, 325, 49, 1, 0, 0, 0, 326, 330, 5, 127, 0, 0, 327, 330, 3, 52, 26, 0, 328, 330, 3, 54, 27, 0, 329, 326, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 329, 328, 1, 0, 0, 0, 330, 51, 1, 0, 0, 0, 331, 334, 5, 75, 0, 0, 332, 334, 5, 94, 0, 0, 333, 331, 1, 0, 0, 0, 333, 332, 1, 0, 0, 0, 334, 53, 1, 0, 0, 0, 335, 338, 5, 93, 0, 0, 336, 338, 5, 95, 0, 0, 337, 335, 1, 0, 0, 0, 337, 336, 1, 0, 0, 0, 338, 55, 1, 0, 0, 0, 339, 343, 3, 48, 24, 0, 340, 343, 3, 52, 26, 0, 341, 343, 3, 54, 27, 0, 342, 339, 1, 0, 0, 0, 342, 340, 1, 0, 0, 0, 342, 341, 1, 0, 0, 0, 343, 57, 1, 0, 0, 0, 344, 345, 5, 10, 0, 0, 345, 346, 5, 52, 0, 0, 346, 59, 1, 0, 0, 0, 347, 348, 5, 12, 0, 0, 348, 353, 3, 62, 31, 0, 349, 350, 5, 61, 0, 0, 350, 352, 3, 62, 31, 0, 351, 349, 1, 0, 0, 0, 352, 355, 1, 0, 0, 0, 353, 351, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 61, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 356, 358, 3, 114, 57, 0, 357, 359, 7, 2, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 362, 1, 0, 0, 0, 360, 361, 5, 72, 0, 0, 361, 363, 7, 3, 0, 0, 362, 360, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 63, 1, 0, 0, 0, 364, 365, 5, 27, 0, 0, 365, 366, 3, 46, 23, 0, 366, 65, 1, 0, 0, 0, 367, 368, 5, 26, 0, 0, 368, 369, 3, 46, 23, 0, 369, 67, 1, 0, 0, 0, 370, 371, 5, 30, 0, 0, 371, 376, 3, 70, 35, 0, 372, 373, 5, 61, 0, 0, 373, 375, 3, 70, 35, 0, 374, 372, 1, 0, 0, 0, 375, 378, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 69, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 379, 380, 3, 44, 22, 0, 380, 381, 5, 55, 0, 0, 381, 382, 3, 44, 22, 0, 382, 71, 1, 0, 0, 0, 383, 384, 5, 7, 0, 0, 384, 385, 3, 124, 62, 0, 385, 387, 3, 144, 72, 0, 386, 388, 3, 78, 39, 0, 387, 386, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 73, 1, 0, 0, 0, 389, 390, 5, 9, 0, 0, 390, 391, 3, 124, 62, 0, 391, 392, 3, 144, 72, 0, 392, 75, 1, 0, 0, 0, 393, 394, 5, 25, 0, 0, 394, 395, 3, 42, 21, 0, 395, 77, 1, 0, 0, 0, 396, 401, 3, 80, 40, 0, 397, 398, 5, 61, 0, 0, 398, 400, 3, 80, 40, 0, 399, 397, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 79, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 404, 405, 3, 48, 24, 0, 405, 406, 5, 57, 0, 0, 406, 407, 3, 134, 67, 0, 407, 81, 1, 0, 0, 0, 408, 409, 5, 6, 0, 0, 409, 410, 3, 84, 42, 0, 410, 83, 1, 0, 0, 0, 411, 412, 5, 96, 0, 0, 412, 413, 3, 2, 1, 0, 413, 414, 5, 97, 0, 0, 414, 85, 1, 0, 0, 0, 415, 416, 5, 31, 0, 0, 416, 417, 5, 134, 0, 0, 417, 87, 1, 0, 0, 0, 418, 419, 5, 5, 0, 0, 419, 422, 5, 36, 0, 0, 420, 421, 5, 73, 0, 0, 421, 423, 3, 44, 22, 0, 422, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 433, 1, 0, 0, 0, 424, 425, 5, 78, 0, 0, 425, 430, 3, 90, 45, 0, 426, 427, 5, 61, 0, 0, 427, 429, 3, 90, 45, 0, 428, 426, 1, 0, 0, 0, 429, 432, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 434, 1, 0, 0, 0, 432, 430, 1, 0, 0, 0, 433, 424, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 89, 1, 0, 0, 0, 435, 436, 3, 44, 22, 0, 436, 437, 5, 57, 0, 0, 437, 439, 1, 0, 0, 0, 438, 435, 1, 0, 0, 0, 438, 439, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 441, 3, 44, 22, 0, 441, 91, 1, 0, 0, 0, 442, 443, 5, 24, 0, 0, 443, 444, 3, 24, 12, 0, 444, 445, 5, 73, 0, 0, 445, 446, 3, 46, 23, 0, 446, 93, 1, 0, 0, 0, 447, 448, 5, 15, 0, 0, 448, 451, 3, 38, 19, 0, 449, 450, 5, 58, 0, 0, 450, 452, 3, 14, 7, 0, 451, 449, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 95, 1, 0, 0, 0, 453, 454, 5, 4, 0, 0, 454, 457, 3, 42, 21, 0, 455, 456, 5, 73, 0, 0, 456, 458, 3, 42, 21, 0, 457, 455, 1, 0, 0, 0, 457, 458, 1, 0, 0, 0, 458, 464, 1, 0, 0, 0, 459, 460, 5, 55, 0, 0, 460, 461, 3, 42, 21, 0, 461, 462, 5, 61, 0, 0, 462, 463, 3, 42, 21, 0, 463, 465, 1, 0, 0, 0, 464, 459, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 97, 1, 0, 0, 0, 466, 467, 5, 28, 0, 0, 467, 468, 3, 46, 23, 0, 468, 99, 1, 0, 0, 0, 469, 470, 5, 19, 0, 0, 470, 471, 3, 102, 51, 0, 471, 101, 1, 0, 0, 0, 472, 474, 3, 104, 52, 0, 473, 472, 1, 0, 0, 0, 474, 475, 1, 0, 0, 0, 475, 473, 1, 0, 0, 0, 475, 476, 1, 0, 0, 0, 476, 103, 1, 0, 0, 0, 477, 478, 5, 98, 0, 0, 478, 479, 3, 106, 53, 0, 479, 480, 5, 99, 0, 0, 480, 105, 1, 0, 0, 0, 481, 482, 6, 53, -1, 0, 482, 483, 3, 108, 54, 0, 483, 489, 1, 0, 0, 0, 484, 485, 10, 1, 0, 0, 485, 486, 5, 50, 0, 0, 486, 488, 3, 108, 54, 0, 487, 484, 1, 0, 0, 0, 488, 491, 1, 0, 0, 0, 489, 487, 1, 0, 0, 0, 489, 490, 1, 0, 0, 0, 490, 107, 1, 0, 0, 0, 491, 489, 1, 0, 0, 0, 492, 496, 3, 8, 4, 0, 493, 496, 3, 60, 30, 0, 494, 496, 3, 58, 29, 0, 495, 492, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 495, 494, 1, 0, 0, 0, 496, 109, 1, 0, 0, 0, 497, 498, 5, 29, 0, 0, 498, 111, 1, 0, 0, 0, 499, 500, 5, 16, 0, 0, 500, 501, 3, 134, 67, 0, 501, 502, 5, 73, 0, 0, 502, 503, 3, 14, 7, 0, 503, 504, 5, 78, 0, 0, 504, 505, 3, 56, 28, 0, 505, 113, 1, 0, 0, 0, 506, 507, 6, 57, -1, 0, 507, 508, 5, 70, 0, 0, 508, 536, 3, 114, 57, 8, 509, 536, 3, 120, 60, 0, 510, 536, 3, 116, 58, 0, 511, 513, 3, 120, 60, 0, 512, 514, 5, 70, 0, 0, 513, 512, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 5, 66, 0, 0, 516, 517, 5, 98, 0, 0, 517, 522, 3, 120, 60, 0, 518, 519, 5, 61, 0, 0, 519, 521, 3, 120, 60, 0, 520, 518, 1, 0, 0, 0, 521, 524, 1, 0, 0, 0, 522, 520, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 525, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 525, 526, 5, 99, 0, 0, 526, 536, 1, 0, 0, 0, 527, 528, 3, 120, 60, 0, 528, 530, 5, 67, 0, 0, 529, 531, 5, 70, 0, 0, 530, 529, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 533, 5, 71, 0, 0, 533, 536, 1, 0, 0, 0, 534, 536, 3, 118, 59, 0, 535, 506, 1, 0, 0, 0, 535, 509, 1, 0, 0, 0, 535, 510, 1, 0, 0, 0, 535, 511, 1, 0, 0, 0, 535, 527, 1, 0, 0, 0, 535, 534, 1, 0, 0, 0, 536, 545, 1, 0, 0, 0, 537, 538, 10, 5, 0, 0, 538, 539, 5, 54, 0, 0, 539, 544, 3, 114, 57, 6, 540, 541, 10, 4, 0, 0, 541, 542, 5, 74, 0, 0, 542, 544, 3, 114, 57, 5, 543, 537, 1, 0, 0, 0, 543, 540, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 115, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 550, 3, 120, 60, 0, 549, 551, 5, 70, 0, 0, 550, 549, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 553, 5, 69, 0, 0, 553, 554, 3, 144, 72, 0, 554, 563, 1, 0, 0, 0, 555, 557, 3, 120, 60, 0, 556, 558, 5, 70, 0, 0, 557, 556, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 5, 76, 0, 0, 560, 561, 3, 144, 72, 0, 561, 563, 1, 0, 0, 0, 562, 548, 1, 0, 0, 0, 562, 555, 1, 0, 0, 0, 563, 117, 1, 0, 0, 0, 564, 567, 3, 42, 21, 0, 565, 566, 5, 59, 0, 0, 566, 568, 3, 10, 5, 0, 567, 565, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 569, 1, 0, 0, 0, 569, 570, 5, 60, 0, 0, 570, 571, 3, 134, 67, 0, 571, 119, 1, 0, 0, 0, 572, 578, 3, 122, 61, 0, 573, 574, 3, 122, 61, 0, 574, 575, 3, 146, 73, 0, 575, 576, 3, 122, 61, 0, 576, 578, 1, 0, 0, 0, 577, 572, 1, 0, 0, 0, 577, 573, 1, 0, 0, 0, 578, 121, 1, 0, 0, 0, 579, 580, 6, 61, -1, 0, 580, 584, 3, 124, 62, 0, 581, 582, 7, 4, 0, 0, 582, 584, 3, 122, 61, 3, 583, 579, 1, 0, 0, 0, 583, 581, 1, 0, 0, 0, 584, 593, 1, 0, 0, 0, 585, 586, 10, 2, 0, 0, 586, 587, 7, 5, 0, 0, 587, 592, 3, 122, 61, 3, 588, 589, 10, 1, 0, 0, 589, 590, 7, 4, 0, 0, 590, 592, 3, 122, 61, 2, 591, 585, 1, 0, 0, 0, 591, 588, 1, 0, 0, 0, 592, 595, 1, 0, 0, 0, 593, 591, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 123, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 596, 597, 6, 62, -1, 0, 597, 605, 3, 134, 67, 0, 598, 605, 3, 42, 21, 0, 599, 605, 3, 126, 63, 0, 600, 601, 5, 98, 0, 0, 601, 602, 3, 114, 57, 0, 602, 603, 5, 99, 0, 0, 603, 605, 1, 0, 0, 0, 604, 596, 1, 0, 0, 0, 604, 598, 1, 0, 0, 0, 604, 599, 1, 0, 0, 0, 604, 600, 1, 0, 0, 0, 605, 611, 1, 0, 0, 0, 606, 607, 10, 1, 0, 0, 607, 608, 5, 59, 0, 0, 608, 610, 3, 10, 5, 0, 609, 606, 1, 0, 0, 0, 610, 613, 1, 0, 0, 0, 611, 609, 1, 0, 0, 0, 611, 612, 1, 0, 0, 0, 612, 125, 1, 0, 0, 0, 613, 611, 1, 0, 0, 0, 614, 615, 3, 128, 64, 0, 615, 629, 5, 98, 0, 0, 616, 630, 5, 88, 0, 0, 617, 622, 3, 114, 57, 0, 618, 619, 5, 61, 0, 0, 619, 621, 3, 114, 57, 0, 620, 618, 1, 0, 0, 0, 621, 624, 1, 0, 0, 0, 622, 620, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 627, 1, 0, 0, 0, 624, 622, 1, 0, 0, 0, 625, 626, 5, 61, 0, 0, 626, 628, 3, 130, 65, 0, 627, 625, 1, 0, 0, 0, 627, 628, 1, 0, 0, 0, 628, 630, 1, 0, 0, 0, 629, 616, 1, 0, 0, 0, 629, 617, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 632, 5, 99, 0, 0, 632, 127, 1, 0, 0, 0, 633, 634, 3, 56, 28, 0, 634, 129, 1, 0, 0, 0, 635, 636, 5, 91, 0, 0, 636, 641, 3, 132, 66, 0, 637, 638, 5, 61, 0, 0, 638, 640, 3, 132, 66, 0, 639, 637, 1, 0, 0, 0, 640, 643, 1, 0, 0, 0, 641, 639, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 644, 1, 0, 0, 0, 643, 641, 1, 0, 0, 0, 644, 645, 5, 92, 0, 0, 645, 131, 1, 0, 0, 0, 646, 647, 3, 144, 72, 0, 647, 648, 5, 60, 0, 0, 648, 649, 3, 134, 67, 0, 649, 133, 1, 0, 0, 0, 650, 693, 5, 71, 0, 0, 651, 652, 3, 142, 71, 0, 652, 653, 5, 100, 0, 0, 653, 693, 1, 0, 0, 0, 654, 693, 3, 140, 70, 0, 655, 693, 3, 142, 71, 0, 656, 693, 3, 136, 68, 0, 657, 693, 3, 52, 26, 0, 658, 693, 3, 144, 72, 0, 659, 660, 5, 96, 0, 0, 660, 665, 3, 138, 69, 0, 661, 662, 5, 61, 0, 0, 662, 664, 3, 138, 69, 0, 663, 661, 1, 0, 0, 0, 664, 667, 1, 0, 0, 0, 665, 663, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 668, 1, 0, 0, 0, 667, 665, 1, 0, 0, 0, 668, 669, 5, 97, 0, 0, 669, 693, 1, 0, 0, 0, 670, 671, 5, 96, 0, 0, 671, 676, 3, 136, 68, 0, 672, 673, 5, 61, 0, 0, 673, 675, 3, 136, 68, 0, 674, 672, 1, 0, 0, 0, 675, 678, 1, 0, 0, 0, 676, 674, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 679, 1, 0, 0, 0, 678, 676, 1, 0, 0, 0, 679, 680, 5, 97, 0, 0, 680, 693, 1, 0, 0, 0, 681, 682, 5, 96, 0, 0, 682, 687, 3, 144, 72, 0, 683, 684, 5, 61, 0, 0, 684, 686, 3, 144, 72, 0, 685, 683, 1, 0, 0, 0, 686, 689, 1, 0, 0, 0, 687, 685, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 690, 1, 0, 0, 0, 689, 687, 1, 0, 0, 0, 690, 691, 5, 97, 0, 0, 691, 693, 1, 0, 0, 0, 692, 650, 1, 0, 0, 0, 692, 651, 1, 0, 0, 0, 692, 654, 1, 0, 0, 0, 692, 655, 1, 0, 0, 0, 692, 656, 1, 0, 0, 0, 692, 657, 1, 0, 0, 0, 692, 658, 1, 0, 0, 0, 692, 659, 1, 0, 0, 0, 692, 670, 1, 0, 0, 0, 692, 681, 1, 0, 0, 0, 693, 135, 1, 0, 0, 0, 694, 695, 7, 6, 0, 0, 695, 137, 1, 0, 0, 0, 696, 699, 3, 140, 70, 0, 697, 699, 3, 142, 71, 0, 698, 696, 1, 0, 0, 0, 698, 697, 1, 0, 0, 0, 699, 139, 1, 0, 0, 0, 700, 702, 7, 4, 0, 0, 701, 700, 1, 0, 0, 0, 701, 702, 1, 0, 0, 0, 702, 703, 1, 0, 0, 0, 703, 704, 5, 53, 0, 0, 704, 141, 1, 0, 0, 0, 705, 707, 7, 4, 0, 0, 706, 705, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 708, 1, 0, 0, 0, 708, 709, 5, 52, 0, 0, 709, 143, 1, 0, 0, 0, 710, 711, 5, 51, 0, 0, 711, 145, 1, 0, 0, 0, 712, 713, 7, 7, 0, 0, 713, 147, 1, 0, 0, 0, 714, 715, 7, 8, 0, 0, 715, 716, 5, 113, 0, 0, 716, 717, 3, 150, 75, 0, 717, 718, 3, 152, 76, 0, 718, 149, 1, 0, 0, 0, 719, 720, 3, 24, 12, 0, 720, 151, 1, 0, 0, 0, 721, 722, 5, 73, 0, 0, 722, 727, 3, 154, 77, 0, 723, 724, 5, 61, 0, 0, 724, 726, 3, 154, 77, 0, 725, 723, 1, 0, 0, 0, 726, 729, 1, 0, 0, 0, 727, 725, 1, 0, 0, 0, 727, 728, 1, 0, 0, 0, 728, 153, 1, 0, 0, 0, 729, 727, 1, 0, 0, 0, 730, 731, 3, 120, 60, 0, 731, 155, 1, 0, 0, 0, 66, 167, 176, 205, 220, 226, 241, 245, 250, 257, 259, 273, 281, 285, 292, 298, 305, 313, 321, 329, 333, 337, 342, 353, 358, 362, 376, 387, 401, 422, 430, 433, 438, 451, 457, 464, 475, 489, 495, 513, 522, 530, 535, 543, 545, 550, 557, 562, 567, 577, 583, 591, 593, 604, 611, 622, 627, 629, 641, 665, 676, 687, 692, 698, 701, 706, 727] \ No newline at end of file diff --git a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.tokens b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.tokens index 632f32f2912e1..b001acbf4f02b 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.tokens +++ b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.tokens @@ -13,49 +13,49 @@ SORT=12 STATS=13 WHERE=14 DEV_INLINESTATS=15 -FROM=16 -DEV_METRICS=17 -DEV_FORK=18 -JOIN_LOOKUP=19 -DEV_JOIN_FULL=20 -DEV_JOIN_LEFT=21 -DEV_JOIN_RIGHT=22 -DEV_LOOKUP=23 -MV_EXPAND=24 -DROP=25 -KEEP=26 -DEV_INSIST=27 -DEV_RRF=28 -RENAME=29 -SHOW=30 -UNKNOWN_CMD=31 -CHANGE_POINT_LINE_COMMENT=32 -CHANGE_POINT_MULTILINE_COMMENT=33 -CHANGE_POINT_WS=34 -ON=35 -WITH=36 -ENRICH_POLICY_NAME=37 -ENRICH_LINE_COMMENT=38 -ENRICH_MULTILINE_COMMENT=39 -ENRICH_WS=40 -ENRICH_FIELD_LINE_COMMENT=41 -ENRICH_FIELD_MULTILINE_COMMENT=42 -ENRICH_FIELD_WS=43 -SETTING=44 -SETTING_LINE_COMMENT=45 -SETTTING_MULTILINE_COMMENT=46 -SETTING_WS=47 -EXPLAIN_WS=48 -EXPLAIN_LINE_COMMENT=49 -EXPLAIN_MULTILINE_COMMENT=50 -PIPE=51 -QUOTED_STRING=52 -INTEGER_LITERAL=53 -DECIMAL_LITERAL=54 -BY=55 -AND=56 -ASC=57 -ASSIGN=58 +DEV_RERANK=16 +FROM=17 +DEV_TIME_SERIES=18 +DEV_FORK=19 +JOIN_LOOKUP=20 +DEV_JOIN_FULL=21 +DEV_JOIN_LEFT=22 +DEV_JOIN_RIGHT=23 +DEV_LOOKUP=24 +MV_EXPAND=25 +DROP=26 +KEEP=27 +DEV_INSIST=28 +DEV_RRF=29 +RENAME=30 +SHOW=31 +UNKNOWN_CMD=32 +CHANGE_POINT_LINE_COMMENT=33 +CHANGE_POINT_MULTILINE_COMMENT=34 +CHANGE_POINT_WS=35 +ENRICH_POLICY_NAME=36 +ENRICH_LINE_COMMENT=37 +ENRICH_MULTILINE_COMMENT=38 +ENRICH_WS=39 +ENRICH_FIELD_LINE_COMMENT=40 +ENRICH_FIELD_MULTILINE_COMMENT=41 +ENRICH_FIELD_WS=42 +SETTING=43 +SETTING_LINE_COMMENT=44 +SETTTING_MULTILINE_COMMENT=45 +SETTING_WS=46 +EXPLAIN_WS=47 +EXPLAIN_LINE_COMMENT=48 +EXPLAIN_MULTILINE_COMMENT=49 +PIPE=50 +QUOTED_STRING=51 +INTEGER_LITERAL=52 +DECIMAL_LITERAL=53 +AND=54 +AS=55 +ASC=56 +ASSIGN=57 +BY=58 CAST_OP=59 COLON=60 COMMA=61 @@ -70,70 +70,71 @@ LIKE=69 NOT=70 NULL=71 NULLS=72 -OR=73 -PARAM=74 -RLIKE=75 -TRUE=76 -EQ=77 -CIEQ=78 -NEQ=79 -LT=80 -LTE=81 -GT=82 -GTE=83 -PLUS=84 -MINUS=85 -ASTERISK=86 -SLASH=87 -PERCENT=88 -LEFT_BRACES=89 -RIGHT_BRACES=90 -DOUBLE_PARAMS=91 -NAMED_OR_POSITIONAL_PARAM=92 -NAMED_OR_POSITIONAL_DOUBLE_PARAMS=93 -OPENING_BRACKET=94 -CLOSING_BRACKET=95 -LP=96 -RP=97 -UNQUOTED_IDENTIFIER=98 -QUOTED_IDENTIFIER=99 -EXPR_LINE_COMMENT=100 -EXPR_MULTILINE_COMMENT=101 -EXPR_WS=102 -METADATA=103 -UNQUOTED_SOURCE=104 -FROM_LINE_COMMENT=105 -FROM_MULTILINE_COMMENT=106 -FROM_WS=107 -FORK_WS=108 -FORK_LINE_COMMENT=109 -FORK_MULTILINE_COMMENT=110 -JOIN=111 -USING=112 -JOIN_LINE_COMMENT=113 -JOIN_MULTILINE_COMMENT=114 -JOIN_WS=115 -LOOKUP_LINE_COMMENT=116 -LOOKUP_MULTILINE_COMMENT=117 -LOOKUP_WS=118 -LOOKUP_FIELD_LINE_COMMENT=119 -LOOKUP_FIELD_MULTILINE_COMMENT=120 -LOOKUP_FIELD_WS=121 -MVEXPAND_LINE_COMMENT=122 -MVEXPAND_MULTILINE_COMMENT=123 -MVEXPAND_WS=124 -ID_PATTERN=125 -PROJECT_LINE_COMMENT=126 -PROJECT_MULTILINE_COMMENT=127 -PROJECT_WS=128 -AS=129 -RENAME_LINE_COMMENT=130 -RENAME_MULTILINE_COMMENT=131 -RENAME_WS=132 -INFO=133 -SHOW_LINE_COMMENT=134 -SHOW_MULTILINE_COMMENT=135 -SHOW_WS=136 +ON=73 +OR=74 +PARAM=75 +RLIKE=76 +TRUE=77 +WITH=78 +EQ=79 +CIEQ=80 +NEQ=81 +LT=82 +LTE=83 +GT=84 +GTE=85 +PLUS=86 +MINUS=87 +ASTERISK=88 +SLASH=89 +PERCENT=90 +LEFT_BRACES=91 +RIGHT_BRACES=92 +DOUBLE_PARAMS=93 +NAMED_OR_POSITIONAL_PARAM=94 +NAMED_OR_POSITIONAL_DOUBLE_PARAMS=95 +OPENING_BRACKET=96 +CLOSING_BRACKET=97 +LP=98 +RP=99 +UNQUOTED_IDENTIFIER=100 +QUOTED_IDENTIFIER=101 +EXPR_LINE_COMMENT=102 +EXPR_MULTILINE_COMMENT=103 +EXPR_WS=104 +METADATA=105 +UNQUOTED_SOURCE=106 +FROM_LINE_COMMENT=107 +FROM_MULTILINE_COMMENT=108 +FROM_WS=109 +FORK_WS=110 +FORK_LINE_COMMENT=111 +FORK_MULTILINE_COMMENT=112 +JOIN=113 +USING=114 +JOIN_LINE_COMMENT=115 +JOIN_MULTILINE_COMMENT=116 +JOIN_WS=117 +LOOKUP_LINE_COMMENT=118 +LOOKUP_MULTILINE_COMMENT=119 +LOOKUP_WS=120 +LOOKUP_FIELD_LINE_COMMENT=121 +LOOKUP_FIELD_MULTILINE_COMMENT=122 +LOOKUP_FIELD_WS=123 +MVEXPAND_LINE_COMMENT=124 +MVEXPAND_MULTILINE_COMMENT=125 +MVEXPAND_WS=126 +ID_PATTERN=127 +PROJECT_LINE_COMMENT=128 +PROJECT_MULTILINE_COMMENT=129 +PROJECT_WS=130 +RENAME_LINE_COMMENT=131 +RENAME_MULTILINE_COMMENT=132 +RENAME_WS=133 +INFO=134 +SHOW_LINE_COMMENT=135 +SHOW_MULTILINE_COMMENT=136 +SHOW_WS=137 'enrich'=5 'explain'=6 'dissect'=7 @@ -144,20 +145,19 @@ SHOW_WS=136 'sort'=12 'stats'=13 'where'=14 -'from'=16 -'lookup'=19 -'mv_expand'=24 -'drop'=25 -'keep'=26 -'rename'=29 -'show'=30 -'on'=35 -'with'=36 -'|'=51 -'by'=55 -'and'=56 -'asc'=57 -'='=58 +'from'=17 +'lookup'=20 +'mv_expand'=25 +'drop'=26 +'keep'=27 +'rename'=30 +'show'=31 +'|'=50 +'and'=54 +'as'=55 +'asc'=56 +'='=57 +'by'=58 '::'=59 ':'=60 ','=61 @@ -172,29 +172,30 @@ SHOW_WS=136 'not'=70 'null'=71 'nulls'=72 -'or'=73 -'?'=74 -'rlike'=75 -'true'=76 -'=='=77 -'=~'=78 -'!='=79 -'<'=80 -'<='=81 -'>'=82 -'>='=83 -'+'=84 -'-'=85 -'*'=86 -'/'=87 -'%'=88 -'{'=89 -'}'=90 -'??'=91 -']'=95 -')'=97 -'metadata'=103 -'join'=111 -'USING'=112 -'as'=129 -'info'=133 +'on'=73 +'or'=74 +'?'=75 +'rlike'=76 +'true'=77 +'with'=78 +'=='=79 +'=~'=80 +'!='=81 +'<'=82 +'<='=83 +'>'=84 +'>='=85 +'+'=86 +'-'=87 +'*'=88 +'/'=89 +'%'=90 +'{'=91 +'}'=92 +'??'=93 +']'=97 +')'=99 +'metadata'=105 +'join'=113 +'USING'=114 +'info'=134 diff --git a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.ts b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.ts index bb6711a9c38f9..71e21d997b340 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser.ts @@ -43,49 +43,49 @@ export default class esql_parser extends parser_config { public static readonly STATS = 13; public static readonly WHERE = 14; public static readonly DEV_INLINESTATS = 15; - public static readonly FROM = 16; - public static readonly DEV_METRICS = 17; - public static readonly DEV_FORK = 18; - public static readonly JOIN_LOOKUP = 19; - public static readonly DEV_JOIN_FULL = 20; - public static readonly DEV_JOIN_LEFT = 21; - public static readonly DEV_JOIN_RIGHT = 22; - public static readonly DEV_LOOKUP = 23; - public static readonly MV_EXPAND = 24; - public static readonly DROP = 25; - public static readonly KEEP = 26; - public static readonly DEV_INSIST = 27; - public static readonly DEV_RRF = 28; - public static readonly RENAME = 29; - public static readonly SHOW = 30; - public static readonly UNKNOWN_CMD = 31; - public static readonly CHANGE_POINT_LINE_COMMENT = 32; - public static readonly CHANGE_POINT_MULTILINE_COMMENT = 33; - public static readonly CHANGE_POINT_WS = 34; - public static readonly ON = 35; - public static readonly WITH = 36; - public static readonly ENRICH_POLICY_NAME = 37; - public static readonly ENRICH_LINE_COMMENT = 38; - public static readonly ENRICH_MULTILINE_COMMENT = 39; - public static readonly ENRICH_WS = 40; - public static readonly ENRICH_FIELD_LINE_COMMENT = 41; - public static readonly ENRICH_FIELD_MULTILINE_COMMENT = 42; - public static readonly ENRICH_FIELD_WS = 43; - public static readonly SETTING = 44; - public static readonly SETTING_LINE_COMMENT = 45; - public static readonly SETTTING_MULTILINE_COMMENT = 46; - public static readonly SETTING_WS = 47; - public static readonly EXPLAIN_WS = 48; - public static readonly EXPLAIN_LINE_COMMENT = 49; - public static readonly EXPLAIN_MULTILINE_COMMENT = 50; - public static readonly PIPE = 51; - public static readonly QUOTED_STRING = 52; - public static readonly INTEGER_LITERAL = 53; - public static readonly DECIMAL_LITERAL = 54; - public static readonly BY = 55; - public static readonly AND = 56; - public static readonly ASC = 57; - public static readonly ASSIGN = 58; + public static readonly DEV_RERANK = 16; + public static readonly FROM = 17; + public static readonly DEV_TIME_SERIES = 18; + public static readonly DEV_FORK = 19; + public static readonly JOIN_LOOKUP = 20; + public static readonly DEV_JOIN_FULL = 21; + public static readonly DEV_JOIN_LEFT = 22; + public static readonly DEV_JOIN_RIGHT = 23; + public static readonly DEV_LOOKUP = 24; + public static readonly MV_EXPAND = 25; + public static readonly DROP = 26; + public static readonly KEEP = 27; + public static readonly DEV_INSIST = 28; + public static readonly DEV_RRF = 29; + public static readonly RENAME = 30; + public static readonly SHOW = 31; + public static readonly UNKNOWN_CMD = 32; + public static readonly CHANGE_POINT_LINE_COMMENT = 33; + public static readonly CHANGE_POINT_MULTILINE_COMMENT = 34; + public static readonly CHANGE_POINT_WS = 35; + public static readonly ENRICH_POLICY_NAME = 36; + public static readonly ENRICH_LINE_COMMENT = 37; + public static readonly ENRICH_MULTILINE_COMMENT = 38; + public static readonly ENRICH_WS = 39; + public static readonly ENRICH_FIELD_LINE_COMMENT = 40; + public static readonly ENRICH_FIELD_MULTILINE_COMMENT = 41; + public static readonly ENRICH_FIELD_WS = 42; + public static readonly SETTING = 43; + public static readonly SETTING_LINE_COMMENT = 44; + public static readonly SETTTING_MULTILINE_COMMENT = 45; + public static readonly SETTING_WS = 46; + public static readonly EXPLAIN_WS = 47; + public static readonly EXPLAIN_LINE_COMMENT = 48; + public static readonly EXPLAIN_MULTILINE_COMMENT = 49; + public static readonly PIPE = 50; + public static readonly QUOTED_STRING = 51; + public static readonly INTEGER_LITERAL = 52; + public static readonly DECIMAL_LITERAL = 53; + public static readonly AND = 54; + public static readonly AS = 55; + public static readonly ASC = 56; + public static readonly ASSIGN = 57; + public static readonly BY = 58; public static readonly CAST_OP = 59; public static readonly COLON = 60; public static readonly COMMA = 61; @@ -100,70 +100,71 @@ export default class esql_parser extends parser_config { public static readonly NOT = 70; public static readonly NULL = 71; public static readonly NULLS = 72; - public static readonly OR = 73; - public static readonly PARAM = 74; - public static readonly RLIKE = 75; - public static readonly TRUE = 76; - public static readonly EQ = 77; - public static readonly CIEQ = 78; - public static readonly NEQ = 79; - public static readonly LT = 80; - public static readonly LTE = 81; - public static readonly GT = 82; - public static readonly GTE = 83; - public static readonly PLUS = 84; - public static readonly MINUS = 85; - public static readonly ASTERISK = 86; - public static readonly SLASH = 87; - public static readonly PERCENT = 88; - public static readonly LEFT_BRACES = 89; - public static readonly RIGHT_BRACES = 90; - public static readonly DOUBLE_PARAMS = 91; - public static readonly NAMED_OR_POSITIONAL_PARAM = 92; - public static readonly NAMED_OR_POSITIONAL_DOUBLE_PARAMS = 93; - public static readonly OPENING_BRACKET = 94; - public static readonly CLOSING_BRACKET = 95; - public static readonly LP = 96; - public static readonly RP = 97; - public static readonly UNQUOTED_IDENTIFIER = 98; - public static readonly QUOTED_IDENTIFIER = 99; - public static readonly EXPR_LINE_COMMENT = 100; - public static readonly EXPR_MULTILINE_COMMENT = 101; - public static readonly EXPR_WS = 102; - public static readonly METADATA = 103; - public static readonly UNQUOTED_SOURCE = 104; - public static readonly FROM_LINE_COMMENT = 105; - public static readonly FROM_MULTILINE_COMMENT = 106; - public static readonly FROM_WS = 107; - public static readonly FORK_WS = 108; - public static readonly FORK_LINE_COMMENT = 109; - public static readonly FORK_MULTILINE_COMMENT = 110; - public static readonly JOIN = 111; - public static readonly USING = 112; - public static readonly JOIN_LINE_COMMENT = 113; - public static readonly JOIN_MULTILINE_COMMENT = 114; - public static readonly JOIN_WS = 115; - public static readonly LOOKUP_LINE_COMMENT = 116; - public static readonly LOOKUP_MULTILINE_COMMENT = 117; - public static readonly LOOKUP_WS = 118; - public static readonly LOOKUP_FIELD_LINE_COMMENT = 119; - public static readonly LOOKUP_FIELD_MULTILINE_COMMENT = 120; - public static readonly LOOKUP_FIELD_WS = 121; - public static readonly MVEXPAND_LINE_COMMENT = 122; - public static readonly MVEXPAND_MULTILINE_COMMENT = 123; - public static readonly MVEXPAND_WS = 124; - public static readonly ID_PATTERN = 125; - public static readonly PROJECT_LINE_COMMENT = 126; - public static readonly PROJECT_MULTILINE_COMMENT = 127; - public static readonly PROJECT_WS = 128; - public static readonly AS = 129; - public static readonly RENAME_LINE_COMMENT = 130; - public static readonly RENAME_MULTILINE_COMMENT = 131; - public static readonly RENAME_WS = 132; - public static readonly INFO = 133; - public static readonly SHOW_LINE_COMMENT = 134; - public static readonly SHOW_MULTILINE_COMMENT = 135; - public static readonly SHOW_WS = 136; + public static readonly ON = 73; + public static readonly OR = 74; + public static readonly PARAM = 75; + public static readonly RLIKE = 76; + public static readonly TRUE = 77; + public static readonly WITH = 78; + public static readonly EQ = 79; + public static readonly CIEQ = 80; + public static readonly NEQ = 81; + public static readonly LT = 82; + public static readonly LTE = 83; + public static readonly GT = 84; + public static readonly GTE = 85; + public static readonly PLUS = 86; + public static readonly MINUS = 87; + public static readonly ASTERISK = 88; + public static readonly SLASH = 89; + public static readonly PERCENT = 90; + public static readonly LEFT_BRACES = 91; + public static readonly RIGHT_BRACES = 92; + public static readonly DOUBLE_PARAMS = 93; + public static readonly NAMED_OR_POSITIONAL_PARAM = 94; + public static readonly NAMED_OR_POSITIONAL_DOUBLE_PARAMS = 95; + public static readonly OPENING_BRACKET = 96; + public static readonly CLOSING_BRACKET = 97; + public static readonly LP = 98; + public static readonly RP = 99; + public static readonly UNQUOTED_IDENTIFIER = 100; + public static readonly QUOTED_IDENTIFIER = 101; + public static readonly EXPR_LINE_COMMENT = 102; + public static readonly EXPR_MULTILINE_COMMENT = 103; + public static readonly EXPR_WS = 104; + public static readonly METADATA = 105; + public static readonly UNQUOTED_SOURCE = 106; + public static readonly FROM_LINE_COMMENT = 107; + public static readonly FROM_MULTILINE_COMMENT = 108; + public static readonly FROM_WS = 109; + public static readonly FORK_WS = 110; + public static readonly FORK_LINE_COMMENT = 111; + public static readonly FORK_MULTILINE_COMMENT = 112; + public static readonly JOIN = 113; + public static readonly USING = 114; + public static readonly JOIN_LINE_COMMENT = 115; + public static readonly JOIN_MULTILINE_COMMENT = 116; + public static readonly JOIN_WS = 117; + public static readonly LOOKUP_LINE_COMMENT = 118; + public static readonly LOOKUP_MULTILINE_COMMENT = 119; + public static readonly LOOKUP_WS = 120; + public static readonly LOOKUP_FIELD_LINE_COMMENT = 121; + public static readonly LOOKUP_FIELD_MULTILINE_COMMENT = 122; + public static readonly LOOKUP_FIELD_WS = 123; + public static readonly MVEXPAND_LINE_COMMENT = 124; + public static readonly MVEXPAND_MULTILINE_COMMENT = 125; + public static readonly MVEXPAND_WS = 126; + public static readonly ID_PATTERN = 127; + public static readonly PROJECT_LINE_COMMENT = 128; + public static readonly PROJECT_MULTILINE_COMMENT = 129; + public static readonly PROJECT_WS = 130; + public static readonly RENAME_LINE_COMMENT = 131; + public static readonly RENAME_MULTILINE_COMMENT = 132; + public static readonly RENAME_WS = 133; + public static readonly INFO = 134; + public static readonly SHOW_LINE_COMMENT = 135; + public static readonly SHOW_MULTILINE_COMMENT = 136; + public static readonly SHOW_WS = 137; public static override readonly EOF = Token.EOF; public static readonly RULE_singleStatement = 0; public static readonly RULE_query = 1; @@ -175,7 +176,7 @@ export default class esql_parser extends parser_config { public static readonly RULE_fields = 7; public static readonly RULE_field = 8; public static readonly RULE_fromCommand = 9; - public static readonly RULE_metricsCommand = 10; + public static readonly RULE_timeSeriesCommand = 10; public static readonly RULE_indexPatternAndMetadataFields = 11; public static readonly RULE_indexPattern = 12; public static readonly RULE_clusterString = 13; @@ -221,27 +222,28 @@ export default class esql_parser extends parser_config { public static readonly RULE_forkSubQueryCommand = 53; public static readonly RULE_forkSubQueryProcessingCommand = 54; public static readonly RULE_rrfCommand = 55; - public static readonly RULE_booleanExpression = 56; - public static readonly RULE_regexBooleanExpression = 57; - public static readonly RULE_matchBooleanExpression = 58; - public static readonly RULE_valueExpression = 59; - public static readonly RULE_operatorExpression = 60; - public static readonly RULE_primaryExpression = 61; - public static readonly RULE_functionExpression = 62; - public static readonly RULE_functionName = 63; - public static readonly RULE_mapExpression = 64; - public static readonly RULE_entryExpression = 65; - public static readonly RULE_constant = 66; - public static readonly RULE_booleanValue = 67; - public static readonly RULE_numericValue = 68; - public static readonly RULE_decimalValue = 69; - public static readonly RULE_integerValue = 70; - public static readonly RULE_string = 71; - public static readonly RULE_comparisonOperator = 72; - public static readonly RULE_joinCommand = 73; - public static readonly RULE_joinTarget = 74; - public static readonly RULE_joinCondition = 75; - public static readonly RULE_joinPredicate = 76; + public static readonly RULE_rerankCommand = 56; + public static readonly RULE_booleanExpression = 57; + public static readonly RULE_regexBooleanExpression = 58; + public static readonly RULE_matchBooleanExpression = 59; + public static readonly RULE_valueExpression = 60; + public static readonly RULE_operatorExpression = 61; + public static readonly RULE_primaryExpression = 62; + public static readonly RULE_functionExpression = 63; + public static readonly RULE_functionName = 64; + public static readonly RULE_mapExpression = 65; + public static readonly RULE_entryExpression = 66; + public static readonly RULE_constant = 67; + public static readonly RULE_booleanValue = 68; + public static readonly RULE_numericValue = 69; + public static readonly RULE_decimalValue = 70; + public static readonly RULE_integerValue = 71; + public static readonly RULE_string = 72; + public static readonly RULE_comparisonOperator = 73; + public static readonly RULE_joinCommand = 74; + public static readonly RULE_joinTarget = 75; + public static readonly RULE_joinCondition = 76; + public static readonly RULE_joinPredicate = 77; public static readonly literalNames: (string | null)[] = [ null, null, null, null, null, "'enrich'", @@ -251,8 +253,9 @@ export default class esql_parser extends parser_config { "'limit'", "'row'", "'sort'", "'stats'", "'where'", null, - "'from'", null, - null, "'lookup'", + null, "'from'", + null, null, + "'lookup'", null, null, null, null, "'mv_expand'", @@ -261,8 +264,7 @@ export default class esql_parser extends parser_config { "'rename'", "'show'", null, null, null, - null, "'on'", - "'with'", null, + null, null, null, null, null, null, null, null, @@ -271,31 +273,33 @@ export default class esql_parser extends parser_config { null, null, null, "'|'", null, null, - null, "'by'", - "'and'", "'asc'", - "'='", "'::'", - "':'", "','", - "'desc'", "'.'", - "'false'", "'first'", - "'in'", "'is'", - "'last'", "'like'", - "'not'", "'null'", - "'nulls'", "'or'", + null, "'and'", + "'as'", "'asc'", + "'='", "'by'", + "'::'", "':'", + "','", "'desc'", + "'.'", "'false'", + "'first'", "'in'", + "'is'", "'last'", + "'like'", "'not'", + "'null'", "'nulls'", + "'on'", "'or'", "'?'", "'rlike'", - "'true'", "'=='", - "'=~'", "'!='", - "'<'", "'<='", - "'>'", "'>='", - "'+'", "'-'", - "'*'", "'/'", - "'%'", "'{'", - "'}'", "'??'", + "'true'", "'with'", + "'=='", "'=~'", + "'!='", "'<'", + "'<='", "'>'", + "'>='", "'+'", + "'-'", "'*'", + "'/'", "'%'", + "'{'", "'}'", + "'??'", null, null, null, - null, "']'", - null, "')'", + "']'", null, + "')'", null, null, null, null, null, - null, "'metadata'", + "'metadata'", null, null, null, null, null, null, @@ -308,9 +312,9 @@ export default class esql_parser extends parser_config { null, null, null, null, null, null, - null, "'as'", null, null, - null, "'info'" ]; + null, null, + "'info'" ]; public static readonly symbolicNames: (string | null)[] = [ null, "LINE_COMMENT", "MULTILINE_COMMENT", "WS", "DEV_CHANGE_POINT", @@ -320,7 +324,8 @@ export default class esql_parser extends parser_config { "LIMIT", "ROW", "SORT", "STATS", "WHERE", "DEV_INLINESTATS", - "FROM", "DEV_METRICS", + "DEV_RERANK", + "FROM", "DEV_TIME_SERIES", "DEV_FORK", "JOIN_LOOKUP", "DEV_JOIN_FULL", @@ -336,7 +341,6 @@ export default class esql_parser extends parser_config { "CHANGE_POINT_LINE_COMMENT", "CHANGE_POINT_MULTILINE_COMMENT", "CHANGE_POINT_WS", - "ON", "WITH", "ENRICH_POLICY_NAME", "ENRICH_LINE_COMMENT", "ENRICH_MULTILINE_COMMENT", @@ -354,18 +358,19 @@ export default class esql_parser extends parser_config { "PIPE", "QUOTED_STRING", "INTEGER_LITERAL", "DECIMAL_LITERAL", - "BY", "AND", + "AND", "AS", "ASC", "ASSIGN", - "CAST_OP", + "BY", "CAST_OP", "COLON", "COMMA", "DESC", "DOT", "FALSE", "FIRST", "IN", "IS", "LAST", "LIKE", "NOT", "NULL", - "NULLS", "OR", - "PARAM", "RLIKE", - "TRUE", "EQ", + "NULLS", "ON", + "OR", "PARAM", + "RLIKE", "TRUE", + "WITH", "EQ", "CIEQ", "NEQ", "LT", "LTE", "GT", "GTE", @@ -410,7 +415,7 @@ export default class esql_parser extends parser_config { "PROJECT_LINE_COMMENT", "PROJECT_MULTILINE_COMMENT", "PROJECT_WS", - "AS", "RENAME_LINE_COMMENT", + "RENAME_LINE_COMMENT", "RENAME_MULTILINE_COMMENT", "RENAME_WS", "INFO", "SHOW_LINE_COMMENT", @@ -419,7 +424,7 @@ export default class esql_parser extends parser_config { // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ "singleStatement", "query", "sourceCommand", "processingCommand", "whereCommand", - "dataType", "rowCommand", "fields", "field", "fromCommand", "metricsCommand", + "dataType", "rowCommand", "fields", "field", "fromCommand", "timeSeriesCommand", "indexPatternAndMetadataFields", "indexPattern", "clusterString", "selectorString", "indexString", "metadata", "evalCommand", "statsCommand", "aggFields", "aggField", "qualifiedName", "qualifiedNamePattern", "qualifiedNamePatterns", @@ -430,11 +435,12 @@ export default class esql_parser extends parser_config { "showCommand", "enrichCommand", "enrichWithClause", "lookupCommand", "inlinestatsCommand", "changePointCommand", "insistCommand", "forkCommand", "forkSubQueries", "forkSubQuery", "forkSubQueryCommand", "forkSubQueryProcessingCommand", - "rrfCommand", "booleanExpression", "regexBooleanExpression", "matchBooleanExpression", - "valueExpression", "operatorExpression", "primaryExpression", "functionExpression", - "functionName", "mapExpression", "entryExpression", "constant", "booleanValue", - "numericValue", "decimalValue", "integerValue", "string", "comparisonOperator", - "joinCommand", "joinTarget", "joinCondition", "joinPredicate", + "rrfCommand", "rerankCommand", "booleanExpression", "regexBooleanExpression", + "matchBooleanExpression", "valueExpression", "operatorExpression", "primaryExpression", + "functionExpression", "functionName", "mapExpression", "entryExpression", + "constant", "booleanValue", "numericValue", "decimalValue", "integerValue", + "string", "comparisonOperator", "joinCommand", "joinTarget", "joinCondition", + "joinPredicate", ]; public get grammarFileName(): string { return "esql_parser.g4"; } public get literalNames(): (string | null)[] { return esql_parser.literalNames; } @@ -457,9 +463,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 154; + this.state = 156; this.query(0); - this.state = 155; + this.state = 157; this.match(esql_parser.EOF); } } @@ -501,11 +507,11 @@ export default class esql_parser extends parser_config { this._ctx = localctx; _prevctx = localctx; - this.state = 158; + this.state = 160; this.sourceCommand(); } this._ctx.stop = this._input.LT(-1); - this.state = 165; + this.state = 167; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 0, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -518,18 +524,18 @@ export default class esql_parser extends parser_config { { localctx = new CompositeQueryContext(this, new QueryContext(this, _parentctx, _parentState)); this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_query); - this.state = 160; + this.state = 162; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 161; + this.state = 163; this.match(esql_parser.PIPE); - this.state = 162; + this.state = 164; this.processingCommand(); } } } - this.state = 167; + this.state = 169; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 0, this._ctx); } @@ -554,46 +560,46 @@ export default class esql_parser extends parser_config { let localctx: SourceCommandContext = new SourceCommandContext(this, this._ctx, this.state); this.enterRule(localctx, 4, esql_parser.RULE_sourceCommand); try { - this.state = 174; + this.state = 176; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 1, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 168; + this.state = 170; this.explainCommand(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 169; + this.state = 171; this.fromCommand(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 170; + this.state = 172; this.rowCommand(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 171; + this.state = 173; this.showCommand(); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 172; + this.state = 174; if (!(this.isDevVersion())) { throw this.createFailedPredicateException("this.isDevVersion()"); } - this.state = 173; - this.metricsCommand(); + this.state = 175; + this.timeSeriesCommand(); } break; } @@ -617,163 +623,174 @@ export default class esql_parser extends parser_config { let localctx: ProcessingCommandContext = new ProcessingCommandContext(this, this._ctx, this.state); this.enterRule(localctx, 6, esql_parser.RULE_processingCommand); try { - this.state = 201; + this.state = 205; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 2, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 176; + this.state = 178; this.evalCommand(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 177; + this.state = 179; this.whereCommand(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 178; + this.state = 180; this.keepCommand(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 179; + this.state = 181; this.limitCommand(); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 180; + this.state = 182; this.statsCommand(); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 181; + this.state = 183; this.sortCommand(); } break; case 7: this.enterOuterAlt(localctx, 7); { - this.state = 182; + this.state = 184; this.dropCommand(); } break; case 8: this.enterOuterAlt(localctx, 8); { - this.state = 183; + this.state = 185; this.renameCommand(); } break; case 9: this.enterOuterAlt(localctx, 9); { - this.state = 184; + this.state = 186; this.dissectCommand(); } break; case 10: this.enterOuterAlt(localctx, 10); { - this.state = 185; + this.state = 187; this.grokCommand(); } break; case 11: this.enterOuterAlt(localctx, 11); { - this.state = 186; + this.state = 188; this.enrichCommand(); } break; case 12: this.enterOuterAlt(localctx, 12); { - this.state = 187; + this.state = 189; this.mvExpandCommand(); } break; case 13: this.enterOuterAlt(localctx, 13); { - this.state = 188; + this.state = 190; this.joinCommand(); } break; case 14: this.enterOuterAlt(localctx, 14); { - this.state = 189; + this.state = 191; if (!(this.isDevVersion())) { throw this.createFailedPredicateException("this.isDevVersion()"); } - this.state = 190; + this.state = 192; this.inlinestatsCommand(); } break; case 15: this.enterOuterAlt(localctx, 15); { - this.state = 191; + this.state = 193; if (!(this.isDevVersion())) { throw this.createFailedPredicateException("this.isDevVersion()"); } - this.state = 192; + this.state = 194; this.lookupCommand(); } break; case 16: this.enterOuterAlt(localctx, 16); { - this.state = 193; + this.state = 195; if (!(this.isDevVersion())) { throw this.createFailedPredicateException("this.isDevVersion()"); } - this.state = 194; + this.state = 196; this.changePointCommand(); } break; case 17: this.enterOuterAlt(localctx, 17); { - this.state = 195; + this.state = 197; if (!(this.isDevVersion())) { throw this.createFailedPredicateException("this.isDevVersion()"); } - this.state = 196; + this.state = 198; this.insistCommand(); } break; case 18: this.enterOuterAlt(localctx, 18); { - this.state = 197; + this.state = 199; if (!(this.isDevVersion())) { throw this.createFailedPredicateException("this.isDevVersion()"); } - this.state = 198; + this.state = 200; this.forkCommand(); } break; case 19: this.enterOuterAlt(localctx, 19); { - this.state = 199; + this.state = 201; if (!(this.isDevVersion())) { throw this.createFailedPredicateException("this.isDevVersion()"); } - this.state = 200; + this.state = 202; + this.rerankCommand(); + } + break; + case 20: + this.enterOuterAlt(localctx, 20); + { + this.state = 203; + if (!(this.isDevVersion())) { + throw this.createFailedPredicateException("this.isDevVersion()"); + } + this.state = 204; this.rrfCommand(); } break; @@ -800,9 +817,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 203; + this.state = 207; this.match(esql_parser.WHERE); - this.state = 204; + this.state = 208; this.booleanExpression(0); } } @@ -828,7 +845,7 @@ export default class esql_parser extends parser_config { localctx = new ToDataTypeContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 206; + this.state = 210; this.identifier(); } } @@ -853,9 +870,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 208; + this.state = 212; this.match(esql_parser.ROW); - this.state = 209; + this.state = 213; this.fields(); } } @@ -881,23 +898,23 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 211; + this.state = 215; this.field(); - this.state = 216; + this.state = 220; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 3, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 212; + this.state = 216; this.match(esql_parser.COMMA); - this.state = 213; + this.state = 217; this.field(); } } } - this.state = 218; + this.state = 222; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 3, this._ctx); } @@ -924,19 +941,19 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 222; + this.state = 226; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 4, this._ctx) ) { case 1: { - this.state = 219; + this.state = 223; this.qualifiedName(); - this.state = 220; + this.state = 224; this.match(esql_parser.ASSIGN); } break; } - this.state = 224; + this.state = 228; this.booleanExpression(0); } } @@ -961,9 +978,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 226; + this.state = 230; this.match(esql_parser.FROM); - this.state = 227; + this.state = 231; this.indexPatternAndMetadataFields(); } } @@ -982,15 +999,15 @@ export default class esql_parser extends parser_config { return localctx; } // @RuleVersion(0) - public metricsCommand(): MetricsCommandContext { - let localctx: MetricsCommandContext = new MetricsCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 20, esql_parser.RULE_metricsCommand); + public timeSeriesCommand(): TimeSeriesCommandContext { + let localctx: TimeSeriesCommandContext = new TimeSeriesCommandContext(this, this._ctx, this.state); + this.enterRule(localctx, 20, esql_parser.RULE_timeSeriesCommand); try { this.enterOuterAlt(localctx, 1); { - this.state = 229; - this.match(esql_parser.DEV_METRICS); - this.state = 230; + this.state = 233; + this.match(esql_parser.DEV_TIME_SERIES); + this.state = 234; this.indexPatternAndMetadataFields(); } } @@ -1016,32 +1033,32 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 232; + this.state = 236; this.indexPattern(); - this.state = 237; + this.state = 241; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 5, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 233; + this.state = 237; this.match(esql_parser.COMMA); - this.state = 234; + this.state = 238; this.indexPattern(); } } } - this.state = 239; + this.state = 243; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 5, this._ctx); } - this.state = 241; + this.state = 245; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 6, this._ctx) ) { case 1: { - this.state = 240; + this.state = 244; this.metadata(); } break; @@ -1067,45 +1084,45 @@ export default class esql_parser extends parser_config { let localctx: IndexPatternContext = new IndexPatternContext(this, this._ctx, this.state); this.enterRule(localctx, 24, esql_parser.RULE_indexPattern); try { - this.state = 255; + this.state = 259; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 9, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 246; + this.state = 250; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 7, this._ctx) ) { case 1: { - this.state = 243; + this.state = 247; this.clusterString(); - this.state = 244; + this.state = 248; this.match(esql_parser.COLON); } break; } - this.state = 248; + this.state = 252; this.indexString(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 249; + this.state = 253; if (!(this.isDevVersion())) { throw this.createFailedPredicateException("this.isDevVersion()"); } - this.state = 250; + this.state = 254; this.indexString(); - this.state = 253; + this.state = 257; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 8, this._ctx) ) { case 1: { - this.state = 251; + this.state = 255; this.match(esql_parser.CAST_OP); - this.state = 252; + this.state = 256; this.selectorString(); } break; @@ -1136,9 +1153,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 257; + this.state = 261; _la = this._input.LA(1); - if(!(_la===52 || _la===104)) { + if(!(_la===51 || _la===106)) { this._errHandler.recoverInline(this); } else { @@ -1169,9 +1186,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 259; + this.state = 263; _la = this._input.LA(1); - if(!(_la===52 || _la===104)) { + if(!(_la===51 || _la===106)) { this._errHandler.recoverInline(this); } else { @@ -1202,9 +1219,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 261; + this.state = 265; _la = this._input.LA(1); - if(!(_la===52 || _la===104)) { + if(!(_la===51 || _la===106)) { this._errHandler.recoverInline(this); } else { @@ -1235,25 +1252,25 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 263; + this.state = 267; this.match(esql_parser.METADATA); - this.state = 264; + this.state = 268; this.match(esql_parser.UNQUOTED_SOURCE); - this.state = 269; + this.state = 273; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 10, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 265; + this.state = 269; this.match(esql_parser.COMMA); - this.state = 266; + this.state = 270; this.match(esql_parser.UNQUOTED_SOURCE); } } } - this.state = 271; + this.state = 275; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 10, this._ctx); } @@ -1280,9 +1297,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 272; + this.state = 276; this.match(esql_parser.EVAL); - this.state = 273; + this.state = 277; this.fields(); } } @@ -1307,26 +1324,26 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 275; + this.state = 279; this.match(esql_parser.STATS); - this.state = 277; + this.state = 281; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 11, this._ctx) ) { case 1: { - this.state = 276; + this.state = 280; localctx._stats = this.aggFields(); } break; } - this.state = 281; + this.state = 285; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 12, this._ctx) ) { case 1: { - this.state = 279; + this.state = 283; this.match(esql_parser.BY); - this.state = 280; + this.state = 284; localctx._grouping = this.fields(); } break; @@ -1355,23 +1372,23 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 283; + this.state = 287; this.aggField(); - this.state = 288; + this.state = 292; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 13, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 284; + this.state = 288; this.match(esql_parser.COMMA); - this.state = 285; + this.state = 289; this.aggField(); } } } - this.state = 290; + this.state = 294; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 13, this._ctx); } @@ -1398,16 +1415,16 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 291; + this.state = 295; this.field(); - this.state = 294; + this.state = 298; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 14, this._ctx) ) { case 1: { - this.state = 292; + this.state = 296; this.match(esql_parser.WHERE); - this.state = 293; + this.state = 297; this.booleanExpression(0); } break; @@ -1436,23 +1453,23 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 296; + this.state = 300; this.identifierOrParameter(); - this.state = 301; + this.state = 305; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 15, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 297; + this.state = 301; this.match(esql_parser.DOT); - this.state = 298; + this.state = 302; this.identifierOrParameter(); } } } - this.state = 303; + this.state = 307; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 15, this._ctx); } @@ -1480,23 +1497,23 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 304; + this.state = 308; this.identifierPattern(); - this.state = 309; + this.state = 313; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 16, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 305; + this.state = 309; this.match(esql_parser.DOT); - this.state = 306; + this.state = 310; this.identifierPattern(); } } } - this.state = 311; + this.state = 315; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 16, this._ctx); } @@ -1524,23 +1541,23 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 312; + this.state = 316; this.qualifiedNamePattern(); - this.state = 317; + this.state = 321; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 17, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 313; + this.state = 317; this.match(esql_parser.COMMA); - this.state = 314; + this.state = 318; this.qualifiedNamePattern(); } } } - this.state = 319; + this.state = 323; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 17, this._ctx); } @@ -1568,9 +1585,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 320; + this.state = 324; _la = this._input.LA(1); - if(!(_la===98 || _la===99)) { + if(!(_la===100 || _la===101)) { this._errHandler.recoverInline(this); } else { @@ -1598,29 +1615,29 @@ export default class esql_parser extends parser_config { let localctx: IdentifierPatternContext = new IdentifierPatternContext(this, this._ctx, this.state); this.enterRule(localctx, 50, esql_parser.RULE_identifierPattern); try { - this.state = 325; + this.state = 329; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 125: + case 127: this.enterOuterAlt(localctx, 1); { - this.state = 322; + this.state = 326; this.match(esql_parser.ID_PATTERN); } break; - case 74: - case 92: + case 75: + case 94: this.enterOuterAlt(localctx, 2); { - this.state = 323; + this.state = 327; this.parameter(); } break; - case 91: case 93: + case 95: this.enterOuterAlt(localctx, 3); { - this.state = 324; + this.state = 328; this.doubleParameter(); } break; @@ -1647,22 +1664,22 @@ export default class esql_parser extends parser_config { let localctx: ParameterContext = new ParameterContext(this, this._ctx, this.state); this.enterRule(localctx, 52, esql_parser.RULE_parameter); try { - this.state = 329; + this.state = 333; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 74: + case 75: localctx = new InputParamContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 327; + this.state = 331; this.match(esql_parser.PARAM); } break; - case 92: + case 94: localctx = new InputNamedOrPositionalParamContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 328; + this.state = 332; this.match(esql_parser.NAMED_OR_POSITIONAL_PARAM); } break; @@ -1689,22 +1706,22 @@ export default class esql_parser extends parser_config { let localctx: DoubleParameterContext = new DoubleParameterContext(this, this._ctx, this.state); this.enterRule(localctx, 54, esql_parser.RULE_doubleParameter); try { - this.state = 333; + this.state = 337; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 91: + case 93: localctx = new InputDoubleParamsContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 331; + this.state = 335; this.match(esql_parser.DOUBLE_PARAMS); } break; - case 93: + case 95: localctx = new InputNamedOrPositionalDoubleParamsContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 332; + this.state = 336; this.match(esql_parser.NAMED_OR_POSITIONAL_DOUBLE_PARAMS); } break; @@ -1731,30 +1748,30 @@ export default class esql_parser extends parser_config { let localctx: IdentifierOrParameterContext = new IdentifierOrParameterContext(this, this._ctx, this.state); this.enterRule(localctx, 56, esql_parser.RULE_identifierOrParameter); try { - this.state = 338; + this.state = 342; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 98: - case 99: + case 100: + case 101: this.enterOuterAlt(localctx, 1); { - this.state = 335; + this.state = 339; this.identifier(); } break; - case 74: - case 92: + case 75: + case 94: this.enterOuterAlt(localctx, 2); { - this.state = 336; + this.state = 340; this.parameter(); } break; - case 91: case 93: + case 95: this.enterOuterAlt(localctx, 3); { - this.state = 337; + this.state = 341; this.doubleParameter(); } break; @@ -1783,9 +1800,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 340; + this.state = 344; this.match(esql_parser.LIMIT); - this.state = 341; + this.state = 345; this.match(esql_parser.INTEGER_LITERAL); } } @@ -1811,25 +1828,25 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 343; + this.state = 347; this.match(esql_parser.SORT); - this.state = 344; + this.state = 348; this.orderExpression(); - this.state = 349; + this.state = 353; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 22, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 345; + this.state = 349; this.match(esql_parser.COMMA); - this.state = 346; + this.state = 350; this.orderExpression(); } } } - this.state = 351; + this.state = 355; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 22, this._ctx); } @@ -1857,17 +1874,17 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 352; + this.state = 356; this.booleanExpression(0); - this.state = 354; + this.state = 358; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 23, this._ctx) ) { case 1: { - this.state = 353; + this.state = 357; localctx._ordering = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===57 || _la===62)) { + if(!(_la===56 || _la===62)) { localctx._ordering = this._errHandler.recoverInline(this); } else { @@ -1877,14 +1894,14 @@ export default class esql_parser extends parser_config { } break; } - this.state = 358; + this.state = 362; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 24, this._ctx) ) { case 1: { - this.state = 356; + this.state = 360; this.match(esql_parser.NULLS); - this.state = 357; + this.state = 361; localctx._nullOrdering = this._input.LT(1); _la = this._input.LA(1); if(!(_la===65 || _la===68)) { @@ -1920,9 +1937,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 360; + this.state = 364; this.match(esql_parser.KEEP); - this.state = 361; + this.state = 365; this.qualifiedNamePatterns(); } } @@ -1947,9 +1964,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 363; + this.state = 367; this.match(esql_parser.DROP); - this.state = 364; + this.state = 368; this.qualifiedNamePatterns(); } } @@ -1975,25 +1992,25 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 366; + this.state = 370; this.match(esql_parser.RENAME); - this.state = 367; + this.state = 371; this.renameClause(); - this.state = 372; + this.state = 376; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 25, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 368; + this.state = 372; this.match(esql_parser.COMMA); - this.state = 369; + this.state = 373; this.renameClause(); } } } - this.state = 374; + this.state = 378; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 25, this._ctx); } @@ -2020,11 +2037,11 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 375; + this.state = 379; localctx._oldName = this.qualifiedNamePattern(); - this.state = 376; + this.state = 380; this.match(esql_parser.AS); - this.state = 377; + this.state = 381; localctx._newName = this.qualifiedNamePattern(); } } @@ -2049,18 +2066,18 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 379; + this.state = 383; this.match(esql_parser.DISSECT); - this.state = 380; + this.state = 384; this.primaryExpression(0); - this.state = 381; + this.state = 385; this.string_(); - this.state = 383; + this.state = 387; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 26, this._ctx) ) { case 1: { - this.state = 382; + this.state = 386; this.commandOptions(); } break; @@ -2088,11 +2105,11 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 385; + this.state = 389; this.match(esql_parser.GROK); - this.state = 386; + this.state = 390; this.primaryExpression(0); - this.state = 387; + this.state = 391; this.string_(); } } @@ -2117,9 +2134,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 389; + this.state = 393; this.match(esql_parser.MV_EXPAND); - this.state = 390; + this.state = 394; this.qualifiedName(); } } @@ -2145,23 +2162,23 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 392; + this.state = 396; this.commandOption(); - this.state = 397; + this.state = 401; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 27, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 393; + this.state = 397; this.match(esql_parser.COMMA); - this.state = 394; + this.state = 398; this.commandOption(); } } } - this.state = 399; + this.state = 403; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 27, this._ctx); } @@ -2188,11 +2205,11 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 400; + this.state = 404; this.identifier(); - this.state = 401; + this.state = 405; this.match(esql_parser.ASSIGN); - this.state = 402; + this.state = 406; this.constant(); } } @@ -2217,9 +2234,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 404; + this.state = 408; this.match(esql_parser.EXPLAIN); - this.state = 405; + this.state = 409; this.subqueryExpression(); } } @@ -2244,11 +2261,11 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 407; + this.state = 411; this.match(esql_parser.OPENING_BRACKET); - this.state = 408; + this.state = 412; this.query(0); - this.state = 409; + this.state = 413; this.match(esql_parser.CLOSING_BRACKET); } } @@ -2274,9 +2291,9 @@ export default class esql_parser extends parser_config { localctx = new ShowInfoContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 411; + this.state = 415; this.match(esql_parser.SHOW); - this.state = 412; + this.state = 416; this.match(esql_parser.INFO); } } @@ -2302,46 +2319,46 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 414; + this.state = 418; this.match(esql_parser.ENRICH); - this.state = 415; + this.state = 419; localctx._policyName = this.match(esql_parser.ENRICH_POLICY_NAME); - this.state = 418; + this.state = 422; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 28, this._ctx) ) { case 1: { - this.state = 416; + this.state = 420; this.match(esql_parser.ON); - this.state = 417; + this.state = 421; localctx._matchField = this.qualifiedNamePattern(); } break; } - this.state = 429; + this.state = 433; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 30, this._ctx) ) { case 1: { - this.state = 420; + this.state = 424; this.match(esql_parser.WITH); - this.state = 421; + this.state = 425; this.enrichWithClause(); - this.state = 426; + this.state = 430; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 29, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 422; + this.state = 426; this.match(esql_parser.COMMA); - this.state = 423; + this.state = 427; this.enrichWithClause(); } } } - this.state = 428; + this.state = 432; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 29, this._ctx); } @@ -2371,19 +2388,19 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 434; + this.state = 438; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 31, this._ctx) ) { case 1: { - this.state = 431; + this.state = 435; localctx._newName = this.qualifiedNamePattern(); - this.state = 432; + this.state = 436; this.match(esql_parser.ASSIGN); } break; } - this.state = 436; + this.state = 440; localctx._enrichField = this.qualifiedNamePattern(); } } @@ -2408,13 +2425,13 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 438; + this.state = 442; this.match(esql_parser.DEV_LOOKUP); - this.state = 439; + this.state = 443; localctx._tableName = this.indexPattern(); - this.state = 440; + this.state = 444; this.match(esql_parser.ON); - this.state = 441; + this.state = 445; localctx._matchFields = this.qualifiedNamePatterns(); } } @@ -2439,18 +2456,18 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 443; + this.state = 447; this.match(esql_parser.DEV_INLINESTATS); - this.state = 444; + this.state = 448; localctx._stats = this.aggFields(); - this.state = 447; + this.state = 451; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 32, this._ctx) ) { case 1: { - this.state = 445; + this.state = 449; this.match(esql_parser.BY); - this.state = 446; + this.state = 450; localctx._grouping = this.fields(); } break; @@ -2478,34 +2495,34 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 449; + this.state = 453; this.match(esql_parser.DEV_CHANGE_POINT); - this.state = 450; + this.state = 454; localctx._value = this.qualifiedName(); - this.state = 453; + this.state = 457; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 33, this._ctx) ) { case 1: { - this.state = 451; + this.state = 455; this.match(esql_parser.ON); - this.state = 452; + this.state = 456; localctx._key = this.qualifiedName(); } break; } - this.state = 460; + this.state = 464; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 34, this._ctx) ) { case 1: { - this.state = 455; + this.state = 459; this.match(esql_parser.AS); - this.state = 456; + this.state = 460; localctx._targetType = this.qualifiedName(); - this.state = 457; + this.state = 461; this.match(esql_parser.COMMA); - this.state = 458; + this.state = 462; localctx._targetPvalue = this.qualifiedName(); } break; @@ -2533,9 +2550,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 462; + this.state = 466; this.match(esql_parser.DEV_INSIST); - this.state = 463; + this.state = 467; this.qualifiedNamePatterns(); } } @@ -2560,9 +2577,9 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 465; + this.state = 469; this.match(esql_parser.DEV_FORK); - this.state = 466; + this.state = 470; this.forkSubQueries(); } } @@ -2588,7 +2605,7 @@ export default class esql_parser extends parser_config { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 469; + this.state = 473; this._errHandler.sync(this); _alt = 1; do { @@ -2596,7 +2613,7 @@ export default class esql_parser extends parser_config { case 1: { { - this.state = 468; + this.state = 472; this.forkSubQuery(); } } @@ -2604,7 +2621,7 @@ export default class esql_parser extends parser_config { default: throw new NoViableAltException(this); } - this.state = 471; + this.state = 475; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 35, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); @@ -2631,11 +2648,11 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 473; + this.state = 477; this.match(esql_parser.LP); - this.state = 474; + this.state = 478; this.forkSubQueryCommand(0); - this.state = 475; + this.state = 479; this.match(esql_parser.RP); } } @@ -2677,11 +2694,11 @@ export default class esql_parser extends parser_config { this._ctx = localctx; _prevctx = localctx; - this.state = 478; + this.state = 482; this.forkSubQueryProcessingCommand(); } this._ctx.stop = this._input.LT(-1); - this.state = 485; + this.state = 489; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 36, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -2694,18 +2711,18 @@ export default class esql_parser extends parser_config { { localctx = new CompositeForkSubQueryContext(this, new ForkSubQueryCommandContext(this, _parentctx, _parentState)); this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_forkSubQueryCommand); - this.state = 480; + this.state = 484; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 481; + this.state = 485; this.match(esql_parser.PIPE); - this.state = 482; + this.state = 486; this.forkSubQueryProcessingCommand(); } } } - this.state = 487; + this.state = 491; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 36, this._ctx); } @@ -2730,27 +2747,27 @@ export default class esql_parser extends parser_config { let localctx: ForkSubQueryProcessingCommandContext = new ForkSubQueryProcessingCommandContext(this, this._ctx, this.state); this.enterRule(localctx, 108, esql_parser.RULE_forkSubQueryProcessingCommand); try { - this.state = 491; + this.state = 495; this._errHandler.sync(this); switch (this._input.LA(1)) { case 14: this.enterOuterAlt(localctx, 1); { - this.state = 488; + this.state = 492; this.whereCommand(); } break; case 12: this.enterOuterAlt(localctx, 2); { - this.state = 489; + this.state = 493; this.sortCommand(); } break; case 10: this.enterOuterAlt(localctx, 3); { - this.state = 490; + this.state = 494; this.limitCommand(); } break; @@ -2779,7 +2796,7 @@ export default class esql_parser extends parser_config { try { this.enterOuterAlt(localctx, 1); { - this.state = 493; + this.state = 497; this.match(esql_parser.DEV_RRF); } } @@ -2797,6 +2814,41 @@ export default class esql_parser extends parser_config { } return localctx; } + // @RuleVersion(0) + public rerankCommand(): RerankCommandContext { + let localctx: RerankCommandContext = new RerankCommandContext(this, this._ctx, this.state); + this.enterRule(localctx, 112, esql_parser.RULE_rerankCommand); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 499; + this.match(esql_parser.DEV_RERANK); + this.state = 500; + localctx._queryText = this.constant(); + this.state = 501; + this.match(esql_parser.ON); + this.state = 502; + this.fields(); + this.state = 503; + this.match(esql_parser.WITH); + this.state = 504; + localctx._inferenceId = this.identifierOrParameter(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } public booleanExpression(): BooleanExpressionContext; public booleanExpression(_p: number): BooleanExpressionContext; @@ -2810,14 +2862,14 @@ export default class esql_parser extends parser_config { let _parentState: number = this.state; let localctx: BooleanExpressionContext = new BooleanExpressionContext(this, this._ctx, _parentState); let _prevctx: BooleanExpressionContext = localctx; - let _startState: number = 112; - this.enterRecursionRule(localctx, 112, esql_parser.RULE_booleanExpression, _p); + let _startState: number = 114; + this.enterRecursionRule(localctx, 114, esql_parser.RULE_booleanExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 524; + this.state = 535; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 41, this._ctx) ) { case 1: @@ -2826,9 +2878,9 @@ export default class esql_parser extends parser_config { this._ctx = localctx; _prevctx = localctx; - this.state = 496; + this.state = 507; this.match(esql_parser.NOT); - this.state = 497; + this.state = 508; this.booleanExpression(8); } break; @@ -2837,7 +2889,7 @@ export default class esql_parser extends parser_config { localctx = new BooleanDefaultContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 498; + this.state = 509; this.valueExpression(); } break; @@ -2846,7 +2898,7 @@ export default class esql_parser extends parser_config { localctx = new RegexExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 499; + this.state = 510; this.regexBooleanExpression(); } break; @@ -2855,41 +2907,41 @@ export default class esql_parser extends parser_config { localctx = new LogicalInContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 500; + this.state = 511; this.valueExpression(); - this.state = 502; + this.state = 513; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===70) { { - this.state = 501; + this.state = 512; this.match(esql_parser.NOT); } } - this.state = 504; + this.state = 515; this.match(esql_parser.IN); - this.state = 505; + this.state = 516; this.match(esql_parser.LP); - this.state = 506; + this.state = 517; this.valueExpression(); - this.state = 511; + this.state = 522; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===61) { { { - this.state = 507; + this.state = 518; this.match(esql_parser.COMMA); - this.state = 508; + this.state = 519; this.valueExpression(); } } - this.state = 513; + this.state = 524; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 514; + this.state = 525; this.match(esql_parser.RP); } break; @@ -2898,21 +2950,21 @@ export default class esql_parser extends parser_config { localctx = new IsNullContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 516; + this.state = 527; this.valueExpression(); - this.state = 517; + this.state = 528; this.match(esql_parser.IS); - this.state = 519; + this.state = 530; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===70) { { - this.state = 518; + this.state = 529; this.match(esql_parser.NOT); } } - this.state = 521; + this.state = 532; this.match(esql_parser.NULL); } break; @@ -2921,13 +2973,13 @@ export default class esql_parser extends parser_config { localctx = new MatchExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 523; + this.state = 534; this.matchBooleanExpression(); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 534; + this.state = 545; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 43, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -2937,7 +2989,7 @@ export default class esql_parser extends parser_config { } _prevctx = localctx; { - this.state = 532; + this.state = 543; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 42, this._ctx) ) { case 1: @@ -2945,13 +2997,13 @@ export default class esql_parser extends parser_config { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); (localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_booleanExpression); - this.state = 526; + this.state = 537; if (!(this.precpred(this._ctx, 5))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); } - this.state = 527; + this.state = 538; (localctx as LogicalBinaryContext)._operator = this.match(esql_parser.AND); - this.state = 528; + this.state = 539; (localctx as LogicalBinaryContext)._right = this.booleanExpression(6); } break; @@ -2960,20 +3012,20 @@ export default class esql_parser extends parser_config { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); (localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_booleanExpression); - this.state = 529; + this.state = 540; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 530; + this.state = 541; (localctx as LogicalBinaryContext)._operator = this.match(esql_parser.OR); - this.state = 531; + this.state = 542; (localctx as LogicalBinaryContext)._right = this.booleanExpression(5); } break; } } } - this.state = 536; + this.state = 547; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 43, this._ctx); } @@ -2996,51 +3048,51 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public regexBooleanExpression(): RegexBooleanExpressionContext { let localctx: RegexBooleanExpressionContext = new RegexBooleanExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 114, esql_parser.RULE_regexBooleanExpression); + this.enterRule(localctx, 116, esql_parser.RULE_regexBooleanExpression); let _la: number; try { - this.state = 551; + this.state = 562; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 46, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 537; + this.state = 548; this.valueExpression(); - this.state = 539; + this.state = 550; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===70) { { - this.state = 538; + this.state = 549; this.match(esql_parser.NOT); } } - this.state = 541; + this.state = 552; localctx._kind = this.match(esql_parser.LIKE); - this.state = 542; + this.state = 553; localctx._pattern = this.string_(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 544; + this.state = 555; this.valueExpression(); - this.state = 546; + this.state = 557; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===70) { { - this.state = 545; + this.state = 556; this.match(esql_parser.NOT); } } - this.state = 548; + this.state = 559; localctx._kind = this.match(esql_parser.RLIKE); - this.state = 549; + this.state = 560; localctx._pattern = this.string_(); } break; @@ -3063,28 +3115,28 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public matchBooleanExpression(): MatchBooleanExpressionContext { let localctx: MatchBooleanExpressionContext = new MatchBooleanExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 116, esql_parser.RULE_matchBooleanExpression); + this.enterRule(localctx, 118, esql_parser.RULE_matchBooleanExpression); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 553; + this.state = 564; localctx._fieldExp = this.qualifiedName(); - this.state = 556; + this.state = 567; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===59) { { - this.state = 554; + this.state = 565; this.match(esql_parser.CAST_OP); - this.state = 555; + this.state = 566; localctx._fieldType = this.dataType(); } } - this.state = 558; + this.state = 569; this.match(esql_parser.COLON); - this.state = 559; + this.state = 570; localctx._matchQuery = this.constant(); } } @@ -3105,16 +3157,16 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public valueExpression(): ValueExpressionContext { let localctx: ValueExpressionContext = new ValueExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 118, esql_parser.RULE_valueExpression); + this.enterRule(localctx, 120, esql_parser.RULE_valueExpression); try { - this.state = 566; + this.state = 577; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 48, this._ctx) ) { case 1: localctx = new ValueExpressionDefaultContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 561; + this.state = 572; this.operatorExpression(0); } break; @@ -3122,11 +3174,11 @@ export default class esql_parser extends parser_config { localctx = new ComparisonContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 562; + this.state = 573; (localctx as ComparisonContext)._left = this.operatorExpression(0); - this.state = 563; + this.state = 574; this.comparisonOperator(); - this.state = 564; + this.state = 575; (localctx as ComparisonContext)._right = this.operatorExpression(0); } break; @@ -3159,14 +3211,14 @@ export default class esql_parser extends parser_config { let _parentState: number = this.state; let localctx: OperatorExpressionContext = new OperatorExpressionContext(this, this._ctx, _parentState); let _prevctx: OperatorExpressionContext = localctx; - let _startState: number = 120; - this.enterRecursionRule(localctx, 120, esql_parser.RULE_operatorExpression, _p); + let _startState: number = 122; + this.enterRecursionRule(localctx, 122, esql_parser.RULE_operatorExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 572; + this.state = 583; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 49, this._ctx) ) { case 1: @@ -3175,7 +3227,7 @@ export default class esql_parser extends parser_config { this._ctx = localctx; _prevctx = localctx; - this.state = 569; + this.state = 580; this.primaryExpression(0); } break; @@ -3184,23 +3236,23 @@ export default class esql_parser extends parser_config { localctx = new ArithmeticUnaryContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 570; + this.state = 581; (localctx as ArithmeticUnaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===84 || _la===85)) { + if(!(_la===86 || _la===87)) { (localctx as ArithmeticUnaryContext)._operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 571; + this.state = 582; this.operatorExpression(3); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 582; + this.state = 593; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 51, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -3210,7 +3262,7 @@ export default class esql_parser extends parser_config { } _prevctx = localctx; { - this.state = 580; + this.state = 591; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 50, this._ctx) ) { case 1: @@ -3218,21 +3270,21 @@ export default class esql_parser extends parser_config { localctx = new ArithmeticBinaryContext(this, new OperatorExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_operatorExpression); - this.state = 574; + this.state = 585; if (!(this.precpred(this._ctx, 2))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 575; + this.state = 586; (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 86)) & ~0x1F) === 0 && ((1 << (_la - 86)) & 7) !== 0))) { + if(!(((((_la - 88)) & ~0x1F) === 0 && ((1 << (_la - 88)) & 7) !== 0))) { (localctx as ArithmeticBinaryContext)._operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 576; + this.state = 587; (localctx as ArithmeticBinaryContext)._right = this.operatorExpression(3); } break; @@ -3241,28 +3293,28 @@ export default class esql_parser extends parser_config { localctx = new ArithmeticBinaryContext(this, new OperatorExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_operatorExpression); - this.state = 577; + this.state = 588; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 578; + this.state = 589; (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===84 || _la===85)) { + if(!(_la===86 || _la===87)) { (localctx as ArithmeticBinaryContext)._operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 579; + this.state = 590; (localctx as ArithmeticBinaryContext)._right = this.operatorExpression(2); } break; } } } - this.state = 584; + this.state = 595; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 51, this._ctx); } @@ -3295,13 +3347,13 @@ export default class esql_parser extends parser_config { let _parentState: number = this.state; let localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this, this._ctx, _parentState); let _prevctx: PrimaryExpressionContext = localctx; - let _startState: number = 122; - this.enterRecursionRule(localctx, 122, esql_parser.RULE_primaryExpression, _p); + let _startState: number = 124; + this.enterRecursionRule(localctx, 124, esql_parser.RULE_primaryExpression, _p); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 593; + this.state = 604; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 52, this._ctx) ) { case 1: @@ -3310,7 +3362,7 @@ export default class esql_parser extends parser_config { this._ctx = localctx; _prevctx = localctx; - this.state = 586; + this.state = 597; this.constant(); } break; @@ -3319,7 +3371,7 @@ export default class esql_parser extends parser_config { localctx = new DereferenceContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 587; + this.state = 598; this.qualifiedName(); } break; @@ -3328,7 +3380,7 @@ export default class esql_parser extends parser_config { localctx = new FunctionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 588; + this.state = 599; this.functionExpression(); } break; @@ -3337,17 +3389,17 @@ export default class esql_parser extends parser_config { localctx = new ParenthesizedExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 589; + this.state = 600; this.match(esql_parser.LP); - this.state = 590; + this.state = 601; this.booleanExpression(0); - this.state = 591; + this.state = 602; this.match(esql_parser.RP); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 600; + this.state = 611; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 53, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -3360,18 +3412,18 @@ export default class esql_parser extends parser_config { { localctx = new InlineCastContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState)); this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_primaryExpression); - this.state = 595; + this.state = 606; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 596; + this.state = 607; this.match(esql_parser.CAST_OP); - this.state = 597; + this.state = 608; this.dataType(); } } } - this.state = 602; + this.state = 613; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 53, this._ctx); } @@ -3394,72 +3446,72 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public functionExpression(): FunctionExpressionContext { let localctx: FunctionExpressionContext = new FunctionExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 124, esql_parser.RULE_functionExpression); + this.enterRule(localctx, 126, esql_parser.RULE_functionExpression); let _la: number; try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 603; + this.state = 614; this.functionName(); - this.state = 604; + this.state = 615; this.match(esql_parser.LP); - this.state = 618; + this.state = 629; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 86: + case 88: { - this.state = 605; + this.state = 616; this.match(esql_parser.ASTERISK); } break; + case 51: case 52: case 53: - case 54: case 64: case 70: case 71: - case 74: - case 76: - case 84: - case 85: - case 91: - case 92: + case 75: + case 77: + case 86: + case 87: case 93: case 94: + case 95: case 96: case 98: - case 99: + case 100: + case 101: { { - this.state = 606; + this.state = 617; this.booleanExpression(0); - this.state = 611; + this.state = 622; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 54, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 607; + this.state = 618; this.match(esql_parser.COMMA); - this.state = 608; + this.state = 619; this.booleanExpression(0); } } } - this.state = 613; + this.state = 624; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 54, this._ctx); } - this.state = 616; + this.state = 627; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===61) { { - this.state = 614; + this.state = 625; this.match(esql_parser.COMMA); - this.state = 615; + this.state = 626; this.mapExpression(); } } @@ -3467,12 +3519,12 @@ export default class esql_parser extends parser_config { } } break; - case 97: + case 99: break; default: break; } - this.state = 620; + this.state = 631; this.match(esql_parser.RP); } } @@ -3493,11 +3545,11 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public functionName(): FunctionNameContext { let localctx: FunctionNameContext = new FunctionNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 126, esql_parser.RULE_functionName); + this.enterRule(localctx, 128, esql_parser.RULE_functionName); try { this.enterOuterAlt(localctx, 1); { - this.state = 622; + this.state = 633; this.identifierOrParameter(); } } @@ -3518,32 +3570,32 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public mapExpression(): MapExpressionContext { let localctx: MapExpressionContext = new MapExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 128, esql_parser.RULE_mapExpression); + this.enterRule(localctx, 130, esql_parser.RULE_mapExpression); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 624; + this.state = 635; this.match(esql_parser.LEFT_BRACES); - this.state = 625; + this.state = 636; this.entryExpression(); - this.state = 630; + this.state = 641; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===61) { { { - this.state = 626; + this.state = 637; this.match(esql_parser.COMMA); - this.state = 627; + this.state = 638; this.entryExpression(); } } - this.state = 632; + this.state = 643; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 633; + this.state = 644; this.match(esql_parser.RIGHT_BRACES); } } @@ -3564,15 +3616,15 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public entryExpression(): EntryExpressionContext { let localctx: EntryExpressionContext = new EntryExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 130, esql_parser.RULE_entryExpression); + this.enterRule(localctx, 132, esql_parser.RULE_entryExpression); try { this.enterOuterAlt(localctx, 1); { - this.state = 635; + this.state = 646; localctx._key = this.string_(); - this.state = 636; + this.state = 647; this.match(esql_parser.COLON); - this.state = 637; + this.state = 648; localctx._value = this.constant(); } } @@ -3593,17 +3645,17 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public constant(): ConstantContext { let localctx: ConstantContext = new ConstantContext(this, this._ctx, this.state); - this.enterRule(localctx, 132, esql_parser.RULE_constant); + this.enterRule(localctx, 134, esql_parser.RULE_constant); let _la: number; try { - this.state = 681; + this.state = 692; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 61, this._ctx) ) { case 1: localctx = new NullLiteralContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 639; + this.state = 650; this.match(esql_parser.NULL); } break; @@ -3611,9 +3663,9 @@ export default class esql_parser extends parser_config { localctx = new QualifiedIntegerLiteralContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 640; + this.state = 651; this.integerValue(); - this.state = 641; + this.state = 652; this.match(esql_parser.UNQUOTED_IDENTIFIER); } break; @@ -3621,7 +3673,7 @@ export default class esql_parser extends parser_config { localctx = new DecimalLiteralContext(this, localctx); this.enterOuterAlt(localctx, 3); { - this.state = 643; + this.state = 654; this.decimalValue(); } break; @@ -3629,7 +3681,7 @@ export default class esql_parser extends parser_config { localctx = new IntegerLiteralContext(this, localctx); this.enterOuterAlt(localctx, 4); { - this.state = 644; + this.state = 655; this.integerValue(); } break; @@ -3637,7 +3689,7 @@ export default class esql_parser extends parser_config { localctx = new BooleanLiteralContext(this, localctx); this.enterOuterAlt(localctx, 5); { - this.state = 645; + this.state = 656; this.booleanValue(); } break; @@ -3645,7 +3697,7 @@ export default class esql_parser extends parser_config { localctx = new InputParameterContext(this, localctx); this.enterOuterAlt(localctx, 6); { - this.state = 646; + this.state = 657; this.parameter(); } break; @@ -3653,7 +3705,7 @@ export default class esql_parser extends parser_config { localctx = new StringLiteralContext(this, localctx); this.enterOuterAlt(localctx, 7); { - this.state = 647; + this.state = 658; this.string_(); } break; @@ -3661,27 +3713,27 @@ export default class esql_parser extends parser_config { localctx = new NumericArrayLiteralContext(this, localctx); this.enterOuterAlt(localctx, 8); { - this.state = 648; + this.state = 659; this.match(esql_parser.OPENING_BRACKET); - this.state = 649; + this.state = 660; this.numericValue(); - this.state = 654; + this.state = 665; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===61) { { { - this.state = 650; + this.state = 661; this.match(esql_parser.COMMA); - this.state = 651; + this.state = 662; this.numericValue(); } } - this.state = 656; + this.state = 667; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 657; + this.state = 668; this.match(esql_parser.CLOSING_BRACKET); } break; @@ -3689,27 +3741,27 @@ export default class esql_parser extends parser_config { localctx = new BooleanArrayLiteralContext(this, localctx); this.enterOuterAlt(localctx, 9); { - this.state = 659; + this.state = 670; this.match(esql_parser.OPENING_BRACKET); - this.state = 660; + this.state = 671; this.booleanValue(); - this.state = 665; + this.state = 676; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===61) { { { - this.state = 661; + this.state = 672; this.match(esql_parser.COMMA); - this.state = 662; + this.state = 673; this.booleanValue(); } } - this.state = 667; + this.state = 678; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 668; + this.state = 679; this.match(esql_parser.CLOSING_BRACKET); } break; @@ -3717,27 +3769,27 @@ export default class esql_parser extends parser_config { localctx = new StringArrayLiteralContext(this, localctx); this.enterOuterAlt(localctx, 10); { - this.state = 670; + this.state = 681; this.match(esql_parser.OPENING_BRACKET); - this.state = 671; + this.state = 682; this.string_(); - this.state = 676; + this.state = 687; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===61) { { { - this.state = 672; + this.state = 683; this.match(esql_parser.COMMA); - this.state = 673; + this.state = 684; this.string_(); } } - this.state = 678; + this.state = 689; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 679; + this.state = 690; this.match(esql_parser.CLOSING_BRACKET); } break; @@ -3760,14 +3812,14 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public booleanValue(): BooleanValueContext { let localctx: BooleanValueContext = new BooleanValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 134, esql_parser.RULE_booleanValue); + this.enterRule(localctx, 136, esql_parser.RULE_booleanValue); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 683; + this.state = 694; _la = this._input.LA(1); - if(!(_la===64 || _la===76)) { + if(!(_la===64 || _la===77)) { this._errHandler.recoverInline(this); } else { @@ -3793,22 +3845,22 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public numericValue(): NumericValueContext { let localctx: NumericValueContext = new NumericValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 136, esql_parser.RULE_numericValue); + this.enterRule(localctx, 138, esql_parser.RULE_numericValue); try { - this.state = 687; + this.state = 698; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 62, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 685; + this.state = 696; this.decimalValue(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 686; + this.state = 697; this.integerValue(); } break; @@ -3831,19 +3883,19 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public decimalValue(): DecimalValueContext { let localctx: DecimalValueContext = new DecimalValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 138, esql_parser.RULE_decimalValue); + this.enterRule(localctx, 140, esql_parser.RULE_decimalValue); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 690; + this.state = 701; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===84 || _la===85) { + if (_la===86 || _la===87) { { - this.state = 689; + this.state = 700; _la = this._input.LA(1); - if(!(_la===84 || _la===85)) { + if(!(_la===86 || _la===87)) { this._errHandler.recoverInline(this); } else { @@ -3853,7 +3905,7 @@ export default class esql_parser extends parser_config { } } - this.state = 692; + this.state = 703; this.match(esql_parser.DECIMAL_LITERAL); } } @@ -3874,19 +3926,19 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public integerValue(): IntegerValueContext { let localctx: IntegerValueContext = new IntegerValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 140, esql_parser.RULE_integerValue); + this.enterRule(localctx, 142, esql_parser.RULE_integerValue); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 695; + this.state = 706; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===84 || _la===85) { + if (_la===86 || _la===87) { { - this.state = 694; + this.state = 705; _la = this._input.LA(1); - if(!(_la===84 || _la===85)) { + if(!(_la===86 || _la===87)) { this._errHandler.recoverInline(this); } else { @@ -3896,7 +3948,7 @@ export default class esql_parser extends parser_config { } } - this.state = 697; + this.state = 708; this.match(esql_parser.INTEGER_LITERAL); } } @@ -3917,11 +3969,11 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public string_(): StringContext { let localctx: StringContext = new StringContext(this, this._ctx, this.state); - this.enterRule(localctx, 142, esql_parser.RULE_string); + this.enterRule(localctx, 144, esql_parser.RULE_string); try { this.enterOuterAlt(localctx, 1); { - this.state = 699; + this.state = 710; this.match(esql_parser.QUOTED_STRING); } } @@ -3942,14 +3994,14 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public comparisonOperator(): ComparisonOperatorContext { let localctx: ComparisonOperatorContext = new ComparisonOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 144, esql_parser.RULE_comparisonOperator); + this.enterRule(localctx, 146, esql_parser.RULE_comparisonOperator); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 701; + this.state = 712; _la = this._input.LA(1); - if(!(((((_la - 77)) & ~0x1F) === 0 && ((1 << (_la - 77)) & 125) !== 0))) { + if(!(((((_la - 79)) & ~0x1F) === 0 && ((1 << (_la - 79)) & 125) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -3975,26 +4027,26 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public joinCommand(): JoinCommandContext { let localctx: JoinCommandContext = new JoinCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 146, esql_parser.RULE_joinCommand); + this.enterRule(localctx, 148, esql_parser.RULE_joinCommand); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 703; + this.state = 714; localctx._type_ = this._input.LT(1); _la = this._input.LA(1); - if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 6815744) !== 0))) { + if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 13631488) !== 0))) { localctx._type_ = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 704; + this.state = 715; this.match(esql_parser.JOIN); - this.state = 705; + this.state = 716; this.joinTarget(); - this.state = 706; + this.state = 717; this.joinCondition(); } } @@ -4015,11 +4067,11 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public joinTarget(): JoinTargetContext { let localctx: JoinTargetContext = new JoinTargetContext(this, this._ctx, this.state); - this.enterRule(localctx, 148, esql_parser.RULE_joinTarget); + this.enterRule(localctx, 150, esql_parser.RULE_joinTarget); try { this.enterOuterAlt(localctx, 1); { - this.state = 708; + this.state = 719; localctx._index = this.indexPattern(); } } @@ -4040,30 +4092,30 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public joinCondition(): JoinConditionContext { let localctx: JoinConditionContext = new JoinConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 150, esql_parser.RULE_joinCondition); + this.enterRule(localctx, 152, esql_parser.RULE_joinCondition); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 710; + this.state = 721; this.match(esql_parser.ON); - this.state = 711; + this.state = 722; this.joinPredicate(); - this.state = 716; + this.state = 727; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 65, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 712; + this.state = 723; this.match(esql_parser.COMMA); - this.state = 713; + this.state = 724; this.joinPredicate(); } } } - this.state = 718; + this.state = 729; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 65, this._ctx); } @@ -4086,11 +4138,11 @@ export default class esql_parser extends parser_config { // @RuleVersion(0) public joinPredicate(): JoinPredicateContext { let localctx: JoinPredicateContext = new JoinPredicateContext(this, this._ctx, this.state); - this.enterRule(localctx, 152, esql_parser.RULE_joinPredicate); + this.enterRule(localctx, 154, esql_parser.RULE_joinPredicate); try { this.enterOuterAlt(localctx, 1); { - this.state = 719; + this.state = 730; this.valueExpression(); } } @@ -4121,11 +4173,11 @@ export default class esql_parser extends parser_config { return this.indexPattern_sempred(localctx as IndexPatternContext, predIndex); case 53: return this.forkSubQueryCommand_sempred(localctx as ForkSubQueryCommandContext, predIndex); - case 56: + case 57: return this.booleanExpression_sempred(localctx as BooleanExpressionContext, predIndex); - case 60: - return this.operatorExpression_sempred(localctx as OperatorExpressionContext, predIndex); case 61: + return this.operatorExpression_sempred(localctx as OperatorExpressionContext, predIndex); + case 62: return this.primaryExpression_sempred(localctx as PrimaryExpressionContext, predIndex); } return true; @@ -4158,50 +4210,52 @@ export default class esql_parser extends parser_config { return this.isDevVersion(); case 7: return this.isDevVersion(); + case 8: + return this.isDevVersion(); } return true; } private indexPattern_sempred(localctx: IndexPatternContext, predIndex: number): boolean { switch (predIndex) { - case 8: + case 9: return this.isDevVersion(); } return true; } private forkSubQueryCommand_sempred(localctx: ForkSubQueryCommandContext, predIndex: number): boolean { switch (predIndex) { - case 9: + case 10: return this.precpred(this._ctx, 1); } return true; } private booleanExpression_sempred(localctx: BooleanExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 10: - return this.precpred(this._ctx, 5); case 11: + return this.precpred(this._ctx, 5); + case 12: return this.precpred(this._ctx, 4); } return true; } private operatorExpression_sempred(localctx: OperatorExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 12: - return this.precpred(this._ctx, 2); case 13: + return this.precpred(this._ctx, 2); + case 14: return this.precpred(this._ctx, 1); } return true; } private primaryExpression_sempred(localctx: PrimaryExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 14: + case 15: return this.precpred(this._ctx, 1); } return true; } - public static readonly _serializedATN: number[] = [4,1,136,722,2,0,7,0, + public static readonly _serializedATN: number[] = [4,1,137,733,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, @@ -4212,232 +4266,235 @@ export default class esql_parser extends parser_config { 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,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,5,1,164,8,1,10,1, - 12,1,167,9,1,1,2,1,2,1,2,1,2,1,2,1,2,3,2,175,8,2,1,3,1,3,1,3,1,3,1,3,1, + 75,7,75,2,76,7,76,2,77,7,77,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,5,1,166, + 8,1,10,1,12,1,169,9,1,1,2,1,2,1,2,1,2,1,2,1,2,3,2,177,8,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,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, - 3,1,3,3,3,202,8,3,1,4,1,4,1,4,1,5,1,5,1,6,1,6,1,6,1,7,1,7,1,7,5,7,215,8, - 7,10,7,12,7,218,9,7,1,8,1,8,1,8,3,8,223,8,8,1,8,1,8,1,9,1,9,1,9,1,10,1, - 10,1,10,1,11,1,11,1,11,5,11,236,8,11,10,11,12,11,239,9,11,1,11,3,11,242, - 8,11,1,12,1,12,1,12,3,12,247,8,12,1,12,1,12,1,12,1,12,1,12,3,12,254,8,12, - 3,12,256,8,12,1,13,1,13,1,14,1,14,1,15,1,15,1,16,1,16,1,16,1,16,5,16,268, - 8,16,10,16,12,16,271,9,16,1,17,1,17,1,17,1,18,1,18,3,18,278,8,18,1,18,1, - 18,3,18,282,8,18,1,19,1,19,1,19,5,19,287,8,19,10,19,12,19,290,9,19,1,20, - 1,20,1,20,3,20,295,8,20,1,21,1,21,1,21,5,21,300,8,21,10,21,12,21,303,9, - 21,1,22,1,22,1,22,5,22,308,8,22,10,22,12,22,311,9,22,1,23,1,23,1,23,5,23, - 316,8,23,10,23,12,23,319,9,23,1,24,1,24,1,25,1,25,1,25,3,25,326,8,25,1, - 26,1,26,3,26,330,8,26,1,27,1,27,3,27,334,8,27,1,28,1,28,1,28,3,28,339,8, - 28,1,29,1,29,1,29,1,30,1,30,1,30,1,30,5,30,348,8,30,10,30,12,30,351,9,30, - 1,31,1,31,3,31,355,8,31,1,31,1,31,3,31,359,8,31,1,32,1,32,1,32,1,33,1,33, - 1,33,1,34,1,34,1,34,1,34,5,34,371,8,34,10,34,12,34,374,9,34,1,35,1,35,1, - 35,1,35,1,36,1,36,1,36,1,36,3,36,384,8,36,1,37,1,37,1,37,1,37,1,38,1,38, - 1,38,1,39,1,39,1,39,5,39,396,8,39,10,39,12,39,399,9,39,1,40,1,40,1,40,1, - 40,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,44,1,44,1,44,1,44, - 3,44,419,8,44,1,44,1,44,1,44,1,44,5,44,425,8,44,10,44,12,44,428,9,44,3, - 44,430,8,44,1,45,1,45,1,45,3,45,435,8,45,1,45,1,45,1,46,1,46,1,46,1,46, - 1,46,1,47,1,47,1,47,1,47,3,47,448,8,47,1,48,1,48,1,48,1,48,3,48,454,8,48, - 1,48,1,48,1,48,1,48,1,48,3,48,461,8,48,1,49,1,49,1,49,1,50,1,50,1,50,1, - 51,4,51,470,8,51,11,51,12,51,471,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53, - 1,53,1,53,5,53,484,8,53,10,53,12,53,487,9,53,1,54,1,54,1,54,3,54,492,8, - 54,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,56,3,56,503,8,56,1,56,1,56, - 1,56,1,56,1,56,5,56,510,8,56,10,56,12,56,513,9,56,1,56,1,56,1,56,1,56,1, - 56,3,56,520,8,56,1,56,1,56,1,56,3,56,525,8,56,1,56,1,56,1,56,1,56,1,56, - 1,56,5,56,533,8,56,10,56,12,56,536,9,56,1,57,1,57,3,57,540,8,57,1,57,1, - 57,1,57,1,57,1,57,3,57,547,8,57,1,57,1,57,1,57,3,57,552,8,57,1,58,1,58, - 1,58,3,58,557,8,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,3,59,567,8,59, - 1,60,1,60,1,60,1,60,3,60,573,8,60,1,60,1,60,1,60,1,60,1,60,1,60,5,60,581, - 8,60,10,60,12,60,584,9,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,3,61, - 594,8,61,1,61,1,61,1,61,5,61,599,8,61,10,61,12,61,602,9,61,1,62,1,62,1, - 62,1,62,1,62,1,62,5,62,610,8,62,10,62,12,62,613,9,62,1,62,1,62,3,62,617, - 8,62,3,62,619,8,62,1,62,1,62,1,63,1,63,1,64,1,64,1,64,1,64,5,64,629,8,64, - 10,64,12,64,632,9,64,1,64,1,64,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66, - 1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,5,66,653,8,66,10,66,12,66, - 656,9,66,1,66,1,66,1,66,1,66,1,66,1,66,5,66,664,8,66,10,66,12,66,667,9, - 66,1,66,1,66,1,66,1,66,1,66,1,66,5,66,675,8,66,10,66,12,66,678,9,66,1,66, - 1,66,3,66,682,8,66,1,67,1,67,1,68,1,68,3,68,688,8,68,1,69,3,69,691,8,69, - 1,69,1,69,1,70,3,70,696,8,70,1,70,1,70,1,71,1,71,1,72,1,72,1,73,1,73,1, - 73,1,73,1,73,1,74,1,74,1,75,1,75,1,75,1,75,5,75,715,8,75,10,75,12,75,718, - 9,75,1,76,1,76,1,76,0,5,2,106,112,120,122,77,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,0,9,2,0,52,52,104,104,1,0,98,99,2,0,57,57,62,62,2,0,65,65,68,68, - 1,0,84,85,1,0,86,88,2,0,64,64,76,76,2,0,77,77,79,83,2,0,19,19,21,22,748, - 0,154,1,0,0,0,2,157,1,0,0,0,4,174,1,0,0,0,6,201,1,0,0,0,8,203,1,0,0,0,10, - 206,1,0,0,0,12,208,1,0,0,0,14,211,1,0,0,0,16,222,1,0,0,0,18,226,1,0,0,0, - 20,229,1,0,0,0,22,232,1,0,0,0,24,255,1,0,0,0,26,257,1,0,0,0,28,259,1,0, - 0,0,30,261,1,0,0,0,32,263,1,0,0,0,34,272,1,0,0,0,36,275,1,0,0,0,38,283, - 1,0,0,0,40,291,1,0,0,0,42,296,1,0,0,0,44,304,1,0,0,0,46,312,1,0,0,0,48, - 320,1,0,0,0,50,325,1,0,0,0,52,329,1,0,0,0,54,333,1,0,0,0,56,338,1,0,0,0, - 58,340,1,0,0,0,60,343,1,0,0,0,62,352,1,0,0,0,64,360,1,0,0,0,66,363,1,0, - 0,0,68,366,1,0,0,0,70,375,1,0,0,0,72,379,1,0,0,0,74,385,1,0,0,0,76,389, - 1,0,0,0,78,392,1,0,0,0,80,400,1,0,0,0,82,404,1,0,0,0,84,407,1,0,0,0,86, - 411,1,0,0,0,88,414,1,0,0,0,90,434,1,0,0,0,92,438,1,0,0,0,94,443,1,0,0,0, - 96,449,1,0,0,0,98,462,1,0,0,0,100,465,1,0,0,0,102,469,1,0,0,0,104,473,1, - 0,0,0,106,477,1,0,0,0,108,491,1,0,0,0,110,493,1,0,0,0,112,524,1,0,0,0,114, - 551,1,0,0,0,116,553,1,0,0,0,118,566,1,0,0,0,120,572,1,0,0,0,122,593,1,0, - 0,0,124,603,1,0,0,0,126,622,1,0,0,0,128,624,1,0,0,0,130,635,1,0,0,0,132, - 681,1,0,0,0,134,683,1,0,0,0,136,687,1,0,0,0,138,690,1,0,0,0,140,695,1,0, - 0,0,142,699,1,0,0,0,144,701,1,0,0,0,146,703,1,0,0,0,148,708,1,0,0,0,150, - 710,1,0,0,0,152,719,1,0,0,0,154,155,3,2,1,0,155,156,5,0,0,1,156,1,1,0,0, - 0,157,158,6,1,-1,0,158,159,3,4,2,0,159,165,1,0,0,0,160,161,10,1,0,0,161, - 162,5,51,0,0,162,164,3,6,3,0,163,160,1,0,0,0,164,167,1,0,0,0,165,163,1, - 0,0,0,165,166,1,0,0,0,166,3,1,0,0,0,167,165,1,0,0,0,168,175,3,82,41,0,169, - 175,3,18,9,0,170,175,3,12,6,0,171,175,3,86,43,0,172,173,4,2,1,0,173,175, - 3,20,10,0,174,168,1,0,0,0,174,169,1,0,0,0,174,170,1,0,0,0,174,171,1,0,0, - 0,174,172,1,0,0,0,175,5,1,0,0,0,176,202,3,34,17,0,177,202,3,8,4,0,178,202, - 3,64,32,0,179,202,3,58,29,0,180,202,3,36,18,0,181,202,3,60,30,0,182,202, - 3,66,33,0,183,202,3,68,34,0,184,202,3,72,36,0,185,202,3,74,37,0,186,202, - 3,88,44,0,187,202,3,76,38,0,188,202,3,146,73,0,189,190,4,3,2,0,190,202, - 3,94,47,0,191,192,4,3,3,0,192,202,3,92,46,0,193,194,4,3,4,0,194,202,3,96, - 48,0,195,196,4,3,5,0,196,202,3,98,49,0,197,198,4,3,6,0,198,202,3,100,50, - 0,199,200,4,3,7,0,200,202,3,110,55,0,201,176,1,0,0,0,201,177,1,0,0,0,201, - 178,1,0,0,0,201,179,1,0,0,0,201,180,1,0,0,0,201,181,1,0,0,0,201,182,1,0, - 0,0,201,183,1,0,0,0,201,184,1,0,0,0,201,185,1,0,0,0,201,186,1,0,0,0,201, - 187,1,0,0,0,201,188,1,0,0,0,201,189,1,0,0,0,201,191,1,0,0,0,201,193,1,0, - 0,0,201,195,1,0,0,0,201,197,1,0,0,0,201,199,1,0,0,0,202,7,1,0,0,0,203,204, - 5,14,0,0,204,205,3,112,56,0,205,9,1,0,0,0,206,207,3,48,24,0,207,11,1,0, - 0,0,208,209,5,11,0,0,209,210,3,14,7,0,210,13,1,0,0,0,211,216,3,16,8,0,212, - 213,5,61,0,0,213,215,3,16,8,0,214,212,1,0,0,0,215,218,1,0,0,0,216,214,1, - 0,0,0,216,217,1,0,0,0,217,15,1,0,0,0,218,216,1,0,0,0,219,220,3,42,21,0, - 220,221,5,58,0,0,221,223,1,0,0,0,222,219,1,0,0,0,222,223,1,0,0,0,223,224, - 1,0,0,0,224,225,3,112,56,0,225,17,1,0,0,0,226,227,5,16,0,0,227,228,3,22, - 11,0,228,19,1,0,0,0,229,230,5,17,0,0,230,231,3,22,11,0,231,21,1,0,0,0,232, - 237,3,24,12,0,233,234,5,61,0,0,234,236,3,24,12,0,235,233,1,0,0,0,236,239, - 1,0,0,0,237,235,1,0,0,0,237,238,1,0,0,0,238,241,1,0,0,0,239,237,1,0,0,0, - 240,242,3,32,16,0,241,240,1,0,0,0,241,242,1,0,0,0,242,23,1,0,0,0,243,244, - 3,26,13,0,244,245,5,60,0,0,245,247,1,0,0,0,246,243,1,0,0,0,246,247,1,0, - 0,0,247,248,1,0,0,0,248,256,3,30,15,0,249,250,4,12,8,0,250,253,3,30,15, - 0,251,252,5,59,0,0,252,254,3,28,14,0,253,251,1,0,0,0,253,254,1,0,0,0,254, - 256,1,0,0,0,255,246,1,0,0,0,255,249,1,0,0,0,256,25,1,0,0,0,257,258,7,0, - 0,0,258,27,1,0,0,0,259,260,7,0,0,0,260,29,1,0,0,0,261,262,7,0,0,0,262,31, - 1,0,0,0,263,264,5,103,0,0,264,269,5,104,0,0,265,266,5,61,0,0,266,268,5, - 104,0,0,267,265,1,0,0,0,268,271,1,0,0,0,269,267,1,0,0,0,269,270,1,0,0,0, - 270,33,1,0,0,0,271,269,1,0,0,0,272,273,5,8,0,0,273,274,3,14,7,0,274,35, - 1,0,0,0,275,277,5,13,0,0,276,278,3,38,19,0,277,276,1,0,0,0,277,278,1,0, - 0,0,278,281,1,0,0,0,279,280,5,55,0,0,280,282,3,14,7,0,281,279,1,0,0,0,281, - 282,1,0,0,0,282,37,1,0,0,0,283,288,3,40,20,0,284,285,5,61,0,0,285,287,3, - 40,20,0,286,284,1,0,0,0,287,290,1,0,0,0,288,286,1,0,0,0,288,289,1,0,0,0, - 289,39,1,0,0,0,290,288,1,0,0,0,291,294,3,16,8,0,292,293,5,14,0,0,293,295, - 3,112,56,0,294,292,1,0,0,0,294,295,1,0,0,0,295,41,1,0,0,0,296,301,3,56, - 28,0,297,298,5,63,0,0,298,300,3,56,28,0,299,297,1,0,0,0,300,303,1,0,0,0, - 301,299,1,0,0,0,301,302,1,0,0,0,302,43,1,0,0,0,303,301,1,0,0,0,304,309, - 3,50,25,0,305,306,5,63,0,0,306,308,3,50,25,0,307,305,1,0,0,0,308,311,1, - 0,0,0,309,307,1,0,0,0,309,310,1,0,0,0,310,45,1,0,0,0,311,309,1,0,0,0,312, - 317,3,44,22,0,313,314,5,61,0,0,314,316,3,44,22,0,315,313,1,0,0,0,316,319, - 1,0,0,0,317,315,1,0,0,0,317,318,1,0,0,0,318,47,1,0,0,0,319,317,1,0,0,0, - 320,321,7,1,0,0,321,49,1,0,0,0,322,326,5,125,0,0,323,326,3,52,26,0,324, - 326,3,54,27,0,325,322,1,0,0,0,325,323,1,0,0,0,325,324,1,0,0,0,326,51,1, - 0,0,0,327,330,5,74,0,0,328,330,5,92,0,0,329,327,1,0,0,0,329,328,1,0,0,0, - 330,53,1,0,0,0,331,334,5,91,0,0,332,334,5,93,0,0,333,331,1,0,0,0,333,332, - 1,0,0,0,334,55,1,0,0,0,335,339,3,48,24,0,336,339,3,52,26,0,337,339,3,54, - 27,0,338,335,1,0,0,0,338,336,1,0,0,0,338,337,1,0,0,0,339,57,1,0,0,0,340, - 341,5,10,0,0,341,342,5,53,0,0,342,59,1,0,0,0,343,344,5,12,0,0,344,349,3, - 62,31,0,345,346,5,61,0,0,346,348,3,62,31,0,347,345,1,0,0,0,348,351,1,0, - 0,0,349,347,1,0,0,0,349,350,1,0,0,0,350,61,1,0,0,0,351,349,1,0,0,0,352, - 354,3,112,56,0,353,355,7,2,0,0,354,353,1,0,0,0,354,355,1,0,0,0,355,358, - 1,0,0,0,356,357,5,72,0,0,357,359,7,3,0,0,358,356,1,0,0,0,358,359,1,0,0, - 0,359,63,1,0,0,0,360,361,5,26,0,0,361,362,3,46,23,0,362,65,1,0,0,0,363, - 364,5,25,0,0,364,365,3,46,23,0,365,67,1,0,0,0,366,367,5,29,0,0,367,372, - 3,70,35,0,368,369,5,61,0,0,369,371,3,70,35,0,370,368,1,0,0,0,371,374,1, - 0,0,0,372,370,1,0,0,0,372,373,1,0,0,0,373,69,1,0,0,0,374,372,1,0,0,0,375, - 376,3,44,22,0,376,377,5,129,0,0,377,378,3,44,22,0,378,71,1,0,0,0,379,380, - 5,7,0,0,380,381,3,122,61,0,381,383,3,142,71,0,382,384,3,78,39,0,383,382, - 1,0,0,0,383,384,1,0,0,0,384,73,1,0,0,0,385,386,5,9,0,0,386,387,3,122,61, - 0,387,388,3,142,71,0,388,75,1,0,0,0,389,390,5,24,0,0,390,391,3,42,21,0, - 391,77,1,0,0,0,392,397,3,80,40,0,393,394,5,61,0,0,394,396,3,80,40,0,395, - 393,1,0,0,0,396,399,1,0,0,0,397,395,1,0,0,0,397,398,1,0,0,0,398,79,1,0, - 0,0,399,397,1,0,0,0,400,401,3,48,24,0,401,402,5,58,0,0,402,403,3,132,66, - 0,403,81,1,0,0,0,404,405,5,6,0,0,405,406,3,84,42,0,406,83,1,0,0,0,407,408, - 5,94,0,0,408,409,3,2,1,0,409,410,5,95,0,0,410,85,1,0,0,0,411,412,5,30,0, - 0,412,413,5,133,0,0,413,87,1,0,0,0,414,415,5,5,0,0,415,418,5,37,0,0,416, - 417,5,35,0,0,417,419,3,44,22,0,418,416,1,0,0,0,418,419,1,0,0,0,419,429, - 1,0,0,0,420,421,5,36,0,0,421,426,3,90,45,0,422,423,5,61,0,0,423,425,3,90, - 45,0,424,422,1,0,0,0,425,428,1,0,0,0,426,424,1,0,0,0,426,427,1,0,0,0,427, - 430,1,0,0,0,428,426,1,0,0,0,429,420,1,0,0,0,429,430,1,0,0,0,430,89,1,0, - 0,0,431,432,3,44,22,0,432,433,5,58,0,0,433,435,1,0,0,0,434,431,1,0,0,0, - 434,435,1,0,0,0,435,436,1,0,0,0,436,437,3,44,22,0,437,91,1,0,0,0,438,439, - 5,23,0,0,439,440,3,24,12,0,440,441,5,35,0,0,441,442,3,46,23,0,442,93,1, - 0,0,0,443,444,5,15,0,0,444,447,3,38,19,0,445,446,5,55,0,0,446,448,3,14, - 7,0,447,445,1,0,0,0,447,448,1,0,0,0,448,95,1,0,0,0,449,450,5,4,0,0,450, - 453,3,42,21,0,451,452,5,35,0,0,452,454,3,42,21,0,453,451,1,0,0,0,453,454, - 1,0,0,0,454,460,1,0,0,0,455,456,5,129,0,0,456,457,3,42,21,0,457,458,5,61, - 0,0,458,459,3,42,21,0,459,461,1,0,0,0,460,455,1,0,0,0,460,461,1,0,0,0,461, - 97,1,0,0,0,462,463,5,27,0,0,463,464,3,46,23,0,464,99,1,0,0,0,465,466,5, - 18,0,0,466,467,3,102,51,0,467,101,1,0,0,0,468,470,3,104,52,0,469,468,1, - 0,0,0,470,471,1,0,0,0,471,469,1,0,0,0,471,472,1,0,0,0,472,103,1,0,0,0,473, - 474,5,96,0,0,474,475,3,106,53,0,475,476,5,97,0,0,476,105,1,0,0,0,477,478, - 6,53,-1,0,478,479,3,108,54,0,479,485,1,0,0,0,480,481,10,1,0,0,481,482,5, - 51,0,0,482,484,3,108,54,0,483,480,1,0,0,0,484,487,1,0,0,0,485,483,1,0,0, - 0,485,486,1,0,0,0,486,107,1,0,0,0,487,485,1,0,0,0,488,492,3,8,4,0,489,492, - 3,60,30,0,490,492,3,58,29,0,491,488,1,0,0,0,491,489,1,0,0,0,491,490,1,0, - 0,0,492,109,1,0,0,0,493,494,5,28,0,0,494,111,1,0,0,0,495,496,6,56,-1,0, - 496,497,5,70,0,0,497,525,3,112,56,8,498,525,3,118,59,0,499,525,3,114,57, - 0,500,502,3,118,59,0,501,503,5,70,0,0,502,501,1,0,0,0,502,503,1,0,0,0,503, - 504,1,0,0,0,504,505,5,66,0,0,505,506,5,96,0,0,506,511,3,118,59,0,507,508, - 5,61,0,0,508,510,3,118,59,0,509,507,1,0,0,0,510,513,1,0,0,0,511,509,1,0, - 0,0,511,512,1,0,0,0,512,514,1,0,0,0,513,511,1,0,0,0,514,515,5,97,0,0,515, - 525,1,0,0,0,516,517,3,118,59,0,517,519,5,67,0,0,518,520,5,70,0,0,519,518, - 1,0,0,0,519,520,1,0,0,0,520,521,1,0,0,0,521,522,5,71,0,0,522,525,1,0,0, - 0,523,525,3,116,58,0,524,495,1,0,0,0,524,498,1,0,0,0,524,499,1,0,0,0,524, - 500,1,0,0,0,524,516,1,0,0,0,524,523,1,0,0,0,525,534,1,0,0,0,526,527,10, - 5,0,0,527,528,5,56,0,0,528,533,3,112,56,6,529,530,10,4,0,0,530,531,5,73, - 0,0,531,533,3,112,56,5,532,526,1,0,0,0,532,529,1,0,0,0,533,536,1,0,0,0, - 534,532,1,0,0,0,534,535,1,0,0,0,535,113,1,0,0,0,536,534,1,0,0,0,537,539, - 3,118,59,0,538,540,5,70,0,0,539,538,1,0,0,0,539,540,1,0,0,0,540,541,1,0, - 0,0,541,542,5,69,0,0,542,543,3,142,71,0,543,552,1,0,0,0,544,546,3,118,59, - 0,545,547,5,70,0,0,546,545,1,0,0,0,546,547,1,0,0,0,547,548,1,0,0,0,548, - 549,5,75,0,0,549,550,3,142,71,0,550,552,1,0,0,0,551,537,1,0,0,0,551,544, - 1,0,0,0,552,115,1,0,0,0,553,556,3,42,21,0,554,555,5,59,0,0,555,557,3,10, - 5,0,556,554,1,0,0,0,556,557,1,0,0,0,557,558,1,0,0,0,558,559,5,60,0,0,559, - 560,3,132,66,0,560,117,1,0,0,0,561,567,3,120,60,0,562,563,3,120,60,0,563, - 564,3,144,72,0,564,565,3,120,60,0,565,567,1,0,0,0,566,561,1,0,0,0,566,562, - 1,0,0,0,567,119,1,0,0,0,568,569,6,60,-1,0,569,573,3,122,61,0,570,571,7, - 4,0,0,571,573,3,120,60,3,572,568,1,0,0,0,572,570,1,0,0,0,573,582,1,0,0, - 0,574,575,10,2,0,0,575,576,7,5,0,0,576,581,3,120,60,3,577,578,10,1,0,0, - 578,579,7,4,0,0,579,581,3,120,60,2,580,574,1,0,0,0,580,577,1,0,0,0,581, - 584,1,0,0,0,582,580,1,0,0,0,582,583,1,0,0,0,583,121,1,0,0,0,584,582,1,0, - 0,0,585,586,6,61,-1,0,586,594,3,132,66,0,587,594,3,42,21,0,588,594,3,124, - 62,0,589,590,5,96,0,0,590,591,3,112,56,0,591,592,5,97,0,0,592,594,1,0,0, - 0,593,585,1,0,0,0,593,587,1,0,0,0,593,588,1,0,0,0,593,589,1,0,0,0,594,600, - 1,0,0,0,595,596,10,1,0,0,596,597,5,59,0,0,597,599,3,10,5,0,598,595,1,0, - 0,0,599,602,1,0,0,0,600,598,1,0,0,0,600,601,1,0,0,0,601,123,1,0,0,0,602, - 600,1,0,0,0,603,604,3,126,63,0,604,618,5,96,0,0,605,619,5,86,0,0,606,611, - 3,112,56,0,607,608,5,61,0,0,608,610,3,112,56,0,609,607,1,0,0,0,610,613, - 1,0,0,0,611,609,1,0,0,0,611,612,1,0,0,0,612,616,1,0,0,0,613,611,1,0,0,0, - 614,615,5,61,0,0,615,617,3,128,64,0,616,614,1,0,0,0,616,617,1,0,0,0,617, - 619,1,0,0,0,618,605,1,0,0,0,618,606,1,0,0,0,618,619,1,0,0,0,619,620,1,0, - 0,0,620,621,5,97,0,0,621,125,1,0,0,0,622,623,3,56,28,0,623,127,1,0,0,0, - 624,625,5,89,0,0,625,630,3,130,65,0,626,627,5,61,0,0,627,629,3,130,65,0, - 628,626,1,0,0,0,629,632,1,0,0,0,630,628,1,0,0,0,630,631,1,0,0,0,631,633, - 1,0,0,0,632,630,1,0,0,0,633,634,5,90,0,0,634,129,1,0,0,0,635,636,3,142, - 71,0,636,637,5,60,0,0,637,638,3,132,66,0,638,131,1,0,0,0,639,682,5,71,0, - 0,640,641,3,140,70,0,641,642,5,98,0,0,642,682,1,0,0,0,643,682,3,138,69, - 0,644,682,3,140,70,0,645,682,3,134,67,0,646,682,3,52,26,0,647,682,3,142, - 71,0,648,649,5,94,0,0,649,654,3,136,68,0,650,651,5,61,0,0,651,653,3,136, - 68,0,652,650,1,0,0,0,653,656,1,0,0,0,654,652,1,0,0,0,654,655,1,0,0,0,655, - 657,1,0,0,0,656,654,1,0,0,0,657,658,5,95,0,0,658,682,1,0,0,0,659,660,5, - 94,0,0,660,665,3,134,67,0,661,662,5,61,0,0,662,664,3,134,67,0,663,661,1, - 0,0,0,664,667,1,0,0,0,665,663,1,0,0,0,665,666,1,0,0,0,666,668,1,0,0,0,667, - 665,1,0,0,0,668,669,5,95,0,0,669,682,1,0,0,0,670,671,5,94,0,0,671,676,3, - 142,71,0,672,673,5,61,0,0,673,675,3,142,71,0,674,672,1,0,0,0,675,678,1, - 0,0,0,676,674,1,0,0,0,676,677,1,0,0,0,677,679,1,0,0,0,678,676,1,0,0,0,679, - 680,5,95,0,0,680,682,1,0,0,0,681,639,1,0,0,0,681,640,1,0,0,0,681,643,1, - 0,0,0,681,644,1,0,0,0,681,645,1,0,0,0,681,646,1,0,0,0,681,647,1,0,0,0,681, - 648,1,0,0,0,681,659,1,0,0,0,681,670,1,0,0,0,682,133,1,0,0,0,683,684,7,6, - 0,0,684,135,1,0,0,0,685,688,3,138,69,0,686,688,3,140,70,0,687,685,1,0,0, - 0,687,686,1,0,0,0,688,137,1,0,0,0,689,691,7,4,0,0,690,689,1,0,0,0,690,691, - 1,0,0,0,691,692,1,0,0,0,692,693,5,54,0,0,693,139,1,0,0,0,694,696,7,4,0, - 0,695,694,1,0,0,0,695,696,1,0,0,0,696,697,1,0,0,0,697,698,5,53,0,0,698, - 141,1,0,0,0,699,700,5,52,0,0,700,143,1,0,0,0,701,702,7,7,0,0,702,145,1, - 0,0,0,703,704,7,8,0,0,704,705,5,111,0,0,705,706,3,148,74,0,706,707,3,150, - 75,0,707,147,1,0,0,0,708,709,3,24,12,0,709,149,1,0,0,0,710,711,5,35,0,0, - 711,716,3,152,76,0,712,713,5,61,0,0,713,715,3,152,76,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,151,1,0,0,0,718,716, - 1,0,0,0,719,720,3,118,59,0,720,153,1,0,0,0,66,165,174,201,216,222,237,241, - 246,253,255,269,277,281,288,294,301,309,317,325,329,333,338,349,354,358, - 372,383,397,418,426,429,434,447,453,460,471,485,491,502,511,519,524,532, - 534,539,546,551,556,566,572,580,582,593,600,611,616,618,630,654,665,676, - 681,687,690,695,716]; + 3,1,3,1,3,1,3,1,3,1,3,3,3,206,8,3,1,4,1,4,1,4,1,5,1,5,1,6,1,6,1,6,1,7,1, + 7,1,7,5,7,219,8,7,10,7,12,7,222,9,7,1,8,1,8,1,8,3,8,227,8,8,1,8,1,8,1,9, + 1,9,1,9,1,10,1,10,1,10,1,11,1,11,1,11,5,11,240,8,11,10,11,12,11,243,9,11, + 1,11,3,11,246,8,11,1,12,1,12,1,12,3,12,251,8,12,1,12,1,12,1,12,1,12,1,12, + 3,12,258,8,12,3,12,260,8,12,1,13,1,13,1,14,1,14,1,15,1,15,1,16,1,16,1,16, + 1,16,5,16,272,8,16,10,16,12,16,275,9,16,1,17,1,17,1,17,1,18,1,18,3,18,282, + 8,18,1,18,1,18,3,18,286,8,18,1,19,1,19,1,19,5,19,291,8,19,10,19,12,19,294, + 9,19,1,20,1,20,1,20,3,20,299,8,20,1,21,1,21,1,21,5,21,304,8,21,10,21,12, + 21,307,9,21,1,22,1,22,1,22,5,22,312,8,22,10,22,12,22,315,9,22,1,23,1,23, + 1,23,5,23,320,8,23,10,23,12,23,323,9,23,1,24,1,24,1,25,1,25,1,25,3,25,330, + 8,25,1,26,1,26,3,26,334,8,26,1,27,1,27,3,27,338,8,27,1,28,1,28,1,28,3,28, + 343,8,28,1,29,1,29,1,29,1,30,1,30,1,30,1,30,5,30,352,8,30,10,30,12,30,355, + 9,30,1,31,1,31,3,31,359,8,31,1,31,1,31,3,31,363,8,31,1,32,1,32,1,32,1,33, + 1,33,1,33,1,34,1,34,1,34,1,34,5,34,375,8,34,10,34,12,34,378,9,34,1,35,1, + 35,1,35,1,35,1,36,1,36,1,36,1,36,3,36,388,8,36,1,37,1,37,1,37,1,37,1,38, + 1,38,1,38,1,39,1,39,1,39,5,39,400,8,39,10,39,12,39,403,9,39,1,40,1,40,1, + 40,1,40,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,44,1,44,1,44, + 1,44,3,44,423,8,44,1,44,1,44,1,44,1,44,5,44,429,8,44,10,44,12,44,432,9, + 44,3,44,434,8,44,1,45,1,45,1,45,3,45,439,8,45,1,45,1,45,1,46,1,46,1,46, + 1,46,1,46,1,47,1,47,1,47,1,47,3,47,452,8,47,1,48,1,48,1,48,1,48,3,48,458, + 8,48,1,48,1,48,1,48,1,48,1,48,3,48,465,8,48,1,49,1,49,1,49,1,50,1,50,1, + 50,1,51,4,51,474,8,51,11,51,12,51,475,1,52,1,52,1,52,1,52,1,53,1,53,1,53, + 1,53,1,53,1,53,5,53,488,8,53,10,53,12,53,491,9,53,1,54,1,54,1,54,3,54,496, + 8,54,1,55,1,55,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,3,57,514,8,57,1,57,1,57,1,57,1,57,1,57,5,57,521,8,57,10,57, + 12,57,524,9,57,1,57,1,57,1,57,1,57,1,57,3,57,531,8,57,1,57,1,57,1,57,3, + 57,536,8,57,1,57,1,57,1,57,1,57,1,57,1,57,5,57,544,8,57,10,57,12,57,547, + 9,57,1,58,1,58,3,58,551,8,58,1,58,1,58,1,58,1,58,1,58,3,58,558,8,58,1,58, + 1,58,1,58,3,58,563,8,58,1,59,1,59,1,59,3,59,568,8,59,1,59,1,59,1,59,1,60, + 1,60,1,60,1,60,1,60,3,60,578,8,60,1,61,1,61,1,61,1,61,3,61,584,8,61,1,61, + 1,61,1,61,1,61,1,61,1,61,5,61,592,8,61,10,61,12,61,595,9,61,1,62,1,62,1, + 62,1,62,1,62,1,62,1,62,1,62,3,62,605,8,62,1,62,1,62,1,62,5,62,610,8,62, + 10,62,12,62,613,9,62,1,63,1,63,1,63,1,63,1,63,1,63,5,63,621,8,63,10,63, + 12,63,624,9,63,1,63,1,63,3,63,628,8,63,3,63,630,8,63,1,63,1,63,1,64,1,64, + 1,65,1,65,1,65,1,65,5,65,640,8,65,10,65,12,65,643,9,65,1,65,1,65,1,66,1, + 66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67, + 1,67,5,67,664,8,67,10,67,12,67,667,9,67,1,67,1,67,1,67,1,67,1,67,1,67,5, + 67,675,8,67,10,67,12,67,678,9,67,1,67,1,67,1,67,1,67,1,67,1,67,5,67,686, + 8,67,10,67,12,67,689,9,67,1,67,1,67,3,67,693,8,67,1,68,1,68,1,69,1,69,3, + 69,699,8,69,1,70,3,70,702,8,70,1,70,1,70,1,71,3,71,707,8,71,1,71,1,71,1, + 72,1,72,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,76,1,76,1,76,1,76, + 5,76,726,8,76,10,76,12,76,729,9,76,1,77,1,77,1,77,0,5,2,106,114,122,124, + 78,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,0,9,2,0,51,51,106,106,1,0,100, + 101,2,0,56,56,62,62,2,0,65,65,68,68,1,0,86,87,1,0,88,90,2,0,64,64,77,77, + 2,0,79,79,81,85,2,0,20,20,22,23,759,0,156,1,0,0,0,2,159,1,0,0,0,4,176,1, + 0,0,0,6,205,1,0,0,0,8,207,1,0,0,0,10,210,1,0,0,0,12,212,1,0,0,0,14,215, + 1,0,0,0,16,226,1,0,0,0,18,230,1,0,0,0,20,233,1,0,0,0,22,236,1,0,0,0,24, + 259,1,0,0,0,26,261,1,0,0,0,28,263,1,0,0,0,30,265,1,0,0,0,32,267,1,0,0,0, + 34,276,1,0,0,0,36,279,1,0,0,0,38,287,1,0,0,0,40,295,1,0,0,0,42,300,1,0, + 0,0,44,308,1,0,0,0,46,316,1,0,0,0,48,324,1,0,0,0,50,329,1,0,0,0,52,333, + 1,0,0,0,54,337,1,0,0,0,56,342,1,0,0,0,58,344,1,0,0,0,60,347,1,0,0,0,62, + 356,1,0,0,0,64,364,1,0,0,0,66,367,1,0,0,0,68,370,1,0,0,0,70,379,1,0,0,0, + 72,383,1,0,0,0,74,389,1,0,0,0,76,393,1,0,0,0,78,396,1,0,0,0,80,404,1,0, + 0,0,82,408,1,0,0,0,84,411,1,0,0,0,86,415,1,0,0,0,88,418,1,0,0,0,90,438, + 1,0,0,0,92,442,1,0,0,0,94,447,1,0,0,0,96,453,1,0,0,0,98,466,1,0,0,0,100, + 469,1,0,0,0,102,473,1,0,0,0,104,477,1,0,0,0,106,481,1,0,0,0,108,495,1,0, + 0,0,110,497,1,0,0,0,112,499,1,0,0,0,114,535,1,0,0,0,116,562,1,0,0,0,118, + 564,1,0,0,0,120,577,1,0,0,0,122,583,1,0,0,0,124,604,1,0,0,0,126,614,1,0, + 0,0,128,633,1,0,0,0,130,635,1,0,0,0,132,646,1,0,0,0,134,692,1,0,0,0,136, + 694,1,0,0,0,138,698,1,0,0,0,140,701,1,0,0,0,142,706,1,0,0,0,144,710,1,0, + 0,0,146,712,1,0,0,0,148,714,1,0,0,0,150,719,1,0,0,0,152,721,1,0,0,0,154, + 730,1,0,0,0,156,157,3,2,1,0,157,158,5,0,0,1,158,1,1,0,0,0,159,160,6,1,-1, + 0,160,161,3,4,2,0,161,167,1,0,0,0,162,163,10,1,0,0,163,164,5,50,0,0,164, + 166,3,6,3,0,165,162,1,0,0,0,166,169,1,0,0,0,167,165,1,0,0,0,167,168,1,0, + 0,0,168,3,1,0,0,0,169,167,1,0,0,0,170,177,3,82,41,0,171,177,3,18,9,0,172, + 177,3,12,6,0,173,177,3,86,43,0,174,175,4,2,1,0,175,177,3,20,10,0,176,170, + 1,0,0,0,176,171,1,0,0,0,176,172,1,0,0,0,176,173,1,0,0,0,176,174,1,0,0,0, + 177,5,1,0,0,0,178,206,3,34,17,0,179,206,3,8,4,0,180,206,3,64,32,0,181,206, + 3,58,29,0,182,206,3,36,18,0,183,206,3,60,30,0,184,206,3,66,33,0,185,206, + 3,68,34,0,186,206,3,72,36,0,187,206,3,74,37,0,188,206,3,88,44,0,189,206, + 3,76,38,0,190,206,3,148,74,0,191,192,4,3,2,0,192,206,3,94,47,0,193,194, + 4,3,3,0,194,206,3,92,46,0,195,196,4,3,4,0,196,206,3,96,48,0,197,198,4,3, + 5,0,198,206,3,98,49,0,199,200,4,3,6,0,200,206,3,100,50,0,201,202,4,3,7, + 0,202,206,3,112,56,0,203,204,4,3,8,0,204,206,3,110,55,0,205,178,1,0,0,0, + 205,179,1,0,0,0,205,180,1,0,0,0,205,181,1,0,0,0,205,182,1,0,0,0,205,183, + 1,0,0,0,205,184,1,0,0,0,205,185,1,0,0,0,205,186,1,0,0,0,205,187,1,0,0,0, + 205,188,1,0,0,0,205,189,1,0,0,0,205,190,1,0,0,0,205,191,1,0,0,0,205,193, + 1,0,0,0,205,195,1,0,0,0,205,197,1,0,0,0,205,199,1,0,0,0,205,201,1,0,0,0, + 205,203,1,0,0,0,206,7,1,0,0,0,207,208,5,14,0,0,208,209,3,114,57,0,209,9, + 1,0,0,0,210,211,3,48,24,0,211,11,1,0,0,0,212,213,5,11,0,0,213,214,3,14, + 7,0,214,13,1,0,0,0,215,220,3,16,8,0,216,217,5,61,0,0,217,219,3,16,8,0,218, + 216,1,0,0,0,219,222,1,0,0,0,220,218,1,0,0,0,220,221,1,0,0,0,221,15,1,0, + 0,0,222,220,1,0,0,0,223,224,3,42,21,0,224,225,5,57,0,0,225,227,1,0,0,0, + 226,223,1,0,0,0,226,227,1,0,0,0,227,228,1,0,0,0,228,229,3,114,57,0,229, + 17,1,0,0,0,230,231,5,17,0,0,231,232,3,22,11,0,232,19,1,0,0,0,233,234,5, + 18,0,0,234,235,3,22,11,0,235,21,1,0,0,0,236,241,3,24,12,0,237,238,5,61, + 0,0,238,240,3,24,12,0,239,237,1,0,0,0,240,243,1,0,0,0,241,239,1,0,0,0,241, + 242,1,0,0,0,242,245,1,0,0,0,243,241,1,0,0,0,244,246,3,32,16,0,245,244,1, + 0,0,0,245,246,1,0,0,0,246,23,1,0,0,0,247,248,3,26,13,0,248,249,5,60,0,0, + 249,251,1,0,0,0,250,247,1,0,0,0,250,251,1,0,0,0,251,252,1,0,0,0,252,260, + 3,30,15,0,253,254,4,12,9,0,254,257,3,30,15,0,255,256,5,59,0,0,256,258,3, + 28,14,0,257,255,1,0,0,0,257,258,1,0,0,0,258,260,1,0,0,0,259,250,1,0,0,0, + 259,253,1,0,0,0,260,25,1,0,0,0,261,262,7,0,0,0,262,27,1,0,0,0,263,264,7, + 0,0,0,264,29,1,0,0,0,265,266,7,0,0,0,266,31,1,0,0,0,267,268,5,105,0,0,268, + 273,5,106,0,0,269,270,5,61,0,0,270,272,5,106,0,0,271,269,1,0,0,0,272,275, + 1,0,0,0,273,271,1,0,0,0,273,274,1,0,0,0,274,33,1,0,0,0,275,273,1,0,0,0, + 276,277,5,8,0,0,277,278,3,14,7,0,278,35,1,0,0,0,279,281,5,13,0,0,280,282, + 3,38,19,0,281,280,1,0,0,0,281,282,1,0,0,0,282,285,1,0,0,0,283,284,5,58, + 0,0,284,286,3,14,7,0,285,283,1,0,0,0,285,286,1,0,0,0,286,37,1,0,0,0,287, + 292,3,40,20,0,288,289,5,61,0,0,289,291,3,40,20,0,290,288,1,0,0,0,291,294, + 1,0,0,0,292,290,1,0,0,0,292,293,1,0,0,0,293,39,1,0,0,0,294,292,1,0,0,0, + 295,298,3,16,8,0,296,297,5,14,0,0,297,299,3,114,57,0,298,296,1,0,0,0,298, + 299,1,0,0,0,299,41,1,0,0,0,300,305,3,56,28,0,301,302,5,63,0,0,302,304,3, + 56,28,0,303,301,1,0,0,0,304,307,1,0,0,0,305,303,1,0,0,0,305,306,1,0,0,0, + 306,43,1,0,0,0,307,305,1,0,0,0,308,313,3,50,25,0,309,310,5,63,0,0,310,312, + 3,50,25,0,311,309,1,0,0,0,312,315,1,0,0,0,313,311,1,0,0,0,313,314,1,0,0, + 0,314,45,1,0,0,0,315,313,1,0,0,0,316,321,3,44,22,0,317,318,5,61,0,0,318, + 320,3,44,22,0,319,317,1,0,0,0,320,323,1,0,0,0,321,319,1,0,0,0,321,322,1, + 0,0,0,322,47,1,0,0,0,323,321,1,0,0,0,324,325,7,1,0,0,325,49,1,0,0,0,326, + 330,5,127,0,0,327,330,3,52,26,0,328,330,3,54,27,0,329,326,1,0,0,0,329,327, + 1,0,0,0,329,328,1,0,0,0,330,51,1,0,0,0,331,334,5,75,0,0,332,334,5,94,0, + 0,333,331,1,0,0,0,333,332,1,0,0,0,334,53,1,0,0,0,335,338,5,93,0,0,336,338, + 5,95,0,0,337,335,1,0,0,0,337,336,1,0,0,0,338,55,1,0,0,0,339,343,3,48,24, + 0,340,343,3,52,26,0,341,343,3,54,27,0,342,339,1,0,0,0,342,340,1,0,0,0,342, + 341,1,0,0,0,343,57,1,0,0,0,344,345,5,10,0,0,345,346,5,52,0,0,346,59,1,0, + 0,0,347,348,5,12,0,0,348,353,3,62,31,0,349,350,5,61,0,0,350,352,3,62,31, + 0,351,349,1,0,0,0,352,355,1,0,0,0,353,351,1,0,0,0,353,354,1,0,0,0,354,61, + 1,0,0,0,355,353,1,0,0,0,356,358,3,114,57,0,357,359,7,2,0,0,358,357,1,0, + 0,0,358,359,1,0,0,0,359,362,1,0,0,0,360,361,5,72,0,0,361,363,7,3,0,0,362, + 360,1,0,0,0,362,363,1,0,0,0,363,63,1,0,0,0,364,365,5,27,0,0,365,366,3,46, + 23,0,366,65,1,0,0,0,367,368,5,26,0,0,368,369,3,46,23,0,369,67,1,0,0,0,370, + 371,5,30,0,0,371,376,3,70,35,0,372,373,5,61,0,0,373,375,3,70,35,0,374,372, + 1,0,0,0,375,378,1,0,0,0,376,374,1,0,0,0,376,377,1,0,0,0,377,69,1,0,0,0, + 378,376,1,0,0,0,379,380,3,44,22,0,380,381,5,55,0,0,381,382,3,44,22,0,382, + 71,1,0,0,0,383,384,5,7,0,0,384,385,3,124,62,0,385,387,3,144,72,0,386,388, + 3,78,39,0,387,386,1,0,0,0,387,388,1,0,0,0,388,73,1,0,0,0,389,390,5,9,0, + 0,390,391,3,124,62,0,391,392,3,144,72,0,392,75,1,0,0,0,393,394,5,25,0,0, + 394,395,3,42,21,0,395,77,1,0,0,0,396,401,3,80,40,0,397,398,5,61,0,0,398, + 400,3,80,40,0,399,397,1,0,0,0,400,403,1,0,0,0,401,399,1,0,0,0,401,402,1, + 0,0,0,402,79,1,0,0,0,403,401,1,0,0,0,404,405,3,48,24,0,405,406,5,57,0,0, + 406,407,3,134,67,0,407,81,1,0,0,0,408,409,5,6,0,0,409,410,3,84,42,0,410, + 83,1,0,0,0,411,412,5,96,0,0,412,413,3,2,1,0,413,414,5,97,0,0,414,85,1,0, + 0,0,415,416,5,31,0,0,416,417,5,134,0,0,417,87,1,0,0,0,418,419,5,5,0,0,419, + 422,5,36,0,0,420,421,5,73,0,0,421,423,3,44,22,0,422,420,1,0,0,0,422,423, + 1,0,0,0,423,433,1,0,0,0,424,425,5,78,0,0,425,430,3,90,45,0,426,427,5,61, + 0,0,427,429,3,90,45,0,428,426,1,0,0,0,429,432,1,0,0,0,430,428,1,0,0,0,430, + 431,1,0,0,0,431,434,1,0,0,0,432,430,1,0,0,0,433,424,1,0,0,0,433,434,1,0, + 0,0,434,89,1,0,0,0,435,436,3,44,22,0,436,437,5,57,0,0,437,439,1,0,0,0,438, + 435,1,0,0,0,438,439,1,0,0,0,439,440,1,0,0,0,440,441,3,44,22,0,441,91,1, + 0,0,0,442,443,5,24,0,0,443,444,3,24,12,0,444,445,5,73,0,0,445,446,3,46, + 23,0,446,93,1,0,0,0,447,448,5,15,0,0,448,451,3,38,19,0,449,450,5,58,0,0, + 450,452,3,14,7,0,451,449,1,0,0,0,451,452,1,0,0,0,452,95,1,0,0,0,453,454, + 5,4,0,0,454,457,3,42,21,0,455,456,5,73,0,0,456,458,3,42,21,0,457,455,1, + 0,0,0,457,458,1,0,0,0,458,464,1,0,0,0,459,460,5,55,0,0,460,461,3,42,21, + 0,461,462,5,61,0,0,462,463,3,42,21,0,463,465,1,0,0,0,464,459,1,0,0,0,464, + 465,1,0,0,0,465,97,1,0,0,0,466,467,5,28,0,0,467,468,3,46,23,0,468,99,1, + 0,0,0,469,470,5,19,0,0,470,471,3,102,51,0,471,101,1,0,0,0,472,474,3,104, + 52,0,473,472,1,0,0,0,474,475,1,0,0,0,475,473,1,0,0,0,475,476,1,0,0,0,476, + 103,1,0,0,0,477,478,5,98,0,0,478,479,3,106,53,0,479,480,5,99,0,0,480,105, + 1,0,0,0,481,482,6,53,-1,0,482,483,3,108,54,0,483,489,1,0,0,0,484,485,10, + 1,0,0,485,486,5,50,0,0,486,488,3,108,54,0,487,484,1,0,0,0,488,491,1,0,0, + 0,489,487,1,0,0,0,489,490,1,0,0,0,490,107,1,0,0,0,491,489,1,0,0,0,492,496, + 3,8,4,0,493,496,3,60,30,0,494,496,3,58,29,0,495,492,1,0,0,0,495,493,1,0, + 0,0,495,494,1,0,0,0,496,109,1,0,0,0,497,498,5,29,0,0,498,111,1,0,0,0,499, + 500,5,16,0,0,500,501,3,134,67,0,501,502,5,73,0,0,502,503,3,14,7,0,503,504, + 5,78,0,0,504,505,3,56,28,0,505,113,1,0,0,0,506,507,6,57,-1,0,507,508,5, + 70,0,0,508,536,3,114,57,8,509,536,3,120,60,0,510,536,3,116,58,0,511,513, + 3,120,60,0,512,514,5,70,0,0,513,512,1,0,0,0,513,514,1,0,0,0,514,515,1,0, + 0,0,515,516,5,66,0,0,516,517,5,98,0,0,517,522,3,120,60,0,518,519,5,61,0, + 0,519,521,3,120,60,0,520,518,1,0,0,0,521,524,1,0,0,0,522,520,1,0,0,0,522, + 523,1,0,0,0,523,525,1,0,0,0,524,522,1,0,0,0,525,526,5,99,0,0,526,536,1, + 0,0,0,527,528,3,120,60,0,528,530,5,67,0,0,529,531,5,70,0,0,530,529,1,0, + 0,0,530,531,1,0,0,0,531,532,1,0,0,0,532,533,5,71,0,0,533,536,1,0,0,0,534, + 536,3,118,59,0,535,506,1,0,0,0,535,509,1,0,0,0,535,510,1,0,0,0,535,511, + 1,0,0,0,535,527,1,0,0,0,535,534,1,0,0,0,536,545,1,0,0,0,537,538,10,5,0, + 0,538,539,5,54,0,0,539,544,3,114,57,6,540,541,10,4,0,0,541,542,5,74,0,0, + 542,544,3,114,57,5,543,537,1,0,0,0,543,540,1,0,0,0,544,547,1,0,0,0,545, + 543,1,0,0,0,545,546,1,0,0,0,546,115,1,0,0,0,547,545,1,0,0,0,548,550,3,120, + 60,0,549,551,5,70,0,0,550,549,1,0,0,0,550,551,1,0,0,0,551,552,1,0,0,0,552, + 553,5,69,0,0,553,554,3,144,72,0,554,563,1,0,0,0,555,557,3,120,60,0,556, + 558,5,70,0,0,557,556,1,0,0,0,557,558,1,0,0,0,558,559,1,0,0,0,559,560,5, + 76,0,0,560,561,3,144,72,0,561,563,1,0,0,0,562,548,1,0,0,0,562,555,1,0,0, + 0,563,117,1,0,0,0,564,567,3,42,21,0,565,566,5,59,0,0,566,568,3,10,5,0,567, + 565,1,0,0,0,567,568,1,0,0,0,568,569,1,0,0,0,569,570,5,60,0,0,570,571,3, + 134,67,0,571,119,1,0,0,0,572,578,3,122,61,0,573,574,3,122,61,0,574,575, + 3,146,73,0,575,576,3,122,61,0,576,578,1,0,0,0,577,572,1,0,0,0,577,573,1, + 0,0,0,578,121,1,0,0,0,579,580,6,61,-1,0,580,584,3,124,62,0,581,582,7,4, + 0,0,582,584,3,122,61,3,583,579,1,0,0,0,583,581,1,0,0,0,584,593,1,0,0,0, + 585,586,10,2,0,0,586,587,7,5,0,0,587,592,3,122,61,3,588,589,10,1,0,0,589, + 590,7,4,0,0,590,592,3,122,61,2,591,585,1,0,0,0,591,588,1,0,0,0,592,595, + 1,0,0,0,593,591,1,0,0,0,593,594,1,0,0,0,594,123,1,0,0,0,595,593,1,0,0,0, + 596,597,6,62,-1,0,597,605,3,134,67,0,598,605,3,42,21,0,599,605,3,126,63, + 0,600,601,5,98,0,0,601,602,3,114,57,0,602,603,5,99,0,0,603,605,1,0,0,0, + 604,596,1,0,0,0,604,598,1,0,0,0,604,599,1,0,0,0,604,600,1,0,0,0,605,611, + 1,0,0,0,606,607,10,1,0,0,607,608,5,59,0,0,608,610,3,10,5,0,609,606,1,0, + 0,0,610,613,1,0,0,0,611,609,1,0,0,0,611,612,1,0,0,0,612,125,1,0,0,0,613, + 611,1,0,0,0,614,615,3,128,64,0,615,629,5,98,0,0,616,630,5,88,0,0,617,622, + 3,114,57,0,618,619,5,61,0,0,619,621,3,114,57,0,620,618,1,0,0,0,621,624, + 1,0,0,0,622,620,1,0,0,0,622,623,1,0,0,0,623,627,1,0,0,0,624,622,1,0,0,0, + 625,626,5,61,0,0,626,628,3,130,65,0,627,625,1,0,0,0,627,628,1,0,0,0,628, + 630,1,0,0,0,629,616,1,0,0,0,629,617,1,0,0,0,629,630,1,0,0,0,630,631,1,0, + 0,0,631,632,5,99,0,0,632,127,1,0,0,0,633,634,3,56,28,0,634,129,1,0,0,0, + 635,636,5,91,0,0,636,641,3,132,66,0,637,638,5,61,0,0,638,640,3,132,66,0, + 639,637,1,0,0,0,640,643,1,0,0,0,641,639,1,0,0,0,641,642,1,0,0,0,642,644, + 1,0,0,0,643,641,1,0,0,0,644,645,5,92,0,0,645,131,1,0,0,0,646,647,3,144, + 72,0,647,648,5,60,0,0,648,649,3,134,67,0,649,133,1,0,0,0,650,693,5,71,0, + 0,651,652,3,142,71,0,652,653,5,100,0,0,653,693,1,0,0,0,654,693,3,140,70, + 0,655,693,3,142,71,0,656,693,3,136,68,0,657,693,3,52,26,0,658,693,3,144, + 72,0,659,660,5,96,0,0,660,665,3,138,69,0,661,662,5,61,0,0,662,664,3,138, + 69,0,663,661,1,0,0,0,664,667,1,0,0,0,665,663,1,0,0,0,665,666,1,0,0,0,666, + 668,1,0,0,0,667,665,1,0,0,0,668,669,5,97,0,0,669,693,1,0,0,0,670,671,5, + 96,0,0,671,676,3,136,68,0,672,673,5,61,0,0,673,675,3,136,68,0,674,672,1, + 0,0,0,675,678,1,0,0,0,676,674,1,0,0,0,676,677,1,0,0,0,677,679,1,0,0,0,678, + 676,1,0,0,0,679,680,5,97,0,0,680,693,1,0,0,0,681,682,5,96,0,0,682,687,3, + 144,72,0,683,684,5,61,0,0,684,686,3,144,72,0,685,683,1,0,0,0,686,689,1, + 0,0,0,687,685,1,0,0,0,687,688,1,0,0,0,688,690,1,0,0,0,689,687,1,0,0,0,690, + 691,5,97,0,0,691,693,1,0,0,0,692,650,1,0,0,0,692,651,1,0,0,0,692,654,1, + 0,0,0,692,655,1,0,0,0,692,656,1,0,0,0,692,657,1,0,0,0,692,658,1,0,0,0,692, + 659,1,0,0,0,692,670,1,0,0,0,692,681,1,0,0,0,693,135,1,0,0,0,694,695,7,6, + 0,0,695,137,1,0,0,0,696,699,3,140,70,0,697,699,3,142,71,0,698,696,1,0,0, + 0,698,697,1,0,0,0,699,139,1,0,0,0,700,702,7,4,0,0,701,700,1,0,0,0,701,702, + 1,0,0,0,702,703,1,0,0,0,703,704,5,53,0,0,704,141,1,0,0,0,705,707,7,4,0, + 0,706,705,1,0,0,0,706,707,1,0,0,0,707,708,1,0,0,0,708,709,5,52,0,0,709, + 143,1,0,0,0,710,711,5,51,0,0,711,145,1,0,0,0,712,713,7,7,0,0,713,147,1, + 0,0,0,714,715,7,8,0,0,715,716,5,113,0,0,716,717,3,150,75,0,717,718,3,152, + 76,0,718,149,1,0,0,0,719,720,3,24,12,0,720,151,1,0,0,0,721,722,5,73,0,0, + 722,727,3,154,77,0,723,724,5,61,0,0,724,726,3,154,77,0,725,723,1,0,0,0, + 726,729,1,0,0,0,727,725,1,0,0,0,727,728,1,0,0,0,728,153,1,0,0,0,729,727, + 1,0,0,0,730,731,3,120,60,0,731,155,1,0,0,0,66,167,176,205,220,226,241,245, + 250,257,259,273,281,285,292,298,305,313,321,329,333,337,342,353,358,362, + 376,387,401,422,430,433,438,451,457,464,475,489,495,513,522,530,535,543, + 545,550,557,562,567,577,583,591,593,604,611,622,627,629,641,665,676,687, + 692,698,701,706,727]; private static __ATN: ATN; public static get _ATN(): ATN { @@ -4555,8 +4612,8 @@ export class SourceCommandContext extends ParserRuleContext { public showCommand(): ShowCommandContext { return this.getTypedRuleContext(ShowCommandContext, 0) as ShowCommandContext; } - public metricsCommand(): MetricsCommandContext { - return this.getTypedRuleContext(MetricsCommandContext, 0) as MetricsCommandContext; + public timeSeriesCommand(): TimeSeriesCommandContext { + return this.getTypedRuleContext(TimeSeriesCommandContext, 0) as TimeSeriesCommandContext; } public get ruleIndex(): number { return esql_parser.RULE_sourceCommand; @@ -4633,6 +4690,9 @@ export class ProcessingCommandContext extends ParserRuleContext { public forkCommand(): ForkCommandContext { return this.getTypedRuleContext(ForkCommandContext, 0) as ForkCommandContext; } + public rerankCommand(): RerankCommandContext { + return this.getTypedRuleContext(RerankCommandContext, 0) as RerankCommandContext; + } public rrfCommand(): RrfCommandContext { return this.getTypedRuleContext(RrfCommandContext, 0) as RrfCommandContext; } @@ -4829,28 +4889,28 @@ export class FromCommandContext extends ParserRuleContext { } -export class MetricsCommandContext extends ParserRuleContext { +export class TimeSeriesCommandContext extends ParserRuleContext { constructor(parser?: esql_parser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); this.parser = parser; } - public DEV_METRICS(): TerminalNode { - return this.getToken(esql_parser.DEV_METRICS, 0); + public DEV_TIME_SERIES(): TerminalNode { + return this.getToken(esql_parser.DEV_TIME_SERIES, 0); } public indexPatternAndMetadataFields(): IndexPatternAndMetadataFieldsContext { return this.getTypedRuleContext(IndexPatternAndMetadataFieldsContext, 0) as IndexPatternAndMetadataFieldsContext; } public get ruleIndex(): number { - return esql_parser.RULE_metricsCommand; + return esql_parser.RULE_timeSeriesCommand; } public enterRule(listener: esql_parserListener): void { - if(listener.enterMetricsCommand) { - listener.enterMetricsCommand(this); + if(listener.enterTimeSeriesCommand) { + listener.enterTimeSeriesCommand(this); } } public exitRule(listener: esql_parserListener): void { - if(listener.exitMetricsCommand) { - listener.exitMetricsCommand(this); + if(listener.exitTimeSeriesCommand) { + listener.exitTimeSeriesCommand(this); } } } @@ -6350,6 +6410,47 @@ export class RrfCommandContext extends ParserRuleContext { } +export class RerankCommandContext extends ParserRuleContext { + public _queryText!: ConstantContext; + public _inferenceId!: IdentifierOrParameterContext; + constructor(parser?: esql_parser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public DEV_RERANK(): TerminalNode { + return this.getToken(esql_parser.DEV_RERANK, 0); + } + public ON(): TerminalNode { + return this.getToken(esql_parser.ON, 0); + } + public fields(): FieldsContext { + return this.getTypedRuleContext(FieldsContext, 0) as FieldsContext; + } + public WITH(): TerminalNode { + return this.getToken(esql_parser.WITH, 0); + } + public constant(): ConstantContext { + return this.getTypedRuleContext(ConstantContext, 0) as ConstantContext; + } + public identifierOrParameter(): IdentifierOrParameterContext { + return this.getTypedRuleContext(IdentifierOrParameterContext, 0) as IdentifierOrParameterContext; + } + public get ruleIndex(): number { + return esql_parser.RULE_rerankCommand; + } + public enterRule(listener: esql_parserListener): void { + if(listener.enterRerankCommand) { + listener.enterRerankCommand(this); + } + } + public exitRule(listener: esql_parserListener): void { + if(listener.exitRerankCommand) { + listener.exitRerankCommand(this); + } + } +} + + export class BooleanExpressionContext extends ParserRuleContext { constructor(parser?: esql_parser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); diff --git a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser_listener.ts b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser_listener.ts index 23d7b452e1537..4e4ddb64686b4 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser_listener.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/antlr/esql_parser_listener.ts @@ -22,7 +22,7 @@ import { RowCommandContext } from "./esql_parser.js"; import { FieldsContext } from "./esql_parser.js"; import { FieldContext } from "./esql_parser.js"; import { FromCommandContext } from "./esql_parser.js"; -import { MetricsCommandContext } from "./esql_parser.js"; +import { TimeSeriesCommandContext } from "./esql_parser.js"; import { IndexPatternAndMetadataFieldsContext } from "./esql_parser.js"; import { IndexPatternContext } from "./esql_parser.js"; import { ClusterStringContext } from "./esql_parser.js"; @@ -71,6 +71,7 @@ import { SingleForkSubQueryCommandContext } from "./esql_parser.js"; import { CompositeForkSubQueryContext } from "./esql_parser.js"; import { ForkSubQueryProcessingCommandContext } from "./esql_parser.js"; import { RrfCommandContext } from "./esql_parser.js"; +import { RerankCommandContext } from "./esql_parser.js"; import { MatchExpressionContext } from "./esql_parser.js"; import { LogicalNotContext } from "./esql_parser.js"; import { BooleanDefaultContext } from "./esql_parser.js"; @@ -238,15 +239,15 @@ export default class esql_parserListener extends ParseTreeListener { */ exitFromCommand?: (ctx: FromCommandContext) => void; /** - * Enter a parse tree produced by `esql_parser.metricsCommand`. + * Enter a parse tree produced by `esql_parser.timeSeriesCommand`. * @param ctx the parse tree */ - enterMetricsCommand?: (ctx: MetricsCommandContext) => void; + enterTimeSeriesCommand?: (ctx: TimeSeriesCommandContext) => void; /** - * Exit a parse tree produced by `esql_parser.metricsCommand`. + * Exit a parse tree produced by `esql_parser.timeSeriesCommand`. * @param ctx the parse tree */ - exitMetricsCommand?: (ctx: MetricsCommandContext) => void; + exitTimeSeriesCommand?: (ctx: TimeSeriesCommandContext) => void; /** * Enter a parse tree produced by `esql_parser.indexPatternAndMetadataFields`. * @param ctx the parse tree @@ -741,6 +742,16 @@ export default class esql_parserListener extends ParseTreeListener { * @param ctx the parse tree */ exitRrfCommand?: (ctx: RrfCommandContext) => void; + /** + * Enter a parse tree produced by `esql_parser.rerankCommand`. + * @param ctx the parse tree + */ + enterRerankCommand?: (ctx: RerankCommandContext) => void; + /** + * Exit a parse tree produced by `esql_parser.rerankCommand`. + * @param ctx the parse tree + */ + exitRerankCommand?: (ctx: RerankCommandContext) => void; /** * Enter a parse tree produced by the `matchExpression` * labeled alternative in `esql_parser.booleanExpression`. diff --git a/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/Enrich.g4 b/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/Enrich.g4 index f1cc83cae7dfa..1bb2cfbf7282a 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/Enrich.g4 +++ b/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/Enrich.g4 @@ -16,8 +16,8 @@ mode ENRICH_MODE; ENRICH_PIPE : PIPE -> type(PIPE), popMode; ENRICH_OPENING_BRACKET : OPENING_BRACKET -> type(OPENING_BRACKET), pushMode(SETTING_MODE); -ON : 'on' -> pushMode(ENRICH_FIELD_MODE); -WITH : 'with' -> pushMode(ENRICH_FIELD_MODE); +ENRICH_ON : ON -> type(ON), pushMode(ENRICH_FIELD_MODE); +ENRICH_WITH : WITH -> type(WITH), pushMode(ENRICH_FIELD_MODE); // similar to that of an index // see https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html#indices-create-api-path-params diff --git a/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/Expression.g4 b/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/Expression.g4 index ecd4d65f63ead..897af4a4569e3 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/Expression.g4 +++ b/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/Expression.g4 @@ -19,6 +19,7 @@ STATS : 'stats' -> pushMode(EXPRESSION_MODE); WHERE : 'where' -> pushMode(EXPRESSION_MODE); DEV_INLINESTATS : {this.isDevVersion()}? 'inlinestats' -> pushMode(EXPRESSION_MODE); +DEV_RERANK : {this.isDevVersion()}? 'rerank' -> pushMode(EXPRESSION_MODE); mode EXPRESSION_MODE; @@ -82,11 +83,12 @@ DECIMAL_LITERAL | DOT DIGIT+ EXPONENT ; -BY : 'by'; AND : 'and'; +AS: 'as'; ASC : 'asc'; ASSIGN : '='; +BY : 'by'; CAST_OP : '::'; COLON : ':'; COMMA : ','; @@ -101,10 +103,12 @@ LIKE: 'like'; NOT : 'not'; NULL : 'null'; NULLS : 'nulls'; +ON: 'on'; OR : 'or'; PARAM: '?'; RLIKE: 'rlike'; TRUE : 'true'; +WITH: 'with'; EQ : '=='; CIEQ : '=~'; diff --git a/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/From.g4 b/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/From.g4 index d37bffed83307..f7bb09a29a36f 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/From.g4 +++ b/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/From.g4 @@ -11,7 +11,7 @@ lexer grammar From; // FROM : 'from' -> pushMode(FROM_MODE); -DEV_METRICS : {this.isDevVersion()}? 'metrics' -> pushMode(FROM_MODE); +DEV_TIME_SERIES : {this.isDevVersion()}? 'ts' -> pushMode(FROM_MODE); mode FROM_MODE; FROM_PIPE : PIPE -> type(PIPE), popMode; diff --git a/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/Rename.g4 b/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/Rename.g4 index 335d1b351a47e..09b58fc55259b 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/Rename.g4 +++ b/src/platform/packages/shared/kbn-esql-ast/src/antlr/lexer/Rename.g4 @@ -22,7 +22,7 @@ RENAME_NAMED_OR_POSITIONAL_PARAM : NAMED_OR_POSITIONAL_PARAM -> type(NAMED_OR_PO RENAME_DOUBLE_PARAMS : DOUBLE_PARAMS -> type(DOUBLE_PARAMS); RENAME_NAMED_OR_POSITIONAL_DOUBLE_PARAMS : NAMED_OR_POSITIONAL_DOUBLE_PARAMS -> type(NAMED_OR_POSITIONAL_DOUBLE_PARAMS); -AS : 'as'; +RENAME_AS : AS -> type(AS); RENAME_ID_PATTERN : ID_PATTERN -> type(ID_PATTERN) diff --git a/src/platform/packages/shared/kbn-esql-ast/src/parser/__tests__/metrics.test.ts b/src/platform/packages/shared/kbn-esql-ast/src/parser/__tests__/metrics.test.ts index 8eafb56d567f0..fe70786fbfdaa 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/parser/__tests__/metrics.test.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/parser/__tests__/metrics.test.ts @@ -9,17 +9,17 @@ import { parse } from '..'; -describe('METRICS', () => { +describe('Timeseries', () => { describe('correctly formatted', () => { it('can parse a basic query', () => { - const text = 'METRICS foo'; + const text = 'TS foo'; const { ast, errors } = parse(text); expect(errors.length).toBe(0); expect(ast).toMatchObject([ { type: 'command', - name: 'metrics', + name: 'ts', sources: [ { type: 'source', @@ -32,14 +32,14 @@ describe('METRICS', () => { }); it('can parse multiple "sources"', () => { - const text = 'METRICS foo ,\nbar\t,\t\nbaz \n'; + const text = 'TS foo ,\nbar\t,\t\nbaz \n'; const { ast, errors } = parse(text); expect(errors.length).toBe(0); expect(ast).toMatchObject([ { type: 'command', - name: 'metrics', + name: 'ts', sources: [ { type: 'source', @@ -64,14 +64,14 @@ describe('METRICS', () => { describe('when incorrectly formatted, returns errors', () => { it('when no index identifier specified', () => { - const text = 'METRICS \n\t'; + const text = 'TS \n\t'; const { errors } = parse(text); expect(errors.length > 0).toBe(true); }); it('when comma follows index identifier', () => { - const text = 'METRICS foo, '; + const text = 'TS foo, '; const { errors } = parse(text); expect(errors.length > 0).toBe(true); diff --git a/src/platform/packages/shared/kbn-esql-ast/src/parser/esql_ast_builder_listener.ts b/src/platform/packages/shared/kbn-esql-ast/src/parser/esql_ast_builder_listener.ts index fbd31afce3361..8e1e9e837f41d 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/parser/esql_ast_builder_listener.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/parser/esql_ast_builder_listener.ts @@ -27,7 +27,7 @@ import { type EnrichCommandContext, type WhereCommandContext, default as esql_parser, - type MetricsCommandContext, + type TimeSeriesCommandContext, IndexPatternContext, InlinestatsCommandContext, JoinCommandContext, @@ -56,7 +56,7 @@ import { getMatchField, getEnrichClauses, } from './walkers'; -import type { ESQLAst, ESQLAstMetricsCommand } from '../types'; +import type { ESQLAst, ESQLAstTimeseriesCommand } from '../types'; import { createJoinCommand } from './factories/join'; import { createDissectCommand } from './factories/dissect'; import { createGrokCommand } from './factories/grok'; @@ -138,12 +138,12 @@ export class ESQLAstBuilderListener implements ESQLParserListener { } /** - * Exit a parse tree produced by `esql_parser.metricsCommand`. + * Exit a parse tree produced by `esql_parser.timeseriesCommand`. * @param ctx the parse tree */ - exitMetricsCommand(ctx: MetricsCommandContext): void { - const node: ESQLAstMetricsCommand = { - ...createAstBaseItem('metrics', ctx), + exitTimeSeriesCommand(ctx: TimeSeriesCommandContext): void { + const node: ESQLAstTimeseriesCommand = { + ...createAstBaseItem('ts', ctx), type: 'command', args: [], sources: ctx diff --git a/src/platform/packages/shared/kbn-esql-ast/src/types.ts b/src/platform/packages/shared/kbn-esql-ast/src/types.ts index aa7ac5febec3c..1c2b3fe219b80 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/types.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/types.ts @@ -9,7 +9,7 @@ export type ESQLAst = ESQLAstCommand[]; -export type ESQLAstCommand = ESQLCommand | ESQLAstMetricsCommand | ESQLAstJoinCommand; +export type ESQLAstCommand = ESQLCommand | ESQLAstTimeseriesCommand | ESQLAstJoinCommand; export type ESQLAstNode = ESQLAstCommand | ESQLAstExpression | ESQLAstItem; @@ -88,7 +88,7 @@ export interface ESQLCommand extends ESQLAstBaseItem { args: ESQLAstItem[]; } -export interface ESQLAstMetricsCommand extends ESQLCommand<'metrics'> { +export interface ESQLAstTimeseriesCommand extends ESQLCommand<'ts'> { sources: ESQLSource[]; } diff --git a/src/platform/packages/shared/kbn-esql-ast/src/visitor/README.md b/src/platform/packages/shared/kbn-esql-ast/src/visitor/README.md index 20d55c0967e10..08eb343dfba80 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/visitor/README.md +++ b/src/platform/packages/shared/kbn-esql-ast/src/visitor/README.md @@ -150,7 +150,7 @@ You can specify a specific callback for each command, instead of the generic - `visitLimitCommand` — Called for every `LIMIT` command node. - `visitExplainCommand` — Called for every `EXPLAIN` command node. - `visitRowCommand` — Called for every `ROW` command node. -- `visitMetricsCommand` — Called for every `METRICS` command node. +- `visitTimeseriesCommand` — Called for every `TS` command node. - `visitShowCommand` — Called for every `SHOW` command node. - `visitMetaCommand` — Called for every `META` command node. - `visitEvalCommand` — Called for every `EVAL` command node. diff --git a/src/platform/packages/shared/kbn-esql-ast/src/visitor/contexts.ts b/src/platform/packages/shared/kbn-esql-ast/src/visitor/contexts.ts index 377cfd5b8c7e9..252473c17e913 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/visitor/contexts.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/visitor/contexts.ts @@ -376,8 +376,8 @@ export class RowCommandVisitorContext< Data extends SharedData = SharedData > extends CommandVisitorContext {} -// METRICS -export class MetricsCommandVisitorContext< +// TS +export class TimeseriesCommandVisitorContext< Methods extends VisitorMethods = VisitorMethods, Data extends SharedData = SharedData > extends CommandVisitorContext {} diff --git a/src/platform/packages/shared/kbn-esql-ast/src/visitor/global_visitor_context.ts b/src/platform/packages/shared/kbn-esql-ast/src/visitor/global_visitor_context.ts index 4b7fbcb378945..a9f054c6b8a21 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/visitor/global_visitor_context.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/visitor/global_visitor_context.ts @@ -104,9 +104,9 @@ export class GlobalVisitorContext< return this.visitRowCommand(parent, commandNode, input as any); } // TODO: uncomment this when the command is implemented - // case 'metrics': { - // if (!this.methods.visitMetricsCommand) break; - // return this.visitMetricsCommand(parent, commandNode, input as any); + // case 'ts': { + // if (!this.methods.visitTimeseriesCommand) break; + // return this.visitTimeseriesCommand(parent, commandNode, input as any); // } case 'show': { if (!this.methods.visitShowCommand) break; @@ -220,13 +220,13 @@ export class GlobalVisitorContext< return this.visitWithSpecificContext('visitRowCommand', context, input); } - public visitMetricsCommand( + public visitTimeseriesCommand( parent: contexts.VisitorContext | null, node: ESQLAstCommand, - input: types.VisitorInput - ): types.VisitorOutput { - const context = new contexts.MetricsCommandVisitorContext(this, node, parent); - return this.visitWithSpecificContext('visitMetricsCommand', context, input); + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.TimeseriesCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitTimeseriesCommand', context, input); } public visitShowCommand( diff --git a/src/platform/packages/shared/kbn-esql-ast/src/visitor/types.ts b/src/platform/packages/shared/kbn-esql-ast/src/visitor/types.ts index f32043615a187..d5b57bd33b56b 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/visitor/types.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/visitor/types.ts @@ -90,7 +90,7 @@ export type CommandVisitorInput = AnyToVoid< VisitorInput & VisitorInput & VisitorInput & - VisitorInput & + VisitorInput & VisitorInput & VisitorInput & VisitorInput & @@ -119,7 +119,7 @@ export type CommandVisitorOutput = | VisitorOutput | VisitorOutput | VisitorOutput - | VisitorOutput + | VisitorOutput | VisitorOutput | VisitorOutput | VisitorOutput @@ -148,7 +148,11 @@ export interface VisitorMethods< visitLimitCommand?: Visitor, any, any>; visitExplainCommand?: Visitor, any, any>; visitRowCommand?: Visitor, any, any>; - visitMetricsCommand?: Visitor, any, any>; + visitTimeseriesCommand?: Visitor< + contexts.TimeseriesCommandVisitorContext, + any, + any + >; visitShowCommand?: Visitor, any, any>; visitMetaCommand?: Visitor, any, any>; visitEvalCommand?: Visitor, any, any>; diff --git a/src/platform/packages/shared/kbn-esql-ast/src/walker/walker.test.ts b/src/platform/packages/shared/kbn-esql-ast/src/walker/walker.test.ts index 8d13d997f69a0..cbe75b30265d1 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/walker/walker.test.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/walker/walker.test.ts @@ -25,7 +25,7 @@ import { import { walk, Walker } from './walker'; test('can walk all functions', () => { - const { root } = parse('METRICS index | EVAL a(b(c(foo)))'); + const { root } = parse('TS index | EVAL a(b(c(foo)))'); const functions: string[] = []; walk(root, { @@ -36,7 +36,7 @@ test('can walk all functions', () => { }); test('can find assignment expression', () => { - const query = 'METRICS source | STATS var0 = bucket(bytes, 1 hour)'; + const query = 'TS source | STATS var0 = bucket(bytes, 1 hour)'; const { root } = parse(query); const functions: ESQLFunction[] = []; @@ -206,7 +206,7 @@ describe('structurally can walk all nodes', () => { }); test('iterates through all sources', () => { - const { ast } = parse('METRICS index, index2, index3, index4'); + const { ast } = parse('TS index, index2, index3, index4'); const sources: ESQLSource[] = []; walk(ast, { diff --git a/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts b/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts index d711915e5d80e..ffb60b562ae6b 100644 --- a/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts +++ b/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts @@ -65,14 +65,14 @@ describe('esql query helpers', () => { const idxPattern13 = getIndexPatternFromESQLQuery('ROW a = 1, b = "two", c = null'); expect(idxPattern13).toBe(''); - const idxPattern14 = getIndexPatternFromESQLQuery('METRICS tsdb'); + const idxPattern14 = getIndexPatternFromESQLQuery('TS tsdb'); expect(idxPattern14).toBe('tsdb'); - const idxPattern15 = getIndexPatternFromESQLQuery('METRICS tsdb | STATS max(cpu) BY host'); + const idxPattern15 = getIndexPatternFromESQLQuery('TS tsdb | STATS max(cpu) BY host'); expect(idxPattern15).toBe('tsdb'); const idxPattern16 = getIndexPatternFromESQLQuery( - 'METRICS pods | STATS load=avg(cpu), writes=max(rate(indexing_requests)) BY pod | SORT pod' + 'TS pods | STATS load=avg(cpu), writes=max(rate(indexing_requests)) BY pod | SORT pod' ); expect(idxPattern16).toBe('pods'); @@ -145,12 +145,12 @@ describe('esql query helpers', () => { ).toBeFalsy(); }); - it('should return false for metrics with no aggregation', () => { - expect(hasTransformationalCommand('metrics a')).toBeFalsy(); + it('should return false for timeseries with no aggregation', () => { + expect(hasTransformationalCommand('ts a')).toBeFalsy(); }); - it('should return true for metrics with aggregations', () => { - expect(hasTransformationalCommand('metrics a | stats var = avg(b)')).toBeTruthy(); + it('should return true for timeseries with aggregations', () => { + expect(hasTransformationalCommand('ts a | stats var = avg(b)')).toBeTruthy(); }); }); diff --git a/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.ts b/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.ts index 867f5c6a6895c..21476cc742336 100644 --- a/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.ts +++ b/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.ts @@ -25,7 +25,7 @@ const DEFAULT_ESQL_LIMIT = 1000; // retrieves the index pattern from the aggregate query for ES|QL using ast parsing export function getIndexPatternFromESQLQuery(esql?: string) { const { ast } = parse(esql); - const sourceCommand = ast.find(({ name }) => ['from', 'metrics'].includes(name)); + const sourceCommand = ast.find(({ name }) => ['from', 'ts'].includes(name)); const args = (sourceCommand?.args ?? []) as ESQLSource[]; const indices = args.filter((arg) => arg.sourceType === 'index'); return indices?.map((index) => index.name).join(','); diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/README.md b/src/platform/packages/shared/kbn-esql-validation-autocomplete/README.md index ea8f4f075703d..dc66ec73f7c32 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/README.md +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/README.md @@ -247,14 +247,14 @@ Tests are found in files named with the following convention: `validation.some-d Here is an example of a block in the new test format. ```ts -describe('METRICS [ [ BY ]]', () => { +describe('TS [ [ BY ]]', () => { test('errors on invalid command start', async () => { const { expectErrors } = await setup(); await expectErrors('m', [ - "SyntaxError: mismatched input 'm' expecting {'explain', 'from', 'meta', 'metrics', 'row', 'show'}", + "SyntaxError: mismatched input 'm' expecting {'explain', 'from', 'meta', 'ts', 'row', 'show'}", ]); - await expectErrors('metrics ', [ + await expectErrors('ts ', [ "SyntaxError: mismatched input '' expecting {UNQUOTED_SOURCE, QUOTED_STRING}", ]); }); diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts index 16549743ab578..b06c8aceb71f2 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts @@ -82,7 +82,7 @@ describe('autocomplete', () => { }, }); - // const sourceCommands = ['row', 'from', 'show', 'metrics']; Uncomment when metrics is being released + // const sourceCommands = ['row', 'from', 'show', 'ts']; Uncomment when ts is being released const sourceCommands = ['row', 'from', 'show']; describe('New command', () => { diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/definitions/commands.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/definitions/commands.ts index 87bba0f9fce70..cceb3e82739c6 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/definitions/commands.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/definitions/commands.ts @@ -207,7 +207,7 @@ export const commandDefinitions: Array> = [ suggest: suggestForShow, }, { - name: 'metrics', + name: 'ts', hidden: true, description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.metricsDoc', { defaultMessage: @@ -219,7 +219,7 @@ export const commandDefinitions: Array> = [ 'When you perform more than one aggregation, separate each aggregation with a comma.', }), declaration: '', - examples: ['METRICS index', 'METRICS index, index2'], + examples: ['TS index', 'TS index, index2'], suggest: () => [], }, { diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/helpers.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/helpers.ts index d8e592c6a6aed..a2e43aa47cdd1 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/helpers.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/helpers.ts @@ -123,7 +123,7 @@ export function isComma(char: string) { } export function isSourceCommand({ label }: { label: string }) { - return ['FROM', 'ROW', 'SHOW', 'METRICS'].includes(label); + return ['FROM', 'ROW', 'SHOW', 'TS'].includes(label); } let fnLookups: Map | undefined; diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/variables.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/variables.ts index b19f188425ada..96d5cd1f76ec5 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/variables.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/variables.ts @@ -142,7 +142,7 @@ export function collectVariables( }) .on('visitCommand', (ctx) => { const ret = []; - if (['row', 'eval', 'stats', 'inlinestats', 'metrics', 'rename'].includes(ctx.node.name)) { + if (['row', 'eval', 'stats', 'inlinestats', 'ts', 'rename'].includes(ctx.node.name)) { ret.push(...ctx.visitArgs()); } if (['stats', 'inlinestats', 'enrich'].includes(ctx.node.name)) { diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.metrics.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.metrics.ts index af944fc792794..88121cc4076bd 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.metrics.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/__tests__/test_suites/validation.command.metrics.ts @@ -9,17 +9,17 @@ import * as helpers from '../helpers'; -export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { +export const validationTimeseriesCommandTestSuite = (setup: helpers.Setup) => { describe('validation', () => { describe('command', () => { - describe('METRICS [ [ BY ]]', () => { + describe('TS [ [ BY ]]', () => { test('errors on invalid command start', async () => { const { expectErrors } = await setup(); await expectErrors('m', [ "SyntaxError: mismatched input 'm' expecting {'explain', 'row', 'from', 'show'}", ]); - await expectErrors('metrics ', [ + await expectErrors('ts ', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, UNQUOTED_SOURCE}", ]); }); @@ -28,46 +28,44 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('no errors on correct indices usage', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics index', []); - await expectErrors('metrics index, other_index', []); - await expectErrors('metrics index, other_index,.secret_index', []); - await expectErrors('metrics .secret_index', []); - await expectErrors('METRICS .secret_index', []); - await expectErrors('mEtRiCs .secret_index', []); - await expectErrors('metrics ind*, other*', []); - await expectErrors('metrics index*', []); - await expectErrors('metrics *a_i*dex*', []); - await expectErrors('metrics in*ex*', []); - await expectErrors('metrics *n*ex', []); - await expectErrors('metrics *n*ex*', []); - await expectErrors('metrics i*d*x*', []); - await expectErrors('metrics i*d*x', []); - await expectErrors('metrics i***x*', []); - await expectErrors('metrics i****', []); - await expectErrors('metrics i**', []); - await expectErrors('metrics index**', []); - await expectErrors('metrics *ex', []); - await expectErrors('metrics *ex*', []); - await expectErrors('metrics in*ex', []); - await expectErrors('metrics ind*ex', []); - await expectErrors('metrics *,-.*', []); - await expectErrors('metrics remote-*:indexes*', ['Unknown index [remote-*:indexes*]']); - await expectErrors('metrics remote-ccs:indexes', [ + await expectErrors('ts index', []); + await expectErrors('ts index, other_index', []); + await expectErrors('ts index, other_index,.secret_index', []); + await expectErrors('ts .secret_index', []); + await expectErrors('TS .secret_index', []); + await expectErrors('Ts .secret_index', []); + await expectErrors('ts ind*, other*', []); + await expectErrors('ts index*', []); + await expectErrors('ts *a_i*dex*', []); + await expectErrors('ts in*ex*', []); + await expectErrors('ts *n*ex', []); + await expectErrors('ts *n*ex*', []); + await expectErrors('ts i*d*x*', []); + await expectErrors('ts i*d*x', []); + await expectErrors('ts i***x*', []); + await expectErrors('ts i****', []); + await expectErrors('ts i**', []); + await expectErrors('ts index**', []); + await expectErrors('ts *ex', []); + await expectErrors('ts *ex*', []); + await expectErrors('ts in*ex', []); + await expectErrors('ts ind*ex', []); + await expectErrors('ts *,-.*', []); + await expectErrors('ts remote-*:indexes*', ['Unknown index [remote-*:indexes*]']); + await expectErrors('ts remote-ccs:indexes', ['Unknown index [remote-ccs:indexes]']); + await expectErrors('ts a_index, remote-ccs:indexes', [ 'Unknown index [remote-ccs:indexes]', ]); - await expectErrors('metrics a_index, remote-ccs:indexes', [ - 'Unknown index [remote-ccs:indexes]', - ]); - await expectErrors('metrics .secret_index', []); + await expectErrors('ts .secret_index', []); }); test('errors on trailing comma', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics index,', [ + await expectErrors('ts index,', [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, UNQUOTED_SOURCE}", ]); - await expectErrors(`metrics index\n, \tother_index\t,\n \t `, [ + await expectErrors(`ts index\n, \tother_index\t,\n \t `, [ "SyntaxError: mismatched input '' expecting {QUOTED_STRING, UNQUOTED_SOURCE}", ]); }); @@ -75,21 +73,21 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('errors on invalid syntax', async () => { const { expectErrors } = await setup(); - await expectErrors(`metrics index = 1`, [ + await expectErrors(`ts index = 1`, [ "SyntaxError: mismatched input '=' expecting ", ]); - await expectErrors('metrics `index`', ['Unknown index [`index`]']); + await expectErrors('ts `index`', ['Unknown index [`index`]']); }); test('errors on unknown index', async () => { const { expectErrors } = await setup(); - await expectErrors(`METRICS index, missingIndex`, ['Unknown index [missingIndex]']); - await expectErrors(`METRICS average()`, ['Unknown index [average()]']); - await expectErrors(`metrics custom_function()`, ['Unknown index [custom_function()]']); - await expectErrors(`metrics indexes*`, ['Unknown index [indexes*]']); - await expectErrors('metrics doubleField', ['Unknown index [doubleField]']); - await expectErrors('metrics policy', ['Unknown index [policy]']); + await expectErrors(`TS index, missingIndex`, ['Unknown index [missingIndex]']); + await expectErrors(`TS average()`, ['Unknown index [average()]']); + await expectErrors(`ts custom_function()`, ['Unknown index [custom_function()]']); + await expectErrors(`ts indexes*`, ['Unknown index [indexes*]']); + await expectErrors('ts doubleField', ['Unknown index [doubleField]']); + await expectErrors('ts policy', ['Unknown index [policy]']); }); }); @@ -97,23 +95,23 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('no errors on correct usage', async () => { const { expectErrors } = await setup(); - await expectErrors('METRICS a_index | STATS count()', []); - await expectErrors('metrics a_index | STATS avg(doubleField) by 1', []); - await expectErrors('metrics a_index | STATS count(`doubleField`)', []); - await expectErrors('metrics a_index | STATS count(*)', []); - await expectErrors('metrics index | STATS var0 = count(*)', []); - await expectErrors('metrics a_index | STATS var0 = count()', []); - await expectErrors('metrics a_index | STATS var0 = avg(doubleField), count(*)', []); - await expectErrors(`metrics a_index | STATS sum(case(false, 0, 1))`, []); - await expectErrors(`metrics a_index | STATS var0 = sum( case(false, 0, 1))`, []); - await expectErrors('metrics a_index | STATS count(textField == "a" or null)', []); - await expectErrors('metrics other_index | STATS max(doubleField) by textField', []); + await expectErrors('TS a_index | STATS count()', []); + await expectErrors('ts a_index | STATS avg(doubleField) by 1', []); + await expectErrors('ts a_index | STATS count(`doubleField`)', []); + await expectErrors('ts a_index | STATS count(*)', []); + await expectErrors('ts index | STATS var0 = count(*)', []); + await expectErrors('ts a_index | STATS var0 = count()', []); + await expectErrors('ts a_index | STATS var0 = avg(doubleField), count(*)', []); + await expectErrors(`ts a_index | STATS sum(case(false, 0, 1))`, []); + await expectErrors(`ts a_index | STATS var0 = sum( case(false, 0, 1))`, []); + await expectErrors('ts a_index | STATS count(textField == "a" or null)', []); + await expectErrors('ts other_index | STATS max(doubleField) by textField', []); }); test('syntax errors', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index doubleField=', [ + await expectErrors('ts a_index doubleField=', [ "SyntaxError: mismatched input 'doubleField' expecting ", ]); }); @@ -121,7 +119,7 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('errors on unknown function', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index var0 = avg(fn(number)), count(*)', [ + await expectErrors('ts a_index var0 = avg(fn(number)), count(*)', [ "SyntaxError: mismatched input 'var0' expecting ", ]); }); @@ -131,7 +129,7 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { for (const subCommand of ['keep', 'drop', 'eval']) { await expectErrors( - 'metrics a_index | stats count(`doubleField`) | ' + + 'TS a_index | stats count(`doubleField`) | ' + subCommand + ' `count(``doubleField``)` ', [] @@ -142,10 +140,10 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('semantic function validation errors', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index | stats count(round(*))', [ + await expectErrors('TS a_index | stats count(round(*))', [ 'Using wildcards (*) in round is not allowed', ]); - await expectErrors('metrics a_index | stats count(count(*))', [ + await expectErrors('TS a_index | stats count(count(*))', [ `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [long]`, ]); }); @@ -156,24 +154,21 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { const { expectErrors } = await setup(); await expectErrors( - 'metrics a_index | stats avg(doubleField), percentile(doubleField, 50) by ipField', - [] - ); - await expectErrors( - 'metrics a_index | stats avg(doubleField), percentile(doubleField, 50) BY ipField', + 'TS a_index | stats avg(doubleField), percentile(doubleField, 50) by ipField', [] ); await expectErrors( - 'metrics a_index | stats avg(doubleField), percentile(doubleField, 50) + 1 by ipField', + 'TS a_index | stats avg(doubleField), percentile(doubleField, 50) BY ipField', [] ); await expectErrors( - 'metrics a_index | stats avg(doubleField) by textField | limit 100', + 'TS a_index | stats avg(doubleField), percentile(doubleField, 50) + 1 by ipField', [] ); + await expectErrors('TS a_index | stats avg(doubleField) by textField | limit 100', []); for (const op of ['+', '-', '*', '/', '%']) { await expectErrors( - `metrics a_index | stats avg(doubleField) ${op} percentile(doubleField, 50) BY ipField`, + `TS a_index | stats avg(doubleField) ${op} percentile(doubleField, 50) BY ipField`, [] ); } @@ -182,22 +177,21 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('syntax errors in ', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index | stats count(* + 1) BY ipField', [ + await expectErrors('TS a_index | stats count(* + 1) BY ipField', [ + "SyntaxError: no viable alternative at input 'count(* +'", + ]); + await expectErrors('TS a_index \n | stats count(* + round(doubleField)) BY ipField', [ "SyntaxError: no viable alternative at input 'count(* +'", ]); - await expectErrors( - 'metrics a_index \n | stats count(* + round(doubleField)) BY ipField', - ["SyntaxError: no viable alternative at input 'count(* +'"] - ); }); test('semantic errors in ', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index | stats count(round(*)) BY ipField', [ + await expectErrors('TS a_index | stats count(round(*)) BY ipField', [ 'Using wildcards (*) in round is not allowed', ]); - await expectErrors('metrics a_index | stats count(count(*)) BY ipField', [ + await expectErrors('TS a_index | stats count(count(*)) BY ipField', [ `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [long]`, ]); }); @@ -205,27 +199,25 @@ export const validationMetricsCommandTestSuite = (setup: helpers.Setup) => { test('errors on unknown field', async () => { const { expectErrors } = await setup(); - await expectErrors('metrics a_index | stats avg(doubleField) by wrongField', [ + await expectErrors('TS a_index | stats avg(doubleField) by wrongField', [ 'Unknown column [wrongField]', ]); - await expectErrors('metrics a_index | stats avg(doubleField) by wrongField + 1', [ + await expectErrors('TS a_index | stats avg(doubleField) by wrongField + 1', [ + 'Unknown column [wrongField]', + ]); + await expectErrors('TS a_index | stats avg(doubleField) by var0 = wrongField + 1', [ 'Unknown column [wrongField]', ]); - await expectErrors( - 'metrics a_index | stats avg(doubleField) by var0 = wrongField + 1', - ['Unknown column [wrongField]'] - ); }); test('various errors', async () => { const { expectErrors } = await setup(); + await expectErrors('TS a_index | stats avg(doubleField) by percentile(doubleField)', [ + 'STATS BY does not support function percentile', + ]); await expectErrors( - 'METRICS a_index | stats avg(doubleField) by percentile(doubleField)', - ['STATS BY does not support function percentile'] - ); - await expectErrors( - 'METRICS a_index | stats avg(doubleField) by textField, percentile(doubleField) by ipField', + 'TS a_index | stats avg(doubleField) by textField, percentile(doubleField) by ipField', [ "SyntaxError: mismatched input 'by' expecting ", 'STATS BY does not support function percentile', diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.command.metrics.test.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.command.metrics.test.ts index 8daca83bbc166..d69a2f54bb6ff 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.command.metrics.test.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/__tests__/validation.command.metrics.test.ts @@ -8,6 +8,6 @@ */ import * as helpers from './helpers'; -import { validationMetricsCommandTestSuite } from './test_suites/validation.command.metrics'; +import { validationTimeseriesCommandTestSuite } from './test_suites/validation.command.metrics'; -validationMetricsCommandTestSuite(helpers.setup); +validationTimeseriesCommandTestSuite(helpers.setup); diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/commands/metrics/index.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/commands/metrics/index.ts index 32c03216c207c..723ce2e94885a 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/commands/metrics/index.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/commands/metrics/index.ts @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { ESQLAstMetricsCommand, ESQLMessage } from '@kbn/esql-ast'; +import { ESQLAstTimeseriesCommand, ESQLMessage } from '@kbn/esql-ast'; import { ESQLFunction, ESQLSource } from '@kbn/esql-ast/src/types'; import { isAggFunction, @@ -19,18 +19,18 @@ import { isFunctionItem, isLiteralItem } from '../../../..'; import { validateSource } from '../../validation'; /** - * Validates the METRICS source command: + * Validates the TIMESERIES source command: * - * METRICS + * TS */ export const validate = ( - command: ESQLAstMetricsCommand, + command: ESQLAstTimeseriesCommand, references: ReferenceMaps ): ESQLMessage[] => { const messages: ESQLMessage[] = []; const { sources } = command; - // METRICS ... + // TS ... messages.push(...validateSources(sources, references)); return messages; diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/function_validation.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/function_validation.ts index 1351a9b66a5fb..762754358f618 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/function_validation.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/function_validation.ts @@ -205,7 +205,7 @@ export function validateFunction({ forceConstantOnly: allMatchingArgDefinitionsAreConstantOnly || forceConstantOnly, // use the nesting flag for now just for stats and metrics // TODO: revisit this part later on to make it more generic - isNested: ['stats', 'inlinestats', 'metrics'].includes(parentCommand) + isNested: ['stats', 'inlinestats', 'ts'].includes(parentCommand) ? isNested || !isAssignment(fn) : false, parentAst, diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/helpers.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/helpers.ts index 67ef45bb05563..41f8a6ebe9727 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/helpers.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/helpers.ts @@ -10,7 +10,7 @@ import type { ESQLAst, ESQLAstItem, - ESQLAstMetricsCommand, + ESQLAstTimeseriesCommand, ESQLAstQueryExpression, ESQLColumn, ESQLMessage, @@ -30,10 +30,10 @@ export function buildQueryForFieldsFromSource(queryString: string, ast: ESQLAst) const sources: ESQLSource[] = []; const metadataFields: ESQLColumn[] = []; - if (firstCommand.name === 'metrics') { - const metrics = firstCommand as ESQLAstMetricsCommand; + if (firstCommand.name === 'ts') { + const timeseries = firstCommand as ESQLAstTimeseriesCommand; - sources.push(...metrics.sources); + sources.push(...timeseries.sources); } else if (firstCommand.name === 'from') { const fromSources = mutate.commands.from.sources.list(firstCommand as any); const fromMetadataColumns = [...mutate.commands.from.metadata.list(firstCommand as any)].map( diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/validation.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/validation.ts index f679393fcbb22..d28ee9d24de74 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/validation.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/validation.ts @@ -10,7 +10,7 @@ import { AstProviderFn, ESQLAst, - ESQLAstMetricsCommand, + ESQLAstTimeseriesCommand, ESQLColumn, ESQLCommand, ESQLCommandOption, @@ -53,7 +53,7 @@ import type { } from './types'; import { validate as validateJoinCommand } from './commands/join'; -import { validate as validateMetricsCommand } from './commands/metrics'; +import { validate as validateTimeseriesCommand } from './commands/metrics'; /** * ES|QL validation public API @@ -213,9 +213,9 @@ function validateCommand( } switch (commandDef.name) { - case 'metrics': { - const metrics = command as ESQLAstMetricsCommand; - const metricsCommandErrors = validateMetricsCommand(metrics, references); + case 'ts': { + const metrics = command as ESQLAstTimeseriesCommand; + const metricsCommandErrors = validateTimeseriesCommand(metrics, references); messages.push(...metricsCommandErrors); break; } diff --git a/src/platform/packages/shared/kbn-monaco/src/languages/esql/lib/esql_theme.ts b/src/platform/packages/shared/kbn-monaco/src/languages/esql/lib/esql_theme.ts index a6edcccd55349..1b0b174b0f1e1 100644 --- a/src/platform/packages/shared/kbn-monaco/src/languages/esql/lib/esql_theme.ts +++ b/src/platform/packages/shared/kbn-monaco/src/languages/esql/lib/esql_theme.ts @@ -51,7 +51,8 @@ export const buildESQLTheme = ({ // commands ...buildRuleGroup( [ - 'dev_metrics', + 'dev_time_series', + 'dev_rerank', 'dev_fork', 'metadata', 'mv_expand',