diff --git a/changelogs/fragments/10536.yml b/changelogs/fragments/10536.yml new file mode 100644 index 000000000000..6b85d2d93d53 --- /dev/null +++ b/changelogs/fragments/10536.yml @@ -0,0 +1,2 @@ +feat: +- Update Simplified PPL grammar to latest version ([#10536](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/10536)) \ No newline at end of file diff --git a/cypress/utils/apps/explore/autocomplete.js b/cypress/utils/apps/explore/autocomplete.js index 6bf14cb76f49..dc54dca45404 100644 --- a/cypress/utils/apps/explore/autocomplete.js +++ b/cypress/utils/apps/explore/autocomplete.js @@ -244,6 +244,7 @@ export const showSuggestionAndHint = (maxAttempts = 3) => { const attemptShow = () => { attempts++; + cy.get('.inputarea').clear(); cy.get('.inputarea').type('source ', { force: true }); return cy.get('.suggest-widget.visible').then(($widget) => { diff --git a/package.json b/package.json index 2649c8d66d96..700df12527ea 100644 --- a/package.json +++ b/package.json @@ -237,8 +237,8 @@ "@xyflow/react": "^12.8.2", "JSONStream": "1.3.5", "ajv": "^8.11.0", - "antlr4-c3": "^3.4.1", - "antlr4ng": "^3.0.4", + "antlr4-c3": "^3.4.3", + "antlr4ng": "^3.0.16", "bluebird": "3.5.5", "chalk": "^4.1.0", "chokidar": "^3.4.2", diff --git a/packages/osd-antlr-grammar/package.json b/packages/osd-antlr-grammar/package.json index 6575f8daeb3c..f18880408bdd 100644 --- a/packages/osd-antlr-grammar/package.json +++ b/packages/osd-antlr-grammar/package.json @@ -16,7 +16,7 @@ "generate:all": "yarn generate:opensearchsql && yarn generate:opensearchppl && yarn generate:opensearchppl-simplified && yarn generate:dql" }, "dependencies": { - "antlr4ng": "^3.0.4" + "antlr4ng": "^3.0.16" }, "devDependencies": { "@osd/babel-preset": "1.0.0", diff --git a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLLexer.interp b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLLexer.interp index 2dded62b3c4c..9bb5f77161e0 100644 --- a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLLexer.interp +++ b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLLexer.interp @@ -4,20 +4,27 @@ null 'SEARCH' 'DESCRIBE' 'SHOW' +'EXPLAIN' 'FROM' 'WHERE' 'FIELDS' +'FIELD' +'TABLE' 'RENAME' 'STATS' +'EVENTSTATS' 'DEDUP' 'SORT' 'EVAL' 'HEAD' +'BIN' 'TOP' 'RARE' 'PARSE' -'METHOD' +'SPATH' 'REGEX' +'REX' +'SED' 'PUNCT' 'GROK' 'PATTERN' @@ -26,24 +33,62 @@ null 'KMEANS' 'AD' 'ML' +'FILLNULL' +'FLATTEN' +'TRENDLINE' +'TIMECHART' +'APPENDCOL' +'EXPAND' +'SIMPLE_PATTERN' +'BRAIN' +'VARIABLE_COUNT_THRESHOLD' +'FREQUENCY_THRESHOLD_PERCENTAGE' +'METHOD' +'MAX_SAMPLE_COUNT' +'MAX_MATCH' +'OFFSET_FIELD' +'BUFFER_LIMIT' +'LABEL' +'AGGREGATION' +'JOIN' +'ON' +'INNER' +'OUTER' +'FULL' +'SEMI' +'ANTI' +'CROSS' +'HINT.LEFT' +'HINT.RIGHT' 'AS' 'BY' 'SOURCE' 'INDEX' +'A' +'ASC' 'D' 'DESC' 'DATASOURCES' -'SORTBY' +'USING' +'WITH' +'SIMPLE' +'STANDARD' +'COST' +'EXTENDED' +'OVERRIDE' +'OVERWRITE' 'AUTO' 'STR' -'IP' 'NUM' +'SMA' +'WMA' 'KEEPEMPTY' 'CONSECUTIVE' 'DEDUP_SPLITVALUES' 'PARTITIONS' 'ALLNUM' 'DELIM' +'BUCKET_NULLABLE' 'CENTROIDS' 'ITERATIONS' 'DISTANCE_TYPE' @@ -58,8 +103,19 @@ null 'TIME_ZONE' 'TRAINING_DATA_SIZE' 'ANOMALY_SCORE_THRESHOLD' +'APPEND' +'COUNTFIELD' +'SHOWCOUNT' +'LIMIT' +'USEOTHER' +'INPUT' +'OUTPUT' +'PATH' 'CASE' +'ELSE' 'IN' +'EXISTS' +'GEOIP' 'NOT' 'OR' 'AND' @@ -67,6 +123,7 @@ null 'TRUE' 'FALSE' 'REGEXP' +'REGEX_MATCH' 'CONVERT_TZ' 'DATETIME' 'DAY' @@ -108,10 +165,12 @@ null 'FLOAT' 'STRING' 'BOOLEAN' +'IP' '|' ',' '.' '=' +'==' '>' '<' null @@ -128,15 +187,19 @@ null ')' '[' ']' +'{' +'}' '\'' '"' '`' +'->' '~' '&' '^' 'AVG' 'COUNT' 'DISTINCT_COUNT' +'DISTINCT_COUNT_APPROX' 'ESTDC' 'ESTDC_ERROR' 'MAX' @@ -153,16 +216,14 @@ null 'VAR_POP' 'STDDEV_SAMP' 'STDDEV_POP' +'PERC' 'PERCENTILE' +'PERCENTILE_APPROX' +'EARLIEST' +'LATEST' 'TAKE' -'FIRST' -'LAST' 'LIST' 'VALUES' -'EARLIEST' -'EARLIEST_TIME' -'LATEST' -'LATEST_TIME' 'PER_DAY' 'PER_HOUR' 'PER_MINUTE' @@ -171,6 +232,19 @@ null 'SPARKLINE' 'C' 'DC' +'ROW_NUMBER' +'RANK' +'DENSE_RANK' +'PERCENT_RANK' +'CUME_DIST' +'FIRST' +'LAST' +'NTH' +'NTILE' +'ADD' +'SUBTRACT' +'MULTIPLY' +'DIVIDE' 'ABS' 'CBRT' 'CEIL' @@ -179,12 +253,13 @@ null 'CRC32' 'E' 'EXP' +'EXPM1' 'FLOOR' 'LN' 'LOG' -'LOG10' -'LOG2' +null 'MOD' +'MODULUS' 'PI' 'POSITION' 'POW' @@ -194,16 +269,23 @@ null 'SIGN' 'SQRT' 'TRUNCATE' +'RINT' +'SIGNUM' 'ACOS' 'ASIN' 'ATAN' 'ATAN2' 'COS' +'COSH' 'COT' 'DEGREES' 'RADIANS' 'SIN' +'SINH' 'TAN' +'MD5' +'SHA1' +'SHA2' 'ADDDATE' 'ADDTIME' 'CURDATE' @@ -255,6 +337,7 @@ null 'UTC_TIMESTAMP' 'WEEKDAY' 'YEARWEEK' +'STRFTIME' 'SUBSTR' 'SUBSTRING' 'LTRIM' @@ -277,10 +360,34 @@ null 'LIKE' 'ISNULL' 'ISNOTNULL' +'CIDRMATCH' +'BETWEEN' +'ISPRESENT' +'ISEMPTY' +'ISBLANK' +'ARRAY' +'ARRAY_LENGTH' +'MVJOIN' +'FORALL' +'FILTER' +'TRANSFORM' +'REDUCE' +'JSON_VALID' +'JSON' +'JSON_OBJECT' +'JSON_ARRAY' +'JSON_ARRAY_LENGTH' +'JSON_EXTRACT' +'JSON_KEYS' +'JSON_SET' +'JSON_DELETE' +'JSON_APPEND' +'JSON_EXTEND' 'IFNULL' 'NULLIF' 'IF' 'TYPEOF' +'COALESCE' 'MATCH' 'MATCH_PHRASE' 'MATCH_PHRASE_PREFIX' @@ -320,6 +427,11 @@ null 'TYPE' 'ZERO_TERMS_QUERY' 'SPAN' +'BINS' +'MINSPAN' +'START' +'END' +'ALIGNTIME' 'MS' 'S' 'M' @@ -327,6 +439,25 @@ null 'W' 'Q' 'Y' +'SEC' +'SECS' +'SECONDS' +'MINS' +'MINUTES' +'HR' +'HRS' +'HOURS' +'DAYS' +'MON' +'MONTHS' +'US' +'CS' +'DS' +null +null +null +null +null null null null @@ -343,20 +474,27 @@ SPACE SEARCH DESCRIBE SHOW +EXPLAIN FROM WHERE FIELDS +FIELD +TABLE RENAME STATS +EVENTSTATS DEDUP SORT EVAL HEAD +BIN TOP RARE PARSE -METHOD +SPATH REGEX +REX +SED PUNCT GROK PATTERN @@ -365,24 +503,62 @@ NEW_FIELD KMEANS AD ML +FILLNULL +FLATTEN +TRENDLINE +TIMECHART +APPENDCOL +EXPAND +SIMPLE_PATTERN +BRAIN +VARIABLE_COUNT_THRESHOLD +FREQUENCY_THRESHOLD_PERCENTAGE +METHOD +MAX_SAMPLE_COUNT +MAX_MATCH +OFFSET_FIELD +BUFFER_LIMIT +LABEL +AGGREGATION +JOIN +ON +INNER +OUTER +FULL +SEMI +ANTI +CROSS +LEFT_HINT +RIGHT_HINT AS BY SOURCE INDEX +A +ASC D DESC DATASOURCES -SORTBY +USING +WITH +SIMPLE +STANDARD +COST +EXTENDED +OVERRIDE +OVERWRITE AUTO STR -IP NUM +SMA +WMA KEEPEMPTY CONSECUTIVE DEDUP_SPLITVALUES PARTITIONS ALLNUM DELIM +BUCKET_NULLABLE CENTROIDS ITERATIONS DISTANCE_TYPE @@ -397,8 +573,19 @@ TIME_FIELD TIME_ZONE TRAINING_DATA_SIZE ANOMALY_SCORE_THRESHOLD +APPEND +COUNTFIELD +SHOWCOUNT +LIMIT +USEOTHER +INPUT +OUTPUT +PATH CASE +ELSE IN +EXISTS +GEOIP NOT OR AND @@ -406,6 +593,7 @@ XOR TRUE FALSE REGEXP +REGEX_MATCH CONVERT_TZ DATETIME DAY @@ -447,10 +635,12 @@ LONG FLOAT STRING BOOLEAN +IP PIPE COMMA DOT EQUAL +DOUBLE_EQUAL GREATER LESS NOT_GREATER @@ -467,15 +657,19 @@ LT_PRTHS RT_PRTHS LT_SQR_PRTHS RT_SQR_PRTHS +LT_CURLY +RT_CURLY SINGLE_QUOTE DOUBLE_QUOTE BACKTICK +ARROW BIT_NOT_OP BIT_AND_OP BIT_XOR_OP AVG COUNT DISTINCT_COUNT +DISTINCT_COUNT_APPROX ESTDC ESTDC_ERROR MAX @@ -492,16 +686,14 @@ VAR_SAMP VAR_POP STDDEV_SAMP STDDEV_POP +PERC PERCENTILE +PERCENTILE_APPROX +EARLIEST +LATEST TAKE -FIRST -LAST LIST VALUES -EARLIEST -EARLIEST_TIME -LATEST -LATEST_TIME PER_DAY PER_HOUR PER_MINUTE @@ -510,6 +702,19 @@ RATE SPARKLINE C DC +ROW_NUMBER +RANK +DENSE_RANK +PERCENT_RANK +CUME_DIST +FIRST +LAST +NTH +NTILE +PLUS_FUCTION +MINUS_FUCTION +STAR_FUNCTION +DIVIDE_FUNCTION ABS CBRT CEIL @@ -518,12 +723,13 @@ CONV CRC32 E EXP +EXPM1 FLOOR LN LOG -LOG10 -LOG2 +LOG_WITH_BASE MOD +MODULUS PI POSITION POW @@ -533,16 +739,23 @@ ROUND SIGN SQRT TRUNCATE +RINT +SIGNUM ACOS ASIN ATAN ATAN2 COS +COSH COT DEGREES RADIANS SIN +SINH TAN +MD5 +SHA1 +SHA2 ADDDATE ADDTIME CURDATE @@ -594,6 +807,7 @@ UTC_TIME UTC_TIMESTAMP WEEKDAY YEARWEEK +STRFTIME SUBSTR SUBSTRING LTRIM @@ -616,10 +830,34 @@ CAST LIKE ISNULL ISNOTNULL +CIDRMATCH +BETWEEN +ISPRESENT +ISEMPTY +ISBLANK +ARRAY +ARRAY_LENGTH +MVJOIN +FORALL +FILTER +TRANSFORM +REDUCE +JSON_VALID +JSON +JSON_OBJECT +JSON_ARRAY +JSON_ARRAY_LENGTH +JSON_EXTRACT +JSON_KEYS +JSON_SET +JSON_DELETE +JSON_APPEND +JSON_EXTEND IFNULL NULLIF IF TYPEOF +COALESCE MATCH MATCH_PHRASE MATCH_PHRASE_PREFIX @@ -659,6 +897,11 @@ TIE_BREAKER TYPE ZERO_TERMS_QUERY SPAN +BINS +MINSPAN +START +END +ALIGNTIME MS S M @@ -666,14 +909,33 @@ H W Q Y +SEC +SECS +SECONDS +MINS +MINUTES +HR +HRS +HOURS +DAYS +MON +MONTHS +US +CS +DS +PERCENTILE_SHORTCUT ID CLUSTER INTEGER_LITERAL DECIMAL_LITERAL +FLOAT_LITERAL +DOUBLE_LITERAL ID_DATE_SUFFIX DQUOTA_STRING SQUOTA_STRING BQUOTA_STRING +LINE_COMMENT +BLOCK_COMMENT ERROR_RECOGNITION rule names: @@ -681,20 +943,27 @@ SPACE SEARCH DESCRIBE SHOW +EXPLAIN FROM WHERE FIELDS +FIELD +TABLE RENAME STATS +EVENTSTATS DEDUP SORT EVAL HEAD +BIN TOP RARE PARSE -METHOD +SPATH REGEX +REX +SED PUNCT GROK PATTERN @@ -703,24 +972,62 @@ NEW_FIELD KMEANS AD ML +FILLNULL +FLATTEN +TRENDLINE +TIMECHART +APPENDCOL +EXPAND +SIMPLE_PATTERN +BRAIN +VARIABLE_COUNT_THRESHOLD +FREQUENCY_THRESHOLD_PERCENTAGE +METHOD +MAX_SAMPLE_COUNT +MAX_MATCH +OFFSET_FIELD +BUFFER_LIMIT +LABEL +AGGREGATION +JOIN +ON +INNER +OUTER +FULL +SEMI +ANTI +CROSS +LEFT_HINT +RIGHT_HINT AS BY SOURCE INDEX +A +ASC D DESC DATASOURCES -SORTBY +USING +WITH +SIMPLE +STANDARD +COST +EXTENDED +OVERRIDE +OVERWRITE AUTO STR -IP NUM +SMA +WMA KEEPEMPTY CONSECUTIVE DEDUP_SPLITVALUES PARTITIONS ALLNUM DELIM +BUCKET_NULLABLE CENTROIDS ITERATIONS DISTANCE_TYPE @@ -735,8 +1042,19 @@ TIME_FIELD TIME_ZONE TRAINING_DATA_SIZE ANOMALY_SCORE_THRESHOLD +APPEND +COUNTFIELD +SHOWCOUNT +LIMIT +USEOTHER +INPUT +OUTPUT +PATH CASE +ELSE IN +EXISTS +GEOIP NOT OR AND @@ -744,6 +1062,7 @@ XOR TRUE FALSE REGEXP +REGEX_MATCH CONVERT_TZ DATETIME DAY @@ -785,10 +1104,12 @@ LONG FLOAT STRING BOOLEAN +IP PIPE COMMA DOT EQUAL +DOUBLE_EQUAL GREATER LESS NOT_GREATER @@ -805,15 +1126,19 @@ LT_PRTHS RT_PRTHS LT_SQR_PRTHS RT_SQR_PRTHS +LT_CURLY +RT_CURLY SINGLE_QUOTE DOUBLE_QUOTE BACKTICK +ARROW BIT_NOT_OP BIT_AND_OP BIT_XOR_OP AVG COUNT DISTINCT_COUNT +DISTINCT_COUNT_APPROX ESTDC ESTDC_ERROR MAX @@ -830,16 +1155,14 @@ VAR_SAMP VAR_POP STDDEV_SAMP STDDEV_POP +PERC PERCENTILE +PERCENTILE_APPROX +EARLIEST +LATEST TAKE -FIRST -LAST LIST VALUES -EARLIEST -EARLIEST_TIME -LATEST -LATEST_TIME PER_DAY PER_HOUR PER_MINUTE @@ -848,6 +1171,19 @@ RATE SPARKLINE C DC +ROW_NUMBER +RANK +DENSE_RANK +PERCENT_RANK +CUME_DIST +FIRST +LAST +NTH +NTILE +PLUS_FUCTION +MINUS_FUCTION +STAR_FUNCTION +DIVIDE_FUNCTION ABS CBRT CEIL @@ -856,12 +1192,13 @@ CONV CRC32 E EXP +EXPM1 FLOOR LN LOG -LOG10 -LOG2 +LOG_WITH_BASE MOD +MODULUS PI POSITION POW @@ -871,16 +1208,23 @@ ROUND SIGN SQRT TRUNCATE +RINT +SIGNUM ACOS ASIN ATAN ATAN2 COS +COSH COT DEGREES RADIANS SIN +SINH TAN +MD5 +SHA1 +SHA2 ADDDATE ADDTIME CURDATE @@ -932,6 +1276,7 @@ UTC_TIME UTC_TIMESTAMP WEEKDAY YEARWEEK +STRFTIME SUBSTR SUBSTRING LTRIM @@ -954,10 +1299,34 @@ CAST LIKE ISNULL ISNOTNULL +CIDRMATCH +BETWEEN +ISPRESENT +ISEMPTY +ISBLANK +ARRAY +ARRAY_LENGTH +MVJOIN +FORALL +FILTER +TRANSFORM +REDUCE +JSON_VALID +JSON +JSON_OBJECT +JSON_ARRAY +JSON_ARRAY_LENGTH +JSON_EXTRACT +JSON_KEYS +JSON_SET +JSON_DELETE +JSON_APPEND +JSON_EXTEND IFNULL NULLIF IF TYPEOF +COALESCE MATCH MATCH_PHRASE MATCH_PHRASE_PREFIX @@ -997,6 +1366,11 @@ TIE_BREAKER TYPE ZERO_TERMS_QUERY SPAN +BINS +MINSPAN +START +END +ALIGNTIME MS S M @@ -1004,18 +1378,37 @@ H W Q Y +SEC +SECS +SECONDS +MINS +MINUTES +HR +HRS +HOURS +DAYS +MON +MONTHS +US +CS +DS +PERCENTILE_SHORTCUT ID CLUSTER INTEGER_LITERAL DECIMAL_LITERAL +FLOAT_LITERAL +DOUBLE_LITERAL DATE_SUFFIX -ID_LITERAL CLUSTER_PREFIX_LITERAL ID_DATE_SUFFIX DQUOTA_STRING SQUOTA_STRING BQUOTA_STRING DEC_DIGIT +ID_LITERAL +LINE_COMMENT +BLOCK_COMMENT ERROR_RECOGNITION channel names: @@ -1030,4 +1423,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 336, 3509, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 1, 0, 4, 0, 683, 8, 0, 11, 0, 12, 0, 684, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 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, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 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, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 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, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 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, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 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, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 111, 1, 111, 1, 112, 1, 112, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 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, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 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, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 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, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 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, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 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, 168, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 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, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 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, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 260, 1, 260, 1, 260, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 279, 1, 279, 1, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 320, 1, 320, 1, 320, 1, 321, 1, 321, 1, 322, 1, 322, 1, 323, 1, 323, 1, 324, 1, 324, 1, 325, 1, 325, 1, 326, 1, 326, 1, 327, 1, 327, 1, 328, 1, 328, 1, 329, 4, 329, 3412, 8, 329, 11, 329, 12, 329, 3413, 1, 330, 4, 330, 3417, 8, 330, 11, 330, 12, 330, 3418, 3, 330, 3421, 8, 330, 1, 330, 1, 330, 4, 330, 3425, 8, 330, 11, 330, 12, 330, 3426, 1, 331, 1, 331, 4, 331, 3431, 8, 331, 11, 331, 12, 331, 3432, 4, 331, 3435, 8, 331, 11, 331, 12, 331, 3436, 1, 332, 1, 332, 5, 332, 3441, 8, 332, 10, 332, 12, 332, 3444, 9, 332, 1, 333, 4, 333, 3447, 8, 333, 11, 333, 12, 333, 3448, 1, 333, 5, 333, 3452, 8, 333, 10, 333, 12, 333, 3455, 9, 333, 1, 333, 1, 333, 1, 334, 3, 334, 3460, 8, 334, 1, 334, 1, 334, 1, 334, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 5, 335, 3471, 8, 335, 10, 335, 12, 335, 3474, 9, 335, 1, 335, 1, 335, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 5, 336, 3484, 8, 336, 10, 336, 12, 336, 3487, 9, 336, 1, 336, 1, 336, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 5, 337, 3497, 8, 337, 10, 337, 12, 337, 3500, 9, 337, 1, 337, 1, 337, 1, 338, 1, 338, 1, 339, 1, 339, 1, 339, 1, 339, 1, 3448, 0, 340, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 246, 493, 247, 495, 248, 497, 249, 499, 250, 501, 251, 503, 252, 505, 253, 507, 254, 509, 255, 511, 256, 513, 257, 515, 258, 517, 259, 519, 260, 521, 261, 523, 262, 525, 263, 527, 264, 529, 265, 531, 266, 533, 267, 535, 268, 537, 269, 539, 270, 541, 271, 543, 272, 545, 273, 547, 274, 549, 275, 551, 276, 553, 277, 555, 278, 557, 279, 559, 280, 561, 281, 563, 282, 565, 283, 567, 284, 569, 285, 571, 286, 573, 287, 575, 288, 577, 289, 579, 290, 581, 291, 583, 292, 585, 293, 587, 294, 589, 295, 591, 296, 593, 297, 595, 298, 597, 299, 599, 300, 601, 301, 603, 302, 605, 303, 607, 304, 609, 305, 611, 306, 613, 307, 615, 308, 617, 309, 619, 310, 621, 311, 623, 312, 625, 313, 627, 314, 629, 315, 631, 316, 633, 317, 635, 318, 637, 319, 639, 320, 641, 321, 643, 322, 645, 323, 647, 324, 649, 325, 651, 326, 653, 327, 655, 328, 657, 329, 659, 330, 661, 331, 663, 0, 665, 0, 667, 0, 669, 332, 671, 333, 673, 334, 675, 335, 677, 0, 679, 336, 1, 0, 35, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 83, 83, 115, 115, 2, 0, 69, 69, 101, 101, 2, 0, 65, 65, 97, 97, 2, 0, 82, 82, 114, 114, 2, 0, 67, 67, 99, 99, 2, 0, 72, 72, 104, 104, 2, 0, 68, 68, 100, 100, 2, 0, 73, 73, 105, 105, 2, 0, 66, 66, 98, 98, 2, 0, 79, 79, 111, 111, 2, 0, 87, 87, 119, 119, 2, 0, 70, 70, 102, 102, 2, 0, 77, 77, 109, 109, 2, 0, 76, 76, 108, 108, 2, 0, 78, 78, 110, 110, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 80, 80, 112, 112, 2, 0, 86, 86, 118, 118, 2, 0, 71, 71, 103, 103, 2, 0, 88, 88, 120, 120, 2, 0, 75, 75, 107, 107, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 81, 81, 113, 113, 1, 0, 45, 46, 2, 0, 42, 42, 48, 57, 3, 0, 42, 42, 64, 90, 97, 122, 6, 0, 42, 42, 45, 45, 48, 57, 65, 90, 95, 95, 97, 122, 3, 0, 42, 42, 65, 90, 97, 122, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 92, 92, 96, 96, 1, 0, 48, 57, 3524, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 0, 545, 1, 0, 0, 0, 0, 547, 1, 0, 0, 0, 0, 549, 1, 0, 0, 0, 0, 551, 1, 0, 0, 0, 0, 553, 1, 0, 0, 0, 0, 555, 1, 0, 0, 0, 0, 557, 1, 0, 0, 0, 0, 559, 1, 0, 0, 0, 0, 561, 1, 0, 0, 0, 0, 563, 1, 0, 0, 0, 0, 565, 1, 0, 0, 0, 0, 567, 1, 0, 0, 0, 0, 569, 1, 0, 0, 0, 0, 571, 1, 0, 0, 0, 0, 573, 1, 0, 0, 0, 0, 575, 1, 0, 0, 0, 0, 577, 1, 0, 0, 0, 0, 579, 1, 0, 0, 0, 0, 581, 1, 0, 0, 0, 0, 583, 1, 0, 0, 0, 0, 585, 1, 0, 0, 0, 0, 587, 1, 0, 0, 0, 0, 589, 1, 0, 0, 0, 0, 591, 1, 0, 0, 0, 0, 593, 1, 0, 0, 0, 0, 595, 1, 0, 0, 0, 0, 597, 1, 0, 0, 0, 0, 599, 1, 0, 0, 0, 0, 601, 1, 0, 0, 0, 0, 603, 1, 0, 0, 0, 0, 605, 1, 0, 0, 0, 0, 607, 1, 0, 0, 0, 0, 609, 1, 0, 0, 0, 0, 611, 1, 0, 0, 0, 0, 613, 1, 0, 0, 0, 0, 615, 1, 0, 0, 0, 0, 617, 1, 0, 0, 0, 0, 619, 1, 0, 0, 0, 0, 621, 1, 0, 0, 0, 0, 623, 1, 0, 0, 0, 0, 625, 1, 0, 0, 0, 0, 627, 1, 0, 0, 0, 0, 629, 1, 0, 0, 0, 0, 631, 1, 0, 0, 0, 0, 633, 1, 0, 0, 0, 0, 635, 1, 0, 0, 0, 0, 637, 1, 0, 0, 0, 0, 639, 1, 0, 0, 0, 0, 641, 1, 0, 0, 0, 0, 643, 1, 0, 0, 0, 0, 645, 1, 0, 0, 0, 0, 647, 1, 0, 0, 0, 0, 649, 1, 0, 0, 0, 0, 651, 1, 0, 0, 0, 0, 653, 1, 0, 0, 0, 0, 655, 1, 0, 0, 0, 0, 657, 1, 0, 0, 0, 0, 659, 1, 0, 0, 0, 0, 661, 1, 0, 0, 0, 0, 669, 1, 0, 0, 0, 0, 671, 1, 0, 0, 0, 0, 673, 1, 0, 0, 0, 0, 675, 1, 0, 0, 0, 0, 679, 1, 0, 0, 0, 1, 682, 1, 0, 0, 0, 3, 688, 1, 0, 0, 0, 5, 695, 1, 0, 0, 0, 7, 704, 1, 0, 0, 0, 9, 709, 1, 0, 0, 0, 11, 714, 1, 0, 0, 0, 13, 720, 1, 0, 0, 0, 15, 727, 1, 0, 0, 0, 17, 734, 1, 0, 0, 0, 19, 740, 1, 0, 0, 0, 21, 746, 1, 0, 0, 0, 23, 751, 1, 0, 0, 0, 25, 756, 1, 0, 0, 0, 27, 761, 1, 0, 0, 0, 29, 765, 1, 0, 0, 0, 31, 770, 1, 0, 0, 0, 33, 776, 1, 0, 0, 0, 35, 783, 1, 0, 0, 0, 37, 789, 1, 0, 0, 0, 39, 795, 1, 0, 0, 0, 41, 800, 1, 0, 0, 0, 43, 808, 1, 0, 0, 0, 45, 817, 1, 0, 0, 0, 47, 827, 1, 0, 0, 0, 49, 834, 1, 0, 0, 0, 51, 837, 1, 0, 0, 0, 53, 840, 1, 0, 0, 0, 55, 843, 1, 0, 0, 0, 57, 846, 1, 0, 0, 0, 59, 853, 1, 0, 0, 0, 61, 859, 1, 0, 0, 0, 63, 861, 1, 0, 0, 0, 65, 866, 1, 0, 0, 0, 67, 878, 1, 0, 0, 0, 69, 885, 1, 0, 0, 0, 71, 890, 1, 0, 0, 0, 73, 894, 1, 0, 0, 0, 75, 897, 1, 0, 0, 0, 77, 901, 1, 0, 0, 0, 79, 911, 1, 0, 0, 0, 81, 923, 1, 0, 0, 0, 83, 941, 1, 0, 0, 0, 85, 952, 1, 0, 0, 0, 87, 959, 1, 0, 0, 0, 89, 965, 1, 0, 0, 0, 91, 975, 1, 0, 0, 0, 93, 986, 1, 0, 0, 0, 95, 1000, 1, 0, 0, 0, 97, 1016, 1, 0, 0, 0, 99, 1029, 1, 0, 0, 0, 101, 1041, 1, 0, 0, 0, 103, 1054, 1, 0, 0, 0, 105, 1065, 1, 0, 0, 0, 107, 1078, 1, 0, 0, 0, 109, 1093, 1, 0, 0, 0, 111, 1104, 1, 0, 0, 0, 113, 1114, 1, 0, 0, 0, 115, 1133, 1, 0, 0, 0, 117, 1157, 1, 0, 0, 0, 119, 1162, 1, 0, 0, 0, 121, 1165, 1, 0, 0, 0, 123, 1169, 1, 0, 0, 0, 125, 1172, 1, 0, 0, 0, 127, 1176, 1, 0, 0, 0, 129, 1180, 1, 0, 0, 0, 131, 1185, 1, 0, 0, 0, 133, 1191, 1, 0, 0, 0, 135, 1198, 1, 0, 0, 0, 137, 1209, 1, 0, 0, 0, 139, 1218, 1, 0, 0, 0, 141, 1222, 1, 0, 0, 0, 143, 1231, 1, 0, 0, 0, 145, 1247, 1, 0, 0, 0, 147, 1258, 1, 0, 0, 0, 149, 1270, 1, 0, 0, 0, 151, 1281, 1, 0, 0, 0, 153, 1286, 1, 0, 0, 0, 155, 1303, 1, 0, 0, 0, 157, 1315, 1, 0, 0, 0, 159, 1327, 1, 0, 0, 0, 161, 1339, 1, 0, 0, 0, 163, 1348, 1, 0, 0, 0, 165, 1360, 1, 0, 0, 0, 167, 1372, 1, 0, 0, 0, 169, 1379, 1, 0, 0, 0, 171, 1398, 1, 0, 0, 0, 173, 1412, 1, 0, 0, 0, 175, 1427, 1, 0, 0, 0, 177, 1441, 1, 0, 0, 0, 179, 1447, 1, 0, 0, 0, 181, 1461, 1, 0, 0, 0, 183, 1469, 1, 0, 0, 0, 185, 1476, 1, 0, 0, 0, 187, 1495, 1, 0, 0, 0, 189, 1512, 1, 0, 0, 0, 191, 1517, 1, 0, 0, 0, 193, 1530, 1, 0, 0, 0, 195, 1535, 1, 0, 0, 0, 197, 1546, 1, 0, 0, 0, 199, 1556, 1, 0, 0, 0, 201, 1563, 1, 0, 0, 0, 203, 1575, 1, 0, 0, 0, 205, 1579, 1, 0, 0, 0, 207, 1587, 1, 0, 0, 0, 209, 1594, 1, 0, 0, 0, 211, 1599, 1, 0, 0, 0, 213, 1605, 1, 0, 0, 0, 215, 1612, 1, 0, 0, 0, 217, 1620, 1, 0, 0, 0, 219, 1622, 1, 0, 0, 0, 221, 1624, 1, 0, 0, 0, 223, 1626, 1, 0, 0, 0, 225, 1628, 1, 0, 0, 0, 227, 1630, 1, 0, 0, 0, 229, 1632, 1, 0, 0, 0, 231, 1635, 1, 0, 0, 0, 233, 1638, 1, 0, 0, 0, 235, 1641, 1, 0, 0, 0, 237, 1643, 1, 0, 0, 0, 239, 1645, 1, 0, 0, 0, 241, 1647, 1, 0, 0, 0, 243, 1649, 1, 0, 0, 0, 245, 1651, 1, 0, 0, 0, 247, 1653, 1, 0, 0, 0, 249, 1655, 1, 0, 0, 0, 251, 1657, 1, 0, 0, 0, 253, 1659, 1, 0, 0, 0, 255, 1661, 1, 0, 0, 0, 257, 1663, 1, 0, 0, 0, 259, 1665, 1, 0, 0, 0, 261, 1667, 1, 0, 0, 0, 263, 1669, 1, 0, 0, 0, 265, 1671, 1, 0, 0, 0, 267, 1673, 1, 0, 0, 0, 269, 1675, 1, 0, 0, 0, 271, 1679, 1, 0, 0, 0, 273, 1685, 1, 0, 0, 0, 275, 1700, 1, 0, 0, 0, 277, 1706, 1, 0, 0, 0, 279, 1718, 1, 0, 0, 0, 281, 1722, 1, 0, 0, 0, 283, 1727, 1, 0, 0, 0, 285, 1734, 1, 0, 0, 0, 287, 1738, 1, 0, 0, 0, 289, 1743, 1, 0, 0, 0, 291, 1749, 1, 0, 0, 0, 293, 1755, 1, 0, 0, 0, 295, 1762, 1, 0, 0, 0, 297, 1766, 1, 0, 0, 0, 299, 1772, 1, 0, 0, 0, 301, 1781, 1, 0, 0, 0, 303, 1789, 1, 0, 0, 0, 305, 1801, 1, 0, 0, 0, 307, 1812, 1, 0, 0, 0, 309, 1823, 1, 0, 0, 0, 311, 1828, 1, 0, 0, 0, 313, 1834, 1, 0, 0, 0, 315, 1839, 1, 0, 0, 0, 317, 1844, 1, 0, 0, 0, 319, 1851, 1, 0, 0, 0, 321, 1860, 1, 0, 0, 0, 323, 1874, 1, 0, 0, 0, 325, 1881, 1, 0, 0, 0, 327, 1893, 1, 0, 0, 0, 329, 1901, 1, 0, 0, 0, 331, 1910, 1, 0, 0, 0, 333, 1921, 1, 0, 0, 0, 335, 1932, 1, 0, 0, 0, 337, 1937, 1, 0, 0, 0, 339, 1947, 1, 0, 0, 0, 341, 1949, 1, 0, 0, 0, 343, 1952, 1, 0, 0, 0, 345, 1956, 1, 0, 0, 0, 347, 1961, 1, 0, 0, 0, 349, 1966, 1, 0, 0, 0, 351, 1974, 1, 0, 0, 0, 353, 1979, 1, 0, 0, 0, 355, 1985, 1, 0, 0, 0, 357, 1987, 1, 0, 0, 0, 359, 1991, 1, 0, 0, 0, 361, 1997, 1, 0, 0, 0, 363, 2000, 1, 0, 0, 0, 365, 2004, 1, 0, 0, 0, 367, 2010, 1, 0, 0, 0, 369, 2015, 1, 0, 0, 0, 371, 2019, 1, 0, 0, 0, 373, 2022, 1, 0, 0, 0, 375, 2031, 1, 0, 0, 0, 377, 2035, 1, 0, 0, 0, 379, 2041, 1, 0, 0, 0, 381, 2046, 1, 0, 0, 0, 383, 2052, 1, 0, 0, 0, 385, 2057, 1, 0, 0, 0, 387, 2062, 1, 0, 0, 0, 389, 2071, 1, 0, 0, 0, 391, 2076, 1, 0, 0, 0, 393, 2081, 1, 0, 0, 0, 395, 2086, 1, 0, 0, 0, 397, 2092, 1, 0, 0, 0, 399, 2096, 1, 0, 0, 0, 401, 2100, 1, 0, 0, 0, 403, 2108, 1, 0, 0, 0, 405, 2116, 1, 0, 0, 0, 407, 2120, 1, 0, 0, 0, 409, 2124, 1, 0, 0, 0, 411, 2132, 1, 0, 0, 0, 413, 2140, 1, 0, 0, 0, 415, 2148, 1, 0, 0, 0, 417, 2161, 1, 0, 0, 0, 419, 2174, 1, 0, 0, 0, 421, 2192, 1, 0, 0, 0, 423, 2200, 1, 0, 0, 0, 425, 2205, 1, 0, 0, 0, 427, 2214, 1, 0, 0, 0, 429, 2223, 1, 0, 0, 0, 431, 2235, 1, 0, 0, 0, 433, 2244, 1, 0, 0, 0, 435, 2252, 1, 0, 0, 0, 437, 2263, 1, 0, 0, 0, 439, 2273, 1, 0, 0, 0, 441, 2283, 1, 0, 0, 0, 443, 2296, 1, 0, 0, 0, 445, 2308, 1, 0, 0, 0, 447, 2316, 1, 0, 0, 0, 449, 2326, 1, 0, 0, 0, 451, 2340, 1, 0, 0, 0, 453, 2351, 1, 0, 0, 0, 455, 2360, 1, 0, 0, 0, 457, 2370, 1, 0, 0, 0, 459, 2385, 1, 0, 0, 0, 461, 2394, 1, 0, 0, 0, 463, 2403, 1, 0, 0, 0, 465, 2413, 1, 0, 0, 0, 467, 2417, 1, 0, 0, 0, 469, 2428, 1, 0, 0, 0, 471, 2440, 1, 0, 0, 0, 473, 2452, 1, 0, 0, 0, 475, 2464, 1, 0, 0, 0, 477, 2472, 1, 0, 0, 0, 479, 2480, 1, 0, 0, 0, 481, 2488, 1, 0, 0, 0, 483, 2493, 1, 0, 0, 0, 485, 2502, 1, 0, 0, 0, 487, 2512, 1, 0, 0, 0, 489, 2525, 1, 0, 0, 0, 491, 2539, 1, 0, 0, 0, 493, 2551, 1, 0, 0, 0, 495, 2563, 1, 0, 0, 0, 497, 2571, 1, 0, 0, 0, 499, 2582, 1, 0, 0, 0, 501, 2597, 1, 0, 0, 0, 503, 2606, 1, 0, 0, 0, 505, 2615, 1, 0, 0, 0, 507, 2629, 1, 0, 0, 0, 509, 2637, 1, 0, 0, 0, 511, 2646, 1, 0, 0, 0, 513, 2653, 1, 0, 0, 0, 515, 2663, 1, 0, 0, 0, 517, 2669, 1, 0, 0, 0, 519, 2675, 1, 0, 0, 0, 521, 2680, 1, 0, 0, 0, 523, 2683, 1, 0, 0, 0, 525, 2689, 1, 0, 0, 0, 527, 2695, 1, 0, 0, 0, 529, 2702, 1, 0, 0, 0, 531, 2712, 1, 0, 0, 0, 533, 2719, 1, 0, 0, 0, 535, 2726, 1, 0, 0, 0, 537, 2732, 1, 0, 0, 0, 539, 2737, 1, 0, 0, 0, 541, 2743, 1, 0, 0, 0, 543, 2750, 1, 0, 0, 0, 545, 2758, 1, 0, 0, 0, 547, 2766, 1, 0, 0, 0, 549, 2771, 1, 0, 0, 0, 551, 2776, 1, 0, 0, 0, 553, 2783, 1, 0, 0, 0, 555, 2793, 1, 0, 0, 0, 557, 2800, 1, 0, 0, 0, 559, 2807, 1, 0, 0, 0, 561, 2810, 1, 0, 0, 0, 563, 2817, 1, 0, 0, 0, 565, 2823, 1, 0, 0, 0, 567, 2836, 1, 0, 0, 0, 569, 2856, 1, 0, 0, 0, 571, 2874, 1, 0, 0, 0, 573, 2894, 1, 0, 0, 0, 575, 2906, 1, 0, 0, 0, 577, 2919, 1, 0, 0, 0, 579, 2942, 1, 0, 0, 0, 581, 2959, 1, 0, 0, 0, 583, 2968, 1, 0, 0, 0, 585, 3004, 1, 0, 0, 0, 587, 3010, 1, 0, 0, 0, 589, 3027, 1, 0, 0, 0, 591, 3041, 1, 0, 0, 0, 593, 3058, 1, 0, 0, 0, 595, 3085, 1, 0, 0, 0, 597, 3092, 1, 0, 0, 0, 599, 3098, 1, 0, 0, 0, 601, 3119, 1, 0, 0, 0, 603, 3139, 1, 0, 0, 0, 605, 3160, 1, 0, 0, 0, 607, 3174, 1, 0, 0, 0, 609, 3184, 1, 0, 0, 0, 611, 3192, 1, 0, 0, 0, 613, 3210, 1, 0, 0, 0, 615, 3234, 1, 0, 0, 0, 617, 3249, 1, 0, 0, 0, 619, 3270, 1, 0, 0, 0, 621, 3279, 1, 0, 0, 0, 623, 3291, 1, 0, 0, 0, 625, 3305, 1, 0, 0, 0, 627, 3320, 1, 0, 0, 0, 629, 3339, 1, 0, 0, 0, 631, 3347, 1, 0, 0, 0, 633, 3352, 1, 0, 0, 0, 635, 3364, 1, 0, 0, 0, 637, 3369, 1, 0, 0, 0, 639, 3386, 1, 0, 0, 0, 641, 3391, 1, 0, 0, 0, 643, 3394, 1, 0, 0, 0, 645, 3396, 1, 0, 0, 0, 647, 3398, 1, 0, 0, 0, 649, 3400, 1, 0, 0, 0, 651, 3402, 1, 0, 0, 0, 653, 3404, 1, 0, 0, 0, 655, 3406, 1, 0, 0, 0, 657, 3408, 1, 0, 0, 0, 659, 3411, 1, 0, 0, 0, 661, 3420, 1, 0, 0, 0, 663, 3434, 1, 0, 0, 0, 665, 3438, 1, 0, 0, 0, 667, 3446, 1, 0, 0, 0, 669, 3459, 1, 0, 0, 0, 671, 3464, 1, 0, 0, 0, 673, 3477, 1, 0, 0, 0, 675, 3490, 1, 0, 0, 0, 677, 3503, 1, 0, 0, 0, 679, 3505, 1, 0, 0, 0, 681, 683, 7, 0, 0, 0, 682, 681, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 682, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 687, 6, 0, 0, 0, 687, 2, 1, 0, 0, 0, 688, 689, 7, 1, 0, 0, 689, 690, 7, 2, 0, 0, 690, 691, 7, 3, 0, 0, 691, 692, 7, 4, 0, 0, 692, 693, 7, 5, 0, 0, 693, 694, 7, 6, 0, 0, 694, 4, 1, 0, 0, 0, 695, 696, 7, 7, 0, 0, 696, 697, 7, 2, 0, 0, 697, 698, 7, 1, 0, 0, 698, 699, 7, 5, 0, 0, 699, 700, 7, 4, 0, 0, 700, 701, 7, 8, 0, 0, 701, 702, 7, 9, 0, 0, 702, 703, 7, 2, 0, 0, 703, 6, 1, 0, 0, 0, 704, 705, 7, 1, 0, 0, 705, 706, 7, 6, 0, 0, 706, 707, 7, 10, 0, 0, 707, 708, 7, 11, 0, 0, 708, 8, 1, 0, 0, 0, 709, 710, 7, 12, 0, 0, 710, 711, 7, 4, 0, 0, 711, 712, 7, 10, 0, 0, 712, 713, 7, 13, 0, 0, 713, 10, 1, 0, 0, 0, 714, 715, 7, 11, 0, 0, 715, 716, 7, 6, 0, 0, 716, 717, 7, 2, 0, 0, 717, 718, 7, 4, 0, 0, 718, 719, 7, 2, 0, 0, 719, 12, 1, 0, 0, 0, 720, 721, 7, 12, 0, 0, 721, 722, 7, 8, 0, 0, 722, 723, 7, 2, 0, 0, 723, 724, 7, 14, 0, 0, 724, 725, 7, 7, 0, 0, 725, 726, 7, 1, 0, 0, 726, 14, 1, 0, 0, 0, 727, 728, 7, 4, 0, 0, 728, 729, 7, 2, 0, 0, 729, 730, 7, 15, 0, 0, 730, 731, 7, 3, 0, 0, 731, 732, 7, 13, 0, 0, 732, 733, 7, 2, 0, 0, 733, 16, 1, 0, 0, 0, 734, 735, 7, 1, 0, 0, 735, 736, 7, 16, 0, 0, 736, 737, 7, 3, 0, 0, 737, 738, 7, 16, 0, 0, 738, 739, 7, 1, 0, 0, 739, 18, 1, 0, 0, 0, 740, 741, 7, 7, 0, 0, 741, 742, 7, 2, 0, 0, 742, 743, 7, 7, 0, 0, 743, 744, 7, 17, 0, 0, 744, 745, 7, 18, 0, 0, 745, 20, 1, 0, 0, 0, 746, 747, 7, 1, 0, 0, 747, 748, 7, 10, 0, 0, 748, 749, 7, 4, 0, 0, 749, 750, 7, 16, 0, 0, 750, 22, 1, 0, 0, 0, 751, 752, 7, 2, 0, 0, 752, 753, 7, 19, 0, 0, 753, 754, 7, 3, 0, 0, 754, 755, 7, 14, 0, 0, 755, 24, 1, 0, 0, 0, 756, 757, 7, 6, 0, 0, 757, 758, 7, 2, 0, 0, 758, 759, 7, 3, 0, 0, 759, 760, 7, 7, 0, 0, 760, 26, 1, 0, 0, 0, 761, 762, 7, 16, 0, 0, 762, 763, 7, 10, 0, 0, 763, 764, 7, 18, 0, 0, 764, 28, 1, 0, 0, 0, 765, 766, 7, 4, 0, 0, 766, 767, 7, 3, 0, 0, 767, 768, 7, 4, 0, 0, 768, 769, 7, 2, 0, 0, 769, 30, 1, 0, 0, 0, 770, 771, 7, 18, 0, 0, 771, 772, 7, 3, 0, 0, 772, 773, 7, 4, 0, 0, 773, 774, 7, 1, 0, 0, 774, 775, 7, 2, 0, 0, 775, 32, 1, 0, 0, 0, 776, 777, 7, 13, 0, 0, 777, 778, 7, 2, 0, 0, 778, 779, 7, 16, 0, 0, 779, 780, 7, 6, 0, 0, 780, 781, 7, 10, 0, 0, 781, 782, 7, 7, 0, 0, 782, 34, 1, 0, 0, 0, 783, 784, 7, 4, 0, 0, 784, 785, 7, 2, 0, 0, 785, 786, 7, 20, 0, 0, 786, 787, 7, 2, 0, 0, 787, 788, 7, 21, 0, 0, 788, 36, 1, 0, 0, 0, 789, 790, 7, 18, 0, 0, 790, 791, 7, 17, 0, 0, 791, 792, 7, 15, 0, 0, 792, 793, 7, 5, 0, 0, 793, 794, 7, 16, 0, 0, 794, 38, 1, 0, 0, 0, 795, 796, 7, 20, 0, 0, 796, 797, 7, 4, 0, 0, 797, 798, 7, 10, 0, 0, 798, 799, 7, 22, 0, 0, 799, 40, 1, 0, 0, 0, 800, 801, 7, 18, 0, 0, 801, 802, 7, 3, 0, 0, 802, 803, 7, 16, 0, 0, 803, 804, 7, 16, 0, 0, 804, 805, 7, 2, 0, 0, 805, 806, 7, 4, 0, 0, 806, 807, 7, 15, 0, 0, 807, 42, 1, 0, 0, 0, 808, 809, 7, 18, 0, 0, 809, 810, 7, 3, 0, 0, 810, 811, 7, 16, 0, 0, 811, 812, 7, 16, 0, 0, 812, 813, 7, 2, 0, 0, 813, 814, 7, 4, 0, 0, 814, 815, 7, 15, 0, 0, 815, 816, 7, 1, 0, 0, 816, 44, 1, 0, 0, 0, 817, 818, 7, 15, 0, 0, 818, 819, 7, 2, 0, 0, 819, 820, 7, 11, 0, 0, 820, 821, 5, 95, 0, 0, 821, 822, 7, 12, 0, 0, 822, 823, 7, 8, 0, 0, 823, 824, 7, 2, 0, 0, 824, 825, 7, 14, 0, 0, 825, 826, 7, 7, 0, 0, 826, 46, 1, 0, 0, 0, 827, 828, 7, 22, 0, 0, 828, 829, 7, 13, 0, 0, 829, 830, 7, 2, 0, 0, 830, 831, 7, 3, 0, 0, 831, 832, 7, 15, 0, 0, 832, 833, 7, 1, 0, 0, 833, 48, 1, 0, 0, 0, 834, 835, 7, 3, 0, 0, 835, 836, 7, 7, 0, 0, 836, 50, 1, 0, 0, 0, 837, 838, 7, 13, 0, 0, 838, 839, 7, 14, 0, 0, 839, 52, 1, 0, 0, 0, 840, 841, 7, 3, 0, 0, 841, 842, 7, 1, 0, 0, 842, 54, 1, 0, 0, 0, 843, 844, 7, 9, 0, 0, 844, 845, 7, 23, 0, 0, 845, 56, 1, 0, 0, 0, 846, 847, 7, 1, 0, 0, 847, 848, 7, 10, 0, 0, 848, 849, 7, 17, 0, 0, 849, 850, 7, 4, 0, 0, 850, 851, 7, 5, 0, 0, 851, 852, 7, 2, 0, 0, 852, 58, 1, 0, 0, 0, 853, 854, 7, 8, 0, 0, 854, 855, 7, 15, 0, 0, 855, 856, 7, 7, 0, 0, 856, 857, 7, 2, 0, 0, 857, 858, 7, 21, 0, 0, 858, 60, 1, 0, 0, 0, 859, 860, 7, 7, 0, 0, 860, 62, 1, 0, 0, 0, 861, 862, 7, 7, 0, 0, 862, 863, 7, 2, 0, 0, 863, 864, 7, 1, 0, 0, 864, 865, 7, 5, 0, 0, 865, 64, 1, 0, 0, 0, 866, 867, 7, 7, 0, 0, 867, 868, 7, 3, 0, 0, 868, 869, 7, 16, 0, 0, 869, 870, 7, 3, 0, 0, 870, 871, 7, 1, 0, 0, 871, 872, 7, 10, 0, 0, 872, 873, 7, 17, 0, 0, 873, 874, 7, 4, 0, 0, 874, 875, 7, 5, 0, 0, 875, 876, 7, 2, 0, 0, 876, 877, 7, 1, 0, 0, 877, 66, 1, 0, 0, 0, 878, 879, 7, 1, 0, 0, 879, 880, 7, 10, 0, 0, 880, 881, 7, 4, 0, 0, 881, 882, 7, 16, 0, 0, 882, 883, 7, 9, 0, 0, 883, 884, 7, 23, 0, 0, 884, 68, 1, 0, 0, 0, 885, 886, 7, 3, 0, 0, 886, 887, 7, 17, 0, 0, 887, 888, 7, 16, 0, 0, 888, 889, 7, 10, 0, 0, 889, 70, 1, 0, 0, 0, 890, 891, 7, 1, 0, 0, 891, 892, 7, 16, 0, 0, 892, 893, 7, 4, 0, 0, 893, 72, 1, 0, 0, 0, 894, 895, 7, 8, 0, 0, 895, 896, 7, 18, 0, 0, 896, 74, 1, 0, 0, 0, 897, 898, 7, 15, 0, 0, 898, 899, 7, 17, 0, 0, 899, 900, 7, 13, 0, 0, 900, 76, 1, 0, 0, 0, 901, 902, 7, 22, 0, 0, 902, 903, 7, 2, 0, 0, 903, 904, 7, 2, 0, 0, 904, 905, 7, 18, 0, 0, 905, 906, 7, 2, 0, 0, 906, 907, 7, 13, 0, 0, 907, 908, 7, 18, 0, 0, 908, 909, 7, 16, 0, 0, 909, 910, 7, 23, 0, 0, 910, 78, 1, 0, 0, 0, 911, 912, 7, 5, 0, 0, 912, 913, 7, 10, 0, 0, 913, 914, 7, 15, 0, 0, 914, 915, 7, 1, 0, 0, 915, 916, 7, 2, 0, 0, 916, 917, 7, 5, 0, 0, 917, 918, 7, 17, 0, 0, 918, 919, 7, 16, 0, 0, 919, 920, 7, 8, 0, 0, 920, 921, 7, 19, 0, 0, 921, 922, 7, 2, 0, 0, 922, 80, 1, 0, 0, 0, 923, 924, 7, 7, 0, 0, 924, 925, 7, 2, 0, 0, 925, 926, 7, 7, 0, 0, 926, 927, 7, 17, 0, 0, 927, 928, 7, 18, 0, 0, 928, 929, 5, 95, 0, 0, 929, 930, 7, 1, 0, 0, 930, 931, 7, 18, 0, 0, 931, 932, 7, 14, 0, 0, 932, 933, 7, 8, 0, 0, 933, 934, 7, 16, 0, 0, 934, 935, 7, 19, 0, 0, 935, 936, 7, 3, 0, 0, 936, 937, 7, 14, 0, 0, 937, 938, 7, 17, 0, 0, 938, 939, 7, 2, 0, 0, 939, 940, 7, 1, 0, 0, 940, 82, 1, 0, 0, 0, 941, 942, 7, 18, 0, 0, 942, 943, 7, 3, 0, 0, 943, 944, 7, 4, 0, 0, 944, 945, 7, 16, 0, 0, 945, 946, 7, 8, 0, 0, 946, 947, 7, 16, 0, 0, 947, 948, 7, 8, 0, 0, 948, 949, 7, 10, 0, 0, 949, 950, 7, 15, 0, 0, 950, 951, 7, 1, 0, 0, 951, 84, 1, 0, 0, 0, 952, 953, 7, 3, 0, 0, 953, 954, 7, 14, 0, 0, 954, 955, 7, 14, 0, 0, 955, 956, 7, 15, 0, 0, 956, 957, 7, 17, 0, 0, 957, 958, 7, 13, 0, 0, 958, 86, 1, 0, 0, 0, 959, 960, 7, 7, 0, 0, 960, 961, 7, 2, 0, 0, 961, 962, 7, 14, 0, 0, 962, 963, 7, 8, 0, 0, 963, 964, 7, 13, 0, 0, 964, 88, 1, 0, 0, 0, 965, 966, 7, 5, 0, 0, 966, 967, 7, 2, 0, 0, 967, 968, 7, 15, 0, 0, 968, 969, 7, 16, 0, 0, 969, 970, 7, 4, 0, 0, 970, 971, 7, 10, 0, 0, 971, 972, 7, 8, 0, 0, 972, 973, 7, 7, 0, 0, 973, 974, 7, 1, 0, 0, 974, 90, 1, 0, 0, 0, 975, 976, 7, 8, 0, 0, 976, 977, 7, 16, 0, 0, 977, 978, 7, 2, 0, 0, 978, 979, 7, 4, 0, 0, 979, 980, 7, 3, 0, 0, 980, 981, 7, 16, 0, 0, 981, 982, 7, 8, 0, 0, 982, 983, 7, 10, 0, 0, 983, 984, 7, 15, 0, 0, 984, 985, 7, 1, 0, 0, 985, 92, 1, 0, 0, 0, 986, 987, 7, 7, 0, 0, 987, 988, 7, 8, 0, 0, 988, 989, 7, 1, 0, 0, 989, 990, 7, 16, 0, 0, 990, 991, 7, 3, 0, 0, 991, 992, 7, 15, 0, 0, 992, 993, 7, 5, 0, 0, 993, 994, 7, 2, 0, 0, 994, 995, 5, 95, 0, 0, 995, 996, 7, 16, 0, 0, 996, 997, 7, 23, 0, 0, 997, 998, 7, 18, 0, 0, 998, 999, 7, 2, 0, 0, 999, 94, 1, 0, 0, 0, 1000, 1001, 7, 15, 0, 0, 1001, 1002, 7, 17, 0, 0, 1002, 1003, 7, 13, 0, 0, 1003, 1004, 7, 9, 0, 0, 1004, 1005, 7, 2, 0, 0, 1005, 1006, 7, 4, 0, 0, 1006, 1007, 5, 95, 0, 0, 1007, 1008, 7, 10, 0, 0, 1008, 1009, 7, 12, 0, 0, 1009, 1010, 5, 95, 0, 0, 1010, 1011, 7, 16, 0, 0, 1011, 1012, 7, 4, 0, 0, 1012, 1013, 7, 2, 0, 0, 1013, 1014, 7, 2, 0, 0, 1014, 1015, 7, 1, 0, 0, 1015, 96, 1, 0, 0, 0, 1016, 1017, 7, 1, 0, 0, 1017, 1018, 7, 6, 0, 0, 1018, 1019, 7, 8, 0, 0, 1019, 1020, 7, 15, 0, 0, 1020, 1021, 7, 20, 0, 0, 1021, 1022, 7, 14, 0, 0, 1022, 1023, 7, 2, 0, 0, 1023, 1024, 5, 95, 0, 0, 1024, 1025, 7, 1, 0, 0, 1025, 1026, 7, 8, 0, 0, 1026, 1027, 7, 24, 0, 0, 1027, 1028, 7, 2, 0, 0, 1028, 98, 1, 0, 0, 0, 1029, 1030, 7, 1, 0, 0, 1030, 1031, 7, 3, 0, 0, 1031, 1032, 7, 13, 0, 0, 1032, 1033, 7, 18, 0, 0, 1033, 1034, 7, 14, 0, 0, 1034, 1035, 7, 2, 0, 0, 1035, 1036, 5, 95, 0, 0, 1036, 1037, 7, 1, 0, 0, 1037, 1038, 7, 8, 0, 0, 1038, 1039, 7, 24, 0, 0, 1039, 1040, 7, 2, 0, 0, 1040, 100, 1, 0, 0, 0, 1041, 1042, 7, 10, 0, 0, 1042, 1043, 7, 17, 0, 0, 1043, 1044, 7, 16, 0, 0, 1044, 1045, 7, 18, 0, 0, 1045, 1046, 7, 17, 0, 0, 1046, 1047, 7, 16, 0, 0, 1047, 1048, 5, 95, 0, 0, 1048, 1049, 7, 3, 0, 0, 1049, 1050, 7, 12, 0, 0, 1050, 1051, 7, 16, 0, 0, 1051, 1052, 7, 2, 0, 0, 1052, 1053, 7, 4, 0, 0, 1053, 102, 1, 0, 0, 0, 1054, 1055, 7, 16, 0, 0, 1055, 1056, 7, 8, 0, 0, 1056, 1057, 7, 13, 0, 0, 1057, 1058, 7, 2, 0, 0, 1058, 1059, 5, 95, 0, 0, 1059, 1060, 7, 7, 0, 0, 1060, 1061, 7, 2, 0, 0, 1061, 1062, 7, 5, 0, 0, 1062, 1063, 7, 3, 0, 0, 1063, 1064, 7, 23, 0, 0, 1064, 104, 1, 0, 0, 0, 1065, 1066, 7, 3, 0, 0, 1066, 1067, 7, 15, 0, 0, 1067, 1068, 7, 10, 0, 0, 1068, 1069, 7, 13, 0, 0, 1069, 1070, 7, 3, 0, 0, 1070, 1071, 7, 14, 0, 0, 1071, 1072, 7, 23, 0, 0, 1072, 1073, 5, 95, 0, 0, 1073, 1074, 7, 4, 0, 0, 1074, 1075, 7, 3, 0, 0, 1075, 1076, 7, 16, 0, 0, 1076, 1077, 7, 2, 0, 0, 1077, 106, 1, 0, 0, 0, 1078, 1079, 7, 5, 0, 0, 1079, 1080, 7, 3, 0, 0, 1080, 1081, 7, 16, 0, 0, 1081, 1082, 7, 2, 0, 0, 1082, 1083, 7, 20, 0, 0, 1083, 1084, 7, 10, 0, 0, 1084, 1085, 7, 4, 0, 0, 1085, 1086, 7, 23, 0, 0, 1086, 1087, 5, 95, 0, 0, 1087, 1088, 7, 12, 0, 0, 1088, 1089, 7, 8, 0, 0, 1089, 1090, 7, 2, 0, 0, 1090, 1091, 7, 14, 0, 0, 1091, 1092, 7, 7, 0, 0, 1092, 108, 1, 0, 0, 0, 1093, 1094, 7, 16, 0, 0, 1094, 1095, 7, 8, 0, 0, 1095, 1096, 7, 13, 0, 0, 1096, 1097, 7, 2, 0, 0, 1097, 1098, 5, 95, 0, 0, 1098, 1099, 7, 12, 0, 0, 1099, 1100, 7, 8, 0, 0, 1100, 1101, 7, 2, 0, 0, 1101, 1102, 7, 14, 0, 0, 1102, 1103, 7, 7, 0, 0, 1103, 110, 1, 0, 0, 0, 1104, 1105, 7, 16, 0, 0, 1105, 1106, 7, 8, 0, 0, 1106, 1107, 7, 13, 0, 0, 1107, 1108, 7, 2, 0, 0, 1108, 1109, 5, 95, 0, 0, 1109, 1110, 7, 24, 0, 0, 1110, 1111, 7, 10, 0, 0, 1111, 1112, 7, 15, 0, 0, 1112, 1113, 7, 2, 0, 0, 1113, 112, 1, 0, 0, 0, 1114, 1115, 7, 16, 0, 0, 1115, 1116, 7, 4, 0, 0, 1116, 1117, 7, 3, 0, 0, 1117, 1118, 7, 8, 0, 0, 1118, 1119, 7, 15, 0, 0, 1119, 1120, 7, 8, 0, 0, 1120, 1121, 7, 15, 0, 0, 1121, 1122, 7, 20, 0, 0, 1122, 1123, 5, 95, 0, 0, 1123, 1124, 7, 7, 0, 0, 1124, 1125, 7, 3, 0, 0, 1125, 1126, 7, 16, 0, 0, 1126, 1127, 7, 3, 0, 0, 1127, 1128, 5, 95, 0, 0, 1128, 1129, 7, 1, 0, 0, 1129, 1130, 7, 8, 0, 0, 1130, 1131, 7, 24, 0, 0, 1131, 1132, 7, 2, 0, 0, 1132, 114, 1, 0, 0, 0, 1133, 1134, 7, 3, 0, 0, 1134, 1135, 7, 15, 0, 0, 1135, 1136, 7, 10, 0, 0, 1136, 1137, 7, 13, 0, 0, 1137, 1138, 7, 3, 0, 0, 1138, 1139, 7, 14, 0, 0, 1139, 1140, 7, 23, 0, 0, 1140, 1141, 5, 95, 0, 0, 1141, 1142, 7, 1, 0, 0, 1142, 1143, 7, 5, 0, 0, 1143, 1144, 7, 10, 0, 0, 1144, 1145, 7, 4, 0, 0, 1145, 1146, 7, 2, 0, 0, 1146, 1147, 5, 95, 0, 0, 1147, 1148, 7, 16, 0, 0, 1148, 1149, 7, 6, 0, 0, 1149, 1150, 7, 4, 0, 0, 1150, 1151, 7, 2, 0, 0, 1151, 1152, 7, 1, 0, 0, 1152, 1153, 7, 6, 0, 0, 1153, 1154, 7, 10, 0, 0, 1154, 1155, 7, 14, 0, 0, 1155, 1156, 7, 7, 0, 0, 1156, 116, 1, 0, 0, 0, 1157, 1158, 7, 5, 0, 0, 1158, 1159, 7, 3, 0, 0, 1159, 1160, 7, 1, 0, 0, 1160, 1161, 7, 2, 0, 0, 1161, 118, 1, 0, 0, 0, 1162, 1163, 7, 8, 0, 0, 1163, 1164, 7, 15, 0, 0, 1164, 120, 1, 0, 0, 0, 1165, 1166, 7, 15, 0, 0, 1166, 1167, 7, 10, 0, 0, 1167, 1168, 7, 16, 0, 0, 1168, 122, 1, 0, 0, 0, 1169, 1170, 7, 10, 0, 0, 1170, 1171, 7, 4, 0, 0, 1171, 124, 1, 0, 0, 0, 1172, 1173, 7, 3, 0, 0, 1173, 1174, 7, 15, 0, 0, 1174, 1175, 7, 7, 0, 0, 1175, 126, 1, 0, 0, 0, 1176, 1177, 7, 21, 0, 0, 1177, 1178, 7, 10, 0, 0, 1178, 1179, 7, 4, 0, 0, 1179, 128, 1, 0, 0, 0, 1180, 1181, 7, 16, 0, 0, 1181, 1182, 7, 4, 0, 0, 1182, 1183, 7, 17, 0, 0, 1183, 1184, 7, 2, 0, 0, 1184, 130, 1, 0, 0, 0, 1185, 1186, 7, 12, 0, 0, 1186, 1187, 7, 3, 0, 0, 1187, 1188, 7, 14, 0, 0, 1188, 1189, 7, 1, 0, 0, 1189, 1190, 7, 2, 0, 0, 1190, 132, 1, 0, 0, 0, 1191, 1192, 7, 4, 0, 0, 1192, 1193, 7, 2, 0, 0, 1193, 1194, 7, 20, 0, 0, 1194, 1195, 7, 2, 0, 0, 1195, 1196, 7, 21, 0, 0, 1196, 1197, 7, 18, 0, 0, 1197, 134, 1, 0, 0, 0, 1198, 1199, 7, 5, 0, 0, 1199, 1200, 7, 10, 0, 0, 1200, 1201, 7, 15, 0, 0, 1201, 1202, 7, 19, 0, 0, 1202, 1203, 7, 2, 0, 0, 1203, 1204, 7, 4, 0, 0, 1204, 1205, 7, 16, 0, 0, 1205, 1206, 5, 95, 0, 0, 1206, 1207, 7, 16, 0, 0, 1207, 1208, 7, 24, 0, 0, 1208, 136, 1, 0, 0, 0, 1209, 1210, 7, 7, 0, 0, 1210, 1211, 7, 3, 0, 0, 1211, 1212, 7, 16, 0, 0, 1212, 1213, 7, 2, 0, 0, 1213, 1214, 7, 16, 0, 0, 1214, 1215, 7, 8, 0, 0, 1215, 1216, 7, 13, 0, 0, 1216, 1217, 7, 2, 0, 0, 1217, 138, 1, 0, 0, 0, 1218, 1219, 7, 7, 0, 0, 1219, 1220, 7, 3, 0, 0, 1220, 1221, 7, 23, 0, 0, 1221, 140, 1, 0, 0, 0, 1222, 1223, 7, 7, 0, 0, 1223, 1224, 7, 3, 0, 0, 1224, 1225, 7, 23, 0, 0, 1225, 1226, 5, 95, 0, 0, 1226, 1227, 7, 6, 0, 0, 1227, 1228, 7, 10, 0, 0, 1228, 1229, 7, 17, 0, 0, 1229, 1230, 7, 4, 0, 0, 1230, 142, 1, 0, 0, 0, 1231, 1232, 7, 7, 0, 0, 1232, 1233, 7, 3, 0, 0, 1233, 1234, 7, 23, 0, 0, 1234, 1235, 5, 95, 0, 0, 1235, 1236, 7, 13, 0, 0, 1236, 1237, 7, 8, 0, 0, 1237, 1238, 7, 5, 0, 0, 1238, 1239, 7, 4, 0, 0, 1239, 1240, 7, 10, 0, 0, 1240, 1241, 7, 1, 0, 0, 1241, 1242, 7, 2, 0, 0, 1242, 1243, 7, 5, 0, 0, 1243, 1244, 7, 10, 0, 0, 1244, 1245, 7, 15, 0, 0, 1245, 1246, 7, 7, 0, 0, 1246, 144, 1, 0, 0, 0, 1247, 1248, 7, 7, 0, 0, 1248, 1249, 7, 3, 0, 0, 1249, 1250, 7, 23, 0, 0, 1250, 1251, 5, 95, 0, 0, 1251, 1252, 7, 13, 0, 0, 1252, 1253, 7, 8, 0, 0, 1253, 1254, 7, 15, 0, 0, 1254, 1255, 7, 17, 0, 0, 1255, 1256, 7, 16, 0, 0, 1256, 1257, 7, 2, 0, 0, 1257, 146, 1, 0, 0, 0, 1258, 1259, 7, 7, 0, 0, 1259, 1260, 7, 3, 0, 0, 1260, 1261, 7, 23, 0, 0, 1261, 1262, 5, 95, 0, 0, 1262, 1263, 7, 10, 0, 0, 1263, 1264, 7, 12, 0, 0, 1264, 1265, 5, 95, 0, 0, 1265, 1266, 7, 23, 0, 0, 1266, 1267, 7, 2, 0, 0, 1267, 1268, 7, 3, 0, 0, 1268, 1269, 7, 4, 0, 0, 1269, 148, 1, 0, 0, 0, 1270, 1271, 7, 7, 0, 0, 1271, 1272, 7, 3, 0, 0, 1272, 1273, 7, 23, 0, 0, 1273, 1274, 5, 95, 0, 0, 1274, 1275, 7, 1, 0, 0, 1275, 1276, 7, 2, 0, 0, 1276, 1277, 7, 5, 0, 0, 1277, 1278, 7, 10, 0, 0, 1278, 1279, 7, 15, 0, 0, 1279, 1280, 7, 7, 0, 0, 1280, 150, 1, 0, 0, 0, 1281, 1282, 7, 6, 0, 0, 1282, 1283, 7, 10, 0, 0, 1283, 1284, 7, 17, 0, 0, 1284, 1285, 7, 4, 0, 0, 1285, 152, 1, 0, 0, 0, 1286, 1287, 7, 6, 0, 0, 1287, 1288, 7, 10, 0, 0, 1288, 1289, 7, 17, 0, 0, 1289, 1290, 7, 4, 0, 0, 1290, 1291, 5, 95, 0, 0, 1291, 1292, 7, 13, 0, 0, 1292, 1293, 7, 8, 0, 0, 1293, 1294, 7, 5, 0, 0, 1294, 1295, 7, 4, 0, 0, 1295, 1296, 7, 10, 0, 0, 1296, 1297, 7, 1, 0, 0, 1297, 1298, 7, 2, 0, 0, 1298, 1299, 7, 5, 0, 0, 1299, 1300, 7, 10, 0, 0, 1300, 1301, 7, 15, 0, 0, 1301, 1302, 7, 7, 0, 0, 1302, 154, 1, 0, 0, 0, 1303, 1304, 7, 6, 0, 0, 1304, 1305, 7, 10, 0, 0, 1305, 1306, 7, 17, 0, 0, 1306, 1307, 7, 4, 0, 0, 1307, 1308, 5, 95, 0, 0, 1308, 1309, 7, 13, 0, 0, 1309, 1310, 7, 8, 0, 0, 1310, 1311, 7, 15, 0, 0, 1311, 1312, 7, 17, 0, 0, 1312, 1313, 7, 16, 0, 0, 1313, 1314, 7, 2, 0, 0, 1314, 156, 1, 0, 0, 0, 1315, 1316, 7, 6, 0, 0, 1316, 1317, 7, 10, 0, 0, 1317, 1318, 7, 17, 0, 0, 1318, 1319, 7, 4, 0, 0, 1319, 1320, 5, 95, 0, 0, 1320, 1321, 7, 10, 0, 0, 1321, 1322, 7, 12, 0, 0, 1322, 1323, 5, 95, 0, 0, 1323, 1324, 7, 7, 0, 0, 1324, 1325, 7, 3, 0, 0, 1325, 1326, 7, 23, 0, 0, 1326, 158, 1, 0, 0, 0, 1327, 1328, 7, 6, 0, 0, 1328, 1329, 7, 10, 0, 0, 1329, 1330, 7, 17, 0, 0, 1330, 1331, 7, 4, 0, 0, 1331, 1332, 5, 95, 0, 0, 1332, 1333, 7, 1, 0, 0, 1333, 1334, 7, 2, 0, 0, 1334, 1335, 7, 5, 0, 0, 1335, 1336, 7, 10, 0, 0, 1336, 1337, 7, 15, 0, 0, 1337, 1338, 7, 7, 0, 0, 1338, 160, 1, 0, 0, 0, 1339, 1340, 7, 8, 0, 0, 1340, 1341, 7, 15, 0, 0, 1341, 1342, 7, 16, 0, 0, 1342, 1343, 7, 2, 0, 0, 1343, 1344, 7, 4, 0, 0, 1344, 1345, 7, 19, 0, 0, 1345, 1346, 7, 3, 0, 0, 1346, 1347, 7, 14, 0, 0, 1347, 162, 1, 0, 0, 0, 1348, 1349, 7, 13, 0, 0, 1349, 1350, 7, 8, 0, 0, 1350, 1351, 7, 5, 0, 0, 1351, 1352, 7, 4, 0, 0, 1352, 1353, 7, 10, 0, 0, 1353, 1354, 7, 1, 0, 0, 1354, 1355, 7, 2, 0, 0, 1355, 1356, 7, 5, 0, 0, 1356, 1357, 7, 10, 0, 0, 1357, 1358, 7, 15, 0, 0, 1358, 1359, 7, 7, 0, 0, 1359, 164, 1, 0, 0, 0, 1360, 1361, 7, 13, 0, 0, 1361, 1362, 7, 8, 0, 0, 1362, 1363, 7, 14, 0, 0, 1363, 1364, 7, 14, 0, 0, 1364, 1365, 7, 8, 0, 0, 1365, 1366, 7, 1, 0, 0, 1366, 1367, 7, 2, 0, 0, 1367, 1368, 7, 5, 0, 0, 1368, 1369, 7, 10, 0, 0, 1369, 1370, 7, 15, 0, 0, 1370, 1371, 7, 7, 0, 0, 1371, 166, 1, 0, 0, 0, 1372, 1373, 7, 13, 0, 0, 1373, 1374, 7, 8, 0, 0, 1374, 1375, 7, 15, 0, 0, 1375, 1376, 7, 17, 0, 0, 1376, 1377, 7, 16, 0, 0, 1377, 1378, 7, 2, 0, 0, 1378, 168, 1, 0, 0, 0, 1379, 1380, 7, 13, 0, 0, 1380, 1381, 7, 8, 0, 0, 1381, 1382, 7, 15, 0, 0, 1382, 1383, 7, 17, 0, 0, 1383, 1384, 7, 16, 0, 0, 1384, 1385, 7, 2, 0, 0, 1385, 1386, 5, 95, 0, 0, 1386, 1387, 7, 13, 0, 0, 1387, 1388, 7, 8, 0, 0, 1388, 1389, 7, 5, 0, 0, 1389, 1390, 7, 4, 0, 0, 1390, 1391, 7, 10, 0, 0, 1391, 1392, 7, 1, 0, 0, 1392, 1393, 7, 2, 0, 0, 1393, 1394, 7, 5, 0, 0, 1394, 1395, 7, 10, 0, 0, 1395, 1396, 7, 15, 0, 0, 1396, 1397, 7, 7, 0, 0, 1397, 170, 1, 0, 0, 0, 1398, 1399, 7, 13, 0, 0, 1399, 1400, 7, 8, 0, 0, 1400, 1401, 7, 15, 0, 0, 1401, 1402, 7, 17, 0, 0, 1402, 1403, 7, 16, 0, 0, 1403, 1404, 7, 2, 0, 0, 1404, 1405, 5, 95, 0, 0, 1405, 1406, 7, 10, 0, 0, 1406, 1407, 7, 12, 0, 0, 1407, 1408, 5, 95, 0, 0, 1408, 1409, 7, 7, 0, 0, 1409, 1410, 7, 3, 0, 0, 1410, 1411, 7, 23, 0, 0, 1411, 172, 1, 0, 0, 0, 1412, 1413, 7, 13, 0, 0, 1413, 1414, 7, 8, 0, 0, 1414, 1415, 7, 15, 0, 0, 1415, 1416, 7, 17, 0, 0, 1416, 1417, 7, 16, 0, 0, 1417, 1418, 7, 2, 0, 0, 1418, 1419, 5, 95, 0, 0, 1419, 1420, 7, 10, 0, 0, 1420, 1421, 7, 12, 0, 0, 1421, 1422, 5, 95, 0, 0, 1422, 1423, 7, 6, 0, 0, 1423, 1424, 7, 10, 0, 0, 1424, 1425, 7, 17, 0, 0, 1425, 1426, 7, 4, 0, 0, 1426, 174, 1, 0, 0, 0, 1427, 1428, 7, 13, 0, 0, 1428, 1429, 7, 8, 0, 0, 1429, 1430, 7, 15, 0, 0, 1430, 1431, 7, 17, 0, 0, 1431, 1432, 7, 16, 0, 0, 1432, 1433, 7, 2, 0, 0, 1433, 1434, 5, 95, 0, 0, 1434, 1435, 7, 1, 0, 0, 1435, 1436, 7, 2, 0, 0, 1436, 1437, 7, 5, 0, 0, 1437, 1438, 7, 10, 0, 0, 1438, 1439, 7, 15, 0, 0, 1439, 1440, 7, 7, 0, 0, 1440, 176, 1, 0, 0, 0, 1441, 1442, 7, 13, 0, 0, 1442, 1443, 7, 10, 0, 0, 1443, 1444, 7, 15, 0, 0, 1444, 1445, 7, 16, 0, 0, 1445, 1446, 7, 6, 0, 0, 1446, 178, 1, 0, 0, 0, 1447, 1448, 7, 13, 0, 0, 1448, 1449, 7, 10, 0, 0, 1449, 1450, 7, 15, 0, 0, 1450, 1451, 7, 16, 0, 0, 1451, 1452, 7, 6, 0, 0, 1452, 1453, 5, 95, 0, 0, 1453, 1454, 7, 10, 0, 0, 1454, 1455, 7, 12, 0, 0, 1455, 1456, 5, 95, 0, 0, 1456, 1457, 7, 23, 0, 0, 1457, 1458, 7, 2, 0, 0, 1458, 1459, 7, 3, 0, 0, 1459, 1460, 7, 4, 0, 0, 1460, 180, 1, 0, 0, 0, 1461, 1462, 7, 25, 0, 0, 1462, 1463, 7, 17, 0, 0, 1463, 1464, 7, 3, 0, 0, 1464, 1465, 7, 4, 0, 0, 1465, 1466, 7, 16, 0, 0, 1466, 1467, 7, 2, 0, 0, 1467, 1468, 7, 4, 0, 0, 1468, 182, 1, 0, 0, 0, 1469, 1470, 7, 1, 0, 0, 1470, 1471, 7, 2, 0, 0, 1471, 1472, 7, 5, 0, 0, 1472, 1473, 7, 10, 0, 0, 1473, 1474, 7, 15, 0, 0, 1474, 1475, 7, 7, 0, 0, 1475, 184, 1, 0, 0, 0, 1476, 1477, 7, 1, 0, 0, 1477, 1478, 7, 2, 0, 0, 1478, 1479, 7, 5, 0, 0, 1479, 1480, 7, 10, 0, 0, 1480, 1481, 7, 15, 0, 0, 1481, 1482, 7, 7, 0, 0, 1482, 1483, 5, 95, 0, 0, 1483, 1484, 7, 13, 0, 0, 1484, 1485, 7, 8, 0, 0, 1485, 1486, 7, 5, 0, 0, 1486, 1487, 7, 4, 0, 0, 1487, 1488, 7, 10, 0, 0, 1488, 1489, 7, 1, 0, 0, 1489, 1490, 7, 2, 0, 0, 1490, 1491, 7, 5, 0, 0, 1491, 1492, 7, 10, 0, 0, 1492, 1493, 7, 15, 0, 0, 1493, 1494, 7, 7, 0, 0, 1494, 186, 1, 0, 0, 0, 1495, 1496, 7, 1, 0, 0, 1496, 1497, 7, 2, 0, 0, 1497, 1498, 7, 5, 0, 0, 1498, 1499, 7, 10, 0, 0, 1499, 1500, 7, 15, 0, 0, 1500, 1501, 7, 7, 0, 0, 1501, 1502, 5, 95, 0, 0, 1502, 1503, 7, 10, 0, 0, 1503, 1504, 7, 12, 0, 0, 1504, 1505, 5, 95, 0, 0, 1505, 1506, 7, 13, 0, 0, 1506, 1507, 7, 8, 0, 0, 1507, 1508, 7, 15, 0, 0, 1508, 1509, 7, 17, 0, 0, 1509, 1510, 7, 16, 0, 0, 1510, 1511, 7, 2, 0, 0, 1511, 188, 1, 0, 0, 0, 1512, 1513, 7, 11, 0, 0, 1513, 1514, 7, 2, 0, 0, 1514, 1515, 7, 2, 0, 0, 1515, 1516, 7, 22, 0, 0, 1516, 190, 1, 0, 0, 0, 1517, 1518, 7, 11, 0, 0, 1518, 1519, 7, 2, 0, 0, 1519, 1520, 7, 2, 0, 0, 1520, 1521, 7, 22, 0, 0, 1521, 1522, 5, 95, 0, 0, 1522, 1523, 7, 10, 0, 0, 1523, 1524, 7, 12, 0, 0, 1524, 1525, 5, 95, 0, 0, 1525, 1526, 7, 23, 0, 0, 1526, 1527, 7, 2, 0, 0, 1527, 1528, 7, 3, 0, 0, 1528, 1529, 7, 4, 0, 0, 1529, 192, 1, 0, 0, 0, 1530, 1531, 7, 23, 0, 0, 1531, 1532, 7, 2, 0, 0, 1532, 1533, 7, 3, 0, 0, 1533, 1534, 7, 4, 0, 0, 1534, 194, 1, 0, 0, 0, 1535, 1536, 7, 23, 0, 0, 1536, 1537, 7, 2, 0, 0, 1537, 1538, 7, 3, 0, 0, 1538, 1539, 7, 4, 0, 0, 1539, 1540, 5, 95, 0, 0, 1540, 1541, 7, 13, 0, 0, 1541, 1542, 7, 10, 0, 0, 1542, 1543, 7, 15, 0, 0, 1543, 1544, 7, 16, 0, 0, 1544, 1545, 7, 6, 0, 0, 1545, 196, 1, 0, 0, 0, 1546, 1547, 7, 7, 0, 0, 1547, 1548, 7, 3, 0, 0, 1548, 1549, 7, 16, 0, 0, 1549, 1550, 7, 3, 0, 0, 1550, 1551, 7, 13, 0, 0, 1551, 1552, 7, 10, 0, 0, 1552, 1553, 7, 7, 0, 0, 1553, 1554, 7, 2, 0, 0, 1554, 1555, 7, 14, 0, 0, 1555, 198, 1, 0, 0, 0, 1556, 1557, 7, 14, 0, 0, 1557, 1558, 7, 10, 0, 0, 1558, 1559, 7, 10, 0, 0, 1559, 1560, 7, 22, 0, 0, 1560, 1561, 7, 17, 0, 0, 1561, 1562, 7, 18, 0, 0, 1562, 200, 1, 0, 0, 0, 1563, 1564, 7, 1, 0, 0, 1564, 1565, 7, 3, 0, 0, 1565, 1566, 7, 19, 0, 0, 1566, 1567, 7, 2, 0, 0, 1567, 1568, 7, 7, 0, 0, 1568, 1569, 7, 1, 0, 0, 1569, 1570, 7, 2, 0, 0, 1570, 1571, 7, 3, 0, 0, 1571, 1572, 7, 4, 0, 0, 1572, 1573, 7, 5, 0, 0, 1573, 1574, 7, 6, 0, 0, 1574, 202, 1, 0, 0, 0, 1575, 1576, 7, 8, 0, 0, 1576, 1577, 7, 15, 0, 0, 1577, 1578, 7, 16, 0, 0, 1578, 204, 1, 0, 0, 0, 1579, 1580, 7, 8, 0, 0, 1580, 1581, 7, 15, 0, 0, 1581, 1582, 7, 16, 0, 0, 1582, 1583, 7, 2, 0, 0, 1583, 1584, 7, 20, 0, 0, 1584, 1585, 7, 2, 0, 0, 1585, 1586, 7, 4, 0, 0, 1586, 206, 1, 0, 0, 0, 1587, 1588, 7, 7, 0, 0, 1588, 1589, 7, 10, 0, 0, 1589, 1590, 7, 17, 0, 0, 1590, 1591, 7, 9, 0, 0, 1591, 1592, 7, 14, 0, 0, 1592, 1593, 7, 2, 0, 0, 1593, 208, 1, 0, 0, 0, 1594, 1595, 7, 14, 0, 0, 1595, 1596, 7, 10, 0, 0, 1596, 1597, 7, 15, 0, 0, 1597, 1598, 7, 20, 0, 0, 1598, 210, 1, 0, 0, 0, 1599, 1600, 7, 12, 0, 0, 1600, 1601, 7, 14, 0, 0, 1601, 1602, 7, 10, 0, 0, 1602, 1603, 7, 3, 0, 0, 1603, 1604, 7, 16, 0, 0, 1604, 212, 1, 0, 0, 0, 1605, 1606, 7, 1, 0, 0, 1606, 1607, 7, 16, 0, 0, 1607, 1608, 7, 4, 0, 0, 1608, 1609, 7, 8, 0, 0, 1609, 1610, 7, 15, 0, 0, 1610, 1611, 7, 20, 0, 0, 1611, 214, 1, 0, 0, 0, 1612, 1613, 7, 9, 0, 0, 1613, 1614, 7, 10, 0, 0, 1614, 1615, 7, 10, 0, 0, 1615, 1616, 7, 14, 0, 0, 1616, 1617, 7, 2, 0, 0, 1617, 1618, 7, 3, 0, 0, 1618, 1619, 7, 15, 0, 0, 1619, 216, 1, 0, 0, 0, 1620, 1621, 5, 124, 0, 0, 1621, 218, 1, 0, 0, 0, 1622, 1623, 5, 44, 0, 0, 1623, 220, 1, 0, 0, 0, 1624, 1625, 5, 46, 0, 0, 1625, 222, 1, 0, 0, 0, 1626, 1627, 5, 61, 0, 0, 1627, 224, 1, 0, 0, 0, 1628, 1629, 5, 62, 0, 0, 1629, 226, 1, 0, 0, 0, 1630, 1631, 5, 60, 0, 0, 1631, 228, 1, 0, 0, 0, 1632, 1633, 5, 60, 0, 0, 1633, 1634, 5, 61, 0, 0, 1634, 230, 1, 0, 0, 0, 1635, 1636, 5, 62, 0, 0, 1636, 1637, 5, 61, 0, 0, 1637, 232, 1, 0, 0, 0, 1638, 1639, 5, 33, 0, 0, 1639, 1640, 5, 61, 0, 0, 1640, 234, 1, 0, 0, 0, 1641, 1642, 5, 43, 0, 0, 1642, 236, 1, 0, 0, 0, 1643, 1644, 5, 45, 0, 0, 1644, 238, 1, 0, 0, 0, 1645, 1646, 5, 42, 0, 0, 1646, 240, 1, 0, 0, 0, 1647, 1648, 5, 47, 0, 0, 1648, 242, 1, 0, 0, 0, 1649, 1650, 5, 37, 0, 0, 1650, 244, 1, 0, 0, 0, 1651, 1652, 5, 33, 0, 0, 1652, 246, 1, 0, 0, 0, 1653, 1654, 5, 58, 0, 0, 1654, 248, 1, 0, 0, 0, 1655, 1656, 5, 40, 0, 0, 1656, 250, 1, 0, 0, 0, 1657, 1658, 5, 41, 0, 0, 1658, 252, 1, 0, 0, 0, 1659, 1660, 5, 91, 0, 0, 1660, 254, 1, 0, 0, 0, 1661, 1662, 5, 93, 0, 0, 1662, 256, 1, 0, 0, 0, 1663, 1664, 5, 39, 0, 0, 1664, 258, 1, 0, 0, 0, 1665, 1666, 5, 34, 0, 0, 1666, 260, 1, 0, 0, 0, 1667, 1668, 5, 96, 0, 0, 1668, 262, 1, 0, 0, 0, 1669, 1670, 5, 126, 0, 0, 1670, 264, 1, 0, 0, 0, 1671, 1672, 5, 38, 0, 0, 1672, 266, 1, 0, 0, 0, 1673, 1674, 5, 94, 0, 0, 1674, 268, 1, 0, 0, 0, 1675, 1676, 7, 3, 0, 0, 1676, 1677, 7, 19, 0, 0, 1677, 1678, 7, 20, 0, 0, 1678, 270, 1, 0, 0, 0, 1679, 1680, 7, 5, 0, 0, 1680, 1681, 7, 10, 0, 0, 1681, 1682, 7, 17, 0, 0, 1682, 1683, 7, 15, 0, 0, 1683, 1684, 7, 16, 0, 0, 1684, 272, 1, 0, 0, 0, 1685, 1686, 7, 7, 0, 0, 1686, 1687, 7, 8, 0, 0, 1687, 1688, 7, 1, 0, 0, 1688, 1689, 7, 16, 0, 0, 1689, 1690, 7, 8, 0, 0, 1690, 1691, 7, 15, 0, 0, 1691, 1692, 7, 5, 0, 0, 1692, 1693, 7, 16, 0, 0, 1693, 1694, 5, 95, 0, 0, 1694, 1695, 7, 5, 0, 0, 1695, 1696, 7, 10, 0, 0, 1696, 1697, 7, 17, 0, 0, 1697, 1698, 7, 15, 0, 0, 1698, 1699, 7, 16, 0, 0, 1699, 274, 1, 0, 0, 0, 1700, 1701, 7, 2, 0, 0, 1701, 1702, 7, 1, 0, 0, 1702, 1703, 7, 16, 0, 0, 1703, 1704, 7, 7, 0, 0, 1704, 1705, 7, 5, 0, 0, 1705, 276, 1, 0, 0, 0, 1706, 1707, 7, 2, 0, 0, 1707, 1708, 7, 1, 0, 0, 1708, 1709, 7, 16, 0, 0, 1709, 1710, 7, 7, 0, 0, 1710, 1711, 7, 5, 0, 0, 1711, 1712, 5, 95, 0, 0, 1712, 1713, 7, 2, 0, 0, 1713, 1714, 7, 4, 0, 0, 1714, 1715, 7, 4, 0, 0, 1715, 1716, 7, 10, 0, 0, 1716, 1717, 7, 4, 0, 0, 1717, 278, 1, 0, 0, 0, 1718, 1719, 7, 13, 0, 0, 1719, 1720, 7, 3, 0, 0, 1720, 1721, 7, 21, 0, 0, 1721, 280, 1, 0, 0, 0, 1722, 1723, 7, 13, 0, 0, 1723, 1724, 7, 2, 0, 0, 1724, 1725, 7, 3, 0, 0, 1725, 1726, 7, 15, 0, 0, 1726, 282, 1, 0, 0, 0, 1727, 1728, 7, 13, 0, 0, 1728, 1729, 7, 2, 0, 0, 1729, 1730, 7, 7, 0, 0, 1730, 1731, 7, 8, 0, 0, 1731, 1732, 7, 3, 0, 0, 1732, 1733, 7, 15, 0, 0, 1733, 284, 1, 0, 0, 0, 1734, 1735, 7, 13, 0, 0, 1735, 1736, 7, 8, 0, 0, 1736, 1737, 7, 15, 0, 0, 1737, 286, 1, 0, 0, 0, 1738, 1739, 7, 13, 0, 0, 1739, 1740, 7, 10, 0, 0, 1740, 1741, 7, 7, 0, 0, 1741, 1742, 7, 2, 0, 0, 1742, 288, 1, 0, 0, 0, 1743, 1744, 7, 4, 0, 0, 1744, 1745, 7, 3, 0, 0, 1745, 1746, 7, 15, 0, 0, 1746, 1747, 7, 20, 0, 0, 1747, 1748, 7, 2, 0, 0, 1748, 290, 1, 0, 0, 0, 1749, 1750, 7, 1, 0, 0, 1750, 1751, 7, 16, 0, 0, 1751, 1752, 7, 7, 0, 0, 1752, 1753, 7, 2, 0, 0, 1753, 1754, 7, 19, 0, 0, 1754, 292, 1, 0, 0, 0, 1755, 1756, 7, 1, 0, 0, 1756, 1757, 7, 16, 0, 0, 1757, 1758, 7, 7, 0, 0, 1758, 1759, 7, 2, 0, 0, 1759, 1760, 7, 19, 0, 0, 1760, 1761, 7, 18, 0, 0, 1761, 294, 1, 0, 0, 0, 1762, 1763, 7, 1, 0, 0, 1763, 1764, 7, 17, 0, 0, 1764, 1765, 7, 13, 0, 0, 1765, 296, 1, 0, 0, 0, 1766, 1767, 7, 1, 0, 0, 1767, 1768, 7, 17, 0, 0, 1768, 1769, 7, 13, 0, 0, 1769, 1770, 7, 1, 0, 0, 1770, 1771, 7, 25, 0, 0, 1771, 298, 1, 0, 0, 0, 1772, 1773, 7, 19, 0, 0, 1773, 1774, 7, 3, 0, 0, 1774, 1775, 7, 4, 0, 0, 1775, 1776, 5, 95, 0, 0, 1776, 1777, 7, 1, 0, 0, 1777, 1778, 7, 3, 0, 0, 1778, 1779, 7, 13, 0, 0, 1779, 1780, 7, 18, 0, 0, 1780, 300, 1, 0, 0, 0, 1781, 1782, 7, 19, 0, 0, 1782, 1783, 7, 3, 0, 0, 1783, 1784, 7, 4, 0, 0, 1784, 1785, 5, 95, 0, 0, 1785, 1786, 7, 18, 0, 0, 1786, 1787, 7, 10, 0, 0, 1787, 1788, 7, 18, 0, 0, 1788, 302, 1, 0, 0, 0, 1789, 1790, 7, 1, 0, 0, 1790, 1791, 7, 16, 0, 0, 1791, 1792, 7, 7, 0, 0, 1792, 1793, 7, 7, 0, 0, 1793, 1794, 7, 2, 0, 0, 1794, 1795, 7, 19, 0, 0, 1795, 1796, 5, 95, 0, 0, 1796, 1797, 7, 1, 0, 0, 1797, 1798, 7, 3, 0, 0, 1798, 1799, 7, 13, 0, 0, 1799, 1800, 7, 18, 0, 0, 1800, 304, 1, 0, 0, 0, 1801, 1802, 7, 1, 0, 0, 1802, 1803, 7, 16, 0, 0, 1803, 1804, 7, 7, 0, 0, 1804, 1805, 7, 7, 0, 0, 1805, 1806, 7, 2, 0, 0, 1806, 1807, 7, 19, 0, 0, 1807, 1808, 5, 95, 0, 0, 1808, 1809, 7, 18, 0, 0, 1809, 1810, 7, 10, 0, 0, 1810, 1811, 7, 18, 0, 0, 1811, 306, 1, 0, 0, 0, 1812, 1813, 7, 18, 0, 0, 1813, 1814, 7, 2, 0, 0, 1814, 1815, 7, 4, 0, 0, 1815, 1816, 7, 5, 0, 0, 1816, 1817, 7, 2, 0, 0, 1817, 1818, 7, 15, 0, 0, 1818, 1819, 7, 16, 0, 0, 1819, 1820, 7, 8, 0, 0, 1820, 1821, 7, 14, 0, 0, 1821, 1822, 7, 2, 0, 0, 1822, 308, 1, 0, 0, 0, 1823, 1824, 7, 16, 0, 0, 1824, 1825, 7, 3, 0, 0, 1825, 1826, 7, 22, 0, 0, 1826, 1827, 7, 2, 0, 0, 1827, 310, 1, 0, 0, 0, 1828, 1829, 7, 12, 0, 0, 1829, 1830, 7, 8, 0, 0, 1830, 1831, 7, 4, 0, 0, 1831, 1832, 7, 1, 0, 0, 1832, 1833, 7, 16, 0, 0, 1833, 312, 1, 0, 0, 0, 1834, 1835, 7, 14, 0, 0, 1835, 1836, 7, 3, 0, 0, 1836, 1837, 7, 1, 0, 0, 1837, 1838, 7, 16, 0, 0, 1838, 314, 1, 0, 0, 0, 1839, 1840, 7, 14, 0, 0, 1840, 1841, 7, 8, 0, 0, 1841, 1842, 7, 1, 0, 0, 1842, 1843, 7, 16, 0, 0, 1843, 316, 1, 0, 0, 0, 1844, 1845, 7, 19, 0, 0, 1845, 1846, 7, 3, 0, 0, 1846, 1847, 7, 14, 0, 0, 1847, 1848, 7, 17, 0, 0, 1848, 1849, 7, 2, 0, 0, 1849, 1850, 7, 1, 0, 0, 1850, 318, 1, 0, 0, 0, 1851, 1852, 7, 2, 0, 0, 1852, 1853, 7, 3, 0, 0, 1853, 1854, 7, 4, 0, 0, 1854, 1855, 7, 14, 0, 0, 1855, 1856, 7, 8, 0, 0, 1856, 1857, 7, 2, 0, 0, 1857, 1858, 7, 1, 0, 0, 1858, 1859, 7, 16, 0, 0, 1859, 320, 1, 0, 0, 0, 1860, 1861, 7, 2, 0, 0, 1861, 1862, 7, 3, 0, 0, 1862, 1863, 7, 4, 0, 0, 1863, 1864, 7, 14, 0, 0, 1864, 1865, 7, 8, 0, 0, 1865, 1866, 7, 2, 0, 0, 1866, 1867, 7, 1, 0, 0, 1867, 1868, 7, 16, 0, 0, 1868, 1869, 5, 95, 0, 0, 1869, 1870, 7, 16, 0, 0, 1870, 1871, 7, 8, 0, 0, 1871, 1872, 7, 13, 0, 0, 1872, 1873, 7, 2, 0, 0, 1873, 322, 1, 0, 0, 0, 1874, 1875, 7, 14, 0, 0, 1875, 1876, 7, 3, 0, 0, 1876, 1877, 7, 16, 0, 0, 1877, 1878, 7, 2, 0, 0, 1878, 1879, 7, 1, 0, 0, 1879, 1880, 7, 16, 0, 0, 1880, 324, 1, 0, 0, 0, 1881, 1882, 7, 14, 0, 0, 1882, 1883, 7, 3, 0, 0, 1883, 1884, 7, 16, 0, 0, 1884, 1885, 7, 2, 0, 0, 1885, 1886, 7, 1, 0, 0, 1886, 1887, 7, 16, 0, 0, 1887, 1888, 5, 95, 0, 0, 1888, 1889, 7, 16, 0, 0, 1889, 1890, 7, 8, 0, 0, 1890, 1891, 7, 13, 0, 0, 1891, 1892, 7, 2, 0, 0, 1892, 326, 1, 0, 0, 0, 1893, 1894, 7, 18, 0, 0, 1894, 1895, 7, 2, 0, 0, 1895, 1896, 7, 4, 0, 0, 1896, 1897, 5, 95, 0, 0, 1897, 1898, 7, 7, 0, 0, 1898, 1899, 7, 3, 0, 0, 1899, 1900, 7, 23, 0, 0, 1900, 328, 1, 0, 0, 0, 1901, 1902, 7, 18, 0, 0, 1902, 1903, 7, 2, 0, 0, 1903, 1904, 7, 4, 0, 0, 1904, 1905, 5, 95, 0, 0, 1905, 1906, 7, 6, 0, 0, 1906, 1907, 7, 10, 0, 0, 1907, 1908, 7, 17, 0, 0, 1908, 1909, 7, 4, 0, 0, 1909, 330, 1, 0, 0, 0, 1910, 1911, 7, 18, 0, 0, 1911, 1912, 7, 2, 0, 0, 1912, 1913, 7, 4, 0, 0, 1913, 1914, 5, 95, 0, 0, 1914, 1915, 7, 13, 0, 0, 1915, 1916, 7, 8, 0, 0, 1916, 1917, 7, 15, 0, 0, 1917, 1918, 7, 17, 0, 0, 1918, 1919, 7, 16, 0, 0, 1919, 1920, 7, 2, 0, 0, 1920, 332, 1, 0, 0, 0, 1921, 1922, 7, 18, 0, 0, 1922, 1923, 7, 2, 0, 0, 1923, 1924, 7, 4, 0, 0, 1924, 1925, 5, 95, 0, 0, 1925, 1926, 7, 1, 0, 0, 1926, 1927, 7, 2, 0, 0, 1927, 1928, 7, 5, 0, 0, 1928, 1929, 7, 10, 0, 0, 1929, 1930, 7, 15, 0, 0, 1930, 1931, 7, 7, 0, 0, 1931, 334, 1, 0, 0, 0, 1932, 1933, 7, 4, 0, 0, 1933, 1934, 7, 3, 0, 0, 1934, 1935, 7, 16, 0, 0, 1935, 1936, 7, 2, 0, 0, 1936, 336, 1, 0, 0, 0, 1937, 1938, 7, 1, 0, 0, 1938, 1939, 7, 18, 0, 0, 1939, 1940, 7, 3, 0, 0, 1940, 1941, 7, 4, 0, 0, 1941, 1942, 7, 22, 0, 0, 1942, 1943, 7, 14, 0, 0, 1943, 1944, 7, 8, 0, 0, 1944, 1945, 7, 15, 0, 0, 1945, 1946, 7, 2, 0, 0, 1946, 338, 1, 0, 0, 0, 1947, 1948, 7, 5, 0, 0, 1948, 340, 1, 0, 0, 0, 1949, 1950, 7, 7, 0, 0, 1950, 1951, 7, 5, 0, 0, 1951, 342, 1, 0, 0, 0, 1952, 1953, 7, 3, 0, 0, 1953, 1954, 7, 9, 0, 0, 1954, 1955, 7, 1, 0, 0, 1955, 344, 1, 0, 0, 0, 1956, 1957, 7, 5, 0, 0, 1957, 1958, 7, 9, 0, 0, 1958, 1959, 7, 4, 0, 0, 1959, 1960, 7, 16, 0, 0, 1960, 346, 1, 0, 0, 0, 1961, 1962, 7, 5, 0, 0, 1962, 1963, 7, 2, 0, 0, 1963, 1964, 7, 8, 0, 0, 1964, 1965, 7, 14, 0, 0, 1965, 348, 1, 0, 0, 0, 1966, 1967, 7, 5, 0, 0, 1967, 1968, 7, 2, 0, 0, 1968, 1969, 7, 8, 0, 0, 1969, 1970, 7, 14, 0, 0, 1970, 1971, 7, 8, 0, 0, 1971, 1972, 7, 15, 0, 0, 1972, 1973, 7, 20, 0, 0, 1973, 350, 1, 0, 0, 0, 1974, 1975, 7, 5, 0, 0, 1975, 1976, 7, 10, 0, 0, 1976, 1977, 7, 15, 0, 0, 1977, 1978, 7, 19, 0, 0, 1978, 352, 1, 0, 0, 0, 1979, 1980, 7, 5, 0, 0, 1980, 1981, 7, 4, 0, 0, 1981, 1982, 7, 5, 0, 0, 1982, 1983, 5, 51, 0, 0, 1983, 1984, 5, 50, 0, 0, 1984, 354, 1, 0, 0, 0, 1985, 1986, 7, 2, 0, 0, 1986, 356, 1, 0, 0, 0, 1987, 1988, 7, 2, 0, 0, 1988, 1989, 7, 21, 0, 0, 1989, 1990, 7, 18, 0, 0, 1990, 358, 1, 0, 0, 0, 1991, 1992, 7, 12, 0, 0, 1992, 1993, 7, 14, 0, 0, 1993, 1994, 7, 10, 0, 0, 1994, 1995, 7, 10, 0, 0, 1995, 1996, 7, 4, 0, 0, 1996, 360, 1, 0, 0, 0, 1997, 1998, 7, 14, 0, 0, 1998, 1999, 7, 15, 0, 0, 1999, 362, 1, 0, 0, 0, 2000, 2001, 7, 14, 0, 0, 2001, 2002, 7, 10, 0, 0, 2002, 2003, 7, 20, 0, 0, 2003, 364, 1, 0, 0, 0, 2004, 2005, 7, 14, 0, 0, 2005, 2006, 7, 10, 0, 0, 2006, 2007, 7, 20, 0, 0, 2007, 2008, 5, 49, 0, 0, 2008, 2009, 5, 48, 0, 0, 2009, 366, 1, 0, 0, 0, 2010, 2011, 7, 14, 0, 0, 2011, 2012, 7, 10, 0, 0, 2012, 2013, 7, 20, 0, 0, 2013, 2014, 5, 50, 0, 0, 2014, 368, 1, 0, 0, 0, 2015, 2016, 7, 13, 0, 0, 2016, 2017, 7, 10, 0, 0, 2017, 2018, 7, 7, 0, 0, 2018, 370, 1, 0, 0, 0, 2019, 2020, 7, 18, 0, 0, 2020, 2021, 7, 8, 0, 0, 2021, 372, 1, 0, 0, 0, 2022, 2023, 7, 18, 0, 0, 2023, 2024, 7, 10, 0, 0, 2024, 2025, 7, 1, 0, 0, 2025, 2026, 7, 8, 0, 0, 2026, 2027, 7, 16, 0, 0, 2027, 2028, 7, 8, 0, 0, 2028, 2029, 7, 10, 0, 0, 2029, 2030, 7, 15, 0, 0, 2030, 374, 1, 0, 0, 0, 2031, 2032, 7, 18, 0, 0, 2032, 2033, 7, 10, 0, 0, 2033, 2034, 7, 11, 0, 0, 2034, 376, 1, 0, 0, 0, 2035, 2036, 7, 18, 0, 0, 2036, 2037, 7, 10, 0, 0, 2037, 2038, 7, 11, 0, 0, 2038, 2039, 7, 2, 0, 0, 2039, 2040, 7, 4, 0, 0, 2040, 378, 1, 0, 0, 0, 2041, 2042, 7, 4, 0, 0, 2042, 2043, 7, 3, 0, 0, 2043, 2044, 7, 15, 0, 0, 2044, 2045, 7, 7, 0, 0, 2045, 380, 1, 0, 0, 0, 2046, 2047, 7, 4, 0, 0, 2047, 2048, 7, 10, 0, 0, 2048, 2049, 7, 17, 0, 0, 2049, 2050, 7, 15, 0, 0, 2050, 2051, 7, 7, 0, 0, 2051, 382, 1, 0, 0, 0, 2052, 2053, 7, 1, 0, 0, 2053, 2054, 7, 8, 0, 0, 2054, 2055, 7, 20, 0, 0, 2055, 2056, 7, 15, 0, 0, 2056, 384, 1, 0, 0, 0, 2057, 2058, 7, 1, 0, 0, 2058, 2059, 7, 25, 0, 0, 2059, 2060, 7, 4, 0, 0, 2060, 2061, 7, 16, 0, 0, 2061, 386, 1, 0, 0, 0, 2062, 2063, 7, 16, 0, 0, 2063, 2064, 7, 4, 0, 0, 2064, 2065, 7, 17, 0, 0, 2065, 2066, 7, 15, 0, 0, 2066, 2067, 7, 5, 0, 0, 2067, 2068, 7, 3, 0, 0, 2068, 2069, 7, 16, 0, 0, 2069, 2070, 7, 2, 0, 0, 2070, 388, 1, 0, 0, 0, 2071, 2072, 7, 3, 0, 0, 2072, 2073, 7, 5, 0, 0, 2073, 2074, 7, 10, 0, 0, 2074, 2075, 7, 1, 0, 0, 2075, 390, 1, 0, 0, 0, 2076, 2077, 7, 3, 0, 0, 2077, 2078, 7, 1, 0, 0, 2078, 2079, 7, 8, 0, 0, 2079, 2080, 7, 15, 0, 0, 2080, 392, 1, 0, 0, 0, 2081, 2082, 7, 3, 0, 0, 2082, 2083, 7, 16, 0, 0, 2083, 2084, 7, 3, 0, 0, 2084, 2085, 7, 15, 0, 0, 2085, 394, 1, 0, 0, 0, 2086, 2087, 7, 3, 0, 0, 2087, 2088, 7, 16, 0, 0, 2088, 2089, 7, 3, 0, 0, 2089, 2090, 7, 15, 0, 0, 2090, 2091, 5, 50, 0, 0, 2091, 396, 1, 0, 0, 0, 2092, 2093, 7, 5, 0, 0, 2093, 2094, 7, 10, 0, 0, 2094, 2095, 7, 1, 0, 0, 2095, 398, 1, 0, 0, 0, 2096, 2097, 7, 5, 0, 0, 2097, 2098, 7, 10, 0, 0, 2098, 2099, 7, 16, 0, 0, 2099, 400, 1, 0, 0, 0, 2100, 2101, 7, 7, 0, 0, 2101, 2102, 7, 2, 0, 0, 2102, 2103, 7, 20, 0, 0, 2103, 2104, 7, 4, 0, 0, 2104, 2105, 7, 2, 0, 0, 2105, 2106, 7, 2, 0, 0, 2106, 2107, 7, 1, 0, 0, 2107, 402, 1, 0, 0, 0, 2108, 2109, 7, 4, 0, 0, 2109, 2110, 7, 3, 0, 0, 2110, 2111, 7, 7, 0, 0, 2111, 2112, 7, 8, 0, 0, 2112, 2113, 7, 3, 0, 0, 2113, 2114, 7, 15, 0, 0, 2114, 2115, 7, 1, 0, 0, 2115, 404, 1, 0, 0, 0, 2116, 2117, 7, 1, 0, 0, 2117, 2118, 7, 8, 0, 0, 2118, 2119, 7, 15, 0, 0, 2119, 406, 1, 0, 0, 0, 2120, 2121, 7, 16, 0, 0, 2121, 2122, 7, 3, 0, 0, 2122, 2123, 7, 15, 0, 0, 2123, 408, 1, 0, 0, 0, 2124, 2125, 7, 3, 0, 0, 2125, 2126, 7, 7, 0, 0, 2126, 2127, 7, 7, 0, 0, 2127, 2128, 7, 7, 0, 0, 2128, 2129, 7, 3, 0, 0, 2129, 2130, 7, 16, 0, 0, 2130, 2131, 7, 2, 0, 0, 2131, 410, 1, 0, 0, 0, 2132, 2133, 7, 3, 0, 0, 2133, 2134, 7, 7, 0, 0, 2134, 2135, 7, 7, 0, 0, 2135, 2136, 7, 16, 0, 0, 2136, 2137, 7, 8, 0, 0, 2137, 2138, 7, 13, 0, 0, 2138, 2139, 7, 2, 0, 0, 2139, 412, 1, 0, 0, 0, 2140, 2141, 7, 5, 0, 0, 2141, 2142, 7, 17, 0, 0, 2142, 2143, 7, 4, 0, 0, 2143, 2144, 7, 7, 0, 0, 2144, 2145, 7, 3, 0, 0, 2145, 2146, 7, 16, 0, 0, 2146, 2147, 7, 2, 0, 0, 2147, 414, 1, 0, 0, 0, 2148, 2149, 7, 5, 0, 0, 2149, 2150, 7, 17, 0, 0, 2150, 2151, 7, 4, 0, 0, 2151, 2152, 7, 4, 0, 0, 2152, 2153, 7, 2, 0, 0, 2153, 2154, 7, 15, 0, 0, 2154, 2155, 7, 16, 0, 0, 2155, 2156, 5, 95, 0, 0, 2156, 2157, 7, 7, 0, 0, 2157, 2158, 7, 3, 0, 0, 2158, 2159, 7, 16, 0, 0, 2159, 2160, 7, 2, 0, 0, 2160, 416, 1, 0, 0, 0, 2161, 2162, 7, 5, 0, 0, 2162, 2163, 7, 17, 0, 0, 2163, 2164, 7, 4, 0, 0, 2164, 2165, 7, 4, 0, 0, 2165, 2166, 7, 2, 0, 0, 2166, 2167, 7, 15, 0, 0, 2167, 2168, 7, 16, 0, 0, 2168, 2169, 5, 95, 0, 0, 2169, 2170, 7, 16, 0, 0, 2170, 2171, 7, 8, 0, 0, 2171, 2172, 7, 13, 0, 0, 2172, 2173, 7, 2, 0, 0, 2173, 418, 1, 0, 0, 0, 2174, 2175, 7, 5, 0, 0, 2175, 2176, 7, 17, 0, 0, 2176, 2177, 7, 4, 0, 0, 2177, 2178, 7, 4, 0, 0, 2178, 2179, 7, 2, 0, 0, 2179, 2180, 7, 15, 0, 0, 2180, 2181, 7, 16, 0, 0, 2181, 2182, 5, 95, 0, 0, 2182, 2183, 7, 16, 0, 0, 2183, 2184, 7, 8, 0, 0, 2184, 2185, 7, 13, 0, 0, 2185, 2186, 7, 2, 0, 0, 2186, 2187, 7, 1, 0, 0, 2187, 2188, 7, 16, 0, 0, 2188, 2189, 7, 3, 0, 0, 2189, 2190, 7, 13, 0, 0, 2190, 2191, 7, 18, 0, 0, 2191, 420, 1, 0, 0, 0, 2192, 2193, 7, 5, 0, 0, 2193, 2194, 7, 17, 0, 0, 2194, 2195, 7, 4, 0, 0, 2195, 2196, 7, 16, 0, 0, 2196, 2197, 7, 8, 0, 0, 2197, 2198, 7, 13, 0, 0, 2198, 2199, 7, 2, 0, 0, 2199, 422, 1, 0, 0, 0, 2200, 2201, 7, 7, 0, 0, 2201, 2202, 7, 3, 0, 0, 2202, 2203, 7, 16, 0, 0, 2203, 2204, 7, 2, 0, 0, 2204, 424, 1, 0, 0, 0, 2205, 2206, 7, 7, 0, 0, 2206, 2207, 7, 3, 0, 0, 2207, 2208, 7, 16, 0, 0, 2208, 2209, 7, 2, 0, 0, 2209, 2210, 7, 7, 0, 0, 2210, 2211, 7, 8, 0, 0, 2211, 2212, 7, 12, 0, 0, 2212, 2213, 7, 12, 0, 0, 2213, 426, 1, 0, 0, 0, 2214, 2215, 7, 7, 0, 0, 2215, 2216, 7, 3, 0, 0, 2216, 2217, 7, 16, 0, 0, 2217, 2218, 7, 2, 0, 0, 2218, 2219, 5, 95, 0, 0, 2219, 2220, 7, 3, 0, 0, 2220, 2221, 7, 7, 0, 0, 2221, 2222, 7, 7, 0, 0, 2222, 428, 1, 0, 0, 0, 2223, 2224, 7, 7, 0, 0, 2224, 2225, 7, 3, 0, 0, 2225, 2226, 7, 16, 0, 0, 2226, 2227, 7, 2, 0, 0, 2227, 2228, 5, 95, 0, 0, 2228, 2229, 7, 12, 0, 0, 2229, 2230, 7, 10, 0, 0, 2230, 2231, 7, 4, 0, 0, 2231, 2232, 7, 13, 0, 0, 2232, 2233, 7, 3, 0, 0, 2233, 2234, 7, 16, 0, 0, 2234, 430, 1, 0, 0, 0, 2235, 2236, 7, 7, 0, 0, 2236, 2237, 7, 3, 0, 0, 2237, 2238, 7, 16, 0, 0, 2238, 2239, 7, 2, 0, 0, 2239, 2240, 5, 95, 0, 0, 2240, 2241, 7, 1, 0, 0, 2241, 2242, 7, 17, 0, 0, 2242, 2243, 7, 9, 0, 0, 2243, 432, 1, 0, 0, 0, 2244, 2245, 7, 7, 0, 0, 2245, 2246, 7, 3, 0, 0, 2246, 2247, 7, 23, 0, 0, 2247, 2248, 7, 15, 0, 0, 2248, 2249, 7, 3, 0, 0, 2249, 2250, 7, 13, 0, 0, 2250, 2251, 7, 2, 0, 0, 2251, 434, 1, 0, 0, 0, 2252, 2253, 7, 7, 0, 0, 2253, 2254, 7, 3, 0, 0, 2254, 2255, 7, 23, 0, 0, 2255, 2256, 7, 10, 0, 0, 2256, 2257, 7, 12, 0, 0, 2257, 2258, 7, 13, 0, 0, 2258, 2259, 7, 10, 0, 0, 2259, 2260, 7, 15, 0, 0, 2260, 2261, 7, 16, 0, 0, 2261, 2262, 7, 6, 0, 0, 2262, 436, 1, 0, 0, 0, 2263, 2264, 7, 7, 0, 0, 2264, 2265, 7, 3, 0, 0, 2265, 2266, 7, 23, 0, 0, 2266, 2267, 7, 10, 0, 0, 2267, 2268, 7, 12, 0, 0, 2268, 2269, 7, 11, 0, 0, 2269, 2270, 7, 2, 0, 0, 2270, 2271, 7, 2, 0, 0, 2271, 2272, 7, 22, 0, 0, 2272, 438, 1, 0, 0, 0, 2273, 2274, 7, 7, 0, 0, 2274, 2275, 7, 3, 0, 0, 2275, 2276, 7, 23, 0, 0, 2276, 2277, 7, 10, 0, 0, 2277, 2278, 7, 12, 0, 0, 2278, 2279, 7, 23, 0, 0, 2279, 2280, 7, 2, 0, 0, 2280, 2281, 7, 3, 0, 0, 2281, 2282, 7, 4, 0, 0, 2282, 440, 1, 0, 0, 0, 2283, 2284, 7, 7, 0, 0, 2284, 2285, 7, 3, 0, 0, 2285, 2286, 7, 23, 0, 0, 2286, 2287, 5, 95, 0, 0, 2287, 2288, 7, 10, 0, 0, 2288, 2289, 7, 12, 0, 0, 2289, 2290, 5, 95, 0, 0, 2290, 2291, 7, 13, 0, 0, 2291, 2292, 7, 10, 0, 0, 2292, 2293, 7, 15, 0, 0, 2293, 2294, 7, 16, 0, 0, 2294, 2295, 7, 6, 0, 0, 2295, 442, 1, 0, 0, 0, 2296, 2297, 7, 7, 0, 0, 2297, 2298, 7, 3, 0, 0, 2298, 2299, 7, 23, 0, 0, 2299, 2300, 5, 95, 0, 0, 2300, 2301, 7, 10, 0, 0, 2301, 2302, 7, 12, 0, 0, 2302, 2303, 5, 95, 0, 0, 2303, 2304, 7, 11, 0, 0, 2304, 2305, 7, 2, 0, 0, 2305, 2306, 7, 2, 0, 0, 2306, 2307, 7, 22, 0, 0, 2307, 444, 1, 0, 0, 0, 2308, 2309, 7, 2, 0, 0, 2309, 2310, 7, 21, 0, 0, 2310, 2311, 7, 16, 0, 0, 2311, 2312, 7, 4, 0, 0, 2312, 2313, 7, 3, 0, 0, 2313, 2314, 7, 5, 0, 0, 2314, 2315, 7, 16, 0, 0, 2315, 446, 1, 0, 0, 0, 2316, 2317, 7, 12, 0, 0, 2317, 2318, 7, 4, 0, 0, 2318, 2319, 7, 10, 0, 0, 2319, 2320, 7, 13, 0, 0, 2320, 2321, 5, 95, 0, 0, 2321, 2322, 7, 7, 0, 0, 2322, 2323, 7, 3, 0, 0, 2323, 2324, 7, 23, 0, 0, 2324, 2325, 7, 1, 0, 0, 2325, 448, 1, 0, 0, 0, 2326, 2327, 7, 12, 0, 0, 2327, 2328, 7, 4, 0, 0, 2328, 2329, 7, 10, 0, 0, 2329, 2330, 7, 13, 0, 0, 2330, 2331, 5, 95, 0, 0, 2331, 2332, 7, 17, 0, 0, 2332, 2333, 7, 15, 0, 0, 2333, 2334, 7, 8, 0, 0, 2334, 2335, 7, 21, 0, 0, 2335, 2336, 7, 16, 0, 0, 2336, 2337, 7, 8, 0, 0, 2337, 2338, 7, 13, 0, 0, 2338, 2339, 7, 2, 0, 0, 2339, 450, 1, 0, 0, 0, 2340, 2341, 7, 20, 0, 0, 2341, 2342, 7, 2, 0, 0, 2342, 2343, 7, 16, 0, 0, 2343, 2344, 5, 95, 0, 0, 2344, 2345, 7, 12, 0, 0, 2345, 2346, 7, 10, 0, 0, 2346, 2347, 7, 4, 0, 0, 2347, 2348, 7, 13, 0, 0, 2348, 2349, 7, 3, 0, 0, 2349, 2350, 7, 16, 0, 0, 2350, 452, 1, 0, 0, 0, 2351, 2352, 7, 14, 0, 0, 2352, 2353, 7, 3, 0, 0, 2353, 2354, 7, 1, 0, 0, 2354, 2355, 7, 16, 0, 0, 2355, 2356, 5, 95, 0, 0, 2356, 2357, 7, 7, 0, 0, 2357, 2358, 7, 3, 0, 0, 2358, 2359, 7, 23, 0, 0, 2359, 454, 1, 0, 0, 0, 2360, 2361, 7, 14, 0, 0, 2361, 2362, 7, 10, 0, 0, 2362, 2363, 7, 5, 0, 0, 2363, 2364, 7, 3, 0, 0, 2364, 2365, 7, 14, 0, 0, 2365, 2366, 7, 16, 0, 0, 2366, 2367, 7, 8, 0, 0, 2367, 2368, 7, 13, 0, 0, 2368, 2369, 7, 2, 0, 0, 2369, 456, 1, 0, 0, 0, 2370, 2371, 7, 14, 0, 0, 2371, 2372, 7, 10, 0, 0, 2372, 2373, 7, 5, 0, 0, 2373, 2374, 7, 3, 0, 0, 2374, 2375, 7, 14, 0, 0, 2375, 2376, 7, 16, 0, 0, 2376, 2377, 7, 8, 0, 0, 2377, 2378, 7, 13, 0, 0, 2378, 2379, 7, 2, 0, 0, 2379, 2380, 7, 1, 0, 0, 2380, 2381, 7, 16, 0, 0, 2381, 2382, 7, 3, 0, 0, 2382, 2383, 7, 13, 0, 0, 2383, 2384, 7, 18, 0, 0, 2384, 458, 1, 0, 0, 0, 2385, 2386, 7, 13, 0, 0, 2386, 2387, 7, 3, 0, 0, 2387, 2388, 7, 22, 0, 0, 2388, 2389, 7, 2, 0, 0, 2389, 2390, 7, 7, 0, 0, 2390, 2391, 7, 3, 0, 0, 2391, 2392, 7, 16, 0, 0, 2392, 2393, 7, 2, 0, 0, 2393, 460, 1, 0, 0, 0, 2394, 2395, 7, 13, 0, 0, 2395, 2396, 7, 3, 0, 0, 2396, 2397, 7, 22, 0, 0, 2397, 2398, 7, 2, 0, 0, 2398, 2399, 7, 16, 0, 0, 2399, 2400, 7, 8, 0, 0, 2400, 2401, 7, 13, 0, 0, 2401, 2402, 7, 2, 0, 0, 2402, 462, 1, 0, 0, 0, 2403, 2404, 7, 13, 0, 0, 2404, 2405, 7, 10, 0, 0, 2405, 2406, 7, 15, 0, 0, 2406, 2407, 7, 16, 0, 0, 2407, 2408, 7, 6, 0, 0, 2408, 2409, 7, 15, 0, 0, 2409, 2410, 7, 3, 0, 0, 2410, 2411, 7, 13, 0, 0, 2411, 2412, 7, 2, 0, 0, 2412, 464, 1, 0, 0, 0, 2413, 2414, 7, 15, 0, 0, 2414, 2415, 7, 10, 0, 0, 2415, 2416, 7, 11, 0, 0, 2416, 466, 1, 0, 0, 0, 2417, 2418, 7, 18, 0, 0, 2418, 2419, 7, 2, 0, 0, 2419, 2420, 7, 4, 0, 0, 2420, 2421, 7, 8, 0, 0, 2421, 2422, 7, 10, 0, 0, 2422, 2423, 7, 7, 0, 0, 2423, 2424, 5, 95, 0, 0, 2424, 2425, 7, 3, 0, 0, 2425, 2426, 7, 7, 0, 0, 2426, 2427, 7, 7, 0, 0, 2427, 468, 1, 0, 0, 0, 2428, 2429, 7, 18, 0, 0, 2429, 2430, 7, 2, 0, 0, 2430, 2431, 7, 4, 0, 0, 2431, 2432, 7, 8, 0, 0, 2432, 2433, 7, 10, 0, 0, 2433, 2434, 7, 7, 0, 0, 2434, 2435, 5, 95, 0, 0, 2435, 2436, 7, 7, 0, 0, 2436, 2437, 7, 8, 0, 0, 2437, 2438, 7, 12, 0, 0, 2438, 2439, 7, 12, 0, 0, 2439, 470, 1, 0, 0, 0, 2440, 2441, 7, 1, 0, 0, 2441, 2442, 7, 2, 0, 0, 2442, 2443, 7, 5, 0, 0, 2443, 2444, 5, 95, 0, 0, 2444, 2445, 7, 16, 0, 0, 2445, 2446, 7, 10, 0, 0, 2446, 2447, 5, 95, 0, 0, 2447, 2448, 7, 16, 0, 0, 2448, 2449, 7, 8, 0, 0, 2449, 2450, 7, 13, 0, 0, 2450, 2451, 7, 2, 0, 0, 2451, 472, 1, 0, 0, 0, 2452, 2453, 7, 1, 0, 0, 2453, 2454, 7, 16, 0, 0, 2454, 2455, 7, 4, 0, 0, 2455, 2456, 5, 95, 0, 0, 2456, 2457, 7, 16, 0, 0, 2457, 2458, 7, 10, 0, 0, 2458, 2459, 5, 95, 0, 0, 2459, 2460, 7, 7, 0, 0, 2460, 2461, 7, 3, 0, 0, 2461, 2462, 7, 16, 0, 0, 2462, 2463, 7, 2, 0, 0, 2463, 474, 1, 0, 0, 0, 2464, 2465, 7, 1, 0, 0, 2465, 2466, 7, 17, 0, 0, 2466, 2467, 7, 9, 0, 0, 2467, 2468, 7, 7, 0, 0, 2468, 2469, 7, 3, 0, 0, 2469, 2470, 7, 16, 0, 0, 2470, 2471, 7, 2, 0, 0, 2471, 476, 1, 0, 0, 0, 2472, 2473, 7, 1, 0, 0, 2473, 2474, 7, 17, 0, 0, 2474, 2475, 7, 9, 0, 0, 2475, 2476, 7, 16, 0, 0, 2476, 2477, 7, 8, 0, 0, 2477, 2478, 7, 13, 0, 0, 2478, 2479, 7, 2, 0, 0, 2479, 478, 1, 0, 0, 0, 2480, 2481, 7, 1, 0, 0, 2481, 2482, 7, 23, 0, 0, 2482, 2483, 7, 1, 0, 0, 2483, 2484, 7, 7, 0, 0, 2484, 2485, 7, 3, 0, 0, 2485, 2486, 7, 16, 0, 0, 2486, 2487, 7, 2, 0, 0, 2487, 480, 1, 0, 0, 0, 2488, 2489, 7, 16, 0, 0, 2489, 2490, 7, 8, 0, 0, 2490, 2491, 7, 13, 0, 0, 2491, 2492, 7, 2, 0, 0, 2492, 482, 1, 0, 0, 0, 2493, 2494, 7, 16, 0, 0, 2494, 2495, 7, 8, 0, 0, 2495, 2496, 7, 13, 0, 0, 2496, 2497, 7, 2, 0, 0, 2497, 2498, 7, 7, 0, 0, 2498, 2499, 7, 8, 0, 0, 2499, 2500, 7, 12, 0, 0, 2500, 2501, 7, 12, 0, 0, 2501, 484, 1, 0, 0, 0, 2502, 2503, 7, 16, 0, 0, 2503, 2504, 7, 8, 0, 0, 2504, 2505, 7, 13, 0, 0, 2505, 2506, 7, 2, 0, 0, 2506, 2507, 7, 1, 0, 0, 2507, 2508, 7, 16, 0, 0, 2508, 2509, 7, 3, 0, 0, 2509, 2510, 7, 13, 0, 0, 2510, 2511, 7, 18, 0, 0, 2511, 486, 1, 0, 0, 0, 2512, 2513, 7, 16, 0, 0, 2513, 2514, 7, 8, 0, 0, 2514, 2515, 7, 13, 0, 0, 2515, 2516, 7, 2, 0, 0, 2516, 2517, 7, 1, 0, 0, 2517, 2518, 7, 16, 0, 0, 2518, 2519, 7, 3, 0, 0, 2519, 2520, 7, 13, 0, 0, 2520, 2521, 7, 18, 0, 0, 2521, 2522, 7, 3, 0, 0, 2522, 2523, 7, 7, 0, 0, 2523, 2524, 7, 7, 0, 0, 2524, 488, 1, 0, 0, 0, 2525, 2526, 7, 16, 0, 0, 2526, 2527, 7, 8, 0, 0, 2527, 2528, 7, 13, 0, 0, 2528, 2529, 7, 2, 0, 0, 2529, 2530, 7, 1, 0, 0, 2530, 2531, 7, 16, 0, 0, 2531, 2532, 7, 3, 0, 0, 2532, 2533, 7, 13, 0, 0, 2533, 2534, 7, 18, 0, 0, 2534, 2535, 7, 7, 0, 0, 2535, 2536, 7, 8, 0, 0, 2536, 2537, 7, 12, 0, 0, 2537, 2538, 7, 12, 0, 0, 2538, 490, 1, 0, 0, 0, 2539, 2540, 7, 16, 0, 0, 2540, 2541, 7, 8, 0, 0, 2541, 2542, 7, 13, 0, 0, 2542, 2543, 7, 2, 0, 0, 2543, 2544, 5, 95, 0, 0, 2544, 2545, 7, 12, 0, 0, 2545, 2546, 7, 10, 0, 0, 2546, 2547, 7, 4, 0, 0, 2547, 2548, 7, 13, 0, 0, 2548, 2549, 7, 3, 0, 0, 2549, 2550, 7, 16, 0, 0, 2550, 492, 1, 0, 0, 0, 2551, 2552, 7, 16, 0, 0, 2552, 2553, 7, 8, 0, 0, 2553, 2554, 7, 13, 0, 0, 2554, 2555, 7, 2, 0, 0, 2555, 2556, 5, 95, 0, 0, 2556, 2557, 7, 16, 0, 0, 2557, 2558, 7, 10, 0, 0, 2558, 2559, 5, 95, 0, 0, 2559, 2560, 7, 1, 0, 0, 2560, 2561, 7, 2, 0, 0, 2561, 2562, 7, 5, 0, 0, 2562, 494, 1, 0, 0, 0, 2563, 2564, 7, 16, 0, 0, 2564, 2565, 7, 10, 0, 0, 2565, 2566, 5, 95, 0, 0, 2566, 2567, 7, 7, 0, 0, 2567, 2568, 7, 3, 0, 0, 2568, 2569, 7, 23, 0, 0, 2569, 2570, 7, 1, 0, 0, 2570, 496, 1, 0, 0, 0, 2571, 2572, 7, 16, 0, 0, 2572, 2573, 7, 10, 0, 0, 2573, 2574, 5, 95, 0, 0, 2574, 2575, 7, 1, 0, 0, 2575, 2576, 7, 2, 0, 0, 2576, 2577, 7, 5, 0, 0, 2577, 2578, 7, 10, 0, 0, 2578, 2579, 7, 15, 0, 0, 2579, 2580, 7, 7, 0, 0, 2580, 2581, 7, 1, 0, 0, 2581, 498, 1, 0, 0, 0, 2582, 2583, 7, 17, 0, 0, 2583, 2584, 7, 15, 0, 0, 2584, 2585, 7, 8, 0, 0, 2585, 2586, 7, 21, 0, 0, 2586, 2587, 5, 95, 0, 0, 2587, 2588, 7, 16, 0, 0, 2588, 2589, 7, 8, 0, 0, 2589, 2590, 7, 13, 0, 0, 2590, 2591, 7, 2, 0, 0, 2591, 2592, 7, 1, 0, 0, 2592, 2593, 7, 16, 0, 0, 2593, 2594, 7, 3, 0, 0, 2594, 2595, 7, 13, 0, 0, 2595, 2596, 7, 18, 0, 0, 2596, 500, 1, 0, 0, 0, 2597, 2598, 7, 17, 0, 0, 2598, 2599, 7, 16, 0, 0, 2599, 2600, 7, 5, 0, 0, 2600, 2601, 5, 95, 0, 0, 2601, 2602, 7, 7, 0, 0, 2602, 2603, 7, 3, 0, 0, 2603, 2604, 7, 16, 0, 0, 2604, 2605, 7, 2, 0, 0, 2605, 502, 1, 0, 0, 0, 2606, 2607, 7, 17, 0, 0, 2607, 2608, 7, 16, 0, 0, 2608, 2609, 7, 5, 0, 0, 2609, 2610, 5, 95, 0, 0, 2610, 2611, 7, 16, 0, 0, 2611, 2612, 7, 8, 0, 0, 2612, 2613, 7, 13, 0, 0, 2613, 2614, 7, 2, 0, 0, 2614, 504, 1, 0, 0, 0, 2615, 2616, 7, 17, 0, 0, 2616, 2617, 7, 16, 0, 0, 2617, 2618, 7, 5, 0, 0, 2618, 2619, 5, 95, 0, 0, 2619, 2620, 7, 16, 0, 0, 2620, 2621, 7, 8, 0, 0, 2621, 2622, 7, 13, 0, 0, 2622, 2623, 7, 2, 0, 0, 2623, 2624, 7, 1, 0, 0, 2624, 2625, 7, 16, 0, 0, 2625, 2626, 7, 3, 0, 0, 2626, 2627, 7, 13, 0, 0, 2627, 2628, 7, 18, 0, 0, 2628, 506, 1, 0, 0, 0, 2629, 2630, 7, 11, 0, 0, 2630, 2631, 7, 2, 0, 0, 2631, 2632, 7, 2, 0, 0, 2632, 2633, 7, 22, 0, 0, 2633, 2634, 7, 7, 0, 0, 2634, 2635, 7, 3, 0, 0, 2635, 2636, 7, 23, 0, 0, 2636, 508, 1, 0, 0, 0, 2637, 2638, 7, 23, 0, 0, 2638, 2639, 7, 2, 0, 0, 2639, 2640, 7, 3, 0, 0, 2640, 2641, 7, 4, 0, 0, 2641, 2642, 7, 11, 0, 0, 2642, 2643, 7, 2, 0, 0, 2643, 2644, 7, 2, 0, 0, 2644, 2645, 7, 22, 0, 0, 2645, 510, 1, 0, 0, 0, 2646, 2647, 7, 1, 0, 0, 2647, 2648, 7, 17, 0, 0, 2648, 2649, 7, 9, 0, 0, 2649, 2650, 7, 1, 0, 0, 2650, 2651, 7, 16, 0, 0, 2651, 2652, 7, 4, 0, 0, 2652, 512, 1, 0, 0, 0, 2653, 2654, 7, 1, 0, 0, 2654, 2655, 7, 17, 0, 0, 2655, 2656, 7, 9, 0, 0, 2656, 2657, 7, 1, 0, 0, 2657, 2658, 7, 16, 0, 0, 2658, 2659, 7, 4, 0, 0, 2659, 2660, 7, 8, 0, 0, 2660, 2661, 7, 15, 0, 0, 2661, 2662, 7, 20, 0, 0, 2662, 514, 1, 0, 0, 0, 2663, 2664, 7, 14, 0, 0, 2664, 2665, 7, 16, 0, 0, 2665, 2666, 7, 4, 0, 0, 2666, 2667, 7, 8, 0, 0, 2667, 2668, 7, 13, 0, 0, 2668, 516, 1, 0, 0, 0, 2669, 2670, 7, 4, 0, 0, 2670, 2671, 7, 16, 0, 0, 2671, 2672, 7, 4, 0, 0, 2672, 2673, 7, 8, 0, 0, 2673, 2674, 7, 13, 0, 0, 2674, 518, 1, 0, 0, 0, 2675, 2676, 7, 16, 0, 0, 2676, 2677, 7, 4, 0, 0, 2677, 2678, 7, 8, 0, 0, 2678, 2679, 7, 13, 0, 0, 2679, 520, 1, 0, 0, 0, 2680, 2681, 7, 16, 0, 0, 2681, 2682, 7, 10, 0, 0, 2682, 522, 1, 0, 0, 0, 2683, 2684, 7, 14, 0, 0, 2684, 2685, 7, 10, 0, 0, 2685, 2686, 7, 11, 0, 0, 2686, 2687, 7, 2, 0, 0, 2687, 2688, 7, 4, 0, 0, 2688, 524, 1, 0, 0, 0, 2689, 2690, 7, 17, 0, 0, 2690, 2691, 7, 18, 0, 0, 2691, 2692, 7, 18, 0, 0, 2692, 2693, 7, 2, 0, 0, 2693, 2694, 7, 4, 0, 0, 2694, 526, 1, 0, 0, 0, 2695, 2696, 7, 5, 0, 0, 2696, 2697, 7, 10, 0, 0, 2697, 2698, 7, 15, 0, 0, 2698, 2699, 7, 5, 0, 0, 2699, 2700, 7, 3, 0, 0, 2700, 2701, 7, 16, 0, 0, 2701, 528, 1, 0, 0, 0, 2702, 2703, 7, 5, 0, 0, 2703, 2704, 7, 10, 0, 0, 2704, 2705, 7, 15, 0, 0, 2705, 2706, 7, 5, 0, 0, 2706, 2707, 7, 3, 0, 0, 2707, 2708, 7, 16, 0, 0, 2708, 2709, 5, 95, 0, 0, 2709, 2710, 7, 11, 0, 0, 2710, 2711, 7, 1, 0, 0, 2711, 530, 1, 0, 0, 0, 2712, 2713, 7, 14, 0, 0, 2713, 2714, 7, 2, 0, 0, 2714, 2715, 7, 15, 0, 0, 2715, 2716, 7, 20, 0, 0, 2716, 2717, 7, 16, 0, 0, 2717, 2718, 7, 6, 0, 0, 2718, 532, 1, 0, 0, 0, 2719, 2720, 7, 1, 0, 0, 2720, 2721, 7, 16, 0, 0, 2721, 2722, 7, 4, 0, 0, 2722, 2723, 7, 5, 0, 0, 2723, 2724, 7, 13, 0, 0, 2724, 2725, 7, 18, 0, 0, 2725, 534, 1, 0, 0, 0, 2726, 2727, 7, 4, 0, 0, 2727, 2728, 7, 8, 0, 0, 2728, 2729, 7, 20, 0, 0, 2729, 2730, 7, 6, 0, 0, 2730, 2731, 7, 16, 0, 0, 2731, 536, 1, 0, 0, 0, 2732, 2733, 7, 14, 0, 0, 2733, 2734, 7, 2, 0, 0, 2734, 2735, 7, 12, 0, 0, 2735, 2736, 7, 16, 0, 0, 2736, 538, 1, 0, 0, 0, 2737, 2738, 7, 3, 0, 0, 2738, 2739, 7, 1, 0, 0, 2739, 2740, 7, 5, 0, 0, 2740, 2741, 7, 8, 0, 0, 2741, 2742, 7, 8, 0, 0, 2742, 540, 1, 0, 0, 0, 2743, 2744, 7, 14, 0, 0, 2744, 2745, 7, 10, 0, 0, 2745, 2746, 7, 5, 0, 0, 2746, 2747, 7, 3, 0, 0, 2747, 2748, 7, 16, 0, 0, 2748, 2749, 7, 2, 0, 0, 2749, 542, 1, 0, 0, 0, 2750, 2751, 7, 4, 0, 0, 2751, 2752, 7, 2, 0, 0, 2752, 2753, 7, 18, 0, 0, 2753, 2754, 7, 14, 0, 0, 2754, 2755, 7, 3, 0, 0, 2755, 2756, 7, 5, 0, 0, 2756, 2757, 7, 2, 0, 0, 2757, 544, 1, 0, 0, 0, 2758, 2759, 7, 4, 0, 0, 2759, 2760, 7, 2, 0, 0, 2760, 2761, 7, 19, 0, 0, 2761, 2762, 7, 2, 0, 0, 2762, 2763, 7, 4, 0, 0, 2763, 2764, 7, 1, 0, 0, 2764, 2765, 7, 2, 0, 0, 2765, 546, 1, 0, 0, 0, 2766, 2767, 7, 5, 0, 0, 2767, 2768, 7, 3, 0, 0, 2768, 2769, 7, 1, 0, 0, 2769, 2770, 7, 16, 0, 0, 2770, 548, 1, 0, 0, 0, 2771, 2772, 7, 14, 0, 0, 2772, 2773, 7, 8, 0, 0, 2773, 2774, 7, 22, 0, 0, 2774, 2775, 7, 2, 0, 0, 2775, 550, 1, 0, 0, 0, 2776, 2777, 7, 8, 0, 0, 2777, 2778, 7, 1, 0, 0, 2778, 2779, 7, 15, 0, 0, 2779, 2780, 7, 17, 0, 0, 2780, 2781, 7, 14, 0, 0, 2781, 2782, 7, 14, 0, 0, 2782, 552, 1, 0, 0, 0, 2783, 2784, 7, 8, 0, 0, 2784, 2785, 7, 1, 0, 0, 2785, 2786, 7, 15, 0, 0, 2786, 2787, 7, 10, 0, 0, 2787, 2788, 7, 16, 0, 0, 2788, 2789, 7, 15, 0, 0, 2789, 2790, 7, 17, 0, 0, 2790, 2791, 7, 14, 0, 0, 2791, 2792, 7, 14, 0, 0, 2792, 554, 1, 0, 0, 0, 2793, 2794, 7, 8, 0, 0, 2794, 2795, 7, 12, 0, 0, 2795, 2796, 7, 15, 0, 0, 2796, 2797, 7, 17, 0, 0, 2797, 2798, 7, 14, 0, 0, 2798, 2799, 7, 14, 0, 0, 2799, 556, 1, 0, 0, 0, 2800, 2801, 7, 15, 0, 0, 2801, 2802, 7, 17, 0, 0, 2802, 2803, 7, 14, 0, 0, 2803, 2804, 7, 14, 0, 0, 2804, 2805, 7, 8, 0, 0, 2805, 2806, 7, 12, 0, 0, 2806, 558, 1, 0, 0, 0, 2807, 2808, 7, 8, 0, 0, 2808, 2809, 7, 12, 0, 0, 2809, 560, 1, 0, 0, 0, 2810, 2811, 7, 16, 0, 0, 2811, 2812, 7, 23, 0, 0, 2812, 2813, 7, 18, 0, 0, 2813, 2814, 7, 2, 0, 0, 2814, 2815, 7, 10, 0, 0, 2815, 2816, 7, 12, 0, 0, 2816, 562, 1, 0, 0, 0, 2817, 2818, 7, 13, 0, 0, 2818, 2819, 7, 3, 0, 0, 2819, 2820, 7, 16, 0, 0, 2820, 2821, 7, 5, 0, 0, 2821, 2822, 7, 6, 0, 0, 2822, 564, 1, 0, 0, 0, 2823, 2824, 7, 13, 0, 0, 2824, 2825, 7, 3, 0, 0, 2825, 2826, 7, 16, 0, 0, 2826, 2827, 7, 5, 0, 0, 2827, 2828, 7, 6, 0, 0, 2828, 2829, 5, 95, 0, 0, 2829, 2830, 7, 18, 0, 0, 2830, 2831, 7, 6, 0, 0, 2831, 2832, 7, 4, 0, 0, 2832, 2833, 7, 3, 0, 0, 2833, 2834, 7, 1, 0, 0, 2834, 2835, 7, 2, 0, 0, 2835, 566, 1, 0, 0, 0, 2836, 2837, 7, 13, 0, 0, 2837, 2838, 7, 3, 0, 0, 2838, 2839, 7, 16, 0, 0, 2839, 2840, 7, 5, 0, 0, 2840, 2841, 7, 6, 0, 0, 2841, 2842, 5, 95, 0, 0, 2842, 2843, 7, 18, 0, 0, 2843, 2844, 7, 6, 0, 0, 2844, 2845, 7, 4, 0, 0, 2845, 2846, 7, 3, 0, 0, 2846, 2847, 7, 1, 0, 0, 2847, 2848, 7, 2, 0, 0, 2848, 2849, 5, 95, 0, 0, 2849, 2850, 7, 18, 0, 0, 2850, 2851, 7, 4, 0, 0, 2851, 2852, 7, 2, 0, 0, 2852, 2853, 7, 12, 0, 0, 2853, 2854, 7, 8, 0, 0, 2854, 2855, 7, 21, 0, 0, 2855, 568, 1, 0, 0, 0, 2856, 2857, 7, 13, 0, 0, 2857, 2858, 7, 3, 0, 0, 2858, 2859, 7, 16, 0, 0, 2859, 2860, 7, 5, 0, 0, 2860, 2861, 7, 6, 0, 0, 2861, 2862, 5, 95, 0, 0, 2862, 2863, 7, 9, 0, 0, 2863, 2864, 7, 10, 0, 0, 2864, 2865, 7, 10, 0, 0, 2865, 2866, 7, 14, 0, 0, 2866, 2867, 5, 95, 0, 0, 2867, 2868, 7, 18, 0, 0, 2868, 2869, 7, 4, 0, 0, 2869, 2870, 7, 2, 0, 0, 2870, 2871, 7, 12, 0, 0, 2871, 2872, 7, 8, 0, 0, 2872, 2873, 7, 21, 0, 0, 2873, 570, 1, 0, 0, 0, 2874, 2875, 7, 1, 0, 0, 2875, 2876, 7, 8, 0, 0, 2876, 2877, 7, 13, 0, 0, 2877, 2878, 7, 18, 0, 0, 2878, 2879, 7, 14, 0, 0, 2879, 2880, 7, 2, 0, 0, 2880, 2881, 5, 95, 0, 0, 2881, 2882, 7, 25, 0, 0, 2882, 2883, 7, 17, 0, 0, 2883, 2884, 7, 2, 0, 0, 2884, 2885, 7, 4, 0, 0, 2885, 2886, 7, 23, 0, 0, 2886, 2887, 5, 95, 0, 0, 2887, 2888, 7, 1, 0, 0, 2888, 2889, 7, 16, 0, 0, 2889, 2890, 7, 4, 0, 0, 2890, 2891, 7, 8, 0, 0, 2891, 2892, 7, 15, 0, 0, 2892, 2893, 7, 20, 0, 0, 2893, 572, 1, 0, 0, 0, 2894, 2895, 7, 13, 0, 0, 2895, 2896, 7, 17, 0, 0, 2896, 2897, 7, 14, 0, 0, 2897, 2898, 7, 16, 0, 0, 2898, 2899, 7, 8, 0, 0, 2899, 2900, 5, 95, 0, 0, 2900, 2901, 7, 13, 0, 0, 2901, 2902, 7, 3, 0, 0, 2902, 2903, 7, 16, 0, 0, 2903, 2904, 7, 5, 0, 0, 2904, 2905, 7, 6, 0, 0, 2905, 574, 1, 0, 0, 0, 2906, 2907, 7, 25, 0, 0, 2907, 2908, 7, 17, 0, 0, 2908, 2909, 7, 2, 0, 0, 2909, 2910, 7, 4, 0, 0, 2910, 2911, 7, 23, 0, 0, 2911, 2912, 5, 95, 0, 0, 2912, 2913, 7, 1, 0, 0, 2913, 2914, 7, 16, 0, 0, 2914, 2915, 7, 4, 0, 0, 2915, 2916, 7, 8, 0, 0, 2916, 2917, 7, 15, 0, 0, 2917, 2918, 7, 20, 0, 0, 2918, 576, 1, 0, 0, 0, 2919, 2920, 7, 3, 0, 0, 2920, 2921, 7, 14, 0, 0, 2921, 2922, 7, 14, 0, 0, 2922, 2923, 7, 10, 0, 0, 2923, 2924, 7, 11, 0, 0, 2924, 2925, 5, 95, 0, 0, 2925, 2926, 7, 14, 0, 0, 2926, 2927, 7, 2, 0, 0, 2927, 2928, 7, 3, 0, 0, 2928, 2929, 7, 7, 0, 0, 2929, 2930, 7, 8, 0, 0, 2930, 2931, 7, 15, 0, 0, 2931, 2932, 7, 20, 0, 0, 2932, 2933, 5, 95, 0, 0, 2933, 2934, 7, 11, 0, 0, 2934, 2935, 7, 8, 0, 0, 2935, 2936, 7, 14, 0, 0, 2936, 2937, 7, 7, 0, 0, 2937, 2938, 7, 5, 0, 0, 2938, 2939, 7, 3, 0, 0, 2939, 2940, 7, 4, 0, 0, 2940, 2941, 7, 7, 0, 0, 2941, 578, 1, 0, 0, 0, 2942, 2943, 7, 3, 0, 0, 2943, 2944, 7, 15, 0, 0, 2944, 2945, 7, 3, 0, 0, 2945, 2946, 7, 14, 0, 0, 2946, 2947, 7, 23, 0, 0, 2947, 2948, 7, 24, 0, 0, 2948, 2949, 7, 2, 0, 0, 2949, 2950, 5, 95, 0, 0, 2950, 2951, 7, 11, 0, 0, 2951, 2952, 7, 8, 0, 0, 2952, 2953, 7, 14, 0, 0, 2953, 2954, 7, 7, 0, 0, 2954, 2955, 7, 5, 0, 0, 2955, 2956, 7, 3, 0, 0, 2956, 2957, 7, 4, 0, 0, 2957, 2958, 7, 7, 0, 0, 2958, 580, 1, 0, 0, 0, 2959, 2960, 7, 3, 0, 0, 2960, 2961, 7, 15, 0, 0, 2961, 2962, 7, 3, 0, 0, 2962, 2963, 7, 14, 0, 0, 2963, 2964, 7, 23, 0, 0, 2964, 2965, 7, 24, 0, 0, 2965, 2966, 7, 2, 0, 0, 2966, 2967, 7, 4, 0, 0, 2967, 582, 1, 0, 0, 0, 2968, 2969, 7, 3, 0, 0, 2969, 2970, 7, 17, 0, 0, 2970, 2971, 7, 16, 0, 0, 2971, 2972, 7, 10, 0, 0, 2972, 2973, 5, 95, 0, 0, 2973, 2974, 7, 20, 0, 0, 2974, 2975, 7, 2, 0, 0, 2975, 2976, 7, 15, 0, 0, 2976, 2977, 7, 2, 0, 0, 2977, 2978, 7, 4, 0, 0, 2978, 2979, 7, 3, 0, 0, 2979, 2980, 7, 16, 0, 0, 2980, 2981, 7, 2, 0, 0, 2981, 2982, 5, 95, 0, 0, 2982, 2983, 7, 1, 0, 0, 2983, 2984, 7, 23, 0, 0, 2984, 2985, 7, 15, 0, 0, 2985, 2986, 7, 10, 0, 0, 2986, 2987, 7, 15, 0, 0, 2987, 2988, 7, 23, 0, 0, 2988, 2989, 7, 13, 0, 0, 2989, 2990, 7, 1, 0, 0, 2990, 2991, 5, 95, 0, 0, 2991, 2992, 7, 18, 0, 0, 2992, 2993, 7, 6, 0, 0, 2993, 2994, 7, 4, 0, 0, 2994, 2995, 7, 3, 0, 0, 2995, 2996, 7, 1, 0, 0, 2996, 2997, 7, 2, 0, 0, 2997, 2998, 5, 95, 0, 0, 2998, 2999, 7, 25, 0, 0, 2999, 3000, 7, 17, 0, 0, 3000, 3001, 7, 2, 0, 0, 3001, 3002, 7, 4, 0, 0, 3002, 3003, 7, 23, 0, 0, 3003, 584, 1, 0, 0, 0, 3004, 3005, 7, 9, 0, 0, 3005, 3006, 7, 10, 0, 0, 3006, 3007, 7, 10, 0, 0, 3007, 3008, 7, 1, 0, 0, 3008, 3009, 7, 16, 0, 0, 3009, 586, 1, 0, 0, 0, 3010, 3011, 7, 5, 0, 0, 3011, 3012, 7, 17, 0, 0, 3012, 3013, 7, 16, 0, 0, 3013, 3014, 7, 10, 0, 0, 3014, 3015, 7, 12, 0, 0, 3015, 3016, 7, 12, 0, 0, 3016, 3017, 5, 95, 0, 0, 3017, 3018, 7, 12, 0, 0, 3018, 3019, 7, 4, 0, 0, 3019, 3020, 7, 2, 0, 0, 3020, 3021, 7, 25, 0, 0, 3021, 3022, 7, 17, 0, 0, 3022, 3023, 7, 2, 0, 0, 3023, 3024, 7, 15, 0, 0, 3024, 3025, 7, 5, 0, 0, 3025, 3026, 7, 23, 0, 0, 3026, 588, 1, 0, 0, 0, 3027, 3028, 7, 7, 0, 0, 3028, 3029, 7, 2, 0, 0, 3029, 3030, 7, 12, 0, 0, 3030, 3031, 7, 3, 0, 0, 3031, 3032, 7, 17, 0, 0, 3032, 3033, 7, 14, 0, 0, 3033, 3034, 7, 16, 0, 0, 3034, 3035, 5, 95, 0, 0, 3035, 3036, 7, 12, 0, 0, 3036, 3037, 7, 8, 0, 0, 3037, 3038, 7, 2, 0, 0, 3038, 3039, 7, 14, 0, 0, 3039, 3040, 7, 7, 0, 0, 3040, 590, 1, 0, 0, 0, 3041, 3042, 7, 7, 0, 0, 3042, 3043, 7, 2, 0, 0, 3043, 3044, 7, 12, 0, 0, 3044, 3045, 7, 3, 0, 0, 3045, 3046, 7, 17, 0, 0, 3046, 3047, 7, 14, 0, 0, 3047, 3048, 7, 16, 0, 0, 3048, 3049, 5, 95, 0, 0, 3049, 3050, 7, 10, 0, 0, 3050, 3051, 7, 18, 0, 0, 3051, 3052, 7, 2, 0, 0, 3052, 3053, 7, 4, 0, 0, 3053, 3054, 7, 3, 0, 0, 3054, 3055, 7, 16, 0, 0, 3055, 3056, 7, 10, 0, 0, 3056, 3057, 7, 4, 0, 0, 3057, 592, 1, 0, 0, 0, 3058, 3059, 7, 2, 0, 0, 3059, 3060, 7, 15, 0, 0, 3060, 3061, 7, 3, 0, 0, 3061, 3062, 7, 9, 0, 0, 3062, 3063, 7, 14, 0, 0, 3063, 3064, 7, 2, 0, 0, 3064, 3065, 5, 95, 0, 0, 3065, 3066, 7, 18, 0, 0, 3066, 3067, 7, 10, 0, 0, 3067, 3068, 7, 1, 0, 0, 3068, 3069, 7, 8, 0, 0, 3069, 3070, 7, 16, 0, 0, 3070, 3071, 7, 8, 0, 0, 3071, 3072, 7, 10, 0, 0, 3072, 3073, 7, 15, 0, 0, 3073, 3074, 5, 95, 0, 0, 3074, 3075, 7, 8, 0, 0, 3075, 3076, 7, 15, 0, 0, 3076, 3077, 7, 5, 0, 0, 3077, 3078, 7, 4, 0, 0, 3078, 3079, 7, 2, 0, 0, 3079, 3080, 7, 13, 0, 0, 3080, 3081, 7, 2, 0, 0, 3081, 3082, 7, 15, 0, 0, 3082, 3083, 7, 16, 0, 0, 3083, 3084, 7, 1, 0, 0, 3084, 594, 1, 0, 0, 0, 3085, 3086, 7, 2, 0, 0, 3086, 3087, 7, 1, 0, 0, 3087, 3088, 7, 5, 0, 0, 3088, 3089, 7, 3, 0, 0, 3089, 3090, 7, 18, 0, 0, 3090, 3091, 7, 2, 0, 0, 3091, 596, 1, 0, 0, 0, 3092, 3093, 7, 12, 0, 0, 3093, 3094, 7, 14, 0, 0, 3094, 3095, 7, 3, 0, 0, 3095, 3096, 7, 20, 0, 0, 3096, 3097, 7, 1, 0, 0, 3097, 598, 1, 0, 0, 0, 3098, 3099, 7, 12, 0, 0, 3099, 3100, 7, 17, 0, 0, 3100, 3101, 7, 24, 0, 0, 3101, 3102, 7, 24, 0, 0, 3102, 3103, 7, 23, 0, 0, 3103, 3104, 5, 95, 0, 0, 3104, 3105, 7, 13, 0, 0, 3105, 3106, 7, 3, 0, 0, 3106, 3107, 7, 21, 0, 0, 3107, 3108, 5, 95, 0, 0, 3108, 3109, 7, 2, 0, 0, 3109, 3110, 7, 21, 0, 0, 3110, 3111, 7, 18, 0, 0, 3111, 3112, 7, 3, 0, 0, 3112, 3113, 7, 15, 0, 0, 3113, 3114, 7, 1, 0, 0, 3114, 3115, 7, 8, 0, 0, 3115, 3116, 7, 10, 0, 0, 3116, 3117, 7, 15, 0, 0, 3117, 3118, 7, 1, 0, 0, 3118, 600, 1, 0, 0, 0, 3119, 3120, 7, 12, 0, 0, 3120, 3121, 7, 17, 0, 0, 3121, 3122, 7, 24, 0, 0, 3122, 3123, 7, 24, 0, 0, 3123, 3124, 7, 23, 0, 0, 3124, 3125, 5, 95, 0, 0, 3125, 3126, 7, 18, 0, 0, 3126, 3127, 7, 4, 0, 0, 3127, 3128, 7, 2, 0, 0, 3128, 3129, 7, 12, 0, 0, 3129, 3130, 7, 8, 0, 0, 3130, 3131, 7, 21, 0, 0, 3131, 3132, 5, 95, 0, 0, 3132, 3133, 7, 14, 0, 0, 3133, 3134, 7, 2, 0, 0, 3134, 3135, 7, 15, 0, 0, 3135, 3136, 7, 20, 0, 0, 3136, 3137, 7, 16, 0, 0, 3137, 3138, 7, 6, 0, 0, 3138, 602, 1, 0, 0, 0, 3139, 3140, 7, 12, 0, 0, 3140, 3141, 7, 17, 0, 0, 3141, 3142, 7, 24, 0, 0, 3142, 3143, 7, 24, 0, 0, 3143, 3144, 7, 23, 0, 0, 3144, 3145, 5, 95, 0, 0, 3145, 3146, 7, 16, 0, 0, 3146, 3147, 7, 4, 0, 0, 3147, 3148, 7, 3, 0, 0, 3148, 3149, 7, 15, 0, 0, 3149, 3150, 7, 1, 0, 0, 3150, 3151, 7, 18, 0, 0, 3151, 3152, 7, 10, 0, 0, 3152, 3153, 7, 1, 0, 0, 3153, 3154, 7, 8, 0, 0, 3154, 3155, 7, 16, 0, 0, 3155, 3156, 7, 8, 0, 0, 3156, 3157, 7, 10, 0, 0, 3157, 3158, 7, 15, 0, 0, 3158, 3159, 7, 1, 0, 0, 3159, 604, 1, 0, 0, 0, 3160, 3161, 7, 12, 0, 0, 3161, 3162, 7, 17, 0, 0, 3162, 3163, 7, 24, 0, 0, 3163, 3164, 7, 24, 0, 0, 3164, 3165, 7, 23, 0, 0, 3165, 3166, 5, 95, 0, 0, 3166, 3167, 7, 4, 0, 0, 3167, 3168, 7, 2, 0, 0, 3168, 3169, 7, 11, 0, 0, 3169, 3170, 7, 4, 0, 0, 3170, 3171, 7, 8, 0, 0, 3171, 3172, 7, 16, 0, 0, 3172, 3173, 7, 2, 0, 0, 3173, 606, 1, 0, 0, 0, 3174, 3175, 7, 12, 0, 0, 3175, 3176, 7, 17, 0, 0, 3176, 3177, 7, 24, 0, 0, 3177, 3178, 7, 24, 0, 0, 3178, 3179, 7, 8, 0, 0, 3179, 3180, 7, 15, 0, 0, 3180, 3181, 7, 2, 0, 0, 3181, 3182, 7, 1, 0, 0, 3182, 3183, 7, 1, 0, 0, 3183, 608, 1, 0, 0, 0, 3184, 3185, 7, 14, 0, 0, 3185, 3186, 7, 2, 0, 0, 3186, 3187, 7, 15, 0, 0, 3187, 3188, 7, 8, 0, 0, 3188, 3189, 7, 2, 0, 0, 3189, 3190, 7, 15, 0, 0, 3190, 3191, 7, 16, 0, 0, 3191, 610, 1, 0, 0, 0, 3192, 3193, 7, 14, 0, 0, 3193, 3194, 7, 10, 0, 0, 3194, 3195, 7, 11, 0, 0, 3195, 3196, 5, 95, 0, 0, 3196, 3197, 7, 12, 0, 0, 3197, 3198, 7, 4, 0, 0, 3198, 3199, 7, 2, 0, 0, 3199, 3200, 7, 25, 0, 0, 3200, 3201, 5, 95, 0, 0, 3201, 3202, 7, 10, 0, 0, 3202, 3203, 7, 18, 0, 0, 3203, 3204, 7, 2, 0, 0, 3204, 3205, 7, 4, 0, 0, 3205, 3206, 7, 3, 0, 0, 3206, 3207, 7, 16, 0, 0, 3207, 3208, 7, 10, 0, 0, 3208, 3209, 7, 4, 0, 0, 3209, 612, 1, 0, 0, 0, 3210, 3211, 7, 13, 0, 0, 3211, 3212, 7, 3, 0, 0, 3212, 3213, 7, 21, 0, 0, 3213, 3214, 5, 95, 0, 0, 3214, 3215, 7, 7, 0, 0, 3215, 3216, 7, 2, 0, 0, 3216, 3217, 7, 16, 0, 0, 3217, 3218, 7, 2, 0, 0, 3218, 3219, 7, 4, 0, 0, 3219, 3220, 7, 13, 0, 0, 3220, 3221, 7, 8, 0, 0, 3221, 3222, 7, 15, 0, 0, 3222, 3223, 7, 8, 0, 0, 3223, 3224, 7, 24, 0, 0, 3224, 3225, 7, 2, 0, 0, 3225, 3226, 7, 7, 0, 0, 3226, 3227, 5, 95, 0, 0, 3227, 3228, 7, 1, 0, 0, 3228, 3229, 7, 16, 0, 0, 3229, 3230, 7, 3, 0, 0, 3230, 3231, 7, 16, 0, 0, 3231, 3232, 7, 2, 0, 0, 3232, 3233, 7, 1, 0, 0, 3233, 614, 1, 0, 0, 0, 3234, 3235, 7, 13, 0, 0, 3235, 3236, 7, 3, 0, 0, 3236, 3237, 7, 21, 0, 0, 3237, 3238, 5, 95, 0, 0, 3238, 3239, 7, 2, 0, 0, 3239, 3240, 7, 21, 0, 0, 3240, 3241, 7, 18, 0, 0, 3241, 3242, 7, 3, 0, 0, 3242, 3243, 7, 15, 0, 0, 3243, 3244, 7, 1, 0, 0, 3244, 3245, 7, 8, 0, 0, 3245, 3246, 7, 10, 0, 0, 3246, 3247, 7, 15, 0, 0, 3247, 3248, 7, 1, 0, 0, 3248, 616, 1, 0, 0, 0, 3249, 3250, 7, 13, 0, 0, 3250, 3251, 7, 8, 0, 0, 3251, 3252, 7, 15, 0, 0, 3252, 3253, 7, 8, 0, 0, 3253, 3254, 7, 13, 0, 0, 3254, 3255, 7, 17, 0, 0, 3255, 3256, 7, 13, 0, 0, 3256, 3257, 5, 95, 0, 0, 3257, 3258, 7, 1, 0, 0, 3258, 3259, 7, 6, 0, 0, 3259, 3260, 7, 10, 0, 0, 3260, 3261, 7, 17, 0, 0, 3261, 3262, 7, 14, 0, 0, 3262, 3263, 7, 7, 0, 0, 3263, 3264, 5, 95, 0, 0, 3264, 3265, 7, 13, 0, 0, 3265, 3266, 7, 3, 0, 0, 3266, 3267, 7, 16, 0, 0, 3267, 3268, 7, 5, 0, 0, 3268, 3269, 7, 6, 0, 0, 3269, 618, 1, 0, 0, 0, 3270, 3271, 7, 10, 0, 0, 3271, 3272, 7, 18, 0, 0, 3272, 3273, 7, 2, 0, 0, 3273, 3274, 7, 4, 0, 0, 3274, 3275, 7, 3, 0, 0, 3275, 3276, 7, 16, 0, 0, 3276, 3277, 7, 10, 0, 0, 3277, 3278, 7, 4, 0, 0, 3278, 620, 1, 0, 0, 0, 3279, 3280, 7, 18, 0, 0, 3280, 3281, 7, 6, 0, 0, 3281, 3282, 7, 4, 0, 0, 3282, 3283, 7, 3, 0, 0, 3283, 3284, 7, 1, 0, 0, 3284, 3285, 7, 2, 0, 0, 3285, 3286, 5, 95, 0, 0, 3286, 3287, 7, 1, 0, 0, 3287, 3288, 7, 14, 0, 0, 3288, 3289, 7, 10, 0, 0, 3289, 3290, 7, 18, 0, 0, 3290, 622, 1, 0, 0, 0, 3291, 3292, 7, 18, 0, 0, 3292, 3293, 7, 4, 0, 0, 3293, 3294, 7, 2, 0, 0, 3294, 3295, 7, 12, 0, 0, 3295, 3296, 7, 8, 0, 0, 3296, 3297, 7, 21, 0, 0, 3297, 3298, 5, 95, 0, 0, 3298, 3299, 7, 14, 0, 0, 3299, 3300, 7, 2, 0, 0, 3300, 3301, 7, 15, 0, 0, 3301, 3302, 7, 20, 0, 0, 3302, 3303, 7, 16, 0, 0, 3303, 3304, 7, 6, 0, 0, 3304, 624, 1, 0, 0, 0, 3305, 3306, 7, 25, 0, 0, 3306, 3307, 7, 17, 0, 0, 3307, 3308, 7, 10, 0, 0, 3308, 3309, 7, 16, 0, 0, 3309, 3310, 7, 2, 0, 0, 3310, 3311, 5, 95, 0, 0, 3311, 3312, 7, 3, 0, 0, 3312, 3313, 7, 15, 0, 0, 3313, 3314, 7, 3, 0, 0, 3314, 3315, 7, 14, 0, 0, 3315, 3316, 7, 23, 0, 0, 3316, 3317, 7, 24, 0, 0, 3317, 3318, 7, 2, 0, 0, 3318, 3319, 7, 4, 0, 0, 3319, 626, 1, 0, 0, 0, 3320, 3321, 7, 25, 0, 0, 3321, 3322, 7, 17, 0, 0, 3322, 3323, 7, 10, 0, 0, 3323, 3324, 7, 16, 0, 0, 3324, 3325, 7, 2, 0, 0, 3325, 3326, 5, 95, 0, 0, 3326, 3327, 7, 12, 0, 0, 3327, 3328, 7, 8, 0, 0, 3328, 3329, 7, 2, 0, 0, 3329, 3330, 7, 14, 0, 0, 3330, 3331, 7, 7, 0, 0, 3331, 3332, 5, 95, 0, 0, 3332, 3333, 7, 1, 0, 0, 3333, 3334, 7, 17, 0, 0, 3334, 3335, 7, 12, 0, 0, 3335, 3336, 7, 12, 0, 0, 3336, 3337, 7, 8, 0, 0, 3337, 3338, 7, 21, 0, 0, 3338, 628, 1, 0, 0, 0, 3339, 3340, 7, 4, 0, 0, 3340, 3341, 7, 2, 0, 0, 3341, 3342, 7, 11, 0, 0, 3342, 3343, 7, 4, 0, 0, 3343, 3344, 7, 8, 0, 0, 3344, 3345, 7, 16, 0, 0, 3345, 3346, 7, 2, 0, 0, 3346, 630, 1, 0, 0, 0, 3347, 3348, 7, 1, 0, 0, 3348, 3349, 7, 14, 0, 0, 3349, 3350, 7, 10, 0, 0, 3350, 3351, 7, 18, 0, 0, 3351, 632, 1, 0, 0, 0, 3352, 3353, 7, 16, 0, 0, 3353, 3354, 7, 8, 0, 0, 3354, 3355, 7, 2, 0, 0, 3355, 3356, 5, 95, 0, 0, 3356, 3357, 7, 9, 0, 0, 3357, 3358, 7, 4, 0, 0, 3358, 3359, 7, 2, 0, 0, 3359, 3360, 7, 3, 0, 0, 3360, 3361, 7, 22, 0, 0, 3361, 3362, 7, 2, 0, 0, 3362, 3363, 7, 4, 0, 0, 3363, 634, 1, 0, 0, 0, 3364, 3365, 7, 16, 0, 0, 3365, 3366, 7, 23, 0, 0, 3366, 3367, 7, 18, 0, 0, 3367, 3368, 7, 2, 0, 0, 3368, 636, 1, 0, 0, 0, 3369, 3370, 7, 24, 0, 0, 3370, 3371, 7, 2, 0, 0, 3371, 3372, 7, 4, 0, 0, 3372, 3373, 7, 10, 0, 0, 3373, 3374, 5, 95, 0, 0, 3374, 3375, 7, 16, 0, 0, 3375, 3376, 7, 2, 0, 0, 3376, 3377, 7, 4, 0, 0, 3377, 3378, 7, 13, 0, 0, 3378, 3379, 7, 1, 0, 0, 3379, 3380, 5, 95, 0, 0, 3380, 3381, 7, 25, 0, 0, 3381, 3382, 7, 17, 0, 0, 3382, 3383, 7, 2, 0, 0, 3383, 3384, 7, 4, 0, 0, 3384, 3385, 7, 23, 0, 0, 3385, 638, 1, 0, 0, 0, 3386, 3387, 7, 1, 0, 0, 3387, 3388, 7, 18, 0, 0, 3388, 3389, 7, 3, 0, 0, 3389, 3390, 7, 15, 0, 0, 3390, 640, 1, 0, 0, 0, 3391, 3392, 7, 13, 0, 0, 3392, 3393, 7, 1, 0, 0, 3393, 642, 1, 0, 0, 0, 3394, 3395, 7, 1, 0, 0, 3395, 644, 1, 0, 0, 0, 3396, 3397, 7, 13, 0, 0, 3397, 646, 1, 0, 0, 0, 3398, 3399, 7, 6, 0, 0, 3399, 648, 1, 0, 0, 0, 3400, 3401, 7, 11, 0, 0, 3401, 650, 1, 0, 0, 0, 3402, 3403, 7, 25, 0, 0, 3403, 652, 1, 0, 0, 0, 3404, 3405, 7, 23, 0, 0, 3405, 654, 1, 0, 0, 0, 3406, 3407, 3, 665, 332, 0, 3407, 656, 1, 0, 0, 0, 3408, 3409, 3, 667, 333, 0, 3409, 658, 1, 0, 0, 0, 3410, 3412, 3, 677, 338, 0, 3411, 3410, 1, 0, 0, 0, 3412, 3413, 1, 0, 0, 0, 3413, 3411, 1, 0, 0, 0, 3413, 3414, 1, 0, 0, 0, 3414, 660, 1, 0, 0, 0, 3415, 3417, 3, 677, 338, 0, 3416, 3415, 1, 0, 0, 0, 3417, 3418, 1, 0, 0, 0, 3418, 3416, 1, 0, 0, 0, 3418, 3419, 1, 0, 0, 0, 3419, 3421, 1, 0, 0, 0, 3420, 3416, 1, 0, 0, 0, 3420, 3421, 1, 0, 0, 0, 3421, 3422, 1, 0, 0, 0, 3422, 3424, 5, 46, 0, 0, 3423, 3425, 3, 677, 338, 0, 3424, 3423, 1, 0, 0, 0, 3425, 3426, 1, 0, 0, 0, 3426, 3424, 1, 0, 0, 0, 3426, 3427, 1, 0, 0, 0, 3427, 662, 1, 0, 0, 0, 3428, 3430, 7, 26, 0, 0, 3429, 3431, 7, 27, 0, 0, 3430, 3429, 1, 0, 0, 0, 3431, 3432, 1, 0, 0, 0, 3432, 3430, 1, 0, 0, 0, 3432, 3433, 1, 0, 0, 0, 3433, 3435, 1, 0, 0, 0, 3434, 3428, 1, 0, 0, 0, 3435, 3436, 1, 0, 0, 0, 3436, 3434, 1, 0, 0, 0, 3436, 3437, 1, 0, 0, 0, 3437, 664, 1, 0, 0, 0, 3438, 3442, 7, 28, 0, 0, 3439, 3441, 7, 29, 0, 0, 3440, 3439, 1, 0, 0, 0, 3441, 3444, 1, 0, 0, 0, 3442, 3440, 1, 0, 0, 0, 3442, 3443, 1, 0, 0, 0, 3443, 666, 1, 0, 0, 0, 3444, 3442, 1, 0, 0, 0, 3445, 3447, 7, 30, 0, 0, 3446, 3445, 1, 0, 0, 0, 3447, 3448, 1, 0, 0, 0, 3448, 3449, 1, 0, 0, 0, 3448, 3446, 1, 0, 0, 0, 3449, 3453, 1, 0, 0, 0, 3450, 3452, 7, 29, 0, 0, 3451, 3450, 1, 0, 0, 0, 3452, 3455, 1, 0, 0, 0, 3453, 3451, 1, 0, 0, 0, 3453, 3454, 1, 0, 0, 0, 3454, 3456, 1, 0, 0, 0, 3455, 3453, 1, 0, 0, 0, 3456, 3457, 3, 247, 123, 0, 3457, 668, 1, 0, 0, 0, 3458, 3460, 3, 667, 333, 0, 3459, 3458, 1, 0, 0, 0, 3459, 3460, 1, 0, 0, 0, 3460, 3461, 1, 0, 0, 0, 3461, 3462, 3, 665, 332, 0, 3462, 3463, 3, 663, 331, 0, 3463, 670, 1, 0, 0, 0, 3464, 3472, 5, 34, 0, 0, 3465, 3466, 5, 92, 0, 0, 3466, 3471, 9, 0, 0, 0, 3467, 3468, 5, 34, 0, 0, 3468, 3471, 5, 34, 0, 0, 3469, 3471, 8, 31, 0, 0, 3470, 3465, 1, 0, 0, 0, 3470, 3467, 1, 0, 0, 0, 3470, 3469, 1, 0, 0, 0, 3471, 3474, 1, 0, 0, 0, 3472, 3470, 1, 0, 0, 0, 3472, 3473, 1, 0, 0, 0, 3473, 3475, 1, 0, 0, 0, 3474, 3472, 1, 0, 0, 0, 3475, 3476, 5, 34, 0, 0, 3476, 672, 1, 0, 0, 0, 3477, 3485, 5, 39, 0, 0, 3478, 3479, 5, 92, 0, 0, 3479, 3484, 9, 0, 0, 0, 3480, 3481, 5, 39, 0, 0, 3481, 3484, 5, 39, 0, 0, 3482, 3484, 8, 32, 0, 0, 3483, 3478, 1, 0, 0, 0, 3483, 3480, 1, 0, 0, 0, 3483, 3482, 1, 0, 0, 0, 3484, 3487, 1, 0, 0, 0, 3485, 3483, 1, 0, 0, 0, 3485, 3486, 1, 0, 0, 0, 3486, 3488, 1, 0, 0, 0, 3487, 3485, 1, 0, 0, 0, 3488, 3489, 5, 39, 0, 0, 3489, 674, 1, 0, 0, 0, 3490, 3498, 5, 96, 0, 0, 3491, 3492, 5, 92, 0, 0, 3492, 3497, 9, 0, 0, 0, 3493, 3494, 5, 96, 0, 0, 3494, 3497, 5, 96, 0, 0, 3495, 3497, 8, 33, 0, 0, 3496, 3491, 1, 0, 0, 0, 3496, 3493, 1, 0, 0, 0, 3496, 3495, 1, 0, 0, 0, 3497, 3500, 1, 0, 0, 0, 3498, 3496, 1, 0, 0, 0, 3498, 3499, 1, 0, 0, 0, 3499, 3501, 1, 0, 0, 0, 3500, 3498, 1, 0, 0, 0, 3501, 3502, 5, 96, 0, 0, 3502, 676, 1, 0, 0, 0, 3503, 3504, 7, 34, 0, 0, 3504, 678, 1, 0, 0, 0, 3505, 3506, 9, 0, 0, 0, 3506, 3507, 1, 0, 0, 0, 3507, 3508, 6, 339, 1, 0, 3508, 680, 1, 0, 0, 0, 18, 0, 684, 3413, 3418, 3420, 3426, 3432, 3436, 3442, 3448, 3453, 3459, 3470, 3472, 3483, 3485, 3496, 3498, 2, 0, 1, 0, 0, 3, 0] \ No newline at end of file +[4, 0, 467, 4875, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 2, 346, 7, 346, 2, 347, 7, 347, 2, 348, 7, 348, 2, 349, 7, 349, 2, 350, 7, 350, 2, 351, 7, 351, 2, 352, 7, 352, 2, 353, 7, 353, 2, 354, 7, 354, 2, 355, 7, 355, 2, 356, 7, 356, 2, 357, 7, 357, 2, 358, 7, 358, 2, 359, 7, 359, 2, 360, 7, 360, 2, 361, 7, 361, 2, 362, 7, 362, 2, 363, 7, 363, 2, 364, 7, 364, 2, 365, 7, 365, 2, 366, 7, 366, 2, 367, 7, 367, 2, 368, 7, 368, 2, 369, 7, 369, 2, 370, 7, 370, 2, 371, 7, 371, 2, 372, 7, 372, 2, 373, 7, 373, 2, 374, 7, 374, 2, 375, 7, 375, 2, 376, 7, 376, 2, 377, 7, 377, 2, 378, 7, 378, 2, 379, 7, 379, 2, 380, 7, 380, 2, 381, 7, 381, 2, 382, 7, 382, 2, 383, 7, 383, 2, 384, 7, 384, 2, 385, 7, 385, 2, 386, 7, 386, 2, 387, 7, 387, 2, 388, 7, 388, 2, 389, 7, 389, 2, 390, 7, 390, 2, 391, 7, 391, 2, 392, 7, 392, 2, 393, 7, 393, 2, 394, 7, 394, 2, 395, 7, 395, 2, 396, 7, 396, 2, 397, 7, 397, 2, 398, 7, 398, 2, 399, 7, 399, 2, 400, 7, 400, 2, 401, 7, 401, 2, 402, 7, 402, 2, 403, 7, 403, 2, 404, 7, 404, 2, 405, 7, 405, 2, 406, 7, 406, 2, 407, 7, 407, 2, 408, 7, 408, 2, 409, 7, 409, 2, 410, 7, 410, 2, 411, 7, 411, 2, 412, 7, 412, 2, 413, 7, 413, 2, 414, 7, 414, 2, 415, 7, 415, 2, 416, 7, 416, 2, 417, 7, 417, 2, 418, 7, 418, 2, 419, 7, 419, 2, 420, 7, 420, 2, 421, 7, 421, 2, 422, 7, 422, 2, 423, 7, 423, 2, 424, 7, 424, 2, 425, 7, 425, 2, 426, 7, 426, 2, 427, 7, 427, 2, 428, 7, 428, 2, 429, 7, 429, 2, 430, 7, 430, 2, 431, 7, 431, 2, 432, 7, 432, 2, 433, 7, 433, 2, 434, 7, 434, 2, 435, 7, 435, 2, 436, 7, 436, 2, 437, 7, 437, 2, 438, 7, 438, 2, 439, 7, 439, 2, 440, 7, 440, 2, 441, 7, 441, 2, 442, 7, 442, 2, 443, 7, 443, 2, 444, 7, 444, 2, 445, 7, 445, 2, 446, 7, 446, 2, 447, 7, 447, 2, 448, 7, 448, 2, 449, 7, 449, 2, 450, 7, 450, 2, 451, 7, 451, 2, 452, 7, 452, 2, 453, 7, 453, 2, 454, 7, 454, 2, 455, 7, 455, 2, 456, 7, 456, 2, 457, 7, 457, 2, 458, 7, 458, 2, 459, 7, 459, 2, 460, 7, 460, 2, 461, 7, 461, 2, 462, 7, 462, 2, 463, 7, 463, 2, 464, 7, 464, 2, 465, 7, 465, 2, 466, 7, 466, 2, 467, 7, 467, 2, 468, 7, 468, 2, 469, 7, 469, 2, 470, 7, 470, 1, 0, 4, 0, 945, 8, 0, 11, 0, 12, 0, 946, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 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, 5, 1, 5, 1, 5, 1, 5, 1, 5, 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, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 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, 12, 1, 12, 1, 12, 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, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 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, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 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, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 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, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 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, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 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, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 167, 1, 167, 1, 168, 1, 168, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 177, 1, 177, 1, 178, 1, 178, 1, 179, 1, 179, 1, 180, 1, 180, 1, 181, 1, 181, 1, 182, 1, 182, 1, 183, 1, 183, 1, 184, 1, 184, 1, 185, 1, 185, 1, 186, 1, 186, 1, 187, 1, 187, 1, 188, 1, 188, 1, 189, 1, 189, 1, 190, 1, 190, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 194, 1, 194, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 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, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 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, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 257, 4, 257, 2879, 8, 257, 11, 257, 12, 257, 2880, 1, 257, 1, 257, 4, 257, 2885, 8, 257, 11, 257, 12, 257, 2886, 3, 257, 2889, 8, 257, 3, 257, 2891, 8, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 3, 257, 2899, 8, 257, 1, 257, 4, 257, 2902, 8, 257, 11, 257, 12, 257, 2903, 1, 257, 1, 257, 4, 257, 2908, 8, 257, 11, 257, 12, 257, 2909, 3, 257, 2912, 8, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 260, 1, 260, 1, 260, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 277, 1, 277, 1, 277, 1, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 314, 1, 314, 1, 314, 1, 314, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, 1, 321, 1, 322, 1, 322, 1, 322, 1, 322, 1, 322, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, 1, 332, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 1, 343, 1, 343, 1, 343, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 348, 1, 348, 1, 348, 1, 348, 1, 348, 1, 348, 1, 348, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 350, 1, 350, 1, 350, 1, 350, 1, 350, 1, 350, 1, 351, 1, 351, 1, 351, 1, 351, 1, 351, 1, 352, 1, 352, 1, 352, 1, 352, 1, 352, 1, 352, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 361, 1, 361, 1, 361, 1, 361, 1, 361, 1, 361, 1, 361, 1, 361, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 364, 1, 365, 1, 365, 1, 365, 1, 365, 1, 365, 1, 365, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 1, 367, 1, 367, 1, 367, 1, 367, 1, 367, 1, 367, 1, 367, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 372, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 375, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 376, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 377, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 380, 1, 381, 1, 381, 1, 381, 1, 381, 1, 381, 1, 381, 1, 381, 1, 381, 1, 381, 1, 381, 1, 381, 1, 381, 1, 382, 1, 382, 1, 382, 1, 382, 1, 382, 1, 382, 1, 382, 1, 382, 1, 382, 1, 382, 1, 382, 1, 382, 1, 383, 1, 383, 1, 383, 1, 383, 1, 383, 1, 383, 1, 383, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 384, 1, 385, 1, 385, 1, 385, 1, 386, 1, 386, 1, 386, 1, 386, 1, 386, 1, 386, 1, 386, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 388, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 390, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 392, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 393, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 394, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 395, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 397, 1, 397, 1, 397, 1, 397, 1, 397, 1, 397, 1, 397, 1, 397, 1, 397, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 398, 1, 399, 1, 399, 1, 399, 1, 399, 1, 399, 1, 399, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 400, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 404, 1, 404, 1, 404, 1, 404, 1, 404, 1, 404, 1, 404, 1, 405, 1, 405, 1, 405, 1, 405, 1, 405, 1, 405, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 406, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 411, 1, 411, 1, 411, 1, 411, 1, 411, 1, 411, 1, 411, 1, 411, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 414, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 1, 417, 1, 417, 1, 417, 1, 417, 1, 417, 1, 417, 1, 417, 1, 417, 1, 417, 1, 417, 1, 417, 1, 417, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 418, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 419, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 421, 1, 422, 1, 422, 1, 422, 1, 422, 1, 422, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 424, 1, 424, 1, 424, 1, 424, 1, 424, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 425, 1, 426, 1, 426, 1, 426, 1, 426, 1, 426, 1, 427, 1, 427, 1, 427, 1, 427, 1, 427, 1, 428, 1, 428, 1, 428, 1, 428, 1, 428, 1, 428, 1, 428, 1, 428, 1, 429, 1, 429, 1, 429, 1, 429, 1, 429, 1, 429, 1, 430, 1, 430, 1, 430, 1, 430, 1, 431, 1, 431, 1, 431, 1, 431, 1, 431, 1, 431, 1, 431, 1, 431, 1, 431, 1, 431, 1, 432, 1, 432, 1, 432, 1, 433, 1, 433, 1, 434, 1, 434, 1, 435, 1, 435, 1, 436, 1, 436, 1, 437, 1, 437, 1, 438, 1, 438, 1, 439, 1, 439, 1, 439, 1, 439, 1, 440, 1, 440, 1, 440, 1, 440, 1, 440, 1, 441, 1, 441, 1, 441, 1, 441, 1, 441, 1, 441, 1, 441, 1, 441, 1, 442, 1, 442, 1, 442, 1, 442, 1, 442, 1, 443, 1, 443, 1, 443, 1, 443, 1, 443, 1, 443, 1, 443, 1, 443, 1, 444, 1, 444, 1, 444, 1, 445, 1, 445, 1, 445, 1, 445, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 446, 1, 447, 1, 447, 1, 447, 1, 447, 1, 447, 1, 448, 1, 448, 1, 448, 1, 448, 1, 449, 1, 449, 1, 449, 1, 449, 1, 449, 1, 449, 1, 449, 1, 450, 1, 450, 1, 450, 1, 451, 1, 451, 1, 451, 1, 452, 1, 452, 1, 452, 1, 453, 1, 453, 1, 453, 3, 453, 4697, 8, 453, 1, 453, 1, 453, 1, 453, 3, 453, 4702, 8, 453, 3, 453, 4704, 8, 453, 1, 454, 1, 454, 1, 455, 1, 455, 1, 456, 4, 456, 4711, 8, 456, 11, 456, 12, 456, 4712, 1, 457, 4, 457, 4716, 8, 457, 11, 457, 12, 457, 4717, 3, 457, 4720, 8, 457, 1, 457, 1, 457, 4, 457, 4724, 8, 457, 11, 457, 12, 457, 4725, 1, 458, 4, 458, 4729, 8, 458, 11, 458, 12, 458, 4730, 3, 458, 4733, 8, 458, 1, 458, 1, 458, 4, 458, 4737, 8, 458, 11, 458, 12, 458, 4738, 1, 458, 1, 458, 1, 459, 4, 459, 4744, 8, 459, 11, 459, 12, 459, 4745, 3, 459, 4748, 8, 459, 1, 459, 1, 459, 4, 459, 4752, 8, 459, 11, 459, 12, 459, 4753, 1, 459, 1, 459, 1, 460, 1, 460, 4, 460, 4760, 8, 460, 11, 460, 12, 460, 4761, 4, 460, 4764, 8, 460, 11, 460, 12, 460, 4765, 1, 461, 4, 461, 4769, 8, 461, 11, 461, 12, 461, 4770, 1, 461, 5, 461, 4774, 8, 461, 10, 461, 12, 461, 4777, 9, 461, 1, 461, 1, 461, 1, 462, 3, 462, 4782, 8, 462, 1, 462, 1, 462, 1, 462, 1, 463, 1, 463, 1, 463, 1, 463, 1, 463, 1, 463, 5, 463, 4793, 8, 463, 10, 463, 12, 463, 4796, 9, 463, 1, 463, 1, 463, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 1, 464, 5, 464, 4806, 8, 464, 10, 464, 12, 464, 4809, 9, 464, 1, 464, 1, 464, 1, 465, 1, 465, 1, 465, 1, 465, 1, 465, 1, 465, 5, 465, 4819, 8, 465, 10, 465, 12, 465, 4822, 9, 465, 1, 465, 1, 465, 1, 466, 1, 466, 1, 467, 4, 467, 4829, 8, 467, 11, 467, 12, 467, 4830, 1, 467, 5, 467, 4834, 8, 467, 10, 467, 12, 467, 4837, 9, 467, 1, 468, 1, 468, 1, 468, 1, 468, 1, 468, 1, 468, 5, 468, 4845, 8, 468, 10, 468, 12, 468, 4848, 9, 468, 1, 468, 3, 468, 4851, 8, 468, 1, 468, 3, 468, 4854, 8, 468, 1, 468, 1, 468, 1, 469, 1, 469, 1, 469, 1, 469, 5, 469, 4862, 8, 469, 10, 469, 12, 469, 4865, 9, 469, 1, 469, 1, 469, 1, 469, 1, 469, 1, 469, 1, 470, 1, 470, 1, 470, 1, 470, 3, 4770, 4830, 4863, 0, 471, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 246, 493, 247, 495, 248, 497, 249, 499, 250, 501, 251, 503, 252, 505, 253, 507, 254, 509, 255, 511, 256, 513, 257, 515, 258, 517, 259, 519, 260, 521, 261, 523, 262, 525, 263, 527, 264, 529, 265, 531, 266, 533, 267, 535, 268, 537, 269, 539, 270, 541, 271, 543, 272, 545, 273, 547, 274, 549, 275, 551, 276, 553, 277, 555, 278, 557, 279, 559, 280, 561, 281, 563, 282, 565, 283, 567, 284, 569, 285, 571, 286, 573, 287, 575, 288, 577, 289, 579, 290, 581, 291, 583, 292, 585, 293, 587, 294, 589, 295, 591, 296, 593, 297, 595, 298, 597, 299, 599, 300, 601, 301, 603, 302, 605, 303, 607, 304, 609, 305, 611, 306, 613, 307, 615, 308, 617, 309, 619, 310, 621, 311, 623, 312, 625, 313, 627, 314, 629, 315, 631, 316, 633, 317, 635, 318, 637, 319, 639, 320, 641, 321, 643, 322, 645, 323, 647, 324, 649, 325, 651, 326, 653, 327, 655, 328, 657, 329, 659, 330, 661, 331, 663, 332, 665, 333, 667, 334, 669, 335, 671, 336, 673, 337, 675, 338, 677, 339, 679, 340, 681, 341, 683, 342, 685, 343, 687, 344, 689, 345, 691, 346, 693, 347, 695, 348, 697, 349, 699, 350, 701, 351, 703, 352, 705, 353, 707, 354, 709, 355, 711, 356, 713, 357, 715, 358, 717, 359, 719, 360, 721, 361, 723, 362, 725, 363, 727, 364, 729, 365, 731, 366, 733, 367, 735, 368, 737, 369, 739, 370, 741, 371, 743, 372, 745, 373, 747, 374, 749, 375, 751, 376, 753, 377, 755, 378, 757, 379, 759, 380, 761, 381, 763, 382, 765, 383, 767, 384, 769, 385, 771, 386, 773, 387, 775, 388, 777, 389, 779, 390, 781, 391, 783, 392, 785, 393, 787, 394, 789, 395, 791, 396, 793, 397, 795, 398, 797, 399, 799, 400, 801, 401, 803, 402, 805, 403, 807, 404, 809, 405, 811, 406, 813, 407, 815, 408, 817, 409, 819, 410, 821, 411, 823, 412, 825, 413, 827, 414, 829, 415, 831, 416, 833, 417, 835, 418, 837, 419, 839, 420, 841, 421, 843, 422, 845, 423, 847, 424, 849, 425, 851, 426, 853, 427, 855, 428, 857, 429, 859, 430, 861, 431, 863, 432, 865, 433, 867, 434, 869, 435, 871, 436, 873, 437, 875, 438, 877, 439, 879, 440, 881, 441, 883, 442, 885, 443, 887, 444, 889, 445, 891, 446, 893, 447, 895, 448, 897, 449, 899, 450, 901, 451, 903, 452, 905, 453, 907, 454, 909, 455, 911, 456, 913, 457, 915, 458, 917, 459, 919, 460, 921, 0, 923, 0, 925, 461, 927, 462, 929, 463, 931, 464, 933, 0, 935, 0, 937, 465, 939, 466, 941, 467, 1, 0, 37, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 83, 83, 115, 115, 2, 0, 69, 69, 101, 101, 2, 0, 65, 65, 97, 97, 2, 0, 82, 82, 114, 114, 2, 0, 67, 67, 99, 99, 2, 0, 72, 72, 104, 104, 2, 0, 68, 68, 100, 100, 2, 0, 73, 73, 105, 105, 2, 0, 66, 66, 98, 98, 2, 0, 79, 79, 111, 111, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 80, 80, 112, 112, 2, 0, 76, 76, 108, 108, 2, 0, 78, 78, 110, 110, 2, 0, 70, 70, 102, 102, 2, 0, 77, 77, 109, 109, 2, 0, 84, 84, 116, 116, 2, 0, 86, 86, 118, 118, 2, 0, 85, 85, 117, 117, 2, 0, 71, 71, 103, 103, 2, 0, 75, 75, 107, 107, 2, 0, 81, 81, 113, 113, 2, 0, 89, 89, 121, 121, 2, 0, 74, 74, 106, 106, 2, 0, 90, 90, 122, 122, 1, 0, 48, 57, 1, 0, 45, 46, 2, 0, 42, 42, 48, 57, 3, 0, 42, 42, 65, 90, 97, 122, 6, 0, 42, 42, 45, 45, 48, 57, 65, 90, 95, 95, 97, 122, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 92, 92, 96, 96, 4, 0, 42, 42, 64, 90, 95, 95, 97, 122, 2, 0, 10, 10, 13, 13, 4913, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 0, 545, 1, 0, 0, 0, 0, 547, 1, 0, 0, 0, 0, 549, 1, 0, 0, 0, 0, 551, 1, 0, 0, 0, 0, 553, 1, 0, 0, 0, 0, 555, 1, 0, 0, 0, 0, 557, 1, 0, 0, 0, 0, 559, 1, 0, 0, 0, 0, 561, 1, 0, 0, 0, 0, 563, 1, 0, 0, 0, 0, 565, 1, 0, 0, 0, 0, 567, 1, 0, 0, 0, 0, 569, 1, 0, 0, 0, 0, 571, 1, 0, 0, 0, 0, 573, 1, 0, 0, 0, 0, 575, 1, 0, 0, 0, 0, 577, 1, 0, 0, 0, 0, 579, 1, 0, 0, 0, 0, 581, 1, 0, 0, 0, 0, 583, 1, 0, 0, 0, 0, 585, 1, 0, 0, 0, 0, 587, 1, 0, 0, 0, 0, 589, 1, 0, 0, 0, 0, 591, 1, 0, 0, 0, 0, 593, 1, 0, 0, 0, 0, 595, 1, 0, 0, 0, 0, 597, 1, 0, 0, 0, 0, 599, 1, 0, 0, 0, 0, 601, 1, 0, 0, 0, 0, 603, 1, 0, 0, 0, 0, 605, 1, 0, 0, 0, 0, 607, 1, 0, 0, 0, 0, 609, 1, 0, 0, 0, 0, 611, 1, 0, 0, 0, 0, 613, 1, 0, 0, 0, 0, 615, 1, 0, 0, 0, 0, 617, 1, 0, 0, 0, 0, 619, 1, 0, 0, 0, 0, 621, 1, 0, 0, 0, 0, 623, 1, 0, 0, 0, 0, 625, 1, 0, 0, 0, 0, 627, 1, 0, 0, 0, 0, 629, 1, 0, 0, 0, 0, 631, 1, 0, 0, 0, 0, 633, 1, 0, 0, 0, 0, 635, 1, 0, 0, 0, 0, 637, 1, 0, 0, 0, 0, 639, 1, 0, 0, 0, 0, 641, 1, 0, 0, 0, 0, 643, 1, 0, 0, 0, 0, 645, 1, 0, 0, 0, 0, 647, 1, 0, 0, 0, 0, 649, 1, 0, 0, 0, 0, 651, 1, 0, 0, 0, 0, 653, 1, 0, 0, 0, 0, 655, 1, 0, 0, 0, 0, 657, 1, 0, 0, 0, 0, 659, 1, 0, 0, 0, 0, 661, 1, 0, 0, 0, 0, 663, 1, 0, 0, 0, 0, 665, 1, 0, 0, 0, 0, 667, 1, 0, 0, 0, 0, 669, 1, 0, 0, 0, 0, 671, 1, 0, 0, 0, 0, 673, 1, 0, 0, 0, 0, 675, 1, 0, 0, 0, 0, 677, 1, 0, 0, 0, 0, 679, 1, 0, 0, 0, 0, 681, 1, 0, 0, 0, 0, 683, 1, 0, 0, 0, 0, 685, 1, 0, 0, 0, 0, 687, 1, 0, 0, 0, 0, 689, 1, 0, 0, 0, 0, 691, 1, 0, 0, 0, 0, 693, 1, 0, 0, 0, 0, 695, 1, 0, 0, 0, 0, 697, 1, 0, 0, 0, 0, 699, 1, 0, 0, 0, 0, 701, 1, 0, 0, 0, 0, 703, 1, 0, 0, 0, 0, 705, 1, 0, 0, 0, 0, 707, 1, 0, 0, 0, 0, 709, 1, 0, 0, 0, 0, 711, 1, 0, 0, 0, 0, 713, 1, 0, 0, 0, 0, 715, 1, 0, 0, 0, 0, 717, 1, 0, 0, 0, 0, 719, 1, 0, 0, 0, 0, 721, 1, 0, 0, 0, 0, 723, 1, 0, 0, 0, 0, 725, 1, 0, 0, 0, 0, 727, 1, 0, 0, 0, 0, 729, 1, 0, 0, 0, 0, 731, 1, 0, 0, 0, 0, 733, 1, 0, 0, 0, 0, 735, 1, 0, 0, 0, 0, 737, 1, 0, 0, 0, 0, 739, 1, 0, 0, 0, 0, 741, 1, 0, 0, 0, 0, 743, 1, 0, 0, 0, 0, 745, 1, 0, 0, 0, 0, 747, 1, 0, 0, 0, 0, 749, 1, 0, 0, 0, 0, 751, 1, 0, 0, 0, 0, 753, 1, 0, 0, 0, 0, 755, 1, 0, 0, 0, 0, 757, 1, 0, 0, 0, 0, 759, 1, 0, 0, 0, 0, 761, 1, 0, 0, 0, 0, 763, 1, 0, 0, 0, 0, 765, 1, 0, 0, 0, 0, 767, 1, 0, 0, 0, 0, 769, 1, 0, 0, 0, 0, 771, 1, 0, 0, 0, 0, 773, 1, 0, 0, 0, 0, 775, 1, 0, 0, 0, 0, 777, 1, 0, 0, 0, 0, 779, 1, 0, 0, 0, 0, 781, 1, 0, 0, 0, 0, 783, 1, 0, 0, 0, 0, 785, 1, 0, 0, 0, 0, 787, 1, 0, 0, 0, 0, 789, 1, 0, 0, 0, 0, 791, 1, 0, 0, 0, 0, 793, 1, 0, 0, 0, 0, 795, 1, 0, 0, 0, 0, 797, 1, 0, 0, 0, 0, 799, 1, 0, 0, 0, 0, 801, 1, 0, 0, 0, 0, 803, 1, 0, 0, 0, 0, 805, 1, 0, 0, 0, 0, 807, 1, 0, 0, 0, 0, 809, 1, 0, 0, 0, 0, 811, 1, 0, 0, 0, 0, 813, 1, 0, 0, 0, 0, 815, 1, 0, 0, 0, 0, 817, 1, 0, 0, 0, 0, 819, 1, 0, 0, 0, 0, 821, 1, 0, 0, 0, 0, 823, 1, 0, 0, 0, 0, 825, 1, 0, 0, 0, 0, 827, 1, 0, 0, 0, 0, 829, 1, 0, 0, 0, 0, 831, 1, 0, 0, 0, 0, 833, 1, 0, 0, 0, 0, 835, 1, 0, 0, 0, 0, 837, 1, 0, 0, 0, 0, 839, 1, 0, 0, 0, 0, 841, 1, 0, 0, 0, 0, 843, 1, 0, 0, 0, 0, 845, 1, 0, 0, 0, 0, 847, 1, 0, 0, 0, 0, 849, 1, 0, 0, 0, 0, 851, 1, 0, 0, 0, 0, 853, 1, 0, 0, 0, 0, 855, 1, 0, 0, 0, 0, 857, 1, 0, 0, 0, 0, 859, 1, 0, 0, 0, 0, 861, 1, 0, 0, 0, 0, 863, 1, 0, 0, 0, 0, 865, 1, 0, 0, 0, 0, 867, 1, 0, 0, 0, 0, 869, 1, 0, 0, 0, 0, 871, 1, 0, 0, 0, 0, 873, 1, 0, 0, 0, 0, 875, 1, 0, 0, 0, 0, 877, 1, 0, 0, 0, 0, 879, 1, 0, 0, 0, 0, 881, 1, 0, 0, 0, 0, 883, 1, 0, 0, 0, 0, 885, 1, 0, 0, 0, 0, 887, 1, 0, 0, 0, 0, 889, 1, 0, 0, 0, 0, 891, 1, 0, 0, 0, 0, 893, 1, 0, 0, 0, 0, 895, 1, 0, 0, 0, 0, 897, 1, 0, 0, 0, 0, 899, 1, 0, 0, 0, 0, 901, 1, 0, 0, 0, 0, 903, 1, 0, 0, 0, 0, 905, 1, 0, 0, 0, 0, 907, 1, 0, 0, 0, 0, 909, 1, 0, 0, 0, 0, 911, 1, 0, 0, 0, 0, 913, 1, 0, 0, 0, 0, 915, 1, 0, 0, 0, 0, 917, 1, 0, 0, 0, 0, 919, 1, 0, 0, 0, 0, 925, 1, 0, 0, 0, 0, 927, 1, 0, 0, 0, 0, 929, 1, 0, 0, 0, 0, 931, 1, 0, 0, 0, 0, 937, 1, 0, 0, 0, 0, 939, 1, 0, 0, 0, 0, 941, 1, 0, 0, 0, 1, 944, 1, 0, 0, 0, 3, 950, 1, 0, 0, 0, 5, 957, 1, 0, 0, 0, 7, 966, 1, 0, 0, 0, 9, 971, 1, 0, 0, 0, 11, 979, 1, 0, 0, 0, 13, 984, 1, 0, 0, 0, 15, 990, 1, 0, 0, 0, 17, 997, 1, 0, 0, 0, 19, 1003, 1, 0, 0, 0, 21, 1009, 1, 0, 0, 0, 23, 1016, 1, 0, 0, 0, 25, 1022, 1, 0, 0, 0, 27, 1033, 1, 0, 0, 0, 29, 1039, 1, 0, 0, 0, 31, 1044, 1, 0, 0, 0, 33, 1049, 1, 0, 0, 0, 35, 1054, 1, 0, 0, 0, 37, 1058, 1, 0, 0, 0, 39, 1062, 1, 0, 0, 0, 41, 1067, 1, 0, 0, 0, 43, 1073, 1, 0, 0, 0, 45, 1079, 1, 0, 0, 0, 47, 1085, 1, 0, 0, 0, 49, 1089, 1, 0, 0, 0, 51, 1093, 1, 0, 0, 0, 53, 1099, 1, 0, 0, 0, 55, 1104, 1, 0, 0, 0, 57, 1112, 1, 0, 0, 0, 59, 1121, 1, 0, 0, 0, 61, 1131, 1, 0, 0, 0, 63, 1138, 1, 0, 0, 0, 65, 1141, 1, 0, 0, 0, 67, 1144, 1, 0, 0, 0, 69, 1153, 1, 0, 0, 0, 71, 1161, 1, 0, 0, 0, 73, 1171, 1, 0, 0, 0, 75, 1181, 1, 0, 0, 0, 77, 1191, 1, 0, 0, 0, 79, 1198, 1, 0, 0, 0, 81, 1213, 1, 0, 0, 0, 83, 1219, 1, 0, 0, 0, 85, 1244, 1, 0, 0, 0, 87, 1275, 1, 0, 0, 0, 89, 1282, 1, 0, 0, 0, 91, 1299, 1, 0, 0, 0, 93, 1309, 1, 0, 0, 0, 95, 1322, 1, 0, 0, 0, 97, 1335, 1, 0, 0, 0, 99, 1341, 1, 0, 0, 0, 101, 1353, 1, 0, 0, 0, 103, 1358, 1, 0, 0, 0, 105, 1361, 1, 0, 0, 0, 107, 1367, 1, 0, 0, 0, 109, 1373, 1, 0, 0, 0, 111, 1378, 1, 0, 0, 0, 113, 1383, 1, 0, 0, 0, 115, 1388, 1, 0, 0, 0, 117, 1394, 1, 0, 0, 0, 119, 1404, 1, 0, 0, 0, 121, 1415, 1, 0, 0, 0, 123, 1418, 1, 0, 0, 0, 125, 1421, 1, 0, 0, 0, 127, 1428, 1, 0, 0, 0, 129, 1434, 1, 0, 0, 0, 131, 1436, 1, 0, 0, 0, 133, 1440, 1, 0, 0, 0, 135, 1442, 1, 0, 0, 0, 137, 1447, 1, 0, 0, 0, 139, 1459, 1, 0, 0, 0, 141, 1465, 1, 0, 0, 0, 143, 1470, 1, 0, 0, 0, 145, 1477, 1, 0, 0, 0, 147, 1486, 1, 0, 0, 0, 149, 1491, 1, 0, 0, 0, 151, 1500, 1, 0, 0, 0, 153, 1509, 1, 0, 0, 0, 155, 1519, 1, 0, 0, 0, 157, 1524, 1, 0, 0, 0, 159, 1528, 1, 0, 0, 0, 161, 1532, 1, 0, 0, 0, 163, 1536, 1, 0, 0, 0, 165, 1540, 1, 0, 0, 0, 167, 1550, 1, 0, 0, 0, 169, 1562, 1, 0, 0, 0, 171, 1580, 1, 0, 0, 0, 173, 1591, 1, 0, 0, 0, 175, 1598, 1, 0, 0, 0, 177, 1604, 1, 0, 0, 0, 179, 1620, 1, 0, 0, 0, 181, 1630, 1, 0, 0, 0, 183, 1641, 1, 0, 0, 0, 185, 1655, 1, 0, 0, 0, 187, 1671, 1, 0, 0, 0, 189, 1684, 1, 0, 0, 0, 191, 1696, 1, 0, 0, 0, 193, 1709, 1, 0, 0, 0, 195, 1720, 1, 0, 0, 0, 197, 1733, 1, 0, 0, 0, 199, 1748, 1, 0, 0, 0, 201, 1759, 1, 0, 0, 0, 203, 1769, 1, 0, 0, 0, 205, 1788, 1, 0, 0, 0, 207, 1812, 1, 0, 0, 0, 209, 1819, 1, 0, 0, 0, 211, 1830, 1, 0, 0, 0, 213, 1840, 1, 0, 0, 0, 215, 1846, 1, 0, 0, 0, 217, 1855, 1, 0, 0, 0, 219, 1861, 1, 0, 0, 0, 221, 1868, 1, 0, 0, 0, 223, 1873, 1, 0, 0, 0, 225, 1878, 1, 0, 0, 0, 227, 1883, 1, 0, 0, 0, 229, 1886, 1, 0, 0, 0, 231, 1893, 1, 0, 0, 0, 233, 1899, 1, 0, 0, 0, 235, 1903, 1, 0, 0, 0, 237, 1906, 1, 0, 0, 0, 239, 1910, 1, 0, 0, 0, 241, 1914, 1, 0, 0, 0, 243, 1919, 1, 0, 0, 0, 245, 1925, 1, 0, 0, 0, 247, 1932, 1, 0, 0, 0, 249, 1944, 1, 0, 0, 0, 251, 1955, 1, 0, 0, 0, 253, 1964, 1, 0, 0, 0, 255, 1968, 1, 0, 0, 0, 257, 1977, 1, 0, 0, 0, 259, 1993, 1, 0, 0, 0, 261, 2004, 1, 0, 0, 0, 263, 2016, 1, 0, 0, 0, 265, 2027, 1, 0, 0, 0, 267, 2032, 1, 0, 0, 0, 269, 2049, 1, 0, 0, 0, 271, 2061, 1, 0, 0, 0, 273, 2073, 1, 0, 0, 0, 275, 2085, 1, 0, 0, 0, 277, 2094, 1, 0, 0, 0, 279, 2106, 1, 0, 0, 0, 281, 2118, 1, 0, 0, 0, 283, 2125, 1, 0, 0, 0, 285, 2144, 1, 0, 0, 0, 287, 2158, 1, 0, 0, 0, 289, 2173, 1, 0, 0, 0, 291, 2187, 1, 0, 0, 0, 293, 2193, 1, 0, 0, 0, 295, 2207, 1, 0, 0, 0, 297, 2215, 1, 0, 0, 0, 299, 2222, 1, 0, 0, 0, 301, 2241, 1, 0, 0, 0, 303, 2258, 1, 0, 0, 0, 305, 2263, 1, 0, 0, 0, 307, 2276, 1, 0, 0, 0, 309, 2281, 1, 0, 0, 0, 311, 2292, 1, 0, 0, 0, 313, 2302, 1, 0, 0, 0, 315, 2309, 1, 0, 0, 0, 317, 2321, 1, 0, 0, 0, 319, 2325, 1, 0, 0, 0, 321, 2333, 1, 0, 0, 0, 323, 2340, 1, 0, 0, 0, 325, 2345, 1, 0, 0, 0, 327, 2351, 1, 0, 0, 0, 329, 2358, 1, 0, 0, 0, 331, 2366, 1, 0, 0, 0, 333, 2369, 1, 0, 0, 0, 335, 2371, 1, 0, 0, 0, 337, 2373, 1, 0, 0, 0, 339, 2375, 1, 0, 0, 0, 341, 2377, 1, 0, 0, 0, 343, 2380, 1, 0, 0, 0, 345, 2382, 1, 0, 0, 0, 347, 2384, 1, 0, 0, 0, 349, 2387, 1, 0, 0, 0, 351, 2390, 1, 0, 0, 0, 353, 2393, 1, 0, 0, 0, 355, 2395, 1, 0, 0, 0, 357, 2397, 1, 0, 0, 0, 359, 2399, 1, 0, 0, 0, 361, 2401, 1, 0, 0, 0, 363, 2403, 1, 0, 0, 0, 365, 2405, 1, 0, 0, 0, 367, 2407, 1, 0, 0, 0, 369, 2409, 1, 0, 0, 0, 371, 2411, 1, 0, 0, 0, 373, 2413, 1, 0, 0, 0, 375, 2415, 1, 0, 0, 0, 377, 2417, 1, 0, 0, 0, 379, 2419, 1, 0, 0, 0, 381, 2421, 1, 0, 0, 0, 383, 2423, 1, 0, 0, 0, 385, 2425, 1, 0, 0, 0, 387, 2428, 1, 0, 0, 0, 389, 2430, 1, 0, 0, 0, 391, 2432, 1, 0, 0, 0, 393, 2434, 1, 0, 0, 0, 395, 2438, 1, 0, 0, 0, 397, 2444, 1, 0, 0, 0, 399, 2459, 1, 0, 0, 0, 401, 2481, 1, 0, 0, 0, 403, 2487, 1, 0, 0, 0, 405, 2499, 1, 0, 0, 0, 407, 2503, 1, 0, 0, 0, 409, 2508, 1, 0, 0, 0, 411, 2515, 1, 0, 0, 0, 413, 2519, 1, 0, 0, 0, 415, 2524, 1, 0, 0, 0, 417, 2530, 1, 0, 0, 0, 419, 2536, 1, 0, 0, 0, 421, 2543, 1, 0, 0, 0, 423, 2547, 1, 0, 0, 0, 425, 2553, 1, 0, 0, 0, 427, 2562, 1, 0, 0, 0, 429, 2570, 1, 0, 0, 0, 431, 2582, 1, 0, 0, 0, 433, 2593, 1, 0, 0, 0, 435, 2598, 1, 0, 0, 0, 437, 2609, 1, 0, 0, 0, 439, 2627, 1, 0, 0, 0, 441, 2636, 1, 0, 0, 0, 443, 2643, 1, 0, 0, 0, 445, 2648, 1, 0, 0, 0, 447, 2653, 1, 0, 0, 0, 449, 2660, 1, 0, 0, 0, 451, 2668, 1, 0, 0, 0, 453, 2677, 1, 0, 0, 0, 455, 2688, 1, 0, 0, 0, 457, 2699, 1, 0, 0, 0, 459, 2704, 1, 0, 0, 0, 461, 2714, 1, 0, 0, 0, 463, 2716, 1, 0, 0, 0, 465, 2719, 1, 0, 0, 0, 467, 2730, 1, 0, 0, 0, 469, 2735, 1, 0, 0, 0, 471, 2746, 1, 0, 0, 0, 473, 2759, 1, 0, 0, 0, 475, 2769, 1, 0, 0, 0, 477, 2775, 1, 0, 0, 0, 479, 2780, 1, 0, 0, 0, 481, 2784, 1, 0, 0, 0, 483, 2790, 1, 0, 0, 0, 485, 2794, 1, 0, 0, 0, 487, 2803, 1, 0, 0, 0, 489, 2812, 1, 0, 0, 0, 491, 2819, 1, 0, 0, 0, 493, 2823, 1, 0, 0, 0, 495, 2828, 1, 0, 0, 0, 497, 2833, 1, 0, 0, 0, 499, 2841, 1, 0, 0, 0, 501, 2846, 1, 0, 0, 0, 503, 2852, 1, 0, 0, 0, 505, 2854, 1, 0, 0, 0, 507, 2858, 1, 0, 0, 0, 509, 2864, 1, 0, 0, 0, 511, 2870, 1, 0, 0, 0, 513, 2873, 1, 0, 0, 0, 515, 2890, 1, 0, 0, 0, 517, 2913, 1, 0, 0, 0, 519, 2917, 1, 0, 0, 0, 521, 2925, 1, 0, 0, 0, 523, 2928, 1, 0, 0, 0, 525, 2937, 1, 0, 0, 0, 527, 2941, 1, 0, 0, 0, 529, 2947, 1, 0, 0, 0, 531, 2952, 1, 0, 0, 0, 533, 2958, 1, 0, 0, 0, 535, 2963, 1, 0, 0, 0, 537, 2968, 1, 0, 0, 0, 539, 2977, 1, 0, 0, 0, 541, 2982, 1, 0, 0, 0, 543, 2989, 1, 0, 0, 0, 545, 2994, 1, 0, 0, 0, 547, 2999, 1, 0, 0, 0, 549, 3004, 1, 0, 0, 0, 551, 3010, 1, 0, 0, 0, 553, 3014, 1, 0, 0, 0, 555, 3019, 1, 0, 0, 0, 557, 3023, 1, 0, 0, 0, 559, 3031, 1, 0, 0, 0, 561, 3039, 1, 0, 0, 0, 563, 3043, 1, 0, 0, 0, 565, 3048, 1, 0, 0, 0, 567, 3052, 1, 0, 0, 0, 569, 3056, 1, 0, 0, 0, 571, 3061, 1, 0, 0, 0, 573, 3066, 1, 0, 0, 0, 575, 3074, 1, 0, 0, 0, 577, 3082, 1, 0, 0, 0, 579, 3090, 1, 0, 0, 0, 581, 3103, 1, 0, 0, 0, 583, 3116, 1, 0, 0, 0, 585, 3134, 1, 0, 0, 0, 587, 3142, 1, 0, 0, 0, 589, 3147, 1, 0, 0, 0, 591, 3156, 1, 0, 0, 0, 593, 3165, 1, 0, 0, 0, 595, 3177, 1, 0, 0, 0, 597, 3186, 1, 0, 0, 0, 599, 3194, 1, 0, 0, 0, 601, 3205, 1, 0, 0, 0, 603, 3215, 1, 0, 0, 0, 605, 3225, 1, 0, 0, 0, 607, 3238, 1, 0, 0, 0, 609, 3250, 1, 0, 0, 0, 611, 3258, 1, 0, 0, 0, 613, 3268, 1, 0, 0, 0, 615, 3282, 1, 0, 0, 0, 617, 3293, 1, 0, 0, 0, 619, 3302, 1, 0, 0, 0, 621, 3312, 1, 0, 0, 0, 623, 3327, 1, 0, 0, 0, 625, 3336, 1, 0, 0, 0, 627, 3345, 1, 0, 0, 0, 629, 3355, 1, 0, 0, 0, 631, 3359, 1, 0, 0, 0, 633, 3370, 1, 0, 0, 0, 635, 3382, 1, 0, 0, 0, 637, 3394, 1, 0, 0, 0, 639, 3406, 1, 0, 0, 0, 641, 3414, 1, 0, 0, 0, 643, 3422, 1, 0, 0, 0, 645, 3430, 1, 0, 0, 0, 647, 3435, 1, 0, 0, 0, 649, 3444, 1, 0, 0, 0, 651, 3454, 1, 0, 0, 0, 653, 3467, 1, 0, 0, 0, 655, 3481, 1, 0, 0, 0, 657, 3493, 1, 0, 0, 0, 659, 3505, 1, 0, 0, 0, 661, 3513, 1, 0, 0, 0, 663, 3524, 1, 0, 0, 0, 665, 3539, 1, 0, 0, 0, 667, 3548, 1, 0, 0, 0, 669, 3557, 1, 0, 0, 0, 671, 3571, 1, 0, 0, 0, 673, 3579, 1, 0, 0, 0, 675, 3588, 1, 0, 0, 0, 677, 3597, 1, 0, 0, 0, 679, 3604, 1, 0, 0, 0, 681, 3614, 1, 0, 0, 0, 683, 3620, 1, 0, 0, 0, 685, 3626, 1, 0, 0, 0, 687, 3631, 1, 0, 0, 0, 689, 3634, 1, 0, 0, 0, 691, 3640, 1, 0, 0, 0, 693, 3646, 1, 0, 0, 0, 695, 3653, 1, 0, 0, 0, 697, 3663, 1, 0, 0, 0, 699, 3670, 1, 0, 0, 0, 701, 3677, 1, 0, 0, 0, 703, 3683, 1, 0, 0, 0, 705, 3688, 1, 0, 0, 0, 707, 3694, 1, 0, 0, 0, 709, 3701, 1, 0, 0, 0, 711, 3709, 1, 0, 0, 0, 713, 3717, 1, 0, 0, 0, 715, 3722, 1, 0, 0, 0, 717, 3727, 1, 0, 0, 0, 719, 3734, 1, 0, 0, 0, 721, 3744, 1, 0, 0, 0, 723, 3754, 1, 0, 0, 0, 725, 3762, 1, 0, 0, 0, 727, 3772, 1, 0, 0, 0, 729, 3780, 1, 0, 0, 0, 731, 3788, 1, 0, 0, 0, 733, 3794, 1, 0, 0, 0, 735, 3807, 1, 0, 0, 0, 737, 3814, 1, 0, 0, 0, 739, 3821, 1, 0, 0, 0, 741, 3828, 1, 0, 0, 0, 743, 3838, 1, 0, 0, 0, 745, 3845, 1, 0, 0, 0, 747, 3856, 1, 0, 0, 0, 749, 3861, 1, 0, 0, 0, 751, 3873, 1, 0, 0, 0, 753, 3884, 1, 0, 0, 0, 755, 3902, 1, 0, 0, 0, 757, 3915, 1, 0, 0, 0, 759, 3925, 1, 0, 0, 0, 761, 3934, 1, 0, 0, 0, 763, 3946, 1, 0, 0, 0, 765, 3958, 1, 0, 0, 0, 767, 3970, 1, 0, 0, 0, 769, 3977, 1, 0, 0, 0, 771, 3984, 1, 0, 0, 0, 773, 3987, 1, 0, 0, 0, 775, 3994, 1, 0, 0, 0, 777, 4003, 1, 0, 0, 0, 779, 4009, 1, 0, 0, 0, 781, 4022, 1, 0, 0, 0, 783, 4042, 1, 0, 0, 0, 785, 4060, 1, 0, 0, 0, 787, 4080, 1, 0, 0, 0, 789, 4092, 1, 0, 0, 0, 791, 4105, 1, 0, 0, 0, 793, 4128, 1, 0, 0, 0, 795, 4145, 1, 0, 0, 0, 797, 4154, 1, 0, 0, 0, 799, 4190, 1, 0, 0, 0, 801, 4196, 1, 0, 0, 0, 803, 4213, 1, 0, 0, 0, 805, 4227, 1, 0, 0, 0, 807, 4244, 1, 0, 0, 0, 809, 4271, 1, 0, 0, 0, 811, 4278, 1, 0, 0, 0, 813, 4284, 1, 0, 0, 0, 815, 4305, 1, 0, 0, 0, 817, 4325, 1, 0, 0, 0, 819, 4346, 1, 0, 0, 0, 821, 4360, 1, 0, 0, 0, 823, 4370, 1, 0, 0, 0, 825, 4378, 1, 0, 0, 0, 827, 4396, 1, 0, 0, 0, 829, 4420, 1, 0, 0, 0, 831, 4435, 1, 0, 0, 0, 833, 4456, 1, 0, 0, 0, 835, 4465, 1, 0, 0, 0, 837, 4477, 1, 0, 0, 0, 839, 4491, 1, 0, 0, 0, 841, 4506, 1, 0, 0, 0, 843, 4525, 1, 0, 0, 0, 845, 4533, 1, 0, 0, 0, 847, 4538, 1, 0, 0, 0, 849, 4550, 1, 0, 0, 0, 851, 4555, 1, 0, 0, 0, 853, 4572, 1, 0, 0, 0, 855, 4577, 1, 0, 0, 0, 857, 4582, 1, 0, 0, 0, 859, 4590, 1, 0, 0, 0, 861, 4596, 1, 0, 0, 0, 863, 4600, 1, 0, 0, 0, 865, 4610, 1, 0, 0, 0, 867, 4613, 1, 0, 0, 0, 869, 4615, 1, 0, 0, 0, 871, 4617, 1, 0, 0, 0, 873, 4619, 1, 0, 0, 0, 875, 4621, 1, 0, 0, 0, 877, 4623, 1, 0, 0, 0, 879, 4625, 1, 0, 0, 0, 881, 4629, 1, 0, 0, 0, 883, 4634, 1, 0, 0, 0, 885, 4642, 1, 0, 0, 0, 887, 4647, 1, 0, 0, 0, 889, 4655, 1, 0, 0, 0, 891, 4658, 1, 0, 0, 0, 893, 4662, 1, 0, 0, 0, 895, 4668, 1, 0, 0, 0, 897, 4673, 1, 0, 0, 0, 899, 4677, 1, 0, 0, 0, 901, 4684, 1, 0, 0, 0, 903, 4687, 1, 0, 0, 0, 905, 4690, 1, 0, 0, 0, 907, 4703, 1, 0, 0, 0, 909, 4705, 1, 0, 0, 0, 911, 4707, 1, 0, 0, 0, 913, 4710, 1, 0, 0, 0, 915, 4719, 1, 0, 0, 0, 917, 4732, 1, 0, 0, 0, 919, 4747, 1, 0, 0, 0, 921, 4763, 1, 0, 0, 0, 923, 4768, 1, 0, 0, 0, 925, 4781, 1, 0, 0, 0, 927, 4786, 1, 0, 0, 0, 929, 4799, 1, 0, 0, 0, 931, 4812, 1, 0, 0, 0, 933, 4825, 1, 0, 0, 0, 935, 4828, 1, 0, 0, 0, 937, 4838, 1, 0, 0, 0, 939, 4857, 1, 0, 0, 0, 941, 4871, 1, 0, 0, 0, 943, 945, 7, 0, 0, 0, 944, 943, 1, 0, 0, 0, 945, 946, 1, 0, 0, 0, 946, 944, 1, 0, 0, 0, 946, 947, 1, 0, 0, 0, 947, 948, 1, 0, 0, 0, 948, 949, 6, 0, 0, 0, 949, 2, 1, 0, 0, 0, 950, 951, 7, 1, 0, 0, 951, 952, 7, 2, 0, 0, 952, 953, 7, 3, 0, 0, 953, 954, 7, 4, 0, 0, 954, 955, 7, 5, 0, 0, 955, 956, 7, 6, 0, 0, 956, 4, 1, 0, 0, 0, 957, 958, 7, 7, 0, 0, 958, 959, 7, 2, 0, 0, 959, 960, 7, 1, 0, 0, 960, 961, 7, 5, 0, 0, 961, 962, 7, 4, 0, 0, 962, 963, 7, 8, 0, 0, 963, 964, 7, 9, 0, 0, 964, 965, 7, 2, 0, 0, 965, 6, 1, 0, 0, 0, 966, 967, 7, 1, 0, 0, 967, 968, 7, 6, 0, 0, 968, 969, 7, 10, 0, 0, 969, 970, 7, 11, 0, 0, 970, 8, 1, 0, 0, 0, 971, 972, 7, 2, 0, 0, 972, 973, 7, 12, 0, 0, 973, 974, 7, 13, 0, 0, 974, 975, 7, 14, 0, 0, 975, 976, 7, 3, 0, 0, 976, 977, 7, 8, 0, 0, 977, 978, 7, 15, 0, 0, 978, 10, 1, 0, 0, 0, 979, 980, 7, 16, 0, 0, 980, 981, 7, 4, 0, 0, 981, 982, 7, 10, 0, 0, 982, 983, 7, 17, 0, 0, 983, 12, 1, 0, 0, 0, 984, 985, 7, 11, 0, 0, 985, 986, 7, 6, 0, 0, 986, 987, 7, 2, 0, 0, 987, 988, 7, 4, 0, 0, 988, 989, 7, 2, 0, 0, 989, 14, 1, 0, 0, 0, 990, 991, 7, 16, 0, 0, 991, 992, 7, 8, 0, 0, 992, 993, 7, 2, 0, 0, 993, 994, 7, 14, 0, 0, 994, 995, 7, 7, 0, 0, 995, 996, 7, 1, 0, 0, 996, 16, 1, 0, 0, 0, 997, 998, 7, 16, 0, 0, 998, 999, 7, 8, 0, 0, 999, 1000, 7, 2, 0, 0, 1000, 1001, 7, 14, 0, 0, 1001, 1002, 7, 7, 0, 0, 1002, 18, 1, 0, 0, 0, 1003, 1004, 7, 18, 0, 0, 1004, 1005, 7, 3, 0, 0, 1005, 1006, 7, 9, 0, 0, 1006, 1007, 7, 14, 0, 0, 1007, 1008, 7, 2, 0, 0, 1008, 20, 1, 0, 0, 0, 1009, 1010, 7, 4, 0, 0, 1010, 1011, 7, 2, 0, 0, 1011, 1012, 7, 15, 0, 0, 1012, 1013, 7, 3, 0, 0, 1013, 1014, 7, 17, 0, 0, 1014, 1015, 7, 2, 0, 0, 1015, 22, 1, 0, 0, 0, 1016, 1017, 7, 1, 0, 0, 1017, 1018, 7, 18, 0, 0, 1018, 1019, 7, 3, 0, 0, 1019, 1020, 7, 18, 0, 0, 1020, 1021, 7, 1, 0, 0, 1021, 24, 1, 0, 0, 0, 1022, 1023, 7, 2, 0, 0, 1023, 1024, 7, 19, 0, 0, 1024, 1025, 7, 2, 0, 0, 1025, 1026, 7, 15, 0, 0, 1026, 1027, 7, 18, 0, 0, 1027, 1028, 7, 1, 0, 0, 1028, 1029, 7, 18, 0, 0, 1029, 1030, 7, 3, 0, 0, 1030, 1031, 7, 18, 0, 0, 1031, 1032, 7, 1, 0, 0, 1032, 26, 1, 0, 0, 0, 1033, 1034, 7, 7, 0, 0, 1034, 1035, 7, 2, 0, 0, 1035, 1036, 7, 7, 0, 0, 1036, 1037, 7, 20, 0, 0, 1037, 1038, 7, 13, 0, 0, 1038, 28, 1, 0, 0, 0, 1039, 1040, 7, 1, 0, 0, 1040, 1041, 7, 10, 0, 0, 1041, 1042, 7, 4, 0, 0, 1042, 1043, 7, 18, 0, 0, 1043, 30, 1, 0, 0, 0, 1044, 1045, 7, 2, 0, 0, 1045, 1046, 7, 19, 0, 0, 1046, 1047, 7, 3, 0, 0, 1047, 1048, 7, 14, 0, 0, 1048, 32, 1, 0, 0, 0, 1049, 1050, 7, 6, 0, 0, 1050, 1051, 7, 2, 0, 0, 1051, 1052, 7, 3, 0, 0, 1052, 1053, 7, 7, 0, 0, 1053, 34, 1, 0, 0, 0, 1054, 1055, 7, 9, 0, 0, 1055, 1056, 7, 8, 0, 0, 1056, 1057, 7, 15, 0, 0, 1057, 36, 1, 0, 0, 0, 1058, 1059, 7, 18, 0, 0, 1059, 1060, 7, 10, 0, 0, 1060, 1061, 7, 13, 0, 0, 1061, 38, 1, 0, 0, 0, 1062, 1063, 7, 4, 0, 0, 1063, 1064, 7, 3, 0, 0, 1064, 1065, 7, 4, 0, 0, 1065, 1066, 7, 2, 0, 0, 1066, 40, 1, 0, 0, 0, 1067, 1068, 7, 13, 0, 0, 1068, 1069, 7, 3, 0, 0, 1069, 1070, 7, 4, 0, 0, 1070, 1071, 7, 1, 0, 0, 1071, 1072, 7, 2, 0, 0, 1072, 42, 1, 0, 0, 0, 1073, 1074, 7, 1, 0, 0, 1074, 1075, 7, 13, 0, 0, 1075, 1076, 7, 3, 0, 0, 1076, 1077, 7, 18, 0, 0, 1077, 1078, 7, 6, 0, 0, 1078, 44, 1, 0, 0, 0, 1079, 1080, 7, 4, 0, 0, 1080, 1081, 7, 2, 0, 0, 1081, 1082, 7, 21, 0, 0, 1082, 1083, 7, 2, 0, 0, 1083, 1084, 7, 12, 0, 0, 1084, 46, 1, 0, 0, 0, 1085, 1086, 7, 4, 0, 0, 1086, 1087, 7, 2, 0, 0, 1087, 1088, 7, 12, 0, 0, 1088, 48, 1, 0, 0, 0, 1089, 1090, 7, 1, 0, 0, 1090, 1091, 7, 2, 0, 0, 1091, 1092, 7, 7, 0, 0, 1092, 50, 1, 0, 0, 0, 1093, 1094, 7, 13, 0, 0, 1094, 1095, 7, 20, 0, 0, 1095, 1096, 7, 15, 0, 0, 1096, 1097, 7, 5, 0, 0, 1097, 1098, 7, 18, 0, 0, 1098, 52, 1, 0, 0, 0, 1099, 1100, 7, 21, 0, 0, 1100, 1101, 7, 4, 0, 0, 1101, 1102, 7, 10, 0, 0, 1102, 1103, 7, 22, 0, 0, 1103, 54, 1, 0, 0, 0, 1104, 1105, 7, 13, 0, 0, 1105, 1106, 7, 3, 0, 0, 1106, 1107, 7, 18, 0, 0, 1107, 1108, 7, 18, 0, 0, 1108, 1109, 7, 2, 0, 0, 1109, 1110, 7, 4, 0, 0, 1110, 1111, 7, 15, 0, 0, 1111, 56, 1, 0, 0, 0, 1112, 1113, 7, 13, 0, 0, 1113, 1114, 7, 3, 0, 0, 1114, 1115, 7, 18, 0, 0, 1115, 1116, 7, 18, 0, 0, 1116, 1117, 7, 2, 0, 0, 1117, 1118, 7, 4, 0, 0, 1118, 1119, 7, 15, 0, 0, 1119, 1120, 7, 1, 0, 0, 1120, 58, 1, 0, 0, 0, 1121, 1122, 7, 15, 0, 0, 1122, 1123, 7, 2, 0, 0, 1123, 1124, 7, 11, 0, 0, 1124, 1125, 5, 95, 0, 0, 1125, 1126, 7, 16, 0, 0, 1126, 1127, 7, 8, 0, 0, 1127, 1128, 7, 2, 0, 0, 1128, 1129, 7, 14, 0, 0, 1129, 1130, 7, 7, 0, 0, 1130, 60, 1, 0, 0, 0, 1131, 1132, 7, 22, 0, 0, 1132, 1133, 7, 17, 0, 0, 1133, 1134, 7, 2, 0, 0, 1134, 1135, 7, 3, 0, 0, 1135, 1136, 7, 15, 0, 0, 1136, 1137, 7, 1, 0, 0, 1137, 62, 1, 0, 0, 0, 1138, 1139, 7, 3, 0, 0, 1139, 1140, 7, 7, 0, 0, 1140, 64, 1, 0, 0, 0, 1141, 1142, 7, 17, 0, 0, 1142, 1143, 7, 14, 0, 0, 1143, 66, 1, 0, 0, 0, 1144, 1145, 7, 16, 0, 0, 1145, 1146, 7, 8, 0, 0, 1146, 1147, 7, 14, 0, 0, 1147, 1148, 7, 14, 0, 0, 1148, 1149, 7, 15, 0, 0, 1149, 1150, 7, 20, 0, 0, 1150, 1151, 7, 14, 0, 0, 1151, 1152, 7, 14, 0, 0, 1152, 68, 1, 0, 0, 0, 1153, 1154, 7, 16, 0, 0, 1154, 1155, 7, 14, 0, 0, 1155, 1156, 7, 3, 0, 0, 1156, 1157, 7, 18, 0, 0, 1157, 1158, 7, 18, 0, 0, 1158, 1159, 7, 2, 0, 0, 1159, 1160, 7, 15, 0, 0, 1160, 70, 1, 0, 0, 0, 1161, 1162, 7, 18, 0, 0, 1162, 1163, 7, 4, 0, 0, 1163, 1164, 7, 2, 0, 0, 1164, 1165, 7, 15, 0, 0, 1165, 1166, 7, 7, 0, 0, 1166, 1167, 7, 14, 0, 0, 1167, 1168, 7, 8, 0, 0, 1168, 1169, 7, 15, 0, 0, 1169, 1170, 7, 2, 0, 0, 1170, 72, 1, 0, 0, 0, 1171, 1172, 7, 18, 0, 0, 1172, 1173, 7, 8, 0, 0, 1173, 1174, 7, 17, 0, 0, 1174, 1175, 7, 2, 0, 0, 1175, 1176, 7, 5, 0, 0, 1176, 1177, 7, 6, 0, 0, 1177, 1178, 7, 3, 0, 0, 1178, 1179, 7, 4, 0, 0, 1179, 1180, 7, 18, 0, 0, 1180, 74, 1, 0, 0, 0, 1181, 1182, 7, 3, 0, 0, 1182, 1183, 7, 13, 0, 0, 1183, 1184, 7, 13, 0, 0, 1184, 1185, 7, 2, 0, 0, 1185, 1186, 7, 15, 0, 0, 1186, 1187, 7, 7, 0, 0, 1187, 1188, 7, 5, 0, 0, 1188, 1189, 7, 10, 0, 0, 1189, 1190, 7, 14, 0, 0, 1190, 76, 1, 0, 0, 0, 1191, 1192, 7, 2, 0, 0, 1192, 1193, 7, 12, 0, 0, 1193, 1194, 7, 13, 0, 0, 1194, 1195, 7, 3, 0, 0, 1195, 1196, 7, 15, 0, 0, 1196, 1197, 7, 7, 0, 0, 1197, 78, 1, 0, 0, 0, 1198, 1199, 7, 1, 0, 0, 1199, 1200, 7, 8, 0, 0, 1200, 1201, 7, 17, 0, 0, 1201, 1202, 7, 13, 0, 0, 1202, 1203, 7, 14, 0, 0, 1203, 1204, 7, 2, 0, 0, 1204, 1205, 5, 95, 0, 0, 1205, 1206, 7, 13, 0, 0, 1206, 1207, 7, 3, 0, 0, 1207, 1208, 7, 18, 0, 0, 1208, 1209, 7, 18, 0, 0, 1209, 1210, 7, 2, 0, 0, 1210, 1211, 7, 4, 0, 0, 1211, 1212, 7, 15, 0, 0, 1212, 80, 1, 0, 0, 0, 1213, 1214, 7, 9, 0, 0, 1214, 1215, 7, 4, 0, 0, 1215, 1216, 7, 3, 0, 0, 1216, 1217, 7, 8, 0, 0, 1217, 1218, 7, 15, 0, 0, 1218, 82, 1, 0, 0, 0, 1219, 1220, 7, 19, 0, 0, 1220, 1221, 7, 3, 0, 0, 1221, 1222, 7, 4, 0, 0, 1222, 1223, 7, 8, 0, 0, 1223, 1224, 7, 3, 0, 0, 1224, 1225, 7, 9, 0, 0, 1225, 1226, 7, 14, 0, 0, 1226, 1227, 7, 2, 0, 0, 1227, 1228, 5, 95, 0, 0, 1228, 1229, 7, 5, 0, 0, 1229, 1230, 7, 10, 0, 0, 1230, 1231, 7, 20, 0, 0, 1231, 1232, 7, 15, 0, 0, 1232, 1233, 7, 18, 0, 0, 1233, 1234, 5, 95, 0, 0, 1234, 1235, 7, 18, 0, 0, 1235, 1236, 7, 6, 0, 0, 1236, 1237, 7, 4, 0, 0, 1237, 1238, 7, 2, 0, 0, 1238, 1239, 7, 1, 0, 0, 1239, 1240, 7, 6, 0, 0, 1240, 1241, 7, 10, 0, 0, 1241, 1242, 7, 14, 0, 0, 1242, 1243, 7, 7, 0, 0, 1243, 84, 1, 0, 0, 0, 1244, 1245, 7, 16, 0, 0, 1245, 1246, 7, 4, 0, 0, 1246, 1247, 7, 2, 0, 0, 1247, 1248, 7, 23, 0, 0, 1248, 1249, 7, 20, 0, 0, 1249, 1250, 7, 2, 0, 0, 1250, 1251, 7, 15, 0, 0, 1251, 1252, 7, 5, 0, 0, 1252, 1253, 7, 24, 0, 0, 1253, 1254, 5, 95, 0, 0, 1254, 1255, 7, 18, 0, 0, 1255, 1256, 7, 6, 0, 0, 1256, 1257, 7, 4, 0, 0, 1257, 1258, 7, 2, 0, 0, 1258, 1259, 7, 1, 0, 0, 1259, 1260, 7, 6, 0, 0, 1260, 1261, 7, 10, 0, 0, 1261, 1262, 7, 14, 0, 0, 1262, 1263, 7, 7, 0, 0, 1263, 1264, 5, 95, 0, 0, 1264, 1265, 7, 13, 0, 0, 1265, 1266, 7, 2, 0, 0, 1266, 1267, 7, 4, 0, 0, 1267, 1268, 7, 5, 0, 0, 1268, 1269, 7, 2, 0, 0, 1269, 1270, 7, 15, 0, 0, 1270, 1271, 7, 18, 0, 0, 1271, 1272, 7, 3, 0, 0, 1272, 1273, 7, 21, 0, 0, 1273, 1274, 7, 2, 0, 0, 1274, 86, 1, 0, 0, 0, 1275, 1276, 7, 17, 0, 0, 1276, 1277, 7, 2, 0, 0, 1277, 1278, 7, 18, 0, 0, 1278, 1279, 7, 6, 0, 0, 1279, 1280, 7, 10, 0, 0, 1280, 1281, 7, 7, 0, 0, 1281, 88, 1, 0, 0, 0, 1282, 1283, 7, 17, 0, 0, 1283, 1284, 7, 3, 0, 0, 1284, 1285, 7, 12, 0, 0, 1285, 1286, 5, 95, 0, 0, 1286, 1287, 7, 1, 0, 0, 1287, 1288, 7, 3, 0, 0, 1288, 1289, 7, 17, 0, 0, 1289, 1290, 7, 13, 0, 0, 1290, 1291, 7, 14, 0, 0, 1291, 1292, 7, 2, 0, 0, 1292, 1293, 5, 95, 0, 0, 1293, 1294, 7, 5, 0, 0, 1294, 1295, 7, 10, 0, 0, 1295, 1296, 7, 20, 0, 0, 1296, 1297, 7, 15, 0, 0, 1297, 1298, 7, 18, 0, 0, 1298, 90, 1, 0, 0, 0, 1299, 1300, 7, 17, 0, 0, 1300, 1301, 7, 3, 0, 0, 1301, 1302, 7, 12, 0, 0, 1302, 1303, 5, 95, 0, 0, 1303, 1304, 7, 17, 0, 0, 1304, 1305, 7, 3, 0, 0, 1305, 1306, 7, 18, 0, 0, 1306, 1307, 7, 5, 0, 0, 1307, 1308, 7, 6, 0, 0, 1308, 92, 1, 0, 0, 0, 1309, 1310, 7, 10, 0, 0, 1310, 1311, 7, 16, 0, 0, 1311, 1312, 7, 16, 0, 0, 1312, 1313, 7, 1, 0, 0, 1313, 1314, 7, 2, 0, 0, 1314, 1315, 7, 18, 0, 0, 1315, 1316, 5, 95, 0, 0, 1316, 1317, 7, 16, 0, 0, 1317, 1318, 7, 8, 0, 0, 1318, 1319, 7, 2, 0, 0, 1319, 1320, 7, 14, 0, 0, 1320, 1321, 7, 7, 0, 0, 1321, 94, 1, 0, 0, 0, 1322, 1323, 7, 9, 0, 0, 1323, 1324, 7, 20, 0, 0, 1324, 1325, 7, 16, 0, 0, 1325, 1326, 7, 16, 0, 0, 1326, 1327, 7, 2, 0, 0, 1327, 1328, 7, 4, 0, 0, 1328, 1329, 5, 95, 0, 0, 1329, 1330, 7, 14, 0, 0, 1330, 1331, 7, 8, 0, 0, 1331, 1332, 7, 17, 0, 0, 1332, 1333, 7, 8, 0, 0, 1333, 1334, 7, 18, 0, 0, 1334, 96, 1, 0, 0, 0, 1335, 1336, 7, 14, 0, 0, 1336, 1337, 7, 3, 0, 0, 1337, 1338, 7, 9, 0, 0, 1338, 1339, 7, 2, 0, 0, 1339, 1340, 7, 14, 0, 0, 1340, 98, 1, 0, 0, 0, 1341, 1342, 7, 3, 0, 0, 1342, 1343, 7, 21, 0, 0, 1343, 1344, 7, 21, 0, 0, 1344, 1345, 7, 4, 0, 0, 1345, 1346, 7, 2, 0, 0, 1346, 1347, 7, 21, 0, 0, 1347, 1348, 7, 3, 0, 0, 1348, 1349, 7, 18, 0, 0, 1349, 1350, 7, 8, 0, 0, 1350, 1351, 7, 10, 0, 0, 1351, 1352, 7, 15, 0, 0, 1352, 100, 1, 0, 0, 0, 1353, 1354, 7, 25, 0, 0, 1354, 1355, 7, 10, 0, 0, 1355, 1356, 7, 8, 0, 0, 1356, 1357, 7, 15, 0, 0, 1357, 102, 1, 0, 0, 0, 1358, 1359, 7, 10, 0, 0, 1359, 1360, 7, 15, 0, 0, 1360, 104, 1, 0, 0, 0, 1361, 1362, 7, 8, 0, 0, 1362, 1363, 7, 15, 0, 0, 1363, 1364, 7, 15, 0, 0, 1364, 1365, 7, 2, 0, 0, 1365, 1366, 7, 4, 0, 0, 1366, 106, 1, 0, 0, 0, 1367, 1368, 7, 10, 0, 0, 1368, 1369, 7, 20, 0, 0, 1369, 1370, 7, 18, 0, 0, 1370, 1371, 7, 2, 0, 0, 1371, 1372, 7, 4, 0, 0, 1372, 108, 1, 0, 0, 0, 1373, 1374, 7, 16, 0, 0, 1374, 1375, 7, 20, 0, 0, 1375, 1376, 7, 14, 0, 0, 1376, 1377, 7, 14, 0, 0, 1377, 110, 1, 0, 0, 0, 1378, 1379, 7, 1, 0, 0, 1379, 1380, 7, 2, 0, 0, 1380, 1381, 7, 17, 0, 0, 1381, 1382, 7, 8, 0, 0, 1382, 112, 1, 0, 0, 0, 1383, 1384, 7, 3, 0, 0, 1384, 1385, 7, 15, 0, 0, 1385, 1386, 7, 18, 0, 0, 1386, 1387, 7, 8, 0, 0, 1387, 114, 1, 0, 0, 0, 1388, 1389, 7, 5, 0, 0, 1389, 1390, 7, 4, 0, 0, 1390, 1391, 7, 10, 0, 0, 1391, 1392, 7, 1, 0, 0, 1392, 1393, 7, 1, 0, 0, 1393, 116, 1, 0, 0, 0, 1394, 1395, 7, 6, 0, 0, 1395, 1396, 7, 8, 0, 0, 1396, 1397, 7, 15, 0, 0, 1397, 1398, 7, 18, 0, 0, 1398, 1399, 5, 46, 0, 0, 1399, 1400, 7, 14, 0, 0, 1400, 1401, 7, 2, 0, 0, 1401, 1402, 7, 16, 0, 0, 1402, 1403, 7, 18, 0, 0, 1403, 118, 1, 0, 0, 0, 1404, 1405, 7, 6, 0, 0, 1405, 1406, 7, 8, 0, 0, 1406, 1407, 7, 15, 0, 0, 1407, 1408, 7, 18, 0, 0, 1408, 1409, 5, 46, 0, 0, 1409, 1410, 7, 4, 0, 0, 1410, 1411, 7, 8, 0, 0, 1411, 1412, 7, 21, 0, 0, 1412, 1413, 7, 6, 0, 0, 1413, 1414, 7, 18, 0, 0, 1414, 120, 1, 0, 0, 0, 1415, 1416, 7, 3, 0, 0, 1416, 1417, 7, 1, 0, 0, 1417, 122, 1, 0, 0, 0, 1418, 1419, 7, 9, 0, 0, 1419, 1420, 7, 24, 0, 0, 1420, 124, 1, 0, 0, 0, 1421, 1422, 7, 1, 0, 0, 1422, 1423, 7, 10, 0, 0, 1423, 1424, 7, 20, 0, 0, 1424, 1425, 7, 4, 0, 0, 1425, 1426, 7, 5, 0, 0, 1426, 1427, 7, 2, 0, 0, 1427, 126, 1, 0, 0, 0, 1428, 1429, 7, 8, 0, 0, 1429, 1430, 7, 15, 0, 0, 1430, 1431, 7, 7, 0, 0, 1431, 1432, 7, 2, 0, 0, 1432, 1433, 7, 12, 0, 0, 1433, 128, 1, 0, 0, 0, 1434, 1435, 7, 3, 0, 0, 1435, 130, 1, 0, 0, 0, 1436, 1437, 7, 3, 0, 0, 1437, 1438, 7, 1, 0, 0, 1438, 1439, 7, 5, 0, 0, 1439, 132, 1, 0, 0, 0, 1440, 1441, 7, 7, 0, 0, 1441, 134, 1, 0, 0, 0, 1442, 1443, 7, 7, 0, 0, 1443, 1444, 7, 2, 0, 0, 1444, 1445, 7, 1, 0, 0, 1445, 1446, 7, 5, 0, 0, 1446, 136, 1, 0, 0, 0, 1447, 1448, 7, 7, 0, 0, 1448, 1449, 7, 3, 0, 0, 1449, 1450, 7, 18, 0, 0, 1450, 1451, 7, 3, 0, 0, 1451, 1452, 7, 1, 0, 0, 1452, 1453, 7, 10, 0, 0, 1453, 1454, 7, 20, 0, 0, 1454, 1455, 7, 4, 0, 0, 1455, 1456, 7, 5, 0, 0, 1456, 1457, 7, 2, 0, 0, 1457, 1458, 7, 1, 0, 0, 1458, 138, 1, 0, 0, 0, 1459, 1460, 7, 20, 0, 0, 1460, 1461, 7, 1, 0, 0, 1461, 1462, 7, 8, 0, 0, 1462, 1463, 7, 15, 0, 0, 1463, 1464, 7, 21, 0, 0, 1464, 140, 1, 0, 0, 0, 1465, 1466, 7, 11, 0, 0, 1466, 1467, 7, 8, 0, 0, 1467, 1468, 7, 18, 0, 0, 1468, 1469, 7, 6, 0, 0, 1469, 142, 1, 0, 0, 0, 1470, 1471, 7, 1, 0, 0, 1471, 1472, 7, 8, 0, 0, 1472, 1473, 7, 17, 0, 0, 1473, 1474, 7, 13, 0, 0, 1474, 1475, 7, 14, 0, 0, 1475, 1476, 7, 2, 0, 0, 1476, 144, 1, 0, 0, 0, 1477, 1478, 7, 1, 0, 0, 1478, 1479, 7, 18, 0, 0, 1479, 1480, 7, 3, 0, 0, 1480, 1481, 7, 15, 0, 0, 1481, 1482, 7, 7, 0, 0, 1482, 1483, 7, 3, 0, 0, 1483, 1484, 7, 4, 0, 0, 1484, 1485, 7, 7, 0, 0, 1485, 146, 1, 0, 0, 0, 1486, 1487, 7, 5, 0, 0, 1487, 1488, 7, 10, 0, 0, 1488, 1489, 7, 1, 0, 0, 1489, 1490, 7, 18, 0, 0, 1490, 148, 1, 0, 0, 0, 1491, 1492, 7, 2, 0, 0, 1492, 1493, 7, 12, 0, 0, 1493, 1494, 7, 18, 0, 0, 1494, 1495, 7, 2, 0, 0, 1495, 1496, 7, 15, 0, 0, 1496, 1497, 7, 7, 0, 0, 1497, 1498, 7, 2, 0, 0, 1498, 1499, 7, 7, 0, 0, 1499, 150, 1, 0, 0, 0, 1500, 1501, 7, 10, 0, 0, 1501, 1502, 7, 19, 0, 0, 1502, 1503, 7, 2, 0, 0, 1503, 1504, 7, 4, 0, 0, 1504, 1505, 7, 4, 0, 0, 1505, 1506, 7, 8, 0, 0, 1506, 1507, 7, 7, 0, 0, 1507, 1508, 7, 2, 0, 0, 1508, 152, 1, 0, 0, 0, 1509, 1510, 7, 10, 0, 0, 1510, 1511, 7, 19, 0, 0, 1511, 1512, 7, 2, 0, 0, 1512, 1513, 7, 4, 0, 0, 1513, 1514, 7, 11, 0, 0, 1514, 1515, 7, 4, 0, 0, 1515, 1516, 7, 8, 0, 0, 1516, 1517, 7, 18, 0, 0, 1517, 1518, 7, 2, 0, 0, 1518, 154, 1, 0, 0, 0, 1519, 1520, 7, 3, 0, 0, 1520, 1521, 7, 20, 0, 0, 1521, 1522, 7, 18, 0, 0, 1522, 1523, 7, 10, 0, 0, 1523, 156, 1, 0, 0, 0, 1524, 1525, 7, 1, 0, 0, 1525, 1526, 7, 18, 0, 0, 1526, 1527, 7, 4, 0, 0, 1527, 158, 1, 0, 0, 0, 1528, 1529, 7, 15, 0, 0, 1529, 1530, 7, 20, 0, 0, 1530, 1531, 7, 17, 0, 0, 1531, 160, 1, 0, 0, 0, 1532, 1533, 7, 1, 0, 0, 1533, 1534, 7, 17, 0, 0, 1534, 1535, 7, 3, 0, 0, 1535, 162, 1, 0, 0, 0, 1536, 1537, 7, 11, 0, 0, 1537, 1538, 7, 17, 0, 0, 1538, 1539, 7, 3, 0, 0, 1539, 164, 1, 0, 0, 0, 1540, 1541, 7, 22, 0, 0, 1541, 1542, 7, 2, 0, 0, 1542, 1543, 7, 2, 0, 0, 1543, 1544, 7, 13, 0, 0, 1544, 1545, 7, 2, 0, 0, 1545, 1546, 7, 17, 0, 0, 1546, 1547, 7, 13, 0, 0, 1547, 1548, 7, 18, 0, 0, 1548, 1549, 7, 24, 0, 0, 1549, 166, 1, 0, 0, 0, 1550, 1551, 7, 5, 0, 0, 1551, 1552, 7, 10, 0, 0, 1552, 1553, 7, 15, 0, 0, 1553, 1554, 7, 1, 0, 0, 1554, 1555, 7, 2, 0, 0, 1555, 1556, 7, 5, 0, 0, 1556, 1557, 7, 20, 0, 0, 1557, 1558, 7, 18, 0, 0, 1558, 1559, 7, 8, 0, 0, 1559, 1560, 7, 19, 0, 0, 1560, 1561, 7, 2, 0, 0, 1561, 168, 1, 0, 0, 0, 1562, 1563, 7, 7, 0, 0, 1563, 1564, 7, 2, 0, 0, 1564, 1565, 7, 7, 0, 0, 1565, 1566, 7, 20, 0, 0, 1566, 1567, 7, 13, 0, 0, 1567, 1568, 5, 95, 0, 0, 1568, 1569, 7, 1, 0, 0, 1569, 1570, 7, 13, 0, 0, 1570, 1571, 7, 14, 0, 0, 1571, 1572, 7, 8, 0, 0, 1572, 1573, 7, 18, 0, 0, 1573, 1574, 7, 19, 0, 0, 1574, 1575, 7, 3, 0, 0, 1575, 1576, 7, 14, 0, 0, 1576, 1577, 7, 20, 0, 0, 1577, 1578, 7, 2, 0, 0, 1578, 1579, 7, 1, 0, 0, 1579, 170, 1, 0, 0, 0, 1580, 1581, 7, 13, 0, 0, 1581, 1582, 7, 3, 0, 0, 1582, 1583, 7, 4, 0, 0, 1583, 1584, 7, 18, 0, 0, 1584, 1585, 7, 8, 0, 0, 1585, 1586, 7, 18, 0, 0, 1586, 1587, 7, 8, 0, 0, 1587, 1588, 7, 10, 0, 0, 1588, 1589, 7, 15, 0, 0, 1589, 1590, 7, 1, 0, 0, 1590, 172, 1, 0, 0, 0, 1591, 1592, 7, 3, 0, 0, 1592, 1593, 7, 14, 0, 0, 1593, 1594, 7, 14, 0, 0, 1594, 1595, 7, 15, 0, 0, 1595, 1596, 7, 20, 0, 0, 1596, 1597, 7, 17, 0, 0, 1597, 174, 1, 0, 0, 0, 1598, 1599, 7, 7, 0, 0, 1599, 1600, 7, 2, 0, 0, 1600, 1601, 7, 14, 0, 0, 1601, 1602, 7, 8, 0, 0, 1602, 1603, 7, 17, 0, 0, 1603, 176, 1, 0, 0, 0, 1604, 1605, 7, 9, 0, 0, 1605, 1606, 7, 20, 0, 0, 1606, 1607, 7, 5, 0, 0, 1607, 1608, 7, 22, 0, 0, 1608, 1609, 7, 2, 0, 0, 1609, 1610, 7, 18, 0, 0, 1610, 1611, 5, 95, 0, 0, 1611, 1612, 7, 15, 0, 0, 1612, 1613, 7, 20, 0, 0, 1613, 1614, 7, 14, 0, 0, 1614, 1615, 7, 14, 0, 0, 1615, 1616, 7, 3, 0, 0, 1616, 1617, 7, 9, 0, 0, 1617, 1618, 7, 14, 0, 0, 1618, 1619, 7, 2, 0, 0, 1619, 178, 1, 0, 0, 0, 1620, 1621, 7, 5, 0, 0, 1621, 1622, 7, 2, 0, 0, 1622, 1623, 7, 15, 0, 0, 1623, 1624, 7, 18, 0, 0, 1624, 1625, 7, 4, 0, 0, 1625, 1626, 7, 10, 0, 0, 1626, 1627, 7, 8, 0, 0, 1627, 1628, 7, 7, 0, 0, 1628, 1629, 7, 1, 0, 0, 1629, 180, 1, 0, 0, 0, 1630, 1631, 7, 8, 0, 0, 1631, 1632, 7, 18, 0, 0, 1632, 1633, 7, 2, 0, 0, 1633, 1634, 7, 4, 0, 0, 1634, 1635, 7, 3, 0, 0, 1635, 1636, 7, 18, 0, 0, 1636, 1637, 7, 8, 0, 0, 1637, 1638, 7, 10, 0, 0, 1638, 1639, 7, 15, 0, 0, 1639, 1640, 7, 1, 0, 0, 1640, 182, 1, 0, 0, 0, 1641, 1642, 7, 7, 0, 0, 1642, 1643, 7, 8, 0, 0, 1643, 1644, 7, 1, 0, 0, 1644, 1645, 7, 18, 0, 0, 1645, 1646, 7, 3, 0, 0, 1646, 1647, 7, 15, 0, 0, 1647, 1648, 7, 5, 0, 0, 1648, 1649, 7, 2, 0, 0, 1649, 1650, 5, 95, 0, 0, 1650, 1651, 7, 18, 0, 0, 1651, 1652, 7, 24, 0, 0, 1652, 1653, 7, 13, 0, 0, 1653, 1654, 7, 2, 0, 0, 1654, 184, 1, 0, 0, 0, 1655, 1656, 7, 15, 0, 0, 1656, 1657, 7, 20, 0, 0, 1657, 1658, 7, 17, 0, 0, 1658, 1659, 7, 9, 0, 0, 1659, 1660, 7, 2, 0, 0, 1660, 1661, 7, 4, 0, 0, 1661, 1662, 5, 95, 0, 0, 1662, 1663, 7, 10, 0, 0, 1663, 1664, 7, 16, 0, 0, 1664, 1665, 5, 95, 0, 0, 1665, 1666, 7, 18, 0, 0, 1666, 1667, 7, 4, 0, 0, 1667, 1668, 7, 2, 0, 0, 1668, 1669, 7, 2, 0, 0, 1669, 1670, 7, 1, 0, 0, 1670, 186, 1, 0, 0, 0, 1671, 1672, 7, 1, 0, 0, 1672, 1673, 7, 6, 0, 0, 1673, 1674, 7, 8, 0, 0, 1674, 1675, 7, 15, 0, 0, 1675, 1676, 7, 21, 0, 0, 1676, 1677, 7, 14, 0, 0, 1677, 1678, 7, 2, 0, 0, 1678, 1679, 5, 95, 0, 0, 1679, 1680, 7, 1, 0, 0, 1680, 1681, 7, 8, 0, 0, 1681, 1682, 7, 26, 0, 0, 1682, 1683, 7, 2, 0, 0, 1683, 188, 1, 0, 0, 0, 1684, 1685, 7, 1, 0, 0, 1685, 1686, 7, 3, 0, 0, 1686, 1687, 7, 17, 0, 0, 1687, 1688, 7, 13, 0, 0, 1688, 1689, 7, 14, 0, 0, 1689, 1690, 7, 2, 0, 0, 1690, 1691, 5, 95, 0, 0, 1691, 1692, 7, 1, 0, 0, 1692, 1693, 7, 8, 0, 0, 1693, 1694, 7, 26, 0, 0, 1694, 1695, 7, 2, 0, 0, 1695, 190, 1, 0, 0, 0, 1696, 1697, 7, 10, 0, 0, 1697, 1698, 7, 20, 0, 0, 1698, 1699, 7, 18, 0, 0, 1699, 1700, 7, 13, 0, 0, 1700, 1701, 7, 20, 0, 0, 1701, 1702, 7, 18, 0, 0, 1702, 1703, 5, 95, 0, 0, 1703, 1704, 7, 3, 0, 0, 1704, 1705, 7, 16, 0, 0, 1705, 1706, 7, 18, 0, 0, 1706, 1707, 7, 2, 0, 0, 1707, 1708, 7, 4, 0, 0, 1708, 192, 1, 0, 0, 0, 1709, 1710, 7, 18, 0, 0, 1710, 1711, 7, 8, 0, 0, 1711, 1712, 7, 17, 0, 0, 1712, 1713, 7, 2, 0, 0, 1713, 1714, 5, 95, 0, 0, 1714, 1715, 7, 7, 0, 0, 1715, 1716, 7, 2, 0, 0, 1716, 1717, 7, 5, 0, 0, 1717, 1718, 7, 3, 0, 0, 1718, 1719, 7, 24, 0, 0, 1719, 194, 1, 0, 0, 0, 1720, 1721, 7, 3, 0, 0, 1721, 1722, 7, 15, 0, 0, 1722, 1723, 7, 10, 0, 0, 1723, 1724, 7, 17, 0, 0, 1724, 1725, 7, 3, 0, 0, 1725, 1726, 7, 14, 0, 0, 1726, 1727, 7, 24, 0, 0, 1727, 1728, 5, 95, 0, 0, 1728, 1729, 7, 4, 0, 0, 1729, 1730, 7, 3, 0, 0, 1730, 1731, 7, 18, 0, 0, 1731, 1732, 7, 2, 0, 0, 1732, 196, 1, 0, 0, 0, 1733, 1734, 7, 5, 0, 0, 1734, 1735, 7, 3, 0, 0, 1735, 1736, 7, 18, 0, 0, 1736, 1737, 7, 2, 0, 0, 1737, 1738, 7, 21, 0, 0, 1738, 1739, 7, 10, 0, 0, 1739, 1740, 7, 4, 0, 0, 1740, 1741, 7, 24, 0, 0, 1741, 1742, 5, 95, 0, 0, 1742, 1743, 7, 16, 0, 0, 1743, 1744, 7, 8, 0, 0, 1744, 1745, 7, 2, 0, 0, 1745, 1746, 7, 14, 0, 0, 1746, 1747, 7, 7, 0, 0, 1747, 198, 1, 0, 0, 0, 1748, 1749, 7, 18, 0, 0, 1749, 1750, 7, 8, 0, 0, 1750, 1751, 7, 17, 0, 0, 1751, 1752, 7, 2, 0, 0, 1752, 1753, 5, 95, 0, 0, 1753, 1754, 7, 16, 0, 0, 1754, 1755, 7, 8, 0, 0, 1755, 1756, 7, 2, 0, 0, 1756, 1757, 7, 14, 0, 0, 1757, 1758, 7, 7, 0, 0, 1758, 200, 1, 0, 0, 0, 1759, 1760, 7, 18, 0, 0, 1760, 1761, 7, 8, 0, 0, 1761, 1762, 7, 17, 0, 0, 1762, 1763, 7, 2, 0, 0, 1763, 1764, 5, 95, 0, 0, 1764, 1765, 7, 26, 0, 0, 1765, 1766, 7, 10, 0, 0, 1766, 1767, 7, 15, 0, 0, 1767, 1768, 7, 2, 0, 0, 1768, 202, 1, 0, 0, 0, 1769, 1770, 7, 18, 0, 0, 1770, 1771, 7, 4, 0, 0, 1771, 1772, 7, 3, 0, 0, 1772, 1773, 7, 8, 0, 0, 1773, 1774, 7, 15, 0, 0, 1774, 1775, 7, 8, 0, 0, 1775, 1776, 7, 15, 0, 0, 1776, 1777, 7, 21, 0, 0, 1777, 1778, 5, 95, 0, 0, 1778, 1779, 7, 7, 0, 0, 1779, 1780, 7, 3, 0, 0, 1780, 1781, 7, 18, 0, 0, 1781, 1782, 7, 3, 0, 0, 1782, 1783, 5, 95, 0, 0, 1783, 1784, 7, 1, 0, 0, 1784, 1785, 7, 8, 0, 0, 1785, 1786, 7, 26, 0, 0, 1786, 1787, 7, 2, 0, 0, 1787, 204, 1, 0, 0, 0, 1788, 1789, 7, 3, 0, 0, 1789, 1790, 7, 15, 0, 0, 1790, 1791, 7, 10, 0, 0, 1791, 1792, 7, 17, 0, 0, 1792, 1793, 7, 3, 0, 0, 1793, 1794, 7, 14, 0, 0, 1794, 1795, 7, 24, 0, 0, 1795, 1796, 5, 95, 0, 0, 1796, 1797, 7, 1, 0, 0, 1797, 1798, 7, 5, 0, 0, 1798, 1799, 7, 10, 0, 0, 1799, 1800, 7, 4, 0, 0, 1800, 1801, 7, 2, 0, 0, 1801, 1802, 5, 95, 0, 0, 1802, 1803, 7, 18, 0, 0, 1803, 1804, 7, 6, 0, 0, 1804, 1805, 7, 4, 0, 0, 1805, 1806, 7, 2, 0, 0, 1806, 1807, 7, 1, 0, 0, 1807, 1808, 7, 6, 0, 0, 1808, 1809, 7, 10, 0, 0, 1809, 1810, 7, 14, 0, 0, 1810, 1811, 7, 7, 0, 0, 1811, 206, 1, 0, 0, 0, 1812, 1813, 7, 3, 0, 0, 1813, 1814, 7, 13, 0, 0, 1814, 1815, 7, 13, 0, 0, 1815, 1816, 7, 2, 0, 0, 1816, 1817, 7, 15, 0, 0, 1817, 1818, 7, 7, 0, 0, 1818, 208, 1, 0, 0, 0, 1819, 1820, 7, 5, 0, 0, 1820, 1821, 7, 10, 0, 0, 1821, 1822, 7, 20, 0, 0, 1822, 1823, 7, 15, 0, 0, 1823, 1824, 7, 18, 0, 0, 1824, 1825, 7, 16, 0, 0, 1825, 1826, 7, 8, 0, 0, 1826, 1827, 7, 2, 0, 0, 1827, 1828, 7, 14, 0, 0, 1828, 1829, 7, 7, 0, 0, 1829, 210, 1, 0, 0, 0, 1830, 1831, 7, 1, 0, 0, 1831, 1832, 7, 6, 0, 0, 1832, 1833, 7, 10, 0, 0, 1833, 1834, 7, 11, 0, 0, 1834, 1835, 7, 5, 0, 0, 1835, 1836, 7, 10, 0, 0, 1836, 1837, 7, 20, 0, 0, 1837, 1838, 7, 15, 0, 0, 1838, 1839, 7, 18, 0, 0, 1839, 212, 1, 0, 0, 0, 1840, 1841, 7, 14, 0, 0, 1841, 1842, 7, 8, 0, 0, 1842, 1843, 7, 17, 0, 0, 1843, 1844, 7, 8, 0, 0, 1844, 1845, 7, 18, 0, 0, 1845, 214, 1, 0, 0, 0, 1846, 1847, 7, 20, 0, 0, 1847, 1848, 7, 1, 0, 0, 1848, 1849, 7, 2, 0, 0, 1849, 1850, 7, 10, 0, 0, 1850, 1851, 7, 18, 0, 0, 1851, 1852, 7, 6, 0, 0, 1852, 1853, 7, 2, 0, 0, 1853, 1854, 7, 4, 0, 0, 1854, 216, 1, 0, 0, 0, 1855, 1856, 7, 8, 0, 0, 1856, 1857, 7, 15, 0, 0, 1857, 1858, 7, 13, 0, 0, 1858, 1859, 7, 20, 0, 0, 1859, 1860, 7, 18, 0, 0, 1860, 218, 1, 0, 0, 0, 1861, 1862, 7, 10, 0, 0, 1862, 1863, 7, 20, 0, 0, 1863, 1864, 7, 18, 0, 0, 1864, 1865, 7, 13, 0, 0, 1865, 1866, 7, 20, 0, 0, 1866, 1867, 7, 18, 0, 0, 1867, 220, 1, 0, 0, 0, 1868, 1869, 7, 13, 0, 0, 1869, 1870, 7, 3, 0, 0, 1870, 1871, 7, 18, 0, 0, 1871, 1872, 7, 6, 0, 0, 1872, 222, 1, 0, 0, 0, 1873, 1874, 7, 5, 0, 0, 1874, 1875, 7, 3, 0, 0, 1875, 1876, 7, 1, 0, 0, 1876, 1877, 7, 2, 0, 0, 1877, 224, 1, 0, 0, 0, 1878, 1879, 7, 2, 0, 0, 1879, 1880, 7, 14, 0, 0, 1880, 1881, 7, 1, 0, 0, 1881, 1882, 7, 2, 0, 0, 1882, 226, 1, 0, 0, 0, 1883, 1884, 7, 8, 0, 0, 1884, 1885, 7, 15, 0, 0, 1885, 228, 1, 0, 0, 0, 1886, 1887, 7, 2, 0, 0, 1887, 1888, 7, 12, 0, 0, 1888, 1889, 7, 8, 0, 0, 1889, 1890, 7, 1, 0, 0, 1890, 1891, 7, 18, 0, 0, 1891, 1892, 7, 1, 0, 0, 1892, 230, 1, 0, 0, 0, 1893, 1894, 7, 21, 0, 0, 1894, 1895, 7, 2, 0, 0, 1895, 1896, 7, 10, 0, 0, 1896, 1897, 7, 8, 0, 0, 1897, 1898, 7, 13, 0, 0, 1898, 232, 1, 0, 0, 0, 1899, 1900, 7, 15, 0, 0, 1900, 1901, 7, 10, 0, 0, 1901, 1902, 7, 18, 0, 0, 1902, 234, 1, 0, 0, 0, 1903, 1904, 7, 10, 0, 0, 1904, 1905, 7, 4, 0, 0, 1905, 236, 1, 0, 0, 0, 1906, 1907, 7, 3, 0, 0, 1907, 1908, 7, 15, 0, 0, 1908, 1909, 7, 7, 0, 0, 1909, 238, 1, 0, 0, 0, 1910, 1911, 7, 12, 0, 0, 1911, 1912, 7, 10, 0, 0, 1912, 1913, 7, 4, 0, 0, 1913, 240, 1, 0, 0, 0, 1914, 1915, 7, 18, 0, 0, 1915, 1916, 7, 4, 0, 0, 1916, 1917, 7, 20, 0, 0, 1917, 1918, 7, 2, 0, 0, 1918, 242, 1, 0, 0, 0, 1919, 1920, 7, 16, 0, 0, 1920, 1921, 7, 3, 0, 0, 1921, 1922, 7, 14, 0, 0, 1922, 1923, 7, 1, 0, 0, 1923, 1924, 7, 2, 0, 0, 1924, 244, 1, 0, 0, 0, 1925, 1926, 7, 4, 0, 0, 1926, 1927, 7, 2, 0, 0, 1927, 1928, 7, 21, 0, 0, 1928, 1929, 7, 2, 0, 0, 1929, 1930, 7, 12, 0, 0, 1930, 1931, 7, 13, 0, 0, 1931, 246, 1, 0, 0, 0, 1932, 1933, 7, 4, 0, 0, 1933, 1934, 7, 2, 0, 0, 1934, 1935, 7, 21, 0, 0, 1935, 1936, 7, 2, 0, 0, 1936, 1937, 7, 12, 0, 0, 1937, 1938, 5, 95, 0, 0, 1938, 1939, 7, 17, 0, 0, 1939, 1940, 7, 3, 0, 0, 1940, 1941, 7, 18, 0, 0, 1941, 1942, 7, 5, 0, 0, 1942, 1943, 7, 6, 0, 0, 1943, 248, 1, 0, 0, 0, 1944, 1945, 7, 5, 0, 0, 1945, 1946, 7, 10, 0, 0, 1946, 1947, 7, 15, 0, 0, 1947, 1948, 7, 19, 0, 0, 1948, 1949, 7, 2, 0, 0, 1949, 1950, 7, 4, 0, 0, 1950, 1951, 7, 18, 0, 0, 1951, 1952, 5, 95, 0, 0, 1952, 1953, 7, 18, 0, 0, 1953, 1954, 7, 26, 0, 0, 1954, 250, 1, 0, 0, 0, 1955, 1956, 7, 7, 0, 0, 1956, 1957, 7, 3, 0, 0, 1957, 1958, 7, 18, 0, 0, 1958, 1959, 7, 2, 0, 0, 1959, 1960, 7, 18, 0, 0, 1960, 1961, 7, 8, 0, 0, 1961, 1962, 7, 17, 0, 0, 1962, 1963, 7, 2, 0, 0, 1963, 252, 1, 0, 0, 0, 1964, 1965, 7, 7, 0, 0, 1965, 1966, 7, 3, 0, 0, 1966, 1967, 7, 24, 0, 0, 1967, 254, 1, 0, 0, 0, 1968, 1969, 7, 7, 0, 0, 1969, 1970, 7, 3, 0, 0, 1970, 1971, 7, 24, 0, 0, 1971, 1972, 5, 95, 0, 0, 1972, 1973, 7, 6, 0, 0, 1973, 1974, 7, 10, 0, 0, 1974, 1975, 7, 20, 0, 0, 1975, 1976, 7, 4, 0, 0, 1976, 256, 1, 0, 0, 0, 1977, 1978, 7, 7, 0, 0, 1978, 1979, 7, 3, 0, 0, 1979, 1980, 7, 24, 0, 0, 1980, 1981, 5, 95, 0, 0, 1981, 1982, 7, 17, 0, 0, 1982, 1983, 7, 8, 0, 0, 1983, 1984, 7, 5, 0, 0, 1984, 1985, 7, 4, 0, 0, 1985, 1986, 7, 10, 0, 0, 1986, 1987, 7, 1, 0, 0, 1987, 1988, 7, 2, 0, 0, 1988, 1989, 7, 5, 0, 0, 1989, 1990, 7, 10, 0, 0, 1990, 1991, 7, 15, 0, 0, 1991, 1992, 7, 7, 0, 0, 1992, 258, 1, 0, 0, 0, 1993, 1994, 7, 7, 0, 0, 1994, 1995, 7, 3, 0, 0, 1995, 1996, 7, 24, 0, 0, 1996, 1997, 5, 95, 0, 0, 1997, 1998, 7, 17, 0, 0, 1998, 1999, 7, 8, 0, 0, 1999, 2000, 7, 15, 0, 0, 2000, 2001, 7, 20, 0, 0, 2001, 2002, 7, 18, 0, 0, 2002, 2003, 7, 2, 0, 0, 2003, 260, 1, 0, 0, 0, 2004, 2005, 7, 7, 0, 0, 2005, 2006, 7, 3, 0, 0, 2006, 2007, 7, 24, 0, 0, 2007, 2008, 5, 95, 0, 0, 2008, 2009, 7, 10, 0, 0, 2009, 2010, 7, 16, 0, 0, 2010, 2011, 5, 95, 0, 0, 2011, 2012, 7, 24, 0, 0, 2012, 2013, 7, 2, 0, 0, 2013, 2014, 7, 3, 0, 0, 2014, 2015, 7, 4, 0, 0, 2015, 262, 1, 0, 0, 0, 2016, 2017, 7, 7, 0, 0, 2017, 2018, 7, 3, 0, 0, 2018, 2019, 7, 24, 0, 0, 2019, 2020, 5, 95, 0, 0, 2020, 2021, 7, 1, 0, 0, 2021, 2022, 7, 2, 0, 0, 2022, 2023, 7, 5, 0, 0, 2023, 2024, 7, 10, 0, 0, 2024, 2025, 7, 15, 0, 0, 2025, 2026, 7, 7, 0, 0, 2026, 264, 1, 0, 0, 0, 2027, 2028, 7, 6, 0, 0, 2028, 2029, 7, 10, 0, 0, 2029, 2030, 7, 20, 0, 0, 2030, 2031, 7, 4, 0, 0, 2031, 266, 1, 0, 0, 0, 2032, 2033, 7, 6, 0, 0, 2033, 2034, 7, 10, 0, 0, 2034, 2035, 7, 20, 0, 0, 2035, 2036, 7, 4, 0, 0, 2036, 2037, 5, 95, 0, 0, 2037, 2038, 7, 17, 0, 0, 2038, 2039, 7, 8, 0, 0, 2039, 2040, 7, 5, 0, 0, 2040, 2041, 7, 4, 0, 0, 2041, 2042, 7, 10, 0, 0, 2042, 2043, 7, 1, 0, 0, 2043, 2044, 7, 2, 0, 0, 2044, 2045, 7, 5, 0, 0, 2045, 2046, 7, 10, 0, 0, 2046, 2047, 7, 15, 0, 0, 2047, 2048, 7, 7, 0, 0, 2048, 268, 1, 0, 0, 0, 2049, 2050, 7, 6, 0, 0, 2050, 2051, 7, 10, 0, 0, 2051, 2052, 7, 20, 0, 0, 2052, 2053, 7, 4, 0, 0, 2053, 2054, 5, 95, 0, 0, 2054, 2055, 7, 17, 0, 0, 2055, 2056, 7, 8, 0, 0, 2056, 2057, 7, 15, 0, 0, 2057, 2058, 7, 20, 0, 0, 2058, 2059, 7, 18, 0, 0, 2059, 2060, 7, 2, 0, 0, 2060, 270, 1, 0, 0, 0, 2061, 2062, 7, 6, 0, 0, 2062, 2063, 7, 10, 0, 0, 2063, 2064, 7, 20, 0, 0, 2064, 2065, 7, 4, 0, 0, 2065, 2066, 5, 95, 0, 0, 2066, 2067, 7, 10, 0, 0, 2067, 2068, 7, 16, 0, 0, 2068, 2069, 5, 95, 0, 0, 2069, 2070, 7, 7, 0, 0, 2070, 2071, 7, 3, 0, 0, 2071, 2072, 7, 24, 0, 0, 2072, 272, 1, 0, 0, 0, 2073, 2074, 7, 6, 0, 0, 2074, 2075, 7, 10, 0, 0, 2075, 2076, 7, 20, 0, 0, 2076, 2077, 7, 4, 0, 0, 2077, 2078, 5, 95, 0, 0, 2078, 2079, 7, 1, 0, 0, 2079, 2080, 7, 2, 0, 0, 2080, 2081, 7, 5, 0, 0, 2081, 2082, 7, 10, 0, 0, 2082, 2083, 7, 15, 0, 0, 2083, 2084, 7, 7, 0, 0, 2084, 274, 1, 0, 0, 0, 2085, 2086, 7, 8, 0, 0, 2086, 2087, 7, 15, 0, 0, 2087, 2088, 7, 18, 0, 0, 2088, 2089, 7, 2, 0, 0, 2089, 2090, 7, 4, 0, 0, 2090, 2091, 7, 19, 0, 0, 2091, 2092, 7, 3, 0, 0, 2092, 2093, 7, 14, 0, 0, 2093, 276, 1, 0, 0, 0, 2094, 2095, 7, 17, 0, 0, 2095, 2096, 7, 8, 0, 0, 2096, 2097, 7, 5, 0, 0, 2097, 2098, 7, 4, 0, 0, 2098, 2099, 7, 10, 0, 0, 2099, 2100, 7, 1, 0, 0, 2100, 2101, 7, 2, 0, 0, 2101, 2102, 7, 5, 0, 0, 2102, 2103, 7, 10, 0, 0, 2103, 2104, 7, 15, 0, 0, 2104, 2105, 7, 7, 0, 0, 2105, 278, 1, 0, 0, 0, 2106, 2107, 7, 17, 0, 0, 2107, 2108, 7, 8, 0, 0, 2108, 2109, 7, 14, 0, 0, 2109, 2110, 7, 14, 0, 0, 2110, 2111, 7, 8, 0, 0, 2111, 2112, 7, 1, 0, 0, 2112, 2113, 7, 2, 0, 0, 2113, 2114, 7, 5, 0, 0, 2114, 2115, 7, 10, 0, 0, 2115, 2116, 7, 15, 0, 0, 2116, 2117, 7, 7, 0, 0, 2117, 280, 1, 0, 0, 0, 2118, 2119, 7, 17, 0, 0, 2119, 2120, 7, 8, 0, 0, 2120, 2121, 7, 15, 0, 0, 2121, 2122, 7, 20, 0, 0, 2122, 2123, 7, 18, 0, 0, 2123, 2124, 7, 2, 0, 0, 2124, 282, 1, 0, 0, 0, 2125, 2126, 7, 17, 0, 0, 2126, 2127, 7, 8, 0, 0, 2127, 2128, 7, 15, 0, 0, 2128, 2129, 7, 20, 0, 0, 2129, 2130, 7, 18, 0, 0, 2130, 2131, 7, 2, 0, 0, 2131, 2132, 5, 95, 0, 0, 2132, 2133, 7, 17, 0, 0, 2133, 2134, 7, 8, 0, 0, 2134, 2135, 7, 5, 0, 0, 2135, 2136, 7, 4, 0, 0, 2136, 2137, 7, 10, 0, 0, 2137, 2138, 7, 1, 0, 0, 2138, 2139, 7, 2, 0, 0, 2139, 2140, 7, 5, 0, 0, 2140, 2141, 7, 10, 0, 0, 2141, 2142, 7, 15, 0, 0, 2142, 2143, 7, 7, 0, 0, 2143, 284, 1, 0, 0, 0, 2144, 2145, 7, 17, 0, 0, 2145, 2146, 7, 8, 0, 0, 2146, 2147, 7, 15, 0, 0, 2147, 2148, 7, 20, 0, 0, 2148, 2149, 7, 18, 0, 0, 2149, 2150, 7, 2, 0, 0, 2150, 2151, 5, 95, 0, 0, 2151, 2152, 7, 10, 0, 0, 2152, 2153, 7, 16, 0, 0, 2153, 2154, 5, 95, 0, 0, 2154, 2155, 7, 7, 0, 0, 2155, 2156, 7, 3, 0, 0, 2156, 2157, 7, 24, 0, 0, 2157, 286, 1, 0, 0, 0, 2158, 2159, 7, 17, 0, 0, 2159, 2160, 7, 8, 0, 0, 2160, 2161, 7, 15, 0, 0, 2161, 2162, 7, 20, 0, 0, 2162, 2163, 7, 18, 0, 0, 2163, 2164, 7, 2, 0, 0, 2164, 2165, 5, 95, 0, 0, 2165, 2166, 7, 10, 0, 0, 2166, 2167, 7, 16, 0, 0, 2167, 2168, 5, 95, 0, 0, 2168, 2169, 7, 6, 0, 0, 2169, 2170, 7, 10, 0, 0, 2170, 2171, 7, 20, 0, 0, 2171, 2172, 7, 4, 0, 0, 2172, 288, 1, 0, 0, 0, 2173, 2174, 7, 17, 0, 0, 2174, 2175, 7, 8, 0, 0, 2175, 2176, 7, 15, 0, 0, 2176, 2177, 7, 20, 0, 0, 2177, 2178, 7, 18, 0, 0, 2178, 2179, 7, 2, 0, 0, 2179, 2180, 5, 95, 0, 0, 2180, 2181, 7, 1, 0, 0, 2181, 2182, 7, 2, 0, 0, 2182, 2183, 7, 5, 0, 0, 2183, 2184, 7, 10, 0, 0, 2184, 2185, 7, 15, 0, 0, 2185, 2186, 7, 7, 0, 0, 2186, 290, 1, 0, 0, 0, 2187, 2188, 7, 17, 0, 0, 2188, 2189, 7, 10, 0, 0, 2189, 2190, 7, 15, 0, 0, 2190, 2191, 7, 18, 0, 0, 2191, 2192, 7, 6, 0, 0, 2192, 292, 1, 0, 0, 0, 2193, 2194, 7, 17, 0, 0, 2194, 2195, 7, 10, 0, 0, 2195, 2196, 7, 15, 0, 0, 2196, 2197, 7, 18, 0, 0, 2197, 2198, 7, 6, 0, 0, 2198, 2199, 5, 95, 0, 0, 2199, 2200, 7, 10, 0, 0, 2200, 2201, 7, 16, 0, 0, 2201, 2202, 5, 95, 0, 0, 2202, 2203, 7, 24, 0, 0, 2203, 2204, 7, 2, 0, 0, 2204, 2205, 7, 3, 0, 0, 2205, 2206, 7, 4, 0, 0, 2206, 294, 1, 0, 0, 0, 2207, 2208, 7, 23, 0, 0, 2208, 2209, 7, 20, 0, 0, 2209, 2210, 7, 3, 0, 0, 2210, 2211, 7, 4, 0, 0, 2211, 2212, 7, 18, 0, 0, 2212, 2213, 7, 2, 0, 0, 2213, 2214, 7, 4, 0, 0, 2214, 296, 1, 0, 0, 0, 2215, 2216, 7, 1, 0, 0, 2216, 2217, 7, 2, 0, 0, 2217, 2218, 7, 5, 0, 0, 2218, 2219, 7, 10, 0, 0, 2219, 2220, 7, 15, 0, 0, 2220, 2221, 7, 7, 0, 0, 2221, 298, 1, 0, 0, 0, 2222, 2223, 7, 1, 0, 0, 2223, 2224, 7, 2, 0, 0, 2224, 2225, 7, 5, 0, 0, 2225, 2226, 7, 10, 0, 0, 2226, 2227, 7, 15, 0, 0, 2227, 2228, 7, 7, 0, 0, 2228, 2229, 5, 95, 0, 0, 2229, 2230, 7, 17, 0, 0, 2230, 2231, 7, 8, 0, 0, 2231, 2232, 7, 5, 0, 0, 2232, 2233, 7, 4, 0, 0, 2233, 2234, 7, 10, 0, 0, 2234, 2235, 7, 1, 0, 0, 2235, 2236, 7, 2, 0, 0, 2236, 2237, 7, 5, 0, 0, 2237, 2238, 7, 10, 0, 0, 2238, 2239, 7, 15, 0, 0, 2239, 2240, 7, 7, 0, 0, 2240, 300, 1, 0, 0, 0, 2241, 2242, 7, 1, 0, 0, 2242, 2243, 7, 2, 0, 0, 2243, 2244, 7, 5, 0, 0, 2244, 2245, 7, 10, 0, 0, 2245, 2246, 7, 15, 0, 0, 2246, 2247, 7, 7, 0, 0, 2247, 2248, 5, 95, 0, 0, 2248, 2249, 7, 10, 0, 0, 2249, 2250, 7, 16, 0, 0, 2250, 2251, 5, 95, 0, 0, 2251, 2252, 7, 17, 0, 0, 2252, 2253, 7, 8, 0, 0, 2253, 2254, 7, 15, 0, 0, 2254, 2255, 7, 20, 0, 0, 2255, 2256, 7, 18, 0, 0, 2256, 2257, 7, 2, 0, 0, 2257, 302, 1, 0, 0, 0, 2258, 2259, 7, 11, 0, 0, 2259, 2260, 7, 2, 0, 0, 2260, 2261, 7, 2, 0, 0, 2261, 2262, 7, 22, 0, 0, 2262, 304, 1, 0, 0, 0, 2263, 2264, 7, 11, 0, 0, 2264, 2265, 7, 2, 0, 0, 2265, 2266, 7, 2, 0, 0, 2266, 2267, 7, 22, 0, 0, 2267, 2268, 5, 95, 0, 0, 2268, 2269, 7, 10, 0, 0, 2269, 2270, 7, 16, 0, 0, 2270, 2271, 5, 95, 0, 0, 2271, 2272, 7, 24, 0, 0, 2272, 2273, 7, 2, 0, 0, 2273, 2274, 7, 3, 0, 0, 2274, 2275, 7, 4, 0, 0, 2275, 306, 1, 0, 0, 0, 2276, 2277, 7, 24, 0, 0, 2277, 2278, 7, 2, 0, 0, 2278, 2279, 7, 3, 0, 0, 2279, 2280, 7, 4, 0, 0, 2280, 308, 1, 0, 0, 0, 2281, 2282, 7, 24, 0, 0, 2282, 2283, 7, 2, 0, 0, 2283, 2284, 7, 3, 0, 0, 2284, 2285, 7, 4, 0, 0, 2285, 2286, 5, 95, 0, 0, 2286, 2287, 7, 17, 0, 0, 2287, 2288, 7, 10, 0, 0, 2288, 2289, 7, 15, 0, 0, 2289, 2290, 7, 18, 0, 0, 2290, 2291, 7, 6, 0, 0, 2291, 310, 1, 0, 0, 0, 2292, 2293, 7, 7, 0, 0, 2293, 2294, 7, 3, 0, 0, 2294, 2295, 7, 18, 0, 0, 2295, 2296, 7, 3, 0, 0, 2296, 2297, 7, 17, 0, 0, 2297, 2298, 7, 10, 0, 0, 2298, 2299, 7, 7, 0, 0, 2299, 2300, 7, 2, 0, 0, 2300, 2301, 7, 14, 0, 0, 2301, 312, 1, 0, 0, 0, 2302, 2303, 7, 14, 0, 0, 2303, 2304, 7, 10, 0, 0, 2304, 2305, 7, 10, 0, 0, 2305, 2306, 7, 22, 0, 0, 2306, 2307, 7, 20, 0, 0, 2307, 2308, 7, 13, 0, 0, 2308, 314, 1, 0, 0, 0, 2309, 2310, 7, 1, 0, 0, 2310, 2311, 7, 3, 0, 0, 2311, 2312, 7, 19, 0, 0, 2312, 2313, 7, 2, 0, 0, 2313, 2314, 7, 7, 0, 0, 2314, 2315, 7, 1, 0, 0, 2315, 2316, 7, 2, 0, 0, 2316, 2317, 7, 3, 0, 0, 2317, 2318, 7, 4, 0, 0, 2318, 2319, 7, 5, 0, 0, 2319, 2320, 7, 6, 0, 0, 2320, 316, 1, 0, 0, 0, 2321, 2322, 7, 8, 0, 0, 2322, 2323, 7, 15, 0, 0, 2323, 2324, 7, 18, 0, 0, 2324, 318, 1, 0, 0, 0, 2325, 2326, 7, 8, 0, 0, 2326, 2327, 7, 15, 0, 0, 2327, 2328, 7, 18, 0, 0, 2328, 2329, 7, 2, 0, 0, 2329, 2330, 7, 21, 0, 0, 2330, 2331, 7, 2, 0, 0, 2331, 2332, 7, 4, 0, 0, 2332, 320, 1, 0, 0, 0, 2333, 2334, 7, 7, 0, 0, 2334, 2335, 7, 10, 0, 0, 2335, 2336, 7, 20, 0, 0, 2336, 2337, 7, 9, 0, 0, 2337, 2338, 7, 14, 0, 0, 2338, 2339, 7, 2, 0, 0, 2339, 322, 1, 0, 0, 0, 2340, 2341, 7, 14, 0, 0, 2341, 2342, 7, 10, 0, 0, 2342, 2343, 7, 15, 0, 0, 2343, 2344, 7, 21, 0, 0, 2344, 324, 1, 0, 0, 0, 2345, 2346, 7, 16, 0, 0, 2346, 2347, 7, 14, 0, 0, 2347, 2348, 7, 10, 0, 0, 2348, 2349, 7, 3, 0, 0, 2349, 2350, 7, 18, 0, 0, 2350, 326, 1, 0, 0, 0, 2351, 2352, 7, 1, 0, 0, 2352, 2353, 7, 18, 0, 0, 2353, 2354, 7, 4, 0, 0, 2354, 2355, 7, 8, 0, 0, 2355, 2356, 7, 15, 0, 0, 2356, 2357, 7, 21, 0, 0, 2357, 328, 1, 0, 0, 0, 2358, 2359, 7, 9, 0, 0, 2359, 2360, 7, 10, 0, 0, 2360, 2361, 7, 10, 0, 0, 2361, 2362, 7, 14, 0, 0, 2362, 2363, 7, 2, 0, 0, 2363, 2364, 7, 3, 0, 0, 2364, 2365, 7, 15, 0, 0, 2365, 330, 1, 0, 0, 0, 2366, 2367, 7, 8, 0, 0, 2367, 2368, 7, 13, 0, 0, 2368, 332, 1, 0, 0, 0, 2369, 2370, 5, 124, 0, 0, 2370, 334, 1, 0, 0, 0, 2371, 2372, 5, 44, 0, 0, 2372, 336, 1, 0, 0, 0, 2373, 2374, 5, 46, 0, 0, 2374, 338, 1, 0, 0, 0, 2375, 2376, 5, 61, 0, 0, 2376, 340, 1, 0, 0, 0, 2377, 2378, 5, 61, 0, 0, 2378, 2379, 5, 61, 0, 0, 2379, 342, 1, 0, 0, 0, 2380, 2381, 5, 62, 0, 0, 2381, 344, 1, 0, 0, 0, 2382, 2383, 5, 60, 0, 0, 2383, 346, 1, 0, 0, 0, 2384, 2385, 5, 60, 0, 0, 2385, 2386, 5, 61, 0, 0, 2386, 348, 1, 0, 0, 0, 2387, 2388, 5, 62, 0, 0, 2388, 2389, 5, 61, 0, 0, 2389, 350, 1, 0, 0, 0, 2390, 2391, 5, 33, 0, 0, 2391, 2392, 5, 61, 0, 0, 2392, 352, 1, 0, 0, 0, 2393, 2394, 5, 43, 0, 0, 2394, 354, 1, 0, 0, 0, 2395, 2396, 5, 45, 0, 0, 2396, 356, 1, 0, 0, 0, 2397, 2398, 5, 42, 0, 0, 2398, 358, 1, 0, 0, 0, 2399, 2400, 5, 47, 0, 0, 2400, 360, 1, 0, 0, 0, 2401, 2402, 5, 37, 0, 0, 2402, 362, 1, 0, 0, 0, 2403, 2404, 5, 33, 0, 0, 2404, 364, 1, 0, 0, 0, 2405, 2406, 5, 58, 0, 0, 2406, 366, 1, 0, 0, 0, 2407, 2408, 5, 40, 0, 0, 2408, 368, 1, 0, 0, 0, 2409, 2410, 5, 41, 0, 0, 2410, 370, 1, 0, 0, 0, 2411, 2412, 5, 91, 0, 0, 2412, 372, 1, 0, 0, 0, 2413, 2414, 5, 93, 0, 0, 2414, 374, 1, 0, 0, 0, 2415, 2416, 5, 123, 0, 0, 2416, 376, 1, 0, 0, 0, 2417, 2418, 5, 125, 0, 0, 2418, 378, 1, 0, 0, 0, 2419, 2420, 5, 39, 0, 0, 2420, 380, 1, 0, 0, 0, 2421, 2422, 5, 34, 0, 0, 2422, 382, 1, 0, 0, 0, 2423, 2424, 5, 96, 0, 0, 2424, 384, 1, 0, 0, 0, 2425, 2426, 5, 45, 0, 0, 2426, 2427, 5, 62, 0, 0, 2427, 386, 1, 0, 0, 0, 2428, 2429, 5, 126, 0, 0, 2429, 388, 1, 0, 0, 0, 2430, 2431, 5, 38, 0, 0, 2431, 390, 1, 0, 0, 0, 2432, 2433, 5, 94, 0, 0, 2433, 392, 1, 0, 0, 0, 2434, 2435, 7, 3, 0, 0, 2435, 2436, 7, 19, 0, 0, 2436, 2437, 7, 21, 0, 0, 2437, 394, 1, 0, 0, 0, 2438, 2439, 7, 5, 0, 0, 2439, 2440, 7, 10, 0, 0, 2440, 2441, 7, 20, 0, 0, 2441, 2442, 7, 15, 0, 0, 2442, 2443, 7, 18, 0, 0, 2443, 396, 1, 0, 0, 0, 2444, 2445, 7, 7, 0, 0, 2445, 2446, 7, 8, 0, 0, 2446, 2447, 7, 1, 0, 0, 2447, 2448, 7, 18, 0, 0, 2448, 2449, 7, 8, 0, 0, 2449, 2450, 7, 15, 0, 0, 2450, 2451, 7, 5, 0, 0, 2451, 2452, 7, 18, 0, 0, 2452, 2453, 5, 95, 0, 0, 2453, 2454, 7, 5, 0, 0, 2454, 2455, 7, 10, 0, 0, 2455, 2456, 7, 20, 0, 0, 2456, 2457, 7, 15, 0, 0, 2457, 2458, 7, 18, 0, 0, 2458, 398, 1, 0, 0, 0, 2459, 2460, 7, 7, 0, 0, 2460, 2461, 7, 8, 0, 0, 2461, 2462, 7, 1, 0, 0, 2462, 2463, 7, 18, 0, 0, 2463, 2464, 7, 8, 0, 0, 2464, 2465, 7, 15, 0, 0, 2465, 2466, 7, 5, 0, 0, 2466, 2467, 7, 18, 0, 0, 2467, 2468, 5, 95, 0, 0, 2468, 2469, 7, 5, 0, 0, 2469, 2470, 7, 10, 0, 0, 2470, 2471, 7, 20, 0, 0, 2471, 2472, 7, 15, 0, 0, 2472, 2473, 7, 18, 0, 0, 2473, 2474, 5, 95, 0, 0, 2474, 2475, 7, 3, 0, 0, 2475, 2476, 7, 13, 0, 0, 2476, 2477, 7, 13, 0, 0, 2477, 2478, 7, 4, 0, 0, 2478, 2479, 7, 10, 0, 0, 2479, 2480, 7, 12, 0, 0, 2480, 400, 1, 0, 0, 0, 2481, 2482, 7, 2, 0, 0, 2482, 2483, 7, 1, 0, 0, 2483, 2484, 7, 18, 0, 0, 2484, 2485, 7, 7, 0, 0, 2485, 2486, 7, 5, 0, 0, 2486, 402, 1, 0, 0, 0, 2487, 2488, 7, 2, 0, 0, 2488, 2489, 7, 1, 0, 0, 2489, 2490, 7, 18, 0, 0, 2490, 2491, 7, 7, 0, 0, 2491, 2492, 7, 5, 0, 0, 2492, 2493, 5, 95, 0, 0, 2493, 2494, 7, 2, 0, 0, 2494, 2495, 7, 4, 0, 0, 2495, 2496, 7, 4, 0, 0, 2496, 2497, 7, 10, 0, 0, 2497, 2498, 7, 4, 0, 0, 2498, 404, 1, 0, 0, 0, 2499, 2500, 7, 17, 0, 0, 2500, 2501, 7, 3, 0, 0, 2501, 2502, 7, 12, 0, 0, 2502, 406, 1, 0, 0, 0, 2503, 2504, 7, 17, 0, 0, 2504, 2505, 7, 2, 0, 0, 2505, 2506, 7, 3, 0, 0, 2506, 2507, 7, 15, 0, 0, 2507, 408, 1, 0, 0, 0, 2508, 2509, 7, 17, 0, 0, 2509, 2510, 7, 2, 0, 0, 2510, 2511, 7, 7, 0, 0, 2511, 2512, 7, 8, 0, 0, 2512, 2513, 7, 3, 0, 0, 2513, 2514, 7, 15, 0, 0, 2514, 410, 1, 0, 0, 0, 2515, 2516, 7, 17, 0, 0, 2516, 2517, 7, 8, 0, 0, 2517, 2518, 7, 15, 0, 0, 2518, 412, 1, 0, 0, 0, 2519, 2520, 7, 17, 0, 0, 2520, 2521, 7, 10, 0, 0, 2521, 2522, 7, 7, 0, 0, 2522, 2523, 7, 2, 0, 0, 2523, 414, 1, 0, 0, 0, 2524, 2525, 7, 4, 0, 0, 2525, 2526, 7, 3, 0, 0, 2526, 2527, 7, 15, 0, 0, 2527, 2528, 7, 21, 0, 0, 2528, 2529, 7, 2, 0, 0, 2529, 416, 1, 0, 0, 0, 2530, 2531, 7, 1, 0, 0, 2531, 2532, 7, 18, 0, 0, 2532, 2533, 7, 7, 0, 0, 2533, 2534, 7, 2, 0, 0, 2534, 2535, 7, 19, 0, 0, 2535, 418, 1, 0, 0, 0, 2536, 2537, 7, 1, 0, 0, 2537, 2538, 7, 18, 0, 0, 2538, 2539, 7, 7, 0, 0, 2539, 2540, 7, 2, 0, 0, 2540, 2541, 7, 19, 0, 0, 2541, 2542, 7, 13, 0, 0, 2542, 420, 1, 0, 0, 0, 2543, 2544, 7, 1, 0, 0, 2544, 2545, 7, 20, 0, 0, 2545, 2546, 7, 17, 0, 0, 2546, 422, 1, 0, 0, 0, 2547, 2548, 7, 1, 0, 0, 2548, 2549, 7, 20, 0, 0, 2549, 2550, 7, 17, 0, 0, 2550, 2551, 7, 1, 0, 0, 2551, 2552, 7, 23, 0, 0, 2552, 424, 1, 0, 0, 0, 2553, 2554, 7, 19, 0, 0, 2554, 2555, 7, 3, 0, 0, 2555, 2556, 7, 4, 0, 0, 2556, 2557, 5, 95, 0, 0, 2557, 2558, 7, 1, 0, 0, 2558, 2559, 7, 3, 0, 0, 2559, 2560, 7, 17, 0, 0, 2560, 2561, 7, 13, 0, 0, 2561, 426, 1, 0, 0, 0, 2562, 2563, 7, 19, 0, 0, 2563, 2564, 7, 3, 0, 0, 2564, 2565, 7, 4, 0, 0, 2565, 2566, 5, 95, 0, 0, 2566, 2567, 7, 13, 0, 0, 2567, 2568, 7, 10, 0, 0, 2568, 2569, 7, 13, 0, 0, 2569, 428, 1, 0, 0, 0, 2570, 2571, 7, 1, 0, 0, 2571, 2572, 7, 18, 0, 0, 2572, 2573, 7, 7, 0, 0, 2573, 2574, 7, 7, 0, 0, 2574, 2575, 7, 2, 0, 0, 2575, 2576, 7, 19, 0, 0, 2576, 2577, 5, 95, 0, 0, 2577, 2578, 7, 1, 0, 0, 2578, 2579, 7, 3, 0, 0, 2579, 2580, 7, 17, 0, 0, 2580, 2581, 7, 13, 0, 0, 2581, 430, 1, 0, 0, 0, 2582, 2583, 7, 1, 0, 0, 2583, 2584, 7, 18, 0, 0, 2584, 2585, 7, 7, 0, 0, 2585, 2586, 7, 7, 0, 0, 2586, 2587, 7, 2, 0, 0, 2587, 2588, 7, 19, 0, 0, 2588, 2589, 5, 95, 0, 0, 2589, 2590, 7, 13, 0, 0, 2590, 2591, 7, 10, 0, 0, 2591, 2592, 7, 13, 0, 0, 2592, 432, 1, 0, 0, 0, 2593, 2594, 7, 13, 0, 0, 2594, 2595, 7, 2, 0, 0, 2595, 2596, 7, 4, 0, 0, 2596, 2597, 7, 5, 0, 0, 2597, 434, 1, 0, 0, 0, 2598, 2599, 7, 13, 0, 0, 2599, 2600, 7, 2, 0, 0, 2600, 2601, 7, 4, 0, 0, 2601, 2602, 7, 5, 0, 0, 2602, 2603, 7, 2, 0, 0, 2603, 2604, 7, 15, 0, 0, 2604, 2605, 7, 18, 0, 0, 2605, 2606, 7, 8, 0, 0, 2606, 2607, 7, 14, 0, 0, 2607, 2608, 7, 2, 0, 0, 2608, 436, 1, 0, 0, 0, 2609, 2610, 7, 13, 0, 0, 2610, 2611, 7, 2, 0, 0, 2611, 2612, 7, 4, 0, 0, 2612, 2613, 7, 5, 0, 0, 2613, 2614, 7, 2, 0, 0, 2614, 2615, 7, 15, 0, 0, 2615, 2616, 7, 18, 0, 0, 2616, 2617, 7, 8, 0, 0, 2617, 2618, 7, 14, 0, 0, 2618, 2619, 7, 2, 0, 0, 2619, 2620, 5, 95, 0, 0, 2620, 2621, 7, 3, 0, 0, 2621, 2622, 7, 13, 0, 0, 2622, 2623, 7, 13, 0, 0, 2623, 2624, 7, 4, 0, 0, 2624, 2625, 7, 10, 0, 0, 2625, 2626, 7, 12, 0, 0, 2626, 438, 1, 0, 0, 0, 2627, 2628, 7, 2, 0, 0, 2628, 2629, 7, 3, 0, 0, 2629, 2630, 7, 4, 0, 0, 2630, 2631, 7, 14, 0, 0, 2631, 2632, 7, 8, 0, 0, 2632, 2633, 7, 2, 0, 0, 2633, 2634, 7, 1, 0, 0, 2634, 2635, 7, 18, 0, 0, 2635, 440, 1, 0, 0, 0, 2636, 2637, 7, 14, 0, 0, 2637, 2638, 7, 3, 0, 0, 2638, 2639, 7, 18, 0, 0, 2639, 2640, 7, 2, 0, 0, 2640, 2641, 7, 1, 0, 0, 2641, 2642, 7, 18, 0, 0, 2642, 442, 1, 0, 0, 0, 2643, 2644, 7, 18, 0, 0, 2644, 2645, 7, 3, 0, 0, 2645, 2646, 7, 22, 0, 0, 2646, 2647, 7, 2, 0, 0, 2647, 444, 1, 0, 0, 0, 2648, 2649, 7, 14, 0, 0, 2649, 2650, 7, 8, 0, 0, 2650, 2651, 7, 1, 0, 0, 2651, 2652, 7, 18, 0, 0, 2652, 446, 1, 0, 0, 0, 2653, 2654, 7, 19, 0, 0, 2654, 2655, 7, 3, 0, 0, 2655, 2656, 7, 14, 0, 0, 2656, 2657, 7, 20, 0, 0, 2657, 2658, 7, 2, 0, 0, 2658, 2659, 7, 1, 0, 0, 2659, 448, 1, 0, 0, 0, 2660, 2661, 7, 13, 0, 0, 2661, 2662, 7, 2, 0, 0, 2662, 2663, 7, 4, 0, 0, 2663, 2664, 5, 95, 0, 0, 2664, 2665, 7, 7, 0, 0, 2665, 2666, 7, 3, 0, 0, 2666, 2667, 7, 24, 0, 0, 2667, 450, 1, 0, 0, 0, 2668, 2669, 7, 13, 0, 0, 2669, 2670, 7, 2, 0, 0, 2670, 2671, 7, 4, 0, 0, 2671, 2672, 5, 95, 0, 0, 2672, 2673, 7, 6, 0, 0, 2673, 2674, 7, 10, 0, 0, 2674, 2675, 7, 20, 0, 0, 2675, 2676, 7, 4, 0, 0, 2676, 452, 1, 0, 0, 0, 2677, 2678, 7, 13, 0, 0, 2678, 2679, 7, 2, 0, 0, 2679, 2680, 7, 4, 0, 0, 2680, 2681, 5, 95, 0, 0, 2681, 2682, 7, 17, 0, 0, 2682, 2683, 7, 8, 0, 0, 2683, 2684, 7, 15, 0, 0, 2684, 2685, 7, 20, 0, 0, 2685, 2686, 7, 18, 0, 0, 2686, 2687, 7, 2, 0, 0, 2687, 454, 1, 0, 0, 0, 2688, 2689, 7, 13, 0, 0, 2689, 2690, 7, 2, 0, 0, 2690, 2691, 7, 4, 0, 0, 2691, 2692, 5, 95, 0, 0, 2692, 2693, 7, 1, 0, 0, 2693, 2694, 7, 2, 0, 0, 2694, 2695, 7, 5, 0, 0, 2695, 2696, 7, 10, 0, 0, 2696, 2697, 7, 15, 0, 0, 2697, 2698, 7, 7, 0, 0, 2698, 456, 1, 0, 0, 0, 2699, 2700, 7, 4, 0, 0, 2700, 2701, 7, 3, 0, 0, 2701, 2702, 7, 18, 0, 0, 2702, 2703, 7, 2, 0, 0, 2703, 458, 1, 0, 0, 0, 2704, 2705, 7, 1, 0, 0, 2705, 2706, 7, 13, 0, 0, 2706, 2707, 7, 3, 0, 0, 2707, 2708, 7, 4, 0, 0, 2708, 2709, 7, 22, 0, 0, 2709, 2710, 7, 14, 0, 0, 2710, 2711, 7, 8, 0, 0, 2711, 2712, 7, 15, 0, 0, 2712, 2713, 7, 2, 0, 0, 2713, 460, 1, 0, 0, 0, 2714, 2715, 7, 5, 0, 0, 2715, 462, 1, 0, 0, 0, 2716, 2717, 7, 7, 0, 0, 2717, 2718, 7, 5, 0, 0, 2718, 464, 1, 0, 0, 0, 2719, 2720, 7, 4, 0, 0, 2720, 2721, 7, 10, 0, 0, 2721, 2722, 7, 11, 0, 0, 2722, 2723, 5, 95, 0, 0, 2723, 2724, 7, 15, 0, 0, 2724, 2725, 7, 20, 0, 0, 2725, 2726, 7, 17, 0, 0, 2726, 2727, 7, 9, 0, 0, 2727, 2728, 7, 2, 0, 0, 2728, 2729, 7, 4, 0, 0, 2729, 466, 1, 0, 0, 0, 2730, 2731, 7, 4, 0, 0, 2731, 2732, 7, 3, 0, 0, 2732, 2733, 7, 15, 0, 0, 2733, 2734, 7, 22, 0, 0, 2734, 468, 1, 0, 0, 0, 2735, 2736, 7, 7, 0, 0, 2736, 2737, 7, 2, 0, 0, 2737, 2738, 7, 15, 0, 0, 2738, 2739, 7, 1, 0, 0, 2739, 2740, 7, 2, 0, 0, 2740, 2741, 5, 95, 0, 0, 2741, 2742, 7, 4, 0, 0, 2742, 2743, 7, 3, 0, 0, 2743, 2744, 7, 15, 0, 0, 2744, 2745, 7, 22, 0, 0, 2745, 470, 1, 0, 0, 0, 2746, 2747, 7, 13, 0, 0, 2747, 2748, 7, 2, 0, 0, 2748, 2749, 7, 4, 0, 0, 2749, 2750, 7, 5, 0, 0, 2750, 2751, 7, 2, 0, 0, 2751, 2752, 7, 15, 0, 0, 2752, 2753, 7, 18, 0, 0, 2753, 2754, 5, 95, 0, 0, 2754, 2755, 7, 4, 0, 0, 2755, 2756, 7, 3, 0, 0, 2756, 2757, 7, 15, 0, 0, 2757, 2758, 7, 22, 0, 0, 2758, 472, 1, 0, 0, 0, 2759, 2760, 7, 5, 0, 0, 2760, 2761, 7, 20, 0, 0, 2761, 2762, 7, 17, 0, 0, 2762, 2763, 7, 2, 0, 0, 2763, 2764, 5, 95, 0, 0, 2764, 2765, 7, 7, 0, 0, 2765, 2766, 7, 8, 0, 0, 2766, 2767, 7, 1, 0, 0, 2767, 2768, 7, 18, 0, 0, 2768, 474, 1, 0, 0, 0, 2769, 2770, 7, 16, 0, 0, 2770, 2771, 7, 8, 0, 0, 2771, 2772, 7, 4, 0, 0, 2772, 2773, 7, 1, 0, 0, 2773, 2774, 7, 18, 0, 0, 2774, 476, 1, 0, 0, 0, 2775, 2776, 7, 14, 0, 0, 2776, 2777, 7, 3, 0, 0, 2777, 2778, 7, 1, 0, 0, 2778, 2779, 7, 18, 0, 0, 2779, 478, 1, 0, 0, 0, 2780, 2781, 7, 15, 0, 0, 2781, 2782, 7, 18, 0, 0, 2782, 2783, 7, 6, 0, 0, 2783, 480, 1, 0, 0, 0, 2784, 2785, 7, 15, 0, 0, 2785, 2786, 7, 18, 0, 0, 2786, 2787, 7, 8, 0, 0, 2787, 2788, 7, 14, 0, 0, 2788, 2789, 7, 2, 0, 0, 2789, 482, 1, 0, 0, 0, 2790, 2791, 7, 3, 0, 0, 2791, 2792, 7, 7, 0, 0, 2792, 2793, 7, 7, 0, 0, 2793, 484, 1, 0, 0, 0, 2794, 2795, 7, 1, 0, 0, 2795, 2796, 7, 20, 0, 0, 2796, 2797, 7, 9, 0, 0, 2797, 2798, 7, 18, 0, 0, 2798, 2799, 7, 4, 0, 0, 2799, 2800, 7, 3, 0, 0, 2800, 2801, 7, 5, 0, 0, 2801, 2802, 7, 18, 0, 0, 2802, 486, 1, 0, 0, 0, 2803, 2804, 7, 17, 0, 0, 2804, 2805, 7, 20, 0, 0, 2805, 2806, 7, 14, 0, 0, 2806, 2807, 7, 18, 0, 0, 2807, 2808, 7, 8, 0, 0, 2808, 2809, 7, 13, 0, 0, 2809, 2810, 7, 14, 0, 0, 2810, 2811, 7, 24, 0, 0, 2811, 488, 1, 0, 0, 0, 2812, 2813, 7, 7, 0, 0, 2813, 2814, 7, 8, 0, 0, 2814, 2815, 7, 19, 0, 0, 2815, 2816, 7, 8, 0, 0, 2816, 2817, 7, 7, 0, 0, 2817, 2818, 7, 2, 0, 0, 2818, 490, 1, 0, 0, 0, 2819, 2820, 7, 3, 0, 0, 2820, 2821, 7, 9, 0, 0, 2821, 2822, 7, 1, 0, 0, 2822, 492, 1, 0, 0, 0, 2823, 2824, 7, 5, 0, 0, 2824, 2825, 7, 9, 0, 0, 2825, 2826, 7, 4, 0, 0, 2826, 2827, 7, 18, 0, 0, 2827, 494, 1, 0, 0, 0, 2828, 2829, 7, 5, 0, 0, 2829, 2830, 7, 2, 0, 0, 2830, 2831, 7, 8, 0, 0, 2831, 2832, 7, 14, 0, 0, 2832, 496, 1, 0, 0, 0, 2833, 2834, 7, 5, 0, 0, 2834, 2835, 7, 2, 0, 0, 2835, 2836, 7, 8, 0, 0, 2836, 2837, 7, 14, 0, 0, 2837, 2838, 7, 8, 0, 0, 2838, 2839, 7, 15, 0, 0, 2839, 2840, 7, 21, 0, 0, 2840, 498, 1, 0, 0, 0, 2841, 2842, 7, 5, 0, 0, 2842, 2843, 7, 10, 0, 0, 2843, 2844, 7, 15, 0, 0, 2844, 2845, 7, 19, 0, 0, 2845, 500, 1, 0, 0, 0, 2846, 2847, 7, 5, 0, 0, 2847, 2848, 7, 4, 0, 0, 2848, 2849, 7, 5, 0, 0, 2849, 2850, 5, 51, 0, 0, 2850, 2851, 5, 50, 0, 0, 2851, 502, 1, 0, 0, 0, 2852, 2853, 7, 2, 0, 0, 2853, 504, 1, 0, 0, 0, 2854, 2855, 7, 2, 0, 0, 2855, 2856, 7, 12, 0, 0, 2856, 2857, 7, 13, 0, 0, 2857, 506, 1, 0, 0, 0, 2858, 2859, 7, 2, 0, 0, 2859, 2860, 7, 12, 0, 0, 2860, 2861, 7, 13, 0, 0, 2861, 2862, 7, 17, 0, 0, 2862, 2863, 5, 49, 0, 0, 2863, 508, 1, 0, 0, 0, 2864, 2865, 7, 16, 0, 0, 2865, 2866, 7, 14, 0, 0, 2866, 2867, 7, 10, 0, 0, 2867, 2868, 7, 10, 0, 0, 2868, 2869, 7, 4, 0, 0, 2869, 510, 1, 0, 0, 0, 2870, 2871, 7, 14, 0, 0, 2871, 2872, 7, 15, 0, 0, 2872, 512, 1, 0, 0, 0, 2873, 2874, 7, 14, 0, 0, 2874, 2875, 7, 10, 0, 0, 2875, 2876, 7, 21, 0, 0, 2876, 514, 1, 0, 0, 0, 2877, 2879, 7, 27, 0, 0, 2878, 2877, 1, 0, 0, 0, 2879, 2880, 1, 0, 0, 0, 2880, 2878, 1, 0, 0, 0, 2880, 2881, 1, 0, 0, 0, 2881, 2888, 1, 0, 0, 0, 2882, 2884, 5, 46, 0, 0, 2883, 2885, 7, 27, 0, 0, 2884, 2883, 1, 0, 0, 0, 2885, 2886, 1, 0, 0, 0, 2886, 2884, 1, 0, 0, 0, 2886, 2887, 1, 0, 0, 0, 2887, 2889, 1, 0, 0, 0, 2888, 2882, 1, 0, 0, 0, 2888, 2889, 1, 0, 0, 0, 2889, 2891, 1, 0, 0, 0, 2890, 2878, 1, 0, 0, 0, 2890, 2891, 1, 0, 0, 0, 2891, 2898, 1, 0, 0, 0, 2892, 2893, 7, 14, 0, 0, 2893, 2894, 7, 10, 0, 0, 2894, 2899, 7, 21, 0, 0, 2895, 2896, 7, 14, 0, 0, 2896, 2897, 7, 10, 0, 0, 2897, 2899, 7, 21, 0, 0, 2898, 2892, 1, 0, 0, 0, 2898, 2895, 1, 0, 0, 0, 2899, 2901, 1, 0, 0, 0, 2900, 2902, 7, 27, 0, 0, 2901, 2900, 1, 0, 0, 0, 2902, 2903, 1, 0, 0, 0, 2903, 2901, 1, 0, 0, 0, 2903, 2904, 1, 0, 0, 0, 2904, 2911, 1, 0, 0, 0, 2905, 2907, 5, 46, 0, 0, 2906, 2908, 7, 27, 0, 0, 2907, 2906, 1, 0, 0, 0, 2908, 2909, 1, 0, 0, 0, 2909, 2907, 1, 0, 0, 0, 2909, 2910, 1, 0, 0, 0, 2910, 2912, 1, 0, 0, 0, 2911, 2905, 1, 0, 0, 0, 2911, 2912, 1, 0, 0, 0, 2912, 516, 1, 0, 0, 0, 2913, 2914, 7, 17, 0, 0, 2914, 2915, 7, 10, 0, 0, 2915, 2916, 7, 7, 0, 0, 2916, 518, 1, 0, 0, 0, 2917, 2918, 7, 17, 0, 0, 2918, 2919, 7, 10, 0, 0, 2919, 2920, 7, 7, 0, 0, 2920, 2921, 7, 20, 0, 0, 2921, 2922, 7, 14, 0, 0, 2922, 2923, 7, 20, 0, 0, 2923, 2924, 7, 1, 0, 0, 2924, 520, 1, 0, 0, 0, 2925, 2926, 7, 13, 0, 0, 2926, 2927, 7, 8, 0, 0, 2927, 522, 1, 0, 0, 0, 2928, 2929, 7, 13, 0, 0, 2929, 2930, 7, 10, 0, 0, 2930, 2931, 7, 1, 0, 0, 2931, 2932, 7, 8, 0, 0, 2932, 2933, 7, 18, 0, 0, 2933, 2934, 7, 8, 0, 0, 2934, 2935, 7, 10, 0, 0, 2935, 2936, 7, 15, 0, 0, 2936, 524, 1, 0, 0, 0, 2937, 2938, 7, 13, 0, 0, 2938, 2939, 7, 10, 0, 0, 2939, 2940, 7, 11, 0, 0, 2940, 526, 1, 0, 0, 0, 2941, 2942, 7, 13, 0, 0, 2942, 2943, 7, 10, 0, 0, 2943, 2944, 7, 11, 0, 0, 2944, 2945, 7, 2, 0, 0, 2945, 2946, 7, 4, 0, 0, 2946, 528, 1, 0, 0, 0, 2947, 2948, 7, 4, 0, 0, 2948, 2949, 7, 3, 0, 0, 2949, 2950, 7, 15, 0, 0, 2950, 2951, 7, 7, 0, 0, 2951, 530, 1, 0, 0, 0, 2952, 2953, 7, 4, 0, 0, 2953, 2954, 7, 10, 0, 0, 2954, 2955, 7, 20, 0, 0, 2955, 2956, 7, 15, 0, 0, 2956, 2957, 7, 7, 0, 0, 2957, 532, 1, 0, 0, 0, 2958, 2959, 7, 1, 0, 0, 2959, 2960, 7, 8, 0, 0, 2960, 2961, 7, 21, 0, 0, 2961, 2962, 7, 15, 0, 0, 2962, 534, 1, 0, 0, 0, 2963, 2964, 7, 1, 0, 0, 2964, 2965, 7, 23, 0, 0, 2965, 2966, 7, 4, 0, 0, 2966, 2967, 7, 18, 0, 0, 2967, 536, 1, 0, 0, 0, 2968, 2969, 7, 18, 0, 0, 2969, 2970, 7, 4, 0, 0, 2970, 2971, 7, 20, 0, 0, 2971, 2972, 7, 15, 0, 0, 2972, 2973, 7, 5, 0, 0, 2973, 2974, 7, 3, 0, 0, 2974, 2975, 7, 18, 0, 0, 2975, 2976, 7, 2, 0, 0, 2976, 538, 1, 0, 0, 0, 2977, 2978, 7, 4, 0, 0, 2978, 2979, 7, 8, 0, 0, 2979, 2980, 7, 15, 0, 0, 2980, 2981, 7, 18, 0, 0, 2981, 540, 1, 0, 0, 0, 2982, 2983, 7, 1, 0, 0, 2983, 2984, 7, 8, 0, 0, 2984, 2985, 7, 21, 0, 0, 2985, 2986, 7, 15, 0, 0, 2986, 2987, 7, 20, 0, 0, 2987, 2988, 7, 17, 0, 0, 2988, 542, 1, 0, 0, 0, 2989, 2990, 7, 3, 0, 0, 2990, 2991, 7, 5, 0, 0, 2991, 2992, 7, 10, 0, 0, 2992, 2993, 7, 1, 0, 0, 2993, 544, 1, 0, 0, 0, 2994, 2995, 7, 3, 0, 0, 2995, 2996, 7, 1, 0, 0, 2996, 2997, 7, 8, 0, 0, 2997, 2998, 7, 15, 0, 0, 2998, 546, 1, 0, 0, 0, 2999, 3000, 7, 3, 0, 0, 3000, 3001, 7, 18, 0, 0, 3001, 3002, 7, 3, 0, 0, 3002, 3003, 7, 15, 0, 0, 3003, 548, 1, 0, 0, 0, 3004, 3005, 7, 3, 0, 0, 3005, 3006, 7, 18, 0, 0, 3006, 3007, 7, 3, 0, 0, 3007, 3008, 7, 15, 0, 0, 3008, 3009, 5, 50, 0, 0, 3009, 550, 1, 0, 0, 0, 3010, 3011, 7, 5, 0, 0, 3011, 3012, 7, 10, 0, 0, 3012, 3013, 7, 1, 0, 0, 3013, 552, 1, 0, 0, 0, 3014, 3015, 7, 5, 0, 0, 3015, 3016, 7, 10, 0, 0, 3016, 3017, 7, 1, 0, 0, 3017, 3018, 7, 6, 0, 0, 3018, 554, 1, 0, 0, 0, 3019, 3020, 7, 5, 0, 0, 3020, 3021, 7, 10, 0, 0, 3021, 3022, 7, 18, 0, 0, 3022, 556, 1, 0, 0, 0, 3023, 3024, 7, 7, 0, 0, 3024, 3025, 7, 2, 0, 0, 3025, 3026, 7, 21, 0, 0, 3026, 3027, 7, 4, 0, 0, 3027, 3028, 7, 2, 0, 0, 3028, 3029, 7, 2, 0, 0, 3029, 3030, 7, 1, 0, 0, 3030, 558, 1, 0, 0, 0, 3031, 3032, 7, 4, 0, 0, 3032, 3033, 7, 3, 0, 0, 3033, 3034, 7, 7, 0, 0, 3034, 3035, 7, 8, 0, 0, 3035, 3036, 7, 3, 0, 0, 3036, 3037, 7, 15, 0, 0, 3037, 3038, 7, 1, 0, 0, 3038, 560, 1, 0, 0, 0, 3039, 3040, 7, 1, 0, 0, 3040, 3041, 7, 8, 0, 0, 3041, 3042, 7, 15, 0, 0, 3042, 562, 1, 0, 0, 0, 3043, 3044, 7, 1, 0, 0, 3044, 3045, 7, 8, 0, 0, 3045, 3046, 7, 15, 0, 0, 3046, 3047, 7, 6, 0, 0, 3047, 564, 1, 0, 0, 0, 3048, 3049, 7, 18, 0, 0, 3049, 3050, 7, 3, 0, 0, 3050, 3051, 7, 15, 0, 0, 3051, 566, 1, 0, 0, 0, 3052, 3053, 7, 17, 0, 0, 3053, 3054, 7, 7, 0, 0, 3054, 3055, 5, 53, 0, 0, 3055, 568, 1, 0, 0, 0, 3056, 3057, 7, 1, 0, 0, 3057, 3058, 7, 6, 0, 0, 3058, 3059, 7, 3, 0, 0, 3059, 3060, 5, 49, 0, 0, 3060, 570, 1, 0, 0, 0, 3061, 3062, 7, 1, 0, 0, 3062, 3063, 7, 6, 0, 0, 3063, 3064, 7, 3, 0, 0, 3064, 3065, 5, 50, 0, 0, 3065, 572, 1, 0, 0, 0, 3066, 3067, 7, 3, 0, 0, 3067, 3068, 7, 7, 0, 0, 3068, 3069, 7, 7, 0, 0, 3069, 3070, 7, 7, 0, 0, 3070, 3071, 7, 3, 0, 0, 3071, 3072, 7, 18, 0, 0, 3072, 3073, 7, 2, 0, 0, 3073, 574, 1, 0, 0, 0, 3074, 3075, 7, 3, 0, 0, 3075, 3076, 7, 7, 0, 0, 3076, 3077, 7, 7, 0, 0, 3077, 3078, 7, 18, 0, 0, 3078, 3079, 7, 8, 0, 0, 3079, 3080, 7, 17, 0, 0, 3080, 3081, 7, 2, 0, 0, 3081, 576, 1, 0, 0, 0, 3082, 3083, 7, 5, 0, 0, 3083, 3084, 7, 20, 0, 0, 3084, 3085, 7, 4, 0, 0, 3085, 3086, 7, 7, 0, 0, 3086, 3087, 7, 3, 0, 0, 3087, 3088, 7, 18, 0, 0, 3088, 3089, 7, 2, 0, 0, 3089, 578, 1, 0, 0, 0, 3090, 3091, 7, 5, 0, 0, 3091, 3092, 7, 20, 0, 0, 3092, 3093, 7, 4, 0, 0, 3093, 3094, 7, 4, 0, 0, 3094, 3095, 7, 2, 0, 0, 3095, 3096, 7, 15, 0, 0, 3096, 3097, 7, 18, 0, 0, 3097, 3098, 5, 95, 0, 0, 3098, 3099, 7, 7, 0, 0, 3099, 3100, 7, 3, 0, 0, 3100, 3101, 7, 18, 0, 0, 3101, 3102, 7, 2, 0, 0, 3102, 580, 1, 0, 0, 0, 3103, 3104, 7, 5, 0, 0, 3104, 3105, 7, 20, 0, 0, 3105, 3106, 7, 4, 0, 0, 3106, 3107, 7, 4, 0, 0, 3107, 3108, 7, 2, 0, 0, 3108, 3109, 7, 15, 0, 0, 3109, 3110, 7, 18, 0, 0, 3110, 3111, 5, 95, 0, 0, 3111, 3112, 7, 18, 0, 0, 3112, 3113, 7, 8, 0, 0, 3113, 3114, 7, 17, 0, 0, 3114, 3115, 7, 2, 0, 0, 3115, 582, 1, 0, 0, 0, 3116, 3117, 7, 5, 0, 0, 3117, 3118, 7, 20, 0, 0, 3118, 3119, 7, 4, 0, 0, 3119, 3120, 7, 4, 0, 0, 3120, 3121, 7, 2, 0, 0, 3121, 3122, 7, 15, 0, 0, 3122, 3123, 7, 18, 0, 0, 3123, 3124, 5, 95, 0, 0, 3124, 3125, 7, 18, 0, 0, 3125, 3126, 7, 8, 0, 0, 3126, 3127, 7, 17, 0, 0, 3127, 3128, 7, 2, 0, 0, 3128, 3129, 7, 1, 0, 0, 3129, 3130, 7, 18, 0, 0, 3130, 3131, 7, 3, 0, 0, 3131, 3132, 7, 17, 0, 0, 3132, 3133, 7, 13, 0, 0, 3133, 584, 1, 0, 0, 0, 3134, 3135, 7, 5, 0, 0, 3135, 3136, 7, 20, 0, 0, 3136, 3137, 7, 4, 0, 0, 3137, 3138, 7, 18, 0, 0, 3138, 3139, 7, 8, 0, 0, 3139, 3140, 7, 17, 0, 0, 3140, 3141, 7, 2, 0, 0, 3141, 586, 1, 0, 0, 0, 3142, 3143, 7, 7, 0, 0, 3143, 3144, 7, 3, 0, 0, 3144, 3145, 7, 18, 0, 0, 3145, 3146, 7, 2, 0, 0, 3146, 588, 1, 0, 0, 0, 3147, 3148, 7, 7, 0, 0, 3148, 3149, 7, 3, 0, 0, 3149, 3150, 7, 18, 0, 0, 3150, 3151, 7, 2, 0, 0, 3151, 3152, 7, 7, 0, 0, 3152, 3153, 7, 8, 0, 0, 3153, 3154, 7, 16, 0, 0, 3154, 3155, 7, 16, 0, 0, 3155, 590, 1, 0, 0, 0, 3156, 3157, 7, 7, 0, 0, 3157, 3158, 7, 3, 0, 0, 3158, 3159, 7, 18, 0, 0, 3159, 3160, 7, 2, 0, 0, 3160, 3161, 5, 95, 0, 0, 3161, 3162, 7, 3, 0, 0, 3162, 3163, 7, 7, 0, 0, 3163, 3164, 7, 7, 0, 0, 3164, 592, 1, 0, 0, 0, 3165, 3166, 7, 7, 0, 0, 3166, 3167, 7, 3, 0, 0, 3167, 3168, 7, 18, 0, 0, 3168, 3169, 7, 2, 0, 0, 3169, 3170, 5, 95, 0, 0, 3170, 3171, 7, 16, 0, 0, 3171, 3172, 7, 10, 0, 0, 3172, 3173, 7, 4, 0, 0, 3173, 3174, 7, 17, 0, 0, 3174, 3175, 7, 3, 0, 0, 3175, 3176, 7, 18, 0, 0, 3176, 594, 1, 0, 0, 0, 3177, 3178, 7, 7, 0, 0, 3178, 3179, 7, 3, 0, 0, 3179, 3180, 7, 18, 0, 0, 3180, 3181, 7, 2, 0, 0, 3181, 3182, 5, 95, 0, 0, 3182, 3183, 7, 1, 0, 0, 3183, 3184, 7, 20, 0, 0, 3184, 3185, 7, 9, 0, 0, 3185, 596, 1, 0, 0, 0, 3186, 3187, 7, 7, 0, 0, 3187, 3188, 7, 3, 0, 0, 3188, 3189, 7, 24, 0, 0, 3189, 3190, 7, 15, 0, 0, 3190, 3191, 7, 3, 0, 0, 3191, 3192, 7, 17, 0, 0, 3192, 3193, 7, 2, 0, 0, 3193, 598, 1, 0, 0, 0, 3194, 3195, 7, 7, 0, 0, 3195, 3196, 7, 3, 0, 0, 3196, 3197, 7, 24, 0, 0, 3197, 3198, 7, 10, 0, 0, 3198, 3199, 7, 16, 0, 0, 3199, 3200, 7, 17, 0, 0, 3200, 3201, 7, 10, 0, 0, 3201, 3202, 7, 15, 0, 0, 3202, 3203, 7, 18, 0, 0, 3203, 3204, 7, 6, 0, 0, 3204, 600, 1, 0, 0, 0, 3205, 3206, 7, 7, 0, 0, 3206, 3207, 7, 3, 0, 0, 3207, 3208, 7, 24, 0, 0, 3208, 3209, 7, 10, 0, 0, 3209, 3210, 7, 16, 0, 0, 3210, 3211, 7, 11, 0, 0, 3211, 3212, 7, 2, 0, 0, 3212, 3213, 7, 2, 0, 0, 3213, 3214, 7, 22, 0, 0, 3214, 602, 1, 0, 0, 0, 3215, 3216, 7, 7, 0, 0, 3216, 3217, 7, 3, 0, 0, 3217, 3218, 7, 24, 0, 0, 3218, 3219, 7, 10, 0, 0, 3219, 3220, 7, 16, 0, 0, 3220, 3221, 7, 24, 0, 0, 3221, 3222, 7, 2, 0, 0, 3222, 3223, 7, 3, 0, 0, 3223, 3224, 7, 4, 0, 0, 3224, 604, 1, 0, 0, 0, 3225, 3226, 7, 7, 0, 0, 3226, 3227, 7, 3, 0, 0, 3227, 3228, 7, 24, 0, 0, 3228, 3229, 5, 95, 0, 0, 3229, 3230, 7, 10, 0, 0, 3230, 3231, 7, 16, 0, 0, 3231, 3232, 5, 95, 0, 0, 3232, 3233, 7, 17, 0, 0, 3233, 3234, 7, 10, 0, 0, 3234, 3235, 7, 15, 0, 0, 3235, 3236, 7, 18, 0, 0, 3236, 3237, 7, 6, 0, 0, 3237, 606, 1, 0, 0, 0, 3238, 3239, 7, 7, 0, 0, 3239, 3240, 7, 3, 0, 0, 3240, 3241, 7, 24, 0, 0, 3241, 3242, 5, 95, 0, 0, 3242, 3243, 7, 10, 0, 0, 3243, 3244, 7, 16, 0, 0, 3244, 3245, 5, 95, 0, 0, 3245, 3246, 7, 11, 0, 0, 3246, 3247, 7, 2, 0, 0, 3247, 3248, 7, 2, 0, 0, 3248, 3249, 7, 22, 0, 0, 3249, 608, 1, 0, 0, 0, 3250, 3251, 7, 2, 0, 0, 3251, 3252, 7, 12, 0, 0, 3252, 3253, 7, 18, 0, 0, 3253, 3254, 7, 4, 0, 0, 3254, 3255, 7, 3, 0, 0, 3255, 3256, 7, 5, 0, 0, 3256, 3257, 7, 18, 0, 0, 3257, 610, 1, 0, 0, 0, 3258, 3259, 7, 16, 0, 0, 3259, 3260, 7, 4, 0, 0, 3260, 3261, 7, 10, 0, 0, 3261, 3262, 7, 17, 0, 0, 3262, 3263, 5, 95, 0, 0, 3263, 3264, 7, 7, 0, 0, 3264, 3265, 7, 3, 0, 0, 3265, 3266, 7, 24, 0, 0, 3266, 3267, 7, 1, 0, 0, 3267, 612, 1, 0, 0, 0, 3268, 3269, 7, 16, 0, 0, 3269, 3270, 7, 4, 0, 0, 3270, 3271, 7, 10, 0, 0, 3271, 3272, 7, 17, 0, 0, 3272, 3273, 5, 95, 0, 0, 3273, 3274, 7, 20, 0, 0, 3274, 3275, 7, 15, 0, 0, 3275, 3276, 7, 8, 0, 0, 3276, 3277, 7, 12, 0, 0, 3277, 3278, 7, 18, 0, 0, 3278, 3279, 7, 8, 0, 0, 3279, 3280, 7, 17, 0, 0, 3280, 3281, 7, 2, 0, 0, 3281, 614, 1, 0, 0, 0, 3282, 3283, 7, 21, 0, 0, 3283, 3284, 7, 2, 0, 0, 3284, 3285, 7, 18, 0, 0, 3285, 3286, 5, 95, 0, 0, 3286, 3287, 7, 16, 0, 0, 3287, 3288, 7, 10, 0, 0, 3288, 3289, 7, 4, 0, 0, 3289, 3290, 7, 17, 0, 0, 3290, 3291, 7, 3, 0, 0, 3291, 3292, 7, 18, 0, 0, 3292, 616, 1, 0, 0, 0, 3293, 3294, 7, 14, 0, 0, 3294, 3295, 7, 3, 0, 0, 3295, 3296, 7, 1, 0, 0, 3296, 3297, 7, 18, 0, 0, 3297, 3298, 5, 95, 0, 0, 3298, 3299, 7, 7, 0, 0, 3299, 3300, 7, 3, 0, 0, 3300, 3301, 7, 24, 0, 0, 3301, 618, 1, 0, 0, 0, 3302, 3303, 7, 14, 0, 0, 3303, 3304, 7, 10, 0, 0, 3304, 3305, 7, 5, 0, 0, 3305, 3306, 7, 3, 0, 0, 3306, 3307, 7, 14, 0, 0, 3307, 3308, 7, 18, 0, 0, 3308, 3309, 7, 8, 0, 0, 3309, 3310, 7, 17, 0, 0, 3310, 3311, 7, 2, 0, 0, 3311, 620, 1, 0, 0, 0, 3312, 3313, 7, 14, 0, 0, 3313, 3314, 7, 10, 0, 0, 3314, 3315, 7, 5, 0, 0, 3315, 3316, 7, 3, 0, 0, 3316, 3317, 7, 14, 0, 0, 3317, 3318, 7, 18, 0, 0, 3318, 3319, 7, 8, 0, 0, 3319, 3320, 7, 17, 0, 0, 3320, 3321, 7, 2, 0, 0, 3321, 3322, 7, 1, 0, 0, 3322, 3323, 7, 18, 0, 0, 3323, 3324, 7, 3, 0, 0, 3324, 3325, 7, 17, 0, 0, 3325, 3326, 7, 13, 0, 0, 3326, 622, 1, 0, 0, 0, 3327, 3328, 7, 17, 0, 0, 3328, 3329, 7, 3, 0, 0, 3329, 3330, 7, 22, 0, 0, 3330, 3331, 7, 2, 0, 0, 3331, 3332, 7, 7, 0, 0, 3332, 3333, 7, 3, 0, 0, 3333, 3334, 7, 18, 0, 0, 3334, 3335, 7, 2, 0, 0, 3335, 624, 1, 0, 0, 0, 3336, 3337, 7, 17, 0, 0, 3337, 3338, 7, 3, 0, 0, 3338, 3339, 7, 22, 0, 0, 3339, 3340, 7, 2, 0, 0, 3340, 3341, 7, 18, 0, 0, 3341, 3342, 7, 8, 0, 0, 3342, 3343, 7, 17, 0, 0, 3343, 3344, 7, 2, 0, 0, 3344, 626, 1, 0, 0, 0, 3345, 3346, 7, 17, 0, 0, 3346, 3347, 7, 10, 0, 0, 3347, 3348, 7, 15, 0, 0, 3348, 3349, 7, 18, 0, 0, 3349, 3350, 7, 6, 0, 0, 3350, 3351, 7, 15, 0, 0, 3351, 3352, 7, 3, 0, 0, 3352, 3353, 7, 17, 0, 0, 3353, 3354, 7, 2, 0, 0, 3354, 628, 1, 0, 0, 0, 3355, 3356, 7, 15, 0, 0, 3356, 3357, 7, 10, 0, 0, 3357, 3358, 7, 11, 0, 0, 3358, 630, 1, 0, 0, 0, 3359, 3360, 7, 13, 0, 0, 3360, 3361, 7, 2, 0, 0, 3361, 3362, 7, 4, 0, 0, 3362, 3363, 7, 8, 0, 0, 3363, 3364, 7, 10, 0, 0, 3364, 3365, 7, 7, 0, 0, 3365, 3366, 5, 95, 0, 0, 3366, 3367, 7, 3, 0, 0, 3367, 3368, 7, 7, 0, 0, 3368, 3369, 7, 7, 0, 0, 3369, 632, 1, 0, 0, 0, 3370, 3371, 7, 13, 0, 0, 3371, 3372, 7, 2, 0, 0, 3372, 3373, 7, 4, 0, 0, 3373, 3374, 7, 8, 0, 0, 3374, 3375, 7, 10, 0, 0, 3375, 3376, 7, 7, 0, 0, 3376, 3377, 5, 95, 0, 0, 3377, 3378, 7, 7, 0, 0, 3378, 3379, 7, 8, 0, 0, 3379, 3380, 7, 16, 0, 0, 3380, 3381, 7, 16, 0, 0, 3381, 634, 1, 0, 0, 0, 3382, 3383, 7, 1, 0, 0, 3383, 3384, 7, 2, 0, 0, 3384, 3385, 7, 5, 0, 0, 3385, 3386, 5, 95, 0, 0, 3386, 3387, 7, 18, 0, 0, 3387, 3388, 7, 10, 0, 0, 3388, 3389, 5, 95, 0, 0, 3389, 3390, 7, 18, 0, 0, 3390, 3391, 7, 8, 0, 0, 3391, 3392, 7, 17, 0, 0, 3392, 3393, 7, 2, 0, 0, 3393, 636, 1, 0, 0, 0, 3394, 3395, 7, 1, 0, 0, 3395, 3396, 7, 18, 0, 0, 3396, 3397, 7, 4, 0, 0, 3397, 3398, 5, 95, 0, 0, 3398, 3399, 7, 18, 0, 0, 3399, 3400, 7, 10, 0, 0, 3400, 3401, 5, 95, 0, 0, 3401, 3402, 7, 7, 0, 0, 3402, 3403, 7, 3, 0, 0, 3403, 3404, 7, 18, 0, 0, 3404, 3405, 7, 2, 0, 0, 3405, 638, 1, 0, 0, 0, 3406, 3407, 7, 1, 0, 0, 3407, 3408, 7, 20, 0, 0, 3408, 3409, 7, 9, 0, 0, 3409, 3410, 7, 7, 0, 0, 3410, 3411, 7, 3, 0, 0, 3411, 3412, 7, 18, 0, 0, 3412, 3413, 7, 2, 0, 0, 3413, 640, 1, 0, 0, 0, 3414, 3415, 7, 1, 0, 0, 3415, 3416, 7, 20, 0, 0, 3416, 3417, 7, 9, 0, 0, 3417, 3418, 7, 18, 0, 0, 3418, 3419, 7, 8, 0, 0, 3419, 3420, 7, 17, 0, 0, 3420, 3421, 7, 2, 0, 0, 3421, 642, 1, 0, 0, 0, 3422, 3423, 7, 1, 0, 0, 3423, 3424, 7, 24, 0, 0, 3424, 3425, 7, 1, 0, 0, 3425, 3426, 7, 7, 0, 0, 3426, 3427, 7, 3, 0, 0, 3427, 3428, 7, 18, 0, 0, 3428, 3429, 7, 2, 0, 0, 3429, 644, 1, 0, 0, 0, 3430, 3431, 7, 18, 0, 0, 3431, 3432, 7, 8, 0, 0, 3432, 3433, 7, 17, 0, 0, 3433, 3434, 7, 2, 0, 0, 3434, 646, 1, 0, 0, 0, 3435, 3436, 7, 18, 0, 0, 3436, 3437, 7, 8, 0, 0, 3437, 3438, 7, 17, 0, 0, 3438, 3439, 7, 2, 0, 0, 3439, 3440, 7, 7, 0, 0, 3440, 3441, 7, 8, 0, 0, 3441, 3442, 7, 16, 0, 0, 3442, 3443, 7, 16, 0, 0, 3443, 648, 1, 0, 0, 0, 3444, 3445, 7, 18, 0, 0, 3445, 3446, 7, 8, 0, 0, 3446, 3447, 7, 17, 0, 0, 3447, 3448, 7, 2, 0, 0, 3448, 3449, 7, 1, 0, 0, 3449, 3450, 7, 18, 0, 0, 3450, 3451, 7, 3, 0, 0, 3451, 3452, 7, 17, 0, 0, 3452, 3453, 7, 13, 0, 0, 3453, 650, 1, 0, 0, 0, 3454, 3455, 7, 18, 0, 0, 3455, 3456, 7, 8, 0, 0, 3456, 3457, 7, 17, 0, 0, 3457, 3458, 7, 2, 0, 0, 3458, 3459, 7, 1, 0, 0, 3459, 3460, 7, 18, 0, 0, 3460, 3461, 7, 3, 0, 0, 3461, 3462, 7, 17, 0, 0, 3462, 3463, 7, 13, 0, 0, 3463, 3464, 7, 3, 0, 0, 3464, 3465, 7, 7, 0, 0, 3465, 3466, 7, 7, 0, 0, 3466, 652, 1, 0, 0, 0, 3467, 3468, 7, 18, 0, 0, 3468, 3469, 7, 8, 0, 0, 3469, 3470, 7, 17, 0, 0, 3470, 3471, 7, 2, 0, 0, 3471, 3472, 7, 1, 0, 0, 3472, 3473, 7, 18, 0, 0, 3473, 3474, 7, 3, 0, 0, 3474, 3475, 7, 17, 0, 0, 3475, 3476, 7, 13, 0, 0, 3476, 3477, 7, 7, 0, 0, 3477, 3478, 7, 8, 0, 0, 3478, 3479, 7, 16, 0, 0, 3479, 3480, 7, 16, 0, 0, 3480, 654, 1, 0, 0, 0, 3481, 3482, 7, 18, 0, 0, 3482, 3483, 7, 8, 0, 0, 3483, 3484, 7, 17, 0, 0, 3484, 3485, 7, 2, 0, 0, 3485, 3486, 5, 95, 0, 0, 3486, 3487, 7, 16, 0, 0, 3487, 3488, 7, 10, 0, 0, 3488, 3489, 7, 4, 0, 0, 3489, 3490, 7, 17, 0, 0, 3490, 3491, 7, 3, 0, 0, 3491, 3492, 7, 18, 0, 0, 3492, 656, 1, 0, 0, 0, 3493, 3494, 7, 18, 0, 0, 3494, 3495, 7, 8, 0, 0, 3495, 3496, 7, 17, 0, 0, 3496, 3497, 7, 2, 0, 0, 3497, 3498, 5, 95, 0, 0, 3498, 3499, 7, 18, 0, 0, 3499, 3500, 7, 10, 0, 0, 3500, 3501, 5, 95, 0, 0, 3501, 3502, 7, 1, 0, 0, 3502, 3503, 7, 2, 0, 0, 3503, 3504, 7, 5, 0, 0, 3504, 658, 1, 0, 0, 0, 3505, 3506, 7, 18, 0, 0, 3506, 3507, 7, 10, 0, 0, 3507, 3508, 5, 95, 0, 0, 3508, 3509, 7, 7, 0, 0, 3509, 3510, 7, 3, 0, 0, 3510, 3511, 7, 24, 0, 0, 3511, 3512, 7, 1, 0, 0, 3512, 660, 1, 0, 0, 0, 3513, 3514, 7, 18, 0, 0, 3514, 3515, 7, 10, 0, 0, 3515, 3516, 5, 95, 0, 0, 3516, 3517, 7, 1, 0, 0, 3517, 3518, 7, 2, 0, 0, 3518, 3519, 7, 5, 0, 0, 3519, 3520, 7, 10, 0, 0, 3520, 3521, 7, 15, 0, 0, 3521, 3522, 7, 7, 0, 0, 3522, 3523, 7, 1, 0, 0, 3523, 662, 1, 0, 0, 0, 3524, 3525, 7, 20, 0, 0, 3525, 3526, 7, 15, 0, 0, 3526, 3527, 7, 8, 0, 0, 3527, 3528, 7, 12, 0, 0, 3528, 3529, 5, 95, 0, 0, 3529, 3530, 7, 18, 0, 0, 3530, 3531, 7, 8, 0, 0, 3531, 3532, 7, 17, 0, 0, 3532, 3533, 7, 2, 0, 0, 3533, 3534, 7, 1, 0, 0, 3534, 3535, 7, 18, 0, 0, 3535, 3536, 7, 3, 0, 0, 3536, 3537, 7, 17, 0, 0, 3537, 3538, 7, 13, 0, 0, 3538, 664, 1, 0, 0, 0, 3539, 3540, 7, 20, 0, 0, 3540, 3541, 7, 18, 0, 0, 3541, 3542, 7, 5, 0, 0, 3542, 3543, 5, 95, 0, 0, 3543, 3544, 7, 7, 0, 0, 3544, 3545, 7, 3, 0, 0, 3545, 3546, 7, 18, 0, 0, 3546, 3547, 7, 2, 0, 0, 3547, 666, 1, 0, 0, 0, 3548, 3549, 7, 20, 0, 0, 3549, 3550, 7, 18, 0, 0, 3550, 3551, 7, 5, 0, 0, 3551, 3552, 5, 95, 0, 0, 3552, 3553, 7, 18, 0, 0, 3553, 3554, 7, 8, 0, 0, 3554, 3555, 7, 17, 0, 0, 3555, 3556, 7, 2, 0, 0, 3556, 668, 1, 0, 0, 0, 3557, 3558, 7, 20, 0, 0, 3558, 3559, 7, 18, 0, 0, 3559, 3560, 7, 5, 0, 0, 3560, 3561, 5, 95, 0, 0, 3561, 3562, 7, 18, 0, 0, 3562, 3563, 7, 8, 0, 0, 3563, 3564, 7, 17, 0, 0, 3564, 3565, 7, 2, 0, 0, 3565, 3566, 7, 1, 0, 0, 3566, 3567, 7, 18, 0, 0, 3567, 3568, 7, 3, 0, 0, 3568, 3569, 7, 17, 0, 0, 3569, 3570, 7, 13, 0, 0, 3570, 670, 1, 0, 0, 0, 3571, 3572, 7, 11, 0, 0, 3572, 3573, 7, 2, 0, 0, 3573, 3574, 7, 2, 0, 0, 3574, 3575, 7, 22, 0, 0, 3575, 3576, 7, 7, 0, 0, 3576, 3577, 7, 3, 0, 0, 3577, 3578, 7, 24, 0, 0, 3578, 672, 1, 0, 0, 0, 3579, 3580, 7, 24, 0, 0, 3580, 3581, 7, 2, 0, 0, 3581, 3582, 7, 3, 0, 0, 3582, 3583, 7, 4, 0, 0, 3583, 3584, 7, 11, 0, 0, 3584, 3585, 7, 2, 0, 0, 3585, 3586, 7, 2, 0, 0, 3586, 3587, 7, 22, 0, 0, 3587, 674, 1, 0, 0, 0, 3588, 3589, 7, 1, 0, 0, 3589, 3590, 7, 18, 0, 0, 3590, 3591, 7, 4, 0, 0, 3591, 3592, 7, 16, 0, 0, 3592, 3593, 7, 18, 0, 0, 3593, 3594, 7, 8, 0, 0, 3594, 3595, 7, 17, 0, 0, 3595, 3596, 7, 2, 0, 0, 3596, 676, 1, 0, 0, 0, 3597, 3598, 7, 1, 0, 0, 3598, 3599, 7, 20, 0, 0, 3599, 3600, 7, 9, 0, 0, 3600, 3601, 7, 1, 0, 0, 3601, 3602, 7, 18, 0, 0, 3602, 3603, 7, 4, 0, 0, 3603, 678, 1, 0, 0, 0, 3604, 3605, 7, 1, 0, 0, 3605, 3606, 7, 20, 0, 0, 3606, 3607, 7, 9, 0, 0, 3607, 3608, 7, 1, 0, 0, 3608, 3609, 7, 18, 0, 0, 3609, 3610, 7, 4, 0, 0, 3610, 3611, 7, 8, 0, 0, 3611, 3612, 7, 15, 0, 0, 3612, 3613, 7, 21, 0, 0, 3613, 680, 1, 0, 0, 0, 3614, 3615, 7, 14, 0, 0, 3615, 3616, 7, 18, 0, 0, 3616, 3617, 7, 4, 0, 0, 3617, 3618, 7, 8, 0, 0, 3618, 3619, 7, 17, 0, 0, 3619, 682, 1, 0, 0, 0, 3620, 3621, 7, 4, 0, 0, 3621, 3622, 7, 18, 0, 0, 3622, 3623, 7, 4, 0, 0, 3623, 3624, 7, 8, 0, 0, 3624, 3625, 7, 17, 0, 0, 3625, 684, 1, 0, 0, 0, 3626, 3627, 7, 18, 0, 0, 3627, 3628, 7, 4, 0, 0, 3628, 3629, 7, 8, 0, 0, 3629, 3630, 7, 17, 0, 0, 3630, 686, 1, 0, 0, 0, 3631, 3632, 7, 18, 0, 0, 3632, 3633, 7, 10, 0, 0, 3633, 688, 1, 0, 0, 0, 3634, 3635, 7, 14, 0, 0, 3635, 3636, 7, 10, 0, 0, 3636, 3637, 7, 11, 0, 0, 3637, 3638, 7, 2, 0, 0, 3638, 3639, 7, 4, 0, 0, 3639, 690, 1, 0, 0, 0, 3640, 3641, 7, 20, 0, 0, 3641, 3642, 7, 13, 0, 0, 3642, 3643, 7, 13, 0, 0, 3643, 3644, 7, 2, 0, 0, 3644, 3645, 7, 4, 0, 0, 3645, 692, 1, 0, 0, 0, 3646, 3647, 7, 5, 0, 0, 3647, 3648, 7, 10, 0, 0, 3648, 3649, 7, 15, 0, 0, 3649, 3650, 7, 5, 0, 0, 3650, 3651, 7, 3, 0, 0, 3651, 3652, 7, 18, 0, 0, 3652, 694, 1, 0, 0, 0, 3653, 3654, 7, 5, 0, 0, 3654, 3655, 7, 10, 0, 0, 3655, 3656, 7, 15, 0, 0, 3656, 3657, 7, 5, 0, 0, 3657, 3658, 7, 3, 0, 0, 3658, 3659, 7, 18, 0, 0, 3659, 3660, 5, 95, 0, 0, 3660, 3661, 7, 11, 0, 0, 3661, 3662, 7, 1, 0, 0, 3662, 696, 1, 0, 0, 0, 3663, 3664, 7, 14, 0, 0, 3664, 3665, 7, 2, 0, 0, 3665, 3666, 7, 15, 0, 0, 3666, 3667, 7, 21, 0, 0, 3667, 3668, 7, 18, 0, 0, 3668, 3669, 7, 6, 0, 0, 3669, 698, 1, 0, 0, 0, 3670, 3671, 7, 1, 0, 0, 3671, 3672, 7, 18, 0, 0, 3672, 3673, 7, 4, 0, 0, 3673, 3674, 7, 5, 0, 0, 3674, 3675, 7, 17, 0, 0, 3675, 3676, 7, 13, 0, 0, 3676, 700, 1, 0, 0, 0, 3677, 3678, 7, 4, 0, 0, 3678, 3679, 7, 8, 0, 0, 3679, 3680, 7, 21, 0, 0, 3680, 3681, 7, 6, 0, 0, 3681, 3682, 7, 18, 0, 0, 3682, 702, 1, 0, 0, 0, 3683, 3684, 7, 14, 0, 0, 3684, 3685, 7, 2, 0, 0, 3685, 3686, 7, 16, 0, 0, 3686, 3687, 7, 18, 0, 0, 3687, 704, 1, 0, 0, 0, 3688, 3689, 7, 3, 0, 0, 3689, 3690, 7, 1, 0, 0, 3690, 3691, 7, 5, 0, 0, 3691, 3692, 7, 8, 0, 0, 3692, 3693, 7, 8, 0, 0, 3693, 706, 1, 0, 0, 0, 3694, 3695, 7, 14, 0, 0, 3695, 3696, 7, 10, 0, 0, 3696, 3697, 7, 5, 0, 0, 3697, 3698, 7, 3, 0, 0, 3698, 3699, 7, 18, 0, 0, 3699, 3700, 7, 2, 0, 0, 3700, 708, 1, 0, 0, 0, 3701, 3702, 7, 4, 0, 0, 3702, 3703, 7, 2, 0, 0, 3703, 3704, 7, 13, 0, 0, 3704, 3705, 7, 14, 0, 0, 3705, 3706, 7, 3, 0, 0, 3706, 3707, 7, 5, 0, 0, 3707, 3708, 7, 2, 0, 0, 3708, 710, 1, 0, 0, 0, 3709, 3710, 7, 4, 0, 0, 3710, 3711, 7, 2, 0, 0, 3711, 3712, 7, 19, 0, 0, 3712, 3713, 7, 2, 0, 0, 3713, 3714, 7, 4, 0, 0, 3714, 3715, 7, 1, 0, 0, 3715, 3716, 7, 2, 0, 0, 3716, 712, 1, 0, 0, 0, 3717, 3718, 7, 5, 0, 0, 3718, 3719, 7, 3, 0, 0, 3719, 3720, 7, 1, 0, 0, 3720, 3721, 7, 18, 0, 0, 3721, 714, 1, 0, 0, 0, 3722, 3723, 7, 14, 0, 0, 3723, 3724, 7, 8, 0, 0, 3724, 3725, 7, 22, 0, 0, 3725, 3726, 7, 2, 0, 0, 3726, 716, 1, 0, 0, 0, 3727, 3728, 7, 8, 0, 0, 3728, 3729, 7, 1, 0, 0, 3729, 3730, 7, 15, 0, 0, 3730, 3731, 7, 20, 0, 0, 3731, 3732, 7, 14, 0, 0, 3732, 3733, 7, 14, 0, 0, 3733, 718, 1, 0, 0, 0, 3734, 3735, 7, 8, 0, 0, 3735, 3736, 7, 1, 0, 0, 3736, 3737, 7, 15, 0, 0, 3737, 3738, 7, 10, 0, 0, 3738, 3739, 7, 18, 0, 0, 3739, 3740, 7, 15, 0, 0, 3740, 3741, 7, 20, 0, 0, 3741, 3742, 7, 14, 0, 0, 3742, 3743, 7, 14, 0, 0, 3743, 720, 1, 0, 0, 0, 3744, 3745, 7, 5, 0, 0, 3745, 3746, 7, 8, 0, 0, 3746, 3747, 7, 7, 0, 0, 3747, 3748, 7, 4, 0, 0, 3748, 3749, 7, 17, 0, 0, 3749, 3750, 7, 3, 0, 0, 3750, 3751, 7, 18, 0, 0, 3751, 3752, 7, 5, 0, 0, 3752, 3753, 7, 6, 0, 0, 3753, 722, 1, 0, 0, 0, 3754, 3755, 7, 9, 0, 0, 3755, 3756, 7, 2, 0, 0, 3756, 3757, 7, 18, 0, 0, 3757, 3758, 7, 11, 0, 0, 3758, 3759, 7, 2, 0, 0, 3759, 3760, 7, 2, 0, 0, 3760, 3761, 7, 15, 0, 0, 3761, 724, 1, 0, 0, 0, 3762, 3763, 7, 8, 0, 0, 3763, 3764, 7, 1, 0, 0, 3764, 3765, 7, 13, 0, 0, 3765, 3766, 7, 4, 0, 0, 3766, 3767, 7, 2, 0, 0, 3767, 3768, 7, 1, 0, 0, 3768, 3769, 7, 2, 0, 0, 3769, 3770, 7, 15, 0, 0, 3770, 3771, 7, 18, 0, 0, 3771, 726, 1, 0, 0, 0, 3772, 3773, 7, 8, 0, 0, 3773, 3774, 7, 1, 0, 0, 3774, 3775, 7, 2, 0, 0, 3775, 3776, 7, 17, 0, 0, 3776, 3777, 7, 13, 0, 0, 3777, 3778, 7, 18, 0, 0, 3778, 3779, 7, 24, 0, 0, 3779, 728, 1, 0, 0, 0, 3780, 3781, 7, 8, 0, 0, 3781, 3782, 7, 1, 0, 0, 3782, 3783, 7, 9, 0, 0, 3783, 3784, 7, 14, 0, 0, 3784, 3785, 7, 3, 0, 0, 3785, 3786, 7, 15, 0, 0, 3786, 3787, 7, 22, 0, 0, 3787, 730, 1, 0, 0, 0, 3788, 3789, 7, 3, 0, 0, 3789, 3790, 7, 4, 0, 0, 3790, 3791, 7, 4, 0, 0, 3791, 3792, 7, 3, 0, 0, 3792, 3793, 7, 24, 0, 0, 3793, 732, 1, 0, 0, 0, 3794, 3795, 7, 3, 0, 0, 3795, 3796, 7, 4, 0, 0, 3796, 3797, 7, 4, 0, 0, 3797, 3798, 7, 3, 0, 0, 3798, 3799, 7, 24, 0, 0, 3799, 3800, 5, 95, 0, 0, 3800, 3801, 7, 14, 0, 0, 3801, 3802, 7, 2, 0, 0, 3802, 3803, 7, 15, 0, 0, 3803, 3804, 7, 21, 0, 0, 3804, 3805, 7, 18, 0, 0, 3805, 3806, 7, 6, 0, 0, 3806, 734, 1, 0, 0, 0, 3807, 3808, 7, 17, 0, 0, 3808, 3809, 7, 19, 0, 0, 3809, 3810, 7, 25, 0, 0, 3810, 3811, 7, 10, 0, 0, 3811, 3812, 7, 8, 0, 0, 3812, 3813, 7, 15, 0, 0, 3813, 736, 1, 0, 0, 0, 3814, 3815, 7, 16, 0, 0, 3815, 3816, 7, 10, 0, 0, 3816, 3817, 7, 4, 0, 0, 3817, 3818, 7, 3, 0, 0, 3818, 3819, 7, 14, 0, 0, 3819, 3820, 7, 14, 0, 0, 3820, 738, 1, 0, 0, 0, 3821, 3822, 7, 16, 0, 0, 3822, 3823, 7, 8, 0, 0, 3823, 3824, 7, 14, 0, 0, 3824, 3825, 7, 18, 0, 0, 3825, 3826, 7, 2, 0, 0, 3826, 3827, 7, 4, 0, 0, 3827, 740, 1, 0, 0, 0, 3828, 3829, 7, 18, 0, 0, 3829, 3830, 7, 4, 0, 0, 3830, 3831, 7, 3, 0, 0, 3831, 3832, 7, 15, 0, 0, 3832, 3833, 7, 1, 0, 0, 3833, 3834, 7, 16, 0, 0, 3834, 3835, 7, 10, 0, 0, 3835, 3836, 7, 4, 0, 0, 3836, 3837, 7, 17, 0, 0, 3837, 742, 1, 0, 0, 0, 3838, 3839, 7, 4, 0, 0, 3839, 3840, 7, 2, 0, 0, 3840, 3841, 7, 7, 0, 0, 3841, 3842, 7, 20, 0, 0, 3842, 3843, 7, 5, 0, 0, 3843, 3844, 7, 2, 0, 0, 3844, 744, 1, 0, 0, 0, 3845, 3846, 7, 25, 0, 0, 3846, 3847, 7, 1, 0, 0, 3847, 3848, 7, 10, 0, 0, 3848, 3849, 7, 15, 0, 0, 3849, 3850, 5, 95, 0, 0, 3850, 3851, 7, 19, 0, 0, 3851, 3852, 7, 3, 0, 0, 3852, 3853, 7, 14, 0, 0, 3853, 3854, 7, 8, 0, 0, 3854, 3855, 7, 7, 0, 0, 3855, 746, 1, 0, 0, 0, 3856, 3857, 7, 25, 0, 0, 3857, 3858, 7, 1, 0, 0, 3858, 3859, 7, 10, 0, 0, 3859, 3860, 7, 15, 0, 0, 3860, 748, 1, 0, 0, 0, 3861, 3862, 7, 25, 0, 0, 3862, 3863, 7, 1, 0, 0, 3863, 3864, 7, 10, 0, 0, 3864, 3865, 7, 15, 0, 0, 3865, 3866, 5, 95, 0, 0, 3866, 3867, 7, 10, 0, 0, 3867, 3868, 7, 9, 0, 0, 3868, 3869, 7, 25, 0, 0, 3869, 3870, 7, 2, 0, 0, 3870, 3871, 7, 5, 0, 0, 3871, 3872, 7, 18, 0, 0, 3872, 750, 1, 0, 0, 0, 3873, 3874, 7, 25, 0, 0, 3874, 3875, 7, 1, 0, 0, 3875, 3876, 7, 10, 0, 0, 3876, 3877, 7, 15, 0, 0, 3877, 3878, 5, 95, 0, 0, 3878, 3879, 7, 3, 0, 0, 3879, 3880, 7, 4, 0, 0, 3880, 3881, 7, 4, 0, 0, 3881, 3882, 7, 3, 0, 0, 3882, 3883, 7, 24, 0, 0, 3883, 752, 1, 0, 0, 0, 3884, 3885, 7, 25, 0, 0, 3885, 3886, 7, 1, 0, 0, 3886, 3887, 7, 10, 0, 0, 3887, 3888, 7, 15, 0, 0, 3888, 3889, 5, 95, 0, 0, 3889, 3890, 7, 3, 0, 0, 3890, 3891, 7, 4, 0, 0, 3891, 3892, 7, 4, 0, 0, 3892, 3893, 7, 3, 0, 0, 3893, 3894, 7, 24, 0, 0, 3894, 3895, 5, 95, 0, 0, 3895, 3896, 7, 14, 0, 0, 3896, 3897, 7, 2, 0, 0, 3897, 3898, 7, 15, 0, 0, 3898, 3899, 7, 21, 0, 0, 3899, 3900, 7, 18, 0, 0, 3900, 3901, 7, 6, 0, 0, 3901, 754, 1, 0, 0, 0, 3902, 3903, 7, 25, 0, 0, 3903, 3904, 7, 1, 0, 0, 3904, 3905, 7, 10, 0, 0, 3905, 3906, 7, 15, 0, 0, 3906, 3907, 5, 95, 0, 0, 3907, 3908, 7, 2, 0, 0, 3908, 3909, 7, 12, 0, 0, 3909, 3910, 7, 18, 0, 0, 3910, 3911, 7, 4, 0, 0, 3911, 3912, 7, 3, 0, 0, 3912, 3913, 7, 5, 0, 0, 3913, 3914, 7, 18, 0, 0, 3914, 756, 1, 0, 0, 0, 3915, 3916, 7, 25, 0, 0, 3916, 3917, 7, 1, 0, 0, 3917, 3918, 7, 10, 0, 0, 3918, 3919, 7, 15, 0, 0, 3919, 3920, 5, 95, 0, 0, 3920, 3921, 7, 22, 0, 0, 3921, 3922, 7, 2, 0, 0, 3922, 3923, 7, 24, 0, 0, 3923, 3924, 7, 1, 0, 0, 3924, 758, 1, 0, 0, 0, 3925, 3926, 7, 25, 0, 0, 3926, 3927, 7, 1, 0, 0, 3927, 3928, 7, 10, 0, 0, 3928, 3929, 7, 15, 0, 0, 3929, 3930, 5, 95, 0, 0, 3930, 3931, 7, 1, 0, 0, 3931, 3932, 7, 2, 0, 0, 3932, 3933, 7, 18, 0, 0, 3933, 760, 1, 0, 0, 0, 3934, 3935, 7, 25, 0, 0, 3935, 3936, 7, 1, 0, 0, 3936, 3937, 7, 10, 0, 0, 3937, 3938, 7, 15, 0, 0, 3938, 3939, 5, 95, 0, 0, 3939, 3940, 7, 7, 0, 0, 3940, 3941, 7, 2, 0, 0, 3941, 3942, 7, 14, 0, 0, 3942, 3943, 7, 2, 0, 0, 3943, 3944, 7, 18, 0, 0, 3944, 3945, 7, 2, 0, 0, 3945, 762, 1, 0, 0, 0, 3946, 3947, 7, 25, 0, 0, 3947, 3948, 7, 1, 0, 0, 3948, 3949, 7, 10, 0, 0, 3949, 3950, 7, 15, 0, 0, 3950, 3951, 5, 95, 0, 0, 3951, 3952, 7, 3, 0, 0, 3952, 3953, 7, 13, 0, 0, 3953, 3954, 7, 13, 0, 0, 3954, 3955, 7, 2, 0, 0, 3955, 3956, 7, 15, 0, 0, 3956, 3957, 7, 7, 0, 0, 3957, 764, 1, 0, 0, 0, 3958, 3959, 7, 25, 0, 0, 3959, 3960, 7, 1, 0, 0, 3960, 3961, 7, 10, 0, 0, 3961, 3962, 7, 15, 0, 0, 3962, 3963, 5, 95, 0, 0, 3963, 3964, 7, 2, 0, 0, 3964, 3965, 7, 12, 0, 0, 3965, 3966, 7, 18, 0, 0, 3966, 3967, 7, 2, 0, 0, 3967, 3968, 7, 15, 0, 0, 3968, 3969, 7, 7, 0, 0, 3969, 766, 1, 0, 0, 0, 3970, 3971, 7, 8, 0, 0, 3971, 3972, 7, 16, 0, 0, 3972, 3973, 7, 15, 0, 0, 3973, 3974, 7, 20, 0, 0, 3974, 3975, 7, 14, 0, 0, 3975, 3976, 7, 14, 0, 0, 3976, 768, 1, 0, 0, 0, 3977, 3978, 7, 15, 0, 0, 3978, 3979, 7, 20, 0, 0, 3979, 3980, 7, 14, 0, 0, 3980, 3981, 7, 14, 0, 0, 3981, 3982, 7, 8, 0, 0, 3982, 3983, 7, 16, 0, 0, 3983, 770, 1, 0, 0, 0, 3984, 3985, 7, 8, 0, 0, 3985, 3986, 7, 16, 0, 0, 3986, 772, 1, 0, 0, 0, 3987, 3988, 7, 18, 0, 0, 3988, 3989, 7, 24, 0, 0, 3989, 3990, 7, 13, 0, 0, 3990, 3991, 7, 2, 0, 0, 3991, 3992, 7, 10, 0, 0, 3992, 3993, 7, 16, 0, 0, 3993, 774, 1, 0, 0, 0, 3994, 3995, 7, 5, 0, 0, 3995, 3996, 7, 10, 0, 0, 3996, 3997, 7, 3, 0, 0, 3997, 3998, 7, 14, 0, 0, 3998, 3999, 7, 2, 0, 0, 3999, 4000, 7, 1, 0, 0, 4000, 4001, 7, 5, 0, 0, 4001, 4002, 7, 2, 0, 0, 4002, 776, 1, 0, 0, 0, 4003, 4004, 7, 17, 0, 0, 4004, 4005, 7, 3, 0, 0, 4005, 4006, 7, 18, 0, 0, 4006, 4007, 7, 5, 0, 0, 4007, 4008, 7, 6, 0, 0, 4008, 778, 1, 0, 0, 0, 4009, 4010, 7, 17, 0, 0, 4010, 4011, 7, 3, 0, 0, 4011, 4012, 7, 18, 0, 0, 4012, 4013, 7, 5, 0, 0, 4013, 4014, 7, 6, 0, 0, 4014, 4015, 5, 95, 0, 0, 4015, 4016, 7, 13, 0, 0, 4016, 4017, 7, 6, 0, 0, 4017, 4018, 7, 4, 0, 0, 4018, 4019, 7, 3, 0, 0, 4019, 4020, 7, 1, 0, 0, 4020, 4021, 7, 2, 0, 0, 4021, 780, 1, 0, 0, 0, 4022, 4023, 7, 17, 0, 0, 4023, 4024, 7, 3, 0, 0, 4024, 4025, 7, 18, 0, 0, 4025, 4026, 7, 5, 0, 0, 4026, 4027, 7, 6, 0, 0, 4027, 4028, 5, 95, 0, 0, 4028, 4029, 7, 13, 0, 0, 4029, 4030, 7, 6, 0, 0, 4030, 4031, 7, 4, 0, 0, 4031, 4032, 7, 3, 0, 0, 4032, 4033, 7, 1, 0, 0, 4033, 4034, 7, 2, 0, 0, 4034, 4035, 5, 95, 0, 0, 4035, 4036, 7, 13, 0, 0, 4036, 4037, 7, 4, 0, 0, 4037, 4038, 7, 2, 0, 0, 4038, 4039, 7, 16, 0, 0, 4039, 4040, 7, 8, 0, 0, 4040, 4041, 7, 12, 0, 0, 4041, 782, 1, 0, 0, 0, 4042, 4043, 7, 17, 0, 0, 4043, 4044, 7, 3, 0, 0, 4044, 4045, 7, 18, 0, 0, 4045, 4046, 7, 5, 0, 0, 4046, 4047, 7, 6, 0, 0, 4047, 4048, 5, 95, 0, 0, 4048, 4049, 7, 9, 0, 0, 4049, 4050, 7, 10, 0, 0, 4050, 4051, 7, 10, 0, 0, 4051, 4052, 7, 14, 0, 0, 4052, 4053, 5, 95, 0, 0, 4053, 4054, 7, 13, 0, 0, 4054, 4055, 7, 4, 0, 0, 4055, 4056, 7, 2, 0, 0, 4056, 4057, 7, 16, 0, 0, 4057, 4058, 7, 8, 0, 0, 4058, 4059, 7, 12, 0, 0, 4059, 784, 1, 0, 0, 0, 4060, 4061, 7, 1, 0, 0, 4061, 4062, 7, 8, 0, 0, 4062, 4063, 7, 17, 0, 0, 4063, 4064, 7, 13, 0, 0, 4064, 4065, 7, 14, 0, 0, 4065, 4066, 7, 2, 0, 0, 4066, 4067, 5, 95, 0, 0, 4067, 4068, 7, 23, 0, 0, 4068, 4069, 7, 20, 0, 0, 4069, 4070, 7, 2, 0, 0, 4070, 4071, 7, 4, 0, 0, 4071, 4072, 7, 24, 0, 0, 4072, 4073, 5, 95, 0, 0, 4073, 4074, 7, 1, 0, 0, 4074, 4075, 7, 18, 0, 0, 4075, 4076, 7, 4, 0, 0, 4076, 4077, 7, 8, 0, 0, 4077, 4078, 7, 15, 0, 0, 4078, 4079, 7, 21, 0, 0, 4079, 786, 1, 0, 0, 0, 4080, 4081, 7, 17, 0, 0, 4081, 4082, 7, 20, 0, 0, 4082, 4083, 7, 14, 0, 0, 4083, 4084, 7, 18, 0, 0, 4084, 4085, 7, 8, 0, 0, 4085, 4086, 5, 95, 0, 0, 4086, 4087, 7, 17, 0, 0, 4087, 4088, 7, 3, 0, 0, 4088, 4089, 7, 18, 0, 0, 4089, 4090, 7, 5, 0, 0, 4090, 4091, 7, 6, 0, 0, 4091, 788, 1, 0, 0, 0, 4092, 4093, 7, 23, 0, 0, 4093, 4094, 7, 20, 0, 0, 4094, 4095, 7, 2, 0, 0, 4095, 4096, 7, 4, 0, 0, 4096, 4097, 7, 24, 0, 0, 4097, 4098, 5, 95, 0, 0, 4098, 4099, 7, 1, 0, 0, 4099, 4100, 7, 18, 0, 0, 4100, 4101, 7, 4, 0, 0, 4101, 4102, 7, 8, 0, 0, 4102, 4103, 7, 15, 0, 0, 4103, 4104, 7, 21, 0, 0, 4104, 790, 1, 0, 0, 0, 4105, 4106, 7, 3, 0, 0, 4106, 4107, 7, 14, 0, 0, 4107, 4108, 7, 14, 0, 0, 4108, 4109, 7, 10, 0, 0, 4109, 4110, 7, 11, 0, 0, 4110, 4111, 5, 95, 0, 0, 4111, 4112, 7, 14, 0, 0, 4112, 4113, 7, 2, 0, 0, 4113, 4114, 7, 3, 0, 0, 4114, 4115, 7, 7, 0, 0, 4115, 4116, 7, 8, 0, 0, 4116, 4117, 7, 15, 0, 0, 4117, 4118, 7, 21, 0, 0, 4118, 4119, 5, 95, 0, 0, 4119, 4120, 7, 11, 0, 0, 4120, 4121, 7, 8, 0, 0, 4121, 4122, 7, 14, 0, 0, 4122, 4123, 7, 7, 0, 0, 4123, 4124, 7, 5, 0, 0, 4124, 4125, 7, 3, 0, 0, 4125, 4126, 7, 4, 0, 0, 4126, 4127, 7, 7, 0, 0, 4127, 792, 1, 0, 0, 0, 4128, 4129, 7, 3, 0, 0, 4129, 4130, 7, 15, 0, 0, 4130, 4131, 7, 3, 0, 0, 4131, 4132, 7, 14, 0, 0, 4132, 4133, 7, 24, 0, 0, 4133, 4134, 7, 26, 0, 0, 4134, 4135, 7, 2, 0, 0, 4135, 4136, 5, 95, 0, 0, 4136, 4137, 7, 11, 0, 0, 4137, 4138, 7, 8, 0, 0, 4138, 4139, 7, 14, 0, 0, 4139, 4140, 7, 7, 0, 0, 4140, 4141, 7, 5, 0, 0, 4141, 4142, 7, 3, 0, 0, 4142, 4143, 7, 4, 0, 0, 4143, 4144, 7, 7, 0, 0, 4144, 794, 1, 0, 0, 0, 4145, 4146, 7, 3, 0, 0, 4146, 4147, 7, 15, 0, 0, 4147, 4148, 7, 3, 0, 0, 4148, 4149, 7, 14, 0, 0, 4149, 4150, 7, 24, 0, 0, 4150, 4151, 7, 26, 0, 0, 4151, 4152, 7, 2, 0, 0, 4152, 4153, 7, 4, 0, 0, 4153, 796, 1, 0, 0, 0, 4154, 4155, 7, 3, 0, 0, 4155, 4156, 7, 20, 0, 0, 4156, 4157, 7, 18, 0, 0, 4157, 4158, 7, 10, 0, 0, 4158, 4159, 5, 95, 0, 0, 4159, 4160, 7, 21, 0, 0, 4160, 4161, 7, 2, 0, 0, 4161, 4162, 7, 15, 0, 0, 4162, 4163, 7, 2, 0, 0, 4163, 4164, 7, 4, 0, 0, 4164, 4165, 7, 3, 0, 0, 4165, 4166, 7, 18, 0, 0, 4166, 4167, 7, 2, 0, 0, 4167, 4168, 5, 95, 0, 0, 4168, 4169, 7, 1, 0, 0, 4169, 4170, 7, 24, 0, 0, 4170, 4171, 7, 15, 0, 0, 4171, 4172, 7, 10, 0, 0, 4172, 4173, 7, 15, 0, 0, 4173, 4174, 7, 24, 0, 0, 4174, 4175, 7, 17, 0, 0, 4175, 4176, 7, 1, 0, 0, 4176, 4177, 5, 95, 0, 0, 4177, 4178, 7, 13, 0, 0, 4178, 4179, 7, 6, 0, 0, 4179, 4180, 7, 4, 0, 0, 4180, 4181, 7, 3, 0, 0, 4181, 4182, 7, 1, 0, 0, 4182, 4183, 7, 2, 0, 0, 4183, 4184, 5, 95, 0, 0, 4184, 4185, 7, 23, 0, 0, 4185, 4186, 7, 20, 0, 0, 4186, 4187, 7, 2, 0, 0, 4187, 4188, 7, 4, 0, 0, 4188, 4189, 7, 24, 0, 0, 4189, 798, 1, 0, 0, 0, 4190, 4191, 7, 9, 0, 0, 4191, 4192, 7, 10, 0, 0, 4192, 4193, 7, 10, 0, 0, 4193, 4194, 7, 1, 0, 0, 4194, 4195, 7, 18, 0, 0, 4195, 800, 1, 0, 0, 0, 4196, 4197, 7, 5, 0, 0, 4197, 4198, 7, 20, 0, 0, 4198, 4199, 7, 18, 0, 0, 4199, 4200, 7, 10, 0, 0, 4200, 4201, 7, 16, 0, 0, 4201, 4202, 7, 16, 0, 0, 4202, 4203, 5, 95, 0, 0, 4203, 4204, 7, 16, 0, 0, 4204, 4205, 7, 4, 0, 0, 4205, 4206, 7, 2, 0, 0, 4206, 4207, 7, 23, 0, 0, 4207, 4208, 7, 20, 0, 0, 4208, 4209, 7, 2, 0, 0, 4209, 4210, 7, 15, 0, 0, 4210, 4211, 7, 5, 0, 0, 4211, 4212, 7, 24, 0, 0, 4212, 802, 1, 0, 0, 0, 4213, 4214, 7, 7, 0, 0, 4214, 4215, 7, 2, 0, 0, 4215, 4216, 7, 16, 0, 0, 4216, 4217, 7, 3, 0, 0, 4217, 4218, 7, 20, 0, 0, 4218, 4219, 7, 14, 0, 0, 4219, 4220, 7, 18, 0, 0, 4220, 4221, 5, 95, 0, 0, 4221, 4222, 7, 16, 0, 0, 4222, 4223, 7, 8, 0, 0, 4223, 4224, 7, 2, 0, 0, 4224, 4225, 7, 14, 0, 0, 4225, 4226, 7, 7, 0, 0, 4226, 804, 1, 0, 0, 0, 4227, 4228, 7, 7, 0, 0, 4228, 4229, 7, 2, 0, 0, 4229, 4230, 7, 16, 0, 0, 4230, 4231, 7, 3, 0, 0, 4231, 4232, 7, 20, 0, 0, 4232, 4233, 7, 14, 0, 0, 4233, 4234, 7, 18, 0, 0, 4234, 4235, 5, 95, 0, 0, 4235, 4236, 7, 10, 0, 0, 4236, 4237, 7, 13, 0, 0, 4237, 4238, 7, 2, 0, 0, 4238, 4239, 7, 4, 0, 0, 4239, 4240, 7, 3, 0, 0, 4240, 4241, 7, 18, 0, 0, 4241, 4242, 7, 10, 0, 0, 4242, 4243, 7, 4, 0, 0, 4243, 806, 1, 0, 0, 0, 4244, 4245, 7, 2, 0, 0, 4245, 4246, 7, 15, 0, 0, 4246, 4247, 7, 3, 0, 0, 4247, 4248, 7, 9, 0, 0, 4248, 4249, 7, 14, 0, 0, 4249, 4250, 7, 2, 0, 0, 4250, 4251, 5, 95, 0, 0, 4251, 4252, 7, 13, 0, 0, 4252, 4253, 7, 10, 0, 0, 4253, 4254, 7, 1, 0, 0, 4254, 4255, 7, 8, 0, 0, 4255, 4256, 7, 18, 0, 0, 4256, 4257, 7, 8, 0, 0, 4257, 4258, 7, 10, 0, 0, 4258, 4259, 7, 15, 0, 0, 4259, 4260, 5, 95, 0, 0, 4260, 4261, 7, 8, 0, 0, 4261, 4262, 7, 15, 0, 0, 4262, 4263, 7, 5, 0, 0, 4263, 4264, 7, 4, 0, 0, 4264, 4265, 7, 2, 0, 0, 4265, 4266, 7, 17, 0, 0, 4266, 4267, 7, 2, 0, 0, 4267, 4268, 7, 15, 0, 0, 4268, 4269, 7, 18, 0, 0, 4269, 4270, 7, 1, 0, 0, 4270, 808, 1, 0, 0, 0, 4271, 4272, 7, 2, 0, 0, 4272, 4273, 7, 1, 0, 0, 4273, 4274, 7, 5, 0, 0, 4274, 4275, 7, 3, 0, 0, 4275, 4276, 7, 13, 0, 0, 4276, 4277, 7, 2, 0, 0, 4277, 810, 1, 0, 0, 0, 4278, 4279, 7, 16, 0, 0, 4279, 4280, 7, 14, 0, 0, 4280, 4281, 7, 3, 0, 0, 4281, 4282, 7, 21, 0, 0, 4282, 4283, 7, 1, 0, 0, 4283, 812, 1, 0, 0, 0, 4284, 4285, 7, 16, 0, 0, 4285, 4286, 7, 20, 0, 0, 4286, 4287, 7, 26, 0, 0, 4287, 4288, 7, 26, 0, 0, 4288, 4289, 7, 24, 0, 0, 4289, 4290, 5, 95, 0, 0, 4290, 4291, 7, 17, 0, 0, 4291, 4292, 7, 3, 0, 0, 4292, 4293, 7, 12, 0, 0, 4293, 4294, 5, 95, 0, 0, 4294, 4295, 7, 2, 0, 0, 4295, 4296, 7, 12, 0, 0, 4296, 4297, 7, 13, 0, 0, 4297, 4298, 7, 3, 0, 0, 4298, 4299, 7, 15, 0, 0, 4299, 4300, 7, 1, 0, 0, 4300, 4301, 7, 8, 0, 0, 4301, 4302, 7, 10, 0, 0, 4302, 4303, 7, 15, 0, 0, 4303, 4304, 7, 1, 0, 0, 4304, 814, 1, 0, 0, 0, 4305, 4306, 7, 16, 0, 0, 4306, 4307, 7, 20, 0, 0, 4307, 4308, 7, 26, 0, 0, 4308, 4309, 7, 26, 0, 0, 4309, 4310, 7, 24, 0, 0, 4310, 4311, 5, 95, 0, 0, 4311, 4312, 7, 13, 0, 0, 4312, 4313, 7, 4, 0, 0, 4313, 4314, 7, 2, 0, 0, 4314, 4315, 7, 16, 0, 0, 4315, 4316, 7, 8, 0, 0, 4316, 4317, 7, 12, 0, 0, 4317, 4318, 5, 95, 0, 0, 4318, 4319, 7, 14, 0, 0, 4319, 4320, 7, 2, 0, 0, 4320, 4321, 7, 15, 0, 0, 4321, 4322, 7, 21, 0, 0, 4322, 4323, 7, 18, 0, 0, 4323, 4324, 7, 6, 0, 0, 4324, 816, 1, 0, 0, 0, 4325, 4326, 7, 16, 0, 0, 4326, 4327, 7, 20, 0, 0, 4327, 4328, 7, 26, 0, 0, 4328, 4329, 7, 26, 0, 0, 4329, 4330, 7, 24, 0, 0, 4330, 4331, 5, 95, 0, 0, 4331, 4332, 7, 18, 0, 0, 4332, 4333, 7, 4, 0, 0, 4333, 4334, 7, 3, 0, 0, 4334, 4335, 7, 15, 0, 0, 4335, 4336, 7, 1, 0, 0, 4336, 4337, 7, 13, 0, 0, 4337, 4338, 7, 10, 0, 0, 4338, 4339, 7, 1, 0, 0, 4339, 4340, 7, 8, 0, 0, 4340, 4341, 7, 18, 0, 0, 4341, 4342, 7, 8, 0, 0, 4342, 4343, 7, 10, 0, 0, 4343, 4344, 7, 15, 0, 0, 4344, 4345, 7, 1, 0, 0, 4345, 818, 1, 0, 0, 0, 4346, 4347, 7, 16, 0, 0, 4347, 4348, 7, 20, 0, 0, 4348, 4349, 7, 26, 0, 0, 4349, 4350, 7, 26, 0, 0, 4350, 4351, 7, 24, 0, 0, 4351, 4352, 5, 95, 0, 0, 4352, 4353, 7, 4, 0, 0, 4353, 4354, 7, 2, 0, 0, 4354, 4355, 7, 11, 0, 0, 4355, 4356, 7, 4, 0, 0, 4356, 4357, 7, 8, 0, 0, 4357, 4358, 7, 18, 0, 0, 4358, 4359, 7, 2, 0, 0, 4359, 820, 1, 0, 0, 0, 4360, 4361, 7, 16, 0, 0, 4361, 4362, 7, 20, 0, 0, 4362, 4363, 7, 26, 0, 0, 4363, 4364, 7, 26, 0, 0, 4364, 4365, 7, 8, 0, 0, 4365, 4366, 7, 15, 0, 0, 4366, 4367, 7, 2, 0, 0, 4367, 4368, 7, 1, 0, 0, 4368, 4369, 7, 1, 0, 0, 4369, 822, 1, 0, 0, 0, 4370, 4371, 7, 14, 0, 0, 4371, 4372, 7, 2, 0, 0, 4372, 4373, 7, 15, 0, 0, 4373, 4374, 7, 8, 0, 0, 4374, 4375, 7, 2, 0, 0, 4375, 4376, 7, 15, 0, 0, 4376, 4377, 7, 18, 0, 0, 4377, 824, 1, 0, 0, 0, 4378, 4379, 7, 14, 0, 0, 4379, 4380, 7, 10, 0, 0, 4380, 4381, 7, 11, 0, 0, 4381, 4382, 5, 95, 0, 0, 4382, 4383, 7, 16, 0, 0, 4383, 4384, 7, 4, 0, 0, 4384, 4385, 7, 2, 0, 0, 4385, 4386, 7, 23, 0, 0, 4386, 4387, 5, 95, 0, 0, 4387, 4388, 7, 10, 0, 0, 4388, 4389, 7, 13, 0, 0, 4389, 4390, 7, 2, 0, 0, 4390, 4391, 7, 4, 0, 0, 4391, 4392, 7, 3, 0, 0, 4392, 4393, 7, 18, 0, 0, 4393, 4394, 7, 10, 0, 0, 4394, 4395, 7, 4, 0, 0, 4395, 826, 1, 0, 0, 0, 4396, 4397, 7, 17, 0, 0, 4397, 4398, 7, 3, 0, 0, 4398, 4399, 7, 12, 0, 0, 4399, 4400, 5, 95, 0, 0, 4400, 4401, 7, 7, 0, 0, 4401, 4402, 7, 2, 0, 0, 4402, 4403, 7, 18, 0, 0, 4403, 4404, 7, 2, 0, 0, 4404, 4405, 7, 4, 0, 0, 4405, 4406, 7, 17, 0, 0, 4406, 4407, 7, 8, 0, 0, 4407, 4408, 7, 15, 0, 0, 4408, 4409, 7, 8, 0, 0, 4409, 4410, 7, 26, 0, 0, 4410, 4411, 7, 2, 0, 0, 4411, 4412, 7, 7, 0, 0, 4412, 4413, 5, 95, 0, 0, 4413, 4414, 7, 1, 0, 0, 4414, 4415, 7, 18, 0, 0, 4415, 4416, 7, 3, 0, 0, 4416, 4417, 7, 18, 0, 0, 4417, 4418, 7, 2, 0, 0, 4418, 4419, 7, 1, 0, 0, 4419, 828, 1, 0, 0, 0, 4420, 4421, 7, 17, 0, 0, 4421, 4422, 7, 3, 0, 0, 4422, 4423, 7, 12, 0, 0, 4423, 4424, 5, 95, 0, 0, 4424, 4425, 7, 2, 0, 0, 4425, 4426, 7, 12, 0, 0, 4426, 4427, 7, 13, 0, 0, 4427, 4428, 7, 3, 0, 0, 4428, 4429, 7, 15, 0, 0, 4429, 4430, 7, 1, 0, 0, 4430, 4431, 7, 8, 0, 0, 4431, 4432, 7, 10, 0, 0, 4432, 4433, 7, 15, 0, 0, 4433, 4434, 7, 1, 0, 0, 4434, 830, 1, 0, 0, 0, 4435, 4436, 7, 17, 0, 0, 4436, 4437, 7, 8, 0, 0, 4437, 4438, 7, 15, 0, 0, 4438, 4439, 7, 8, 0, 0, 4439, 4440, 7, 17, 0, 0, 4440, 4441, 7, 20, 0, 0, 4441, 4442, 7, 17, 0, 0, 4442, 4443, 5, 95, 0, 0, 4443, 4444, 7, 1, 0, 0, 4444, 4445, 7, 6, 0, 0, 4445, 4446, 7, 10, 0, 0, 4446, 4447, 7, 20, 0, 0, 4447, 4448, 7, 14, 0, 0, 4448, 4449, 7, 7, 0, 0, 4449, 4450, 5, 95, 0, 0, 4450, 4451, 7, 17, 0, 0, 4451, 4452, 7, 3, 0, 0, 4452, 4453, 7, 18, 0, 0, 4453, 4454, 7, 5, 0, 0, 4454, 4455, 7, 6, 0, 0, 4455, 832, 1, 0, 0, 0, 4456, 4457, 7, 10, 0, 0, 4457, 4458, 7, 13, 0, 0, 4458, 4459, 7, 2, 0, 0, 4459, 4460, 7, 4, 0, 0, 4460, 4461, 7, 3, 0, 0, 4461, 4462, 7, 18, 0, 0, 4462, 4463, 7, 10, 0, 0, 4463, 4464, 7, 4, 0, 0, 4464, 834, 1, 0, 0, 0, 4465, 4466, 7, 13, 0, 0, 4466, 4467, 7, 6, 0, 0, 4467, 4468, 7, 4, 0, 0, 4468, 4469, 7, 3, 0, 0, 4469, 4470, 7, 1, 0, 0, 4470, 4471, 7, 2, 0, 0, 4471, 4472, 5, 95, 0, 0, 4472, 4473, 7, 1, 0, 0, 4473, 4474, 7, 14, 0, 0, 4474, 4475, 7, 10, 0, 0, 4475, 4476, 7, 13, 0, 0, 4476, 836, 1, 0, 0, 0, 4477, 4478, 7, 13, 0, 0, 4478, 4479, 7, 4, 0, 0, 4479, 4480, 7, 2, 0, 0, 4480, 4481, 7, 16, 0, 0, 4481, 4482, 7, 8, 0, 0, 4482, 4483, 7, 12, 0, 0, 4483, 4484, 5, 95, 0, 0, 4484, 4485, 7, 14, 0, 0, 4485, 4486, 7, 2, 0, 0, 4486, 4487, 7, 15, 0, 0, 4487, 4488, 7, 21, 0, 0, 4488, 4489, 7, 18, 0, 0, 4489, 4490, 7, 6, 0, 0, 4490, 838, 1, 0, 0, 0, 4491, 4492, 7, 23, 0, 0, 4492, 4493, 7, 20, 0, 0, 4493, 4494, 7, 10, 0, 0, 4494, 4495, 7, 18, 0, 0, 4495, 4496, 7, 2, 0, 0, 4496, 4497, 5, 95, 0, 0, 4497, 4498, 7, 3, 0, 0, 4498, 4499, 7, 15, 0, 0, 4499, 4500, 7, 3, 0, 0, 4500, 4501, 7, 14, 0, 0, 4501, 4502, 7, 24, 0, 0, 4502, 4503, 7, 26, 0, 0, 4503, 4504, 7, 2, 0, 0, 4504, 4505, 7, 4, 0, 0, 4505, 840, 1, 0, 0, 0, 4506, 4507, 7, 23, 0, 0, 4507, 4508, 7, 20, 0, 0, 4508, 4509, 7, 10, 0, 0, 4509, 4510, 7, 18, 0, 0, 4510, 4511, 7, 2, 0, 0, 4511, 4512, 5, 95, 0, 0, 4512, 4513, 7, 16, 0, 0, 4513, 4514, 7, 8, 0, 0, 4514, 4515, 7, 2, 0, 0, 4515, 4516, 7, 14, 0, 0, 4516, 4517, 7, 7, 0, 0, 4517, 4518, 5, 95, 0, 0, 4518, 4519, 7, 1, 0, 0, 4519, 4520, 7, 20, 0, 0, 4520, 4521, 7, 16, 0, 0, 4521, 4522, 7, 16, 0, 0, 4522, 4523, 7, 8, 0, 0, 4523, 4524, 7, 12, 0, 0, 4524, 842, 1, 0, 0, 0, 4525, 4526, 7, 4, 0, 0, 4526, 4527, 7, 2, 0, 0, 4527, 4528, 7, 11, 0, 0, 4528, 4529, 7, 4, 0, 0, 4529, 4530, 7, 8, 0, 0, 4530, 4531, 7, 18, 0, 0, 4531, 4532, 7, 2, 0, 0, 4532, 844, 1, 0, 0, 0, 4533, 4534, 7, 1, 0, 0, 4534, 4535, 7, 14, 0, 0, 4535, 4536, 7, 10, 0, 0, 4536, 4537, 7, 13, 0, 0, 4537, 846, 1, 0, 0, 0, 4538, 4539, 7, 18, 0, 0, 4539, 4540, 7, 8, 0, 0, 4540, 4541, 7, 2, 0, 0, 4541, 4542, 5, 95, 0, 0, 4542, 4543, 7, 9, 0, 0, 4543, 4544, 7, 4, 0, 0, 4544, 4545, 7, 2, 0, 0, 4545, 4546, 7, 3, 0, 0, 4546, 4547, 7, 22, 0, 0, 4547, 4548, 7, 2, 0, 0, 4548, 4549, 7, 4, 0, 0, 4549, 848, 1, 0, 0, 0, 4550, 4551, 7, 18, 0, 0, 4551, 4552, 7, 24, 0, 0, 4552, 4553, 7, 13, 0, 0, 4553, 4554, 7, 2, 0, 0, 4554, 850, 1, 0, 0, 0, 4555, 4556, 7, 26, 0, 0, 4556, 4557, 7, 2, 0, 0, 4557, 4558, 7, 4, 0, 0, 4558, 4559, 7, 10, 0, 0, 4559, 4560, 5, 95, 0, 0, 4560, 4561, 7, 18, 0, 0, 4561, 4562, 7, 2, 0, 0, 4562, 4563, 7, 4, 0, 0, 4563, 4564, 7, 17, 0, 0, 4564, 4565, 7, 1, 0, 0, 4565, 4566, 5, 95, 0, 0, 4566, 4567, 7, 23, 0, 0, 4567, 4568, 7, 20, 0, 0, 4568, 4569, 7, 2, 0, 0, 4569, 4570, 7, 4, 0, 0, 4570, 4571, 7, 24, 0, 0, 4571, 852, 1, 0, 0, 0, 4572, 4573, 7, 1, 0, 0, 4573, 4574, 7, 13, 0, 0, 4574, 4575, 7, 3, 0, 0, 4575, 4576, 7, 15, 0, 0, 4576, 854, 1, 0, 0, 0, 4577, 4578, 7, 9, 0, 0, 4578, 4579, 7, 8, 0, 0, 4579, 4580, 7, 15, 0, 0, 4580, 4581, 7, 1, 0, 0, 4581, 856, 1, 0, 0, 0, 4582, 4583, 7, 17, 0, 0, 4583, 4584, 7, 8, 0, 0, 4584, 4585, 7, 15, 0, 0, 4585, 4586, 7, 1, 0, 0, 4586, 4587, 7, 13, 0, 0, 4587, 4588, 7, 3, 0, 0, 4588, 4589, 7, 15, 0, 0, 4589, 858, 1, 0, 0, 0, 4590, 4591, 7, 1, 0, 0, 4591, 4592, 7, 18, 0, 0, 4592, 4593, 7, 3, 0, 0, 4593, 4594, 7, 4, 0, 0, 4594, 4595, 7, 18, 0, 0, 4595, 860, 1, 0, 0, 0, 4596, 4597, 7, 2, 0, 0, 4597, 4598, 7, 15, 0, 0, 4598, 4599, 7, 7, 0, 0, 4599, 862, 1, 0, 0, 0, 4600, 4601, 7, 3, 0, 0, 4601, 4602, 7, 14, 0, 0, 4602, 4603, 7, 8, 0, 0, 4603, 4604, 7, 21, 0, 0, 4604, 4605, 7, 15, 0, 0, 4605, 4606, 7, 18, 0, 0, 4606, 4607, 7, 8, 0, 0, 4607, 4608, 7, 17, 0, 0, 4608, 4609, 7, 2, 0, 0, 4609, 864, 1, 0, 0, 0, 4610, 4611, 7, 17, 0, 0, 4611, 4612, 7, 1, 0, 0, 4612, 866, 1, 0, 0, 0, 4613, 4614, 7, 1, 0, 0, 4614, 868, 1, 0, 0, 0, 4615, 4616, 7, 17, 0, 0, 4616, 870, 1, 0, 0, 0, 4617, 4618, 7, 6, 0, 0, 4618, 872, 1, 0, 0, 0, 4619, 4620, 7, 11, 0, 0, 4620, 874, 1, 0, 0, 0, 4621, 4622, 7, 23, 0, 0, 4622, 876, 1, 0, 0, 0, 4623, 4624, 7, 24, 0, 0, 4624, 878, 1, 0, 0, 0, 4625, 4626, 7, 1, 0, 0, 4626, 4627, 7, 2, 0, 0, 4627, 4628, 7, 5, 0, 0, 4628, 880, 1, 0, 0, 0, 4629, 4630, 7, 1, 0, 0, 4630, 4631, 7, 2, 0, 0, 4631, 4632, 7, 5, 0, 0, 4632, 4633, 7, 1, 0, 0, 4633, 882, 1, 0, 0, 0, 4634, 4635, 7, 1, 0, 0, 4635, 4636, 7, 2, 0, 0, 4636, 4637, 7, 5, 0, 0, 4637, 4638, 7, 10, 0, 0, 4638, 4639, 7, 15, 0, 0, 4639, 4640, 7, 7, 0, 0, 4640, 4641, 7, 1, 0, 0, 4641, 884, 1, 0, 0, 0, 4642, 4643, 7, 17, 0, 0, 4643, 4644, 7, 8, 0, 0, 4644, 4645, 7, 15, 0, 0, 4645, 4646, 7, 1, 0, 0, 4646, 886, 1, 0, 0, 0, 4647, 4648, 7, 17, 0, 0, 4648, 4649, 7, 8, 0, 0, 4649, 4650, 7, 15, 0, 0, 4650, 4651, 7, 20, 0, 0, 4651, 4652, 7, 18, 0, 0, 4652, 4653, 7, 2, 0, 0, 4653, 4654, 7, 1, 0, 0, 4654, 888, 1, 0, 0, 0, 4655, 4656, 7, 6, 0, 0, 4656, 4657, 7, 4, 0, 0, 4657, 890, 1, 0, 0, 0, 4658, 4659, 7, 6, 0, 0, 4659, 4660, 7, 4, 0, 0, 4660, 4661, 7, 1, 0, 0, 4661, 892, 1, 0, 0, 0, 4662, 4663, 7, 6, 0, 0, 4663, 4664, 7, 10, 0, 0, 4664, 4665, 7, 20, 0, 0, 4665, 4666, 7, 4, 0, 0, 4666, 4667, 7, 1, 0, 0, 4667, 894, 1, 0, 0, 0, 4668, 4669, 7, 7, 0, 0, 4669, 4670, 7, 3, 0, 0, 4670, 4671, 7, 24, 0, 0, 4671, 4672, 7, 1, 0, 0, 4672, 896, 1, 0, 0, 0, 4673, 4674, 7, 17, 0, 0, 4674, 4675, 7, 10, 0, 0, 4675, 4676, 7, 15, 0, 0, 4676, 898, 1, 0, 0, 0, 4677, 4678, 7, 17, 0, 0, 4678, 4679, 7, 10, 0, 0, 4679, 4680, 7, 15, 0, 0, 4680, 4681, 7, 18, 0, 0, 4681, 4682, 7, 6, 0, 0, 4682, 4683, 7, 1, 0, 0, 4683, 900, 1, 0, 0, 0, 4684, 4685, 7, 20, 0, 0, 4685, 4686, 7, 1, 0, 0, 4686, 902, 1, 0, 0, 0, 4687, 4688, 7, 5, 0, 0, 4688, 4689, 7, 1, 0, 0, 4689, 904, 1, 0, 0, 0, 4690, 4691, 7, 7, 0, 0, 4691, 4692, 7, 1, 0, 0, 4692, 906, 1, 0, 0, 0, 4693, 4696, 3, 433, 216, 0, 4694, 4697, 3, 913, 456, 0, 4695, 4697, 3, 915, 457, 0, 4696, 4694, 1, 0, 0, 0, 4696, 4695, 1, 0, 0, 0, 4697, 4704, 1, 0, 0, 0, 4698, 4701, 7, 13, 0, 0, 4699, 4702, 3, 913, 456, 0, 4700, 4702, 3, 915, 457, 0, 4701, 4699, 1, 0, 0, 0, 4701, 4700, 1, 0, 0, 0, 4702, 4704, 1, 0, 0, 0, 4703, 4693, 1, 0, 0, 0, 4703, 4698, 1, 0, 0, 0, 4704, 908, 1, 0, 0, 0, 4705, 4706, 3, 935, 467, 0, 4706, 910, 1, 0, 0, 0, 4707, 4708, 3, 923, 461, 0, 4708, 912, 1, 0, 0, 0, 4709, 4711, 3, 933, 466, 0, 4710, 4709, 1, 0, 0, 0, 4711, 4712, 1, 0, 0, 0, 4712, 4710, 1, 0, 0, 0, 4712, 4713, 1, 0, 0, 0, 4713, 914, 1, 0, 0, 0, 4714, 4716, 3, 933, 466, 0, 4715, 4714, 1, 0, 0, 0, 4716, 4717, 1, 0, 0, 0, 4717, 4715, 1, 0, 0, 0, 4717, 4718, 1, 0, 0, 0, 4718, 4720, 1, 0, 0, 0, 4719, 4715, 1, 0, 0, 0, 4719, 4720, 1, 0, 0, 0, 4720, 4721, 1, 0, 0, 0, 4721, 4723, 5, 46, 0, 0, 4722, 4724, 3, 933, 466, 0, 4723, 4722, 1, 0, 0, 0, 4724, 4725, 1, 0, 0, 0, 4725, 4723, 1, 0, 0, 0, 4725, 4726, 1, 0, 0, 0, 4726, 916, 1, 0, 0, 0, 4727, 4729, 3, 933, 466, 0, 4728, 4727, 1, 0, 0, 0, 4729, 4730, 1, 0, 0, 0, 4730, 4728, 1, 0, 0, 0, 4730, 4731, 1, 0, 0, 0, 4731, 4733, 1, 0, 0, 0, 4732, 4728, 1, 0, 0, 0, 4732, 4733, 1, 0, 0, 0, 4733, 4734, 1, 0, 0, 0, 4734, 4736, 5, 46, 0, 0, 4735, 4737, 3, 933, 466, 0, 4736, 4735, 1, 0, 0, 0, 4737, 4738, 1, 0, 0, 0, 4738, 4736, 1, 0, 0, 0, 4738, 4739, 1, 0, 0, 0, 4739, 4740, 1, 0, 0, 0, 4740, 4741, 7, 16, 0, 0, 4741, 918, 1, 0, 0, 0, 4742, 4744, 3, 933, 466, 0, 4743, 4742, 1, 0, 0, 0, 4744, 4745, 1, 0, 0, 0, 4745, 4743, 1, 0, 0, 0, 4745, 4746, 1, 0, 0, 0, 4746, 4748, 1, 0, 0, 0, 4747, 4743, 1, 0, 0, 0, 4747, 4748, 1, 0, 0, 0, 4748, 4749, 1, 0, 0, 0, 4749, 4751, 5, 46, 0, 0, 4750, 4752, 3, 933, 466, 0, 4751, 4750, 1, 0, 0, 0, 4752, 4753, 1, 0, 0, 0, 4753, 4751, 1, 0, 0, 0, 4753, 4754, 1, 0, 0, 0, 4754, 4755, 1, 0, 0, 0, 4755, 4756, 7, 7, 0, 0, 4756, 920, 1, 0, 0, 0, 4757, 4759, 7, 28, 0, 0, 4758, 4760, 7, 29, 0, 0, 4759, 4758, 1, 0, 0, 0, 4760, 4761, 1, 0, 0, 0, 4761, 4759, 1, 0, 0, 0, 4761, 4762, 1, 0, 0, 0, 4762, 4764, 1, 0, 0, 0, 4763, 4757, 1, 0, 0, 0, 4764, 4765, 1, 0, 0, 0, 4765, 4763, 1, 0, 0, 0, 4765, 4766, 1, 0, 0, 0, 4766, 922, 1, 0, 0, 0, 4767, 4769, 7, 30, 0, 0, 4768, 4767, 1, 0, 0, 0, 4769, 4770, 1, 0, 0, 0, 4770, 4771, 1, 0, 0, 0, 4770, 4768, 1, 0, 0, 0, 4771, 4775, 1, 0, 0, 0, 4772, 4774, 7, 31, 0, 0, 4773, 4772, 1, 0, 0, 0, 4774, 4777, 1, 0, 0, 0, 4775, 4773, 1, 0, 0, 0, 4775, 4776, 1, 0, 0, 0, 4776, 4778, 1, 0, 0, 0, 4777, 4775, 1, 0, 0, 0, 4778, 4779, 3, 365, 182, 0, 4779, 924, 1, 0, 0, 0, 4780, 4782, 3, 923, 461, 0, 4781, 4780, 1, 0, 0, 0, 4781, 4782, 1, 0, 0, 0, 4782, 4783, 1, 0, 0, 0, 4783, 4784, 3, 935, 467, 0, 4784, 4785, 3, 921, 460, 0, 4785, 926, 1, 0, 0, 0, 4786, 4794, 5, 34, 0, 0, 4787, 4788, 5, 92, 0, 0, 4788, 4793, 9, 0, 0, 0, 4789, 4790, 5, 34, 0, 0, 4790, 4793, 5, 34, 0, 0, 4791, 4793, 8, 32, 0, 0, 4792, 4787, 1, 0, 0, 0, 4792, 4789, 1, 0, 0, 0, 4792, 4791, 1, 0, 0, 0, 4793, 4796, 1, 0, 0, 0, 4794, 4792, 1, 0, 0, 0, 4794, 4795, 1, 0, 0, 0, 4795, 4797, 1, 0, 0, 0, 4796, 4794, 1, 0, 0, 0, 4797, 4798, 5, 34, 0, 0, 4798, 928, 1, 0, 0, 0, 4799, 4807, 5, 39, 0, 0, 4800, 4801, 5, 92, 0, 0, 4801, 4806, 9, 0, 0, 0, 4802, 4803, 5, 39, 0, 0, 4803, 4806, 5, 39, 0, 0, 4804, 4806, 8, 33, 0, 0, 4805, 4800, 1, 0, 0, 0, 4805, 4802, 1, 0, 0, 0, 4805, 4804, 1, 0, 0, 0, 4806, 4809, 1, 0, 0, 0, 4807, 4805, 1, 0, 0, 0, 4807, 4808, 1, 0, 0, 0, 4808, 4810, 1, 0, 0, 0, 4809, 4807, 1, 0, 0, 0, 4810, 4811, 5, 39, 0, 0, 4811, 930, 1, 0, 0, 0, 4812, 4820, 5, 96, 0, 0, 4813, 4814, 5, 92, 0, 0, 4814, 4819, 9, 0, 0, 0, 4815, 4816, 5, 96, 0, 0, 4816, 4819, 5, 96, 0, 0, 4817, 4819, 8, 34, 0, 0, 4818, 4813, 1, 0, 0, 0, 4818, 4815, 1, 0, 0, 0, 4818, 4817, 1, 0, 0, 0, 4819, 4822, 1, 0, 0, 0, 4820, 4818, 1, 0, 0, 0, 4820, 4821, 1, 0, 0, 0, 4821, 4823, 1, 0, 0, 0, 4822, 4820, 1, 0, 0, 0, 4823, 4824, 5, 96, 0, 0, 4824, 932, 1, 0, 0, 0, 4825, 4826, 7, 27, 0, 0, 4826, 934, 1, 0, 0, 0, 4827, 4829, 7, 35, 0, 0, 4828, 4827, 1, 0, 0, 0, 4829, 4830, 1, 0, 0, 0, 4830, 4831, 1, 0, 0, 0, 4830, 4828, 1, 0, 0, 0, 4831, 4835, 1, 0, 0, 0, 4832, 4834, 7, 31, 0, 0, 4833, 4832, 1, 0, 0, 0, 4834, 4837, 1, 0, 0, 0, 4835, 4833, 1, 0, 0, 0, 4835, 4836, 1, 0, 0, 0, 4836, 936, 1, 0, 0, 0, 4837, 4835, 1, 0, 0, 0, 4838, 4839, 5, 47, 0, 0, 4839, 4840, 5, 47, 0, 0, 4840, 4846, 1, 0, 0, 0, 4841, 4842, 5, 92, 0, 0, 4842, 4845, 5, 10, 0, 0, 4843, 4845, 8, 36, 0, 0, 4844, 4841, 1, 0, 0, 0, 4844, 4843, 1, 0, 0, 0, 4845, 4848, 1, 0, 0, 0, 4846, 4844, 1, 0, 0, 0, 4846, 4847, 1, 0, 0, 0, 4847, 4850, 1, 0, 0, 0, 4848, 4846, 1, 0, 0, 0, 4849, 4851, 5, 13, 0, 0, 4850, 4849, 1, 0, 0, 0, 4850, 4851, 1, 0, 0, 0, 4851, 4853, 1, 0, 0, 0, 4852, 4854, 5, 10, 0, 0, 4853, 4852, 1, 0, 0, 0, 4853, 4854, 1, 0, 0, 0, 4854, 4855, 1, 0, 0, 0, 4855, 4856, 6, 468, 1, 0, 4856, 938, 1, 0, 0, 0, 4857, 4858, 5, 47, 0, 0, 4858, 4859, 5, 42, 0, 0, 4859, 4863, 1, 0, 0, 0, 4860, 4862, 9, 0, 0, 0, 4861, 4860, 1, 0, 0, 0, 4862, 4865, 1, 0, 0, 0, 4863, 4864, 1, 0, 0, 0, 4863, 4861, 1, 0, 0, 0, 4864, 4866, 1, 0, 0, 0, 4865, 4863, 1, 0, 0, 0, 4866, 4867, 5, 42, 0, 0, 4867, 4868, 5, 47, 0, 0, 4868, 4869, 1, 0, 0, 0, 4869, 4870, 6, 469, 1, 0, 4870, 940, 1, 0, 0, 0, 4871, 4872, 9, 0, 0, 0, 4872, 4873, 1, 0, 0, 0, 4873, 4874, 6, 470, 2, 0, 4874, 942, 1, 0, 0, 0, 41, 0, 946, 2880, 2886, 2888, 2890, 2898, 2903, 2909, 2911, 4696, 4701, 4703, 4712, 4717, 4719, 4725, 4730, 4732, 4738, 4745, 4747, 4753, 4761, 4765, 4770, 4775, 4781, 4792, 4794, 4805, 4807, 4818, 4820, 4830, 4835, 4844, 4846, 4850, 4853, 4863, 3, 0, 2, 0, 0, 1, 0, 0, 3, 0] \ No newline at end of file diff --git a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLLexer.tokens b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLLexer.tokens index 4779948fd379..18d74279da11 100644 --- a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLLexer.tokens +++ b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLLexer.tokens @@ -2,658 +2,914 @@ SPACE=1 SEARCH=2 DESCRIBE=3 SHOW=4 -FROM=5 -WHERE=6 -FIELDS=7 -RENAME=8 -STATS=9 -DEDUP=10 -SORT=11 -EVAL=12 -HEAD=13 -TOP=14 -RARE=15 -PARSE=16 -METHOD=17 -REGEX=18 -PUNCT=19 -GROK=20 -PATTERN=21 -PATTERNS=22 -NEW_FIELD=23 -KMEANS=24 -AD=25 -ML=26 -AS=27 -BY=28 -SOURCE=29 -INDEX=30 -D=31 -DESC=32 -DATASOURCES=33 -SORTBY=34 -AUTO=35 -STR=36 -IP=37 -NUM=38 -KEEPEMPTY=39 -CONSECUTIVE=40 -DEDUP_SPLITVALUES=41 -PARTITIONS=42 -ALLNUM=43 -DELIM=44 -CENTROIDS=45 -ITERATIONS=46 -DISTANCE_TYPE=47 -NUMBER_OF_TREES=48 -SHINGLE_SIZE=49 -SAMPLE_SIZE=50 -OUTPUT_AFTER=51 -TIME_DECAY=52 -ANOMALY_RATE=53 -CATEGORY_FIELD=54 -TIME_FIELD=55 -TIME_ZONE=56 -TRAINING_DATA_SIZE=57 -ANOMALY_SCORE_THRESHOLD=58 -CASE=59 -IN=60 -NOT=61 -OR=62 -AND=63 -XOR=64 -TRUE=65 -FALSE=66 -REGEXP=67 -CONVERT_TZ=68 -DATETIME=69 -DAY=70 -DAY_HOUR=71 -DAY_MICROSECOND=72 -DAY_MINUTE=73 -DAY_OF_YEAR=74 -DAY_SECOND=75 -HOUR=76 -HOUR_MICROSECOND=77 -HOUR_MINUTE=78 -HOUR_OF_DAY=79 -HOUR_SECOND=80 -INTERVAL=81 -MICROSECOND=82 -MILLISECOND=83 -MINUTE=84 -MINUTE_MICROSECOND=85 -MINUTE_OF_DAY=86 -MINUTE_OF_HOUR=87 -MINUTE_SECOND=88 -MONTH=89 -MONTH_OF_YEAR=90 -QUARTER=91 -SECOND=92 -SECOND_MICROSECOND=93 -SECOND_OF_MINUTE=94 -WEEK=95 -WEEK_OF_YEAR=96 -YEAR=97 -YEAR_MONTH=98 -DATAMODEL=99 -LOOKUP=100 -SAVEDSEARCH=101 -INT=102 -INTEGER=103 -DOUBLE=104 -LONG=105 -FLOAT=106 -STRING=107 -BOOLEAN=108 -PIPE=109 -COMMA=110 -DOT=111 -EQUAL=112 -GREATER=113 -LESS=114 -NOT_GREATER=115 -NOT_LESS=116 -NOT_EQUAL=117 -PLUS=118 -MINUS=119 -STAR=120 -DIVIDE=121 -MODULE=122 -EXCLAMATION_SYMBOL=123 -COLON=124 -LT_PRTHS=125 -RT_PRTHS=126 -LT_SQR_PRTHS=127 -RT_SQR_PRTHS=128 -SINGLE_QUOTE=129 -DOUBLE_QUOTE=130 -BACKTICK=131 -BIT_NOT_OP=132 -BIT_AND_OP=133 -BIT_XOR_OP=134 -AVG=135 -COUNT=136 -DISTINCT_COUNT=137 -ESTDC=138 -ESTDC_ERROR=139 -MAX=140 -MEAN=141 -MEDIAN=142 -MIN=143 -MODE=144 -RANGE=145 -STDEV=146 -STDEVP=147 -SUM=148 -SUMSQ=149 -VAR_SAMP=150 -VAR_POP=151 -STDDEV_SAMP=152 -STDDEV_POP=153 -PERCENTILE=154 -TAKE=155 -FIRST=156 -LAST=157 -LIST=158 -VALUES=159 -EARLIEST=160 -EARLIEST_TIME=161 -LATEST=162 -LATEST_TIME=163 -PER_DAY=164 -PER_HOUR=165 -PER_MINUTE=166 -PER_SECOND=167 -RATE=168 -SPARKLINE=169 -C=170 -DC=171 -ABS=172 -CBRT=173 -CEIL=174 -CEILING=175 -CONV=176 -CRC32=177 -E=178 -EXP=179 -FLOOR=180 -LN=181 -LOG=182 -LOG10=183 -LOG2=184 -MOD=185 -PI=186 -POSITION=187 -POW=188 -POWER=189 -RAND=190 -ROUND=191 -SIGN=192 -SQRT=193 -TRUNCATE=194 -ACOS=195 -ASIN=196 -ATAN=197 -ATAN2=198 -COS=199 -COT=200 -DEGREES=201 -RADIANS=202 -SIN=203 -TAN=204 -ADDDATE=205 -ADDTIME=206 -CURDATE=207 -CURRENT_DATE=208 -CURRENT_TIME=209 -CURRENT_TIMESTAMP=210 -CURTIME=211 -DATE=212 -DATEDIFF=213 -DATE_ADD=214 -DATE_FORMAT=215 -DATE_SUB=216 -DAYNAME=217 -DAYOFMONTH=218 -DAYOFWEEK=219 -DAYOFYEAR=220 -DAY_OF_MONTH=221 -DAY_OF_WEEK=222 -EXTRACT=223 -FROM_DAYS=224 -FROM_UNIXTIME=225 -GET_FORMAT=226 -LAST_DAY=227 -LOCALTIME=228 -LOCALTIMESTAMP=229 -MAKEDATE=230 -MAKETIME=231 -MONTHNAME=232 -NOW=233 -PERIOD_ADD=234 -PERIOD_DIFF=235 -SEC_TO_TIME=236 -STR_TO_DATE=237 -SUBDATE=238 -SUBTIME=239 -SYSDATE=240 -TIME=241 -TIMEDIFF=242 -TIMESTAMP=243 -TIMESTAMPADD=244 -TIMESTAMPDIFF=245 -TIME_FORMAT=246 -TIME_TO_SEC=247 -TO_DAYS=248 -TO_SECONDS=249 -UNIX_TIMESTAMP=250 -UTC_DATE=251 -UTC_TIME=252 -UTC_TIMESTAMP=253 -WEEKDAY=254 -YEARWEEK=255 -SUBSTR=256 -SUBSTRING=257 -LTRIM=258 -RTRIM=259 -TRIM=260 -TO=261 -LOWER=262 -UPPER=263 -CONCAT=264 -CONCAT_WS=265 -LENGTH=266 -STRCMP=267 -RIGHT=268 -LEFT=269 -ASCII=270 -LOCATE=271 -REPLACE=272 -REVERSE=273 -CAST=274 -LIKE=275 -ISNULL=276 -ISNOTNULL=277 -IFNULL=278 -NULLIF=279 -IF=280 -TYPEOF=281 -MATCH=282 -MATCH_PHRASE=283 -MATCH_PHRASE_PREFIX=284 -MATCH_BOOL_PREFIX=285 -SIMPLE_QUERY_STRING=286 -MULTI_MATCH=287 -QUERY_STRING=288 -ALLOW_LEADING_WILDCARD=289 -ANALYZE_WILDCARD=290 -ANALYZER=291 -AUTO_GENERATE_SYNONYMS_PHRASE_QUERY=292 -BOOST=293 -CUTOFF_FREQUENCY=294 -DEFAULT_FIELD=295 -DEFAULT_OPERATOR=296 -ENABLE_POSITION_INCREMENTS=297 -ESCAPE=298 -FLAGS=299 -FUZZY_MAX_EXPANSIONS=300 -FUZZY_PREFIX_LENGTH=301 -FUZZY_TRANSPOSITIONS=302 -FUZZY_REWRITE=303 -FUZZINESS=304 -LENIENT=305 -LOW_FREQ_OPERATOR=306 -MAX_DETERMINIZED_STATES=307 -MAX_EXPANSIONS=308 -MINIMUM_SHOULD_MATCH=309 -OPERATOR=310 -PHRASE_SLOP=311 -PREFIX_LENGTH=312 -QUOTE_ANALYZER=313 -QUOTE_FIELD_SUFFIX=314 -REWRITE=315 -SLOP=316 -TIE_BREAKER=317 -TYPE=318 -ZERO_TERMS_QUERY=319 -SPAN=320 -MS=321 -S=322 -M=323 -H=324 -W=325 -Q=326 -Y=327 -ID=328 -CLUSTER=329 -INTEGER_LITERAL=330 -DECIMAL_LITERAL=331 -ID_DATE_SUFFIX=332 -DQUOTA_STRING=333 -SQUOTA_STRING=334 -BQUOTA_STRING=335 -ERROR_RECOGNITION=336 +EXPLAIN=5 +FROM=6 +WHERE=7 +FIELDS=8 +FIELD=9 +TABLE=10 +RENAME=11 +STATS=12 +EVENTSTATS=13 +DEDUP=14 +SORT=15 +EVAL=16 +HEAD=17 +BIN=18 +TOP=19 +RARE=20 +PARSE=21 +SPATH=22 +REGEX=23 +REX=24 +SED=25 +PUNCT=26 +GROK=27 +PATTERN=28 +PATTERNS=29 +NEW_FIELD=30 +KMEANS=31 +AD=32 +ML=33 +FILLNULL=34 +FLATTEN=35 +TRENDLINE=36 +TIMECHART=37 +APPENDCOL=38 +EXPAND=39 +SIMPLE_PATTERN=40 +BRAIN=41 +VARIABLE_COUNT_THRESHOLD=42 +FREQUENCY_THRESHOLD_PERCENTAGE=43 +METHOD=44 +MAX_SAMPLE_COUNT=45 +MAX_MATCH=46 +OFFSET_FIELD=47 +BUFFER_LIMIT=48 +LABEL=49 +AGGREGATION=50 +JOIN=51 +ON=52 +INNER=53 +OUTER=54 +FULL=55 +SEMI=56 +ANTI=57 +CROSS=58 +LEFT_HINT=59 +RIGHT_HINT=60 +AS=61 +BY=62 +SOURCE=63 +INDEX=64 +A=65 +ASC=66 +D=67 +DESC=68 +DATASOURCES=69 +USING=70 +WITH=71 +SIMPLE=72 +STANDARD=73 +COST=74 +EXTENDED=75 +OVERRIDE=76 +OVERWRITE=77 +AUTO=78 +STR=79 +NUM=80 +SMA=81 +WMA=82 +KEEPEMPTY=83 +CONSECUTIVE=84 +DEDUP_SPLITVALUES=85 +PARTITIONS=86 +ALLNUM=87 +DELIM=88 +BUCKET_NULLABLE=89 +CENTROIDS=90 +ITERATIONS=91 +DISTANCE_TYPE=92 +NUMBER_OF_TREES=93 +SHINGLE_SIZE=94 +SAMPLE_SIZE=95 +OUTPUT_AFTER=96 +TIME_DECAY=97 +ANOMALY_RATE=98 +CATEGORY_FIELD=99 +TIME_FIELD=100 +TIME_ZONE=101 +TRAINING_DATA_SIZE=102 +ANOMALY_SCORE_THRESHOLD=103 +APPEND=104 +COUNTFIELD=105 +SHOWCOUNT=106 +LIMIT=107 +USEOTHER=108 +INPUT=109 +OUTPUT=110 +PATH=111 +CASE=112 +ELSE=113 +IN=114 +EXISTS=115 +GEOIP=116 +NOT=117 +OR=118 +AND=119 +XOR=120 +TRUE=121 +FALSE=122 +REGEXP=123 +REGEX_MATCH=124 +CONVERT_TZ=125 +DATETIME=126 +DAY=127 +DAY_HOUR=128 +DAY_MICROSECOND=129 +DAY_MINUTE=130 +DAY_OF_YEAR=131 +DAY_SECOND=132 +HOUR=133 +HOUR_MICROSECOND=134 +HOUR_MINUTE=135 +HOUR_OF_DAY=136 +HOUR_SECOND=137 +INTERVAL=138 +MICROSECOND=139 +MILLISECOND=140 +MINUTE=141 +MINUTE_MICROSECOND=142 +MINUTE_OF_DAY=143 +MINUTE_OF_HOUR=144 +MINUTE_SECOND=145 +MONTH=146 +MONTH_OF_YEAR=147 +QUARTER=148 +SECOND=149 +SECOND_MICROSECOND=150 +SECOND_OF_MINUTE=151 +WEEK=152 +WEEK_OF_YEAR=153 +YEAR=154 +YEAR_MONTH=155 +DATAMODEL=156 +LOOKUP=157 +SAVEDSEARCH=158 +INT=159 +INTEGER=160 +DOUBLE=161 +LONG=162 +FLOAT=163 +STRING=164 +BOOLEAN=165 +IP=166 +PIPE=167 +COMMA=168 +DOT=169 +EQUAL=170 +DOUBLE_EQUAL=171 +GREATER=172 +LESS=173 +NOT_GREATER=174 +NOT_LESS=175 +NOT_EQUAL=176 +PLUS=177 +MINUS=178 +STAR=179 +DIVIDE=180 +MODULE=181 +EXCLAMATION_SYMBOL=182 +COLON=183 +LT_PRTHS=184 +RT_PRTHS=185 +LT_SQR_PRTHS=186 +RT_SQR_PRTHS=187 +LT_CURLY=188 +RT_CURLY=189 +SINGLE_QUOTE=190 +DOUBLE_QUOTE=191 +BACKTICK=192 +ARROW=193 +BIT_NOT_OP=194 +BIT_AND_OP=195 +BIT_XOR_OP=196 +AVG=197 +COUNT=198 +DISTINCT_COUNT=199 +DISTINCT_COUNT_APPROX=200 +ESTDC=201 +ESTDC_ERROR=202 +MAX=203 +MEAN=204 +MEDIAN=205 +MIN=206 +MODE=207 +RANGE=208 +STDEV=209 +STDEVP=210 +SUM=211 +SUMSQ=212 +VAR_SAMP=213 +VAR_POP=214 +STDDEV_SAMP=215 +STDDEV_POP=216 +PERC=217 +PERCENTILE=218 +PERCENTILE_APPROX=219 +EARLIEST=220 +LATEST=221 +TAKE=222 +LIST=223 +VALUES=224 +PER_DAY=225 +PER_HOUR=226 +PER_MINUTE=227 +PER_SECOND=228 +RATE=229 +SPARKLINE=230 +C=231 +DC=232 +ROW_NUMBER=233 +RANK=234 +DENSE_RANK=235 +PERCENT_RANK=236 +CUME_DIST=237 +FIRST=238 +LAST=239 +NTH=240 +NTILE=241 +PLUS_FUCTION=242 +MINUS_FUCTION=243 +STAR_FUNCTION=244 +DIVIDE_FUNCTION=245 +ABS=246 +CBRT=247 +CEIL=248 +CEILING=249 +CONV=250 +CRC32=251 +E=252 +EXP=253 +EXPM1=254 +FLOOR=255 +LN=256 +LOG=257 +LOG_WITH_BASE=258 +MOD=259 +MODULUS=260 +PI=261 +POSITION=262 +POW=263 +POWER=264 +RAND=265 +ROUND=266 +SIGN=267 +SQRT=268 +TRUNCATE=269 +RINT=270 +SIGNUM=271 +ACOS=272 +ASIN=273 +ATAN=274 +ATAN2=275 +COS=276 +COSH=277 +COT=278 +DEGREES=279 +RADIANS=280 +SIN=281 +SINH=282 +TAN=283 +MD5=284 +SHA1=285 +SHA2=286 +ADDDATE=287 +ADDTIME=288 +CURDATE=289 +CURRENT_DATE=290 +CURRENT_TIME=291 +CURRENT_TIMESTAMP=292 +CURTIME=293 +DATE=294 +DATEDIFF=295 +DATE_ADD=296 +DATE_FORMAT=297 +DATE_SUB=298 +DAYNAME=299 +DAYOFMONTH=300 +DAYOFWEEK=301 +DAYOFYEAR=302 +DAY_OF_MONTH=303 +DAY_OF_WEEK=304 +EXTRACT=305 +FROM_DAYS=306 +FROM_UNIXTIME=307 +GET_FORMAT=308 +LAST_DAY=309 +LOCALTIME=310 +LOCALTIMESTAMP=311 +MAKEDATE=312 +MAKETIME=313 +MONTHNAME=314 +NOW=315 +PERIOD_ADD=316 +PERIOD_DIFF=317 +SEC_TO_TIME=318 +STR_TO_DATE=319 +SUBDATE=320 +SUBTIME=321 +SYSDATE=322 +TIME=323 +TIMEDIFF=324 +TIMESTAMP=325 +TIMESTAMPADD=326 +TIMESTAMPDIFF=327 +TIME_FORMAT=328 +TIME_TO_SEC=329 +TO_DAYS=330 +TO_SECONDS=331 +UNIX_TIMESTAMP=332 +UTC_DATE=333 +UTC_TIME=334 +UTC_TIMESTAMP=335 +WEEKDAY=336 +YEARWEEK=337 +STRFTIME=338 +SUBSTR=339 +SUBSTRING=340 +LTRIM=341 +RTRIM=342 +TRIM=343 +TO=344 +LOWER=345 +UPPER=346 +CONCAT=347 +CONCAT_WS=348 +LENGTH=349 +STRCMP=350 +RIGHT=351 +LEFT=352 +ASCII=353 +LOCATE=354 +REPLACE=355 +REVERSE=356 +CAST=357 +LIKE=358 +ISNULL=359 +ISNOTNULL=360 +CIDRMATCH=361 +BETWEEN=362 +ISPRESENT=363 +ISEMPTY=364 +ISBLANK=365 +ARRAY=366 +ARRAY_LENGTH=367 +MVJOIN=368 +FORALL=369 +FILTER=370 +TRANSFORM=371 +REDUCE=372 +JSON_VALID=373 +JSON=374 +JSON_OBJECT=375 +JSON_ARRAY=376 +JSON_ARRAY_LENGTH=377 +JSON_EXTRACT=378 +JSON_KEYS=379 +JSON_SET=380 +JSON_DELETE=381 +JSON_APPEND=382 +JSON_EXTEND=383 +IFNULL=384 +NULLIF=385 +IF=386 +TYPEOF=387 +COALESCE=388 +MATCH=389 +MATCH_PHRASE=390 +MATCH_PHRASE_PREFIX=391 +MATCH_BOOL_PREFIX=392 +SIMPLE_QUERY_STRING=393 +MULTI_MATCH=394 +QUERY_STRING=395 +ALLOW_LEADING_WILDCARD=396 +ANALYZE_WILDCARD=397 +ANALYZER=398 +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY=399 +BOOST=400 +CUTOFF_FREQUENCY=401 +DEFAULT_FIELD=402 +DEFAULT_OPERATOR=403 +ENABLE_POSITION_INCREMENTS=404 +ESCAPE=405 +FLAGS=406 +FUZZY_MAX_EXPANSIONS=407 +FUZZY_PREFIX_LENGTH=408 +FUZZY_TRANSPOSITIONS=409 +FUZZY_REWRITE=410 +FUZZINESS=411 +LENIENT=412 +LOW_FREQ_OPERATOR=413 +MAX_DETERMINIZED_STATES=414 +MAX_EXPANSIONS=415 +MINIMUM_SHOULD_MATCH=416 +OPERATOR=417 +PHRASE_SLOP=418 +PREFIX_LENGTH=419 +QUOTE_ANALYZER=420 +QUOTE_FIELD_SUFFIX=421 +REWRITE=422 +SLOP=423 +TIE_BREAKER=424 +TYPE=425 +ZERO_TERMS_QUERY=426 +SPAN=427 +BINS=428 +MINSPAN=429 +START=430 +END=431 +ALIGNTIME=432 +MS=433 +S=434 +M=435 +H=436 +W=437 +Q=438 +Y=439 +SEC=440 +SECS=441 +SECONDS=442 +MINS=443 +MINUTES=444 +HR=445 +HRS=446 +HOURS=447 +DAYS=448 +MON=449 +MONTHS=450 +US=451 +CS=452 +DS=453 +PERCENTILE_SHORTCUT=454 +ID=455 +CLUSTER=456 +INTEGER_LITERAL=457 +DECIMAL_LITERAL=458 +FLOAT_LITERAL=459 +DOUBLE_LITERAL=460 +ID_DATE_SUFFIX=461 +DQUOTA_STRING=462 +SQUOTA_STRING=463 +BQUOTA_STRING=464 +LINE_COMMENT=465 +BLOCK_COMMENT=466 +ERROR_RECOGNITION=467 'SEARCH'=2 'DESCRIBE'=3 'SHOW'=4 -'FROM'=5 -'WHERE'=6 -'FIELDS'=7 -'RENAME'=8 -'STATS'=9 -'DEDUP'=10 -'SORT'=11 -'EVAL'=12 -'HEAD'=13 -'TOP'=14 -'RARE'=15 -'PARSE'=16 -'METHOD'=17 -'REGEX'=18 -'PUNCT'=19 -'GROK'=20 -'PATTERN'=21 -'PATTERNS'=22 -'NEW_FIELD'=23 -'KMEANS'=24 -'AD'=25 -'ML'=26 -'AS'=27 -'BY'=28 -'SOURCE'=29 -'INDEX'=30 -'D'=31 -'DESC'=32 -'DATASOURCES'=33 -'SORTBY'=34 -'AUTO'=35 -'STR'=36 -'IP'=37 -'NUM'=38 -'KEEPEMPTY'=39 -'CONSECUTIVE'=40 -'DEDUP_SPLITVALUES'=41 -'PARTITIONS'=42 -'ALLNUM'=43 -'DELIM'=44 -'CENTROIDS'=45 -'ITERATIONS'=46 -'DISTANCE_TYPE'=47 -'NUMBER_OF_TREES'=48 -'SHINGLE_SIZE'=49 -'SAMPLE_SIZE'=50 -'OUTPUT_AFTER'=51 -'TIME_DECAY'=52 -'ANOMALY_RATE'=53 -'CATEGORY_FIELD'=54 -'TIME_FIELD'=55 -'TIME_ZONE'=56 -'TRAINING_DATA_SIZE'=57 -'ANOMALY_SCORE_THRESHOLD'=58 -'CASE'=59 -'IN'=60 -'NOT'=61 -'OR'=62 -'AND'=63 -'XOR'=64 -'TRUE'=65 -'FALSE'=66 -'REGEXP'=67 -'CONVERT_TZ'=68 -'DATETIME'=69 -'DAY'=70 -'DAY_HOUR'=71 -'DAY_MICROSECOND'=72 -'DAY_MINUTE'=73 -'DAY_OF_YEAR'=74 -'DAY_SECOND'=75 -'HOUR'=76 -'HOUR_MICROSECOND'=77 -'HOUR_MINUTE'=78 -'HOUR_OF_DAY'=79 -'HOUR_SECOND'=80 -'INTERVAL'=81 -'MICROSECOND'=82 -'MILLISECOND'=83 -'MINUTE'=84 -'MINUTE_MICROSECOND'=85 -'MINUTE_OF_DAY'=86 -'MINUTE_OF_HOUR'=87 -'MINUTE_SECOND'=88 -'MONTH'=89 -'MONTH_OF_YEAR'=90 -'QUARTER'=91 -'SECOND'=92 -'SECOND_MICROSECOND'=93 -'SECOND_OF_MINUTE'=94 -'WEEK'=95 -'WEEK_OF_YEAR'=96 -'YEAR'=97 -'YEAR_MONTH'=98 -'DATAMODEL'=99 -'LOOKUP'=100 -'SAVEDSEARCH'=101 -'INT'=102 -'INTEGER'=103 -'DOUBLE'=104 -'LONG'=105 -'FLOAT'=106 -'STRING'=107 -'BOOLEAN'=108 -'|'=109 -','=110 -'.'=111 -'='=112 -'>'=113 -'<'=114 -'+'=118 -'-'=119 -'*'=120 -'/'=121 -'%'=122 -'!'=123 -':'=124 -'('=125 -')'=126 -'['=127 -']'=128 -'\''=129 -'"'=130 -'`'=131 -'~'=132 -'&'=133 -'^'=134 -'AVG'=135 -'COUNT'=136 -'DISTINCT_COUNT'=137 -'ESTDC'=138 -'ESTDC_ERROR'=139 -'MAX'=140 -'MEAN'=141 -'MEDIAN'=142 -'MIN'=143 -'MODE'=144 -'RANGE'=145 -'STDEV'=146 -'STDEVP'=147 -'SUM'=148 -'SUMSQ'=149 -'VAR_SAMP'=150 -'VAR_POP'=151 -'STDDEV_SAMP'=152 -'STDDEV_POP'=153 -'PERCENTILE'=154 -'TAKE'=155 -'FIRST'=156 -'LAST'=157 -'LIST'=158 -'VALUES'=159 -'EARLIEST'=160 -'EARLIEST_TIME'=161 -'LATEST'=162 -'LATEST_TIME'=163 -'PER_DAY'=164 -'PER_HOUR'=165 -'PER_MINUTE'=166 -'PER_SECOND'=167 -'RATE'=168 -'SPARKLINE'=169 -'C'=170 -'DC'=171 -'ABS'=172 -'CBRT'=173 -'CEIL'=174 -'CEILING'=175 -'CONV'=176 -'CRC32'=177 -'E'=178 -'EXP'=179 -'FLOOR'=180 -'LN'=181 -'LOG'=182 -'LOG10'=183 -'LOG2'=184 -'MOD'=185 -'PI'=186 -'POSITION'=187 -'POW'=188 -'POWER'=189 -'RAND'=190 -'ROUND'=191 -'SIGN'=192 -'SQRT'=193 -'TRUNCATE'=194 -'ACOS'=195 -'ASIN'=196 -'ATAN'=197 -'ATAN2'=198 -'COS'=199 -'COT'=200 -'DEGREES'=201 -'RADIANS'=202 -'SIN'=203 -'TAN'=204 -'ADDDATE'=205 -'ADDTIME'=206 -'CURDATE'=207 -'CURRENT_DATE'=208 -'CURRENT_TIME'=209 -'CURRENT_TIMESTAMP'=210 -'CURTIME'=211 -'DATE'=212 -'DATEDIFF'=213 -'DATE_ADD'=214 -'DATE_FORMAT'=215 -'DATE_SUB'=216 -'DAYNAME'=217 -'DAYOFMONTH'=218 -'DAYOFWEEK'=219 -'DAYOFYEAR'=220 -'DAY_OF_MONTH'=221 -'DAY_OF_WEEK'=222 -'EXTRACT'=223 -'FROM_DAYS'=224 -'FROM_UNIXTIME'=225 -'GET_FORMAT'=226 -'LAST_DAY'=227 -'LOCALTIME'=228 -'LOCALTIMESTAMP'=229 -'MAKEDATE'=230 -'MAKETIME'=231 -'MONTHNAME'=232 -'NOW'=233 -'PERIOD_ADD'=234 -'PERIOD_DIFF'=235 -'SEC_TO_TIME'=236 -'STR_TO_DATE'=237 -'SUBDATE'=238 -'SUBTIME'=239 -'SYSDATE'=240 -'TIME'=241 -'TIMEDIFF'=242 -'TIMESTAMP'=243 -'TIMESTAMPADD'=244 -'TIMESTAMPDIFF'=245 -'TIME_FORMAT'=246 -'TIME_TO_SEC'=247 -'TO_DAYS'=248 -'TO_SECONDS'=249 -'UNIX_TIMESTAMP'=250 -'UTC_DATE'=251 -'UTC_TIME'=252 -'UTC_TIMESTAMP'=253 -'WEEKDAY'=254 -'YEARWEEK'=255 -'SUBSTR'=256 -'SUBSTRING'=257 -'LTRIM'=258 -'RTRIM'=259 -'TRIM'=260 -'TO'=261 -'LOWER'=262 -'UPPER'=263 -'CONCAT'=264 -'CONCAT_WS'=265 -'LENGTH'=266 -'STRCMP'=267 -'RIGHT'=268 -'LEFT'=269 -'ASCII'=270 -'LOCATE'=271 -'REPLACE'=272 -'REVERSE'=273 -'CAST'=274 -'LIKE'=275 -'ISNULL'=276 -'ISNOTNULL'=277 -'IFNULL'=278 -'NULLIF'=279 -'IF'=280 -'TYPEOF'=281 -'MATCH'=282 -'MATCH_PHRASE'=283 -'MATCH_PHRASE_PREFIX'=284 -'MATCH_BOOL_PREFIX'=285 -'SIMPLE_QUERY_STRING'=286 -'MULTI_MATCH'=287 -'QUERY_STRING'=288 -'ALLOW_LEADING_WILDCARD'=289 -'ANALYZE_WILDCARD'=290 -'ANALYZER'=291 -'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'=292 -'BOOST'=293 -'CUTOFF_FREQUENCY'=294 -'DEFAULT_FIELD'=295 -'DEFAULT_OPERATOR'=296 -'ENABLE_POSITION_INCREMENTS'=297 -'ESCAPE'=298 -'FLAGS'=299 -'FUZZY_MAX_EXPANSIONS'=300 -'FUZZY_PREFIX_LENGTH'=301 -'FUZZY_TRANSPOSITIONS'=302 -'FUZZY_REWRITE'=303 -'FUZZINESS'=304 -'LENIENT'=305 -'LOW_FREQ_OPERATOR'=306 -'MAX_DETERMINIZED_STATES'=307 -'MAX_EXPANSIONS'=308 -'MINIMUM_SHOULD_MATCH'=309 -'OPERATOR'=310 -'PHRASE_SLOP'=311 -'PREFIX_LENGTH'=312 -'QUOTE_ANALYZER'=313 -'QUOTE_FIELD_SUFFIX'=314 -'REWRITE'=315 -'SLOP'=316 -'TIE_BREAKER'=317 -'TYPE'=318 -'ZERO_TERMS_QUERY'=319 -'SPAN'=320 -'MS'=321 -'S'=322 -'M'=323 -'H'=324 -'W'=325 -'Q'=326 -'Y'=327 +'EXPLAIN'=5 +'FROM'=6 +'WHERE'=7 +'FIELDS'=8 +'FIELD'=9 +'TABLE'=10 +'RENAME'=11 +'STATS'=12 +'EVENTSTATS'=13 +'DEDUP'=14 +'SORT'=15 +'EVAL'=16 +'HEAD'=17 +'BIN'=18 +'TOP'=19 +'RARE'=20 +'PARSE'=21 +'SPATH'=22 +'REGEX'=23 +'REX'=24 +'SED'=25 +'PUNCT'=26 +'GROK'=27 +'PATTERN'=28 +'PATTERNS'=29 +'NEW_FIELD'=30 +'KMEANS'=31 +'AD'=32 +'ML'=33 +'FILLNULL'=34 +'FLATTEN'=35 +'TRENDLINE'=36 +'TIMECHART'=37 +'APPENDCOL'=38 +'EXPAND'=39 +'SIMPLE_PATTERN'=40 +'BRAIN'=41 +'VARIABLE_COUNT_THRESHOLD'=42 +'FREQUENCY_THRESHOLD_PERCENTAGE'=43 +'METHOD'=44 +'MAX_SAMPLE_COUNT'=45 +'MAX_MATCH'=46 +'OFFSET_FIELD'=47 +'BUFFER_LIMIT'=48 +'LABEL'=49 +'AGGREGATION'=50 +'JOIN'=51 +'ON'=52 +'INNER'=53 +'OUTER'=54 +'FULL'=55 +'SEMI'=56 +'ANTI'=57 +'CROSS'=58 +'HINT.LEFT'=59 +'HINT.RIGHT'=60 +'AS'=61 +'BY'=62 +'SOURCE'=63 +'INDEX'=64 +'A'=65 +'ASC'=66 +'D'=67 +'DESC'=68 +'DATASOURCES'=69 +'USING'=70 +'WITH'=71 +'SIMPLE'=72 +'STANDARD'=73 +'COST'=74 +'EXTENDED'=75 +'OVERRIDE'=76 +'OVERWRITE'=77 +'AUTO'=78 +'STR'=79 +'NUM'=80 +'SMA'=81 +'WMA'=82 +'KEEPEMPTY'=83 +'CONSECUTIVE'=84 +'DEDUP_SPLITVALUES'=85 +'PARTITIONS'=86 +'ALLNUM'=87 +'DELIM'=88 +'BUCKET_NULLABLE'=89 +'CENTROIDS'=90 +'ITERATIONS'=91 +'DISTANCE_TYPE'=92 +'NUMBER_OF_TREES'=93 +'SHINGLE_SIZE'=94 +'SAMPLE_SIZE'=95 +'OUTPUT_AFTER'=96 +'TIME_DECAY'=97 +'ANOMALY_RATE'=98 +'CATEGORY_FIELD'=99 +'TIME_FIELD'=100 +'TIME_ZONE'=101 +'TRAINING_DATA_SIZE'=102 +'ANOMALY_SCORE_THRESHOLD'=103 +'APPEND'=104 +'COUNTFIELD'=105 +'SHOWCOUNT'=106 +'LIMIT'=107 +'USEOTHER'=108 +'INPUT'=109 +'OUTPUT'=110 +'PATH'=111 +'CASE'=112 +'ELSE'=113 +'IN'=114 +'EXISTS'=115 +'GEOIP'=116 +'NOT'=117 +'OR'=118 +'AND'=119 +'XOR'=120 +'TRUE'=121 +'FALSE'=122 +'REGEXP'=123 +'REGEX_MATCH'=124 +'CONVERT_TZ'=125 +'DATETIME'=126 +'DAY'=127 +'DAY_HOUR'=128 +'DAY_MICROSECOND'=129 +'DAY_MINUTE'=130 +'DAY_OF_YEAR'=131 +'DAY_SECOND'=132 +'HOUR'=133 +'HOUR_MICROSECOND'=134 +'HOUR_MINUTE'=135 +'HOUR_OF_DAY'=136 +'HOUR_SECOND'=137 +'INTERVAL'=138 +'MICROSECOND'=139 +'MILLISECOND'=140 +'MINUTE'=141 +'MINUTE_MICROSECOND'=142 +'MINUTE_OF_DAY'=143 +'MINUTE_OF_HOUR'=144 +'MINUTE_SECOND'=145 +'MONTH'=146 +'MONTH_OF_YEAR'=147 +'QUARTER'=148 +'SECOND'=149 +'SECOND_MICROSECOND'=150 +'SECOND_OF_MINUTE'=151 +'WEEK'=152 +'WEEK_OF_YEAR'=153 +'YEAR'=154 +'YEAR_MONTH'=155 +'DATAMODEL'=156 +'LOOKUP'=157 +'SAVEDSEARCH'=158 +'INT'=159 +'INTEGER'=160 +'DOUBLE'=161 +'LONG'=162 +'FLOAT'=163 +'STRING'=164 +'BOOLEAN'=165 +'IP'=166 +'|'=167 +','=168 +'.'=169 +'='=170 +'=='=171 +'>'=172 +'<'=173 +'+'=177 +'-'=178 +'*'=179 +'/'=180 +'%'=181 +'!'=182 +':'=183 +'('=184 +')'=185 +'['=186 +']'=187 +'{'=188 +'}'=189 +'\''=190 +'"'=191 +'`'=192 +'->'=193 +'~'=194 +'&'=195 +'^'=196 +'AVG'=197 +'COUNT'=198 +'DISTINCT_COUNT'=199 +'DISTINCT_COUNT_APPROX'=200 +'ESTDC'=201 +'ESTDC_ERROR'=202 +'MAX'=203 +'MEAN'=204 +'MEDIAN'=205 +'MIN'=206 +'MODE'=207 +'RANGE'=208 +'STDEV'=209 +'STDEVP'=210 +'SUM'=211 +'SUMSQ'=212 +'VAR_SAMP'=213 +'VAR_POP'=214 +'STDDEV_SAMP'=215 +'STDDEV_POP'=216 +'PERC'=217 +'PERCENTILE'=218 +'PERCENTILE_APPROX'=219 +'EARLIEST'=220 +'LATEST'=221 +'TAKE'=222 +'LIST'=223 +'VALUES'=224 +'PER_DAY'=225 +'PER_HOUR'=226 +'PER_MINUTE'=227 +'PER_SECOND'=228 +'RATE'=229 +'SPARKLINE'=230 +'C'=231 +'DC'=232 +'ROW_NUMBER'=233 +'RANK'=234 +'DENSE_RANK'=235 +'PERCENT_RANK'=236 +'CUME_DIST'=237 +'FIRST'=238 +'LAST'=239 +'NTH'=240 +'NTILE'=241 +'ADD'=242 +'SUBTRACT'=243 +'MULTIPLY'=244 +'DIVIDE'=245 +'ABS'=246 +'CBRT'=247 +'CEIL'=248 +'CEILING'=249 +'CONV'=250 +'CRC32'=251 +'E'=252 +'EXP'=253 +'EXPM1'=254 +'FLOOR'=255 +'LN'=256 +'LOG'=257 +'MOD'=259 +'MODULUS'=260 +'PI'=261 +'POSITION'=262 +'POW'=263 +'POWER'=264 +'RAND'=265 +'ROUND'=266 +'SIGN'=267 +'SQRT'=268 +'TRUNCATE'=269 +'RINT'=270 +'SIGNUM'=271 +'ACOS'=272 +'ASIN'=273 +'ATAN'=274 +'ATAN2'=275 +'COS'=276 +'COSH'=277 +'COT'=278 +'DEGREES'=279 +'RADIANS'=280 +'SIN'=281 +'SINH'=282 +'TAN'=283 +'MD5'=284 +'SHA1'=285 +'SHA2'=286 +'ADDDATE'=287 +'ADDTIME'=288 +'CURDATE'=289 +'CURRENT_DATE'=290 +'CURRENT_TIME'=291 +'CURRENT_TIMESTAMP'=292 +'CURTIME'=293 +'DATE'=294 +'DATEDIFF'=295 +'DATE_ADD'=296 +'DATE_FORMAT'=297 +'DATE_SUB'=298 +'DAYNAME'=299 +'DAYOFMONTH'=300 +'DAYOFWEEK'=301 +'DAYOFYEAR'=302 +'DAY_OF_MONTH'=303 +'DAY_OF_WEEK'=304 +'EXTRACT'=305 +'FROM_DAYS'=306 +'FROM_UNIXTIME'=307 +'GET_FORMAT'=308 +'LAST_DAY'=309 +'LOCALTIME'=310 +'LOCALTIMESTAMP'=311 +'MAKEDATE'=312 +'MAKETIME'=313 +'MONTHNAME'=314 +'NOW'=315 +'PERIOD_ADD'=316 +'PERIOD_DIFF'=317 +'SEC_TO_TIME'=318 +'STR_TO_DATE'=319 +'SUBDATE'=320 +'SUBTIME'=321 +'SYSDATE'=322 +'TIME'=323 +'TIMEDIFF'=324 +'TIMESTAMP'=325 +'TIMESTAMPADD'=326 +'TIMESTAMPDIFF'=327 +'TIME_FORMAT'=328 +'TIME_TO_SEC'=329 +'TO_DAYS'=330 +'TO_SECONDS'=331 +'UNIX_TIMESTAMP'=332 +'UTC_DATE'=333 +'UTC_TIME'=334 +'UTC_TIMESTAMP'=335 +'WEEKDAY'=336 +'YEARWEEK'=337 +'STRFTIME'=338 +'SUBSTR'=339 +'SUBSTRING'=340 +'LTRIM'=341 +'RTRIM'=342 +'TRIM'=343 +'TO'=344 +'LOWER'=345 +'UPPER'=346 +'CONCAT'=347 +'CONCAT_WS'=348 +'LENGTH'=349 +'STRCMP'=350 +'RIGHT'=351 +'LEFT'=352 +'ASCII'=353 +'LOCATE'=354 +'REPLACE'=355 +'REVERSE'=356 +'CAST'=357 +'LIKE'=358 +'ISNULL'=359 +'ISNOTNULL'=360 +'CIDRMATCH'=361 +'BETWEEN'=362 +'ISPRESENT'=363 +'ISEMPTY'=364 +'ISBLANK'=365 +'ARRAY'=366 +'ARRAY_LENGTH'=367 +'MVJOIN'=368 +'FORALL'=369 +'FILTER'=370 +'TRANSFORM'=371 +'REDUCE'=372 +'JSON_VALID'=373 +'JSON'=374 +'JSON_OBJECT'=375 +'JSON_ARRAY'=376 +'JSON_ARRAY_LENGTH'=377 +'JSON_EXTRACT'=378 +'JSON_KEYS'=379 +'JSON_SET'=380 +'JSON_DELETE'=381 +'JSON_APPEND'=382 +'JSON_EXTEND'=383 +'IFNULL'=384 +'NULLIF'=385 +'IF'=386 +'TYPEOF'=387 +'COALESCE'=388 +'MATCH'=389 +'MATCH_PHRASE'=390 +'MATCH_PHRASE_PREFIX'=391 +'MATCH_BOOL_PREFIX'=392 +'SIMPLE_QUERY_STRING'=393 +'MULTI_MATCH'=394 +'QUERY_STRING'=395 +'ALLOW_LEADING_WILDCARD'=396 +'ANALYZE_WILDCARD'=397 +'ANALYZER'=398 +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'=399 +'BOOST'=400 +'CUTOFF_FREQUENCY'=401 +'DEFAULT_FIELD'=402 +'DEFAULT_OPERATOR'=403 +'ENABLE_POSITION_INCREMENTS'=404 +'ESCAPE'=405 +'FLAGS'=406 +'FUZZY_MAX_EXPANSIONS'=407 +'FUZZY_PREFIX_LENGTH'=408 +'FUZZY_TRANSPOSITIONS'=409 +'FUZZY_REWRITE'=410 +'FUZZINESS'=411 +'LENIENT'=412 +'LOW_FREQ_OPERATOR'=413 +'MAX_DETERMINIZED_STATES'=414 +'MAX_EXPANSIONS'=415 +'MINIMUM_SHOULD_MATCH'=416 +'OPERATOR'=417 +'PHRASE_SLOP'=418 +'PREFIX_LENGTH'=419 +'QUOTE_ANALYZER'=420 +'QUOTE_FIELD_SUFFIX'=421 +'REWRITE'=422 +'SLOP'=423 +'TIE_BREAKER'=424 +'TYPE'=425 +'ZERO_TERMS_QUERY'=426 +'SPAN'=427 +'BINS'=428 +'MINSPAN'=429 +'START'=430 +'END'=431 +'ALIGNTIME'=432 +'MS'=433 +'S'=434 +'M'=435 +'H'=436 +'W'=437 +'Q'=438 +'Y'=439 +'SEC'=440 +'SECS'=441 +'SECONDS'=442 +'MINS'=443 +'MINUTES'=444 +'HR'=445 +'HRS'=446 +'HOURS'=447 +'DAYS'=448 +'MON'=449 +'MONTHS'=450 +'US'=451 +'CS'=452 +'DS'=453 diff --git a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLLexer.ts b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLLexer.ts index 2ad94c1e7e08..e75b4ddef44a 100644 --- a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLLexer.ts +++ b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLLexer.ts @@ -9,467 +9,643 @@ export class OpenSearchPPLLexer extends antlr.Lexer { public static readonly SEARCH = 2; public static readonly DESCRIBE = 3; public static readonly SHOW = 4; - public static readonly FROM = 5; - public static readonly WHERE = 6; - public static readonly FIELDS = 7; - public static readonly RENAME = 8; - public static readonly STATS = 9; - public static readonly DEDUP = 10; - public static readonly SORT = 11; - public static readonly EVAL = 12; - public static readonly HEAD = 13; - public static readonly TOP = 14; - public static readonly RARE = 15; - public static readonly PARSE = 16; - public static readonly METHOD = 17; - public static readonly REGEX = 18; - public static readonly PUNCT = 19; - public static readonly GROK = 20; - public static readonly PATTERN = 21; - public static readonly PATTERNS = 22; - public static readonly NEW_FIELD = 23; - public static readonly KMEANS = 24; - public static readonly AD = 25; - public static readonly ML = 26; - public static readonly AS = 27; - public static readonly BY = 28; - public static readonly SOURCE = 29; - public static readonly INDEX = 30; - public static readonly D = 31; - public static readonly DESC = 32; - public static readonly DATASOURCES = 33; - public static readonly SORTBY = 34; - public static readonly AUTO = 35; - public static readonly STR = 36; - public static readonly IP = 37; - public static readonly NUM = 38; - public static readonly KEEPEMPTY = 39; - public static readonly CONSECUTIVE = 40; - public static readonly DEDUP_SPLITVALUES = 41; - public static readonly PARTITIONS = 42; - public static readonly ALLNUM = 43; - public static readonly DELIM = 44; - public static readonly CENTROIDS = 45; - public static readonly ITERATIONS = 46; - public static readonly DISTANCE_TYPE = 47; - public static readonly NUMBER_OF_TREES = 48; - public static readonly SHINGLE_SIZE = 49; - public static readonly SAMPLE_SIZE = 50; - public static readonly OUTPUT_AFTER = 51; - public static readonly TIME_DECAY = 52; - public static readonly ANOMALY_RATE = 53; - public static readonly CATEGORY_FIELD = 54; - public static readonly TIME_FIELD = 55; - public static readonly TIME_ZONE = 56; - public static readonly TRAINING_DATA_SIZE = 57; - public static readonly ANOMALY_SCORE_THRESHOLD = 58; - public static readonly CASE = 59; - public static readonly IN = 60; - public static readonly NOT = 61; - public static readonly OR = 62; - public static readonly AND = 63; - public static readonly XOR = 64; - public static readonly TRUE = 65; - public static readonly FALSE = 66; - public static readonly REGEXP = 67; - public static readonly CONVERT_TZ = 68; - public static readonly DATETIME = 69; - public static readonly DAY = 70; - public static readonly DAY_HOUR = 71; - public static readonly DAY_MICROSECOND = 72; - public static readonly DAY_MINUTE = 73; - public static readonly DAY_OF_YEAR = 74; - public static readonly DAY_SECOND = 75; - public static readonly HOUR = 76; - public static readonly HOUR_MICROSECOND = 77; - public static readonly HOUR_MINUTE = 78; - public static readonly HOUR_OF_DAY = 79; - public static readonly HOUR_SECOND = 80; - public static readonly INTERVAL = 81; - public static readonly MICROSECOND = 82; - public static readonly MILLISECOND = 83; - public static readonly MINUTE = 84; - public static readonly MINUTE_MICROSECOND = 85; - public static readonly MINUTE_OF_DAY = 86; - public static readonly MINUTE_OF_HOUR = 87; - public static readonly MINUTE_SECOND = 88; - public static readonly MONTH = 89; - public static readonly MONTH_OF_YEAR = 90; - public static readonly QUARTER = 91; - public static readonly SECOND = 92; - public static readonly SECOND_MICROSECOND = 93; - public static readonly SECOND_OF_MINUTE = 94; - public static readonly WEEK = 95; - public static readonly WEEK_OF_YEAR = 96; - public static readonly YEAR = 97; - public static readonly YEAR_MONTH = 98; - public static readonly DATAMODEL = 99; - public static readonly LOOKUP = 100; - public static readonly SAVEDSEARCH = 101; - public static readonly INT = 102; - public static readonly INTEGER = 103; - public static readonly DOUBLE = 104; - public static readonly LONG = 105; - public static readonly FLOAT = 106; - public static readonly STRING = 107; - public static readonly BOOLEAN = 108; - public static readonly PIPE = 109; - public static readonly COMMA = 110; - public static readonly DOT = 111; - public static readonly EQUAL = 112; - public static readonly GREATER = 113; - public static readonly LESS = 114; - public static readonly NOT_GREATER = 115; - public static readonly NOT_LESS = 116; - public static readonly NOT_EQUAL = 117; - public static readonly PLUS = 118; - public static readonly MINUS = 119; - public static readonly STAR = 120; - public static readonly DIVIDE = 121; - public static readonly MODULE = 122; - public static readonly EXCLAMATION_SYMBOL = 123; - public static readonly COLON = 124; - public static readonly LT_PRTHS = 125; - public static readonly RT_PRTHS = 126; - public static readonly LT_SQR_PRTHS = 127; - public static readonly RT_SQR_PRTHS = 128; - public static readonly SINGLE_QUOTE = 129; - public static readonly DOUBLE_QUOTE = 130; - public static readonly BACKTICK = 131; - public static readonly BIT_NOT_OP = 132; - public static readonly BIT_AND_OP = 133; - public static readonly BIT_XOR_OP = 134; - public static readonly AVG = 135; - public static readonly COUNT = 136; - public static readonly DISTINCT_COUNT = 137; - public static readonly ESTDC = 138; - public static readonly ESTDC_ERROR = 139; - public static readonly MAX = 140; - public static readonly MEAN = 141; - public static readonly MEDIAN = 142; - public static readonly MIN = 143; - public static readonly MODE = 144; - public static readonly RANGE = 145; - public static readonly STDEV = 146; - public static readonly STDEVP = 147; - public static readonly SUM = 148; - public static readonly SUMSQ = 149; - public static readonly VAR_SAMP = 150; - public static readonly VAR_POP = 151; - public static readonly STDDEV_SAMP = 152; - public static readonly STDDEV_POP = 153; - public static readonly PERCENTILE = 154; - public static readonly TAKE = 155; - public static readonly FIRST = 156; - public static readonly LAST = 157; - public static readonly LIST = 158; - public static readonly VALUES = 159; - public static readonly EARLIEST = 160; - public static readonly EARLIEST_TIME = 161; - public static readonly LATEST = 162; - public static readonly LATEST_TIME = 163; - public static readonly PER_DAY = 164; - public static readonly PER_HOUR = 165; - public static readonly PER_MINUTE = 166; - public static readonly PER_SECOND = 167; - public static readonly RATE = 168; - public static readonly SPARKLINE = 169; - public static readonly C = 170; - public static readonly DC = 171; - public static readonly ABS = 172; - public static readonly CBRT = 173; - public static readonly CEIL = 174; - public static readonly CEILING = 175; - public static readonly CONV = 176; - public static readonly CRC32 = 177; - public static readonly E = 178; - public static readonly EXP = 179; - public static readonly FLOOR = 180; - public static readonly LN = 181; - public static readonly LOG = 182; - public static readonly LOG10 = 183; - public static readonly LOG2 = 184; - public static readonly MOD = 185; - public static readonly PI = 186; - public static readonly POSITION = 187; - public static readonly POW = 188; - public static readonly POWER = 189; - public static readonly RAND = 190; - public static readonly ROUND = 191; - public static readonly SIGN = 192; - public static readonly SQRT = 193; - public static readonly TRUNCATE = 194; - public static readonly ACOS = 195; - public static readonly ASIN = 196; - public static readonly ATAN = 197; - public static readonly ATAN2 = 198; - public static readonly COS = 199; - public static readonly COT = 200; - public static readonly DEGREES = 201; - public static readonly RADIANS = 202; - public static readonly SIN = 203; - public static readonly TAN = 204; - public static readonly ADDDATE = 205; - public static readonly ADDTIME = 206; - public static readonly CURDATE = 207; - public static readonly CURRENT_DATE = 208; - public static readonly CURRENT_TIME = 209; - public static readonly CURRENT_TIMESTAMP = 210; - public static readonly CURTIME = 211; - public static readonly DATE = 212; - public static readonly DATEDIFF = 213; - public static readonly DATE_ADD = 214; - public static readonly DATE_FORMAT = 215; - public static readonly DATE_SUB = 216; - public static readonly DAYNAME = 217; - public static readonly DAYOFMONTH = 218; - public static readonly DAYOFWEEK = 219; - public static readonly DAYOFYEAR = 220; - public static readonly DAY_OF_MONTH = 221; - public static readonly DAY_OF_WEEK = 222; - public static readonly EXTRACT = 223; - public static readonly FROM_DAYS = 224; - public static readonly FROM_UNIXTIME = 225; - public static readonly GET_FORMAT = 226; - public static readonly LAST_DAY = 227; - public static readonly LOCALTIME = 228; - public static readonly LOCALTIMESTAMP = 229; - public static readonly MAKEDATE = 230; - public static readonly MAKETIME = 231; - public static readonly MONTHNAME = 232; - public static readonly NOW = 233; - public static readonly PERIOD_ADD = 234; - public static readonly PERIOD_DIFF = 235; - public static readonly SEC_TO_TIME = 236; - public static readonly STR_TO_DATE = 237; - public static readonly SUBDATE = 238; - public static readonly SUBTIME = 239; - public static readonly SYSDATE = 240; - public static readonly TIME = 241; - public static readonly TIMEDIFF = 242; - public static readonly TIMESTAMP = 243; - public static readonly TIMESTAMPADD = 244; - public static readonly TIMESTAMPDIFF = 245; - public static readonly TIME_FORMAT = 246; - public static readonly TIME_TO_SEC = 247; - public static readonly TO_DAYS = 248; - public static readonly TO_SECONDS = 249; - public static readonly UNIX_TIMESTAMP = 250; - public static readonly UTC_DATE = 251; - public static readonly UTC_TIME = 252; - public static readonly UTC_TIMESTAMP = 253; - public static readonly WEEKDAY = 254; - public static readonly YEARWEEK = 255; - public static readonly SUBSTR = 256; - public static readonly SUBSTRING = 257; - public static readonly LTRIM = 258; - public static readonly RTRIM = 259; - public static readonly TRIM = 260; - public static readonly TO = 261; - public static readonly LOWER = 262; - public static readonly UPPER = 263; - public static readonly CONCAT = 264; - public static readonly CONCAT_WS = 265; - public static readonly LENGTH = 266; - public static readonly STRCMP = 267; - public static readonly RIGHT = 268; - public static readonly LEFT = 269; - public static readonly ASCII = 270; - public static readonly LOCATE = 271; - public static readonly REPLACE = 272; - public static readonly REVERSE = 273; - public static readonly CAST = 274; - public static readonly LIKE = 275; - public static readonly ISNULL = 276; - public static readonly ISNOTNULL = 277; - public static readonly IFNULL = 278; - public static readonly NULLIF = 279; - public static readonly IF = 280; - public static readonly TYPEOF = 281; - public static readonly MATCH = 282; - public static readonly MATCH_PHRASE = 283; - public static readonly MATCH_PHRASE_PREFIX = 284; - public static readonly MATCH_BOOL_PREFIX = 285; - public static readonly SIMPLE_QUERY_STRING = 286; - public static readonly MULTI_MATCH = 287; - public static readonly QUERY_STRING = 288; - public static readonly ALLOW_LEADING_WILDCARD = 289; - public static readonly ANALYZE_WILDCARD = 290; - public static readonly ANALYZER = 291; - public static readonly AUTO_GENERATE_SYNONYMS_PHRASE_QUERY = 292; - public static readonly BOOST = 293; - public static readonly CUTOFF_FREQUENCY = 294; - public static readonly DEFAULT_FIELD = 295; - public static readonly DEFAULT_OPERATOR = 296; - public static readonly ENABLE_POSITION_INCREMENTS = 297; - public static readonly ESCAPE = 298; - public static readonly FLAGS = 299; - public static readonly FUZZY_MAX_EXPANSIONS = 300; - public static readonly FUZZY_PREFIX_LENGTH = 301; - public static readonly FUZZY_TRANSPOSITIONS = 302; - public static readonly FUZZY_REWRITE = 303; - public static readonly FUZZINESS = 304; - public static readonly LENIENT = 305; - public static readonly LOW_FREQ_OPERATOR = 306; - public static readonly MAX_DETERMINIZED_STATES = 307; - public static readonly MAX_EXPANSIONS = 308; - public static readonly MINIMUM_SHOULD_MATCH = 309; - public static readonly OPERATOR = 310; - public static readonly PHRASE_SLOP = 311; - public static readonly PREFIX_LENGTH = 312; - public static readonly QUOTE_ANALYZER = 313; - public static readonly QUOTE_FIELD_SUFFIX = 314; - public static readonly REWRITE = 315; - public static readonly SLOP = 316; - public static readonly TIE_BREAKER = 317; - public static readonly TYPE = 318; - public static readonly ZERO_TERMS_QUERY = 319; - public static readonly SPAN = 320; - public static readonly MS = 321; - public static readonly S = 322; - public static readonly M = 323; - public static readonly H = 324; - public static readonly W = 325; - public static readonly Q = 326; - public static readonly Y = 327; - public static readonly ID = 328; - public static readonly CLUSTER = 329; - public static readonly INTEGER_LITERAL = 330; - public static readonly DECIMAL_LITERAL = 331; - public static readonly ID_DATE_SUFFIX = 332; - public static readonly DQUOTA_STRING = 333; - public static readonly SQUOTA_STRING = 334; - public static readonly BQUOTA_STRING = 335; - public static readonly ERROR_RECOGNITION = 336; + public static readonly EXPLAIN = 5; + public static readonly FROM = 6; + public static readonly WHERE = 7; + public static readonly FIELDS = 8; + public static readonly FIELD = 9; + public static readonly TABLE = 10; + public static readonly RENAME = 11; + public static readonly STATS = 12; + public static readonly EVENTSTATS = 13; + public static readonly DEDUP = 14; + public static readonly SORT = 15; + public static readonly EVAL = 16; + public static readonly HEAD = 17; + public static readonly BIN = 18; + public static readonly TOP = 19; + public static readonly RARE = 20; + public static readonly PARSE = 21; + public static readonly SPATH = 22; + public static readonly REGEX = 23; + public static readonly REX = 24; + public static readonly SED = 25; + public static readonly PUNCT = 26; + public static readonly GROK = 27; + public static readonly PATTERN = 28; + public static readonly PATTERNS = 29; + public static readonly NEW_FIELD = 30; + public static readonly KMEANS = 31; + public static readonly AD = 32; + public static readonly ML = 33; + public static readonly FILLNULL = 34; + public static readonly FLATTEN = 35; + public static readonly TRENDLINE = 36; + public static readonly TIMECHART = 37; + public static readonly APPENDCOL = 38; + public static readonly EXPAND = 39; + public static readonly SIMPLE_PATTERN = 40; + public static readonly BRAIN = 41; + public static readonly VARIABLE_COUNT_THRESHOLD = 42; + public static readonly FREQUENCY_THRESHOLD_PERCENTAGE = 43; + public static readonly METHOD = 44; + public static readonly MAX_SAMPLE_COUNT = 45; + public static readonly MAX_MATCH = 46; + public static readonly OFFSET_FIELD = 47; + public static readonly BUFFER_LIMIT = 48; + public static readonly LABEL = 49; + public static readonly AGGREGATION = 50; + public static readonly JOIN = 51; + public static readonly ON = 52; + public static readonly INNER = 53; + public static readonly OUTER = 54; + public static readonly FULL = 55; + public static readonly SEMI = 56; + public static readonly ANTI = 57; + public static readonly CROSS = 58; + public static readonly LEFT_HINT = 59; + public static readonly RIGHT_HINT = 60; + public static readonly AS = 61; + public static readonly BY = 62; + public static readonly SOURCE = 63; + public static readonly INDEX = 64; + public static readonly A = 65; + public static readonly ASC = 66; + public static readonly D = 67; + public static readonly DESC = 68; + public static readonly DATASOURCES = 69; + public static readonly USING = 70; + public static readonly WITH = 71; + public static readonly SIMPLE = 72; + public static readonly STANDARD = 73; + public static readonly COST = 74; + public static readonly EXTENDED = 75; + public static readonly OVERRIDE = 76; + public static readonly OVERWRITE = 77; + public static readonly AUTO = 78; + public static readonly STR = 79; + public static readonly NUM = 80; + public static readonly SMA = 81; + public static readonly WMA = 82; + public static readonly KEEPEMPTY = 83; + public static readonly CONSECUTIVE = 84; + public static readonly DEDUP_SPLITVALUES = 85; + public static readonly PARTITIONS = 86; + public static readonly ALLNUM = 87; + public static readonly DELIM = 88; + public static readonly BUCKET_NULLABLE = 89; + public static readonly CENTROIDS = 90; + public static readonly ITERATIONS = 91; + public static readonly DISTANCE_TYPE = 92; + public static readonly NUMBER_OF_TREES = 93; + public static readonly SHINGLE_SIZE = 94; + public static readonly SAMPLE_SIZE = 95; + public static readonly OUTPUT_AFTER = 96; + public static readonly TIME_DECAY = 97; + public static readonly ANOMALY_RATE = 98; + public static readonly CATEGORY_FIELD = 99; + public static readonly TIME_FIELD = 100; + public static readonly TIME_ZONE = 101; + public static readonly TRAINING_DATA_SIZE = 102; + public static readonly ANOMALY_SCORE_THRESHOLD = 103; + public static readonly APPEND = 104; + public static readonly COUNTFIELD = 105; + public static readonly SHOWCOUNT = 106; + public static readonly LIMIT = 107; + public static readonly USEOTHER = 108; + public static readonly INPUT = 109; + public static readonly OUTPUT = 110; + public static readonly PATH = 111; + public static readonly CASE = 112; + public static readonly ELSE = 113; + public static readonly IN = 114; + public static readonly EXISTS = 115; + public static readonly GEOIP = 116; + public static readonly NOT = 117; + public static readonly OR = 118; + public static readonly AND = 119; + public static readonly XOR = 120; + public static readonly TRUE = 121; + public static readonly FALSE = 122; + public static readonly REGEXP = 123; + public static readonly REGEX_MATCH = 124; + public static readonly CONVERT_TZ = 125; + public static readonly DATETIME = 126; + public static readonly DAY = 127; + public static readonly DAY_HOUR = 128; + public static readonly DAY_MICROSECOND = 129; + public static readonly DAY_MINUTE = 130; + public static readonly DAY_OF_YEAR = 131; + public static readonly DAY_SECOND = 132; + public static readonly HOUR = 133; + public static readonly HOUR_MICROSECOND = 134; + public static readonly HOUR_MINUTE = 135; + public static readonly HOUR_OF_DAY = 136; + public static readonly HOUR_SECOND = 137; + public static readonly INTERVAL = 138; + public static readonly MICROSECOND = 139; + public static readonly MILLISECOND = 140; + public static readonly MINUTE = 141; + public static readonly MINUTE_MICROSECOND = 142; + public static readonly MINUTE_OF_DAY = 143; + public static readonly MINUTE_OF_HOUR = 144; + public static readonly MINUTE_SECOND = 145; + public static readonly MONTH = 146; + public static readonly MONTH_OF_YEAR = 147; + public static readonly QUARTER = 148; + public static readonly SECOND = 149; + public static readonly SECOND_MICROSECOND = 150; + public static readonly SECOND_OF_MINUTE = 151; + public static readonly WEEK = 152; + public static readonly WEEK_OF_YEAR = 153; + public static readonly YEAR = 154; + public static readonly YEAR_MONTH = 155; + public static readonly DATAMODEL = 156; + public static readonly LOOKUP = 157; + public static readonly SAVEDSEARCH = 158; + public static readonly INT = 159; + public static readonly INTEGER = 160; + public static readonly DOUBLE = 161; + public static readonly LONG = 162; + public static readonly FLOAT = 163; + public static readonly STRING = 164; + public static readonly BOOLEAN = 165; + public static readonly IP = 166; + public static readonly PIPE = 167; + public static readonly COMMA = 168; + public static readonly DOT = 169; + public static readonly EQUAL = 170; + public static readonly DOUBLE_EQUAL = 171; + public static readonly GREATER = 172; + public static readonly LESS = 173; + public static readonly NOT_GREATER = 174; + public static readonly NOT_LESS = 175; + public static readonly NOT_EQUAL = 176; + public static readonly PLUS = 177; + public static readonly MINUS = 178; + public static readonly STAR = 179; + public static readonly DIVIDE = 180; + public static readonly MODULE = 181; + public static readonly EXCLAMATION_SYMBOL = 182; + public static readonly COLON = 183; + public static readonly LT_PRTHS = 184; + public static readonly RT_PRTHS = 185; + public static readonly LT_SQR_PRTHS = 186; + public static readonly RT_SQR_PRTHS = 187; + public static readonly LT_CURLY = 188; + public static readonly RT_CURLY = 189; + public static readonly SINGLE_QUOTE = 190; + public static readonly DOUBLE_QUOTE = 191; + public static readonly BACKTICK = 192; + public static readonly ARROW = 193; + public static readonly BIT_NOT_OP = 194; + public static readonly BIT_AND_OP = 195; + public static readonly BIT_XOR_OP = 196; + public static readonly AVG = 197; + public static readonly COUNT = 198; + public static readonly DISTINCT_COUNT = 199; + public static readonly DISTINCT_COUNT_APPROX = 200; + public static readonly ESTDC = 201; + public static readonly ESTDC_ERROR = 202; + public static readonly MAX = 203; + public static readonly MEAN = 204; + public static readonly MEDIAN = 205; + public static readonly MIN = 206; + public static readonly MODE = 207; + public static readonly RANGE = 208; + public static readonly STDEV = 209; + public static readonly STDEVP = 210; + public static readonly SUM = 211; + public static readonly SUMSQ = 212; + public static readonly VAR_SAMP = 213; + public static readonly VAR_POP = 214; + public static readonly STDDEV_SAMP = 215; + public static readonly STDDEV_POP = 216; + public static readonly PERC = 217; + public static readonly PERCENTILE = 218; + public static readonly PERCENTILE_APPROX = 219; + public static readonly EARLIEST = 220; + public static readonly LATEST = 221; + public static readonly TAKE = 222; + public static readonly LIST = 223; + public static readonly VALUES = 224; + public static readonly PER_DAY = 225; + public static readonly PER_HOUR = 226; + public static readonly PER_MINUTE = 227; + public static readonly PER_SECOND = 228; + public static readonly RATE = 229; + public static readonly SPARKLINE = 230; + public static readonly C = 231; + public static readonly DC = 232; + public static readonly ROW_NUMBER = 233; + public static readonly RANK = 234; + public static readonly DENSE_RANK = 235; + public static readonly PERCENT_RANK = 236; + public static readonly CUME_DIST = 237; + public static readonly FIRST = 238; + public static readonly LAST = 239; + public static readonly NTH = 240; + public static readonly NTILE = 241; + public static readonly PLUS_FUCTION = 242; + public static readonly MINUS_FUCTION = 243; + public static readonly STAR_FUNCTION = 244; + public static readonly DIVIDE_FUNCTION = 245; + public static readonly ABS = 246; + public static readonly CBRT = 247; + public static readonly CEIL = 248; + public static readonly CEILING = 249; + public static readonly CONV = 250; + public static readonly CRC32 = 251; + public static readonly E = 252; + public static readonly EXP = 253; + public static readonly EXPM1 = 254; + public static readonly FLOOR = 255; + public static readonly LN = 256; + public static readonly LOG = 257; + public static readonly LOG_WITH_BASE = 258; + public static readonly MOD = 259; + public static readonly MODULUS = 260; + public static readonly PI = 261; + public static readonly POSITION = 262; + public static readonly POW = 263; + public static readonly POWER = 264; + public static readonly RAND = 265; + public static readonly ROUND = 266; + public static readonly SIGN = 267; + public static readonly SQRT = 268; + public static readonly TRUNCATE = 269; + public static readonly RINT = 270; + public static readonly SIGNUM = 271; + public static readonly ACOS = 272; + public static readonly ASIN = 273; + public static readonly ATAN = 274; + public static readonly ATAN2 = 275; + public static readonly COS = 276; + public static readonly COSH = 277; + public static readonly COT = 278; + public static readonly DEGREES = 279; + public static readonly RADIANS = 280; + public static readonly SIN = 281; + public static readonly SINH = 282; + public static readonly TAN = 283; + public static readonly MD5 = 284; + public static readonly SHA1 = 285; + public static readonly SHA2 = 286; + public static readonly ADDDATE = 287; + public static readonly ADDTIME = 288; + public static readonly CURDATE = 289; + public static readonly CURRENT_DATE = 290; + public static readonly CURRENT_TIME = 291; + public static readonly CURRENT_TIMESTAMP = 292; + public static readonly CURTIME = 293; + public static readonly DATE = 294; + public static readonly DATEDIFF = 295; + public static readonly DATE_ADD = 296; + public static readonly DATE_FORMAT = 297; + public static readonly DATE_SUB = 298; + public static readonly DAYNAME = 299; + public static readonly DAYOFMONTH = 300; + public static readonly DAYOFWEEK = 301; + public static readonly DAYOFYEAR = 302; + public static readonly DAY_OF_MONTH = 303; + public static readonly DAY_OF_WEEK = 304; + public static readonly EXTRACT = 305; + public static readonly FROM_DAYS = 306; + public static readonly FROM_UNIXTIME = 307; + public static readonly GET_FORMAT = 308; + public static readonly LAST_DAY = 309; + public static readonly LOCALTIME = 310; + public static readonly LOCALTIMESTAMP = 311; + public static readonly MAKEDATE = 312; + public static readonly MAKETIME = 313; + public static readonly MONTHNAME = 314; + public static readonly NOW = 315; + public static readonly PERIOD_ADD = 316; + public static readonly PERIOD_DIFF = 317; + public static readonly SEC_TO_TIME = 318; + public static readonly STR_TO_DATE = 319; + public static readonly SUBDATE = 320; + public static readonly SUBTIME = 321; + public static readonly SYSDATE = 322; + public static readonly TIME = 323; + public static readonly TIMEDIFF = 324; + public static readonly TIMESTAMP = 325; + public static readonly TIMESTAMPADD = 326; + public static readonly TIMESTAMPDIFF = 327; + public static readonly TIME_FORMAT = 328; + public static readonly TIME_TO_SEC = 329; + public static readonly TO_DAYS = 330; + public static readonly TO_SECONDS = 331; + public static readonly UNIX_TIMESTAMP = 332; + public static readonly UTC_DATE = 333; + public static readonly UTC_TIME = 334; + public static readonly UTC_TIMESTAMP = 335; + public static readonly WEEKDAY = 336; + public static readonly YEARWEEK = 337; + public static readonly STRFTIME = 338; + public static readonly SUBSTR = 339; + public static readonly SUBSTRING = 340; + public static readonly LTRIM = 341; + public static readonly RTRIM = 342; + public static readonly TRIM = 343; + public static readonly TO = 344; + public static readonly LOWER = 345; + public static readonly UPPER = 346; + public static readonly CONCAT = 347; + public static readonly CONCAT_WS = 348; + public static readonly LENGTH = 349; + public static readonly STRCMP = 350; + public static readonly RIGHT = 351; + public static readonly LEFT = 352; + public static readonly ASCII = 353; + public static readonly LOCATE = 354; + public static readonly REPLACE = 355; + public static readonly REVERSE = 356; + public static readonly CAST = 357; + public static readonly LIKE = 358; + public static readonly ISNULL = 359; + public static readonly ISNOTNULL = 360; + public static readonly CIDRMATCH = 361; + public static readonly BETWEEN = 362; + public static readonly ISPRESENT = 363; + public static readonly ISEMPTY = 364; + public static readonly ISBLANK = 365; + public static readonly ARRAY = 366; + public static readonly ARRAY_LENGTH = 367; + public static readonly MVJOIN = 368; + public static readonly FORALL = 369; + public static readonly FILTER = 370; + public static readonly TRANSFORM = 371; + public static readonly REDUCE = 372; + public static readonly JSON_VALID = 373; + public static readonly JSON = 374; + public static readonly JSON_OBJECT = 375; + public static readonly JSON_ARRAY = 376; + public static readonly JSON_ARRAY_LENGTH = 377; + public static readonly JSON_EXTRACT = 378; + public static readonly JSON_KEYS = 379; + public static readonly JSON_SET = 380; + public static readonly JSON_DELETE = 381; + public static readonly JSON_APPEND = 382; + public static readonly JSON_EXTEND = 383; + public static readonly IFNULL = 384; + public static readonly NULLIF = 385; + public static readonly IF = 386; + public static readonly TYPEOF = 387; + public static readonly COALESCE = 388; + public static readonly MATCH = 389; + public static readonly MATCH_PHRASE = 390; + public static readonly MATCH_PHRASE_PREFIX = 391; + public static readonly MATCH_BOOL_PREFIX = 392; + public static readonly SIMPLE_QUERY_STRING = 393; + public static readonly MULTI_MATCH = 394; + public static readonly QUERY_STRING = 395; + public static readonly ALLOW_LEADING_WILDCARD = 396; + public static readonly ANALYZE_WILDCARD = 397; + public static readonly ANALYZER = 398; + public static readonly AUTO_GENERATE_SYNONYMS_PHRASE_QUERY = 399; + public static readonly BOOST = 400; + public static readonly CUTOFF_FREQUENCY = 401; + public static readonly DEFAULT_FIELD = 402; + public static readonly DEFAULT_OPERATOR = 403; + public static readonly ENABLE_POSITION_INCREMENTS = 404; + public static readonly ESCAPE = 405; + public static readonly FLAGS = 406; + public static readonly FUZZY_MAX_EXPANSIONS = 407; + public static readonly FUZZY_PREFIX_LENGTH = 408; + public static readonly FUZZY_TRANSPOSITIONS = 409; + public static readonly FUZZY_REWRITE = 410; + public static readonly FUZZINESS = 411; + public static readonly LENIENT = 412; + public static readonly LOW_FREQ_OPERATOR = 413; + public static readonly MAX_DETERMINIZED_STATES = 414; + public static readonly MAX_EXPANSIONS = 415; + public static readonly MINIMUM_SHOULD_MATCH = 416; + public static readonly OPERATOR = 417; + public static readonly PHRASE_SLOP = 418; + public static readonly PREFIX_LENGTH = 419; + public static readonly QUOTE_ANALYZER = 420; + public static readonly QUOTE_FIELD_SUFFIX = 421; + public static readonly REWRITE = 422; + public static readonly SLOP = 423; + public static readonly TIE_BREAKER = 424; + public static readonly TYPE = 425; + public static readonly ZERO_TERMS_QUERY = 426; + public static readonly SPAN = 427; + public static readonly BINS = 428; + public static readonly MINSPAN = 429; + public static readonly START = 430; + public static readonly END = 431; + public static readonly ALIGNTIME = 432; + public static readonly MS = 433; + public static readonly S = 434; + public static readonly M = 435; + public static readonly H = 436; + public static readonly W = 437; + public static readonly Q = 438; + public static readonly Y = 439; + public static readonly SEC = 440; + public static readonly SECS = 441; + public static readonly SECONDS = 442; + public static readonly MINS = 443; + public static readonly MINUTES = 444; + public static readonly HR = 445; + public static readonly HRS = 446; + public static readonly HOURS = 447; + public static readonly DAYS = 448; + public static readonly MON = 449; + public static readonly MONTHS = 450; + public static readonly US = 451; + public static readonly CS = 452; + public static readonly DS = 453; + public static readonly PERCENTILE_SHORTCUT = 454; + public static readonly ID = 455; + public static readonly CLUSTER = 456; + public static readonly INTEGER_LITERAL = 457; + public static readonly DECIMAL_LITERAL = 458; + public static readonly FLOAT_LITERAL = 459; + public static readonly DOUBLE_LITERAL = 460; + public static readonly ID_DATE_SUFFIX = 461; + public static readonly DQUOTA_STRING = 462; + public static readonly SQUOTA_STRING = 463; + public static readonly BQUOTA_STRING = 464; + public static readonly LINE_COMMENT = 465; + public static readonly BLOCK_COMMENT = 466; + public static readonly ERROR_RECOGNITION = 467; public static readonly channelNames = [ "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "WHITESPACE", "ERRORCHANNEL" ]; public static readonly literalNames = [ - null, null, "'SEARCH'", "'DESCRIBE'", "'SHOW'", "'FROM'", "'WHERE'", - "'FIELDS'", "'RENAME'", "'STATS'", "'DEDUP'", "'SORT'", "'EVAL'", - "'HEAD'", "'TOP'", "'RARE'", "'PARSE'", "'METHOD'", "'REGEX'", "'PUNCT'", - "'GROK'", "'PATTERN'", "'PATTERNS'", "'NEW_FIELD'", "'KMEANS'", - "'AD'", "'ML'", "'AS'", "'BY'", "'SOURCE'", "'INDEX'", "'D'", "'DESC'", - "'DATASOURCES'", "'SORTBY'", "'AUTO'", "'STR'", "'IP'", "'NUM'", - "'KEEPEMPTY'", "'CONSECUTIVE'", "'DEDUP_SPLITVALUES'", "'PARTITIONS'", - "'ALLNUM'", "'DELIM'", "'CENTROIDS'", "'ITERATIONS'", "'DISTANCE_TYPE'", + null, null, "'SEARCH'", "'DESCRIBE'", "'SHOW'", "'EXPLAIN'", "'FROM'", + "'WHERE'", "'FIELDS'", "'FIELD'", "'TABLE'", "'RENAME'", "'STATS'", + "'EVENTSTATS'", "'DEDUP'", "'SORT'", "'EVAL'", "'HEAD'", "'BIN'", + "'TOP'", "'RARE'", "'PARSE'", "'SPATH'", "'REGEX'", "'REX'", "'SED'", + "'PUNCT'", "'GROK'", "'PATTERN'", "'PATTERNS'", "'NEW_FIELD'", "'KMEANS'", + "'AD'", "'ML'", "'FILLNULL'", "'FLATTEN'", "'TRENDLINE'", "'TIMECHART'", + "'APPENDCOL'", "'EXPAND'", "'SIMPLE_PATTERN'", "'BRAIN'", "'VARIABLE_COUNT_THRESHOLD'", + "'FREQUENCY_THRESHOLD_PERCENTAGE'", "'METHOD'", "'MAX_SAMPLE_COUNT'", + "'MAX_MATCH'", "'OFFSET_FIELD'", "'BUFFER_LIMIT'", "'LABEL'", "'AGGREGATION'", + "'JOIN'", "'ON'", "'INNER'", "'OUTER'", "'FULL'", "'SEMI'", "'ANTI'", + "'CROSS'", "'HINT.LEFT'", "'HINT.RIGHT'", "'AS'", "'BY'", "'SOURCE'", + "'INDEX'", "'A'", "'ASC'", "'D'", "'DESC'", "'DATASOURCES'", "'USING'", + "'WITH'", "'SIMPLE'", "'STANDARD'", "'COST'", "'EXTENDED'", "'OVERRIDE'", + "'OVERWRITE'", "'AUTO'", "'STR'", "'NUM'", "'SMA'", "'WMA'", "'KEEPEMPTY'", + "'CONSECUTIVE'", "'DEDUP_SPLITVALUES'", "'PARTITIONS'", "'ALLNUM'", + "'DELIM'", "'BUCKET_NULLABLE'", "'CENTROIDS'", "'ITERATIONS'", "'DISTANCE_TYPE'", "'NUMBER_OF_TREES'", "'SHINGLE_SIZE'", "'SAMPLE_SIZE'", "'OUTPUT_AFTER'", "'TIME_DECAY'", "'ANOMALY_RATE'", "'CATEGORY_FIELD'", "'TIME_FIELD'", "'TIME_ZONE'", "'TRAINING_DATA_SIZE'", "'ANOMALY_SCORE_THRESHOLD'", - "'CASE'", "'IN'", "'NOT'", "'OR'", "'AND'", "'XOR'", "'TRUE'", "'FALSE'", - "'REGEXP'", "'CONVERT_TZ'", "'DATETIME'", "'DAY'", "'DAY_HOUR'", - "'DAY_MICROSECOND'", "'DAY_MINUTE'", "'DAY_OF_YEAR'", "'DAY_SECOND'", - "'HOUR'", "'HOUR_MICROSECOND'", "'HOUR_MINUTE'", "'HOUR_OF_DAY'", - "'HOUR_SECOND'", "'INTERVAL'", "'MICROSECOND'", "'MILLISECOND'", - "'MINUTE'", "'MINUTE_MICROSECOND'", "'MINUTE_OF_DAY'", "'MINUTE_OF_HOUR'", - "'MINUTE_SECOND'", "'MONTH'", "'MONTH_OF_YEAR'", "'QUARTER'", "'SECOND'", - "'SECOND_MICROSECOND'", "'SECOND_OF_MINUTE'", "'WEEK'", "'WEEK_OF_YEAR'", - "'YEAR'", "'YEAR_MONTH'", "'DATAMODEL'", "'LOOKUP'", "'SAVEDSEARCH'", - "'INT'", "'INTEGER'", "'DOUBLE'", "'LONG'", "'FLOAT'", "'STRING'", - "'BOOLEAN'", "'|'", "','", "'.'", "'='", "'>'", "'<'", null, null, - null, "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "':'", "'('", "')'", - "'['", "']'", "'''", "'\"'", "'`'", "'~'", "'&'", "'^'", "'AVG'", - "'COUNT'", "'DISTINCT_COUNT'", "'ESTDC'", "'ESTDC_ERROR'", "'MAX'", - "'MEAN'", "'MEDIAN'", "'MIN'", "'MODE'", "'RANGE'", "'STDEV'", "'STDEVP'", - "'SUM'", "'SUMSQ'", "'VAR_SAMP'", "'VAR_POP'", "'STDDEV_SAMP'", - "'STDDEV_POP'", "'PERCENTILE'", "'TAKE'", "'FIRST'", "'LAST'", "'LIST'", - "'VALUES'", "'EARLIEST'", "'EARLIEST_TIME'", "'LATEST'", "'LATEST_TIME'", - "'PER_DAY'", "'PER_HOUR'", "'PER_MINUTE'", "'PER_SECOND'", "'RATE'", - "'SPARKLINE'", "'C'", "'DC'", "'ABS'", "'CBRT'", "'CEIL'", "'CEILING'", - "'CONV'", "'CRC32'", "'E'", "'EXP'", "'FLOOR'", "'LN'", "'LOG'", - "'LOG10'", "'LOG2'", "'MOD'", "'PI'", "'POSITION'", "'POW'", "'POWER'", - "'RAND'", "'ROUND'", "'SIGN'", "'SQRT'", "'TRUNCATE'", "'ACOS'", - "'ASIN'", "'ATAN'", "'ATAN2'", "'COS'", "'COT'", "'DEGREES'", "'RADIANS'", - "'SIN'", "'TAN'", "'ADDDATE'", "'ADDTIME'", "'CURDATE'", "'CURRENT_DATE'", - "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURTIME'", "'DATE'", - "'DATEDIFF'", "'DATE_ADD'", "'DATE_FORMAT'", "'DATE_SUB'", "'DAYNAME'", - "'DAYOFMONTH'", "'DAYOFWEEK'", "'DAYOFYEAR'", "'DAY_OF_MONTH'", - "'DAY_OF_WEEK'", "'EXTRACT'", "'FROM_DAYS'", "'FROM_UNIXTIME'", + "'APPEND'", "'COUNTFIELD'", "'SHOWCOUNT'", "'LIMIT'", "'USEOTHER'", + "'INPUT'", "'OUTPUT'", "'PATH'", "'CASE'", "'ELSE'", "'IN'", "'EXISTS'", + "'GEOIP'", "'NOT'", "'OR'", "'AND'", "'XOR'", "'TRUE'", "'FALSE'", + "'REGEXP'", "'REGEX_MATCH'", "'CONVERT_TZ'", "'DATETIME'", "'DAY'", + "'DAY_HOUR'", "'DAY_MICROSECOND'", "'DAY_MINUTE'", "'DAY_OF_YEAR'", + "'DAY_SECOND'", "'HOUR'", "'HOUR_MICROSECOND'", "'HOUR_MINUTE'", + "'HOUR_OF_DAY'", "'HOUR_SECOND'", "'INTERVAL'", "'MICROSECOND'", + "'MILLISECOND'", "'MINUTE'", "'MINUTE_MICROSECOND'", "'MINUTE_OF_DAY'", + "'MINUTE_OF_HOUR'", "'MINUTE_SECOND'", "'MONTH'", "'MONTH_OF_YEAR'", + "'QUARTER'", "'SECOND'", "'SECOND_MICROSECOND'", "'SECOND_OF_MINUTE'", + "'WEEK'", "'WEEK_OF_YEAR'", "'YEAR'", "'YEAR_MONTH'", "'DATAMODEL'", + "'LOOKUP'", "'SAVEDSEARCH'", "'INT'", "'INTEGER'", "'DOUBLE'", "'LONG'", + "'FLOAT'", "'STRING'", "'BOOLEAN'", "'IP'", "'|'", "','", "'.'", + "'='", "'=='", "'>'", "'<'", null, null, null, "'+'", "'-'", "'*'", + "'/'", "'%'", "'!'", "':'", "'('", "')'", "'['", "']'", "'{'", "'}'", + "'''", "'\"'", "'`'", "'->'", "'~'", "'&'", "'^'", "'AVG'", "'COUNT'", + "'DISTINCT_COUNT'", "'DISTINCT_COUNT_APPROX'", "'ESTDC'", "'ESTDC_ERROR'", + "'MAX'", "'MEAN'", "'MEDIAN'", "'MIN'", "'MODE'", "'RANGE'", "'STDEV'", + "'STDEVP'", "'SUM'", "'SUMSQ'", "'VAR_SAMP'", "'VAR_POP'", "'STDDEV_SAMP'", + "'STDDEV_POP'", "'PERC'", "'PERCENTILE'", "'PERCENTILE_APPROX'", + "'EARLIEST'", "'LATEST'", "'TAKE'", "'LIST'", "'VALUES'", "'PER_DAY'", + "'PER_HOUR'", "'PER_MINUTE'", "'PER_SECOND'", "'RATE'", "'SPARKLINE'", + "'C'", "'DC'", "'ROW_NUMBER'", "'RANK'", "'DENSE_RANK'", "'PERCENT_RANK'", + "'CUME_DIST'", "'FIRST'", "'LAST'", "'NTH'", "'NTILE'", "'ADD'", + "'SUBTRACT'", "'MULTIPLY'", "'DIVIDE'", "'ABS'", "'CBRT'", "'CEIL'", + "'CEILING'", "'CONV'", "'CRC32'", "'E'", "'EXP'", "'EXPM1'", "'FLOOR'", + "'LN'", "'LOG'", null, "'MOD'", "'MODULUS'", "'PI'", "'POSITION'", + "'POW'", "'POWER'", "'RAND'", "'ROUND'", "'SIGN'", "'SQRT'", "'TRUNCATE'", + "'RINT'", "'SIGNUM'", "'ACOS'", "'ASIN'", "'ATAN'", "'ATAN2'", "'COS'", + "'COSH'", "'COT'", "'DEGREES'", "'RADIANS'", "'SIN'", "'SINH'", + "'TAN'", "'MD5'", "'SHA1'", "'SHA2'", "'ADDDATE'", "'ADDTIME'", + "'CURDATE'", "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", + "'CURTIME'", "'DATE'", "'DATEDIFF'", "'DATE_ADD'", "'DATE_FORMAT'", + "'DATE_SUB'", "'DAYNAME'", "'DAYOFMONTH'", "'DAYOFWEEK'", "'DAYOFYEAR'", + "'DAY_OF_MONTH'", "'DAY_OF_WEEK'", "'EXTRACT'", "'FROM_DAYS'", "'FROM_UNIXTIME'", "'GET_FORMAT'", "'LAST_DAY'", "'LOCALTIME'", "'LOCALTIMESTAMP'", "'MAKEDATE'", "'MAKETIME'", "'MONTHNAME'", "'NOW'", "'PERIOD_ADD'", "'PERIOD_DIFF'", "'SEC_TO_TIME'", "'STR_TO_DATE'", "'SUBDATE'", "'SUBTIME'", "'SYSDATE'", "'TIME'", "'TIMEDIFF'", "'TIMESTAMP'", "'TIMESTAMPADD'", "'TIMESTAMPDIFF'", "'TIME_FORMAT'", "'TIME_TO_SEC'", "'TO_DAYS'", "'TO_SECONDS'", "'UNIX_TIMESTAMP'", "'UTC_DATE'", "'UTC_TIME'", - "'UTC_TIMESTAMP'", "'WEEKDAY'", "'YEARWEEK'", "'SUBSTR'", "'SUBSTRING'", - "'LTRIM'", "'RTRIM'", "'TRIM'", "'TO'", "'LOWER'", "'UPPER'", "'CONCAT'", - "'CONCAT_WS'", "'LENGTH'", "'STRCMP'", "'RIGHT'", "'LEFT'", "'ASCII'", - "'LOCATE'", "'REPLACE'", "'REVERSE'", "'CAST'", "'LIKE'", "'ISNULL'", - "'ISNOTNULL'", "'IFNULL'", "'NULLIF'", "'IF'", "'TYPEOF'", "'MATCH'", - "'MATCH_PHRASE'", "'MATCH_PHRASE_PREFIX'", "'MATCH_BOOL_PREFIX'", - "'SIMPLE_QUERY_STRING'", "'MULTI_MATCH'", "'QUERY_STRING'", "'ALLOW_LEADING_WILDCARD'", - "'ANALYZE_WILDCARD'", "'ANALYZER'", "'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'", - "'BOOST'", "'CUTOFF_FREQUENCY'", "'DEFAULT_FIELD'", "'DEFAULT_OPERATOR'", - "'ENABLE_POSITION_INCREMENTS'", "'ESCAPE'", "'FLAGS'", "'FUZZY_MAX_EXPANSIONS'", - "'FUZZY_PREFIX_LENGTH'", "'FUZZY_TRANSPOSITIONS'", "'FUZZY_REWRITE'", - "'FUZZINESS'", "'LENIENT'", "'LOW_FREQ_OPERATOR'", "'MAX_DETERMINIZED_STATES'", - "'MAX_EXPANSIONS'", "'MINIMUM_SHOULD_MATCH'", "'OPERATOR'", "'PHRASE_SLOP'", - "'PREFIX_LENGTH'", "'QUOTE_ANALYZER'", "'QUOTE_FIELD_SUFFIX'", "'REWRITE'", - "'SLOP'", "'TIE_BREAKER'", "'TYPE'", "'ZERO_TERMS_QUERY'", "'SPAN'", - "'MS'", "'S'", "'M'", "'H'", "'W'", "'Q'", "'Y'" + "'UTC_TIMESTAMP'", "'WEEKDAY'", "'YEARWEEK'", "'STRFTIME'", "'SUBSTR'", + "'SUBSTRING'", "'LTRIM'", "'RTRIM'", "'TRIM'", "'TO'", "'LOWER'", + "'UPPER'", "'CONCAT'", "'CONCAT_WS'", "'LENGTH'", "'STRCMP'", "'RIGHT'", + "'LEFT'", "'ASCII'", "'LOCATE'", "'REPLACE'", "'REVERSE'", "'CAST'", + "'LIKE'", "'ISNULL'", "'ISNOTNULL'", "'CIDRMATCH'", "'BETWEEN'", + "'ISPRESENT'", "'ISEMPTY'", "'ISBLANK'", "'ARRAY'", "'ARRAY_LENGTH'", + "'MVJOIN'", "'FORALL'", "'FILTER'", "'TRANSFORM'", "'REDUCE'", "'JSON_VALID'", + "'JSON'", "'JSON_OBJECT'", "'JSON_ARRAY'", "'JSON_ARRAY_LENGTH'", + "'JSON_EXTRACT'", "'JSON_KEYS'", "'JSON_SET'", "'JSON_DELETE'", + "'JSON_APPEND'", "'JSON_EXTEND'", "'IFNULL'", "'NULLIF'", "'IF'", + "'TYPEOF'", "'COALESCE'", "'MATCH'", "'MATCH_PHRASE'", "'MATCH_PHRASE_PREFIX'", + "'MATCH_BOOL_PREFIX'", "'SIMPLE_QUERY_STRING'", "'MULTI_MATCH'", + "'QUERY_STRING'", "'ALLOW_LEADING_WILDCARD'", "'ANALYZE_WILDCARD'", + "'ANALYZER'", "'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'", "'BOOST'", + "'CUTOFF_FREQUENCY'", "'DEFAULT_FIELD'", "'DEFAULT_OPERATOR'", "'ENABLE_POSITION_INCREMENTS'", + "'ESCAPE'", "'FLAGS'", "'FUZZY_MAX_EXPANSIONS'", "'FUZZY_PREFIX_LENGTH'", + "'FUZZY_TRANSPOSITIONS'", "'FUZZY_REWRITE'", "'FUZZINESS'", "'LENIENT'", + "'LOW_FREQ_OPERATOR'", "'MAX_DETERMINIZED_STATES'", "'MAX_EXPANSIONS'", + "'MINIMUM_SHOULD_MATCH'", "'OPERATOR'", "'PHRASE_SLOP'", "'PREFIX_LENGTH'", + "'QUOTE_ANALYZER'", "'QUOTE_FIELD_SUFFIX'", "'REWRITE'", "'SLOP'", + "'TIE_BREAKER'", "'TYPE'", "'ZERO_TERMS_QUERY'", "'SPAN'", "'BINS'", + "'MINSPAN'", "'START'", "'END'", "'ALIGNTIME'", "'MS'", "'S'", "'M'", + "'H'", "'W'", "'Q'", "'Y'", "'SEC'", "'SECS'", "'SECONDS'", "'MINS'", + "'MINUTES'", "'HR'", "'HRS'", "'HOURS'", "'DAYS'", "'MON'", "'MONTHS'", + "'US'", "'CS'", "'DS'" ]; public static readonly symbolicNames = [ - null, "SPACE", "SEARCH", "DESCRIBE", "SHOW", "FROM", "WHERE", "FIELDS", - "RENAME", "STATS", "DEDUP", "SORT", "EVAL", "HEAD", "TOP", "RARE", - "PARSE", "METHOD", "REGEX", "PUNCT", "GROK", "PATTERN", "PATTERNS", - "NEW_FIELD", "KMEANS", "AD", "ML", "AS", "BY", "SOURCE", "INDEX", - "D", "DESC", "DATASOURCES", "SORTBY", "AUTO", "STR", "IP", "NUM", - "KEEPEMPTY", "CONSECUTIVE", "DEDUP_SPLITVALUES", "PARTITIONS", "ALLNUM", - "DELIM", "CENTROIDS", "ITERATIONS", "DISTANCE_TYPE", "NUMBER_OF_TREES", - "SHINGLE_SIZE", "SAMPLE_SIZE", "OUTPUT_AFTER", "TIME_DECAY", "ANOMALY_RATE", - "CATEGORY_FIELD", "TIME_FIELD", "TIME_ZONE", "TRAINING_DATA_SIZE", - "ANOMALY_SCORE_THRESHOLD", "CASE", "IN", "NOT", "OR", "AND", "XOR", - "TRUE", "FALSE", "REGEXP", "CONVERT_TZ", "DATETIME", "DAY", "DAY_HOUR", - "DAY_MICROSECOND", "DAY_MINUTE", "DAY_OF_YEAR", "DAY_SECOND", "HOUR", - "HOUR_MICROSECOND", "HOUR_MINUTE", "HOUR_OF_DAY", "HOUR_SECOND", - "INTERVAL", "MICROSECOND", "MILLISECOND", "MINUTE", "MINUTE_MICROSECOND", - "MINUTE_OF_DAY", "MINUTE_OF_HOUR", "MINUTE_SECOND", "MONTH", "MONTH_OF_YEAR", - "QUARTER", "SECOND", "SECOND_MICROSECOND", "SECOND_OF_MINUTE", "WEEK", - "WEEK_OF_YEAR", "YEAR", "YEAR_MONTH", "DATAMODEL", "LOOKUP", "SAVEDSEARCH", - "INT", "INTEGER", "DOUBLE", "LONG", "FLOAT", "STRING", "BOOLEAN", - "PIPE", "COMMA", "DOT", "EQUAL", "GREATER", "LESS", "NOT_GREATER", - "NOT_LESS", "NOT_EQUAL", "PLUS", "MINUS", "STAR", "DIVIDE", "MODULE", - "EXCLAMATION_SYMBOL", "COLON", "LT_PRTHS", "RT_PRTHS", "LT_SQR_PRTHS", - "RT_SQR_PRTHS", "SINGLE_QUOTE", "DOUBLE_QUOTE", "BACKTICK", "BIT_NOT_OP", - "BIT_AND_OP", "BIT_XOR_OP", "AVG", "COUNT", "DISTINCT_COUNT", "ESTDC", - "ESTDC_ERROR", "MAX", "MEAN", "MEDIAN", "MIN", "MODE", "RANGE", - "STDEV", "STDEVP", "SUM", "SUMSQ", "VAR_SAMP", "VAR_POP", "STDDEV_SAMP", - "STDDEV_POP", "PERCENTILE", "TAKE", "FIRST", "LAST", "LIST", "VALUES", - "EARLIEST", "EARLIEST_TIME", "LATEST", "LATEST_TIME", "PER_DAY", - "PER_HOUR", "PER_MINUTE", "PER_SECOND", "RATE", "SPARKLINE", "C", - "DC", "ABS", "CBRT", "CEIL", "CEILING", "CONV", "CRC32", "E", "EXP", - "FLOOR", "LN", "LOG", "LOG10", "LOG2", "MOD", "PI", "POSITION", - "POW", "POWER", "RAND", "ROUND", "SIGN", "SQRT", "TRUNCATE", "ACOS", - "ASIN", "ATAN", "ATAN2", "COS", "COT", "DEGREES", "RADIANS", "SIN", - "TAN", "ADDDATE", "ADDTIME", "CURDATE", "CURRENT_DATE", "CURRENT_TIME", - "CURRENT_TIMESTAMP", "CURTIME", "DATE", "DATEDIFF", "DATE_ADD", - "DATE_FORMAT", "DATE_SUB", "DAYNAME", "DAYOFMONTH", "DAYOFWEEK", - "DAYOFYEAR", "DAY_OF_MONTH", "DAY_OF_WEEK", "EXTRACT", "FROM_DAYS", - "FROM_UNIXTIME", "GET_FORMAT", "LAST_DAY", "LOCALTIME", "LOCALTIMESTAMP", - "MAKEDATE", "MAKETIME", "MONTHNAME", "NOW", "PERIOD_ADD", "PERIOD_DIFF", - "SEC_TO_TIME", "STR_TO_DATE", "SUBDATE", "SUBTIME", "SYSDATE", "TIME", - "TIMEDIFF", "TIMESTAMP", "TIMESTAMPADD", "TIMESTAMPDIFF", "TIME_FORMAT", - "TIME_TO_SEC", "TO_DAYS", "TO_SECONDS", "UNIX_TIMESTAMP", "UTC_DATE", - "UTC_TIME", "UTC_TIMESTAMP", "WEEKDAY", "YEARWEEK", "SUBSTR", "SUBSTRING", - "LTRIM", "RTRIM", "TRIM", "TO", "LOWER", "UPPER", "CONCAT", "CONCAT_WS", - "LENGTH", "STRCMP", "RIGHT", "LEFT", "ASCII", "LOCATE", "REPLACE", - "REVERSE", "CAST", "LIKE", "ISNULL", "ISNOTNULL", "IFNULL", "NULLIF", - "IF", "TYPEOF", "MATCH", "MATCH_PHRASE", "MATCH_PHRASE_PREFIX", - "MATCH_BOOL_PREFIX", "SIMPLE_QUERY_STRING", "MULTI_MATCH", "QUERY_STRING", - "ALLOW_LEADING_WILDCARD", "ANALYZE_WILDCARD", "ANALYZER", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", + null, "SPACE", "SEARCH", "DESCRIBE", "SHOW", "EXPLAIN", "FROM", + "WHERE", "FIELDS", "FIELD", "TABLE", "RENAME", "STATS", "EVENTSTATS", + "DEDUP", "SORT", "EVAL", "HEAD", "BIN", "TOP", "RARE", "PARSE", + "SPATH", "REGEX", "REX", "SED", "PUNCT", "GROK", "PATTERN", "PATTERNS", + "NEW_FIELD", "KMEANS", "AD", "ML", "FILLNULL", "FLATTEN", "TRENDLINE", + "TIMECHART", "APPENDCOL", "EXPAND", "SIMPLE_PATTERN", "BRAIN", "VARIABLE_COUNT_THRESHOLD", + "FREQUENCY_THRESHOLD_PERCENTAGE", "METHOD", "MAX_SAMPLE_COUNT", + "MAX_MATCH", "OFFSET_FIELD", "BUFFER_LIMIT", "LABEL", "AGGREGATION", + "JOIN", "ON", "INNER", "OUTER", "FULL", "SEMI", "ANTI", "CROSS", + "LEFT_HINT", "RIGHT_HINT", "AS", "BY", "SOURCE", "INDEX", "A", "ASC", + "D", "DESC", "DATASOURCES", "USING", "WITH", "SIMPLE", "STANDARD", + "COST", "EXTENDED", "OVERRIDE", "OVERWRITE", "AUTO", "STR", "NUM", + "SMA", "WMA", "KEEPEMPTY", "CONSECUTIVE", "DEDUP_SPLITVALUES", "PARTITIONS", + "ALLNUM", "DELIM", "BUCKET_NULLABLE", "CENTROIDS", "ITERATIONS", + "DISTANCE_TYPE", "NUMBER_OF_TREES", "SHINGLE_SIZE", "SAMPLE_SIZE", + "OUTPUT_AFTER", "TIME_DECAY", "ANOMALY_RATE", "CATEGORY_FIELD", + "TIME_FIELD", "TIME_ZONE", "TRAINING_DATA_SIZE", "ANOMALY_SCORE_THRESHOLD", + "APPEND", "COUNTFIELD", "SHOWCOUNT", "LIMIT", "USEOTHER", "INPUT", + "OUTPUT", "PATH", "CASE", "ELSE", "IN", "EXISTS", "GEOIP", "NOT", + "OR", "AND", "XOR", "TRUE", "FALSE", "REGEXP", "REGEX_MATCH", "CONVERT_TZ", + "DATETIME", "DAY", "DAY_HOUR", "DAY_MICROSECOND", "DAY_MINUTE", + "DAY_OF_YEAR", "DAY_SECOND", "HOUR", "HOUR_MICROSECOND", "HOUR_MINUTE", + "HOUR_OF_DAY", "HOUR_SECOND", "INTERVAL", "MICROSECOND", "MILLISECOND", + "MINUTE", "MINUTE_MICROSECOND", "MINUTE_OF_DAY", "MINUTE_OF_HOUR", + "MINUTE_SECOND", "MONTH", "MONTH_OF_YEAR", "QUARTER", "SECOND", + "SECOND_MICROSECOND", "SECOND_OF_MINUTE", "WEEK", "WEEK_OF_YEAR", + "YEAR", "YEAR_MONTH", "DATAMODEL", "LOOKUP", "SAVEDSEARCH", "INT", + "INTEGER", "DOUBLE", "LONG", "FLOAT", "STRING", "BOOLEAN", "IP", + "PIPE", "COMMA", "DOT", "EQUAL", "DOUBLE_EQUAL", "GREATER", "LESS", + "NOT_GREATER", "NOT_LESS", "NOT_EQUAL", "PLUS", "MINUS", "STAR", + "DIVIDE", "MODULE", "EXCLAMATION_SYMBOL", "COLON", "LT_PRTHS", "RT_PRTHS", + "LT_SQR_PRTHS", "RT_SQR_PRTHS", "LT_CURLY", "RT_CURLY", "SINGLE_QUOTE", + "DOUBLE_QUOTE", "BACKTICK", "ARROW", "BIT_NOT_OP", "BIT_AND_OP", + "BIT_XOR_OP", "AVG", "COUNT", "DISTINCT_COUNT", "DISTINCT_COUNT_APPROX", + "ESTDC", "ESTDC_ERROR", "MAX", "MEAN", "MEDIAN", "MIN", "MODE", + "RANGE", "STDEV", "STDEVP", "SUM", "SUMSQ", "VAR_SAMP", "VAR_POP", + "STDDEV_SAMP", "STDDEV_POP", "PERC", "PERCENTILE", "PERCENTILE_APPROX", + "EARLIEST", "LATEST", "TAKE", "LIST", "VALUES", "PER_DAY", "PER_HOUR", + "PER_MINUTE", "PER_SECOND", "RATE", "SPARKLINE", "C", "DC", "ROW_NUMBER", + "RANK", "DENSE_RANK", "PERCENT_RANK", "CUME_DIST", "FIRST", "LAST", + "NTH", "NTILE", "PLUS_FUCTION", "MINUS_FUCTION", "STAR_FUNCTION", + "DIVIDE_FUNCTION", "ABS", "CBRT", "CEIL", "CEILING", "CONV", "CRC32", + "E", "EXP", "EXPM1", "FLOOR", "LN", "LOG", "LOG_WITH_BASE", "MOD", + "MODULUS", "PI", "POSITION", "POW", "POWER", "RAND", "ROUND", "SIGN", + "SQRT", "TRUNCATE", "RINT", "SIGNUM", "ACOS", "ASIN", "ATAN", "ATAN2", + "COS", "COSH", "COT", "DEGREES", "RADIANS", "SIN", "SINH", "TAN", + "MD5", "SHA1", "SHA2", "ADDDATE", "ADDTIME", "CURDATE", "CURRENT_DATE", + "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURTIME", "DATE", "DATEDIFF", + "DATE_ADD", "DATE_FORMAT", "DATE_SUB", "DAYNAME", "DAYOFMONTH", + "DAYOFWEEK", "DAYOFYEAR", "DAY_OF_MONTH", "DAY_OF_WEEK", "EXTRACT", + "FROM_DAYS", "FROM_UNIXTIME", "GET_FORMAT", "LAST_DAY", "LOCALTIME", + "LOCALTIMESTAMP", "MAKEDATE", "MAKETIME", "MONTHNAME", "NOW", "PERIOD_ADD", + "PERIOD_DIFF", "SEC_TO_TIME", "STR_TO_DATE", "SUBDATE", "SUBTIME", + "SYSDATE", "TIME", "TIMEDIFF", "TIMESTAMP", "TIMESTAMPADD", "TIMESTAMPDIFF", + "TIME_FORMAT", "TIME_TO_SEC", "TO_DAYS", "TO_SECONDS", "UNIX_TIMESTAMP", + "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", "WEEKDAY", "YEARWEEK", + "STRFTIME", "SUBSTR", "SUBSTRING", "LTRIM", "RTRIM", "TRIM", "TO", + "LOWER", "UPPER", "CONCAT", "CONCAT_WS", "LENGTH", "STRCMP", "RIGHT", + "LEFT", "ASCII", "LOCATE", "REPLACE", "REVERSE", "CAST", "LIKE", + "ISNULL", "ISNOTNULL", "CIDRMATCH", "BETWEEN", "ISPRESENT", "ISEMPTY", + "ISBLANK", "ARRAY", "ARRAY_LENGTH", "MVJOIN", "FORALL", "FILTER", + "TRANSFORM", "REDUCE", "JSON_VALID", "JSON", "JSON_OBJECT", "JSON_ARRAY", + "JSON_ARRAY_LENGTH", "JSON_EXTRACT", "JSON_KEYS", "JSON_SET", "JSON_DELETE", + "JSON_APPEND", "JSON_EXTEND", "IFNULL", "NULLIF", "IF", "TYPEOF", + "COALESCE", "MATCH", "MATCH_PHRASE", "MATCH_PHRASE_PREFIX", "MATCH_BOOL_PREFIX", + "SIMPLE_QUERY_STRING", "MULTI_MATCH", "QUERY_STRING", "ALLOW_LEADING_WILDCARD", + "ANALYZE_WILDCARD", "ANALYZER", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", "BOOST", "CUTOFF_FREQUENCY", "DEFAULT_FIELD", "DEFAULT_OPERATOR", "ENABLE_POSITION_INCREMENTS", "ESCAPE", "FLAGS", "FUZZY_MAX_EXPANSIONS", "FUZZY_PREFIX_LENGTH", "FUZZY_TRANSPOSITIONS", "FUZZY_REWRITE", "FUZZINESS", "LENIENT", "LOW_FREQ_OPERATOR", "MAX_DETERMINIZED_STATES", "MAX_EXPANSIONS", "MINIMUM_SHOULD_MATCH", "OPERATOR", "PHRASE_SLOP", "PREFIX_LENGTH", "QUOTE_ANALYZER", "QUOTE_FIELD_SUFFIX", "REWRITE", - "SLOP", "TIE_BREAKER", "TYPE", "ZERO_TERMS_QUERY", "SPAN", "MS", - "S", "M", "H", "W", "Q", "Y", "ID", "CLUSTER", "INTEGER_LITERAL", - "DECIMAL_LITERAL", "ID_DATE_SUFFIX", "DQUOTA_STRING", "SQUOTA_STRING", - "BQUOTA_STRING", "ERROR_RECOGNITION" + "SLOP", "TIE_BREAKER", "TYPE", "ZERO_TERMS_QUERY", "SPAN", "BINS", + "MINSPAN", "START", "END", "ALIGNTIME", "MS", "S", "M", "H", "W", + "Q", "Y", "SEC", "SECS", "SECONDS", "MINS", "MINUTES", "HR", "HRS", + "HOURS", "DAYS", "MON", "MONTHS", "US", "CS", "DS", "PERCENTILE_SHORTCUT", + "ID", "CLUSTER", "INTEGER_LITERAL", "DECIMAL_LITERAL", "FLOAT_LITERAL", + "DOUBLE_LITERAL", "ID_DATE_SUFFIX", "DQUOTA_STRING", "SQUOTA_STRING", + "BQUOTA_STRING", "LINE_COMMENT", "BLOCK_COMMENT", "ERROR_RECOGNITION" ]; public static readonly modeNames = [ @@ -477,65 +653,87 @@ export class OpenSearchPPLLexer extends antlr.Lexer { ]; public static readonly ruleNames = [ - "SPACE", "SEARCH", "DESCRIBE", "SHOW", "FROM", "WHERE", "FIELDS", - "RENAME", "STATS", "DEDUP", "SORT", "EVAL", "HEAD", "TOP", "RARE", - "PARSE", "METHOD", "REGEX", "PUNCT", "GROK", "PATTERN", "PATTERNS", - "NEW_FIELD", "KMEANS", "AD", "ML", "AS", "BY", "SOURCE", "INDEX", - "D", "DESC", "DATASOURCES", "SORTBY", "AUTO", "STR", "IP", "NUM", - "KEEPEMPTY", "CONSECUTIVE", "DEDUP_SPLITVALUES", "PARTITIONS", "ALLNUM", - "DELIM", "CENTROIDS", "ITERATIONS", "DISTANCE_TYPE", "NUMBER_OF_TREES", - "SHINGLE_SIZE", "SAMPLE_SIZE", "OUTPUT_AFTER", "TIME_DECAY", "ANOMALY_RATE", - "CATEGORY_FIELD", "TIME_FIELD", "TIME_ZONE", "TRAINING_DATA_SIZE", - "ANOMALY_SCORE_THRESHOLD", "CASE", "IN", "NOT", "OR", "AND", "XOR", - "TRUE", "FALSE", "REGEXP", "CONVERT_TZ", "DATETIME", "DAY", "DAY_HOUR", - "DAY_MICROSECOND", "DAY_MINUTE", "DAY_OF_YEAR", "DAY_SECOND", "HOUR", - "HOUR_MICROSECOND", "HOUR_MINUTE", "HOUR_OF_DAY", "HOUR_SECOND", - "INTERVAL", "MICROSECOND", "MILLISECOND", "MINUTE", "MINUTE_MICROSECOND", - "MINUTE_OF_DAY", "MINUTE_OF_HOUR", "MINUTE_SECOND", "MONTH", "MONTH_OF_YEAR", - "QUARTER", "SECOND", "SECOND_MICROSECOND", "SECOND_OF_MINUTE", "WEEK", - "WEEK_OF_YEAR", "YEAR", "YEAR_MONTH", "DATAMODEL", "LOOKUP", "SAVEDSEARCH", - "INT", "INTEGER", "DOUBLE", "LONG", "FLOAT", "STRING", "BOOLEAN", - "PIPE", "COMMA", "DOT", "EQUAL", "GREATER", "LESS", "NOT_GREATER", - "NOT_LESS", "NOT_EQUAL", "PLUS", "MINUS", "STAR", "DIVIDE", "MODULE", - "EXCLAMATION_SYMBOL", "COLON", "LT_PRTHS", "RT_PRTHS", "LT_SQR_PRTHS", - "RT_SQR_PRTHS", "SINGLE_QUOTE", "DOUBLE_QUOTE", "BACKTICK", "BIT_NOT_OP", - "BIT_AND_OP", "BIT_XOR_OP", "AVG", "COUNT", "DISTINCT_COUNT", "ESTDC", - "ESTDC_ERROR", "MAX", "MEAN", "MEDIAN", "MIN", "MODE", "RANGE", - "STDEV", "STDEVP", "SUM", "SUMSQ", "VAR_SAMP", "VAR_POP", "STDDEV_SAMP", - "STDDEV_POP", "PERCENTILE", "TAKE", "FIRST", "LAST", "LIST", "VALUES", - "EARLIEST", "EARLIEST_TIME", "LATEST", "LATEST_TIME", "PER_DAY", - "PER_HOUR", "PER_MINUTE", "PER_SECOND", "RATE", "SPARKLINE", "C", - "DC", "ABS", "CBRT", "CEIL", "CEILING", "CONV", "CRC32", "E", "EXP", - "FLOOR", "LN", "LOG", "LOG10", "LOG2", "MOD", "PI", "POSITION", - "POW", "POWER", "RAND", "ROUND", "SIGN", "SQRT", "TRUNCATE", "ACOS", - "ASIN", "ATAN", "ATAN2", "COS", "COT", "DEGREES", "RADIANS", "SIN", - "TAN", "ADDDATE", "ADDTIME", "CURDATE", "CURRENT_DATE", "CURRENT_TIME", - "CURRENT_TIMESTAMP", "CURTIME", "DATE", "DATEDIFF", "DATE_ADD", - "DATE_FORMAT", "DATE_SUB", "DAYNAME", "DAYOFMONTH", "DAYOFWEEK", - "DAYOFYEAR", "DAY_OF_MONTH", "DAY_OF_WEEK", "EXTRACT", "FROM_DAYS", - "FROM_UNIXTIME", "GET_FORMAT", "LAST_DAY", "LOCALTIME", "LOCALTIMESTAMP", - "MAKEDATE", "MAKETIME", "MONTHNAME", "NOW", "PERIOD_ADD", "PERIOD_DIFF", - "SEC_TO_TIME", "STR_TO_DATE", "SUBDATE", "SUBTIME", "SYSDATE", "TIME", - "TIMEDIFF", "TIMESTAMP", "TIMESTAMPADD", "TIMESTAMPDIFF", "TIME_FORMAT", - "TIME_TO_SEC", "TO_DAYS", "TO_SECONDS", "UNIX_TIMESTAMP", "UTC_DATE", - "UTC_TIME", "UTC_TIMESTAMP", "WEEKDAY", "YEARWEEK", "SUBSTR", "SUBSTRING", - "LTRIM", "RTRIM", "TRIM", "TO", "LOWER", "UPPER", "CONCAT", "CONCAT_WS", - "LENGTH", "STRCMP", "RIGHT", "LEFT", "ASCII", "LOCATE", "REPLACE", - "REVERSE", "CAST", "LIKE", "ISNULL", "ISNOTNULL", "IFNULL", "NULLIF", - "IF", "TYPEOF", "MATCH", "MATCH_PHRASE", "MATCH_PHRASE_PREFIX", - "MATCH_BOOL_PREFIX", "SIMPLE_QUERY_STRING", "MULTI_MATCH", "QUERY_STRING", - "ALLOW_LEADING_WILDCARD", "ANALYZE_WILDCARD", "ANALYZER", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", + "SPACE", "SEARCH", "DESCRIBE", "SHOW", "EXPLAIN", "FROM", "WHERE", + "FIELDS", "FIELD", "TABLE", "RENAME", "STATS", "EVENTSTATS", "DEDUP", + "SORT", "EVAL", "HEAD", "BIN", "TOP", "RARE", "PARSE", "SPATH", + "REGEX", "REX", "SED", "PUNCT", "GROK", "PATTERN", "PATTERNS", "NEW_FIELD", + "KMEANS", "AD", "ML", "FILLNULL", "FLATTEN", "TRENDLINE", "TIMECHART", + "APPENDCOL", "EXPAND", "SIMPLE_PATTERN", "BRAIN", "VARIABLE_COUNT_THRESHOLD", + "FREQUENCY_THRESHOLD_PERCENTAGE", "METHOD", "MAX_SAMPLE_COUNT", + "MAX_MATCH", "OFFSET_FIELD", "BUFFER_LIMIT", "LABEL", "AGGREGATION", + "JOIN", "ON", "INNER", "OUTER", "FULL", "SEMI", "ANTI", "CROSS", + "LEFT_HINT", "RIGHT_HINT", "AS", "BY", "SOURCE", "INDEX", "A", "ASC", + "D", "DESC", "DATASOURCES", "USING", "WITH", "SIMPLE", "STANDARD", + "COST", "EXTENDED", "OVERRIDE", "OVERWRITE", "AUTO", "STR", "NUM", + "SMA", "WMA", "KEEPEMPTY", "CONSECUTIVE", "DEDUP_SPLITVALUES", "PARTITIONS", + "ALLNUM", "DELIM", "BUCKET_NULLABLE", "CENTROIDS", "ITERATIONS", + "DISTANCE_TYPE", "NUMBER_OF_TREES", "SHINGLE_SIZE", "SAMPLE_SIZE", + "OUTPUT_AFTER", "TIME_DECAY", "ANOMALY_RATE", "CATEGORY_FIELD", + "TIME_FIELD", "TIME_ZONE", "TRAINING_DATA_SIZE", "ANOMALY_SCORE_THRESHOLD", + "APPEND", "COUNTFIELD", "SHOWCOUNT", "LIMIT", "USEOTHER", "INPUT", + "OUTPUT", "PATH", "CASE", "ELSE", "IN", "EXISTS", "GEOIP", "NOT", + "OR", "AND", "XOR", "TRUE", "FALSE", "REGEXP", "REGEX_MATCH", "CONVERT_TZ", + "DATETIME", "DAY", "DAY_HOUR", "DAY_MICROSECOND", "DAY_MINUTE", + "DAY_OF_YEAR", "DAY_SECOND", "HOUR", "HOUR_MICROSECOND", "HOUR_MINUTE", + "HOUR_OF_DAY", "HOUR_SECOND", "INTERVAL", "MICROSECOND", "MILLISECOND", + "MINUTE", "MINUTE_MICROSECOND", "MINUTE_OF_DAY", "MINUTE_OF_HOUR", + "MINUTE_SECOND", "MONTH", "MONTH_OF_YEAR", "QUARTER", "SECOND", + "SECOND_MICROSECOND", "SECOND_OF_MINUTE", "WEEK", "WEEK_OF_YEAR", + "YEAR", "YEAR_MONTH", "DATAMODEL", "LOOKUP", "SAVEDSEARCH", "INT", + "INTEGER", "DOUBLE", "LONG", "FLOAT", "STRING", "BOOLEAN", "IP", + "PIPE", "COMMA", "DOT", "EQUAL", "DOUBLE_EQUAL", "GREATER", "LESS", + "NOT_GREATER", "NOT_LESS", "NOT_EQUAL", "PLUS", "MINUS", "STAR", + "DIVIDE", "MODULE", "EXCLAMATION_SYMBOL", "COLON", "LT_PRTHS", "RT_PRTHS", + "LT_SQR_PRTHS", "RT_SQR_PRTHS", "LT_CURLY", "RT_CURLY", "SINGLE_QUOTE", + "DOUBLE_QUOTE", "BACKTICK", "ARROW", "BIT_NOT_OP", "BIT_AND_OP", + "BIT_XOR_OP", "AVG", "COUNT", "DISTINCT_COUNT", "DISTINCT_COUNT_APPROX", + "ESTDC", "ESTDC_ERROR", "MAX", "MEAN", "MEDIAN", "MIN", "MODE", + "RANGE", "STDEV", "STDEVP", "SUM", "SUMSQ", "VAR_SAMP", "VAR_POP", + "STDDEV_SAMP", "STDDEV_POP", "PERC", "PERCENTILE", "PERCENTILE_APPROX", + "EARLIEST", "LATEST", "TAKE", "LIST", "VALUES", "PER_DAY", "PER_HOUR", + "PER_MINUTE", "PER_SECOND", "RATE", "SPARKLINE", "C", "DC", "ROW_NUMBER", + "RANK", "DENSE_RANK", "PERCENT_RANK", "CUME_DIST", "FIRST", "LAST", + "NTH", "NTILE", "PLUS_FUCTION", "MINUS_FUCTION", "STAR_FUNCTION", + "DIVIDE_FUNCTION", "ABS", "CBRT", "CEIL", "CEILING", "CONV", "CRC32", + "E", "EXP", "EXPM1", "FLOOR", "LN", "LOG", "LOG_WITH_BASE", "MOD", + "MODULUS", "PI", "POSITION", "POW", "POWER", "RAND", "ROUND", "SIGN", + "SQRT", "TRUNCATE", "RINT", "SIGNUM", "ACOS", "ASIN", "ATAN", "ATAN2", + "COS", "COSH", "COT", "DEGREES", "RADIANS", "SIN", "SINH", "TAN", + "MD5", "SHA1", "SHA2", "ADDDATE", "ADDTIME", "CURDATE", "CURRENT_DATE", + "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURTIME", "DATE", "DATEDIFF", + "DATE_ADD", "DATE_FORMAT", "DATE_SUB", "DAYNAME", "DAYOFMONTH", + "DAYOFWEEK", "DAYOFYEAR", "DAY_OF_MONTH", "DAY_OF_WEEK", "EXTRACT", + "FROM_DAYS", "FROM_UNIXTIME", "GET_FORMAT", "LAST_DAY", "LOCALTIME", + "LOCALTIMESTAMP", "MAKEDATE", "MAKETIME", "MONTHNAME", "NOW", "PERIOD_ADD", + "PERIOD_DIFF", "SEC_TO_TIME", "STR_TO_DATE", "SUBDATE", "SUBTIME", + "SYSDATE", "TIME", "TIMEDIFF", "TIMESTAMP", "TIMESTAMPADD", "TIMESTAMPDIFF", + "TIME_FORMAT", "TIME_TO_SEC", "TO_DAYS", "TO_SECONDS", "UNIX_TIMESTAMP", + "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", "WEEKDAY", "YEARWEEK", + "STRFTIME", "SUBSTR", "SUBSTRING", "LTRIM", "RTRIM", "TRIM", "TO", + "LOWER", "UPPER", "CONCAT", "CONCAT_WS", "LENGTH", "STRCMP", "RIGHT", + "LEFT", "ASCII", "LOCATE", "REPLACE", "REVERSE", "CAST", "LIKE", + "ISNULL", "ISNOTNULL", "CIDRMATCH", "BETWEEN", "ISPRESENT", "ISEMPTY", + "ISBLANK", "ARRAY", "ARRAY_LENGTH", "MVJOIN", "FORALL", "FILTER", + "TRANSFORM", "REDUCE", "JSON_VALID", "JSON", "JSON_OBJECT", "JSON_ARRAY", + "JSON_ARRAY_LENGTH", "JSON_EXTRACT", "JSON_KEYS", "JSON_SET", "JSON_DELETE", + "JSON_APPEND", "JSON_EXTEND", "IFNULL", "NULLIF", "IF", "TYPEOF", + "COALESCE", "MATCH", "MATCH_PHRASE", "MATCH_PHRASE_PREFIX", "MATCH_BOOL_PREFIX", + "SIMPLE_QUERY_STRING", "MULTI_MATCH", "QUERY_STRING", "ALLOW_LEADING_WILDCARD", + "ANALYZE_WILDCARD", "ANALYZER", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", "BOOST", "CUTOFF_FREQUENCY", "DEFAULT_FIELD", "DEFAULT_OPERATOR", "ENABLE_POSITION_INCREMENTS", "ESCAPE", "FLAGS", "FUZZY_MAX_EXPANSIONS", "FUZZY_PREFIX_LENGTH", "FUZZY_TRANSPOSITIONS", "FUZZY_REWRITE", "FUZZINESS", "LENIENT", "LOW_FREQ_OPERATOR", "MAX_DETERMINIZED_STATES", "MAX_EXPANSIONS", "MINIMUM_SHOULD_MATCH", "OPERATOR", "PHRASE_SLOP", "PREFIX_LENGTH", "QUOTE_ANALYZER", "QUOTE_FIELD_SUFFIX", "REWRITE", - "SLOP", "TIE_BREAKER", "TYPE", "ZERO_TERMS_QUERY", "SPAN", "MS", - "S", "M", "H", "W", "Q", "Y", "ID", "CLUSTER", "INTEGER_LITERAL", - "DECIMAL_LITERAL", "DATE_SUFFIX", "ID_LITERAL", "CLUSTER_PREFIX_LITERAL", - "ID_DATE_SUFFIX", "DQUOTA_STRING", "SQUOTA_STRING", "BQUOTA_STRING", - "DEC_DIGIT", "ERROR_RECOGNITION", + "SLOP", "TIE_BREAKER", "TYPE", "ZERO_TERMS_QUERY", "SPAN", "BINS", + "MINSPAN", "START", "END", "ALIGNTIME", "MS", "S", "M", "H", "W", + "Q", "Y", "SEC", "SECS", "SECONDS", "MINS", "MINUTES", "HR", "HRS", + "HOURS", "DAYS", "MON", "MONTHS", "US", "CS", "DS", "PERCENTILE_SHORTCUT", + "ID", "CLUSTER", "INTEGER_LITERAL", "DECIMAL_LITERAL", "FLOAT_LITERAL", + "DOUBLE_LITERAL", "DATE_SUFFIX", "CLUSTER_PREFIX_LITERAL", "ID_DATE_SUFFIX", + "DQUOTA_STRING", "SQUOTA_STRING", "BQUOTA_STRING", "DEC_DIGIT", + "ID_LITERAL", "LINE_COMMENT", "BLOCK_COMMENT", "ERROR_RECOGNITION", ]; @@ -557,7 +755,7 @@ export class OpenSearchPPLLexer extends antlr.Lexer { public get modeNames(): string[] { return OpenSearchPPLLexer.modeNames; } public static readonly _serializedATN: number[] = [ - 4,0,336,3509,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, + 4,0,467,4875,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, @@ -616,1248 +814,1780 @@ export class OpenSearchPPLLexer extends antlr.Lexer { 7,323,2,324,7,324,2,325,7,325,2,326,7,326,2,327,7,327,2,328,7,328, 2,329,7,329,2,330,7,330,2,331,7,331,2,332,7,332,2,333,7,333,2,334, 7,334,2,335,7,335,2,336,7,336,2,337,7,337,2,338,7,338,2,339,7,339, - 1,0,4,0,683,8,0,11,0,12,0,684,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,4,1, - 4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,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,9,1,9,1, - 9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11, - 1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14, - 1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16, - 1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18, - 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,23,1,23,1,23,1,23,1,23,1,23,1,23, - 1,24,1,24,1,24,1,25,1,25,1,25,1,26,1,26,1,26,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,30, - 1,30,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32, - 1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,34, - 1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,37,1,37, - 1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,39, - 1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40, - 1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40, + 2,340,7,340,2,341,7,341,2,342,7,342,2,343,7,343,2,344,7,344,2,345, + 7,345,2,346,7,346,2,347,7,347,2,348,7,348,2,349,7,349,2,350,7,350, + 2,351,7,351,2,352,7,352,2,353,7,353,2,354,7,354,2,355,7,355,2,356, + 7,356,2,357,7,357,2,358,7,358,2,359,7,359,2,360,7,360,2,361,7,361, + 2,362,7,362,2,363,7,363,2,364,7,364,2,365,7,365,2,366,7,366,2,367, + 7,367,2,368,7,368,2,369,7,369,2,370,7,370,2,371,7,371,2,372,7,372, + 2,373,7,373,2,374,7,374,2,375,7,375,2,376,7,376,2,377,7,377,2,378, + 7,378,2,379,7,379,2,380,7,380,2,381,7,381,2,382,7,382,2,383,7,383, + 2,384,7,384,2,385,7,385,2,386,7,386,2,387,7,387,2,388,7,388,2,389, + 7,389,2,390,7,390,2,391,7,391,2,392,7,392,2,393,7,393,2,394,7,394, + 2,395,7,395,2,396,7,396,2,397,7,397,2,398,7,398,2,399,7,399,2,400, + 7,400,2,401,7,401,2,402,7,402,2,403,7,403,2,404,7,404,2,405,7,405, + 2,406,7,406,2,407,7,407,2,408,7,408,2,409,7,409,2,410,7,410,2,411, + 7,411,2,412,7,412,2,413,7,413,2,414,7,414,2,415,7,415,2,416,7,416, + 2,417,7,417,2,418,7,418,2,419,7,419,2,420,7,420,2,421,7,421,2,422, + 7,422,2,423,7,423,2,424,7,424,2,425,7,425,2,426,7,426,2,427,7,427, + 2,428,7,428,2,429,7,429,2,430,7,430,2,431,7,431,2,432,7,432,2,433, + 7,433,2,434,7,434,2,435,7,435,2,436,7,436,2,437,7,437,2,438,7,438, + 2,439,7,439,2,440,7,440,2,441,7,441,2,442,7,442,2,443,7,443,2,444, + 7,444,2,445,7,445,2,446,7,446,2,447,7,447,2,448,7,448,2,449,7,449, + 2,450,7,450,2,451,7,451,2,452,7,452,2,453,7,453,2,454,7,454,2,455, + 7,455,2,456,7,456,2,457,7,457,2,458,7,458,2,459,7,459,2,460,7,460, + 2,461,7,461,2,462,7,462,2,463,7,463,2,464,7,464,2,465,7,465,2,466, + 7,466,2,467,7,467,2,468,7,468,2,469,7,469,2,470,7,470,1,0,4,0,945, + 8,0,11,0,12,0,946,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1, + 2,1,2,1,2,1,2,1,2,1,2,1,2,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,5,1,5,1,5,1,5,1,5,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,9,1,9,1,9,1,9,1, + 9,1,9,1,10,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,12,1,12,1,12,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,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15, + 1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,18,1,18, + 1,18,1,18,1,19,1,19,1,19,1,19,1,19,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,22,1,22,1,22,1,22,1,22,1,22,1,23, + 1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,25, + 1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,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,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,30, + 1,31,1,31,1,31,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33, + 1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35, + 1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1,36, + 1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39, + 1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40, 1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41, - 1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43, - 1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45, - 1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46, - 1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47, - 1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47, - 1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48, - 1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50, - 1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,51, - 1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52, - 1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53, - 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,54, - 1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55, - 1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56, - 1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56, - 1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57, - 1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,58,1,58, - 1,58,1,58,1,58,1,59,1,59,1,59,1,60,1,60,1,60,1,60,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,64, - 1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66, - 1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68, - 1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,70,1,70, - 1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71, - 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72, - 1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73, - 1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74, - 1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76, - 1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76, - 1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77, - 1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,79, - 1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80, - 1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81, - 1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82, - 1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,84, + 1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41, + 1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, + 1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, + 1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,43, + 1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, + 1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45, + 1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46, + 1,46,1,46,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47, + 1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49, + 1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,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,53, + 1,53,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,56,1,56, + 1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58, + 1,58,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59,1,59, + 1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,61,1,61,1,61,1,62,1,62,1,62, + 1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,65, + 1,65,1,65,1,65,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68, + 1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69, + 1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73, + 1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75, + 1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76, + 1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78, + 1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,82, + 1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83, + 1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84, 1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84, - 1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85, - 1,85,1,85,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86, - 1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87, - 1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88, - 1,88,1,88,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89, - 1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91, - 1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92, - 1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,93,1,93, + 1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,86,1,86, + 1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,87,1,88,1,88, + 1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88, + 1,88,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90, + 1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,91, + 1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92, + 1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92, 1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93, - 1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95, - 1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,97, + 1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,95, + 1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,96, + 1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97, 1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98, - 1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,99, - 1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100, - 1,100,1,100,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102, - 1,102,1,102,1,102,1,103,1,103,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,105,1,105,1,106, - 1,106,1,106,1,106,1,106,1,106,1,106,1,107,1,107,1,107,1,107,1,107, - 1,107,1,107,1,107,1,108,1,108,1,109,1,109,1,110,1,110,1,111,1,111, - 1,112,1,112,1,113,1,113,1,114,1,114,1,114,1,115,1,115,1,115,1,116, - 1,116,1,116,1,117,1,117,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,127,1,127,1,128,1,128,1,129,1,129,1,130,1,130,1,131,1,131,1,132, - 1,132,1,133,1,133,1,134,1,134,1,134,1,134,1,135,1,135,1,135,1,135, - 1,135,1,135,1,136,1,136,1,136,1,136,1,136,1,136,1,136,1,136,1,136, - 1,136,1,136,1,136,1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,137, - 1,137,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,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,141,1,141,1,141,1,142,1,142,1,142,1,142, + 1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,99, + 1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1, + 100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,101,1,101,1,101, + 1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101, + 1,101,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,102, + 1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102, + 1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103, + 1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104, + 1,104,1,104,1,104,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105, + 1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,107,1,107,1,107, + 1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,108,1,108,1,108, + 1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,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,112, + 1,112,1,113,1,113,1,113,1,114,1,114,1,114,1,114,1,114,1,114,1,114, + 1,115,1,115,1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,117, + 1,117,1,117,1,118,1,118,1,118,1,118,1,119,1,119,1,119,1,119,1,120, + 1,120,1,120,1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,122, + 1,122,1,122,1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,123,1,123, + 1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,124,1,124,1,124,1,124, + 1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,125,1,125,1,125,1,125, + 1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,127,1,127, + 1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,128,1,128,1,128,1,128, + 1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128, + 1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129, + 1,129,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130, + 1,130,1,130,1,131,1,131,1,131,1,131,1,131,1,131,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,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133, + 1,133,1,133,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134, + 1,134,1,134,1,134,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135, + 1,135,1,135,1,135,1,135,1,136,1,136,1,136,1,136,1,136,1,136,1,136, + 1,136,1,136,1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,137, + 1,137,1,137,1,137,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138, + 1,138,1,138,1,138,1,138,1,139,1,139,1,139,1,139,1,139,1,139,1,139, + 1,139,1,139,1,139,1,139,1,139,1,140,1,140,1,140,1,140,1,140,1,140, + 1,140,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141, + 1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,142,1,142, + 1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142, + 1,142,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,143, 1,143,1,143,1,143,1,143,1,143,1,144,1,144,1,144,1,144,1,144,1,144, - 1,145,1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146,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,148,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,150, - 1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,151,1,151,1,151,1,151, - 1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,152,1,152,1,152, - 1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,153,1,153,1,153, - 1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,154,1,154,1,154, - 1,154,1,154,1,155,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,157,1,158,1,158,1,158,1,158, + 1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,145,1,145,1,145, + 1,145,1,145,1,145,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146, + 1,146,1,146,1,146,1,146,1,146,1,146,1,147,1,147,1,147,1,147,1,147, + 1,147,1,147,1,147,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,149, + 1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149, + 1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,150,1,150,1,150,1,150, + 1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150, + 1,150,1,150,1,151,1,151,1,151,1,151,1,151,1,152,1,152,1,152,1,152, + 1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,153,1,153, + 1,153,1,153,1,153,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154, + 1,154,1,154,1,154,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, + 1,155,1,155,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,157,1,157, + 1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,158, 1,158,1,158,1,158,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, - 1,159,1,160,1,160,1,160,1,160,1,160,1,160,1,160,1,160,1,160,1,160, - 1,160,1,160,1,160,1,160,1,161,1,161,1,161,1,161,1,161,1,161,1,161, - 1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,162, - 1,162,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,164,1,164, - 1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,165,1,165,1,165,1,165, - 1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,166,1,166,1,166,1,166, - 1,166,1,166,1,166,1,166,1,166,1,166,1,166,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,168, - 1,169,1,169,1,170,1,170,1,170,1,171,1,171,1,171,1,171,1,172,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,174,1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,175,1,176, - 1,176,1,176,1,176,1,176,1,176,1,177,1,177,1,178,1,178,1,178,1,178, - 1,179,1,179,1,179,1,179,1,179,1,179,1,180,1,180,1,180,1,181,1,181, - 1,181,1,181,1,182,1,182,1,182,1,182,1,182,1,182,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,186,1,186, - 1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187, - 1,188,1,188,1,188,1,188,1,188,1,188,1,189,1,189,1,189,1,189,1,189, - 1,190,1,190,1,190,1,190,1,190,1,190,1,191,1,191,1,191,1,191,1,191, - 1,192,1,192,1,192,1,192,1,192,1,193,1,193,1,193,1,193,1,193,1,193, - 1,193,1,193,1,193,1,194,1,194,1,194,1,194,1,194,1,195,1,195,1,195, - 1,195,1,195,1,196,1,196,1,196,1,196,1,196,1,197,1,197,1,197,1,197, - 1,197,1,197,1,198,1,198,1,198,1,198,1,199,1,199,1,199,1,199,1,200, - 1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,201,1,201,1,201,1,201, - 1,201,1,201,1,201,1,201,1,202,1,202,1,202,1,202,1,203,1,203,1,203, - 1,203,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,205,1,205, - 1,205,1,205,1,205,1,205,1,205,1,205,1,206,1,206,1,206,1,206,1,206, - 1,206,1,206,1,206,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207, - 1,207,1,207,1,207,1,207,1,207,1,208,1,208,1,208,1,208,1,208,1,208, - 1,208,1,208,1,208,1,208,1,208,1,208,1,208,1,209,1,209,1,209,1,209, - 1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209, - 1,209,1,209,1,209,1,210,1,210,1,210,1,210,1,210,1,210,1,210,1,210, - 1,211,1,211,1,211,1,211,1,211,1,212,1,212,1,212,1,212,1,212,1,212, - 1,212,1,212,1,212,1,213,1,213,1,213,1,213,1,213,1,213,1,213,1,213, - 1,213,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214, - 1,214,1,214,1,215,1,215,1,215,1,215,1,215,1,215,1,215,1,215,1,215, - 1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,217,1,217,1,217, - 1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,218,1,218,1,218, - 1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219,1,219, + 1,160,1,160,1,160,1,160,1,160,1,160,1,160,1,161,1,161,1,161,1,161, + 1,161,1,162,1,162,1,162,1,162,1,162,1,162,1,163,1,163,1,163,1,163, + 1,163,1,163,1,163,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164, + 1,165,1,165,1,165,1,166,1,166,1,167,1,167,1,168,1,168,1,169,1,169, + 1,170,1,170,1,170,1,171,1,171,1,172,1,172,1,173,1,173,1,173,1,174, + 1,174,1,174,1,175,1,175,1,175,1,176,1,176,1,177,1,177,1,178,1,178, + 1,179,1,179,1,180,1,180,1,181,1,181,1,182,1,182,1,183,1,183,1,184, + 1,184,1,185,1,185,1,186,1,186,1,187,1,187,1,188,1,188,1,189,1,189, + 1,190,1,190,1,191,1,191,1,192,1,192,1,192,1,193,1,193,1,194,1,194, + 1,195,1,195,1,196,1,196,1,196,1,196,1,197,1,197,1,197,1,197,1,197, + 1,197,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198, + 1,198,1,198,1,198,1,198,1,198,1,199,1,199,1,199,1,199,1,199,1,199, + 1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199, + 1,199,1,199,1,199,1,199,1,199,1,200,1,200,1,200,1,200,1,200,1,200, + 1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,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,203,1,204, + 1,204,1,204,1,204,1,204,1,204,1,204,1,205,1,205,1,205,1,205,1,206, + 1,206,1,206,1,206,1,206,1,207,1,207,1,207,1,207,1,207,1,207,1,208, + 1,208,1,208,1,208,1,208,1,208,1,209,1,209,1,209,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,211,1,211, + 1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,213,1,213, + 1,213,1,213,1,213,1,213,1,213,1,213,1,214,1,214,1,214,1,214,1,214, + 1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,215,1,215,1,215,1,215, + 1,215,1,215,1,215,1,215,1,215,1,215,1,215,1,216,1,216,1,216,1,216, + 1,216,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217, + 1,217,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218, + 1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219, 1,219,1,219,1,219,1,219,1,219,1,219,1,220,1,220,1,220,1,220,1,220, - 1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,221,1,221,1,221, - 1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,222,1,222, - 1,222,1,222,1,222,1,222,1,222,1,222,1,223,1,223,1,223,1,223,1,223, - 1,223,1,223,1,223,1,223,1,223,1,224,1,224,1,224,1,224,1,224,1,224, - 1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,225,1,225,1,225, - 1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,226,1,226,1,226, - 1,226,1,226,1,226,1,226,1,226,1,226,1,227,1,227,1,227,1,227,1,227, - 1,227,1,227,1,227,1,227,1,227,1,228,1,228,1,228,1,228,1,228,1,228, - 1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,229,1,229, - 1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,230,1,230,1,230,1,230, - 1,230,1,230,1,230,1,230,1,230,1,231,1,231,1,231,1,231,1,231,1,231, - 1,231,1,231,1,231,1,231,1,232,1,232,1,232,1,232,1,233,1,233,1,233, - 1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,234,1,234,1,234, - 1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,235,1,235, - 1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,236, - 1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236, - 1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,238,1,238,1,238, - 1,238,1,238,1,238,1,238,1,238,1,239,1,239,1,239,1,239,1,239,1,239, - 1,239,1,239,1,240,1,240,1,240,1,240,1,240,1,241,1,241,1,241,1,241, - 1,241,1,241,1,241,1,241,1,241,1,242,1,242,1,242,1,242,1,242,1,242, - 1,242,1,242,1,242,1,242,1,243,1,243,1,243,1,243,1,243,1,243,1,243, + 1,220,1,220,1,221,1,221,1,221,1,221,1,221,1,222,1,222,1,222,1,222, + 1,222,1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,224,1,224,1,224, + 1,224,1,224,1,224,1,224,1,224,1,225,1,225,1,225,1,225,1,225,1,225, + 1,225,1,225,1,225,1,226,1,226,1,226,1,226,1,226,1,226,1,226,1,226, + 1,226,1,226,1,226,1,227,1,227,1,227,1,227,1,227,1,227,1,227,1,227, + 1,227,1,227,1,227,1,228,1,228,1,228,1,228,1,228,1,229,1,229,1,229, + 1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,230,1,230,1,231,1,231, + 1,231,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232, + 1,232,1,233,1,233,1,233,1,233,1,233,1,234,1,234,1,234,1,234,1,234, + 1,234,1,234,1,234,1,234,1,234,1,234,1,235,1,235,1,235,1,235,1,235, + 1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,236,1,236,1,236, + 1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,237,1,237,1,237,1,237, + 1,237,1,237,1,238,1,238,1,238,1,238,1,238,1,239,1,239,1,239,1,239, + 1,240,1,240,1,240,1,240,1,240,1,240,1,241,1,241,1,241,1,241,1,242, + 1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,243,1,243,1,243, 1,243,1,243,1,243,1,243,1,243,1,243,1,244,1,244,1,244,1,244,1,244, - 1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,245,1,245, - 1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,246, - 1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246, - 1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,248,1,248,1,248, - 1,248,1,248,1,248,1,248,1,248,1,248,1,248,1,248,1,249,1,249,1,249, - 1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249, - 1,249,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,251, - 1,251,1,251,1,251,1,251,1,251,1,251,1,251,1,251,1,252,1,252,1,252, - 1,252,1,252,1,252,1,252,1,252,1,252,1,252,1,252,1,252,1,252,1,252, - 1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,254,1,254,1,254, - 1,254,1,254,1,254,1,254,1,254,1,254,1,255,1,255,1,255,1,255,1,255, - 1,255,1,255,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256, - 1,256,1,257,1,257,1,257,1,257,1,257,1,257,1,258,1,258,1,258,1,258, - 1,258,1,258,1,259,1,259,1,259,1,259,1,259,1,260,1,260,1,260,1,261, - 1,261,1,261,1,261,1,261,1,261,1,262,1,262,1,262,1,262,1,262,1,262, - 1,263,1,263,1,263,1,263,1,263,1,263,1,263,1,264,1,264,1,264,1,264, - 1,264,1,264,1,264,1,264,1,264,1,264,1,265,1,265,1,265,1,265,1,265, - 1,265,1,265,1,266,1,266,1,266,1,266,1,266,1,266,1,266,1,267,1,267, - 1,267,1,267,1,267,1,267,1,268,1,268,1,268,1,268,1,268,1,269,1,269, - 1,269,1,269,1,269,1,269,1,270,1,270,1,270,1,270,1,270,1,270,1,270, - 1,271,1,271,1,271,1,271,1,271,1,271,1,271,1,271,1,272,1,272,1,272, - 1,272,1,272,1,272,1,272,1,272,1,273,1,273,1,273,1,273,1,273,1,274, - 1,274,1,274,1,274,1,274,1,275,1,275,1,275,1,275,1,275,1,275,1,275, - 1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,278,1,278,1,278,1,278,1,278, - 1,278,1,278,1,279,1,279,1,279,1,280,1,280,1,280,1,280,1,280,1,280, - 1,280,1,281,1,281,1,281,1,281,1,281,1,281,1,282,1,282,1,282,1,282, - 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,283,1,283, - 1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283, - 1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,284,1,284,1,284,1,284, - 1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284, - 1,284,1,284,1,284,1,285,1,285,1,285,1,285,1,285,1,285,1,285,1,285, - 1,285,1,285,1,285,1,285,1,285,1,285,1,285,1,285,1,285,1,285,1,285, - 1,285,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286, - 1,286,1,286,1,287,1,287,1,287,1,287,1,287,1,287,1,287,1,287,1,287, - 1,287,1,287,1,287,1,287,1,288,1,288,1,288,1,288,1,288,1,288,1,288, - 1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288, - 1,288,1,288,1,288,1,288,1,288,1,289,1,289,1,289,1,289,1,289,1,289, + 1,244,1,244,1,245,1,245,1,245,1,245,1,246,1,246,1,246,1,246,1,246, + 1,247,1,247,1,247,1,247,1,247,1,248,1,248,1,248,1,248,1,248,1,248, + 1,248,1,248,1,249,1,249,1,249,1,249,1,249,1,250,1,250,1,250,1,250, + 1,250,1,250,1,251,1,251,1,252,1,252,1,252,1,252,1,253,1,253,1,253, + 1,253,1,253,1,253,1,254,1,254,1,254,1,254,1,254,1,254,1,255,1,255, + 1,255,1,256,1,256,1,256,1,256,1,257,4,257,2879,8,257,11,257,12,257, + 2880,1,257,1,257,4,257,2885,8,257,11,257,12,257,2886,3,257,2889, + 8,257,3,257,2891,8,257,1,257,1,257,1,257,1,257,1,257,1,257,3,257, + 2899,8,257,1,257,4,257,2902,8,257,11,257,12,257,2903,1,257,1,257, + 4,257,2908,8,257,11,257,12,257,2909,3,257,2912,8,257,1,258,1,258, + 1,258,1,258,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,260, + 1,260,1,260,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261, + 1,262,1,262,1,262,1,262,1,263,1,263,1,263,1,263,1,263,1,263,1,264, + 1,264,1,264,1,264,1,264,1,265,1,265,1,265,1,265,1,265,1,265,1,266, + 1,266,1,266,1,266,1,266,1,267,1,267,1,267,1,267,1,267,1,268,1,268, + 1,268,1,268,1,268,1,268,1,268,1,268,1,268,1,269,1,269,1,269,1,269, + 1,269,1,270,1,270,1,270,1,270,1,270,1,270,1,270,1,271,1,271,1,271, + 1,271,1,271,1,272,1,272,1,272,1,272,1,272,1,273,1,273,1,273,1,273, + 1,273,1,274,1,274,1,274,1,274,1,274,1,274,1,275,1,275,1,275,1,275, + 1,276,1,276,1,276,1,276,1,276,1,277,1,277,1,277,1,277,1,278,1,278, + 1,278,1,278,1,278,1,278,1,278,1,278,1,279,1,279,1,279,1,279,1,279, + 1,279,1,279,1,279,1,280,1,280,1,280,1,280,1,281,1,281,1,281,1,281, + 1,281,1,282,1,282,1,282,1,282,1,283,1,283,1,283,1,283,1,284,1,284, + 1,284,1,284,1,284,1,285,1,285,1,285,1,285,1,285,1,286,1,286,1,286, + 1,286,1,286,1,286,1,286,1,286,1,287,1,287,1,287,1,287,1,287,1,287, + 1,287,1,287,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,289, 1,289,1,289,1,289,1,289,1,289,1,289,1,289,1,289,1,289,1,289,1,289, - 1,290,1,290,1,290,1,290,1,290,1,290,1,290,1,290,1,290,1,291,1,291, - 1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291, - 1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291, - 1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291, - 1,291,1,292,1,292,1,292,1,292,1,292,1,292,1,293,1,293,1,293,1,293, - 1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293, - 1,293,1,293,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294, - 1,294,1,294,1,294,1,294,1,294,1,295,1,295,1,295,1,295,1,295,1,295, - 1,295,1,295,1,295,1,295,1,295,1,295,1,295,1,295,1,295,1,295,1,295, - 1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,296, - 1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,296, - 1,296,1,296,1,296,1,296,1,296,1,297,1,297,1,297,1,297,1,297,1,297, - 1,297,1,298,1,298,1,298,1,298,1,298,1,298,1,299,1,299,1,299,1,299, - 1,299,1,299,1,299,1,299,1,299,1,299,1,299,1,299,1,299,1,299,1,299, - 1,299,1,299,1,299,1,299,1,299,1,299,1,300,1,300,1,300,1,300,1,300, - 1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300, - 1,300,1,300,1,300,1,300,1,301,1,301,1,301,1,301,1,301,1,301,1,301, - 1,301,1,301,1,301,1,301,1,301,1,301,1,301,1,301,1,301,1,301,1,301, - 1,301,1,301,1,301,1,302,1,302,1,302,1,302,1,302,1,302,1,302,1,302, - 1,302,1,302,1,302,1,302,1,302,1,302,1,303,1,303,1,303,1,303,1,303, + 1,289,1,290,1,290,1,290,1,290,1,290,1,290,1,290,1,290,1,290,1,290, + 1,290,1,290,1,290,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291, + 1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,292, + 1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,293,1,293,1,293,1,293, + 1,293,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,295, + 1,295,1,295,1,295,1,295,1,295,1,295,1,295,1,295,1,296,1,296,1,296, + 1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,297,1,297, + 1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,298,1,298,1,298,1,298, + 1,298,1,298,1,298,1,298,1,299,1,299,1,299,1,299,1,299,1,299,1,299, + 1,299,1,299,1,299,1,299,1,300,1,300,1,300,1,300,1,300,1,300,1,300, + 1,300,1,300,1,300,1,301,1,301,1,301,1,301,1,301,1,301,1,301,1,301, + 1,301,1,301,1,302,1,302,1,302,1,302,1,302,1,302,1,302,1,302,1,302, + 1,302,1,302,1,302,1,302,1,303,1,303,1,303,1,303,1,303,1,303,1,303, 1,303,1,303,1,303,1,303,1,303,1,304,1,304,1,304,1,304,1,304,1,304, 1,304,1,304,1,305,1,305,1,305,1,305,1,305,1,305,1,305,1,305,1,305, - 1,305,1,305,1,305,1,305,1,305,1,305,1,305,1,305,1,305,1,306,1,306, - 1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306, - 1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306, - 1,307,1,307,1,307,1,307,1,307,1,307,1,307,1,307,1,307,1,307,1,307, + 1,305,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306, + 1,306,1,306,1,306,1,306,1,307,1,307,1,307,1,307,1,307,1,307,1,307, 1,307,1,307,1,307,1,307,1,308,1,308,1,308,1,308,1,308,1,308,1,308, - 1,308,1,308,1,308,1,308,1,308,1,308,1,308,1,308,1,308,1,308,1,308, - 1,308,1,308,1,308,1,309,1,309,1,309,1,309,1,309,1,309,1,309,1,309, + 1,308,1,308,1,309,1,309,1,309,1,309,1,309,1,309,1,309,1,309,1,309, 1,309,1,310,1,310,1,310,1,310,1,310,1,310,1,310,1,310,1,310,1,310, - 1,310,1,310,1,311,1,311,1,311,1,311,1,311,1,311,1,311,1,311,1,311, - 1,311,1,311,1,311,1,311,1,311,1,312,1,312,1,312,1,312,1,312,1,312, - 1,312,1,312,1,312,1,312,1,312,1,312,1,312,1,312,1,312,1,313,1,313, - 1,313,1,313,1,313,1,313,1,313,1,313,1,313,1,313,1,313,1,313,1,313, - 1,313,1,313,1,313,1,313,1,313,1,313,1,314,1,314,1,314,1,314,1,314, - 1,314,1,314,1,314,1,315,1,315,1,315,1,315,1,315,1,316,1,316,1,316, - 1,316,1,316,1,316,1,316,1,316,1,316,1,316,1,316,1,316,1,317,1,317, - 1,317,1,317,1,317,1,318,1,318,1,318,1,318,1,318,1,318,1,318,1,318, - 1,318,1,318,1,318,1,318,1,318,1,318,1,318,1,318,1,318,1,319,1,319, - 1,319,1,319,1,319,1,320,1,320,1,320,1,321,1,321,1,322,1,322,1,323, - 1,323,1,324,1,324,1,325,1,325,1,326,1,326,1,327,1,327,1,328,1,328, - 1,329,4,329,3412,8,329,11,329,12,329,3413,1,330,4,330,3417,8,330, - 11,330,12,330,3418,3,330,3421,8,330,1,330,1,330,4,330,3425,8,330, - 11,330,12,330,3426,1,331,1,331,4,331,3431,8,331,11,331,12,331,3432, - 4,331,3435,8,331,11,331,12,331,3436,1,332,1,332,5,332,3441,8,332, - 10,332,12,332,3444,9,332,1,333,4,333,3447,8,333,11,333,12,333,3448, - 1,333,5,333,3452,8,333,10,333,12,333,3455,9,333,1,333,1,333,1,334, - 3,334,3460,8,334,1,334,1,334,1,334,1,335,1,335,1,335,1,335,1,335, - 1,335,5,335,3471,8,335,10,335,12,335,3474,9,335,1,335,1,335,1,336, - 1,336,1,336,1,336,1,336,1,336,5,336,3484,8,336,10,336,12,336,3487, - 9,336,1,336,1,336,1,337,1,337,1,337,1,337,1,337,1,337,5,337,3497, - 8,337,10,337,12,337,3500,9,337,1,337,1,337,1,338,1,338,1,339,1,339, - 1,339,1,339,1,3448,0,340,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9, - 19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20, - 41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31, - 63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42, - 85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51,103,52,105, - 53,107,54,109,55,111,56,113,57,115,58,117,59,119,60,121,61,123,62, - 125,63,127,64,129,65,131,66,133,67,135,68,137,69,139,70,141,71,143, - 72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,159,80,161,81, - 163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89,179,90,181, - 91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199,100, - 201,101,203,102,205,103,207,104,209,105,211,106,213,107,215,108, - 217,109,219,110,221,111,223,112,225,113,227,114,229,115,231,116, - 233,117,235,118,237,119,239,120,241,121,243,122,245,123,247,124, - 249,125,251,126,253,127,255,128,257,129,259,130,261,131,263,132, - 265,133,267,134,269,135,271,136,273,137,275,138,277,139,279,140, - 281,141,283,142,285,143,287,144,289,145,291,146,293,147,295,148, - 297,149,299,150,301,151,303,152,305,153,307,154,309,155,311,156, - 313,157,315,158,317,159,319,160,321,161,323,162,325,163,327,164, - 329,165,331,166,333,167,335,168,337,169,339,170,341,171,343,172, - 345,173,347,174,349,175,351,176,353,177,355,178,357,179,359,180, - 361,181,363,182,365,183,367,184,369,185,371,186,373,187,375,188, - 377,189,379,190,381,191,383,192,385,193,387,194,389,195,391,196, - 393,197,395,198,397,199,399,200,401,201,403,202,405,203,407,204, - 409,205,411,206,413,207,415,208,417,209,419,210,421,211,423,212, - 425,213,427,214,429,215,431,216,433,217,435,218,437,219,439,220, - 441,221,443,222,445,223,447,224,449,225,451,226,453,227,455,228, - 457,229,459,230,461,231,463,232,465,233,467,234,469,235,471,236, - 473,237,475,238,477,239,479,240,481,241,483,242,485,243,487,244, - 489,245,491,246,493,247,495,248,497,249,499,250,501,251,503,252, - 505,253,507,254,509,255,511,256,513,257,515,258,517,259,519,260, - 521,261,523,262,525,263,527,264,529,265,531,266,533,267,535,268, - 537,269,539,270,541,271,543,272,545,273,547,274,549,275,551,276, - 553,277,555,278,557,279,559,280,561,281,563,282,565,283,567,284, - 569,285,571,286,573,287,575,288,577,289,579,290,581,291,583,292, - 585,293,587,294,589,295,591,296,593,297,595,298,597,299,599,300, - 601,301,603,302,605,303,607,304,609,305,611,306,613,307,615,308, - 617,309,619,310,621,311,623,312,625,313,627,314,629,315,631,316, - 633,317,635,318,637,319,639,320,641,321,643,322,645,323,647,324, - 649,325,651,326,653,327,655,328,657,329,659,330,661,331,663,0,665, - 0,667,0,669,332,671,333,673,334,675,335,677,0,679,336,1,0,35,3,0, - 9,10,13,13,32,32,2,0,83,83,115,115,2,0,69,69,101,101,2,0,65,65,97, - 97,2,0,82,82,114,114,2,0,67,67,99,99,2,0,72,72,104,104,2,0,68,68, - 100,100,2,0,73,73,105,105,2,0,66,66,98,98,2,0,79,79,111,111,2,0, - 87,87,119,119,2,0,70,70,102,102,2,0,77,77,109,109,2,0,76,76,108, - 108,2,0,78,78,110,110,2,0,84,84,116,116,2,0,85,85,117,117,2,0,80, - 80,112,112,2,0,86,86,118,118,2,0,71,71,103,103,2,0,88,88,120,120, - 2,0,75,75,107,107,2,0,89,89,121,121,2,0,90,90,122,122,2,0,81,81, - 113,113,1,0,45,46,2,0,42,42,48,57,3,0,42,42,64,90,97,122,6,0,42, - 42,45,45,48,57,65,90,95,95,97,122,3,0,42,42,65,90,97,122,2,0,34, - 34,92,92,2,0,39,39,92,92,2,0,92,92,96,96,1,0,48,57,3524,0,1,1,0, - 0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0, - 0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0, - 0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0, - 0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0, - 0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0, - 0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0, - 0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0, - 0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0, - 0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0, - 0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0, - 0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111, - 1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0, - 0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1, - 0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0, - 139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0, - 0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157, - 1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0, - 0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1, - 0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0, - 185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0, - 0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203, - 1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0, - 0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0,0,0,0,221,1, - 0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,0,0,0,0, - 231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0,239,1,0, - 0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249, - 1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0, - 0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1, - 0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0, - 277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0, - 0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295, - 1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0,0,303,1,0,0,0, - 0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0,0,0,0,313,1, - 0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0, - 323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0, - 0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0,341, - 1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0, - 0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1, - 0,0,0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0,0,367,1,0,0,0,0, - 369,1,0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,377,1,0, - 0,0,0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0,0,0,0,385,1,0,0,0,0,387, - 1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0,0,393,1,0,0,0,0,395,1,0,0,0, - 0,397,1,0,0,0,0,399,1,0,0,0,0,401,1,0,0,0,0,403,1,0,0,0,0,405,1, - 0,0,0,0,407,1,0,0,0,0,409,1,0,0,0,0,411,1,0,0,0,0,413,1,0,0,0,0, - 415,1,0,0,0,0,417,1,0,0,0,0,419,1,0,0,0,0,421,1,0,0,0,0,423,1,0, - 0,0,0,425,1,0,0,0,0,427,1,0,0,0,0,429,1,0,0,0,0,431,1,0,0,0,0,433, - 1,0,0,0,0,435,1,0,0,0,0,437,1,0,0,0,0,439,1,0,0,0,0,441,1,0,0,0, - 0,443,1,0,0,0,0,445,1,0,0,0,0,447,1,0,0,0,0,449,1,0,0,0,0,451,1, - 0,0,0,0,453,1,0,0,0,0,455,1,0,0,0,0,457,1,0,0,0,0,459,1,0,0,0,0, - 461,1,0,0,0,0,463,1,0,0,0,0,465,1,0,0,0,0,467,1,0,0,0,0,469,1,0, - 0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475,1,0,0,0,0,477,1,0,0,0,0,479, - 1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0,485,1,0,0,0,0,487,1,0,0,0, - 0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0,0,495,1,0,0,0,0,497,1, - 0,0,0,0,499,1,0,0,0,0,501,1,0,0,0,0,503,1,0,0,0,0,505,1,0,0,0,0, - 507,1,0,0,0,0,509,1,0,0,0,0,511,1,0,0,0,0,513,1,0,0,0,0,515,1,0, - 0,0,0,517,1,0,0,0,0,519,1,0,0,0,0,521,1,0,0,0,0,523,1,0,0,0,0,525, - 1,0,0,0,0,527,1,0,0,0,0,529,1,0,0,0,0,531,1,0,0,0,0,533,1,0,0,0, - 0,535,1,0,0,0,0,537,1,0,0,0,0,539,1,0,0,0,0,541,1,0,0,0,0,543,1, - 0,0,0,0,545,1,0,0,0,0,547,1,0,0,0,0,549,1,0,0,0,0,551,1,0,0,0,0, - 553,1,0,0,0,0,555,1,0,0,0,0,557,1,0,0,0,0,559,1,0,0,0,0,561,1,0, - 0,0,0,563,1,0,0,0,0,565,1,0,0,0,0,567,1,0,0,0,0,569,1,0,0,0,0,571, - 1,0,0,0,0,573,1,0,0,0,0,575,1,0,0,0,0,577,1,0,0,0,0,579,1,0,0,0, - 0,581,1,0,0,0,0,583,1,0,0,0,0,585,1,0,0,0,0,587,1,0,0,0,0,589,1, - 0,0,0,0,591,1,0,0,0,0,593,1,0,0,0,0,595,1,0,0,0,0,597,1,0,0,0,0, - 599,1,0,0,0,0,601,1,0,0,0,0,603,1,0,0,0,0,605,1,0,0,0,0,607,1,0, - 0,0,0,609,1,0,0,0,0,611,1,0,0,0,0,613,1,0,0,0,0,615,1,0,0,0,0,617, - 1,0,0,0,0,619,1,0,0,0,0,621,1,0,0,0,0,623,1,0,0,0,0,625,1,0,0,0, - 0,627,1,0,0,0,0,629,1,0,0,0,0,631,1,0,0,0,0,633,1,0,0,0,0,635,1, - 0,0,0,0,637,1,0,0,0,0,639,1,0,0,0,0,641,1,0,0,0,0,643,1,0,0,0,0, - 645,1,0,0,0,0,647,1,0,0,0,0,649,1,0,0,0,0,651,1,0,0,0,0,653,1,0, - 0,0,0,655,1,0,0,0,0,657,1,0,0,0,0,659,1,0,0,0,0,661,1,0,0,0,0,669, - 1,0,0,0,0,671,1,0,0,0,0,673,1,0,0,0,0,675,1,0,0,0,0,679,1,0,0,0, - 1,682,1,0,0,0,3,688,1,0,0,0,5,695,1,0,0,0,7,704,1,0,0,0,9,709,1, - 0,0,0,11,714,1,0,0,0,13,720,1,0,0,0,15,727,1,0,0,0,17,734,1,0,0, - 0,19,740,1,0,0,0,21,746,1,0,0,0,23,751,1,0,0,0,25,756,1,0,0,0,27, - 761,1,0,0,0,29,765,1,0,0,0,31,770,1,0,0,0,33,776,1,0,0,0,35,783, - 1,0,0,0,37,789,1,0,0,0,39,795,1,0,0,0,41,800,1,0,0,0,43,808,1,0, - 0,0,45,817,1,0,0,0,47,827,1,0,0,0,49,834,1,0,0,0,51,837,1,0,0,0, - 53,840,1,0,0,0,55,843,1,0,0,0,57,846,1,0,0,0,59,853,1,0,0,0,61,859, - 1,0,0,0,63,861,1,0,0,0,65,866,1,0,0,0,67,878,1,0,0,0,69,885,1,0, - 0,0,71,890,1,0,0,0,73,894,1,0,0,0,75,897,1,0,0,0,77,901,1,0,0,0, - 79,911,1,0,0,0,81,923,1,0,0,0,83,941,1,0,0,0,85,952,1,0,0,0,87,959, - 1,0,0,0,89,965,1,0,0,0,91,975,1,0,0,0,93,986,1,0,0,0,95,1000,1,0, - 0,0,97,1016,1,0,0,0,99,1029,1,0,0,0,101,1041,1,0,0,0,103,1054,1, - 0,0,0,105,1065,1,0,0,0,107,1078,1,0,0,0,109,1093,1,0,0,0,111,1104, - 1,0,0,0,113,1114,1,0,0,0,115,1133,1,0,0,0,117,1157,1,0,0,0,119,1162, - 1,0,0,0,121,1165,1,0,0,0,123,1169,1,0,0,0,125,1172,1,0,0,0,127,1176, - 1,0,0,0,129,1180,1,0,0,0,131,1185,1,0,0,0,133,1191,1,0,0,0,135,1198, - 1,0,0,0,137,1209,1,0,0,0,139,1218,1,0,0,0,141,1222,1,0,0,0,143,1231, - 1,0,0,0,145,1247,1,0,0,0,147,1258,1,0,0,0,149,1270,1,0,0,0,151,1281, - 1,0,0,0,153,1286,1,0,0,0,155,1303,1,0,0,0,157,1315,1,0,0,0,159,1327, - 1,0,0,0,161,1339,1,0,0,0,163,1348,1,0,0,0,165,1360,1,0,0,0,167,1372, - 1,0,0,0,169,1379,1,0,0,0,171,1398,1,0,0,0,173,1412,1,0,0,0,175,1427, - 1,0,0,0,177,1441,1,0,0,0,179,1447,1,0,0,0,181,1461,1,0,0,0,183,1469, - 1,0,0,0,185,1476,1,0,0,0,187,1495,1,0,0,0,189,1512,1,0,0,0,191,1517, - 1,0,0,0,193,1530,1,0,0,0,195,1535,1,0,0,0,197,1546,1,0,0,0,199,1556, - 1,0,0,0,201,1563,1,0,0,0,203,1575,1,0,0,0,205,1579,1,0,0,0,207,1587, - 1,0,0,0,209,1594,1,0,0,0,211,1599,1,0,0,0,213,1605,1,0,0,0,215,1612, - 1,0,0,0,217,1620,1,0,0,0,219,1622,1,0,0,0,221,1624,1,0,0,0,223,1626, - 1,0,0,0,225,1628,1,0,0,0,227,1630,1,0,0,0,229,1632,1,0,0,0,231,1635, - 1,0,0,0,233,1638,1,0,0,0,235,1641,1,0,0,0,237,1643,1,0,0,0,239,1645, - 1,0,0,0,241,1647,1,0,0,0,243,1649,1,0,0,0,245,1651,1,0,0,0,247,1653, - 1,0,0,0,249,1655,1,0,0,0,251,1657,1,0,0,0,253,1659,1,0,0,0,255,1661, - 1,0,0,0,257,1663,1,0,0,0,259,1665,1,0,0,0,261,1667,1,0,0,0,263,1669, - 1,0,0,0,265,1671,1,0,0,0,267,1673,1,0,0,0,269,1675,1,0,0,0,271,1679, - 1,0,0,0,273,1685,1,0,0,0,275,1700,1,0,0,0,277,1706,1,0,0,0,279,1718, - 1,0,0,0,281,1722,1,0,0,0,283,1727,1,0,0,0,285,1734,1,0,0,0,287,1738, - 1,0,0,0,289,1743,1,0,0,0,291,1749,1,0,0,0,293,1755,1,0,0,0,295,1762, - 1,0,0,0,297,1766,1,0,0,0,299,1772,1,0,0,0,301,1781,1,0,0,0,303,1789, - 1,0,0,0,305,1801,1,0,0,0,307,1812,1,0,0,0,309,1823,1,0,0,0,311,1828, - 1,0,0,0,313,1834,1,0,0,0,315,1839,1,0,0,0,317,1844,1,0,0,0,319,1851, - 1,0,0,0,321,1860,1,0,0,0,323,1874,1,0,0,0,325,1881,1,0,0,0,327,1893, - 1,0,0,0,329,1901,1,0,0,0,331,1910,1,0,0,0,333,1921,1,0,0,0,335,1932, - 1,0,0,0,337,1937,1,0,0,0,339,1947,1,0,0,0,341,1949,1,0,0,0,343,1952, - 1,0,0,0,345,1956,1,0,0,0,347,1961,1,0,0,0,349,1966,1,0,0,0,351,1974, - 1,0,0,0,353,1979,1,0,0,0,355,1985,1,0,0,0,357,1987,1,0,0,0,359,1991, - 1,0,0,0,361,1997,1,0,0,0,363,2000,1,0,0,0,365,2004,1,0,0,0,367,2010, - 1,0,0,0,369,2015,1,0,0,0,371,2019,1,0,0,0,373,2022,1,0,0,0,375,2031, - 1,0,0,0,377,2035,1,0,0,0,379,2041,1,0,0,0,381,2046,1,0,0,0,383,2052, - 1,0,0,0,385,2057,1,0,0,0,387,2062,1,0,0,0,389,2071,1,0,0,0,391,2076, - 1,0,0,0,393,2081,1,0,0,0,395,2086,1,0,0,0,397,2092,1,0,0,0,399,2096, - 1,0,0,0,401,2100,1,0,0,0,403,2108,1,0,0,0,405,2116,1,0,0,0,407,2120, - 1,0,0,0,409,2124,1,0,0,0,411,2132,1,0,0,0,413,2140,1,0,0,0,415,2148, - 1,0,0,0,417,2161,1,0,0,0,419,2174,1,0,0,0,421,2192,1,0,0,0,423,2200, - 1,0,0,0,425,2205,1,0,0,0,427,2214,1,0,0,0,429,2223,1,0,0,0,431,2235, - 1,0,0,0,433,2244,1,0,0,0,435,2252,1,0,0,0,437,2263,1,0,0,0,439,2273, - 1,0,0,0,441,2283,1,0,0,0,443,2296,1,0,0,0,445,2308,1,0,0,0,447,2316, - 1,0,0,0,449,2326,1,0,0,0,451,2340,1,0,0,0,453,2351,1,0,0,0,455,2360, - 1,0,0,0,457,2370,1,0,0,0,459,2385,1,0,0,0,461,2394,1,0,0,0,463,2403, - 1,0,0,0,465,2413,1,0,0,0,467,2417,1,0,0,0,469,2428,1,0,0,0,471,2440, - 1,0,0,0,473,2452,1,0,0,0,475,2464,1,0,0,0,477,2472,1,0,0,0,479,2480, - 1,0,0,0,481,2488,1,0,0,0,483,2493,1,0,0,0,485,2502,1,0,0,0,487,2512, - 1,0,0,0,489,2525,1,0,0,0,491,2539,1,0,0,0,493,2551,1,0,0,0,495,2563, - 1,0,0,0,497,2571,1,0,0,0,499,2582,1,0,0,0,501,2597,1,0,0,0,503,2606, - 1,0,0,0,505,2615,1,0,0,0,507,2629,1,0,0,0,509,2637,1,0,0,0,511,2646, - 1,0,0,0,513,2653,1,0,0,0,515,2663,1,0,0,0,517,2669,1,0,0,0,519,2675, - 1,0,0,0,521,2680,1,0,0,0,523,2683,1,0,0,0,525,2689,1,0,0,0,527,2695, - 1,0,0,0,529,2702,1,0,0,0,531,2712,1,0,0,0,533,2719,1,0,0,0,535,2726, - 1,0,0,0,537,2732,1,0,0,0,539,2737,1,0,0,0,541,2743,1,0,0,0,543,2750, - 1,0,0,0,545,2758,1,0,0,0,547,2766,1,0,0,0,549,2771,1,0,0,0,551,2776, - 1,0,0,0,553,2783,1,0,0,0,555,2793,1,0,0,0,557,2800,1,0,0,0,559,2807, - 1,0,0,0,561,2810,1,0,0,0,563,2817,1,0,0,0,565,2823,1,0,0,0,567,2836, - 1,0,0,0,569,2856,1,0,0,0,571,2874,1,0,0,0,573,2894,1,0,0,0,575,2906, - 1,0,0,0,577,2919,1,0,0,0,579,2942,1,0,0,0,581,2959,1,0,0,0,583,2968, - 1,0,0,0,585,3004,1,0,0,0,587,3010,1,0,0,0,589,3027,1,0,0,0,591,3041, - 1,0,0,0,593,3058,1,0,0,0,595,3085,1,0,0,0,597,3092,1,0,0,0,599,3098, - 1,0,0,0,601,3119,1,0,0,0,603,3139,1,0,0,0,605,3160,1,0,0,0,607,3174, - 1,0,0,0,609,3184,1,0,0,0,611,3192,1,0,0,0,613,3210,1,0,0,0,615,3234, - 1,0,0,0,617,3249,1,0,0,0,619,3270,1,0,0,0,621,3279,1,0,0,0,623,3291, - 1,0,0,0,625,3305,1,0,0,0,627,3320,1,0,0,0,629,3339,1,0,0,0,631,3347, - 1,0,0,0,633,3352,1,0,0,0,635,3364,1,0,0,0,637,3369,1,0,0,0,639,3386, - 1,0,0,0,641,3391,1,0,0,0,643,3394,1,0,0,0,645,3396,1,0,0,0,647,3398, - 1,0,0,0,649,3400,1,0,0,0,651,3402,1,0,0,0,653,3404,1,0,0,0,655,3406, - 1,0,0,0,657,3408,1,0,0,0,659,3411,1,0,0,0,661,3420,1,0,0,0,663,3434, - 1,0,0,0,665,3438,1,0,0,0,667,3446,1,0,0,0,669,3459,1,0,0,0,671,3464, - 1,0,0,0,673,3477,1,0,0,0,675,3490,1,0,0,0,677,3503,1,0,0,0,679,3505, - 1,0,0,0,681,683,7,0,0,0,682,681,1,0,0,0,683,684,1,0,0,0,684,682, - 1,0,0,0,684,685,1,0,0,0,685,686,1,0,0,0,686,687,6,0,0,0,687,2,1, - 0,0,0,688,689,7,1,0,0,689,690,7,2,0,0,690,691,7,3,0,0,691,692,7, - 4,0,0,692,693,7,5,0,0,693,694,7,6,0,0,694,4,1,0,0,0,695,696,7,7, - 0,0,696,697,7,2,0,0,697,698,7,1,0,0,698,699,7,5,0,0,699,700,7,4, - 0,0,700,701,7,8,0,0,701,702,7,9,0,0,702,703,7,2,0,0,703,6,1,0,0, - 0,704,705,7,1,0,0,705,706,7,6,0,0,706,707,7,10,0,0,707,708,7,11, - 0,0,708,8,1,0,0,0,709,710,7,12,0,0,710,711,7,4,0,0,711,712,7,10, - 0,0,712,713,7,13,0,0,713,10,1,0,0,0,714,715,7,11,0,0,715,716,7,6, - 0,0,716,717,7,2,0,0,717,718,7,4,0,0,718,719,7,2,0,0,719,12,1,0,0, - 0,720,721,7,12,0,0,721,722,7,8,0,0,722,723,7,2,0,0,723,724,7,14, - 0,0,724,725,7,7,0,0,725,726,7,1,0,0,726,14,1,0,0,0,727,728,7,4,0, - 0,728,729,7,2,0,0,729,730,7,15,0,0,730,731,7,3,0,0,731,732,7,13, - 0,0,732,733,7,2,0,0,733,16,1,0,0,0,734,735,7,1,0,0,735,736,7,16, - 0,0,736,737,7,3,0,0,737,738,7,16,0,0,738,739,7,1,0,0,739,18,1,0, - 0,0,740,741,7,7,0,0,741,742,7,2,0,0,742,743,7,7,0,0,743,744,7,17, - 0,0,744,745,7,18,0,0,745,20,1,0,0,0,746,747,7,1,0,0,747,748,7,10, - 0,0,748,749,7,4,0,0,749,750,7,16,0,0,750,22,1,0,0,0,751,752,7,2, - 0,0,752,753,7,19,0,0,753,754,7,3,0,0,754,755,7,14,0,0,755,24,1,0, - 0,0,756,757,7,6,0,0,757,758,7,2,0,0,758,759,7,3,0,0,759,760,7,7, - 0,0,760,26,1,0,0,0,761,762,7,16,0,0,762,763,7,10,0,0,763,764,7,18, - 0,0,764,28,1,0,0,0,765,766,7,4,0,0,766,767,7,3,0,0,767,768,7,4,0, - 0,768,769,7,2,0,0,769,30,1,0,0,0,770,771,7,18,0,0,771,772,7,3,0, - 0,772,773,7,4,0,0,773,774,7,1,0,0,774,775,7,2,0,0,775,32,1,0,0,0, - 776,777,7,13,0,0,777,778,7,2,0,0,778,779,7,16,0,0,779,780,7,6,0, - 0,780,781,7,10,0,0,781,782,7,7,0,0,782,34,1,0,0,0,783,784,7,4,0, - 0,784,785,7,2,0,0,785,786,7,20,0,0,786,787,7,2,0,0,787,788,7,21, - 0,0,788,36,1,0,0,0,789,790,7,18,0,0,790,791,7,17,0,0,791,792,7,15, - 0,0,792,793,7,5,0,0,793,794,7,16,0,0,794,38,1,0,0,0,795,796,7,20, - 0,0,796,797,7,4,0,0,797,798,7,10,0,0,798,799,7,22,0,0,799,40,1,0, - 0,0,800,801,7,18,0,0,801,802,7,3,0,0,802,803,7,16,0,0,803,804,7, - 16,0,0,804,805,7,2,0,0,805,806,7,4,0,0,806,807,7,15,0,0,807,42,1, - 0,0,0,808,809,7,18,0,0,809,810,7,3,0,0,810,811,7,16,0,0,811,812, - 7,16,0,0,812,813,7,2,0,0,813,814,7,4,0,0,814,815,7,15,0,0,815,816, - 7,1,0,0,816,44,1,0,0,0,817,818,7,15,0,0,818,819,7,2,0,0,819,820, - 7,11,0,0,820,821,5,95,0,0,821,822,7,12,0,0,822,823,7,8,0,0,823,824, - 7,2,0,0,824,825,7,14,0,0,825,826,7,7,0,0,826,46,1,0,0,0,827,828, - 7,22,0,0,828,829,7,13,0,0,829,830,7,2,0,0,830,831,7,3,0,0,831,832, - 7,15,0,0,832,833,7,1,0,0,833,48,1,0,0,0,834,835,7,3,0,0,835,836, - 7,7,0,0,836,50,1,0,0,0,837,838,7,13,0,0,838,839,7,14,0,0,839,52, - 1,0,0,0,840,841,7,3,0,0,841,842,7,1,0,0,842,54,1,0,0,0,843,844,7, - 9,0,0,844,845,7,23,0,0,845,56,1,0,0,0,846,847,7,1,0,0,847,848,7, - 10,0,0,848,849,7,17,0,0,849,850,7,4,0,0,850,851,7,5,0,0,851,852, - 7,2,0,0,852,58,1,0,0,0,853,854,7,8,0,0,854,855,7,15,0,0,855,856, - 7,7,0,0,856,857,7,2,0,0,857,858,7,21,0,0,858,60,1,0,0,0,859,860, - 7,7,0,0,860,62,1,0,0,0,861,862,7,7,0,0,862,863,7,2,0,0,863,864,7, - 1,0,0,864,865,7,5,0,0,865,64,1,0,0,0,866,867,7,7,0,0,867,868,7,3, - 0,0,868,869,7,16,0,0,869,870,7,3,0,0,870,871,7,1,0,0,871,872,7,10, - 0,0,872,873,7,17,0,0,873,874,7,4,0,0,874,875,7,5,0,0,875,876,7,2, - 0,0,876,877,7,1,0,0,877,66,1,0,0,0,878,879,7,1,0,0,879,880,7,10, - 0,0,880,881,7,4,0,0,881,882,7,16,0,0,882,883,7,9,0,0,883,884,7,23, - 0,0,884,68,1,0,0,0,885,886,7,3,0,0,886,887,7,17,0,0,887,888,7,16, - 0,0,888,889,7,10,0,0,889,70,1,0,0,0,890,891,7,1,0,0,891,892,7,16, - 0,0,892,893,7,4,0,0,893,72,1,0,0,0,894,895,7,8,0,0,895,896,7,18, - 0,0,896,74,1,0,0,0,897,898,7,15,0,0,898,899,7,17,0,0,899,900,7,13, - 0,0,900,76,1,0,0,0,901,902,7,22,0,0,902,903,7,2,0,0,903,904,7,2, - 0,0,904,905,7,18,0,0,905,906,7,2,0,0,906,907,7,13,0,0,907,908,7, - 18,0,0,908,909,7,16,0,0,909,910,7,23,0,0,910,78,1,0,0,0,911,912, - 7,5,0,0,912,913,7,10,0,0,913,914,7,15,0,0,914,915,7,1,0,0,915,916, - 7,2,0,0,916,917,7,5,0,0,917,918,7,17,0,0,918,919,7,16,0,0,919,920, - 7,8,0,0,920,921,7,19,0,0,921,922,7,2,0,0,922,80,1,0,0,0,923,924, - 7,7,0,0,924,925,7,2,0,0,925,926,7,7,0,0,926,927,7,17,0,0,927,928, - 7,18,0,0,928,929,5,95,0,0,929,930,7,1,0,0,930,931,7,18,0,0,931,932, - 7,14,0,0,932,933,7,8,0,0,933,934,7,16,0,0,934,935,7,19,0,0,935,936, - 7,3,0,0,936,937,7,14,0,0,937,938,7,17,0,0,938,939,7,2,0,0,939,940, - 7,1,0,0,940,82,1,0,0,0,941,942,7,18,0,0,942,943,7,3,0,0,943,944, - 7,4,0,0,944,945,7,16,0,0,945,946,7,8,0,0,946,947,7,16,0,0,947,948, - 7,8,0,0,948,949,7,10,0,0,949,950,7,15,0,0,950,951,7,1,0,0,951,84, - 1,0,0,0,952,953,7,3,0,0,953,954,7,14,0,0,954,955,7,14,0,0,955,956, - 7,15,0,0,956,957,7,17,0,0,957,958,7,13,0,0,958,86,1,0,0,0,959,960, - 7,7,0,0,960,961,7,2,0,0,961,962,7,14,0,0,962,963,7,8,0,0,963,964, - 7,13,0,0,964,88,1,0,0,0,965,966,7,5,0,0,966,967,7,2,0,0,967,968, - 7,15,0,0,968,969,7,16,0,0,969,970,7,4,0,0,970,971,7,10,0,0,971,972, - 7,8,0,0,972,973,7,7,0,0,973,974,7,1,0,0,974,90,1,0,0,0,975,976,7, - 8,0,0,976,977,7,16,0,0,977,978,7,2,0,0,978,979,7,4,0,0,979,980,7, - 3,0,0,980,981,7,16,0,0,981,982,7,8,0,0,982,983,7,10,0,0,983,984, - 7,15,0,0,984,985,7,1,0,0,985,92,1,0,0,0,986,987,7,7,0,0,987,988, - 7,8,0,0,988,989,7,1,0,0,989,990,7,16,0,0,990,991,7,3,0,0,991,992, - 7,15,0,0,992,993,7,5,0,0,993,994,7,2,0,0,994,995,5,95,0,0,995,996, - 7,16,0,0,996,997,7,23,0,0,997,998,7,18,0,0,998,999,7,2,0,0,999,94, - 1,0,0,0,1000,1001,7,15,0,0,1001,1002,7,17,0,0,1002,1003,7,13,0,0, - 1003,1004,7,9,0,0,1004,1005,7,2,0,0,1005,1006,7,4,0,0,1006,1007, - 5,95,0,0,1007,1008,7,10,0,0,1008,1009,7,12,0,0,1009,1010,5,95,0, - 0,1010,1011,7,16,0,0,1011,1012,7,4,0,0,1012,1013,7,2,0,0,1013,1014, - 7,2,0,0,1014,1015,7,1,0,0,1015,96,1,0,0,0,1016,1017,7,1,0,0,1017, - 1018,7,6,0,0,1018,1019,7,8,0,0,1019,1020,7,15,0,0,1020,1021,7,20, - 0,0,1021,1022,7,14,0,0,1022,1023,7,2,0,0,1023,1024,5,95,0,0,1024, - 1025,7,1,0,0,1025,1026,7,8,0,0,1026,1027,7,24,0,0,1027,1028,7,2, - 0,0,1028,98,1,0,0,0,1029,1030,7,1,0,0,1030,1031,7,3,0,0,1031,1032, - 7,13,0,0,1032,1033,7,18,0,0,1033,1034,7,14,0,0,1034,1035,7,2,0,0, - 1035,1036,5,95,0,0,1036,1037,7,1,0,0,1037,1038,7,8,0,0,1038,1039, - 7,24,0,0,1039,1040,7,2,0,0,1040,100,1,0,0,0,1041,1042,7,10,0,0,1042, - 1043,7,17,0,0,1043,1044,7,16,0,0,1044,1045,7,18,0,0,1045,1046,7, - 17,0,0,1046,1047,7,16,0,0,1047,1048,5,95,0,0,1048,1049,7,3,0,0,1049, - 1050,7,12,0,0,1050,1051,7,16,0,0,1051,1052,7,2,0,0,1052,1053,7,4, - 0,0,1053,102,1,0,0,0,1054,1055,7,16,0,0,1055,1056,7,8,0,0,1056,1057, - 7,13,0,0,1057,1058,7,2,0,0,1058,1059,5,95,0,0,1059,1060,7,7,0,0, - 1060,1061,7,2,0,0,1061,1062,7,5,0,0,1062,1063,7,3,0,0,1063,1064, - 7,23,0,0,1064,104,1,0,0,0,1065,1066,7,3,0,0,1066,1067,7,15,0,0,1067, - 1068,7,10,0,0,1068,1069,7,13,0,0,1069,1070,7,3,0,0,1070,1071,7,14, - 0,0,1071,1072,7,23,0,0,1072,1073,5,95,0,0,1073,1074,7,4,0,0,1074, - 1075,7,3,0,0,1075,1076,7,16,0,0,1076,1077,7,2,0,0,1077,106,1,0,0, - 0,1078,1079,7,5,0,0,1079,1080,7,3,0,0,1080,1081,7,16,0,0,1081,1082, - 7,2,0,0,1082,1083,7,20,0,0,1083,1084,7,10,0,0,1084,1085,7,4,0,0, - 1085,1086,7,23,0,0,1086,1087,5,95,0,0,1087,1088,7,12,0,0,1088,1089, - 7,8,0,0,1089,1090,7,2,0,0,1090,1091,7,14,0,0,1091,1092,7,7,0,0,1092, - 108,1,0,0,0,1093,1094,7,16,0,0,1094,1095,7,8,0,0,1095,1096,7,13, - 0,0,1096,1097,7,2,0,0,1097,1098,5,95,0,0,1098,1099,7,12,0,0,1099, - 1100,7,8,0,0,1100,1101,7,2,0,0,1101,1102,7,14,0,0,1102,1103,7,7, - 0,0,1103,110,1,0,0,0,1104,1105,7,16,0,0,1105,1106,7,8,0,0,1106,1107, - 7,13,0,0,1107,1108,7,2,0,0,1108,1109,5,95,0,0,1109,1110,7,24,0,0, - 1110,1111,7,10,0,0,1111,1112,7,15,0,0,1112,1113,7,2,0,0,1113,112, - 1,0,0,0,1114,1115,7,16,0,0,1115,1116,7,4,0,0,1116,1117,7,3,0,0,1117, - 1118,7,8,0,0,1118,1119,7,15,0,0,1119,1120,7,8,0,0,1120,1121,7,15, - 0,0,1121,1122,7,20,0,0,1122,1123,5,95,0,0,1123,1124,7,7,0,0,1124, - 1125,7,3,0,0,1125,1126,7,16,0,0,1126,1127,7,3,0,0,1127,1128,5,95, - 0,0,1128,1129,7,1,0,0,1129,1130,7,8,0,0,1130,1131,7,24,0,0,1131, - 1132,7,2,0,0,1132,114,1,0,0,0,1133,1134,7,3,0,0,1134,1135,7,15,0, - 0,1135,1136,7,10,0,0,1136,1137,7,13,0,0,1137,1138,7,3,0,0,1138,1139, - 7,14,0,0,1139,1140,7,23,0,0,1140,1141,5,95,0,0,1141,1142,7,1,0,0, - 1142,1143,7,5,0,0,1143,1144,7,10,0,0,1144,1145,7,4,0,0,1145,1146, - 7,2,0,0,1146,1147,5,95,0,0,1147,1148,7,16,0,0,1148,1149,7,6,0,0, - 1149,1150,7,4,0,0,1150,1151,7,2,0,0,1151,1152,7,1,0,0,1152,1153, - 7,6,0,0,1153,1154,7,10,0,0,1154,1155,7,14,0,0,1155,1156,7,7,0,0, - 1156,116,1,0,0,0,1157,1158,7,5,0,0,1158,1159,7,3,0,0,1159,1160,7, - 1,0,0,1160,1161,7,2,0,0,1161,118,1,0,0,0,1162,1163,7,8,0,0,1163, - 1164,7,15,0,0,1164,120,1,0,0,0,1165,1166,7,15,0,0,1166,1167,7,10, - 0,0,1167,1168,7,16,0,0,1168,122,1,0,0,0,1169,1170,7,10,0,0,1170, - 1171,7,4,0,0,1171,124,1,0,0,0,1172,1173,7,3,0,0,1173,1174,7,15,0, - 0,1174,1175,7,7,0,0,1175,126,1,0,0,0,1176,1177,7,21,0,0,1177,1178, - 7,10,0,0,1178,1179,7,4,0,0,1179,128,1,0,0,0,1180,1181,7,16,0,0,1181, - 1182,7,4,0,0,1182,1183,7,17,0,0,1183,1184,7,2,0,0,1184,130,1,0,0, - 0,1185,1186,7,12,0,0,1186,1187,7,3,0,0,1187,1188,7,14,0,0,1188,1189, - 7,1,0,0,1189,1190,7,2,0,0,1190,132,1,0,0,0,1191,1192,7,4,0,0,1192, - 1193,7,2,0,0,1193,1194,7,20,0,0,1194,1195,7,2,0,0,1195,1196,7,21, - 0,0,1196,1197,7,18,0,0,1197,134,1,0,0,0,1198,1199,7,5,0,0,1199,1200, - 7,10,0,0,1200,1201,7,15,0,0,1201,1202,7,19,0,0,1202,1203,7,2,0,0, - 1203,1204,7,4,0,0,1204,1205,7,16,0,0,1205,1206,5,95,0,0,1206,1207, - 7,16,0,0,1207,1208,7,24,0,0,1208,136,1,0,0,0,1209,1210,7,7,0,0,1210, - 1211,7,3,0,0,1211,1212,7,16,0,0,1212,1213,7,2,0,0,1213,1214,7,16, - 0,0,1214,1215,7,8,0,0,1215,1216,7,13,0,0,1216,1217,7,2,0,0,1217, - 138,1,0,0,0,1218,1219,7,7,0,0,1219,1220,7,3,0,0,1220,1221,7,23,0, - 0,1221,140,1,0,0,0,1222,1223,7,7,0,0,1223,1224,7,3,0,0,1224,1225, - 7,23,0,0,1225,1226,5,95,0,0,1226,1227,7,6,0,0,1227,1228,7,10,0,0, - 1228,1229,7,17,0,0,1229,1230,7,4,0,0,1230,142,1,0,0,0,1231,1232, - 7,7,0,0,1232,1233,7,3,0,0,1233,1234,7,23,0,0,1234,1235,5,95,0,0, - 1235,1236,7,13,0,0,1236,1237,7,8,0,0,1237,1238,7,5,0,0,1238,1239, - 7,4,0,0,1239,1240,7,10,0,0,1240,1241,7,1,0,0,1241,1242,7,2,0,0,1242, - 1243,7,5,0,0,1243,1244,7,10,0,0,1244,1245,7,15,0,0,1245,1246,7,7, - 0,0,1246,144,1,0,0,0,1247,1248,7,7,0,0,1248,1249,7,3,0,0,1249,1250, - 7,23,0,0,1250,1251,5,95,0,0,1251,1252,7,13,0,0,1252,1253,7,8,0,0, - 1253,1254,7,15,0,0,1254,1255,7,17,0,0,1255,1256,7,16,0,0,1256,1257, - 7,2,0,0,1257,146,1,0,0,0,1258,1259,7,7,0,0,1259,1260,7,3,0,0,1260, - 1261,7,23,0,0,1261,1262,5,95,0,0,1262,1263,7,10,0,0,1263,1264,7, - 12,0,0,1264,1265,5,95,0,0,1265,1266,7,23,0,0,1266,1267,7,2,0,0,1267, - 1268,7,3,0,0,1268,1269,7,4,0,0,1269,148,1,0,0,0,1270,1271,7,7,0, - 0,1271,1272,7,3,0,0,1272,1273,7,23,0,0,1273,1274,5,95,0,0,1274,1275, - 7,1,0,0,1275,1276,7,2,0,0,1276,1277,7,5,0,0,1277,1278,7,10,0,0,1278, - 1279,7,15,0,0,1279,1280,7,7,0,0,1280,150,1,0,0,0,1281,1282,7,6,0, - 0,1282,1283,7,10,0,0,1283,1284,7,17,0,0,1284,1285,7,4,0,0,1285,152, - 1,0,0,0,1286,1287,7,6,0,0,1287,1288,7,10,0,0,1288,1289,7,17,0,0, - 1289,1290,7,4,0,0,1290,1291,5,95,0,0,1291,1292,7,13,0,0,1292,1293, - 7,8,0,0,1293,1294,7,5,0,0,1294,1295,7,4,0,0,1295,1296,7,10,0,0,1296, - 1297,7,1,0,0,1297,1298,7,2,0,0,1298,1299,7,5,0,0,1299,1300,7,10, - 0,0,1300,1301,7,15,0,0,1301,1302,7,7,0,0,1302,154,1,0,0,0,1303,1304, - 7,6,0,0,1304,1305,7,10,0,0,1305,1306,7,17,0,0,1306,1307,7,4,0,0, - 1307,1308,5,95,0,0,1308,1309,7,13,0,0,1309,1310,7,8,0,0,1310,1311, - 7,15,0,0,1311,1312,7,17,0,0,1312,1313,7,16,0,0,1313,1314,7,2,0,0, - 1314,156,1,0,0,0,1315,1316,7,6,0,0,1316,1317,7,10,0,0,1317,1318, - 7,17,0,0,1318,1319,7,4,0,0,1319,1320,5,95,0,0,1320,1321,7,10,0,0, - 1321,1322,7,12,0,0,1322,1323,5,95,0,0,1323,1324,7,7,0,0,1324,1325, - 7,3,0,0,1325,1326,7,23,0,0,1326,158,1,0,0,0,1327,1328,7,6,0,0,1328, - 1329,7,10,0,0,1329,1330,7,17,0,0,1330,1331,7,4,0,0,1331,1332,5,95, - 0,0,1332,1333,7,1,0,0,1333,1334,7,2,0,0,1334,1335,7,5,0,0,1335,1336, - 7,10,0,0,1336,1337,7,15,0,0,1337,1338,7,7,0,0,1338,160,1,0,0,0,1339, - 1340,7,8,0,0,1340,1341,7,15,0,0,1341,1342,7,16,0,0,1342,1343,7,2, - 0,0,1343,1344,7,4,0,0,1344,1345,7,19,0,0,1345,1346,7,3,0,0,1346, - 1347,7,14,0,0,1347,162,1,0,0,0,1348,1349,7,13,0,0,1349,1350,7,8, - 0,0,1350,1351,7,5,0,0,1351,1352,7,4,0,0,1352,1353,7,10,0,0,1353, - 1354,7,1,0,0,1354,1355,7,2,0,0,1355,1356,7,5,0,0,1356,1357,7,10, - 0,0,1357,1358,7,15,0,0,1358,1359,7,7,0,0,1359,164,1,0,0,0,1360,1361, - 7,13,0,0,1361,1362,7,8,0,0,1362,1363,7,14,0,0,1363,1364,7,14,0,0, - 1364,1365,7,8,0,0,1365,1366,7,1,0,0,1366,1367,7,2,0,0,1367,1368, - 7,5,0,0,1368,1369,7,10,0,0,1369,1370,7,15,0,0,1370,1371,7,7,0,0, - 1371,166,1,0,0,0,1372,1373,7,13,0,0,1373,1374,7,8,0,0,1374,1375, - 7,15,0,0,1375,1376,7,17,0,0,1376,1377,7,16,0,0,1377,1378,7,2,0,0, - 1378,168,1,0,0,0,1379,1380,7,13,0,0,1380,1381,7,8,0,0,1381,1382, - 7,15,0,0,1382,1383,7,17,0,0,1383,1384,7,16,0,0,1384,1385,7,2,0,0, - 1385,1386,5,95,0,0,1386,1387,7,13,0,0,1387,1388,7,8,0,0,1388,1389, + 1,310,1,310,1,310,1,310,1,310,1,311,1,311,1,311,1,311,1,311,1,311, + 1,311,1,311,1,311,1,312,1,312,1,312,1,312,1,312,1,312,1,312,1,312, + 1,312,1,313,1,313,1,313,1,313,1,313,1,313,1,313,1,313,1,313,1,313, + 1,314,1,314,1,314,1,314,1,315,1,315,1,315,1,315,1,315,1,315,1,315, + 1,315,1,315,1,315,1,315,1,316,1,316,1,316,1,316,1,316,1,316,1,316, + 1,316,1,316,1,316,1,316,1,316,1,317,1,317,1,317,1,317,1,317,1,317, + 1,317,1,317,1,317,1,317,1,317,1,317,1,318,1,318,1,318,1,318,1,318, + 1,318,1,318,1,318,1,318,1,318,1,318,1,318,1,319,1,319,1,319,1,319, + 1,319,1,319,1,319,1,319,1,320,1,320,1,320,1,320,1,320,1,320,1,320, + 1,320,1,321,1,321,1,321,1,321,1,321,1,321,1,321,1,321,1,322,1,322, + 1,322,1,322,1,322,1,323,1,323,1,323,1,323,1,323,1,323,1,323,1,323, + 1,323,1,324,1,324,1,324,1,324,1,324,1,324,1,324,1,324,1,324,1,324, + 1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325, + 1,325,1,325,1,326,1,326,1,326,1,326,1,326,1,326,1,326,1,326,1,326, + 1,326,1,326,1,326,1,326,1,326,1,327,1,327,1,327,1,327,1,327,1,327, + 1,327,1,327,1,327,1,327,1,327,1,327,1,328,1,328,1,328,1,328,1,328, + 1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,329,1,329,1,329,1,329, + 1,329,1,329,1,329,1,329,1,330,1,330,1,330,1,330,1,330,1,330,1,330, + 1,330,1,330,1,330,1,330,1,331,1,331,1,331,1,331,1,331,1,331,1,331, + 1,331,1,331,1,331,1,331,1,331,1,331,1,331,1,331,1,332,1,332,1,332, + 1,332,1,332,1,332,1,332,1,332,1,332,1,333,1,333,1,333,1,333,1,333, + 1,333,1,333,1,333,1,333,1,334,1,334,1,334,1,334,1,334,1,334,1,334, + 1,334,1,334,1,334,1,334,1,334,1,334,1,334,1,335,1,335,1,335,1,335, + 1,335,1,335,1,335,1,335,1,336,1,336,1,336,1,336,1,336,1,336,1,336, + 1,336,1,336,1,337,1,337,1,337,1,337,1,337,1,337,1,337,1,337,1,337, + 1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,339,1,339,1,339,1,339, + 1,339,1,339,1,339,1,339,1,339,1,339,1,340,1,340,1,340,1,340,1,340, + 1,340,1,341,1,341,1,341,1,341,1,341,1,341,1,342,1,342,1,342,1,342, + 1,342,1,343,1,343,1,343,1,344,1,344,1,344,1,344,1,344,1,344,1,345, + 1,345,1,345,1,345,1,345,1,345,1,346,1,346,1,346,1,346,1,346,1,346, + 1,346,1,347,1,347,1,347,1,347,1,347,1,347,1,347,1,347,1,347,1,347, + 1,348,1,348,1,348,1,348,1,348,1,348,1,348,1,349,1,349,1,349,1,349, + 1,349,1,349,1,349,1,350,1,350,1,350,1,350,1,350,1,350,1,351,1,351, + 1,351,1,351,1,351,1,352,1,352,1,352,1,352,1,352,1,352,1,353,1,353, + 1,353,1,353,1,353,1,353,1,353,1,354,1,354,1,354,1,354,1,354,1,354, + 1,354,1,354,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1,356, + 1,356,1,356,1,356,1,356,1,357,1,357,1,357,1,357,1,357,1,358,1,358, + 1,358,1,358,1,358,1,358,1,358,1,359,1,359,1,359,1,359,1,359,1,359, + 1,359,1,359,1,359,1,359,1,360,1,360,1,360,1,360,1,360,1,360,1,360, + 1,360,1,360,1,360,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361, + 1,362,1,362,1,362,1,362,1,362,1,362,1,362,1,362,1,362,1,362,1,363, + 1,363,1,363,1,363,1,363,1,363,1,363,1,363,1,364,1,364,1,364,1,364, + 1,364,1,364,1,364,1,364,1,365,1,365,1,365,1,365,1,365,1,365,1,366, + 1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366, + 1,366,1,367,1,367,1,367,1,367,1,367,1,367,1,367,1,368,1,368,1,368, + 1,368,1,368,1,368,1,368,1,369,1,369,1,369,1,369,1,369,1,369,1,369, + 1,370,1,370,1,370,1,370,1,370,1,370,1,370,1,370,1,370,1,370,1,371, + 1,371,1,371,1,371,1,371,1,371,1,371,1,372,1,372,1,372,1,372,1,372, + 1,372,1,372,1,372,1,372,1,372,1,372,1,373,1,373,1,373,1,373,1,373, + 1,374,1,374,1,374,1,374,1,374,1,374,1,374,1,374,1,374,1,374,1,374, + 1,374,1,375,1,375,1,375,1,375,1,375,1,375,1,375,1,375,1,375,1,375, + 1,375,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376, + 1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,377,1,377,1,377, + 1,377,1,377,1,377,1,377,1,377,1,377,1,377,1,377,1,377,1,377,1,378, + 1,378,1,378,1,378,1,378,1,378,1,378,1,378,1,378,1,378,1,379,1,379, + 1,379,1,379,1,379,1,379,1,379,1,379,1,379,1,380,1,380,1,380,1,380, + 1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,381,1,381,1,381, + 1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,382,1,382, + 1,382,1,382,1,382,1,382,1,382,1,382,1,382,1,382,1,382,1,382,1,383, + 1,383,1,383,1,383,1,383,1,383,1,383,1,384,1,384,1,384,1,384,1,384, + 1,384,1,384,1,385,1,385,1,385,1,386,1,386,1,386,1,386,1,386,1,386, + 1,386,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,388, + 1,388,1,388,1,388,1,388,1,388,1,389,1,389,1,389,1,389,1,389,1,389, + 1,389,1,389,1,389,1,389,1,389,1,389,1,389,1,390,1,390,1,390,1,390, + 1,390,1,390,1,390,1,390,1,390,1,390,1,390,1,390,1,390,1,390,1,390, + 1,390,1,390,1,390,1,390,1,390,1,391,1,391,1,391,1,391,1,391,1,391, + 1,391,1,391,1,391,1,391,1,391,1,391,1,391,1,391,1,391,1,391,1,391, + 1,391,1,392,1,392,1,392,1,392,1,392,1,392,1,392,1,392,1,392,1,392, + 1,392,1,392,1,392,1,392,1,392,1,392,1,392,1,392,1,392,1,392,1,393, + 1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393, + 1,394,1,394,1,394,1,394,1,394,1,394,1,394,1,394,1,394,1,394,1,394, + 1,394,1,394,1,395,1,395,1,395,1,395,1,395,1,395,1,395,1,395,1,395, + 1,395,1,395,1,395,1,395,1,395,1,395,1,395,1,395,1,395,1,395,1,395, + 1,395,1,395,1,395,1,396,1,396,1,396,1,396,1,396,1,396,1,396,1,396, + 1,396,1,396,1,396,1,396,1,396,1,396,1,396,1,396,1,396,1,397,1,397, + 1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,398,1,398,1,398,1,398, + 1,398,1,398,1,398,1,398,1,398,1,398,1,398,1,398,1,398,1,398,1,398, + 1,398,1,398,1,398,1,398,1,398,1,398,1,398,1,398,1,398,1,398,1,398, + 1,398,1,398,1,398,1,398,1,398,1,398,1,398,1,398,1,398,1,398,1,399, + 1,399,1,399,1,399,1,399,1,399,1,400,1,400,1,400,1,400,1,400,1,400, + 1,400,1,400,1,400,1,400,1,400,1,400,1,400,1,400,1,400,1,400,1,400, + 1,401,1,401,1,401,1,401,1,401,1,401,1,401,1,401,1,401,1,401,1,401, + 1,401,1,401,1,401,1,402,1,402,1,402,1,402,1,402,1,402,1,402,1,402, + 1,402,1,402,1,402,1,402,1,402,1,402,1,402,1,402,1,402,1,403,1,403, + 1,403,1,403,1,403,1,403,1,403,1,403,1,403,1,403,1,403,1,403,1,403, + 1,403,1,403,1,403,1,403,1,403,1,403,1,403,1,403,1,403,1,403,1,403, + 1,403,1,403,1,403,1,404,1,404,1,404,1,404,1,404,1,404,1,404,1,405, + 1,405,1,405,1,405,1,405,1,405,1,406,1,406,1,406,1,406,1,406,1,406, + 1,406,1,406,1,406,1,406,1,406,1,406,1,406,1,406,1,406,1,406,1,406, + 1,406,1,406,1,406,1,406,1,407,1,407,1,407,1,407,1,407,1,407,1,407, + 1,407,1,407,1,407,1,407,1,407,1,407,1,407,1,407,1,407,1,407,1,407, + 1,407,1,407,1,408,1,408,1,408,1,408,1,408,1,408,1,408,1,408,1,408, + 1,408,1,408,1,408,1,408,1,408,1,408,1,408,1,408,1,408,1,408,1,408, + 1,408,1,409,1,409,1,409,1,409,1,409,1,409,1,409,1,409,1,409,1,409, + 1,409,1,409,1,409,1,409,1,410,1,410,1,410,1,410,1,410,1,410,1,410, + 1,410,1,410,1,410,1,411,1,411,1,411,1,411,1,411,1,411,1,411,1,411, + 1,412,1,412,1,412,1,412,1,412,1,412,1,412,1,412,1,412,1,412,1,412, + 1,412,1,412,1,412,1,412,1,412,1,412,1,412,1,413,1,413,1,413,1,413, + 1,413,1,413,1,413,1,413,1,413,1,413,1,413,1,413,1,413,1,413,1,413, + 1,413,1,413,1,413,1,413,1,413,1,413,1,413,1,413,1,413,1,414,1,414, + 1,414,1,414,1,414,1,414,1,414,1,414,1,414,1,414,1,414,1,414,1,414, + 1,414,1,414,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415, + 1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415, + 1,415,1,416,1,416,1,416,1,416,1,416,1,416,1,416,1,416,1,416,1,417, + 1,417,1,417,1,417,1,417,1,417,1,417,1,417,1,417,1,417,1,417,1,417, + 1,418,1,418,1,418,1,418,1,418,1,418,1,418,1,418,1,418,1,418,1,418, + 1,418,1,418,1,418,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419, + 1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,420,1,420,1,420,1,420, + 1,420,1,420,1,420,1,420,1,420,1,420,1,420,1,420,1,420,1,420,1,420, + 1,420,1,420,1,420,1,420,1,421,1,421,1,421,1,421,1,421,1,421,1,421, + 1,421,1,422,1,422,1,422,1,422,1,422,1,423,1,423,1,423,1,423,1,423, + 1,423,1,423,1,423,1,423,1,423,1,423,1,423,1,424,1,424,1,424,1,424, + 1,424,1,425,1,425,1,425,1,425,1,425,1,425,1,425,1,425,1,425,1,425, + 1,425,1,425,1,425,1,425,1,425,1,425,1,425,1,426,1,426,1,426,1,426, + 1,426,1,427,1,427,1,427,1,427,1,427,1,428,1,428,1,428,1,428,1,428, + 1,428,1,428,1,428,1,429,1,429,1,429,1,429,1,429,1,429,1,430,1,430, + 1,430,1,430,1,431,1,431,1,431,1,431,1,431,1,431,1,431,1,431,1,431, + 1,431,1,432,1,432,1,432,1,433,1,433,1,434,1,434,1,435,1,435,1,436, + 1,436,1,437,1,437,1,438,1,438,1,439,1,439,1,439,1,439,1,440,1,440, + 1,440,1,440,1,440,1,441,1,441,1,441,1,441,1,441,1,441,1,441,1,441, + 1,442,1,442,1,442,1,442,1,442,1,443,1,443,1,443,1,443,1,443,1,443, + 1,443,1,443,1,444,1,444,1,444,1,445,1,445,1,445,1,445,1,446,1,446, + 1,446,1,446,1,446,1,446,1,447,1,447,1,447,1,447,1,447,1,448,1,448, + 1,448,1,448,1,449,1,449,1,449,1,449,1,449,1,449,1,449,1,450,1,450, + 1,450,1,451,1,451,1,451,1,452,1,452,1,452,1,453,1,453,1,453,3,453, + 4697,8,453,1,453,1,453,1,453,3,453,4702,8,453,3,453,4704,8,453,1, + 454,1,454,1,455,1,455,1,456,4,456,4711,8,456,11,456,12,456,4712, + 1,457,4,457,4716,8,457,11,457,12,457,4717,3,457,4720,8,457,1,457, + 1,457,4,457,4724,8,457,11,457,12,457,4725,1,458,4,458,4729,8,458, + 11,458,12,458,4730,3,458,4733,8,458,1,458,1,458,4,458,4737,8,458, + 11,458,12,458,4738,1,458,1,458,1,459,4,459,4744,8,459,11,459,12, + 459,4745,3,459,4748,8,459,1,459,1,459,4,459,4752,8,459,11,459,12, + 459,4753,1,459,1,459,1,460,1,460,4,460,4760,8,460,11,460,12,460, + 4761,4,460,4764,8,460,11,460,12,460,4765,1,461,4,461,4769,8,461, + 11,461,12,461,4770,1,461,5,461,4774,8,461,10,461,12,461,4777,9,461, + 1,461,1,461,1,462,3,462,4782,8,462,1,462,1,462,1,462,1,463,1,463, + 1,463,1,463,1,463,1,463,5,463,4793,8,463,10,463,12,463,4796,9,463, + 1,463,1,463,1,464,1,464,1,464,1,464,1,464,1,464,5,464,4806,8,464, + 10,464,12,464,4809,9,464,1,464,1,464,1,465,1,465,1,465,1,465,1,465, + 1,465,5,465,4819,8,465,10,465,12,465,4822,9,465,1,465,1,465,1,466, + 1,466,1,467,4,467,4829,8,467,11,467,12,467,4830,1,467,5,467,4834, + 8,467,10,467,12,467,4837,9,467,1,468,1,468,1,468,1,468,1,468,1,468, + 5,468,4845,8,468,10,468,12,468,4848,9,468,1,468,3,468,4851,8,468, + 1,468,3,468,4854,8,468,1,468,1,468,1,469,1,469,1,469,1,469,5,469, + 4862,8,469,10,469,12,469,4865,9,469,1,469,1,469,1,469,1,469,1,469, + 1,470,1,470,1,470,1,470,3,4770,4830,4863,0,471,1,1,3,2,5,3,7,4,9, + 5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16, + 33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27, + 55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38, + 77,39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49, + 99,50,101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117, + 59,119,60,121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68, + 137,69,139,70,141,71,143,72,145,73,147,74,149,75,151,76,153,77,155, + 78,157,79,159,80,161,81,163,82,165,83,167,84,169,85,171,86,173,87, + 175,88,177,89,179,90,181,91,183,92,185,93,187,94,189,95,191,96,193, + 97,195,98,197,99,199,100,201,101,203,102,205,103,207,104,209,105, + 211,106,213,107,215,108,217,109,219,110,221,111,223,112,225,113, + 227,114,229,115,231,116,233,117,235,118,237,119,239,120,241,121, + 243,122,245,123,247,124,249,125,251,126,253,127,255,128,257,129, + 259,130,261,131,263,132,265,133,267,134,269,135,271,136,273,137, + 275,138,277,139,279,140,281,141,283,142,285,143,287,144,289,145, + 291,146,293,147,295,148,297,149,299,150,301,151,303,152,305,153, + 307,154,309,155,311,156,313,157,315,158,317,159,319,160,321,161, + 323,162,325,163,327,164,329,165,331,166,333,167,335,168,337,169, + 339,170,341,171,343,172,345,173,347,174,349,175,351,176,353,177, + 355,178,357,179,359,180,361,181,363,182,365,183,367,184,369,185, + 371,186,373,187,375,188,377,189,379,190,381,191,383,192,385,193, + 387,194,389,195,391,196,393,197,395,198,397,199,399,200,401,201, + 403,202,405,203,407,204,409,205,411,206,413,207,415,208,417,209, + 419,210,421,211,423,212,425,213,427,214,429,215,431,216,433,217, + 435,218,437,219,439,220,441,221,443,222,445,223,447,224,449,225, + 451,226,453,227,455,228,457,229,459,230,461,231,463,232,465,233, + 467,234,469,235,471,236,473,237,475,238,477,239,479,240,481,241, + 483,242,485,243,487,244,489,245,491,246,493,247,495,248,497,249, + 499,250,501,251,503,252,505,253,507,254,509,255,511,256,513,257, + 515,258,517,259,519,260,521,261,523,262,525,263,527,264,529,265, + 531,266,533,267,535,268,537,269,539,270,541,271,543,272,545,273, + 547,274,549,275,551,276,553,277,555,278,557,279,559,280,561,281, + 563,282,565,283,567,284,569,285,571,286,573,287,575,288,577,289, + 579,290,581,291,583,292,585,293,587,294,589,295,591,296,593,297, + 595,298,597,299,599,300,601,301,603,302,605,303,607,304,609,305, + 611,306,613,307,615,308,617,309,619,310,621,311,623,312,625,313, + 627,314,629,315,631,316,633,317,635,318,637,319,639,320,641,321, + 643,322,645,323,647,324,649,325,651,326,653,327,655,328,657,329, + 659,330,661,331,663,332,665,333,667,334,669,335,671,336,673,337, + 675,338,677,339,679,340,681,341,683,342,685,343,687,344,689,345, + 691,346,693,347,695,348,697,349,699,350,701,351,703,352,705,353, + 707,354,709,355,711,356,713,357,715,358,717,359,719,360,721,361, + 723,362,725,363,727,364,729,365,731,366,733,367,735,368,737,369, + 739,370,741,371,743,372,745,373,747,374,749,375,751,376,753,377, + 755,378,757,379,759,380,761,381,763,382,765,383,767,384,769,385, + 771,386,773,387,775,388,777,389,779,390,781,391,783,392,785,393, + 787,394,789,395,791,396,793,397,795,398,797,399,799,400,801,401, + 803,402,805,403,807,404,809,405,811,406,813,407,815,408,817,409, + 819,410,821,411,823,412,825,413,827,414,829,415,831,416,833,417, + 835,418,837,419,839,420,841,421,843,422,845,423,847,424,849,425, + 851,426,853,427,855,428,857,429,859,430,861,431,863,432,865,433, + 867,434,869,435,871,436,873,437,875,438,877,439,879,440,881,441, + 883,442,885,443,887,444,889,445,891,446,893,447,895,448,897,449, + 899,450,901,451,903,452,905,453,907,454,909,455,911,456,913,457, + 915,458,917,459,919,460,921,0,923,0,925,461,927,462,929,463,931, + 464,933,0,935,0,937,465,939,466,941,467,1,0,37,3,0,9,10,13,13,32, + 32,2,0,83,83,115,115,2,0,69,69,101,101,2,0,65,65,97,97,2,0,82,82, + 114,114,2,0,67,67,99,99,2,0,72,72,104,104,2,0,68,68,100,100,2,0, + 73,73,105,105,2,0,66,66,98,98,2,0,79,79,111,111,2,0,87,87,119,119, + 2,0,88,88,120,120,2,0,80,80,112,112,2,0,76,76,108,108,2,0,78,78, + 110,110,2,0,70,70,102,102,2,0,77,77,109,109,2,0,84,84,116,116,2, + 0,86,86,118,118,2,0,85,85,117,117,2,0,71,71,103,103,2,0,75,75,107, + 107,2,0,81,81,113,113,2,0,89,89,121,121,2,0,74,74,106,106,2,0,90, + 90,122,122,1,0,48,57,1,0,45,46,2,0,42,42,48,57,3,0,42,42,65,90,97, + 122,6,0,42,42,45,45,48,57,65,90,95,95,97,122,2,0,34,34,92,92,2,0, + 39,39,92,92,2,0,92,92,96,96,4,0,42,42,64,90,95,95,97,122,2,0,10, + 10,13,13,4913,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0, + 9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0, + 19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0, + 29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0, + 39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0, + 49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0, + 59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0, + 69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0, + 79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0, + 89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0, + 99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0, + 0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117, + 1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0, + 0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1, + 0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0, + 145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0, + 0,0,0,155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163, + 1,0,0,0,0,165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0, + 0,173,1,0,0,0,0,175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1, + 0,0,0,0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0, + 191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0, + 0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209, + 1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0, + 0,219,1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1, + 0,0,0,0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0, + 237,1,0,0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0, + 0,0,0,247,1,0,0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255, + 1,0,0,0,0,257,1,0,0,0,0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0, + 0,265,1,0,0,0,0,267,1,0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1, + 0,0,0,0,275,1,0,0,0,0,277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0, + 283,1,0,0,0,0,285,1,0,0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0, + 0,0,0,293,1,0,0,0,0,295,1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301, + 1,0,0,0,0,303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0, + 0,311,1,0,0,0,0,313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1, + 0,0,0,0,321,1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0, + 329,1,0,0,0,0,331,1,0,0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0, + 0,0,0,339,1,0,0,0,0,341,1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347, + 1,0,0,0,0,349,1,0,0,0,0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0, + 0,357,1,0,0,0,0,359,1,0,0,0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1, + 0,0,0,0,367,1,0,0,0,0,369,1,0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0, + 375,1,0,0,0,0,377,1,0,0,0,0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0, + 0,0,0,385,1,0,0,0,0,387,1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0,0,393, + 1,0,0,0,0,395,1,0,0,0,0,397,1,0,0,0,0,399,1,0,0,0,0,401,1,0,0,0, + 0,403,1,0,0,0,0,405,1,0,0,0,0,407,1,0,0,0,0,409,1,0,0,0,0,411,1, + 0,0,0,0,413,1,0,0,0,0,415,1,0,0,0,0,417,1,0,0,0,0,419,1,0,0,0,0, + 421,1,0,0,0,0,423,1,0,0,0,0,425,1,0,0,0,0,427,1,0,0,0,0,429,1,0, + 0,0,0,431,1,0,0,0,0,433,1,0,0,0,0,435,1,0,0,0,0,437,1,0,0,0,0,439, + 1,0,0,0,0,441,1,0,0,0,0,443,1,0,0,0,0,445,1,0,0,0,0,447,1,0,0,0, + 0,449,1,0,0,0,0,451,1,0,0,0,0,453,1,0,0,0,0,455,1,0,0,0,0,457,1, + 0,0,0,0,459,1,0,0,0,0,461,1,0,0,0,0,463,1,0,0,0,0,465,1,0,0,0,0, + 467,1,0,0,0,0,469,1,0,0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475,1,0, + 0,0,0,477,1,0,0,0,0,479,1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0,485, + 1,0,0,0,0,487,1,0,0,0,0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0, + 0,495,1,0,0,0,0,497,1,0,0,0,0,499,1,0,0,0,0,501,1,0,0,0,0,503,1, + 0,0,0,0,505,1,0,0,0,0,507,1,0,0,0,0,509,1,0,0,0,0,511,1,0,0,0,0, + 513,1,0,0,0,0,515,1,0,0,0,0,517,1,0,0,0,0,519,1,0,0,0,0,521,1,0, + 0,0,0,523,1,0,0,0,0,525,1,0,0,0,0,527,1,0,0,0,0,529,1,0,0,0,0,531, + 1,0,0,0,0,533,1,0,0,0,0,535,1,0,0,0,0,537,1,0,0,0,0,539,1,0,0,0, + 0,541,1,0,0,0,0,543,1,0,0,0,0,545,1,0,0,0,0,547,1,0,0,0,0,549,1, + 0,0,0,0,551,1,0,0,0,0,553,1,0,0,0,0,555,1,0,0,0,0,557,1,0,0,0,0, + 559,1,0,0,0,0,561,1,0,0,0,0,563,1,0,0,0,0,565,1,0,0,0,0,567,1,0, + 0,0,0,569,1,0,0,0,0,571,1,0,0,0,0,573,1,0,0,0,0,575,1,0,0,0,0,577, + 1,0,0,0,0,579,1,0,0,0,0,581,1,0,0,0,0,583,1,0,0,0,0,585,1,0,0,0, + 0,587,1,0,0,0,0,589,1,0,0,0,0,591,1,0,0,0,0,593,1,0,0,0,0,595,1, + 0,0,0,0,597,1,0,0,0,0,599,1,0,0,0,0,601,1,0,0,0,0,603,1,0,0,0,0, + 605,1,0,0,0,0,607,1,0,0,0,0,609,1,0,0,0,0,611,1,0,0,0,0,613,1,0, + 0,0,0,615,1,0,0,0,0,617,1,0,0,0,0,619,1,0,0,0,0,621,1,0,0,0,0,623, + 1,0,0,0,0,625,1,0,0,0,0,627,1,0,0,0,0,629,1,0,0,0,0,631,1,0,0,0, + 0,633,1,0,0,0,0,635,1,0,0,0,0,637,1,0,0,0,0,639,1,0,0,0,0,641,1, + 0,0,0,0,643,1,0,0,0,0,645,1,0,0,0,0,647,1,0,0,0,0,649,1,0,0,0,0, + 651,1,0,0,0,0,653,1,0,0,0,0,655,1,0,0,0,0,657,1,0,0,0,0,659,1,0, + 0,0,0,661,1,0,0,0,0,663,1,0,0,0,0,665,1,0,0,0,0,667,1,0,0,0,0,669, + 1,0,0,0,0,671,1,0,0,0,0,673,1,0,0,0,0,675,1,0,0,0,0,677,1,0,0,0, + 0,679,1,0,0,0,0,681,1,0,0,0,0,683,1,0,0,0,0,685,1,0,0,0,0,687,1, + 0,0,0,0,689,1,0,0,0,0,691,1,0,0,0,0,693,1,0,0,0,0,695,1,0,0,0,0, + 697,1,0,0,0,0,699,1,0,0,0,0,701,1,0,0,0,0,703,1,0,0,0,0,705,1,0, + 0,0,0,707,1,0,0,0,0,709,1,0,0,0,0,711,1,0,0,0,0,713,1,0,0,0,0,715, + 1,0,0,0,0,717,1,0,0,0,0,719,1,0,0,0,0,721,1,0,0,0,0,723,1,0,0,0, + 0,725,1,0,0,0,0,727,1,0,0,0,0,729,1,0,0,0,0,731,1,0,0,0,0,733,1, + 0,0,0,0,735,1,0,0,0,0,737,1,0,0,0,0,739,1,0,0,0,0,741,1,0,0,0,0, + 743,1,0,0,0,0,745,1,0,0,0,0,747,1,0,0,0,0,749,1,0,0,0,0,751,1,0, + 0,0,0,753,1,0,0,0,0,755,1,0,0,0,0,757,1,0,0,0,0,759,1,0,0,0,0,761, + 1,0,0,0,0,763,1,0,0,0,0,765,1,0,0,0,0,767,1,0,0,0,0,769,1,0,0,0, + 0,771,1,0,0,0,0,773,1,0,0,0,0,775,1,0,0,0,0,777,1,0,0,0,0,779,1, + 0,0,0,0,781,1,0,0,0,0,783,1,0,0,0,0,785,1,0,0,0,0,787,1,0,0,0,0, + 789,1,0,0,0,0,791,1,0,0,0,0,793,1,0,0,0,0,795,1,0,0,0,0,797,1,0, + 0,0,0,799,1,0,0,0,0,801,1,0,0,0,0,803,1,0,0,0,0,805,1,0,0,0,0,807, + 1,0,0,0,0,809,1,0,0,0,0,811,1,0,0,0,0,813,1,0,0,0,0,815,1,0,0,0, + 0,817,1,0,0,0,0,819,1,0,0,0,0,821,1,0,0,0,0,823,1,0,0,0,0,825,1, + 0,0,0,0,827,1,0,0,0,0,829,1,0,0,0,0,831,1,0,0,0,0,833,1,0,0,0,0, + 835,1,0,0,0,0,837,1,0,0,0,0,839,1,0,0,0,0,841,1,0,0,0,0,843,1,0, + 0,0,0,845,1,0,0,0,0,847,1,0,0,0,0,849,1,0,0,0,0,851,1,0,0,0,0,853, + 1,0,0,0,0,855,1,0,0,0,0,857,1,0,0,0,0,859,1,0,0,0,0,861,1,0,0,0, + 0,863,1,0,0,0,0,865,1,0,0,0,0,867,1,0,0,0,0,869,1,0,0,0,0,871,1, + 0,0,0,0,873,1,0,0,0,0,875,1,0,0,0,0,877,1,0,0,0,0,879,1,0,0,0,0, + 881,1,0,0,0,0,883,1,0,0,0,0,885,1,0,0,0,0,887,1,0,0,0,0,889,1,0, + 0,0,0,891,1,0,0,0,0,893,1,0,0,0,0,895,1,0,0,0,0,897,1,0,0,0,0,899, + 1,0,0,0,0,901,1,0,0,0,0,903,1,0,0,0,0,905,1,0,0,0,0,907,1,0,0,0, + 0,909,1,0,0,0,0,911,1,0,0,0,0,913,1,0,0,0,0,915,1,0,0,0,0,917,1, + 0,0,0,0,919,1,0,0,0,0,925,1,0,0,0,0,927,1,0,0,0,0,929,1,0,0,0,0, + 931,1,0,0,0,0,937,1,0,0,0,0,939,1,0,0,0,0,941,1,0,0,0,1,944,1,0, + 0,0,3,950,1,0,0,0,5,957,1,0,0,0,7,966,1,0,0,0,9,971,1,0,0,0,11,979, + 1,0,0,0,13,984,1,0,0,0,15,990,1,0,0,0,17,997,1,0,0,0,19,1003,1,0, + 0,0,21,1009,1,0,0,0,23,1016,1,0,0,0,25,1022,1,0,0,0,27,1033,1,0, + 0,0,29,1039,1,0,0,0,31,1044,1,0,0,0,33,1049,1,0,0,0,35,1054,1,0, + 0,0,37,1058,1,0,0,0,39,1062,1,0,0,0,41,1067,1,0,0,0,43,1073,1,0, + 0,0,45,1079,1,0,0,0,47,1085,1,0,0,0,49,1089,1,0,0,0,51,1093,1,0, + 0,0,53,1099,1,0,0,0,55,1104,1,0,0,0,57,1112,1,0,0,0,59,1121,1,0, + 0,0,61,1131,1,0,0,0,63,1138,1,0,0,0,65,1141,1,0,0,0,67,1144,1,0, + 0,0,69,1153,1,0,0,0,71,1161,1,0,0,0,73,1171,1,0,0,0,75,1181,1,0, + 0,0,77,1191,1,0,0,0,79,1198,1,0,0,0,81,1213,1,0,0,0,83,1219,1,0, + 0,0,85,1244,1,0,0,0,87,1275,1,0,0,0,89,1282,1,0,0,0,91,1299,1,0, + 0,0,93,1309,1,0,0,0,95,1322,1,0,0,0,97,1335,1,0,0,0,99,1341,1,0, + 0,0,101,1353,1,0,0,0,103,1358,1,0,0,0,105,1361,1,0,0,0,107,1367, + 1,0,0,0,109,1373,1,0,0,0,111,1378,1,0,0,0,113,1383,1,0,0,0,115,1388, + 1,0,0,0,117,1394,1,0,0,0,119,1404,1,0,0,0,121,1415,1,0,0,0,123,1418, + 1,0,0,0,125,1421,1,0,0,0,127,1428,1,0,0,0,129,1434,1,0,0,0,131,1436, + 1,0,0,0,133,1440,1,0,0,0,135,1442,1,0,0,0,137,1447,1,0,0,0,139,1459, + 1,0,0,0,141,1465,1,0,0,0,143,1470,1,0,0,0,145,1477,1,0,0,0,147,1486, + 1,0,0,0,149,1491,1,0,0,0,151,1500,1,0,0,0,153,1509,1,0,0,0,155,1519, + 1,0,0,0,157,1524,1,0,0,0,159,1528,1,0,0,0,161,1532,1,0,0,0,163,1536, + 1,0,0,0,165,1540,1,0,0,0,167,1550,1,0,0,0,169,1562,1,0,0,0,171,1580, + 1,0,0,0,173,1591,1,0,0,0,175,1598,1,0,0,0,177,1604,1,0,0,0,179,1620, + 1,0,0,0,181,1630,1,0,0,0,183,1641,1,0,0,0,185,1655,1,0,0,0,187,1671, + 1,0,0,0,189,1684,1,0,0,0,191,1696,1,0,0,0,193,1709,1,0,0,0,195,1720, + 1,0,0,0,197,1733,1,0,0,0,199,1748,1,0,0,0,201,1759,1,0,0,0,203,1769, + 1,0,0,0,205,1788,1,0,0,0,207,1812,1,0,0,0,209,1819,1,0,0,0,211,1830, + 1,0,0,0,213,1840,1,0,0,0,215,1846,1,0,0,0,217,1855,1,0,0,0,219,1861, + 1,0,0,0,221,1868,1,0,0,0,223,1873,1,0,0,0,225,1878,1,0,0,0,227,1883, + 1,0,0,0,229,1886,1,0,0,0,231,1893,1,0,0,0,233,1899,1,0,0,0,235,1903, + 1,0,0,0,237,1906,1,0,0,0,239,1910,1,0,0,0,241,1914,1,0,0,0,243,1919, + 1,0,0,0,245,1925,1,0,0,0,247,1932,1,0,0,0,249,1944,1,0,0,0,251,1955, + 1,0,0,0,253,1964,1,0,0,0,255,1968,1,0,0,0,257,1977,1,0,0,0,259,1993, + 1,0,0,0,261,2004,1,0,0,0,263,2016,1,0,0,0,265,2027,1,0,0,0,267,2032, + 1,0,0,0,269,2049,1,0,0,0,271,2061,1,0,0,0,273,2073,1,0,0,0,275,2085, + 1,0,0,0,277,2094,1,0,0,0,279,2106,1,0,0,0,281,2118,1,0,0,0,283,2125, + 1,0,0,0,285,2144,1,0,0,0,287,2158,1,0,0,0,289,2173,1,0,0,0,291,2187, + 1,0,0,0,293,2193,1,0,0,0,295,2207,1,0,0,0,297,2215,1,0,0,0,299,2222, + 1,0,0,0,301,2241,1,0,0,0,303,2258,1,0,0,0,305,2263,1,0,0,0,307,2276, + 1,0,0,0,309,2281,1,0,0,0,311,2292,1,0,0,0,313,2302,1,0,0,0,315,2309, + 1,0,0,0,317,2321,1,0,0,0,319,2325,1,0,0,0,321,2333,1,0,0,0,323,2340, + 1,0,0,0,325,2345,1,0,0,0,327,2351,1,0,0,0,329,2358,1,0,0,0,331,2366, + 1,0,0,0,333,2369,1,0,0,0,335,2371,1,0,0,0,337,2373,1,0,0,0,339,2375, + 1,0,0,0,341,2377,1,0,0,0,343,2380,1,0,0,0,345,2382,1,0,0,0,347,2384, + 1,0,0,0,349,2387,1,0,0,0,351,2390,1,0,0,0,353,2393,1,0,0,0,355,2395, + 1,0,0,0,357,2397,1,0,0,0,359,2399,1,0,0,0,361,2401,1,0,0,0,363,2403, + 1,0,0,0,365,2405,1,0,0,0,367,2407,1,0,0,0,369,2409,1,0,0,0,371,2411, + 1,0,0,0,373,2413,1,0,0,0,375,2415,1,0,0,0,377,2417,1,0,0,0,379,2419, + 1,0,0,0,381,2421,1,0,0,0,383,2423,1,0,0,0,385,2425,1,0,0,0,387,2428, + 1,0,0,0,389,2430,1,0,0,0,391,2432,1,0,0,0,393,2434,1,0,0,0,395,2438, + 1,0,0,0,397,2444,1,0,0,0,399,2459,1,0,0,0,401,2481,1,0,0,0,403,2487, + 1,0,0,0,405,2499,1,0,0,0,407,2503,1,0,0,0,409,2508,1,0,0,0,411,2515, + 1,0,0,0,413,2519,1,0,0,0,415,2524,1,0,0,0,417,2530,1,0,0,0,419,2536, + 1,0,0,0,421,2543,1,0,0,0,423,2547,1,0,0,0,425,2553,1,0,0,0,427,2562, + 1,0,0,0,429,2570,1,0,0,0,431,2582,1,0,0,0,433,2593,1,0,0,0,435,2598, + 1,0,0,0,437,2609,1,0,0,0,439,2627,1,0,0,0,441,2636,1,0,0,0,443,2643, + 1,0,0,0,445,2648,1,0,0,0,447,2653,1,0,0,0,449,2660,1,0,0,0,451,2668, + 1,0,0,0,453,2677,1,0,0,0,455,2688,1,0,0,0,457,2699,1,0,0,0,459,2704, + 1,0,0,0,461,2714,1,0,0,0,463,2716,1,0,0,0,465,2719,1,0,0,0,467,2730, + 1,0,0,0,469,2735,1,0,0,0,471,2746,1,0,0,0,473,2759,1,0,0,0,475,2769, + 1,0,0,0,477,2775,1,0,0,0,479,2780,1,0,0,0,481,2784,1,0,0,0,483,2790, + 1,0,0,0,485,2794,1,0,0,0,487,2803,1,0,0,0,489,2812,1,0,0,0,491,2819, + 1,0,0,0,493,2823,1,0,0,0,495,2828,1,0,0,0,497,2833,1,0,0,0,499,2841, + 1,0,0,0,501,2846,1,0,0,0,503,2852,1,0,0,0,505,2854,1,0,0,0,507,2858, + 1,0,0,0,509,2864,1,0,0,0,511,2870,1,0,0,0,513,2873,1,0,0,0,515,2890, + 1,0,0,0,517,2913,1,0,0,0,519,2917,1,0,0,0,521,2925,1,0,0,0,523,2928, + 1,0,0,0,525,2937,1,0,0,0,527,2941,1,0,0,0,529,2947,1,0,0,0,531,2952, + 1,0,0,0,533,2958,1,0,0,0,535,2963,1,0,0,0,537,2968,1,0,0,0,539,2977, + 1,0,0,0,541,2982,1,0,0,0,543,2989,1,0,0,0,545,2994,1,0,0,0,547,2999, + 1,0,0,0,549,3004,1,0,0,0,551,3010,1,0,0,0,553,3014,1,0,0,0,555,3019, + 1,0,0,0,557,3023,1,0,0,0,559,3031,1,0,0,0,561,3039,1,0,0,0,563,3043, + 1,0,0,0,565,3048,1,0,0,0,567,3052,1,0,0,0,569,3056,1,0,0,0,571,3061, + 1,0,0,0,573,3066,1,0,0,0,575,3074,1,0,0,0,577,3082,1,0,0,0,579,3090, + 1,0,0,0,581,3103,1,0,0,0,583,3116,1,0,0,0,585,3134,1,0,0,0,587,3142, + 1,0,0,0,589,3147,1,0,0,0,591,3156,1,0,0,0,593,3165,1,0,0,0,595,3177, + 1,0,0,0,597,3186,1,0,0,0,599,3194,1,0,0,0,601,3205,1,0,0,0,603,3215, + 1,0,0,0,605,3225,1,0,0,0,607,3238,1,0,0,0,609,3250,1,0,0,0,611,3258, + 1,0,0,0,613,3268,1,0,0,0,615,3282,1,0,0,0,617,3293,1,0,0,0,619,3302, + 1,0,0,0,621,3312,1,0,0,0,623,3327,1,0,0,0,625,3336,1,0,0,0,627,3345, + 1,0,0,0,629,3355,1,0,0,0,631,3359,1,0,0,0,633,3370,1,0,0,0,635,3382, + 1,0,0,0,637,3394,1,0,0,0,639,3406,1,0,0,0,641,3414,1,0,0,0,643,3422, + 1,0,0,0,645,3430,1,0,0,0,647,3435,1,0,0,0,649,3444,1,0,0,0,651,3454, + 1,0,0,0,653,3467,1,0,0,0,655,3481,1,0,0,0,657,3493,1,0,0,0,659,3505, + 1,0,0,0,661,3513,1,0,0,0,663,3524,1,0,0,0,665,3539,1,0,0,0,667,3548, + 1,0,0,0,669,3557,1,0,0,0,671,3571,1,0,0,0,673,3579,1,0,0,0,675,3588, + 1,0,0,0,677,3597,1,0,0,0,679,3604,1,0,0,0,681,3614,1,0,0,0,683,3620, + 1,0,0,0,685,3626,1,0,0,0,687,3631,1,0,0,0,689,3634,1,0,0,0,691,3640, + 1,0,0,0,693,3646,1,0,0,0,695,3653,1,0,0,0,697,3663,1,0,0,0,699,3670, + 1,0,0,0,701,3677,1,0,0,0,703,3683,1,0,0,0,705,3688,1,0,0,0,707,3694, + 1,0,0,0,709,3701,1,0,0,0,711,3709,1,0,0,0,713,3717,1,0,0,0,715,3722, + 1,0,0,0,717,3727,1,0,0,0,719,3734,1,0,0,0,721,3744,1,0,0,0,723,3754, + 1,0,0,0,725,3762,1,0,0,0,727,3772,1,0,0,0,729,3780,1,0,0,0,731,3788, + 1,0,0,0,733,3794,1,0,0,0,735,3807,1,0,0,0,737,3814,1,0,0,0,739,3821, + 1,0,0,0,741,3828,1,0,0,0,743,3838,1,0,0,0,745,3845,1,0,0,0,747,3856, + 1,0,0,0,749,3861,1,0,0,0,751,3873,1,0,0,0,753,3884,1,0,0,0,755,3902, + 1,0,0,0,757,3915,1,0,0,0,759,3925,1,0,0,0,761,3934,1,0,0,0,763,3946, + 1,0,0,0,765,3958,1,0,0,0,767,3970,1,0,0,0,769,3977,1,0,0,0,771,3984, + 1,0,0,0,773,3987,1,0,0,0,775,3994,1,0,0,0,777,4003,1,0,0,0,779,4009, + 1,0,0,0,781,4022,1,0,0,0,783,4042,1,0,0,0,785,4060,1,0,0,0,787,4080, + 1,0,0,0,789,4092,1,0,0,0,791,4105,1,0,0,0,793,4128,1,0,0,0,795,4145, + 1,0,0,0,797,4154,1,0,0,0,799,4190,1,0,0,0,801,4196,1,0,0,0,803,4213, + 1,0,0,0,805,4227,1,0,0,0,807,4244,1,0,0,0,809,4271,1,0,0,0,811,4278, + 1,0,0,0,813,4284,1,0,0,0,815,4305,1,0,0,0,817,4325,1,0,0,0,819,4346, + 1,0,0,0,821,4360,1,0,0,0,823,4370,1,0,0,0,825,4378,1,0,0,0,827,4396, + 1,0,0,0,829,4420,1,0,0,0,831,4435,1,0,0,0,833,4456,1,0,0,0,835,4465, + 1,0,0,0,837,4477,1,0,0,0,839,4491,1,0,0,0,841,4506,1,0,0,0,843,4525, + 1,0,0,0,845,4533,1,0,0,0,847,4538,1,0,0,0,849,4550,1,0,0,0,851,4555, + 1,0,0,0,853,4572,1,0,0,0,855,4577,1,0,0,0,857,4582,1,0,0,0,859,4590, + 1,0,0,0,861,4596,1,0,0,0,863,4600,1,0,0,0,865,4610,1,0,0,0,867,4613, + 1,0,0,0,869,4615,1,0,0,0,871,4617,1,0,0,0,873,4619,1,0,0,0,875,4621, + 1,0,0,0,877,4623,1,0,0,0,879,4625,1,0,0,0,881,4629,1,0,0,0,883,4634, + 1,0,0,0,885,4642,1,0,0,0,887,4647,1,0,0,0,889,4655,1,0,0,0,891,4658, + 1,0,0,0,893,4662,1,0,0,0,895,4668,1,0,0,0,897,4673,1,0,0,0,899,4677, + 1,0,0,0,901,4684,1,0,0,0,903,4687,1,0,0,0,905,4690,1,0,0,0,907,4703, + 1,0,0,0,909,4705,1,0,0,0,911,4707,1,0,0,0,913,4710,1,0,0,0,915,4719, + 1,0,0,0,917,4732,1,0,0,0,919,4747,1,0,0,0,921,4763,1,0,0,0,923,4768, + 1,0,0,0,925,4781,1,0,0,0,927,4786,1,0,0,0,929,4799,1,0,0,0,931,4812, + 1,0,0,0,933,4825,1,0,0,0,935,4828,1,0,0,0,937,4838,1,0,0,0,939,4857, + 1,0,0,0,941,4871,1,0,0,0,943,945,7,0,0,0,944,943,1,0,0,0,945,946, + 1,0,0,0,946,944,1,0,0,0,946,947,1,0,0,0,947,948,1,0,0,0,948,949, + 6,0,0,0,949,2,1,0,0,0,950,951,7,1,0,0,951,952,7,2,0,0,952,953,7, + 3,0,0,953,954,7,4,0,0,954,955,7,5,0,0,955,956,7,6,0,0,956,4,1,0, + 0,0,957,958,7,7,0,0,958,959,7,2,0,0,959,960,7,1,0,0,960,961,7,5, + 0,0,961,962,7,4,0,0,962,963,7,8,0,0,963,964,7,9,0,0,964,965,7,2, + 0,0,965,6,1,0,0,0,966,967,7,1,0,0,967,968,7,6,0,0,968,969,7,10,0, + 0,969,970,7,11,0,0,970,8,1,0,0,0,971,972,7,2,0,0,972,973,7,12,0, + 0,973,974,7,13,0,0,974,975,7,14,0,0,975,976,7,3,0,0,976,977,7,8, + 0,0,977,978,7,15,0,0,978,10,1,0,0,0,979,980,7,16,0,0,980,981,7,4, + 0,0,981,982,7,10,0,0,982,983,7,17,0,0,983,12,1,0,0,0,984,985,7,11, + 0,0,985,986,7,6,0,0,986,987,7,2,0,0,987,988,7,4,0,0,988,989,7,2, + 0,0,989,14,1,0,0,0,990,991,7,16,0,0,991,992,7,8,0,0,992,993,7,2, + 0,0,993,994,7,14,0,0,994,995,7,7,0,0,995,996,7,1,0,0,996,16,1,0, + 0,0,997,998,7,16,0,0,998,999,7,8,0,0,999,1000,7,2,0,0,1000,1001, + 7,14,0,0,1001,1002,7,7,0,0,1002,18,1,0,0,0,1003,1004,7,18,0,0,1004, + 1005,7,3,0,0,1005,1006,7,9,0,0,1006,1007,7,14,0,0,1007,1008,7,2, + 0,0,1008,20,1,0,0,0,1009,1010,7,4,0,0,1010,1011,7,2,0,0,1011,1012, + 7,15,0,0,1012,1013,7,3,0,0,1013,1014,7,17,0,0,1014,1015,7,2,0,0, + 1015,22,1,0,0,0,1016,1017,7,1,0,0,1017,1018,7,18,0,0,1018,1019,7, + 3,0,0,1019,1020,7,18,0,0,1020,1021,7,1,0,0,1021,24,1,0,0,0,1022, + 1023,7,2,0,0,1023,1024,7,19,0,0,1024,1025,7,2,0,0,1025,1026,7,15, + 0,0,1026,1027,7,18,0,0,1027,1028,7,1,0,0,1028,1029,7,18,0,0,1029, + 1030,7,3,0,0,1030,1031,7,18,0,0,1031,1032,7,1,0,0,1032,26,1,0,0, + 0,1033,1034,7,7,0,0,1034,1035,7,2,0,0,1035,1036,7,7,0,0,1036,1037, + 7,20,0,0,1037,1038,7,13,0,0,1038,28,1,0,0,0,1039,1040,7,1,0,0,1040, + 1041,7,10,0,0,1041,1042,7,4,0,0,1042,1043,7,18,0,0,1043,30,1,0,0, + 0,1044,1045,7,2,0,0,1045,1046,7,19,0,0,1046,1047,7,3,0,0,1047,1048, + 7,14,0,0,1048,32,1,0,0,0,1049,1050,7,6,0,0,1050,1051,7,2,0,0,1051, + 1052,7,3,0,0,1052,1053,7,7,0,0,1053,34,1,0,0,0,1054,1055,7,9,0,0, + 1055,1056,7,8,0,0,1056,1057,7,15,0,0,1057,36,1,0,0,0,1058,1059,7, + 18,0,0,1059,1060,7,10,0,0,1060,1061,7,13,0,0,1061,38,1,0,0,0,1062, + 1063,7,4,0,0,1063,1064,7,3,0,0,1064,1065,7,4,0,0,1065,1066,7,2,0, + 0,1066,40,1,0,0,0,1067,1068,7,13,0,0,1068,1069,7,3,0,0,1069,1070, + 7,4,0,0,1070,1071,7,1,0,0,1071,1072,7,2,0,0,1072,42,1,0,0,0,1073, + 1074,7,1,0,0,1074,1075,7,13,0,0,1075,1076,7,3,0,0,1076,1077,7,18, + 0,0,1077,1078,7,6,0,0,1078,44,1,0,0,0,1079,1080,7,4,0,0,1080,1081, + 7,2,0,0,1081,1082,7,21,0,0,1082,1083,7,2,0,0,1083,1084,7,12,0,0, + 1084,46,1,0,0,0,1085,1086,7,4,0,0,1086,1087,7,2,0,0,1087,1088,7, + 12,0,0,1088,48,1,0,0,0,1089,1090,7,1,0,0,1090,1091,7,2,0,0,1091, + 1092,7,7,0,0,1092,50,1,0,0,0,1093,1094,7,13,0,0,1094,1095,7,20,0, + 0,1095,1096,7,15,0,0,1096,1097,7,5,0,0,1097,1098,7,18,0,0,1098,52, + 1,0,0,0,1099,1100,7,21,0,0,1100,1101,7,4,0,0,1101,1102,7,10,0,0, + 1102,1103,7,22,0,0,1103,54,1,0,0,0,1104,1105,7,13,0,0,1105,1106, + 7,3,0,0,1106,1107,7,18,0,0,1107,1108,7,18,0,0,1108,1109,7,2,0,0, + 1109,1110,7,4,0,0,1110,1111,7,15,0,0,1111,56,1,0,0,0,1112,1113,7, + 13,0,0,1113,1114,7,3,0,0,1114,1115,7,18,0,0,1115,1116,7,18,0,0,1116, + 1117,7,2,0,0,1117,1118,7,4,0,0,1118,1119,7,15,0,0,1119,1120,7,1, + 0,0,1120,58,1,0,0,0,1121,1122,7,15,0,0,1122,1123,7,2,0,0,1123,1124, + 7,11,0,0,1124,1125,5,95,0,0,1125,1126,7,16,0,0,1126,1127,7,8,0,0, + 1127,1128,7,2,0,0,1128,1129,7,14,0,0,1129,1130,7,7,0,0,1130,60,1, + 0,0,0,1131,1132,7,22,0,0,1132,1133,7,17,0,0,1133,1134,7,2,0,0,1134, + 1135,7,3,0,0,1135,1136,7,15,0,0,1136,1137,7,1,0,0,1137,62,1,0,0, + 0,1138,1139,7,3,0,0,1139,1140,7,7,0,0,1140,64,1,0,0,0,1141,1142, + 7,17,0,0,1142,1143,7,14,0,0,1143,66,1,0,0,0,1144,1145,7,16,0,0,1145, + 1146,7,8,0,0,1146,1147,7,14,0,0,1147,1148,7,14,0,0,1148,1149,7,15, + 0,0,1149,1150,7,20,0,0,1150,1151,7,14,0,0,1151,1152,7,14,0,0,1152, + 68,1,0,0,0,1153,1154,7,16,0,0,1154,1155,7,14,0,0,1155,1156,7,3,0, + 0,1156,1157,7,18,0,0,1157,1158,7,18,0,0,1158,1159,7,2,0,0,1159,1160, + 7,15,0,0,1160,70,1,0,0,0,1161,1162,7,18,0,0,1162,1163,7,4,0,0,1163, + 1164,7,2,0,0,1164,1165,7,15,0,0,1165,1166,7,7,0,0,1166,1167,7,14, + 0,0,1167,1168,7,8,0,0,1168,1169,7,15,0,0,1169,1170,7,2,0,0,1170, + 72,1,0,0,0,1171,1172,7,18,0,0,1172,1173,7,8,0,0,1173,1174,7,17,0, + 0,1174,1175,7,2,0,0,1175,1176,7,5,0,0,1176,1177,7,6,0,0,1177,1178, + 7,3,0,0,1178,1179,7,4,0,0,1179,1180,7,18,0,0,1180,74,1,0,0,0,1181, + 1182,7,3,0,0,1182,1183,7,13,0,0,1183,1184,7,13,0,0,1184,1185,7,2, + 0,0,1185,1186,7,15,0,0,1186,1187,7,7,0,0,1187,1188,7,5,0,0,1188, + 1189,7,10,0,0,1189,1190,7,14,0,0,1190,76,1,0,0,0,1191,1192,7,2,0, + 0,1192,1193,7,12,0,0,1193,1194,7,13,0,0,1194,1195,7,3,0,0,1195,1196, + 7,15,0,0,1196,1197,7,7,0,0,1197,78,1,0,0,0,1198,1199,7,1,0,0,1199, + 1200,7,8,0,0,1200,1201,7,17,0,0,1201,1202,7,13,0,0,1202,1203,7,14, + 0,0,1203,1204,7,2,0,0,1204,1205,5,95,0,0,1205,1206,7,13,0,0,1206, + 1207,7,3,0,0,1207,1208,7,18,0,0,1208,1209,7,18,0,0,1209,1210,7,2, + 0,0,1210,1211,7,4,0,0,1211,1212,7,15,0,0,1212,80,1,0,0,0,1213,1214, + 7,9,0,0,1214,1215,7,4,0,0,1215,1216,7,3,0,0,1216,1217,7,8,0,0,1217, + 1218,7,15,0,0,1218,82,1,0,0,0,1219,1220,7,19,0,0,1220,1221,7,3,0, + 0,1221,1222,7,4,0,0,1222,1223,7,8,0,0,1223,1224,7,3,0,0,1224,1225, + 7,9,0,0,1225,1226,7,14,0,0,1226,1227,7,2,0,0,1227,1228,5,95,0,0, + 1228,1229,7,5,0,0,1229,1230,7,10,0,0,1230,1231,7,20,0,0,1231,1232, + 7,15,0,0,1232,1233,7,18,0,0,1233,1234,5,95,0,0,1234,1235,7,18,0, + 0,1235,1236,7,6,0,0,1236,1237,7,4,0,0,1237,1238,7,2,0,0,1238,1239, + 7,1,0,0,1239,1240,7,6,0,0,1240,1241,7,10,0,0,1241,1242,7,14,0,0, + 1242,1243,7,7,0,0,1243,84,1,0,0,0,1244,1245,7,16,0,0,1245,1246,7, + 4,0,0,1246,1247,7,2,0,0,1247,1248,7,23,0,0,1248,1249,7,20,0,0,1249, + 1250,7,2,0,0,1250,1251,7,15,0,0,1251,1252,7,5,0,0,1252,1253,7,24, + 0,0,1253,1254,5,95,0,0,1254,1255,7,18,0,0,1255,1256,7,6,0,0,1256, + 1257,7,4,0,0,1257,1258,7,2,0,0,1258,1259,7,1,0,0,1259,1260,7,6,0, + 0,1260,1261,7,10,0,0,1261,1262,7,14,0,0,1262,1263,7,7,0,0,1263,1264, + 5,95,0,0,1264,1265,7,13,0,0,1265,1266,7,2,0,0,1266,1267,7,4,0,0, + 1267,1268,7,5,0,0,1268,1269,7,2,0,0,1269,1270,7,15,0,0,1270,1271, + 7,18,0,0,1271,1272,7,3,0,0,1272,1273,7,21,0,0,1273,1274,7,2,0,0, + 1274,86,1,0,0,0,1275,1276,7,17,0,0,1276,1277,7,2,0,0,1277,1278,7, + 18,0,0,1278,1279,7,6,0,0,1279,1280,7,10,0,0,1280,1281,7,7,0,0,1281, + 88,1,0,0,0,1282,1283,7,17,0,0,1283,1284,7,3,0,0,1284,1285,7,12,0, + 0,1285,1286,5,95,0,0,1286,1287,7,1,0,0,1287,1288,7,3,0,0,1288,1289, + 7,17,0,0,1289,1290,7,13,0,0,1290,1291,7,14,0,0,1291,1292,7,2,0,0, + 1292,1293,5,95,0,0,1293,1294,7,5,0,0,1294,1295,7,10,0,0,1295,1296, + 7,20,0,0,1296,1297,7,15,0,0,1297,1298,7,18,0,0,1298,90,1,0,0,0,1299, + 1300,7,17,0,0,1300,1301,7,3,0,0,1301,1302,7,12,0,0,1302,1303,5,95, + 0,0,1303,1304,7,17,0,0,1304,1305,7,3,0,0,1305,1306,7,18,0,0,1306, + 1307,7,5,0,0,1307,1308,7,6,0,0,1308,92,1,0,0,0,1309,1310,7,10,0, + 0,1310,1311,7,16,0,0,1311,1312,7,16,0,0,1312,1313,7,1,0,0,1313,1314, + 7,2,0,0,1314,1315,7,18,0,0,1315,1316,5,95,0,0,1316,1317,7,16,0,0, + 1317,1318,7,8,0,0,1318,1319,7,2,0,0,1319,1320,7,14,0,0,1320,1321, + 7,7,0,0,1321,94,1,0,0,0,1322,1323,7,9,0,0,1323,1324,7,20,0,0,1324, + 1325,7,16,0,0,1325,1326,7,16,0,0,1326,1327,7,2,0,0,1327,1328,7,4, + 0,0,1328,1329,5,95,0,0,1329,1330,7,14,0,0,1330,1331,7,8,0,0,1331, + 1332,7,17,0,0,1332,1333,7,8,0,0,1333,1334,7,18,0,0,1334,96,1,0,0, + 0,1335,1336,7,14,0,0,1336,1337,7,3,0,0,1337,1338,7,9,0,0,1338,1339, + 7,2,0,0,1339,1340,7,14,0,0,1340,98,1,0,0,0,1341,1342,7,3,0,0,1342, + 1343,7,21,0,0,1343,1344,7,21,0,0,1344,1345,7,4,0,0,1345,1346,7,2, + 0,0,1346,1347,7,21,0,0,1347,1348,7,3,0,0,1348,1349,7,18,0,0,1349, + 1350,7,8,0,0,1350,1351,7,10,0,0,1351,1352,7,15,0,0,1352,100,1,0, + 0,0,1353,1354,7,25,0,0,1354,1355,7,10,0,0,1355,1356,7,8,0,0,1356, + 1357,7,15,0,0,1357,102,1,0,0,0,1358,1359,7,10,0,0,1359,1360,7,15, + 0,0,1360,104,1,0,0,0,1361,1362,7,8,0,0,1362,1363,7,15,0,0,1363,1364, + 7,15,0,0,1364,1365,7,2,0,0,1365,1366,7,4,0,0,1366,106,1,0,0,0,1367, + 1368,7,10,0,0,1368,1369,7,20,0,0,1369,1370,7,18,0,0,1370,1371,7, + 2,0,0,1371,1372,7,4,0,0,1372,108,1,0,0,0,1373,1374,7,16,0,0,1374, + 1375,7,20,0,0,1375,1376,7,14,0,0,1376,1377,7,14,0,0,1377,110,1,0, + 0,0,1378,1379,7,1,0,0,1379,1380,7,2,0,0,1380,1381,7,17,0,0,1381, + 1382,7,8,0,0,1382,112,1,0,0,0,1383,1384,7,3,0,0,1384,1385,7,15,0, + 0,1385,1386,7,18,0,0,1386,1387,7,8,0,0,1387,114,1,0,0,0,1388,1389, 7,5,0,0,1389,1390,7,4,0,0,1390,1391,7,10,0,0,1391,1392,7,1,0,0,1392, - 1393,7,2,0,0,1393,1394,7,5,0,0,1394,1395,7,10,0,0,1395,1396,7,15, - 0,0,1396,1397,7,7,0,0,1397,170,1,0,0,0,1398,1399,7,13,0,0,1399,1400, - 7,8,0,0,1400,1401,7,15,0,0,1401,1402,7,17,0,0,1402,1403,7,16,0,0, - 1403,1404,7,2,0,0,1404,1405,5,95,0,0,1405,1406,7,10,0,0,1406,1407, - 7,12,0,0,1407,1408,5,95,0,0,1408,1409,7,7,0,0,1409,1410,7,3,0,0, - 1410,1411,7,23,0,0,1411,172,1,0,0,0,1412,1413,7,13,0,0,1413,1414, - 7,8,0,0,1414,1415,7,15,0,0,1415,1416,7,17,0,0,1416,1417,7,16,0,0, - 1417,1418,7,2,0,0,1418,1419,5,95,0,0,1419,1420,7,10,0,0,1420,1421, - 7,12,0,0,1421,1422,5,95,0,0,1422,1423,7,6,0,0,1423,1424,7,10,0,0, - 1424,1425,7,17,0,0,1425,1426,7,4,0,0,1426,174,1,0,0,0,1427,1428, - 7,13,0,0,1428,1429,7,8,0,0,1429,1430,7,15,0,0,1430,1431,7,17,0,0, - 1431,1432,7,16,0,0,1432,1433,7,2,0,0,1433,1434,5,95,0,0,1434,1435, - 7,1,0,0,1435,1436,7,2,0,0,1436,1437,7,5,0,0,1437,1438,7,10,0,0,1438, - 1439,7,15,0,0,1439,1440,7,7,0,0,1440,176,1,0,0,0,1441,1442,7,13, - 0,0,1442,1443,7,10,0,0,1443,1444,7,15,0,0,1444,1445,7,16,0,0,1445, - 1446,7,6,0,0,1446,178,1,0,0,0,1447,1448,7,13,0,0,1448,1449,7,10, - 0,0,1449,1450,7,15,0,0,1450,1451,7,16,0,0,1451,1452,7,6,0,0,1452, - 1453,5,95,0,0,1453,1454,7,10,0,0,1454,1455,7,12,0,0,1455,1456,5, - 95,0,0,1456,1457,7,23,0,0,1457,1458,7,2,0,0,1458,1459,7,3,0,0,1459, - 1460,7,4,0,0,1460,180,1,0,0,0,1461,1462,7,25,0,0,1462,1463,7,17, - 0,0,1463,1464,7,3,0,0,1464,1465,7,4,0,0,1465,1466,7,16,0,0,1466, - 1467,7,2,0,0,1467,1468,7,4,0,0,1468,182,1,0,0,0,1469,1470,7,1,0, - 0,1470,1471,7,2,0,0,1471,1472,7,5,0,0,1472,1473,7,10,0,0,1473,1474, - 7,15,0,0,1474,1475,7,7,0,0,1475,184,1,0,0,0,1476,1477,7,1,0,0,1477, - 1478,7,2,0,0,1478,1479,7,5,0,0,1479,1480,7,10,0,0,1480,1481,7,15, - 0,0,1481,1482,7,7,0,0,1482,1483,5,95,0,0,1483,1484,7,13,0,0,1484, - 1485,7,8,0,0,1485,1486,7,5,0,0,1486,1487,7,4,0,0,1487,1488,7,10, - 0,0,1488,1489,7,1,0,0,1489,1490,7,2,0,0,1490,1491,7,5,0,0,1491,1492, - 7,10,0,0,1492,1493,7,15,0,0,1493,1494,7,7,0,0,1494,186,1,0,0,0,1495, - 1496,7,1,0,0,1496,1497,7,2,0,0,1497,1498,7,5,0,0,1498,1499,7,10, - 0,0,1499,1500,7,15,0,0,1500,1501,7,7,0,0,1501,1502,5,95,0,0,1502, - 1503,7,10,0,0,1503,1504,7,12,0,0,1504,1505,5,95,0,0,1505,1506,7, - 13,0,0,1506,1507,7,8,0,0,1507,1508,7,15,0,0,1508,1509,7,17,0,0,1509, - 1510,7,16,0,0,1510,1511,7,2,0,0,1511,188,1,0,0,0,1512,1513,7,11, - 0,0,1513,1514,7,2,0,0,1514,1515,7,2,0,0,1515,1516,7,22,0,0,1516, - 190,1,0,0,0,1517,1518,7,11,0,0,1518,1519,7,2,0,0,1519,1520,7,2,0, - 0,1520,1521,7,22,0,0,1521,1522,5,95,0,0,1522,1523,7,10,0,0,1523, - 1524,7,12,0,0,1524,1525,5,95,0,0,1525,1526,7,23,0,0,1526,1527,7, - 2,0,0,1527,1528,7,3,0,0,1528,1529,7,4,0,0,1529,192,1,0,0,0,1530, - 1531,7,23,0,0,1531,1532,7,2,0,0,1532,1533,7,3,0,0,1533,1534,7,4, - 0,0,1534,194,1,0,0,0,1535,1536,7,23,0,0,1536,1537,7,2,0,0,1537,1538, - 7,3,0,0,1538,1539,7,4,0,0,1539,1540,5,95,0,0,1540,1541,7,13,0,0, - 1541,1542,7,10,0,0,1542,1543,7,15,0,0,1543,1544,7,16,0,0,1544,1545, - 7,6,0,0,1545,196,1,0,0,0,1546,1547,7,7,0,0,1547,1548,7,3,0,0,1548, - 1549,7,16,0,0,1549,1550,7,3,0,0,1550,1551,7,13,0,0,1551,1552,7,10, - 0,0,1552,1553,7,7,0,0,1553,1554,7,2,0,0,1554,1555,7,14,0,0,1555, - 198,1,0,0,0,1556,1557,7,14,0,0,1557,1558,7,10,0,0,1558,1559,7,10, - 0,0,1559,1560,7,22,0,0,1560,1561,7,17,0,0,1561,1562,7,18,0,0,1562, - 200,1,0,0,0,1563,1564,7,1,0,0,1564,1565,7,3,0,0,1565,1566,7,19,0, - 0,1566,1567,7,2,0,0,1567,1568,7,7,0,0,1568,1569,7,1,0,0,1569,1570, - 7,2,0,0,1570,1571,7,3,0,0,1571,1572,7,4,0,0,1572,1573,7,5,0,0,1573, - 1574,7,6,0,0,1574,202,1,0,0,0,1575,1576,7,8,0,0,1576,1577,7,15,0, - 0,1577,1578,7,16,0,0,1578,204,1,0,0,0,1579,1580,7,8,0,0,1580,1581, - 7,15,0,0,1581,1582,7,16,0,0,1582,1583,7,2,0,0,1583,1584,7,20,0,0, - 1584,1585,7,2,0,0,1585,1586,7,4,0,0,1586,206,1,0,0,0,1587,1588,7, - 7,0,0,1588,1589,7,10,0,0,1589,1590,7,17,0,0,1590,1591,7,9,0,0,1591, - 1592,7,14,0,0,1592,1593,7,2,0,0,1593,208,1,0,0,0,1594,1595,7,14, - 0,0,1595,1596,7,10,0,0,1596,1597,7,15,0,0,1597,1598,7,20,0,0,1598, - 210,1,0,0,0,1599,1600,7,12,0,0,1600,1601,7,14,0,0,1601,1602,7,10, - 0,0,1602,1603,7,3,0,0,1603,1604,7,16,0,0,1604,212,1,0,0,0,1605,1606, - 7,1,0,0,1606,1607,7,16,0,0,1607,1608,7,4,0,0,1608,1609,7,8,0,0,1609, - 1610,7,15,0,0,1610,1611,7,20,0,0,1611,214,1,0,0,0,1612,1613,7,9, - 0,0,1613,1614,7,10,0,0,1614,1615,7,10,0,0,1615,1616,7,14,0,0,1616, - 1617,7,2,0,0,1617,1618,7,3,0,0,1618,1619,7,15,0,0,1619,216,1,0,0, - 0,1620,1621,5,124,0,0,1621,218,1,0,0,0,1622,1623,5,44,0,0,1623,220, - 1,0,0,0,1624,1625,5,46,0,0,1625,222,1,0,0,0,1626,1627,5,61,0,0,1627, - 224,1,0,0,0,1628,1629,5,62,0,0,1629,226,1,0,0,0,1630,1631,5,60,0, - 0,1631,228,1,0,0,0,1632,1633,5,60,0,0,1633,1634,5,61,0,0,1634,230, - 1,0,0,0,1635,1636,5,62,0,0,1636,1637,5,61,0,0,1637,232,1,0,0,0,1638, - 1639,5,33,0,0,1639,1640,5,61,0,0,1640,234,1,0,0,0,1641,1642,5,43, - 0,0,1642,236,1,0,0,0,1643,1644,5,45,0,0,1644,238,1,0,0,0,1645,1646, - 5,42,0,0,1646,240,1,0,0,0,1647,1648,5,47,0,0,1648,242,1,0,0,0,1649, - 1650,5,37,0,0,1650,244,1,0,0,0,1651,1652,5,33,0,0,1652,246,1,0,0, - 0,1653,1654,5,58,0,0,1654,248,1,0,0,0,1655,1656,5,40,0,0,1656,250, - 1,0,0,0,1657,1658,5,41,0,0,1658,252,1,0,0,0,1659,1660,5,91,0,0,1660, - 254,1,0,0,0,1661,1662,5,93,0,0,1662,256,1,0,0,0,1663,1664,5,39,0, - 0,1664,258,1,0,0,0,1665,1666,5,34,0,0,1666,260,1,0,0,0,1667,1668, - 5,96,0,0,1668,262,1,0,0,0,1669,1670,5,126,0,0,1670,264,1,0,0,0,1671, - 1672,5,38,0,0,1672,266,1,0,0,0,1673,1674,5,94,0,0,1674,268,1,0,0, - 0,1675,1676,7,3,0,0,1676,1677,7,19,0,0,1677,1678,7,20,0,0,1678,270, - 1,0,0,0,1679,1680,7,5,0,0,1680,1681,7,10,0,0,1681,1682,7,17,0,0, - 1682,1683,7,15,0,0,1683,1684,7,16,0,0,1684,272,1,0,0,0,1685,1686, - 7,7,0,0,1686,1687,7,8,0,0,1687,1688,7,1,0,0,1688,1689,7,16,0,0,1689, - 1690,7,8,0,0,1690,1691,7,15,0,0,1691,1692,7,5,0,0,1692,1693,7,16, - 0,0,1693,1694,5,95,0,0,1694,1695,7,5,0,0,1695,1696,7,10,0,0,1696, - 1697,7,17,0,0,1697,1698,7,15,0,0,1698,1699,7,16,0,0,1699,274,1,0, - 0,0,1700,1701,7,2,0,0,1701,1702,7,1,0,0,1702,1703,7,16,0,0,1703, - 1704,7,7,0,0,1704,1705,7,5,0,0,1705,276,1,0,0,0,1706,1707,7,2,0, - 0,1707,1708,7,1,0,0,1708,1709,7,16,0,0,1709,1710,7,7,0,0,1710,1711, - 7,5,0,0,1711,1712,5,95,0,0,1712,1713,7,2,0,0,1713,1714,7,4,0,0,1714, - 1715,7,4,0,0,1715,1716,7,10,0,0,1716,1717,7,4,0,0,1717,278,1,0,0, - 0,1718,1719,7,13,0,0,1719,1720,7,3,0,0,1720,1721,7,21,0,0,1721,280, - 1,0,0,0,1722,1723,7,13,0,0,1723,1724,7,2,0,0,1724,1725,7,3,0,0,1725, - 1726,7,15,0,0,1726,282,1,0,0,0,1727,1728,7,13,0,0,1728,1729,7,2, - 0,0,1729,1730,7,7,0,0,1730,1731,7,8,0,0,1731,1732,7,3,0,0,1732,1733, - 7,15,0,0,1733,284,1,0,0,0,1734,1735,7,13,0,0,1735,1736,7,8,0,0,1736, - 1737,7,15,0,0,1737,286,1,0,0,0,1738,1739,7,13,0,0,1739,1740,7,10, - 0,0,1740,1741,7,7,0,0,1741,1742,7,2,0,0,1742,288,1,0,0,0,1743,1744, - 7,4,0,0,1744,1745,7,3,0,0,1745,1746,7,15,0,0,1746,1747,7,20,0,0, - 1747,1748,7,2,0,0,1748,290,1,0,0,0,1749,1750,7,1,0,0,1750,1751,7, - 16,0,0,1751,1752,7,7,0,0,1752,1753,7,2,0,0,1753,1754,7,19,0,0,1754, - 292,1,0,0,0,1755,1756,7,1,0,0,1756,1757,7,16,0,0,1757,1758,7,7,0, - 0,1758,1759,7,2,0,0,1759,1760,7,19,0,0,1760,1761,7,18,0,0,1761,294, - 1,0,0,0,1762,1763,7,1,0,0,1763,1764,7,17,0,0,1764,1765,7,13,0,0, - 1765,296,1,0,0,0,1766,1767,7,1,0,0,1767,1768,7,17,0,0,1768,1769, - 7,13,0,0,1769,1770,7,1,0,0,1770,1771,7,25,0,0,1771,298,1,0,0,0,1772, - 1773,7,19,0,0,1773,1774,7,3,0,0,1774,1775,7,4,0,0,1775,1776,5,95, - 0,0,1776,1777,7,1,0,0,1777,1778,7,3,0,0,1778,1779,7,13,0,0,1779, - 1780,7,18,0,0,1780,300,1,0,0,0,1781,1782,7,19,0,0,1782,1783,7,3, - 0,0,1783,1784,7,4,0,0,1784,1785,5,95,0,0,1785,1786,7,18,0,0,1786, - 1787,7,10,0,0,1787,1788,7,18,0,0,1788,302,1,0,0,0,1789,1790,7,1, - 0,0,1790,1791,7,16,0,0,1791,1792,7,7,0,0,1792,1793,7,7,0,0,1793, - 1794,7,2,0,0,1794,1795,7,19,0,0,1795,1796,5,95,0,0,1796,1797,7,1, - 0,0,1797,1798,7,3,0,0,1798,1799,7,13,0,0,1799,1800,7,18,0,0,1800, - 304,1,0,0,0,1801,1802,7,1,0,0,1802,1803,7,16,0,0,1803,1804,7,7,0, - 0,1804,1805,7,7,0,0,1805,1806,7,2,0,0,1806,1807,7,19,0,0,1807,1808, - 5,95,0,0,1808,1809,7,18,0,0,1809,1810,7,10,0,0,1810,1811,7,18,0, - 0,1811,306,1,0,0,0,1812,1813,7,18,0,0,1813,1814,7,2,0,0,1814,1815, - 7,4,0,0,1815,1816,7,5,0,0,1816,1817,7,2,0,0,1817,1818,7,15,0,0,1818, - 1819,7,16,0,0,1819,1820,7,8,0,0,1820,1821,7,14,0,0,1821,1822,7,2, - 0,0,1822,308,1,0,0,0,1823,1824,7,16,0,0,1824,1825,7,3,0,0,1825,1826, - 7,22,0,0,1826,1827,7,2,0,0,1827,310,1,0,0,0,1828,1829,7,12,0,0,1829, - 1830,7,8,0,0,1830,1831,7,4,0,0,1831,1832,7,1,0,0,1832,1833,7,16, - 0,0,1833,312,1,0,0,0,1834,1835,7,14,0,0,1835,1836,7,3,0,0,1836,1837, - 7,1,0,0,1837,1838,7,16,0,0,1838,314,1,0,0,0,1839,1840,7,14,0,0,1840, - 1841,7,8,0,0,1841,1842,7,1,0,0,1842,1843,7,16,0,0,1843,316,1,0,0, - 0,1844,1845,7,19,0,0,1845,1846,7,3,0,0,1846,1847,7,14,0,0,1847,1848, - 7,17,0,0,1848,1849,7,2,0,0,1849,1850,7,1,0,0,1850,318,1,0,0,0,1851, - 1852,7,2,0,0,1852,1853,7,3,0,0,1853,1854,7,4,0,0,1854,1855,7,14, - 0,0,1855,1856,7,8,0,0,1856,1857,7,2,0,0,1857,1858,7,1,0,0,1858,1859, - 7,16,0,0,1859,320,1,0,0,0,1860,1861,7,2,0,0,1861,1862,7,3,0,0,1862, - 1863,7,4,0,0,1863,1864,7,14,0,0,1864,1865,7,8,0,0,1865,1866,7,2, - 0,0,1866,1867,7,1,0,0,1867,1868,7,16,0,0,1868,1869,5,95,0,0,1869, - 1870,7,16,0,0,1870,1871,7,8,0,0,1871,1872,7,13,0,0,1872,1873,7,2, - 0,0,1873,322,1,0,0,0,1874,1875,7,14,0,0,1875,1876,7,3,0,0,1876,1877, - 7,16,0,0,1877,1878,7,2,0,0,1878,1879,7,1,0,0,1879,1880,7,16,0,0, - 1880,324,1,0,0,0,1881,1882,7,14,0,0,1882,1883,7,3,0,0,1883,1884, - 7,16,0,0,1884,1885,7,2,0,0,1885,1886,7,1,0,0,1886,1887,7,16,0,0, - 1887,1888,5,95,0,0,1888,1889,7,16,0,0,1889,1890,7,8,0,0,1890,1891, - 7,13,0,0,1891,1892,7,2,0,0,1892,326,1,0,0,0,1893,1894,7,18,0,0,1894, - 1895,7,2,0,0,1895,1896,7,4,0,0,1896,1897,5,95,0,0,1897,1898,7,7, - 0,0,1898,1899,7,3,0,0,1899,1900,7,23,0,0,1900,328,1,0,0,0,1901,1902, - 7,18,0,0,1902,1903,7,2,0,0,1903,1904,7,4,0,0,1904,1905,5,95,0,0, - 1905,1906,7,6,0,0,1906,1907,7,10,0,0,1907,1908,7,17,0,0,1908,1909, - 7,4,0,0,1909,330,1,0,0,0,1910,1911,7,18,0,0,1911,1912,7,2,0,0,1912, - 1913,7,4,0,0,1913,1914,5,95,0,0,1914,1915,7,13,0,0,1915,1916,7,8, - 0,0,1916,1917,7,15,0,0,1917,1918,7,17,0,0,1918,1919,7,16,0,0,1919, - 1920,7,2,0,0,1920,332,1,0,0,0,1921,1922,7,18,0,0,1922,1923,7,2,0, - 0,1923,1924,7,4,0,0,1924,1925,5,95,0,0,1925,1926,7,1,0,0,1926,1927, - 7,2,0,0,1927,1928,7,5,0,0,1928,1929,7,10,0,0,1929,1930,7,15,0,0, - 1930,1931,7,7,0,0,1931,334,1,0,0,0,1932,1933,7,4,0,0,1933,1934,7, - 3,0,0,1934,1935,7,16,0,0,1935,1936,7,2,0,0,1936,336,1,0,0,0,1937, - 1938,7,1,0,0,1938,1939,7,18,0,0,1939,1940,7,3,0,0,1940,1941,7,4, - 0,0,1941,1942,7,22,0,0,1942,1943,7,14,0,0,1943,1944,7,8,0,0,1944, - 1945,7,15,0,0,1945,1946,7,2,0,0,1946,338,1,0,0,0,1947,1948,7,5,0, - 0,1948,340,1,0,0,0,1949,1950,7,7,0,0,1950,1951,7,5,0,0,1951,342, - 1,0,0,0,1952,1953,7,3,0,0,1953,1954,7,9,0,0,1954,1955,7,1,0,0,1955, - 344,1,0,0,0,1956,1957,7,5,0,0,1957,1958,7,9,0,0,1958,1959,7,4,0, - 0,1959,1960,7,16,0,0,1960,346,1,0,0,0,1961,1962,7,5,0,0,1962,1963, - 7,2,0,0,1963,1964,7,8,0,0,1964,1965,7,14,0,0,1965,348,1,0,0,0,1966, - 1967,7,5,0,0,1967,1968,7,2,0,0,1968,1969,7,8,0,0,1969,1970,7,14, - 0,0,1970,1971,7,8,0,0,1971,1972,7,15,0,0,1972,1973,7,20,0,0,1973, - 350,1,0,0,0,1974,1975,7,5,0,0,1975,1976,7,10,0,0,1976,1977,7,15, - 0,0,1977,1978,7,19,0,0,1978,352,1,0,0,0,1979,1980,7,5,0,0,1980,1981, - 7,4,0,0,1981,1982,7,5,0,0,1982,1983,5,51,0,0,1983,1984,5,50,0,0, - 1984,354,1,0,0,0,1985,1986,7,2,0,0,1986,356,1,0,0,0,1987,1988,7, - 2,0,0,1988,1989,7,21,0,0,1989,1990,7,18,0,0,1990,358,1,0,0,0,1991, - 1992,7,12,0,0,1992,1993,7,14,0,0,1993,1994,7,10,0,0,1994,1995,7, - 10,0,0,1995,1996,7,4,0,0,1996,360,1,0,0,0,1997,1998,7,14,0,0,1998, - 1999,7,15,0,0,1999,362,1,0,0,0,2000,2001,7,14,0,0,2001,2002,7,10, - 0,0,2002,2003,7,20,0,0,2003,364,1,0,0,0,2004,2005,7,14,0,0,2005, - 2006,7,10,0,0,2006,2007,7,20,0,0,2007,2008,5,49,0,0,2008,2009,5, - 48,0,0,2009,366,1,0,0,0,2010,2011,7,14,0,0,2011,2012,7,10,0,0,2012, - 2013,7,20,0,0,2013,2014,5,50,0,0,2014,368,1,0,0,0,2015,2016,7,13, - 0,0,2016,2017,7,10,0,0,2017,2018,7,7,0,0,2018,370,1,0,0,0,2019,2020, - 7,18,0,0,2020,2021,7,8,0,0,2021,372,1,0,0,0,2022,2023,7,18,0,0,2023, - 2024,7,10,0,0,2024,2025,7,1,0,0,2025,2026,7,8,0,0,2026,2027,7,16, - 0,0,2027,2028,7,8,0,0,2028,2029,7,10,0,0,2029,2030,7,15,0,0,2030, - 374,1,0,0,0,2031,2032,7,18,0,0,2032,2033,7,10,0,0,2033,2034,7,11, - 0,0,2034,376,1,0,0,0,2035,2036,7,18,0,0,2036,2037,7,10,0,0,2037, - 2038,7,11,0,0,2038,2039,7,2,0,0,2039,2040,7,4,0,0,2040,378,1,0,0, - 0,2041,2042,7,4,0,0,2042,2043,7,3,0,0,2043,2044,7,15,0,0,2044,2045, - 7,7,0,0,2045,380,1,0,0,0,2046,2047,7,4,0,0,2047,2048,7,10,0,0,2048, - 2049,7,17,0,0,2049,2050,7,15,0,0,2050,2051,7,7,0,0,2051,382,1,0, - 0,0,2052,2053,7,1,0,0,2053,2054,7,8,0,0,2054,2055,7,20,0,0,2055, - 2056,7,15,0,0,2056,384,1,0,0,0,2057,2058,7,1,0,0,2058,2059,7,25, - 0,0,2059,2060,7,4,0,0,2060,2061,7,16,0,0,2061,386,1,0,0,0,2062,2063, - 7,16,0,0,2063,2064,7,4,0,0,2064,2065,7,17,0,0,2065,2066,7,15,0,0, - 2066,2067,7,5,0,0,2067,2068,7,3,0,0,2068,2069,7,16,0,0,2069,2070, - 7,2,0,0,2070,388,1,0,0,0,2071,2072,7,3,0,0,2072,2073,7,5,0,0,2073, - 2074,7,10,0,0,2074,2075,7,1,0,0,2075,390,1,0,0,0,2076,2077,7,3,0, - 0,2077,2078,7,1,0,0,2078,2079,7,8,0,0,2079,2080,7,15,0,0,2080,392, - 1,0,0,0,2081,2082,7,3,0,0,2082,2083,7,16,0,0,2083,2084,7,3,0,0,2084, - 2085,7,15,0,0,2085,394,1,0,0,0,2086,2087,7,3,0,0,2087,2088,7,16, - 0,0,2088,2089,7,3,0,0,2089,2090,7,15,0,0,2090,2091,5,50,0,0,2091, - 396,1,0,0,0,2092,2093,7,5,0,0,2093,2094,7,10,0,0,2094,2095,7,1,0, - 0,2095,398,1,0,0,0,2096,2097,7,5,0,0,2097,2098,7,10,0,0,2098,2099, - 7,16,0,0,2099,400,1,0,0,0,2100,2101,7,7,0,0,2101,2102,7,2,0,0,2102, - 2103,7,20,0,0,2103,2104,7,4,0,0,2104,2105,7,2,0,0,2105,2106,7,2, - 0,0,2106,2107,7,1,0,0,2107,402,1,0,0,0,2108,2109,7,4,0,0,2109,2110, - 7,3,0,0,2110,2111,7,7,0,0,2111,2112,7,8,0,0,2112,2113,7,3,0,0,2113, - 2114,7,15,0,0,2114,2115,7,1,0,0,2115,404,1,0,0,0,2116,2117,7,1,0, - 0,2117,2118,7,8,0,0,2118,2119,7,15,0,0,2119,406,1,0,0,0,2120,2121, - 7,16,0,0,2121,2122,7,3,0,0,2122,2123,7,15,0,0,2123,408,1,0,0,0,2124, - 2125,7,3,0,0,2125,2126,7,7,0,0,2126,2127,7,7,0,0,2127,2128,7,7,0, - 0,2128,2129,7,3,0,0,2129,2130,7,16,0,0,2130,2131,7,2,0,0,2131,410, - 1,0,0,0,2132,2133,7,3,0,0,2133,2134,7,7,0,0,2134,2135,7,7,0,0,2135, - 2136,7,16,0,0,2136,2137,7,8,0,0,2137,2138,7,13,0,0,2138,2139,7,2, - 0,0,2139,412,1,0,0,0,2140,2141,7,5,0,0,2141,2142,7,17,0,0,2142,2143, - 7,4,0,0,2143,2144,7,7,0,0,2144,2145,7,3,0,0,2145,2146,7,16,0,0,2146, - 2147,7,2,0,0,2147,414,1,0,0,0,2148,2149,7,5,0,0,2149,2150,7,17,0, - 0,2150,2151,7,4,0,0,2151,2152,7,4,0,0,2152,2153,7,2,0,0,2153,2154, - 7,15,0,0,2154,2155,7,16,0,0,2155,2156,5,95,0,0,2156,2157,7,7,0,0, - 2157,2158,7,3,0,0,2158,2159,7,16,0,0,2159,2160,7,2,0,0,2160,416, - 1,0,0,0,2161,2162,7,5,0,0,2162,2163,7,17,0,0,2163,2164,7,4,0,0,2164, - 2165,7,4,0,0,2165,2166,7,2,0,0,2166,2167,7,15,0,0,2167,2168,7,16, - 0,0,2168,2169,5,95,0,0,2169,2170,7,16,0,0,2170,2171,7,8,0,0,2171, - 2172,7,13,0,0,2172,2173,7,2,0,0,2173,418,1,0,0,0,2174,2175,7,5,0, - 0,2175,2176,7,17,0,0,2176,2177,7,4,0,0,2177,2178,7,4,0,0,2178,2179, - 7,2,0,0,2179,2180,7,15,0,0,2180,2181,7,16,0,0,2181,2182,5,95,0,0, - 2182,2183,7,16,0,0,2183,2184,7,8,0,0,2184,2185,7,13,0,0,2185,2186, - 7,2,0,0,2186,2187,7,1,0,0,2187,2188,7,16,0,0,2188,2189,7,3,0,0,2189, - 2190,7,13,0,0,2190,2191,7,18,0,0,2191,420,1,0,0,0,2192,2193,7,5, - 0,0,2193,2194,7,17,0,0,2194,2195,7,4,0,0,2195,2196,7,16,0,0,2196, - 2197,7,8,0,0,2197,2198,7,13,0,0,2198,2199,7,2,0,0,2199,422,1,0,0, - 0,2200,2201,7,7,0,0,2201,2202,7,3,0,0,2202,2203,7,16,0,0,2203,2204, - 7,2,0,0,2204,424,1,0,0,0,2205,2206,7,7,0,0,2206,2207,7,3,0,0,2207, - 2208,7,16,0,0,2208,2209,7,2,0,0,2209,2210,7,7,0,0,2210,2211,7,8, - 0,0,2211,2212,7,12,0,0,2212,2213,7,12,0,0,2213,426,1,0,0,0,2214, - 2215,7,7,0,0,2215,2216,7,3,0,0,2216,2217,7,16,0,0,2217,2218,7,2, - 0,0,2218,2219,5,95,0,0,2219,2220,7,3,0,0,2220,2221,7,7,0,0,2221, - 2222,7,7,0,0,2222,428,1,0,0,0,2223,2224,7,7,0,0,2224,2225,7,3,0, - 0,2225,2226,7,16,0,0,2226,2227,7,2,0,0,2227,2228,5,95,0,0,2228,2229, - 7,12,0,0,2229,2230,7,10,0,0,2230,2231,7,4,0,0,2231,2232,7,13,0,0, - 2232,2233,7,3,0,0,2233,2234,7,16,0,0,2234,430,1,0,0,0,2235,2236, - 7,7,0,0,2236,2237,7,3,0,0,2237,2238,7,16,0,0,2238,2239,7,2,0,0,2239, - 2240,5,95,0,0,2240,2241,7,1,0,0,2241,2242,7,17,0,0,2242,2243,7,9, - 0,0,2243,432,1,0,0,0,2244,2245,7,7,0,0,2245,2246,7,3,0,0,2246,2247, - 7,23,0,0,2247,2248,7,15,0,0,2248,2249,7,3,0,0,2249,2250,7,13,0,0, - 2250,2251,7,2,0,0,2251,434,1,0,0,0,2252,2253,7,7,0,0,2253,2254,7, - 3,0,0,2254,2255,7,23,0,0,2255,2256,7,10,0,0,2256,2257,7,12,0,0,2257, - 2258,7,13,0,0,2258,2259,7,10,0,0,2259,2260,7,15,0,0,2260,2261,7, - 16,0,0,2261,2262,7,6,0,0,2262,436,1,0,0,0,2263,2264,7,7,0,0,2264, - 2265,7,3,0,0,2265,2266,7,23,0,0,2266,2267,7,10,0,0,2267,2268,7,12, - 0,0,2268,2269,7,11,0,0,2269,2270,7,2,0,0,2270,2271,7,2,0,0,2271, - 2272,7,22,0,0,2272,438,1,0,0,0,2273,2274,7,7,0,0,2274,2275,7,3,0, - 0,2275,2276,7,23,0,0,2276,2277,7,10,0,0,2277,2278,7,12,0,0,2278, - 2279,7,23,0,0,2279,2280,7,2,0,0,2280,2281,7,3,0,0,2281,2282,7,4, - 0,0,2282,440,1,0,0,0,2283,2284,7,7,0,0,2284,2285,7,3,0,0,2285,2286, - 7,23,0,0,2286,2287,5,95,0,0,2287,2288,7,10,0,0,2288,2289,7,12,0, - 0,2289,2290,5,95,0,0,2290,2291,7,13,0,0,2291,2292,7,10,0,0,2292, - 2293,7,15,0,0,2293,2294,7,16,0,0,2294,2295,7,6,0,0,2295,442,1,0, - 0,0,2296,2297,7,7,0,0,2297,2298,7,3,0,0,2298,2299,7,23,0,0,2299, - 2300,5,95,0,0,2300,2301,7,10,0,0,2301,2302,7,12,0,0,2302,2303,5, - 95,0,0,2303,2304,7,11,0,0,2304,2305,7,2,0,0,2305,2306,7,2,0,0,2306, - 2307,7,22,0,0,2307,444,1,0,0,0,2308,2309,7,2,0,0,2309,2310,7,21, - 0,0,2310,2311,7,16,0,0,2311,2312,7,4,0,0,2312,2313,7,3,0,0,2313, - 2314,7,5,0,0,2314,2315,7,16,0,0,2315,446,1,0,0,0,2316,2317,7,12, - 0,0,2317,2318,7,4,0,0,2318,2319,7,10,0,0,2319,2320,7,13,0,0,2320, - 2321,5,95,0,0,2321,2322,7,7,0,0,2322,2323,7,3,0,0,2323,2324,7,23, - 0,0,2324,2325,7,1,0,0,2325,448,1,0,0,0,2326,2327,7,12,0,0,2327,2328, - 7,4,0,0,2328,2329,7,10,0,0,2329,2330,7,13,0,0,2330,2331,5,95,0,0, - 2331,2332,7,17,0,0,2332,2333,7,15,0,0,2333,2334,7,8,0,0,2334,2335, - 7,21,0,0,2335,2336,7,16,0,0,2336,2337,7,8,0,0,2337,2338,7,13,0,0, - 2338,2339,7,2,0,0,2339,450,1,0,0,0,2340,2341,7,20,0,0,2341,2342, - 7,2,0,0,2342,2343,7,16,0,0,2343,2344,5,95,0,0,2344,2345,7,12,0,0, - 2345,2346,7,10,0,0,2346,2347,7,4,0,0,2347,2348,7,13,0,0,2348,2349, - 7,3,0,0,2349,2350,7,16,0,0,2350,452,1,0,0,0,2351,2352,7,14,0,0,2352, - 2353,7,3,0,0,2353,2354,7,1,0,0,2354,2355,7,16,0,0,2355,2356,5,95, - 0,0,2356,2357,7,7,0,0,2357,2358,7,3,0,0,2358,2359,7,23,0,0,2359, - 454,1,0,0,0,2360,2361,7,14,0,0,2361,2362,7,10,0,0,2362,2363,7,5, - 0,0,2363,2364,7,3,0,0,2364,2365,7,14,0,0,2365,2366,7,16,0,0,2366, - 2367,7,8,0,0,2367,2368,7,13,0,0,2368,2369,7,2,0,0,2369,456,1,0,0, - 0,2370,2371,7,14,0,0,2371,2372,7,10,0,0,2372,2373,7,5,0,0,2373,2374, - 7,3,0,0,2374,2375,7,14,0,0,2375,2376,7,16,0,0,2376,2377,7,8,0,0, - 2377,2378,7,13,0,0,2378,2379,7,2,0,0,2379,2380,7,1,0,0,2380,2381, - 7,16,0,0,2381,2382,7,3,0,0,2382,2383,7,13,0,0,2383,2384,7,18,0,0, - 2384,458,1,0,0,0,2385,2386,7,13,0,0,2386,2387,7,3,0,0,2387,2388, - 7,22,0,0,2388,2389,7,2,0,0,2389,2390,7,7,0,0,2390,2391,7,3,0,0,2391, - 2392,7,16,0,0,2392,2393,7,2,0,0,2393,460,1,0,0,0,2394,2395,7,13, - 0,0,2395,2396,7,3,0,0,2396,2397,7,22,0,0,2397,2398,7,2,0,0,2398, - 2399,7,16,0,0,2399,2400,7,8,0,0,2400,2401,7,13,0,0,2401,2402,7,2, - 0,0,2402,462,1,0,0,0,2403,2404,7,13,0,0,2404,2405,7,10,0,0,2405, - 2406,7,15,0,0,2406,2407,7,16,0,0,2407,2408,7,6,0,0,2408,2409,7,15, - 0,0,2409,2410,7,3,0,0,2410,2411,7,13,0,0,2411,2412,7,2,0,0,2412, - 464,1,0,0,0,2413,2414,7,15,0,0,2414,2415,7,10,0,0,2415,2416,7,11, - 0,0,2416,466,1,0,0,0,2417,2418,7,18,0,0,2418,2419,7,2,0,0,2419,2420, - 7,4,0,0,2420,2421,7,8,0,0,2421,2422,7,10,0,0,2422,2423,7,7,0,0,2423, - 2424,5,95,0,0,2424,2425,7,3,0,0,2425,2426,7,7,0,0,2426,2427,7,7, - 0,0,2427,468,1,0,0,0,2428,2429,7,18,0,0,2429,2430,7,2,0,0,2430,2431, - 7,4,0,0,2431,2432,7,8,0,0,2432,2433,7,10,0,0,2433,2434,7,7,0,0,2434, - 2435,5,95,0,0,2435,2436,7,7,0,0,2436,2437,7,8,0,0,2437,2438,7,12, - 0,0,2438,2439,7,12,0,0,2439,470,1,0,0,0,2440,2441,7,1,0,0,2441,2442, - 7,2,0,0,2442,2443,7,5,0,0,2443,2444,5,95,0,0,2444,2445,7,16,0,0, - 2445,2446,7,10,0,0,2446,2447,5,95,0,0,2447,2448,7,16,0,0,2448,2449, - 7,8,0,0,2449,2450,7,13,0,0,2450,2451,7,2,0,0,2451,472,1,0,0,0,2452, - 2453,7,1,0,0,2453,2454,7,16,0,0,2454,2455,7,4,0,0,2455,2456,5,95, - 0,0,2456,2457,7,16,0,0,2457,2458,7,10,0,0,2458,2459,5,95,0,0,2459, - 2460,7,7,0,0,2460,2461,7,3,0,0,2461,2462,7,16,0,0,2462,2463,7,2, - 0,0,2463,474,1,0,0,0,2464,2465,7,1,0,0,2465,2466,7,17,0,0,2466,2467, - 7,9,0,0,2467,2468,7,7,0,0,2468,2469,7,3,0,0,2469,2470,7,16,0,0,2470, - 2471,7,2,0,0,2471,476,1,0,0,0,2472,2473,7,1,0,0,2473,2474,7,17,0, - 0,2474,2475,7,9,0,0,2475,2476,7,16,0,0,2476,2477,7,8,0,0,2477,2478, - 7,13,0,0,2478,2479,7,2,0,0,2479,478,1,0,0,0,2480,2481,7,1,0,0,2481, - 2482,7,23,0,0,2482,2483,7,1,0,0,2483,2484,7,7,0,0,2484,2485,7,3, - 0,0,2485,2486,7,16,0,0,2486,2487,7,2,0,0,2487,480,1,0,0,0,2488,2489, - 7,16,0,0,2489,2490,7,8,0,0,2490,2491,7,13,0,0,2491,2492,7,2,0,0, - 2492,482,1,0,0,0,2493,2494,7,16,0,0,2494,2495,7,8,0,0,2495,2496, - 7,13,0,0,2496,2497,7,2,0,0,2497,2498,7,7,0,0,2498,2499,7,8,0,0,2499, - 2500,7,12,0,0,2500,2501,7,12,0,0,2501,484,1,0,0,0,2502,2503,7,16, - 0,0,2503,2504,7,8,0,0,2504,2505,7,13,0,0,2505,2506,7,2,0,0,2506, - 2507,7,1,0,0,2507,2508,7,16,0,0,2508,2509,7,3,0,0,2509,2510,7,13, - 0,0,2510,2511,7,18,0,0,2511,486,1,0,0,0,2512,2513,7,16,0,0,2513, - 2514,7,8,0,0,2514,2515,7,13,0,0,2515,2516,7,2,0,0,2516,2517,7,1, - 0,0,2517,2518,7,16,0,0,2518,2519,7,3,0,0,2519,2520,7,13,0,0,2520, - 2521,7,18,0,0,2521,2522,7,3,0,0,2522,2523,7,7,0,0,2523,2524,7,7, - 0,0,2524,488,1,0,0,0,2525,2526,7,16,0,0,2526,2527,7,8,0,0,2527,2528, - 7,13,0,0,2528,2529,7,2,0,0,2529,2530,7,1,0,0,2530,2531,7,16,0,0, - 2531,2532,7,3,0,0,2532,2533,7,13,0,0,2533,2534,7,18,0,0,2534,2535, - 7,7,0,0,2535,2536,7,8,0,0,2536,2537,7,12,0,0,2537,2538,7,12,0,0, - 2538,490,1,0,0,0,2539,2540,7,16,0,0,2540,2541,7,8,0,0,2541,2542, - 7,13,0,0,2542,2543,7,2,0,0,2543,2544,5,95,0,0,2544,2545,7,12,0,0, - 2545,2546,7,10,0,0,2546,2547,7,4,0,0,2547,2548,7,13,0,0,2548,2549, - 7,3,0,0,2549,2550,7,16,0,0,2550,492,1,0,0,0,2551,2552,7,16,0,0,2552, - 2553,7,8,0,0,2553,2554,7,13,0,0,2554,2555,7,2,0,0,2555,2556,5,95, - 0,0,2556,2557,7,16,0,0,2557,2558,7,10,0,0,2558,2559,5,95,0,0,2559, - 2560,7,1,0,0,2560,2561,7,2,0,0,2561,2562,7,5,0,0,2562,494,1,0,0, - 0,2563,2564,7,16,0,0,2564,2565,7,10,0,0,2565,2566,5,95,0,0,2566, - 2567,7,7,0,0,2567,2568,7,3,0,0,2568,2569,7,23,0,0,2569,2570,7,1, - 0,0,2570,496,1,0,0,0,2571,2572,7,16,0,0,2572,2573,7,10,0,0,2573, - 2574,5,95,0,0,2574,2575,7,1,0,0,2575,2576,7,2,0,0,2576,2577,7,5, - 0,0,2577,2578,7,10,0,0,2578,2579,7,15,0,0,2579,2580,7,7,0,0,2580, - 2581,7,1,0,0,2581,498,1,0,0,0,2582,2583,7,17,0,0,2583,2584,7,15, - 0,0,2584,2585,7,8,0,0,2585,2586,7,21,0,0,2586,2587,5,95,0,0,2587, - 2588,7,16,0,0,2588,2589,7,8,0,0,2589,2590,7,13,0,0,2590,2591,7,2, - 0,0,2591,2592,7,1,0,0,2592,2593,7,16,0,0,2593,2594,7,3,0,0,2594, - 2595,7,13,0,0,2595,2596,7,18,0,0,2596,500,1,0,0,0,2597,2598,7,17, - 0,0,2598,2599,7,16,0,0,2599,2600,7,5,0,0,2600,2601,5,95,0,0,2601, - 2602,7,7,0,0,2602,2603,7,3,0,0,2603,2604,7,16,0,0,2604,2605,7,2, - 0,0,2605,502,1,0,0,0,2606,2607,7,17,0,0,2607,2608,7,16,0,0,2608, - 2609,7,5,0,0,2609,2610,5,95,0,0,2610,2611,7,16,0,0,2611,2612,7,8, - 0,0,2612,2613,7,13,0,0,2613,2614,7,2,0,0,2614,504,1,0,0,0,2615,2616, - 7,17,0,0,2616,2617,7,16,0,0,2617,2618,7,5,0,0,2618,2619,5,95,0,0, - 2619,2620,7,16,0,0,2620,2621,7,8,0,0,2621,2622,7,13,0,0,2622,2623, - 7,2,0,0,2623,2624,7,1,0,0,2624,2625,7,16,0,0,2625,2626,7,3,0,0,2626, - 2627,7,13,0,0,2627,2628,7,18,0,0,2628,506,1,0,0,0,2629,2630,7,11, - 0,0,2630,2631,7,2,0,0,2631,2632,7,2,0,0,2632,2633,7,22,0,0,2633, - 2634,7,7,0,0,2634,2635,7,3,0,0,2635,2636,7,23,0,0,2636,508,1,0,0, - 0,2637,2638,7,23,0,0,2638,2639,7,2,0,0,2639,2640,7,3,0,0,2640,2641, - 7,4,0,0,2641,2642,7,11,0,0,2642,2643,7,2,0,0,2643,2644,7,2,0,0,2644, - 2645,7,22,0,0,2645,510,1,0,0,0,2646,2647,7,1,0,0,2647,2648,7,17, - 0,0,2648,2649,7,9,0,0,2649,2650,7,1,0,0,2650,2651,7,16,0,0,2651, - 2652,7,4,0,0,2652,512,1,0,0,0,2653,2654,7,1,0,0,2654,2655,7,17,0, - 0,2655,2656,7,9,0,0,2656,2657,7,1,0,0,2657,2658,7,16,0,0,2658,2659, - 7,4,0,0,2659,2660,7,8,0,0,2660,2661,7,15,0,0,2661,2662,7,20,0,0, - 2662,514,1,0,0,0,2663,2664,7,14,0,0,2664,2665,7,16,0,0,2665,2666, - 7,4,0,0,2666,2667,7,8,0,0,2667,2668,7,13,0,0,2668,516,1,0,0,0,2669, - 2670,7,4,0,0,2670,2671,7,16,0,0,2671,2672,7,4,0,0,2672,2673,7,8, - 0,0,2673,2674,7,13,0,0,2674,518,1,0,0,0,2675,2676,7,16,0,0,2676, - 2677,7,4,0,0,2677,2678,7,8,0,0,2678,2679,7,13,0,0,2679,520,1,0,0, - 0,2680,2681,7,16,0,0,2681,2682,7,10,0,0,2682,522,1,0,0,0,2683,2684, - 7,14,0,0,2684,2685,7,10,0,0,2685,2686,7,11,0,0,2686,2687,7,2,0,0, - 2687,2688,7,4,0,0,2688,524,1,0,0,0,2689,2690,7,17,0,0,2690,2691, - 7,18,0,0,2691,2692,7,18,0,0,2692,2693,7,2,0,0,2693,2694,7,4,0,0, - 2694,526,1,0,0,0,2695,2696,7,5,0,0,2696,2697,7,10,0,0,2697,2698, - 7,15,0,0,2698,2699,7,5,0,0,2699,2700,7,3,0,0,2700,2701,7,16,0,0, - 2701,528,1,0,0,0,2702,2703,7,5,0,0,2703,2704,7,10,0,0,2704,2705, - 7,15,0,0,2705,2706,7,5,0,0,2706,2707,7,3,0,0,2707,2708,7,16,0,0, - 2708,2709,5,95,0,0,2709,2710,7,11,0,0,2710,2711,7,1,0,0,2711,530, - 1,0,0,0,2712,2713,7,14,0,0,2713,2714,7,2,0,0,2714,2715,7,15,0,0, - 2715,2716,7,20,0,0,2716,2717,7,16,0,0,2717,2718,7,6,0,0,2718,532, - 1,0,0,0,2719,2720,7,1,0,0,2720,2721,7,16,0,0,2721,2722,7,4,0,0,2722, - 2723,7,5,0,0,2723,2724,7,13,0,0,2724,2725,7,18,0,0,2725,534,1,0, - 0,0,2726,2727,7,4,0,0,2727,2728,7,8,0,0,2728,2729,7,20,0,0,2729, - 2730,7,6,0,0,2730,2731,7,16,0,0,2731,536,1,0,0,0,2732,2733,7,14, - 0,0,2733,2734,7,2,0,0,2734,2735,7,12,0,0,2735,2736,7,16,0,0,2736, - 538,1,0,0,0,2737,2738,7,3,0,0,2738,2739,7,1,0,0,2739,2740,7,5,0, - 0,2740,2741,7,8,0,0,2741,2742,7,8,0,0,2742,540,1,0,0,0,2743,2744, - 7,14,0,0,2744,2745,7,10,0,0,2745,2746,7,5,0,0,2746,2747,7,3,0,0, - 2747,2748,7,16,0,0,2748,2749,7,2,0,0,2749,542,1,0,0,0,2750,2751, - 7,4,0,0,2751,2752,7,2,0,0,2752,2753,7,18,0,0,2753,2754,7,14,0,0, - 2754,2755,7,3,0,0,2755,2756,7,5,0,0,2756,2757,7,2,0,0,2757,544,1, - 0,0,0,2758,2759,7,4,0,0,2759,2760,7,2,0,0,2760,2761,7,19,0,0,2761, - 2762,7,2,0,0,2762,2763,7,4,0,0,2763,2764,7,1,0,0,2764,2765,7,2,0, - 0,2765,546,1,0,0,0,2766,2767,7,5,0,0,2767,2768,7,3,0,0,2768,2769, - 7,1,0,0,2769,2770,7,16,0,0,2770,548,1,0,0,0,2771,2772,7,14,0,0,2772, - 2773,7,8,0,0,2773,2774,7,22,0,0,2774,2775,7,2,0,0,2775,550,1,0,0, - 0,2776,2777,7,8,0,0,2777,2778,7,1,0,0,2778,2779,7,15,0,0,2779,2780, - 7,17,0,0,2780,2781,7,14,0,0,2781,2782,7,14,0,0,2782,552,1,0,0,0, - 2783,2784,7,8,0,0,2784,2785,7,1,0,0,2785,2786,7,15,0,0,2786,2787, - 7,10,0,0,2787,2788,7,16,0,0,2788,2789,7,15,0,0,2789,2790,7,17,0, - 0,2790,2791,7,14,0,0,2791,2792,7,14,0,0,2792,554,1,0,0,0,2793,2794, - 7,8,0,0,2794,2795,7,12,0,0,2795,2796,7,15,0,0,2796,2797,7,17,0,0, - 2797,2798,7,14,0,0,2798,2799,7,14,0,0,2799,556,1,0,0,0,2800,2801, - 7,15,0,0,2801,2802,7,17,0,0,2802,2803,7,14,0,0,2803,2804,7,14,0, - 0,2804,2805,7,8,0,0,2805,2806,7,12,0,0,2806,558,1,0,0,0,2807,2808, - 7,8,0,0,2808,2809,7,12,0,0,2809,560,1,0,0,0,2810,2811,7,16,0,0,2811, - 2812,7,23,0,0,2812,2813,7,18,0,0,2813,2814,7,2,0,0,2814,2815,7,10, - 0,0,2815,2816,7,12,0,0,2816,562,1,0,0,0,2817,2818,7,13,0,0,2818, - 2819,7,3,0,0,2819,2820,7,16,0,0,2820,2821,7,5,0,0,2821,2822,7,6, - 0,0,2822,564,1,0,0,0,2823,2824,7,13,0,0,2824,2825,7,3,0,0,2825,2826, - 7,16,0,0,2826,2827,7,5,0,0,2827,2828,7,6,0,0,2828,2829,5,95,0,0, - 2829,2830,7,18,0,0,2830,2831,7,6,0,0,2831,2832,7,4,0,0,2832,2833, - 7,3,0,0,2833,2834,7,1,0,0,2834,2835,7,2,0,0,2835,566,1,0,0,0,2836, - 2837,7,13,0,0,2837,2838,7,3,0,0,2838,2839,7,16,0,0,2839,2840,7,5, - 0,0,2840,2841,7,6,0,0,2841,2842,5,95,0,0,2842,2843,7,18,0,0,2843, - 2844,7,6,0,0,2844,2845,7,4,0,0,2845,2846,7,3,0,0,2846,2847,7,1,0, - 0,2847,2848,7,2,0,0,2848,2849,5,95,0,0,2849,2850,7,18,0,0,2850,2851, - 7,4,0,0,2851,2852,7,2,0,0,2852,2853,7,12,0,0,2853,2854,7,8,0,0,2854, - 2855,7,21,0,0,2855,568,1,0,0,0,2856,2857,7,13,0,0,2857,2858,7,3, - 0,0,2858,2859,7,16,0,0,2859,2860,7,5,0,0,2860,2861,7,6,0,0,2861, - 2862,5,95,0,0,2862,2863,7,9,0,0,2863,2864,7,10,0,0,2864,2865,7,10, - 0,0,2865,2866,7,14,0,0,2866,2867,5,95,0,0,2867,2868,7,18,0,0,2868, - 2869,7,4,0,0,2869,2870,7,2,0,0,2870,2871,7,12,0,0,2871,2872,7,8, - 0,0,2872,2873,7,21,0,0,2873,570,1,0,0,0,2874,2875,7,1,0,0,2875,2876, - 7,8,0,0,2876,2877,7,13,0,0,2877,2878,7,18,0,0,2878,2879,7,14,0,0, - 2879,2880,7,2,0,0,2880,2881,5,95,0,0,2881,2882,7,25,0,0,2882,2883, - 7,17,0,0,2883,2884,7,2,0,0,2884,2885,7,4,0,0,2885,2886,7,23,0,0, - 2886,2887,5,95,0,0,2887,2888,7,1,0,0,2888,2889,7,16,0,0,2889,2890, - 7,4,0,0,2890,2891,7,8,0,0,2891,2892,7,15,0,0,2892,2893,7,20,0,0, - 2893,572,1,0,0,0,2894,2895,7,13,0,0,2895,2896,7,17,0,0,2896,2897, - 7,14,0,0,2897,2898,7,16,0,0,2898,2899,7,8,0,0,2899,2900,5,95,0,0, - 2900,2901,7,13,0,0,2901,2902,7,3,0,0,2902,2903,7,16,0,0,2903,2904, - 7,5,0,0,2904,2905,7,6,0,0,2905,574,1,0,0,0,2906,2907,7,25,0,0,2907, - 2908,7,17,0,0,2908,2909,7,2,0,0,2909,2910,7,4,0,0,2910,2911,7,23, - 0,0,2911,2912,5,95,0,0,2912,2913,7,1,0,0,2913,2914,7,16,0,0,2914, - 2915,7,4,0,0,2915,2916,7,8,0,0,2916,2917,7,15,0,0,2917,2918,7,20, - 0,0,2918,576,1,0,0,0,2919,2920,7,3,0,0,2920,2921,7,14,0,0,2921,2922, - 7,14,0,0,2922,2923,7,10,0,0,2923,2924,7,11,0,0,2924,2925,5,95,0, - 0,2925,2926,7,14,0,0,2926,2927,7,2,0,0,2927,2928,7,3,0,0,2928,2929, - 7,7,0,0,2929,2930,7,8,0,0,2930,2931,7,15,0,0,2931,2932,7,20,0,0, - 2932,2933,5,95,0,0,2933,2934,7,11,0,0,2934,2935,7,8,0,0,2935,2936, - 7,14,0,0,2936,2937,7,7,0,0,2937,2938,7,5,0,0,2938,2939,7,3,0,0,2939, - 2940,7,4,0,0,2940,2941,7,7,0,0,2941,578,1,0,0,0,2942,2943,7,3,0, - 0,2943,2944,7,15,0,0,2944,2945,7,3,0,0,2945,2946,7,14,0,0,2946,2947, - 7,23,0,0,2947,2948,7,24,0,0,2948,2949,7,2,0,0,2949,2950,5,95,0,0, - 2950,2951,7,11,0,0,2951,2952,7,8,0,0,2952,2953,7,14,0,0,2953,2954, - 7,7,0,0,2954,2955,7,5,0,0,2955,2956,7,3,0,0,2956,2957,7,4,0,0,2957, - 2958,7,7,0,0,2958,580,1,0,0,0,2959,2960,7,3,0,0,2960,2961,7,15,0, - 0,2961,2962,7,3,0,0,2962,2963,7,14,0,0,2963,2964,7,23,0,0,2964,2965, - 7,24,0,0,2965,2966,7,2,0,0,2966,2967,7,4,0,0,2967,582,1,0,0,0,2968, - 2969,7,3,0,0,2969,2970,7,17,0,0,2970,2971,7,16,0,0,2971,2972,7,10, - 0,0,2972,2973,5,95,0,0,2973,2974,7,20,0,0,2974,2975,7,2,0,0,2975, - 2976,7,15,0,0,2976,2977,7,2,0,0,2977,2978,7,4,0,0,2978,2979,7,3, - 0,0,2979,2980,7,16,0,0,2980,2981,7,2,0,0,2981,2982,5,95,0,0,2982, - 2983,7,1,0,0,2983,2984,7,23,0,0,2984,2985,7,15,0,0,2985,2986,7,10, - 0,0,2986,2987,7,15,0,0,2987,2988,7,23,0,0,2988,2989,7,13,0,0,2989, - 2990,7,1,0,0,2990,2991,5,95,0,0,2991,2992,7,18,0,0,2992,2993,7,6, - 0,0,2993,2994,7,4,0,0,2994,2995,7,3,0,0,2995,2996,7,1,0,0,2996,2997, - 7,2,0,0,2997,2998,5,95,0,0,2998,2999,7,25,0,0,2999,3000,7,17,0,0, - 3000,3001,7,2,0,0,3001,3002,7,4,0,0,3002,3003,7,23,0,0,3003,584, - 1,0,0,0,3004,3005,7,9,0,0,3005,3006,7,10,0,0,3006,3007,7,10,0,0, - 3007,3008,7,1,0,0,3008,3009,7,16,0,0,3009,586,1,0,0,0,3010,3011, - 7,5,0,0,3011,3012,7,17,0,0,3012,3013,7,16,0,0,3013,3014,7,10,0,0, - 3014,3015,7,12,0,0,3015,3016,7,12,0,0,3016,3017,5,95,0,0,3017,3018, - 7,12,0,0,3018,3019,7,4,0,0,3019,3020,7,2,0,0,3020,3021,7,25,0,0, - 3021,3022,7,17,0,0,3022,3023,7,2,0,0,3023,3024,7,15,0,0,3024,3025, - 7,5,0,0,3025,3026,7,23,0,0,3026,588,1,0,0,0,3027,3028,7,7,0,0,3028, - 3029,7,2,0,0,3029,3030,7,12,0,0,3030,3031,7,3,0,0,3031,3032,7,17, - 0,0,3032,3033,7,14,0,0,3033,3034,7,16,0,0,3034,3035,5,95,0,0,3035, - 3036,7,12,0,0,3036,3037,7,8,0,0,3037,3038,7,2,0,0,3038,3039,7,14, - 0,0,3039,3040,7,7,0,0,3040,590,1,0,0,0,3041,3042,7,7,0,0,3042,3043, - 7,2,0,0,3043,3044,7,12,0,0,3044,3045,7,3,0,0,3045,3046,7,17,0,0, - 3046,3047,7,14,0,0,3047,3048,7,16,0,0,3048,3049,5,95,0,0,3049,3050, - 7,10,0,0,3050,3051,7,18,0,0,3051,3052,7,2,0,0,3052,3053,7,4,0,0, - 3053,3054,7,3,0,0,3054,3055,7,16,0,0,3055,3056,7,10,0,0,3056,3057, - 7,4,0,0,3057,592,1,0,0,0,3058,3059,7,2,0,0,3059,3060,7,15,0,0,3060, - 3061,7,3,0,0,3061,3062,7,9,0,0,3062,3063,7,14,0,0,3063,3064,7,2, - 0,0,3064,3065,5,95,0,0,3065,3066,7,18,0,0,3066,3067,7,10,0,0,3067, - 3068,7,1,0,0,3068,3069,7,8,0,0,3069,3070,7,16,0,0,3070,3071,7,8, - 0,0,3071,3072,7,10,0,0,3072,3073,7,15,0,0,3073,3074,5,95,0,0,3074, - 3075,7,8,0,0,3075,3076,7,15,0,0,3076,3077,7,5,0,0,3077,3078,7,4, - 0,0,3078,3079,7,2,0,0,3079,3080,7,13,0,0,3080,3081,7,2,0,0,3081, - 3082,7,15,0,0,3082,3083,7,16,0,0,3083,3084,7,1,0,0,3084,594,1,0, - 0,0,3085,3086,7,2,0,0,3086,3087,7,1,0,0,3087,3088,7,5,0,0,3088,3089, - 7,3,0,0,3089,3090,7,18,0,0,3090,3091,7,2,0,0,3091,596,1,0,0,0,3092, - 3093,7,12,0,0,3093,3094,7,14,0,0,3094,3095,7,3,0,0,3095,3096,7,20, - 0,0,3096,3097,7,1,0,0,3097,598,1,0,0,0,3098,3099,7,12,0,0,3099,3100, - 7,17,0,0,3100,3101,7,24,0,0,3101,3102,7,24,0,0,3102,3103,7,23,0, - 0,3103,3104,5,95,0,0,3104,3105,7,13,0,0,3105,3106,7,3,0,0,3106,3107, - 7,21,0,0,3107,3108,5,95,0,0,3108,3109,7,2,0,0,3109,3110,7,21,0,0, - 3110,3111,7,18,0,0,3111,3112,7,3,0,0,3112,3113,7,15,0,0,3113,3114, - 7,1,0,0,3114,3115,7,8,0,0,3115,3116,7,10,0,0,3116,3117,7,15,0,0, - 3117,3118,7,1,0,0,3118,600,1,0,0,0,3119,3120,7,12,0,0,3120,3121, - 7,17,0,0,3121,3122,7,24,0,0,3122,3123,7,24,0,0,3123,3124,7,23,0, - 0,3124,3125,5,95,0,0,3125,3126,7,18,0,0,3126,3127,7,4,0,0,3127,3128, - 7,2,0,0,3128,3129,7,12,0,0,3129,3130,7,8,0,0,3130,3131,7,21,0,0, - 3131,3132,5,95,0,0,3132,3133,7,14,0,0,3133,3134,7,2,0,0,3134,3135, - 7,15,0,0,3135,3136,7,20,0,0,3136,3137,7,16,0,0,3137,3138,7,6,0,0, - 3138,602,1,0,0,0,3139,3140,7,12,0,0,3140,3141,7,17,0,0,3141,3142, - 7,24,0,0,3142,3143,7,24,0,0,3143,3144,7,23,0,0,3144,3145,5,95,0, - 0,3145,3146,7,16,0,0,3146,3147,7,4,0,0,3147,3148,7,3,0,0,3148,3149, - 7,15,0,0,3149,3150,7,1,0,0,3150,3151,7,18,0,0,3151,3152,7,10,0,0, - 3152,3153,7,1,0,0,3153,3154,7,8,0,0,3154,3155,7,16,0,0,3155,3156, - 7,8,0,0,3156,3157,7,10,0,0,3157,3158,7,15,0,0,3158,3159,7,1,0,0, - 3159,604,1,0,0,0,3160,3161,7,12,0,0,3161,3162,7,17,0,0,3162,3163, - 7,24,0,0,3163,3164,7,24,0,0,3164,3165,7,23,0,0,3165,3166,5,95,0, - 0,3166,3167,7,4,0,0,3167,3168,7,2,0,0,3168,3169,7,11,0,0,3169,3170, - 7,4,0,0,3170,3171,7,8,0,0,3171,3172,7,16,0,0,3172,3173,7,2,0,0,3173, - 606,1,0,0,0,3174,3175,7,12,0,0,3175,3176,7,17,0,0,3176,3177,7,24, - 0,0,3177,3178,7,24,0,0,3178,3179,7,8,0,0,3179,3180,7,15,0,0,3180, - 3181,7,2,0,0,3181,3182,7,1,0,0,3182,3183,7,1,0,0,3183,608,1,0,0, - 0,3184,3185,7,14,0,0,3185,3186,7,2,0,0,3186,3187,7,15,0,0,3187,3188, - 7,8,0,0,3188,3189,7,2,0,0,3189,3190,7,15,0,0,3190,3191,7,16,0,0, - 3191,610,1,0,0,0,3192,3193,7,14,0,0,3193,3194,7,10,0,0,3194,3195, - 7,11,0,0,3195,3196,5,95,0,0,3196,3197,7,12,0,0,3197,3198,7,4,0,0, - 3198,3199,7,2,0,0,3199,3200,7,25,0,0,3200,3201,5,95,0,0,3201,3202, - 7,10,0,0,3202,3203,7,18,0,0,3203,3204,7,2,0,0,3204,3205,7,4,0,0, - 3205,3206,7,3,0,0,3206,3207,7,16,0,0,3207,3208,7,10,0,0,3208,3209, - 7,4,0,0,3209,612,1,0,0,0,3210,3211,7,13,0,0,3211,3212,7,3,0,0,3212, - 3213,7,21,0,0,3213,3214,5,95,0,0,3214,3215,7,7,0,0,3215,3216,7,2, - 0,0,3216,3217,7,16,0,0,3217,3218,7,2,0,0,3218,3219,7,4,0,0,3219, - 3220,7,13,0,0,3220,3221,7,8,0,0,3221,3222,7,15,0,0,3222,3223,7,8, - 0,0,3223,3224,7,24,0,0,3224,3225,7,2,0,0,3225,3226,7,7,0,0,3226, - 3227,5,95,0,0,3227,3228,7,1,0,0,3228,3229,7,16,0,0,3229,3230,7,3, - 0,0,3230,3231,7,16,0,0,3231,3232,7,2,0,0,3232,3233,7,1,0,0,3233, - 614,1,0,0,0,3234,3235,7,13,0,0,3235,3236,7,3,0,0,3236,3237,7,21, - 0,0,3237,3238,5,95,0,0,3238,3239,7,2,0,0,3239,3240,7,21,0,0,3240, - 3241,7,18,0,0,3241,3242,7,3,0,0,3242,3243,7,15,0,0,3243,3244,7,1, - 0,0,3244,3245,7,8,0,0,3245,3246,7,10,0,0,3246,3247,7,15,0,0,3247, - 3248,7,1,0,0,3248,616,1,0,0,0,3249,3250,7,13,0,0,3250,3251,7,8,0, - 0,3251,3252,7,15,0,0,3252,3253,7,8,0,0,3253,3254,7,13,0,0,3254,3255, - 7,17,0,0,3255,3256,7,13,0,0,3256,3257,5,95,0,0,3257,3258,7,1,0,0, - 3258,3259,7,6,0,0,3259,3260,7,10,0,0,3260,3261,7,17,0,0,3261,3262, - 7,14,0,0,3262,3263,7,7,0,0,3263,3264,5,95,0,0,3264,3265,7,13,0,0, - 3265,3266,7,3,0,0,3266,3267,7,16,0,0,3267,3268,7,5,0,0,3268,3269, - 7,6,0,0,3269,618,1,0,0,0,3270,3271,7,10,0,0,3271,3272,7,18,0,0,3272, - 3273,7,2,0,0,3273,3274,7,4,0,0,3274,3275,7,3,0,0,3275,3276,7,16, - 0,0,3276,3277,7,10,0,0,3277,3278,7,4,0,0,3278,620,1,0,0,0,3279,3280, - 7,18,0,0,3280,3281,7,6,0,0,3281,3282,7,4,0,0,3282,3283,7,3,0,0,3283, - 3284,7,1,0,0,3284,3285,7,2,0,0,3285,3286,5,95,0,0,3286,3287,7,1, - 0,0,3287,3288,7,14,0,0,3288,3289,7,10,0,0,3289,3290,7,18,0,0,3290, - 622,1,0,0,0,3291,3292,7,18,0,0,3292,3293,7,4,0,0,3293,3294,7,2,0, - 0,3294,3295,7,12,0,0,3295,3296,7,8,0,0,3296,3297,7,21,0,0,3297,3298, - 5,95,0,0,3298,3299,7,14,0,0,3299,3300,7,2,0,0,3300,3301,7,15,0,0, - 3301,3302,7,20,0,0,3302,3303,7,16,0,0,3303,3304,7,6,0,0,3304,624, - 1,0,0,0,3305,3306,7,25,0,0,3306,3307,7,17,0,0,3307,3308,7,10,0,0, - 3308,3309,7,16,0,0,3309,3310,7,2,0,0,3310,3311,5,95,0,0,3311,3312, - 7,3,0,0,3312,3313,7,15,0,0,3313,3314,7,3,0,0,3314,3315,7,14,0,0, - 3315,3316,7,23,0,0,3316,3317,7,24,0,0,3317,3318,7,2,0,0,3318,3319, - 7,4,0,0,3319,626,1,0,0,0,3320,3321,7,25,0,0,3321,3322,7,17,0,0,3322, - 3323,7,10,0,0,3323,3324,7,16,0,0,3324,3325,7,2,0,0,3325,3326,5,95, - 0,0,3326,3327,7,12,0,0,3327,3328,7,8,0,0,3328,3329,7,2,0,0,3329, - 3330,7,14,0,0,3330,3331,7,7,0,0,3331,3332,5,95,0,0,3332,3333,7,1, - 0,0,3333,3334,7,17,0,0,3334,3335,7,12,0,0,3335,3336,7,12,0,0,3336, - 3337,7,8,0,0,3337,3338,7,21,0,0,3338,628,1,0,0,0,3339,3340,7,4,0, - 0,3340,3341,7,2,0,0,3341,3342,7,11,0,0,3342,3343,7,4,0,0,3343,3344, - 7,8,0,0,3344,3345,7,16,0,0,3345,3346,7,2,0,0,3346,630,1,0,0,0,3347, - 3348,7,1,0,0,3348,3349,7,14,0,0,3349,3350,7,10,0,0,3350,3351,7,18, - 0,0,3351,632,1,0,0,0,3352,3353,7,16,0,0,3353,3354,7,8,0,0,3354,3355, - 7,2,0,0,3355,3356,5,95,0,0,3356,3357,7,9,0,0,3357,3358,7,4,0,0,3358, - 3359,7,2,0,0,3359,3360,7,3,0,0,3360,3361,7,22,0,0,3361,3362,7,2, - 0,0,3362,3363,7,4,0,0,3363,634,1,0,0,0,3364,3365,7,16,0,0,3365,3366, - 7,23,0,0,3366,3367,7,18,0,0,3367,3368,7,2,0,0,3368,636,1,0,0,0,3369, - 3370,7,24,0,0,3370,3371,7,2,0,0,3371,3372,7,4,0,0,3372,3373,7,10, - 0,0,3373,3374,5,95,0,0,3374,3375,7,16,0,0,3375,3376,7,2,0,0,3376, - 3377,7,4,0,0,3377,3378,7,13,0,0,3378,3379,7,1,0,0,3379,3380,5,95, - 0,0,3380,3381,7,25,0,0,3381,3382,7,17,0,0,3382,3383,7,2,0,0,3383, - 3384,7,4,0,0,3384,3385,7,23,0,0,3385,638,1,0,0,0,3386,3387,7,1,0, - 0,3387,3388,7,18,0,0,3388,3389,7,3,0,0,3389,3390,7,15,0,0,3390,640, - 1,0,0,0,3391,3392,7,13,0,0,3392,3393,7,1,0,0,3393,642,1,0,0,0,3394, - 3395,7,1,0,0,3395,644,1,0,0,0,3396,3397,7,13,0,0,3397,646,1,0,0, - 0,3398,3399,7,6,0,0,3399,648,1,0,0,0,3400,3401,7,11,0,0,3401,650, - 1,0,0,0,3402,3403,7,25,0,0,3403,652,1,0,0,0,3404,3405,7,23,0,0,3405, - 654,1,0,0,0,3406,3407,3,665,332,0,3407,656,1,0,0,0,3408,3409,3,667, - 333,0,3409,658,1,0,0,0,3410,3412,3,677,338,0,3411,3410,1,0,0,0,3412, - 3413,1,0,0,0,3413,3411,1,0,0,0,3413,3414,1,0,0,0,3414,660,1,0,0, - 0,3415,3417,3,677,338,0,3416,3415,1,0,0,0,3417,3418,1,0,0,0,3418, - 3416,1,0,0,0,3418,3419,1,0,0,0,3419,3421,1,0,0,0,3420,3416,1,0,0, - 0,3420,3421,1,0,0,0,3421,3422,1,0,0,0,3422,3424,5,46,0,0,3423,3425, - 3,677,338,0,3424,3423,1,0,0,0,3425,3426,1,0,0,0,3426,3424,1,0,0, - 0,3426,3427,1,0,0,0,3427,662,1,0,0,0,3428,3430,7,26,0,0,3429,3431, - 7,27,0,0,3430,3429,1,0,0,0,3431,3432,1,0,0,0,3432,3430,1,0,0,0,3432, - 3433,1,0,0,0,3433,3435,1,0,0,0,3434,3428,1,0,0,0,3435,3436,1,0,0, - 0,3436,3434,1,0,0,0,3436,3437,1,0,0,0,3437,664,1,0,0,0,3438,3442, - 7,28,0,0,3439,3441,7,29,0,0,3440,3439,1,0,0,0,3441,3444,1,0,0,0, - 3442,3440,1,0,0,0,3442,3443,1,0,0,0,3443,666,1,0,0,0,3444,3442,1, - 0,0,0,3445,3447,7,30,0,0,3446,3445,1,0,0,0,3447,3448,1,0,0,0,3448, - 3449,1,0,0,0,3448,3446,1,0,0,0,3449,3453,1,0,0,0,3450,3452,7,29, - 0,0,3451,3450,1,0,0,0,3452,3455,1,0,0,0,3453,3451,1,0,0,0,3453,3454, - 1,0,0,0,3454,3456,1,0,0,0,3455,3453,1,0,0,0,3456,3457,3,247,123, - 0,3457,668,1,0,0,0,3458,3460,3,667,333,0,3459,3458,1,0,0,0,3459, - 3460,1,0,0,0,3460,3461,1,0,0,0,3461,3462,3,665,332,0,3462,3463,3, - 663,331,0,3463,670,1,0,0,0,3464,3472,5,34,0,0,3465,3466,5,92,0,0, - 3466,3471,9,0,0,0,3467,3468,5,34,0,0,3468,3471,5,34,0,0,3469,3471, - 8,31,0,0,3470,3465,1,0,0,0,3470,3467,1,0,0,0,3470,3469,1,0,0,0,3471, - 3474,1,0,0,0,3472,3470,1,0,0,0,3472,3473,1,0,0,0,3473,3475,1,0,0, - 0,3474,3472,1,0,0,0,3475,3476,5,34,0,0,3476,672,1,0,0,0,3477,3485, - 5,39,0,0,3478,3479,5,92,0,0,3479,3484,9,0,0,0,3480,3481,5,39,0,0, - 3481,3484,5,39,0,0,3482,3484,8,32,0,0,3483,3478,1,0,0,0,3483,3480, - 1,0,0,0,3483,3482,1,0,0,0,3484,3487,1,0,0,0,3485,3483,1,0,0,0,3485, - 3486,1,0,0,0,3486,3488,1,0,0,0,3487,3485,1,0,0,0,3488,3489,5,39, - 0,0,3489,674,1,0,0,0,3490,3498,5,96,0,0,3491,3492,5,92,0,0,3492, - 3497,9,0,0,0,3493,3494,5,96,0,0,3494,3497,5,96,0,0,3495,3497,8,33, - 0,0,3496,3491,1,0,0,0,3496,3493,1,0,0,0,3496,3495,1,0,0,0,3497,3500, - 1,0,0,0,3498,3496,1,0,0,0,3498,3499,1,0,0,0,3499,3501,1,0,0,0,3500, - 3498,1,0,0,0,3501,3502,5,96,0,0,3502,676,1,0,0,0,3503,3504,7,34, - 0,0,3504,678,1,0,0,0,3505,3506,9,0,0,0,3506,3507,1,0,0,0,3507,3508, - 6,339,1,0,3508,680,1,0,0,0,18,0,684,3413,3418,3420,3426,3432,3436, - 3442,3448,3453,3459,3470,3472,3483,3485,3496,3498,2,0,1,0,0,3,0 + 1393,7,1,0,0,1393,116,1,0,0,0,1394,1395,7,6,0,0,1395,1396,7,8,0, + 0,1396,1397,7,15,0,0,1397,1398,7,18,0,0,1398,1399,5,46,0,0,1399, + 1400,7,14,0,0,1400,1401,7,2,0,0,1401,1402,7,16,0,0,1402,1403,7,18, + 0,0,1403,118,1,0,0,0,1404,1405,7,6,0,0,1405,1406,7,8,0,0,1406,1407, + 7,15,0,0,1407,1408,7,18,0,0,1408,1409,5,46,0,0,1409,1410,7,4,0,0, + 1410,1411,7,8,0,0,1411,1412,7,21,0,0,1412,1413,7,6,0,0,1413,1414, + 7,18,0,0,1414,120,1,0,0,0,1415,1416,7,3,0,0,1416,1417,7,1,0,0,1417, + 122,1,0,0,0,1418,1419,7,9,0,0,1419,1420,7,24,0,0,1420,124,1,0,0, + 0,1421,1422,7,1,0,0,1422,1423,7,10,0,0,1423,1424,7,20,0,0,1424,1425, + 7,4,0,0,1425,1426,7,5,0,0,1426,1427,7,2,0,0,1427,126,1,0,0,0,1428, + 1429,7,8,0,0,1429,1430,7,15,0,0,1430,1431,7,7,0,0,1431,1432,7,2, + 0,0,1432,1433,7,12,0,0,1433,128,1,0,0,0,1434,1435,7,3,0,0,1435,130, + 1,0,0,0,1436,1437,7,3,0,0,1437,1438,7,1,0,0,1438,1439,7,5,0,0,1439, + 132,1,0,0,0,1440,1441,7,7,0,0,1441,134,1,0,0,0,1442,1443,7,7,0,0, + 1443,1444,7,2,0,0,1444,1445,7,1,0,0,1445,1446,7,5,0,0,1446,136,1, + 0,0,0,1447,1448,7,7,0,0,1448,1449,7,3,0,0,1449,1450,7,18,0,0,1450, + 1451,7,3,0,0,1451,1452,7,1,0,0,1452,1453,7,10,0,0,1453,1454,7,20, + 0,0,1454,1455,7,4,0,0,1455,1456,7,5,0,0,1456,1457,7,2,0,0,1457,1458, + 7,1,0,0,1458,138,1,0,0,0,1459,1460,7,20,0,0,1460,1461,7,1,0,0,1461, + 1462,7,8,0,0,1462,1463,7,15,0,0,1463,1464,7,21,0,0,1464,140,1,0, + 0,0,1465,1466,7,11,0,0,1466,1467,7,8,0,0,1467,1468,7,18,0,0,1468, + 1469,7,6,0,0,1469,142,1,0,0,0,1470,1471,7,1,0,0,1471,1472,7,8,0, + 0,1472,1473,7,17,0,0,1473,1474,7,13,0,0,1474,1475,7,14,0,0,1475, + 1476,7,2,0,0,1476,144,1,0,0,0,1477,1478,7,1,0,0,1478,1479,7,18,0, + 0,1479,1480,7,3,0,0,1480,1481,7,15,0,0,1481,1482,7,7,0,0,1482,1483, + 7,3,0,0,1483,1484,7,4,0,0,1484,1485,7,7,0,0,1485,146,1,0,0,0,1486, + 1487,7,5,0,0,1487,1488,7,10,0,0,1488,1489,7,1,0,0,1489,1490,7,18, + 0,0,1490,148,1,0,0,0,1491,1492,7,2,0,0,1492,1493,7,12,0,0,1493,1494, + 7,18,0,0,1494,1495,7,2,0,0,1495,1496,7,15,0,0,1496,1497,7,7,0,0, + 1497,1498,7,2,0,0,1498,1499,7,7,0,0,1499,150,1,0,0,0,1500,1501,7, + 10,0,0,1501,1502,7,19,0,0,1502,1503,7,2,0,0,1503,1504,7,4,0,0,1504, + 1505,7,4,0,0,1505,1506,7,8,0,0,1506,1507,7,7,0,0,1507,1508,7,2,0, + 0,1508,152,1,0,0,0,1509,1510,7,10,0,0,1510,1511,7,19,0,0,1511,1512, + 7,2,0,0,1512,1513,7,4,0,0,1513,1514,7,11,0,0,1514,1515,7,4,0,0,1515, + 1516,7,8,0,0,1516,1517,7,18,0,0,1517,1518,7,2,0,0,1518,154,1,0,0, + 0,1519,1520,7,3,0,0,1520,1521,7,20,0,0,1521,1522,7,18,0,0,1522,1523, + 7,10,0,0,1523,156,1,0,0,0,1524,1525,7,1,0,0,1525,1526,7,18,0,0,1526, + 1527,7,4,0,0,1527,158,1,0,0,0,1528,1529,7,15,0,0,1529,1530,7,20, + 0,0,1530,1531,7,17,0,0,1531,160,1,0,0,0,1532,1533,7,1,0,0,1533,1534, + 7,17,0,0,1534,1535,7,3,0,0,1535,162,1,0,0,0,1536,1537,7,11,0,0,1537, + 1538,7,17,0,0,1538,1539,7,3,0,0,1539,164,1,0,0,0,1540,1541,7,22, + 0,0,1541,1542,7,2,0,0,1542,1543,7,2,0,0,1543,1544,7,13,0,0,1544, + 1545,7,2,0,0,1545,1546,7,17,0,0,1546,1547,7,13,0,0,1547,1548,7,18, + 0,0,1548,1549,7,24,0,0,1549,166,1,0,0,0,1550,1551,7,5,0,0,1551,1552, + 7,10,0,0,1552,1553,7,15,0,0,1553,1554,7,1,0,0,1554,1555,7,2,0,0, + 1555,1556,7,5,0,0,1556,1557,7,20,0,0,1557,1558,7,18,0,0,1558,1559, + 7,8,0,0,1559,1560,7,19,0,0,1560,1561,7,2,0,0,1561,168,1,0,0,0,1562, + 1563,7,7,0,0,1563,1564,7,2,0,0,1564,1565,7,7,0,0,1565,1566,7,20, + 0,0,1566,1567,7,13,0,0,1567,1568,5,95,0,0,1568,1569,7,1,0,0,1569, + 1570,7,13,0,0,1570,1571,7,14,0,0,1571,1572,7,8,0,0,1572,1573,7,18, + 0,0,1573,1574,7,19,0,0,1574,1575,7,3,0,0,1575,1576,7,14,0,0,1576, + 1577,7,20,0,0,1577,1578,7,2,0,0,1578,1579,7,1,0,0,1579,170,1,0,0, + 0,1580,1581,7,13,0,0,1581,1582,7,3,0,0,1582,1583,7,4,0,0,1583,1584, + 7,18,0,0,1584,1585,7,8,0,0,1585,1586,7,18,0,0,1586,1587,7,8,0,0, + 1587,1588,7,10,0,0,1588,1589,7,15,0,0,1589,1590,7,1,0,0,1590,172, + 1,0,0,0,1591,1592,7,3,0,0,1592,1593,7,14,0,0,1593,1594,7,14,0,0, + 1594,1595,7,15,0,0,1595,1596,7,20,0,0,1596,1597,7,17,0,0,1597,174, + 1,0,0,0,1598,1599,7,7,0,0,1599,1600,7,2,0,0,1600,1601,7,14,0,0,1601, + 1602,7,8,0,0,1602,1603,7,17,0,0,1603,176,1,0,0,0,1604,1605,7,9,0, + 0,1605,1606,7,20,0,0,1606,1607,7,5,0,0,1607,1608,7,22,0,0,1608,1609, + 7,2,0,0,1609,1610,7,18,0,0,1610,1611,5,95,0,0,1611,1612,7,15,0,0, + 1612,1613,7,20,0,0,1613,1614,7,14,0,0,1614,1615,7,14,0,0,1615,1616, + 7,3,0,0,1616,1617,7,9,0,0,1617,1618,7,14,0,0,1618,1619,7,2,0,0,1619, + 178,1,0,0,0,1620,1621,7,5,0,0,1621,1622,7,2,0,0,1622,1623,7,15,0, + 0,1623,1624,7,18,0,0,1624,1625,7,4,0,0,1625,1626,7,10,0,0,1626,1627, + 7,8,0,0,1627,1628,7,7,0,0,1628,1629,7,1,0,0,1629,180,1,0,0,0,1630, + 1631,7,8,0,0,1631,1632,7,18,0,0,1632,1633,7,2,0,0,1633,1634,7,4, + 0,0,1634,1635,7,3,0,0,1635,1636,7,18,0,0,1636,1637,7,8,0,0,1637, + 1638,7,10,0,0,1638,1639,7,15,0,0,1639,1640,7,1,0,0,1640,182,1,0, + 0,0,1641,1642,7,7,0,0,1642,1643,7,8,0,0,1643,1644,7,1,0,0,1644,1645, + 7,18,0,0,1645,1646,7,3,0,0,1646,1647,7,15,0,0,1647,1648,7,5,0,0, + 1648,1649,7,2,0,0,1649,1650,5,95,0,0,1650,1651,7,18,0,0,1651,1652, + 7,24,0,0,1652,1653,7,13,0,0,1653,1654,7,2,0,0,1654,184,1,0,0,0,1655, + 1656,7,15,0,0,1656,1657,7,20,0,0,1657,1658,7,17,0,0,1658,1659,7, + 9,0,0,1659,1660,7,2,0,0,1660,1661,7,4,0,0,1661,1662,5,95,0,0,1662, + 1663,7,10,0,0,1663,1664,7,16,0,0,1664,1665,5,95,0,0,1665,1666,7, + 18,0,0,1666,1667,7,4,0,0,1667,1668,7,2,0,0,1668,1669,7,2,0,0,1669, + 1670,7,1,0,0,1670,186,1,0,0,0,1671,1672,7,1,0,0,1672,1673,7,6,0, + 0,1673,1674,7,8,0,0,1674,1675,7,15,0,0,1675,1676,7,21,0,0,1676,1677, + 7,14,0,0,1677,1678,7,2,0,0,1678,1679,5,95,0,0,1679,1680,7,1,0,0, + 1680,1681,7,8,0,0,1681,1682,7,26,0,0,1682,1683,7,2,0,0,1683,188, + 1,0,0,0,1684,1685,7,1,0,0,1685,1686,7,3,0,0,1686,1687,7,17,0,0,1687, + 1688,7,13,0,0,1688,1689,7,14,0,0,1689,1690,7,2,0,0,1690,1691,5,95, + 0,0,1691,1692,7,1,0,0,1692,1693,7,8,0,0,1693,1694,7,26,0,0,1694, + 1695,7,2,0,0,1695,190,1,0,0,0,1696,1697,7,10,0,0,1697,1698,7,20, + 0,0,1698,1699,7,18,0,0,1699,1700,7,13,0,0,1700,1701,7,20,0,0,1701, + 1702,7,18,0,0,1702,1703,5,95,0,0,1703,1704,7,3,0,0,1704,1705,7,16, + 0,0,1705,1706,7,18,0,0,1706,1707,7,2,0,0,1707,1708,7,4,0,0,1708, + 192,1,0,0,0,1709,1710,7,18,0,0,1710,1711,7,8,0,0,1711,1712,7,17, + 0,0,1712,1713,7,2,0,0,1713,1714,5,95,0,0,1714,1715,7,7,0,0,1715, + 1716,7,2,0,0,1716,1717,7,5,0,0,1717,1718,7,3,0,0,1718,1719,7,24, + 0,0,1719,194,1,0,0,0,1720,1721,7,3,0,0,1721,1722,7,15,0,0,1722,1723, + 7,10,0,0,1723,1724,7,17,0,0,1724,1725,7,3,0,0,1725,1726,7,14,0,0, + 1726,1727,7,24,0,0,1727,1728,5,95,0,0,1728,1729,7,4,0,0,1729,1730, + 7,3,0,0,1730,1731,7,18,0,0,1731,1732,7,2,0,0,1732,196,1,0,0,0,1733, + 1734,7,5,0,0,1734,1735,7,3,0,0,1735,1736,7,18,0,0,1736,1737,7,2, + 0,0,1737,1738,7,21,0,0,1738,1739,7,10,0,0,1739,1740,7,4,0,0,1740, + 1741,7,24,0,0,1741,1742,5,95,0,0,1742,1743,7,16,0,0,1743,1744,7, + 8,0,0,1744,1745,7,2,0,0,1745,1746,7,14,0,0,1746,1747,7,7,0,0,1747, + 198,1,0,0,0,1748,1749,7,18,0,0,1749,1750,7,8,0,0,1750,1751,7,17, + 0,0,1751,1752,7,2,0,0,1752,1753,5,95,0,0,1753,1754,7,16,0,0,1754, + 1755,7,8,0,0,1755,1756,7,2,0,0,1756,1757,7,14,0,0,1757,1758,7,7, + 0,0,1758,200,1,0,0,0,1759,1760,7,18,0,0,1760,1761,7,8,0,0,1761,1762, + 7,17,0,0,1762,1763,7,2,0,0,1763,1764,5,95,0,0,1764,1765,7,26,0,0, + 1765,1766,7,10,0,0,1766,1767,7,15,0,0,1767,1768,7,2,0,0,1768,202, + 1,0,0,0,1769,1770,7,18,0,0,1770,1771,7,4,0,0,1771,1772,7,3,0,0,1772, + 1773,7,8,0,0,1773,1774,7,15,0,0,1774,1775,7,8,0,0,1775,1776,7,15, + 0,0,1776,1777,7,21,0,0,1777,1778,5,95,0,0,1778,1779,7,7,0,0,1779, + 1780,7,3,0,0,1780,1781,7,18,0,0,1781,1782,7,3,0,0,1782,1783,5,95, + 0,0,1783,1784,7,1,0,0,1784,1785,7,8,0,0,1785,1786,7,26,0,0,1786, + 1787,7,2,0,0,1787,204,1,0,0,0,1788,1789,7,3,0,0,1789,1790,7,15,0, + 0,1790,1791,7,10,0,0,1791,1792,7,17,0,0,1792,1793,7,3,0,0,1793,1794, + 7,14,0,0,1794,1795,7,24,0,0,1795,1796,5,95,0,0,1796,1797,7,1,0,0, + 1797,1798,7,5,0,0,1798,1799,7,10,0,0,1799,1800,7,4,0,0,1800,1801, + 7,2,0,0,1801,1802,5,95,0,0,1802,1803,7,18,0,0,1803,1804,7,6,0,0, + 1804,1805,7,4,0,0,1805,1806,7,2,0,0,1806,1807,7,1,0,0,1807,1808, + 7,6,0,0,1808,1809,7,10,0,0,1809,1810,7,14,0,0,1810,1811,7,7,0,0, + 1811,206,1,0,0,0,1812,1813,7,3,0,0,1813,1814,7,13,0,0,1814,1815, + 7,13,0,0,1815,1816,7,2,0,0,1816,1817,7,15,0,0,1817,1818,7,7,0,0, + 1818,208,1,0,0,0,1819,1820,7,5,0,0,1820,1821,7,10,0,0,1821,1822, + 7,20,0,0,1822,1823,7,15,0,0,1823,1824,7,18,0,0,1824,1825,7,16,0, + 0,1825,1826,7,8,0,0,1826,1827,7,2,0,0,1827,1828,7,14,0,0,1828,1829, + 7,7,0,0,1829,210,1,0,0,0,1830,1831,7,1,0,0,1831,1832,7,6,0,0,1832, + 1833,7,10,0,0,1833,1834,7,11,0,0,1834,1835,7,5,0,0,1835,1836,7,10, + 0,0,1836,1837,7,20,0,0,1837,1838,7,15,0,0,1838,1839,7,18,0,0,1839, + 212,1,0,0,0,1840,1841,7,14,0,0,1841,1842,7,8,0,0,1842,1843,7,17, + 0,0,1843,1844,7,8,0,0,1844,1845,7,18,0,0,1845,214,1,0,0,0,1846,1847, + 7,20,0,0,1847,1848,7,1,0,0,1848,1849,7,2,0,0,1849,1850,7,10,0,0, + 1850,1851,7,18,0,0,1851,1852,7,6,0,0,1852,1853,7,2,0,0,1853,1854, + 7,4,0,0,1854,216,1,0,0,0,1855,1856,7,8,0,0,1856,1857,7,15,0,0,1857, + 1858,7,13,0,0,1858,1859,7,20,0,0,1859,1860,7,18,0,0,1860,218,1,0, + 0,0,1861,1862,7,10,0,0,1862,1863,7,20,0,0,1863,1864,7,18,0,0,1864, + 1865,7,13,0,0,1865,1866,7,20,0,0,1866,1867,7,18,0,0,1867,220,1,0, + 0,0,1868,1869,7,13,0,0,1869,1870,7,3,0,0,1870,1871,7,18,0,0,1871, + 1872,7,6,0,0,1872,222,1,0,0,0,1873,1874,7,5,0,0,1874,1875,7,3,0, + 0,1875,1876,7,1,0,0,1876,1877,7,2,0,0,1877,224,1,0,0,0,1878,1879, + 7,2,0,0,1879,1880,7,14,0,0,1880,1881,7,1,0,0,1881,1882,7,2,0,0,1882, + 226,1,0,0,0,1883,1884,7,8,0,0,1884,1885,7,15,0,0,1885,228,1,0,0, + 0,1886,1887,7,2,0,0,1887,1888,7,12,0,0,1888,1889,7,8,0,0,1889,1890, + 7,1,0,0,1890,1891,7,18,0,0,1891,1892,7,1,0,0,1892,230,1,0,0,0,1893, + 1894,7,21,0,0,1894,1895,7,2,0,0,1895,1896,7,10,0,0,1896,1897,7,8, + 0,0,1897,1898,7,13,0,0,1898,232,1,0,0,0,1899,1900,7,15,0,0,1900, + 1901,7,10,0,0,1901,1902,7,18,0,0,1902,234,1,0,0,0,1903,1904,7,10, + 0,0,1904,1905,7,4,0,0,1905,236,1,0,0,0,1906,1907,7,3,0,0,1907,1908, + 7,15,0,0,1908,1909,7,7,0,0,1909,238,1,0,0,0,1910,1911,7,12,0,0,1911, + 1912,7,10,0,0,1912,1913,7,4,0,0,1913,240,1,0,0,0,1914,1915,7,18, + 0,0,1915,1916,7,4,0,0,1916,1917,7,20,0,0,1917,1918,7,2,0,0,1918, + 242,1,0,0,0,1919,1920,7,16,0,0,1920,1921,7,3,0,0,1921,1922,7,14, + 0,0,1922,1923,7,1,0,0,1923,1924,7,2,0,0,1924,244,1,0,0,0,1925,1926, + 7,4,0,0,1926,1927,7,2,0,0,1927,1928,7,21,0,0,1928,1929,7,2,0,0,1929, + 1930,7,12,0,0,1930,1931,7,13,0,0,1931,246,1,0,0,0,1932,1933,7,4, + 0,0,1933,1934,7,2,0,0,1934,1935,7,21,0,0,1935,1936,7,2,0,0,1936, + 1937,7,12,0,0,1937,1938,5,95,0,0,1938,1939,7,17,0,0,1939,1940,7, + 3,0,0,1940,1941,7,18,0,0,1941,1942,7,5,0,0,1942,1943,7,6,0,0,1943, + 248,1,0,0,0,1944,1945,7,5,0,0,1945,1946,7,10,0,0,1946,1947,7,15, + 0,0,1947,1948,7,19,0,0,1948,1949,7,2,0,0,1949,1950,7,4,0,0,1950, + 1951,7,18,0,0,1951,1952,5,95,0,0,1952,1953,7,18,0,0,1953,1954,7, + 26,0,0,1954,250,1,0,0,0,1955,1956,7,7,0,0,1956,1957,7,3,0,0,1957, + 1958,7,18,0,0,1958,1959,7,2,0,0,1959,1960,7,18,0,0,1960,1961,7,8, + 0,0,1961,1962,7,17,0,0,1962,1963,7,2,0,0,1963,252,1,0,0,0,1964,1965, + 7,7,0,0,1965,1966,7,3,0,0,1966,1967,7,24,0,0,1967,254,1,0,0,0,1968, + 1969,7,7,0,0,1969,1970,7,3,0,0,1970,1971,7,24,0,0,1971,1972,5,95, + 0,0,1972,1973,7,6,0,0,1973,1974,7,10,0,0,1974,1975,7,20,0,0,1975, + 1976,7,4,0,0,1976,256,1,0,0,0,1977,1978,7,7,0,0,1978,1979,7,3,0, + 0,1979,1980,7,24,0,0,1980,1981,5,95,0,0,1981,1982,7,17,0,0,1982, + 1983,7,8,0,0,1983,1984,7,5,0,0,1984,1985,7,4,0,0,1985,1986,7,10, + 0,0,1986,1987,7,1,0,0,1987,1988,7,2,0,0,1988,1989,7,5,0,0,1989,1990, + 7,10,0,0,1990,1991,7,15,0,0,1991,1992,7,7,0,0,1992,258,1,0,0,0,1993, + 1994,7,7,0,0,1994,1995,7,3,0,0,1995,1996,7,24,0,0,1996,1997,5,95, + 0,0,1997,1998,7,17,0,0,1998,1999,7,8,0,0,1999,2000,7,15,0,0,2000, + 2001,7,20,0,0,2001,2002,7,18,0,0,2002,2003,7,2,0,0,2003,260,1,0, + 0,0,2004,2005,7,7,0,0,2005,2006,7,3,0,0,2006,2007,7,24,0,0,2007, + 2008,5,95,0,0,2008,2009,7,10,0,0,2009,2010,7,16,0,0,2010,2011,5, + 95,0,0,2011,2012,7,24,0,0,2012,2013,7,2,0,0,2013,2014,7,3,0,0,2014, + 2015,7,4,0,0,2015,262,1,0,0,0,2016,2017,7,7,0,0,2017,2018,7,3,0, + 0,2018,2019,7,24,0,0,2019,2020,5,95,0,0,2020,2021,7,1,0,0,2021,2022, + 7,2,0,0,2022,2023,7,5,0,0,2023,2024,7,10,0,0,2024,2025,7,15,0,0, + 2025,2026,7,7,0,0,2026,264,1,0,0,0,2027,2028,7,6,0,0,2028,2029,7, + 10,0,0,2029,2030,7,20,0,0,2030,2031,7,4,0,0,2031,266,1,0,0,0,2032, + 2033,7,6,0,0,2033,2034,7,10,0,0,2034,2035,7,20,0,0,2035,2036,7,4, + 0,0,2036,2037,5,95,0,0,2037,2038,7,17,0,0,2038,2039,7,8,0,0,2039, + 2040,7,5,0,0,2040,2041,7,4,0,0,2041,2042,7,10,0,0,2042,2043,7,1, + 0,0,2043,2044,7,2,0,0,2044,2045,7,5,0,0,2045,2046,7,10,0,0,2046, + 2047,7,15,0,0,2047,2048,7,7,0,0,2048,268,1,0,0,0,2049,2050,7,6,0, + 0,2050,2051,7,10,0,0,2051,2052,7,20,0,0,2052,2053,7,4,0,0,2053,2054, + 5,95,0,0,2054,2055,7,17,0,0,2055,2056,7,8,0,0,2056,2057,7,15,0,0, + 2057,2058,7,20,0,0,2058,2059,7,18,0,0,2059,2060,7,2,0,0,2060,270, + 1,0,0,0,2061,2062,7,6,0,0,2062,2063,7,10,0,0,2063,2064,7,20,0,0, + 2064,2065,7,4,0,0,2065,2066,5,95,0,0,2066,2067,7,10,0,0,2067,2068, + 7,16,0,0,2068,2069,5,95,0,0,2069,2070,7,7,0,0,2070,2071,7,3,0,0, + 2071,2072,7,24,0,0,2072,272,1,0,0,0,2073,2074,7,6,0,0,2074,2075, + 7,10,0,0,2075,2076,7,20,0,0,2076,2077,7,4,0,0,2077,2078,5,95,0,0, + 2078,2079,7,1,0,0,2079,2080,7,2,0,0,2080,2081,7,5,0,0,2081,2082, + 7,10,0,0,2082,2083,7,15,0,0,2083,2084,7,7,0,0,2084,274,1,0,0,0,2085, + 2086,7,8,0,0,2086,2087,7,15,0,0,2087,2088,7,18,0,0,2088,2089,7,2, + 0,0,2089,2090,7,4,0,0,2090,2091,7,19,0,0,2091,2092,7,3,0,0,2092, + 2093,7,14,0,0,2093,276,1,0,0,0,2094,2095,7,17,0,0,2095,2096,7,8, + 0,0,2096,2097,7,5,0,0,2097,2098,7,4,0,0,2098,2099,7,10,0,0,2099, + 2100,7,1,0,0,2100,2101,7,2,0,0,2101,2102,7,5,0,0,2102,2103,7,10, + 0,0,2103,2104,7,15,0,0,2104,2105,7,7,0,0,2105,278,1,0,0,0,2106,2107, + 7,17,0,0,2107,2108,7,8,0,0,2108,2109,7,14,0,0,2109,2110,7,14,0,0, + 2110,2111,7,8,0,0,2111,2112,7,1,0,0,2112,2113,7,2,0,0,2113,2114, + 7,5,0,0,2114,2115,7,10,0,0,2115,2116,7,15,0,0,2116,2117,7,7,0,0, + 2117,280,1,0,0,0,2118,2119,7,17,0,0,2119,2120,7,8,0,0,2120,2121, + 7,15,0,0,2121,2122,7,20,0,0,2122,2123,7,18,0,0,2123,2124,7,2,0,0, + 2124,282,1,0,0,0,2125,2126,7,17,0,0,2126,2127,7,8,0,0,2127,2128, + 7,15,0,0,2128,2129,7,20,0,0,2129,2130,7,18,0,0,2130,2131,7,2,0,0, + 2131,2132,5,95,0,0,2132,2133,7,17,0,0,2133,2134,7,8,0,0,2134,2135, + 7,5,0,0,2135,2136,7,4,0,0,2136,2137,7,10,0,0,2137,2138,7,1,0,0,2138, + 2139,7,2,0,0,2139,2140,7,5,0,0,2140,2141,7,10,0,0,2141,2142,7,15, + 0,0,2142,2143,7,7,0,0,2143,284,1,0,0,0,2144,2145,7,17,0,0,2145,2146, + 7,8,0,0,2146,2147,7,15,0,0,2147,2148,7,20,0,0,2148,2149,7,18,0,0, + 2149,2150,7,2,0,0,2150,2151,5,95,0,0,2151,2152,7,10,0,0,2152,2153, + 7,16,0,0,2153,2154,5,95,0,0,2154,2155,7,7,0,0,2155,2156,7,3,0,0, + 2156,2157,7,24,0,0,2157,286,1,0,0,0,2158,2159,7,17,0,0,2159,2160, + 7,8,0,0,2160,2161,7,15,0,0,2161,2162,7,20,0,0,2162,2163,7,18,0,0, + 2163,2164,7,2,0,0,2164,2165,5,95,0,0,2165,2166,7,10,0,0,2166,2167, + 7,16,0,0,2167,2168,5,95,0,0,2168,2169,7,6,0,0,2169,2170,7,10,0,0, + 2170,2171,7,20,0,0,2171,2172,7,4,0,0,2172,288,1,0,0,0,2173,2174, + 7,17,0,0,2174,2175,7,8,0,0,2175,2176,7,15,0,0,2176,2177,7,20,0,0, + 2177,2178,7,18,0,0,2178,2179,7,2,0,0,2179,2180,5,95,0,0,2180,2181, + 7,1,0,0,2181,2182,7,2,0,0,2182,2183,7,5,0,0,2183,2184,7,10,0,0,2184, + 2185,7,15,0,0,2185,2186,7,7,0,0,2186,290,1,0,0,0,2187,2188,7,17, + 0,0,2188,2189,7,10,0,0,2189,2190,7,15,0,0,2190,2191,7,18,0,0,2191, + 2192,7,6,0,0,2192,292,1,0,0,0,2193,2194,7,17,0,0,2194,2195,7,10, + 0,0,2195,2196,7,15,0,0,2196,2197,7,18,0,0,2197,2198,7,6,0,0,2198, + 2199,5,95,0,0,2199,2200,7,10,0,0,2200,2201,7,16,0,0,2201,2202,5, + 95,0,0,2202,2203,7,24,0,0,2203,2204,7,2,0,0,2204,2205,7,3,0,0,2205, + 2206,7,4,0,0,2206,294,1,0,0,0,2207,2208,7,23,0,0,2208,2209,7,20, + 0,0,2209,2210,7,3,0,0,2210,2211,7,4,0,0,2211,2212,7,18,0,0,2212, + 2213,7,2,0,0,2213,2214,7,4,0,0,2214,296,1,0,0,0,2215,2216,7,1,0, + 0,2216,2217,7,2,0,0,2217,2218,7,5,0,0,2218,2219,7,10,0,0,2219,2220, + 7,15,0,0,2220,2221,7,7,0,0,2221,298,1,0,0,0,2222,2223,7,1,0,0,2223, + 2224,7,2,0,0,2224,2225,7,5,0,0,2225,2226,7,10,0,0,2226,2227,7,15, + 0,0,2227,2228,7,7,0,0,2228,2229,5,95,0,0,2229,2230,7,17,0,0,2230, + 2231,7,8,0,0,2231,2232,7,5,0,0,2232,2233,7,4,0,0,2233,2234,7,10, + 0,0,2234,2235,7,1,0,0,2235,2236,7,2,0,0,2236,2237,7,5,0,0,2237,2238, + 7,10,0,0,2238,2239,7,15,0,0,2239,2240,7,7,0,0,2240,300,1,0,0,0,2241, + 2242,7,1,0,0,2242,2243,7,2,0,0,2243,2244,7,5,0,0,2244,2245,7,10, + 0,0,2245,2246,7,15,0,0,2246,2247,7,7,0,0,2247,2248,5,95,0,0,2248, + 2249,7,10,0,0,2249,2250,7,16,0,0,2250,2251,5,95,0,0,2251,2252,7, + 17,0,0,2252,2253,7,8,0,0,2253,2254,7,15,0,0,2254,2255,7,20,0,0,2255, + 2256,7,18,0,0,2256,2257,7,2,0,0,2257,302,1,0,0,0,2258,2259,7,11, + 0,0,2259,2260,7,2,0,0,2260,2261,7,2,0,0,2261,2262,7,22,0,0,2262, + 304,1,0,0,0,2263,2264,7,11,0,0,2264,2265,7,2,0,0,2265,2266,7,2,0, + 0,2266,2267,7,22,0,0,2267,2268,5,95,0,0,2268,2269,7,10,0,0,2269, + 2270,7,16,0,0,2270,2271,5,95,0,0,2271,2272,7,24,0,0,2272,2273,7, + 2,0,0,2273,2274,7,3,0,0,2274,2275,7,4,0,0,2275,306,1,0,0,0,2276, + 2277,7,24,0,0,2277,2278,7,2,0,0,2278,2279,7,3,0,0,2279,2280,7,4, + 0,0,2280,308,1,0,0,0,2281,2282,7,24,0,0,2282,2283,7,2,0,0,2283,2284, + 7,3,0,0,2284,2285,7,4,0,0,2285,2286,5,95,0,0,2286,2287,7,17,0,0, + 2287,2288,7,10,0,0,2288,2289,7,15,0,0,2289,2290,7,18,0,0,2290,2291, + 7,6,0,0,2291,310,1,0,0,0,2292,2293,7,7,0,0,2293,2294,7,3,0,0,2294, + 2295,7,18,0,0,2295,2296,7,3,0,0,2296,2297,7,17,0,0,2297,2298,7,10, + 0,0,2298,2299,7,7,0,0,2299,2300,7,2,0,0,2300,2301,7,14,0,0,2301, + 312,1,0,0,0,2302,2303,7,14,0,0,2303,2304,7,10,0,0,2304,2305,7,10, + 0,0,2305,2306,7,22,0,0,2306,2307,7,20,0,0,2307,2308,7,13,0,0,2308, + 314,1,0,0,0,2309,2310,7,1,0,0,2310,2311,7,3,0,0,2311,2312,7,19,0, + 0,2312,2313,7,2,0,0,2313,2314,7,7,0,0,2314,2315,7,1,0,0,2315,2316, + 7,2,0,0,2316,2317,7,3,0,0,2317,2318,7,4,0,0,2318,2319,7,5,0,0,2319, + 2320,7,6,0,0,2320,316,1,0,0,0,2321,2322,7,8,0,0,2322,2323,7,15,0, + 0,2323,2324,7,18,0,0,2324,318,1,0,0,0,2325,2326,7,8,0,0,2326,2327, + 7,15,0,0,2327,2328,7,18,0,0,2328,2329,7,2,0,0,2329,2330,7,21,0,0, + 2330,2331,7,2,0,0,2331,2332,7,4,0,0,2332,320,1,0,0,0,2333,2334,7, + 7,0,0,2334,2335,7,10,0,0,2335,2336,7,20,0,0,2336,2337,7,9,0,0,2337, + 2338,7,14,0,0,2338,2339,7,2,0,0,2339,322,1,0,0,0,2340,2341,7,14, + 0,0,2341,2342,7,10,0,0,2342,2343,7,15,0,0,2343,2344,7,21,0,0,2344, + 324,1,0,0,0,2345,2346,7,16,0,0,2346,2347,7,14,0,0,2347,2348,7,10, + 0,0,2348,2349,7,3,0,0,2349,2350,7,18,0,0,2350,326,1,0,0,0,2351,2352, + 7,1,0,0,2352,2353,7,18,0,0,2353,2354,7,4,0,0,2354,2355,7,8,0,0,2355, + 2356,7,15,0,0,2356,2357,7,21,0,0,2357,328,1,0,0,0,2358,2359,7,9, + 0,0,2359,2360,7,10,0,0,2360,2361,7,10,0,0,2361,2362,7,14,0,0,2362, + 2363,7,2,0,0,2363,2364,7,3,0,0,2364,2365,7,15,0,0,2365,330,1,0,0, + 0,2366,2367,7,8,0,0,2367,2368,7,13,0,0,2368,332,1,0,0,0,2369,2370, + 5,124,0,0,2370,334,1,0,0,0,2371,2372,5,44,0,0,2372,336,1,0,0,0,2373, + 2374,5,46,0,0,2374,338,1,0,0,0,2375,2376,5,61,0,0,2376,340,1,0,0, + 0,2377,2378,5,61,0,0,2378,2379,5,61,0,0,2379,342,1,0,0,0,2380,2381, + 5,62,0,0,2381,344,1,0,0,0,2382,2383,5,60,0,0,2383,346,1,0,0,0,2384, + 2385,5,60,0,0,2385,2386,5,61,0,0,2386,348,1,0,0,0,2387,2388,5,62, + 0,0,2388,2389,5,61,0,0,2389,350,1,0,0,0,2390,2391,5,33,0,0,2391, + 2392,5,61,0,0,2392,352,1,0,0,0,2393,2394,5,43,0,0,2394,354,1,0,0, + 0,2395,2396,5,45,0,0,2396,356,1,0,0,0,2397,2398,5,42,0,0,2398,358, + 1,0,0,0,2399,2400,5,47,0,0,2400,360,1,0,0,0,2401,2402,5,37,0,0,2402, + 362,1,0,0,0,2403,2404,5,33,0,0,2404,364,1,0,0,0,2405,2406,5,58,0, + 0,2406,366,1,0,0,0,2407,2408,5,40,0,0,2408,368,1,0,0,0,2409,2410, + 5,41,0,0,2410,370,1,0,0,0,2411,2412,5,91,0,0,2412,372,1,0,0,0,2413, + 2414,5,93,0,0,2414,374,1,0,0,0,2415,2416,5,123,0,0,2416,376,1,0, + 0,0,2417,2418,5,125,0,0,2418,378,1,0,0,0,2419,2420,5,39,0,0,2420, + 380,1,0,0,0,2421,2422,5,34,0,0,2422,382,1,0,0,0,2423,2424,5,96,0, + 0,2424,384,1,0,0,0,2425,2426,5,45,0,0,2426,2427,5,62,0,0,2427,386, + 1,0,0,0,2428,2429,5,126,0,0,2429,388,1,0,0,0,2430,2431,5,38,0,0, + 2431,390,1,0,0,0,2432,2433,5,94,0,0,2433,392,1,0,0,0,2434,2435,7, + 3,0,0,2435,2436,7,19,0,0,2436,2437,7,21,0,0,2437,394,1,0,0,0,2438, + 2439,7,5,0,0,2439,2440,7,10,0,0,2440,2441,7,20,0,0,2441,2442,7,15, + 0,0,2442,2443,7,18,0,0,2443,396,1,0,0,0,2444,2445,7,7,0,0,2445,2446, + 7,8,0,0,2446,2447,7,1,0,0,2447,2448,7,18,0,0,2448,2449,7,8,0,0,2449, + 2450,7,15,0,0,2450,2451,7,5,0,0,2451,2452,7,18,0,0,2452,2453,5,95, + 0,0,2453,2454,7,5,0,0,2454,2455,7,10,0,0,2455,2456,7,20,0,0,2456, + 2457,7,15,0,0,2457,2458,7,18,0,0,2458,398,1,0,0,0,2459,2460,7,7, + 0,0,2460,2461,7,8,0,0,2461,2462,7,1,0,0,2462,2463,7,18,0,0,2463, + 2464,7,8,0,0,2464,2465,7,15,0,0,2465,2466,7,5,0,0,2466,2467,7,18, + 0,0,2467,2468,5,95,0,0,2468,2469,7,5,0,0,2469,2470,7,10,0,0,2470, + 2471,7,20,0,0,2471,2472,7,15,0,0,2472,2473,7,18,0,0,2473,2474,5, + 95,0,0,2474,2475,7,3,0,0,2475,2476,7,13,0,0,2476,2477,7,13,0,0,2477, + 2478,7,4,0,0,2478,2479,7,10,0,0,2479,2480,7,12,0,0,2480,400,1,0, + 0,0,2481,2482,7,2,0,0,2482,2483,7,1,0,0,2483,2484,7,18,0,0,2484, + 2485,7,7,0,0,2485,2486,7,5,0,0,2486,402,1,0,0,0,2487,2488,7,2,0, + 0,2488,2489,7,1,0,0,2489,2490,7,18,0,0,2490,2491,7,7,0,0,2491,2492, + 7,5,0,0,2492,2493,5,95,0,0,2493,2494,7,2,0,0,2494,2495,7,4,0,0,2495, + 2496,7,4,0,0,2496,2497,7,10,0,0,2497,2498,7,4,0,0,2498,404,1,0,0, + 0,2499,2500,7,17,0,0,2500,2501,7,3,0,0,2501,2502,7,12,0,0,2502,406, + 1,0,0,0,2503,2504,7,17,0,0,2504,2505,7,2,0,0,2505,2506,7,3,0,0,2506, + 2507,7,15,0,0,2507,408,1,0,0,0,2508,2509,7,17,0,0,2509,2510,7,2, + 0,0,2510,2511,7,7,0,0,2511,2512,7,8,0,0,2512,2513,7,3,0,0,2513,2514, + 7,15,0,0,2514,410,1,0,0,0,2515,2516,7,17,0,0,2516,2517,7,8,0,0,2517, + 2518,7,15,0,0,2518,412,1,0,0,0,2519,2520,7,17,0,0,2520,2521,7,10, + 0,0,2521,2522,7,7,0,0,2522,2523,7,2,0,0,2523,414,1,0,0,0,2524,2525, + 7,4,0,0,2525,2526,7,3,0,0,2526,2527,7,15,0,0,2527,2528,7,21,0,0, + 2528,2529,7,2,0,0,2529,416,1,0,0,0,2530,2531,7,1,0,0,2531,2532,7, + 18,0,0,2532,2533,7,7,0,0,2533,2534,7,2,0,0,2534,2535,7,19,0,0,2535, + 418,1,0,0,0,2536,2537,7,1,0,0,2537,2538,7,18,0,0,2538,2539,7,7,0, + 0,2539,2540,7,2,0,0,2540,2541,7,19,0,0,2541,2542,7,13,0,0,2542,420, + 1,0,0,0,2543,2544,7,1,0,0,2544,2545,7,20,0,0,2545,2546,7,17,0,0, + 2546,422,1,0,0,0,2547,2548,7,1,0,0,2548,2549,7,20,0,0,2549,2550, + 7,17,0,0,2550,2551,7,1,0,0,2551,2552,7,23,0,0,2552,424,1,0,0,0,2553, + 2554,7,19,0,0,2554,2555,7,3,0,0,2555,2556,7,4,0,0,2556,2557,5,95, + 0,0,2557,2558,7,1,0,0,2558,2559,7,3,0,0,2559,2560,7,17,0,0,2560, + 2561,7,13,0,0,2561,426,1,0,0,0,2562,2563,7,19,0,0,2563,2564,7,3, + 0,0,2564,2565,7,4,0,0,2565,2566,5,95,0,0,2566,2567,7,13,0,0,2567, + 2568,7,10,0,0,2568,2569,7,13,0,0,2569,428,1,0,0,0,2570,2571,7,1, + 0,0,2571,2572,7,18,0,0,2572,2573,7,7,0,0,2573,2574,7,7,0,0,2574, + 2575,7,2,0,0,2575,2576,7,19,0,0,2576,2577,5,95,0,0,2577,2578,7,1, + 0,0,2578,2579,7,3,0,0,2579,2580,7,17,0,0,2580,2581,7,13,0,0,2581, + 430,1,0,0,0,2582,2583,7,1,0,0,2583,2584,7,18,0,0,2584,2585,7,7,0, + 0,2585,2586,7,7,0,0,2586,2587,7,2,0,0,2587,2588,7,19,0,0,2588,2589, + 5,95,0,0,2589,2590,7,13,0,0,2590,2591,7,10,0,0,2591,2592,7,13,0, + 0,2592,432,1,0,0,0,2593,2594,7,13,0,0,2594,2595,7,2,0,0,2595,2596, + 7,4,0,0,2596,2597,7,5,0,0,2597,434,1,0,0,0,2598,2599,7,13,0,0,2599, + 2600,7,2,0,0,2600,2601,7,4,0,0,2601,2602,7,5,0,0,2602,2603,7,2,0, + 0,2603,2604,7,15,0,0,2604,2605,7,18,0,0,2605,2606,7,8,0,0,2606,2607, + 7,14,0,0,2607,2608,7,2,0,0,2608,436,1,0,0,0,2609,2610,7,13,0,0,2610, + 2611,7,2,0,0,2611,2612,7,4,0,0,2612,2613,7,5,0,0,2613,2614,7,2,0, + 0,2614,2615,7,15,0,0,2615,2616,7,18,0,0,2616,2617,7,8,0,0,2617,2618, + 7,14,0,0,2618,2619,7,2,0,0,2619,2620,5,95,0,0,2620,2621,7,3,0,0, + 2621,2622,7,13,0,0,2622,2623,7,13,0,0,2623,2624,7,4,0,0,2624,2625, + 7,10,0,0,2625,2626,7,12,0,0,2626,438,1,0,0,0,2627,2628,7,2,0,0,2628, + 2629,7,3,0,0,2629,2630,7,4,0,0,2630,2631,7,14,0,0,2631,2632,7,8, + 0,0,2632,2633,7,2,0,0,2633,2634,7,1,0,0,2634,2635,7,18,0,0,2635, + 440,1,0,0,0,2636,2637,7,14,0,0,2637,2638,7,3,0,0,2638,2639,7,18, + 0,0,2639,2640,7,2,0,0,2640,2641,7,1,0,0,2641,2642,7,18,0,0,2642, + 442,1,0,0,0,2643,2644,7,18,0,0,2644,2645,7,3,0,0,2645,2646,7,22, + 0,0,2646,2647,7,2,0,0,2647,444,1,0,0,0,2648,2649,7,14,0,0,2649,2650, + 7,8,0,0,2650,2651,7,1,0,0,2651,2652,7,18,0,0,2652,446,1,0,0,0,2653, + 2654,7,19,0,0,2654,2655,7,3,0,0,2655,2656,7,14,0,0,2656,2657,7,20, + 0,0,2657,2658,7,2,0,0,2658,2659,7,1,0,0,2659,448,1,0,0,0,2660,2661, + 7,13,0,0,2661,2662,7,2,0,0,2662,2663,7,4,0,0,2663,2664,5,95,0,0, + 2664,2665,7,7,0,0,2665,2666,7,3,0,0,2666,2667,7,24,0,0,2667,450, + 1,0,0,0,2668,2669,7,13,0,0,2669,2670,7,2,0,0,2670,2671,7,4,0,0,2671, + 2672,5,95,0,0,2672,2673,7,6,0,0,2673,2674,7,10,0,0,2674,2675,7,20, + 0,0,2675,2676,7,4,0,0,2676,452,1,0,0,0,2677,2678,7,13,0,0,2678,2679, + 7,2,0,0,2679,2680,7,4,0,0,2680,2681,5,95,0,0,2681,2682,7,17,0,0, + 2682,2683,7,8,0,0,2683,2684,7,15,0,0,2684,2685,7,20,0,0,2685,2686, + 7,18,0,0,2686,2687,7,2,0,0,2687,454,1,0,0,0,2688,2689,7,13,0,0,2689, + 2690,7,2,0,0,2690,2691,7,4,0,0,2691,2692,5,95,0,0,2692,2693,7,1, + 0,0,2693,2694,7,2,0,0,2694,2695,7,5,0,0,2695,2696,7,10,0,0,2696, + 2697,7,15,0,0,2697,2698,7,7,0,0,2698,456,1,0,0,0,2699,2700,7,4,0, + 0,2700,2701,7,3,0,0,2701,2702,7,18,0,0,2702,2703,7,2,0,0,2703,458, + 1,0,0,0,2704,2705,7,1,0,0,2705,2706,7,13,0,0,2706,2707,7,3,0,0,2707, + 2708,7,4,0,0,2708,2709,7,22,0,0,2709,2710,7,14,0,0,2710,2711,7,8, + 0,0,2711,2712,7,15,0,0,2712,2713,7,2,0,0,2713,460,1,0,0,0,2714,2715, + 7,5,0,0,2715,462,1,0,0,0,2716,2717,7,7,0,0,2717,2718,7,5,0,0,2718, + 464,1,0,0,0,2719,2720,7,4,0,0,2720,2721,7,10,0,0,2721,2722,7,11, + 0,0,2722,2723,5,95,0,0,2723,2724,7,15,0,0,2724,2725,7,20,0,0,2725, + 2726,7,17,0,0,2726,2727,7,9,0,0,2727,2728,7,2,0,0,2728,2729,7,4, + 0,0,2729,466,1,0,0,0,2730,2731,7,4,0,0,2731,2732,7,3,0,0,2732,2733, + 7,15,0,0,2733,2734,7,22,0,0,2734,468,1,0,0,0,2735,2736,7,7,0,0,2736, + 2737,7,2,0,0,2737,2738,7,15,0,0,2738,2739,7,1,0,0,2739,2740,7,2, + 0,0,2740,2741,5,95,0,0,2741,2742,7,4,0,0,2742,2743,7,3,0,0,2743, + 2744,7,15,0,0,2744,2745,7,22,0,0,2745,470,1,0,0,0,2746,2747,7,13, + 0,0,2747,2748,7,2,0,0,2748,2749,7,4,0,0,2749,2750,7,5,0,0,2750,2751, + 7,2,0,0,2751,2752,7,15,0,0,2752,2753,7,18,0,0,2753,2754,5,95,0,0, + 2754,2755,7,4,0,0,2755,2756,7,3,0,0,2756,2757,7,15,0,0,2757,2758, + 7,22,0,0,2758,472,1,0,0,0,2759,2760,7,5,0,0,2760,2761,7,20,0,0,2761, + 2762,7,17,0,0,2762,2763,7,2,0,0,2763,2764,5,95,0,0,2764,2765,7,7, + 0,0,2765,2766,7,8,0,0,2766,2767,7,1,0,0,2767,2768,7,18,0,0,2768, + 474,1,0,0,0,2769,2770,7,16,0,0,2770,2771,7,8,0,0,2771,2772,7,4,0, + 0,2772,2773,7,1,0,0,2773,2774,7,18,0,0,2774,476,1,0,0,0,2775,2776, + 7,14,0,0,2776,2777,7,3,0,0,2777,2778,7,1,0,0,2778,2779,7,18,0,0, + 2779,478,1,0,0,0,2780,2781,7,15,0,0,2781,2782,7,18,0,0,2782,2783, + 7,6,0,0,2783,480,1,0,0,0,2784,2785,7,15,0,0,2785,2786,7,18,0,0,2786, + 2787,7,8,0,0,2787,2788,7,14,0,0,2788,2789,7,2,0,0,2789,482,1,0,0, + 0,2790,2791,7,3,0,0,2791,2792,7,7,0,0,2792,2793,7,7,0,0,2793,484, + 1,0,0,0,2794,2795,7,1,0,0,2795,2796,7,20,0,0,2796,2797,7,9,0,0,2797, + 2798,7,18,0,0,2798,2799,7,4,0,0,2799,2800,7,3,0,0,2800,2801,7,5, + 0,0,2801,2802,7,18,0,0,2802,486,1,0,0,0,2803,2804,7,17,0,0,2804, + 2805,7,20,0,0,2805,2806,7,14,0,0,2806,2807,7,18,0,0,2807,2808,7, + 8,0,0,2808,2809,7,13,0,0,2809,2810,7,14,0,0,2810,2811,7,24,0,0,2811, + 488,1,0,0,0,2812,2813,7,7,0,0,2813,2814,7,8,0,0,2814,2815,7,19,0, + 0,2815,2816,7,8,0,0,2816,2817,7,7,0,0,2817,2818,7,2,0,0,2818,490, + 1,0,0,0,2819,2820,7,3,0,0,2820,2821,7,9,0,0,2821,2822,7,1,0,0,2822, + 492,1,0,0,0,2823,2824,7,5,0,0,2824,2825,7,9,0,0,2825,2826,7,4,0, + 0,2826,2827,7,18,0,0,2827,494,1,0,0,0,2828,2829,7,5,0,0,2829,2830, + 7,2,0,0,2830,2831,7,8,0,0,2831,2832,7,14,0,0,2832,496,1,0,0,0,2833, + 2834,7,5,0,0,2834,2835,7,2,0,0,2835,2836,7,8,0,0,2836,2837,7,14, + 0,0,2837,2838,7,8,0,0,2838,2839,7,15,0,0,2839,2840,7,21,0,0,2840, + 498,1,0,0,0,2841,2842,7,5,0,0,2842,2843,7,10,0,0,2843,2844,7,15, + 0,0,2844,2845,7,19,0,0,2845,500,1,0,0,0,2846,2847,7,5,0,0,2847,2848, + 7,4,0,0,2848,2849,7,5,0,0,2849,2850,5,51,0,0,2850,2851,5,50,0,0, + 2851,502,1,0,0,0,2852,2853,7,2,0,0,2853,504,1,0,0,0,2854,2855,7, + 2,0,0,2855,2856,7,12,0,0,2856,2857,7,13,0,0,2857,506,1,0,0,0,2858, + 2859,7,2,0,0,2859,2860,7,12,0,0,2860,2861,7,13,0,0,2861,2862,7,17, + 0,0,2862,2863,5,49,0,0,2863,508,1,0,0,0,2864,2865,7,16,0,0,2865, + 2866,7,14,0,0,2866,2867,7,10,0,0,2867,2868,7,10,0,0,2868,2869,7, + 4,0,0,2869,510,1,0,0,0,2870,2871,7,14,0,0,2871,2872,7,15,0,0,2872, + 512,1,0,0,0,2873,2874,7,14,0,0,2874,2875,7,10,0,0,2875,2876,7,21, + 0,0,2876,514,1,0,0,0,2877,2879,7,27,0,0,2878,2877,1,0,0,0,2879,2880, + 1,0,0,0,2880,2878,1,0,0,0,2880,2881,1,0,0,0,2881,2888,1,0,0,0,2882, + 2884,5,46,0,0,2883,2885,7,27,0,0,2884,2883,1,0,0,0,2885,2886,1,0, + 0,0,2886,2884,1,0,0,0,2886,2887,1,0,0,0,2887,2889,1,0,0,0,2888,2882, + 1,0,0,0,2888,2889,1,0,0,0,2889,2891,1,0,0,0,2890,2878,1,0,0,0,2890, + 2891,1,0,0,0,2891,2898,1,0,0,0,2892,2893,7,14,0,0,2893,2894,7,10, + 0,0,2894,2899,7,21,0,0,2895,2896,7,14,0,0,2896,2897,7,10,0,0,2897, + 2899,7,21,0,0,2898,2892,1,0,0,0,2898,2895,1,0,0,0,2899,2901,1,0, + 0,0,2900,2902,7,27,0,0,2901,2900,1,0,0,0,2902,2903,1,0,0,0,2903, + 2901,1,0,0,0,2903,2904,1,0,0,0,2904,2911,1,0,0,0,2905,2907,5,46, + 0,0,2906,2908,7,27,0,0,2907,2906,1,0,0,0,2908,2909,1,0,0,0,2909, + 2907,1,0,0,0,2909,2910,1,0,0,0,2910,2912,1,0,0,0,2911,2905,1,0,0, + 0,2911,2912,1,0,0,0,2912,516,1,0,0,0,2913,2914,7,17,0,0,2914,2915, + 7,10,0,0,2915,2916,7,7,0,0,2916,518,1,0,0,0,2917,2918,7,17,0,0,2918, + 2919,7,10,0,0,2919,2920,7,7,0,0,2920,2921,7,20,0,0,2921,2922,7,14, + 0,0,2922,2923,7,20,0,0,2923,2924,7,1,0,0,2924,520,1,0,0,0,2925,2926, + 7,13,0,0,2926,2927,7,8,0,0,2927,522,1,0,0,0,2928,2929,7,13,0,0,2929, + 2930,7,10,0,0,2930,2931,7,1,0,0,2931,2932,7,8,0,0,2932,2933,7,18, + 0,0,2933,2934,7,8,0,0,2934,2935,7,10,0,0,2935,2936,7,15,0,0,2936, + 524,1,0,0,0,2937,2938,7,13,0,0,2938,2939,7,10,0,0,2939,2940,7,11, + 0,0,2940,526,1,0,0,0,2941,2942,7,13,0,0,2942,2943,7,10,0,0,2943, + 2944,7,11,0,0,2944,2945,7,2,0,0,2945,2946,7,4,0,0,2946,528,1,0,0, + 0,2947,2948,7,4,0,0,2948,2949,7,3,0,0,2949,2950,7,15,0,0,2950,2951, + 7,7,0,0,2951,530,1,0,0,0,2952,2953,7,4,0,0,2953,2954,7,10,0,0,2954, + 2955,7,20,0,0,2955,2956,7,15,0,0,2956,2957,7,7,0,0,2957,532,1,0, + 0,0,2958,2959,7,1,0,0,2959,2960,7,8,0,0,2960,2961,7,21,0,0,2961, + 2962,7,15,0,0,2962,534,1,0,0,0,2963,2964,7,1,0,0,2964,2965,7,23, + 0,0,2965,2966,7,4,0,0,2966,2967,7,18,0,0,2967,536,1,0,0,0,2968,2969, + 7,18,0,0,2969,2970,7,4,0,0,2970,2971,7,20,0,0,2971,2972,7,15,0,0, + 2972,2973,7,5,0,0,2973,2974,7,3,0,0,2974,2975,7,18,0,0,2975,2976, + 7,2,0,0,2976,538,1,0,0,0,2977,2978,7,4,0,0,2978,2979,7,8,0,0,2979, + 2980,7,15,0,0,2980,2981,7,18,0,0,2981,540,1,0,0,0,2982,2983,7,1, + 0,0,2983,2984,7,8,0,0,2984,2985,7,21,0,0,2985,2986,7,15,0,0,2986, + 2987,7,20,0,0,2987,2988,7,17,0,0,2988,542,1,0,0,0,2989,2990,7,3, + 0,0,2990,2991,7,5,0,0,2991,2992,7,10,0,0,2992,2993,7,1,0,0,2993, + 544,1,0,0,0,2994,2995,7,3,0,0,2995,2996,7,1,0,0,2996,2997,7,8,0, + 0,2997,2998,7,15,0,0,2998,546,1,0,0,0,2999,3000,7,3,0,0,3000,3001, + 7,18,0,0,3001,3002,7,3,0,0,3002,3003,7,15,0,0,3003,548,1,0,0,0,3004, + 3005,7,3,0,0,3005,3006,7,18,0,0,3006,3007,7,3,0,0,3007,3008,7,15, + 0,0,3008,3009,5,50,0,0,3009,550,1,0,0,0,3010,3011,7,5,0,0,3011,3012, + 7,10,0,0,3012,3013,7,1,0,0,3013,552,1,0,0,0,3014,3015,7,5,0,0,3015, + 3016,7,10,0,0,3016,3017,7,1,0,0,3017,3018,7,6,0,0,3018,554,1,0,0, + 0,3019,3020,7,5,0,0,3020,3021,7,10,0,0,3021,3022,7,18,0,0,3022,556, + 1,0,0,0,3023,3024,7,7,0,0,3024,3025,7,2,0,0,3025,3026,7,21,0,0,3026, + 3027,7,4,0,0,3027,3028,7,2,0,0,3028,3029,7,2,0,0,3029,3030,7,1,0, + 0,3030,558,1,0,0,0,3031,3032,7,4,0,0,3032,3033,7,3,0,0,3033,3034, + 7,7,0,0,3034,3035,7,8,0,0,3035,3036,7,3,0,0,3036,3037,7,15,0,0,3037, + 3038,7,1,0,0,3038,560,1,0,0,0,3039,3040,7,1,0,0,3040,3041,7,8,0, + 0,3041,3042,7,15,0,0,3042,562,1,0,0,0,3043,3044,7,1,0,0,3044,3045, + 7,8,0,0,3045,3046,7,15,0,0,3046,3047,7,6,0,0,3047,564,1,0,0,0,3048, + 3049,7,18,0,0,3049,3050,7,3,0,0,3050,3051,7,15,0,0,3051,566,1,0, + 0,0,3052,3053,7,17,0,0,3053,3054,7,7,0,0,3054,3055,5,53,0,0,3055, + 568,1,0,0,0,3056,3057,7,1,0,0,3057,3058,7,6,0,0,3058,3059,7,3,0, + 0,3059,3060,5,49,0,0,3060,570,1,0,0,0,3061,3062,7,1,0,0,3062,3063, + 7,6,0,0,3063,3064,7,3,0,0,3064,3065,5,50,0,0,3065,572,1,0,0,0,3066, + 3067,7,3,0,0,3067,3068,7,7,0,0,3068,3069,7,7,0,0,3069,3070,7,7,0, + 0,3070,3071,7,3,0,0,3071,3072,7,18,0,0,3072,3073,7,2,0,0,3073,574, + 1,0,0,0,3074,3075,7,3,0,0,3075,3076,7,7,0,0,3076,3077,7,7,0,0,3077, + 3078,7,18,0,0,3078,3079,7,8,0,0,3079,3080,7,17,0,0,3080,3081,7,2, + 0,0,3081,576,1,0,0,0,3082,3083,7,5,0,0,3083,3084,7,20,0,0,3084,3085, + 7,4,0,0,3085,3086,7,7,0,0,3086,3087,7,3,0,0,3087,3088,7,18,0,0,3088, + 3089,7,2,0,0,3089,578,1,0,0,0,3090,3091,7,5,0,0,3091,3092,7,20,0, + 0,3092,3093,7,4,0,0,3093,3094,7,4,0,0,3094,3095,7,2,0,0,3095,3096, + 7,15,0,0,3096,3097,7,18,0,0,3097,3098,5,95,0,0,3098,3099,7,7,0,0, + 3099,3100,7,3,0,0,3100,3101,7,18,0,0,3101,3102,7,2,0,0,3102,580, + 1,0,0,0,3103,3104,7,5,0,0,3104,3105,7,20,0,0,3105,3106,7,4,0,0,3106, + 3107,7,4,0,0,3107,3108,7,2,0,0,3108,3109,7,15,0,0,3109,3110,7,18, + 0,0,3110,3111,5,95,0,0,3111,3112,7,18,0,0,3112,3113,7,8,0,0,3113, + 3114,7,17,0,0,3114,3115,7,2,0,0,3115,582,1,0,0,0,3116,3117,7,5,0, + 0,3117,3118,7,20,0,0,3118,3119,7,4,0,0,3119,3120,7,4,0,0,3120,3121, + 7,2,0,0,3121,3122,7,15,0,0,3122,3123,7,18,0,0,3123,3124,5,95,0,0, + 3124,3125,7,18,0,0,3125,3126,7,8,0,0,3126,3127,7,17,0,0,3127,3128, + 7,2,0,0,3128,3129,7,1,0,0,3129,3130,7,18,0,0,3130,3131,7,3,0,0,3131, + 3132,7,17,0,0,3132,3133,7,13,0,0,3133,584,1,0,0,0,3134,3135,7,5, + 0,0,3135,3136,7,20,0,0,3136,3137,7,4,0,0,3137,3138,7,18,0,0,3138, + 3139,7,8,0,0,3139,3140,7,17,0,0,3140,3141,7,2,0,0,3141,586,1,0,0, + 0,3142,3143,7,7,0,0,3143,3144,7,3,0,0,3144,3145,7,18,0,0,3145,3146, + 7,2,0,0,3146,588,1,0,0,0,3147,3148,7,7,0,0,3148,3149,7,3,0,0,3149, + 3150,7,18,0,0,3150,3151,7,2,0,0,3151,3152,7,7,0,0,3152,3153,7,8, + 0,0,3153,3154,7,16,0,0,3154,3155,7,16,0,0,3155,590,1,0,0,0,3156, + 3157,7,7,0,0,3157,3158,7,3,0,0,3158,3159,7,18,0,0,3159,3160,7,2, + 0,0,3160,3161,5,95,0,0,3161,3162,7,3,0,0,3162,3163,7,7,0,0,3163, + 3164,7,7,0,0,3164,592,1,0,0,0,3165,3166,7,7,0,0,3166,3167,7,3,0, + 0,3167,3168,7,18,0,0,3168,3169,7,2,0,0,3169,3170,5,95,0,0,3170,3171, + 7,16,0,0,3171,3172,7,10,0,0,3172,3173,7,4,0,0,3173,3174,7,17,0,0, + 3174,3175,7,3,0,0,3175,3176,7,18,0,0,3176,594,1,0,0,0,3177,3178, + 7,7,0,0,3178,3179,7,3,0,0,3179,3180,7,18,0,0,3180,3181,7,2,0,0,3181, + 3182,5,95,0,0,3182,3183,7,1,0,0,3183,3184,7,20,0,0,3184,3185,7,9, + 0,0,3185,596,1,0,0,0,3186,3187,7,7,0,0,3187,3188,7,3,0,0,3188,3189, + 7,24,0,0,3189,3190,7,15,0,0,3190,3191,7,3,0,0,3191,3192,7,17,0,0, + 3192,3193,7,2,0,0,3193,598,1,0,0,0,3194,3195,7,7,0,0,3195,3196,7, + 3,0,0,3196,3197,7,24,0,0,3197,3198,7,10,0,0,3198,3199,7,16,0,0,3199, + 3200,7,17,0,0,3200,3201,7,10,0,0,3201,3202,7,15,0,0,3202,3203,7, + 18,0,0,3203,3204,7,6,0,0,3204,600,1,0,0,0,3205,3206,7,7,0,0,3206, + 3207,7,3,0,0,3207,3208,7,24,0,0,3208,3209,7,10,0,0,3209,3210,7,16, + 0,0,3210,3211,7,11,0,0,3211,3212,7,2,0,0,3212,3213,7,2,0,0,3213, + 3214,7,22,0,0,3214,602,1,0,0,0,3215,3216,7,7,0,0,3216,3217,7,3,0, + 0,3217,3218,7,24,0,0,3218,3219,7,10,0,0,3219,3220,7,16,0,0,3220, + 3221,7,24,0,0,3221,3222,7,2,0,0,3222,3223,7,3,0,0,3223,3224,7,4, + 0,0,3224,604,1,0,0,0,3225,3226,7,7,0,0,3226,3227,7,3,0,0,3227,3228, + 7,24,0,0,3228,3229,5,95,0,0,3229,3230,7,10,0,0,3230,3231,7,16,0, + 0,3231,3232,5,95,0,0,3232,3233,7,17,0,0,3233,3234,7,10,0,0,3234, + 3235,7,15,0,0,3235,3236,7,18,0,0,3236,3237,7,6,0,0,3237,606,1,0, + 0,0,3238,3239,7,7,0,0,3239,3240,7,3,0,0,3240,3241,7,24,0,0,3241, + 3242,5,95,0,0,3242,3243,7,10,0,0,3243,3244,7,16,0,0,3244,3245,5, + 95,0,0,3245,3246,7,11,0,0,3246,3247,7,2,0,0,3247,3248,7,2,0,0,3248, + 3249,7,22,0,0,3249,608,1,0,0,0,3250,3251,7,2,0,0,3251,3252,7,12, + 0,0,3252,3253,7,18,0,0,3253,3254,7,4,0,0,3254,3255,7,3,0,0,3255, + 3256,7,5,0,0,3256,3257,7,18,0,0,3257,610,1,0,0,0,3258,3259,7,16, + 0,0,3259,3260,7,4,0,0,3260,3261,7,10,0,0,3261,3262,7,17,0,0,3262, + 3263,5,95,0,0,3263,3264,7,7,0,0,3264,3265,7,3,0,0,3265,3266,7,24, + 0,0,3266,3267,7,1,0,0,3267,612,1,0,0,0,3268,3269,7,16,0,0,3269,3270, + 7,4,0,0,3270,3271,7,10,0,0,3271,3272,7,17,0,0,3272,3273,5,95,0,0, + 3273,3274,7,20,0,0,3274,3275,7,15,0,0,3275,3276,7,8,0,0,3276,3277, + 7,12,0,0,3277,3278,7,18,0,0,3278,3279,7,8,0,0,3279,3280,7,17,0,0, + 3280,3281,7,2,0,0,3281,614,1,0,0,0,3282,3283,7,21,0,0,3283,3284, + 7,2,0,0,3284,3285,7,18,0,0,3285,3286,5,95,0,0,3286,3287,7,16,0,0, + 3287,3288,7,10,0,0,3288,3289,7,4,0,0,3289,3290,7,17,0,0,3290,3291, + 7,3,0,0,3291,3292,7,18,0,0,3292,616,1,0,0,0,3293,3294,7,14,0,0,3294, + 3295,7,3,0,0,3295,3296,7,1,0,0,3296,3297,7,18,0,0,3297,3298,5,95, + 0,0,3298,3299,7,7,0,0,3299,3300,7,3,0,0,3300,3301,7,24,0,0,3301, + 618,1,0,0,0,3302,3303,7,14,0,0,3303,3304,7,10,0,0,3304,3305,7,5, + 0,0,3305,3306,7,3,0,0,3306,3307,7,14,0,0,3307,3308,7,18,0,0,3308, + 3309,7,8,0,0,3309,3310,7,17,0,0,3310,3311,7,2,0,0,3311,620,1,0,0, + 0,3312,3313,7,14,0,0,3313,3314,7,10,0,0,3314,3315,7,5,0,0,3315,3316, + 7,3,0,0,3316,3317,7,14,0,0,3317,3318,7,18,0,0,3318,3319,7,8,0,0, + 3319,3320,7,17,0,0,3320,3321,7,2,0,0,3321,3322,7,1,0,0,3322,3323, + 7,18,0,0,3323,3324,7,3,0,0,3324,3325,7,17,0,0,3325,3326,7,13,0,0, + 3326,622,1,0,0,0,3327,3328,7,17,0,0,3328,3329,7,3,0,0,3329,3330, + 7,22,0,0,3330,3331,7,2,0,0,3331,3332,7,7,0,0,3332,3333,7,3,0,0,3333, + 3334,7,18,0,0,3334,3335,7,2,0,0,3335,624,1,0,0,0,3336,3337,7,17, + 0,0,3337,3338,7,3,0,0,3338,3339,7,22,0,0,3339,3340,7,2,0,0,3340, + 3341,7,18,0,0,3341,3342,7,8,0,0,3342,3343,7,17,0,0,3343,3344,7,2, + 0,0,3344,626,1,0,0,0,3345,3346,7,17,0,0,3346,3347,7,10,0,0,3347, + 3348,7,15,0,0,3348,3349,7,18,0,0,3349,3350,7,6,0,0,3350,3351,7,15, + 0,0,3351,3352,7,3,0,0,3352,3353,7,17,0,0,3353,3354,7,2,0,0,3354, + 628,1,0,0,0,3355,3356,7,15,0,0,3356,3357,7,10,0,0,3357,3358,7,11, + 0,0,3358,630,1,0,0,0,3359,3360,7,13,0,0,3360,3361,7,2,0,0,3361,3362, + 7,4,0,0,3362,3363,7,8,0,0,3363,3364,7,10,0,0,3364,3365,7,7,0,0,3365, + 3366,5,95,0,0,3366,3367,7,3,0,0,3367,3368,7,7,0,0,3368,3369,7,7, + 0,0,3369,632,1,0,0,0,3370,3371,7,13,0,0,3371,3372,7,2,0,0,3372,3373, + 7,4,0,0,3373,3374,7,8,0,0,3374,3375,7,10,0,0,3375,3376,7,7,0,0,3376, + 3377,5,95,0,0,3377,3378,7,7,0,0,3378,3379,7,8,0,0,3379,3380,7,16, + 0,0,3380,3381,7,16,0,0,3381,634,1,0,0,0,3382,3383,7,1,0,0,3383,3384, + 7,2,0,0,3384,3385,7,5,0,0,3385,3386,5,95,0,0,3386,3387,7,18,0,0, + 3387,3388,7,10,0,0,3388,3389,5,95,0,0,3389,3390,7,18,0,0,3390,3391, + 7,8,0,0,3391,3392,7,17,0,0,3392,3393,7,2,0,0,3393,636,1,0,0,0,3394, + 3395,7,1,0,0,3395,3396,7,18,0,0,3396,3397,7,4,0,0,3397,3398,5,95, + 0,0,3398,3399,7,18,0,0,3399,3400,7,10,0,0,3400,3401,5,95,0,0,3401, + 3402,7,7,0,0,3402,3403,7,3,0,0,3403,3404,7,18,0,0,3404,3405,7,2, + 0,0,3405,638,1,0,0,0,3406,3407,7,1,0,0,3407,3408,7,20,0,0,3408,3409, + 7,9,0,0,3409,3410,7,7,0,0,3410,3411,7,3,0,0,3411,3412,7,18,0,0,3412, + 3413,7,2,0,0,3413,640,1,0,0,0,3414,3415,7,1,0,0,3415,3416,7,20,0, + 0,3416,3417,7,9,0,0,3417,3418,7,18,0,0,3418,3419,7,8,0,0,3419,3420, + 7,17,0,0,3420,3421,7,2,0,0,3421,642,1,0,0,0,3422,3423,7,1,0,0,3423, + 3424,7,24,0,0,3424,3425,7,1,0,0,3425,3426,7,7,0,0,3426,3427,7,3, + 0,0,3427,3428,7,18,0,0,3428,3429,7,2,0,0,3429,644,1,0,0,0,3430,3431, + 7,18,0,0,3431,3432,7,8,0,0,3432,3433,7,17,0,0,3433,3434,7,2,0,0, + 3434,646,1,0,0,0,3435,3436,7,18,0,0,3436,3437,7,8,0,0,3437,3438, + 7,17,0,0,3438,3439,7,2,0,0,3439,3440,7,7,0,0,3440,3441,7,8,0,0,3441, + 3442,7,16,0,0,3442,3443,7,16,0,0,3443,648,1,0,0,0,3444,3445,7,18, + 0,0,3445,3446,7,8,0,0,3446,3447,7,17,0,0,3447,3448,7,2,0,0,3448, + 3449,7,1,0,0,3449,3450,7,18,0,0,3450,3451,7,3,0,0,3451,3452,7,17, + 0,0,3452,3453,7,13,0,0,3453,650,1,0,0,0,3454,3455,7,18,0,0,3455, + 3456,7,8,0,0,3456,3457,7,17,0,0,3457,3458,7,2,0,0,3458,3459,7,1, + 0,0,3459,3460,7,18,0,0,3460,3461,7,3,0,0,3461,3462,7,17,0,0,3462, + 3463,7,13,0,0,3463,3464,7,3,0,0,3464,3465,7,7,0,0,3465,3466,7,7, + 0,0,3466,652,1,0,0,0,3467,3468,7,18,0,0,3468,3469,7,8,0,0,3469,3470, + 7,17,0,0,3470,3471,7,2,0,0,3471,3472,7,1,0,0,3472,3473,7,18,0,0, + 3473,3474,7,3,0,0,3474,3475,7,17,0,0,3475,3476,7,13,0,0,3476,3477, + 7,7,0,0,3477,3478,7,8,0,0,3478,3479,7,16,0,0,3479,3480,7,16,0,0, + 3480,654,1,0,0,0,3481,3482,7,18,0,0,3482,3483,7,8,0,0,3483,3484, + 7,17,0,0,3484,3485,7,2,0,0,3485,3486,5,95,0,0,3486,3487,7,16,0,0, + 3487,3488,7,10,0,0,3488,3489,7,4,0,0,3489,3490,7,17,0,0,3490,3491, + 7,3,0,0,3491,3492,7,18,0,0,3492,656,1,0,0,0,3493,3494,7,18,0,0,3494, + 3495,7,8,0,0,3495,3496,7,17,0,0,3496,3497,7,2,0,0,3497,3498,5,95, + 0,0,3498,3499,7,18,0,0,3499,3500,7,10,0,0,3500,3501,5,95,0,0,3501, + 3502,7,1,0,0,3502,3503,7,2,0,0,3503,3504,7,5,0,0,3504,658,1,0,0, + 0,3505,3506,7,18,0,0,3506,3507,7,10,0,0,3507,3508,5,95,0,0,3508, + 3509,7,7,0,0,3509,3510,7,3,0,0,3510,3511,7,24,0,0,3511,3512,7,1, + 0,0,3512,660,1,0,0,0,3513,3514,7,18,0,0,3514,3515,7,10,0,0,3515, + 3516,5,95,0,0,3516,3517,7,1,0,0,3517,3518,7,2,0,0,3518,3519,7,5, + 0,0,3519,3520,7,10,0,0,3520,3521,7,15,0,0,3521,3522,7,7,0,0,3522, + 3523,7,1,0,0,3523,662,1,0,0,0,3524,3525,7,20,0,0,3525,3526,7,15, + 0,0,3526,3527,7,8,0,0,3527,3528,7,12,0,0,3528,3529,5,95,0,0,3529, + 3530,7,18,0,0,3530,3531,7,8,0,0,3531,3532,7,17,0,0,3532,3533,7,2, + 0,0,3533,3534,7,1,0,0,3534,3535,7,18,0,0,3535,3536,7,3,0,0,3536, + 3537,7,17,0,0,3537,3538,7,13,0,0,3538,664,1,0,0,0,3539,3540,7,20, + 0,0,3540,3541,7,18,0,0,3541,3542,7,5,0,0,3542,3543,5,95,0,0,3543, + 3544,7,7,0,0,3544,3545,7,3,0,0,3545,3546,7,18,0,0,3546,3547,7,2, + 0,0,3547,666,1,0,0,0,3548,3549,7,20,0,0,3549,3550,7,18,0,0,3550, + 3551,7,5,0,0,3551,3552,5,95,0,0,3552,3553,7,18,0,0,3553,3554,7,8, + 0,0,3554,3555,7,17,0,0,3555,3556,7,2,0,0,3556,668,1,0,0,0,3557,3558, + 7,20,0,0,3558,3559,7,18,0,0,3559,3560,7,5,0,0,3560,3561,5,95,0,0, + 3561,3562,7,18,0,0,3562,3563,7,8,0,0,3563,3564,7,17,0,0,3564,3565, + 7,2,0,0,3565,3566,7,1,0,0,3566,3567,7,18,0,0,3567,3568,7,3,0,0,3568, + 3569,7,17,0,0,3569,3570,7,13,0,0,3570,670,1,0,0,0,3571,3572,7,11, + 0,0,3572,3573,7,2,0,0,3573,3574,7,2,0,0,3574,3575,7,22,0,0,3575, + 3576,7,7,0,0,3576,3577,7,3,0,0,3577,3578,7,24,0,0,3578,672,1,0,0, + 0,3579,3580,7,24,0,0,3580,3581,7,2,0,0,3581,3582,7,3,0,0,3582,3583, + 7,4,0,0,3583,3584,7,11,0,0,3584,3585,7,2,0,0,3585,3586,7,2,0,0,3586, + 3587,7,22,0,0,3587,674,1,0,0,0,3588,3589,7,1,0,0,3589,3590,7,18, + 0,0,3590,3591,7,4,0,0,3591,3592,7,16,0,0,3592,3593,7,18,0,0,3593, + 3594,7,8,0,0,3594,3595,7,17,0,0,3595,3596,7,2,0,0,3596,676,1,0,0, + 0,3597,3598,7,1,0,0,3598,3599,7,20,0,0,3599,3600,7,9,0,0,3600,3601, + 7,1,0,0,3601,3602,7,18,0,0,3602,3603,7,4,0,0,3603,678,1,0,0,0,3604, + 3605,7,1,0,0,3605,3606,7,20,0,0,3606,3607,7,9,0,0,3607,3608,7,1, + 0,0,3608,3609,7,18,0,0,3609,3610,7,4,0,0,3610,3611,7,8,0,0,3611, + 3612,7,15,0,0,3612,3613,7,21,0,0,3613,680,1,0,0,0,3614,3615,7,14, + 0,0,3615,3616,7,18,0,0,3616,3617,7,4,0,0,3617,3618,7,8,0,0,3618, + 3619,7,17,0,0,3619,682,1,0,0,0,3620,3621,7,4,0,0,3621,3622,7,18, + 0,0,3622,3623,7,4,0,0,3623,3624,7,8,0,0,3624,3625,7,17,0,0,3625, + 684,1,0,0,0,3626,3627,7,18,0,0,3627,3628,7,4,0,0,3628,3629,7,8,0, + 0,3629,3630,7,17,0,0,3630,686,1,0,0,0,3631,3632,7,18,0,0,3632,3633, + 7,10,0,0,3633,688,1,0,0,0,3634,3635,7,14,0,0,3635,3636,7,10,0,0, + 3636,3637,7,11,0,0,3637,3638,7,2,0,0,3638,3639,7,4,0,0,3639,690, + 1,0,0,0,3640,3641,7,20,0,0,3641,3642,7,13,0,0,3642,3643,7,13,0,0, + 3643,3644,7,2,0,0,3644,3645,7,4,0,0,3645,692,1,0,0,0,3646,3647,7, + 5,0,0,3647,3648,7,10,0,0,3648,3649,7,15,0,0,3649,3650,7,5,0,0,3650, + 3651,7,3,0,0,3651,3652,7,18,0,0,3652,694,1,0,0,0,3653,3654,7,5,0, + 0,3654,3655,7,10,0,0,3655,3656,7,15,0,0,3656,3657,7,5,0,0,3657,3658, + 7,3,0,0,3658,3659,7,18,0,0,3659,3660,5,95,0,0,3660,3661,7,11,0,0, + 3661,3662,7,1,0,0,3662,696,1,0,0,0,3663,3664,7,14,0,0,3664,3665, + 7,2,0,0,3665,3666,7,15,0,0,3666,3667,7,21,0,0,3667,3668,7,18,0,0, + 3668,3669,7,6,0,0,3669,698,1,0,0,0,3670,3671,7,1,0,0,3671,3672,7, + 18,0,0,3672,3673,7,4,0,0,3673,3674,7,5,0,0,3674,3675,7,17,0,0,3675, + 3676,7,13,0,0,3676,700,1,0,0,0,3677,3678,7,4,0,0,3678,3679,7,8,0, + 0,3679,3680,7,21,0,0,3680,3681,7,6,0,0,3681,3682,7,18,0,0,3682,702, + 1,0,0,0,3683,3684,7,14,0,0,3684,3685,7,2,0,0,3685,3686,7,16,0,0, + 3686,3687,7,18,0,0,3687,704,1,0,0,0,3688,3689,7,3,0,0,3689,3690, + 7,1,0,0,3690,3691,7,5,0,0,3691,3692,7,8,0,0,3692,3693,7,8,0,0,3693, + 706,1,0,0,0,3694,3695,7,14,0,0,3695,3696,7,10,0,0,3696,3697,7,5, + 0,0,3697,3698,7,3,0,0,3698,3699,7,18,0,0,3699,3700,7,2,0,0,3700, + 708,1,0,0,0,3701,3702,7,4,0,0,3702,3703,7,2,0,0,3703,3704,7,13,0, + 0,3704,3705,7,14,0,0,3705,3706,7,3,0,0,3706,3707,7,5,0,0,3707,3708, + 7,2,0,0,3708,710,1,0,0,0,3709,3710,7,4,0,0,3710,3711,7,2,0,0,3711, + 3712,7,19,0,0,3712,3713,7,2,0,0,3713,3714,7,4,0,0,3714,3715,7,1, + 0,0,3715,3716,7,2,0,0,3716,712,1,0,0,0,3717,3718,7,5,0,0,3718,3719, + 7,3,0,0,3719,3720,7,1,0,0,3720,3721,7,18,0,0,3721,714,1,0,0,0,3722, + 3723,7,14,0,0,3723,3724,7,8,0,0,3724,3725,7,22,0,0,3725,3726,7,2, + 0,0,3726,716,1,0,0,0,3727,3728,7,8,0,0,3728,3729,7,1,0,0,3729,3730, + 7,15,0,0,3730,3731,7,20,0,0,3731,3732,7,14,0,0,3732,3733,7,14,0, + 0,3733,718,1,0,0,0,3734,3735,7,8,0,0,3735,3736,7,1,0,0,3736,3737, + 7,15,0,0,3737,3738,7,10,0,0,3738,3739,7,18,0,0,3739,3740,7,15,0, + 0,3740,3741,7,20,0,0,3741,3742,7,14,0,0,3742,3743,7,14,0,0,3743, + 720,1,0,0,0,3744,3745,7,5,0,0,3745,3746,7,8,0,0,3746,3747,7,7,0, + 0,3747,3748,7,4,0,0,3748,3749,7,17,0,0,3749,3750,7,3,0,0,3750,3751, + 7,18,0,0,3751,3752,7,5,0,0,3752,3753,7,6,0,0,3753,722,1,0,0,0,3754, + 3755,7,9,0,0,3755,3756,7,2,0,0,3756,3757,7,18,0,0,3757,3758,7,11, + 0,0,3758,3759,7,2,0,0,3759,3760,7,2,0,0,3760,3761,7,15,0,0,3761, + 724,1,0,0,0,3762,3763,7,8,0,0,3763,3764,7,1,0,0,3764,3765,7,13,0, + 0,3765,3766,7,4,0,0,3766,3767,7,2,0,0,3767,3768,7,1,0,0,3768,3769, + 7,2,0,0,3769,3770,7,15,0,0,3770,3771,7,18,0,0,3771,726,1,0,0,0,3772, + 3773,7,8,0,0,3773,3774,7,1,0,0,3774,3775,7,2,0,0,3775,3776,7,17, + 0,0,3776,3777,7,13,0,0,3777,3778,7,18,0,0,3778,3779,7,24,0,0,3779, + 728,1,0,0,0,3780,3781,7,8,0,0,3781,3782,7,1,0,0,3782,3783,7,9,0, + 0,3783,3784,7,14,0,0,3784,3785,7,3,0,0,3785,3786,7,15,0,0,3786,3787, + 7,22,0,0,3787,730,1,0,0,0,3788,3789,7,3,0,0,3789,3790,7,4,0,0,3790, + 3791,7,4,0,0,3791,3792,7,3,0,0,3792,3793,7,24,0,0,3793,732,1,0,0, + 0,3794,3795,7,3,0,0,3795,3796,7,4,0,0,3796,3797,7,4,0,0,3797,3798, + 7,3,0,0,3798,3799,7,24,0,0,3799,3800,5,95,0,0,3800,3801,7,14,0,0, + 3801,3802,7,2,0,0,3802,3803,7,15,0,0,3803,3804,7,21,0,0,3804,3805, + 7,18,0,0,3805,3806,7,6,0,0,3806,734,1,0,0,0,3807,3808,7,17,0,0,3808, + 3809,7,19,0,0,3809,3810,7,25,0,0,3810,3811,7,10,0,0,3811,3812,7, + 8,0,0,3812,3813,7,15,0,0,3813,736,1,0,0,0,3814,3815,7,16,0,0,3815, + 3816,7,10,0,0,3816,3817,7,4,0,0,3817,3818,7,3,0,0,3818,3819,7,14, + 0,0,3819,3820,7,14,0,0,3820,738,1,0,0,0,3821,3822,7,16,0,0,3822, + 3823,7,8,0,0,3823,3824,7,14,0,0,3824,3825,7,18,0,0,3825,3826,7,2, + 0,0,3826,3827,7,4,0,0,3827,740,1,0,0,0,3828,3829,7,18,0,0,3829,3830, + 7,4,0,0,3830,3831,7,3,0,0,3831,3832,7,15,0,0,3832,3833,7,1,0,0,3833, + 3834,7,16,0,0,3834,3835,7,10,0,0,3835,3836,7,4,0,0,3836,3837,7,17, + 0,0,3837,742,1,0,0,0,3838,3839,7,4,0,0,3839,3840,7,2,0,0,3840,3841, + 7,7,0,0,3841,3842,7,20,0,0,3842,3843,7,5,0,0,3843,3844,7,2,0,0,3844, + 744,1,0,0,0,3845,3846,7,25,0,0,3846,3847,7,1,0,0,3847,3848,7,10, + 0,0,3848,3849,7,15,0,0,3849,3850,5,95,0,0,3850,3851,7,19,0,0,3851, + 3852,7,3,0,0,3852,3853,7,14,0,0,3853,3854,7,8,0,0,3854,3855,7,7, + 0,0,3855,746,1,0,0,0,3856,3857,7,25,0,0,3857,3858,7,1,0,0,3858,3859, + 7,10,0,0,3859,3860,7,15,0,0,3860,748,1,0,0,0,3861,3862,7,25,0,0, + 3862,3863,7,1,0,0,3863,3864,7,10,0,0,3864,3865,7,15,0,0,3865,3866, + 5,95,0,0,3866,3867,7,10,0,0,3867,3868,7,9,0,0,3868,3869,7,25,0,0, + 3869,3870,7,2,0,0,3870,3871,7,5,0,0,3871,3872,7,18,0,0,3872,750, + 1,0,0,0,3873,3874,7,25,0,0,3874,3875,7,1,0,0,3875,3876,7,10,0,0, + 3876,3877,7,15,0,0,3877,3878,5,95,0,0,3878,3879,7,3,0,0,3879,3880, + 7,4,0,0,3880,3881,7,4,0,0,3881,3882,7,3,0,0,3882,3883,7,24,0,0,3883, + 752,1,0,0,0,3884,3885,7,25,0,0,3885,3886,7,1,0,0,3886,3887,7,10, + 0,0,3887,3888,7,15,0,0,3888,3889,5,95,0,0,3889,3890,7,3,0,0,3890, + 3891,7,4,0,0,3891,3892,7,4,0,0,3892,3893,7,3,0,0,3893,3894,7,24, + 0,0,3894,3895,5,95,0,0,3895,3896,7,14,0,0,3896,3897,7,2,0,0,3897, + 3898,7,15,0,0,3898,3899,7,21,0,0,3899,3900,7,18,0,0,3900,3901,7, + 6,0,0,3901,754,1,0,0,0,3902,3903,7,25,0,0,3903,3904,7,1,0,0,3904, + 3905,7,10,0,0,3905,3906,7,15,0,0,3906,3907,5,95,0,0,3907,3908,7, + 2,0,0,3908,3909,7,12,0,0,3909,3910,7,18,0,0,3910,3911,7,4,0,0,3911, + 3912,7,3,0,0,3912,3913,7,5,0,0,3913,3914,7,18,0,0,3914,756,1,0,0, + 0,3915,3916,7,25,0,0,3916,3917,7,1,0,0,3917,3918,7,10,0,0,3918,3919, + 7,15,0,0,3919,3920,5,95,0,0,3920,3921,7,22,0,0,3921,3922,7,2,0,0, + 3922,3923,7,24,0,0,3923,3924,7,1,0,0,3924,758,1,0,0,0,3925,3926, + 7,25,0,0,3926,3927,7,1,0,0,3927,3928,7,10,0,0,3928,3929,7,15,0,0, + 3929,3930,5,95,0,0,3930,3931,7,1,0,0,3931,3932,7,2,0,0,3932,3933, + 7,18,0,0,3933,760,1,0,0,0,3934,3935,7,25,0,0,3935,3936,7,1,0,0,3936, + 3937,7,10,0,0,3937,3938,7,15,0,0,3938,3939,5,95,0,0,3939,3940,7, + 7,0,0,3940,3941,7,2,0,0,3941,3942,7,14,0,0,3942,3943,7,2,0,0,3943, + 3944,7,18,0,0,3944,3945,7,2,0,0,3945,762,1,0,0,0,3946,3947,7,25, + 0,0,3947,3948,7,1,0,0,3948,3949,7,10,0,0,3949,3950,7,15,0,0,3950, + 3951,5,95,0,0,3951,3952,7,3,0,0,3952,3953,7,13,0,0,3953,3954,7,13, + 0,0,3954,3955,7,2,0,0,3955,3956,7,15,0,0,3956,3957,7,7,0,0,3957, + 764,1,0,0,0,3958,3959,7,25,0,0,3959,3960,7,1,0,0,3960,3961,7,10, + 0,0,3961,3962,7,15,0,0,3962,3963,5,95,0,0,3963,3964,7,2,0,0,3964, + 3965,7,12,0,0,3965,3966,7,18,0,0,3966,3967,7,2,0,0,3967,3968,7,15, + 0,0,3968,3969,7,7,0,0,3969,766,1,0,0,0,3970,3971,7,8,0,0,3971,3972, + 7,16,0,0,3972,3973,7,15,0,0,3973,3974,7,20,0,0,3974,3975,7,14,0, + 0,3975,3976,7,14,0,0,3976,768,1,0,0,0,3977,3978,7,15,0,0,3978,3979, + 7,20,0,0,3979,3980,7,14,0,0,3980,3981,7,14,0,0,3981,3982,7,8,0,0, + 3982,3983,7,16,0,0,3983,770,1,0,0,0,3984,3985,7,8,0,0,3985,3986, + 7,16,0,0,3986,772,1,0,0,0,3987,3988,7,18,0,0,3988,3989,7,24,0,0, + 3989,3990,7,13,0,0,3990,3991,7,2,0,0,3991,3992,7,10,0,0,3992,3993, + 7,16,0,0,3993,774,1,0,0,0,3994,3995,7,5,0,0,3995,3996,7,10,0,0,3996, + 3997,7,3,0,0,3997,3998,7,14,0,0,3998,3999,7,2,0,0,3999,4000,7,1, + 0,0,4000,4001,7,5,0,0,4001,4002,7,2,0,0,4002,776,1,0,0,0,4003,4004, + 7,17,0,0,4004,4005,7,3,0,0,4005,4006,7,18,0,0,4006,4007,7,5,0,0, + 4007,4008,7,6,0,0,4008,778,1,0,0,0,4009,4010,7,17,0,0,4010,4011, + 7,3,0,0,4011,4012,7,18,0,0,4012,4013,7,5,0,0,4013,4014,7,6,0,0,4014, + 4015,5,95,0,0,4015,4016,7,13,0,0,4016,4017,7,6,0,0,4017,4018,7,4, + 0,0,4018,4019,7,3,0,0,4019,4020,7,1,0,0,4020,4021,7,2,0,0,4021,780, + 1,0,0,0,4022,4023,7,17,0,0,4023,4024,7,3,0,0,4024,4025,7,18,0,0, + 4025,4026,7,5,0,0,4026,4027,7,6,0,0,4027,4028,5,95,0,0,4028,4029, + 7,13,0,0,4029,4030,7,6,0,0,4030,4031,7,4,0,0,4031,4032,7,3,0,0,4032, + 4033,7,1,0,0,4033,4034,7,2,0,0,4034,4035,5,95,0,0,4035,4036,7,13, + 0,0,4036,4037,7,4,0,0,4037,4038,7,2,0,0,4038,4039,7,16,0,0,4039, + 4040,7,8,0,0,4040,4041,7,12,0,0,4041,782,1,0,0,0,4042,4043,7,17, + 0,0,4043,4044,7,3,0,0,4044,4045,7,18,0,0,4045,4046,7,5,0,0,4046, + 4047,7,6,0,0,4047,4048,5,95,0,0,4048,4049,7,9,0,0,4049,4050,7,10, + 0,0,4050,4051,7,10,0,0,4051,4052,7,14,0,0,4052,4053,5,95,0,0,4053, + 4054,7,13,0,0,4054,4055,7,4,0,0,4055,4056,7,2,0,0,4056,4057,7,16, + 0,0,4057,4058,7,8,0,0,4058,4059,7,12,0,0,4059,784,1,0,0,0,4060,4061, + 7,1,0,0,4061,4062,7,8,0,0,4062,4063,7,17,0,0,4063,4064,7,13,0,0, + 4064,4065,7,14,0,0,4065,4066,7,2,0,0,4066,4067,5,95,0,0,4067,4068, + 7,23,0,0,4068,4069,7,20,0,0,4069,4070,7,2,0,0,4070,4071,7,4,0,0, + 4071,4072,7,24,0,0,4072,4073,5,95,0,0,4073,4074,7,1,0,0,4074,4075, + 7,18,0,0,4075,4076,7,4,0,0,4076,4077,7,8,0,0,4077,4078,7,15,0,0, + 4078,4079,7,21,0,0,4079,786,1,0,0,0,4080,4081,7,17,0,0,4081,4082, + 7,20,0,0,4082,4083,7,14,0,0,4083,4084,7,18,0,0,4084,4085,7,8,0,0, + 4085,4086,5,95,0,0,4086,4087,7,17,0,0,4087,4088,7,3,0,0,4088,4089, + 7,18,0,0,4089,4090,7,5,0,0,4090,4091,7,6,0,0,4091,788,1,0,0,0,4092, + 4093,7,23,0,0,4093,4094,7,20,0,0,4094,4095,7,2,0,0,4095,4096,7,4, + 0,0,4096,4097,7,24,0,0,4097,4098,5,95,0,0,4098,4099,7,1,0,0,4099, + 4100,7,18,0,0,4100,4101,7,4,0,0,4101,4102,7,8,0,0,4102,4103,7,15, + 0,0,4103,4104,7,21,0,0,4104,790,1,0,0,0,4105,4106,7,3,0,0,4106,4107, + 7,14,0,0,4107,4108,7,14,0,0,4108,4109,7,10,0,0,4109,4110,7,11,0, + 0,4110,4111,5,95,0,0,4111,4112,7,14,0,0,4112,4113,7,2,0,0,4113,4114, + 7,3,0,0,4114,4115,7,7,0,0,4115,4116,7,8,0,0,4116,4117,7,15,0,0,4117, + 4118,7,21,0,0,4118,4119,5,95,0,0,4119,4120,7,11,0,0,4120,4121,7, + 8,0,0,4121,4122,7,14,0,0,4122,4123,7,7,0,0,4123,4124,7,5,0,0,4124, + 4125,7,3,0,0,4125,4126,7,4,0,0,4126,4127,7,7,0,0,4127,792,1,0,0, + 0,4128,4129,7,3,0,0,4129,4130,7,15,0,0,4130,4131,7,3,0,0,4131,4132, + 7,14,0,0,4132,4133,7,24,0,0,4133,4134,7,26,0,0,4134,4135,7,2,0,0, + 4135,4136,5,95,0,0,4136,4137,7,11,0,0,4137,4138,7,8,0,0,4138,4139, + 7,14,0,0,4139,4140,7,7,0,0,4140,4141,7,5,0,0,4141,4142,7,3,0,0,4142, + 4143,7,4,0,0,4143,4144,7,7,0,0,4144,794,1,0,0,0,4145,4146,7,3,0, + 0,4146,4147,7,15,0,0,4147,4148,7,3,0,0,4148,4149,7,14,0,0,4149,4150, + 7,24,0,0,4150,4151,7,26,0,0,4151,4152,7,2,0,0,4152,4153,7,4,0,0, + 4153,796,1,0,0,0,4154,4155,7,3,0,0,4155,4156,7,20,0,0,4156,4157, + 7,18,0,0,4157,4158,7,10,0,0,4158,4159,5,95,0,0,4159,4160,7,21,0, + 0,4160,4161,7,2,0,0,4161,4162,7,15,0,0,4162,4163,7,2,0,0,4163,4164, + 7,4,0,0,4164,4165,7,3,0,0,4165,4166,7,18,0,0,4166,4167,7,2,0,0,4167, + 4168,5,95,0,0,4168,4169,7,1,0,0,4169,4170,7,24,0,0,4170,4171,7,15, + 0,0,4171,4172,7,10,0,0,4172,4173,7,15,0,0,4173,4174,7,24,0,0,4174, + 4175,7,17,0,0,4175,4176,7,1,0,0,4176,4177,5,95,0,0,4177,4178,7,13, + 0,0,4178,4179,7,6,0,0,4179,4180,7,4,0,0,4180,4181,7,3,0,0,4181,4182, + 7,1,0,0,4182,4183,7,2,0,0,4183,4184,5,95,0,0,4184,4185,7,23,0,0, + 4185,4186,7,20,0,0,4186,4187,7,2,0,0,4187,4188,7,4,0,0,4188,4189, + 7,24,0,0,4189,798,1,0,0,0,4190,4191,7,9,0,0,4191,4192,7,10,0,0,4192, + 4193,7,10,0,0,4193,4194,7,1,0,0,4194,4195,7,18,0,0,4195,800,1,0, + 0,0,4196,4197,7,5,0,0,4197,4198,7,20,0,0,4198,4199,7,18,0,0,4199, + 4200,7,10,0,0,4200,4201,7,16,0,0,4201,4202,7,16,0,0,4202,4203,5, + 95,0,0,4203,4204,7,16,0,0,4204,4205,7,4,0,0,4205,4206,7,2,0,0,4206, + 4207,7,23,0,0,4207,4208,7,20,0,0,4208,4209,7,2,0,0,4209,4210,7,15, + 0,0,4210,4211,7,5,0,0,4211,4212,7,24,0,0,4212,802,1,0,0,0,4213,4214, + 7,7,0,0,4214,4215,7,2,0,0,4215,4216,7,16,0,0,4216,4217,7,3,0,0,4217, + 4218,7,20,0,0,4218,4219,7,14,0,0,4219,4220,7,18,0,0,4220,4221,5, + 95,0,0,4221,4222,7,16,0,0,4222,4223,7,8,0,0,4223,4224,7,2,0,0,4224, + 4225,7,14,0,0,4225,4226,7,7,0,0,4226,804,1,0,0,0,4227,4228,7,7,0, + 0,4228,4229,7,2,0,0,4229,4230,7,16,0,0,4230,4231,7,3,0,0,4231,4232, + 7,20,0,0,4232,4233,7,14,0,0,4233,4234,7,18,0,0,4234,4235,5,95,0, + 0,4235,4236,7,10,0,0,4236,4237,7,13,0,0,4237,4238,7,2,0,0,4238,4239, + 7,4,0,0,4239,4240,7,3,0,0,4240,4241,7,18,0,0,4241,4242,7,10,0,0, + 4242,4243,7,4,0,0,4243,806,1,0,0,0,4244,4245,7,2,0,0,4245,4246,7, + 15,0,0,4246,4247,7,3,0,0,4247,4248,7,9,0,0,4248,4249,7,14,0,0,4249, + 4250,7,2,0,0,4250,4251,5,95,0,0,4251,4252,7,13,0,0,4252,4253,7,10, + 0,0,4253,4254,7,1,0,0,4254,4255,7,8,0,0,4255,4256,7,18,0,0,4256, + 4257,7,8,0,0,4257,4258,7,10,0,0,4258,4259,7,15,0,0,4259,4260,5,95, + 0,0,4260,4261,7,8,0,0,4261,4262,7,15,0,0,4262,4263,7,5,0,0,4263, + 4264,7,4,0,0,4264,4265,7,2,0,0,4265,4266,7,17,0,0,4266,4267,7,2, + 0,0,4267,4268,7,15,0,0,4268,4269,7,18,0,0,4269,4270,7,1,0,0,4270, + 808,1,0,0,0,4271,4272,7,2,0,0,4272,4273,7,1,0,0,4273,4274,7,5,0, + 0,4274,4275,7,3,0,0,4275,4276,7,13,0,0,4276,4277,7,2,0,0,4277,810, + 1,0,0,0,4278,4279,7,16,0,0,4279,4280,7,14,0,0,4280,4281,7,3,0,0, + 4281,4282,7,21,0,0,4282,4283,7,1,0,0,4283,812,1,0,0,0,4284,4285, + 7,16,0,0,4285,4286,7,20,0,0,4286,4287,7,26,0,0,4287,4288,7,26,0, + 0,4288,4289,7,24,0,0,4289,4290,5,95,0,0,4290,4291,7,17,0,0,4291, + 4292,7,3,0,0,4292,4293,7,12,0,0,4293,4294,5,95,0,0,4294,4295,7,2, + 0,0,4295,4296,7,12,0,0,4296,4297,7,13,0,0,4297,4298,7,3,0,0,4298, + 4299,7,15,0,0,4299,4300,7,1,0,0,4300,4301,7,8,0,0,4301,4302,7,10, + 0,0,4302,4303,7,15,0,0,4303,4304,7,1,0,0,4304,814,1,0,0,0,4305,4306, + 7,16,0,0,4306,4307,7,20,0,0,4307,4308,7,26,0,0,4308,4309,7,26,0, + 0,4309,4310,7,24,0,0,4310,4311,5,95,0,0,4311,4312,7,13,0,0,4312, + 4313,7,4,0,0,4313,4314,7,2,0,0,4314,4315,7,16,0,0,4315,4316,7,8, + 0,0,4316,4317,7,12,0,0,4317,4318,5,95,0,0,4318,4319,7,14,0,0,4319, + 4320,7,2,0,0,4320,4321,7,15,0,0,4321,4322,7,21,0,0,4322,4323,7,18, + 0,0,4323,4324,7,6,0,0,4324,816,1,0,0,0,4325,4326,7,16,0,0,4326,4327, + 7,20,0,0,4327,4328,7,26,0,0,4328,4329,7,26,0,0,4329,4330,7,24,0, + 0,4330,4331,5,95,0,0,4331,4332,7,18,0,0,4332,4333,7,4,0,0,4333,4334, + 7,3,0,0,4334,4335,7,15,0,0,4335,4336,7,1,0,0,4336,4337,7,13,0,0, + 4337,4338,7,10,0,0,4338,4339,7,1,0,0,4339,4340,7,8,0,0,4340,4341, + 7,18,0,0,4341,4342,7,8,0,0,4342,4343,7,10,0,0,4343,4344,7,15,0,0, + 4344,4345,7,1,0,0,4345,818,1,0,0,0,4346,4347,7,16,0,0,4347,4348, + 7,20,0,0,4348,4349,7,26,0,0,4349,4350,7,26,0,0,4350,4351,7,24,0, + 0,4351,4352,5,95,0,0,4352,4353,7,4,0,0,4353,4354,7,2,0,0,4354,4355, + 7,11,0,0,4355,4356,7,4,0,0,4356,4357,7,8,0,0,4357,4358,7,18,0,0, + 4358,4359,7,2,0,0,4359,820,1,0,0,0,4360,4361,7,16,0,0,4361,4362, + 7,20,0,0,4362,4363,7,26,0,0,4363,4364,7,26,0,0,4364,4365,7,8,0,0, + 4365,4366,7,15,0,0,4366,4367,7,2,0,0,4367,4368,7,1,0,0,4368,4369, + 7,1,0,0,4369,822,1,0,0,0,4370,4371,7,14,0,0,4371,4372,7,2,0,0,4372, + 4373,7,15,0,0,4373,4374,7,8,0,0,4374,4375,7,2,0,0,4375,4376,7,15, + 0,0,4376,4377,7,18,0,0,4377,824,1,0,0,0,4378,4379,7,14,0,0,4379, + 4380,7,10,0,0,4380,4381,7,11,0,0,4381,4382,5,95,0,0,4382,4383,7, + 16,0,0,4383,4384,7,4,0,0,4384,4385,7,2,0,0,4385,4386,7,23,0,0,4386, + 4387,5,95,0,0,4387,4388,7,10,0,0,4388,4389,7,13,0,0,4389,4390,7, + 2,0,0,4390,4391,7,4,0,0,4391,4392,7,3,0,0,4392,4393,7,18,0,0,4393, + 4394,7,10,0,0,4394,4395,7,4,0,0,4395,826,1,0,0,0,4396,4397,7,17, + 0,0,4397,4398,7,3,0,0,4398,4399,7,12,0,0,4399,4400,5,95,0,0,4400, + 4401,7,7,0,0,4401,4402,7,2,0,0,4402,4403,7,18,0,0,4403,4404,7,2, + 0,0,4404,4405,7,4,0,0,4405,4406,7,17,0,0,4406,4407,7,8,0,0,4407, + 4408,7,15,0,0,4408,4409,7,8,0,0,4409,4410,7,26,0,0,4410,4411,7,2, + 0,0,4411,4412,7,7,0,0,4412,4413,5,95,0,0,4413,4414,7,1,0,0,4414, + 4415,7,18,0,0,4415,4416,7,3,0,0,4416,4417,7,18,0,0,4417,4418,7,2, + 0,0,4418,4419,7,1,0,0,4419,828,1,0,0,0,4420,4421,7,17,0,0,4421,4422, + 7,3,0,0,4422,4423,7,12,0,0,4423,4424,5,95,0,0,4424,4425,7,2,0,0, + 4425,4426,7,12,0,0,4426,4427,7,13,0,0,4427,4428,7,3,0,0,4428,4429, + 7,15,0,0,4429,4430,7,1,0,0,4430,4431,7,8,0,0,4431,4432,7,10,0,0, + 4432,4433,7,15,0,0,4433,4434,7,1,0,0,4434,830,1,0,0,0,4435,4436, + 7,17,0,0,4436,4437,7,8,0,0,4437,4438,7,15,0,0,4438,4439,7,8,0,0, + 4439,4440,7,17,0,0,4440,4441,7,20,0,0,4441,4442,7,17,0,0,4442,4443, + 5,95,0,0,4443,4444,7,1,0,0,4444,4445,7,6,0,0,4445,4446,7,10,0,0, + 4446,4447,7,20,0,0,4447,4448,7,14,0,0,4448,4449,7,7,0,0,4449,4450, + 5,95,0,0,4450,4451,7,17,0,0,4451,4452,7,3,0,0,4452,4453,7,18,0,0, + 4453,4454,7,5,0,0,4454,4455,7,6,0,0,4455,832,1,0,0,0,4456,4457,7, + 10,0,0,4457,4458,7,13,0,0,4458,4459,7,2,0,0,4459,4460,7,4,0,0,4460, + 4461,7,3,0,0,4461,4462,7,18,0,0,4462,4463,7,10,0,0,4463,4464,7,4, + 0,0,4464,834,1,0,0,0,4465,4466,7,13,0,0,4466,4467,7,6,0,0,4467,4468, + 7,4,0,0,4468,4469,7,3,0,0,4469,4470,7,1,0,0,4470,4471,7,2,0,0,4471, + 4472,5,95,0,0,4472,4473,7,1,0,0,4473,4474,7,14,0,0,4474,4475,7,10, + 0,0,4475,4476,7,13,0,0,4476,836,1,0,0,0,4477,4478,7,13,0,0,4478, + 4479,7,4,0,0,4479,4480,7,2,0,0,4480,4481,7,16,0,0,4481,4482,7,8, + 0,0,4482,4483,7,12,0,0,4483,4484,5,95,0,0,4484,4485,7,14,0,0,4485, + 4486,7,2,0,0,4486,4487,7,15,0,0,4487,4488,7,21,0,0,4488,4489,7,18, + 0,0,4489,4490,7,6,0,0,4490,838,1,0,0,0,4491,4492,7,23,0,0,4492,4493, + 7,20,0,0,4493,4494,7,10,0,0,4494,4495,7,18,0,0,4495,4496,7,2,0,0, + 4496,4497,5,95,0,0,4497,4498,7,3,0,0,4498,4499,7,15,0,0,4499,4500, + 7,3,0,0,4500,4501,7,14,0,0,4501,4502,7,24,0,0,4502,4503,7,26,0,0, + 4503,4504,7,2,0,0,4504,4505,7,4,0,0,4505,840,1,0,0,0,4506,4507,7, + 23,0,0,4507,4508,7,20,0,0,4508,4509,7,10,0,0,4509,4510,7,18,0,0, + 4510,4511,7,2,0,0,4511,4512,5,95,0,0,4512,4513,7,16,0,0,4513,4514, + 7,8,0,0,4514,4515,7,2,0,0,4515,4516,7,14,0,0,4516,4517,7,7,0,0,4517, + 4518,5,95,0,0,4518,4519,7,1,0,0,4519,4520,7,20,0,0,4520,4521,7,16, + 0,0,4521,4522,7,16,0,0,4522,4523,7,8,0,0,4523,4524,7,12,0,0,4524, + 842,1,0,0,0,4525,4526,7,4,0,0,4526,4527,7,2,0,0,4527,4528,7,11,0, + 0,4528,4529,7,4,0,0,4529,4530,7,8,0,0,4530,4531,7,18,0,0,4531,4532, + 7,2,0,0,4532,844,1,0,0,0,4533,4534,7,1,0,0,4534,4535,7,14,0,0,4535, + 4536,7,10,0,0,4536,4537,7,13,0,0,4537,846,1,0,0,0,4538,4539,7,18, + 0,0,4539,4540,7,8,0,0,4540,4541,7,2,0,0,4541,4542,5,95,0,0,4542, + 4543,7,9,0,0,4543,4544,7,4,0,0,4544,4545,7,2,0,0,4545,4546,7,3,0, + 0,4546,4547,7,22,0,0,4547,4548,7,2,0,0,4548,4549,7,4,0,0,4549,848, + 1,0,0,0,4550,4551,7,18,0,0,4551,4552,7,24,0,0,4552,4553,7,13,0,0, + 4553,4554,7,2,0,0,4554,850,1,0,0,0,4555,4556,7,26,0,0,4556,4557, + 7,2,0,0,4557,4558,7,4,0,0,4558,4559,7,10,0,0,4559,4560,5,95,0,0, + 4560,4561,7,18,0,0,4561,4562,7,2,0,0,4562,4563,7,4,0,0,4563,4564, + 7,17,0,0,4564,4565,7,1,0,0,4565,4566,5,95,0,0,4566,4567,7,23,0,0, + 4567,4568,7,20,0,0,4568,4569,7,2,0,0,4569,4570,7,4,0,0,4570,4571, + 7,24,0,0,4571,852,1,0,0,0,4572,4573,7,1,0,0,4573,4574,7,13,0,0,4574, + 4575,7,3,0,0,4575,4576,7,15,0,0,4576,854,1,0,0,0,4577,4578,7,9,0, + 0,4578,4579,7,8,0,0,4579,4580,7,15,0,0,4580,4581,7,1,0,0,4581,856, + 1,0,0,0,4582,4583,7,17,0,0,4583,4584,7,8,0,0,4584,4585,7,15,0,0, + 4585,4586,7,1,0,0,4586,4587,7,13,0,0,4587,4588,7,3,0,0,4588,4589, + 7,15,0,0,4589,858,1,0,0,0,4590,4591,7,1,0,0,4591,4592,7,18,0,0,4592, + 4593,7,3,0,0,4593,4594,7,4,0,0,4594,4595,7,18,0,0,4595,860,1,0,0, + 0,4596,4597,7,2,0,0,4597,4598,7,15,0,0,4598,4599,7,7,0,0,4599,862, + 1,0,0,0,4600,4601,7,3,0,0,4601,4602,7,14,0,0,4602,4603,7,8,0,0,4603, + 4604,7,21,0,0,4604,4605,7,15,0,0,4605,4606,7,18,0,0,4606,4607,7, + 8,0,0,4607,4608,7,17,0,0,4608,4609,7,2,0,0,4609,864,1,0,0,0,4610, + 4611,7,17,0,0,4611,4612,7,1,0,0,4612,866,1,0,0,0,4613,4614,7,1,0, + 0,4614,868,1,0,0,0,4615,4616,7,17,0,0,4616,870,1,0,0,0,4617,4618, + 7,6,0,0,4618,872,1,0,0,0,4619,4620,7,11,0,0,4620,874,1,0,0,0,4621, + 4622,7,23,0,0,4622,876,1,0,0,0,4623,4624,7,24,0,0,4624,878,1,0,0, + 0,4625,4626,7,1,0,0,4626,4627,7,2,0,0,4627,4628,7,5,0,0,4628,880, + 1,0,0,0,4629,4630,7,1,0,0,4630,4631,7,2,0,0,4631,4632,7,5,0,0,4632, + 4633,7,1,0,0,4633,882,1,0,0,0,4634,4635,7,1,0,0,4635,4636,7,2,0, + 0,4636,4637,7,5,0,0,4637,4638,7,10,0,0,4638,4639,7,15,0,0,4639,4640, + 7,7,0,0,4640,4641,7,1,0,0,4641,884,1,0,0,0,4642,4643,7,17,0,0,4643, + 4644,7,8,0,0,4644,4645,7,15,0,0,4645,4646,7,1,0,0,4646,886,1,0,0, + 0,4647,4648,7,17,0,0,4648,4649,7,8,0,0,4649,4650,7,15,0,0,4650,4651, + 7,20,0,0,4651,4652,7,18,0,0,4652,4653,7,2,0,0,4653,4654,7,1,0,0, + 4654,888,1,0,0,0,4655,4656,7,6,0,0,4656,4657,7,4,0,0,4657,890,1, + 0,0,0,4658,4659,7,6,0,0,4659,4660,7,4,0,0,4660,4661,7,1,0,0,4661, + 892,1,0,0,0,4662,4663,7,6,0,0,4663,4664,7,10,0,0,4664,4665,7,20, + 0,0,4665,4666,7,4,0,0,4666,4667,7,1,0,0,4667,894,1,0,0,0,4668,4669, + 7,7,0,0,4669,4670,7,3,0,0,4670,4671,7,24,0,0,4671,4672,7,1,0,0,4672, + 896,1,0,0,0,4673,4674,7,17,0,0,4674,4675,7,10,0,0,4675,4676,7,15, + 0,0,4676,898,1,0,0,0,4677,4678,7,17,0,0,4678,4679,7,10,0,0,4679, + 4680,7,15,0,0,4680,4681,7,18,0,0,4681,4682,7,6,0,0,4682,4683,7,1, + 0,0,4683,900,1,0,0,0,4684,4685,7,20,0,0,4685,4686,7,1,0,0,4686,902, + 1,0,0,0,4687,4688,7,5,0,0,4688,4689,7,1,0,0,4689,904,1,0,0,0,4690, + 4691,7,7,0,0,4691,4692,7,1,0,0,4692,906,1,0,0,0,4693,4696,3,433, + 216,0,4694,4697,3,913,456,0,4695,4697,3,915,457,0,4696,4694,1,0, + 0,0,4696,4695,1,0,0,0,4697,4704,1,0,0,0,4698,4701,7,13,0,0,4699, + 4702,3,913,456,0,4700,4702,3,915,457,0,4701,4699,1,0,0,0,4701,4700, + 1,0,0,0,4702,4704,1,0,0,0,4703,4693,1,0,0,0,4703,4698,1,0,0,0,4704, + 908,1,0,0,0,4705,4706,3,935,467,0,4706,910,1,0,0,0,4707,4708,3,923, + 461,0,4708,912,1,0,0,0,4709,4711,3,933,466,0,4710,4709,1,0,0,0,4711, + 4712,1,0,0,0,4712,4710,1,0,0,0,4712,4713,1,0,0,0,4713,914,1,0,0, + 0,4714,4716,3,933,466,0,4715,4714,1,0,0,0,4716,4717,1,0,0,0,4717, + 4715,1,0,0,0,4717,4718,1,0,0,0,4718,4720,1,0,0,0,4719,4715,1,0,0, + 0,4719,4720,1,0,0,0,4720,4721,1,0,0,0,4721,4723,5,46,0,0,4722,4724, + 3,933,466,0,4723,4722,1,0,0,0,4724,4725,1,0,0,0,4725,4723,1,0,0, + 0,4725,4726,1,0,0,0,4726,916,1,0,0,0,4727,4729,3,933,466,0,4728, + 4727,1,0,0,0,4729,4730,1,0,0,0,4730,4728,1,0,0,0,4730,4731,1,0,0, + 0,4731,4733,1,0,0,0,4732,4728,1,0,0,0,4732,4733,1,0,0,0,4733,4734, + 1,0,0,0,4734,4736,5,46,0,0,4735,4737,3,933,466,0,4736,4735,1,0,0, + 0,4737,4738,1,0,0,0,4738,4736,1,0,0,0,4738,4739,1,0,0,0,4739,4740, + 1,0,0,0,4740,4741,7,16,0,0,4741,918,1,0,0,0,4742,4744,3,933,466, + 0,4743,4742,1,0,0,0,4744,4745,1,0,0,0,4745,4743,1,0,0,0,4745,4746, + 1,0,0,0,4746,4748,1,0,0,0,4747,4743,1,0,0,0,4747,4748,1,0,0,0,4748, + 4749,1,0,0,0,4749,4751,5,46,0,0,4750,4752,3,933,466,0,4751,4750, + 1,0,0,0,4752,4753,1,0,0,0,4753,4751,1,0,0,0,4753,4754,1,0,0,0,4754, + 4755,1,0,0,0,4755,4756,7,7,0,0,4756,920,1,0,0,0,4757,4759,7,28,0, + 0,4758,4760,7,29,0,0,4759,4758,1,0,0,0,4760,4761,1,0,0,0,4761,4759, + 1,0,0,0,4761,4762,1,0,0,0,4762,4764,1,0,0,0,4763,4757,1,0,0,0,4764, + 4765,1,0,0,0,4765,4763,1,0,0,0,4765,4766,1,0,0,0,4766,922,1,0,0, + 0,4767,4769,7,30,0,0,4768,4767,1,0,0,0,4769,4770,1,0,0,0,4770,4771, + 1,0,0,0,4770,4768,1,0,0,0,4771,4775,1,0,0,0,4772,4774,7,31,0,0,4773, + 4772,1,0,0,0,4774,4777,1,0,0,0,4775,4773,1,0,0,0,4775,4776,1,0,0, + 0,4776,4778,1,0,0,0,4777,4775,1,0,0,0,4778,4779,3,365,182,0,4779, + 924,1,0,0,0,4780,4782,3,923,461,0,4781,4780,1,0,0,0,4781,4782,1, + 0,0,0,4782,4783,1,0,0,0,4783,4784,3,935,467,0,4784,4785,3,921,460, + 0,4785,926,1,0,0,0,4786,4794,5,34,0,0,4787,4788,5,92,0,0,4788,4793, + 9,0,0,0,4789,4790,5,34,0,0,4790,4793,5,34,0,0,4791,4793,8,32,0,0, + 4792,4787,1,0,0,0,4792,4789,1,0,0,0,4792,4791,1,0,0,0,4793,4796, + 1,0,0,0,4794,4792,1,0,0,0,4794,4795,1,0,0,0,4795,4797,1,0,0,0,4796, + 4794,1,0,0,0,4797,4798,5,34,0,0,4798,928,1,0,0,0,4799,4807,5,39, + 0,0,4800,4801,5,92,0,0,4801,4806,9,0,0,0,4802,4803,5,39,0,0,4803, + 4806,5,39,0,0,4804,4806,8,33,0,0,4805,4800,1,0,0,0,4805,4802,1,0, + 0,0,4805,4804,1,0,0,0,4806,4809,1,0,0,0,4807,4805,1,0,0,0,4807,4808, + 1,0,0,0,4808,4810,1,0,0,0,4809,4807,1,0,0,0,4810,4811,5,39,0,0,4811, + 930,1,0,0,0,4812,4820,5,96,0,0,4813,4814,5,92,0,0,4814,4819,9,0, + 0,0,4815,4816,5,96,0,0,4816,4819,5,96,0,0,4817,4819,8,34,0,0,4818, + 4813,1,0,0,0,4818,4815,1,0,0,0,4818,4817,1,0,0,0,4819,4822,1,0,0, + 0,4820,4818,1,0,0,0,4820,4821,1,0,0,0,4821,4823,1,0,0,0,4822,4820, + 1,0,0,0,4823,4824,5,96,0,0,4824,932,1,0,0,0,4825,4826,7,27,0,0,4826, + 934,1,0,0,0,4827,4829,7,35,0,0,4828,4827,1,0,0,0,4829,4830,1,0,0, + 0,4830,4831,1,0,0,0,4830,4828,1,0,0,0,4831,4835,1,0,0,0,4832,4834, + 7,31,0,0,4833,4832,1,0,0,0,4834,4837,1,0,0,0,4835,4833,1,0,0,0,4835, + 4836,1,0,0,0,4836,936,1,0,0,0,4837,4835,1,0,0,0,4838,4839,5,47,0, + 0,4839,4840,5,47,0,0,4840,4846,1,0,0,0,4841,4842,5,92,0,0,4842,4845, + 5,10,0,0,4843,4845,8,36,0,0,4844,4841,1,0,0,0,4844,4843,1,0,0,0, + 4845,4848,1,0,0,0,4846,4844,1,0,0,0,4846,4847,1,0,0,0,4847,4850, + 1,0,0,0,4848,4846,1,0,0,0,4849,4851,5,13,0,0,4850,4849,1,0,0,0,4850, + 4851,1,0,0,0,4851,4853,1,0,0,0,4852,4854,5,10,0,0,4853,4852,1,0, + 0,0,4853,4854,1,0,0,0,4854,4855,1,0,0,0,4855,4856,6,468,1,0,4856, + 938,1,0,0,0,4857,4858,5,47,0,0,4858,4859,5,42,0,0,4859,4863,1,0, + 0,0,4860,4862,9,0,0,0,4861,4860,1,0,0,0,4862,4865,1,0,0,0,4863,4864, + 1,0,0,0,4863,4861,1,0,0,0,4864,4866,1,0,0,0,4865,4863,1,0,0,0,4866, + 4867,5,42,0,0,4867,4868,5,47,0,0,4868,4869,1,0,0,0,4869,4870,6,469, + 1,0,4870,940,1,0,0,0,4871,4872,9,0,0,0,4872,4873,1,0,0,0,4873,4874, + 6,470,2,0,4874,942,1,0,0,0,41,0,946,2880,2886,2888,2890,2898,2903, + 2909,2911,4696,4701,4703,4712,4717,4719,4725,4730,4732,4738,4745, + 4747,4753,4761,4765,4770,4775,4781,4792,4794,4805,4807,4818,4820, + 4830,4835,4844,4846,4850,4853,4863,3,0,2,0,0,1,0,0,3,0 ]; private static __ATN: antlr.ATN; diff --git a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParser.interp b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParser.interp index d0e23277c7a7..9a8627280bbd 100644 --- a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParser.interp +++ b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParser.interp @@ -4,20 +4,27 @@ null 'SEARCH' 'DESCRIBE' 'SHOW' +'EXPLAIN' 'FROM' 'WHERE' 'FIELDS' +'FIELD' +'TABLE' 'RENAME' 'STATS' +'EVENTSTATS' 'DEDUP' 'SORT' 'EVAL' 'HEAD' +'BIN' 'TOP' 'RARE' 'PARSE' -'METHOD' +'SPATH' 'REGEX' +'REX' +'SED' 'PUNCT' 'GROK' 'PATTERN' @@ -26,24 +33,62 @@ null 'KMEANS' 'AD' 'ML' +'FILLNULL' +'FLATTEN' +'TRENDLINE' +'TIMECHART' +'APPENDCOL' +'EXPAND' +'SIMPLE_PATTERN' +'BRAIN' +'VARIABLE_COUNT_THRESHOLD' +'FREQUENCY_THRESHOLD_PERCENTAGE' +'METHOD' +'MAX_SAMPLE_COUNT' +'MAX_MATCH' +'OFFSET_FIELD' +'BUFFER_LIMIT' +'LABEL' +'AGGREGATION' +'JOIN' +'ON' +'INNER' +'OUTER' +'FULL' +'SEMI' +'ANTI' +'CROSS' +'HINT.LEFT' +'HINT.RIGHT' 'AS' 'BY' 'SOURCE' 'INDEX' +'A' +'ASC' 'D' 'DESC' 'DATASOURCES' -'SORTBY' +'USING' +'WITH' +'SIMPLE' +'STANDARD' +'COST' +'EXTENDED' +'OVERRIDE' +'OVERWRITE' 'AUTO' 'STR' -'IP' 'NUM' +'SMA' +'WMA' 'KEEPEMPTY' 'CONSECUTIVE' 'DEDUP_SPLITVALUES' 'PARTITIONS' 'ALLNUM' 'DELIM' +'BUCKET_NULLABLE' 'CENTROIDS' 'ITERATIONS' 'DISTANCE_TYPE' @@ -58,8 +103,19 @@ null 'TIME_ZONE' 'TRAINING_DATA_SIZE' 'ANOMALY_SCORE_THRESHOLD' +'APPEND' +'COUNTFIELD' +'SHOWCOUNT' +'LIMIT' +'USEOTHER' +'INPUT' +'OUTPUT' +'PATH' 'CASE' +'ELSE' 'IN' +'EXISTS' +'GEOIP' 'NOT' 'OR' 'AND' @@ -67,6 +123,7 @@ null 'TRUE' 'FALSE' 'REGEXP' +'REGEX_MATCH' 'CONVERT_TZ' 'DATETIME' 'DAY' @@ -108,10 +165,12 @@ null 'FLOAT' 'STRING' 'BOOLEAN' +'IP' '|' ',' '.' '=' +'==' '>' '<' null @@ -128,15 +187,19 @@ null ')' '[' ']' +'{' +'}' '\'' '"' '`' +'->' '~' '&' '^' 'AVG' 'COUNT' 'DISTINCT_COUNT' +'DISTINCT_COUNT_APPROX' 'ESTDC' 'ESTDC_ERROR' 'MAX' @@ -153,16 +216,14 @@ null 'VAR_POP' 'STDDEV_SAMP' 'STDDEV_POP' +'PERC' 'PERCENTILE' +'PERCENTILE_APPROX' +'EARLIEST' +'LATEST' 'TAKE' -'FIRST' -'LAST' 'LIST' 'VALUES' -'EARLIEST' -'EARLIEST_TIME' -'LATEST' -'LATEST_TIME' 'PER_DAY' 'PER_HOUR' 'PER_MINUTE' @@ -171,6 +232,19 @@ null 'SPARKLINE' 'C' 'DC' +'ROW_NUMBER' +'RANK' +'DENSE_RANK' +'PERCENT_RANK' +'CUME_DIST' +'FIRST' +'LAST' +'NTH' +'NTILE' +'ADD' +'SUBTRACT' +'MULTIPLY' +'DIVIDE' 'ABS' 'CBRT' 'CEIL' @@ -179,12 +253,13 @@ null 'CRC32' 'E' 'EXP' +'EXPM1' 'FLOOR' 'LN' 'LOG' -'LOG10' -'LOG2' +null 'MOD' +'MODULUS' 'PI' 'POSITION' 'POW' @@ -194,16 +269,23 @@ null 'SIGN' 'SQRT' 'TRUNCATE' +'RINT' +'SIGNUM' 'ACOS' 'ASIN' 'ATAN' 'ATAN2' 'COS' +'COSH' 'COT' 'DEGREES' 'RADIANS' 'SIN' +'SINH' 'TAN' +'MD5' +'SHA1' +'SHA2' 'ADDDATE' 'ADDTIME' 'CURDATE' @@ -255,6 +337,7 @@ null 'UTC_TIMESTAMP' 'WEEKDAY' 'YEARWEEK' +'STRFTIME' 'SUBSTR' 'SUBSTRING' 'LTRIM' @@ -277,10 +360,34 @@ null 'LIKE' 'ISNULL' 'ISNOTNULL' +'CIDRMATCH' +'BETWEEN' +'ISPRESENT' +'ISEMPTY' +'ISBLANK' +'ARRAY' +'ARRAY_LENGTH' +'MVJOIN' +'FORALL' +'FILTER' +'TRANSFORM' +'REDUCE' +'JSON_VALID' +'JSON' +'JSON_OBJECT' +'JSON_ARRAY' +'JSON_ARRAY_LENGTH' +'JSON_EXTRACT' +'JSON_KEYS' +'JSON_SET' +'JSON_DELETE' +'JSON_APPEND' +'JSON_EXTEND' 'IFNULL' 'NULLIF' 'IF' 'TYPEOF' +'COALESCE' 'MATCH' 'MATCH_PHRASE' 'MATCH_PHRASE_PREFIX' @@ -320,6 +427,11 @@ null 'TYPE' 'ZERO_TERMS_QUERY' 'SPAN' +'BINS' +'MINSPAN' +'START' +'END' +'ALIGNTIME' 'MS' 'S' 'M' @@ -327,6 +439,25 @@ null 'W' 'Q' 'Y' +'SEC' +'SECS' +'SECONDS' +'MINS' +'MINUTES' +'HR' +'HRS' +'HOURS' +'DAYS' +'MON' +'MONTHS' +'US' +'CS' +'DS' +null +null +null +null +null null null null @@ -343,20 +474,27 @@ SPACE SEARCH DESCRIBE SHOW +EXPLAIN FROM WHERE FIELDS +FIELD +TABLE RENAME STATS +EVENTSTATS DEDUP SORT EVAL HEAD +BIN TOP RARE PARSE -METHOD +SPATH REGEX +REX +SED PUNCT GROK PATTERN @@ -365,24 +503,62 @@ NEW_FIELD KMEANS AD ML +FILLNULL +FLATTEN +TRENDLINE +TIMECHART +APPENDCOL +EXPAND +SIMPLE_PATTERN +BRAIN +VARIABLE_COUNT_THRESHOLD +FREQUENCY_THRESHOLD_PERCENTAGE +METHOD +MAX_SAMPLE_COUNT +MAX_MATCH +OFFSET_FIELD +BUFFER_LIMIT +LABEL +AGGREGATION +JOIN +ON +INNER +OUTER +FULL +SEMI +ANTI +CROSS +LEFT_HINT +RIGHT_HINT AS BY SOURCE INDEX +A +ASC D DESC DATASOURCES -SORTBY +USING +WITH +SIMPLE +STANDARD +COST +EXTENDED +OVERRIDE +OVERWRITE AUTO STR -IP NUM +SMA +WMA KEEPEMPTY CONSECUTIVE DEDUP_SPLITVALUES PARTITIONS ALLNUM DELIM +BUCKET_NULLABLE CENTROIDS ITERATIONS DISTANCE_TYPE @@ -397,8 +573,19 @@ TIME_FIELD TIME_ZONE TRAINING_DATA_SIZE ANOMALY_SCORE_THRESHOLD +APPEND +COUNTFIELD +SHOWCOUNT +LIMIT +USEOTHER +INPUT +OUTPUT +PATH CASE +ELSE IN +EXISTS +GEOIP NOT OR AND @@ -406,6 +593,7 @@ XOR TRUE FALSE REGEXP +REGEX_MATCH CONVERT_TZ DATETIME DAY @@ -447,10 +635,12 @@ LONG FLOAT STRING BOOLEAN +IP PIPE COMMA DOT EQUAL +DOUBLE_EQUAL GREATER LESS NOT_GREATER @@ -467,15 +657,19 @@ LT_PRTHS RT_PRTHS LT_SQR_PRTHS RT_SQR_PRTHS +LT_CURLY +RT_CURLY SINGLE_QUOTE DOUBLE_QUOTE BACKTICK +ARROW BIT_NOT_OP BIT_AND_OP BIT_XOR_OP AVG COUNT DISTINCT_COUNT +DISTINCT_COUNT_APPROX ESTDC ESTDC_ERROR MAX @@ -492,16 +686,14 @@ VAR_SAMP VAR_POP STDDEV_SAMP STDDEV_POP +PERC PERCENTILE +PERCENTILE_APPROX +EARLIEST +LATEST TAKE -FIRST -LAST LIST VALUES -EARLIEST -EARLIEST_TIME -LATEST -LATEST_TIME PER_DAY PER_HOUR PER_MINUTE @@ -510,6 +702,19 @@ RATE SPARKLINE C DC +ROW_NUMBER +RANK +DENSE_RANK +PERCENT_RANK +CUME_DIST +FIRST +LAST +NTH +NTILE +PLUS_FUCTION +MINUS_FUCTION +STAR_FUNCTION +DIVIDE_FUNCTION ABS CBRT CEIL @@ -518,12 +723,13 @@ CONV CRC32 E EXP +EXPM1 FLOOR LN LOG -LOG10 -LOG2 +LOG_WITH_BASE MOD +MODULUS PI POSITION POW @@ -533,16 +739,23 @@ ROUND SIGN SQRT TRUNCATE +RINT +SIGNUM ACOS ASIN ATAN ATAN2 COS +COSH COT DEGREES RADIANS SIN +SINH TAN +MD5 +SHA1 +SHA2 ADDDATE ADDTIME CURDATE @@ -594,6 +807,7 @@ UTC_TIME UTC_TIMESTAMP WEEKDAY YEARWEEK +STRFTIME SUBSTR SUBSTRING LTRIM @@ -616,10 +830,34 @@ CAST LIKE ISNULL ISNOTNULL +CIDRMATCH +BETWEEN +ISPRESENT +ISEMPTY +ISBLANK +ARRAY +ARRAY_LENGTH +MVJOIN +FORALL +FILTER +TRANSFORM +REDUCE +JSON_VALID +JSON +JSON_OBJECT +JSON_ARRAY +JSON_ARRAY_LENGTH +JSON_EXTRACT +JSON_KEYS +JSON_SET +JSON_DELETE +JSON_APPEND +JSON_EXTEND IFNULL NULLIF IF TYPEOF +COALESCE MATCH MATCH_PHRASE MATCH_PHRASE_PREFIX @@ -659,6 +897,11 @@ TIE_BREAKER TYPE ZERO_TERMS_QUERY SPAN +BINS +MINSPAN +START +END +ALIGNTIME MS S M @@ -666,41 +909,117 @@ H W Q Y +SEC +SECS +SECONDS +MINS +MINUTES +HR +HRS +HOURS +DAYS +MON +MONTHS +US +CS +DS +PERCENTILE_SHORTCUT ID CLUSTER INTEGER_LITERAL DECIMAL_LITERAL +FLOAT_LITERAL +DOUBLE_LITERAL ID_DATE_SUFFIX DQUOTA_STRING SQUOTA_STRING BQUOTA_STRING +LINE_COMMENT +BLOCK_COMMENT ERROR_RECOGNITION rule names: root pplStatement -dmlStatement queryStatement +explainStatement +explainMode +subSearch pplCommands commands +commandName searchCommand +searchExpression +searchTerm +searchLiteral +searchFieldComparison +searchFieldInList +searchLiteralList +searchComparisonOperator describeCommand showDataSourcesCommand whereCommand fieldsCommand +tableCommand +fieldsCommandBody +wcFieldList renameCommand statsCommand +statsArgs +partitionsArg +allnumArg +delimArg +bucketNullableArg +dedupSplitArg +eventstatsCommand dedupCommand sortCommand +reverseCommand +timechartCommand +timechartParameter +timechartArg +spanLiteral evalCommand headCommand +binCommand +binOption +aligntimeValue +spanValue +logSpanValue topCommand rareCommand grokCommand parseCommand +spathCommand +spathParameter +indexablePath +pathElement +pathArrayAccess +regexCommand +regexExpr +rexCommand +rexExpr +rexOption +patternsMethod patternsCommand patternsParameter -patternsMethod +patternMethod +patternMode +lookupCommand +lookupMappingList +outputCandidateList +lookupPair +fillnullCommand +fillNullWith +fillNullUsing +replacementPair +trendlineCommand +trendlineClause +trendlineType +expandCommand +flattenCommand +appendcolCommand +appendCommand kmeansCommand kmeansParameter adCommand @@ -708,7 +1027,21 @@ adParameter mlCommand mlArg fromClause +tableOrSubqueryClause tableSourceClause +dynamicSourceClause +sourceReferences +sourceReference +sourceFilterArgs +sourceFilterArg +joinCommand +sqlLikeJoinType +joinType +sideAlias +joinCriteria +joinHintList +hintPair +joinOption renameClasue byClause statsByClause @@ -716,41 +1049,45 @@ bySpanClause spanClause sortbyClause evalClause +eventstatsAggTerm +windowFunction +windowFunctionName +scalarWindowFunctionName statsAggTerm statsFunction statsFunctionName takeAggFunction -percentileAggFunction -expression +percentileApproxFunction +numericLiteral logicalExpression -logicalOrExpression -logicalXorExpression -logicalAndExpression -logicalNotExpression -primaryLogicalExpression -comparisonExpression +expression valueExpression -primaryExpression -positionFunction -booleanExpression +evalExpression +functionCall +positionFunctionCall +caseFunctionCall relevanceExpression singleFieldRelevanceFunction multiFieldRelevanceFunction tableSource tableFunction fieldList -wcFieldList sortField sortFieldExpression fieldExpression wcFieldExpression +selectFieldExpression +renameFieldExpression evalFunctionCall dataTypeFunctionCall -booleanFunctionCall convertedDataType evalFunctionName functionArgs +namedFunctionArgs functionArg +namedFunctionArg +functionArgExpression +lambda relevanceArg relevanceArgName relevanceFieldAndWeight @@ -759,17 +1096,22 @@ relevanceField relevanceQuery relevanceArgValue mathematicalFunctionName +geoipFunctionName +collectionFunctionName trigonometricFunctionName +jsonFunctionName +cryptographicFunctionName dateTimeFunctionName -getFormatFunction +getFormatFunctionCall getFormatType -extractFunction +extractFunctionCall simpleDateTimePart complexDateTimePart datetimePart -timestampFunction +timestampFunctionCall timestampFunctionName -conditionFunctionBase +conditionFunctionName +flowControlFunctionName systemFunctionName textFunctionName positionFunctionName @@ -781,6 +1123,8 @@ intervalLiteral stringLiteral integerLiteral decimalLiteral +doubleLiteral +floatLiteral booleanLiteral datetimeLiteral dateLiteral @@ -792,11 +1136,13 @@ valueList qualifiedName tableQualifiedName wcQualifiedName +identifierSeq ident tableIdent wildcard keywordsCanBeId +searchableKeyWord atn: -[4, 1, 336, 1195, 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, 1, 0, 3, 0, 240, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 5, 3, 251, 8, 3, 10, 3, 12, 3, 254, 9, 3, 1, 4, 1, 4, 1, 4, 3, 4, 259, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 277, 8, 5, 1, 6, 3, 6, 280, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 286, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 292, 8, 6, 1, 6, 1, 6, 3, 6, 296, 8, 6, 1, 6, 1, 6, 3, 6, 300, 8, 6, 3, 6, 302, 8, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 3, 10, 315, 8, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 323, 8, 11, 10, 11, 12, 11, 326, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 332, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 337, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 342, 8, 12, 1, 12, 1, 12, 1, 12, 5, 12, 347, 8, 12, 10, 12, 12, 12, 350, 9, 12, 1, 12, 3, 12, 353, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 358, 8, 12, 1, 13, 1, 13, 3, 13, 362, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 368, 8, 13, 1, 13, 1, 13, 1, 13, 3, 13, 373, 8, 13, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 382, 8, 15, 10, 15, 12, 15, 385, 9, 15, 1, 16, 1, 16, 3, 16, 389, 8, 16, 1, 16, 1, 16, 3, 16, 393, 8, 16, 1, 17, 1, 17, 3, 17, 397, 8, 17, 1, 17, 1, 17, 3, 17, 401, 8, 17, 1, 18, 1, 18, 1, 18, 3, 18, 406, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 5, 21, 418, 8, 21, 10, 21, 12, 21, 421, 9, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 431, 8, 22, 1, 23, 1, 23, 1, 24, 1, 24, 5, 24, 437, 8, 24, 10, 24, 12, 24, 440, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 451, 8, 25, 1, 26, 1, 26, 5, 26, 455, 8, 26, 10, 26, 12, 26, 458, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 496, 8, 27, 1, 28, 1, 28, 5, 28, 500, 8, 28, 10, 28, 12, 28, 503, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 521, 8, 30, 1, 31, 1, 31, 1, 31, 5, 31, 526, 8, 31, 10, 31, 12, 31, 529, 9, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 547, 8, 34, 1, 35, 1, 35, 1, 35, 3, 35, 552, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 560, 8, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 5, 37, 567, 8, 37, 10, 37, 12, 37, 570, 9, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 3, 39, 579, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 596, 8, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 605, 8, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 3, 44, 620, 8, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 5, 46, 627, 8, 46, 10, 46, 12, 46, 630, 9, 46, 1, 47, 1, 47, 1, 47, 5, 47, 635, 8, 47, 10, 47, 12, 47, 638, 9, 47, 1, 48, 1, 48, 3, 48, 642, 8, 48, 1, 48, 5, 48, 645, 8, 48, 10, 48, 12, 48, 648, 9, 48, 1, 49, 1, 49, 1, 49, 3, 49, 653, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 662, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 672, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 684, 8, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 692, 8, 52, 10, 52, 12, 52, 695, 9, 52, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 701, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 3, 56, 714, 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 5, 57, 723, 8, 57, 10, 57, 12, 57, 726, 9, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 736, 8, 58, 10, 58, 12, 58, 739, 9, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 746, 8, 58, 10, 58, 12, 58, 749, 9, 58, 1, 58, 1, 58, 1, 59, 1, 59, 3, 59, 755, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 5, 61, 765, 8, 61, 10, 61, 12, 61, 768, 9, 61, 1, 62, 1, 62, 1, 62, 5, 62, 773, 8, 62, 10, 62, 12, 62, 776, 9, 62, 1, 63, 3, 63, 779, 8, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 804, 8, 64, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 837, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 845, 8, 71, 1, 72, 1, 72, 1, 72, 5, 72, 850, 8, 72, 10, 72, 12, 72, 853, 9, 72, 3, 72, 855, 8, 72, 1, 73, 1, 73, 1, 73, 3, 73, 860, 8, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 878, 8, 76, 1, 77, 1, 77, 3, 77, 882, 8, 77, 1, 78, 1, 78, 3, 78, 886, 8, 78, 1, 79, 1, 79, 1, 80, 1, 80, 3, 80, 892, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 917, 8, 81, 1, 82, 1, 82, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 89, 1, 89, 3, 89, 945, 8, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 93, 1, 93, 1, 94, 1, 94, 1, 95, 1, 95, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 3, 99, 978, 8, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 102, 3, 102, 987, 8, 102, 1, 102, 1, 102, 1, 103, 3, 103, 992, 8, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 3, 105, 1001, 8, 105, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1020, 8, 111, 10, 111, 12, 111, 1023, 9, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 5, 112, 1030, 8, 112, 10, 112, 12, 112, 1033, 9, 112, 1, 113, 1, 113, 1, 113, 5, 113, 1038, 8, 113, 10, 113, 12, 113, 1041, 9, 113, 1, 114, 1, 114, 1, 114, 5, 114, 1046, 8, 114, 10, 114, 12, 114, 1049, 9, 114, 1, 115, 3, 115, 1052, 8, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1061, 8, 115, 1, 116, 3, 116, 1064, 8, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 5, 117, 1071, 8, 117, 10, 117, 12, 117, 1074, 9, 117, 1, 117, 3, 117, 1077, 8, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 1091, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 1193, 8, 118, 1, 118, 0, 1, 104, 119, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 0, 21, 1, 0, 118, 119, 1, 0, 18, 19, 2, 0, 137, 137, 171, 171, 5, 0, 135, 136, 140, 140, 143, 143, 148, 148, 150, 153, 1, 0, 120, 122, 3, 0, 7, 7, 56, 56, 289, 319, 1, 0, 195, 204, 13, 0, 68, 70, 74, 74, 76, 76, 79, 79, 82, 82, 84, 84, 86, 87, 89, 92, 94, 97, 205, 222, 224, 225, 227, 243, 246, 255, 4, 0, 69, 69, 212, 212, 241, 241, 243, 243, 8, 0, 70, 70, 76, 76, 82, 82, 84, 84, 89, 89, 91, 92, 95, 95, 97, 97, 8, 0, 71, 73, 75, 75, 77, 78, 80, 80, 85, 85, 88, 88, 93, 93, 98, 98, 1, 0, 244, 245, 1, 0, 275, 280, 2, 0, 256, 260, 262, 273, 2, 0, 67, 67, 112, 117, 1, 0, 282, 285, 1, 0, 286, 288, 1, 0, 333, 334, 1, 0, 65, 66, 9, 0, 70, 73, 75, 78, 80, 80, 82, 82, 84, 85, 88, 89, 91, 93, 95, 95, 97, 98, 9, 0, 31, 31, 70, 70, 76, 76, 83, 84, 89, 89, 91, 92, 95, 95, 97, 97, 321, 327, 1353, 0, 239, 1, 0, 0, 0, 2, 243, 1, 0, 0, 0, 4, 245, 1, 0, 0, 0, 6, 247, 1, 0, 0, 0, 8, 258, 1, 0, 0, 0, 10, 276, 1, 0, 0, 0, 12, 301, 1, 0, 0, 0, 14, 303, 1, 0, 0, 0, 16, 306, 1, 0, 0, 0, 18, 309, 1, 0, 0, 0, 20, 312, 1, 0, 0, 0, 22, 318, 1, 0, 0, 0, 24, 327, 1, 0, 0, 0, 26, 359, 1, 0, 0, 0, 28, 374, 1, 0, 0, 0, 30, 377, 1, 0, 0, 0, 32, 386, 1, 0, 0, 0, 34, 394, 1, 0, 0, 0, 36, 402, 1, 0, 0, 0, 38, 407, 1, 0, 0, 0, 40, 411, 1, 0, 0, 0, 42, 415, 1, 0, 0, 0, 44, 430, 1, 0, 0, 0, 46, 432, 1, 0, 0, 0, 48, 434, 1, 0, 0, 0, 50, 450, 1, 0, 0, 0, 52, 452, 1, 0, 0, 0, 54, 495, 1, 0, 0, 0, 56, 497, 1, 0, 0, 0, 58, 504, 1, 0, 0, 0, 60, 520, 1, 0, 0, 0, 62, 522, 1, 0, 0, 0, 64, 530, 1, 0, 0, 0, 66, 534, 1, 0, 0, 0, 68, 546, 1, 0, 0, 0, 70, 548, 1, 0, 0, 0, 72, 553, 1, 0, 0, 0, 74, 563, 1, 0, 0, 0, 76, 571, 1, 0, 0, 0, 78, 575, 1, 0, 0, 0, 80, 595, 1, 0, 0, 0, 82, 597, 1, 0, 0, 0, 84, 599, 1, 0, 0, 0, 86, 608, 1, 0, 0, 0, 88, 619, 1, 0, 0, 0, 90, 621, 1, 0, 0, 0, 92, 623, 1, 0, 0, 0, 94, 631, 1, 0, 0, 0, 96, 639, 1, 0, 0, 0, 98, 652, 1, 0, 0, 0, 100, 661, 1, 0, 0, 0, 102, 671, 1, 0, 0, 0, 104, 683, 1, 0, 0, 0, 106, 700, 1, 0, 0, 0, 108, 702, 1, 0, 0, 0, 110, 709, 1, 0, 0, 0, 112, 713, 1, 0, 0, 0, 114, 715, 1, 0, 0, 0, 116, 729, 1, 0, 0, 0, 118, 754, 1, 0, 0, 0, 120, 756, 1, 0, 0, 0, 122, 761, 1, 0, 0, 0, 124, 769, 1, 0, 0, 0, 126, 778, 1, 0, 0, 0, 128, 803, 1, 0, 0, 0, 130, 805, 1, 0, 0, 0, 132, 807, 1, 0, 0, 0, 134, 809, 1, 0, 0, 0, 136, 814, 1, 0, 0, 0, 138, 821, 1, 0, 0, 0, 140, 836, 1, 0, 0, 0, 142, 844, 1, 0, 0, 0, 144, 854, 1, 0, 0, 0, 146, 859, 1, 0, 0, 0, 148, 863, 1, 0, 0, 0, 150, 867, 1, 0, 0, 0, 152, 877, 1, 0, 0, 0, 154, 881, 1, 0, 0, 0, 156, 885, 1, 0, 0, 0, 158, 887, 1, 0, 0, 0, 160, 891, 1, 0, 0, 0, 162, 916, 1, 0, 0, 0, 164, 918, 1, 0, 0, 0, 166, 920, 1, 0, 0, 0, 168, 922, 1, 0, 0, 0, 170, 929, 1, 0, 0, 0, 172, 931, 1, 0, 0, 0, 174, 938, 1, 0, 0, 0, 176, 940, 1, 0, 0, 0, 178, 944, 1, 0, 0, 0, 180, 946, 1, 0, 0, 0, 182, 955, 1, 0, 0, 0, 184, 957, 1, 0, 0, 0, 186, 959, 1, 0, 0, 0, 188, 961, 1, 0, 0, 0, 190, 963, 1, 0, 0, 0, 192, 965, 1, 0, 0, 0, 194, 967, 1, 0, 0, 0, 196, 969, 1, 0, 0, 0, 198, 977, 1, 0, 0, 0, 200, 979, 1, 0, 0, 0, 202, 983, 1, 0, 0, 0, 204, 986, 1, 0, 0, 0, 206, 991, 1, 0, 0, 0, 208, 995, 1, 0, 0, 0, 210, 1000, 1, 0, 0, 0, 212, 1002, 1, 0, 0, 0, 214, 1005, 1, 0, 0, 0, 216, 1008, 1, 0, 0, 0, 218, 1011, 1, 0, 0, 0, 220, 1013, 1, 0, 0, 0, 222, 1015, 1, 0, 0, 0, 224, 1026, 1, 0, 0, 0, 226, 1034, 1, 0, 0, 0, 228, 1042, 1, 0, 0, 0, 230, 1060, 1, 0, 0, 0, 232, 1063, 1, 0, 0, 0, 234, 1090, 1, 0, 0, 0, 236, 1192, 1, 0, 0, 0, 238, 240, 3, 2, 1, 0, 239, 238, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 241, 242, 5, 0, 0, 1, 242, 1, 1, 0, 0, 0, 243, 244, 3, 4, 2, 0, 244, 3, 1, 0, 0, 0, 245, 246, 3, 6, 3, 0, 246, 5, 1, 0, 0, 0, 247, 252, 3, 8, 4, 0, 248, 249, 5, 109, 0, 0, 249, 251, 3, 10, 5, 0, 250, 248, 1, 0, 0, 0, 251, 254, 1, 0, 0, 0, 252, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 7, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 255, 259, 3, 12, 6, 0, 256, 259, 3, 14, 7, 0, 257, 259, 3, 16, 8, 0, 258, 255, 1, 0, 0, 0, 258, 256, 1, 0, 0, 0, 258, 257, 1, 0, 0, 0, 259, 9, 1, 0, 0, 0, 260, 277, 3, 18, 9, 0, 261, 277, 3, 20, 10, 0, 262, 277, 3, 22, 11, 0, 263, 277, 3, 24, 12, 0, 264, 277, 3, 26, 13, 0, 265, 277, 3, 28, 14, 0, 266, 277, 3, 30, 15, 0, 267, 277, 3, 32, 16, 0, 268, 277, 3, 34, 17, 0, 269, 277, 3, 36, 18, 0, 270, 277, 3, 38, 19, 0, 271, 277, 3, 40, 20, 0, 272, 277, 3, 42, 21, 0, 273, 277, 3, 48, 24, 0, 274, 277, 3, 52, 26, 0, 275, 277, 3, 56, 28, 0, 276, 260, 1, 0, 0, 0, 276, 261, 1, 0, 0, 0, 276, 262, 1, 0, 0, 0, 276, 263, 1, 0, 0, 0, 276, 264, 1, 0, 0, 0, 276, 265, 1, 0, 0, 0, 276, 266, 1, 0, 0, 0, 276, 267, 1, 0, 0, 0, 276, 268, 1, 0, 0, 0, 276, 269, 1, 0, 0, 0, 276, 270, 1, 0, 0, 0, 276, 271, 1, 0, 0, 0, 276, 272, 1, 0, 0, 0, 276, 273, 1, 0, 0, 0, 276, 274, 1, 0, 0, 0, 276, 275, 1, 0, 0, 0, 277, 11, 1, 0, 0, 0, 278, 280, 5, 2, 0, 0, 279, 278, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 282, 3, 60, 30, 0, 282, 283, 3, 90, 45, 0, 283, 302, 1, 0, 0, 0, 284, 286, 5, 2, 0, 0, 285, 284, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 288, 3, 90, 45, 0, 288, 289, 3, 60, 30, 0, 289, 302, 1, 0, 0, 0, 290, 292, 5, 2, 0, 0, 291, 290, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 302, 3, 60, 30, 0, 294, 296, 5, 2, 0, 0, 295, 294, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 302, 3, 90, 45, 0, 298, 300, 5, 2, 0, 0, 299, 298, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 302, 1, 0, 0, 0, 301, 279, 1, 0, 0, 0, 301, 285, 1, 0, 0, 0, 301, 291, 1, 0, 0, 0, 301, 295, 1, 0, 0, 0, 301, 299, 1, 0, 0, 0, 302, 13, 1, 0, 0, 0, 303, 304, 5, 3, 0, 0, 304, 305, 3, 62, 31, 0, 305, 15, 1, 0, 0, 0, 306, 307, 5, 4, 0, 0, 307, 308, 5, 33, 0, 0, 308, 17, 1, 0, 0, 0, 309, 310, 5, 6, 0, 0, 310, 311, 3, 90, 45, 0, 311, 19, 1, 0, 0, 0, 312, 314, 5, 7, 0, 0, 313, 315, 7, 0, 0, 0, 314, 313, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 317, 3, 122, 61, 0, 317, 21, 1, 0, 0, 0, 318, 319, 5, 8, 0, 0, 319, 324, 3, 64, 32, 0, 320, 321, 5, 110, 0, 0, 321, 323, 3, 64, 32, 0, 322, 320, 1, 0, 0, 0, 323, 326, 1, 0, 0, 0, 324, 322, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 23, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 327, 331, 5, 9, 0, 0, 328, 329, 5, 42, 0, 0, 329, 330, 5, 112, 0, 0, 330, 332, 3, 204, 102, 0, 331, 328, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 336, 1, 0, 0, 0, 333, 334, 5, 43, 0, 0, 334, 335, 5, 112, 0, 0, 335, 337, 3, 208, 104, 0, 336, 333, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 341, 1, 0, 0, 0, 338, 339, 5, 44, 0, 0, 339, 340, 5, 112, 0, 0, 340, 342, 3, 202, 101, 0, 341, 338, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 348, 3, 78, 39, 0, 344, 345, 5, 110, 0, 0, 345, 347, 3, 78, 39, 0, 346, 344, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 352, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 351, 353, 3, 68, 34, 0, 352, 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 357, 1, 0, 0, 0, 354, 355, 5, 41, 0, 0, 355, 356, 5, 112, 0, 0, 356, 358, 3, 208, 104, 0, 357, 354, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 25, 1, 0, 0, 0, 359, 361, 5, 10, 0, 0, 360, 362, 3, 204, 102, 0, 361, 360, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 367, 3, 122, 61, 0, 364, 365, 5, 39, 0, 0, 365, 366, 5, 112, 0, 0, 366, 368, 3, 208, 104, 0, 367, 364, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 372, 1, 0, 0, 0, 369, 370, 5, 40, 0, 0, 370, 371, 5, 112, 0, 0, 371, 373, 3, 208, 104, 0, 372, 369, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 27, 1, 0, 0, 0, 374, 375, 5, 11, 0, 0, 375, 376, 3, 74, 37, 0, 376, 29, 1, 0, 0, 0, 377, 378, 5, 12, 0, 0, 378, 383, 3, 76, 38, 0, 379, 380, 5, 110, 0, 0, 380, 382, 3, 76, 38, 0, 381, 379, 1, 0, 0, 0, 382, 385, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 31, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 386, 388, 5, 13, 0, 0, 387, 389, 3, 204, 102, 0, 388, 387, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 392, 1, 0, 0, 0, 390, 391, 5, 5, 0, 0, 391, 393, 3, 204, 102, 0, 392, 390, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 33, 1, 0, 0, 0, 394, 396, 5, 14, 0, 0, 395, 397, 3, 204, 102, 0, 396, 395, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 400, 3, 122, 61, 0, 399, 401, 3, 66, 33, 0, 400, 399, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 35, 1, 0, 0, 0, 402, 403, 5, 15, 0, 0, 403, 405, 3, 122, 61, 0, 404, 406, 3, 66, 33, 0, 405, 404, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 37, 1, 0, 0, 0, 407, 408, 5, 20, 0, 0, 408, 409, 3, 88, 44, 0, 409, 410, 3, 202, 101, 0, 410, 39, 1, 0, 0, 0, 411, 412, 5, 16, 0, 0, 412, 413, 3, 88, 44, 0, 413, 414, 3, 202, 101, 0, 414, 41, 1, 0, 0, 0, 415, 419, 5, 22, 0, 0, 416, 418, 3, 44, 22, 0, 417, 416, 1, 0, 0, 0, 418, 421, 1, 0, 0, 0, 419, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 422, 1, 0, 0, 0, 421, 419, 1, 0, 0, 0, 422, 423, 3, 88, 44, 0, 423, 43, 1, 0, 0, 0, 424, 425, 5, 23, 0, 0, 425, 426, 5, 112, 0, 0, 426, 431, 3, 202, 101, 0, 427, 428, 5, 21, 0, 0, 428, 429, 5, 112, 0, 0, 429, 431, 3, 202, 101, 0, 430, 424, 1, 0, 0, 0, 430, 427, 1, 0, 0, 0, 431, 45, 1, 0, 0, 0, 432, 433, 7, 1, 0, 0, 433, 47, 1, 0, 0, 0, 434, 438, 5, 24, 0, 0, 435, 437, 3, 50, 25, 0, 436, 435, 1, 0, 0, 0, 437, 440, 1, 0, 0, 0, 438, 436, 1, 0, 0, 0, 438, 439, 1, 0, 0, 0, 439, 49, 1, 0, 0, 0, 440, 438, 1, 0, 0, 0, 441, 442, 5, 45, 0, 0, 442, 443, 5, 112, 0, 0, 443, 451, 3, 204, 102, 0, 444, 445, 5, 46, 0, 0, 445, 446, 5, 112, 0, 0, 446, 451, 3, 204, 102, 0, 447, 448, 5, 47, 0, 0, 448, 449, 5, 112, 0, 0, 449, 451, 3, 202, 101, 0, 450, 441, 1, 0, 0, 0, 450, 444, 1, 0, 0, 0, 450, 447, 1, 0, 0, 0, 451, 51, 1, 0, 0, 0, 452, 456, 5, 25, 0, 0, 453, 455, 3, 54, 27, 0, 454, 453, 1, 0, 0, 0, 455, 458, 1, 0, 0, 0, 456, 454, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 53, 1, 0, 0, 0, 458, 456, 1, 0, 0, 0, 459, 460, 5, 48, 0, 0, 460, 461, 5, 112, 0, 0, 461, 496, 3, 204, 102, 0, 462, 463, 5, 49, 0, 0, 463, 464, 5, 112, 0, 0, 464, 496, 3, 204, 102, 0, 465, 466, 5, 50, 0, 0, 466, 467, 5, 112, 0, 0, 467, 496, 3, 204, 102, 0, 468, 469, 5, 51, 0, 0, 469, 470, 5, 112, 0, 0, 470, 496, 3, 204, 102, 0, 471, 472, 5, 52, 0, 0, 472, 473, 5, 112, 0, 0, 473, 496, 3, 206, 103, 0, 474, 475, 5, 53, 0, 0, 475, 476, 5, 112, 0, 0, 476, 496, 3, 206, 103, 0, 477, 478, 5, 54, 0, 0, 478, 479, 5, 112, 0, 0, 479, 496, 3, 202, 101, 0, 480, 481, 5, 55, 0, 0, 481, 482, 5, 112, 0, 0, 482, 496, 3, 202, 101, 0, 483, 484, 5, 215, 0, 0, 484, 485, 5, 112, 0, 0, 485, 496, 3, 202, 101, 0, 486, 487, 5, 56, 0, 0, 487, 488, 5, 112, 0, 0, 488, 496, 3, 202, 101, 0, 489, 490, 5, 57, 0, 0, 490, 491, 5, 112, 0, 0, 491, 496, 3, 204, 102, 0, 492, 493, 5, 58, 0, 0, 493, 494, 5, 112, 0, 0, 494, 496, 3, 206, 103, 0, 495, 459, 1, 0, 0, 0, 495, 462, 1, 0, 0, 0, 495, 465, 1, 0, 0, 0, 495, 468, 1, 0, 0, 0, 495, 471, 1, 0, 0, 0, 495, 474, 1, 0, 0, 0, 495, 477, 1, 0, 0, 0, 495, 480, 1, 0, 0, 0, 495, 483, 1, 0, 0, 0, 495, 486, 1, 0, 0, 0, 495, 489, 1, 0, 0, 0, 495, 492, 1, 0, 0, 0, 496, 55, 1, 0, 0, 0, 497, 501, 5, 26, 0, 0, 498, 500, 3, 58, 29, 0, 499, 498, 1, 0, 0, 0, 500, 503, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 57, 1, 0, 0, 0, 503, 501, 1, 0, 0, 0, 504, 505, 3, 230, 115, 0, 505, 506, 5, 112, 0, 0, 506, 507, 3, 198, 99, 0, 507, 59, 1, 0, 0, 0, 508, 509, 5, 29, 0, 0, 509, 510, 5, 112, 0, 0, 510, 521, 3, 62, 31, 0, 511, 512, 5, 30, 0, 0, 512, 513, 5, 112, 0, 0, 513, 521, 3, 62, 31, 0, 514, 515, 5, 29, 0, 0, 515, 516, 5, 112, 0, 0, 516, 521, 3, 120, 60, 0, 517, 518, 5, 30, 0, 0, 518, 519, 5, 112, 0, 0, 519, 521, 3, 120, 60, 0, 520, 508, 1, 0, 0, 0, 520, 511, 1, 0, 0, 0, 520, 514, 1, 0, 0, 0, 520, 517, 1, 0, 0, 0, 521, 61, 1, 0, 0, 0, 522, 527, 3, 118, 59, 0, 523, 524, 5, 110, 0, 0, 524, 526, 3, 118, 59, 0, 525, 523, 1, 0, 0, 0, 526, 529, 1, 0, 0, 0, 527, 525, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 63, 1, 0, 0, 0, 529, 527, 1, 0, 0, 0, 530, 531, 3, 132, 66, 0, 531, 532, 5, 27, 0, 0, 532, 533, 3, 132, 66, 0, 533, 65, 1, 0, 0, 0, 534, 535, 5, 28, 0, 0, 535, 536, 3, 122, 61, 0, 536, 67, 1, 0, 0, 0, 537, 538, 5, 28, 0, 0, 538, 547, 3, 122, 61, 0, 539, 540, 5, 28, 0, 0, 540, 547, 3, 70, 35, 0, 541, 542, 5, 28, 0, 0, 542, 543, 3, 70, 35, 0, 543, 544, 5, 110, 0, 0, 544, 545, 3, 122, 61, 0, 545, 547, 1, 0, 0, 0, 546, 537, 1, 0, 0, 0, 546, 539, 1, 0, 0, 0, 546, 541, 1, 0, 0, 0, 547, 69, 1, 0, 0, 0, 548, 551, 3, 72, 36, 0, 549, 550, 5, 27, 0, 0, 550, 552, 3, 224, 112, 0, 551, 549, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 71, 1, 0, 0, 0, 553, 554, 5, 320, 0, 0, 554, 555, 5, 125, 0, 0, 555, 556, 3, 130, 65, 0, 556, 557, 5, 110, 0, 0, 557, 559, 3, 198, 99, 0, 558, 560, 3, 220, 110, 0, 559, 558, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 561, 1, 0, 0, 0, 561, 562, 5, 126, 0, 0, 562, 73, 1, 0, 0, 0, 563, 568, 3, 126, 63, 0, 564, 565, 5, 110, 0, 0, 565, 567, 3, 126, 63, 0, 566, 564, 1, 0, 0, 0, 567, 570, 1, 0, 0, 0, 568, 566, 1, 0, 0, 0, 568, 569, 1, 0, 0, 0, 569, 75, 1, 0, 0, 0, 570, 568, 1, 0, 0, 0, 571, 572, 3, 130, 65, 0, 572, 573, 5, 112, 0, 0, 573, 574, 3, 88, 44, 0, 574, 77, 1, 0, 0, 0, 575, 578, 3, 80, 40, 0, 576, 577, 5, 27, 0, 0, 577, 579, 3, 132, 66, 0, 578, 576, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 79, 1, 0, 0, 0, 580, 581, 3, 82, 41, 0, 581, 582, 5, 125, 0, 0, 582, 583, 3, 104, 52, 0, 583, 584, 5, 126, 0, 0, 584, 596, 1, 0, 0, 0, 585, 586, 5, 136, 0, 0, 586, 587, 5, 125, 0, 0, 587, 596, 5, 126, 0, 0, 588, 589, 7, 2, 0, 0, 589, 590, 5, 125, 0, 0, 590, 591, 3, 104, 52, 0, 591, 592, 5, 126, 0, 0, 592, 596, 1, 0, 0, 0, 593, 596, 3, 86, 43, 0, 594, 596, 3, 84, 42, 0, 595, 580, 1, 0, 0, 0, 595, 585, 1, 0, 0, 0, 595, 588, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 595, 594, 1, 0, 0, 0, 596, 81, 1, 0, 0, 0, 597, 598, 7, 3, 0, 0, 598, 83, 1, 0, 0, 0, 599, 600, 5, 155, 0, 0, 600, 601, 5, 125, 0, 0, 601, 604, 3, 130, 65, 0, 602, 603, 5, 110, 0, 0, 603, 605, 3, 204, 102, 0, 604, 602, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 607, 5, 126, 0, 0, 607, 85, 1, 0, 0, 0, 608, 609, 5, 154, 0, 0, 609, 610, 5, 114, 0, 0, 610, 611, 3, 204, 102, 0, 611, 612, 5, 113, 0, 0, 612, 613, 5, 125, 0, 0, 613, 614, 3, 130, 65, 0, 614, 615, 5, 126, 0, 0, 615, 87, 1, 0, 0, 0, 616, 620, 3, 90, 45, 0, 617, 620, 3, 102, 51, 0, 618, 620, 3, 104, 52, 0, 619, 616, 1, 0, 0, 0, 619, 617, 1, 0, 0, 0, 619, 618, 1, 0, 0, 0, 620, 89, 1, 0, 0, 0, 621, 622, 3, 92, 46, 0, 622, 91, 1, 0, 0, 0, 623, 628, 3, 94, 47, 0, 624, 625, 5, 62, 0, 0, 625, 627, 3, 94, 47, 0, 626, 624, 1, 0, 0, 0, 627, 630, 1, 0, 0, 0, 628, 626, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 93, 1, 0, 0, 0, 630, 628, 1, 0, 0, 0, 631, 636, 3, 96, 48, 0, 632, 633, 5, 64, 0, 0, 633, 635, 3, 96, 48, 0, 634, 632, 1, 0, 0, 0, 635, 638, 1, 0, 0, 0, 636, 634, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 95, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, 639, 646, 3, 98, 49, 0, 640, 642, 5, 63, 0, 0, 641, 640, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 645, 3, 98, 49, 0, 644, 641, 1, 0, 0, 0, 645, 648, 1, 0, 0, 0, 646, 644, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 97, 1, 0, 0, 0, 648, 646, 1, 0, 0, 0, 649, 650, 5, 61, 0, 0, 650, 653, 3, 98, 49, 0, 651, 653, 3, 100, 50, 0, 652, 649, 1, 0, 0, 0, 652, 651, 1, 0, 0, 0, 653, 99, 1, 0, 0, 0, 654, 662, 3, 102, 51, 0, 655, 662, 3, 110, 55, 0, 656, 662, 3, 112, 56, 0, 657, 658, 5, 125, 0, 0, 658, 659, 3, 90, 45, 0, 659, 660, 5, 126, 0, 0, 660, 662, 1, 0, 0, 0, 661, 654, 1, 0, 0, 0, 661, 655, 1, 0, 0, 0, 661, 656, 1, 0, 0, 0, 661, 657, 1, 0, 0, 0, 662, 101, 1, 0, 0, 0, 663, 664, 3, 104, 52, 0, 664, 665, 3, 192, 96, 0, 665, 666, 3, 104, 52, 0, 666, 672, 1, 0, 0, 0, 667, 668, 3, 104, 52, 0, 668, 669, 5, 60, 0, 0, 669, 670, 3, 222, 111, 0, 670, 672, 1, 0, 0, 0, 671, 663, 1, 0, 0, 0, 671, 667, 1, 0, 0, 0, 672, 103, 1, 0, 0, 0, 673, 674, 6, 52, -1, 0, 674, 684, 3, 106, 53, 0, 675, 684, 3, 108, 54, 0, 676, 684, 3, 172, 86, 0, 677, 684, 3, 168, 84, 0, 678, 684, 3, 180, 90, 0, 679, 680, 5, 125, 0, 0, 680, 681, 3, 104, 52, 0, 681, 682, 5, 126, 0, 0, 682, 684, 1, 0, 0, 0, 683, 673, 1, 0, 0, 0, 683, 675, 1, 0, 0, 0, 683, 676, 1, 0, 0, 0, 683, 677, 1, 0, 0, 0, 683, 678, 1, 0, 0, 0, 683, 679, 1, 0, 0, 0, 684, 693, 1, 0, 0, 0, 685, 686, 10, 8, 0, 0, 686, 687, 7, 4, 0, 0, 687, 692, 3, 104, 52, 9, 688, 689, 10, 7, 0, 0, 689, 690, 7, 0, 0, 0, 690, 692, 3, 104, 52, 8, 691, 685, 1, 0, 0, 0, 691, 688, 1, 0, 0, 0, 692, 695, 1, 0, 0, 0, 693, 691, 1, 0, 0, 0, 693, 694, 1, 0, 0, 0, 694, 105, 1, 0, 0, 0, 695, 693, 1, 0, 0, 0, 696, 701, 3, 134, 67, 0, 697, 701, 3, 136, 68, 0, 698, 701, 3, 130, 65, 0, 699, 701, 3, 198, 99, 0, 700, 696, 1, 0, 0, 0, 700, 697, 1, 0, 0, 0, 700, 698, 1, 0, 0, 0, 700, 699, 1, 0, 0, 0, 701, 107, 1, 0, 0, 0, 702, 703, 3, 190, 95, 0, 703, 704, 5, 125, 0, 0, 704, 705, 3, 146, 73, 0, 705, 706, 5, 60, 0, 0, 706, 707, 3, 146, 73, 0, 707, 708, 5, 126, 0, 0, 708, 109, 1, 0, 0, 0, 709, 710, 3, 138, 69, 0, 710, 111, 1, 0, 0, 0, 711, 714, 3, 114, 57, 0, 712, 714, 3, 116, 58, 0, 713, 711, 1, 0, 0, 0, 713, 712, 1, 0, 0, 0, 714, 113, 1, 0, 0, 0, 715, 716, 3, 194, 97, 0, 716, 717, 5, 125, 0, 0, 717, 718, 3, 156, 78, 0, 718, 719, 5, 110, 0, 0, 719, 724, 3, 158, 79, 0, 720, 721, 5, 110, 0, 0, 721, 723, 3, 148, 74, 0, 722, 720, 1, 0, 0, 0, 723, 726, 1, 0, 0, 0, 724, 722, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 727, 1, 0, 0, 0, 726, 724, 1, 0, 0, 0, 727, 728, 5, 126, 0, 0, 728, 115, 1, 0, 0, 0, 729, 730, 3, 196, 98, 0, 730, 731, 5, 125, 0, 0, 731, 732, 5, 127, 0, 0, 732, 737, 3, 152, 76, 0, 733, 734, 5, 110, 0, 0, 734, 736, 3, 152, 76, 0, 735, 733, 1, 0, 0, 0, 736, 739, 1, 0, 0, 0, 737, 735, 1, 0, 0, 0, 737, 738, 1, 0, 0, 0, 738, 740, 1, 0, 0, 0, 739, 737, 1, 0, 0, 0, 740, 741, 5, 128, 0, 0, 741, 742, 5, 110, 0, 0, 742, 747, 3, 158, 79, 0, 743, 744, 5, 110, 0, 0, 744, 746, 3, 148, 74, 0, 745, 743, 1, 0, 0, 0, 746, 749, 1, 0, 0, 0, 747, 745, 1, 0, 0, 0, 747, 748, 1, 0, 0, 0, 748, 750, 1, 0, 0, 0, 749, 747, 1, 0, 0, 0, 750, 751, 5, 126, 0, 0, 751, 117, 1, 0, 0, 0, 752, 755, 3, 226, 113, 0, 753, 755, 5, 332, 0, 0, 754, 752, 1, 0, 0, 0, 754, 753, 1, 0, 0, 0, 755, 119, 1, 0, 0, 0, 756, 757, 3, 224, 112, 0, 757, 758, 5, 125, 0, 0, 758, 759, 3, 144, 72, 0, 759, 760, 5, 126, 0, 0, 760, 121, 1, 0, 0, 0, 761, 766, 3, 130, 65, 0, 762, 763, 5, 110, 0, 0, 763, 765, 3, 130, 65, 0, 764, 762, 1, 0, 0, 0, 765, 768, 1, 0, 0, 0, 766, 764, 1, 0, 0, 0, 766, 767, 1, 0, 0, 0, 767, 123, 1, 0, 0, 0, 768, 766, 1, 0, 0, 0, 769, 774, 3, 132, 66, 0, 770, 771, 5, 110, 0, 0, 771, 773, 3, 132, 66, 0, 772, 770, 1, 0, 0, 0, 773, 776, 1, 0, 0, 0, 774, 772, 1, 0, 0, 0, 774, 775, 1, 0, 0, 0, 775, 125, 1, 0, 0, 0, 776, 774, 1, 0, 0, 0, 777, 779, 7, 0, 0, 0, 778, 777, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 781, 3, 128, 64, 0, 781, 127, 1, 0, 0, 0, 782, 804, 3, 130, 65, 0, 783, 784, 5, 35, 0, 0, 784, 785, 5, 125, 0, 0, 785, 786, 3, 130, 65, 0, 786, 787, 5, 126, 0, 0, 787, 804, 1, 0, 0, 0, 788, 789, 5, 36, 0, 0, 789, 790, 5, 125, 0, 0, 790, 791, 3, 130, 65, 0, 791, 792, 5, 126, 0, 0, 792, 804, 1, 0, 0, 0, 793, 794, 5, 37, 0, 0, 794, 795, 5, 125, 0, 0, 795, 796, 3, 130, 65, 0, 796, 797, 5, 126, 0, 0, 797, 804, 1, 0, 0, 0, 798, 799, 5, 38, 0, 0, 799, 800, 5, 125, 0, 0, 800, 801, 3, 130, 65, 0, 801, 802, 5, 126, 0, 0, 802, 804, 1, 0, 0, 0, 803, 782, 1, 0, 0, 0, 803, 783, 1, 0, 0, 0, 803, 788, 1, 0, 0, 0, 803, 793, 1, 0, 0, 0, 803, 798, 1, 0, 0, 0, 804, 129, 1, 0, 0, 0, 805, 806, 3, 224, 112, 0, 806, 131, 1, 0, 0, 0, 807, 808, 3, 228, 114, 0, 808, 133, 1, 0, 0, 0, 809, 810, 3, 142, 71, 0, 810, 811, 5, 125, 0, 0, 811, 812, 3, 144, 72, 0, 812, 813, 5, 126, 0, 0, 813, 135, 1, 0, 0, 0, 814, 815, 5, 274, 0, 0, 815, 816, 5, 125, 0, 0, 816, 817, 3, 88, 44, 0, 817, 818, 5, 27, 0, 0, 818, 819, 3, 140, 70, 0, 819, 820, 5, 126, 0, 0, 820, 137, 1, 0, 0, 0, 821, 822, 3, 184, 92, 0, 822, 823, 5, 125, 0, 0, 823, 824, 3, 144, 72, 0, 824, 825, 5, 126, 0, 0, 825, 139, 1, 0, 0, 0, 826, 837, 5, 212, 0, 0, 827, 837, 5, 241, 0, 0, 828, 837, 5, 243, 0, 0, 829, 837, 5, 102, 0, 0, 830, 837, 5, 103, 0, 0, 831, 837, 5, 104, 0, 0, 832, 837, 5, 105, 0, 0, 833, 837, 5, 106, 0, 0, 834, 837, 5, 107, 0, 0, 835, 837, 5, 108, 0, 0, 836, 826, 1, 0, 0, 0, 836, 827, 1, 0, 0, 0, 836, 828, 1, 0, 0, 0, 836, 829, 1, 0, 0, 0, 836, 830, 1, 0, 0, 0, 836, 831, 1, 0, 0, 0, 836, 832, 1, 0, 0, 0, 836, 833, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 836, 835, 1, 0, 0, 0, 837, 141, 1, 0, 0, 0, 838, 845, 3, 162, 81, 0, 839, 845, 3, 166, 83, 0, 840, 845, 3, 188, 94, 0, 841, 845, 3, 184, 92, 0, 842, 845, 3, 186, 93, 0, 843, 845, 3, 190, 95, 0, 844, 838, 1, 0, 0, 0, 844, 839, 1, 0, 0, 0, 844, 840, 1, 0, 0, 0, 844, 841, 1, 0, 0, 0, 844, 842, 1, 0, 0, 0, 844, 843, 1, 0, 0, 0, 845, 143, 1, 0, 0, 0, 846, 851, 3, 146, 73, 0, 847, 848, 5, 110, 0, 0, 848, 850, 3, 146, 73, 0, 849, 847, 1, 0, 0, 0, 850, 853, 1, 0, 0, 0, 851, 849, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 855, 1, 0, 0, 0, 853, 851, 1, 0, 0, 0, 854, 846, 1, 0, 0, 0, 854, 855, 1, 0, 0, 0, 855, 145, 1, 0, 0, 0, 856, 857, 3, 230, 115, 0, 857, 858, 5, 112, 0, 0, 858, 860, 1, 0, 0, 0, 859, 856, 1, 0, 0, 0, 859, 860, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 862, 3, 104, 52, 0, 862, 147, 1, 0, 0, 0, 863, 864, 3, 150, 75, 0, 864, 865, 5, 112, 0, 0, 865, 866, 3, 160, 80, 0, 866, 149, 1, 0, 0, 0, 867, 868, 7, 5, 0, 0, 868, 151, 1, 0, 0, 0, 869, 878, 3, 156, 78, 0, 870, 871, 3, 156, 78, 0, 871, 872, 3, 154, 77, 0, 872, 878, 1, 0, 0, 0, 873, 874, 3, 156, 78, 0, 874, 875, 5, 134, 0, 0, 875, 876, 3, 154, 77, 0, 876, 878, 1, 0, 0, 0, 877, 869, 1, 0, 0, 0, 877, 870, 1, 0, 0, 0, 877, 873, 1, 0, 0, 0, 878, 153, 1, 0, 0, 0, 879, 882, 3, 204, 102, 0, 880, 882, 3, 206, 103, 0, 881, 879, 1, 0, 0, 0, 881, 880, 1, 0, 0, 0, 882, 155, 1, 0, 0, 0, 883, 886, 3, 224, 112, 0, 884, 886, 3, 202, 101, 0, 885, 883, 1, 0, 0, 0, 885, 884, 1, 0, 0, 0, 886, 157, 1, 0, 0, 0, 887, 888, 3, 160, 80, 0, 888, 159, 1, 0, 0, 0, 889, 892, 3, 224, 112, 0, 890, 892, 3, 198, 99, 0, 891, 889, 1, 0, 0, 0, 891, 890, 1, 0, 0, 0, 892, 161, 1, 0, 0, 0, 893, 917, 5, 172, 0, 0, 894, 917, 5, 173, 0, 0, 895, 917, 5, 174, 0, 0, 896, 917, 5, 175, 0, 0, 897, 917, 5, 176, 0, 0, 898, 917, 5, 177, 0, 0, 899, 917, 5, 178, 0, 0, 900, 917, 5, 179, 0, 0, 901, 917, 5, 180, 0, 0, 902, 917, 5, 181, 0, 0, 903, 917, 5, 182, 0, 0, 904, 917, 5, 183, 0, 0, 905, 917, 5, 184, 0, 0, 906, 917, 5, 185, 0, 0, 907, 917, 5, 186, 0, 0, 908, 917, 5, 188, 0, 0, 909, 917, 5, 189, 0, 0, 910, 917, 5, 190, 0, 0, 911, 917, 5, 191, 0, 0, 912, 917, 5, 192, 0, 0, 913, 917, 5, 193, 0, 0, 914, 917, 5, 194, 0, 0, 915, 917, 3, 164, 82, 0, 916, 893, 1, 0, 0, 0, 916, 894, 1, 0, 0, 0, 916, 895, 1, 0, 0, 0, 916, 896, 1, 0, 0, 0, 916, 897, 1, 0, 0, 0, 916, 898, 1, 0, 0, 0, 916, 899, 1, 0, 0, 0, 916, 900, 1, 0, 0, 0, 916, 901, 1, 0, 0, 0, 916, 902, 1, 0, 0, 0, 916, 903, 1, 0, 0, 0, 916, 904, 1, 0, 0, 0, 916, 905, 1, 0, 0, 0, 916, 906, 1, 0, 0, 0, 916, 907, 1, 0, 0, 0, 916, 908, 1, 0, 0, 0, 916, 909, 1, 0, 0, 0, 916, 910, 1, 0, 0, 0, 916, 911, 1, 0, 0, 0, 916, 912, 1, 0, 0, 0, 916, 913, 1, 0, 0, 0, 916, 914, 1, 0, 0, 0, 916, 915, 1, 0, 0, 0, 917, 163, 1, 0, 0, 0, 918, 919, 7, 6, 0, 0, 919, 165, 1, 0, 0, 0, 920, 921, 7, 7, 0, 0, 921, 167, 1, 0, 0, 0, 922, 923, 5, 226, 0, 0, 923, 924, 5, 125, 0, 0, 924, 925, 3, 170, 85, 0, 925, 926, 5, 110, 0, 0, 926, 927, 3, 146, 73, 0, 927, 928, 5, 126, 0, 0, 928, 169, 1, 0, 0, 0, 929, 930, 7, 8, 0, 0, 930, 171, 1, 0, 0, 0, 931, 932, 5, 223, 0, 0, 932, 933, 5, 125, 0, 0, 933, 934, 3, 178, 89, 0, 934, 935, 5, 5, 0, 0, 935, 936, 3, 146, 73, 0, 936, 937, 5, 126, 0, 0, 937, 173, 1, 0, 0, 0, 938, 939, 7, 9, 0, 0, 939, 175, 1, 0, 0, 0, 940, 941, 7, 10, 0, 0, 941, 177, 1, 0, 0, 0, 942, 945, 3, 174, 87, 0, 943, 945, 3, 176, 88, 0, 944, 942, 1, 0, 0, 0, 944, 943, 1, 0, 0, 0, 945, 179, 1, 0, 0, 0, 946, 947, 3, 182, 91, 0, 947, 948, 5, 125, 0, 0, 948, 949, 3, 174, 87, 0, 949, 950, 5, 110, 0, 0, 950, 951, 3, 146, 73, 0, 951, 952, 5, 110, 0, 0, 952, 953, 3, 146, 73, 0, 953, 954, 5, 126, 0, 0, 954, 181, 1, 0, 0, 0, 955, 956, 7, 11, 0, 0, 956, 183, 1, 0, 0, 0, 957, 958, 7, 12, 0, 0, 958, 185, 1, 0, 0, 0, 959, 960, 5, 281, 0, 0, 960, 187, 1, 0, 0, 0, 961, 962, 7, 13, 0, 0, 962, 189, 1, 0, 0, 0, 963, 964, 5, 187, 0, 0, 964, 191, 1, 0, 0, 0, 965, 966, 7, 14, 0, 0, 966, 193, 1, 0, 0, 0, 967, 968, 7, 15, 0, 0, 968, 195, 1, 0, 0, 0, 969, 970, 7, 16, 0, 0, 970, 197, 1, 0, 0, 0, 971, 978, 3, 200, 100, 0, 972, 978, 3, 202, 101, 0, 973, 978, 3, 204, 102, 0, 974, 978, 3, 206, 103, 0, 975, 978, 3, 208, 104, 0, 976, 978, 3, 210, 105, 0, 977, 971, 1, 0, 0, 0, 977, 972, 1, 0, 0, 0, 977, 973, 1, 0, 0, 0, 977, 974, 1, 0, 0, 0, 977, 975, 1, 0, 0, 0, 977, 976, 1, 0, 0, 0, 978, 199, 1, 0, 0, 0, 979, 980, 5, 81, 0, 0, 980, 981, 3, 104, 52, 0, 981, 982, 3, 218, 109, 0, 982, 201, 1, 0, 0, 0, 983, 984, 7, 17, 0, 0, 984, 203, 1, 0, 0, 0, 985, 987, 7, 0, 0, 0, 986, 985, 1, 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 988, 1, 0, 0, 0, 988, 989, 5, 330, 0, 0, 989, 205, 1, 0, 0, 0, 990, 992, 7, 0, 0, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 994, 5, 331, 0, 0, 994, 207, 1, 0, 0, 0, 995, 996, 7, 18, 0, 0, 996, 209, 1, 0, 0, 0, 997, 1001, 3, 212, 106, 0, 998, 1001, 3, 214, 107, 0, 999, 1001, 3, 216, 108, 0, 1000, 997, 1, 0, 0, 0, 1000, 998, 1, 0, 0, 0, 1000, 999, 1, 0, 0, 0, 1001, 211, 1, 0, 0, 0, 1002, 1003, 5, 212, 0, 0, 1003, 1004, 3, 202, 101, 0, 1004, 213, 1, 0, 0, 0, 1005, 1006, 5, 241, 0, 0, 1006, 1007, 3, 202, 101, 0, 1007, 215, 1, 0, 0, 0, 1008, 1009, 5, 243, 0, 0, 1009, 1010, 3, 202, 101, 0, 1010, 217, 1, 0, 0, 0, 1011, 1012, 7, 19, 0, 0, 1012, 219, 1, 0, 0, 0, 1013, 1014, 7, 20, 0, 0, 1014, 221, 1, 0, 0, 0, 1015, 1016, 5, 125, 0, 0, 1016, 1021, 3, 198, 99, 0, 1017, 1018, 5, 110, 0, 0, 1018, 1020, 3, 198, 99, 0, 1019, 1017, 1, 0, 0, 0, 1020, 1023, 1, 0, 0, 0, 1021, 1019, 1, 0, 0, 0, 1021, 1022, 1, 0, 0, 0, 1022, 1024, 1, 0, 0, 0, 1023, 1021, 1, 0, 0, 0, 1024, 1025, 5, 126, 0, 0, 1025, 223, 1, 0, 0, 0, 1026, 1031, 3, 230, 115, 0, 1027, 1028, 5, 111, 0, 0, 1028, 1030, 3, 230, 115, 0, 1029, 1027, 1, 0, 0, 0, 1030, 1033, 1, 0, 0, 0, 1031, 1029, 1, 0, 0, 0, 1031, 1032, 1, 0, 0, 0, 1032, 225, 1, 0, 0, 0, 1033, 1031, 1, 0, 0, 0, 1034, 1039, 3, 232, 116, 0, 1035, 1036, 5, 111, 0, 0, 1036, 1038, 3, 230, 115, 0, 1037, 1035, 1, 0, 0, 0, 1038, 1041, 1, 0, 0, 0, 1039, 1037, 1, 0, 0, 0, 1039, 1040, 1, 0, 0, 0, 1040, 227, 1, 0, 0, 0, 1041, 1039, 1, 0, 0, 0, 1042, 1047, 3, 234, 117, 0, 1043, 1044, 5, 111, 0, 0, 1044, 1046, 3, 234, 117, 0, 1045, 1043, 1, 0, 0, 0, 1046, 1049, 1, 0, 0, 0, 1047, 1045, 1, 0, 0, 0, 1047, 1048, 1, 0, 0, 0, 1048, 229, 1, 0, 0, 0, 1049, 1047, 1, 0, 0, 0, 1050, 1052, 5, 111, 0, 0, 1051, 1050, 1, 0, 0, 0, 1051, 1052, 1, 0, 0, 0, 1052, 1053, 1, 0, 0, 0, 1053, 1061, 5, 328, 0, 0, 1054, 1055, 5, 131, 0, 0, 1055, 1056, 3, 230, 115, 0, 1056, 1057, 5, 131, 0, 0, 1057, 1061, 1, 0, 0, 0, 1058, 1061, 5, 335, 0, 0, 1059, 1061, 3, 236, 118, 0, 1060, 1051, 1, 0, 0, 0, 1060, 1054, 1, 0, 0, 0, 1060, 1058, 1, 0, 0, 0, 1060, 1059, 1, 0, 0, 0, 1061, 231, 1, 0, 0, 0, 1062, 1064, 5, 329, 0, 0, 1063, 1062, 1, 0, 0, 0, 1063, 1064, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1066, 3, 230, 115, 0, 1066, 233, 1, 0, 0, 0, 1067, 1072, 3, 230, 115, 0, 1068, 1069, 5, 122, 0, 0, 1069, 1071, 3, 230, 115, 0, 1070, 1068, 1, 0, 0, 0, 1071, 1074, 1, 0, 0, 0, 1072, 1070, 1, 0, 0, 0, 1072, 1073, 1, 0, 0, 0, 1073, 1076, 1, 0, 0, 0, 1074, 1072, 1, 0, 0, 0, 1075, 1077, 5, 122, 0, 0, 1076, 1075, 1, 0, 0, 0, 1076, 1077, 1, 0, 0, 0, 1077, 1091, 1, 0, 0, 0, 1078, 1079, 5, 129, 0, 0, 1079, 1080, 3, 234, 117, 0, 1080, 1081, 5, 129, 0, 0, 1081, 1091, 1, 0, 0, 0, 1082, 1083, 5, 130, 0, 0, 1083, 1084, 3, 234, 117, 0, 1084, 1085, 5, 130, 0, 0, 1085, 1091, 1, 0, 0, 0, 1086, 1087, 5, 131, 0, 0, 1087, 1088, 3, 234, 117, 0, 1088, 1089, 5, 131, 0, 0, 1089, 1091, 1, 0, 0, 0, 1090, 1067, 1, 0, 0, 0, 1090, 1078, 1, 0, 0, 0, 1090, 1082, 1, 0, 0, 0, 1090, 1086, 1, 0, 0, 0, 1091, 235, 1, 0, 0, 0, 1092, 1193, 5, 31, 0, 0, 1093, 1193, 3, 220, 110, 0, 1094, 1193, 5, 320, 0, 0, 1095, 1193, 3, 142, 71, 0, 1096, 1193, 3, 150, 75, 0, 1097, 1193, 3, 218, 109, 0, 1098, 1193, 3, 166, 83, 0, 1099, 1193, 3, 188, 94, 0, 1100, 1193, 3, 162, 81, 0, 1101, 1193, 3, 190, 95, 0, 1102, 1193, 5, 2, 0, 0, 1103, 1193, 5, 3, 0, 0, 1104, 1193, 5, 4, 0, 0, 1105, 1193, 5, 5, 0, 0, 1106, 1193, 5, 6, 0, 0, 1107, 1193, 5, 7, 0, 0, 1108, 1193, 5, 8, 0, 0, 1109, 1193, 5, 9, 0, 0, 1110, 1193, 5, 10, 0, 0, 1111, 1193, 5, 11, 0, 0, 1112, 1193, 5, 12, 0, 0, 1113, 1193, 5, 13, 0, 0, 1114, 1193, 5, 14, 0, 0, 1115, 1193, 5, 15, 0, 0, 1116, 1193, 5, 16, 0, 0, 1117, 1193, 5, 17, 0, 0, 1118, 1193, 5, 18, 0, 0, 1119, 1193, 5, 19, 0, 0, 1120, 1193, 5, 20, 0, 0, 1121, 1193, 5, 21, 0, 0, 1122, 1193, 5, 22, 0, 0, 1123, 1193, 5, 23, 0, 0, 1124, 1193, 5, 24, 0, 0, 1125, 1193, 5, 25, 0, 0, 1126, 1193, 5, 26, 0, 0, 1127, 1193, 5, 29, 0, 0, 1128, 1193, 5, 30, 0, 0, 1129, 1193, 5, 32, 0, 0, 1130, 1193, 5, 33, 0, 0, 1131, 1193, 5, 34, 0, 0, 1132, 1193, 5, 36, 0, 0, 1133, 1193, 5, 37, 0, 0, 1134, 1193, 5, 38, 0, 0, 1135, 1193, 5, 39, 0, 0, 1136, 1193, 5, 40, 0, 0, 1137, 1193, 5, 41, 0, 0, 1138, 1193, 5, 42, 0, 0, 1139, 1193, 5, 43, 0, 0, 1140, 1193, 5, 44, 0, 0, 1141, 1193, 5, 45, 0, 0, 1142, 1193, 5, 46, 0, 0, 1143, 1193, 5, 47, 0, 0, 1144, 1193, 5, 48, 0, 0, 1145, 1193, 5, 49, 0, 0, 1146, 1193, 5, 50, 0, 0, 1147, 1193, 5, 51, 0, 0, 1148, 1193, 5, 52, 0, 0, 1149, 1193, 5, 53, 0, 0, 1150, 1193, 5, 54, 0, 0, 1151, 1193, 5, 55, 0, 0, 1152, 1193, 5, 56, 0, 0, 1153, 1193, 5, 57, 0, 0, 1154, 1193, 5, 58, 0, 0, 1155, 1193, 5, 135, 0, 0, 1156, 1193, 5, 136, 0, 0, 1157, 1193, 5, 137, 0, 0, 1158, 1193, 5, 138, 0, 0, 1159, 1193, 5, 139, 0, 0, 1160, 1193, 5, 140, 0, 0, 1161, 1193, 5, 141, 0, 0, 1162, 1193, 5, 142, 0, 0, 1163, 1193, 5, 143, 0, 0, 1164, 1193, 5, 144, 0, 0, 1165, 1193, 5, 145, 0, 0, 1166, 1193, 5, 146, 0, 0, 1167, 1193, 5, 147, 0, 0, 1168, 1193, 5, 148, 0, 0, 1169, 1193, 5, 149, 0, 0, 1170, 1193, 5, 150, 0, 0, 1171, 1193, 5, 151, 0, 0, 1172, 1193, 5, 152, 0, 0, 1173, 1193, 5, 153, 0, 0, 1174, 1193, 5, 154, 0, 0, 1175, 1193, 5, 155, 0, 0, 1176, 1193, 5, 156, 0, 0, 1177, 1193, 5, 157, 0, 0, 1178, 1193, 5, 158, 0, 0, 1179, 1193, 5, 159, 0, 0, 1180, 1193, 5, 160, 0, 0, 1181, 1193, 5, 161, 0, 0, 1182, 1193, 5, 162, 0, 0, 1183, 1193, 5, 163, 0, 0, 1184, 1193, 5, 164, 0, 0, 1185, 1193, 5, 165, 0, 0, 1186, 1193, 5, 166, 0, 0, 1187, 1193, 5, 167, 0, 0, 1188, 1193, 5, 168, 0, 0, 1189, 1193, 5, 169, 0, 0, 1190, 1193, 5, 170, 0, 0, 1191, 1193, 5, 171, 0, 0, 1192, 1092, 1, 0, 0, 0, 1192, 1093, 1, 0, 0, 0, 1192, 1094, 1, 0, 0, 0, 1192, 1095, 1, 0, 0, 0, 1192, 1096, 1, 0, 0, 0, 1192, 1097, 1, 0, 0, 0, 1192, 1098, 1, 0, 0, 0, 1192, 1099, 1, 0, 0, 0, 1192, 1100, 1, 0, 0, 0, 1192, 1101, 1, 0, 0, 0, 1192, 1102, 1, 0, 0, 0, 1192, 1103, 1, 0, 0, 0, 1192, 1104, 1, 0, 0, 0, 1192, 1105, 1, 0, 0, 0, 1192, 1106, 1, 0, 0, 0, 1192, 1107, 1, 0, 0, 0, 1192, 1108, 1, 0, 0, 0, 1192, 1109, 1, 0, 0, 0, 1192, 1110, 1, 0, 0, 0, 1192, 1111, 1, 0, 0, 0, 1192, 1112, 1, 0, 0, 0, 1192, 1113, 1, 0, 0, 0, 1192, 1114, 1, 0, 0, 0, 1192, 1115, 1, 0, 0, 0, 1192, 1116, 1, 0, 0, 0, 1192, 1117, 1, 0, 0, 0, 1192, 1118, 1, 0, 0, 0, 1192, 1119, 1, 0, 0, 0, 1192, 1120, 1, 0, 0, 0, 1192, 1121, 1, 0, 0, 0, 1192, 1122, 1, 0, 0, 0, 1192, 1123, 1, 0, 0, 0, 1192, 1124, 1, 0, 0, 0, 1192, 1125, 1, 0, 0, 0, 1192, 1126, 1, 0, 0, 0, 1192, 1127, 1, 0, 0, 0, 1192, 1128, 1, 0, 0, 0, 1192, 1129, 1, 0, 0, 0, 1192, 1130, 1, 0, 0, 0, 1192, 1131, 1, 0, 0, 0, 1192, 1132, 1, 0, 0, 0, 1192, 1133, 1, 0, 0, 0, 1192, 1134, 1, 0, 0, 0, 1192, 1135, 1, 0, 0, 0, 1192, 1136, 1, 0, 0, 0, 1192, 1137, 1, 0, 0, 0, 1192, 1138, 1, 0, 0, 0, 1192, 1139, 1, 0, 0, 0, 1192, 1140, 1, 0, 0, 0, 1192, 1141, 1, 0, 0, 0, 1192, 1142, 1, 0, 0, 0, 1192, 1143, 1, 0, 0, 0, 1192, 1144, 1, 0, 0, 0, 1192, 1145, 1, 0, 0, 0, 1192, 1146, 1, 0, 0, 0, 1192, 1147, 1, 0, 0, 0, 1192, 1148, 1, 0, 0, 0, 1192, 1149, 1, 0, 0, 0, 1192, 1150, 1, 0, 0, 0, 1192, 1151, 1, 0, 0, 0, 1192, 1152, 1, 0, 0, 0, 1192, 1153, 1, 0, 0, 0, 1192, 1154, 1, 0, 0, 0, 1192, 1155, 1, 0, 0, 0, 1192, 1156, 1, 0, 0, 0, 1192, 1157, 1, 0, 0, 0, 1192, 1158, 1, 0, 0, 0, 1192, 1159, 1, 0, 0, 0, 1192, 1160, 1, 0, 0, 0, 1192, 1161, 1, 0, 0, 0, 1192, 1162, 1, 0, 0, 0, 1192, 1163, 1, 0, 0, 0, 1192, 1164, 1, 0, 0, 0, 1192, 1165, 1, 0, 0, 0, 1192, 1166, 1, 0, 0, 0, 1192, 1167, 1, 0, 0, 0, 1192, 1168, 1, 0, 0, 0, 1192, 1169, 1, 0, 0, 0, 1192, 1170, 1, 0, 0, 0, 1192, 1171, 1, 0, 0, 0, 1192, 1172, 1, 0, 0, 0, 1192, 1173, 1, 0, 0, 0, 1192, 1174, 1, 0, 0, 0, 1192, 1175, 1, 0, 0, 0, 1192, 1176, 1, 0, 0, 0, 1192, 1177, 1, 0, 0, 0, 1192, 1178, 1, 0, 0, 0, 1192, 1179, 1, 0, 0, 0, 1192, 1180, 1, 0, 0, 0, 1192, 1181, 1, 0, 0, 0, 1192, 1182, 1, 0, 0, 0, 1192, 1183, 1, 0, 0, 0, 1192, 1184, 1, 0, 0, 0, 1192, 1185, 1, 0, 0, 0, 1192, 1186, 1, 0, 0, 0, 1192, 1187, 1, 0, 0, 0, 1192, 1188, 1, 0, 0, 0, 1192, 1189, 1, 0, 0, 0, 1192, 1190, 1, 0, 0, 0, 1192, 1191, 1, 0, 0, 0, 1193, 237, 1, 0, 0, 0, 90, 239, 252, 258, 276, 279, 285, 291, 295, 299, 301, 314, 324, 331, 336, 341, 348, 352, 357, 361, 367, 372, 383, 388, 392, 396, 400, 405, 419, 430, 438, 450, 456, 495, 501, 520, 527, 546, 551, 559, 568, 578, 595, 604, 619, 628, 636, 641, 646, 652, 661, 671, 683, 691, 693, 700, 713, 724, 737, 747, 754, 766, 774, 778, 803, 836, 844, 851, 854, 859, 877, 881, 885, 891, 916, 944, 977, 986, 991, 1000, 1021, 1031, 1039, 1047, 1051, 1060, 1063, 1072, 1076, 1090, 1192] \ No newline at end of file +[4, 1, 467, 2215, 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, 1, 0, 3, 0, 408, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 414, 8, 1, 1, 2, 1, 2, 1, 2, 5, 2, 419, 8, 2, 10, 2, 12, 2, 422, 9, 2, 1, 3, 1, 3, 3, 3, 426, 8, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 5, 5, 435, 8, 5, 10, 5, 12, 5, 438, 9, 5, 1, 6, 1, 6, 1, 6, 3, 6, 443, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 477, 8, 7, 1, 8, 1, 8, 1, 9, 3, 9, 482, 8, 9, 1, 9, 5, 9, 485, 8, 9, 10, 9, 12, 9, 488, 9, 9, 1, 9, 3, 9, 491, 8, 9, 1, 9, 5, 9, 494, 8, 9, 10, 9, 12, 9, 497, 9, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 507, 8, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 515, 8, 10, 10, 10, 12, 10, 518, 9, 10, 1, 11, 1, 11, 1, 11, 3, 11, 523, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 530, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 5, 15, 545, 8, 15, 10, 15, 12, 15, 548, 9, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 556, 8, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 3, 22, 574, 8, 22, 1, 22, 1, 22, 1, 23, 1, 23, 3, 23, 580, 8, 23, 1, 23, 5, 23, 583, 8, 23, 10, 23, 12, 23, 586, 9, 23, 1, 24, 1, 24, 1, 24, 3, 24, 591, 8, 24, 1, 24, 5, 24, 594, 8, 24, 10, 24, 12, 24, 597, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 604, 8, 25, 10, 25, 12, 25, 607, 9, 25, 1, 25, 3, 25, 610, 8, 25, 1, 25, 3, 25, 613, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 619, 8, 26, 10, 26, 12, 26, 622, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 5, 32, 648, 8, 32, 10, 32, 12, 32, 651, 9, 32, 1, 32, 3, 32, 654, 8, 32, 1, 33, 1, 33, 3, 33, 658, 8, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 664, 8, 33, 1, 33, 1, 33, 1, 33, 3, 33, 669, 8, 33, 1, 34, 1, 34, 3, 34, 673, 8, 34, 1, 34, 1, 34, 3, 34, 677, 8, 34, 1, 35, 1, 35, 1, 36, 1, 36, 5, 36, 683, 8, 36, 10, 36, 12, 36, 686, 9, 36, 1, 36, 1, 36, 1, 36, 3, 36, 691, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 697, 8, 37, 1, 37, 3, 37, 700, 8, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 709, 8, 38, 3, 38, 711, 8, 38, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 717, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 723, 8, 40, 10, 40, 12, 40, 726, 9, 40, 1, 41, 1, 41, 3, 41, 730, 8, 41, 1, 41, 1, 41, 3, 41, 734, 8, 41, 1, 42, 1, 42, 1, 42, 5, 42, 739, 8, 42, 10, 42, 12, 42, 742, 9, 42, 1, 42, 1, 42, 3, 42, 746, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 758, 8, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 769, 8, 43, 1, 44, 1, 44, 1, 44, 3, 44, 774, 8, 44, 1, 45, 1, 45, 3, 45, 778, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 785, 8, 45, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 791, 8, 47, 1, 47, 1, 47, 1, 47, 3, 47, 796, 8, 47, 1, 47, 1, 47, 1, 47, 3, 47, 801, 8, 47, 1, 47, 1, 47, 3, 47, 805, 8, 47, 1, 48, 1, 48, 3, 48, 809, 8, 48, 1, 48, 1, 48, 1, 48, 3, 48, 814, 8, 48, 1, 48, 1, 48, 1, 48, 3, 48, 819, 8, 48, 1, 48, 1, 48, 3, 48, 823, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 5, 51, 835, 8, 51, 10, 51, 12, 51, 838, 9, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 848, 8, 52, 1, 52, 3, 52, 851, 8, 52, 1, 53, 1, 53, 1, 53, 5, 53, 856, 8, 53, 10, 53, 12, 53, 859, 9, 53, 1, 54, 1, 54, 3, 54, 863, 8, 54, 1, 55, 1, 55, 3, 55, 867, 8, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 5, 59, 885, 8, 59, 10, 59, 12, 59, 888, 9, 59, 1, 59, 1, 59, 5, 59, 892, 8, 59, 10, 59, 12, 59, 895, 9, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 906, 8, 60, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 3, 62, 913, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 918, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 923, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 928, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 933, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 938, 8, 62, 1, 62, 5, 62, 941, 8, 62, 10, 62, 12, 62, 944, 9, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 955, 8, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 966, 8, 66, 1, 67, 1, 67, 1, 67, 5, 67, 971, 8, 67, 10, 67, 12, 67, 974, 9, 67, 1, 68, 1, 68, 1, 68, 5, 68, 979, 8, 68, 10, 68, 12, 68, 982, 9, 68, 1, 69, 1, 69, 1, 69, 3, 69, 987, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 993, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 999, 8, 71, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1005, 8, 72, 10, 72, 12, 72, 1008, 9, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 3, 74, 1017, 8, 74, 1, 74, 1, 74, 5, 74, 1021, 8, 74, 10, 74, 12, 74, 1024, 9, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1034, 8, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1042, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1048, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 1054, 8, 79, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 1060, 8, 79, 10, 79, 12, 79, 1063, 9, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 3, 80, 1070, 8, 80, 1, 80, 1, 80, 5, 80, 1074, 8, 80, 10, 80, 12, 80, 1077, 9, 80, 1, 80, 1, 80, 1, 81, 1, 81, 5, 81, 1083, 8, 81, 10, 81, 12, 81, 1086, 9, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 3, 82, 1097, 8, 82, 1, 83, 1, 83, 5, 83, 1101, 8, 83, 10, 83, 12, 83, 1104, 9, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1142, 8, 84, 1, 85, 1, 85, 5, 85, 1146, 8, 85, 10, 85, 12, 85, 1149, 9, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1173, 8, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1180, 8, 88, 1, 88, 3, 88, 1183, 8, 88, 1, 89, 1, 89, 1, 89, 5, 89, 1188, 8, 89, 10, 89, 12, 89, 1191, 9, 89, 1, 89, 1, 89, 3, 89, 1195, 8, 89, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1201, 8, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 5, 91, 1208, 8, 91, 10, 91, 12, 91, 1211, 9, 91, 1, 92, 3, 92, 1214, 8, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 5, 93, 1221, 8, 93, 10, 93, 12, 93, 1224, 9, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1234, 8, 94, 1, 95, 1, 95, 5, 95, 1238, 8, 95, 10, 95, 12, 95, 1241, 9, 95, 1, 95, 3, 95, 1244, 8, 95, 1, 95, 1, 95, 3, 95, 1248, 8, 95, 1, 95, 1, 95, 5, 95, 1252, 8, 95, 10, 95, 12, 95, 1255, 9, 95, 1, 95, 1, 95, 3, 95, 1259, 8, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1264, 8, 95, 1, 96, 1, 96, 1, 96, 1, 96, 3, 96, 1270, 8, 96, 1, 96, 3, 96, 1273, 8, 96, 1, 96, 1, 96, 3, 96, 1277, 8, 96, 1, 96, 1, 96, 3, 96, 1281, 8, 96, 1, 96, 3, 96, 1284, 8, 96, 1, 96, 1, 96, 3, 96, 1288, 8, 96, 1, 96, 3, 96, 1291, 8, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 3, 98, 1298, 8, 98, 1, 98, 3, 98, 1301, 8, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1306, 8, 98, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 3, 100, 1313, 8, 100, 1, 100, 5, 100, 1316, 8, 100, 10, 100, 12, 100, 1319, 9, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1331, 8, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 1342, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 3, 105, 1365, 8, 105, 1, 106, 1, 106, 1, 106, 3, 106, 1370, 8, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 3, 107, 1378, 8, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 5, 108, 1385, 8, 108, 10, 108, 12, 108, 1388, 9, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 3, 110, 1397, 8, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 3, 112, 1406, 8, 112, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 3, 114, 1413, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1423, 8, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1442, 8, 115, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 1451, 8, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 1462, 8, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1470, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 1476, 8, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 5, 120, 1487, 8, 120, 10, 120, 12, 120, 1490, 9, 120, 1, 121, 1, 121, 1, 121, 3, 121, 1495, 8, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 3, 121, 1503, 8, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 3, 121, 1512, 8, 121, 1, 121, 1, 121, 5, 121, 1516, 8, 121, 10, 121, 12, 121, 1519, 9, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 5, 122, 1533, 8, 122, 10, 122, 12, 122, 1536, 9, 122, 1, 122, 1, 122, 3, 122, 1540, 8, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 1557, 8, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 1567, 8, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 5, 122, 1574, 8, 122, 10, 122, 12, 122, 1577, 9, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1591, 8, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 5, 126, 1610, 8, 126, 10, 126, 12, 126, 1613, 9, 126, 1, 126, 1, 126, 3, 126, 1617, 8, 126, 1, 126, 1, 126, 1, 127, 1, 127, 3, 127, 1623, 8, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 5, 128, 1632, 8, 128, 10, 128, 12, 128, 1635, 9, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 5, 129, 1645, 8, 129, 10, 129, 12, 129, 1648, 9, 129, 1, 129, 1, 129, 1, 129, 3, 129, 1653, 8, 129, 1, 129, 1, 129, 1, 129, 5, 129, 1658, 8, 129, 10, 129, 12, 129, 1661, 9, 129, 1, 129, 1, 129, 1, 130, 1, 130, 3, 130, 1667, 8, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 3, 132, 1676, 8, 132, 1, 132, 5, 132, 1679, 8, 132, 10, 132, 12, 132, 1682, 9, 132, 1, 133, 3, 133, 1685, 8, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1710, 8, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, 1, 137, 3, 137, 1718, 8, 137, 1, 138, 1, 138, 3, 138, 1722, 8, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 1748, 8, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 1761, 8, 142, 1, 143, 1, 143, 1, 143, 5, 143, 1766, 8, 143, 10, 143, 12, 143, 1769, 9, 143, 3, 143, 1771, 8, 143, 1, 144, 1, 144, 1, 144, 5, 144, 1776, 8, 144, 10, 144, 12, 144, 1779, 9, 144, 3, 144, 1781, 8, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 3, 146, 1788, 8, 146, 1, 146, 1, 146, 1, 147, 1, 147, 3, 147, 1794, 8, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 4, 148, 1804, 8, 148, 11, 148, 12, 148, 1805, 1, 148, 1, 148, 1, 148, 1, 148, 3, 148, 1812, 8, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 3, 151, 1828, 8, 151, 1, 152, 1, 152, 1, 152, 1, 152, 3, 152, 1834, 8, 152, 1, 153, 1, 153, 3, 153, 1838, 8, 153, 1, 154, 1, 154, 1, 155, 1, 155, 3, 155, 1844, 8, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 1878, 8, 156, 1, 157, 1, 157, 1, 158, 1, 158, 1, 159, 1, 159, 1, 160, 1, 160, 1, 161, 1, 161, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 167, 1, 167, 1, 168, 1, 168, 3, 168, 1914, 8, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 172, 1, 172, 1, 173, 1, 173, 1, 174, 1, 174, 1, 175, 1, 175, 1, 176, 1, 176, 1, 177, 1, 177, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 3, 179, 1951, 8, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 182, 3, 182, 1960, 8, 182, 1, 182, 1, 182, 1, 183, 3, 183, 1965, 8, 183, 1, 183, 1, 183, 1, 184, 3, 184, 1970, 8, 184, 1, 184, 1, 184, 1, 185, 3, 185, 1975, 8, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 3, 187, 1984, 8, 187, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 5, 193, 2003, 8, 193, 10, 193, 12, 193, 2006, 9, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 5, 194, 2013, 8, 194, 10, 194, 12, 194, 2016, 9, 194, 1, 195, 1, 195, 1, 195, 5, 195, 2021, 8, 195, 10, 195, 12, 195, 2024, 9, 195, 1, 196, 1, 196, 1, 196, 5, 196, 2029, 8, 196, 10, 196, 12, 196, 2032, 9, 196, 1, 197, 1, 197, 1, 197, 5, 197, 2037, 8, 197, 10, 197, 12, 197, 2040, 9, 197, 1, 197, 1, 197, 1, 197, 1, 197, 5, 197, 2046, 8, 197, 10, 197, 12, 197, 2049, 9, 197, 1, 197, 1, 197, 3, 197, 2053, 8, 197, 1, 198, 3, 198, 2056, 8, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 3, 198, 2065, 8, 198, 1, 199, 3, 199, 2068, 8, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 5, 200, 2075, 8, 200, 10, 200, 12, 200, 2078, 9, 200, 1, 200, 3, 200, 2081, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2095, 8, 200, 1, 201, 1, 201, 3, 201, 2099, 8, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 3, 202, 2213, 8, 202, 1, 202, 0, 4, 20, 240, 242, 244, 203, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 0, 39, 1, 0, 72, 75, 12, 0, 2, 5, 7, 8, 10, 21, 23, 24, 27, 27, 29, 29, 31, 37, 39, 39, 51, 51, 104, 104, 157, 157, 356, 356, 1, 0, 177, 178, 1, 0, 65, 68, 2, 0, 170, 170, 176, 176, 2, 0, 25, 25, 305, 305, 2, 0, 23, 23, 26, 26, 1, 0, 40, 41, 1, 0, 49, 50, 2, 0, 104, 104, 355, 355, 1, 0, 81, 82, 2, 0, 53, 58, 351, 352, 2, 0, 7, 7, 52, 52, 2, 0, 199, 199, 232, 241, 2, 0, 198, 198, 231, 231, 2, 0, 199, 200, 232, 232, 8, 0, 197, 198, 203, 203, 205, 206, 211, 211, 213, 216, 218, 221, 223, 223, 238, 239, 1, 0, 218, 219, 1, 0, 179, 181, 3, 0, 8, 8, 101, 101, 396, 426, 2, 0, 115, 115, 366, 372, 1, 0, 272, 283, 1, 0, 374, 383, 1, 0, 284, 286, 13, 0, 125, 127, 131, 131, 133, 133, 136, 136, 139, 139, 141, 141, 143, 144, 146, 149, 151, 154, 287, 304, 306, 307, 309, 325, 328, 338, 4, 0, 126, 126, 294, 294, 323, 323, 325, 325, 8, 0, 127, 127, 133, 133, 139, 139, 141, 141, 146, 146, 148, 149, 152, 152, 154, 154, 8, 0, 128, 130, 132, 132, 134, 135, 137, 137, 142, 142, 145, 145, 150, 150, 155, 155, 1, 0, 326, 327, 5, 0, 124, 124, 220, 221, 358, 361, 363, 365, 373, 373, 2, 0, 384, 386, 388, 388, 2, 0, 339, 343, 345, 356, 3, 0, 123, 123, 170, 176, 358, 358, 1, 0, 389, 392, 1, 0, 393, 395, 1, 0, 462, 463, 1, 0, 121, 122, 9, 0, 127, 130, 132, 135, 137, 137, 139, 139, 141, 142, 145, 146, 148, 150, 152, 152, 154, 155, 9, 0, 67, 67, 127, 127, 133, 133, 140, 141, 146, 146, 148, 149, 152, 152, 154, 154, 433, 453, 2489, 0, 407, 1, 0, 0, 0, 2, 413, 1, 0, 0, 0, 4, 415, 1, 0, 0, 0, 6, 423, 1, 0, 0, 0, 8, 429, 1, 0, 0, 0, 10, 431, 1, 0, 0, 0, 12, 442, 1, 0, 0, 0, 14, 476, 1, 0, 0, 0, 16, 478, 1, 0, 0, 0, 18, 481, 1, 0, 0, 0, 20, 506, 1, 0, 0, 0, 22, 522, 1, 0, 0, 0, 24, 529, 1, 0, 0, 0, 26, 531, 1, 0, 0, 0, 28, 535, 1, 0, 0, 0, 30, 541, 1, 0, 0, 0, 32, 555, 1, 0, 0, 0, 34, 557, 1, 0, 0, 0, 36, 560, 1, 0, 0, 0, 38, 563, 1, 0, 0, 0, 40, 566, 1, 0, 0, 0, 42, 569, 1, 0, 0, 0, 44, 573, 1, 0, 0, 0, 46, 577, 1, 0, 0, 0, 48, 587, 1, 0, 0, 0, 50, 598, 1, 0, 0, 0, 52, 620, 1, 0, 0, 0, 54, 623, 1, 0, 0, 0, 56, 627, 1, 0, 0, 0, 58, 631, 1, 0, 0, 0, 60, 635, 1, 0, 0, 0, 62, 639, 1, 0, 0, 0, 64, 643, 1, 0, 0, 0, 66, 655, 1, 0, 0, 0, 68, 670, 1, 0, 0, 0, 70, 678, 1, 0, 0, 0, 72, 680, 1, 0, 0, 0, 74, 699, 1, 0, 0, 0, 76, 710, 1, 0, 0, 0, 78, 716, 1, 0, 0, 0, 80, 718, 1, 0, 0, 0, 82, 727, 1, 0, 0, 0, 84, 735, 1, 0, 0, 0, 86, 768, 1, 0, 0, 0, 88, 773, 1, 0, 0, 0, 90, 784, 1, 0, 0, 0, 92, 786, 1, 0, 0, 0, 94, 788, 1, 0, 0, 0, 96, 806, 1, 0, 0, 0, 98, 824, 1, 0, 0, 0, 100, 828, 1, 0, 0, 0, 102, 832, 1, 0, 0, 0, 104, 850, 1, 0, 0, 0, 106, 852, 1, 0, 0, 0, 108, 860, 1, 0, 0, 0, 110, 864, 1, 0, 0, 0, 112, 870, 1, 0, 0, 0, 114, 873, 1, 0, 0, 0, 116, 877, 1, 0, 0, 0, 118, 880, 1, 0, 0, 0, 120, 905, 1, 0, 0, 0, 122, 907, 1, 0, 0, 0, 124, 909, 1, 0, 0, 0, 126, 954, 1, 0, 0, 0, 128, 956, 1, 0, 0, 0, 130, 958, 1, 0, 0, 0, 132, 960, 1, 0, 0, 0, 134, 967, 1, 0, 0, 0, 136, 975, 1, 0, 0, 0, 138, 983, 1, 0, 0, 0, 140, 992, 1, 0, 0, 0, 142, 994, 1, 0, 0, 0, 144, 1000, 1, 0, 0, 0, 146, 1009, 1, 0, 0, 0, 148, 1013, 1, 0, 0, 0, 150, 1025, 1, 0, 0, 0, 152, 1035, 1, 0, 0, 0, 154, 1037, 1, 0, 0, 0, 156, 1043, 1, 0, 0, 0, 158, 1049, 1, 0, 0, 0, 160, 1066, 1, 0, 0, 0, 162, 1080, 1, 0, 0, 0, 164, 1096, 1, 0, 0, 0, 166, 1098, 1, 0, 0, 0, 168, 1141, 1, 0, 0, 0, 170, 1143, 1, 0, 0, 0, 172, 1150, 1, 0, 0, 0, 174, 1172, 1, 0, 0, 0, 176, 1182, 1, 0, 0, 0, 178, 1184, 1, 0, 0, 0, 180, 1196, 1, 0, 0, 0, 182, 1204, 1, 0, 0, 0, 184, 1213, 1, 0, 0, 0, 186, 1217, 1, 0, 0, 0, 188, 1233, 1, 0, 0, 0, 190, 1263, 1, 0, 0, 0, 192, 1290, 1, 0, 0, 0, 194, 1292, 1, 0, 0, 0, 196, 1297, 1, 0, 0, 0, 198, 1307, 1, 0, 0, 0, 200, 1310, 1, 0, 0, 0, 202, 1330, 1, 0, 0, 0, 204, 1341, 1, 0, 0, 0, 206, 1343, 1, 0, 0, 0, 208, 1347, 1, 0, 0, 0, 210, 1364, 1, 0, 0, 0, 212, 1366, 1, 0, 0, 0, 214, 1371, 1, 0, 0, 0, 216, 1381, 1, 0, 0, 0, 218, 1389, 1, 0, 0, 0, 220, 1393, 1, 0, 0, 0, 222, 1398, 1, 0, 0, 0, 224, 1405, 1, 0, 0, 0, 226, 1407, 1, 0, 0, 0, 228, 1409, 1, 0, 0, 0, 230, 1441, 1, 0, 0, 0, 232, 1443, 1, 0, 0, 0, 234, 1445, 1, 0, 0, 0, 236, 1454, 1, 0, 0, 0, 238, 1469, 1, 0, 0, 0, 240, 1475, 1, 0, 0, 0, 242, 1494, 1, 0, 0, 0, 244, 1556, 1, 0, 0, 0, 246, 1578, 1, 0, 0, 0, 248, 1590, 1, 0, 0, 0, 250, 1592, 1, 0, 0, 0, 252, 1599, 1, 0, 0, 0, 254, 1622, 1, 0, 0, 0, 256, 1624, 1, 0, 0, 0, 258, 1638, 1, 0, 0, 0, 260, 1666, 1, 0, 0, 0, 262, 1668, 1, 0, 0, 0, 264, 1673, 1, 0, 0, 0, 266, 1684, 1, 0, 0, 0, 268, 1709, 1, 0, 0, 0, 270, 1711, 1, 0, 0, 0, 272, 1713, 1, 0, 0, 0, 274, 1717, 1, 0, 0, 0, 276, 1721, 1, 0, 0, 0, 278, 1723, 1, 0, 0, 0, 280, 1728, 1, 0, 0, 0, 282, 1747, 1, 0, 0, 0, 284, 1760, 1, 0, 0, 0, 286, 1770, 1, 0, 0, 0, 288, 1780, 1, 0, 0, 0, 290, 1782, 1, 0, 0, 0, 292, 1787, 1, 0, 0, 0, 294, 1793, 1, 0, 0, 0, 296, 1811, 1, 0, 0, 0, 298, 1813, 1, 0, 0, 0, 300, 1817, 1, 0, 0, 0, 302, 1827, 1, 0, 0, 0, 304, 1833, 1, 0, 0, 0, 306, 1837, 1, 0, 0, 0, 308, 1839, 1, 0, 0, 0, 310, 1843, 1, 0, 0, 0, 312, 1877, 1, 0, 0, 0, 314, 1879, 1, 0, 0, 0, 316, 1881, 1, 0, 0, 0, 318, 1883, 1, 0, 0, 0, 320, 1885, 1, 0, 0, 0, 322, 1887, 1, 0, 0, 0, 324, 1889, 1, 0, 0, 0, 326, 1891, 1, 0, 0, 0, 328, 1898, 1, 0, 0, 0, 330, 1900, 1, 0, 0, 0, 332, 1907, 1, 0, 0, 0, 334, 1909, 1, 0, 0, 0, 336, 1913, 1, 0, 0, 0, 338, 1915, 1, 0, 0, 0, 340, 1924, 1, 0, 0, 0, 342, 1926, 1, 0, 0, 0, 344, 1928, 1, 0, 0, 0, 346, 1930, 1, 0, 0, 0, 348, 1932, 1, 0, 0, 0, 350, 1934, 1, 0, 0, 0, 352, 1936, 1, 0, 0, 0, 354, 1938, 1, 0, 0, 0, 356, 1940, 1, 0, 0, 0, 358, 1950, 1, 0, 0, 0, 360, 1952, 1, 0, 0, 0, 362, 1956, 1, 0, 0, 0, 364, 1959, 1, 0, 0, 0, 366, 1964, 1, 0, 0, 0, 368, 1969, 1, 0, 0, 0, 370, 1974, 1, 0, 0, 0, 372, 1978, 1, 0, 0, 0, 374, 1983, 1, 0, 0, 0, 376, 1985, 1, 0, 0, 0, 378, 1988, 1, 0, 0, 0, 380, 1991, 1, 0, 0, 0, 382, 1994, 1, 0, 0, 0, 384, 1996, 1, 0, 0, 0, 386, 1998, 1, 0, 0, 0, 388, 2009, 1, 0, 0, 0, 390, 2017, 1, 0, 0, 0, 392, 2025, 1, 0, 0, 0, 394, 2052, 1, 0, 0, 0, 396, 2064, 1, 0, 0, 0, 398, 2067, 1, 0, 0, 0, 400, 2094, 1, 0, 0, 0, 402, 2098, 1, 0, 0, 0, 404, 2212, 1, 0, 0, 0, 406, 408, 3, 2, 1, 0, 407, 406, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 5, 0, 0, 1, 410, 1, 1, 0, 0, 0, 411, 414, 3, 6, 3, 0, 412, 414, 3, 4, 2, 0, 413, 411, 1, 0, 0, 0, 413, 412, 1, 0, 0, 0, 414, 3, 1, 0, 0, 0, 415, 420, 3, 12, 6, 0, 416, 417, 5, 167, 0, 0, 417, 419, 3, 14, 7, 0, 418, 416, 1, 0, 0, 0, 419, 422, 1, 0, 0, 0, 420, 418, 1, 0, 0, 0, 420, 421, 1, 0, 0, 0, 421, 5, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 423, 425, 5, 5, 0, 0, 424, 426, 3, 8, 4, 0, 425, 424, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 427, 1, 0, 0, 0, 427, 428, 3, 4, 2, 0, 428, 7, 1, 0, 0, 0, 429, 430, 7, 0, 0, 0, 430, 9, 1, 0, 0, 0, 431, 436, 3, 18, 9, 0, 432, 433, 5, 167, 0, 0, 433, 435, 3, 14, 7, 0, 434, 432, 1, 0, 0, 0, 435, 438, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 11, 1, 0, 0, 0, 438, 436, 1, 0, 0, 0, 439, 443, 3, 34, 17, 0, 440, 443, 3, 36, 18, 0, 441, 443, 3, 18, 9, 0, 442, 439, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 441, 1, 0, 0, 0, 443, 13, 1, 0, 0, 0, 444, 477, 3, 38, 19, 0, 445, 477, 3, 40, 20, 0, 446, 477, 3, 42, 21, 0, 447, 477, 3, 190, 95, 0, 448, 477, 3, 48, 24, 0, 449, 477, 3, 50, 25, 0, 450, 477, 3, 64, 32, 0, 451, 477, 3, 66, 33, 0, 452, 477, 3, 68, 34, 0, 453, 477, 3, 80, 40, 0, 454, 477, 3, 82, 41, 0, 455, 477, 3, 84, 42, 0, 456, 477, 3, 94, 47, 0, 457, 477, 3, 96, 48, 0, 458, 477, 3, 98, 49, 0, 459, 477, 3, 100, 50, 0, 460, 477, 3, 102, 51, 0, 461, 477, 3, 124, 62, 0, 462, 477, 3, 132, 66, 0, 463, 477, 3, 162, 81, 0, 464, 477, 3, 166, 83, 0, 465, 477, 3, 170, 85, 0, 466, 477, 3, 140, 70, 0, 467, 477, 3, 148, 74, 0, 468, 477, 3, 158, 79, 0, 469, 477, 3, 160, 80, 0, 470, 477, 3, 154, 77, 0, 471, 477, 3, 156, 78, 0, 472, 477, 3, 70, 35, 0, 473, 477, 3, 112, 56, 0, 474, 477, 3, 72, 36, 0, 475, 477, 3, 116, 58, 0, 476, 444, 1, 0, 0, 0, 476, 445, 1, 0, 0, 0, 476, 446, 1, 0, 0, 0, 476, 447, 1, 0, 0, 0, 476, 448, 1, 0, 0, 0, 476, 449, 1, 0, 0, 0, 476, 450, 1, 0, 0, 0, 476, 451, 1, 0, 0, 0, 476, 452, 1, 0, 0, 0, 476, 453, 1, 0, 0, 0, 476, 454, 1, 0, 0, 0, 476, 455, 1, 0, 0, 0, 476, 456, 1, 0, 0, 0, 476, 457, 1, 0, 0, 0, 476, 458, 1, 0, 0, 0, 476, 459, 1, 0, 0, 0, 476, 460, 1, 0, 0, 0, 476, 461, 1, 0, 0, 0, 476, 462, 1, 0, 0, 0, 476, 463, 1, 0, 0, 0, 476, 464, 1, 0, 0, 0, 476, 465, 1, 0, 0, 0, 476, 466, 1, 0, 0, 0, 476, 467, 1, 0, 0, 0, 476, 468, 1, 0, 0, 0, 476, 469, 1, 0, 0, 0, 476, 470, 1, 0, 0, 0, 476, 471, 1, 0, 0, 0, 476, 472, 1, 0, 0, 0, 476, 473, 1, 0, 0, 0, 476, 474, 1, 0, 0, 0, 476, 475, 1, 0, 0, 0, 477, 15, 1, 0, 0, 0, 478, 479, 7, 1, 0, 0, 479, 17, 1, 0, 0, 0, 480, 482, 5, 2, 0, 0, 481, 480, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 486, 1, 0, 0, 0, 483, 485, 3, 20, 10, 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, 3, 174, 87, 0, 490, 489, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, 495, 1, 0, 0, 0, 492, 494, 3, 20, 10, 0, 493, 492, 1, 0, 0, 0, 494, 497, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 19, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 498, 499, 6, 10, -1, 0, 499, 500, 5, 184, 0, 0, 500, 501, 3, 20, 10, 0, 501, 502, 5, 185, 0, 0, 502, 507, 1, 0, 0, 0, 503, 504, 5, 117, 0, 0, 504, 507, 3, 20, 10, 4, 505, 507, 3, 22, 11, 0, 506, 498, 1, 0, 0, 0, 506, 503, 1, 0, 0, 0, 506, 505, 1, 0, 0, 0, 507, 516, 1, 0, 0, 0, 508, 509, 10, 3, 0, 0, 509, 510, 5, 118, 0, 0, 510, 515, 3, 20, 10, 4, 511, 512, 10, 2, 0, 0, 512, 513, 5, 119, 0, 0, 513, 515, 3, 20, 10, 3, 514, 508, 1, 0, 0, 0, 514, 511, 1, 0, 0, 0, 515, 518, 1, 0, 0, 0, 516, 514, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 21, 1, 0, 0, 0, 518, 516, 1, 0, 0, 0, 519, 523, 3, 26, 13, 0, 520, 523, 3, 28, 14, 0, 521, 523, 3, 24, 12, 0, 522, 519, 1, 0, 0, 0, 522, 520, 1, 0, 0, 0, 522, 521, 1, 0, 0, 0, 523, 23, 1, 0, 0, 0, 524, 530, 3, 238, 119, 0, 525, 530, 3, 372, 186, 0, 526, 530, 5, 455, 0, 0, 527, 530, 3, 362, 181, 0, 528, 530, 3, 404, 202, 0, 529, 524, 1, 0, 0, 0, 529, 525, 1, 0, 0, 0, 529, 526, 1, 0, 0, 0, 529, 527, 1, 0, 0, 0, 529, 528, 1, 0, 0, 0, 530, 25, 1, 0, 0, 0, 531, 532, 3, 270, 135, 0, 532, 533, 3, 32, 16, 0, 533, 534, 3, 24, 12, 0, 534, 27, 1, 0, 0, 0, 535, 536, 3, 270, 135, 0, 536, 537, 5, 114, 0, 0, 537, 538, 5, 184, 0, 0, 538, 539, 3, 30, 15, 0, 539, 540, 5, 185, 0, 0, 540, 29, 1, 0, 0, 0, 541, 546, 3, 24, 12, 0, 542, 543, 5, 168, 0, 0, 543, 545, 3, 24, 12, 0, 544, 542, 1, 0, 0, 0, 545, 548, 1, 0, 0, 0, 546, 544, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 31, 1, 0, 0, 0, 548, 546, 1, 0, 0, 0, 549, 556, 5, 170, 0, 0, 550, 556, 5, 176, 0, 0, 551, 556, 5, 173, 0, 0, 552, 556, 5, 174, 0, 0, 553, 556, 5, 172, 0, 0, 554, 556, 5, 175, 0, 0, 555, 549, 1, 0, 0, 0, 555, 550, 1, 0, 0, 0, 555, 551, 1, 0, 0, 0, 555, 552, 1, 0, 0, 0, 555, 553, 1, 0, 0, 0, 555, 554, 1, 0, 0, 0, 556, 33, 1, 0, 0, 0, 557, 558, 5, 3, 0, 0, 558, 559, 3, 178, 89, 0, 559, 35, 1, 0, 0, 0, 560, 561, 5, 4, 0, 0, 561, 562, 5, 69, 0, 0, 562, 37, 1, 0, 0, 0, 563, 564, 5, 7, 0, 0, 564, 565, 3, 240, 120, 0, 565, 39, 1, 0, 0, 0, 566, 567, 5, 8, 0, 0, 567, 568, 3, 44, 22, 0, 568, 41, 1, 0, 0, 0, 569, 570, 5, 10, 0, 0, 570, 571, 3, 44, 22, 0, 571, 43, 1, 0, 0, 0, 572, 574, 7, 2, 0, 0, 573, 572, 1, 0, 0, 0, 573, 574, 1, 0, 0, 0, 574, 575, 1, 0, 0, 0, 575, 576, 3, 46, 23, 0, 576, 45, 1, 0, 0, 0, 577, 584, 3, 274, 137, 0, 578, 580, 5, 168, 0, 0, 579, 578, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 583, 3, 274, 137, 0, 582, 579, 1, 0, 0, 0, 583, 586, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 47, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 587, 588, 5, 11, 0, 0, 588, 595, 3, 206, 103, 0, 589, 591, 5, 168, 0, 0, 590, 589, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 594, 3, 206, 103, 0, 593, 590, 1, 0, 0, 0, 594, 597, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 49, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 598, 599, 5, 12, 0, 0, 599, 600, 3, 52, 26, 0, 600, 605, 3, 228, 114, 0, 601, 602, 5, 168, 0, 0, 602, 604, 3, 228, 114, 0, 603, 601, 1, 0, 0, 0, 604, 607, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 609, 1, 0, 0, 0, 607, 605, 1, 0, 0, 0, 608, 610, 3, 210, 105, 0, 609, 608, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 612, 1, 0, 0, 0, 611, 613, 3, 62, 31, 0, 612, 611, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 51, 1, 0, 0, 0, 614, 619, 3, 54, 27, 0, 615, 619, 3, 56, 28, 0, 616, 619, 3, 58, 29, 0, 617, 619, 3, 60, 30, 0, 618, 614, 1, 0, 0, 0, 618, 615, 1, 0, 0, 0, 618, 616, 1, 0, 0, 0, 618, 617, 1, 0, 0, 0, 619, 622, 1, 0, 0, 0, 620, 618, 1, 0, 0, 0, 620, 621, 1, 0, 0, 0, 621, 53, 1, 0, 0, 0, 622, 620, 1, 0, 0, 0, 623, 624, 5, 86, 0, 0, 624, 625, 5, 170, 0, 0, 625, 626, 3, 364, 182, 0, 626, 55, 1, 0, 0, 0, 627, 628, 5, 87, 0, 0, 628, 629, 5, 170, 0, 0, 629, 630, 3, 372, 186, 0, 630, 57, 1, 0, 0, 0, 631, 632, 5, 88, 0, 0, 632, 633, 5, 170, 0, 0, 633, 634, 3, 362, 181, 0, 634, 59, 1, 0, 0, 0, 635, 636, 5, 89, 0, 0, 636, 637, 5, 170, 0, 0, 637, 638, 3, 372, 186, 0, 638, 61, 1, 0, 0, 0, 639, 640, 5, 85, 0, 0, 640, 641, 5, 170, 0, 0, 641, 642, 3, 372, 186, 0, 642, 63, 1, 0, 0, 0, 643, 644, 5, 13, 0, 0, 644, 649, 3, 220, 110, 0, 645, 646, 5, 168, 0, 0, 646, 648, 3, 220, 110, 0, 647, 645, 1, 0, 0, 0, 648, 651, 1, 0, 0, 0, 649, 647, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 653, 1, 0, 0, 0, 651, 649, 1, 0, 0, 0, 652, 654, 3, 210, 105, 0, 653, 652, 1, 0, 0, 0, 653, 654, 1, 0, 0, 0, 654, 65, 1, 0, 0, 0, 655, 657, 5, 14, 0, 0, 656, 658, 3, 364, 182, 0, 657, 656, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 663, 3, 264, 132, 0, 660, 661, 5, 83, 0, 0, 661, 662, 5, 170, 0, 0, 662, 664, 3, 372, 186, 0, 663, 660, 1, 0, 0, 0, 663, 664, 1, 0, 0, 0, 664, 668, 1, 0, 0, 0, 665, 666, 5, 84, 0, 0, 666, 667, 5, 170, 0, 0, 667, 669, 3, 372, 186, 0, 668, 665, 1, 0, 0, 0, 668, 669, 1, 0, 0, 0, 669, 67, 1, 0, 0, 0, 670, 672, 5, 15, 0, 0, 671, 673, 3, 364, 182, 0, 672, 671, 1, 0, 0, 0, 672, 673, 1, 0, 0, 0, 673, 674, 1, 0, 0, 0, 674, 676, 3, 216, 108, 0, 675, 677, 7, 3, 0, 0, 676, 675, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 69, 1, 0, 0, 0, 678, 679, 5, 356, 0, 0, 679, 71, 1, 0, 0, 0, 680, 684, 5, 37, 0, 0, 681, 683, 3, 74, 37, 0, 682, 681, 1, 0, 0, 0, 683, 686, 1, 0, 0, 0, 684, 682, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 687, 1, 0, 0, 0, 686, 684, 1, 0, 0, 0, 687, 690, 3, 230, 115, 0, 688, 689, 5, 62, 0, 0, 689, 691, 3, 270, 135, 0, 690, 688, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 73, 1, 0, 0, 0, 692, 697, 3, 214, 107, 0, 693, 694, 5, 427, 0, 0, 694, 695, 5, 170, 0, 0, 695, 697, 3, 78, 39, 0, 696, 692, 1, 0, 0, 0, 696, 693, 1, 0, 0, 0, 697, 700, 1, 0, 0, 0, 698, 700, 3, 76, 38, 0, 699, 696, 1, 0, 0, 0, 699, 698, 1, 0, 0, 0, 700, 75, 1, 0, 0, 0, 701, 702, 5, 107, 0, 0, 702, 703, 5, 170, 0, 0, 703, 711, 3, 364, 182, 0, 704, 705, 5, 108, 0, 0, 705, 708, 5, 170, 0, 0, 706, 709, 3, 372, 186, 0, 707, 709, 3, 396, 198, 0, 708, 706, 1, 0, 0, 0, 708, 707, 1, 0, 0, 0, 709, 711, 1, 0, 0, 0, 710, 701, 1, 0, 0, 0, 710, 704, 1, 0, 0, 0, 711, 77, 1, 0, 0, 0, 712, 713, 3, 364, 182, 0, 713, 714, 3, 384, 192, 0, 714, 717, 1, 0, 0, 0, 715, 717, 3, 362, 181, 0, 716, 712, 1, 0, 0, 0, 716, 715, 1, 0, 0, 0, 717, 79, 1, 0, 0, 0, 718, 719, 5, 16, 0, 0, 719, 724, 3, 218, 109, 0, 720, 721, 5, 168, 0, 0, 721, 723, 3, 218, 109, 0, 722, 720, 1, 0, 0, 0, 723, 726, 1, 0, 0, 0, 724, 722, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 81, 1, 0, 0, 0, 726, 724, 1, 0, 0, 0, 727, 729, 5, 17, 0, 0, 728, 730, 3, 364, 182, 0, 729, 728, 1, 0, 0, 0, 729, 730, 1, 0, 0, 0, 730, 733, 1, 0, 0, 0, 731, 732, 5, 6, 0, 0, 732, 734, 3, 364, 182, 0, 733, 731, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 83, 1, 0, 0, 0, 735, 736, 5, 18, 0, 0, 736, 740, 3, 270, 135, 0, 737, 739, 3, 86, 43, 0, 738, 737, 1, 0, 0, 0, 739, 742, 1, 0, 0, 0, 740, 738, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 745, 1, 0, 0, 0, 742, 740, 1, 0, 0, 0, 743, 744, 5, 61, 0, 0, 744, 746, 3, 388, 194, 0, 745, 743, 1, 0, 0, 0, 745, 746, 1, 0, 0, 0, 746, 85, 1, 0, 0, 0, 747, 748, 5, 427, 0, 0, 748, 749, 5, 170, 0, 0, 749, 769, 3, 90, 45, 0, 750, 751, 5, 428, 0, 0, 751, 752, 5, 170, 0, 0, 752, 769, 3, 364, 182, 0, 753, 754, 5, 429, 0, 0, 754, 755, 5, 170, 0, 0, 755, 757, 3, 358, 179, 0, 756, 758, 3, 384, 192, 0, 757, 756, 1, 0, 0, 0, 757, 758, 1, 0, 0, 0, 758, 769, 1, 0, 0, 0, 759, 760, 5, 432, 0, 0, 760, 761, 5, 170, 0, 0, 761, 769, 3, 88, 44, 0, 762, 763, 5, 430, 0, 0, 763, 764, 5, 170, 0, 0, 764, 769, 3, 238, 119, 0, 765, 766, 5, 431, 0, 0, 766, 767, 5, 170, 0, 0, 767, 769, 3, 238, 119, 0, 768, 747, 1, 0, 0, 0, 768, 750, 1, 0, 0, 0, 768, 753, 1, 0, 0, 0, 768, 759, 1, 0, 0, 0, 768, 762, 1, 0, 0, 0, 768, 765, 1, 0, 0, 0, 769, 87, 1, 0, 0, 0, 770, 774, 5, 220, 0, 0, 771, 774, 5, 221, 0, 0, 772, 774, 3, 358, 179, 0, 773, 770, 1, 0, 0, 0, 773, 771, 1, 0, 0, 0, 773, 772, 1, 0, 0, 0, 774, 89, 1, 0, 0, 0, 775, 777, 3, 358, 179, 0, 776, 778, 3, 384, 192, 0, 777, 776, 1, 0, 0, 0, 777, 778, 1, 0, 0, 0, 778, 785, 1, 0, 0, 0, 779, 785, 3, 92, 46, 0, 780, 781, 3, 396, 198, 0, 781, 782, 3, 384, 192, 0, 782, 785, 1, 0, 0, 0, 783, 785, 3, 396, 198, 0, 784, 775, 1, 0, 0, 0, 784, 779, 1, 0, 0, 0, 784, 780, 1, 0, 0, 0, 784, 783, 1, 0, 0, 0, 785, 91, 1, 0, 0, 0, 786, 787, 5, 258, 0, 0, 787, 93, 1, 0, 0, 0, 788, 790, 5, 19, 0, 0, 789, 791, 3, 364, 182, 0, 790, 789, 1, 0, 0, 0, 790, 791, 1, 0, 0, 0, 791, 795, 1, 0, 0, 0, 792, 793, 5, 105, 0, 0, 793, 794, 5, 170, 0, 0, 794, 796, 3, 362, 181, 0, 795, 792, 1, 0, 0, 0, 795, 796, 1, 0, 0, 0, 796, 800, 1, 0, 0, 0, 797, 798, 5, 106, 0, 0, 798, 799, 5, 170, 0, 0, 799, 801, 3, 372, 186, 0, 800, 797, 1, 0, 0, 0, 800, 801, 1, 0, 0, 0, 801, 802, 1, 0, 0, 0, 802, 804, 3, 264, 132, 0, 803, 805, 3, 208, 104, 0, 804, 803, 1, 0, 0, 0, 804, 805, 1, 0, 0, 0, 805, 95, 1, 0, 0, 0, 806, 808, 5, 20, 0, 0, 807, 809, 3, 364, 182, 0, 808, 807, 1, 0, 0, 0, 808, 809, 1, 0, 0, 0, 809, 813, 1, 0, 0, 0, 810, 811, 5, 105, 0, 0, 811, 812, 5, 170, 0, 0, 812, 814, 3, 362, 181, 0, 813, 810, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 818, 1, 0, 0, 0, 815, 816, 5, 106, 0, 0, 816, 817, 5, 170, 0, 0, 817, 819, 3, 372, 186, 0, 818, 815, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 820, 1, 0, 0, 0, 820, 822, 3, 264, 132, 0, 821, 823, 3, 208, 104, 0, 822, 821, 1, 0, 0, 0, 822, 823, 1, 0, 0, 0, 823, 97, 1, 0, 0, 0, 824, 825, 5, 27, 0, 0, 825, 826, 3, 242, 121, 0, 826, 827, 3, 362, 181, 0, 827, 99, 1, 0, 0, 0, 828, 829, 5, 21, 0, 0, 829, 830, 3, 242, 121, 0, 830, 831, 3, 362, 181, 0, 831, 101, 1, 0, 0, 0, 832, 836, 5, 22, 0, 0, 833, 835, 3, 104, 52, 0, 834, 833, 1, 0, 0, 0, 835, 838, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 103, 1, 0, 0, 0, 838, 836, 1, 0, 0, 0, 839, 840, 5, 109, 0, 0, 840, 841, 5, 170, 0, 0, 841, 851, 3, 242, 121, 0, 842, 843, 5, 110, 0, 0, 843, 844, 5, 170, 0, 0, 844, 851, 3, 242, 121, 0, 845, 846, 5, 111, 0, 0, 846, 848, 5, 170, 0, 0, 847, 845, 1, 0, 0, 0, 847, 848, 1, 0, 0, 0, 848, 849, 1, 0, 0, 0, 849, 851, 3, 106, 53, 0, 850, 839, 1, 0, 0, 0, 850, 842, 1, 0, 0, 0, 850, 847, 1, 0, 0, 0, 851, 105, 1, 0, 0, 0, 852, 857, 3, 108, 54, 0, 853, 854, 5, 169, 0, 0, 854, 856, 3, 108, 54, 0, 855, 853, 1, 0, 0, 0, 856, 859, 1, 0, 0, 0, 857, 855, 1, 0, 0, 0, 857, 858, 1, 0, 0, 0, 858, 107, 1, 0, 0, 0, 859, 857, 1, 0, 0, 0, 860, 862, 3, 396, 198, 0, 861, 863, 3, 110, 55, 0, 862, 861, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 109, 1, 0, 0, 0, 864, 866, 5, 188, 0, 0, 865, 867, 5, 457, 0, 0, 866, 865, 1, 0, 0, 0, 866, 867, 1, 0, 0, 0, 867, 868, 1, 0, 0, 0, 868, 869, 5, 189, 0, 0, 869, 111, 1, 0, 0, 0, 870, 871, 5, 23, 0, 0, 871, 872, 3, 114, 57, 0, 872, 113, 1, 0, 0, 0, 873, 874, 3, 388, 194, 0, 874, 875, 7, 4, 0, 0, 875, 876, 3, 362, 181, 0, 876, 115, 1, 0, 0, 0, 877, 878, 5, 24, 0, 0, 878, 879, 3, 118, 59, 0, 879, 117, 1, 0, 0, 0, 880, 881, 5, 9, 0, 0, 881, 882, 5, 170, 0, 0, 882, 886, 3, 388, 194, 0, 883, 885, 3, 120, 60, 0, 884, 883, 1, 0, 0, 0, 885, 888, 1, 0, 0, 0, 886, 884, 1, 0, 0, 0, 886, 887, 1, 0, 0, 0, 887, 889, 1, 0, 0, 0, 888, 886, 1, 0, 0, 0, 889, 893, 3, 362, 181, 0, 890, 892, 3, 120, 60, 0, 891, 890, 1, 0, 0, 0, 892, 895, 1, 0, 0, 0, 893, 891, 1, 0, 0, 0, 893, 894, 1, 0, 0, 0, 894, 119, 1, 0, 0, 0, 895, 893, 1, 0, 0, 0, 896, 897, 5, 46, 0, 0, 897, 898, 5, 170, 0, 0, 898, 906, 3, 364, 182, 0, 899, 900, 5, 207, 0, 0, 900, 901, 5, 170, 0, 0, 901, 906, 7, 5, 0, 0, 902, 903, 5, 47, 0, 0, 903, 904, 5, 170, 0, 0, 904, 906, 3, 388, 194, 0, 905, 896, 1, 0, 0, 0, 905, 899, 1, 0, 0, 0, 905, 902, 1, 0, 0, 0, 906, 121, 1, 0, 0, 0, 907, 908, 7, 6, 0, 0, 908, 123, 1, 0, 0, 0, 909, 910, 5, 29, 0, 0, 910, 912, 3, 242, 121, 0, 911, 913, 3, 210, 105, 0, 912, 911, 1, 0, 0, 0, 912, 913, 1, 0, 0, 0, 913, 917, 1, 0, 0, 0, 914, 915, 5, 44, 0, 0, 915, 916, 5, 170, 0, 0, 916, 918, 3, 128, 64, 0, 917, 914, 1, 0, 0, 0, 917, 918, 1, 0, 0, 0, 918, 922, 1, 0, 0, 0, 919, 920, 5, 207, 0, 0, 920, 921, 5, 170, 0, 0, 921, 923, 3, 130, 65, 0, 922, 919, 1, 0, 0, 0, 922, 923, 1, 0, 0, 0, 923, 927, 1, 0, 0, 0, 924, 925, 5, 45, 0, 0, 925, 926, 5, 170, 0, 0, 926, 928, 3, 364, 182, 0, 927, 924, 1, 0, 0, 0, 927, 928, 1, 0, 0, 0, 928, 932, 1, 0, 0, 0, 929, 930, 5, 48, 0, 0, 930, 931, 5, 170, 0, 0, 931, 933, 3, 364, 182, 0, 932, 929, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 937, 1, 0, 0, 0, 934, 935, 5, 30, 0, 0, 935, 936, 5, 170, 0, 0, 936, 938, 3, 362, 181, 0, 937, 934, 1, 0, 0, 0, 937, 938, 1, 0, 0, 0, 938, 942, 1, 0, 0, 0, 939, 941, 3, 126, 63, 0, 940, 939, 1, 0, 0, 0, 941, 944, 1, 0, 0, 0, 942, 940, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 125, 1, 0, 0, 0, 944, 942, 1, 0, 0, 0, 945, 946, 5, 28, 0, 0, 946, 947, 5, 170, 0, 0, 947, 955, 3, 362, 181, 0, 948, 949, 5, 42, 0, 0, 949, 950, 5, 170, 0, 0, 950, 955, 3, 364, 182, 0, 951, 952, 5, 43, 0, 0, 952, 953, 5, 170, 0, 0, 953, 955, 3, 366, 183, 0, 954, 945, 1, 0, 0, 0, 954, 948, 1, 0, 0, 0, 954, 951, 1, 0, 0, 0, 955, 127, 1, 0, 0, 0, 956, 957, 7, 7, 0, 0, 957, 129, 1, 0, 0, 0, 958, 959, 7, 8, 0, 0, 959, 131, 1, 0, 0, 0, 960, 961, 5, 157, 0, 0, 961, 962, 3, 260, 130, 0, 962, 965, 3, 134, 67, 0, 963, 964, 7, 9, 0, 0, 964, 966, 3, 136, 68, 0, 965, 963, 1, 0, 0, 0, 965, 966, 1, 0, 0, 0, 966, 133, 1, 0, 0, 0, 967, 972, 3, 138, 69, 0, 968, 969, 5, 168, 0, 0, 969, 971, 3, 138, 69, 0, 970, 968, 1, 0, 0, 0, 971, 974, 1, 0, 0, 0, 972, 970, 1, 0, 0, 0, 972, 973, 1, 0, 0, 0, 973, 135, 1, 0, 0, 0, 974, 972, 1, 0, 0, 0, 975, 980, 3, 138, 69, 0, 976, 977, 5, 168, 0, 0, 977, 979, 3, 138, 69, 0, 978, 976, 1, 0, 0, 0, 979, 982, 1, 0, 0, 0, 980, 978, 1, 0, 0, 0, 980, 981, 1, 0, 0, 0, 981, 137, 1, 0, 0, 0, 982, 980, 1, 0, 0, 0, 983, 986, 3, 270, 135, 0, 984, 985, 5, 61, 0, 0, 985, 987, 3, 270, 135, 0, 986, 984, 1, 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 139, 1, 0, 0, 0, 988, 989, 5, 34, 0, 0, 989, 993, 3, 142, 71, 0, 990, 991, 5, 34, 0, 0, 991, 993, 3, 144, 72, 0, 992, 988, 1, 0, 0, 0, 992, 990, 1, 0, 0, 0, 993, 141, 1, 0, 0, 0, 994, 995, 5, 71, 0, 0, 995, 998, 3, 244, 122, 0, 996, 997, 5, 114, 0, 0, 997, 999, 3, 264, 132, 0, 998, 996, 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 143, 1, 0, 0, 0, 1000, 1001, 5, 70, 0, 0, 1001, 1006, 3, 146, 73, 0, 1002, 1003, 5, 168, 0, 0, 1003, 1005, 3, 146, 73, 0, 1004, 1002, 1, 0, 0, 0, 1005, 1008, 1, 0, 0, 0, 1006, 1004, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 145, 1, 0, 0, 0, 1008, 1006, 1, 0, 0, 0, 1009, 1010, 3, 270, 135, 0, 1010, 1011, 5, 170, 0, 0, 1011, 1012, 3, 244, 122, 0, 1012, 147, 1, 0, 0, 0, 1013, 1016, 5, 36, 0, 0, 1014, 1015, 5, 15, 0, 0, 1015, 1017, 3, 266, 133, 0, 1016, 1014, 1, 0, 0, 0, 1016, 1017, 1, 0, 0, 0, 1017, 1018, 1, 0, 0, 0, 1018, 1022, 3, 150, 75, 0, 1019, 1021, 3, 150, 75, 0, 1020, 1019, 1, 0, 0, 0, 1021, 1024, 1, 0, 0, 0, 1022, 1020, 1, 0, 0, 0, 1022, 1023, 1, 0, 0, 0, 1023, 149, 1, 0, 0, 0, 1024, 1022, 1, 0, 0, 0, 1025, 1026, 3, 152, 76, 0, 1026, 1027, 5, 184, 0, 0, 1027, 1028, 3, 364, 182, 0, 1028, 1029, 5, 168, 0, 0, 1029, 1030, 3, 270, 135, 0, 1030, 1033, 5, 185, 0, 0, 1031, 1032, 5, 61, 0, 0, 1032, 1034, 3, 388, 194, 0, 1033, 1031, 1, 0, 0, 0, 1033, 1034, 1, 0, 0, 0, 1034, 151, 1, 0, 0, 0, 1035, 1036, 7, 10, 0, 0, 1036, 153, 1, 0, 0, 0, 1037, 1038, 5, 39, 0, 0, 1038, 1041, 3, 270, 135, 0, 1039, 1040, 5, 61, 0, 0, 1040, 1042, 3, 388, 194, 0, 1041, 1039, 1, 0, 0, 0, 1041, 1042, 1, 0, 0, 0, 1042, 155, 1, 0, 0, 0, 1043, 1044, 5, 35, 0, 0, 1044, 1047, 3, 270, 135, 0, 1045, 1046, 5, 61, 0, 0, 1046, 1048, 3, 394, 197, 0, 1047, 1045, 1, 0, 0, 0, 1047, 1048, 1, 0, 0, 0, 1048, 157, 1, 0, 0, 0, 1049, 1053, 5, 38, 0, 0, 1050, 1051, 5, 76, 0, 0, 1051, 1052, 5, 170, 0, 0, 1052, 1054, 3, 372, 186, 0, 1053, 1050, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 1056, 5, 186, 0, 0, 1056, 1061, 3, 14, 7, 0, 1057, 1058, 5, 167, 0, 0, 1058, 1060, 3, 14, 7, 0, 1059, 1057, 1, 0, 0, 0, 1060, 1063, 1, 0, 0, 0, 1061, 1059, 1, 0, 0, 0, 1061, 1062, 1, 0, 0, 0, 1062, 1064, 1, 0, 0, 0, 1063, 1061, 1, 0, 0, 0, 1064, 1065, 5, 187, 0, 0, 1065, 159, 1, 0, 0, 0, 1066, 1067, 5, 104, 0, 0, 1067, 1069, 5, 186, 0, 0, 1068, 1070, 3, 18, 9, 0, 1069, 1068, 1, 0, 0, 0, 1069, 1070, 1, 0, 0, 0, 1070, 1075, 1, 0, 0, 0, 1071, 1072, 5, 167, 0, 0, 1072, 1074, 3, 14, 7, 0, 1073, 1071, 1, 0, 0, 0, 1074, 1077, 1, 0, 0, 0, 1075, 1073, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 1078, 1, 0, 0, 0, 1077, 1075, 1, 0, 0, 0, 1078, 1079, 5, 187, 0, 0, 1079, 161, 1, 0, 0, 0, 1080, 1084, 5, 31, 0, 0, 1081, 1083, 3, 164, 82, 0, 1082, 1081, 1, 0, 0, 0, 1083, 1086, 1, 0, 0, 0, 1084, 1082, 1, 0, 0, 0, 1084, 1085, 1, 0, 0, 0, 1085, 163, 1, 0, 0, 0, 1086, 1084, 1, 0, 0, 0, 1087, 1088, 5, 90, 0, 0, 1088, 1089, 5, 170, 0, 0, 1089, 1097, 3, 364, 182, 0, 1090, 1091, 5, 91, 0, 0, 1091, 1092, 5, 170, 0, 0, 1092, 1097, 3, 364, 182, 0, 1093, 1094, 5, 92, 0, 0, 1094, 1095, 5, 170, 0, 0, 1095, 1097, 3, 362, 181, 0, 1096, 1087, 1, 0, 0, 0, 1096, 1090, 1, 0, 0, 0, 1096, 1093, 1, 0, 0, 0, 1097, 165, 1, 0, 0, 0, 1098, 1102, 5, 32, 0, 0, 1099, 1101, 3, 168, 84, 0, 1100, 1099, 1, 0, 0, 0, 1101, 1104, 1, 0, 0, 0, 1102, 1100, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 167, 1, 0, 0, 0, 1104, 1102, 1, 0, 0, 0, 1105, 1106, 5, 93, 0, 0, 1106, 1107, 5, 170, 0, 0, 1107, 1142, 3, 364, 182, 0, 1108, 1109, 5, 94, 0, 0, 1109, 1110, 5, 170, 0, 0, 1110, 1142, 3, 364, 182, 0, 1111, 1112, 5, 95, 0, 0, 1112, 1113, 5, 170, 0, 0, 1113, 1142, 3, 364, 182, 0, 1114, 1115, 5, 96, 0, 0, 1115, 1116, 5, 170, 0, 0, 1116, 1142, 3, 364, 182, 0, 1117, 1118, 5, 97, 0, 0, 1118, 1119, 5, 170, 0, 0, 1119, 1142, 3, 366, 183, 0, 1120, 1121, 5, 98, 0, 0, 1121, 1122, 5, 170, 0, 0, 1122, 1142, 3, 366, 183, 0, 1123, 1124, 5, 99, 0, 0, 1124, 1125, 5, 170, 0, 0, 1125, 1142, 3, 362, 181, 0, 1126, 1127, 5, 100, 0, 0, 1127, 1128, 5, 170, 0, 0, 1128, 1142, 3, 362, 181, 0, 1129, 1130, 5, 297, 0, 0, 1130, 1131, 5, 170, 0, 0, 1131, 1142, 3, 362, 181, 0, 1132, 1133, 5, 101, 0, 0, 1133, 1134, 5, 170, 0, 0, 1134, 1142, 3, 362, 181, 0, 1135, 1136, 5, 102, 0, 0, 1136, 1137, 5, 170, 0, 0, 1137, 1142, 3, 364, 182, 0, 1138, 1139, 5, 103, 0, 0, 1139, 1140, 5, 170, 0, 0, 1140, 1142, 3, 366, 183, 0, 1141, 1105, 1, 0, 0, 0, 1141, 1108, 1, 0, 0, 0, 1141, 1111, 1, 0, 0, 0, 1141, 1114, 1, 0, 0, 0, 1141, 1117, 1, 0, 0, 0, 1141, 1120, 1, 0, 0, 0, 1141, 1123, 1, 0, 0, 0, 1141, 1126, 1, 0, 0, 0, 1141, 1129, 1, 0, 0, 0, 1141, 1132, 1, 0, 0, 0, 1141, 1135, 1, 0, 0, 0, 1141, 1138, 1, 0, 0, 0, 1142, 169, 1, 0, 0, 0, 1143, 1147, 5, 33, 0, 0, 1144, 1146, 3, 172, 86, 0, 1145, 1144, 1, 0, 0, 0, 1146, 1149, 1, 0, 0, 0, 1147, 1145, 1, 0, 0, 0, 1147, 1148, 1, 0, 0, 0, 1148, 171, 1, 0, 0, 0, 1149, 1147, 1, 0, 0, 0, 1150, 1151, 3, 396, 198, 0, 1151, 1152, 5, 170, 0, 0, 1152, 1153, 3, 358, 179, 0, 1153, 173, 1, 0, 0, 0, 1154, 1155, 5, 63, 0, 0, 1155, 1156, 5, 170, 0, 0, 1156, 1173, 3, 176, 88, 0, 1157, 1158, 5, 64, 0, 0, 1158, 1159, 5, 170, 0, 0, 1159, 1173, 3, 176, 88, 0, 1160, 1161, 5, 63, 0, 0, 1161, 1162, 5, 170, 0, 0, 1162, 1173, 3, 262, 131, 0, 1163, 1164, 5, 64, 0, 0, 1164, 1165, 5, 170, 0, 0, 1165, 1173, 3, 262, 131, 0, 1166, 1167, 5, 63, 0, 0, 1167, 1168, 5, 170, 0, 0, 1168, 1173, 3, 180, 90, 0, 1169, 1170, 5, 64, 0, 0, 1170, 1171, 5, 170, 0, 0, 1171, 1173, 3, 180, 90, 0, 1172, 1154, 1, 0, 0, 0, 1172, 1157, 1, 0, 0, 0, 1172, 1160, 1, 0, 0, 0, 1172, 1163, 1, 0, 0, 0, 1172, 1166, 1, 0, 0, 0, 1172, 1169, 1, 0, 0, 0, 1173, 175, 1, 0, 0, 0, 1174, 1175, 5, 186, 0, 0, 1175, 1176, 3, 10, 5, 0, 1176, 1179, 5, 187, 0, 0, 1177, 1178, 5, 61, 0, 0, 1178, 1180, 3, 388, 194, 0, 1179, 1177, 1, 0, 0, 0, 1179, 1180, 1, 0, 0, 0, 1180, 1183, 1, 0, 0, 0, 1181, 1183, 3, 178, 89, 0, 1182, 1174, 1, 0, 0, 0, 1182, 1181, 1, 0, 0, 0, 1183, 177, 1, 0, 0, 0, 1184, 1189, 3, 260, 130, 0, 1185, 1186, 5, 168, 0, 0, 1186, 1188, 3, 260, 130, 0, 1187, 1185, 1, 0, 0, 0, 1188, 1191, 1, 0, 0, 0, 1189, 1187, 1, 0, 0, 0, 1189, 1190, 1, 0, 0, 0, 1190, 1194, 1, 0, 0, 0, 1191, 1189, 1, 0, 0, 0, 1192, 1193, 5, 61, 0, 0, 1193, 1195, 3, 388, 194, 0, 1194, 1192, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 179, 1, 0, 0, 0, 1196, 1197, 5, 186, 0, 0, 1197, 1200, 3, 182, 91, 0, 1198, 1199, 5, 168, 0, 0, 1199, 1201, 3, 186, 93, 0, 1200, 1198, 1, 0, 0, 0, 1200, 1201, 1, 0, 0, 0, 1201, 1202, 1, 0, 0, 0, 1202, 1203, 5, 187, 0, 0, 1203, 181, 1, 0, 0, 0, 1204, 1209, 3, 184, 92, 0, 1205, 1206, 5, 168, 0, 0, 1206, 1208, 3, 184, 92, 0, 1207, 1205, 1, 0, 0, 0, 1208, 1211, 1, 0, 0, 0, 1209, 1207, 1, 0, 0, 0, 1209, 1210, 1, 0, 0, 0, 1210, 183, 1, 0, 0, 0, 1211, 1209, 1, 0, 0, 0, 1212, 1214, 5, 456, 0, 0, 1213, 1212, 1, 0, 0, 0, 1213, 1214, 1, 0, 0, 0, 1214, 1215, 1, 0, 0, 0, 1215, 1216, 3, 392, 196, 0, 1216, 185, 1, 0, 0, 0, 1217, 1222, 3, 188, 94, 0, 1218, 1219, 5, 168, 0, 0, 1219, 1221, 3, 188, 94, 0, 1220, 1218, 1, 0, 0, 0, 1221, 1224, 1, 0, 0, 0, 1222, 1220, 1, 0, 0, 0, 1222, 1223, 1, 0, 0, 0, 1223, 187, 1, 0, 0, 0, 1224, 1222, 1, 0, 0, 0, 1225, 1226, 3, 396, 198, 0, 1226, 1227, 5, 170, 0, 0, 1227, 1228, 3, 358, 179, 0, 1228, 1234, 1, 0, 0, 0, 1229, 1230, 3, 396, 198, 0, 1230, 1231, 5, 114, 0, 0, 1231, 1232, 3, 386, 193, 0, 1232, 1234, 1, 0, 0, 0, 1233, 1225, 1, 0, 0, 0, 1233, 1229, 1, 0, 0, 0, 1234, 189, 1, 0, 0, 0, 1235, 1239, 5, 51, 0, 0, 1236, 1238, 3, 204, 102, 0, 1237, 1236, 1, 0, 0, 0, 1238, 1241, 1, 0, 0, 0, 1239, 1237, 1, 0, 0, 0, 1239, 1240, 1, 0, 0, 0, 1240, 1243, 1, 0, 0, 0, 1241, 1239, 1, 0, 0, 0, 1242, 1244, 3, 264, 132, 0, 1243, 1242, 1, 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 1264, 3, 176, 88, 0, 1246, 1248, 3, 192, 96, 0, 1247, 1246, 1, 0, 0, 0, 1247, 1248, 1, 0, 0, 0, 1248, 1249, 1, 0, 0, 0, 1249, 1253, 5, 51, 0, 0, 1250, 1252, 3, 204, 102, 0, 1251, 1250, 1, 0, 0, 0, 1252, 1255, 1, 0, 0, 0, 1253, 1251, 1, 0, 0, 0, 1253, 1254, 1, 0, 0, 0, 1254, 1256, 1, 0, 0, 0, 1255, 1253, 1, 0, 0, 0, 1256, 1258, 3, 196, 98, 0, 1257, 1259, 3, 200, 100, 0, 1258, 1257, 1, 0, 0, 0, 1258, 1259, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1261, 3, 198, 99, 0, 1261, 1262, 3, 176, 88, 0, 1262, 1264, 1, 0, 0, 0, 1263, 1235, 1, 0, 0, 0, 1263, 1247, 1, 0, 0, 0, 1264, 191, 1, 0, 0, 0, 1265, 1291, 5, 53, 0, 0, 1266, 1291, 5, 58, 0, 0, 1267, 1269, 5, 352, 0, 0, 1268, 1270, 5, 54, 0, 0, 1269, 1268, 1, 0, 0, 0, 1269, 1270, 1, 0, 0, 0, 1270, 1273, 1, 0, 0, 0, 1271, 1273, 5, 54, 0, 0, 1272, 1267, 1, 0, 0, 0, 1272, 1271, 1, 0, 0, 0, 1273, 1291, 1, 0, 0, 0, 1274, 1276, 5, 351, 0, 0, 1275, 1277, 5, 54, 0, 0, 1276, 1275, 1, 0, 0, 0, 1276, 1277, 1, 0, 0, 0, 1277, 1291, 1, 0, 0, 0, 1278, 1280, 5, 55, 0, 0, 1279, 1281, 5, 54, 0, 0, 1280, 1279, 1, 0, 0, 0, 1280, 1281, 1, 0, 0, 0, 1281, 1291, 1, 0, 0, 0, 1282, 1284, 5, 352, 0, 0, 1283, 1282, 1, 0, 0, 0, 1283, 1284, 1, 0, 0, 0, 1284, 1285, 1, 0, 0, 0, 1285, 1291, 5, 56, 0, 0, 1286, 1288, 5, 352, 0, 0, 1287, 1286, 1, 0, 0, 0, 1287, 1288, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1291, 5, 57, 0, 0, 1290, 1265, 1, 0, 0, 0, 1290, 1266, 1, 0, 0, 0, 1290, 1272, 1, 0, 0, 0, 1290, 1274, 1, 0, 0, 0, 1290, 1278, 1, 0, 0, 0, 1290, 1283, 1, 0, 0, 0, 1290, 1287, 1, 0, 0, 0, 1291, 193, 1, 0, 0, 0, 1292, 1293, 7, 11, 0, 0, 1293, 195, 1, 0, 0, 0, 1294, 1295, 5, 352, 0, 0, 1295, 1296, 5, 170, 0, 0, 1296, 1298, 3, 388, 194, 0, 1297, 1294, 1, 0, 0, 0, 1297, 1298, 1, 0, 0, 0, 1298, 1300, 1, 0, 0, 0, 1299, 1301, 5, 168, 0, 0, 1300, 1299, 1, 0, 0, 0, 1300, 1301, 1, 0, 0, 0, 1301, 1305, 1, 0, 0, 0, 1302, 1303, 5, 351, 0, 0, 1303, 1304, 5, 170, 0, 0, 1304, 1306, 3, 388, 194, 0, 1305, 1302, 1, 0, 0, 0, 1305, 1306, 1, 0, 0, 0, 1306, 197, 1, 0, 0, 0, 1307, 1308, 7, 12, 0, 0, 1308, 1309, 3, 240, 120, 0, 1309, 199, 1, 0, 0, 0, 1310, 1317, 3, 202, 101, 0, 1311, 1313, 5, 168, 0, 0, 1312, 1311, 1, 0, 0, 0, 1312, 1313, 1, 0, 0, 0, 1313, 1314, 1, 0, 0, 0, 1314, 1316, 3, 202, 101, 0, 1315, 1312, 1, 0, 0, 0, 1316, 1319, 1, 0, 0, 0, 1317, 1315, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, 201, 1, 0, 0, 0, 1319, 1317, 1, 0, 0, 0, 1320, 1321, 5, 59, 0, 0, 1321, 1322, 5, 169, 0, 0, 1322, 1323, 5, 455, 0, 0, 1323, 1324, 5, 170, 0, 0, 1324, 1331, 3, 396, 198, 0, 1325, 1326, 5, 60, 0, 0, 1326, 1327, 5, 169, 0, 0, 1327, 1328, 5, 455, 0, 0, 1328, 1329, 5, 170, 0, 0, 1329, 1331, 3, 396, 198, 0, 1330, 1320, 1, 0, 0, 0, 1330, 1325, 1, 0, 0, 0, 1331, 203, 1, 0, 0, 0, 1332, 1333, 5, 77, 0, 0, 1333, 1334, 5, 170, 0, 0, 1334, 1342, 3, 372, 186, 0, 1335, 1336, 5, 425, 0, 0, 1336, 1337, 5, 170, 0, 0, 1337, 1342, 3, 194, 97, 0, 1338, 1339, 5, 203, 0, 0, 1339, 1340, 5, 170, 0, 0, 1340, 1342, 3, 364, 182, 0, 1341, 1332, 1, 0, 0, 0, 1341, 1335, 1, 0, 0, 0, 1341, 1338, 1, 0, 0, 0, 1342, 205, 1, 0, 0, 0, 1343, 1344, 3, 276, 138, 0, 1344, 1345, 5, 61, 0, 0, 1345, 1346, 3, 276, 138, 0, 1346, 207, 1, 0, 0, 0, 1347, 1348, 5, 62, 0, 0, 1348, 1349, 3, 264, 132, 0, 1349, 209, 1, 0, 0, 0, 1350, 1351, 5, 62, 0, 0, 1351, 1365, 3, 264, 132, 0, 1352, 1353, 5, 62, 0, 0, 1353, 1365, 3, 212, 106, 0, 1354, 1355, 5, 62, 0, 0, 1355, 1356, 3, 212, 106, 0, 1356, 1357, 5, 168, 0, 0, 1357, 1358, 3, 264, 132, 0, 1358, 1365, 1, 0, 0, 0, 1359, 1360, 5, 62, 0, 0, 1360, 1361, 3, 264, 132, 0, 1361, 1362, 5, 168, 0, 0, 1362, 1363, 3, 212, 106, 0, 1363, 1365, 1, 0, 0, 0, 1364, 1350, 1, 0, 0, 0, 1364, 1352, 1, 0, 0, 0, 1364, 1354, 1, 0, 0, 0, 1364, 1359, 1, 0, 0, 0, 1365, 211, 1, 0, 0, 0, 1366, 1369, 3, 214, 107, 0, 1367, 1368, 5, 61, 0, 0, 1368, 1370, 3, 388, 194, 0, 1369, 1367, 1, 0, 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 213, 1, 0, 0, 0, 1371, 1372, 5, 427, 0, 0, 1372, 1373, 5, 184, 0, 0, 1373, 1374, 3, 270, 135, 0, 1374, 1375, 5, 168, 0, 0, 1375, 1377, 3, 358, 179, 0, 1376, 1378, 3, 384, 192, 0, 1377, 1376, 1, 0, 0, 0, 1377, 1378, 1, 0, 0, 0, 1378, 1379, 1, 0, 0, 0, 1379, 1380, 5, 185, 0, 0, 1380, 215, 1, 0, 0, 0, 1381, 1386, 3, 266, 133, 0, 1382, 1383, 5, 168, 0, 0, 1383, 1385, 3, 266, 133, 0, 1384, 1382, 1, 0, 0, 0, 1385, 1388, 1, 0, 0, 0, 1386, 1384, 1, 0, 0, 0, 1386, 1387, 1, 0, 0, 0, 1387, 217, 1, 0, 0, 0, 1388, 1386, 1, 0, 0, 0, 1389, 1390, 3, 270, 135, 0, 1390, 1391, 5, 170, 0, 0, 1391, 1392, 3, 240, 120, 0, 1392, 219, 1, 0, 0, 0, 1393, 1396, 3, 222, 111, 0, 1394, 1395, 5, 61, 0, 0, 1395, 1397, 3, 272, 136, 0, 1396, 1394, 1, 0, 0, 0, 1396, 1397, 1, 0, 0, 0, 1397, 221, 1, 0, 0, 0, 1398, 1399, 3, 224, 112, 0, 1399, 1400, 5, 184, 0, 0, 1400, 1401, 3, 286, 143, 0, 1401, 1402, 5, 185, 0, 0, 1402, 223, 1, 0, 0, 0, 1403, 1406, 3, 232, 116, 0, 1404, 1406, 3, 226, 113, 0, 1405, 1403, 1, 0, 0, 0, 1405, 1404, 1, 0, 0, 0, 1406, 225, 1, 0, 0, 0, 1407, 1408, 7, 13, 0, 0, 1408, 227, 1, 0, 0, 0, 1409, 1412, 3, 230, 115, 0, 1410, 1411, 5, 61, 0, 0, 1411, 1413, 3, 272, 136, 0, 1412, 1410, 1, 0, 0, 0, 1412, 1413, 1, 0, 0, 0, 1413, 229, 1, 0, 0, 0, 1414, 1415, 7, 14, 0, 0, 1415, 1416, 5, 184, 0, 0, 1416, 1417, 3, 246, 123, 0, 1417, 1418, 5, 185, 0, 0, 1418, 1442, 1, 0, 0, 0, 1419, 1422, 7, 14, 0, 0, 1420, 1421, 5, 184, 0, 0, 1421, 1423, 5, 185, 0, 0, 1422, 1420, 1, 0, 0, 0, 1422, 1423, 1, 0, 0, 0, 1423, 1442, 1, 0, 0, 0, 1424, 1425, 5, 454, 0, 0, 1425, 1426, 5, 184, 0, 0, 1426, 1427, 3, 244, 122, 0, 1427, 1428, 5, 185, 0, 0, 1428, 1442, 1, 0, 0, 0, 1429, 1430, 7, 15, 0, 0, 1430, 1431, 5, 184, 0, 0, 1431, 1432, 3, 244, 122, 0, 1432, 1433, 5, 185, 0, 0, 1433, 1442, 1, 0, 0, 0, 1434, 1442, 3, 234, 117, 0, 1435, 1442, 3, 236, 118, 0, 1436, 1437, 3, 232, 116, 0, 1437, 1438, 5, 184, 0, 0, 1438, 1439, 3, 286, 143, 0, 1439, 1440, 5, 185, 0, 0, 1440, 1442, 1, 0, 0, 0, 1441, 1414, 1, 0, 0, 0, 1441, 1419, 1, 0, 0, 0, 1441, 1424, 1, 0, 0, 0, 1441, 1429, 1, 0, 0, 0, 1441, 1434, 1, 0, 0, 0, 1441, 1435, 1, 0, 0, 0, 1441, 1436, 1, 0, 0, 0, 1442, 231, 1, 0, 0, 0, 1443, 1444, 7, 16, 0, 0, 1444, 233, 1, 0, 0, 0, 1445, 1446, 5, 222, 0, 0, 1446, 1447, 5, 184, 0, 0, 1447, 1450, 3, 270, 135, 0, 1448, 1449, 5, 168, 0, 0, 1449, 1451, 3, 364, 182, 0, 1450, 1448, 1, 0, 0, 0, 1450, 1451, 1, 0, 0, 0, 1451, 1452, 1, 0, 0, 0, 1452, 1453, 5, 185, 0, 0, 1453, 235, 1, 0, 0, 0, 1454, 1455, 7, 17, 0, 0, 1455, 1456, 5, 184, 0, 0, 1456, 1457, 3, 244, 122, 0, 1457, 1458, 5, 168, 0, 0, 1458, 1461, 3, 238, 119, 0, 1459, 1460, 5, 168, 0, 0, 1460, 1462, 3, 238, 119, 0, 1461, 1459, 1, 0, 0, 0, 1461, 1462, 1, 0, 0, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1464, 5, 185, 0, 0, 1464, 237, 1, 0, 0, 0, 1465, 1470, 3, 364, 182, 0, 1466, 1470, 3, 366, 183, 0, 1467, 1470, 3, 368, 184, 0, 1468, 1470, 3, 370, 185, 0, 1469, 1465, 1, 0, 0, 0, 1469, 1466, 1, 0, 0, 0, 1469, 1467, 1, 0, 0, 0, 1469, 1468, 1, 0, 0, 0, 1470, 239, 1, 0, 0, 0, 1471, 1472, 6, 120, -1, 0, 1472, 1473, 5, 117, 0, 0, 1473, 1476, 3, 240, 120, 5, 1474, 1476, 3, 242, 121, 0, 1475, 1471, 1, 0, 0, 0, 1475, 1474, 1, 0, 0, 0, 1476, 1488, 1, 0, 0, 0, 1477, 1478, 10, 4, 0, 0, 1478, 1479, 5, 119, 0, 0, 1479, 1487, 3, 240, 120, 5, 1480, 1481, 10, 3, 0, 0, 1481, 1482, 5, 120, 0, 0, 1482, 1487, 3, 240, 120, 4, 1483, 1484, 10, 2, 0, 0, 1484, 1485, 5, 118, 0, 0, 1485, 1487, 3, 240, 120, 3, 1486, 1477, 1, 0, 0, 0, 1486, 1480, 1, 0, 0, 0, 1486, 1483, 1, 0, 0, 0, 1487, 1490, 1, 0, 0, 0, 1488, 1486, 1, 0, 0, 0, 1488, 1489, 1, 0, 0, 0, 1489, 241, 1, 0, 0, 0, 1490, 1488, 1, 0, 0, 0, 1491, 1492, 6, 121, -1, 0, 1492, 1495, 3, 244, 122, 0, 1493, 1495, 3, 254, 127, 0, 1494, 1491, 1, 0, 0, 0, 1494, 1493, 1, 0, 0, 0, 1495, 1517, 1, 0, 0, 0, 1496, 1497, 10, 3, 0, 0, 1497, 1498, 3, 352, 176, 0, 1498, 1499, 3, 242, 121, 4, 1499, 1516, 1, 0, 0, 0, 1500, 1502, 10, 1, 0, 0, 1501, 1503, 5, 117, 0, 0, 1502, 1501, 1, 0, 0, 0, 1502, 1503, 1, 0, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 1505, 5, 362, 0, 0, 1505, 1506, 3, 242, 121, 0, 1506, 1507, 5, 119, 0, 0, 1507, 1508, 3, 242, 121, 2, 1508, 1516, 1, 0, 0, 0, 1509, 1511, 10, 2, 0, 0, 1510, 1512, 5, 117, 0, 0, 1511, 1510, 1, 0, 0, 0, 1511, 1512, 1, 0, 0, 0, 1512, 1513, 1, 0, 0, 0, 1513, 1514, 5, 114, 0, 0, 1514, 1516, 3, 386, 193, 0, 1515, 1496, 1, 0, 0, 0, 1515, 1500, 1, 0, 0, 0, 1515, 1509, 1, 0, 0, 0, 1516, 1519, 1, 0, 0, 0, 1517, 1515, 1, 0, 0, 0, 1517, 1518, 1, 0, 0, 0, 1518, 243, 1, 0, 0, 0, 1519, 1517, 1, 0, 0, 0, 1520, 1521, 6, 122, -1, 0, 1521, 1557, 3, 358, 179, 0, 1522, 1557, 3, 248, 124, 0, 1523, 1557, 3, 296, 148, 0, 1524, 1525, 5, 186, 0, 0, 1525, 1526, 3, 10, 5, 0, 1526, 1527, 5, 187, 0, 0, 1527, 1557, 1, 0, 0, 0, 1528, 1529, 5, 184, 0, 0, 1529, 1534, 3, 244, 122, 0, 1530, 1531, 5, 168, 0, 0, 1531, 1533, 3, 244, 122, 0, 1532, 1530, 1, 0, 0, 0, 1533, 1536, 1, 0, 0, 0, 1534, 1532, 1, 0, 0, 0, 1534, 1535, 1, 0, 0, 0, 1535, 1537, 1, 0, 0, 0, 1536, 1534, 1, 0, 0, 0, 1537, 1539, 5, 185, 0, 0, 1538, 1540, 5, 117, 0, 0, 1539, 1538, 1, 0, 0, 0, 1539, 1540, 1, 0, 0, 0, 1540, 1541, 1, 0, 0, 0, 1541, 1542, 5, 114, 0, 0, 1542, 1543, 5, 186, 0, 0, 1543, 1544, 3, 10, 5, 0, 1544, 1545, 5, 187, 0, 0, 1545, 1557, 1, 0, 0, 0, 1546, 1547, 5, 115, 0, 0, 1547, 1548, 5, 186, 0, 0, 1548, 1549, 3, 10, 5, 0, 1549, 1550, 5, 187, 0, 0, 1550, 1557, 1, 0, 0, 0, 1551, 1557, 3, 270, 135, 0, 1552, 1553, 5, 184, 0, 0, 1553, 1554, 3, 240, 120, 0, 1554, 1555, 5, 185, 0, 0, 1555, 1557, 1, 0, 0, 0, 1556, 1520, 1, 0, 0, 0, 1556, 1522, 1, 0, 0, 0, 1556, 1523, 1, 0, 0, 0, 1556, 1524, 1, 0, 0, 0, 1556, 1528, 1, 0, 0, 0, 1556, 1546, 1, 0, 0, 0, 1556, 1551, 1, 0, 0, 0, 1556, 1552, 1, 0, 0, 0, 1557, 1575, 1, 0, 0, 0, 1558, 1559, 10, 11, 0, 0, 1559, 1560, 7, 18, 0, 0, 1560, 1574, 3, 244, 122, 12, 1561, 1562, 10, 10, 0, 0, 1562, 1563, 7, 2, 0, 0, 1563, 1574, 3, 244, 122, 11, 1564, 1566, 10, 5, 0, 0, 1565, 1567, 5, 117, 0, 0, 1566, 1565, 1, 0, 0, 0, 1566, 1567, 1, 0, 0, 0, 1567, 1568, 1, 0, 0, 0, 1568, 1569, 5, 114, 0, 0, 1569, 1570, 5, 186, 0, 0, 1570, 1571, 3, 10, 5, 0, 1571, 1572, 5, 187, 0, 0, 1572, 1574, 1, 0, 0, 0, 1573, 1558, 1, 0, 0, 0, 1573, 1561, 1, 0, 0, 0, 1573, 1564, 1, 0, 0, 0, 1574, 1577, 1, 0, 0, 0, 1575, 1573, 1, 0, 0, 0, 1575, 1576, 1, 0, 0, 0, 1576, 245, 1, 0, 0, 0, 1577, 1575, 1, 0, 0, 0, 1578, 1579, 5, 16, 0, 0, 1579, 1580, 5, 184, 0, 0, 1580, 1581, 3, 240, 120, 0, 1581, 1582, 5, 185, 0, 0, 1582, 247, 1, 0, 0, 0, 1583, 1591, 3, 278, 139, 0, 1584, 1591, 3, 280, 140, 0, 1585, 1591, 3, 250, 125, 0, 1586, 1591, 3, 252, 126, 0, 1587, 1591, 3, 338, 169, 0, 1588, 1591, 3, 330, 165, 0, 1589, 1591, 3, 326, 163, 0, 1590, 1583, 1, 0, 0, 0, 1590, 1584, 1, 0, 0, 0, 1590, 1585, 1, 0, 0, 0, 1590, 1586, 1, 0, 0, 0, 1590, 1587, 1, 0, 0, 0, 1590, 1588, 1, 0, 0, 0, 1590, 1589, 1, 0, 0, 0, 1591, 249, 1, 0, 0, 0, 1592, 1593, 3, 350, 175, 0, 1593, 1594, 5, 184, 0, 0, 1594, 1595, 3, 290, 145, 0, 1595, 1596, 5, 114, 0, 0, 1596, 1597, 3, 290, 145, 0, 1597, 1598, 5, 185, 0, 0, 1598, 251, 1, 0, 0, 0, 1599, 1600, 5, 112, 0, 0, 1600, 1601, 5, 184, 0, 0, 1601, 1602, 3, 240, 120, 0, 1602, 1603, 5, 168, 0, 0, 1603, 1611, 3, 244, 122, 0, 1604, 1605, 5, 168, 0, 0, 1605, 1606, 3, 240, 120, 0, 1606, 1607, 5, 168, 0, 0, 1607, 1608, 3, 244, 122, 0, 1608, 1610, 1, 0, 0, 0, 1609, 1604, 1, 0, 0, 0, 1610, 1613, 1, 0, 0, 0, 1611, 1609, 1, 0, 0, 0, 1611, 1612, 1, 0, 0, 0, 1612, 1616, 1, 0, 0, 0, 1613, 1611, 1, 0, 0, 0, 1614, 1615, 5, 113, 0, 0, 1615, 1617, 3, 244, 122, 0, 1616, 1614, 1, 0, 0, 0, 1616, 1617, 1, 0, 0, 0, 1617, 1618, 1, 0, 0, 0, 1618, 1619, 5, 185, 0, 0, 1619, 253, 1, 0, 0, 0, 1620, 1623, 3, 256, 128, 0, 1621, 1623, 3, 258, 129, 0, 1622, 1620, 1, 0, 0, 0, 1622, 1621, 1, 0, 0, 0, 1623, 255, 1, 0, 0, 0, 1624, 1625, 3, 354, 177, 0, 1625, 1626, 5, 184, 0, 0, 1626, 1627, 3, 306, 153, 0, 1627, 1628, 5, 168, 0, 0, 1628, 1633, 3, 308, 154, 0, 1629, 1630, 5, 168, 0, 0, 1630, 1632, 3, 298, 149, 0, 1631, 1629, 1, 0, 0, 0, 1632, 1635, 1, 0, 0, 0, 1633, 1631, 1, 0, 0, 0, 1633, 1634, 1, 0, 0, 0, 1634, 1636, 1, 0, 0, 0, 1635, 1633, 1, 0, 0, 0, 1636, 1637, 5, 185, 0, 0, 1637, 257, 1, 0, 0, 0, 1638, 1639, 3, 356, 178, 0, 1639, 1652, 5, 184, 0, 0, 1640, 1641, 5, 186, 0, 0, 1641, 1646, 3, 302, 151, 0, 1642, 1643, 5, 168, 0, 0, 1643, 1645, 3, 302, 151, 0, 1644, 1642, 1, 0, 0, 0, 1645, 1648, 1, 0, 0, 0, 1646, 1644, 1, 0, 0, 0, 1646, 1647, 1, 0, 0, 0, 1647, 1649, 1, 0, 0, 0, 1648, 1646, 1, 0, 0, 0, 1649, 1650, 5, 187, 0, 0, 1650, 1651, 5, 168, 0, 0, 1651, 1653, 1, 0, 0, 0, 1652, 1640, 1, 0, 0, 0, 1652, 1653, 1, 0, 0, 0, 1653, 1654, 1, 0, 0, 0, 1654, 1659, 3, 308, 154, 0, 1655, 1656, 5, 168, 0, 0, 1656, 1658, 3, 298, 149, 0, 1657, 1655, 1, 0, 0, 0, 1658, 1661, 1, 0, 0, 0, 1659, 1657, 1, 0, 0, 0, 1659, 1660, 1, 0, 0, 0, 1660, 1662, 1, 0, 0, 0, 1661, 1659, 1, 0, 0, 0, 1662, 1663, 5, 185, 0, 0, 1663, 259, 1, 0, 0, 0, 1664, 1667, 3, 390, 195, 0, 1665, 1667, 5, 461, 0, 0, 1666, 1664, 1, 0, 0, 0, 1666, 1665, 1, 0, 0, 0, 1667, 261, 1, 0, 0, 0, 1668, 1669, 3, 388, 194, 0, 1669, 1670, 5, 184, 0, 0, 1670, 1671, 3, 288, 144, 0, 1671, 1672, 5, 185, 0, 0, 1672, 263, 1, 0, 0, 0, 1673, 1680, 3, 270, 135, 0, 1674, 1676, 5, 168, 0, 0, 1675, 1674, 1, 0, 0, 0, 1675, 1676, 1, 0, 0, 0, 1676, 1677, 1, 0, 0, 0, 1677, 1679, 3, 270, 135, 0, 1678, 1675, 1, 0, 0, 0, 1679, 1682, 1, 0, 0, 0, 1680, 1678, 1, 0, 0, 0, 1680, 1681, 1, 0, 0, 0, 1681, 265, 1, 0, 0, 0, 1682, 1680, 1, 0, 0, 0, 1683, 1685, 7, 2, 0, 0, 1684, 1683, 1, 0, 0, 0, 1684, 1685, 1, 0, 0, 0, 1685, 1686, 1, 0, 0, 0, 1686, 1687, 3, 268, 134, 0, 1687, 267, 1, 0, 0, 0, 1688, 1710, 3, 270, 135, 0, 1689, 1690, 5, 78, 0, 0, 1690, 1691, 5, 184, 0, 0, 1691, 1692, 3, 270, 135, 0, 1692, 1693, 5, 185, 0, 0, 1693, 1710, 1, 0, 0, 0, 1694, 1695, 5, 79, 0, 0, 1695, 1696, 5, 184, 0, 0, 1696, 1697, 3, 270, 135, 0, 1697, 1698, 5, 185, 0, 0, 1698, 1710, 1, 0, 0, 0, 1699, 1700, 5, 166, 0, 0, 1700, 1701, 5, 184, 0, 0, 1701, 1702, 3, 270, 135, 0, 1702, 1703, 5, 185, 0, 0, 1703, 1710, 1, 0, 0, 0, 1704, 1705, 5, 80, 0, 0, 1705, 1706, 5, 184, 0, 0, 1706, 1707, 3, 270, 135, 0, 1707, 1708, 5, 185, 0, 0, 1708, 1710, 1, 0, 0, 0, 1709, 1688, 1, 0, 0, 0, 1709, 1689, 1, 0, 0, 0, 1709, 1694, 1, 0, 0, 0, 1709, 1699, 1, 0, 0, 0, 1709, 1704, 1, 0, 0, 0, 1710, 269, 1, 0, 0, 0, 1711, 1712, 3, 388, 194, 0, 1712, 271, 1, 0, 0, 0, 1713, 1714, 3, 392, 196, 0, 1714, 273, 1, 0, 0, 0, 1715, 1718, 3, 392, 196, 0, 1716, 1718, 5, 179, 0, 0, 1717, 1715, 1, 0, 0, 0, 1717, 1716, 1, 0, 0, 0, 1718, 275, 1, 0, 0, 0, 1719, 1722, 3, 392, 196, 0, 1720, 1722, 5, 179, 0, 0, 1721, 1719, 1, 0, 0, 0, 1721, 1720, 1, 0, 0, 0, 1722, 277, 1, 0, 0, 0, 1723, 1724, 3, 284, 142, 0, 1724, 1725, 5, 184, 0, 0, 1725, 1726, 3, 286, 143, 0, 1726, 1727, 5, 185, 0, 0, 1727, 279, 1, 0, 0, 0, 1728, 1729, 5, 357, 0, 0, 1729, 1730, 5, 184, 0, 0, 1730, 1731, 3, 240, 120, 0, 1731, 1732, 5, 61, 0, 0, 1732, 1733, 3, 282, 141, 0, 1733, 1734, 5, 185, 0, 0, 1734, 281, 1, 0, 0, 0, 1735, 1748, 5, 294, 0, 0, 1736, 1748, 5, 323, 0, 0, 1737, 1748, 5, 325, 0, 0, 1738, 1748, 5, 159, 0, 0, 1739, 1748, 5, 160, 0, 0, 1740, 1748, 5, 161, 0, 0, 1741, 1748, 5, 162, 0, 0, 1742, 1748, 5, 163, 0, 0, 1743, 1748, 5, 164, 0, 0, 1744, 1748, 5, 165, 0, 0, 1745, 1748, 5, 166, 0, 0, 1746, 1748, 5, 374, 0, 0, 1747, 1735, 1, 0, 0, 0, 1747, 1736, 1, 0, 0, 0, 1747, 1737, 1, 0, 0, 0, 1747, 1738, 1, 0, 0, 0, 1747, 1739, 1, 0, 0, 0, 1747, 1740, 1, 0, 0, 0, 1747, 1741, 1, 0, 0, 0, 1747, 1742, 1, 0, 0, 0, 1747, 1743, 1, 0, 0, 0, 1747, 1744, 1, 0, 0, 0, 1747, 1745, 1, 0, 0, 0, 1747, 1746, 1, 0, 0, 0, 1748, 283, 1, 0, 0, 0, 1749, 1761, 3, 312, 156, 0, 1750, 1761, 3, 324, 162, 0, 1751, 1761, 3, 348, 174, 0, 1752, 1761, 3, 342, 171, 0, 1753, 1761, 3, 344, 172, 0, 1754, 1761, 3, 346, 173, 0, 1755, 1761, 3, 350, 175, 0, 1756, 1761, 3, 322, 161, 0, 1757, 1761, 3, 320, 160, 0, 1758, 1761, 3, 314, 157, 0, 1759, 1761, 3, 316, 158, 0, 1760, 1749, 1, 0, 0, 0, 1760, 1750, 1, 0, 0, 0, 1760, 1751, 1, 0, 0, 0, 1760, 1752, 1, 0, 0, 0, 1760, 1753, 1, 0, 0, 0, 1760, 1754, 1, 0, 0, 0, 1760, 1755, 1, 0, 0, 0, 1760, 1756, 1, 0, 0, 0, 1760, 1757, 1, 0, 0, 0, 1760, 1758, 1, 0, 0, 0, 1760, 1759, 1, 0, 0, 0, 1761, 285, 1, 0, 0, 0, 1762, 1767, 3, 290, 145, 0, 1763, 1764, 5, 168, 0, 0, 1764, 1766, 3, 290, 145, 0, 1765, 1763, 1, 0, 0, 0, 1766, 1769, 1, 0, 0, 0, 1767, 1765, 1, 0, 0, 0, 1767, 1768, 1, 0, 0, 0, 1768, 1771, 1, 0, 0, 0, 1769, 1767, 1, 0, 0, 0, 1770, 1762, 1, 0, 0, 0, 1770, 1771, 1, 0, 0, 0, 1771, 287, 1, 0, 0, 0, 1772, 1777, 3, 292, 146, 0, 1773, 1774, 5, 168, 0, 0, 1774, 1776, 3, 292, 146, 0, 1775, 1773, 1, 0, 0, 0, 1776, 1779, 1, 0, 0, 0, 1777, 1775, 1, 0, 0, 0, 1777, 1778, 1, 0, 0, 0, 1778, 1781, 1, 0, 0, 0, 1779, 1777, 1, 0, 0, 0, 1780, 1772, 1, 0, 0, 0, 1780, 1781, 1, 0, 0, 0, 1781, 289, 1, 0, 0, 0, 1782, 1783, 3, 294, 147, 0, 1783, 291, 1, 0, 0, 0, 1784, 1785, 3, 396, 198, 0, 1785, 1786, 5, 170, 0, 0, 1786, 1788, 1, 0, 0, 0, 1787, 1784, 1, 0, 0, 0, 1787, 1788, 1, 0, 0, 0, 1788, 1789, 1, 0, 0, 0, 1789, 1790, 3, 294, 147, 0, 1790, 293, 1, 0, 0, 0, 1791, 1794, 3, 296, 148, 0, 1792, 1794, 3, 240, 120, 0, 1793, 1791, 1, 0, 0, 0, 1793, 1792, 1, 0, 0, 0, 1794, 295, 1, 0, 0, 0, 1795, 1796, 3, 396, 198, 0, 1796, 1797, 5, 193, 0, 0, 1797, 1798, 3, 240, 120, 0, 1798, 1812, 1, 0, 0, 0, 1799, 1800, 5, 184, 0, 0, 1800, 1803, 3, 396, 198, 0, 1801, 1802, 5, 168, 0, 0, 1802, 1804, 3, 396, 198, 0, 1803, 1801, 1, 0, 0, 0, 1804, 1805, 1, 0, 0, 0, 1805, 1803, 1, 0, 0, 0, 1805, 1806, 1, 0, 0, 0, 1806, 1807, 1, 0, 0, 0, 1807, 1808, 5, 185, 0, 0, 1808, 1809, 5, 193, 0, 0, 1809, 1810, 3, 240, 120, 0, 1810, 1812, 1, 0, 0, 0, 1811, 1795, 1, 0, 0, 0, 1811, 1799, 1, 0, 0, 0, 1812, 297, 1, 0, 0, 0, 1813, 1814, 3, 300, 150, 0, 1814, 1815, 5, 170, 0, 0, 1815, 1816, 3, 310, 155, 0, 1816, 299, 1, 0, 0, 0, 1817, 1818, 7, 19, 0, 0, 1818, 301, 1, 0, 0, 0, 1819, 1828, 3, 306, 153, 0, 1820, 1821, 3, 306, 153, 0, 1821, 1822, 3, 304, 152, 0, 1822, 1828, 1, 0, 0, 0, 1823, 1824, 3, 306, 153, 0, 1824, 1825, 5, 196, 0, 0, 1825, 1826, 3, 304, 152, 0, 1826, 1828, 1, 0, 0, 0, 1827, 1819, 1, 0, 0, 0, 1827, 1820, 1, 0, 0, 0, 1827, 1823, 1, 0, 0, 0, 1828, 303, 1, 0, 0, 0, 1829, 1834, 3, 364, 182, 0, 1830, 1834, 3, 366, 183, 0, 1831, 1834, 3, 368, 184, 0, 1832, 1834, 3, 370, 185, 0, 1833, 1829, 1, 0, 0, 0, 1833, 1830, 1, 0, 0, 0, 1833, 1831, 1, 0, 0, 0, 1833, 1832, 1, 0, 0, 0, 1834, 305, 1, 0, 0, 0, 1835, 1838, 3, 388, 194, 0, 1836, 1838, 3, 362, 181, 0, 1837, 1835, 1, 0, 0, 0, 1837, 1836, 1, 0, 0, 0, 1838, 307, 1, 0, 0, 0, 1839, 1840, 3, 310, 155, 0, 1840, 309, 1, 0, 0, 0, 1841, 1844, 3, 388, 194, 0, 1842, 1844, 3, 358, 179, 0, 1843, 1841, 1, 0, 0, 0, 1843, 1842, 1, 0, 0, 0, 1844, 311, 1, 0, 0, 0, 1845, 1878, 5, 246, 0, 0, 1846, 1878, 5, 242, 0, 0, 1847, 1878, 5, 243, 0, 0, 1848, 1878, 5, 244, 0, 0, 1849, 1878, 5, 245, 0, 0, 1850, 1878, 5, 247, 0, 0, 1851, 1878, 5, 248, 0, 0, 1852, 1878, 5, 249, 0, 0, 1853, 1878, 5, 250, 0, 0, 1854, 1878, 5, 251, 0, 0, 1855, 1878, 5, 252, 0, 0, 1856, 1878, 5, 253, 0, 0, 1857, 1878, 5, 254, 0, 0, 1858, 1878, 5, 255, 0, 0, 1859, 1878, 5, 256, 0, 0, 1860, 1878, 5, 257, 0, 0, 1861, 1878, 5, 258, 0, 0, 1862, 1878, 5, 259, 0, 0, 1863, 1878, 5, 260, 0, 0, 1864, 1878, 5, 261, 0, 0, 1865, 1878, 5, 263, 0, 0, 1866, 1878, 5, 264, 0, 0, 1867, 1878, 5, 265, 0, 0, 1868, 1878, 5, 266, 0, 0, 1869, 1878, 5, 267, 0, 0, 1870, 1878, 5, 268, 0, 0, 1871, 1878, 5, 269, 0, 0, 1872, 1878, 5, 270, 0, 0, 1873, 1878, 5, 271, 0, 0, 1874, 1878, 5, 211, 0, 0, 1875, 1878, 5, 197, 0, 0, 1876, 1878, 3, 318, 159, 0, 1877, 1845, 1, 0, 0, 0, 1877, 1846, 1, 0, 0, 0, 1877, 1847, 1, 0, 0, 0, 1877, 1848, 1, 0, 0, 0, 1877, 1849, 1, 0, 0, 0, 1877, 1850, 1, 0, 0, 0, 1877, 1851, 1, 0, 0, 0, 1877, 1852, 1, 0, 0, 0, 1877, 1853, 1, 0, 0, 0, 1877, 1854, 1, 0, 0, 0, 1877, 1855, 1, 0, 0, 0, 1877, 1856, 1, 0, 0, 0, 1877, 1857, 1, 0, 0, 0, 1877, 1858, 1, 0, 0, 0, 1877, 1859, 1, 0, 0, 0, 1877, 1860, 1, 0, 0, 0, 1877, 1861, 1, 0, 0, 0, 1877, 1862, 1, 0, 0, 0, 1877, 1863, 1, 0, 0, 0, 1877, 1864, 1, 0, 0, 0, 1877, 1865, 1, 0, 0, 0, 1877, 1866, 1, 0, 0, 0, 1877, 1867, 1, 0, 0, 0, 1877, 1868, 1, 0, 0, 0, 1877, 1869, 1, 0, 0, 0, 1877, 1870, 1, 0, 0, 0, 1877, 1871, 1, 0, 0, 0, 1877, 1872, 1, 0, 0, 0, 1877, 1873, 1, 0, 0, 0, 1877, 1874, 1, 0, 0, 0, 1877, 1875, 1, 0, 0, 0, 1877, 1876, 1, 0, 0, 0, 1878, 313, 1, 0, 0, 0, 1879, 1880, 5, 116, 0, 0, 1880, 315, 1, 0, 0, 0, 1881, 1882, 7, 20, 0, 0, 1882, 317, 1, 0, 0, 0, 1883, 1884, 7, 21, 0, 0, 1884, 319, 1, 0, 0, 0, 1885, 1886, 7, 22, 0, 0, 1886, 321, 1, 0, 0, 0, 1887, 1888, 7, 23, 0, 0, 1888, 323, 1, 0, 0, 0, 1889, 1890, 7, 24, 0, 0, 1890, 325, 1, 0, 0, 0, 1891, 1892, 5, 308, 0, 0, 1892, 1893, 5, 184, 0, 0, 1893, 1894, 3, 328, 164, 0, 1894, 1895, 5, 168, 0, 0, 1895, 1896, 3, 290, 145, 0, 1896, 1897, 5, 185, 0, 0, 1897, 327, 1, 0, 0, 0, 1898, 1899, 7, 25, 0, 0, 1899, 329, 1, 0, 0, 0, 1900, 1901, 5, 305, 0, 0, 1901, 1902, 5, 184, 0, 0, 1902, 1903, 3, 336, 168, 0, 1903, 1904, 5, 6, 0, 0, 1904, 1905, 3, 290, 145, 0, 1905, 1906, 5, 185, 0, 0, 1906, 331, 1, 0, 0, 0, 1907, 1908, 7, 26, 0, 0, 1908, 333, 1, 0, 0, 0, 1909, 1910, 7, 27, 0, 0, 1910, 335, 1, 0, 0, 0, 1911, 1914, 3, 332, 166, 0, 1912, 1914, 3, 334, 167, 0, 1913, 1911, 1, 0, 0, 0, 1913, 1912, 1, 0, 0, 0, 1914, 337, 1, 0, 0, 0, 1915, 1916, 3, 340, 170, 0, 1916, 1917, 5, 184, 0, 0, 1917, 1918, 3, 332, 166, 0, 1918, 1919, 5, 168, 0, 0, 1919, 1920, 3, 290, 145, 0, 1920, 1921, 5, 168, 0, 0, 1921, 1922, 3, 290, 145, 0, 1922, 1923, 5, 185, 0, 0, 1923, 339, 1, 0, 0, 0, 1924, 1925, 7, 28, 0, 0, 1925, 341, 1, 0, 0, 0, 1926, 1927, 7, 29, 0, 0, 1927, 343, 1, 0, 0, 0, 1928, 1929, 7, 30, 0, 0, 1929, 345, 1, 0, 0, 0, 1930, 1931, 5, 387, 0, 0, 1931, 347, 1, 0, 0, 0, 1932, 1933, 7, 31, 0, 0, 1933, 349, 1, 0, 0, 0, 1934, 1935, 5, 262, 0, 0, 1935, 351, 1, 0, 0, 0, 1936, 1937, 7, 32, 0, 0, 1937, 353, 1, 0, 0, 0, 1938, 1939, 7, 33, 0, 0, 1939, 355, 1, 0, 0, 0, 1940, 1941, 7, 34, 0, 0, 1941, 357, 1, 0, 0, 0, 1942, 1951, 3, 360, 180, 0, 1943, 1951, 3, 362, 181, 0, 1944, 1951, 3, 364, 182, 0, 1945, 1951, 3, 366, 183, 0, 1946, 1951, 3, 368, 184, 0, 1947, 1951, 3, 370, 185, 0, 1948, 1951, 3, 372, 186, 0, 1949, 1951, 3, 374, 187, 0, 1950, 1942, 1, 0, 0, 0, 1950, 1943, 1, 0, 0, 0, 1950, 1944, 1, 0, 0, 0, 1950, 1945, 1, 0, 0, 0, 1950, 1946, 1, 0, 0, 0, 1950, 1947, 1, 0, 0, 0, 1950, 1948, 1, 0, 0, 0, 1950, 1949, 1, 0, 0, 0, 1951, 359, 1, 0, 0, 0, 1952, 1953, 5, 138, 0, 0, 1953, 1954, 3, 244, 122, 0, 1954, 1955, 3, 382, 191, 0, 1955, 361, 1, 0, 0, 0, 1956, 1957, 7, 35, 0, 0, 1957, 363, 1, 0, 0, 0, 1958, 1960, 7, 2, 0, 0, 1959, 1958, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1961, 1, 0, 0, 0, 1961, 1962, 5, 457, 0, 0, 1962, 365, 1, 0, 0, 0, 1963, 1965, 7, 2, 0, 0, 1964, 1963, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1966, 1, 0, 0, 0, 1966, 1967, 5, 458, 0, 0, 1967, 367, 1, 0, 0, 0, 1968, 1970, 7, 2, 0, 0, 1969, 1968, 1, 0, 0, 0, 1969, 1970, 1, 0, 0, 0, 1970, 1971, 1, 0, 0, 0, 1971, 1972, 5, 460, 0, 0, 1972, 369, 1, 0, 0, 0, 1973, 1975, 7, 2, 0, 0, 1974, 1973, 1, 0, 0, 0, 1974, 1975, 1, 0, 0, 0, 1975, 1976, 1, 0, 0, 0, 1976, 1977, 5, 459, 0, 0, 1977, 371, 1, 0, 0, 0, 1978, 1979, 7, 36, 0, 0, 1979, 373, 1, 0, 0, 0, 1980, 1984, 3, 376, 188, 0, 1981, 1984, 3, 378, 189, 0, 1982, 1984, 3, 380, 190, 0, 1983, 1980, 1, 0, 0, 0, 1983, 1981, 1, 0, 0, 0, 1983, 1982, 1, 0, 0, 0, 1984, 375, 1, 0, 0, 0, 1985, 1986, 5, 294, 0, 0, 1986, 1987, 3, 362, 181, 0, 1987, 377, 1, 0, 0, 0, 1988, 1989, 5, 323, 0, 0, 1989, 1990, 3, 362, 181, 0, 1990, 379, 1, 0, 0, 0, 1991, 1992, 5, 325, 0, 0, 1992, 1993, 3, 362, 181, 0, 1993, 381, 1, 0, 0, 0, 1994, 1995, 7, 37, 0, 0, 1995, 383, 1, 0, 0, 0, 1996, 1997, 7, 38, 0, 0, 1997, 385, 1, 0, 0, 0, 1998, 1999, 5, 184, 0, 0, 1999, 2004, 3, 358, 179, 0, 2000, 2001, 5, 168, 0, 0, 2001, 2003, 3, 358, 179, 0, 2002, 2000, 1, 0, 0, 0, 2003, 2006, 1, 0, 0, 0, 2004, 2002, 1, 0, 0, 0, 2004, 2005, 1, 0, 0, 0, 2005, 2007, 1, 0, 0, 0, 2006, 2004, 1, 0, 0, 0, 2007, 2008, 5, 185, 0, 0, 2008, 387, 1, 0, 0, 0, 2009, 2014, 3, 396, 198, 0, 2010, 2011, 5, 169, 0, 0, 2011, 2013, 3, 396, 198, 0, 2012, 2010, 1, 0, 0, 0, 2013, 2016, 1, 0, 0, 0, 2014, 2012, 1, 0, 0, 0, 2014, 2015, 1, 0, 0, 0, 2015, 389, 1, 0, 0, 0, 2016, 2014, 1, 0, 0, 0, 2017, 2022, 3, 398, 199, 0, 2018, 2019, 5, 169, 0, 0, 2019, 2021, 3, 396, 198, 0, 2020, 2018, 1, 0, 0, 0, 2021, 2024, 1, 0, 0, 0, 2022, 2020, 1, 0, 0, 0, 2022, 2023, 1, 0, 0, 0, 2023, 391, 1, 0, 0, 0, 2024, 2022, 1, 0, 0, 0, 2025, 2030, 3, 400, 200, 0, 2026, 2027, 5, 169, 0, 0, 2027, 2029, 3, 400, 200, 0, 2028, 2026, 1, 0, 0, 0, 2029, 2032, 1, 0, 0, 0, 2030, 2028, 1, 0, 0, 0, 2030, 2031, 1, 0, 0, 0, 2031, 393, 1, 0, 0, 0, 2032, 2030, 1, 0, 0, 0, 2033, 2038, 3, 388, 194, 0, 2034, 2035, 5, 168, 0, 0, 2035, 2037, 3, 388, 194, 0, 2036, 2034, 1, 0, 0, 0, 2037, 2040, 1, 0, 0, 0, 2038, 2036, 1, 0, 0, 0, 2038, 2039, 1, 0, 0, 0, 2039, 2053, 1, 0, 0, 0, 2040, 2038, 1, 0, 0, 0, 2041, 2042, 5, 184, 0, 0, 2042, 2047, 3, 388, 194, 0, 2043, 2044, 5, 168, 0, 0, 2044, 2046, 3, 388, 194, 0, 2045, 2043, 1, 0, 0, 0, 2046, 2049, 1, 0, 0, 0, 2047, 2045, 1, 0, 0, 0, 2047, 2048, 1, 0, 0, 0, 2048, 2050, 1, 0, 0, 0, 2049, 2047, 1, 0, 0, 0, 2050, 2051, 5, 185, 0, 0, 2051, 2053, 1, 0, 0, 0, 2052, 2033, 1, 0, 0, 0, 2052, 2041, 1, 0, 0, 0, 2053, 395, 1, 0, 0, 0, 2054, 2056, 5, 169, 0, 0, 2055, 2054, 1, 0, 0, 0, 2055, 2056, 1, 0, 0, 0, 2056, 2057, 1, 0, 0, 0, 2057, 2065, 5, 455, 0, 0, 2058, 2059, 5, 192, 0, 0, 2059, 2060, 3, 396, 198, 0, 2060, 2061, 5, 192, 0, 0, 2061, 2065, 1, 0, 0, 0, 2062, 2065, 5, 464, 0, 0, 2063, 2065, 3, 402, 201, 0, 2064, 2055, 1, 0, 0, 0, 2064, 2058, 1, 0, 0, 0, 2064, 2062, 1, 0, 0, 0, 2064, 2063, 1, 0, 0, 0, 2065, 397, 1, 0, 0, 0, 2066, 2068, 5, 456, 0, 0, 2067, 2066, 1, 0, 0, 0, 2067, 2068, 1, 0, 0, 0, 2068, 2069, 1, 0, 0, 0, 2069, 2070, 3, 396, 198, 0, 2070, 399, 1, 0, 0, 0, 2071, 2076, 3, 396, 198, 0, 2072, 2073, 5, 181, 0, 0, 2073, 2075, 3, 396, 198, 0, 2074, 2072, 1, 0, 0, 0, 2075, 2078, 1, 0, 0, 0, 2076, 2074, 1, 0, 0, 0, 2076, 2077, 1, 0, 0, 0, 2077, 2080, 1, 0, 0, 0, 2078, 2076, 1, 0, 0, 0, 2079, 2081, 5, 181, 0, 0, 2080, 2079, 1, 0, 0, 0, 2080, 2081, 1, 0, 0, 0, 2081, 2095, 1, 0, 0, 0, 2082, 2083, 5, 190, 0, 0, 2083, 2084, 3, 400, 200, 0, 2084, 2085, 5, 190, 0, 0, 2085, 2095, 1, 0, 0, 0, 2086, 2087, 5, 191, 0, 0, 2087, 2088, 3, 400, 200, 0, 2088, 2089, 5, 191, 0, 0, 2089, 2095, 1, 0, 0, 0, 2090, 2091, 5, 192, 0, 0, 2091, 2092, 3, 400, 200, 0, 2092, 2093, 5, 192, 0, 0, 2093, 2095, 1, 0, 0, 0, 2094, 2071, 1, 0, 0, 0, 2094, 2082, 1, 0, 0, 0, 2094, 2086, 1, 0, 0, 0, 2094, 2090, 1, 0, 0, 0, 2095, 401, 1, 0, 0, 0, 2096, 2099, 3, 404, 202, 0, 2097, 2099, 5, 114, 0, 0, 2098, 2096, 1, 0, 0, 0, 2098, 2097, 1, 0, 0, 0, 2099, 403, 1, 0, 0, 0, 2100, 2213, 5, 67, 0, 0, 2101, 2213, 3, 384, 192, 0, 2102, 2213, 5, 427, 0, 0, 2103, 2213, 3, 284, 142, 0, 2104, 2213, 3, 320, 160, 0, 2105, 2213, 3, 300, 150, 0, 2106, 2213, 3, 382, 191, 0, 2107, 2213, 3, 152, 76, 0, 2108, 2213, 3, 354, 177, 0, 2109, 2213, 3, 356, 178, 0, 2110, 2213, 3, 16, 8, 0, 2111, 2213, 3, 316, 158, 0, 2112, 2213, 5, 23, 0, 0, 2113, 2213, 3, 8, 4, 0, 2114, 2213, 5, 123, 0, 0, 2115, 2213, 5, 112, 0, 0, 2116, 2213, 5, 113, 0, 0, 2117, 2213, 5, 193, 0, 0, 2118, 2213, 5, 362, 0, 0, 2119, 2213, 5, 115, 0, 0, 2120, 2213, 5, 63, 0, 0, 2121, 2213, 5, 64, 0, 0, 2122, 2213, 5, 65, 0, 0, 2123, 2213, 5, 66, 0, 0, 2124, 2213, 5, 68, 0, 0, 2125, 2213, 5, 69, 0, 0, 2126, 2213, 5, 6, 0, 0, 2127, 2213, 5, 28, 0, 0, 2128, 2213, 5, 30, 0, 0, 2129, 2213, 5, 44, 0, 0, 2130, 2213, 5, 42, 0, 0, 2131, 2213, 5, 43, 0, 0, 2132, 2213, 5, 45, 0, 0, 2133, 2213, 5, 48, 0, 0, 2134, 2213, 5, 71, 0, 0, 2135, 2213, 5, 23, 0, 0, 2136, 2213, 5, 26, 0, 0, 2137, 2213, 5, 70, 0, 0, 2138, 2213, 5, 357, 0, 0, 2139, 2213, 5, 308, 0, 0, 2140, 2213, 5, 305, 0, 0, 2141, 2213, 5, 138, 0, 0, 2142, 2213, 5, 177, 0, 0, 2143, 2213, 5, 178, 0, 0, 2144, 2213, 5, 76, 0, 0, 2145, 2213, 5, 78, 0, 0, 2146, 2213, 5, 79, 0, 0, 2147, 2213, 5, 166, 0, 0, 2148, 2213, 5, 80, 0, 0, 2149, 2213, 5, 83, 0, 0, 2150, 2213, 5, 84, 0, 0, 2151, 2213, 5, 85, 0, 0, 2152, 2213, 5, 86, 0, 0, 2153, 2213, 5, 87, 0, 0, 2154, 2213, 5, 88, 0, 0, 2155, 2213, 5, 89, 0, 0, 2156, 2213, 5, 90, 0, 0, 2157, 2213, 5, 91, 0, 0, 2158, 2213, 5, 92, 0, 0, 2159, 2213, 5, 93, 0, 0, 2160, 2213, 5, 94, 0, 0, 2161, 2213, 5, 95, 0, 0, 2162, 2213, 5, 96, 0, 0, 2163, 2213, 5, 97, 0, 0, 2164, 2213, 5, 98, 0, 0, 2165, 2213, 5, 99, 0, 0, 2166, 2213, 5, 100, 0, 0, 2167, 2213, 5, 101, 0, 0, 2168, 2213, 5, 102, 0, 0, 2169, 2213, 5, 103, 0, 0, 2170, 2213, 5, 105, 0, 0, 2171, 2213, 5, 106, 0, 0, 2172, 2213, 5, 111, 0, 0, 2173, 2213, 5, 109, 0, 0, 2174, 2213, 5, 110, 0, 0, 2175, 2213, 3, 232, 116, 0, 2176, 2213, 3, 224, 112, 0, 2177, 2213, 5, 199, 0, 0, 2178, 2213, 5, 200, 0, 0, 2179, 2213, 5, 201, 0, 0, 2180, 2213, 5, 202, 0, 0, 2181, 2213, 5, 204, 0, 0, 2182, 2213, 5, 205, 0, 0, 2183, 2213, 5, 207, 0, 0, 2184, 2213, 5, 208, 0, 0, 2185, 2213, 5, 209, 0, 0, 2186, 2213, 5, 210, 0, 0, 2187, 2213, 5, 212, 0, 0, 2188, 2213, 5, 213, 0, 0, 2189, 2213, 5, 214, 0, 0, 2190, 2213, 5, 222, 0, 0, 2191, 2213, 5, 223, 0, 0, 2192, 2213, 5, 224, 0, 0, 2193, 2213, 5, 225, 0, 0, 2194, 2213, 5, 226, 0, 0, 2195, 2213, 5, 227, 0, 0, 2196, 2213, 5, 228, 0, 0, 2197, 2213, 5, 229, 0, 0, 2198, 2213, 5, 230, 0, 0, 2199, 2213, 5, 231, 0, 0, 2200, 2213, 5, 232, 0, 0, 2201, 2213, 5, 54, 0, 0, 2202, 2213, 5, 53, 0, 0, 2203, 2213, 5, 58, 0, 0, 2204, 2213, 5, 352, 0, 0, 2205, 2213, 5, 351, 0, 0, 2206, 2213, 5, 55, 0, 0, 2207, 2213, 5, 56, 0, 0, 2208, 2213, 5, 57, 0, 0, 2209, 2213, 5, 59, 0, 0, 2210, 2213, 5, 60, 0, 0, 2211, 2213, 5, 454, 0, 0, 2212, 2100, 1, 0, 0, 0, 2212, 2101, 1, 0, 0, 0, 2212, 2102, 1, 0, 0, 0, 2212, 2103, 1, 0, 0, 0, 2212, 2104, 1, 0, 0, 0, 2212, 2105, 1, 0, 0, 0, 2212, 2106, 1, 0, 0, 0, 2212, 2107, 1, 0, 0, 0, 2212, 2108, 1, 0, 0, 0, 2212, 2109, 1, 0, 0, 0, 2212, 2110, 1, 0, 0, 0, 2212, 2111, 1, 0, 0, 0, 2212, 2112, 1, 0, 0, 0, 2212, 2113, 1, 0, 0, 0, 2212, 2114, 1, 0, 0, 0, 2212, 2115, 1, 0, 0, 0, 2212, 2116, 1, 0, 0, 0, 2212, 2117, 1, 0, 0, 0, 2212, 2118, 1, 0, 0, 0, 2212, 2119, 1, 0, 0, 0, 2212, 2120, 1, 0, 0, 0, 2212, 2121, 1, 0, 0, 0, 2212, 2122, 1, 0, 0, 0, 2212, 2123, 1, 0, 0, 0, 2212, 2124, 1, 0, 0, 0, 2212, 2125, 1, 0, 0, 0, 2212, 2126, 1, 0, 0, 0, 2212, 2127, 1, 0, 0, 0, 2212, 2128, 1, 0, 0, 0, 2212, 2129, 1, 0, 0, 0, 2212, 2130, 1, 0, 0, 0, 2212, 2131, 1, 0, 0, 0, 2212, 2132, 1, 0, 0, 0, 2212, 2133, 1, 0, 0, 0, 2212, 2134, 1, 0, 0, 0, 2212, 2135, 1, 0, 0, 0, 2212, 2136, 1, 0, 0, 0, 2212, 2137, 1, 0, 0, 0, 2212, 2138, 1, 0, 0, 0, 2212, 2139, 1, 0, 0, 0, 2212, 2140, 1, 0, 0, 0, 2212, 2141, 1, 0, 0, 0, 2212, 2142, 1, 0, 0, 0, 2212, 2143, 1, 0, 0, 0, 2212, 2144, 1, 0, 0, 0, 2212, 2145, 1, 0, 0, 0, 2212, 2146, 1, 0, 0, 0, 2212, 2147, 1, 0, 0, 0, 2212, 2148, 1, 0, 0, 0, 2212, 2149, 1, 0, 0, 0, 2212, 2150, 1, 0, 0, 0, 2212, 2151, 1, 0, 0, 0, 2212, 2152, 1, 0, 0, 0, 2212, 2153, 1, 0, 0, 0, 2212, 2154, 1, 0, 0, 0, 2212, 2155, 1, 0, 0, 0, 2212, 2156, 1, 0, 0, 0, 2212, 2157, 1, 0, 0, 0, 2212, 2158, 1, 0, 0, 0, 2212, 2159, 1, 0, 0, 0, 2212, 2160, 1, 0, 0, 0, 2212, 2161, 1, 0, 0, 0, 2212, 2162, 1, 0, 0, 0, 2212, 2163, 1, 0, 0, 0, 2212, 2164, 1, 0, 0, 0, 2212, 2165, 1, 0, 0, 0, 2212, 2166, 1, 0, 0, 0, 2212, 2167, 1, 0, 0, 0, 2212, 2168, 1, 0, 0, 0, 2212, 2169, 1, 0, 0, 0, 2212, 2170, 1, 0, 0, 0, 2212, 2171, 1, 0, 0, 0, 2212, 2172, 1, 0, 0, 0, 2212, 2173, 1, 0, 0, 0, 2212, 2174, 1, 0, 0, 0, 2212, 2175, 1, 0, 0, 0, 2212, 2176, 1, 0, 0, 0, 2212, 2177, 1, 0, 0, 0, 2212, 2178, 1, 0, 0, 0, 2212, 2179, 1, 0, 0, 0, 2212, 2180, 1, 0, 0, 0, 2212, 2181, 1, 0, 0, 0, 2212, 2182, 1, 0, 0, 0, 2212, 2183, 1, 0, 0, 0, 2212, 2184, 1, 0, 0, 0, 2212, 2185, 1, 0, 0, 0, 2212, 2186, 1, 0, 0, 0, 2212, 2187, 1, 0, 0, 0, 2212, 2188, 1, 0, 0, 0, 2212, 2189, 1, 0, 0, 0, 2212, 2190, 1, 0, 0, 0, 2212, 2191, 1, 0, 0, 0, 2212, 2192, 1, 0, 0, 0, 2212, 2193, 1, 0, 0, 0, 2212, 2194, 1, 0, 0, 0, 2212, 2195, 1, 0, 0, 0, 2212, 2196, 1, 0, 0, 0, 2212, 2197, 1, 0, 0, 0, 2212, 2198, 1, 0, 0, 0, 2212, 2199, 1, 0, 0, 0, 2212, 2200, 1, 0, 0, 0, 2212, 2201, 1, 0, 0, 0, 2212, 2202, 1, 0, 0, 0, 2212, 2203, 1, 0, 0, 0, 2212, 2204, 1, 0, 0, 0, 2212, 2205, 1, 0, 0, 0, 2212, 2206, 1, 0, 0, 0, 2212, 2207, 1, 0, 0, 0, 2212, 2208, 1, 0, 0, 0, 2212, 2209, 1, 0, 0, 0, 2212, 2210, 1, 0, 0, 0, 2212, 2211, 1, 0, 0, 0, 2213, 405, 1, 0, 0, 0, 206, 407, 413, 420, 425, 436, 442, 476, 481, 486, 490, 495, 506, 514, 516, 522, 529, 546, 555, 573, 579, 584, 590, 595, 605, 609, 612, 618, 620, 649, 653, 657, 663, 668, 672, 676, 684, 690, 696, 699, 708, 710, 716, 724, 729, 733, 740, 745, 757, 768, 773, 777, 784, 790, 795, 800, 804, 808, 813, 818, 822, 836, 847, 850, 857, 862, 866, 886, 893, 905, 912, 917, 922, 927, 932, 937, 942, 954, 965, 972, 980, 986, 992, 998, 1006, 1016, 1022, 1033, 1041, 1047, 1053, 1061, 1069, 1075, 1084, 1096, 1102, 1141, 1147, 1172, 1179, 1182, 1189, 1194, 1200, 1209, 1213, 1222, 1233, 1239, 1243, 1247, 1253, 1258, 1263, 1269, 1272, 1276, 1280, 1283, 1287, 1290, 1297, 1300, 1305, 1312, 1317, 1330, 1341, 1364, 1369, 1377, 1386, 1396, 1405, 1412, 1422, 1441, 1450, 1461, 1469, 1475, 1486, 1488, 1494, 1502, 1511, 1515, 1517, 1534, 1539, 1556, 1566, 1573, 1575, 1590, 1611, 1616, 1622, 1633, 1646, 1652, 1659, 1666, 1675, 1680, 1684, 1709, 1717, 1721, 1747, 1760, 1767, 1770, 1777, 1780, 1787, 1793, 1805, 1811, 1827, 1833, 1837, 1843, 1877, 1913, 1950, 1959, 1964, 1969, 1974, 1983, 2004, 2014, 2022, 2030, 2038, 2047, 2052, 2055, 2064, 2067, 2076, 2080, 2094, 2098, 2212] \ No newline at end of file diff --git a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParser.tokens b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParser.tokens index 4779948fd379..18d74279da11 100644 --- a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParser.tokens +++ b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParser.tokens @@ -2,658 +2,914 @@ SPACE=1 SEARCH=2 DESCRIBE=3 SHOW=4 -FROM=5 -WHERE=6 -FIELDS=7 -RENAME=8 -STATS=9 -DEDUP=10 -SORT=11 -EVAL=12 -HEAD=13 -TOP=14 -RARE=15 -PARSE=16 -METHOD=17 -REGEX=18 -PUNCT=19 -GROK=20 -PATTERN=21 -PATTERNS=22 -NEW_FIELD=23 -KMEANS=24 -AD=25 -ML=26 -AS=27 -BY=28 -SOURCE=29 -INDEX=30 -D=31 -DESC=32 -DATASOURCES=33 -SORTBY=34 -AUTO=35 -STR=36 -IP=37 -NUM=38 -KEEPEMPTY=39 -CONSECUTIVE=40 -DEDUP_SPLITVALUES=41 -PARTITIONS=42 -ALLNUM=43 -DELIM=44 -CENTROIDS=45 -ITERATIONS=46 -DISTANCE_TYPE=47 -NUMBER_OF_TREES=48 -SHINGLE_SIZE=49 -SAMPLE_SIZE=50 -OUTPUT_AFTER=51 -TIME_DECAY=52 -ANOMALY_RATE=53 -CATEGORY_FIELD=54 -TIME_FIELD=55 -TIME_ZONE=56 -TRAINING_DATA_SIZE=57 -ANOMALY_SCORE_THRESHOLD=58 -CASE=59 -IN=60 -NOT=61 -OR=62 -AND=63 -XOR=64 -TRUE=65 -FALSE=66 -REGEXP=67 -CONVERT_TZ=68 -DATETIME=69 -DAY=70 -DAY_HOUR=71 -DAY_MICROSECOND=72 -DAY_MINUTE=73 -DAY_OF_YEAR=74 -DAY_SECOND=75 -HOUR=76 -HOUR_MICROSECOND=77 -HOUR_MINUTE=78 -HOUR_OF_DAY=79 -HOUR_SECOND=80 -INTERVAL=81 -MICROSECOND=82 -MILLISECOND=83 -MINUTE=84 -MINUTE_MICROSECOND=85 -MINUTE_OF_DAY=86 -MINUTE_OF_HOUR=87 -MINUTE_SECOND=88 -MONTH=89 -MONTH_OF_YEAR=90 -QUARTER=91 -SECOND=92 -SECOND_MICROSECOND=93 -SECOND_OF_MINUTE=94 -WEEK=95 -WEEK_OF_YEAR=96 -YEAR=97 -YEAR_MONTH=98 -DATAMODEL=99 -LOOKUP=100 -SAVEDSEARCH=101 -INT=102 -INTEGER=103 -DOUBLE=104 -LONG=105 -FLOAT=106 -STRING=107 -BOOLEAN=108 -PIPE=109 -COMMA=110 -DOT=111 -EQUAL=112 -GREATER=113 -LESS=114 -NOT_GREATER=115 -NOT_LESS=116 -NOT_EQUAL=117 -PLUS=118 -MINUS=119 -STAR=120 -DIVIDE=121 -MODULE=122 -EXCLAMATION_SYMBOL=123 -COLON=124 -LT_PRTHS=125 -RT_PRTHS=126 -LT_SQR_PRTHS=127 -RT_SQR_PRTHS=128 -SINGLE_QUOTE=129 -DOUBLE_QUOTE=130 -BACKTICK=131 -BIT_NOT_OP=132 -BIT_AND_OP=133 -BIT_XOR_OP=134 -AVG=135 -COUNT=136 -DISTINCT_COUNT=137 -ESTDC=138 -ESTDC_ERROR=139 -MAX=140 -MEAN=141 -MEDIAN=142 -MIN=143 -MODE=144 -RANGE=145 -STDEV=146 -STDEVP=147 -SUM=148 -SUMSQ=149 -VAR_SAMP=150 -VAR_POP=151 -STDDEV_SAMP=152 -STDDEV_POP=153 -PERCENTILE=154 -TAKE=155 -FIRST=156 -LAST=157 -LIST=158 -VALUES=159 -EARLIEST=160 -EARLIEST_TIME=161 -LATEST=162 -LATEST_TIME=163 -PER_DAY=164 -PER_HOUR=165 -PER_MINUTE=166 -PER_SECOND=167 -RATE=168 -SPARKLINE=169 -C=170 -DC=171 -ABS=172 -CBRT=173 -CEIL=174 -CEILING=175 -CONV=176 -CRC32=177 -E=178 -EXP=179 -FLOOR=180 -LN=181 -LOG=182 -LOG10=183 -LOG2=184 -MOD=185 -PI=186 -POSITION=187 -POW=188 -POWER=189 -RAND=190 -ROUND=191 -SIGN=192 -SQRT=193 -TRUNCATE=194 -ACOS=195 -ASIN=196 -ATAN=197 -ATAN2=198 -COS=199 -COT=200 -DEGREES=201 -RADIANS=202 -SIN=203 -TAN=204 -ADDDATE=205 -ADDTIME=206 -CURDATE=207 -CURRENT_DATE=208 -CURRENT_TIME=209 -CURRENT_TIMESTAMP=210 -CURTIME=211 -DATE=212 -DATEDIFF=213 -DATE_ADD=214 -DATE_FORMAT=215 -DATE_SUB=216 -DAYNAME=217 -DAYOFMONTH=218 -DAYOFWEEK=219 -DAYOFYEAR=220 -DAY_OF_MONTH=221 -DAY_OF_WEEK=222 -EXTRACT=223 -FROM_DAYS=224 -FROM_UNIXTIME=225 -GET_FORMAT=226 -LAST_DAY=227 -LOCALTIME=228 -LOCALTIMESTAMP=229 -MAKEDATE=230 -MAKETIME=231 -MONTHNAME=232 -NOW=233 -PERIOD_ADD=234 -PERIOD_DIFF=235 -SEC_TO_TIME=236 -STR_TO_DATE=237 -SUBDATE=238 -SUBTIME=239 -SYSDATE=240 -TIME=241 -TIMEDIFF=242 -TIMESTAMP=243 -TIMESTAMPADD=244 -TIMESTAMPDIFF=245 -TIME_FORMAT=246 -TIME_TO_SEC=247 -TO_DAYS=248 -TO_SECONDS=249 -UNIX_TIMESTAMP=250 -UTC_DATE=251 -UTC_TIME=252 -UTC_TIMESTAMP=253 -WEEKDAY=254 -YEARWEEK=255 -SUBSTR=256 -SUBSTRING=257 -LTRIM=258 -RTRIM=259 -TRIM=260 -TO=261 -LOWER=262 -UPPER=263 -CONCAT=264 -CONCAT_WS=265 -LENGTH=266 -STRCMP=267 -RIGHT=268 -LEFT=269 -ASCII=270 -LOCATE=271 -REPLACE=272 -REVERSE=273 -CAST=274 -LIKE=275 -ISNULL=276 -ISNOTNULL=277 -IFNULL=278 -NULLIF=279 -IF=280 -TYPEOF=281 -MATCH=282 -MATCH_PHRASE=283 -MATCH_PHRASE_PREFIX=284 -MATCH_BOOL_PREFIX=285 -SIMPLE_QUERY_STRING=286 -MULTI_MATCH=287 -QUERY_STRING=288 -ALLOW_LEADING_WILDCARD=289 -ANALYZE_WILDCARD=290 -ANALYZER=291 -AUTO_GENERATE_SYNONYMS_PHRASE_QUERY=292 -BOOST=293 -CUTOFF_FREQUENCY=294 -DEFAULT_FIELD=295 -DEFAULT_OPERATOR=296 -ENABLE_POSITION_INCREMENTS=297 -ESCAPE=298 -FLAGS=299 -FUZZY_MAX_EXPANSIONS=300 -FUZZY_PREFIX_LENGTH=301 -FUZZY_TRANSPOSITIONS=302 -FUZZY_REWRITE=303 -FUZZINESS=304 -LENIENT=305 -LOW_FREQ_OPERATOR=306 -MAX_DETERMINIZED_STATES=307 -MAX_EXPANSIONS=308 -MINIMUM_SHOULD_MATCH=309 -OPERATOR=310 -PHRASE_SLOP=311 -PREFIX_LENGTH=312 -QUOTE_ANALYZER=313 -QUOTE_FIELD_SUFFIX=314 -REWRITE=315 -SLOP=316 -TIE_BREAKER=317 -TYPE=318 -ZERO_TERMS_QUERY=319 -SPAN=320 -MS=321 -S=322 -M=323 -H=324 -W=325 -Q=326 -Y=327 -ID=328 -CLUSTER=329 -INTEGER_LITERAL=330 -DECIMAL_LITERAL=331 -ID_DATE_SUFFIX=332 -DQUOTA_STRING=333 -SQUOTA_STRING=334 -BQUOTA_STRING=335 -ERROR_RECOGNITION=336 +EXPLAIN=5 +FROM=6 +WHERE=7 +FIELDS=8 +FIELD=9 +TABLE=10 +RENAME=11 +STATS=12 +EVENTSTATS=13 +DEDUP=14 +SORT=15 +EVAL=16 +HEAD=17 +BIN=18 +TOP=19 +RARE=20 +PARSE=21 +SPATH=22 +REGEX=23 +REX=24 +SED=25 +PUNCT=26 +GROK=27 +PATTERN=28 +PATTERNS=29 +NEW_FIELD=30 +KMEANS=31 +AD=32 +ML=33 +FILLNULL=34 +FLATTEN=35 +TRENDLINE=36 +TIMECHART=37 +APPENDCOL=38 +EXPAND=39 +SIMPLE_PATTERN=40 +BRAIN=41 +VARIABLE_COUNT_THRESHOLD=42 +FREQUENCY_THRESHOLD_PERCENTAGE=43 +METHOD=44 +MAX_SAMPLE_COUNT=45 +MAX_MATCH=46 +OFFSET_FIELD=47 +BUFFER_LIMIT=48 +LABEL=49 +AGGREGATION=50 +JOIN=51 +ON=52 +INNER=53 +OUTER=54 +FULL=55 +SEMI=56 +ANTI=57 +CROSS=58 +LEFT_HINT=59 +RIGHT_HINT=60 +AS=61 +BY=62 +SOURCE=63 +INDEX=64 +A=65 +ASC=66 +D=67 +DESC=68 +DATASOURCES=69 +USING=70 +WITH=71 +SIMPLE=72 +STANDARD=73 +COST=74 +EXTENDED=75 +OVERRIDE=76 +OVERWRITE=77 +AUTO=78 +STR=79 +NUM=80 +SMA=81 +WMA=82 +KEEPEMPTY=83 +CONSECUTIVE=84 +DEDUP_SPLITVALUES=85 +PARTITIONS=86 +ALLNUM=87 +DELIM=88 +BUCKET_NULLABLE=89 +CENTROIDS=90 +ITERATIONS=91 +DISTANCE_TYPE=92 +NUMBER_OF_TREES=93 +SHINGLE_SIZE=94 +SAMPLE_SIZE=95 +OUTPUT_AFTER=96 +TIME_DECAY=97 +ANOMALY_RATE=98 +CATEGORY_FIELD=99 +TIME_FIELD=100 +TIME_ZONE=101 +TRAINING_DATA_SIZE=102 +ANOMALY_SCORE_THRESHOLD=103 +APPEND=104 +COUNTFIELD=105 +SHOWCOUNT=106 +LIMIT=107 +USEOTHER=108 +INPUT=109 +OUTPUT=110 +PATH=111 +CASE=112 +ELSE=113 +IN=114 +EXISTS=115 +GEOIP=116 +NOT=117 +OR=118 +AND=119 +XOR=120 +TRUE=121 +FALSE=122 +REGEXP=123 +REGEX_MATCH=124 +CONVERT_TZ=125 +DATETIME=126 +DAY=127 +DAY_HOUR=128 +DAY_MICROSECOND=129 +DAY_MINUTE=130 +DAY_OF_YEAR=131 +DAY_SECOND=132 +HOUR=133 +HOUR_MICROSECOND=134 +HOUR_MINUTE=135 +HOUR_OF_DAY=136 +HOUR_SECOND=137 +INTERVAL=138 +MICROSECOND=139 +MILLISECOND=140 +MINUTE=141 +MINUTE_MICROSECOND=142 +MINUTE_OF_DAY=143 +MINUTE_OF_HOUR=144 +MINUTE_SECOND=145 +MONTH=146 +MONTH_OF_YEAR=147 +QUARTER=148 +SECOND=149 +SECOND_MICROSECOND=150 +SECOND_OF_MINUTE=151 +WEEK=152 +WEEK_OF_YEAR=153 +YEAR=154 +YEAR_MONTH=155 +DATAMODEL=156 +LOOKUP=157 +SAVEDSEARCH=158 +INT=159 +INTEGER=160 +DOUBLE=161 +LONG=162 +FLOAT=163 +STRING=164 +BOOLEAN=165 +IP=166 +PIPE=167 +COMMA=168 +DOT=169 +EQUAL=170 +DOUBLE_EQUAL=171 +GREATER=172 +LESS=173 +NOT_GREATER=174 +NOT_LESS=175 +NOT_EQUAL=176 +PLUS=177 +MINUS=178 +STAR=179 +DIVIDE=180 +MODULE=181 +EXCLAMATION_SYMBOL=182 +COLON=183 +LT_PRTHS=184 +RT_PRTHS=185 +LT_SQR_PRTHS=186 +RT_SQR_PRTHS=187 +LT_CURLY=188 +RT_CURLY=189 +SINGLE_QUOTE=190 +DOUBLE_QUOTE=191 +BACKTICK=192 +ARROW=193 +BIT_NOT_OP=194 +BIT_AND_OP=195 +BIT_XOR_OP=196 +AVG=197 +COUNT=198 +DISTINCT_COUNT=199 +DISTINCT_COUNT_APPROX=200 +ESTDC=201 +ESTDC_ERROR=202 +MAX=203 +MEAN=204 +MEDIAN=205 +MIN=206 +MODE=207 +RANGE=208 +STDEV=209 +STDEVP=210 +SUM=211 +SUMSQ=212 +VAR_SAMP=213 +VAR_POP=214 +STDDEV_SAMP=215 +STDDEV_POP=216 +PERC=217 +PERCENTILE=218 +PERCENTILE_APPROX=219 +EARLIEST=220 +LATEST=221 +TAKE=222 +LIST=223 +VALUES=224 +PER_DAY=225 +PER_HOUR=226 +PER_MINUTE=227 +PER_SECOND=228 +RATE=229 +SPARKLINE=230 +C=231 +DC=232 +ROW_NUMBER=233 +RANK=234 +DENSE_RANK=235 +PERCENT_RANK=236 +CUME_DIST=237 +FIRST=238 +LAST=239 +NTH=240 +NTILE=241 +PLUS_FUCTION=242 +MINUS_FUCTION=243 +STAR_FUNCTION=244 +DIVIDE_FUNCTION=245 +ABS=246 +CBRT=247 +CEIL=248 +CEILING=249 +CONV=250 +CRC32=251 +E=252 +EXP=253 +EXPM1=254 +FLOOR=255 +LN=256 +LOG=257 +LOG_WITH_BASE=258 +MOD=259 +MODULUS=260 +PI=261 +POSITION=262 +POW=263 +POWER=264 +RAND=265 +ROUND=266 +SIGN=267 +SQRT=268 +TRUNCATE=269 +RINT=270 +SIGNUM=271 +ACOS=272 +ASIN=273 +ATAN=274 +ATAN2=275 +COS=276 +COSH=277 +COT=278 +DEGREES=279 +RADIANS=280 +SIN=281 +SINH=282 +TAN=283 +MD5=284 +SHA1=285 +SHA2=286 +ADDDATE=287 +ADDTIME=288 +CURDATE=289 +CURRENT_DATE=290 +CURRENT_TIME=291 +CURRENT_TIMESTAMP=292 +CURTIME=293 +DATE=294 +DATEDIFF=295 +DATE_ADD=296 +DATE_FORMAT=297 +DATE_SUB=298 +DAYNAME=299 +DAYOFMONTH=300 +DAYOFWEEK=301 +DAYOFYEAR=302 +DAY_OF_MONTH=303 +DAY_OF_WEEK=304 +EXTRACT=305 +FROM_DAYS=306 +FROM_UNIXTIME=307 +GET_FORMAT=308 +LAST_DAY=309 +LOCALTIME=310 +LOCALTIMESTAMP=311 +MAKEDATE=312 +MAKETIME=313 +MONTHNAME=314 +NOW=315 +PERIOD_ADD=316 +PERIOD_DIFF=317 +SEC_TO_TIME=318 +STR_TO_DATE=319 +SUBDATE=320 +SUBTIME=321 +SYSDATE=322 +TIME=323 +TIMEDIFF=324 +TIMESTAMP=325 +TIMESTAMPADD=326 +TIMESTAMPDIFF=327 +TIME_FORMAT=328 +TIME_TO_SEC=329 +TO_DAYS=330 +TO_SECONDS=331 +UNIX_TIMESTAMP=332 +UTC_DATE=333 +UTC_TIME=334 +UTC_TIMESTAMP=335 +WEEKDAY=336 +YEARWEEK=337 +STRFTIME=338 +SUBSTR=339 +SUBSTRING=340 +LTRIM=341 +RTRIM=342 +TRIM=343 +TO=344 +LOWER=345 +UPPER=346 +CONCAT=347 +CONCAT_WS=348 +LENGTH=349 +STRCMP=350 +RIGHT=351 +LEFT=352 +ASCII=353 +LOCATE=354 +REPLACE=355 +REVERSE=356 +CAST=357 +LIKE=358 +ISNULL=359 +ISNOTNULL=360 +CIDRMATCH=361 +BETWEEN=362 +ISPRESENT=363 +ISEMPTY=364 +ISBLANK=365 +ARRAY=366 +ARRAY_LENGTH=367 +MVJOIN=368 +FORALL=369 +FILTER=370 +TRANSFORM=371 +REDUCE=372 +JSON_VALID=373 +JSON=374 +JSON_OBJECT=375 +JSON_ARRAY=376 +JSON_ARRAY_LENGTH=377 +JSON_EXTRACT=378 +JSON_KEYS=379 +JSON_SET=380 +JSON_DELETE=381 +JSON_APPEND=382 +JSON_EXTEND=383 +IFNULL=384 +NULLIF=385 +IF=386 +TYPEOF=387 +COALESCE=388 +MATCH=389 +MATCH_PHRASE=390 +MATCH_PHRASE_PREFIX=391 +MATCH_BOOL_PREFIX=392 +SIMPLE_QUERY_STRING=393 +MULTI_MATCH=394 +QUERY_STRING=395 +ALLOW_LEADING_WILDCARD=396 +ANALYZE_WILDCARD=397 +ANALYZER=398 +AUTO_GENERATE_SYNONYMS_PHRASE_QUERY=399 +BOOST=400 +CUTOFF_FREQUENCY=401 +DEFAULT_FIELD=402 +DEFAULT_OPERATOR=403 +ENABLE_POSITION_INCREMENTS=404 +ESCAPE=405 +FLAGS=406 +FUZZY_MAX_EXPANSIONS=407 +FUZZY_PREFIX_LENGTH=408 +FUZZY_TRANSPOSITIONS=409 +FUZZY_REWRITE=410 +FUZZINESS=411 +LENIENT=412 +LOW_FREQ_OPERATOR=413 +MAX_DETERMINIZED_STATES=414 +MAX_EXPANSIONS=415 +MINIMUM_SHOULD_MATCH=416 +OPERATOR=417 +PHRASE_SLOP=418 +PREFIX_LENGTH=419 +QUOTE_ANALYZER=420 +QUOTE_FIELD_SUFFIX=421 +REWRITE=422 +SLOP=423 +TIE_BREAKER=424 +TYPE=425 +ZERO_TERMS_QUERY=426 +SPAN=427 +BINS=428 +MINSPAN=429 +START=430 +END=431 +ALIGNTIME=432 +MS=433 +S=434 +M=435 +H=436 +W=437 +Q=438 +Y=439 +SEC=440 +SECS=441 +SECONDS=442 +MINS=443 +MINUTES=444 +HR=445 +HRS=446 +HOURS=447 +DAYS=448 +MON=449 +MONTHS=450 +US=451 +CS=452 +DS=453 +PERCENTILE_SHORTCUT=454 +ID=455 +CLUSTER=456 +INTEGER_LITERAL=457 +DECIMAL_LITERAL=458 +FLOAT_LITERAL=459 +DOUBLE_LITERAL=460 +ID_DATE_SUFFIX=461 +DQUOTA_STRING=462 +SQUOTA_STRING=463 +BQUOTA_STRING=464 +LINE_COMMENT=465 +BLOCK_COMMENT=466 +ERROR_RECOGNITION=467 'SEARCH'=2 'DESCRIBE'=3 'SHOW'=4 -'FROM'=5 -'WHERE'=6 -'FIELDS'=7 -'RENAME'=8 -'STATS'=9 -'DEDUP'=10 -'SORT'=11 -'EVAL'=12 -'HEAD'=13 -'TOP'=14 -'RARE'=15 -'PARSE'=16 -'METHOD'=17 -'REGEX'=18 -'PUNCT'=19 -'GROK'=20 -'PATTERN'=21 -'PATTERNS'=22 -'NEW_FIELD'=23 -'KMEANS'=24 -'AD'=25 -'ML'=26 -'AS'=27 -'BY'=28 -'SOURCE'=29 -'INDEX'=30 -'D'=31 -'DESC'=32 -'DATASOURCES'=33 -'SORTBY'=34 -'AUTO'=35 -'STR'=36 -'IP'=37 -'NUM'=38 -'KEEPEMPTY'=39 -'CONSECUTIVE'=40 -'DEDUP_SPLITVALUES'=41 -'PARTITIONS'=42 -'ALLNUM'=43 -'DELIM'=44 -'CENTROIDS'=45 -'ITERATIONS'=46 -'DISTANCE_TYPE'=47 -'NUMBER_OF_TREES'=48 -'SHINGLE_SIZE'=49 -'SAMPLE_SIZE'=50 -'OUTPUT_AFTER'=51 -'TIME_DECAY'=52 -'ANOMALY_RATE'=53 -'CATEGORY_FIELD'=54 -'TIME_FIELD'=55 -'TIME_ZONE'=56 -'TRAINING_DATA_SIZE'=57 -'ANOMALY_SCORE_THRESHOLD'=58 -'CASE'=59 -'IN'=60 -'NOT'=61 -'OR'=62 -'AND'=63 -'XOR'=64 -'TRUE'=65 -'FALSE'=66 -'REGEXP'=67 -'CONVERT_TZ'=68 -'DATETIME'=69 -'DAY'=70 -'DAY_HOUR'=71 -'DAY_MICROSECOND'=72 -'DAY_MINUTE'=73 -'DAY_OF_YEAR'=74 -'DAY_SECOND'=75 -'HOUR'=76 -'HOUR_MICROSECOND'=77 -'HOUR_MINUTE'=78 -'HOUR_OF_DAY'=79 -'HOUR_SECOND'=80 -'INTERVAL'=81 -'MICROSECOND'=82 -'MILLISECOND'=83 -'MINUTE'=84 -'MINUTE_MICROSECOND'=85 -'MINUTE_OF_DAY'=86 -'MINUTE_OF_HOUR'=87 -'MINUTE_SECOND'=88 -'MONTH'=89 -'MONTH_OF_YEAR'=90 -'QUARTER'=91 -'SECOND'=92 -'SECOND_MICROSECOND'=93 -'SECOND_OF_MINUTE'=94 -'WEEK'=95 -'WEEK_OF_YEAR'=96 -'YEAR'=97 -'YEAR_MONTH'=98 -'DATAMODEL'=99 -'LOOKUP'=100 -'SAVEDSEARCH'=101 -'INT'=102 -'INTEGER'=103 -'DOUBLE'=104 -'LONG'=105 -'FLOAT'=106 -'STRING'=107 -'BOOLEAN'=108 -'|'=109 -','=110 -'.'=111 -'='=112 -'>'=113 -'<'=114 -'+'=118 -'-'=119 -'*'=120 -'/'=121 -'%'=122 -'!'=123 -':'=124 -'('=125 -')'=126 -'['=127 -']'=128 -'\''=129 -'"'=130 -'`'=131 -'~'=132 -'&'=133 -'^'=134 -'AVG'=135 -'COUNT'=136 -'DISTINCT_COUNT'=137 -'ESTDC'=138 -'ESTDC_ERROR'=139 -'MAX'=140 -'MEAN'=141 -'MEDIAN'=142 -'MIN'=143 -'MODE'=144 -'RANGE'=145 -'STDEV'=146 -'STDEVP'=147 -'SUM'=148 -'SUMSQ'=149 -'VAR_SAMP'=150 -'VAR_POP'=151 -'STDDEV_SAMP'=152 -'STDDEV_POP'=153 -'PERCENTILE'=154 -'TAKE'=155 -'FIRST'=156 -'LAST'=157 -'LIST'=158 -'VALUES'=159 -'EARLIEST'=160 -'EARLIEST_TIME'=161 -'LATEST'=162 -'LATEST_TIME'=163 -'PER_DAY'=164 -'PER_HOUR'=165 -'PER_MINUTE'=166 -'PER_SECOND'=167 -'RATE'=168 -'SPARKLINE'=169 -'C'=170 -'DC'=171 -'ABS'=172 -'CBRT'=173 -'CEIL'=174 -'CEILING'=175 -'CONV'=176 -'CRC32'=177 -'E'=178 -'EXP'=179 -'FLOOR'=180 -'LN'=181 -'LOG'=182 -'LOG10'=183 -'LOG2'=184 -'MOD'=185 -'PI'=186 -'POSITION'=187 -'POW'=188 -'POWER'=189 -'RAND'=190 -'ROUND'=191 -'SIGN'=192 -'SQRT'=193 -'TRUNCATE'=194 -'ACOS'=195 -'ASIN'=196 -'ATAN'=197 -'ATAN2'=198 -'COS'=199 -'COT'=200 -'DEGREES'=201 -'RADIANS'=202 -'SIN'=203 -'TAN'=204 -'ADDDATE'=205 -'ADDTIME'=206 -'CURDATE'=207 -'CURRENT_DATE'=208 -'CURRENT_TIME'=209 -'CURRENT_TIMESTAMP'=210 -'CURTIME'=211 -'DATE'=212 -'DATEDIFF'=213 -'DATE_ADD'=214 -'DATE_FORMAT'=215 -'DATE_SUB'=216 -'DAYNAME'=217 -'DAYOFMONTH'=218 -'DAYOFWEEK'=219 -'DAYOFYEAR'=220 -'DAY_OF_MONTH'=221 -'DAY_OF_WEEK'=222 -'EXTRACT'=223 -'FROM_DAYS'=224 -'FROM_UNIXTIME'=225 -'GET_FORMAT'=226 -'LAST_DAY'=227 -'LOCALTIME'=228 -'LOCALTIMESTAMP'=229 -'MAKEDATE'=230 -'MAKETIME'=231 -'MONTHNAME'=232 -'NOW'=233 -'PERIOD_ADD'=234 -'PERIOD_DIFF'=235 -'SEC_TO_TIME'=236 -'STR_TO_DATE'=237 -'SUBDATE'=238 -'SUBTIME'=239 -'SYSDATE'=240 -'TIME'=241 -'TIMEDIFF'=242 -'TIMESTAMP'=243 -'TIMESTAMPADD'=244 -'TIMESTAMPDIFF'=245 -'TIME_FORMAT'=246 -'TIME_TO_SEC'=247 -'TO_DAYS'=248 -'TO_SECONDS'=249 -'UNIX_TIMESTAMP'=250 -'UTC_DATE'=251 -'UTC_TIME'=252 -'UTC_TIMESTAMP'=253 -'WEEKDAY'=254 -'YEARWEEK'=255 -'SUBSTR'=256 -'SUBSTRING'=257 -'LTRIM'=258 -'RTRIM'=259 -'TRIM'=260 -'TO'=261 -'LOWER'=262 -'UPPER'=263 -'CONCAT'=264 -'CONCAT_WS'=265 -'LENGTH'=266 -'STRCMP'=267 -'RIGHT'=268 -'LEFT'=269 -'ASCII'=270 -'LOCATE'=271 -'REPLACE'=272 -'REVERSE'=273 -'CAST'=274 -'LIKE'=275 -'ISNULL'=276 -'ISNOTNULL'=277 -'IFNULL'=278 -'NULLIF'=279 -'IF'=280 -'TYPEOF'=281 -'MATCH'=282 -'MATCH_PHRASE'=283 -'MATCH_PHRASE_PREFIX'=284 -'MATCH_BOOL_PREFIX'=285 -'SIMPLE_QUERY_STRING'=286 -'MULTI_MATCH'=287 -'QUERY_STRING'=288 -'ALLOW_LEADING_WILDCARD'=289 -'ANALYZE_WILDCARD'=290 -'ANALYZER'=291 -'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'=292 -'BOOST'=293 -'CUTOFF_FREQUENCY'=294 -'DEFAULT_FIELD'=295 -'DEFAULT_OPERATOR'=296 -'ENABLE_POSITION_INCREMENTS'=297 -'ESCAPE'=298 -'FLAGS'=299 -'FUZZY_MAX_EXPANSIONS'=300 -'FUZZY_PREFIX_LENGTH'=301 -'FUZZY_TRANSPOSITIONS'=302 -'FUZZY_REWRITE'=303 -'FUZZINESS'=304 -'LENIENT'=305 -'LOW_FREQ_OPERATOR'=306 -'MAX_DETERMINIZED_STATES'=307 -'MAX_EXPANSIONS'=308 -'MINIMUM_SHOULD_MATCH'=309 -'OPERATOR'=310 -'PHRASE_SLOP'=311 -'PREFIX_LENGTH'=312 -'QUOTE_ANALYZER'=313 -'QUOTE_FIELD_SUFFIX'=314 -'REWRITE'=315 -'SLOP'=316 -'TIE_BREAKER'=317 -'TYPE'=318 -'ZERO_TERMS_QUERY'=319 -'SPAN'=320 -'MS'=321 -'S'=322 -'M'=323 -'H'=324 -'W'=325 -'Q'=326 -'Y'=327 +'EXPLAIN'=5 +'FROM'=6 +'WHERE'=7 +'FIELDS'=8 +'FIELD'=9 +'TABLE'=10 +'RENAME'=11 +'STATS'=12 +'EVENTSTATS'=13 +'DEDUP'=14 +'SORT'=15 +'EVAL'=16 +'HEAD'=17 +'BIN'=18 +'TOP'=19 +'RARE'=20 +'PARSE'=21 +'SPATH'=22 +'REGEX'=23 +'REX'=24 +'SED'=25 +'PUNCT'=26 +'GROK'=27 +'PATTERN'=28 +'PATTERNS'=29 +'NEW_FIELD'=30 +'KMEANS'=31 +'AD'=32 +'ML'=33 +'FILLNULL'=34 +'FLATTEN'=35 +'TRENDLINE'=36 +'TIMECHART'=37 +'APPENDCOL'=38 +'EXPAND'=39 +'SIMPLE_PATTERN'=40 +'BRAIN'=41 +'VARIABLE_COUNT_THRESHOLD'=42 +'FREQUENCY_THRESHOLD_PERCENTAGE'=43 +'METHOD'=44 +'MAX_SAMPLE_COUNT'=45 +'MAX_MATCH'=46 +'OFFSET_FIELD'=47 +'BUFFER_LIMIT'=48 +'LABEL'=49 +'AGGREGATION'=50 +'JOIN'=51 +'ON'=52 +'INNER'=53 +'OUTER'=54 +'FULL'=55 +'SEMI'=56 +'ANTI'=57 +'CROSS'=58 +'HINT.LEFT'=59 +'HINT.RIGHT'=60 +'AS'=61 +'BY'=62 +'SOURCE'=63 +'INDEX'=64 +'A'=65 +'ASC'=66 +'D'=67 +'DESC'=68 +'DATASOURCES'=69 +'USING'=70 +'WITH'=71 +'SIMPLE'=72 +'STANDARD'=73 +'COST'=74 +'EXTENDED'=75 +'OVERRIDE'=76 +'OVERWRITE'=77 +'AUTO'=78 +'STR'=79 +'NUM'=80 +'SMA'=81 +'WMA'=82 +'KEEPEMPTY'=83 +'CONSECUTIVE'=84 +'DEDUP_SPLITVALUES'=85 +'PARTITIONS'=86 +'ALLNUM'=87 +'DELIM'=88 +'BUCKET_NULLABLE'=89 +'CENTROIDS'=90 +'ITERATIONS'=91 +'DISTANCE_TYPE'=92 +'NUMBER_OF_TREES'=93 +'SHINGLE_SIZE'=94 +'SAMPLE_SIZE'=95 +'OUTPUT_AFTER'=96 +'TIME_DECAY'=97 +'ANOMALY_RATE'=98 +'CATEGORY_FIELD'=99 +'TIME_FIELD'=100 +'TIME_ZONE'=101 +'TRAINING_DATA_SIZE'=102 +'ANOMALY_SCORE_THRESHOLD'=103 +'APPEND'=104 +'COUNTFIELD'=105 +'SHOWCOUNT'=106 +'LIMIT'=107 +'USEOTHER'=108 +'INPUT'=109 +'OUTPUT'=110 +'PATH'=111 +'CASE'=112 +'ELSE'=113 +'IN'=114 +'EXISTS'=115 +'GEOIP'=116 +'NOT'=117 +'OR'=118 +'AND'=119 +'XOR'=120 +'TRUE'=121 +'FALSE'=122 +'REGEXP'=123 +'REGEX_MATCH'=124 +'CONVERT_TZ'=125 +'DATETIME'=126 +'DAY'=127 +'DAY_HOUR'=128 +'DAY_MICROSECOND'=129 +'DAY_MINUTE'=130 +'DAY_OF_YEAR'=131 +'DAY_SECOND'=132 +'HOUR'=133 +'HOUR_MICROSECOND'=134 +'HOUR_MINUTE'=135 +'HOUR_OF_DAY'=136 +'HOUR_SECOND'=137 +'INTERVAL'=138 +'MICROSECOND'=139 +'MILLISECOND'=140 +'MINUTE'=141 +'MINUTE_MICROSECOND'=142 +'MINUTE_OF_DAY'=143 +'MINUTE_OF_HOUR'=144 +'MINUTE_SECOND'=145 +'MONTH'=146 +'MONTH_OF_YEAR'=147 +'QUARTER'=148 +'SECOND'=149 +'SECOND_MICROSECOND'=150 +'SECOND_OF_MINUTE'=151 +'WEEK'=152 +'WEEK_OF_YEAR'=153 +'YEAR'=154 +'YEAR_MONTH'=155 +'DATAMODEL'=156 +'LOOKUP'=157 +'SAVEDSEARCH'=158 +'INT'=159 +'INTEGER'=160 +'DOUBLE'=161 +'LONG'=162 +'FLOAT'=163 +'STRING'=164 +'BOOLEAN'=165 +'IP'=166 +'|'=167 +','=168 +'.'=169 +'='=170 +'=='=171 +'>'=172 +'<'=173 +'+'=177 +'-'=178 +'*'=179 +'/'=180 +'%'=181 +'!'=182 +':'=183 +'('=184 +')'=185 +'['=186 +']'=187 +'{'=188 +'}'=189 +'\''=190 +'"'=191 +'`'=192 +'->'=193 +'~'=194 +'&'=195 +'^'=196 +'AVG'=197 +'COUNT'=198 +'DISTINCT_COUNT'=199 +'DISTINCT_COUNT_APPROX'=200 +'ESTDC'=201 +'ESTDC_ERROR'=202 +'MAX'=203 +'MEAN'=204 +'MEDIAN'=205 +'MIN'=206 +'MODE'=207 +'RANGE'=208 +'STDEV'=209 +'STDEVP'=210 +'SUM'=211 +'SUMSQ'=212 +'VAR_SAMP'=213 +'VAR_POP'=214 +'STDDEV_SAMP'=215 +'STDDEV_POP'=216 +'PERC'=217 +'PERCENTILE'=218 +'PERCENTILE_APPROX'=219 +'EARLIEST'=220 +'LATEST'=221 +'TAKE'=222 +'LIST'=223 +'VALUES'=224 +'PER_DAY'=225 +'PER_HOUR'=226 +'PER_MINUTE'=227 +'PER_SECOND'=228 +'RATE'=229 +'SPARKLINE'=230 +'C'=231 +'DC'=232 +'ROW_NUMBER'=233 +'RANK'=234 +'DENSE_RANK'=235 +'PERCENT_RANK'=236 +'CUME_DIST'=237 +'FIRST'=238 +'LAST'=239 +'NTH'=240 +'NTILE'=241 +'ADD'=242 +'SUBTRACT'=243 +'MULTIPLY'=244 +'DIVIDE'=245 +'ABS'=246 +'CBRT'=247 +'CEIL'=248 +'CEILING'=249 +'CONV'=250 +'CRC32'=251 +'E'=252 +'EXP'=253 +'EXPM1'=254 +'FLOOR'=255 +'LN'=256 +'LOG'=257 +'MOD'=259 +'MODULUS'=260 +'PI'=261 +'POSITION'=262 +'POW'=263 +'POWER'=264 +'RAND'=265 +'ROUND'=266 +'SIGN'=267 +'SQRT'=268 +'TRUNCATE'=269 +'RINT'=270 +'SIGNUM'=271 +'ACOS'=272 +'ASIN'=273 +'ATAN'=274 +'ATAN2'=275 +'COS'=276 +'COSH'=277 +'COT'=278 +'DEGREES'=279 +'RADIANS'=280 +'SIN'=281 +'SINH'=282 +'TAN'=283 +'MD5'=284 +'SHA1'=285 +'SHA2'=286 +'ADDDATE'=287 +'ADDTIME'=288 +'CURDATE'=289 +'CURRENT_DATE'=290 +'CURRENT_TIME'=291 +'CURRENT_TIMESTAMP'=292 +'CURTIME'=293 +'DATE'=294 +'DATEDIFF'=295 +'DATE_ADD'=296 +'DATE_FORMAT'=297 +'DATE_SUB'=298 +'DAYNAME'=299 +'DAYOFMONTH'=300 +'DAYOFWEEK'=301 +'DAYOFYEAR'=302 +'DAY_OF_MONTH'=303 +'DAY_OF_WEEK'=304 +'EXTRACT'=305 +'FROM_DAYS'=306 +'FROM_UNIXTIME'=307 +'GET_FORMAT'=308 +'LAST_DAY'=309 +'LOCALTIME'=310 +'LOCALTIMESTAMP'=311 +'MAKEDATE'=312 +'MAKETIME'=313 +'MONTHNAME'=314 +'NOW'=315 +'PERIOD_ADD'=316 +'PERIOD_DIFF'=317 +'SEC_TO_TIME'=318 +'STR_TO_DATE'=319 +'SUBDATE'=320 +'SUBTIME'=321 +'SYSDATE'=322 +'TIME'=323 +'TIMEDIFF'=324 +'TIMESTAMP'=325 +'TIMESTAMPADD'=326 +'TIMESTAMPDIFF'=327 +'TIME_FORMAT'=328 +'TIME_TO_SEC'=329 +'TO_DAYS'=330 +'TO_SECONDS'=331 +'UNIX_TIMESTAMP'=332 +'UTC_DATE'=333 +'UTC_TIME'=334 +'UTC_TIMESTAMP'=335 +'WEEKDAY'=336 +'YEARWEEK'=337 +'STRFTIME'=338 +'SUBSTR'=339 +'SUBSTRING'=340 +'LTRIM'=341 +'RTRIM'=342 +'TRIM'=343 +'TO'=344 +'LOWER'=345 +'UPPER'=346 +'CONCAT'=347 +'CONCAT_WS'=348 +'LENGTH'=349 +'STRCMP'=350 +'RIGHT'=351 +'LEFT'=352 +'ASCII'=353 +'LOCATE'=354 +'REPLACE'=355 +'REVERSE'=356 +'CAST'=357 +'LIKE'=358 +'ISNULL'=359 +'ISNOTNULL'=360 +'CIDRMATCH'=361 +'BETWEEN'=362 +'ISPRESENT'=363 +'ISEMPTY'=364 +'ISBLANK'=365 +'ARRAY'=366 +'ARRAY_LENGTH'=367 +'MVJOIN'=368 +'FORALL'=369 +'FILTER'=370 +'TRANSFORM'=371 +'REDUCE'=372 +'JSON_VALID'=373 +'JSON'=374 +'JSON_OBJECT'=375 +'JSON_ARRAY'=376 +'JSON_ARRAY_LENGTH'=377 +'JSON_EXTRACT'=378 +'JSON_KEYS'=379 +'JSON_SET'=380 +'JSON_DELETE'=381 +'JSON_APPEND'=382 +'JSON_EXTEND'=383 +'IFNULL'=384 +'NULLIF'=385 +'IF'=386 +'TYPEOF'=387 +'COALESCE'=388 +'MATCH'=389 +'MATCH_PHRASE'=390 +'MATCH_PHRASE_PREFIX'=391 +'MATCH_BOOL_PREFIX'=392 +'SIMPLE_QUERY_STRING'=393 +'MULTI_MATCH'=394 +'QUERY_STRING'=395 +'ALLOW_LEADING_WILDCARD'=396 +'ANALYZE_WILDCARD'=397 +'ANALYZER'=398 +'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'=399 +'BOOST'=400 +'CUTOFF_FREQUENCY'=401 +'DEFAULT_FIELD'=402 +'DEFAULT_OPERATOR'=403 +'ENABLE_POSITION_INCREMENTS'=404 +'ESCAPE'=405 +'FLAGS'=406 +'FUZZY_MAX_EXPANSIONS'=407 +'FUZZY_PREFIX_LENGTH'=408 +'FUZZY_TRANSPOSITIONS'=409 +'FUZZY_REWRITE'=410 +'FUZZINESS'=411 +'LENIENT'=412 +'LOW_FREQ_OPERATOR'=413 +'MAX_DETERMINIZED_STATES'=414 +'MAX_EXPANSIONS'=415 +'MINIMUM_SHOULD_MATCH'=416 +'OPERATOR'=417 +'PHRASE_SLOP'=418 +'PREFIX_LENGTH'=419 +'QUOTE_ANALYZER'=420 +'QUOTE_FIELD_SUFFIX'=421 +'REWRITE'=422 +'SLOP'=423 +'TIE_BREAKER'=424 +'TYPE'=425 +'ZERO_TERMS_QUERY'=426 +'SPAN'=427 +'BINS'=428 +'MINSPAN'=429 +'START'=430 +'END'=431 +'ALIGNTIME'=432 +'MS'=433 +'S'=434 +'M'=435 +'H'=436 +'W'=437 +'Q'=438 +'Y'=439 +'SEC'=440 +'SECS'=441 +'SECONDS'=442 +'MINS'=443 +'MINUTES'=444 +'HR'=445 +'HRS'=446 +'HOURS'=447 +'DAYS'=448 +'MON'=449 +'MONTHS'=450 +'US'=451 +'CS'=452 +'DS'=453 diff --git a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParser.ts b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParser.ts index 5b3a30b39dcf..a85987158e86 100644 --- a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParser.ts +++ b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParser.ts @@ -15,615 +15,895 @@ export class OpenSearchPPLParser extends antlr.Parser { public static readonly SEARCH = 2; public static readonly DESCRIBE = 3; public static readonly SHOW = 4; - public static readonly FROM = 5; - public static readonly WHERE = 6; - public static readonly FIELDS = 7; - public static readonly RENAME = 8; - public static readonly STATS = 9; - public static readonly DEDUP = 10; - public static readonly SORT = 11; - public static readonly EVAL = 12; - public static readonly HEAD = 13; - public static readonly TOP = 14; - public static readonly RARE = 15; - public static readonly PARSE = 16; - public static readonly METHOD = 17; - public static readonly REGEX = 18; - public static readonly PUNCT = 19; - public static readonly GROK = 20; - public static readonly PATTERN = 21; - public static readonly PATTERNS = 22; - public static readonly NEW_FIELD = 23; - public static readonly KMEANS = 24; - public static readonly AD = 25; - public static readonly ML = 26; - public static readonly AS = 27; - public static readonly BY = 28; - public static readonly SOURCE = 29; - public static readonly INDEX = 30; - public static readonly D = 31; - public static readonly DESC = 32; - public static readonly DATASOURCES = 33; - public static readonly SORTBY = 34; - public static readonly AUTO = 35; - public static readonly STR = 36; - public static readonly IP = 37; - public static readonly NUM = 38; - public static readonly KEEPEMPTY = 39; - public static readonly CONSECUTIVE = 40; - public static readonly DEDUP_SPLITVALUES = 41; - public static readonly PARTITIONS = 42; - public static readonly ALLNUM = 43; - public static readonly DELIM = 44; - public static readonly CENTROIDS = 45; - public static readonly ITERATIONS = 46; - public static readonly DISTANCE_TYPE = 47; - public static readonly NUMBER_OF_TREES = 48; - public static readonly SHINGLE_SIZE = 49; - public static readonly SAMPLE_SIZE = 50; - public static readonly OUTPUT_AFTER = 51; - public static readonly TIME_DECAY = 52; - public static readonly ANOMALY_RATE = 53; - public static readonly CATEGORY_FIELD = 54; - public static readonly TIME_FIELD = 55; - public static readonly TIME_ZONE = 56; - public static readonly TRAINING_DATA_SIZE = 57; - public static readonly ANOMALY_SCORE_THRESHOLD = 58; - public static readonly CASE = 59; - public static readonly IN = 60; - public static readonly NOT = 61; - public static readonly OR = 62; - public static readonly AND = 63; - public static readonly XOR = 64; - public static readonly TRUE = 65; - public static readonly FALSE = 66; - public static readonly REGEXP = 67; - public static readonly CONVERT_TZ = 68; - public static readonly DATETIME = 69; - public static readonly DAY = 70; - public static readonly DAY_HOUR = 71; - public static readonly DAY_MICROSECOND = 72; - public static readonly DAY_MINUTE = 73; - public static readonly DAY_OF_YEAR = 74; - public static readonly DAY_SECOND = 75; - public static readonly HOUR = 76; - public static readonly HOUR_MICROSECOND = 77; - public static readonly HOUR_MINUTE = 78; - public static readonly HOUR_OF_DAY = 79; - public static readonly HOUR_SECOND = 80; - public static readonly INTERVAL = 81; - public static readonly MICROSECOND = 82; - public static readonly MILLISECOND = 83; - public static readonly MINUTE = 84; - public static readonly MINUTE_MICROSECOND = 85; - public static readonly MINUTE_OF_DAY = 86; - public static readonly MINUTE_OF_HOUR = 87; - public static readonly MINUTE_SECOND = 88; - public static readonly MONTH = 89; - public static readonly MONTH_OF_YEAR = 90; - public static readonly QUARTER = 91; - public static readonly SECOND = 92; - public static readonly SECOND_MICROSECOND = 93; - public static readonly SECOND_OF_MINUTE = 94; - public static readonly WEEK = 95; - public static readonly WEEK_OF_YEAR = 96; - public static readonly YEAR = 97; - public static readonly YEAR_MONTH = 98; - public static readonly DATAMODEL = 99; - public static readonly LOOKUP = 100; - public static readonly SAVEDSEARCH = 101; - public static readonly INT = 102; - public static readonly INTEGER = 103; - public static readonly DOUBLE = 104; - public static readonly LONG = 105; - public static readonly FLOAT = 106; - public static readonly STRING = 107; - public static readonly BOOLEAN = 108; - public static readonly PIPE = 109; - public static readonly COMMA = 110; - public static readonly DOT = 111; - public static readonly EQUAL = 112; - public static readonly GREATER = 113; - public static readonly LESS = 114; - public static readonly NOT_GREATER = 115; - public static readonly NOT_LESS = 116; - public static readonly NOT_EQUAL = 117; - public static readonly PLUS = 118; - public static readonly MINUS = 119; - public static readonly STAR = 120; - public static readonly DIVIDE = 121; - public static readonly MODULE = 122; - public static readonly EXCLAMATION_SYMBOL = 123; - public static readonly COLON = 124; - public static readonly LT_PRTHS = 125; - public static readonly RT_PRTHS = 126; - public static readonly LT_SQR_PRTHS = 127; - public static readonly RT_SQR_PRTHS = 128; - public static readonly SINGLE_QUOTE = 129; - public static readonly DOUBLE_QUOTE = 130; - public static readonly BACKTICK = 131; - public static readonly BIT_NOT_OP = 132; - public static readonly BIT_AND_OP = 133; - public static readonly BIT_XOR_OP = 134; - public static readonly AVG = 135; - public static readonly COUNT = 136; - public static readonly DISTINCT_COUNT = 137; - public static readonly ESTDC = 138; - public static readonly ESTDC_ERROR = 139; - public static readonly MAX = 140; - public static readonly MEAN = 141; - public static readonly MEDIAN = 142; - public static readonly MIN = 143; - public static readonly MODE = 144; - public static readonly RANGE = 145; - public static readonly STDEV = 146; - public static readonly STDEVP = 147; - public static readonly SUM = 148; - public static readonly SUMSQ = 149; - public static readonly VAR_SAMP = 150; - public static readonly VAR_POP = 151; - public static readonly STDDEV_SAMP = 152; - public static readonly STDDEV_POP = 153; - public static readonly PERCENTILE = 154; - public static readonly TAKE = 155; - public static readonly FIRST = 156; - public static readonly LAST = 157; - public static readonly LIST = 158; - public static readonly VALUES = 159; - public static readonly EARLIEST = 160; - public static readonly EARLIEST_TIME = 161; - public static readonly LATEST = 162; - public static readonly LATEST_TIME = 163; - public static readonly PER_DAY = 164; - public static readonly PER_HOUR = 165; - public static readonly PER_MINUTE = 166; - public static readonly PER_SECOND = 167; - public static readonly RATE = 168; - public static readonly SPARKLINE = 169; - public static readonly C = 170; - public static readonly DC = 171; - public static readonly ABS = 172; - public static readonly CBRT = 173; - public static readonly CEIL = 174; - public static readonly CEILING = 175; - public static readonly CONV = 176; - public static readonly CRC32 = 177; - public static readonly E = 178; - public static readonly EXP = 179; - public static readonly FLOOR = 180; - public static readonly LN = 181; - public static readonly LOG = 182; - public static readonly LOG10 = 183; - public static readonly LOG2 = 184; - public static readonly MOD = 185; - public static readonly PI = 186; - public static readonly POSITION = 187; - public static readonly POW = 188; - public static readonly POWER = 189; - public static readonly RAND = 190; - public static readonly ROUND = 191; - public static readonly SIGN = 192; - public static readonly SQRT = 193; - public static readonly TRUNCATE = 194; - public static readonly ACOS = 195; - public static readonly ASIN = 196; - public static readonly ATAN = 197; - public static readonly ATAN2 = 198; - public static readonly COS = 199; - public static readonly COT = 200; - public static readonly DEGREES = 201; - public static readonly RADIANS = 202; - public static readonly SIN = 203; - public static readonly TAN = 204; - public static readonly ADDDATE = 205; - public static readonly ADDTIME = 206; - public static readonly CURDATE = 207; - public static readonly CURRENT_DATE = 208; - public static readonly CURRENT_TIME = 209; - public static readonly CURRENT_TIMESTAMP = 210; - public static readonly CURTIME = 211; - public static readonly DATE = 212; - public static readonly DATEDIFF = 213; - public static readonly DATE_ADD = 214; - public static readonly DATE_FORMAT = 215; - public static readonly DATE_SUB = 216; - public static readonly DAYNAME = 217; - public static readonly DAYOFMONTH = 218; - public static readonly DAYOFWEEK = 219; - public static readonly DAYOFYEAR = 220; - public static readonly DAY_OF_MONTH = 221; - public static readonly DAY_OF_WEEK = 222; - public static readonly EXTRACT = 223; - public static readonly FROM_DAYS = 224; - public static readonly FROM_UNIXTIME = 225; - public static readonly GET_FORMAT = 226; - public static readonly LAST_DAY = 227; - public static readonly LOCALTIME = 228; - public static readonly LOCALTIMESTAMP = 229; - public static readonly MAKEDATE = 230; - public static readonly MAKETIME = 231; - public static readonly MONTHNAME = 232; - public static readonly NOW = 233; - public static readonly PERIOD_ADD = 234; - public static readonly PERIOD_DIFF = 235; - public static readonly SEC_TO_TIME = 236; - public static readonly STR_TO_DATE = 237; - public static readonly SUBDATE = 238; - public static readonly SUBTIME = 239; - public static readonly SYSDATE = 240; - public static readonly TIME = 241; - public static readonly TIMEDIFF = 242; - public static readonly TIMESTAMP = 243; - public static readonly TIMESTAMPADD = 244; - public static readonly TIMESTAMPDIFF = 245; - public static readonly TIME_FORMAT = 246; - public static readonly TIME_TO_SEC = 247; - public static readonly TO_DAYS = 248; - public static readonly TO_SECONDS = 249; - public static readonly UNIX_TIMESTAMP = 250; - public static readonly UTC_DATE = 251; - public static readonly UTC_TIME = 252; - public static readonly UTC_TIMESTAMP = 253; - public static readonly WEEKDAY = 254; - public static readonly YEARWEEK = 255; - public static readonly SUBSTR = 256; - public static readonly SUBSTRING = 257; - public static readonly LTRIM = 258; - public static readonly RTRIM = 259; - public static readonly TRIM = 260; - public static readonly TO = 261; - public static readonly LOWER = 262; - public static readonly UPPER = 263; - public static readonly CONCAT = 264; - public static readonly CONCAT_WS = 265; - public static readonly LENGTH = 266; - public static readonly STRCMP = 267; - public static readonly RIGHT = 268; - public static readonly LEFT = 269; - public static readonly ASCII = 270; - public static readonly LOCATE = 271; - public static readonly REPLACE = 272; - public static readonly REVERSE = 273; - public static readonly CAST = 274; - public static readonly LIKE = 275; - public static readonly ISNULL = 276; - public static readonly ISNOTNULL = 277; - public static readonly IFNULL = 278; - public static readonly NULLIF = 279; - public static readonly IF = 280; - public static readonly TYPEOF = 281; - public static readonly MATCH = 282; - public static readonly MATCH_PHRASE = 283; - public static readonly MATCH_PHRASE_PREFIX = 284; - public static readonly MATCH_BOOL_PREFIX = 285; - public static readonly SIMPLE_QUERY_STRING = 286; - public static readonly MULTI_MATCH = 287; - public static readonly QUERY_STRING = 288; - public static readonly ALLOW_LEADING_WILDCARD = 289; - public static readonly ANALYZE_WILDCARD = 290; - public static readonly ANALYZER = 291; - public static readonly AUTO_GENERATE_SYNONYMS_PHRASE_QUERY = 292; - public static readonly BOOST = 293; - public static readonly CUTOFF_FREQUENCY = 294; - public static readonly DEFAULT_FIELD = 295; - public static readonly DEFAULT_OPERATOR = 296; - public static readonly ENABLE_POSITION_INCREMENTS = 297; - public static readonly ESCAPE = 298; - public static readonly FLAGS = 299; - public static readonly FUZZY_MAX_EXPANSIONS = 300; - public static readonly FUZZY_PREFIX_LENGTH = 301; - public static readonly FUZZY_TRANSPOSITIONS = 302; - public static readonly FUZZY_REWRITE = 303; - public static readonly FUZZINESS = 304; - public static readonly LENIENT = 305; - public static readonly LOW_FREQ_OPERATOR = 306; - public static readonly MAX_DETERMINIZED_STATES = 307; - public static readonly MAX_EXPANSIONS = 308; - public static readonly MINIMUM_SHOULD_MATCH = 309; - public static readonly OPERATOR = 310; - public static readonly PHRASE_SLOP = 311; - public static readonly PREFIX_LENGTH = 312; - public static readonly QUOTE_ANALYZER = 313; - public static readonly QUOTE_FIELD_SUFFIX = 314; - public static readonly REWRITE = 315; - public static readonly SLOP = 316; - public static readonly TIE_BREAKER = 317; - public static readonly TYPE = 318; - public static readonly ZERO_TERMS_QUERY = 319; - public static readonly SPAN = 320; - public static readonly MS = 321; - public static readonly S = 322; - public static readonly M = 323; - public static readonly H = 324; - public static readonly W = 325; - public static readonly Q = 326; - public static readonly Y = 327; - public static readonly ID = 328; - public static readonly CLUSTER = 329; - public static readonly INTEGER_LITERAL = 330; - public static readonly DECIMAL_LITERAL = 331; - public static readonly ID_DATE_SUFFIX = 332; - public static readonly DQUOTA_STRING = 333; - public static readonly SQUOTA_STRING = 334; - public static readonly BQUOTA_STRING = 335; - public static readonly ERROR_RECOGNITION = 336; + public static readonly EXPLAIN = 5; + public static readonly FROM = 6; + public static readonly WHERE = 7; + public static readonly FIELDS = 8; + public static readonly FIELD = 9; + public static readonly TABLE = 10; + public static readonly RENAME = 11; + public static readonly STATS = 12; + public static readonly EVENTSTATS = 13; + public static readonly DEDUP = 14; + public static readonly SORT = 15; + public static readonly EVAL = 16; + public static readonly HEAD = 17; + public static readonly BIN = 18; + public static readonly TOP = 19; + public static readonly RARE = 20; + public static readonly PARSE = 21; + public static readonly SPATH = 22; + public static readonly REGEX = 23; + public static readonly REX = 24; + public static readonly SED = 25; + public static readonly PUNCT = 26; + public static readonly GROK = 27; + public static readonly PATTERN = 28; + public static readonly PATTERNS = 29; + public static readonly NEW_FIELD = 30; + public static readonly KMEANS = 31; + public static readonly AD = 32; + public static readonly ML = 33; + public static readonly FILLNULL = 34; + public static readonly FLATTEN = 35; + public static readonly TRENDLINE = 36; + public static readonly TIMECHART = 37; + public static readonly APPENDCOL = 38; + public static readonly EXPAND = 39; + public static readonly SIMPLE_PATTERN = 40; + public static readonly BRAIN = 41; + public static readonly VARIABLE_COUNT_THRESHOLD = 42; + public static readonly FREQUENCY_THRESHOLD_PERCENTAGE = 43; + public static readonly METHOD = 44; + public static readonly MAX_SAMPLE_COUNT = 45; + public static readonly MAX_MATCH = 46; + public static readonly OFFSET_FIELD = 47; + public static readonly BUFFER_LIMIT = 48; + public static readonly LABEL = 49; + public static readonly AGGREGATION = 50; + public static readonly JOIN = 51; + public static readonly ON = 52; + public static readonly INNER = 53; + public static readonly OUTER = 54; + public static readonly FULL = 55; + public static readonly SEMI = 56; + public static readonly ANTI = 57; + public static readonly CROSS = 58; + public static readonly LEFT_HINT = 59; + public static readonly RIGHT_HINT = 60; + public static readonly AS = 61; + public static readonly BY = 62; + public static readonly SOURCE = 63; + public static readonly INDEX = 64; + public static readonly A = 65; + public static readonly ASC = 66; + public static readonly D = 67; + public static readonly DESC = 68; + public static readonly DATASOURCES = 69; + public static readonly USING = 70; + public static readonly WITH = 71; + public static readonly SIMPLE = 72; + public static readonly STANDARD = 73; + public static readonly COST = 74; + public static readonly EXTENDED = 75; + public static readonly OVERRIDE = 76; + public static readonly OVERWRITE = 77; + public static readonly AUTO = 78; + public static readonly STR = 79; + public static readonly NUM = 80; + public static readonly SMA = 81; + public static readonly WMA = 82; + public static readonly KEEPEMPTY = 83; + public static readonly CONSECUTIVE = 84; + public static readonly DEDUP_SPLITVALUES = 85; + public static readonly PARTITIONS = 86; + public static readonly ALLNUM = 87; + public static readonly DELIM = 88; + public static readonly BUCKET_NULLABLE = 89; + public static readonly CENTROIDS = 90; + public static readonly ITERATIONS = 91; + public static readonly DISTANCE_TYPE = 92; + public static readonly NUMBER_OF_TREES = 93; + public static readonly SHINGLE_SIZE = 94; + public static readonly SAMPLE_SIZE = 95; + public static readonly OUTPUT_AFTER = 96; + public static readonly TIME_DECAY = 97; + public static readonly ANOMALY_RATE = 98; + public static readonly CATEGORY_FIELD = 99; + public static readonly TIME_FIELD = 100; + public static readonly TIME_ZONE = 101; + public static readonly TRAINING_DATA_SIZE = 102; + public static readonly ANOMALY_SCORE_THRESHOLD = 103; + public static readonly APPEND = 104; + public static readonly COUNTFIELD = 105; + public static readonly SHOWCOUNT = 106; + public static readonly LIMIT = 107; + public static readonly USEOTHER = 108; + public static readonly INPUT = 109; + public static readonly OUTPUT = 110; + public static readonly PATH = 111; + public static readonly CASE = 112; + public static readonly ELSE = 113; + public static readonly IN = 114; + public static readonly EXISTS = 115; + public static readonly GEOIP = 116; + public static readonly NOT = 117; + public static readonly OR = 118; + public static readonly AND = 119; + public static readonly XOR = 120; + public static readonly TRUE = 121; + public static readonly FALSE = 122; + public static readonly REGEXP = 123; + public static readonly REGEX_MATCH = 124; + public static readonly CONVERT_TZ = 125; + public static readonly DATETIME = 126; + public static readonly DAY = 127; + public static readonly DAY_HOUR = 128; + public static readonly DAY_MICROSECOND = 129; + public static readonly DAY_MINUTE = 130; + public static readonly DAY_OF_YEAR = 131; + public static readonly DAY_SECOND = 132; + public static readonly HOUR = 133; + public static readonly HOUR_MICROSECOND = 134; + public static readonly HOUR_MINUTE = 135; + public static readonly HOUR_OF_DAY = 136; + public static readonly HOUR_SECOND = 137; + public static readonly INTERVAL = 138; + public static readonly MICROSECOND = 139; + public static readonly MILLISECOND = 140; + public static readonly MINUTE = 141; + public static readonly MINUTE_MICROSECOND = 142; + public static readonly MINUTE_OF_DAY = 143; + public static readonly MINUTE_OF_HOUR = 144; + public static readonly MINUTE_SECOND = 145; + public static readonly MONTH = 146; + public static readonly MONTH_OF_YEAR = 147; + public static readonly QUARTER = 148; + public static readonly SECOND = 149; + public static readonly SECOND_MICROSECOND = 150; + public static readonly SECOND_OF_MINUTE = 151; + public static readonly WEEK = 152; + public static readonly WEEK_OF_YEAR = 153; + public static readonly YEAR = 154; + public static readonly YEAR_MONTH = 155; + public static readonly DATAMODEL = 156; + public static readonly LOOKUP = 157; + public static readonly SAVEDSEARCH = 158; + public static readonly INT = 159; + public static readonly INTEGER = 160; + public static readonly DOUBLE = 161; + public static readonly LONG = 162; + public static readonly FLOAT = 163; + public static readonly STRING = 164; + public static readonly BOOLEAN = 165; + public static readonly IP = 166; + public static readonly PIPE = 167; + public static readonly COMMA = 168; + public static readonly DOT = 169; + public static readonly EQUAL = 170; + public static readonly DOUBLE_EQUAL = 171; + public static readonly GREATER = 172; + public static readonly LESS = 173; + public static readonly NOT_GREATER = 174; + public static readonly NOT_LESS = 175; + public static readonly NOT_EQUAL = 176; + public static readonly PLUS = 177; + public static readonly MINUS = 178; + public static readonly STAR = 179; + public static readonly DIVIDE = 180; + public static readonly MODULE = 181; + public static readonly EXCLAMATION_SYMBOL = 182; + public static readonly COLON = 183; + public static readonly LT_PRTHS = 184; + public static readonly RT_PRTHS = 185; + public static readonly LT_SQR_PRTHS = 186; + public static readonly RT_SQR_PRTHS = 187; + public static readonly LT_CURLY = 188; + public static readonly RT_CURLY = 189; + public static readonly SINGLE_QUOTE = 190; + public static readonly DOUBLE_QUOTE = 191; + public static readonly BACKTICK = 192; + public static readonly ARROW = 193; + public static readonly BIT_NOT_OP = 194; + public static readonly BIT_AND_OP = 195; + public static readonly BIT_XOR_OP = 196; + public static readonly AVG = 197; + public static readonly COUNT = 198; + public static readonly DISTINCT_COUNT = 199; + public static readonly DISTINCT_COUNT_APPROX = 200; + public static readonly ESTDC = 201; + public static readonly ESTDC_ERROR = 202; + public static readonly MAX = 203; + public static readonly MEAN = 204; + public static readonly MEDIAN = 205; + public static readonly MIN = 206; + public static readonly MODE = 207; + public static readonly RANGE = 208; + public static readonly STDEV = 209; + public static readonly STDEVP = 210; + public static readonly SUM = 211; + public static readonly SUMSQ = 212; + public static readonly VAR_SAMP = 213; + public static readonly VAR_POP = 214; + public static readonly STDDEV_SAMP = 215; + public static readonly STDDEV_POP = 216; + public static readonly PERC = 217; + public static readonly PERCENTILE = 218; + public static readonly PERCENTILE_APPROX = 219; + public static readonly EARLIEST = 220; + public static readonly LATEST = 221; + public static readonly TAKE = 222; + public static readonly LIST = 223; + public static readonly VALUES = 224; + public static readonly PER_DAY = 225; + public static readonly PER_HOUR = 226; + public static readonly PER_MINUTE = 227; + public static readonly PER_SECOND = 228; + public static readonly RATE = 229; + public static readonly SPARKLINE = 230; + public static readonly C = 231; + public static readonly DC = 232; + public static readonly ROW_NUMBER = 233; + public static readonly RANK = 234; + public static readonly DENSE_RANK = 235; + public static readonly PERCENT_RANK = 236; + public static readonly CUME_DIST = 237; + public static readonly FIRST = 238; + public static readonly LAST = 239; + public static readonly NTH = 240; + public static readonly NTILE = 241; + public static readonly PLUS_FUCTION = 242; + public static readonly MINUS_FUCTION = 243; + public static readonly STAR_FUNCTION = 244; + public static readonly DIVIDE_FUNCTION = 245; + public static readonly ABS = 246; + public static readonly CBRT = 247; + public static readonly CEIL = 248; + public static readonly CEILING = 249; + public static readonly CONV = 250; + public static readonly CRC32 = 251; + public static readonly E = 252; + public static readonly EXP = 253; + public static readonly EXPM1 = 254; + public static readonly FLOOR = 255; + public static readonly LN = 256; + public static readonly LOG = 257; + public static readonly LOG_WITH_BASE = 258; + public static readonly MOD = 259; + public static readonly MODULUS = 260; + public static readonly PI = 261; + public static readonly POSITION = 262; + public static readonly POW = 263; + public static readonly POWER = 264; + public static readonly RAND = 265; + public static readonly ROUND = 266; + public static readonly SIGN = 267; + public static readonly SQRT = 268; + public static readonly TRUNCATE = 269; + public static readonly RINT = 270; + public static readonly SIGNUM = 271; + public static readonly ACOS = 272; + public static readonly ASIN = 273; + public static readonly ATAN = 274; + public static readonly ATAN2 = 275; + public static readonly COS = 276; + public static readonly COSH = 277; + public static readonly COT = 278; + public static readonly DEGREES = 279; + public static readonly RADIANS = 280; + public static readonly SIN = 281; + public static readonly SINH = 282; + public static readonly TAN = 283; + public static readonly MD5 = 284; + public static readonly SHA1 = 285; + public static readonly SHA2 = 286; + public static readonly ADDDATE = 287; + public static readonly ADDTIME = 288; + public static readonly CURDATE = 289; + public static readonly CURRENT_DATE = 290; + public static readonly CURRENT_TIME = 291; + public static readonly CURRENT_TIMESTAMP = 292; + public static readonly CURTIME = 293; + public static readonly DATE = 294; + public static readonly DATEDIFF = 295; + public static readonly DATE_ADD = 296; + public static readonly DATE_FORMAT = 297; + public static readonly DATE_SUB = 298; + public static readonly DAYNAME = 299; + public static readonly DAYOFMONTH = 300; + public static readonly DAYOFWEEK = 301; + public static readonly DAYOFYEAR = 302; + public static readonly DAY_OF_MONTH = 303; + public static readonly DAY_OF_WEEK = 304; + public static readonly EXTRACT = 305; + public static readonly FROM_DAYS = 306; + public static readonly FROM_UNIXTIME = 307; + public static readonly GET_FORMAT = 308; + public static readonly LAST_DAY = 309; + public static readonly LOCALTIME = 310; + public static readonly LOCALTIMESTAMP = 311; + public static readonly MAKEDATE = 312; + public static readonly MAKETIME = 313; + public static readonly MONTHNAME = 314; + public static readonly NOW = 315; + public static readonly PERIOD_ADD = 316; + public static readonly PERIOD_DIFF = 317; + public static readonly SEC_TO_TIME = 318; + public static readonly STR_TO_DATE = 319; + public static readonly SUBDATE = 320; + public static readonly SUBTIME = 321; + public static readonly SYSDATE = 322; + public static readonly TIME = 323; + public static readonly TIMEDIFF = 324; + public static readonly TIMESTAMP = 325; + public static readonly TIMESTAMPADD = 326; + public static readonly TIMESTAMPDIFF = 327; + public static readonly TIME_FORMAT = 328; + public static readonly TIME_TO_SEC = 329; + public static readonly TO_DAYS = 330; + public static readonly TO_SECONDS = 331; + public static readonly UNIX_TIMESTAMP = 332; + public static readonly UTC_DATE = 333; + public static readonly UTC_TIME = 334; + public static readonly UTC_TIMESTAMP = 335; + public static readonly WEEKDAY = 336; + public static readonly YEARWEEK = 337; + public static readonly STRFTIME = 338; + public static readonly SUBSTR = 339; + public static readonly SUBSTRING = 340; + public static readonly LTRIM = 341; + public static readonly RTRIM = 342; + public static readonly TRIM = 343; + public static readonly TO = 344; + public static readonly LOWER = 345; + public static readonly UPPER = 346; + public static readonly CONCAT = 347; + public static readonly CONCAT_WS = 348; + public static readonly LENGTH = 349; + public static readonly STRCMP = 350; + public static readonly RIGHT = 351; + public static readonly LEFT = 352; + public static readonly ASCII = 353; + public static readonly LOCATE = 354; + public static readonly REPLACE = 355; + public static readonly REVERSE = 356; + public static readonly CAST = 357; + public static readonly LIKE = 358; + public static readonly ISNULL = 359; + public static readonly ISNOTNULL = 360; + public static readonly CIDRMATCH = 361; + public static readonly BETWEEN = 362; + public static readonly ISPRESENT = 363; + public static readonly ISEMPTY = 364; + public static readonly ISBLANK = 365; + public static readonly ARRAY = 366; + public static readonly ARRAY_LENGTH = 367; + public static readonly MVJOIN = 368; + public static readonly FORALL = 369; + public static readonly FILTER = 370; + public static readonly TRANSFORM = 371; + public static readonly REDUCE = 372; + public static readonly JSON_VALID = 373; + public static readonly JSON = 374; + public static readonly JSON_OBJECT = 375; + public static readonly JSON_ARRAY = 376; + public static readonly JSON_ARRAY_LENGTH = 377; + public static readonly JSON_EXTRACT = 378; + public static readonly JSON_KEYS = 379; + public static readonly JSON_SET = 380; + public static readonly JSON_DELETE = 381; + public static readonly JSON_APPEND = 382; + public static readonly JSON_EXTEND = 383; + public static readonly IFNULL = 384; + public static readonly NULLIF = 385; + public static readonly IF = 386; + public static readonly TYPEOF = 387; + public static readonly COALESCE = 388; + public static readonly MATCH = 389; + public static readonly MATCH_PHRASE = 390; + public static readonly MATCH_PHRASE_PREFIX = 391; + public static readonly MATCH_BOOL_PREFIX = 392; + public static readonly SIMPLE_QUERY_STRING = 393; + public static readonly MULTI_MATCH = 394; + public static readonly QUERY_STRING = 395; + public static readonly ALLOW_LEADING_WILDCARD = 396; + public static readonly ANALYZE_WILDCARD = 397; + public static readonly ANALYZER = 398; + public static readonly AUTO_GENERATE_SYNONYMS_PHRASE_QUERY = 399; + public static readonly BOOST = 400; + public static readonly CUTOFF_FREQUENCY = 401; + public static readonly DEFAULT_FIELD = 402; + public static readonly DEFAULT_OPERATOR = 403; + public static readonly ENABLE_POSITION_INCREMENTS = 404; + public static readonly ESCAPE = 405; + public static readonly FLAGS = 406; + public static readonly FUZZY_MAX_EXPANSIONS = 407; + public static readonly FUZZY_PREFIX_LENGTH = 408; + public static readonly FUZZY_TRANSPOSITIONS = 409; + public static readonly FUZZY_REWRITE = 410; + public static readonly FUZZINESS = 411; + public static readonly LENIENT = 412; + public static readonly LOW_FREQ_OPERATOR = 413; + public static readonly MAX_DETERMINIZED_STATES = 414; + public static readonly MAX_EXPANSIONS = 415; + public static readonly MINIMUM_SHOULD_MATCH = 416; + public static readonly OPERATOR = 417; + public static readonly PHRASE_SLOP = 418; + public static readonly PREFIX_LENGTH = 419; + public static readonly QUOTE_ANALYZER = 420; + public static readonly QUOTE_FIELD_SUFFIX = 421; + public static readonly REWRITE = 422; + public static readonly SLOP = 423; + public static readonly TIE_BREAKER = 424; + public static readonly TYPE = 425; + public static readonly ZERO_TERMS_QUERY = 426; + public static readonly SPAN = 427; + public static readonly BINS = 428; + public static readonly MINSPAN = 429; + public static readonly START = 430; + public static readonly END = 431; + public static readonly ALIGNTIME = 432; + public static readonly MS = 433; + public static readonly S = 434; + public static readonly M = 435; + public static readonly H = 436; + public static readonly W = 437; + public static readonly Q = 438; + public static readonly Y = 439; + public static readonly SEC = 440; + public static readonly SECS = 441; + public static readonly SECONDS = 442; + public static readonly MINS = 443; + public static readonly MINUTES = 444; + public static readonly HR = 445; + public static readonly HRS = 446; + public static readonly HOURS = 447; + public static readonly DAYS = 448; + public static readonly MON = 449; + public static readonly MONTHS = 450; + public static readonly US = 451; + public static readonly CS = 452; + public static readonly DS = 453; + public static readonly PERCENTILE_SHORTCUT = 454; + public static readonly ID = 455; + public static readonly CLUSTER = 456; + public static readonly INTEGER_LITERAL = 457; + public static readonly DECIMAL_LITERAL = 458; + public static readonly FLOAT_LITERAL = 459; + public static readonly DOUBLE_LITERAL = 460; + public static readonly ID_DATE_SUFFIX = 461; + public static readonly DQUOTA_STRING = 462; + public static readonly SQUOTA_STRING = 463; + public static readonly BQUOTA_STRING = 464; + public static readonly LINE_COMMENT = 465; + public static readonly BLOCK_COMMENT = 466; + public static readonly ERROR_RECOGNITION = 467; public static readonly RULE_root = 0; public static readonly RULE_pplStatement = 1; - public static readonly RULE_dmlStatement = 2; - public static readonly RULE_queryStatement = 3; - public static readonly RULE_pplCommands = 4; - public static readonly RULE_commands = 5; - public static readonly RULE_searchCommand = 6; - public static readonly RULE_describeCommand = 7; - public static readonly RULE_showDataSourcesCommand = 8; - public static readonly RULE_whereCommand = 9; - public static readonly RULE_fieldsCommand = 10; - public static readonly RULE_renameCommand = 11; - public static readonly RULE_statsCommand = 12; - public static readonly RULE_dedupCommand = 13; - public static readonly RULE_sortCommand = 14; - public static readonly RULE_evalCommand = 15; - public static readonly RULE_headCommand = 16; - public static readonly RULE_topCommand = 17; - public static readonly RULE_rareCommand = 18; - public static readonly RULE_grokCommand = 19; - public static readonly RULE_parseCommand = 20; - public static readonly RULE_patternsCommand = 21; - public static readonly RULE_patternsParameter = 22; - public static readonly RULE_patternsMethod = 23; - public static readonly RULE_kmeansCommand = 24; - public static readonly RULE_kmeansParameter = 25; - public static readonly RULE_adCommand = 26; - public static readonly RULE_adParameter = 27; - public static readonly RULE_mlCommand = 28; - public static readonly RULE_mlArg = 29; - public static readonly RULE_fromClause = 30; - public static readonly RULE_tableSourceClause = 31; - public static readonly RULE_renameClasue = 32; - public static readonly RULE_byClause = 33; - public static readonly RULE_statsByClause = 34; - public static readonly RULE_bySpanClause = 35; - public static readonly RULE_spanClause = 36; - public static readonly RULE_sortbyClause = 37; - public static readonly RULE_evalClause = 38; - public static readonly RULE_statsAggTerm = 39; - public static readonly RULE_statsFunction = 40; - public static readonly RULE_statsFunctionName = 41; - public static readonly RULE_takeAggFunction = 42; - public static readonly RULE_percentileAggFunction = 43; - public static readonly RULE_expression = 44; - public static readonly RULE_logicalExpression = 45; - public static readonly RULE_logicalOrExpression = 46; - public static readonly RULE_logicalXorExpression = 47; - public static readonly RULE_logicalAndExpression = 48; - public static readonly RULE_logicalNotExpression = 49; - public static readonly RULE_primaryLogicalExpression = 50; - public static readonly RULE_comparisonExpression = 51; - public static readonly RULE_valueExpression = 52; - public static readonly RULE_primaryExpression = 53; - public static readonly RULE_positionFunction = 54; - public static readonly RULE_booleanExpression = 55; - public static readonly RULE_relevanceExpression = 56; - public static readonly RULE_singleFieldRelevanceFunction = 57; - public static readonly RULE_multiFieldRelevanceFunction = 58; - public static readonly RULE_tableSource = 59; - public static readonly RULE_tableFunction = 60; - public static readonly RULE_fieldList = 61; - public static readonly RULE_wcFieldList = 62; - public static readonly RULE_sortField = 63; - public static readonly RULE_sortFieldExpression = 64; - public static readonly RULE_fieldExpression = 65; - public static readonly RULE_wcFieldExpression = 66; - public static readonly RULE_evalFunctionCall = 67; - public static readonly RULE_dataTypeFunctionCall = 68; - public static readonly RULE_booleanFunctionCall = 69; - public static readonly RULE_convertedDataType = 70; - public static readonly RULE_evalFunctionName = 71; - public static readonly RULE_functionArgs = 72; - public static readonly RULE_functionArg = 73; - public static readonly RULE_relevanceArg = 74; - public static readonly RULE_relevanceArgName = 75; - public static readonly RULE_relevanceFieldAndWeight = 76; - public static readonly RULE_relevanceFieldWeight = 77; - public static readonly RULE_relevanceField = 78; - public static readonly RULE_relevanceQuery = 79; - public static readonly RULE_relevanceArgValue = 80; - public static readonly RULE_mathematicalFunctionName = 81; - public static readonly RULE_trigonometricFunctionName = 82; - public static readonly RULE_dateTimeFunctionName = 83; - public static readonly RULE_getFormatFunction = 84; - public static readonly RULE_getFormatType = 85; - public static readonly RULE_extractFunction = 86; - public static readonly RULE_simpleDateTimePart = 87; - public static readonly RULE_complexDateTimePart = 88; - public static readonly RULE_datetimePart = 89; - public static readonly RULE_timestampFunction = 90; - public static readonly RULE_timestampFunctionName = 91; - public static readonly RULE_conditionFunctionBase = 92; - public static readonly RULE_systemFunctionName = 93; - public static readonly RULE_textFunctionName = 94; - public static readonly RULE_positionFunctionName = 95; - public static readonly RULE_comparisonOperator = 96; - public static readonly RULE_singleFieldRelevanceFunctionName = 97; - public static readonly RULE_multiFieldRelevanceFunctionName = 98; - public static readonly RULE_literalValue = 99; - public static readonly RULE_intervalLiteral = 100; - public static readonly RULE_stringLiteral = 101; - public static readonly RULE_integerLiteral = 102; - public static readonly RULE_decimalLiteral = 103; - public static readonly RULE_booleanLiteral = 104; - public static readonly RULE_datetimeLiteral = 105; - public static readonly RULE_dateLiteral = 106; - public static readonly RULE_timeLiteral = 107; - public static readonly RULE_timestampLiteral = 108; - public static readonly RULE_intervalUnit = 109; - public static readonly RULE_timespanUnit = 110; - public static readonly RULE_valueList = 111; - public static readonly RULE_qualifiedName = 112; - public static readonly RULE_tableQualifiedName = 113; - public static readonly RULE_wcQualifiedName = 114; - public static readonly RULE_ident = 115; - public static readonly RULE_tableIdent = 116; - public static readonly RULE_wildcard = 117; - public static readonly RULE_keywordsCanBeId = 118; + public static readonly RULE_queryStatement = 2; + public static readonly RULE_explainStatement = 3; + public static readonly RULE_explainMode = 4; + public static readonly RULE_subSearch = 5; + public static readonly RULE_pplCommands = 6; + public static readonly RULE_commands = 7; + public static readonly RULE_commandName = 8; + public static readonly RULE_searchCommand = 9; + public static readonly RULE_searchExpression = 10; + public static readonly RULE_searchTerm = 11; + public static readonly RULE_searchLiteral = 12; + public static readonly RULE_searchFieldComparison = 13; + public static readonly RULE_searchFieldInList = 14; + public static readonly RULE_searchLiteralList = 15; + public static readonly RULE_searchComparisonOperator = 16; + public static readonly RULE_describeCommand = 17; + public static readonly RULE_showDataSourcesCommand = 18; + public static readonly RULE_whereCommand = 19; + public static readonly RULE_fieldsCommand = 20; + public static readonly RULE_tableCommand = 21; + public static readonly RULE_fieldsCommandBody = 22; + public static readonly RULE_wcFieldList = 23; + public static readonly RULE_renameCommand = 24; + public static readonly RULE_statsCommand = 25; + public static readonly RULE_statsArgs = 26; + public static readonly RULE_partitionsArg = 27; + public static readonly RULE_allnumArg = 28; + public static readonly RULE_delimArg = 29; + public static readonly RULE_bucketNullableArg = 30; + public static readonly RULE_dedupSplitArg = 31; + public static readonly RULE_eventstatsCommand = 32; + public static readonly RULE_dedupCommand = 33; + public static readonly RULE_sortCommand = 34; + public static readonly RULE_reverseCommand = 35; + public static readonly RULE_timechartCommand = 36; + public static readonly RULE_timechartParameter = 37; + public static readonly RULE_timechartArg = 38; + public static readonly RULE_spanLiteral = 39; + public static readonly RULE_evalCommand = 40; + public static readonly RULE_headCommand = 41; + public static readonly RULE_binCommand = 42; + public static readonly RULE_binOption = 43; + public static readonly RULE_aligntimeValue = 44; + public static readonly RULE_spanValue = 45; + public static readonly RULE_logSpanValue = 46; + public static readonly RULE_topCommand = 47; + public static readonly RULE_rareCommand = 48; + public static readonly RULE_grokCommand = 49; + public static readonly RULE_parseCommand = 50; + public static readonly RULE_spathCommand = 51; + public static readonly RULE_spathParameter = 52; + public static readonly RULE_indexablePath = 53; + public static readonly RULE_pathElement = 54; + public static readonly RULE_pathArrayAccess = 55; + public static readonly RULE_regexCommand = 56; + public static readonly RULE_regexExpr = 57; + public static readonly RULE_rexCommand = 58; + public static readonly RULE_rexExpr = 59; + public static readonly RULE_rexOption = 60; + public static readonly RULE_patternsMethod = 61; + public static readonly RULE_patternsCommand = 62; + public static readonly RULE_patternsParameter = 63; + public static readonly RULE_patternMethod = 64; + public static readonly RULE_patternMode = 65; + public static readonly RULE_lookupCommand = 66; + public static readonly RULE_lookupMappingList = 67; + public static readonly RULE_outputCandidateList = 68; + public static readonly RULE_lookupPair = 69; + public static readonly RULE_fillnullCommand = 70; + public static readonly RULE_fillNullWith = 71; + public static readonly RULE_fillNullUsing = 72; + public static readonly RULE_replacementPair = 73; + public static readonly RULE_trendlineCommand = 74; + public static readonly RULE_trendlineClause = 75; + public static readonly RULE_trendlineType = 76; + public static readonly RULE_expandCommand = 77; + public static readonly RULE_flattenCommand = 78; + public static readonly RULE_appendcolCommand = 79; + public static readonly RULE_appendCommand = 80; + public static readonly RULE_kmeansCommand = 81; + public static readonly RULE_kmeansParameter = 82; + public static readonly RULE_adCommand = 83; + public static readonly RULE_adParameter = 84; + public static readonly RULE_mlCommand = 85; + public static readonly RULE_mlArg = 86; + public static readonly RULE_fromClause = 87; + public static readonly RULE_tableOrSubqueryClause = 88; + public static readonly RULE_tableSourceClause = 89; + public static readonly RULE_dynamicSourceClause = 90; + public static readonly RULE_sourceReferences = 91; + public static readonly RULE_sourceReference = 92; + public static readonly RULE_sourceFilterArgs = 93; + public static readonly RULE_sourceFilterArg = 94; + public static readonly RULE_joinCommand = 95; + public static readonly RULE_sqlLikeJoinType = 96; + public static readonly RULE_joinType = 97; + public static readonly RULE_sideAlias = 98; + public static readonly RULE_joinCriteria = 99; + public static readonly RULE_joinHintList = 100; + public static readonly RULE_hintPair = 101; + public static readonly RULE_joinOption = 102; + public static readonly RULE_renameClasue = 103; + public static readonly RULE_byClause = 104; + public static readonly RULE_statsByClause = 105; + public static readonly RULE_bySpanClause = 106; + public static readonly RULE_spanClause = 107; + public static readonly RULE_sortbyClause = 108; + public static readonly RULE_evalClause = 109; + public static readonly RULE_eventstatsAggTerm = 110; + public static readonly RULE_windowFunction = 111; + public static readonly RULE_windowFunctionName = 112; + public static readonly RULE_scalarWindowFunctionName = 113; + public static readonly RULE_statsAggTerm = 114; + public static readonly RULE_statsFunction = 115; + public static readonly RULE_statsFunctionName = 116; + public static readonly RULE_takeAggFunction = 117; + public static readonly RULE_percentileApproxFunction = 118; + public static readonly RULE_numericLiteral = 119; + public static readonly RULE_logicalExpression = 120; + public static readonly RULE_expression = 121; + public static readonly RULE_valueExpression = 122; + public static readonly RULE_evalExpression = 123; + public static readonly RULE_functionCall = 124; + public static readonly RULE_positionFunctionCall = 125; + public static readonly RULE_caseFunctionCall = 126; + public static readonly RULE_relevanceExpression = 127; + public static readonly RULE_singleFieldRelevanceFunction = 128; + public static readonly RULE_multiFieldRelevanceFunction = 129; + public static readonly RULE_tableSource = 130; + public static readonly RULE_tableFunction = 131; + public static readonly RULE_fieldList = 132; + public static readonly RULE_sortField = 133; + public static readonly RULE_sortFieldExpression = 134; + public static readonly RULE_fieldExpression = 135; + public static readonly RULE_wcFieldExpression = 136; + public static readonly RULE_selectFieldExpression = 137; + public static readonly RULE_renameFieldExpression = 138; + public static readonly RULE_evalFunctionCall = 139; + public static readonly RULE_dataTypeFunctionCall = 140; + public static readonly RULE_convertedDataType = 141; + public static readonly RULE_evalFunctionName = 142; + public static readonly RULE_functionArgs = 143; + public static readonly RULE_namedFunctionArgs = 144; + public static readonly RULE_functionArg = 145; + public static readonly RULE_namedFunctionArg = 146; + public static readonly RULE_functionArgExpression = 147; + public static readonly RULE_lambda = 148; + public static readonly RULE_relevanceArg = 149; + public static readonly RULE_relevanceArgName = 150; + public static readonly RULE_relevanceFieldAndWeight = 151; + public static readonly RULE_relevanceFieldWeight = 152; + public static readonly RULE_relevanceField = 153; + public static readonly RULE_relevanceQuery = 154; + public static readonly RULE_relevanceArgValue = 155; + public static readonly RULE_mathematicalFunctionName = 156; + public static readonly RULE_geoipFunctionName = 157; + public static readonly RULE_collectionFunctionName = 158; + public static readonly RULE_trigonometricFunctionName = 159; + public static readonly RULE_jsonFunctionName = 160; + public static readonly RULE_cryptographicFunctionName = 161; + public static readonly RULE_dateTimeFunctionName = 162; + public static readonly RULE_getFormatFunctionCall = 163; + public static readonly RULE_getFormatType = 164; + public static readonly RULE_extractFunctionCall = 165; + public static readonly RULE_simpleDateTimePart = 166; + public static readonly RULE_complexDateTimePart = 167; + public static readonly RULE_datetimePart = 168; + public static readonly RULE_timestampFunctionCall = 169; + public static readonly RULE_timestampFunctionName = 170; + public static readonly RULE_conditionFunctionName = 171; + public static readonly RULE_flowControlFunctionName = 172; + public static readonly RULE_systemFunctionName = 173; + public static readonly RULE_textFunctionName = 174; + public static readonly RULE_positionFunctionName = 175; + public static readonly RULE_comparisonOperator = 176; + public static readonly RULE_singleFieldRelevanceFunctionName = 177; + public static readonly RULE_multiFieldRelevanceFunctionName = 178; + public static readonly RULE_literalValue = 179; + public static readonly RULE_intervalLiteral = 180; + public static readonly RULE_stringLiteral = 181; + public static readonly RULE_integerLiteral = 182; + public static readonly RULE_decimalLiteral = 183; + public static readonly RULE_doubleLiteral = 184; + public static readonly RULE_floatLiteral = 185; + public static readonly RULE_booleanLiteral = 186; + public static readonly RULE_datetimeLiteral = 187; + public static readonly RULE_dateLiteral = 188; + public static readonly RULE_timeLiteral = 189; + public static readonly RULE_timestampLiteral = 190; + public static readonly RULE_intervalUnit = 191; + public static readonly RULE_timespanUnit = 192; + public static readonly RULE_valueList = 193; + public static readonly RULE_qualifiedName = 194; + public static readonly RULE_tableQualifiedName = 195; + public static readonly RULE_wcQualifiedName = 196; + public static readonly RULE_identifierSeq = 197; + public static readonly RULE_ident = 198; + public static readonly RULE_tableIdent = 199; + public static readonly RULE_wildcard = 200; + public static readonly RULE_keywordsCanBeId = 201; + public static readonly RULE_searchableKeyWord = 202; public static readonly literalNames = [ - null, null, "'SEARCH'", "'DESCRIBE'", "'SHOW'", "'FROM'", "'WHERE'", - "'FIELDS'", "'RENAME'", "'STATS'", "'DEDUP'", "'SORT'", "'EVAL'", - "'HEAD'", "'TOP'", "'RARE'", "'PARSE'", "'METHOD'", "'REGEX'", "'PUNCT'", - "'GROK'", "'PATTERN'", "'PATTERNS'", "'NEW_FIELD'", "'KMEANS'", - "'AD'", "'ML'", "'AS'", "'BY'", "'SOURCE'", "'INDEX'", "'D'", "'DESC'", - "'DATASOURCES'", "'SORTBY'", "'AUTO'", "'STR'", "'IP'", "'NUM'", - "'KEEPEMPTY'", "'CONSECUTIVE'", "'DEDUP_SPLITVALUES'", "'PARTITIONS'", - "'ALLNUM'", "'DELIM'", "'CENTROIDS'", "'ITERATIONS'", "'DISTANCE_TYPE'", + null, null, "'SEARCH'", "'DESCRIBE'", "'SHOW'", "'EXPLAIN'", "'FROM'", + "'WHERE'", "'FIELDS'", "'FIELD'", "'TABLE'", "'RENAME'", "'STATS'", + "'EVENTSTATS'", "'DEDUP'", "'SORT'", "'EVAL'", "'HEAD'", "'BIN'", + "'TOP'", "'RARE'", "'PARSE'", "'SPATH'", "'REGEX'", "'REX'", "'SED'", + "'PUNCT'", "'GROK'", "'PATTERN'", "'PATTERNS'", "'NEW_FIELD'", "'KMEANS'", + "'AD'", "'ML'", "'FILLNULL'", "'FLATTEN'", "'TRENDLINE'", "'TIMECHART'", + "'APPENDCOL'", "'EXPAND'", "'SIMPLE_PATTERN'", "'BRAIN'", "'VARIABLE_COUNT_THRESHOLD'", + "'FREQUENCY_THRESHOLD_PERCENTAGE'", "'METHOD'", "'MAX_SAMPLE_COUNT'", + "'MAX_MATCH'", "'OFFSET_FIELD'", "'BUFFER_LIMIT'", "'LABEL'", "'AGGREGATION'", + "'JOIN'", "'ON'", "'INNER'", "'OUTER'", "'FULL'", "'SEMI'", "'ANTI'", + "'CROSS'", "'HINT.LEFT'", "'HINT.RIGHT'", "'AS'", "'BY'", "'SOURCE'", + "'INDEX'", "'A'", "'ASC'", "'D'", "'DESC'", "'DATASOURCES'", "'USING'", + "'WITH'", "'SIMPLE'", "'STANDARD'", "'COST'", "'EXTENDED'", "'OVERRIDE'", + "'OVERWRITE'", "'AUTO'", "'STR'", "'NUM'", "'SMA'", "'WMA'", "'KEEPEMPTY'", + "'CONSECUTIVE'", "'DEDUP_SPLITVALUES'", "'PARTITIONS'", "'ALLNUM'", + "'DELIM'", "'BUCKET_NULLABLE'", "'CENTROIDS'", "'ITERATIONS'", "'DISTANCE_TYPE'", "'NUMBER_OF_TREES'", "'SHINGLE_SIZE'", "'SAMPLE_SIZE'", "'OUTPUT_AFTER'", "'TIME_DECAY'", "'ANOMALY_RATE'", "'CATEGORY_FIELD'", "'TIME_FIELD'", "'TIME_ZONE'", "'TRAINING_DATA_SIZE'", "'ANOMALY_SCORE_THRESHOLD'", - "'CASE'", "'IN'", "'NOT'", "'OR'", "'AND'", "'XOR'", "'TRUE'", "'FALSE'", - "'REGEXP'", "'CONVERT_TZ'", "'DATETIME'", "'DAY'", "'DAY_HOUR'", - "'DAY_MICROSECOND'", "'DAY_MINUTE'", "'DAY_OF_YEAR'", "'DAY_SECOND'", - "'HOUR'", "'HOUR_MICROSECOND'", "'HOUR_MINUTE'", "'HOUR_OF_DAY'", - "'HOUR_SECOND'", "'INTERVAL'", "'MICROSECOND'", "'MILLISECOND'", - "'MINUTE'", "'MINUTE_MICROSECOND'", "'MINUTE_OF_DAY'", "'MINUTE_OF_HOUR'", - "'MINUTE_SECOND'", "'MONTH'", "'MONTH_OF_YEAR'", "'QUARTER'", "'SECOND'", - "'SECOND_MICROSECOND'", "'SECOND_OF_MINUTE'", "'WEEK'", "'WEEK_OF_YEAR'", - "'YEAR'", "'YEAR_MONTH'", "'DATAMODEL'", "'LOOKUP'", "'SAVEDSEARCH'", - "'INT'", "'INTEGER'", "'DOUBLE'", "'LONG'", "'FLOAT'", "'STRING'", - "'BOOLEAN'", "'|'", "','", "'.'", "'='", "'>'", "'<'", null, null, - null, "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "':'", "'('", "')'", - "'['", "']'", "'''", "'\"'", "'`'", "'~'", "'&'", "'^'", "'AVG'", - "'COUNT'", "'DISTINCT_COUNT'", "'ESTDC'", "'ESTDC_ERROR'", "'MAX'", - "'MEAN'", "'MEDIAN'", "'MIN'", "'MODE'", "'RANGE'", "'STDEV'", "'STDEVP'", - "'SUM'", "'SUMSQ'", "'VAR_SAMP'", "'VAR_POP'", "'STDDEV_SAMP'", - "'STDDEV_POP'", "'PERCENTILE'", "'TAKE'", "'FIRST'", "'LAST'", "'LIST'", - "'VALUES'", "'EARLIEST'", "'EARLIEST_TIME'", "'LATEST'", "'LATEST_TIME'", - "'PER_DAY'", "'PER_HOUR'", "'PER_MINUTE'", "'PER_SECOND'", "'RATE'", - "'SPARKLINE'", "'C'", "'DC'", "'ABS'", "'CBRT'", "'CEIL'", "'CEILING'", - "'CONV'", "'CRC32'", "'E'", "'EXP'", "'FLOOR'", "'LN'", "'LOG'", - "'LOG10'", "'LOG2'", "'MOD'", "'PI'", "'POSITION'", "'POW'", "'POWER'", - "'RAND'", "'ROUND'", "'SIGN'", "'SQRT'", "'TRUNCATE'", "'ACOS'", - "'ASIN'", "'ATAN'", "'ATAN2'", "'COS'", "'COT'", "'DEGREES'", "'RADIANS'", - "'SIN'", "'TAN'", "'ADDDATE'", "'ADDTIME'", "'CURDATE'", "'CURRENT_DATE'", - "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURTIME'", "'DATE'", - "'DATEDIFF'", "'DATE_ADD'", "'DATE_FORMAT'", "'DATE_SUB'", "'DAYNAME'", - "'DAYOFMONTH'", "'DAYOFWEEK'", "'DAYOFYEAR'", "'DAY_OF_MONTH'", - "'DAY_OF_WEEK'", "'EXTRACT'", "'FROM_DAYS'", "'FROM_UNIXTIME'", + "'APPEND'", "'COUNTFIELD'", "'SHOWCOUNT'", "'LIMIT'", "'USEOTHER'", + "'INPUT'", "'OUTPUT'", "'PATH'", "'CASE'", "'ELSE'", "'IN'", "'EXISTS'", + "'GEOIP'", "'NOT'", "'OR'", "'AND'", "'XOR'", "'TRUE'", "'FALSE'", + "'REGEXP'", "'REGEX_MATCH'", "'CONVERT_TZ'", "'DATETIME'", "'DAY'", + "'DAY_HOUR'", "'DAY_MICROSECOND'", "'DAY_MINUTE'", "'DAY_OF_YEAR'", + "'DAY_SECOND'", "'HOUR'", "'HOUR_MICROSECOND'", "'HOUR_MINUTE'", + "'HOUR_OF_DAY'", "'HOUR_SECOND'", "'INTERVAL'", "'MICROSECOND'", + "'MILLISECOND'", "'MINUTE'", "'MINUTE_MICROSECOND'", "'MINUTE_OF_DAY'", + "'MINUTE_OF_HOUR'", "'MINUTE_SECOND'", "'MONTH'", "'MONTH_OF_YEAR'", + "'QUARTER'", "'SECOND'", "'SECOND_MICROSECOND'", "'SECOND_OF_MINUTE'", + "'WEEK'", "'WEEK_OF_YEAR'", "'YEAR'", "'YEAR_MONTH'", "'DATAMODEL'", + "'LOOKUP'", "'SAVEDSEARCH'", "'INT'", "'INTEGER'", "'DOUBLE'", "'LONG'", + "'FLOAT'", "'STRING'", "'BOOLEAN'", "'IP'", "'|'", "','", "'.'", + "'='", "'=='", "'>'", "'<'", null, null, null, "'+'", "'-'", "'*'", + "'/'", "'%'", "'!'", "':'", "'('", "')'", "'['", "']'", "'{'", "'}'", + "'''", "'\"'", "'`'", "'->'", "'~'", "'&'", "'^'", "'AVG'", "'COUNT'", + "'DISTINCT_COUNT'", "'DISTINCT_COUNT_APPROX'", "'ESTDC'", "'ESTDC_ERROR'", + "'MAX'", "'MEAN'", "'MEDIAN'", "'MIN'", "'MODE'", "'RANGE'", "'STDEV'", + "'STDEVP'", "'SUM'", "'SUMSQ'", "'VAR_SAMP'", "'VAR_POP'", "'STDDEV_SAMP'", + "'STDDEV_POP'", "'PERC'", "'PERCENTILE'", "'PERCENTILE_APPROX'", + "'EARLIEST'", "'LATEST'", "'TAKE'", "'LIST'", "'VALUES'", "'PER_DAY'", + "'PER_HOUR'", "'PER_MINUTE'", "'PER_SECOND'", "'RATE'", "'SPARKLINE'", + "'C'", "'DC'", "'ROW_NUMBER'", "'RANK'", "'DENSE_RANK'", "'PERCENT_RANK'", + "'CUME_DIST'", "'FIRST'", "'LAST'", "'NTH'", "'NTILE'", "'ADD'", + "'SUBTRACT'", "'MULTIPLY'", "'DIVIDE'", "'ABS'", "'CBRT'", "'CEIL'", + "'CEILING'", "'CONV'", "'CRC32'", "'E'", "'EXP'", "'EXPM1'", "'FLOOR'", + "'LN'", "'LOG'", null, "'MOD'", "'MODULUS'", "'PI'", "'POSITION'", + "'POW'", "'POWER'", "'RAND'", "'ROUND'", "'SIGN'", "'SQRT'", "'TRUNCATE'", + "'RINT'", "'SIGNUM'", "'ACOS'", "'ASIN'", "'ATAN'", "'ATAN2'", "'COS'", + "'COSH'", "'COT'", "'DEGREES'", "'RADIANS'", "'SIN'", "'SINH'", + "'TAN'", "'MD5'", "'SHA1'", "'SHA2'", "'ADDDATE'", "'ADDTIME'", + "'CURDATE'", "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", + "'CURTIME'", "'DATE'", "'DATEDIFF'", "'DATE_ADD'", "'DATE_FORMAT'", + "'DATE_SUB'", "'DAYNAME'", "'DAYOFMONTH'", "'DAYOFWEEK'", "'DAYOFYEAR'", + "'DAY_OF_MONTH'", "'DAY_OF_WEEK'", "'EXTRACT'", "'FROM_DAYS'", "'FROM_UNIXTIME'", "'GET_FORMAT'", "'LAST_DAY'", "'LOCALTIME'", "'LOCALTIMESTAMP'", "'MAKEDATE'", "'MAKETIME'", "'MONTHNAME'", "'NOW'", "'PERIOD_ADD'", "'PERIOD_DIFF'", "'SEC_TO_TIME'", "'STR_TO_DATE'", "'SUBDATE'", "'SUBTIME'", "'SYSDATE'", "'TIME'", "'TIMEDIFF'", "'TIMESTAMP'", "'TIMESTAMPADD'", "'TIMESTAMPDIFF'", "'TIME_FORMAT'", "'TIME_TO_SEC'", "'TO_DAYS'", "'TO_SECONDS'", "'UNIX_TIMESTAMP'", "'UTC_DATE'", "'UTC_TIME'", - "'UTC_TIMESTAMP'", "'WEEKDAY'", "'YEARWEEK'", "'SUBSTR'", "'SUBSTRING'", - "'LTRIM'", "'RTRIM'", "'TRIM'", "'TO'", "'LOWER'", "'UPPER'", "'CONCAT'", - "'CONCAT_WS'", "'LENGTH'", "'STRCMP'", "'RIGHT'", "'LEFT'", "'ASCII'", - "'LOCATE'", "'REPLACE'", "'REVERSE'", "'CAST'", "'LIKE'", "'ISNULL'", - "'ISNOTNULL'", "'IFNULL'", "'NULLIF'", "'IF'", "'TYPEOF'", "'MATCH'", - "'MATCH_PHRASE'", "'MATCH_PHRASE_PREFIX'", "'MATCH_BOOL_PREFIX'", - "'SIMPLE_QUERY_STRING'", "'MULTI_MATCH'", "'QUERY_STRING'", "'ALLOW_LEADING_WILDCARD'", - "'ANALYZE_WILDCARD'", "'ANALYZER'", "'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'", - "'BOOST'", "'CUTOFF_FREQUENCY'", "'DEFAULT_FIELD'", "'DEFAULT_OPERATOR'", - "'ENABLE_POSITION_INCREMENTS'", "'ESCAPE'", "'FLAGS'", "'FUZZY_MAX_EXPANSIONS'", - "'FUZZY_PREFIX_LENGTH'", "'FUZZY_TRANSPOSITIONS'", "'FUZZY_REWRITE'", - "'FUZZINESS'", "'LENIENT'", "'LOW_FREQ_OPERATOR'", "'MAX_DETERMINIZED_STATES'", - "'MAX_EXPANSIONS'", "'MINIMUM_SHOULD_MATCH'", "'OPERATOR'", "'PHRASE_SLOP'", - "'PREFIX_LENGTH'", "'QUOTE_ANALYZER'", "'QUOTE_FIELD_SUFFIX'", "'REWRITE'", - "'SLOP'", "'TIE_BREAKER'", "'TYPE'", "'ZERO_TERMS_QUERY'", "'SPAN'", - "'MS'", "'S'", "'M'", "'H'", "'W'", "'Q'", "'Y'" + "'UTC_TIMESTAMP'", "'WEEKDAY'", "'YEARWEEK'", "'STRFTIME'", "'SUBSTR'", + "'SUBSTRING'", "'LTRIM'", "'RTRIM'", "'TRIM'", "'TO'", "'LOWER'", + "'UPPER'", "'CONCAT'", "'CONCAT_WS'", "'LENGTH'", "'STRCMP'", "'RIGHT'", + "'LEFT'", "'ASCII'", "'LOCATE'", "'REPLACE'", "'REVERSE'", "'CAST'", + "'LIKE'", "'ISNULL'", "'ISNOTNULL'", "'CIDRMATCH'", "'BETWEEN'", + "'ISPRESENT'", "'ISEMPTY'", "'ISBLANK'", "'ARRAY'", "'ARRAY_LENGTH'", + "'MVJOIN'", "'FORALL'", "'FILTER'", "'TRANSFORM'", "'REDUCE'", "'JSON_VALID'", + "'JSON'", "'JSON_OBJECT'", "'JSON_ARRAY'", "'JSON_ARRAY_LENGTH'", + "'JSON_EXTRACT'", "'JSON_KEYS'", "'JSON_SET'", "'JSON_DELETE'", + "'JSON_APPEND'", "'JSON_EXTEND'", "'IFNULL'", "'NULLIF'", "'IF'", + "'TYPEOF'", "'COALESCE'", "'MATCH'", "'MATCH_PHRASE'", "'MATCH_PHRASE_PREFIX'", + "'MATCH_BOOL_PREFIX'", "'SIMPLE_QUERY_STRING'", "'MULTI_MATCH'", + "'QUERY_STRING'", "'ALLOW_LEADING_WILDCARD'", "'ANALYZE_WILDCARD'", + "'ANALYZER'", "'AUTO_GENERATE_SYNONYMS_PHRASE_QUERY'", "'BOOST'", + "'CUTOFF_FREQUENCY'", "'DEFAULT_FIELD'", "'DEFAULT_OPERATOR'", "'ENABLE_POSITION_INCREMENTS'", + "'ESCAPE'", "'FLAGS'", "'FUZZY_MAX_EXPANSIONS'", "'FUZZY_PREFIX_LENGTH'", + "'FUZZY_TRANSPOSITIONS'", "'FUZZY_REWRITE'", "'FUZZINESS'", "'LENIENT'", + "'LOW_FREQ_OPERATOR'", "'MAX_DETERMINIZED_STATES'", "'MAX_EXPANSIONS'", + "'MINIMUM_SHOULD_MATCH'", "'OPERATOR'", "'PHRASE_SLOP'", "'PREFIX_LENGTH'", + "'QUOTE_ANALYZER'", "'QUOTE_FIELD_SUFFIX'", "'REWRITE'", "'SLOP'", + "'TIE_BREAKER'", "'TYPE'", "'ZERO_TERMS_QUERY'", "'SPAN'", "'BINS'", + "'MINSPAN'", "'START'", "'END'", "'ALIGNTIME'", "'MS'", "'S'", "'M'", + "'H'", "'W'", "'Q'", "'Y'", "'SEC'", "'SECS'", "'SECONDS'", "'MINS'", + "'MINUTES'", "'HR'", "'HRS'", "'HOURS'", "'DAYS'", "'MON'", "'MONTHS'", + "'US'", "'CS'", "'DS'" ]; public static readonly symbolicNames = [ - null, "SPACE", "SEARCH", "DESCRIBE", "SHOW", "FROM", "WHERE", "FIELDS", - "RENAME", "STATS", "DEDUP", "SORT", "EVAL", "HEAD", "TOP", "RARE", - "PARSE", "METHOD", "REGEX", "PUNCT", "GROK", "PATTERN", "PATTERNS", - "NEW_FIELD", "KMEANS", "AD", "ML", "AS", "BY", "SOURCE", "INDEX", - "D", "DESC", "DATASOURCES", "SORTBY", "AUTO", "STR", "IP", "NUM", - "KEEPEMPTY", "CONSECUTIVE", "DEDUP_SPLITVALUES", "PARTITIONS", "ALLNUM", - "DELIM", "CENTROIDS", "ITERATIONS", "DISTANCE_TYPE", "NUMBER_OF_TREES", - "SHINGLE_SIZE", "SAMPLE_SIZE", "OUTPUT_AFTER", "TIME_DECAY", "ANOMALY_RATE", - "CATEGORY_FIELD", "TIME_FIELD", "TIME_ZONE", "TRAINING_DATA_SIZE", - "ANOMALY_SCORE_THRESHOLD", "CASE", "IN", "NOT", "OR", "AND", "XOR", - "TRUE", "FALSE", "REGEXP", "CONVERT_TZ", "DATETIME", "DAY", "DAY_HOUR", - "DAY_MICROSECOND", "DAY_MINUTE", "DAY_OF_YEAR", "DAY_SECOND", "HOUR", - "HOUR_MICROSECOND", "HOUR_MINUTE", "HOUR_OF_DAY", "HOUR_SECOND", - "INTERVAL", "MICROSECOND", "MILLISECOND", "MINUTE", "MINUTE_MICROSECOND", - "MINUTE_OF_DAY", "MINUTE_OF_HOUR", "MINUTE_SECOND", "MONTH", "MONTH_OF_YEAR", - "QUARTER", "SECOND", "SECOND_MICROSECOND", "SECOND_OF_MINUTE", "WEEK", - "WEEK_OF_YEAR", "YEAR", "YEAR_MONTH", "DATAMODEL", "LOOKUP", "SAVEDSEARCH", - "INT", "INTEGER", "DOUBLE", "LONG", "FLOAT", "STRING", "BOOLEAN", - "PIPE", "COMMA", "DOT", "EQUAL", "GREATER", "LESS", "NOT_GREATER", - "NOT_LESS", "NOT_EQUAL", "PLUS", "MINUS", "STAR", "DIVIDE", "MODULE", - "EXCLAMATION_SYMBOL", "COLON", "LT_PRTHS", "RT_PRTHS", "LT_SQR_PRTHS", - "RT_SQR_PRTHS", "SINGLE_QUOTE", "DOUBLE_QUOTE", "BACKTICK", "BIT_NOT_OP", - "BIT_AND_OP", "BIT_XOR_OP", "AVG", "COUNT", "DISTINCT_COUNT", "ESTDC", - "ESTDC_ERROR", "MAX", "MEAN", "MEDIAN", "MIN", "MODE", "RANGE", - "STDEV", "STDEVP", "SUM", "SUMSQ", "VAR_SAMP", "VAR_POP", "STDDEV_SAMP", - "STDDEV_POP", "PERCENTILE", "TAKE", "FIRST", "LAST", "LIST", "VALUES", - "EARLIEST", "EARLIEST_TIME", "LATEST", "LATEST_TIME", "PER_DAY", - "PER_HOUR", "PER_MINUTE", "PER_SECOND", "RATE", "SPARKLINE", "C", - "DC", "ABS", "CBRT", "CEIL", "CEILING", "CONV", "CRC32", "E", "EXP", - "FLOOR", "LN", "LOG", "LOG10", "LOG2", "MOD", "PI", "POSITION", - "POW", "POWER", "RAND", "ROUND", "SIGN", "SQRT", "TRUNCATE", "ACOS", - "ASIN", "ATAN", "ATAN2", "COS", "COT", "DEGREES", "RADIANS", "SIN", - "TAN", "ADDDATE", "ADDTIME", "CURDATE", "CURRENT_DATE", "CURRENT_TIME", - "CURRENT_TIMESTAMP", "CURTIME", "DATE", "DATEDIFF", "DATE_ADD", - "DATE_FORMAT", "DATE_SUB", "DAYNAME", "DAYOFMONTH", "DAYOFWEEK", - "DAYOFYEAR", "DAY_OF_MONTH", "DAY_OF_WEEK", "EXTRACT", "FROM_DAYS", - "FROM_UNIXTIME", "GET_FORMAT", "LAST_DAY", "LOCALTIME", "LOCALTIMESTAMP", - "MAKEDATE", "MAKETIME", "MONTHNAME", "NOW", "PERIOD_ADD", "PERIOD_DIFF", - "SEC_TO_TIME", "STR_TO_DATE", "SUBDATE", "SUBTIME", "SYSDATE", "TIME", - "TIMEDIFF", "TIMESTAMP", "TIMESTAMPADD", "TIMESTAMPDIFF", "TIME_FORMAT", - "TIME_TO_SEC", "TO_DAYS", "TO_SECONDS", "UNIX_TIMESTAMP", "UTC_DATE", - "UTC_TIME", "UTC_TIMESTAMP", "WEEKDAY", "YEARWEEK", "SUBSTR", "SUBSTRING", - "LTRIM", "RTRIM", "TRIM", "TO", "LOWER", "UPPER", "CONCAT", "CONCAT_WS", - "LENGTH", "STRCMP", "RIGHT", "LEFT", "ASCII", "LOCATE", "REPLACE", - "REVERSE", "CAST", "LIKE", "ISNULL", "ISNOTNULL", "IFNULL", "NULLIF", - "IF", "TYPEOF", "MATCH", "MATCH_PHRASE", "MATCH_PHRASE_PREFIX", - "MATCH_BOOL_PREFIX", "SIMPLE_QUERY_STRING", "MULTI_MATCH", "QUERY_STRING", - "ALLOW_LEADING_WILDCARD", "ANALYZE_WILDCARD", "ANALYZER", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", + null, "SPACE", "SEARCH", "DESCRIBE", "SHOW", "EXPLAIN", "FROM", + "WHERE", "FIELDS", "FIELD", "TABLE", "RENAME", "STATS", "EVENTSTATS", + "DEDUP", "SORT", "EVAL", "HEAD", "BIN", "TOP", "RARE", "PARSE", + "SPATH", "REGEX", "REX", "SED", "PUNCT", "GROK", "PATTERN", "PATTERNS", + "NEW_FIELD", "KMEANS", "AD", "ML", "FILLNULL", "FLATTEN", "TRENDLINE", + "TIMECHART", "APPENDCOL", "EXPAND", "SIMPLE_PATTERN", "BRAIN", "VARIABLE_COUNT_THRESHOLD", + "FREQUENCY_THRESHOLD_PERCENTAGE", "METHOD", "MAX_SAMPLE_COUNT", + "MAX_MATCH", "OFFSET_FIELD", "BUFFER_LIMIT", "LABEL", "AGGREGATION", + "JOIN", "ON", "INNER", "OUTER", "FULL", "SEMI", "ANTI", "CROSS", + "LEFT_HINT", "RIGHT_HINT", "AS", "BY", "SOURCE", "INDEX", "A", "ASC", + "D", "DESC", "DATASOURCES", "USING", "WITH", "SIMPLE", "STANDARD", + "COST", "EXTENDED", "OVERRIDE", "OVERWRITE", "AUTO", "STR", "NUM", + "SMA", "WMA", "KEEPEMPTY", "CONSECUTIVE", "DEDUP_SPLITVALUES", "PARTITIONS", + "ALLNUM", "DELIM", "BUCKET_NULLABLE", "CENTROIDS", "ITERATIONS", + "DISTANCE_TYPE", "NUMBER_OF_TREES", "SHINGLE_SIZE", "SAMPLE_SIZE", + "OUTPUT_AFTER", "TIME_DECAY", "ANOMALY_RATE", "CATEGORY_FIELD", + "TIME_FIELD", "TIME_ZONE", "TRAINING_DATA_SIZE", "ANOMALY_SCORE_THRESHOLD", + "APPEND", "COUNTFIELD", "SHOWCOUNT", "LIMIT", "USEOTHER", "INPUT", + "OUTPUT", "PATH", "CASE", "ELSE", "IN", "EXISTS", "GEOIP", "NOT", + "OR", "AND", "XOR", "TRUE", "FALSE", "REGEXP", "REGEX_MATCH", "CONVERT_TZ", + "DATETIME", "DAY", "DAY_HOUR", "DAY_MICROSECOND", "DAY_MINUTE", + "DAY_OF_YEAR", "DAY_SECOND", "HOUR", "HOUR_MICROSECOND", "HOUR_MINUTE", + "HOUR_OF_DAY", "HOUR_SECOND", "INTERVAL", "MICROSECOND", "MILLISECOND", + "MINUTE", "MINUTE_MICROSECOND", "MINUTE_OF_DAY", "MINUTE_OF_HOUR", + "MINUTE_SECOND", "MONTH", "MONTH_OF_YEAR", "QUARTER", "SECOND", + "SECOND_MICROSECOND", "SECOND_OF_MINUTE", "WEEK", "WEEK_OF_YEAR", + "YEAR", "YEAR_MONTH", "DATAMODEL", "LOOKUP", "SAVEDSEARCH", "INT", + "INTEGER", "DOUBLE", "LONG", "FLOAT", "STRING", "BOOLEAN", "IP", + "PIPE", "COMMA", "DOT", "EQUAL", "DOUBLE_EQUAL", "GREATER", "LESS", + "NOT_GREATER", "NOT_LESS", "NOT_EQUAL", "PLUS", "MINUS", "STAR", + "DIVIDE", "MODULE", "EXCLAMATION_SYMBOL", "COLON", "LT_PRTHS", "RT_PRTHS", + "LT_SQR_PRTHS", "RT_SQR_PRTHS", "LT_CURLY", "RT_CURLY", "SINGLE_QUOTE", + "DOUBLE_QUOTE", "BACKTICK", "ARROW", "BIT_NOT_OP", "BIT_AND_OP", + "BIT_XOR_OP", "AVG", "COUNT", "DISTINCT_COUNT", "DISTINCT_COUNT_APPROX", + "ESTDC", "ESTDC_ERROR", "MAX", "MEAN", "MEDIAN", "MIN", "MODE", + "RANGE", "STDEV", "STDEVP", "SUM", "SUMSQ", "VAR_SAMP", "VAR_POP", + "STDDEV_SAMP", "STDDEV_POP", "PERC", "PERCENTILE", "PERCENTILE_APPROX", + "EARLIEST", "LATEST", "TAKE", "LIST", "VALUES", "PER_DAY", "PER_HOUR", + "PER_MINUTE", "PER_SECOND", "RATE", "SPARKLINE", "C", "DC", "ROW_NUMBER", + "RANK", "DENSE_RANK", "PERCENT_RANK", "CUME_DIST", "FIRST", "LAST", + "NTH", "NTILE", "PLUS_FUCTION", "MINUS_FUCTION", "STAR_FUNCTION", + "DIVIDE_FUNCTION", "ABS", "CBRT", "CEIL", "CEILING", "CONV", "CRC32", + "E", "EXP", "EXPM1", "FLOOR", "LN", "LOG", "LOG_WITH_BASE", "MOD", + "MODULUS", "PI", "POSITION", "POW", "POWER", "RAND", "ROUND", "SIGN", + "SQRT", "TRUNCATE", "RINT", "SIGNUM", "ACOS", "ASIN", "ATAN", "ATAN2", + "COS", "COSH", "COT", "DEGREES", "RADIANS", "SIN", "SINH", "TAN", + "MD5", "SHA1", "SHA2", "ADDDATE", "ADDTIME", "CURDATE", "CURRENT_DATE", + "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURTIME", "DATE", "DATEDIFF", + "DATE_ADD", "DATE_FORMAT", "DATE_SUB", "DAYNAME", "DAYOFMONTH", + "DAYOFWEEK", "DAYOFYEAR", "DAY_OF_MONTH", "DAY_OF_WEEK", "EXTRACT", + "FROM_DAYS", "FROM_UNIXTIME", "GET_FORMAT", "LAST_DAY", "LOCALTIME", + "LOCALTIMESTAMP", "MAKEDATE", "MAKETIME", "MONTHNAME", "NOW", "PERIOD_ADD", + "PERIOD_DIFF", "SEC_TO_TIME", "STR_TO_DATE", "SUBDATE", "SUBTIME", + "SYSDATE", "TIME", "TIMEDIFF", "TIMESTAMP", "TIMESTAMPADD", "TIMESTAMPDIFF", + "TIME_FORMAT", "TIME_TO_SEC", "TO_DAYS", "TO_SECONDS", "UNIX_TIMESTAMP", + "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", "WEEKDAY", "YEARWEEK", + "STRFTIME", "SUBSTR", "SUBSTRING", "LTRIM", "RTRIM", "TRIM", "TO", + "LOWER", "UPPER", "CONCAT", "CONCAT_WS", "LENGTH", "STRCMP", "RIGHT", + "LEFT", "ASCII", "LOCATE", "REPLACE", "REVERSE", "CAST", "LIKE", + "ISNULL", "ISNOTNULL", "CIDRMATCH", "BETWEEN", "ISPRESENT", "ISEMPTY", + "ISBLANK", "ARRAY", "ARRAY_LENGTH", "MVJOIN", "FORALL", "FILTER", + "TRANSFORM", "REDUCE", "JSON_VALID", "JSON", "JSON_OBJECT", "JSON_ARRAY", + "JSON_ARRAY_LENGTH", "JSON_EXTRACT", "JSON_KEYS", "JSON_SET", "JSON_DELETE", + "JSON_APPEND", "JSON_EXTEND", "IFNULL", "NULLIF", "IF", "TYPEOF", + "COALESCE", "MATCH", "MATCH_PHRASE", "MATCH_PHRASE_PREFIX", "MATCH_BOOL_PREFIX", + "SIMPLE_QUERY_STRING", "MULTI_MATCH", "QUERY_STRING", "ALLOW_LEADING_WILDCARD", + "ANALYZE_WILDCARD", "ANALYZER", "AUTO_GENERATE_SYNONYMS_PHRASE_QUERY", "BOOST", "CUTOFF_FREQUENCY", "DEFAULT_FIELD", "DEFAULT_OPERATOR", "ENABLE_POSITION_INCREMENTS", "ESCAPE", "FLAGS", "FUZZY_MAX_EXPANSIONS", "FUZZY_PREFIX_LENGTH", "FUZZY_TRANSPOSITIONS", "FUZZY_REWRITE", "FUZZINESS", "LENIENT", "LOW_FREQ_OPERATOR", "MAX_DETERMINIZED_STATES", "MAX_EXPANSIONS", "MINIMUM_SHOULD_MATCH", "OPERATOR", "PHRASE_SLOP", "PREFIX_LENGTH", "QUOTE_ANALYZER", "QUOTE_FIELD_SUFFIX", "REWRITE", - "SLOP", "TIE_BREAKER", "TYPE", "ZERO_TERMS_QUERY", "SPAN", "MS", - "S", "M", "H", "W", "Q", "Y", "ID", "CLUSTER", "INTEGER_LITERAL", - "DECIMAL_LITERAL", "ID_DATE_SUFFIX", "DQUOTA_STRING", "SQUOTA_STRING", - "BQUOTA_STRING", "ERROR_RECOGNITION" + "SLOP", "TIE_BREAKER", "TYPE", "ZERO_TERMS_QUERY", "SPAN", "BINS", + "MINSPAN", "START", "END", "ALIGNTIME", "MS", "S", "M", "H", "W", + "Q", "Y", "SEC", "SECS", "SECONDS", "MINS", "MINUTES", "HR", "HRS", + "HOURS", "DAYS", "MON", "MONTHS", "US", "CS", "DS", "PERCENTILE_SHORTCUT", + "ID", "CLUSTER", "INTEGER_LITERAL", "DECIMAL_LITERAL", "FLOAT_LITERAL", + "DOUBLE_LITERAL", "ID_DATE_SUFFIX", "DQUOTA_STRING", "SQUOTA_STRING", + "BQUOTA_STRING", "LINE_COMMENT", "BLOCK_COMMENT", "ERROR_RECOGNITION" ]; public static readonly ruleNames = [ - "root", "pplStatement", "dmlStatement", "queryStatement", "pplCommands", - "commands", "searchCommand", "describeCommand", "showDataSourcesCommand", - "whereCommand", "fieldsCommand", "renameCommand", "statsCommand", - "dedupCommand", "sortCommand", "evalCommand", "headCommand", "topCommand", - "rareCommand", "grokCommand", "parseCommand", "patternsCommand", - "patternsParameter", "patternsMethod", "kmeansCommand", "kmeansParameter", - "adCommand", "adParameter", "mlCommand", "mlArg", "fromClause", - "tableSourceClause", "renameClasue", "byClause", "statsByClause", - "bySpanClause", "spanClause", "sortbyClause", "evalClause", "statsAggTerm", - "statsFunction", "statsFunctionName", "takeAggFunction", "percentileAggFunction", - "expression", "logicalExpression", "logicalOrExpression", "logicalXorExpression", - "logicalAndExpression", "logicalNotExpression", "primaryLogicalExpression", - "comparisonExpression", "valueExpression", "primaryExpression", - "positionFunction", "booleanExpression", "relevanceExpression", + "root", "pplStatement", "queryStatement", "explainStatement", "explainMode", + "subSearch", "pplCommands", "commands", "commandName", "searchCommand", + "searchExpression", "searchTerm", "searchLiteral", "searchFieldComparison", + "searchFieldInList", "searchLiteralList", "searchComparisonOperator", + "describeCommand", "showDataSourcesCommand", "whereCommand", "fieldsCommand", + "tableCommand", "fieldsCommandBody", "wcFieldList", "renameCommand", + "statsCommand", "statsArgs", "partitionsArg", "allnumArg", "delimArg", + "bucketNullableArg", "dedupSplitArg", "eventstatsCommand", "dedupCommand", + "sortCommand", "reverseCommand", "timechartCommand", "timechartParameter", + "timechartArg", "spanLiteral", "evalCommand", "headCommand", "binCommand", + "binOption", "aligntimeValue", "spanValue", "logSpanValue", "topCommand", + "rareCommand", "grokCommand", "parseCommand", "spathCommand", "spathParameter", + "indexablePath", "pathElement", "pathArrayAccess", "regexCommand", + "regexExpr", "rexCommand", "rexExpr", "rexOption", "patternsMethod", + "patternsCommand", "patternsParameter", "patternMethod", "patternMode", + "lookupCommand", "lookupMappingList", "outputCandidateList", "lookupPair", + "fillnullCommand", "fillNullWith", "fillNullUsing", "replacementPair", + "trendlineCommand", "trendlineClause", "trendlineType", "expandCommand", + "flattenCommand", "appendcolCommand", "appendCommand", "kmeansCommand", + "kmeansParameter", "adCommand", "adParameter", "mlCommand", "mlArg", + "fromClause", "tableOrSubqueryClause", "tableSourceClause", "dynamicSourceClause", + "sourceReferences", "sourceReference", "sourceFilterArgs", "sourceFilterArg", + "joinCommand", "sqlLikeJoinType", "joinType", "sideAlias", "joinCriteria", + "joinHintList", "hintPair", "joinOption", "renameClasue", "byClause", + "statsByClause", "bySpanClause", "spanClause", "sortbyClause", "evalClause", + "eventstatsAggTerm", "windowFunction", "windowFunctionName", "scalarWindowFunctionName", + "statsAggTerm", "statsFunction", "statsFunctionName", "takeAggFunction", + "percentileApproxFunction", "numericLiteral", "logicalExpression", + "expression", "valueExpression", "evalExpression", "functionCall", + "positionFunctionCall", "caseFunctionCall", "relevanceExpression", "singleFieldRelevanceFunction", "multiFieldRelevanceFunction", "tableSource", - "tableFunction", "fieldList", "wcFieldList", "sortField", "sortFieldExpression", - "fieldExpression", "wcFieldExpression", "evalFunctionCall", "dataTypeFunctionCall", - "booleanFunctionCall", "convertedDataType", "evalFunctionName", - "functionArgs", "functionArg", "relevanceArg", "relevanceArgName", - "relevanceFieldAndWeight", "relevanceFieldWeight", "relevanceField", - "relevanceQuery", "relevanceArgValue", "mathematicalFunctionName", - "trigonometricFunctionName", "dateTimeFunctionName", "getFormatFunction", - "getFormatType", "extractFunction", "simpleDateTimePart", "complexDateTimePart", - "datetimePart", "timestampFunction", "timestampFunctionName", "conditionFunctionBase", + "tableFunction", "fieldList", "sortField", "sortFieldExpression", + "fieldExpression", "wcFieldExpression", "selectFieldExpression", + "renameFieldExpression", "evalFunctionCall", "dataTypeFunctionCall", + "convertedDataType", "evalFunctionName", "functionArgs", "namedFunctionArgs", + "functionArg", "namedFunctionArg", "functionArgExpression", "lambda", + "relevanceArg", "relevanceArgName", "relevanceFieldAndWeight", "relevanceFieldWeight", + "relevanceField", "relevanceQuery", "relevanceArgValue", "mathematicalFunctionName", + "geoipFunctionName", "collectionFunctionName", "trigonometricFunctionName", + "jsonFunctionName", "cryptographicFunctionName", "dateTimeFunctionName", + "getFormatFunctionCall", "getFormatType", "extractFunctionCall", + "simpleDateTimePart", "complexDateTimePart", "datetimePart", "timestampFunctionCall", + "timestampFunctionName", "conditionFunctionName", "flowControlFunctionName", "systemFunctionName", "textFunctionName", "positionFunctionName", "comparisonOperator", "singleFieldRelevanceFunctionName", "multiFieldRelevanceFunctionName", "literalValue", "intervalLiteral", "stringLiteral", "integerLiteral", - "decimalLiteral", "booleanLiteral", "datetimeLiteral", "dateLiteral", - "timeLiteral", "timestampLiteral", "intervalUnit", "timespanUnit", - "valueList", "qualifiedName", "tableQualifiedName", "wcQualifiedName", - "ident", "tableIdent", "wildcard", "keywordsCanBeId", + "decimalLiteral", "doubleLiteral", "floatLiteral", "booleanLiteral", + "datetimeLiteral", "dateLiteral", "timeLiteral", "timestampLiteral", + "intervalUnit", "timespanUnit", "valueList", "qualifiedName", "tableQualifiedName", + "wcQualifiedName", "identifierSeq", "ident", "tableIdent", "wildcard", + "keywordsCanBeId", "searchableKeyWord", ]; public get grammarFileName(): string { return "OpenSearchPPLParser.g4"; } @@ -646,17 +926,17 @@ export class OpenSearchPPLParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 239; + this.state = 407; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 0, this.context) ) { case 1: { - this.state = 238; + this.state = 406; this.pplStatement(); } break; } - this.state = 241; + this.state = 409; this.match(OpenSearchPPLParser.EOF); } } @@ -676,11 +956,64 @@ export class OpenSearchPPLParser extends antlr.Parser { public pplStatement(): PplStatementContext { let localContext = new PplStatementContext(this.context, this.state); this.enterRule(localContext, 2, OpenSearchPPLParser.RULE_pplStatement); + try { + this.state = 413; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 1, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 411; + this.explainStatement(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 412; + this.queryStatement(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public queryStatement(): QueryStatementContext { + let localContext = new QueryStatementContext(this.context, this.state); + this.enterRule(localContext, 4, OpenSearchPPLParser.RULE_queryStatement); + let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 243; - this.dmlStatement(); + this.state = 415; + this.pplCommands(); + this.state = 420; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 167) { + { + { + this.state = 416; + this.match(OpenSearchPPLParser.PIPE); + this.state = 417; + this.commands(); + } + } + this.state = 422; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } } } catch (re) { @@ -696,13 +1029,25 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public dmlStatement(): DmlStatementContext { - let localContext = new DmlStatementContext(this.context, this.state); - this.enterRule(localContext, 4, OpenSearchPPLParser.RULE_dmlStatement); + public explainStatement(): ExplainStatementContext { + let localContext = new ExplainStatementContext(this.context, this.state); + this.enterRule(localContext, 6, OpenSearchPPLParser.RULE_explainStatement); try { this.enterOuterAlt(localContext, 1); { - this.state = 245; + this.state = 423; + this.match(OpenSearchPPLParser.EXPLAIN); + this.state = 425; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 3, this.context) ) { + case 1: + { + this.state = 424; + this.explainMode(); + } + break; + } + this.state = 427; this.queryStatement(); } } @@ -719,28 +1064,59 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public queryStatement(): QueryStatementContext { - let localContext = new QueryStatementContext(this.context, this.state); - this.enterRule(localContext, 6, OpenSearchPPLParser.RULE_queryStatement); + public explainMode(): ExplainModeContext { + let localContext = new ExplainModeContext(this.context, this.state); + this.enterRule(localContext, 8, OpenSearchPPLParser.RULE_explainMode); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 247; - this.pplCommands(); - this.state = 252; + this.state = 429; + _la = this.tokenStream.LA(1); + if(!(((((_la - 72)) & ~0x1F) === 0 && ((1 << (_la - 72)) & 15) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public subSearch(): SubSearchContext { + let localContext = new SubSearchContext(this.context, this.state); + this.enterRule(localContext, 10, OpenSearchPPLParser.RULE_subSearch); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 431; + this.searchCommand(); + this.state = 436; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 109) { + while (_la === 167) { { { - this.state = 248; + this.state = 432; this.match(OpenSearchPPLParser.PIPE); - this.state = 249; + this.state = 433; this.commands(); } } - this.state = 254; + this.state = 438; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -761,30 +1137,30 @@ export class OpenSearchPPLParser extends antlr.Parser { } public pplCommands(): PplCommandsContext { let localContext = new PplCommandsContext(this.context, this.state); - this.enterRule(localContext, 8, OpenSearchPPLParser.RULE_pplCommands); + this.enterRule(localContext, 12, OpenSearchPPLParser.RULE_pplCommands); try { - this.state = 258; + this.state = 442; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 2, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 5, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 255; - this.searchCommand(); + this.state = 439; + this.describeCommand(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 256; - this.describeCommand(); + this.state = 440; + this.showDataSourcesCommand(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 257; - this.showDataSourcesCommand(); + this.state = 441; + this.searchCommand(); } break; } @@ -804,240 +1180,245 @@ export class OpenSearchPPLParser extends antlr.Parser { } public commands(): CommandsContext { let localContext = new CommandsContext(this.context, this.state); - this.enterRule(localContext, 10, OpenSearchPPLParser.RULE_commands); + this.enterRule(localContext, 14, OpenSearchPPLParser.RULE_commands); try { - this.state = 276; + this.state = 476; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case OpenSearchPPLParser.WHERE: this.enterOuterAlt(localContext, 1); { - this.state = 260; + this.state = 444; this.whereCommand(); } break; case OpenSearchPPLParser.FIELDS: this.enterOuterAlt(localContext, 2); { - this.state = 261; + this.state = 445; this.fieldsCommand(); } break; - case OpenSearchPPLParser.RENAME: + case OpenSearchPPLParser.TABLE: this.enterOuterAlt(localContext, 3); { - this.state = 262; + this.state = 446; + this.tableCommand(); + } + break; + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + this.enterOuterAlt(localContext, 4); + { + this.state = 447; + this.joinCommand(); + } + break; + case OpenSearchPPLParser.RENAME: + this.enterOuterAlt(localContext, 5); + { + this.state = 448; this.renameCommand(); } break; case OpenSearchPPLParser.STATS: - this.enterOuterAlt(localContext, 4); + this.enterOuterAlt(localContext, 6); { - this.state = 263; + this.state = 449; this.statsCommand(); } break; + case OpenSearchPPLParser.EVENTSTATS: + this.enterOuterAlt(localContext, 7); + { + this.state = 450; + this.eventstatsCommand(); + } + break; case OpenSearchPPLParser.DEDUP: - this.enterOuterAlt(localContext, 5); + this.enterOuterAlt(localContext, 8); { - this.state = 264; + this.state = 451; this.dedupCommand(); } break; case OpenSearchPPLParser.SORT: - this.enterOuterAlt(localContext, 6); + this.enterOuterAlt(localContext, 9); { - this.state = 265; + this.state = 452; this.sortCommand(); } break; case OpenSearchPPLParser.EVAL: - this.enterOuterAlt(localContext, 7); + this.enterOuterAlt(localContext, 10); { - this.state = 266; + this.state = 453; this.evalCommand(); } break; case OpenSearchPPLParser.HEAD: - this.enterOuterAlt(localContext, 8); + this.enterOuterAlt(localContext, 11); { - this.state = 267; + this.state = 454; this.headCommand(); } break; + case OpenSearchPPLParser.BIN: + this.enterOuterAlt(localContext, 12); + { + this.state = 455; + this.binCommand(); + } + break; case OpenSearchPPLParser.TOP: - this.enterOuterAlt(localContext, 9); + this.enterOuterAlt(localContext, 13); { - this.state = 268; + this.state = 456; this.topCommand(); } break; case OpenSearchPPLParser.RARE: - this.enterOuterAlt(localContext, 10); + this.enterOuterAlt(localContext, 14); { - this.state = 269; + this.state = 457; this.rareCommand(); } break; case OpenSearchPPLParser.GROK: - this.enterOuterAlt(localContext, 11); + this.enterOuterAlt(localContext, 15); { - this.state = 270; + this.state = 458; this.grokCommand(); } break; case OpenSearchPPLParser.PARSE: - this.enterOuterAlt(localContext, 12); + this.enterOuterAlt(localContext, 16); { - this.state = 271; + this.state = 459; this.parseCommand(); } break; + case OpenSearchPPLParser.SPATH: + this.enterOuterAlt(localContext, 17); + { + this.state = 460; + this.spathCommand(); + } + break; case OpenSearchPPLParser.PATTERNS: - this.enterOuterAlt(localContext, 13); + this.enterOuterAlt(localContext, 18); { - this.state = 272; + this.state = 461; this.patternsCommand(); } break; + case OpenSearchPPLParser.LOOKUP: + this.enterOuterAlt(localContext, 19); + { + this.state = 462; + this.lookupCommand(); + } + break; case OpenSearchPPLParser.KMEANS: - this.enterOuterAlt(localContext, 14); + this.enterOuterAlt(localContext, 20); { - this.state = 273; + this.state = 463; this.kmeansCommand(); } break; case OpenSearchPPLParser.AD: - this.enterOuterAlt(localContext, 15); + this.enterOuterAlt(localContext, 21); { - this.state = 274; + this.state = 464; this.adCommand(); } break; case OpenSearchPPLParser.ML: - this.enterOuterAlt(localContext, 16); + this.enterOuterAlt(localContext, 22); { - this.state = 275; + this.state = 465; this.mlCommand(); } break; - default: - throw new antlr.NoViableAltException(this); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public searchCommand(): SearchCommandContext { - let localContext = new SearchCommandContext(this.context, this.state); - this.enterRule(localContext, 12, OpenSearchPPLParser.RULE_searchCommand); - let _la: number; - try { - this.state = 301; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 9, this.context) ) { - case 1: - localContext = new SearchFromFilterContext(localContext); - this.enterOuterAlt(localContext, 1); + case OpenSearchPPLParser.FILLNULL: + this.enterOuterAlt(localContext, 23); { - this.state = 279; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 2) { - { - this.state = 278; - this.match(OpenSearchPPLParser.SEARCH); - } + this.state = 466; + this.fillnullCommand(); } - - this.state = 281; - this.fromClause(); - this.state = 282; - this.logicalExpression(); + break; + case OpenSearchPPLParser.TRENDLINE: + this.enterOuterAlt(localContext, 24); + { + this.state = 467; + this.trendlineCommand(); } break; - case 2: - localContext = new SearchFilterFromContext(localContext); - this.enterOuterAlt(localContext, 2); + case OpenSearchPPLParser.APPENDCOL: + this.enterOuterAlt(localContext, 25); { - this.state = 285; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 5, this.context) ) { - case 1: - { - this.state = 284; - this.match(OpenSearchPPLParser.SEARCH); - } - break; + this.state = 468; + this.appendcolCommand(); } - this.state = 287; - this.logicalExpression(); - this.state = 288; - this.fromClause(); + break; + case OpenSearchPPLParser.APPEND: + this.enterOuterAlt(localContext, 26); + { + this.state = 469; + this.appendCommand(); } break; - case 3: - localContext = new SearchFromContext(localContext); - this.enterOuterAlt(localContext, 3); + case OpenSearchPPLParser.EXPAND: + this.enterOuterAlt(localContext, 27); { - this.state = 291; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 2) { - { - this.state = 290; - this.match(OpenSearchPPLParser.SEARCH); - } + this.state = 470; + this.expandCommand(); } - - this.state = 293; - this.fromClause(); + break; + case OpenSearchPPLParser.FLATTEN: + this.enterOuterAlt(localContext, 28); + { + this.state = 471; + this.flattenCommand(); } break; - case 4: - localContext = new SearchFilterOnlyContext(localContext); - this.enterOuterAlt(localContext, 4); + case OpenSearchPPLParser.REVERSE: + this.enterOuterAlt(localContext, 29); { - this.state = 295; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 7, this.context) ) { - case 1: - { - this.state = 294; - this.match(OpenSearchPPLParser.SEARCH); - } - break; + this.state = 472; + this.reverseCommand(); } - this.state = 297; - this.logicalExpression(); + break; + case OpenSearchPPLParser.REGEX: + this.enterOuterAlt(localContext, 30); + { + this.state = 473; + this.regexCommand(); } break; - case 5: - localContext = new SearchEmptyContext(localContext); - this.enterOuterAlt(localContext, 5); + case OpenSearchPPLParser.TIMECHART: + this.enterOuterAlt(localContext, 31); { - this.state = 299; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 2) { - { - this.state = 298; - this.match(OpenSearchPPLParser.SEARCH); - } + this.state = 474; + this.timechartCommand(); } - + break; + case OpenSearchPPLParser.REX: + this.enterOuterAlt(localContext, 32); + { + this.state = 475; + this.rexCommand(); } break; + default: + throw new antlr.NoViableAltException(this); } } catch (re) { @@ -1053,150 +1434,21 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public describeCommand(): DescribeCommandContext { - let localContext = new DescribeCommandContext(this.context, this.state); - this.enterRule(localContext, 14, OpenSearchPPLParser.RULE_describeCommand); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 303; - this.match(OpenSearchPPLParser.DESCRIBE); - this.state = 304; - this.tableSourceClause(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public showDataSourcesCommand(): ShowDataSourcesCommandContext { - let localContext = new ShowDataSourcesCommandContext(this.context, this.state); - this.enterRule(localContext, 16, OpenSearchPPLParser.RULE_showDataSourcesCommand); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 306; - this.match(OpenSearchPPLParser.SHOW); - this.state = 307; - this.match(OpenSearchPPLParser.DATASOURCES); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public whereCommand(): WhereCommandContext { - let localContext = new WhereCommandContext(this.context, this.state); - this.enterRule(localContext, 18, OpenSearchPPLParser.RULE_whereCommand); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 309; - this.match(OpenSearchPPLParser.WHERE); - this.state = 310; - this.logicalExpression(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public fieldsCommand(): FieldsCommandContext { - let localContext = new FieldsCommandContext(this.context, this.state); - this.enterRule(localContext, 20, OpenSearchPPLParser.RULE_fieldsCommand); + public commandName(): CommandNameContext { + let localContext = new CommandNameContext(this.context, this.state); + this.enterRule(localContext, 16, OpenSearchPPLParser.RULE_commandName); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 312; - this.match(OpenSearchPPLParser.FIELDS); - this.state = 314; - this.errorHandler.sync(this); + this.state = 478; _la = this.tokenStream.LA(1); - if (_la === 118 || _la === 119) { - { - this.state = 313; - _la = this.tokenStream.LA(1); - if(!(_la === 118 || _la === 119)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - - this.state = 316; - this.fieldList(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; + if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 2847931836) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 524479) !== 0) || _la === 104 || _la === 157 || _la === 356)) { + this.errorHandler.recoverInline(this); } - } - finally { - this.exitRule(); - } - return localContext; - } - public renameCommand(): RenameCommandContext { - let localContext = new RenameCommandContext(this.context, this.state); - this.enterRule(localContext, 22, OpenSearchPPLParser.RULE_renameCommand); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 318; - this.match(OpenSearchPPLParser.RENAME); - this.state = 319; - this.renameClasue(); - this.state = 324; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 110) { - { - { - this.state = 320; - this.match(OpenSearchPPLParser.COMMA); - this.state = 321; - this.renameClasue(); - } - } - this.state = 326; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); + else { + this.errorHandler.reportMatch(this); + this.consume(); } } } @@ -1213,99 +1465,65 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public statsCommand(): StatsCommandContext { - let localContext = new StatsCommandContext(this.context, this.state); - this.enterRule(localContext, 24, OpenSearchPPLParser.RULE_statsCommand); + public searchCommand(): SearchCommandContext { + let localContext = new SearchCommandContext(this.context, this.state); + this.enterRule(localContext, 18, OpenSearchPPLParser.RULE_searchCommand); let _la: number; try { + let alternative: number; + localContext = new SearchFromContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 327; - this.match(OpenSearchPPLParser.STATS); - this.state = 331; + this.state = 481; this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 42) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 7, this.context) ) { + case 1: { - this.state = 328; - this.match(OpenSearchPPLParser.PARTITIONS); - this.state = 329; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 330; - localContext._partitions = this.integerLiteral(); + this.state = 480; + this.match(OpenSearchPPLParser.SEARCH); } + break; } - - this.state = 336; + this.state = 486; this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 43) { - { - this.state = 333; - this.match(OpenSearchPPLParser.ALLNUM); - this.state = 334; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 335; - localContext._allnum = this.booleanLiteral(); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 8, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 483; + this.searchExpression(0); + } + } } + this.state = 488; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 8, this.context); } - - this.state = 341; + this.state = 490; this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 44) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 9, this.context) ) { + case 1: { - this.state = 338; - this.match(OpenSearchPPLParser.DELIM); - this.state = 339; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 340; - localContext._delim = this.stringLiteral(); + this.state = 489; + this.fromClause(); } + break; } - - this.state = 343; - this.statsAggTerm(); - this.state = 348; + this.state = 495; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 110) { + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4257218044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 2682862783) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294959103) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4265601023) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 805306367) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 2349078537) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4294443007) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 4294967295) !== 0) || ((((_la - 262)) & ~0x1F) === 0 && ((1 << (_la - 262)) & 4294967295) !== 0) || ((((_la - 294)) & ~0x1F) === 0 && ((1 << (_la - 294)) & 4294967295) !== 0) || ((((_la - 328)) & ~0x1F) === 0 && ((1 << (_la - 328)) & 4294901759) !== 0) || ((((_la - 360)) & ~0x1F) === 0 && ((1 << (_la - 360)) & 4294967295) !== 0) || ((((_la - 392)) & ~0x1F) === 0 && ((1 << (_la - 392)) & 4294967295) !== 0) || ((((_la - 424)) & ~0x1F) === 0 && ((1 << (_la - 424)) & 4294966799) !== 0) || ((((_la - 457)) & ~0x1F) === 0 && ((1 << (_la - 457)) & 239) !== 0)) { { { - this.state = 344; - this.match(OpenSearchPPLParser.COMMA); - this.state = 345; - this.statsAggTerm(); + this.state = 492; + this.searchExpression(0); } } - this.state = 350; + this.state = 497; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 352; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 28) { - { - this.state = 351; - this.statsByClause(); - } - } - - this.state = 357; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 41) { - { - this.state = 354; - this.match(OpenSearchPPLParser.DEDUP_SPLITVALUES); - this.state = 355; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 356; - localContext._dedupsplit = this.booleanLiteral(); - } - } - } } catch (re) { @@ -1321,981 +1539,510 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public dedupCommand(): DedupCommandContext { - let localContext = new DedupCommandContext(this.context, this.state); - this.enterRule(localContext, 26, OpenSearchPPLParser.RULE_dedupCommand); - let _la: number; + + public searchExpression(): SearchExpressionContext; + public searchExpression(_p: number): SearchExpressionContext; + public searchExpression(_p?: number): SearchExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new SearchExpressionContext(this.context, parentState); + let previousContext = localContext; + let _startState = 20; + this.enterRecursionRule(localContext, 20, OpenSearchPPLParser.RULE_searchExpression, _p); try { + let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 359; - this.match(OpenSearchPPLParser.DEDUP); - this.state = 361; + this.state = 506; this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 118 || _la === 119 || _la === 330) { + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.LT_PRTHS: { - this.state = 360; - localContext._number_ = this.integerLiteral(); - } - } + localContext = new GroupedExpressionContext(localContext); + this.context = localContext; + previousContext = localContext; - this.state = 363; - this.fieldList(); - this.state = 367; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 39) { - { - this.state = 364; - this.match(OpenSearchPPLParser.KEEPEMPTY); - this.state = 365; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 366; - localContext._keepempty = this.booleanLiteral(); + this.state = 499; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 500; + this.searchExpression(0); + this.state = 501; + this.match(OpenSearchPPLParser.RT_PRTHS); } - } - - this.state = 372; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 40) { + break; + case OpenSearchPPLParser.NOT: { - this.state = 369; - this.match(OpenSearchPPLParser.CONSECUTIVE); - this.state = 370; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 371; - localContext._consecutive = this.booleanLiteral(); - } - } - - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public sortCommand(): SortCommandContext { - let localContext = new SortCommandContext(this.context, this.state); - this.enterRule(localContext, 28, OpenSearchPPLParser.RULE_sortCommand); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 374; - this.match(OpenSearchPPLParser.SORT); - this.state = 375; - this.sortbyClause(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public evalCommand(): EvalCommandContext { - let localContext = new EvalCommandContext(this.context, this.state); - this.enterRule(localContext, 30, OpenSearchPPLParser.RULE_evalCommand); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 377; - this.match(OpenSearchPPLParser.EVAL); - this.state = 378; - this.evalClause(); - this.state = 383; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 110) { - { - { - this.state = 379; - this.match(OpenSearchPPLParser.COMMA); - this.state = 380; - this.evalClause(); - } - } - this.state = 385; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public headCommand(): HeadCommandContext { - let localContext = new HeadCommandContext(this.context, this.state); - this.enterRule(localContext, 32, OpenSearchPPLParser.RULE_headCommand); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 386; - this.match(OpenSearchPPLParser.HEAD); - this.state = 388; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 118 || _la === 119 || _la === 330) { - { - this.state = 387; - localContext._number_ = this.integerLiteral(); - } - } - - this.state = 392; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 5) { - { - this.state = 390; - this.match(OpenSearchPPLParser.FROM); - this.state = 391; - localContext._from_ = this.integerLiteral(); - } - } - - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public topCommand(): TopCommandContext { - let localContext = new TopCommandContext(this.context, this.state); - this.enterRule(localContext, 34, OpenSearchPPLParser.RULE_topCommand); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 394; - this.match(OpenSearchPPLParser.TOP); - this.state = 396; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 118 || _la === 119 || _la === 330) { - { - this.state = 395; - localContext._number_ = this.integerLiteral(); - } - } - - this.state = 398; - this.fieldList(); - this.state = 400; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 28) { - { - this.state = 399; - this.byClause(); - } - } - - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public rareCommand(): RareCommandContext { - let localContext = new RareCommandContext(this.context, this.state); - this.enterRule(localContext, 36, OpenSearchPPLParser.RULE_rareCommand); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 402; - this.match(OpenSearchPPLParser.RARE); - this.state = 403; - this.fieldList(); - this.state = 405; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 28) { - { - this.state = 404; - this.byClause(); - } - } - - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public grokCommand(): GrokCommandContext { - let localContext = new GrokCommandContext(this.context, this.state); - this.enterRule(localContext, 38, OpenSearchPPLParser.RULE_grokCommand); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 407; - this.match(OpenSearchPPLParser.GROK); - { - this.state = 408; - localContext._source_field = this.expression(); - } - { - this.state = 409; - localContext._pattern = this.stringLiteral(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public parseCommand(): ParseCommandContext { - let localContext = new ParseCommandContext(this.context, this.state); - this.enterRule(localContext, 40, OpenSearchPPLParser.RULE_parseCommand); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 411; - this.match(OpenSearchPPLParser.PARSE); - { - this.state = 412; - localContext._source_field = this.expression(); - } - { - this.state = 413; - localContext._pattern = this.stringLiteral(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public patternsCommand(): PatternsCommandContext { - let localContext = new PatternsCommandContext(this.context, this.state); - this.enterRule(localContext, 42, OpenSearchPPLParser.RULE_patternsCommand); - try { - let alternative: number; - this.enterOuterAlt(localContext, 1); - { - this.state = 415; - this.match(OpenSearchPPLParser.PATTERNS); - this.state = 419; - this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 27, this.context); - while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { - if (alternative === 1) { - { - { - this.state = 416; - this.patternsParameter(); - } - } - } - this.state = 421; - this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 27, this.context); - } - { - this.state = 422; - localContext._source_field = this.expression(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public patternsParameter(): PatternsParameterContext { - let localContext = new PatternsParameterContext(this.context, this.state); - this.enterRule(localContext, 44, OpenSearchPPLParser.RULE_patternsParameter); - try { - this.state = 430; - this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { - case OpenSearchPPLParser.NEW_FIELD: - this.enterOuterAlt(localContext, 1); - { - { - this.state = 424; - this.match(OpenSearchPPLParser.NEW_FIELD); - this.state = 425; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 426; - localContext._new_field = this.stringLiteral(); - } - } - break; - case OpenSearchPPLParser.PATTERN: - this.enterOuterAlt(localContext, 2); - { - { - this.state = 427; - this.match(OpenSearchPPLParser.PATTERN); - this.state = 428; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 429; - localContext._pattern = this.stringLiteral(); - } + localContext = new NotExpressionContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 503; + this.match(OpenSearchPPLParser.NOT); + this.state = 504; + this.searchExpression(4); } break; - default: - throw new antlr.NoViableAltException(this); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public patternsMethod(): PatternsMethodContext { - let localContext = new PatternsMethodContext(this.context, this.state); - this.enterRule(localContext, 46, OpenSearchPPLParser.RULE_patternsMethod); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 432; - _la = this.tokenStream.LA(1); - if(!(_la === 18 || _la === 19)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public kmeansCommand(): KmeansCommandContext { - let localContext = new KmeansCommandContext(this.context, this.state); - this.enterRule(localContext, 48, OpenSearchPPLParser.RULE_kmeansCommand); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 434; - this.match(OpenSearchPPLParser.KMEANS); - this.state = 438; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (((((_la - 45)) & ~0x1F) === 0 && ((1 << (_la - 45)) & 7) !== 0)) { - { - { - this.state = 435; - this.kmeansParameter(); - } - } - this.state = 440; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public kmeansParameter(): KmeansParameterContext { - let localContext = new KmeansParameterContext(this.context, this.state); - this.enterRule(localContext, 50, OpenSearchPPLParser.RULE_kmeansParameter); - try { - this.state = 450; - this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.SEARCH: + case OpenSearchPPLParser.DESCRIBE: + case OpenSearchPPLParser.SHOW: + case OpenSearchPPLParser.EXPLAIN: + case OpenSearchPPLParser.FROM: + case OpenSearchPPLParser.WHERE: + case OpenSearchPPLParser.FIELDS: + case OpenSearchPPLParser.TABLE: + case OpenSearchPPLParser.RENAME: + case OpenSearchPPLParser.STATS: + case OpenSearchPPLParser.EVENTSTATS: + case OpenSearchPPLParser.DEDUP: + case OpenSearchPPLParser.SORT: + case OpenSearchPPLParser.EVAL: + case OpenSearchPPLParser.HEAD: + case OpenSearchPPLParser.BIN: + case OpenSearchPPLParser.TOP: + case OpenSearchPPLParser.RARE: + case OpenSearchPPLParser.PARSE: + case OpenSearchPPLParser.REGEX: + case OpenSearchPPLParser.REX: + case OpenSearchPPLParser.PUNCT: + case OpenSearchPPLParser.GROK: + case OpenSearchPPLParser.PATTERN: + case OpenSearchPPLParser.PATTERNS: + case OpenSearchPPLParser.NEW_FIELD: + case OpenSearchPPLParser.KMEANS: + case OpenSearchPPLParser.AD: + case OpenSearchPPLParser.ML: + case OpenSearchPPLParser.FILLNULL: + case OpenSearchPPLParser.FLATTEN: + case OpenSearchPPLParser.TRENDLINE: + case OpenSearchPPLParser.TIMECHART: + case OpenSearchPPLParser.EXPAND: + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + case OpenSearchPPLParser.METHOD: + case OpenSearchPPLParser.MAX_SAMPLE_COUNT: + case OpenSearchPPLParser.BUFFER_LIMIT: + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.LEFT_HINT: + case OpenSearchPPLParser.RIGHT_HINT: + case OpenSearchPPLParser.SOURCE: + case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.A: + case OpenSearchPPLParser.ASC: + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DESC: + case OpenSearchPPLParser.DATASOURCES: + case OpenSearchPPLParser.USING: + case OpenSearchPPLParser.WITH: + case OpenSearchPPLParser.SIMPLE: + case OpenSearchPPLParser.STANDARD: + case OpenSearchPPLParser.COST: + case OpenSearchPPLParser.EXTENDED: + case OpenSearchPPLParser.OVERRIDE: + case OpenSearchPPLParser.AUTO: + case OpenSearchPPLParser.STR: + case OpenSearchPPLParser.NUM: + case OpenSearchPPLParser.SMA: + case OpenSearchPPLParser.WMA: + case OpenSearchPPLParser.KEEPEMPTY: + case OpenSearchPPLParser.CONSECUTIVE: + case OpenSearchPPLParser.DEDUP_SPLITVALUES: + case OpenSearchPPLParser.PARTITIONS: + case OpenSearchPPLParser.ALLNUM: + case OpenSearchPPLParser.DELIM: + case OpenSearchPPLParser.BUCKET_NULLABLE: case OpenSearchPPLParser.CENTROIDS: - this.enterOuterAlt(localContext, 1); - { - { - this.state = 441; - this.match(OpenSearchPPLParser.CENTROIDS); - this.state = 442; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 443; - localContext._centroids = this.integerLiteral(); - } - } - break; case OpenSearchPPLParser.ITERATIONS: - this.enterOuterAlt(localContext, 2); - { - { - this.state = 444; - this.match(OpenSearchPPLParser.ITERATIONS); - this.state = 445; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 446; - localContext._iterations = this.integerLiteral(); - } - } - break; case OpenSearchPPLParser.DISTANCE_TYPE: - this.enterOuterAlt(localContext, 3); - { - { - this.state = 447; - this.match(OpenSearchPPLParser.DISTANCE_TYPE); - this.state = 448; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 449; - localContext._distance_type = this.stringLiteral(); - } - } - break; - default: - throw new antlr.NoViableAltException(this); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public adCommand(): AdCommandContext { - let localContext = new AdCommandContext(this.context, this.state); - this.enterRule(localContext, 52, OpenSearchPPLParser.RULE_adCommand); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 452; - this.match(OpenSearchPPLParser.AD); - this.state = 456; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (((((_la - 48)) & ~0x1F) === 0 && ((1 << (_la - 48)) & 2047) !== 0) || _la === 215) { - { - { - this.state = 453; - this.adParameter(); - } - } - this.state = 458; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public adParameter(): AdParameterContext { - let localContext = new AdParameterContext(this.context, this.state); - this.enterRule(localContext, 54, OpenSearchPPLParser.RULE_adParameter); - try { - this.state = 495; - this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { case OpenSearchPPLParser.NUMBER_OF_TREES: - this.enterOuterAlt(localContext, 1); - { - { - this.state = 459; - this.match(OpenSearchPPLParser.NUMBER_OF_TREES); - this.state = 460; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 461; - localContext._number_of_trees = this.integerLiteral(); - } - } - break; case OpenSearchPPLParser.SHINGLE_SIZE: - this.enterOuterAlt(localContext, 2); - { - { - this.state = 462; - this.match(OpenSearchPPLParser.SHINGLE_SIZE); - this.state = 463; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 464; - localContext._shingle_size = this.integerLiteral(); - } - } - break; case OpenSearchPPLParser.SAMPLE_SIZE: - this.enterOuterAlt(localContext, 3); - { - { - this.state = 465; - this.match(OpenSearchPPLParser.SAMPLE_SIZE); - this.state = 466; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 467; - localContext._sample_size = this.integerLiteral(); - } - } - break; case OpenSearchPPLParser.OUTPUT_AFTER: - this.enterOuterAlt(localContext, 4); - { - { - this.state = 468; - this.match(OpenSearchPPLParser.OUTPUT_AFTER); - this.state = 469; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 470; - localContext._output_after = this.integerLiteral(); - } - } - break; case OpenSearchPPLParser.TIME_DECAY: - this.enterOuterAlt(localContext, 5); - { - { - this.state = 471; - this.match(OpenSearchPPLParser.TIME_DECAY); - this.state = 472; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 473; - localContext._time_decay = this.decimalLiteral(); - } - } - break; case OpenSearchPPLParser.ANOMALY_RATE: - this.enterOuterAlt(localContext, 6); - { - { - this.state = 474; - this.match(OpenSearchPPLParser.ANOMALY_RATE); - this.state = 475; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 476; - localContext._anomaly_rate = this.decimalLiteral(); - } - } - break; case OpenSearchPPLParser.CATEGORY_FIELD: - this.enterOuterAlt(localContext, 7); - { - { - this.state = 477; - this.match(OpenSearchPPLParser.CATEGORY_FIELD); - this.state = 478; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 479; - localContext._category_field = this.stringLiteral(); - } - } - break; case OpenSearchPPLParser.TIME_FIELD: - this.enterOuterAlt(localContext, 8); - { - { - this.state = 480; - this.match(OpenSearchPPLParser.TIME_FIELD); - this.state = 481; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 482; - localContext._time_field = this.stringLiteral(); - } - } - break; - case OpenSearchPPLParser.DATE_FORMAT: - this.enterOuterAlt(localContext, 9); - { - { - this.state = 483; - this.match(OpenSearchPPLParser.DATE_FORMAT); - this.state = 484; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 485; - localContext._date_format = this.stringLiteral(); - } - } - break; case OpenSearchPPLParser.TIME_ZONE: - this.enterOuterAlt(localContext, 10); - { - { - this.state = 486; - this.match(OpenSearchPPLParser.TIME_ZONE); - this.state = 487; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 488; - localContext._time_zone = this.stringLiteral(); - } - } - break; case OpenSearchPPLParser.TRAINING_DATA_SIZE: - this.enterOuterAlt(localContext, 11); - { - { - this.state = 489; - this.match(OpenSearchPPLParser.TRAINING_DATA_SIZE); - this.state = 490; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 491; - localContext._training_data_size = this.integerLiteral(); - } - } - break; case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: - this.enterOuterAlt(localContext, 12); - { - { - this.state = 492; - this.match(OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD); - this.state = 493; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 494; - localContext._anomaly_score_threshold = this.decimalLiteral(); - } - } - break; - default: - throw new antlr.NoViableAltException(this); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public mlCommand(): MlCommandContext { - let localContext = new MlCommandContext(this.context, this.state); - this.enterRule(localContext, 56, OpenSearchPPLParser.RULE_mlCommand); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 497; - this.match(OpenSearchPPLParser.ML); - this.state = 501; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 3892314108) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 134217719) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 2147475455) !== 0) || ((((_la - 111)) & ~0x1F) === 0 && ((1 << (_la - 111)) & 4279238657) !== 0) || ((((_la - 143)) & ~0x1F) === 0 && ((1 << (_la - 143)) & 4294967295) !== 0) || ((((_la - 175)) & ~0x1F) === 0 && ((1 << (_la - 175)) & 4294967295) !== 0) || ((((_la - 207)) & ~0x1F) === 0 && ((1 << (_la - 207)) & 4294377471) !== 0) || ((((_la - 239)) & ~0x1F) === 0 && ((1 << (_la - 239)) & 4290772895) !== 0) || ((((_la - 271)) & ~0x1F) === 0 && ((1 << (_la - 271)) & 4294707191) !== 0) || ((((_la - 303)) & ~0x1F) === 0 && ((1 << (_la - 303)) & 67108863) !== 0) || _la === 335) { - { - { - this.state = 498; - this.mlArg(); - } - } - this.state = 503; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public mlArg(): MlArgContext { - let localContext = new MlArgContext(this.context, this.state); - this.enterRule(localContext, 58, OpenSearchPPLParser.RULE_mlArg); - try { - this.enterOuterAlt(localContext, 1); - { - { - this.state = 504; - localContext._argName = this.ident(); - this.state = 505; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 506; - localContext._argValue = this.literalValue(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public fromClause(): FromClauseContext { - let localContext = new FromClauseContext(this.context, this.state); - this.enterRule(localContext, 60, OpenSearchPPLParser.RULE_fromClause); - try { - this.state = 520; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 34, this.context) ) { - case 1: - this.enterOuterAlt(localContext, 1); - { - this.state = 508; - this.match(OpenSearchPPLParser.SOURCE); - this.state = 509; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 510; - this.tableSourceClause(); - } - break; - case 2: - this.enterOuterAlt(localContext, 2); - { - this.state = 511; - this.match(OpenSearchPPLParser.INDEX); - this.state = 512; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 513; - this.tableSourceClause(); - } - break; - case 3: - this.enterOuterAlt(localContext, 3); - { - this.state = 514; - this.match(OpenSearchPPLParser.SOURCE); - this.state = 515; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 516; - this.tableFunction(); - } - break; - case 4: - this.enterOuterAlt(localContext, 4); - { - this.state = 517; - this.match(OpenSearchPPLParser.INDEX); - this.state = 518; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 519; - this.tableFunction(); - } - break; - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public tableSourceClause(): TableSourceClauseContext { - let localContext = new TableSourceClauseContext(this.context, this.state); - this.enterRule(localContext, 62, OpenSearchPPLParser.RULE_tableSourceClause); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 522; - this.tableSource(); - this.state = 527; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 110) { - { - { - this.state = 523; - this.match(OpenSearchPPLParser.COMMA); - this.state = 524; - this.tableSource(); - } - } - this.state = 529; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public renameClasue(): RenameClasueContext { - let localContext = new RenameClasueContext(this.context, this.state); - this.enterRule(localContext, 64, OpenSearchPPLParser.RULE_renameClasue); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 530; - localContext._orignalField = this.wcFieldExpression(); - this.state = 531; - this.match(OpenSearchPPLParser.AS); - this.state = 532; - localContext._renamedField = this.wcFieldExpression(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; + case OpenSearchPPLParser.APPEND: + case OpenSearchPPLParser.COUNTFIELD: + case OpenSearchPPLParser.SHOWCOUNT: + case OpenSearchPPLParser.INPUT: + case OpenSearchPPLParser.OUTPUT: + case OpenSearchPPLParser.PATH: + case OpenSearchPPLParser.CASE: + case OpenSearchPPLParser.ELSE: + case OpenSearchPPLParser.IN: + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.GEOIP: + case OpenSearchPPLParser.TRUE: + case OpenSearchPPLParser.FALSE: + case OpenSearchPPLParser.REGEXP: + case OpenSearchPPLParser.REGEX_MATCH: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.DAY_HOUR: + case OpenSearchPPLParser.DAY_MICROSECOND: + case OpenSearchPPLParser.DAY_MINUTE: + case OpenSearchPPLParser.DAY_OF_YEAR: + case OpenSearchPPLParser.DAY_SECOND: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.HOUR_MICROSECOND: + case OpenSearchPPLParser.HOUR_MINUTE: + case OpenSearchPPLParser.HOUR_OF_DAY: + case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MINUTE_MICROSECOND: + case OpenSearchPPLParser.MINUTE_OF_DAY: + case OpenSearchPPLParser.MINUTE_OF_HOUR: + case OpenSearchPPLParser.MINUTE_SECOND: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.MONTH_OF_YEAR: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.SECOND_MICROSECOND: + case OpenSearchPPLParser.SECOND_OF_MINUTE: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.WEEK_OF_YEAR: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.LOOKUP: + case OpenSearchPPLParser.IP: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.ARROW: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT_APPROX: + case OpenSearchPPLParser.ESTDC: + case OpenSearchPPLParser.ESTDC_ERROR: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MEAN: + case OpenSearchPPLParser.MEDIAN: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.MODE: + case OpenSearchPPLParser.RANGE: + case OpenSearchPPLParser.STDEV: + case OpenSearchPPLParser.STDEVP: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.SUMSQ: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.PERCENTILE: + case OpenSearchPPLParser.PERCENTILE_APPROX: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: + case OpenSearchPPLParser.TAKE: + case OpenSearchPPLParser.LIST: + case OpenSearchPPLParser.VALUES: + case OpenSearchPPLParser.PER_DAY: + case OpenSearchPPLParser.PER_HOUR: + case OpenSearchPPLParser.PER_MINUTE: + case OpenSearchPPLParser.PER_SECOND: + case OpenSearchPPLParser.RATE: + case OpenSearchPPLParser.SPARKLINE: + case OpenSearchPPLParser.C: + case OpenSearchPPLParser.DC: + case OpenSearchPPLParser.ROW_NUMBER: + case OpenSearchPPLParser.RANK: + case OpenSearchPPLParser.DENSE_RANK: + case OpenSearchPPLParser.PERCENT_RANK: + case OpenSearchPPLParser.CUME_DIST: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.NTH: + case OpenSearchPPLParser.NTILE: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CBRT: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG_WITH_BASE: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POSITION: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.ADDTIME: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATEDIFF: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.DAY_OF_MONTH: + case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.EXTRACT: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.GET_FORMAT: + case OpenSearchPPLParser.LAST_DAY: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SEC_TO_TIME: + case OpenSearchPPLParser.STR_TO_DATE: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SUBTIME: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMEDIFF: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TIME_FORMAT: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.TO_SECONDS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.WEEKDAY: + case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.REVERSE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.BETWEEN: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + case OpenSearchPPLParser.JSON_VALID: + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.COALESCE: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: + case OpenSearchPPLParser.ANALYZE_WILDCARD: + case OpenSearchPPLParser.ANALYZER: + case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case OpenSearchPPLParser.BOOST: + case OpenSearchPPLParser.CUTOFF_FREQUENCY: + case OpenSearchPPLParser.DEFAULT_FIELD: + case OpenSearchPPLParser.DEFAULT_OPERATOR: + case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: + case OpenSearchPPLParser.ESCAPE: + case OpenSearchPPLParser.FLAGS: + case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: + case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: + case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: + case OpenSearchPPLParser.FUZZY_REWRITE: + case OpenSearchPPLParser.FUZZINESS: + case OpenSearchPPLParser.LENIENT: + case OpenSearchPPLParser.LOW_FREQ_OPERATOR: + case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: + case OpenSearchPPLParser.MAX_EXPANSIONS: + case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: + case OpenSearchPPLParser.OPERATOR: + case OpenSearchPPLParser.PHRASE_SLOP: + case OpenSearchPPLParser.PREFIX_LENGTH: + case OpenSearchPPLParser.QUOTE_ANALYZER: + case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: + case OpenSearchPPLParser.REWRITE: + case OpenSearchPPLParser.SLOP: + case OpenSearchPPLParser.TIE_BREAKER: + case OpenSearchPPLParser.TYPE: + case OpenSearchPPLParser.ZERO_TERMS_QUERY: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.SEC: + case OpenSearchPPLParser.SECS: + case OpenSearchPPLParser.SECONDS: + case OpenSearchPPLParser.MINS: + case OpenSearchPPLParser.MINUTES: + case OpenSearchPPLParser.HR: + case OpenSearchPPLParser.HRS: + case OpenSearchPPLParser.HOURS: + case OpenSearchPPLParser.DAYS: + case OpenSearchPPLParser.MON: + case OpenSearchPPLParser.MONTHS: + case OpenSearchPPLParser.US: + case OpenSearchPPLParser.CS: + case OpenSearchPPLParser.DS: + case OpenSearchPPLParser.PERCENTILE_SHORTCUT: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.INTEGER_LITERAL: + case OpenSearchPPLParser.DECIMAL_LITERAL: + case OpenSearchPPLParser.FLOAT_LITERAL: + case OpenSearchPPLParser.DOUBLE_LITERAL: + case OpenSearchPPLParser.DQUOTA_STRING: + case OpenSearchPPLParser.SQUOTA_STRING: + case OpenSearchPPLParser.BQUOTA_STRING: + { + localContext = new TermExpressionContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 505; + this.searchTerm(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 516; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 13, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + this.state = 514; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 12, this.context) ) { + case 1: + { + localContext = new OrExpressionContext(new SearchExpressionContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_searchExpression); + this.state = 508; + if (!(this.precpred(this.context, 3))) { + throw this.createFailedPredicateException("this.precpred(this.context, 3)"); + } + this.state = 509; + this.match(OpenSearchPPLParser.OR); + this.state = 510; + this.searchExpression(4); + } + break; + case 2: + { + localContext = new AndExpressionContext(new SearchExpressionContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_searchExpression); + this.state = 511; + if (!(this.precpred(this.context, 2))) { + throw this.createFailedPredicateException("this.precpred(this.context, 2)"); + } + this.state = 512; + this.match(OpenSearchPPLParser.AND); + this.state = 513; + this.searchExpression(3); + } + break; + } + } + } + this.state = 518; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 13, this.context); } - } - finally { - this.exitRule(); - } - return localContext; - } - public byClause(): ByClauseContext { - let localContext = new ByClauseContext(this.context, this.state); - this.enterRule(localContext, 66, OpenSearchPPLParser.RULE_byClause); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 534; - this.match(OpenSearchPPLParser.BY); - this.state = 535; - this.fieldList(); } } catch (re) { @@ -2307,46 +2054,39 @@ export class OpenSearchPPLParser extends antlr.Parser { } } finally { - this.exitRule(); + this.unrollRecursionContexts(parentContext); } return localContext; } - public statsByClause(): StatsByClauseContext { - let localContext = new StatsByClauseContext(this.context, this.state); - this.enterRule(localContext, 68, OpenSearchPPLParser.RULE_statsByClause); + public searchTerm(): SearchTermContext { + let localContext = new SearchTermContext(this.context, this.state); + this.enterRule(localContext, 22, OpenSearchPPLParser.RULE_searchTerm); try { - this.state = 546; + this.state = 522; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 36, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 14, this.context) ) { case 1: + localContext = new SearchComparisonTermContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 537; - this.match(OpenSearchPPLParser.BY); - this.state = 538; - this.fieldList(); + this.state = 519; + this.searchFieldComparison(); } break; case 2: + localContext = new SearchInListTermContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 539; - this.match(OpenSearchPPLParser.BY); - this.state = 540; - this.bySpanClause(); + this.state = 520; + this.searchFieldInList(); } break; case 3: + localContext = new SearchLiteralTermContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 541; - this.match(OpenSearchPPLParser.BY); - this.state = 542; - this.bySpanClause(); - this.state = 543; - this.match(OpenSearchPPLParser.COMMA); - this.state = 544; - this.fieldList(); + this.state = 521; + this.searchLiteral(); } break; } @@ -2364,71 +2104,48 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public bySpanClause(): BySpanClauseContext { - let localContext = new BySpanClauseContext(this.context, this.state); - this.enterRule(localContext, 70, OpenSearchPPLParser.RULE_bySpanClause); - let _la: number; + public searchLiteral(): SearchLiteralContext { + let localContext = new SearchLiteralContext(this.context, this.state); + this.enterRule(localContext, 24, OpenSearchPPLParser.RULE_searchLiteral); try { - this.enterOuterAlt(localContext, 1); - { - this.state = 548; - this.spanClause(); - this.state = 551; + this.state = 529; this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 27) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 15, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); { - this.state = 549; - this.match(OpenSearchPPLParser.AS); - this.state = 550; - localContext._alias = this.qualifiedName(); + this.state = 524; + this.numericLiteral(); } - } - - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public spanClause(): SpanClauseContext { - let localContext = new SpanClauseContext(this.context, this.state); - this.enterRule(localContext, 72, OpenSearchPPLParser.RULE_spanClause); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 553; - this.match(OpenSearchPPLParser.SPAN); - this.state = 554; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 555; - this.fieldExpression(); - this.state = 556; - this.match(OpenSearchPPLParser.COMMA); - this.state = 557; - localContext._value = this.literalValue(); - this.state = 559; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 31 || ((((_la - 70)) & ~0x1F) === 0 && ((1 << (_la - 70)) & 174612545) !== 0) || ((((_la - 321)) & ~0x1F) === 0 && ((1 << (_la - 321)) & 127) !== 0)) { + break; + case 2: + this.enterOuterAlt(localContext, 2); { - this.state = 558; - localContext._unit = this.timespanUnit(); + this.state = 525; + this.booleanLiteral(); } - } - - this.state = 561; - this.match(OpenSearchPPLParser.RT_PRTHS); + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 526; + this.match(OpenSearchPPLParser.ID); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 527; + this.stringLiteral(); + } + break; + case 5: + this.enterOuterAlt(localContext, 5); + { + this.state = 528; + this.searchableKeyWord(); + } + break; } } catch (re) { @@ -2444,31 +2161,19 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public sortbyClause(): SortbyClauseContext { - let localContext = new SortbyClauseContext(this.context, this.state); - this.enterRule(localContext, 74, OpenSearchPPLParser.RULE_sortbyClause); - let _la: number; + public searchFieldComparison(): SearchFieldComparisonContext { + let localContext = new SearchFieldComparisonContext(this.context, this.state); + this.enterRule(localContext, 26, OpenSearchPPLParser.RULE_searchFieldComparison); try { + localContext = new SearchFieldCompareContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 563; - this.sortField(); - this.state = 568; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 110) { - { - { - this.state = 564; - this.match(OpenSearchPPLParser.COMMA); - this.state = 565; - this.sortField(); - } - } - this.state = 570; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } + this.state = 531; + this.fieldExpression(); + this.state = 532; + this.searchComparisonOperator(); + this.state = 533; + this.searchLiteral(); } } catch (re) { @@ -2484,18 +2189,23 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public evalClause(): EvalClauseContext { - let localContext = new EvalClauseContext(this.context, this.state); - this.enterRule(localContext, 76, OpenSearchPPLParser.RULE_evalClause); + public searchFieldInList(): SearchFieldInListContext { + let localContext = new SearchFieldInListContext(this.context, this.state); + this.enterRule(localContext, 28, OpenSearchPPLParser.RULE_searchFieldInList); try { + localContext = new SearchFieldInValuesContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 571; + this.state = 535; this.fieldExpression(); - this.state = 572; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 573; - this.expression(); + this.state = 536; + this.match(OpenSearchPPLParser.IN); + this.state = 537; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 538; + this.searchLiteralList(); + this.state = 539; + this.match(OpenSearchPPLParser.RT_PRTHS); } } catch (re) { @@ -2511,27 +2221,32 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public statsAggTerm(): StatsAggTermContext { - let localContext = new StatsAggTermContext(this.context, this.state); - this.enterRule(localContext, 78, OpenSearchPPLParser.RULE_statsAggTerm); + public searchLiteralList(): SearchLiteralListContext { + let localContext = new SearchLiteralListContext(this.context, this.state); + this.enterRule(localContext, 30, OpenSearchPPLParser.RULE_searchLiteralList); let _la: number; try { + localContext = new SearchLiteralsContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 575; - this.statsFunction(); - this.state = 578; + this.state = 541; + this.searchLiteral(); + this.state = 546; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 27) { + while (_la === 168) { { - this.state = 576; - this.match(OpenSearchPPLParser.AS); - this.state = 577; - localContext._alias = this.wcFieldExpression(); + { + this.state = 542; + this.match(OpenSearchPPLParser.COMMA); + this.state = 543; + this.searchLiteral(); } + } + this.state = 548; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); } - } } catch (re) { @@ -2547,77 +2262,63 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public statsFunction(): StatsFunctionContext { - let localContext = new StatsFunctionContext(this.context, this.state); - this.enterRule(localContext, 80, OpenSearchPPLParser.RULE_statsFunction); - let _la: number; + public searchComparisonOperator(): SearchComparisonOperatorContext { + let localContext = new SearchComparisonOperatorContext(this.context, this.state); + this.enterRule(localContext, 32, OpenSearchPPLParser.RULE_searchComparisonOperator); try { - this.state = 595; + this.state = 555; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 41, this.context) ) { - case 1: - localContext = new StatsFunctionCallContext(localContext); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.EQUAL: + localContext = new EqualsContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 580; - this.statsFunctionName(); - this.state = 581; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 582; - this.valueExpression(0); - this.state = 583; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 549; + this.match(OpenSearchPPLParser.EQUAL); } break; - case 2: - localContext = new CountAllFunctionCallContext(localContext); + case OpenSearchPPLParser.NOT_EQUAL: + localContext = new NotEqualsContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 585; - this.match(OpenSearchPPLParser.COUNT); - this.state = 586; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 587; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 550; + this.match(OpenSearchPPLParser.NOT_EQUAL); } break; - case 3: - localContext = new DistinctCountFunctionCallContext(localContext); + case OpenSearchPPLParser.LESS: + localContext = new LessThanContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 588; - _la = this.tokenStream.LA(1); - if(!(_la === 137 || _la === 171)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - this.state = 589; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 590; - this.valueExpression(0); - this.state = 591; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 551; + this.match(OpenSearchPPLParser.LESS); } break; - case 4: - localContext = new PercentileAggFunctionCallContext(localContext); + case OpenSearchPPLParser.NOT_GREATER: + localContext = new LessOrEqualContext(localContext); this.enterOuterAlt(localContext, 4); { - this.state = 593; - this.percentileAggFunction(); + this.state = 552; + this.match(OpenSearchPPLParser.NOT_GREATER); } break; - case 5: - localContext = new TakeAggFunctionCallContext(localContext); + case OpenSearchPPLParser.GREATER: + localContext = new GreaterThanContext(localContext); this.enterOuterAlt(localContext, 5); { - this.state = 594; - this.takeAggFunction(); + this.state = 553; + this.match(OpenSearchPPLParser.GREATER); + } + break; + case OpenSearchPPLParser.NOT_LESS: + localContext = new GreaterOrEqualContext(localContext); + this.enterOuterAlt(localContext, 6); + { + this.state = 554; + this.match(OpenSearchPPLParser.NOT_LESS); } break; + default: + throw new antlr.NoViableAltException(this); } } catch (re) { @@ -2633,22 +2334,16 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public statsFunctionName(): StatsFunctionNameContext { - let localContext = new StatsFunctionNameContext(this.context, this.state); - this.enterRule(localContext, 82, OpenSearchPPLParser.RULE_statsFunctionName); - let _la: number; + public describeCommand(): DescribeCommandContext { + let localContext = new DescribeCommandContext(this.context, this.state); + this.enterRule(localContext, 34, OpenSearchPPLParser.RULE_describeCommand); try { this.enterOuterAlt(localContext, 1); { - this.state = 597; - _la = this.tokenStream.LA(1); - if(!(((((_la - 135)) & ~0x1F) === 0 && ((1 << (_la - 135)) & 500003) !== 0))) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } + this.state = 557; + this.match(OpenSearchPPLParser.DESCRIBE); + this.state = 558; + this.tableSourceClause(); } } catch (re) { @@ -2664,33 +2359,16 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public takeAggFunction(): TakeAggFunctionContext { - let localContext = new TakeAggFunctionContext(this.context, this.state); - this.enterRule(localContext, 84, OpenSearchPPLParser.RULE_takeAggFunction); - let _la: number; + public showDataSourcesCommand(): ShowDataSourcesCommandContext { + let localContext = new ShowDataSourcesCommandContext(this.context, this.state); + this.enterRule(localContext, 36, OpenSearchPPLParser.RULE_showDataSourcesCommand); try { this.enterOuterAlt(localContext, 1); { - this.state = 599; - this.match(OpenSearchPPLParser.TAKE); - this.state = 600; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 601; - this.fieldExpression(); - this.state = 604; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 110) { - { - this.state = 602; - this.match(OpenSearchPPLParser.COMMA); - this.state = 603; - localContext._size = this.integerLiteral(); - } - } - - this.state = 606; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 560; + this.match(OpenSearchPPLParser.SHOW); + this.state = 561; + this.match(OpenSearchPPLParser.DATASOURCES); } } catch (re) { @@ -2706,26 +2384,16 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public percentileAggFunction(): PercentileAggFunctionContext { - let localContext = new PercentileAggFunctionContext(this.context, this.state); - this.enterRule(localContext, 86, OpenSearchPPLParser.RULE_percentileAggFunction); + public whereCommand(): WhereCommandContext { + let localContext = new WhereCommandContext(this.context, this.state); + this.enterRule(localContext, 38, OpenSearchPPLParser.RULE_whereCommand); try { this.enterOuterAlt(localContext, 1); { - this.state = 608; - this.match(OpenSearchPPLParser.PERCENTILE); - this.state = 609; - this.match(OpenSearchPPLParser.LESS); - this.state = 610; - localContext._value = this.integerLiteral(); - this.state = 611; - this.match(OpenSearchPPLParser.GREATER); - this.state = 612; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 613; - localContext._aggField = this.fieldExpression(); - this.state = 614; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 563; + this.match(OpenSearchPPLParser.WHERE); + this.state = 564; + this.logicalExpression(0); } } catch (re) { @@ -2741,35 +2409,83 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public expression(): ExpressionContext { - let localContext = new ExpressionContext(this.context, this.state); - this.enterRule(localContext, 88, OpenSearchPPLParser.RULE_expression); + public fieldsCommand(): FieldsCommandContext { + let localContext = new FieldsCommandContext(this.context, this.state); + this.enterRule(localContext, 40, OpenSearchPPLParser.RULE_fieldsCommand); try { - this.state = 619; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 43, this.context) ) { - case 1: - this.enterOuterAlt(localContext, 1); + this.enterOuterAlt(localContext, 1); + { + this.state = 566; + this.match(OpenSearchPPLParser.FIELDS); + this.state = 567; + this.fieldsCommandBody(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public tableCommand(): TableCommandContext { + let localContext = new TableCommandContext(this.context, this.state); + this.enterRule(localContext, 42, OpenSearchPPLParser.RULE_tableCommand); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 569; + this.match(OpenSearchPPLParser.TABLE); + this.state = 570; + this.fieldsCommandBody(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public fieldsCommandBody(): FieldsCommandBodyContext { + let localContext = new FieldsCommandBodyContext(this.context, this.state); + this.enterRule(localContext, 44, OpenSearchPPLParser.RULE_fieldsCommandBody); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 573; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 18, this.context) ) { + case 1: { - this.state = 616; - this.logicalExpression(); + this.state = 572; + _la = this.tokenStream.LA(1); + if(!(_la === 177 || _la === 178)) { + this.errorHandler.recoverInline(this); } - break; - case 2: - this.enterOuterAlt(localContext, 2); - { - this.state = 617; - this.comparisonExpression(); + else { + this.errorHandler.reportMatch(this); + this.consume(); } - break; - case 3: - this.enterOuterAlt(localContext, 3); - { - this.state = 618; - this.valueExpression(0); } break; } + this.state = 575; + this.wcFieldList(); + } } catch (re) { if (re instanceof antlr.RecognitionException) { @@ -2784,14 +2500,39 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public logicalExpression(): LogicalExpressionContext { - let localContext = new LogicalExpressionContext(this.context, this.state); - this.enterRule(localContext, 90, OpenSearchPPLParser.RULE_logicalExpression); + public wcFieldList(): WcFieldListContext { + let localContext = new WcFieldListContext(this.context, this.state); + this.enterRule(localContext, 46, OpenSearchPPLParser.RULE_wcFieldList); + let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 621; - this.logicalOrExpression(); + this.state = 577; + this.selectFieldExpression(); + this.state = 584; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4257218044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 2682862783) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294959103) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4162840575) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 805306367) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 2399156237) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4294443007) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 4294967295) !== 0) || ((((_la - 262)) & ~0x1F) === 0 && ((1 << (_la - 262)) & 4294967295) !== 0) || ((((_la - 294)) & ~0x1F) === 0 && ((1 << (_la - 294)) & 4294967295) !== 0) || ((((_la - 328)) & ~0x1F) === 0 && ((1 << (_la - 328)) & 4294901759) !== 0) || ((((_la - 360)) & ~0x1F) === 0 && ((1 << (_la - 360)) & 4294967295) !== 0) || ((((_la - 392)) & ~0x1F) === 0 && ((1 << (_la - 392)) & 4294967295) !== 0) || ((((_la - 424)) & ~0x1F) === 0 && ((1 << (_la - 424)) & 4294966799) !== 0) || _la === 464) { + { + { + this.state = 579; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 168) { + { + this.state = 578; + this.match(OpenSearchPPLParser.COMMA); + } + } + + this.state = 581; + this.selectFieldExpression(); + } + } + this.state = 586; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } } } catch (re) { @@ -2807,28 +2548,38 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public logicalOrExpression(): LogicalOrExpressionContext { - let localContext = new LogicalOrExpressionContext(this.context, this.state); - this.enterRule(localContext, 92, OpenSearchPPLParser.RULE_logicalOrExpression); + public renameCommand(): RenameCommandContext { + let localContext = new RenameCommandContext(this.context, this.state); + this.enterRule(localContext, 48, OpenSearchPPLParser.RULE_renameCommand); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 623; - this.logicalXorExpression(); - this.state = 628; + this.state = 587; + this.match(OpenSearchPPLParser.RENAME); + this.state = 588; + this.renameClasue(); + this.state = 595; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 62) { + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4257218044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 2682862783) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294959103) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4162840575) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 805306367) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 2399156237) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4294443007) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 4294967295) !== 0) || ((((_la - 262)) & ~0x1F) === 0 && ((1 << (_la - 262)) & 4294967295) !== 0) || ((((_la - 294)) & ~0x1F) === 0 && ((1 << (_la - 294)) & 4294967295) !== 0) || ((((_la - 328)) & ~0x1F) === 0 && ((1 << (_la - 328)) & 4294901759) !== 0) || ((((_la - 360)) & ~0x1F) === 0 && ((1 << (_la - 360)) & 4294967295) !== 0) || ((((_la - 392)) & ~0x1F) === 0 && ((1 << (_la - 392)) & 4294967295) !== 0) || ((((_la - 424)) & ~0x1F) === 0 && ((1 << (_la - 424)) & 4294966799) !== 0) || _la === 464) { { { - this.state = 624; - this.match(OpenSearchPPLParser.OR); - this.state = 625; - this.logicalXorExpression(); + this.state = 590; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 168) { + { + this.state = 589; + this.match(OpenSearchPPLParser.COMMA); + } + } + + this.state = 592; + this.renameClasue(); } } - this.state = 630; + this.state = 597; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -2847,31 +2598,55 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public logicalXorExpression(): LogicalXorExpressionContext { - let localContext = new LogicalXorExpressionContext(this.context, this.state); - this.enterRule(localContext, 94, OpenSearchPPLParser.RULE_logicalXorExpression); + public statsCommand(): StatsCommandContext { + let localContext = new StatsCommandContext(this.context, this.state); + this.enterRule(localContext, 50, OpenSearchPPLParser.RULE_statsCommand); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 631; - this.logicalAndExpression(); - this.state = 636; + this.state = 598; + this.match(OpenSearchPPLParser.STATS); + this.state = 599; + this.statsArgs(); + this.state = 600; + this.statsAggTerm(); + this.state = 605; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 64) { + while (_la === 168) { { { - this.state = 632; - this.match(OpenSearchPPLParser.XOR); - this.state = 633; - this.logicalAndExpression(); + this.state = 601; + this.match(OpenSearchPPLParser.COMMA); + this.state = 602; + this.statsAggTerm(); } } - this.state = 638; + this.state = 607; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } + this.state = 609; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 62) { + { + this.state = 608; + this.statsByClause(); + } + } + + this.state = 612; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 85) { + { + this.state = 611; + this.dedupSplitArg(); + } + } + } } catch (re) { @@ -2887,42 +2662,188 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public logicalAndExpression(): LogicalAndExpressionContext { - let localContext = new LogicalAndExpressionContext(this.context, this.state); - this.enterRule(localContext, 96, OpenSearchPPLParser.RULE_logicalAndExpression); + public statsArgs(): StatsArgsContext { + let localContext = new StatsArgsContext(this.context, this.state); + this.enterRule(localContext, 52, OpenSearchPPLParser.RULE_statsArgs); let _la: number; try { - let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 639; - this.logicalNotExpression(); - this.state = 646; + this.state = 620; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 47, this.context); - while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { - if (alternative === 1) { + _la = this.tokenStream.LA(1); + while (((((_la - 86)) & ~0x1F) === 0 && ((1 << (_la - 86)) & 15) !== 0)) { + { + this.state = 618; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.PARTITIONS: { + this.state = 614; + this.partitionsArg(); + } + break; + case OpenSearchPPLParser.ALLNUM: { - this.state = 641; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 63) { - { - this.state = 640; - this.match(OpenSearchPPLParser.AND); - } + this.state = 615; + this.allnumArg(); } - - this.state = 643; - this.logicalNotExpression(); + break; + case OpenSearchPPLParser.DELIM: + { + this.state = 616; + this.delimArg(); } + break; + case OpenSearchPPLParser.BUCKET_NULLABLE: + { + this.state = 617; + this.bucketNullableArg(); } + break; + default: + throw new antlr.NoViableAltException(this); + } } - this.state = 648; + this.state = 622; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 47, this.context); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public partitionsArg(): PartitionsArgContext { + let localContext = new PartitionsArgContext(this.context, this.state); + this.enterRule(localContext, 54, OpenSearchPPLParser.RULE_partitionsArg); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 623; + this.match(OpenSearchPPLParser.PARTITIONS); + this.state = 624; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 625; + localContext._partitions = this.integerLiteral(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public allnumArg(): AllnumArgContext { + let localContext = new AllnumArgContext(this.context, this.state); + this.enterRule(localContext, 56, OpenSearchPPLParser.RULE_allnumArg); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 627; + this.match(OpenSearchPPLParser.ALLNUM); + this.state = 628; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 629; + localContext._allnum = this.booleanLiteral(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public delimArg(): DelimArgContext { + let localContext = new DelimArgContext(this.context, this.state); + this.enterRule(localContext, 58, OpenSearchPPLParser.RULE_delimArg); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 631; + this.match(OpenSearchPPLParser.DELIM); + this.state = 632; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 633; + localContext._delim = this.stringLiteral(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public bucketNullableArg(): BucketNullableArgContext { + let localContext = new BucketNullableArgContext(this.context, this.state); + this.enterRule(localContext, 60, OpenSearchPPLParser.RULE_bucketNullableArg); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 635; + this.match(OpenSearchPPLParser.BUCKET_NULLABLE); + this.state = 636; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 637; + localContext._bucket_nullable = this.booleanLiteral(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; } + } + finally { + this.exitRule(); + } + return localContext; + } + public dedupSplitArg(): DedupSplitArgContext { + let localContext = new DedupSplitArgContext(this.context, this.state); + this.enterRule(localContext, 62, OpenSearchPPLParser.RULE_dedupSplitArg); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 639; + this.match(OpenSearchPPLParser.DEDUP_SPLITVALUES); + this.state = 640; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 641; + localContext._dedupsplit = this.booleanLiteral(); } } catch (re) { @@ -2938,320 +2859,107 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public logicalNotExpression(): LogicalNotExpressionContext { - let localContext = new LogicalNotExpressionContext(this.context, this.state); - this.enterRule(localContext, 98, OpenSearchPPLParser.RULE_logicalNotExpression); + public eventstatsCommand(): EventstatsCommandContext { + let localContext = new EventstatsCommandContext(this.context, this.state); + this.enterRule(localContext, 64, OpenSearchPPLParser.RULE_eventstatsCommand); + let _la: number; try { - this.state = 652; + this.enterOuterAlt(localContext, 1); + { + this.state = 643; + this.match(OpenSearchPPLParser.EVENTSTATS); + this.state = 644; + this.eventstatsAggTerm(); + this.state = 649; this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { - case OpenSearchPPLParser.NOT: - this.enterOuterAlt(localContext, 1); + _la = this.tokenStream.LA(1); + while (_la === 168) { { - this.state = 649; - this.match(OpenSearchPPLParser.NOT); - this.state = 650; - this.logicalNotExpression(); - } + { + this.state = 645; + this.match(OpenSearchPPLParser.COMMA); + this.state = 646; + this.eventstatsAggTerm(); + } + } + this.state = 651; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 653; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 62) { + { + this.state = 652; + this.statsByClause(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public dedupCommand(): DedupCommandContext { + let localContext = new DedupCommandContext(this.context, this.state); + this.enterRule(localContext, 66, OpenSearchPPLParser.RULE_dedupCommand); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 655; + this.match(OpenSearchPPLParser.DEDUP); + this.state = 657; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 30, this.context) ) { + case 1: + { + this.state = 656; + localContext._number_ = this.integerLiteral(); + } break; - case OpenSearchPPLParser.SEARCH: - case OpenSearchPPLParser.DESCRIBE: - case OpenSearchPPLParser.SHOW: - case OpenSearchPPLParser.FROM: - case OpenSearchPPLParser.WHERE: - case OpenSearchPPLParser.FIELDS: - case OpenSearchPPLParser.RENAME: - case OpenSearchPPLParser.STATS: - case OpenSearchPPLParser.DEDUP: - case OpenSearchPPLParser.SORT: - case OpenSearchPPLParser.EVAL: - case OpenSearchPPLParser.HEAD: - case OpenSearchPPLParser.TOP: - case OpenSearchPPLParser.RARE: - case OpenSearchPPLParser.PARSE: - case OpenSearchPPLParser.METHOD: - case OpenSearchPPLParser.REGEX: - case OpenSearchPPLParser.PUNCT: - case OpenSearchPPLParser.GROK: - case OpenSearchPPLParser.PATTERN: - case OpenSearchPPLParser.PATTERNS: - case OpenSearchPPLParser.NEW_FIELD: - case OpenSearchPPLParser.KMEANS: - case OpenSearchPPLParser.AD: - case OpenSearchPPLParser.ML: - case OpenSearchPPLParser.SOURCE: - case OpenSearchPPLParser.INDEX: - case OpenSearchPPLParser.D: - case OpenSearchPPLParser.DESC: - case OpenSearchPPLParser.DATASOURCES: - case OpenSearchPPLParser.SORTBY: - case OpenSearchPPLParser.STR: - case OpenSearchPPLParser.IP: - case OpenSearchPPLParser.NUM: - case OpenSearchPPLParser.KEEPEMPTY: - case OpenSearchPPLParser.CONSECUTIVE: - case OpenSearchPPLParser.DEDUP_SPLITVALUES: - case OpenSearchPPLParser.PARTITIONS: - case OpenSearchPPLParser.ALLNUM: - case OpenSearchPPLParser.DELIM: - case OpenSearchPPLParser.CENTROIDS: - case OpenSearchPPLParser.ITERATIONS: - case OpenSearchPPLParser.DISTANCE_TYPE: - case OpenSearchPPLParser.NUMBER_OF_TREES: - case OpenSearchPPLParser.SHINGLE_SIZE: - case OpenSearchPPLParser.SAMPLE_SIZE: - case OpenSearchPPLParser.OUTPUT_AFTER: - case OpenSearchPPLParser.TIME_DECAY: - case OpenSearchPPLParser.ANOMALY_RATE: - case OpenSearchPPLParser.CATEGORY_FIELD: - case OpenSearchPPLParser.TIME_FIELD: - case OpenSearchPPLParser.TIME_ZONE: - case OpenSearchPPLParser.TRAINING_DATA_SIZE: - case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: - case OpenSearchPPLParser.TRUE: - case OpenSearchPPLParser.FALSE: - case OpenSearchPPLParser.CONVERT_TZ: - case OpenSearchPPLParser.DATETIME: - case OpenSearchPPLParser.DAY: - case OpenSearchPPLParser.DAY_HOUR: - case OpenSearchPPLParser.DAY_MICROSECOND: - case OpenSearchPPLParser.DAY_MINUTE: - case OpenSearchPPLParser.DAY_OF_YEAR: - case OpenSearchPPLParser.DAY_SECOND: - case OpenSearchPPLParser.HOUR: - case OpenSearchPPLParser.HOUR_MICROSECOND: - case OpenSearchPPLParser.HOUR_MINUTE: - case OpenSearchPPLParser.HOUR_OF_DAY: - case OpenSearchPPLParser.HOUR_SECOND: - case OpenSearchPPLParser.INTERVAL: - case OpenSearchPPLParser.MICROSECOND: - case OpenSearchPPLParser.MILLISECOND: - case OpenSearchPPLParser.MINUTE: - case OpenSearchPPLParser.MINUTE_MICROSECOND: - case OpenSearchPPLParser.MINUTE_OF_DAY: - case OpenSearchPPLParser.MINUTE_OF_HOUR: - case OpenSearchPPLParser.MINUTE_SECOND: - case OpenSearchPPLParser.MONTH: - case OpenSearchPPLParser.MONTH_OF_YEAR: - case OpenSearchPPLParser.QUARTER: - case OpenSearchPPLParser.SECOND: - case OpenSearchPPLParser.SECOND_MICROSECOND: - case OpenSearchPPLParser.SECOND_OF_MINUTE: - case OpenSearchPPLParser.WEEK: - case OpenSearchPPLParser.WEEK_OF_YEAR: - case OpenSearchPPLParser.YEAR: - case OpenSearchPPLParser.YEAR_MONTH: - case OpenSearchPPLParser.DOT: - case OpenSearchPPLParser.PLUS: - case OpenSearchPPLParser.MINUS: - case OpenSearchPPLParser.LT_PRTHS: - case OpenSearchPPLParser.BACKTICK: - case OpenSearchPPLParser.AVG: - case OpenSearchPPLParser.COUNT: - case OpenSearchPPLParser.DISTINCT_COUNT: - case OpenSearchPPLParser.ESTDC: - case OpenSearchPPLParser.ESTDC_ERROR: - case OpenSearchPPLParser.MAX: - case OpenSearchPPLParser.MEAN: - case OpenSearchPPLParser.MEDIAN: - case OpenSearchPPLParser.MIN: - case OpenSearchPPLParser.MODE: - case OpenSearchPPLParser.RANGE: - case OpenSearchPPLParser.STDEV: - case OpenSearchPPLParser.STDEVP: - case OpenSearchPPLParser.SUM: - case OpenSearchPPLParser.SUMSQ: - case OpenSearchPPLParser.VAR_SAMP: - case OpenSearchPPLParser.VAR_POP: - case OpenSearchPPLParser.STDDEV_SAMP: - case OpenSearchPPLParser.STDDEV_POP: - case OpenSearchPPLParser.PERCENTILE: - case OpenSearchPPLParser.TAKE: - case OpenSearchPPLParser.FIRST: - case OpenSearchPPLParser.LAST: - case OpenSearchPPLParser.LIST: - case OpenSearchPPLParser.VALUES: - case OpenSearchPPLParser.EARLIEST: - case OpenSearchPPLParser.EARLIEST_TIME: - case OpenSearchPPLParser.LATEST: - case OpenSearchPPLParser.LATEST_TIME: - case OpenSearchPPLParser.PER_DAY: - case OpenSearchPPLParser.PER_HOUR: - case OpenSearchPPLParser.PER_MINUTE: - case OpenSearchPPLParser.PER_SECOND: - case OpenSearchPPLParser.RATE: - case OpenSearchPPLParser.SPARKLINE: - case OpenSearchPPLParser.C: - case OpenSearchPPLParser.DC: - case OpenSearchPPLParser.ABS: - case OpenSearchPPLParser.CBRT: - case OpenSearchPPLParser.CEIL: - case OpenSearchPPLParser.CEILING: - case OpenSearchPPLParser.CONV: - case OpenSearchPPLParser.CRC32: - case OpenSearchPPLParser.E: - case OpenSearchPPLParser.EXP: - case OpenSearchPPLParser.FLOOR: - case OpenSearchPPLParser.LN: - case OpenSearchPPLParser.LOG: - case OpenSearchPPLParser.LOG10: - case OpenSearchPPLParser.LOG2: - case OpenSearchPPLParser.MOD: - case OpenSearchPPLParser.PI: - case OpenSearchPPLParser.POSITION: - case OpenSearchPPLParser.POW: - case OpenSearchPPLParser.POWER: - case OpenSearchPPLParser.RAND: - case OpenSearchPPLParser.ROUND: - case OpenSearchPPLParser.SIGN: - case OpenSearchPPLParser.SQRT: - case OpenSearchPPLParser.TRUNCATE: - case OpenSearchPPLParser.ACOS: - case OpenSearchPPLParser.ASIN: - case OpenSearchPPLParser.ATAN: - case OpenSearchPPLParser.ATAN2: - case OpenSearchPPLParser.COS: - case OpenSearchPPLParser.COT: - case OpenSearchPPLParser.DEGREES: - case OpenSearchPPLParser.RADIANS: - case OpenSearchPPLParser.SIN: - case OpenSearchPPLParser.TAN: - case OpenSearchPPLParser.ADDDATE: - case OpenSearchPPLParser.ADDTIME: - case OpenSearchPPLParser.CURDATE: - case OpenSearchPPLParser.CURRENT_DATE: - case OpenSearchPPLParser.CURRENT_TIME: - case OpenSearchPPLParser.CURRENT_TIMESTAMP: - case OpenSearchPPLParser.CURTIME: - case OpenSearchPPLParser.DATE: - case OpenSearchPPLParser.DATEDIFF: - case OpenSearchPPLParser.DATE_ADD: - case OpenSearchPPLParser.DATE_FORMAT: - case OpenSearchPPLParser.DATE_SUB: - case OpenSearchPPLParser.DAYNAME: - case OpenSearchPPLParser.DAYOFMONTH: - case OpenSearchPPLParser.DAYOFWEEK: - case OpenSearchPPLParser.DAYOFYEAR: - case OpenSearchPPLParser.DAY_OF_MONTH: - case OpenSearchPPLParser.DAY_OF_WEEK: - case OpenSearchPPLParser.EXTRACT: - case OpenSearchPPLParser.FROM_DAYS: - case OpenSearchPPLParser.FROM_UNIXTIME: - case OpenSearchPPLParser.GET_FORMAT: - case OpenSearchPPLParser.LAST_DAY: - case OpenSearchPPLParser.LOCALTIME: - case OpenSearchPPLParser.LOCALTIMESTAMP: - case OpenSearchPPLParser.MAKEDATE: - case OpenSearchPPLParser.MAKETIME: - case OpenSearchPPLParser.MONTHNAME: - case OpenSearchPPLParser.NOW: - case OpenSearchPPLParser.PERIOD_ADD: - case OpenSearchPPLParser.PERIOD_DIFF: - case OpenSearchPPLParser.SEC_TO_TIME: - case OpenSearchPPLParser.STR_TO_DATE: - case OpenSearchPPLParser.SUBDATE: - case OpenSearchPPLParser.SUBTIME: - case OpenSearchPPLParser.SYSDATE: - case OpenSearchPPLParser.TIME: - case OpenSearchPPLParser.TIMEDIFF: - case OpenSearchPPLParser.TIMESTAMP: - case OpenSearchPPLParser.TIMESTAMPADD: - case OpenSearchPPLParser.TIMESTAMPDIFF: - case OpenSearchPPLParser.TIME_FORMAT: - case OpenSearchPPLParser.TIME_TO_SEC: - case OpenSearchPPLParser.TO_DAYS: - case OpenSearchPPLParser.TO_SECONDS: - case OpenSearchPPLParser.UNIX_TIMESTAMP: - case OpenSearchPPLParser.UTC_DATE: - case OpenSearchPPLParser.UTC_TIME: - case OpenSearchPPLParser.UTC_TIMESTAMP: - case OpenSearchPPLParser.WEEKDAY: - case OpenSearchPPLParser.YEARWEEK: - case OpenSearchPPLParser.SUBSTR: - case OpenSearchPPLParser.SUBSTRING: - case OpenSearchPPLParser.LTRIM: - case OpenSearchPPLParser.RTRIM: - case OpenSearchPPLParser.TRIM: - case OpenSearchPPLParser.LOWER: - case OpenSearchPPLParser.UPPER: - case OpenSearchPPLParser.CONCAT: - case OpenSearchPPLParser.CONCAT_WS: - case OpenSearchPPLParser.LENGTH: - case OpenSearchPPLParser.STRCMP: - case OpenSearchPPLParser.RIGHT: - case OpenSearchPPLParser.LEFT: - case OpenSearchPPLParser.ASCII: - case OpenSearchPPLParser.LOCATE: - case OpenSearchPPLParser.REPLACE: - case OpenSearchPPLParser.REVERSE: - case OpenSearchPPLParser.CAST: - case OpenSearchPPLParser.LIKE: - case OpenSearchPPLParser.ISNULL: - case OpenSearchPPLParser.ISNOTNULL: - case OpenSearchPPLParser.IFNULL: - case OpenSearchPPLParser.NULLIF: - case OpenSearchPPLParser.IF: - case OpenSearchPPLParser.TYPEOF: - case OpenSearchPPLParser.MATCH: - case OpenSearchPPLParser.MATCH_PHRASE: - case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: - case OpenSearchPPLParser.MATCH_BOOL_PREFIX: - case OpenSearchPPLParser.SIMPLE_QUERY_STRING: - case OpenSearchPPLParser.MULTI_MATCH: - case OpenSearchPPLParser.QUERY_STRING: - case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: - case OpenSearchPPLParser.ANALYZE_WILDCARD: - case OpenSearchPPLParser.ANALYZER: - case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: - case OpenSearchPPLParser.BOOST: - case OpenSearchPPLParser.CUTOFF_FREQUENCY: - case OpenSearchPPLParser.DEFAULT_FIELD: - case OpenSearchPPLParser.DEFAULT_OPERATOR: - case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: - case OpenSearchPPLParser.ESCAPE: - case OpenSearchPPLParser.FLAGS: - case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: - case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: - case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: - case OpenSearchPPLParser.FUZZY_REWRITE: - case OpenSearchPPLParser.FUZZINESS: - case OpenSearchPPLParser.LENIENT: - case OpenSearchPPLParser.LOW_FREQ_OPERATOR: - case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: - case OpenSearchPPLParser.MAX_EXPANSIONS: - case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: - case OpenSearchPPLParser.OPERATOR: - case OpenSearchPPLParser.PHRASE_SLOP: - case OpenSearchPPLParser.PREFIX_LENGTH: - case OpenSearchPPLParser.QUOTE_ANALYZER: - case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: - case OpenSearchPPLParser.REWRITE: - case OpenSearchPPLParser.SLOP: - case OpenSearchPPLParser.TIE_BREAKER: - case OpenSearchPPLParser.TYPE: - case OpenSearchPPLParser.ZERO_TERMS_QUERY: - case OpenSearchPPLParser.SPAN: - case OpenSearchPPLParser.MS: - case OpenSearchPPLParser.S: - case OpenSearchPPLParser.M: - case OpenSearchPPLParser.H: - case OpenSearchPPLParser.W: - case OpenSearchPPLParser.Q: - case OpenSearchPPLParser.Y: - case OpenSearchPPLParser.ID: - case OpenSearchPPLParser.INTEGER_LITERAL: - case OpenSearchPPLParser.DECIMAL_LITERAL: - case OpenSearchPPLParser.DQUOTA_STRING: - case OpenSearchPPLParser.SQUOTA_STRING: - case OpenSearchPPLParser.BQUOTA_STRING: - this.enterOuterAlt(localContext, 2); + } + this.state = 659; + this.fieldList(); + this.state = 663; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 83) { { - this.state = 651; - this.primaryLogicalExpression(); + this.state = 660; + this.match(OpenSearchPPLParser.KEEPEMPTY); + this.state = 661; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 662; + localContext._keepempty = this.booleanLiteral(); } - break; - default: - throw new antlr.NoViableAltException(this); + } + + this.state = 668; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 84) { + { + this.state = 665; + this.match(OpenSearchPPLParser.CONSECUTIVE); + this.state = 666; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 667; + localContext._consecutive = this.booleanLiteral(); + } + } + } } catch (re) { @@ -3267,45 +2975,44 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public primaryLogicalExpression(): PrimaryLogicalExpressionContext { - let localContext = new PrimaryLogicalExpressionContext(this.context, this.state); - this.enterRule(localContext, 100, OpenSearchPPLParser.RULE_primaryLogicalExpression); + public sortCommand(): SortCommandContext { + let localContext = new SortCommandContext(this.context, this.state); + this.enterRule(localContext, 68, OpenSearchPPLParser.RULE_sortCommand); + let _la: number; try { - this.state = 661; + this.enterOuterAlt(localContext, 1); + { + this.state = 670; + this.match(OpenSearchPPLParser.SORT); + this.state = 672; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 49, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 33, this.context) ) { case 1: - this.enterOuterAlt(localContext, 1); { - this.state = 654; - this.comparisonExpression(); + this.state = 671; + localContext._count = this.integerLiteral(); } break; - case 2: - this.enterOuterAlt(localContext, 2); + } + this.state = 674; + this.sortbyClause(); + this.state = 676; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 15) !== 0)) { { - this.state = 655; - this.booleanExpression(); + this.state = 675; + _la = this.tokenStream.LA(1); + if(!(((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 15) !== 0))) { + this.errorHandler.recoverInline(this); } - break; - case 3: - this.enterOuterAlt(localContext, 3); - { - this.state = 656; - this.relevanceExpression(); + else { + this.errorHandler.reportMatch(this); + this.consume(); } - break; - case 4: - this.enterOuterAlt(localContext, 4); - { - this.state = 657; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 658; - this.logicalExpression(); - this.state = 659; - this.match(OpenSearchPPLParser.RT_PRTHS); } - break; + } + } } catch (re) { @@ -3321,37 +3028,14 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public comparisonExpression(): ComparisonExpressionContext { - let localContext = new ComparisonExpressionContext(this.context, this.state); - this.enterRule(localContext, 102, OpenSearchPPLParser.RULE_comparisonExpression); + public reverseCommand(): ReverseCommandContext { + let localContext = new ReverseCommandContext(this.context, this.state); + this.enterRule(localContext, 70, OpenSearchPPLParser.RULE_reverseCommand); try { - this.state = 671; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 50, this.context) ) { - case 1: - localContext = new CompareExprContext(localContext); - this.enterOuterAlt(localContext, 1); - { - this.state = 663; - (localContext as CompareExprContext)._left = this.valueExpression(0); - this.state = 664; - this.comparisonOperator(); - this.state = 665; - (localContext as CompareExprContext)._right = this.valueExpression(0); - } - break; - case 2: - localContext = new InExprContext(localContext); - this.enterOuterAlt(localContext, 2); - { - this.state = 667; - this.valueExpression(0); - this.state = 668; - this.match(OpenSearchPPLParser.IN); - this.state = 669; - this.valueList(); - } - break; + this.enterOuterAlt(localContext, 1); + { + this.state = 678; + this.match(OpenSearchPPLParser.REVERSE); } } catch (re) { @@ -3367,155 +3051,43 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - - public valueExpression(): ValueExpressionContext; - public valueExpression(_p: number): ValueExpressionContext; - public valueExpression(_p?: number): ValueExpressionContext { - if (_p === undefined) { - _p = 0; - } - - let parentContext = this.context; - let parentState = this.state; - let localContext = new ValueExpressionContext(this.context, parentState); - let previousContext = localContext; - let _startState = 104; - this.enterRecursionRule(localContext, 104, OpenSearchPPLParser.RULE_valueExpression, _p); + public timechartCommand(): TimechartCommandContext { + let localContext = new TimechartCommandContext(this.context, this.state); + this.enterRule(localContext, 72, OpenSearchPPLParser.RULE_timechartCommand); let _la: number; try { - let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 683; + this.state = 680; + this.match(OpenSearchPPLParser.TIMECHART); + this.state = 684; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 51, this.context) ) { - case 1: - { - localContext = new ValueExpressionDefaultContext(localContext); - this.context = localContext; - previousContext = localContext; - - this.state = 674; - this.primaryExpression(); - } - break; - case 2: - { - localContext = new PositionFunctionCallContext(localContext); - this.context = localContext; - previousContext = localContext; - this.state = 675; - this.positionFunction(); - } - break; - case 3: - { - localContext = new ExtractFunctionCallContext(localContext); - this.context = localContext; - previousContext = localContext; - this.state = 676; - this.extractFunction(); - } - break; - case 4: - { - localContext = new GetFormatFunctionCallContext(localContext); - this.context = localContext; - previousContext = localContext; - this.state = 677; - this.getFormatFunction(); - } - break; - case 5: + _la = this.tokenStream.LA(1); + while (_la === 107 || _la === 108 || _la === 427) { { - localContext = new TimestampFunctionCallContext(localContext); - this.context = localContext; - previousContext = localContext; - this.state = 678; - this.timestampFunction(); - } - break; - case 6: { - localContext = new ParentheticValueExprContext(localContext); - this.context = localContext; - previousContext = localContext; - this.state = 679; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 680; - this.valueExpression(0); this.state = 681; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.timechartParameter(); } - break; + } + this.state = 686; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); } - this.context!.stop = this.tokenStream.LT(-1); - this.state = 693; + this.state = 687; + this.statsFunction(); + this.state = 690; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 53, this.context); - while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { - if (alternative === 1) { - if (this.parseListeners != null) { - this.triggerExitRuleEvent(); - } - previousContext = localContext; - { - this.state = 691; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 52, this.context) ) { - case 1: - { - localContext = new BinaryArithmeticContext(new ValueExpressionContext(parentContext, parentState)); - (localContext as BinaryArithmeticContext)._left = previousContext; - this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_valueExpression); - this.state = 685; - if (!(this.precpred(this.context, 8))) { - throw this.createFailedPredicateException("this.precpred(this.context, 8)"); - } - this.state = 686; - (localContext as BinaryArithmeticContext)._binaryOperator = this.tokenStream.LT(1); - _la = this.tokenStream.LA(1); - if(!(((((_la - 120)) & ~0x1F) === 0 && ((1 << (_la - 120)) & 7) !== 0))) { - (localContext as BinaryArithmeticContext)._binaryOperator = this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - this.state = 687; - (localContext as BinaryArithmeticContext)._right = this.valueExpression(9); - } - break; - case 2: - { - localContext = new BinaryArithmeticContext(new ValueExpressionContext(parentContext, parentState)); - (localContext as BinaryArithmeticContext)._left = previousContext; - this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_valueExpression); - this.state = 688; - if (!(this.precpred(this.context, 7))) { - throw this.createFailedPredicateException("this.precpred(this.context, 7)"); - } - this.state = 689; - (localContext as BinaryArithmeticContext)._binaryOperator = this.tokenStream.LT(1); - _la = this.tokenStream.LA(1); - if(!(_la === 118 || _la === 119)) { - (localContext as BinaryArithmeticContext)._binaryOperator = this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - this.state = 690; - (localContext as BinaryArithmeticContext)._right = this.valueExpression(8); - } - break; - } - } + _la = this.tokenStream.LA(1); + if (_la === 62) { + { + this.state = 688; + this.match(OpenSearchPPLParser.BY); + this.state = 689; + this.fieldExpression(); } - this.state = 695; - this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 53, this.context); } + } } catch (re) { @@ -3527,45 +3099,52 @@ export class OpenSearchPPLParser extends antlr.Parser { } } finally { - this.unrollRecursionContexts(parentContext); + this.exitRule(); } return localContext; } - public primaryExpression(): PrimaryExpressionContext { - let localContext = new PrimaryExpressionContext(this.context, this.state); - this.enterRule(localContext, 106, OpenSearchPPLParser.RULE_primaryExpression); + public timechartParameter(): TimechartParameterContext { + let localContext = new TimechartParameterContext(this.context, this.state); + this.enterRule(localContext, 74, OpenSearchPPLParser.RULE_timechartParameter); try { - this.state = 700; + this.state = 699; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 54, this.context) ) { - case 1: + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.SPAN: this.enterOuterAlt(localContext, 1); { this.state = 696; - this.evalFunctionCall(); + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 37, this.context) ) { + case 1: + { + this.state = 692; + this.spanClause(); + } + break; + case 2: + { + this.state = 693; + this.match(OpenSearchPPLParser.SPAN); + this.state = 694; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 695; + this.spanLiteral(); + } + break; } - break; - case 2: - this.enterOuterAlt(localContext, 2); - { - this.state = 697; - this.dataTypeFunctionCall(); } break; - case 3: - this.enterOuterAlt(localContext, 3); + case OpenSearchPPLParser.LIMIT: + case OpenSearchPPLParser.USEOTHER: + this.enterOuterAlt(localContext, 2); { this.state = 698; - this.fieldExpression(); - } - break; - case 4: - this.enterOuterAlt(localContext, 4); - { - this.state = 699; - this.literalValue(); + this.timechartArg(); } break; + default: + throw new antlr.NoViableAltException(this); } } catch (re) { @@ -3581,47 +3160,443 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public positionFunction(): PositionFunctionContext { - let localContext = new PositionFunctionContext(this.context, this.state); - this.enterRule(localContext, 108, OpenSearchPPLParser.RULE_positionFunction); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 702; - this.positionFunctionName(); - this.state = 703; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 704; - this.functionArg(); - this.state = 705; - this.match(OpenSearchPPLParser.IN); - this.state = 706; - this.functionArg(); - this.state = 707; - this.match(OpenSearchPPLParser.RT_PRTHS); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public booleanExpression(): BooleanExpressionContext { - let localContext = new BooleanExpressionContext(this.context, this.state); - this.enterRule(localContext, 110, OpenSearchPPLParser.RULE_booleanExpression); + public timechartArg(): TimechartArgContext { + let localContext = new TimechartArgContext(this.context, this.state); + this.enterRule(localContext, 76, OpenSearchPPLParser.RULE_timechartArg); try { - this.enterOuterAlt(localContext, 1); - { - this.state = 709; - this.booleanFunctionCall(); + this.state = 710; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.LIMIT: + this.enterOuterAlt(localContext, 1); + { + this.state = 701; + this.match(OpenSearchPPLParser.LIMIT); + this.state = 702; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 703; + this.integerLiteral(); + } + break; + case OpenSearchPPLParser.USEOTHER: + this.enterOuterAlt(localContext, 2); + { + this.state = 704; + this.match(OpenSearchPPLParser.USEOTHER); + this.state = 705; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 708; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.TRUE: + case OpenSearchPPLParser.FALSE: + { + this.state = 706; + this.booleanLiteral(); + } + break; + case OpenSearchPPLParser.SEARCH: + case OpenSearchPPLParser.DESCRIBE: + case OpenSearchPPLParser.SHOW: + case OpenSearchPPLParser.EXPLAIN: + case OpenSearchPPLParser.FROM: + case OpenSearchPPLParser.WHERE: + case OpenSearchPPLParser.FIELDS: + case OpenSearchPPLParser.TABLE: + case OpenSearchPPLParser.RENAME: + case OpenSearchPPLParser.STATS: + case OpenSearchPPLParser.EVENTSTATS: + case OpenSearchPPLParser.DEDUP: + case OpenSearchPPLParser.SORT: + case OpenSearchPPLParser.EVAL: + case OpenSearchPPLParser.HEAD: + case OpenSearchPPLParser.BIN: + case OpenSearchPPLParser.TOP: + case OpenSearchPPLParser.RARE: + case OpenSearchPPLParser.PARSE: + case OpenSearchPPLParser.REGEX: + case OpenSearchPPLParser.REX: + case OpenSearchPPLParser.PUNCT: + case OpenSearchPPLParser.GROK: + case OpenSearchPPLParser.PATTERN: + case OpenSearchPPLParser.PATTERNS: + case OpenSearchPPLParser.NEW_FIELD: + case OpenSearchPPLParser.KMEANS: + case OpenSearchPPLParser.AD: + case OpenSearchPPLParser.ML: + case OpenSearchPPLParser.FILLNULL: + case OpenSearchPPLParser.FLATTEN: + case OpenSearchPPLParser.TRENDLINE: + case OpenSearchPPLParser.TIMECHART: + case OpenSearchPPLParser.EXPAND: + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + case OpenSearchPPLParser.METHOD: + case OpenSearchPPLParser.MAX_SAMPLE_COUNT: + case OpenSearchPPLParser.BUFFER_LIMIT: + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.LEFT_HINT: + case OpenSearchPPLParser.RIGHT_HINT: + case OpenSearchPPLParser.SOURCE: + case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.A: + case OpenSearchPPLParser.ASC: + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DESC: + case OpenSearchPPLParser.DATASOURCES: + case OpenSearchPPLParser.USING: + case OpenSearchPPLParser.WITH: + case OpenSearchPPLParser.SIMPLE: + case OpenSearchPPLParser.STANDARD: + case OpenSearchPPLParser.COST: + case OpenSearchPPLParser.EXTENDED: + case OpenSearchPPLParser.OVERRIDE: + case OpenSearchPPLParser.AUTO: + case OpenSearchPPLParser.STR: + case OpenSearchPPLParser.NUM: + case OpenSearchPPLParser.SMA: + case OpenSearchPPLParser.WMA: + case OpenSearchPPLParser.KEEPEMPTY: + case OpenSearchPPLParser.CONSECUTIVE: + case OpenSearchPPLParser.DEDUP_SPLITVALUES: + case OpenSearchPPLParser.PARTITIONS: + case OpenSearchPPLParser.ALLNUM: + case OpenSearchPPLParser.DELIM: + case OpenSearchPPLParser.BUCKET_NULLABLE: + case OpenSearchPPLParser.CENTROIDS: + case OpenSearchPPLParser.ITERATIONS: + case OpenSearchPPLParser.DISTANCE_TYPE: + case OpenSearchPPLParser.NUMBER_OF_TREES: + case OpenSearchPPLParser.SHINGLE_SIZE: + case OpenSearchPPLParser.SAMPLE_SIZE: + case OpenSearchPPLParser.OUTPUT_AFTER: + case OpenSearchPPLParser.TIME_DECAY: + case OpenSearchPPLParser.ANOMALY_RATE: + case OpenSearchPPLParser.CATEGORY_FIELD: + case OpenSearchPPLParser.TIME_FIELD: + case OpenSearchPPLParser.TIME_ZONE: + case OpenSearchPPLParser.TRAINING_DATA_SIZE: + case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + case OpenSearchPPLParser.APPEND: + case OpenSearchPPLParser.COUNTFIELD: + case OpenSearchPPLParser.SHOWCOUNT: + case OpenSearchPPLParser.INPUT: + case OpenSearchPPLParser.OUTPUT: + case OpenSearchPPLParser.PATH: + case OpenSearchPPLParser.CASE: + case OpenSearchPPLParser.ELSE: + case OpenSearchPPLParser.IN: + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.GEOIP: + case OpenSearchPPLParser.REGEXP: + case OpenSearchPPLParser.REGEX_MATCH: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.DAY_HOUR: + case OpenSearchPPLParser.DAY_MICROSECOND: + case OpenSearchPPLParser.DAY_MINUTE: + case OpenSearchPPLParser.DAY_OF_YEAR: + case OpenSearchPPLParser.DAY_SECOND: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.HOUR_MICROSECOND: + case OpenSearchPPLParser.HOUR_MINUTE: + case OpenSearchPPLParser.HOUR_OF_DAY: + case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MINUTE_MICROSECOND: + case OpenSearchPPLParser.MINUTE_OF_DAY: + case OpenSearchPPLParser.MINUTE_OF_HOUR: + case OpenSearchPPLParser.MINUTE_SECOND: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.MONTH_OF_YEAR: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.SECOND_MICROSECOND: + case OpenSearchPPLParser.SECOND_OF_MINUTE: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.WEEK_OF_YEAR: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.LOOKUP: + case OpenSearchPPLParser.IP: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.ARROW: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT_APPROX: + case OpenSearchPPLParser.ESTDC: + case OpenSearchPPLParser.ESTDC_ERROR: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MEAN: + case OpenSearchPPLParser.MEDIAN: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.MODE: + case OpenSearchPPLParser.RANGE: + case OpenSearchPPLParser.STDEV: + case OpenSearchPPLParser.STDEVP: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.SUMSQ: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.PERCENTILE: + case OpenSearchPPLParser.PERCENTILE_APPROX: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: + case OpenSearchPPLParser.TAKE: + case OpenSearchPPLParser.LIST: + case OpenSearchPPLParser.VALUES: + case OpenSearchPPLParser.PER_DAY: + case OpenSearchPPLParser.PER_HOUR: + case OpenSearchPPLParser.PER_MINUTE: + case OpenSearchPPLParser.PER_SECOND: + case OpenSearchPPLParser.RATE: + case OpenSearchPPLParser.SPARKLINE: + case OpenSearchPPLParser.C: + case OpenSearchPPLParser.DC: + case OpenSearchPPLParser.ROW_NUMBER: + case OpenSearchPPLParser.RANK: + case OpenSearchPPLParser.DENSE_RANK: + case OpenSearchPPLParser.PERCENT_RANK: + case OpenSearchPPLParser.CUME_DIST: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.NTH: + case OpenSearchPPLParser.NTILE: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CBRT: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG_WITH_BASE: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POSITION: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.ADDTIME: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATEDIFF: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.DAY_OF_MONTH: + case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.EXTRACT: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.GET_FORMAT: + case OpenSearchPPLParser.LAST_DAY: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SEC_TO_TIME: + case OpenSearchPPLParser.STR_TO_DATE: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SUBTIME: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMEDIFF: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TIME_FORMAT: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.TO_SECONDS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.WEEKDAY: + case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.REVERSE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.BETWEEN: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + case OpenSearchPPLParser.JSON_VALID: + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.COALESCE: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: + case OpenSearchPPLParser.ANALYZE_WILDCARD: + case OpenSearchPPLParser.ANALYZER: + case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case OpenSearchPPLParser.BOOST: + case OpenSearchPPLParser.CUTOFF_FREQUENCY: + case OpenSearchPPLParser.DEFAULT_FIELD: + case OpenSearchPPLParser.DEFAULT_OPERATOR: + case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: + case OpenSearchPPLParser.ESCAPE: + case OpenSearchPPLParser.FLAGS: + case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: + case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: + case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: + case OpenSearchPPLParser.FUZZY_REWRITE: + case OpenSearchPPLParser.FUZZINESS: + case OpenSearchPPLParser.LENIENT: + case OpenSearchPPLParser.LOW_FREQ_OPERATOR: + case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: + case OpenSearchPPLParser.MAX_EXPANSIONS: + case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: + case OpenSearchPPLParser.OPERATOR: + case OpenSearchPPLParser.PHRASE_SLOP: + case OpenSearchPPLParser.PREFIX_LENGTH: + case OpenSearchPPLParser.QUOTE_ANALYZER: + case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: + case OpenSearchPPLParser.REWRITE: + case OpenSearchPPLParser.SLOP: + case OpenSearchPPLParser.TIE_BREAKER: + case OpenSearchPPLParser.TYPE: + case OpenSearchPPLParser.ZERO_TERMS_QUERY: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.SEC: + case OpenSearchPPLParser.SECS: + case OpenSearchPPLParser.SECONDS: + case OpenSearchPPLParser.MINS: + case OpenSearchPPLParser.MINUTES: + case OpenSearchPPLParser.HR: + case OpenSearchPPLParser.HRS: + case OpenSearchPPLParser.HOURS: + case OpenSearchPPLParser.DAYS: + case OpenSearchPPLParser.MON: + case OpenSearchPPLParser.MONTHS: + case OpenSearchPPLParser.US: + case OpenSearchPPLParser.CS: + case OpenSearchPPLParser.DS: + case OpenSearchPPLParser.PERCENTILE_SHORTCUT: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.BQUOTA_STRING: + { + this.state = 707; + this.ident(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + break; + default: + throw new antlr.NoViableAltException(this); } } catch (re) { @@ -3637,30 +3612,30 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public relevanceExpression(): RelevanceExpressionContext { - let localContext = new RelevanceExpressionContext(this.context, this.state); - this.enterRule(localContext, 112, OpenSearchPPLParser.RULE_relevanceExpression); + public spanLiteral(): SpanLiteralContext { + let localContext = new SpanLiteralContext(this.context, this.state); + this.enterRule(localContext, 78, OpenSearchPPLParser.RULE_spanLiteral); try { - this.state = 713; + this.state = 716; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { - case OpenSearchPPLParser.MATCH: - case OpenSearchPPLParser.MATCH_PHRASE: - case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: - case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.INTEGER_LITERAL: this.enterOuterAlt(localContext, 1); { - this.state = 711; - this.singleFieldRelevanceFunction(); + this.state = 712; + this.integerLiteral(); + this.state = 713; + this.timespanUnit(); } break; - case OpenSearchPPLParser.SIMPLE_QUERY_STRING: - case OpenSearchPPLParser.MULTI_MATCH: - case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.DQUOTA_STRING: + case OpenSearchPPLParser.SQUOTA_STRING: this.enterOuterAlt(localContext, 2); { - this.state = 712; - this.multiFieldRelevanceFunction(); + this.state = 715; + this.stringLiteral(); } break; default: @@ -3680,41 +3655,33 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public singleFieldRelevanceFunction(): SingleFieldRelevanceFunctionContext { - let localContext = new SingleFieldRelevanceFunctionContext(this.context, this.state); - this.enterRule(localContext, 114, OpenSearchPPLParser.RULE_singleFieldRelevanceFunction); + public evalCommand(): EvalCommandContext { + let localContext = new EvalCommandContext(this.context, this.state); + this.enterRule(localContext, 80, OpenSearchPPLParser.RULE_evalCommand); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 715; - this.singleFieldRelevanceFunctionName(); - this.state = 716; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 717; - localContext._field = this.relevanceField(); this.state = 718; - this.match(OpenSearchPPLParser.COMMA); + this.match(OpenSearchPPLParser.EVAL); this.state = 719; - localContext._query = this.relevanceQuery(); + this.evalClause(); this.state = 724; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 110) { + while (_la === 168) { { { this.state = 720; this.match(OpenSearchPPLParser.COMMA); this.state = 721; - this.relevanceArg(); + this.evalClause(); } } this.state = 726; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 727; - this.match(OpenSearchPPLParser.RT_PRTHS); } } catch (re) { @@ -3730,61 +3697,190 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public multiFieldRelevanceFunction(): MultiFieldRelevanceFunctionContext { - let localContext = new MultiFieldRelevanceFunctionContext(this.context, this.state); - this.enterRule(localContext, 116, OpenSearchPPLParser.RULE_multiFieldRelevanceFunction); + public headCommand(): HeadCommandContext { + let localContext = new HeadCommandContext(this.context, this.state); + this.enterRule(localContext, 82, OpenSearchPPLParser.RULE_headCommand); let _la: number; try { this.enterOuterAlt(localContext, 1); { + this.state = 727; + this.match(OpenSearchPPLParser.HEAD); this.state = 729; - this.multiFieldRelevanceFunctionName(); - this.state = 730; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 731; - this.match(OpenSearchPPLParser.LT_SQR_PRTHS); - this.state = 732; - localContext._field = this.relevanceFieldAndWeight(); - this.state = 737; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 110) { + if (_la === 177 || _la === 178 || _la === 457) { { + this.state = 728; + localContext._number_ = this.integerLiteral(); + } + } + + this.state = 733; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 6) { { - this.state = 733; - this.match(OpenSearchPPLParser.COMMA); - this.state = 734; - localContext._field = this.relevanceFieldAndWeight(); + this.state = 731; + this.match(OpenSearchPPLParser.FROM); + this.state = 732; + localContext._from_ = this.integerLiteral(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public binCommand(): BinCommandContext { + let localContext = new BinCommandContext(this.context, this.state); + this.enterRule(localContext, 84, OpenSearchPPLParser.RULE_binCommand); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 735; + this.match(OpenSearchPPLParser.BIN); + this.state = 736; + this.fieldExpression(); + this.state = 740; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (((((_la - 427)) & ~0x1F) === 0 && ((1 << (_la - 427)) & 63) !== 0)) { + { + { + this.state = 737; + this.binOption(); } } - this.state = 739; + this.state = 742; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 740; - this.match(OpenSearchPPLParser.RT_SQR_PRTHS); - this.state = 741; - this.match(OpenSearchPPLParser.COMMA); - this.state = 742; - localContext._query = this.relevanceQuery(); - this.state = 747; + this.state = 745; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 110) { - { + if (_la === 61) { { this.state = 743; - this.match(OpenSearchPPLParser.COMMA); + this.match(OpenSearchPPLParser.AS); this.state = 744; - this.relevanceArg(); - } + localContext._alias = this.qualifiedName(); } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public binOption(): BinOptionContext { + let localContext = new BinOptionContext(this.context, this.state); + this.enterRule(localContext, 86, OpenSearchPPLParser.RULE_binOption); + let _la: number; + try { + this.state = 768; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.SPAN: + this.enterOuterAlt(localContext, 1); + { + this.state = 747; + this.match(OpenSearchPPLParser.SPAN); + this.state = 748; + this.match(OpenSearchPPLParser.EQUAL); this.state = 749; + localContext._span = this.spanValue(); + } + break; + case OpenSearchPPLParser.BINS: + this.enterOuterAlt(localContext, 2); + { + this.state = 750; + this.match(OpenSearchPPLParser.BINS); + this.state = 751; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 752; + localContext._bins = this.integerLiteral(); + } + break; + case OpenSearchPPLParser.MINSPAN: + this.enterOuterAlt(localContext, 3); + { + this.state = 753; + this.match(OpenSearchPPLParser.MINSPAN); + this.state = 754; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 755; + localContext._minspan = this.literalValue(); + this.state = 757; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - } - this.state = 750; - this.match(OpenSearchPPLParser.RT_PRTHS); + if (_la === 67 || ((((_la - 127)) & ~0x1F) === 0 && ((1 << (_la - 127)) & 174612545) !== 0) || ((((_la - 433)) & ~0x1F) === 0 && ((1 << (_la - 433)) & 2097151) !== 0)) { + { + this.state = 756; + localContext._minspanUnit = this.timespanUnit(); + } + } + + } + break; + case OpenSearchPPLParser.ALIGNTIME: + this.enterOuterAlt(localContext, 4); + { + this.state = 759; + this.match(OpenSearchPPLParser.ALIGNTIME); + this.state = 760; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 761; + localContext._aligntime = this.aligntimeValue(); + } + break; + case OpenSearchPPLParser.START: + this.enterOuterAlt(localContext, 5); + { + this.state = 762; + this.match(OpenSearchPPLParser.START); + this.state = 763; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 764; + localContext._start = this.numericLiteral(); + } + break; + case OpenSearchPPLParser.END: + this.enterOuterAlt(localContext, 6); + { + this.state = 765; + this.match(OpenSearchPPLParser.END); + this.state = 766; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 767; + localContext._end = this.numericLiteral(); + } + break; + default: + throw new antlr.NoViableAltException(this); } } catch (re) { @@ -3800,293 +3896,45 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public tableSource(): TableSourceContext { - let localContext = new TableSourceContext(this.context, this.state); - this.enterRule(localContext, 118, OpenSearchPPLParser.RULE_tableSource); + public aligntimeValue(): AligntimeValueContext { + let localContext = new AligntimeValueContext(this.context, this.state); + this.enterRule(localContext, 88, OpenSearchPPLParser.RULE_aligntimeValue); try { - this.state = 754; + this.state = 773; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { - case OpenSearchPPLParser.SEARCH: - case OpenSearchPPLParser.DESCRIBE: - case OpenSearchPPLParser.SHOW: - case OpenSearchPPLParser.FROM: - case OpenSearchPPLParser.WHERE: - case OpenSearchPPLParser.FIELDS: - case OpenSearchPPLParser.RENAME: - case OpenSearchPPLParser.STATS: - case OpenSearchPPLParser.DEDUP: - case OpenSearchPPLParser.SORT: - case OpenSearchPPLParser.EVAL: - case OpenSearchPPLParser.HEAD: - case OpenSearchPPLParser.TOP: - case OpenSearchPPLParser.RARE: - case OpenSearchPPLParser.PARSE: - case OpenSearchPPLParser.METHOD: - case OpenSearchPPLParser.REGEX: - case OpenSearchPPLParser.PUNCT: - case OpenSearchPPLParser.GROK: - case OpenSearchPPLParser.PATTERN: - case OpenSearchPPLParser.PATTERNS: - case OpenSearchPPLParser.NEW_FIELD: - case OpenSearchPPLParser.KMEANS: - case OpenSearchPPLParser.AD: - case OpenSearchPPLParser.ML: - case OpenSearchPPLParser.SOURCE: - case OpenSearchPPLParser.INDEX: - case OpenSearchPPLParser.D: - case OpenSearchPPLParser.DESC: - case OpenSearchPPLParser.DATASOURCES: - case OpenSearchPPLParser.SORTBY: - case OpenSearchPPLParser.STR: - case OpenSearchPPLParser.IP: - case OpenSearchPPLParser.NUM: - case OpenSearchPPLParser.KEEPEMPTY: - case OpenSearchPPLParser.CONSECUTIVE: - case OpenSearchPPLParser.DEDUP_SPLITVALUES: - case OpenSearchPPLParser.PARTITIONS: - case OpenSearchPPLParser.ALLNUM: - case OpenSearchPPLParser.DELIM: - case OpenSearchPPLParser.CENTROIDS: - case OpenSearchPPLParser.ITERATIONS: - case OpenSearchPPLParser.DISTANCE_TYPE: - case OpenSearchPPLParser.NUMBER_OF_TREES: - case OpenSearchPPLParser.SHINGLE_SIZE: - case OpenSearchPPLParser.SAMPLE_SIZE: - case OpenSearchPPLParser.OUTPUT_AFTER: - case OpenSearchPPLParser.TIME_DECAY: - case OpenSearchPPLParser.ANOMALY_RATE: - case OpenSearchPPLParser.CATEGORY_FIELD: - case OpenSearchPPLParser.TIME_FIELD: - case OpenSearchPPLParser.TIME_ZONE: - case OpenSearchPPLParser.TRAINING_DATA_SIZE: - case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: - case OpenSearchPPLParser.CONVERT_TZ: - case OpenSearchPPLParser.DATETIME: - case OpenSearchPPLParser.DAY: - case OpenSearchPPLParser.DAY_HOUR: - case OpenSearchPPLParser.DAY_MICROSECOND: - case OpenSearchPPLParser.DAY_MINUTE: - case OpenSearchPPLParser.DAY_OF_YEAR: - case OpenSearchPPLParser.DAY_SECOND: - case OpenSearchPPLParser.HOUR: - case OpenSearchPPLParser.HOUR_MICROSECOND: - case OpenSearchPPLParser.HOUR_MINUTE: - case OpenSearchPPLParser.HOUR_OF_DAY: - case OpenSearchPPLParser.HOUR_SECOND: - case OpenSearchPPLParser.MICROSECOND: - case OpenSearchPPLParser.MILLISECOND: - case OpenSearchPPLParser.MINUTE: - case OpenSearchPPLParser.MINUTE_MICROSECOND: - case OpenSearchPPLParser.MINUTE_OF_DAY: - case OpenSearchPPLParser.MINUTE_OF_HOUR: - case OpenSearchPPLParser.MINUTE_SECOND: - case OpenSearchPPLParser.MONTH: - case OpenSearchPPLParser.MONTH_OF_YEAR: - case OpenSearchPPLParser.QUARTER: - case OpenSearchPPLParser.SECOND: - case OpenSearchPPLParser.SECOND_MICROSECOND: - case OpenSearchPPLParser.SECOND_OF_MINUTE: - case OpenSearchPPLParser.WEEK: - case OpenSearchPPLParser.WEEK_OF_YEAR: - case OpenSearchPPLParser.YEAR: - case OpenSearchPPLParser.YEAR_MONTH: - case OpenSearchPPLParser.DOT: - case OpenSearchPPLParser.BACKTICK: - case OpenSearchPPLParser.AVG: - case OpenSearchPPLParser.COUNT: - case OpenSearchPPLParser.DISTINCT_COUNT: - case OpenSearchPPLParser.ESTDC: - case OpenSearchPPLParser.ESTDC_ERROR: - case OpenSearchPPLParser.MAX: - case OpenSearchPPLParser.MEAN: - case OpenSearchPPLParser.MEDIAN: - case OpenSearchPPLParser.MIN: - case OpenSearchPPLParser.MODE: - case OpenSearchPPLParser.RANGE: - case OpenSearchPPLParser.STDEV: - case OpenSearchPPLParser.STDEVP: - case OpenSearchPPLParser.SUM: - case OpenSearchPPLParser.SUMSQ: - case OpenSearchPPLParser.VAR_SAMP: - case OpenSearchPPLParser.VAR_POP: - case OpenSearchPPLParser.STDDEV_SAMP: - case OpenSearchPPLParser.STDDEV_POP: - case OpenSearchPPLParser.PERCENTILE: - case OpenSearchPPLParser.TAKE: - case OpenSearchPPLParser.FIRST: - case OpenSearchPPLParser.LAST: - case OpenSearchPPLParser.LIST: - case OpenSearchPPLParser.VALUES: case OpenSearchPPLParser.EARLIEST: - case OpenSearchPPLParser.EARLIEST_TIME: - case OpenSearchPPLParser.LATEST: - case OpenSearchPPLParser.LATEST_TIME: - case OpenSearchPPLParser.PER_DAY: - case OpenSearchPPLParser.PER_HOUR: - case OpenSearchPPLParser.PER_MINUTE: - case OpenSearchPPLParser.PER_SECOND: - case OpenSearchPPLParser.RATE: - case OpenSearchPPLParser.SPARKLINE: - case OpenSearchPPLParser.C: - case OpenSearchPPLParser.DC: - case OpenSearchPPLParser.ABS: - case OpenSearchPPLParser.CBRT: - case OpenSearchPPLParser.CEIL: - case OpenSearchPPLParser.CEILING: - case OpenSearchPPLParser.CONV: - case OpenSearchPPLParser.CRC32: - case OpenSearchPPLParser.E: - case OpenSearchPPLParser.EXP: - case OpenSearchPPLParser.FLOOR: - case OpenSearchPPLParser.LN: - case OpenSearchPPLParser.LOG: - case OpenSearchPPLParser.LOG10: - case OpenSearchPPLParser.LOG2: - case OpenSearchPPLParser.MOD: - case OpenSearchPPLParser.PI: - case OpenSearchPPLParser.POSITION: - case OpenSearchPPLParser.POW: - case OpenSearchPPLParser.POWER: - case OpenSearchPPLParser.RAND: - case OpenSearchPPLParser.ROUND: - case OpenSearchPPLParser.SIGN: - case OpenSearchPPLParser.SQRT: - case OpenSearchPPLParser.TRUNCATE: - case OpenSearchPPLParser.ACOS: - case OpenSearchPPLParser.ASIN: - case OpenSearchPPLParser.ATAN: - case OpenSearchPPLParser.ATAN2: - case OpenSearchPPLParser.COS: - case OpenSearchPPLParser.COT: - case OpenSearchPPLParser.DEGREES: - case OpenSearchPPLParser.RADIANS: - case OpenSearchPPLParser.SIN: - case OpenSearchPPLParser.TAN: - case OpenSearchPPLParser.ADDDATE: - case OpenSearchPPLParser.ADDTIME: - case OpenSearchPPLParser.CURDATE: - case OpenSearchPPLParser.CURRENT_DATE: - case OpenSearchPPLParser.CURRENT_TIME: - case OpenSearchPPLParser.CURRENT_TIMESTAMP: - case OpenSearchPPLParser.CURTIME: - case OpenSearchPPLParser.DATE: - case OpenSearchPPLParser.DATEDIFF: - case OpenSearchPPLParser.DATE_ADD: - case OpenSearchPPLParser.DATE_FORMAT: - case OpenSearchPPLParser.DATE_SUB: - case OpenSearchPPLParser.DAYNAME: - case OpenSearchPPLParser.DAYOFMONTH: - case OpenSearchPPLParser.DAYOFWEEK: - case OpenSearchPPLParser.DAYOFYEAR: - case OpenSearchPPLParser.DAY_OF_MONTH: - case OpenSearchPPLParser.DAY_OF_WEEK: - case OpenSearchPPLParser.FROM_DAYS: - case OpenSearchPPLParser.FROM_UNIXTIME: - case OpenSearchPPLParser.LAST_DAY: - case OpenSearchPPLParser.LOCALTIME: - case OpenSearchPPLParser.LOCALTIMESTAMP: - case OpenSearchPPLParser.MAKEDATE: - case OpenSearchPPLParser.MAKETIME: - case OpenSearchPPLParser.MONTHNAME: - case OpenSearchPPLParser.NOW: - case OpenSearchPPLParser.PERIOD_ADD: - case OpenSearchPPLParser.PERIOD_DIFF: - case OpenSearchPPLParser.SEC_TO_TIME: - case OpenSearchPPLParser.STR_TO_DATE: - case OpenSearchPPLParser.SUBDATE: - case OpenSearchPPLParser.SUBTIME: - case OpenSearchPPLParser.SYSDATE: - case OpenSearchPPLParser.TIME: - case OpenSearchPPLParser.TIMEDIFF: - case OpenSearchPPLParser.TIMESTAMP: - case OpenSearchPPLParser.TIME_FORMAT: - case OpenSearchPPLParser.TIME_TO_SEC: - case OpenSearchPPLParser.TO_DAYS: - case OpenSearchPPLParser.TO_SECONDS: - case OpenSearchPPLParser.UNIX_TIMESTAMP: - case OpenSearchPPLParser.UTC_DATE: - case OpenSearchPPLParser.UTC_TIME: - case OpenSearchPPLParser.UTC_TIMESTAMP: - case OpenSearchPPLParser.WEEKDAY: - case OpenSearchPPLParser.YEARWEEK: - case OpenSearchPPLParser.SUBSTR: - case OpenSearchPPLParser.SUBSTRING: - case OpenSearchPPLParser.LTRIM: - case OpenSearchPPLParser.RTRIM: - case OpenSearchPPLParser.TRIM: - case OpenSearchPPLParser.LOWER: - case OpenSearchPPLParser.UPPER: - case OpenSearchPPLParser.CONCAT: - case OpenSearchPPLParser.CONCAT_WS: - case OpenSearchPPLParser.LENGTH: - case OpenSearchPPLParser.STRCMP: - case OpenSearchPPLParser.RIGHT: - case OpenSearchPPLParser.LEFT: - case OpenSearchPPLParser.ASCII: - case OpenSearchPPLParser.LOCATE: - case OpenSearchPPLParser.REPLACE: - case OpenSearchPPLParser.REVERSE: - case OpenSearchPPLParser.LIKE: - case OpenSearchPPLParser.ISNULL: - case OpenSearchPPLParser.ISNOTNULL: - case OpenSearchPPLParser.IFNULL: - case OpenSearchPPLParser.NULLIF: - case OpenSearchPPLParser.IF: - case OpenSearchPPLParser.TYPEOF: - case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: - case OpenSearchPPLParser.ANALYZE_WILDCARD: - case OpenSearchPPLParser.ANALYZER: - case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: - case OpenSearchPPLParser.BOOST: - case OpenSearchPPLParser.CUTOFF_FREQUENCY: - case OpenSearchPPLParser.DEFAULT_FIELD: - case OpenSearchPPLParser.DEFAULT_OPERATOR: - case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: - case OpenSearchPPLParser.ESCAPE: - case OpenSearchPPLParser.FLAGS: - case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: - case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: - case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: - case OpenSearchPPLParser.FUZZY_REWRITE: - case OpenSearchPPLParser.FUZZINESS: - case OpenSearchPPLParser.LENIENT: - case OpenSearchPPLParser.LOW_FREQ_OPERATOR: - case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: - case OpenSearchPPLParser.MAX_EXPANSIONS: - case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: - case OpenSearchPPLParser.OPERATOR: - case OpenSearchPPLParser.PHRASE_SLOP: - case OpenSearchPPLParser.PREFIX_LENGTH: - case OpenSearchPPLParser.QUOTE_ANALYZER: - case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: - case OpenSearchPPLParser.REWRITE: - case OpenSearchPPLParser.SLOP: - case OpenSearchPPLParser.TIE_BREAKER: - case OpenSearchPPLParser.TYPE: - case OpenSearchPPLParser.ZERO_TERMS_QUERY: - case OpenSearchPPLParser.SPAN: - case OpenSearchPPLParser.MS: - case OpenSearchPPLParser.S: - case OpenSearchPPLParser.M: - case OpenSearchPPLParser.H: - case OpenSearchPPLParser.W: - case OpenSearchPPLParser.Q: - case OpenSearchPPLParser.Y: - case OpenSearchPPLParser.ID: - case OpenSearchPPLParser.CLUSTER: - case OpenSearchPPLParser.BQUOTA_STRING: this.enterOuterAlt(localContext, 1); { - this.state = 752; - this.tableQualifiedName(); + this.state = 770; + this.match(OpenSearchPPLParser.EARLIEST); } break; - case OpenSearchPPLParser.ID_DATE_SUFFIX: + case OpenSearchPPLParser.LATEST: this.enterOuterAlt(localContext, 2); { - this.state = 753; - this.match(OpenSearchPPLParser.ID_DATE_SUFFIX); + this.state = 771; + this.match(OpenSearchPPLParser.LATEST); + } + break; + case OpenSearchPPLParser.TRUE: + case OpenSearchPPLParser.FALSE: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.INTEGER_LITERAL: + case OpenSearchPPLParser.DECIMAL_LITERAL: + case OpenSearchPPLParser.FLOAT_LITERAL: + case OpenSearchPPLParser.DOUBLE_LITERAL: + case OpenSearchPPLParser.DQUOTA_STRING: + case OpenSearchPPLParser.SQUOTA_STRING: + this.enterOuterAlt(localContext, 3); + { + this.state = 772; + this.literalValue(); } break; default: @@ -4106,60 +3954,58 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public tableFunction(): TableFunctionContext { - let localContext = new TableFunctionContext(this.context, this.state); - this.enterRule(localContext, 120, OpenSearchPPLParser.RULE_tableFunction); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 756; - this.qualifiedName(); - this.state = 757; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 758; - this.functionArgs(); - this.state = 759; - this.match(OpenSearchPPLParser.RT_PRTHS); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public fieldList(): FieldListContext { - let localContext = new FieldListContext(this.context, this.state); - this.enterRule(localContext, 122, OpenSearchPPLParser.RULE_fieldList); + public spanValue(): SpanValueContext { + let localContext = new SpanValueContext(this.context, this.state); + this.enterRule(localContext, 90, OpenSearchPPLParser.RULE_spanValue); let _la: number; try { - this.enterOuterAlt(localContext, 1); - { - this.state = 761; - this.fieldExpression(); - this.state = 766; + this.state = 784; this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 110) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 51, this.context) ) { + case 1: + localContext = new NumericSpanValueContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 775; + this.literalValue(); + this.state = 777; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 67 || ((((_la - 127)) & ~0x1F) === 0 && ((1 << (_la - 127)) & 174612545) !== 0) || ((((_la - 433)) & ~0x1F) === 0 && ((1 << (_la - 433)) & 2097151) !== 0)) { + { + this.state = 776; + this.timespanUnit(); + } + } + + } + break; + case 2: + localContext = new LogBasedSpanValueContext(localContext); + this.enterOuterAlt(localContext, 2); { + this.state = 779; + this.logSpanValue(); + } + break; + case 3: + localContext = new ExtendedTimeSpanValueContext(localContext); + this.enterOuterAlt(localContext, 3); { - this.state = 762; - this.match(OpenSearchPPLParser.COMMA); - this.state = 763; - this.fieldExpression(); + this.state = 780; + this.ident(); + this.state = 781; + this.timespanUnit(); } + break; + case 4: + localContext = new IdentifierSpanValueContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 783; + this.ident(); } - this.state = 768; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } + break; } } catch (re) { @@ -4175,31 +4021,15 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public wcFieldList(): WcFieldListContext { - let localContext = new WcFieldListContext(this.context, this.state); - this.enterRule(localContext, 124, OpenSearchPPLParser.RULE_wcFieldList); - let _la: number; + public logSpanValue(): LogSpanValueContext { + let localContext = new LogSpanValueContext(this.context, this.state); + this.enterRule(localContext, 92, OpenSearchPPLParser.RULE_logSpanValue); try { + localContext = new LogWithBaseSpanContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 769; - this.wcFieldExpression(); - this.state = 774; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 110) { - { - { - this.state = 770; - this.match(OpenSearchPPLParser.COMMA); - this.state = 771; - this.wcFieldExpression(); - } - } - this.state = 776; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } + this.state = 786; + this.match(OpenSearchPPLParser.LOG_WITH_BASE); } } catch (re) { @@ -4215,32 +4045,65 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public sortField(): SortFieldContext { - let localContext = new SortFieldContext(this.context, this.state); - this.enterRule(localContext, 126, OpenSearchPPLParser.RULE_sortField); + public topCommand(): TopCommandContext { + let localContext = new TopCommandContext(this.context, this.state); + this.enterRule(localContext, 94, OpenSearchPPLParser.RULE_topCommand); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 778; + this.state = 788; + this.match(OpenSearchPPLParser.TOP); + this.state = 790; this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 118 || _la === 119) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 52, this.context) ) { + case 1: { - this.state = 777; - _la = this.tokenStream.LA(1); - if(!(_la === 118 || _la === 119)) { - this.errorHandler.recoverInline(this); + this.state = 789; + localContext._number_ = this.integerLiteral(); } - else { - this.errorHandler.reportMatch(this); - this.consume(); + break; + } + this.state = 795; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 53, this.context) ) { + case 1: + { + this.state = 792; + this.match(OpenSearchPPLParser.COUNTFIELD); + this.state = 793; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 794; + localContext._countfield = this.stringLiteral(); + } + break; + } + this.state = 800; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 54, this.context) ) { + case 1: + { + this.state = 797; + this.match(OpenSearchPPLParser.SHOWCOUNT); + this.state = 798; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 799; + localContext._showcount = this.booleanLiteral(); } + break; + } + this.state = 802; + this.fieldList(); + this.state = 804; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 62) { + { + this.state = 803; + this.byClause(); } } - this.state = 780; - this.sortFieldExpression(); } } catch (re) { @@ -4256,72 +4119,65 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public sortFieldExpression(): SortFieldExpressionContext { - let localContext = new SortFieldExpressionContext(this.context, this.state); - this.enterRule(localContext, 128, OpenSearchPPLParser.RULE_sortFieldExpression); + public rareCommand(): RareCommandContext { + let localContext = new RareCommandContext(this.context, this.state); + this.enterRule(localContext, 96, OpenSearchPPLParser.RULE_rareCommand); + let _la: number; try { - this.state = 803; + this.enterOuterAlt(localContext, 1); + { + this.state = 806; + this.match(OpenSearchPPLParser.RARE); + this.state = 808; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 63, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 56, this.context) ) { case 1: - this.enterOuterAlt(localContext, 1); { - this.state = 782; - this.fieldExpression(); - } - break; - case 2: - this.enterOuterAlt(localContext, 2); - { - this.state = 783; - this.match(OpenSearchPPLParser.AUTO); - this.state = 784; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 785; - this.fieldExpression(); - this.state = 786; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 807; + localContext._number_ = this.integerLiteral(); } break; - case 3: - this.enterOuterAlt(localContext, 3); + } + this.state = 813; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 57, this.context) ) { + case 1: { - this.state = 788; - this.match(OpenSearchPPLParser.STR); - this.state = 789; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 790; - this.fieldExpression(); - this.state = 791; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 810; + this.match(OpenSearchPPLParser.COUNTFIELD); + this.state = 811; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 812; + localContext._countfield = this.stringLiteral(); } break; - case 4: - this.enterOuterAlt(localContext, 4); + } + this.state = 818; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 58, this.context) ) { + case 1: { - this.state = 793; - this.match(OpenSearchPPLParser.IP); - this.state = 794; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 795; - this.fieldExpression(); - this.state = 796; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 815; + this.match(OpenSearchPPLParser.SHOWCOUNT); + this.state = 816; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 817; + localContext._showcount = this.booleanLiteral(); } break; - case 5: - this.enterOuterAlt(localContext, 5); + } + this.state = 820; + this.fieldList(); + this.state = 822; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 62) { { - this.state = 798; - this.match(OpenSearchPPLParser.NUM); - this.state = 799; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 800; - this.fieldExpression(); - this.state = 801; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 821; + this.byClause(); } - break; + } + } } catch (re) { @@ -4337,14 +4193,22 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public fieldExpression(): FieldExpressionContext { - let localContext = new FieldExpressionContext(this.context, this.state); - this.enterRule(localContext, 130, OpenSearchPPLParser.RULE_fieldExpression); + public grokCommand(): GrokCommandContext { + let localContext = new GrokCommandContext(this.context, this.state); + this.enterRule(localContext, 98, OpenSearchPPLParser.RULE_grokCommand); try { this.enterOuterAlt(localContext, 1); { - this.state = 805; - this.qualifiedName(); + this.state = 824; + this.match(OpenSearchPPLParser.GROK); + { + this.state = 825; + localContext._source_field = this.expression(0); + } + { + this.state = 826; + localContext._pattern = this.stringLiteral(); + } } } catch (re) { @@ -4360,14 +4224,22 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public wcFieldExpression(): WcFieldExpressionContext { - let localContext = new WcFieldExpressionContext(this.context, this.state); - this.enterRule(localContext, 132, OpenSearchPPLParser.RULE_wcFieldExpression); + public parseCommand(): ParseCommandContext { + let localContext = new ParseCommandContext(this.context, this.state); + this.enterRule(localContext, 100, OpenSearchPPLParser.RULE_parseCommand); try { this.enterOuterAlt(localContext, 1); { - this.state = 807; - this.wcQualifiedName(); + this.state = 828; + this.match(OpenSearchPPLParser.PARSE); + { + this.state = 829; + localContext._source_field = this.expression(0); + } + { + this.state = 830; + localContext._pattern = this.stringLiteral(); + } } } catch (re) { @@ -4383,20 +4255,29 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public evalFunctionCall(): EvalFunctionCallContext { - let localContext = new EvalFunctionCallContext(this.context, this.state); - this.enterRule(localContext, 134, OpenSearchPPLParser.RULE_evalFunctionCall); + public spathCommand(): SpathCommandContext { + let localContext = new SpathCommandContext(this.context, this.state); + this.enterRule(localContext, 102, OpenSearchPPLParser.RULE_spathCommand); + let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 809; - this.evalFunctionName(); - this.state = 810; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 811; - this.functionArgs(); - this.state = 812; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 832; + this.match(OpenSearchPPLParser.SPATH); + this.state = 836; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4257218044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 2682862783) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294959103) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4162840575) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 805306367) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 2348816393) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4294443007) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 4294967295) !== 0) || ((((_la - 262)) & ~0x1F) === 0 && ((1 << (_la - 262)) & 4294967295) !== 0) || ((((_la - 294)) & ~0x1F) === 0 && ((1 << (_la - 294)) & 4294967295) !== 0) || ((((_la - 328)) & ~0x1F) === 0 && ((1 << (_la - 328)) & 4294901759) !== 0) || ((((_la - 360)) & ~0x1F) === 0 && ((1 << (_la - 360)) & 4294967295) !== 0) || ((((_la - 392)) & ~0x1F) === 0 && ((1 << (_la - 392)) & 4294967295) !== 0) || ((((_la - 424)) & ~0x1F) === 0 && ((1 << (_la - 424)) & 4294966799) !== 0) || _la === 464) { + { + { + this.state = 833; + this.spathParameter(); + } + } + this.state = 838; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } } } catch (re) { @@ -4412,24 +4293,60 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public dataTypeFunctionCall(): DataTypeFunctionCallContext { - let localContext = new DataTypeFunctionCallContext(this.context, this.state); - this.enterRule(localContext, 136, OpenSearchPPLParser.RULE_dataTypeFunctionCall); + public spathParameter(): SpathParameterContext { + let localContext = new SpathParameterContext(this.context, this.state); + this.enterRule(localContext, 104, OpenSearchPPLParser.RULE_spathParameter); try { - this.enterOuterAlt(localContext, 1); - { - this.state = 814; - this.match(OpenSearchPPLParser.CAST); - this.state = 815; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 816; - this.expression(); - this.state = 817; - this.match(OpenSearchPPLParser.AS); - this.state = 818; - this.convertedDataType(); - this.state = 819; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 850; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 62, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + { + this.state = 839; + this.match(OpenSearchPPLParser.INPUT); + this.state = 840; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 841; + localContext._input = this.expression(0); + } + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + { + this.state = 842; + this.match(OpenSearchPPLParser.OUTPUT); + this.state = 843; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 844; + localContext._output = this.expression(0); + } + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + { + this.state = 847; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 61, this.context) ) { + case 1: + { + this.state = 845; + this.match(OpenSearchPPLParser.PATH); + this.state = 846; + this.match(OpenSearchPPLParser.EQUAL); + } + break; + } + this.state = 849; + localContext._path = this.indexablePath(); + } + } + break; } } catch (re) { @@ -4445,20 +4362,33 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public booleanFunctionCall(): BooleanFunctionCallContext { - let localContext = new BooleanFunctionCallContext(this.context, this.state); - this.enterRule(localContext, 138, OpenSearchPPLParser.RULE_booleanFunctionCall); + public indexablePath(): IndexablePathContext { + let localContext = new IndexablePathContext(this.context, this.state); + this.enterRule(localContext, 106, OpenSearchPPLParser.RULE_indexablePath); try { + let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 821; - this.conditionFunctionBase(); - this.state = 822; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 823; - this.functionArgs(); - this.state = 824; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 852; + this.pathElement(); + this.state = 857; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 63, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 853; + this.match(OpenSearchPPLParser.DOT); + this.state = 854; + this.pathElement(); + } + } + } + this.state = 859; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 63, this.context); + } } } catch (re) { @@ -4474,85 +4404,205 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public convertedDataType(): ConvertedDataTypeContext { - let localContext = new ConvertedDataTypeContext(this.context, this.state); - this.enterRule(localContext, 140, OpenSearchPPLParser.RULE_convertedDataType); + public pathElement(): PathElementContext { + let localContext = new PathElementContext(this.context, this.state); + this.enterRule(localContext, 108, OpenSearchPPLParser.RULE_pathElement); + let _la: number; try { - this.state = 836; + this.enterOuterAlt(localContext, 1); + { + this.state = 860; + this.ident(); + this.state = 862; this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { - case OpenSearchPPLParser.DATE: - this.enterOuterAlt(localContext, 1); - { - this.state = 826; - localContext._typeName = this.match(OpenSearchPPLParser.DATE); - } - break; - case OpenSearchPPLParser.TIME: - this.enterOuterAlt(localContext, 2); - { - this.state = 827; - localContext._typeName = this.match(OpenSearchPPLParser.TIME); - } - break; - case OpenSearchPPLParser.TIMESTAMP: - this.enterOuterAlt(localContext, 3); + _la = this.tokenStream.LA(1); + if (_la === 188) { { - this.state = 828; - localContext._typeName = this.match(OpenSearchPPLParser.TIMESTAMP); + this.state = 861; + this.pathArrayAccess(); } - break; - case OpenSearchPPLParser.INT: - this.enterOuterAlt(localContext, 4); + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public pathArrayAccess(): PathArrayAccessContext { + let localContext = new PathArrayAccessContext(this.context, this.state); + this.enterRule(localContext, 110, OpenSearchPPLParser.RULE_pathArrayAccess); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 864; + this.match(OpenSearchPPLParser.LT_CURLY); + this.state = 866; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 457) { { - this.state = 829; - localContext._typeName = this.match(OpenSearchPPLParser.INT); + this.state = 865; + this.match(OpenSearchPPLParser.INTEGER_LITERAL); } - break; - case OpenSearchPPLParser.INTEGER: - this.enterOuterAlt(localContext, 5); + } + + this.state = 868; + this.match(OpenSearchPPLParser.RT_CURLY); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public regexCommand(): RegexCommandContext { + let localContext = new RegexCommandContext(this.context, this.state); + this.enterRule(localContext, 112, OpenSearchPPLParser.RULE_regexCommand); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 870; + this.match(OpenSearchPPLParser.REGEX); + this.state = 871; + this.regexExpr(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public regexExpr(): RegexExprContext { + let localContext = new RegexExprContext(this.context, this.state); + this.enterRule(localContext, 114, OpenSearchPPLParser.RULE_regexExpr); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 873; + localContext._field = this.qualifiedName(); + this.state = 874; + localContext._operator = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 170 || _la === 176)) { + localContext._operator = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 875; + localContext._pattern = this.stringLiteral(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public rexCommand(): RexCommandContext { + let localContext = new RexCommandContext(this.context, this.state); + this.enterRule(localContext, 116, OpenSearchPPLParser.RULE_rexCommand); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 877; + this.match(OpenSearchPPLParser.REX); + this.state = 878; + this.rexExpr(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public rexExpr(): RexExprContext { + let localContext = new RexExprContext(this.context, this.state); + this.enterRule(localContext, 118, OpenSearchPPLParser.RULE_rexExpr); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 880; + this.match(OpenSearchPPLParser.FIELD); + this.state = 881; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 882; + localContext._field = this.qualifiedName(); + this.state = 886; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 46 || _la === 47 || _la === 207) { { - this.state = 830; - localContext._typeName = this.match(OpenSearchPPLParser.INTEGER); - } - break; - case OpenSearchPPLParser.DOUBLE: - this.enterOuterAlt(localContext, 6); { - this.state = 831; - localContext._typeName = this.match(OpenSearchPPLParser.DOUBLE); + this.state = 883; + this.rexOption(); } - break; - case OpenSearchPPLParser.LONG: - this.enterOuterAlt(localContext, 7); - { - this.state = 832; - localContext._typeName = this.match(OpenSearchPPLParser.LONG); } - break; - case OpenSearchPPLParser.FLOAT: - this.enterOuterAlt(localContext, 8); + this.state = 888; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 889; + localContext._pattern = this.stringLiteral(); + this.state = 893; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 46 || _la === 47 || _la === 207) { { - this.state = 833; - localContext._typeName = this.match(OpenSearchPPLParser.FLOAT); - } - break; - case OpenSearchPPLParser.STRING: - this.enterOuterAlt(localContext, 9); { - this.state = 834; - localContext._typeName = this.match(OpenSearchPPLParser.STRING); + this.state = 890; + this.rexOption(); } - break; - case OpenSearchPPLParser.BOOLEAN: - this.enterOuterAlt(localContext, 10); - { - this.state = 835; - localContext._typeName = this.match(OpenSearchPPLParser.BOOLEAN); } - break; - default: - throw new antlr.NoViableAltException(this); + this.state = 895; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } } } catch (re) { @@ -4568,169 +4618,52 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public evalFunctionName(): EvalFunctionNameContext { - let localContext = new EvalFunctionNameContext(this.context, this.state); - this.enterRule(localContext, 142, OpenSearchPPLParser.RULE_evalFunctionName); + public rexOption(): RexOptionContext { + let localContext = new RexOptionContext(this.context, this.state); + this.enterRule(localContext, 120, OpenSearchPPLParser.RULE_rexOption); + let _la: number; try { - this.state = 844; + this.state = 905; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { - case OpenSearchPPLParser.ABS: - case OpenSearchPPLParser.CBRT: - case OpenSearchPPLParser.CEIL: - case OpenSearchPPLParser.CEILING: - case OpenSearchPPLParser.CONV: - case OpenSearchPPLParser.CRC32: - case OpenSearchPPLParser.E: - case OpenSearchPPLParser.EXP: - case OpenSearchPPLParser.FLOOR: - case OpenSearchPPLParser.LN: - case OpenSearchPPLParser.LOG: - case OpenSearchPPLParser.LOG10: - case OpenSearchPPLParser.LOG2: - case OpenSearchPPLParser.MOD: - case OpenSearchPPLParser.PI: - case OpenSearchPPLParser.POW: - case OpenSearchPPLParser.POWER: - case OpenSearchPPLParser.RAND: - case OpenSearchPPLParser.ROUND: - case OpenSearchPPLParser.SIGN: - case OpenSearchPPLParser.SQRT: - case OpenSearchPPLParser.TRUNCATE: - case OpenSearchPPLParser.ACOS: - case OpenSearchPPLParser.ASIN: - case OpenSearchPPLParser.ATAN: - case OpenSearchPPLParser.ATAN2: - case OpenSearchPPLParser.COS: - case OpenSearchPPLParser.COT: - case OpenSearchPPLParser.DEGREES: - case OpenSearchPPLParser.RADIANS: - case OpenSearchPPLParser.SIN: - case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MAX_MATCH: this.enterOuterAlt(localContext, 1); { - this.state = 838; - this.mathematicalFunctionName(); + this.state = 896; + this.match(OpenSearchPPLParser.MAX_MATCH); + this.state = 897; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 898; + localContext._maxMatch = this.integerLiteral(); } break; - case OpenSearchPPLParser.CONVERT_TZ: - case OpenSearchPPLParser.DATETIME: - case OpenSearchPPLParser.DAY: - case OpenSearchPPLParser.DAY_OF_YEAR: - case OpenSearchPPLParser.HOUR: - case OpenSearchPPLParser.HOUR_OF_DAY: - case OpenSearchPPLParser.MICROSECOND: - case OpenSearchPPLParser.MINUTE: - case OpenSearchPPLParser.MINUTE_OF_DAY: - case OpenSearchPPLParser.MINUTE_OF_HOUR: - case OpenSearchPPLParser.MONTH: - case OpenSearchPPLParser.MONTH_OF_YEAR: - case OpenSearchPPLParser.QUARTER: - case OpenSearchPPLParser.SECOND: - case OpenSearchPPLParser.SECOND_OF_MINUTE: - case OpenSearchPPLParser.WEEK: - case OpenSearchPPLParser.WEEK_OF_YEAR: - case OpenSearchPPLParser.YEAR: - case OpenSearchPPLParser.ADDDATE: - case OpenSearchPPLParser.ADDTIME: - case OpenSearchPPLParser.CURDATE: - case OpenSearchPPLParser.CURRENT_DATE: - case OpenSearchPPLParser.CURRENT_TIME: - case OpenSearchPPLParser.CURRENT_TIMESTAMP: - case OpenSearchPPLParser.CURTIME: - case OpenSearchPPLParser.DATE: - case OpenSearchPPLParser.DATEDIFF: - case OpenSearchPPLParser.DATE_ADD: - case OpenSearchPPLParser.DATE_FORMAT: - case OpenSearchPPLParser.DATE_SUB: - case OpenSearchPPLParser.DAYNAME: - case OpenSearchPPLParser.DAYOFMONTH: - case OpenSearchPPLParser.DAYOFWEEK: - case OpenSearchPPLParser.DAYOFYEAR: - case OpenSearchPPLParser.DAY_OF_MONTH: - case OpenSearchPPLParser.DAY_OF_WEEK: - case OpenSearchPPLParser.FROM_DAYS: - case OpenSearchPPLParser.FROM_UNIXTIME: - case OpenSearchPPLParser.LAST_DAY: - case OpenSearchPPLParser.LOCALTIME: - case OpenSearchPPLParser.LOCALTIMESTAMP: - case OpenSearchPPLParser.MAKEDATE: - case OpenSearchPPLParser.MAKETIME: - case OpenSearchPPLParser.MONTHNAME: - case OpenSearchPPLParser.NOW: - case OpenSearchPPLParser.PERIOD_ADD: - case OpenSearchPPLParser.PERIOD_DIFF: - case OpenSearchPPLParser.SEC_TO_TIME: - case OpenSearchPPLParser.STR_TO_DATE: - case OpenSearchPPLParser.SUBDATE: - case OpenSearchPPLParser.SUBTIME: - case OpenSearchPPLParser.SYSDATE: - case OpenSearchPPLParser.TIME: - case OpenSearchPPLParser.TIMEDIFF: - case OpenSearchPPLParser.TIMESTAMP: - case OpenSearchPPLParser.TIME_FORMAT: - case OpenSearchPPLParser.TIME_TO_SEC: - case OpenSearchPPLParser.TO_DAYS: - case OpenSearchPPLParser.TO_SECONDS: - case OpenSearchPPLParser.UNIX_TIMESTAMP: - case OpenSearchPPLParser.UTC_DATE: - case OpenSearchPPLParser.UTC_TIME: - case OpenSearchPPLParser.UTC_TIMESTAMP: - case OpenSearchPPLParser.WEEKDAY: - case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.MODE: this.enterOuterAlt(localContext, 2); { - this.state = 839; - this.dateTimeFunctionName(); - } - break; - case OpenSearchPPLParser.SUBSTR: - case OpenSearchPPLParser.SUBSTRING: - case OpenSearchPPLParser.LTRIM: - case OpenSearchPPLParser.RTRIM: - case OpenSearchPPLParser.TRIM: - case OpenSearchPPLParser.LOWER: - case OpenSearchPPLParser.UPPER: - case OpenSearchPPLParser.CONCAT: - case OpenSearchPPLParser.CONCAT_WS: - case OpenSearchPPLParser.LENGTH: - case OpenSearchPPLParser.STRCMP: - case OpenSearchPPLParser.RIGHT: - case OpenSearchPPLParser.LEFT: - case OpenSearchPPLParser.ASCII: - case OpenSearchPPLParser.LOCATE: - case OpenSearchPPLParser.REPLACE: - case OpenSearchPPLParser.REVERSE: - this.enterOuterAlt(localContext, 3); - { - this.state = 840; - this.textFunctionName(); + this.state = 899; + this.match(OpenSearchPPLParser.MODE); + this.state = 900; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 901; + _la = this.tokenStream.LA(1); + if(!(_la === 25 || _la === 305)) { + this.errorHandler.recoverInline(this); } - break; - case OpenSearchPPLParser.LIKE: - case OpenSearchPPLParser.ISNULL: - case OpenSearchPPLParser.ISNOTNULL: - case OpenSearchPPLParser.IFNULL: - case OpenSearchPPLParser.NULLIF: - case OpenSearchPPLParser.IF: - this.enterOuterAlt(localContext, 4); - { - this.state = 841; - this.conditionFunctionBase(); + else { + this.errorHandler.reportMatch(this); + this.consume(); } - break; - case OpenSearchPPLParser.TYPEOF: - this.enterOuterAlt(localContext, 5); - { - this.state = 842; - this.systemFunctionName(); } break; - case OpenSearchPPLParser.POSITION: - this.enterOuterAlt(localContext, 6); + case OpenSearchPPLParser.OFFSET_FIELD: + this.enterOuterAlt(localContext, 3); { - this.state = 843; - this.positionFunctionName(); + this.state = 902; + this.match(OpenSearchPPLParser.OFFSET_FIELD); + this.state = 903; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 904; + localContext._offsetField = this.qualifiedName(); } break; default: @@ -4750,39 +4683,22 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public functionArgs(): FunctionArgsContext { - let localContext = new FunctionArgsContext(this.context, this.state); - this.enterRule(localContext, 144, OpenSearchPPLParser.RULE_functionArgs); + public patternsMethod(): PatternsMethodContext { + let localContext = new PatternsMethodContext(this.context, this.state); + this.enterRule(localContext, 122, OpenSearchPPLParser.RULE_patternsMethod); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 854; - this.errorHandler.sync(this); + this.state = 907; _la = this.tokenStream.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 3892314108) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 134217719) !== 0) || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 4294967291) !== 0) || ((((_la - 97)) & ~0x1F) === 0 && ((1 << (_la - 97)) & 274743299) !== 0) || ((((_la - 131)) & ~0x1F) === 0 && ((1 << (_la - 131)) & 4294967281) !== 0) || ((((_la - 163)) & ~0x1F) === 0 && ((1 << (_la - 163)) & 4294967295) !== 0) || ((((_la - 195)) & ~0x1F) === 0 && ((1 << (_la - 195)) & 4294967295) !== 0) || ((((_la - 227)) & ~0x1F) === 0 && ((1 << (_la - 227)) & 4294967295) !== 0) || ((((_la - 259)) & ~0x1F) === 0 && ((1 << (_la - 259)) & 3229614075) !== 0) || ((((_la - 291)) & ~0x1F) === 0 && ((1 << (_la - 291)) & 4294967295) !== 0) || ((((_la - 323)) & ~0x1F) === 0 && ((1 << (_la - 323)) & 7615) !== 0)) { - { - this.state = 846; - this.functionArg(); - this.state = 851; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 110) { - { - { - this.state = 847; - this.match(OpenSearchPPLParser.COMMA); - this.state = 848; - this.functionArg(); - } - } - this.state = 853; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } - } + if(!(_la === 23 || _la === 26)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); } - } } catch (re) { @@ -4798,26 +4714,113 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public functionArg(): FunctionArgContext { - let localContext = new FunctionArgContext(this.context, this.state); - this.enterRule(localContext, 146, OpenSearchPPLParser.RULE_functionArg); + public patternsCommand(): PatternsCommandContext { + let localContext = new PatternsCommandContext(this.context, this.state); + this.enterRule(localContext, 124, OpenSearchPPLParser.RULE_patternsCommand); + let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 859; + this.state = 909; + this.match(OpenSearchPPLParser.PATTERNS); + { + this.state = 910; + localContext._source_field = this.expression(0); + } + this.state = 912; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 68, this.context) ) { - case 1: + _la = this.tokenStream.LA(1); + if (_la === 62) { { - this.state = 856; - this.ident(); - this.state = 857; + this.state = 911; + this.statsByClause(); + } + } + + this.state = 917; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 44) { + { + this.state = 914; + this.match(OpenSearchPPLParser.METHOD); + this.state = 915; this.match(OpenSearchPPLParser.EQUAL); + this.state = 916; + localContext._method = this.patternMethod(); } - break; } - this.state = 861; - this.valueExpression(0); + + this.state = 922; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 207) { + { + this.state = 919; + this.match(OpenSearchPPLParser.MODE); + this.state = 920; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 921; + localContext._pattern_mode = this.patternMode(); + } + } + + this.state = 927; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 45) { + { + this.state = 924; + this.match(OpenSearchPPLParser.MAX_SAMPLE_COUNT); + this.state = 925; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 926; + localContext._max_sample_count = this.integerLiteral(); + } + } + + this.state = 932; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 48) { + { + this.state = 929; + this.match(OpenSearchPPLParser.BUFFER_LIMIT); + this.state = 930; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 931; + localContext._buffer_limit = this.integerLiteral(); + } + } + + this.state = 937; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 30) { + { + this.state = 934; + this.match(OpenSearchPPLParser.NEW_FIELD); + this.state = 935; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 936; + localContext._new_field = this.stringLiteral(); + } + } + + this.state = 942; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (((((_la - 28)) & ~0x1F) === 0 && ((1 << (_la - 28)) & 49153) !== 0)) { + { + { + this.state = 939; + this.patternsParameter(); + } + } + this.state = 944; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } } } catch (re) { @@ -4833,22 +4836,58 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public relevanceArg(): RelevanceArgContext { - let localContext = new RelevanceArgContext(this.context, this.state); - this.enterRule(localContext, 148, OpenSearchPPLParser.RULE_relevanceArg); + public patternsParameter(): PatternsParameterContext { + let localContext = new PatternsParameterContext(this.context, this.state); + this.enterRule(localContext, 126, OpenSearchPPLParser.RULE_patternsParameter); try { - this.enterOuterAlt(localContext, 1); - { - this.state = 863; - this.relevanceArgName(); - this.state = 864; - this.match(OpenSearchPPLParser.EQUAL); - this.state = 865; - this.relevanceArgValue(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { + this.state = 954; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.PATTERN: + this.enterOuterAlt(localContext, 1); + { + { + this.state = 945; + this.match(OpenSearchPPLParser.PATTERN); + this.state = 946; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 947; + localContext._pattern = this.stringLiteral(); + } + } + break; + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + this.enterOuterAlt(localContext, 2); + { + { + this.state = 948; + this.match(OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD); + this.state = 949; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 950; + localContext._variable_count_threshold = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + this.enterOuterAlt(localContext, 3); + { + { + this.state = 951; + this.match(OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE); + this.state = 952; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 953; + localContext._frequency_threshold_percentage = this.decimalLiteral(); + } + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { this.errorHandler.reportError(this, re); this.errorHandler.recover(this, re); } else { @@ -4860,16 +4899,16 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public relevanceArgName(): RelevanceArgNameContext { - let localContext = new RelevanceArgNameContext(this.context, this.state); - this.enterRule(localContext, 150, OpenSearchPPLParser.RULE_relevanceArgName); + public patternMethod(): PatternMethodContext { + let localContext = new PatternMethodContext(this.context, this.state); + this.enterRule(localContext, 128, OpenSearchPPLParser.RULE_patternMethod); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 867; + this.state = 956; _la = this.tokenStream.LA(1); - if(!(_la === 7 || _la === 56 || ((((_la - 289)) & ~0x1F) === 0 && ((1 << (_la - 289)) & 2147483647) !== 0))) { + if(!(_la === 40 || _la === 41)) { this.errorHandler.recoverInline(this); } else { @@ -4891,40 +4930,149 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public relevanceFieldAndWeight(): RelevanceFieldAndWeightContext { - let localContext = new RelevanceFieldAndWeightContext(this.context, this.state); - this.enterRule(localContext, 152, OpenSearchPPLParser.RULE_relevanceFieldAndWeight); + public patternMode(): PatternModeContext { + let localContext = new PatternModeContext(this.context, this.state); + this.enterRule(localContext, 130, OpenSearchPPLParser.RULE_patternMode); + let _la: number; try { - this.state = 877; + this.enterOuterAlt(localContext, 1); + { + this.state = 958; + _la = this.tokenStream.LA(1); + if(!(_la === 49 || _la === 50)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public lookupCommand(): LookupCommandContext { + let localContext = new LookupCommandContext(this.context, this.state); + this.enterRule(localContext, 132, OpenSearchPPLParser.RULE_lookupCommand); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 960; + this.match(OpenSearchPPLParser.LOOKUP); + this.state = 961; + this.tableSource(); + this.state = 962; + this.lookupMappingList(); + this.state = 965; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 69, this.context) ) { - case 1: - this.enterOuterAlt(localContext, 1); + _la = this.tokenStream.LA(1); + if (_la === 104 || _la === 355) { { - this.state = 869; - localContext._field = this.relevanceField(); + this.state = 963; + _la = this.tokenStream.LA(1); + if(!(_la === 104 || _la === 355)) { + this.errorHandler.recoverInline(this); } - break; - case 2: - this.enterOuterAlt(localContext, 2); + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 964; + this.outputCandidateList(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public lookupMappingList(): LookupMappingListContext { + let localContext = new LookupMappingListContext(this.context, this.state); + this.enterRule(localContext, 134, OpenSearchPPLParser.RULE_lookupMappingList); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 967; + this.lookupPair(); + this.state = 972; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { { - this.state = 870; - localContext._field = this.relevanceField(); - this.state = 871; - localContext._weight = this.relevanceFieldWeight(); + { + this.state = 968; + this.match(OpenSearchPPLParser.COMMA); + this.state = 969; + this.lookupPair(); } - break; - case 3: - this.enterOuterAlt(localContext, 3); + } + this.state = 974; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public outputCandidateList(): OutputCandidateListContext { + let localContext = new OutputCandidateListContext(this.context, this.state); + this.enterRule(localContext, 136, OpenSearchPPLParser.RULE_outputCandidateList); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 975; + this.lookupPair(); + this.state = 980; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { { - this.state = 873; - localContext._field = this.relevanceField(); - this.state = 874; - this.match(OpenSearchPPLParser.BIT_XOR_OP); - this.state = 875; - localContext._weight = this.relevanceFieldWeight(); + { + this.state = 976; + this.match(OpenSearchPPLParser.COMMA); + this.state = 977; + this.lookupPair(); } - break; + } + this.state = 982; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } } } catch (re) { @@ -4940,25 +5088,65 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public relevanceFieldWeight(): RelevanceFieldWeightContext { - let localContext = new RelevanceFieldWeightContext(this.context, this.state); - this.enterRule(localContext, 154, OpenSearchPPLParser.RULE_relevanceFieldWeight); + public lookupPair(): LookupPairContext { + let localContext = new LookupPairContext(this.context, this.state); + this.enterRule(localContext, 138, OpenSearchPPLParser.RULE_lookupPair); + let _la: number; try { - this.state = 881; + this.enterOuterAlt(localContext, 1); + { + this.state = 983; + localContext._inputField = this.fieldExpression(); + this.state = 986; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 70, this.context) ) { + _la = this.tokenStream.LA(1); + if (_la === 61) { + { + this.state = 984; + this.match(OpenSearchPPLParser.AS); + this.state = 985; + localContext._outputField = this.fieldExpression(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public fillnullCommand(): FillnullCommandContext { + let localContext = new FillnullCommandContext(this.context, this.state); + this.enterRule(localContext, 140, OpenSearchPPLParser.RULE_fillnullCommand); + try { + this.state = 992; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 81, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 879; - this.integerLiteral(); + this.state = 988; + this.match(OpenSearchPPLParser.FILLNULL); + this.state = 989; + this.fillNullWith(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 880; - this.decimalLiteral(); + this.state = 990; + this.match(OpenSearchPPLParser.FILLNULL); + this.state = 991; + this.fillNullUsing(); } break; } @@ -4976,297 +5164,71 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public relevanceField(): RelevanceFieldContext { - let localContext = new RelevanceFieldContext(this.context, this.state); - this.enterRule(localContext, 156, OpenSearchPPLParser.RULE_relevanceField); + public fillNullWith(): FillNullWithContext { + let localContext = new FillNullWithContext(this.context, this.state); + this.enterRule(localContext, 142, OpenSearchPPLParser.RULE_fillNullWith); + let _la: number; try { - this.state = 885; + this.enterOuterAlt(localContext, 1); + { + this.state = 994; + this.match(OpenSearchPPLParser.WITH); + this.state = 995; + localContext._replacement = this.valueExpression(0); + this.state = 998; this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { - case OpenSearchPPLParser.SEARCH: - case OpenSearchPPLParser.DESCRIBE: - case OpenSearchPPLParser.SHOW: - case OpenSearchPPLParser.FROM: - case OpenSearchPPLParser.WHERE: - case OpenSearchPPLParser.FIELDS: - case OpenSearchPPLParser.RENAME: - case OpenSearchPPLParser.STATS: - case OpenSearchPPLParser.DEDUP: - case OpenSearchPPLParser.SORT: - case OpenSearchPPLParser.EVAL: - case OpenSearchPPLParser.HEAD: - case OpenSearchPPLParser.TOP: - case OpenSearchPPLParser.RARE: - case OpenSearchPPLParser.PARSE: - case OpenSearchPPLParser.METHOD: - case OpenSearchPPLParser.REGEX: - case OpenSearchPPLParser.PUNCT: - case OpenSearchPPLParser.GROK: - case OpenSearchPPLParser.PATTERN: - case OpenSearchPPLParser.PATTERNS: - case OpenSearchPPLParser.NEW_FIELD: - case OpenSearchPPLParser.KMEANS: - case OpenSearchPPLParser.AD: - case OpenSearchPPLParser.ML: - case OpenSearchPPLParser.SOURCE: - case OpenSearchPPLParser.INDEX: - case OpenSearchPPLParser.D: - case OpenSearchPPLParser.DESC: - case OpenSearchPPLParser.DATASOURCES: - case OpenSearchPPLParser.SORTBY: - case OpenSearchPPLParser.STR: - case OpenSearchPPLParser.IP: - case OpenSearchPPLParser.NUM: - case OpenSearchPPLParser.KEEPEMPTY: - case OpenSearchPPLParser.CONSECUTIVE: - case OpenSearchPPLParser.DEDUP_SPLITVALUES: - case OpenSearchPPLParser.PARTITIONS: - case OpenSearchPPLParser.ALLNUM: - case OpenSearchPPLParser.DELIM: - case OpenSearchPPLParser.CENTROIDS: - case OpenSearchPPLParser.ITERATIONS: - case OpenSearchPPLParser.DISTANCE_TYPE: - case OpenSearchPPLParser.NUMBER_OF_TREES: - case OpenSearchPPLParser.SHINGLE_SIZE: - case OpenSearchPPLParser.SAMPLE_SIZE: - case OpenSearchPPLParser.OUTPUT_AFTER: - case OpenSearchPPLParser.TIME_DECAY: - case OpenSearchPPLParser.ANOMALY_RATE: - case OpenSearchPPLParser.CATEGORY_FIELD: - case OpenSearchPPLParser.TIME_FIELD: - case OpenSearchPPLParser.TIME_ZONE: - case OpenSearchPPLParser.TRAINING_DATA_SIZE: - case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: - case OpenSearchPPLParser.CONVERT_TZ: - case OpenSearchPPLParser.DATETIME: - case OpenSearchPPLParser.DAY: - case OpenSearchPPLParser.DAY_HOUR: - case OpenSearchPPLParser.DAY_MICROSECOND: - case OpenSearchPPLParser.DAY_MINUTE: - case OpenSearchPPLParser.DAY_OF_YEAR: - case OpenSearchPPLParser.DAY_SECOND: - case OpenSearchPPLParser.HOUR: - case OpenSearchPPLParser.HOUR_MICROSECOND: - case OpenSearchPPLParser.HOUR_MINUTE: - case OpenSearchPPLParser.HOUR_OF_DAY: - case OpenSearchPPLParser.HOUR_SECOND: - case OpenSearchPPLParser.MICROSECOND: - case OpenSearchPPLParser.MILLISECOND: - case OpenSearchPPLParser.MINUTE: - case OpenSearchPPLParser.MINUTE_MICROSECOND: - case OpenSearchPPLParser.MINUTE_OF_DAY: - case OpenSearchPPLParser.MINUTE_OF_HOUR: - case OpenSearchPPLParser.MINUTE_SECOND: - case OpenSearchPPLParser.MONTH: - case OpenSearchPPLParser.MONTH_OF_YEAR: - case OpenSearchPPLParser.QUARTER: - case OpenSearchPPLParser.SECOND: - case OpenSearchPPLParser.SECOND_MICROSECOND: - case OpenSearchPPLParser.SECOND_OF_MINUTE: - case OpenSearchPPLParser.WEEK: - case OpenSearchPPLParser.WEEK_OF_YEAR: - case OpenSearchPPLParser.YEAR: - case OpenSearchPPLParser.YEAR_MONTH: - case OpenSearchPPLParser.DOT: - case OpenSearchPPLParser.BACKTICK: - case OpenSearchPPLParser.AVG: - case OpenSearchPPLParser.COUNT: - case OpenSearchPPLParser.DISTINCT_COUNT: - case OpenSearchPPLParser.ESTDC: - case OpenSearchPPLParser.ESTDC_ERROR: - case OpenSearchPPLParser.MAX: - case OpenSearchPPLParser.MEAN: - case OpenSearchPPLParser.MEDIAN: - case OpenSearchPPLParser.MIN: - case OpenSearchPPLParser.MODE: - case OpenSearchPPLParser.RANGE: - case OpenSearchPPLParser.STDEV: - case OpenSearchPPLParser.STDEVP: - case OpenSearchPPLParser.SUM: - case OpenSearchPPLParser.SUMSQ: - case OpenSearchPPLParser.VAR_SAMP: - case OpenSearchPPLParser.VAR_POP: - case OpenSearchPPLParser.STDDEV_SAMP: - case OpenSearchPPLParser.STDDEV_POP: - case OpenSearchPPLParser.PERCENTILE: - case OpenSearchPPLParser.TAKE: - case OpenSearchPPLParser.FIRST: - case OpenSearchPPLParser.LAST: - case OpenSearchPPLParser.LIST: - case OpenSearchPPLParser.VALUES: - case OpenSearchPPLParser.EARLIEST: - case OpenSearchPPLParser.EARLIEST_TIME: - case OpenSearchPPLParser.LATEST: - case OpenSearchPPLParser.LATEST_TIME: - case OpenSearchPPLParser.PER_DAY: - case OpenSearchPPLParser.PER_HOUR: - case OpenSearchPPLParser.PER_MINUTE: - case OpenSearchPPLParser.PER_SECOND: - case OpenSearchPPLParser.RATE: - case OpenSearchPPLParser.SPARKLINE: - case OpenSearchPPLParser.C: - case OpenSearchPPLParser.DC: - case OpenSearchPPLParser.ABS: - case OpenSearchPPLParser.CBRT: - case OpenSearchPPLParser.CEIL: - case OpenSearchPPLParser.CEILING: - case OpenSearchPPLParser.CONV: - case OpenSearchPPLParser.CRC32: - case OpenSearchPPLParser.E: - case OpenSearchPPLParser.EXP: - case OpenSearchPPLParser.FLOOR: - case OpenSearchPPLParser.LN: - case OpenSearchPPLParser.LOG: - case OpenSearchPPLParser.LOG10: - case OpenSearchPPLParser.LOG2: - case OpenSearchPPLParser.MOD: - case OpenSearchPPLParser.PI: - case OpenSearchPPLParser.POSITION: - case OpenSearchPPLParser.POW: - case OpenSearchPPLParser.POWER: - case OpenSearchPPLParser.RAND: - case OpenSearchPPLParser.ROUND: - case OpenSearchPPLParser.SIGN: - case OpenSearchPPLParser.SQRT: - case OpenSearchPPLParser.TRUNCATE: - case OpenSearchPPLParser.ACOS: - case OpenSearchPPLParser.ASIN: - case OpenSearchPPLParser.ATAN: - case OpenSearchPPLParser.ATAN2: - case OpenSearchPPLParser.COS: - case OpenSearchPPLParser.COT: - case OpenSearchPPLParser.DEGREES: - case OpenSearchPPLParser.RADIANS: - case OpenSearchPPLParser.SIN: - case OpenSearchPPLParser.TAN: - case OpenSearchPPLParser.ADDDATE: - case OpenSearchPPLParser.ADDTIME: - case OpenSearchPPLParser.CURDATE: - case OpenSearchPPLParser.CURRENT_DATE: - case OpenSearchPPLParser.CURRENT_TIME: - case OpenSearchPPLParser.CURRENT_TIMESTAMP: - case OpenSearchPPLParser.CURTIME: - case OpenSearchPPLParser.DATE: - case OpenSearchPPLParser.DATEDIFF: - case OpenSearchPPLParser.DATE_ADD: - case OpenSearchPPLParser.DATE_FORMAT: - case OpenSearchPPLParser.DATE_SUB: - case OpenSearchPPLParser.DAYNAME: - case OpenSearchPPLParser.DAYOFMONTH: - case OpenSearchPPLParser.DAYOFWEEK: - case OpenSearchPPLParser.DAYOFYEAR: - case OpenSearchPPLParser.DAY_OF_MONTH: - case OpenSearchPPLParser.DAY_OF_WEEK: - case OpenSearchPPLParser.FROM_DAYS: - case OpenSearchPPLParser.FROM_UNIXTIME: - case OpenSearchPPLParser.LAST_DAY: - case OpenSearchPPLParser.LOCALTIME: - case OpenSearchPPLParser.LOCALTIMESTAMP: - case OpenSearchPPLParser.MAKEDATE: - case OpenSearchPPLParser.MAKETIME: - case OpenSearchPPLParser.MONTHNAME: - case OpenSearchPPLParser.NOW: - case OpenSearchPPLParser.PERIOD_ADD: - case OpenSearchPPLParser.PERIOD_DIFF: - case OpenSearchPPLParser.SEC_TO_TIME: - case OpenSearchPPLParser.STR_TO_DATE: - case OpenSearchPPLParser.SUBDATE: - case OpenSearchPPLParser.SUBTIME: - case OpenSearchPPLParser.SYSDATE: - case OpenSearchPPLParser.TIME: - case OpenSearchPPLParser.TIMEDIFF: - case OpenSearchPPLParser.TIMESTAMP: - case OpenSearchPPLParser.TIME_FORMAT: - case OpenSearchPPLParser.TIME_TO_SEC: - case OpenSearchPPLParser.TO_DAYS: - case OpenSearchPPLParser.TO_SECONDS: - case OpenSearchPPLParser.UNIX_TIMESTAMP: - case OpenSearchPPLParser.UTC_DATE: - case OpenSearchPPLParser.UTC_TIME: - case OpenSearchPPLParser.UTC_TIMESTAMP: - case OpenSearchPPLParser.WEEKDAY: - case OpenSearchPPLParser.YEARWEEK: - case OpenSearchPPLParser.SUBSTR: - case OpenSearchPPLParser.SUBSTRING: - case OpenSearchPPLParser.LTRIM: - case OpenSearchPPLParser.RTRIM: - case OpenSearchPPLParser.TRIM: - case OpenSearchPPLParser.LOWER: - case OpenSearchPPLParser.UPPER: - case OpenSearchPPLParser.CONCAT: - case OpenSearchPPLParser.CONCAT_WS: - case OpenSearchPPLParser.LENGTH: - case OpenSearchPPLParser.STRCMP: - case OpenSearchPPLParser.RIGHT: - case OpenSearchPPLParser.LEFT: - case OpenSearchPPLParser.ASCII: - case OpenSearchPPLParser.LOCATE: - case OpenSearchPPLParser.REPLACE: - case OpenSearchPPLParser.REVERSE: - case OpenSearchPPLParser.LIKE: - case OpenSearchPPLParser.ISNULL: - case OpenSearchPPLParser.ISNOTNULL: - case OpenSearchPPLParser.IFNULL: - case OpenSearchPPLParser.NULLIF: - case OpenSearchPPLParser.IF: - case OpenSearchPPLParser.TYPEOF: - case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: - case OpenSearchPPLParser.ANALYZE_WILDCARD: - case OpenSearchPPLParser.ANALYZER: - case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: - case OpenSearchPPLParser.BOOST: - case OpenSearchPPLParser.CUTOFF_FREQUENCY: - case OpenSearchPPLParser.DEFAULT_FIELD: - case OpenSearchPPLParser.DEFAULT_OPERATOR: - case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: - case OpenSearchPPLParser.ESCAPE: - case OpenSearchPPLParser.FLAGS: - case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: - case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: - case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: - case OpenSearchPPLParser.FUZZY_REWRITE: - case OpenSearchPPLParser.FUZZINESS: - case OpenSearchPPLParser.LENIENT: - case OpenSearchPPLParser.LOW_FREQ_OPERATOR: - case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: - case OpenSearchPPLParser.MAX_EXPANSIONS: - case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: - case OpenSearchPPLParser.OPERATOR: - case OpenSearchPPLParser.PHRASE_SLOP: - case OpenSearchPPLParser.PREFIX_LENGTH: - case OpenSearchPPLParser.QUOTE_ANALYZER: - case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: - case OpenSearchPPLParser.REWRITE: - case OpenSearchPPLParser.SLOP: - case OpenSearchPPLParser.TIE_BREAKER: - case OpenSearchPPLParser.TYPE: - case OpenSearchPPLParser.ZERO_TERMS_QUERY: - case OpenSearchPPLParser.SPAN: - case OpenSearchPPLParser.MS: - case OpenSearchPPLParser.S: - case OpenSearchPPLParser.M: - case OpenSearchPPLParser.H: - case OpenSearchPPLParser.W: - case OpenSearchPPLParser.Q: - case OpenSearchPPLParser.Y: - case OpenSearchPPLParser.ID: - case OpenSearchPPLParser.BQUOTA_STRING: - this.enterOuterAlt(localContext, 1); + _la = this.tokenStream.LA(1); + if (_la === 114) { { - this.state = 883; - this.qualifiedName(); + this.state = 996; + this.match(OpenSearchPPLParser.IN); + this.state = 997; + this.fieldList(); } - break; - case OpenSearchPPLParser.DQUOTA_STRING: - case OpenSearchPPLParser.SQUOTA_STRING: - this.enterOuterAlt(localContext, 2); + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public fillNullUsing(): FillNullUsingContext { + let localContext = new FillNullUsingContext(this.context, this.state); + this.enterRule(localContext, 144, OpenSearchPPLParser.RULE_fillNullUsing); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1000; + this.match(OpenSearchPPLParser.USING); + this.state = 1001; + this.replacementPair(); + this.state = 1006; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { { - this.state = 884; - this.stringLiteral(); + { + this.state = 1002; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1003; + this.replacementPair(); } - break; - default: - throw new antlr.NoViableAltException(this); + } + this.state = 1008; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } } } catch (re) { @@ -5282,14 +5244,18 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public relevanceQuery(): RelevanceQueryContext { - let localContext = new RelevanceQueryContext(this.context, this.state); - this.enterRule(localContext, 158, OpenSearchPPLParser.RULE_relevanceQuery); + public replacementPair(): ReplacementPairContext { + let localContext = new ReplacementPairContext(this.context, this.state); + this.enterRule(localContext, 146, OpenSearchPPLParser.RULE_replacementPair); try { this.enterOuterAlt(localContext, 1); { - this.state = 887; - this.relevanceArgValue(); + this.state = 1009; + this.fieldExpression(); + this.state = 1010; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1011; + localContext._replacement = this.valueExpression(0); } } catch (re) { @@ -5305,27 +5271,43 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public relevanceArgValue(): RelevanceArgValueContext { - let localContext = new RelevanceArgValueContext(this.context, this.state); - this.enterRule(localContext, 160, OpenSearchPPLParser.RULE_relevanceArgValue); + public trendlineCommand(): TrendlineCommandContext { + let localContext = new TrendlineCommandContext(this.context, this.state); + this.enterRule(localContext, 148, OpenSearchPPLParser.RULE_trendlineCommand); + let _la: number; try { - this.state = 891; + this.enterOuterAlt(localContext, 1); + { + this.state = 1013; + this.match(OpenSearchPPLParser.TRENDLINE); + this.state = 1016; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 72, this.context) ) { - case 1: - this.enterOuterAlt(localContext, 1); + _la = this.tokenStream.LA(1); + if (_la === 15) { { - this.state = 889; - this.qualifiedName(); + this.state = 1014; + this.match(OpenSearchPPLParser.SORT); + this.state = 1015; + this.sortField(); } - break; - case 2: - this.enterOuterAlt(localContext, 2); + } + + this.state = 1018; + this.trendlineClause(); + this.state = 1022; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 81 || _la === 82) { { - this.state = 890; - this.literalValue(); + { + this.state = 1019; + this.trendlineClause(); } - break; + } + this.state = 1024; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } } } catch (re) { @@ -5341,185 +5323,37 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public mathematicalFunctionName(): MathematicalFunctionNameContext { - let localContext = new MathematicalFunctionNameContext(this.context, this.state); - this.enterRule(localContext, 162, OpenSearchPPLParser.RULE_mathematicalFunctionName); + public trendlineClause(): TrendlineClauseContext { + let localContext = new TrendlineClauseContext(this.context, this.state); + this.enterRule(localContext, 150, OpenSearchPPLParser.RULE_trendlineClause); + let _la: number; try { - this.state = 916; + this.enterOuterAlt(localContext, 1); + { + this.state = 1025; + this.trendlineType(); + this.state = 1026; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1027; + localContext._numberOfDataPoints = this.integerLiteral(); + this.state = 1028; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1029; + localContext._field = this.fieldExpression(); + this.state = 1030; + this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 1033; this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { - case OpenSearchPPLParser.ABS: - this.enterOuterAlt(localContext, 1); - { - this.state = 893; - this.match(OpenSearchPPLParser.ABS); - } - break; - case OpenSearchPPLParser.CBRT: - this.enterOuterAlt(localContext, 2); - { - this.state = 894; - this.match(OpenSearchPPLParser.CBRT); - } - break; - case OpenSearchPPLParser.CEIL: - this.enterOuterAlt(localContext, 3); - { - this.state = 895; - this.match(OpenSearchPPLParser.CEIL); - } - break; - case OpenSearchPPLParser.CEILING: - this.enterOuterAlt(localContext, 4); - { - this.state = 896; - this.match(OpenSearchPPLParser.CEILING); - } - break; - case OpenSearchPPLParser.CONV: - this.enterOuterAlt(localContext, 5); - { - this.state = 897; - this.match(OpenSearchPPLParser.CONV); - } - break; - case OpenSearchPPLParser.CRC32: - this.enterOuterAlt(localContext, 6); - { - this.state = 898; - this.match(OpenSearchPPLParser.CRC32); - } - break; - case OpenSearchPPLParser.E: - this.enterOuterAlt(localContext, 7); - { - this.state = 899; - this.match(OpenSearchPPLParser.E); - } - break; - case OpenSearchPPLParser.EXP: - this.enterOuterAlt(localContext, 8); - { - this.state = 900; - this.match(OpenSearchPPLParser.EXP); - } - break; - case OpenSearchPPLParser.FLOOR: - this.enterOuterAlt(localContext, 9); - { - this.state = 901; - this.match(OpenSearchPPLParser.FLOOR); - } - break; - case OpenSearchPPLParser.LN: - this.enterOuterAlt(localContext, 10); - { - this.state = 902; - this.match(OpenSearchPPLParser.LN); - } - break; - case OpenSearchPPLParser.LOG: - this.enterOuterAlt(localContext, 11); - { - this.state = 903; - this.match(OpenSearchPPLParser.LOG); - } - break; - case OpenSearchPPLParser.LOG10: - this.enterOuterAlt(localContext, 12); - { - this.state = 904; - this.match(OpenSearchPPLParser.LOG10); - } - break; - case OpenSearchPPLParser.LOG2: - this.enterOuterAlt(localContext, 13); - { - this.state = 905; - this.match(OpenSearchPPLParser.LOG2); - } - break; - case OpenSearchPPLParser.MOD: - this.enterOuterAlt(localContext, 14); - { - this.state = 906; - this.match(OpenSearchPPLParser.MOD); - } - break; - case OpenSearchPPLParser.PI: - this.enterOuterAlt(localContext, 15); - { - this.state = 907; - this.match(OpenSearchPPLParser.PI); - } - break; - case OpenSearchPPLParser.POW: - this.enterOuterAlt(localContext, 16); - { - this.state = 908; - this.match(OpenSearchPPLParser.POW); - } - break; - case OpenSearchPPLParser.POWER: - this.enterOuterAlt(localContext, 17); - { - this.state = 909; - this.match(OpenSearchPPLParser.POWER); - } - break; - case OpenSearchPPLParser.RAND: - this.enterOuterAlt(localContext, 18); - { - this.state = 910; - this.match(OpenSearchPPLParser.RAND); - } - break; - case OpenSearchPPLParser.ROUND: - this.enterOuterAlt(localContext, 19); - { - this.state = 911; - this.match(OpenSearchPPLParser.ROUND); - } - break; - case OpenSearchPPLParser.SIGN: - this.enterOuterAlt(localContext, 20); - { - this.state = 912; - this.match(OpenSearchPPLParser.SIGN); - } - break; - case OpenSearchPPLParser.SQRT: - this.enterOuterAlt(localContext, 21); - { - this.state = 913; - this.match(OpenSearchPPLParser.SQRT); - } - break; - case OpenSearchPPLParser.TRUNCATE: - this.enterOuterAlt(localContext, 22); - { - this.state = 914; - this.match(OpenSearchPPLParser.TRUNCATE); - } - break; - case OpenSearchPPLParser.ACOS: - case OpenSearchPPLParser.ASIN: - case OpenSearchPPLParser.ATAN: - case OpenSearchPPLParser.ATAN2: - case OpenSearchPPLParser.COS: - case OpenSearchPPLParser.COT: - case OpenSearchPPLParser.DEGREES: - case OpenSearchPPLParser.RADIANS: - case OpenSearchPPLParser.SIN: - case OpenSearchPPLParser.TAN: - this.enterOuterAlt(localContext, 23); + _la = this.tokenStream.LA(1); + if (_la === 61) { { - this.state = 915; - this.trigonometricFunctionName(); + this.state = 1031; + this.match(OpenSearchPPLParser.AS); + this.state = 1032; + localContext._alias = this.qualifiedName(); } - break; - default: - throw new antlr.NoViableAltException(this); + } + } } catch (re) { @@ -5535,16 +5369,16 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public trigonometricFunctionName(): TrigonometricFunctionNameContext { - let localContext = new TrigonometricFunctionNameContext(this.context, this.state); - this.enterRule(localContext, 164, OpenSearchPPLParser.RULE_trigonometricFunctionName); + public trendlineType(): TrendlineTypeContext { + let localContext = new TrendlineTypeContext(this.context, this.state); + this.enterRule(localContext, 152, OpenSearchPPLParser.RULE_trendlineType); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 918; + this.state = 1035; _la = this.tokenStream.LA(1); - if(!(((((_la - 195)) & ~0x1F) === 0 && ((1 << (_la - 195)) & 1023) !== 0))) { + if(!(_la === 81 || _la === 82)) { this.errorHandler.recoverInline(this); } else { @@ -5566,22 +5400,29 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public dateTimeFunctionName(): DateTimeFunctionNameContext { - let localContext = new DateTimeFunctionNameContext(this.context, this.state); - this.enterRule(localContext, 166, OpenSearchPPLParser.RULE_dateTimeFunctionName); + public expandCommand(): ExpandCommandContext { + let localContext = new ExpandCommandContext(this.context, this.state); + this.enterRule(localContext, 154, OpenSearchPPLParser.RULE_expandCommand); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 920; + this.state = 1037; + this.match(OpenSearchPPLParser.EXPAND); + this.state = 1038; + this.fieldExpression(); + this.state = 1041; + this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if(!(((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 1038960967) !== 0) || ((((_la - 205)) & ~0x1F) === 0 && ((1 << (_la - 205)) & 4292607999) !== 0) || ((((_la - 237)) & ~0x1F) === 0 && ((1 << (_la - 237)) & 523903) !== 0))) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); + if (_la === 61) { + { + this.state = 1039; + this.match(OpenSearchPPLParser.AS); + this.state = 1040; + localContext._alias = this.qualifiedName(); + } } + } } catch (re) { @@ -5597,24 +5438,29 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public getFormatFunction(): GetFormatFunctionContext { - let localContext = new GetFormatFunctionContext(this.context, this.state); - this.enterRule(localContext, 168, OpenSearchPPLParser.RULE_getFormatFunction); + public flattenCommand(): FlattenCommandContext { + let localContext = new FlattenCommandContext(this.context, this.state); + this.enterRule(localContext, 156, OpenSearchPPLParser.RULE_flattenCommand); + let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 922; - this.match(OpenSearchPPLParser.GET_FORMAT); - this.state = 923; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 924; - this.getFormatType(); - this.state = 925; - this.match(OpenSearchPPLParser.COMMA); - this.state = 926; - this.functionArg(); - this.state = 927; - this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 1043; + this.match(OpenSearchPPLParser.FLATTEN); + this.state = 1044; + this.fieldExpression(); + this.state = 1047; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 61) { + { + this.state = 1045; + this.match(OpenSearchPPLParser.AS); + this.state = 1046; + localContext._aliases = this.identifierSeq(); + } + } + } } catch (re) { @@ -5630,22 +5476,51 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public getFormatType(): GetFormatTypeContext { - let localContext = new GetFormatTypeContext(this.context, this.state); - this.enterRule(localContext, 170, OpenSearchPPLParser.RULE_getFormatType); + public appendcolCommand(): AppendcolCommandContext { + let localContext = new AppendcolCommandContext(this.context, this.state); + this.enterRule(localContext, 158, OpenSearchPPLParser.RULE_appendcolCommand); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 929; + this.state = 1049; + this.match(OpenSearchPPLParser.APPENDCOL); + this.state = 1053; + this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if(!(_la === 69 || ((((_la - 212)) & ~0x1F) === 0 && ((1 << (_la - 212)) & 2684354561) !== 0))) { - this.errorHandler.recoverInline(this); + if (_la === 76) { + { + this.state = 1050; + this.match(OpenSearchPPLParser.OVERRIDE); + this.state = 1051; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1052; + localContext._override = this.booleanLiteral(); + } } - else { - this.errorHandler.reportMatch(this); - this.consume(); + + this.state = 1055; + this.match(OpenSearchPPLParser.LT_SQR_PRTHS); + this.state = 1056; + this.commands(); + this.state = 1061; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 167) { + { + { + this.state = 1057; + this.match(OpenSearchPPLParser.PIPE); + this.state = 1058; + this.commands(); + } + } + this.state = 1063; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); } + this.state = 1064; + this.match(OpenSearchPPLParser.RT_SQR_PRTHS); } } catch (re) { @@ -5661,55 +5536,45 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public extractFunction(): ExtractFunctionContext { - let localContext = new ExtractFunctionContext(this.context, this.state); - this.enterRule(localContext, 172, OpenSearchPPLParser.RULE_extractFunction); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 931; - this.match(OpenSearchPPLParser.EXTRACT); - this.state = 932; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 933; - this.datetimePart(); - this.state = 934; - this.match(OpenSearchPPLParser.FROM); - this.state = 935; - this.functionArg(); - this.state = 936; - this.match(OpenSearchPPLParser.RT_PRTHS); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public simpleDateTimePart(): SimpleDateTimePartContext { - let localContext = new SimpleDateTimePartContext(this.context, this.state); - this.enterRule(localContext, 174, OpenSearchPPLParser.RULE_simpleDateTimePart); + public appendCommand(): AppendCommandContext { + let localContext = new AppendCommandContext(this.context, this.state); + this.enterRule(localContext, 160, OpenSearchPPLParser.RULE_appendCommand); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 938; - _la = this.tokenStream.LA(1); - if(!(((((_la - 70)) & ~0x1F) === 0 && ((1 << (_la - 70)) & 174608449) !== 0))) { - this.errorHandler.recoverInline(this); + this.state = 1066; + this.match(OpenSearchPPLParser.APPEND); + this.state = 1067; + this.match(OpenSearchPPLParser.LT_SQR_PRTHS); + this.state = 1069; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 91, this.context) ) { + case 1: + { + this.state = 1068; + this.searchCommand(); + } + break; } - else { - this.errorHandler.reportMatch(this); - this.consume(); + this.state = 1075; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 167) { + { + { + this.state = 1071; + this.match(OpenSearchPPLParser.PIPE); + this.state = 1072; + this.commands(); + } + } + this.state = 1077; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); } + this.state = 1078; + this.match(OpenSearchPPLParser.RT_SQR_PRTHS); } } catch (re) { @@ -5725,21 +5590,28 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public complexDateTimePart(): ComplexDateTimePartContext { - let localContext = new ComplexDateTimePartContext(this.context, this.state); - this.enterRule(localContext, 176, OpenSearchPPLParser.RULE_complexDateTimePart); + public kmeansCommand(): KmeansCommandContext { + let localContext = new KmeansCommandContext(this.context, this.state); + this.enterRule(localContext, 162, OpenSearchPPLParser.RULE_kmeansCommand); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 940; + this.state = 1080; + this.match(OpenSearchPPLParser.KMEANS); + this.state = 1084; + this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if(!(((((_la - 71)) & ~0x1F) === 0 && ((1 << (_la - 71)) & 138560215) !== 0))) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); + while (((((_la - 90)) & ~0x1F) === 0 && ((1 << (_la - 90)) & 7) !== 0)) { + { + { + this.state = 1081; + this.kmeansParameter(); + } + } + this.state = 1086; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); } } } @@ -5756,43 +5628,50 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public datetimePart(): DatetimePartContext { - let localContext = new DatetimePartContext(this.context, this.state); - this.enterRule(localContext, 178, OpenSearchPPLParser.RULE_datetimePart); + public kmeansParameter(): KmeansParameterContext { + let localContext = new KmeansParameterContext(this.context, this.state); + this.enterRule(localContext, 164, OpenSearchPPLParser.RULE_kmeansParameter); try { - this.state = 944; + this.state = 1096; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { - case OpenSearchPPLParser.DAY: - case OpenSearchPPLParser.HOUR: - case OpenSearchPPLParser.MICROSECOND: - case OpenSearchPPLParser.MINUTE: - case OpenSearchPPLParser.MONTH: - case OpenSearchPPLParser.QUARTER: - case OpenSearchPPLParser.SECOND: - case OpenSearchPPLParser.WEEK: - case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.CENTROIDS: this.enterOuterAlt(localContext, 1); { - this.state = 942; - this.simpleDateTimePart(); + { + this.state = 1087; + this.match(OpenSearchPPLParser.CENTROIDS); + this.state = 1088; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1089; + localContext._centroids = this.integerLiteral(); + } } break; - case OpenSearchPPLParser.DAY_HOUR: - case OpenSearchPPLParser.DAY_MICROSECOND: - case OpenSearchPPLParser.DAY_MINUTE: - case OpenSearchPPLParser.DAY_SECOND: - case OpenSearchPPLParser.HOUR_MICROSECOND: - case OpenSearchPPLParser.HOUR_MINUTE: - case OpenSearchPPLParser.HOUR_SECOND: - case OpenSearchPPLParser.MINUTE_MICROSECOND: - case OpenSearchPPLParser.MINUTE_SECOND: - case OpenSearchPPLParser.SECOND_MICROSECOND: - case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.ITERATIONS: this.enterOuterAlt(localContext, 2); { - this.state = 943; - this.complexDateTimePart(); + { + this.state = 1090; + this.match(OpenSearchPPLParser.ITERATIONS); + this.state = 1091; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1092; + localContext._iterations = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.DISTANCE_TYPE: + this.enterOuterAlt(localContext, 3); + { + { + this.state = 1093; + this.match(OpenSearchPPLParser.DISTANCE_TYPE); + this.state = 1094; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1095; + localContext._distance_type = this.stringLiteral(); + } } break; default: @@ -5812,143 +5691,28 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public timestampFunction(): TimestampFunctionContext { - let localContext = new TimestampFunctionContext(this.context, this.state); - this.enterRule(localContext, 180, OpenSearchPPLParser.RULE_timestampFunction); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 946; - this.timestampFunctionName(); - this.state = 947; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 948; - this.simpleDateTimePart(); - this.state = 949; - this.match(OpenSearchPPLParser.COMMA); - this.state = 950; - localContext._firstArg = this.functionArg(); - this.state = 951; - this.match(OpenSearchPPLParser.COMMA); - this.state = 952; - localContext._secondArg = this.functionArg(); - this.state = 953; - this.match(OpenSearchPPLParser.RT_PRTHS); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public timestampFunctionName(): TimestampFunctionNameContext { - let localContext = new TimestampFunctionNameContext(this.context, this.state); - this.enterRule(localContext, 182, OpenSearchPPLParser.RULE_timestampFunctionName); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 955; - _la = this.tokenStream.LA(1); - if(!(_la === 244 || _la === 245)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public conditionFunctionBase(): ConditionFunctionBaseContext { - let localContext = new ConditionFunctionBaseContext(this.context, this.state); - this.enterRule(localContext, 184, OpenSearchPPLParser.RULE_conditionFunctionBase); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 957; - _la = this.tokenStream.LA(1); - if(!(((((_la - 275)) & ~0x1F) === 0 && ((1 << (_la - 275)) & 63) !== 0))) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public systemFunctionName(): SystemFunctionNameContext { - let localContext = new SystemFunctionNameContext(this.context, this.state); - this.enterRule(localContext, 186, OpenSearchPPLParser.RULE_systemFunctionName); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 959; - this.match(OpenSearchPPLParser.TYPEOF); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public textFunctionName(): TextFunctionNameContext { - let localContext = new TextFunctionNameContext(this.context, this.state); - this.enterRule(localContext, 188, OpenSearchPPLParser.RULE_textFunctionName); + public adCommand(): AdCommandContext { + let localContext = new AdCommandContext(this.context, this.state); + this.enterRule(localContext, 166, OpenSearchPPLParser.RULE_adCommand); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 961; + this.state = 1098; + this.match(OpenSearchPPLParser.AD); + this.state = 1102; + this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if(!(((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 262111) !== 0))) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); + while (((((_la - 93)) & ~0x1F) === 0 && ((1 << (_la - 93)) & 2047) !== 0) || _la === 297) { + { + { + this.state = 1099; + this.adParameter(); + } + } + this.state = 1104; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); } } } @@ -5965,45 +5729,171 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public positionFunctionName(): PositionFunctionNameContext { - let localContext = new PositionFunctionNameContext(this.context, this.state); - this.enterRule(localContext, 190, OpenSearchPPLParser.RULE_positionFunctionName); + public adParameter(): AdParameterContext { + let localContext = new AdParameterContext(this.context, this.state); + this.enterRule(localContext, 168, OpenSearchPPLParser.RULE_adParameter); try { - this.enterOuterAlt(localContext, 1); - { - this.state = 963; - this.match(OpenSearchPPLParser.POSITION); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public comparisonOperator(): ComparisonOperatorContext { - let localContext = new ComparisonOperatorContext(this.context, this.state); - this.enterRule(localContext, 192, OpenSearchPPLParser.RULE_comparisonOperator); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 965; - _la = this.tokenStream.LA(1); - if(!(_la === 67 || ((((_la - 112)) & ~0x1F) === 0 && ((1 << (_la - 112)) & 63) !== 0))) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } + this.state = 1141; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.NUMBER_OF_TREES: + this.enterOuterAlt(localContext, 1); + { + { + this.state = 1105; + this.match(OpenSearchPPLParser.NUMBER_OF_TREES); + this.state = 1106; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1107; + localContext._number_of_trees = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.SHINGLE_SIZE: + this.enterOuterAlt(localContext, 2); + { + { + this.state = 1108; + this.match(OpenSearchPPLParser.SHINGLE_SIZE); + this.state = 1109; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1110; + localContext._shingle_size = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.SAMPLE_SIZE: + this.enterOuterAlt(localContext, 3); + { + { + this.state = 1111; + this.match(OpenSearchPPLParser.SAMPLE_SIZE); + this.state = 1112; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1113; + localContext._sample_size = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.OUTPUT_AFTER: + this.enterOuterAlt(localContext, 4); + { + { + this.state = 1114; + this.match(OpenSearchPPLParser.OUTPUT_AFTER); + this.state = 1115; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1116; + localContext._output_after = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.TIME_DECAY: + this.enterOuterAlt(localContext, 5); + { + { + this.state = 1117; + this.match(OpenSearchPPLParser.TIME_DECAY); + this.state = 1118; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1119; + localContext._time_decay = this.decimalLiteral(); + } + } + break; + case OpenSearchPPLParser.ANOMALY_RATE: + this.enterOuterAlt(localContext, 6); + { + { + this.state = 1120; + this.match(OpenSearchPPLParser.ANOMALY_RATE); + this.state = 1121; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1122; + localContext._anomaly_rate = this.decimalLiteral(); + } + } + break; + case OpenSearchPPLParser.CATEGORY_FIELD: + this.enterOuterAlt(localContext, 7); + { + { + this.state = 1123; + this.match(OpenSearchPPLParser.CATEGORY_FIELD); + this.state = 1124; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1125; + localContext._category_field = this.stringLiteral(); + } + } + break; + case OpenSearchPPLParser.TIME_FIELD: + this.enterOuterAlt(localContext, 8); + { + { + this.state = 1126; + this.match(OpenSearchPPLParser.TIME_FIELD); + this.state = 1127; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1128; + localContext._time_field = this.stringLiteral(); + } + } + break; + case OpenSearchPPLParser.DATE_FORMAT: + this.enterOuterAlt(localContext, 9); + { + { + this.state = 1129; + this.match(OpenSearchPPLParser.DATE_FORMAT); + this.state = 1130; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1131; + localContext._date_format = this.stringLiteral(); + } + } + break; + case OpenSearchPPLParser.TIME_ZONE: + this.enterOuterAlt(localContext, 10); + { + { + this.state = 1132; + this.match(OpenSearchPPLParser.TIME_ZONE); + this.state = 1133; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1134; + localContext._time_zone = this.stringLiteral(); + } + } + break; + case OpenSearchPPLParser.TRAINING_DATA_SIZE: + this.enterOuterAlt(localContext, 11); + { + { + this.state = 1135; + this.match(OpenSearchPPLParser.TRAINING_DATA_SIZE); + this.state = 1136; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1137; + localContext._training_data_size = this.integerLiteral(); + } + } + break; + case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + this.enterOuterAlt(localContext, 12); + { + { + this.state = 1138; + this.match(OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD); + this.state = 1139; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1140; + localContext._anomaly_score_threshold = this.decimalLiteral(); + } + } + break; + default: + throw new antlr.NoViableAltException(this); } } catch (re) { @@ -6019,21 +5909,28 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public singleFieldRelevanceFunctionName(): SingleFieldRelevanceFunctionNameContext { - let localContext = new SingleFieldRelevanceFunctionNameContext(this.context, this.state); - this.enterRule(localContext, 194, OpenSearchPPLParser.RULE_singleFieldRelevanceFunctionName); + public mlCommand(): MlCommandContext { + let localContext = new MlCommandContext(this.context, this.state); + this.enterRule(localContext, 170, OpenSearchPPLParser.RULE_mlCommand); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 967; + this.state = 1143; + this.match(OpenSearchPPLParser.ML); + this.state = 1147; + this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if(!(((((_la - 282)) & ~0x1F) === 0 && ((1 << (_la - 282)) & 15) !== 0))) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4257218044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 2682862783) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294959103) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4162840575) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 805306367) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 2348816393) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4294443007) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 4294967295) !== 0) || ((((_la - 262)) & ~0x1F) === 0 && ((1 << (_la - 262)) & 4294967295) !== 0) || ((((_la - 294)) & ~0x1F) === 0 && ((1 << (_la - 294)) & 4294967295) !== 0) || ((((_la - 328)) & ~0x1F) === 0 && ((1 << (_la - 328)) & 4294901759) !== 0) || ((((_la - 360)) & ~0x1F) === 0 && ((1 << (_la - 360)) & 4294967295) !== 0) || ((((_la - 392)) & ~0x1F) === 0 && ((1 << (_la - 392)) & 4294967295) !== 0) || ((((_la - 424)) & ~0x1F) === 0 && ((1 << (_la - 424)) & 4294966799) !== 0) || _la === 464) { + { + { + this.state = 1144; + this.mlArg(); + } + } + this.state = 1149; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); } } } @@ -6050,21 +5947,19 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public multiFieldRelevanceFunctionName(): MultiFieldRelevanceFunctionNameContext { - let localContext = new MultiFieldRelevanceFunctionNameContext(this.context, this.state); - this.enterRule(localContext, 196, OpenSearchPPLParser.RULE_multiFieldRelevanceFunctionName); - let _la: number; + public mlArg(): MlArgContext { + let localContext = new MlArgContext(this.context, this.state); + this.enterRule(localContext, 172, OpenSearchPPLParser.RULE_mlArg); try { this.enterOuterAlt(localContext, 1); { - this.state = 969; - _la = this.tokenStream.LA(1); - if(!(((((_la - 286)) & ~0x1F) === 0 && ((1 << (_la - 286)) & 7) !== 0))) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); + { + this.state = 1150; + localContext._argName = this.ident(); + this.state = 1151; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1152; + localContext._argValue = this.literalValue(); } } } @@ -6081,53 +5976,77 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public literalValue(): LiteralValueContext { - let localContext = new LiteralValueContext(this.context, this.state); - this.enterRule(localContext, 198, OpenSearchPPLParser.RULE_literalValue); + public fromClause(): FromClauseContext { + let localContext = new FromClauseContext(this.context, this.state); + this.enterRule(localContext, 174, OpenSearchPPLParser.RULE_fromClause); try { - this.state = 977; + this.state = 1172; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 75, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 98, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 971; - this.intervalLiteral(); + this.state = 1154; + this.match(OpenSearchPPLParser.SOURCE); + this.state = 1155; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1156; + this.tableOrSubqueryClause(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 972; - this.stringLiteral(); + this.state = 1157; + this.match(OpenSearchPPLParser.INDEX); + this.state = 1158; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1159; + this.tableOrSubqueryClause(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 973; - this.integerLiteral(); + this.state = 1160; + this.match(OpenSearchPPLParser.SOURCE); + this.state = 1161; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1162; + this.tableFunction(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 974; - this.decimalLiteral(); + this.state = 1163; + this.match(OpenSearchPPLParser.INDEX); + this.state = 1164; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1165; + this.tableFunction(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 975; - this.booleanLiteral(); - } - break; + this.state = 1166; + this.match(OpenSearchPPLParser.SOURCE); + this.state = 1167; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1168; + this.dynamicSourceClause(); + } + break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 976; - this.datetimeLiteral(); + this.state = 1169; + this.match(OpenSearchPPLParser.INDEX); + this.state = 1170; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1171; + this.dynamicSourceClause(); } break; } @@ -6145,281 +6064,7917 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public intervalLiteral(): IntervalLiteralContext { - let localContext = new IntervalLiteralContext(this.context, this.state); - this.enterRule(localContext, 200, OpenSearchPPLParser.RULE_intervalLiteral); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 979; - this.match(OpenSearchPPLParser.INTERVAL); - this.state = 980; - this.valueExpression(0); - this.state = 981; - this.intervalUnit(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public stringLiteral(): StringLiteralContext { - let localContext = new StringLiteralContext(this.context, this.state); - this.enterRule(localContext, 202, OpenSearchPPLParser.RULE_stringLiteral); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 983; - _la = this.tokenStream.LA(1); - if(!(_la === 333 || _la === 334)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public integerLiteral(): IntegerLiteralContext { - let localContext = new IntegerLiteralContext(this.context, this.state); - this.enterRule(localContext, 204, OpenSearchPPLParser.RULE_integerLiteral); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 986; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 118 || _la === 119) { - { - this.state = 985; - _la = this.tokenStream.LA(1); - if(!(_la === 118 || _la === 119)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - - this.state = 988; - this.match(OpenSearchPPLParser.INTEGER_LITERAL); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public decimalLiteral(): DecimalLiteralContext { - let localContext = new DecimalLiteralContext(this.context, this.state); - this.enterRule(localContext, 206, OpenSearchPPLParser.RULE_decimalLiteral); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 991; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 118 || _la === 119) { - { - this.state = 990; - _la = this.tokenStream.LA(1); - if(!(_la === 118 || _la === 119)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - - this.state = 993; - this.match(OpenSearchPPLParser.DECIMAL_LITERAL); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public booleanLiteral(): BooleanLiteralContext { - let localContext = new BooleanLiteralContext(this.context, this.state); - this.enterRule(localContext, 208, OpenSearchPPLParser.RULE_booleanLiteral); + public tableOrSubqueryClause(): TableOrSubqueryClauseContext { + let localContext = new TableOrSubqueryClauseContext(this.context, this.state); + this.enterRule(localContext, 176, OpenSearchPPLParser.RULE_tableOrSubqueryClause); let _la: number; try { - this.enterOuterAlt(localContext, 1); - { - this.state = 995; - _la = this.tokenStream.LA(1); - if(!(_la === 65 || _la === 66)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public datetimeLiteral(): DatetimeLiteralContext { - let localContext = new DatetimeLiteralContext(this.context, this.state); - this.enterRule(localContext, 210, OpenSearchPPLParser.RULE_datetimeLiteral); - try { - this.state = 1000; + this.state = 1182; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { - case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.LT_SQR_PRTHS: this.enterOuterAlt(localContext, 1); { - this.state = 997; - this.dateLiteral(); - } - break; - case OpenSearchPPLParser.TIME: - this.enterOuterAlt(localContext, 2); - { - this.state = 998; - this.timeLiteral(); + this.state = 1174; + this.match(OpenSearchPPLParser.LT_SQR_PRTHS); + this.state = 1175; + this.subSearch(); + this.state = 1176; + this.match(OpenSearchPPLParser.RT_SQR_PRTHS); + this.state = 1179; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 61) { + { + this.state = 1177; + this.match(OpenSearchPPLParser.AS); + this.state = 1178; + localContext._alias = this.qualifiedName(); + } } - break; - case OpenSearchPPLParser.TIMESTAMP: - this.enterOuterAlt(localContext, 3); - { - this.state = 999; - this.timestampLiteral(); + } break; - default: - throw new antlr.NoViableAltException(this); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public dateLiteral(): DateLiteralContext { - let localContext = new DateLiteralContext(this.context, this.state); - this.enterRule(localContext, 212, OpenSearchPPLParser.RULE_dateLiteral); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1002; - this.match(OpenSearchPPLParser.DATE); - this.state = 1003; - localContext._date = this.stringLiteral(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public timeLiteral(): TimeLiteralContext { - let localContext = new TimeLiteralContext(this.context, this.state); - this.enterRule(localContext, 214, OpenSearchPPLParser.RULE_timeLiteral); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1005; - this.match(OpenSearchPPLParser.TIME); - this.state = 1006; - localContext._time = this.stringLiteral(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } + case OpenSearchPPLParser.SEARCH: + case OpenSearchPPLParser.DESCRIBE: + case OpenSearchPPLParser.SHOW: + case OpenSearchPPLParser.EXPLAIN: + case OpenSearchPPLParser.FROM: + case OpenSearchPPLParser.WHERE: + case OpenSearchPPLParser.FIELDS: + case OpenSearchPPLParser.TABLE: + case OpenSearchPPLParser.RENAME: + case OpenSearchPPLParser.STATS: + case OpenSearchPPLParser.EVENTSTATS: + case OpenSearchPPLParser.DEDUP: + case OpenSearchPPLParser.SORT: + case OpenSearchPPLParser.EVAL: + case OpenSearchPPLParser.HEAD: + case OpenSearchPPLParser.BIN: + case OpenSearchPPLParser.TOP: + case OpenSearchPPLParser.RARE: + case OpenSearchPPLParser.PARSE: + case OpenSearchPPLParser.REGEX: + case OpenSearchPPLParser.REX: + case OpenSearchPPLParser.PUNCT: + case OpenSearchPPLParser.GROK: + case OpenSearchPPLParser.PATTERN: + case OpenSearchPPLParser.PATTERNS: + case OpenSearchPPLParser.NEW_FIELD: + case OpenSearchPPLParser.KMEANS: + case OpenSearchPPLParser.AD: + case OpenSearchPPLParser.ML: + case OpenSearchPPLParser.FILLNULL: + case OpenSearchPPLParser.FLATTEN: + case OpenSearchPPLParser.TRENDLINE: + case OpenSearchPPLParser.TIMECHART: + case OpenSearchPPLParser.EXPAND: + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + case OpenSearchPPLParser.METHOD: + case OpenSearchPPLParser.MAX_SAMPLE_COUNT: + case OpenSearchPPLParser.BUFFER_LIMIT: + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.LEFT_HINT: + case OpenSearchPPLParser.RIGHT_HINT: + case OpenSearchPPLParser.SOURCE: + case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.A: + case OpenSearchPPLParser.ASC: + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DESC: + case OpenSearchPPLParser.DATASOURCES: + case OpenSearchPPLParser.USING: + case OpenSearchPPLParser.WITH: + case OpenSearchPPLParser.SIMPLE: + case OpenSearchPPLParser.STANDARD: + case OpenSearchPPLParser.COST: + case OpenSearchPPLParser.EXTENDED: + case OpenSearchPPLParser.OVERRIDE: + case OpenSearchPPLParser.AUTO: + case OpenSearchPPLParser.STR: + case OpenSearchPPLParser.NUM: + case OpenSearchPPLParser.SMA: + case OpenSearchPPLParser.WMA: + case OpenSearchPPLParser.KEEPEMPTY: + case OpenSearchPPLParser.CONSECUTIVE: + case OpenSearchPPLParser.DEDUP_SPLITVALUES: + case OpenSearchPPLParser.PARTITIONS: + case OpenSearchPPLParser.ALLNUM: + case OpenSearchPPLParser.DELIM: + case OpenSearchPPLParser.BUCKET_NULLABLE: + case OpenSearchPPLParser.CENTROIDS: + case OpenSearchPPLParser.ITERATIONS: + case OpenSearchPPLParser.DISTANCE_TYPE: + case OpenSearchPPLParser.NUMBER_OF_TREES: + case OpenSearchPPLParser.SHINGLE_SIZE: + case OpenSearchPPLParser.SAMPLE_SIZE: + case OpenSearchPPLParser.OUTPUT_AFTER: + case OpenSearchPPLParser.TIME_DECAY: + case OpenSearchPPLParser.ANOMALY_RATE: + case OpenSearchPPLParser.CATEGORY_FIELD: + case OpenSearchPPLParser.TIME_FIELD: + case OpenSearchPPLParser.TIME_ZONE: + case OpenSearchPPLParser.TRAINING_DATA_SIZE: + case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + case OpenSearchPPLParser.APPEND: + case OpenSearchPPLParser.COUNTFIELD: + case OpenSearchPPLParser.SHOWCOUNT: + case OpenSearchPPLParser.INPUT: + case OpenSearchPPLParser.OUTPUT: + case OpenSearchPPLParser.PATH: + case OpenSearchPPLParser.CASE: + case OpenSearchPPLParser.ELSE: + case OpenSearchPPLParser.IN: + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.GEOIP: + case OpenSearchPPLParser.REGEXP: + case OpenSearchPPLParser.REGEX_MATCH: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.DAY_HOUR: + case OpenSearchPPLParser.DAY_MICROSECOND: + case OpenSearchPPLParser.DAY_MINUTE: + case OpenSearchPPLParser.DAY_OF_YEAR: + case OpenSearchPPLParser.DAY_SECOND: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.HOUR_MICROSECOND: + case OpenSearchPPLParser.HOUR_MINUTE: + case OpenSearchPPLParser.HOUR_OF_DAY: + case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MINUTE_MICROSECOND: + case OpenSearchPPLParser.MINUTE_OF_DAY: + case OpenSearchPPLParser.MINUTE_OF_HOUR: + case OpenSearchPPLParser.MINUTE_SECOND: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.MONTH_OF_YEAR: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.SECOND_MICROSECOND: + case OpenSearchPPLParser.SECOND_OF_MINUTE: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.WEEK_OF_YEAR: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.LOOKUP: + case OpenSearchPPLParser.IP: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.ARROW: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT_APPROX: + case OpenSearchPPLParser.ESTDC: + case OpenSearchPPLParser.ESTDC_ERROR: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MEAN: + case OpenSearchPPLParser.MEDIAN: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.MODE: + case OpenSearchPPLParser.RANGE: + case OpenSearchPPLParser.STDEV: + case OpenSearchPPLParser.STDEVP: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.SUMSQ: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.PERCENTILE: + case OpenSearchPPLParser.PERCENTILE_APPROX: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: + case OpenSearchPPLParser.TAKE: + case OpenSearchPPLParser.LIST: + case OpenSearchPPLParser.VALUES: + case OpenSearchPPLParser.PER_DAY: + case OpenSearchPPLParser.PER_HOUR: + case OpenSearchPPLParser.PER_MINUTE: + case OpenSearchPPLParser.PER_SECOND: + case OpenSearchPPLParser.RATE: + case OpenSearchPPLParser.SPARKLINE: + case OpenSearchPPLParser.C: + case OpenSearchPPLParser.DC: + case OpenSearchPPLParser.ROW_NUMBER: + case OpenSearchPPLParser.RANK: + case OpenSearchPPLParser.DENSE_RANK: + case OpenSearchPPLParser.PERCENT_RANK: + case OpenSearchPPLParser.CUME_DIST: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.NTH: + case OpenSearchPPLParser.NTILE: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CBRT: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG_WITH_BASE: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POSITION: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.ADDTIME: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATEDIFF: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.DAY_OF_MONTH: + case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.EXTRACT: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.GET_FORMAT: + case OpenSearchPPLParser.LAST_DAY: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SEC_TO_TIME: + case OpenSearchPPLParser.STR_TO_DATE: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SUBTIME: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMEDIFF: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TIME_FORMAT: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.TO_SECONDS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.WEEKDAY: + case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.REVERSE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.BETWEEN: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + case OpenSearchPPLParser.JSON_VALID: + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.COALESCE: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: + case OpenSearchPPLParser.ANALYZE_WILDCARD: + case OpenSearchPPLParser.ANALYZER: + case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case OpenSearchPPLParser.BOOST: + case OpenSearchPPLParser.CUTOFF_FREQUENCY: + case OpenSearchPPLParser.DEFAULT_FIELD: + case OpenSearchPPLParser.DEFAULT_OPERATOR: + case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: + case OpenSearchPPLParser.ESCAPE: + case OpenSearchPPLParser.FLAGS: + case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: + case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: + case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: + case OpenSearchPPLParser.FUZZY_REWRITE: + case OpenSearchPPLParser.FUZZINESS: + case OpenSearchPPLParser.LENIENT: + case OpenSearchPPLParser.LOW_FREQ_OPERATOR: + case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: + case OpenSearchPPLParser.MAX_EXPANSIONS: + case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: + case OpenSearchPPLParser.OPERATOR: + case OpenSearchPPLParser.PHRASE_SLOP: + case OpenSearchPPLParser.PREFIX_LENGTH: + case OpenSearchPPLParser.QUOTE_ANALYZER: + case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: + case OpenSearchPPLParser.REWRITE: + case OpenSearchPPLParser.SLOP: + case OpenSearchPPLParser.TIE_BREAKER: + case OpenSearchPPLParser.TYPE: + case OpenSearchPPLParser.ZERO_TERMS_QUERY: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.SEC: + case OpenSearchPPLParser.SECS: + case OpenSearchPPLParser.SECONDS: + case OpenSearchPPLParser.MINS: + case OpenSearchPPLParser.MINUTES: + case OpenSearchPPLParser.HR: + case OpenSearchPPLParser.HRS: + case OpenSearchPPLParser.HOURS: + case OpenSearchPPLParser.DAYS: + case OpenSearchPPLParser.MON: + case OpenSearchPPLParser.MONTHS: + case OpenSearchPPLParser.US: + case OpenSearchPPLParser.CS: + case OpenSearchPPLParser.DS: + case OpenSearchPPLParser.PERCENTILE_SHORTCUT: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.CLUSTER: + case OpenSearchPPLParser.ID_DATE_SUFFIX: + case OpenSearchPPLParser.BQUOTA_STRING: + this.enterOuterAlt(localContext, 2); + { + this.state = 1181; + this.tableSourceClause(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public tableSourceClause(): TableSourceClauseContext { + let localContext = new TableSourceClauseContext(this.context, this.state); + this.enterRule(localContext, 178, OpenSearchPPLParser.RULE_tableSourceClause); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1184; + this.tableSource(); + this.state = 1189; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 1185; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1186; + this.tableSource(); + } + } + this.state = 1191; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1194; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 61) { + { + this.state = 1192; + this.match(OpenSearchPPLParser.AS); + this.state = 1193; + localContext._alias = this.qualifiedName(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public dynamicSourceClause(): DynamicSourceClauseContext { + let localContext = new DynamicSourceClauseContext(this.context, this.state); + this.enterRule(localContext, 180, OpenSearchPPLParser.RULE_dynamicSourceClause); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1196; + this.match(OpenSearchPPLParser.LT_SQR_PRTHS); + this.state = 1197; + this.sourceReferences(); + this.state = 1200; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 168) { + { + this.state = 1198; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1199; + this.sourceFilterArgs(); + } + } + + this.state = 1202; + this.match(OpenSearchPPLParser.RT_SQR_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sourceReferences(): SourceReferencesContext { + let localContext = new SourceReferencesContext(this.context, this.state); + this.enterRule(localContext, 182, OpenSearchPPLParser.RULE_sourceReferences); + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 1204; + this.sourceReference(); + this.state = 1209; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 104, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 1205; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1206; + this.sourceReference(); + } + } + } + this.state = 1211; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 104, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sourceReference(): SourceReferenceContext { + let localContext = new SourceReferenceContext(this.context, this.state); + this.enterRule(localContext, 184, OpenSearchPPLParser.RULE_sourceReference); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1213; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 456) { + { + this.state = 1212; + this.match(OpenSearchPPLParser.CLUSTER); + } + } + + this.state = 1215; + this.wcQualifiedName(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sourceFilterArgs(): SourceFilterArgsContext { + let localContext = new SourceFilterArgsContext(this.context, this.state); + this.enterRule(localContext, 186, OpenSearchPPLParser.RULE_sourceFilterArgs); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1217; + this.sourceFilterArg(); + this.state = 1222; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 1218; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1219; + this.sourceFilterArg(); + } + } + this.state = 1224; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sourceFilterArg(): SourceFilterArgContext { + let localContext = new SourceFilterArgContext(this.context, this.state); + this.enterRule(localContext, 188, OpenSearchPPLParser.RULE_sourceFilterArg); + try { + this.state = 1233; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 107, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1225; + this.ident(); + this.state = 1226; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1227; + this.literalValue(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1229; + this.ident(); + this.state = 1230; + this.match(OpenSearchPPLParser.IN); + this.state = 1231; + this.valueList(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public joinCommand(): JoinCommandContext { + let localContext = new JoinCommandContext(this.context, this.state); + this.enterRule(localContext, 190, OpenSearchPPLParser.RULE_joinCommand); + let _la: number; + try { + let alternative: number; + this.state = 1263; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 113, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1235; + this.match(OpenSearchPPLParser.JOIN); + this.state = 1239; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 108, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 1236; + this.joinOption(); + } + } + } + this.state = 1241; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 108, this.context); + } + this.state = 1243; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 109, this.context) ) { + case 1: + { + this.state = 1242; + this.fieldList(); + } + break; + } + this.state = 1245; + localContext._right = this.tableOrSubqueryClause(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1247; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 53)) & ~0x1F) === 0 && ((1 << (_la - 53)) & 63) !== 0) || _la === 351 || _la === 352) { + { + this.state = 1246; + this.sqlLikeJoinType(); + } + } + + this.state = 1249; + this.match(OpenSearchPPLParser.JOIN); + this.state = 1253; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 77 || _la === 203 || _la === 425) { + { + { + this.state = 1250; + this.joinOption(); + } + } + this.state = 1255; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1256; + this.sideAlias(); + this.state = 1258; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 59 || _la === 60) { + { + this.state = 1257; + this.joinHintList(); + } + } + + this.state = 1260; + this.joinCriteria(); + this.state = 1261; + localContext._right = this.tableOrSubqueryClause(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sqlLikeJoinType(): SqlLikeJoinTypeContext { + let localContext = new SqlLikeJoinTypeContext(this.context, this.state); + this.enterRule(localContext, 192, OpenSearchPPLParser.RULE_sqlLikeJoinType); + let _la: number; + try { + this.state = 1290; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 120, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1265; + this.match(OpenSearchPPLParser.INNER); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1266; + this.match(OpenSearchPPLParser.CROSS); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 1272; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.LEFT: + { + this.state = 1267; + this.match(OpenSearchPPLParser.LEFT); + this.state = 1269; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 54) { + { + this.state = 1268; + this.match(OpenSearchPPLParser.OUTER); + } + } + + } + break; + case OpenSearchPPLParser.OUTER: + { + this.state = 1271; + this.match(OpenSearchPPLParser.OUTER); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 1274; + this.match(OpenSearchPPLParser.RIGHT); + this.state = 1276; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 54) { + { + this.state = 1275; + this.match(OpenSearchPPLParser.OUTER); + } + } + + } + break; + case 5: + this.enterOuterAlt(localContext, 5); + { + this.state = 1278; + this.match(OpenSearchPPLParser.FULL); + this.state = 1280; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 54) { + { + this.state = 1279; + this.match(OpenSearchPPLParser.OUTER); + } + } + + } + break; + case 6: + this.enterOuterAlt(localContext, 6); + { + this.state = 1283; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 352) { + { + this.state = 1282; + this.match(OpenSearchPPLParser.LEFT); + } + } + + this.state = 1285; + this.match(OpenSearchPPLParser.SEMI); + } + break; + case 7: + this.enterOuterAlt(localContext, 7); + { + this.state = 1287; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 352) { + { + this.state = 1286; + this.match(OpenSearchPPLParser.LEFT); + } + } + + this.state = 1289; + this.match(OpenSearchPPLParser.ANTI); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public joinType(): JoinTypeContext { + let localContext = new JoinTypeContext(this.context, this.state); + this.enterRule(localContext, 194, OpenSearchPPLParser.RULE_joinType); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1292; + _la = this.tokenStream.LA(1); + if(!(((((_la - 53)) & ~0x1F) === 0 && ((1 << (_la - 53)) & 63) !== 0) || _la === 351 || _la === 352)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sideAlias(): SideAliasContext { + let localContext = new SideAliasContext(this.context, this.state); + this.enterRule(localContext, 196, OpenSearchPPLParser.RULE_sideAlias); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1297; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 352) { + { + this.state = 1294; + this.match(OpenSearchPPLParser.LEFT); + this.state = 1295; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1296; + localContext._leftAlias = this.qualifiedName(); + } + } + + this.state = 1300; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 168) { + { + this.state = 1299; + this.match(OpenSearchPPLParser.COMMA); + } + } + + this.state = 1305; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 351) { + { + this.state = 1302; + this.match(OpenSearchPPLParser.RIGHT); + this.state = 1303; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1304; + localContext._rightAlias = this.qualifiedName(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public joinCriteria(): JoinCriteriaContext { + let localContext = new JoinCriteriaContext(this.context, this.state); + this.enterRule(localContext, 198, OpenSearchPPLParser.RULE_joinCriteria); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1307; + _la = this.tokenStream.LA(1); + if(!(_la === 7 || _la === 52)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1308; + this.logicalExpression(0); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public joinHintList(): JoinHintListContext { + let localContext = new JoinHintListContext(this.context, this.state); + this.enterRule(localContext, 200, OpenSearchPPLParser.RULE_joinHintList); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1310; + this.hintPair(); + this.state = 1317; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 59 || _la === 60 || _la === 168) { + { + { + this.state = 1312; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 168) { + { + this.state = 1311; + this.match(OpenSearchPPLParser.COMMA); + } + } + + this.state = 1314; + this.hintPair(); + } + } + this.state = 1319; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public hintPair(): HintPairContext { + let localContext = new HintPairContext(this.context, this.state); + this.enterRule(localContext, 202, OpenSearchPPLParser.RULE_hintPair); + try { + this.state = 1330; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.LEFT_HINT: + localContext = new LeftHintContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 1320; + (localContext as LeftHintContext)._leftHintKey = this.match(OpenSearchPPLParser.LEFT_HINT); + this.state = 1321; + this.match(OpenSearchPPLParser.DOT); + this.state = 1322; + this.match(OpenSearchPPLParser.ID); + this.state = 1323; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1324; + (localContext as LeftHintContext)._leftHintValue = this.ident(); + } + break; + case OpenSearchPPLParser.RIGHT_HINT: + localContext = new RightHintContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 1325; + (localContext as RightHintContext)._rightHintKey = this.match(OpenSearchPPLParser.RIGHT_HINT); + this.state = 1326; + this.match(OpenSearchPPLParser.DOT); + this.state = 1327; + this.match(OpenSearchPPLParser.ID); + this.state = 1328; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1329; + (localContext as RightHintContext)._rightHintValue = this.ident(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public joinOption(): JoinOptionContext { + let localContext = new JoinOptionContext(this.context, this.state); + this.enterRule(localContext, 204, OpenSearchPPLParser.RULE_joinOption); + try { + this.state = 1341; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.OVERWRITE: + localContext = new OverwriteOptionContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 1332; + this.match(OpenSearchPPLParser.OVERWRITE); + this.state = 1333; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1334; + this.booleanLiteral(); + } + break; + case OpenSearchPPLParser.TYPE: + localContext = new TypeOptionContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 1335; + this.match(OpenSearchPPLParser.TYPE); + this.state = 1336; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1337; + this.joinType(); + } + break; + case OpenSearchPPLParser.MAX: + localContext = new MaxOptionContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 1338; + this.match(OpenSearchPPLParser.MAX); + this.state = 1339; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1340; + this.integerLiteral(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public renameClasue(): RenameClasueContext { + let localContext = new RenameClasueContext(this.context, this.state); + this.enterRule(localContext, 206, OpenSearchPPLParser.RULE_renameClasue); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1343; + localContext._orignalField = this.renameFieldExpression(); + this.state = 1344; + this.match(OpenSearchPPLParser.AS); + this.state = 1345; + localContext._renamedField = this.renameFieldExpression(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public byClause(): ByClauseContext { + let localContext = new ByClauseContext(this.context, this.state); + this.enterRule(localContext, 208, OpenSearchPPLParser.RULE_byClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1347; + this.match(OpenSearchPPLParser.BY); + this.state = 1348; + this.fieldList(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public statsByClause(): StatsByClauseContext { + let localContext = new StatsByClauseContext(this.context, this.state); + this.enterRule(localContext, 210, OpenSearchPPLParser.RULE_statsByClause); + try { + this.state = 1364; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 128, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1350; + this.match(OpenSearchPPLParser.BY); + this.state = 1351; + this.fieldList(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1352; + this.match(OpenSearchPPLParser.BY); + this.state = 1353; + this.bySpanClause(); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 1354; + this.match(OpenSearchPPLParser.BY); + this.state = 1355; + this.bySpanClause(); + this.state = 1356; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1357; + this.fieldList(); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 1359; + this.match(OpenSearchPPLParser.BY); + this.state = 1360; + this.fieldList(); + this.state = 1361; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1362; + this.bySpanClause(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public bySpanClause(): BySpanClauseContext { + let localContext = new BySpanClauseContext(this.context, this.state); + this.enterRule(localContext, 212, OpenSearchPPLParser.RULE_bySpanClause); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1366; + this.spanClause(); + this.state = 1369; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 61) { + { + this.state = 1367; + this.match(OpenSearchPPLParser.AS); + this.state = 1368; + localContext._alias = this.qualifiedName(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public spanClause(): SpanClauseContext { + let localContext = new SpanClauseContext(this.context, this.state); + this.enterRule(localContext, 214, OpenSearchPPLParser.RULE_spanClause); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1371; + this.match(OpenSearchPPLParser.SPAN); + this.state = 1372; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1373; + this.fieldExpression(); + this.state = 1374; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1375; + localContext._value = this.literalValue(); + this.state = 1377; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 67 || ((((_la - 127)) & ~0x1F) === 0 && ((1 << (_la - 127)) & 174612545) !== 0) || ((((_la - 433)) & ~0x1F) === 0 && ((1 << (_la - 433)) & 2097151) !== 0)) { + { + this.state = 1376; + localContext._unit = this.timespanUnit(); + } + } + + this.state = 1379; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sortbyClause(): SortbyClauseContext { + let localContext = new SortbyClauseContext(this.context, this.state); + this.enterRule(localContext, 216, OpenSearchPPLParser.RULE_sortbyClause); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1381; + this.sortField(); + this.state = 1386; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 1382; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1383; + this.sortField(); + } + } + this.state = 1388; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public evalClause(): EvalClauseContext { + let localContext = new EvalClauseContext(this.context, this.state); + this.enterRule(localContext, 218, OpenSearchPPLParser.RULE_evalClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1389; + this.fieldExpression(); + this.state = 1390; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1391; + this.logicalExpression(0); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public eventstatsAggTerm(): EventstatsAggTermContext { + let localContext = new EventstatsAggTermContext(this.context, this.state); + this.enterRule(localContext, 220, OpenSearchPPLParser.RULE_eventstatsAggTerm); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1393; + this.windowFunction(); + this.state = 1396; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 61) { + { + this.state = 1394; + this.match(OpenSearchPPLParser.AS); + this.state = 1395; + localContext._alias = this.wcFieldExpression(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public windowFunction(): WindowFunctionContext { + let localContext = new WindowFunctionContext(this.context, this.state); + this.enterRule(localContext, 222, OpenSearchPPLParser.RULE_windowFunction); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1398; + this.windowFunctionName(); + this.state = 1399; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1400; + this.functionArgs(); + this.state = 1401; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public windowFunctionName(): WindowFunctionNameContext { + let localContext = new WindowFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 224, OpenSearchPPLParser.RULE_windowFunctionName); + try { + this.state = 1405; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 133, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1403; + this.statsFunctionName(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1404; + this.scalarWindowFunctionName(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public scalarWindowFunctionName(): ScalarWindowFunctionNameContext { + let localContext = new ScalarWindowFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 226, OpenSearchPPLParser.RULE_scalarWindowFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1407; + _la = this.tokenStream.LA(1); + if(!(_la === 199 || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 1023) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public statsAggTerm(): StatsAggTermContext { + let localContext = new StatsAggTermContext(this.context, this.state); + this.enterRule(localContext, 228, OpenSearchPPLParser.RULE_statsAggTerm); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1409; + this.statsFunction(); + this.state = 1412; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 61) { + { + this.state = 1410; + this.match(OpenSearchPPLParser.AS); + this.state = 1411; + localContext._alias = this.wcFieldExpression(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public statsFunction(): StatsFunctionContext { + let localContext = new StatsFunctionContext(this.context, this.state); + this.enterRule(localContext, 230, OpenSearchPPLParser.RULE_statsFunction); + let _la: number; + try { + this.state = 1441; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 136, this.context) ) { + case 1: + localContext = new CountEvalFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 1414; + _la = this.tokenStream.LA(1); + if(!(_la === 198 || _la === 231)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1415; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1416; + this.evalExpression(); + this.state = 1417; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + case 2: + localContext = new CountAllFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 1419; + _la = this.tokenStream.LA(1); + if(!(_la === 198 || _la === 231)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1422; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 184) { + { + this.state = 1420; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1421; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + + } + break; + case 3: + localContext = new PercentileShortcutFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 1424; + this.match(OpenSearchPPLParser.PERCENTILE_SHORTCUT); + this.state = 1425; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1426; + this.valueExpression(0); + this.state = 1427; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + case 4: + localContext = new DistinctCountFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 1429; + _la = this.tokenStream.LA(1); + if(!(_la === 199 || _la === 200 || _la === 232)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1430; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1431; + this.valueExpression(0); + this.state = 1432; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + case 5: + localContext = new TakeAggFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 5); + { + this.state = 1434; + this.takeAggFunction(); + } + break; + case 6: + localContext = new PercentileApproxFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 6); + { + this.state = 1435; + this.percentileApproxFunction(); + } + break; + case 7: + localContext = new StatsFunctionCallContext(localContext); + this.enterOuterAlt(localContext, 7); + { + this.state = 1436; + this.statsFunctionName(); + this.state = 1437; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1438; + this.functionArgs(); + this.state = 1439; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public statsFunctionName(): StatsFunctionNameContext { + let localContext = new StatsFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 232, OpenSearchPPLParser.RULE_statsFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1443; + _la = this.tokenStream.LA(1); + if(!(((((_la - 197)) & ~0x1F) === 0 && ((1 << (_la - 197)) & 99566403) !== 0) || _la === 238 || _la === 239)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public takeAggFunction(): TakeAggFunctionContext { + let localContext = new TakeAggFunctionContext(this.context, this.state); + this.enterRule(localContext, 234, OpenSearchPPLParser.RULE_takeAggFunction); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1445; + this.match(OpenSearchPPLParser.TAKE); + this.state = 1446; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1447; + this.fieldExpression(); + this.state = 1450; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 168) { + { + this.state = 1448; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1449; + localContext._size = this.integerLiteral(); + } + } + + this.state = 1452; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public percentileApproxFunction(): PercentileApproxFunctionContext { + let localContext = new PercentileApproxFunctionContext(this.context, this.state); + this.enterRule(localContext, 236, OpenSearchPPLParser.RULE_percentileApproxFunction); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1454; + _la = this.tokenStream.LA(1); + if(!(_la === 218 || _la === 219)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1455; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1456; + localContext._aggField = this.valueExpression(0); + this.state = 1457; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1458; + localContext._percent = this.numericLiteral(); + this.state = 1461; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 168) { + { + this.state = 1459; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1460; + localContext._compression = this.numericLiteral(); + } + } + + this.state = 1463; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public numericLiteral(): NumericLiteralContext { + let localContext = new NumericLiteralContext(this.context, this.state); + this.enterRule(localContext, 238, OpenSearchPPLParser.RULE_numericLiteral); + try { + this.state = 1469; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 139, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1465; + this.integerLiteral(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1466; + this.decimalLiteral(); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 1467; + this.doubleLiteral(); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 1468; + this.floatLiteral(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + + public logicalExpression(): LogicalExpressionContext; + public logicalExpression(_p: number): LogicalExpressionContext; + public logicalExpression(_p?: number): LogicalExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new LogicalExpressionContext(this.context, parentState); + let previousContext = localContext; + let _startState = 240; + this.enterRecursionRule(localContext, 240, OpenSearchPPLParser.RULE_logicalExpression, _p); + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 1475; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.NOT: + { + localContext = new LogicalNotContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 1472; + this.match(OpenSearchPPLParser.NOT); + this.state = 1473; + this.logicalExpression(5); + } + break; + case OpenSearchPPLParser.SEARCH: + case OpenSearchPPLParser.DESCRIBE: + case OpenSearchPPLParser.SHOW: + case OpenSearchPPLParser.EXPLAIN: + case OpenSearchPPLParser.FROM: + case OpenSearchPPLParser.WHERE: + case OpenSearchPPLParser.FIELDS: + case OpenSearchPPLParser.TABLE: + case OpenSearchPPLParser.RENAME: + case OpenSearchPPLParser.STATS: + case OpenSearchPPLParser.EVENTSTATS: + case OpenSearchPPLParser.DEDUP: + case OpenSearchPPLParser.SORT: + case OpenSearchPPLParser.EVAL: + case OpenSearchPPLParser.HEAD: + case OpenSearchPPLParser.BIN: + case OpenSearchPPLParser.TOP: + case OpenSearchPPLParser.RARE: + case OpenSearchPPLParser.PARSE: + case OpenSearchPPLParser.REGEX: + case OpenSearchPPLParser.REX: + case OpenSearchPPLParser.PUNCT: + case OpenSearchPPLParser.GROK: + case OpenSearchPPLParser.PATTERN: + case OpenSearchPPLParser.PATTERNS: + case OpenSearchPPLParser.NEW_FIELD: + case OpenSearchPPLParser.KMEANS: + case OpenSearchPPLParser.AD: + case OpenSearchPPLParser.ML: + case OpenSearchPPLParser.FILLNULL: + case OpenSearchPPLParser.FLATTEN: + case OpenSearchPPLParser.TRENDLINE: + case OpenSearchPPLParser.TIMECHART: + case OpenSearchPPLParser.EXPAND: + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + case OpenSearchPPLParser.METHOD: + case OpenSearchPPLParser.MAX_SAMPLE_COUNT: + case OpenSearchPPLParser.BUFFER_LIMIT: + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.LEFT_HINT: + case OpenSearchPPLParser.RIGHT_HINT: + case OpenSearchPPLParser.SOURCE: + case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.A: + case OpenSearchPPLParser.ASC: + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DESC: + case OpenSearchPPLParser.DATASOURCES: + case OpenSearchPPLParser.USING: + case OpenSearchPPLParser.WITH: + case OpenSearchPPLParser.SIMPLE: + case OpenSearchPPLParser.STANDARD: + case OpenSearchPPLParser.COST: + case OpenSearchPPLParser.EXTENDED: + case OpenSearchPPLParser.OVERRIDE: + case OpenSearchPPLParser.AUTO: + case OpenSearchPPLParser.STR: + case OpenSearchPPLParser.NUM: + case OpenSearchPPLParser.SMA: + case OpenSearchPPLParser.WMA: + case OpenSearchPPLParser.KEEPEMPTY: + case OpenSearchPPLParser.CONSECUTIVE: + case OpenSearchPPLParser.DEDUP_SPLITVALUES: + case OpenSearchPPLParser.PARTITIONS: + case OpenSearchPPLParser.ALLNUM: + case OpenSearchPPLParser.DELIM: + case OpenSearchPPLParser.BUCKET_NULLABLE: + case OpenSearchPPLParser.CENTROIDS: + case OpenSearchPPLParser.ITERATIONS: + case OpenSearchPPLParser.DISTANCE_TYPE: + case OpenSearchPPLParser.NUMBER_OF_TREES: + case OpenSearchPPLParser.SHINGLE_SIZE: + case OpenSearchPPLParser.SAMPLE_SIZE: + case OpenSearchPPLParser.OUTPUT_AFTER: + case OpenSearchPPLParser.TIME_DECAY: + case OpenSearchPPLParser.ANOMALY_RATE: + case OpenSearchPPLParser.CATEGORY_FIELD: + case OpenSearchPPLParser.TIME_FIELD: + case OpenSearchPPLParser.TIME_ZONE: + case OpenSearchPPLParser.TRAINING_DATA_SIZE: + case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + case OpenSearchPPLParser.APPEND: + case OpenSearchPPLParser.COUNTFIELD: + case OpenSearchPPLParser.SHOWCOUNT: + case OpenSearchPPLParser.INPUT: + case OpenSearchPPLParser.OUTPUT: + case OpenSearchPPLParser.PATH: + case OpenSearchPPLParser.CASE: + case OpenSearchPPLParser.ELSE: + case OpenSearchPPLParser.IN: + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.GEOIP: + case OpenSearchPPLParser.TRUE: + case OpenSearchPPLParser.FALSE: + case OpenSearchPPLParser.REGEXP: + case OpenSearchPPLParser.REGEX_MATCH: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.DAY_HOUR: + case OpenSearchPPLParser.DAY_MICROSECOND: + case OpenSearchPPLParser.DAY_MINUTE: + case OpenSearchPPLParser.DAY_OF_YEAR: + case OpenSearchPPLParser.DAY_SECOND: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.HOUR_MICROSECOND: + case OpenSearchPPLParser.HOUR_MINUTE: + case OpenSearchPPLParser.HOUR_OF_DAY: + case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MINUTE_MICROSECOND: + case OpenSearchPPLParser.MINUTE_OF_DAY: + case OpenSearchPPLParser.MINUTE_OF_HOUR: + case OpenSearchPPLParser.MINUTE_SECOND: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.MONTH_OF_YEAR: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.SECOND_MICROSECOND: + case OpenSearchPPLParser.SECOND_OF_MINUTE: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.WEEK_OF_YEAR: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.LOOKUP: + case OpenSearchPPLParser.IP: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.LT_PRTHS: + case OpenSearchPPLParser.LT_SQR_PRTHS: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.ARROW: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT_APPROX: + case OpenSearchPPLParser.ESTDC: + case OpenSearchPPLParser.ESTDC_ERROR: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MEAN: + case OpenSearchPPLParser.MEDIAN: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.MODE: + case OpenSearchPPLParser.RANGE: + case OpenSearchPPLParser.STDEV: + case OpenSearchPPLParser.STDEVP: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.SUMSQ: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.PERCENTILE: + case OpenSearchPPLParser.PERCENTILE_APPROX: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: + case OpenSearchPPLParser.TAKE: + case OpenSearchPPLParser.LIST: + case OpenSearchPPLParser.VALUES: + case OpenSearchPPLParser.PER_DAY: + case OpenSearchPPLParser.PER_HOUR: + case OpenSearchPPLParser.PER_MINUTE: + case OpenSearchPPLParser.PER_SECOND: + case OpenSearchPPLParser.RATE: + case OpenSearchPPLParser.SPARKLINE: + case OpenSearchPPLParser.C: + case OpenSearchPPLParser.DC: + case OpenSearchPPLParser.ROW_NUMBER: + case OpenSearchPPLParser.RANK: + case OpenSearchPPLParser.DENSE_RANK: + case OpenSearchPPLParser.PERCENT_RANK: + case OpenSearchPPLParser.CUME_DIST: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.NTH: + case OpenSearchPPLParser.NTILE: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CBRT: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG_WITH_BASE: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POSITION: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.ADDTIME: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATEDIFF: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.DAY_OF_MONTH: + case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.EXTRACT: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.GET_FORMAT: + case OpenSearchPPLParser.LAST_DAY: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SEC_TO_TIME: + case OpenSearchPPLParser.STR_TO_DATE: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SUBTIME: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMEDIFF: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TIMESTAMPADD: + case OpenSearchPPLParser.TIMESTAMPDIFF: + case OpenSearchPPLParser.TIME_FORMAT: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.TO_SECONDS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.WEEKDAY: + case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.REVERSE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.BETWEEN: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + case OpenSearchPPLParser.JSON_VALID: + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.COALESCE: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: + case OpenSearchPPLParser.ANALYZE_WILDCARD: + case OpenSearchPPLParser.ANALYZER: + case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case OpenSearchPPLParser.BOOST: + case OpenSearchPPLParser.CUTOFF_FREQUENCY: + case OpenSearchPPLParser.DEFAULT_FIELD: + case OpenSearchPPLParser.DEFAULT_OPERATOR: + case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: + case OpenSearchPPLParser.ESCAPE: + case OpenSearchPPLParser.FLAGS: + case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: + case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: + case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: + case OpenSearchPPLParser.FUZZY_REWRITE: + case OpenSearchPPLParser.FUZZINESS: + case OpenSearchPPLParser.LENIENT: + case OpenSearchPPLParser.LOW_FREQ_OPERATOR: + case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: + case OpenSearchPPLParser.MAX_EXPANSIONS: + case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: + case OpenSearchPPLParser.OPERATOR: + case OpenSearchPPLParser.PHRASE_SLOP: + case OpenSearchPPLParser.PREFIX_LENGTH: + case OpenSearchPPLParser.QUOTE_ANALYZER: + case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: + case OpenSearchPPLParser.REWRITE: + case OpenSearchPPLParser.SLOP: + case OpenSearchPPLParser.TIE_BREAKER: + case OpenSearchPPLParser.TYPE: + case OpenSearchPPLParser.ZERO_TERMS_QUERY: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.SEC: + case OpenSearchPPLParser.SECS: + case OpenSearchPPLParser.SECONDS: + case OpenSearchPPLParser.MINS: + case OpenSearchPPLParser.MINUTES: + case OpenSearchPPLParser.HR: + case OpenSearchPPLParser.HRS: + case OpenSearchPPLParser.HOURS: + case OpenSearchPPLParser.DAYS: + case OpenSearchPPLParser.MON: + case OpenSearchPPLParser.MONTHS: + case OpenSearchPPLParser.US: + case OpenSearchPPLParser.CS: + case OpenSearchPPLParser.DS: + case OpenSearchPPLParser.PERCENTILE_SHORTCUT: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.INTEGER_LITERAL: + case OpenSearchPPLParser.DECIMAL_LITERAL: + case OpenSearchPPLParser.FLOAT_LITERAL: + case OpenSearchPPLParser.DOUBLE_LITERAL: + case OpenSearchPPLParser.DQUOTA_STRING: + case OpenSearchPPLParser.SQUOTA_STRING: + case OpenSearchPPLParser.BQUOTA_STRING: + { + localContext = new LogicalExprContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 1474; + this.expression(0); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 1488; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 142, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + this.state = 1486; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 141, this.context) ) { + case 1: + { + localContext = new LogicalAndContext(new LogicalExpressionContext(parentContext, parentState)); + (localContext as LogicalAndContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_logicalExpression); + this.state = 1477; + if (!(this.precpred(this.context, 4))) { + throw this.createFailedPredicateException("this.precpred(this.context, 4)"); + } + this.state = 1478; + this.match(OpenSearchPPLParser.AND); + this.state = 1479; + (localContext as LogicalAndContext)._right = this.logicalExpression(5); + } + break; + case 2: + { + localContext = new LogicalXorContext(new LogicalExpressionContext(parentContext, parentState)); + (localContext as LogicalXorContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_logicalExpression); + this.state = 1480; + if (!(this.precpred(this.context, 3))) { + throw this.createFailedPredicateException("this.precpred(this.context, 3)"); + } + this.state = 1481; + this.match(OpenSearchPPLParser.XOR); + this.state = 1482; + (localContext as LogicalXorContext)._right = this.logicalExpression(4); + } + break; + case 3: + { + localContext = new LogicalOrContext(new LogicalExpressionContext(parentContext, parentState)); + (localContext as LogicalOrContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_logicalExpression); + this.state = 1483; + if (!(this.precpred(this.context, 2))) { + throw this.createFailedPredicateException("this.precpred(this.context, 2)"); + } + this.state = 1484; + this.match(OpenSearchPPLParser.OR); + this.state = 1485; + (localContext as LogicalOrContext)._right = this.logicalExpression(3); + } + break; + } + } + } + this.state = 1490; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 142, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + + public expression(): ExpressionContext; + public expression(_p: number): ExpressionContext; + public expression(_p?: number): ExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new ExpressionContext(this.context, parentState); + let previousContext = localContext; + let _startState = 242; + this.enterRecursionRule(localContext, 242, OpenSearchPPLParser.RULE_expression, _p); + let _la: number; + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 1494; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 143, this.context) ) { + case 1: + { + localContext = new ValueExprContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 1492; + this.valueExpression(0); + } + break; + case 2: + { + localContext = new RelevanceExprContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 1493; + this.relevanceExpression(); + } + break; + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 1517; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 147, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + this.state = 1515; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 146, this.context) ) { + case 1: + { + localContext = new CompareExprContext(new ExpressionContext(parentContext, parentState)); + (localContext as CompareExprContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_expression); + this.state = 1496; + if (!(this.precpred(this.context, 3))) { + throw this.createFailedPredicateException("this.precpred(this.context, 3)"); + } + this.state = 1497; + this.comparisonOperator(); + this.state = 1498; + (localContext as CompareExprContext)._right = this.expression(4); + } + break; + case 2: + { + localContext = new BetweenContext(new ExpressionContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_expression); + this.state = 1500; + if (!(this.precpred(this.context, 1))) { + throw this.createFailedPredicateException("this.precpred(this.context, 1)"); + } + this.state = 1502; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 117) { + { + this.state = 1501; + this.match(OpenSearchPPLParser.NOT); + } + } + + this.state = 1504; + this.match(OpenSearchPPLParser.BETWEEN); + this.state = 1505; + this.expression(0); + this.state = 1506; + this.match(OpenSearchPPLParser.AND); + this.state = 1507; + this.expression(2); + } + break; + case 3: + { + localContext = new InExprContext(new ExpressionContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_expression); + this.state = 1509; + if (!(this.precpred(this.context, 2))) { + throw this.createFailedPredicateException("this.precpred(this.context, 2)"); + } + this.state = 1511; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 117) { + { + this.state = 1510; + this.match(OpenSearchPPLParser.NOT); + } + } + + this.state = 1513; + this.match(OpenSearchPPLParser.IN); + this.state = 1514; + this.valueList(); + } + break; + } + } + } + this.state = 1519; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 147, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + + public valueExpression(): ValueExpressionContext; + public valueExpression(_p: number): ValueExpressionContext; + public valueExpression(_p?: number): ValueExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new ValueExpressionContext(this.context, parentState); + let previousContext = localContext; + let _startState = 244; + this.enterRecursionRule(localContext, 244, OpenSearchPPLParser.RULE_valueExpression, _p); + let _la: number; + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 1556; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 150, this.context) ) { + case 1: + { + localContext = new LiteralValueExprContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 1521; + this.literalValue(); + } + break; + case 2: + { + localContext = new FunctionCallExprContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 1522; + this.functionCall(); + } + break; + case 3: + { + localContext = new LambdaExprContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 1523; + this.lambda(); + } + break; + case 4: + { + localContext = new ScalarSubqueryExprContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 1524; + this.match(OpenSearchPPLParser.LT_SQR_PRTHS); + this.state = 1525; + this.subSearch(); + this.state = 1526; + this.match(OpenSearchPPLParser.RT_SQR_PRTHS); + } + break; + case 5: + { + localContext = new InSubqueryExprContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 1528; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1529; + this.valueExpression(0); + this.state = 1534; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 1530; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1531; + this.valueExpression(0); + } + } + this.state = 1536; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1537; + this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 1539; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 117) { + { + this.state = 1538; + this.match(OpenSearchPPLParser.NOT); + } + } + + this.state = 1541; + this.match(OpenSearchPPLParser.IN); + this.state = 1542; + this.match(OpenSearchPPLParser.LT_SQR_PRTHS); + this.state = 1543; + this.subSearch(); + this.state = 1544; + this.match(OpenSearchPPLParser.RT_SQR_PRTHS); + } + break; + case 6: + { + localContext = new ExistsSubqueryExprContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 1546; + this.match(OpenSearchPPLParser.EXISTS); + this.state = 1547; + this.match(OpenSearchPPLParser.LT_SQR_PRTHS); + this.state = 1548; + this.subSearch(); + this.state = 1549; + this.match(OpenSearchPPLParser.RT_SQR_PRTHS); + } + break; + case 7: + { + localContext = new FieldExprContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 1551; + this.fieldExpression(); + } + break; + case 8: + { + localContext = new NestedValueExprContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 1552; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1553; + this.logicalExpression(0); + this.state = 1554; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 1575; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 153, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + this.state = 1573; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 152, this.context) ) { + case 1: + { + localContext = new BinaryArithmeticContext(new ValueExpressionContext(parentContext, parentState)); + (localContext as BinaryArithmeticContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_valueExpression); + this.state = 1558; + if (!(this.precpred(this.context, 11))) { + throw this.createFailedPredicateException("this.precpred(this.context, 11)"); + } + this.state = 1559; + (localContext as BinaryArithmeticContext)._binaryOperator = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(((((_la - 179)) & ~0x1F) === 0 && ((1 << (_la - 179)) & 7) !== 0))) { + (localContext as BinaryArithmeticContext)._binaryOperator = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1560; + (localContext as BinaryArithmeticContext)._right = this.valueExpression(12); + } + break; + case 2: + { + localContext = new BinaryArithmeticContext(new ValueExpressionContext(parentContext, parentState)); + (localContext as BinaryArithmeticContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_valueExpression); + this.state = 1561; + if (!(this.precpred(this.context, 10))) { + throw this.createFailedPredicateException("this.precpred(this.context, 10)"); + } + this.state = 1562; + (localContext as BinaryArithmeticContext)._binaryOperator = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 177 || _la === 178)) { + (localContext as BinaryArithmeticContext)._binaryOperator = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1563; + (localContext as BinaryArithmeticContext)._right = this.valueExpression(11); + } + break; + case 3: + { + localContext = new InSubqueryExprContext(new ValueExpressionContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, OpenSearchPPLParser.RULE_valueExpression); + this.state = 1564; + if (!(this.precpred(this.context, 5))) { + throw this.createFailedPredicateException("this.precpred(this.context, 5)"); + } + this.state = 1566; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 117) { + { + this.state = 1565; + this.match(OpenSearchPPLParser.NOT); + } + } + + this.state = 1568; + this.match(OpenSearchPPLParser.IN); + this.state = 1569; + this.match(OpenSearchPPLParser.LT_SQR_PRTHS); + this.state = 1570; + this.subSearch(); + this.state = 1571; + this.match(OpenSearchPPLParser.RT_SQR_PRTHS); + } + break; + } + } + } + this.state = 1577; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 153, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + public evalExpression(): EvalExpressionContext { + let localContext = new EvalExpressionContext(this.context, this.state); + this.enterRule(localContext, 246, OpenSearchPPLParser.RULE_evalExpression); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1578; + this.match(OpenSearchPPLParser.EVAL); + this.state = 1579; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1580; + this.logicalExpression(0); + this.state = 1581; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public functionCall(): FunctionCallContext { + let localContext = new FunctionCallContext(this.context, this.state); + this.enterRule(localContext, 248, OpenSearchPPLParser.RULE_functionCall); + try { + this.state = 1590; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 154, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1583; + this.evalFunctionCall(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1584; + this.dataTypeFunctionCall(); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 1585; + this.positionFunctionCall(); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 1586; + this.caseFunctionCall(); + } + break; + case 5: + this.enterOuterAlt(localContext, 5); + { + this.state = 1587; + this.timestampFunctionCall(); + } + break; + case 6: + this.enterOuterAlt(localContext, 6); + { + this.state = 1588; + this.extractFunctionCall(); + } + break; + case 7: + this.enterOuterAlt(localContext, 7); + { + this.state = 1589; + this.getFormatFunctionCall(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public positionFunctionCall(): PositionFunctionCallContext { + let localContext = new PositionFunctionCallContext(this.context, this.state); + this.enterRule(localContext, 250, OpenSearchPPLParser.RULE_positionFunctionCall); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1592; + this.positionFunctionName(); + this.state = 1593; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1594; + this.functionArg(); + this.state = 1595; + this.match(OpenSearchPPLParser.IN); + this.state = 1596; + this.functionArg(); + this.state = 1597; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public caseFunctionCall(): CaseFunctionCallContext { + let localContext = new CaseFunctionCallContext(this.context, this.state); + this.enterRule(localContext, 252, OpenSearchPPLParser.RULE_caseFunctionCall); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1599; + this.match(OpenSearchPPLParser.CASE); + this.state = 1600; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1601; + this.logicalExpression(0); + this.state = 1602; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1603; + this.valueExpression(0); + this.state = 1611; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 1604; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1605; + this.logicalExpression(0); + this.state = 1606; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1607; + this.valueExpression(0); + } + } + this.state = 1613; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1616; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 113) { + { + this.state = 1614; + this.match(OpenSearchPPLParser.ELSE); + this.state = 1615; + this.valueExpression(0); + } + } + + this.state = 1618; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceExpression(): RelevanceExpressionContext { + let localContext = new RelevanceExpressionContext(this.context, this.state); + this.enterRule(localContext, 254, OpenSearchPPLParser.RULE_relevanceExpression); + try { + this.state = 1622; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + this.enterOuterAlt(localContext, 1); + { + this.state = 1620; + this.singleFieldRelevanceFunction(); + } + break; + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + this.enterOuterAlt(localContext, 2); + { + this.state = 1621; + this.multiFieldRelevanceFunction(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public singleFieldRelevanceFunction(): SingleFieldRelevanceFunctionContext { + let localContext = new SingleFieldRelevanceFunctionContext(this.context, this.state); + this.enterRule(localContext, 256, OpenSearchPPLParser.RULE_singleFieldRelevanceFunction); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1624; + this.singleFieldRelevanceFunctionName(); + this.state = 1625; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1626; + localContext._field = this.relevanceField(); + this.state = 1627; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1628; + localContext._query = this.relevanceQuery(); + this.state = 1633; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 1629; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1630; + this.relevanceArg(); + } + } + this.state = 1635; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1636; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public multiFieldRelevanceFunction(): MultiFieldRelevanceFunctionContext { + let localContext = new MultiFieldRelevanceFunctionContext(this.context, this.state); + this.enterRule(localContext, 258, OpenSearchPPLParser.RULE_multiFieldRelevanceFunction); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1638; + this.multiFieldRelevanceFunctionName(); + this.state = 1639; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1652; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 186) { + { + this.state = 1640; + this.match(OpenSearchPPLParser.LT_SQR_PRTHS); + this.state = 1641; + localContext._field = this.relevanceFieldAndWeight(); + this.state = 1646; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 1642; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1643; + localContext._field = this.relevanceFieldAndWeight(); + } + } + this.state = 1648; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1649; + this.match(OpenSearchPPLParser.RT_SQR_PRTHS); + this.state = 1650; + this.match(OpenSearchPPLParser.COMMA); + } + } + + this.state = 1654; + localContext._query = this.relevanceQuery(); + this.state = 1659; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 1655; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1656; + this.relevanceArg(); + } + } + this.state = 1661; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1662; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public tableSource(): TableSourceContext { + let localContext = new TableSourceContext(this.context, this.state); + this.enterRule(localContext, 260, OpenSearchPPLParser.RULE_tableSource); + try { + this.state = 1666; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.SEARCH: + case OpenSearchPPLParser.DESCRIBE: + case OpenSearchPPLParser.SHOW: + case OpenSearchPPLParser.EXPLAIN: + case OpenSearchPPLParser.FROM: + case OpenSearchPPLParser.WHERE: + case OpenSearchPPLParser.FIELDS: + case OpenSearchPPLParser.TABLE: + case OpenSearchPPLParser.RENAME: + case OpenSearchPPLParser.STATS: + case OpenSearchPPLParser.EVENTSTATS: + case OpenSearchPPLParser.DEDUP: + case OpenSearchPPLParser.SORT: + case OpenSearchPPLParser.EVAL: + case OpenSearchPPLParser.HEAD: + case OpenSearchPPLParser.BIN: + case OpenSearchPPLParser.TOP: + case OpenSearchPPLParser.RARE: + case OpenSearchPPLParser.PARSE: + case OpenSearchPPLParser.REGEX: + case OpenSearchPPLParser.REX: + case OpenSearchPPLParser.PUNCT: + case OpenSearchPPLParser.GROK: + case OpenSearchPPLParser.PATTERN: + case OpenSearchPPLParser.PATTERNS: + case OpenSearchPPLParser.NEW_FIELD: + case OpenSearchPPLParser.KMEANS: + case OpenSearchPPLParser.AD: + case OpenSearchPPLParser.ML: + case OpenSearchPPLParser.FILLNULL: + case OpenSearchPPLParser.FLATTEN: + case OpenSearchPPLParser.TRENDLINE: + case OpenSearchPPLParser.TIMECHART: + case OpenSearchPPLParser.EXPAND: + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + case OpenSearchPPLParser.METHOD: + case OpenSearchPPLParser.MAX_SAMPLE_COUNT: + case OpenSearchPPLParser.BUFFER_LIMIT: + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.LEFT_HINT: + case OpenSearchPPLParser.RIGHT_HINT: + case OpenSearchPPLParser.SOURCE: + case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.A: + case OpenSearchPPLParser.ASC: + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DESC: + case OpenSearchPPLParser.DATASOURCES: + case OpenSearchPPLParser.USING: + case OpenSearchPPLParser.WITH: + case OpenSearchPPLParser.SIMPLE: + case OpenSearchPPLParser.STANDARD: + case OpenSearchPPLParser.COST: + case OpenSearchPPLParser.EXTENDED: + case OpenSearchPPLParser.OVERRIDE: + case OpenSearchPPLParser.AUTO: + case OpenSearchPPLParser.STR: + case OpenSearchPPLParser.NUM: + case OpenSearchPPLParser.SMA: + case OpenSearchPPLParser.WMA: + case OpenSearchPPLParser.KEEPEMPTY: + case OpenSearchPPLParser.CONSECUTIVE: + case OpenSearchPPLParser.DEDUP_SPLITVALUES: + case OpenSearchPPLParser.PARTITIONS: + case OpenSearchPPLParser.ALLNUM: + case OpenSearchPPLParser.DELIM: + case OpenSearchPPLParser.BUCKET_NULLABLE: + case OpenSearchPPLParser.CENTROIDS: + case OpenSearchPPLParser.ITERATIONS: + case OpenSearchPPLParser.DISTANCE_TYPE: + case OpenSearchPPLParser.NUMBER_OF_TREES: + case OpenSearchPPLParser.SHINGLE_SIZE: + case OpenSearchPPLParser.SAMPLE_SIZE: + case OpenSearchPPLParser.OUTPUT_AFTER: + case OpenSearchPPLParser.TIME_DECAY: + case OpenSearchPPLParser.ANOMALY_RATE: + case OpenSearchPPLParser.CATEGORY_FIELD: + case OpenSearchPPLParser.TIME_FIELD: + case OpenSearchPPLParser.TIME_ZONE: + case OpenSearchPPLParser.TRAINING_DATA_SIZE: + case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + case OpenSearchPPLParser.APPEND: + case OpenSearchPPLParser.COUNTFIELD: + case OpenSearchPPLParser.SHOWCOUNT: + case OpenSearchPPLParser.INPUT: + case OpenSearchPPLParser.OUTPUT: + case OpenSearchPPLParser.PATH: + case OpenSearchPPLParser.CASE: + case OpenSearchPPLParser.ELSE: + case OpenSearchPPLParser.IN: + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.GEOIP: + case OpenSearchPPLParser.REGEXP: + case OpenSearchPPLParser.REGEX_MATCH: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.DAY_HOUR: + case OpenSearchPPLParser.DAY_MICROSECOND: + case OpenSearchPPLParser.DAY_MINUTE: + case OpenSearchPPLParser.DAY_OF_YEAR: + case OpenSearchPPLParser.DAY_SECOND: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.HOUR_MICROSECOND: + case OpenSearchPPLParser.HOUR_MINUTE: + case OpenSearchPPLParser.HOUR_OF_DAY: + case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MINUTE_MICROSECOND: + case OpenSearchPPLParser.MINUTE_OF_DAY: + case OpenSearchPPLParser.MINUTE_OF_HOUR: + case OpenSearchPPLParser.MINUTE_SECOND: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.MONTH_OF_YEAR: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.SECOND_MICROSECOND: + case OpenSearchPPLParser.SECOND_OF_MINUTE: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.WEEK_OF_YEAR: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.LOOKUP: + case OpenSearchPPLParser.IP: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.ARROW: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT_APPROX: + case OpenSearchPPLParser.ESTDC: + case OpenSearchPPLParser.ESTDC_ERROR: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MEAN: + case OpenSearchPPLParser.MEDIAN: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.MODE: + case OpenSearchPPLParser.RANGE: + case OpenSearchPPLParser.STDEV: + case OpenSearchPPLParser.STDEVP: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.SUMSQ: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.PERCENTILE: + case OpenSearchPPLParser.PERCENTILE_APPROX: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: + case OpenSearchPPLParser.TAKE: + case OpenSearchPPLParser.LIST: + case OpenSearchPPLParser.VALUES: + case OpenSearchPPLParser.PER_DAY: + case OpenSearchPPLParser.PER_HOUR: + case OpenSearchPPLParser.PER_MINUTE: + case OpenSearchPPLParser.PER_SECOND: + case OpenSearchPPLParser.RATE: + case OpenSearchPPLParser.SPARKLINE: + case OpenSearchPPLParser.C: + case OpenSearchPPLParser.DC: + case OpenSearchPPLParser.ROW_NUMBER: + case OpenSearchPPLParser.RANK: + case OpenSearchPPLParser.DENSE_RANK: + case OpenSearchPPLParser.PERCENT_RANK: + case OpenSearchPPLParser.CUME_DIST: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.NTH: + case OpenSearchPPLParser.NTILE: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CBRT: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG_WITH_BASE: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POSITION: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.ADDTIME: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATEDIFF: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.DAY_OF_MONTH: + case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.EXTRACT: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.GET_FORMAT: + case OpenSearchPPLParser.LAST_DAY: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SEC_TO_TIME: + case OpenSearchPPLParser.STR_TO_DATE: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SUBTIME: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMEDIFF: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TIME_FORMAT: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.TO_SECONDS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.WEEKDAY: + case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.REVERSE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.BETWEEN: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + case OpenSearchPPLParser.JSON_VALID: + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.COALESCE: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: + case OpenSearchPPLParser.ANALYZE_WILDCARD: + case OpenSearchPPLParser.ANALYZER: + case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case OpenSearchPPLParser.BOOST: + case OpenSearchPPLParser.CUTOFF_FREQUENCY: + case OpenSearchPPLParser.DEFAULT_FIELD: + case OpenSearchPPLParser.DEFAULT_OPERATOR: + case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: + case OpenSearchPPLParser.ESCAPE: + case OpenSearchPPLParser.FLAGS: + case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: + case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: + case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: + case OpenSearchPPLParser.FUZZY_REWRITE: + case OpenSearchPPLParser.FUZZINESS: + case OpenSearchPPLParser.LENIENT: + case OpenSearchPPLParser.LOW_FREQ_OPERATOR: + case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: + case OpenSearchPPLParser.MAX_EXPANSIONS: + case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: + case OpenSearchPPLParser.OPERATOR: + case OpenSearchPPLParser.PHRASE_SLOP: + case OpenSearchPPLParser.PREFIX_LENGTH: + case OpenSearchPPLParser.QUOTE_ANALYZER: + case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: + case OpenSearchPPLParser.REWRITE: + case OpenSearchPPLParser.SLOP: + case OpenSearchPPLParser.TIE_BREAKER: + case OpenSearchPPLParser.TYPE: + case OpenSearchPPLParser.ZERO_TERMS_QUERY: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.SEC: + case OpenSearchPPLParser.SECS: + case OpenSearchPPLParser.SECONDS: + case OpenSearchPPLParser.MINS: + case OpenSearchPPLParser.MINUTES: + case OpenSearchPPLParser.HR: + case OpenSearchPPLParser.HRS: + case OpenSearchPPLParser.HOURS: + case OpenSearchPPLParser.DAYS: + case OpenSearchPPLParser.MON: + case OpenSearchPPLParser.MONTHS: + case OpenSearchPPLParser.US: + case OpenSearchPPLParser.CS: + case OpenSearchPPLParser.DS: + case OpenSearchPPLParser.PERCENTILE_SHORTCUT: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.CLUSTER: + case OpenSearchPPLParser.BQUOTA_STRING: + this.enterOuterAlt(localContext, 1); + { + this.state = 1664; + this.tableQualifiedName(); + } + break; + case OpenSearchPPLParser.ID_DATE_SUFFIX: + this.enterOuterAlt(localContext, 2); + { + this.state = 1665; + this.match(OpenSearchPPLParser.ID_DATE_SUFFIX); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public tableFunction(): TableFunctionContext { + let localContext = new TableFunctionContext(this.context, this.state); + this.enterRule(localContext, 262, OpenSearchPPLParser.RULE_tableFunction); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1668; + this.qualifiedName(); + this.state = 1669; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1670; + this.namedFunctionArgs(); + this.state = 1671; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public fieldList(): FieldListContext { + let localContext = new FieldListContext(this.context, this.state); + this.enterRule(localContext, 264, OpenSearchPPLParser.RULE_fieldList); + let _la: number; + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 1673; + this.fieldExpression(); + this.state = 1680; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 164, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 1675; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 168) { + { + this.state = 1674; + this.match(OpenSearchPPLParser.COMMA); + } + } + + this.state = 1677; + this.fieldExpression(); + } + } + } + this.state = 1682; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 164, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sortField(): SortFieldContext { + let localContext = new SortFieldContext(this.context, this.state); + this.enterRule(localContext, 266, OpenSearchPPLParser.RULE_sortField); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1684; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 165, this.context) ) { + case 1: + { + this.state = 1683; + _la = this.tokenStream.LA(1); + if(!(_la === 177 || _la === 178)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + break; + } + this.state = 1686; + this.sortFieldExpression(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sortFieldExpression(): SortFieldExpressionContext { + let localContext = new SortFieldExpressionContext(this.context, this.state); + this.enterRule(localContext, 268, OpenSearchPPLParser.RULE_sortFieldExpression); + try { + this.state = 1709; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 166, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1688; + this.fieldExpression(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1689; + this.match(OpenSearchPPLParser.AUTO); + this.state = 1690; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1691; + this.fieldExpression(); + this.state = 1692; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 1694; + this.match(OpenSearchPPLParser.STR); + this.state = 1695; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1696; + this.fieldExpression(); + this.state = 1697; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 1699; + this.match(OpenSearchPPLParser.IP); + this.state = 1700; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1701; + this.fieldExpression(); + this.state = 1702; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + case 5: + this.enterOuterAlt(localContext, 5); + { + this.state = 1704; + this.match(OpenSearchPPLParser.NUM); + this.state = 1705; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1706; + this.fieldExpression(); + this.state = 1707; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public fieldExpression(): FieldExpressionContext { + let localContext = new FieldExpressionContext(this.context, this.state); + this.enterRule(localContext, 270, OpenSearchPPLParser.RULE_fieldExpression); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1711; + this.qualifiedName(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public wcFieldExpression(): WcFieldExpressionContext { + let localContext = new WcFieldExpressionContext(this.context, this.state); + this.enterRule(localContext, 272, OpenSearchPPLParser.RULE_wcFieldExpression); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1713; + this.wcQualifiedName(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public selectFieldExpression(): SelectFieldExpressionContext { + let localContext = new SelectFieldExpressionContext(this.context, this.state); + this.enterRule(localContext, 274, OpenSearchPPLParser.RULE_selectFieldExpression); + try { + this.state = 1717; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.SEARCH: + case OpenSearchPPLParser.DESCRIBE: + case OpenSearchPPLParser.SHOW: + case OpenSearchPPLParser.EXPLAIN: + case OpenSearchPPLParser.FROM: + case OpenSearchPPLParser.WHERE: + case OpenSearchPPLParser.FIELDS: + case OpenSearchPPLParser.TABLE: + case OpenSearchPPLParser.RENAME: + case OpenSearchPPLParser.STATS: + case OpenSearchPPLParser.EVENTSTATS: + case OpenSearchPPLParser.DEDUP: + case OpenSearchPPLParser.SORT: + case OpenSearchPPLParser.EVAL: + case OpenSearchPPLParser.HEAD: + case OpenSearchPPLParser.BIN: + case OpenSearchPPLParser.TOP: + case OpenSearchPPLParser.RARE: + case OpenSearchPPLParser.PARSE: + case OpenSearchPPLParser.REGEX: + case OpenSearchPPLParser.REX: + case OpenSearchPPLParser.PUNCT: + case OpenSearchPPLParser.GROK: + case OpenSearchPPLParser.PATTERN: + case OpenSearchPPLParser.PATTERNS: + case OpenSearchPPLParser.NEW_FIELD: + case OpenSearchPPLParser.KMEANS: + case OpenSearchPPLParser.AD: + case OpenSearchPPLParser.ML: + case OpenSearchPPLParser.FILLNULL: + case OpenSearchPPLParser.FLATTEN: + case OpenSearchPPLParser.TRENDLINE: + case OpenSearchPPLParser.TIMECHART: + case OpenSearchPPLParser.EXPAND: + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + case OpenSearchPPLParser.METHOD: + case OpenSearchPPLParser.MAX_SAMPLE_COUNT: + case OpenSearchPPLParser.BUFFER_LIMIT: + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.LEFT_HINT: + case OpenSearchPPLParser.RIGHT_HINT: + case OpenSearchPPLParser.SOURCE: + case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.A: + case OpenSearchPPLParser.ASC: + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DESC: + case OpenSearchPPLParser.DATASOURCES: + case OpenSearchPPLParser.USING: + case OpenSearchPPLParser.WITH: + case OpenSearchPPLParser.SIMPLE: + case OpenSearchPPLParser.STANDARD: + case OpenSearchPPLParser.COST: + case OpenSearchPPLParser.EXTENDED: + case OpenSearchPPLParser.OVERRIDE: + case OpenSearchPPLParser.AUTO: + case OpenSearchPPLParser.STR: + case OpenSearchPPLParser.NUM: + case OpenSearchPPLParser.SMA: + case OpenSearchPPLParser.WMA: + case OpenSearchPPLParser.KEEPEMPTY: + case OpenSearchPPLParser.CONSECUTIVE: + case OpenSearchPPLParser.DEDUP_SPLITVALUES: + case OpenSearchPPLParser.PARTITIONS: + case OpenSearchPPLParser.ALLNUM: + case OpenSearchPPLParser.DELIM: + case OpenSearchPPLParser.BUCKET_NULLABLE: + case OpenSearchPPLParser.CENTROIDS: + case OpenSearchPPLParser.ITERATIONS: + case OpenSearchPPLParser.DISTANCE_TYPE: + case OpenSearchPPLParser.NUMBER_OF_TREES: + case OpenSearchPPLParser.SHINGLE_SIZE: + case OpenSearchPPLParser.SAMPLE_SIZE: + case OpenSearchPPLParser.OUTPUT_AFTER: + case OpenSearchPPLParser.TIME_DECAY: + case OpenSearchPPLParser.ANOMALY_RATE: + case OpenSearchPPLParser.CATEGORY_FIELD: + case OpenSearchPPLParser.TIME_FIELD: + case OpenSearchPPLParser.TIME_ZONE: + case OpenSearchPPLParser.TRAINING_DATA_SIZE: + case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + case OpenSearchPPLParser.APPEND: + case OpenSearchPPLParser.COUNTFIELD: + case OpenSearchPPLParser.SHOWCOUNT: + case OpenSearchPPLParser.INPUT: + case OpenSearchPPLParser.OUTPUT: + case OpenSearchPPLParser.PATH: + case OpenSearchPPLParser.CASE: + case OpenSearchPPLParser.ELSE: + case OpenSearchPPLParser.IN: + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.GEOIP: + case OpenSearchPPLParser.REGEXP: + case OpenSearchPPLParser.REGEX_MATCH: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.DAY_HOUR: + case OpenSearchPPLParser.DAY_MICROSECOND: + case OpenSearchPPLParser.DAY_MINUTE: + case OpenSearchPPLParser.DAY_OF_YEAR: + case OpenSearchPPLParser.DAY_SECOND: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.HOUR_MICROSECOND: + case OpenSearchPPLParser.HOUR_MINUTE: + case OpenSearchPPLParser.HOUR_OF_DAY: + case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MINUTE_MICROSECOND: + case OpenSearchPPLParser.MINUTE_OF_DAY: + case OpenSearchPPLParser.MINUTE_OF_HOUR: + case OpenSearchPPLParser.MINUTE_SECOND: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.MONTH_OF_YEAR: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.SECOND_MICROSECOND: + case OpenSearchPPLParser.SECOND_OF_MINUTE: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.WEEK_OF_YEAR: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.LOOKUP: + case OpenSearchPPLParser.IP: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.SINGLE_QUOTE: + case OpenSearchPPLParser.DOUBLE_QUOTE: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.ARROW: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT_APPROX: + case OpenSearchPPLParser.ESTDC: + case OpenSearchPPLParser.ESTDC_ERROR: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MEAN: + case OpenSearchPPLParser.MEDIAN: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.MODE: + case OpenSearchPPLParser.RANGE: + case OpenSearchPPLParser.STDEV: + case OpenSearchPPLParser.STDEVP: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.SUMSQ: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.PERCENTILE: + case OpenSearchPPLParser.PERCENTILE_APPROX: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: + case OpenSearchPPLParser.TAKE: + case OpenSearchPPLParser.LIST: + case OpenSearchPPLParser.VALUES: + case OpenSearchPPLParser.PER_DAY: + case OpenSearchPPLParser.PER_HOUR: + case OpenSearchPPLParser.PER_MINUTE: + case OpenSearchPPLParser.PER_SECOND: + case OpenSearchPPLParser.RATE: + case OpenSearchPPLParser.SPARKLINE: + case OpenSearchPPLParser.C: + case OpenSearchPPLParser.DC: + case OpenSearchPPLParser.ROW_NUMBER: + case OpenSearchPPLParser.RANK: + case OpenSearchPPLParser.DENSE_RANK: + case OpenSearchPPLParser.PERCENT_RANK: + case OpenSearchPPLParser.CUME_DIST: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.NTH: + case OpenSearchPPLParser.NTILE: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CBRT: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG_WITH_BASE: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POSITION: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.ADDTIME: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATEDIFF: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.DAY_OF_MONTH: + case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.EXTRACT: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.GET_FORMAT: + case OpenSearchPPLParser.LAST_DAY: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SEC_TO_TIME: + case OpenSearchPPLParser.STR_TO_DATE: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SUBTIME: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMEDIFF: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TIME_FORMAT: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.TO_SECONDS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.WEEKDAY: + case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.REVERSE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.BETWEEN: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + case OpenSearchPPLParser.JSON_VALID: + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.COALESCE: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: + case OpenSearchPPLParser.ANALYZE_WILDCARD: + case OpenSearchPPLParser.ANALYZER: + case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case OpenSearchPPLParser.BOOST: + case OpenSearchPPLParser.CUTOFF_FREQUENCY: + case OpenSearchPPLParser.DEFAULT_FIELD: + case OpenSearchPPLParser.DEFAULT_OPERATOR: + case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: + case OpenSearchPPLParser.ESCAPE: + case OpenSearchPPLParser.FLAGS: + case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: + case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: + case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: + case OpenSearchPPLParser.FUZZY_REWRITE: + case OpenSearchPPLParser.FUZZINESS: + case OpenSearchPPLParser.LENIENT: + case OpenSearchPPLParser.LOW_FREQ_OPERATOR: + case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: + case OpenSearchPPLParser.MAX_EXPANSIONS: + case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: + case OpenSearchPPLParser.OPERATOR: + case OpenSearchPPLParser.PHRASE_SLOP: + case OpenSearchPPLParser.PREFIX_LENGTH: + case OpenSearchPPLParser.QUOTE_ANALYZER: + case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: + case OpenSearchPPLParser.REWRITE: + case OpenSearchPPLParser.SLOP: + case OpenSearchPPLParser.TIE_BREAKER: + case OpenSearchPPLParser.TYPE: + case OpenSearchPPLParser.ZERO_TERMS_QUERY: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.SEC: + case OpenSearchPPLParser.SECS: + case OpenSearchPPLParser.SECONDS: + case OpenSearchPPLParser.MINS: + case OpenSearchPPLParser.MINUTES: + case OpenSearchPPLParser.HR: + case OpenSearchPPLParser.HRS: + case OpenSearchPPLParser.HOURS: + case OpenSearchPPLParser.DAYS: + case OpenSearchPPLParser.MON: + case OpenSearchPPLParser.MONTHS: + case OpenSearchPPLParser.US: + case OpenSearchPPLParser.CS: + case OpenSearchPPLParser.DS: + case OpenSearchPPLParser.PERCENTILE_SHORTCUT: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.BQUOTA_STRING: + this.enterOuterAlt(localContext, 1); + { + this.state = 1715; + this.wcQualifiedName(); + } + break; + case OpenSearchPPLParser.STAR: + this.enterOuterAlt(localContext, 2); + { + this.state = 1716; + this.match(OpenSearchPPLParser.STAR); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public renameFieldExpression(): RenameFieldExpressionContext { + let localContext = new RenameFieldExpressionContext(this.context, this.state); + this.enterRule(localContext, 276, OpenSearchPPLParser.RULE_renameFieldExpression); + try { + this.state = 1721; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.SEARCH: + case OpenSearchPPLParser.DESCRIBE: + case OpenSearchPPLParser.SHOW: + case OpenSearchPPLParser.EXPLAIN: + case OpenSearchPPLParser.FROM: + case OpenSearchPPLParser.WHERE: + case OpenSearchPPLParser.FIELDS: + case OpenSearchPPLParser.TABLE: + case OpenSearchPPLParser.RENAME: + case OpenSearchPPLParser.STATS: + case OpenSearchPPLParser.EVENTSTATS: + case OpenSearchPPLParser.DEDUP: + case OpenSearchPPLParser.SORT: + case OpenSearchPPLParser.EVAL: + case OpenSearchPPLParser.HEAD: + case OpenSearchPPLParser.BIN: + case OpenSearchPPLParser.TOP: + case OpenSearchPPLParser.RARE: + case OpenSearchPPLParser.PARSE: + case OpenSearchPPLParser.REGEX: + case OpenSearchPPLParser.REX: + case OpenSearchPPLParser.PUNCT: + case OpenSearchPPLParser.GROK: + case OpenSearchPPLParser.PATTERN: + case OpenSearchPPLParser.PATTERNS: + case OpenSearchPPLParser.NEW_FIELD: + case OpenSearchPPLParser.KMEANS: + case OpenSearchPPLParser.AD: + case OpenSearchPPLParser.ML: + case OpenSearchPPLParser.FILLNULL: + case OpenSearchPPLParser.FLATTEN: + case OpenSearchPPLParser.TRENDLINE: + case OpenSearchPPLParser.TIMECHART: + case OpenSearchPPLParser.EXPAND: + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + case OpenSearchPPLParser.METHOD: + case OpenSearchPPLParser.MAX_SAMPLE_COUNT: + case OpenSearchPPLParser.BUFFER_LIMIT: + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.LEFT_HINT: + case OpenSearchPPLParser.RIGHT_HINT: + case OpenSearchPPLParser.SOURCE: + case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.A: + case OpenSearchPPLParser.ASC: + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DESC: + case OpenSearchPPLParser.DATASOURCES: + case OpenSearchPPLParser.USING: + case OpenSearchPPLParser.WITH: + case OpenSearchPPLParser.SIMPLE: + case OpenSearchPPLParser.STANDARD: + case OpenSearchPPLParser.COST: + case OpenSearchPPLParser.EXTENDED: + case OpenSearchPPLParser.OVERRIDE: + case OpenSearchPPLParser.AUTO: + case OpenSearchPPLParser.STR: + case OpenSearchPPLParser.NUM: + case OpenSearchPPLParser.SMA: + case OpenSearchPPLParser.WMA: + case OpenSearchPPLParser.KEEPEMPTY: + case OpenSearchPPLParser.CONSECUTIVE: + case OpenSearchPPLParser.DEDUP_SPLITVALUES: + case OpenSearchPPLParser.PARTITIONS: + case OpenSearchPPLParser.ALLNUM: + case OpenSearchPPLParser.DELIM: + case OpenSearchPPLParser.BUCKET_NULLABLE: + case OpenSearchPPLParser.CENTROIDS: + case OpenSearchPPLParser.ITERATIONS: + case OpenSearchPPLParser.DISTANCE_TYPE: + case OpenSearchPPLParser.NUMBER_OF_TREES: + case OpenSearchPPLParser.SHINGLE_SIZE: + case OpenSearchPPLParser.SAMPLE_SIZE: + case OpenSearchPPLParser.OUTPUT_AFTER: + case OpenSearchPPLParser.TIME_DECAY: + case OpenSearchPPLParser.ANOMALY_RATE: + case OpenSearchPPLParser.CATEGORY_FIELD: + case OpenSearchPPLParser.TIME_FIELD: + case OpenSearchPPLParser.TIME_ZONE: + case OpenSearchPPLParser.TRAINING_DATA_SIZE: + case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + case OpenSearchPPLParser.APPEND: + case OpenSearchPPLParser.COUNTFIELD: + case OpenSearchPPLParser.SHOWCOUNT: + case OpenSearchPPLParser.INPUT: + case OpenSearchPPLParser.OUTPUT: + case OpenSearchPPLParser.PATH: + case OpenSearchPPLParser.CASE: + case OpenSearchPPLParser.ELSE: + case OpenSearchPPLParser.IN: + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.GEOIP: + case OpenSearchPPLParser.REGEXP: + case OpenSearchPPLParser.REGEX_MATCH: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.DAY_HOUR: + case OpenSearchPPLParser.DAY_MICROSECOND: + case OpenSearchPPLParser.DAY_MINUTE: + case OpenSearchPPLParser.DAY_OF_YEAR: + case OpenSearchPPLParser.DAY_SECOND: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.HOUR_MICROSECOND: + case OpenSearchPPLParser.HOUR_MINUTE: + case OpenSearchPPLParser.HOUR_OF_DAY: + case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MINUTE_MICROSECOND: + case OpenSearchPPLParser.MINUTE_OF_DAY: + case OpenSearchPPLParser.MINUTE_OF_HOUR: + case OpenSearchPPLParser.MINUTE_SECOND: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.MONTH_OF_YEAR: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.SECOND_MICROSECOND: + case OpenSearchPPLParser.SECOND_OF_MINUTE: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.WEEK_OF_YEAR: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.LOOKUP: + case OpenSearchPPLParser.IP: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.SINGLE_QUOTE: + case OpenSearchPPLParser.DOUBLE_QUOTE: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.ARROW: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT_APPROX: + case OpenSearchPPLParser.ESTDC: + case OpenSearchPPLParser.ESTDC_ERROR: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MEAN: + case OpenSearchPPLParser.MEDIAN: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.MODE: + case OpenSearchPPLParser.RANGE: + case OpenSearchPPLParser.STDEV: + case OpenSearchPPLParser.STDEVP: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.SUMSQ: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.PERCENTILE: + case OpenSearchPPLParser.PERCENTILE_APPROX: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: + case OpenSearchPPLParser.TAKE: + case OpenSearchPPLParser.LIST: + case OpenSearchPPLParser.VALUES: + case OpenSearchPPLParser.PER_DAY: + case OpenSearchPPLParser.PER_HOUR: + case OpenSearchPPLParser.PER_MINUTE: + case OpenSearchPPLParser.PER_SECOND: + case OpenSearchPPLParser.RATE: + case OpenSearchPPLParser.SPARKLINE: + case OpenSearchPPLParser.C: + case OpenSearchPPLParser.DC: + case OpenSearchPPLParser.ROW_NUMBER: + case OpenSearchPPLParser.RANK: + case OpenSearchPPLParser.DENSE_RANK: + case OpenSearchPPLParser.PERCENT_RANK: + case OpenSearchPPLParser.CUME_DIST: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.NTH: + case OpenSearchPPLParser.NTILE: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CBRT: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG_WITH_BASE: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POSITION: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.ADDTIME: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATEDIFF: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.DAY_OF_MONTH: + case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.EXTRACT: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.GET_FORMAT: + case OpenSearchPPLParser.LAST_DAY: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SEC_TO_TIME: + case OpenSearchPPLParser.STR_TO_DATE: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SUBTIME: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMEDIFF: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TIME_FORMAT: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.TO_SECONDS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.WEEKDAY: + case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.REVERSE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.BETWEEN: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + case OpenSearchPPLParser.JSON_VALID: + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.COALESCE: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: + case OpenSearchPPLParser.ANALYZE_WILDCARD: + case OpenSearchPPLParser.ANALYZER: + case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case OpenSearchPPLParser.BOOST: + case OpenSearchPPLParser.CUTOFF_FREQUENCY: + case OpenSearchPPLParser.DEFAULT_FIELD: + case OpenSearchPPLParser.DEFAULT_OPERATOR: + case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: + case OpenSearchPPLParser.ESCAPE: + case OpenSearchPPLParser.FLAGS: + case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: + case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: + case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: + case OpenSearchPPLParser.FUZZY_REWRITE: + case OpenSearchPPLParser.FUZZINESS: + case OpenSearchPPLParser.LENIENT: + case OpenSearchPPLParser.LOW_FREQ_OPERATOR: + case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: + case OpenSearchPPLParser.MAX_EXPANSIONS: + case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: + case OpenSearchPPLParser.OPERATOR: + case OpenSearchPPLParser.PHRASE_SLOP: + case OpenSearchPPLParser.PREFIX_LENGTH: + case OpenSearchPPLParser.QUOTE_ANALYZER: + case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: + case OpenSearchPPLParser.REWRITE: + case OpenSearchPPLParser.SLOP: + case OpenSearchPPLParser.TIE_BREAKER: + case OpenSearchPPLParser.TYPE: + case OpenSearchPPLParser.ZERO_TERMS_QUERY: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.SEC: + case OpenSearchPPLParser.SECS: + case OpenSearchPPLParser.SECONDS: + case OpenSearchPPLParser.MINS: + case OpenSearchPPLParser.MINUTES: + case OpenSearchPPLParser.HR: + case OpenSearchPPLParser.HRS: + case OpenSearchPPLParser.HOURS: + case OpenSearchPPLParser.DAYS: + case OpenSearchPPLParser.MON: + case OpenSearchPPLParser.MONTHS: + case OpenSearchPPLParser.US: + case OpenSearchPPLParser.CS: + case OpenSearchPPLParser.DS: + case OpenSearchPPLParser.PERCENTILE_SHORTCUT: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.BQUOTA_STRING: + this.enterOuterAlt(localContext, 1); + { + this.state = 1719; + this.wcQualifiedName(); + } + break; + case OpenSearchPPLParser.STAR: + this.enterOuterAlt(localContext, 2); + { + this.state = 1720; + this.match(OpenSearchPPLParser.STAR); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public evalFunctionCall(): EvalFunctionCallContext { + let localContext = new EvalFunctionCallContext(this.context, this.state); + this.enterRule(localContext, 278, OpenSearchPPLParser.RULE_evalFunctionCall); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1723; + this.evalFunctionName(); + this.state = 1724; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1725; + this.functionArgs(); + this.state = 1726; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public dataTypeFunctionCall(): DataTypeFunctionCallContext { + let localContext = new DataTypeFunctionCallContext(this.context, this.state); + this.enterRule(localContext, 280, OpenSearchPPLParser.RULE_dataTypeFunctionCall); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1728; + this.match(OpenSearchPPLParser.CAST); + this.state = 1729; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1730; + this.logicalExpression(0); + this.state = 1731; + this.match(OpenSearchPPLParser.AS); + this.state = 1732; + this.convertedDataType(); + this.state = 1733; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public convertedDataType(): ConvertedDataTypeContext { + let localContext = new ConvertedDataTypeContext(this.context, this.state); + this.enterRule(localContext, 282, OpenSearchPPLParser.RULE_convertedDataType); + try { + this.state = 1747; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.DATE: + this.enterOuterAlt(localContext, 1); + { + this.state = 1735; + localContext._typeName = this.match(OpenSearchPPLParser.DATE); + } + break; + case OpenSearchPPLParser.TIME: + this.enterOuterAlt(localContext, 2); + { + this.state = 1736; + localContext._typeName = this.match(OpenSearchPPLParser.TIME); + } + break; + case OpenSearchPPLParser.TIMESTAMP: + this.enterOuterAlt(localContext, 3); + { + this.state = 1737; + localContext._typeName = this.match(OpenSearchPPLParser.TIMESTAMP); + } + break; + case OpenSearchPPLParser.INT: + this.enterOuterAlt(localContext, 4); + { + this.state = 1738; + localContext._typeName = this.match(OpenSearchPPLParser.INT); + } + break; + case OpenSearchPPLParser.INTEGER: + this.enterOuterAlt(localContext, 5); + { + this.state = 1739; + localContext._typeName = this.match(OpenSearchPPLParser.INTEGER); + } + break; + case OpenSearchPPLParser.DOUBLE: + this.enterOuterAlt(localContext, 6); + { + this.state = 1740; + localContext._typeName = this.match(OpenSearchPPLParser.DOUBLE); + } + break; + case OpenSearchPPLParser.LONG: + this.enterOuterAlt(localContext, 7); + { + this.state = 1741; + localContext._typeName = this.match(OpenSearchPPLParser.LONG); + } + break; + case OpenSearchPPLParser.FLOAT: + this.enterOuterAlt(localContext, 8); + { + this.state = 1742; + localContext._typeName = this.match(OpenSearchPPLParser.FLOAT); + } + break; + case OpenSearchPPLParser.STRING: + this.enterOuterAlt(localContext, 9); + { + this.state = 1743; + localContext._typeName = this.match(OpenSearchPPLParser.STRING); + } + break; + case OpenSearchPPLParser.BOOLEAN: + this.enterOuterAlt(localContext, 10); + { + this.state = 1744; + localContext._typeName = this.match(OpenSearchPPLParser.BOOLEAN); + } + break; + case OpenSearchPPLParser.IP: + this.enterOuterAlt(localContext, 11); + { + this.state = 1745; + localContext._typeName = this.match(OpenSearchPPLParser.IP); + } + break; + case OpenSearchPPLParser.JSON: + this.enterOuterAlt(localContext, 12); + { + this.state = 1746; + localContext._typeName = this.match(OpenSearchPPLParser.JSON); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public evalFunctionName(): EvalFunctionNameContext { + let localContext = new EvalFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 284, OpenSearchPPLParser.RULE_evalFunctionName); + try { + this.state = 1760; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CBRT: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG_WITH_BASE: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + this.enterOuterAlt(localContext, 1); + { + this.state = 1749; + this.mathematicalFunctionName(); + } + break; + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.DAY_OF_YEAR: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.HOUR_OF_DAY: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MINUTE_OF_DAY: + case OpenSearchPPLParser.MINUTE_OF_HOUR: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.MONTH_OF_YEAR: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.SECOND_OF_MINUTE: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.WEEK_OF_YEAR: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.ADDTIME: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATEDIFF: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.DAY_OF_MONTH: + case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.LAST_DAY: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SEC_TO_TIME: + case OpenSearchPPLParser.STR_TO_DATE: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SUBTIME: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMEDIFF: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TIME_FORMAT: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.TO_SECONDS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.WEEKDAY: + case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: + this.enterOuterAlt(localContext, 2); + { + this.state = 1750; + this.dateTimeFunctionName(); + } + break; + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.REVERSE: + this.enterOuterAlt(localContext, 3); + { + this.state = 1751; + this.textFunctionName(); + } + break; + case OpenSearchPPLParser.REGEX_MATCH: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.JSON_VALID: + this.enterOuterAlt(localContext, 4); + { + this.state = 1752; + this.conditionFunctionName(); + } + break; + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.COALESCE: + this.enterOuterAlt(localContext, 5); + { + this.state = 1753; + this.flowControlFunctionName(); + } + break; + case OpenSearchPPLParser.TYPEOF: + this.enterOuterAlt(localContext, 6); + { + this.state = 1754; + this.systemFunctionName(); + } + break; + case OpenSearchPPLParser.POSITION: + this.enterOuterAlt(localContext, 7); + { + this.state = 1755; + this.positionFunctionName(); + } + break; + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: + this.enterOuterAlt(localContext, 8); + { + this.state = 1756; + this.cryptographicFunctionName(); + } + break; + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: + this.enterOuterAlt(localContext, 9); + { + this.state = 1757; + this.jsonFunctionName(); + } + break; + case OpenSearchPPLParser.GEOIP: + this.enterOuterAlt(localContext, 10); + { + this.state = 1758; + this.geoipFunctionName(); + } + break; + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + this.enterOuterAlt(localContext, 11); + { + this.state = 1759; + this.collectionFunctionName(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public functionArgs(): FunctionArgsContext { + let localContext = new FunctionArgsContext(this.context, this.state); + this.enterRule(localContext, 286, OpenSearchPPLParser.RULE_functionArgs); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1770; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4257218044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 2682862783) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294959103) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4265601023) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 805306367) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 2350127113) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4294443007) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 4294967295) !== 0) || ((((_la - 262)) & ~0x1F) === 0 && ((1 << (_la - 262)) & 4294967295) !== 0) || ((((_la - 294)) & ~0x1F) === 0 && ((1 << (_la - 294)) & 4294967295) !== 0) || ((((_la - 326)) & ~0x1F) === 0 && ((1 << (_la - 326)) & 4294705151) !== 0) || ((((_la - 358)) & ~0x1F) === 0 && ((1 << (_la - 358)) & 4294967295) !== 0) || ((((_la - 390)) & ~0x1F) === 0 && ((1 << (_la - 390)) & 4294967295) !== 0) || ((((_la - 422)) & ~0x1F) === 0 && ((1 << (_la - 422)) & 4294965311) !== 0) || ((((_la - 454)) & ~0x1F) === 0 && ((1 << (_la - 454)) & 1915) !== 0)) { + { + this.state = 1762; + this.functionArg(); + this.state = 1767; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 1763; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1764; + this.functionArg(); + } + } + this.state = 1769; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public namedFunctionArgs(): NamedFunctionArgsContext { + let localContext = new NamedFunctionArgsContext(this.context, this.state); + this.enterRule(localContext, 288, OpenSearchPPLParser.RULE_namedFunctionArgs); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1780; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4257218044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 2682862783) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294959103) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4265601023) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 805306367) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 2350127113) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4294443007) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 4294967295) !== 0) || ((((_la - 262)) & ~0x1F) === 0 && ((1 << (_la - 262)) & 4294967295) !== 0) || ((((_la - 294)) & ~0x1F) === 0 && ((1 << (_la - 294)) & 4294967295) !== 0) || ((((_la - 326)) & ~0x1F) === 0 && ((1 << (_la - 326)) & 4294705151) !== 0) || ((((_la - 358)) & ~0x1F) === 0 && ((1 << (_la - 358)) & 4294967295) !== 0) || ((((_la - 390)) & ~0x1F) === 0 && ((1 << (_la - 390)) & 4294967295) !== 0) || ((((_la - 422)) & ~0x1F) === 0 && ((1 << (_la - 422)) & 4294965311) !== 0) || ((((_la - 454)) & ~0x1F) === 0 && ((1 << (_la - 454)) & 1915) !== 0)) { + { + this.state = 1772; + this.namedFunctionArg(); + this.state = 1777; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 1773; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1774; + this.namedFunctionArg(); + } + } + this.state = 1779; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public functionArg(): FunctionArgContext { + let localContext = new FunctionArgContext(this.context, this.state); + this.enterRule(localContext, 290, OpenSearchPPLParser.RULE_functionArg); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1782; + this.functionArgExpression(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public namedFunctionArg(): NamedFunctionArgContext { + let localContext = new NamedFunctionArgContext(this.context, this.state); + this.enterRule(localContext, 292, OpenSearchPPLParser.RULE_namedFunctionArg); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1787; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 175, this.context) ) { + case 1: + { + this.state = 1784; + this.ident(); + this.state = 1785; + this.match(OpenSearchPPLParser.EQUAL); + } + break; + } + this.state = 1789; + this.functionArgExpression(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public functionArgExpression(): FunctionArgExpressionContext { + let localContext = new FunctionArgExpressionContext(this.context, this.state); + this.enterRule(localContext, 294, OpenSearchPPLParser.RULE_functionArgExpression); + try { + this.state = 1793; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 176, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1791; + this.lambda(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1792; + this.logicalExpression(0); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public lambda(): LambdaContext { + let localContext = new LambdaContext(this.context, this.state); + this.enterRule(localContext, 296, OpenSearchPPLParser.RULE_lambda); + let _la: number; + try { + this.state = 1811; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.SEARCH: + case OpenSearchPPLParser.DESCRIBE: + case OpenSearchPPLParser.SHOW: + case OpenSearchPPLParser.EXPLAIN: + case OpenSearchPPLParser.FROM: + case OpenSearchPPLParser.WHERE: + case OpenSearchPPLParser.FIELDS: + case OpenSearchPPLParser.TABLE: + case OpenSearchPPLParser.RENAME: + case OpenSearchPPLParser.STATS: + case OpenSearchPPLParser.EVENTSTATS: + case OpenSearchPPLParser.DEDUP: + case OpenSearchPPLParser.SORT: + case OpenSearchPPLParser.EVAL: + case OpenSearchPPLParser.HEAD: + case OpenSearchPPLParser.BIN: + case OpenSearchPPLParser.TOP: + case OpenSearchPPLParser.RARE: + case OpenSearchPPLParser.PARSE: + case OpenSearchPPLParser.REGEX: + case OpenSearchPPLParser.REX: + case OpenSearchPPLParser.PUNCT: + case OpenSearchPPLParser.GROK: + case OpenSearchPPLParser.PATTERN: + case OpenSearchPPLParser.PATTERNS: + case OpenSearchPPLParser.NEW_FIELD: + case OpenSearchPPLParser.KMEANS: + case OpenSearchPPLParser.AD: + case OpenSearchPPLParser.ML: + case OpenSearchPPLParser.FILLNULL: + case OpenSearchPPLParser.FLATTEN: + case OpenSearchPPLParser.TRENDLINE: + case OpenSearchPPLParser.TIMECHART: + case OpenSearchPPLParser.EXPAND: + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + case OpenSearchPPLParser.METHOD: + case OpenSearchPPLParser.MAX_SAMPLE_COUNT: + case OpenSearchPPLParser.BUFFER_LIMIT: + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.LEFT_HINT: + case OpenSearchPPLParser.RIGHT_HINT: + case OpenSearchPPLParser.SOURCE: + case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.A: + case OpenSearchPPLParser.ASC: + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DESC: + case OpenSearchPPLParser.DATASOURCES: + case OpenSearchPPLParser.USING: + case OpenSearchPPLParser.WITH: + case OpenSearchPPLParser.SIMPLE: + case OpenSearchPPLParser.STANDARD: + case OpenSearchPPLParser.COST: + case OpenSearchPPLParser.EXTENDED: + case OpenSearchPPLParser.OVERRIDE: + case OpenSearchPPLParser.AUTO: + case OpenSearchPPLParser.STR: + case OpenSearchPPLParser.NUM: + case OpenSearchPPLParser.SMA: + case OpenSearchPPLParser.WMA: + case OpenSearchPPLParser.KEEPEMPTY: + case OpenSearchPPLParser.CONSECUTIVE: + case OpenSearchPPLParser.DEDUP_SPLITVALUES: + case OpenSearchPPLParser.PARTITIONS: + case OpenSearchPPLParser.ALLNUM: + case OpenSearchPPLParser.DELIM: + case OpenSearchPPLParser.BUCKET_NULLABLE: + case OpenSearchPPLParser.CENTROIDS: + case OpenSearchPPLParser.ITERATIONS: + case OpenSearchPPLParser.DISTANCE_TYPE: + case OpenSearchPPLParser.NUMBER_OF_TREES: + case OpenSearchPPLParser.SHINGLE_SIZE: + case OpenSearchPPLParser.SAMPLE_SIZE: + case OpenSearchPPLParser.OUTPUT_AFTER: + case OpenSearchPPLParser.TIME_DECAY: + case OpenSearchPPLParser.ANOMALY_RATE: + case OpenSearchPPLParser.CATEGORY_FIELD: + case OpenSearchPPLParser.TIME_FIELD: + case OpenSearchPPLParser.TIME_ZONE: + case OpenSearchPPLParser.TRAINING_DATA_SIZE: + case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + case OpenSearchPPLParser.APPEND: + case OpenSearchPPLParser.COUNTFIELD: + case OpenSearchPPLParser.SHOWCOUNT: + case OpenSearchPPLParser.INPUT: + case OpenSearchPPLParser.OUTPUT: + case OpenSearchPPLParser.PATH: + case OpenSearchPPLParser.CASE: + case OpenSearchPPLParser.ELSE: + case OpenSearchPPLParser.IN: + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.GEOIP: + case OpenSearchPPLParser.REGEXP: + case OpenSearchPPLParser.REGEX_MATCH: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.DAY_HOUR: + case OpenSearchPPLParser.DAY_MICROSECOND: + case OpenSearchPPLParser.DAY_MINUTE: + case OpenSearchPPLParser.DAY_OF_YEAR: + case OpenSearchPPLParser.DAY_SECOND: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.HOUR_MICROSECOND: + case OpenSearchPPLParser.HOUR_MINUTE: + case OpenSearchPPLParser.HOUR_OF_DAY: + case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MINUTE_MICROSECOND: + case OpenSearchPPLParser.MINUTE_OF_DAY: + case OpenSearchPPLParser.MINUTE_OF_HOUR: + case OpenSearchPPLParser.MINUTE_SECOND: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.MONTH_OF_YEAR: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.SECOND_MICROSECOND: + case OpenSearchPPLParser.SECOND_OF_MINUTE: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.WEEK_OF_YEAR: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.LOOKUP: + case OpenSearchPPLParser.IP: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.ARROW: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT_APPROX: + case OpenSearchPPLParser.ESTDC: + case OpenSearchPPLParser.ESTDC_ERROR: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MEAN: + case OpenSearchPPLParser.MEDIAN: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.MODE: + case OpenSearchPPLParser.RANGE: + case OpenSearchPPLParser.STDEV: + case OpenSearchPPLParser.STDEVP: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.SUMSQ: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.PERCENTILE: + case OpenSearchPPLParser.PERCENTILE_APPROX: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: + case OpenSearchPPLParser.TAKE: + case OpenSearchPPLParser.LIST: + case OpenSearchPPLParser.VALUES: + case OpenSearchPPLParser.PER_DAY: + case OpenSearchPPLParser.PER_HOUR: + case OpenSearchPPLParser.PER_MINUTE: + case OpenSearchPPLParser.PER_SECOND: + case OpenSearchPPLParser.RATE: + case OpenSearchPPLParser.SPARKLINE: + case OpenSearchPPLParser.C: + case OpenSearchPPLParser.DC: + case OpenSearchPPLParser.ROW_NUMBER: + case OpenSearchPPLParser.RANK: + case OpenSearchPPLParser.DENSE_RANK: + case OpenSearchPPLParser.PERCENT_RANK: + case OpenSearchPPLParser.CUME_DIST: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.NTH: + case OpenSearchPPLParser.NTILE: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CBRT: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG_WITH_BASE: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POSITION: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.ADDTIME: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATEDIFF: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.DAY_OF_MONTH: + case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.EXTRACT: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.GET_FORMAT: + case OpenSearchPPLParser.LAST_DAY: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SEC_TO_TIME: + case OpenSearchPPLParser.STR_TO_DATE: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SUBTIME: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMEDIFF: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TIME_FORMAT: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.TO_SECONDS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.WEEKDAY: + case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.REVERSE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.BETWEEN: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + case OpenSearchPPLParser.JSON_VALID: + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.COALESCE: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: + case OpenSearchPPLParser.ANALYZE_WILDCARD: + case OpenSearchPPLParser.ANALYZER: + case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case OpenSearchPPLParser.BOOST: + case OpenSearchPPLParser.CUTOFF_FREQUENCY: + case OpenSearchPPLParser.DEFAULT_FIELD: + case OpenSearchPPLParser.DEFAULT_OPERATOR: + case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: + case OpenSearchPPLParser.ESCAPE: + case OpenSearchPPLParser.FLAGS: + case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: + case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: + case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: + case OpenSearchPPLParser.FUZZY_REWRITE: + case OpenSearchPPLParser.FUZZINESS: + case OpenSearchPPLParser.LENIENT: + case OpenSearchPPLParser.LOW_FREQ_OPERATOR: + case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: + case OpenSearchPPLParser.MAX_EXPANSIONS: + case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: + case OpenSearchPPLParser.OPERATOR: + case OpenSearchPPLParser.PHRASE_SLOP: + case OpenSearchPPLParser.PREFIX_LENGTH: + case OpenSearchPPLParser.QUOTE_ANALYZER: + case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: + case OpenSearchPPLParser.REWRITE: + case OpenSearchPPLParser.SLOP: + case OpenSearchPPLParser.TIE_BREAKER: + case OpenSearchPPLParser.TYPE: + case OpenSearchPPLParser.ZERO_TERMS_QUERY: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.SEC: + case OpenSearchPPLParser.SECS: + case OpenSearchPPLParser.SECONDS: + case OpenSearchPPLParser.MINS: + case OpenSearchPPLParser.MINUTES: + case OpenSearchPPLParser.HR: + case OpenSearchPPLParser.HRS: + case OpenSearchPPLParser.HOURS: + case OpenSearchPPLParser.DAYS: + case OpenSearchPPLParser.MON: + case OpenSearchPPLParser.MONTHS: + case OpenSearchPPLParser.US: + case OpenSearchPPLParser.CS: + case OpenSearchPPLParser.DS: + case OpenSearchPPLParser.PERCENTILE_SHORTCUT: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.BQUOTA_STRING: + this.enterOuterAlt(localContext, 1); + { + this.state = 1795; + this.ident(); + this.state = 1796; + this.match(OpenSearchPPLParser.ARROW); + this.state = 1797; + this.logicalExpression(0); + } + break; + case OpenSearchPPLParser.LT_PRTHS: + this.enterOuterAlt(localContext, 2); + { + this.state = 1799; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1800; + this.ident(); + this.state = 1803; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + do { + { + { + this.state = 1801; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1802; + this.ident(); + } + } + this.state = 1805; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } while (_la === 168); + this.state = 1807; + this.match(OpenSearchPPLParser.RT_PRTHS); + this.state = 1808; + this.match(OpenSearchPPLParser.ARROW); + this.state = 1809; + this.logicalExpression(0); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceArg(): RelevanceArgContext { + let localContext = new RelevanceArgContext(this.context, this.state); + this.enterRule(localContext, 298, OpenSearchPPLParser.RULE_relevanceArg); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1813; + this.relevanceArgName(); + this.state = 1814; + this.match(OpenSearchPPLParser.EQUAL); + this.state = 1815; + this.relevanceArgValue(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceArgName(): RelevanceArgNameContext { + let localContext = new RelevanceArgNameContext(this.context, this.state); + this.enterRule(localContext, 300, OpenSearchPPLParser.RULE_relevanceArgName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1817; + _la = this.tokenStream.LA(1); + if(!(_la === 8 || _la === 101 || ((((_la - 396)) & ~0x1F) === 0 && ((1 << (_la - 396)) & 2147483647) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceFieldAndWeight(): RelevanceFieldAndWeightContext { + let localContext = new RelevanceFieldAndWeightContext(this.context, this.state); + this.enterRule(localContext, 302, OpenSearchPPLParser.RULE_relevanceFieldAndWeight); + try { + this.state = 1827; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 179, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1819; + localContext._field = this.relevanceField(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1820; + localContext._field = this.relevanceField(); + this.state = 1821; + localContext._weight = this.relevanceFieldWeight(); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 1823; + localContext._field = this.relevanceField(); + this.state = 1824; + this.match(OpenSearchPPLParser.BIT_XOR_OP); + this.state = 1825; + localContext._weight = this.relevanceFieldWeight(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceFieldWeight(): RelevanceFieldWeightContext { + let localContext = new RelevanceFieldWeightContext(this.context, this.state); + this.enterRule(localContext, 304, OpenSearchPPLParser.RULE_relevanceFieldWeight); + try { + this.state = 1833; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 180, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1829; + this.integerLiteral(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1830; + this.decimalLiteral(); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 1831; + this.doubleLiteral(); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 1832; + this.floatLiteral(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceField(): RelevanceFieldContext { + let localContext = new RelevanceFieldContext(this.context, this.state); + this.enterRule(localContext, 306, OpenSearchPPLParser.RULE_relevanceField); + try { + this.state = 1837; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.SEARCH: + case OpenSearchPPLParser.DESCRIBE: + case OpenSearchPPLParser.SHOW: + case OpenSearchPPLParser.EXPLAIN: + case OpenSearchPPLParser.FROM: + case OpenSearchPPLParser.WHERE: + case OpenSearchPPLParser.FIELDS: + case OpenSearchPPLParser.TABLE: + case OpenSearchPPLParser.RENAME: + case OpenSearchPPLParser.STATS: + case OpenSearchPPLParser.EVENTSTATS: + case OpenSearchPPLParser.DEDUP: + case OpenSearchPPLParser.SORT: + case OpenSearchPPLParser.EVAL: + case OpenSearchPPLParser.HEAD: + case OpenSearchPPLParser.BIN: + case OpenSearchPPLParser.TOP: + case OpenSearchPPLParser.RARE: + case OpenSearchPPLParser.PARSE: + case OpenSearchPPLParser.REGEX: + case OpenSearchPPLParser.REX: + case OpenSearchPPLParser.PUNCT: + case OpenSearchPPLParser.GROK: + case OpenSearchPPLParser.PATTERN: + case OpenSearchPPLParser.PATTERNS: + case OpenSearchPPLParser.NEW_FIELD: + case OpenSearchPPLParser.KMEANS: + case OpenSearchPPLParser.AD: + case OpenSearchPPLParser.ML: + case OpenSearchPPLParser.FILLNULL: + case OpenSearchPPLParser.FLATTEN: + case OpenSearchPPLParser.TRENDLINE: + case OpenSearchPPLParser.TIMECHART: + case OpenSearchPPLParser.EXPAND: + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + case OpenSearchPPLParser.METHOD: + case OpenSearchPPLParser.MAX_SAMPLE_COUNT: + case OpenSearchPPLParser.BUFFER_LIMIT: + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.LEFT_HINT: + case OpenSearchPPLParser.RIGHT_HINT: + case OpenSearchPPLParser.SOURCE: + case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.A: + case OpenSearchPPLParser.ASC: + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DESC: + case OpenSearchPPLParser.DATASOURCES: + case OpenSearchPPLParser.USING: + case OpenSearchPPLParser.WITH: + case OpenSearchPPLParser.SIMPLE: + case OpenSearchPPLParser.STANDARD: + case OpenSearchPPLParser.COST: + case OpenSearchPPLParser.EXTENDED: + case OpenSearchPPLParser.OVERRIDE: + case OpenSearchPPLParser.AUTO: + case OpenSearchPPLParser.STR: + case OpenSearchPPLParser.NUM: + case OpenSearchPPLParser.SMA: + case OpenSearchPPLParser.WMA: + case OpenSearchPPLParser.KEEPEMPTY: + case OpenSearchPPLParser.CONSECUTIVE: + case OpenSearchPPLParser.DEDUP_SPLITVALUES: + case OpenSearchPPLParser.PARTITIONS: + case OpenSearchPPLParser.ALLNUM: + case OpenSearchPPLParser.DELIM: + case OpenSearchPPLParser.BUCKET_NULLABLE: + case OpenSearchPPLParser.CENTROIDS: + case OpenSearchPPLParser.ITERATIONS: + case OpenSearchPPLParser.DISTANCE_TYPE: + case OpenSearchPPLParser.NUMBER_OF_TREES: + case OpenSearchPPLParser.SHINGLE_SIZE: + case OpenSearchPPLParser.SAMPLE_SIZE: + case OpenSearchPPLParser.OUTPUT_AFTER: + case OpenSearchPPLParser.TIME_DECAY: + case OpenSearchPPLParser.ANOMALY_RATE: + case OpenSearchPPLParser.CATEGORY_FIELD: + case OpenSearchPPLParser.TIME_FIELD: + case OpenSearchPPLParser.TIME_ZONE: + case OpenSearchPPLParser.TRAINING_DATA_SIZE: + case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + case OpenSearchPPLParser.APPEND: + case OpenSearchPPLParser.COUNTFIELD: + case OpenSearchPPLParser.SHOWCOUNT: + case OpenSearchPPLParser.INPUT: + case OpenSearchPPLParser.OUTPUT: + case OpenSearchPPLParser.PATH: + case OpenSearchPPLParser.CASE: + case OpenSearchPPLParser.ELSE: + case OpenSearchPPLParser.IN: + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.GEOIP: + case OpenSearchPPLParser.REGEXP: + case OpenSearchPPLParser.REGEX_MATCH: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.DAY_HOUR: + case OpenSearchPPLParser.DAY_MICROSECOND: + case OpenSearchPPLParser.DAY_MINUTE: + case OpenSearchPPLParser.DAY_OF_YEAR: + case OpenSearchPPLParser.DAY_SECOND: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.HOUR_MICROSECOND: + case OpenSearchPPLParser.HOUR_MINUTE: + case OpenSearchPPLParser.HOUR_OF_DAY: + case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MINUTE_MICROSECOND: + case OpenSearchPPLParser.MINUTE_OF_DAY: + case OpenSearchPPLParser.MINUTE_OF_HOUR: + case OpenSearchPPLParser.MINUTE_SECOND: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.MONTH_OF_YEAR: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.SECOND_MICROSECOND: + case OpenSearchPPLParser.SECOND_OF_MINUTE: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.WEEK_OF_YEAR: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.LOOKUP: + case OpenSearchPPLParser.IP: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.ARROW: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT_APPROX: + case OpenSearchPPLParser.ESTDC: + case OpenSearchPPLParser.ESTDC_ERROR: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MEAN: + case OpenSearchPPLParser.MEDIAN: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.MODE: + case OpenSearchPPLParser.RANGE: + case OpenSearchPPLParser.STDEV: + case OpenSearchPPLParser.STDEVP: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.SUMSQ: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.PERCENTILE: + case OpenSearchPPLParser.PERCENTILE_APPROX: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: + case OpenSearchPPLParser.TAKE: + case OpenSearchPPLParser.LIST: + case OpenSearchPPLParser.VALUES: + case OpenSearchPPLParser.PER_DAY: + case OpenSearchPPLParser.PER_HOUR: + case OpenSearchPPLParser.PER_MINUTE: + case OpenSearchPPLParser.PER_SECOND: + case OpenSearchPPLParser.RATE: + case OpenSearchPPLParser.SPARKLINE: + case OpenSearchPPLParser.C: + case OpenSearchPPLParser.DC: + case OpenSearchPPLParser.ROW_NUMBER: + case OpenSearchPPLParser.RANK: + case OpenSearchPPLParser.DENSE_RANK: + case OpenSearchPPLParser.PERCENT_RANK: + case OpenSearchPPLParser.CUME_DIST: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.NTH: + case OpenSearchPPLParser.NTILE: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CBRT: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG_WITH_BASE: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POSITION: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.ADDTIME: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATEDIFF: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.DAY_OF_MONTH: + case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.EXTRACT: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.GET_FORMAT: + case OpenSearchPPLParser.LAST_DAY: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SEC_TO_TIME: + case OpenSearchPPLParser.STR_TO_DATE: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SUBTIME: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMEDIFF: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TIME_FORMAT: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.TO_SECONDS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.WEEKDAY: + case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.REVERSE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.BETWEEN: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + case OpenSearchPPLParser.JSON_VALID: + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.COALESCE: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: + case OpenSearchPPLParser.ANALYZE_WILDCARD: + case OpenSearchPPLParser.ANALYZER: + case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case OpenSearchPPLParser.BOOST: + case OpenSearchPPLParser.CUTOFF_FREQUENCY: + case OpenSearchPPLParser.DEFAULT_FIELD: + case OpenSearchPPLParser.DEFAULT_OPERATOR: + case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: + case OpenSearchPPLParser.ESCAPE: + case OpenSearchPPLParser.FLAGS: + case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: + case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: + case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: + case OpenSearchPPLParser.FUZZY_REWRITE: + case OpenSearchPPLParser.FUZZINESS: + case OpenSearchPPLParser.LENIENT: + case OpenSearchPPLParser.LOW_FREQ_OPERATOR: + case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: + case OpenSearchPPLParser.MAX_EXPANSIONS: + case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: + case OpenSearchPPLParser.OPERATOR: + case OpenSearchPPLParser.PHRASE_SLOP: + case OpenSearchPPLParser.PREFIX_LENGTH: + case OpenSearchPPLParser.QUOTE_ANALYZER: + case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: + case OpenSearchPPLParser.REWRITE: + case OpenSearchPPLParser.SLOP: + case OpenSearchPPLParser.TIE_BREAKER: + case OpenSearchPPLParser.TYPE: + case OpenSearchPPLParser.ZERO_TERMS_QUERY: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.SEC: + case OpenSearchPPLParser.SECS: + case OpenSearchPPLParser.SECONDS: + case OpenSearchPPLParser.MINS: + case OpenSearchPPLParser.MINUTES: + case OpenSearchPPLParser.HR: + case OpenSearchPPLParser.HRS: + case OpenSearchPPLParser.HOURS: + case OpenSearchPPLParser.DAYS: + case OpenSearchPPLParser.MON: + case OpenSearchPPLParser.MONTHS: + case OpenSearchPPLParser.US: + case OpenSearchPPLParser.CS: + case OpenSearchPPLParser.DS: + case OpenSearchPPLParser.PERCENTILE_SHORTCUT: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.BQUOTA_STRING: + this.enterOuterAlt(localContext, 1); + { + this.state = 1835; + this.qualifiedName(); + } + break; + case OpenSearchPPLParser.DQUOTA_STRING: + case OpenSearchPPLParser.SQUOTA_STRING: + this.enterOuterAlt(localContext, 2); + { + this.state = 1836; + this.stringLiteral(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceQuery(): RelevanceQueryContext { + let localContext = new RelevanceQueryContext(this.context, this.state); + this.enterRule(localContext, 308, OpenSearchPPLParser.RULE_relevanceQuery); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1839; + this.relevanceArgValue(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relevanceArgValue(): RelevanceArgValueContext { + let localContext = new RelevanceArgValueContext(this.context, this.state); + this.enterRule(localContext, 310, OpenSearchPPLParser.RULE_relevanceArgValue); + try { + this.state = 1843; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 182, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1841; + this.qualifiedName(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1842; + this.literalValue(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public mathematicalFunctionName(): MathematicalFunctionNameContext { + let localContext = new MathematicalFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 312, OpenSearchPPLParser.RULE_mathematicalFunctionName); + try { + this.state = 1877; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.ABS: + this.enterOuterAlt(localContext, 1); + { + this.state = 1845; + this.match(OpenSearchPPLParser.ABS); + } + break; + case OpenSearchPPLParser.PLUS_FUCTION: + this.enterOuterAlt(localContext, 2); + { + this.state = 1846; + this.match(OpenSearchPPLParser.PLUS_FUCTION); + } + break; + case OpenSearchPPLParser.MINUS_FUCTION: + this.enterOuterAlt(localContext, 3); + { + this.state = 1847; + this.match(OpenSearchPPLParser.MINUS_FUCTION); + } + break; + case OpenSearchPPLParser.STAR_FUNCTION: + this.enterOuterAlt(localContext, 4); + { + this.state = 1848; + this.match(OpenSearchPPLParser.STAR_FUNCTION); + } + break; + case OpenSearchPPLParser.DIVIDE_FUNCTION: + this.enterOuterAlt(localContext, 5); + { + this.state = 1849; + this.match(OpenSearchPPLParser.DIVIDE_FUNCTION); + } + break; + case OpenSearchPPLParser.CBRT: + this.enterOuterAlt(localContext, 6); + { + this.state = 1850; + this.match(OpenSearchPPLParser.CBRT); + } + break; + case OpenSearchPPLParser.CEIL: + this.enterOuterAlt(localContext, 7); + { + this.state = 1851; + this.match(OpenSearchPPLParser.CEIL); + } + break; + case OpenSearchPPLParser.CEILING: + this.enterOuterAlt(localContext, 8); + { + this.state = 1852; + this.match(OpenSearchPPLParser.CEILING); + } + break; + case OpenSearchPPLParser.CONV: + this.enterOuterAlt(localContext, 9); + { + this.state = 1853; + this.match(OpenSearchPPLParser.CONV); + } + break; + case OpenSearchPPLParser.CRC32: + this.enterOuterAlt(localContext, 10); + { + this.state = 1854; + this.match(OpenSearchPPLParser.CRC32); + } + break; + case OpenSearchPPLParser.E: + this.enterOuterAlt(localContext, 11); + { + this.state = 1855; + this.match(OpenSearchPPLParser.E); + } + break; + case OpenSearchPPLParser.EXP: + this.enterOuterAlt(localContext, 12); + { + this.state = 1856; + this.match(OpenSearchPPLParser.EXP); + } + break; + case OpenSearchPPLParser.EXPM1: + this.enterOuterAlt(localContext, 13); + { + this.state = 1857; + this.match(OpenSearchPPLParser.EXPM1); + } + break; + case OpenSearchPPLParser.FLOOR: + this.enterOuterAlt(localContext, 14); + { + this.state = 1858; + this.match(OpenSearchPPLParser.FLOOR); + } + break; + case OpenSearchPPLParser.LN: + this.enterOuterAlt(localContext, 15); + { + this.state = 1859; + this.match(OpenSearchPPLParser.LN); + } + break; + case OpenSearchPPLParser.LOG: + this.enterOuterAlt(localContext, 16); + { + this.state = 1860; + this.match(OpenSearchPPLParser.LOG); + } + break; + case OpenSearchPPLParser.LOG_WITH_BASE: + this.enterOuterAlt(localContext, 17); + { + this.state = 1861; + this.match(OpenSearchPPLParser.LOG_WITH_BASE); + } + break; + case OpenSearchPPLParser.MOD: + this.enterOuterAlt(localContext, 18); + { + this.state = 1862; + this.match(OpenSearchPPLParser.MOD); + } + break; + case OpenSearchPPLParser.MODULUS: + this.enterOuterAlt(localContext, 19); + { + this.state = 1863; + this.match(OpenSearchPPLParser.MODULUS); + } + break; + case OpenSearchPPLParser.PI: + this.enterOuterAlt(localContext, 20); + { + this.state = 1864; + this.match(OpenSearchPPLParser.PI); + } + break; + case OpenSearchPPLParser.POW: + this.enterOuterAlt(localContext, 21); + { + this.state = 1865; + this.match(OpenSearchPPLParser.POW); + } + break; + case OpenSearchPPLParser.POWER: + this.enterOuterAlt(localContext, 22); + { + this.state = 1866; + this.match(OpenSearchPPLParser.POWER); + } + break; + case OpenSearchPPLParser.RAND: + this.enterOuterAlt(localContext, 23); + { + this.state = 1867; + this.match(OpenSearchPPLParser.RAND); + } + break; + case OpenSearchPPLParser.ROUND: + this.enterOuterAlt(localContext, 24); + { + this.state = 1868; + this.match(OpenSearchPPLParser.ROUND); + } + break; + case OpenSearchPPLParser.SIGN: + this.enterOuterAlt(localContext, 25); + { + this.state = 1869; + this.match(OpenSearchPPLParser.SIGN); + } + break; + case OpenSearchPPLParser.SQRT: + this.enterOuterAlt(localContext, 26); + { + this.state = 1870; + this.match(OpenSearchPPLParser.SQRT); + } + break; + case OpenSearchPPLParser.TRUNCATE: + this.enterOuterAlt(localContext, 27); + { + this.state = 1871; + this.match(OpenSearchPPLParser.TRUNCATE); + } + break; + case OpenSearchPPLParser.RINT: + this.enterOuterAlt(localContext, 28); + { + this.state = 1872; + this.match(OpenSearchPPLParser.RINT); + } + break; + case OpenSearchPPLParser.SIGNUM: + this.enterOuterAlt(localContext, 29); + { + this.state = 1873; + this.match(OpenSearchPPLParser.SIGNUM); + } + break; + case OpenSearchPPLParser.SUM: + this.enterOuterAlt(localContext, 30); + { + this.state = 1874; + this.match(OpenSearchPPLParser.SUM); + } + break; + case OpenSearchPPLParser.AVG: + this.enterOuterAlt(localContext, 31); + { + this.state = 1875; + this.match(OpenSearchPPLParser.AVG); + } + break; + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + this.enterOuterAlt(localContext, 32); + { + this.state = 1876; + this.trigonometricFunctionName(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public geoipFunctionName(): GeoipFunctionNameContext { + let localContext = new GeoipFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 314, OpenSearchPPLParser.RULE_geoipFunctionName); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1879; + this.match(OpenSearchPPLParser.GEOIP); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public collectionFunctionName(): CollectionFunctionNameContext { + let localContext = new CollectionFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 316, OpenSearchPPLParser.RULE_collectionFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1881; + _la = this.tokenStream.LA(1); + if(!(_la === 115 || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 127) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public trigonometricFunctionName(): TrigonometricFunctionNameContext { + let localContext = new TrigonometricFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 318, OpenSearchPPLParser.RULE_trigonometricFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1883; + _la = this.tokenStream.LA(1); + if(!(((((_la - 272)) & ~0x1F) === 0 && ((1 << (_la - 272)) & 4095) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public jsonFunctionName(): JsonFunctionNameContext { + let localContext = new JsonFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 320, OpenSearchPPLParser.RULE_jsonFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1885; + _la = this.tokenStream.LA(1); + if(!(((((_la - 374)) & ~0x1F) === 0 && ((1 << (_la - 374)) & 1023) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public cryptographicFunctionName(): CryptographicFunctionNameContext { + let localContext = new CryptographicFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 322, OpenSearchPPLParser.RULE_cryptographicFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1887; + _la = this.tokenStream.LA(1); + if(!(((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 7) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public dateTimeFunctionName(): DateTimeFunctionNameContext { + let localContext = new DateTimeFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 324, OpenSearchPPLParser.RULE_dateTimeFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1889; + _la = this.tokenStream.LA(1); + if(!(((((_la - 125)) & ~0x1F) === 0 && ((1 << (_la - 125)) & 1038960967) !== 0) || ((((_la - 287)) & ~0x1F) === 0 && ((1 << (_la - 287)) & 4292607999) !== 0) || ((((_la - 319)) & ~0x1F) === 0 && ((1 << (_la - 319)) & 1048191) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public getFormatFunctionCall(): GetFormatFunctionCallContext { + let localContext = new GetFormatFunctionCallContext(this.context, this.state); + this.enterRule(localContext, 326, OpenSearchPPLParser.RULE_getFormatFunctionCall); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1891; + this.match(OpenSearchPPLParser.GET_FORMAT); + this.state = 1892; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1893; + this.getFormatType(); + this.state = 1894; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1895; + this.functionArg(); + this.state = 1896; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public getFormatType(): GetFormatTypeContext { + let localContext = new GetFormatTypeContext(this.context, this.state); + this.enterRule(localContext, 328, OpenSearchPPLParser.RULE_getFormatType); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1898; + _la = this.tokenStream.LA(1); + if(!(_la === 126 || ((((_la - 294)) & ~0x1F) === 0 && ((1 << (_la - 294)) & 2684354561) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public extractFunctionCall(): ExtractFunctionCallContext { + let localContext = new ExtractFunctionCallContext(this.context, this.state); + this.enterRule(localContext, 330, OpenSearchPPLParser.RULE_extractFunctionCall); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1900; + this.match(OpenSearchPPLParser.EXTRACT); + this.state = 1901; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1902; + this.datetimePart(); + this.state = 1903; + this.match(OpenSearchPPLParser.FROM); + this.state = 1904; + this.functionArg(); + this.state = 1905; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public simpleDateTimePart(): SimpleDateTimePartContext { + let localContext = new SimpleDateTimePartContext(this.context, this.state); + this.enterRule(localContext, 332, OpenSearchPPLParser.RULE_simpleDateTimePart); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1907; + _la = this.tokenStream.LA(1); + if(!(((((_la - 127)) & ~0x1F) === 0 && ((1 << (_la - 127)) & 174608449) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public complexDateTimePart(): ComplexDateTimePartContext { + let localContext = new ComplexDateTimePartContext(this.context, this.state); + this.enterRule(localContext, 334, OpenSearchPPLParser.RULE_complexDateTimePart); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1909; + _la = this.tokenStream.LA(1); + if(!(((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 138560215) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public datetimePart(): DatetimePartContext { + let localContext = new DatetimePartContext(this.context, this.state); + this.enterRule(localContext, 336, OpenSearchPPLParser.RULE_datetimePart); + try { + this.state = 1913; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.YEAR: + this.enterOuterAlt(localContext, 1); + { + this.state = 1911; + this.simpleDateTimePart(); + } + break; + case OpenSearchPPLParser.DAY_HOUR: + case OpenSearchPPLParser.DAY_MICROSECOND: + case OpenSearchPPLParser.DAY_MINUTE: + case OpenSearchPPLParser.DAY_SECOND: + case OpenSearchPPLParser.HOUR_MICROSECOND: + case OpenSearchPPLParser.HOUR_MINUTE: + case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.MINUTE_MICROSECOND: + case OpenSearchPPLParser.MINUTE_SECOND: + case OpenSearchPPLParser.SECOND_MICROSECOND: + case OpenSearchPPLParser.YEAR_MONTH: + this.enterOuterAlt(localContext, 2); + { + this.state = 1912; + this.complexDateTimePart(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public timestampFunctionCall(): TimestampFunctionCallContext { + let localContext = new TimestampFunctionCallContext(this.context, this.state); + this.enterRule(localContext, 338, OpenSearchPPLParser.RULE_timestampFunctionCall); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1915; + this.timestampFunctionName(); + this.state = 1916; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1917; + this.simpleDateTimePart(); + this.state = 1918; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1919; + localContext._firstArg = this.functionArg(); + this.state = 1920; + this.match(OpenSearchPPLParser.COMMA); + this.state = 1921; + localContext._secondArg = this.functionArg(); + this.state = 1922; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public timestampFunctionName(): TimestampFunctionNameContext { + let localContext = new TimestampFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 340, OpenSearchPPLParser.RULE_timestampFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1924; + _la = this.tokenStream.LA(1); + if(!(_la === 326 || _la === 327)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public conditionFunctionName(): ConditionFunctionNameContext { + let localContext = new ConditionFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 342, OpenSearchPPLParser.RULE_conditionFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1926; + _la = this.tokenStream.LA(1); + if(!(_la === 124 || _la === 220 || _la === 221 || ((((_la - 358)) & ~0x1F) === 0 && ((1 << (_la - 358)) & 33007) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public flowControlFunctionName(): FlowControlFunctionNameContext { + let localContext = new FlowControlFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 344, OpenSearchPPLParser.RULE_flowControlFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1928; + _la = this.tokenStream.LA(1); + if(!(((((_la - 384)) & ~0x1F) === 0 && ((1 << (_la - 384)) & 23) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public systemFunctionName(): SystemFunctionNameContext { + let localContext = new SystemFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 346, OpenSearchPPLParser.RULE_systemFunctionName); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1930; + this.match(OpenSearchPPLParser.TYPEOF); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public textFunctionName(): TextFunctionNameContext { + let localContext = new TextFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 348, OpenSearchPPLParser.RULE_textFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1932; + _la = this.tokenStream.LA(1); + if(!(((((_la - 339)) & ~0x1F) === 0 && ((1 << (_la - 339)) & 262111) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public positionFunctionName(): PositionFunctionNameContext { + let localContext = new PositionFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 350, OpenSearchPPLParser.RULE_positionFunctionName); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1934; + this.match(OpenSearchPPLParser.POSITION); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public comparisonOperator(): ComparisonOperatorContext { + let localContext = new ComparisonOperatorContext(this.context, this.state); + this.enterRule(localContext, 352, OpenSearchPPLParser.RULE_comparisonOperator); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1936; + _la = this.tokenStream.LA(1); + if(!(_la === 123 || ((((_la - 170)) & ~0x1F) === 0 && ((1 << (_la - 170)) & 127) !== 0) || _la === 358)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public singleFieldRelevanceFunctionName(): SingleFieldRelevanceFunctionNameContext { + let localContext = new SingleFieldRelevanceFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 354, OpenSearchPPLParser.RULE_singleFieldRelevanceFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1938; + _la = this.tokenStream.LA(1); + if(!(((((_la - 389)) & ~0x1F) === 0 && ((1 << (_la - 389)) & 15) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public multiFieldRelevanceFunctionName(): MultiFieldRelevanceFunctionNameContext { + let localContext = new MultiFieldRelevanceFunctionNameContext(this.context, this.state); + this.enterRule(localContext, 356, OpenSearchPPLParser.RULE_multiFieldRelevanceFunctionName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1940; + _la = this.tokenStream.LA(1); + if(!(((((_la - 393)) & ~0x1F) === 0 && ((1 << (_la - 393)) & 7) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public literalValue(): LiteralValueContext { + let localContext = new LiteralValueContext(this.context, this.state); + this.enterRule(localContext, 358, OpenSearchPPLParser.RULE_literalValue); + try { + this.state = 1950; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 185, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1942; + this.intervalLiteral(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1943; + this.stringLiteral(); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 1944; + this.integerLiteral(); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 1945; + this.decimalLiteral(); + } + break; + case 5: + this.enterOuterAlt(localContext, 5); + { + this.state = 1946; + this.doubleLiteral(); + } + break; + case 6: + this.enterOuterAlt(localContext, 6); + { + this.state = 1947; + this.floatLiteral(); + } + break; + case 7: + this.enterOuterAlt(localContext, 7); + { + this.state = 1948; + this.booleanLiteral(); + } + break; + case 8: + this.enterOuterAlt(localContext, 8); + { + this.state = 1949; + this.datetimeLiteral(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public intervalLiteral(): IntervalLiteralContext { + let localContext = new IntervalLiteralContext(this.context, this.state); + this.enterRule(localContext, 360, OpenSearchPPLParser.RULE_intervalLiteral); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1952; + this.match(OpenSearchPPLParser.INTERVAL); + this.state = 1953; + this.valueExpression(0); + this.state = 1954; + this.intervalUnit(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public stringLiteral(): StringLiteralContext { + let localContext = new StringLiteralContext(this.context, this.state); + this.enterRule(localContext, 362, OpenSearchPPLParser.RULE_stringLiteral); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1956; + _la = this.tokenStream.LA(1); + if(!(_la === 462 || _la === 463)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public integerLiteral(): IntegerLiteralContext { + let localContext = new IntegerLiteralContext(this.context, this.state); + this.enterRule(localContext, 364, OpenSearchPPLParser.RULE_integerLiteral); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1959; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 177 || _la === 178) { + { + this.state = 1958; + _la = this.tokenStream.LA(1); + if(!(_la === 177 || _la === 178)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 1961; + this.match(OpenSearchPPLParser.INTEGER_LITERAL); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public decimalLiteral(): DecimalLiteralContext { + let localContext = new DecimalLiteralContext(this.context, this.state); + this.enterRule(localContext, 366, OpenSearchPPLParser.RULE_decimalLiteral); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1964; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 177 || _la === 178) { + { + this.state = 1963; + _la = this.tokenStream.LA(1); + if(!(_la === 177 || _la === 178)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 1966; + this.match(OpenSearchPPLParser.DECIMAL_LITERAL); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public doubleLiteral(): DoubleLiteralContext { + let localContext = new DoubleLiteralContext(this.context, this.state); + this.enterRule(localContext, 368, OpenSearchPPLParser.RULE_doubleLiteral); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1969; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 177 || _la === 178) { + { + this.state = 1968; + _la = this.tokenStream.LA(1); + if(!(_la === 177 || _la === 178)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 1971; + this.match(OpenSearchPPLParser.DOUBLE_LITERAL); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public floatLiteral(): FloatLiteralContext { + let localContext = new FloatLiteralContext(this.context, this.state); + this.enterRule(localContext, 370, OpenSearchPPLParser.RULE_floatLiteral); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1974; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 177 || _la === 178) { + { + this.state = 1973; + _la = this.tokenStream.LA(1); + if(!(_la === 177 || _la === 178)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 1976; + this.match(OpenSearchPPLParser.FLOAT_LITERAL); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public booleanLiteral(): BooleanLiteralContext { + let localContext = new BooleanLiteralContext(this.context, this.state); + this.enterRule(localContext, 372, OpenSearchPPLParser.RULE_booleanLiteral); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1978; + _la = this.tokenStream.LA(1); + if(!(_la === 121 || _la === 122)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public datetimeLiteral(): DatetimeLiteralContext { + let localContext = new DatetimeLiteralContext(this.context, this.state); + this.enterRule(localContext, 374, OpenSearchPPLParser.RULE_datetimeLiteral); + try { + this.state = 1983; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.DATE: + this.enterOuterAlt(localContext, 1); + { + this.state = 1980; + this.dateLiteral(); + } + break; + case OpenSearchPPLParser.TIME: + this.enterOuterAlt(localContext, 2); + { + this.state = 1981; + this.timeLiteral(); + } + break; + case OpenSearchPPLParser.TIMESTAMP: + this.enterOuterAlt(localContext, 3); + { + this.state = 1982; + this.timestampLiteral(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public dateLiteral(): DateLiteralContext { + let localContext = new DateLiteralContext(this.context, this.state); + this.enterRule(localContext, 376, OpenSearchPPLParser.RULE_dateLiteral); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1985; + this.match(OpenSearchPPLParser.DATE); + this.state = 1986; + localContext._date = this.stringLiteral(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public timeLiteral(): TimeLiteralContext { + let localContext = new TimeLiteralContext(this.context, this.state); + this.enterRule(localContext, 378, OpenSearchPPLParser.RULE_timeLiteral); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1988; + this.match(OpenSearchPPLParser.TIME); + this.state = 1989; + localContext._time = this.stringLiteral(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } public timestampLiteral(): TimestampLiteralContext { let localContext = new TimestampLiteralContext(this.context, this.state); - this.enterRule(localContext, 216, OpenSearchPPLParser.RULE_timestampLiteral); + this.enterRule(localContext, 380, OpenSearchPPLParser.RULE_timestampLiteral); try { this.enterOuterAlt(localContext, 1); { - this.state = 1008; + this.state = 1991; this.match(OpenSearchPPLParser.TIMESTAMP); - this.state = 1009; + this.state = 1992; localContext._timestamp = this.stringLiteral(); } } @@ -6438,14 +13993,14 @@ export class OpenSearchPPLParser extends antlr.Parser { } public intervalUnit(): IntervalUnitContext { let localContext = new IntervalUnitContext(this.context, this.state); - this.enterRule(localContext, 218, OpenSearchPPLParser.RULE_intervalUnit); + this.enterRule(localContext, 382, OpenSearchPPLParser.RULE_intervalUnit); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1011; + this.state = 1994; _la = this.tokenStream.LA(1); - if(!(((((_la - 70)) & ~0x1F) === 0 && ((1 << (_la - 70)) & 451728879) !== 0))) { + if(!(((((_la - 127)) & ~0x1F) === 0 && ((1 << (_la - 127)) & 451728879) !== 0))) { this.errorHandler.recoverInline(this); } else { @@ -6467,22 +14022,1114 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public timespanUnit(): TimespanUnitContext { - let localContext = new TimespanUnitContext(this.context, this.state); - this.enterRule(localContext, 220, OpenSearchPPLParser.RULE_timespanUnit); + public timespanUnit(): TimespanUnitContext { + let localContext = new TimespanUnitContext(this.context, this.state); + this.enterRule(localContext, 384, OpenSearchPPLParser.RULE_timespanUnit); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1996; + _la = this.tokenStream.LA(1); + if(!(_la === 67 || ((((_la - 127)) & ~0x1F) === 0 && ((1 << (_la - 127)) & 174612545) !== 0) || ((((_la - 433)) & ~0x1F) === 0 && ((1 << (_la - 433)) & 2097151) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public valueList(): ValueListContext { + let localContext = new ValueListContext(this.context, this.state); + this.enterRule(localContext, 386, OpenSearchPPLParser.RULE_valueList); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1998; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 1999; + this.literalValue(); + this.state = 2004; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 2000; + this.match(OpenSearchPPLParser.COMMA); + this.state = 2001; + this.literalValue(); + } + } + this.state = 2006; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 2007; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public qualifiedName(): QualifiedNameContext { + let localContext = new QualifiedNameContext(this.context, this.state); + this.enterRule(localContext, 388, OpenSearchPPLParser.RULE_qualifiedName); + try { + let alternative: number; + localContext = new IdentsAsQualifiedNameContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2009; + this.ident(); + this.state = 2014; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 192, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 2010; + this.match(OpenSearchPPLParser.DOT); + this.state = 2011; + this.ident(); + } + } + } + this.state = 2016; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 192, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public tableQualifiedName(): TableQualifiedNameContext { + let localContext = new TableQualifiedNameContext(this.context, this.state); + this.enterRule(localContext, 390, OpenSearchPPLParser.RULE_tableQualifiedName); + try { + let alternative: number; + localContext = new IdentsAsTableQualifiedNameContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2017; + this.tableIdent(); + this.state = 2022; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 193, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 2018; + this.match(OpenSearchPPLParser.DOT); + this.state = 2019; + this.ident(); + } + } + } + this.state = 2024; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 193, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public wcQualifiedName(): WcQualifiedNameContext { + let localContext = new WcQualifiedNameContext(this.context, this.state); + this.enterRule(localContext, 392, OpenSearchPPLParser.RULE_wcQualifiedName); + try { + let alternative: number; + localContext = new IdentsAsWildcardQualifiedNameContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2025; + this.wildcard(); + this.state = 2030; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 194, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 2026; + this.match(OpenSearchPPLParser.DOT); + this.state = 2027; + this.wildcard(); + } + } + } + this.state = 2032; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 194, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public identifierSeq(): IdentifierSeqContext { + let localContext = new IdentifierSeqContext(this.context, this.state); + this.enterRule(localContext, 394, OpenSearchPPLParser.RULE_identifierSeq); + let _la: number; + try { + this.state = 2052; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.SEARCH: + case OpenSearchPPLParser.DESCRIBE: + case OpenSearchPPLParser.SHOW: + case OpenSearchPPLParser.EXPLAIN: + case OpenSearchPPLParser.FROM: + case OpenSearchPPLParser.WHERE: + case OpenSearchPPLParser.FIELDS: + case OpenSearchPPLParser.TABLE: + case OpenSearchPPLParser.RENAME: + case OpenSearchPPLParser.STATS: + case OpenSearchPPLParser.EVENTSTATS: + case OpenSearchPPLParser.DEDUP: + case OpenSearchPPLParser.SORT: + case OpenSearchPPLParser.EVAL: + case OpenSearchPPLParser.HEAD: + case OpenSearchPPLParser.BIN: + case OpenSearchPPLParser.TOP: + case OpenSearchPPLParser.RARE: + case OpenSearchPPLParser.PARSE: + case OpenSearchPPLParser.REGEX: + case OpenSearchPPLParser.REX: + case OpenSearchPPLParser.PUNCT: + case OpenSearchPPLParser.GROK: + case OpenSearchPPLParser.PATTERN: + case OpenSearchPPLParser.PATTERNS: + case OpenSearchPPLParser.NEW_FIELD: + case OpenSearchPPLParser.KMEANS: + case OpenSearchPPLParser.AD: + case OpenSearchPPLParser.ML: + case OpenSearchPPLParser.FILLNULL: + case OpenSearchPPLParser.FLATTEN: + case OpenSearchPPLParser.TRENDLINE: + case OpenSearchPPLParser.TIMECHART: + case OpenSearchPPLParser.EXPAND: + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + case OpenSearchPPLParser.METHOD: + case OpenSearchPPLParser.MAX_SAMPLE_COUNT: + case OpenSearchPPLParser.BUFFER_LIMIT: + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.LEFT_HINT: + case OpenSearchPPLParser.RIGHT_HINT: + case OpenSearchPPLParser.SOURCE: + case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.A: + case OpenSearchPPLParser.ASC: + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DESC: + case OpenSearchPPLParser.DATASOURCES: + case OpenSearchPPLParser.USING: + case OpenSearchPPLParser.WITH: + case OpenSearchPPLParser.SIMPLE: + case OpenSearchPPLParser.STANDARD: + case OpenSearchPPLParser.COST: + case OpenSearchPPLParser.EXTENDED: + case OpenSearchPPLParser.OVERRIDE: + case OpenSearchPPLParser.AUTO: + case OpenSearchPPLParser.STR: + case OpenSearchPPLParser.NUM: + case OpenSearchPPLParser.SMA: + case OpenSearchPPLParser.WMA: + case OpenSearchPPLParser.KEEPEMPTY: + case OpenSearchPPLParser.CONSECUTIVE: + case OpenSearchPPLParser.DEDUP_SPLITVALUES: + case OpenSearchPPLParser.PARTITIONS: + case OpenSearchPPLParser.ALLNUM: + case OpenSearchPPLParser.DELIM: + case OpenSearchPPLParser.BUCKET_NULLABLE: + case OpenSearchPPLParser.CENTROIDS: + case OpenSearchPPLParser.ITERATIONS: + case OpenSearchPPLParser.DISTANCE_TYPE: + case OpenSearchPPLParser.NUMBER_OF_TREES: + case OpenSearchPPLParser.SHINGLE_SIZE: + case OpenSearchPPLParser.SAMPLE_SIZE: + case OpenSearchPPLParser.OUTPUT_AFTER: + case OpenSearchPPLParser.TIME_DECAY: + case OpenSearchPPLParser.ANOMALY_RATE: + case OpenSearchPPLParser.CATEGORY_FIELD: + case OpenSearchPPLParser.TIME_FIELD: + case OpenSearchPPLParser.TIME_ZONE: + case OpenSearchPPLParser.TRAINING_DATA_SIZE: + case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + case OpenSearchPPLParser.APPEND: + case OpenSearchPPLParser.COUNTFIELD: + case OpenSearchPPLParser.SHOWCOUNT: + case OpenSearchPPLParser.INPUT: + case OpenSearchPPLParser.OUTPUT: + case OpenSearchPPLParser.PATH: + case OpenSearchPPLParser.CASE: + case OpenSearchPPLParser.ELSE: + case OpenSearchPPLParser.IN: + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.GEOIP: + case OpenSearchPPLParser.REGEXP: + case OpenSearchPPLParser.REGEX_MATCH: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.DAY_HOUR: + case OpenSearchPPLParser.DAY_MICROSECOND: + case OpenSearchPPLParser.DAY_MINUTE: + case OpenSearchPPLParser.DAY_OF_YEAR: + case OpenSearchPPLParser.DAY_SECOND: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.HOUR_MICROSECOND: + case OpenSearchPPLParser.HOUR_MINUTE: + case OpenSearchPPLParser.HOUR_OF_DAY: + case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MINUTE_MICROSECOND: + case OpenSearchPPLParser.MINUTE_OF_DAY: + case OpenSearchPPLParser.MINUTE_OF_HOUR: + case OpenSearchPPLParser.MINUTE_SECOND: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.MONTH_OF_YEAR: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.SECOND_MICROSECOND: + case OpenSearchPPLParser.SECOND_OF_MINUTE: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.WEEK_OF_YEAR: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.LOOKUP: + case OpenSearchPPLParser.IP: + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.BACKTICK: + case OpenSearchPPLParser.ARROW: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT_APPROX: + case OpenSearchPPLParser.ESTDC: + case OpenSearchPPLParser.ESTDC_ERROR: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MEAN: + case OpenSearchPPLParser.MEDIAN: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.MODE: + case OpenSearchPPLParser.RANGE: + case OpenSearchPPLParser.STDEV: + case OpenSearchPPLParser.STDEVP: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.SUMSQ: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.PERCENTILE: + case OpenSearchPPLParser.PERCENTILE_APPROX: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: + case OpenSearchPPLParser.TAKE: + case OpenSearchPPLParser.LIST: + case OpenSearchPPLParser.VALUES: + case OpenSearchPPLParser.PER_DAY: + case OpenSearchPPLParser.PER_HOUR: + case OpenSearchPPLParser.PER_MINUTE: + case OpenSearchPPLParser.PER_SECOND: + case OpenSearchPPLParser.RATE: + case OpenSearchPPLParser.SPARKLINE: + case OpenSearchPPLParser.C: + case OpenSearchPPLParser.DC: + case OpenSearchPPLParser.ROW_NUMBER: + case OpenSearchPPLParser.RANK: + case OpenSearchPPLParser.DENSE_RANK: + case OpenSearchPPLParser.PERCENT_RANK: + case OpenSearchPPLParser.CUME_DIST: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.NTH: + case OpenSearchPPLParser.NTILE: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CBRT: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG_WITH_BASE: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POSITION: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.ADDTIME: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATEDIFF: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.DAY_OF_MONTH: + case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.EXTRACT: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.GET_FORMAT: + case OpenSearchPPLParser.LAST_DAY: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SEC_TO_TIME: + case OpenSearchPPLParser.STR_TO_DATE: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SUBTIME: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMEDIFF: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TIME_FORMAT: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.TO_SECONDS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.WEEKDAY: + case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.REVERSE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.BETWEEN: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + case OpenSearchPPLParser.JSON_VALID: + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.COALESCE: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: + case OpenSearchPPLParser.ANALYZE_WILDCARD: + case OpenSearchPPLParser.ANALYZER: + case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case OpenSearchPPLParser.BOOST: + case OpenSearchPPLParser.CUTOFF_FREQUENCY: + case OpenSearchPPLParser.DEFAULT_FIELD: + case OpenSearchPPLParser.DEFAULT_OPERATOR: + case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: + case OpenSearchPPLParser.ESCAPE: + case OpenSearchPPLParser.FLAGS: + case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: + case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: + case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: + case OpenSearchPPLParser.FUZZY_REWRITE: + case OpenSearchPPLParser.FUZZINESS: + case OpenSearchPPLParser.LENIENT: + case OpenSearchPPLParser.LOW_FREQ_OPERATOR: + case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: + case OpenSearchPPLParser.MAX_EXPANSIONS: + case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: + case OpenSearchPPLParser.OPERATOR: + case OpenSearchPPLParser.PHRASE_SLOP: + case OpenSearchPPLParser.PREFIX_LENGTH: + case OpenSearchPPLParser.QUOTE_ANALYZER: + case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: + case OpenSearchPPLParser.REWRITE: + case OpenSearchPPLParser.SLOP: + case OpenSearchPPLParser.TIE_BREAKER: + case OpenSearchPPLParser.TYPE: + case OpenSearchPPLParser.ZERO_TERMS_QUERY: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.SEC: + case OpenSearchPPLParser.SECS: + case OpenSearchPPLParser.SECONDS: + case OpenSearchPPLParser.MINS: + case OpenSearchPPLParser.MINUTES: + case OpenSearchPPLParser.HR: + case OpenSearchPPLParser.HRS: + case OpenSearchPPLParser.HOURS: + case OpenSearchPPLParser.DAYS: + case OpenSearchPPLParser.MON: + case OpenSearchPPLParser.MONTHS: + case OpenSearchPPLParser.US: + case OpenSearchPPLParser.CS: + case OpenSearchPPLParser.DS: + case OpenSearchPPLParser.PERCENTILE_SHORTCUT: + case OpenSearchPPLParser.ID: + case OpenSearchPPLParser.BQUOTA_STRING: + localContext = new IdentsAsQualifiedNameSeqContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2033; + this.qualifiedName(); + this.state = 2038; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 2034; + this.match(OpenSearchPPLParser.COMMA); + this.state = 2035; + this.qualifiedName(); + } + } + this.state = 2040; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + break; + case OpenSearchPPLParser.LT_PRTHS: + localContext = new IdentsAsQualifiedNameSeqContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 2041; + this.match(OpenSearchPPLParser.LT_PRTHS); + this.state = 2042; + this.qualifiedName(); + this.state = 2047; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 168) { + { + { + this.state = 2043; + this.match(OpenSearchPPLParser.COMMA); + this.state = 2044; + this.qualifiedName(); + } + } + this.state = 2049; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 2050; + this.match(OpenSearchPPLParser.RT_PRTHS); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public ident(): IdentContext { + let localContext = new IdentContext(this.context, this.state); + this.enterRule(localContext, 396, OpenSearchPPLParser.RULE_ident); let _la: number; try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1013; - _la = this.tokenStream.LA(1); - if(!(_la === 31 || ((((_la - 70)) & ~0x1F) === 0 && ((1 << (_la - 70)) & 174612545) !== 0) || ((((_la - 321)) & ~0x1F) === 0 && ((1 << (_la - 321)) & 127) !== 0))) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } + this.state = 2064; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case OpenSearchPPLParser.DOT: + case OpenSearchPPLParser.ID: + this.enterOuterAlt(localContext, 1); + { + this.state = 2055; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 169) { + { + this.state = 2054; + this.match(OpenSearchPPLParser.DOT); + } + } + + this.state = 2057; + this.match(OpenSearchPPLParser.ID); + } + break; + case OpenSearchPPLParser.BACKTICK: + this.enterOuterAlt(localContext, 2); + { + this.state = 2058; + this.match(OpenSearchPPLParser.BACKTICK); + this.state = 2059; + this.ident(); + this.state = 2060; + this.match(OpenSearchPPLParser.BACKTICK); + } + break; + case OpenSearchPPLParser.BQUOTA_STRING: + this.enterOuterAlt(localContext, 3); + { + this.state = 2062; + this.match(OpenSearchPPLParser.BQUOTA_STRING); + } + break; + case OpenSearchPPLParser.SEARCH: + case OpenSearchPPLParser.DESCRIBE: + case OpenSearchPPLParser.SHOW: + case OpenSearchPPLParser.EXPLAIN: + case OpenSearchPPLParser.FROM: + case OpenSearchPPLParser.WHERE: + case OpenSearchPPLParser.FIELDS: + case OpenSearchPPLParser.TABLE: + case OpenSearchPPLParser.RENAME: + case OpenSearchPPLParser.STATS: + case OpenSearchPPLParser.EVENTSTATS: + case OpenSearchPPLParser.DEDUP: + case OpenSearchPPLParser.SORT: + case OpenSearchPPLParser.EVAL: + case OpenSearchPPLParser.HEAD: + case OpenSearchPPLParser.BIN: + case OpenSearchPPLParser.TOP: + case OpenSearchPPLParser.RARE: + case OpenSearchPPLParser.PARSE: + case OpenSearchPPLParser.REGEX: + case OpenSearchPPLParser.REX: + case OpenSearchPPLParser.PUNCT: + case OpenSearchPPLParser.GROK: + case OpenSearchPPLParser.PATTERN: + case OpenSearchPPLParser.PATTERNS: + case OpenSearchPPLParser.NEW_FIELD: + case OpenSearchPPLParser.KMEANS: + case OpenSearchPPLParser.AD: + case OpenSearchPPLParser.ML: + case OpenSearchPPLParser.FILLNULL: + case OpenSearchPPLParser.FLATTEN: + case OpenSearchPPLParser.TRENDLINE: + case OpenSearchPPLParser.TIMECHART: + case OpenSearchPPLParser.EXPAND: + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + case OpenSearchPPLParser.METHOD: + case OpenSearchPPLParser.MAX_SAMPLE_COUNT: + case OpenSearchPPLParser.BUFFER_LIMIT: + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.LEFT_HINT: + case OpenSearchPPLParser.RIGHT_HINT: + case OpenSearchPPLParser.SOURCE: + case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.A: + case OpenSearchPPLParser.ASC: + case OpenSearchPPLParser.D: + case OpenSearchPPLParser.DESC: + case OpenSearchPPLParser.DATASOURCES: + case OpenSearchPPLParser.USING: + case OpenSearchPPLParser.WITH: + case OpenSearchPPLParser.SIMPLE: + case OpenSearchPPLParser.STANDARD: + case OpenSearchPPLParser.COST: + case OpenSearchPPLParser.EXTENDED: + case OpenSearchPPLParser.OVERRIDE: + case OpenSearchPPLParser.AUTO: + case OpenSearchPPLParser.STR: + case OpenSearchPPLParser.NUM: + case OpenSearchPPLParser.SMA: + case OpenSearchPPLParser.WMA: + case OpenSearchPPLParser.KEEPEMPTY: + case OpenSearchPPLParser.CONSECUTIVE: + case OpenSearchPPLParser.DEDUP_SPLITVALUES: + case OpenSearchPPLParser.PARTITIONS: + case OpenSearchPPLParser.ALLNUM: + case OpenSearchPPLParser.DELIM: + case OpenSearchPPLParser.BUCKET_NULLABLE: + case OpenSearchPPLParser.CENTROIDS: + case OpenSearchPPLParser.ITERATIONS: + case OpenSearchPPLParser.DISTANCE_TYPE: + case OpenSearchPPLParser.NUMBER_OF_TREES: + case OpenSearchPPLParser.SHINGLE_SIZE: + case OpenSearchPPLParser.SAMPLE_SIZE: + case OpenSearchPPLParser.OUTPUT_AFTER: + case OpenSearchPPLParser.TIME_DECAY: + case OpenSearchPPLParser.ANOMALY_RATE: + case OpenSearchPPLParser.CATEGORY_FIELD: + case OpenSearchPPLParser.TIME_FIELD: + case OpenSearchPPLParser.TIME_ZONE: + case OpenSearchPPLParser.TRAINING_DATA_SIZE: + case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + case OpenSearchPPLParser.APPEND: + case OpenSearchPPLParser.COUNTFIELD: + case OpenSearchPPLParser.SHOWCOUNT: + case OpenSearchPPLParser.INPUT: + case OpenSearchPPLParser.OUTPUT: + case OpenSearchPPLParser.PATH: + case OpenSearchPPLParser.CASE: + case OpenSearchPPLParser.ELSE: + case OpenSearchPPLParser.IN: + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.GEOIP: + case OpenSearchPPLParser.REGEXP: + case OpenSearchPPLParser.REGEX_MATCH: + case OpenSearchPPLParser.CONVERT_TZ: + case OpenSearchPPLParser.DATETIME: + case OpenSearchPPLParser.DAY: + case OpenSearchPPLParser.DAY_HOUR: + case OpenSearchPPLParser.DAY_MICROSECOND: + case OpenSearchPPLParser.DAY_MINUTE: + case OpenSearchPPLParser.DAY_OF_YEAR: + case OpenSearchPPLParser.DAY_SECOND: + case OpenSearchPPLParser.HOUR: + case OpenSearchPPLParser.HOUR_MICROSECOND: + case OpenSearchPPLParser.HOUR_MINUTE: + case OpenSearchPPLParser.HOUR_OF_DAY: + case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.INTERVAL: + case OpenSearchPPLParser.MICROSECOND: + case OpenSearchPPLParser.MILLISECOND: + case OpenSearchPPLParser.MINUTE: + case OpenSearchPPLParser.MINUTE_MICROSECOND: + case OpenSearchPPLParser.MINUTE_OF_DAY: + case OpenSearchPPLParser.MINUTE_OF_HOUR: + case OpenSearchPPLParser.MINUTE_SECOND: + case OpenSearchPPLParser.MONTH: + case OpenSearchPPLParser.MONTH_OF_YEAR: + case OpenSearchPPLParser.QUARTER: + case OpenSearchPPLParser.SECOND: + case OpenSearchPPLParser.SECOND_MICROSECOND: + case OpenSearchPPLParser.SECOND_OF_MINUTE: + case OpenSearchPPLParser.WEEK: + case OpenSearchPPLParser.WEEK_OF_YEAR: + case OpenSearchPPLParser.YEAR: + case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.LOOKUP: + case OpenSearchPPLParser.IP: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.ARROW: + case OpenSearchPPLParser.AVG: + case OpenSearchPPLParser.COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT_APPROX: + case OpenSearchPPLParser.ESTDC: + case OpenSearchPPLParser.ESTDC_ERROR: + case OpenSearchPPLParser.MAX: + case OpenSearchPPLParser.MEAN: + case OpenSearchPPLParser.MEDIAN: + case OpenSearchPPLParser.MIN: + case OpenSearchPPLParser.MODE: + case OpenSearchPPLParser.RANGE: + case OpenSearchPPLParser.STDEV: + case OpenSearchPPLParser.STDEVP: + case OpenSearchPPLParser.SUM: + case OpenSearchPPLParser.SUMSQ: + case OpenSearchPPLParser.VAR_SAMP: + case OpenSearchPPLParser.VAR_POP: + case OpenSearchPPLParser.STDDEV_SAMP: + case OpenSearchPPLParser.STDDEV_POP: + case OpenSearchPPLParser.PERCENTILE: + case OpenSearchPPLParser.PERCENTILE_APPROX: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: + case OpenSearchPPLParser.TAKE: + case OpenSearchPPLParser.LIST: + case OpenSearchPPLParser.VALUES: + case OpenSearchPPLParser.PER_DAY: + case OpenSearchPPLParser.PER_HOUR: + case OpenSearchPPLParser.PER_MINUTE: + case OpenSearchPPLParser.PER_SECOND: + case OpenSearchPPLParser.RATE: + case OpenSearchPPLParser.SPARKLINE: + case OpenSearchPPLParser.C: + case OpenSearchPPLParser.DC: + case OpenSearchPPLParser.ROW_NUMBER: + case OpenSearchPPLParser.RANK: + case OpenSearchPPLParser.DENSE_RANK: + case OpenSearchPPLParser.PERCENT_RANK: + case OpenSearchPPLParser.CUME_DIST: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.NTH: + case OpenSearchPPLParser.NTILE: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: + case OpenSearchPPLParser.ABS: + case OpenSearchPPLParser.CBRT: + case OpenSearchPPLParser.CEIL: + case OpenSearchPPLParser.CEILING: + case OpenSearchPPLParser.CONV: + case OpenSearchPPLParser.CRC32: + case OpenSearchPPLParser.E: + case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: + case OpenSearchPPLParser.FLOOR: + case OpenSearchPPLParser.LN: + case OpenSearchPPLParser.LOG: + case OpenSearchPPLParser.LOG_WITH_BASE: + case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: + case OpenSearchPPLParser.PI: + case OpenSearchPPLParser.POSITION: + case OpenSearchPPLParser.POW: + case OpenSearchPPLParser.POWER: + case OpenSearchPPLParser.RAND: + case OpenSearchPPLParser.ROUND: + case OpenSearchPPLParser.SIGN: + case OpenSearchPPLParser.SQRT: + case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: + case OpenSearchPPLParser.ACOS: + case OpenSearchPPLParser.ASIN: + case OpenSearchPPLParser.ATAN: + case OpenSearchPPLParser.ATAN2: + case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: + case OpenSearchPPLParser.COT: + case OpenSearchPPLParser.DEGREES: + case OpenSearchPPLParser.RADIANS: + case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: + case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: + case OpenSearchPPLParser.ADDDATE: + case OpenSearchPPLParser.ADDTIME: + case OpenSearchPPLParser.CURDATE: + case OpenSearchPPLParser.CURRENT_DATE: + case OpenSearchPPLParser.CURRENT_TIME: + case OpenSearchPPLParser.CURRENT_TIMESTAMP: + case OpenSearchPPLParser.CURTIME: + case OpenSearchPPLParser.DATE: + case OpenSearchPPLParser.DATEDIFF: + case OpenSearchPPLParser.DATE_ADD: + case OpenSearchPPLParser.DATE_FORMAT: + case OpenSearchPPLParser.DATE_SUB: + case OpenSearchPPLParser.DAYNAME: + case OpenSearchPPLParser.DAYOFMONTH: + case OpenSearchPPLParser.DAYOFWEEK: + case OpenSearchPPLParser.DAYOFYEAR: + case OpenSearchPPLParser.DAY_OF_MONTH: + case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.EXTRACT: + case OpenSearchPPLParser.FROM_DAYS: + case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.GET_FORMAT: + case OpenSearchPPLParser.LAST_DAY: + case OpenSearchPPLParser.LOCALTIME: + case OpenSearchPPLParser.LOCALTIMESTAMP: + case OpenSearchPPLParser.MAKEDATE: + case OpenSearchPPLParser.MAKETIME: + case OpenSearchPPLParser.MONTHNAME: + case OpenSearchPPLParser.NOW: + case OpenSearchPPLParser.PERIOD_ADD: + case OpenSearchPPLParser.PERIOD_DIFF: + case OpenSearchPPLParser.SEC_TO_TIME: + case OpenSearchPPLParser.STR_TO_DATE: + case OpenSearchPPLParser.SUBDATE: + case OpenSearchPPLParser.SUBTIME: + case OpenSearchPPLParser.SYSDATE: + case OpenSearchPPLParser.TIME: + case OpenSearchPPLParser.TIMEDIFF: + case OpenSearchPPLParser.TIMESTAMP: + case OpenSearchPPLParser.TIME_FORMAT: + case OpenSearchPPLParser.TIME_TO_SEC: + case OpenSearchPPLParser.TO_DAYS: + case OpenSearchPPLParser.TO_SECONDS: + case OpenSearchPPLParser.UNIX_TIMESTAMP: + case OpenSearchPPLParser.UTC_DATE: + case OpenSearchPPLParser.UTC_TIME: + case OpenSearchPPLParser.UTC_TIMESTAMP: + case OpenSearchPPLParser.WEEKDAY: + case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: + case OpenSearchPPLParser.SUBSTR: + case OpenSearchPPLParser.SUBSTRING: + case OpenSearchPPLParser.LTRIM: + case OpenSearchPPLParser.RTRIM: + case OpenSearchPPLParser.TRIM: + case OpenSearchPPLParser.LOWER: + case OpenSearchPPLParser.UPPER: + case OpenSearchPPLParser.CONCAT: + case OpenSearchPPLParser.CONCAT_WS: + case OpenSearchPPLParser.LENGTH: + case OpenSearchPPLParser.STRCMP: + case OpenSearchPPLParser.RIGHT: + case OpenSearchPPLParser.LEFT: + case OpenSearchPPLParser.ASCII: + case OpenSearchPPLParser.LOCATE: + case OpenSearchPPLParser.REPLACE: + case OpenSearchPPLParser.REVERSE: + case OpenSearchPPLParser.CAST: + case OpenSearchPPLParser.LIKE: + case OpenSearchPPLParser.ISNULL: + case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.BETWEEN: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + case OpenSearchPPLParser.JSON_VALID: + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: + case OpenSearchPPLParser.IFNULL: + case OpenSearchPPLParser.NULLIF: + case OpenSearchPPLParser.IF: + case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.COALESCE: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: + case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: + case OpenSearchPPLParser.ANALYZE_WILDCARD: + case OpenSearchPPLParser.ANALYZER: + case OpenSearchPPLParser.AUTO_GENERATE_SYNONYMS_PHRASE_QUERY: + case OpenSearchPPLParser.BOOST: + case OpenSearchPPLParser.CUTOFF_FREQUENCY: + case OpenSearchPPLParser.DEFAULT_FIELD: + case OpenSearchPPLParser.DEFAULT_OPERATOR: + case OpenSearchPPLParser.ENABLE_POSITION_INCREMENTS: + case OpenSearchPPLParser.ESCAPE: + case OpenSearchPPLParser.FLAGS: + case OpenSearchPPLParser.FUZZY_MAX_EXPANSIONS: + case OpenSearchPPLParser.FUZZY_PREFIX_LENGTH: + case OpenSearchPPLParser.FUZZY_TRANSPOSITIONS: + case OpenSearchPPLParser.FUZZY_REWRITE: + case OpenSearchPPLParser.FUZZINESS: + case OpenSearchPPLParser.LENIENT: + case OpenSearchPPLParser.LOW_FREQ_OPERATOR: + case OpenSearchPPLParser.MAX_DETERMINIZED_STATES: + case OpenSearchPPLParser.MAX_EXPANSIONS: + case OpenSearchPPLParser.MINIMUM_SHOULD_MATCH: + case OpenSearchPPLParser.OPERATOR: + case OpenSearchPPLParser.PHRASE_SLOP: + case OpenSearchPPLParser.PREFIX_LENGTH: + case OpenSearchPPLParser.QUOTE_ANALYZER: + case OpenSearchPPLParser.QUOTE_FIELD_SUFFIX: + case OpenSearchPPLParser.REWRITE: + case OpenSearchPPLParser.SLOP: + case OpenSearchPPLParser.TIE_BREAKER: + case OpenSearchPPLParser.TYPE: + case OpenSearchPPLParser.ZERO_TERMS_QUERY: + case OpenSearchPPLParser.SPAN: + case OpenSearchPPLParser.MS: + case OpenSearchPPLParser.S: + case OpenSearchPPLParser.M: + case OpenSearchPPLParser.H: + case OpenSearchPPLParser.W: + case OpenSearchPPLParser.Q: + case OpenSearchPPLParser.Y: + case OpenSearchPPLParser.SEC: + case OpenSearchPPLParser.SECS: + case OpenSearchPPLParser.SECONDS: + case OpenSearchPPLParser.MINS: + case OpenSearchPPLParser.MINUTES: + case OpenSearchPPLParser.HR: + case OpenSearchPPLParser.HRS: + case OpenSearchPPLParser.HOURS: + case OpenSearchPPLParser.DAYS: + case OpenSearchPPLParser.MON: + case OpenSearchPPLParser.MONTHS: + case OpenSearchPPLParser.US: + case OpenSearchPPLParser.CS: + case OpenSearchPPLParser.DS: + case OpenSearchPPLParser.PERCENTILE_SHORTCUT: + this.enterOuterAlt(localContext, 4); + { + this.state = 2063; + this.keywordsCanBeId(); + } + break; + default: + throw new antlr.NoViableAltException(this); } } catch (re) { @@ -6498,35 +15145,25 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public valueList(): ValueListContext { - let localContext = new ValueListContext(this.context, this.state); - this.enterRule(localContext, 222, OpenSearchPPLParser.RULE_valueList); + public tableIdent(): TableIdentContext { + let localContext = new TableIdentContext(this.context, this.state); + this.enterRule(localContext, 398, OpenSearchPPLParser.RULE_tableIdent); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1015; - this.match(OpenSearchPPLParser.LT_PRTHS); - this.state = 1016; - this.literalValue(); - this.state = 1021; + this.state = 2067; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 110) { - { + if (_la === 456) { { - this.state = 1017; - this.match(OpenSearchPPLParser.COMMA); - this.state = 1018; - this.literalValue(); - } + this.state = 2066; + this.match(OpenSearchPPLParser.CLUSTER); } - this.state = 1023; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); } - this.state = 1024; - this.match(OpenSearchPPLParser.RT_PRTHS); + + this.state = 2069; + this.ident(); } } catch (re) { @@ -6542,118 +15179,83 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public qualifiedName(): QualifiedNameContext { - let localContext = new QualifiedNameContext(this.context, this.state); - this.enterRule(localContext, 224, OpenSearchPPLParser.RULE_qualifiedName); + public wildcard(): WildcardContext { + let localContext = new WildcardContext(this.context, this.state); + this.enterRule(localContext, 400, OpenSearchPPLParser.RULE_wildcard); + let _la: number; try { let alternative: number; - localContext = new IdentsAsQualifiedNameContext(localContext); - this.enterOuterAlt(localContext, 1); - { - this.state = 1026; - this.ident(); - this.state = 1031; + this.state = 2094; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 80, this.context); - while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { - if (alternative === 1) { - { - { - this.state = 1027; - this.match(OpenSearchPPLParser.DOT); - this.state = 1028; - this.ident(); - } + switch (this.interpreter.adaptivePredict(this.tokenStream, 203, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 2071; + this.ident(); + this.state = 2076; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 201, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 2072; + this.match(OpenSearchPPLParser.MODULE); + this.state = 2073; + this.ident(); + } + } } + this.state = 2078; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 201, this.context); } - this.state = 1033; + this.state = 2080; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 80, this.context); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public tableQualifiedName(): TableQualifiedNameContext { - let localContext = new TableQualifiedNameContext(this.context, this.state); - this.enterRule(localContext, 226, OpenSearchPPLParser.RULE_tableQualifiedName); - try { - let alternative: number; - localContext = new IdentsAsTableQualifiedNameContext(localContext); - this.enterOuterAlt(localContext, 1); - { - this.state = 1034; - this.tableIdent(); - this.state = 1039; - this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 81, this.context); - while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { - if (alternative === 1) { - { + _la = this.tokenStream.LA(1); + if (_la === 181) { { - this.state = 1035; - this.match(OpenSearchPPLParser.DOT); - this.state = 1036; - this.ident(); - } + this.state = 2079; + this.match(OpenSearchPPLParser.MODULE); } } - this.state = 1041; - this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 81, this.context); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public wcQualifiedName(): WcQualifiedNameContext { - let localContext = new WcQualifiedNameContext(this.context, this.state); - this.enterRule(localContext, 228, OpenSearchPPLParser.RULE_wcQualifiedName); - let _la: number; - try { - localContext = new IdentsAsWildcardQualifiedNameContext(localContext); - this.enterOuterAlt(localContext, 1); - { - this.state = 1042; - this.wildcard(); - this.state = 1047; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 111) { + + } + break; + case 2: + this.enterOuterAlt(localContext, 2); { + this.state = 2082; + this.match(OpenSearchPPLParser.SINGLE_QUOTE); + this.state = 2083; + this.wildcard(); + this.state = 2084; + this.match(OpenSearchPPLParser.SINGLE_QUOTE); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); { - this.state = 1043; - this.match(OpenSearchPPLParser.DOT); - this.state = 1044; + this.state = 2086; + this.match(OpenSearchPPLParser.DOUBLE_QUOTE); + this.state = 2087; this.wildcard(); + this.state = 2088; + this.match(OpenSearchPPLParser.DOUBLE_QUOTE); } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 2090; + this.match(OpenSearchPPLParser.BACKTICK); + this.state = 2091; + this.wildcard(); + this.state = 2092; + this.match(OpenSearchPPLParser.BACKTICK); } - this.state = 1049; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } + break; } } catch (re) { @@ -6669,67 +15271,34 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public ident(): IdentContext { - let localContext = new IdentContext(this.context, this.state); - this.enterRule(localContext, 230, OpenSearchPPLParser.RULE_ident); - let _la: number; + public keywordsCanBeId(): KeywordsCanBeIdContext { + let localContext = new KeywordsCanBeIdContext(this.context, this.state); + this.enterRule(localContext, 402, OpenSearchPPLParser.RULE_keywordsCanBeId); try { - this.state = 1060; + this.state = 2098; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { - case OpenSearchPPLParser.DOT: - case OpenSearchPPLParser.ID: - this.enterOuterAlt(localContext, 1); - { - this.state = 1051; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 111) { - { - this.state = 1050; - this.match(OpenSearchPPLParser.DOT); - } - } - - this.state = 1053; - this.match(OpenSearchPPLParser.ID); - } - break; - case OpenSearchPPLParser.BACKTICK: - this.enterOuterAlt(localContext, 2); - { - this.state = 1054; - this.match(OpenSearchPPLParser.BACKTICK); - this.state = 1055; - this.ident(); - this.state = 1056; - this.match(OpenSearchPPLParser.BACKTICK); - } - break; - case OpenSearchPPLParser.BQUOTA_STRING: - this.enterOuterAlt(localContext, 3); - { - this.state = 1058; - this.match(OpenSearchPPLParser.BQUOTA_STRING); - } - break; case OpenSearchPPLParser.SEARCH: case OpenSearchPPLParser.DESCRIBE: case OpenSearchPPLParser.SHOW: + case OpenSearchPPLParser.EXPLAIN: case OpenSearchPPLParser.FROM: case OpenSearchPPLParser.WHERE: case OpenSearchPPLParser.FIELDS: + case OpenSearchPPLParser.TABLE: case OpenSearchPPLParser.RENAME: case OpenSearchPPLParser.STATS: + case OpenSearchPPLParser.EVENTSTATS: case OpenSearchPPLParser.DEDUP: case OpenSearchPPLParser.SORT: case OpenSearchPPLParser.EVAL: case OpenSearchPPLParser.HEAD: + case OpenSearchPPLParser.BIN: case OpenSearchPPLParser.TOP: case OpenSearchPPLParser.RARE: case OpenSearchPPLParser.PARSE: - case OpenSearchPPLParser.METHOD: case OpenSearchPPLParser.REGEX: + case OpenSearchPPLParser.REX: case OpenSearchPPLParser.PUNCT: case OpenSearchPPLParser.GROK: case OpenSearchPPLParser.PATTERN: @@ -6738,21 +15307,51 @@ export class OpenSearchPPLParser extends antlr.Parser { case OpenSearchPPLParser.KMEANS: case OpenSearchPPLParser.AD: case OpenSearchPPLParser.ML: + case OpenSearchPPLParser.FILLNULL: + case OpenSearchPPLParser.FLATTEN: + case OpenSearchPPLParser.TRENDLINE: + case OpenSearchPPLParser.TIMECHART: + case OpenSearchPPLParser.EXPAND: + case OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD: + case OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE: + case OpenSearchPPLParser.METHOD: + case OpenSearchPPLParser.MAX_SAMPLE_COUNT: + case OpenSearchPPLParser.BUFFER_LIMIT: + case OpenSearchPPLParser.JOIN: + case OpenSearchPPLParser.INNER: + case OpenSearchPPLParser.OUTER: + case OpenSearchPPLParser.FULL: + case OpenSearchPPLParser.SEMI: + case OpenSearchPPLParser.ANTI: + case OpenSearchPPLParser.CROSS: + case OpenSearchPPLParser.LEFT_HINT: + case OpenSearchPPLParser.RIGHT_HINT: case OpenSearchPPLParser.SOURCE: case OpenSearchPPLParser.INDEX: + case OpenSearchPPLParser.A: + case OpenSearchPPLParser.ASC: case OpenSearchPPLParser.D: case OpenSearchPPLParser.DESC: case OpenSearchPPLParser.DATASOURCES: - case OpenSearchPPLParser.SORTBY: + case OpenSearchPPLParser.USING: + case OpenSearchPPLParser.WITH: + case OpenSearchPPLParser.SIMPLE: + case OpenSearchPPLParser.STANDARD: + case OpenSearchPPLParser.COST: + case OpenSearchPPLParser.EXTENDED: + case OpenSearchPPLParser.OVERRIDE: + case OpenSearchPPLParser.AUTO: case OpenSearchPPLParser.STR: - case OpenSearchPPLParser.IP: case OpenSearchPPLParser.NUM: + case OpenSearchPPLParser.SMA: + case OpenSearchPPLParser.WMA: case OpenSearchPPLParser.KEEPEMPTY: case OpenSearchPPLParser.CONSECUTIVE: case OpenSearchPPLParser.DEDUP_SPLITVALUES: case OpenSearchPPLParser.PARTITIONS: case OpenSearchPPLParser.ALLNUM: case OpenSearchPPLParser.DELIM: + case OpenSearchPPLParser.BUCKET_NULLABLE: case OpenSearchPPLParser.CENTROIDS: case OpenSearchPPLParser.ITERATIONS: case OpenSearchPPLParser.DISTANCE_TYPE: @@ -6767,6 +15366,18 @@ export class OpenSearchPPLParser extends antlr.Parser { case OpenSearchPPLParser.TIME_ZONE: case OpenSearchPPLParser.TRAINING_DATA_SIZE: case OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD: + case OpenSearchPPLParser.APPEND: + case OpenSearchPPLParser.COUNTFIELD: + case OpenSearchPPLParser.SHOWCOUNT: + case OpenSearchPPLParser.INPUT: + case OpenSearchPPLParser.OUTPUT: + case OpenSearchPPLParser.PATH: + case OpenSearchPPLParser.CASE: + case OpenSearchPPLParser.ELSE: + case OpenSearchPPLParser.EXISTS: + case OpenSearchPPLParser.GEOIP: + case OpenSearchPPLParser.REGEXP: + case OpenSearchPPLParser.REGEX_MATCH: case OpenSearchPPLParser.CONVERT_TZ: case OpenSearchPPLParser.DATETIME: case OpenSearchPPLParser.DAY: @@ -6780,6 +15391,7 @@ export class OpenSearchPPLParser extends antlr.Parser { case OpenSearchPPLParser.HOUR_MINUTE: case OpenSearchPPLParser.HOUR_OF_DAY: case OpenSearchPPLParser.HOUR_SECOND: + case OpenSearchPPLParser.INTERVAL: case OpenSearchPPLParser.MICROSECOND: case OpenSearchPPLParser.MILLISECOND: case OpenSearchPPLParser.MINUTE: @@ -6797,9 +15409,15 @@ export class OpenSearchPPLParser extends antlr.Parser { case OpenSearchPPLParser.WEEK_OF_YEAR: case OpenSearchPPLParser.YEAR: case OpenSearchPPLParser.YEAR_MONTH: + case OpenSearchPPLParser.LOOKUP: + case OpenSearchPPLParser.IP: + case OpenSearchPPLParser.PLUS: + case OpenSearchPPLParser.MINUS: + case OpenSearchPPLParser.ARROW: case OpenSearchPPLParser.AVG: case OpenSearchPPLParser.COUNT: case OpenSearchPPLParser.DISTINCT_COUNT: + case OpenSearchPPLParser.DISTINCT_COUNT_APPROX: case OpenSearchPPLParser.ESTDC: case OpenSearchPPLParser.ESTDC_ERROR: case OpenSearchPPLParser.MAX: @@ -6817,15 +15435,12 @@ export class OpenSearchPPLParser extends antlr.Parser { case OpenSearchPPLParser.STDDEV_SAMP: case OpenSearchPPLParser.STDDEV_POP: case OpenSearchPPLParser.PERCENTILE: + case OpenSearchPPLParser.PERCENTILE_APPROX: + case OpenSearchPPLParser.EARLIEST: + case OpenSearchPPLParser.LATEST: case OpenSearchPPLParser.TAKE: - case OpenSearchPPLParser.FIRST: - case OpenSearchPPLParser.LAST: case OpenSearchPPLParser.LIST: case OpenSearchPPLParser.VALUES: - case OpenSearchPPLParser.EARLIEST: - case OpenSearchPPLParser.EARLIEST_TIME: - case OpenSearchPPLParser.LATEST: - case OpenSearchPPLParser.LATEST_TIME: case OpenSearchPPLParser.PER_DAY: case OpenSearchPPLParser.PER_HOUR: case OpenSearchPPLParser.PER_MINUTE: @@ -6834,6 +15449,19 @@ export class OpenSearchPPLParser extends antlr.Parser { case OpenSearchPPLParser.SPARKLINE: case OpenSearchPPLParser.C: case OpenSearchPPLParser.DC: + case OpenSearchPPLParser.ROW_NUMBER: + case OpenSearchPPLParser.RANK: + case OpenSearchPPLParser.DENSE_RANK: + case OpenSearchPPLParser.PERCENT_RANK: + case OpenSearchPPLParser.CUME_DIST: + case OpenSearchPPLParser.FIRST: + case OpenSearchPPLParser.LAST: + case OpenSearchPPLParser.NTH: + case OpenSearchPPLParser.NTILE: + case OpenSearchPPLParser.PLUS_FUCTION: + case OpenSearchPPLParser.MINUS_FUCTION: + case OpenSearchPPLParser.STAR_FUNCTION: + case OpenSearchPPLParser.DIVIDE_FUNCTION: case OpenSearchPPLParser.ABS: case OpenSearchPPLParser.CBRT: case OpenSearchPPLParser.CEIL: @@ -6842,12 +15470,13 @@ export class OpenSearchPPLParser extends antlr.Parser { case OpenSearchPPLParser.CRC32: case OpenSearchPPLParser.E: case OpenSearchPPLParser.EXP: + case OpenSearchPPLParser.EXPM1: case OpenSearchPPLParser.FLOOR: case OpenSearchPPLParser.LN: case OpenSearchPPLParser.LOG: - case OpenSearchPPLParser.LOG10: - case OpenSearchPPLParser.LOG2: + case OpenSearchPPLParser.LOG_WITH_BASE: case OpenSearchPPLParser.MOD: + case OpenSearchPPLParser.MODULUS: case OpenSearchPPLParser.PI: case OpenSearchPPLParser.POSITION: case OpenSearchPPLParser.POW: @@ -6857,16 +15486,23 @@ export class OpenSearchPPLParser extends antlr.Parser { case OpenSearchPPLParser.SIGN: case OpenSearchPPLParser.SQRT: case OpenSearchPPLParser.TRUNCATE: + case OpenSearchPPLParser.RINT: + case OpenSearchPPLParser.SIGNUM: case OpenSearchPPLParser.ACOS: case OpenSearchPPLParser.ASIN: case OpenSearchPPLParser.ATAN: case OpenSearchPPLParser.ATAN2: case OpenSearchPPLParser.COS: + case OpenSearchPPLParser.COSH: case OpenSearchPPLParser.COT: case OpenSearchPPLParser.DEGREES: case OpenSearchPPLParser.RADIANS: case OpenSearchPPLParser.SIN: + case OpenSearchPPLParser.SINH: case OpenSearchPPLParser.TAN: + case OpenSearchPPLParser.MD5: + case OpenSearchPPLParser.SHA1: + case OpenSearchPPLParser.SHA2: case OpenSearchPPLParser.ADDDATE: case OpenSearchPPLParser.ADDTIME: case OpenSearchPPLParser.CURDATE: @@ -6885,8 +15521,10 @@ export class OpenSearchPPLParser extends antlr.Parser { case OpenSearchPPLParser.DAYOFYEAR: case OpenSearchPPLParser.DAY_OF_MONTH: case OpenSearchPPLParser.DAY_OF_WEEK: + case OpenSearchPPLParser.EXTRACT: case OpenSearchPPLParser.FROM_DAYS: case OpenSearchPPLParser.FROM_UNIXTIME: + case OpenSearchPPLParser.GET_FORMAT: case OpenSearchPPLParser.LAST_DAY: case OpenSearchPPLParser.LOCALTIME: case OpenSearchPPLParser.LOCALTIMESTAMP: @@ -6914,6 +15552,7 @@ export class OpenSearchPPLParser extends antlr.Parser { case OpenSearchPPLParser.UTC_TIMESTAMP: case OpenSearchPPLParser.WEEKDAY: case OpenSearchPPLParser.YEARWEEK: + case OpenSearchPPLParser.STRFTIME: case OpenSearchPPLParser.SUBSTR: case OpenSearchPPLParser.SUBSTRING: case OpenSearchPPLParser.LTRIM: @@ -6931,13 +15570,45 @@ export class OpenSearchPPLParser extends antlr.Parser { case OpenSearchPPLParser.LOCATE: case OpenSearchPPLParser.REPLACE: case OpenSearchPPLParser.REVERSE: + case OpenSearchPPLParser.CAST: case OpenSearchPPLParser.LIKE: case OpenSearchPPLParser.ISNULL: case OpenSearchPPLParser.ISNOTNULL: + case OpenSearchPPLParser.CIDRMATCH: + case OpenSearchPPLParser.BETWEEN: + case OpenSearchPPLParser.ISPRESENT: + case OpenSearchPPLParser.ISEMPTY: + case OpenSearchPPLParser.ISBLANK: + case OpenSearchPPLParser.ARRAY: + case OpenSearchPPLParser.ARRAY_LENGTH: + case OpenSearchPPLParser.MVJOIN: + case OpenSearchPPLParser.FORALL: + case OpenSearchPPLParser.FILTER: + case OpenSearchPPLParser.TRANSFORM: + case OpenSearchPPLParser.REDUCE: + case OpenSearchPPLParser.JSON_VALID: + case OpenSearchPPLParser.JSON: + case OpenSearchPPLParser.JSON_OBJECT: + case OpenSearchPPLParser.JSON_ARRAY: + case OpenSearchPPLParser.JSON_ARRAY_LENGTH: + case OpenSearchPPLParser.JSON_EXTRACT: + case OpenSearchPPLParser.JSON_KEYS: + case OpenSearchPPLParser.JSON_SET: + case OpenSearchPPLParser.JSON_DELETE: + case OpenSearchPPLParser.JSON_APPEND: + case OpenSearchPPLParser.JSON_EXTEND: case OpenSearchPPLParser.IFNULL: case OpenSearchPPLParser.NULLIF: case OpenSearchPPLParser.IF: case OpenSearchPPLParser.TYPEOF: + case OpenSearchPPLParser.COALESCE: + case OpenSearchPPLParser.MATCH: + case OpenSearchPPLParser.MATCH_PHRASE: + case OpenSearchPPLParser.MATCH_PHRASE_PREFIX: + case OpenSearchPPLParser.MATCH_BOOL_PREFIX: + case OpenSearchPPLParser.SIMPLE_QUERY_STRING: + case OpenSearchPPLParser.MULTI_MATCH: + case OpenSearchPPLParser.QUERY_STRING: case OpenSearchPPLParser.ALLOW_LEADING_WILDCARD: case OpenSearchPPLParser.ANALYZE_WILDCARD: case OpenSearchPPLParser.ANALYZER: @@ -6977,140 +15648,36 @@ export class OpenSearchPPLParser extends antlr.Parser { case OpenSearchPPLParser.W: case OpenSearchPPLParser.Q: case OpenSearchPPLParser.Y: - this.enterOuterAlt(localContext, 4); - { - this.state = 1059; - this.keywordsCanBeId(); - } - break; - default: - throw new antlr.NoViableAltException(this); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public tableIdent(): TableIdentContext { - let localContext = new TableIdentContext(this.context, this.state); - this.enterRule(localContext, 232, OpenSearchPPLParser.RULE_tableIdent); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1063; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 329) { - { - this.state = 1062; - this.match(OpenSearchPPLParser.CLUSTER); - } - } - - this.state = 1065; - this.ident(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public wildcard(): WildcardContext { - let localContext = new WildcardContext(this.context, this.state); - this.enterRule(localContext, 234, OpenSearchPPLParser.RULE_wildcard); - let _la: number; - try { - let alternative: number; - this.state = 1090; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 88, this.context) ) { - case 1: + case OpenSearchPPLParser.SEC: + case OpenSearchPPLParser.SECS: + case OpenSearchPPLParser.SECONDS: + case OpenSearchPPLParser.MINS: + case OpenSearchPPLParser.MINUTES: + case OpenSearchPPLParser.HR: + case OpenSearchPPLParser.HRS: + case OpenSearchPPLParser.HOURS: + case OpenSearchPPLParser.DAYS: + case OpenSearchPPLParser.MON: + case OpenSearchPPLParser.MONTHS: + case OpenSearchPPLParser.US: + case OpenSearchPPLParser.CS: + case OpenSearchPPLParser.DS: + case OpenSearchPPLParser.PERCENTILE_SHORTCUT: this.enterOuterAlt(localContext, 1); { - this.state = 1067; - this.ident(); - this.state = 1072; - this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 86, this.context); - while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { - if (alternative === 1) { - { - { - this.state = 1068; - this.match(OpenSearchPPLParser.MODULE); - this.state = 1069; - this.ident(); - } - } - } - this.state = 1074; - this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 86, this.context); - } - this.state = 1076; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 122) { - { - this.state = 1075; - this.match(OpenSearchPPLParser.MODULE); - } - } - + this.state = 2096; + this.searchableKeyWord(); } break; - case 2: + case OpenSearchPPLParser.IN: this.enterOuterAlt(localContext, 2); { - this.state = 1078; - this.match(OpenSearchPPLParser.SINGLE_QUOTE); - this.state = 1079; - this.wildcard(); - this.state = 1080; - this.match(OpenSearchPPLParser.SINGLE_QUOTE); - } - break; - case 3: - this.enterOuterAlt(localContext, 3); - { - this.state = 1082; - this.match(OpenSearchPPLParser.DOUBLE_QUOTE); - this.state = 1083; - this.wildcard(); - this.state = 1084; - this.match(OpenSearchPPLParser.DOUBLE_QUOTE); - } - break; - case 4: - this.enterOuterAlt(localContext, 4); - { - this.state = 1086; - this.match(OpenSearchPPLParser.BACKTICK); - this.state = 1087; - this.wildcard(); - this.state = 1088; - this.match(OpenSearchPPLParser.BACKTICK); + this.state = 2097; + this.match(OpenSearchPPLParser.IN); } break; + default: + throw new antlr.NoViableAltException(this); } } catch (re) { @@ -7126,1269 +15693,4849 @@ export class OpenSearchPPLParser extends antlr.Parser { } return localContext; } - public keywordsCanBeId(): KeywordsCanBeIdContext { - let localContext = new KeywordsCanBeIdContext(this.context, this.state); - this.enterRule(localContext, 236, OpenSearchPPLParser.RULE_keywordsCanBeId); + public searchableKeyWord(): SearchableKeyWordContext { + let localContext = new SearchableKeyWordContext(this.context, this.state); + this.enterRule(localContext, 404, OpenSearchPPLParser.RULE_searchableKeyWord); try { - this.state = 1192; + this.state = 2212; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 89, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 205, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1092; + this.state = 2100; this.match(OpenSearchPPLParser.D); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1093; + this.state = 2101; this.timespanUnit(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1094; + this.state = 2102; this.match(OpenSearchPPLParser.SPAN); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1095; + this.state = 2103; this.evalFunctionName(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 1096; - this.relevanceArgName(); + this.state = 2104; + this.jsonFunctionName(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 1097; - this.intervalUnit(); + this.state = 2105; + this.relevanceArgName(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 1098; - this.dateTimeFunctionName(); + this.state = 2106; + this.intervalUnit(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 1099; - this.textFunctionName(); + this.state = 2107; + this.trendlineType(); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 1100; - this.mathematicalFunctionName(); + this.state = 2108; + this.singleFieldRelevanceFunctionName(); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 1101; - this.positionFunctionName(); + this.state = 2109; + this.multiFieldRelevanceFunctionName(); } break; case 11: this.enterOuterAlt(localContext, 11); { - this.state = 1102; - this.match(OpenSearchPPLParser.SEARCH); + this.state = 2110; + this.commandName(); } break; case 12: this.enterOuterAlt(localContext, 12); { - this.state = 1103; - this.match(OpenSearchPPLParser.DESCRIBE); + this.state = 2111; + this.collectionFunctionName(); } break; case 13: this.enterOuterAlt(localContext, 13); { - this.state = 1104; - this.match(OpenSearchPPLParser.SHOW); + this.state = 2112; + this.match(OpenSearchPPLParser.REGEX); } break; case 14: this.enterOuterAlt(localContext, 14); { - this.state = 1105; - this.match(OpenSearchPPLParser.FROM); + this.state = 2113; + this.explainMode(); } break; case 15: this.enterOuterAlt(localContext, 15); { - this.state = 1106; - this.match(OpenSearchPPLParser.WHERE); + this.state = 2114; + this.match(OpenSearchPPLParser.REGEXP); } break; case 16: this.enterOuterAlt(localContext, 16); { - this.state = 1107; - this.match(OpenSearchPPLParser.FIELDS); + this.state = 2115; + this.match(OpenSearchPPLParser.CASE); } break; case 17: this.enterOuterAlt(localContext, 17); { - this.state = 1108; - this.match(OpenSearchPPLParser.RENAME); + this.state = 2116; + this.match(OpenSearchPPLParser.ELSE); } break; case 18: this.enterOuterAlt(localContext, 18); { - this.state = 1109; - this.match(OpenSearchPPLParser.STATS); + this.state = 2117; + this.match(OpenSearchPPLParser.ARROW); } break; case 19: this.enterOuterAlt(localContext, 19); { - this.state = 1110; - this.match(OpenSearchPPLParser.DEDUP); + this.state = 2118; + this.match(OpenSearchPPLParser.BETWEEN); } break; case 20: this.enterOuterAlt(localContext, 20); { - this.state = 1111; - this.match(OpenSearchPPLParser.SORT); + this.state = 2119; + this.match(OpenSearchPPLParser.EXISTS); } break; case 21: this.enterOuterAlt(localContext, 21); { - this.state = 1112; - this.match(OpenSearchPPLParser.EVAL); + this.state = 2120; + this.match(OpenSearchPPLParser.SOURCE); } break; case 22: this.enterOuterAlt(localContext, 22); { - this.state = 1113; - this.match(OpenSearchPPLParser.HEAD); + this.state = 2121; + this.match(OpenSearchPPLParser.INDEX); } break; case 23: this.enterOuterAlt(localContext, 23); { - this.state = 1114; - this.match(OpenSearchPPLParser.TOP); + this.state = 2122; + this.match(OpenSearchPPLParser.A); } break; case 24: this.enterOuterAlt(localContext, 24); { - this.state = 1115; - this.match(OpenSearchPPLParser.RARE); + this.state = 2123; + this.match(OpenSearchPPLParser.ASC); } break; case 25: this.enterOuterAlt(localContext, 25); { - this.state = 1116; - this.match(OpenSearchPPLParser.PARSE); + this.state = 2124; + this.match(OpenSearchPPLParser.DESC); } break; case 26: this.enterOuterAlt(localContext, 26); { - this.state = 1117; - this.match(OpenSearchPPLParser.METHOD); + this.state = 2125; + this.match(OpenSearchPPLParser.DATASOURCES); } break; case 27: this.enterOuterAlt(localContext, 27); { - this.state = 1118; - this.match(OpenSearchPPLParser.REGEX); + this.state = 2126; + this.match(OpenSearchPPLParser.FROM); } break; case 28: this.enterOuterAlt(localContext, 28); { - this.state = 1119; - this.match(OpenSearchPPLParser.PUNCT); + this.state = 2127; + this.match(OpenSearchPPLParser.PATTERN); } break; case 29: this.enterOuterAlt(localContext, 29); { - this.state = 1120; - this.match(OpenSearchPPLParser.GROK); + this.state = 2128; + this.match(OpenSearchPPLParser.NEW_FIELD); } break; case 30: this.enterOuterAlt(localContext, 30); { - this.state = 1121; - this.match(OpenSearchPPLParser.PATTERN); + this.state = 2129; + this.match(OpenSearchPPLParser.METHOD); } break; case 31: this.enterOuterAlt(localContext, 31); { - this.state = 1122; - this.match(OpenSearchPPLParser.PATTERNS); + this.state = 2130; + this.match(OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD); } break; case 32: this.enterOuterAlt(localContext, 32); { - this.state = 1123; - this.match(OpenSearchPPLParser.NEW_FIELD); + this.state = 2131; + this.match(OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE); } break; case 33: this.enterOuterAlt(localContext, 33); { - this.state = 1124; - this.match(OpenSearchPPLParser.KMEANS); + this.state = 2132; + this.match(OpenSearchPPLParser.MAX_SAMPLE_COUNT); } break; case 34: this.enterOuterAlt(localContext, 34); { - this.state = 1125; - this.match(OpenSearchPPLParser.AD); + this.state = 2133; + this.match(OpenSearchPPLParser.BUFFER_LIMIT); } break; case 35: this.enterOuterAlt(localContext, 35); { - this.state = 1126; - this.match(OpenSearchPPLParser.ML); + this.state = 2134; + this.match(OpenSearchPPLParser.WITH); } break; case 36: this.enterOuterAlt(localContext, 36); { - this.state = 1127; - this.match(OpenSearchPPLParser.SOURCE); + this.state = 2135; + this.match(OpenSearchPPLParser.REGEX); } break; case 37: this.enterOuterAlt(localContext, 37); { - this.state = 1128; - this.match(OpenSearchPPLParser.INDEX); + this.state = 2136; + this.match(OpenSearchPPLParser.PUNCT); } break; case 38: this.enterOuterAlt(localContext, 38); { - this.state = 1129; - this.match(OpenSearchPPLParser.DESC); + this.state = 2137; + this.match(OpenSearchPPLParser.USING); } break; case 39: this.enterOuterAlt(localContext, 39); { - this.state = 1130; - this.match(OpenSearchPPLParser.DATASOURCES); + this.state = 2138; + this.match(OpenSearchPPLParser.CAST); } break; case 40: this.enterOuterAlt(localContext, 40); { - this.state = 1131; - this.match(OpenSearchPPLParser.SORTBY); + this.state = 2139; + this.match(OpenSearchPPLParser.GET_FORMAT); } break; case 41: this.enterOuterAlt(localContext, 41); { - this.state = 1132; - this.match(OpenSearchPPLParser.STR); + this.state = 2140; + this.match(OpenSearchPPLParser.EXTRACT); } break; case 42: this.enterOuterAlt(localContext, 42); { - this.state = 1133; - this.match(OpenSearchPPLParser.IP); + this.state = 2141; + this.match(OpenSearchPPLParser.INTERVAL); } break; case 43: this.enterOuterAlt(localContext, 43); { - this.state = 1134; - this.match(OpenSearchPPLParser.NUM); + this.state = 2142; + this.match(OpenSearchPPLParser.PLUS); } break; case 44: this.enterOuterAlt(localContext, 44); { - this.state = 1135; - this.match(OpenSearchPPLParser.KEEPEMPTY); + this.state = 2143; + this.match(OpenSearchPPLParser.MINUS); } break; case 45: this.enterOuterAlt(localContext, 45); { - this.state = 1136; - this.match(OpenSearchPPLParser.CONSECUTIVE); + this.state = 2144; + this.match(OpenSearchPPLParser.OVERRIDE); } break; case 46: this.enterOuterAlt(localContext, 46); { - this.state = 1137; - this.match(OpenSearchPPLParser.DEDUP_SPLITVALUES); + this.state = 2145; + this.match(OpenSearchPPLParser.AUTO); } break; case 47: this.enterOuterAlt(localContext, 47); { - this.state = 1138; - this.match(OpenSearchPPLParser.PARTITIONS); + this.state = 2146; + this.match(OpenSearchPPLParser.STR); } break; case 48: this.enterOuterAlt(localContext, 48); { - this.state = 1139; - this.match(OpenSearchPPLParser.ALLNUM); + this.state = 2147; + this.match(OpenSearchPPLParser.IP); } break; case 49: this.enterOuterAlt(localContext, 49); { - this.state = 1140; - this.match(OpenSearchPPLParser.DELIM); + this.state = 2148; + this.match(OpenSearchPPLParser.NUM); } break; case 50: this.enterOuterAlt(localContext, 50); { - this.state = 1141; - this.match(OpenSearchPPLParser.CENTROIDS); + this.state = 2149; + this.match(OpenSearchPPLParser.KEEPEMPTY); } break; case 51: this.enterOuterAlt(localContext, 51); { - this.state = 1142; - this.match(OpenSearchPPLParser.ITERATIONS); + this.state = 2150; + this.match(OpenSearchPPLParser.CONSECUTIVE); } break; case 52: this.enterOuterAlt(localContext, 52); { - this.state = 1143; - this.match(OpenSearchPPLParser.DISTANCE_TYPE); + this.state = 2151; + this.match(OpenSearchPPLParser.DEDUP_SPLITVALUES); } break; case 53: this.enterOuterAlt(localContext, 53); { - this.state = 1144; - this.match(OpenSearchPPLParser.NUMBER_OF_TREES); + this.state = 2152; + this.match(OpenSearchPPLParser.PARTITIONS); } break; case 54: this.enterOuterAlt(localContext, 54); { - this.state = 1145; - this.match(OpenSearchPPLParser.SHINGLE_SIZE); + this.state = 2153; + this.match(OpenSearchPPLParser.ALLNUM); } break; case 55: this.enterOuterAlt(localContext, 55); { - this.state = 1146; - this.match(OpenSearchPPLParser.SAMPLE_SIZE); + this.state = 2154; + this.match(OpenSearchPPLParser.DELIM); } break; case 56: this.enterOuterAlt(localContext, 56); { - this.state = 1147; - this.match(OpenSearchPPLParser.OUTPUT_AFTER); + this.state = 2155; + this.match(OpenSearchPPLParser.BUCKET_NULLABLE); } break; case 57: this.enterOuterAlt(localContext, 57); { - this.state = 1148; - this.match(OpenSearchPPLParser.TIME_DECAY); + this.state = 2156; + this.match(OpenSearchPPLParser.CENTROIDS); } break; case 58: this.enterOuterAlt(localContext, 58); { - this.state = 1149; - this.match(OpenSearchPPLParser.ANOMALY_RATE); + this.state = 2157; + this.match(OpenSearchPPLParser.ITERATIONS); } break; case 59: this.enterOuterAlt(localContext, 59); { - this.state = 1150; - this.match(OpenSearchPPLParser.CATEGORY_FIELD); + this.state = 2158; + this.match(OpenSearchPPLParser.DISTANCE_TYPE); } break; case 60: this.enterOuterAlt(localContext, 60); { - this.state = 1151; - this.match(OpenSearchPPLParser.TIME_FIELD); + this.state = 2159; + this.match(OpenSearchPPLParser.NUMBER_OF_TREES); } break; case 61: this.enterOuterAlt(localContext, 61); { - this.state = 1152; - this.match(OpenSearchPPLParser.TIME_ZONE); + this.state = 2160; + this.match(OpenSearchPPLParser.SHINGLE_SIZE); } break; case 62: this.enterOuterAlt(localContext, 62); { - this.state = 1153; - this.match(OpenSearchPPLParser.TRAINING_DATA_SIZE); + this.state = 2161; + this.match(OpenSearchPPLParser.SAMPLE_SIZE); } break; case 63: this.enterOuterAlt(localContext, 63); { - this.state = 1154; - this.match(OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD); + this.state = 2162; + this.match(OpenSearchPPLParser.OUTPUT_AFTER); } break; case 64: this.enterOuterAlt(localContext, 64); { - this.state = 1155; - this.match(OpenSearchPPLParser.AVG); + this.state = 2163; + this.match(OpenSearchPPLParser.TIME_DECAY); } break; case 65: this.enterOuterAlt(localContext, 65); { - this.state = 1156; - this.match(OpenSearchPPLParser.COUNT); + this.state = 2164; + this.match(OpenSearchPPLParser.ANOMALY_RATE); } break; case 66: this.enterOuterAlt(localContext, 66); { - this.state = 1157; - this.match(OpenSearchPPLParser.DISTINCT_COUNT); + this.state = 2165; + this.match(OpenSearchPPLParser.CATEGORY_FIELD); } break; case 67: this.enterOuterAlt(localContext, 67); { - this.state = 1158; - this.match(OpenSearchPPLParser.ESTDC); + this.state = 2166; + this.match(OpenSearchPPLParser.TIME_FIELD); } break; case 68: this.enterOuterAlt(localContext, 68); { - this.state = 1159; - this.match(OpenSearchPPLParser.ESTDC_ERROR); + this.state = 2167; + this.match(OpenSearchPPLParser.TIME_ZONE); } break; case 69: this.enterOuterAlt(localContext, 69); { - this.state = 1160; - this.match(OpenSearchPPLParser.MAX); + this.state = 2168; + this.match(OpenSearchPPLParser.TRAINING_DATA_SIZE); } break; case 70: this.enterOuterAlt(localContext, 70); { - this.state = 1161; - this.match(OpenSearchPPLParser.MEAN); + this.state = 2169; + this.match(OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD); } break; case 71: this.enterOuterAlt(localContext, 71); { - this.state = 1162; - this.match(OpenSearchPPLParser.MEDIAN); + this.state = 2170; + this.match(OpenSearchPPLParser.COUNTFIELD); } break; case 72: this.enterOuterAlt(localContext, 72); { - this.state = 1163; - this.match(OpenSearchPPLParser.MIN); + this.state = 2171; + this.match(OpenSearchPPLParser.SHOWCOUNT); } break; case 73: this.enterOuterAlt(localContext, 73); { - this.state = 1164; - this.match(OpenSearchPPLParser.MODE); + this.state = 2172; + this.match(OpenSearchPPLParser.PATH); } break; case 74: this.enterOuterAlt(localContext, 74); { - this.state = 1165; - this.match(OpenSearchPPLParser.RANGE); + this.state = 2173; + this.match(OpenSearchPPLParser.INPUT); } break; case 75: this.enterOuterAlt(localContext, 75); { - this.state = 1166; - this.match(OpenSearchPPLParser.STDEV); + this.state = 2174; + this.match(OpenSearchPPLParser.OUTPUT); } break; case 76: this.enterOuterAlt(localContext, 76); { - this.state = 1167; - this.match(OpenSearchPPLParser.STDEVP); + this.state = 2175; + this.statsFunctionName(); } break; case 77: this.enterOuterAlt(localContext, 77); { - this.state = 1168; - this.match(OpenSearchPPLParser.SUM); + this.state = 2176; + this.windowFunctionName(); } break; case 78: this.enterOuterAlt(localContext, 78); { - this.state = 1169; - this.match(OpenSearchPPLParser.SUMSQ); + this.state = 2177; + this.match(OpenSearchPPLParser.DISTINCT_COUNT); } break; case 79: this.enterOuterAlt(localContext, 79); { - this.state = 1170; - this.match(OpenSearchPPLParser.VAR_SAMP); + this.state = 2178; + this.match(OpenSearchPPLParser.DISTINCT_COUNT_APPROX); } break; case 80: this.enterOuterAlt(localContext, 80); { - this.state = 1171; - this.match(OpenSearchPPLParser.VAR_POP); + this.state = 2179; + this.match(OpenSearchPPLParser.ESTDC); } break; case 81: this.enterOuterAlt(localContext, 81); { - this.state = 1172; - this.match(OpenSearchPPLParser.STDDEV_SAMP); + this.state = 2180; + this.match(OpenSearchPPLParser.ESTDC_ERROR); } break; case 82: this.enterOuterAlt(localContext, 82); { - this.state = 1173; - this.match(OpenSearchPPLParser.STDDEV_POP); + this.state = 2181; + this.match(OpenSearchPPLParser.MEAN); } break; case 83: this.enterOuterAlt(localContext, 83); { - this.state = 1174; - this.match(OpenSearchPPLParser.PERCENTILE); + this.state = 2182; + this.match(OpenSearchPPLParser.MEDIAN); } break; case 84: this.enterOuterAlt(localContext, 84); { - this.state = 1175; - this.match(OpenSearchPPLParser.TAKE); + this.state = 2183; + this.match(OpenSearchPPLParser.MODE); } break; case 85: this.enterOuterAlt(localContext, 85); { - this.state = 1176; - this.match(OpenSearchPPLParser.FIRST); + this.state = 2184; + this.match(OpenSearchPPLParser.RANGE); } break; case 86: this.enterOuterAlt(localContext, 86); { - this.state = 1177; - this.match(OpenSearchPPLParser.LAST); + this.state = 2185; + this.match(OpenSearchPPLParser.STDEV); } break; case 87: this.enterOuterAlt(localContext, 87); { - this.state = 1178; - this.match(OpenSearchPPLParser.LIST); + this.state = 2186; + this.match(OpenSearchPPLParser.STDEVP); } break; case 88: this.enterOuterAlt(localContext, 88); { - this.state = 1179; - this.match(OpenSearchPPLParser.VALUES); + this.state = 2187; + this.match(OpenSearchPPLParser.SUMSQ); } break; case 89: this.enterOuterAlt(localContext, 89); { - this.state = 1180; - this.match(OpenSearchPPLParser.EARLIEST); + this.state = 2188; + this.match(OpenSearchPPLParser.VAR_SAMP); } break; case 90: this.enterOuterAlt(localContext, 90); { - this.state = 1181; - this.match(OpenSearchPPLParser.EARLIEST_TIME); + this.state = 2189; + this.match(OpenSearchPPLParser.VAR_POP); } break; case 91: this.enterOuterAlt(localContext, 91); { - this.state = 1182; - this.match(OpenSearchPPLParser.LATEST); + this.state = 2190; + this.match(OpenSearchPPLParser.TAKE); } break; case 92: this.enterOuterAlt(localContext, 92); { - this.state = 1183; - this.match(OpenSearchPPLParser.LATEST_TIME); + this.state = 2191; + this.match(OpenSearchPPLParser.LIST); } break; case 93: this.enterOuterAlt(localContext, 93); { - this.state = 1184; - this.match(OpenSearchPPLParser.PER_DAY); + this.state = 2192; + this.match(OpenSearchPPLParser.VALUES); } break; case 94: this.enterOuterAlt(localContext, 94); { - this.state = 1185; - this.match(OpenSearchPPLParser.PER_HOUR); + this.state = 2193; + this.match(OpenSearchPPLParser.PER_DAY); } break; case 95: this.enterOuterAlt(localContext, 95); { - this.state = 1186; - this.match(OpenSearchPPLParser.PER_MINUTE); + this.state = 2194; + this.match(OpenSearchPPLParser.PER_HOUR); } break; case 96: this.enterOuterAlt(localContext, 96); { - this.state = 1187; - this.match(OpenSearchPPLParser.PER_SECOND); + this.state = 2195; + this.match(OpenSearchPPLParser.PER_MINUTE); } break; case 97: this.enterOuterAlt(localContext, 97); { - this.state = 1188; - this.match(OpenSearchPPLParser.RATE); + this.state = 2196; + this.match(OpenSearchPPLParser.PER_SECOND); } break; case 98: this.enterOuterAlt(localContext, 98); { - this.state = 1189; - this.match(OpenSearchPPLParser.SPARKLINE); + this.state = 2197; + this.match(OpenSearchPPLParser.RATE); } break; case 99: this.enterOuterAlt(localContext, 99); { - this.state = 1190; - this.match(OpenSearchPPLParser.C); + this.state = 2198; + this.match(OpenSearchPPLParser.SPARKLINE); } break; case 100: this.enterOuterAlt(localContext, 100); { - this.state = 1191; + this.state = 2199; + this.match(OpenSearchPPLParser.C); + } + break; + case 101: + this.enterOuterAlt(localContext, 101); + { + this.state = 2200; this.match(OpenSearchPPLParser.DC); } break; + case 102: + this.enterOuterAlt(localContext, 102); + { + this.state = 2201; + this.match(OpenSearchPPLParser.OUTER); + } + break; + case 103: + this.enterOuterAlt(localContext, 103); + { + this.state = 2202; + this.match(OpenSearchPPLParser.INNER); + } + break; + case 104: + this.enterOuterAlt(localContext, 104); + { + this.state = 2203; + this.match(OpenSearchPPLParser.CROSS); + } + break; + case 105: + this.enterOuterAlt(localContext, 105); + { + this.state = 2204; + this.match(OpenSearchPPLParser.LEFT); + } + break; + case 106: + this.enterOuterAlt(localContext, 106); + { + this.state = 2205; + this.match(OpenSearchPPLParser.RIGHT); + } + break; + case 107: + this.enterOuterAlt(localContext, 107); + { + this.state = 2206; + this.match(OpenSearchPPLParser.FULL); + } + break; + case 108: + this.enterOuterAlt(localContext, 108); + { + this.state = 2207; + this.match(OpenSearchPPLParser.SEMI); + } + break; + case 109: + this.enterOuterAlt(localContext, 109); + { + this.state = 2208; + this.match(OpenSearchPPLParser.ANTI); + } + break; + case 110: + this.enterOuterAlt(localContext, 110); + { + this.state = 2209; + this.match(OpenSearchPPLParser.LEFT_HINT); + } + break; + case 111: + this.enterOuterAlt(localContext, 111); + { + this.state = 2210; + this.match(OpenSearchPPLParser.RIGHT_HINT); + } + break; + case 112: + this.enterOuterAlt(localContext, 112); + { + this.state = 2211; + this.match(OpenSearchPPLParser.PERCENTILE_SHORTCUT); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; } } - catch (re) { - if (re instanceof antlr.RecognitionException) { - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } + finally { + this.exitRule(); + } + return localContext; + } + + public override sempred(localContext: antlr.ParserRuleContext | null, ruleIndex: number, predIndex: number): boolean { + switch (ruleIndex) { + case 10: + return this.searchExpression_sempred(localContext as SearchExpressionContext, predIndex); + case 120: + return this.logicalExpression_sempred(localContext as LogicalExpressionContext, predIndex); + case 121: + return this.expression_sempred(localContext as ExpressionContext, predIndex); + case 122: + return this.valueExpression_sempred(localContext as ValueExpressionContext, predIndex); + } + return true; + } + private searchExpression_sempred(localContext: SearchExpressionContext | null, predIndex: number): boolean { + switch (predIndex) { + case 0: + return this.precpred(this.context, 3); + case 1: + return this.precpred(this.context, 2); + } + return true; + } + private logicalExpression_sempred(localContext: LogicalExpressionContext | null, predIndex: number): boolean { + switch (predIndex) { + case 2: + return this.precpred(this.context, 4); + case 3: + return this.precpred(this.context, 3); + case 4: + return this.precpred(this.context, 2); + } + return true; + } + private expression_sempred(localContext: ExpressionContext | null, predIndex: number): boolean { + switch (predIndex) { + case 5: + return this.precpred(this.context, 3); + case 6: + return this.precpred(this.context, 1); + case 7: + return this.precpred(this.context, 2); + } + return true; + } + private valueExpression_sempred(localContext: ValueExpressionContext | null, predIndex: number): boolean { + switch (predIndex) { + case 8: + return this.precpred(this.context, 11); + case 9: + return this.precpred(this.context, 10); + case 10: + return this.precpred(this.context, 5); + } + return true; + } + + public static readonly _serializedATN: number[] = [ + 4,1,467,2215,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, + 1,0,3,0,408,8,0,1,0,1,0,1,1,1,1,3,1,414,8,1,1,2,1,2,1,2,5,2,419, + 8,2,10,2,12,2,422,9,2,1,3,1,3,3,3,426,8,3,1,3,1,3,1,4,1,4,1,5,1, + 5,1,5,5,5,435,8,5,10,5,12,5,438,9,5,1,6,1,6,1,6,3,6,443,8,6,1,7, + 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, + 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7, + 477,8,7,1,8,1,8,1,9,3,9,482,8,9,1,9,5,9,485,8,9,10,9,12,9,488,9, + 9,1,9,3,9,491,8,9,1,9,5,9,494,8,9,10,9,12,9,497,9,9,1,10,1,10,1, + 10,1,10,1,10,1,10,1,10,1,10,3,10,507,8,10,1,10,1,10,1,10,1,10,1, + 10,1,10,5,10,515,8,10,10,10,12,10,518,9,10,1,11,1,11,1,11,3,11,523, + 8,11,1,12,1,12,1,12,1,12,1,12,3,12,530,8,12,1,13,1,13,1,13,1,13, + 1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,5,15,545,8,15,10,15, + 12,15,548,9,15,1,16,1,16,1,16,1,16,1,16,1,16,3,16,556,8,16,1,17, + 1,17,1,17,1,18,1,18,1,18,1,19,1,19,1,19,1,20,1,20,1,20,1,21,1,21, + 1,21,1,22,3,22,574,8,22,1,22,1,22,1,23,1,23,3,23,580,8,23,1,23,5, + 23,583,8,23,10,23,12,23,586,9,23,1,24,1,24,1,24,3,24,591,8,24,1, + 24,5,24,594,8,24,10,24,12,24,597,9,24,1,25,1,25,1,25,1,25,1,25,5, + 25,604,8,25,10,25,12,25,607,9,25,1,25,3,25,610,8,25,1,25,3,25,613, + 8,25,1,26,1,26,1,26,1,26,5,26,619,8,26,10,26,12,26,622,9,26,1,27, + 1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,30,1,30, + 1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,5,32,648,8,32, + 10,32,12,32,651,9,32,1,32,3,32,654,8,32,1,33,1,33,3,33,658,8,33, + 1,33,1,33,1,33,1,33,3,33,664,8,33,1,33,1,33,1,33,3,33,669,8,33,1, + 34,1,34,3,34,673,8,34,1,34,1,34,3,34,677,8,34,1,35,1,35,1,36,1,36, + 5,36,683,8,36,10,36,12,36,686,9,36,1,36,1,36,1,36,3,36,691,8,36, + 1,37,1,37,1,37,1,37,3,37,697,8,37,1,37,3,37,700,8,37,1,38,1,38,1, + 38,1,38,1,38,1,38,1,38,3,38,709,8,38,3,38,711,8,38,1,39,1,39,1,39, + 1,39,3,39,717,8,39,1,40,1,40,1,40,1,40,5,40,723,8,40,10,40,12,40, + 726,9,40,1,41,1,41,3,41,730,8,41,1,41,1,41,3,41,734,8,41,1,42,1, + 42,1,42,5,42,739,8,42,10,42,12,42,742,9,42,1,42,1,42,3,42,746,8, + 42,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,3,43,758,8, + 43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,3,43,769,8,43,1, + 44,1,44,1,44,3,44,774,8,44,1,45,1,45,3,45,778,8,45,1,45,1,45,1,45, + 1,45,1,45,3,45,785,8,45,1,46,1,46,1,47,1,47,3,47,791,8,47,1,47,1, + 47,1,47,3,47,796,8,47,1,47,1,47,1,47,3,47,801,8,47,1,47,1,47,3,47, + 805,8,47,1,48,1,48,3,48,809,8,48,1,48,1,48,1,48,3,48,814,8,48,1, + 48,1,48,1,48,3,48,819,8,48,1,48,1,48,3,48,823,8,48,1,49,1,49,1,49, + 1,49,1,50,1,50,1,50,1,50,1,51,1,51,5,51,835,8,51,10,51,12,51,838, + 9,51,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,3,52,848,8,52,1,52, + 3,52,851,8,52,1,53,1,53,1,53,5,53,856,8,53,10,53,12,53,859,9,53, + 1,54,1,54,3,54,863,8,54,1,55,1,55,3,55,867,8,55,1,55,1,55,1,56,1, + 56,1,56,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,59,1,59,1,59,1,59,5, + 59,885,8,59,10,59,12,59,888,9,59,1,59,1,59,5,59,892,8,59,10,59,12, + 59,895,9,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,906, + 8,60,1,61,1,61,1,62,1,62,1,62,3,62,913,8,62,1,62,1,62,1,62,3,62, + 918,8,62,1,62,1,62,1,62,3,62,923,8,62,1,62,1,62,1,62,3,62,928,8, + 62,1,62,1,62,1,62,3,62,933,8,62,1,62,1,62,1,62,3,62,938,8,62,1,62, + 5,62,941,8,62,10,62,12,62,944,9,62,1,63,1,63,1,63,1,63,1,63,1,63, + 1,63,1,63,1,63,3,63,955,8,63,1,64,1,64,1,65,1,65,1,66,1,66,1,66, + 1,66,1,66,3,66,966,8,66,1,67,1,67,1,67,5,67,971,8,67,10,67,12,67, + 974,9,67,1,68,1,68,1,68,5,68,979,8,68,10,68,12,68,982,9,68,1,69, + 1,69,1,69,3,69,987,8,69,1,70,1,70,1,70,1,70,3,70,993,8,70,1,71,1, + 71,1,71,1,71,3,71,999,8,71,1,72,1,72,1,72,1,72,5,72,1005,8,72,10, + 72,12,72,1008,9,72,1,73,1,73,1,73,1,73,1,74,1,74,1,74,3,74,1017, + 8,74,1,74,1,74,5,74,1021,8,74,10,74,12,74,1024,9,74,1,75,1,75,1, + 75,1,75,1,75,1,75,1,75,1,75,3,75,1034,8,75,1,76,1,76,1,77,1,77,1, + 77,1,77,3,77,1042,8,77,1,78,1,78,1,78,1,78,3,78,1048,8,78,1,79,1, + 79,1,79,1,79,3,79,1054,8,79,1,79,1,79,1,79,1,79,5,79,1060,8,79,10, + 79,12,79,1063,9,79,1,79,1,79,1,80,1,80,1,80,3,80,1070,8,80,1,80, + 1,80,5,80,1074,8,80,10,80,12,80,1077,9,80,1,80,1,80,1,81,1,81,5, + 81,1083,8,81,10,81,12,81,1086,9,81,1,82,1,82,1,82,1,82,1,82,1,82, + 1,82,1,82,1,82,3,82,1097,8,82,1,83,1,83,5,83,1101,8,83,10,83,12, + 83,1104,9,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1, + 84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1, + 84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,3, + 84,1142,8,84,1,85,1,85,5,85,1146,8,85,10,85,12,85,1149,9,85,1,86, + 1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87, + 1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,3,87,1173,8,87,1,88,1,88, + 1,88,1,88,1,88,3,88,1180,8,88,1,88,3,88,1183,8,88,1,89,1,89,1,89, + 5,89,1188,8,89,10,89,12,89,1191,9,89,1,89,1,89,3,89,1195,8,89,1, + 90,1,90,1,90,1,90,3,90,1201,8,90,1,90,1,90,1,91,1,91,1,91,5,91,1208, + 8,91,10,91,12,91,1211,9,91,1,92,3,92,1214,8,92,1,92,1,92,1,93,1, + 93,1,93,5,93,1221,8,93,10,93,12,93,1224,9,93,1,94,1,94,1,94,1,94, + 1,94,1,94,1,94,1,94,3,94,1234,8,94,1,95,1,95,5,95,1238,8,95,10,95, + 12,95,1241,9,95,1,95,3,95,1244,8,95,1,95,1,95,3,95,1248,8,95,1,95, + 1,95,5,95,1252,8,95,10,95,12,95,1255,9,95,1,95,1,95,3,95,1259,8, + 95,1,95,1,95,1,95,3,95,1264,8,95,1,96,1,96,1,96,1,96,3,96,1270,8, + 96,1,96,3,96,1273,8,96,1,96,1,96,3,96,1277,8,96,1,96,1,96,3,96,1281, + 8,96,1,96,3,96,1284,8,96,1,96,1,96,3,96,1288,8,96,1,96,3,96,1291, + 8,96,1,97,1,97,1,98,1,98,1,98,3,98,1298,8,98,1,98,3,98,1301,8,98, + 1,98,1,98,1,98,3,98,1306,8,98,1,99,1,99,1,99,1,100,1,100,3,100,1313, + 8,100,1,100,5,100,1316,8,100,10,100,12,100,1319,9,100,1,101,1,101, + 1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,3,101,1331,8,101, + 1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,3,102,1342, + 8,102,1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,105,1,105,1,105, + 1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105, + 3,105,1365,8,105,1,106,1,106,1,106,3,106,1370,8,106,1,107,1,107, + 1,107,1,107,1,107,1,107,3,107,1378,8,107,1,107,1,107,1,108,1,108, + 1,108,5,108,1385,8,108,10,108,12,108,1388,9,108,1,109,1,109,1,109, + 1,109,1,110,1,110,1,110,3,110,1397,8,110,1,111,1,111,1,111,1,111, + 1,111,1,112,1,112,3,112,1406,8,112,1,113,1,113,1,114,1,114,1,114, + 3,114,1413,8,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115, + 3,115,1423,8,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115, + 1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,3,115,1442, + 8,115,1,116,1,116,1,117,1,117,1,117,1,117,1,117,3,117,1451,8,117, + 1,117,1,117,1,118,1,118,1,118,1,118,1,118,1,118,1,118,3,118,1462, + 8,118,1,118,1,118,1,119,1,119,1,119,1,119,3,119,1470,8,119,1,120, + 1,120,1,120,1,120,3,120,1476,8,120,1,120,1,120,1,120,1,120,1,120, + 1,120,1,120,1,120,1,120,5,120,1487,8,120,10,120,12,120,1490,9,120, + 1,121,1,121,1,121,3,121,1495,8,121,1,121,1,121,1,121,1,121,1,121, + 1,121,3,121,1503,8,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121, + 3,121,1512,8,121,1,121,1,121,5,121,1516,8,121,10,121,12,121,1519, + 9,121,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122, + 1,122,1,122,5,122,1533,8,122,10,122,12,122,1536,9,122,1,122,1,122, + 3,122,1540,8,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122, + 1,122,1,122,1,122,1,122,1,122,1,122,1,122,3,122,1557,8,122,1,122, + 1,122,1,122,1,122,1,122,1,122,1,122,1,122,3,122,1567,8,122,1,122, + 1,122,1,122,1,122,1,122,5,122,1574,8,122,10,122,12,122,1577,9,122, + 1,123,1,123,1,123,1,123,1,123,1,124,1,124,1,124,1,124,1,124,1,124, + 1,124,3,124,1591,8,124,1,125,1,125,1,125,1,125,1,125,1,125,1,125, + 1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,5,126, + 1610,8,126,10,126,12,126,1613,9,126,1,126,1,126,3,126,1617,8,126, + 1,126,1,126,1,127,1,127,3,127,1623,8,127,1,128,1,128,1,128,1,128, + 1,128,1,128,1,128,5,128,1632,8,128,10,128,12,128,1635,9,128,1,128, + 1,128,1,129,1,129,1,129,1,129,1,129,1,129,5,129,1645,8,129,10,129, + 12,129,1648,9,129,1,129,1,129,1,129,3,129,1653,8,129,1,129,1,129, + 1,129,5,129,1658,8,129,10,129,12,129,1661,9,129,1,129,1,129,1,130, + 1,130,3,130,1667,8,130,1,131,1,131,1,131,1,131,1,131,1,132,1,132, + 3,132,1676,8,132,1,132,5,132,1679,8,132,10,132,12,132,1682,9,132, + 1,133,3,133,1685,8,133,1,133,1,133,1,134,1,134,1,134,1,134,1,134, + 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134, + 1,134,1,134,1,134,1,134,1,134,3,134,1710,8,134,1,135,1,135,1,136, + 1,136,1,137,1,137,3,137,1718,8,137,1,138,1,138,3,138,1722,8,138, + 1,139,1,139,1,139,1,139,1,139,1,140,1,140,1,140,1,140,1,140,1,140, + 1,140,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141, + 1,141,1,141,3,141,1748,8,141,1,142,1,142,1,142,1,142,1,142,1,142, + 1,142,1,142,1,142,1,142,1,142,3,142,1761,8,142,1,143,1,143,1,143, + 5,143,1766,8,143,10,143,12,143,1769,9,143,3,143,1771,8,143,1,144, + 1,144,1,144,5,144,1776,8,144,10,144,12,144,1779,9,144,3,144,1781, + 8,144,1,145,1,145,1,146,1,146,1,146,3,146,1788,8,146,1,146,1,146, + 1,147,1,147,3,147,1794,8,147,1,148,1,148,1,148,1,148,1,148,1,148, + 1,148,1,148,4,148,1804,8,148,11,148,12,148,1805,1,148,1,148,1,148, + 1,148,3,148,1812,8,148,1,149,1,149,1,149,1,149,1,150,1,150,1,151, + 1,151,1,151,1,151,1,151,1,151,1,151,1,151,3,151,1828,8,151,1,152, + 1,152,1,152,1,152,3,152,1834,8,152,1,153,1,153,3,153,1838,8,153, + 1,154,1,154,1,155,1,155,3,155,1844,8,155,1,156,1,156,1,156,1,156, + 1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156, + 1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156, + 1,156,1,156,1,156,1,156,1,156,1,156,3,156,1878,8,156,1,157,1,157, + 1,158,1,158,1,159,1,159,1,160,1,160,1,161,1,161,1,162,1,162,1,163, + 1,163,1,163,1,163,1,163,1,163,1,163,1,164,1,164,1,165,1,165,1,165, + 1,165,1,165,1,165,1,165,1,166,1,166,1,167,1,167,1,168,1,168,3,168, + 1914,8,168,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169, + 1,170,1,170,1,171,1,171,1,172,1,172,1,173,1,173,1,174,1,174,1,175, + 1,175,1,176,1,176,1,177,1,177,1,178,1,178,1,179,1,179,1,179,1,179, + 1,179,1,179,1,179,1,179,3,179,1951,8,179,1,180,1,180,1,180,1,180, + 1,181,1,181,1,182,3,182,1960,8,182,1,182,1,182,1,183,3,183,1965, + 8,183,1,183,1,183,1,184,3,184,1970,8,184,1,184,1,184,1,185,3,185, + 1975,8,185,1,185,1,185,1,186,1,186,1,187,1,187,1,187,3,187,1984, + 8,187,1,188,1,188,1,188,1,189,1,189,1,189,1,190,1,190,1,190,1,191, + 1,191,1,192,1,192,1,193,1,193,1,193,1,193,5,193,2003,8,193,10,193, + 12,193,2006,9,193,1,193,1,193,1,194,1,194,1,194,5,194,2013,8,194, + 10,194,12,194,2016,9,194,1,195,1,195,1,195,5,195,2021,8,195,10,195, + 12,195,2024,9,195,1,196,1,196,1,196,5,196,2029,8,196,10,196,12,196, + 2032,9,196,1,197,1,197,1,197,5,197,2037,8,197,10,197,12,197,2040, + 9,197,1,197,1,197,1,197,1,197,5,197,2046,8,197,10,197,12,197,2049, + 9,197,1,197,1,197,3,197,2053,8,197,1,198,3,198,2056,8,198,1,198, + 1,198,1,198,1,198,1,198,1,198,1,198,3,198,2065,8,198,1,199,3,199, + 2068,8,199,1,199,1,199,1,200,1,200,1,200,5,200,2075,8,200,10,200, + 12,200,2078,9,200,1,200,3,200,2081,8,200,1,200,1,200,1,200,1,200, + 1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,3,200,2095,8,200, + 1,201,1,201,3,201,2099,8,201,1,202,1,202,1,202,1,202,1,202,1,202, + 1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202, + 1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202, + 1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202, + 1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202, + 1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202, + 1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202, + 1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202, + 1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202, + 1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202, + 1,202,1,202,1,202,1,202,1,202,1,202,1,202,3,202,2213,8,202,1,202, + 0,4,20,240,242,244,203,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30, + 32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74, + 76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112, + 114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144, + 146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176, + 178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208, + 210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240, + 242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272, + 274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304, + 306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336, + 338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368, + 370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400, + 402,404,0,39,1,0,72,75,12,0,2,5,7,8,10,21,23,24,27,27,29,29,31,37, + 39,39,51,51,104,104,157,157,356,356,1,0,177,178,1,0,65,68,2,0,170, + 170,176,176,2,0,25,25,305,305,2,0,23,23,26,26,1,0,40,41,1,0,49,50, + 2,0,104,104,355,355,1,0,81,82,2,0,53,58,351,352,2,0,7,7,52,52,2, + 0,199,199,232,241,2,0,198,198,231,231,2,0,199,200,232,232,8,0,197, + 198,203,203,205,206,211,211,213,216,218,221,223,223,238,239,1,0, + 218,219,1,0,179,181,3,0,8,8,101,101,396,426,2,0,115,115,366,372, + 1,0,272,283,1,0,374,383,1,0,284,286,13,0,125,127,131,131,133,133, + 136,136,139,139,141,141,143,144,146,149,151,154,287,304,306,307, + 309,325,328,338,4,0,126,126,294,294,323,323,325,325,8,0,127,127, + 133,133,139,139,141,141,146,146,148,149,152,152,154,154,8,0,128, + 130,132,132,134,135,137,137,142,142,145,145,150,150,155,155,1,0, + 326,327,5,0,124,124,220,221,358,361,363,365,373,373,2,0,384,386, + 388,388,2,0,339,343,345,356,3,0,123,123,170,176,358,358,1,0,389, + 392,1,0,393,395,1,0,462,463,1,0,121,122,9,0,127,130,132,135,137, + 137,139,139,141,142,145,146,148,150,152,152,154,155,9,0,67,67,127, + 127,133,133,140,141,146,146,148,149,152,152,154,154,433,453,2489, + 0,407,1,0,0,0,2,413,1,0,0,0,4,415,1,0,0,0,6,423,1,0,0,0,8,429,1, + 0,0,0,10,431,1,0,0,0,12,442,1,0,0,0,14,476,1,0,0,0,16,478,1,0,0, + 0,18,481,1,0,0,0,20,506,1,0,0,0,22,522,1,0,0,0,24,529,1,0,0,0,26, + 531,1,0,0,0,28,535,1,0,0,0,30,541,1,0,0,0,32,555,1,0,0,0,34,557, + 1,0,0,0,36,560,1,0,0,0,38,563,1,0,0,0,40,566,1,0,0,0,42,569,1,0, + 0,0,44,573,1,0,0,0,46,577,1,0,0,0,48,587,1,0,0,0,50,598,1,0,0,0, + 52,620,1,0,0,0,54,623,1,0,0,0,56,627,1,0,0,0,58,631,1,0,0,0,60,635, + 1,0,0,0,62,639,1,0,0,0,64,643,1,0,0,0,66,655,1,0,0,0,68,670,1,0, + 0,0,70,678,1,0,0,0,72,680,1,0,0,0,74,699,1,0,0,0,76,710,1,0,0,0, + 78,716,1,0,0,0,80,718,1,0,0,0,82,727,1,0,0,0,84,735,1,0,0,0,86,768, + 1,0,0,0,88,773,1,0,0,0,90,784,1,0,0,0,92,786,1,0,0,0,94,788,1,0, + 0,0,96,806,1,0,0,0,98,824,1,0,0,0,100,828,1,0,0,0,102,832,1,0,0, + 0,104,850,1,0,0,0,106,852,1,0,0,0,108,860,1,0,0,0,110,864,1,0,0, + 0,112,870,1,0,0,0,114,873,1,0,0,0,116,877,1,0,0,0,118,880,1,0,0, + 0,120,905,1,0,0,0,122,907,1,0,0,0,124,909,1,0,0,0,126,954,1,0,0, + 0,128,956,1,0,0,0,130,958,1,0,0,0,132,960,1,0,0,0,134,967,1,0,0, + 0,136,975,1,0,0,0,138,983,1,0,0,0,140,992,1,0,0,0,142,994,1,0,0, + 0,144,1000,1,0,0,0,146,1009,1,0,0,0,148,1013,1,0,0,0,150,1025,1, + 0,0,0,152,1035,1,0,0,0,154,1037,1,0,0,0,156,1043,1,0,0,0,158,1049, + 1,0,0,0,160,1066,1,0,0,0,162,1080,1,0,0,0,164,1096,1,0,0,0,166,1098, + 1,0,0,0,168,1141,1,0,0,0,170,1143,1,0,0,0,172,1150,1,0,0,0,174,1172, + 1,0,0,0,176,1182,1,0,0,0,178,1184,1,0,0,0,180,1196,1,0,0,0,182,1204, + 1,0,0,0,184,1213,1,0,0,0,186,1217,1,0,0,0,188,1233,1,0,0,0,190,1263, + 1,0,0,0,192,1290,1,0,0,0,194,1292,1,0,0,0,196,1297,1,0,0,0,198,1307, + 1,0,0,0,200,1310,1,0,0,0,202,1330,1,0,0,0,204,1341,1,0,0,0,206,1343, + 1,0,0,0,208,1347,1,0,0,0,210,1364,1,0,0,0,212,1366,1,0,0,0,214,1371, + 1,0,0,0,216,1381,1,0,0,0,218,1389,1,0,0,0,220,1393,1,0,0,0,222,1398, + 1,0,0,0,224,1405,1,0,0,0,226,1407,1,0,0,0,228,1409,1,0,0,0,230,1441, + 1,0,0,0,232,1443,1,0,0,0,234,1445,1,0,0,0,236,1454,1,0,0,0,238,1469, + 1,0,0,0,240,1475,1,0,0,0,242,1494,1,0,0,0,244,1556,1,0,0,0,246,1578, + 1,0,0,0,248,1590,1,0,0,0,250,1592,1,0,0,0,252,1599,1,0,0,0,254,1622, + 1,0,0,0,256,1624,1,0,0,0,258,1638,1,0,0,0,260,1666,1,0,0,0,262,1668, + 1,0,0,0,264,1673,1,0,0,0,266,1684,1,0,0,0,268,1709,1,0,0,0,270,1711, + 1,0,0,0,272,1713,1,0,0,0,274,1717,1,0,0,0,276,1721,1,0,0,0,278,1723, + 1,0,0,0,280,1728,1,0,0,0,282,1747,1,0,0,0,284,1760,1,0,0,0,286,1770, + 1,0,0,0,288,1780,1,0,0,0,290,1782,1,0,0,0,292,1787,1,0,0,0,294,1793, + 1,0,0,0,296,1811,1,0,0,0,298,1813,1,0,0,0,300,1817,1,0,0,0,302,1827, + 1,0,0,0,304,1833,1,0,0,0,306,1837,1,0,0,0,308,1839,1,0,0,0,310,1843, + 1,0,0,0,312,1877,1,0,0,0,314,1879,1,0,0,0,316,1881,1,0,0,0,318,1883, + 1,0,0,0,320,1885,1,0,0,0,322,1887,1,0,0,0,324,1889,1,0,0,0,326,1891, + 1,0,0,0,328,1898,1,0,0,0,330,1900,1,0,0,0,332,1907,1,0,0,0,334,1909, + 1,0,0,0,336,1913,1,0,0,0,338,1915,1,0,0,0,340,1924,1,0,0,0,342,1926, + 1,0,0,0,344,1928,1,0,0,0,346,1930,1,0,0,0,348,1932,1,0,0,0,350,1934, + 1,0,0,0,352,1936,1,0,0,0,354,1938,1,0,0,0,356,1940,1,0,0,0,358,1950, + 1,0,0,0,360,1952,1,0,0,0,362,1956,1,0,0,0,364,1959,1,0,0,0,366,1964, + 1,0,0,0,368,1969,1,0,0,0,370,1974,1,0,0,0,372,1978,1,0,0,0,374,1983, + 1,0,0,0,376,1985,1,0,0,0,378,1988,1,0,0,0,380,1991,1,0,0,0,382,1994, + 1,0,0,0,384,1996,1,0,0,0,386,1998,1,0,0,0,388,2009,1,0,0,0,390,2017, + 1,0,0,0,392,2025,1,0,0,0,394,2052,1,0,0,0,396,2064,1,0,0,0,398,2067, + 1,0,0,0,400,2094,1,0,0,0,402,2098,1,0,0,0,404,2212,1,0,0,0,406,408, + 3,2,1,0,407,406,1,0,0,0,407,408,1,0,0,0,408,409,1,0,0,0,409,410, + 5,0,0,1,410,1,1,0,0,0,411,414,3,6,3,0,412,414,3,4,2,0,413,411,1, + 0,0,0,413,412,1,0,0,0,414,3,1,0,0,0,415,420,3,12,6,0,416,417,5,167, + 0,0,417,419,3,14,7,0,418,416,1,0,0,0,419,422,1,0,0,0,420,418,1,0, + 0,0,420,421,1,0,0,0,421,5,1,0,0,0,422,420,1,0,0,0,423,425,5,5,0, + 0,424,426,3,8,4,0,425,424,1,0,0,0,425,426,1,0,0,0,426,427,1,0,0, + 0,427,428,3,4,2,0,428,7,1,0,0,0,429,430,7,0,0,0,430,9,1,0,0,0,431, + 436,3,18,9,0,432,433,5,167,0,0,433,435,3,14,7,0,434,432,1,0,0,0, + 435,438,1,0,0,0,436,434,1,0,0,0,436,437,1,0,0,0,437,11,1,0,0,0,438, + 436,1,0,0,0,439,443,3,34,17,0,440,443,3,36,18,0,441,443,3,18,9,0, + 442,439,1,0,0,0,442,440,1,0,0,0,442,441,1,0,0,0,443,13,1,0,0,0,444, + 477,3,38,19,0,445,477,3,40,20,0,446,477,3,42,21,0,447,477,3,190, + 95,0,448,477,3,48,24,0,449,477,3,50,25,0,450,477,3,64,32,0,451,477, + 3,66,33,0,452,477,3,68,34,0,453,477,3,80,40,0,454,477,3,82,41,0, + 455,477,3,84,42,0,456,477,3,94,47,0,457,477,3,96,48,0,458,477,3, + 98,49,0,459,477,3,100,50,0,460,477,3,102,51,0,461,477,3,124,62,0, + 462,477,3,132,66,0,463,477,3,162,81,0,464,477,3,166,83,0,465,477, + 3,170,85,0,466,477,3,140,70,0,467,477,3,148,74,0,468,477,3,158,79, + 0,469,477,3,160,80,0,470,477,3,154,77,0,471,477,3,156,78,0,472,477, + 3,70,35,0,473,477,3,112,56,0,474,477,3,72,36,0,475,477,3,116,58, + 0,476,444,1,0,0,0,476,445,1,0,0,0,476,446,1,0,0,0,476,447,1,0,0, + 0,476,448,1,0,0,0,476,449,1,0,0,0,476,450,1,0,0,0,476,451,1,0,0, + 0,476,452,1,0,0,0,476,453,1,0,0,0,476,454,1,0,0,0,476,455,1,0,0, + 0,476,456,1,0,0,0,476,457,1,0,0,0,476,458,1,0,0,0,476,459,1,0,0, + 0,476,460,1,0,0,0,476,461,1,0,0,0,476,462,1,0,0,0,476,463,1,0,0, + 0,476,464,1,0,0,0,476,465,1,0,0,0,476,466,1,0,0,0,476,467,1,0,0, + 0,476,468,1,0,0,0,476,469,1,0,0,0,476,470,1,0,0,0,476,471,1,0,0, + 0,476,472,1,0,0,0,476,473,1,0,0,0,476,474,1,0,0,0,476,475,1,0,0, + 0,477,15,1,0,0,0,478,479,7,1,0,0,479,17,1,0,0,0,480,482,5,2,0,0, + 481,480,1,0,0,0,481,482,1,0,0,0,482,486,1,0,0,0,483,485,3,20,10, + 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,3,174,87,0,490,489,1,0, + 0,0,490,491,1,0,0,0,491,495,1,0,0,0,492,494,3,20,10,0,493,492,1, + 0,0,0,494,497,1,0,0,0,495,493,1,0,0,0,495,496,1,0,0,0,496,19,1,0, + 0,0,497,495,1,0,0,0,498,499,6,10,-1,0,499,500,5,184,0,0,500,501, + 3,20,10,0,501,502,5,185,0,0,502,507,1,0,0,0,503,504,5,117,0,0,504, + 507,3,20,10,4,505,507,3,22,11,0,506,498,1,0,0,0,506,503,1,0,0,0, + 506,505,1,0,0,0,507,516,1,0,0,0,508,509,10,3,0,0,509,510,5,118,0, + 0,510,515,3,20,10,4,511,512,10,2,0,0,512,513,5,119,0,0,513,515,3, + 20,10,3,514,508,1,0,0,0,514,511,1,0,0,0,515,518,1,0,0,0,516,514, + 1,0,0,0,516,517,1,0,0,0,517,21,1,0,0,0,518,516,1,0,0,0,519,523,3, + 26,13,0,520,523,3,28,14,0,521,523,3,24,12,0,522,519,1,0,0,0,522, + 520,1,0,0,0,522,521,1,0,0,0,523,23,1,0,0,0,524,530,3,238,119,0,525, + 530,3,372,186,0,526,530,5,455,0,0,527,530,3,362,181,0,528,530,3, + 404,202,0,529,524,1,0,0,0,529,525,1,0,0,0,529,526,1,0,0,0,529,527, + 1,0,0,0,529,528,1,0,0,0,530,25,1,0,0,0,531,532,3,270,135,0,532,533, + 3,32,16,0,533,534,3,24,12,0,534,27,1,0,0,0,535,536,3,270,135,0,536, + 537,5,114,0,0,537,538,5,184,0,0,538,539,3,30,15,0,539,540,5,185, + 0,0,540,29,1,0,0,0,541,546,3,24,12,0,542,543,5,168,0,0,543,545,3, + 24,12,0,544,542,1,0,0,0,545,548,1,0,0,0,546,544,1,0,0,0,546,547, + 1,0,0,0,547,31,1,0,0,0,548,546,1,0,0,0,549,556,5,170,0,0,550,556, + 5,176,0,0,551,556,5,173,0,0,552,556,5,174,0,0,553,556,5,172,0,0, + 554,556,5,175,0,0,555,549,1,0,0,0,555,550,1,0,0,0,555,551,1,0,0, + 0,555,552,1,0,0,0,555,553,1,0,0,0,555,554,1,0,0,0,556,33,1,0,0,0, + 557,558,5,3,0,0,558,559,3,178,89,0,559,35,1,0,0,0,560,561,5,4,0, + 0,561,562,5,69,0,0,562,37,1,0,0,0,563,564,5,7,0,0,564,565,3,240, + 120,0,565,39,1,0,0,0,566,567,5,8,0,0,567,568,3,44,22,0,568,41,1, + 0,0,0,569,570,5,10,0,0,570,571,3,44,22,0,571,43,1,0,0,0,572,574, + 7,2,0,0,573,572,1,0,0,0,573,574,1,0,0,0,574,575,1,0,0,0,575,576, + 3,46,23,0,576,45,1,0,0,0,577,584,3,274,137,0,578,580,5,168,0,0,579, + 578,1,0,0,0,579,580,1,0,0,0,580,581,1,0,0,0,581,583,3,274,137,0, + 582,579,1,0,0,0,583,586,1,0,0,0,584,582,1,0,0,0,584,585,1,0,0,0, + 585,47,1,0,0,0,586,584,1,0,0,0,587,588,5,11,0,0,588,595,3,206,103, + 0,589,591,5,168,0,0,590,589,1,0,0,0,590,591,1,0,0,0,591,592,1,0, + 0,0,592,594,3,206,103,0,593,590,1,0,0,0,594,597,1,0,0,0,595,593, + 1,0,0,0,595,596,1,0,0,0,596,49,1,0,0,0,597,595,1,0,0,0,598,599,5, + 12,0,0,599,600,3,52,26,0,600,605,3,228,114,0,601,602,5,168,0,0,602, + 604,3,228,114,0,603,601,1,0,0,0,604,607,1,0,0,0,605,603,1,0,0,0, + 605,606,1,0,0,0,606,609,1,0,0,0,607,605,1,0,0,0,608,610,3,210,105, + 0,609,608,1,0,0,0,609,610,1,0,0,0,610,612,1,0,0,0,611,613,3,62,31, + 0,612,611,1,0,0,0,612,613,1,0,0,0,613,51,1,0,0,0,614,619,3,54,27, + 0,615,619,3,56,28,0,616,619,3,58,29,0,617,619,3,60,30,0,618,614, + 1,0,0,0,618,615,1,0,0,0,618,616,1,0,0,0,618,617,1,0,0,0,619,622, + 1,0,0,0,620,618,1,0,0,0,620,621,1,0,0,0,621,53,1,0,0,0,622,620,1, + 0,0,0,623,624,5,86,0,0,624,625,5,170,0,0,625,626,3,364,182,0,626, + 55,1,0,0,0,627,628,5,87,0,0,628,629,5,170,0,0,629,630,3,372,186, + 0,630,57,1,0,0,0,631,632,5,88,0,0,632,633,5,170,0,0,633,634,3,362, + 181,0,634,59,1,0,0,0,635,636,5,89,0,0,636,637,5,170,0,0,637,638, + 3,372,186,0,638,61,1,0,0,0,639,640,5,85,0,0,640,641,5,170,0,0,641, + 642,3,372,186,0,642,63,1,0,0,0,643,644,5,13,0,0,644,649,3,220,110, + 0,645,646,5,168,0,0,646,648,3,220,110,0,647,645,1,0,0,0,648,651, + 1,0,0,0,649,647,1,0,0,0,649,650,1,0,0,0,650,653,1,0,0,0,651,649, + 1,0,0,0,652,654,3,210,105,0,653,652,1,0,0,0,653,654,1,0,0,0,654, + 65,1,0,0,0,655,657,5,14,0,0,656,658,3,364,182,0,657,656,1,0,0,0, + 657,658,1,0,0,0,658,659,1,0,0,0,659,663,3,264,132,0,660,661,5,83, + 0,0,661,662,5,170,0,0,662,664,3,372,186,0,663,660,1,0,0,0,663,664, + 1,0,0,0,664,668,1,0,0,0,665,666,5,84,0,0,666,667,5,170,0,0,667,669, + 3,372,186,0,668,665,1,0,0,0,668,669,1,0,0,0,669,67,1,0,0,0,670,672, + 5,15,0,0,671,673,3,364,182,0,672,671,1,0,0,0,672,673,1,0,0,0,673, + 674,1,0,0,0,674,676,3,216,108,0,675,677,7,3,0,0,676,675,1,0,0,0, + 676,677,1,0,0,0,677,69,1,0,0,0,678,679,5,356,0,0,679,71,1,0,0,0, + 680,684,5,37,0,0,681,683,3,74,37,0,682,681,1,0,0,0,683,686,1,0,0, + 0,684,682,1,0,0,0,684,685,1,0,0,0,685,687,1,0,0,0,686,684,1,0,0, + 0,687,690,3,230,115,0,688,689,5,62,0,0,689,691,3,270,135,0,690,688, + 1,0,0,0,690,691,1,0,0,0,691,73,1,0,0,0,692,697,3,214,107,0,693,694, + 5,427,0,0,694,695,5,170,0,0,695,697,3,78,39,0,696,692,1,0,0,0,696, + 693,1,0,0,0,697,700,1,0,0,0,698,700,3,76,38,0,699,696,1,0,0,0,699, + 698,1,0,0,0,700,75,1,0,0,0,701,702,5,107,0,0,702,703,5,170,0,0,703, + 711,3,364,182,0,704,705,5,108,0,0,705,708,5,170,0,0,706,709,3,372, + 186,0,707,709,3,396,198,0,708,706,1,0,0,0,708,707,1,0,0,0,709,711, + 1,0,0,0,710,701,1,0,0,0,710,704,1,0,0,0,711,77,1,0,0,0,712,713,3, + 364,182,0,713,714,3,384,192,0,714,717,1,0,0,0,715,717,3,362,181, + 0,716,712,1,0,0,0,716,715,1,0,0,0,717,79,1,0,0,0,718,719,5,16,0, + 0,719,724,3,218,109,0,720,721,5,168,0,0,721,723,3,218,109,0,722, + 720,1,0,0,0,723,726,1,0,0,0,724,722,1,0,0,0,724,725,1,0,0,0,725, + 81,1,0,0,0,726,724,1,0,0,0,727,729,5,17,0,0,728,730,3,364,182,0, + 729,728,1,0,0,0,729,730,1,0,0,0,730,733,1,0,0,0,731,732,5,6,0,0, + 732,734,3,364,182,0,733,731,1,0,0,0,733,734,1,0,0,0,734,83,1,0,0, + 0,735,736,5,18,0,0,736,740,3,270,135,0,737,739,3,86,43,0,738,737, + 1,0,0,0,739,742,1,0,0,0,740,738,1,0,0,0,740,741,1,0,0,0,741,745, + 1,0,0,0,742,740,1,0,0,0,743,744,5,61,0,0,744,746,3,388,194,0,745, + 743,1,0,0,0,745,746,1,0,0,0,746,85,1,0,0,0,747,748,5,427,0,0,748, + 749,5,170,0,0,749,769,3,90,45,0,750,751,5,428,0,0,751,752,5,170, + 0,0,752,769,3,364,182,0,753,754,5,429,0,0,754,755,5,170,0,0,755, + 757,3,358,179,0,756,758,3,384,192,0,757,756,1,0,0,0,757,758,1,0, + 0,0,758,769,1,0,0,0,759,760,5,432,0,0,760,761,5,170,0,0,761,769, + 3,88,44,0,762,763,5,430,0,0,763,764,5,170,0,0,764,769,3,238,119, + 0,765,766,5,431,0,0,766,767,5,170,0,0,767,769,3,238,119,0,768,747, + 1,0,0,0,768,750,1,0,0,0,768,753,1,0,0,0,768,759,1,0,0,0,768,762, + 1,0,0,0,768,765,1,0,0,0,769,87,1,0,0,0,770,774,5,220,0,0,771,774, + 5,221,0,0,772,774,3,358,179,0,773,770,1,0,0,0,773,771,1,0,0,0,773, + 772,1,0,0,0,774,89,1,0,0,0,775,777,3,358,179,0,776,778,3,384,192, + 0,777,776,1,0,0,0,777,778,1,0,0,0,778,785,1,0,0,0,779,785,3,92,46, + 0,780,781,3,396,198,0,781,782,3,384,192,0,782,785,1,0,0,0,783,785, + 3,396,198,0,784,775,1,0,0,0,784,779,1,0,0,0,784,780,1,0,0,0,784, + 783,1,0,0,0,785,91,1,0,0,0,786,787,5,258,0,0,787,93,1,0,0,0,788, + 790,5,19,0,0,789,791,3,364,182,0,790,789,1,0,0,0,790,791,1,0,0,0, + 791,795,1,0,0,0,792,793,5,105,0,0,793,794,5,170,0,0,794,796,3,362, + 181,0,795,792,1,0,0,0,795,796,1,0,0,0,796,800,1,0,0,0,797,798,5, + 106,0,0,798,799,5,170,0,0,799,801,3,372,186,0,800,797,1,0,0,0,800, + 801,1,0,0,0,801,802,1,0,0,0,802,804,3,264,132,0,803,805,3,208,104, + 0,804,803,1,0,0,0,804,805,1,0,0,0,805,95,1,0,0,0,806,808,5,20,0, + 0,807,809,3,364,182,0,808,807,1,0,0,0,808,809,1,0,0,0,809,813,1, + 0,0,0,810,811,5,105,0,0,811,812,5,170,0,0,812,814,3,362,181,0,813, + 810,1,0,0,0,813,814,1,0,0,0,814,818,1,0,0,0,815,816,5,106,0,0,816, + 817,5,170,0,0,817,819,3,372,186,0,818,815,1,0,0,0,818,819,1,0,0, + 0,819,820,1,0,0,0,820,822,3,264,132,0,821,823,3,208,104,0,822,821, + 1,0,0,0,822,823,1,0,0,0,823,97,1,0,0,0,824,825,5,27,0,0,825,826, + 3,242,121,0,826,827,3,362,181,0,827,99,1,0,0,0,828,829,5,21,0,0, + 829,830,3,242,121,0,830,831,3,362,181,0,831,101,1,0,0,0,832,836, + 5,22,0,0,833,835,3,104,52,0,834,833,1,0,0,0,835,838,1,0,0,0,836, + 834,1,0,0,0,836,837,1,0,0,0,837,103,1,0,0,0,838,836,1,0,0,0,839, + 840,5,109,0,0,840,841,5,170,0,0,841,851,3,242,121,0,842,843,5,110, + 0,0,843,844,5,170,0,0,844,851,3,242,121,0,845,846,5,111,0,0,846, + 848,5,170,0,0,847,845,1,0,0,0,847,848,1,0,0,0,848,849,1,0,0,0,849, + 851,3,106,53,0,850,839,1,0,0,0,850,842,1,0,0,0,850,847,1,0,0,0,851, + 105,1,0,0,0,852,857,3,108,54,0,853,854,5,169,0,0,854,856,3,108,54, + 0,855,853,1,0,0,0,856,859,1,0,0,0,857,855,1,0,0,0,857,858,1,0,0, + 0,858,107,1,0,0,0,859,857,1,0,0,0,860,862,3,396,198,0,861,863,3, + 110,55,0,862,861,1,0,0,0,862,863,1,0,0,0,863,109,1,0,0,0,864,866, + 5,188,0,0,865,867,5,457,0,0,866,865,1,0,0,0,866,867,1,0,0,0,867, + 868,1,0,0,0,868,869,5,189,0,0,869,111,1,0,0,0,870,871,5,23,0,0,871, + 872,3,114,57,0,872,113,1,0,0,0,873,874,3,388,194,0,874,875,7,4,0, + 0,875,876,3,362,181,0,876,115,1,0,0,0,877,878,5,24,0,0,878,879,3, + 118,59,0,879,117,1,0,0,0,880,881,5,9,0,0,881,882,5,170,0,0,882,886, + 3,388,194,0,883,885,3,120,60,0,884,883,1,0,0,0,885,888,1,0,0,0,886, + 884,1,0,0,0,886,887,1,0,0,0,887,889,1,0,0,0,888,886,1,0,0,0,889, + 893,3,362,181,0,890,892,3,120,60,0,891,890,1,0,0,0,892,895,1,0,0, + 0,893,891,1,0,0,0,893,894,1,0,0,0,894,119,1,0,0,0,895,893,1,0,0, + 0,896,897,5,46,0,0,897,898,5,170,0,0,898,906,3,364,182,0,899,900, + 5,207,0,0,900,901,5,170,0,0,901,906,7,5,0,0,902,903,5,47,0,0,903, + 904,5,170,0,0,904,906,3,388,194,0,905,896,1,0,0,0,905,899,1,0,0, + 0,905,902,1,0,0,0,906,121,1,0,0,0,907,908,7,6,0,0,908,123,1,0,0, + 0,909,910,5,29,0,0,910,912,3,242,121,0,911,913,3,210,105,0,912,911, + 1,0,0,0,912,913,1,0,0,0,913,917,1,0,0,0,914,915,5,44,0,0,915,916, + 5,170,0,0,916,918,3,128,64,0,917,914,1,0,0,0,917,918,1,0,0,0,918, + 922,1,0,0,0,919,920,5,207,0,0,920,921,5,170,0,0,921,923,3,130,65, + 0,922,919,1,0,0,0,922,923,1,0,0,0,923,927,1,0,0,0,924,925,5,45,0, + 0,925,926,5,170,0,0,926,928,3,364,182,0,927,924,1,0,0,0,927,928, + 1,0,0,0,928,932,1,0,0,0,929,930,5,48,0,0,930,931,5,170,0,0,931,933, + 3,364,182,0,932,929,1,0,0,0,932,933,1,0,0,0,933,937,1,0,0,0,934, + 935,5,30,0,0,935,936,5,170,0,0,936,938,3,362,181,0,937,934,1,0,0, + 0,937,938,1,0,0,0,938,942,1,0,0,0,939,941,3,126,63,0,940,939,1,0, + 0,0,941,944,1,0,0,0,942,940,1,0,0,0,942,943,1,0,0,0,943,125,1,0, + 0,0,944,942,1,0,0,0,945,946,5,28,0,0,946,947,5,170,0,0,947,955,3, + 362,181,0,948,949,5,42,0,0,949,950,5,170,0,0,950,955,3,364,182,0, + 951,952,5,43,0,0,952,953,5,170,0,0,953,955,3,366,183,0,954,945,1, + 0,0,0,954,948,1,0,0,0,954,951,1,0,0,0,955,127,1,0,0,0,956,957,7, + 7,0,0,957,129,1,0,0,0,958,959,7,8,0,0,959,131,1,0,0,0,960,961,5, + 157,0,0,961,962,3,260,130,0,962,965,3,134,67,0,963,964,7,9,0,0,964, + 966,3,136,68,0,965,963,1,0,0,0,965,966,1,0,0,0,966,133,1,0,0,0,967, + 972,3,138,69,0,968,969,5,168,0,0,969,971,3,138,69,0,970,968,1,0, + 0,0,971,974,1,0,0,0,972,970,1,0,0,0,972,973,1,0,0,0,973,135,1,0, + 0,0,974,972,1,0,0,0,975,980,3,138,69,0,976,977,5,168,0,0,977,979, + 3,138,69,0,978,976,1,0,0,0,979,982,1,0,0,0,980,978,1,0,0,0,980,981, + 1,0,0,0,981,137,1,0,0,0,982,980,1,0,0,0,983,986,3,270,135,0,984, + 985,5,61,0,0,985,987,3,270,135,0,986,984,1,0,0,0,986,987,1,0,0,0, + 987,139,1,0,0,0,988,989,5,34,0,0,989,993,3,142,71,0,990,991,5,34, + 0,0,991,993,3,144,72,0,992,988,1,0,0,0,992,990,1,0,0,0,993,141,1, + 0,0,0,994,995,5,71,0,0,995,998,3,244,122,0,996,997,5,114,0,0,997, + 999,3,264,132,0,998,996,1,0,0,0,998,999,1,0,0,0,999,143,1,0,0,0, + 1000,1001,5,70,0,0,1001,1006,3,146,73,0,1002,1003,5,168,0,0,1003, + 1005,3,146,73,0,1004,1002,1,0,0,0,1005,1008,1,0,0,0,1006,1004,1, + 0,0,0,1006,1007,1,0,0,0,1007,145,1,0,0,0,1008,1006,1,0,0,0,1009, + 1010,3,270,135,0,1010,1011,5,170,0,0,1011,1012,3,244,122,0,1012, + 147,1,0,0,0,1013,1016,5,36,0,0,1014,1015,5,15,0,0,1015,1017,3,266, + 133,0,1016,1014,1,0,0,0,1016,1017,1,0,0,0,1017,1018,1,0,0,0,1018, + 1022,3,150,75,0,1019,1021,3,150,75,0,1020,1019,1,0,0,0,1021,1024, + 1,0,0,0,1022,1020,1,0,0,0,1022,1023,1,0,0,0,1023,149,1,0,0,0,1024, + 1022,1,0,0,0,1025,1026,3,152,76,0,1026,1027,5,184,0,0,1027,1028, + 3,364,182,0,1028,1029,5,168,0,0,1029,1030,3,270,135,0,1030,1033, + 5,185,0,0,1031,1032,5,61,0,0,1032,1034,3,388,194,0,1033,1031,1,0, + 0,0,1033,1034,1,0,0,0,1034,151,1,0,0,0,1035,1036,7,10,0,0,1036,153, + 1,0,0,0,1037,1038,5,39,0,0,1038,1041,3,270,135,0,1039,1040,5,61, + 0,0,1040,1042,3,388,194,0,1041,1039,1,0,0,0,1041,1042,1,0,0,0,1042, + 155,1,0,0,0,1043,1044,5,35,0,0,1044,1047,3,270,135,0,1045,1046,5, + 61,0,0,1046,1048,3,394,197,0,1047,1045,1,0,0,0,1047,1048,1,0,0,0, + 1048,157,1,0,0,0,1049,1053,5,38,0,0,1050,1051,5,76,0,0,1051,1052, + 5,170,0,0,1052,1054,3,372,186,0,1053,1050,1,0,0,0,1053,1054,1,0, + 0,0,1054,1055,1,0,0,0,1055,1056,5,186,0,0,1056,1061,3,14,7,0,1057, + 1058,5,167,0,0,1058,1060,3,14,7,0,1059,1057,1,0,0,0,1060,1063,1, + 0,0,0,1061,1059,1,0,0,0,1061,1062,1,0,0,0,1062,1064,1,0,0,0,1063, + 1061,1,0,0,0,1064,1065,5,187,0,0,1065,159,1,0,0,0,1066,1067,5,104, + 0,0,1067,1069,5,186,0,0,1068,1070,3,18,9,0,1069,1068,1,0,0,0,1069, + 1070,1,0,0,0,1070,1075,1,0,0,0,1071,1072,5,167,0,0,1072,1074,3,14, + 7,0,1073,1071,1,0,0,0,1074,1077,1,0,0,0,1075,1073,1,0,0,0,1075,1076, + 1,0,0,0,1076,1078,1,0,0,0,1077,1075,1,0,0,0,1078,1079,5,187,0,0, + 1079,161,1,0,0,0,1080,1084,5,31,0,0,1081,1083,3,164,82,0,1082,1081, + 1,0,0,0,1083,1086,1,0,0,0,1084,1082,1,0,0,0,1084,1085,1,0,0,0,1085, + 163,1,0,0,0,1086,1084,1,0,0,0,1087,1088,5,90,0,0,1088,1089,5,170, + 0,0,1089,1097,3,364,182,0,1090,1091,5,91,0,0,1091,1092,5,170,0,0, + 1092,1097,3,364,182,0,1093,1094,5,92,0,0,1094,1095,5,170,0,0,1095, + 1097,3,362,181,0,1096,1087,1,0,0,0,1096,1090,1,0,0,0,1096,1093,1, + 0,0,0,1097,165,1,0,0,0,1098,1102,5,32,0,0,1099,1101,3,168,84,0,1100, + 1099,1,0,0,0,1101,1104,1,0,0,0,1102,1100,1,0,0,0,1102,1103,1,0,0, + 0,1103,167,1,0,0,0,1104,1102,1,0,0,0,1105,1106,5,93,0,0,1106,1107, + 5,170,0,0,1107,1142,3,364,182,0,1108,1109,5,94,0,0,1109,1110,5,170, + 0,0,1110,1142,3,364,182,0,1111,1112,5,95,0,0,1112,1113,5,170,0,0, + 1113,1142,3,364,182,0,1114,1115,5,96,0,0,1115,1116,5,170,0,0,1116, + 1142,3,364,182,0,1117,1118,5,97,0,0,1118,1119,5,170,0,0,1119,1142, + 3,366,183,0,1120,1121,5,98,0,0,1121,1122,5,170,0,0,1122,1142,3,366, + 183,0,1123,1124,5,99,0,0,1124,1125,5,170,0,0,1125,1142,3,362,181, + 0,1126,1127,5,100,0,0,1127,1128,5,170,0,0,1128,1142,3,362,181,0, + 1129,1130,5,297,0,0,1130,1131,5,170,0,0,1131,1142,3,362,181,0,1132, + 1133,5,101,0,0,1133,1134,5,170,0,0,1134,1142,3,362,181,0,1135,1136, + 5,102,0,0,1136,1137,5,170,0,0,1137,1142,3,364,182,0,1138,1139,5, + 103,0,0,1139,1140,5,170,0,0,1140,1142,3,366,183,0,1141,1105,1,0, + 0,0,1141,1108,1,0,0,0,1141,1111,1,0,0,0,1141,1114,1,0,0,0,1141,1117, + 1,0,0,0,1141,1120,1,0,0,0,1141,1123,1,0,0,0,1141,1126,1,0,0,0,1141, + 1129,1,0,0,0,1141,1132,1,0,0,0,1141,1135,1,0,0,0,1141,1138,1,0,0, + 0,1142,169,1,0,0,0,1143,1147,5,33,0,0,1144,1146,3,172,86,0,1145, + 1144,1,0,0,0,1146,1149,1,0,0,0,1147,1145,1,0,0,0,1147,1148,1,0,0, + 0,1148,171,1,0,0,0,1149,1147,1,0,0,0,1150,1151,3,396,198,0,1151, + 1152,5,170,0,0,1152,1153,3,358,179,0,1153,173,1,0,0,0,1154,1155, + 5,63,0,0,1155,1156,5,170,0,0,1156,1173,3,176,88,0,1157,1158,5,64, + 0,0,1158,1159,5,170,0,0,1159,1173,3,176,88,0,1160,1161,5,63,0,0, + 1161,1162,5,170,0,0,1162,1173,3,262,131,0,1163,1164,5,64,0,0,1164, + 1165,5,170,0,0,1165,1173,3,262,131,0,1166,1167,5,63,0,0,1167,1168, + 5,170,0,0,1168,1173,3,180,90,0,1169,1170,5,64,0,0,1170,1171,5,170, + 0,0,1171,1173,3,180,90,0,1172,1154,1,0,0,0,1172,1157,1,0,0,0,1172, + 1160,1,0,0,0,1172,1163,1,0,0,0,1172,1166,1,0,0,0,1172,1169,1,0,0, + 0,1173,175,1,0,0,0,1174,1175,5,186,0,0,1175,1176,3,10,5,0,1176,1179, + 5,187,0,0,1177,1178,5,61,0,0,1178,1180,3,388,194,0,1179,1177,1,0, + 0,0,1179,1180,1,0,0,0,1180,1183,1,0,0,0,1181,1183,3,178,89,0,1182, + 1174,1,0,0,0,1182,1181,1,0,0,0,1183,177,1,0,0,0,1184,1189,3,260, + 130,0,1185,1186,5,168,0,0,1186,1188,3,260,130,0,1187,1185,1,0,0, + 0,1188,1191,1,0,0,0,1189,1187,1,0,0,0,1189,1190,1,0,0,0,1190,1194, + 1,0,0,0,1191,1189,1,0,0,0,1192,1193,5,61,0,0,1193,1195,3,388,194, + 0,1194,1192,1,0,0,0,1194,1195,1,0,0,0,1195,179,1,0,0,0,1196,1197, + 5,186,0,0,1197,1200,3,182,91,0,1198,1199,5,168,0,0,1199,1201,3,186, + 93,0,1200,1198,1,0,0,0,1200,1201,1,0,0,0,1201,1202,1,0,0,0,1202, + 1203,5,187,0,0,1203,181,1,0,0,0,1204,1209,3,184,92,0,1205,1206,5, + 168,0,0,1206,1208,3,184,92,0,1207,1205,1,0,0,0,1208,1211,1,0,0,0, + 1209,1207,1,0,0,0,1209,1210,1,0,0,0,1210,183,1,0,0,0,1211,1209,1, + 0,0,0,1212,1214,5,456,0,0,1213,1212,1,0,0,0,1213,1214,1,0,0,0,1214, + 1215,1,0,0,0,1215,1216,3,392,196,0,1216,185,1,0,0,0,1217,1222,3, + 188,94,0,1218,1219,5,168,0,0,1219,1221,3,188,94,0,1220,1218,1,0, + 0,0,1221,1224,1,0,0,0,1222,1220,1,0,0,0,1222,1223,1,0,0,0,1223,187, + 1,0,0,0,1224,1222,1,0,0,0,1225,1226,3,396,198,0,1226,1227,5,170, + 0,0,1227,1228,3,358,179,0,1228,1234,1,0,0,0,1229,1230,3,396,198, + 0,1230,1231,5,114,0,0,1231,1232,3,386,193,0,1232,1234,1,0,0,0,1233, + 1225,1,0,0,0,1233,1229,1,0,0,0,1234,189,1,0,0,0,1235,1239,5,51,0, + 0,1236,1238,3,204,102,0,1237,1236,1,0,0,0,1238,1241,1,0,0,0,1239, + 1237,1,0,0,0,1239,1240,1,0,0,0,1240,1243,1,0,0,0,1241,1239,1,0,0, + 0,1242,1244,3,264,132,0,1243,1242,1,0,0,0,1243,1244,1,0,0,0,1244, + 1245,1,0,0,0,1245,1264,3,176,88,0,1246,1248,3,192,96,0,1247,1246, + 1,0,0,0,1247,1248,1,0,0,0,1248,1249,1,0,0,0,1249,1253,5,51,0,0,1250, + 1252,3,204,102,0,1251,1250,1,0,0,0,1252,1255,1,0,0,0,1253,1251,1, + 0,0,0,1253,1254,1,0,0,0,1254,1256,1,0,0,0,1255,1253,1,0,0,0,1256, + 1258,3,196,98,0,1257,1259,3,200,100,0,1258,1257,1,0,0,0,1258,1259, + 1,0,0,0,1259,1260,1,0,0,0,1260,1261,3,198,99,0,1261,1262,3,176,88, + 0,1262,1264,1,0,0,0,1263,1235,1,0,0,0,1263,1247,1,0,0,0,1264,191, + 1,0,0,0,1265,1291,5,53,0,0,1266,1291,5,58,0,0,1267,1269,5,352,0, + 0,1268,1270,5,54,0,0,1269,1268,1,0,0,0,1269,1270,1,0,0,0,1270,1273, + 1,0,0,0,1271,1273,5,54,0,0,1272,1267,1,0,0,0,1272,1271,1,0,0,0,1273, + 1291,1,0,0,0,1274,1276,5,351,0,0,1275,1277,5,54,0,0,1276,1275,1, + 0,0,0,1276,1277,1,0,0,0,1277,1291,1,0,0,0,1278,1280,5,55,0,0,1279, + 1281,5,54,0,0,1280,1279,1,0,0,0,1280,1281,1,0,0,0,1281,1291,1,0, + 0,0,1282,1284,5,352,0,0,1283,1282,1,0,0,0,1283,1284,1,0,0,0,1284, + 1285,1,0,0,0,1285,1291,5,56,0,0,1286,1288,5,352,0,0,1287,1286,1, + 0,0,0,1287,1288,1,0,0,0,1288,1289,1,0,0,0,1289,1291,5,57,0,0,1290, + 1265,1,0,0,0,1290,1266,1,0,0,0,1290,1272,1,0,0,0,1290,1274,1,0,0, + 0,1290,1278,1,0,0,0,1290,1283,1,0,0,0,1290,1287,1,0,0,0,1291,193, + 1,0,0,0,1292,1293,7,11,0,0,1293,195,1,0,0,0,1294,1295,5,352,0,0, + 1295,1296,5,170,0,0,1296,1298,3,388,194,0,1297,1294,1,0,0,0,1297, + 1298,1,0,0,0,1298,1300,1,0,0,0,1299,1301,5,168,0,0,1300,1299,1,0, + 0,0,1300,1301,1,0,0,0,1301,1305,1,0,0,0,1302,1303,5,351,0,0,1303, + 1304,5,170,0,0,1304,1306,3,388,194,0,1305,1302,1,0,0,0,1305,1306, + 1,0,0,0,1306,197,1,0,0,0,1307,1308,7,12,0,0,1308,1309,3,240,120, + 0,1309,199,1,0,0,0,1310,1317,3,202,101,0,1311,1313,5,168,0,0,1312, + 1311,1,0,0,0,1312,1313,1,0,0,0,1313,1314,1,0,0,0,1314,1316,3,202, + 101,0,1315,1312,1,0,0,0,1316,1319,1,0,0,0,1317,1315,1,0,0,0,1317, + 1318,1,0,0,0,1318,201,1,0,0,0,1319,1317,1,0,0,0,1320,1321,5,59,0, + 0,1321,1322,5,169,0,0,1322,1323,5,455,0,0,1323,1324,5,170,0,0,1324, + 1331,3,396,198,0,1325,1326,5,60,0,0,1326,1327,5,169,0,0,1327,1328, + 5,455,0,0,1328,1329,5,170,0,0,1329,1331,3,396,198,0,1330,1320,1, + 0,0,0,1330,1325,1,0,0,0,1331,203,1,0,0,0,1332,1333,5,77,0,0,1333, + 1334,5,170,0,0,1334,1342,3,372,186,0,1335,1336,5,425,0,0,1336,1337, + 5,170,0,0,1337,1342,3,194,97,0,1338,1339,5,203,0,0,1339,1340,5,170, + 0,0,1340,1342,3,364,182,0,1341,1332,1,0,0,0,1341,1335,1,0,0,0,1341, + 1338,1,0,0,0,1342,205,1,0,0,0,1343,1344,3,276,138,0,1344,1345,5, + 61,0,0,1345,1346,3,276,138,0,1346,207,1,0,0,0,1347,1348,5,62,0,0, + 1348,1349,3,264,132,0,1349,209,1,0,0,0,1350,1351,5,62,0,0,1351,1365, + 3,264,132,0,1352,1353,5,62,0,0,1353,1365,3,212,106,0,1354,1355,5, + 62,0,0,1355,1356,3,212,106,0,1356,1357,5,168,0,0,1357,1358,3,264, + 132,0,1358,1365,1,0,0,0,1359,1360,5,62,0,0,1360,1361,3,264,132,0, + 1361,1362,5,168,0,0,1362,1363,3,212,106,0,1363,1365,1,0,0,0,1364, + 1350,1,0,0,0,1364,1352,1,0,0,0,1364,1354,1,0,0,0,1364,1359,1,0,0, + 0,1365,211,1,0,0,0,1366,1369,3,214,107,0,1367,1368,5,61,0,0,1368, + 1370,3,388,194,0,1369,1367,1,0,0,0,1369,1370,1,0,0,0,1370,213,1, + 0,0,0,1371,1372,5,427,0,0,1372,1373,5,184,0,0,1373,1374,3,270,135, + 0,1374,1375,5,168,0,0,1375,1377,3,358,179,0,1376,1378,3,384,192, + 0,1377,1376,1,0,0,0,1377,1378,1,0,0,0,1378,1379,1,0,0,0,1379,1380, + 5,185,0,0,1380,215,1,0,0,0,1381,1386,3,266,133,0,1382,1383,5,168, + 0,0,1383,1385,3,266,133,0,1384,1382,1,0,0,0,1385,1388,1,0,0,0,1386, + 1384,1,0,0,0,1386,1387,1,0,0,0,1387,217,1,0,0,0,1388,1386,1,0,0, + 0,1389,1390,3,270,135,0,1390,1391,5,170,0,0,1391,1392,3,240,120, + 0,1392,219,1,0,0,0,1393,1396,3,222,111,0,1394,1395,5,61,0,0,1395, + 1397,3,272,136,0,1396,1394,1,0,0,0,1396,1397,1,0,0,0,1397,221,1, + 0,0,0,1398,1399,3,224,112,0,1399,1400,5,184,0,0,1400,1401,3,286, + 143,0,1401,1402,5,185,0,0,1402,223,1,0,0,0,1403,1406,3,232,116,0, + 1404,1406,3,226,113,0,1405,1403,1,0,0,0,1405,1404,1,0,0,0,1406,225, + 1,0,0,0,1407,1408,7,13,0,0,1408,227,1,0,0,0,1409,1412,3,230,115, + 0,1410,1411,5,61,0,0,1411,1413,3,272,136,0,1412,1410,1,0,0,0,1412, + 1413,1,0,0,0,1413,229,1,0,0,0,1414,1415,7,14,0,0,1415,1416,5,184, + 0,0,1416,1417,3,246,123,0,1417,1418,5,185,0,0,1418,1442,1,0,0,0, + 1419,1422,7,14,0,0,1420,1421,5,184,0,0,1421,1423,5,185,0,0,1422, + 1420,1,0,0,0,1422,1423,1,0,0,0,1423,1442,1,0,0,0,1424,1425,5,454, + 0,0,1425,1426,5,184,0,0,1426,1427,3,244,122,0,1427,1428,5,185,0, + 0,1428,1442,1,0,0,0,1429,1430,7,15,0,0,1430,1431,5,184,0,0,1431, + 1432,3,244,122,0,1432,1433,5,185,0,0,1433,1442,1,0,0,0,1434,1442, + 3,234,117,0,1435,1442,3,236,118,0,1436,1437,3,232,116,0,1437,1438, + 5,184,0,0,1438,1439,3,286,143,0,1439,1440,5,185,0,0,1440,1442,1, + 0,0,0,1441,1414,1,0,0,0,1441,1419,1,0,0,0,1441,1424,1,0,0,0,1441, + 1429,1,0,0,0,1441,1434,1,0,0,0,1441,1435,1,0,0,0,1441,1436,1,0,0, + 0,1442,231,1,0,0,0,1443,1444,7,16,0,0,1444,233,1,0,0,0,1445,1446, + 5,222,0,0,1446,1447,5,184,0,0,1447,1450,3,270,135,0,1448,1449,5, + 168,0,0,1449,1451,3,364,182,0,1450,1448,1,0,0,0,1450,1451,1,0,0, + 0,1451,1452,1,0,0,0,1452,1453,5,185,0,0,1453,235,1,0,0,0,1454,1455, + 7,17,0,0,1455,1456,5,184,0,0,1456,1457,3,244,122,0,1457,1458,5,168, + 0,0,1458,1461,3,238,119,0,1459,1460,5,168,0,0,1460,1462,3,238,119, + 0,1461,1459,1,0,0,0,1461,1462,1,0,0,0,1462,1463,1,0,0,0,1463,1464, + 5,185,0,0,1464,237,1,0,0,0,1465,1470,3,364,182,0,1466,1470,3,366, + 183,0,1467,1470,3,368,184,0,1468,1470,3,370,185,0,1469,1465,1,0, + 0,0,1469,1466,1,0,0,0,1469,1467,1,0,0,0,1469,1468,1,0,0,0,1470,239, + 1,0,0,0,1471,1472,6,120,-1,0,1472,1473,5,117,0,0,1473,1476,3,240, + 120,5,1474,1476,3,242,121,0,1475,1471,1,0,0,0,1475,1474,1,0,0,0, + 1476,1488,1,0,0,0,1477,1478,10,4,0,0,1478,1479,5,119,0,0,1479,1487, + 3,240,120,5,1480,1481,10,3,0,0,1481,1482,5,120,0,0,1482,1487,3,240, + 120,4,1483,1484,10,2,0,0,1484,1485,5,118,0,0,1485,1487,3,240,120, + 3,1486,1477,1,0,0,0,1486,1480,1,0,0,0,1486,1483,1,0,0,0,1487,1490, + 1,0,0,0,1488,1486,1,0,0,0,1488,1489,1,0,0,0,1489,241,1,0,0,0,1490, + 1488,1,0,0,0,1491,1492,6,121,-1,0,1492,1495,3,244,122,0,1493,1495, + 3,254,127,0,1494,1491,1,0,0,0,1494,1493,1,0,0,0,1495,1517,1,0,0, + 0,1496,1497,10,3,0,0,1497,1498,3,352,176,0,1498,1499,3,242,121,4, + 1499,1516,1,0,0,0,1500,1502,10,1,0,0,1501,1503,5,117,0,0,1502,1501, + 1,0,0,0,1502,1503,1,0,0,0,1503,1504,1,0,0,0,1504,1505,5,362,0,0, + 1505,1506,3,242,121,0,1506,1507,5,119,0,0,1507,1508,3,242,121,2, + 1508,1516,1,0,0,0,1509,1511,10,2,0,0,1510,1512,5,117,0,0,1511,1510, + 1,0,0,0,1511,1512,1,0,0,0,1512,1513,1,0,0,0,1513,1514,5,114,0,0, + 1514,1516,3,386,193,0,1515,1496,1,0,0,0,1515,1500,1,0,0,0,1515,1509, + 1,0,0,0,1516,1519,1,0,0,0,1517,1515,1,0,0,0,1517,1518,1,0,0,0,1518, + 243,1,0,0,0,1519,1517,1,0,0,0,1520,1521,6,122,-1,0,1521,1557,3,358, + 179,0,1522,1557,3,248,124,0,1523,1557,3,296,148,0,1524,1525,5,186, + 0,0,1525,1526,3,10,5,0,1526,1527,5,187,0,0,1527,1557,1,0,0,0,1528, + 1529,5,184,0,0,1529,1534,3,244,122,0,1530,1531,5,168,0,0,1531,1533, + 3,244,122,0,1532,1530,1,0,0,0,1533,1536,1,0,0,0,1534,1532,1,0,0, + 0,1534,1535,1,0,0,0,1535,1537,1,0,0,0,1536,1534,1,0,0,0,1537,1539, + 5,185,0,0,1538,1540,5,117,0,0,1539,1538,1,0,0,0,1539,1540,1,0,0, + 0,1540,1541,1,0,0,0,1541,1542,5,114,0,0,1542,1543,5,186,0,0,1543, + 1544,3,10,5,0,1544,1545,5,187,0,0,1545,1557,1,0,0,0,1546,1547,5, + 115,0,0,1547,1548,5,186,0,0,1548,1549,3,10,5,0,1549,1550,5,187,0, + 0,1550,1557,1,0,0,0,1551,1557,3,270,135,0,1552,1553,5,184,0,0,1553, + 1554,3,240,120,0,1554,1555,5,185,0,0,1555,1557,1,0,0,0,1556,1520, + 1,0,0,0,1556,1522,1,0,0,0,1556,1523,1,0,0,0,1556,1524,1,0,0,0,1556, + 1528,1,0,0,0,1556,1546,1,0,0,0,1556,1551,1,0,0,0,1556,1552,1,0,0, + 0,1557,1575,1,0,0,0,1558,1559,10,11,0,0,1559,1560,7,18,0,0,1560, + 1574,3,244,122,12,1561,1562,10,10,0,0,1562,1563,7,2,0,0,1563,1574, + 3,244,122,11,1564,1566,10,5,0,0,1565,1567,5,117,0,0,1566,1565,1, + 0,0,0,1566,1567,1,0,0,0,1567,1568,1,0,0,0,1568,1569,5,114,0,0,1569, + 1570,5,186,0,0,1570,1571,3,10,5,0,1571,1572,5,187,0,0,1572,1574, + 1,0,0,0,1573,1558,1,0,0,0,1573,1561,1,0,0,0,1573,1564,1,0,0,0,1574, + 1577,1,0,0,0,1575,1573,1,0,0,0,1575,1576,1,0,0,0,1576,245,1,0,0, + 0,1577,1575,1,0,0,0,1578,1579,5,16,0,0,1579,1580,5,184,0,0,1580, + 1581,3,240,120,0,1581,1582,5,185,0,0,1582,247,1,0,0,0,1583,1591, + 3,278,139,0,1584,1591,3,280,140,0,1585,1591,3,250,125,0,1586,1591, + 3,252,126,0,1587,1591,3,338,169,0,1588,1591,3,330,165,0,1589,1591, + 3,326,163,0,1590,1583,1,0,0,0,1590,1584,1,0,0,0,1590,1585,1,0,0, + 0,1590,1586,1,0,0,0,1590,1587,1,0,0,0,1590,1588,1,0,0,0,1590,1589, + 1,0,0,0,1591,249,1,0,0,0,1592,1593,3,350,175,0,1593,1594,5,184,0, + 0,1594,1595,3,290,145,0,1595,1596,5,114,0,0,1596,1597,3,290,145, + 0,1597,1598,5,185,0,0,1598,251,1,0,0,0,1599,1600,5,112,0,0,1600, + 1601,5,184,0,0,1601,1602,3,240,120,0,1602,1603,5,168,0,0,1603,1611, + 3,244,122,0,1604,1605,5,168,0,0,1605,1606,3,240,120,0,1606,1607, + 5,168,0,0,1607,1608,3,244,122,0,1608,1610,1,0,0,0,1609,1604,1,0, + 0,0,1610,1613,1,0,0,0,1611,1609,1,0,0,0,1611,1612,1,0,0,0,1612,1616, + 1,0,0,0,1613,1611,1,0,0,0,1614,1615,5,113,0,0,1615,1617,3,244,122, + 0,1616,1614,1,0,0,0,1616,1617,1,0,0,0,1617,1618,1,0,0,0,1618,1619, + 5,185,0,0,1619,253,1,0,0,0,1620,1623,3,256,128,0,1621,1623,3,258, + 129,0,1622,1620,1,0,0,0,1622,1621,1,0,0,0,1623,255,1,0,0,0,1624, + 1625,3,354,177,0,1625,1626,5,184,0,0,1626,1627,3,306,153,0,1627, + 1628,5,168,0,0,1628,1633,3,308,154,0,1629,1630,5,168,0,0,1630,1632, + 3,298,149,0,1631,1629,1,0,0,0,1632,1635,1,0,0,0,1633,1631,1,0,0, + 0,1633,1634,1,0,0,0,1634,1636,1,0,0,0,1635,1633,1,0,0,0,1636,1637, + 5,185,0,0,1637,257,1,0,0,0,1638,1639,3,356,178,0,1639,1652,5,184, + 0,0,1640,1641,5,186,0,0,1641,1646,3,302,151,0,1642,1643,5,168,0, + 0,1643,1645,3,302,151,0,1644,1642,1,0,0,0,1645,1648,1,0,0,0,1646, + 1644,1,0,0,0,1646,1647,1,0,0,0,1647,1649,1,0,0,0,1648,1646,1,0,0, + 0,1649,1650,5,187,0,0,1650,1651,5,168,0,0,1651,1653,1,0,0,0,1652, + 1640,1,0,0,0,1652,1653,1,0,0,0,1653,1654,1,0,0,0,1654,1659,3,308, + 154,0,1655,1656,5,168,0,0,1656,1658,3,298,149,0,1657,1655,1,0,0, + 0,1658,1661,1,0,0,0,1659,1657,1,0,0,0,1659,1660,1,0,0,0,1660,1662, + 1,0,0,0,1661,1659,1,0,0,0,1662,1663,5,185,0,0,1663,259,1,0,0,0,1664, + 1667,3,390,195,0,1665,1667,5,461,0,0,1666,1664,1,0,0,0,1666,1665, + 1,0,0,0,1667,261,1,0,0,0,1668,1669,3,388,194,0,1669,1670,5,184,0, + 0,1670,1671,3,288,144,0,1671,1672,5,185,0,0,1672,263,1,0,0,0,1673, + 1680,3,270,135,0,1674,1676,5,168,0,0,1675,1674,1,0,0,0,1675,1676, + 1,0,0,0,1676,1677,1,0,0,0,1677,1679,3,270,135,0,1678,1675,1,0,0, + 0,1679,1682,1,0,0,0,1680,1678,1,0,0,0,1680,1681,1,0,0,0,1681,265, + 1,0,0,0,1682,1680,1,0,0,0,1683,1685,7,2,0,0,1684,1683,1,0,0,0,1684, + 1685,1,0,0,0,1685,1686,1,0,0,0,1686,1687,3,268,134,0,1687,267,1, + 0,0,0,1688,1710,3,270,135,0,1689,1690,5,78,0,0,1690,1691,5,184,0, + 0,1691,1692,3,270,135,0,1692,1693,5,185,0,0,1693,1710,1,0,0,0,1694, + 1695,5,79,0,0,1695,1696,5,184,0,0,1696,1697,3,270,135,0,1697,1698, + 5,185,0,0,1698,1710,1,0,0,0,1699,1700,5,166,0,0,1700,1701,5,184, + 0,0,1701,1702,3,270,135,0,1702,1703,5,185,0,0,1703,1710,1,0,0,0, + 1704,1705,5,80,0,0,1705,1706,5,184,0,0,1706,1707,3,270,135,0,1707, + 1708,5,185,0,0,1708,1710,1,0,0,0,1709,1688,1,0,0,0,1709,1689,1,0, + 0,0,1709,1694,1,0,0,0,1709,1699,1,0,0,0,1709,1704,1,0,0,0,1710,269, + 1,0,0,0,1711,1712,3,388,194,0,1712,271,1,0,0,0,1713,1714,3,392,196, + 0,1714,273,1,0,0,0,1715,1718,3,392,196,0,1716,1718,5,179,0,0,1717, + 1715,1,0,0,0,1717,1716,1,0,0,0,1718,275,1,0,0,0,1719,1722,3,392, + 196,0,1720,1722,5,179,0,0,1721,1719,1,0,0,0,1721,1720,1,0,0,0,1722, + 277,1,0,0,0,1723,1724,3,284,142,0,1724,1725,5,184,0,0,1725,1726, + 3,286,143,0,1726,1727,5,185,0,0,1727,279,1,0,0,0,1728,1729,5,357, + 0,0,1729,1730,5,184,0,0,1730,1731,3,240,120,0,1731,1732,5,61,0,0, + 1732,1733,3,282,141,0,1733,1734,5,185,0,0,1734,281,1,0,0,0,1735, + 1748,5,294,0,0,1736,1748,5,323,0,0,1737,1748,5,325,0,0,1738,1748, + 5,159,0,0,1739,1748,5,160,0,0,1740,1748,5,161,0,0,1741,1748,5,162, + 0,0,1742,1748,5,163,0,0,1743,1748,5,164,0,0,1744,1748,5,165,0,0, + 1745,1748,5,166,0,0,1746,1748,5,374,0,0,1747,1735,1,0,0,0,1747,1736, + 1,0,0,0,1747,1737,1,0,0,0,1747,1738,1,0,0,0,1747,1739,1,0,0,0,1747, + 1740,1,0,0,0,1747,1741,1,0,0,0,1747,1742,1,0,0,0,1747,1743,1,0,0, + 0,1747,1744,1,0,0,0,1747,1745,1,0,0,0,1747,1746,1,0,0,0,1748,283, + 1,0,0,0,1749,1761,3,312,156,0,1750,1761,3,324,162,0,1751,1761,3, + 348,174,0,1752,1761,3,342,171,0,1753,1761,3,344,172,0,1754,1761, + 3,346,173,0,1755,1761,3,350,175,0,1756,1761,3,322,161,0,1757,1761, + 3,320,160,0,1758,1761,3,314,157,0,1759,1761,3,316,158,0,1760,1749, + 1,0,0,0,1760,1750,1,0,0,0,1760,1751,1,0,0,0,1760,1752,1,0,0,0,1760, + 1753,1,0,0,0,1760,1754,1,0,0,0,1760,1755,1,0,0,0,1760,1756,1,0,0, + 0,1760,1757,1,0,0,0,1760,1758,1,0,0,0,1760,1759,1,0,0,0,1761,285, + 1,0,0,0,1762,1767,3,290,145,0,1763,1764,5,168,0,0,1764,1766,3,290, + 145,0,1765,1763,1,0,0,0,1766,1769,1,0,0,0,1767,1765,1,0,0,0,1767, + 1768,1,0,0,0,1768,1771,1,0,0,0,1769,1767,1,0,0,0,1770,1762,1,0,0, + 0,1770,1771,1,0,0,0,1771,287,1,0,0,0,1772,1777,3,292,146,0,1773, + 1774,5,168,0,0,1774,1776,3,292,146,0,1775,1773,1,0,0,0,1776,1779, + 1,0,0,0,1777,1775,1,0,0,0,1777,1778,1,0,0,0,1778,1781,1,0,0,0,1779, + 1777,1,0,0,0,1780,1772,1,0,0,0,1780,1781,1,0,0,0,1781,289,1,0,0, + 0,1782,1783,3,294,147,0,1783,291,1,0,0,0,1784,1785,3,396,198,0,1785, + 1786,5,170,0,0,1786,1788,1,0,0,0,1787,1784,1,0,0,0,1787,1788,1,0, + 0,0,1788,1789,1,0,0,0,1789,1790,3,294,147,0,1790,293,1,0,0,0,1791, + 1794,3,296,148,0,1792,1794,3,240,120,0,1793,1791,1,0,0,0,1793,1792, + 1,0,0,0,1794,295,1,0,0,0,1795,1796,3,396,198,0,1796,1797,5,193,0, + 0,1797,1798,3,240,120,0,1798,1812,1,0,0,0,1799,1800,5,184,0,0,1800, + 1803,3,396,198,0,1801,1802,5,168,0,0,1802,1804,3,396,198,0,1803, + 1801,1,0,0,0,1804,1805,1,0,0,0,1805,1803,1,0,0,0,1805,1806,1,0,0, + 0,1806,1807,1,0,0,0,1807,1808,5,185,0,0,1808,1809,5,193,0,0,1809, + 1810,3,240,120,0,1810,1812,1,0,0,0,1811,1795,1,0,0,0,1811,1799,1, + 0,0,0,1812,297,1,0,0,0,1813,1814,3,300,150,0,1814,1815,5,170,0,0, + 1815,1816,3,310,155,0,1816,299,1,0,0,0,1817,1818,7,19,0,0,1818,301, + 1,0,0,0,1819,1828,3,306,153,0,1820,1821,3,306,153,0,1821,1822,3, + 304,152,0,1822,1828,1,0,0,0,1823,1824,3,306,153,0,1824,1825,5,196, + 0,0,1825,1826,3,304,152,0,1826,1828,1,0,0,0,1827,1819,1,0,0,0,1827, + 1820,1,0,0,0,1827,1823,1,0,0,0,1828,303,1,0,0,0,1829,1834,3,364, + 182,0,1830,1834,3,366,183,0,1831,1834,3,368,184,0,1832,1834,3,370, + 185,0,1833,1829,1,0,0,0,1833,1830,1,0,0,0,1833,1831,1,0,0,0,1833, + 1832,1,0,0,0,1834,305,1,0,0,0,1835,1838,3,388,194,0,1836,1838,3, + 362,181,0,1837,1835,1,0,0,0,1837,1836,1,0,0,0,1838,307,1,0,0,0,1839, + 1840,3,310,155,0,1840,309,1,0,0,0,1841,1844,3,388,194,0,1842,1844, + 3,358,179,0,1843,1841,1,0,0,0,1843,1842,1,0,0,0,1844,311,1,0,0,0, + 1845,1878,5,246,0,0,1846,1878,5,242,0,0,1847,1878,5,243,0,0,1848, + 1878,5,244,0,0,1849,1878,5,245,0,0,1850,1878,5,247,0,0,1851,1878, + 5,248,0,0,1852,1878,5,249,0,0,1853,1878,5,250,0,0,1854,1878,5,251, + 0,0,1855,1878,5,252,0,0,1856,1878,5,253,0,0,1857,1878,5,254,0,0, + 1858,1878,5,255,0,0,1859,1878,5,256,0,0,1860,1878,5,257,0,0,1861, + 1878,5,258,0,0,1862,1878,5,259,0,0,1863,1878,5,260,0,0,1864,1878, + 5,261,0,0,1865,1878,5,263,0,0,1866,1878,5,264,0,0,1867,1878,5,265, + 0,0,1868,1878,5,266,0,0,1869,1878,5,267,0,0,1870,1878,5,268,0,0, + 1871,1878,5,269,0,0,1872,1878,5,270,0,0,1873,1878,5,271,0,0,1874, + 1878,5,211,0,0,1875,1878,5,197,0,0,1876,1878,3,318,159,0,1877,1845, + 1,0,0,0,1877,1846,1,0,0,0,1877,1847,1,0,0,0,1877,1848,1,0,0,0,1877, + 1849,1,0,0,0,1877,1850,1,0,0,0,1877,1851,1,0,0,0,1877,1852,1,0,0, + 0,1877,1853,1,0,0,0,1877,1854,1,0,0,0,1877,1855,1,0,0,0,1877,1856, + 1,0,0,0,1877,1857,1,0,0,0,1877,1858,1,0,0,0,1877,1859,1,0,0,0,1877, + 1860,1,0,0,0,1877,1861,1,0,0,0,1877,1862,1,0,0,0,1877,1863,1,0,0, + 0,1877,1864,1,0,0,0,1877,1865,1,0,0,0,1877,1866,1,0,0,0,1877,1867, + 1,0,0,0,1877,1868,1,0,0,0,1877,1869,1,0,0,0,1877,1870,1,0,0,0,1877, + 1871,1,0,0,0,1877,1872,1,0,0,0,1877,1873,1,0,0,0,1877,1874,1,0,0, + 0,1877,1875,1,0,0,0,1877,1876,1,0,0,0,1878,313,1,0,0,0,1879,1880, + 5,116,0,0,1880,315,1,0,0,0,1881,1882,7,20,0,0,1882,317,1,0,0,0,1883, + 1884,7,21,0,0,1884,319,1,0,0,0,1885,1886,7,22,0,0,1886,321,1,0,0, + 0,1887,1888,7,23,0,0,1888,323,1,0,0,0,1889,1890,7,24,0,0,1890,325, + 1,0,0,0,1891,1892,5,308,0,0,1892,1893,5,184,0,0,1893,1894,3,328, + 164,0,1894,1895,5,168,0,0,1895,1896,3,290,145,0,1896,1897,5,185, + 0,0,1897,327,1,0,0,0,1898,1899,7,25,0,0,1899,329,1,0,0,0,1900,1901, + 5,305,0,0,1901,1902,5,184,0,0,1902,1903,3,336,168,0,1903,1904,5, + 6,0,0,1904,1905,3,290,145,0,1905,1906,5,185,0,0,1906,331,1,0,0,0, + 1907,1908,7,26,0,0,1908,333,1,0,0,0,1909,1910,7,27,0,0,1910,335, + 1,0,0,0,1911,1914,3,332,166,0,1912,1914,3,334,167,0,1913,1911,1, + 0,0,0,1913,1912,1,0,0,0,1914,337,1,0,0,0,1915,1916,3,340,170,0,1916, + 1917,5,184,0,0,1917,1918,3,332,166,0,1918,1919,5,168,0,0,1919,1920, + 3,290,145,0,1920,1921,5,168,0,0,1921,1922,3,290,145,0,1922,1923, + 5,185,0,0,1923,339,1,0,0,0,1924,1925,7,28,0,0,1925,341,1,0,0,0,1926, + 1927,7,29,0,0,1927,343,1,0,0,0,1928,1929,7,30,0,0,1929,345,1,0,0, + 0,1930,1931,5,387,0,0,1931,347,1,0,0,0,1932,1933,7,31,0,0,1933,349, + 1,0,0,0,1934,1935,5,262,0,0,1935,351,1,0,0,0,1936,1937,7,32,0,0, + 1937,353,1,0,0,0,1938,1939,7,33,0,0,1939,355,1,0,0,0,1940,1941,7, + 34,0,0,1941,357,1,0,0,0,1942,1951,3,360,180,0,1943,1951,3,362,181, + 0,1944,1951,3,364,182,0,1945,1951,3,366,183,0,1946,1951,3,368,184, + 0,1947,1951,3,370,185,0,1948,1951,3,372,186,0,1949,1951,3,374,187, + 0,1950,1942,1,0,0,0,1950,1943,1,0,0,0,1950,1944,1,0,0,0,1950,1945, + 1,0,0,0,1950,1946,1,0,0,0,1950,1947,1,0,0,0,1950,1948,1,0,0,0,1950, + 1949,1,0,0,0,1951,359,1,0,0,0,1952,1953,5,138,0,0,1953,1954,3,244, + 122,0,1954,1955,3,382,191,0,1955,361,1,0,0,0,1956,1957,7,35,0,0, + 1957,363,1,0,0,0,1958,1960,7,2,0,0,1959,1958,1,0,0,0,1959,1960,1, + 0,0,0,1960,1961,1,0,0,0,1961,1962,5,457,0,0,1962,365,1,0,0,0,1963, + 1965,7,2,0,0,1964,1963,1,0,0,0,1964,1965,1,0,0,0,1965,1966,1,0,0, + 0,1966,1967,5,458,0,0,1967,367,1,0,0,0,1968,1970,7,2,0,0,1969,1968, + 1,0,0,0,1969,1970,1,0,0,0,1970,1971,1,0,0,0,1971,1972,5,460,0,0, + 1972,369,1,0,0,0,1973,1975,7,2,0,0,1974,1973,1,0,0,0,1974,1975,1, + 0,0,0,1975,1976,1,0,0,0,1976,1977,5,459,0,0,1977,371,1,0,0,0,1978, + 1979,7,36,0,0,1979,373,1,0,0,0,1980,1984,3,376,188,0,1981,1984,3, + 378,189,0,1982,1984,3,380,190,0,1983,1980,1,0,0,0,1983,1981,1,0, + 0,0,1983,1982,1,0,0,0,1984,375,1,0,0,0,1985,1986,5,294,0,0,1986, + 1987,3,362,181,0,1987,377,1,0,0,0,1988,1989,5,323,0,0,1989,1990, + 3,362,181,0,1990,379,1,0,0,0,1991,1992,5,325,0,0,1992,1993,3,362, + 181,0,1993,381,1,0,0,0,1994,1995,7,37,0,0,1995,383,1,0,0,0,1996, + 1997,7,38,0,0,1997,385,1,0,0,0,1998,1999,5,184,0,0,1999,2004,3,358, + 179,0,2000,2001,5,168,0,0,2001,2003,3,358,179,0,2002,2000,1,0,0, + 0,2003,2006,1,0,0,0,2004,2002,1,0,0,0,2004,2005,1,0,0,0,2005,2007, + 1,0,0,0,2006,2004,1,0,0,0,2007,2008,5,185,0,0,2008,387,1,0,0,0,2009, + 2014,3,396,198,0,2010,2011,5,169,0,0,2011,2013,3,396,198,0,2012, + 2010,1,0,0,0,2013,2016,1,0,0,0,2014,2012,1,0,0,0,2014,2015,1,0,0, + 0,2015,389,1,0,0,0,2016,2014,1,0,0,0,2017,2022,3,398,199,0,2018, + 2019,5,169,0,0,2019,2021,3,396,198,0,2020,2018,1,0,0,0,2021,2024, + 1,0,0,0,2022,2020,1,0,0,0,2022,2023,1,0,0,0,2023,391,1,0,0,0,2024, + 2022,1,0,0,0,2025,2030,3,400,200,0,2026,2027,5,169,0,0,2027,2029, + 3,400,200,0,2028,2026,1,0,0,0,2029,2032,1,0,0,0,2030,2028,1,0,0, + 0,2030,2031,1,0,0,0,2031,393,1,0,0,0,2032,2030,1,0,0,0,2033,2038, + 3,388,194,0,2034,2035,5,168,0,0,2035,2037,3,388,194,0,2036,2034, + 1,0,0,0,2037,2040,1,0,0,0,2038,2036,1,0,0,0,2038,2039,1,0,0,0,2039, + 2053,1,0,0,0,2040,2038,1,0,0,0,2041,2042,5,184,0,0,2042,2047,3,388, + 194,0,2043,2044,5,168,0,0,2044,2046,3,388,194,0,2045,2043,1,0,0, + 0,2046,2049,1,0,0,0,2047,2045,1,0,0,0,2047,2048,1,0,0,0,2048,2050, + 1,0,0,0,2049,2047,1,0,0,0,2050,2051,5,185,0,0,2051,2053,1,0,0,0, + 2052,2033,1,0,0,0,2052,2041,1,0,0,0,2053,395,1,0,0,0,2054,2056,5, + 169,0,0,2055,2054,1,0,0,0,2055,2056,1,0,0,0,2056,2057,1,0,0,0,2057, + 2065,5,455,0,0,2058,2059,5,192,0,0,2059,2060,3,396,198,0,2060,2061, + 5,192,0,0,2061,2065,1,0,0,0,2062,2065,5,464,0,0,2063,2065,3,402, + 201,0,2064,2055,1,0,0,0,2064,2058,1,0,0,0,2064,2062,1,0,0,0,2064, + 2063,1,0,0,0,2065,397,1,0,0,0,2066,2068,5,456,0,0,2067,2066,1,0, + 0,0,2067,2068,1,0,0,0,2068,2069,1,0,0,0,2069,2070,3,396,198,0,2070, + 399,1,0,0,0,2071,2076,3,396,198,0,2072,2073,5,181,0,0,2073,2075, + 3,396,198,0,2074,2072,1,0,0,0,2075,2078,1,0,0,0,2076,2074,1,0,0, + 0,2076,2077,1,0,0,0,2077,2080,1,0,0,0,2078,2076,1,0,0,0,2079,2081, + 5,181,0,0,2080,2079,1,0,0,0,2080,2081,1,0,0,0,2081,2095,1,0,0,0, + 2082,2083,5,190,0,0,2083,2084,3,400,200,0,2084,2085,5,190,0,0,2085, + 2095,1,0,0,0,2086,2087,5,191,0,0,2087,2088,3,400,200,0,2088,2089, + 5,191,0,0,2089,2095,1,0,0,0,2090,2091,5,192,0,0,2091,2092,3,400, + 200,0,2092,2093,5,192,0,0,2093,2095,1,0,0,0,2094,2071,1,0,0,0,2094, + 2082,1,0,0,0,2094,2086,1,0,0,0,2094,2090,1,0,0,0,2095,401,1,0,0, + 0,2096,2099,3,404,202,0,2097,2099,5,114,0,0,2098,2096,1,0,0,0,2098, + 2097,1,0,0,0,2099,403,1,0,0,0,2100,2213,5,67,0,0,2101,2213,3,384, + 192,0,2102,2213,5,427,0,0,2103,2213,3,284,142,0,2104,2213,3,320, + 160,0,2105,2213,3,300,150,0,2106,2213,3,382,191,0,2107,2213,3,152, + 76,0,2108,2213,3,354,177,0,2109,2213,3,356,178,0,2110,2213,3,16, + 8,0,2111,2213,3,316,158,0,2112,2213,5,23,0,0,2113,2213,3,8,4,0,2114, + 2213,5,123,0,0,2115,2213,5,112,0,0,2116,2213,5,113,0,0,2117,2213, + 5,193,0,0,2118,2213,5,362,0,0,2119,2213,5,115,0,0,2120,2213,5,63, + 0,0,2121,2213,5,64,0,0,2122,2213,5,65,0,0,2123,2213,5,66,0,0,2124, + 2213,5,68,0,0,2125,2213,5,69,0,0,2126,2213,5,6,0,0,2127,2213,5,28, + 0,0,2128,2213,5,30,0,0,2129,2213,5,44,0,0,2130,2213,5,42,0,0,2131, + 2213,5,43,0,0,2132,2213,5,45,0,0,2133,2213,5,48,0,0,2134,2213,5, + 71,0,0,2135,2213,5,23,0,0,2136,2213,5,26,0,0,2137,2213,5,70,0,0, + 2138,2213,5,357,0,0,2139,2213,5,308,0,0,2140,2213,5,305,0,0,2141, + 2213,5,138,0,0,2142,2213,5,177,0,0,2143,2213,5,178,0,0,2144,2213, + 5,76,0,0,2145,2213,5,78,0,0,2146,2213,5,79,0,0,2147,2213,5,166,0, + 0,2148,2213,5,80,0,0,2149,2213,5,83,0,0,2150,2213,5,84,0,0,2151, + 2213,5,85,0,0,2152,2213,5,86,0,0,2153,2213,5,87,0,0,2154,2213,5, + 88,0,0,2155,2213,5,89,0,0,2156,2213,5,90,0,0,2157,2213,5,91,0,0, + 2158,2213,5,92,0,0,2159,2213,5,93,0,0,2160,2213,5,94,0,0,2161,2213, + 5,95,0,0,2162,2213,5,96,0,0,2163,2213,5,97,0,0,2164,2213,5,98,0, + 0,2165,2213,5,99,0,0,2166,2213,5,100,0,0,2167,2213,5,101,0,0,2168, + 2213,5,102,0,0,2169,2213,5,103,0,0,2170,2213,5,105,0,0,2171,2213, + 5,106,0,0,2172,2213,5,111,0,0,2173,2213,5,109,0,0,2174,2213,5,110, + 0,0,2175,2213,3,232,116,0,2176,2213,3,224,112,0,2177,2213,5,199, + 0,0,2178,2213,5,200,0,0,2179,2213,5,201,0,0,2180,2213,5,202,0,0, + 2181,2213,5,204,0,0,2182,2213,5,205,0,0,2183,2213,5,207,0,0,2184, + 2213,5,208,0,0,2185,2213,5,209,0,0,2186,2213,5,210,0,0,2187,2213, + 5,212,0,0,2188,2213,5,213,0,0,2189,2213,5,214,0,0,2190,2213,5,222, + 0,0,2191,2213,5,223,0,0,2192,2213,5,224,0,0,2193,2213,5,225,0,0, + 2194,2213,5,226,0,0,2195,2213,5,227,0,0,2196,2213,5,228,0,0,2197, + 2213,5,229,0,0,2198,2213,5,230,0,0,2199,2213,5,231,0,0,2200,2213, + 5,232,0,0,2201,2213,5,54,0,0,2202,2213,5,53,0,0,2203,2213,5,58,0, + 0,2204,2213,5,352,0,0,2205,2213,5,351,0,0,2206,2213,5,55,0,0,2207, + 2213,5,56,0,0,2208,2213,5,57,0,0,2209,2213,5,59,0,0,2210,2213,5, + 60,0,0,2211,2213,5,454,0,0,2212,2100,1,0,0,0,2212,2101,1,0,0,0,2212, + 2102,1,0,0,0,2212,2103,1,0,0,0,2212,2104,1,0,0,0,2212,2105,1,0,0, + 0,2212,2106,1,0,0,0,2212,2107,1,0,0,0,2212,2108,1,0,0,0,2212,2109, + 1,0,0,0,2212,2110,1,0,0,0,2212,2111,1,0,0,0,2212,2112,1,0,0,0,2212, + 2113,1,0,0,0,2212,2114,1,0,0,0,2212,2115,1,0,0,0,2212,2116,1,0,0, + 0,2212,2117,1,0,0,0,2212,2118,1,0,0,0,2212,2119,1,0,0,0,2212,2120, + 1,0,0,0,2212,2121,1,0,0,0,2212,2122,1,0,0,0,2212,2123,1,0,0,0,2212, + 2124,1,0,0,0,2212,2125,1,0,0,0,2212,2126,1,0,0,0,2212,2127,1,0,0, + 0,2212,2128,1,0,0,0,2212,2129,1,0,0,0,2212,2130,1,0,0,0,2212,2131, + 1,0,0,0,2212,2132,1,0,0,0,2212,2133,1,0,0,0,2212,2134,1,0,0,0,2212, + 2135,1,0,0,0,2212,2136,1,0,0,0,2212,2137,1,0,0,0,2212,2138,1,0,0, + 0,2212,2139,1,0,0,0,2212,2140,1,0,0,0,2212,2141,1,0,0,0,2212,2142, + 1,0,0,0,2212,2143,1,0,0,0,2212,2144,1,0,0,0,2212,2145,1,0,0,0,2212, + 2146,1,0,0,0,2212,2147,1,0,0,0,2212,2148,1,0,0,0,2212,2149,1,0,0, + 0,2212,2150,1,0,0,0,2212,2151,1,0,0,0,2212,2152,1,0,0,0,2212,2153, + 1,0,0,0,2212,2154,1,0,0,0,2212,2155,1,0,0,0,2212,2156,1,0,0,0,2212, + 2157,1,0,0,0,2212,2158,1,0,0,0,2212,2159,1,0,0,0,2212,2160,1,0,0, + 0,2212,2161,1,0,0,0,2212,2162,1,0,0,0,2212,2163,1,0,0,0,2212,2164, + 1,0,0,0,2212,2165,1,0,0,0,2212,2166,1,0,0,0,2212,2167,1,0,0,0,2212, + 2168,1,0,0,0,2212,2169,1,0,0,0,2212,2170,1,0,0,0,2212,2171,1,0,0, + 0,2212,2172,1,0,0,0,2212,2173,1,0,0,0,2212,2174,1,0,0,0,2212,2175, + 1,0,0,0,2212,2176,1,0,0,0,2212,2177,1,0,0,0,2212,2178,1,0,0,0,2212, + 2179,1,0,0,0,2212,2180,1,0,0,0,2212,2181,1,0,0,0,2212,2182,1,0,0, + 0,2212,2183,1,0,0,0,2212,2184,1,0,0,0,2212,2185,1,0,0,0,2212,2186, + 1,0,0,0,2212,2187,1,0,0,0,2212,2188,1,0,0,0,2212,2189,1,0,0,0,2212, + 2190,1,0,0,0,2212,2191,1,0,0,0,2212,2192,1,0,0,0,2212,2193,1,0,0, + 0,2212,2194,1,0,0,0,2212,2195,1,0,0,0,2212,2196,1,0,0,0,2212,2197, + 1,0,0,0,2212,2198,1,0,0,0,2212,2199,1,0,0,0,2212,2200,1,0,0,0,2212, + 2201,1,0,0,0,2212,2202,1,0,0,0,2212,2203,1,0,0,0,2212,2204,1,0,0, + 0,2212,2205,1,0,0,0,2212,2206,1,0,0,0,2212,2207,1,0,0,0,2212,2208, + 1,0,0,0,2212,2209,1,0,0,0,2212,2210,1,0,0,0,2212,2211,1,0,0,0,2213, + 405,1,0,0,0,206,407,413,420,425,436,442,476,481,486,490,495,506, + 514,516,522,529,546,555,573,579,584,590,595,605,609,612,618,620, + 649,653,657,663,668,672,676,684,690,696,699,708,710,716,724,729, + 733,740,745,757,768,773,777,784,790,795,800,804,808,813,818,822, + 836,847,850,857,862,866,886,893,905,912,917,922,927,932,937,942, + 954,965,972,980,986,992,998,1006,1016,1022,1033,1041,1047,1053,1061, + 1069,1075,1084,1096,1102,1141,1147,1172,1179,1182,1189,1194,1200, + 1209,1213,1222,1233,1239,1243,1247,1253,1258,1263,1269,1272,1276, + 1280,1283,1287,1290,1297,1300,1305,1312,1317,1330,1341,1364,1369, + 1377,1386,1396,1405,1412,1422,1441,1450,1461,1469,1475,1486,1488, + 1494,1502,1511,1515,1517,1534,1539,1556,1566,1573,1575,1590,1611, + 1616,1622,1633,1646,1652,1659,1666,1675,1680,1684,1709,1717,1721, + 1747,1760,1767,1770,1777,1780,1787,1793,1805,1811,1827,1833,1837, + 1843,1877,1913,1950,1959,1964,1969,1974,1983,2004,2014,2022,2030, + 2038,2047,2052,2055,2064,2067,2076,2080,2094,2098,2212 + ]; + + private static __ATN: antlr.ATN; + public static get _ATN(): antlr.ATN { + if (!OpenSearchPPLParser.__ATN) { + OpenSearchPPLParser.__ATN = new antlr.ATNDeserializer().deserialize(OpenSearchPPLParser._serializedATN); + } + + return OpenSearchPPLParser.__ATN; + } + + + private static readonly vocabulary = new antlr.Vocabulary(OpenSearchPPLParser.literalNames, OpenSearchPPLParser.symbolicNames, []); + + public override get vocabulary(): antlr.Vocabulary { + return OpenSearchPPLParser.vocabulary; + } + + private static readonly decisionsToDFA = OpenSearchPPLParser._ATN.decisionToState.map( (ds: antlr.DecisionState, index: number) => new antlr.DFA(ds, index) ); +} + +export class RootContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EOF(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EOF, 0)!; + } + public pplStatement(): PplStatementContext | null { + return this.getRuleContext(0, PplStatementContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_root; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitRoot) { + return visitor.visitRoot(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PplStatementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public explainStatement(): ExplainStatementContext | null { + return this.getRuleContext(0, ExplainStatementContext); + } + public queryStatement(): QueryStatementContext | null { + return this.getRuleContext(0, QueryStatementContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_pplStatement; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitPplStatement) { + return visitor.visitPplStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QueryStatementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public pplCommands(): PplCommandsContext { + return this.getRuleContext(0, PplCommandsContext)!; + } + public PIPE(): antlr.TerminalNode[]; + public PIPE(i: number): antlr.TerminalNode | null; + public PIPE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.PIPE); + } else { + return this.getToken(OpenSearchPPLParser.PIPE, i); + } + } + public commands(): CommandsContext[]; + public commands(i: number): CommandsContext | null; + public commands(i?: number): CommandsContext[] | CommandsContext | null { + if (i === undefined) { + return this.getRuleContexts(CommandsContext); + } + + return this.getRuleContext(i, CommandsContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_queryStatement; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitQueryStatement) { + return visitor.visitQueryStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExplainStatementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EXPLAIN(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EXPLAIN, 0)!; + } + public queryStatement(): QueryStatementContext { + return this.getRuleContext(0, QueryStatementContext)!; + } + public explainMode(): ExplainModeContext | null { + return this.getRuleContext(0, ExplainModeContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_explainStatement; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitExplainStatement) { + return visitor.visitExplainStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExplainModeContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SIMPLE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SIMPLE, 0); + } + public STANDARD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.STANDARD, 0); + } + public COST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.COST, 0); + } + public EXTENDED(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EXTENDED, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_explainMode; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitExplainMode) { + return visitor.visitExplainMode(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SubSearchContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public searchCommand(): SearchCommandContext { + return this.getRuleContext(0, SearchCommandContext)!; + } + public PIPE(): antlr.TerminalNode[]; + public PIPE(i: number): antlr.TerminalNode | null; + public PIPE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.PIPE); + } else { + return this.getToken(OpenSearchPPLParser.PIPE, i); + } + } + public commands(): CommandsContext[]; + public commands(i: number): CommandsContext | null; + public commands(i?: number): CommandsContext[] | CommandsContext | null { + if (i === undefined) { + return this.getRuleContexts(CommandsContext); + } + + return this.getRuleContext(i, CommandsContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_subSearch; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSubSearch) { + return visitor.visitSubSearch(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PplCommandsContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public describeCommand(): DescribeCommandContext | null { + return this.getRuleContext(0, DescribeCommandContext); + } + public showDataSourcesCommand(): ShowDataSourcesCommandContext | null { + return this.getRuleContext(0, ShowDataSourcesCommandContext); + } + public searchCommand(): SearchCommandContext | null { + return this.getRuleContext(0, SearchCommandContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_pplCommands; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitPplCommands) { + return visitor.visitPplCommands(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class CommandsContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public whereCommand(): WhereCommandContext | null { + return this.getRuleContext(0, WhereCommandContext); + } + public fieldsCommand(): FieldsCommandContext | null { + return this.getRuleContext(0, FieldsCommandContext); + } + public tableCommand(): TableCommandContext | null { + return this.getRuleContext(0, TableCommandContext); + } + public joinCommand(): JoinCommandContext | null { + return this.getRuleContext(0, JoinCommandContext); + } + public renameCommand(): RenameCommandContext | null { + return this.getRuleContext(0, RenameCommandContext); + } + public statsCommand(): StatsCommandContext | null { + return this.getRuleContext(0, StatsCommandContext); + } + public eventstatsCommand(): EventstatsCommandContext | null { + return this.getRuleContext(0, EventstatsCommandContext); + } + public dedupCommand(): DedupCommandContext | null { + return this.getRuleContext(0, DedupCommandContext); + } + public sortCommand(): SortCommandContext | null { + return this.getRuleContext(0, SortCommandContext); + } + public evalCommand(): EvalCommandContext | null { + return this.getRuleContext(0, EvalCommandContext); + } + public headCommand(): HeadCommandContext | null { + return this.getRuleContext(0, HeadCommandContext); + } + public binCommand(): BinCommandContext | null { + return this.getRuleContext(0, BinCommandContext); + } + public topCommand(): TopCommandContext | null { + return this.getRuleContext(0, TopCommandContext); + } + public rareCommand(): RareCommandContext | null { + return this.getRuleContext(0, RareCommandContext); + } + public grokCommand(): GrokCommandContext | null { + return this.getRuleContext(0, GrokCommandContext); + } + public parseCommand(): ParseCommandContext | null { + return this.getRuleContext(0, ParseCommandContext); + } + public spathCommand(): SpathCommandContext | null { + return this.getRuleContext(0, SpathCommandContext); + } + public patternsCommand(): PatternsCommandContext | null { + return this.getRuleContext(0, PatternsCommandContext); + } + public lookupCommand(): LookupCommandContext | null { + return this.getRuleContext(0, LookupCommandContext); + } + public kmeansCommand(): KmeansCommandContext | null { + return this.getRuleContext(0, KmeansCommandContext); + } + public adCommand(): AdCommandContext | null { + return this.getRuleContext(0, AdCommandContext); + } + public mlCommand(): MlCommandContext | null { + return this.getRuleContext(0, MlCommandContext); + } + public fillnullCommand(): FillnullCommandContext | null { + return this.getRuleContext(0, FillnullCommandContext); + } + public trendlineCommand(): TrendlineCommandContext | null { + return this.getRuleContext(0, TrendlineCommandContext); + } + public appendcolCommand(): AppendcolCommandContext | null { + return this.getRuleContext(0, AppendcolCommandContext); + } + public appendCommand(): AppendCommandContext | null { + return this.getRuleContext(0, AppendCommandContext); + } + public expandCommand(): ExpandCommandContext | null { + return this.getRuleContext(0, ExpandCommandContext); + } + public flattenCommand(): FlattenCommandContext | null { + return this.getRuleContext(0, FlattenCommandContext); + } + public reverseCommand(): ReverseCommandContext | null { + return this.getRuleContext(0, ReverseCommandContext); + } + public regexCommand(): RegexCommandContext | null { + return this.getRuleContext(0, RegexCommandContext); + } + public timechartCommand(): TimechartCommandContext | null { + return this.getRuleContext(0, TimechartCommandContext); + } + public rexCommand(): RexCommandContext | null { + return this.getRuleContext(0, RexCommandContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_commands; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitCommands) { + return visitor.visitCommands(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class CommandNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SEARCH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SEARCH, 0); + } + public DESCRIBE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DESCRIBE, 0); + } + public SHOW(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SHOW, 0); + } + public WHERE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.WHERE, 0); + } + public FIELDS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FIELDS, 0); + } + public TABLE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.TABLE, 0); + } + public JOIN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JOIN, 0); + } + public RENAME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RENAME, 0); + } + public STATS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.STATS, 0); + } + public EVENTSTATS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EVENTSTATS, 0); + } + public DEDUP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DEDUP, 0); + } + public SORT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SORT, 0); + } + public EVAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EVAL, 0); + } + public HEAD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.HEAD, 0); + } + public BIN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.BIN, 0); + } + public TOP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.TOP, 0); + } + public RARE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RARE, 0); + } + public GROK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.GROK, 0); + } + public PARSE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PARSE, 0); + } + public PATTERNS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PATTERNS, 0); + } + public LOOKUP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LOOKUP, 0); + } + public KMEANS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.KMEANS, 0); + } + public AD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.AD, 0); + } + public ML(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ML, 0); + } + public FILLNULL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FILLNULL, 0); + } + public EXPAND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EXPAND, 0); + } + public FLATTEN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FLATTEN, 0); + } + public TRENDLINE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.TRENDLINE, 0); + } + public TIMECHART(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.TIMECHART, 0); + } + public EXPLAIN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EXPLAIN, 0); + } + public REVERSE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.REVERSE, 0); + } + public REGEX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.REGEX, 0); + } + public APPEND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.APPEND, 0); + } + public REX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.REX, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_commandName; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitCommandName) { + return visitor.visitCommandName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SearchCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_searchCommand; + } + public override copyFrom(ctx: SearchCommandContext): void { + super.copyFrom(ctx); + } +} +export class SearchFromContext extends SearchCommandContext { + public constructor(ctx: SearchCommandContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SEARCH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SEARCH, 0); + } + public searchExpression(): SearchExpressionContext[]; + public searchExpression(i: number): SearchExpressionContext | null; + public searchExpression(i?: number): SearchExpressionContext[] | SearchExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(SearchExpressionContext); + } + + return this.getRuleContext(i, SearchExpressionContext); + } + public fromClause(): FromClauseContext | null { + return this.getRuleContext(0, FromClauseContext); + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSearchFrom) { + return visitor.visitSearchFrom(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SearchExpressionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_searchExpression; + } + public override copyFrom(ctx: SearchExpressionContext): void { + super.copyFrom(ctx); + } +} +export class OrExpressionContext extends SearchExpressionContext { + public constructor(ctx: SearchExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public searchExpression(): SearchExpressionContext[]; + public searchExpression(i: number): SearchExpressionContext | null; + public searchExpression(i?: number): SearchExpressionContext[] | SearchExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(SearchExpressionContext); + } + + return this.getRuleContext(i, SearchExpressionContext); + } + public OR(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.OR, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitOrExpression) { + return visitor.visitOrExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AndExpressionContext extends SearchExpressionContext { + public constructor(ctx: SearchExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public searchExpression(): SearchExpressionContext[]; + public searchExpression(i: number): SearchExpressionContext | null; + public searchExpression(i?: number): SearchExpressionContext[] | SearchExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(SearchExpressionContext); + } + + return this.getRuleContext(i, SearchExpressionContext); + } + public AND(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.AND, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitAndExpression) { + return visitor.visitAndExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NotExpressionContext extends SearchExpressionContext { + public constructor(ctx: SearchExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public NOT(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.NOT, 0)!; + } + public searchExpression(): SearchExpressionContext { + return this.getRuleContext(0, SearchExpressionContext)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitNotExpression) { + return visitor.visitNotExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TermExpressionContext extends SearchExpressionContext { + public constructor(ctx: SearchExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public searchTerm(): SearchTermContext { + return this.getRuleContext(0, SearchTermContext)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitTermExpression) { + return visitor.visitTermExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GroupedExpressionContext extends SearchExpressionContext { + public constructor(ctx: SearchExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; + } + public searchExpression(): SearchExpressionContext { + return this.getRuleContext(0, SearchExpressionContext)!; + } + public RT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitGroupedExpression) { + return visitor.visitGroupedExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SearchTermContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_searchTerm; + } + public override copyFrom(ctx: SearchTermContext): void { + super.copyFrom(ctx); + } +} +export class SearchComparisonTermContext extends SearchTermContext { + public constructor(ctx: SearchTermContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public searchFieldComparison(): SearchFieldComparisonContext { + return this.getRuleContext(0, SearchFieldComparisonContext)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSearchComparisonTerm) { + return visitor.visitSearchComparisonTerm(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SearchInListTermContext extends SearchTermContext { + public constructor(ctx: SearchTermContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public searchFieldInList(): SearchFieldInListContext { + return this.getRuleContext(0, SearchFieldInListContext)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSearchInListTerm) { + return visitor.visitSearchInListTerm(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SearchLiteralTermContext extends SearchTermContext { + public constructor(ctx: SearchTermContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public searchLiteral(): SearchLiteralContext { + return this.getRuleContext(0, SearchLiteralContext)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSearchLiteralTerm) { + return visitor.visitSearchLiteralTerm(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SearchLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public numericLiteral(): NumericLiteralContext | null { + return this.getRuleContext(0, NumericLiteralContext); + } + public booleanLiteral(): BooleanLiteralContext | null { + return this.getRuleContext(0, BooleanLiteralContext); + } + public ID(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ID, 0); + } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } + public searchableKeyWord(): SearchableKeyWordContext | null { + return this.getRuleContext(0, SearchableKeyWordContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_searchLiteral; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSearchLiteral) { + return visitor.visitSearchLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SearchFieldComparisonContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_searchFieldComparison; + } + public override copyFrom(ctx: SearchFieldComparisonContext): void { + super.copyFrom(ctx); + } +} +export class SearchFieldCompareContext extends SearchFieldComparisonContext { + public constructor(ctx: SearchFieldComparisonContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext)!; + } + public searchComparisonOperator(): SearchComparisonOperatorContext { + return this.getRuleContext(0, SearchComparisonOperatorContext)!; + } + public searchLiteral(): SearchLiteralContext { + return this.getRuleContext(0, SearchLiteralContext)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSearchFieldCompare) { + return visitor.visitSearchFieldCompare(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SearchFieldInListContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_searchFieldInList; + } + public override copyFrom(ctx: SearchFieldInListContext): void { + super.copyFrom(ctx); + } +} +export class SearchFieldInValuesContext extends SearchFieldInListContext { + public constructor(ctx: SearchFieldInListContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext)!; + } + public IN(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.IN, 0)!; + } + public LT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; + } + public searchLiteralList(): SearchLiteralListContext { + return this.getRuleContext(0, SearchLiteralListContext)!; + } + public RT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSearchFieldInValues) { + return visitor.visitSearchFieldInValues(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SearchLiteralListContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_searchLiteralList; + } + public override copyFrom(ctx: SearchLiteralListContext): void { + super.copyFrom(ctx); + } +} +export class SearchLiteralsContext extends SearchLiteralListContext { + public constructor(ctx: SearchLiteralListContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public searchLiteral(): SearchLiteralContext[]; + public searchLiteral(i: number): SearchLiteralContext | null; + public searchLiteral(i?: number): SearchLiteralContext[] | SearchLiteralContext | null { + if (i === undefined) { + return this.getRuleContexts(SearchLiteralContext); + } + + return this.getRuleContext(i, SearchLiteralContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSearchLiterals) { + return visitor.visitSearchLiterals(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SearchComparisonOperatorContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_searchComparisonOperator; + } + public override copyFrom(ctx: SearchComparisonOperatorContext): void { + super.copyFrom(ctx); + } +} +export class GreaterOrEqualContext extends SearchComparisonOperatorContext { + public constructor(ctx: SearchComparisonOperatorContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public NOT_LESS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.NOT_LESS, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitGreaterOrEqual) { + return visitor.visitGreaterOrEqual(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class EqualsContext extends SearchComparisonOperatorContext { + public constructor(ctx: SearchComparisonOperatorContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitEquals) { + return visitor.visitEquals(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LessThanContext extends SearchComparisonOperatorContext { + public constructor(ctx: SearchComparisonOperatorContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LESS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LESS, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitLessThan) { + return visitor.visitLessThan(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NotEqualsContext extends SearchComparisonOperatorContext { + public constructor(ctx: SearchComparisonOperatorContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public NOT_EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.NOT_EQUAL, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitNotEquals) { + return visitor.visitNotEquals(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LessOrEqualContext extends SearchComparisonOperatorContext { + public constructor(ctx: SearchComparisonOperatorContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public NOT_GREATER(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.NOT_GREATER, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitLessOrEqual) { + return visitor.visitLessOrEqual(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GreaterThanContext extends SearchComparisonOperatorContext { + public constructor(ctx: SearchComparisonOperatorContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public GREATER(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.GREATER, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitGreaterThan) { + return visitor.visitGreaterThan(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DescribeCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DESCRIBE(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.DESCRIBE, 0)!; + } + public tableSourceClause(): TableSourceClauseContext { + return this.getRuleContext(0, TableSourceClauseContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_describeCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitDescribeCommand) { + return visitor.visitDescribeCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ShowDataSourcesCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SHOW(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.SHOW, 0)!; + } + public DATASOURCES(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.DATASOURCES, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_showDataSourcesCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitShowDataSourcesCommand) { + return visitor.visitShowDataSourcesCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WhereCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public WHERE(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.WHERE, 0)!; + } + public logicalExpression(): LogicalExpressionContext { + return this.getRuleContext(0, LogicalExpressionContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_whereCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitWhereCommand) { + return visitor.visitWhereCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FieldsCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public FIELDS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.FIELDS, 0)!; + } + public fieldsCommandBody(): FieldsCommandBodyContext { + return this.getRuleContext(0, FieldsCommandBodyContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_fieldsCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitFieldsCommand) { + return visitor.visitFieldsCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TableCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public TABLE(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.TABLE, 0)!; + } + public fieldsCommandBody(): FieldsCommandBodyContext { + return this.getRuleContext(0, FieldsCommandBodyContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_tableCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitTableCommand) { + return visitor.visitTableCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FieldsCommandBodyContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public wcFieldList(): WcFieldListContext { + return this.getRuleContext(0, WcFieldListContext)!; + } + public PLUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PLUS, 0); + } + public MINUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MINUS, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_fieldsCommandBody; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitFieldsCommandBody) { + return visitor.visitFieldsCommandBody(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WcFieldListContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public selectFieldExpression(): SelectFieldExpressionContext[]; + public selectFieldExpression(i: number): SelectFieldExpressionContext | null; + public selectFieldExpression(i?: number): SelectFieldExpressionContext[] | SelectFieldExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(SelectFieldExpressionContext); + } + + return this.getRuleContext(i, SelectFieldExpressionContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_wcFieldList; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitWcFieldList) { + return visitor.visitWcFieldList(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RenameCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public RENAME(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RENAME, 0)!; + } + public renameClasue(): RenameClasueContext[]; + public renameClasue(i: number): RenameClasueContext | null; + public renameClasue(i?: number): RenameClasueContext[] | RenameClasueContext | null { + if (i === undefined) { + return this.getRuleContexts(RenameClasueContext); + } + + return this.getRuleContext(i, RenameClasueContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_renameCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitRenameCommand) { + return visitor.visitRenameCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StatsCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public STATS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.STATS, 0)!; + } + public statsArgs(): StatsArgsContext { + return this.getRuleContext(0, StatsArgsContext)!; + } + public statsAggTerm(): StatsAggTermContext[]; + public statsAggTerm(i: number): StatsAggTermContext | null; + public statsAggTerm(i?: number): StatsAggTermContext[] | StatsAggTermContext | null { + if (i === undefined) { + return this.getRuleContexts(StatsAggTermContext); + } + + return this.getRuleContext(i, StatsAggTermContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public statsByClause(): StatsByClauseContext | null { + return this.getRuleContext(0, StatsByClauseContext); + } + public dedupSplitArg(): DedupSplitArgContext | null { + return this.getRuleContext(0, DedupSplitArgContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_statsCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitStatsCommand) { + return visitor.visitStatsCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StatsArgsContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public partitionsArg(): PartitionsArgContext[]; + public partitionsArg(i: number): PartitionsArgContext | null; + public partitionsArg(i?: number): PartitionsArgContext[] | PartitionsArgContext | null { + if (i === undefined) { + return this.getRuleContexts(PartitionsArgContext); + } + + return this.getRuleContext(i, PartitionsArgContext); + } + public allnumArg(): AllnumArgContext[]; + public allnumArg(i: number): AllnumArgContext | null; + public allnumArg(i?: number): AllnumArgContext[] | AllnumArgContext | null { + if (i === undefined) { + return this.getRuleContexts(AllnumArgContext); + } + + return this.getRuleContext(i, AllnumArgContext); + } + public delimArg(): DelimArgContext[]; + public delimArg(i: number): DelimArgContext | null; + public delimArg(i?: number): DelimArgContext[] | DelimArgContext | null { + if (i === undefined) { + return this.getRuleContexts(DelimArgContext); + } + + return this.getRuleContext(i, DelimArgContext); + } + public bucketNullableArg(): BucketNullableArgContext[]; + public bucketNullableArg(i: number): BucketNullableArgContext | null; + public bucketNullableArg(i?: number): BucketNullableArgContext[] | BucketNullableArgContext | null { + if (i === undefined) { + return this.getRuleContexts(BucketNullableArgContext); + } + + return this.getRuleContext(i, BucketNullableArgContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_statsArgs; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitStatsArgs) { + return visitor.visitStatsArgs(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PartitionsArgContext extends antlr.ParserRuleContext { + public _partitions?: IntegerLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public PARTITIONS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.PARTITIONS, 0)!; + } + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + } + public integerLiteral(): IntegerLiteralContext { + return this.getRuleContext(0, IntegerLiteralContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_partitionsArg; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitPartitionsArg) { + return visitor.visitPartitionsArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AllnumArgContext extends antlr.ParserRuleContext { + public _allnum?: BooleanLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ALLNUM(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.ALLNUM, 0)!; + } + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + } + public booleanLiteral(): BooleanLiteralContext { + return this.getRuleContext(0, BooleanLiteralContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_allnumArg; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitAllnumArg) { + return visitor.visitAllnumArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DelimArgContext extends antlr.ParserRuleContext { + public _delim?: StringLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DELIM(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.DELIM, 0)!; + } + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + } + public stringLiteral(): StringLiteralContext { + return this.getRuleContext(0, StringLiteralContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_delimArg; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitDelimArg) { + return visitor.visitDelimArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BucketNullableArgContext extends antlr.ParserRuleContext { + public _bucket_nullable?: BooleanLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public BUCKET_NULLABLE(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.BUCKET_NULLABLE, 0)!; + } + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + } + public booleanLiteral(): BooleanLiteralContext { + return this.getRuleContext(0, BooleanLiteralContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_bucketNullableArg; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitBucketNullableArg) { + return visitor.visitBucketNullableArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DedupSplitArgContext extends antlr.ParserRuleContext { + public _dedupsplit?: BooleanLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DEDUP_SPLITVALUES(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.DEDUP_SPLITVALUES, 0)!; + } + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + } + public booleanLiteral(): BooleanLiteralContext { + return this.getRuleContext(0, BooleanLiteralContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_dedupSplitArg; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitDedupSplitArg) { + return visitor.visitDedupSplitArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class EventstatsCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EVENTSTATS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EVENTSTATS, 0)!; + } + public eventstatsAggTerm(): EventstatsAggTermContext[]; + public eventstatsAggTerm(i: number): EventstatsAggTermContext | null; + public eventstatsAggTerm(i?: number): EventstatsAggTermContext[] | EventstatsAggTermContext | null { + if (i === undefined) { + return this.getRuleContexts(EventstatsAggTermContext); + } + + return this.getRuleContext(i, EventstatsAggTermContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public statsByClause(): StatsByClauseContext | null { + return this.getRuleContext(0, StatsByClauseContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_eventstatsCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitEventstatsCommand) { + return visitor.visitEventstatsCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DedupCommandContext extends antlr.ParserRuleContext { + public _number_?: IntegerLiteralContext; + public _keepempty?: BooleanLiteralContext; + public _consecutive?: BooleanLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DEDUP(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.DEDUP, 0)!; + } + public fieldList(): FieldListContext { + return this.getRuleContext(0, FieldListContext)!; + } + public KEEPEMPTY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.KEEPEMPTY, 0); + } + public EQUAL(): antlr.TerminalNode[]; + public EQUAL(i: number): antlr.TerminalNode | null; + public EQUAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.EQUAL); + } else { + return this.getToken(OpenSearchPPLParser.EQUAL, i); + } + } + public CONSECUTIVE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.CONSECUTIVE, 0); + } + public integerLiteral(): IntegerLiteralContext | null { + return this.getRuleContext(0, IntegerLiteralContext); + } + public booleanLiteral(): BooleanLiteralContext[]; + public booleanLiteral(i: number): BooleanLiteralContext | null; + public booleanLiteral(i?: number): BooleanLiteralContext[] | BooleanLiteralContext | null { + if (i === undefined) { + return this.getRuleContexts(BooleanLiteralContext); + } + + return this.getRuleContext(i, BooleanLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_dedupCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitDedupCommand) { + return visitor.visitDedupCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SortCommandContext extends antlr.ParserRuleContext { + public _count?: IntegerLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SORT(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.SORT, 0)!; + } + public sortbyClause(): SortbyClauseContext { + return this.getRuleContext(0, SortbyClauseContext)!; + } + public integerLiteral(): IntegerLiteralContext | null { + return this.getRuleContext(0, IntegerLiteralContext); + } + public ASC(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ASC, 0); + } + public A(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.A, 0); + } + public DESC(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DESC, 0); + } + public D(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.D, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_sortCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSortCommand) { + return visitor.visitSortCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ReverseCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public REVERSE(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.REVERSE, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_reverseCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitReverseCommand) { + return visitor.visitReverseCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimechartCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public TIMECHART(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.TIMECHART, 0)!; + } + public statsFunction(): StatsFunctionContext { + return this.getRuleContext(0, StatsFunctionContext)!; + } + public timechartParameter(): TimechartParameterContext[]; + public timechartParameter(i: number): TimechartParameterContext | null; + public timechartParameter(i?: number): TimechartParameterContext[] | TimechartParameterContext | null { + if (i === undefined) { + return this.getRuleContexts(TimechartParameterContext); + } + + return this.getRuleContext(i, TimechartParameterContext); + } + public BY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.BY, 0); + } + public fieldExpression(): FieldExpressionContext | null { + return this.getRuleContext(0, FieldExpressionContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_timechartCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitTimechartCommand) { + return visitor.visitTimechartCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimechartParameterContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public spanClause(): SpanClauseContext | null { + return this.getRuleContext(0, SpanClauseContext); + } + public SPAN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SPAN, 0); + } + public EQUAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EQUAL, 0); + } + public spanLiteral(): SpanLiteralContext | null { + return this.getRuleContext(0, SpanLiteralContext); + } + public timechartArg(): TimechartArgContext | null { + return this.getRuleContext(0, TimechartArgContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_timechartParameter; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitTimechartParameter) { + return visitor.visitTimechartParameter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimechartArgContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LIMIT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LIMIT, 0); + } + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + } + public integerLiteral(): IntegerLiteralContext | null { + return this.getRuleContext(0, IntegerLiteralContext); + } + public USEOTHER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.USEOTHER, 0); + } + public booleanLiteral(): BooleanLiteralContext | null { + return this.getRuleContext(0, BooleanLiteralContext); + } + public ident(): IdentContext | null { + return this.getRuleContext(0, IdentContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_timechartArg; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitTimechartArg) { + return visitor.visitTimechartArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SpanLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public integerLiteral(): IntegerLiteralContext | null { + return this.getRuleContext(0, IntegerLiteralContext); + } + public timespanUnit(): TimespanUnitContext | null { + return this.getRuleContext(0, TimespanUnitContext); + } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_spanLiteral; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSpanLiteral) { + return visitor.visitSpanLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class EvalCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EVAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EVAL, 0)!; + } + public evalClause(): EvalClauseContext[]; + public evalClause(i: number): EvalClauseContext | null; + public evalClause(i?: number): EvalClauseContext[] | EvalClauseContext | null { + if (i === undefined) { + return this.getRuleContexts(EvalClauseContext); + } + + return this.getRuleContext(i, EvalClauseContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_evalCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitEvalCommand) { + return visitor.visitEvalCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class HeadCommandContext extends antlr.ParserRuleContext { + public _number_?: IntegerLiteralContext; + public _from_?: IntegerLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public HEAD(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.HEAD, 0)!; + } + public FROM(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FROM, 0); + } + public integerLiteral(): IntegerLiteralContext[]; + public integerLiteral(i: number): IntegerLiteralContext | null; + public integerLiteral(i?: number): IntegerLiteralContext[] | IntegerLiteralContext | null { + if (i === undefined) { + return this.getRuleContexts(IntegerLiteralContext); + } + + return this.getRuleContext(i, IntegerLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_headCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitHeadCommand) { + return visitor.visitHeadCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BinCommandContext extends antlr.ParserRuleContext { + public _alias?: QualifiedNameContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public BIN(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.BIN, 0)!; + } + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext)!; + } + public binOption(): BinOptionContext[]; + public binOption(i: number): BinOptionContext | null; + public binOption(i?: number): BinOptionContext[] | BinOptionContext | null { + if (i === undefined) { + return this.getRuleContexts(BinOptionContext); + } + + return this.getRuleContext(i, BinOptionContext); + } + public AS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.AS, 0); + } + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_binCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitBinCommand) { + return visitor.visitBinCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BinOptionContext extends antlr.ParserRuleContext { + public _span?: SpanValueContext; + public _bins?: IntegerLiteralContext; + public _minspan?: LiteralValueContext; + public _minspanUnit?: TimespanUnitContext; + public _aligntime?: AligntimeValueContext; + public _start?: NumericLiteralContext; + public _end?: NumericLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SPAN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SPAN, 0); + } + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + } + public spanValue(): SpanValueContext | null { + return this.getRuleContext(0, SpanValueContext); + } + public BINS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.BINS, 0); + } + public integerLiteral(): IntegerLiteralContext | null { + return this.getRuleContext(0, IntegerLiteralContext); + } + public MINSPAN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MINSPAN, 0); + } + public literalValue(): LiteralValueContext | null { + return this.getRuleContext(0, LiteralValueContext); + } + public timespanUnit(): TimespanUnitContext | null { + return this.getRuleContext(0, TimespanUnitContext); + } + public ALIGNTIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ALIGNTIME, 0); + } + public aligntimeValue(): AligntimeValueContext | null { + return this.getRuleContext(0, AligntimeValueContext); + } + public START(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.START, 0); + } + public numericLiteral(): NumericLiteralContext | null { + return this.getRuleContext(0, NumericLiteralContext); + } + public END(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.END, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_binOption; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitBinOption) { + return visitor.visitBinOption(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AligntimeValueContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EARLIEST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EARLIEST, 0); + } + public LATEST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LATEST, 0); + } + public literalValue(): LiteralValueContext | null { + return this.getRuleContext(0, LiteralValueContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_aligntimeValue; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitAligntimeValue) { + return visitor.visitAligntimeValue(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SpanValueContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_spanValue; + } + public override copyFrom(ctx: SpanValueContext): void { + super.copyFrom(ctx); + } +} +export class LogBasedSpanValueContext extends SpanValueContext { + public constructor(ctx: SpanValueContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public logSpanValue(): LogSpanValueContext { + return this.getRuleContext(0, LogSpanValueContext)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitLogBasedSpanValue) { + return visitor.visitLogBasedSpanValue(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExtendedTimeSpanValueContext extends SpanValueContext { + public constructor(ctx: SpanValueContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ident(): IdentContext { + return this.getRuleContext(0, IdentContext)!; + } + public timespanUnit(): TimespanUnitContext { + return this.getRuleContext(0, TimespanUnitContext)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitExtendedTimeSpanValue) { + return visitor.visitExtendedTimeSpanValue(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NumericSpanValueContext extends SpanValueContext { + public constructor(ctx: SpanValueContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public literalValue(): LiteralValueContext { + return this.getRuleContext(0, LiteralValueContext)!; + } + public timespanUnit(): TimespanUnitContext | null { + return this.getRuleContext(0, TimespanUnitContext); + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitNumericSpanValue) { + return visitor.visitNumericSpanValue(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IdentifierSpanValueContext extends SpanValueContext { + public constructor(ctx: SpanValueContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ident(): IdentContext { + return this.getRuleContext(0, IdentContext)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitIdentifierSpanValue) { + return visitor.visitIdentifierSpanValue(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LogSpanValueContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_logSpanValue; + } + public override copyFrom(ctx: LogSpanValueContext): void { + super.copyFrom(ctx); + } +} +export class LogWithBaseSpanContext extends LogSpanValueContext { + public constructor(ctx: LogSpanValueContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LOG_WITH_BASE(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LOG_WITH_BASE, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitLogWithBaseSpan) { + return visitor.visitLogWithBaseSpan(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TopCommandContext extends antlr.ParserRuleContext { + public _number_?: IntegerLiteralContext; + public _countfield?: StringLiteralContext; + public _showcount?: BooleanLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public TOP(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.TOP, 0)!; + } + public fieldList(): FieldListContext { + return this.getRuleContext(0, FieldListContext)!; + } + public COUNTFIELD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.COUNTFIELD, 0); + } + public EQUAL(): antlr.TerminalNode[]; + public EQUAL(i: number): antlr.TerminalNode | null; + public EQUAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.EQUAL); + } else { + return this.getToken(OpenSearchPPLParser.EQUAL, i); + } + } + public SHOWCOUNT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SHOWCOUNT, 0); + } + public byClause(): ByClauseContext | null { + return this.getRuleContext(0, ByClauseContext); + } + public integerLiteral(): IntegerLiteralContext | null { + return this.getRuleContext(0, IntegerLiteralContext); + } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } + public booleanLiteral(): BooleanLiteralContext | null { + return this.getRuleContext(0, BooleanLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_topCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitTopCommand) { + return visitor.visitTopCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RareCommandContext extends antlr.ParserRuleContext { + public _number_?: IntegerLiteralContext; + public _countfield?: StringLiteralContext; + public _showcount?: BooleanLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public RARE(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RARE, 0)!; + } + public fieldList(): FieldListContext { + return this.getRuleContext(0, FieldListContext)!; + } + public COUNTFIELD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.COUNTFIELD, 0); + } + public EQUAL(): antlr.TerminalNode[]; + public EQUAL(i: number): antlr.TerminalNode | null; + public EQUAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.EQUAL); + } else { + return this.getToken(OpenSearchPPLParser.EQUAL, i); + } + } + public SHOWCOUNT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SHOWCOUNT, 0); + } + public byClause(): ByClauseContext | null { + return this.getRuleContext(0, ByClauseContext); + } + public integerLiteral(): IntegerLiteralContext | null { + return this.getRuleContext(0, IntegerLiteralContext); + } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } + public booleanLiteral(): BooleanLiteralContext | null { + return this.getRuleContext(0, BooleanLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_rareCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitRareCommand) { + return visitor.visitRareCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GrokCommandContext extends antlr.ParserRuleContext { + public _source_field?: ExpressionContext; + public _pattern?: StringLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public GROK(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.GROK, 0)!; + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_grokCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitGrokCommand) { + return visitor.visitGrokCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ParseCommandContext extends antlr.ParserRuleContext { + public _source_field?: ExpressionContext; + public _pattern?: StringLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public PARSE(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.PARSE, 0)!; + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_parseCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitParseCommand) { + return visitor.visitParseCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SpathCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SPATH(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.SPATH, 0)!; + } + public spathParameter(): SpathParameterContext[]; + public spathParameter(i: number): SpathParameterContext | null; + public spathParameter(i?: number): SpathParameterContext[] | SpathParameterContext | null { + if (i === undefined) { + return this.getRuleContexts(SpathParameterContext); + } + + return this.getRuleContext(i, SpathParameterContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_spathCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSpathCommand) { + return visitor.visitSpathCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SpathParameterContext extends antlr.ParserRuleContext { + public _input?: ExpressionContext; + public _output?: ExpressionContext; + public _path?: IndexablePathContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public INPUT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.INPUT, 0); + } + public EQUAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EQUAL, 0); + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public OUTPUT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.OUTPUT, 0); + } + public indexablePath(): IndexablePathContext | null { + return this.getRuleContext(0, IndexablePathContext); + } + public PATH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PATH, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_spathParameter; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSpathParameter) { + return visitor.visitSpathParameter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IndexablePathContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public pathElement(): PathElementContext[]; + public pathElement(i: number): PathElementContext | null; + public pathElement(i?: number): PathElementContext[] | PathElementContext | null { + if (i === undefined) { + return this.getRuleContexts(PathElementContext); + } + + return this.getRuleContext(i, PathElementContext); + } + public DOT(): antlr.TerminalNode[]; + public DOT(i: number): antlr.TerminalNode | null; + public DOT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.DOT); + } else { + return this.getToken(OpenSearchPPLParser.DOT, i); + } + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_indexablePath; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitIndexablePath) { + return visitor.visitIndexablePath(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PathElementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ident(): IdentContext { + return this.getRuleContext(0, IdentContext)!; + } + public pathArrayAccess(): PathArrayAccessContext | null { + return this.getRuleContext(0, PathArrayAccessContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_pathElement; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitPathElement) { + return visitor.visitPathElement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PathArrayAccessContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LT_CURLY(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_CURLY, 0)!; + } + public RT_CURLY(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_CURLY, 0)!; + } + public INTEGER_LITERAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.INTEGER_LITERAL, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_pathArrayAccess; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitPathArrayAccess) { + return visitor.visitPathArrayAccess(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RegexCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public REGEX(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.REGEX, 0)!; + } + public regexExpr(): RegexExprContext { + return this.getRuleContext(0, RegexExprContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_regexCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitRegexCommand) { + return visitor.visitRegexCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RegexExprContext extends antlr.ParserRuleContext { + public _field?: QualifiedNameContext; + public _operator?: Token | null; + public _pattern?: StringLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public stringLiteral(): StringLiteralContext { + return this.getRuleContext(0, StringLiteralContext)!; + } + public EQUAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EQUAL, 0); + } + public NOT_EQUAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.NOT_EQUAL, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_regexExpr; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitRegexExpr) { + return visitor.visitRegexExpr(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RexCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public REX(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.REX, 0)!; + } + public rexExpr(): RexExprContext { + return this.getRuleContext(0, RexExprContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_rexCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitRexCommand) { + return visitor.visitRexCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RexExprContext extends antlr.ParserRuleContext { + public _field?: QualifiedNameContext; + public _pattern?: StringLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public FIELD(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.FIELD, 0)!; + } + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public stringLiteral(): StringLiteralContext { + return this.getRuleContext(0, StringLiteralContext)!; + } + public rexOption(): RexOptionContext[]; + public rexOption(i: number): RexOptionContext | null; + public rexOption(i?: number): RexOptionContext[] | RexOptionContext | null { + if (i === undefined) { + return this.getRuleContexts(RexOptionContext); + } + + return this.getRuleContext(i, RexOptionContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_rexExpr; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitRexExpr) { + return visitor.visitRexExpr(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RexOptionContext extends antlr.ParserRuleContext { + public _maxMatch?: IntegerLiteralContext; + public _offsetField?: QualifiedNameContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public MAX_MATCH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MAX_MATCH, 0); + } + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + } + public integerLiteral(): IntegerLiteralContext | null { + return this.getRuleContext(0, IntegerLiteralContext); + } + public MODE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MODE, 0); + } + public EXTRACT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EXTRACT, 0); + } + public SED(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SED, 0); + } + public OFFSET_FIELD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.OFFSET_FIELD, 0); + } + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_rexOption; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitRexOption) { + return visitor.visitRexOption(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternsMethodContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public PUNCT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PUNCT, 0); + } + public REGEX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.REGEX, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_patternsMethod; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitPatternsMethod) { + return visitor.visitPatternsMethod(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternsCommandContext extends antlr.ParserRuleContext { + public _source_field?: ExpressionContext; + public _method?: PatternMethodContext; + public _pattern_mode?: PatternModeContext; + public _max_sample_count?: IntegerLiteralContext; + public _buffer_limit?: IntegerLiteralContext; + public _new_field?: StringLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public PATTERNS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.PATTERNS, 0)!; + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public statsByClause(): StatsByClauseContext | null { + return this.getRuleContext(0, StatsByClauseContext); + } + public METHOD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.METHOD, 0); + } + public EQUAL(): antlr.TerminalNode[]; + public EQUAL(i: number): antlr.TerminalNode | null; + public EQUAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.EQUAL); + } else { + return this.getToken(OpenSearchPPLParser.EQUAL, i); + } + } + public MODE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MODE, 0); + } + public MAX_SAMPLE_COUNT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MAX_SAMPLE_COUNT, 0); + } + public BUFFER_LIMIT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.BUFFER_LIMIT, 0); + } + public NEW_FIELD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.NEW_FIELD, 0); + } + public patternsParameter(): PatternsParameterContext[]; + public patternsParameter(i: number): PatternsParameterContext | null; + public patternsParameter(i?: number): PatternsParameterContext[] | PatternsParameterContext | null { + if (i === undefined) { + return this.getRuleContexts(PatternsParameterContext); + } + + return this.getRuleContext(i, PatternsParameterContext); + } + public patternMethod(): PatternMethodContext | null { + return this.getRuleContext(0, PatternMethodContext); + } + public patternMode(): PatternModeContext | null { + return this.getRuleContext(0, PatternModeContext); + } + public integerLiteral(): IntegerLiteralContext[]; + public integerLiteral(i: number): IntegerLiteralContext | null; + public integerLiteral(i?: number): IntegerLiteralContext[] | IntegerLiteralContext | null { + if (i === undefined) { + return this.getRuleContexts(IntegerLiteralContext); + } + + return this.getRuleContext(i, IntegerLiteralContext); + } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_patternsCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitPatternsCommand) { + return visitor.visitPatternsCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternsParameterContext extends antlr.ParserRuleContext { + public _pattern?: StringLiteralContext; + public _variable_count_threshold?: IntegerLiteralContext; + public _frequency_threshold_percentage?: DecimalLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public PATTERN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PATTERN, 0); + } + public EQUAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EQUAL, 0); + } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } + public VARIABLE_COUNT_THRESHOLD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD, 0); + } + public integerLiteral(): IntegerLiteralContext | null { + return this.getRuleContext(0, IntegerLiteralContext); + } + public FREQUENCY_THRESHOLD_PERCENTAGE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE, 0); + } + public decimalLiteral(): DecimalLiteralContext | null { + return this.getRuleContext(0, DecimalLiteralContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_patternsParameter; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitPatternsParameter) { + return visitor.visitPatternsParameter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternMethodContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SIMPLE_PATTERN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SIMPLE_PATTERN, 0); + } + public BRAIN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.BRAIN, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_patternMethod; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitPatternMethod) { + return visitor.visitPatternMethod(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternModeContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LABEL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LABEL, 0); + } + public AGGREGATION(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.AGGREGATION, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_patternMode; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitPatternMode) { + return visitor.visitPatternMode(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LookupCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LOOKUP(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LOOKUP, 0)!; + } + public tableSource(): TableSourceContext { + return this.getRuleContext(0, TableSourceContext)!; + } + public lookupMappingList(): LookupMappingListContext { + return this.getRuleContext(0, LookupMappingListContext)!; + } + public outputCandidateList(): OutputCandidateListContext | null { + return this.getRuleContext(0, OutputCandidateListContext); + } + public APPEND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.APPEND, 0); + } + public REPLACE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.REPLACE, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_lookupCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitLookupCommand) { + return visitor.visitLookupCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LookupMappingListContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public lookupPair(): LookupPairContext[]; + public lookupPair(i: number): LookupPairContext | null; + public lookupPair(i?: number): LookupPairContext[] | LookupPairContext | null { + if (i === undefined) { + return this.getRuleContexts(LookupPairContext); + } + + return this.getRuleContext(i, LookupPairContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_lookupMappingList; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitLookupMappingList) { + return visitor.visitLookupMappingList(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class OutputCandidateListContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public lookupPair(): LookupPairContext[]; + public lookupPair(i: number): LookupPairContext | null; + public lookupPair(i?: number): LookupPairContext[] | LookupPairContext | null { + if (i === undefined) { + return this.getRuleContexts(LookupPairContext); + } + + return this.getRuleContext(i, LookupPairContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_outputCandidateList; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitOutputCandidateList) { + return visitor.visitOutputCandidateList(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LookupPairContext extends antlr.ParserRuleContext { + public _inputField?: FieldExpressionContext; + public _outputField?: FieldExpressionContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public fieldExpression(): FieldExpressionContext[]; + public fieldExpression(i: number): FieldExpressionContext | null; + public fieldExpression(i?: number): FieldExpressionContext[] | FieldExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(FieldExpressionContext); + } + + return this.getRuleContext(i, FieldExpressionContext); + } + public AS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.AS, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_lookupPair; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitLookupPair) { + return visitor.visitLookupPair(this); + } else { + return visitor.visitChildren(this); } - finally { - this.exitRule(); + } +} + + +export class FillnullCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public FILLNULL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.FILLNULL, 0)!; + } + public fillNullWith(): FillNullWithContext | null { + return this.getRuleContext(0, FillNullWithContext); + } + public fillNullUsing(): FillNullUsingContext | null { + return this.getRuleContext(0, FillNullUsingContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_fillnullCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitFillnullCommand) { + return visitor.visitFillnullCommand(this); + } else { + return visitor.visitChildren(this); } - return localContext; } +} - public override sempred(localContext: antlr.ParserRuleContext | null, ruleIndex: number, predIndex: number): boolean { - switch (ruleIndex) { - case 52: - return this.valueExpression_sempred(localContext as ValueExpressionContext, predIndex); + +export class FillNullWithContext extends antlr.ParserRuleContext { + public _replacement?: ValueExpressionContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public WITH(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.WITH, 0)!; + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public IN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.IN, 0); + } + public fieldList(): FieldListContext | null { + return this.getRuleContext(0, FieldListContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_fillNullWith; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitFillNullWith) { + return visitor.visitFillNullWith(this); + } else { + return visitor.visitChildren(this); } - return true; } - private valueExpression_sempred(localContext: ValueExpressionContext | null, predIndex: number): boolean { - switch (predIndex) { - case 0: - return this.precpred(this.context, 8); - case 1: - return this.precpred(this.context, 7); +} + + +export class FillNullUsingContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public USING(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.USING, 0)!; + } + public replacementPair(): ReplacementPairContext[]; + public replacementPair(i: number): ReplacementPairContext | null; + public replacementPair(i?: number): ReplacementPairContext[] | ReplacementPairContext | null { + if (i === undefined) { + return this.getRuleContexts(ReplacementPairContext); + } + + return this.getRuleContext(i, ReplacementPairContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_fillNullUsing; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitFillNullUsing) { + return visitor.visitFillNullUsing(this); + } else { + return visitor.visitChildren(this); } - return true; } +} - public static readonly _serializedATN: number[] = [ - 4,1,336,1195,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,1,0,3,0,240,8,0, - 1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,3,5,3,251,8,3,10,3,12,3,254,9, - 3,1,4,1,4,1,4,3,4,259,8,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1, - 5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,277,8,5,1,6,3,6,280,8,6,1,6,1,6,1, - 6,1,6,3,6,286,8,6,1,6,1,6,1,6,1,6,3,6,292,8,6,1,6,1,6,3,6,296,8, - 6,1,6,1,6,3,6,300,8,6,3,6,302,8,6,1,7,1,7,1,7,1,8,1,8,1,8,1,9,1, - 9,1,9,1,10,1,10,3,10,315,8,10,1,10,1,10,1,11,1,11,1,11,1,11,5,11, - 323,8,11,10,11,12,11,326,9,11,1,12,1,12,1,12,1,12,3,12,332,8,12, - 1,12,1,12,1,12,3,12,337,8,12,1,12,1,12,1,12,3,12,342,8,12,1,12,1, - 12,1,12,5,12,347,8,12,10,12,12,12,350,9,12,1,12,3,12,353,8,12,1, - 12,1,12,1,12,3,12,358,8,12,1,13,1,13,3,13,362,8,13,1,13,1,13,1,13, - 1,13,3,13,368,8,13,1,13,1,13,1,13,3,13,373,8,13,1,14,1,14,1,14,1, - 15,1,15,1,15,1,15,5,15,382,8,15,10,15,12,15,385,9,15,1,16,1,16,3, - 16,389,8,16,1,16,1,16,3,16,393,8,16,1,17,1,17,3,17,397,8,17,1,17, - 1,17,3,17,401,8,17,1,18,1,18,1,18,3,18,406,8,18,1,19,1,19,1,19,1, - 19,1,20,1,20,1,20,1,20,1,21,1,21,5,21,418,8,21,10,21,12,21,421,9, - 21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22,3,22,431,8,22,1,23,1, - 23,1,24,1,24,5,24,437,8,24,10,24,12,24,440,9,24,1,25,1,25,1,25,1, - 25,1,25,1,25,1,25,1,25,1,25,3,25,451,8,25,1,26,1,26,5,26,455,8,26, - 10,26,12,26,458,9,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27, - 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27, - 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27, - 1,27,3,27,496,8,27,1,28,1,28,5,28,500,8,28,10,28,12,28,503,9,28, - 1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,3,30,521,8,30,1,31,1,31,1,31,5,31,526,8,31,10,31, - 12,31,529,9,31,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,34,1,34,1,34, - 1,34,1,34,1,34,1,34,1,34,1,34,3,34,547,8,34,1,35,1,35,1,35,3,35, - 552,8,35,1,36,1,36,1,36,1,36,1,36,1,36,3,36,560,8,36,1,36,1,36,1, - 37,1,37,1,37,5,37,567,8,37,10,37,12,37,570,9,37,1,38,1,38,1,38,1, - 38,1,39,1,39,1,39,3,39,579,8,39,1,40,1,40,1,40,1,40,1,40,1,40,1, - 40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,3,40,596,8,40,1,41,1, - 41,1,42,1,42,1,42,1,42,1,42,3,42,605,8,42,1,42,1,42,1,43,1,43,1, - 43,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,3,44,620,8,44,1,45,1, - 45,1,46,1,46,1,46,5,46,627,8,46,10,46,12,46,630,9,46,1,47,1,47,1, - 47,5,47,635,8,47,10,47,12,47,638,9,47,1,48,1,48,3,48,642,8,48,1, - 48,5,48,645,8,48,10,48,12,48,648,9,48,1,49,1,49,1,49,3,49,653,8, - 49,1,50,1,50,1,50,1,50,1,50,1,50,1,50,3,50,662,8,50,1,51,1,51,1, - 51,1,51,1,51,1,51,1,51,1,51,3,51,672,8,51,1,52,1,52,1,52,1,52,1, - 52,1,52,1,52,1,52,1,52,1,52,3,52,684,8,52,1,52,1,52,1,52,1,52,1, - 52,1,52,5,52,692,8,52,10,52,12,52,695,9,52,1,53,1,53,1,53,1,53,3, - 53,701,8,53,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,56,1, - 56,3,56,714,8,56,1,57,1,57,1,57,1,57,1,57,1,57,1,57,5,57,723,8,57, - 10,57,12,57,726,9,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,5,58, - 736,8,58,10,58,12,58,739,9,58,1,58,1,58,1,58,1,58,1,58,5,58,746, - 8,58,10,58,12,58,749,9,58,1,58,1,58,1,59,1,59,3,59,755,8,59,1,60, - 1,60,1,60,1,60,1,60,1,61,1,61,1,61,5,61,765,8,61,10,61,12,61,768, - 9,61,1,62,1,62,1,62,5,62,773,8,62,10,62,12,62,776,9,62,1,63,3,63, - 779,8,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64, - 1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,3,64, - 804,8,64,1,65,1,65,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,68,1,68, - 1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70, - 1,70,1,70,1,70,1,70,1,70,1,70,1,70,3,70,837,8,70,1,71,1,71,1,71, - 1,71,1,71,1,71,3,71,845,8,71,1,72,1,72,1,72,5,72,850,8,72,10,72, - 12,72,853,9,72,3,72,855,8,72,1,73,1,73,1,73,3,73,860,8,73,1,73,1, - 73,1,74,1,74,1,74,1,74,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1, - 76,1,76,3,76,878,8,76,1,77,1,77,3,77,882,8,77,1,78,1,78,3,78,886, - 8,78,1,79,1,79,1,80,1,80,3,80,892,8,80,1,81,1,81,1,81,1,81,1,81, - 1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81, - 1,81,1,81,1,81,1,81,1,81,3,81,917,8,81,1,82,1,82,1,83,1,83,1,84, - 1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,86,1,86,1,86,1,86,1,86, - 1,86,1,86,1,87,1,87,1,88,1,88,1,89,1,89,3,89,945,8,89,1,90,1,90, - 1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,92,1,92,1,93,1,93, - 1,94,1,94,1,95,1,95,1,96,1,96,1,97,1,97,1,98,1,98,1,99,1,99,1,99, - 1,99,1,99,1,99,3,99,978,8,99,1,100,1,100,1,100,1,100,1,101,1,101, - 1,102,3,102,987,8,102,1,102,1,102,1,103,3,103,992,8,103,1,103,1, - 103,1,104,1,104,1,105,1,105,1,105,3,105,1001,8,105,1,106,1,106,1, - 106,1,107,1,107,1,107,1,108,1,108,1,108,1,109,1,109,1,110,1,110, - 1,111,1,111,1,111,1,111,5,111,1020,8,111,10,111,12,111,1023,9,111, - 1,111,1,111,1,112,1,112,1,112,5,112,1030,8,112,10,112,12,112,1033, - 9,112,1,113,1,113,1,113,5,113,1038,8,113,10,113,12,113,1041,9,113, - 1,114,1,114,1,114,5,114,1046,8,114,10,114,12,114,1049,9,114,1,115, - 3,115,1052,8,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,3,115, - 1061,8,115,1,116,3,116,1064,8,116,1,116,1,116,1,117,1,117,1,117, - 5,117,1071,8,117,10,117,12,117,1074,9,117,1,117,3,117,1077,8,117, - 1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117, - 1,117,3,117,1091,8,117,1,118,1,118,1,118,1,118,1,118,1,118,1,118, - 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, - 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, - 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, - 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, - 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, - 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, - 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, - 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, - 1,118,1,118,1,118,1,118,1,118,3,118,1193,8,118,1,118,0,1,104,119, - 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44, - 46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88, - 90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124, - 126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156, - 158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188, - 190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220, - 222,224,226,228,230,232,234,236,0,21,1,0,118,119,1,0,18,19,2,0,137, - 137,171,171,5,0,135,136,140,140,143,143,148,148,150,153,1,0,120, - 122,3,0,7,7,56,56,289,319,1,0,195,204,13,0,68,70,74,74,76,76,79, - 79,82,82,84,84,86,87,89,92,94,97,205,222,224,225,227,243,246,255, - 4,0,69,69,212,212,241,241,243,243,8,0,70,70,76,76,82,82,84,84,89, - 89,91,92,95,95,97,97,8,0,71,73,75,75,77,78,80,80,85,85,88,88,93, - 93,98,98,1,0,244,245,1,0,275,280,2,0,256,260,262,273,2,0,67,67,112, - 117,1,0,282,285,1,0,286,288,1,0,333,334,1,0,65,66,9,0,70,73,75,78, - 80,80,82,82,84,85,88,89,91,93,95,95,97,98,9,0,31,31,70,70,76,76, - 83,84,89,89,91,92,95,95,97,97,321,327,1353,0,239,1,0,0,0,2,243,1, - 0,0,0,4,245,1,0,0,0,6,247,1,0,0,0,8,258,1,0,0,0,10,276,1,0,0,0,12, - 301,1,0,0,0,14,303,1,0,0,0,16,306,1,0,0,0,18,309,1,0,0,0,20,312, - 1,0,0,0,22,318,1,0,0,0,24,327,1,0,0,0,26,359,1,0,0,0,28,374,1,0, - 0,0,30,377,1,0,0,0,32,386,1,0,0,0,34,394,1,0,0,0,36,402,1,0,0,0, - 38,407,1,0,0,0,40,411,1,0,0,0,42,415,1,0,0,0,44,430,1,0,0,0,46,432, - 1,0,0,0,48,434,1,0,0,0,50,450,1,0,0,0,52,452,1,0,0,0,54,495,1,0, - 0,0,56,497,1,0,0,0,58,504,1,0,0,0,60,520,1,0,0,0,62,522,1,0,0,0, - 64,530,1,0,0,0,66,534,1,0,0,0,68,546,1,0,0,0,70,548,1,0,0,0,72,553, - 1,0,0,0,74,563,1,0,0,0,76,571,1,0,0,0,78,575,1,0,0,0,80,595,1,0, - 0,0,82,597,1,0,0,0,84,599,1,0,0,0,86,608,1,0,0,0,88,619,1,0,0,0, - 90,621,1,0,0,0,92,623,1,0,0,0,94,631,1,0,0,0,96,639,1,0,0,0,98,652, - 1,0,0,0,100,661,1,0,0,0,102,671,1,0,0,0,104,683,1,0,0,0,106,700, - 1,0,0,0,108,702,1,0,0,0,110,709,1,0,0,0,112,713,1,0,0,0,114,715, - 1,0,0,0,116,729,1,0,0,0,118,754,1,0,0,0,120,756,1,0,0,0,122,761, - 1,0,0,0,124,769,1,0,0,0,126,778,1,0,0,0,128,803,1,0,0,0,130,805, - 1,0,0,0,132,807,1,0,0,0,134,809,1,0,0,0,136,814,1,0,0,0,138,821, - 1,0,0,0,140,836,1,0,0,0,142,844,1,0,0,0,144,854,1,0,0,0,146,859, - 1,0,0,0,148,863,1,0,0,0,150,867,1,0,0,0,152,877,1,0,0,0,154,881, - 1,0,0,0,156,885,1,0,0,0,158,887,1,0,0,0,160,891,1,0,0,0,162,916, - 1,0,0,0,164,918,1,0,0,0,166,920,1,0,0,0,168,922,1,0,0,0,170,929, - 1,0,0,0,172,931,1,0,0,0,174,938,1,0,0,0,176,940,1,0,0,0,178,944, - 1,0,0,0,180,946,1,0,0,0,182,955,1,0,0,0,184,957,1,0,0,0,186,959, - 1,0,0,0,188,961,1,0,0,0,190,963,1,0,0,0,192,965,1,0,0,0,194,967, - 1,0,0,0,196,969,1,0,0,0,198,977,1,0,0,0,200,979,1,0,0,0,202,983, - 1,0,0,0,204,986,1,0,0,0,206,991,1,0,0,0,208,995,1,0,0,0,210,1000, - 1,0,0,0,212,1002,1,0,0,0,214,1005,1,0,0,0,216,1008,1,0,0,0,218,1011, - 1,0,0,0,220,1013,1,0,0,0,222,1015,1,0,0,0,224,1026,1,0,0,0,226,1034, - 1,0,0,0,228,1042,1,0,0,0,230,1060,1,0,0,0,232,1063,1,0,0,0,234,1090, - 1,0,0,0,236,1192,1,0,0,0,238,240,3,2,1,0,239,238,1,0,0,0,239,240, - 1,0,0,0,240,241,1,0,0,0,241,242,5,0,0,1,242,1,1,0,0,0,243,244,3, - 4,2,0,244,3,1,0,0,0,245,246,3,6,3,0,246,5,1,0,0,0,247,252,3,8,4, - 0,248,249,5,109,0,0,249,251,3,10,5,0,250,248,1,0,0,0,251,254,1,0, - 0,0,252,250,1,0,0,0,252,253,1,0,0,0,253,7,1,0,0,0,254,252,1,0,0, - 0,255,259,3,12,6,0,256,259,3,14,7,0,257,259,3,16,8,0,258,255,1,0, - 0,0,258,256,1,0,0,0,258,257,1,0,0,0,259,9,1,0,0,0,260,277,3,18,9, - 0,261,277,3,20,10,0,262,277,3,22,11,0,263,277,3,24,12,0,264,277, - 3,26,13,0,265,277,3,28,14,0,266,277,3,30,15,0,267,277,3,32,16,0, - 268,277,3,34,17,0,269,277,3,36,18,0,270,277,3,38,19,0,271,277,3, - 40,20,0,272,277,3,42,21,0,273,277,3,48,24,0,274,277,3,52,26,0,275, - 277,3,56,28,0,276,260,1,0,0,0,276,261,1,0,0,0,276,262,1,0,0,0,276, - 263,1,0,0,0,276,264,1,0,0,0,276,265,1,0,0,0,276,266,1,0,0,0,276, - 267,1,0,0,0,276,268,1,0,0,0,276,269,1,0,0,0,276,270,1,0,0,0,276, - 271,1,0,0,0,276,272,1,0,0,0,276,273,1,0,0,0,276,274,1,0,0,0,276, - 275,1,0,0,0,277,11,1,0,0,0,278,280,5,2,0,0,279,278,1,0,0,0,279,280, - 1,0,0,0,280,281,1,0,0,0,281,282,3,60,30,0,282,283,3,90,45,0,283, - 302,1,0,0,0,284,286,5,2,0,0,285,284,1,0,0,0,285,286,1,0,0,0,286, - 287,1,0,0,0,287,288,3,90,45,0,288,289,3,60,30,0,289,302,1,0,0,0, - 290,292,5,2,0,0,291,290,1,0,0,0,291,292,1,0,0,0,292,293,1,0,0,0, - 293,302,3,60,30,0,294,296,5,2,0,0,295,294,1,0,0,0,295,296,1,0,0, - 0,296,297,1,0,0,0,297,302,3,90,45,0,298,300,5,2,0,0,299,298,1,0, - 0,0,299,300,1,0,0,0,300,302,1,0,0,0,301,279,1,0,0,0,301,285,1,0, - 0,0,301,291,1,0,0,0,301,295,1,0,0,0,301,299,1,0,0,0,302,13,1,0,0, - 0,303,304,5,3,0,0,304,305,3,62,31,0,305,15,1,0,0,0,306,307,5,4,0, - 0,307,308,5,33,0,0,308,17,1,0,0,0,309,310,5,6,0,0,310,311,3,90,45, - 0,311,19,1,0,0,0,312,314,5,7,0,0,313,315,7,0,0,0,314,313,1,0,0,0, - 314,315,1,0,0,0,315,316,1,0,0,0,316,317,3,122,61,0,317,21,1,0,0, - 0,318,319,5,8,0,0,319,324,3,64,32,0,320,321,5,110,0,0,321,323,3, - 64,32,0,322,320,1,0,0,0,323,326,1,0,0,0,324,322,1,0,0,0,324,325, - 1,0,0,0,325,23,1,0,0,0,326,324,1,0,0,0,327,331,5,9,0,0,328,329,5, - 42,0,0,329,330,5,112,0,0,330,332,3,204,102,0,331,328,1,0,0,0,331, - 332,1,0,0,0,332,336,1,0,0,0,333,334,5,43,0,0,334,335,5,112,0,0,335, - 337,3,208,104,0,336,333,1,0,0,0,336,337,1,0,0,0,337,341,1,0,0,0, - 338,339,5,44,0,0,339,340,5,112,0,0,340,342,3,202,101,0,341,338,1, - 0,0,0,341,342,1,0,0,0,342,343,1,0,0,0,343,348,3,78,39,0,344,345, - 5,110,0,0,345,347,3,78,39,0,346,344,1,0,0,0,347,350,1,0,0,0,348, - 346,1,0,0,0,348,349,1,0,0,0,349,352,1,0,0,0,350,348,1,0,0,0,351, - 353,3,68,34,0,352,351,1,0,0,0,352,353,1,0,0,0,353,357,1,0,0,0,354, - 355,5,41,0,0,355,356,5,112,0,0,356,358,3,208,104,0,357,354,1,0,0, - 0,357,358,1,0,0,0,358,25,1,0,0,0,359,361,5,10,0,0,360,362,3,204, - 102,0,361,360,1,0,0,0,361,362,1,0,0,0,362,363,1,0,0,0,363,367,3, - 122,61,0,364,365,5,39,0,0,365,366,5,112,0,0,366,368,3,208,104,0, - 367,364,1,0,0,0,367,368,1,0,0,0,368,372,1,0,0,0,369,370,5,40,0,0, - 370,371,5,112,0,0,371,373,3,208,104,0,372,369,1,0,0,0,372,373,1, - 0,0,0,373,27,1,0,0,0,374,375,5,11,0,0,375,376,3,74,37,0,376,29,1, - 0,0,0,377,378,5,12,0,0,378,383,3,76,38,0,379,380,5,110,0,0,380,382, - 3,76,38,0,381,379,1,0,0,0,382,385,1,0,0,0,383,381,1,0,0,0,383,384, - 1,0,0,0,384,31,1,0,0,0,385,383,1,0,0,0,386,388,5,13,0,0,387,389, - 3,204,102,0,388,387,1,0,0,0,388,389,1,0,0,0,389,392,1,0,0,0,390, - 391,5,5,0,0,391,393,3,204,102,0,392,390,1,0,0,0,392,393,1,0,0,0, - 393,33,1,0,0,0,394,396,5,14,0,0,395,397,3,204,102,0,396,395,1,0, - 0,0,396,397,1,0,0,0,397,398,1,0,0,0,398,400,3,122,61,0,399,401,3, - 66,33,0,400,399,1,0,0,0,400,401,1,0,0,0,401,35,1,0,0,0,402,403,5, - 15,0,0,403,405,3,122,61,0,404,406,3,66,33,0,405,404,1,0,0,0,405, - 406,1,0,0,0,406,37,1,0,0,0,407,408,5,20,0,0,408,409,3,88,44,0,409, - 410,3,202,101,0,410,39,1,0,0,0,411,412,5,16,0,0,412,413,3,88,44, - 0,413,414,3,202,101,0,414,41,1,0,0,0,415,419,5,22,0,0,416,418,3, - 44,22,0,417,416,1,0,0,0,418,421,1,0,0,0,419,417,1,0,0,0,419,420, - 1,0,0,0,420,422,1,0,0,0,421,419,1,0,0,0,422,423,3,88,44,0,423,43, - 1,0,0,0,424,425,5,23,0,0,425,426,5,112,0,0,426,431,3,202,101,0,427, - 428,5,21,0,0,428,429,5,112,0,0,429,431,3,202,101,0,430,424,1,0,0, - 0,430,427,1,0,0,0,431,45,1,0,0,0,432,433,7,1,0,0,433,47,1,0,0,0, - 434,438,5,24,0,0,435,437,3,50,25,0,436,435,1,0,0,0,437,440,1,0,0, - 0,438,436,1,0,0,0,438,439,1,0,0,0,439,49,1,0,0,0,440,438,1,0,0,0, - 441,442,5,45,0,0,442,443,5,112,0,0,443,451,3,204,102,0,444,445,5, - 46,0,0,445,446,5,112,0,0,446,451,3,204,102,0,447,448,5,47,0,0,448, - 449,5,112,0,0,449,451,3,202,101,0,450,441,1,0,0,0,450,444,1,0,0, - 0,450,447,1,0,0,0,451,51,1,0,0,0,452,456,5,25,0,0,453,455,3,54,27, - 0,454,453,1,0,0,0,455,458,1,0,0,0,456,454,1,0,0,0,456,457,1,0,0, - 0,457,53,1,0,0,0,458,456,1,0,0,0,459,460,5,48,0,0,460,461,5,112, - 0,0,461,496,3,204,102,0,462,463,5,49,0,0,463,464,5,112,0,0,464,496, - 3,204,102,0,465,466,5,50,0,0,466,467,5,112,0,0,467,496,3,204,102, - 0,468,469,5,51,0,0,469,470,5,112,0,0,470,496,3,204,102,0,471,472, - 5,52,0,0,472,473,5,112,0,0,473,496,3,206,103,0,474,475,5,53,0,0, - 475,476,5,112,0,0,476,496,3,206,103,0,477,478,5,54,0,0,478,479,5, - 112,0,0,479,496,3,202,101,0,480,481,5,55,0,0,481,482,5,112,0,0,482, - 496,3,202,101,0,483,484,5,215,0,0,484,485,5,112,0,0,485,496,3,202, - 101,0,486,487,5,56,0,0,487,488,5,112,0,0,488,496,3,202,101,0,489, - 490,5,57,0,0,490,491,5,112,0,0,491,496,3,204,102,0,492,493,5,58, - 0,0,493,494,5,112,0,0,494,496,3,206,103,0,495,459,1,0,0,0,495,462, - 1,0,0,0,495,465,1,0,0,0,495,468,1,0,0,0,495,471,1,0,0,0,495,474, - 1,0,0,0,495,477,1,0,0,0,495,480,1,0,0,0,495,483,1,0,0,0,495,486, - 1,0,0,0,495,489,1,0,0,0,495,492,1,0,0,0,496,55,1,0,0,0,497,501,5, - 26,0,0,498,500,3,58,29,0,499,498,1,0,0,0,500,503,1,0,0,0,501,499, - 1,0,0,0,501,502,1,0,0,0,502,57,1,0,0,0,503,501,1,0,0,0,504,505,3, - 230,115,0,505,506,5,112,0,0,506,507,3,198,99,0,507,59,1,0,0,0,508, - 509,5,29,0,0,509,510,5,112,0,0,510,521,3,62,31,0,511,512,5,30,0, - 0,512,513,5,112,0,0,513,521,3,62,31,0,514,515,5,29,0,0,515,516,5, - 112,0,0,516,521,3,120,60,0,517,518,5,30,0,0,518,519,5,112,0,0,519, - 521,3,120,60,0,520,508,1,0,0,0,520,511,1,0,0,0,520,514,1,0,0,0,520, - 517,1,0,0,0,521,61,1,0,0,0,522,527,3,118,59,0,523,524,5,110,0,0, - 524,526,3,118,59,0,525,523,1,0,0,0,526,529,1,0,0,0,527,525,1,0,0, - 0,527,528,1,0,0,0,528,63,1,0,0,0,529,527,1,0,0,0,530,531,3,132,66, - 0,531,532,5,27,0,0,532,533,3,132,66,0,533,65,1,0,0,0,534,535,5,28, - 0,0,535,536,3,122,61,0,536,67,1,0,0,0,537,538,5,28,0,0,538,547,3, - 122,61,0,539,540,5,28,0,0,540,547,3,70,35,0,541,542,5,28,0,0,542, - 543,3,70,35,0,543,544,5,110,0,0,544,545,3,122,61,0,545,547,1,0,0, - 0,546,537,1,0,0,0,546,539,1,0,0,0,546,541,1,0,0,0,547,69,1,0,0,0, - 548,551,3,72,36,0,549,550,5,27,0,0,550,552,3,224,112,0,551,549,1, - 0,0,0,551,552,1,0,0,0,552,71,1,0,0,0,553,554,5,320,0,0,554,555,5, - 125,0,0,555,556,3,130,65,0,556,557,5,110,0,0,557,559,3,198,99,0, - 558,560,3,220,110,0,559,558,1,0,0,0,559,560,1,0,0,0,560,561,1,0, - 0,0,561,562,5,126,0,0,562,73,1,0,0,0,563,568,3,126,63,0,564,565, - 5,110,0,0,565,567,3,126,63,0,566,564,1,0,0,0,567,570,1,0,0,0,568, - 566,1,0,0,0,568,569,1,0,0,0,569,75,1,0,0,0,570,568,1,0,0,0,571,572, - 3,130,65,0,572,573,5,112,0,0,573,574,3,88,44,0,574,77,1,0,0,0,575, - 578,3,80,40,0,576,577,5,27,0,0,577,579,3,132,66,0,578,576,1,0,0, - 0,578,579,1,0,0,0,579,79,1,0,0,0,580,581,3,82,41,0,581,582,5,125, - 0,0,582,583,3,104,52,0,583,584,5,126,0,0,584,596,1,0,0,0,585,586, - 5,136,0,0,586,587,5,125,0,0,587,596,5,126,0,0,588,589,7,2,0,0,589, - 590,5,125,0,0,590,591,3,104,52,0,591,592,5,126,0,0,592,596,1,0,0, - 0,593,596,3,86,43,0,594,596,3,84,42,0,595,580,1,0,0,0,595,585,1, - 0,0,0,595,588,1,0,0,0,595,593,1,0,0,0,595,594,1,0,0,0,596,81,1,0, - 0,0,597,598,7,3,0,0,598,83,1,0,0,0,599,600,5,155,0,0,600,601,5,125, - 0,0,601,604,3,130,65,0,602,603,5,110,0,0,603,605,3,204,102,0,604, - 602,1,0,0,0,604,605,1,0,0,0,605,606,1,0,0,0,606,607,5,126,0,0,607, - 85,1,0,0,0,608,609,5,154,0,0,609,610,5,114,0,0,610,611,3,204,102, - 0,611,612,5,113,0,0,612,613,5,125,0,0,613,614,3,130,65,0,614,615, - 5,126,0,0,615,87,1,0,0,0,616,620,3,90,45,0,617,620,3,102,51,0,618, - 620,3,104,52,0,619,616,1,0,0,0,619,617,1,0,0,0,619,618,1,0,0,0,620, - 89,1,0,0,0,621,622,3,92,46,0,622,91,1,0,0,0,623,628,3,94,47,0,624, - 625,5,62,0,0,625,627,3,94,47,0,626,624,1,0,0,0,627,630,1,0,0,0,628, - 626,1,0,0,0,628,629,1,0,0,0,629,93,1,0,0,0,630,628,1,0,0,0,631,636, - 3,96,48,0,632,633,5,64,0,0,633,635,3,96,48,0,634,632,1,0,0,0,635, - 638,1,0,0,0,636,634,1,0,0,0,636,637,1,0,0,0,637,95,1,0,0,0,638,636, - 1,0,0,0,639,646,3,98,49,0,640,642,5,63,0,0,641,640,1,0,0,0,641,642, - 1,0,0,0,642,643,1,0,0,0,643,645,3,98,49,0,644,641,1,0,0,0,645,648, - 1,0,0,0,646,644,1,0,0,0,646,647,1,0,0,0,647,97,1,0,0,0,648,646,1, - 0,0,0,649,650,5,61,0,0,650,653,3,98,49,0,651,653,3,100,50,0,652, - 649,1,0,0,0,652,651,1,0,0,0,653,99,1,0,0,0,654,662,3,102,51,0,655, - 662,3,110,55,0,656,662,3,112,56,0,657,658,5,125,0,0,658,659,3,90, - 45,0,659,660,5,126,0,0,660,662,1,0,0,0,661,654,1,0,0,0,661,655,1, - 0,0,0,661,656,1,0,0,0,661,657,1,0,0,0,662,101,1,0,0,0,663,664,3, - 104,52,0,664,665,3,192,96,0,665,666,3,104,52,0,666,672,1,0,0,0,667, - 668,3,104,52,0,668,669,5,60,0,0,669,670,3,222,111,0,670,672,1,0, - 0,0,671,663,1,0,0,0,671,667,1,0,0,0,672,103,1,0,0,0,673,674,6,52, - -1,0,674,684,3,106,53,0,675,684,3,108,54,0,676,684,3,172,86,0,677, - 684,3,168,84,0,678,684,3,180,90,0,679,680,5,125,0,0,680,681,3,104, - 52,0,681,682,5,126,0,0,682,684,1,0,0,0,683,673,1,0,0,0,683,675,1, - 0,0,0,683,676,1,0,0,0,683,677,1,0,0,0,683,678,1,0,0,0,683,679,1, - 0,0,0,684,693,1,0,0,0,685,686,10,8,0,0,686,687,7,4,0,0,687,692,3, - 104,52,9,688,689,10,7,0,0,689,690,7,0,0,0,690,692,3,104,52,8,691, - 685,1,0,0,0,691,688,1,0,0,0,692,695,1,0,0,0,693,691,1,0,0,0,693, - 694,1,0,0,0,694,105,1,0,0,0,695,693,1,0,0,0,696,701,3,134,67,0,697, - 701,3,136,68,0,698,701,3,130,65,0,699,701,3,198,99,0,700,696,1,0, - 0,0,700,697,1,0,0,0,700,698,1,0,0,0,700,699,1,0,0,0,701,107,1,0, - 0,0,702,703,3,190,95,0,703,704,5,125,0,0,704,705,3,146,73,0,705, - 706,5,60,0,0,706,707,3,146,73,0,707,708,5,126,0,0,708,109,1,0,0, - 0,709,710,3,138,69,0,710,111,1,0,0,0,711,714,3,114,57,0,712,714, - 3,116,58,0,713,711,1,0,0,0,713,712,1,0,0,0,714,113,1,0,0,0,715,716, - 3,194,97,0,716,717,5,125,0,0,717,718,3,156,78,0,718,719,5,110,0, - 0,719,724,3,158,79,0,720,721,5,110,0,0,721,723,3,148,74,0,722,720, - 1,0,0,0,723,726,1,0,0,0,724,722,1,0,0,0,724,725,1,0,0,0,725,727, - 1,0,0,0,726,724,1,0,0,0,727,728,5,126,0,0,728,115,1,0,0,0,729,730, - 3,196,98,0,730,731,5,125,0,0,731,732,5,127,0,0,732,737,3,152,76, - 0,733,734,5,110,0,0,734,736,3,152,76,0,735,733,1,0,0,0,736,739,1, - 0,0,0,737,735,1,0,0,0,737,738,1,0,0,0,738,740,1,0,0,0,739,737,1, - 0,0,0,740,741,5,128,0,0,741,742,5,110,0,0,742,747,3,158,79,0,743, - 744,5,110,0,0,744,746,3,148,74,0,745,743,1,0,0,0,746,749,1,0,0,0, - 747,745,1,0,0,0,747,748,1,0,0,0,748,750,1,0,0,0,749,747,1,0,0,0, - 750,751,5,126,0,0,751,117,1,0,0,0,752,755,3,226,113,0,753,755,5, - 332,0,0,754,752,1,0,0,0,754,753,1,0,0,0,755,119,1,0,0,0,756,757, - 3,224,112,0,757,758,5,125,0,0,758,759,3,144,72,0,759,760,5,126,0, - 0,760,121,1,0,0,0,761,766,3,130,65,0,762,763,5,110,0,0,763,765,3, - 130,65,0,764,762,1,0,0,0,765,768,1,0,0,0,766,764,1,0,0,0,766,767, - 1,0,0,0,767,123,1,0,0,0,768,766,1,0,0,0,769,774,3,132,66,0,770,771, - 5,110,0,0,771,773,3,132,66,0,772,770,1,0,0,0,773,776,1,0,0,0,774, - 772,1,0,0,0,774,775,1,0,0,0,775,125,1,0,0,0,776,774,1,0,0,0,777, - 779,7,0,0,0,778,777,1,0,0,0,778,779,1,0,0,0,779,780,1,0,0,0,780, - 781,3,128,64,0,781,127,1,0,0,0,782,804,3,130,65,0,783,784,5,35,0, - 0,784,785,5,125,0,0,785,786,3,130,65,0,786,787,5,126,0,0,787,804, - 1,0,0,0,788,789,5,36,0,0,789,790,5,125,0,0,790,791,3,130,65,0,791, - 792,5,126,0,0,792,804,1,0,0,0,793,794,5,37,0,0,794,795,5,125,0,0, - 795,796,3,130,65,0,796,797,5,126,0,0,797,804,1,0,0,0,798,799,5,38, - 0,0,799,800,5,125,0,0,800,801,3,130,65,0,801,802,5,126,0,0,802,804, - 1,0,0,0,803,782,1,0,0,0,803,783,1,0,0,0,803,788,1,0,0,0,803,793, - 1,0,0,0,803,798,1,0,0,0,804,129,1,0,0,0,805,806,3,224,112,0,806, - 131,1,0,0,0,807,808,3,228,114,0,808,133,1,0,0,0,809,810,3,142,71, - 0,810,811,5,125,0,0,811,812,3,144,72,0,812,813,5,126,0,0,813,135, - 1,0,0,0,814,815,5,274,0,0,815,816,5,125,0,0,816,817,3,88,44,0,817, - 818,5,27,0,0,818,819,3,140,70,0,819,820,5,126,0,0,820,137,1,0,0, - 0,821,822,3,184,92,0,822,823,5,125,0,0,823,824,3,144,72,0,824,825, - 5,126,0,0,825,139,1,0,0,0,826,837,5,212,0,0,827,837,5,241,0,0,828, - 837,5,243,0,0,829,837,5,102,0,0,830,837,5,103,0,0,831,837,5,104, - 0,0,832,837,5,105,0,0,833,837,5,106,0,0,834,837,5,107,0,0,835,837, - 5,108,0,0,836,826,1,0,0,0,836,827,1,0,0,0,836,828,1,0,0,0,836,829, - 1,0,0,0,836,830,1,0,0,0,836,831,1,0,0,0,836,832,1,0,0,0,836,833, - 1,0,0,0,836,834,1,0,0,0,836,835,1,0,0,0,837,141,1,0,0,0,838,845, - 3,162,81,0,839,845,3,166,83,0,840,845,3,188,94,0,841,845,3,184,92, - 0,842,845,3,186,93,0,843,845,3,190,95,0,844,838,1,0,0,0,844,839, - 1,0,0,0,844,840,1,0,0,0,844,841,1,0,0,0,844,842,1,0,0,0,844,843, - 1,0,0,0,845,143,1,0,0,0,846,851,3,146,73,0,847,848,5,110,0,0,848, - 850,3,146,73,0,849,847,1,0,0,0,850,853,1,0,0,0,851,849,1,0,0,0,851, - 852,1,0,0,0,852,855,1,0,0,0,853,851,1,0,0,0,854,846,1,0,0,0,854, - 855,1,0,0,0,855,145,1,0,0,0,856,857,3,230,115,0,857,858,5,112,0, - 0,858,860,1,0,0,0,859,856,1,0,0,0,859,860,1,0,0,0,860,861,1,0,0, - 0,861,862,3,104,52,0,862,147,1,0,0,0,863,864,3,150,75,0,864,865, - 5,112,0,0,865,866,3,160,80,0,866,149,1,0,0,0,867,868,7,5,0,0,868, - 151,1,0,0,0,869,878,3,156,78,0,870,871,3,156,78,0,871,872,3,154, - 77,0,872,878,1,0,0,0,873,874,3,156,78,0,874,875,5,134,0,0,875,876, - 3,154,77,0,876,878,1,0,0,0,877,869,1,0,0,0,877,870,1,0,0,0,877,873, - 1,0,0,0,878,153,1,0,0,0,879,882,3,204,102,0,880,882,3,206,103,0, - 881,879,1,0,0,0,881,880,1,0,0,0,882,155,1,0,0,0,883,886,3,224,112, - 0,884,886,3,202,101,0,885,883,1,0,0,0,885,884,1,0,0,0,886,157,1, - 0,0,0,887,888,3,160,80,0,888,159,1,0,0,0,889,892,3,224,112,0,890, - 892,3,198,99,0,891,889,1,0,0,0,891,890,1,0,0,0,892,161,1,0,0,0,893, - 917,5,172,0,0,894,917,5,173,0,0,895,917,5,174,0,0,896,917,5,175, - 0,0,897,917,5,176,0,0,898,917,5,177,0,0,899,917,5,178,0,0,900,917, - 5,179,0,0,901,917,5,180,0,0,902,917,5,181,0,0,903,917,5,182,0,0, - 904,917,5,183,0,0,905,917,5,184,0,0,906,917,5,185,0,0,907,917,5, - 186,0,0,908,917,5,188,0,0,909,917,5,189,0,0,910,917,5,190,0,0,911, - 917,5,191,0,0,912,917,5,192,0,0,913,917,5,193,0,0,914,917,5,194, - 0,0,915,917,3,164,82,0,916,893,1,0,0,0,916,894,1,0,0,0,916,895,1, - 0,0,0,916,896,1,0,0,0,916,897,1,0,0,0,916,898,1,0,0,0,916,899,1, - 0,0,0,916,900,1,0,0,0,916,901,1,0,0,0,916,902,1,0,0,0,916,903,1, - 0,0,0,916,904,1,0,0,0,916,905,1,0,0,0,916,906,1,0,0,0,916,907,1, - 0,0,0,916,908,1,0,0,0,916,909,1,0,0,0,916,910,1,0,0,0,916,911,1, - 0,0,0,916,912,1,0,0,0,916,913,1,0,0,0,916,914,1,0,0,0,916,915,1, - 0,0,0,917,163,1,0,0,0,918,919,7,6,0,0,919,165,1,0,0,0,920,921,7, - 7,0,0,921,167,1,0,0,0,922,923,5,226,0,0,923,924,5,125,0,0,924,925, - 3,170,85,0,925,926,5,110,0,0,926,927,3,146,73,0,927,928,5,126,0, - 0,928,169,1,0,0,0,929,930,7,8,0,0,930,171,1,0,0,0,931,932,5,223, - 0,0,932,933,5,125,0,0,933,934,3,178,89,0,934,935,5,5,0,0,935,936, - 3,146,73,0,936,937,5,126,0,0,937,173,1,0,0,0,938,939,7,9,0,0,939, - 175,1,0,0,0,940,941,7,10,0,0,941,177,1,0,0,0,942,945,3,174,87,0, - 943,945,3,176,88,0,944,942,1,0,0,0,944,943,1,0,0,0,945,179,1,0,0, - 0,946,947,3,182,91,0,947,948,5,125,0,0,948,949,3,174,87,0,949,950, - 5,110,0,0,950,951,3,146,73,0,951,952,5,110,0,0,952,953,3,146,73, - 0,953,954,5,126,0,0,954,181,1,0,0,0,955,956,7,11,0,0,956,183,1,0, - 0,0,957,958,7,12,0,0,958,185,1,0,0,0,959,960,5,281,0,0,960,187,1, - 0,0,0,961,962,7,13,0,0,962,189,1,0,0,0,963,964,5,187,0,0,964,191, - 1,0,0,0,965,966,7,14,0,0,966,193,1,0,0,0,967,968,7,15,0,0,968,195, - 1,0,0,0,969,970,7,16,0,0,970,197,1,0,0,0,971,978,3,200,100,0,972, - 978,3,202,101,0,973,978,3,204,102,0,974,978,3,206,103,0,975,978, - 3,208,104,0,976,978,3,210,105,0,977,971,1,0,0,0,977,972,1,0,0,0, - 977,973,1,0,0,0,977,974,1,0,0,0,977,975,1,0,0,0,977,976,1,0,0,0, - 978,199,1,0,0,0,979,980,5,81,0,0,980,981,3,104,52,0,981,982,3,218, - 109,0,982,201,1,0,0,0,983,984,7,17,0,0,984,203,1,0,0,0,985,987,7, - 0,0,0,986,985,1,0,0,0,986,987,1,0,0,0,987,988,1,0,0,0,988,989,5, - 330,0,0,989,205,1,0,0,0,990,992,7,0,0,0,991,990,1,0,0,0,991,992, - 1,0,0,0,992,993,1,0,0,0,993,994,5,331,0,0,994,207,1,0,0,0,995,996, - 7,18,0,0,996,209,1,0,0,0,997,1001,3,212,106,0,998,1001,3,214,107, - 0,999,1001,3,216,108,0,1000,997,1,0,0,0,1000,998,1,0,0,0,1000,999, - 1,0,0,0,1001,211,1,0,0,0,1002,1003,5,212,0,0,1003,1004,3,202,101, - 0,1004,213,1,0,0,0,1005,1006,5,241,0,0,1006,1007,3,202,101,0,1007, - 215,1,0,0,0,1008,1009,5,243,0,0,1009,1010,3,202,101,0,1010,217,1, - 0,0,0,1011,1012,7,19,0,0,1012,219,1,0,0,0,1013,1014,7,20,0,0,1014, - 221,1,0,0,0,1015,1016,5,125,0,0,1016,1021,3,198,99,0,1017,1018,5, - 110,0,0,1018,1020,3,198,99,0,1019,1017,1,0,0,0,1020,1023,1,0,0,0, - 1021,1019,1,0,0,0,1021,1022,1,0,0,0,1022,1024,1,0,0,0,1023,1021, - 1,0,0,0,1024,1025,5,126,0,0,1025,223,1,0,0,0,1026,1031,3,230,115, - 0,1027,1028,5,111,0,0,1028,1030,3,230,115,0,1029,1027,1,0,0,0,1030, - 1033,1,0,0,0,1031,1029,1,0,0,0,1031,1032,1,0,0,0,1032,225,1,0,0, - 0,1033,1031,1,0,0,0,1034,1039,3,232,116,0,1035,1036,5,111,0,0,1036, - 1038,3,230,115,0,1037,1035,1,0,0,0,1038,1041,1,0,0,0,1039,1037,1, - 0,0,0,1039,1040,1,0,0,0,1040,227,1,0,0,0,1041,1039,1,0,0,0,1042, - 1047,3,234,117,0,1043,1044,5,111,0,0,1044,1046,3,234,117,0,1045, - 1043,1,0,0,0,1046,1049,1,0,0,0,1047,1045,1,0,0,0,1047,1048,1,0,0, - 0,1048,229,1,0,0,0,1049,1047,1,0,0,0,1050,1052,5,111,0,0,1051,1050, - 1,0,0,0,1051,1052,1,0,0,0,1052,1053,1,0,0,0,1053,1061,5,328,0,0, - 1054,1055,5,131,0,0,1055,1056,3,230,115,0,1056,1057,5,131,0,0,1057, - 1061,1,0,0,0,1058,1061,5,335,0,0,1059,1061,3,236,118,0,1060,1051, - 1,0,0,0,1060,1054,1,0,0,0,1060,1058,1,0,0,0,1060,1059,1,0,0,0,1061, - 231,1,0,0,0,1062,1064,5,329,0,0,1063,1062,1,0,0,0,1063,1064,1,0, - 0,0,1064,1065,1,0,0,0,1065,1066,3,230,115,0,1066,233,1,0,0,0,1067, - 1072,3,230,115,0,1068,1069,5,122,0,0,1069,1071,3,230,115,0,1070, - 1068,1,0,0,0,1071,1074,1,0,0,0,1072,1070,1,0,0,0,1072,1073,1,0,0, - 0,1073,1076,1,0,0,0,1074,1072,1,0,0,0,1075,1077,5,122,0,0,1076,1075, - 1,0,0,0,1076,1077,1,0,0,0,1077,1091,1,0,0,0,1078,1079,5,129,0,0, - 1079,1080,3,234,117,0,1080,1081,5,129,0,0,1081,1091,1,0,0,0,1082, - 1083,5,130,0,0,1083,1084,3,234,117,0,1084,1085,5,130,0,0,1085,1091, - 1,0,0,0,1086,1087,5,131,0,0,1087,1088,3,234,117,0,1088,1089,5,131, - 0,0,1089,1091,1,0,0,0,1090,1067,1,0,0,0,1090,1078,1,0,0,0,1090,1082, - 1,0,0,0,1090,1086,1,0,0,0,1091,235,1,0,0,0,1092,1193,5,31,0,0,1093, - 1193,3,220,110,0,1094,1193,5,320,0,0,1095,1193,3,142,71,0,1096,1193, - 3,150,75,0,1097,1193,3,218,109,0,1098,1193,3,166,83,0,1099,1193, - 3,188,94,0,1100,1193,3,162,81,0,1101,1193,3,190,95,0,1102,1193,5, - 2,0,0,1103,1193,5,3,0,0,1104,1193,5,4,0,0,1105,1193,5,5,0,0,1106, - 1193,5,6,0,0,1107,1193,5,7,0,0,1108,1193,5,8,0,0,1109,1193,5,9,0, - 0,1110,1193,5,10,0,0,1111,1193,5,11,0,0,1112,1193,5,12,0,0,1113, - 1193,5,13,0,0,1114,1193,5,14,0,0,1115,1193,5,15,0,0,1116,1193,5, - 16,0,0,1117,1193,5,17,0,0,1118,1193,5,18,0,0,1119,1193,5,19,0,0, - 1120,1193,5,20,0,0,1121,1193,5,21,0,0,1122,1193,5,22,0,0,1123,1193, - 5,23,0,0,1124,1193,5,24,0,0,1125,1193,5,25,0,0,1126,1193,5,26,0, - 0,1127,1193,5,29,0,0,1128,1193,5,30,0,0,1129,1193,5,32,0,0,1130, - 1193,5,33,0,0,1131,1193,5,34,0,0,1132,1193,5,36,0,0,1133,1193,5, - 37,0,0,1134,1193,5,38,0,0,1135,1193,5,39,0,0,1136,1193,5,40,0,0, - 1137,1193,5,41,0,0,1138,1193,5,42,0,0,1139,1193,5,43,0,0,1140,1193, - 5,44,0,0,1141,1193,5,45,0,0,1142,1193,5,46,0,0,1143,1193,5,47,0, - 0,1144,1193,5,48,0,0,1145,1193,5,49,0,0,1146,1193,5,50,0,0,1147, - 1193,5,51,0,0,1148,1193,5,52,0,0,1149,1193,5,53,0,0,1150,1193,5, - 54,0,0,1151,1193,5,55,0,0,1152,1193,5,56,0,0,1153,1193,5,57,0,0, - 1154,1193,5,58,0,0,1155,1193,5,135,0,0,1156,1193,5,136,0,0,1157, - 1193,5,137,0,0,1158,1193,5,138,0,0,1159,1193,5,139,0,0,1160,1193, - 5,140,0,0,1161,1193,5,141,0,0,1162,1193,5,142,0,0,1163,1193,5,143, - 0,0,1164,1193,5,144,0,0,1165,1193,5,145,0,0,1166,1193,5,146,0,0, - 1167,1193,5,147,0,0,1168,1193,5,148,0,0,1169,1193,5,149,0,0,1170, - 1193,5,150,0,0,1171,1193,5,151,0,0,1172,1193,5,152,0,0,1173,1193, - 5,153,0,0,1174,1193,5,154,0,0,1175,1193,5,155,0,0,1176,1193,5,156, - 0,0,1177,1193,5,157,0,0,1178,1193,5,158,0,0,1179,1193,5,159,0,0, - 1180,1193,5,160,0,0,1181,1193,5,161,0,0,1182,1193,5,162,0,0,1183, - 1193,5,163,0,0,1184,1193,5,164,0,0,1185,1193,5,165,0,0,1186,1193, - 5,166,0,0,1187,1193,5,167,0,0,1188,1193,5,168,0,0,1189,1193,5,169, - 0,0,1190,1193,5,170,0,0,1191,1193,5,171,0,0,1192,1092,1,0,0,0,1192, - 1093,1,0,0,0,1192,1094,1,0,0,0,1192,1095,1,0,0,0,1192,1096,1,0,0, - 0,1192,1097,1,0,0,0,1192,1098,1,0,0,0,1192,1099,1,0,0,0,1192,1100, - 1,0,0,0,1192,1101,1,0,0,0,1192,1102,1,0,0,0,1192,1103,1,0,0,0,1192, - 1104,1,0,0,0,1192,1105,1,0,0,0,1192,1106,1,0,0,0,1192,1107,1,0,0, - 0,1192,1108,1,0,0,0,1192,1109,1,0,0,0,1192,1110,1,0,0,0,1192,1111, - 1,0,0,0,1192,1112,1,0,0,0,1192,1113,1,0,0,0,1192,1114,1,0,0,0,1192, - 1115,1,0,0,0,1192,1116,1,0,0,0,1192,1117,1,0,0,0,1192,1118,1,0,0, - 0,1192,1119,1,0,0,0,1192,1120,1,0,0,0,1192,1121,1,0,0,0,1192,1122, - 1,0,0,0,1192,1123,1,0,0,0,1192,1124,1,0,0,0,1192,1125,1,0,0,0,1192, - 1126,1,0,0,0,1192,1127,1,0,0,0,1192,1128,1,0,0,0,1192,1129,1,0,0, - 0,1192,1130,1,0,0,0,1192,1131,1,0,0,0,1192,1132,1,0,0,0,1192,1133, - 1,0,0,0,1192,1134,1,0,0,0,1192,1135,1,0,0,0,1192,1136,1,0,0,0,1192, - 1137,1,0,0,0,1192,1138,1,0,0,0,1192,1139,1,0,0,0,1192,1140,1,0,0, - 0,1192,1141,1,0,0,0,1192,1142,1,0,0,0,1192,1143,1,0,0,0,1192,1144, - 1,0,0,0,1192,1145,1,0,0,0,1192,1146,1,0,0,0,1192,1147,1,0,0,0,1192, - 1148,1,0,0,0,1192,1149,1,0,0,0,1192,1150,1,0,0,0,1192,1151,1,0,0, - 0,1192,1152,1,0,0,0,1192,1153,1,0,0,0,1192,1154,1,0,0,0,1192,1155, - 1,0,0,0,1192,1156,1,0,0,0,1192,1157,1,0,0,0,1192,1158,1,0,0,0,1192, - 1159,1,0,0,0,1192,1160,1,0,0,0,1192,1161,1,0,0,0,1192,1162,1,0,0, - 0,1192,1163,1,0,0,0,1192,1164,1,0,0,0,1192,1165,1,0,0,0,1192,1166, - 1,0,0,0,1192,1167,1,0,0,0,1192,1168,1,0,0,0,1192,1169,1,0,0,0,1192, - 1170,1,0,0,0,1192,1171,1,0,0,0,1192,1172,1,0,0,0,1192,1173,1,0,0, - 0,1192,1174,1,0,0,0,1192,1175,1,0,0,0,1192,1176,1,0,0,0,1192,1177, - 1,0,0,0,1192,1178,1,0,0,0,1192,1179,1,0,0,0,1192,1180,1,0,0,0,1192, - 1181,1,0,0,0,1192,1182,1,0,0,0,1192,1183,1,0,0,0,1192,1184,1,0,0, - 0,1192,1185,1,0,0,0,1192,1186,1,0,0,0,1192,1187,1,0,0,0,1192,1188, - 1,0,0,0,1192,1189,1,0,0,0,1192,1190,1,0,0,0,1192,1191,1,0,0,0,1193, - 237,1,0,0,0,90,239,252,258,276,279,285,291,295,299,301,314,324,331, - 336,341,348,352,357,361,367,372,383,388,392,396,400,405,419,430, - 438,450,456,495,501,520,527,546,551,559,568,578,595,604,619,628, - 636,641,646,652,661,671,683,691,693,700,713,724,737,747,754,766, - 774,778,803,836,844,851,854,859,877,881,885,891,916,944,977,986, - 991,1000,1021,1031,1039,1047,1051,1060,1063,1072,1076,1090,1192 - ]; - private static __ATN: antlr.ATN; - public static get _ATN(): antlr.ATN { - if (!OpenSearchPPLParser.__ATN) { - OpenSearchPPLParser.__ATN = new antlr.ATNDeserializer().deserialize(OpenSearchPPLParser._serializedATN); +export class ReplacementPairContext extends antlr.ParserRuleContext { + public _replacement?: ValueExpressionContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext)!; + } + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_replacementPair; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitReplacementPair) { + return visitor.visitReplacementPair(this); + } else { + return visitor.visitChildren(this); } + } +} - return OpenSearchPPLParser.__ATN; + +export class TrendlineCommandContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public TRENDLINE(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.TRENDLINE, 0)!; } + public trendlineClause(): TrendlineClauseContext[]; + public trendlineClause(i: number): TrendlineClauseContext | null; + public trendlineClause(i?: number): TrendlineClauseContext[] | TrendlineClauseContext | null { + if (i === undefined) { + return this.getRuleContexts(TrendlineClauseContext); + } + return this.getRuleContext(i, TrendlineClauseContext); + } + public SORT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SORT, 0); + } + public sortField(): SortFieldContext | null { + return this.getRuleContext(0, SortFieldContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_trendlineCommand; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitTrendlineCommand) { + return visitor.visitTrendlineCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} - private static readonly vocabulary = new antlr.Vocabulary(OpenSearchPPLParser.literalNames, OpenSearchPPLParser.symbolicNames, []); - public override get vocabulary(): antlr.Vocabulary { - return OpenSearchPPLParser.vocabulary; +export class TrendlineClauseContext extends antlr.ParserRuleContext { + public _numberOfDataPoints?: IntegerLiteralContext; + public _field?: FieldExpressionContext; + public _alias?: QualifiedNameContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public trendlineType(): TrendlineTypeContext { + return this.getRuleContext(0, TrendlineTypeContext)!; } + public LT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; + } + public COMMA(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.COMMA, 0)!; + } + public RT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; + } + public integerLiteral(): IntegerLiteralContext { + return this.getRuleContext(0, IntegerLiteralContext)!; + } + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext)!; + } + public AS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.AS, 0); + } + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_trendlineClause; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitTrendlineClause) { + return visitor.visitTrendlineClause(this); + } else { + return visitor.visitChildren(this); + } + } +} - private static readonly decisionsToDFA = OpenSearchPPLParser._ATN.decisionToState.map( (ds: antlr.DecisionState, index: number) => new antlr.DFA(ds, index) ); + +export class TrendlineTypeContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SMA(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SMA, 0); + } + public WMA(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.WMA, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_trendlineType; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitTrendlineType) { + return visitor.visitTrendlineType(this); + } else { + return visitor.visitChildren(this); + } + } } -export class RootContext extends antlr.ParserRuleContext { + +export class ExpandCommandContext extends antlr.ParserRuleContext { + public _alias?: QualifiedNameContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public EOF(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.EOF, 0)!; + public EXPAND(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EXPAND, 0)!; } - public pplStatement(): PplStatementContext | null { - return this.getRuleContext(0, PplStatementContext); + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext)!; + } + public AS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.AS, 0); + } + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_root; + return OpenSearchPPLParser.RULE_expandCommand; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitRoot) { - return visitor.visitRoot(this); + if (visitor.visitExpandCommand) { + return visitor.visitExpandCommand(this); } else { return visitor.visitChildren(this); } @@ -8396,19 +20543,29 @@ export class RootContext extends antlr.ParserRuleContext { } -export class PplStatementContext extends antlr.ParserRuleContext { +export class FlattenCommandContext extends antlr.ParserRuleContext { + public _aliases?: IdentifierSeqContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public dmlStatement(): DmlStatementContext { - return this.getRuleContext(0, DmlStatementContext)!; + public FLATTEN(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.FLATTEN, 0)!; + } + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext)!; + } + public AS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.AS, 0); + } + public identifierSeq(): IdentifierSeqContext | null { + return this.getRuleContext(0, IdentifierSeqContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_pplStatement; + return OpenSearchPPLParser.RULE_flattenCommand; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitPplStatement) { - return visitor.visitPplStatement(this); + if (visitor.visitFlattenCommand) { + return visitor.visitFlattenCommand(this); } else { return visitor.visitChildren(this); } @@ -8416,19 +20573,53 @@ export class PplStatementContext extends antlr.ParserRuleContext { } -export class DmlStatementContext extends antlr.ParserRuleContext { +export class AppendcolCommandContext extends antlr.ParserRuleContext { + public _override?: BooleanLiteralContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public queryStatement(): QueryStatementContext { - return this.getRuleContext(0, QueryStatementContext)!; + public APPENDCOL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.APPENDCOL, 0)!; + } + public LT_SQR_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_SQR_PRTHS, 0)!; + } + public commands(): CommandsContext[]; + public commands(i: number): CommandsContext | null; + public commands(i?: number): CommandsContext[] | CommandsContext | null { + if (i === undefined) { + return this.getRuleContexts(CommandsContext); + } + + return this.getRuleContext(i, CommandsContext); + } + public RT_SQR_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_SQR_PRTHS, 0)!; + } + public OVERRIDE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.OVERRIDE, 0); + } + public EQUAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EQUAL, 0); + } + public PIPE(): antlr.TerminalNode[]; + public PIPE(i: number): antlr.TerminalNode | null; + public PIPE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.PIPE); + } else { + return this.getToken(OpenSearchPPLParser.PIPE, i); + } + } + public booleanLiteral(): BooleanLiteralContext | null { + return this.getRuleContext(0, BooleanLiteralContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_dmlStatement; + return OpenSearchPPLParser.RULE_appendcolCommand; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitDmlStatement) { - return visitor.visitDmlStatement(this); + if (visitor.visitAppendcolCommand) { + return visitor.visitAppendcolCommand(this); } else { return visitor.visitChildren(this); } @@ -8436,12 +20627,21 @@ export class DmlStatementContext extends antlr.ParserRuleContext { } -export class QueryStatementContext extends antlr.ParserRuleContext { +export class AppendCommandContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public pplCommands(): PplCommandsContext { - return this.getRuleContext(0, PplCommandsContext)!; + public APPEND(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.APPEND, 0)!; + } + public LT_SQR_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_SQR_PRTHS, 0)!; + } + public RT_SQR_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_SQR_PRTHS, 0)!; + } + public searchCommand(): SearchCommandContext | null { + return this.getRuleContext(0, SearchCommandContext); } public PIPE(): antlr.TerminalNode[]; public PIPE(i: number): antlr.TerminalNode | null; @@ -8462,11 +20662,11 @@ export class QueryStatementContext extends antlr.ParserRuleContext { return this.getRuleContext(i, CommandsContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_queryStatement; + return OpenSearchPPLParser.RULE_appendCommand; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitQueryStatement) { - return visitor.visitQueryStatement(this); + if (visitor.visitAppendCommand) { + return visitor.visitAppendCommand(this); } else { return visitor.visitChildren(this); } @@ -8474,25 +20674,28 @@ export class QueryStatementContext extends antlr.ParserRuleContext { } -export class PplCommandsContext extends antlr.ParserRuleContext { +export class KmeansCommandContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public searchCommand(): SearchCommandContext | null { - return this.getRuleContext(0, SearchCommandContext); - } - public describeCommand(): DescribeCommandContext | null { - return this.getRuleContext(0, DescribeCommandContext); + public KMEANS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.KMEANS, 0)!; } - public showDataSourcesCommand(): ShowDataSourcesCommandContext | null { - return this.getRuleContext(0, ShowDataSourcesCommandContext); + public kmeansParameter(): KmeansParameterContext[]; + public kmeansParameter(i: number): KmeansParameterContext | null; + public kmeansParameter(i?: number): KmeansParameterContext[] | KmeansParameterContext | null { + if (i === undefined) { + return this.getRuleContexts(KmeansParameterContext); + } + + return this.getRuleContext(i, KmeansParameterContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_pplCommands; + return OpenSearchPPLParser.RULE_kmeansCommand; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitPplCommands) { - return visitor.visitPplCommands(this); + if (visitor.visitKmeansCommand) { + return visitor.visitKmeansCommand(this); } else { return visitor.visitChildren(this); } @@ -8500,64 +20703,37 @@ export class PplCommandsContext extends antlr.ParserRuleContext { } -export class CommandsContext extends antlr.ParserRuleContext { +export class KmeansParameterContext extends antlr.ParserRuleContext { + public _centroids?: IntegerLiteralContext; + public _iterations?: IntegerLiteralContext; + public _distance_type?: StringLiteralContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public whereCommand(): WhereCommandContext | null { - return this.getRuleContext(0, WhereCommandContext); - } - public fieldsCommand(): FieldsCommandContext | null { - return this.getRuleContext(0, FieldsCommandContext); - } - public renameCommand(): RenameCommandContext | null { - return this.getRuleContext(0, RenameCommandContext); - } - public statsCommand(): StatsCommandContext | null { - return this.getRuleContext(0, StatsCommandContext); - } - public dedupCommand(): DedupCommandContext | null { - return this.getRuleContext(0, DedupCommandContext); - } - public sortCommand(): SortCommandContext | null { - return this.getRuleContext(0, SortCommandContext); - } - public evalCommand(): EvalCommandContext | null { - return this.getRuleContext(0, EvalCommandContext); - } - public headCommand(): HeadCommandContext | null { - return this.getRuleContext(0, HeadCommandContext); - } - public topCommand(): TopCommandContext | null { - return this.getRuleContext(0, TopCommandContext); - } - public rareCommand(): RareCommandContext | null { - return this.getRuleContext(0, RareCommandContext); - } - public grokCommand(): GrokCommandContext | null { - return this.getRuleContext(0, GrokCommandContext); + public CENTROIDS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.CENTROIDS, 0); } - public parseCommand(): ParseCommandContext | null { - return this.getRuleContext(0, ParseCommandContext); + public EQUAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EQUAL, 0); } - public patternsCommand(): PatternsCommandContext | null { - return this.getRuleContext(0, PatternsCommandContext); + public integerLiteral(): IntegerLiteralContext | null { + return this.getRuleContext(0, IntegerLiteralContext); } - public kmeansCommand(): KmeansCommandContext | null { - return this.getRuleContext(0, KmeansCommandContext); + public ITERATIONS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ITERATIONS, 0); } - public adCommand(): AdCommandContext | null { - return this.getRuleContext(0, AdCommandContext); + public DISTANCE_TYPE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DISTANCE_TYPE, 0); } - public mlCommand(): MlCommandContext | null { - return this.getRuleContext(0, MlCommandContext); + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_commands; + return OpenSearchPPLParser.RULE_kmeansParameter; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitCommands) { - return visitor.visitCommands(this); + if (visitor.visitKmeansParameter) { + return visitor.visitKmeansParameter(this); } else { return visitor.visitChildren(this); } @@ -8565,133 +20741,105 @@ export class CommandsContext extends antlr.ParserRuleContext { } -export class SearchCommandContext extends antlr.ParserRuleContext { +export class AdCommandContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_searchCommand; - } - public override copyFrom(ctx: SearchCommandContext): void { - super.copyFrom(ctx); - } -} -export class SearchFromFilterContext extends SearchCommandContext { - public constructor(ctx: SearchCommandContext) { - super(ctx.parent, ctx.invokingState); - super.copyFrom(ctx); - } - public fromClause(): FromClauseContext { - return this.getRuleContext(0, FromClauseContext)!; + public AD(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.AD, 0)!; } - public logicalExpression(): LogicalExpressionContext { - return this.getRuleContext(0, LogicalExpressionContext)!; + public adParameter(): AdParameterContext[]; + public adParameter(i: number): AdParameterContext | null; + public adParameter(i?: number): AdParameterContext[] | AdParameterContext | null { + if (i === undefined) { + return this.getRuleContexts(AdParameterContext); + } + + return this.getRuleContext(i, AdParameterContext); } - public SEARCH(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SEARCH, 0); + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_adCommand; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitSearchFromFilter) { - return visitor.visitSearchFromFilter(this); + if (visitor.visitAdCommand) { + return visitor.visitAdCommand(this); } else { return visitor.visitChildren(this); } } } -export class SearchFromContext extends SearchCommandContext { - public constructor(ctx: SearchCommandContext) { - super(ctx.parent, ctx.invokingState); - super.copyFrom(ctx); - } - public fromClause(): FromClauseContext { - return this.getRuleContext(0, FromClauseContext)!; - } - public SEARCH(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SEARCH, 0); + + +export class AdParameterContext extends antlr.ParserRuleContext { + public _number_of_trees?: IntegerLiteralContext; + public _shingle_size?: IntegerLiteralContext; + public _sample_size?: IntegerLiteralContext; + public _output_after?: IntegerLiteralContext; + public _time_decay?: DecimalLiteralContext; + public _anomaly_rate?: DecimalLiteralContext; + public _category_field?: StringLiteralContext; + public _time_field?: StringLiteralContext; + public _date_format?: StringLiteralContext; + public _time_zone?: StringLiteralContext; + public _training_data_size?: IntegerLiteralContext; + public _anomaly_score_threshold?: DecimalLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); } - public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitSearchFrom) { - return visitor.visitSearchFrom(this); - } else { - return visitor.visitChildren(this); - } + public NUMBER_OF_TREES(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.NUMBER_OF_TREES, 0); } -} -export class SearchFilterFromContext extends SearchCommandContext { - public constructor(ctx: SearchCommandContext) { - super(ctx.parent, ctx.invokingState); - super.copyFrom(ctx); + public EQUAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EQUAL, 0); } - public logicalExpression(): LogicalExpressionContext { - return this.getRuleContext(0, LogicalExpressionContext)!; + public integerLiteral(): IntegerLiteralContext | null { + return this.getRuleContext(0, IntegerLiteralContext); } - public fromClause(): FromClauseContext { - return this.getRuleContext(0, FromClauseContext)!; + public SHINGLE_SIZE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SHINGLE_SIZE, 0); } - public SEARCH(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SEARCH, 0); + public SAMPLE_SIZE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SAMPLE_SIZE, 0); } - public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitSearchFilterFrom) { - return visitor.visitSearchFilterFrom(this); - } else { - return visitor.visitChildren(this); - } + public OUTPUT_AFTER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.OUTPUT_AFTER, 0); } -} -export class SearchFilterOnlyContext extends SearchCommandContext { - public constructor(ctx: SearchCommandContext) { - super(ctx.parent, ctx.invokingState); - super.copyFrom(ctx); + public TIME_DECAY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.TIME_DECAY, 0); } - public logicalExpression(): LogicalExpressionContext { - return this.getRuleContext(0, LogicalExpressionContext)!; + public decimalLiteral(): DecimalLiteralContext | null { + return this.getRuleContext(0, DecimalLiteralContext); } - public SEARCH(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SEARCH, 0); + public ANOMALY_RATE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ANOMALY_RATE, 0); } - public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitSearchFilterOnly) { - return visitor.visitSearchFilterOnly(this); - } else { - return visitor.visitChildren(this); - } + public CATEGORY_FIELD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.CATEGORY_FIELD, 0); } -} -export class SearchEmptyContext extends SearchCommandContext { - public constructor(ctx: SearchCommandContext) { - super(ctx.parent, ctx.invokingState); - super.copyFrom(ctx); + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); } - public SEARCH(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SEARCH, 0); + public TIME_FIELD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.TIME_FIELD, 0); } - public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitSearchEmpty) { - return visitor.visitSearchEmpty(this); - } else { - return visitor.visitChildren(this); - } + public DATE_FORMAT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DATE_FORMAT, 0); } -} - - -export class DescribeCommandContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); + public TIME_ZONE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.TIME_ZONE, 0); } - public DESCRIBE(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.DESCRIBE, 0)!; + public TRAINING_DATA_SIZE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.TRAINING_DATA_SIZE, 0); } - public tableSourceClause(): TableSourceClauseContext { - return this.getRuleContext(0, TableSourceClauseContext)!; + public ANOMALY_SCORE_THRESHOLD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD, 0); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_describeCommand; + return OpenSearchPPLParser.RULE_adParameter; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitDescribeCommand) { - return visitor.visitDescribeCommand(this); + if (visitor.visitAdParameter) { + return visitor.visitAdParameter(this); } else { return visitor.visitChildren(this); } @@ -8699,22 +20847,28 @@ export class DescribeCommandContext extends antlr.ParserRuleContext { } -export class ShowDataSourcesCommandContext extends antlr.ParserRuleContext { +export class MlCommandContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public SHOW(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.SHOW, 0)!; + public ML(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.ML, 0)!; } - public DATASOURCES(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.DATASOURCES, 0)!; + public mlArg(): MlArgContext[]; + public mlArg(i: number): MlArgContext | null; + public mlArg(i?: number): MlArgContext[] | MlArgContext | null { + if (i === undefined) { + return this.getRuleContexts(MlArgContext); + } + + return this.getRuleContext(i, MlArgContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_showDataSourcesCommand; + return OpenSearchPPLParser.RULE_mlCommand; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitShowDataSourcesCommand) { - return visitor.visitShowDataSourcesCommand(this); + if (visitor.visitMlCommand) { + return visitor.visitMlCommand(this); } else { return visitor.visitChildren(this); } @@ -8722,22 +20876,27 @@ export class ShowDataSourcesCommandContext extends antlr.ParserRuleContext { } -export class WhereCommandContext extends antlr.ParserRuleContext { +export class MlArgContext extends antlr.ParserRuleContext { + public _argName?: IdentContext; + public _argValue?: LiteralValueContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public WHERE(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.WHERE, 0)!; + public EQUAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EQUAL, 0); } - public logicalExpression(): LogicalExpressionContext { - return this.getRuleContext(0, LogicalExpressionContext)!; + public ident(): IdentContext | null { + return this.getRuleContext(0, IdentContext); + } + public literalValue(): LiteralValueContext | null { + return this.getRuleContext(0, LiteralValueContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_whereCommand; + return OpenSearchPPLParser.RULE_mlArg; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitWhereCommand) { - return visitor.visitWhereCommand(this); + if (visitor.visitMlArg) { + return visitor.visitMlArg(this); } else { return visitor.visitChildren(this); } @@ -8745,28 +20904,34 @@ export class WhereCommandContext extends antlr.ParserRuleContext { } -export class FieldsCommandContext extends antlr.ParserRuleContext { +export class FromClauseContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public FIELDS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.FIELDS, 0)!; + public SOURCE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SOURCE, 0); } - public fieldList(): FieldListContext { - return this.getRuleContext(0, FieldListContext)!; + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; } - public PLUS(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.PLUS, 0); + public tableOrSubqueryClause(): TableOrSubqueryClauseContext | null { + return this.getRuleContext(0, TableOrSubqueryClauseContext); } - public MINUS(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.MINUS, 0); + public INDEX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.INDEX, 0); + } + public tableFunction(): TableFunctionContext | null { + return this.getRuleContext(0, TableFunctionContext); + } + public dynamicSourceClause(): DynamicSourceClauseContext | null { + return this.getRuleContext(0, DynamicSourceClauseContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_fieldsCommand; + return OpenSearchPPLParser.RULE_fromClause; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitFieldsCommand) { - return visitor.visitFieldsCommand(this); + if (visitor.visitFromClause) { + return visitor.visitFromClause(this); } else { return visitor.visitChildren(this); } @@ -8774,37 +20939,35 @@ export class FieldsCommandContext extends antlr.ParserRuleContext { } -export class RenameCommandContext extends antlr.ParserRuleContext { +export class TableOrSubqueryClauseContext extends antlr.ParserRuleContext { + public _alias?: QualifiedNameContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public RENAME(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.RENAME, 0)!; + public LT_SQR_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LT_SQR_PRTHS, 0); } - public renameClasue(): RenameClasueContext[]; - public renameClasue(i: number): RenameClasueContext | null; - public renameClasue(i?: number): RenameClasueContext[] | RenameClasueContext | null { - if (i === undefined) { - return this.getRuleContexts(RenameClasueContext); - } - - return this.getRuleContext(i, RenameClasueContext); + public subSearch(): SubSearchContext | null { + return this.getRuleContext(0, SubSearchContext); } - public COMMA(): antlr.TerminalNode[]; - public COMMA(i: number): antlr.TerminalNode | null; - public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(OpenSearchPPLParser.COMMA); - } else { - return this.getToken(OpenSearchPPLParser.COMMA, i); - } + public RT_SQR_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RT_SQR_PRTHS, 0); + } + public AS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.AS, 0); + } + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); + } + public tableSourceClause(): TableSourceClauseContext | null { + return this.getRuleContext(0, TableSourceClauseContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_renameCommand; + return OpenSearchPPLParser.RULE_tableOrSubqueryClause; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitRenameCommand) { - return visitor.visitRenameCommand(this); + if (visitor.visitTableOrSubqueryClause) { + return visitor.visitTableOrSubqueryClause(this); } else { return visitor.visitChildren(this); } @@ -8812,43 +20975,19 @@ export class RenameCommandContext extends antlr.ParserRuleContext { } -export class StatsCommandContext extends antlr.ParserRuleContext { - public _partitions?: IntegerLiteralContext; - public _allnum?: BooleanLiteralContext; - public _delim?: StringLiteralContext; - public _dedupsplit?: BooleanLiteralContext; +export class TableSourceClauseContext extends antlr.ParserRuleContext { + public _alias?: QualifiedNameContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public STATS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.STATS, 0)!; - } - public statsAggTerm(): StatsAggTermContext[]; - public statsAggTerm(i: number): StatsAggTermContext | null; - public statsAggTerm(i?: number): StatsAggTermContext[] | StatsAggTermContext | null { + public tableSource(): TableSourceContext[]; + public tableSource(i: number): TableSourceContext | null; + public tableSource(i?: number): TableSourceContext[] | TableSourceContext | null { if (i === undefined) { - return this.getRuleContexts(StatsAggTermContext); + return this.getRuleContexts(TableSourceContext); } - return this.getRuleContext(i, StatsAggTermContext); - } - public PARTITIONS(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.PARTITIONS, 0); - } - public EQUAL(): antlr.TerminalNode[]; - public EQUAL(i: number): antlr.TerminalNode | null; - public EQUAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(OpenSearchPPLParser.EQUAL); - } else { - return this.getToken(OpenSearchPPLParser.EQUAL, i); - } - } - public ALLNUM(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.ALLNUM, 0); - } - public DELIM(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.DELIM, 0); + return this.getRuleContext(i, TableSourceContext); } public COMMA(): antlr.TerminalNode[]; public COMMA(i: number): antlr.TerminalNode | null; @@ -8859,33 +20998,18 @@ export class StatsCommandContext extends antlr.ParserRuleContext { return this.getToken(OpenSearchPPLParser.COMMA, i); } } - public statsByClause(): StatsByClauseContext | null { - return this.getRuleContext(0, StatsByClauseContext); - } - public DEDUP_SPLITVALUES(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.DEDUP_SPLITVALUES, 0); - } - public integerLiteral(): IntegerLiteralContext | null { - return this.getRuleContext(0, IntegerLiteralContext); - } - public booleanLiteral(): BooleanLiteralContext[]; - public booleanLiteral(i: number): BooleanLiteralContext | null; - public booleanLiteral(i?: number): BooleanLiteralContext[] | BooleanLiteralContext | null { - if (i === undefined) { - return this.getRuleContexts(BooleanLiteralContext); - } - - return this.getRuleContext(i, BooleanLiteralContext); + public AS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.AS, 0); } - public stringLiteral(): StringLiteralContext | null { - return this.getRuleContext(0, StringLiteralContext); + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_statsCommand; + return OpenSearchPPLParser.RULE_tableSourceClause; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitStatsCommand) { - return visitor.visitStatsCommand(this); + if (visitor.visitTableSourceClause) { + return visitor.visitTableSourceClause(this); } else { return visitor.visitChildren(this); } @@ -8893,52 +21017,31 @@ export class StatsCommandContext extends antlr.ParserRuleContext { } -export class DedupCommandContext extends antlr.ParserRuleContext { - public _number_?: IntegerLiteralContext; - public _keepempty?: BooleanLiteralContext; - public _consecutive?: BooleanLiteralContext; +export class DynamicSourceClauseContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public DEDUP(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.DEDUP, 0)!; - } - public fieldList(): FieldListContext { - return this.getRuleContext(0, FieldListContext)!; - } - public KEEPEMPTY(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.KEEPEMPTY, 0); + public LT_SQR_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_SQR_PRTHS, 0)!; } - public EQUAL(): antlr.TerminalNode[]; - public EQUAL(i: number): antlr.TerminalNode | null; - public EQUAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(OpenSearchPPLParser.EQUAL); - } else { - return this.getToken(OpenSearchPPLParser.EQUAL, i); - } + public sourceReferences(): SourceReferencesContext { + return this.getRuleContext(0, SourceReferencesContext)!; } - public CONSECUTIVE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.CONSECUTIVE, 0); + public RT_SQR_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_SQR_PRTHS, 0)!; } - public integerLiteral(): IntegerLiteralContext | null { - return this.getRuleContext(0, IntegerLiteralContext); + public COMMA(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.COMMA, 0); } - public booleanLiteral(): BooleanLiteralContext[]; - public booleanLiteral(i: number): BooleanLiteralContext | null; - public booleanLiteral(i?: number): BooleanLiteralContext[] | BooleanLiteralContext | null { - if (i === undefined) { - return this.getRuleContexts(BooleanLiteralContext); - } - - return this.getRuleContext(i, BooleanLiteralContext); + public sourceFilterArgs(): SourceFilterArgsContext | null { + return this.getRuleContext(0, SourceFilterArgsContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_dedupCommand; + return OpenSearchPPLParser.RULE_dynamicSourceClause; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitDedupCommand) { - return visitor.visitDedupCommand(this); + if (visitor.visitDynamicSourceClause) { + return visitor.visitDynamicSourceClause(this); } else { return visitor.visitChildren(this); } @@ -8946,22 +21049,34 @@ export class DedupCommandContext extends antlr.ParserRuleContext { } -export class SortCommandContext extends antlr.ParserRuleContext { +export class SourceReferencesContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public SORT(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.SORT, 0)!; + public sourceReference(): SourceReferenceContext[]; + public sourceReference(i: number): SourceReferenceContext | null; + public sourceReference(i?: number): SourceReferenceContext[] | SourceReferenceContext | null { + if (i === undefined) { + return this.getRuleContexts(SourceReferenceContext); + } + + return this.getRuleContext(i, SourceReferenceContext); } - public sortbyClause(): SortbyClauseContext { - return this.getRuleContext(0, SortbyClauseContext)!; + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_sortCommand; + return OpenSearchPPLParser.RULE_sourceReferences; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitSortCommand) { - return visitor.visitSortCommand(this); + if (visitor.visitSourceReferences) { + return visitor.visitSourceReferences(this); } else { return visitor.visitChildren(this); } @@ -8969,37 +21084,22 @@ export class SortCommandContext extends antlr.ParserRuleContext { } -export class EvalCommandContext extends antlr.ParserRuleContext { +export class SourceReferenceContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public EVAL(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.EVAL, 0)!; - } - public evalClause(): EvalClauseContext[]; - public evalClause(i: number): EvalClauseContext | null; - public evalClause(i?: number): EvalClauseContext[] | EvalClauseContext | null { - if (i === undefined) { - return this.getRuleContexts(EvalClauseContext); - } - - return this.getRuleContext(i, EvalClauseContext); + public wcQualifiedName(): WcQualifiedNameContext { + return this.getRuleContext(0, WcQualifiedNameContext)!; } - public COMMA(): antlr.TerminalNode[]; - public COMMA(i: number): antlr.TerminalNode | null; - public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(OpenSearchPPLParser.COMMA); - } else { - return this.getToken(OpenSearchPPLParser.COMMA, i); - } + public CLUSTER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.CLUSTER, 0); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_evalCommand; + return OpenSearchPPLParser.RULE_sourceReference; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitEvalCommand) { - return visitor.visitEvalCommand(this); + if (visitor.visitSourceReference) { + return visitor.visitSourceReference(this); } else { return visitor.visitChildren(this); } @@ -9007,33 +21107,34 @@ export class EvalCommandContext extends antlr.ParserRuleContext { } -export class HeadCommandContext extends antlr.ParserRuleContext { - public _number_?: IntegerLiteralContext; - public _from_?: IntegerLiteralContext; +export class SourceFilterArgsContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public HEAD(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.HEAD, 0)!; - } - public FROM(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.FROM, 0); - } - public integerLiteral(): IntegerLiteralContext[]; - public integerLiteral(i: number): IntegerLiteralContext | null; - public integerLiteral(i?: number): IntegerLiteralContext[] | IntegerLiteralContext | null { + public sourceFilterArg(): SourceFilterArgContext[]; + public sourceFilterArg(i: number): SourceFilterArgContext | null; + public sourceFilterArg(i?: number): SourceFilterArgContext[] | SourceFilterArgContext | null { if (i === undefined) { - return this.getRuleContexts(IntegerLiteralContext); + return this.getRuleContexts(SourceFilterArgContext); } - return this.getRuleContext(i, IntegerLiteralContext); + return this.getRuleContext(i, SourceFilterArgContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_headCommand; + return OpenSearchPPLParser.RULE_sourceFilterArgs; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitHeadCommand) { - return visitor.visitHeadCommand(this); + if (visitor.visitSourceFilterArgs) { + return visitor.visitSourceFilterArgs(this); } else { return visitor.visitChildren(this); } @@ -9041,29 +21142,31 @@ export class HeadCommandContext extends antlr.ParserRuleContext { } -export class TopCommandContext extends antlr.ParserRuleContext { - public _number_?: IntegerLiteralContext; +export class SourceFilterArgContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public TOP(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.TOP, 0)!; + public ident(): IdentContext { + return this.getRuleContext(0, IdentContext)!; } - public fieldList(): FieldListContext { - return this.getRuleContext(0, FieldListContext)!; + public EQUAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EQUAL, 0); } - public byClause(): ByClauseContext | null { - return this.getRuleContext(0, ByClauseContext); + public literalValue(): LiteralValueContext | null { + return this.getRuleContext(0, LiteralValueContext); } - public integerLiteral(): IntegerLiteralContext | null { - return this.getRuleContext(0, IntegerLiteralContext); + public IN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.IN, 0); + } + public valueList(): ValueListContext | null { + return this.getRuleContext(0, ValueListContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_topCommand; + return OpenSearchPPLParser.RULE_sourceFilterArg; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitTopCommand) { - return visitor.visitTopCommand(this); + if (visitor.visitSourceFilterArg) { + return visitor.visitSourceFilterArg(this); } else { return visitor.visitChildren(this); } @@ -9071,53 +21174,47 @@ export class TopCommandContext extends antlr.ParserRuleContext { } -export class RareCommandContext extends antlr.ParserRuleContext { +export class JoinCommandContext extends antlr.ParserRuleContext { + public _right?: TableOrSubqueryClauseContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public RARE(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.RARE, 0)!; - } - public fieldList(): FieldListContext { - return this.getRuleContext(0, FieldListContext)!; - } - public byClause(): ByClauseContext | null { - return this.getRuleContext(0, ByClauseContext); + public JOIN(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.JOIN, 0)!; } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_rareCommand; + public tableOrSubqueryClause(): TableOrSubqueryClauseContext { + return this.getRuleContext(0, TableOrSubqueryClauseContext)!; } - public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitRareCommand) { - return visitor.visitRareCommand(this); - } else { - return visitor.visitChildren(this); + public joinOption(): JoinOptionContext[]; + public joinOption(i: number): JoinOptionContext | null; + public joinOption(i?: number): JoinOptionContext[] | JoinOptionContext | null { + if (i === undefined) { + return this.getRuleContexts(JoinOptionContext); } - } -} - -export class GrokCommandContext extends antlr.ParserRuleContext { - public _source_field?: ExpressionContext; - public _pattern?: StringLiteralContext; - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); + return this.getRuleContext(i, JoinOptionContext); } - public GROK(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.GROK, 0)!; + public fieldList(): FieldListContext | null { + return this.getRuleContext(0, FieldListContext); } - public expression(): ExpressionContext | null { - return this.getRuleContext(0, ExpressionContext); + public sideAlias(): SideAliasContext | null { + return this.getRuleContext(0, SideAliasContext); } - public stringLiteral(): StringLiteralContext | null { - return this.getRuleContext(0, StringLiteralContext); + public joinCriteria(): JoinCriteriaContext | null { + return this.getRuleContext(0, JoinCriteriaContext); + } + public sqlLikeJoinType(): SqlLikeJoinTypeContext | null { + return this.getRuleContext(0, SqlLikeJoinTypeContext); + } + public joinHintList(): JoinHintListContext | null { + return this.getRuleContext(0, JoinHintListContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_grokCommand; + return OpenSearchPPLParser.RULE_joinCommand; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitGrokCommand) { - return visitor.visitGrokCommand(this); + if (visitor.visitJoinCommand) { + return visitor.visitJoinCommand(this); } else { return visitor.visitChildren(this); } @@ -9125,27 +21222,40 @@ export class GrokCommandContext extends antlr.ParserRuleContext { } -export class ParseCommandContext extends antlr.ParserRuleContext { - public _source_field?: ExpressionContext; - public _pattern?: StringLiteralContext; +export class SqlLikeJoinTypeContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public PARSE(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.PARSE, 0)!; + public INNER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.INNER, 0); } - public expression(): ExpressionContext | null { - return this.getRuleContext(0, ExpressionContext); + public CROSS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.CROSS, 0); } - public stringLiteral(): StringLiteralContext | null { - return this.getRuleContext(0, StringLiteralContext); + public LEFT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LEFT, 0); + } + public OUTER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.OUTER, 0); + } + public RIGHT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RIGHT, 0); + } + public FULL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FULL, 0); + } + public SEMI(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SEMI, 0); + } + public ANTI(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ANTI, 0); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_parseCommand; + return OpenSearchPPLParser.RULE_sqlLikeJoinType; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitParseCommand) { - return visitor.visitParseCommand(this); + if (visitor.visitSqlLikeJoinType) { + return visitor.visitSqlLikeJoinType(this); } else { return visitor.visitChildren(this); } @@ -9153,32 +21263,40 @@ export class ParseCommandContext extends antlr.ParserRuleContext { } -export class PatternsCommandContext extends antlr.ParserRuleContext { - public _source_field?: ExpressionContext; +export class JoinTypeContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public PATTERNS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.PATTERNS, 0)!; + public INNER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.INNER, 0); } - public patternsParameter(): PatternsParameterContext[]; - public patternsParameter(i: number): PatternsParameterContext | null; - public patternsParameter(i?: number): PatternsParameterContext[] | PatternsParameterContext | null { - if (i === undefined) { - return this.getRuleContexts(PatternsParameterContext); - } - - return this.getRuleContext(i, PatternsParameterContext); + public CROSS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.CROSS, 0); } - public expression(): ExpressionContext | null { - return this.getRuleContext(0, ExpressionContext); + public OUTER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.OUTER, 0); + } + public LEFT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LEFT, 0); + } + public RIGHT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RIGHT, 0); + } + public FULL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FULL, 0); + } + public SEMI(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SEMI, 0); + } + public ANTI(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ANTI, 0); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_patternsCommand; + return OpenSearchPPLParser.RULE_joinType; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitPatternsCommand) { - return visitor.visitPatternsCommand(this); + if (visitor.visitJoinType) { + return visitor.visitJoinType(this); } else { return visitor.visitChildren(this); } @@ -9186,30 +21304,45 @@ export class PatternsCommandContext extends antlr.ParserRuleContext { } -export class PatternsParameterContext extends antlr.ParserRuleContext { - public _new_field?: StringLiteralContext; - public _pattern?: StringLiteralContext; +export class SideAliasContext extends antlr.ParserRuleContext { + public _leftAlias?: QualifiedNameContext; + public _rightAlias?: QualifiedNameContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public NEW_FIELD(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.NEW_FIELD, 0); + public LEFT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LEFT, 0); } - public EQUAL(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.EQUAL, 0); + public EQUAL(): antlr.TerminalNode[]; + public EQUAL(i: number): antlr.TerminalNode | null; + public EQUAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.EQUAL); + } else { + return this.getToken(OpenSearchPPLParser.EQUAL, i); + } } - public stringLiteral(): StringLiteralContext | null { - return this.getRuleContext(0, StringLiteralContext); + public COMMA(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.COMMA, 0); } - public PATTERN(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.PATTERN, 0); + public RIGHT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RIGHT, 0); + } + public qualifiedName(): QualifiedNameContext[]; + public qualifiedName(i: number): QualifiedNameContext | null; + public qualifiedName(i?: number): QualifiedNameContext[] | QualifiedNameContext | null { + if (i === undefined) { + return this.getRuleContexts(QualifiedNameContext); + } + + return this.getRuleContext(i, QualifiedNameContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_patternsParameter; + return OpenSearchPPLParser.RULE_sideAlias; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitPatternsParameter) { - return visitor.visitPatternsParameter(this); + if (visitor.visitSideAlias) { + return visitor.visitSideAlias(this); } else { return visitor.visitChildren(this); } @@ -9217,22 +21350,25 @@ export class PatternsParameterContext extends antlr.ParserRuleContext { } -export class PatternsMethodContext extends antlr.ParserRuleContext { +export class JoinCriteriaContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public PUNCT(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.PUNCT, 0); + public logicalExpression(): LogicalExpressionContext { + return this.getRuleContext(0, LogicalExpressionContext)!; } - public REGEX(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.REGEX, 0); + public ON(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ON, 0); + } + public WHERE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.WHERE, 0); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_patternsMethod; + return OpenSearchPPLParser.RULE_joinCriteria; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitPatternsMethod) { - return visitor.visitPatternsMethod(this); + if (visitor.visitJoinCriteria) { + return visitor.visitJoinCriteria(this); } else { return visitor.visitChildren(this); } @@ -9240,28 +21376,34 @@ export class PatternsMethodContext extends antlr.ParserRuleContext { } -export class KmeansCommandContext extends antlr.ParserRuleContext { +export class JoinHintListContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public KMEANS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.KMEANS, 0)!; - } - public kmeansParameter(): KmeansParameterContext[]; - public kmeansParameter(i: number): KmeansParameterContext | null; - public kmeansParameter(i?: number): KmeansParameterContext[] | KmeansParameterContext | null { + public hintPair(): HintPairContext[]; + public hintPair(i: number): HintPairContext | null; + public hintPair(i?: number): HintPairContext[] | HintPairContext | null { if (i === undefined) { - return this.getRuleContexts(KmeansParameterContext); + return this.getRuleContexts(HintPairContext); } - return this.getRuleContext(i, KmeansParameterContext); + return this.getRuleContext(i, HintPairContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_kmeansCommand; + return OpenSearchPPLParser.RULE_joinHintList; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitKmeansCommand) { - return visitor.visitKmeansCommand(this); + if (visitor.visitJoinHintList) { + return visitor.visitJoinHintList(this); } else { return visitor.visitChildren(this); } @@ -9269,66 +21411,72 @@ export class KmeansCommandContext extends antlr.ParserRuleContext { } -export class KmeansParameterContext extends antlr.ParserRuleContext { - public _centroids?: IntegerLiteralContext; - public _iterations?: IntegerLiteralContext; - public _distance_type?: StringLiteralContext; +export class HintPairContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public CENTROIDS(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.CENTROIDS, 0); + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_hintPair; } - public EQUAL(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.EQUAL, 0); + public override copyFrom(ctx: HintPairContext): void { + super.copyFrom(ctx); } - public integerLiteral(): IntegerLiteralContext | null { - return this.getRuleContext(0, IntegerLiteralContext); +} +export class RightHintContext extends HintPairContext { + public _rightHintKey?: Token | null; + public _rightHintValue?: IdentContext; + public constructor(ctx: HintPairContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); } - public ITERATIONS(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.ITERATIONS, 0); + public DOT(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.DOT, 0)!; } - public DISTANCE_TYPE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.DISTANCE_TYPE, 0); + public ID(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.ID, 0)!; } - public stringLiteral(): StringLiteralContext | null { - return this.getRuleContext(0, StringLiteralContext); + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_kmeansParameter; + public RIGHT_HINT(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RIGHT_HINT, 0)!; + } + public ident(): IdentContext { + return this.getRuleContext(0, IdentContext)!; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitKmeansParameter) { - return visitor.visitKmeansParameter(this); + if (visitor.visitRightHint) { + return visitor.visitRightHint(this); } else { return visitor.visitChildren(this); } } } - - -export class AdCommandContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); +export class LeftHintContext extends HintPairContext { + public _leftHintKey?: Token | null; + public _leftHintValue?: IdentContext; + public constructor(ctx: HintPairContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); } - public AD(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.AD, 0)!; + public DOT(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.DOT, 0)!; } - public adParameter(): AdParameterContext[]; - public adParameter(i: number): AdParameterContext | null; - public adParameter(i?: number): AdParameterContext[] | AdParameterContext | null { - if (i === undefined) { - return this.getRuleContexts(AdParameterContext); - } - - return this.getRuleContext(i, AdParameterContext); + public ID(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.ID, 0)!; } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_adCommand; + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + } + public LEFT_HINT(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LEFT_HINT, 0)!; + } + public ident(): IdentContext { + return this.getRuleContext(0, IdentContext)!; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitAdCommand) { - return visitor.visitAdCommand(this); + if (visitor.visitLeftHint) { + return visitor.visitLeftHint(this); } else { return visitor.visitChildren(this); } @@ -9336,76 +21484,78 @@ export class AdCommandContext extends antlr.ParserRuleContext { } -export class AdParameterContext extends antlr.ParserRuleContext { - public _number_of_trees?: IntegerLiteralContext; - public _shingle_size?: IntegerLiteralContext; - public _sample_size?: IntegerLiteralContext; - public _output_after?: IntegerLiteralContext; - public _time_decay?: DecimalLiteralContext; - public _anomaly_rate?: DecimalLiteralContext; - public _category_field?: StringLiteralContext; - public _time_field?: StringLiteralContext; - public _date_format?: StringLiteralContext; - public _time_zone?: StringLiteralContext; - public _training_data_size?: IntegerLiteralContext; - public _anomaly_score_threshold?: DecimalLiteralContext; +export class JoinOptionContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public NUMBER_OF_TREES(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.NUMBER_OF_TREES, 0); - } - public EQUAL(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.EQUAL, 0); + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_joinOption; } - public integerLiteral(): IntegerLiteralContext | null { - return this.getRuleContext(0, IntegerLiteralContext); + public override copyFrom(ctx: JoinOptionContext): void { + super.copyFrom(ctx); } - public SHINGLE_SIZE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SHINGLE_SIZE, 0); +} +export class TypeOptionContext extends JoinOptionContext { + public constructor(ctx: JoinOptionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); } - public SAMPLE_SIZE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SAMPLE_SIZE, 0); + public TYPE(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.TYPE, 0)!; } - public OUTPUT_AFTER(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.OUTPUT_AFTER, 0); + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; } - public TIME_DECAY(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.TIME_DECAY, 0); + public joinType(): JoinTypeContext { + return this.getRuleContext(0, JoinTypeContext)!; } - public decimalLiteral(): DecimalLiteralContext | null { - return this.getRuleContext(0, DecimalLiteralContext); + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitTypeOption) { + return visitor.visitTypeOption(this); + } else { + return visitor.visitChildren(this); + } } - public ANOMALY_RATE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.ANOMALY_RATE, 0); +} +export class MaxOptionContext extends JoinOptionContext { + public constructor(ctx: JoinOptionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); } - public CATEGORY_FIELD(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.CATEGORY_FIELD, 0); + public MAX(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.MAX, 0)!; } - public stringLiteral(): StringLiteralContext | null { - return this.getRuleContext(0, StringLiteralContext); + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; } - public TIME_FIELD(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.TIME_FIELD, 0); + public integerLiteral(): IntegerLiteralContext { + return this.getRuleContext(0, IntegerLiteralContext)!; } - public DATE_FORMAT(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.DATE_FORMAT, 0); + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitMaxOption) { + return visitor.visitMaxOption(this); + } else { + return visitor.visitChildren(this); + } } - public TIME_ZONE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.TIME_ZONE, 0); +} +export class OverwriteOptionContext extends JoinOptionContext { + public constructor(ctx: JoinOptionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); } - public TRAINING_DATA_SIZE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.TRAINING_DATA_SIZE, 0); + public OVERWRITE(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.OVERWRITE, 0)!; } - public ANOMALY_SCORE_THRESHOLD(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD, 0); + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_adParameter; + public booleanLiteral(): BooleanLiteralContext { + return this.getRuleContext(0, BooleanLiteralContext)!; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitAdParameter) { - return visitor.visitAdParameter(this); + if (visitor.visitOverwriteOption) { + return visitor.visitOverwriteOption(this); } else { return visitor.visitChildren(this); } @@ -9413,28 +21563,30 @@ export class AdParameterContext extends antlr.ParserRuleContext { } -export class MlCommandContext extends antlr.ParserRuleContext { +export class RenameClasueContext extends antlr.ParserRuleContext { + public _orignalField?: RenameFieldExpressionContext; + public _renamedField?: RenameFieldExpressionContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public ML(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.ML, 0)!; + public AS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.AS, 0)!; } - public mlArg(): MlArgContext[]; - public mlArg(i: number): MlArgContext | null; - public mlArg(i?: number): MlArgContext[] | MlArgContext | null { + public renameFieldExpression(): RenameFieldExpressionContext[]; + public renameFieldExpression(i: number): RenameFieldExpressionContext | null; + public renameFieldExpression(i?: number): RenameFieldExpressionContext[] | RenameFieldExpressionContext | null { if (i === undefined) { - return this.getRuleContexts(MlArgContext); + return this.getRuleContexts(RenameFieldExpressionContext); } - return this.getRuleContext(i, MlArgContext); + return this.getRuleContext(i, RenameFieldExpressionContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_mlCommand; + return OpenSearchPPLParser.RULE_renameClasue; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitMlCommand) { - return visitor.visitMlCommand(this); + if (visitor.visitRenameClasue) { + return visitor.visitRenameClasue(this); } else { return visitor.visitChildren(this); } @@ -9442,27 +21594,22 @@ export class MlCommandContext extends antlr.ParserRuleContext { } -export class MlArgContext extends antlr.ParserRuleContext { - public _argName?: IdentContext; - public _argValue?: LiteralValueContext; +export class ByClauseContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public EQUAL(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.EQUAL, 0); - } - public ident(): IdentContext | null { - return this.getRuleContext(0, IdentContext); + public BY(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.BY, 0)!; } - public literalValue(): LiteralValueContext | null { - return this.getRuleContext(0, LiteralValueContext); + public fieldList(): FieldListContext { + return this.getRuleContext(0, FieldListContext)!; } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_mlArg; + return OpenSearchPPLParser.RULE_byClause; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitMlArg) { - return visitor.visitMlArg(this); + if (visitor.visitByClause) { + return visitor.visitByClause(this); } else { return visitor.visitChildren(this); } @@ -9470,31 +21617,28 @@ export class MlArgContext extends antlr.ParserRuleContext { } -export class FromClauseContext extends antlr.ParserRuleContext { +export class StatsByClauseContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public SOURCE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SOURCE, 0); - } - public EQUAL(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + public BY(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.BY, 0)!; } - public tableSourceClause(): TableSourceClauseContext | null { - return this.getRuleContext(0, TableSourceClauseContext); + public fieldList(): FieldListContext | null { + return this.getRuleContext(0, FieldListContext); } - public INDEX(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.INDEX, 0); + public bySpanClause(): BySpanClauseContext | null { + return this.getRuleContext(0, BySpanClauseContext); } - public tableFunction(): TableFunctionContext | null { - return this.getRuleContext(0, TableFunctionContext); + public COMMA(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.COMMA, 0); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_fromClause; + return OpenSearchPPLParser.RULE_statsByClause; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitFromClause) { - return visitor.visitFromClause(this); + if (visitor.visitStatsByClause) { + return visitor.visitStatsByClause(this); } else { return visitor.visitChildren(this); } @@ -9502,34 +21646,26 @@ export class FromClauseContext extends antlr.ParserRuleContext { } -export class TableSourceClauseContext extends antlr.ParserRuleContext { +export class BySpanClauseContext extends antlr.ParserRuleContext { + public _alias?: QualifiedNameContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public tableSource(): TableSourceContext[]; - public tableSource(i: number): TableSourceContext | null; - public tableSource(i?: number): TableSourceContext[] | TableSourceContext | null { - if (i === undefined) { - return this.getRuleContexts(TableSourceContext); - } - - return this.getRuleContext(i, TableSourceContext); + public spanClause(): SpanClauseContext { + return this.getRuleContext(0, SpanClauseContext)!; } - public COMMA(): antlr.TerminalNode[]; - public COMMA(i: number): antlr.TerminalNode | null; - public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(OpenSearchPPLParser.COMMA); - } else { - return this.getToken(OpenSearchPPLParser.COMMA, i); - } + public AS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.AS, 0); + } + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_tableSourceClause; + return OpenSearchPPLParser.RULE_bySpanClause; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitTableSourceClause) { - return visitor.visitTableSourceClause(this); + if (visitor.visitBySpanClause) { + return visitor.visitBySpanClause(this); } else { return visitor.visitChildren(this); } @@ -9537,30 +21673,39 @@ export class TableSourceClauseContext extends antlr.ParserRuleContext { } -export class RenameClasueContext extends antlr.ParserRuleContext { - public _orignalField?: WcFieldExpressionContext; - public _renamedField?: WcFieldExpressionContext; +export class SpanClauseContext extends antlr.ParserRuleContext { + public _value?: LiteralValueContext; + public _unit?: TimespanUnitContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public AS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.AS, 0)!; + public SPAN(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.SPAN, 0)!; } - public wcFieldExpression(): WcFieldExpressionContext[]; - public wcFieldExpression(i: number): WcFieldExpressionContext | null; - public wcFieldExpression(i?: number): WcFieldExpressionContext[] | WcFieldExpressionContext | null { - if (i === undefined) { - return this.getRuleContexts(WcFieldExpressionContext); - } - - return this.getRuleContext(i, WcFieldExpressionContext); + public LT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; + } + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext)!; + } + public COMMA(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.COMMA, 0)!; + } + public RT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; + } + public literalValue(): LiteralValueContext { + return this.getRuleContext(0, LiteralValueContext)!; + } + public timespanUnit(): TimespanUnitContext | null { + return this.getRuleContext(0, TimespanUnitContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_renameClasue; + return OpenSearchPPLParser.RULE_spanClause; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitRenameClasue) { - return visitor.visitRenameClasue(this); + if (visitor.visitSpanClause) { + return visitor.visitSpanClause(this); } else { return visitor.visitChildren(this); } @@ -9568,22 +21713,34 @@ export class RenameClasueContext extends antlr.ParserRuleContext { } -export class ByClauseContext extends antlr.ParserRuleContext { +export class SortbyClauseContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public BY(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.BY, 0)!; + public sortField(): SortFieldContext[]; + public sortField(i: number): SortFieldContext | null; + public sortField(i?: number): SortFieldContext[] | SortFieldContext | null { + if (i === undefined) { + return this.getRuleContexts(SortFieldContext); + } + + return this.getRuleContext(i, SortFieldContext); } - public fieldList(): FieldListContext { - return this.getRuleContext(0, FieldListContext)!; + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_byClause; + return OpenSearchPPLParser.RULE_sortbyClause; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitByClause) { - return visitor.visitByClause(this); + if (visitor.visitSortbyClause) { + return visitor.visitSortbyClause(this); } else { return visitor.visitChildren(this); } @@ -9591,28 +21748,25 @@ export class ByClauseContext extends antlr.ParserRuleContext { } -export class StatsByClauseContext extends antlr.ParserRuleContext { +export class EvalClauseContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public BY(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.BY, 0)!; - } - public fieldList(): FieldListContext | null { - return this.getRuleContext(0, FieldListContext); + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext)!; } - public bySpanClause(): BySpanClauseContext | null { - return this.getRuleContext(0, BySpanClauseContext); + public EQUAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; } - public COMMA(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.COMMA, 0); + public logicalExpression(): LogicalExpressionContext { + return this.getRuleContext(0, LogicalExpressionContext)!; } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_statsByClause; + return OpenSearchPPLParser.RULE_evalClause; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitStatsByClause) { - return visitor.visitStatsByClause(this); + if (visitor.visitEvalClause) { + return visitor.visitEvalClause(this); } else { return visitor.visitChildren(this); } @@ -9620,26 +21774,26 @@ export class StatsByClauseContext extends antlr.ParserRuleContext { } -export class BySpanClauseContext extends antlr.ParserRuleContext { - public _alias?: QualifiedNameContext; +export class EventstatsAggTermContext extends antlr.ParserRuleContext { + public _alias?: WcFieldExpressionContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public spanClause(): SpanClauseContext { - return this.getRuleContext(0, SpanClauseContext)!; + public windowFunction(): WindowFunctionContext { + return this.getRuleContext(0, WindowFunctionContext)!; } public AS(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.AS, 0); } - public qualifiedName(): QualifiedNameContext | null { - return this.getRuleContext(0, QualifiedNameContext); + public wcFieldExpression(): WcFieldExpressionContext | null { + return this.getRuleContext(0, WcFieldExpressionContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_bySpanClause; + return OpenSearchPPLParser.RULE_eventstatsAggTerm; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitBySpanClause) { - return visitor.visitBySpanClause(this); + if (visitor.visitEventstatsAggTerm) { + return visitor.visitEventstatsAggTerm(this); } else { return visitor.visitChildren(this); } @@ -9647,39 +21801,28 @@ export class BySpanClauseContext extends antlr.ParserRuleContext { } -export class SpanClauseContext extends antlr.ParserRuleContext { - public _value?: LiteralValueContext; - public _unit?: TimespanUnitContext; +export class WindowFunctionContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public SPAN(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.SPAN, 0)!; + public windowFunctionName(): WindowFunctionNameContext { + return this.getRuleContext(0, WindowFunctionNameContext)!; } public LT_PRTHS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; } - public fieldExpression(): FieldExpressionContext { - return this.getRuleContext(0, FieldExpressionContext)!; - } - public COMMA(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.COMMA, 0)!; + public functionArgs(): FunctionArgsContext { + return this.getRuleContext(0, FunctionArgsContext)!; } public RT_PRTHS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; } - public literalValue(): LiteralValueContext { - return this.getRuleContext(0, LiteralValueContext)!; - } - public timespanUnit(): TimespanUnitContext | null { - return this.getRuleContext(0, TimespanUnitContext); - } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_spanClause; + return OpenSearchPPLParser.RULE_windowFunction; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitSpanClause) { - return visitor.visitSpanClause(this); + if (visitor.visitWindowFunction) { + return visitor.visitWindowFunction(this); } else { return visitor.visitChildren(this); } @@ -9687,34 +21830,22 @@ export class SpanClauseContext extends antlr.ParserRuleContext { } -export class SortbyClauseContext extends antlr.ParserRuleContext { +export class WindowFunctionNameContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public sortField(): SortFieldContext[]; - public sortField(i: number): SortFieldContext | null; - public sortField(i?: number): SortFieldContext[] | SortFieldContext | null { - if (i === undefined) { - return this.getRuleContexts(SortFieldContext); - } - - return this.getRuleContext(i, SortFieldContext); + public statsFunctionName(): StatsFunctionNameContext | null { + return this.getRuleContext(0, StatsFunctionNameContext); } - public COMMA(): antlr.TerminalNode[]; - public COMMA(i: number): antlr.TerminalNode | null; - public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(OpenSearchPPLParser.COMMA); - } else { - return this.getToken(OpenSearchPPLParser.COMMA, i); - } + public scalarWindowFunctionName(): ScalarWindowFunctionNameContext | null { + return this.getRuleContext(0, ScalarWindowFunctionNameContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_sortbyClause; + return OpenSearchPPLParser.RULE_windowFunctionName; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitSortbyClause) { - return visitor.visitSortbyClause(this); + if (visitor.visitWindowFunctionName) { + return visitor.visitWindowFunctionName(this); } else { return visitor.visitChildren(this); } @@ -9722,25 +21853,49 @@ export class SortbyClauseContext extends antlr.ParserRuleContext { } -export class EvalClauseContext extends antlr.ParserRuleContext { +export class ScalarWindowFunctionNameContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public fieldExpression(): FieldExpressionContext { - return this.getRuleContext(0, FieldExpressionContext)!; + public ROW_NUMBER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ROW_NUMBER, 0); } - public EQUAL(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.EQUAL, 0)!; + public RANK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RANK, 0); } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext)!; + public DENSE_RANK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DENSE_RANK, 0); + } + public PERCENT_RANK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PERCENT_RANK, 0); + } + public CUME_DIST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.CUME_DIST, 0); + } + public FIRST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FIRST, 0); + } + public LAST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LAST, 0); + } + public NTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.NTH, 0); + } + public NTILE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.NTILE, 0); + } + public DISTINCT_COUNT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DISTINCT_COUNT, 0); + } + public DC(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DC, 0); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_evalClause; + return OpenSearchPPLParser.RULE_scalarWindowFunctionName; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitEvalClause) { - return visitor.visitEvalClause(this); + if (visitor.visitScalarWindowFunctionName) { + return visitor.visitScalarWindowFunctionName(this); } else { return visitor.visitChildren(this); } @@ -9806,6 +21961,9 @@ export class DistinctCountFunctionCallContext extends StatsFunctionContext { public DC(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.DC, 0); } + public DISTINCT_COUNT_APPROX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DISTINCT_COUNT_APPROX, 0); + } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { if (visitor.visitDistinctCountFunctionCall) { return visitor.visitDistinctCountFunctionCall(this); @@ -9814,6 +21972,47 @@ export class DistinctCountFunctionCallContext extends StatsFunctionContext { } } } +export class PercentileApproxFunctionCallContext extends StatsFunctionContext { + public constructor(ctx: StatsFunctionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public percentileApproxFunction(): PercentileApproxFunctionContext { + return this.getRuleContext(0, PercentileApproxFunctionContext)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitPercentileApproxFunctionCall) { + return visitor.visitPercentileApproxFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PercentileShortcutFunctionCallContext extends StatsFunctionContext { + public constructor(ctx: StatsFunctionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public PERCENTILE_SHORTCUT(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.PERCENTILE_SHORTCUT, 0)!; + } + public LT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public RT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitPercentileShortcutFunctionCall) { + return visitor.visitPercentileShortcutFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} export class StatsFunctionCallContext extends StatsFunctionContext { public constructor(ctx: StatsFunctionContext) { super(ctx.parent, ctx.invokingState); @@ -9825,8 +22024,8 @@ export class StatsFunctionCallContext extends StatsFunctionContext { public LT_PRTHS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; } - public valueExpression(): ValueExpressionContext { - return this.getRuleContext(0, ValueExpressionContext)!; + public functionArgs(): FunctionArgsContext { + return this.getRuleContext(0, FunctionArgsContext)!; } public RT_PRTHS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; @@ -9839,39 +22038,54 @@ export class StatsFunctionCallContext extends StatsFunctionContext { } } } -export class CountAllFunctionCallContext extends StatsFunctionContext { +export class CountEvalFunctionCallContext extends StatsFunctionContext { public constructor(ctx: StatsFunctionContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public COUNT(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.COUNT, 0)!; - } public LT_PRTHS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; } + public evalExpression(): EvalExpressionContext { + return this.getRuleContext(0, EvalExpressionContext)!; + } public RT_PRTHS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; } + public COUNT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.COUNT, 0); + } + public C(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.C, 0); + } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitCountAllFunctionCall) { - return visitor.visitCountAllFunctionCall(this); + if (visitor.visitCountEvalFunctionCall) { + return visitor.visitCountEvalFunctionCall(this); } else { return visitor.visitChildren(this); } } } -export class PercentileAggFunctionCallContext extends StatsFunctionContext { +export class CountAllFunctionCallContext extends StatsFunctionContext { public constructor(ctx: StatsFunctionContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public percentileAggFunction(): PercentileAggFunctionContext { - return this.getRuleContext(0, PercentileAggFunctionContext)!; + public COUNT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.COUNT, 0); + } + public C(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.C, 0); + } + public LT_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); + } + public RT_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitPercentileAggFunctionCall) { - return visitor.visitPercentileAggFunctionCall(this); + if (visitor.visitCountAllFunctionCall) { + return visitor.visitCountAllFunctionCall(this); } else { return visitor.visitChildren(this); } @@ -9926,6 +22140,30 @@ export class StatsFunctionNameContext extends antlr.ParserRuleContext { public STDDEV_POP(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.STDDEV_POP, 0); } + public PERCENTILE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PERCENTILE, 0); + } + public PERCENTILE_APPROX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PERCENTILE_APPROX, 0); + } + public MEDIAN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MEDIAN, 0); + } + public LIST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LIST, 0); + } + public FIRST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FIRST, 0); + } + public EARLIEST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EARLIEST, 0); + } + public LATEST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LATEST, 0); + } + public LAST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LAST, 0); + } public override get ruleIndex(): number { return OpenSearchPPLParser.RULE_statsFunctionName; } @@ -9975,39 +22213,52 @@ export class TakeAggFunctionContext extends antlr.ParserRuleContext { } -export class PercentileAggFunctionContext extends antlr.ParserRuleContext { - public _value?: IntegerLiteralContext; - public _aggField?: FieldExpressionContext; +export class PercentileApproxFunctionContext extends antlr.ParserRuleContext { + public _aggField?: ValueExpressionContext; + public _percent?: NumericLiteralContext; + public _compression?: NumericLiteralContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public PERCENTILE(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.PERCENTILE, 0)!; - } - public LESS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.LESS, 0)!; - } - public GREATER(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.GREATER, 0)!; - } public LT_PRTHS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } public RT_PRTHS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; } - public integerLiteral(): IntegerLiteralContext { - return this.getRuleContext(0, IntegerLiteralContext)!; + public PERCENTILE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PERCENTILE, 0); } - public fieldExpression(): FieldExpressionContext { - return this.getRuleContext(0, FieldExpressionContext)!; + public PERCENTILE_APPROX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PERCENTILE_APPROX, 0); + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public numericLiteral(): NumericLiteralContext[]; + public numericLiteral(i: number): NumericLiteralContext | null; + public numericLiteral(i?: number): NumericLiteralContext[] | NumericLiteralContext | null { + if (i === undefined) { + return this.getRuleContexts(NumericLiteralContext); + } + + return this.getRuleContext(i, NumericLiteralContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_percentileAggFunction; + return OpenSearchPPLParser.RULE_percentileApproxFunction; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitPercentileAggFunction) { - return visitor.visitPercentileAggFunction(this); + if (visitor.visitPercentileApproxFunction) { + return visitor.visitPercentileApproxFunction(this); } else { return visitor.visitChildren(this); } @@ -10015,25 +22266,28 @@ export class PercentileAggFunctionContext extends antlr.ParserRuleContext { } -export class ExpressionContext extends antlr.ParserRuleContext { +export class NumericLiteralContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public logicalExpression(): LogicalExpressionContext | null { - return this.getRuleContext(0, LogicalExpressionContext); + public integerLiteral(): IntegerLiteralContext | null { + return this.getRuleContext(0, IntegerLiteralContext); + } + public decimalLiteral(): DecimalLiteralContext | null { + return this.getRuleContext(0, DecimalLiteralContext); } - public comparisonExpression(): ComparisonExpressionContext | null { - return this.getRuleContext(0, ComparisonExpressionContext); + public doubleLiteral(): DoubleLiteralContext | null { + return this.getRuleContext(0, DoubleLiteralContext); } - public valueExpression(): ValueExpressionContext | null { - return this.getRuleContext(0, ValueExpressionContext); + public floatLiteral(): FloatLiteralContext | null { + return this.getRuleContext(0, FloatLiteralContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_expression; + return OpenSearchPPLParser.RULE_numericLiteral; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitExpression) { - return visitor.visitExpression(this); + if (visitor.visitNumericLiteral) { + return visitor.visitNumericLiteral(this); } else { return visitor.visitChildren(this); } @@ -10045,120 +22299,124 @@ export class LogicalExpressionContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public logicalOrExpression(): LogicalOrExpressionContext { - return this.getRuleContext(0, LogicalOrExpressionContext)!; - } public override get ruleIndex(): number { return OpenSearchPPLParser.RULE_logicalExpression; } + public override copyFrom(ctx: LogicalExpressionContext): void { + super.copyFrom(ctx); + } +} +export class LogicalNotContext extends LogicalExpressionContext { + public constructor(ctx: LogicalExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public NOT(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.NOT, 0)!; + } + public logicalExpression(): LogicalExpressionContext { + return this.getRuleContext(0, LogicalExpressionContext)!; + } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitLogicalExpression) { - return visitor.visitLogicalExpression(this); + if (visitor.visitLogicalNot) { + return visitor.visitLogicalNot(this); } else { return visitor.visitChildren(this); } } } - - -export class LogicalOrExpressionContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public logicalXorExpression(): LogicalXorExpressionContext[]; - public logicalXorExpression(i: number): LogicalXorExpressionContext | null; - public logicalXorExpression(i?: number): LogicalXorExpressionContext[] | LogicalXorExpressionContext | null { - if (i === undefined) { - return this.getRuleContexts(LogicalXorExpressionContext); - } - - return this.getRuleContext(i, LogicalXorExpressionContext); - } - public OR(): antlr.TerminalNode[]; - public OR(i: number): antlr.TerminalNode | null; - public OR(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(OpenSearchPPLParser.OR); - } else { - return this.getToken(OpenSearchPPLParser.OR, i); - } +export class LogicalExprContext extends LogicalExpressionContext { + public constructor(ctx: LogicalExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_logicalOrExpression; + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitLogicalOrExpression) { - return visitor.visitLogicalOrExpression(this); + if (visitor.visitLogicalExpr) { + return visitor.visitLogicalExpr(this); } else { return visitor.visitChildren(this); } } } - - -export class LogicalXorExpressionContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); +export class LogicalAndContext extends LogicalExpressionContext { + public _left?: LogicalExpressionContext; + public _right?: LogicalExpressionContext; + public constructor(ctx: LogicalExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); } - public logicalAndExpression(): LogicalAndExpressionContext[]; - public logicalAndExpression(i: number): LogicalAndExpressionContext | null; - public logicalAndExpression(i?: number): LogicalAndExpressionContext[] | LogicalAndExpressionContext | null { + public AND(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.AND, 0)!; + } + public logicalExpression(): LogicalExpressionContext[]; + public logicalExpression(i: number): LogicalExpressionContext | null; + public logicalExpression(i?: number): LogicalExpressionContext[] | LogicalExpressionContext | null { if (i === undefined) { - return this.getRuleContexts(LogicalAndExpressionContext); + return this.getRuleContexts(LogicalExpressionContext); } - return this.getRuleContext(i, LogicalAndExpressionContext); + return this.getRuleContext(i, LogicalExpressionContext); } - public XOR(): antlr.TerminalNode[]; - public XOR(i: number): antlr.TerminalNode | null; - public XOR(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(OpenSearchPPLParser.XOR); - } else { - return this.getToken(OpenSearchPPLParser.XOR, i); - } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitLogicalAnd) { + return visitor.visitLogicalAnd(this); + } else { + return visitor.visitChildren(this); + } } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_logicalXorExpression; +} +export class LogicalXorContext extends LogicalExpressionContext { + public _left?: LogicalExpressionContext; + public _right?: LogicalExpressionContext; + public constructor(ctx: LogicalExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public XOR(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.XOR, 0)!; + } + public logicalExpression(): LogicalExpressionContext[]; + public logicalExpression(i: number): LogicalExpressionContext | null; + public logicalExpression(i?: number): LogicalExpressionContext[] | LogicalExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(LogicalExpressionContext); + } + + return this.getRuleContext(i, LogicalExpressionContext); } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitLogicalXorExpression) { - return visitor.visitLogicalXorExpression(this); + if (visitor.visitLogicalXor) { + return visitor.visitLogicalXor(this); } else { return visitor.visitChildren(this); } } } - - -export class LogicalAndExpressionContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); +export class LogicalOrContext extends LogicalExpressionContext { + public _left?: LogicalExpressionContext; + public _right?: LogicalExpressionContext; + public constructor(ctx: LogicalExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public OR(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.OR, 0)!; } - public logicalNotExpression(): LogicalNotExpressionContext[]; - public logicalNotExpression(i: number): LogicalNotExpressionContext | null; - public logicalNotExpression(i?: number): LogicalNotExpressionContext[] | LogicalNotExpressionContext | null { + public logicalExpression(): LogicalExpressionContext[]; + public logicalExpression(i: number): LogicalExpressionContext | null; + public logicalExpression(i?: number): LogicalExpressionContext[] | LogicalExpressionContext | null { if (i === undefined) { - return this.getRuleContexts(LogicalNotExpressionContext); + return this.getRuleContexts(LogicalExpressionContext); } - return this.getRuleContext(i, LogicalNotExpressionContext); - } - public AND(): antlr.TerminalNode[]; - public AND(i: number): antlr.TerminalNode | null; - public AND(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(OpenSearchPPLParser.AND); - } else { - return this.getToken(OpenSearchPPLParser.AND, i); - } - } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_logicalAndExpression; + return this.getRuleContext(i, LogicalExpressionContext); } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitLogicalAndExpression) { - return visitor.visitLogicalAndExpression(this); + if (visitor.visitLogicalOr) { + return visitor.visitLogicalOr(this); } else { return visitor.visitChildren(this); } @@ -10166,85 +22424,56 @@ export class LogicalAndExpressionContext extends antlr.ParserRuleContext { } -export class LogicalNotExpressionContext extends antlr.ParserRuleContext { +export class ExpressionContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public NOT(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.NOT, 0); + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_expression; } - public logicalNotExpression(): LogicalNotExpressionContext | null { - return this.getRuleContext(0, LogicalNotExpressionContext); + public override copyFrom(ctx: ExpressionContext): void { + super.copyFrom(ctx); } - public primaryLogicalExpression(): PrimaryLogicalExpressionContext | null { - return this.getRuleContext(0, PrimaryLogicalExpressionContext); +} +export class RelevanceExprContext extends ExpressionContext { + public constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_logicalNotExpression; + public relevanceExpression(): RelevanceExpressionContext { + return this.getRuleContext(0, RelevanceExpressionContext)!; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitLogicalNotExpression) { - return visitor.visitLogicalNotExpression(this); + if (visitor.visitRelevanceExpr) { + return visitor.visitRelevanceExpr(this); } else { return visitor.visitChildren(this); } } } - - -export class PrimaryLogicalExpressionContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public comparisonExpression(): ComparisonExpressionContext | null { - return this.getRuleContext(0, ComparisonExpressionContext); - } - public booleanExpression(): BooleanExpressionContext | null { - return this.getRuleContext(0, BooleanExpressionContext); - } - public relevanceExpression(): RelevanceExpressionContext | null { - return this.getRuleContext(0, RelevanceExpressionContext); - } - public LT_PRTHS(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); - } - public logicalExpression(): LogicalExpressionContext | null { - return this.getRuleContext(0, LogicalExpressionContext); - } - public RT_PRTHS(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); +export class ValueExprContext extends ExpressionContext { + public constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_primaryLogicalExpression; + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitPrimaryLogicalExpression) { - return visitor.visitPrimaryLogicalExpression(this); + if (visitor.visitValueExpr) { + return visitor.visitValueExpr(this); } else { return visitor.visitChildren(this); } } } - - -export class ComparisonExpressionContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_comparisonExpression; - } - public override copyFrom(ctx: ComparisonExpressionContext): void { - super.copyFrom(ctx); - } -} -export class InExprContext extends ComparisonExpressionContext { - public constructor(ctx: ComparisonExpressionContext) { +export class InExprContext extends ExpressionContext { + public constructor(ctx: ExpressionContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public valueExpression(): ValueExpressionContext { - return this.getRuleContext(0, ValueExpressionContext)!; + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; } public IN(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.IN, 0)!; @@ -10252,6 +22481,9 @@ export class InExprContext extends ComparisonExpressionContext { public valueList(): ValueListContext { return this.getRuleContext(0, ValueListContext)!; } + public NOT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.NOT, 0); + } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { if (visitor.visitInExpr) { return visitor.visitInExpr(this); @@ -10260,24 +22492,55 @@ export class InExprContext extends ComparisonExpressionContext { } } } -export class CompareExprContext extends ComparisonExpressionContext { - public _left?: ValueExpressionContext; - public _right?: ValueExpressionContext; - public constructor(ctx: ComparisonExpressionContext) { +export class BetweenContext extends ExpressionContext { + public constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public BETWEEN(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.BETWEEN, 0)!; + } + public AND(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.AND, 0)!; + } + public NOT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.NOT, 0); + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitBetween) { + return visitor.visitBetween(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CompareExprContext extends ExpressionContext { + public _left?: ExpressionContext; + public _right?: ExpressionContext; + public constructor(ctx: ExpressionContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } public comparisonOperator(): ComparisonOperatorContext { return this.getRuleContext(0, ComparisonOperatorContext)!; } - public valueExpression(): ValueExpressionContext[]; - public valueExpression(i: number): ValueExpressionContext | null; - public valueExpression(i?: number): ValueExpressionContext[] | ValueExpressionContext | null { + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { if (i === undefined) { - return this.getRuleContexts(ValueExpressionContext); + return this.getRuleContexts(ExpressionContext); } - return this.getRuleContext(i, ValueExpressionContext); + return this.getRuleContext(i, ExpressionContext); } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { if (visitor.visitCompareExpr) { @@ -10300,87 +22563,170 @@ export class ValueExpressionContext extends antlr.ParserRuleContext { super.copyFrom(ctx); } } -export class PositionFunctionCallContext extends ValueExpressionContext { +export class InSubqueryExprContext extends ValueExpressionContext { public constructor(ctx: ValueExpressionContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public positionFunction(): PositionFunctionContext { - return this.getRuleContext(0, PositionFunctionContext)!; + public LT_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); + } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext | null; + public valueExpression(i?: number): ValueExpressionContext[] | ValueExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } + + return this.getRuleContext(i, ValueExpressionContext); + } + public RT_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); + } + public IN(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.IN, 0)!; + } + public LT_SQR_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_SQR_PRTHS, 0)!; + } + public subSearch(): SubSearchContext { + return this.getRuleContext(0, SubSearchContext)!; + } + public RT_SQR_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_SQR_PRTHS, 0)!; + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public NOT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.NOT, 0); } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitPositionFunctionCall) { - return visitor.visitPositionFunctionCall(this); + if (visitor.visitInSubqueryExpr) { + return visitor.visitInSubqueryExpr(this); } else { return visitor.visitChildren(this); } } } -export class ValueExpressionDefaultContext extends ValueExpressionContext { +export class LambdaExprContext extends ValueExpressionContext { public constructor(ctx: ValueExpressionContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public primaryExpression(): PrimaryExpressionContext { - return this.getRuleContext(0, PrimaryExpressionContext)!; + public lambda(): LambdaContext { + return this.getRuleContext(0, LambdaContext)!; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitValueExpressionDefault) { - return visitor.visitValueExpressionDefault(this); + if (visitor.visitLambdaExpr) { + return visitor.visitLambdaExpr(this); } else { return visitor.visitChildren(this); } } } -export class ParentheticValueExprContext extends ValueExpressionContext { +export class LiteralValueExprContext extends ValueExpressionContext { public constructor(ctx: ValueExpressionContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public LT_PRTHS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; + public literalValue(): LiteralValueContext { + return this.getRuleContext(0, LiteralValueContext)!; } - public valueExpression(): ValueExpressionContext { - return this.getRuleContext(0, ValueExpressionContext)!; + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitLiteralValueExpr) { + return visitor.visitLiteralValueExpr(this); + } else { + return visitor.visitChildren(this); + } } - public RT_PRTHS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; +} +export class FunctionCallExprContext extends ValueExpressionContext { + public constructor(ctx: ValueExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public functionCall(): FunctionCallContext { + return this.getRuleContext(0, FunctionCallContext)!; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitParentheticValueExpr) { - return visitor.visitParentheticValueExpr(this); + if (visitor.visitFunctionCallExpr) { + return visitor.visitFunctionCallExpr(this); } else { return visitor.visitChildren(this); } } } -export class GetFormatFunctionCallContext extends ValueExpressionContext { +export class ExistsSubqueryExprContext extends ValueExpressionContext { public constructor(ctx: ValueExpressionContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public getFormatFunction(): GetFormatFunctionContext { - return this.getRuleContext(0, GetFormatFunctionContext)!; + public EXISTS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EXISTS, 0)!; + } + public LT_SQR_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_SQR_PRTHS, 0)!; + } + public subSearch(): SubSearchContext { + return this.getRuleContext(0, SubSearchContext)!; + } + public RT_SQR_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_SQR_PRTHS, 0)!; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitGetFormatFunctionCall) { - return visitor.visitGetFormatFunctionCall(this); + if (visitor.visitExistsSubqueryExpr) { + return visitor.visitExistsSubqueryExpr(this); } else { return visitor.visitChildren(this); } } } -export class ExtractFunctionCallContext extends ValueExpressionContext { +export class ScalarSubqueryExprContext extends ValueExpressionContext { public constructor(ctx: ValueExpressionContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public extractFunction(): ExtractFunctionContext { - return this.getRuleContext(0, ExtractFunctionContext)!; + public LT_SQR_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_SQR_PRTHS, 0)!; + } + public subSearch(): SubSearchContext { + return this.getRuleContext(0, SubSearchContext)!; + } + public RT_SQR_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_SQR_PRTHS, 0)!; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitExtractFunctionCall) { - return visitor.visitExtractFunctionCall(this); + if (visitor.visitScalarSubqueryExpr) { + return visitor.visitScalarSubqueryExpr(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NestedValueExprContext extends ValueExpressionContext { + public constructor(ctx: ValueExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; + } + public logicalExpression(): LogicalExpressionContext { + return this.getRuleContext(0, LogicalExpressionContext)!; + } + public RT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitNestedValueExpr) { + return visitor.visitNestedValueExpr(this); } else { return visitor.visitChildren(this); } @@ -10426,17 +22772,46 @@ export class BinaryArithmeticContext extends ValueExpressionContext { } } } -export class TimestampFunctionCallContext extends ValueExpressionContext { +export class FieldExprContext extends ValueExpressionContext { public constructor(ctx: ValueExpressionContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public timestampFunction(): TimestampFunctionContext { - return this.getRuleContext(0, TimestampFunctionContext)!; + public fieldExpression(): FieldExpressionContext { + return this.getRuleContext(0, FieldExpressionContext)!; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitTimestampFunctionCall) { - return visitor.visitTimestampFunctionCall(this); + if (visitor.visitFieldExpr) { + return visitor.visitFieldExpr(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class EvalExpressionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EVAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.EVAL, 0)!; + } + public LT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; + } + public logicalExpression(): LogicalExpressionContext { + return this.getRuleContext(0, LogicalExpressionContext)!; + } + public RT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_evalExpression; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitEvalExpression) { + return visitor.visitEvalExpression(this); } else { return visitor.visitChildren(this); } @@ -10444,7 +22819,7 @@ export class TimestampFunctionCallContext extends ValueExpressionContext { } -export class PrimaryExpressionContext extends antlr.ParserRuleContext { +export class FunctionCallContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -10454,18 +22829,27 @@ export class PrimaryExpressionContext extends antlr.ParserRuleContext { public dataTypeFunctionCall(): DataTypeFunctionCallContext | null { return this.getRuleContext(0, DataTypeFunctionCallContext); } - public fieldExpression(): FieldExpressionContext | null { - return this.getRuleContext(0, FieldExpressionContext); + public positionFunctionCall(): PositionFunctionCallContext | null { + return this.getRuleContext(0, PositionFunctionCallContext); } - public literalValue(): LiteralValueContext | null { - return this.getRuleContext(0, LiteralValueContext); + public caseFunctionCall(): CaseFunctionCallContext | null { + return this.getRuleContext(0, CaseFunctionCallContext); + } + public timestampFunctionCall(): TimestampFunctionCallContext | null { + return this.getRuleContext(0, TimestampFunctionCallContext); + } + public extractFunctionCall(): ExtractFunctionCallContext | null { + return this.getRuleContext(0, ExtractFunctionCallContext); + } + public getFormatFunctionCall(): GetFormatFunctionCallContext | null { + return this.getRuleContext(0, GetFormatFunctionCallContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_primaryExpression; + return OpenSearchPPLParser.RULE_functionCall; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitPrimaryExpression) { - return visitor.visitPrimaryExpression(this); + if (visitor.visitFunctionCall) { + return visitor.visitFunctionCall(this); } else { return visitor.visitChildren(this); } @@ -10473,7 +22857,7 @@ export class PrimaryExpressionContext extends antlr.ParserRuleContext { } -export class PositionFunctionContext extends antlr.ParserRuleContext { +export class PositionFunctionCallContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -10499,11 +22883,11 @@ export class PositionFunctionContext extends antlr.ParserRuleContext { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_positionFunction; + return OpenSearchPPLParser.RULE_positionFunctionCall; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitPositionFunction) { - return visitor.visitPositionFunction(this); + if (visitor.visitPositionFunctionCall) { + return visitor.visitPositionFunctionCall(this); } else { return visitor.visitChildren(this); } @@ -10511,19 +22895,55 @@ export class PositionFunctionContext extends antlr.ParserRuleContext { } -export class BooleanExpressionContext extends antlr.ParserRuleContext { +export class CaseFunctionCallContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public booleanFunctionCall(): BooleanFunctionCallContext { - return this.getRuleContext(0, BooleanFunctionCallContext)!; + public CASE(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.CASE, 0)!; + } + public LT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; + } + public logicalExpression(): LogicalExpressionContext[]; + public logicalExpression(i: number): LogicalExpressionContext | null; + public logicalExpression(i?: number): LogicalExpressionContext[] | LogicalExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(LogicalExpressionContext); + } + + return this.getRuleContext(i, LogicalExpressionContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext | null; + public valueExpression(i?: number): ValueExpressionContext[] | ValueExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } + + return this.getRuleContext(i, ValueExpressionContext); + } + public RT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; + } + public ELSE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ELSE, 0); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_booleanExpression; + return OpenSearchPPLParser.RULE_caseFunctionCall; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitBooleanExpression) { - return visitor.visitBooleanExpression(this); + if (visitor.visitCaseFunctionCall) { + return visitor.visitCaseFunctionCall(this); } else { return visitor.visitChildren(this); } @@ -10618,11 +23038,17 @@ export class MultiFieldRelevanceFunctionContext extends antlr.ParserRuleContext public LT_PRTHS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; } - public LT_SQR_PRTHS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.LT_SQR_PRTHS, 0)!; + public RT_PRTHS(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; } - public RT_SQR_PRTHS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.RT_SQR_PRTHS, 0)!; + public relevanceQuery(): RelevanceQueryContext { + return this.getRuleContext(0, RelevanceQueryContext)!; + } + public LT_SQR_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LT_SQR_PRTHS, 0); + } + public RT_SQR_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RT_SQR_PRTHS, 0); } public COMMA(): antlr.TerminalNode[]; public COMMA(i: number): antlr.TerminalNode | null; @@ -10633,8 +23059,14 @@ export class MultiFieldRelevanceFunctionContext extends antlr.ParserRuleContext return this.getToken(OpenSearchPPLParser.COMMA, i); } } - public RT_PRTHS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; + public relevanceArg(): RelevanceArgContext[]; + public relevanceArg(i: number): RelevanceArgContext | null; + public relevanceArg(i?: number): RelevanceArgContext[] | RelevanceArgContext | null { + if (i === undefined) { + return this.getRuleContexts(RelevanceArgContext); + } + + return this.getRuleContext(i, RelevanceArgContext); } public relevanceFieldAndWeight(): RelevanceFieldAndWeightContext[]; public relevanceFieldAndWeight(i: number): RelevanceFieldAndWeightContext | null; @@ -10645,18 +23077,6 @@ export class MultiFieldRelevanceFunctionContext extends antlr.ParserRuleContext return this.getRuleContext(i, RelevanceFieldAndWeightContext); } - public relevanceQuery(): RelevanceQueryContext { - return this.getRuleContext(0, RelevanceQueryContext)!; - } - public relevanceArg(): RelevanceArgContext[]; - public relevanceArg(i: number): RelevanceArgContext | null; - public relevanceArg(i?: number): RelevanceArgContext[] | RelevanceArgContext | null { - if (i === undefined) { - return this.getRuleContexts(RelevanceArgContext); - } - - return this.getRuleContext(i, RelevanceArgContext); - } public override get ruleIndex(): number { return OpenSearchPPLParser.RULE_multiFieldRelevanceFunction; } @@ -10703,8 +23123,8 @@ export class TableFunctionContext extends antlr.ParserRuleContext { public LT_PRTHS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; } - public functionArgs(): FunctionArgsContext { - return this.getRuleContext(0, FunctionArgsContext)!; + public namedFunctionArgs(): NamedFunctionArgsContext { + return this.getRuleContext(0, NamedFunctionArgsContext)!; } public RT_PRTHS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; @@ -10757,41 +23177,6 @@ export class FieldListContext extends antlr.ParserRuleContext { } -export class WcFieldListContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public wcFieldExpression(): WcFieldExpressionContext[]; - public wcFieldExpression(i: number): WcFieldExpressionContext | null; - public wcFieldExpression(i?: number): WcFieldExpressionContext[] | WcFieldExpressionContext | null { - if (i === undefined) { - return this.getRuleContexts(WcFieldExpressionContext); - } - - return this.getRuleContext(i, WcFieldExpressionContext); - } - public COMMA(): antlr.TerminalNode[]; - public COMMA(i: number): antlr.TerminalNode | null; - public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(OpenSearchPPLParser.COMMA); - } else { - return this.getToken(OpenSearchPPLParser.COMMA, i); - } - } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_wcFieldList; - } - public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitWcFieldList) { - return visitor.visitWcFieldList(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class SortFieldContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -10896,6 +23281,52 @@ export class WcFieldExpressionContext extends antlr.ParserRuleContext { } +export class SelectFieldExpressionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public wcQualifiedName(): WcQualifiedNameContext | null { + return this.getRuleContext(0, WcQualifiedNameContext); + } + public STAR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.STAR, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_selectFieldExpression; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitSelectFieldExpression) { + return visitor.visitSelectFieldExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RenameFieldExpressionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public wcQualifiedName(): WcQualifiedNameContext | null { + return this.getRuleContext(0, WcQualifiedNameContext); + } + public STAR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.STAR, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_renameFieldExpression; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitRenameFieldExpression) { + return visitor.visitRenameFieldExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class EvalFunctionCallContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -10935,8 +23366,8 @@ export class DataTypeFunctionCallContext extends antlr.ParserRuleContext { public LT_PRTHS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext)!; + public logicalExpression(): LogicalExpressionContext { + return this.getRuleContext(0, LogicalExpressionContext)!; } public AS(): antlr.TerminalNode { return this.getToken(OpenSearchPPLParser.AS, 0)!; @@ -10960,35 +23391,6 @@ export class DataTypeFunctionCallContext extends antlr.ParserRuleContext { } -export class BooleanFunctionCallContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public conditionFunctionBase(): ConditionFunctionBaseContext { - return this.getRuleContext(0, ConditionFunctionBaseContext)!; - } - public LT_PRTHS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0)!; - } - public functionArgs(): FunctionArgsContext { - return this.getRuleContext(0, FunctionArgsContext)!; - } - public RT_PRTHS(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; - } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_booleanFunctionCall; - } - public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitBooleanFunctionCall) { - return visitor.visitBooleanFunctionCall(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class ConvertedDataTypeContext extends antlr.ParserRuleContext { public _typeName?: Token | null; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { @@ -11024,6 +23426,12 @@ export class ConvertedDataTypeContext extends antlr.ParserRuleContext { public BOOLEAN(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.BOOLEAN, 0); } + public IP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.IP, 0); + } + public JSON(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JSON, 0); + } public override get ruleIndex(): number { return OpenSearchPPLParser.RULE_convertedDataType; } @@ -11037,34 +23445,188 @@ export class ConvertedDataTypeContext extends antlr.ParserRuleContext { } -export class EvalFunctionNameContext extends antlr.ParserRuleContext { +export class EvalFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public mathematicalFunctionName(): MathematicalFunctionNameContext | null { + return this.getRuleContext(0, MathematicalFunctionNameContext); + } + public dateTimeFunctionName(): DateTimeFunctionNameContext | null { + return this.getRuleContext(0, DateTimeFunctionNameContext); + } + public textFunctionName(): TextFunctionNameContext | null { + return this.getRuleContext(0, TextFunctionNameContext); + } + public conditionFunctionName(): ConditionFunctionNameContext | null { + return this.getRuleContext(0, ConditionFunctionNameContext); + } + public flowControlFunctionName(): FlowControlFunctionNameContext | null { + return this.getRuleContext(0, FlowControlFunctionNameContext); + } + public systemFunctionName(): SystemFunctionNameContext | null { + return this.getRuleContext(0, SystemFunctionNameContext); + } + public positionFunctionName(): PositionFunctionNameContext | null { + return this.getRuleContext(0, PositionFunctionNameContext); + } + public cryptographicFunctionName(): CryptographicFunctionNameContext | null { + return this.getRuleContext(0, CryptographicFunctionNameContext); + } + public jsonFunctionName(): JsonFunctionNameContext | null { + return this.getRuleContext(0, JsonFunctionNameContext); + } + public geoipFunctionName(): GeoipFunctionNameContext | null { + return this.getRuleContext(0, GeoipFunctionNameContext); + } + public collectionFunctionName(): CollectionFunctionNameContext | null { + return this.getRuleContext(0, CollectionFunctionNameContext); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_evalFunctionName; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitEvalFunctionName) { + return visitor.visitEvalFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionArgsContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public functionArg(): FunctionArgContext[]; + public functionArg(i: number): FunctionArgContext | null; + public functionArg(i?: number): FunctionArgContext[] | FunctionArgContext | null { + if (i === undefined) { + return this.getRuleContexts(FunctionArgContext); + } + + return this.getRuleContext(i, FunctionArgContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_functionArgs; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitFunctionArgs) { + return visitor.visitFunctionArgs(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NamedFunctionArgsContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public namedFunctionArg(): NamedFunctionArgContext[]; + public namedFunctionArg(i: number): NamedFunctionArgContext | null; + public namedFunctionArg(i?: number): NamedFunctionArgContext[] | NamedFunctionArgContext | null { + if (i === undefined) { + return this.getRuleContexts(NamedFunctionArgContext); + } + + return this.getRuleContext(i, NamedFunctionArgContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_namedFunctionArgs; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitNamedFunctionArgs) { + return visitor.visitNamedFunctionArgs(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionArgContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public functionArgExpression(): FunctionArgExpressionContext { + return this.getRuleContext(0, FunctionArgExpressionContext)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_functionArg; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitFunctionArg) { + return visitor.visitFunctionArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NamedFunctionArgContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public functionArgExpression(): FunctionArgExpressionContext { + return this.getRuleContext(0, FunctionArgExpressionContext)!; + } + public ident(): IdentContext | null { + return this.getRuleContext(0, IdentContext); + } + public EQUAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EQUAL, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_namedFunctionArg; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitNamedFunctionArg) { + return visitor.visitNamedFunctionArg(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionArgExpressionContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public mathematicalFunctionName(): MathematicalFunctionNameContext | null { - return this.getRuleContext(0, MathematicalFunctionNameContext); - } - public dateTimeFunctionName(): DateTimeFunctionNameContext | null { - return this.getRuleContext(0, DateTimeFunctionNameContext); - } - public textFunctionName(): TextFunctionNameContext | null { - return this.getRuleContext(0, TextFunctionNameContext); - } - public conditionFunctionBase(): ConditionFunctionBaseContext | null { - return this.getRuleContext(0, ConditionFunctionBaseContext); - } - public systemFunctionName(): SystemFunctionNameContext | null { - return this.getRuleContext(0, SystemFunctionNameContext); + public lambda(): LambdaContext | null { + return this.getRuleContext(0, LambdaContext); } - public positionFunctionName(): PositionFunctionNameContext | null { - return this.getRuleContext(0, PositionFunctionNameContext); + public logicalExpression(): LogicalExpressionContext | null { + return this.getRuleContext(0, LogicalExpressionContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_evalFunctionName; + return OpenSearchPPLParser.RULE_functionArgExpression; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitEvalFunctionName) { - return visitor.visitEvalFunctionName(this); + if (visitor.visitFunctionArgExpression) { + return visitor.visitFunctionArgExpression(this); } else { return visitor.visitChildren(this); } @@ -11072,18 +23634,30 @@ export class EvalFunctionNameContext extends antlr.ParserRuleContext { } -export class FunctionArgsContext extends antlr.ParserRuleContext { +export class LambdaContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public functionArg(): FunctionArgContext[]; - public functionArg(i: number): FunctionArgContext | null; - public functionArg(i?: number): FunctionArgContext[] | FunctionArgContext | null { + public ident(): IdentContext[]; + public ident(i: number): IdentContext | null; + public ident(i?: number): IdentContext[] | IdentContext | null { if (i === undefined) { - return this.getRuleContexts(FunctionArgContext); + return this.getRuleContexts(IdentContext); } - return this.getRuleContext(i, FunctionArgContext); + return this.getRuleContext(i, IdentContext); + } + public ARROW(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.ARROW, 0)!; + } + public logicalExpression(): LogicalExpressionContext { + return this.getRuleContext(0, LogicalExpressionContext)!; + } + public LT_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); + } + public RT_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); } public COMMA(): antlr.TerminalNode[]; public COMMA(i: number): antlr.TerminalNode | null; @@ -11095,37 +23669,11 @@ export class FunctionArgsContext extends antlr.ParserRuleContext { } } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_functionArgs; - } - public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitFunctionArgs) { - return visitor.visitFunctionArgs(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class FunctionArgContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public valueExpression(): ValueExpressionContext { - return this.getRuleContext(0, ValueExpressionContext)!; - } - public ident(): IdentContext | null { - return this.getRuleContext(0, IdentContext); - } - public EQUAL(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.EQUAL, 0); - } - public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_functionArg; + return OpenSearchPPLParser.RULE_lambda; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitFunctionArg) { - return visitor.visitFunctionArg(this); + if (visitor.visitLambda) { + return visitor.visitLambda(this); } else { return visitor.visitChildren(this); } @@ -11313,6 +23861,12 @@ export class RelevanceFieldWeightContext extends antlr.ParserRuleContext { public decimalLiteral(): DecimalLiteralContext | null { return this.getRuleContext(0, DecimalLiteralContext); } + public doubleLiteral(): DoubleLiteralContext | null { + return this.getRuleContext(0, DoubleLiteralContext); + } + public floatLiteral(): FloatLiteralContext | null { + return this.getRuleContext(0, FloatLiteralContext); + } public override get ruleIndex(): number { return OpenSearchPPLParser.RULE_relevanceFieldWeight; } @@ -11399,6 +23953,18 @@ export class MathematicalFunctionNameContext extends antlr.ParserRuleContext { public ABS(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.ABS, 0); } + public PLUS_FUCTION(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PLUS_FUCTION, 0); + } + public MINUS_FUCTION(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MINUS_FUCTION, 0); + } + public STAR_FUNCTION(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.STAR_FUNCTION, 0); + } + public DIVIDE_FUNCTION(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DIVIDE_FUNCTION, 0); + } public CBRT(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.CBRT, 0); } @@ -11420,6 +23986,9 @@ export class MathematicalFunctionNameContext extends antlr.ParserRuleContext { public EXP(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.EXP, 0); } + public EXPM1(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EXPM1, 0); + } public FLOOR(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.FLOOR, 0); } @@ -11429,15 +23998,15 @@ export class MathematicalFunctionNameContext extends antlr.ParserRuleContext { public LOG(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.LOG, 0); } - public LOG10(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.LOG10, 0); - } - public LOG2(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.LOG2, 0); + public LOG_WITH_BASE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LOG_WITH_BASE, 0); } public MOD(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.MOD, 0); } + public MODULUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MODULUS, 0); + } public PI(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.PI, 0); } @@ -11462,6 +24031,18 @@ export class MathematicalFunctionNameContext extends antlr.ParserRuleContext { public TRUNCATE(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.TRUNCATE, 0); } + public RINT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RINT, 0); + } + public SIGNUM(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SIGNUM, 0); + } + public SUM(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SUM, 0); + } + public AVG(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.AVG, 0); + } public trigonometricFunctionName(): TrigonometricFunctionNameContext | null { return this.getRuleContext(0, TrigonometricFunctionNameContext); } @@ -11478,6 +24059,67 @@ export class MathematicalFunctionNameContext extends antlr.ParserRuleContext { } +export class GeoipFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public GEOIP(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.GEOIP, 0)!; + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_geoipFunctionName; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitGeoipFunctionName) { + return visitor.visitGeoipFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class CollectionFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ARRAY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ARRAY, 0); + } + public ARRAY_LENGTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ARRAY_LENGTH, 0); + } + public MVJOIN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MVJOIN, 0); + } + public FORALL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FORALL, 0); + } + public EXISTS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EXISTS, 0); + } + public FILTER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FILTER, 0); + } + public TRANSFORM(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.TRANSFORM, 0); + } + public REDUCE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.REDUCE, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_collectionFunctionName; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitCollectionFunctionName) { + return visitor.visitCollectionFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class TrigonometricFunctionNameContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -11497,6 +24139,9 @@ export class TrigonometricFunctionNameContext extends antlr.ParserRuleContext { public COS(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.COS, 0); } + public COSH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.COSH, 0); + } public COT(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.COT, 0); } @@ -11509,6 +24154,9 @@ export class TrigonometricFunctionNameContext extends antlr.ParserRuleContext { public SIN(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.SIN, 0); } + public SINH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SINH, 0); + } public TAN(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.TAN, 0); } @@ -11525,6 +24173,79 @@ export class TrigonometricFunctionNameContext extends antlr.ParserRuleContext { } +export class JsonFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public JSON(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JSON, 0); + } + public JSON_OBJECT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JSON_OBJECT, 0); + } + public JSON_ARRAY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JSON_ARRAY, 0); + } + public JSON_ARRAY_LENGTH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JSON_ARRAY_LENGTH, 0); + } + public JSON_EXTRACT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JSON_EXTRACT, 0); + } + public JSON_KEYS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JSON_KEYS, 0); + } + public JSON_SET(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JSON_SET, 0); + } + public JSON_DELETE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JSON_DELETE, 0); + } + public JSON_APPEND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JSON_APPEND, 0); + } + public JSON_EXTEND(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JSON_EXTEND, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_jsonFunctionName; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitJsonFunctionName) { + return visitor.visitJsonFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class CryptographicFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public MD5(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MD5, 0); + } + public SHA1(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SHA1, 0); + } + public SHA2(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SHA2, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_cryptographicFunctionName; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitCryptographicFunctionName) { + return visitor.visitCryptographicFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class DateTimeFunctionNameContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -11724,6 +24445,9 @@ export class DateTimeFunctionNameContext extends antlr.ParserRuleContext { public YEARWEEK(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.YEARWEEK, 0); } + public STRFTIME(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.STRFTIME, 0); + } public override get ruleIndex(): number { return OpenSearchPPLParser.RULE_dateTimeFunctionName; } @@ -11737,7 +24461,7 @@ export class DateTimeFunctionNameContext extends antlr.ParserRuleContext { } -export class GetFormatFunctionContext extends antlr.ParserRuleContext { +export class GetFormatFunctionCallContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -11760,11 +24484,11 @@ export class GetFormatFunctionContext extends antlr.ParserRuleContext { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_getFormatFunction; + return OpenSearchPPLParser.RULE_getFormatFunctionCall; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitGetFormatFunction) { - return visitor.visitGetFormatFunction(this); + if (visitor.visitGetFormatFunctionCall) { + return visitor.visitGetFormatFunctionCall(this); } else { return visitor.visitChildren(this); } @@ -11801,7 +24525,7 @@ export class GetFormatTypeContext extends antlr.ParserRuleContext { } -export class ExtractFunctionContext extends antlr.ParserRuleContext { +export class ExtractFunctionCallContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -11824,11 +24548,11 @@ export class ExtractFunctionContext extends antlr.ParserRuleContext { return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0)!; } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_extractFunction; + return OpenSearchPPLParser.RULE_extractFunctionCall; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitExtractFunction) { - return visitor.visitExtractFunction(this); + if (visitor.visitExtractFunctionCall) { + return visitor.visitExtractFunctionCall(this); } else { return visitor.visitChildren(this); } @@ -11953,7 +24677,7 @@ export class DatetimePartContext extends antlr.ParserRuleContext { } -export class TimestampFunctionContext extends antlr.ParserRuleContext { +export class TimestampFunctionCallContext extends antlr.ParserRuleContext { public _firstArg?: FunctionArgContext; public _secondArg?: FunctionArgContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { @@ -11990,11 +24714,11 @@ export class TimestampFunctionContext extends antlr.ParserRuleContext { return this.getRuleContext(i, FunctionArgContext); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_timestampFunction; + return OpenSearchPPLParser.RULE_timestampFunctionCall; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitTimestampFunction) { - return visitor.visitTimestampFunction(this); + if (visitor.visitTimestampFunctionCall) { + return visitor.visitTimestampFunctionCall(this); } else { return visitor.visitChildren(this); } @@ -12025,34 +24749,78 @@ export class TimestampFunctionNameContext extends antlr.ParserRuleContext { } -export class ConditionFunctionBaseContext extends antlr.ParserRuleContext { +export class ConditionFunctionNameContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } public LIKE(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.LIKE, 0); } - public IF(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.IF, 0); - } public ISNULL(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.ISNULL, 0); } public ISNOTNULL(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.ISNOTNULL, 0); } + public CIDRMATCH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.CIDRMATCH, 0); + } + public REGEX_MATCH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.REGEX_MATCH, 0); + } + public JSON_VALID(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.JSON_VALID, 0); + } + public ISPRESENT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ISPRESENT, 0); + } + public ISEMPTY(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ISEMPTY, 0); + } + public ISBLANK(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ISBLANK, 0); + } + public EARLIEST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EARLIEST, 0); + } + public LATEST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LATEST, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_conditionFunctionName; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitConditionFunctionName) { + return visitor.visitConditionFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FlowControlFunctionNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public IF(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.IF, 0); + } public IFNULL(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.IFNULL, 0); } public NULLIF(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.NULLIF, 0); } + public COALESCE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.COALESCE, 0); + } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_conditionFunctionBase; + return OpenSearchPPLParser.RULE_flowControlFunctionName; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitConditionFunctionBase) { - return visitor.visitConditionFunctionBase(this); + if (visitor.visitFlowControlFunctionName) { + return visitor.visitFlowControlFunctionName(this); } else { return visitor.visitChildren(this); } @@ -12175,6 +24943,9 @@ export class ComparisonOperatorContext extends antlr.ParserRuleContext { public EQUAL(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.EQUAL, 0); } + public DOUBLE_EQUAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DOUBLE_EQUAL, 0); + } public NOT_EQUAL(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.NOT_EQUAL, 0); } @@ -12193,6 +24964,9 @@ export class ComparisonOperatorContext extends antlr.ParserRuleContext { public REGEXP(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.REGEXP, 0); } + public LIKE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LIKE, 0); + } public override get ruleIndex(): number { return OpenSearchPPLParser.RULE_comparisonOperator; } @@ -12277,6 +25051,12 @@ export class LiteralValueContext extends antlr.ParserRuleContext { public decimalLiteral(): DecimalLiteralContext | null { return this.getRuleContext(0, DecimalLiteralContext); } + public doubleLiteral(): DoubleLiteralContext | null { + return this.getRuleContext(0, DoubleLiteralContext); + } + public floatLiteral(): FloatLiteralContext | null { + return this.getRuleContext(0, FloatLiteralContext); + } public booleanLiteral(): BooleanLiteralContext | null { return this.getRuleContext(0, BooleanLiteralContext); } @@ -12326,18 +25106,70 @@ export class StringLiteralContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public DQUOTA_STRING(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.DQUOTA_STRING, 0); + public DQUOTA_STRING(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DQUOTA_STRING, 0); + } + public SQUOTA_STRING(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SQUOTA_STRING, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_stringLiteral; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitStringLiteral) { + return visitor.visitStringLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IntegerLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public INTEGER_LITERAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.INTEGER_LITERAL, 0)!; + } + public PLUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PLUS, 0); + } + public MINUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MINUS, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_integerLiteral; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitIntegerLiteral) { + return visitor.visitIntegerLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DecimalLiteralContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DECIMAL_LITERAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.DECIMAL_LITERAL, 0)!; } - public SQUOTA_STRING(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SQUOTA_STRING, 0); + public PLUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PLUS, 0); + } + public MINUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MINUS, 0); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_stringLiteral; + return OpenSearchPPLParser.RULE_decimalLiteral; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitStringLiteral) { - return visitor.visitStringLiteral(this); + if (visitor.visitDecimalLiteral) { + return visitor.visitDecimalLiteral(this); } else { return visitor.visitChildren(this); } @@ -12345,12 +25177,12 @@ export class StringLiteralContext extends antlr.ParserRuleContext { } -export class IntegerLiteralContext extends antlr.ParserRuleContext { +export class DoubleLiteralContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public INTEGER_LITERAL(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.INTEGER_LITERAL, 0)!; + public DOUBLE_LITERAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.DOUBLE_LITERAL, 0)!; } public PLUS(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.PLUS, 0); @@ -12359,11 +25191,11 @@ export class IntegerLiteralContext extends antlr.ParserRuleContext { return this.getToken(OpenSearchPPLParser.MINUS, 0); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_integerLiteral; + return OpenSearchPPLParser.RULE_doubleLiteral; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitIntegerLiteral) { - return visitor.visitIntegerLiteral(this); + if (visitor.visitDoubleLiteral) { + return visitor.visitDoubleLiteral(this); } else { return visitor.visitChildren(this); } @@ -12371,12 +25203,12 @@ export class IntegerLiteralContext extends antlr.ParserRuleContext { } -export class DecimalLiteralContext extends antlr.ParserRuleContext { +export class FloatLiteralContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public DECIMAL_LITERAL(): antlr.TerminalNode { - return this.getToken(OpenSearchPPLParser.DECIMAL_LITERAL, 0)!; + public FLOAT_LITERAL(): antlr.TerminalNode { + return this.getToken(OpenSearchPPLParser.FLOAT_LITERAL, 0)!; } public PLUS(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.PLUS, 0); @@ -12385,11 +25217,11 @@ export class DecimalLiteralContext extends antlr.ParserRuleContext { return this.getToken(OpenSearchPPLParser.MINUS, 0); } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_decimalLiteral; + return OpenSearchPPLParser.RULE_floatLiteral; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitDecimalLiteral) { - return visitor.visitDecimalLiteral(this); + if (visitor.visitFloatLiteral) { + return visitor.visitFloatLiteral(this); } else { return visitor.visitChildren(this); } @@ -12650,6 +25482,48 @@ export class TimespanUnitContext extends antlr.ParserRuleContext { public YEAR(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.YEAR, 0); } + public SEC(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SEC, 0); + } + public SECS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SECS, 0); + } + public SECONDS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SECONDS, 0); + } + public MINS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MINS, 0); + } + public MINUTES(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MINUTES, 0); + } + public HR(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.HR, 0); + } + public HRS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.HRS, 0); + } + public HOURS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.HOURS, 0); + } + public DAYS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DAYS, 0); + } + public MON(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MON, 0); + } + public MONTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MONTHS, 0); + } + public US(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.US, 0); + } + public CS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.CS, 0); + } + public DS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DS, 0); + } public override get ruleIndex(): number { return OpenSearchPPLParser.RULE_timespanUnit; } @@ -12839,6 +25713,56 @@ export class IdentsAsWildcardQualifiedNameContext extends WcQualifiedNameContext } +export class IdentifierSeqContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_identifierSeq; + } + public override copyFrom(ctx: IdentifierSeqContext): void { + super.copyFrom(ctx); + } +} +export class IdentsAsQualifiedNameSeqContext extends IdentifierSeqContext { + public constructor(ctx: IdentifierSeqContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public qualifiedName(): QualifiedNameContext[]; + public qualifiedName(i: number): QualifiedNameContext | null; + public qualifiedName(i?: number): QualifiedNameContext[] | QualifiedNameContext | null { + if (i === undefined) { + return this.getRuleContexts(QualifiedNameContext); + } + + return this.getRuleContext(i, QualifiedNameContext); + } + public COMMA(): antlr.TerminalNode[]; + public COMMA(i: number): antlr.TerminalNode | null; + public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(OpenSearchPPLParser.COMMA); + } else { + return this.getToken(OpenSearchPPLParser.COMMA, i); + } + } + public LT_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LT_PRTHS, 0); + } + public RT_PRTHS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RT_PRTHS, 0); + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitIdentsAsQualifiedNameSeq) { + return visitor.visitIdentsAsQualifiedNameSeq(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class IdentContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -12969,6 +25893,29 @@ export class WildcardContext extends antlr.ParserRuleContext { export class KeywordsCanBeIdContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public searchableKeyWord(): SearchableKeyWordContext | null { + return this.getRuleContext(0, SearchableKeyWordContext); + } + public IN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.IN, 0); + } + public override get ruleIndex(): number { + return OpenSearchPPLParser.RULE_keywordsCanBeId; + } + public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { + if (visitor.visitKeywordsCanBeId) { + return visitor.visitKeywordsCanBeId(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SearchableKeyWordContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -12984,113 +25931,128 @@ export class KeywordsCanBeIdContext extends antlr.ParserRuleContext { public evalFunctionName(): EvalFunctionNameContext | null { return this.getRuleContext(0, EvalFunctionNameContext); } + public jsonFunctionName(): JsonFunctionNameContext | null { + return this.getRuleContext(0, JsonFunctionNameContext); + } public relevanceArgName(): RelevanceArgNameContext | null { return this.getRuleContext(0, RelevanceArgNameContext); } public intervalUnit(): IntervalUnitContext | null { return this.getRuleContext(0, IntervalUnitContext); } - public dateTimeFunctionName(): DateTimeFunctionNameContext | null { - return this.getRuleContext(0, DateTimeFunctionNameContext); + public trendlineType(): TrendlineTypeContext | null { + return this.getRuleContext(0, TrendlineTypeContext); } - public textFunctionName(): TextFunctionNameContext | null { - return this.getRuleContext(0, TextFunctionNameContext); + public singleFieldRelevanceFunctionName(): SingleFieldRelevanceFunctionNameContext | null { + return this.getRuleContext(0, SingleFieldRelevanceFunctionNameContext); } - public mathematicalFunctionName(): MathematicalFunctionNameContext | null { - return this.getRuleContext(0, MathematicalFunctionNameContext); + public multiFieldRelevanceFunctionName(): MultiFieldRelevanceFunctionNameContext | null { + return this.getRuleContext(0, MultiFieldRelevanceFunctionNameContext); } - public positionFunctionName(): PositionFunctionNameContext | null { - return this.getRuleContext(0, PositionFunctionNameContext); + public commandName(): CommandNameContext | null { + return this.getRuleContext(0, CommandNameContext); } - public SEARCH(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SEARCH, 0); + public collectionFunctionName(): CollectionFunctionNameContext | null { + return this.getRuleContext(0, CollectionFunctionNameContext); } - public DESCRIBE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.DESCRIBE, 0); + public REGEX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.REGEX, 0); } - public SHOW(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SHOW, 0); + public explainMode(): ExplainModeContext | null { + return this.getRuleContext(0, ExplainModeContext); } - public FROM(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.FROM, 0); + public REGEXP(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.REGEXP, 0); } - public WHERE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.WHERE, 0); + public CASE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.CASE, 0); } - public FIELDS(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.FIELDS, 0); + public ELSE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ELSE, 0); } - public RENAME(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.RENAME, 0); + public ARROW(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ARROW, 0); } - public STATS(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.STATS, 0); + public BETWEEN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.BETWEEN, 0); } - public DEDUP(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.DEDUP, 0); + public EXISTS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EXISTS, 0); } - public SORT(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SORT, 0); + public SOURCE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SOURCE, 0); } - public EVAL(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.EVAL, 0); + public INDEX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.INDEX, 0); } - public HEAD(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.HEAD, 0); + public A(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.A, 0); } - public TOP(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.TOP, 0); + public ASC(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ASC, 0); } - public RARE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.RARE, 0); + public DESC(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DESC, 0); } - public PARSE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.PARSE, 0); + public DATASOURCES(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DATASOURCES, 0); + } + public FROM(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FROM, 0); + } + public PATTERN(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PATTERN, 0); + } + public NEW_FIELD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.NEW_FIELD, 0); } public METHOD(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.METHOD, 0); } - public REGEX(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.REGEX, 0); + public VARIABLE_COUNT_THRESHOLD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD, 0); } - public PUNCT(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.PUNCT, 0); + public FREQUENCY_THRESHOLD_PERCENTAGE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE, 0); } - public GROK(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.GROK, 0); + public MAX_SAMPLE_COUNT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MAX_SAMPLE_COUNT, 0); } - public PATTERN(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.PATTERN, 0); + public BUFFER_LIMIT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.BUFFER_LIMIT, 0); } - public PATTERNS(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.PATTERNS, 0); + public WITH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.WITH, 0); } - public NEW_FIELD(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.NEW_FIELD, 0); + public PUNCT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PUNCT, 0); } - public KMEANS(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.KMEANS, 0); + public USING(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.USING, 0); } - public AD(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.AD, 0); + public CAST(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.CAST, 0); } - public ML(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.ML, 0); + public GET_FORMAT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.GET_FORMAT, 0); } - public SOURCE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SOURCE, 0); + public EXTRACT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.EXTRACT, 0); } - public INDEX(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.INDEX, 0); + public INTERVAL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.INTERVAL, 0); } - public DESC(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.DESC, 0); + public PLUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PLUS, 0); } - public DATASOURCES(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.DATASOURCES, 0); + public MINUS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.MINUS, 0); } - public SORTBY(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SORTBY, 0); + public OVERRIDE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.OVERRIDE, 0); + } + public AUTO(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.AUTO, 0); } public STR(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.STR, 0); @@ -13119,6 +26081,9 @@ export class KeywordsCanBeIdContext extends antlr.ParserRuleContext { public DELIM(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.DELIM, 0); } + public BUCKET_NULLABLE(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.BUCKET_NULLABLE, 0); + } public CENTROIDS(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.CENTROIDS, 0); } @@ -13161,33 +26126,45 @@ export class KeywordsCanBeIdContext extends antlr.ParserRuleContext { public ANOMALY_SCORE_THRESHOLD(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD, 0); } - public AVG(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.AVG, 0); + public COUNTFIELD(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.COUNTFIELD, 0); } - public COUNT(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.COUNT, 0); + public SHOWCOUNT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SHOWCOUNT, 0); + } + public PATH(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PATH, 0); + } + public INPUT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.INPUT, 0); + } + public OUTPUT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.OUTPUT, 0); + } + public statsFunctionName(): StatsFunctionNameContext | null { + return this.getRuleContext(0, StatsFunctionNameContext); + } + public windowFunctionName(): WindowFunctionNameContext | null { + return this.getRuleContext(0, WindowFunctionNameContext); } public DISTINCT_COUNT(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.DISTINCT_COUNT, 0); } + public DISTINCT_COUNT_APPROX(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.DISTINCT_COUNT_APPROX, 0); + } public ESTDC(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.ESTDC, 0); } public ESTDC_ERROR(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.ESTDC_ERROR, 0); } - public MAX(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.MAX, 0); - } public MEAN(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.MEAN, 0); } public MEDIAN(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.MEDIAN, 0); } - public MIN(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.MIN, 0); - } public MODE(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.MODE, 0); } @@ -13200,9 +26177,6 @@ export class KeywordsCanBeIdContext extends antlr.ParserRuleContext { public STDEVP(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.STDEVP, 0); } - public SUM(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.SUM, 0); - } public SUMSQ(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.SUMSQ, 0); } @@ -13212,42 +26186,15 @@ export class KeywordsCanBeIdContext extends antlr.ParserRuleContext { public VAR_POP(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.VAR_POP, 0); } - public STDDEV_SAMP(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.STDDEV_SAMP, 0); - } - public STDDEV_POP(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.STDDEV_POP, 0); - } - public PERCENTILE(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.PERCENTILE, 0); - } public TAKE(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.TAKE, 0); } - public FIRST(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.FIRST, 0); - } - public LAST(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.LAST, 0); - } public LIST(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.LIST, 0); } public VALUES(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.VALUES, 0); } - public EARLIEST(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.EARLIEST, 0); - } - public EARLIEST_TIME(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.EARLIEST_TIME, 0); - } - public LATEST(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.LATEST, 0); - } - public LATEST_TIME(): antlr.TerminalNode | null { - return this.getToken(OpenSearchPPLParser.LATEST_TIME, 0); - } public PER_DAY(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.PER_DAY, 0); } @@ -13272,12 +26219,45 @@ export class KeywordsCanBeIdContext extends antlr.ParserRuleContext { public DC(): antlr.TerminalNode | null { return this.getToken(OpenSearchPPLParser.DC, 0); } + public OUTER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.OUTER, 0); + } + public INNER(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.INNER, 0); + } + public CROSS(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.CROSS, 0); + } + public LEFT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LEFT, 0); + } + public RIGHT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RIGHT, 0); + } + public FULL(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.FULL, 0); + } + public SEMI(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.SEMI, 0); + } + public ANTI(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.ANTI, 0); + } + public LEFT_HINT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.LEFT_HINT, 0); + } + public RIGHT_HINT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.RIGHT_HINT, 0); + } + public PERCENTILE_SHORTCUT(): antlr.TerminalNode | null { + return this.getToken(OpenSearchPPLParser.PERCENTILE_SHORTCUT, 0); + } public override get ruleIndex(): number { - return OpenSearchPPLParser.RULE_keywordsCanBeId; + return OpenSearchPPLParser.RULE_searchableKeyWord; } public override accept(visitor: OpenSearchPPLParserVisitor): Result | null { - if (visitor.visitKeywordsCanBeId) { - return visitor.visitKeywordsCanBeId(this); + if (visitor.visitSearchableKeyWord) { + return visitor.visitSearchableKeyWord(this); } else { return visitor.visitChildren(this); } diff --git a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParserVisitor.ts b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParserVisitor.ts index 0fb3dd54087a..5aa923bbbe1c 100644 --- a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParserVisitor.ts +++ b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/.generated/OpenSearchPPLParserVisitor.ts @@ -5,32 +5,99 @@ import { AbstractParseTreeVisitor } from "antlr4ng"; import { RootContext } from "./OpenSearchPPLParser.js"; import { PplStatementContext } from "./OpenSearchPPLParser.js"; -import { DmlStatementContext } from "./OpenSearchPPLParser.js"; import { QueryStatementContext } from "./OpenSearchPPLParser.js"; +import { ExplainStatementContext } from "./OpenSearchPPLParser.js"; +import { ExplainModeContext } from "./OpenSearchPPLParser.js"; +import { SubSearchContext } from "./OpenSearchPPLParser.js"; import { PplCommandsContext } from "./OpenSearchPPLParser.js"; import { CommandsContext } from "./OpenSearchPPLParser.js"; -import { SearchFromFilterContext } from "./OpenSearchPPLParser.js"; -import { SearchFilterFromContext } from "./OpenSearchPPLParser.js"; +import { CommandNameContext } from "./OpenSearchPPLParser.js"; import { SearchFromContext } from "./OpenSearchPPLParser.js"; -import { SearchFilterOnlyContext } from "./OpenSearchPPLParser.js"; -import { SearchEmptyContext } from "./OpenSearchPPLParser.js"; +import { OrExpressionContext } from "./OpenSearchPPLParser.js"; +import { AndExpressionContext } from "./OpenSearchPPLParser.js"; +import { NotExpressionContext } from "./OpenSearchPPLParser.js"; +import { TermExpressionContext } from "./OpenSearchPPLParser.js"; +import { GroupedExpressionContext } from "./OpenSearchPPLParser.js"; +import { SearchComparisonTermContext } from "./OpenSearchPPLParser.js"; +import { SearchInListTermContext } from "./OpenSearchPPLParser.js"; +import { SearchLiteralTermContext } from "./OpenSearchPPLParser.js"; +import { SearchLiteralContext } from "./OpenSearchPPLParser.js"; +import { SearchFieldCompareContext } from "./OpenSearchPPLParser.js"; +import { SearchFieldInValuesContext } from "./OpenSearchPPLParser.js"; +import { SearchLiteralsContext } from "./OpenSearchPPLParser.js"; +import { EqualsContext } from "./OpenSearchPPLParser.js"; +import { NotEqualsContext } from "./OpenSearchPPLParser.js"; +import { LessThanContext } from "./OpenSearchPPLParser.js"; +import { LessOrEqualContext } from "./OpenSearchPPLParser.js"; +import { GreaterThanContext } from "./OpenSearchPPLParser.js"; +import { GreaterOrEqualContext } from "./OpenSearchPPLParser.js"; import { DescribeCommandContext } from "./OpenSearchPPLParser.js"; import { ShowDataSourcesCommandContext } from "./OpenSearchPPLParser.js"; import { WhereCommandContext } from "./OpenSearchPPLParser.js"; import { FieldsCommandContext } from "./OpenSearchPPLParser.js"; +import { TableCommandContext } from "./OpenSearchPPLParser.js"; +import { FieldsCommandBodyContext } from "./OpenSearchPPLParser.js"; +import { WcFieldListContext } from "./OpenSearchPPLParser.js"; import { RenameCommandContext } from "./OpenSearchPPLParser.js"; import { StatsCommandContext } from "./OpenSearchPPLParser.js"; +import { StatsArgsContext } from "./OpenSearchPPLParser.js"; +import { PartitionsArgContext } from "./OpenSearchPPLParser.js"; +import { AllnumArgContext } from "./OpenSearchPPLParser.js"; +import { DelimArgContext } from "./OpenSearchPPLParser.js"; +import { BucketNullableArgContext } from "./OpenSearchPPLParser.js"; +import { DedupSplitArgContext } from "./OpenSearchPPLParser.js"; +import { EventstatsCommandContext } from "./OpenSearchPPLParser.js"; import { DedupCommandContext } from "./OpenSearchPPLParser.js"; import { SortCommandContext } from "./OpenSearchPPLParser.js"; +import { ReverseCommandContext } from "./OpenSearchPPLParser.js"; +import { TimechartCommandContext } from "./OpenSearchPPLParser.js"; +import { TimechartParameterContext } from "./OpenSearchPPLParser.js"; +import { TimechartArgContext } from "./OpenSearchPPLParser.js"; +import { SpanLiteralContext } from "./OpenSearchPPLParser.js"; import { EvalCommandContext } from "./OpenSearchPPLParser.js"; import { HeadCommandContext } from "./OpenSearchPPLParser.js"; +import { BinCommandContext } from "./OpenSearchPPLParser.js"; +import { BinOptionContext } from "./OpenSearchPPLParser.js"; +import { AligntimeValueContext } from "./OpenSearchPPLParser.js"; +import { NumericSpanValueContext } from "./OpenSearchPPLParser.js"; +import { LogBasedSpanValueContext } from "./OpenSearchPPLParser.js"; +import { ExtendedTimeSpanValueContext } from "./OpenSearchPPLParser.js"; +import { IdentifierSpanValueContext } from "./OpenSearchPPLParser.js"; +import { LogWithBaseSpanContext } from "./OpenSearchPPLParser.js"; import { TopCommandContext } from "./OpenSearchPPLParser.js"; import { RareCommandContext } from "./OpenSearchPPLParser.js"; import { GrokCommandContext } from "./OpenSearchPPLParser.js"; import { ParseCommandContext } from "./OpenSearchPPLParser.js"; +import { SpathCommandContext } from "./OpenSearchPPLParser.js"; +import { SpathParameterContext } from "./OpenSearchPPLParser.js"; +import { IndexablePathContext } from "./OpenSearchPPLParser.js"; +import { PathElementContext } from "./OpenSearchPPLParser.js"; +import { PathArrayAccessContext } from "./OpenSearchPPLParser.js"; +import { RegexCommandContext } from "./OpenSearchPPLParser.js"; +import { RegexExprContext } from "./OpenSearchPPLParser.js"; +import { RexCommandContext } from "./OpenSearchPPLParser.js"; +import { RexExprContext } from "./OpenSearchPPLParser.js"; +import { RexOptionContext } from "./OpenSearchPPLParser.js"; +import { PatternsMethodContext } from "./OpenSearchPPLParser.js"; import { PatternsCommandContext } from "./OpenSearchPPLParser.js"; import { PatternsParameterContext } from "./OpenSearchPPLParser.js"; -import { PatternsMethodContext } from "./OpenSearchPPLParser.js"; +import { PatternMethodContext } from "./OpenSearchPPLParser.js"; +import { PatternModeContext } from "./OpenSearchPPLParser.js"; +import { LookupCommandContext } from "./OpenSearchPPLParser.js"; +import { LookupMappingListContext } from "./OpenSearchPPLParser.js"; +import { OutputCandidateListContext } from "./OpenSearchPPLParser.js"; +import { LookupPairContext } from "./OpenSearchPPLParser.js"; +import { FillnullCommandContext } from "./OpenSearchPPLParser.js"; +import { FillNullWithContext } from "./OpenSearchPPLParser.js"; +import { FillNullUsingContext } from "./OpenSearchPPLParser.js"; +import { ReplacementPairContext } from "./OpenSearchPPLParser.js"; +import { TrendlineCommandContext } from "./OpenSearchPPLParser.js"; +import { TrendlineClauseContext } from "./OpenSearchPPLParser.js"; +import { TrendlineTypeContext } from "./OpenSearchPPLParser.js"; +import { ExpandCommandContext } from "./OpenSearchPPLParser.js"; +import { FlattenCommandContext } from "./OpenSearchPPLParser.js"; +import { AppendcolCommandContext } from "./OpenSearchPPLParser.js"; +import { AppendCommandContext } from "./OpenSearchPPLParser.js"; import { KmeansCommandContext } from "./OpenSearchPPLParser.js"; import { KmeansParameterContext } from "./OpenSearchPPLParser.js"; import { AdCommandContext } from "./OpenSearchPPLParser.js"; @@ -38,7 +105,24 @@ import { AdParameterContext } from "./OpenSearchPPLParser.js"; import { MlCommandContext } from "./OpenSearchPPLParser.js"; import { MlArgContext } from "./OpenSearchPPLParser.js"; import { FromClauseContext } from "./OpenSearchPPLParser.js"; +import { TableOrSubqueryClauseContext } from "./OpenSearchPPLParser.js"; import { TableSourceClauseContext } from "./OpenSearchPPLParser.js"; +import { DynamicSourceClauseContext } from "./OpenSearchPPLParser.js"; +import { SourceReferencesContext } from "./OpenSearchPPLParser.js"; +import { SourceReferenceContext } from "./OpenSearchPPLParser.js"; +import { SourceFilterArgsContext } from "./OpenSearchPPLParser.js"; +import { SourceFilterArgContext } from "./OpenSearchPPLParser.js"; +import { JoinCommandContext } from "./OpenSearchPPLParser.js"; +import { SqlLikeJoinTypeContext } from "./OpenSearchPPLParser.js"; +import { JoinTypeContext } from "./OpenSearchPPLParser.js"; +import { SideAliasContext } from "./OpenSearchPPLParser.js"; +import { JoinCriteriaContext } from "./OpenSearchPPLParser.js"; +import { JoinHintListContext } from "./OpenSearchPPLParser.js"; +import { LeftHintContext } from "./OpenSearchPPLParser.js"; +import { RightHintContext } from "./OpenSearchPPLParser.js"; +import { OverwriteOptionContext } from "./OpenSearchPPLParser.js"; +import { TypeOptionContext } from "./OpenSearchPPLParser.js"; +import { MaxOptionContext } from "./OpenSearchPPLParser.js"; import { RenameClasueContext } from "./OpenSearchPPLParser.js"; import { ByClauseContext } from "./OpenSearchPPLParser.js"; import { StatsByClauseContext } from "./OpenSearchPPLParser.js"; @@ -46,52 +130,67 @@ import { BySpanClauseContext } from "./OpenSearchPPLParser.js"; import { SpanClauseContext } from "./OpenSearchPPLParser.js"; import { SortbyClauseContext } from "./OpenSearchPPLParser.js"; import { EvalClauseContext } from "./OpenSearchPPLParser.js"; +import { EventstatsAggTermContext } from "./OpenSearchPPLParser.js"; +import { WindowFunctionContext } from "./OpenSearchPPLParser.js"; +import { WindowFunctionNameContext } from "./OpenSearchPPLParser.js"; +import { ScalarWindowFunctionNameContext } from "./OpenSearchPPLParser.js"; import { StatsAggTermContext } from "./OpenSearchPPLParser.js"; -import { StatsFunctionCallContext } from "./OpenSearchPPLParser.js"; +import { CountEvalFunctionCallContext } from "./OpenSearchPPLParser.js"; import { CountAllFunctionCallContext } from "./OpenSearchPPLParser.js"; +import { PercentileShortcutFunctionCallContext } from "./OpenSearchPPLParser.js"; import { DistinctCountFunctionCallContext } from "./OpenSearchPPLParser.js"; -import { PercentileAggFunctionCallContext } from "./OpenSearchPPLParser.js"; import { TakeAggFunctionCallContext } from "./OpenSearchPPLParser.js"; +import { PercentileApproxFunctionCallContext } from "./OpenSearchPPLParser.js"; +import { StatsFunctionCallContext } from "./OpenSearchPPLParser.js"; import { StatsFunctionNameContext } from "./OpenSearchPPLParser.js"; import { TakeAggFunctionContext } from "./OpenSearchPPLParser.js"; -import { PercentileAggFunctionContext } from "./OpenSearchPPLParser.js"; -import { ExpressionContext } from "./OpenSearchPPLParser.js"; -import { LogicalExpressionContext } from "./OpenSearchPPLParser.js"; -import { LogicalOrExpressionContext } from "./OpenSearchPPLParser.js"; -import { LogicalXorExpressionContext } from "./OpenSearchPPLParser.js"; -import { LogicalAndExpressionContext } from "./OpenSearchPPLParser.js"; -import { LogicalNotExpressionContext } from "./OpenSearchPPLParser.js"; -import { PrimaryLogicalExpressionContext } from "./OpenSearchPPLParser.js"; -import { CompareExprContext } from "./OpenSearchPPLParser.js"; +import { PercentileApproxFunctionContext } from "./OpenSearchPPLParser.js"; +import { NumericLiteralContext } from "./OpenSearchPPLParser.js"; +import { LogicalNotContext } from "./OpenSearchPPLParser.js"; +import { LogicalExprContext } from "./OpenSearchPPLParser.js"; +import { LogicalAndContext } from "./OpenSearchPPLParser.js"; +import { LogicalXorContext } from "./OpenSearchPPLParser.js"; +import { LogicalOrContext } from "./OpenSearchPPLParser.js"; +import { RelevanceExprContext } from "./OpenSearchPPLParser.js"; +import { ValueExprContext } from "./OpenSearchPPLParser.js"; import { InExprContext } from "./OpenSearchPPLParser.js"; -import { PositionFunctionCallContext } from "./OpenSearchPPLParser.js"; -import { ValueExpressionDefaultContext } from "./OpenSearchPPLParser.js"; -import { ParentheticValueExprContext } from "./OpenSearchPPLParser.js"; -import { GetFormatFunctionCallContext } from "./OpenSearchPPLParser.js"; -import { ExtractFunctionCallContext } from "./OpenSearchPPLParser.js"; +import { BetweenContext } from "./OpenSearchPPLParser.js"; +import { CompareExprContext } from "./OpenSearchPPLParser.js"; +import { InSubqueryExprContext } from "./OpenSearchPPLParser.js"; +import { LambdaExprContext } from "./OpenSearchPPLParser.js"; +import { LiteralValueExprContext } from "./OpenSearchPPLParser.js"; +import { FunctionCallExprContext } from "./OpenSearchPPLParser.js"; +import { ExistsSubqueryExprContext } from "./OpenSearchPPLParser.js"; +import { ScalarSubqueryExprContext } from "./OpenSearchPPLParser.js"; +import { NestedValueExprContext } from "./OpenSearchPPLParser.js"; import { BinaryArithmeticContext } from "./OpenSearchPPLParser.js"; -import { TimestampFunctionCallContext } from "./OpenSearchPPLParser.js"; -import { PrimaryExpressionContext } from "./OpenSearchPPLParser.js"; -import { PositionFunctionContext } from "./OpenSearchPPLParser.js"; -import { BooleanExpressionContext } from "./OpenSearchPPLParser.js"; +import { FieldExprContext } from "./OpenSearchPPLParser.js"; +import { EvalExpressionContext } from "./OpenSearchPPLParser.js"; +import { FunctionCallContext } from "./OpenSearchPPLParser.js"; +import { PositionFunctionCallContext } from "./OpenSearchPPLParser.js"; +import { CaseFunctionCallContext } from "./OpenSearchPPLParser.js"; import { RelevanceExpressionContext } from "./OpenSearchPPLParser.js"; import { SingleFieldRelevanceFunctionContext } from "./OpenSearchPPLParser.js"; import { MultiFieldRelevanceFunctionContext } from "./OpenSearchPPLParser.js"; import { TableSourceContext } from "./OpenSearchPPLParser.js"; import { TableFunctionContext } from "./OpenSearchPPLParser.js"; import { FieldListContext } from "./OpenSearchPPLParser.js"; -import { WcFieldListContext } from "./OpenSearchPPLParser.js"; import { SortFieldContext } from "./OpenSearchPPLParser.js"; import { SortFieldExpressionContext } from "./OpenSearchPPLParser.js"; import { FieldExpressionContext } from "./OpenSearchPPLParser.js"; import { WcFieldExpressionContext } from "./OpenSearchPPLParser.js"; +import { SelectFieldExpressionContext } from "./OpenSearchPPLParser.js"; +import { RenameFieldExpressionContext } from "./OpenSearchPPLParser.js"; import { EvalFunctionCallContext } from "./OpenSearchPPLParser.js"; import { DataTypeFunctionCallContext } from "./OpenSearchPPLParser.js"; -import { BooleanFunctionCallContext } from "./OpenSearchPPLParser.js"; import { ConvertedDataTypeContext } from "./OpenSearchPPLParser.js"; import { EvalFunctionNameContext } from "./OpenSearchPPLParser.js"; import { FunctionArgsContext } from "./OpenSearchPPLParser.js"; +import { NamedFunctionArgsContext } from "./OpenSearchPPLParser.js"; import { FunctionArgContext } from "./OpenSearchPPLParser.js"; +import { NamedFunctionArgContext } from "./OpenSearchPPLParser.js"; +import { FunctionArgExpressionContext } from "./OpenSearchPPLParser.js"; +import { LambdaContext } from "./OpenSearchPPLParser.js"; import { RelevanceArgContext } from "./OpenSearchPPLParser.js"; import { RelevanceArgNameContext } from "./OpenSearchPPLParser.js"; import { RelevanceFieldAndWeightContext } from "./OpenSearchPPLParser.js"; @@ -100,17 +199,22 @@ import { RelevanceFieldContext } from "./OpenSearchPPLParser.js"; import { RelevanceQueryContext } from "./OpenSearchPPLParser.js"; import { RelevanceArgValueContext } from "./OpenSearchPPLParser.js"; import { MathematicalFunctionNameContext } from "./OpenSearchPPLParser.js"; +import { GeoipFunctionNameContext } from "./OpenSearchPPLParser.js"; +import { CollectionFunctionNameContext } from "./OpenSearchPPLParser.js"; import { TrigonometricFunctionNameContext } from "./OpenSearchPPLParser.js"; +import { JsonFunctionNameContext } from "./OpenSearchPPLParser.js"; +import { CryptographicFunctionNameContext } from "./OpenSearchPPLParser.js"; import { DateTimeFunctionNameContext } from "./OpenSearchPPLParser.js"; -import { GetFormatFunctionContext } from "./OpenSearchPPLParser.js"; +import { GetFormatFunctionCallContext } from "./OpenSearchPPLParser.js"; import { GetFormatTypeContext } from "./OpenSearchPPLParser.js"; -import { ExtractFunctionContext } from "./OpenSearchPPLParser.js"; +import { ExtractFunctionCallContext } from "./OpenSearchPPLParser.js"; import { SimpleDateTimePartContext } from "./OpenSearchPPLParser.js"; import { ComplexDateTimePartContext } from "./OpenSearchPPLParser.js"; import { DatetimePartContext } from "./OpenSearchPPLParser.js"; -import { TimestampFunctionContext } from "./OpenSearchPPLParser.js"; +import { TimestampFunctionCallContext } from "./OpenSearchPPLParser.js"; import { TimestampFunctionNameContext } from "./OpenSearchPPLParser.js"; -import { ConditionFunctionBaseContext } from "./OpenSearchPPLParser.js"; +import { ConditionFunctionNameContext } from "./OpenSearchPPLParser.js"; +import { FlowControlFunctionNameContext } from "./OpenSearchPPLParser.js"; import { SystemFunctionNameContext } from "./OpenSearchPPLParser.js"; import { TextFunctionNameContext } from "./OpenSearchPPLParser.js"; import { PositionFunctionNameContext } from "./OpenSearchPPLParser.js"; @@ -122,6 +226,8 @@ import { IntervalLiteralContext } from "./OpenSearchPPLParser.js"; import { StringLiteralContext } from "./OpenSearchPPLParser.js"; import { IntegerLiteralContext } from "./OpenSearchPPLParser.js"; import { DecimalLiteralContext } from "./OpenSearchPPLParser.js"; +import { DoubleLiteralContext } from "./OpenSearchPPLParser.js"; +import { FloatLiteralContext } from "./OpenSearchPPLParser.js"; import { BooleanLiteralContext } from "./OpenSearchPPLParser.js"; import { DatetimeLiteralContext } from "./OpenSearchPPLParser.js"; import { DateLiteralContext } from "./OpenSearchPPLParser.js"; @@ -133,10 +239,12 @@ import { ValueListContext } from "./OpenSearchPPLParser.js"; import { IdentsAsQualifiedNameContext } from "./OpenSearchPPLParser.js"; import { IdentsAsTableQualifiedNameContext } from "./OpenSearchPPLParser.js"; import { IdentsAsWildcardQualifiedNameContext } from "./OpenSearchPPLParser.js"; +import { IdentsAsQualifiedNameSeqContext } from "./OpenSearchPPLParser.js"; import { IdentContext } from "./OpenSearchPPLParser.js"; import { TableIdentContext } from "./OpenSearchPPLParser.js"; import { WildcardContext } from "./OpenSearchPPLParser.js"; import { KeywordsCanBeIdContext } from "./OpenSearchPPLParser.js"; +import { SearchableKeyWordContext } from "./OpenSearchPPLParser.js"; /** @@ -160,17 +268,29 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor */ visitPplStatement?: (ctx: PplStatementContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.dmlStatement`. + * Visit a parse tree produced by `OpenSearchPPLParser.queryStatement`. * @param ctx the parse tree * @return the visitor result */ - visitDmlStatement?: (ctx: DmlStatementContext) => Result; + visitQueryStatement?: (ctx: QueryStatementContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.queryStatement`. + * Visit a parse tree produced by `OpenSearchPPLParser.explainStatement`. * @param ctx the parse tree * @return the visitor result */ - visitQueryStatement?: (ctx: QueryStatementContext) => Result; + visitExplainStatement?: (ctx: ExplainStatementContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.explainMode`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExplainMode?: (ctx: ExplainModeContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.subSearch`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubSearch?: (ctx: SubSearchContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.pplCommands`. * @param ctx the parse tree @@ -184,40 +304,143 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor */ visitCommands?: (ctx: CommandsContext) => Result; /** - * Visit a parse tree produced by the `searchFromFilter` - * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * Visit a parse tree produced by `OpenSearchPPLParser.commandName`. * @param ctx the parse tree * @return the visitor result */ - visitSearchFromFilter?: (ctx: SearchFromFilterContext) => Result; + visitCommandName?: (ctx: CommandNameContext) => Result; /** - * Visit a parse tree produced by the `searchFilterFrom` + * Visit a parse tree produced by the `searchFrom` * labeled alternative in `OpenSearchPPLParser.searchCommand`. * @param ctx the parse tree * @return the visitor result */ - visitSearchFilterFrom?: (ctx: SearchFilterFromContext) => Result; + visitSearchFrom?: (ctx: SearchFromContext) => Result; /** - * Visit a parse tree produced by the `searchFrom` - * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * Visit a parse tree produced by the `orExpression` + * labeled alternative in `OpenSearchPPLParser.searchExpression`. * @param ctx the parse tree * @return the visitor result */ - visitSearchFrom?: (ctx: SearchFromContext) => Result; + visitOrExpression?: (ctx: OrExpressionContext) => Result; /** - * Visit a parse tree produced by the `searchFilterOnly` - * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * Visit a parse tree produced by the `andExpression` + * labeled alternative in `OpenSearchPPLParser.searchExpression`. * @param ctx the parse tree * @return the visitor result */ - visitSearchFilterOnly?: (ctx: SearchFilterOnlyContext) => Result; + visitAndExpression?: (ctx: AndExpressionContext) => Result; /** - * Visit a parse tree produced by the `searchEmpty` - * labeled alternative in `OpenSearchPPLParser.searchCommand`. + * Visit a parse tree produced by the `notExpression` + * labeled alternative in `OpenSearchPPLParser.searchExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNotExpression?: (ctx: NotExpressionContext) => Result; + /** + * Visit a parse tree produced by the `termExpression` + * labeled alternative in `OpenSearchPPLParser.searchExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTermExpression?: (ctx: TermExpressionContext) => Result; + /** + * Visit a parse tree produced by the `groupedExpression` + * labeled alternative in `OpenSearchPPLParser.searchExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupedExpression?: (ctx: GroupedExpressionContext) => Result; + /** + * Visit a parse tree produced by the `searchComparisonTerm` + * labeled alternative in `OpenSearchPPLParser.searchTerm`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchComparisonTerm?: (ctx: SearchComparisonTermContext) => Result; + /** + * Visit a parse tree produced by the `searchInListTerm` + * labeled alternative in `OpenSearchPPLParser.searchTerm`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchInListTerm?: (ctx: SearchInListTermContext) => Result; + /** + * Visit a parse tree produced by the `searchLiteralTerm` + * labeled alternative in `OpenSearchPPLParser.searchTerm`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchLiteralTerm?: (ctx: SearchLiteralTermContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.searchLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchLiteral?: (ctx: SearchLiteralContext) => Result; + /** + * Visit a parse tree produced by the `searchFieldCompare` + * labeled alternative in `OpenSearchPPLParser.searchFieldComparison`. * @param ctx the parse tree * @return the visitor result */ - visitSearchEmpty?: (ctx: SearchEmptyContext) => Result; + visitSearchFieldCompare?: (ctx: SearchFieldCompareContext) => Result; + /** + * Visit a parse tree produced by the `searchFieldInValues` + * labeled alternative in `OpenSearchPPLParser.searchFieldInList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchFieldInValues?: (ctx: SearchFieldInValuesContext) => Result; + /** + * Visit a parse tree produced by the `searchLiterals` + * labeled alternative in `OpenSearchPPLParser.searchLiteralList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchLiterals?: (ctx: SearchLiteralsContext) => Result; + /** + * Visit a parse tree produced by the `equals` + * labeled alternative in `OpenSearchPPLParser.searchComparisonOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEquals?: (ctx: EqualsContext) => Result; + /** + * Visit a parse tree produced by the `notEquals` + * labeled alternative in `OpenSearchPPLParser.searchComparisonOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNotEquals?: (ctx: NotEqualsContext) => Result; + /** + * Visit a parse tree produced by the `lessThan` + * labeled alternative in `OpenSearchPPLParser.searchComparisonOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLessThan?: (ctx: LessThanContext) => Result; + /** + * Visit a parse tree produced by the `lessOrEqual` + * labeled alternative in `OpenSearchPPLParser.searchComparisonOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLessOrEqual?: (ctx: LessOrEqualContext) => Result; + /** + * Visit a parse tree produced by the `greaterThan` + * labeled alternative in `OpenSearchPPLParser.searchComparisonOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGreaterThan?: (ctx: GreaterThanContext) => Result; + /** + * Visit a parse tree produced by the `greaterOrEqual` + * labeled alternative in `OpenSearchPPLParser.searchComparisonOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGreaterOrEqual?: (ctx: GreaterOrEqualContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.describeCommand`. * @param ctx the parse tree @@ -242,6 +465,24 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitFieldsCommand?: (ctx: FieldsCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.tableCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableCommand?: (ctx: TableCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.fieldsCommandBody`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFieldsCommandBody?: (ctx: FieldsCommandBodyContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.wcFieldList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWcFieldList?: (ctx: WcFieldListContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.renameCommand`. * @param ctx the parse tree @@ -254,6 +495,48 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitStatsCommand?: (ctx: StatsCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.statsArgs`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatsArgs?: (ctx: StatsArgsContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.partitionsArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPartitionsArg?: (ctx: PartitionsArgContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.allnumArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAllnumArg?: (ctx: AllnumArgContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.delimArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDelimArg?: (ctx: DelimArgContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.bucketNullableArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBucketNullableArg?: (ctx: BucketNullableArgContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.dedupSplitArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDedupSplitArg?: (ctx: DedupSplitArgContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.eventstatsCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEventstatsCommand?: (ctx: EventstatsCommandContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.dedupCommand`. * @param ctx the parse tree @@ -266,6 +549,36 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitSortCommand?: (ctx: SortCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.reverseCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReverseCommand?: (ctx: ReverseCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.timechartCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimechartCommand?: (ctx: TimechartCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.timechartParameter`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimechartParameter?: (ctx: TimechartParameterContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.timechartArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimechartArg?: (ctx: TimechartArgContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.spanLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSpanLiteral?: (ctx: SpanLiteralContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.evalCommand`. * @param ctx the parse tree @@ -278,6 +591,59 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitHeadCommand?: (ctx: HeadCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.binCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBinCommand?: (ctx: BinCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.binOption`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBinOption?: (ctx: BinOptionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.aligntimeValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAligntimeValue?: (ctx: AligntimeValueContext) => Result; + /** + * Visit a parse tree produced by the `numericSpanValue` + * labeled alternative in `OpenSearchPPLParser.spanValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNumericSpanValue?: (ctx: NumericSpanValueContext) => Result; + /** + * Visit a parse tree produced by the `logBasedSpanValue` + * labeled alternative in `OpenSearchPPLParser.spanValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLogBasedSpanValue?: (ctx: LogBasedSpanValueContext) => Result; + /** + * Visit a parse tree produced by the `extendedTimeSpanValue` + * labeled alternative in `OpenSearchPPLParser.spanValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExtendedTimeSpanValue?: (ctx: ExtendedTimeSpanValueContext) => Result; + /** + * Visit a parse tree produced by the `identifierSpanValue` + * labeled alternative in `OpenSearchPPLParser.spanValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentifierSpanValue?: (ctx: IdentifierSpanValueContext) => Result; + /** + * Visit a parse tree produced by the `logWithBaseSpan` + * labeled alternative in `OpenSearchPPLParser.logSpanValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLogWithBaseSpan?: (ctx: LogWithBaseSpanContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.topCommand`. * @param ctx the parse tree @@ -302,6 +668,72 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitParseCommand?: (ctx: ParseCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.spathCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSpathCommand?: (ctx: SpathCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.spathParameter`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSpathParameter?: (ctx: SpathParameterContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.indexablePath`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIndexablePath?: (ctx: IndexablePathContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.pathElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPathElement?: (ctx: PathElementContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.pathArrayAccess`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPathArrayAccess?: (ctx: PathArrayAccessContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.regexCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRegexCommand?: (ctx: RegexCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.regexExpr`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRegexExpr?: (ctx: RegexExprContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.rexCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRexCommand?: (ctx: RexCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.rexExpr`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRexExpr?: (ctx: RexExprContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.rexOption`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRexOption?: (ctx: RexOptionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.patternsMethod`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternsMethod?: (ctx: PatternsMethodContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.patternsCommand`. * @param ctx the parse tree @@ -315,11 +747,107 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor */ visitPatternsParameter?: (ctx: PatternsParameterContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.patternsMethod`. + * Visit a parse tree produced by `OpenSearchPPLParser.patternMethod`. * @param ctx the parse tree * @return the visitor result */ - visitPatternsMethod?: (ctx: PatternsMethodContext) => Result; + visitPatternMethod?: (ctx: PatternMethodContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.patternMode`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternMode?: (ctx: PatternModeContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.lookupCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLookupCommand?: (ctx: LookupCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.lookupMappingList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLookupMappingList?: (ctx: LookupMappingListContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.outputCandidateList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOutputCandidateList?: (ctx: OutputCandidateListContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.lookupPair`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLookupPair?: (ctx: LookupPairContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.fillnullCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFillnullCommand?: (ctx: FillnullCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.fillNullWith`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFillNullWith?: (ctx: FillNullWithContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.fillNullUsing`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFillNullUsing?: (ctx: FillNullUsingContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.replacementPair`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplacementPair?: (ctx: ReplacementPairContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.trendlineCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTrendlineCommand?: (ctx: TrendlineCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.trendlineClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTrendlineClause?: (ctx: TrendlineClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.trendlineType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTrendlineType?: (ctx: TrendlineTypeContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.expandCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExpandCommand?: (ctx: ExpandCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.flattenCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFlattenCommand?: (ctx: FlattenCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.appendcolCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAppendcolCommand?: (ctx: AppendcolCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.appendCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAppendCommand?: (ctx: AppendCommandContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.kmeansCommand`. * @param ctx the parse tree @@ -362,12 +890,119 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitFromClause?: (ctx: FromClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.tableOrSubqueryClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableOrSubqueryClause?: (ctx: TableOrSubqueryClauseContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.tableSourceClause`. * @param ctx the parse tree * @return the visitor result */ visitTableSourceClause?: (ctx: TableSourceClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.dynamicSourceClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDynamicSourceClause?: (ctx: DynamicSourceClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.sourceReferences`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSourceReferences?: (ctx: SourceReferencesContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.sourceReference`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSourceReference?: (ctx: SourceReferenceContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.sourceFilterArgs`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSourceFilterArgs?: (ctx: SourceFilterArgsContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.sourceFilterArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSourceFilterArg?: (ctx: SourceFilterArgContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.joinCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinCommand?: (ctx: JoinCommandContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.sqlLikeJoinType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSqlLikeJoinType?: (ctx: SqlLikeJoinTypeContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.joinType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinType?: (ctx: JoinTypeContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.sideAlias`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSideAlias?: (ctx: SideAliasContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.joinCriteria`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinCriteria?: (ctx: JoinCriteriaContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.joinHintList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinHintList?: (ctx: JoinHintListContext) => Result; + /** + * Visit a parse tree produced by the `leftHint` + * labeled alternative in `OpenSearchPPLParser.hintPair`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLeftHint?: (ctx: LeftHintContext) => Result; + /** + * Visit a parse tree produced by the `rightHint` + * labeled alternative in `OpenSearchPPLParser.hintPair`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRightHint?: (ctx: RightHintContext) => Result; + /** + * Visit a parse tree produced by the `overwriteOption` + * labeled alternative in `OpenSearchPPLParser.joinOption`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOverwriteOption?: (ctx: OverwriteOptionContext) => Result; + /** + * Visit a parse tree produced by the `typeOption` + * labeled alternative in `OpenSearchPPLParser.joinOption`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTypeOption?: (ctx: TypeOptionContext) => Result; + /** + * Visit a parse tree produced by the `maxOption` + * labeled alternative in `OpenSearchPPLParser.joinOption`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMaxOption?: (ctx: MaxOptionContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.renameClasue`. * @param ctx the parse tree @@ -410,6 +1045,30 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitEvalClause?: (ctx: EvalClauseContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.eventstatsAggTerm`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEventstatsAggTerm?: (ctx: EventstatsAggTermContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.windowFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowFunction?: (ctx: WindowFunctionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.windowFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowFunctionName?: (ctx: WindowFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.scalarWindowFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitScalarWindowFunctionName?: (ctx: ScalarWindowFunctionNameContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.statsAggTerm`. * @param ctx the parse tree @@ -417,12 +1076,12 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor */ visitStatsAggTerm?: (ctx: StatsAggTermContext) => Result; /** - * Visit a parse tree produced by the `statsFunctionCall` + * Visit a parse tree produced by the `countEvalFunctionCall` * labeled alternative in `OpenSearchPPLParser.statsFunction`. * @param ctx the parse tree * @return the visitor result */ - visitStatsFunctionCall?: (ctx: StatsFunctionCallContext) => Result; + visitCountEvalFunctionCall?: (ctx: CountEvalFunctionCallContext) => Result; /** * Visit a parse tree produced by the `countAllFunctionCall` * labeled alternative in `OpenSearchPPLParser.statsFunction`. @@ -431,19 +1090,19 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor */ visitCountAllFunctionCall?: (ctx: CountAllFunctionCallContext) => Result; /** - * Visit a parse tree produced by the `distinctCountFunctionCall` + * Visit a parse tree produced by the `percentileShortcutFunctionCall` * labeled alternative in `OpenSearchPPLParser.statsFunction`. * @param ctx the parse tree * @return the visitor result */ - visitDistinctCountFunctionCall?: (ctx: DistinctCountFunctionCallContext) => Result; + visitPercentileShortcutFunctionCall?: (ctx: PercentileShortcutFunctionCallContext) => Result; /** - * Visit a parse tree produced by the `percentileAggFunctionCall` + * Visit a parse tree produced by the `distinctCountFunctionCall` * labeled alternative in `OpenSearchPPLParser.statsFunction`. * @param ctx the parse tree * @return the visitor result */ - visitPercentileAggFunctionCall?: (ctx: PercentileAggFunctionCallContext) => Result; + visitDistinctCountFunctionCall?: (ctx: DistinctCountFunctionCallContext) => Result; /** * Visit a parse tree produced by the `takeAggFunctionCall` * labeled alternative in `OpenSearchPPLParser.statsFunction`. @@ -451,6 +1110,20 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitTakeAggFunctionCall?: (ctx: TakeAggFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `percentileApproxFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPercentileApproxFunctionCall?: (ctx: PercentileApproxFunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `statsFunctionCall` + * labeled alternative in `OpenSearchPPLParser.statsFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatsFunctionCall?: (ctx: StatsFunctionCallContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.statsFunctionName`. * @param ctx the parse tree @@ -464,102 +1137,136 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor */ visitTakeAggFunction?: (ctx: TakeAggFunctionContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.percentileAggFunction`. + * Visit a parse tree produced by `OpenSearchPPLParser.percentileApproxFunction`. * @param ctx the parse tree * @return the visitor result */ - visitPercentileAggFunction?: (ctx: PercentileAggFunctionContext) => Result; + visitPercentileApproxFunction?: (ctx: PercentileApproxFunctionContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.expression`. + * Visit a parse tree produced by `OpenSearchPPLParser.numericLiteral`. * @param ctx the parse tree * @return the visitor result */ - visitExpression?: (ctx: ExpressionContext) => Result; + visitNumericLiteral?: (ctx: NumericLiteralContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.logicalExpression`. + * Visit a parse tree produced by the `logicalNot` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. * @param ctx the parse tree * @return the visitor result */ - visitLogicalExpression?: (ctx: LogicalExpressionContext) => Result; + visitLogicalNot?: (ctx: LogicalNotContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.logicalOrExpression`. + * Visit a parse tree produced by the `logicalExpr` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. * @param ctx the parse tree * @return the visitor result */ - visitLogicalOrExpression?: (ctx: LogicalOrExpressionContext) => Result; + visitLogicalExpr?: (ctx: LogicalExprContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.logicalXorExpression`. + * Visit a parse tree produced by the `logicalAnd` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. * @param ctx the parse tree * @return the visitor result */ - visitLogicalXorExpression?: (ctx: LogicalXorExpressionContext) => Result; + visitLogicalAnd?: (ctx: LogicalAndContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.logicalAndExpression`. + * Visit a parse tree produced by the `logicalXor` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. * @param ctx the parse tree * @return the visitor result */ - visitLogicalAndExpression?: (ctx: LogicalAndExpressionContext) => Result; + visitLogicalXor?: (ctx: LogicalXorContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.logicalNotExpression`. + * Visit a parse tree produced by the `logicalOr` + * labeled alternative in `OpenSearchPPLParser.logicalExpression`. * @param ctx the parse tree * @return the visitor result */ - visitLogicalNotExpression?: (ctx: LogicalNotExpressionContext) => Result; + visitLogicalOr?: (ctx: LogicalOrContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.primaryLogicalExpression`. + * Visit a parse tree produced by the `relevanceExpr` + * labeled alternative in `OpenSearchPPLParser.expression`. * @param ctx the parse tree * @return the visitor result */ - visitPrimaryLogicalExpression?: (ctx: PrimaryLogicalExpressionContext) => Result; + visitRelevanceExpr?: (ctx: RelevanceExprContext) => Result; /** - * Visit a parse tree produced by the `compareExpr` - * labeled alternative in `OpenSearchPPLParser.comparisonExpression`. + * Visit a parse tree produced by the `valueExpr` + * labeled alternative in `OpenSearchPPLParser.expression`. * @param ctx the parse tree * @return the visitor result */ - visitCompareExpr?: (ctx: CompareExprContext) => Result; + visitValueExpr?: (ctx: ValueExprContext) => Result; /** * Visit a parse tree produced by the `inExpr` - * labeled alternative in `OpenSearchPPLParser.comparisonExpression`. + * labeled alternative in `OpenSearchPPLParser.expression`. * @param ctx the parse tree * @return the visitor result */ visitInExpr?: (ctx: InExprContext) => Result; /** - * Visit a parse tree produced by the `positionFunctionCall` + * Visit a parse tree produced by the `between` + * labeled alternative in `OpenSearchPPLParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBetween?: (ctx: BetweenContext) => Result; + /** + * Visit a parse tree produced by the `compareExpr` + * labeled alternative in `OpenSearchPPLParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCompareExpr?: (ctx: CompareExprContext) => Result; + /** + * Visit a parse tree produced by the `inSubqueryExpr` * labeled alternative in `OpenSearchPPLParser.valueExpression`. * @param ctx the parse tree * @return the visitor result */ - visitPositionFunctionCall?: (ctx: PositionFunctionCallContext) => Result; + visitInSubqueryExpr?: (ctx: InSubqueryExprContext) => Result; /** - * Visit a parse tree produced by the `valueExpressionDefault` + * Visit a parse tree produced by the `lambdaExpr` * labeled alternative in `OpenSearchPPLParser.valueExpression`. * @param ctx the parse tree * @return the visitor result */ - visitValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => Result; + visitLambdaExpr?: (ctx: LambdaExprContext) => Result; /** - * Visit a parse tree produced by the `parentheticValueExpr` + * Visit a parse tree produced by the `literalValueExpr` * labeled alternative in `OpenSearchPPLParser.valueExpression`. * @param ctx the parse tree * @return the visitor result */ - visitParentheticValueExpr?: (ctx: ParentheticValueExprContext) => Result; + visitLiteralValueExpr?: (ctx: LiteralValueExprContext) => Result; /** - * Visit a parse tree produced by the `getFormatFunctionCall` + * Visit a parse tree produced by the `functionCallExpr` * labeled alternative in `OpenSearchPPLParser.valueExpression`. * @param ctx the parse tree * @return the visitor result */ - visitGetFormatFunctionCall?: (ctx: GetFormatFunctionCallContext) => Result; + visitFunctionCallExpr?: (ctx: FunctionCallExprContext) => Result; /** - * Visit a parse tree produced by the `extractFunctionCall` + * Visit a parse tree produced by the `existsSubqueryExpr` * labeled alternative in `OpenSearchPPLParser.valueExpression`. * @param ctx the parse tree * @return the visitor result */ - visitExtractFunctionCall?: (ctx: ExtractFunctionCallContext) => Result; + visitExistsSubqueryExpr?: (ctx: ExistsSubqueryExprContext) => Result; + /** + * Visit a parse tree produced by the `scalarSubqueryExpr` + * labeled alternative in `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitScalarSubqueryExpr?: (ctx: ScalarSubqueryExprContext) => Result; + /** + * Visit a parse tree produced by the `nestedValueExpr` + * labeled alternative in `OpenSearchPPLParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNestedValueExpr?: (ctx: NestedValueExprContext) => Result; /** * Visit a parse tree produced by the `binaryArithmetic` * labeled alternative in `OpenSearchPPLParser.valueExpression`. @@ -568,30 +1275,36 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor */ visitBinaryArithmetic?: (ctx: BinaryArithmeticContext) => Result; /** - * Visit a parse tree produced by the `timestampFunctionCall` + * Visit a parse tree produced by the `fieldExpr` * labeled alternative in `OpenSearchPPLParser.valueExpression`. * @param ctx the parse tree * @return the visitor result */ - visitTimestampFunctionCall?: (ctx: TimestampFunctionCallContext) => Result; + visitFieldExpr?: (ctx: FieldExprContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.evalExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEvalExpression?: (ctx: EvalExpressionContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.primaryExpression`. + * Visit a parse tree produced by `OpenSearchPPLParser.functionCall`. * @param ctx the parse tree * @return the visitor result */ - visitPrimaryExpression?: (ctx: PrimaryExpressionContext) => Result; + visitFunctionCall?: (ctx: FunctionCallContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.positionFunction`. + * Visit a parse tree produced by `OpenSearchPPLParser.positionFunctionCall`. * @param ctx the parse tree * @return the visitor result */ - visitPositionFunction?: (ctx: PositionFunctionContext) => Result; + visitPositionFunctionCall?: (ctx: PositionFunctionCallContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.booleanExpression`. + * Visit a parse tree produced by `OpenSearchPPLParser.caseFunctionCall`. * @param ctx the parse tree * @return the visitor result */ - visitBooleanExpression?: (ctx: BooleanExpressionContext) => Result; + visitCaseFunctionCall?: (ctx: CaseFunctionCallContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.relevanceExpression`. * @param ctx the parse tree @@ -628,12 +1341,6 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitFieldList?: (ctx: FieldListContext) => Result; - /** - * Visit a parse tree produced by `OpenSearchPPLParser.wcFieldList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitWcFieldList?: (ctx: WcFieldListContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.sortField`. * @param ctx the parse tree @@ -659,23 +1366,29 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor */ visitWcFieldExpression?: (ctx: WcFieldExpressionContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.evalFunctionCall`. + * Visit a parse tree produced by `OpenSearchPPLParser.selectFieldExpression`. * @param ctx the parse tree * @return the visitor result */ - visitEvalFunctionCall?: (ctx: EvalFunctionCallContext) => Result; + visitSelectFieldExpression?: (ctx: SelectFieldExpressionContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.dataTypeFunctionCall`. + * Visit a parse tree produced by `OpenSearchPPLParser.renameFieldExpression`. * @param ctx the parse tree * @return the visitor result */ - visitDataTypeFunctionCall?: (ctx: DataTypeFunctionCallContext) => Result; + visitRenameFieldExpression?: (ctx: RenameFieldExpressionContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.booleanFunctionCall`. + * Visit a parse tree produced by `OpenSearchPPLParser.evalFunctionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEvalFunctionCall?: (ctx: EvalFunctionCallContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.dataTypeFunctionCall`. * @param ctx the parse tree * @return the visitor result */ - visitBooleanFunctionCall?: (ctx: BooleanFunctionCallContext) => Result; + visitDataTypeFunctionCall?: (ctx: DataTypeFunctionCallContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.convertedDataType`. * @param ctx the parse tree @@ -694,12 +1407,36 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitFunctionArgs?: (ctx: FunctionArgsContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.namedFunctionArgs`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamedFunctionArgs?: (ctx: NamedFunctionArgsContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.functionArg`. * @param ctx the parse tree * @return the visitor result */ visitFunctionArg?: (ctx: FunctionArgContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.namedFunctionArg`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamedFunctionArg?: (ctx: NamedFunctionArgContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.functionArgExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionArgExpression?: (ctx: FunctionArgExpressionContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.lambda`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLambda?: (ctx: LambdaContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.relevanceArg`. * @param ctx the parse tree @@ -748,12 +1485,36 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitMathematicalFunctionName?: (ctx: MathematicalFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.geoipFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGeoipFunctionName?: (ctx: GeoipFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.collectionFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCollectionFunctionName?: (ctx: CollectionFunctionNameContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.trigonometricFunctionName`. * @param ctx the parse tree * @return the visitor result */ visitTrigonometricFunctionName?: (ctx: TrigonometricFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.jsonFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonFunctionName?: (ctx: JsonFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.cryptographicFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCryptographicFunctionName?: (ctx: CryptographicFunctionNameContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.dateTimeFunctionName`. * @param ctx the parse tree @@ -761,11 +1522,11 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor */ visitDateTimeFunctionName?: (ctx: DateTimeFunctionNameContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.getFormatFunction`. + * Visit a parse tree produced by `OpenSearchPPLParser.getFormatFunctionCall`. * @param ctx the parse tree * @return the visitor result */ - visitGetFormatFunction?: (ctx: GetFormatFunctionContext) => Result; + visitGetFormatFunctionCall?: (ctx: GetFormatFunctionCallContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.getFormatType`. * @param ctx the parse tree @@ -773,11 +1534,11 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor */ visitGetFormatType?: (ctx: GetFormatTypeContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.extractFunction`. + * Visit a parse tree produced by `OpenSearchPPLParser.extractFunctionCall`. * @param ctx the parse tree * @return the visitor result */ - visitExtractFunction?: (ctx: ExtractFunctionContext) => Result; + visitExtractFunctionCall?: (ctx: ExtractFunctionCallContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.simpleDateTimePart`. * @param ctx the parse tree @@ -797,11 +1558,11 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor */ visitDatetimePart?: (ctx: DatetimePartContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.timestampFunction`. + * Visit a parse tree produced by `OpenSearchPPLParser.timestampFunctionCall`. * @param ctx the parse tree * @return the visitor result */ - visitTimestampFunction?: (ctx: TimestampFunctionContext) => Result; + visitTimestampFunctionCall?: (ctx: TimestampFunctionCallContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.timestampFunctionName`. * @param ctx the parse tree @@ -809,11 +1570,17 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor */ visitTimestampFunctionName?: (ctx: TimestampFunctionNameContext) => Result; /** - * Visit a parse tree produced by `OpenSearchPPLParser.conditionFunctionBase`. + * Visit a parse tree produced by `OpenSearchPPLParser.conditionFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConditionFunctionName?: (ctx: ConditionFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.flowControlFunctionName`. * @param ctx the parse tree * @return the visitor result */ - visitConditionFunctionBase?: (ctx: ConditionFunctionBaseContext) => Result; + visitFlowControlFunctionName?: (ctx: FlowControlFunctionNameContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.systemFunctionName`. * @param ctx the parse tree @@ -880,6 +1647,18 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitDecimalLiteral?: (ctx: DecimalLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.doubleLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDoubleLiteral?: (ctx: DoubleLiteralContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.floatLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFloatLiteral?: (ctx: FloatLiteralContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.booleanLiteral`. * @param ctx the parse tree @@ -949,6 +1728,13 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitIdentsAsWildcardQualifiedName?: (ctx: IdentsAsWildcardQualifiedNameContext) => Result; + /** + * Visit a parse tree produced by the `identsAsQualifiedNameSeq` + * labeled alternative in `OpenSearchPPLParser.identifierSeq`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentsAsQualifiedNameSeq?: (ctx: IdentsAsQualifiedNameSeqContext) => Result; /** * Visit a parse tree produced by `OpenSearchPPLParser.ident`. * @param ctx the parse tree @@ -973,5 +1759,11 @@ export class OpenSearchPPLParserVisitor extends AbstractParseTreeVisitor * @return the visitor result */ visitKeywordsCanBeId?: (ctx: KeywordsCanBeIdContext) => Result; + /** + * Visit a parse tree produced by `OpenSearchPPLParser.searchableKeyWord`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchableKeyWord?: (ctx: SearchableKeyWordContext) => Result; } diff --git a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/grammar/OpenSearchPPLLexer.g4 b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/grammar/OpenSearchPPLLexer.g4 index 1e08b9c61f1a..d4b236a8dfdc 100644 --- a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/grammar/OpenSearchPPLLexer.g4 +++ b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/grammar/OpenSearchPPLLexer.g4 @@ -7,32 +7,35 @@ lexer grammar OpenSearchPPLLexer; channels { WHITESPACE, ERRORCHANNEL } +options { caseInsensitive = true; } -options { - caseInsensitive = true; -} - -SPACE: [ \t\r\n]+ -> channel(HIDDEN); - +SPACE: [ \t\r\n]+ -> channel(WHITESPACE); // COMMAND KEYWORDS SEARCH: 'SEARCH'; DESCRIBE: 'DESCRIBE'; SHOW: 'SHOW'; +EXPLAIN: 'EXPLAIN'; FROM: 'FROM'; WHERE: 'WHERE'; FIELDS: 'FIELDS'; +FIELD: 'FIELD'; +TABLE: 'TABLE'; // Alias for FIELDS command RENAME: 'RENAME'; STATS: 'STATS'; +EVENTSTATS: 'EVENTSTATS'; DEDUP: 'DEDUP'; SORT: 'SORT'; EVAL: 'EVAL'; HEAD: 'HEAD'; +BIN: 'BIN'; TOP: 'TOP'; RARE: 'RARE'; PARSE: 'PARSE'; -METHOD: 'METHOD'; +SPATH: 'SPATH'; REGEX: 'REGEX'; +REX: 'REX'; +SED: 'SED'; PUNCT: 'PUNCT'; GROK: 'GROK'; PATTERN: 'PATTERN'; @@ -41,25 +44,65 @@ NEW_FIELD: 'NEW_FIELD'; KMEANS: 'KMEANS'; AD: 'AD'; ML: 'ML'; +FILLNULL: 'FILLNULL'; +FLATTEN: 'FLATTEN'; +TRENDLINE: 'TRENDLINE'; +TIMECHART: 'TIMECHART'; +APPENDCOL: 'APPENDCOL'; +EXPAND: 'EXPAND'; +SIMPLE_PATTERN: 'SIMPLE_PATTERN'; +BRAIN: 'BRAIN'; +VARIABLE_COUNT_THRESHOLD: 'VARIABLE_COUNT_THRESHOLD'; +FREQUENCY_THRESHOLD_PERCENTAGE: 'FREQUENCY_THRESHOLD_PERCENTAGE'; +METHOD: 'METHOD'; +MAX_SAMPLE_COUNT: 'MAX_SAMPLE_COUNT'; +MAX_MATCH: 'MAX_MATCH'; +OFFSET_FIELD: 'OFFSET_FIELD'; +BUFFER_LIMIT: 'BUFFER_LIMIT'; +LABEL: 'LABEL'; +AGGREGATION: 'AGGREGATION'; + +//Native JOIN KEYWORDS +JOIN: 'JOIN'; +ON: 'ON'; +INNER: 'INNER'; +OUTER: 'OUTER'; +FULL: 'FULL'; +SEMI: 'SEMI'; +ANTI: 'ANTI'; +CROSS: 'CROSS'; +LEFT_HINT: 'HINT.LEFT'; +RIGHT_HINT: 'HINT.RIGHT'; // COMMAND ASSIST KEYWORDS AS: 'AS'; BY: 'BY'; SOURCE: 'SOURCE'; INDEX: 'INDEX'; +A: 'A'; +ASC: 'ASC'; D: 'D'; DESC: 'DESC'; DATASOURCES: 'DATASOURCES'; - -// CLAUSE KEYWORDS -SORTBY: 'SORTBY'; - -// FIELD KEYWORDS +USING: 'USING'; +WITH: 'WITH'; +SIMPLE: 'SIMPLE'; +STANDARD: 'STANDARD'; +COST: 'COST'; +EXTENDED: 'EXTENDED'; +OVERRIDE: 'OVERRIDE'; +OVERWRITE: 'OVERWRITE'; + +// SORT FIELD KEYWORDS +// TODO #3180: Fix broken sort functionality AUTO: 'AUTO'; STR: 'STR'; -IP: 'IP'; NUM: 'NUM'; +// TRENDLINE KEYWORDS +SMA: 'SMA'; +WMA: 'WMA'; + // ARGUMENT KEYWORDS KEEPEMPTY: 'KEEPEMPTY'; CONSECUTIVE: 'CONSECUTIVE'; @@ -67,6 +110,7 @@ DEDUP_SPLITVALUES: 'DEDUP_SPLITVALUES'; PARTITIONS: 'PARTITIONS'; ALLNUM: 'ALLNUM'; DELIM: 'DELIM'; +BUCKET_NULLABLE: 'BUCKET_NULLABLE'; CENTROIDS: 'CENTROIDS'; ITERATIONS: 'ITERATIONS'; DISTANCE_TYPE: 'DISTANCE_TYPE'; @@ -81,10 +125,23 @@ TIME_FIELD: 'TIME_FIELD'; TIME_ZONE: 'TIME_ZONE'; TRAINING_DATA_SIZE: 'TRAINING_DATA_SIZE'; ANOMALY_SCORE_THRESHOLD: 'ANOMALY_SCORE_THRESHOLD'; +APPEND: 'APPEND'; +COUNTFIELD: 'COUNTFIELD'; +SHOWCOUNT: 'SHOWCOUNT'; +LIMIT: 'LIMIT'; +USEOTHER: 'USEOTHER'; +INPUT: 'INPUT'; +OUTPUT: 'OUTPUT'; +PATH: 'PATH'; // COMPARISON FUNCTION KEYWORDS CASE: 'CASE'; +ELSE: 'ELSE'; IN: 'IN'; +EXISTS: 'EXISTS'; + +// Geo IP eval function +GEOIP: 'GEOIP'; // LOGICAL KEYWORDS NOT: 'NOT'; @@ -94,6 +151,7 @@ XOR: 'XOR'; TRUE: 'TRUE'; FALSE: 'FALSE'; REGEXP: 'REGEXP'; +REGEX_MATCH: 'REGEX_MATCH'; // DATETIME, INTERVAL AND UNIT KEYWORDS CONVERT_TZ: 'CONVERT_TZ'; @@ -141,12 +199,14 @@ LONG: 'LONG'; FLOAT: 'FLOAT'; STRING: 'STRING'; BOOLEAN: 'BOOLEAN'; +IP: 'IP'; // SPECIAL CHARACTERS AND OPERATORS PIPE: '|'; COMMA: ','; DOT: '.'; EQUAL: '='; +DOUBLE_EQUAL: '=='; GREATER: '>'; LESS: '<'; NOT_GREATER: '<' '='; @@ -163,9 +223,12 @@ LT_PRTHS: '('; RT_PRTHS: ')'; LT_SQR_PRTHS: '['; RT_SQR_PRTHS: ']'; +LT_CURLY: '{'; +RT_CURLY: '}'; SINGLE_QUOTE: '\''; DOUBLE_QUOTE: '"'; BACKTICK: '`'; +ARROW: '->'; // Operators. Bit @@ -177,6 +240,7 @@ BIT_XOR_OP: '^'; AVG: 'AVG'; COUNT: 'COUNT'; DISTINCT_COUNT: 'DISTINCT_COUNT'; +DISTINCT_COUNT_APPROX: 'DISTINCT_COUNT_APPROX'; ESTDC: 'ESTDC'; ESTDC_ERROR: 'ESTDC_ERROR'; MAX: 'MAX'; @@ -193,16 +257,14 @@ VAR_SAMP: 'VAR_SAMP'; VAR_POP: 'VAR_POP'; STDDEV_SAMP: 'STDDEV_SAMP'; STDDEV_POP: 'STDDEV_POP'; +PERC: 'PERC'; PERCENTILE: 'PERCENTILE'; +PERCENTILE_APPROX: 'PERCENTILE_APPROX'; +EARLIEST: 'EARLIEST'; +LATEST: 'LATEST'; TAKE: 'TAKE'; -FIRST: 'FIRST'; -LAST: 'LAST'; LIST: 'LIST'; VALUES: 'VALUES'; -EARLIEST: 'EARLIEST'; -EARLIEST_TIME: 'EARLIEST_TIME'; -LATEST: 'LATEST'; -LATEST_TIME: 'LATEST_TIME'; PER_DAY: 'PER_DAY'; PER_HOUR: 'PER_HOUR'; PER_MINUTE: 'PER_MINUTE'; @@ -212,7 +274,22 @@ SPARKLINE: 'SPARKLINE'; C: 'C'; DC: 'DC'; +// SCALAR WINDOW FUNCTIONS +ROW_NUMBER: 'ROW_NUMBER'; +RANK: 'RANK'; +DENSE_RANK: 'DENSE_RANK'; +PERCENT_RANK: 'PERCENT_RANK'; +CUME_DIST: 'CUME_DIST'; +FIRST: 'FIRST'; +LAST: 'LAST'; +NTH: 'NTH'; +NTILE: 'NTILE'; + // BASIC FUNCTIONS +PLUS_FUCTION: 'ADD'; +MINUS_FUCTION: 'SUBTRACT'; +STAR_FUNCTION: 'MULTIPLY'; +DIVIDE_FUNCTION: 'DIVIDE'; ABS: 'ABS'; CBRT: 'CBRT'; CEIL: 'CEIL'; @@ -221,12 +298,13 @@ CONV: 'CONV'; CRC32: 'CRC32'; E: 'E'; EXP: 'EXP'; +EXPM1: 'EXPM1'; FLOOR: 'FLOOR'; LN: 'LN'; LOG: 'LOG'; -LOG10: 'LOG10'; -LOG2: 'LOG2'; +LOG_WITH_BASE: ([0-9]+ ('.' [0-9]+)?)? ('LOG' | 'log') [0-9]+ ('.' [0-9]+)?; MOD: 'MOD'; +MODULUS: 'MODULUS'; PI: 'PI'; POSITION: 'POSITION'; POW: 'POW'; @@ -236,6 +314,8 @@ ROUND: 'ROUND'; SIGN: 'SIGN'; SQRT: 'SQRT'; TRUNCATE: 'TRUNCATE'; +RINT: 'RINT'; +SIGNUM: 'SIGNUM'; // TRIGONOMETRIC FUNCTIONS ACOS: 'ACOS'; @@ -243,12 +323,19 @@ ASIN: 'ASIN'; ATAN: 'ATAN'; ATAN2: 'ATAN2'; COS: 'COS'; +COSH: 'COSH'; COT: 'COT'; DEGREES: 'DEGREES'; RADIANS: 'RADIANS'; SIN: 'SIN'; +SINH: 'SINH'; TAN: 'TAN'; +// CRYPTOGRAPHIC FUNCTIONS +MD5: 'MD5'; +SHA1: 'SHA1'; +SHA2: 'SHA2'; + // DATE AND TIME FUNCTIONS ADDDATE: 'ADDDATE'; ADDTIME: 'ADDTIME'; @@ -301,6 +388,7 @@ UTC_TIME: 'UTC_TIME'; UTC_TIMESTAMP: 'UTC_TIMESTAMP'; WEEKDAY: 'WEEKDAY'; YEARWEEK: 'YEARWEEK'; +STRFTIME: 'STRFTIME'; // TEXT FUNCTIONS SUBSTR: 'SUBSTR'; @@ -327,12 +415,40 @@ CAST: 'CAST'; LIKE: 'LIKE'; ISNULL: 'ISNULL'; ISNOTNULL: 'ISNOTNULL'; +CIDRMATCH: 'CIDRMATCH'; +BETWEEN: 'BETWEEN'; +ISPRESENT: 'ISPRESENT'; +ISEMPTY: 'ISEMPTY'; +ISBLANK: 'ISBLANK'; + +// COLLECTION FUNCTIONS +ARRAY: 'ARRAY'; +ARRAY_LENGTH: 'ARRAY_LENGTH'; +MVJOIN: 'MVJOIN'; +FORALL: 'FORALL'; +FILTER: 'FILTER'; +TRANSFORM: 'TRANSFORM'; +REDUCE: 'REDUCE'; + +// JSON FUNCTIONS +JSON_VALID: 'JSON_VALID'; +JSON: 'JSON'; +JSON_OBJECT: 'JSON_OBJECT'; +JSON_ARRAY: 'JSON_ARRAY'; +JSON_ARRAY_LENGTH: 'JSON_ARRAY_LENGTH'; +JSON_EXTRACT: 'JSON_EXTRACT'; +JSON_KEYS: 'JSON_KEYS'; +JSON_SET: 'JSON_SET'; +JSON_DELETE: 'JSON_DELETE'; +JSON_APPEND: 'JSON_APPEND'; +JSON_EXTEND: 'JSON_EXTEND'; // FLOWCONTROL FUNCTIONS IFNULL: 'IFNULL'; NULLIF: 'NULLIF'; IF: 'IF'; TYPEOF: 'TYPEOF'; +COALESCE: 'COALESCE'; // RELEVANCE FUNCTIONS AND PARAMETERS MATCH: 'MATCH'; @@ -377,6 +493,11 @@ ZERO_TERMS_QUERY: 'ZERO_TERMS_QUERY'; // SPAN KEYWORDS SPAN: 'SPAN'; +BINS: 'BINS'; +MINSPAN: 'MINSPAN'; +START: 'START'; +END: 'END'; +ALIGNTIME: 'ALIGNTIME'; MS: 'MS'; S: 'S'; M: 'M'; @@ -385,6 +506,26 @@ W: 'W'; Q: 'Q'; Y: 'Y'; +// Extended timescale units +SEC: 'SEC'; +SECS: 'SECS'; +SECONDS: 'SECONDS'; +MINS: 'MINS'; +MINUTES: 'MINUTES'; +HR: 'HR'; +HRS: 'HRS'; +HOURS: 'HOURS'; +DAYS: 'DAYS'; +MON: 'MON'; +MONTHS: 'MONTHS'; +US: 'US'; +CS: 'CS'; +DS: 'DS'; + + +// PERCENTILE SHORTCUT FUNCTIONS +// Must precede ID to avoid conflicts with identifier matching +PERCENTILE_SHORTCUT: PERC(INTEGER_LITERAL | DECIMAL_LITERAL) | 'P'(INTEGER_LITERAL | DECIMAL_LITERAL); // LITERALS AND VALUES //STRING_LITERAL: DQUOTA_STRING | SQUOTA_STRING | BQUOTA_STRING; @@ -392,9 +533,10 @@ ID: ID_LITERAL; CLUSTER: CLUSTER_PREFIX_LITERAL; INTEGER_LITERAL: DEC_DIGIT+; DECIMAL_LITERAL: (DEC_DIGIT+)? '.' DEC_DIGIT+; +FLOAT_LITERAL: (DEC_DIGIT+)? '.' DEC_DIGIT+ 'F'; +DOUBLE_LITERAL: (DEC_DIGIT+)? '.' DEC_DIGIT+ 'D'; fragment DATE_SUFFIX: ([\-.][*0-9]+)+; -fragment ID_LITERAL: [@*A-Z][*A-Z_\-0-9]*; fragment CLUSTER_PREFIX_LITERAL: [*A-Z]+?[*A-Z_\-0-9]* COLON; ID_DATE_SUFFIX: CLUSTER_PREFIX_LITERAL? ID_LITERAL DATE_SUFFIX; DQUOTA_STRING: '"' ( '\\'. | '""' | ~('"'| '\\') )* '"'; @@ -402,5 +544,11 @@ SQUOTA_STRING: '\'' ('\\'. | '\'\'' | ~('\'' | '\\'))* '\'' BQUOTA_STRING: '`' ( '\\'. | '``' | ~('`'|'\\'))* '`'; fragment DEC_DIGIT: [0-9]; +// Identifiers cannot start with a single '_' since this an OpenSearch reserved +// metadata field. Two underscores (or more) is acceptable, such as '__field'. +fragment ID_LITERAL: ([@*A-Z_])+?[*A-Z_\-0-9]*; + +LINE_COMMENT: '//' ('\\\n' | ~[\r\n])* '\r'? '\n'? -> channel(HIDDEN); +BLOCK_COMMENT: '/*' .*? '*/' -> channel(HIDDEN); ERROR_RECOGNITION: . -> channel(ERRORCHANNEL); \ No newline at end of file diff --git a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/grammar/OpenSearchPPLParser.g4 b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/grammar/OpenSearchPPLParser.g4 index 2b1fe286072f..22aef2686502 100644 --- a/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/grammar/OpenSearchPPLParser.g4 +++ b/packages/osd-antlr-grammar/src/opensearch_ppl_simplified/grammar/OpenSearchPPLParser.g4 @@ -8,57 +8,164 @@ parser grammar OpenSearchPPLParser; options { tokenVocab = OpenSearchPPLLexer; } + root : pplStatement? EOF ; // statement pplStatement - : dmlStatement - ; - -dmlStatement - : queryStatement + : explainStatement + | queryStatement ; queryStatement : pplCommands (PIPE commands)* ; +explainStatement + : EXPLAIN (explainMode)? queryStatement + ; + +explainMode + : SIMPLE + | STANDARD + | COST + | EXTENDED + ; + +subSearch + : searchCommand (PIPE commands)* + ; + // commands pplCommands - : searchCommand - | describeCommand + : describeCommand | showDataSourcesCommand + | searchCommand ; commands : whereCommand | fieldsCommand + | tableCommand + | joinCommand | renameCommand | statsCommand + | eventstatsCommand | dedupCommand | sortCommand | evalCommand | headCommand + | binCommand | topCommand | rareCommand | grokCommand | parseCommand + | spathCommand | patternsCommand + | lookupCommand | kmeansCommand | adCommand | mlCommand + | fillnullCommand + | trendlineCommand + | appendcolCommand + | appendCommand + | expandCommand + | flattenCommand + | reverseCommand + | regexCommand + | timechartCommand + | rexCommand + ; + +commandName + : SEARCH + | DESCRIBE + | SHOW + | WHERE + | FIELDS + | TABLE + | JOIN + | RENAME + | STATS + | EVENTSTATS + | DEDUP + | SORT + | EVAL + | HEAD + | BIN + | TOP + | RARE + | GROK + | PARSE + | PATTERNS + | LOOKUP + | KMEANS + | AD + | ML + | FILLNULL + | EXPAND + | FLATTEN + | TRENDLINE + | TIMECHART + | EXPLAIN + | REVERSE + | REGEX + | APPEND + | REX ; searchCommand - : (SEARCH)? fromClause logicalExpression # searchFromFilter - | (SEARCH)? logicalExpression fromClause # searchFilterFrom - | (SEARCH)? fromClause # searchFrom - | (SEARCH)? logicalExpression # searchFilterOnly - | (SEARCH)? # searchEmpty + : (SEARCH)? (searchExpression)* fromClause? (searchExpression)* # searchFrom + ; + +searchExpression + : LT_PRTHS searchExpression RT_PRTHS # groupedExpression + | NOT searchExpression # notExpression + | searchExpression OR searchExpression # orExpression + | searchExpression AND searchExpression # andExpression + | searchTerm # termExpression + ; + +searchTerm + : searchFieldComparison # searchComparisonTerm + | searchFieldInList # searchInListTerm + | searchLiteral # searchLiteralTerm + ; + +// Unified search literal for both free text and field comparisons +searchLiteral + : numericLiteral + | booleanLiteral + | ID + | stringLiteral + | searchableKeyWord ; +searchFieldComparison + : fieldExpression searchComparisonOperator searchLiteral # searchFieldCompare + ; + +searchFieldInList + : fieldExpression IN LT_PRTHS searchLiteralList RT_PRTHS # searchFieldInValues + ; + +searchLiteralList + : searchLiteral (COMMA searchLiteral)* # searchLiterals + ; + +searchComparisonOperator + : EQUAL # equals + | NOT_EQUAL # notEquals + | LESS # lessThan + | NOT_GREATER # lessOrEqual + | GREATER # greaterThan + | NOT_LESS # greaterOrEqual + ; + + describeCommand : DESCRIBE tableSourceClause ; @@ -72,15 +179,57 @@ whereCommand ; fieldsCommand - : FIELDS (PLUS | MINUS)? fieldList + : FIELDS fieldsCommandBody + ; + +// Table command - alias for fields command +tableCommand + : TABLE fieldsCommandBody + ; + +fieldsCommandBody + : (PLUS | MINUS)? wcFieldList + ; + +// Wildcard field list supporting both comma-separated and space-separated fields +wcFieldList + : selectFieldExpression (COMMA? selectFieldExpression)* ; renameCommand - : RENAME renameClasue (COMMA renameClasue)* + : RENAME renameClasue (COMMA? renameClasue)* ; statsCommand - : STATS (PARTITIONS EQUAL partitions = integerLiteral)? (ALLNUM EQUAL allnum = booleanLiteral)? (DELIM EQUAL delim = stringLiteral)? statsAggTerm (COMMA statsAggTerm)* (statsByClause)? (DEDUP_SPLITVALUES EQUAL dedupsplit = booleanLiteral)? + : STATS statsArgs statsAggTerm (COMMA statsAggTerm)* (statsByClause)? (dedupSplitArg)? + ; + +statsArgs + : (partitionsArg | allnumArg | delimArg | bucketNullableArg)* + ; + +partitionsArg + : PARTITIONS EQUAL partitions = integerLiteral + ; + +allnumArg + : ALLNUM EQUAL allnum = booleanLiteral + ; + +delimArg + : DELIM EQUAL delim = stringLiteral + ; + +bucketNullableArg + : BUCKET_NULLABLE EQUAL bucket_nullable = booleanLiteral + ; + +dedupSplitArg + : DEDUP_SPLITVALUES EQUAL dedupsplit = booleanLiteral + ; + +eventstatsCommand + : EVENTSTATS eventstatsAggTerm (COMMA eventstatsAggTerm)* (statsByClause)? ; dedupCommand @@ -88,7 +237,30 @@ dedupCommand ; sortCommand - : SORT sortbyClause + : SORT (count = integerLiteral)? sortbyClause (ASC | A | DESC | D)? + ; + +reverseCommand + : REVERSE + ; + +timechartCommand + : TIMECHART timechartParameter* statsFunction (BY fieldExpression)? + ; + +timechartParameter + : (spanClause | SPAN EQUAL spanLiteral) + | timechartArg + ; + +timechartArg + : LIMIT EQUAL integerLiteral + | USEOTHER EQUAL (booleanLiteral | ident) + ; + +spanLiteral + : integerLiteral timespanUnit + | stringLiteral ; evalCommand @@ -99,12 +271,42 @@ headCommand : HEAD (number = integerLiteral)? (FROM from = integerLiteral)? ; +binCommand + : BIN fieldExpression binOption* (AS alias = qualifiedName)? + ; + +binOption + : SPAN EQUAL span = spanValue + | BINS EQUAL bins = integerLiteral + | MINSPAN EQUAL minspan = literalValue (minspanUnit = timespanUnit)? + | ALIGNTIME EQUAL aligntime = aligntimeValue + | START EQUAL start = numericLiteral + | END EQUAL end = numericLiteral + ; + +aligntimeValue + : EARLIEST + | LATEST + | literalValue + ; + +spanValue + : literalValue (timespanUnit)? # numericSpanValue + | logSpanValue # logBasedSpanValue + | ident timespanUnit # extendedTimeSpanValue + | ident # identifierSpanValue + ; + +logSpanValue + : LOG_WITH_BASE # logWithBaseSpan + ; + topCommand - : TOP (number = integerLiteral)? fieldList (byClause)? + : TOP (number = integerLiteral)? (COUNTFIELD EQUAL countfield = stringLiteral)? (SHOWCOUNT EQUAL showcount = booleanLiteral)? fieldList (byClause)? ; rareCommand - : RARE fieldList (byClause)? + : RARE (number = integerLiteral)? (COUNTFIELD EQUAL countfield = stringLiteral)? (SHOWCOUNT EQUAL showcount = booleanLiteral)? fieldList (byClause)? ; grokCommand @@ -115,20 +317,140 @@ parseCommand : PARSE (source_field = expression) (pattern = stringLiteral) ; -patternsCommand - : PATTERNS (patternsParameter)* (source_field = expression) +spathCommand + : SPATH spathParameter* ; -patternsParameter - : (NEW_FIELD EQUAL new_field = stringLiteral) - | (PATTERN EQUAL pattern = stringLiteral) +spathParameter + : (INPUT EQUAL input = expression) + | (OUTPUT EQUAL output = expression) + | ((PATH EQUAL)? path = indexablePath) ; +indexablePath + : pathElement (DOT pathElement)* + ; + +pathElement + : ident pathArrayAccess? + ; + +pathArrayAccess + : LT_CURLY (INTEGER_LITERAL)? RT_CURLY + ; +regexCommand + : REGEX regexExpr + ; + +regexExpr + : field=qualifiedName operator=(EQUAL | NOT_EQUAL) pattern=stringLiteral + ; + +rexCommand + : REX rexExpr + ; + +rexExpr + : FIELD EQUAL field=qualifiedName (rexOption)* pattern=stringLiteral (rexOption)* + ; + +rexOption + : MAX_MATCH EQUAL maxMatch=integerLiteral + | MODE EQUAL (EXTRACT | SED) + | OFFSET_FIELD EQUAL offsetField=qualifiedName + ; patternsMethod : PUNCT | REGEX ; +patternsCommand + : PATTERNS (source_field = expression) (statsByClause)? (METHOD EQUAL method = patternMethod)? (MODE EQUAL pattern_mode = patternMode)? (MAX_SAMPLE_COUNT EQUAL max_sample_count = integerLiteral)? (BUFFER_LIMIT EQUAL buffer_limit = integerLiteral)? (NEW_FIELD EQUAL new_field = stringLiteral)? (patternsParameter)* + ; + +patternsParameter + : (PATTERN EQUAL pattern = stringLiteral) + | (VARIABLE_COUNT_THRESHOLD EQUAL variable_count_threshold = integerLiteral) + | (FREQUENCY_THRESHOLD_PERCENTAGE EQUAL frequency_threshold_percentage = decimalLiteral) + ; + +patternMethod + : SIMPLE_PATTERN + | BRAIN + ; + +patternMode + : LABEL + | AGGREGATION + ; + +// lookup +lookupCommand + : LOOKUP tableSource lookupMappingList ((APPEND | REPLACE) outputCandidateList)? + ; + +lookupMappingList + : lookupPair (COMMA lookupPair)* + ; + +outputCandidateList + : lookupPair (COMMA lookupPair)* + ; + + // The lookup pair will generate a K-V pair. + // The format is Key -> Alias(outputFieldName, inputField), Value -> outputField. For example: + // 1. When lookupPair is "name AS cName", the key will be Alias(cName, Field(name)), the value will be Field(cName) + // 2. When lookupPair is "dept", the key is Alias(dept, Field(dept)), value is Field(dept) +lookupPair + : inputField = fieldExpression (AS outputField = fieldExpression)? + ; + +fillnullCommand + : FILLNULL fillNullWith + | FILLNULL fillNullUsing + ; + +fillNullWith + : WITH replacement = valueExpression (IN fieldList)? + ; + +fillNullUsing + : USING replacementPair (COMMA replacementPair)* + ; + +replacementPair + : fieldExpression EQUAL replacement = valueExpression + ; + +trendlineCommand + : TRENDLINE (SORT sortField)? trendlineClause (trendlineClause)* + ; + +trendlineClause + : trendlineType LT_PRTHS numberOfDataPoints = integerLiteral COMMA field = fieldExpression RT_PRTHS (AS alias = qualifiedName)? + ; + +trendlineType + : SMA + | WMA + ; + +expandCommand + : EXPAND fieldExpression (AS alias = qualifiedName)? + ; + +flattenCommand + : FLATTEN fieldExpression (AS aliases = identifierSeq)? + ; + +appendcolCommand + : APPENDCOL (OVERRIDE EQUAL override = booleanLiteral)? LT_SQR_PRTHS commands (PIPE commands)* RT_SQR_PRTHS + ; + +appendCommand + : APPEND LT_SQR_PRTHS searchCommand? (PIPE commands)* RT_SQR_PRTHS + ; + kmeansCommand : KMEANS (kmeansParameter)* ; @@ -168,18 +490,96 @@ mlArg // clauses fromClause - : SOURCE EQUAL tableSourceClause - | INDEX EQUAL tableSourceClause + : SOURCE EQUAL tableOrSubqueryClause + | INDEX EQUAL tableOrSubqueryClause | SOURCE EQUAL tableFunction | INDEX EQUAL tableFunction + | SOURCE EQUAL dynamicSourceClause + | INDEX EQUAL dynamicSourceClause + ; + +tableOrSubqueryClause + : LT_SQR_PRTHS subSearch RT_SQR_PRTHS (AS alias = qualifiedName)? + | tableSourceClause ; tableSourceClause - : tableSource (COMMA tableSource)* + : tableSource (COMMA tableSource)* (AS alias = qualifiedName)? + ; + +dynamicSourceClause + : LT_SQR_PRTHS sourceReferences (COMMA sourceFilterArgs)? RT_SQR_PRTHS + ; + +sourceReferences + : sourceReference (COMMA sourceReference)* + ; + +sourceReference + : (CLUSTER)? wcQualifiedName + ; + +sourceFilterArgs + : sourceFilterArg (COMMA sourceFilterArg)* + ; + +sourceFilterArg + : ident EQUAL literalValue + | ident IN valueList + ; + +// join +joinCommand + : JOIN (joinOption)* (fieldList)? right = tableOrSubqueryClause + | sqlLikeJoinType? JOIN (joinOption)* sideAlias joinHintList? joinCriteria right = tableOrSubqueryClause + ; + +sqlLikeJoinType + : INNER + | CROSS + | (LEFT OUTER? | OUTER) + | RIGHT OUTER? + | FULL OUTER? + | LEFT? SEMI + | LEFT? ANTI + ; + +joinType + : INNER + | CROSS + | OUTER + | LEFT + | RIGHT + | FULL + | SEMI + | ANTI + ; + +sideAlias + : (LEFT EQUAL leftAlias = qualifiedName)? COMMA? (RIGHT EQUAL rightAlias = qualifiedName)? + ; + +joinCriteria + : (ON | WHERE) logicalExpression + ; + +joinHintList + : hintPair (COMMA? hintPair)* + ; + +hintPair + : leftHintKey = LEFT_HINT DOT ID EQUAL leftHintValue = ident #leftHint + | rightHintKey = RIGHT_HINT DOT ID EQUAL rightHintValue = ident #rightHint + ; + +joinOption + : OVERWRITE EQUAL booleanLiteral # overwriteOption + | TYPE EQUAL joinType # typeOption + | MAX EQUAL integerLiteral # maxOption ; renameClasue - : orignalField = wcFieldExpression AS renamedField = wcFieldExpression + : orignalField = renameFieldExpression AS renamedField = renameFieldExpression ; byClause @@ -190,6 +590,7 @@ statsByClause : BY fieldList | BY bySpanClause | BY bySpanClause COMMA fieldList + | BY fieldList COMMA bySpanClause ; bySpanClause @@ -205,7 +606,34 @@ sortbyClause ; evalClause - : fieldExpression EQUAL expression + : fieldExpression EQUAL logicalExpression + ; + +eventstatsAggTerm + : windowFunction (AS alias = wcFieldExpression)? + ; + +windowFunction + : windowFunctionName LT_PRTHS functionArgs RT_PRTHS + ; + +windowFunctionName + : statsFunctionName + | scalarWindowFunctionName + ; + +scalarWindowFunctionName + : ROW_NUMBER + | RANK + | DENSE_RANK + | PERCENT_RANK + | CUME_DIST + | FIRST + | LAST + | NTH + | NTILE + | DISTINCT_COUNT + | DC ; // aggregation terms @@ -215,11 +643,13 @@ statsAggTerm // aggregation functions statsFunction - : statsFunctionName LT_PRTHS valueExpression RT_PRTHS # statsFunctionCall - | COUNT LT_PRTHS RT_PRTHS # countAllFunctionCall - | (DISTINCT_COUNT | DC) LT_PRTHS valueExpression RT_PRTHS # distinctCountFunctionCall - | percentileAggFunction # percentileAggFunctionCall + : (COUNT | C) LT_PRTHS evalExpression RT_PRTHS # countEvalFunctionCall + | (COUNT | C) (LT_PRTHS RT_PRTHS)? # countAllFunctionCall + | PERCENTILE_SHORTCUT LT_PRTHS valueExpression RT_PRTHS # percentileShortcutFunctionCall + | (DISTINCT_COUNT | DC | DISTINCT_COUNT_APPROX) LT_PRTHS valueExpression RT_PRTHS # distinctCountFunctionCall | takeAggFunction # takeAggFunctionCall + | percentileApproxFunction # percentileApproxFunctionCall + | statsFunctionName LT_PRTHS functionArgs RT_PRTHS # statsFunctionCall ; statsFunctionName @@ -232,80 +662,83 @@ statsFunctionName | VAR_POP | STDDEV_SAMP | STDDEV_POP + | PERCENTILE + | PERCENTILE_APPROX + | MEDIAN + | LIST + | FIRST + | EARLIEST + | LATEST + | LAST ; takeAggFunction : TAKE LT_PRTHS fieldExpression (COMMA size = integerLiteral)? RT_PRTHS ; -percentileAggFunction - : PERCENTILE LESS value = integerLiteral GREATER LT_PRTHS aggField = fieldExpression RT_PRTHS +percentileApproxFunction + : (PERCENTILE | PERCENTILE_APPROX) LT_PRTHS aggField = valueExpression + COMMA percent = numericLiteral (COMMA compression = numericLiteral)? RT_PRTHS ; -// expressions -expression - : logicalExpression - | comparisonExpression - | valueExpression - ; +numericLiteral + : integerLiteral + | decimalLiteral + | doubleLiteral + | floatLiteral + ; +// predicates logicalExpression - : logicalOrExpression - ; - -logicalOrExpression - : logicalXorExpression (OR logicalXorExpression)* - ; - -logicalXorExpression - : logicalAndExpression (XOR logicalAndExpression)* - ; - -logicalAndExpression - : logicalNotExpression (AND? logicalNotExpression)* // Optional AND here is cleaner + : NOT logicalExpression # logicalNot + | left = logicalExpression AND right = logicalExpression # logicalAnd + | left = logicalExpression XOR right = logicalExpression # logicalXor + | left = logicalExpression OR right = logicalExpression # logicalOr + | expression # logicalExpr ; -logicalNotExpression - : NOT logicalNotExpression - | primaryLogicalExpression - ; - -primaryLogicalExpression - : comparisonExpression - | booleanExpression - | relevanceExpression - | LT_PRTHS logicalExpression RT_PRTHS - ; - -comparisonExpression - : left = valueExpression comparisonOperator right = valueExpression # compareExpr - | valueExpression IN valueList # inExpr +expression + : valueExpression # valueExpr + | relevanceExpression # relevanceExpr + | left = expression comparisonOperator right = expression # compareExpr + | expression NOT? IN valueList # inExpr + | expression NOT? BETWEEN expression AND expression # between ; valueExpression - : left = valueExpression binaryOperator = (STAR | DIVIDE | MODULE) right = valueExpression # binaryArithmetic - | left = valueExpression binaryOperator = (PLUS | MINUS) right = valueExpression # binaryArithmetic - | primaryExpression # valueExpressionDefault - | positionFunction # positionFunctionCall - | extractFunction # extractFunctionCall - | getFormatFunction # getFormatFunctionCall - | timestampFunction # timestampFunctionCall - | LT_PRTHS valueExpression RT_PRTHS # parentheticValueExpr - ; - -primaryExpression + : left = valueExpression binaryOperator = (STAR | DIVIDE | MODULE) right = valueExpression # binaryArithmetic + | left = valueExpression binaryOperator = (PLUS | MINUS) right = valueExpression # binaryArithmetic + | literalValue # literalValueExpr + | functionCall # functionCallExpr + | lambda # lambdaExpr + | LT_SQR_PRTHS subSearch RT_SQR_PRTHS # scalarSubqueryExpr + | valueExpression NOT? IN LT_SQR_PRTHS subSearch RT_SQR_PRTHS # inSubqueryExpr + | LT_PRTHS valueExpression (COMMA valueExpression)* RT_PRTHS NOT? IN LT_SQR_PRTHS subSearch RT_SQR_PRTHS # inSubqueryExpr + | EXISTS LT_SQR_PRTHS subSearch RT_SQR_PRTHS # existsSubqueryExpr + | fieldExpression # fieldExpr + | LT_PRTHS logicalExpression RT_PRTHS # nestedValueExpr + ; + +evalExpression + : EVAL LT_PRTHS logicalExpression RT_PRTHS + ; + +functionCall : evalFunctionCall | dataTypeFunctionCall - | fieldExpression - | literalValue + | positionFunctionCall + | caseFunctionCall + | timestampFunctionCall + | extractFunctionCall + | getFormatFunctionCall ; -positionFunction +positionFunctionCall : positionFunctionName LT_PRTHS functionArg IN functionArg RT_PRTHS ; -booleanExpression - : booleanFunctionCall +caseFunctionCall + : CASE LT_PRTHS logicalExpression COMMA valueExpression (COMMA logicalExpression COMMA valueExpression)* (ELSE valueExpression)? RT_PRTHS ; relevanceExpression @@ -320,7 +753,7 @@ singleFieldRelevanceFunction // Field is a list of columns multiFieldRelevanceFunction - : multiFieldRelevanceFunctionName LT_PRTHS LT_SQR_PRTHS field = relevanceFieldAndWeight (COMMA field = relevanceFieldAndWeight)* RT_SQR_PRTHS COMMA query = relevanceQuery (COMMA relevanceArg)* RT_PRTHS + : multiFieldRelevanceFunctionName LT_PRTHS (LT_SQR_PRTHS field = relevanceFieldAndWeight (COMMA field = relevanceFieldAndWeight)* RT_SQR_PRTHS COMMA)? query = relevanceQuery (COMMA relevanceArg)* RT_PRTHS ; // tables @@ -330,16 +763,12 @@ tableSource ; tableFunction - : qualifiedName LT_PRTHS functionArgs RT_PRTHS + : qualifiedName LT_PRTHS namedFunctionArgs RT_PRTHS ; // fields fieldList - : fieldExpression (COMMA fieldExpression)* - ; - -wcFieldList - : wcFieldExpression (COMMA wcFieldExpression)* + : fieldExpression ((COMMA)? fieldExpression)* ; sortField @@ -362,6 +791,16 @@ wcFieldExpression : wcQualifiedName ; +selectFieldExpression + : wcQualifiedName + | STAR + ; + +renameFieldExpression + : wcQualifiedName + | STAR + ; + // functions evalFunctionCall : evalFunctionName LT_PRTHS functionArgs RT_PRTHS @@ -369,12 +808,7 @@ evalFunctionCall // cast function dataTypeFunctionCall - : CAST LT_PRTHS expression AS convertedDataType RT_PRTHS - ; - -// boolean functions -booleanFunctionCall - : conditionFunctionBase LT_PRTHS functionArgs RT_PRTHS + : CAST LT_PRTHS logicalExpression AS convertedDataType RT_PRTHS ; convertedDataType @@ -388,23 +822,48 @@ convertedDataType | typeName = FLOAT | typeName = STRING | typeName = BOOLEAN + | typeName = IP + | typeName = JSON ; evalFunctionName : mathematicalFunctionName | dateTimeFunctionName | textFunctionName - | conditionFunctionBase + | conditionFunctionName + | flowControlFunctionName | systemFunctionName | positionFunctionName + | cryptographicFunctionName + | jsonFunctionName + | geoipFunctionName + | collectionFunctionName ; functionArgs : (functionArg (COMMA functionArg)*)? ; +namedFunctionArgs + : (namedFunctionArg (COMMA namedFunctionArg)*)? + ; + functionArg - : (ident EQUAL)? valueExpression + : functionArgExpression + ; + +namedFunctionArg + : (ident EQUAL)? functionArgExpression + ; + +functionArgExpression + : lambda + | logicalExpression + ; + +lambda + : ident ARROW logicalExpression + | LT_PRTHS ident (COMMA ident)+ RT_PRTHS ARROW logicalExpression ; relevanceArg @@ -456,6 +915,8 @@ relevanceFieldAndWeight relevanceFieldWeight : integerLiteral | decimalLiteral + | doubleLiteral + | floatLiteral ; relevanceField @@ -474,6 +935,10 @@ relevanceArgValue mathematicalFunctionName : ABS + | PLUS_FUCTION + | MINUS_FUCTION + | STAR_FUNCTION + | DIVIDE_FUNCTION | CBRT | CEIL | CEILING @@ -481,12 +946,13 @@ mathematicalFunctionName | CRC32 | E | EXP + | EXPM1 | FLOOR | LN | LOG - | LOG10 - | LOG2 + | LOG_WITH_BASE | MOD + | MODULUS | PI | POW | POWER @@ -495,22 +961,63 @@ mathematicalFunctionName | SIGN | SQRT | TRUNCATE + | RINT + | SIGNUM + | SUM + | AVG | trigonometricFunctionName ; +geoipFunctionName + : GEOIP + ; + +collectionFunctionName + : ARRAY + | ARRAY_LENGTH + | MVJOIN + | FORALL + | EXISTS + | FILTER + | TRANSFORM + | REDUCE + ; + + trigonometricFunctionName : ACOS | ASIN | ATAN | ATAN2 | COS + | COSH | COT | DEGREES | RADIANS | SIN + | SINH | TAN ; +jsonFunctionName + : JSON + | JSON_OBJECT + | JSON_ARRAY + | JSON_ARRAY_LENGTH + | JSON_EXTRACT + | JSON_KEYS + | JSON_SET + | JSON_DELETE + | JSON_APPEND + | JSON_EXTEND + ; + +cryptographicFunctionName + : MD5 + | SHA1 + | SHA2 + ; + dateTimeFunctionName : ADDDATE | ADDTIME @@ -577,9 +1084,10 @@ dateTimeFunctionName | WEEK_OF_YEAR | YEAR | YEARWEEK + | STRFTIME ; -getFormatFunction +getFormatFunctionCall : GET_FORMAT LT_PRTHS getFormatType COMMA functionArg RT_PRTHS ; @@ -590,7 +1098,7 @@ getFormatType | TIMESTAMP ; -extractFunction +extractFunctionCall : EXTRACT LT_PRTHS datetimePart FROM functionArg RT_PRTHS ; @@ -625,7 +1133,7 @@ datetimePart | complexDateTimePart ; -timestampFunction +timestampFunctionCall : timestampFunctionName LT_PRTHS simpleDateTimePart COMMA firstArg = functionArg COMMA secondArg = functionArg RT_PRTHS ; @@ -635,13 +1143,26 @@ timestampFunctionName ; // condition function return boolean value -conditionFunctionBase +conditionFunctionName : LIKE - | IF | ISNULL | ISNOTNULL + | CIDRMATCH + | REGEX_MATCH + | JSON_VALID + | ISPRESENT + | ISEMPTY + | ISBLANK + | EARLIEST + | LATEST + ; + +// flow control function return non-boolean value +flowControlFunctionName + : IF | IFNULL | NULLIF + | COALESCE ; systemFunctionName @@ -675,12 +1196,14 @@ positionFunctionName // operators comparisonOperator : EQUAL + | DOUBLE_EQUAL | NOT_EQUAL | LESS | NOT_LESS | GREATER | NOT_GREATER | REGEXP + | LIKE ; singleFieldRelevanceFunctionName @@ -702,6 +1225,8 @@ literalValue | stringLiteral | integerLiteral | decimalLiteral + | doubleLiteral + | floatLiteral | booleanLiteral | datetimeLiteral //#datetime ; @@ -723,6 +1248,14 @@ decimalLiteral : (PLUS | MINUS)? DECIMAL_LITERAL ; +doubleLiteral + : (PLUS | MINUS)? DOUBLE_LITERAL + ; + +floatLiteral + : (PLUS | MINUS)? FLOAT_LITERAL + ; + booleanLiteral : TRUE | FALSE @@ -788,6 +1321,20 @@ timespanUnit | MONTH | QUARTER | YEAR + | SEC + | SECS + | SECONDS + | MINS + | MINUTES + | HR + | HRS + | HOURS + | DAYS + | MON + | MONTHS + | US + | CS + | DS ; valueList @@ -806,6 +1353,11 @@ wcQualifiedName : wildcard (DOT wildcard)* # identsAsWildcardQualifiedName ; +identifierSeq + : qualifiedName (COMMA qualifiedName)* # identsAsQualifiedNameSeq + | LT_PRTHS qualifiedName (COMMA qualifiedName)* RT_PRTHS # identsAsQualifiedNameSeq + ; + ident : (DOT)? ID | BACKTICK ident BACKTICK @@ -825,50 +1377,59 @@ wildcard ; keywordsCanBeId + : searchableKeyWord + | IN + ; + +searchableKeyWord : D // OD SQL and ODBC special | timespanUnit | SPAN | evalFunctionName + | jsonFunctionName | relevanceArgName | intervalUnit - | dateTimeFunctionName - | textFunctionName - | mathematicalFunctionName - | positionFunctionName - // commands - | SEARCH - | DESCRIBE - | SHOW - | FROM - | WHERE - | FIELDS - | RENAME - | STATS - | DEDUP - | SORT - | EVAL - | HEAD - | TOP - | RARE - | PARSE - | METHOD + | trendlineType + | singleFieldRelevanceFunctionName + | multiFieldRelevanceFunctionName + | commandName + | collectionFunctionName | REGEX - | PUNCT - | GROK - | PATTERN - | PATTERNS - | NEW_FIELD - | KMEANS - | AD - | ML + | explainMode + | REGEXP // commands assist keywords + | CASE + | ELSE + | ARROW + | BETWEEN + | EXISTS | SOURCE | INDEX + | A + | ASC | DESC | DATASOURCES - // CLAUSEKEYWORDS - | SORTBY - // FIELDKEYWORDSAUTO + | FROM + | PATTERN + | NEW_FIELD + | METHOD + | VARIABLE_COUNT_THRESHOLD + | FREQUENCY_THRESHOLD_PERCENTAGE + | MAX_SAMPLE_COUNT + | BUFFER_LIMIT + | WITH + | REGEX + | PUNCT + | USING + | CAST + | GET_FORMAT + | EXTRACT + | INTERVAL + | PLUS + | MINUS + | OVERRIDE + // SORT FIELD KEYWORDS + | AUTO | STR | IP | NUM @@ -879,6 +1440,7 @@ keywordsCanBeId | PARTITIONS | ALLNUM | DELIM + | BUCKET_NULLABLE | CENTROIDS | ITERATIONS | DISTANCE_TYPE @@ -893,36 +1455,31 @@ keywordsCanBeId | TIME_ZONE | TRAINING_DATA_SIZE | ANOMALY_SCORE_THRESHOLD - // AGGREGATIONS - | AVG - | COUNT + | COUNTFIELD + | SHOWCOUNT + | PATH + | INPUT + | OUTPUT + + // AGGREGATIONS AND WINDOW + | statsFunctionName + | windowFunctionName | DISTINCT_COUNT + | DISTINCT_COUNT_APPROX | ESTDC | ESTDC_ERROR - | MAX | MEAN | MEDIAN - | MIN | MODE | RANGE | STDEV | STDEVP - | SUM | SUMSQ | VAR_SAMP | VAR_POP - | STDDEV_SAMP - | STDDEV_POP - | PERCENTILE | TAKE - | FIRST - | LAST | LIST | VALUES - | EARLIEST - | EARLIEST_TIME - | LATEST - | LATEST_TIME | PER_DAY | PER_HOUR | PER_MINUTE @@ -931,4 +1488,16 @@ keywordsCanBeId | SPARKLINE | C | DC + // JOIN TYPE + | OUTER + | INNER + | CROSS + | LEFT + | RIGHT + | FULL + | SEMI + | ANTI + | LEFT_HINT + | RIGHT_HINT + | PERCENTILE_SHORTCUT ; \ No newline at end of file diff --git a/packages/osd-monaco/package.json b/packages/osd-monaco/package.json index 55af40cce1fc..80541c54c157 100644 --- a/packages/osd-monaco/package.json +++ b/packages/osd-monaco/package.json @@ -11,7 +11,7 @@ "dependencies": { "regenerator-runtime": "^0.13.3", "monaco-editor": "^0.52.0", - "antlr4ng": "^3.0.4", + "antlr4ng": "^3.0.16", "@osd/antlr-grammar": "1.0.0" }, "devDependencies": { diff --git a/src/plugins/data/public/antlr/opensearch_ppl/code_completion.ts b/src/plugins/data/public/antlr/opensearch_ppl/code_completion.ts index 7f6b6f6ec536..a1a4901969a7 100644 --- a/src/plugins/data/public/antlr/opensearch_ppl/code_completion.ts +++ b/src/plugins/data/public/antlr/opensearch_ppl/code_completion.ts @@ -10,6 +10,7 @@ */ import { monaco } from '@osd/monaco'; +import { SimplifiedOpenSearchPPLLexer } from '@osd/antlr-grammar'; import { CursorPosition, OpenSearchPplAutocompleteResult } from '../shared/types'; import { fetchColumnValues, @@ -30,7 +31,6 @@ import { KEYWORD_ITEM_KIND_MAP, } from './constants'; import { Documentation } from './ppl_documentation'; - // Centralized function to generate appropriate insertion text based on context function getInsertText( text: string, @@ -265,6 +265,23 @@ export const getSimplifiedPPLSuggestions = async ({ }); } + // Handle single quote suggestions when suggestSingleQuotes flag is set + if (suggestions.suggestSingleQuotes) { + const singleQuoteDetails = SUPPORTED_NON_LITERAL_KEYWORDS.get( + SimplifiedOpenSearchPPLLexer.SQUOTA_STRING + ); + if (singleQuoteDetails) { + finalSuggestions.push({ + text: singleQuoteDetails.label, + insertText: singleQuoteDetails.insertText, + type: monaco.languages.CompletionItemKind.Keyword, + detail: SuggestionItemDetailsTags.Keyword, + insertTextRules: monaco.languages.CompletionItemInsertTextRule?.InsertAsSnippet, + sortText: singleQuoteDetails.sortText, + }); + } + } + // Fill in PPL keywords if (suggestions.suggestKeywords?.length) { const literalKeywords = suggestions.suggestKeywords.filter((sk) => sk.value); diff --git a/src/plugins/data/public/antlr/opensearch_ppl/constants.ts b/src/plugins/data/public/antlr/opensearch_ppl/constants.ts index 8ecd91da7100..515e43e2273e 100644 --- a/src/plugins/data/public/antlr/opensearch_ppl/constants.ts +++ b/src/plugins/data/public/antlr/opensearch_ppl/constants.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { OpenSearchPPLParser } from '@osd/antlr-grammar'; +import { SimplifiedOpenSearchPPLParser as OpenSearchPPLParser } from '@osd/antlr-grammar'; import { monaco } from '@osd/monaco'; import { SuggestionItemDetailsTags } from '../shared/constants'; @@ -29,11 +29,11 @@ export const PPL_SUGGESTION_IMPORTANCE = new Map< // OPERATORS - Highest priority [ OpenSearchPPLParser.PIPE, - { importance: '0', type: SuggestionItemDetailsTags.Operator, isFunction: false }, + { importance: '1', type: SuggestionItemDetailsTags.Operator, isFunction: false }, ], [ OpenSearchPPLParser.EQUAL, - { importance: '1', type: SuggestionItemDetailsTags.Operator, isFunction: false }, + { importance: '0', type: SuggestionItemDetailsTags.Operator, isFunction: false }, ], [ OpenSearchPPLParser.COMMA, @@ -205,6 +205,90 @@ export const PPL_SUGGESTION_IMPORTANCE = new Map< OpenSearchPPLParser.PATTERNS, { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, ], + [ + OpenSearchPPLParser.EXPLAIN, + { importance: '21', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.FIELD, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.TABLE, + { importance: '2', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.EVENTSTATS, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.BIN, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.SPATH, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.REGEX, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.REX, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.SED, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.PUNCT, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.PATTERN, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.NEW_FIELD, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.FILLNULL, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.FLATTEN, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.TRENDLINE, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.TIMECHART, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.APPENDCOL, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.EXPAND, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.SIMPLE_PATTERN, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.BRAIN, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.JOIN, + { importance: '3', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], // COMMAND ASSIST KEYWORDS [ @@ -235,6 +319,50 @@ export const PPL_SUGGESTION_IMPORTANCE = new Map< OpenSearchPPLParser.DATASOURCES, { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, ], + [ + OpenSearchPPLParser.USING, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.WITH, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.SIMPLE, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.STANDARD, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.COST, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.EXTENDED, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.OVERRIDE, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.OVERWRITE, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.ASC, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.A, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.D, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], // LOGICAL KEYWORDS [ @@ -271,7 +399,7 @@ export const PPL_SUGGESTION_IMPORTANCE = new Map< ], [ OpenSearchPPLParser.IN, - { importance: '5', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + { importance: '5', type: SuggestionItemDetailsTags.Operator, isFunction: false }, ], [ OpenSearchPPLParser.LIKE, @@ -525,15 +653,6 @@ export const PPL_SUGGESTION_IMPORTANCE = new Map< optionalParam: false, }, ], - [ - OpenSearchPPLParser.EARLIEST_TIME, - { - importance: '61', - type: SuggestionItemDetailsTags.AggregateFunction, - isFunction: true, - optionalParam: false, - }, - ], [ OpenSearchPPLParser.LATEST, { @@ -543,15 +662,6 @@ export const PPL_SUGGESTION_IMPORTANCE = new Map< optionalParam: false, }, ], - [ - OpenSearchPPLParser.LATEST_TIME, - { - importance: '61', - type: SuggestionItemDetailsTags.AggregateFunction, - isFunction: true, - optionalParam: false, - }, - ], [ OpenSearchPPLParser.RATE, { @@ -671,15 +781,6 @@ export const PPL_SUGGESTION_IMPORTANCE = new Map< optionalParam: false, }, ], - [ - OpenSearchPPLParser.LOG2, - { - importance: '7', - type: SuggestionItemDetailsTags.Function, - isFunction: true, - optionalParam: false, - }, - ], [ OpenSearchPPLParser.MOD, { @@ -1404,6 +1505,28 @@ export const PPL_SUGGESTION_IMPORTANCE = new Map< }, ], + // SPAN KEYWORDS + [ + OpenSearchPPLParser.BINS, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.MINSPAN, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.START, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.END, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + [ + OpenSearchPPLParser.ALIGNTIME, + { importance: '4', type: SuggestionItemDetailsTags.Keyword, isFunction: false }, + ], + // DATA TYPES [ OpenSearchPPLParser.INT, @@ -1452,6 +1575,92 @@ export const PPL_SUGGESTION_IMPORTANCE = new Map< { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, ], + // TIME UNITS + [ + OpenSearchPPLParser.MS, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.S, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.M, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.H, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.W, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.Q, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.Y, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.SEC, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.SECS, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.SECONDS, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.MINS, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.MINUTES, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.HR, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.HRS, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.HOURS, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.DAYS, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.MON, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.MONTHS, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.US, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.CS, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + [ + OpenSearchPPLParser.DS, + { importance: '95', type: SuggestionItemDetailsTags.Type, isFunction: false }, + ], + // DATASET TYPES [ OpenSearchPPLParser.DATAMODEL, @@ -1547,12 +1756,92 @@ export const PPL_SUGGESTION_IMPORTANCE = new Map< OpenSearchPPLParser.ANOMALY_SCORE_THRESHOLD, { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, ], + [ + OpenSearchPPLParser.VARIABLE_COUNT_THRESHOLD, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.FREQUENCY_THRESHOLD_PERCENTAGE, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.METHOD, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.MAX_SAMPLE_COUNT, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.MAX_MATCH, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.OFFSET_FIELD, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.BUFFER_LIMIT, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.LABEL, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.AGGREGATION, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.BUCKET_NULLABLE, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.APPEND, + { importance: '97', type: SuggestionItemDetailsTags.Command, isFunction: false }, + ], + [ + OpenSearchPPLParser.COUNTFIELD, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.SHOWCOUNT, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.LIMIT, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.USEOTHER, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.INPUT, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.OUTPUT, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.PATH, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.SMA, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], + [ + OpenSearchPPLParser.WMA, + { importance: '97', type: SuggestionItemDetailsTags.Arguments, isFunction: false }, + ], ]); export const SUPPORTED_NON_LITERAL_KEYWORDS = new Map< number, { insertText: string; label: string; sortText: string } ->([[OpenSearchPPLParser.SQUOTA_STRING, { insertText: `'$1'`, label: "''", sortText: '0' }]]); +>([[OpenSearchPPLParser.SQUOTA_STRING, { insertText: `'$1'`, label: "''", sortText: '97' }]]); // The icons for CompletionItemKind aren't configurable // Therefore we are mapping them into different CompletionItemKind for them to have different icons diff --git a/src/plugins/data/public/antlr/opensearch_ppl/simplified_ppl_grammar/opensearch_ppl_autocomplete.test.ts b/src/plugins/data/public/antlr/opensearch_ppl/simplified_ppl_grammar/opensearch_ppl_autocomplete.test.ts index 36b44f9dc551..197388f5c016 100644 --- a/src/plugins/data/public/antlr/opensearch_ppl/simplified_ppl_grammar/opensearch_ppl_autocomplete.test.ts +++ b/src/plugins/data/public/antlr/opensearch_ppl/simplified_ppl_grammar/opensearch_ppl_autocomplete.test.ts @@ -68,10 +68,13 @@ describe('processVisitedRules', () => { describe('Test Specific Rules', () => { // test for not suggesting if prev token is ID - it('RULE_tableIdent - should suggest sources or tables when rule is present', () => { + it('RULE_tableQualifiedName - should suggest sources or tables when rule is present and last token is not ID or BQUOTA_STRING', () => { const mockRules = new Map(); mockRules.set(OpenSearchPPLParser.RULE_tableQualifiedName, {}); - const tokenStream = createTokenStream([1]); + const tokenStream = createTokenStream([ + OpenSearchPPLParser.SOURCE, + OpenSearchPPLParser.EQUAL, + ]); // Not ID or BQUOTA_STRING const result = processVisitedRules(mockRules, 1, tokenStream); expect(result.suggestSourcesOrTables).toBe(SourceOrTableSuggestion.TABLES); @@ -89,80 +92,6 @@ describe('processVisitedRules', () => { const resultWithAs = processVisitedRules(mockRules, 2, tokenStream); expect(resultWithAs.suggestRenameAs).toBe(true); }); - - it('RULE_literalValue - should suggest values for column when rule is present', () => { - const mockRules = new Map(); - mockRules.set(OpenSearchPPLParser.RULE_literalValue, { startTokenIndex: 0 }); - const tokenStream = createTokenStream([ - { type: OpenSearchPPLParser.ID, text: 'columnName' }, - OpenSearchPPLParser.SPACE, - OpenSearchPPLParser.EQUAL, - OpenSearchPPLParser.SPACE, - ]); - - const result = processVisitedRules(mockRules, 4, tokenStream); - expect(result.suggestValuesForColumn).toBe('columnName'); - }); - - it('RULE_literalValue - should suggest values for column with dots in the name', () => { - const mockRules = new Map(); - mockRules.set(OpenSearchPPLParser.RULE_literalValue, { startTokenIndex: 0 }); - const tokenStream = createTokenStream([ - { type: OpenSearchPPLParser.ID, text: 'column' }, - { type: OpenSearchPPLParser.DOT, text: '.' }, - { type: OpenSearchPPLParser.ID, text: 'name' }, - OpenSearchPPLParser.SPACE, - OpenSearchPPLParser.EQUAL, - OpenSearchPPLParser.SPACE, - ]); - - const result = processVisitedRules(mockRules, 6, tokenStream); - expect(result.suggestValuesForColumn).toBe('column.name'); - }); - - it('RULE_literalValue - should suggest values for column with backticks in the name', () => { - const mockRules = new Map(); - mockRules.set(OpenSearchPPLParser.RULE_literalValue, { startTokenIndex: 0 }); - const tokenStream = createTokenStream([ - { type: OpenSearchPPLParser.BQUOTA_STRING, text: '`column`' }, - OpenSearchPPLParser.SPACE, - OpenSearchPPLParser.EQUAL, - OpenSearchPPLParser.SPACE, - ]); - - const result = processVisitedRules(mockRules, 4, tokenStream); - expect(result.suggestValuesForColumn).toBe('column'); - }); - - it('RULE_literalValue - should suggest values for column with dots and backticks in the name', () => { - const mockRules = new Map(); - mockRules.set(OpenSearchPPLParser.RULE_literalValue, { startTokenIndex: 0 }); - const tokenStream = createTokenStream([ - { type: OpenSearchPPLParser.BQUOTA_STRING, text: '`column`' }, - { type: OpenSearchPPLParser.DOT, text: '.' }, - { type: OpenSearchPPLParser.BQUOTA_STRING, text: '`name`' }, - OpenSearchPPLParser.SPACE, - OpenSearchPPLParser.EQUAL, - OpenSearchPPLParser.SPACE, - ]); - - const result = processVisitedRules(mockRules, 6, tokenStream); - expect(result.suggestValuesForColumn).toBe('column.name'); - }); - - it('RULE_literalValue - should suggest values for backticked column with dots inside', () => { - const mockRules = new Map(); - mockRules.set(OpenSearchPPLParser.RULE_literalValue, { startTokenIndex: 0 }); - const tokenStream = createTokenStream([ - { type: OpenSearchPPLParser.BQUOTA_STRING, text: '`column.name`' }, - OpenSearchPPLParser.SPACE, - OpenSearchPPLParser.EQUAL, - OpenSearchPPLParser.SPACE, - ]); - - const result = processVisitedRules(mockRules, 4, tokenStream); - expect(result.suggestValuesForColumn).toBe('column.name'); - }); }); }); diff --git a/src/plugins/data/public/antlr/opensearch_ppl/simplified_ppl_grammar/opensearch_ppl_autocomplete.ts b/src/plugins/data/public/antlr/opensearch_ppl/simplified_ppl_grammar/opensearch_ppl_autocomplete.ts index c645a37eb663..77c190392c4a 100644 --- a/src/plugins/data/public/antlr/opensearch_ppl/simplified_ppl_grammar/opensearch_ppl_autocomplete.ts +++ b/src/plugins/data/public/antlr/opensearch_ppl/simplified_ppl_grammar/opensearch_ppl_autocomplete.ts @@ -4,7 +4,7 @@ */ import * as c3 from 'antlr4-c3'; -import { ParseTree, Token, TokenStream } from 'antlr4ng'; +import { ParserRuleContext, Token, TokenStream } from 'antlr4ng'; import { SimplifiedOpenSearchPPLLexer as OpenSearchPPLLexer, SimplifiedOpenSearchPPLParser as OpenSearchPPLParser, @@ -27,8 +27,6 @@ const operatorsToInclude = [ OpenSearchPPLParser.PIPE, OpenSearchPPLParser.EQUAL, OpenSearchPPLParser.COMMA, - OpenSearchPPLParser.PLUS, - OpenSearchPPLParser.MINUS, OpenSearchPPLParser.EQUAL, OpenSearchPPLParser.NOT_EQUAL, OpenSearchPPLParser.LESS, @@ -37,8 +35,6 @@ const operatorsToInclude = [ OpenSearchPPLParser.NOT_GREATER, OpenSearchPPLParser.OR, OpenSearchPPLParser.AND, - OpenSearchPPLParser.XOR, - OpenSearchPPLParser.NOT, OpenSearchPPLParser.LT_PRTHS, OpenSearchPPLParser.RT_PRTHS, OpenSearchPPLParser.IN, @@ -57,8 +53,7 @@ const fieldRuleList = [ ]; export function getIgnoredTokens(): number[] { - // const tokens = [OpenSearchPPLParser.SPACE, OpenSearchPPLParser.EOF]; - const tokens = []; + const tokens = [OpenSearchPPLParser.AS, OpenSearchPPLParser.IN]; // Add explicitly ignored tokens here const firstOperatorIndex = OpenSearchPPLParser.MATCH; const lastOperatorIndex = OpenSearchPPLParser.ERROR_RECOGNITION; @@ -99,21 +94,34 @@ const tokenDictionary: any = { const rulesToVisit = new Set([ OpenSearchPPLParser.RULE_statsFunctionName, - OpenSearchPPLParser.RULE_percentileAggFunction, OpenSearchPPLParser.RULE_takeAggFunction, - OpenSearchPPLParser.RULE_getFormatFunction, - OpenSearchPPLParser.RULE_tableIdent, - OpenSearchPPLParser.RULE_positionFunctionName, - OpenSearchPPLParser.RULE_evalFunctionName, - OpenSearchPPLParser.RULE_literalValue, OpenSearchPPLParser.RULE_integerLiteral, OpenSearchPPLParser.RULE_decimalLiteral, OpenSearchPPLParser.RULE_keywordsCanBeId, OpenSearchPPLParser.RULE_renameClasue, OpenSearchPPLParser.RULE_qualifiedName, OpenSearchPPLParser.RULE_tableQualifiedName, + OpenSearchPPLParser.RULE_wcQualifiedName, + OpenSearchPPLParser.RULE_keywordsCanBeId, + OpenSearchPPLParser.RULE_positionFunctionName, + OpenSearchPPLParser.RULE_searchableKeyWord, + OpenSearchPPLParser.RULE_stringLiteral, + OpenSearchPPLParser.RULE_searchCommand, + OpenSearchPPLParser.RULE_searchComparisonOperator, + OpenSearchPPLParser.RULE_comparisonOperator, + OpenSearchPPLParser.RULE_positionFunctionName, + OpenSearchPPLParser.RULE_sqlLikeJoinType, ]); +const isAValidExpressionEndToken = (token: Token | undefined) => { + if (!token) { + return false; + } + const validExpressionEndTokens = new Set([tokenDictionary.ID, tokenDictionary.BACKTICK_QUOTE]); + + return validExpressionEndTokens.has(token.type); +}; + export function processVisitedRules( rules: c3.CandidatesCollection['rules'], cursorTokenIndex: number, @@ -125,13 +133,19 @@ export function processVisitedRules( let suggestFieldsInAggregateFunction = false; let suggestValuesForColumn: string | undefined; let suggestRenameAs: boolean = false; + let suggestSingleQuotes: boolean = false; const rerunWithoutRules: number[] = []; + const lastNonOperatorToken = findLastNonSpaceOperatorToken(tokenStream, cursorTokenIndex); + for (const [ruleId, rule] of rules) { const parentRuleList = rule.ruleList; switch (ruleId) { + case OpenSearchPPLParser.RULE_sqlLikeJoinType: + case OpenSearchPPLParser.RULE_positionFunctionName: case OpenSearchPPLParser.RULE_integerLiteral: case OpenSearchPPLParser.RULE_decimalLiteral: + case OpenSearchPPLParser.RULE_searchableKeyWord: case OpenSearchPPLParser.RULE_keywordsCanBeId: { break; } @@ -140,6 +154,29 @@ export function processVisitedRules( suggestAggregateFunctions = true; break; } + case OpenSearchPPLParser.RULE_comparisonOperator: + case OpenSearchPPLParser.RULE_searchComparisonOperator: { + const lastToken = findLastNonSpaceToken(tokenStream, cursorTokenIndex); + if (lastToken?.token && isAValidExpressionEndToken(lastToken?.token)) { + rerunWithoutRules.push(OpenSearchPPLParser.RULE_searchComparisonOperator); + rerunWithoutRules.push(OpenSearchPPLParser.RULE_comparisonOperator); + rerunWithoutRules.push(OpenSearchPPLParser.RULE_searchCommand); // Since this is the parent of Search Comparison + } + break; + } + case OpenSearchPPLParser.RULE_searchCommand: { + const firstTokenAfterPipe = findFirstNonSpaceTokenAfterPipe(tokenStream, cursorTokenIndex); + if ( + !firstTokenAfterPipe || + ![OpenSearchPPLParser.DESCRIBE, OpenSearchPPLParser.SHOW].includes( + firstTokenAfterPipe.token.type + ) + ) { + rerunWithoutRules.push(ruleId); + } + break; + } + case OpenSearchPPLParser.RULE_wcQualifiedName: case OpenSearchPPLParser.RULE_qualifiedName: { // Check if we're in a stats function context const isInStatsFunction = (parentRuleList ?? []).includes( @@ -168,10 +205,10 @@ export function processVisitedRules( } // handling the scenario if the last Token is ID, we Don't suggest Column except in the case the second last token is Source to handle the scenario source = tablename fieldname suggestions - if (lastTokenResult && lastTokenResult?.token.type === tokenDictionary.ID) { + if (lastNonOperatorToken && lastNonOperatorToken?.token.type === tokenDictionary.ID) { const secondLastTokenResult = findLastNonSpaceOperatorToken( tokenStream, - lastTokenResult.index + lastNonOperatorToken.index ); if (secondLastTokenResult?.token.type !== tokenDictionary.SOURCE) { break; @@ -181,7 +218,10 @@ export function processVisitedRules( break; } case OpenSearchPPLParser.RULE_tableQualifiedName: { - suggestSourcesOrTables = SourceOrTableSuggestion.TABLES; + const lastToken = findLastNonSpaceToken(tokenStream, cursorTokenIndex); + if (![tokenDictionary.ID, tokenDictionary.BQUOTA_STRING].includes(lastToken?.token.type)) { + suggestSourcesOrTables = SourceOrTableSuggestion.TABLES; + } break; } case OpenSearchPPLParser.RULE_renameClasue: { @@ -203,21 +243,21 @@ export function processVisitedRules( break; } - case OpenSearchPPLParser.RULE_literalValue: { + case OpenSearchPPLParser.RULE_stringLiteral: { // on its own, this rule would be triggered for relevance expressions and span. span // has its own rule, and relevance .... // todo: create span rule // todo: check if relevance expressions have incorrect behavior here if (cursorTokenIndex < 2) break; // should not happen due to grammar - let currentIndex = cursorTokenIndex - 1; + suggestSingleQuotes = true; + let currentIndex = cursorTokenIndex - 1; // get the last token that appears other than whitespace const lastToken = tokenStream.get(currentIndex).type === tokenDictionary.SPACE ? tokenStream.get(currentIndex - 1) : tokenStream.get(currentIndex); - // we only want to get the value if the very last token before WS is =, or // if its paren/comma and we pass by IN later. we don't need to check that we pass IN // because there is no valid syntax that will encounter the literal value rule with the @@ -236,7 +276,11 @@ export function processVisitedRules( while (currentIndex > -1) { const token = tokenStream.get(currentIndex); - if (!token || token.type === tokenDictionary.PIPE) { + if ( + !token || + token.type === tokenDictionary.PIPE || + token.type === tokenDictionary.SOURCE + ) { break; } @@ -276,6 +320,7 @@ export function processVisitedRules( suggestValuesForColumn, suggestRenameAs, rerunWithoutRules, + suggestSingleQuotes, }; } @@ -287,6 +332,7 @@ function findLastNonSpaceOperatorToken( for (let i = currentIndex - 1; i >= 0; i--) { const token = tokenStream.get(i); if ( + token && token.type !== OpenSearchPPLParser.SPACE && token.type !== OpenSearchPPLParser.EOF && !operatorsToInclude.includes(token.type) @@ -311,10 +357,65 @@ function findLastNonSpaceToken( return null; } +export function lastNonSpaceTokensContainSource( + tokenStream: TokenStream, + cursorIndex: number, + count: number = 2 +): boolean { + const tokens: Token[] = []; + let checked = 0; + + for (let i = cursorIndex - 1; i >= 0 && checked < count; i--) { + const token = tokenStream.get(i); + if (!token) continue; + + if (token.type !== OpenSearchPPLParser.SPACE && token.type !== OpenSearchPPLParser.EOF) { + tokens.push(token); + checked++; + } + } + + return tokens.some((t) => t.type === OpenSearchPPLParser.SOURCE); +} + +function findFirstNonSpaceTokenAfterPipe( + tokenStream: TokenStream, + cursorIndex: number +): { token: Token; index: number } | null { + let firstNonSpaceToken: { token: Token; index: number } | null = null; + + for (let i = cursorIndex - 1; i >= 0; i--) { + const token = tokenStream.get(i); + if (!token) continue; + + if (token.type !== OpenSearchPPLParser.SPACE && token.type !== OpenSearchPPLParser.EOF) { + firstNonSpaceToken = { token, index: i }; + + if (token.type === OpenSearchPPLParser.PIPE) { + // Found pipe, now find the first non-space token after it (moving forward) + for (let j = i + 1; j < tokenStream.size; j++) { + const nextToken = tokenStream.get(j); + if (!nextToken) break; + + if ( + nextToken.type !== OpenSearchPPLParser.SPACE && + nextToken.type !== OpenSearchPPLParser.EOF + ) { + return { token: nextToken, index: j }; + } + } + break; + } + } + } + + return firstNonSpaceToken; +} + export function getParseTree( parser: OpenSearchPPLParser, type?: 'from' | 'alter' | 'insert' | 'update' | 'select' -): ParseTree { +): ParserRuleContext { parser.buildParseTrees = true; if (!type) { return parser.root(); diff --git a/src/plugins/data/public/antlr/opensearch_ppl/simplified_ppl_grammar/symbol_table_parser.ts b/src/plugins/data/public/antlr/opensearch_ppl/simplified_ppl_grammar/symbol_table_parser.ts index e6ed988d9973..07a07ea612d9 100644 --- a/src/plugins/data/public/antlr/opensearch_ppl/simplified_ppl_grammar/symbol_table_parser.ts +++ b/src/plugins/data/public/antlr/opensearch_ppl/simplified_ppl_grammar/symbol_table_parser.ts @@ -82,10 +82,10 @@ export class PPLSymbolTableParser extends SimplifiedOpenSearchPPLParserVisitor { try { - const fieldList = this.extractFieldList(ctx.fieldList()); - + const fieldBodyContext = ctx.fieldsCommandBody().wcFieldList(); + const fieldList = this.extractWcFieldList(fieldBodyContext); if (fieldList.length > 0) { - const hasMinus = ctx.MINUS() !== null; + const hasMinus = ctx.fieldsCommandBody().MINUS() !== null; if (hasMinus) { fieldList.forEach((fieldName) => { @@ -278,6 +278,28 @@ export class PPLSymbolTableParser extends SimplifiedOpenSearchPPLParserVisitor this.extractFieldName(expr)) + .filter((name: string) => name.length > 0); + } catch (error) { + return []; + } + } + private extractFieldName(fieldExpr: any): string { if (!fieldExpr) return ''; @@ -298,16 +320,35 @@ export class PPLSymbolTableParser extends SimplifiedOpenSearchPPLParserVisitor( query: string ): P { const parser = new Parser(new CommonTokenStream(new Lexer(CharStream.fromString(query)))); + parser.interpreter.predictionMode = PredictionMode.SLL; parser.removeErrorListeners(); - parser.interpreter.predictionMode = PredictionMode.LL; // Handle more ambigious queries return parser; } diff --git a/src/plugins/data/public/antlr/shared/types.ts b/src/plugins/data/public/antlr/shared/types.ts index f8caa558a709..063a2c75473c 100644 --- a/src/plugins/data/public/antlr/shared/types.ts +++ b/src/plugins/data/public/antlr/shared/types.ts @@ -105,6 +105,7 @@ export interface OpenSearchPplAutocompleteResult extends AutocompleteResultBase suggestFieldsInAggregateFunction?: boolean; isInBackQuote?: boolean; isInQuote?: boolean; + suggestSingleQuotes?: boolean; } export enum TableOrViewSuggestion { diff --git a/src/plugins/data/public/antlr/shared/utils.ts b/src/plugins/data/public/antlr/shared/utils.ts index 0d69e3a2740c..d4791df7c533 100644 --- a/src/plugins/data/public/antlr/shared/utils.ts +++ b/src/plugins/data/public/antlr/shared/utils.ts @@ -6,7 +6,7 @@ import { from } from 'rxjs'; import { distinctUntilChanged, startWith, switchMap } from 'rxjs/operators'; import { CodeCompletionCore } from 'antlr4-c3'; -import { Lexer as LexerType, Parser as ParserType } from 'antlr4ng'; +import { Lexer as LexerType, ParserRuleContext, Parser as ParserType } from 'antlr4ng'; import { monaco } from '@osd/monaco'; import { HttpSetup } from 'opensearch-dashboards/public'; import { QueryStringContract } from '../../query'; @@ -298,7 +298,7 @@ const singleParseQuery = < parser.removeErrorListeners(); parser.addErrorListener(errorListener); - getParseTree(parser); + const parseTree = getParseTree(parser); const core = new CodeCompletionCore(parser); core.ignoredTokens = ignoredTokens; @@ -311,17 +311,20 @@ const singleParseQuery = < } const suggestKeywords: KeywordSuggestion[] = []; - const { tokens, rules } = core.collectCandidates(cursorTokenIndex, context); - tokens.forEach((_, tokenType) => { + + const { tokens, rules } = core.collectCandidates( + cursorTokenIndex, + (parseTree as unknown) as ParserRuleContext + ); + + tokens.forEach((producerRules, tokenType) => { // Literal keyword names are quoted const literalName = parser.vocabulary.getLiteralName(tokenType)?.replace(quotesRegex, '$1'); let symbolicName; if (!skipSymbolicKeywords) { symbolicName = parser.vocabulary.getSymbolicName(tokenType); } - if (!literalName && skipSymbolicKeywords) { - return; - } + if (!literalName && skipSymbolicKeywords) return; suggestKeywords.push({ value: literalName || '', @@ -353,7 +356,7 @@ export const parseQuery = < query, cursor, context, - skipSymbolicKeywords = true, // Set it to False to include Keywords(are defined as regex patterns) which don't have a literalName but have a SymbolicName + skipSymbolicKeywords = true, }: ParsingSubject): AutocompleteResultBase => { const result = singleParseQuery({ Lexer, @@ -369,14 +372,12 @@ export const parseQuery = < skipSymbolicKeywords, }); - if (!result.rerunWithoutRules) { - return result; - } + let rerunWithoutRules = result.rerunWithoutRules; - // go through each rule in list and run a singleParseQuery without it, combining results - result.rerunWithoutRules.forEach((rule) => { + while (rerunWithoutRules && rerunWithoutRules.length > 0) { + // Remove all unvisited rules from rulesToVisit at once const modifiedRulesToVisit = new Set(rulesToVisit); - modifiedRulesToVisit.delete(rule); + rerunWithoutRules.forEach((rule) => modifiedRulesToVisit.delete(rule)); const nextResult = singleParseQuery({ Lexer, @@ -392,19 +393,9 @@ export const parseQuery = < skipSymbolicKeywords, }); - // combine results from result and nextResult - // the combination logic is as follows: - // Array: it will combine the results of the array - // Boolean: we're operating under the assumption that it is a flag, so it needs to - // be kept 'on' in the combined result - // Undefined: we're looking at the type in the initial result, so we default to the - // latter result - // Any other type: we know this field isn't undefined, but the combination behavior - // is not significant yet, so we default to the initial result. More types could - // be added later if needed, but this is kept unobtrusive. + // merge logic for (const [field, value] of Object.entries(result)) { if (field === 'suggestColumns') { - // combine tables inside of suggestColumns if (result.suggestColumns || nextResult.suggestColumns) { result.suggestColumns = { tables: [ @@ -417,59 +408,46 @@ export const parseQuery = < } if (field === 'suggestKeywords') { - // combine suggestKeywords arrays with smarter deduplication const currentKeywords = result.suggestKeywords ?? []; const nextKeywords = nextResult.suggestKeywords ?? []; - - // Create a Map to handle deduplication by id, preferring existing entries const keywordMap = new Map(); - - // Add current keywords first (they take precedence) - currentKeywords.forEach((keyword) => { - if (keyword?.id !== undefined) { - keywordMap.set(keyword.id, keyword); - } + currentKeywords.forEach((kw) => { + if (kw?.id !== undefined) keywordMap.set(kw.id, kw); }); - - // Add next keywords only if they don't already exist - nextKeywords.forEach((keyword) => { - if (keyword?.id !== undefined && !keywordMap.has(keyword.id)) { - keywordMap.set(keyword.id, keyword); + nextKeywords.forEach((kw) => { + if (kw?.id !== undefined && !keywordMap.has(kw.id)) { + keywordMap.set(kw.id, kw); } }); - result.suggestKeywords = Array.from(keywordMap.values()); continue; } switch (typeof value) { case 'boolean': - // if a boolean is true, keep overall result true result[field as keyof A] ||= nextResult[field as keyof A]; break; case 'undefined': - // use the latter result result[field as keyof A] = nextResult[field as keyof A]; break; case 'object': if (Array.isArray(value)) { - // combine arrays const combined = [ ...(((result[field as keyof A] as unknown) as any[]) ?? []), ...(((nextResult[field as keyof A] as unknown) as any[]) ?? []), ]; - // ES6 magic to filter out duplicate objects based on id field ((result[field as keyof A] as unknown) as any[]) = combined.filter( (item, index, self) => index === self.findIndex((other) => other.id === item.id) ); - break; } + break; default: - // use the initial result break; } } - }); + + rerunWithoutRules = nextResult.rerunWithoutRules; + } return result; }; diff --git a/yarn.lock b/yarn.lock index f77763624eb3..e8bb7cdb3ec5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8629,22 +8629,22 @@ ansi-wrap@0.1.0, ansi-wrap@^0.1.0: resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= -antlr4-c3@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/antlr4-c3/-/antlr4-c3-3.4.1.tgz#2c2973af98b7e1ed9b5ad1fea9c41aa78e34240f" - integrity sha512-YLO/ncwUp8w2GNK/lnsYXtMkd8izHCWjxtk7EaTGIZq07THfvI5aHDuhls/RctX3EYDlM9zeTKdqn54eLYNglQ== +antlr4-c3@^3.4.3: + version "3.4.4" + resolved "https://registry.yarnpkg.com/antlr4-c3/-/antlr4-c3-3.4.4.tgz#79d9c18b73a333c10013b9245113909cc51fafdb" + integrity sha512-ixp1i17ypbRzZnffdarIfCVEXJwPydtDt61SHMGkc+UCD7rrbfvHESTMTgx8jFhUgKAgcHyt9060kQ8nU3vlxA== dependencies: - antlr4ng "^3.0.1" + antlr4ng "3.0.16" antlr4ng-cli@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/antlr4ng-cli/-/antlr4ng-cli-2.0.0.tgz#4f86f3c3818a2170aa1041d4e1633b489af00131" integrity sha512-oAt5OSSYhRQn1PgahtpAP4Vp3BApCoCqlzX7Q8ZUWWls4hX59ryYuu0t7Hwrnfk796OxP/vgIJaqxdltd/oEvQ== -antlr4ng@^3.0.1, antlr4ng@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/antlr4ng/-/antlr4ng-3.0.4.tgz#71a47e6148ae75f72fa5f27fbed5ef3462815c7c" - integrity sha512-u1Ww6wVv9hq70E9AaYe5qW3ba8hvnjJdO3ZsKnb3iJWFV/medLEEhbyWwXCvvD2ef0ptdaiIUgmaazS/WE6uyQ== +antlr4ng@3.0.16, antlr4ng@^3.0.16: + version "3.0.16" + resolved "https://registry.yarnpkg.com/antlr4ng/-/antlr4ng-3.0.16.tgz#2e9db4fde07293a4d48c6537a90f9c1a917cbaca" + integrity sha512-DQuJkC7kX3xunfF4K2KsWTSvoxxslv+FQp/WHQZTJSsH2Ec3QfFmrxC3Nky2ok9yglXn6nHM4zUaVDxcN5f6kA== any-base@^1.1.0: version "1.1.0"