From a026ae059297d732dd5af7af4a851c5fe55a3229 Mon Sep 17 00:00:00 2001 From: Hayden <58289241+HaydenOrz@users.noreply.github.com> Date: Wed, 17 May 2023 10:30:25 +0800 Subject: [PATCH] feat: complete Query statements of FlinkSQL (#93) * feat: add inlineDataValueClasue rule * test: update tests of select statements * feat: support flinksql window TVF grammar * test: flink sql windown TVF statement test * feat: support grouping sets grammar * test: window TVF Aggregation and Group Window Aggregation tests * test: supplemental selectAggregation with test cases * test: add Having statement test case * feat: support flinkSql over aggregation grammar * test: add over aggregation grammar test cases * test: flink sql join statement test cases * test: flink sql set Operations grammar test cases * test: flink sql limit clause test case * feat: remove allPlusUid and replace with uid * feat: support flink sql pattern recognition grammar * test: flink sql pattern recognition tests * feat: add flink sql with clause rule * test: flink sql with clasue select tests * feat: rebuild flink sql parser --- src/grammar/flinksql/FlinkSqlLexer.g4 | 25 +- src/grammar/flinksql/FlinkSqlParser.g4 | 193 +- src/lib/flinksql/FlinkSqlLexer.interp | 75 +- src/lib/flinksql/FlinkSqlLexer.tokens | 284 +- src/lib/flinksql/FlinkSqlLexer.ts | 2350 ++--- src/lib/flinksql/FlinkSqlParser.interp | 83 +- src/lib/flinksql/FlinkSqlParser.tokens | 284 +- src/lib/flinksql/FlinkSqlParser.ts | 8198 +++++++++++------ src/lib/flinksql/FlinkSqlParserListener.ts | 353 +- src/lib/flinksql/FlinkSqlParserVisitor.ts | 225 +- .../flinksql/syntax/fixtures/select.sql | 13 + .../syntax/fixtures/selectAggregation.sql | 122 + .../syntax/fixtures/selectDistinct.sql | 7 + .../flinksql/syntax/fixtures/selectJoin.sql | 128 + .../fixtures/selectPatternRecognition.sql | 165 + .../syntax/fixtures/selectSetOperations.sql | 28 + .../syntax/fixtures/selectWindowTVF.sql | 52 + .../syntax/fixtures/selectWithClause.sql | 7 + .../flinksql/syntax/selectStatement.test.ts | 82 + 19 files changed, 8188 insertions(+), 4486 deletions(-) create mode 100644 test/parser/flinksql/syntax/fixtures/select.sql create mode 100644 test/parser/flinksql/syntax/fixtures/selectAggregation.sql create mode 100644 test/parser/flinksql/syntax/fixtures/selectDistinct.sql create mode 100644 test/parser/flinksql/syntax/fixtures/selectJoin.sql create mode 100644 test/parser/flinksql/syntax/fixtures/selectPatternRecognition.sql create mode 100644 test/parser/flinksql/syntax/fixtures/selectSetOperations.sql create mode 100644 test/parser/flinksql/syntax/fixtures/selectWindowTVF.sql create mode 100644 test/parser/flinksql/syntax/fixtures/selectWithClause.sql create mode 100644 test/parser/flinksql/syntax/selectStatement.test.ts diff --git a/src/grammar/flinksql/FlinkSqlLexer.g4 b/src/grammar/flinksql/FlinkSqlLexer.g4 index 43c54d9..cde0ed3 100644 --- a/src/grammar/flinksql/FlinkSqlLexer.g4 +++ b/src/grammar/flinksql/FlinkSqlLexer.g4 @@ -273,6 +273,24 @@ ENFORCED: 'ENFORCED'; METADATA: 'METADATA'; VIRTUAL: 'VIRTUAL'; ZONE: 'ZONE'; +TUMBLE: 'TUMBLE'; +HOP: 'HOP'; +CUMULATE: 'CUMULATE'; +DESCRIPTOR: 'DESCRIPTOR'; +TIMECOL: 'TIMECOL'; +SIZE: 'SIZE'; +OFFSET: 'OFFSET'; +STEP: 'STEP'; +SLIDE: 'SLIDE'; +SESSION: 'SESSION'; +MATCH_RECOGNIZE: 'MATCH_RECOGNIZE'; +MEASURES: 'MEASURES'; +PATTERN: 'PATTERN'; +ONE: 'ONE'; +PER: 'PER'; +KW_SKIP: 'SKIP'; +PAST: 'PAST'; +DEFINE: 'DEFINE'; // DATA TYPE Keywords @@ -330,6 +348,8 @@ LS_BRACKET: '['; RS_BRACKET: ']'; LR_BRACKET: '('; RR_BRACKET: ')'; +LB_BRACKET: '{'; +RB_BRACKET: '}'; COMMA: ','; SEMICOLON: ';'; AT_SIGN: '@'; @@ -345,8 +365,8 @@ PENCENT_SIGN: '%'; DOUBLE_VERTICAL_SIGN: '||'; DOUBLE_HYPNEN_SIGN: '--'; SLASH_SIGN: '/'; +QUESTION_MARK_SIGN: '?'; DOT_ID: '.' ID_LITERAL_FRAG; -PLUS_DOT_ID: (':' | '.') PLUS_ID_LITERAL; STRING_LITERAL: DQUOTA_STRING | SQUOTA_STRING | BQUOTA_STRING; DIG_LITERAL: DEC_DIGIT+; REAL_LITERAL: (DEC_DIGIT+)? '.' DEC_DIGIT+ @@ -355,14 +375,13 @@ REAL_LITERAL: (DEC_DIGIT+)? '.' DEC_DIGIT+ | DEC_DIGIT+ EXPONENT_NUM_PART; BIT_STRING: BIT_STRING_L; ID_LITERAL: ID_LITERAL_FRAG; -PLUS_ID_LITERAL: PLUS_ID_LITERAL_FRAG; FILE_PATH: FILE_PATH_STRING; +DOUBLE_ARROW: '=>'; fragment FILE_PATH_STRING: ([/\\] (~([/\\ ]))*)+; fragment JAR_FILE_PARTTARN: '`' ( '\\'. | '``' | ~('`'|'\\'))* '`'; fragment EXPONENT_NUM_PART: 'E' [-+]? DEC_DIGIT+; fragment ID_LITERAL_FRAG: [A-Z_0-9a-z]*?[A-Z_a-z]+?[A-Z_0-9a-z]*; -fragment PLUS_ID_LITERAL_FRAG: [A-Z_0-9a-z*@#^$%&{}]*?[A-Z_a-z*@#^$%&{}]+?[A-Z_0-9a-z*@#^$%&{}]*; fragment DEC_DIGIT: [0-9]; fragment DEC_LETTER: [A-Za-z]; fragment DQUOTA_STRING: '"' ( '\\'. | '""' | ~('"'| '\\') )* '"'; diff --git a/src/grammar/flinksql/FlinkSqlParser.g4 b/src/grammar/flinksql/FlinkSqlParser.g4 index 76cb248..142e334 100644 --- a/src/grammar/flinksql/FlinkSqlParser.g4 +++ b/src/grammar/flinksql/FlinkSqlParser.g4 @@ -134,7 +134,7 @@ physicalColumnDefinition ; columnName - : plusUid | expression + : uid | expression ; columnNameList @@ -380,7 +380,7 @@ insertMulStatement queryStatement : valuesCaluse - | WITH withItem (COMMA withItem)* queryStatement + | withClause queryStatement | '(' queryStatement ')' | left=queryStatement operator=(INTERSECT | UNION | EXCEPT) ALL? right=queryStatement orderByCaluse? limitClause? | selectClause orderByCaluse? limitClause? @@ -391,6 +391,10 @@ valuesCaluse : VALUES expression (COMMA expression )* ; +withClause + : WITH withItem (COMMA withItem)* + ; + withItem : withItemName (LR_BRACKET columnName (COMMA columnName)* RR_BRACKET)? AS LR_BRACKET queryStatement RR_BRACKET ; @@ -401,6 +405,7 @@ withItemName selectStatement : selectClause fromClause whereClause? groupByClause? havingClause? windowClause? + | selectClause fromClause matchRecognizeClause ; selectClause @@ -408,7 +413,13 @@ selectClause ; projectItemDefinition - : expression (AS? expression)? + : overWindowItem + | expression (AS? expression)? + ; + +overWindowItem + : primaryExpression OVER windowSpec AS strictIdentifier + | primaryExpression OVER errorCapturingIdentifier AS strictIdentifier ; fromClause @@ -419,6 +430,8 @@ tableExpression : tableReference (COMMA tableReference)* | tableExpression NATURAL? (LEFT | RIGHT | FULL | INNER)? OUTER? JOIN tableExpression joinCondition? | tableExpression CROSS JOIN tableExpression + | inlineDataValueClause + | windoTVFClause ; tableReference @@ -444,6 +457,46 @@ dateTimeExpression : expression ; +inlineDataValueClause + : LR_BRACKET valuesDefinition RR_BRACKET tableAlias + ; + +windoTVFClause + : TABLE LR_BRACKET windowTVFExression RR_BRACKET + ; + +windowTVFExression + : windoTVFName LR_BRACKET windowTVFParam (COMMA windowTVFParam)* RR_BRACKET + ; + +windoTVFName + : TUMBLE + | HOP + | CUMULATE +; + +windowTVFParam + : TABLE timeAttrColumn + | columnDescriptor + | timeIntervalExpression + | DATA DOUBLE_ARROW TABLE timeAttrColumn + | TIMECOL DOUBLE_ARROW columnDescriptor + | timeIntervalParamName DOUBLE_ARROW timeIntervalExpression + ; + +timeIntervalParamName + : DATA + | TIMECOL + | SIZE + | OFFSET + | STEP + | SLIDE + ; + +columnDescriptor + : DESCRIPTOR LR_BRACKET uid RR_BRACKET + ; + joinCondition : ON booleanExpression | USING LR_BRACKET uid (COMMA uid)* RR_BRACKET @@ -459,29 +512,40 @@ groupByClause groupItemDefinition : expression + | groupWindowFunction | LR_BRACKET RR_BRACKET | LR_BRACKET expression (COMMA expression)* RR_BRACKET - | CUBE LR_BRACKET expression (COMMA expression)* RR_BRACKET - | ROLLUP LR_BRACKET expression (COMMA expression)* RR_BRACKET - | GROUPING SETS LR_BRACKET groupItemDefinition (COMMA groupItemDefinition)* RR_BRACKET + | groupingSetsNotaionName LR_BRACKET expression (COMMA expression)* RR_BRACKET + | groupingSets LR_BRACKET groupItemDefinition (COMMA groupItemDefinition)* RR_BRACKET + ; + +groupingSets + : GROUPING SETS + ; + +groupingSetsNotaionName + : CUBE + | ROLLUP + ; + +groupWindowFunction + : groupWindowFunctionName LR_BRACKET timeAttrColumn COMMA timeIntervalExpression RR_BRACKET + ; + +groupWindowFunctionName + : TUMBLE + | HOP + | SESSION + ; + +timeAttrColumn + : uid ; havingClause : HAVING booleanExpression ; -orderByCaluse - : ORDER BY orderItemDefition (COMMA orderItemDefition)* - ; - -orderItemDefition - : expression (ASC | DESC)? - ; - -limitClause - : LIMIT (ALL | limit=expression) - ; - windowClause : WINDOW namedWindow (',' namedWindow)* ; @@ -492,26 +556,99 @@ namedWindow windowSpec : name=errorCapturingIdentifier? - '(' - (ORDER BY sortItem (',' sortItem)*)? - (PARTITION BY expression (',' expression)*)? + LR_BRACKET + partitionByClause? + orderByCaluse? windowFrame? - ')' + RR_BRACKET ; -sortItem +matchRecognizeClause + : MATCH_RECOGNIZE + LR_BRACKET + partitionByClause? + orderByCaluse? + measuresClause? + outputMode? + afterMatchStrategy? + patternDefination? + patternVariablesDefination + RR_BRACKET ( AS? strictIdentifier )? + ; + +orderByCaluse + : ORDER BY orderItemDefition (COMMA orderItemDefition)* + ; + +orderItemDefition : expression ordering=(ASC | DESC)? (NULLS nullOrder=(LAST | FIRST))? ; +limitClause + : LIMIT (ALL | limit=expression) + ; + +partitionByClause + : PARTITION BY expression (COMMA expression)* + ; + +quantifiers + : (ASTERISK_SIGN) + | (ADD_SIGN) + | (QUESTION_MARK_SIGN) + | (LB_BRACKET DIG_LITERAL COMMA DIG_LITERAL RB_BRACKET) + | (LB_BRACKET DIG_LITERAL COMMA RB_BRACKET) + | (LB_BRACKET COMMA DIG_LITERAL RB_BRACKET) + ; + +measuresClause + : MEASURES projectItemDefinition (COMMA projectItemDefinition)* + ; + +patternDefination + : PATTERN + LR_BRACKET + patternVariable+ + RR_BRACKET + withinClause? + ; + +patternVariable + : unquotedIdentifier quantifiers? + ; + +outputMode + : ALL ROWS PER MATCH + | ONE ROW PER MATCH + ; + +afterMatchStrategy + : AFTER MATCH KW_SKIP PAST LAST ROW + | AFTER MATCH KW_SKIP TO NEXT ROW + | AFTER MATCH KW_SKIP TO LAST unquotedIdentifier + | AFTER MATCH KW_SKIP TO FIRST unquotedIdentifier + ; + +patternVariablesDefination + : DEFINE projectItemDefinition (COMMA projectItemDefinition)* + ; + windowFrame - : RANGE frameBound - | ROWS frameBound + : RANGE BETWEEN timeIntervalExpression frameBound + | ROWS BETWEEN DIG_LITERAL frameBound ; frameBound - : expression PRECEDING + : PRECEDING AND CURRENT ROW ; +withinClause + : WITHIN timeIntervalExpression + ; + +timeIntervalExpression + : INTERVAL STRING_LITERAL ID_LITERAL + ; // expression @@ -686,10 +823,6 @@ uid : ID_LITERAL DOT_ID*? ; -plusUid // 匹配 xxx.$xx xx:xxxx 等字符 - : (ID_LITERAL | PLUS_ID_LITERAL) (DOT_ID | PLUS_DOT_ID)*? - ; - withOption : WITH tablePropertyList ; diff --git a/src/lib/flinksql/FlinkSqlLexer.interp b/src/lib/flinksql/FlinkSqlLexer.interp index 4bb63a2..b4b3446 100644 --- a/src/lib/flinksql/FlinkSqlLexer.interp +++ b/src/lib/flinksql/FlinkSqlLexer.interp @@ -264,6 +264,24 @@ null 'METADATA' 'VIRTUAL' 'ZONE' +'TUMBLE' +'HOP' +'CUMULATE' +'DESCRIPTOR' +'TIMECOL' +'SIZE' +'OFFSET' +'STEP' +'SLIDE' +'SESSION' +'MATCH_RECOGNIZE' +'MEASURES' +'PATTERN' +'ONE' +'PER' +'SKIP' +'PAST' +'DEFINE' 'STRING' 'ARRAY' 'MAP' @@ -305,6 +323,8 @@ null ']' '(' ')' +'{' +'}' ',' ';' '@' @@ -320,6 +340,7 @@ null '||' '--' '/' +'?' null null null @@ -327,8 +348,7 @@ null null null null -null -null +'=>' token symbolic names: null @@ -596,6 +616,24 @@ ENFORCED METADATA VIRTUAL ZONE +TUMBLE +HOP +CUMULATE +DESCRIPTOR +TIMECOL +SIZE +OFFSET +STEP +SLIDE +SESSION +MATCH_RECOGNIZE +MEASURES +PATTERN +ONE +PER +KW_SKIP +PAST +DEFINE STRING ARRAY MAP @@ -637,6 +675,8 @@ LS_BRACKET RS_BRACKET LR_BRACKET RR_BRACKET +LB_BRACKET +RB_BRACKET COMMA SEMICOLON AT_SIGN @@ -652,15 +692,15 @@ PENCENT_SIGN DOUBLE_VERTICAL_SIGN DOUBLE_HYPNEN_SIGN SLASH_SIGN +QUESTION_MARK_SIGN DOT_ID -PLUS_DOT_ID STRING_LITERAL DIG_LITERAL REAL_LITERAL BIT_STRING ID_LITERAL -PLUS_ID_LITERAL FILE_PATH +DOUBLE_ARROW rule names: SPACE @@ -927,6 +967,24 @@ ENFORCED METADATA VIRTUAL ZONE +TUMBLE +HOP +CUMULATE +DESCRIPTOR +TIMECOL +SIZE +OFFSET +STEP +SLIDE +SESSION +MATCH_RECOGNIZE +MEASURES +PATTERN +ONE +PER +KW_SKIP +PAST +DEFINE STRING ARRAY MAP @@ -968,6 +1026,8 @@ LS_BRACKET RS_BRACKET LR_BRACKET RR_BRACKET +LB_BRACKET +RB_BRACKET COMMA SEMICOLON AT_SIGN @@ -983,20 +1043,19 @@ PENCENT_SIGN DOUBLE_VERTICAL_SIGN DOUBLE_HYPNEN_SIGN SLASH_SIGN +QUESTION_MARK_SIGN DOT_ID -PLUS_DOT_ID STRING_LITERAL DIG_LITERAL REAL_LITERAL BIT_STRING ID_LITERAL -PLUS_ID_LITERAL FILE_PATH +DOUBLE_ARROW FILE_PATH_STRING JAR_FILE_PARTTARN EXPONENT_NUM_PART ID_LITERAL_FRAG -PLUS_ID_LITERAL_FRAG DEC_DIGIT DEC_LETTER DQUOTA_STRING @@ -1012,4 +1071,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 329, 3142, 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, 5, 1, 693, 8, 1, 10, 1, 12, 1, 696, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 3, 2, 706, 8, 2, 1, 2, 5, 2, 709, 8, 2, 10, 2, 12, 2, 712, 9, 2, 1, 2, 3, 2, 715, 8, 2, 1, 2, 1, 2, 3, 2, 719, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 725, 8, 2, 1, 2, 1, 2, 3, 2, 729, 8, 2, 3, 2, 731, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 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, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 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, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 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, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 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, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 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, 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, 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, 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, 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, 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, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 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, 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, 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, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 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, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 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, 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, 103, 1, 103, 1, 103, 1, 103, 1, 103, 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, 106, 1, 106, 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, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 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, 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, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 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, 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, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 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, 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, 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, 142, 1, 142, 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, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 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, 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, 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, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 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, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 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, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 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, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 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, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 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, 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, 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, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 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, 237, 1, 237, 1, 237, 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, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 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, 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, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 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, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 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, 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, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 257, 1, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 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, 262, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 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, 269, 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, 270, 1, 270, 1, 270, 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, 274, 1, 274, 1, 274, 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, 275, 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, 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, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 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, 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, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 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, 292, 1, 292, 1, 293, 1, 293, 1, 294, 1, 294, 1, 295, 1, 295, 1, 296, 1, 296, 1, 297, 1, 297, 1, 298, 1, 298, 1, 299, 1, 299, 1, 300, 1, 300, 1, 301, 1, 301, 1, 302, 1, 302, 1, 303, 1, 303, 1, 304, 1, 304, 1, 305, 1, 305, 1, 306, 1, 306, 1, 307, 1, 307, 1, 308, 1, 308, 1, 309, 1, 309, 1, 310, 1, 310, 1, 311, 1, 311, 1, 312, 1, 312, 1, 313, 1, 313, 1, 314, 1, 314, 1, 315, 1, 315, 1, 316, 1, 316, 1, 317, 1, 317, 1, 317, 1, 318, 1, 318, 1, 318, 1, 319, 1, 319, 1, 320, 1, 320, 1, 320, 1, 321, 1, 321, 1, 321, 1, 322, 1, 322, 1, 322, 3, 322, 2964, 8, 322, 1, 323, 4, 323, 2967, 8, 323, 11, 323, 12, 323, 2968, 1, 324, 4, 324, 2972, 8, 324, 11, 324, 12, 324, 2973, 3, 324, 2976, 8, 324, 1, 324, 1, 324, 4, 324, 2980, 8, 324, 11, 324, 12, 324, 2981, 1, 324, 4, 324, 2985, 8, 324, 11, 324, 12, 324, 2986, 1, 324, 1, 324, 1, 324, 1, 324, 4, 324, 2993, 8, 324, 11, 324, 12, 324, 2994, 3, 324, 2997, 8, 324, 1, 324, 1, 324, 4, 324, 3001, 8, 324, 11, 324, 12, 324, 3002, 1, 324, 1, 324, 1, 324, 4, 324, 3008, 8, 324, 11, 324, 12, 324, 3009, 1, 324, 1, 324, 3, 324, 3014, 8, 324, 1, 325, 1, 325, 1, 326, 1, 326, 1, 327, 1, 327, 1, 328, 1, 328, 1, 329, 1, 329, 5, 329, 3026, 8, 329, 10, 329, 12, 329, 3029, 9, 329, 4, 329, 3031, 8, 329, 11, 329, 12, 329, 3032, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 5, 330, 3041, 8, 330, 10, 330, 12, 330, 3044, 9, 330, 1, 330, 1, 330, 1, 331, 1, 331, 3, 331, 3050, 8, 331, 1, 331, 4, 331, 3053, 8, 331, 11, 331, 12, 331, 3054, 1, 332, 5, 332, 3058, 8, 332, 10, 332, 12, 332, 3061, 9, 332, 1, 332, 4, 332, 3064, 8, 332, 11, 332, 12, 332, 3065, 1, 332, 5, 332, 3069, 8, 332, 10, 332, 12, 332, 3072, 9, 332, 1, 333, 5, 333, 3075, 8, 333, 10, 333, 12, 333, 3078, 9, 333, 1, 333, 4, 333, 3081, 8, 333, 11, 333, 12, 333, 3082, 1, 333, 5, 333, 3086, 8, 333, 10, 333, 12, 333, 3089, 9, 333, 1, 334, 1, 334, 1, 335, 1, 335, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 5, 336, 3101, 8, 336, 10, 336, 12, 336, 3104, 9, 336, 1, 336, 1, 336, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 5, 337, 3114, 8, 337, 10, 337, 12, 337, 3117, 9, 337, 1, 337, 1, 337, 1, 338, 1, 338, 1, 338, 4, 338, 3124, 8, 338, 11, 338, 12, 338, 3125, 1, 338, 1, 338, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 5, 339, 3136, 8, 339, 10, 339, 12, 339, 3139, 9, 339, 1, 339, 1, 339, 5, 694, 3059, 3065, 3076, 3082, 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, 0, 661, 0, 663, 0, 665, 0, 667, 0, 669, 0, 671, 0, 673, 0, 675, 0, 677, 0, 679, 0, 1, 0, 16, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 10, 10, 13, 13, 2, 0, 46, 46, 58, 58, 2, 0, 47, 47, 92, 92, 3, 0, 32, 32, 47, 47, 92, 92, 2, 0, 92, 92, 96, 96, 2, 0, 43, 43, 45, 45, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 7, 0, 35, 38, 42, 42, 48, 57, 64, 90, 94, 95, 97, 123, 125, 125, 6, 0, 35, 38, 42, 42, 64, 90, 94, 95, 97, 123, 125, 125, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 1, 0, 48, 49, 3176, 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, 1, 682, 1, 0, 0, 0, 3, 688, 1, 0, 0, 0, 5, 730, 1, 0, 0, 0, 7, 734, 1, 0, 0, 0, 9, 741, 1, 0, 0, 0, 11, 746, 1, 0, 0, 0, 13, 750, 1, 0, 0, 0, 15, 753, 1, 0, 0, 0, 17, 757, 1, 0, 0, 0, 19, 761, 1, 0, 0, 0, 21, 770, 1, 0, 0, 0, 23, 776, 1, 0, 0, 0, 25, 782, 1, 0, 0, 0, 27, 785, 1, 0, 0, 0, 29, 794, 1, 0, 0, 0, 31, 799, 1, 0, 0, 0, 33, 804, 1, 0, 0, 0, 35, 811, 1, 0, 0, 0, 37, 817, 1, 0, 0, 0, 39, 824, 1, 0, 0, 0, 41, 830, 1, 0, 0, 0, 43, 833, 1, 0, 0, 0, 45, 836, 1, 0, 0, 0, 47, 840, 1, 0, 0, 0, 49, 843, 1, 0, 0, 0, 51, 847, 1, 0, 0, 0, 53, 850, 1, 0, 0, 0, 55, 857, 1, 0, 0, 0, 57, 865, 1, 0, 0, 0, 59, 870, 1, 0, 0, 0, 61, 876, 1, 0, 0, 0, 63, 879, 1, 0, 0, 0, 65, 884, 1, 0, 0, 0, 67, 890, 1, 0, 0, 0, 69, 896, 1, 0, 0, 0, 71, 900, 1, 0, 0, 0, 73, 905, 1, 0, 0, 0, 75, 909, 1, 0, 0, 0, 77, 918, 1, 0, 0, 0, 79, 923, 1, 0, 0, 0, 81, 928, 1, 0, 0, 0, 83, 933, 1, 0, 0, 0, 85, 938, 1, 0, 0, 0, 87, 944, 1, 0, 0, 0, 89, 948, 1, 0, 0, 0, 91, 953, 1, 0, 0, 0, 93, 959, 1, 0, 0, 0, 95, 965, 1, 0, 0, 0, 97, 971, 1, 0, 0, 0, 99, 976, 1, 0, 0, 0, 101, 981, 1, 0, 0, 0, 103, 987, 1, 0, 0, 0, 105, 992, 1, 0, 0, 0, 107, 997, 1, 0, 0, 0, 109, 1005, 1, 0, 0, 0, 111, 1008, 1, 0, 0, 0, 113, 1014, 1, 0, 0, 0, 115, 1022, 1, 0, 0, 0, 117, 1029, 1, 0, 0, 0, 119, 1034, 1, 0, 0, 0, 121, 1044, 1, 0, 0, 0, 123, 1050, 1, 0, 0, 0, 125, 1055, 1, 0, 0, 0, 127, 1065, 1, 0, 0, 0, 129, 1075, 1, 0, 0, 0, 131, 1085, 1, 0, 0, 0, 133, 1093, 1, 0, 0, 0, 135, 1099, 1, 0, 0, 0, 137, 1105, 1, 0, 0, 0, 139, 1110, 1, 0, 0, 0, 141, 1115, 1, 0, 0, 0, 143, 1123, 1, 0, 0, 0, 145, 1130, 1, 0, 0, 0, 147, 1137, 1, 0, 0, 0, 149, 1143, 1, 0, 0, 0, 151, 1153, 1, 0, 0, 0, 153, 1158, 1, 0, 0, 0, 155, 1166, 1, 0, 0, 0, 157, 1174, 1, 0, 0, 0, 159, 1184, 1, 0, 0, 0, 161, 1191, 1, 0, 0, 0, 163, 1198, 1, 0, 0, 0, 165, 1205, 1, 0, 0, 0, 167, 1210, 1, 0, 0, 0, 169, 1219, 1, 0, 0, 0, 171, 1227, 1, 0, 0, 0, 173, 1232, 1, 0, 0, 0, 175, 1247, 1, 0, 0, 0, 177, 1267, 1, 0, 0, 0, 179, 1282, 1, 0, 0, 0, 181, 1289, 1, 0, 0, 0, 183, 1297, 1, 0, 0, 0, 185, 1305, 1, 0, 0, 0, 187, 1310, 1, 0, 0, 0, 189, 1315, 1, 0, 0, 0, 191, 1320, 1, 0, 0, 0, 193, 1327, 1, 0, 0, 0, 195, 1335, 1, 0, 0, 0, 197, 1342, 1, 0, 0, 0, 199, 1346, 1, 0, 0, 0, 201, 1353, 1, 0, 0, 0, 203, 1361, 1, 0, 0, 0, 205, 1372, 1, 0, 0, 0, 207, 1382, 1, 0, 0, 0, 209, 1387, 1, 0, 0, 0, 211, 1393, 1, 0, 0, 0, 213, 1400, 1, 0, 0, 0, 215, 1409, 1, 0, 0, 0, 217, 1419, 1, 0, 0, 0, 219, 1422, 1, 0, 0, 0, 221, 1434, 1, 0, 0, 0, 223, 1443, 1, 0, 0, 0, 225, 1449, 1, 0, 0, 0, 227, 1456, 1, 0, 0, 0, 229, 1463, 1, 0, 0, 0, 231, 1471, 1, 0, 0, 0, 233, 1475, 1, 0, 0, 0, 235, 1481, 1, 0, 0, 0, 237, 1486, 1, 0, 0, 0, 239, 1492, 1, 0, 0, 0, 241, 1504, 1, 0, 0, 0, 243, 1511, 1, 0, 0, 0, 245, 1520, 1, 0, 0, 0, 247, 1526, 1, 0, 0, 0, 249, 1533, 1, 0, 0, 0, 251, 1538, 1, 0, 0, 0, 253, 1546, 1, 0, 0, 0, 255, 1555, 1, 0, 0, 0, 257, 1558, 1, 0, 0, 0, 259, 1567, 1, 0, 0, 0, 261, 1575, 1, 0, 0, 0, 263, 1581, 1, 0, 0, 0, 265, 1585, 1, 0, 0, 0, 267, 1596, 1, 0, 0, 0, 269, 1603, 1, 0, 0, 0, 271, 1607, 1, 0, 0, 0, 273, 1610, 1, 0, 0, 0, 275, 1615, 1, 0, 0, 0, 277, 1623, 1, 0, 0, 0, 279, 1634, 1, 0, 0, 0, 281, 1644, 1, 0, 0, 0, 283, 1654, 1, 0, 0, 0, 285, 1661, 1, 0, 0, 0, 287, 1667, 1, 0, 0, 0, 289, 1673, 1, 0, 0, 0, 291, 1689, 1, 0, 0, 0, 293, 1702, 1, 0, 0, 0, 295, 1715, 1, 0, 0, 0, 297, 1725, 1, 0, 0, 0, 299, 1732, 1, 0, 0, 0, 301, 1743, 1, 0, 0, 0, 303, 1754, 1, 0, 0, 0, 305, 1760, 1, 0, 0, 0, 307, 1765, 1, 0, 0, 0, 309, 1773, 1, 0, 0, 0, 311, 1779, 1, 0, 0, 0, 313, 1789, 1, 0, 0, 0, 315, 1798, 1, 0, 0, 0, 317, 1807, 1, 0, 0, 0, 319, 1815, 1, 0, 0, 0, 321, 1821, 1, 0, 0, 0, 323, 1827, 1, 0, 0, 0, 325, 1835, 1, 0, 0, 0, 327, 1840, 1, 0, 0, 0, 329, 1850, 1, 0, 0, 0, 331, 1857, 1, 0, 0, 0, 333, 1867, 1, 0, 0, 0, 335, 1875, 1, 0, 0, 0, 337, 1881, 1, 0, 0, 0, 339, 1895, 1, 0, 0, 0, 341, 1908, 1, 0, 0, 0, 343, 1916, 1, 0, 0, 0, 345, 1923, 1, 0, 0, 0, 347, 1930, 1, 0, 0, 0, 349, 1942, 1, 0, 0, 0, 351, 1951, 1, 0, 0, 0, 353, 1960, 1, 0, 0, 0, 355, 1968, 1, 0, 0, 0, 357, 1978, 1, 0, 0, 0, 359, 1989, 1, 0, 0, 0, 361, 1995, 1, 0, 0, 0, 363, 2003, 1, 0, 0, 0, 365, 2015, 1, 0, 0, 0, 367, 2022, 1, 0, 0, 0, 369, 2030, 1, 0, 0, 0, 371, 2041, 1, 0, 0, 0, 373, 2050, 1, 0, 0, 0, 375, 2060, 1, 0, 0, 0, 377, 2067, 1, 0, 0, 0, 379, 2073, 1, 0, 0, 0, 381, 2085, 1, 0, 0, 0, 383, 2098, 1, 0, 0, 0, 385, 2107, 1, 0, 0, 0, 387, 2117, 1, 0, 0, 0, 389, 2121, 1, 0, 0, 0, 391, 2130, 1, 0, 0, 0, 393, 2138, 1, 0, 0, 0, 395, 2146, 1, 0, 0, 0, 397, 2151, 1, 0, 0, 0, 399, 2162, 1, 0, 0, 0, 401, 2174, 1, 0, 0, 0, 403, 2183, 1, 0, 0, 0, 405, 2191, 1, 0, 0, 0, 407, 2198, 1, 0, 0, 0, 409, 2204, 1, 0, 0, 0, 411, 2209, 1, 0, 0, 0, 413, 2216, 1, 0, 0, 0, 415, 2221, 1, 0, 0, 0, 417, 2228, 1, 0, 0, 0, 419, 2236, 1, 0, 0, 0, 421, 2243, 1, 0, 0, 0, 423, 2250, 1, 0, 0, 0, 425, 2255, 1, 0, 0, 0, 427, 2262, 1, 0, 0, 0, 429, 2267, 1, 0, 0, 0, 431, 2273, 1, 0, 0, 0, 433, 2285, 1, 0, 0, 0, 435, 2296, 1, 0, 0, 0, 437, 2309, 1, 0, 0, 0, 439, 2315, 1, 0, 0, 0, 441, 2323, 1, 0, 0, 0, 443, 2329, 1, 0, 0, 0, 445, 2336, 1, 0, 0, 0, 447, 2341, 1, 0, 0, 0, 449, 2347, 1, 0, 0, 0, 451, 2354, 1, 0, 0, 0, 453, 2364, 1, 0, 0, 0, 455, 2371, 1, 0, 0, 0, 457, 2377, 1, 0, 0, 0, 459, 2382, 1, 0, 0, 0, 461, 2389, 1, 0, 0, 0, 463, 2392, 1, 0, 0, 0, 465, 2399, 1, 0, 0, 0, 467, 2409, 1, 0, 0, 0, 469, 2419, 1, 0, 0, 0, 471, 2431, 1, 0, 0, 0, 473, 2443, 1, 0, 0, 0, 475, 2453, 1, 0, 0, 0, 477, 2464, 1, 0, 0, 0, 479, 2472, 1, 0, 0, 0, 481, 2481, 1, 0, 0, 0, 483, 2486, 1, 0, 0, 0, 485, 2492, 1, 0, 0, 0, 487, 2499, 1, 0, 0, 0, 489, 2503, 1, 0, 0, 0, 491, 2508, 1, 0, 0, 0, 493, 2521, 1, 0, 0, 0, 495, 2541, 1, 0, 0, 0, 497, 2561, 1, 0, 0, 0, 499, 2572, 1, 0, 0, 0, 501, 2588, 1, 0, 0, 0, 503, 2605, 1, 0, 0, 0, 505, 2612, 1, 0, 0, 0, 507, 2621, 1, 0, 0, 0, 509, 2627, 1, 0, 0, 0, 511, 2632, 1, 0, 0, 0, 513, 2640, 1, 0, 0, 0, 515, 2647, 1, 0, 0, 0, 517, 2651, 1, 0, 0, 0, 519, 2658, 1, 0, 0, 0, 521, 2670, 1, 0, 0, 0, 523, 2679, 1, 0, 0, 0, 525, 2688, 1, 0, 0, 0, 527, 2696, 1, 0, 0, 0, 529, 2701, 1, 0, 0, 0, 531, 2708, 1, 0, 0, 0, 533, 2714, 1, 0, 0, 0, 535, 2718, 1, 0, 0, 0, 537, 2723, 1, 0, 0, 0, 539, 2731, 1, 0, 0, 0, 541, 2738, 1, 0, 0, 0, 543, 2748, 1, 0, 0, 0, 545, 2754, 1, 0, 0, 0, 547, 2762, 1, 0, 0, 0, 549, 2766, 1, 0, 0, 0, 551, 2774, 1, 0, 0, 0, 553, 2782, 1, 0, 0, 0, 555, 2791, 1, 0, 0, 0, 557, 2795, 1, 0, 0, 0, 559, 2803, 1, 0, 0, 0, 561, 2810, 1, 0, 0, 0, 563, 2816, 1, 0, 0, 0, 565, 2823, 1, 0, 0, 0, 567, 2828, 1, 0, 0, 0, 569, 2833, 1, 0, 0, 0, 571, 2843, 1, 0, 0, 0, 573, 2857, 1, 0, 0, 0, 575, 2866, 1, 0, 0, 0, 577, 2874, 1, 0, 0, 0, 579, 2878, 1, 0, 0, 0, 581, 2882, 1, 0, 0, 0, 583, 2887, 1, 0, 0, 0, 585, 2896, 1, 0, 0, 0, 587, 2898, 1, 0, 0, 0, 589, 2900, 1, 0, 0, 0, 591, 2902, 1, 0, 0, 0, 593, 2904, 1, 0, 0, 0, 595, 2906, 1, 0, 0, 0, 597, 2908, 1, 0, 0, 0, 599, 2910, 1, 0, 0, 0, 601, 2912, 1, 0, 0, 0, 603, 2914, 1, 0, 0, 0, 605, 2916, 1, 0, 0, 0, 607, 2918, 1, 0, 0, 0, 609, 2920, 1, 0, 0, 0, 611, 2922, 1, 0, 0, 0, 613, 2924, 1, 0, 0, 0, 615, 2926, 1, 0, 0, 0, 617, 2928, 1, 0, 0, 0, 619, 2930, 1, 0, 0, 0, 621, 2932, 1, 0, 0, 0, 623, 2934, 1, 0, 0, 0, 625, 2936, 1, 0, 0, 0, 627, 2938, 1, 0, 0, 0, 629, 2940, 1, 0, 0, 0, 631, 2942, 1, 0, 0, 0, 633, 2944, 1, 0, 0, 0, 635, 2946, 1, 0, 0, 0, 637, 2949, 1, 0, 0, 0, 639, 2952, 1, 0, 0, 0, 641, 2954, 1, 0, 0, 0, 643, 2957, 1, 0, 0, 0, 645, 2963, 1, 0, 0, 0, 647, 2966, 1, 0, 0, 0, 649, 3013, 1, 0, 0, 0, 651, 3015, 1, 0, 0, 0, 653, 3017, 1, 0, 0, 0, 655, 3019, 1, 0, 0, 0, 657, 3021, 1, 0, 0, 0, 659, 3030, 1, 0, 0, 0, 661, 3034, 1, 0, 0, 0, 663, 3047, 1, 0, 0, 0, 665, 3059, 1, 0, 0, 0, 667, 3076, 1, 0, 0, 0, 669, 3090, 1, 0, 0, 0, 671, 3092, 1, 0, 0, 0, 673, 3094, 1, 0, 0, 0, 675, 3107, 1, 0, 0, 0, 677, 3120, 1, 0, 0, 0, 679, 3129, 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, 5, 47, 0, 0, 689, 690, 5, 42, 0, 0, 690, 694, 1, 0, 0, 0, 691, 693, 9, 0, 0, 0, 692, 691, 1, 0, 0, 0, 693, 696, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 694, 692, 1, 0, 0, 0, 695, 697, 1, 0, 0, 0, 696, 694, 1, 0, 0, 0, 697, 698, 5, 42, 0, 0, 698, 699, 5, 47, 0, 0, 699, 700, 1, 0, 0, 0, 700, 701, 6, 1, 0, 0, 701, 4, 1, 0, 0, 0, 702, 703, 5, 45, 0, 0, 703, 706, 5, 45, 0, 0, 704, 706, 5, 35, 0, 0, 705, 702, 1, 0, 0, 0, 705, 704, 1, 0, 0, 0, 706, 710, 1, 0, 0, 0, 707, 709, 8, 1, 0, 0, 708, 707, 1, 0, 0, 0, 709, 712, 1, 0, 0, 0, 710, 708, 1, 0, 0, 0, 710, 711, 1, 0, 0, 0, 711, 718, 1, 0, 0, 0, 712, 710, 1, 0, 0, 0, 713, 715, 5, 13, 0, 0, 714, 713, 1, 0, 0, 0, 714, 715, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 719, 5, 10, 0, 0, 717, 719, 5, 0, 0, 1, 718, 714, 1, 0, 0, 0, 718, 717, 1, 0, 0, 0, 719, 731, 1, 0, 0, 0, 720, 721, 5, 45, 0, 0, 721, 722, 5, 45, 0, 0, 722, 728, 1, 0, 0, 0, 723, 725, 5, 13, 0, 0, 724, 723, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 729, 5, 10, 0, 0, 727, 729, 5, 0, 0, 1, 728, 724, 1, 0, 0, 0, 728, 727, 1, 0, 0, 0, 729, 731, 1, 0, 0, 0, 730, 705, 1, 0, 0, 0, 730, 720, 1, 0, 0, 0, 731, 732, 1, 0, 0, 0, 732, 733, 6, 2, 0, 0, 733, 6, 1, 0, 0, 0, 734, 735, 5, 83, 0, 0, 735, 736, 5, 69, 0, 0, 736, 737, 5, 76, 0, 0, 737, 738, 5, 69, 0, 0, 738, 739, 5, 67, 0, 0, 739, 740, 5, 84, 0, 0, 740, 8, 1, 0, 0, 0, 741, 742, 5, 70, 0, 0, 742, 743, 5, 82, 0, 0, 743, 744, 5, 79, 0, 0, 744, 745, 5, 77, 0, 0, 745, 10, 1, 0, 0, 0, 746, 747, 5, 65, 0, 0, 747, 748, 5, 68, 0, 0, 748, 749, 5, 68, 0, 0, 749, 12, 1, 0, 0, 0, 750, 751, 5, 65, 0, 0, 751, 752, 5, 83, 0, 0, 752, 14, 1, 0, 0, 0, 753, 754, 5, 65, 0, 0, 754, 755, 5, 76, 0, 0, 755, 756, 5, 76, 0, 0, 756, 16, 1, 0, 0, 0, 757, 758, 5, 65, 0, 0, 758, 759, 5, 78, 0, 0, 759, 760, 5, 89, 0, 0, 760, 18, 1, 0, 0, 0, 761, 762, 5, 68, 0, 0, 762, 763, 5, 73, 0, 0, 763, 764, 5, 83, 0, 0, 764, 765, 5, 84, 0, 0, 765, 766, 5, 73, 0, 0, 766, 767, 5, 78, 0, 0, 767, 768, 5, 67, 0, 0, 768, 769, 5, 84, 0, 0, 769, 20, 1, 0, 0, 0, 770, 771, 5, 87, 0, 0, 771, 772, 5, 72, 0, 0, 772, 773, 5, 69, 0, 0, 773, 774, 5, 82, 0, 0, 774, 775, 5, 69, 0, 0, 775, 22, 1, 0, 0, 0, 776, 777, 5, 71, 0, 0, 777, 778, 5, 82, 0, 0, 778, 779, 5, 79, 0, 0, 779, 780, 5, 85, 0, 0, 780, 781, 5, 80, 0, 0, 781, 24, 1, 0, 0, 0, 782, 783, 5, 66, 0, 0, 783, 784, 5, 89, 0, 0, 784, 26, 1, 0, 0, 0, 785, 786, 5, 71, 0, 0, 786, 787, 5, 82, 0, 0, 787, 788, 5, 79, 0, 0, 788, 789, 5, 85, 0, 0, 789, 790, 5, 80, 0, 0, 790, 791, 5, 73, 0, 0, 791, 792, 5, 78, 0, 0, 792, 793, 5, 71, 0, 0, 793, 28, 1, 0, 0, 0, 794, 795, 5, 83, 0, 0, 795, 796, 5, 69, 0, 0, 796, 797, 5, 84, 0, 0, 797, 798, 5, 83, 0, 0, 798, 30, 1, 0, 0, 0, 799, 800, 5, 67, 0, 0, 800, 801, 5, 85, 0, 0, 801, 802, 5, 66, 0, 0, 802, 803, 5, 69, 0, 0, 803, 32, 1, 0, 0, 0, 804, 805, 5, 82, 0, 0, 805, 806, 5, 79, 0, 0, 806, 807, 5, 76, 0, 0, 807, 808, 5, 76, 0, 0, 808, 809, 5, 85, 0, 0, 809, 810, 5, 80, 0, 0, 810, 34, 1, 0, 0, 0, 811, 812, 5, 79, 0, 0, 812, 813, 5, 82, 0, 0, 813, 814, 5, 68, 0, 0, 814, 815, 5, 69, 0, 0, 815, 816, 5, 82, 0, 0, 816, 36, 1, 0, 0, 0, 817, 818, 5, 72, 0, 0, 818, 819, 5, 65, 0, 0, 819, 820, 5, 86, 0, 0, 820, 821, 5, 73, 0, 0, 821, 822, 5, 78, 0, 0, 822, 823, 5, 71, 0, 0, 823, 38, 1, 0, 0, 0, 824, 825, 5, 76, 0, 0, 825, 826, 5, 73, 0, 0, 826, 827, 5, 77, 0, 0, 827, 828, 5, 73, 0, 0, 828, 829, 5, 84, 0, 0, 829, 40, 1, 0, 0, 0, 830, 831, 5, 65, 0, 0, 831, 832, 5, 84, 0, 0, 832, 42, 1, 0, 0, 0, 833, 834, 5, 79, 0, 0, 834, 835, 5, 82, 0, 0, 835, 44, 1, 0, 0, 0, 836, 837, 5, 65, 0, 0, 837, 838, 5, 78, 0, 0, 838, 839, 5, 68, 0, 0, 839, 46, 1, 0, 0, 0, 840, 841, 5, 73, 0, 0, 841, 842, 5, 78, 0, 0, 842, 48, 1, 0, 0, 0, 843, 844, 5, 78, 0, 0, 844, 845, 5, 79, 0, 0, 845, 846, 5, 84, 0, 0, 846, 50, 1, 0, 0, 0, 847, 848, 5, 78, 0, 0, 848, 849, 5, 79, 0, 0, 849, 52, 1, 0, 0, 0, 850, 851, 5, 69, 0, 0, 851, 852, 5, 88, 0, 0, 852, 853, 5, 73, 0, 0, 853, 854, 5, 83, 0, 0, 854, 855, 5, 84, 0, 0, 855, 856, 5, 83, 0, 0, 856, 54, 1, 0, 0, 0, 857, 858, 5, 66, 0, 0, 858, 859, 5, 69, 0, 0, 859, 860, 5, 84, 0, 0, 860, 861, 5, 87, 0, 0, 861, 862, 5, 69, 0, 0, 862, 863, 5, 69, 0, 0, 863, 864, 5, 78, 0, 0, 864, 56, 1, 0, 0, 0, 865, 866, 5, 76, 0, 0, 866, 867, 5, 73, 0, 0, 867, 868, 5, 75, 0, 0, 868, 869, 5, 69, 0, 0, 869, 58, 1, 0, 0, 0, 870, 871, 5, 82, 0, 0, 871, 872, 5, 76, 0, 0, 872, 873, 5, 73, 0, 0, 873, 874, 5, 75, 0, 0, 874, 875, 5, 69, 0, 0, 875, 60, 1, 0, 0, 0, 876, 877, 5, 73, 0, 0, 877, 878, 5, 83, 0, 0, 878, 62, 1, 0, 0, 0, 879, 880, 5, 84, 0, 0, 880, 881, 5, 82, 0, 0, 881, 882, 5, 85, 0, 0, 882, 883, 5, 69, 0, 0, 883, 64, 1, 0, 0, 0, 884, 885, 5, 70, 0, 0, 885, 886, 5, 65, 0, 0, 886, 887, 5, 76, 0, 0, 887, 888, 5, 83, 0, 0, 888, 889, 5, 69, 0, 0, 889, 66, 1, 0, 0, 0, 890, 891, 5, 78, 0, 0, 891, 892, 5, 85, 0, 0, 892, 893, 5, 76, 0, 0, 893, 894, 5, 76, 0, 0, 894, 895, 5, 83, 0, 0, 895, 68, 1, 0, 0, 0, 896, 897, 5, 65, 0, 0, 897, 898, 5, 83, 0, 0, 898, 899, 5, 67, 0, 0, 899, 70, 1, 0, 0, 0, 900, 901, 5, 68, 0, 0, 901, 902, 5, 69, 0, 0, 902, 903, 5, 83, 0, 0, 903, 904, 5, 67, 0, 0, 904, 72, 1, 0, 0, 0, 905, 906, 5, 70, 0, 0, 906, 907, 5, 79, 0, 0, 907, 908, 5, 82, 0, 0, 908, 74, 1, 0, 0, 0, 909, 910, 5, 73, 0, 0, 910, 911, 5, 78, 0, 0, 911, 912, 5, 84, 0, 0, 912, 913, 5, 69, 0, 0, 913, 914, 5, 82, 0, 0, 914, 915, 5, 86, 0, 0, 915, 916, 5, 65, 0, 0, 916, 917, 5, 76, 0, 0, 917, 76, 1, 0, 0, 0, 918, 919, 5, 67, 0, 0, 919, 920, 5, 65, 0, 0, 920, 921, 5, 83, 0, 0, 921, 922, 5, 69, 0, 0, 922, 78, 1, 0, 0, 0, 923, 924, 5, 87, 0, 0, 924, 925, 5, 72, 0, 0, 925, 926, 5, 69, 0, 0, 926, 927, 5, 78, 0, 0, 927, 80, 1, 0, 0, 0, 928, 929, 5, 84, 0, 0, 929, 930, 5, 72, 0, 0, 930, 931, 5, 69, 0, 0, 931, 932, 5, 78, 0, 0, 932, 82, 1, 0, 0, 0, 933, 934, 5, 69, 0, 0, 934, 935, 5, 76, 0, 0, 935, 936, 5, 83, 0, 0, 936, 937, 5, 69, 0, 0, 937, 84, 1, 0, 0, 0, 938, 939, 5, 66, 0, 0, 939, 940, 5, 69, 0, 0, 940, 941, 5, 71, 0, 0, 941, 942, 5, 73, 0, 0, 942, 943, 5, 78, 0, 0, 943, 86, 1, 0, 0, 0, 944, 945, 5, 69, 0, 0, 945, 946, 5, 78, 0, 0, 946, 947, 5, 68, 0, 0, 947, 88, 1, 0, 0, 0, 948, 949, 5, 74, 0, 0, 949, 950, 5, 79, 0, 0, 950, 951, 5, 73, 0, 0, 951, 952, 5, 78, 0, 0, 952, 90, 1, 0, 0, 0, 953, 954, 5, 67, 0, 0, 954, 955, 5, 82, 0, 0, 955, 956, 5, 79, 0, 0, 956, 957, 5, 83, 0, 0, 957, 958, 5, 83, 0, 0, 958, 92, 1, 0, 0, 0, 959, 960, 5, 79, 0, 0, 960, 961, 5, 85, 0, 0, 961, 962, 5, 84, 0, 0, 962, 963, 5, 69, 0, 0, 963, 964, 5, 82, 0, 0, 964, 94, 1, 0, 0, 0, 965, 966, 5, 73, 0, 0, 966, 967, 5, 78, 0, 0, 967, 968, 5, 78, 0, 0, 968, 969, 5, 69, 0, 0, 969, 970, 5, 82, 0, 0, 970, 96, 1, 0, 0, 0, 971, 972, 5, 76, 0, 0, 972, 973, 5, 69, 0, 0, 973, 974, 5, 70, 0, 0, 974, 975, 5, 84, 0, 0, 975, 98, 1, 0, 0, 0, 976, 977, 5, 83, 0, 0, 977, 978, 5, 69, 0, 0, 978, 979, 5, 77, 0, 0, 979, 980, 5, 73, 0, 0, 980, 100, 1, 0, 0, 0, 981, 982, 5, 82, 0, 0, 982, 983, 5, 73, 0, 0, 983, 984, 5, 71, 0, 0, 984, 985, 5, 72, 0, 0, 985, 986, 5, 84, 0, 0, 986, 102, 1, 0, 0, 0, 987, 988, 5, 70, 0, 0, 988, 989, 5, 85, 0, 0, 989, 990, 5, 76, 0, 0, 990, 991, 5, 76, 0, 0, 991, 104, 1, 0, 0, 0, 992, 993, 5, 85, 0, 0, 993, 994, 5, 83, 0, 0, 994, 995, 5, 69, 0, 0, 995, 996, 5, 82, 0, 0, 996, 106, 1, 0, 0, 0, 997, 998, 5, 78, 0, 0, 998, 999, 5, 65, 0, 0, 999, 1000, 5, 84, 0, 0, 1000, 1001, 5, 85, 0, 0, 1001, 1002, 5, 82, 0, 0, 1002, 1003, 5, 65, 0, 0, 1003, 1004, 5, 76, 0, 0, 1004, 108, 1, 0, 0, 0, 1005, 1006, 5, 79, 0, 0, 1006, 1007, 5, 78, 0, 0, 1007, 110, 1, 0, 0, 0, 1008, 1009, 5, 80, 0, 0, 1009, 1010, 5, 73, 0, 0, 1010, 1011, 5, 86, 0, 0, 1011, 1012, 5, 79, 0, 0, 1012, 1013, 5, 84, 0, 0, 1013, 112, 1, 0, 0, 0, 1014, 1015, 5, 76, 0, 0, 1015, 1016, 5, 65, 0, 0, 1016, 1017, 5, 84, 0, 0, 1017, 1018, 5, 69, 0, 0, 1018, 1019, 5, 82, 0, 0, 1019, 1020, 5, 65, 0, 0, 1020, 1021, 5, 76, 0, 0, 1021, 114, 1, 0, 0, 0, 1022, 1023, 5, 87, 0, 0, 1023, 1024, 5, 73, 0, 0, 1024, 1025, 5, 78, 0, 0, 1025, 1026, 5, 68, 0, 0, 1026, 1027, 5, 79, 0, 0, 1027, 1028, 5, 87, 0, 0, 1028, 116, 1, 0, 0, 0, 1029, 1030, 5, 79, 0, 0, 1030, 1031, 5, 86, 0, 0, 1031, 1032, 5, 69, 0, 0, 1032, 1033, 5, 82, 0, 0, 1033, 118, 1, 0, 0, 0, 1034, 1035, 5, 80, 0, 0, 1035, 1036, 5, 65, 0, 0, 1036, 1037, 5, 82, 0, 0, 1037, 1038, 5, 84, 0, 0, 1038, 1039, 5, 73, 0, 0, 1039, 1040, 5, 84, 0, 0, 1040, 1041, 5, 73, 0, 0, 1041, 1042, 5, 79, 0, 0, 1042, 1043, 5, 78, 0, 0, 1043, 120, 1, 0, 0, 0, 1044, 1045, 5, 82, 0, 0, 1045, 1046, 5, 65, 0, 0, 1046, 1047, 5, 78, 0, 0, 1047, 1048, 5, 71, 0, 0, 1048, 1049, 5, 69, 0, 0, 1049, 122, 1, 0, 0, 0, 1050, 1051, 5, 82, 0, 0, 1051, 1052, 5, 79, 0, 0, 1052, 1053, 5, 87, 0, 0, 1053, 1054, 5, 83, 0, 0, 1054, 124, 1, 0, 0, 0, 1055, 1056, 5, 85, 0, 0, 1056, 1057, 5, 78, 0, 0, 1057, 1058, 5, 66, 0, 0, 1058, 1059, 5, 79, 0, 0, 1059, 1060, 5, 85, 0, 0, 1060, 1061, 5, 78, 0, 0, 1061, 1062, 5, 68, 0, 0, 1062, 1063, 5, 69, 0, 0, 1063, 1064, 5, 68, 0, 0, 1064, 126, 1, 0, 0, 0, 1065, 1066, 5, 80, 0, 0, 1066, 1067, 5, 82, 0, 0, 1067, 1068, 5, 69, 0, 0, 1068, 1069, 5, 67, 0, 0, 1069, 1070, 5, 69, 0, 0, 1070, 1071, 5, 68, 0, 0, 1071, 1072, 5, 73, 0, 0, 1072, 1073, 5, 78, 0, 0, 1073, 1074, 5, 71, 0, 0, 1074, 128, 1, 0, 0, 0, 1075, 1076, 5, 70, 0, 0, 1076, 1077, 5, 79, 0, 0, 1077, 1078, 5, 76, 0, 0, 1078, 1079, 5, 76, 0, 0, 1079, 1080, 5, 79, 0, 0, 1080, 1081, 5, 87, 0, 0, 1081, 1082, 5, 73, 0, 0, 1082, 1083, 5, 78, 0, 0, 1083, 1084, 5, 71, 0, 0, 1084, 130, 1, 0, 0, 0, 1085, 1086, 5, 67, 0, 0, 1086, 1087, 5, 85, 0, 0, 1087, 1088, 5, 82, 0, 0, 1088, 1089, 5, 82, 0, 0, 1089, 1090, 5, 69, 0, 0, 1090, 1091, 5, 78, 0, 0, 1091, 1092, 5, 84, 0, 0, 1092, 132, 1, 0, 0, 0, 1093, 1094, 5, 70, 0, 0, 1094, 1095, 5, 73, 0, 0, 1095, 1096, 5, 82, 0, 0, 1096, 1097, 5, 83, 0, 0, 1097, 1098, 5, 84, 0, 0, 1098, 134, 1, 0, 0, 0, 1099, 1100, 5, 65, 0, 0, 1100, 1101, 5, 70, 0, 0, 1101, 1102, 5, 84, 0, 0, 1102, 1103, 5, 69, 0, 0, 1103, 1104, 5, 82, 0, 0, 1104, 136, 1, 0, 0, 0, 1105, 1106, 5, 76, 0, 0, 1106, 1107, 5, 65, 0, 0, 1107, 1108, 5, 83, 0, 0, 1108, 1109, 5, 84, 0, 0, 1109, 138, 1, 0, 0, 0, 1110, 1111, 5, 87, 0, 0, 1111, 1112, 5, 73, 0, 0, 1112, 1113, 5, 84, 0, 0, 1113, 1114, 5, 72, 0, 0, 1114, 140, 1, 0, 0, 0, 1115, 1116, 5, 87, 0, 0, 1116, 1117, 5, 73, 0, 0, 1117, 1118, 5, 84, 0, 0, 1118, 1119, 5, 72, 0, 0, 1119, 1120, 5, 79, 0, 0, 1120, 1121, 5, 85, 0, 0, 1121, 1122, 5, 84, 0, 0, 1122, 142, 1, 0, 0, 0, 1123, 1124, 5, 86, 0, 0, 1124, 1125, 5, 65, 0, 0, 1125, 1126, 5, 76, 0, 0, 1126, 1127, 5, 85, 0, 0, 1127, 1128, 5, 69, 0, 0, 1128, 1129, 5, 83, 0, 0, 1129, 144, 1, 0, 0, 0, 1130, 1131, 5, 67, 0, 0, 1131, 1132, 5, 82, 0, 0, 1132, 1133, 5, 69, 0, 0, 1133, 1134, 5, 65, 0, 0, 1134, 1135, 5, 84, 0, 0, 1135, 1136, 5, 69, 0, 0, 1136, 146, 1, 0, 0, 0, 1137, 1138, 5, 84, 0, 0, 1138, 1139, 5, 65, 0, 0, 1139, 1140, 5, 66, 0, 0, 1140, 1141, 5, 76, 0, 0, 1141, 1142, 5, 69, 0, 0, 1142, 148, 1, 0, 0, 0, 1143, 1144, 5, 68, 0, 0, 1144, 1145, 5, 73, 0, 0, 1145, 1146, 5, 82, 0, 0, 1146, 1147, 5, 69, 0, 0, 1147, 1148, 5, 67, 0, 0, 1148, 1149, 5, 84, 0, 0, 1149, 1150, 5, 79, 0, 0, 1150, 1151, 5, 82, 0, 0, 1151, 1152, 5, 89, 0, 0, 1152, 150, 1, 0, 0, 0, 1153, 1154, 5, 86, 0, 0, 1154, 1155, 5, 73, 0, 0, 1155, 1156, 5, 69, 0, 0, 1156, 1157, 5, 87, 0, 0, 1157, 152, 1, 0, 0, 0, 1158, 1159, 5, 82, 0, 0, 1159, 1160, 5, 69, 0, 0, 1160, 1161, 5, 80, 0, 0, 1161, 1162, 5, 76, 0, 0, 1162, 1163, 5, 65, 0, 0, 1163, 1164, 5, 67, 0, 0, 1164, 1165, 5, 69, 0, 0, 1165, 154, 1, 0, 0, 0, 1166, 1167, 5, 69, 0, 0, 1167, 1168, 5, 88, 0, 0, 1168, 1169, 5, 69, 0, 0, 1169, 1170, 5, 67, 0, 0, 1170, 1171, 5, 85, 0, 0, 1171, 1172, 5, 84, 0, 0, 1172, 1173, 5, 69, 0, 0, 1173, 156, 1, 0, 0, 0, 1174, 1175, 5, 83, 0, 0, 1175, 1176, 5, 84, 0, 0, 1176, 1177, 5, 65, 0, 0, 1177, 1178, 5, 84, 0, 0, 1178, 1179, 5, 69, 0, 0, 1179, 1180, 5, 77, 0, 0, 1180, 1181, 5, 69, 0, 0, 1181, 1182, 5, 78, 0, 0, 1182, 1183, 5, 84, 0, 0, 1183, 158, 1, 0, 0, 0, 1184, 1185, 5, 73, 0, 0, 1185, 1186, 5, 78, 0, 0, 1186, 1187, 5, 83, 0, 0, 1187, 1188, 5, 69, 0, 0, 1188, 1189, 5, 82, 0, 0, 1189, 1190, 5, 84, 0, 0, 1190, 160, 1, 0, 0, 0, 1191, 1192, 5, 68, 0, 0, 1192, 1193, 5, 69, 0, 0, 1193, 1194, 5, 76, 0, 0, 1194, 1195, 5, 69, 0, 0, 1195, 1196, 5, 84, 0, 0, 1196, 1197, 5, 69, 0, 0, 1197, 162, 1, 0, 0, 0, 1198, 1199, 5, 82, 0, 0, 1199, 1200, 5, 69, 0, 0, 1200, 1201, 5, 77, 0, 0, 1201, 1202, 5, 79, 0, 0, 1202, 1203, 5, 86, 0, 0, 1203, 1204, 5, 69, 0, 0, 1204, 164, 1, 0, 0, 0, 1205, 1206, 5, 73, 0, 0, 1206, 1207, 5, 78, 0, 0, 1207, 1208, 5, 84, 0, 0, 1208, 1209, 5, 79, 0, 0, 1209, 166, 1, 0, 0, 0, 1210, 1211, 5, 68, 0, 0, 1211, 1212, 5, 69, 0, 0, 1212, 1213, 5, 83, 0, 0, 1213, 1214, 5, 67, 0, 0, 1214, 1215, 5, 82, 0, 0, 1215, 1216, 5, 73, 0, 0, 1216, 1217, 5, 66, 0, 0, 1217, 1218, 5, 69, 0, 0, 1218, 168, 1, 0, 0, 0, 1219, 1220, 5, 69, 0, 0, 1220, 1221, 5, 88, 0, 0, 1221, 1222, 5, 80, 0, 0, 1222, 1223, 5, 76, 0, 0, 1223, 1224, 5, 65, 0, 0, 1224, 1225, 5, 73, 0, 0, 1225, 1226, 5, 78, 0, 0, 1226, 170, 1, 0, 0, 0, 1227, 1228, 5, 80, 0, 0, 1228, 1229, 5, 76, 0, 0, 1229, 1230, 5, 65, 0, 0, 1230, 1231, 5, 78, 0, 0, 1231, 172, 1, 0, 0, 0, 1232, 1233, 5, 67, 0, 0, 1233, 1234, 5, 72, 0, 0, 1234, 1235, 5, 65, 0, 0, 1235, 1236, 5, 78, 0, 0, 1236, 1237, 5, 71, 0, 0, 1237, 1238, 5, 69, 0, 0, 1238, 1239, 5, 76, 0, 0, 1239, 1240, 5, 79, 0, 0, 1240, 1241, 5, 71, 0, 0, 1241, 1242, 5, 95, 0, 0, 1242, 1243, 5, 77, 0, 0, 1243, 1244, 5, 79, 0, 0, 1244, 1245, 5, 68, 0, 0, 1245, 1246, 5, 69, 0, 0, 1246, 174, 1, 0, 0, 0, 1247, 1248, 5, 74, 0, 0, 1248, 1249, 5, 83, 0, 0, 1249, 1250, 5, 79, 0, 0, 1250, 1251, 5, 78, 0, 0, 1251, 1252, 5, 95, 0, 0, 1252, 1253, 5, 69, 0, 0, 1253, 1254, 5, 88, 0, 0, 1254, 1255, 5, 69, 0, 0, 1255, 1256, 5, 67, 0, 0, 1256, 1257, 5, 85, 0, 0, 1257, 1258, 5, 84, 0, 0, 1258, 1259, 5, 73, 0, 0, 1259, 1260, 5, 79, 0, 0, 1260, 1261, 5, 78, 0, 0, 1261, 1262, 5, 95, 0, 0, 1262, 1263, 5, 80, 0, 0, 1263, 1264, 5, 76, 0, 0, 1264, 1265, 5, 65, 0, 0, 1265, 1266, 5, 78, 0, 0, 1266, 176, 1, 0, 0, 0, 1267, 1268, 5, 69, 0, 0, 1268, 1269, 5, 83, 0, 0, 1269, 1270, 5, 84, 0, 0, 1270, 1271, 5, 73, 0, 0, 1271, 1272, 5, 77, 0, 0, 1272, 1273, 5, 65, 0, 0, 1273, 1274, 5, 84, 0, 0, 1274, 1275, 5, 69, 0, 0, 1275, 1276, 5, 68, 0, 0, 1276, 1277, 5, 95, 0, 0, 1277, 1278, 5, 67, 0, 0, 1278, 1279, 5, 79, 0, 0, 1279, 1280, 5, 83, 0, 0, 1280, 1281, 5, 84, 0, 0, 1281, 178, 1, 0, 0, 0, 1282, 1283, 5, 70, 0, 0, 1283, 1284, 5, 79, 0, 0, 1284, 1285, 5, 82, 0, 0, 1285, 1286, 5, 77, 0, 0, 1286, 1287, 5, 65, 0, 0, 1287, 1288, 5, 84, 0, 0, 1288, 180, 1, 0, 0, 0, 1289, 1290, 5, 76, 0, 0, 1290, 1291, 5, 79, 0, 0, 1291, 1292, 5, 71, 0, 0, 1292, 1293, 5, 73, 0, 0, 1293, 1294, 5, 67, 0, 0, 1294, 1295, 5, 65, 0, 0, 1295, 1296, 5, 76, 0, 0, 1296, 182, 1, 0, 0, 0, 1297, 1298, 5, 67, 0, 0, 1298, 1299, 5, 79, 0, 0, 1299, 1300, 5, 68, 0, 0, 1300, 1301, 5, 69, 0, 0, 1301, 1302, 5, 71, 0, 0, 1302, 1303, 5, 69, 0, 0, 1303, 1304, 5, 78, 0, 0, 1304, 184, 1, 0, 0, 0, 1305, 1306, 5, 67, 0, 0, 1306, 1307, 5, 79, 0, 0, 1307, 1308, 5, 83, 0, 0, 1308, 1309, 5, 84, 0, 0, 1309, 186, 1, 0, 0, 0, 1310, 1311, 5, 67, 0, 0, 1311, 1312, 5, 65, 0, 0, 1312, 1313, 5, 83, 0, 0, 1313, 1314, 5, 84, 0, 0, 1314, 188, 1, 0, 0, 0, 1315, 1316, 5, 83, 0, 0, 1316, 1317, 5, 72, 0, 0, 1317, 1318, 5, 79, 0, 0, 1318, 1319, 5, 87, 0, 0, 1319, 190, 1, 0, 0, 0, 1320, 1321, 5, 84, 0, 0, 1321, 1322, 5, 65, 0, 0, 1322, 1323, 5, 66, 0, 0, 1323, 1324, 5, 76, 0, 0, 1324, 1325, 5, 69, 0, 0, 1325, 1326, 5, 83, 0, 0, 1326, 192, 1, 0, 0, 0, 1327, 1328, 5, 67, 0, 0, 1328, 1329, 5, 79, 0, 0, 1329, 1330, 5, 76, 0, 0, 1330, 1331, 5, 85, 0, 0, 1331, 1332, 5, 77, 0, 0, 1332, 1333, 5, 78, 0, 0, 1333, 1334, 5, 83, 0, 0, 1334, 194, 1, 0, 0, 0, 1335, 1336, 5, 67, 0, 0, 1336, 1337, 5, 79, 0, 0, 1337, 1338, 5, 76, 0, 0, 1338, 1339, 5, 85, 0, 0, 1339, 1340, 5, 77, 0, 0, 1340, 1341, 5, 78, 0, 0, 1341, 196, 1, 0, 0, 0, 1342, 1343, 5, 85, 0, 0, 1343, 1344, 5, 83, 0, 0, 1344, 1345, 5, 69, 0, 0, 1345, 198, 1, 0, 0, 0, 1346, 1347, 5, 77, 0, 0, 1347, 1348, 5, 79, 0, 0, 1348, 1349, 5, 68, 0, 0, 1349, 1350, 5, 85, 0, 0, 1350, 1351, 5, 76, 0, 0, 1351, 1352, 5, 69, 0, 0, 1352, 200, 1, 0, 0, 0, 1353, 1354, 5, 77, 0, 0, 1354, 1355, 5, 79, 0, 0, 1355, 1356, 5, 68, 0, 0, 1356, 1357, 5, 85, 0, 0, 1357, 1358, 5, 76, 0, 0, 1358, 1359, 5, 69, 0, 0, 1359, 1360, 5, 83, 0, 0, 1360, 202, 1, 0, 0, 0, 1361, 1362, 5, 80, 0, 0, 1362, 1363, 5, 65, 0, 0, 1363, 1364, 5, 82, 0, 0, 1364, 1365, 5, 84, 0, 0, 1365, 1366, 5, 73, 0, 0, 1366, 1367, 5, 84, 0, 0, 1367, 1368, 5, 73, 0, 0, 1368, 1369, 5, 79, 0, 0, 1369, 1370, 5, 78, 0, 0, 1370, 1371, 5, 83, 0, 0, 1371, 204, 1, 0, 0, 0, 1372, 1373, 5, 70, 0, 0, 1373, 1374, 5, 85, 0, 0, 1374, 1375, 5, 78, 0, 0, 1375, 1376, 5, 67, 0, 0, 1376, 1377, 5, 84, 0, 0, 1377, 1378, 5, 73, 0, 0, 1378, 1379, 5, 79, 0, 0, 1379, 1380, 5, 78, 0, 0, 1380, 1381, 5, 83, 0, 0, 1381, 206, 1, 0, 0, 0, 1382, 1383, 5, 68, 0, 0, 1383, 1384, 5, 82, 0, 0, 1384, 1385, 5, 79, 0, 0, 1385, 1386, 5, 80, 0, 0, 1386, 208, 1, 0, 0, 0, 1387, 1388, 5, 85, 0, 0, 1388, 1389, 5, 78, 0, 0, 1389, 1390, 5, 73, 0, 0, 1390, 1391, 5, 79, 0, 0, 1391, 1392, 5, 78, 0, 0, 1392, 210, 1, 0, 0, 0, 1393, 1394, 5, 69, 0, 0, 1394, 1395, 5, 88, 0, 0, 1395, 1396, 5, 67, 0, 0, 1396, 1397, 5, 69, 0, 0, 1397, 1398, 5, 80, 0, 0, 1398, 1399, 5, 84, 0, 0, 1399, 212, 1, 0, 0, 0, 1400, 1401, 5, 83, 0, 0, 1401, 1402, 5, 69, 0, 0, 1402, 1403, 5, 84, 0, 0, 1403, 1404, 5, 77, 0, 0, 1404, 1405, 5, 73, 0, 0, 1405, 1406, 5, 78, 0, 0, 1406, 1407, 5, 85, 0, 0, 1407, 1408, 5, 83, 0, 0, 1408, 214, 1, 0, 0, 0, 1409, 1410, 5, 73, 0, 0, 1410, 1411, 5, 78, 0, 0, 1411, 1412, 5, 84, 0, 0, 1412, 1413, 5, 69, 0, 0, 1413, 1414, 5, 82, 0, 0, 1414, 1415, 5, 83, 0, 0, 1415, 1416, 5, 69, 0, 0, 1416, 1417, 5, 67, 0, 0, 1417, 1418, 5, 84, 0, 0, 1418, 216, 1, 0, 0, 0, 1419, 1420, 5, 84, 0, 0, 1420, 1421, 5, 79, 0, 0, 1421, 218, 1, 0, 0, 0, 1422, 1423, 5, 84, 0, 0, 1423, 1424, 5, 65, 0, 0, 1424, 1425, 5, 66, 0, 0, 1425, 1426, 5, 76, 0, 0, 1426, 1427, 5, 69, 0, 0, 1427, 1428, 5, 83, 0, 0, 1428, 1429, 5, 65, 0, 0, 1429, 1430, 5, 77, 0, 0, 1430, 1431, 5, 80, 0, 0, 1431, 1432, 5, 76, 0, 0, 1432, 1433, 5, 69, 0, 0, 1433, 220, 1, 0, 0, 0, 1434, 1435, 5, 83, 0, 0, 1435, 1436, 5, 84, 0, 0, 1436, 1437, 5, 82, 0, 0, 1437, 1438, 5, 65, 0, 0, 1438, 1439, 5, 84, 0, 0, 1439, 1440, 5, 73, 0, 0, 1440, 1441, 5, 70, 0, 0, 1441, 1442, 5, 89, 0, 0, 1442, 222, 1, 0, 0, 0, 1443, 1444, 5, 65, 0, 0, 1444, 1445, 5, 76, 0, 0, 1445, 1446, 5, 84, 0, 0, 1446, 1447, 5, 69, 0, 0, 1447, 1448, 5, 82, 0, 0, 1448, 224, 1, 0, 0, 0, 1449, 1450, 5, 82, 0, 0, 1450, 1451, 5, 69, 0, 0, 1451, 1452, 5, 78, 0, 0, 1452, 1453, 5, 65, 0, 0, 1453, 1454, 5, 77, 0, 0, 1454, 1455, 5, 69, 0, 0, 1455, 226, 1, 0, 0, 0, 1456, 1457, 5, 83, 0, 0, 1457, 1458, 5, 84, 0, 0, 1458, 1459, 5, 82, 0, 0, 1459, 1460, 5, 85, 0, 0, 1460, 1461, 5, 67, 0, 0, 1461, 1462, 5, 84, 0, 0, 1462, 228, 1, 0, 0, 0, 1463, 1464, 5, 67, 0, 0, 1464, 1465, 5, 79, 0, 0, 1465, 1466, 5, 77, 0, 0, 1466, 1467, 5, 77, 0, 0, 1467, 1468, 5, 69, 0, 0, 1468, 1469, 5, 78, 0, 0, 1469, 1470, 5, 84, 0, 0, 1470, 230, 1, 0, 0, 0, 1471, 1472, 5, 83, 0, 0, 1472, 1473, 5, 69, 0, 0, 1473, 1474, 5, 84, 0, 0, 1474, 232, 1, 0, 0, 0, 1475, 1476, 5, 82, 0, 0, 1476, 1477, 5, 69, 0, 0, 1477, 1478, 5, 83, 0, 0, 1478, 1479, 5, 69, 0, 0, 1479, 1480, 5, 84, 0, 0, 1480, 234, 1, 0, 0, 0, 1481, 1482, 5, 68, 0, 0, 1482, 1483, 5, 65, 0, 0, 1483, 1484, 5, 84, 0, 0, 1484, 1485, 5, 65, 0, 0, 1485, 236, 1, 0, 0, 0, 1486, 1487, 5, 83, 0, 0, 1487, 1488, 5, 84, 0, 0, 1488, 1489, 5, 65, 0, 0, 1489, 1490, 5, 82, 0, 0, 1490, 1491, 5, 84, 0, 0, 1491, 238, 1, 0, 0, 0, 1492, 1493, 5, 84, 0, 0, 1493, 1494, 5, 82, 0, 0, 1494, 1495, 5, 65, 0, 0, 1495, 1496, 5, 78, 0, 0, 1496, 1497, 5, 83, 0, 0, 1497, 1498, 5, 65, 0, 0, 1498, 1499, 5, 67, 0, 0, 1499, 1500, 5, 84, 0, 0, 1500, 1501, 5, 73, 0, 0, 1501, 1502, 5, 79, 0, 0, 1502, 1503, 5, 78, 0, 0, 1503, 240, 1, 0, 0, 0, 1504, 1505, 5, 67, 0, 0, 1505, 1506, 5, 79, 0, 0, 1506, 1507, 5, 77, 0, 0, 1507, 1508, 5, 77, 0, 0, 1508, 1509, 5, 73, 0, 0, 1509, 1510, 5, 84, 0, 0, 1510, 242, 1, 0, 0, 0, 1511, 1512, 5, 82, 0, 0, 1512, 1513, 5, 79, 0, 0, 1513, 1514, 5, 76, 0, 0, 1514, 1515, 5, 76, 0, 0, 1515, 1516, 5, 66, 0, 0, 1516, 1517, 5, 65, 0, 0, 1517, 1518, 5, 67, 0, 0, 1518, 1519, 5, 75, 0, 0, 1519, 244, 1, 0, 0, 0, 1520, 1521, 5, 77, 0, 0, 1521, 1522, 5, 65, 0, 0, 1522, 1523, 5, 67, 0, 0, 1523, 1524, 5, 82, 0, 0, 1524, 1525, 5, 79, 0, 0, 1525, 246, 1, 0, 0, 0, 1526, 1527, 5, 73, 0, 0, 1527, 1528, 5, 71, 0, 0, 1528, 1529, 5, 78, 0, 0, 1529, 1530, 5, 79, 0, 0, 1530, 1531, 5, 82, 0, 0, 1531, 1532, 5, 69, 0, 0, 1532, 248, 1, 0, 0, 0, 1533, 1534, 5, 66, 0, 0, 1534, 1535, 5, 79, 0, 0, 1535, 1536, 5, 84, 0, 0, 1536, 1537, 5, 72, 0, 0, 1537, 250, 1, 0, 0, 0, 1538, 1539, 5, 76, 0, 0, 1539, 1540, 5, 69, 0, 0, 1540, 1541, 5, 65, 0, 0, 1541, 1542, 5, 68, 0, 0, 1542, 1543, 5, 73, 0, 0, 1543, 1544, 5, 78, 0, 0, 1544, 1545, 5, 71, 0, 0, 1545, 252, 1, 0, 0, 0, 1546, 1547, 5, 84, 0, 0, 1547, 1548, 5, 82, 0, 0, 1548, 1549, 5, 65, 0, 0, 1549, 1550, 5, 73, 0, 0, 1550, 1551, 5, 76, 0, 0, 1551, 1552, 5, 73, 0, 0, 1552, 1553, 5, 78, 0, 0, 1553, 1554, 5, 71, 0, 0, 1554, 254, 1, 0, 0, 0, 1555, 1556, 5, 73, 0, 0, 1556, 1557, 5, 70, 0, 0, 1557, 256, 1, 0, 0, 0, 1558, 1559, 5, 80, 0, 0, 1559, 1560, 5, 79, 0, 0, 1560, 1561, 5, 83, 0, 0, 1561, 1562, 5, 73, 0, 0, 1562, 1563, 5, 84, 0, 0, 1563, 1564, 5, 73, 0, 0, 1564, 1565, 5, 79, 0, 0, 1565, 1566, 5, 78, 0, 0, 1566, 258, 1, 0, 0, 0, 1567, 1568, 5, 69, 0, 0, 1568, 1569, 5, 88, 0, 0, 1569, 1570, 5, 84, 0, 0, 1570, 1571, 5, 82, 0, 0, 1571, 1572, 5, 65, 0, 0, 1572, 1573, 5, 67, 0, 0, 1573, 1574, 5, 84, 0, 0, 1574, 260, 1, 0, 0, 0, 1575, 1576, 5, 77, 0, 0, 1576, 1577, 5, 73, 0, 0, 1577, 1578, 5, 78, 0, 0, 1578, 1579, 5, 85, 0, 0, 1579, 1580, 5, 83, 0, 0, 1580, 262, 1, 0, 0, 0, 1581, 1582, 5, 68, 0, 0, 1582, 1583, 5, 73, 0, 0, 1583, 1584, 5, 86, 0, 0, 1584, 264, 1, 0, 0, 0, 1585, 1586, 5, 80, 0, 0, 1586, 1587, 5, 69, 0, 0, 1587, 1588, 5, 82, 0, 0, 1588, 1589, 5, 67, 0, 0, 1589, 1590, 5, 69, 0, 0, 1590, 1591, 5, 78, 0, 0, 1591, 1592, 5, 84, 0, 0, 1592, 1593, 5, 76, 0, 0, 1593, 1594, 5, 73, 0, 0, 1594, 1595, 5, 84, 0, 0, 1595, 266, 1, 0, 0, 0, 1596, 1597, 5, 66, 0, 0, 1597, 1598, 5, 85, 0, 0, 1598, 1599, 5, 67, 0, 0, 1599, 1600, 5, 75, 0, 0, 1600, 1601, 5, 69, 0, 0, 1601, 1602, 5, 84, 0, 0, 1602, 268, 1, 0, 0, 0, 1603, 1604, 5, 79, 0, 0, 1604, 1605, 5, 85, 0, 0, 1605, 1606, 5, 84, 0, 0, 1606, 270, 1, 0, 0, 0, 1607, 1608, 5, 79, 0, 0, 1608, 1609, 5, 70, 0, 0, 1609, 272, 1, 0, 0, 0, 1610, 1611, 5, 83, 0, 0, 1611, 1612, 5, 79, 0, 0, 1612, 1613, 5, 82, 0, 0, 1613, 1614, 5, 84, 0, 0, 1614, 274, 1, 0, 0, 0, 1615, 1616, 5, 67, 0, 0, 1616, 1617, 5, 76, 0, 0, 1617, 1618, 5, 85, 0, 0, 1618, 1619, 5, 83, 0, 0, 1619, 1620, 5, 84, 0, 0, 1620, 1621, 5, 69, 0, 0, 1621, 1622, 5, 82, 0, 0, 1622, 276, 1, 0, 0, 0, 1623, 1624, 5, 68, 0, 0, 1624, 1625, 5, 73, 0, 0, 1625, 1626, 5, 83, 0, 0, 1626, 1627, 5, 84, 0, 0, 1627, 1628, 5, 82, 0, 0, 1628, 1629, 5, 73, 0, 0, 1629, 1630, 5, 66, 0, 0, 1630, 1631, 5, 85, 0, 0, 1631, 1632, 5, 84, 0, 0, 1632, 1633, 5, 69, 0, 0, 1633, 278, 1, 0, 0, 0, 1634, 1635, 5, 79, 0, 0, 1635, 1636, 5, 86, 0, 0, 1636, 1637, 5, 69, 0, 0, 1637, 1638, 5, 82, 0, 0, 1638, 1639, 5, 87, 0, 0, 1639, 1640, 5, 82, 0, 0, 1640, 1641, 5, 73, 0, 0, 1641, 1642, 5, 84, 0, 0, 1642, 1643, 5, 69, 0, 0, 1643, 280, 1, 0, 0, 0, 1644, 1645, 5, 84, 0, 0, 1645, 1646, 5, 82, 0, 0, 1646, 1647, 5, 65, 0, 0, 1647, 1648, 5, 78, 0, 0, 1648, 1649, 5, 83, 0, 0, 1649, 1650, 5, 70, 0, 0, 1650, 1651, 5, 79, 0, 0, 1651, 1652, 5, 82, 0, 0, 1652, 1653, 5, 77, 0, 0, 1653, 282, 1, 0, 0, 0, 1654, 1655, 5, 82, 0, 0, 1655, 1656, 5, 69, 0, 0, 1656, 1657, 5, 68, 0, 0, 1657, 1658, 5, 85, 0, 0, 1658, 1659, 5, 67, 0, 0, 1659, 1660, 5, 69, 0, 0, 1660, 284, 1, 0, 0, 0, 1661, 1662, 5, 85, 0, 0, 1662, 1663, 5, 83, 0, 0, 1663, 1664, 5, 73, 0, 0, 1664, 1665, 5, 78, 0, 0, 1665, 1666, 5, 71, 0, 0, 1666, 286, 1, 0, 0, 0, 1667, 1668, 5, 83, 0, 0, 1668, 1669, 5, 69, 0, 0, 1669, 1670, 5, 82, 0, 0, 1670, 1671, 5, 68, 0, 0, 1671, 1672, 5, 69, 0, 0, 1672, 288, 1, 0, 0, 0, 1673, 1674, 5, 83, 0, 0, 1674, 1675, 5, 69, 0, 0, 1675, 1676, 5, 82, 0, 0, 1676, 1677, 5, 68, 0, 0, 1677, 1678, 5, 69, 0, 0, 1678, 1679, 5, 80, 0, 0, 1679, 1680, 5, 82, 0, 0, 1680, 1681, 5, 79, 0, 0, 1681, 1682, 5, 80, 0, 0, 1682, 1683, 5, 69, 0, 0, 1683, 1684, 5, 82, 0, 0, 1684, 1685, 5, 84, 0, 0, 1685, 1686, 5, 73, 0, 0, 1686, 1687, 5, 69, 0, 0, 1687, 1688, 5, 83, 0, 0, 1688, 290, 1, 0, 0, 0, 1689, 1690, 5, 82, 0, 0, 1690, 1691, 5, 69, 0, 0, 1691, 1692, 5, 67, 0, 0, 1692, 1693, 5, 79, 0, 0, 1693, 1694, 5, 82, 0, 0, 1694, 1695, 5, 68, 0, 0, 1695, 1696, 5, 82, 0, 0, 1696, 1697, 5, 69, 0, 0, 1697, 1698, 5, 65, 0, 0, 1698, 1699, 5, 68, 0, 0, 1699, 1700, 5, 69, 0, 0, 1700, 1701, 5, 82, 0, 0, 1701, 292, 1, 0, 0, 0, 1702, 1703, 5, 82, 0, 0, 1703, 1704, 5, 69, 0, 0, 1704, 1705, 5, 67, 0, 0, 1705, 1706, 5, 79, 0, 0, 1706, 1707, 5, 82, 0, 0, 1707, 1708, 5, 68, 0, 0, 1708, 1709, 5, 87, 0, 0, 1709, 1710, 5, 82, 0, 0, 1710, 1711, 5, 73, 0, 0, 1711, 1712, 5, 84, 0, 0, 1712, 1713, 5, 69, 0, 0, 1713, 1714, 5, 82, 0, 0, 1714, 294, 1, 0, 0, 0, 1715, 1716, 5, 68, 0, 0, 1716, 1717, 5, 69, 0, 0, 1717, 1718, 5, 76, 0, 0, 1718, 1719, 5, 73, 0, 0, 1719, 1720, 5, 77, 0, 0, 1720, 1721, 5, 73, 0, 0, 1721, 1722, 5, 84, 0, 0, 1722, 1723, 5, 69, 0, 0, 1723, 1724, 5, 68, 0, 0, 1724, 296, 1, 0, 0, 0, 1725, 1726, 5, 70, 0, 0, 1726, 1727, 5, 73, 0, 0, 1727, 1728, 5, 69, 0, 0, 1728, 1729, 5, 76, 0, 0, 1729, 1730, 5, 68, 0, 0, 1730, 1731, 5, 83, 0, 0, 1731, 298, 1, 0, 0, 0, 1732, 1733, 5, 84, 0, 0, 1733, 1734, 5, 69, 0, 0, 1734, 1735, 5, 82, 0, 0, 1735, 1736, 5, 77, 0, 0, 1736, 1737, 5, 73, 0, 0, 1737, 1738, 5, 78, 0, 0, 1738, 1739, 5, 65, 0, 0, 1739, 1740, 5, 84, 0, 0, 1740, 1741, 5, 69, 0, 0, 1741, 1742, 5, 68, 0, 0, 1742, 300, 1, 0, 0, 0, 1743, 1744, 5, 67, 0, 0, 1744, 1745, 5, 79, 0, 0, 1745, 1746, 5, 76, 0, 0, 1746, 1747, 5, 76, 0, 0, 1747, 1748, 5, 69, 0, 0, 1748, 1749, 5, 67, 0, 0, 1749, 1750, 5, 84, 0, 0, 1750, 1751, 5, 73, 0, 0, 1751, 1752, 5, 79, 0, 0, 1752, 1753, 5, 78, 0, 0, 1753, 302, 1, 0, 0, 0, 1754, 1755, 5, 73, 0, 0, 1755, 1756, 5, 84, 0, 0, 1756, 1757, 5, 69, 0, 0, 1757, 1758, 5, 77, 0, 0, 1758, 1759, 5, 83, 0, 0, 1759, 304, 1, 0, 0, 0, 1760, 1761, 5, 75, 0, 0, 1761, 1762, 5, 69, 0, 0, 1762, 1763, 5, 89, 0, 0, 1763, 1764, 5, 83, 0, 0, 1764, 306, 1, 0, 0, 0, 1765, 1766, 5, 69, 0, 0, 1766, 1767, 5, 83, 0, 0, 1767, 1768, 5, 67, 0, 0, 1768, 1769, 5, 65, 0, 0, 1769, 1770, 5, 80, 0, 0, 1770, 1771, 5, 69, 0, 0, 1771, 1772, 5, 68, 0, 0, 1772, 308, 1, 0, 0, 0, 1773, 1774, 5, 76, 0, 0, 1774, 1775, 5, 73, 0, 0, 1775, 1776, 5, 78, 0, 0, 1776, 1777, 5, 69, 0, 0, 1777, 1778, 5, 83, 0, 0, 1778, 310, 1, 0, 0, 0, 1779, 1780, 5, 83, 0, 0, 1780, 1781, 5, 69, 0, 0, 1781, 1782, 5, 80, 0, 0, 1782, 1783, 5, 65, 0, 0, 1783, 1784, 5, 82, 0, 0, 1784, 1785, 5, 65, 0, 0, 1785, 1786, 5, 84, 0, 0, 1786, 1787, 5, 69, 0, 0, 1787, 1788, 5, 68, 0, 0, 1788, 312, 1, 0, 0, 0, 1789, 1790, 5, 70, 0, 0, 1790, 1791, 5, 85, 0, 0, 1791, 1792, 5, 78, 0, 0, 1792, 1793, 5, 67, 0, 0, 1793, 1794, 5, 84, 0, 0, 1794, 1795, 5, 73, 0, 0, 1795, 1796, 5, 79, 0, 0, 1796, 1797, 5, 78, 0, 0, 1797, 314, 1, 0, 0, 0, 1798, 1799, 5, 69, 0, 0, 1799, 1800, 5, 88, 0, 0, 1800, 1801, 5, 84, 0, 0, 1801, 1802, 5, 69, 0, 0, 1802, 1803, 5, 78, 0, 0, 1803, 1804, 5, 68, 0, 0, 1804, 1805, 5, 69, 0, 0, 1805, 1806, 5, 68, 0, 0, 1806, 316, 1, 0, 0, 0, 1807, 1808, 5, 82, 0, 0, 1808, 1809, 5, 69, 0, 0, 1809, 1810, 5, 70, 0, 0, 1810, 1811, 5, 82, 0, 0, 1811, 1812, 5, 69, 0, 0, 1812, 1813, 5, 83, 0, 0, 1813, 1814, 5, 72, 0, 0, 1814, 318, 1, 0, 0, 0, 1815, 1816, 5, 67, 0, 0, 1816, 1817, 5, 76, 0, 0, 1817, 1818, 5, 69, 0, 0, 1818, 1819, 5, 65, 0, 0, 1819, 1820, 5, 82, 0, 0, 1820, 320, 1, 0, 0, 0, 1821, 1822, 5, 67, 0, 0, 1822, 1823, 5, 65, 0, 0, 1823, 1824, 5, 67, 0, 0, 1824, 1825, 5, 72, 0, 0, 1825, 1826, 5, 69, 0, 0, 1826, 322, 1, 0, 0, 0, 1827, 1828, 5, 85, 0, 0, 1828, 1829, 5, 78, 0, 0, 1829, 1830, 5, 67, 0, 0, 1830, 1831, 5, 65, 0, 0, 1831, 1832, 5, 67, 0, 0, 1832, 1833, 5, 72, 0, 0, 1833, 1834, 5, 69, 0, 0, 1834, 324, 1, 0, 0, 0, 1835, 1836, 5, 76, 0, 0, 1836, 1837, 5, 65, 0, 0, 1837, 1838, 5, 90, 0, 0, 1838, 1839, 5, 89, 0, 0, 1839, 326, 1, 0, 0, 0, 1840, 1841, 5, 70, 0, 0, 1841, 1842, 5, 79, 0, 0, 1842, 1843, 5, 82, 0, 0, 1843, 1844, 5, 77, 0, 0, 1844, 1845, 5, 65, 0, 0, 1845, 1846, 5, 84, 0, 0, 1846, 1847, 5, 84, 0, 0, 1847, 1848, 5, 69, 0, 0, 1848, 1849, 5, 68, 0, 0, 1849, 328, 1, 0, 0, 0, 1850, 1851, 5, 71, 0, 0, 1851, 1852, 5, 76, 0, 0, 1852, 1853, 5, 79, 0, 0, 1853, 1854, 5, 66, 0, 0, 1854, 1855, 5, 65, 0, 0, 1855, 1856, 5, 76, 0, 0, 1856, 330, 1, 0, 0, 0, 1857, 1858, 5, 84, 0, 0, 1858, 1859, 5, 69, 0, 0, 1859, 1860, 5, 77, 0, 0, 1860, 1861, 5, 80, 0, 0, 1861, 1862, 5, 79, 0, 0, 1862, 1863, 5, 82, 0, 0, 1863, 1864, 5, 65, 0, 0, 1864, 1865, 5, 82, 0, 0, 1865, 1866, 5, 89, 0, 0, 1866, 332, 1, 0, 0, 0, 1867, 1868, 5, 79, 0, 0, 1868, 1869, 5, 80, 0, 0, 1869, 1870, 5, 84, 0, 0, 1870, 1871, 5, 73, 0, 0, 1871, 1872, 5, 79, 0, 0, 1872, 1873, 5, 78, 0, 0, 1873, 1874, 5, 83, 0, 0, 1874, 334, 1, 0, 0, 0, 1875, 1876, 5, 85, 0, 0, 1876, 1877, 5, 78, 0, 0, 1877, 1878, 5, 83, 0, 0, 1878, 1879, 5, 69, 0, 0, 1879, 1880, 5, 84, 0, 0, 1880, 336, 1, 0, 0, 0, 1881, 1882, 5, 84, 0, 0, 1882, 1883, 5, 66, 0, 0, 1883, 1884, 5, 76, 0, 0, 1884, 1885, 5, 80, 0, 0, 1885, 1886, 5, 82, 0, 0, 1886, 1887, 5, 79, 0, 0, 1887, 1888, 5, 80, 0, 0, 1888, 1889, 5, 69, 0, 0, 1889, 1890, 5, 82, 0, 0, 1890, 1891, 5, 84, 0, 0, 1891, 1892, 5, 73, 0, 0, 1892, 1893, 5, 69, 0, 0, 1893, 1894, 5, 83, 0, 0, 1894, 338, 1, 0, 0, 0, 1895, 1896, 5, 68, 0, 0, 1896, 1897, 5, 66, 0, 0, 1897, 1898, 5, 80, 0, 0, 1898, 1899, 5, 82, 0, 0, 1899, 1900, 5, 79, 0, 0, 1900, 1901, 5, 80, 0, 0, 1901, 1902, 5, 69, 0, 0, 1902, 1903, 5, 82, 0, 0, 1903, 1904, 5, 84, 0, 0, 1904, 1905, 5, 73, 0, 0, 1905, 1906, 5, 69, 0, 0, 1906, 1907, 5, 83, 0, 0, 1907, 340, 1, 0, 0, 0, 1908, 1909, 5, 66, 0, 0, 1909, 1910, 5, 85, 0, 0, 1910, 1911, 5, 67, 0, 0, 1911, 1912, 5, 75, 0, 0, 1912, 1913, 5, 69, 0, 0, 1913, 1914, 5, 84, 0, 0, 1914, 1915, 5, 83, 0, 0, 1915, 342, 1, 0, 0, 0, 1916, 1917, 5, 83, 0, 0, 1917, 1918, 5, 75, 0, 0, 1918, 1919, 5, 69, 0, 0, 1919, 1920, 5, 87, 0, 0, 1920, 1921, 5, 69, 0, 0, 1921, 1922, 5, 68, 0, 0, 1922, 344, 1, 0, 0, 0, 1923, 1924, 5, 83, 0, 0, 1924, 1925, 5, 84, 0, 0, 1925, 1926, 5, 79, 0, 0, 1926, 1927, 5, 82, 0, 0, 1927, 1928, 5, 69, 0, 0, 1928, 1929, 5, 68, 0, 0, 1929, 346, 1, 0, 0, 0, 1930, 1931, 5, 68, 0, 0, 1931, 1932, 5, 73, 0, 0, 1932, 1933, 5, 82, 0, 0, 1933, 1934, 5, 69, 0, 0, 1934, 1935, 5, 67, 0, 0, 1935, 1936, 5, 84, 0, 0, 1936, 1937, 5, 79, 0, 0, 1937, 1938, 5, 82, 0, 0, 1938, 1939, 5, 73, 0, 0, 1939, 1940, 5, 69, 0, 0, 1940, 1941, 5, 83, 0, 0, 1941, 348, 1, 0, 0, 0, 1942, 1943, 5, 76, 0, 0, 1943, 1944, 5, 79, 0, 0, 1944, 1945, 5, 67, 0, 0, 1945, 1946, 5, 65, 0, 0, 1946, 1947, 5, 84, 0, 0, 1947, 1948, 5, 73, 0, 0, 1948, 1949, 5, 79, 0, 0, 1949, 1950, 5, 78, 0, 0, 1950, 350, 1, 0, 0, 0, 1951, 1952, 5, 69, 0, 0, 1952, 1953, 5, 88, 0, 0, 1953, 1954, 5, 67, 0, 0, 1954, 1955, 5, 72, 0, 0, 1955, 1956, 5, 65, 0, 0, 1956, 1957, 5, 78, 0, 0, 1957, 1958, 5, 71, 0, 0, 1958, 1959, 5, 69, 0, 0, 1959, 352, 1, 0, 0, 0, 1960, 1961, 5, 65, 0, 0, 1961, 1962, 5, 82, 0, 0, 1962, 1963, 5, 67, 0, 0, 1963, 1964, 5, 72, 0, 0, 1964, 1965, 5, 73, 0, 0, 1965, 1966, 5, 86, 0, 0, 1966, 1967, 5, 69, 0, 0, 1967, 354, 1, 0, 0, 0, 1968, 1969, 5, 85, 0, 0, 1969, 1970, 5, 78, 0, 0, 1970, 1971, 5, 65, 0, 0, 1971, 1972, 5, 82, 0, 0, 1972, 1973, 5, 67, 0, 0, 1973, 1974, 5, 72, 0, 0, 1974, 1975, 5, 73, 0, 0, 1975, 1976, 5, 86, 0, 0, 1976, 1977, 5, 69, 0, 0, 1977, 356, 1, 0, 0, 0, 1978, 1979, 5, 70, 0, 0, 1979, 1980, 5, 73, 0, 0, 1980, 1981, 5, 76, 0, 0, 1981, 1982, 5, 69, 0, 0, 1982, 1983, 5, 70, 0, 0, 1983, 1984, 5, 79, 0, 0, 1984, 1985, 5, 82, 0, 0, 1985, 1986, 5, 77, 0, 0, 1986, 1987, 5, 65, 0, 0, 1987, 1988, 5, 84, 0, 0, 1988, 358, 1, 0, 0, 0, 1989, 1990, 5, 84, 0, 0, 1990, 1991, 5, 79, 0, 0, 1991, 1992, 5, 85, 0, 0, 1992, 1993, 5, 67, 0, 0, 1993, 1994, 5, 72, 0, 0, 1994, 360, 1, 0, 0, 0, 1995, 1996, 5, 67, 0, 0, 1996, 1997, 5, 79, 0, 0, 1997, 1998, 5, 77, 0, 0, 1998, 1999, 5, 80, 0, 0, 1999, 2000, 5, 65, 0, 0, 2000, 2001, 5, 67, 0, 0, 2001, 2002, 5, 84, 0, 0, 2002, 362, 1, 0, 0, 0, 2003, 2004, 5, 67, 0, 0, 2004, 2005, 5, 79, 0, 0, 2005, 2006, 5, 78, 0, 0, 2006, 2007, 5, 67, 0, 0, 2007, 2008, 5, 65, 0, 0, 2008, 2009, 5, 84, 0, 0, 2009, 2010, 5, 69, 0, 0, 2010, 2011, 5, 78, 0, 0, 2011, 2012, 5, 65, 0, 0, 2012, 2013, 5, 84, 0, 0, 2013, 2014, 5, 69, 0, 0, 2014, 364, 1, 0, 0, 0, 2015, 2016, 5, 67, 0, 0, 2016, 2017, 5, 72, 0, 0, 2017, 2018, 5, 65, 0, 0, 2018, 2019, 5, 78, 0, 0, 2019, 2020, 5, 71, 0, 0, 2020, 2021, 5, 69, 0, 0, 2021, 366, 1, 0, 0, 0, 2022, 2023, 5, 67, 0, 0, 2023, 2024, 5, 65, 0, 0, 2024, 2025, 5, 83, 0, 0, 2025, 2026, 5, 67, 0, 0, 2026, 2027, 5, 65, 0, 0, 2027, 2028, 5, 68, 0, 0, 2028, 2029, 5, 69, 0, 0, 2029, 368, 1, 0, 0, 0, 2030, 2031, 5, 67, 0, 0, 2031, 2032, 5, 79, 0, 0, 2032, 2033, 5, 78, 0, 0, 2033, 2034, 5, 83, 0, 0, 2034, 2035, 5, 84, 0, 0, 2035, 2036, 5, 82, 0, 0, 2036, 2037, 5, 65, 0, 0, 2037, 2038, 5, 73, 0, 0, 2038, 2039, 5, 78, 0, 0, 2039, 2040, 5, 84, 0, 0, 2040, 370, 1, 0, 0, 0, 2041, 2042, 5, 82, 0, 0, 2042, 2043, 5, 69, 0, 0, 2043, 2044, 5, 83, 0, 0, 2044, 2045, 5, 84, 0, 0, 2045, 2046, 5, 82, 0, 0, 2046, 2047, 5, 73, 0, 0, 2047, 2048, 5, 67, 0, 0, 2048, 2049, 5, 84, 0, 0, 2049, 372, 1, 0, 0, 0, 2050, 2051, 5, 67, 0, 0, 2051, 2052, 5, 76, 0, 0, 2052, 2053, 5, 85, 0, 0, 2053, 2054, 5, 83, 0, 0, 2054, 2055, 5, 84, 0, 0, 2055, 2056, 5, 69, 0, 0, 2056, 2057, 5, 82, 0, 0, 2057, 2058, 5, 69, 0, 0, 2058, 2059, 5, 68, 0, 0, 2059, 374, 1, 0, 0, 0, 2060, 2061, 5, 83, 0, 0, 2061, 2062, 5, 79, 0, 0, 2062, 2063, 5, 82, 0, 0, 2063, 2064, 5, 84, 0, 0, 2064, 2065, 5, 69, 0, 0, 2065, 2066, 5, 68, 0, 0, 2066, 376, 1, 0, 0, 0, 2067, 2068, 5, 80, 0, 0, 2068, 2069, 5, 85, 0, 0, 2069, 2070, 5, 82, 0, 0, 2070, 2071, 5, 71, 0, 0, 2071, 2072, 5, 69, 0, 0, 2072, 378, 1, 0, 0, 0, 2073, 2074, 5, 73, 0, 0, 2074, 2075, 5, 78, 0, 0, 2075, 2076, 5, 80, 0, 0, 2076, 2077, 5, 85, 0, 0, 2077, 2078, 5, 84, 0, 0, 2078, 2079, 5, 70, 0, 0, 2079, 2080, 5, 79, 0, 0, 2080, 2081, 5, 82, 0, 0, 2081, 2082, 5, 77, 0, 0, 2082, 2083, 5, 65, 0, 0, 2083, 2084, 5, 84, 0, 0, 2084, 380, 1, 0, 0, 0, 2085, 2086, 5, 79, 0, 0, 2086, 2087, 5, 85, 0, 0, 2087, 2088, 5, 84, 0, 0, 2088, 2089, 5, 80, 0, 0, 2089, 2090, 5, 85, 0, 0, 2090, 2091, 5, 84, 0, 0, 2091, 2092, 5, 70, 0, 0, 2092, 2093, 5, 79, 0, 0, 2093, 2094, 5, 82, 0, 0, 2094, 2095, 5, 77, 0, 0, 2095, 2096, 5, 65, 0, 0, 2096, 2097, 5, 84, 0, 0, 2097, 382, 1, 0, 0, 0, 2098, 2099, 5, 68, 0, 0, 2099, 2100, 5, 65, 0, 0, 2100, 2101, 5, 84, 0, 0, 2101, 2102, 5, 65, 0, 0, 2102, 2103, 5, 66, 0, 0, 2103, 2104, 5, 65, 0, 0, 2104, 2105, 5, 83, 0, 0, 2105, 2106, 5, 69, 0, 0, 2106, 384, 1, 0, 0, 0, 2107, 2108, 5, 68, 0, 0, 2108, 2109, 5, 65, 0, 0, 2109, 2110, 5, 84, 0, 0, 2110, 2111, 5, 65, 0, 0, 2111, 2112, 5, 66, 0, 0, 2112, 2113, 5, 65, 0, 0, 2113, 2114, 5, 83, 0, 0, 2114, 2115, 5, 69, 0, 0, 2115, 2116, 5, 83, 0, 0, 2116, 386, 1, 0, 0, 0, 2117, 2118, 5, 68, 0, 0, 2118, 2119, 5, 70, 0, 0, 2119, 2120, 5, 83, 0, 0, 2120, 388, 1, 0, 0, 0, 2121, 2122, 5, 84, 0, 0, 2122, 2123, 5, 82, 0, 0, 2123, 2124, 5, 85, 0, 0, 2124, 2125, 5, 78, 0, 0, 2125, 2126, 5, 67, 0, 0, 2126, 2127, 5, 65, 0, 0, 2127, 2128, 5, 84, 0, 0, 2128, 2129, 5, 69, 0, 0, 2129, 390, 1, 0, 0, 0, 2130, 2131, 5, 65, 0, 0, 2131, 2132, 5, 78, 0, 0, 2132, 2133, 5, 65, 0, 0, 2133, 2134, 5, 76, 0, 0, 2134, 2135, 5, 89, 0, 0, 2135, 2136, 5, 90, 0, 0, 2136, 2137, 5, 69, 0, 0, 2137, 392, 1, 0, 0, 0, 2138, 2139, 5, 67, 0, 0, 2139, 2140, 5, 79, 0, 0, 2140, 2141, 5, 77, 0, 0, 2141, 2142, 5, 80, 0, 0, 2142, 2143, 5, 85, 0, 0, 2143, 2144, 5, 84, 0, 0, 2144, 2145, 5, 69, 0, 0, 2145, 394, 1, 0, 0, 0, 2146, 2147, 5, 76, 0, 0, 2147, 2148, 5, 73, 0, 0, 2148, 2149, 5, 83, 0, 0, 2149, 2150, 5, 84, 0, 0, 2150, 396, 1, 0, 0, 0, 2151, 2152, 5, 83, 0, 0, 2152, 2153, 5, 84, 0, 0, 2153, 2154, 5, 65, 0, 0, 2154, 2155, 5, 84, 0, 0, 2155, 2156, 5, 73, 0, 0, 2156, 2157, 5, 83, 0, 0, 2157, 2158, 5, 84, 0, 0, 2158, 2159, 5, 73, 0, 0, 2159, 2160, 5, 67, 0, 0, 2160, 2161, 5, 83, 0, 0, 2161, 398, 1, 0, 0, 0, 2162, 2163, 5, 80, 0, 0, 2163, 2164, 5, 65, 0, 0, 2164, 2165, 5, 82, 0, 0, 2165, 2166, 5, 84, 0, 0, 2166, 2167, 5, 73, 0, 0, 2167, 2168, 5, 84, 0, 0, 2168, 2169, 5, 73, 0, 0, 2169, 2170, 5, 79, 0, 0, 2170, 2171, 5, 78, 0, 0, 2171, 2172, 5, 69, 0, 0, 2172, 2173, 5, 68, 0, 0, 2173, 400, 1, 0, 0, 0, 2174, 2175, 5, 69, 0, 0, 2175, 2176, 5, 88, 0, 0, 2176, 2177, 5, 84, 0, 0, 2177, 2178, 5, 69, 0, 0, 2178, 2179, 5, 82, 0, 0, 2179, 2180, 5, 78, 0, 0, 2180, 2181, 5, 65, 0, 0, 2181, 2182, 5, 76, 0, 0, 2182, 402, 1, 0, 0, 0, 2183, 2184, 5, 68, 0, 0, 2184, 2185, 5, 69, 0, 0, 2185, 2186, 5, 70, 0, 0, 2186, 2187, 5, 73, 0, 0, 2187, 2188, 5, 78, 0, 0, 2188, 2189, 5, 69, 0, 0, 2189, 2190, 5, 68, 0, 0, 2190, 404, 1, 0, 0, 0, 2191, 2192, 5, 82, 0, 0, 2192, 2193, 5, 69, 0, 0, 2193, 2194, 5, 86, 0, 0, 2194, 2195, 5, 79, 0, 0, 2195, 2196, 5, 75, 0, 0, 2196, 2197, 5, 69, 0, 0, 2197, 406, 1, 0, 0, 0, 2198, 2199, 5, 71, 0, 0, 2199, 2200, 5, 82, 0, 0, 2200, 2201, 5, 65, 0, 0, 2201, 2202, 5, 78, 0, 0, 2202, 2203, 5, 84, 0, 0, 2203, 408, 1, 0, 0, 0, 2204, 2205, 5, 76, 0, 0, 2205, 2206, 5, 79, 0, 0, 2206, 2207, 5, 67, 0, 0, 2207, 2208, 5, 75, 0, 0, 2208, 410, 1, 0, 0, 0, 2209, 2210, 5, 85, 0, 0, 2210, 2211, 5, 78, 0, 0, 2211, 2212, 5, 76, 0, 0, 2212, 2213, 5, 79, 0, 0, 2213, 2214, 5, 67, 0, 0, 2214, 2215, 5, 75, 0, 0, 2215, 412, 1, 0, 0, 0, 2216, 2217, 5, 77, 0, 0, 2217, 2218, 5, 83, 0, 0, 2218, 2219, 5, 67, 0, 0, 2219, 2220, 5, 75, 0, 0, 2220, 414, 1, 0, 0, 0, 2221, 2222, 5, 82, 0, 0, 2222, 2223, 5, 69, 0, 0, 2223, 2224, 5, 80, 0, 0, 2224, 2225, 5, 65, 0, 0, 2225, 2226, 5, 73, 0, 0, 2226, 2227, 5, 82, 0, 0, 2227, 416, 1, 0, 0, 0, 2228, 2229, 5, 82, 0, 0, 2229, 2230, 5, 69, 0, 0, 2230, 2231, 5, 67, 0, 0, 2231, 2232, 5, 79, 0, 0, 2232, 2233, 5, 86, 0, 0, 2233, 2234, 5, 69, 0, 0, 2234, 2235, 5, 82, 0, 0, 2235, 418, 1, 0, 0, 0, 2236, 2237, 5, 69, 0, 0, 2237, 2238, 5, 88, 0, 0, 2238, 2239, 5, 80, 0, 0, 2239, 2240, 5, 79, 0, 0, 2240, 2241, 5, 82, 0, 0, 2241, 2242, 5, 84, 0, 0, 2242, 420, 1, 0, 0, 0, 2243, 2244, 5, 73, 0, 0, 2244, 2245, 5, 77, 0, 0, 2245, 2246, 5, 80, 0, 0, 2246, 2247, 5, 79, 0, 0, 2247, 2248, 5, 82, 0, 0, 2248, 2249, 5, 84, 0, 0, 2249, 422, 1, 0, 0, 0, 2250, 2251, 5, 76, 0, 0, 2251, 2252, 5, 79, 0, 0, 2252, 2253, 5, 65, 0, 0, 2253, 2254, 5, 68, 0, 0, 2254, 424, 1, 0, 0, 0, 2255, 2256, 5, 85, 0, 0, 2256, 2257, 5, 78, 0, 0, 2257, 2258, 5, 76, 0, 0, 2258, 2259, 5, 79, 0, 0, 2259, 2260, 5, 65, 0, 0, 2260, 2261, 5, 68, 0, 0, 2261, 426, 1, 0, 0, 0, 2262, 2263, 5, 82, 0, 0, 2263, 2264, 5, 79, 0, 0, 2264, 2265, 5, 76, 0, 0, 2265, 2266, 5, 69, 0, 0, 2266, 428, 1, 0, 0, 0, 2267, 2268, 5, 82, 0, 0, 2268, 2269, 5, 79, 0, 0, 2269, 2270, 5, 76, 0, 0, 2270, 2271, 5, 69, 0, 0, 2271, 2272, 5, 83, 0, 0, 2272, 430, 1, 0, 0, 0, 2273, 2274, 5, 67, 0, 0, 2274, 2275, 5, 79, 0, 0, 2275, 2276, 5, 77, 0, 0, 2276, 2277, 5, 80, 0, 0, 2277, 2278, 5, 65, 0, 0, 2278, 2279, 5, 67, 0, 0, 2279, 2280, 5, 84, 0, 0, 2280, 2281, 5, 73, 0, 0, 2281, 2282, 5, 79, 0, 0, 2282, 2283, 5, 78, 0, 0, 2283, 2284, 5, 83, 0, 0, 2284, 432, 1, 0, 0, 0, 2285, 2286, 5, 80, 0, 0, 2286, 2287, 5, 82, 0, 0, 2287, 2288, 5, 73, 0, 0, 2288, 2289, 5, 78, 0, 0, 2289, 2290, 5, 67, 0, 0, 2290, 2291, 5, 73, 0, 0, 2291, 2292, 5, 80, 0, 0, 2292, 2293, 5, 65, 0, 0, 2293, 2294, 5, 76, 0, 0, 2294, 2295, 5, 83, 0, 0, 2295, 434, 1, 0, 0, 0, 2296, 2297, 5, 84, 0, 0, 2297, 2298, 5, 82, 0, 0, 2298, 2299, 5, 65, 0, 0, 2299, 2300, 5, 78, 0, 0, 2300, 2301, 5, 83, 0, 0, 2301, 2302, 5, 65, 0, 0, 2302, 2303, 5, 67, 0, 0, 2303, 2304, 5, 84, 0, 0, 2304, 2305, 5, 73, 0, 0, 2305, 2306, 5, 79, 0, 0, 2306, 2307, 5, 78, 0, 0, 2307, 2308, 5, 83, 0, 0, 2308, 436, 1, 0, 0, 0, 2309, 2310, 5, 73, 0, 0, 2310, 2311, 5, 78, 0, 0, 2311, 2312, 5, 68, 0, 0, 2312, 2313, 5, 69, 0, 0, 2313, 2314, 5, 88, 0, 0, 2314, 438, 1, 0, 0, 0, 2315, 2316, 5, 73, 0, 0, 2316, 2317, 5, 78, 0, 0, 2317, 2318, 5, 68, 0, 0, 2318, 2319, 5, 69, 0, 0, 2319, 2320, 5, 88, 0, 0, 2320, 2321, 5, 69, 0, 0, 2321, 2322, 5, 83, 0, 0, 2322, 440, 1, 0, 0, 0, 2323, 2324, 5, 76, 0, 0, 2324, 2325, 5, 79, 0, 0, 2325, 2326, 5, 67, 0, 0, 2326, 2327, 5, 75, 0, 0, 2327, 2328, 5, 83, 0, 0, 2328, 442, 1, 0, 0, 0, 2329, 2330, 5, 79, 0, 0, 2330, 2331, 5, 80, 0, 0, 2331, 2332, 5, 84, 0, 0, 2332, 2333, 5, 73, 0, 0, 2333, 2334, 5, 79, 0, 0, 2334, 2335, 5, 78, 0, 0, 2335, 444, 1, 0, 0, 0, 2336, 2337, 5, 65, 0, 0, 2337, 2338, 5, 78, 0, 0, 2338, 2339, 5, 84, 0, 0, 2339, 2340, 5, 73, 0, 0, 2340, 446, 1, 0, 0, 0, 2341, 2342, 5, 76, 0, 0, 2342, 2343, 5, 79, 0, 0, 2343, 2344, 5, 67, 0, 0, 2344, 2345, 5, 65, 0, 0, 2345, 2346, 5, 76, 0, 0, 2346, 448, 1, 0, 0, 0, 2347, 2348, 5, 73, 0, 0, 2348, 2349, 5, 78, 0, 0, 2349, 2350, 5, 80, 0, 0, 2350, 2351, 5, 65, 0, 0, 2351, 2352, 5, 84, 0, 0, 2352, 2353, 5, 72, 0, 0, 2353, 450, 1, 0, 0, 0, 2354, 2355, 5, 87, 0, 0, 2355, 2356, 5, 65, 0, 0, 2356, 2357, 5, 84, 0, 0, 2357, 2358, 5, 69, 0, 0, 2358, 2359, 5, 82, 0, 0, 2359, 2360, 5, 77, 0, 0, 2360, 2361, 5, 65, 0, 0, 2361, 2362, 5, 82, 0, 0, 2362, 2363, 5, 75, 0, 0, 2363, 452, 1, 0, 0, 0, 2364, 2365, 5, 85, 0, 0, 2365, 2366, 5, 78, 0, 0, 2366, 2367, 5, 78, 0, 0, 2367, 2368, 5, 69, 0, 0, 2368, 2369, 5, 83, 0, 0, 2369, 2370, 5, 84, 0, 0, 2370, 454, 1, 0, 0, 0, 2371, 2372, 5, 77, 0, 0, 2372, 2373, 5, 65, 0, 0, 2373, 2374, 5, 84, 0, 0, 2374, 2375, 5, 67, 0, 0, 2375, 2376, 5, 72, 0, 0, 2376, 456, 1, 0, 0, 0, 2377, 2378, 5, 78, 0, 0, 2378, 2379, 5, 69, 0, 0, 2379, 2380, 5, 88, 0, 0, 2380, 2381, 5, 84, 0, 0, 2381, 458, 1, 0, 0, 0, 2382, 2383, 5, 87, 0, 0, 2383, 2384, 5, 73, 0, 0, 2384, 2385, 5, 84, 0, 0, 2385, 2386, 5, 72, 0, 0, 2386, 2387, 5, 73, 0, 0, 2387, 2388, 5, 78, 0, 0, 2388, 460, 1, 0, 0, 0, 2389, 2390, 5, 87, 0, 0, 2390, 2391, 5, 83, 0, 0, 2391, 462, 1, 0, 0, 0, 2392, 2393, 5, 83, 0, 0, 2393, 2394, 5, 89, 0, 0, 2394, 2395, 5, 83, 0, 0, 2395, 2396, 5, 84, 0, 0, 2396, 2397, 5, 69, 0, 0, 2397, 2398, 5, 77, 0, 0, 2398, 464, 1, 0, 0, 0, 2399, 2400, 5, 73, 0, 0, 2400, 2401, 5, 78, 0, 0, 2401, 2402, 5, 67, 0, 0, 2402, 2403, 5, 76, 0, 0, 2403, 2404, 5, 85, 0, 0, 2404, 2405, 5, 68, 0, 0, 2405, 2406, 5, 73, 0, 0, 2406, 2407, 5, 78, 0, 0, 2407, 2408, 5, 71, 0, 0, 2408, 466, 1, 0, 0, 0, 2409, 2410, 5, 69, 0, 0, 2410, 2411, 5, 88, 0, 0, 2411, 2412, 5, 67, 0, 0, 2412, 2413, 5, 76, 0, 0, 2413, 2414, 5, 85, 0, 0, 2414, 2415, 5, 68, 0, 0, 2415, 2416, 5, 73, 0, 0, 2416, 2417, 5, 78, 0, 0, 2417, 2418, 5, 71, 0, 0, 2418, 468, 1, 0, 0, 0, 2419, 2420, 5, 79, 0, 0, 2420, 2421, 5, 86, 0, 0, 2421, 2422, 5, 69, 0, 0, 2422, 2423, 5, 82, 0, 0, 2423, 2424, 5, 87, 0, 0, 2424, 2425, 5, 82, 0, 0, 2425, 2426, 5, 73, 0, 0, 2426, 2427, 5, 84, 0, 0, 2427, 2428, 5, 73, 0, 0, 2428, 2429, 5, 78, 0, 0, 2429, 2430, 5, 71, 0, 0, 2430, 470, 1, 0, 0, 0, 2431, 2432, 5, 67, 0, 0, 2432, 2433, 5, 79, 0, 0, 2433, 2434, 5, 78, 0, 0, 2434, 2435, 5, 83, 0, 0, 2435, 2436, 5, 84, 0, 0, 2436, 2437, 5, 82, 0, 0, 2437, 2438, 5, 65, 0, 0, 2438, 2439, 5, 73, 0, 0, 2439, 2440, 5, 78, 0, 0, 2440, 2441, 5, 84, 0, 0, 2441, 2442, 5, 83, 0, 0, 2442, 472, 1, 0, 0, 0, 2443, 2444, 5, 71, 0, 0, 2444, 2445, 5, 69, 0, 0, 2445, 2446, 5, 78, 0, 0, 2446, 2447, 5, 69, 0, 0, 2447, 2448, 5, 82, 0, 0, 2448, 2449, 5, 65, 0, 0, 2449, 2450, 5, 84, 0, 0, 2450, 2451, 5, 69, 0, 0, 2451, 2452, 5, 68, 0, 0, 2452, 474, 1, 0, 0, 0, 2453, 2454, 5, 87, 0, 0, 2454, 2455, 5, 65, 0, 0, 2455, 2456, 5, 84, 0, 0, 2456, 2457, 5, 69, 0, 0, 2457, 2458, 5, 82, 0, 0, 2458, 2459, 5, 77, 0, 0, 2459, 2460, 5, 65, 0, 0, 2460, 2461, 5, 82, 0, 0, 2461, 2462, 5, 75, 0, 0, 2462, 2463, 5, 83, 0, 0, 2463, 476, 1, 0, 0, 0, 2464, 2465, 5, 67, 0, 0, 2465, 2466, 5, 65, 0, 0, 2466, 2467, 5, 84, 0, 0, 2467, 2468, 5, 65, 0, 0, 2468, 2469, 5, 76, 0, 0, 2469, 2470, 5, 79, 0, 0, 2470, 2471, 5, 71, 0, 0, 2471, 478, 1, 0, 0, 0, 2472, 2473, 5, 76, 0, 0, 2473, 2474, 5, 65, 0, 0, 2474, 2475, 5, 78, 0, 0, 2475, 2476, 5, 71, 0, 0, 2476, 2477, 5, 85, 0, 0, 2477, 2478, 5, 65, 0, 0, 2478, 2479, 5, 71, 0, 0, 2479, 2480, 5, 69, 0, 0, 2480, 480, 1, 0, 0, 0, 2481, 2482, 5, 74, 0, 0, 2482, 2483, 5, 65, 0, 0, 2483, 2484, 5, 86, 0, 0, 2484, 2485, 5, 65, 0, 0, 2485, 482, 1, 0, 0, 0, 2486, 2487, 5, 83, 0, 0, 2487, 2488, 5, 67, 0, 0, 2488, 2489, 5, 65, 0, 0, 2489, 2490, 5, 76, 0, 0, 2490, 2491, 5, 65, 0, 0, 2491, 484, 1, 0, 0, 0, 2492, 2493, 5, 80, 0, 0, 2493, 2494, 5, 89, 0, 0, 2494, 2495, 5, 84, 0, 0, 2495, 2496, 5, 72, 0, 0, 2496, 2497, 5, 79, 0, 0, 2497, 2498, 5, 78, 0, 0, 2498, 486, 1, 0, 0, 0, 2499, 2500, 5, 74, 0, 0, 2500, 2501, 5, 65, 0, 0, 2501, 2502, 5, 82, 0, 0, 2502, 488, 1, 0, 0, 0, 2503, 2504, 5, 70, 0, 0, 2504, 2505, 5, 73, 0, 0, 2505, 2506, 5, 76, 0, 0, 2506, 2507, 5, 69, 0, 0, 2507, 490, 1, 0, 0, 0, 2508, 2509, 5, 80, 0, 0, 2509, 2510, 5, 89, 0, 0, 2510, 2511, 5, 84, 0, 0, 2511, 2512, 5, 72, 0, 0, 2512, 2513, 5, 79, 0, 0, 2513, 2514, 5, 78, 0, 0, 2514, 2515, 5, 95, 0, 0, 2515, 2516, 5, 70, 0, 0, 2516, 2517, 5, 73, 0, 0, 2517, 2518, 5, 76, 0, 0, 2518, 2519, 5, 69, 0, 0, 2519, 2520, 5, 83, 0, 0, 2520, 492, 1, 0, 0, 0, 2521, 2522, 5, 80, 0, 0, 2522, 2523, 5, 89, 0, 0, 2523, 2524, 5, 84, 0, 0, 2524, 2525, 5, 72, 0, 0, 2525, 2526, 5, 79, 0, 0, 2526, 2527, 5, 78, 0, 0, 2527, 2528, 5, 95, 0, 0, 2528, 2529, 5, 82, 0, 0, 2529, 2530, 5, 69, 0, 0, 2530, 2531, 5, 81, 0, 0, 2531, 2532, 5, 85, 0, 0, 2532, 2533, 5, 73, 0, 0, 2533, 2534, 5, 82, 0, 0, 2534, 2535, 5, 69, 0, 0, 2535, 2536, 5, 77, 0, 0, 2536, 2537, 5, 69, 0, 0, 2537, 2538, 5, 78, 0, 0, 2538, 2539, 5, 84, 0, 0, 2539, 2540, 5, 83, 0, 0, 2540, 494, 1, 0, 0, 0, 2541, 2542, 5, 80, 0, 0, 2542, 2543, 5, 89, 0, 0, 2543, 2544, 5, 84, 0, 0, 2544, 2545, 5, 72, 0, 0, 2545, 2546, 5, 79, 0, 0, 2546, 2547, 5, 78, 0, 0, 2547, 2548, 5, 95, 0, 0, 2548, 2549, 5, 68, 0, 0, 2549, 2550, 5, 69, 0, 0, 2550, 2551, 5, 80, 0, 0, 2551, 2552, 5, 69, 0, 0, 2552, 2553, 5, 78, 0, 0, 2553, 2554, 5, 68, 0, 0, 2554, 2555, 5, 69, 0, 0, 2555, 2556, 5, 78, 0, 0, 2556, 2557, 5, 67, 0, 0, 2557, 2558, 5, 73, 0, 0, 2558, 2559, 5, 69, 0, 0, 2559, 2560, 5, 83, 0, 0, 2560, 496, 1, 0, 0, 0, 2561, 2562, 5, 80, 0, 0, 2562, 2563, 5, 89, 0, 0, 2563, 2564, 5, 84, 0, 0, 2564, 2565, 5, 72, 0, 0, 2565, 2566, 5, 79, 0, 0, 2566, 2567, 5, 78, 0, 0, 2567, 2568, 5, 95, 0, 0, 2568, 2569, 5, 74, 0, 0, 2569, 2570, 5, 65, 0, 0, 2570, 2571, 5, 82, 0, 0, 2571, 498, 1, 0, 0, 0, 2572, 2573, 5, 80, 0, 0, 2573, 2574, 5, 89, 0, 0, 2574, 2575, 5, 84, 0, 0, 2575, 2576, 5, 72, 0, 0, 2576, 2577, 5, 79, 0, 0, 2577, 2578, 5, 78, 0, 0, 2578, 2579, 5, 95, 0, 0, 2579, 2580, 5, 65, 0, 0, 2580, 2581, 5, 82, 0, 0, 2581, 2582, 5, 67, 0, 0, 2582, 2583, 5, 72, 0, 0, 2583, 2584, 5, 73, 0, 0, 2584, 2585, 5, 86, 0, 0, 2585, 2586, 5, 69, 0, 0, 2586, 2587, 5, 83, 0, 0, 2587, 500, 1, 0, 0, 0, 2588, 2589, 5, 80, 0, 0, 2589, 2590, 5, 89, 0, 0, 2590, 2591, 5, 84, 0, 0, 2591, 2592, 5, 72, 0, 0, 2592, 2593, 5, 79, 0, 0, 2593, 2594, 5, 78, 0, 0, 2594, 2595, 5, 95, 0, 0, 2595, 2596, 5, 80, 0, 0, 2596, 2597, 5, 65, 0, 0, 2597, 2598, 5, 82, 0, 0, 2598, 2599, 5, 65, 0, 0, 2599, 2600, 5, 77, 0, 0, 2600, 2601, 5, 69, 0, 0, 2601, 2602, 5, 84, 0, 0, 2602, 2603, 5, 69, 0, 0, 2603, 2604, 5, 82, 0, 0, 2604, 502, 1, 0, 0, 0, 2605, 2606, 5, 69, 0, 0, 2606, 2607, 5, 78, 0, 0, 2607, 2608, 5, 71, 0, 0, 2608, 2609, 5, 73, 0, 0, 2609, 2610, 5, 78, 0, 0, 2610, 2611, 5, 69, 0, 0, 2611, 504, 1, 0, 0, 0, 2612, 2613, 5, 67, 0, 0, 2613, 2614, 5, 65, 0, 0, 2614, 2615, 5, 84, 0, 0, 2615, 2616, 5, 65, 0, 0, 2616, 2617, 5, 76, 0, 0, 2617, 2618, 5, 79, 0, 0, 2618, 2619, 5, 71, 0, 0, 2619, 2620, 5, 83, 0, 0, 2620, 506, 1, 0, 0, 0, 2621, 2622, 5, 86, 0, 0, 2622, 2623, 5, 73, 0, 0, 2623, 2624, 5, 69, 0, 0, 2624, 2625, 5, 87, 0, 0, 2625, 2626, 5, 83, 0, 0, 2626, 508, 1, 0, 0, 0, 2627, 2628, 5, 74, 0, 0, 2628, 2629, 5, 65, 0, 0, 2629, 2630, 5, 82, 0, 0, 2630, 2631, 5, 83, 0, 0, 2631, 510, 1, 0, 0, 0, 2632, 2633, 5, 80, 0, 0, 2633, 2634, 5, 82, 0, 0, 2634, 2635, 5, 73, 0, 0, 2635, 2636, 5, 77, 0, 0, 2636, 2637, 5, 65, 0, 0, 2637, 2638, 5, 82, 0, 0, 2638, 2639, 5, 89, 0, 0, 2639, 512, 1, 0, 0, 0, 2640, 2641, 5, 85, 0, 0, 2641, 2642, 5, 78, 0, 0, 2642, 2643, 5, 73, 0, 0, 2643, 2644, 5, 81, 0, 0, 2644, 2645, 5, 85, 0, 0, 2645, 2646, 5, 69, 0, 0, 2646, 514, 1, 0, 0, 0, 2647, 2648, 5, 75, 0, 0, 2648, 2649, 5, 69, 0, 0, 2649, 2650, 5, 89, 0, 0, 2650, 516, 1, 0, 0, 0, 2651, 2652, 5, 80, 0, 0, 2652, 2653, 5, 69, 0, 0, 2653, 2654, 5, 82, 0, 0, 2654, 2655, 5, 73, 0, 0, 2655, 2656, 5, 79, 0, 0, 2656, 2657, 5, 68, 0, 0, 2657, 518, 1, 0, 0, 0, 2658, 2659, 5, 83, 0, 0, 2659, 2660, 5, 89, 0, 0, 2660, 2661, 5, 83, 0, 0, 2661, 2662, 5, 84, 0, 0, 2662, 2663, 5, 69, 0, 0, 2663, 2664, 5, 77, 0, 0, 2664, 2665, 5, 95, 0, 0, 2665, 2666, 5, 84, 0, 0, 2666, 2667, 5, 73, 0, 0, 2667, 2668, 5, 77, 0, 0, 2668, 2669, 5, 69, 0, 0, 2669, 520, 1, 0, 0, 0, 2670, 2671, 5, 69, 0, 0, 2671, 2672, 5, 78, 0, 0, 2672, 2673, 5, 70, 0, 0, 2673, 2674, 5, 79, 0, 0, 2674, 2675, 5, 82, 0, 0, 2675, 2676, 5, 67, 0, 0, 2676, 2677, 5, 69, 0, 0, 2677, 2678, 5, 68, 0, 0, 2678, 522, 1, 0, 0, 0, 2679, 2680, 5, 77, 0, 0, 2680, 2681, 5, 69, 0, 0, 2681, 2682, 5, 84, 0, 0, 2682, 2683, 5, 65, 0, 0, 2683, 2684, 5, 68, 0, 0, 2684, 2685, 5, 65, 0, 0, 2685, 2686, 5, 84, 0, 0, 2686, 2687, 5, 65, 0, 0, 2687, 524, 1, 0, 0, 0, 2688, 2689, 5, 86, 0, 0, 2689, 2690, 5, 73, 0, 0, 2690, 2691, 5, 82, 0, 0, 2691, 2692, 5, 84, 0, 0, 2692, 2693, 5, 85, 0, 0, 2693, 2694, 5, 65, 0, 0, 2694, 2695, 5, 76, 0, 0, 2695, 526, 1, 0, 0, 0, 2696, 2697, 5, 90, 0, 0, 2697, 2698, 5, 79, 0, 0, 2698, 2699, 5, 78, 0, 0, 2699, 2700, 5, 69, 0, 0, 2700, 528, 1, 0, 0, 0, 2701, 2702, 5, 83, 0, 0, 2702, 2703, 5, 84, 0, 0, 2703, 2704, 5, 82, 0, 0, 2704, 2705, 5, 73, 0, 0, 2705, 2706, 5, 78, 0, 0, 2706, 2707, 5, 71, 0, 0, 2707, 530, 1, 0, 0, 0, 2708, 2709, 5, 65, 0, 0, 2709, 2710, 5, 82, 0, 0, 2710, 2711, 5, 82, 0, 0, 2711, 2712, 5, 65, 0, 0, 2712, 2713, 5, 89, 0, 0, 2713, 532, 1, 0, 0, 0, 2714, 2715, 5, 77, 0, 0, 2715, 2716, 5, 65, 0, 0, 2716, 2717, 5, 80, 0, 0, 2717, 534, 1, 0, 0, 0, 2718, 2719, 5, 67, 0, 0, 2719, 2720, 5, 72, 0, 0, 2720, 2721, 5, 65, 0, 0, 2721, 2722, 5, 82, 0, 0, 2722, 536, 1, 0, 0, 0, 2723, 2724, 5, 86, 0, 0, 2724, 2725, 5, 65, 0, 0, 2725, 2726, 5, 82, 0, 0, 2726, 2727, 5, 67, 0, 0, 2727, 2728, 5, 72, 0, 0, 2728, 2729, 5, 65, 0, 0, 2729, 2730, 5, 82, 0, 0, 2730, 538, 1, 0, 0, 0, 2731, 2732, 5, 66, 0, 0, 2732, 2733, 5, 73, 0, 0, 2733, 2734, 5, 78, 0, 0, 2734, 2735, 5, 65, 0, 0, 2735, 2736, 5, 82, 0, 0, 2736, 2737, 5, 89, 0, 0, 2737, 540, 1, 0, 0, 0, 2738, 2739, 5, 86, 0, 0, 2739, 2740, 5, 65, 0, 0, 2740, 2741, 5, 82, 0, 0, 2741, 2742, 5, 66, 0, 0, 2742, 2743, 5, 73, 0, 0, 2743, 2744, 5, 78, 0, 0, 2744, 2745, 5, 65, 0, 0, 2745, 2746, 5, 82, 0, 0, 2746, 2747, 5, 89, 0, 0, 2747, 542, 1, 0, 0, 0, 2748, 2749, 5, 66, 0, 0, 2749, 2750, 5, 89, 0, 0, 2750, 2751, 5, 84, 0, 0, 2751, 2752, 5, 69, 0, 0, 2752, 2753, 5, 83, 0, 0, 2753, 544, 1, 0, 0, 0, 2754, 2755, 5, 68, 0, 0, 2755, 2756, 5, 69, 0, 0, 2756, 2757, 5, 67, 0, 0, 2757, 2758, 5, 73, 0, 0, 2758, 2759, 5, 77, 0, 0, 2759, 2760, 5, 65, 0, 0, 2760, 2761, 5, 76, 0, 0, 2761, 546, 1, 0, 0, 0, 2762, 2763, 5, 68, 0, 0, 2763, 2764, 5, 69, 0, 0, 2764, 2765, 5, 67, 0, 0, 2765, 548, 1, 0, 0, 0, 2766, 2767, 5, 78, 0, 0, 2767, 2768, 5, 85, 0, 0, 2768, 2769, 5, 77, 0, 0, 2769, 2770, 5, 69, 0, 0, 2770, 2771, 5, 82, 0, 0, 2771, 2772, 5, 73, 0, 0, 2772, 2773, 5, 67, 0, 0, 2773, 550, 1, 0, 0, 0, 2774, 2775, 5, 84, 0, 0, 2775, 2776, 5, 73, 0, 0, 2776, 2777, 5, 78, 0, 0, 2777, 2778, 5, 89, 0, 0, 2778, 2779, 5, 73, 0, 0, 2779, 2780, 5, 78, 0, 0, 2780, 2781, 5, 84, 0, 0, 2781, 552, 1, 0, 0, 0, 2782, 2783, 5, 83, 0, 0, 2783, 2784, 5, 77, 0, 0, 2784, 2785, 5, 65, 0, 0, 2785, 2786, 5, 76, 0, 0, 2786, 2787, 5, 76, 0, 0, 2787, 2788, 5, 73, 0, 0, 2788, 2789, 5, 78, 0, 0, 2789, 2790, 5, 84, 0, 0, 2790, 554, 1, 0, 0, 0, 2791, 2792, 5, 73, 0, 0, 2792, 2793, 5, 78, 0, 0, 2793, 2794, 5, 84, 0, 0, 2794, 556, 1, 0, 0, 0, 2795, 2796, 5, 73, 0, 0, 2796, 2797, 5, 78, 0, 0, 2797, 2798, 5, 84, 0, 0, 2798, 2799, 5, 69, 0, 0, 2799, 2800, 5, 71, 0, 0, 2800, 2801, 5, 69, 0, 0, 2801, 2802, 5, 82, 0, 0, 2802, 558, 1, 0, 0, 0, 2803, 2804, 5, 66, 0, 0, 2804, 2805, 5, 73, 0, 0, 2805, 2806, 5, 71, 0, 0, 2806, 2807, 5, 73, 0, 0, 2807, 2808, 5, 78, 0, 0, 2808, 2809, 5, 84, 0, 0, 2809, 560, 1, 0, 0, 0, 2810, 2811, 5, 70, 0, 0, 2811, 2812, 5, 76, 0, 0, 2812, 2813, 5, 79, 0, 0, 2813, 2814, 5, 65, 0, 0, 2814, 2815, 5, 84, 0, 0, 2815, 562, 1, 0, 0, 0, 2816, 2817, 5, 68, 0, 0, 2817, 2818, 5, 79, 0, 0, 2818, 2819, 5, 85, 0, 0, 2819, 2820, 5, 66, 0, 0, 2820, 2821, 5, 76, 0, 0, 2821, 2822, 5, 69, 0, 0, 2822, 564, 1, 0, 0, 0, 2823, 2824, 5, 68, 0, 0, 2824, 2825, 5, 65, 0, 0, 2825, 2826, 5, 84, 0, 0, 2826, 2827, 5, 69, 0, 0, 2827, 566, 1, 0, 0, 0, 2828, 2829, 5, 84, 0, 0, 2829, 2830, 5, 73, 0, 0, 2830, 2831, 5, 77, 0, 0, 2831, 2832, 5, 69, 0, 0, 2832, 568, 1, 0, 0, 0, 2833, 2834, 5, 84, 0, 0, 2834, 2835, 5, 73, 0, 0, 2835, 2836, 5, 77, 0, 0, 2836, 2837, 5, 69, 0, 0, 2837, 2838, 5, 83, 0, 0, 2838, 2839, 5, 84, 0, 0, 2839, 2840, 5, 65, 0, 0, 2840, 2841, 5, 77, 0, 0, 2841, 2842, 5, 80, 0, 0, 2842, 570, 1, 0, 0, 0, 2843, 2844, 5, 84, 0, 0, 2844, 2845, 5, 73, 0, 0, 2845, 2846, 5, 77, 0, 0, 2846, 2847, 5, 69, 0, 0, 2847, 2848, 5, 83, 0, 0, 2848, 2849, 5, 84, 0, 0, 2849, 2850, 5, 65, 0, 0, 2850, 2851, 5, 77, 0, 0, 2851, 2852, 5, 80, 0, 0, 2852, 2853, 5, 95, 0, 0, 2853, 2854, 5, 76, 0, 0, 2854, 2855, 5, 84, 0, 0, 2855, 2856, 5, 90, 0, 0, 2856, 572, 1, 0, 0, 0, 2857, 2858, 5, 77, 0, 0, 2858, 2859, 5, 85, 0, 0, 2859, 2860, 5, 76, 0, 0, 2860, 2861, 5, 84, 0, 0, 2861, 2862, 5, 73, 0, 0, 2862, 2863, 5, 83, 0, 0, 2863, 2864, 5, 69, 0, 0, 2864, 2865, 5, 84, 0, 0, 2865, 574, 1, 0, 0, 0, 2866, 2867, 5, 66, 0, 0, 2867, 2868, 5, 79, 0, 0, 2868, 2869, 5, 79, 0, 0, 2869, 2870, 5, 76, 0, 0, 2870, 2871, 5, 69, 0, 0, 2871, 2872, 5, 65, 0, 0, 2872, 2873, 5, 78, 0, 0, 2873, 576, 1, 0, 0, 0, 2874, 2875, 5, 82, 0, 0, 2875, 2876, 5, 65, 0, 0, 2876, 2877, 5, 87, 0, 0, 2877, 578, 1, 0, 0, 0, 2878, 2879, 5, 82, 0, 0, 2879, 2880, 5, 79, 0, 0, 2880, 2881, 5, 87, 0, 0, 2881, 580, 1, 0, 0, 0, 2882, 2883, 5, 78, 0, 0, 2883, 2884, 5, 85, 0, 0, 2884, 2885, 5, 76, 0, 0, 2885, 2886, 5, 76, 0, 0, 2886, 582, 1, 0, 0, 0, 2887, 2888, 5, 68, 0, 0, 2888, 2889, 5, 65, 0, 0, 2889, 2890, 5, 84, 0, 0, 2890, 2891, 5, 69, 0, 0, 2891, 2892, 5, 84, 0, 0, 2892, 2893, 5, 73, 0, 0, 2893, 2894, 5, 77, 0, 0, 2894, 2895, 5, 69, 0, 0, 2895, 584, 1, 0, 0, 0, 2896, 2897, 5, 61, 0, 0, 2897, 586, 1, 0, 0, 0, 2898, 2899, 5, 62, 0, 0, 2899, 588, 1, 0, 0, 0, 2900, 2901, 5, 60, 0, 0, 2901, 590, 1, 0, 0, 0, 2902, 2903, 5, 33, 0, 0, 2903, 592, 1, 0, 0, 0, 2904, 2905, 5, 126, 0, 0, 2905, 594, 1, 0, 0, 0, 2906, 2907, 5, 124, 0, 0, 2907, 596, 1, 0, 0, 0, 2908, 2909, 5, 38, 0, 0, 2909, 598, 1, 0, 0, 0, 2910, 2911, 5, 94, 0, 0, 2911, 600, 1, 0, 0, 0, 2912, 2913, 5, 46, 0, 0, 2913, 602, 1, 0, 0, 0, 2914, 2915, 5, 91, 0, 0, 2915, 604, 1, 0, 0, 0, 2916, 2917, 5, 93, 0, 0, 2917, 606, 1, 0, 0, 0, 2918, 2919, 5, 40, 0, 0, 2919, 608, 1, 0, 0, 0, 2920, 2921, 5, 41, 0, 0, 2921, 610, 1, 0, 0, 0, 2922, 2923, 5, 44, 0, 0, 2923, 612, 1, 0, 0, 0, 2924, 2925, 5, 59, 0, 0, 2925, 614, 1, 0, 0, 0, 2926, 2927, 5, 64, 0, 0, 2927, 616, 1, 0, 0, 0, 2928, 2929, 5, 39, 0, 0, 2929, 618, 1, 0, 0, 0, 2930, 2931, 5, 34, 0, 0, 2931, 620, 1, 0, 0, 0, 2932, 2933, 5, 96, 0, 0, 2933, 622, 1, 0, 0, 0, 2934, 2935, 5, 58, 0, 0, 2935, 624, 1, 0, 0, 0, 2936, 2937, 5, 42, 0, 0, 2937, 626, 1, 0, 0, 0, 2938, 2939, 5, 95, 0, 0, 2939, 628, 1, 0, 0, 0, 2940, 2941, 5, 45, 0, 0, 2941, 630, 1, 0, 0, 0, 2942, 2943, 5, 43, 0, 0, 2943, 632, 1, 0, 0, 0, 2944, 2945, 5, 37, 0, 0, 2945, 634, 1, 0, 0, 0, 2946, 2947, 5, 124, 0, 0, 2947, 2948, 5, 124, 0, 0, 2948, 636, 1, 0, 0, 0, 2949, 2950, 5, 45, 0, 0, 2950, 2951, 5, 45, 0, 0, 2951, 638, 1, 0, 0, 0, 2952, 2953, 5, 47, 0, 0, 2953, 640, 1, 0, 0, 0, 2954, 2955, 5, 46, 0, 0, 2955, 2956, 3, 665, 332, 0, 2956, 642, 1, 0, 0, 0, 2957, 2958, 7, 2, 0, 0, 2958, 2959, 3, 655, 327, 0, 2959, 644, 1, 0, 0, 0, 2960, 2964, 3, 673, 336, 0, 2961, 2964, 3, 675, 337, 0, 2962, 2964, 3, 679, 339, 0, 2963, 2960, 1, 0, 0, 0, 2963, 2961, 1, 0, 0, 0, 2963, 2962, 1, 0, 0, 0, 2964, 646, 1, 0, 0, 0, 2965, 2967, 3, 669, 334, 0, 2966, 2965, 1, 0, 0, 0, 2967, 2968, 1, 0, 0, 0, 2968, 2966, 1, 0, 0, 0, 2968, 2969, 1, 0, 0, 0, 2969, 648, 1, 0, 0, 0, 2970, 2972, 3, 669, 334, 0, 2971, 2970, 1, 0, 0, 0, 2972, 2973, 1, 0, 0, 0, 2973, 2971, 1, 0, 0, 0, 2973, 2974, 1, 0, 0, 0, 2974, 2976, 1, 0, 0, 0, 2975, 2971, 1, 0, 0, 0, 2975, 2976, 1, 0, 0, 0, 2976, 2977, 1, 0, 0, 0, 2977, 2979, 5, 46, 0, 0, 2978, 2980, 3, 669, 334, 0, 2979, 2978, 1, 0, 0, 0, 2980, 2981, 1, 0, 0, 0, 2981, 2979, 1, 0, 0, 0, 2981, 2982, 1, 0, 0, 0, 2982, 3014, 1, 0, 0, 0, 2983, 2985, 3, 669, 334, 0, 2984, 2983, 1, 0, 0, 0, 2985, 2986, 1, 0, 0, 0, 2986, 2984, 1, 0, 0, 0, 2986, 2987, 1, 0, 0, 0, 2987, 2988, 1, 0, 0, 0, 2988, 2989, 5, 46, 0, 0, 2989, 2990, 3, 663, 331, 0, 2990, 3014, 1, 0, 0, 0, 2991, 2993, 3, 669, 334, 0, 2992, 2991, 1, 0, 0, 0, 2993, 2994, 1, 0, 0, 0, 2994, 2992, 1, 0, 0, 0, 2994, 2995, 1, 0, 0, 0, 2995, 2997, 1, 0, 0, 0, 2996, 2992, 1, 0, 0, 0, 2996, 2997, 1, 0, 0, 0, 2997, 2998, 1, 0, 0, 0, 2998, 3000, 5, 46, 0, 0, 2999, 3001, 3, 669, 334, 0, 3000, 2999, 1, 0, 0, 0, 3001, 3002, 1, 0, 0, 0, 3002, 3000, 1, 0, 0, 0, 3002, 3003, 1, 0, 0, 0, 3003, 3004, 1, 0, 0, 0, 3004, 3005, 3, 663, 331, 0, 3005, 3014, 1, 0, 0, 0, 3006, 3008, 3, 669, 334, 0, 3007, 3006, 1, 0, 0, 0, 3008, 3009, 1, 0, 0, 0, 3009, 3007, 1, 0, 0, 0, 3009, 3010, 1, 0, 0, 0, 3010, 3011, 1, 0, 0, 0, 3011, 3012, 3, 663, 331, 0, 3012, 3014, 1, 0, 0, 0, 3013, 2975, 1, 0, 0, 0, 3013, 2984, 1, 0, 0, 0, 3013, 2996, 1, 0, 0, 0, 3013, 3007, 1, 0, 0, 0, 3014, 650, 1, 0, 0, 0, 3015, 3016, 3, 677, 338, 0, 3016, 652, 1, 0, 0, 0, 3017, 3018, 3, 665, 332, 0, 3018, 654, 1, 0, 0, 0, 3019, 3020, 3, 667, 333, 0, 3020, 656, 1, 0, 0, 0, 3021, 3022, 3, 659, 329, 0, 3022, 658, 1, 0, 0, 0, 3023, 3027, 7, 3, 0, 0, 3024, 3026, 8, 4, 0, 0, 3025, 3024, 1, 0, 0, 0, 3026, 3029, 1, 0, 0, 0, 3027, 3025, 1, 0, 0, 0, 3027, 3028, 1, 0, 0, 0, 3028, 3031, 1, 0, 0, 0, 3029, 3027, 1, 0, 0, 0, 3030, 3023, 1, 0, 0, 0, 3031, 3032, 1, 0, 0, 0, 3032, 3030, 1, 0, 0, 0, 3032, 3033, 1, 0, 0, 0, 3033, 660, 1, 0, 0, 0, 3034, 3042, 5, 96, 0, 0, 3035, 3036, 5, 92, 0, 0, 3036, 3041, 9, 0, 0, 0, 3037, 3038, 5, 96, 0, 0, 3038, 3041, 5, 96, 0, 0, 3039, 3041, 8, 5, 0, 0, 3040, 3035, 1, 0, 0, 0, 3040, 3037, 1, 0, 0, 0, 3040, 3039, 1, 0, 0, 0, 3041, 3044, 1, 0, 0, 0, 3042, 3040, 1, 0, 0, 0, 3042, 3043, 1, 0, 0, 0, 3043, 3045, 1, 0, 0, 0, 3044, 3042, 1, 0, 0, 0, 3045, 3046, 5, 96, 0, 0, 3046, 662, 1, 0, 0, 0, 3047, 3049, 5, 69, 0, 0, 3048, 3050, 7, 6, 0, 0, 3049, 3048, 1, 0, 0, 0, 3049, 3050, 1, 0, 0, 0, 3050, 3052, 1, 0, 0, 0, 3051, 3053, 3, 669, 334, 0, 3052, 3051, 1, 0, 0, 0, 3053, 3054, 1, 0, 0, 0, 3054, 3052, 1, 0, 0, 0, 3054, 3055, 1, 0, 0, 0, 3055, 664, 1, 0, 0, 0, 3056, 3058, 7, 7, 0, 0, 3057, 3056, 1, 0, 0, 0, 3058, 3061, 1, 0, 0, 0, 3059, 3060, 1, 0, 0, 0, 3059, 3057, 1, 0, 0, 0, 3060, 3063, 1, 0, 0, 0, 3061, 3059, 1, 0, 0, 0, 3062, 3064, 7, 8, 0, 0, 3063, 3062, 1, 0, 0, 0, 3064, 3065, 1, 0, 0, 0, 3065, 3066, 1, 0, 0, 0, 3065, 3063, 1, 0, 0, 0, 3066, 3070, 1, 0, 0, 0, 3067, 3069, 7, 7, 0, 0, 3068, 3067, 1, 0, 0, 0, 3069, 3072, 1, 0, 0, 0, 3070, 3068, 1, 0, 0, 0, 3070, 3071, 1, 0, 0, 0, 3071, 666, 1, 0, 0, 0, 3072, 3070, 1, 0, 0, 0, 3073, 3075, 7, 9, 0, 0, 3074, 3073, 1, 0, 0, 0, 3075, 3078, 1, 0, 0, 0, 3076, 3077, 1, 0, 0, 0, 3076, 3074, 1, 0, 0, 0, 3077, 3080, 1, 0, 0, 0, 3078, 3076, 1, 0, 0, 0, 3079, 3081, 7, 10, 0, 0, 3080, 3079, 1, 0, 0, 0, 3081, 3082, 1, 0, 0, 0, 3082, 3083, 1, 0, 0, 0, 3082, 3080, 1, 0, 0, 0, 3083, 3087, 1, 0, 0, 0, 3084, 3086, 7, 9, 0, 0, 3085, 3084, 1, 0, 0, 0, 3086, 3089, 1, 0, 0, 0, 3087, 3085, 1, 0, 0, 0, 3087, 3088, 1, 0, 0, 0, 3088, 668, 1, 0, 0, 0, 3089, 3087, 1, 0, 0, 0, 3090, 3091, 7, 11, 0, 0, 3091, 670, 1, 0, 0, 0, 3092, 3093, 7, 12, 0, 0, 3093, 672, 1, 0, 0, 0, 3094, 3102, 5, 34, 0, 0, 3095, 3096, 5, 92, 0, 0, 3096, 3101, 9, 0, 0, 0, 3097, 3098, 5, 34, 0, 0, 3098, 3101, 5, 34, 0, 0, 3099, 3101, 8, 13, 0, 0, 3100, 3095, 1, 0, 0, 0, 3100, 3097, 1, 0, 0, 0, 3100, 3099, 1, 0, 0, 0, 3101, 3104, 1, 0, 0, 0, 3102, 3100, 1, 0, 0, 0, 3102, 3103, 1, 0, 0, 0, 3103, 3105, 1, 0, 0, 0, 3104, 3102, 1, 0, 0, 0, 3105, 3106, 5, 34, 0, 0, 3106, 674, 1, 0, 0, 0, 3107, 3115, 5, 39, 0, 0, 3108, 3109, 5, 92, 0, 0, 3109, 3114, 9, 0, 0, 0, 3110, 3111, 5, 39, 0, 0, 3111, 3114, 5, 39, 0, 0, 3112, 3114, 8, 14, 0, 0, 3113, 3108, 1, 0, 0, 0, 3113, 3110, 1, 0, 0, 0, 3113, 3112, 1, 0, 0, 0, 3114, 3117, 1, 0, 0, 0, 3115, 3113, 1, 0, 0, 0, 3115, 3116, 1, 0, 0, 0, 3116, 3118, 1, 0, 0, 0, 3117, 3115, 1, 0, 0, 0, 3118, 3119, 5, 39, 0, 0, 3119, 676, 1, 0, 0, 0, 3120, 3121, 5, 66, 0, 0, 3121, 3123, 5, 39, 0, 0, 3122, 3124, 7, 15, 0, 0, 3123, 3122, 1, 0, 0, 0, 3124, 3125, 1, 0, 0, 0, 3125, 3123, 1, 0, 0, 0, 3125, 3126, 1, 0, 0, 0, 3126, 3127, 1, 0, 0, 0, 3127, 3128, 5, 39, 0, 0, 3128, 678, 1, 0, 0, 0, 3129, 3137, 5, 96, 0, 0, 3130, 3131, 5, 92, 0, 0, 3131, 3136, 9, 0, 0, 0, 3132, 3133, 5, 96, 0, 0, 3133, 3136, 5, 96, 0, 0, 3134, 3136, 8, 5, 0, 0, 3135, 3130, 1, 0, 0, 0, 3135, 3132, 1, 0, 0, 0, 3135, 3134, 1, 0, 0, 0, 3136, 3139, 1, 0, 0, 0, 3137, 3135, 1, 0, 0, 0, 3137, 3138, 1, 0, 0, 0, 3138, 3140, 1, 0, 0, 0, 3139, 3137, 1, 0, 0, 0, 3140, 3141, 5, 96, 0, 0, 3141, 680, 1, 0, 0, 0, 40, 0, 684, 694, 705, 710, 714, 718, 724, 728, 730, 2963, 2968, 2973, 2975, 2981, 2986, 2994, 2996, 3002, 3009, 3013, 3027, 3032, 3040, 3042, 3049, 3054, 3059, 3065, 3070, 3076, 3082, 3087, 3100, 3102, 3113, 3115, 3125, 3135, 3137, 1, 0, 1, 0] \ No newline at end of file +[4, 0, 349, 3295, 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, 1, 0, 4, 0, 721, 8, 0, 11, 0, 12, 0, 722, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 731, 8, 1, 10, 1, 12, 1, 734, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 3, 2, 744, 8, 2, 1, 2, 5, 2, 747, 8, 2, 10, 2, 12, 2, 750, 9, 2, 1, 2, 3, 2, 753, 8, 2, 1, 2, 1, 2, 3, 2, 757, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 763, 8, 2, 1, 2, 1, 2, 3, 2, 767, 8, 2, 3, 2, 769, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 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, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 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, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 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, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 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, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 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, 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, 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, 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, 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, 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, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 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, 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, 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, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 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, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 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, 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, 103, 1, 103, 1, 103, 1, 103, 1, 103, 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, 106, 1, 106, 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, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 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, 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, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 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, 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, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 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, 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, 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, 142, 1, 142, 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, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 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, 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, 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, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 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, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 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, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 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, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 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, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 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, 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, 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, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 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, 237, 1, 237, 1, 237, 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, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 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, 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, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 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, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 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, 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, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 257, 1, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 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, 262, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 1, 266, 1, 266, 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, 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, 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, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 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, 275, 1, 275, 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, 278, 1, 278, 1, 278, 1, 278, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 281, 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, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 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, 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, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 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, 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, 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, 300, 1, 300, 1, 300, 1, 300, 1, 300, 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, 303, 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, 303, 1, 304, 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, 306, 1, 306, 1, 306, 1, 306, 1, 307, 1, 307, 1, 307, 1, 307, 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, 311, 1, 311, 1, 312, 1, 312, 1, 313, 1, 313, 1, 314, 1, 314, 1, 315, 1, 315, 1, 316, 1, 316, 1, 317, 1, 317, 1, 318, 1, 318, 1, 319, 1, 319, 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, 1, 329, 1, 330, 1, 330, 1, 331, 1, 331, 1, 332, 1, 332, 1, 333, 1, 333, 1, 334, 1, 334, 1, 335, 1, 335, 1, 336, 1, 336, 1, 337, 1, 337, 1, 337, 1, 338, 1, 338, 1, 338, 1, 339, 1, 339, 1, 340, 1, 340, 1, 341, 1, 341, 1, 341, 1, 342, 1, 342, 1, 342, 3, 342, 3133, 8, 342, 1, 343, 4, 343, 3136, 8, 343, 11, 343, 12, 343, 3137, 1, 344, 4, 344, 3141, 8, 344, 11, 344, 12, 344, 3142, 3, 344, 3145, 8, 344, 1, 344, 1, 344, 4, 344, 3149, 8, 344, 11, 344, 12, 344, 3150, 1, 344, 4, 344, 3154, 8, 344, 11, 344, 12, 344, 3155, 1, 344, 1, 344, 1, 344, 1, 344, 4, 344, 3162, 8, 344, 11, 344, 12, 344, 3163, 3, 344, 3166, 8, 344, 1, 344, 1, 344, 4, 344, 3170, 8, 344, 11, 344, 12, 344, 3171, 1, 344, 1, 344, 1, 344, 4, 344, 3177, 8, 344, 11, 344, 12, 344, 3178, 1, 344, 1, 344, 3, 344, 3183, 8, 344, 1, 345, 1, 345, 1, 346, 1, 346, 1, 347, 1, 347, 1, 348, 1, 348, 1, 348, 1, 349, 1, 349, 5, 349, 3196, 8, 349, 10, 349, 12, 349, 3199, 9, 349, 4, 349, 3201, 8, 349, 11, 349, 12, 349, 3202, 1, 350, 1, 350, 1, 350, 1, 350, 1, 350, 1, 350, 5, 350, 3211, 8, 350, 10, 350, 12, 350, 3214, 9, 350, 1, 350, 1, 350, 1, 351, 1, 351, 3, 351, 3220, 8, 351, 1, 351, 4, 351, 3223, 8, 351, 11, 351, 12, 351, 3224, 1, 352, 5, 352, 3228, 8, 352, 10, 352, 12, 352, 3231, 9, 352, 1, 352, 4, 352, 3234, 8, 352, 11, 352, 12, 352, 3235, 1, 352, 5, 352, 3239, 8, 352, 10, 352, 12, 352, 3242, 9, 352, 1, 353, 1, 353, 1, 354, 1, 354, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 5, 355, 3254, 8, 355, 10, 355, 12, 355, 3257, 9, 355, 1, 355, 1, 355, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 5, 356, 3267, 8, 356, 10, 356, 12, 356, 3270, 9, 356, 1, 356, 1, 356, 1, 357, 1, 357, 1, 357, 4, 357, 3277, 8, 357, 11, 357, 12, 357, 3278, 1, 357, 1, 357, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 5, 358, 3289, 8, 358, 10, 358, 12, 358, 3292, 9, 358, 1, 358, 1, 358, 3, 732, 3229, 3235, 0, 359, 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, 0, 701, 0, 703, 0, 705, 0, 707, 0, 709, 0, 711, 0, 713, 0, 715, 0, 717, 0, 1, 0, 13, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 10, 10, 13, 13, 2, 0, 47, 47, 92, 92, 3, 0, 32, 32, 47, 47, 92, 92, 2, 0, 92, 92, 96, 96, 2, 0, 43, 43, 45, 45, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 1, 0, 48, 49, 3327, 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, 1, 720, 1, 0, 0, 0, 3, 726, 1, 0, 0, 0, 5, 768, 1, 0, 0, 0, 7, 772, 1, 0, 0, 0, 9, 779, 1, 0, 0, 0, 11, 784, 1, 0, 0, 0, 13, 788, 1, 0, 0, 0, 15, 791, 1, 0, 0, 0, 17, 795, 1, 0, 0, 0, 19, 799, 1, 0, 0, 0, 21, 808, 1, 0, 0, 0, 23, 814, 1, 0, 0, 0, 25, 820, 1, 0, 0, 0, 27, 823, 1, 0, 0, 0, 29, 832, 1, 0, 0, 0, 31, 837, 1, 0, 0, 0, 33, 842, 1, 0, 0, 0, 35, 849, 1, 0, 0, 0, 37, 855, 1, 0, 0, 0, 39, 862, 1, 0, 0, 0, 41, 868, 1, 0, 0, 0, 43, 871, 1, 0, 0, 0, 45, 874, 1, 0, 0, 0, 47, 878, 1, 0, 0, 0, 49, 881, 1, 0, 0, 0, 51, 885, 1, 0, 0, 0, 53, 888, 1, 0, 0, 0, 55, 895, 1, 0, 0, 0, 57, 903, 1, 0, 0, 0, 59, 908, 1, 0, 0, 0, 61, 914, 1, 0, 0, 0, 63, 917, 1, 0, 0, 0, 65, 922, 1, 0, 0, 0, 67, 928, 1, 0, 0, 0, 69, 934, 1, 0, 0, 0, 71, 938, 1, 0, 0, 0, 73, 943, 1, 0, 0, 0, 75, 947, 1, 0, 0, 0, 77, 956, 1, 0, 0, 0, 79, 961, 1, 0, 0, 0, 81, 966, 1, 0, 0, 0, 83, 971, 1, 0, 0, 0, 85, 976, 1, 0, 0, 0, 87, 982, 1, 0, 0, 0, 89, 986, 1, 0, 0, 0, 91, 991, 1, 0, 0, 0, 93, 997, 1, 0, 0, 0, 95, 1003, 1, 0, 0, 0, 97, 1009, 1, 0, 0, 0, 99, 1014, 1, 0, 0, 0, 101, 1019, 1, 0, 0, 0, 103, 1025, 1, 0, 0, 0, 105, 1030, 1, 0, 0, 0, 107, 1035, 1, 0, 0, 0, 109, 1043, 1, 0, 0, 0, 111, 1046, 1, 0, 0, 0, 113, 1052, 1, 0, 0, 0, 115, 1060, 1, 0, 0, 0, 117, 1067, 1, 0, 0, 0, 119, 1072, 1, 0, 0, 0, 121, 1082, 1, 0, 0, 0, 123, 1088, 1, 0, 0, 0, 125, 1093, 1, 0, 0, 0, 127, 1103, 1, 0, 0, 0, 129, 1113, 1, 0, 0, 0, 131, 1123, 1, 0, 0, 0, 133, 1131, 1, 0, 0, 0, 135, 1137, 1, 0, 0, 0, 137, 1143, 1, 0, 0, 0, 139, 1148, 1, 0, 0, 0, 141, 1153, 1, 0, 0, 0, 143, 1161, 1, 0, 0, 0, 145, 1168, 1, 0, 0, 0, 147, 1175, 1, 0, 0, 0, 149, 1181, 1, 0, 0, 0, 151, 1191, 1, 0, 0, 0, 153, 1196, 1, 0, 0, 0, 155, 1204, 1, 0, 0, 0, 157, 1212, 1, 0, 0, 0, 159, 1222, 1, 0, 0, 0, 161, 1229, 1, 0, 0, 0, 163, 1236, 1, 0, 0, 0, 165, 1243, 1, 0, 0, 0, 167, 1248, 1, 0, 0, 0, 169, 1257, 1, 0, 0, 0, 171, 1265, 1, 0, 0, 0, 173, 1270, 1, 0, 0, 0, 175, 1285, 1, 0, 0, 0, 177, 1305, 1, 0, 0, 0, 179, 1320, 1, 0, 0, 0, 181, 1327, 1, 0, 0, 0, 183, 1335, 1, 0, 0, 0, 185, 1343, 1, 0, 0, 0, 187, 1348, 1, 0, 0, 0, 189, 1353, 1, 0, 0, 0, 191, 1358, 1, 0, 0, 0, 193, 1365, 1, 0, 0, 0, 195, 1373, 1, 0, 0, 0, 197, 1380, 1, 0, 0, 0, 199, 1384, 1, 0, 0, 0, 201, 1391, 1, 0, 0, 0, 203, 1399, 1, 0, 0, 0, 205, 1410, 1, 0, 0, 0, 207, 1420, 1, 0, 0, 0, 209, 1425, 1, 0, 0, 0, 211, 1431, 1, 0, 0, 0, 213, 1438, 1, 0, 0, 0, 215, 1447, 1, 0, 0, 0, 217, 1457, 1, 0, 0, 0, 219, 1460, 1, 0, 0, 0, 221, 1472, 1, 0, 0, 0, 223, 1481, 1, 0, 0, 0, 225, 1487, 1, 0, 0, 0, 227, 1494, 1, 0, 0, 0, 229, 1501, 1, 0, 0, 0, 231, 1509, 1, 0, 0, 0, 233, 1513, 1, 0, 0, 0, 235, 1519, 1, 0, 0, 0, 237, 1524, 1, 0, 0, 0, 239, 1530, 1, 0, 0, 0, 241, 1542, 1, 0, 0, 0, 243, 1549, 1, 0, 0, 0, 245, 1558, 1, 0, 0, 0, 247, 1564, 1, 0, 0, 0, 249, 1571, 1, 0, 0, 0, 251, 1576, 1, 0, 0, 0, 253, 1584, 1, 0, 0, 0, 255, 1593, 1, 0, 0, 0, 257, 1596, 1, 0, 0, 0, 259, 1605, 1, 0, 0, 0, 261, 1613, 1, 0, 0, 0, 263, 1619, 1, 0, 0, 0, 265, 1623, 1, 0, 0, 0, 267, 1634, 1, 0, 0, 0, 269, 1641, 1, 0, 0, 0, 271, 1645, 1, 0, 0, 0, 273, 1648, 1, 0, 0, 0, 275, 1653, 1, 0, 0, 0, 277, 1661, 1, 0, 0, 0, 279, 1672, 1, 0, 0, 0, 281, 1682, 1, 0, 0, 0, 283, 1692, 1, 0, 0, 0, 285, 1699, 1, 0, 0, 0, 287, 1705, 1, 0, 0, 0, 289, 1711, 1, 0, 0, 0, 291, 1727, 1, 0, 0, 0, 293, 1740, 1, 0, 0, 0, 295, 1753, 1, 0, 0, 0, 297, 1763, 1, 0, 0, 0, 299, 1770, 1, 0, 0, 0, 301, 1781, 1, 0, 0, 0, 303, 1792, 1, 0, 0, 0, 305, 1798, 1, 0, 0, 0, 307, 1803, 1, 0, 0, 0, 309, 1811, 1, 0, 0, 0, 311, 1817, 1, 0, 0, 0, 313, 1827, 1, 0, 0, 0, 315, 1836, 1, 0, 0, 0, 317, 1845, 1, 0, 0, 0, 319, 1853, 1, 0, 0, 0, 321, 1859, 1, 0, 0, 0, 323, 1865, 1, 0, 0, 0, 325, 1873, 1, 0, 0, 0, 327, 1878, 1, 0, 0, 0, 329, 1888, 1, 0, 0, 0, 331, 1895, 1, 0, 0, 0, 333, 1905, 1, 0, 0, 0, 335, 1913, 1, 0, 0, 0, 337, 1919, 1, 0, 0, 0, 339, 1933, 1, 0, 0, 0, 341, 1946, 1, 0, 0, 0, 343, 1954, 1, 0, 0, 0, 345, 1961, 1, 0, 0, 0, 347, 1968, 1, 0, 0, 0, 349, 1980, 1, 0, 0, 0, 351, 1989, 1, 0, 0, 0, 353, 1998, 1, 0, 0, 0, 355, 2006, 1, 0, 0, 0, 357, 2016, 1, 0, 0, 0, 359, 2027, 1, 0, 0, 0, 361, 2033, 1, 0, 0, 0, 363, 2041, 1, 0, 0, 0, 365, 2053, 1, 0, 0, 0, 367, 2060, 1, 0, 0, 0, 369, 2068, 1, 0, 0, 0, 371, 2079, 1, 0, 0, 0, 373, 2088, 1, 0, 0, 0, 375, 2098, 1, 0, 0, 0, 377, 2105, 1, 0, 0, 0, 379, 2111, 1, 0, 0, 0, 381, 2123, 1, 0, 0, 0, 383, 2136, 1, 0, 0, 0, 385, 2145, 1, 0, 0, 0, 387, 2155, 1, 0, 0, 0, 389, 2159, 1, 0, 0, 0, 391, 2168, 1, 0, 0, 0, 393, 2176, 1, 0, 0, 0, 395, 2184, 1, 0, 0, 0, 397, 2189, 1, 0, 0, 0, 399, 2200, 1, 0, 0, 0, 401, 2212, 1, 0, 0, 0, 403, 2221, 1, 0, 0, 0, 405, 2229, 1, 0, 0, 0, 407, 2236, 1, 0, 0, 0, 409, 2242, 1, 0, 0, 0, 411, 2247, 1, 0, 0, 0, 413, 2254, 1, 0, 0, 0, 415, 2259, 1, 0, 0, 0, 417, 2266, 1, 0, 0, 0, 419, 2274, 1, 0, 0, 0, 421, 2281, 1, 0, 0, 0, 423, 2288, 1, 0, 0, 0, 425, 2293, 1, 0, 0, 0, 427, 2300, 1, 0, 0, 0, 429, 2305, 1, 0, 0, 0, 431, 2311, 1, 0, 0, 0, 433, 2323, 1, 0, 0, 0, 435, 2334, 1, 0, 0, 0, 437, 2347, 1, 0, 0, 0, 439, 2353, 1, 0, 0, 0, 441, 2361, 1, 0, 0, 0, 443, 2367, 1, 0, 0, 0, 445, 2374, 1, 0, 0, 0, 447, 2379, 1, 0, 0, 0, 449, 2385, 1, 0, 0, 0, 451, 2392, 1, 0, 0, 0, 453, 2402, 1, 0, 0, 0, 455, 2409, 1, 0, 0, 0, 457, 2415, 1, 0, 0, 0, 459, 2420, 1, 0, 0, 0, 461, 2427, 1, 0, 0, 0, 463, 2430, 1, 0, 0, 0, 465, 2437, 1, 0, 0, 0, 467, 2447, 1, 0, 0, 0, 469, 2457, 1, 0, 0, 0, 471, 2469, 1, 0, 0, 0, 473, 2481, 1, 0, 0, 0, 475, 2491, 1, 0, 0, 0, 477, 2502, 1, 0, 0, 0, 479, 2510, 1, 0, 0, 0, 481, 2519, 1, 0, 0, 0, 483, 2524, 1, 0, 0, 0, 485, 2530, 1, 0, 0, 0, 487, 2537, 1, 0, 0, 0, 489, 2541, 1, 0, 0, 0, 491, 2546, 1, 0, 0, 0, 493, 2559, 1, 0, 0, 0, 495, 2579, 1, 0, 0, 0, 497, 2599, 1, 0, 0, 0, 499, 2610, 1, 0, 0, 0, 501, 2626, 1, 0, 0, 0, 503, 2643, 1, 0, 0, 0, 505, 2650, 1, 0, 0, 0, 507, 2659, 1, 0, 0, 0, 509, 2665, 1, 0, 0, 0, 511, 2670, 1, 0, 0, 0, 513, 2678, 1, 0, 0, 0, 515, 2685, 1, 0, 0, 0, 517, 2689, 1, 0, 0, 0, 519, 2696, 1, 0, 0, 0, 521, 2708, 1, 0, 0, 0, 523, 2717, 1, 0, 0, 0, 525, 2726, 1, 0, 0, 0, 527, 2734, 1, 0, 0, 0, 529, 2739, 1, 0, 0, 0, 531, 2746, 1, 0, 0, 0, 533, 2750, 1, 0, 0, 0, 535, 2759, 1, 0, 0, 0, 537, 2770, 1, 0, 0, 0, 539, 2778, 1, 0, 0, 0, 541, 2783, 1, 0, 0, 0, 543, 2790, 1, 0, 0, 0, 545, 2795, 1, 0, 0, 0, 547, 2801, 1, 0, 0, 0, 549, 2809, 1, 0, 0, 0, 551, 2825, 1, 0, 0, 0, 553, 2834, 1, 0, 0, 0, 555, 2842, 1, 0, 0, 0, 557, 2846, 1, 0, 0, 0, 559, 2850, 1, 0, 0, 0, 561, 2855, 1, 0, 0, 0, 563, 2860, 1, 0, 0, 0, 565, 2867, 1, 0, 0, 0, 567, 2874, 1, 0, 0, 0, 569, 2880, 1, 0, 0, 0, 571, 2884, 1, 0, 0, 0, 573, 2889, 1, 0, 0, 0, 575, 2897, 1, 0, 0, 0, 577, 2904, 1, 0, 0, 0, 579, 2914, 1, 0, 0, 0, 581, 2920, 1, 0, 0, 0, 583, 2928, 1, 0, 0, 0, 585, 2932, 1, 0, 0, 0, 587, 2940, 1, 0, 0, 0, 589, 2948, 1, 0, 0, 0, 591, 2957, 1, 0, 0, 0, 593, 2961, 1, 0, 0, 0, 595, 2969, 1, 0, 0, 0, 597, 2976, 1, 0, 0, 0, 599, 2982, 1, 0, 0, 0, 601, 2989, 1, 0, 0, 0, 603, 2994, 1, 0, 0, 0, 605, 2999, 1, 0, 0, 0, 607, 3009, 1, 0, 0, 0, 609, 3023, 1, 0, 0, 0, 611, 3032, 1, 0, 0, 0, 613, 3040, 1, 0, 0, 0, 615, 3044, 1, 0, 0, 0, 617, 3048, 1, 0, 0, 0, 619, 3053, 1, 0, 0, 0, 621, 3062, 1, 0, 0, 0, 623, 3064, 1, 0, 0, 0, 625, 3066, 1, 0, 0, 0, 627, 3068, 1, 0, 0, 0, 629, 3070, 1, 0, 0, 0, 631, 3072, 1, 0, 0, 0, 633, 3074, 1, 0, 0, 0, 635, 3076, 1, 0, 0, 0, 637, 3078, 1, 0, 0, 0, 639, 3080, 1, 0, 0, 0, 641, 3082, 1, 0, 0, 0, 643, 3084, 1, 0, 0, 0, 645, 3086, 1, 0, 0, 0, 647, 3088, 1, 0, 0, 0, 649, 3090, 1, 0, 0, 0, 651, 3092, 1, 0, 0, 0, 653, 3094, 1, 0, 0, 0, 655, 3096, 1, 0, 0, 0, 657, 3098, 1, 0, 0, 0, 659, 3100, 1, 0, 0, 0, 661, 3102, 1, 0, 0, 0, 663, 3104, 1, 0, 0, 0, 665, 3106, 1, 0, 0, 0, 667, 3108, 1, 0, 0, 0, 669, 3110, 1, 0, 0, 0, 671, 3112, 1, 0, 0, 0, 673, 3114, 1, 0, 0, 0, 675, 3116, 1, 0, 0, 0, 677, 3119, 1, 0, 0, 0, 679, 3122, 1, 0, 0, 0, 681, 3124, 1, 0, 0, 0, 683, 3126, 1, 0, 0, 0, 685, 3132, 1, 0, 0, 0, 687, 3135, 1, 0, 0, 0, 689, 3182, 1, 0, 0, 0, 691, 3184, 1, 0, 0, 0, 693, 3186, 1, 0, 0, 0, 695, 3188, 1, 0, 0, 0, 697, 3190, 1, 0, 0, 0, 699, 3200, 1, 0, 0, 0, 701, 3204, 1, 0, 0, 0, 703, 3217, 1, 0, 0, 0, 705, 3229, 1, 0, 0, 0, 707, 3243, 1, 0, 0, 0, 709, 3245, 1, 0, 0, 0, 711, 3247, 1, 0, 0, 0, 713, 3260, 1, 0, 0, 0, 715, 3273, 1, 0, 0, 0, 717, 3282, 1, 0, 0, 0, 719, 721, 7, 0, 0, 0, 720, 719, 1, 0, 0, 0, 721, 722, 1, 0, 0, 0, 722, 720, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, 723, 724, 1, 0, 0, 0, 724, 725, 6, 0, 0, 0, 725, 2, 1, 0, 0, 0, 726, 727, 5, 47, 0, 0, 727, 728, 5, 42, 0, 0, 728, 732, 1, 0, 0, 0, 729, 731, 9, 0, 0, 0, 730, 729, 1, 0, 0, 0, 731, 734, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 732, 730, 1, 0, 0, 0, 733, 735, 1, 0, 0, 0, 734, 732, 1, 0, 0, 0, 735, 736, 5, 42, 0, 0, 736, 737, 5, 47, 0, 0, 737, 738, 1, 0, 0, 0, 738, 739, 6, 1, 0, 0, 739, 4, 1, 0, 0, 0, 740, 741, 5, 45, 0, 0, 741, 744, 5, 45, 0, 0, 742, 744, 5, 35, 0, 0, 743, 740, 1, 0, 0, 0, 743, 742, 1, 0, 0, 0, 744, 748, 1, 0, 0, 0, 745, 747, 8, 1, 0, 0, 746, 745, 1, 0, 0, 0, 747, 750, 1, 0, 0, 0, 748, 746, 1, 0, 0, 0, 748, 749, 1, 0, 0, 0, 749, 756, 1, 0, 0, 0, 750, 748, 1, 0, 0, 0, 751, 753, 5, 13, 0, 0, 752, 751, 1, 0, 0, 0, 752, 753, 1, 0, 0, 0, 753, 754, 1, 0, 0, 0, 754, 757, 5, 10, 0, 0, 755, 757, 5, 0, 0, 1, 756, 752, 1, 0, 0, 0, 756, 755, 1, 0, 0, 0, 757, 769, 1, 0, 0, 0, 758, 759, 5, 45, 0, 0, 759, 760, 5, 45, 0, 0, 760, 766, 1, 0, 0, 0, 761, 763, 5, 13, 0, 0, 762, 761, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 767, 5, 10, 0, 0, 765, 767, 5, 0, 0, 1, 766, 762, 1, 0, 0, 0, 766, 765, 1, 0, 0, 0, 767, 769, 1, 0, 0, 0, 768, 743, 1, 0, 0, 0, 768, 758, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 771, 6, 2, 0, 0, 771, 6, 1, 0, 0, 0, 772, 773, 5, 83, 0, 0, 773, 774, 5, 69, 0, 0, 774, 775, 5, 76, 0, 0, 775, 776, 5, 69, 0, 0, 776, 777, 5, 67, 0, 0, 777, 778, 5, 84, 0, 0, 778, 8, 1, 0, 0, 0, 779, 780, 5, 70, 0, 0, 780, 781, 5, 82, 0, 0, 781, 782, 5, 79, 0, 0, 782, 783, 5, 77, 0, 0, 783, 10, 1, 0, 0, 0, 784, 785, 5, 65, 0, 0, 785, 786, 5, 68, 0, 0, 786, 787, 5, 68, 0, 0, 787, 12, 1, 0, 0, 0, 788, 789, 5, 65, 0, 0, 789, 790, 5, 83, 0, 0, 790, 14, 1, 0, 0, 0, 791, 792, 5, 65, 0, 0, 792, 793, 5, 76, 0, 0, 793, 794, 5, 76, 0, 0, 794, 16, 1, 0, 0, 0, 795, 796, 5, 65, 0, 0, 796, 797, 5, 78, 0, 0, 797, 798, 5, 89, 0, 0, 798, 18, 1, 0, 0, 0, 799, 800, 5, 68, 0, 0, 800, 801, 5, 73, 0, 0, 801, 802, 5, 83, 0, 0, 802, 803, 5, 84, 0, 0, 803, 804, 5, 73, 0, 0, 804, 805, 5, 78, 0, 0, 805, 806, 5, 67, 0, 0, 806, 807, 5, 84, 0, 0, 807, 20, 1, 0, 0, 0, 808, 809, 5, 87, 0, 0, 809, 810, 5, 72, 0, 0, 810, 811, 5, 69, 0, 0, 811, 812, 5, 82, 0, 0, 812, 813, 5, 69, 0, 0, 813, 22, 1, 0, 0, 0, 814, 815, 5, 71, 0, 0, 815, 816, 5, 82, 0, 0, 816, 817, 5, 79, 0, 0, 817, 818, 5, 85, 0, 0, 818, 819, 5, 80, 0, 0, 819, 24, 1, 0, 0, 0, 820, 821, 5, 66, 0, 0, 821, 822, 5, 89, 0, 0, 822, 26, 1, 0, 0, 0, 823, 824, 5, 71, 0, 0, 824, 825, 5, 82, 0, 0, 825, 826, 5, 79, 0, 0, 826, 827, 5, 85, 0, 0, 827, 828, 5, 80, 0, 0, 828, 829, 5, 73, 0, 0, 829, 830, 5, 78, 0, 0, 830, 831, 5, 71, 0, 0, 831, 28, 1, 0, 0, 0, 832, 833, 5, 83, 0, 0, 833, 834, 5, 69, 0, 0, 834, 835, 5, 84, 0, 0, 835, 836, 5, 83, 0, 0, 836, 30, 1, 0, 0, 0, 837, 838, 5, 67, 0, 0, 838, 839, 5, 85, 0, 0, 839, 840, 5, 66, 0, 0, 840, 841, 5, 69, 0, 0, 841, 32, 1, 0, 0, 0, 842, 843, 5, 82, 0, 0, 843, 844, 5, 79, 0, 0, 844, 845, 5, 76, 0, 0, 845, 846, 5, 76, 0, 0, 846, 847, 5, 85, 0, 0, 847, 848, 5, 80, 0, 0, 848, 34, 1, 0, 0, 0, 849, 850, 5, 79, 0, 0, 850, 851, 5, 82, 0, 0, 851, 852, 5, 68, 0, 0, 852, 853, 5, 69, 0, 0, 853, 854, 5, 82, 0, 0, 854, 36, 1, 0, 0, 0, 855, 856, 5, 72, 0, 0, 856, 857, 5, 65, 0, 0, 857, 858, 5, 86, 0, 0, 858, 859, 5, 73, 0, 0, 859, 860, 5, 78, 0, 0, 860, 861, 5, 71, 0, 0, 861, 38, 1, 0, 0, 0, 862, 863, 5, 76, 0, 0, 863, 864, 5, 73, 0, 0, 864, 865, 5, 77, 0, 0, 865, 866, 5, 73, 0, 0, 866, 867, 5, 84, 0, 0, 867, 40, 1, 0, 0, 0, 868, 869, 5, 65, 0, 0, 869, 870, 5, 84, 0, 0, 870, 42, 1, 0, 0, 0, 871, 872, 5, 79, 0, 0, 872, 873, 5, 82, 0, 0, 873, 44, 1, 0, 0, 0, 874, 875, 5, 65, 0, 0, 875, 876, 5, 78, 0, 0, 876, 877, 5, 68, 0, 0, 877, 46, 1, 0, 0, 0, 878, 879, 5, 73, 0, 0, 879, 880, 5, 78, 0, 0, 880, 48, 1, 0, 0, 0, 881, 882, 5, 78, 0, 0, 882, 883, 5, 79, 0, 0, 883, 884, 5, 84, 0, 0, 884, 50, 1, 0, 0, 0, 885, 886, 5, 78, 0, 0, 886, 887, 5, 79, 0, 0, 887, 52, 1, 0, 0, 0, 888, 889, 5, 69, 0, 0, 889, 890, 5, 88, 0, 0, 890, 891, 5, 73, 0, 0, 891, 892, 5, 83, 0, 0, 892, 893, 5, 84, 0, 0, 893, 894, 5, 83, 0, 0, 894, 54, 1, 0, 0, 0, 895, 896, 5, 66, 0, 0, 896, 897, 5, 69, 0, 0, 897, 898, 5, 84, 0, 0, 898, 899, 5, 87, 0, 0, 899, 900, 5, 69, 0, 0, 900, 901, 5, 69, 0, 0, 901, 902, 5, 78, 0, 0, 902, 56, 1, 0, 0, 0, 903, 904, 5, 76, 0, 0, 904, 905, 5, 73, 0, 0, 905, 906, 5, 75, 0, 0, 906, 907, 5, 69, 0, 0, 907, 58, 1, 0, 0, 0, 908, 909, 5, 82, 0, 0, 909, 910, 5, 76, 0, 0, 910, 911, 5, 73, 0, 0, 911, 912, 5, 75, 0, 0, 912, 913, 5, 69, 0, 0, 913, 60, 1, 0, 0, 0, 914, 915, 5, 73, 0, 0, 915, 916, 5, 83, 0, 0, 916, 62, 1, 0, 0, 0, 917, 918, 5, 84, 0, 0, 918, 919, 5, 82, 0, 0, 919, 920, 5, 85, 0, 0, 920, 921, 5, 69, 0, 0, 921, 64, 1, 0, 0, 0, 922, 923, 5, 70, 0, 0, 923, 924, 5, 65, 0, 0, 924, 925, 5, 76, 0, 0, 925, 926, 5, 83, 0, 0, 926, 927, 5, 69, 0, 0, 927, 66, 1, 0, 0, 0, 928, 929, 5, 78, 0, 0, 929, 930, 5, 85, 0, 0, 930, 931, 5, 76, 0, 0, 931, 932, 5, 76, 0, 0, 932, 933, 5, 83, 0, 0, 933, 68, 1, 0, 0, 0, 934, 935, 5, 65, 0, 0, 935, 936, 5, 83, 0, 0, 936, 937, 5, 67, 0, 0, 937, 70, 1, 0, 0, 0, 938, 939, 5, 68, 0, 0, 939, 940, 5, 69, 0, 0, 940, 941, 5, 83, 0, 0, 941, 942, 5, 67, 0, 0, 942, 72, 1, 0, 0, 0, 943, 944, 5, 70, 0, 0, 944, 945, 5, 79, 0, 0, 945, 946, 5, 82, 0, 0, 946, 74, 1, 0, 0, 0, 947, 948, 5, 73, 0, 0, 948, 949, 5, 78, 0, 0, 949, 950, 5, 84, 0, 0, 950, 951, 5, 69, 0, 0, 951, 952, 5, 82, 0, 0, 952, 953, 5, 86, 0, 0, 953, 954, 5, 65, 0, 0, 954, 955, 5, 76, 0, 0, 955, 76, 1, 0, 0, 0, 956, 957, 5, 67, 0, 0, 957, 958, 5, 65, 0, 0, 958, 959, 5, 83, 0, 0, 959, 960, 5, 69, 0, 0, 960, 78, 1, 0, 0, 0, 961, 962, 5, 87, 0, 0, 962, 963, 5, 72, 0, 0, 963, 964, 5, 69, 0, 0, 964, 965, 5, 78, 0, 0, 965, 80, 1, 0, 0, 0, 966, 967, 5, 84, 0, 0, 967, 968, 5, 72, 0, 0, 968, 969, 5, 69, 0, 0, 969, 970, 5, 78, 0, 0, 970, 82, 1, 0, 0, 0, 971, 972, 5, 69, 0, 0, 972, 973, 5, 76, 0, 0, 973, 974, 5, 83, 0, 0, 974, 975, 5, 69, 0, 0, 975, 84, 1, 0, 0, 0, 976, 977, 5, 66, 0, 0, 977, 978, 5, 69, 0, 0, 978, 979, 5, 71, 0, 0, 979, 980, 5, 73, 0, 0, 980, 981, 5, 78, 0, 0, 981, 86, 1, 0, 0, 0, 982, 983, 5, 69, 0, 0, 983, 984, 5, 78, 0, 0, 984, 985, 5, 68, 0, 0, 985, 88, 1, 0, 0, 0, 986, 987, 5, 74, 0, 0, 987, 988, 5, 79, 0, 0, 988, 989, 5, 73, 0, 0, 989, 990, 5, 78, 0, 0, 990, 90, 1, 0, 0, 0, 991, 992, 5, 67, 0, 0, 992, 993, 5, 82, 0, 0, 993, 994, 5, 79, 0, 0, 994, 995, 5, 83, 0, 0, 995, 996, 5, 83, 0, 0, 996, 92, 1, 0, 0, 0, 997, 998, 5, 79, 0, 0, 998, 999, 5, 85, 0, 0, 999, 1000, 5, 84, 0, 0, 1000, 1001, 5, 69, 0, 0, 1001, 1002, 5, 82, 0, 0, 1002, 94, 1, 0, 0, 0, 1003, 1004, 5, 73, 0, 0, 1004, 1005, 5, 78, 0, 0, 1005, 1006, 5, 78, 0, 0, 1006, 1007, 5, 69, 0, 0, 1007, 1008, 5, 82, 0, 0, 1008, 96, 1, 0, 0, 0, 1009, 1010, 5, 76, 0, 0, 1010, 1011, 5, 69, 0, 0, 1011, 1012, 5, 70, 0, 0, 1012, 1013, 5, 84, 0, 0, 1013, 98, 1, 0, 0, 0, 1014, 1015, 5, 83, 0, 0, 1015, 1016, 5, 69, 0, 0, 1016, 1017, 5, 77, 0, 0, 1017, 1018, 5, 73, 0, 0, 1018, 100, 1, 0, 0, 0, 1019, 1020, 5, 82, 0, 0, 1020, 1021, 5, 73, 0, 0, 1021, 1022, 5, 71, 0, 0, 1022, 1023, 5, 72, 0, 0, 1023, 1024, 5, 84, 0, 0, 1024, 102, 1, 0, 0, 0, 1025, 1026, 5, 70, 0, 0, 1026, 1027, 5, 85, 0, 0, 1027, 1028, 5, 76, 0, 0, 1028, 1029, 5, 76, 0, 0, 1029, 104, 1, 0, 0, 0, 1030, 1031, 5, 85, 0, 0, 1031, 1032, 5, 83, 0, 0, 1032, 1033, 5, 69, 0, 0, 1033, 1034, 5, 82, 0, 0, 1034, 106, 1, 0, 0, 0, 1035, 1036, 5, 78, 0, 0, 1036, 1037, 5, 65, 0, 0, 1037, 1038, 5, 84, 0, 0, 1038, 1039, 5, 85, 0, 0, 1039, 1040, 5, 82, 0, 0, 1040, 1041, 5, 65, 0, 0, 1041, 1042, 5, 76, 0, 0, 1042, 108, 1, 0, 0, 0, 1043, 1044, 5, 79, 0, 0, 1044, 1045, 5, 78, 0, 0, 1045, 110, 1, 0, 0, 0, 1046, 1047, 5, 80, 0, 0, 1047, 1048, 5, 73, 0, 0, 1048, 1049, 5, 86, 0, 0, 1049, 1050, 5, 79, 0, 0, 1050, 1051, 5, 84, 0, 0, 1051, 112, 1, 0, 0, 0, 1052, 1053, 5, 76, 0, 0, 1053, 1054, 5, 65, 0, 0, 1054, 1055, 5, 84, 0, 0, 1055, 1056, 5, 69, 0, 0, 1056, 1057, 5, 82, 0, 0, 1057, 1058, 5, 65, 0, 0, 1058, 1059, 5, 76, 0, 0, 1059, 114, 1, 0, 0, 0, 1060, 1061, 5, 87, 0, 0, 1061, 1062, 5, 73, 0, 0, 1062, 1063, 5, 78, 0, 0, 1063, 1064, 5, 68, 0, 0, 1064, 1065, 5, 79, 0, 0, 1065, 1066, 5, 87, 0, 0, 1066, 116, 1, 0, 0, 0, 1067, 1068, 5, 79, 0, 0, 1068, 1069, 5, 86, 0, 0, 1069, 1070, 5, 69, 0, 0, 1070, 1071, 5, 82, 0, 0, 1071, 118, 1, 0, 0, 0, 1072, 1073, 5, 80, 0, 0, 1073, 1074, 5, 65, 0, 0, 1074, 1075, 5, 82, 0, 0, 1075, 1076, 5, 84, 0, 0, 1076, 1077, 5, 73, 0, 0, 1077, 1078, 5, 84, 0, 0, 1078, 1079, 5, 73, 0, 0, 1079, 1080, 5, 79, 0, 0, 1080, 1081, 5, 78, 0, 0, 1081, 120, 1, 0, 0, 0, 1082, 1083, 5, 82, 0, 0, 1083, 1084, 5, 65, 0, 0, 1084, 1085, 5, 78, 0, 0, 1085, 1086, 5, 71, 0, 0, 1086, 1087, 5, 69, 0, 0, 1087, 122, 1, 0, 0, 0, 1088, 1089, 5, 82, 0, 0, 1089, 1090, 5, 79, 0, 0, 1090, 1091, 5, 87, 0, 0, 1091, 1092, 5, 83, 0, 0, 1092, 124, 1, 0, 0, 0, 1093, 1094, 5, 85, 0, 0, 1094, 1095, 5, 78, 0, 0, 1095, 1096, 5, 66, 0, 0, 1096, 1097, 5, 79, 0, 0, 1097, 1098, 5, 85, 0, 0, 1098, 1099, 5, 78, 0, 0, 1099, 1100, 5, 68, 0, 0, 1100, 1101, 5, 69, 0, 0, 1101, 1102, 5, 68, 0, 0, 1102, 126, 1, 0, 0, 0, 1103, 1104, 5, 80, 0, 0, 1104, 1105, 5, 82, 0, 0, 1105, 1106, 5, 69, 0, 0, 1106, 1107, 5, 67, 0, 0, 1107, 1108, 5, 69, 0, 0, 1108, 1109, 5, 68, 0, 0, 1109, 1110, 5, 73, 0, 0, 1110, 1111, 5, 78, 0, 0, 1111, 1112, 5, 71, 0, 0, 1112, 128, 1, 0, 0, 0, 1113, 1114, 5, 70, 0, 0, 1114, 1115, 5, 79, 0, 0, 1115, 1116, 5, 76, 0, 0, 1116, 1117, 5, 76, 0, 0, 1117, 1118, 5, 79, 0, 0, 1118, 1119, 5, 87, 0, 0, 1119, 1120, 5, 73, 0, 0, 1120, 1121, 5, 78, 0, 0, 1121, 1122, 5, 71, 0, 0, 1122, 130, 1, 0, 0, 0, 1123, 1124, 5, 67, 0, 0, 1124, 1125, 5, 85, 0, 0, 1125, 1126, 5, 82, 0, 0, 1126, 1127, 5, 82, 0, 0, 1127, 1128, 5, 69, 0, 0, 1128, 1129, 5, 78, 0, 0, 1129, 1130, 5, 84, 0, 0, 1130, 132, 1, 0, 0, 0, 1131, 1132, 5, 70, 0, 0, 1132, 1133, 5, 73, 0, 0, 1133, 1134, 5, 82, 0, 0, 1134, 1135, 5, 83, 0, 0, 1135, 1136, 5, 84, 0, 0, 1136, 134, 1, 0, 0, 0, 1137, 1138, 5, 65, 0, 0, 1138, 1139, 5, 70, 0, 0, 1139, 1140, 5, 84, 0, 0, 1140, 1141, 5, 69, 0, 0, 1141, 1142, 5, 82, 0, 0, 1142, 136, 1, 0, 0, 0, 1143, 1144, 5, 76, 0, 0, 1144, 1145, 5, 65, 0, 0, 1145, 1146, 5, 83, 0, 0, 1146, 1147, 5, 84, 0, 0, 1147, 138, 1, 0, 0, 0, 1148, 1149, 5, 87, 0, 0, 1149, 1150, 5, 73, 0, 0, 1150, 1151, 5, 84, 0, 0, 1151, 1152, 5, 72, 0, 0, 1152, 140, 1, 0, 0, 0, 1153, 1154, 5, 87, 0, 0, 1154, 1155, 5, 73, 0, 0, 1155, 1156, 5, 84, 0, 0, 1156, 1157, 5, 72, 0, 0, 1157, 1158, 5, 79, 0, 0, 1158, 1159, 5, 85, 0, 0, 1159, 1160, 5, 84, 0, 0, 1160, 142, 1, 0, 0, 0, 1161, 1162, 5, 86, 0, 0, 1162, 1163, 5, 65, 0, 0, 1163, 1164, 5, 76, 0, 0, 1164, 1165, 5, 85, 0, 0, 1165, 1166, 5, 69, 0, 0, 1166, 1167, 5, 83, 0, 0, 1167, 144, 1, 0, 0, 0, 1168, 1169, 5, 67, 0, 0, 1169, 1170, 5, 82, 0, 0, 1170, 1171, 5, 69, 0, 0, 1171, 1172, 5, 65, 0, 0, 1172, 1173, 5, 84, 0, 0, 1173, 1174, 5, 69, 0, 0, 1174, 146, 1, 0, 0, 0, 1175, 1176, 5, 84, 0, 0, 1176, 1177, 5, 65, 0, 0, 1177, 1178, 5, 66, 0, 0, 1178, 1179, 5, 76, 0, 0, 1179, 1180, 5, 69, 0, 0, 1180, 148, 1, 0, 0, 0, 1181, 1182, 5, 68, 0, 0, 1182, 1183, 5, 73, 0, 0, 1183, 1184, 5, 82, 0, 0, 1184, 1185, 5, 69, 0, 0, 1185, 1186, 5, 67, 0, 0, 1186, 1187, 5, 84, 0, 0, 1187, 1188, 5, 79, 0, 0, 1188, 1189, 5, 82, 0, 0, 1189, 1190, 5, 89, 0, 0, 1190, 150, 1, 0, 0, 0, 1191, 1192, 5, 86, 0, 0, 1192, 1193, 5, 73, 0, 0, 1193, 1194, 5, 69, 0, 0, 1194, 1195, 5, 87, 0, 0, 1195, 152, 1, 0, 0, 0, 1196, 1197, 5, 82, 0, 0, 1197, 1198, 5, 69, 0, 0, 1198, 1199, 5, 80, 0, 0, 1199, 1200, 5, 76, 0, 0, 1200, 1201, 5, 65, 0, 0, 1201, 1202, 5, 67, 0, 0, 1202, 1203, 5, 69, 0, 0, 1203, 154, 1, 0, 0, 0, 1204, 1205, 5, 69, 0, 0, 1205, 1206, 5, 88, 0, 0, 1206, 1207, 5, 69, 0, 0, 1207, 1208, 5, 67, 0, 0, 1208, 1209, 5, 85, 0, 0, 1209, 1210, 5, 84, 0, 0, 1210, 1211, 5, 69, 0, 0, 1211, 156, 1, 0, 0, 0, 1212, 1213, 5, 83, 0, 0, 1213, 1214, 5, 84, 0, 0, 1214, 1215, 5, 65, 0, 0, 1215, 1216, 5, 84, 0, 0, 1216, 1217, 5, 69, 0, 0, 1217, 1218, 5, 77, 0, 0, 1218, 1219, 5, 69, 0, 0, 1219, 1220, 5, 78, 0, 0, 1220, 1221, 5, 84, 0, 0, 1221, 158, 1, 0, 0, 0, 1222, 1223, 5, 73, 0, 0, 1223, 1224, 5, 78, 0, 0, 1224, 1225, 5, 83, 0, 0, 1225, 1226, 5, 69, 0, 0, 1226, 1227, 5, 82, 0, 0, 1227, 1228, 5, 84, 0, 0, 1228, 160, 1, 0, 0, 0, 1229, 1230, 5, 68, 0, 0, 1230, 1231, 5, 69, 0, 0, 1231, 1232, 5, 76, 0, 0, 1232, 1233, 5, 69, 0, 0, 1233, 1234, 5, 84, 0, 0, 1234, 1235, 5, 69, 0, 0, 1235, 162, 1, 0, 0, 0, 1236, 1237, 5, 82, 0, 0, 1237, 1238, 5, 69, 0, 0, 1238, 1239, 5, 77, 0, 0, 1239, 1240, 5, 79, 0, 0, 1240, 1241, 5, 86, 0, 0, 1241, 1242, 5, 69, 0, 0, 1242, 164, 1, 0, 0, 0, 1243, 1244, 5, 73, 0, 0, 1244, 1245, 5, 78, 0, 0, 1245, 1246, 5, 84, 0, 0, 1246, 1247, 5, 79, 0, 0, 1247, 166, 1, 0, 0, 0, 1248, 1249, 5, 68, 0, 0, 1249, 1250, 5, 69, 0, 0, 1250, 1251, 5, 83, 0, 0, 1251, 1252, 5, 67, 0, 0, 1252, 1253, 5, 82, 0, 0, 1253, 1254, 5, 73, 0, 0, 1254, 1255, 5, 66, 0, 0, 1255, 1256, 5, 69, 0, 0, 1256, 168, 1, 0, 0, 0, 1257, 1258, 5, 69, 0, 0, 1258, 1259, 5, 88, 0, 0, 1259, 1260, 5, 80, 0, 0, 1260, 1261, 5, 76, 0, 0, 1261, 1262, 5, 65, 0, 0, 1262, 1263, 5, 73, 0, 0, 1263, 1264, 5, 78, 0, 0, 1264, 170, 1, 0, 0, 0, 1265, 1266, 5, 80, 0, 0, 1266, 1267, 5, 76, 0, 0, 1267, 1268, 5, 65, 0, 0, 1268, 1269, 5, 78, 0, 0, 1269, 172, 1, 0, 0, 0, 1270, 1271, 5, 67, 0, 0, 1271, 1272, 5, 72, 0, 0, 1272, 1273, 5, 65, 0, 0, 1273, 1274, 5, 78, 0, 0, 1274, 1275, 5, 71, 0, 0, 1275, 1276, 5, 69, 0, 0, 1276, 1277, 5, 76, 0, 0, 1277, 1278, 5, 79, 0, 0, 1278, 1279, 5, 71, 0, 0, 1279, 1280, 5, 95, 0, 0, 1280, 1281, 5, 77, 0, 0, 1281, 1282, 5, 79, 0, 0, 1282, 1283, 5, 68, 0, 0, 1283, 1284, 5, 69, 0, 0, 1284, 174, 1, 0, 0, 0, 1285, 1286, 5, 74, 0, 0, 1286, 1287, 5, 83, 0, 0, 1287, 1288, 5, 79, 0, 0, 1288, 1289, 5, 78, 0, 0, 1289, 1290, 5, 95, 0, 0, 1290, 1291, 5, 69, 0, 0, 1291, 1292, 5, 88, 0, 0, 1292, 1293, 5, 69, 0, 0, 1293, 1294, 5, 67, 0, 0, 1294, 1295, 5, 85, 0, 0, 1295, 1296, 5, 84, 0, 0, 1296, 1297, 5, 73, 0, 0, 1297, 1298, 5, 79, 0, 0, 1298, 1299, 5, 78, 0, 0, 1299, 1300, 5, 95, 0, 0, 1300, 1301, 5, 80, 0, 0, 1301, 1302, 5, 76, 0, 0, 1302, 1303, 5, 65, 0, 0, 1303, 1304, 5, 78, 0, 0, 1304, 176, 1, 0, 0, 0, 1305, 1306, 5, 69, 0, 0, 1306, 1307, 5, 83, 0, 0, 1307, 1308, 5, 84, 0, 0, 1308, 1309, 5, 73, 0, 0, 1309, 1310, 5, 77, 0, 0, 1310, 1311, 5, 65, 0, 0, 1311, 1312, 5, 84, 0, 0, 1312, 1313, 5, 69, 0, 0, 1313, 1314, 5, 68, 0, 0, 1314, 1315, 5, 95, 0, 0, 1315, 1316, 5, 67, 0, 0, 1316, 1317, 5, 79, 0, 0, 1317, 1318, 5, 83, 0, 0, 1318, 1319, 5, 84, 0, 0, 1319, 178, 1, 0, 0, 0, 1320, 1321, 5, 70, 0, 0, 1321, 1322, 5, 79, 0, 0, 1322, 1323, 5, 82, 0, 0, 1323, 1324, 5, 77, 0, 0, 1324, 1325, 5, 65, 0, 0, 1325, 1326, 5, 84, 0, 0, 1326, 180, 1, 0, 0, 0, 1327, 1328, 5, 76, 0, 0, 1328, 1329, 5, 79, 0, 0, 1329, 1330, 5, 71, 0, 0, 1330, 1331, 5, 73, 0, 0, 1331, 1332, 5, 67, 0, 0, 1332, 1333, 5, 65, 0, 0, 1333, 1334, 5, 76, 0, 0, 1334, 182, 1, 0, 0, 0, 1335, 1336, 5, 67, 0, 0, 1336, 1337, 5, 79, 0, 0, 1337, 1338, 5, 68, 0, 0, 1338, 1339, 5, 69, 0, 0, 1339, 1340, 5, 71, 0, 0, 1340, 1341, 5, 69, 0, 0, 1341, 1342, 5, 78, 0, 0, 1342, 184, 1, 0, 0, 0, 1343, 1344, 5, 67, 0, 0, 1344, 1345, 5, 79, 0, 0, 1345, 1346, 5, 83, 0, 0, 1346, 1347, 5, 84, 0, 0, 1347, 186, 1, 0, 0, 0, 1348, 1349, 5, 67, 0, 0, 1349, 1350, 5, 65, 0, 0, 1350, 1351, 5, 83, 0, 0, 1351, 1352, 5, 84, 0, 0, 1352, 188, 1, 0, 0, 0, 1353, 1354, 5, 83, 0, 0, 1354, 1355, 5, 72, 0, 0, 1355, 1356, 5, 79, 0, 0, 1356, 1357, 5, 87, 0, 0, 1357, 190, 1, 0, 0, 0, 1358, 1359, 5, 84, 0, 0, 1359, 1360, 5, 65, 0, 0, 1360, 1361, 5, 66, 0, 0, 1361, 1362, 5, 76, 0, 0, 1362, 1363, 5, 69, 0, 0, 1363, 1364, 5, 83, 0, 0, 1364, 192, 1, 0, 0, 0, 1365, 1366, 5, 67, 0, 0, 1366, 1367, 5, 79, 0, 0, 1367, 1368, 5, 76, 0, 0, 1368, 1369, 5, 85, 0, 0, 1369, 1370, 5, 77, 0, 0, 1370, 1371, 5, 78, 0, 0, 1371, 1372, 5, 83, 0, 0, 1372, 194, 1, 0, 0, 0, 1373, 1374, 5, 67, 0, 0, 1374, 1375, 5, 79, 0, 0, 1375, 1376, 5, 76, 0, 0, 1376, 1377, 5, 85, 0, 0, 1377, 1378, 5, 77, 0, 0, 1378, 1379, 5, 78, 0, 0, 1379, 196, 1, 0, 0, 0, 1380, 1381, 5, 85, 0, 0, 1381, 1382, 5, 83, 0, 0, 1382, 1383, 5, 69, 0, 0, 1383, 198, 1, 0, 0, 0, 1384, 1385, 5, 77, 0, 0, 1385, 1386, 5, 79, 0, 0, 1386, 1387, 5, 68, 0, 0, 1387, 1388, 5, 85, 0, 0, 1388, 1389, 5, 76, 0, 0, 1389, 1390, 5, 69, 0, 0, 1390, 200, 1, 0, 0, 0, 1391, 1392, 5, 77, 0, 0, 1392, 1393, 5, 79, 0, 0, 1393, 1394, 5, 68, 0, 0, 1394, 1395, 5, 85, 0, 0, 1395, 1396, 5, 76, 0, 0, 1396, 1397, 5, 69, 0, 0, 1397, 1398, 5, 83, 0, 0, 1398, 202, 1, 0, 0, 0, 1399, 1400, 5, 80, 0, 0, 1400, 1401, 5, 65, 0, 0, 1401, 1402, 5, 82, 0, 0, 1402, 1403, 5, 84, 0, 0, 1403, 1404, 5, 73, 0, 0, 1404, 1405, 5, 84, 0, 0, 1405, 1406, 5, 73, 0, 0, 1406, 1407, 5, 79, 0, 0, 1407, 1408, 5, 78, 0, 0, 1408, 1409, 5, 83, 0, 0, 1409, 204, 1, 0, 0, 0, 1410, 1411, 5, 70, 0, 0, 1411, 1412, 5, 85, 0, 0, 1412, 1413, 5, 78, 0, 0, 1413, 1414, 5, 67, 0, 0, 1414, 1415, 5, 84, 0, 0, 1415, 1416, 5, 73, 0, 0, 1416, 1417, 5, 79, 0, 0, 1417, 1418, 5, 78, 0, 0, 1418, 1419, 5, 83, 0, 0, 1419, 206, 1, 0, 0, 0, 1420, 1421, 5, 68, 0, 0, 1421, 1422, 5, 82, 0, 0, 1422, 1423, 5, 79, 0, 0, 1423, 1424, 5, 80, 0, 0, 1424, 208, 1, 0, 0, 0, 1425, 1426, 5, 85, 0, 0, 1426, 1427, 5, 78, 0, 0, 1427, 1428, 5, 73, 0, 0, 1428, 1429, 5, 79, 0, 0, 1429, 1430, 5, 78, 0, 0, 1430, 210, 1, 0, 0, 0, 1431, 1432, 5, 69, 0, 0, 1432, 1433, 5, 88, 0, 0, 1433, 1434, 5, 67, 0, 0, 1434, 1435, 5, 69, 0, 0, 1435, 1436, 5, 80, 0, 0, 1436, 1437, 5, 84, 0, 0, 1437, 212, 1, 0, 0, 0, 1438, 1439, 5, 83, 0, 0, 1439, 1440, 5, 69, 0, 0, 1440, 1441, 5, 84, 0, 0, 1441, 1442, 5, 77, 0, 0, 1442, 1443, 5, 73, 0, 0, 1443, 1444, 5, 78, 0, 0, 1444, 1445, 5, 85, 0, 0, 1445, 1446, 5, 83, 0, 0, 1446, 214, 1, 0, 0, 0, 1447, 1448, 5, 73, 0, 0, 1448, 1449, 5, 78, 0, 0, 1449, 1450, 5, 84, 0, 0, 1450, 1451, 5, 69, 0, 0, 1451, 1452, 5, 82, 0, 0, 1452, 1453, 5, 83, 0, 0, 1453, 1454, 5, 69, 0, 0, 1454, 1455, 5, 67, 0, 0, 1455, 1456, 5, 84, 0, 0, 1456, 216, 1, 0, 0, 0, 1457, 1458, 5, 84, 0, 0, 1458, 1459, 5, 79, 0, 0, 1459, 218, 1, 0, 0, 0, 1460, 1461, 5, 84, 0, 0, 1461, 1462, 5, 65, 0, 0, 1462, 1463, 5, 66, 0, 0, 1463, 1464, 5, 76, 0, 0, 1464, 1465, 5, 69, 0, 0, 1465, 1466, 5, 83, 0, 0, 1466, 1467, 5, 65, 0, 0, 1467, 1468, 5, 77, 0, 0, 1468, 1469, 5, 80, 0, 0, 1469, 1470, 5, 76, 0, 0, 1470, 1471, 5, 69, 0, 0, 1471, 220, 1, 0, 0, 0, 1472, 1473, 5, 83, 0, 0, 1473, 1474, 5, 84, 0, 0, 1474, 1475, 5, 82, 0, 0, 1475, 1476, 5, 65, 0, 0, 1476, 1477, 5, 84, 0, 0, 1477, 1478, 5, 73, 0, 0, 1478, 1479, 5, 70, 0, 0, 1479, 1480, 5, 89, 0, 0, 1480, 222, 1, 0, 0, 0, 1481, 1482, 5, 65, 0, 0, 1482, 1483, 5, 76, 0, 0, 1483, 1484, 5, 84, 0, 0, 1484, 1485, 5, 69, 0, 0, 1485, 1486, 5, 82, 0, 0, 1486, 224, 1, 0, 0, 0, 1487, 1488, 5, 82, 0, 0, 1488, 1489, 5, 69, 0, 0, 1489, 1490, 5, 78, 0, 0, 1490, 1491, 5, 65, 0, 0, 1491, 1492, 5, 77, 0, 0, 1492, 1493, 5, 69, 0, 0, 1493, 226, 1, 0, 0, 0, 1494, 1495, 5, 83, 0, 0, 1495, 1496, 5, 84, 0, 0, 1496, 1497, 5, 82, 0, 0, 1497, 1498, 5, 85, 0, 0, 1498, 1499, 5, 67, 0, 0, 1499, 1500, 5, 84, 0, 0, 1500, 228, 1, 0, 0, 0, 1501, 1502, 5, 67, 0, 0, 1502, 1503, 5, 79, 0, 0, 1503, 1504, 5, 77, 0, 0, 1504, 1505, 5, 77, 0, 0, 1505, 1506, 5, 69, 0, 0, 1506, 1507, 5, 78, 0, 0, 1507, 1508, 5, 84, 0, 0, 1508, 230, 1, 0, 0, 0, 1509, 1510, 5, 83, 0, 0, 1510, 1511, 5, 69, 0, 0, 1511, 1512, 5, 84, 0, 0, 1512, 232, 1, 0, 0, 0, 1513, 1514, 5, 82, 0, 0, 1514, 1515, 5, 69, 0, 0, 1515, 1516, 5, 83, 0, 0, 1516, 1517, 5, 69, 0, 0, 1517, 1518, 5, 84, 0, 0, 1518, 234, 1, 0, 0, 0, 1519, 1520, 5, 68, 0, 0, 1520, 1521, 5, 65, 0, 0, 1521, 1522, 5, 84, 0, 0, 1522, 1523, 5, 65, 0, 0, 1523, 236, 1, 0, 0, 0, 1524, 1525, 5, 83, 0, 0, 1525, 1526, 5, 84, 0, 0, 1526, 1527, 5, 65, 0, 0, 1527, 1528, 5, 82, 0, 0, 1528, 1529, 5, 84, 0, 0, 1529, 238, 1, 0, 0, 0, 1530, 1531, 5, 84, 0, 0, 1531, 1532, 5, 82, 0, 0, 1532, 1533, 5, 65, 0, 0, 1533, 1534, 5, 78, 0, 0, 1534, 1535, 5, 83, 0, 0, 1535, 1536, 5, 65, 0, 0, 1536, 1537, 5, 67, 0, 0, 1537, 1538, 5, 84, 0, 0, 1538, 1539, 5, 73, 0, 0, 1539, 1540, 5, 79, 0, 0, 1540, 1541, 5, 78, 0, 0, 1541, 240, 1, 0, 0, 0, 1542, 1543, 5, 67, 0, 0, 1543, 1544, 5, 79, 0, 0, 1544, 1545, 5, 77, 0, 0, 1545, 1546, 5, 77, 0, 0, 1546, 1547, 5, 73, 0, 0, 1547, 1548, 5, 84, 0, 0, 1548, 242, 1, 0, 0, 0, 1549, 1550, 5, 82, 0, 0, 1550, 1551, 5, 79, 0, 0, 1551, 1552, 5, 76, 0, 0, 1552, 1553, 5, 76, 0, 0, 1553, 1554, 5, 66, 0, 0, 1554, 1555, 5, 65, 0, 0, 1555, 1556, 5, 67, 0, 0, 1556, 1557, 5, 75, 0, 0, 1557, 244, 1, 0, 0, 0, 1558, 1559, 5, 77, 0, 0, 1559, 1560, 5, 65, 0, 0, 1560, 1561, 5, 67, 0, 0, 1561, 1562, 5, 82, 0, 0, 1562, 1563, 5, 79, 0, 0, 1563, 246, 1, 0, 0, 0, 1564, 1565, 5, 73, 0, 0, 1565, 1566, 5, 71, 0, 0, 1566, 1567, 5, 78, 0, 0, 1567, 1568, 5, 79, 0, 0, 1568, 1569, 5, 82, 0, 0, 1569, 1570, 5, 69, 0, 0, 1570, 248, 1, 0, 0, 0, 1571, 1572, 5, 66, 0, 0, 1572, 1573, 5, 79, 0, 0, 1573, 1574, 5, 84, 0, 0, 1574, 1575, 5, 72, 0, 0, 1575, 250, 1, 0, 0, 0, 1576, 1577, 5, 76, 0, 0, 1577, 1578, 5, 69, 0, 0, 1578, 1579, 5, 65, 0, 0, 1579, 1580, 5, 68, 0, 0, 1580, 1581, 5, 73, 0, 0, 1581, 1582, 5, 78, 0, 0, 1582, 1583, 5, 71, 0, 0, 1583, 252, 1, 0, 0, 0, 1584, 1585, 5, 84, 0, 0, 1585, 1586, 5, 82, 0, 0, 1586, 1587, 5, 65, 0, 0, 1587, 1588, 5, 73, 0, 0, 1588, 1589, 5, 76, 0, 0, 1589, 1590, 5, 73, 0, 0, 1590, 1591, 5, 78, 0, 0, 1591, 1592, 5, 71, 0, 0, 1592, 254, 1, 0, 0, 0, 1593, 1594, 5, 73, 0, 0, 1594, 1595, 5, 70, 0, 0, 1595, 256, 1, 0, 0, 0, 1596, 1597, 5, 80, 0, 0, 1597, 1598, 5, 79, 0, 0, 1598, 1599, 5, 83, 0, 0, 1599, 1600, 5, 73, 0, 0, 1600, 1601, 5, 84, 0, 0, 1601, 1602, 5, 73, 0, 0, 1602, 1603, 5, 79, 0, 0, 1603, 1604, 5, 78, 0, 0, 1604, 258, 1, 0, 0, 0, 1605, 1606, 5, 69, 0, 0, 1606, 1607, 5, 88, 0, 0, 1607, 1608, 5, 84, 0, 0, 1608, 1609, 5, 82, 0, 0, 1609, 1610, 5, 65, 0, 0, 1610, 1611, 5, 67, 0, 0, 1611, 1612, 5, 84, 0, 0, 1612, 260, 1, 0, 0, 0, 1613, 1614, 5, 77, 0, 0, 1614, 1615, 5, 73, 0, 0, 1615, 1616, 5, 78, 0, 0, 1616, 1617, 5, 85, 0, 0, 1617, 1618, 5, 83, 0, 0, 1618, 262, 1, 0, 0, 0, 1619, 1620, 5, 68, 0, 0, 1620, 1621, 5, 73, 0, 0, 1621, 1622, 5, 86, 0, 0, 1622, 264, 1, 0, 0, 0, 1623, 1624, 5, 80, 0, 0, 1624, 1625, 5, 69, 0, 0, 1625, 1626, 5, 82, 0, 0, 1626, 1627, 5, 67, 0, 0, 1627, 1628, 5, 69, 0, 0, 1628, 1629, 5, 78, 0, 0, 1629, 1630, 5, 84, 0, 0, 1630, 1631, 5, 76, 0, 0, 1631, 1632, 5, 73, 0, 0, 1632, 1633, 5, 84, 0, 0, 1633, 266, 1, 0, 0, 0, 1634, 1635, 5, 66, 0, 0, 1635, 1636, 5, 85, 0, 0, 1636, 1637, 5, 67, 0, 0, 1637, 1638, 5, 75, 0, 0, 1638, 1639, 5, 69, 0, 0, 1639, 1640, 5, 84, 0, 0, 1640, 268, 1, 0, 0, 0, 1641, 1642, 5, 79, 0, 0, 1642, 1643, 5, 85, 0, 0, 1643, 1644, 5, 84, 0, 0, 1644, 270, 1, 0, 0, 0, 1645, 1646, 5, 79, 0, 0, 1646, 1647, 5, 70, 0, 0, 1647, 272, 1, 0, 0, 0, 1648, 1649, 5, 83, 0, 0, 1649, 1650, 5, 79, 0, 0, 1650, 1651, 5, 82, 0, 0, 1651, 1652, 5, 84, 0, 0, 1652, 274, 1, 0, 0, 0, 1653, 1654, 5, 67, 0, 0, 1654, 1655, 5, 76, 0, 0, 1655, 1656, 5, 85, 0, 0, 1656, 1657, 5, 83, 0, 0, 1657, 1658, 5, 84, 0, 0, 1658, 1659, 5, 69, 0, 0, 1659, 1660, 5, 82, 0, 0, 1660, 276, 1, 0, 0, 0, 1661, 1662, 5, 68, 0, 0, 1662, 1663, 5, 73, 0, 0, 1663, 1664, 5, 83, 0, 0, 1664, 1665, 5, 84, 0, 0, 1665, 1666, 5, 82, 0, 0, 1666, 1667, 5, 73, 0, 0, 1667, 1668, 5, 66, 0, 0, 1668, 1669, 5, 85, 0, 0, 1669, 1670, 5, 84, 0, 0, 1670, 1671, 5, 69, 0, 0, 1671, 278, 1, 0, 0, 0, 1672, 1673, 5, 79, 0, 0, 1673, 1674, 5, 86, 0, 0, 1674, 1675, 5, 69, 0, 0, 1675, 1676, 5, 82, 0, 0, 1676, 1677, 5, 87, 0, 0, 1677, 1678, 5, 82, 0, 0, 1678, 1679, 5, 73, 0, 0, 1679, 1680, 5, 84, 0, 0, 1680, 1681, 5, 69, 0, 0, 1681, 280, 1, 0, 0, 0, 1682, 1683, 5, 84, 0, 0, 1683, 1684, 5, 82, 0, 0, 1684, 1685, 5, 65, 0, 0, 1685, 1686, 5, 78, 0, 0, 1686, 1687, 5, 83, 0, 0, 1687, 1688, 5, 70, 0, 0, 1688, 1689, 5, 79, 0, 0, 1689, 1690, 5, 82, 0, 0, 1690, 1691, 5, 77, 0, 0, 1691, 282, 1, 0, 0, 0, 1692, 1693, 5, 82, 0, 0, 1693, 1694, 5, 69, 0, 0, 1694, 1695, 5, 68, 0, 0, 1695, 1696, 5, 85, 0, 0, 1696, 1697, 5, 67, 0, 0, 1697, 1698, 5, 69, 0, 0, 1698, 284, 1, 0, 0, 0, 1699, 1700, 5, 85, 0, 0, 1700, 1701, 5, 83, 0, 0, 1701, 1702, 5, 73, 0, 0, 1702, 1703, 5, 78, 0, 0, 1703, 1704, 5, 71, 0, 0, 1704, 286, 1, 0, 0, 0, 1705, 1706, 5, 83, 0, 0, 1706, 1707, 5, 69, 0, 0, 1707, 1708, 5, 82, 0, 0, 1708, 1709, 5, 68, 0, 0, 1709, 1710, 5, 69, 0, 0, 1710, 288, 1, 0, 0, 0, 1711, 1712, 5, 83, 0, 0, 1712, 1713, 5, 69, 0, 0, 1713, 1714, 5, 82, 0, 0, 1714, 1715, 5, 68, 0, 0, 1715, 1716, 5, 69, 0, 0, 1716, 1717, 5, 80, 0, 0, 1717, 1718, 5, 82, 0, 0, 1718, 1719, 5, 79, 0, 0, 1719, 1720, 5, 80, 0, 0, 1720, 1721, 5, 69, 0, 0, 1721, 1722, 5, 82, 0, 0, 1722, 1723, 5, 84, 0, 0, 1723, 1724, 5, 73, 0, 0, 1724, 1725, 5, 69, 0, 0, 1725, 1726, 5, 83, 0, 0, 1726, 290, 1, 0, 0, 0, 1727, 1728, 5, 82, 0, 0, 1728, 1729, 5, 69, 0, 0, 1729, 1730, 5, 67, 0, 0, 1730, 1731, 5, 79, 0, 0, 1731, 1732, 5, 82, 0, 0, 1732, 1733, 5, 68, 0, 0, 1733, 1734, 5, 82, 0, 0, 1734, 1735, 5, 69, 0, 0, 1735, 1736, 5, 65, 0, 0, 1736, 1737, 5, 68, 0, 0, 1737, 1738, 5, 69, 0, 0, 1738, 1739, 5, 82, 0, 0, 1739, 292, 1, 0, 0, 0, 1740, 1741, 5, 82, 0, 0, 1741, 1742, 5, 69, 0, 0, 1742, 1743, 5, 67, 0, 0, 1743, 1744, 5, 79, 0, 0, 1744, 1745, 5, 82, 0, 0, 1745, 1746, 5, 68, 0, 0, 1746, 1747, 5, 87, 0, 0, 1747, 1748, 5, 82, 0, 0, 1748, 1749, 5, 73, 0, 0, 1749, 1750, 5, 84, 0, 0, 1750, 1751, 5, 69, 0, 0, 1751, 1752, 5, 82, 0, 0, 1752, 294, 1, 0, 0, 0, 1753, 1754, 5, 68, 0, 0, 1754, 1755, 5, 69, 0, 0, 1755, 1756, 5, 76, 0, 0, 1756, 1757, 5, 73, 0, 0, 1757, 1758, 5, 77, 0, 0, 1758, 1759, 5, 73, 0, 0, 1759, 1760, 5, 84, 0, 0, 1760, 1761, 5, 69, 0, 0, 1761, 1762, 5, 68, 0, 0, 1762, 296, 1, 0, 0, 0, 1763, 1764, 5, 70, 0, 0, 1764, 1765, 5, 73, 0, 0, 1765, 1766, 5, 69, 0, 0, 1766, 1767, 5, 76, 0, 0, 1767, 1768, 5, 68, 0, 0, 1768, 1769, 5, 83, 0, 0, 1769, 298, 1, 0, 0, 0, 1770, 1771, 5, 84, 0, 0, 1771, 1772, 5, 69, 0, 0, 1772, 1773, 5, 82, 0, 0, 1773, 1774, 5, 77, 0, 0, 1774, 1775, 5, 73, 0, 0, 1775, 1776, 5, 78, 0, 0, 1776, 1777, 5, 65, 0, 0, 1777, 1778, 5, 84, 0, 0, 1778, 1779, 5, 69, 0, 0, 1779, 1780, 5, 68, 0, 0, 1780, 300, 1, 0, 0, 0, 1781, 1782, 5, 67, 0, 0, 1782, 1783, 5, 79, 0, 0, 1783, 1784, 5, 76, 0, 0, 1784, 1785, 5, 76, 0, 0, 1785, 1786, 5, 69, 0, 0, 1786, 1787, 5, 67, 0, 0, 1787, 1788, 5, 84, 0, 0, 1788, 1789, 5, 73, 0, 0, 1789, 1790, 5, 79, 0, 0, 1790, 1791, 5, 78, 0, 0, 1791, 302, 1, 0, 0, 0, 1792, 1793, 5, 73, 0, 0, 1793, 1794, 5, 84, 0, 0, 1794, 1795, 5, 69, 0, 0, 1795, 1796, 5, 77, 0, 0, 1796, 1797, 5, 83, 0, 0, 1797, 304, 1, 0, 0, 0, 1798, 1799, 5, 75, 0, 0, 1799, 1800, 5, 69, 0, 0, 1800, 1801, 5, 89, 0, 0, 1801, 1802, 5, 83, 0, 0, 1802, 306, 1, 0, 0, 0, 1803, 1804, 5, 69, 0, 0, 1804, 1805, 5, 83, 0, 0, 1805, 1806, 5, 67, 0, 0, 1806, 1807, 5, 65, 0, 0, 1807, 1808, 5, 80, 0, 0, 1808, 1809, 5, 69, 0, 0, 1809, 1810, 5, 68, 0, 0, 1810, 308, 1, 0, 0, 0, 1811, 1812, 5, 76, 0, 0, 1812, 1813, 5, 73, 0, 0, 1813, 1814, 5, 78, 0, 0, 1814, 1815, 5, 69, 0, 0, 1815, 1816, 5, 83, 0, 0, 1816, 310, 1, 0, 0, 0, 1817, 1818, 5, 83, 0, 0, 1818, 1819, 5, 69, 0, 0, 1819, 1820, 5, 80, 0, 0, 1820, 1821, 5, 65, 0, 0, 1821, 1822, 5, 82, 0, 0, 1822, 1823, 5, 65, 0, 0, 1823, 1824, 5, 84, 0, 0, 1824, 1825, 5, 69, 0, 0, 1825, 1826, 5, 68, 0, 0, 1826, 312, 1, 0, 0, 0, 1827, 1828, 5, 70, 0, 0, 1828, 1829, 5, 85, 0, 0, 1829, 1830, 5, 78, 0, 0, 1830, 1831, 5, 67, 0, 0, 1831, 1832, 5, 84, 0, 0, 1832, 1833, 5, 73, 0, 0, 1833, 1834, 5, 79, 0, 0, 1834, 1835, 5, 78, 0, 0, 1835, 314, 1, 0, 0, 0, 1836, 1837, 5, 69, 0, 0, 1837, 1838, 5, 88, 0, 0, 1838, 1839, 5, 84, 0, 0, 1839, 1840, 5, 69, 0, 0, 1840, 1841, 5, 78, 0, 0, 1841, 1842, 5, 68, 0, 0, 1842, 1843, 5, 69, 0, 0, 1843, 1844, 5, 68, 0, 0, 1844, 316, 1, 0, 0, 0, 1845, 1846, 5, 82, 0, 0, 1846, 1847, 5, 69, 0, 0, 1847, 1848, 5, 70, 0, 0, 1848, 1849, 5, 82, 0, 0, 1849, 1850, 5, 69, 0, 0, 1850, 1851, 5, 83, 0, 0, 1851, 1852, 5, 72, 0, 0, 1852, 318, 1, 0, 0, 0, 1853, 1854, 5, 67, 0, 0, 1854, 1855, 5, 76, 0, 0, 1855, 1856, 5, 69, 0, 0, 1856, 1857, 5, 65, 0, 0, 1857, 1858, 5, 82, 0, 0, 1858, 320, 1, 0, 0, 0, 1859, 1860, 5, 67, 0, 0, 1860, 1861, 5, 65, 0, 0, 1861, 1862, 5, 67, 0, 0, 1862, 1863, 5, 72, 0, 0, 1863, 1864, 5, 69, 0, 0, 1864, 322, 1, 0, 0, 0, 1865, 1866, 5, 85, 0, 0, 1866, 1867, 5, 78, 0, 0, 1867, 1868, 5, 67, 0, 0, 1868, 1869, 5, 65, 0, 0, 1869, 1870, 5, 67, 0, 0, 1870, 1871, 5, 72, 0, 0, 1871, 1872, 5, 69, 0, 0, 1872, 324, 1, 0, 0, 0, 1873, 1874, 5, 76, 0, 0, 1874, 1875, 5, 65, 0, 0, 1875, 1876, 5, 90, 0, 0, 1876, 1877, 5, 89, 0, 0, 1877, 326, 1, 0, 0, 0, 1878, 1879, 5, 70, 0, 0, 1879, 1880, 5, 79, 0, 0, 1880, 1881, 5, 82, 0, 0, 1881, 1882, 5, 77, 0, 0, 1882, 1883, 5, 65, 0, 0, 1883, 1884, 5, 84, 0, 0, 1884, 1885, 5, 84, 0, 0, 1885, 1886, 5, 69, 0, 0, 1886, 1887, 5, 68, 0, 0, 1887, 328, 1, 0, 0, 0, 1888, 1889, 5, 71, 0, 0, 1889, 1890, 5, 76, 0, 0, 1890, 1891, 5, 79, 0, 0, 1891, 1892, 5, 66, 0, 0, 1892, 1893, 5, 65, 0, 0, 1893, 1894, 5, 76, 0, 0, 1894, 330, 1, 0, 0, 0, 1895, 1896, 5, 84, 0, 0, 1896, 1897, 5, 69, 0, 0, 1897, 1898, 5, 77, 0, 0, 1898, 1899, 5, 80, 0, 0, 1899, 1900, 5, 79, 0, 0, 1900, 1901, 5, 82, 0, 0, 1901, 1902, 5, 65, 0, 0, 1902, 1903, 5, 82, 0, 0, 1903, 1904, 5, 89, 0, 0, 1904, 332, 1, 0, 0, 0, 1905, 1906, 5, 79, 0, 0, 1906, 1907, 5, 80, 0, 0, 1907, 1908, 5, 84, 0, 0, 1908, 1909, 5, 73, 0, 0, 1909, 1910, 5, 79, 0, 0, 1910, 1911, 5, 78, 0, 0, 1911, 1912, 5, 83, 0, 0, 1912, 334, 1, 0, 0, 0, 1913, 1914, 5, 85, 0, 0, 1914, 1915, 5, 78, 0, 0, 1915, 1916, 5, 83, 0, 0, 1916, 1917, 5, 69, 0, 0, 1917, 1918, 5, 84, 0, 0, 1918, 336, 1, 0, 0, 0, 1919, 1920, 5, 84, 0, 0, 1920, 1921, 5, 66, 0, 0, 1921, 1922, 5, 76, 0, 0, 1922, 1923, 5, 80, 0, 0, 1923, 1924, 5, 82, 0, 0, 1924, 1925, 5, 79, 0, 0, 1925, 1926, 5, 80, 0, 0, 1926, 1927, 5, 69, 0, 0, 1927, 1928, 5, 82, 0, 0, 1928, 1929, 5, 84, 0, 0, 1929, 1930, 5, 73, 0, 0, 1930, 1931, 5, 69, 0, 0, 1931, 1932, 5, 83, 0, 0, 1932, 338, 1, 0, 0, 0, 1933, 1934, 5, 68, 0, 0, 1934, 1935, 5, 66, 0, 0, 1935, 1936, 5, 80, 0, 0, 1936, 1937, 5, 82, 0, 0, 1937, 1938, 5, 79, 0, 0, 1938, 1939, 5, 80, 0, 0, 1939, 1940, 5, 69, 0, 0, 1940, 1941, 5, 82, 0, 0, 1941, 1942, 5, 84, 0, 0, 1942, 1943, 5, 73, 0, 0, 1943, 1944, 5, 69, 0, 0, 1944, 1945, 5, 83, 0, 0, 1945, 340, 1, 0, 0, 0, 1946, 1947, 5, 66, 0, 0, 1947, 1948, 5, 85, 0, 0, 1948, 1949, 5, 67, 0, 0, 1949, 1950, 5, 75, 0, 0, 1950, 1951, 5, 69, 0, 0, 1951, 1952, 5, 84, 0, 0, 1952, 1953, 5, 83, 0, 0, 1953, 342, 1, 0, 0, 0, 1954, 1955, 5, 83, 0, 0, 1955, 1956, 5, 75, 0, 0, 1956, 1957, 5, 69, 0, 0, 1957, 1958, 5, 87, 0, 0, 1958, 1959, 5, 69, 0, 0, 1959, 1960, 5, 68, 0, 0, 1960, 344, 1, 0, 0, 0, 1961, 1962, 5, 83, 0, 0, 1962, 1963, 5, 84, 0, 0, 1963, 1964, 5, 79, 0, 0, 1964, 1965, 5, 82, 0, 0, 1965, 1966, 5, 69, 0, 0, 1966, 1967, 5, 68, 0, 0, 1967, 346, 1, 0, 0, 0, 1968, 1969, 5, 68, 0, 0, 1969, 1970, 5, 73, 0, 0, 1970, 1971, 5, 82, 0, 0, 1971, 1972, 5, 69, 0, 0, 1972, 1973, 5, 67, 0, 0, 1973, 1974, 5, 84, 0, 0, 1974, 1975, 5, 79, 0, 0, 1975, 1976, 5, 82, 0, 0, 1976, 1977, 5, 73, 0, 0, 1977, 1978, 5, 69, 0, 0, 1978, 1979, 5, 83, 0, 0, 1979, 348, 1, 0, 0, 0, 1980, 1981, 5, 76, 0, 0, 1981, 1982, 5, 79, 0, 0, 1982, 1983, 5, 67, 0, 0, 1983, 1984, 5, 65, 0, 0, 1984, 1985, 5, 84, 0, 0, 1985, 1986, 5, 73, 0, 0, 1986, 1987, 5, 79, 0, 0, 1987, 1988, 5, 78, 0, 0, 1988, 350, 1, 0, 0, 0, 1989, 1990, 5, 69, 0, 0, 1990, 1991, 5, 88, 0, 0, 1991, 1992, 5, 67, 0, 0, 1992, 1993, 5, 72, 0, 0, 1993, 1994, 5, 65, 0, 0, 1994, 1995, 5, 78, 0, 0, 1995, 1996, 5, 71, 0, 0, 1996, 1997, 5, 69, 0, 0, 1997, 352, 1, 0, 0, 0, 1998, 1999, 5, 65, 0, 0, 1999, 2000, 5, 82, 0, 0, 2000, 2001, 5, 67, 0, 0, 2001, 2002, 5, 72, 0, 0, 2002, 2003, 5, 73, 0, 0, 2003, 2004, 5, 86, 0, 0, 2004, 2005, 5, 69, 0, 0, 2005, 354, 1, 0, 0, 0, 2006, 2007, 5, 85, 0, 0, 2007, 2008, 5, 78, 0, 0, 2008, 2009, 5, 65, 0, 0, 2009, 2010, 5, 82, 0, 0, 2010, 2011, 5, 67, 0, 0, 2011, 2012, 5, 72, 0, 0, 2012, 2013, 5, 73, 0, 0, 2013, 2014, 5, 86, 0, 0, 2014, 2015, 5, 69, 0, 0, 2015, 356, 1, 0, 0, 0, 2016, 2017, 5, 70, 0, 0, 2017, 2018, 5, 73, 0, 0, 2018, 2019, 5, 76, 0, 0, 2019, 2020, 5, 69, 0, 0, 2020, 2021, 5, 70, 0, 0, 2021, 2022, 5, 79, 0, 0, 2022, 2023, 5, 82, 0, 0, 2023, 2024, 5, 77, 0, 0, 2024, 2025, 5, 65, 0, 0, 2025, 2026, 5, 84, 0, 0, 2026, 358, 1, 0, 0, 0, 2027, 2028, 5, 84, 0, 0, 2028, 2029, 5, 79, 0, 0, 2029, 2030, 5, 85, 0, 0, 2030, 2031, 5, 67, 0, 0, 2031, 2032, 5, 72, 0, 0, 2032, 360, 1, 0, 0, 0, 2033, 2034, 5, 67, 0, 0, 2034, 2035, 5, 79, 0, 0, 2035, 2036, 5, 77, 0, 0, 2036, 2037, 5, 80, 0, 0, 2037, 2038, 5, 65, 0, 0, 2038, 2039, 5, 67, 0, 0, 2039, 2040, 5, 84, 0, 0, 2040, 362, 1, 0, 0, 0, 2041, 2042, 5, 67, 0, 0, 2042, 2043, 5, 79, 0, 0, 2043, 2044, 5, 78, 0, 0, 2044, 2045, 5, 67, 0, 0, 2045, 2046, 5, 65, 0, 0, 2046, 2047, 5, 84, 0, 0, 2047, 2048, 5, 69, 0, 0, 2048, 2049, 5, 78, 0, 0, 2049, 2050, 5, 65, 0, 0, 2050, 2051, 5, 84, 0, 0, 2051, 2052, 5, 69, 0, 0, 2052, 364, 1, 0, 0, 0, 2053, 2054, 5, 67, 0, 0, 2054, 2055, 5, 72, 0, 0, 2055, 2056, 5, 65, 0, 0, 2056, 2057, 5, 78, 0, 0, 2057, 2058, 5, 71, 0, 0, 2058, 2059, 5, 69, 0, 0, 2059, 366, 1, 0, 0, 0, 2060, 2061, 5, 67, 0, 0, 2061, 2062, 5, 65, 0, 0, 2062, 2063, 5, 83, 0, 0, 2063, 2064, 5, 67, 0, 0, 2064, 2065, 5, 65, 0, 0, 2065, 2066, 5, 68, 0, 0, 2066, 2067, 5, 69, 0, 0, 2067, 368, 1, 0, 0, 0, 2068, 2069, 5, 67, 0, 0, 2069, 2070, 5, 79, 0, 0, 2070, 2071, 5, 78, 0, 0, 2071, 2072, 5, 83, 0, 0, 2072, 2073, 5, 84, 0, 0, 2073, 2074, 5, 82, 0, 0, 2074, 2075, 5, 65, 0, 0, 2075, 2076, 5, 73, 0, 0, 2076, 2077, 5, 78, 0, 0, 2077, 2078, 5, 84, 0, 0, 2078, 370, 1, 0, 0, 0, 2079, 2080, 5, 82, 0, 0, 2080, 2081, 5, 69, 0, 0, 2081, 2082, 5, 83, 0, 0, 2082, 2083, 5, 84, 0, 0, 2083, 2084, 5, 82, 0, 0, 2084, 2085, 5, 73, 0, 0, 2085, 2086, 5, 67, 0, 0, 2086, 2087, 5, 84, 0, 0, 2087, 372, 1, 0, 0, 0, 2088, 2089, 5, 67, 0, 0, 2089, 2090, 5, 76, 0, 0, 2090, 2091, 5, 85, 0, 0, 2091, 2092, 5, 83, 0, 0, 2092, 2093, 5, 84, 0, 0, 2093, 2094, 5, 69, 0, 0, 2094, 2095, 5, 82, 0, 0, 2095, 2096, 5, 69, 0, 0, 2096, 2097, 5, 68, 0, 0, 2097, 374, 1, 0, 0, 0, 2098, 2099, 5, 83, 0, 0, 2099, 2100, 5, 79, 0, 0, 2100, 2101, 5, 82, 0, 0, 2101, 2102, 5, 84, 0, 0, 2102, 2103, 5, 69, 0, 0, 2103, 2104, 5, 68, 0, 0, 2104, 376, 1, 0, 0, 0, 2105, 2106, 5, 80, 0, 0, 2106, 2107, 5, 85, 0, 0, 2107, 2108, 5, 82, 0, 0, 2108, 2109, 5, 71, 0, 0, 2109, 2110, 5, 69, 0, 0, 2110, 378, 1, 0, 0, 0, 2111, 2112, 5, 73, 0, 0, 2112, 2113, 5, 78, 0, 0, 2113, 2114, 5, 80, 0, 0, 2114, 2115, 5, 85, 0, 0, 2115, 2116, 5, 84, 0, 0, 2116, 2117, 5, 70, 0, 0, 2117, 2118, 5, 79, 0, 0, 2118, 2119, 5, 82, 0, 0, 2119, 2120, 5, 77, 0, 0, 2120, 2121, 5, 65, 0, 0, 2121, 2122, 5, 84, 0, 0, 2122, 380, 1, 0, 0, 0, 2123, 2124, 5, 79, 0, 0, 2124, 2125, 5, 85, 0, 0, 2125, 2126, 5, 84, 0, 0, 2126, 2127, 5, 80, 0, 0, 2127, 2128, 5, 85, 0, 0, 2128, 2129, 5, 84, 0, 0, 2129, 2130, 5, 70, 0, 0, 2130, 2131, 5, 79, 0, 0, 2131, 2132, 5, 82, 0, 0, 2132, 2133, 5, 77, 0, 0, 2133, 2134, 5, 65, 0, 0, 2134, 2135, 5, 84, 0, 0, 2135, 382, 1, 0, 0, 0, 2136, 2137, 5, 68, 0, 0, 2137, 2138, 5, 65, 0, 0, 2138, 2139, 5, 84, 0, 0, 2139, 2140, 5, 65, 0, 0, 2140, 2141, 5, 66, 0, 0, 2141, 2142, 5, 65, 0, 0, 2142, 2143, 5, 83, 0, 0, 2143, 2144, 5, 69, 0, 0, 2144, 384, 1, 0, 0, 0, 2145, 2146, 5, 68, 0, 0, 2146, 2147, 5, 65, 0, 0, 2147, 2148, 5, 84, 0, 0, 2148, 2149, 5, 65, 0, 0, 2149, 2150, 5, 66, 0, 0, 2150, 2151, 5, 65, 0, 0, 2151, 2152, 5, 83, 0, 0, 2152, 2153, 5, 69, 0, 0, 2153, 2154, 5, 83, 0, 0, 2154, 386, 1, 0, 0, 0, 2155, 2156, 5, 68, 0, 0, 2156, 2157, 5, 70, 0, 0, 2157, 2158, 5, 83, 0, 0, 2158, 388, 1, 0, 0, 0, 2159, 2160, 5, 84, 0, 0, 2160, 2161, 5, 82, 0, 0, 2161, 2162, 5, 85, 0, 0, 2162, 2163, 5, 78, 0, 0, 2163, 2164, 5, 67, 0, 0, 2164, 2165, 5, 65, 0, 0, 2165, 2166, 5, 84, 0, 0, 2166, 2167, 5, 69, 0, 0, 2167, 390, 1, 0, 0, 0, 2168, 2169, 5, 65, 0, 0, 2169, 2170, 5, 78, 0, 0, 2170, 2171, 5, 65, 0, 0, 2171, 2172, 5, 76, 0, 0, 2172, 2173, 5, 89, 0, 0, 2173, 2174, 5, 90, 0, 0, 2174, 2175, 5, 69, 0, 0, 2175, 392, 1, 0, 0, 0, 2176, 2177, 5, 67, 0, 0, 2177, 2178, 5, 79, 0, 0, 2178, 2179, 5, 77, 0, 0, 2179, 2180, 5, 80, 0, 0, 2180, 2181, 5, 85, 0, 0, 2181, 2182, 5, 84, 0, 0, 2182, 2183, 5, 69, 0, 0, 2183, 394, 1, 0, 0, 0, 2184, 2185, 5, 76, 0, 0, 2185, 2186, 5, 73, 0, 0, 2186, 2187, 5, 83, 0, 0, 2187, 2188, 5, 84, 0, 0, 2188, 396, 1, 0, 0, 0, 2189, 2190, 5, 83, 0, 0, 2190, 2191, 5, 84, 0, 0, 2191, 2192, 5, 65, 0, 0, 2192, 2193, 5, 84, 0, 0, 2193, 2194, 5, 73, 0, 0, 2194, 2195, 5, 83, 0, 0, 2195, 2196, 5, 84, 0, 0, 2196, 2197, 5, 73, 0, 0, 2197, 2198, 5, 67, 0, 0, 2198, 2199, 5, 83, 0, 0, 2199, 398, 1, 0, 0, 0, 2200, 2201, 5, 80, 0, 0, 2201, 2202, 5, 65, 0, 0, 2202, 2203, 5, 82, 0, 0, 2203, 2204, 5, 84, 0, 0, 2204, 2205, 5, 73, 0, 0, 2205, 2206, 5, 84, 0, 0, 2206, 2207, 5, 73, 0, 0, 2207, 2208, 5, 79, 0, 0, 2208, 2209, 5, 78, 0, 0, 2209, 2210, 5, 69, 0, 0, 2210, 2211, 5, 68, 0, 0, 2211, 400, 1, 0, 0, 0, 2212, 2213, 5, 69, 0, 0, 2213, 2214, 5, 88, 0, 0, 2214, 2215, 5, 84, 0, 0, 2215, 2216, 5, 69, 0, 0, 2216, 2217, 5, 82, 0, 0, 2217, 2218, 5, 78, 0, 0, 2218, 2219, 5, 65, 0, 0, 2219, 2220, 5, 76, 0, 0, 2220, 402, 1, 0, 0, 0, 2221, 2222, 5, 68, 0, 0, 2222, 2223, 5, 69, 0, 0, 2223, 2224, 5, 70, 0, 0, 2224, 2225, 5, 73, 0, 0, 2225, 2226, 5, 78, 0, 0, 2226, 2227, 5, 69, 0, 0, 2227, 2228, 5, 68, 0, 0, 2228, 404, 1, 0, 0, 0, 2229, 2230, 5, 82, 0, 0, 2230, 2231, 5, 69, 0, 0, 2231, 2232, 5, 86, 0, 0, 2232, 2233, 5, 79, 0, 0, 2233, 2234, 5, 75, 0, 0, 2234, 2235, 5, 69, 0, 0, 2235, 406, 1, 0, 0, 0, 2236, 2237, 5, 71, 0, 0, 2237, 2238, 5, 82, 0, 0, 2238, 2239, 5, 65, 0, 0, 2239, 2240, 5, 78, 0, 0, 2240, 2241, 5, 84, 0, 0, 2241, 408, 1, 0, 0, 0, 2242, 2243, 5, 76, 0, 0, 2243, 2244, 5, 79, 0, 0, 2244, 2245, 5, 67, 0, 0, 2245, 2246, 5, 75, 0, 0, 2246, 410, 1, 0, 0, 0, 2247, 2248, 5, 85, 0, 0, 2248, 2249, 5, 78, 0, 0, 2249, 2250, 5, 76, 0, 0, 2250, 2251, 5, 79, 0, 0, 2251, 2252, 5, 67, 0, 0, 2252, 2253, 5, 75, 0, 0, 2253, 412, 1, 0, 0, 0, 2254, 2255, 5, 77, 0, 0, 2255, 2256, 5, 83, 0, 0, 2256, 2257, 5, 67, 0, 0, 2257, 2258, 5, 75, 0, 0, 2258, 414, 1, 0, 0, 0, 2259, 2260, 5, 82, 0, 0, 2260, 2261, 5, 69, 0, 0, 2261, 2262, 5, 80, 0, 0, 2262, 2263, 5, 65, 0, 0, 2263, 2264, 5, 73, 0, 0, 2264, 2265, 5, 82, 0, 0, 2265, 416, 1, 0, 0, 0, 2266, 2267, 5, 82, 0, 0, 2267, 2268, 5, 69, 0, 0, 2268, 2269, 5, 67, 0, 0, 2269, 2270, 5, 79, 0, 0, 2270, 2271, 5, 86, 0, 0, 2271, 2272, 5, 69, 0, 0, 2272, 2273, 5, 82, 0, 0, 2273, 418, 1, 0, 0, 0, 2274, 2275, 5, 69, 0, 0, 2275, 2276, 5, 88, 0, 0, 2276, 2277, 5, 80, 0, 0, 2277, 2278, 5, 79, 0, 0, 2278, 2279, 5, 82, 0, 0, 2279, 2280, 5, 84, 0, 0, 2280, 420, 1, 0, 0, 0, 2281, 2282, 5, 73, 0, 0, 2282, 2283, 5, 77, 0, 0, 2283, 2284, 5, 80, 0, 0, 2284, 2285, 5, 79, 0, 0, 2285, 2286, 5, 82, 0, 0, 2286, 2287, 5, 84, 0, 0, 2287, 422, 1, 0, 0, 0, 2288, 2289, 5, 76, 0, 0, 2289, 2290, 5, 79, 0, 0, 2290, 2291, 5, 65, 0, 0, 2291, 2292, 5, 68, 0, 0, 2292, 424, 1, 0, 0, 0, 2293, 2294, 5, 85, 0, 0, 2294, 2295, 5, 78, 0, 0, 2295, 2296, 5, 76, 0, 0, 2296, 2297, 5, 79, 0, 0, 2297, 2298, 5, 65, 0, 0, 2298, 2299, 5, 68, 0, 0, 2299, 426, 1, 0, 0, 0, 2300, 2301, 5, 82, 0, 0, 2301, 2302, 5, 79, 0, 0, 2302, 2303, 5, 76, 0, 0, 2303, 2304, 5, 69, 0, 0, 2304, 428, 1, 0, 0, 0, 2305, 2306, 5, 82, 0, 0, 2306, 2307, 5, 79, 0, 0, 2307, 2308, 5, 76, 0, 0, 2308, 2309, 5, 69, 0, 0, 2309, 2310, 5, 83, 0, 0, 2310, 430, 1, 0, 0, 0, 2311, 2312, 5, 67, 0, 0, 2312, 2313, 5, 79, 0, 0, 2313, 2314, 5, 77, 0, 0, 2314, 2315, 5, 80, 0, 0, 2315, 2316, 5, 65, 0, 0, 2316, 2317, 5, 67, 0, 0, 2317, 2318, 5, 84, 0, 0, 2318, 2319, 5, 73, 0, 0, 2319, 2320, 5, 79, 0, 0, 2320, 2321, 5, 78, 0, 0, 2321, 2322, 5, 83, 0, 0, 2322, 432, 1, 0, 0, 0, 2323, 2324, 5, 80, 0, 0, 2324, 2325, 5, 82, 0, 0, 2325, 2326, 5, 73, 0, 0, 2326, 2327, 5, 78, 0, 0, 2327, 2328, 5, 67, 0, 0, 2328, 2329, 5, 73, 0, 0, 2329, 2330, 5, 80, 0, 0, 2330, 2331, 5, 65, 0, 0, 2331, 2332, 5, 76, 0, 0, 2332, 2333, 5, 83, 0, 0, 2333, 434, 1, 0, 0, 0, 2334, 2335, 5, 84, 0, 0, 2335, 2336, 5, 82, 0, 0, 2336, 2337, 5, 65, 0, 0, 2337, 2338, 5, 78, 0, 0, 2338, 2339, 5, 83, 0, 0, 2339, 2340, 5, 65, 0, 0, 2340, 2341, 5, 67, 0, 0, 2341, 2342, 5, 84, 0, 0, 2342, 2343, 5, 73, 0, 0, 2343, 2344, 5, 79, 0, 0, 2344, 2345, 5, 78, 0, 0, 2345, 2346, 5, 83, 0, 0, 2346, 436, 1, 0, 0, 0, 2347, 2348, 5, 73, 0, 0, 2348, 2349, 5, 78, 0, 0, 2349, 2350, 5, 68, 0, 0, 2350, 2351, 5, 69, 0, 0, 2351, 2352, 5, 88, 0, 0, 2352, 438, 1, 0, 0, 0, 2353, 2354, 5, 73, 0, 0, 2354, 2355, 5, 78, 0, 0, 2355, 2356, 5, 68, 0, 0, 2356, 2357, 5, 69, 0, 0, 2357, 2358, 5, 88, 0, 0, 2358, 2359, 5, 69, 0, 0, 2359, 2360, 5, 83, 0, 0, 2360, 440, 1, 0, 0, 0, 2361, 2362, 5, 76, 0, 0, 2362, 2363, 5, 79, 0, 0, 2363, 2364, 5, 67, 0, 0, 2364, 2365, 5, 75, 0, 0, 2365, 2366, 5, 83, 0, 0, 2366, 442, 1, 0, 0, 0, 2367, 2368, 5, 79, 0, 0, 2368, 2369, 5, 80, 0, 0, 2369, 2370, 5, 84, 0, 0, 2370, 2371, 5, 73, 0, 0, 2371, 2372, 5, 79, 0, 0, 2372, 2373, 5, 78, 0, 0, 2373, 444, 1, 0, 0, 0, 2374, 2375, 5, 65, 0, 0, 2375, 2376, 5, 78, 0, 0, 2376, 2377, 5, 84, 0, 0, 2377, 2378, 5, 73, 0, 0, 2378, 446, 1, 0, 0, 0, 2379, 2380, 5, 76, 0, 0, 2380, 2381, 5, 79, 0, 0, 2381, 2382, 5, 67, 0, 0, 2382, 2383, 5, 65, 0, 0, 2383, 2384, 5, 76, 0, 0, 2384, 448, 1, 0, 0, 0, 2385, 2386, 5, 73, 0, 0, 2386, 2387, 5, 78, 0, 0, 2387, 2388, 5, 80, 0, 0, 2388, 2389, 5, 65, 0, 0, 2389, 2390, 5, 84, 0, 0, 2390, 2391, 5, 72, 0, 0, 2391, 450, 1, 0, 0, 0, 2392, 2393, 5, 87, 0, 0, 2393, 2394, 5, 65, 0, 0, 2394, 2395, 5, 84, 0, 0, 2395, 2396, 5, 69, 0, 0, 2396, 2397, 5, 82, 0, 0, 2397, 2398, 5, 77, 0, 0, 2398, 2399, 5, 65, 0, 0, 2399, 2400, 5, 82, 0, 0, 2400, 2401, 5, 75, 0, 0, 2401, 452, 1, 0, 0, 0, 2402, 2403, 5, 85, 0, 0, 2403, 2404, 5, 78, 0, 0, 2404, 2405, 5, 78, 0, 0, 2405, 2406, 5, 69, 0, 0, 2406, 2407, 5, 83, 0, 0, 2407, 2408, 5, 84, 0, 0, 2408, 454, 1, 0, 0, 0, 2409, 2410, 5, 77, 0, 0, 2410, 2411, 5, 65, 0, 0, 2411, 2412, 5, 84, 0, 0, 2412, 2413, 5, 67, 0, 0, 2413, 2414, 5, 72, 0, 0, 2414, 456, 1, 0, 0, 0, 2415, 2416, 5, 78, 0, 0, 2416, 2417, 5, 69, 0, 0, 2417, 2418, 5, 88, 0, 0, 2418, 2419, 5, 84, 0, 0, 2419, 458, 1, 0, 0, 0, 2420, 2421, 5, 87, 0, 0, 2421, 2422, 5, 73, 0, 0, 2422, 2423, 5, 84, 0, 0, 2423, 2424, 5, 72, 0, 0, 2424, 2425, 5, 73, 0, 0, 2425, 2426, 5, 78, 0, 0, 2426, 460, 1, 0, 0, 0, 2427, 2428, 5, 87, 0, 0, 2428, 2429, 5, 83, 0, 0, 2429, 462, 1, 0, 0, 0, 2430, 2431, 5, 83, 0, 0, 2431, 2432, 5, 89, 0, 0, 2432, 2433, 5, 83, 0, 0, 2433, 2434, 5, 84, 0, 0, 2434, 2435, 5, 69, 0, 0, 2435, 2436, 5, 77, 0, 0, 2436, 464, 1, 0, 0, 0, 2437, 2438, 5, 73, 0, 0, 2438, 2439, 5, 78, 0, 0, 2439, 2440, 5, 67, 0, 0, 2440, 2441, 5, 76, 0, 0, 2441, 2442, 5, 85, 0, 0, 2442, 2443, 5, 68, 0, 0, 2443, 2444, 5, 73, 0, 0, 2444, 2445, 5, 78, 0, 0, 2445, 2446, 5, 71, 0, 0, 2446, 466, 1, 0, 0, 0, 2447, 2448, 5, 69, 0, 0, 2448, 2449, 5, 88, 0, 0, 2449, 2450, 5, 67, 0, 0, 2450, 2451, 5, 76, 0, 0, 2451, 2452, 5, 85, 0, 0, 2452, 2453, 5, 68, 0, 0, 2453, 2454, 5, 73, 0, 0, 2454, 2455, 5, 78, 0, 0, 2455, 2456, 5, 71, 0, 0, 2456, 468, 1, 0, 0, 0, 2457, 2458, 5, 79, 0, 0, 2458, 2459, 5, 86, 0, 0, 2459, 2460, 5, 69, 0, 0, 2460, 2461, 5, 82, 0, 0, 2461, 2462, 5, 87, 0, 0, 2462, 2463, 5, 82, 0, 0, 2463, 2464, 5, 73, 0, 0, 2464, 2465, 5, 84, 0, 0, 2465, 2466, 5, 73, 0, 0, 2466, 2467, 5, 78, 0, 0, 2467, 2468, 5, 71, 0, 0, 2468, 470, 1, 0, 0, 0, 2469, 2470, 5, 67, 0, 0, 2470, 2471, 5, 79, 0, 0, 2471, 2472, 5, 78, 0, 0, 2472, 2473, 5, 83, 0, 0, 2473, 2474, 5, 84, 0, 0, 2474, 2475, 5, 82, 0, 0, 2475, 2476, 5, 65, 0, 0, 2476, 2477, 5, 73, 0, 0, 2477, 2478, 5, 78, 0, 0, 2478, 2479, 5, 84, 0, 0, 2479, 2480, 5, 83, 0, 0, 2480, 472, 1, 0, 0, 0, 2481, 2482, 5, 71, 0, 0, 2482, 2483, 5, 69, 0, 0, 2483, 2484, 5, 78, 0, 0, 2484, 2485, 5, 69, 0, 0, 2485, 2486, 5, 82, 0, 0, 2486, 2487, 5, 65, 0, 0, 2487, 2488, 5, 84, 0, 0, 2488, 2489, 5, 69, 0, 0, 2489, 2490, 5, 68, 0, 0, 2490, 474, 1, 0, 0, 0, 2491, 2492, 5, 87, 0, 0, 2492, 2493, 5, 65, 0, 0, 2493, 2494, 5, 84, 0, 0, 2494, 2495, 5, 69, 0, 0, 2495, 2496, 5, 82, 0, 0, 2496, 2497, 5, 77, 0, 0, 2497, 2498, 5, 65, 0, 0, 2498, 2499, 5, 82, 0, 0, 2499, 2500, 5, 75, 0, 0, 2500, 2501, 5, 83, 0, 0, 2501, 476, 1, 0, 0, 0, 2502, 2503, 5, 67, 0, 0, 2503, 2504, 5, 65, 0, 0, 2504, 2505, 5, 84, 0, 0, 2505, 2506, 5, 65, 0, 0, 2506, 2507, 5, 76, 0, 0, 2507, 2508, 5, 79, 0, 0, 2508, 2509, 5, 71, 0, 0, 2509, 478, 1, 0, 0, 0, 2510, 2511, 5, 76, 0, 0, 2511, 2512, 5, 65, 0, 0, 2512, 2513, 5, 78, 0, 0, 2513, 2514, 5, 71, 0, 0, 2514, 2515, 5, 85, 0, 0, 2515, 2516, 5, 65, 0, 0, 2516, 2517, 5, 71, 0, 0, 2517, 2518, 5, 69, 0, 0, 2518, 480, 1, 0, 0, 0, 2519, 2520, 5, 74, 0, 0, 2520, 2521, 5, 65, 0, 0, 2521, 2522, 5, 86, 0, 0, 2522, 2523, 5, 65, 0, 0, 2523, 482, 1, 0, 0, 0, 2524, 2525, 5, 83, 0, 0, 2525, 2526, 5, 67, 0, 0, 2526, 2527, 5, 65, 0, 0, 2527, 2528, 5, 76, 0, 0, 2528, 2529, 5, 65, 0, 0, 2529, 484, 1, 0, 0, 0, 2530, 2531, 5, 80, 0, 0, 2531, 2532, 5, 89, 0, 0, 2532, 2533, 5, 84, 0, 0, 2533, 2534, 5, 72, 0, 0, 2534, 2535, 5, 79, 0, 0, 2535, 2536, 5, 78, 0, 0, 2536, 486, 1, 0, 0, 0, 2537, 2538, 5, 74, 0, 0, 2538, 2539, 5, 65, 0, 0, 2539, 2540, 5, 82, 0, 0, 2540, 488, 1, 0, 0, 0, 2541, 2542, 5, 70, 0, 0, 2542, 2543, 5, 73, 0, 0, 2543, 2544, 5, 76, 0, 0, 2544, 2545, 5, 69, 0, 0, 2545, 490, 1, 0, 0, 0, 2546, 2547, 5, 80, 0, 0, 2547, 2548, 5, 89, 0, 0, 2548, 2549, 5, 84, 0, 0, 2549, 2550, 5, 72, 0, 0, 2550, 2551, 5, 79, 0, 0, 2551, 2552, 5, 78, 0, 0, 2552, 2553, 5, 95, 0, 0, 2553, 2554, 5, 70, 0, 0, 2554, 2555, 5, 73, 0, 0, 2555, 2556, 5, 76, 0, 0, 2556, 2557, 5, 69, 0, 0, 2557, 2558, 5, 83, 0, 0, 2558, 492, 1, 0, 0, 0, 2559, 2560, 5, 80, 0, 0, 2560, 2561, 5, 89, 0, 0, 2561, 2562, 5, 84, 0, 0, 2562, 2563, 5, 72, 0, 0, 2563, 2564, 5, 79, 0, 0, 2564, 2565, 5, 78, 0, 0, 2565, 2566, 5, 95, 0, 0, 2566, 2567, 5, 82, 0, 0, 2567, 2568, 5, 69, 0, 0, 2568, 2569, 5, 81, 0, 0, 2569, 2570, 5, 85, 0, 0, 2570, 2571, 5, 73, 0, 0, 2571, 2572, 5, 82, 0, 0, 2572, 2573, 5, 69, 0, 0, 2573, 2574, 5, 77, 0, 0, 2574, 2575, 5, 69, 0, 0, 2575, 2576, 5, 78, 0, 0, 2576, 2577, 5, 84, 0, 0, 2577, 2578, 5, 83, 0, 0, 2578, 494, 1, 0, 0, 0, 2579, 2580, 5, 80, 0, 0, 2580, 2581, 5, 89, 0, 0, 2581, 2582, 5, 84, 0, 0, 2582, 2583, 5, 72, 0, 0, 2583, 2584, 5, 79, 0, 0, 2584, 2585, 5, 78, 0, 0, 2585, 2586, 5, 95, 0, 0, 2586, 2587, 5, 68, 0, 0, 2587, 2588, 5, 69, 0, 0, 2588, 2589, 5, 80, 0, 0, 2589, 2590, 5, 69, 0, 0, 2590, 2591, 5, 78, 0, 0, 2591, 2592, 5, 68, 0, 0, 2592, 2593, 5, 69, 0, 0, 2593, 2594, 5, 78, 0, 0, 2594, 2595, 5, 67, 0, 0, 2595, 2596, 5, 73, 0, 0, 2596, 2597, 5, 69, 0, 0, 2597, 2598, 5, 83, 0, 0, 2598, 496, 1, 0, 0, 0, 2599, 2600, 5, 80, 0, 0, 2600, 2601, 5, 89, 0, 0, 2601, 2602, 5, 84, 0, 0, 2602, 2603, 5, 72, 0, 0, 2603, 2604, 5, 79, 0, 0, 2604, 2605, 5, 78, 0, 0, 2605, 2606, 5, 95, 0, 0, 2606, 2607, 5, 74, 0, 0, 2607, 2608, 5, 65, 0, 0, 2608, 2609, 5, 82, 0, 0, 2609, 498, 1, 0, 0, 0, 2610, 2611, 5, 80, 0, 0, 2611, 2612, 5, 89, 0, 0, 2612, 2613, 5, 84, 0, 0, 2613, 2614, 5, 72, 0, 0, 2614, 2615, 5, 79, 0, 0, 2615, 2616, 5, 78, 0, 0, 2616, 2617, 5, 95, 0, 0, 2617, 2618, 5, 65, 0, 0, 2618, 2619, 5, 82, 0, 0, 2619, 2620, 5, 67, 0, 0, 2620, 2621, 5, 72, 0, 0, 2621, 2622, 5, 73, 0, 0, 2622, 2623, 5, 86, 0, 0, 2623, 2624, 5, 69, 0, 0, 2624, 2625, 5, 83, 0, 0, 2625, 500, 1, 0, 0, 0, 2626, 2627, 5, 80, 0, 0, 2627, 2628, 5, 89, 0, 0, 2628, 2629, 5, 84, 0, 0, 2629, 2630, 5, 72, 0, 0, 2630, 2631, 5, 79, 0, 0, 2631, 2632, 5, 78, 0, 0, 2632, 2633, 5, 95, 0, 0, 2633, 2634, 5, 80, 0, 0, 2634, 2635, 5, 65, 0, 0, 2635, 2636, 5, 82, 0, 0, 2636, 2637, 5, 65, 0, 0, 2637, 2638, 5, 77, 0, 0, 2638, 2639, 5, 69, 0, 0, 2639, 2640, 5, 84, 0, 0, 2640, 2641, 5, 69, 0, 0, 2641, 2642, 5, 82, 0, 0, 2642, 502, 1, 0, 0, 0, 2643, 2644, 5, 69, 0, 0, 2644, 2645, 5, 78, 0, 0, 2645, 2646, 5, 71, 0, 0, 2646, 2647, 5, 73, 0, 0, 2647, 2648, 5, 78, 0, 0, 2648, 2649, 5, 69, 0, 0, 2649, 504, 1, 0, 0, 0, 2650, 2651, 5, 67, 0, 0, 2651, 2652, 5, 65, 0, 0, 2652, 2653, 5, 84, 0, 0, 2653, 2654, 5, 65, 0, 0, 2654, 2655, 5, 76, 0, 0, 2655, 2656, 5, 79, 0, 0, 2656, 2657, 5, 71, 0, 0, 2657, 2658, 5, 83, 0, 0, 2658, 506, 1, 0, 0, 0, 2659, 2660, 5, 86, 0, 0, 2660, 2661, 5, 73, 0, 0, 2661, 2662, 5, 69, 0, 0, 2662, 2663, 5, 87, 0, 0, 2663, 2664, 5, 83, 0, 0, 2664, 508, 1, 0, 0, 0, 2665, 2666, 5, 74, 0, 0, 2666, 2667, 5, 65, 0, 0, 2667, 2668, 5, 82, 0, 0, 2668, 2669, 5, 83, 0, 0, 2669, 510, 1, 0, 0, 0, 2670, 2671, 5, 80, 0, 0, 2671, 2672, 5, 82, 0, 0, 2672, 2673, 5, 73, 0, 0, 2673, 2674, 5, 77, 0, 0, 2674, 2675, 5, 65, 0, 0, 2675, 2676, 5, 82, 0, 0, 2676, 2677, 5, 89, 0, 0, 2677, 512, 1, 0, 0, 0, 2678, 2679, 5, 85, 0, 0, 2679, 2680, 5, 78, 0, 0, 2680, 2681, 5, 73, 0, 0, 2681, 2682, 5, 81, 0, 0, 2682, 2683, 5, 85, 0, 0, 2683, 2684, 5, 69, 0, 0, 2684, 514, 1, 0, 0, 0, 2685, 2686, 5, 75, 0, 0, 2686, 2687, 5, 69, 0, 0, 2687, 2688, 5, 89, 0, 0, 2688, 516, 1, 0, 0, 0, 2689, 2690, 5, 80, 0, 0, 2690, 2691, 5, 69, 0, 0, 2691, 2692, 5, 82, 0, 0, 2692, 2693, 5, 73, 0, 0, 2693, 2694, 5, 79, 0, 0, 2694, 2695, 5, 68, 0, 0, 2695, 518, 1, 0, 0, 0, 2696, 2697, 5, 83, 0, 0, 2697, 2698, 5, 89, 0, 0, 2698, 2699, 5, 83, 0, 0, 2699, 2700, 5, 84, 0, 0, 2700, 2701, 5, 69, 0, 0, 2701, 2702, 5, 77, 0, 0, 2702, 2703, 5, 95, 0, 0, 2703, 2704, 5, 84, 0, 0, 2704, 2705, 5, 73, 0, 0, 2705, 2706, 5, 77, 0, 0, 2706, 2707, 5, 69, 0, 0, 2707, 520, 1, 0, 0, 0, 2708, 2709, 5, 69, 0, 0, 2709, 2710, 5, 78, 0, 0, 2710, 2711, 5, 70, 0, 0, 2711, 2712, 5, 79, 0, 0, 2712, 2713, 5, 82, 0, 0, 2713, 2714, 5, 67, 0, 0, 2714, 2715, 5, 69, 0, 0, 2715, 2716, 5, 68, 0, 0, 2716, 522, 1, 0, 0, 0, 2717, 2718, 5, 77, 0, 0, 2718, 2719, 5, 69, 0, 0, 2719, 2720, 5, 84, 0, 0, 2720, 2721, 5, 65, 0, 0, 2721, 2722, 5, 68, 0, 0, 2722, 2723, 5, 65, 0, 0, 2723, 2724, 5, 84, 0, 0, 2724, 2725, 5, 65, 0, 0, 2725, 524, 1, 0, 0, 0, 2726, 2727, 5, 86, 0, 0, 2727, 2728, 5, 73, 0, 0, 2728, 2729, 5, 82, 0, 0, 2729, 2730, 5, 84, 0, 0, 2730, 2731, 5, 85, 0, 0, 2731, 2732, 5, 65, 0, 0, 2732, 2733, 5, 76, 0, 0, 2733, 526, 1, 0, 0, 0, 2734, 2735, 5, 90, 0, 0, 2735, 2736, 5, 79, 0, 0, 2736, 2737, 5, 78, 0, 0, 2737, 2738, 5, 69, 0, 0, 2738, 528, 1, 0, 0, 0, 2739, 2740, 5, 84, 0, 0, 2740, 2741, 5, 85, 0, 0, 2741, 2742, 5, 77, 0, 0, 2742, 2743, 5, 66, 0, 0, 2743, 2744, 5, 76, 0, 0, 2744, 2745, 5, 69, 0, 0, 2745, 530, 1, 0, 0, 0, 2746, 2747, 5, 72, 0, 0, 2747, 2748, 5, 79, 0, 0, 2748, 2749, 5, 80, 0, 0, 2749, 532, 1, 0, 0, 0, 2750, 2751, 5, 67, 0, 0, 2751, 2752, 5, 85, 0, 0, 2752, 2753, 5, 77, 0, 0, 2753, 2754, 5, 85, 0, 0, 2754, 2755, 5, 76, 0, 0, 2755, 2756, 5, 65, 0, 0, 2756, 2757, 5, 84, 0, 0, 2757, 2758, 5, 69, 0, 0, 2758, 534, 1, 0, 0, 0, 2759, 2760, 5, 68, 0, 0, 2760, 2761, 5, 69, 0, 0, 2761, 2762, 5, 83, 0, 0, 2762, 2763, 5, 67, 0, 0, 2763, 2764, 5, 82, 0, 0, 2764, 2765, 5, 73, 0, 0, 2765, 2766, 5, 80, 0, 0, 2766, 2767, 5, 84, 0, 0, 2767, 2768, 5, 79, 0, 0, 2768, 2769, 5, 82, 0, 0, 2769, 536, 1, 0, 0, 0, 2770, 2771, 5, 84, 0, 0, 2771, 2772, 5, 73, 0, 0, 2772, 2773, 5, 77, 0, 0, 2773, 2774, 5, 69, 0, 0, 2774, 2775, 5, 67, 0, 0, 2775, 2776, 5, 79, 0, 0, 2776, 2777, 5, 76, 0, 0, 2777, 538, 1, 0, 0, 0, 2778, 2779, 5, 83, 0, 0, 2779, 2780, 5, 73, 0, 0, 2780, 2781, 5, 90, 0, 0, 2781, 2782, 5, 69, 0, 0, 2782, 540, 1, 0, 0, 0, 2783, 2784, 5, 79, 0, 0, 2784, 2785, 5, 70, 0, 0, 2785, 2786, 5, 70, 0, 0, 2786, 2787, 5, 83, 0, 0, 2787, 2788, 5, 69, 0, 0, 2788, 2789, 5, 84, 0, 0, 2789, 542, 1, 0, 0, 0, 2790, 2791, 5, 83, 0, 0, 2791, 2792, 5, 84, 0, 0, 2792, 2793, 5, 69, 0, 0, 2793, 2794, 5, 80, 0, 0, 2794, 544, 1, 0, 0, 0, 2795, 2796, 5, 83, 0, 0, 2796, 2797, 5, 76, 0, 0, 2797, 2798, 5, 73, 0, 0, 2798, 2799, 5, 68, 0, 0, 2799, 2800, 5, 69, 0, 0, 2800, 546, 1, 0, 0, 0, 2801, 2802, 5, 83, 0, 0, 2802, 2803, 5, 69, 0, 0, 2803, 2804, 5, 83, 0, 0, 2804, 2805, 5, 83, 0, 0, 2805, 2806, 5, 73, 0, 0, 2806, 2807, 5, 79, 0, 0, 2807, 2808, 5, 78, 0, 0, 2808, 548, 1, 0, 0, 0, 2809, 2810, 5, 77, 0, 0, 2810, 2811, 5, 65, 0, 0, 2811, 2812, 5, 84, 0, 0, 2812, 2813, 5, 67, 0, 0, 2813, 2814, 5, 72, 0, 0, 2814, 2815, 5, 95, 0, 0, 2815, 2816, 5, 82, 0, 0, 2816, 2817, 5, 69, 0, 0, 2817, 2818, 5, 67, 0, 0, 2818, 2819, 5, 79, 0, 0, 2819, 2820, 5, 71, 0, 0, 2820, 2821, 5, 78, 0, 0, 2821, 2822, 5, 73, 0, 0, 2822, 2823, 5, 90, 0, 0, 2823, 2824, 5, 69, 0, 0, 2824, 550, 1, 0, 0, 0, 2825, 2826, 5, 77, 0, 0, 2826, 2827, 5, 69, 0, 0, 2827, 2828, 5, 65, 0, 0, 2828, 2829, 5, 83, 0, 0, 2829, 2830, 5, 85, 0, 0, 2830, 2831, 5, 82, 0, 0, 2831, 2832, 5, 69, 0, 0, 2832, 2833, 5, 83, 0, 0, 2833, 552, 1, 0, 0, 0, 2834, 2835, 5, 80, 0, 0, 2835, 2836, 5, 65, 0, 0, 2836, 2837, 5, 84, 0, 0, 2837, 2838, 5, 84, 0, 0, 2838, 2839, 5, 69, 0, 0, 2839, 2840, 5, 82, 0, 0, 2840, 2841, 5, 78, 0, 0, 2841, 554, 1, 0, 0, 0, 2842, 2843, 5, 79, 0, 0, 2843, 2844, 5, 78, 0, 0, 2844, 2845, 5, 69, 0, 0, 2845, 556, 1, 0, 0, 0, 2846, 2847, 5, 80, 0, 0, 2847, 2848, 5, 69, 0, 0, 2848, 2849, 5, 82, 0, 0, 2849, 558, 1, 0, 0, 0, 2850, 2851, 5, 83, 0, 0, 2851, 2852, 5, 75, 0, 0, 2852, 2853, 5, 73, 0, 0, 2853, 2854, 5, 80, 0, 0, 2854, 560, 1, 0, 0, 0, 2855, 2856, 5, 80, 0, 0, 2856, 2857, 5, 65, 0, 0, 2857, 2858, 5, 83, 0, 0, 2858, 2859, 5, 84, 0, 0, 2859, 562, 1, 0, 0, 0, 2860, 2861, 5, 68, 0, 0, 2861, 2862, 5, 69, 0, 0, 2862, 2863, 5, 70, 0, 0, 2863, 2864, 5, 73, 0, 0, 2864, 2865, 5, 78, 0, 0, 2865, 2866, 5, 69, 0, 0, 2866, 564, 1, 0, 0, 0, 2867, 2868, 5, 83, 0, 0, 2868, 2869, 5, 84, 0, 0, 2869, 2870, 5, 82, 0, 0, 2870, 2871, 5, 73, 0, 0, 2871, 2872, 5, 78, 0, 0, 2872, 2873, 5, 71, 0, 0, 2873, 566, 1, 0, 0, 0, 2874, 2875, 5, 65, 0, 0, 2875, 2876, 5, 82, 0, 0, 2876, 2877, 5, 82, 0, 0, 2877, 2878, 5, 65, 0, 0, 2878, 2879, 5, 89, 0, 0, 2879, 568, 1, 0, 0, 0, 2880, 2881, 5, 77, 0, 0, 2881, 2882, 5, 65, 0, 0, 2882, 2883, 5, 80, 0, 0, 2883, 570, 1, 0, 0, 0, 2884, 2885, 5, 67, 0, 0, 2885, 2886, 5, 72, 0, 0, 2886, 2887, 5, 65, 0, 0, 2887, 2888, 5, 82, 0, 0, 2888, 572, 1, 0, 0, 0, 2889, 2890, 5, 86, 0, 0, 2890, 2891, 5, 65, 0, 0, 2891, 2892, 5, 82, 0, 0, 2892, 2893, 5, 67, 0, 0, 2893, 2894, 5, 72, 0, 0, 2894, 2895, 5, 65, 0, 0, 2895, 2896, 5, 82, 0, 0, 2896, 574, 1, 0, 0, 0, 2897, 2898, 5, 66, 0, 0, 2898, 2899, 5, 73, 0, 0, 2899, 2900, 5, 78, 0, 0, 2900, 2901, 5, 65, 0, 0, 2901, 2902, 5, 82, 0, 0, 2902, 2903, 5, 89, 0, 0, 2903, 576, 1, 0, 0, 0, 2904, 2905, 5, 86, 0, 0, 2905, 2906, 5, 65, 0, 0, 2906, 2907, 5, 82, 0, 0, 2907, 2908, 5, 66, 0, 0, 2908, 2909, 5, 73, 0, 0, 2909, 2910, 5, 78, 0, 0, 2910, 2911, 5, 65, 0, 0, 2911, 2912, 5, 82, 0, 0, 2912, 2913, 5, 89, 0, 0, 2913, 578, 1, 0, 0, 0, 2914, 2915, 5, 66, 0, 0, 2915, 2916, 5, 89, 0, 0, 2916, 2917, 5, 84, 0, 0, 2917, 2918, 5, 69, 0, 0, 2918, 2919, 5, 83, 0, 0, 2919, 580, 1, 0, 0, 0, 2920, 2921, 5, 68, 0, 0, 2921, 2922, 5, 69, 0, 0, 2922, 2923, 5, 67, 0, 0, 2923, 2924, 5, 73, 0, 0, 2924, 2925, 5, 77, 0, 0, 2925, 2926, 5, 65, 0, 0, 2926, 2927, 5, 76, 0, 0, 2927, 582, 1, 0, 0, 0, 2928, 2929, 5, 68, 0, 0, 2929, 2930, 5, 69, 0, 0, 2930, 2931, 5, 67, 0, 0, 2931, 584, 1, 0, 0, 0, 2932, 2933, 5, 78, 0, 0, 2933, 2934, 5, 85, 0, 0, 2934, 2935, 5, 77, 0, 0, 2935, 2936, 5, 69, 0, 0, 2936, 2937, 5, 82, 0, 0, 2937, 2938, 5, 73, 0, 0, 2938, 2939, 5, 67, 0, 0, 2939, 586, 1, 0, 0, 0, 2940, 2941, 5, 84, 0, 0, 2941, 2942, 5, 73, 0, 0, 2942, 2943, 5, 78, 0, 0, 2943, 2944, 5, 89, 0, 0, 2944, 2945, 5, 73, 0, 0, 2945, 2946, 5, 78, 0, 0, 2946, 2947, 5, 84, 0, 0, 2947, 588, 1, 0, 0, 0, 2948, 2949, 5, 83, 0, 0, 2949, 2950, 5, 77, 0, 0, 2950, 2951, 5, 65, 0, 0, 2951, 2952, 5, 76, 0, 0, 2952, 2953, 5, 76, 0, 0, 2953, 2954, 5, 73, 0, 0, 2954, 2955, 5, 78, 0, 0, 2955, 2956, 5, 84, 0, 0, 2956, 590, 1, 0, 0, 0, 2957, 2958, 5, 73, 0, 0, 2958, 2959, 5, 78, 0, 0, 2959, 2960, 5, 84, 0, 0, 2960, 592, 1, 0, 0, 0, 2961, 2962, 5, 73, 0, 0, 2962, 2963, 5, 78, 0, 0, 2963, 2964, 5, 84, 0, 0, 2964, 2965, 5, 69, 0, 0, 2965, 2966, 5, 71, 0, 0, 2966, 2967, 5, 69, 0, 0, 2967, 2968, 5, 82, 0, 0, 2968, 594, 1, 0, 0, 0, 2969, 2970, 5, 66, 0, 0, 2970, 2971, 5, 73, 0, 0, 2971, 2972, 5, 71, 0, 0, 2972, 2973, 5, 73, 0, 0, 2973, 2974, 5, 78, 0, 0, 2974, 2975, 5, 84, 0, 0, 2975, 596, 1, 0, 0, 0, 2976, 2977, 5, 70, 0, 0, 2977, 2978, 5, 76, 0, 0, 2978, 2979, 5, 79, 0, 0, 2979, 2980, 5, 65, 0, 0, 2980, 2981, 5, 84, 0, 0, 2981, 598, 1, 0, 0, 0, 2982, 2983, 5, 68, 0, 0, 2983, 2984, 5, 79, 0, 0, 2984, 2985, 5, 85, 0, 0, 2985, 2986, 5, 66, 0, 0, 2986, 2987, 5, 76, 0, 0, 2987, 2988, 5, 69, 0, 0, 2988, 600, 1, 0, 0, 0, 2989, 2990, 5, 68, 0, 0, 2990, 2991, 5, 65, 0, 0, 2991, 2992, 5, 84, 0, 0, 2992, 2993, 5, 69, 0, 0, 2993, 602, 1, 0, 0, 0, 2994, 2995, 5, 84, 0, 0, 2995, 2996, 5, 73, 0, 0, 2996, 2997, 5, 77, 0, 0, 2997, 2998, 5, 69, 0, 0, 2998, 604, 1, 0, 0, 0, 2999, 3000, 5, 84, 0, 0, 3000, 3001, 5, 73, 0, 0, 3001, 3002, 5, 77, 0, 0, 3002, 3003, 5, 69, 0, 0, 3003, 3004, 5, 83, 0, 0, 3004, 3005, 5, 84, 0, 0, 3005, 3006, 5, 65, 0, 0, 3006, 3007, 5, 77, 0, 0, 3007, 3008, 5, 80, 0, 0, 3008, 606, 1, 0, 0, 0, 3009, 3010, 5, 84, 0, 0, 3010, 3011, 5, 73, 0, 0, 3011, 3012, 5, 77, 0, 0, 3012, 3013, 5, 69, 0, 0, 3013, 3014, 5, 83, 0, 0, 3014, 3015, 5, 84, 0, 0, 3015, 3016, 5, 65, 0, 0, 3016, 3017, 5, 77, 0, 0, 3017, 3018, 5, 80, 0, 0, 3018, 3019, 5, 95, 0, 0, 3019, 3020, 5, 76, 0, 0, 3020, 3021, 5, 84, 0, 0, 3021, 3022, 5, 90, 0, 0, 3022, 608, 1, 0, 0, 0, 3023, 3024, 5, 77, 0, 0, 3024, 3025, 5, 85, 0, 0, 3025, 3026, 5, 76, 0, 0, 3026, 3027, 5, 84, 0, 0, 3027, 3028, 5, 73, 0, 0, 3028, 3029, 5, 83, 0, 0, 3029, 3030, 5, 69, 0, 0, 3030, 3031, 5, 84, 0, 0, 3031, 610, 1, 0, 0, 0, 3032, 3033, 5, 66, 0, 0, 3033, 3034, 5, 79, 0, 0, 3034, 3035, 5, 79, 0, 0, 3035, 3036, 5, 76, 0, 0, 3036, 3037, 5, 69, 0, 0, 3037, 3038, 5, 65, 0, 0, 3038, 3039, 5, 78, 0, 0, 3039, 612, 1, 0, 0, 0, 3040, 3041, 5, 82, 0, 0, 3041, 3042, 5, 65, 0, 0, 3042, 3043, 5, 87, 0, 0, 3043, 614, 1, 0, 0, 0, 3044, 3045, 5, 82, 0, 0, 3045, 3046, 5, 79, 0, 0, 3046, 3047, 5, 87, 0, 0, 3047, 616, 1, 0, 0, 0, 3048, 3049, 5, 78, 0, 0, 3049, 3050, 5, 85, 0, 0, 3050, 3051, 5, 76, 0, 0, 3051, 3052, 5, 76, 0, 0, 3052, 618, 1, 0, 0, 0, 3053, 3054, 5, 68, 0, 0, 3054, 3055, 5, 65, 0, 0, 3055, 3056, 5, 84, 0, 0, 3056, 3057, 5, 69, 0, 0, 3057, 3058, 5, 84, 0, 0, 3058, 3059, 5, 73, 0, 0, 3059, 3060, 5, 77, 0, 0, 3060, 3061, 5, 69, 0, 0, 3061, 620, 1, 0, 0, 0, 3062, 3063, 5, 61, 0, 0, 3063, 622, 1, 0, 0, 0, 3064, 3065, 5, 62, 0, 0, 3065, 624, 1, 0, 0, 0, 3066, 3067, 5, 60, 0, 0, 3067, 626, 1, 0, 0, 0, 3068, 3069, 5, 33, 0, 0, 3069, 628, 1, 0, 0, 0, 3070, 3071, 5, 126, 0, 0, 3071, 630, 1, 0, 0, 0, 3072, 3073, 5, 124, 0, 0, 3073, 632, 1, 0, 0, 0, 3074, 3075, 5, 38, 0, 0, 3075, 634, 1, 0, 0, 0, 3076, 3077, 5, 94, 0, 0, 3077, 636, 1, 0, 0, 0, 3078, 3079, 5, 46, 0, 0, 3079, 638, 1, 0, 0, 0, 3080, 3081, 5, 91, 0, 0, 3081, 640, 1, 0, 0, 0, 3082, 3083, 5, 93, 0, 0, 3083, 642, 1, 0, 0, 0, 3084, 3085, 5, 40, 0, 0, 3085, 644, 1, 0, 0, 0, 3086, 3087, 5, 41, 0, 0, 3087, 646, 1, 0, 0, 0, 3088, 3089, 5, 123, 0, 0, 3089, 648, 1, 0, 0, 0, 3090, 3091, 5, 125, 0, 0, 3091, 650, 1, 0, 0, 0, 3092, 3093, 5, 44, 0, 0, 3093, 652, 1, 0, 0, 0, 3094, 3095, 5, 59, 0, 0, 3095, 654, 1, 0, 0, 0, 3096, 3097, 5, 64, 0, 0, 3097, 656, 1, 0, 0, 0, 3098, 3099, 5, 39, 0, 0, 3099, 658, 1, 0, 0, 0, 3100, 3101, 5, 34, 0, 0, 3101, 660, 1, 0, 0, 0, 3102, 3103, 5, 96, 0, 0, 3103, 662, 1, 0, 0, 0, 3104, 3105, 5, 58, 0, 0, 3105, 664, 1, 0, 0, 0, 3106, 3107, 5, 42, 0, 0, 3107, 666, 1, 0, 0, 0, 3108, 3109, 5, 95, 0, 0, 3109, 668, 1, 0, 0, 0, 3110, 3111, 5, 45, 0, 0, 3111, 670, 1, 0, 0, 0, 3112, 3113, 5, 43, 0, 0, 3113, 672, 1, 0, 0, 0, 3114, 3115, 5, 37, 0, 0, 3115, 674, 1, 0, 0, 0, 3116, 3117, 5, 124, 0, 0, 3117, 3118, 5, 124, 0, 0, 3118, 676, 1, 0, 0, 0, 3119, 3120, 5, 45, 0, 0, 3120, 3121, 5, 45, 0, 0, 3121, 678, 1, 0, 0, 0, 3122, 3123, 5, 47, 0, 0, 3123, 680, 1, 0, 0, 0, 3124, 3125, 5, 63, 0, 0, 3125, 682, 1, 0, 0, 0, 3126, 3127, 5, 46, 0, 0, 3127, 3128, 3, 705, 352, 0, 3128, 684, 1, 0, 0, 0, 3129, 3133, 3, 711, 355, 0, 3130, 3133, 3, 713, 356, 0, 3131, 3133, 3, 717, 358, 0, 3132, 3129, 1, 0, 0, 0, 3132, 3130, 1, 0, 0, 0, 3132, 3131, 1, 0, 0, 0, 3133, 686, 1, 0, 0, 0, 3134, 3136, 3, 707, 353, 0, 3135, 3134, 1, 0, 0, 0, 3136, 3137, 1, 0, 0, 0, 3137, 3135, 1, 0, 0, 0, 3137, 3138, 1, 0, 0, 0, 3138, 688, 1, 0, 0, 0, 3139, 3141, 3, 707, 353, 0, 3140, 3139, 1, 0, 0, 0, 3141, 3142, 1, 0, 0, 0, 3142, 3140, 1, 0, 0, 0, 3142, 3143, 1, 0, 0, 0, 3143, 3145, 1, 0, 0, 0, 3144, 3140, 1, 0, 0, 0, 3144, 3145, 1, 0, 0, 0, 3145, 3146, 1, 0, 0, 0, 3146, 3148, 5, 46, 0, 0, 3147, 3149, 3, 707, 353, 0, 3148, 3147, 1, 0, 0, 0, 3149, 3150, 1, 0, 0, 0, 3150, 3148, 1, 0, 0, 0, 3150, 3151, 1, 0, 0, 0, 3151, 3183, 1, 0, 0, 0, 3152, 3154, 3, 707, 353, 0, 3153, 3152, 1, 0, 0, 0, 3154, 3155, 1, 0, 0, 0, 3155, 3153, 1, 0, 0, 0, 3155, 3156, 1, 0, 0, 0, 3156, 3157, 1, 0, 0, 0, 3157, 3158, 5, 46, 0, 0, 3158, 3159, 3, 703, 351, 0, 3159, 3183, 1, 0, 0, 0, 3160, 3162, 3, 707, 353, 0, 3161, 3160, 1, 0, 0, 0, 3162, 3163, 1, 0, 0, 0, 3163, 3161, 1, 0, 0, 0, 3163, 3164, 1, 0, 0, 0, 3164, 3166, 1, 0, 0, 0, 3165, 3161, 1, 0, 0, 0, 3165, 3166, 1, 0, 0, 0, 3166, 3167, 1, 0, 0, 0, 3167, 3169, 5, 46, 0, 0, 3168, 3170, 3, 707, 353, 0, 3169, 3168, 1, 0, 0, 0, 3170, 3171, 1, 0, 0, 0, 3171, 3169, 1, 0, 0, 0, 3171, 3172, 1, 0, 0, 0, 3172, 3173, 1, 0, 0, 0, 3173, 3174, 3, 703, 351, 0, 3174, 3183, 1, 0, 0, 0, 3175, 3177, 3, 707, 353, 0, 3176, 3175, 1, 0, 0, 0, 3177, 3178, 1, 0, 0, 0, 3178, 3176, 1, 0, 0, 0, 3178, 3179, 1, 0, 0, 0, 3179, 3180, 1, 0, 0, 0, 3180, 3181, 3, 703, 351, 0, 3181, 3183, 1, 0, 0, 0, 3182, 3144, 1, 0, 0, 0, 3182, 3153, 1, 0, 0, 0, 3182, 3165, 1, 0, 0, 0, 3182, 3176, 1, 0, 0, 0, 3183, 690, 1, 0, 0, 0, 3184, 3185, 3, 715, 357, 0, 3185, 692, 1, 0, 0, 0, 3186, 3187, 3, 705, 352, 0, 3187, 694, 1, 0, 0, 0, 3188, 3189, 3, 699, 349, 0, 3189, 696, 1, 0, 0, 0, 3190, 3191, 5, 61, 0, 0, 3191, 3192, 5, 62, 0, 0, 3192, 698, 1, 0, 0, 0, 3193, 3197, 7, 2, 0, 0, 3194, 3196, 8, 3, 0, 0, 3195, 3194, 1, 0, 0, 0, 3196, 3199, 1, 0, 0, 0, 3197, 3195, 1, 0, 0, 0, 3197, 3198, 1, 0, 0, 0, 3198, 3201, 1, 0, 0, 0, 3199, 3197, 1, 0, 0, 0, 3200, 3193, 1, 0, 0, 0, 3201, 3202, 1, 0, 0, 0, 3202, 3200, 1, 0, 0, 0, 3202, 3203, 1, 0, 0, 0, 3203, 700, 1, 0, 0, 0, 3204, 3212, 5, 96, 0, 0, 3205, 3206, 5, 92, 0, 0, 3206, 3211, 9, 0, 0, 0, 3207, 3208, 5, 96, 0, 0, 3208, 3211, 5, 96, 0, 0, 3209, 3211, 8, 4, 0, 0, 3210, 3205, 1, 0, 0, 0, 3210, 3207, 1, 0, 0, 0, 3210, 3209, 1, 0, 0, 0, 3211, 3214, 1, 0, 0, 0, 3212, 3210, 1, 0, 0, 0, 3212, 3213, 1, 0, 0, 0, 3213, 3215, 1, 0, 0, 0, 3214, 3212, 1, 0, 0, 0, 3215, 3216, 5, 96, 0, 0, 3216, 702, 1, 0, 0, 0, 3217, 3219, 5, 69, 0, 0, 3218, 3220, 7, 5, 0, 0, 3219, 3218, 1, 0, 0, 0, 3219, 3220, 1, 0, 0, 0, 3220, 3222, 1, 0, 0, 0, 3221, 3223, 3, 707, 353, 0, 3222, 3221, 1, 0, 0, 0, 3223, 3224, 1, 0, 0, 0, 3224, 3222, 1, 0, 0, 0, 3224, 3225, 1, 0, 0, 0, 3225, 704, 1, 0, 0, 0, 3226, 3228, 7, 6, 0, 0, 3227, 3226, 1, 0, 0, 0, 3228, 3231, 1, 0, 0, 0, 3229, 3230, 1, 0, 0, 0, 3229, 3227, 1, 0, 0, 0, 3230, 3233, 1, 0, 0, 0, 3231, 3229, 1, 0, 0, 0, 3232, 3234, 7, 7, 0, 0, 3233, 3232, 1, 0, 0, 0, 3234, 3235, 1, 0, 0, 0, 3235, 3236, 1, 0, 0, 0, 3235, 3233, 1, 0, 0, 0, 3236, 3240, 1, 0, 0, 0, 3237, 3239, 7, 6, 0, 0, 3238, 3237, 1, 0, 0, 0, 3239, 3242, 1, 0, 0, 0, 3240, 3238, 1, 0, 0, 0, 3240, 3241, 1, 0, 0, 0, 3241, 706, 1, 0, 0, 0, 3242, 3240, 1, 0, 0, 0, 3243, 3244, 7, 8, 0, 0, 3244, 708, 1, 0, 0, 0, 3245, 3246, 7, 9, 0, 0, 3246, 710, 1, 0, 0, 0, 3247, 3255, 5, 34, 0, 0, 3248, 3249, 5, 92, 0, 0, 3249, 3254, 9, 0, 0, 0, 3250, 3251, 5, 34, 0, 0, 3251, 3254, 5, 34, 0, 0, 3252, 3254, 8, 10, 0, 0, 3253, 3248, 1, 0, 0, 0, 3253, 3250, 1, 0, 0, 0, 3253, 3252, 1, 0, 0, 0, 3254, 3257, 1, 0, 0, 0, 3255, 3253, 1, 0, 0, 0, 3255, 3256, 1, 0, 0, 0, 3256, 3258, 1, 0, 0, 0, 3257, 3255, 1, 0, 0, 0, 3258, 3259, 5, 34, 0, 0, 3259, 712, 1, 0, 0, 0, 3260, 3268, 5, 39, 0, 0, 3261, 3262, 5, 92, 0, 0, 3262, 3267, 9, 0, 0, 0, 3263, 3264, 5, 39, 0, 0, 3264, 3267, 5, 39, 0, 0, 3265, 3267, 8, 11, 0, 0, 3266, 3261, 1, 0, 0, 0, 3266, 3263, 1, 0, 0, 0, 3266, 3265, 1, 0, 0, 0, 3267, 3270, 1, 0, 0, 0, 3268, 3266, 1, 0, 0, 0, 3268, 3269, 1, 0, 0, 0, 3269, 3271, 1, 0, 0, 0, 3270, 3268, 1, 0, 0, 0, 3271, 3272, 5, 39, 0, 0, 3272, 714, 1, 0, 0, 0, 3273, 3274, 5, 66, 0, 0, 3274, 3276, 5, 39, 0, 0, 3275, 3277, 7, 12, 0, 0, 3276, 3275, 1, 0, 0, 0, 3277, 3278, 1, 0, 0, 0, 3278, 3276, 1, 0, 0, 0, 3278, 3279, 1, 0, 0, 0, 3279, 3280, 1, 0, 0, 0, 3280, 3281, 5, 39, 0, 0, 3281, 716, 1, 0, 0, 0, 3282, 3290, 5, 96, 0, 0, 3283, 3284, 5, 92, 0, 0, 3284, 3289, 9, 0, 0, 0, 3285, 3286, 5, 96, 0, 0, 3286, 3289, 5, 96, 0, 0, 3287, 3289, 8, 4, 0, 0, 3288, 3283, 1, 0, 0, 0, 3288, 3285, 1, 0, 0, 0, 3288, 3287, 1, 0, 0, 0, 3289, 3292, 1, 0, 0, 0, 3290, 3288, 1, 0, 0, 0, 3290, 3291, 1, 0, 0, 0, 3291, 3293, 1, 0, 0, 0, 3292, 3290, 1, 0, 0, 0, 3293, 3294, 5, 96, 0, 0, 3294, 718, 1, 0, 0, 0, 37, 0, 722, 732, 743, 748, 752, 756, 762, 766, 768, 3132, 3137, 3142, 3144, 3150, 3155, 3163, 3165, 3171, 3178, 3182, 3197, 3202, 3210, 3212, 3219, 3224, 3229, 3235, 3240, 3253, 3255, 3266, 3268, 3278, 3288, 3290, 1, 0, 1, 0] \ No newline at end of file diff --git a/src/lib/flinksql/FlinkSqlLexer.tokens b/src/lib/flinksql/FlinkSqlLexer.tokens index 2398474..62cec6d 100644 --- a/src/lib/flinksql/FlinkSqlLexer.tokens +++ b/src/lib/flinksql/FlinkSqlLexer.tokens @@ -262,71 +262,91 @@ ENFORCED=261 METADATA=262 VIRTUAL=263 ZONE=264 -STRING=265 -ARRAY=266 -MAP=267 -CHAR=268 -VARCHAR=269 -BINARY=270 -VARBINARY=271 -BYTES=272 -DECIMAL=273 -DEC=274 -NUMERIC=275 -TINYINT=276 -SMALLINT=277 -INT=278 -INTEGER=279 -BIGINT=280 -FLOAT=281 -DOUBLE=282 -DATE=283 -TIME=284 -TIMESTAMP=285 -TIMESTAMP_LTZ=286 -MULTISET=287 -BOOLEAN=288 -RAW=289 -ROW=290 -NULL=291 -DATETIME=292 -EQUAL_SYMBOL=293 -GREATER_SYMBOL=294 -LESS_SYMBOL=295 -EXCLAMATION_SYMBOL=296 -BIT_NOT_OP=297 -BIT_OR_OP=298 -BIT_AND_OP=299 -BIT_XOR_OP=300 -DOT=301 -LS_BRACKET=302 -RS_BRACKET=303 -LR_BRACKET=304 -RR_BRACKET=305 -COMMA=306 -SEMICOLON=307 -AT_SIGN=308 -SINGLE_QUOTE_SYMB=309 -DOUBLE_QUOTE_SYMB=310 -REVERSE_QUOTE_SYMB=311 -COLON_SYMB=312 -ASTERISK_SIGN=313 -UNDERLINE_SIGN=314 -HYPNEN_SIGN=315 -ADD_SIGN=316 -PENCENT_SIGN=317 -DOUBLE_VERTICAL_SIGN=318 -DOUBLE_HYPNEN_SIGN=319 -SLASH_SIGN=320 -DOT_ID=321 -PLUS_DOT_ID=322 -STRING_LITERAL=323 -DIG_LITERAL=324 -REAL_LITERAL=325 -BIT_STRING=326 -ID_LITERAL=327 -PLUS_ID_LITERAL=328 -FILE_PATH=329 +TUMBLE=265 +HOP=266 +CUMULATE=267 +DESCRIPTOR=268 +TIMECOL=269 +SIZE=270 +OFFSET=271 +STEP=272 +SLIDE=273 +SESSION=274 +MATCH_RECOGNIZE=275 +MEASURES=276 +PATTERN=277 +ONE=278 +PER=279 +KW_SKIP=280 +PAST=281 +DEFINE=282 +STRING=283 +ARRAY=284 +MAP=285 +CHAR=286 +VARCHAR=287 +BINARY=288 +VARBINARY=289 +BYTES=290 +DECIMAL=291 +DEC=292 +NUMERIC=293 +TINYINT=294 +SMALLINT=295 +INT=296 +INTEGER=297 +BIGINT=298 +FLOAT=299 +DOUBLE=300 +DATE=301 +TIME=302 +TIMESTAMP=303 +TIMESTAMP_LTZ=304 +MULTISET=305 +BOOLEAN=306 +RAW=307 +ROW=308 +NULL=309 +DATETIME=310 +EQUAL_SYMBOL=311 +GREATER_SYMBOL=312 +LESS_SYMBOL=313 +EXCLAMATION_SYMBOL=314 +BIT_NOT_OP=315 +BIT_OR_OP=316 +BIT_AND_OP=317 +BIT_XOR_OP=318 +DOT=319 +LS_BRACKET=320 +RS_BRACKET=321 +LR_BRACKET=322 +RR_BRACKET=323 +LB_BRACKET=324 +RB_BRACKET=325 +COMMA=326 +SEMICOLON=327 +AT_SIGN=328 +SINGLE_QUOTE_SYMB=329 +DOUBLE_QUOTE_SYMB=330 +REVERSE_QUOTE_SYMB=331 +COLON_SYMB=332 +ASTERISK_SIGN=333 +UNDERLINE_SIGN=334 +HYPNEN_SIGN=335 +ADD_SIGN=336 +PENCENT_SIGN=337 +DOUBLE_VERTICAL_SIGN=338 +DOUBLE_HYPNEN_SIGN=339 +SLASH_SIGN=340 +QUESTION_MARK_SIGN=341 +DOT_ID=342 +STRING_LITERAL=343 +DIG_LITERAL=344 +REAL_LITERAL=345 +BIT_STRING=346 +ID_LITERAL=347 +FILE_PATH=348 +DOUBLE_ARROW=349 'SELECT'=4 'FROM'=5 'ADD'=6 @@ -588,59 +608,81 @@ FILE_PATH=329 'METADATA'=262 'VIRTUAL'=263 'ZONE'=264 -'STRING'=265 -'ARRAY'=266 -'MAP'=267 -'CHAR'=268 -'VARCHAR'=269 -'BINARY'=270 -'VARBINARY'=271 -'BYTES'=272 -'DECIMAL'=273 -'DEC'=274 -'NUMERIC'=275 -'TINYINT'=276 -'SMALLINT'=277 -'INT'=278 -'INTEGER'=279 -'BIGINT'=280 -'FLOAT'=281 -'DOUBLE'=282 -'DATE'=283 -'TIME'=284 -'TIMESTAMP'=285 -'TIMESTAMP_LTZ'=286 -'MULTISET'=287 -'BOOLEAN'=288 -'RAW'=289 -'ROW'=290 -'NULL'=291 -'DATETIME'=292 -'='=293 -'>'=294 -'<'=295 -'!'=296 -'~'=297 -'|'=298 -'&'=299 -'^'=300 -'.'=301 -'['=302 -']'=303 -'('=304 -')'=305 -','=306 -';'=307 -'@'=308 -'\''=309 -'"'=310 -'`'=311 -':'=312 -'*'=313 -'_'=314 -'-'=315 -'+'=316 -'%'=317 -'||'=318 -'--'=319 -'/'=320 +'TUMBLE'=265 +'HOP'=266 +'CUMULATE'=267 +'DESCRIPTOR'=268 +'TIMECOL'=269 +'SIZE'=270 +'OFFSET'=271 +'STEP'=272 +'SLIDE'=273 +'SESSION'=274 +'MATCH_RECOGNIZE'=275 +'MEASURES'=276 +'PATTERN'=277 +'ONE'=278 +'PER'=279 +'SKIP'=280 +'PAST'=281 +'DEFINE'=282 +'STRING'=283 +'ARRAY'=284 +'MAP'=285 +'CHAR'=286 +'VARCHAR'=287 +'BINARY'=288 +'VARBINARY'=289 +'BYTES'=290 +'DECIMAL'=291 +'DEC'=292 +'NUMERIC'=293 +'TINYINT'=294 +'SMALLINT'=295 +'INT'=296 +'INTEGER'=297 +'BIGINT'=298 +'FLOAT'=299 +'DOUBLE'=300 +'DATE'=301 +'TIME'=302 +'TIMESTAMP'=303 +'TIMESTAMP_LTZ'=304 +'MULTISET'=305 +'BOOLEAN'=306 +'RAW'=307 +'ROW'=308 +'NULL'=309 +'DATETIME'=310 +'='=311 +'>'=312 +'<'=313 +'!'=314 +'~'=315 +'|'=316 +'&'=317 +'^'=318 +'.'=319 +'['=320 +']'=321 +'('=322 +')'=323 +'{'=324 +'}'=325 +','=326 +';'=327 +'@'=328 +'\''=329 +'"'=330 +'`'=331 +':'=332 +'*'=333 +'_'=334 +'-'=335 +'+'=336 +'%'=337 +'||'=338 +'--'=339 +'/'=340 +'?'=341 +'=>'=349 diff --git a/src/lib/flinksql/FlinkSqlLexer.ts b/src/lib/flinksql/FlinkSqlLexer.ts index 664eb7b..7f2af18 100644 --- a/src/lib/flinksql/FlinkSqlLexer.ts +++ b/src/lib/flinksql/FlinkSqlLexer.ts @@ -1,4 +1,4 @@ -// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/flinksql/FlinkSqlLexer.g4 by ANTLR 4.12.0 +// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlLexer.g4 by ANTLR 4.12.0 // noinspection ES6UnusedImports,JSUnusedGlobalSymbols,JSUnusedLocalSymbols import { ATN, @@ -276,71 +276,91 @@ export default class FlinkSqlLexer extends Lexer { public static readonly METADATA = 262; public static readonly VIRTUAL = 263; public static readonly ZONE = 264; - public static readonly STRING = 265; - public static readonly ARRAY = 266; - public static readonly MAP = 267; - public static readonly CHAR = 268; - public static readonly VARCHAR = 269; - public static readonly BINARY = 270; - public static readonly VARBINARY = 271; - public static readonly BYTES = 272; - public static readonly DECIMAL = 273; - public static readonly DEC = 274; - public static readonly NUMERIC = 275; - public static readonly TINYINT = 276; - public static readonly SMALLINT = 277; - public static readonly INT = 278; - public static readonly INTEGER = 279; - public static readonly BIGINT = 280; - public static readonly FLOAT = 281; - public static readonly DOUBLE = 282; - public static readonly DATE = 283; - public static readonly TIME = 284; - public static readonly TIMESTAMP = 285; - public static readonly TIMESTAMP_LTZ = 286; - public static readonly MULTISET = 287; - public static readonly BOOLEAN = 288; - public static readonly RAW = 289; - public static readonly ROW = 290; - public static readonly NULL = 291; - public static readonly DATETIME = 292; - public static readonly EQUAL_SYMBOL = 293; - public static readonly GREATER_SYMBOL = 294; - public static readonly LESS_SYMBOL = 295; - public static readonly EXCLAMATION_SYMBOL = 296; - public static readonly BIT_NOT_OP = 297; - public static readonly BIT_OR_OP = 298; - public static readonly BIT_AND_OP = 299; - public static readonly BIT_XOR_OP = 300; - public static readonly DOT = 301; - public static readonly LS_BRACKET = 302; - public static readonly RS_BRACKET = 303; - public static readonly LR_BRACKET = 304; - public static readonly RR_BRACKET = 305; - public static readonly COMMA = 306; - public static readonly SEMICOLON = 307; - public static readonly AT_SIGN = 308; - public static readonly SINGLE_QUOTE_SYMB = 309; - public static readonly DOUBLE_QUOTE_SYMB = 310; - public static readonly REVERSE_QUOTE_SYMB = 311; - public static readonly COLON_SYMB = 312; - public static readonly ASTERISK_SIGN = 313; - public static readonly UNDERLINE_SIGN = 314; - public static readonly HYPNEN_SIGN = 315; - public static readonly ADD_SIGN = 316; - public static readonly PENCENT_SIGN = 317; - public static readonly DOUBLE_VERTICAL_SIGN = 318; - public static readonly DOUBLE_HYPNEN_SIGN = 319; - public static readonly SLASH_SIGN = 320; - public static readonly DOT_ID = 321; - public static readonly PLUS_DOT_ID = 322; - public static readonly STRING_LITERAL = 323; - public static readonly DIG_LITERAL = 324; - public static readonly REAL_LITERAL = 325; - public static readonly BIT_STRING = 326; - public static readonly ID_LITERAL = 327; - public static readonly PLUS_ID_LITERAL = 328; - public static readonly FILE_PATH = 329; + public static readonly TUMBLE = 265; + public static readonly HOP = 266; + public static readonly CUMULATE = 267; + public static readonly DESCRIPTOR = 268; + public static readonly TIMECOL = 269; + public static readonly SIZE = 270; + public static readonly OFFSET = 271; + public static readonly STEP = 272; + public static readonly SLIDE = 273; + public static readonly SESSION = 274; + public static readonly MATCH_RECOGNIZE = 275; + public static readonly MEASURES = 276; + public static readonly PATTERN = 277; + public static readonly ONE = 278; + public static readonly PER = 279; + public static readonly KW_SKIP = 280; + public static readonly PAST = 281; + public static readonly DEFINE = 282; + public static readonly STRING = 283; + public static readonly ARRAY = 284; + public static readonly MAP = 285; + public static readonly CHAR = 286; + public static readonly VARCHAR = 287; + public static readonly BINARY = 288; + public static readonly VARBINARY = 289; + public static readonly BYTES = 290; + public static readonly DECIMAL = 291; + public static readonly DEC = 292; + public static readonly NUMERIC = 293; + public static readonly TINYINT = 294; + public static readonly SMALLINT = 295; + public static readonly INT = 296; + public static readonly INTEGER = 297; + public static readonly BIGINT = 298; + public static readonly FLOAT = 299; + public static readonly DOUBLE = 300; + public static readonly DATE = 301; + public static readonly TIME = 302; + public static readonly TIMESTAMP = 303; + public static readonly TIMESTAMP_LTZ = 304; + public static readonly MULTISET = 305; + public static readonly BOOLEAN = 306; + public static readonly RAW = 307; + public static readonly ROW = 308; + public static readonly NULL = 309; + public static readonly DATETIME = 310; + public static readonly EQUAL_SYMBOL = 311; + public static readonly GREATER_SYMBOL = 312; + public static readonly LESS_SYMBOL = 313; + public static readonly EXCLAMATION_SYMBOL = 314; + public static readonly BIT_NOT_OP = 315; + public static readonly BIT_OR_OP = 316; + public static readonly BIT_AND_OP = 317; + public static readonly BIT_XOR_OP = 318; + public static readonly DOT = 319; + public static readonly LS_BRACKET = 320; + public static readonly RS_BRACKET = 321; + public static readonly LR_BRACKET = 322; + public static readonly RR_BRACKET = 323; + public static readonly LB_BRACKET = 324; + public static readonly RB_BRACKET = 325; + public static readonly COMMA = 326; + public static readonly SEMICOLON = 327; + public static readonly AT_SIGN = 328; + public static readonly SINGLE_QUOTE_SYMB = 329; + public static readonly DOUBLE_QUOTE_SYMB = 330; + public static readonly REVERSE_QUOTE_SYMB = 331; + public static readonly COLON_SYMB = 332; + public static readonly ASTERISK_SIGN = 333; + public static readonly UNDERLINE_SIGN = 334; + public static readonly HYPNEN_SIGN = 335; + public static readonly ADD_SIGN = 336; + public static readonly PENCENT_SIGN = 337; + public static readonly DOUBLE_VERTICAL_SIGN = 338; + public static readonly DOUBLE_HYPNEN_SIGN = 339; + public static readonly SLASH_SIGN = 340; + public static readonly QUESTION_MARK_SIGN = 341; + public static readonly DOT_ID = 342; + public static readonly STRING_LITERAL = 343; + public static readonly DIG_LITERAL = 344; + public static readonly REAL_LITERAL = 345; + public static readonly BIT_STRING = 346; + public static readonly ID_LITERAL = 347; + public static readonly FILE_PATH = 348; + public static readonly DOUBLE_ARROW = 349; public static readonly EOF = Token.EOF; public static readonly channelNames: string[] = [ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" ]; @@ -469,16 +489,25 @@ export default class FlinkSqlLexer extends Lexer { "'KEY'", "'PERIOD'", "'SYSTEM_TIME'", "'ENFORCED'", "'METADATA'", "'VIRTUAL'", - "'ZONE'", "'STRING'", - "'ARRAY'", "'MAP'", "'CHAR'", - "'VARCHAR'", "'BINARY'", - "'VARBINARY'", "'BYTES'", - "'DECIMAL'", "'DEC'", - "'NUMERIC'", "'TINYINT'", - "'SMALLINT'", "'INT'", - "'INTEGER'", "'BIGINT'", - "'FLOAT'", "'DOUBLE'", - "'DATE'", "'TIME'", "'TIMESTAMP'", + "'ZONE'", "'TUMBLE'", + "'HOP'", "'CUMULATE'", + "'DESCRIPTOR'", "'TIMECOL'", + "'SIZE'", "'OFFSET'", + "'STEP'", "'SLIDE'", + "'SESSION'", "'MATCH_RECOGNIZE'", + "'MEASURES'", "'PATTERN'", + "'ONE'", "'PER'", "'SKIP'", + "'PAST'", "'DEFINE'", + "'STRING'", "'ARRAY'", + "'MAP'", "'CHAR'", "'VARCHAR'", + "'BINARY'", "'VARBINARY'", + "'BYTES'", "'DECIMAL'", + "'DEC'", "'NUMERIC'", + "'TINYINT'", "'SMALLINT'", + "'INT'", "'INTEGER'", + "'BIGINT'", "'FLOAT'", + "'DOUBLE'", "'DATE'", + "'TIME'", "'TIMESTAMP'", "'TIMESTAMP_LTZ'", "'MULTISET'", "'BOOLEAN'", "'RAW'", "'ROW'", "'NULL'", "'DATETIME'", @@ -486,12 +515,15 @@ export default class FlinkSqlLexer extends Lexer { "'!'", "'~'", "'|'", "'&'", "'^'", "'.'", "'['", "']'", "'('", - "')'", "','", "';'", - "'@'", "'''", "'\"'", - "'`'", "':'", "'*'", - "'_'", "'-'", "'+'", - "'%'", "'||'", "'--'", - "'/'" ]; + "')'", "'{'", "'}'", + "','", "';'", "'@'", + "'''", "'\"'", "'`'", + "':'", "'*'", "'_'", + "'-'", "'+'", "'%'", + "'||'", "'--'", "'/'", + "'?'", null, null, null, + null, null, null, null, + "'=>'" ]; public static readonly symbolicNames: string[] = [ null, "SPACE", "COMMENT_INPUT", "LINE_COMMENT", "SELECT", "FROM", "ADD", "AS", @@ -601,14 +633,21 @@ export default class FlinkSqlLexer extends Lexer { "UNIQUE", "KEY", "PERIOD", "SYSTEM_TIME", "ENFORCED", "METADATA", "VIRTUAL", - "ZONE", "STRING", "ARRAY", - "MAP", "CHAR", "VARCHAR", - "BINARY", "VARBINARY", - "BYTES", "DECIMAL", - "DEC", "NUMERIC", "TINYINT", - "SMALLINT", "INT", "INTEGER", - "BIGINT", "FLOAT", "DOUBLE", - "DATE", "TIME", "TIMESTAMP", + "ZONE", "TUMBLE", "HOP", + "CUMULATE", "DESCRIPTOR", + "TIMECOL", "SIZE", "OFFSET", + "STEP", "SLIDE", "SESSION", + "MATCH_RECOGNIZE", "MEASURES", + "PATTERN", "ONE", "PER", + "KW_SKIP", "PAST", "DEFINE", + "STRING", "ARRAY", "MAP", + "CHAR", "VARCHAR", "BINARY", + "VARBINARY", "BYTES", + "DECIMAL", "DEC", "NUMERIC", + "TINYINT", "SMALLINT", + "INT", "INTEGER", "BIGINT", + "FLOAT", "DOUBLE", "DATE", + "TIME", "TIMESTAMP", "TIMESTAMP_LTZ", "MULTISET", "BOOLEAN", "RAW", "ROW", "NULL", "DATETIME", @@ -618,7 +657,8 @@ export default class FlinkSqlLexer extends Lexer { "BIT_AND_OP", "BIT_XOR_OP", "DOT", "LS_BRACKET", "RS_BRACKET", "LR_BRACKET", - "RR_BRACKET", "COMMA", + "RR_BRACKET", "LB_BRACKET", + "RB_BRACKET", "COMMA", "SEMICOLON", "AT_SIGN", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", @@ -628,11 +668,11 @@ export default class FlinkSqlLexer extends Lexer { "ADD_SIGN", "PENCENT_SIGN", "DOUBLE_VERTICAL_SIGN", "DOUBLE_HYPNEN_SIGN", - "SLASH_SIGN", "DOT_ID", - "PLUS_DOT_ID", "STRING_LITERAL", + "SLASH_SIGN", "QUESTION_MARK_SIGN", + "DOT_ID", "STRING_LITERAL", "DIG_LITERAL", "REAL_LITERAL", "BIT_STRING", "ID_LITERAL", - "PLUS_ID_LITERAL", "FILE_PATH" ]; + "FILE_PATH", "DOUBLE_ARROW" ]; public static readonly modeNames: string[] = [ "DEFAULT_MODE", ]; public static readonly ruleNames: string[] = [ @@ -673,20 +713,23 @@ export default class FlinkSqlLexer extends Lexer { "PYTHON_REQUIREMENTS", "PYTHON_DEPENDENCIES", "PYTHON_JAR", "PYTHON_ARCHIVES", "PYTHON_PARAMETER", "ENGINE", "CATALOGS", "VIEWS", "JARS", "PRIMARY", "UNIQUE", "KEY", "PERIOD", "SYSTEM_TIME", "ENFORCED", "METADATA", "VIRTUAL", - "ZONE", "STRING", "ARRAY", "MAP", "CHAR", "VARCHAR", "BINARY", "VARBINARY", - "BYTES", "DECIMAL", "DEC", "NUMERIC", "TINYINT", "SMALLINT", "INT", "INTEGER", - "BIGINT", "FLOAT", "DOUBLE", "DATE", "TIME", "TIMESTAMP", "TIMESTAMP_LTZ", - "MULTISET", "BOOLEAN", "RAW", "ROW", "NULL", "DATETIME", "EQUAL_SYMBOL", - "GREATER_SYMBOL", "LESS_SYMBOL", "EXCLAMATION_SYMBOL", "BIT_NOT_OP", "BIT_OR_OP", - "BIT_AND_OP", "BIT_XOR_OP", "DOT", "LS_BRACKET", "RS_BRACKET", "LR_BRACKET", - "RR_BRACKET", "COMMA", "SEMICOLON", "AT_SIGN", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", + "ZONE", "TUMBLE", "HOP", "CUMULATE", "DESCRIPTOR", "TIMECOL", "SIZE", + "OFFSET", "STEP", "SLIDE", "SESSION", "MATCH_RECOGNIZE", "MEASURES", "PATTERN", + "ONE", "PER", "KW_SKIP", "PAST", "DEFINE", "STRING", "ARRAY", "MAP", "CHAR", + "VARCHAR", "BINARY", "VARBINARY", "BYTES", "DECIMAL", "DEC", "NUMERIC", + "TINYINT", "SMALLINT", "INT", "INTEGER", "BIGINT", "FLOAT", "DOUBLE", + "DATE", "TIME", "TIMESTAMP", "TIMESTAMP_LTZ", "MULTISET", "BOOLEAN", "RAW", + "ROW", "NULL", "DATETIME", "EQUAL_SYMBOL", "GREATER_SYMBOL", "LESS_SYMBOL", + "EXCLAMATION_SYMBOL", "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", + "DOT", "LS_BRACKET", "RS_BRACKET", "LR_BRACKET", "RR_BRACKET", "LB_BRACKET", + "RB_BRACKET", "COMMA", "SEMICOLON", "AT_SIGN", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", "REVERSE_QUOTE_SYMB", "COLON_SYMB", "ASTERISK_SIGN", "UNDERLINE_SIGN", "HYPNEN_SIGN", "ADD_SIGN", "PENCENT_SIGN", "DOUBLE_VERTICAL_SIGN", "DOUBLE_HYPNEN_SIGN", - "SLASH_SIGN", "DOT_ID", "PLUS_DOT_ID", "STRING_LITERAL", "DIG_LITERAL", - "REAL_LITERAL", "BIT_STRING", "ID_LITERAL", "PLUS_ID_LITERAL", "FILE_PATH", + "SLASH_SIGN", "QUESTION_MARK_SIGN", "DOT_ID", "STRING_LITERAL", "DIG_LITERAL", + "REAL_LITERAL", "BIT_STRING", "ID_LITERAL", "FILE_PATH", "DOUBLE_ARROW", "FILE_PATH_STRING", "JAR_FILE_PARTTARN", "EXPONENT_NUM_PART", "ID_LITERAL_FRAG", - "PLUS_ID_LITERAL_FRAG", "DEC_DIGIT", "DEC_LETTER", "DQUOTA_STRING", "SQUOTA_STRING", - "BIT_STRING_L", "BQUOTA_STRING", + "DEC_DIGIT", "DEC_LETTER", "DQUOTA_STRING", "SQUOTA_STRING", "BIT_STRING_L", + "BQUOTA_STRING", ]; @@ -707,7 +750,7 @@ export default class FlinkSqlLexer extends Lexer { public get modeNames(): string[] { return FlinkSqlLexer.modeNames; } - public static readonly _serializedATN: number[] = [4,0,329,3142,6,-1,2, + public static readonly _serializedATN: number[] = [4,0,349,3295,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, @@ -761,1030 +804,1081 @@ export default class FlinkSqlLexer extends Lexer { 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,5,1,693,8,1,10,1,12,1,696,9,1,1,1,1,1,1,1,1,1,1,1,1,2, - 1,2,1,2,3,2,706,8,2,1,2,5,2,709,8,2,10,2,12,2,712,9,2,1,2,3,2,715,8,2,1, - 2,1,2,3,2,719,8,2,1,2,1,2,1,2,1,2,3,2,725,8,2,1,2,1,2,3,2,729,8,2,3,2,731, - 8,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5, - 1,5,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9, - 1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11, - 1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1, - 14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16, - 1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1, - 19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,21,1,21,1,21,1,22,1,22,1,22,1,22, - 1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1, - 26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28, - 1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,30,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,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34, - 1,34,1,34,1,35,1,35,1,35,1,35,1,35,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,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39, - 1,39,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1, - 42,1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45, - 1,45,1,45,1,45,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,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50, - 1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1, - 53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,55, - 1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,57,1, - 57,1,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,60,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1, - 62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,63, - 1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,65,1, - 65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1,67, - 1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,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,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,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,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,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,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,81,1,81,1,81,1,81,1, - 81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83, - 1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,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,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,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,91,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1, - 94,1,94,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,97,1,97,1,97,1,97,1,97,1,97,1,97,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,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,103,1,103,1, - 103,1,103,1,103,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,106,1,106,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,107,1,107,1,108,1, - 108,1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1, - 109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,111,1, - 111,1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1, - 113,1,113,1,113,1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114,1,114,1, - 114,1,114,1,114,1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116,1, - 116,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,1,118,1,118,1, - 119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1, - 120,1,120,1,120,1,120,1,120,1,120,1,120,1,121,1,121,1,121,1,121,1,121,1, - 121,1,121,1,121,1,121,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,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,126,1,126,1,126,1,126,1,126,1,126,1, - 126,1,126,1,126,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,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,131,1,131,1,131,1,131,1,132,1,132,1,132,1, - 132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,133,1,133,1,133,1,133,1, - 133,1,133,1,133,1,134,1,134,1,134,1,134,1,135,1,135,1,135,1,136,1,136,1, - 136,1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,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,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,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,142,1,142,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,144,1,144,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1, - 145,1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146,1,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,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,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,151,1,152,1,152,1,152,1,152,1,152,1,153,1,153,1,153,1, - 153,1,153,1,153,1,153,1,153,1,154,1,154,1,154,1,154,1,154,1,154,1,155,1, - 155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,156,1, - 156,1,156,1,156,1,156,1,156,1,156,1,157,1,157,1,157,1,157,1,157,1,157,1, - 157,1,157,1,157,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,159,1, - 159,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160,1,160,1,160,1,161,1, - 161,1,161,1,161,1,161,1,161,1,161,1,161,1,162,1,162,1,162,1,162,1,162,1, - 163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,164,1,164,1, - 164,1,164,1,164,1,164,1,164,1,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,167,1, - 167,1,167,1,167,1,167,1,167,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1, - 168,1,168,1,168,1,168,1,168,1,168,1,168,1,169,1,169,1,169,1,169,1,169,1, - 169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,170,1,170,1,170,1,170,1, - 170,1,170,1,170,1,170,1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,172,1, - 172,1,172,1,172,1,172,1,172,1,172,1,173,1,173,1,173,1,173,1,173,1,173,1, - 173,1,173,1,173,1,173,1,173,1,173,1,174,1,174,1,174,1,174,1,174,1,174,1, - 174,1,174,1,174,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1, - 176,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,177,1,177,1,177,1,177,1, - 177,1,177,1,177,1,177,1,177,1,177,1,178,1,178,1,178,1,178,1,178,1,178,1, - 178,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179,1,179,1,180,1, - 180,1,180,1,180,1,180,1,180,1,180,1,180,1,181,1,181,1,181,1,181,1,181,1, - 181,1,181,1,181,1,181,1,181,1,181,1,181,1,182,1,182,1,182,1,182,1,182,1, - 182,1,182,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,184,1,184,1, - 184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,185,1,185,1,185,1, - 185,1,185,1,185,1,185,1,185,1,185,1,186,1,186,1,186,1,186,1,186,1,186,1, - 186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187,1,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,189,1,189,1, - 189,1,189,1,189,1,189,1,189,1,190,1,190,1,190,1,190,1,190,1,190,1,190,1, - 190,1,190,1,190,1,190,1,190,1,190,1,191,1,191,1,191,1,191,1,191,1,191,1, - 191,1,191,1,191,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1, - 192,1,193,1,193,1,193,1,193,1,194,1,194,1,194,1,194,1,194,1,194,1,194,1, - 194,1,194,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,196,1,196,1, - 196,1,196,1,196,1,196,1,196,1,196,1,197,1,197,1,197,1,197,1,197,1,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,200,1,200,1, - 200,1,200,1,200,1,200,1,200,1,200,1,200,1,201,1,201,1,201,1,201,1,201,1, - 201,1,201,1,201,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,203,1,203,1, - 203,1,203,1,203,1,203,1,204,1,204,1,204,1,204,1,204,1,205,1,205,1,205,1, - 205,1,205,1,205,1,205,1,206,1,206,1,206,1,206,1,206,1,207,1,207,1,207,1, - 207,1,207,1,207,1,207,1,208,1,208,1,208,1,208,1,208,1,208,1,208,1,208,1, - 209,1,209,1,209,1,209,1,209,1,209,1,209,1,210,1,210,1,210,1,210,1,210,1, - 210,1,210,1,211,1,211,1,211,1,211,1,211,1,212,1,212,1,212,1,212,1,212,1, - 212,1,212,1,213,1,213,1,213,1,213,1,213,1,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, - 215,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1, - 217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1, - 217,1,218,1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219,1,219,1,219,1, - 219,1,219,1,219,1,220,1,220,1,220,1,220,1,220,1,220,1,221,1,221,1,221,1, - 221,1,221,1,221,1,221,1,222,1,222,1,222,1,222,1,222,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,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,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,230,1,230,1,230,1, - 231,1,231,1,231,1,231,1,231,1,231,1,231,1,232,1,232,1,232,1,232,1,232,1, - 232,1,232,1,232,1,232,1,232,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1, - 233,1,233,1,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,237,1,237,1,237,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,239,1,240,1,240,1,240,1,240,1,240,1,241,1,241,1, - 241,1,241,1,241,1,241,1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,243,1, - 243,1,243,1,243,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,245,1,246,1,246,1,246,1, + 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,1,0,4,0,721,8,0,11,0,12, + 0,722,1,0,1,0,1,1,1,1,1,1,1,1,5,1,731,8,1,10,1,12,1,734,9,1,1,1,1,1,1,1, + 1,1,1,1,1,2,1,2,1,2,3,2,744,8,2,1,2,5,2,747,8,2,10,2,12,2,750,9,2,1,2,3, + 2,753,8,2,1,2,1,2,3,2,757,8,2,1,2,1,2,1,2,1,2,3,2,763,8,2,1,2,1,2,3,2,767, + 8,2,3,2,769,8,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4, + 1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,9,1,9,1,9, + 1,9,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1, + 11,1,11,1,11,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, + 1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1, + 16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18, + 1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,21,1,21,1,21,1,22,1, + 22,1,22,1,22,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,26,1,26, + 1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1, + 28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,30,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,33,1,33,1,33,1,33,1,33,1, + 33,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35,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,38,1,38,1,38,1,38,1,38,1,39,1, + 39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42, + 1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1, + 45,1,45,1,45,1,45,1,45,1,45,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,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,50,1, + 50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52, + 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,55,1,55,1,55,1, + 55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57, + 1,57,1,57,1,57,1,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,60,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61, + 1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1, + 63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64, + 1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1, + 66,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,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,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,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,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,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,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,81,1,81, + 1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1, + 83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,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,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,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,91,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,94, + 1,94,1,94,1,94,1,94,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,97,1,97,1,97,1,97,1,97,1,97,1,97,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,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, + 103,1,103,1,103,1,103,1,103,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,106,1,106,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,107,1, + 107,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1, + 109,1,109,1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1, + 110,1,111,1,111,1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1, + 112,1,112,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,114,1,114,1,114,1, + 114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,116,1,116,1,116,1, + 116,1,116,1,116,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,1, + 118,1,118,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1, + 119,1,119,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,121,1,121,1,121,1, + 121,1,121,1,121,1,121,1,121,1,121,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,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,126,1,126,1,126,1,126,1, + 126,1,126,1,126,1,126,1,126,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,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,131,1,131,1,131,1,131,1,132,1, + 132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,133,1,133,1, + 133,1,133,1,133,1,133,1,133,1,134,1,134,1,134,1,134,1,135,1,135,1,135,1, + 136,1,136,1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,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, + 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,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,142,1,142,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,144,1,144,1,145,1,145,1,145,1,145,1,145,1, + 145,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146,1,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,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,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,151,1,152,1,152,1,152,1,152,1,152,1,153,1, + 153,1,153,1,153,1,153,1,153,1,153,1,153,1,154,1,154,1,154,1,154,1,154,1, + 154,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,156,1, + 156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,157,1,157,1,157,1,157,1, + 157,1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1, + 158,1,159,1,159,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160,1,160,1, + 160,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,162,1,162,1,162,1, + 162,1,162,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1, + 164,1,164,1,164,1,164,1,164,1,164,1,164,1,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,167,1,167,1,167,1,167,1,167,1,167,1,168,1,168,1,168,1,168,1,168,1, + 168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,169,1,169,1,169,1, + 169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,170,1,170,1, + 170,1,170,1,170,1,170,1,170,1,170,1,171,1,171,1,171,1,171,1,171,1,171,1, + 171,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,173,1,173,1,173,1,173,1, + 173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,174,1,174,1,174,1,174,1, + 174,1,174,1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1, + 175,1,175,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,177,1,177,1, + 177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,178,1,178,1,178,1,178,1, + 178,1,178,1,178,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179,1, + 179,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,181,1,181,1,181,1, + 181,1,181,1,181,1,181,1,181,1,181,1,181,1,181,1,181,1,182,1,182,1,182,1, + 182,1,182,1,182,1,182,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1, + 184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,185,1, + 185,1,185,1,185,1,185,1,185,1,185,1,185,1,185,1,186,1,186,1,186,1,186,1, + 186,1,186,1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187,1,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, + 189,1,189,1,189,1,189,1,189,1,189,1,189,1,190,1,190,1,190,1,190,1,190,1, + 190,1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,191,1,191,1,191,1,191,1, + 191,1,191,1,191,1,191,1,191,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1, + 192,1,192,1,192,1,193,1,193,1,193,1,193,1,194,1,194,1,194,1,194,1,194,1, + 194,1,194,1,194,1,194,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1, + 196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,197,1,197,1,197,1,197,1, + 197,1,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, + 200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,201,1,201,1,201,1, + 201,1,201,1,201,1,201,1,201,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1, + 203,1,203,1,203,1,203,1,203,1,203,1,204,1,204,1,204,1,204,1,204,1,205,1, + 205,1,205,1,205,1,205,1,205,1,205,1,206,1,206,1,206,1,206,1,206,1,207,1, + 207,1,207,1,207,1,207,1,207,1,207,1,208,1,208,1,208,1,208,1,208,1,208,1, + 208,1,208,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,210,1,210,1,210,1, + 210,1,210,1,210,1,210,1,211,1,211,1,211,1,211,1,211,1,212,1,212,1,212,1, + 212,1,212,1,212,1,212,1,213,1,213,1,213,1,213,1,213,1,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,215,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1, + 216,1,216,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1, + 217,1,217,1,217,1,218,1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219,1, + 219,1,219,1,219,1,219,1,219,1,220,1,220,1,220,1,220,1,220,1,220,1,221,1, + 221,1,221,1,221,1,221,1,221,1,221,1,222,1,222,1,222,1,222,1,222,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, + 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,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,230,1, + 230,1,230,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,232,1,232,1,232,1, + 232,1,232,1,232,1,232,1,232,1,232,1,232,1,233,1,233,1,233,1,233,1,233,1, + 233,1,233,1,233,1,233,1,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,237,1,237,1,237,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,239,1,240,1,240,1,240,1,240,1,240,1, + 241,1,241,1,241,1,241,1,241,1,241,1,242,1,242,1,242,1,242,1,242,1,242,1, + 242,1,243,1,243,1,243,1,243,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,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,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, + 246,1,246,1,246,1,246,1,246,1,246,1,246,1,247,1,247,1,247,1,247,1,247,1, 247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1, - 247,1,248,1,248,1,248,1,248,1,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,249,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,250,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,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,254,1,254,1,254,1,254,1,254,1, - 255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,256,1,256,1,256,1,256,1, - 256,1,256,1,256,1,257,1,257,1,257,1,257,1,258,1,258,1,258,1,258,1,258,1, - 258,1,258,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1, - 259,1,259,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,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, - 262,1,262,1,262,1,262,1,263,1,263,1,263,1,263,1,263,1,264,1,264,1,264,1, - 264,1,264,1,264,1,264,1,265,1,265,1,265,1,265,1,265,1,265,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,269,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,270,1,270,1,270,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,274,1,274,1,274,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,275,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,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,280,1,280,1, - 280,1,280,1,280,1,280,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,282,1, - 282,1,282,1,282,1,282,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,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,287,1,287,1,287,1,287,1,287,1,287,1, - 287,1,287,1,288,1,288,1,288,1,288,1,289,1,289,1,289,1,289,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, - 292,1,292,1,293,1,293,1,294,1,294,1,295,1,295,1,296,1,296,1,297,1,297,1, - 298,1,298,1,299,1,299,1,300,1,300,1,301,1,301,1,302,1,302,1,303,1,303,1, - 304,1,304,1,305,1,305,1,306,1,306,1,307,1,307,1,308,1,308,1,309,1,309,1, - 310,1,310,1,311,1,311,1,312,1,312,1,313,1,313,1,314,1,314,1,315,1,315,1, - 316,1,316,1,317,1,317,1,317,1,318,1,318,1,318,1,319,1,319,1,320,1,320,1, - 320,1,321,1,321,1,321,1,322,1,322,1,322,3,322,2964,8,322,1,323,4,323,2967, - 8,323,11,323,12,323,2968,1,324,4,324,2972,8,324,11,324,12,324,2973,3,324, - 2976,8,324,1,324,1,324,4,324,2980,8,324,11,324,12,324,2981,1,324,4,324, - 2985,8,324,11,324,12,324,2986,1,324,1,324,1,324,1,324,4,324,2993,8,324, - 11,324,12,324,2994,3,324,2997,8,324,1,324,1,324,4,324,3001,8,324,11,324, - 12,324,3002,1,324,1,324,1,324,4,324,3008,8,324,11,324,12,324,3009,1,324, - 1,324,3,324,3014,8,324,1,325,1,325,1,326,1,326,1,327,1,327,1,328,1,328, - 1,329,1,329,5,329,3026,8,329,10,329,12,329,3029,9,329,4,329,3031,8,329, - 11,329,12,329,3032,1,330,1,330,1,330,1,330,1,330,1,330,5,330,3041,8,330, - 10,330,12,330,3044,9,330,1,330,1,330,1,331,1,331,3,331,3050,8,331,1,331, - 4,331,3053,8,331,11,331,12,331,3054,1,332,5,332,3058,8,332,10,332,12,332, - 3061,9,332,1,332,4,332,3064,8,332,11,332,12,332,3065,1,332,5,332,3069,8, - 332,10,332,12,332,3072,9,332,1,333,5,333,3075,8,333,10,333,12,333,3078, - 9,333,1,333,4,333,3081,8,333,11,333,12,333,3082,1,333,5,333,3086,8,333, - 10,333,12,333,3089,9,333,1,334,1,334,1,335,1,335,1,336,1,336,1,336,1,336, - 1,336,1,336,5,336,3101,8,336,10,336,12,336,3104,9,336,1,336,1,336,1,337, - 1,337,1,337,1,337,1,337,1,337,5,337,3114,8,337,10,337,12,337,3117,9,337, - 1,337,1,337,1,338,1,338,1,338,4,338,3124,8,338,11,338,12,338,3125,1,338, - 1,338,1,339,1,339,1,339,1,339,1,339,1,339,5,339,3136,8,339,10,339,12,339, - 3139,9,339,1,339,1,339,5,694,3059,3065,3076,3082,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,0,661,0,663,0,665,0,667,0,669,0,671,0,673,0,675,0,677,0,679,0,1,0,16, - 3,0,9,10,13,13,32,32,2,0,10,10,13,13,2,0,46,46,58,58,2,0,47,47,92,92,3, - 0,32,32,47,47,92,92,2,0,92,92,96,96,2,0,43,43,45,45,4,0,48,57,65,90,95, - 95,97,122,3,0,65,90,95,95,97,122,7,0,35,38,42,42,48,57,64,90,94,95,97,123, - 125,125,6,0,35,38,42,42,64,90,94,95,97,123,125,125,1,0,48,57,2,0,65,90, - 97,122,2,0,34,34,92,92,2,0,39,39,92,92,1,0,48,49,3176,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,1,682,1,0,0,0,3,688, - 1,0,0,0,5,730,1,0,0,0,7,734,1,0,0,0,9,741,1,0,0,0,11,746,1,0,0,0,13,750, - 1,0,0,0,15,753,1,0,0,0,17,757,1,0,0,0,19,761,1,0,0,0,21,770,1,0,0,0,23, - 776,1,0,0,0,25,782,1,0,0,0,27,785,1,0,0,0,29,794,1,0,0,0,31,799,1,0,0,0, - 33,804,1,0,0,0,35,811,1,0,0,0,37,817,1,0,0,0,39,824,1,0,0,0,41,830,1,0, - 0,0,43,833,1,0,0,0,45,836,1,0,0,0,47,840,1,0,0,0,49,843,1,0,0,0,51,847, - 1,0,0,0,53,850,1,0,0,0,55,857,1,0,0,0,57,865,1,0,0,0,59,870,1,0,0,0,61, - 876,1,0,0,0,63,879,1,0,0,0,65,884,1,0,0,0,67,890,1,0,0,0,69,896,1,0,0,0, - 71,900,1,0,0,0,73,905,1,0,0,0,75,909,1,0,0,0,77,918,1,0,0,0,79,923,1,0, - 0,0,81,928,1,0,0,0,83,933,1,0,0,0,85,938,1,0,0,0,87,944,1,0,0,0,89,948, - 1,0,0,0,91,953,1,0,0,0,93,959,1,0,0,0,95,965,1,0,0,0,97,971,1,0,0,0,99, - 976,1,0,0,0,101,981,1,0,0,0,103,987,1,0,0,0,105,992,1,0,0,0,107,997,1,0, - 0,0,109,1005,1,0,0,0,111,1008,1,0,0,0,113,1014,1,0,0,0,115,1022,1,0,0,0, - 117,1029,1,0,0,0,119,1034,1,0,0,0,121,1044,1,0,0,0,123,1050,1,0,0,0,125, - 1055,1,0,0,0,127,1065,1,0,0,0,129,1075,1,0,0,0,131,1085,1,0,0,0,133,1093, - 1,0,0,0,135,1099,1,0,0,0,137,1105,1,0,0,0,139,1110,1,0,0,0,141,1115,1,0, - 0,0,143,1123,1,0,0,0,145,1130,1,0,0,0,147,1137,1,0,0,0,149,1143,1,0,0,0, - 151,1153,1,0,0,0,153,1158,1,0,0,0,155,1166,1,0,0,0,157,1174,1,0,0,0,159, - 1184,1,0,0,0,161,1191,1,0,0,0,163,1198,1,0,0,0,165,1205,1,0,0,0,167,1210, - 1,0,0,0,169,1219,1,0,0,0,171,1227,1,0,0,0,173,1232,1,0,0,0,175,1247,1,0, - 0,0,177,1267,1,0,0,0,179,1282,1,0,0,0,181,1289,1,0,0,0,183,1297,1,0,0,0, - 185,1305,1,0,0,0,187,1310,1,0,0,0,189,1315,1,0,0,0,191,1320,1,0,0,0,193, - 1327,1,0,0,0,195,1335,1,0,0,0,197,1342,1,0,0,0,199,1346,1,0,0,0,201,1353, - 1,0,0,0,203,1361,1,0,0,0,205,1372,1,0,0,0,207,1382,1,0,0,0,209,1387,1,0, - 0,0,211,1393,1,0,0,0,213,1400,1,0,0,0,215,1409,1,0,0,0,217,1419,1,0,0,0, - 219,1422,1,0,0,0,221,1434,1,0,0,0,223,1443,1,0,0,0,225,1449,1,0,0,0,227, - 1456,1,0,0,0,229,1463,1,0,0,0,231,1471,1,0,0,0,233,1475,1,0,0,0,235,1481, - 1,0,0,0,237,1486,1,0,0,0,239,1492,1,0,0,0,241,1504,1,0,0,0,243,1511,1,0, - 0,0,245,1520,1,0,0,0,247,1526,1,0,0,0,249,1533,1,0,0,0,251,1538,1,0,0,0, - 253,1546,1,0,0,0,255,1555,1,0,0,0,257,1558,1,0,0,0,259,1567,1,0,0,0,261, - 1575,1,0,0,0,263,1581,1,0,0,0,265,1585,1,0,0,0,267,1596,1,0,0,0,269,1603, - 1,0,0,0,271,1607,1,0,0,0,273,1610,1,0,0,0,275,1615,1,0,0,0,277,1623,1,0, - 0,0,279,1634,1,0,0,0,281,1644,1,0,0,0,283,1654,1,0,0,0,285,1661,1,0,0,0, - 287,1667,1,0,0,0,289,1673,1,0,0,0,291,1689,1,0,0,0,293,1702,1,0,0,0,295, - 1715,1,0,0,0,297,1725,1,0,0,0,299,1732,1,0,0,0,301,1743,1,0,0,0,303,1754, - 1,0,0,0,305,1760,1,0,0,0,307,1765,1,0,0,0,309,1773,1,0,0,0,311,1779,1,0, - 0,0,313,1789,1,0,0,0,315,1798,1,0,0,0,317,1807,1,0,0,0,319,1815,1,0,0,0, - 321,1821,1,0,0,0,323,1827,1,0,0,0,325,1835,1,0,0,0,327,1840,1,0,0,0,329, - 1850,1,0,0,0,331,1857,1,0,0,0,333,1867,1,0,0,0,335,1875,1,0,0,0,337,1881, - 1,0,0,0,339,1895,1,0,0,0,341,1908,1,0,0,0,343,1916,1,0,0,0,345,1923,1,0, - 0,0,347,1930,1,0,0,0,349,1942,1,0,0,0,351,1951,1,0,0,0,353,1960,1,0,0,0, - 355,1968,1,0,0,0,357,1978,1,0,0,0,359,1989,1,0,0,0,361,1995,1,0,0,0,363, - 2003,1,0,0,0,365,2015,1,0,0,0,367,2022,1,0,0,0,369,2030,1,0,0,0,371,2041, - 1,0,0,0,373,2050,1,0,0,0,375,2060,1,0,0,0,377,2067,1,0,0,0,379,2073,1,0, - 0,0,381,2085,1,0,0,0,383,2098,1,0,0,0,385,2107,1,0,0,0,387,2117,1,0,0,0, - 389,2121,1,0,0,0,391,2130,1,0,0,0,393,2138,1,0,0,0,395,2146,1,0,0,0,397, - 2151,1,0,0,0,399,2162,1,0,0,0,401,2174,1,0,0,0,403,2183,1,0,0,0,405,2191, - 1,0,0,0,407,2198,1,0,0,0,409,2204,1,0,0,0,411,2209,1,0,0,0,413,2216,1,0, - 0,0,415,2221,1,0,0,0,417,2228,1,0,0,0,419,2236,1,0,0,0,421,2243,1,0,0,0, - 423,2250,1,0,0,0,425,2255,1,0,0,0,427,2262,1,0,0,0,429,2267,1,0,0,0,431, - 2273,1,0,0,0,433,2285,1,0,0,0,435,2296,1,0,0,0,437,2309,1,0,0,0,439,2315, - 1,0,0,0,441,2323,1,0,0,0,443,2329,1,0,0,0,445,2336,1,0,0,0,447,2341,1,0, - 0,0,449,2347,1,0,0,0,451,2354,1,0,0,0,453,2364,1,0,0,0,455,2371,1,0,0,0, - 457,2377,1,0,0,0,459,2382,1,0,0,0,461,2389,1,0,0,0,463,2392,1,0,0,0,465, - 2399,1,0,0,0,467,2409,1,0,0,0,469,2419,1,0,0,0,471,2431,1,0,0,0,473,2443, - 1,0,0,0,475,2453,1,0,0,0,477,2464,1,0,0,0,479,2472,1,0,0,0,481,2481,1,0, - 0,0,483,2486,1,0,0,0,485,2492,1,0,0,0,487,2499,1,0,0,0,489,2503,1,0,0,0, - 491,2508,1,0,0,0,493,2521,1,0,0,0,495,2541,1,0,0,0,497,2561,1,0,0,0,499, - 2572,1,0,0,0,501,2588,1,0,0,0,503,2605,1,0,0,0,505,2612,1,0,0,0,507,2621, - 1,0,0,0,509,2627,1,0,0,0,511,2632,1,0,0,0,513,2640,1,0,0,0,515,2647,1,0, - 0,0,517,2651,1,0,0,0,519,2658,1,0,0,0,521,2670,1,0,0,0,523,2679,1,0,0,0, - 525,2688,1,0,0,0,527,2696,1,0,0,0,529,2701,1,0,0,0,531,2708,1,0,0,0,533, - 2714,1,0,0,0,535,2718,1,0,0,0,537,2723,1,0,0,0,539,2731,1,0,0,0,541,2738, - 1,0,0,0,543,2748,1,0,0,0,545,2754,1,0,0,0,547,2762,1,0,0,0,549,2766,1,0, - 0,0,551,2774,1,0,0,0,553,2782,1,0,0,0,555,2791,1,0,0,0,557,2795,1,0,0,0, - 559,2803,1,0,0,0,561,2810,1,0,0,0,563,2816,1,0,0,0,565,2823,1,0,0,0,567, - 2828,1,0,0,0,569,2833,1,0,0,0,571,2843,1,0,0,0,573,2857,1,0,0,0,575,2866, - 1,0,0,0,577,2874,1,0,0,0,579,2878,1,0,0,0,581,2882,1,0,0,0,583,2887,1,0, - 0,0,585,2896,1,0,0,0,587,2898,1,0,0,0,589,2900,1,0,0,0,591,2902,1,0,0,0, - 593,2904,1,0,0,0,595,2906,1,0,0,0,597,2908,1,0,0,0,599,2910,1,0,0,0,601, - 2912,1,0,0,0,603,2914,1,0,0,0,605,2916,1,0,0,0,607,2918,1,0,0,0,609,2920, - 1,0,0,0,611,2922,1,0,0,0,613,2924,1,0,0,0,615,2926,1,0,0,0,617,2928,1,0, - 0,0,619,2930,1,0,0,0,621,2932,1,0,0,0,623,2934,1,0,0,0,625,2936,1,0,0,0, - 627,2938,1,0,0,0,629,2940,1,0,0,0,631,2942,1,0,0,0,633,2944,1,0,0,0,635, - 2946,1,0,0,0,637,2949,1,0,0,0,639,2952,1,0,0,0,641,2954,1,0,0,0,643,2957, - 1,0,0,0,645,2963,1,0,0,0,647,2966,1,0,0,0,649,3013,1,0,0,0,651,3015,1,0, - 0,0,653,3017,1,0,0,0,655,3019,1,0,0,0,657,3021,1,0,0,0,659,3030,1,0,0,0, - 661,3034,1,0,0,0,663,3047,1,0,0,0,665,3059,1,0,0,0,667,3076,1,0,0,0,669, - 3090,1,0,0,0,671,3092,1,0,0,0,673,3094,1,0,0,0,675,3107,1,0,0,0,677,3120, - 1,0,0,0,679,3129,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,5,47,0,0,689,690,5,42,0,0,690,694,1,0,0,0,691,693,9,0,0, - 0,692,691,1,0,0,0,693,696,1,0,0,0,694,695,1,0,0,0,694,692,1,0,0,0,695,697, - 1,0,0,0,696,694,1,0,0,0,697,698,5,42,0,0,698,699,5,47,0,0,699,700,1,0,0, - 0,700,701,6,1,0,0,701,4,1,0,0,0,702,703,5,45,0,0,703,706,5,45,0,0,704,706, - 5,35,0,0,705,702,1,0,0,0,705,704,1,0,0,0,706,710,1,0,0,0,707,709,8,1,0, - 0,708,707,1,0,0,0,709,712,1,0,0,0,710,708,1,0,0,0,710,711,1,0,0,0,711,718, - 1,0,0,0,712,710,1,0,0,0,713,715,5,13,0,0,714,713,1,0,0,0,714,715,1,0,0, - 0,715,716,1,0,0,0,716,719,5,10,0,0,717,719,5,0,0,1,718,714,1,0,0,0,718, - 717,1,0,0,0,719,731,1,0,0,0,720,721,5,45,0,0,721,722,5,45,0,0,722,728,1, - 0,0,0,723,725,5,13,0,0,724,723,1,0,0,0,724,725,1,0,0,0,725,726,1,0,0,0, - 726,729,5,10,0,0,727,729,5,0,0,1,728,724,1,0,0,0,728,727,1,0,0,0,729,731, - 1,0,0,0,730,705,1,0,0,0,730,720,1,0,0,0,731,732,1,0,0,0,732,733,6,2,0,0, - 733,6,1,0,0,0,734,735,5,83,0,0,735,736,5,69,0,0,736,737,5,76,0,0,737,738, - 5,69,0,0,738,739,5,67,0,0,739,740,5,84,0,0,740,8,1,0,0,0,741,742,5,70,0, - 0,742,743,5,82,0,0,743,744,5,79,0,0,744,745,5,77,0,0,745,10,1,0,0,0,746, - 747,5,65,0,0,747,748,5,68,0,0,748,749,5,68,0,0,749,12,1,0,0,0,750,751,5, - 65,0,0,751,752,5,83,0,0,752,14,1,0,0,0,753,754,5,65,0,0,754,755,5,76,0, - 0,755,756,5,76,0,0,756,16,1,0,0,0,757,758,5,65,0,0,758,759,5,78,0,0,759, - 760,5,89,0,0,760,18,1,0,0,0,761,762,5,68,0,0,762,763,5,73,0,0,763,764,5, - 83,0,0,764,765,5,84,0,0,765,766,5,73,0,0,766,767,5,78,0,0,767,768,5,67, - 0,0,768,769,5,84,0,0,769,20,1,0,0,0,770,771,5,87,0,0,771,772,5,72,0,0,772, - 773,5,69,0,0,773,774,5,82,0,0,774,775,5,69,0,0,775,22,1,0,0,0,776,777,5, - 71,0,0,777,778,5,82,0,0,778,779,5,79,0,0,779,780,5,85,0,0,780,781,5,80, - 0,0,781,24,1,0,0,0,782,783,5,66,0,0,783,784,5,89,0,0,784,26,1,0,0,0,785, - 786,5,71,0,0,786,787,5,82,0,0,787,788,5,79,0,0,788,789,5,85,0,0,789,790, - 5,80,0,0,790,791,5,73,0,0,791,792,5,78,0,0,792,793,5,71,0,0,793,28,1,0, - 0,0,794,795,5,83,0,0,795,796,5,69,0,0,796,797,5,84,0,0,797,798,5,83,0,0, - 798,30,1,0,0,0,799,800,5,67,0,0,800,801,5,85,0,0,801,802,5,66,0,0,802,803, - 5,69,0,0,803,32,1,0,0,0,804,805,5,82,0,0,805,806,5,79,0,0,806,807,5,76, - 0,0,807,808,5,76,0,0,808,809,5,85,0,0,809,810,5,80,0,0,810,34,1,0,0,0,811, - 812,5,79,0,0,812,813,5,82,0,0,813,814,5,68,0,0,814,815,5,69,0,0,815,816, - 5,82,0,0,816,36,1,0,0,0,817,818,5,72,0,0,818,819,5,65,0,0,819,820,5,86, - 0,0,820,821,5,73,0,0,821,822,5,78,0,0,822,823,5,71,0,0,823,38,1,0,0,0,824, - 825,5,76,0,0,825,826,5,73,0,0,826,827,5,77,0,0,827,828,5,73,0,0,828,829, - 5,84,0,0,829,40,1,0,0,0,830,831,5,65,0,0,831,832,5,84,0,0,832,42,1,0,0, - 0,833,834,5,79,0,0,834,835,5,82,0,0,835,44,1,0,0,0,836,837,5,65,0,0,837, - 838,5,78,0,0,838,839,5,68,0,0,839,46,1,0,0,0,840,841,5,73,0,0,841,842,5, - 78,0,0,842,48,1,0,0,0,843,844,5,78,0,0,844,845,5,79,0,0,845,846,5,84,0, - 0,846,50,1,0,0,0,847,848,5,78,0,0,848,849,5,79,0,0,849,52,1,0,0,0,850,851, - 5,69,0,0,851,852,5,88,0,0,852,853,5,73,0,0,853,854,5,83,0,0,854,855,5,84, - 0,0,855,856,5,83,0,0,856,54,1,0,0,0,857,858,5,66,0,0,858,859,5,69,0,0,859, - 860,5,84,0,0,860,861,5,87,0,0,861,862,5,69,0,0,862,863,5,69,0,0,863,864, - 5,78,0,0,864,56,1,0,0,0,865,866,5,76,0,0,866,867,5,73,0,0,867,868,5,75, - 0,0,868,869,5,69,0,0,869,58,1,0,0,0,870,871,5,82,0,0,871,872,5,76,0,0,872, - 873,5,73,0,0,873,874,5,75,0,0,874,875,5,69,0,0,875,60,1,0,0,0,876,877,5, - 73,0,0,877,878,5,83,0,0,878,62,1,0,0,0,879,880,5,84,0,0,880,881,5,82,0, - 0,881,882,5,85,0,0,882,883,5,69,0,0,883,64,1,0,0,0,884,885,5,70,0,0,885, - 886,5,65,0,0,886,887,5,76,0,0,887,888,5,83,0,0,888,889,5,69,0,0,889,66, - 1,0,0,0,890,891,5,78,0,0,891,892,5,85,0,0,892,893,5,76,0,0,893,894,5,76, - 0,0,894,895,5,83,0,0,895,68,1,0,0,0,896,897,5,65,0,0,897,898,5,83,0,0,898, - 899,5,67,0,0,899,70,1,0,0,0,900,901,5,68,0,0,901,902,5,69,0,0,902,903,5, - 83,0,0,903,904,5,67,0,0,904,72,1,0,0,0,905,906,5,70,0,0,906,907,5,79,0, - 0,907,908,5,82,0,0,908,74,1,0,0,0,909,910,5,73,0,0,910,911,5,78,0,0,911, - 912,5,84,0,0,912,913,5,69,0,0,913,914,5,82,0,0,914,915,5,86,0,0,915,916, - 5,65,0,0,916,917,5,76,0,0,917,76,1,0,0,0,918,919,5,67,0,0,919,920,5,65, - 0,0,920,921,5,83,0,0,921,922,5,69,0,0,922,78,1,0,0,0,923,924,5,87,0,0,924, - 925,5,72,0,0,925,926,5,69,0,0,926,927,5,78,0,0,927,80,1,0,0,0,928,929,5, - 84,0,0,929,930,5,72,0,0,930,931,5,69,0,0,931,932,5,78,0,0,932,82,1,0,0, - 0,933,934,5,69,0,0,934,935,5,76,0,0,935,936,5,83,0,0,936,937,5,69,0,0,937, - 84,1,0,0,0,938,939,5,66,0,0,939,940,5,69,0,0,940,941,5,71,0,0,941,942,5, - 73,0,0,942,943,5,78,0,0,943,86,1,0,0,0,944,945,5,69,0,0,945,946,5,78,0, - 0,946,947,5,68,0,0,947,88,1,0,0,0,948,949,5,74,0,0,949,950,5,79,0,0,950, - 951,5,73,0,0,951,952,5,78,0,0,952,90,1,0,0,0,953,954,5,67,0,0,954,955,5, - 82,0,0,955,956,5,79,0,0,956,957,5,83,0,0,957,958,5,83,0,0,958,92,1,0,0, - 0,959,960,5,79,0,0,960,961,5,85,0,0,961,962,5,84,0,0,962,963,5,69,0,0,963, - 964,5,82,0,0,964,94,1,0,0,0,965,966,5,73,0,0,966,967,5,78,0,0,967,968,5, - 78,0,0,968,969,5,69,0,0,969,970,5,82,0,0,970,96,1,0,0,0,971,972,5,76,0, - 0,972,973,5,69,0,0,973,974,5,70,0,0,974,975,5,84,0,0,975,98,1,0,0,0,976, - 977,5,83,0,0,977,978,5,69,0,0,978,979,5,77,0,0,979,980,5,73,0,0,980,100, - 1,0,0,0,981,982,5,82,0,0,982,983,5,73,0,0,983,984,5,71,0,0,984,985,5,72, - 0,0,985,986,5,84,0,0,986,102,1,0,0,0,987,988,5,70,0,0,988,989,5,85,0,0, - 989,990,5,76,0,0,990,991,5,76,0,0,991,104,1,0,0,0,992,993,5,85,0,0,993, - 994,5,83,0,0,994,995,5,69,0,0,995,996,5,82,0,0,996,106,1,0,0,0,997,998, - 5,78,0,0,998,999,5,65,0,0,999,1000,5,84,0,0,1000,1001,5,85,0,0,1001,1002, - 5,82,0,0,1002,1003,5,65,0,0,1003,1004,5,76,0,0,1004,108,1,0,0,0,1005,1006, - 5,79,0,0,1006,1007,5,78,0,0,1007,110,1,0,0,0,1008,1009,5,80,0,0,1009,1010, - 5,73,0,0,1010,1011,5,86,0,0,1011,1012,5,79,0,0,1012,1013,5,84,0,0,1013, - 112,1,0,0,0,1014,1015,5,76,0,0,1015,1016,5,65,0,0,1016,1017,5,84,0,0,1017, - 1018,5,69,0,0,1018,1019,5,82,0,0,1019,1020,5,65,0,0,1020,1021,5,76,0,0, - 1021,114,1,0,0,0,1022,1023,5,87,0,0,1023,1024,5,73,0,0,1024,1025,5,78,0, - 0,1025,1026,5,68,0,0,1026,1027,5,79,0,0,1027,1028,5,87,0,0,1028,116,1,0, - 0,0,1029,1030,5,79,0,0,1030,1031,5,86,0,0,1031,1032,5,69,0,0,1032,1033, - 5,82,0,0,1033,118,1,0,0,0,1034,1035,5,80,0,0,1035,1036,5,65,0,0,1036,1037, - 5,82,0,0,1037,1038,5,84,0,0,1038,1039,5,73,0,0,1039,1040,5,84,0,0,1040, - 1041,5,73,0,0,1041,1042,5,79,0,0,1042,1043,5,78,0,0,1043,120,1,0,0,0,1044, - 1045,5,82,0,0,1045,1046,5,65,0,0,1046,1047,5,78,0,0,1047,1048,5,71,0,0, - 1048,1049,5,69,0,0,1049,122,1,0,0,0,1050,1051,5,82,0,0,1051,1052,5,79,0, - 0,1052,1053,5,87,0,0,1053,1054,5,83,0,0,1054,124,1,0,0,0,1055,1056,5,85, - 0,0,1056,1057,5,78,0,0,1057,1058,5,66,0,0,1058,1059,5,79,0,0,1059,1060, - 5,85,0,0,1060,1061,5,78,0,0,1061,1062,5,68,0,0,1062,1063,5,69,0,0,1063, - 1064,5,68,0,0,1064,126,1,0,0,0,1065,1066,5,80,0,0,1066,1067,5,82,0,0,1067, - 1068,5,69,0,0,1068,1069,5,67,0,0,1069,1070,5,69,0,0,1070,1071,5,68,0,0, - 1071,1072,5,73,0,0,1072,1073,5,78,0,0,1073,1074,5,71,0,0,1074,128,1,0,0, - 0,1075,1076,5,70,0,0,1076,1077,5,79,0,0,1077,1078,5,76,0,0,1078,1079,5, - 76,0,0,1079,1080,5,79,0,0,1080,1081,5,87,0,0,1081,1082,5,73,0,0,1082,1083, - 5,78,0,0,1083,1084,5,71,0,0,1084,130,1,0,0,0,1085,1086,5,67,0,0,1086,1087, - 5,85,0,0,1087,1088,5,82,0,0,1088,1089,5,82,0,0,1089,1090,5,69,0,0,1090, - 1091,5,78,0,0,1091,1092,5,84,0,0,1092,132,1,0,0,0,1093,1094,5,70,0,0,1094, - 1095,5,73,0,0,1095,1096,5,82,0,0,1096,1097,5,83,0,0,1097,1098,5,84,0,0, - 1098,134,1,0,0,0,1099,1100,5,65,0,0,1100,1101,5,70,0,0,1101,1102,5,84,0, - 0,1102,1103,5,69,0,0,1103,1104,5,82,0,0,1104,136,1,0,0,0,1105,1106,5,76, - 0,0,1106,1107,5,65,0,0,1107,1108,5,83,0,0,1108,1109,5,84,0,0,1109,138,1, - 0,0,0,1110,1111,5,87,0,0,1111,1112,5,73,0,0,1112,1113,5,84,0,0,1113,1114, - 5,72,0,0,1114,140,1,0,0,0,1115,1116,5,87,0,0,1116,1117,5,73,0,0,1117,1118, - 5,84,0,0,1118,1119,5,72,0,0,1119,1120,5,79,0,0,1120,1121,5,85,0,0,1121, - 1122,5,84,0,0,1122,142,1,0,0,0,1123,1124,5,86,0,0,1124,1125,5,65,0,0,1125, - 1126,5,76,0,0,1126,1127,5,85,0,0,1127,1128,5,69,0,0,1128,1129,5,83,0,0, - 1129,144,1,0,0,0,1130,1131,5,67,0,0,1131,1132,5,82,0,0,1132,1133,5,69,0, - 0,1133,1134,5,65,0,0,1134,1135,5,84,0,0,1135,1136,5,69,0,0,1136,146,1,0, - 0,0,1137,1138,5,84,0,0,1138,1139,5,65,0,0,1139,1140,5,66,0,0,1140,1141, - 5,76,0,0,1141,1142,5,69,0,0,1142,148,1,0,0,0,1143,1144,5,68,0,0,1144,1145, - 5,73,0,0,1145,1146,5,82,0,0,1146,1147,5,69,0,0,1147,1148,5,67,0,0,1148, - 1149,5,84,0,0,1149,1150,5,79,0,0,1150,1151,5,82,0,0,1151,1152,5,89,0,0, - 1152,150,1,0,0,0,1153,1154,5,86,0,0,1154,1155,5,73,0,0,1155,1156,5,69,0, - 0,1156,1157,5,87,0,0,1157,152,1,0,0,0,1158,1159,5,82,0,0,1159,1160,5,69, - 0,0,1160,1161,5,80,0,0,1161,1162,5,76,0,0,1162,1163,5,65,0,0,1163,1164, - 5,67,0,0,1164,1165,5,69,0,0,1165,154,1,0,0,0,1166,1167,5,69,0,0,1167,1168, - 5,88,0,0,1168,1169,5,69,0,0,1169,1170,5,67,0,0,1170,1171,5,85,0,0,1171, - 1172,5,84,0,0,1172,1173,5,69,0,0,1173,156,1,0,0,0,1174,1175,5,83,0,0,1175, - 1176,5,84,0,0,1176,1177,5,65,0,0,1177,1178,5,84,0,0,1178,1179,5,69,0,0, - 1179,1180,5,77,0,0,1180,1181,5,69,0,0,1181,1182,5,78,0,0,1182,1183,5,84, - 0,0,1183,158,1,0,0,0,1184,1185,5,73,0,0,1185,1186,5,78,0,0,1186,1187,5, - 83,0,0,1187,1188,5,69,0,0,1188,1189,5,82,0,0,1189,1190,5,84,0,0,1190,160, - 1,0,0,0,1191,1192,5,68,0,0,1192,1193,5,69,0,0,1193,1194,5,76,0,0,1194,1195, - 5,69,0,0,1195,1196,5,84,0,0,1196,1197,5,69,0,0,1197,162,1,0,0,0,1198,1199, - 5,82,0,0,1199,1200,5,69,0,0,1200,1201,5,77,0,0,1201,1202,5,79,0,0,1202, - 1203,5,86,0,0,1203,1204,5,69,0,0,1204,164,1,0,0,0,1205,1206,5,73,0,0,1206, - 1207,5,78,0,0,1207,1208,5,84,0,0,1208,1209,5,79,0,0,1209,166,1,0,0,0,1210, - 1211,5,68,0,0,1211,1212,5,69,0,0,1212,1213,5,83,0,0,1213,1214,5,67,0,0, - 1214,1215,5,82,0,0,1215,1216,5,73,0,0,1216,1217,5,66,0,0,1217,1218,5,69, - 0,0,1218,168,1,0,0,0,1219,1220,5,69,0,0,1220,1221,5,88,0,0,1221,1222,5, - 80,0,0,1222,1223,5,76,0,0,1223,1224,5,65,0,0,1224,1225,5,73,0,0,1225,1226, - 5,78,0,0,1226,170,1,0,0,0,1227,1228,5,80,0,0,1228,1229,5,76,0,0,1229,1230, - 5,65,0,0,1230,1231,5,78,0,0,1231,172,1,0,0,0,1232,1233,5,67,0,0,1233,1234, - 5,72,0,0,1234,1235,5,65,0,0,1235,1236,5,78,0,0,1236,1237,5,71,0,0,1237, - 1238,5,69,0,0,1238,1239,5,76,0,0,1239,1240,5,79,0,0,1240,1241,5,71,0,0, - 1241,1242,5,95,0,0,1242,1243,5,77,0,0,1243,1244,5,79,0,0,1244,1245,5,68, - 0,0,1245,1246,5,69,0,0,1246,174,1,0,0,0,1247,1248,5,74,0,0,1248,1249,5, - 83,0,0,1249,1250,5,79,0,0,1250,1251,5,78,0,0,1251,1252,5,95,0,0,1252,1253, - 5,69,0,0,1253,1254,5,88,0,0,1254,1255,5,69,0,0,1255,1256,5,67,0,0,1256, - 1257,5,85,0,0,1257,1258,5,84,0,0,1258,1259,5,73,0,0,1259,1260,5,79,0,0, - 1260,1261,5,78,0,0,1261,1262,5,95,0,0,1262,1263,5,80,0,0,1263,1264,5,76, - 0,0,1264,1265,5,65,0,0,1265,1266,5,78,0,0,1266,176,1,0,0,0,1267,1268,5, - 69,0,0,1268,1269,5,83,0,0,1269,1270,5,84,0,0,1270,1271,5,73,0,0,1271,1272, - 5,77,0,0,1272,1273,5,65,0,0,1273,1274,5,84,0,0,1274,1275,5,69,0,0,1275, - 1276,5,68,0,0,1276,1277,5,95,0,0,1277,1278,5,67,0,0,1278,1279,5,79,0,0, - 1279,1280,5,83,0,0,1280,1281,5,84,0,0,1281,178,1,0,0,0,1282,1283,5,70,0, - 0,1283,1284,5,79,0,0,1284,1285,5,82,0,0,1285,1286,5,77,0,0,1286,1287,5, - 65,0,0,1287,1288,5,84,0,0,1288,180,1,0,0,0,1289,1290,5,76,0,0,1290,1291, - 5,79,0,0,1291,1292,5,71,0,0,1292,1293,5,73,0,0,1293,1294,5,67,0,0,1294, - 1295,5,65,0,0,1295,1296,5,76,0,0,1296,182,1,0,0,0,1297,1298,5,67,0,0,1298, - 1299,5,79,0,0,1299,1300,5,68,0,0,1300,1301,5,69,0,0,1301,1302,5,71,0,0, - 1302,1303,5,69,0,0,1303,1304,5,78,0,0,1304,184,1,0,0,0,1305,1306,5,67,0, - 0,1306,1307,5,79,0,0,1307,1308,5,83,0,0,1308,1309,5,84,0,0,1309,186,1,0, - 0,0,1310,1311,5,67,0,0,1311,1312,5,65,0,0,1312,1313,5,83,0,0,1313,1314, - 5,84,0,0,1314,188,1,0,0,0,1315,1316,5,83,0,0,1316,1317,5,72,0,0,1317,1318, - 5,79,0,0,1318,1319,5,87,0,0,1319,190,1,0,0,0,1320,1321,5,84,0,0,1321,1322, - 5,65,0,0,1322,1323,5,66,0,0,1323,1324,5,76,0,0,1324,1325,5,69,0,0,1325, - 1326,5,83,0,0,1326,192,1,0,0,0,1327,1328,5,67,0,0,1328,1329,5,79,0,0,1329, - 1330,5,76,0,0,1330,1331,5,85,0,0,1331,1332,5,77,0,0,1332,1333,5,78,0,0, - 1333,1334,5,83,0,0,1334,194,1,0,0,0,1335,1336,5,67,0,0,1336,1337,5,79,0, - 0,1337,1338,5,76,0,0,1338,1339,5,85,0,0,1339,1340,5,77,0,0,1340,1341,5, - 78,0,0,1341,196,1,0,0,0,1342,1343,5,85,0,0,1343,1344,5,83,0,0,1344,1345, - 5,69,0,0,1345,198,1,0,0,0,1346,1347,5,77,0,0,1347,1348,5,79,0,0,1348,1349, - 5,68,0,0,1349,1350,5,85,0,0,1350,1351,5,76,0,0,1351,1352,5,69,0,0,1352, - 200,1,0,0,0,1353,1354,5,77,0,0,1354,1355,5,79,0,0,1355,1356,5,68,0,0,1356, - 1357,5,85,0,0,1357,1358,5,76,0,0,1358,1359,5,69,0,0,1359,1360,5,83,0,0, - 1360,202,1,0,0,0,1361,1362,5,80,0,0,1362,1363,5,65,0,0,1363,1364,5,82,0, - 0,1364,1365,5,84,0,0,1365,1366,5,73,0,0,1366,1367,5,84,0,0,1367,1368,5, - 73,0,0,1368,1369,5,79,0,0,1369,1370,5,78,0,0,1370,1371,5,83,0,0,1371,204, - 1,0,0,0,1372,1373,5,70,0,0,1373,1374,5,85,0,0,1374,1375,5,78,0,0,1375,1376, - 5,67,0,0,1376,1377,5,84,0,0,1377,1378,5,73,0,0,1378,1379,5,79,0,0,1379, - 1380,5,78,0,0,1380,1381,5,83,0,0,1381,206,1,0,0,0,1382,1383,5,68,0,0,1383, - 1384,5,82,0,0,1384,1385,5,79,0,0,1385,1386,5,80,0,0,1386,208,1,0,0,0,1387, - 1388,5,85,0,0,1388,1389,5,78,0,0,1389,1390,5,73,0,0,1390,1391,5,79,0,0, - 1391,1392,5,78,0,0,1392,210,1,0,0,0,1393,1394,5,69,0,0,1394,1395,5,88,0, - 0,1395,1396,5,67,0,0,1396,1397,5,69,0,0,1397,1398,5,80,0,0,1398,1399,5, - 84,0,0,1399,212,1,0,0,0,1400,1401,5,83,0,0,1401,1402,5,69,0,0,1402,1403, - 5,84,0,0,1403,1404,5,77,0,0,1404,1405,5,73,0,0,1405,1406,5,78,0,0,1406, - 1407,5,85,0,0,1407,1408,5,83,0,0,1408,214,1,0,0,0,1409,1410,5,73,0,0,1410, - 1411,5,78,0,0,1411,1412,5,84,0,0,1412,1413,5,69,0,0,1413,1414,5,82,0,0, - 1414,1415,5,83,0,0,1415,1416,5,69,0,0,1416,1417,5,67,0,0,1417,1418,5,84, - 0,0,1418,216,1,0,0,0,1419,1420,5,84,0,0,1420,1421,5,79,0,0,1421,218,1,0, - 0,0,1422,1423,5,84,0,0,1423,1424,5,65,0,0,1424,1425,5,66,0,0,1425,1426, - 5,76,0,0,1426,1427,5,69,0,0,1427,1428,5,83,0,0,1428,1429,5,65,0,0,1429, - 1430,5,77,0,0,1430,1431,5,80,0,0,1431,1432,5,76,0,0,1432,1433,5,69,0,0, - 1433,220,1,0,0,0,1434,1435,5,83,0,0,1435,1436,5,84,0,0,1436,1437,5,82,0, - 0,1437,1438,5,65,0,0,1438,1439,5,84,0,0,1439,1440,5,73,0,0,1440,1441,5, - 70,0,0,1441,1442,5,89,0,0,1442,222,1,0,0,0,1443,1444,5,65,0,0,1444,1445, - 5,76,0,0,1445,1446,5,84,0,0,1446,1447,5,69,0,0,1447,1448,5,82,0,0,1448, - 224,1,0,0,0,1449,1450,5,82,0,0,1450,1451,5,69,0,0,1451,1452,5,78,0,0,1452, - 1453,5,65,0,0,1453,1454,5,77,0,0,1454,1455,5,69,0,0,1455,226,1,0,0,0,1456, - 1457,5,83,0,0,1457,1458,5,84,0,0,1458,1459,5,82,0,0,1459,1460,5,85,0,0, - 1460,1461,5,67,0,0,1461,1462,5,84,0,0,1462,228,1,0,0,0,1463,1464,5,67,0, - 0,1464,1465,5,79,0,0,1465,1466,5,77,0,0,1466,1467,5,77,0,0,1467,1468,5, - 69,0,0,1468,1469,5,78,0,0,1469,1470,5,84,0,0,1470,230,1,0,0,0,1471,1472, - 5,83,0,0,1472,1473,5,69,0,0,1473,1474,5,84,0,0,1474,232,1,0,0,0,1475,1476, - 5,82,0,0,1476,1477,5,69,0,0,1477,1478,5,83,0,0,1478,1479,5,69,0,0,1479, - 1480,5,84,0,0,1480,234,1,0,0,0,1481,1482,5,68,0,0,1482,1483,5,65,0,0,1483, - 1484,5,84,0,0,1484,1485,5,65,0,0,1485,236,1,0,0,0,1486,1487,5,83,0,0,1487, - 1488,5,84,0,0,1488,1489,5,65,0,0,1489,1490,5,82,0,0,1490,1491,5,84,0,0, - 1491,238,1,0,0,0,1492,1493,5,84,0,0,1493,1494,5,82,0,0,1494,1495,5,65,0, - 0,1495,1496,5,78,0,0,1496,1497,5,83,0,0,1497,1498,5,65,0,0,1498,1499,5, - 67,0,0,1499,1500,5,84,0,0,1500,1501,5,73,0,0,1501,1502,5,79,0,0,1502,1503, - 5,78,0,0,1503,240,1,0,0,0,1504,1505,5,67,0,0,1505,1506,5,79,0,0,1506,1507, - 5,77,0,0,1507,1508,5,77,0,0,1508,1509,5,73,0,0,1509,1510,5,84,0,0,1510, - 242,1,0,0,0,1511,1512,5,82,0,0,1512,1513,5,79,0,0,1513,1514,5,76,0,0,1514, - 1515,5,76,0,0,1515,1516,5,66,0,0,1516,1517,5,65,0,0,1517,1518,5,67,0,0, - 1518,1519,5,75,0,0,1519,244,1,0,0,0,1520,1521,5,77,0,0,1521,1522,5,65,0, - 0,1522,1523,5,67,0,0,1523,1524,5,82,0,0,1524,1525,5,79,0,0,1525,246,1,0, - 0,0,1526,1527,5,73,0,0,1527,1528,5,71,0,0,1528,1529,5,78,0,0,1529,1530, - 5,79,0,0,1530,1531,5,82,0,0,1531,1532,5,69,0,0,1532,248,1,0,0,0,1533,1534, - 5,66,0,0,1534,1535,5,79,0,0,1535,1536,5,84,0,0,1536,1537,5,72,0,0,1537, - 250,1,0,0,0,1538,1539,5,76,0,0,1539,1540,5,69,0,0,1540,1541,5,65,0,0,1541, - 1542,5,68,0,0,1542,1543,5,73,0,0,1543,1544,5,78,0,0,1544,1545,5,71,0,0, - 1545,252,1,0,0,0,1546,1547,5,84,0,0,1547,1548,5,82,0,0,1548,1549,5,65,0, - 0,1549,1550,5,73,0,0,1550,1551,5,76,0,0,1551,1552,5,73,0,0,1552,1553,5, - 78,0,0,1553,1554,5,71,0,0,1554,254,1,0,0,0,1555,1556,5,73,0,0,1556,1557, - 5,70,0,0,1557,256,1,0,0,0,1558,1559,5,80,0,0,1559,1560,5,79,0,0,1560,1561, - 5,83,0,0,1561,1562,5,73,0,0,1562,1563,5,84,0,0,1563,1564,5,73,0,0,1564, - 1565,5,79,0,0,1565,1566,5,78,0,0,1566,258,1,0,0,0,1567,1568,5,69,0,0,1568, - 1569,5,88,0,0,1569,1570,5,84,0,0,1570,1571,5,82,0,0,1571,1572,5,65,0,0, - 1572,1573,5,67,0,0,1573,1574,5,84,0,0,1574,260,1,0,0,0,1575,1576,5,77,0, - 0,1576,1577,5,73,0,0,1577,1578,5,78,0,0,1578,1579,5,85,0,0,1579,1580,5, - 83,0,0,1580,262,1,0,0,0,1581,1582,5,68,0,0,1582,1583,5,73,0,0,1583,1584, - 5,86,0,0,1584,264,1,0,0,0,1585,1586,5,80,0,0,1586,1587,5,69,0,0,1587,1588, - 5,82,0,0,1588,1589,5,67,0,0,1589,1590,5,69,0,0,1590,1591,5,78,0,0,1591, - 1592,5,84,0,0,1592,1593,5,76,0,0,1593,1594,5,73,0,0,1594,1595,5,84,0,0, - 1595,266,1,0,0,0,1596,1597,5,66,0,0,1597,1598,5,85,0,0,1598,1599,5,67,0, - 0,1599,1600,5,75,0,0,1600,1601,5,69,0,0,1601,1602,5,84,0,0,1602,268,1,0, - 0,0,1603,1604,5,79,0,0,1604,1605,5,85,0,0,1605,1606,5,84,0,0,1606,270,1, - 0,0,0,1607,1608,5,79,0,0,1608,1609,5,70,0,0,1609,272,1,0,0,0,1610,1611, - 5,83,0,0,1611,1612,5,79,0,0,1612,1613,5,82,0,0,1613,1614,5,84,0,0,1614, - 274,1,0,0,0,1615,1616,5,67,0,0,1616,1617,5,76,0,0,1617,1618,5,85,0,0,1618, - 1619,5,83,0,0,1619,1620,5,84,0,0,1620,1621,5,69,0,0,1621,1622,5,82,0,0, - 1622,276,1,0,0,0,1623,1624,5,68,0,0,1624,1625,5,73,0,0,1625,1626,5,83,0, - 0,1626,1627,5,84,0,0,1627,1628,5,82,0,0,1628,1629,5,73,0,0,1629,1630,5, - 66,0,0,1630,1631,5,85,0,0,1631,1632,5,84,0,0,1632,1633,5,69,0,0,1633,278, - 1,0,0,0,1634,1635,5,79,0,0,1635,1636,5,86,0,0,1636,1637,5,69,0,0,1637,1638, - 5,82,0,0,1638,1639,5,87,0,0,1639,1640,5,82,0,0,1640,1641,5,73,0,0,1641, - 1642,5,84,0,0,1642,1643,5,69,0,0,1643,280,1,0,0,0,1644,1645,5,84,0,0,1645, - 1646,5,82,0,0,1646,1647,5,65,0,0,1647,1648,5,78,0,0,1648,1649,5,83,0,0, - 1649,1650,5,70,0,0,1650,1651,5,79,0,0,1651,1652,5,82,0,0,1652,1653,5,77, - 0,0,1653,282,1,0,0,0,1654,1655,5,82,0,0,1655,1656,5,69,0,0,1656,1657,5, - 68,0,0,1657,1658,5,85,0,0,1658,1659,5,67,0,0,1659,1660,5,69,0,0,1660,284, - 1,0,0,0,1661,1662,5,85,0,0,1662,1663,5,83,0,0,1663,1664,5,73,0,0,1664,1665, - 5,78,0,0,1665,1666,5,71,0,0,1666,286,1,0,0,0,1667,1668,5,83,0,0,1668,1669, - 5,69,0,0,1669,1670,5,82,0,0,1670,1671,5,68,0,0,1671,1672,5,69,0,0,1672, - 288,1,0,0,0,1673,1674,5,83,0,0,1674,1675,5,69,0,0,1675,1676,5,82,0,0,1676, - 1677,5,68,0,0,1677,1678,5,69,0,0,1678,1679,5,80,0,0,1679,1680,5,82,0,0, - 1680,1681,5,79,0,0,1681,1682,5,80,0,0,1682,1683,5,69,0,0,1683,1684,5,82, - 0,0,1684,1685,5,84,0,0,1685,1686,5,73,0,0,1686,1687,5,69,0,0,1687,1688, - 5,83,0,0,1688,290,1,0,0,0,1689,1690,5,82,0,0,1690,1691,5,69,0,0,1691,1692, - 5,67,0,0,1692,1693,5,79,0,0,1693,1694,5,82,0,0,1694,1695,5,68,0,0,1695, - 1696,5,82,0,0,1696,1697,5,69,0,0,1697,1698,5,65,0,0,1698,1699,5,68,0,0, - 1699,1700,5,69,0,0,1700,1701,5,82,0,0,1701,292,1,0,0,0,1702,1703,5,82,0, - 0,1703,1704,5,69,0,0,1704,1705,5,67,0,0,1705,1706,5,79,0,0,1706,1707,5, - 82,0,0,1707,1708,5,68,0,0,1708,1709,5,87,0,0,1709,1710,5,82,0,0,1710,1711, - 5,73,0,0,1711,1712,5,84,0,0,1712,1713,5,69,0,0,1713,1714,5,82,0,0,1714, - 294,1,0,0,0,1715,1716,5,68,0,0,1716,1717,5,69,0,0,1717,1718,5,76,0,0,1718, - 1719,5,73,0,0,1719,1720,5,77,0,0,1720,1721,5,73,0,0,1721,1722,5,84,0,0, - 1722,1723,5,69,0,0,1723,1724,5,68,0,0,1724,296,1,0,0,0,1725,1726,5,70,0, - 0,1726,1727,5,73,0,0,1727,1728,5,69,0,0,1728,1729,5,76,0,0,1729,1730,5, - 68,0,0,1730,1731,5,83,0,0,1731,298,1,0,0,0,1732,1733,5,84,0,0,1733,1734, - 5,69,0,0,1734,1735,5,82,0,0,1735,1736,5,77,0,0,1736,1737,5,73,0,0,1737, - 1738,5,78,0,0,1738,1739,5,65,0,0,1739,1740,5,84,0,0,1740,1741,5,69,0,0, - 1741,1742,5,68,0,0,1742,300,1,0,0,0,1743,1744,5,67,0,0,1744,1745,5,79,0, - 0,1745,1746,5,76,0,0,1746,1747,5,76,0,0,1747,1748,5,69,0,0,1748,1749,5, - 67,0,0,1749,1750,5,84,0,0,1750,1751,5,73,0,0,1751,1752,5,79,0,0,1752,1753, - 5,78,0,0,1753,302,1,0,0,0,1754,1755,5,73,0,0,1755,1756,5,84,0,0,1756,1757, - 5,69,0,0,1757,1758,5,77,0,0,1758,1759,5,83,0,0,1759,304,1,0,0,0,1760,1761, - 5,75,0,0,1761,1762,5,69,0,0,1762,1763,5,89,0,0,1763,1764,5,83,0,0,1764, - 306,1,0,0,0,1765,1766,5,69,0,0,1766,1767,5,83,0,0,1767,1768,5,67,0,0,1768, - 1769,5,65,0,0,1769,1770,5,80,0,0,1770,1771,5,69,0,0,1771,1772,5,68,0,0, - 1772,308,1,0,0,0,1773,1774,5,76,0,0,1774,1775,5,73,0,0,1775,1776,5,78,0, - 0,1776,1777,5,69,0,0,1777,1778,5,83,0,0,1778,310,1,0,0,0,1779,1780,5,83, - 0,0,1780,1781,5,69,0,0,1781,1782,5,80,0,0,1782,1783,5,65,0,0,1783,1784, - 5,82,0,0,1784,1785,5,65,0,0,1785,1786,5,84,0,0,1786,1787,5,69,0,0,1787, - 1788,5,68,0,0,1788,312,1,0,0,0,1789,1790,5,70,0,0,1790,1791,5,85,0,0,1791, - 1792,5,78,0,0,1792,1793,5,67,0,0,1793,1794,5,84,0,0,1794,1795,5,73,0,0, - 1795,1796,5,79,0,0,1796,1797,5,78,0,0,1797,314,1,0,0,0,1798,1799,5,69,0, - 0,1799,1800,5,88,0,0,1800,1801,5,84,0,0,1801,1802,5,69,0,0,1802,1803,5, - 78,0,0,1803,1804,5,68,0,0,1804,1805,5,69,0,0,1805,1806,5,68,0,0,1806,316, - 1,0,0,0,1807,1808,5,82,0,0,1808,1809,5,69,0,0,1809,1810,5,70,0,0,1810,1811, - 5,82,0,0,1811,1812,5,69,0,0,1812,1813,5,83,0,0,1813,1814,5,72,0,0,1814, - 318,1,0,0,0,1815,1816,5,67,0,0,1816,1817,5,76,0,0,1817,1818,5,69,0,0,1818, - 1819,5,65,0,0,1819,1820,5,82,0,0,1820,320,1,0,0,0,1821,1822,5,67,0,0,1822, - 1823,5,65,0,0,1823,1824,5,67,0,0,1824,1825,5,72,0,0,1825,1826,5,69,0,0, - 1826,322,1,0,0,0,1827,1828,5,85,0,0,1828,1829,5,78,0,0,1829,1830,5,67,0, - 0,1830,1831,5,65,0,0,1831,1832,5,67,0,0,1832,1833,5,72,0,0,1833,1834,5, - 69,0,0,1834,324,1,0,0,0,1835,1836,5,76,0,0,1836,1837,5,65,0,0,1837,1838, - 5,90,0,0,1838,1839,5,89,0,0,1839,326,1,0,0,0,1840,1841,5,70,0,0,1841,1842, - 5,79,0,0,1842,1843,5,82,0,0,1843,1844,5,77,0,0,1844,1845,5,65,0,0,1845, - 1846,5,84,0,0,1846,1847,5,84,0,0,1847,1848,5,69,0,0,1848,1849,5,68,0,0, - 1849,328,1,0,0,0,1850,1851,5,71,0,0,1851,1852,5,76,0,0,1852,1853,5,79,0, - 0,1853,1854,5,66,0,0,1854,1855,5,65,0,0,1855,1856,5,76,0,0,1856,330,1,0, - 0,0,1857,1858,5,84,0,0,1858,1859,5,69,0,0,1859,1860,5,77,0,0,1860,1861, - 5,80,0,0,1861,1862,5,79,0,0,1862,1863,5,82,0,0,1863,1864,5,65,0,0,1864, - 1865,5,82,0,0,1865,1866,5,89,0,0,1866,332,1,0,0,0,1867,1868,5,79,0,0,1868, - 1869,5,80,0,0,1869,1870,5,84,0,0,1870,1871,5,73,0,0,1871,1872,5,79,0,0, - 1872,1873,5,78,0,0,1873,1874,5,83,0,0,1874,334,1,0,0,0,1875,1876,5,85,0, - 0,1876,1877,5,78,0,0,1877,1878,5,83,0,0,1878,1879,5,69,0,0,1879,1880,5, - 84,0,0,1880,336,1,0,0,0,1881,1882,5,84,0,0,1882,1883,5,66,0,0,1883,1884, - 5,76,0,0,1884,1885,5,80,0,0,1885,1886,5,82,0,0,1886,1887,5,79,0,0,1887, - 1888,5,80,0,0,1888,1889,5,69,0,0,1889,1890,5,82,0,0,1890,1891,5,84,0,0, - 1891,1892,5,73,0,0,1892,1893,5,69,0,0,1893,1894,5,83,0,0,1894,338,1,0,0, - 0,1895,1896,5,68,0,0,1896,1897,5,66,0,0,1897,1898,5,80,0,0,1898,1899,5, - 82,0,0,1899,1900,5,79,0,0,1900,1901,5,80,0,0,1901,1902,5,69,0,0,1902,1903, - 5,82,0,0,1903,1904,5,84,0,0,1904,1905,5,73,0,0,1905,1906,5,69,0,0,1906, - 1907,5,83,0,0,1907,340,1,0,0,0,1908,1909,5,66,0,0,1909,1910,5,85,0,0,1910, - 1911,5,67,0,0,1911,1912,5,75,0,0,1912,1913,5,69,0,0,1913,1914,5,84,0,0, - 1914,1915,5,83,0,0,1915,342,1,0,0,0,1916,1917,5,83,0,0,1917,1918,5,75,0, - 0,1918,1919,5,69,0,0,1919,1920,5,87,0,0,1920,1921,5,69,0,0,1921,1922,5, - 68,0,0,1922,344,1,0,0,0,1923,1924,5,83,0,0,1924,1925,5,84,0,0,1925,1926, - 5,79,0,0,1926,1927,5,82,0,0,1927,1928,5,69,0,0,1928,1929,5,68,0,0,1929, - 346,1,0,0,0,1930,1931,5,68,0,0,1931,1932,5,73,0,0,1932,1933,5,82,0,0,1933, - 1934,5,69,0,0,1934,1935,5,67,0,0,1935,1936,5,84,0,0,1936,1937,5,79,0,0, - 1937,1938,5,82,0,0,1938,1939,5,73,0,0,1939,1940,5,69,0,0,1940,1941,5,83, - 0,0,1941,348,1,0,0,0,1942,1943,5,76,0,0,1943,1944,5,79,0,0,1944,1945,5, - 67,0,0,1945,1946,5,65,0,0,1946,1947,5,84,0,0,1947,1948,5,73,0,0,1948,1949, - 5,79,0,0,1949,1950,5,78,0,0,1950,350,1,0,0,0,1951,1952,5,69,0,0,1952,1953, - 5,88,0,0,1953,1954,5,67,0,0,1954,1955,5,72,0,0,1955,1956,5,65,0,0,1956, - 1957,5,78,0,0,1957,1958,5,71,0,0,1958,1959,5,69,0,0,1959,352,1,0,0,0,1960, - 1961,5,65,0,0,1961,1962,5,82,0,0,1962,1963,5,67,0,0,1963,1964,5,72,0,0, - 1964,1965,5,73,0,0,1965,1966,5,86,0,0,1966,1967,5,69,0,0,1967,354,1,0,0, - 0,1968,1969,5,85,0,0,1969,1970,5,78,0,0,1970,1971,5,65,0,0,1971,1972,5, - 82,0,0,1972,1973,5,67,0,0,1973,1974,5,72,0,0,1974,1975,5,73,0,0,1975,1976, - 5,86,0,0,1976,1977,5,69,0,0,1977,356,1,0,0,0,1978,1979,5,70,0,0,1979,1980, - 5,73,0,0,1980,1981,5,76,0,0,1981,1982,5,69,0,0,1982,1983,5,70,0,0,1983, - 1984,5,79,0,0,1984,1985,5,82,0,0,1985,1986,5,77,0,0,1986,1987,5,65,0,0, - 1987,1988,5,84,0,0,1988,358,1,0,0,0,1989,1990,5,84,0,0,1990,1991,5,79,0, - 0,1991,1992,5,85,0,0,1992,1993,5,67,0,0,1993,1994,5,72,0,0,1994,360,1,0, - 0,0,1995,1996,5,67,0,0,1996,1997,5,79,0,0,1997,1998,5,77,0,0,1998,1999, - 5,80,0,0,1999,2000,5,65,0,0,2000,2001,5,67,0,0,2001,2002,5,84,0,0,2002, - 362,1,0,0,0,2003,2004,5,67,0,0,2004,2005,5,79,0,0,2005,2006,5,78,0,0,2006, - 2007,5,67,0,0,2007,2008,5,65,0,0,2008,2009,5,84,0,0,2009,2010,5,69,0,0, - 2010,2011,5,78,0,0,2011,2012,5,65,0,0,2012,2013,5,84,0,0,2013,2014,5,69, - 0,0,2014,364,1,0,0,0,2015,2016,5,67,0,0,2016,2017,5,72,0,0,2017,2018,5, - 65,0,0,2018,2019,5,78,0,0,2019,2020,5,71,0,0,2020,2021,5,69,0,0,2021,366, - 1,0,0,0,2022,2023,5,67,0,0,2023,2024,5,65,0,0,2024,2025,5,83,0,0,2025,2026, - 5,67,0,0,2026,2027,5,65,0,0,2027,2028,5,68,0,0,2028,2029,5,69,0,0,2029, - 368,1,0,0,0,2030,2031,5,67,0,0,2031,2032,5,79,0,0,2032,2033,5,78,0,0,2033, - 2034,5,83,0,0,2034,2035,5,84,0,0,2035,2036,5,82,0,0,2036,2037,5,65,0,0, - 2037,2038,5,73,0,0,2038,2039,5,78,0,0,2039,2040,5,84,0,0,2040,370,1,0,0, - 0,2041,2042,5,82,0,0,2042,2043,5,69,0,0,2043,2044,5,83,0,0,2044,2045,5, - 84,0,0,2045,2046,5,82,0,0,2046,2047,5,73,0,0,2047,2048,5,67,0,0,2048,2049, - 5,84,0,0,2049,372,1,0,0,0,2050,2051,5,67,0,0,2051,2052,5,76,0,0,2052,2053, - 5,85,0,0,2053,2054,5,83,0,0,2054,2055,5,84,0,0,2055,2056,5,69,0,0,2056, - 2057,5,82,0,0,2057,2058,5,69,0,0,2058,2059,5,68,0,0,2059,374,1,0,0,0,2060, - 2061,5,83,0,0,2061,2062,5,79,0,0,2062,2063,5,82,0,0,2063,2064,5,84,0,0, - 2064,2065,5,69,0,0,2065,2066,5,68,0,0,2066,376,1,0,0,0,2067,2068,5,80,0, - 0,2068,2069,5,85,0,0,2069,2070,5,82,0,0,2070,2071,5,71,0,0,2071,2072,5, - 69,0,0,2072,378,1,0,0,0,2073,2074,5,73,0,0,2074,2075,5,78,0,0,2075,2076, - 5,80,0,0,2076,2077,5,85,0,0,2077,2078,5,84,0,0,2078,2079,5,70,0,0,2079, - 2080,5,79,0,0,2080,2081,5,82,0,0,2081,2082,5,77,0,0,2082,2083,5,65,0,0, - 2083,2084,5,84,0,0,2084,380,1,0,0,0,2085,2086,5,79,0,0,2086,2087,5,85,0, - 0,2087,2088,5,84,0,0,2088,2089,5,80,0,0,2089,2090,5,85,0,0,2090,2091,5, - 84,0,0,2091,2092,5,70,0,0,2092,2093,5,79,0,0,2093,2094,5,82,0,0,2094,2095, - 5,77,0,0,2095,2096,5,65,0,0,2096,2097,5,84,0,0,2097,382,1,0,0,0,2098,2099, - 5,68,0,0,2099,2100,5,65,0,0,2100,2101,5,84,0,0,2101,2102,5,65,0,0,2102, - 2103,5,66,0,0,2103,2104,5,65,0,0,2104,2105,5,83,0,0,2105,2106,5,69,0,0, - 2106,384,1,0,0,0,2107,2108,5,68,0,0,2108,2109,5,65,0,0,2109,2110,5,84,0, - 0,2110,2111,5,65,0,0,2111,2112,5,66,0,0,2112,2113,5,65,0,0,2113,2114,5, - 83,0,0,2114,2115,5,69,0,0,2115,2116,5,83,0,0,2116,386,1,0,0,0,2117,2118, - 5,68,0,0,2118,2119,5,70,0,0,2119,2120,5,83,0,0,2120,388,1,0,0,0,2121,2122, - 5,84,0,0,2122,2123,5,82,0,0,2123,2124,5,85,0,0,2124,2125,5,78,0,0,2125, - 2126,5,67,0,0,2126,2127,5,65,0,0,2127,2128,5,84,0,0,2128,2129,5,69,0,0, - 2129,390,1,0,0,0,2130,2131,5,65,0,0,2131,2132,5,78,0,0,2132,2133,5,65,0, - 0,2133,2134,5,76,0,0,2134,2135,5,89,0,0,2135,2136,5,90,0,0,2136,2137,5, - 69,0,0,2137,392,1,0,0,0,2138,2139,5,67,0,0,2139,2140,5,79,0,0,2140,2141, - 5,77,0,0,2141,2142,5,80,0,0,2142,2143,5,85,0,0,2143,2144,5,84,0,0,2144, - 2145,5,69,0,0,2145,394,1,0,0,0,2146,2147,5,76,0,0,2147,2148,5,73,0,0,2148, - 2149,5,83,0,0,2149,2150,5,84,0,0,2150,396,1,0,0,0,2151,2152,5,83,0,0,2152, - 2153,5,84,0,0,2153,2154,5,65,0,0,2154,2155,5,84,0,0,2155,2156,5,73,0,0, - 2156,2157,5,83,0,0,2157,2158,5,84,0,0,2158,2159,5,73,0,0,2159,2160,5,67, - 0,0,2160,2161,5,83,0,0,2161,398,1,0,0,0,2162,2163,5,80,0,0,2163,2164,5, - 65,0,0,2164,2165,5,82,0,0,2165,2166,5,84,0,0,2166,2167,5,73,0,0,2167,2168, - 5,84,0,0,2168,2169,5,73,0,0,2169,2170,5,79,0,0,2170,2171,5,78,0,0,2171, - 2172,5,69,0,0,2172,2173,5,68,0,0,2173,400,1,0,0,0,2174,2175,5,69,0,0,2175, - 2176,5,88,0,0,2176,2177,5,84,0,0,2177,2178,5,69,0,0,2178,2179,5,82,0,0, - 2179,2180,5,78,0,0,2180,2181,5,65,0,0,2181,2182,5,76,0,0,2182,402,1,0,0, - 0,2183,2184,5,68,0,0,2184,2185,5,69,0,0,2185,2186,5,70,0,0,2186,2187,5, - 73,0,0,2187,2188,5,78,0,0,2188,2189,5,69,0,0,2189,2190,5,68,0,0,2190,404, - 1,0,0,0,2191,2192,5,82,0,0,2192,2193,5,69,0,0,2193,2194,5,86,0,0,2194,2195, - 5,79,0,0,2195,2196,5,75,0,0,2196,2197,5,69,0,0,2197,406,1,0,0,0,2198,2199, - 5,71,0,0,2199,2200,5,82,0,0,2200,2201,5,65,0,0,2201,2202,5,78,0,0,2202, - 2203,5,84,0,0,2203,408,1,0,0,0,2204,2205,5,76,0,0,2205,2206,5,79,0,0,2206, - 2207,5,67,0,0,2207,2208,5,75,0,0,2208,410,1,0,0,0,2209,2210,5,85,0,0,2210, - 2211,5,78,0,0,2211,2212,5,76,0,0,2212,2213,5,79,0,0,2213,2214,5,67,0,0, - 2214,2215,5,75,0,0,2215,412,1,0,0,0,2216,2217,5,77,0,0,2217,2218,5,83,0, - 0,2218,2219,5,67,0,0,2219,2220,5,75,0,0,2220,414,1,0,0,0,2221,2222,5,82, - 0,0,2222,2223,5,69,0,0,2223,2224,5,80,0,0,2224,2225,5,65,0,0,2225,2226, - 5,73,0,0,2226,2227,5,82,0,0,2227,416,1,0,0,0,2228,2229,5,82,0,0,2229,2230, - 5,69,0,0,2230,2231,5,67,0,0,2231,2232,5,79,0,0,2232,2233,5,86,0,0,2233, - 2234,5,69,0,0,2234,2235,5,82,0,0,2235,418,1,0,0,0,2236,2237,5,69,0,0,2237, - 2238,5,88,0,0,2238,2239,5,80,0,0,2239,2240,5,79,0,0,2240,2241,5,82,0,0, - 2241,2242,5,84,0,0,2242,420,1,0,0,0,2243,2244,5,73,0,0,2244,2245,5,77,0, - 0,2245,2246,5,80,0,0,2246,2247,5,79,0,0,2247,2248,5,82,0,0,2248,2249,5, - 84,0,0,2249,422,1,0,0,0,2250,2251,5,76,0,0,2251,2252,5,79,0,0,2252,2253, - 5,65,0,0,2253,2254,5,68,0,0,2254,424,1,0,0,0,2255,2256,5,85,0,0,2256,2257, - 5,78,0,0,2257,2258,5,76,0,0,2258,2259,5,79,0,0,2259,2260,5,65,0,0,2260, - 2261,5,68,0,0,2261,426,1,0,0,0,2262,2263,5,82,0,0,2263,2264,5,79,0,0,2264, - 2265,5,76,0,0,2265,2266,5,69,0,0,2266,428,1,0,0,0,2267,2268,5,82,0,0,2268, - 2269,5,79,0,0,2269,2270,5,76,0,0,2270,2271,5,69,0,0,2271,2272,5,83,0,0, - 2272,430,1,0,0,0,2273,2274,5,67,0,0,2274,2275,5,79,0,0,2275,2276,5,77,0, - 0,2276,2277,5,80,0,0,2277,2278,5,65,0,0,2278,2279,5,67,0,0,2279,2280,5, - 84,0,0,2280,2281,5,73,0,0,2281,2282,5,79,0,0,2282,2283,5,78,0,0,2283,2284, - 5,83,0,0,2284,432,1,0,0,0,2285,2286,5,80,0,0,2286,2287,5,82,0,0,2287,2288, - 5,73,0,0,2288,2289,5,78,0,0,2289,2290,5,67,0,0,2290,2291,5,73,0,0,2291, - 2292,5,80,0,0,2292,2293,5,65,0,0,2293,2294,5,76,0,0,2294,2295,5,83,0,0, - 2295,434,1,0,0,0,2296,2297,5,84,0,0,2297,2298,5,82,0,0,2298,2299,5,65,0, - 0,2299,2300,5,78,0,0,2300,2301,5,83,0,0,2301,2302,5,65,0,0,2302,2303,5, - 67,0,0,2303,2304,5,84,0,0,2304,2305,5,73,0,0,2305,2306,5,79,0,0,2306,2307, - 5,78,0,0,2307,2308,5,83,0,0,2308,436,1,0,0,0,2309,2310,5,73,0,0,2310,2311, - 5,78,0,0,2311,2312,5,68,0,0,2312,2313,5,69,0,0,2313,2314,5,88,0,0,2314, - 438,1,0,0,0,2315,2316,5,73,0,0,2316,2317,5,78,0,0,2317,2318,5,68,0,0,2318, - 2319,5,69,0,0,2319,2320,5,88,0,0,2320,2321,5,69,0,0,2321,2322,5,83,0,0, - 2322,440,1,0,0,0,2323,2324,5,76,0,0,2324,2325,5,79,0,0,2325,2326,5,67,0, - 0,2326,2327,5,75,0,0,2327,2328,5,83,0,0,2328,442,1,0,0,0,2329,2330,5,79, - 0,0,2330,2331,5,80,0,0,2331,2332,5,84,0,0,2332,2333,5,73,0,0,2333,2334, - 5,79,0,0,2334,2335,5,78,0,0,2335,444,1,0,0,0,2336,2337,5,65,0,0,2337,2338, - 5,78,0,0,2338,2339,5,84,0,0,2339,2340,5,73,0,0,2340,446,1,0,0,0,2341,2342, - 5,76,0,0,2342,2343,5,79,0,0,2343,2344,5,67,0,0,2344,2345,5,65,0,0,2345, - 2346,5,76,0,0,2346,448,1,0,0,0,2347,2348,5,73,0,0,2348,2349,5,78,0,0,2349, - 2350,5,80,0,0,2350,2351,5,65,0,0,2351,2352,5,84,0,0,2352,2353,5,72,0,0, - 2353,450,1,0,0,0,2354,2355,5,87,0,0,2355,2356,5,65,0,0,2356,2357,5,84,0, - 0,2357,2358,5,69,0,0,2358,2359,5,82,0,0,2359,2360,5,77,0,0,2360,2361,5, - 65,0,0,2361,2362,5,82,0,0,2362,2363,5,75,0,0,2363,452,1,0,0,0,2364,2365, - 5,85,0,0,2365,2366,5,78,0,0,2366,2367,5,78,0,0,2367,2368,5,69,0,0,2368, - 2369,5,83,0,0,2369,2370,5,84,0,0,2370,454,1,0,0,0,2371,2372,5,77,0,0,2372, - 2373,5,65,0,0,2373,2374,5,84,0,0,2374,2375,5,67,0,0,2375,2376,5,72,0,0, - 2376,456,1,0,0,0,2377,2378,5,78,0,0,2378,2379,5,69,0,0,2379,2380,5,88,0, - 0,2380,2381,5,84,0,0,2381,458,1,0,0,0,2382,2383,5,87,0,0,2383,2384,5,73, - 0,0,2384,2385,5,84,0,0,2385,2386,5,72,0,0,2386,2387,5,73,0,0,2387,2388, - 5,78,0,0,2388,460,1,0,0,0,2389,2390,5,87,0,0,2390,2391,5,83,0,0,2391,462, - 1,0,0,0,2392,2393,5,83,0,0,2393,2394,5,89,0,0,2394,2395,5,83,0,0,2395,2396, - 5,84,0,0,2396,2397,5,69,0,0,2397,2398,5,77,0,0,2398,464,1,0,0,0,2399,2400, - 5,73,0,0,2400,2401,5,78,0,0,2401,2402,5,67,0,0,2402,2403,5,76,0,0,2403, - 2404,5,85,0,0,2404,2405,5,68,0,0,2405,2406,5,73,0,0,2406,2407,5,78,0,0, - 2407,2408,5,71,0,0,2408,466,1,0,0,0,2409,2410,5,69,0,0,2410,2411,5,88,0, - 0,2411,2412,5,67,0,0,2412,2413,5,76,0,0,2413,2414,5,85,0,0,2414,2415,5, - 68,0,0,2415,2416,5,73,0,0,2416,2417,5,78,0,0,2417,2418,5,71,0,0,2418,468, - 1,0,0,0,2419,2420,5,79,0,0,2420,2421,5,86,0,0,2421,2422,5,69,0,0,2422,2423, - 5,82,0,0,2423,2424,5,87,0,0,2424,2425,5,82,0,0,2425,2426,5,73,0,0,2426, - 2427,5,84,0,0,2427,2428,5,73,0,0,2428,2429,5,78,0,0,2429,2430,5,71,0,0, - 2430,470,1,0,0,0,2431,2432,5,67,0,0,2432,2433,5,79,0,0,2433,2434,5,78,0, - 0,2434,2435,5,83,0,0,2435,2436,5,84,0,0,2436,2437,5,82,0,0,2437,2438,5, - 65,0,0,2438,2439,5,73,0,0,2439,2440,5,78,0,0,2440,2441,5,84,0,0,2441,2442, - 5,83,0,0,2442,472,1,0,0,0,2443,2444,5,71,0,0,2444,2445,5,69,0,0,2445,2446, - 5,78,0,0,2446,2447,5,69,0,0,2447,2448,5,82,0,0,2448,2449,5,65,0,0,2449, - 2450,5,84,0,0,2450,2451,5,69,0,0,2451,2452,5,68,0,0,2452,474,1,0,0,0,2453, - 2454,5,87,0,0,2454,2455,5,65,0,0,2455,2456,5,84,0,0,2456,2457,5,69,0,0, - 2457,2458,5,82,0,0,2458,2459,5,77,0,0,2459,2460,5,65,0,0,2460,2461,5,82, - 0,0,2461,2462,5,75,0,0,2462,2463,5,83,0,0,2463,476,1,0,0,0,2464,2465,5, - 67,0,0,2465,2466,5,65,0,0,2466,2467,5,84,0,0,2467,2468,5,65,0,0,2468,2469, - 5,76,0,0,2469,2470,5,79,0,0,2470,2471,5,71,0,0,2471,478,1,0,0,0,2472,2473, - 5,76,0,0,2473,2474,5,65,0,0,2474,2475,5,78,0,0,2475,2476,5,71,0,0,2476, - 2477,5,85,0,0,2477,2478,5,65,0,0,2478,2479,5,71,0,0,2479,2480,5,69,0,0, - 2480,480,1,0,0,0,2481,2482,5,74,0,0,2482,2483,5,65,0,0,2483,2484,5,86,0, - 0,2484,2485,5,65,0,0,2485,482,1,0,0,0,2486,2487,5,83,0,0,2487,2488,5,67, - 0,0,2488,2489,5,65,0,0,2489,2490,5,76,0,0,2490,2491,5,65,0,0,2491,484,1, - 0,0,0,2492,2493,5,80,0,0,2493,2494,5,89,0,0,2494,2495,5,84,0,0,2495,2496, - 5,72,0,0,2496,2497,5,79,0,0,2497,2498,5,78,0,0,2498,486,1,0,0,0,2499,2500, - 5,74,0,0,2500,2501,5,65,0,0,2501,2502,5,82,0,0,2502,488,1,0,0,0,2503,2504, - 5,70,0,0,2504,2505,5,73,0,0,2505,2506,5,76,0,0,2506,2507,5,69,0,0,2507, - 490,1,0,0,0,2508,2509,5,80,0,0,2509,2510,5,89,0,0,2510,2511,5,84,0,0,2511, - 2512,5,72,0,0,2512,2513,5,79,0,0,2513,2514,5,78,0,0,2514,2515,5,95,0,0, - 2515,2516,5,70,0,0,2516,2517,5,73,0,0,2517,2518,5,76,0,0,2518,2519,5,69, - 0,0,2519,2520,5,83,0,0,2520,492,1,0,0,0,2521,2522,5,80,0,0,2522,2523,5, - 89,0,0,2523,2524,5,84,0,0,2524,2525,5,72,0,0,2525,2526,5,79,0,0,2526,2527, - 5,78,0,0,2527,2528,5,95,0,0,2528,2529,5,82,0,0,2529,2530,5,69,0,0,2530, - 2531,5,81,0,0,2531,2532,5,85,0,0,2532,2533,5,73,0,0,2533,2534,5,82,0,0, - 2534,2535,5,69,0,0,2535,2536,5,77,0,0,2536,2537,5,69,0,0,2537,2538,5,78, - 0,0,2538,2539,5,84,0,0,2539,2540,5,83,0,0,2540,494,1,0,0,0,2541,2542,5, - 80,0,0,2542,2543,5,89,0,0,2543,2544,5,84,0,0,2544,2545,5,72,0,0,2545,2546, - 5,79,0,0,2546,2547,5,78,0,0,2547,2548,5,95,0,0,2548,2549,5,68,0,0,2549, - 2550,5,69,0,0,2550,2551,5,80,0,0,2551,2552,5,69,0,0,2552,2553,5,78,0,0, - 2553,2554,5,68,0,0,2554,2555,5,69,0,0,2555,2556,5,78,0,0,2556,2557,5,67, - 0,0,2557,2558,5,73,0,0,2558,2559,5,69,0,0,2559,2560,5,83,0,0,2560,496,1, - 0,0,0,2561,2562,5,80,0,0,2562,2563,5,89,0,0,2563,2564,5,84,0,0,2564,2565, - 5,72,0,0,2565,2566,5,79,0,0,2566,2567,5,78,0,0,2567,2568,5,95,0,0,2568, - 2569,5,74,0,0,2569,2570,5,65,0,0,2570,2571,5,82,0,0,2571,498,1,0,0,0,2572, - 2573,5,80,0,0,2573,2574,5,89,0,0,2574,2575,5,84,0,0,2575,2576,5,72,0,0, - 2576,2577,5,79,0,0,2577,2578,5,78,0,0,2578,2579,5,95,0,0,2579,2580,5,65, - 0,0,2580,2581,5,82,0,0,2581,2582,5,67,0,0,2582,2583,5,72,0,0,2583,2584, - 5,73,0,0,2584,2585,5,86,0,0,2585,2586,5,69,0,0,2586,2587,5,83,0,0,2587, - 500,1,0,0,0,2588,2589,5,80,0,0,2589,2590,5,89,0,0,2590,2591,5,84,0,0,2591, - 2592,5,72,0,0,2592,2593,5,79,0,0,2593,2594,5,78,0,0,2594,2595,5,95,0,0, - 2595,2596,5,80,0,0,2596,2597,5,65,0,0,2597,2598,5,82,0,0,2598,2599,5,65, - 0,0,2599,2600,5,77,0,0,2600,2601,5,69,0,0,2601,2602,5,84,0,0,2602,2603, - 5,69,0,0,2603,2604,5,82,0,0,2604,502,1,0,0,0,2605,2606,5,69,0,0,2606,2607, - 5,78,0,0,2607,2608,5,71,0,0,2608,2609,5,73,0,0,2609,2610,5,78,0,0,2610, - 2611,5,69,0,0,2611,504,1,0,0,0,2612,2613,5,67,0,0,2613,2614,5,65,0,0,2614, - 2615,5,84,0,0,2615,2616,5,65,0,0,2616,2617,5,76,0,0,2617,2618,5,79,0,0, - 2618,2619,5,71,0,0,2619,2620,5,83,0,0,2620,506,1,0,0,0,2621,2622,5,86,0, - 0,2622,2623,5,73,0,0,2623,2624,5,69,0,0,2624,2625,5,87,0,0,2625,2626,5, - 83,0,0,2626,508,1,0,0,0,2627,2628,5,74,0,0,2628,2629,5,65,0,0,2629,2630, - 5,82,0,0,2630,2631,5,83,0,0,2631,510,1,0,0,0,2632,2633,5,80,0,0,2633,2634, - 5,82,0,0,2634,2635,5,73,0,0,2635,2636,5,77,0,0,2636,2637,5,65,0,0,2637, - 2638,5,82,0,0,2638,2639,5,89,0,0,2639,512,1,0,0,0,2640,2641,5,85,0,0,2641, - 2642,5,78,0,0,2642,2643,5,73,0,0,2643,2644,5,81,0,0,2644,2645,5,85,0,0, - 2645,2646,5,69,0,0,2646,514,1,0,0,0,2647,2648,5,75,0,0,2648,2649,5,69,0, - 0,2649,2650,5,89,0,0,2650,516,1,0,0,0,2651,2652,5,80,0,0,2652,2653,5,69, - 0,0,2653,2654,5,82,0,0,2654,2655,5,73,0,0,2655,2656,5,79,0,0,2656,2657, - 5,68,0,0,2657,518,1,0,0,0,2658,2659,5,83,0,0,2659,2660,5,89,0,0,2660,2661, - 5,83,0,0,2661,2662,5,84,0,0,2662,2663,5,69,0,0,2663,2664,5,77,0,0,2664, - 2665,5,95,0,0,2665,2666,5,84,0,0,2666,2667,5,73,0,0,2667,2668,5,77,0,0, - 2668,2669,5,69,0,0,2669,520,1,0,0,0,2670,2671,5,69,0,0,2671,2672,5,78,0, - 0,2672,2673,5,70,0,0,2673,2674,5,79,0,0,2674,2675,5,82,0,0,2675,2676,5, - 67,0,0,2676,2677,5,69,0,0,2677,2678,5,68,0,0,2678,522,1,0,0,0,2679,2680, - 5,77,0,0,2680,2681,5,69,0,0,2681,2682,5,84,0,0,2682,2683,5,65,0,0,2683, - 2684,5,68,0,0,2684,2685,5,65,0,0,2685,2686,5,84,0,0,2686,2687,5,65,0,0, - 2687,524,1,0,0,0,2688,2689,5,86,0,0,2689,2690,5,73,0,0,2690,2691,5,82,0, - 0,2691,2692,5,84,0,0,2692,2693,5,85,0,0,2693,2694,5,65,0,0,2694,2695,5, - 76,0,0,2695,526,1,0,0,0,2696,2697,5,90,0,0,2697,2698,5,79,0,0,2698,2699, - 5,78,0,0,2699,2700,5,69,0,0,2700,528,1,0,0,0,2701,2702,5,83,0,0,2702,2703, - 5,84,0,0,2703,2704,5,82,0,0,2704,2705,5,73,0,0,2705,2706,5,78,0,0,2706, - 2707,5,71,0,0,2707,530,1,0,0,0,2708,2709,5,65,0,0,2709,2710,5,82,0,0,2710, - 2711,5,82,0,0,2711,2712,5,65,0,0,2712,2713,5,89,0,0,2713,532,1,0,0,0,2714, - 2715,5,77,0,0,2715,2716,5,65,0,0,2716,2717,5,80,0,0,2717,534,1,0,0,0,2718, - 2719,5,67,0,0,2719,2720,5,72,0,0,2720,2721,5,65,0,0,2721,2722,5,82,0,0, - 2722,536,1,0,0,0,2723,2724,5,86,0,0,2724,2725,5,65,0,0,2725,2726,5,82,0, - 0,2726,2727,5,67,0,0,2727,2728,5,72,0,0,2728,2729,5,65,0,0,2729,2730,5, - 82,0,0,2730,538,1,0,0,0,2731,2732,5,66,0,0,2732,2733,5,73,0,0,2733,2734, - 5,78,0,0,2734,2735,5,65,0,0,2735,2736,5,82,0,0,2736,2737,5,89,0,0,2737, - 540,1,0,0,0,2738,2739,5,86,0,0,2739,2740,5,65,0,0,2740,2741,5,82,0,0,2741, - 2742,5,66,0,0,2742,2743,5,73,0,0,2743,2744,5,78,0,0,2744,2745,5,65,0,0, - 2745,2746,5,82,0,0,2746,2747,5,89,0,0,2747,542,1,0,0,0,2748,2749,5,66,0, - 0,2749,2750,5,89,0,0,2750,2751,5,84,0,0,2751,2752,5,69,0,0,2752,2753,5, - 83,0,0,2753,544,1,0,0,0,2754,2755,5,68,0,0,2755,2756,5,69,0,0,2756,2757, - 5,67,0,0,2757,2758,5,73,0,0,2758,2759,5,77,0,0,2759,2760,5,65,0,0,2760, - 2761,5,76,0,0,2761,546,1,0,0,0,2762,2763,5,68,0,0,2763,2764,5,69,0,0,2764, - 2765,5,67,0,0,2765,548,1,0,0,0,2766,2767,5,78,0,0,2767,2768,5,85,0,0,2768, - 2769,5,77,0,0,2769,2770,5,69,0,0,2770,2771,5,82,0,0,2771,2772,5,73,0,0, - 2772,2773,5,67,0,0,2773,550,1,0,0,0,2774,2775,5,84,0,0,2775,2776,5,73,0, - 0,2776,2777,5,78,0,0,2777,2778,5,89,0,0,2778,2779,5,73,0,0,2779,2780,5, - 78,0,0,2780,2781,5,84,0,0,2781,552,1,0,0,0,2782,2783,5,83,0,0,2783,2784, - 5,77,0,0,2784,2785,5,65,0,0,2785,2786,5,76,0,0,2786,2787,5,76,0,0,2787, - 2788,5,73,0,0,2788,2789,5,78,0,0,2789,2790,5,84,0,0,2790,554,1,0,0,0,2791, - 2792,5,73,0,0,2792,2793,5,78,0,0,2793,2794,5,84,0,0,2794,556,1,0,0,0,2795, - 2796,5,73,0,0,2796,2797,5,78,0,0,2797,2798,5,84,0,0,2798,2799,5,69,0,0, - 2799,2800,5,71,0,0,2800,2801,5,69,0,0,2801,2802,5,82,0,0,2802,558,1,0,0, - 0,2803,2804,5,66,0,0,2804,2805,5,73,0,0,2805,2806,5,71,0,0,2806,2807,5, - 73,0,0,2807,2808,5,78,0,0,2808,2809,5,84,0,0,2809,560,1,0,0,0,2810,2811, - 5,70,0,0,2811,2812,5,76,0,0,2812,2813,5,79,0,0,2813,2814,5,65,0,0,2814, - 2815,5,84,0,0,2815,562,1,0,0,0,2816,2817,5,68,0,0,2817,2818,5,79,0,0,2818, - 2819,5,85,0,0,2819,2820,5,66,0,0,2820,2821,5,76,0,0,2821,2822,5,69,0,0, - 2822,564,1,0,0,0,2823,2824,5,68,0,0,2824,2825,5,65,0,0,2825,2826,5,84,0, - 0,2826,2827,5,69,0,0,2827,566,1,0,0,0,2828,2829,5,84,0,0,2829,2830,5,73, - 0,0,2830,2831,5,77,0,0,2831,2832,5,69,0,0,2832,568,1,0,0,0,2833,2834,5, - 84,0,0,2834,2835,5,73,0,0,2835,2836,5,77,0,0,2836,2837,5,69,0,0,2837,2838, - 5,83,0,0,2838,2839,5,84,0,0,2839,2840,5,65,0,0,2840,2841,5,77,0,0,2841, - 2842,5,80,0,0,2842,570,1,0,0,0,2843,2844,5,84,0,0,2844,2845,5,73,0,0,2845, - 2846,5,77,0,0,2846,2847,5,69,0,0,2847,2848,5,83,0,0,2848,2849,5,84,0,0, - 2849,2850,5,65,0,0,2850,2851,5,77,0,0,2851,2852,5,80,0,0,2852,2853,5,95, - 0,0,2853,2854,5,76,0,0,2854,2855,5,84,0,0,2855,2856,5,90,0,0,2856,572,1, - 0,0,0,2857,2858,5,77,0,0,2858,2859,5,85,0,0,2859,2860,5,76,0,0,2860,2861, - 5,84,0,0,2861,2862,5,73,0,0,2862,2863,5,83,0,0,2863,2864,5,69,0,0,2864, - 2865,5,84,0,0,2865,574,1,0,0,0,2866,2867,5,66,0,0,2867,2868,5,79,0,0,2868, - 2869,5,79,0,0,2869,2870,5,76,0,0,2870,2871,5,69,0,0,2871,2872,5,65,0,0, - 2872,2873,5,78,0,0,2873,576,1,0,0,0,2874,2875,5,82,0,0,2875,2876,5,65,0, - 0,2876,2877,5,87,0,0,2877,578,1,0,0,0,2878,2879,5,82,0,0,2879,2880,5,79, - 0,0,2880,2881,5,87,0,0,2881,580,1,0,0,0,2882,2883,5,78,0,0,2883,2884,5, - 85,0,0,2884,2885,5,76,0,0,2885,2886,5,76,0,0,2886,582,1,0,0,0,2887,2888, - 5,68,0,0,2888,2889,5,65,0,0,2889,2890,5,84,0,0,2890,2891,5,69,0,0,2891, - 2892,5,84,0,0,2892,2893,5,73,0,0,2893,2894,5,77,0,0,2894,2895,5,69,0,0, - 2895,584,1,0,0,0,2896,2897,5,61,0,0,2897,586,1,0,0,0,2898,2899,5,62,0,0, - 2899,588,1,0,0,0,2900,2901,5,60,0,0,2901,590,1,0,0,0,2902,2903,5,33,0,0, - 2903,592,1,0,0,0,2904,2905,5,126,0,0,2905,594,1,0,0,0,2906,2907,5,124,0, - 0,2907,596,1,0,0,0,2908,2909,5,38,0,0,2909,598,1,0,0,0,2910,2911,5,94,0, - 0,2911,600,1,0,0,0,2912,2913,5,46,0,0,2913,602,1,0,0,0,2914,2915,5,91,0, - 0,2915,604,1,0,0,0,2916,2917,5,93,0,0,2917,606,1,0,0,0,2918,2919,5,40,0, - 0,2919,608,1,0,0,0,2920,2921,5,41,0,0,2921,610,1,0,0,0,2922,2923,5,44,0, - 0,2923,612,1,0,0,0,2924,2925,5,59,0,0,2925,614,1,0,0,0,2926,2927,5,64,0, - 0,2927,616,1,0,0,0,2928,2929,5,39,0,0,2929,618,1,0,0,0,2930,2931,5,34,0, - 0,2931,620,1,0,0,0,2932,2933,5,96,0,0,2933,622,1,0,0,0,2934,2935,5,58,0, - 0,2935,624,1,0,0,0,2936,2937,5,42,0,0,2937,626,1,0,0,0,2938,2939,5,95,0, - 0,2939,628,1,0,0,0,2940,2941,5,45,0,0,2941,630,1,0,0,0,2942,2943,5,43,0, - 0,2943,632,1,0,0,0,2944,2945,5,37,0,0,2945,634,1,0,0,0,2946,2947,5,124, - 0,0,2947,2948,5,124,0,0,2948,636,1,0,0,0,2949,2950,5,45,0,0,2950,2951,5, - 45,0,0,2951,638,1,0,0,0,2952,2953,5,47,0,0,2953,640,1,0,0,0,2954,2955,5, - 46,0,0,2955,2956,3,665,332,0,2956,642,1,0,0,0,2957,2958,7,2,0,0,2958,2959, - 3,655,327,0,2959,644,1,0,0,0,2960,2964,3,673,336,0,2961,2964,3,675,337, - 0,2962,2964,3,679,339,0,2963,2960,1,0,0,0,2963,2961,1,0,0,0,2963,2962,1, - 0,0,0,2964,646,1,0,0,0,2965,2967,3,669,334,0,2966,2965,1,0,0,0,2967,2968, - 1,0,0,0,2968,2966,1,0,0,0,2968,2969,1,0,0,0,2969,648,1,0,0,0,2970,2972, - 3,669,334,0,2971,2970,1,0,0,0,2972,2973,1,0,0,0,2973,2971,1,0,0,0,2973, - 2974,1,0,0,0,2974,2976,1,0,0,0,2975,2971,1,0,0,0,2975,2976,1,0,0,0,2976, - 2977,1,0,0,0,2977,2979,5,46,0,0,2978,2980,3,669,334,0,2979,2978,1,0,0,0, - 2980,2981,1,0,0,0,2981,2979,1,0,0,0,2981,2982,1,0,0,0,2982,3014,1,0,0,0, - 2983,2985,3,669,334,0,2984,2983,1,0,0,0,2985,2986,1,0,0,0,2986,2984,1,0, - 0,0,2986,2987,1,0,0,0,2987,2988,1,0,0,0,2988,2989,5,46,0,0,2989,2990,3, - 663,331,0,2990,3014,1,0,0,0,2991,2993,3,669,334,0,2992,2991,1,0,0,0,2993, - 2994,1,0,0,0,2994,2992,1,0,0,0,2994,2995,1,0,0,0,2995,2997,1,0,0,0,2996, - 2992,1,0,0,0,2996,2997,1,0,0,0,2997,2998,1,0,0,0,2998,3000,5,46,0,0,2999, - 3001,3,669,334,0,3000,2999,1,0,0,0,3001,3002,1,0,0,0,3002,3000,1,0,0,0, - 3002,3003,1,0,0,0,3003,3004,1,0,0,0,3004,3005,3,663,331,0,3005,3014,1,0, - 0,0,3006,3008,3,669,334,0,3007,3006,1,0,0,0,3008,3009,1,0,0,0,3009,3007, - 1,0,0,0,3009,3010,1,0,0,0,3010,3011,1,0,0,0,3011,3012,3,663,331,0,3012, - 3014,1,0,0,0,3013,2975,1,0,0,0,3013,2984,1,0,0,0,3013,2996,1,0,0,0,3013, - 3007,1,0,0,0,3014,650,1,0,0,0,3015,3016,3,677,338,0,3016,652,1,0,0,0,3017, - 3018,3,665,332,0,3018,654,1,0,0,0,3019,3020,3,667,333,0,3020,656,1,0,0, - 0,3021,3022,3,659,329,0,3022,658,1,0,0,0,3023,3027,7,3,0,0,3024,3026,8, - 4,0,0,3025,3024,1,0,0,0,3026,3029,1,0,0,0,3027,3025,1,0,0,0,3027,3028,1, - 0,0,0,3028,3031,1,0,0,0,3029,3027,1,0,0,0,3030,3023,1,0,0,0,3031,3032,1, - 0,0,0,3032,3030,1,0,0,0,3032,3033,1,0,0,0,3033,660,1,0,0,0,3034,3042,5, - 96,0,0,3035,3036,5,92,0,0,3036,3041,9,0,0,0,3037,3038,5,96,0,0,3038,3041, - 5,96,0,0,3039,3041,8,5,0,0,3040,3035,1,0,0,0,3040,3037,1,0,0,0,3040,3039, - 1,0,0,0,3041,3044,1,0,0,0,3042,3040,1,0,0,0,3042,3043,1,0,0,0,3043,3045, - 1,0,0,0,3044,3042,1,0,0,0,3045,3046,5,96,0,0,3046,662,1,0,0,0,3047,3049, - 5,69,0,0,3048,3050,7,6,0,0,3049,3048,1,0,0,0,3049,3050,1,0,0,0,3050,3052, - 1,0,0,0,3051,3053,3,669,334,0,3052,3051,1,0,0,0,3053,3054,1,0,0,0,3054, - 3052,1,0,0,0,3054,3055,1,0,0,0,3055,664,1,0,0,0,3056,3058,7,7,0,0,3057, - 3056,1,0,0,0,3058,3061,1,0,0,0,3059,3060,1,0,0,0,3059,3057,1,0,0,0,3060, - 3063,1,0,0,0,3061,3059,1,0,0,0,3062,3064,7,8,0,0,3063,3062,1,0,0,0,3064, - 3065,1,0,0,0,3065,3066,1,0,0,0,3065,3063,1,0,0,0,3066,3070,1,0,0,0,3067, - 3069,7,7,0,0,3068,3067,1,0,0,0,3069,3072,1,0,0,0,3070,3068,1,0,0,0,3070, - 3071,1,0,0,0,3071,666,1,0,0,0,3072,3070,1,0,0,0,3073,3075,7,9,0,0,3074, - 3073,1,0,0,0,3075,3078,1,0,0,0,3076,3077,1,0,0,0,3076,3074,1,0,0,0,3077, - 3080,1,0,0,0,3078,3076,1,0,0,0,3079,3081,7,10,0,0,3080,3079,1,0,0,0,3081, - 3082,1,0,0,0,3082,3083,1,0,0,0,3082,3080,1,0,0,0,3083,3087,1,0,0,0,3084, - 3086,7,9,0,0,3085,3084,1,0,0,0,3086,3089,1,0,0,0,3087,3085,1,0,0,0,3087, - 3088,1,0,0,0,3088,668,1,0,0,0,3089,3087,1,0,0,0,3090,3091,7,11,0,0,3091, - 670,1,0,0,0,3092,3093,7,12,0,0,3093,672,1,0,0,0,3094,3102,5,34,0,0,3095, - 3096,5,92,0,0,3096,3101,9,0,0,0,3097,3098,5,34,0,0,3098,3101,5,34,0,0,3099, - 3101,8,13,0,0,3100,3095,1,0,0,0,3100,3097,1,0,0,0,3100,3099,1,0,0,0,3101, - 3104,1,0,0,0,3102,3100,1,0,0,0,3102,3103,1,0,0,0,3103,3105,1,0,0,0,3104, - 3102,1,0,0,0,3105,3106,5,34,0,0,3106,674,1,0,0,0,3107,3115,5,39,0,0,3108, - 3109,5,92,0,0,3109,3114,9,0,0,0,3110,3111,5,39,0,0,3111,3114,5,39,0,0,3112, - 3114,8,14,0,0,3113,3108,1,0,0,0,3113,3110,1,0,0,0,3113,3112,1,0,0,0,3114, - 3117,1,0,0,0,3115,3113,1,0,0,0,3115,3116,1,0,0,0,3116,3118,1,0,0,0,3117, - 3115,1,0,0,0,3118,3119,5,39,0,0,3119,676,1,0,0,0,3120,3121,5,66,0,0,3121, - 3123,5,39,0,0,3122,3124,7,15,0,0,3123,3122,1,0,0,0,3124,3125,1,0,0,0,3125, - 3123,1,0,0,0,3125,3126,1,0,0,0,3126,3127,1,0,0,0,3127,3128,5,39,0,0,3128, - 678,1,0,0,0,3129,3137,5,96,0,0,3130,3131,5,92,0,0,3131,3136,9,0,0,0,3132, - 3133,5,96,0,0,3133,3136,5,96,0,0,3134,3136,8,5,0,0,3135,3130,1,0,0,0,3135, - 3132,1,0,0,0,3135,3134,1,0,0,0,3136,3139,1,0,0,0,3137,3135,1,0,0,0,3137, - 3138,1,0,0,0,3138,3140,1,0,0,0,3139,3137,1,0,0,0,3140,3141,5,96,0,0,3141, - 680,1,0,0,0,40,0,684,694,705,710,714,718,724,728,730,2963,2968,2973,2975, - 2981,2986,2994,2996,3002,3009,3013,3027,3032,3040,3042,3049,3054,3059,3065, - 3070,3076,3082,3087,3100,3102,3113,3115,3125,3135,3137,1,0,1,0]; + 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,249,1,250,1,250,1,250,1,250,1,250,1,250,1, + 250,1,250,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,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,254,1,254,1,254,1, + 254,1,254,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,256,1,256,1, + 256,1,256,1,256,1,256,1,256,1,257,1,257,1,257,1,257,1,258,1,258,1,258,1, + 258,1,258,1,258,1,258,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1, + 259,1,259,1,259,1,259,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1, + 260,1,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,262,1,262,1,262,1,262,1,263,1,263,1,263,1,263,1,263,1,264,1, + 264,1,264,1,264,1,264,1,264,1,264,1,265,1,265,1,265,1,265,1,266,1,266,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,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,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, + 272,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,274,1,274,1,274,1, + 274,1,274,1,274,1,274,1,274,1,274,1,274,1,274,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,275,1,275,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,278,1,278,1, + 278,1,278,1,279,1,279,1,279,1,279,1,279,1,280,1,280,1,280,1,280,1,280,1, + 281,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,283,1,283,1,283,1,283,1,283,1,283,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,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, + 290,1,290,1,290,1,290,1,290,1,290,1,290,1,290,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,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,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,300,1,300,1,300,1, + 300,1,300,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,303,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,303,1,304,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, + 306,1,306,1,306,1,306,1,307,1,307,1,307,1,307,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, + 311,1,311,1,312,1,312,1,313,1,313,1,314,1,314,1,315,1,315,1,316,1,316,1, + 317,1,317,1,318,1,318,1,319,1,319,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,1,329,1,330,1,330,1,331,1,331,1,332,1,332,1,333,1,333,1,334,1,334,1, + 335,1,335,1,336,1,336,1,337,1,337,1,337,1,338,1,338,1,338,1,339,1,339,1, + 340,1,340,1,341,1,341,1,341,1,342,1,342,1,342,3,342,3133,8,342,1,343,4, + 343,3136,8,343,11,343,12,343,3137,1,344,4,344,3141,8,344,11,344,12,344, + 3142,3,344,3145,8,344,1,344,1,344,4,344,3149,8,344,11,344,12,344,3150,1, + 344,4,344,3154,8,344,11,344,12,344,3155,1,344,1,344,1,344,1,344,4,344,3162, + 8,344,11,344,12,344,3163,3,344,3166,8,344,1,344,1,344,4,344,3170,8,344, + 11,344,12,344,3171,1,344,1,344,1,344,4,344,3177,8,344,11,344,12,344,3178, + 1,344,1,344,3,344,3183,8,344,1,345,1,345,1,346,1,346,1,347,1,347,1,348, + 1,348,1,348,1,349,1,349,5,349,3196,8,349,10,349,12,349,3199,9,349,4,349, + 3201,8,349,11,349,12,349,3202,1,350,1,350,1,350,1,350,1,350,1,350,5,350, + 3211,8,350,10,350,12,350,3214,9,350,1,350,1,350,1,351,1,351,3,351,3220, + 8,351,1,351,4,351,3223,8,351,11,351,12,351,3224,1,352,5,352,3228,8,352, + 10,352,12,352,3231,9,352,1,352,4,352,3234,8,352,11,352,12,352,3235,1,352, + 5,352,3239,8,352,10,352,12,352,3242,9,352,1,353,1,353,1,354,1,354,1,355, + 1,355,1,355,1,355,1,355,1,355,5,355,3254,8,355,10,355,12,355,3257,9,355, + 1,355,1,355,1,356,1,356,1,356,1,356,1,356,1,356,5,356,3267,8,356,10,356, + 12,356,3270,9,356,1,356,1,356,1,357,1,357,1,357,4,357,3277,8,357,11,357, + 12,357,3278,1,357,1,357,1,358,1,358,1,358,1,358,1,358,1,358,5,358,3289, + 8,358,10,358,12,358,3292,9,358,1,358,1,358,3,732,3229,3235,0,359,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,0,701,0,703,0,705,0,707,0,709,0,711,0,713,0,715, + 0,717,0,1,0,13,3,0,9,10,13,13,32,32,2,0,10,10,13,13,2,0,47,47,92,92,3,0, + 32,32,47,47,92,92,2,0,92,92,96,96,2,0,43,43,45,45,4,0,48,57,65,90,95,95, + 97,122,3,0,65,90,95,95,97,122,1,0,48,57,2,0,65,90,97,122,2,0,34,34,92,92, + 2,0,39,39,92,92,1,0,48,49,3327,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,1,720,1,0,0,0,3,726,1,0,0,0,5,768,1,0,0,0,7,772,1, + 0,0,0,9,779,1,0,0,0,11,784,1,0,0,0,13,788,1,0,0,0,15,791,1,0,0,0,17,795, + 1,0,0,0,19,799,1,0,0,0,21,808,1,0,0,0,23,814,1,0,0,0,25,820,1,0,0,0,27, + 823,1,0,0,0,29,832,1,0,0,0,31,837,1,0,0,0,33,842,1,0,0,0,35,849,1,0,0,0, + 37,855,1,0,0,0,39,862,1,0,0,0,41,868,1,0,0,0,43,871,1,0,0,0,45,874,1,0, + 0,0,47,878,1,0,0,0,49,881,1,0,0,0,51,885,1,0,0,0,53,888,1,0,0,0,55,895, + 1,0,0,0,57,903,1,0,0,0,59,908,1,0,0,0,61,914,1,0,0,0,63,917,1,0,0,0,65, + 922,1,0,0,0,67,928,1,0,0,0,69,934,1,0,0,0,71,938,1,0,0,0,73,943,1,0,0,0, + 75,947,1,0,0,0,77,956,1,0,0,0,79,961,1,0,0,0,81,966,1,0,0,0,83,971,1,0, + 0,0,85,976,1,0,0,0,87,982,1,0,0,0,89,986,1,0,0,0,91,991,1,0,0,0,93,997, + 1,0,0,0,95,1003,1,0,0,0,97,1009,1,0,0,0,99,1014,1,0,0,0,101,1019,1,0,0, + 0,103,1025,1,0,0,0,105,1030,1,0,0,0,107,1035,1,0,0,0,109,1043,1,0,0,0,111, + 1046,1,0,0,0,113,1052,1,0,0,0,115,1060,1,0,0,0,117,1067,1,0,0,0,119,1072, + 1,0,0,0,121,1082,1,0,0,0,123,1088,1,0,0,0,125,1093,1,0,0,0,127,1103,1,0, + 0,0,129,1113,1,0,0,0,131,1123,1,0,0,0,133,1131,1,0,0,0,135,1137,1,0,0,0, + 137,1143,1,0,0,0,139,1148,1,0,0,0,141,1153,1,0,0,0,143,1161,1,0,0,0,145, + 1168,1,0,0,0,147,1175,1,0,0,0,149,1181,1,0,0,0,151,1191,1,0,0,0,153,1196, + 1,0,0,0,155,1204,1,0,0,0,157,1212,1,0,0,0,159,1222,1,0,0,0,161,1229,1,0, + 0,0,163,1236,1,0,0,0,165,1243,1,0,0,0,167,1248,1,0,0,0,169,1257,1,0,0,0, + 171,1265,1,0,0,0,173,1270,1,0,0,0,175,1285,1,0,0,0,177,1305,1,0,0,0,179, + 1320,1,0,0,0,181,1327,1,0,0,0,183,1335,1,0,0,0,185,1343,1,0,0,0,187,1348, + 1,0,0,0,189,1353,1,0,0,0,191,1358,1,0,0,0,193,1365,1,0,0,0,195,1373,1,0, + 0,0,197,1380,1,0,0,0,199,1384,1,0,0,0,201,1391,1,0,0,0,203,1399,1,0,0,0, + 205,1410,1,0,0,0,207,1420,1,0,0,0,209,1425,1,0,0,0,211,1431,1,0,0,0,213, + 1438,1,0,0,0,215,1447,1,0,0,0,217,1457,1,0,0,0,219,1460,1,0,0,0,221,1472, + 1,0,0,0,223,1481,1,0,0,0,225,1487,1,0,0,0,227,1494,1,0,0,0,229,1501,1,0, + 0,0,231,1509,1,0,0,0,233,1513,1,0,0,0,235,1519,1,0,0,0,237,1524,1,0,0,0, + 239,1530,1,0,0,0,241,1542,1,0,0,0,243,1549,1,0,0,0,245,1558,1,0,0,0,247, + 1564,1,0,0,0,249,1571,1,0,0,0,251,1576,1,0,0,0,253,1584,1,0,0,0,255,1593, + 1,0,0,0,257,1596,1,0,0,0,259,1605,1,0,0,0,261,1613,1,0,0,0,263,1619,1,0, + 0,0,265,1623,1,0,0,0,267,1634,1,0,0,0,269,1641,1,0,0,0,271,1645,1,0,0,0, + 273,1648,1,0,0,0,275,1653,1,0,0,0,277,1661,1,0,0,0,279,1672,1,0,0,0,281, + 1682,1,0,0,0,283,1692,1,0,0,0,285,1699,1,0,0,0,287,1705,1,0,0,0,289,1711, + 1,0,0,0,291,1727,1,0,0,0,293,1740,1,0,0,0,295,1753,1,0,0,0,297,1763,1,0, + 0,0,299,1770,1,0,0,0,301,1781,1,0,0,0,303,1792,1,0,0,0,305,1798,1,0,0,0, + 307,1803,1,0,0,0,309,1811,1,0,0,0,311,1817,1,0,0,0,313,1827,1,0,0,0,315, + 1836,1,0,0,0,317,1845,1,0,0,0,319,1853,1,0,0,0,321,1859,1,0,0,0,323,1865, + 1,0,0,0,325,1873,1,0,0,0,327,1878,1,0,0,0,329,1888,1,0,0,0,331,1895,1,0, + 0,0,333,1905,1,0,0,0,335,1913,1,0,0,0,337,1919,1,0,0,0,339,1933,1,0,0,0, + 341,1946,1,0,0,0,343,1954,1,0,0,0,345,1961,1,0,0,0,347,1968,1,0,0,0,349, + 1980,1,0,0,0,351,1989,1,0,0,0,353,1998,1,0,0,0,355,2006,1,0,0,0,357,2016, + 1,0,0,0,359,2027,1,0,0,0,361,2033,1,0,0,0,363,2041,1,0,0,0,365,2053,1,0, + 0,0,367,2060,1,0,0,0,369,2068,1,0,0,0,371,2079,1,0,0,0,373,2088,1,0,0,0, + 375,2098,1,0,0,0,377,2105,1,0,0,0,379,2111,1,0,0,0,381,2123,1,0,0,0,383, + 2136,1,0,0,0,385,2145,1,0,0,0,387,2155,1,0,0,0,389,2159,1,0,0,0,391,2168, + 1,0,0,0,393,2176,1,0,0,0,395,2184,1,0,0,0,397,2189,1,0,0,0,399,2200,1,0, + 0,0,401,2212,1,0,0,0,403,2221,1,0,0,0,405,2229,1,0,0,0,407,2236,1,0,0,0, + 409,2242,1,0,0,0,411,2247,1,0,0,0,413,2254,1,0,0,0,415,2259,1,0,0,0,417, + 2266,1,0,0,0,419,2274,1,0,0,0,421,2281,1,0,0,0,423,2288,1,0,0,0,425,2293, + 1,0,0,0,427,2300,1,0,0,0,429,2305,1,0,0,0,431,2311,1,0,0,0,433,2323,1,0, + 0,0,435,2334,1,0,0,0,437,2347,1,0,0,0,439,2353,1,0,0,0,441,2361,1,0,0,0, + 443,2367,1,0,0,0,445,2374,1,0,0,0,447,2379,1,0,0,0,449,2385,1,0,0,0,451, + 2392,1,0,0,0,453,2402,1,0,0,0,455,2409,1,0,0,0,457,2415,1,0,0,0,459,2420, + 1,0,0,0,461,2427,1,0,0,0,463,2430,1,0,0,0,465,2437,1,0,0,0,467,2447,1,0, + 0,0,469,2457,1,0,0,0,471,2469,1,0,0,0,473,2481,1,0,0,0,475,2491,1,0,0,0, + 477,2502,1,0,0,0,479,2510,1,0,0,0,481,2519,1,0,0,0,483,2524,1,0,0,0,485, + 2530,1,0,0,0,487,2537,1,0,0,0,489,2541,1,0,0,0,491,2546,1,0,0,0,493,2559, + 1,0,0,0,495,2579,1,0,0,0,497,2599,1,0,0,0,499,2610,1,0,0,0,501,2626,1,0, + 0,0,503,2643,1,0,0,0,505,2650,1,0,0,0,507,2659,1,0,0,0,509,2665,1,0,0,0, + 511,2670,1,0,0,0,513,2678,1,0,0,0,515,2685,1,0,0,0,517,2689,1,0,0,0,519, + 2696,1,0,0,0,521,2708,1,0,0,0,523,2717,1,0,0,0,525,2726,1,0,0,0,527,2734, + 1,0,0,0,529,2739,1,0,0,0,531,2746,1,0,0,0,533,2750,1,0,0,0,535,2759,1,0, + 0,0,537,2770,1,0,0,0,539,2778,1,0,0,0,541,2783,1,0,0,0,543,2790,1,0,0,0, + 545,2795,1,0,0,0,547,2801,1,0,0,0,549,2809,1,0,0,0,551,2825,1,0,0,0,553, + 2834,1,0,0,0,555,2842,1,0,0,0,557,2846,1,0,0,0,559,2850,1,0,0,0,561,2855, + 1,0,0,0,563,2860,1,0,0,0,565,2867,1,0,0,0,567,2874,1,0,0,0,569,2880,1,0, + 0,0,571,2884,1,0,0,0,573,2889,1,0,0,0,575,2897,1,0,0,0,577,2904,1,0,0,0, + 579,2914,1,0,0,0,581,2920,1,0,0,0,583,2928,1,0,0,0,585,2932,1,0,0,0,587, + 2940,1,0,0,0,589,2948,1,0,0,0,591,2957,1,0,0,0,593,2961,1,0,0,0,595,2969, + 1,0,0,0,597,2976,1,0,0,0,599,2982,1,0,0,0,601,2989,1,0,0,0,603,2994,1,0, + 0,0,605,2999,1,0,0,0,607,3009,1,0,0,0,609,3023,1,0,0,0,611,3032,1,0,0,0, + 613,3040,1,0,0,0,615,3044,1,0,0,0,617,3048,1,0,0,0,619,3053,1,0,0,0,621, + 3062,1,0,0,0,623,3064,1,0,0,0,625,3066,1,0,0,0,627,3068,1,0,0,0,629,3070, + 1,0,0,0,631,3072,1,0,0,0,633,3074,1,0,0,0,635,3076,1,0,0,0,637,3078,1,0, + 0,0,639,3080,1,0,0,0,641,3082,1,0,0,0,643,3084,1,0,0,0,645,3086,1,0,0,0, + 647,3088,1,0,0,0,649,3090,1,0,0,0,651,3092,1,0,0,0,653,3094,1,0,0,0,655, + 3096,1,0,0,0,657,3098,1,0,0,0,659,3100,1,0,0,0,661,3102,1,0,0,0,663,3104, + 1,0,0,0,665,3106,1,0,0,0,667,3108,1,0,0,0,669,3110,1,0,0,0,671,3112,1,0, + 0,0,673,3114,1,0,0,0,675,3116,1,0,0,0,677,3119,1,0,0,0,679,3122,1,0,0,0, + 681,3124,1,0,0,0,683,3126,1,0,0,0,685,3132,1,0,0,0,687,3135,1,0,0,0,689, + 3182,1,0,0,0,691,3184,1,0,0,0,693,3186,1,0,0,0,695,3188,1,0,0,0,697,3190, + 1,0,0,0,699,3200,1,0,0,0,701,3204,1,0,0,0,703,3217,1,0,0,0,705,3229,1,0, + 0,0,707,3243,1,0,0,0,709,3245,1,0,0,0,711,3247,1,0,0,0,713,3260,1,0,0,0, + 715,3273,1,0,0,0,717,3282,1,0,0,0,719,721,7,0,0,0,720,719,1,0,0,0,721,722, + 1,0,0,0,722,720,1,0,0,0,722,723,1,0,0,0,723,724,1,0,0,0,724,725,6,0,0,0, + 725,2,1,0,0,0,726,727,5,47,0,0,727,728,5,42,0,0,728,732,1,0,0,0,729,731, + 9,0,0,0,730,729,1,0,0,0,731,734,1,0,0,0,732,733,1,0,0,0,732,730,1,0,0,0, + 733,735,1,0,0,0,734,732,1,0,0,0,735,736,5,42,0,0,736,737,5,47,0,0,737,738, + 1,0,0,0,738,739,6,1,0,0,739,4,1,0,0,0,740,741,5,45,0,0,741,744,5,45,0,0, + 742,744,5,35,0,0,743,740,1,0,0,0,743,742,1,0,0,0,744,748,1,0,0,0,745,747, + 8,1,0,0,746,745,1,0,0,0,747,750,1,0,0,0,748,746,1,0,0,0,748,749,1,0,0,0, + 749,756,1,0,0,0,750,748,1,0,0,0,751,753,5,13,0,0,752,751,1,0,0,0,752,753, + 1,0,0,0,753,754,1,0,0,0,754,757,5,10,0,0,755,757,5,0,0,1,756,752,1,0,0, + 0,756,755,1,0,0,0,757,769,1,0,0,0,758,759,5,45,0,0,759,760,5,45,0,0,760, + 766,1,0,0,0,761,763,5,13,0,0,762,761,1,0,0,0,762,763,1,0,0,0,763,764,1, + 0,0,0,764,767,5,10,0,0,765,767,5,0,0,1,766,762,1,0,0,0,766,765,1,0,0,0, + 767,769,1,0,0,0,768,743,1,0,0,0,768,758,1,0,0,0,769,770,1,0,0,0,770,771, + 6,2,0,0,771,6,1,0,0,0,772,773,5,83,0,0,773,774,5,69,0,0,774,775,5,76,0, + 0,775,776,5,69,0,0,776,777,5,67,0,0,777,778,5,84,0,0,778,8,1,0,0,0,779, + 780,5,70,0,0,780,781,5,82,0,0,781,782,5,79,0,0,782,783,5,77,0,0,783,10, + 1,0,0,0,784,785,5,65,0,0,785,786,5,68,0,0,786,787,5,68,0,0,787,12,1,0,0, + 0,788,789,5,65,0,0,789,790,5,83,0,0,790,14,1,0,0,0,791,792,5,65,0,0,792, + 793,5,76,0,0,793,794,5,76,0,0,794,16,1,0,0,0,795,796,5,65,0,0,796,797,5, + 78,0,0,797,798,5,89,0,0,798,18,1,0,0,0,799,800,5,68,0,0,800,801,5,73,0, + 0,801,802,5,83,0,0,802,803,5,84,0,0,803,804,5,73,0,0,804,805,5,78,0,0,805, + 806,5,67,0,0,806,807,5,84,0,0,807,20,1,0,0,0,808,809,5,87,0,0,809,810,5, + 72,0,0,810,811,5,69,0,0,811,812,5,82,0,0,812,813,5,69,0,0,813,22,1,0,0, + 0,814,815,5,71,0,0,815,816,5,82,0,0,816,817,5,79,0,0,817,818,5,85,0,0,818, + 819,5,80,0,0,819,24,1,0,0,0,820,821,5,66,0,0,821,822,5,89,0,0,822,26,1, + 0,0,0,823,824,5,71,0,0,824,825,5,82,0,0,825,826,5,79,0,0,826,827,5,85,0, + 0,827,828,5,80,0,0,828,829,5,73,0,0,829,830,5,78,0,0,830,831,5,71,0,0,831, + 28,1,0,0,0,832,833,5,83,0,0,833,834,5,69,0,0,834,835,5,84,0,0,835,836,5, + 83,0,0,836,30,1,0,0,0,837,838,5,67,0,0,838,839,5,85,0,0,839,840,5,66,0, + 0,840,841,5,69,0,0,841,32,1,0,0,0,842,843,5,82,0,0,843,844,5,79,0,0,844, + 845,5,76,0,0,845,846,5,76,0,0,846,847,5,85,0,0,847,848,5,80,0,0,848,34, + 1,0,0,0,849,850,5,79,0,0,850,851,5,82,0,0,851,852,5,68,0,0,852,853,5,69, + 0,0,853,854,5,82,0,0,854,36,1,0,0,0,855,856,5,72,0,0,856,857,5,65,0,0,857, + 858,5,86,0,0,858,859,5,73,0,0,859,860,5,78,0,0,860,861,5,71,0,0,861,38, + 1,0,0,0,862,863,5,76,0,0,863,864,5,73,0,0,864,865,5,77,0,0,865,866,5,73, + 0,0,866,867,5,84,0,0,867,40,1,0,0,0,868,869,5,65,0,0,869,870,5,84,0,0,870, + 42,1,0,0,0,871,872,5,79,0,0,872,873,5,82,0,0,873,44,1,0,0,0,874,875,5,65, + 0,0,875,876,5,78,0,0,876,877,5,68,0,0,877,46,1,0,0,0,878,879,5,73,0,0,879, + 880,5,78,0,0,880,48,1,0,0,0,881,882,5,78,0,0,882,883,5,79,0,0,883,884,5, + 84,0,0,884,50,1,0,0,0,885,886,5,78,0,0,886,887,5,79,0,0,887,52,1,0,0,0, + 888,889,5,69,0,0,889,890,5,88,0,0,890,891,5,73,0,0,891,892,5,83,0,0,892, + 893,5,84,0,0,893,894,5,83,0,0,894,54,1,0,0,0,895,896,5,66,0,0,896,897,5, + 69,0,0,897,898,5,84,0,0,898,899,5,87,0,0,899,900,5,69,0,0,900,901,5,69, + 0,0,901,902,5,78,0,0,902,56,1,0,0,0,903,904,5,76,0,0,904,905,5,73,0,0,905, + 906,5,75,0,0,906,907,5,69,0,0,907,58,1,0,0,0,908,909,5,82,0,0,909,910,5, + 76,0,0,910,911,5,73,0,0,911,912,5,75,0,0,912,913,5,69,0,0,913,60,1,0,0, + 0,914,915,5,73,0,0,915,916,5,83,0,0,916,62,1,0,0,0,917,918,5,84,0,0,918, + 919,5,82,0,0,919,920,5,85,0,0,920,921,5,69,0,0,921,64,1,0,0,0,922,923,5, + 70,0,0,923,924,5,65,0,0,924,925,5,76,0,0,925,926,5,83,0,0,926,927,5,69, + 0,0,927,66,1,0,0,0,928,929,5,78,0,0,929,930,5,85,0,0,930,931,5,76,0,0,931, + 932,5,76,0,0,932,933,5,83,0,0,933,68,1,0,0,0,934,935,5,65,0,0,935,936,5, + 83,0,0,936,937,5,67,0,0,937,70,1,0,0,0,938,939,5,68,0,0,939,940,5,69,0, + 0,940,941,5,83,0,0,941,942,5,67,0,0,942,72,1,0,0,0,943,944,5,70,0,0,944, + 945,5,79,0,0,945,946,5,82,0,0,946,74,1,0,0,0,947,948,5,73,0,0,948,949,5, + 78,0,0,949,950,5,84,0,0,950,951,5,69,0,0,951,952,5,82,0,0,952,953,5,86, + 0,0,953,954,5,65,0,0,954,955,5,76,0,0,955,76,1,0,0,0,956,957,5,67,0,0,957, + 958,5,65,0,0,958,959,5,83,0,0,959,960,5,69,0,0,960,78,1,0,0,0,961,962,5, + 87,0,0,962,963,5,72,0,0,963,964,5,69,0,0,964,965,5,78,0,0,965,80,1,0,0, + 0,966,967,5,84,0,0,967,968,5,72,0,0,968,969,5,69,0,0,969,970,5,78,0,0,970, + 82,1,0,0,0,971,972,5,69,0,0,972,973,5,76,0,0,973,974,5,83,0,0,974,975,5, + 69,0,0,975,84,1,0,0,0,976,977,5,66,0,0,977,978,5,69,0,0,978,979,5,71,0, + 0,979,980,5,73,0,0,980,981,5,78,0,0,981,86,1,0,0,0,982,983,5,69,0,0,983, + 984,5,78,0,0,984,985,5,68,0,0,985,88,1,0,0,0,986,987,5,74,0,0,987,988,5, + 79,0,0,988,989,5,73,0,0,989,990,5,78,0,0,990,90,1,0,0,0,991,992,5,67,0, + 0,992,993,5,82,0,0,993,994,5,79,0,0,994,995,5,83,0,0,995,996,5,83,0,0,996, + 92,1,0,0,0,997,998,5,79,0,0,998,999,5,85,0,0,999,1000,5,84,0,0,1000,1001, + 5,69,0,0,1001,1002,5,82,0,0,1002,94,1,0,0,0,1003,1004,5,73,0,0,1004,1005, + 5,78,0,0,1005,1006,5,78,0,0,1006,1007,5,69,0,0,1007,1008,5,82,0,0,1008, + 96,1,0,0,0,1009,1010,5,76,0,0,1010,1011,5,69,0,0,1011,1012,5,70,0,0,1012, + 1013,5,84,0,0,1013,98,1,0,0,0,1014,1015,5,83,0,0,1015,1016,5,69,0,0,1016, + 1017,5,77,0,0,1017,1018,5,73,0,0,1018,100,1,0,0,0,1019,1020,5,82,0,0,1020, + 1021,5,73,0,0,1021,1022,5,71,0,0,1022,1023,5,72,0,0,1023,1024,5,84,0,0, + 1024,102,1,0,0,0,1025,1026,5,70,0,0,1026,1027,5,85,0,0,1027,1028,5,76,0, + 0,1028,1029,5,76,0,0,1029,104,1,0,0,0,1030,1031,5,85,0,0,1031,1032,5,83, + 0,0,1032,1033,5,69,0,0,1033,1034,5,82,0,0,1034,106,1,0,0,0,1035,1036,5, + 78,0,0,1036,1037,5,65,0,0,1037,1038,5,84,0,0,1038,1039,5,85,0,0,1039,1040, + 5,82,0,0,1040,1041,5,65,0,0,1041,1042,5,76,0,0,1042,108,1,0,0,0,1043,1044, + 5,79,0,0,1044,1045,5,78,0,0,1045,110,1,0,0,0,1046,1047,5,80,0,0,1047,1048, + 5,73,0,0,1048,1049,5,86,0,0,1049,1050,5,79,0,0,1050,1051,5,84,0,0,1051, + 112,1,0,0,0,1052,1053,5,76,0,0,1053,1054,5,65,0,0,1054,1055,5,84,0,0,1055, + 1056,5,69,0,0,1056,1057,5,82,0,0,1057,1058,5,65,0,0,1058,1059,5,76,0,0, + 1059,114,1,0,0,0,1060,1061,5,87,0,0,1061,1062,5,73,0,0,1062,1063,5,78,0, + 0,1063,1064,5,68,0,0,1064,1065,5,79,0,0,1065,1066,5,87,0,0,1066,116,1,0, + 0,0,1067,1068,5,79,0,0,1068,1069,5,86,0,0,1069,1070,5,69,0,0,1070,1071, + 5,82,0,0,1071,118,1,0,0,0,1072,1073,5,80,0,0,1073,1074,5,65,0,0,1074,1075, + 5,82,0,0,1075,1076,5,84,0,0,1076,1077,5,73,0,0,1077,1078,5,84,0,0,1078, + 1079,5,73,0,0,1079,1080,5,79,0,0,1080,1081,5,78,0,0,1081,120,1,0,0,0,1082, + 1083,5,82,0,0,1083,1084,5,65,0,0,1084,1085,5,78,0,0,1085,1086,5,71,0,0, + 1086,1087,5,69,0,0,1087,122,1,0,0,0,1088,1089,5,82,0,0,1089,1090,5,79,0, + 0,1090,1091,5,87,0,0,1091,1092,5,83,0,0,1092,124,1,0,0,0,1093,1094,5,85, + 0,0,1094,1095,5,78,0,0,1095,1096,5,66,0,0,1096,1097,5,79,0,0,1097,1098, + 5,85,0,0,1098,1099,5,78,0,0,1099,1100,5,68,0,0,1100,1101,5,69,0,0,1101, + 1102,5,68,0,0,1102,126,1,0,0,0,1103,1104,5,80,0,0,1104,1105,5,82,0,0,1105, + 1106,5,69,0,0,1106,1107,5,67,0,0,1107,1108,5,69,0,0,1108,1109,5,68,0,0, + 1109,1110,5,73,0,0,1110,1111,5,78,0,0,1111,1112,5,71,0,0,1112,128,1,0,0, + 0,1113,1114,5,70,0,0,1114,1115,5,79,0,0,1115,1116,5,76,0,0,1116,1117,5, + 76,0,0,1117,1118,5,79,0,0,1118,1119,5,87,0,0,1119,1120,5,73,0,0,1120,1121, + 5,78,0,0,1121,1122,5,71,0,0,1122,130,1,0,0,0,1123,1124,5,67,0,0,1124,1125, + 5,85,0,0,1125,1126,5,82,0,0,1126,1127,5,82,0,0,1127,1128,5,69,0,0,1128, + 1129,5,78,0,0,1129,1130,5,84,0,0,1130,132,1,0,0,0,1131,1132,5,70,0,0,1132, + 1133,5,73,0,0,1133,1134,5,82,0,0,1134,1135,5,83,0,0,1135,1136,5,84,0,0, + 1136,134,1,0,0,0,1137,1138,5,65,0,0,1138,1139,5,70,0,0,1139,1140,5,84,0, + 0,1140,1141,5,69,0,0,1141,1142,5,82,0,0,1142,136,1,0,0,0,1143,1144,5,76, + 0,0,1144,1145,5,65,0,0,1145,1146,5,83,0,0,1146,1147,5,84,0,0,1147,138,1, + 0,0,0,1148,1149,5,87,0,0,1149,1150,5,73,0,0,1150,1151,5,84,0,0,1151,1152, + 5,72,0,0,1152,140,1,0,0,0,1153,1154,5,87,0,0,1154,1155,5,73,0,0,1155,1156, + 5,84,0,0,1156,1157,5,72,0,0,1157,1158,5,79,0,0,1158,1159,5,85,0,0,1159, + 1160,5,84,0,0,1160,142,1,0,0,0,1161,1162,5,86,0,0,1162,1163,5,65,0,0,1163, + 1164,5,76,0,0,1164,1165,5,85,0,0,1165,1166,5,69,0,0,1166,1167,5,83,0,0, + 1167,144,1,0,0,0,1168,1169,5,67,0,0,1169,1170,5,82,0,0,1170,1171,5,69,0, + 0,1171,1172,5,65,0,0,1172,1173,5,84,0,0,1173,1174,5,69,0,0,1174,146,1,0, + 0,0,1175,1176,5,84,0,0,1176,1177,5,65,0,0,1177,1178,5,66,0,0,1178,1179, + 5,76,0,0,1179,1180,5,69,0,0,1180,148,1,0,0,0,1181,1182,5,68,0,0,1182,1183, + 5,73,0,0,1183,1184,5,82,0,0,1184,1185,5,69,0,0,1185,1186,5,67,0,0,1186, + 1187,5,84,0,0,1187,1188,5,79,0,0,1188,1189,5,82,0,0,1189,1190,5,89,0,0, + 1190,150,1,0,0,0,1191,1192,5,86,0,0,1192,1193,5,73,0,0,1193,1194,5,69,0, + 0,1194,1195,5,87,0,0,1195,152,1,0,0,0,1196,1197,5,82,0,0,1197,1198,5,69, + 0,0,1198,1199,5,80,0,0,1199,1200,5,76,0,0,1200,1201,5,65,0,0,1201,1202, + 5,67,0,0,1202,1203,5,69,0,0,1203,154,1,0,0,0,1204,1205,5,69,0,0,1205,1206, + 5,88,0,0,1206,1207,5,69,0,0,1207,1208,5,67,0,0,1208,1209,5,85,0,0,1209, + 1210,5,84,0,0,1210,1211,5,69,0,0,1211,156,1,0,0,0,1212,1213,5,83,0,0,1213, + 1214,5,84,0,0,1214,1215,5,65,0,0,1215,1216,5,84,0,0,1216,1217,5,69,0,0, + 1217,1218,5,77,0,0,1218,1219,5,69,0,0,1219,1220,5,78,0,0,1220,1221,5,84, + 0,0,1221,158,1,0,0,0,1222,1223,5,73,0,0,1223,1224,5,78,0,0,1224,1225,5, + 83,0,0,1225,1226,5,69,0,0,1226,1227,5,82,0,0,1227,1228,5,84,0,0,1228,160, + 1,0,0,0,1229,1230,5,68,0,0,1230,1231,5,69,0,0,1231,1232,5,76,0,0,1232,1233, + 5,69,0,0,1233,1234,5,84,0,0,1234,1235,5,69,0,0,1235,162,1,0,0,0,1236,1237, + 5,82,0,0,1237,1238,5,69,0,0,1238,1239,5,77,0,0,1239,1240,5,79,0,0,1240, + 1241,5,86,0,0,1241,1242,5,69,0,0,1242,164,1,0,0,0,1243,1244,5,73,0,0,1244, + 1245,5,78,0,0,1245,1246,5,84,0,0,1246,1247,5,79,0,0,1247,166,1,0,0,0,1248, + 1249,5,68,0,0,1249,1250,5,69,0,0,1250,1251,5,83,0,0,1251,1252,5,67,0,0, + 1252,1253,5,82,0,0,1253,1254,5,73,0,0,1254,1255,5,66,0,0,1255,1256,5,69, + 0,0,1256,168,1,0,0,0,1257,1258,5,69,0,0,1258,1259,5,88,0,0,1259,1260,5, + 80,0,0,1260,1261,5,76,0,0,1261,1262,5,65,0,0,1262,1263,5,73,0,0,1263,1264, + 5,78,0,0,1264,170,1,0,0,0,1265,1266,5,80,0,0,1266,1267,5,76,0,0,1267,1268, + 5,65,0,0,1268,1269,5,78,0,0,1269,172,1,0,0,0,1270,1271,5,67,0,0,1271,1272, + 5,72,0,0,1272,1273,5,65,0,0,1273,1274,5,78,0,0,1274,1275,5,71,0,0,1275, + 1276,5,69,0,0,1276,1277,5,76,0,0,1277,1278,5,79,0,0,1278,1279,5,71,0,0, + 1279,1280,5,95,0,0,1280,1281,5,77,0,0,1281,1282,5,79,0,0,1282,1283,5,68, + 0,0,1283,1284,5,69,0,0,1284,174,1,0,0,0,1285,1286,5,74,0,0,1286,1287,5, + 83,0,0,1287,1288,5,79,0,0,1288,1289,5,78,0,0,1289,1290,5,95,0,0,1290,1291, + 5,69,0,0,1291,1292,5,88,0,0,1292,1293,5,69,0,0,1293,1294,5,67,0,0,1294, + 1295,5,85,0,0,1295,1296,5,84,0,0,1296,1297,5,73,0,0,1297,1298,5,79,0,0, + 1298,1299,5,78,0,0,1299,1300,5,95,0,0,1300,1301,5,80,0,0,1301,1302,5,76, + 0,0,1302,1303,5,65,0,0,1303,1304,5,78,0,0,1304,176,1,0,0,0,1305,1306,5, + 69,0,0,1306,1307,5,83,0,0,1307,1308,5,84,0,0,1308,1309,5,73,0,0,1309,1310, + 5,77,0,0,1310,1311,5,65,0,0,1311,1312,5,84,0,0,1312,1313,5,69,0,0,1313, + 1314,5,68,0,0,1314,1315,5,95,0,0,1315,1316,5,67,0,0,1316,1317,5,79,0,0, + 1317,1318,5,83,0,0,1318,1319,5,84,0,0,1319,178,1,0,0,0,1320,1321,5,70,0, + 0,1321,1322,5,79,0,0,1322,1323,5,82,0,0,1323,1324,5,77,0,0,1324,1325,5, + 65,0,0,1325,1326,5,84,0,0,1326,180,1,0,0,0,1327,1328,5,76,0,0,1328,1329, + 5,79,0,0,1329,1330,5,71,0,0,1330,1331,5,73,0,0,1331,1332,5,67,0,0,1332, + 1333,5,65,0,0,1333,1334,5,76,0,0,1334,182,1,0,0,0,1335,1336,5,67,0,0,1336, + 1337,5,79,0,0,1337,1338,5,68,0,0,1338,1339,5,69,0,0,1339,1340,5,71,0,0, + 1340,1341,5,69,0,0,1341,1342,5,78,0,0,1342,184,1,0,0,0,1343,1344,5,67,0, + 0,1344,1345,5,79,0,0,1345,1346,5,83,0,0,1346,1347,5,84,0,0,1347,186,1,0, + 0,0,1348,1349,5,67,0,0,1349,1350,5,65,0,0,1350,1351,5,83,0,0,1351,1352, + 5,84,0,0,1352,188,1,0,0,0,1353,1354,5,83,0,0,1354,1355,5,72,0,0,1355,1356, + 5,79,0,0,1356,1357,5,87,0,0,1357,190,1,0,0,0,1358,1359,5,84,0,0,1359,1360, + 5,65,0,0,1360,1361,5,66,0,0,1361,1362,5,76,0,0,1362,1363,5,69,0,0,1363, + 1364,5,83,0,0,1364,192,1,0,0,0,1365,1366,5,67,0,0,1366,1367,5,79,0,0,1367, + 1368,5,76,0,0,1368,1369,5,85,0,0,1369,1370,5,77,0,0,1370,1371,5,78,0,0, + 1371,1372,5,83,0,0,1372,194,1,0,0,0,1373,1374,5,67,0,0,1374,1375,5,79,0, + 0,1375,1376,5,76,0,0,1376,1377,5,85,0,0,1377,1378,5,77,0,0,1378,1379,5, + 78,0,0,1379,196,1,0,0,0,1380,1381,5,85,0,0,1381,1382,5,83,0,0,1382,1383, + 5,69,0,0,1383,198,1,0,0,0,1384,1385,5,77,0,0,1385,1386,5,79,0,0,1386,1387, + 5,68,0,0,1387,1388,5,85,0,0,1388,1389,5,76,0,0,1389,1390,5,69,0,0,1390, + 200,1,0,0,0,1391,1392,5,77,0,0,1392,1393,5,79,0,0,1393,1394,5,68,0,0,1394, + 1395,5,85,0,0,1395,1396,5,76,0,0,1396,1397,5,69,0,0,1397,1398,5,83,0,0, + 1398,202,1,0,0,0,1399,1400,5,80,0,0,1400,1401,5,65,0,0,1401,1402,5,82,0, + 0,1402,1403,5,84,0,0,1403,1404,5,73,0,0,1404,1405,5,84,0,0,1405,1406,5, + 73,0,0,1406,1407,5,79,0,0,1407,1408,5,78,0,0,1408,1409,5,83,0,0,1409,204, + 1,0,0,0,1410,1411,5,70,0,0,1411,1412,5,85,0,0,1412,1413,5,78,0,0,1413,1414, + 5,67,0,0,1414,1415,5,84,0,0,1415,1416,5,73,0,0,1416,1417,5,79,0,0,1417, + 1418,5,78,0,0,1418,1419,5,83,0,0,1419,206,1,0,0,0,1420,1421,5,68,0,0,1421, + 1422,5,82,0,0,1422,1423,5,79,0,0,1423,1424,5,80,0,0,1424,208,1,0,0,0,1425, + 1426,5,85,0,0,1426,1427,5,78,0,0,1427,1428,5,73,0,0,1428,1429,5,79,0,0, + 1429,1430,5,78,0,0,1430,210,1,0,0,0,1431,1432,5,69,0,0,1432,1433,5,88,0, + 0,1433,1434,5,67,0,0,1434,1435,5,69,0,0,1435,1436,5,80,0,0,1436,1437,5, + 84,0,0,1437,212,1,0,0,0,1438,1439,5,83,0,0,1439,1440,5,69,0,0,1440,1441, + 5,84,0,0,1441,1442,5,77,0,0,1442,1443,5,73,0,0,1443,1444,5,78,0,0,1444, + 1445,5,85,0,0,1445,1446,5,83,0,0,1446,214,1,0,0,0,1447,1448,5,73,0,0,1448, + 1449,5,78,0,0,1449,1450,5,84,0,0,1450,1451,5,69,0,0,1451,1452,5,82,0,0, + 1452,1453,5,83,0,0,1453,1454,5,69,0,0,1454,1455,5,67,0,0,1455,1456,5,84, + 0,0,1456,216,1,0,0,0,1457,1458,5,84,0,0,1458,1459,5,79,0,0,1459,218,1,0, + 0,0,1460,1461,5,84,0,0,1461,1462,5,65,0,0,1462,1463,5,66,0,0,1463,1464, + 5,76,0,0,1464,1465,5,69,0,0,1465,1466,5,83,0,0,1466,1467,5,65,0,0,1467, + 1468,5,77,0,0,1468,1469,5,80,0,0,1469,1470,5,76,0,0,1470,1471,5,69,0,0, + 1471,220,1,0,0,0,1472,1473,5,83,0,0,1473,1474,5,84,0,0,1474,1475,5,82,0, + 0,1475,1476,5,65,0,0,1476,1477,5,84,0,0,1477,1478,5,73,0,0,1478,1479,5, + 70,0,0,1479,1480,5,89,0,0,1480,222,1,0,0,0,1481,1482,5,65,0,0,1482,1483, + 5,76,0,0,1483,1484,5,84,0,0,1484,1485,5,69,0,0,1485,1486,5,82,0,0,1486, + 224,1,0,0,0,1487,1488,5,82,0,0,1488,1489,5,69,0,0,1489,1490,5,78,0,0,1490, + 1491,5,65,0,0,1491,1492,5,77,0,0,1492,1493,5,69,0,0,1493,226,1,0,0,0,1494, + 1495,5,83,0,0,1495,1496,5,84,0,0,1496,1497,5,82,0,0,1497,1498,5,85,0,0, + 1498,1499,5,67,0,0,1499,1500,5,84,0,0,1500,228,1,0,0,0,1501,1502,5,67,0, + 0,1502,1503,5,79,0,0,1503,1504,5,77,0,0,1504,1505,5,77,0,0,1505,1506,5, + 69,0,0,1506,1507,5,78,0,0,1507,1508,5,84,0,0,1508,230,1,0,0,0,1509,1510, + 5,83,0,0,1510,1511,5,69,0,0,1511,1512,5,84,0,0,1512,232,1,0,0,0,1513,1514, + 5,82,0,0,1514,1515,5,69,0,0,1515,1516,5,83,0,0,1516,1517,5,69,0,0,1517, + 1518,5,84,0,0,1518,234,1,0,0,0,1519,1520,5,68,0,0,1520,1521,5,65,0,0,1521, + 1522,5,84,0,0,1522,1523,5,65,0,0,1523,236,1,0,0,0,1524,1525,5,83,0,0,1525, + 1526,5,84,0,0,1526,1527,5,65,0,0,1527,1528,5,82,0,0,1528,1529,5,84,0,0, + 1529,238,1,0,0,0,1530,1531,5,84,0,0,1531,1532,5,82,0,0,1532,1533,5,65,0, + 0,1533,1534,5,78,0,0,1534,1535,5,83,0,0,1535,1536,5,65,0,0,1536,1537,5, + 67,0,0,1537,1538,5,84,0,0,1538,1539,5,73,0,0,1539,1540,5,79,0,0,1540,1541, + 5,78,0,0,1541,240,1,0,0,0,1542,1543,5,67,0,0,1543,1544,5,79,0,0,1544,1545, + 5,77,0,0,1545,1546,5,77,0,0,1546,1547,5,73,0,0,1547,1548,5,84,0,0,1548, + 242,1,0,0,0,1549,1550,5,82,0,0,1550,1551,5,79,0,0,1551,1552,5,76,0,0,1552, + 1553,5,76,0,0,1553,1554,5,66,0,0,1554,1555,5,65,0,0,1555,1556,5,67,0,0, + 1556,1557,5,75,0,0,1557,244,1,0,0,0,1558,1559,5,77,0,0,1559,1560,5,65,0, + 0,1560,1561,5,67,0,0,1561,1562,5,82,0,0,1562,1563,5,79,0,0,1563,246,1,0, + 0,0,1564,1565,5,73,0,0,1565,1566,5,71,0,0,1566,1567,5,78,0,0,1567,1568, + 5,79,0,0,1568,1569,5,82,0,0,1569,1570,5,69,0,0,1570,248,1,0,0,0,1571,1572, + 5,66,0,0,1572,1573,5,79,0,0,1573,1574,5,84,0,0,1574,1575,5,72,0,0,1575, + 250,1,0,0,0,1576,1577,5,76,0,0,1577,1578,5,69,0,0,1578,1579,5,65,0,0,1579, + 1580,5,68,0,0,1580,1581,5,73,0,0,1581,1582,5,78,0,0,1582,1583,5,71,0,0, + 1583,252,1,0,0,0,1584,1585,5,84,0,0,1585,1586,5,82,0,0,1586,1587,5,65,0, + 0,1587,1588,5,73,0,0,1588,1589,5,76,0,0,1589,1590,5,73,0,0,1590,1591,5, + 78,0,0,1591,1592,5,71,0,0,1592,254,1,0,0,0,1593,1594,5,73,0,0,1594,1595, + 5,70,0,0,1595,256,1,0,0,0,1596,1597,5,80,0,0,1597,1598,5,79,0,0,1598,1599, + 5,83,0,0,1599,1600,5,73,0,0,1600,1601,5,84,0,0,1601,1602,5,73,0,0,1602, + 1603,5,79,0,0,1603,1604,5,78,0,0,1604,258,1,0,0,0,1605,1606,5,69,0,0,1606, + 1607,5,88,0,0,1607,1608,5,84,0,0,1608,1609,5,82,0,0,1609,1610,5,65,0,0, + 1610,1611,5,67,0,0,1611,1612,5,84,0,0,1612,260,1,0,0,0,1613,1614,5,77,0, + 0,1614,1615,5,73,0,0,1615,1616,5,78,0,0,1616,1617,5,85,0,0,1617,1618,5, + 83,0,0,1618,262,1,0,0,0,1619,1620,5,68,0,0,1620,1621,5,73,0,0,1621,1622, + 5,86,0,0,1622,264,1,0,0,0,1623,1624,5,80,0,0,1624,1625,5,69,0,0,1625,1626, + 5,82,0,0,1626,1627,5,67,0,0,1627,1628,5,69,0,0,1628,1629,5,78,0,0,1629, + 1630,5,84,0,0,1630,1631,5,76,0,0,1631,1632,5,73,0,0,1632,1633,5,84,0,0, + 1633,266,1,0,0,0,1634,1635,5,66,0,0,1635,1636,5,85,0,0,1636,1637,5,67,0, + 0,1637,1638,5,75,0,0,1638,1639,5,69,0,0,1639,1640,5,84,0,0,1640,268,1,0, + 0,0,1641,1642,5,79,0,0,1642,1643,5,85,0,0,1643,1644,5,84,0,0,1644,270,1, + 0,0,0,1645,1646,5,79,0,0,1646,1647,5,70,0,0,1647,272,1,0,0,0,1648,1649, + 5,83,0,0,1649,1650,5,79,0,0,1650,1651,5,82,0,0,1651,1652,5,84,0,0,1652, + 274,1,0,0,0,1653,1654,5,67,0,0,1654,1655,5,76,0,0,1655,1656,5,85,0,0,1656, + 1657,5,83,0,0,1657,1658,5,84,0,0,1658,1659,5,69,0,0,1659,1660,5,82,0,0, + 1660,276,1,0,0,0,1661,1662,5,68,0,0,1662,1663,5,73,0,0,1663,1664,5,83,0, + 0,1664,1665,5,84,0,0,1665,1666,5,82,0,0,1666,1667,5,73,0,0,1667,1668,5, + 66,0,0,1668,1669,5,85,0,0,1669,1670,5,84,0,0,1670,1671,5,69,0,0,1671,278, + 1,0,0,0,1672,1673,5,79,0,0,1673,1674,5,86,0,0,1674,1675,5,69,0,0,1675,1676, + 5,82,0,0,1676,1677,5,87,0,0,1677,1678,5,82,0,0,1678,1679,5,73,0,0,1679, + 1680,5,84,0,0,1680,1681,5,69,0,0,1681,280,1,0,0,0,1682,1683,5,84,0,0,1683, + 1684,5,82,0,0,1684,1685,5,65,0,0,1685,1686,5,78,0,0,1686,1687,5,83,0,0, + 1687,1688,5,70,0,0,1688,1689,5,79,0,0,1689,1690,5,82,0,0,1690,1691,5,77, + 0,0,1691,282,1,0,0,0,1692,1693,5,82,0,0,1693,1694,5,69,0,0,1694,1695,5, + 68,0,0,1695,1696,5,85,0,0,1696,1697,5,67,0,0,1697,1698,5,69,0,0,1698,284, + 1,0,0,0,1699,1700,5,85,0,0,1700,1701,5,83,0,0,1701,1702,5,73,0,0,1702,1703, + 5,78,0,0,1703,1704,5,71,0,0,1704,286,1,0,0,0,1705,1706,5,83,0,0,1706,1707, + 5,69,0,0,1707,1708,5,82,0,0,1708,1709,5,68,0,0,1709,1710,5,69,0,0,1710, + 288,1,0,0,0,1711,1712,5,83,0,0,1712,1713,5,69,0,0,1713,1714,5,82,0,0,1714, + 1715,5,68,0,0,1715,1716,5,69,0,0,1716,1717,5,80,0,0,1717,1718,5,82,0,0, + 1718,1719,5,79,0,0,1719,1720,5,80,0,0,1720,1721,5,69,0,0,1721,1722,5,82, + 0,0,1722,1723,5,84,0,0,1723,1724,5,73,0,0,1724,1725,5,69,0,0,1725,1726, + 5,83,0,0,1726,290,1,0,0,0,1727,1728,5,82,0,0,1728,1729,5,69,0,0,1729,1730, + 5,67,0,0,1730,1731,5,79,0,0,1731,1732,5,82,0,0,1732,1733,5,68,0,0,1733, + 1734,5,82,0,0,1734,1735,5,69,0,0,1735,1736,5,65,0,0,1736,1737,5,68,0,0, + 1737,1738,5,69,0,0,1738,1739,5,82,0,0,1739,292,1,0,0,0,1740,1741,5,82,0, + 0,1741,1742,5,69,0,0,1742,1743,5,67,0,0,1743,1744,5,79,0,0,1744,1745,5, + 82,0,0,1745,1746,5,68,0,0,1746,1747,5,87,0,0,1747,1748,5,82,0,0,1748,1749, + 5,73,0,0,1749,1750,5,84,0,0,1750,1751,5,69,0,0,1751,1752,5,82,0,0,1752, + 294,1,0,0,0,1753,1754,5,68,0,0,1754,1755,5,69,0,0,1755,1756,5,76,0,0,1756, + 1757,5,73,0,0,1757,1758,5,77,0,0,1758,1759,5,73,0,0,1759,1760,5,84,0,0, + 1760,1761,5,69,0,0,1761,1762,5,68,0,0,1762,296,1,0,0,0,1763,1764,5,70,0, + 0,1764,1765,5,73,0,0,1765,1766,5,69,0,0,1766,1767,5,76,0,0,1767,1768,5, + 68,0,0,1768,1769,5,83,0,0,1769,298,1,0,0,0,1770,1771,5,84,0,0,1771,1772, + 5,69,0,0,1772,1773,5,82,0,0,1773,1774,5,77,0,0,1774,1775,5,73,0,0,1775, + 1776,5,78,0,0,1776,1777,5,65,0,0,1777,1778,5,84,0,0,1778,1779,5,69,0,0, + 1779,1780,5,68,0,0,1780,300,1,0,0,0,1781,1782,5,67,0,0,1782,1783,5,79,0, + 0,1783,1784,5,76,0,0,1784,1785,5,76,0,0,1785,1786,5,69,0,0,1786,1787,5, + 67,0,0,1787,1788,5,84,0,0,1788,1789,5,73,0,0,1789,1790,5,79,0,0,1790,1791, + 5,78,0,0,1791,302,1,0,0,0,1792,1793,5,73,0,0,1793,1794,5,84,0,0,1794,1795, + 5,69,0,0,1795,1796,5,77,0,0,1796,1797,5,83,0,0,1797,304,1,0,0,0,1798,1799, + 5,75,0,0,1799,1800,5,69,0,0,1800,1801,5,89,0,0,1801,1802,5,83,0,0,1802, + 306,1,0,0,0,1803,1804,5,69,0,0,1804,1805,5,83,0,0,1805,1806,5,67,0,0,1806, + 1807,5,65,0,0,1807,1808,5,80,0,0,1808,1809,5,69,0,0,1809,1810,5,68,0,0, + 1810,308,1,0,0,0,1811,1812,5,76,0,0,1812,1813,5,73,0,0,1813,1814,5,78,0, + 0,1814,1815,5,69,0,0,1815,1816,5,83,0,0,1816,310,1,0,0,0,1817,1818,5,83, + 0,0,1818,1819,5,69,0,0,1819,1820,5,80,0,0,1820,1821,5,65,0,0,1821,1822, + 5,82,0,0,1822,1823,5,65,0,0,1823,1824,5,84,0,0,1824,1825,5,69,0,0,1825, + 1826,5,68,0,0,1826,312,1,0,0,0,1827,1828,5,70,0,0,1828,1829,5,85,0,0,1829, + 1830,5,78,0,0,1830,1831,5,67,0,0,1831,1832,5,84,0,0,1832,1833,5,73,0,0, + 1833,1834,5,79,0,0,1834,1835,5,78,0,0,1835,314,1,0,0,0,1836,1837,5,69,0, + 0,1837,1838,5,88,0,0,1838,1839,5,84,0,0,1839,1840,5,69,0,0,1840,1841,5, + 78,0,0,1841,1842,5,68,0,0,1842,1843,5,69,0,0,1843,1844,5,68,0,0,1844,316, + 1,0,0,0,1845,1846,5,82,0,0,1846,1847,5,69,0,0,1847,1848,5,70,0,0,1848,1849, + 5,82,0,0,1849,1850,5,69,0,0,1850,1851,5,83,0,0,1851,1852,5,72,0,0,1852, + 318,1,0,0,0,1853,1854,5,67,0,0,1854,1855,5,76,0,0,1855,1856,5,69,0,0,1856, + 1857,5,65,0,0,1857,1858,5,82,0,0,1858,320,1,0,0,0,1859,1860,5,67,0,0,1860, + 1861,5,65,0,0,1861,1862,5,67,0,0,1862,1863,5,72,0,0,1863,1864,5,69,0,0, + 1864,322,1,0,0,0,1865,1866,5,85,0,0,1866,1867,5,78,0,0,1867,1868,5,67,0, + 0,1868,1869,5,65,0,0,1869,1870,5,67,0,0,1870,1871,5,72,0,0,1871,1872,5, + 69,0,0,1872,324,1,0,0,0,1873,1874,5,76,0,0,1874,1875,5,65,0,0,1875,1876, + 5,90,0,0,1876,1877,5,89,0,0,1877,326,1,0,0,0,1878,1879,5,70,0,0,1879,1880, + 5,79,0,0,1880,1881,5,82,0,0,1881,1882,5,77,0,0,1882,1883,5,65,0,0,1883, + 1884,5,84,0,0,1884,1885,5,84,0,0,1885,1886,5,69,0,0,1886,1887,5,68,0,0, + 1887,328,1,0,0,0,1888,1889,5,71,0,0,1889,1890,5,76,0,0,1890,1891,5,79,0, + 0,1891,1892,5,66,0,0,1892,1893,5,65,0,0,1893,1894,5,76,0,0,1894,330,1,0, + 0,0,1895,1896,5,84,0,0,1896,1897,5,69,0,0,1897,1898,5,77,0,0,1898,1899, + 5,80,0,0,1899,1900,5,79,0,0,1900,1901,5,82,0,0,1901,1902,5,65,0,0,1902, + 1903,5,82,0,0,1903,1904,5,89,0,0,1904,332,1,0,0,0,1905,1906,5,79,0,0,1906, + 1907,5,80,0,0,1907,1908,5,84,0,0,1908,1909,5,73,0,0,1909,1910,5,79,0,0, + 1910,1911,5,78,0,0,1911,1912,5,83,0,0,1912,334,1,0,0,0,1913,1914,5,85,0, + 0,1914,1915,5,78,0,0,1915,1916,5,83,0,0,1916,1917,5,69,0,0,1917,1918,5, + 84,0,0,1918,336,1,0,0,0,1919,1920,5,84,0,0,1920,1921,5,66,0,0,1921,1922, + 5,76,0,0,1922,1923,5,80,0,0,1923,1924,5,82,0,0,1924,1925,5,79,0,0,1925, + 1926,5,80,0,0,1926,1927,5,69,0,0,1927,1928,5,82,0,0,1928,1929,5,84,0,0, + 1929,1930,5,73,0,0,1930,1931,5,69,0,0,1931,1932,5,83,0,0,1932,338,1,0,0, + 0,1933,1934,5,68,0,0,1934,1935,5,66,0,0,1935,1936,5,80,0,0,1936,1937,5, + 82,0,0,1937,1938,5,79,0,0,1938,1939,5,80,0,0,1939,1940,5,69,0,0,1940,1941, + 5,82,0,0,1941,1942,5,84,0,0,1942,1943,5,73,0,0,1943,1944,5,69,0,0,1944, + 1945,5,83,0,0,1945,340,1,0,0,0,1946,1947,5,66,0,0,1947,1948,5,85,0,0,1948, + 1949,5,67,0,0,1949,1950,5,75,0,0,1950,1951,5,69,0,0,1951,1952,5,84,0,0, + 1952,1953,5,83,0,0,1953,342,1,0,0,0,1954,1955,5,83,0,0,1955,1956,5,75,0, + 0,1956,1957,5,69,0,0,1957,1958,5,87,0,0,1958,1959,5,69,0,0,1959,1960,5, + 68,0,0,1960,344,1,0,0,0,1961,1962,5,83,0,0,1962,1963,5,84,0,0,1963,1964, + 5,79,0,0,1964,1965,5,82,0,0,1965,1966,5,69,0,0,1966,1967,5,68,0,0,1967, + 346,1,0,0,0,1968,1969,5,68,0,0,1969,1970,5,73,0,0,1970,1971,5,82,0,0,1971, + 1972,5,69,0,0,1972,1973,5,67,0,0,1973,1974,5,84,0,0,1974,1975,5,79,0,0, + 1975,1976,5,82,0,0,1976,1977,5,73,0,0,1977,1978,5,69,0,0,1978,1979,5,83, + 0,0,1979,348,1,0,0,0,1980,1981,5,76,0,0,1981,1982,5,79,0,0,1982,1983,5, + 67,0,0,1983,1984,5,65,0,0,1984,1985,5,84,0,0,1985,1986,5,73,0,0,1986,1987, + 5,79,0,0,1987,1988,5,78,0,0,1988,350,1,0,0,0,1989,1990,5,69,0,0,1990,1991, + 5,88,0,0,1991,1992,5,67,0,0,1992,1993,5,72,0,0,1993,1994,5,65,0,0,1994, + 1995,5,78,0,0,1995,1996,5,71,0,0,1996,1997,5,69,0,0,1997,352,1,0,0,0,1998, + 1999,5,65,0,0,1999,2000,5,82,0,0,2000,2001,5,67,0,0,2001,2002,5,72,0,0, + 2002,2003,5,73,0,0,2003,2004,5,86,0,0,2004,2005,5,69,0,0,2005,354,1,0,0, + 0,2006,2007,5,85,0,0,2007,2008,5,78,0,0,2008,2009,5,65,0,0,2009,2010,5, + 82,0,0,2010,2011,5,67,0,0,2011,2012,5,72,0,0,2012,2013,5,73,0,0,2013,2014, + 5,86,0,0,2014,2015,5,69,0,0,2015,356,1,0,0,0,2016,2017,5,70,0,0,2017,2018, + 5,73,0,0,2018,2019,5,76,0,0,2019,2020,5,69,0,0,2020,2021,5,70,0,0,2021, + 2022,5,79,0,0,2022,2023,5,82,0,0,2023,2024,5,77,0,0,2024,2025,5,65,0,0, + 2025,2026,5,84,0,0,2026,358,1,0,0,0,2027,2028,5,84,0,0,2028,2029,5,79,0, + 0,2029,2030,5,85,0,0,2030,2031,5,67,0,0,2031,2032,5,72,0,0,2032,360,1,0, + 0,0,2033,2034,5,67,0,0,2034,2035,5,79,0,0,2035,2036,5,77,0,0,2036,2037, + 5,80,0,0,2037,2038,5,65,0,0,2038,2039,5,67,0,0,2039,2040,5,84,0,0,2040, + 362,1,0,0,0,2041,2042,5,67,0,0,2042,2043,5,79,0,0,2043,2044,5,78,0,0,2044, + 2045,5,67,0,0,2045,2046,5,65,0,0,2046,2047,5,84,0,0,2047,2048,5,69,0,0, + 2048,2049,5,78,0,0,2049,2050,5,65,0,0,2050,2051,5,84,0,0,2051,2052,5,69, + 0,0,2052,364,1,0,0,0,2053,2054,5,67,0,0,2054,2055,5,72,0,0,2055,2056,5, + 65,0,0,2056,2057,5,78,0,0,2057,2058,5,71,0,0,2058,2059,5,69,0,0,2059,366, + 1,0,0,0,2060,2061,5,67,0,0,2061,2062,5,65,0,0,2062,2063,5,83,0,0,2063,2064, + 5,67,0,0,2064,2065,5,65,0,0,2065,2066,5,68,0,0,2066,2067,5,69,0,0,2067, + 368,1,0,0,0,2068,2069,5,67,0,0,2069,2070,5,79,0,0,2070,2071,5,78,0,0,2071, + 2072,5,83,0,0,2072,2073,5,84,0,0,2073,2074,5,82,0,0,2074,2075,5,65,0,0, + 2075,2076,5,73,0,0,2076,2077,5,78,0,0,2077,2078,5,84,0,0,2078,370,1,0,0, + 0,2079,2080,5,82,0,0,2080,2081,5,69,0,0,2081,2082,5,83,0,0,2082,2083,5, + 84,0,0,2083,2084,5,82,0,0,2084,2085,5,73,0,0,2085,2086,5,67,0,0,2086,2087, + 5,84,0,0,2087,372,1,0,0,0,2088,2089,5,67,0,0,2089,2090,5,76,0,0,2090,2091, + 5,85,0,0,2091,2092,5,83,0,0,2092,2093,5,84,0,0,2093,2094,5,69,0,0,2094, + 2095,5,82,0,0,2095,2096,5,69,0,0,2096,2097,5,68,0,0,2097,374,1,0,0,0,2098, + 2099,5,83,0,0,2099,2100,5,79,0,0,2100,2101,5,82,0,0,2101,2102,5,84,0,0, + 2102,2103,5,69,0,0,2103,2104,5,68,0,0,2104,376,1,0,0,0,2105,2106,5,80,0, + 0,2106,2107,5,85,0,0,2107,2108,5,82,0,0,2108,2109,5,71,0,0,2109,2110,5, + 69,0,0,2110,378,1,0,0,0,2111,2112,5,73,0,0,2112,2113,5,78,0,0,2113,2114, + 5,80,0,0,2114,2115,5,85,0,0,2115,2116,5,84,0,0,2116,2117,5,70,0,0,2117, + 2118,5,79,0,0,2118,2119,5,82,0,0,2119,2120,5,77,0,0,2120,2121,5,65,0,0, + 2121,2122,5,84,0,0,2122,380,1,0,0,0,2123,2124,5,79,0,0,2124,2125,5,85,0, + 0,2125,2126,5,84,0,0,2126,2127,5,80,0,0,2127,2128,5,85,0,0,2128,2129,5, + 84,0,0,2129,2130,5,70,0,0,2130,2131,5,79,0,0,2131,2132,5,82,0,0,2132,2133, + 5,77,0,0,2133,2134,5,65,0,0,2134,2135,5,84,0,0,2135,382,1,0,0,0,2136,2137, + 5,68,0,0,2137,2138,5,65,0,0,2138,2139,5,84,0,0,2139,2140,5,65,0,0,2140, + 2141,5,66,0,0,2141,2142,5,65,0,0,2142,2143,5,83,0,0,2143,2144,5,69,0,0, + 2144,384,1,0,0,0,2145,2146,5,68,0,0,2146,2147,5,65,0,0,2147,2148,5,84,0, + 0,2148,2149,5,65,0,0,2149,2150,5,66,0,0,2150,2151,5,65,0,0,2151,2152,5, + 83,0,0,2152,2153,5,69,0,0,2153,2154,5,83,0,0,2154,386,1,0,0,0,2155,2156, + 5,68,0,0,2156,2157,5,70,0,0,2157,2158,5,83,0,0,2158,388,1,0,0,0,2159,2160, + 5,84,0,0,2160,2161,5,82,0,0,2161,2162,5,85,0,0,2162,2163,5,78,0,0,2163, + 2164,5,67,0,0,2164,2165,5,65,0,0,2165,2166,5,84,0,0,2166,2167,5,69,0,0, + 2167,390,1,0,0,0,2168,2169,5,65,0,0,2169,2170,5,78,0,0,2170,2171,5,65,0, + 0,2171,2172,5,76,0,0,2172,2173,5,89,0,0,2173,2174,5,90,0,0,2174,2175,5, + 69,0,0,2175,392,1,0,0,0,2176,2177,5,67,0,0,2177,2178,5,79,0,0,2178,2179, + 5,77,0,0,2179,2180,5,80,0,0,2180,2181,5,85,0,0,2181,2182,5,84,0,0,2182, + 2183,5,69,0,0,2183,394,1,0,0,0,2184,2185,5,76,0,0,2185,2186,5,73,0,0,2186, + 2187,5,83,0,0,2187,2188,5,84,0,0,2188,396,1,0,0,0,2189,2190,5,83,0,0,2190, + 2191,5,84,0,0,2191,2192,5,65,0,0,2192,2193,5,84,0,0,2193,2194,5,73,0,0, + 2194,2195,5,83,0,0,2195,2196,5,84,0,0,2196,2197,5,73,0,0,2197,2198,5,67, + 0,0,2198,2199,5,83,0,0,2199,398,1,0,0,0,2200,2201,5,80,0,0,2201,2202,5, + 65,0,0,2202,2203,5,82,0,0,2203,2204,5,84,0,0,2204,2205,5,73,0,0,2205,2206, + 5,84,0,0,2206,2207,5,73,0,0,2207,2208,5,79,0,0,2208,2209,5,78,0,0,2209, + 2210,5,69,0,0,2210,2211,5,68,0,0,2211,400,1,0,0,0,2212,2213,5,69,0,0,2213, + 2214,5,88,0,0,2214,2215,5,84,0,0,2215,2216,5,69,0,0,2216,2217,5,82,0,0, + 2217,2218,5,78,0,0,2218,2219,5,65,0,0,2219,2220,5,76,0,0,2220,402,1,0,0, + 0,2221,2222,5,68,0,0,2222,2223,5,69,0,0,2223,2224,5,70,0,0,2224,2225,5, + 73,0,0,2225,2226,5,78,0,0,2226,2227,5,69,0,0,2227,2228,5,68,0,0,2228,404, + 1,0,0,0,2229,2230,5,82,0,0,2230,2231,5,69,0,0,2231,2232,5,86,0,0,2232,2233, + 5,79,0,0,2233,2234,5,75,0,0,2234,2235,5,69,0,0,2235,406,1,0,0,0,2236,2237, + 5,71,0,0,2237,2238,5,82,0,0,2238,2239,5,65,0,0,2239,2240,5,78,0,0,2240, + 2241,5,84,0,0,2241,408,1,0,0,0,2242,2243,5,76,0,0,2243,2244,5,79,0,0,2244, + 2245,5,67,0,0,2245,2246,5,75,0,0,2246,410,1,0,0,0,2247,2248,5,85,0,0,2248, + 2249,5,78,0,0,2249,2250,5,76,0,0,2250,2251,5,79,0,0,2251,2252,5,67,0,0, + 2252,2253,5,75,0,0,2253,412,1,0,0,0,2254,2255,5,77,0,0,2255,2256,5,83,0, + 0,2256,2257,5,67,0,0,2257,2258,5,75,0,0,2258,414,1,0,0,0,2259,2260,5,82, + 0,0,2260,2261,5,69,0,0,2261,2262,5,80,0,0,2262,2263,5,65,0,0,2263,2264, + 5,73,0,0,2264,2265,5,82,0,0,2265,416,1,0,0,0,2266,2267,5,82,0,0,2267,2268, + 5,69,0,0,2268,2269,5,67,0,0,2269,2270,5,79,0,0,2270,2271,5,86,0,0,2271, + 2272,5,69,0,0,2272,2273,5,82,0,0,2273,418,1,0,0,0,2274,2275,5,69,0,0,2275, + 2276,5,88,0,0,2276,2277,5,80,0,0,2277,2278,5,79,0,0,2278,2279,5,82,0,0, + 2279,2280,5,84,0,0,2280,420,1,0,0,0,2281,2282,5,73,0,0,2282,2283,5,77,0, + 0,2283,2284,5,80,0,0,2284,2285,5,79,0,0,2285,2286,5,82,0,0,2286,2287,5, + 84,0,0,2287,422,1,0,0,0,2288,2289,5,76,0,0,2289,2290,5,79,0,0,2290,2291, + 5,65,0,0,2291,2292,5,68,0,0,2292,424,1,0,0,0,2293,2294,5,85,0,0,2294,2295, + 5,78,0,0,2295,2296,5,76,0,0,2296,2297,5,79,0,0,2297,2298,5,65,0,0,2298, + 2299,5,68,0,0,2299,426,1,0,0,0,2300,2301,5,82,0,0,2301,2302,5,79,0,0,2302, + 2303,5,76,0,0,2303,2304,5,69,0,0,2304,428,1,0,0,0,2305,2306,5,82,0,0,2306, + 2307,5,79,0,0,2307,2308,5,76,0,0,2308,2309,5,69,0,0,2309,2310,5,83,0,0, + 2310,430,1,0,0,0,2311,2312,5,67,0,0,2312,2313,5,79,0,0,2313,2314,5,77,0, + 0,2314,2315,5,80,0,0,2315,2316,5,65,0,0,2316,2317,5,67,0,0,2317,2318,5, + 84,0,0,2318,2319,5,73,0,0,2319,2320,5,79,0,0,2320,2321,5,78,0,0,2321,2322, + 5,83,0,0,2322,432,1,0,0,0,2323,2324,5,80,0,0,2324,2325,5,82,0,0,2325,2326, + 5,73,0,0,2326,2327,5,78,0,0,2327,2328,5,67,0,0,2328,2329,5,73,0,0,2329, + 2330,5,80,0,0,2330,2331,5,65,0,0,2331,2332,5,76,0,0,2332,2333,5,83,0,0, + 2333,434,1,0,0,0,2334,2335,5,84,0,0,2335,2336,5,82,0,0,2336,2337,5,65,0, + 0,2337,2338,5,78,0,0,2338,2339,5,83,0,0,2339,2340,5,65,0,0,2340,2341,5, + 67,0,0,2341,2342,5,84,0,0,2342,2343,5,73,0,0,2343,2344,5,79,0,0,2344,2345, + 5,78,0,0,2345,2346,5,83,0,0,2346,436,1,0,0,0,2347,2348,5,73,0,0,2348,2349, + 5,78,0,0,2349,2350,5,68,0,0,2350,2351,5,69,0,0,2351,2352,5,88,0,0,2352, + 438,1,0,0,0,2353,2354,5,73,0,0,2354,2355,5,78,0,0,2355,2356,5,68,0,0,2356, + 2357,5,69,0,0,2357,2358,5,88,0,0,2358,2359,5,69,0,0,2359,2360,5,83,0,0, + 2360,440,1,0,0,0,2361,2362,5,76,0,0,2362,2363,5,79,0,0,2363,2364,5,67,0, + 0,2364,2365,5,75,0,0,2365,2366,5,83,0,0,2366,442,1,0,0,0,2367,2368,5,79, + 0,0,2368,2369,5,80,0,0,2369,2370,5,84,0,0,2370,2371,5,73,0,0,2371,2372, + 5,79,0,0,2372,2373,5,78,0,0,2373,444,1,0,0,0,2374,2375,5,65,0,0,2375,2376, + 5,78,0,0,2376,2377,5,84,0,0,2377,2378,5,73,0,0,2378,446,1,0,0,0,2379,2380, + 5,76,0,0,2380,2381,5,79,0,0,2381,2382,5,67,0,0,2382,2383,5,65,0,0,2383, + 2384,5,76,0,0,2384,448,1,0,0,0,2385,2386,5,73,0,0,2386,2387,5,78,0,0,2387, + 2388,5,80,0,0,2388,2389,5,65,0,0,2389,2390,5,84,0,0,2390,2391,5,72,0,0, + 2391,450,1,0,0,0,2392,2393,5,87,0,0,2393,2394,5,65,0,0,2394,2395,5,84,0, + 0,2395,2396,5,69,0,0,2396,2397,5,82,0,0,2397,2398,5,77,0,0,2398,2399,5, + 65,0,0,2399,2400,5,82,0,0,2400,2401,5,75,0,0,2401,452,1,0,0,0,2402,2403, + 5,85,0,0,2403,2404,5,78,0,0,2404,2405,5,78,0,0,2405,2406,5,69,0,0,2406, + 2407,5,83,0,0,2407,2408,5,84,0,0,2408,454,1,0,0,0,2409,2410,5,77,0,0,2410, + 2411,5,65,0,0,2411,2412,5,84,0,0,2412,2413,5,67,0,0,2413,2414,5,72,0,0, + 2414,456,1,0,0,0,2415,2416,5,78,0,0,2416,2417,5,69,0,0,2417,2418,5,88,0, + 0,2418,2419,5,84,0,0,2419,458,1,0,0,0,2420,2421,5,87,0,0,2421,2422,5,73, + 0,0,2422,2423,5,84,0,0,2423,2424,5,72,0,0,2424,2425,5,73,0,0,2425,2426, + 5,78,0,0,2426,460,1,0,0,0,2427,2428,5,87,0,0,2428,2429,5,83,0,0,2429,462, + 1,0,0,0,2430,2431,5,83,0,0,2431,2432,5,89,0,0,2432,2433,5,83,0,0,2433,2434, + 5,84,0,0,2434,2435,5,69,0,0,2435,2436,5,77,0,0,2436,464,1,0,0,0,2437,2438, + 5,73,0,0,2438,2439,5,78,0,0,2439,2440,5,67,0,0,2440,2441,5,76,0,0,2441, + 2442,5,85,0,0,2442,2443,5,68,0,0,2443,2444,5,73,0,0,2444,2445,5,78,0,0, + 2445,2446,5,71,0,0,2446,466,1,0,0,0,2447,2448,5,69,0,0,2448,2449,5,88,0, + 0,2449,2450,5,67,0,0,2450,2451,5,76,0,0,2451,2452,5,85,0,0,2452,2453,5, + 68,0,0,2453,2454,5,73,0,0,2454,2455,5,78,0,0,2455,2456,5,71,0,0,2456,468, + 1,0,0,0,2457,2458,5,79,0,0,2458,2459,5,86,0,0,2459,2460,5,69,0,0,2460,2461, + 5,82,0,0,2461,2462,5,87,0,0,2462,2463,5,82,0,0,2463,2464,5,73,0,0,2464, + 2465,5,84,0,0,2465,2466,5,73,0,0,2466,2467,5,78,0,0,2467,2468,5,71,0,0, + 2468,470,1,0,0,0,2469,2470,5,67,0,0,2470,2471,5,79,0,0,2471,2472,5,78,0, + 0,2472,2473,5,83,0,0,2473,2474,5,84,0,0,2474,2475,5,82,0,0,2475,2476,5, + 65,0,0,2476,2477,5,73,0,0,2477,2478,5,78,0,0,2478,2479,5,84,0,0,2479,2480, + 5,83,0,0,2480,472,1,0,0,0,2481,2482,5,71,0,0,2482,2483,5,69,0,0,2483,2484, + 5,78,0,0,2484,2485,5,69,0,0,2485,2486,5,82,0,0,2486,2487,5,65,0,0,2487, + 2488,5,84,0,0,2488,2489,5,69,0,0,2489,2490,5,68,0,0,2490,474,1,0,0,0,2491, + 2492,5,87,0,0,2492,2493,5,65,0,0,2493,2494,5,84,0,0,2494,2495,5,69,0,0, + 2495,2496,5,82,0,0,2496,2497,5,77,0,0,2497,2498,5,65,0,0,2498,2499,5,82, + 0,0,2499,2500,5,75,0,0,2500,2501,5,83,0,0,2501,476,1,0,0,0,2502,2503,5, + 67,0,0,2503,2504,5,65,0,0,2504,2505,5,84,0,0,2505,2506,5,65,0,0,2506,2507, + 5,76,0,0,2507,2508,5,79,0,0,2508,2509,5,71,0,0,2509,478,1,0,0,0,2510,2511, + 5,76,0,0,2511,2512,5,65,0,0,2512,2513,5,78,0,0,2513,2514,5,71,0,0,2514, + 2515,5,85,0,0,2515,2516,5,65,0,0,2516,2517,5,71,0,0,2517,2518,5,69,0,0, + 2518,480,1,0,0,0,2519,2520,5,74,0,0,2520,2521,5,65,0,0,2521,2522,5,86,0, + 0,2522,2523,5,65,0,0,2523,482,1,0,0,0,2524,2525,5,83,0,0,2525,2526,5,67, + 0,0,2526,2527,5,65,0,0,2527,2528,5,76,0,0,2528,2529,5,65,0,0,2529,484,1, + 0,0,0,2530,2531,5,80,0,0,2531,2532,5,89,0,0,2532,2533,5,84,0,0,2533,2534, + 5,72,0,0,2534,2535,5,79,0,0,2535,2536,5,78,0,0,2536,486,1,0,0,0,2537,2538, + 5,74,0,0,2538,2539,5,65,0,0,2539,2540,5,82,0,0,2540,488,1,0,0,0,2541,2542, + 5,70,0,0,2542,2543,5,73,0,0,2543,2544,5,76,0,0,2544,2545,5,69,0,0,2545, + 490,1,0,0,0,2546,2547,5,80,0,0,2547,2548,5,89,0,0,2548,2549,5,84,0,0,2549, + 2550,5,72,0,0,2550,2551,5,79,0,0,2551,2552,5,78,0,0,2552,2553,5,95,0,0, + 2553,2554,5,70,0,0,2554,2555,5,73,0,0,2555,2556,5,76,0,0,2556,2557,5,69, + 0,0,2557,2558,5,83,0,0,2558,492,1,0,0,0,2559,2560,5,80,0,0,2560,2561,5, + 89,0,0,2561,2562,5,84,0,0,2562,2563,5,72,0,0,2563,2564,5,79,0,0,2564,2565, + 5,78,0,0,2565,2566,5,95,0,0,2566,2567,5,82,0,0,2567,2568,5,69,0,0,2568, + 2569,5,81,0,0,2569,2570,5,85,0,0,2570,2571,5,73,0,0,2571,2572,5,82,0,0, + 2572,2573,5,69,0,0,2573,2574,5,77,0,0,2574,2575,5,69,0,0,2575,2576,5,78, + 0,0,2576,2577,5,84,0,0,2577,2578,5,83,0,0,2578,494,1,0,0,0,2579,2580,5, + 80,0,0,2580,2581,5,89,0,0,2581,2582,5,84,0,0,2582,2583,5,72,0,0,2583,2584, + 5,79,0,0,2584,2585,5,78,0,0,2585,2586,5,95,0,0,2586,2587,5,68,0,0,2587, + 2588,5,69,0,0,2588,2589,5,80,0,0,2589,2590,5,69,0,0,2590,2591,5,78,0,0, + 2591,2592,5,68,0,0,2592,2593,5,69,0,0,2593,2594,5,78,0,0,2594,2595,5,67, + 0,0,2595,2596,5,73,0,0,2596,2597,5,69,0,0,2597,2598,5,83,0,0,2598,496,1, + 0,0,0,2599,2600,5,80,0,0,2600,2601,5,89,0,0,2601,2602,5,84,0,0,2602,2603, + 5,72,0,0,2603,2604,5,79,0,0,2604,2605,5,78,0,0,2605,2606,5,95,0,0,2606, + 2607,5,74,0,0,2607,2608,5,65,0,0,2608,2609,5,82,0,0,2609,498,1,0,0,0,2610, + 2611,5,80,0,0,2611,2612,5,89,0,0,2612,2613,5,84,0,0,2613,2614,5,72,0,0, + 2614,2615,5,79,0,0,2615,2616,5,78,0,0,2616,2617,5,95,0,0,2617,2618,5,65, + 0,0,2618,2619,5,82,0,0,2619,2620,5,67,0,0,2620,2621,5,72,0,0,2621,2622, + 5,73,0,0,2622,2623,5,86,0,0,2623,2624,5,69,0,0,2624,2625,5,83,0,0,2625, + 500,1,0,0,0,2626,2627,5,80,0,0,2627,2628,5,89,0,0,2628,2629,5,84,0,0,2629, + 2630,5,72,0,0,2630,2631,5,79,0,0,2631,2632,5,78,0,0,2632,2633,5,95,0,0, + 2633,2634,5,80,0,0,2634,2635,5,65,0,0,2635,2636,5,82,0,0,2636,2637,5,65, + 0,0,2637,2638,5,77,0,0,2638,2639,5,69,0,0,2639,2640,5,84,0,0,2640,2641, + 5,69,0,0,2641,2642,5,82,0,0,2642,502,1,0,0,0,2643,2644,5,69,0,0,2644,2645, + 5,78,0,0,2645,2646,5,71,0,0,2646,2647,5,73,0,0,2647,2648,5,78,0,0,2648, + 2649,5,69,0,0,2649,504,1,0,0,0,2650,2651,5,67,0,0,2651,2652,5,65,0,0,2652, + 2653,5,84,0,0,2653,2654,5,65,0,0,2654,2655,5,76,0,0,2655,2656,5,79,0,0, + 2656,2657,5,71,0,0,2657,2658,5,83,0,0,2658,506,1,0,0,0,2659,2660,5,86,0, + 0,2660,2661,5,73,0,0,2661,2662,5,69,0,0,2662,2663,5,87,0,0,2663,2664,5, + 83,0,0,2664,508,1,0,0,0,2665,2666,5,74,0,0,2666,2667,5,65,0,0,2667,2668, + 5,82,0,0,2668,2669,5,83,0,0,2669,510,1,0,0,0,2670,2671,5,80,0,0,2671,2672, + 5,82,0,0,2672,2673,5,73,0,0,2673,2674,5,77,0,0,2674,2675,5,65,0,0,2675, + 2676,5,82,0,0,2676,2677,5,89,0,0,2677,512,1,0,0,0,2678,2679,5,85,0,0,2679, + 2680,5,78,0,0,2680,2681,5,73,0,0,2681,2682,5,81,0,0,2682,2683,5,85,0,0, + 2683,2684,5,69,0,0,2684,514,1,0,0,0,2685,2686,5,75,0,0,2686,2687,5,69,0, + 0,2687,2688,5,89,0,0,2688,516,1,0,0,0,2689,2690,5,80,0,0,2690,2691,5,69, + 0,0,2691,2692,5,82,0,0,2692,2693,5,73,0,0,2693,2694,5,79,0,0,2694,2695, + 5,68,0,0,2695,518,1,0,0,0,2696,2697,5,83,0,0,2697,2698,5,89,0,0,2698,2699, + 5,83,0,0,2699,2700,5,84,0,0,2700,2701,5,69,0,0,2701,2702,5,77,0,0,2702, + 2703,5,95,0,0,2703,2704,5,84,0,0,2704,2705,5,73,0,0,2705,2706,5,77,0,0, + 2706,2707,5,69,0,0,2707,520,1,0,0,0,2708,2709,5,69,0,0,2709,2710,5,78,0, + 0,2710,2711,5,70,0,0,2711,2712,5,79,0,0,2712,2713,5,82,0,0,2713,2714,5, + 67,0,0,2714,2715,5,69,0,0,2715,2716,5,68,0,0,2716,522,1,0,0,0,2717,2718, + 5,77,0,0,2718,2719,5,69,0,0,2719,2720,5,84,0,0,2720,2721,5,65,0,0,2721, + 2722,5,68,0,0,2722,2723,5,65,0,0,2723,2724,5,84,0,0,2724,2725,5,65,0,0, + 2725,524,1,0,0,0,2726,2727,5,86,0,0,2727,2728,5,73,0,0,2728,2729,5,82,0, + 0,2729,2730,5,84,0,0,2730,2731,5,85,0,0,2731,2732,5,65,0,0,2732,2733,5, + 76,0,0,2733,526,1,0,0,0,2734,2735,5,90,0,0,2735,2736,5,79,0,0,2736,2737, + 5,78,0,0,2737,2738,5,69,0,0,2738,528,1,0,0,0,2739,2740,5,84,0,0,2740,2741, + 5,85,0,0,2741,2742,5,77,0,0,2742,2743,5,66,0,0,2743,2744,5,76,0,0,2744, + 2745,5,69,0,0,2745,530,1,0,0,0,2746,2747,5,72,0,0,2747,2748,5,79,0,0,2748, + 2749,5,80,0,0,2749,532,1,0,0,0,2750,2751,5,67,0,0,2751,2752,5,85,0,0,2752, + 2753,5,77,0,0,2753,2754,5,85,0,0,2754,2755,5,76,0,0,2755,2756,5,65,0,0, + 2756,2757,5,84,0,0,2757,2758,5,69,0,0,2758,534,1,0,0,0,2759,2760,5,68,0, + 0,2760,2761,5,69,0,0,2761,2762,5,83,0,0,2762,2763,5,67,0,0,2763,2764,5, + 82,0,0,2764,2765,5,73,0,0,2765,2766,5,80,0,0,2766,2767,5,84,0,0,2767,2768, + 5,79,0,0,2768,2769,5,82,0,0,2769,536,1,0,0,0,2770,2771,5,84,0,0,2771,2772, + 5,73,0,0,2772,2773,5,77,0,0,2773,2774,5,69,0,0,2774,2775,5,67,0,0,2775, + 2776,5,79,0,0,2776,2777,5,76,0,0,2777,538,1,0,0,0,2778,2779,5,83,0,0,2779, + 2780,5,73,0,0,2780,2781,5,90,0,0,2781,2782,5,69,0,0,2782,540,1,0,0,0,2783, + 2784,5,79,0,0,2784,2785,5,70,0,0,2785,2786,5,70,0,0,2786,2787,5,83,0,0, + 2787,2788,5,69,0,0,2788,2789,5,84,0,0,2789,542,1,0,0,0,2790,2791,5,83,0, + 0,2791,2792,5,84,0,0,2792,2793,5,69,0,0,2793,2794,5,80,0,0,2794,544,1,0, + 0,0,2795,2796,5,83,0,0,2796,2797,5,76,0,0,2797,2798,5,73,0,0,2798,2799, + 5,68,0,0,2799,2800,5,69,0,0,2800,546,1,0,0,0,2801,2802,5,83,0,0,2802,2803, + 5,69,0,0,2803,2804,5,83,0,0,2804,2805,5,83,0,0,2805,2806,5,73,0,0,2806, + 2807,5,79,0,0,2807,2808,5,78,0,0,2808,548,1,0,0,0,2809,2810,5,77,0,0,2810, + 2811,5,65,0,0,2811,2812,5,84,0,0,2812,2813,5,67,0,0,2813,2814,5,72,0,0, + 2814,2815,5,95,0,0,2815,2816,5,82,0,0,2816,2817,5,69,0,0,2817,2818,5,67, + 0,0,2818,2819,5,79,0,0,2819,2820,5,71,0,0,2820,2821,5,78,0,0,2821,2822, + 5,73,0,0,2822,2823,5,90,0,0,2823,2824,5,69,0,0,2824,550,1,0,0,0,2825,2826, + 5,77,0,0,2826,2827,5,69,0,0,2827,2828,5,65,0,0,2828,2829,5,83,0,0,2829, + 2830,5,85,0,0,2830,2831,5,82,0,0,2831,2832,5,69,0,0,2832,2833,5,83,0,0, + 2833,552,1,0,0,0,2834,2835,5,80,0,0,2835,2836,5,65,0,0,2836,2837,5,84,0, + 0,2837,2838,5,84,0,0,2838,2839,5,69,0,0,2839,2840,5,82,0,0,2840,2841,5, + 78,0,0,2841,554,1,0,0,0,2842,2843,5,79,0,0,2843,2844,5,78,0,0,2844,2845, + 5,69,0,0,2845,556,1,0,0,0,2846,2847,5,80,0,0,2847,2848,5,69,0,0,2848,2849, + 5,82,0,0,2849,558,1,0,0,0,2850,2851,5,83,0,0,2851,2852,5,75,0,0,2852,2853, + 5,73,0,0,2853,2854,5,80,0,0,2854,560,1,0,0,0,2855,2856,5,80,0,0,2856,2857, + 5,65,0,0,2857,2858,5,83,0,0,2858,2859,5,84,0,0,2859,562,1,0,0,0,2860,2861, + 5,68,0,0,2861,2862,5,69,0,0,2862,2863,5,70,0,0,2863,2864,5,73,0,0,2864, + 2865,5,78,0,0,2865,2866,5,69,0,0,2866,564,1,0,0,0,2867,2868,5,83,0,0,2868, + 2869,5,84,0,0,2869,2870,5,82,0,0,2870,2871,5,73,0,0,2871,2872,5,78,0,0, + 2872,2873,5,71,0,0,2873,566,1,0,0,0,2874,2875,5,65,0,0,2875,2876,5,82,0, + 0,2876,2877,5,82,0,0,2877,2878,5,65,0,0,2878,2879,5,89,0,0,2879,568,1,0, + 0,0,2880,2881,5,77,0,0,2881,2882,5,65,0,0,2882,2883,5,80,0,0,2883,570,1, + 0,0,0,2884,2885,5,67,0,0,2885,2886,5,72,0,0,2886,2887,5,65,0,0,2887,2888, + 5,82,0,0,2888,572,1,0,0,0,2889,2890,5,86,0,0,2890,2891,5,65,0,0,2891,2892, + 5,82,0,0,2892,2893,5,67,0,0,2893,2894,5,72,0,0,2894,2895,5,65,0,0,2895, + 2896,5,82,0,0,2896,574,1,0,0,0,2897,2898,5,66,0,0,2898,2899,5,73,0,0,2899, + 2900,5,78,0,0,2900,2901,5,65,0,0,2901,2902,5,82,0,0,2902,2903,5,89,0,0, + 2903,576,1,0,0,0,2904,2905,5,86,0,0,2905,2906,5,65,0,0,2906,2907,5,82,0, + 0,2907,2908,5,66,0,0,2908,2909,5,73,0,0,2909,2910,5,78,0,0,2910,2911,5, + 65,0,0,2911,2912,5,82,0,0,2912,2913,5,89,0,0,2913,578,1,0,0,0,2914,2915, + 5,66,0,0,2915,2916,5,89,0,0,2916,2917,5,84,0,0,2917,2918,5,69,0,0,2918, + 2919,5,83,0,0,2919,580,1,0,0,0,2920,2921,5,68,0,0,2921,2922,5,69,0,0,2922, + 2923,5,67,0,0,2923,2924,5,73,0,0,2924,2925,5,77,0,0,2925,2926,5,65,0,0, + 2926,2927,5,76,0,0,2927,582,1,0,0,0,2928,2929,5,68,0,0,2929,2930,5,69,0, + 0,2930,2931,5,67,0,0,2931,584,1,0,0,0,2932,2933,5,78,0,0,2933,2934,5,85, + 0,0,2934,2935,5,77,0,0,2935,2936,5,69,0,0,2936,2937,5,82,0,0,2937,2938, + 5,73,0,0,2938,2939,5,67,0,0,2939,586,1,0,0,0,2940,2941,5,84,0,0,2941,2942, + 5,73,0,0,2942,2943,5,78,0,0,2943,2944,5,89,0,0,2944,2945,5,73,0,0,2945, + 2946,5,78,0,0,2946,2947,5,84,0,0,2947,588,1,0,0,0,2948,2949,5,83,0,0,2949, + 2950,5,77,0,0,2950,2951,5,65,0,0,2951,2952,5,76,0,0,2952,2953,5,76,0,0, + 2953,2954,5,73,0,0,2954,2955,5,78,0,0,2955,2956,5,84,0,0,2956,590,1,0,0, + 0,2957,2958,5,73,0,0,2958,2959,5,78,0,0,2959,2960,5,84,0,0,2960,592,1,0, + 0,0,2961,2962,5,73,0,0,2962,2963,5,78,0,0,2963,2964,5,84,0,0,2964,2965, + 5,69,0,0,2965,2966,5,71,0,0,2966,2967,5,69,0,0,2967,2968,5,82,0,0,2968, + 594,1,0,0,0,2969,2970,5,66,0,0,2970,2971,5,73,0,0,2971,2972,5,71,0,0,2972, + 2973,5,73,0,0,2973,2974,5,78,0,0,2974,2975,5,84,0,0,2975,596,1,0,0,0,2976, + 2977,5,70,0,0,2977,2978,5,76,0,0,2978,2979,5,79,0,0,2979,2980,5,65,0,0, + 2980,2981,5,84,0,0,2981,598,1,0,0,0,2982,2983,5,68,0,0,2983,2984,5,79,0, + 0,2984,2985,5,85,0,0,2985,2986,5,66,0,0,2986,2987,5,76,0,0,2987,2988,5, + 69,0,0,2988,600,1,0,0,0,2989,2990,5,68,0,0,2990,2991,5,65,0,0,2991,2992, + 5,84,0,0,2992,2993,5,69,0,0,2993,602,1,0,0,0,2994,2995,5,84,0,0,2995,2996, + 5,73,0,0,2996,2997,5,77,0,0,2997,2998,5,69,0,0,2998,604,1,0,0,0,2999,3000, + 5,84,0,0,3000,3001,5,73,0,0,3001,3002,5,77,0,0,3002,3003,5,69,0,0,3003, + 3004,5,83,0,0,3004,3005,5,84,0,0,3005,3006,5,65,0,0,3006,3007,5,77,0,0, + 3007,3008,5,80,0,0,3008,606,1,0,0,0,3009,3010,5,84,0,0,3010,3011,5,73,0, + 0,3011,3012,5,77,0,0,3012,3013,5,69,0,0,3013,3014,5,83,0,0,3014,3015,5, + 84,0,0,3015,3016,5,65,0,0,3016,3017,5,77,0,0,3017,3018,5,80,0,0,3018,3019, + 5,95,0,0,3019,3020,5,76,0,0,3020,3021,5,84,0,0,3021,3022,5,90,0,0,3022, + 608,1,0,0,0,3023,3024,5,77,0,0,3024,3025,5,85,0,0,3025,3026,5,76,0,0,3026, + 3027,5,84,0,0,3027,3028,5,73,0,0,3028,3029,5,83,0,0,3029,3030,5,69,0,0, + 3030,3031,5,84,0,0,3031,610,1,0,0,0,3032,3033,5,66,0,0,3033,3034,5,79,0, + 0,3034,3035,5,79,0,0,3035,3036,5,76,0,0,3036,3037,5,69,0,0,3037,3038,5, + 65,0,0,3038,3039,5,78,0,0,3039,612,1,0,0,0,3040,3041,5,82,0,0,3041,3042, + 5,65,0,0,3042,3043,5,87,0,0,3043,614,1,0,0,0,3044,3045,5,82,0,0,3045,3046, + 5,79,0,0,3046,3047,5,87,0,0,3047,616,1,0,0,0,3048,3049,5,78,0,0,3049,3050, + 5,85,0,0,3050,3051,5,76,0,0,3051,3052,5,76,0,0,3052,618,1,0,0,0,3053,3054, + 5,68,0,0,3054,3055,5,65,0,0,3055,3056,5,84,0,0,3056,3057,5,69,0,0,3057, + 3058,5,84,0,0,3058,3059,5,73,0,0,3059,3060,5,77,0,0,3060,3061,5,69,0,0, + 3061,620,1,0,0,0,3062,3063,5,61,0,0,3063,622,1,0,0,0,3064,3065,5,62,0,0, + 3065,624,1,0,0,0,3066,3067,5,60,0,0,3067,626,1,0,0,0,3068,3069,5,33,0,0, + 3069,628,1,0,0,0,3070,3071,5,126,0,0,3071,630,1,0,0,0,3072,3073,5,124,0, + 0,3073,632,1,0,0,0,3074,3075,5,38,0,0,3075,634,1,0,0,0,3076,3077,5,94,0, + 0,3077,636,1,0,0,0,3078,3079,5,46,0,0,3079,638,1,0,0,0,3080,3081,5,91,0, + 0,3081,640,1,0,0,0,3082,3083,5,93,0,0,3083,642,1,0,0,0,3084,3085,5,40,0, + 0,3085,644,1,0,0,0,3086,3087,5,41,0,0,3087,646,1,0,0,0,3088,3089,5,123, + 0,0,3089,648,1,0,0,0,3090,3091,5,125,0,0,3091,650,1,0,0,0,3092,3093,5,44, + 0,0,3093,652,1,0,0,0,3094,3095,5,59,0,0,3095,654,1,0,0,0,3096,3097,5,64, + 0,0,3097,656,1,0,0,0,3098,3099,5,39,0,0,3099,658,1,0,0,0,3100,3101,5,34, + 0,0,3101,660,1,0,0,0,3102,3103,5,96,0,0,3103,662,1,0,0,0,3104,3105,5,58, + 0,0,3105,664,1,0,0,0,3106,3107,5,42,0,0,3107,666,1,0,0,0,3108,3109,5,95, + 0,0,3109,668,1,0,0,0,3110,3111,5,45,0,0,3111,670,1,0,0,0,3112,3113,5,43, + 0,0,3113,672,1,0,0,0,3114,3115,5,37,0,0,3115,674,1,0,0,0,3116,3117,5,124, + 0,0,3117,3118,5,124,0,0,3118,676,1,0,0,0,3119,3120,5,45,0,0,3120,3121,5, + 45,0,0,3121,678,1,0,0,0,3122,3123,5,47,0,0,3123,680,1,0,0,0,3124,3125,5, + 63,0,0,3125,682,1,0,0,0,3126,3127,5,46,0,0,3127,3128,3,705,352,0,3128,684, + 1,0,0,0,3129,3133,3,711,355,0,3130,3133,3,713,356,0,3131,3133,3,717,358, + 0,3132,3129,1,0,0,0,3132,3130,1,0,0,0,3132,3131,1,0,0,0,3133,686,1,0,0, + 0,3134,3136,3,707,353,0,3135,3134,1,0,0,0,3136,3137,1,0,0,0,3137,3135,1, + 0,0,0,3137,3138,1,0,0,0,3138,688,1,0,0,0,3139,3141,3,707,353,0,3140,3139, + 1,0,0,0,3141,3142,1,0,0,0,3142,3140,1,0,0,0,3142,3143,1,0,0,0,3143,3145, + 1,0,0,0,3144,3140,1,0,0,0,3144,3145,1,0,0,0,3145,3146,1,0,0,0,3146,3148, + 5,46,0,0,3147,3149,3,707,353,0,3148,3147,1,0,0,0,3149,3150,1,0,0,0,3150, + 3148,1,0,0,0,3150,3151,1,0,0,0,3151,3183,1,0,0,0,3152,3154,3,707,353,0, + 3153,3152,1,0,0,0,3154,3155,1,0,0,0,3155,3153,1,0,0,0,3155,3156,1,0,0,0, + 3156,3157,1,0,0,0,3157,3158,5,46,0,0,3158,3159,3,703,351,0,3159,3183,1, + 0,0,0,3160,3162,3,707,353,0,3161,3160,1,0,0,0,3162,3163,1,0,0,0,3163,3161, + 1,0,0,0,3163,3164,1,0,0,0,3164,3166,1,0,0,0,3165,3161,1,0,0,0,3165,3166, + 1,0,0,0,3166,3167,1,0,0,0,3167,3169,5,46,0,0,3168,3170,3,707,353,0,3169, + 3168,1,0,0,0,3170,3171,1,0,0,0,3171,3169,1,0,0,0,3171,3172,1,0,0,0,3172, + 3173,1,0,0,0,3173,3174,3,703,351,0,3174,3183,1,0,0,0,3175,3177,3,707,353, + 0,3176,3175,1,0,0,0,3177,3178,1,0,0,0,3178,3176,1,0,0,0,3178,3179,1,0,0, + 0,3179,3180,1,0,0,0,3180,3181,3,703,351,0,3181,3183,1,0,0,0,3182,3144,1, + 0,0,0,3182,3153,1,0,0,0,3182,3165,1,0,0,0,3182,3176,1,0,0,0,3183,690,1, + 0,0,0,3184,3185,3,715,357,0,3185,692,1,0,0,0,3186,3187,3,705,352,0,3187, + 694,1,0,0,0,3188,3189,3,699,349,0,3189,696,1,0,0,0,3190,3191,5,61,0,0,3191, + 3192,5,62,0,0,3192,698,1,0,0,0,3193,3197,7,2,0,0,3194,3196,8,3,0,0,3195, + 3194,1,0,0,0,3196,3199,1,0,0,0,3197,3195,1,0,0,0,3197,3198,1,0,0,0,3198, + 3201,1,0,0,0,3199,3197,1,0,0,0,3200,3193,1,0,0,0,3201,3202,1,0,0,0,3202, + 3200,1,0,0,0,3202,3203,1,0,0,0,3203,700,1,0,0,0,3204,3212,5,96,0,0,3205, + 3206,5,92,0,0,3206,3211,9,0,0,0,3207,3208,5,96,0,0,3208,3211,5,96,0,0,3209, + 3211,8,4,0,0,3210,3205,1,0,0,0,3210,3207,1,0,0,0,3210,3209,1,0,0,0,3211, + 3214,1,0,0,0,3212,3210,1,0,0,0,3212,3213,1,0,0,0,3213,3215,1,0,0,0,3214, + 3212,1,0,0,0,3215,3216,5,96,0,0,3216,702,1,0,0,0,3217,3219,5,69,0,0,3218, + 3220,7,5,0,0,3219,3218,1,0,0,0,3219,3220,1,0,0,0,3220,3222,1,0,0,0,3221, + 3223,3,707,353,0,3222,3221,1,0,0,0,3223,3224,1,0,0,0,3224,3222,1,0,0,0, + 3224,3225,1,0,0,0,3225,704,1,0,0,0,3226,3228,7,6,0,0,3227,3226,1,0,0,0, + 3228,3231,1,0,0,0,3229,3230,1,0,0,0,3229,3227,1,0,0,0,3230,3233,1,0,0,0, + 3231,3229,1,0,0,0,3232,3234,7,7,0,0,3233,3232,1,0,0,0,3234,3235,1,0,0,0, + 3235,3236,1,0,0,0,3235,3233,1,0,0,0,3236,3240,1,0,0,0,3237,3239,7,6,0,0, + 3238,3237,1,0,0,0,3239,3242,1,0,0,0,3240,3238,1,0,0,0,3240,3241,1,0,0,0, + 3241,706,1,0,0,0,3242,3240,1,0,0,0,3243,3244,7,8,0,0,3244,708,1,0,0,0,3245, + 3246,7,9,0,0,3246,710,1,0,0,0,3247,3255,5,34,0,0,3248,3249,5,92,0,0,3249, + 3254,9,0,0,0,3250,3251,5,34,0,0,3251,3254,5,34,0,0,3252,3254,8,10,0,0,3253, + 3248,1,0,0,0,3253,3250,1,0,0,0,3253,3252,1,0,0,0,3254,3257,1,0,0,0,3255, + 3253,1,0,0,0,3255,3256,1,0,0,0,3256,3258,1,0,0,0,3257,3255,1,0,0,0,3258, + 3259,5,34,0,0,3259,712,1,0,0,0,3260,3268,5,39,0,0,3261,3262,5,92,0,0,3262, + 3267,9,0,0,0,3263,3264,5,39,0,0,3264,3267,5,39,0,0,3265,3267,8,11,0,0,3266, + 3261,1,0,0,0,3266,3263,1,0,0,0,3266,3265,1,0,0,0,3267,3270,1,0,0,0,3268, + 3266,1,0,0,0,3268,3269,1,0,0,0,3269,3271,1,0,0,0,3270,3268,1,0,0,0,3271, + 3272,5,39,0,0,3272,714,1,0,0,0,3273,3274,5,66,0,0,3274,3276,5,39,0,0,3275, + 3277,7,12,0,0,3276,3275,1,0,0,0,3277,3278,1,0,0,0,3278,3276,1,0,0,0,3278, + 3279,1,0,0,0,3279,3280,1,0,0,0,3280,3281,5,39,0,0,3281,716,1,0,0,0,3282, + 3290,5,96,0,0,3283,3284,5,92,0,0,3284,3289,9,0,0,0,3285,3286,5,96,0,0,3286, + 3289,5,96,0,0,3287,3289,8,4,0,0,3288,3283,1,0,0,0,3288,3285,1,0,0,0,3288, + 3287,1,0,0,0,3289,3292,1,0,0,0,3290,3288,1,0,0,0,3290,3291,1,0,0,0,3291, + 3293,1,0,0,0,3292,3290,1,0,0,0,3293,3294,5,96,0,0,3294,718,1,0,0,0,37,0, + 722,732,743,748,752,756,762,766,768,3132,3137,3142,3144,3150,3155,3163, + 3165,3171,3178,3182,3197,3202,3210,3212,3219,3224,3229,3235,3240,3253,3255, + 3266,3268,3278,3288,3290,1,0,1,0]; private static __ATN: ATN; public static get _ATN(): ATN { diff --git a/src/lib/flinksql/FlinkSqlParser.interp b/src/lib/flinksql/FlinkSqlParser.interp index 253bd0a..1e42df8 100644 --- a/src/lib/flinksql/FlinkSqlParser.interp +++ b/src/lib/flinksql/FlinkSqlParser.interp @@ -264,6 +264,24 @@ null 'METADATA' 'VIRTUAL' 'ZONE' +'TUMBLE' +'HOP' +'CUMULATE' +'DESCRIPTOR' +'TIMECOL' +'SIZE' +'OFFSET' +'STEP' +'SLIDE' +'SESSION' +'MATCH_RECOGNIZE' +'MEASURES' +'PATTERN' +'ONE' +'PER' +'SKIP' +'PAST' +'DEFINE' 'STRING' 'ARRAY' 'MAP' @@ -305,6 +323,8 @@ null ']' '(' ')' +'{' +'}' ',' ';' '@' @@ -320,6 +340,7 @@ null '||' '--' '/' +'?' null null null @@ -327,8 +348,7 @@ null null null null -null -null +'=>' token symbolic names: null @@ -596,6 +616,24 @@ ENFORCED METADATA VIRTUAL ZONE +TUMBLE +HOP +CUMULATE +DESCRIPTOR +TIMECOL +SIZE +OFFSET +STEP +SLIDE +SESSION +MATCH_RECOGNIZE +MEASURES +PATTERN +ONE +PER +KW_SKIP +PAST +DEFINE STRING ARRAY MAP @@ -637,6 +675,8 @@ LS_BRACKET RS_BRACKET LR_BRACKET RR_BRACKET +LB_BRACKET +RB_BRACKET COMMA SEMICOLON AT_SIGN @@ -652,15 +692,15 @@ PENCENT_SIGN DOUBLE_VERTICAL_SIGN DOUBLE_HYPNEN_SIGN SLASH_SIGN +QUESTION_MARK_SIGN DOT_ID -PLUS_DOT_ID STRING_LITERAL DIG_LITERAL REAL_LITERAL BIT_STRING ID_LITERAL -PLUS_ID_LITERAL FILE_PATH +DOUBLE_ARROW rule names: program @@ -743,11 +783,13 @@ valuesRowDefinition insertMulStatement queryStatement valuesCaluse +withClause withItem withItemName selectStatement selectClause projectItemDefinition +overWindowItem fromClause tableExpression tableReference @@ -755,20 +797,42 @@ tablePrimary tablePath systemTimePeriod dateTimeExpression +inlineDataValueClause +windoTVFClause +windowTVFExression +windoTVFName +windowTVFParam +timeIntervalParamName +columnDescriptor joinCondition whereClause groupByClause groupItemDefinition +groupingSets +groupingSetsNotaionName +groupWindowFunction +groupWindowFunctionName +timeAttrColumn havingClause -orderByCaluse -orderItemDefition -limitClause windowClause namedWindow windowSpec -sortItem +matchRecognizeClause +orderByCaluse +orderItemDefition +limitClause +partitionByClause +quantifiers +measuresClause +patternDefination +patternVariable +outputMode +afterMatchStrategy +patternVariablesDefination windowFrame frameBound +withinClause +timeIntervalExpression expression booleanExpression predicate @@ -798,7 +862,6 @@ quotedIdentifier whenClause uidList uid -plusUid withOption ifNotExists ifExists @@ -823,4 +886,4 @@ nonReserved atn: -[4, 1, 329, 1906, 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, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 3, 2, 323, 8, 2, 1, 2, 5, 2, 326, 8, 2, 10, 2, 12, 2, 329, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 343, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 361, 8, 5, 1, 6, 1, 6, 3, 6, 365, 8, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 374, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 379, 8, 8, 1, 9, 1, 9, 1, 9, 5, 9, 384, 8, 9, 10, 9, 12, 9, 387, 9, 9, 1, 10, 1, 10, 1, 11, 1, 11, 3, 11, 393, 8, 11, 1, 11, 1, 11, 3, 11, 397, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 404, 8, 12, 10, 12, 12, 12, 407, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 418, 8, 13, 1, 13, 3, 13, 421, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 428, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 436, 8, 13, 1, 13, 1, 13, 1, 13, 3, 13, 441, 8, 13, 1, 13, 3, 13, 444, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 451, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 459, 8, 16, 1, 17, 1, 17, 3, 17, 463, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 475, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 483, 8, 19, 1, 19, 1, 19, 3, 19, 487, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 508, 8, 19, 1, 20, 1, 20, 3, 20, 512, 8, 20, 1, 21, 1, 21, 3, 21, 516, 8, 21, 1, 21, 1, 21, 3, 21, 520, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 527, 8, 21, 10, 21, 12, 21, 530, 9, 21, 1, 21, 1, 21, 3, 21, 534, 8, 21, 1, 21, 1, 21, 3, 21, 538, 8, 21, 1, 21, 1, 21, 3, 21, 542, 8, 21, 1, 21, 1, 21, 3, 21, 546, 8, 21, 1, 21, 3, 21, 549, 8, 21, 1, 21, 1, 21, 3, 21, 553, 8, 21, 1, 22, 1, 22, 1, 22, 3, 22, 558, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 564, 8, 22, 1, 23, 1, 23, 1, 23, 3, 23, 569, 8, 23, 1, 24, 1, 24, 1, 24, 3, 24, 574, 8, 24, 1, 24, 3, 24, 577, 8, 24, 1, 25, 1, 25, 3, 25, 581, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 587, 8, 26, 10, 26, 12, 26, 590, 9, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 3, 27, 597, 8, 27, 1, 27, 1, 27, 3, 27, 601, 8, 27, 1, 27, 1, 27, 3, 27, 605, 8, 27, 1, 27, 1, 27, 3, 27, 609, 8, 27, 1, 27, 1, 27, 3, 27, 613, 8, 27, 1, 27, 1, 27, 3, 27, 617, 8, 27, 1, 27, 1, 27, 3, 27, 621, 8, 27, 1, 27, 1, 27, 3, 27, 625, 8, 27, 1, 27, 1, 27, 3, 27, 629, 8, 27, 3, 27, 631, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 641, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 649, 8, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 5, 33, 671, 8, 33, 10, 33, 12, 33, 674, 9, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 680, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 695, 8, 36, 1, 36, 3, 36, 698, 8, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 706, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 3, 41, 718, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 740, 8, 45, 10, 45, 12, 45, 743, 9, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 753, 8, 46, 10, 46, 12, 46, 756, 9, 46, 1, 46, 1, 46, 3, 46, 760, 8, 46, 1, 47, 1, 47, 3, 47, 764, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 770, 8, 48, 10, 48, 12, 48, 773, 9, 48, 1, 48, 3, 48, 776, 8, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 784, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 3, 52, 794, 8, 52, 1, 52, 1, 52, 3, 52, 798, 8, 52, 1, 52, 1, 52, 1, 53, 1, 53, 3, 53, 804, 8, 53, 1, 53, 1, 53, 3, 53, 808, 8, 53, 1, 53, 1, 53, 3, 53, 812, 8, 53, 1, 53, 3, 53, 815, 8, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 824, 8, 54, 1, 54, 1, 54, 3, 54, 828, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 835, 8, 54, 1, 54, 3, 54, 838, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 846, 8, 55, 10, 55, 12, 55, 849, 9, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 3, 57, 856, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 864, 8, 57, 1, 58, 1, 58, 3, 58, 868, 8, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 883, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 902, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 913, 8, 66, 1, 66, 1, 66, 3, 66, 917, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 924, 8, 66, 1, 67, 1, 67, 1, 67, 3, 67, 929, 8, 67, 1, 67, 1, 67, 1, 68, 1, 68, 3, 68, 935, 8, 68, 1, 68, 1, 68, 3, 68, 939, 8, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 3, 69, 946, 8, 69, 1, 69, 1, 69, 3, 69, 950, 8, 69, 1, 70, 1, 70, 3, 70, 954, 8, 70, 1, 70, 1, 70, 3, 70, 958, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 966, 8, 71, 1, 71, 1, 71, 3, 71, 970, 8, 71, 1, 71, 1, 71, 1, 72, 3, 72, 975, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 980, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 986, 8, 73, 1, 73, 3, 73, 989, 8, 73, 1, 73, 1, 73, 3, 73, 993, 8, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 5, 75, 1002, 8, 75, 10, 75, 12, 75, 1005, 9, 75, 1, 76, 1, 76, 1, 76, 1, 76, 5, 76, 1011, 8, 76, 10, 76, 12, 76, 1014, 9, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 4, 77, 1024, 8, 77, 11, 77, 12, 77, 1025, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 5, 78, 1036, 8, 78, 10, 78, 12, 78, 1039, 9, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1049, 8, 78, 1, 78, 3, 78, 1052, 8, 78, 1, 78, 1, 78, 3, 78, 1056, 8, 78, 1, 78, 3, 78, 1059, 8, 78, 3, 78, 1061, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1066, 8, 78, 1, 78, 1, 78, 3, 78, 1070, 8, 78, 1, 78, 3, 78, 1073, 8, 78, 5, 78, 1075, 8, 78, 10, 78, 12, 78, 1078, 9, 78, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 1084, 8, 79, 10, 79, 12, 79, 1087, 9, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 1094, 8, 80, 10, 80, 12, 80, 1097, 9, 80, 1, 80, 1, 80, 3, 80, 1101, 8, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 3, 82, 1113, 8, 82, 1, 82, 3, 82, 1116, 8, 82, 1, 82, 3, 82, 1119, 8, 82, 1, 82, 3, 82, 1122, 8, 82, 1, 83, 1, 83, 3, 83, 1126, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 5, 83, 1132, 8, 83, 10, 83, 12, 83, 1135, 9, 83, 3, 83, 1137, 8, 83, 1, 84, 1, 84, 3, 84, 1141, 8, 84, 1, 84, 3, 84, 1144, 8, 84, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 5, 86, 1153, 8, 86, 10, 86, 12, 86, 1156, 9, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 1164, 8, 86, 1, 86, 3, 86, 1167, 8, 86, 1, 86, 3, 86, 1170, 8, 86, 1, 86, 1, 86, 1, 86, 3, 86, 1175, 8, 86, 5, 86, 1177, 8, 86, 10, 86, 12, 86, 1180, 9, 86, 1, 87, 1, 87, 3, 87, 1184, 8, 87, 1, 88, 3, 88, 1187, 8, 88, 1, 88, 1, 88, 3, 88, 1191, 8, 88, 1, 88, 3, 88, 1194, 8, 88, 1, 88, 3, 88, 1197, 8, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1207, 8, 88, 10, 88, 12, 88, 1210, 9, 88, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1216, 8, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1227, 8, 88, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 5, 92, 1246, 8, 92, 10, 92, 12, 92, 1249, 9, 92, 1, 92, 1, 92, 3, 92, 1253, 8, 92, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 5, 94, 1263, 8, 94, 10, 94, 12, 94, 1266, 9, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 5, 95, 1275, 8, 95, 10, 95, 12, 95, 1278, 9, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 5, 95, 1287, 8, 95, 10, 95, 12, 95, 1290, 9, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 5, 95, 1299, 8, 95, 10, 95, 12, 95, 1302, 9, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 5, 95, 1312, 8, 95, 10, 95, 12, 95, 1315, 9, 95, 1, 95, 1, 95, 3, 95, 1319, 8, 95, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 5, 97, 1329, 8, 97, 10, 97, 12, 97, 1332, 9, 97, 1, 98, 1, 98, 3, 98, 1336, 8, 98, 1, 99, 1, 99, 1, 99, 3, 99, 1341, 8, 99, 1, 100, 1, 100, 1, 100, 1, 100, 5, 100, 1347, 8, 100, 10, 100, 12, 100, 1350, 9, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 3, 102, 1357, 8, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 5, 102, 1365, 8, 102, 10, 102, 12, 102, 1368, 9, 102, 3, 102, 1370, 8, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 5, 102, 1377, 8, 102, 10, 102, 12, 102, 1380, 9, 102, 3, 102, 1382, 8, 102, 1, 102, 3, 102, 1385, 8, 102, 1, 102, 1, 102, 1, 103, 1, 103, 3, 103, 1391, 8, 103, 1, 103, 1, 103, 3, 103, 1395, 8, 103, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1401, 8, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 3, 107, 1418, 8, 107, 3, 107, 1420, 8, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 5, 107, 1428, 8, 107, 10, 107, 12, 107, 1431, 9, 107, 1, 108, 3, 108, 1434, 8, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1442, 8, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 5, 108, 1449, 8, 108, 10, 108, 12, 108, 1452, 9, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1457, 8, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1470, 8, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1475, 8, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 5, 108, 1485, 8, 108, 10, 108, 12, 108, 1488, 9, 108, 1, 108, 1, 108, 3, 108, 1492, 8, 108, 1, 108, 3, 108, 1495, 8, 108, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1501, 8, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1506, 8, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1511, 8, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1516, 8, 108, 1, 109, 3, 109, 1519, 8, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 5, 109, 1529, 8, 109, 10, 109, 12, 109, 1532, 9, 109, 1, 109, 1, 109, 3, 109, 1536, 8, 109, 1, 109, 3, 109, 1539, 8, 109, 1, 109, 1, 109, 3, 109, 1543, 8, 109, 1, 110, 1, 110, 1, 110, 1, 110, 3, 110, 1549, 8, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 1570, 8, 110, 10, 110, 12, 110, 1573, 9, 110, 1, 111, 1, 111, 1, 111, 4, 111, 1578, 8, 111, 11, 111, 12, 111, 1579, 1, 111, 1, 111, 3, 111, 1584, 8, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 4, 111, 1591, 8, 111, 11, 111, 12, 111, 1592, 1, 111, 1, 111, 3, 111, 1597, 8, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1613, 8, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1622, 8, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1646, 8, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1651, 8, 111, 10, 111, 12, 111, 1654, 9, 111, 3, 111, 1656, 8, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1666, 8, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1673, 8, 111, 10, 111, 12, 111, 1676, 9, 111, 1, 112, 1, 112, 1, 113, 1, 113, 1, 114, 1, 114, 1, 115, 1, 115, 3, 115, 1686, 8, 115, 1, 116, 1, 116, 1, 116, 3, 116, 1691, 8, 116, 1, 117, 1, 117, 3, 117, 1695, 8, 117, 1, 118, 1, 118, 1, 118, 4, 118, 1700, 8, 118, 11, 118, 12, 118, 1701, 1, 119, 1, 119, 1, 119, 3, 119, 1707, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 3, 121, 1715, 8, 121, 1, 121, 1, 121, 3, 121, 1719, 8, 121, 1, 122, 3, 122, 1722, 8, 122, 1, 122, 1, 122, 3, 122, 1726, 8, 122, 1, 123, 3, 123, 1729, 8, 123, 1, 123, 1, 123, 3, 123, 1733, 8, 123, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 4, 125, 1740, 8, 125, 11, 125, 12, 125, 1741, 1, 125, 3, 125, 1745, 8, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 5, 127, 1754, 8, 127, 10, 127, 12, 127, 1757, 9, 127, 1, 128, 1, 128, 3, 128, 1761, 8, 128, 1, 129, 1, 129, 1, 129, 1, 129, 3, 129, 1767, 8, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 5, 133, 1781, 8, 133, 10, 133, 12, 133, 1784, 9, 133, 1, 134, 1, 134, 5, 134, 1788, 8, 134, 10, 134, 12, 134, 1791, 9, 134, 1, 135, 1, 135, 5, 135, 1795, 8, 135, 10, 135, 12, 135, 1798, 9, 135, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 5, 139, 1814, 8, 139, 10, 139, 12, 139, 1817, 9, 139, 1, 139, 1, 139, 1, 140, 1, 140, 3, 140, 1823, 8, 140, 1, 140, 3, 140, 1826, 8, 140, 1, 141, 1, 141, 1, 141, 3, 141, 1831, 8, 141, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 1837, 8, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 3, 143, 1845, 8, 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, 3, 144, 1861, 8, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 3, 145, 1870, 8, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 3, 149, 1887, 8, 149, 1, 149, 3, 149, 1890, 8, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 2, 1789, 1796, 5, 156, 172, 214, 220, 222, 157, 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, 0, 40, 2, 0, 36, 36, 84, 84, 1, 0, 87, 89, 2, 0, 193, 193, 253, 255, 2, 0, 192, 192, 239, 239, 2, 0, 5, 5, 24, 24, 2, 0, 74, 74, 76, 76, 2, 0, 6, 6, 82, 82, 1, 0, 246, 250, 3, 0, 283, 283, 288, 288, 291, 291, 6, 0, 265, 265, 268, 272, 276, 280, 284, 284, 286, 286, 292, 292, 1, 0, 70, 71, 2, 0, 273, 275, 281, 282, 2, 0, 266, 266, 287, 287, 1, 0, 233, 234, 3, 0, 8, 8, 102, 102, 236, 236, 1, 0, 233, 235, 2, 0, 167, 167, 237, 238, 1, 0, 241, 243, 2, 0, 184, 184, 186, 186, 2, 0, 83, 83, 140, 140, 2, 0, 105, 106, 108, 108, 2, 0, 48, 49, 51, 52, 1, 0, 35, 36, 2, 0, 67, 67, 69, 69, 1, 0, 8, 9, 1, 0, 32, 33, 2, 0, 297, 297, 315, 316, 4, 0, 132, 132, 313, 313, 317, 317, 320, 320, 2, 0, 315, 316, 318, 318, 1, 0, 315, 316, 1, 0, 324, 325, 2, 0, 324, 324, 327, 327, 1, 0, 327, 328, 1, 0, 321, 322, 4, 0, 132, 132, 313, 313, 315, 317, 319, 320, 3, 0, 25, 25, 296, 297, 315, 316, 2, 0, 8, 8, 10, 10, 32, 0, 6, 6, 13, 17, 20, 21, 26, 30, 32, 32, 34, 36, 38, 38, 50, 50, 56, 69, 72, 72, 75, 77, 80, 81, 84, 85, 90, 93, 95, 97, 99, 99, 102, 104, 107, 107, 110, 124, 128, 142, 144, 184, 186, 203, 205, 212, 214, 234, 236, 237, 239, 240, 253, 254, 258, 260, 265, 273, 276, 278, 280, 285, 287, 292, 6, 0, 45, 46, 48, 52, 54, 55, 105, 108, 143, 143, 223, 223, 24, 0, 4, 42, 44, 44, 47, 47, 53, 53, 56, 70, 72, 77, 80, 81, 83, 85, 90, 99, 102, 104, 109, 142, 144, 176, 178, 212, 214, 222, 224, 234, 236, 237, 239, 240, 253, 254, 256, 256, 258, 260, 265, 273, 276, 278, 280, 285, 287, 292, 2077, 0, 314, 1, 0, 0, 0, 2, 317, 1, 0, 0, 0, 4, 327, 1, 0, 0, 0, 6, 342, 1, 0, 0, 0, 8, 344, 1, 0, 0, 0, 10, 360, 1, 0, 0, 0, 12, 364, 1, 0, 0, 0, 14, 366, 1, 0, 0, 0, 16, 369, 1, 0, 0, 0, 18, 380, 1, 0, 0, 0, 20, 388, 1, 0, 0, 0, 22, 396, 1, 0, 0, 0, 24, 398, 1, 0, 0, 0, 26, 443, 1, 0, 0, 0, 28, 445, 1, 0, 0, 0, 30, 452, 1, 0, 0, 0, 32, 456, 1, 0, 0, 0, 34, 460, 1, 0, 0, 0, 36, 464, 1, 0, 0, 0, 38, 507, 1, 0, 0, 0, 40, 511, 1, 0, 0, 0, 42, 513, 1, 0, 0, 0, 44, 554, 1, 0, 0, 0, 46, 568, 1, 0, 0, 0, 48, 570, 1, 0, 0, 0, 50, 580, 1, 0, 0, 0, 52, 582, 1, 0, 0, 0, 54, 630, 1, 0, 0, 0, 56, 632, 1, 0, 0, 0, 58, 636, 1, 0, 0, 0, 60, 644, 1, 0, 0, 0, 62, 652, 1, 0, 0, 0, 64, 656, 1, 0, 0, 0, 66, 663, 1, 0, 0, 0, 68, 679, 1, 0, 0, 0, 70, 686, 1, 0, 0, 0, 72, 689, 1, 0, 0, 0, 74, 699, 1, 0, 0, 0, 76, 701, 1, 0, 0, 0, 78, 707, 1, 0, 0, 0, 80, 709, 1, 0, 0, 0, 82, 717, 1, 0, 0, 0, 84, 725, 1, 0, 0, 0, 86, 727, 1, 0, 0, 0, 88, 731, 1, 0, 0, 0, 90, 735, 1, 0, 0, 0, 92, 759, 1, 0, 0, 0, 94, 763, 1, 0, 0, 0, 96, 765, 1, 0, 0, 0, 98, 777, 1, 0, 0, 0, 100, 783, 1, 0, 0, 0, 102, 785, 1, 0, 0, 0, 104, 790, 1, 0, 0, 0, 106, 801, 1, 0, 0, 0, 108, 819, 1, 0, 0, 0, 110, 839, 1, 0, 0, 0, 112, 850, 1, 0, 0, 0, 114, 852, 1, 0, 0, 0, 116, 865, 1, 0, 0, 0, 118, 872, 1, 0, 0, 0, 120, 875, 1, 0, 0, 0, 122, 884, 1, 0, 0, 0, 124, 888, 1, 0, 0, 0, 126, 892, 1, 0, 0, 0, 128, 895, 1, 0, 0, 0, 130, 903, 1, 0, 0, 0, 132, 908, 1, 0, 0, 0, 134, 925, 1, 0, 0, 0, 136, 932, 1, 0, 0, 0, 138, 942, 1, 0, 0, 0, 140, 951, 1, 0, 0, 0, 142, 961, 1, 0, 0, 0, 144, 979, 1, 0, 0, 0, 146, 981, 1, 0, 0, 0, 148, 994, 1, 0, 0, 0, 150, 997, 1, 0, 0, 0, 152, 1006, 1, 0, 0, 0, 154, 1017, 1, 0, 0, 0, 156, 1060, 1, 0, 0, 0, 158, 1079, 1, 0, 0, 0, 160, 1088, 1, 0, 0, 0, 162, 1107, 1, 0, 0, 0, 164, 1109, 1, 0, 0, 0, 166, 1123, 1, 0, 0, 0, 168, 1138, 1, 0, 0, 0, 170, 1145, 1, 0, 0, 0, 172, 1148, 1, 0, 0, 0, 174, 1181, 1, 0, 0, 0, 176, 1226, 1, 0, 0, 0, 178, 1228, 1, 0, 0, 0, 180, 1230, 1, 0, 0, 0, 182, 1236, 1, 0, 0, 0, 184, 1252, 1, 0, 0, 0, 186, 1254, 1, 0, 0, 0, 188, 1257, 1, 0, 0, 0, 190, 1318, 1, 0, 0, 0, 192, 1320, 1, 0, 0, 0, 194, 1323, 1, 0, 0, 0, 196, 1333, 1, 0, 0, 0, 198, 1337, 1, 0, 0, 0, 200, 1342, 1, 0, 0, 0, 202, 1351, 1, 0, 0, 0, 204, 1356, 1, 0, 0, 0, 206, 1388, 1, 0, 0, 0, 208, 1400, 1, 0, 0, 0, 210, 1402, 1, 0, 0, 0, 212, 1405, 1, 0, 0, 0, 214, 1419, 1, 0, 0, 0, 216, 1515, 1, 0, 0, 0, 218, 1542, 1, 0, 0, 0, 220, 1548, 1, 0, 0, 0, 222, 1665, 1, 0, 0, 0, 224, 1677, 1, 0, 0, 0, 226, 1679, 1, 0, 0, 0, 228, 1681, 1, 0, 0, 0, 230, 1685, 1, 0, 0, 0, 232, 1687, 1, 0, 0, 0, 234, 1692, 1, 0, 0, 0, 236, 1699, 1, 0, 0, 0, 238, 1703, 1, 0, 0, 0, 240, 1708, 1, 0, 0, 0, 242, 1718, 1, 0, 0, 0, 244, 1721, 1, 0, 0, 0, 246, 1728, 1, 0, 0, 0, 248, 1734, 1, 0, 0, 0, 250, 1744, 1, 0, 0, 0, 252, 1746, 1, 0, 0, 0, 254, 1750, 1, 0, 0, 0, 256, 1760, 1, 0, 0, 0, 258, 1766, 1, 0, 0, 0, 260, 1768, 1, 0, 0, 0, 262, 1770, 1, 0, 0, 0, 264, 1772, 1, 0, 0, 0, 266, 1777, 1, 0, 0, 0, 268, 1785, 1, 0, 0, 0, 270, 1792, 1, 0, 0, 0, 272, 1799, 1, 0, 0, 0, 274, 1802, 1, 0, 0, 0, 276, 1806, 1, 0, 0, 0, 278, 1809, 1, 0, 0, 0, 280, 1820, 1, 0, 0, 0, 282, 1830, 1, 0, 0, 0, 284, 1836, 1, 0, 0, 0, 286, 1844, 1, 0, 0, 0, 288, 1860, 1, 0, 0, 0, 290, 1869, 1, 0, 0, 0, 292, 1871, 1, 0, 0, 0, 294, 1873, 1, 0, 0, 0, 296, 1875, 1, 0, 0, 0, 298, 1889, 1, 0, 0, 0, 300, 1891, 1, 0, 0, 0, 302, 1893, 1, 0, 0, 0, 304, 1895, 1, 0, 0, 0, 306, 1897, 1, 0, 0, 0, 308, 1899, 1, 0, 0, 0, 310, 1901, 1, 0, 0, 0, 312, 1903, 1, 0, 0, 0, 314, 315, 3, 2, 1, 0, 315, 316, 5, 0, 0, 1, 316, 1, 1, 0, 0, 0, 317, 318, 3, 4, 2, 0, 318, 319, 5, 0, 0, 1, 319, 3, 1, 0, 0, 0, 320, 322, 3, 6, 3, 0, 321, 323, 5, 307, 0, 0, 322, 321, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 326, 1, 0, 0, 0, 324, 326, 3, 8, 4, 0, 325, 320, 1, 0, 0, 0, 325, 324, 1, 0, 0, 0, 326, 329, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 5, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 330, 343, 3, 10, 5, 0, 331, 343, 3, 12, 6, 0, 332, 343, 3, 14, 7, 0, 333, 343, 3, 16, 8, 0, 334, 343, 3, 22, 11, 0, 335, 343, 3, 26, 13, 0, 336, 343, 3, 28, 14, 0, 337, 343, 3, 30, 15, 0, 338, 343, 3, 32, 16, 0, 339, 343, 3, 34, 17, 0, 340, 343, 3, 36, 18, 0, 341, 343, 3, 38, 19, 0, 342, 330, 1, 0, 0, 0, 342, 331, 1, 0, 0, 0, 342, 332, 1, 0, 0, 0, 342, 333, 1, 0, 0, 0, 342, 334, 1, 0, 0, 0, 342, 335, 1, 0, 0, 0, 342, 336, 1, 0, 0, 0, 342, 337, 1, 0, 0, 0, 342, 338, 1, 0, 0, 0, 342, 339, 1, 0, 0, 0, 342, 340, 1, 0, 0, 0, 342, 341, 1, 0, 0, 0, 343, 7, 1, 0, 0, 0, 344, 345, 5, 307, 0, 0, 345, 9, 1, 0, 0, 0, 346, 361, 3, 40, 20, 0, 347, 361, 3, 104, 52, 0, 348, 361, 3, 106, 53, 0, 349, 361, 3, 108, 54, 0, 350, 361, 3, 102, 51, 0, 351, 361, 3, 114, 57, 0, 352, 361, 3, 128, 64, 0, 353, 361, 3, 130, 65, 0, 354, 361, 3, 132, 66, 0, 355, 361, 3, 134, 67, 0, 356, 361, 3, 136, 68, 0, 357, 361, 3, 138, 69, 0, 358, 361, 3, 140, 70, 0, 359, 361, 3, 142, 71, 0, 360, 346, 1, 0, 0, 0, 360, 347, 1, 0, 0, 0, 360, 348, 1, 0, 0, 0, 360, 349, 1, 0, 0, 0, 360, 350, 1, 0, 0, 0, 360, 351, 1, 0, 0, 0, 360, 352, 1, 0, 0, 0, 360, 353, 1, 0, 0, 0, 360, 354, 1, 0, 0, 0, 360, 355, 1, 0, 0, 0, 360, 356, 1, 0, 0, 0, 360, 357, 1, 0, 0, 0, 360, 358, 1, 0, 0, 0, 360, 359, 1, 0, 0, 0, 361, 11, 1, 0, 0, 0, 362, 365, 3, 156, 78, 0, 363, 365, 3, 144, 72, 0, 364, 362, 1, 0, 0, 0, 364, 363, 1, 0, 0, 0, 365, 13, 1, 0, 0, 0, 366, 367, 7, 0, 0, 0, 367, 368, 3, 268, 134, 0, 368, 15, 1, 0, 0, 0, 369, 373, 5, 85, 0, 0, 370, 374, 3, 18, 9, 0, 371, 372, 5, 86, 0, 0, 372, 374, 5, 37, 0, 0, 373, 370, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 378, 1, 0, 0, 0, 375, 379, 3, 12, 6, 0, 376, 379, 3, 146, 73, 0, 377, 379, 3, 154, 77, 0, 378, 375, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 378, 377, 1, 0, 0, 0, 379, 17, 1, 0, 0, 0, 380, 385, 3, 20, 10, 0, 381, 382, 5, 306, 0, 0, 382, 384, 3, 20, 10, 0, 383, 381, 1, 0, 0, 0, 384, 387, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 19, 1, 0, 0, 0, 387, 385, 1, 0, 0, 0, 388, 389, 7, 1, 0, 0, 389, 21, 1, 0, 0, 0, 390, 392, 5, 99, 0, 0, 391, 393, 5, 239, 0, 0, 392, 391, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 394, 1, 0, 0, 0, 394, 397, 3, 268, 134, 0, 395, 397, 3, 24, 12, 0, 396, 390, 1, 0, 0, 0, 396, 395, 1, 0, 0, 0, 397, 23, 1, 0, 0, 0, 398, 399, 5, 99, 0, 0, 399, 400, 5, 101, 0, 0, 400, 405, 3, 268, 134, 0, 401, 402, 5, 306, 0, 0, 402, 404, 3, 268, 134, 0, 403, 401, 1, 0, 0, 0, 404, 407, 1, 0, 0, 0, 405, 403, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 25, 1, 0, 0, 0, 407, 405, 1, 0, 0, 0, 408, 409, 5, 95, 0, 0, 409, 444, 7, 2, 0, 0, 410, 411, 5, 95, 0, 0, 411, 412, 5, 66, 0, 0, 412, 444, 7, 3, 0, 0, 413, 414, 5, 95, 0, 0, 414, 417, 5, 96, 0, 0, 415, 416, 7, 4, 0, 0, 416, 418, 3, 268, 134, 0, 417, 415, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 420, 1, 0, 0, 0, 419, 421, 3, 218, 109, 0, 420, 419, 1, 0, 0, 0, 420, 421, 1, 0, 0, 0, 421, 444, 1, 0, 0, 0, 422, 423, 5, 95, 0, 0, 423, 424, 5, 97, 0, 0, 424, 425, 7, 4, 0, 0, 425, 427, 3, 268, 134, 0, 426, 428, 3, 218, 109, 0, 427, 426, 1, 0, 0, 0, 427, 428, 1, 0, 0, 0, 428, 444, 1, 0, 0, 0, 429, 430, 5, 95, 0, 0, 430, 431, 5, 73, 0, 0, 431, 432, 7, 5, 0, 0, 432, 444, 3, 268, 134, 0, 433, 435, 5, 95, 0, 0, 434, 436, 5, 53, 0, 0, 435, 434, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 444, 5, 103, 0, 0, 438, 440, 5, 95, 0, 0, 439, 441, 5, 52, 0, 0, 440, 439, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 444, 5, 101, 0, 0, 443, 408, 1, 0, 0, 0, 443, 410, 1, 0, 0, 0, 443, 413, 1, 0, 0, 0, 443, 422, 1, 0, 0, 0, 443, 429, 1, 0, 0, 0, 443, 433, 1, 0, 0, 0, 443, 438, 1, 0, 0, 0, 444, 27, 1, 0, 0, 0, 445, 446, 5, 212, 0, 0, 446, 447, 5, 100, 0, 0, 447, 450, 3, 268, 134, 0, 448, 449, 5, 70, 0, 0, 449, 451, 3, 278, 139, 0, 450, 448, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 29, 1, 0, 0, 0, 452, 453, 5, 213, 0, 0, 453, 454, 5, 100, 0, 0, 454, 455, 3, 268, 134, 0, 455, 31, 1, 0, 0, 0, 456, 458, 5, 116, 0, 0, 457, 459, 3, 280, 140, 0, 458, 457, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 33, 1, 0, 0, 0, 460, 462, 5, 117, 0, 0, 461, 463, 3, 282, 141, 0, 462, 461, 1, 0, 0, 0, 462, 463, 1, 0, 0, 0, 463, 35, 1, 0, 0, 0, 464, 465, 7, 6, 0, 0, 465, 466, 5, 244, 0, 0, 466, 467, 3, 112, 56, 0, 467, 37, 1, 0, 0, 0, 468, 469, 5, 6, 0, 0, 469, 470, 5, 244, 0, 0, 470, 471, 5, 70, 0, 0, 471, 474, 5, 329, 0, 0, 472, 473, 5, 7, 0, 0, 473, 475, 3, 268, 134, 0, 474, 472, 1, 0, 0, 0, 474, 475, 1, 0, 0, 0, 475, 508, 1, 0, 0, 0, 476, 477, 5, 6, 0, 0, 477, 478, 5, 245, 0, 0, 478, 479, 5, 70, 0, 0, 479, 482, 5, 329, 0, 0, 480, 481, 5, 7, 0, 0, 481, 483, 3, 268, 134, 0, 482, 480, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 486, 1, 0, 0, 0, 484, 485, 5, 113, 0, 0, 485, 487, 3, 268, 134, 0, 486, 484, 1, 0, 0, 0, 486, 487, 1, 0, 0, 0, 487, 508, 1, 0, 0, 0, 488, 489, 5, 6, 0, 0, 489, 490, 7, 7, 0, 0, 490, 491, 5, 70, 0, 0, 491, 492, 5, 329, 0, 0, 492, 493, 5, 113, 0, 0, 493, 508, 3, 268, 134, 0, 494, 495, 5, 6, 0, 0, 495, 496, 5, 251, 0, 0, 496, 508, 5, 329, 0, 0, 497, 498, 5, 6, 0, 0, 498, 499, 5, 252, 0, 0, 499, 500, 5, 245, 0, 0, 500, 501, 5, 70, 0, 0, 501, 502, 5, 329, 0, 0, 502, 503, 5, 113, 0, 0, 503, 504, 3, 268, 134, 0, 504, 505, 5, 258, 0, 0, 505, 506, 3, 268, 134, 0, 506, 508, 1, 0, 0, 0, 507, 468, 1, 0, 0, 0, 507, 476, 1, 0, 0, 0, 507, 488, 1, 0, 0, 0, 507, 494, 1, 0, 0, 0, 507, 497, 1, 0, 0, 0, 508, 39, 1, 0, 0, 0, 509, 512, 3, 42, 21, 0, 510, 512, 3, 44, 22, 0, 511, 509, 1, 0, 0, 0, 511, 510, 1, 0, 0, 0, 512, 41, 1, 0, 0, 0, 513, 515, 5, 73, 0, 0, 514, 516, 5, 166, 0, 0, 515, 514, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 519, 5, 74, 0, 0, 518, 520, 3, 274, 137, 0, 519, 518, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 522, 3, 98, 49, 0, 522, 523, 5, 304, 0, 0, 523, 528, 3, 46, 23, 0, 524, 525, 5, 306, 0, 0, 525, 527, 3, 46, 23, 0, 526, 524, 1, 0, 0, 0, 527, 530, 1, 0, 0, 0, 528, 526, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 533, 1, 0, 0, 0, 530, 528, 1, 0, 0, 0, 531, 532, 5, 306, 0, 0, 532, 534, 3, 80, 40, 0, 533, 531, 1, 0, 0, 0, 533, 534, 1, 0, 0, 0, 534, 537, 1, 0, 0, 0, 535, 536, 5, 306, 0, 0, 536, 538, 3, 82, 41, 0, 537, 535, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 541, 1, 0, 0, 0, 539, 540, 5, 306, 0, 0, 540, 542, 3, 86, 43, 0, 541, 539, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 545, 5, 305, 0, 0, 544, 546, 3, 70, 35, 0, 545, 544, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 548, 1, 0, 0, 0, 547, 549, 3, 88, 44, 0, 548, 547, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 552, 3, 272, 136, 0, 551, 553, 3, 96, 48, 0, 552, 551, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 43, 1, 0, 0, 0, 554, 555, 5, 73, 0, 0, 555, 557, 5, 74, 0, 0, 556, 558, 3, 274, 137, 0, 557, 556, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 3, 98, 49, 0, 560, 563, 3, 272, 136, 0, 561, 562, 5, 7, 0, 0, 562, 564, 3, 156, 78, 0, 563, 561, 1, 0, 0, 0, 563, 564, 1, 0, 0, 0, 564, 45, 1, 0, 0, 0, 565, 569, 3, 48, 24, 0, 566, 569, 3, 72, 36, 0, 567, 569, 3, 76, 38, 0, 568, 565, 1, 0, 0, 0, 568, 566, 1, 0, 0, 0, 568, 567, 1, 0, 0, 0, 569, 47, 1, 0, 0, 0, 570, 571, 3, 50, 25, 0, 571, 573, 3, 54, 27, 0, 572, 574, 3, 68, 34, 0, 573, 572, 1, 0, 0, 0, 573, 574, 1, 0, 0, 0, 574, 576, 1, 0, 0, 0, 575, 577, 3, 70, 35, 0, 576, 575, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 49, 1, 0, 0, 0, 578, 581, 3, 270, 135, 0, 579, 581, 3, 212, 106, 0, 580, 578, 1, 0, 0, 0, 580, 579, 1, 0, 0, 0, 581, 51, 1, 0, 0, 0, 582, 583, 5, 304, 0, 0, 583, 588, 3, 50, 25, 0, 584, 585, 5, 306, 0, 0, 585, 587, 3, 50, 25, 0, 586, 584, 1, 0, 0, 0, 587, 590, 1, 0, 0, 0, 588, 586, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 591, 1, 0, 0, 0, 590, 588, 1, 0, 0, 0, 591, 592, 5, 305, 0, 0, 592, 53, 1, 0, 0, 0, 593, 631, 7, 8, 0, 0, 594, 596, 7, 9, 0, 0, 595, 597, 3, 56, 28, 0, 596, 595, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 631, 1, 0, 0, 0, 598, 600, 5, 285, 0, 0, 599, 601, 3, 56, 28, 0, 600, 599, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 608, 1, 0, 0, 0, 602, 604, 7, 10, 0, 0, 603, 605, 5, 224, 0, 0, 604, 603, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 607, 5, 284, 0, 0, 607, 609, 5, 264, 0, 0, 608, 602, 1, 0, 0, 0, 608, 609, 1, 0, 0, 0, 609, 631, 1, 0, 0, 0, 610, 612, 7, 11, 0, 0, 611, 613, 3, 58, 29, 0, 612, 611, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 631, 1, 0, 0, 0, 614, 616, 7, 12, 0, 0, 615, 617, 3, 62, 31, 0, 616, 615, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 631, 1, 0, 0, 0, 618, 620, 5, 267, 0, 0, 619, 621, 3, 64, 32, 0, 620, 619, 1, 0, 0, 0, 620, 621, 1, 0, 0, 0, 621, 631, 1, 0, 0, 0, 622, 624, 5, 290, 0, 0, 623, 625, 3, 66, 33, 0, 624, 623, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 631, 1, 0, 0, 0, 626, 628, 5, 289, 0, 0, 627, 629, 3, 60, 30, 0, 628, 627, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 631, 1, 0, 0, 0, 630, 593, 1, 0, 0, 0, 630, 594, 1, 0, 0, 0, 630, 598, 1, 0, 0, 0, 630, 610, 1, 0, 0, 0, 630, 614, 1, 0, 0, 0, 630, 618, 1, 0, 0, 0, 630, 622, 1, 0, 0, 0, 630, 626, 1, 0, 0, 0, 631, 55, 1, 0, 0, 0, 632, 633, 5, 304, 0, 0, 633, 634, 3, 302, 151, 0, 634, 635, 5, 305, 0, 0, 635, 57, 1, 0, 0, 0, 636, 637, 5, 304, 0, 0, 637, 640, 3, 302, 151, 0, 638, 639, 5, 306, 0, 0, 639, 641, 3, 302, 151, 0, 640, 638, 1, 0, 0, 0, 640, 641, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 643, 5, 305, 0, 0, 643, 59, 1, 0, 0, 0, 644, 645, 5, 304, 0, 0, 645, 648, 3, 300, 150, 0, 646, 647, 5, 306, 0, 0, 647, 649, 3, 300, 150, 0, 648, 646, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 651, 5, 305, 0, 0, 651, 61, 1, 0, 0, 0, 652, 653, 5, 295, 0, 0, 653, 654, 3, 54, 27, 0, 654, 655, 5, 294, 0, 0, 655, 63, 1, 0, 0, 0, 656, 657, 5, 295, 0, 0, 657, 658, 3, 54, 27, 0, 658, 659, 5, 306, 0, 0, 659, 660, 3, 54, 27, 0, 660, 661, 1, 0, 0, 0, 661, 662, 5, 294, 0, 0, 662, 65, 1, 0, 0, 0, 663, 664, 5, 295, 0, 0, 664, 665, 3, 50, 25, 0, 665, 672, 3, 54, 27, 0, 666, 667, 5, 306, 0, 0, 667, 668, 3, 50, 25, 0, 668, 669, 3, 54, 27, 0, 669, 671, 1, 0, 0, 0, 670, 666, 1, 0, 0, 0, 671, 674, 1, 0, 0, 0, 672, 670, 1, 0, 0, 0, 672, 673, 1, 0, 0, 0, 673, 675, 1, 0, 0, 0, 674, 672, 1, 0, 0, 0, 675, 676, 5, 294, 0, 0, 676, 67, 1, 0, 0, 0, 677, 678, 5, 185, 0, 0, 678, 680, 3, 84, 42, 0, 679, 677, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 681, 1, 0, 0, 0, 681, 682, 5, 256, 0, 0, 682, 683, 5, 258, 0, 0, 683, 684, 5, 25, 0, 0, 684, 685, 5, 261, 0, 0, 685, 69, 1, 0, 0, 0, 686, 687, 5, 115, 0, 0, 687, 688, 5, 323, 0, 0, 688, 71, 1, 0, 0, 0, 689, 690, 3, 50, 25, 0, 690, 691, 3, 54, 27, 0, 691, 694, 5, 262, 0, 0, 692, 693, 5, 5, 0, 0, 693, 695, 3, 74, 37, 0, 694, 692, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 697, 1, 0, 0, 0, 696, 698, 5, 263, 0, 0, 697, 696, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 73, 1, 0, 0, 0, 699, 700, 5, 323, 0, 0, 700, 75, 1, 0, 0, 0, 701, 702, 3, 50, 25, 0, 702, 703, 5, 7, 0, 0, 703, 705, 3, 78, 39, 0, 704, 706, 3, 70, 35, 0, 705, 704, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 77, 1, 0, 0, 0, 707, 708, 3, 212, 106, 0, 708, 79, 1, 0, 0, 0, 709, 710, 5, 226, 0, 0, 710, 711, 5, 37, 0, 0, 711, 712, 3, 212, 106, 0, 712, 713, 5, 7, 0, 0, 713, 714, 3, 212, 106, 0, 714, 81, 1, 0, 0, 0, 715, 716, 5, 185, 0, 0, 716, 718, 3, 84, 42, 0, 717, 715, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 5, 256, 0, 0, 720, 721, 5, 258, 0, 0, 721, 722, 3, 52, 26, 0, 722, 723, 5, 25, 0, 0, 723, 724, 5, 261, 0, 0, 724, 83, 1, 0, 0, 0, 725, 726, 3, 256, 128, 0, 726, 85, 1, 0, 0, 0, 727, 728, 5, 259, 0, 0, 728, 729, 5, 37, 0, 0, 729, 730, 5, 260, 0, 0, 730, 87, 1, 0, 0, 0, 731, 732, 5, 200, 0, 0, 732, 733, 5, 13, 0, 0, 733, 734, 3, 90, 45, 0, 734, 89, 1, 0, 0, 0, 735, 736, 5, 304, 0, 0, 736, 741, 3, 92, 46, 0, 737, 738, 5, 306, 0, 0, 738, 740, 3, 92, 46, 0, 739, 737, 1, 0, 0, 0, 740, 743, 1, 0, 0, 0, 741, 739, 1, 0, 0, 0, 741, 742, 1, 0, 0, 0, 742, 744, 1, 0, 0, 0, 743, 741, 1, 0, 0, 0, 744, 745, 5, 305, 0, 0, 745, 91, 1, 0, 0, 0, 746, 760, 3, 230, 115, 0, 747, 748, 3, 256, 128, 0, 748, 749, 5, 304, 0, 0, 749, 754, 3, 94, 47, 0, 750, 751, 5, 306, 0, 0, 751, 753, 3, 94, 47, 0, 752, 750, 1, 0, 0, 0, 753, 756, 1, 0, 0, 0, 754, 752, 1, 0, 0, 0, 754, 755, 1, 0, 0, 0, 755, 757, 1, 0, 0, 0, 756, 754, 1, 0, 0, 0, 757, 758, 5, 305, 0, 0, 758, 760, 1, 0, 0, 0, 759, 746, 1, 0, 0, 0, 759, 747, 1, 0, 0, 0, 760, 93, 1, 0, 0, 0, 761, 764, 3, 230, 115, 0, 762, 764, 3, 298, 149, 0, 763, 761, 1, 0, 0, 0, 763, 762, 1, 0, 0, 0, 764, 95, 1, 0, 0, 0, 765, 766, 5, 29, 0, 0, 766, 775, 3, 98, 49, 0, 767, 771, 5, 304, 0, 0, 768, 770, 3, 100, 50, 0, 769, 768, 1, 0, 0, 0, 770, 773, 1, 0, 0, 0, 771, 769, 1, 0, 0, 0, 771, 772, 1, 0, 0, 0, 772, 774, 1, 0, 0, 0, 773, 771, 1, 0, 0, 0, 774, 776, 5, 305, 0, 0, 775, 767, 1, 0, 0, 0, 775, 776, 1, 0, 0, 0, 776, 97, 1, 0, 0, 0, 777, 778, 3, 268, 134, 0, 778, 99, 1, 0, 0, 0, 779, 780, 7, 13, 0, 0, 780, 784, 7, 14, 0, 0, 781, 782, 7, 15, 0, 0, 782, 784, 7, 16, 0, 0, 783, 779, 1, 0, 0, 0, 783, 781, 1, 0, 0, 0, 784, 101, 1, 0, 0, 0, 785, 786, 5, 73, 0, 0, 786, 787, 5, 239, 0, 0, 787, 788, 3, 268, 134, 0, 788, 789, 3, 272, 136, 0, 789, 103, 1, 0, 0, 0, 790, 791, 5, 73, 0, 0, 791, 793, 5, 192, 0, 0, 792, 794, 3, 274, 137, 0, 793, 792, 1, 0, 0, 0, 793, 794, 1, 0, 0, 0, 794, 795, 1, 0, 0, 0, 795, 797, 3, 268, 134, 0, 796, 798, 3, 70, 35, 0, 797, 796, 1, 0, 0, 0, 797, 798, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, 800, 3, 272, 136, 0, 800, 105, 1, 0, 0, 0, 801, 803, 5, 73, 0, 0, 802, 804, 5, 166, 0, 0, 803, 802, 1, 0, 0, 0, 803, 804, 1, 0, 0, 0, 804, 805, 1, 0, 0, 0, 805, 807, 5, 76, 0, 0, 806, 808, 3, 274, 137, 0, 807, 806, 1, 0, 0, 0, 807, 808, 1, 0, 0, 0, 808, 809, 1, 0, 0, 0, 809, 811, 3, 268, 134, 0, 810, 812, 3, 52, 26, 0, 811, 810, 1, 0, 0, 0, 811, 812, 1, 0, 0, 0, 812, 814, 1, 0, 0, 0, 813, 815, 3, 70, 35, 0, 814, 813, 1, 0, 0, 0, 814, 815, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 817, 5, 7, 0, 0, 817, 818, 3, 156, 78, 0, 818, 107, 1, 0, 0, 0, 819, 823, 5, 73, 0, 0, 820, 824, 5, 166, 0, 0, 821, 822, 5, 166, 0, 0, 822, 824, 5, 232, 0, 0, 823, 820, 1, 0, 0, 0, 823, 821, 1, 0, 0, 0, 823, 824, 1, 0, 0, 0, 824, 825, 1, 0, 0, 0, 825, 827, 5, 157, 0, 0, 826, 828, 3, 274, 137, 0, 827, 826, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 830, 3, 268, 134, 0, 830, 831, 5, 7, 0, 0, 831, 834, 3, 256, 128, 0, 832, 833, 5, 240, 0, 0, 833, 835, 7, 17, 0, 0, 834, 832, 1, 0, 0, 0, 834, 835, 1, 0, 0, 0, 835, 837, 1, 0, 0, 0, 836, 838, 3, 110, 55, 0, 837, 836, 1, 0, 0, 0, 837, 838, 1, 0, 0, 0, 838, 109, 1, 0, 0, 0, 839, 840, 5, 143, 0, 0, 840, 841, 5, 244, 0, 0, 841, 847, 3, 112, 56, 0, 842, 843, 5, 306, 0, 0, 843, 844, 5, 244, 0, 0, 844, 846, 3, 112, 56, 0, 845, 842, 1, 0, 0, 0, 846, 849, 1, 0, 0, 0, 847, 845, 1, 0, 0, 0, 847, 848, 1, 0, 0, 0, 848, 111, 1, 0, 0, 0, 849, 847, 1, 0, 0, 0, 850, 851, 5, 323, 0, 0, 851, 113, 1, 0, 0, 0, 852, 853, 5, 112, 0, 0, 853, 855, 5, 74, 0, 0, 854, 856, 3, 276, 138, 0, 855, 854, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 863, 3, 268, 134, 0, 858, 864, 3, 116, 58, 0, 859, 864, 3, 118, 59, 0, 860, 864, 3, 120, 60, 0, 861, 864, 3, 122, 61, 0, 862, 864, 3, 124, 62, 0, 863, 858, 1, 0, 0, 0, 863, 859, 1, 0, 0, 0, 863, 860, 1, 0, 0, 0, 863, 861, 1, 0, 0, 0, 863, 862, 1, 0, 0, 0, 864, 115, 1, 0, 0, 0, 865, 867, 5, 113, 0, 0, 866, 868, 3, 268, 134, 0, 867, 866, 1, 0, 0, 0, 867, 868, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 870, 5, 109, 0, 0, 870, 871, 3, 268, 134, 0, 871, 117, 1, 0, 0, 0, 872, 873, 5, 116, 0, 0, 873, 874, 3, 278, 139, 0, 874, 119, 1, 0, 0, 0, 875, 876, 5, 6, 0, 0, 876, 877, 5, 185, 0, 0, 877, 878, 3, 84, 42, 0, 878, 879, 5, 256, 0, 0, 879, 880, 5, 258, 0, 0, 880, 882, 3, 52, 26, 0, 881, 883, 3, 126, 63, 0, 882, 881, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 121, 1, 0, 0, 0, 884, 885, 5, 104, 0, 0, 885, 886, 5, 185, 0, 0, 886, 887, 3, 84, 42, 0, 887, 123, 1, 0, 0, 0, 888, 889, 5, 6, 0, 0, 889, 890, 5, 257, 0, 0, 890, 891, 3, 52, 26, 0, 891, 125, 1, 0, 0, 0, 892, 893, 5, 25, 0, 0, 893, 894, 5, 261, 0, 0, 894, 127, 1, 0, 0, 0, 895, 896, 5, 112, 0, 0, 896, 897, 5, 76, 0, 0, 897, 901, 3, 268, 134, 0, 898, 902, 3, 116, 58, 0, 899, 900, 5, 7, 0, 0, 900, 902, 3, 156, 78, 0, 901, 898, 1, 0, 0, 0, 901, 899, 1, 0, 0, 0, 902, 129, 1, 0, 0, 0, 903, 904, 5, 112, 0, 0, 904, 905, 5, 192, 0, 0, 905, 906, 3, 268, 134, 0, 906, 907, 3, 118, 59, 0, 907, 131, 1, 0, 0, 0, 908, 912, 5, 112, 0, 0, 909, 913, 5, 166, 0, 0, 910, 911, 5, 166, 0, 0, 911, 913, 5, 232, 0, 0, 912, 909, 1, 0, 0, 0, 912, 910, 1, 0, 0, 0, 912, 913, 1, 0, 0, 0, 913, 914, 1, 0, 0, 0, 914, 916, 5, 157, 0, 0, 915, 917, 3, 276, 138, 0, 916, 915, 1, 0, 0, 0, 916, 917, 1, 0, 0, 0, 917, 918, 1, 0, 0, 0, 918, 919, 3, 268, 134, 0, 919, 920, 5, 7, 0, 0, 920, 923, 3, 256, 128, 0, 921, 922, 5, 240, 0, 0, 922, 924, 7, 17, 0, 0, 923, 921, 1, 0, 0, 0, 923, 924, 1, 0, 0, 0, 924, 133, 1, 0, 0, 0, 925, 926, 5, 104, 0, 0, 926, 928, 5, 239, 0, 0, 927, 929, 3, 276, 138, 0, 928, 927, 1, 0, 0, 0, 928, 929, 1, 0, 0, 0, 929, 930, 1, 0, 0, 0, 930, 931, 3, 268, 134, 0, 931, 135, 1, 0, 0, 0, 932, 934, 5, 104, 0, 0, 933, 935, 5, 166, 0, 0, 934, 933, 1, 0, 0, 0, 934, 935, 1, 0, 0, 0, 935, 936, 1, 0, 0, 0, 936, 938, 5, 74, 0, 0, 937, 939, 3, 276, 138, 0, 938, 937, 1, 0, 0, 0, 938, 939, 1, 0, 0, 0, 939, 940, 1, 0, 0, 0, 940, 941, 3, 268, 134, 0, 941, 137, 1, 0, 0, 0, 942, 943, 5, 104, 0, 0, 943, 945, 5, 192, 0, 0, 944, 946, 3, 276, 138, 0, 945, 944, 1, 0, 0, 0, 945, 946, 1, 0, 0, 0, 946, 947, 1, 0, 0, 0, 947, 949, 3, 268, 134, 0, 948, 950, 7, 18, 0, 0, 949, 948, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 139, 1, 0, 0, 0, 951, 953, 5, 104, 0, 0, 952, 954, 5, 166, 0, 0, 953, 952, 1, 0, 0, 0, 953, 954, 1, 0, 0, 0, 954, 955, 1, 0, 0, 0, 955, 957, 5, 76, 0, 0, 956, 958, 3, 276, 138, 0, 957, 956, 1, 0, 0, 0, 957, 958, 1, 0, 0, 0, 958, 959, 1, 0, 0, 0, 959, 960, 3, 268, 134, 0, 960, 141, 1, 0, 0, 0, 961, 965, 5, 104, 0, 0, 962, 966, 5, 166, 0, 0, 963, 964, 5, 166, 0, 0, 964, 966, 5, 232, 0, 0, 965, 962, 1, 0, 0, 0, 965, 963, 1, 0, 0, 0, 965, 966, 1, 0, 0, 0, 966, 967, 1, 0, 0, 0, 967, 969, 5, 157, 0, 0, 968, 970, 3, 276, 138, 0, 969, 968, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 971, 1, 0, 0, 0, 971, 972, 3, 268, 134, 0, 972, 143, 1, 0, 0, 0, 973, 975, 5, 78, 0, 0, 974, 973, 1, 0, 0, 0, 974, 975, 1, 0, 0, 0, 975, 976, 1, 0, 0, 0, 976, 980, 3, 146, 73, 0, 977, 978, 5, 78, 0, 0, 978, 980, 3, 154, 77, 0, 979, 974, 1, 0, 0, 0, 979, 977, 1, 0, 0, 0, 980, 145, 1, 0, 0, 0, 981, 982, 5, 80, 0, 0, 982, 983, 7, 19, 0, 0, 983, 992, 3, 268, 134, 0, 984, 986, 3, 148, 74, 0, 985, 984, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 988, 1, 0, 0, 0, 987, 989, 3, 52, 26, 0, 988, 987, 1, 0, 0, 0, 988, 989, 1, 0, 0, 0, 989, 990, 1, 0, 0, 0, 990, 993, 3, 156, 78, 0, 991, 993, 3, 150, 75, 0, 992, 985, 1, 0, 0, 0, 992, 991, 1, 0, 0, 0, 993, 147, 1, 0, 0, 0, 994, 995, 5, 60, 0, 0, 995, 996, 3, 278, 139, 0, 996, 149, 1, 0, 0, 0, 997, 998, 5, 72, 0, 0, 998, 1003, 3, 152, 76, 0, 999, 1000, 5, 306, 0, 0, 1000, 1002, 3, 152, 76, 0, 1001, 999, 1, 0, 0, 0, 1002, 1005, 1, 0, 0, 0, 1003, 1001, 1, 0, 0, 0, 1003, 1004, 1, 0, 0, 0, 1004, 151, 1, 0, 0, 0, 1005, 1003, 1, 0, 0, 0, 1006, 1007, 5, 304, 0, 0, 1007, 1012, 3, 298, 149, 0, 1008, 1009, 5, 306, 0, 0, 1009, 1011, 3, 298, 149, 0, 1010, 1008, 1, 0, 0, 0, 1011, 1014, 1, 0, 0, 0, 1012, 1010, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1015, 1, 0, 0, 0, 1014, 1012, 1, 0, 0, 0, 1015, 1016, 5, 305, 0, 0, 1016, 153, 1, 0, 0, 0, 1017, 1018, 5, 79, 0, 0, 1018, 1019, 5, 116, 0, 0, 1019, 1023, 5, 43, 0, 0, 1020, 1021, 3, 146, 73, 0, 1021, 1022, 5, 307, 0, 0, 1022, 1024, 1, 0, 0, 0, 1023, 1020, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 1023, 1, 0, 0, 0, 1025, 1026, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1028, 5, 44, 0, 0, 1028, 155, 1, 0, 0, 0, 1029, 1030, 6, 78, -1, 0, 1030, 1061, 3, 158, 79, 0, 1031, 1032, 5, 70, 0, 0, 1032, 1037, 3, 160, 80, 0, 1033, 1034, 5, 306, 0, 0, 1034, 1036, 3, 160, 80, 0, 1035, 1033, 1, 0, 0, 0, 1036, 1039, 1, 0, 0, 0, 1037, 1035, 1, 0, 0, 0, 1037, 1038, 1, 0, 0, 0, 1038, 1040, 1, 0, 0, 0, 1039, 1037, 1, 0, 0, 0, 1040, 1041, 3, 156, 78, 5, 1041, 1061, 1, 0, 0, 0, 1042, 1043, 5, 304, 0, 0, 1043, 1044, 3, 156, 78, 0, 1044, 1045, 5, 305, 0, 0, 1045, 1061, 1, 0, 0, 0, 1046, 1048, 3, 166, 83, 0, 1047, 1049, 3, 194, 97, 0, 1048, 1047, 1, 0, 0, 0, 1048, 1049, 1, 0, 0, 0, 1049, 1051, 1, 0, 0, 0, 1050, 1052, 3, 198, 99, 0, 1051, 1050, 1, 0, 0, 0, 1051, 1052, 1, 0, 0, 0, 1052, 1061, 1, 0, 0, 0, 1053, 1055, 3, 164, 82, 0, 1054, 1056, 3, 194, 97, 0, 1055, 1054, 1, 0, 0, 0, 1055, 1056, 1, 0, 0, 0, 1056, 1058, 1, 0, 0, 0, 1057, 1059, 3, 198, 99, 0, 1058, 1057, 1, 0, 0, 0, 1058, 1059, 1, 0, 0, 0, 1059, 1061, 1, 0, 0, 0, 1060, 1029, 1, 0, 0, 0, 1060, 1031, 1, 0, 0, 0, 1060, 1042, 1, 0, 0, 0, 1060, 1046, 1, 0, 0, 0, 1060, 1053, 1, 0, 0, 0, 1061, 1076, 1, 0, 0, 0, 1062, 1063, 10, 3, 0, 0, 1063, 1065, 7, 20, 0, 0, 1064, 1066, 5, 8, 0, 0, 1065, 1064, 1, 0, 0, 0, 1065, 1066, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1069, 3, 156, 78, 0, 1068, 1070, 3, 194, 97, 0, 1069, 1068, 1, 0, 0, 0, 1069, 1070, 1, 0, 0, 0, 1070, 1072, 1, 0, 0, 0, 1071, 1073, 3, 198, 99, 0, 1072, 1071, 1, 0, 0, 0, 1072, 1073, 1, 0, 0, 0, 1073, 1075, 1, 0, 0, 0, 1074, 1062, 1, 0, 0, 0, 1075, 1078, 1, 0, 0, 0, 1076, 1074, 1, 0, 0, 0, 1076, 1077, 1, 0, 0, 0, 1077, 157, 1, 0, 0, 0, 1078, 1076, 1, 0, 0, 0, 1079, 1080, 5, 72, 0, 0, 1080, 1085, 3, 212, 106, 0, 1081, 1082, 5, 306, 0, 0, 1082, 1084, 3, 212, 106, 0, 1083, 1081, 1, 0, 0, 0, 1084, 1087, 1, 0, 0, 0, 1085, 1083, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 159, 1, 0, 0, 0, 1087, 1085, 1, 0, 0, 0, 1088, 1100, 3, 162, 81, 0, 1089, 1090, 5, 304, 0, 0, 1090, 1095, 3, 50, 25, 0, 1091, 1092, 5, 306, 0, 0, 1092, 1094, 3, 50, 25, 0, 1093, 1091, 1, 0, 0, 0, 1094, 1097, 1, 0, 0, 0, 1095, 1093, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1098, 1, 0, 0, 0, 1097, 1095, 1, 0, 0, 0, 1098, 1099, 5, 305, 0, 0, 1099, 1101, 1, 0, 0, 0, 1100, 1089, 1, 0, 0, 0, 1100, 1101, 1, 0, 0, 0, 1101, 1102, 1, 0, 0, 0, 1102, 1103, 5, 7, 0, 0, 1103, 1104, 5, 304, 0, 0, 1104, 1105, 3, 156, 78, 0, 1105, 1106, 5, 305, 0, 0, 1106, 161, 1, 0, 0, 0, 1107, 1108, 3, 256, 128, 0, 1108, 163, 1, 0, 0, 0, 1109, 1110, 3, 166, 83, 0, 1110, 1112, 3, 170, 85, 0, 1111, 1113, 3, 186, 93, 0, 1112, 1111, 1, 0, 0, 0, 1112, 1113, 1, 0, 0, 0, 1113, 1115, 1, 0, 0, 0, 1114, 1116, 3, 188, 94, 0, 1115, 1114, 1, 0, 0, 0, 1115, 1116, 1, 0, 0, 0, 1116, 1118, 1, 0, 0, 0, 1117, 1119, 3, 192, 96, 0, 1118, 1117, 1, 0, 0, 0, 1118, 1119, 1, 0, 0, 0, 1119, 1121, 1, 0, 0, 0, 1120, 1122, 3, 200, 100, 0, 1121, 1120, 1, 0, 0, 0, 1121, 1122, 1, 0, 0, 0, 1122, 165, 1, 0, 0, 0, 1123, 1125, 5, 4, 0, 0, 1124, 1126, 3, 306, 153, 0, 1125, 1124, 1, 0, 0, 0, 1125, 1126, 1, 0, 0, 0, 1126, 1136, 1, 0, 0, 0, 1127, 1137, 5, 313, 0, 0, 1128, 1133, 3, 168, 84, 0, 1129, 1130, 5, 306, 0, 0, 1130, 1132, 3, 168, 84, 0, 1131, 1129, 1, 0, 0, 0, 1132, 1135, 1, 0, 0, 0, 1133, 1131, 1, 0, 0, 0, 1133, 1134, 1, 0, 0, 0, 1134, 1137, 1, 0, 0, 0, 1135, 1133, 1, 0, 0, 0, 1136, 1127, 1, 0, 0, 0, 1136, 1128, 1, 0, 0, 0, 1137, 167, 1, 0, 0, 0, 1138, 1143, 3, 212, 106, 0, 1139, 1141, 5, 7, 0, 0, 1140, 1139, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 1142, 1, 0, 0, 0, 1142, 1144, 3, 212, 106, 0, 1143, 1140, 1, 0, 0, 0, 1143, 1144, 1, 0, 0, 0, 1144, 169, 1, 0, 0, 0, 1145, 1146, 5, 5, 0, 0, 1146, 1147, 3, 172, 86, 0, 1147, 171, 1, 0, 0, 0, 1148, 1149, 6, 86, -1, 0, 1149, 1154, 3, 174, 87, 0, 1150, 1151, 5, 306, 0, 0, 1151, 1153, 3, 174, 87, 0, 1152, 1150, 1, 0, 0, 0, 1153, 1156, 1, 0, 0, 0, 1154, 1152, 1, 0, 0, 0, 1154, 1155, 1, 0, 0, 0, 1155, 1178, 1, 0, 0, 0, 1156, 1154, 1, 0, 0, 0, 1157, 1158, 10, 1, 0, 0, 1158, 1159, 5, 46, 0, 0, 1159, 1160, 5, 45, 0, 0, 1160, 1177, 3, 172, 86, 2, 1161, 1163, 10, 2, 0, 0, 1162, 1164, 5, 54, 0, 0, 1163, 1162, 1, 0, 0, 0, 1163, 1164, 1, 0, 0, 0, 1164, 1166, 1, 0, 0, 0, 1165, 1167, 7, 21, 0, 0, 1166, 1165, 1, 0, 0, 0, 1166, 1167, 1, 0, 0, 0, 1167, 1169, 1, 0, 0, 0, 1168, 1170, 5, 47, 0, 0, 1169, 1168, 1, 0, 0, 0, 1169, 1170, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 1172, 5, 45, 0, 0, 1172, 1174, 3, 172, 86, 0, 1173, 1175, 3, 184, 92, 0, 1174, 1173, 1, 0, 0, 0, 1174, 1175, 1, 0, 0, 0, 1175, 1177, 1, 0, 0, 0, 1176, 1157, 1, 0, 0, 0, 1176, 1161, 1, 0, 0, 0, 1177, 1180, 1, 0, 0, 0, 1178, 1176, 1, 0, 0, 0, 1178, 1179, 1, 0, 0, 0, 1179, 173, 1, 0, 0, 0, 1180, 1178, 1, 0, 0, 0, 1181, 1183, 3, 176, 88, 0, 1182, 1184, 3, 246, 123, 0, 1183, 1182, 1, 0, 0, 0, 1183, 1184, 1, 0, 0, 0, 1184, 175, 1, 0, 0, 0, 1185, 1187, 5, 74, 0, 0, 1186, 1185, 1, 0, 0, 0, 1186, 1187, 1, 0, 0, 0, 1187, 1188, 1, 0, 0, 0, 1188, 1190, 3, 178, 89, 0, 1189, 1191, 3, 180, 90, 0, 1190, 1189, 1, 0, 0, 0, 1190, 1191, 1, 0, 0, 0, 1191, 1196, 1, 0, 0, 0, 1192, 1194, 5, 7, 0, 0, 1193, 1192, 1, 0, 0, 0, 1193, 1194, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1197, 3, 228, 114, 0, 1196, 1193, 1, 0, 0, 0, 1196, 1197, 1, 0, 0, 0, 1197, 1227, 1, 0, 0, 0, 1198, 1199, 5, 57, 0, 0, 1199, 1200, 5, 74, 0, 0, 1200, 1201, 5, 304, 0, 0, 1201, 1202, 3, 224, 112, 0, 1202, 1203, 5, 304, 0, 0, 1203, 1208, 3, 212, 106, 0, 1204, 1205, 5, 306, 0, 0, 1205, 1207, 3, 212, 106, 0, 1206, 1204, 1, 0, 0, 0, 1207, 1210, 1, 0, 0, 0, 1208, 1206, 1, 0, 0, 0, 1208, 1209, 1, 0, 0, 0, 1209, 1211, 1, 0, 0, 0, 1210, 1208, 1, 0, 0, 0, 1211, 1212, 5, 305, 0, 0, 1212, 1213, 5, 305, 0, 0, 1213, 1227, 1, 0, 0, 0, 1214, 1216, 5, 57, 0, 0, 1215, 1214, 1, 0, 0, 0, 1215, 1216, 1, 0, 0, 0, 1216, 1217, 1, 0, 0, 0, 1217, 1218, 5, 304, 0, 0, 1218, 1219, 3, 156, 78, 0, 1219, 1220, 5, 305, 0, 0, 1220, 1227, 1, 0, 0, 0, 1221, 1222, 5, 227, 0, 0, 1222, 1223, 5, 304, 0, 0, 1223, 1224, 3, 212, 106, 0, 1224, 1225, 5, 305, 0, 0, 1225, 1227, 1, 0, 0, 0, 1226, 1186, 1, 0, 0, 0, 1226, 1198, 1, 0, 0, 0, 1226, 1215, 1, 0, 0, 0, 1226, 1221, 1, 0, 0, 0, 1227, 177, 1, 0, 0, 0, 1228, 1229, 3, 268, 134, 0, 1229, 179, 1, 0, 0, 0, 1230, 1231, 5, 37, 0, 0, 1231, 1232, 5, 260, 0, 0, 1232, 1233, 5, 7, 0, 0, 1233, 1234, 5, 136, 0, 0, 1234, 1235, 3, 182, 91, 0, 1235, 181, 1, 0, 0, 0, 1236, 1237, 3, 212, 106, 0, 1237, 183, 1, 0, 0, 0, 1238, 1239, 5, 55, 0, 0, 1239, 1253, 3, 214, 107, 0, 1240, 1241, 5, 143, 0, 0, 1241, 1242, 5, 304, 0, 0, 1242, 1247, 3, 268, 134, 0, 1243, 1244, 5, 306, 0, 0, 1244, 1246, 3, 268, 134, 0, 1245, 1243, 1, 0, 0, 0, 1246, 1249, 1, 0, 0, 0, 1247, 1245, 1, 0, 0, 0, 1247, 1248, 1, 0, 0, 0, 1248, 1250, 1, 0, 0, 0, 1249, 1247, 1, 0, 0, 0, 1250, 1251, 5, 305, 0, 0, 1251, 1253, 1, 0, 0, 0, 1252, 1238, 1, 0, 0, 0, 1252, 1240, 1, 0, 0, 0, 1253, 185, 1, 0, 0, 0, 1254, 1255, 5, 11, 0, 0, 1255, 1256, 3, 214, 107, 0, 1256, 187, 1, 0, 0, 0, 1257, 1258, 5, 12, 0, 0, 1258, 1259, 5, 13, 0, 0, 1259, 1264, 3, 190, 95, 0, 1260, 1261, 5, 306, 0, 0, 1261, 1263, 3, 190, 95, 0, 1262, 1260, 1, 0, 0, 0, 1263, 1266, 1, 0, 0, 0, 1264, 1262, 1, 0, 0, 0, 1264, 1265, 1, 0, 0, 0, 1265, 189, 1, 0, 0, 0, 1266, 1264, 1, 0, 0, 0, 1267, 1319, 3, 212, 106, 0, 1268, 1269, 5, 304, 0, 0, 1269, 1319, 5, 305, 0, 0, 1270, 1271, 5, 304, 0, 0, 1271, 1276, 3, 212, 106, 0, 1272, 1273, 5, 306, 0, 0, 1273, 1275, 3, 212, 106, 0, 1274, 1272, 1, 0, 0, 0, 1275, 1278, 1, 0, 0, 0, 1276, 1274, 1, 0, 0, 0, 1276, 1277, 1, 0, 0, 0, 1277, 1279, 1, 0, 0, 0, 1278, 1276, 1, 0, 0, 0, 1279, 1280, 5, 305, 0, 0, 1280, 1319, 1, 0, 0, 0, 1281, 1282, 5, 16, 0, 0, 1282, 1283, 5, 304, 0, 0, 1283, 1288, 3, 212, 106, 0, 1284, 1285, 5, 306, 0, 0, 1285, 1287, 3, 212, 106, 0, 1286, 1284, 1, 0, 0, 0, 1287, 1290, 1, 0, 0, 0, 1288, 1286, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1291, 1, 0, 0, 0, 1290, 1288, 1, 0, 0, 0, 1291, 1292, 5, 305, 0, 0, 1292, 1319, 1, 0, 0, 0, 1293, 1294, 5, 17, 0, 0, 1294, 1295, 5, 304, 0, 0, 1295, 1300, 3, 212, 106, 0, 1296, 1297, 5, 306, 0, 0, 1297, 1299, 3, 212, 106, 0, 1298, 1296, 1, 0, 0, 0, 1299, 1302, 1, 0, 0, 0, 1300, 1298, 1, 0, 0, 0, 1300, 1301, 1, 0, 0, 0, 1301, 1303, 1, 0, 0, 0, 1302, 1300, 1, 0, 0, 0, 1303, 1304, 5, 305, 0, 0, 1304, 1319, 1, 0, 0, 0, 1305, 1306, 5, 14, 0, 0, 1306, 1307, 5, 15, 0, 0, 1307, 1308, 5, 304, 0, 0, 1308, 1313, 3, 190, 95, 0, 1309, 1310, 5, 306, 0, 0, 1310, 1312, 3, 190, 95, 0, 1311, 1309, 1, 0, 0, 0, 1312, 1315, 1, 0, 0, 0, 1313, 1311, 1, 0, 0, 0, 1313, 1314, 1, 0, 0, 0, 1314, 1316, 1, 0, 0, 0, 1315, 1313, 1, 0, 0, 0, 1316, 1317, 5, 305, 0, 0, 1317, 1319, 1, 0, 0, 0, 1318, 1267, 1, 0, 0, 0, 1318, 1268, 1, 0, 0, 0, 1318, 1270, 1, 0, 0, 0, 1318, 1281, 1, 0, 0, 0, 1318, 1293, 1, 0, 0, 0, 1318, 1305, 1, 0, 0, 0, 1319, 191, 1, 0, 0, 0, 1320, 1321, 5, 19, 0, 0, 1321, 1322, 3, 214, 107, 0, 1322, 193, 1, 0, 0, 0, 1323, 1324, 5, 18, 0, 0, 1324, 1325, 5, 13, 0, 0, 1325, 1330, 3, 196, 98, 0, 1326, 1327, 5, 306, 0, 0, 1327, 1329, 3, 196, 98, 0, 1328, 1326, 1, 0, 0, 0, 1329, 1332, 1, 0, 0, 0, 1330, 1328, 1, 0, 0, 0, 1330, 1331, 1, 0, 0, 0, 1331, 195, 1, 0, 0, 0, 1332, 1330, 1, 0, 0, 0, 1333, 1335, 3, 212, 106, 0, 1334, 1336, 7, 22, 0, 0, 1335, 1334, 1, 0, 0, 0, 1335, 1336, 1, 0, 0, 0, 1336, 197, 1, 0, 0, 0, 1337, 1340, 5, 20, 0, 0, 1338, 1341, 5, 8, 0, 0, 1339, 1341, 3, 212, 106, 0, 1340, 1338, 1, 0, 0, 0, 1340, 1339, 1, 0, 0, 0, 1341, 199, 1, 0, 0, 0, 1342, 1343, 5, 58, 0, 0, 1343, 1348, 3, 202, 101, 0, 1344, 1345, 5, 306, 0, 0, 1345, 1347, 3, 202, 101, 0, 1346, 1344, 1, 0, 0, 0, 1347, 1350, 1, 0, 0, 0, 1348, 1346, 1, 0, 0, 0, 1348, 1349, 1, 0, 0, 0, 1349, 201, 1, 0, 0, 0, 1350, 1348, 1, 0, 0, 0, 1351, 1352, 3, 248, 124, 0, 1352, 1353, 5, 7, 0, 0, 1353, 1354, 3, 204, 102, 0, 1354, 203, 1, 0, 0, 0, 1355, 1357, 3, 248, 124, 0, 1356, 1355, 1, 0, 0, 0, 1356, 1357, 1, 0, 0, 0, 1357, 1358, 1, 0, 0, 0, 1358, 1369, 5, 304, 0, 0, 1359, 1360, 5, 18, 0, 0, 1360, 1361, 5, 13, 0, 0, 1361, 1366, 3, 206, 103, 0, 1362, 1363, 5, 306, 0, 0, 1363, 1365, 3, 206, 103, 0, 1364, 1362, 1, 0, 0, 0, 1365, 1368, 1, 0, 0, 0, 1366, 1364, 1, 0, 0, 0, 1366, 1367, 1, 0, 0, 0, 1367, 1370, 1, 0, 0, 0, 1368, 1366, 1, 0, 0, 0, 1369, 1359, 1, 0, 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 1381, 1, 0, 0, 0, 1371, 1372, 5, 60, 0, 0, 1372, 1373, 5, 13, 0, 0, 1373, 1378, 3, 212, 106, 0, 1374, 1375, 5, 306, 0, 0, 1375, 1377, 3, 212, 106, 0, 1376, 1374, 1, 0, 0, 0, 1377, 1380, 1, 0, 0, 0, 1378, 1376, 1, 0, 0, 0, 1378, 1379, 1, 0, 0, 0, 1379, 1382, 1, 0, 0, 0, 1380, 1378, 1, 0, 0, 0, 1381, 1371, 1, 0, 0, 0, 1381, 1382, 1, 0, 0, 0, 1382, 1384, 1, 0, 0, 0, 1383, 1385, 3, 208, 104, 0, 1384, 1383, 1, 0, 0, 0, 1384, 1385, 1, 0, 0, 0, 1385, 1386, 1, 0, 0, 0, 1386, 1387, 5, 305, 0, 0, 1387, 205, 1, 0, 0, 0, 1388, 1390, 3, 212, 106, 0, 1389, 1391, 7, 22, 0, 0, 1390, 1389, 1, 0, 0, 0, 1390, 1391, 1, 0, 0, 0, 1391, 1394, 1, 0, 0, 0, 1392, 1393, 5, 34, 0, 0, 1393, 1395, 7, 23, 0, 0, 1394, 1392, 1, 0, 0, 0, 1394, 1395, 1, 0, 0, 0, 1395, 207, 1, 0, 0, 0, 1396, 1397, 5, 61, 0, 0, 1397, 1401, 3, 210, 105, 0, 1398, 1399, 5, 62, 0, 0, 1399, 1401, 3, 210, 105, 0, 1400, 1396, 1, 0, 0, 0, 1400, 1398, 1, 0, 0, 0, 1401, 209, 1, 0, 0, 0, 1402, 1403, 3, 212, 106, 0, 1403, 1404, 5, 64, 0, 0, 1404, 211, 1, 0, 0, 0, 1405, 1406, 3, 214, 107, 0, 1406, 213, 1, 0, 0, 0, 1407, 1408, 6, 107, -1, 0, 1408, 1409, 5, 25, 0, 0, 1409, 1420, 3, 214, 107, 5, 1410, 1411, 5, 27, 0, 0, 1411, 1412, 5, 304, 0, 0, 1412, 1413, 3, 156, 78, 0, 1413, 1414, 5, 305, 0, 0, 1414, 1420, 1, 0, 0, 0, 1415, 1417, 3, 220, 110, 0, 1416, 1418, 3, 216, 108, 0, 1417, 1416, 1, 0, 0, 0, 1417, 1418, 1, 0, 0, 0, 1418, 1420, 1, 0, 0, 0, 1419, 1407, 1, 0, 0, 0, 1419, 1410, 1, 0, 0, 0, 1419, 1415, 1, 0, 0, 0, 1420, 1429, 1, 0, 0, 0, 1421, 1422, 10, 2, 0, 0, 1422, 1423, 5, 23, 0, 0, 1423, 1428, 3, 214, 107, 3, 1424, 1425, 10, 1, 0, 0, 1425, 1426, 5, 22, 0, 0, 1426, 1428, 3, 214, 107, 2, 1427, 1421, 1, 0, 0, 0, 1427, 1424, 1, 0, 0, 0, 1428, 1431, 1, 0, 0, 0, 1429, 1427, 1, 0, 0, 0, 1429, 1430, 1, 0, 0, 0, 1430, 215, 1, 0, 0, 0, 1431, 1429, 1, 0, 0, 0, 1432, 1434, 5, 25, 0, 0, 1433, 1432, 1, 0, 0, 0, 1433, 1434, 1, 0, 0, 0, 1434, 1435, 1, 0, 0, 0, 1435, 1436, 5, 28, 0, 0, 1436, 1437, 3, 220, 110, 0, 1437, 1438, 5, 23, 0, 0, 1438, 1439, 3, 220, 110, 0, 1439, 1516, 1, 0, 0, 0, 1440, 1442, 5, 25, 0, 0, 1441, 1440, 1, 0, 0, 0, 1441, 1442, 1, 0, 0, 0, 1442, 1443, 1, 0, 0, 0, 1443, 1444, 5, 24, 0, 0, 1444, 1445, 5, 304, 0, 0, 1445, 1450, 3, 212, 106, 0, 1446, 1447, 5, 306, 0, 0, 1447, 1449, 3, 212, 106, 0, 1448, 1446, 1, 0, 0, 0, 1449, 1452, 1, 0, 0, 0, 1450, 1448, 1, 0, 0, 0, 1450, 1451, 1, 0, 0, 0, 1451, 1453, 1, 0, 0, 0, 1452, 1450, 1, 0, 0, 0, 1453, 1454, 5, 305, 0, 0, 1454, 1516, 1, 0, 0, 0, 1455, 1457, 5, 25, 0, 0, 1456, 1455, 1, 0, 0, 0, 1456, 1457, 1, 0, 0, 0, 1457, 1458, 1, 0, 0, 0, 1458, 1459, 5, 24, 0, 0, 1459, 1460, 5, 304, 0, 0, 1460, 1461, 3, 156, 78, 0, 1461, 1462, 5, 305, 0, 0, 1462, 1516, 1, 0, 0, 0, 1463, 1464, 5, 27, 0, 0, 1464, 1465, 5, 304, 0, 0, 1465, 1466, 3, 156, 78, 0, 1466, 1467, 5, 305, 0, 0, 1467, 1516, 1, 0, 0, 0, 1468, 1470, 5, 25, 0, 0, 1469, 1468, 1, 0, 0, 0, 1469, 1470, 1, 0, 0, 0, 1470, 1471, 1, 0, 0, 0, 1471, 1472, 5, 30, 0, 0, 1472, 1516, 3, 220, 110, 0, 1473, 1475, 5, 25, 0, 0, 1474, 1473, 1, 0, 0, 0, 1474, 1475, 1, 0, 0, 0, 1475, 1476, 1, 0, 0, 0, 1476, 1477, 5, 29, 0, 0, 1477, 1491, 7, 24, 0, 0, 1478, 1479, 5, 304, 0, 0, 1479, 1492, 5, 305, 0, 0, 1480, 1481, 5, 304, 0, 0, 1481, 1486, 3, 212, 106, 0, 1482, 1483, 5, 306, 0, 0, 1483, 1485, 3, 212, 106, 0, 1484, 1482, 1, 0, 0, 0, 1485, 1488, 1, 0, 0, 0, 1486, 1484, 1, 0, 0, 0, 1486, 1487, 1, 0, 0, 0, 1487, 1489, 1, 0, 0, 0, 1488, 1486, 1, 0, 0, 0, 1489, 1490, 5, 305, 0, 0, 1490, 1492, 1, 0, 0, 0, 1491, 1478, 1, 0, 0, 0, 1491, 1480, 1, 0, 0, 0, 1492, 1516, 1, 0, 0, 0, 1493, 1495, 5, 25, 0, 0, 1494, 1493, 1, 0, 0, 0, 1494, 1495, 1, 0, 0, 0, 1495, 1496, 1, 0, 0, 0, 1496, 1497, 5, 29, 0, 0, 1497, 1516, 3, 220, 110, 0, 1498, 1500, 5, 31, 0, 0, 1499, 1501, 5, 25, 0, 0, 1500, 1499, 1, 0, 0, 0, 1500, 1501, 1, 0, 0, 0, 1501, 1502, 1, 0, 0, 0, 1502, 1516, 5, 291, 0, 0, 1503, 1505, 5, 31, 0, 0, 1504, 1506, 5, 25, 0, 0, 1505, 1504, 1, 0, 0, 0, 1505, 1506, 1, 0, 0, 0, 1506, 1507, 1, 0, 0, 0, 1507, 1516, 7, 25, 0, 0, 1508, 1510, 5, 31, 0, 0, 1509, 1511, 5, 25, 0, 0, 1510, 1509, 1, 0, 0, 0, 1510, 1511, 1, 0, 0, 0, 1511, 1512, 1, 0, 0, 0, 1512, 1513, 5, 10, 0, 0, 1513, 1514, 5, 5, 0, 0, 1514, 1516, 3, 220, 110, 0, 1515, 1433, 1, 0, 0, 0, 1515, 1441, 1, 0, 0, 0, 1515, 1456, 1, 0, 0, 0, 1515, 1463, 1, 0, 0, 0, 1515, 1469, 1, 0, 0, 0, 1515, 1474, 1, 0, 0, 0, 1515, 1494, 1, 0, 0, 0, 1515, 1498, 1, 0, 0, 0, 1515, 1503, 1, 0, 0, 0, 1515, 1508, 1, 0, 0, 0, 1516, 217, 1, 0, 0, 0, 1517, 1519, 5, 25, 0, 0, 1518, 1517, 1, 0, 0, 0, 1518, 1519, 1, 0, 0, 0, 1519, 1520, 1, 0, 0, 0, 1520, 1521, 5, 29, 0, 0, 1521, 1535, 7, 24, 0, 0, 1522, 1523, 5, 304, 0, 0, 1523, 1536, 5, 305, 0, 0, 1524, 1525, 5, 304, 0, 0, 1525, 1530, 3, 212, 106, 0, 1526, 1527, 5, 306, 0, 0, 1527, 1529, 3, 212, 106, 0, 1528, 1526, 1, 0, 0, 0, 1529, 1532, 1, 0, 0, 0, 1530, 1528, 1, 0, 0, 0, 1530, 1531, 1, 0, 0, 0, 1531, 1533, 1, 0, 0, 0, 1532, 1530, 1, 0, 0, 0, 1533, 1534, 5, 305, 0, 0, 1534, 1536, 1, 0, 0, 0, 1535, 1522, 1, 0, 0, 0, 1535, 1524, 1, 0, 0, 0, 1536, 1543, 1, 0, 0, 0, 1537, 1539, 5, 25, 0, 0, 1538, 1537, 1, 0, 0, 0, 1538, 1539, 1, 0, 0, 0, 1539, 1540, 1, 0, 0, 0, 1540, 1541, 5, 29, 0, 0, 1541, 1543, 3, 220, 110, 0, 1542, 1518, 1, 0, 0, 0, 1542, 1538, 1, 0, 0, 0, 1543, 219, 1, 0, 0, 0, 1544, 1545, 6, 110, -1, 0, 1545, 1549, 3, 222, 111, 0, 1546, 1547, 7, 26, 0, 0, 1547, 1549, 3, 220, 110, 7, 1548, 1544, 1, 0, 0, 0, 1548, 1546, 1, 0, 0, 0, 1549, 1571, 1, 0, 0, 0, 1550, 1551, 10, 6, 0, 0, 1551, 1552, 7, 27, 0, 0, 1552, 1570, 3, 220, 110, 7, 1553, 1554, 10, 5, 0, 0, 1554, 1555, 7, 28, 0, 0, 1555, 1570, 3, 220, 110, 6, 1556, 1557, 10, 4, 0, 0, 1557, 1558, 5, 299, 0, 0, 1558, 1570, 3, 220, 110, 5, 1559, 1560, 10, 3, 0, 0, 1560, 1561, 5, 300, 0, 0, 1561, 1570, 3, 220, 110, 4, 1562, 1563, 10, 2, 0, 0, 1563, 1564, 5, 298, 0, 0, 1564, 1570, 3, 220, 110, 3, 1565, 1566, 10, 1, 0, 0, 1566, 1567, 3, 288, 144, 0, 1567, 1568, 3, 220, 110, 2, 1568, 1570, 1, 0, 0, 0, 1569, 1550, 1, 0, 0, 0, 1569, 1553, 1, 0, 0, 0, 1569, 1556, 1, 0, 0, 0, 1569, 1559, 1, 0, 0, 0, 1569, 1562, 1, 0, 0, 0, 1569, 1565, 1, 0, 0, 0, 1570, 1573, 1, 0, 0, 0, 1571, 1569, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 221, 1, 0, 0, 0, 1573, 1571, 1, 0, 0, 0, 1574, 1575, 6, 111, -1, 0, 1575, 1577, 5, 39, 0, 0, 1576, 1578, 3, 264, 132, 0, 1577, 1576, 1, 0, 0, 0, 1578, 1579, 1, 0, 0, 0, 1579, 1577, 1, 0, 0, 0, 1579, 1580, 1, 0, 0, 0, 1580, 1583, 1, 0, 0, 0, 1581, 1582, 5, 42, 0, 0, 1582, 1584, 3, 212, 106, 0, 1583, 1581, 1, 0, 0, 0, 1583, 1584, 1, 0, 0, 0, 1584, 1585, 1, 0, 0, 0, 1585, 1586, 5, 44, 0, 0, 1586, 1666, 1, 0, 0, 0, 1587, 1588, 5, 39, 0, 0, 1588, 1590, 3, 212, 106, 0, 1589, 1591, 3, 264, 132, 0, 1590, 1589, 1, 0, 0, 0, 1591, 1592, 1, 0, 0, 0, 1592, 1590, 1, 0, 0, 0, 1592, 1593, 1, 0, 0, 0, 1593, 1596, 1, 0, 0, 0, 1594, 1595, 5, 42, 0, 0, 1595, 1597, 3, 212, 106, 0, 1596, 1594, 1, 0, 0, 0, 1596, 1597, 1, 0, 0, 0, 1597, 1598, 1, 0, 0, 0, 1598, 1599, 5, 44, 0, 0, 1599, 1666, 1, 0, 0, 0, 1600, 1601, 5, 94, 0, 0, 1601, 1602, 5, 304, 0, 0, 1602, 1603, 3, 212, 106, 0, 1603, 1604, 5, 7, 0, 0, 1604, 1605, 3, 54, 27, 0, 1605, 1606, 5, 305, 0, 0, 1606, 1666, 1, 0, 0, 0, 1607, 1608, 5, 67, 0, 0, 1608, 1609, 5, 304, 0, 0, 1609, 1612, 3, 212, 106, 0, 1610, 1611, 5, 124, 0, 0, 1611, 1613, 5, 34, 0, 0, 1612, 1610, 1, 0, 0, 0, 1612, 1613, 1, 0, 0, 0, 1613, 1614, 1, 0, 0, 0, 1614, 1615, 5, 305, 0, 0, 1615, 1666, 1, 0, 0, 0, 1616, 1617, 5, 69, 0, 0, 1617, 1618, 5, 304, 0, 0, 1618, 1621, 3, 212, 106, 0, 1619, 1620, 5, 124, 0, 0, 1620, 1622, 5, 34, 0, 0, 1621, 1619, 1, 0, 0, 0, 1621, 1622, 1, 0, 0, 0, 1622, 1623, 1, 0, 0, 0, 1623, 1624, 5, 305, 0, 0, 1624, 1666, 1, 0, 0, 0, 1625, 1626, 5, 129, 0, 0, 1626, 1627, 5, 304, 0, 0, 1627, 1628, 3, 220, 110, 0, 1628, 1629, 5, 24, 0, 0, 1629, 1630, 3, 220, 110, 0, 1630, 1631, 5, 305, 0, 0, 1631, 1666, 1, 0, 0, 0, 1632, 1666, 3, 298, 149, 0, 1633, 1666, 5, 313, 0, 0, 1634, 1635, 3, 268, 134, 0, 1635, 1636, 5, 301, 0, 0, 1636, 1637, 5, 313, 0, 0, 1637, 1666, 1, 0, 0, 0, 1638, 1639, 5, 304, 0, 0, 1639, 1640, 3, 156, 78, 0, 1640, 1641, 5, 305, 0, 0, 1641, 1666, 1, 0, 0, 0, 1642, 1643, 3, 224, 112, 0, 1643, 1655, 5, 304, 0, 0, 1644, 1646, 3, 306, 153, 0, 1645, 1644, 1, 0, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 1647, 1, 0, 0, 0, 1647, 1652, 3, 212, 106, 0, 1648, 1649, 5, 306, 0, 0, 1649, 1651, 3, 212, 106, 0, 1650, 1648, 1, 0, 0, 0, 1651, 1654, 1, 0, 0, 0, 1652, 1650, 1, 0, 0, 0, 1652, 1653, 1, 0, 0, 0, 1653, 1656, 1, 0, 0, 0, 1654, 1652, 1, 0, 0, 0, 1655, 1645, 1, 0, 0, 0, 1655, 1656, 1, 0, 0, 0, 1656, 1657, 1, 0, 0, 0, 1657, 1658, 5, 305, 0, 0, 1658, 1666, 1, 0, 0, 0, 1659, 1666, 3, 256, 128, 0, 1660, 1666, 3, 226, 113, 0, 1661, 1662, 5, 304, 0, 0, 1662, 1663, 3, 212, 106, 0, 1663, 1664, 5, 305, 0, 0, 1664, 1666, 1, 0, 0, 0, 1665, 1574, 1, 0, 0, 0, 1665, 1587, 1, 0, 0, 0, 1665, 1600, 1, 0, 0, 0, 1665, 1607, 1, 0, 0, 0, 1665, 1616, 1, 0, 0, 0, 1665, 1625, 1, 0, 0, 0, 1665, 1632, 1, 0, 0, 0, 1665, 1633, 1, 0, 0, 0, 1665, 1634, 1, 0, 0, 0, 1665, 1638, 1, 0, 0, 0, 1665, 1642, 1, 0, 0, 0, 1665, 1659, 1, 0, 0, 0, 1665, 1660, 1, 0, 0, 0, 1665, 1661, 1, 0, 0, 0, 1666, 1674, 1, 0, 0, 0, 1667, 1668, 10, 4, 0, 0, 1668, 1669, 5, 302, 0, 0, 1669, 1670, 3, 220, 110, 0, 1670, 1671, 5, 303, 0, 0, 1671, 1673, 1, 0, 0, 0, 1672, 1667, 1, 0, 0, 0, 1673, 1676, 1, 0, 0, 0, 1674, 1672, 1, 0, 0, 0, 1674, 1675, 1, 0, 0, 0, 1675, 223, 1, 0, 0, 0, 1676, 1674, 1, 0, 0, 0, 1677, 1678, 3, 268, 134, 0, 1678, 225, 1, 0, 0, 0, 1679, 1680, 3, 268, 134, 0, 1680, 227, 1, 0, 0, 0, 1681, 1682, 3, 256, 128, 0, 1682, 229, 1, 0, 0, 0, 1683, 1686, 3, 256, 128, 0, 1684, 1686, 3, 226, 113, 0, 1685, 1683, 1, 0, 0, 0, 1685, 1684, 1, 0, 0, 0, 1686, 231, 1, 0, 0, 0, 1687, 1690, 5, 38, 0, 0, 1688, 1691, 3, 234, 117, 0, 1689, 1691, 3, 238, 119, 0, 1690, 1688, 1, 0, 0, 0, 1690, 1689, 1, 0, 0, 0, 1690, 1691, 1, 0, 0, 0, 1691, 233, 1, 0, 0, 0, 1692, 1694, 3, 236, 118, 0, 1693, 1695, 3, 240, 120, 0, 1694, 1693, 1, 0, 0, 0, 1694, 1695, 1, 0, 0, 0, 1695, 235, 1, 0, 0, 0, 1696, 1697, 3, 242, 121, 0, 1697, 1698, 3, 256, 128, 0, 1698, 1700, 1, 0, 0, 0, 1699, 1696, 1, 0, 0, 0, 1700, 1701, 1, 0, 0, 0, 1701, 1699, 1, 0, 0, 0, 1701, 1702, 1, 0, 0, 0, 1702, 237, 1, 0, 0, 0, 1703, 1706, 3, 240, 120, 0, 1704, 1707, 3, 236, 118, 0, 1705, 1707, 3, 240, 120, 0, 1706, 1704, 1, 0, 0, 0, 1706, 1705, 1, 0, 0, 0, 1706, 1707, 1, 0, 0, 0, 1707, 239, 1, 0, 0, 0, 1708, 1709, 3, 242, 121, 0, 1709, 1710, 3, 256, 128, 0, 1710, 1711, 5, 109, 0, 0, 1711, 1712, 3, 256, 128, 0, 1712, 241, 1, 0, 0, 0, 1713, 1715, 7, 29, 0, 0, 1714, 1713, 1, 0, 0, 0, 1714, 1715, 1, 0, 0, 0, 1715, 1716, 1, 0, 0, 0, 1716, 1719, 7, 30, 0, 0, 1717, 1719, 5, 323, 0, 0, 1718, 1714, 1, 0, 0, 0, 1718, 1717, 1, 0, 0, 0, 1719, 243, 1, 0, 0, 0, 1720, 1722, 5, 7, 0, 0, 1721, 1720, 1, 0, 0, 0, 1721, 1722, 1, 0, 0, 0, 1722, 1723, 1, 0, 0, 0, 1723, 1725, 3, 258, 129, 0, 1724, 1726, 3, 252, 126, 0, 1725, 1724, 1, 0, 0, 0, 1725, 1726, 1, 0, 0, 0, 1726, 245, 1, 0, 0, 0, 1727, 1729, 5, 7, 0, 0, 1728, 1727, 1, 0, 0, 0, 1728, 1729, 1, 0, 0, 0, 1729, 1730, 1, 0, 0, 0, 1730, 1732, 3, 258, 129, 0, 1731, 1733, 3, 252, 126, 0, 1732, 1731, 1, 0, 0, 0, 1732, 1733, 1, 0, 0, 0, 1733, 247, 1, 0, 0, 0, 1734, 1735, 3, 256, 128, 0, 1735, 1736, 3, 250, 125, 0, 1736, 249, 1, 0, 0, 0, 1737, 1738, 5, 131, 0, 0, 1738, 1740, 3, 256, 128, 0, 1739, 1737, 1, 0, 0, 0, 1740, 1741, 1, 0, 0, 0, 1741, 1739, 1, 0, 0, 0, 1741, 1742, 1, 0, 0, 0, 1742, 1745, 1, 0, 0, 0, 1743, 1745, 1, 0, 0, 0, 1744, 1739, 1, 0, 0, 0, 1744, 1743, 1, 0, 0, 0, 1745, 251, 1, 0, 0, 0, 1746, 1747, 5, 304, 0, 0, 1747, 1748, 3, 254, 127, 0, 1748, 1749, 5, 305, 0, 0, 1749, 253, 1, 0, 0, 0, 1750, 1755, 3, 256, 128, 0, 1751, 1752, 5, 306, 0, 0, 1752, 1754, 3, 256, 128, 0, 1753, 1751, 1, 0, 0, 0, 1754, 1757, 1, 0, 0, 0, 1755, 1753, 1, 0, 0, 0, 1755, 1756, 1, 0, 0, 0, 1756, 255, 1, 0, 0, 0, 1757, 1755, 1, 0, 0, 0, 1758, 1761, 3, 258, 129, 0, 1759, 1761, 3, 310, 155, 0, 1760, 1758, 1, 0, 0, 0, 1760, 1759, 1, 0, 0, 0, 1761, 257, 1, 0, 0, 0, 1762, 1767, 3, 260, 130, 0, 1763, 1767, 3, 262, 131, 0, 1764, 1767, 3, 308, 154, 0, 1765, 1767, 3, 312, 156, 0, 1766, 1762, 1, 0, 0, 0, 1766, 1763, 1, 0, 0, 0, 1766, 1764, 1, 0, 0, 0, 1766, 1765, 1, 0, 0, 0, 1767, 259, 1, 0, 0, 0, 1768, 1769, 7, 31, 0, 0, 1769, 261, 1, 0, 0, 0, 1770, 1771, 5, 323, 0, 0, 1771, 263, 1, 0, 0, 0, 1772, 1773, 5, 40, 0, 0, 1773, 1774, 3, 212, 106, 0, 1774, 1775, 5, 41, 0, 0, 1775, 1776, 3, 212, 106, 0, 1776, 265, 1, 0, 0, 0, 1777, 1782, 3, 268, 134, 0, 1778, 1779, 5, 306, 0, 0, 1779, 1781, 3, 268, 134, 0, 1780, 1778, 1, 0, 0, 0, 1781, 1784, 1, 0, 0, 0, 1782, 1780, 1, 0, 0, 0, 1782, 1783, 1, 0, 0, 0, 1783, 267, 1, 0, 0, 0, 1784, 1782, 1, 0, 0, 0, 1785, 1789, 5, 327, 0, 0, 1786, 1788, 5, 321, 0, 0, 1787, 1786, 1, 0, 0, 0, 1788, 1791, 1, 0, 0, 0, 1789, 1790, 1, 0, 0, 0, 1789, 1787, 1, 0, 0, 0, 1790, 269, 1, 0, 0, 0, 1791, 1789, 1, 0, 0, 0, 1792, 1796, 7, 32, 0, 0, 1793, 1795, 7, 33, 0, 0, 1794, 1793, 1, 0, 0, 0, 1795, 1798, 1, 0, 0, 0, 1796, 1797, 1, 0, 0, 0, 1796, 1794, 1, 0, 0, 0, 1797, 271, 1, 0, 0, 0, 1798, 1796, 1, 0, 0, 0, 1799, 1800, 5, 70, 0, 0, 1800, 1801, 3, 278, 139, 0, 1801, 273, 1, 0, 0, 0, 1802, 1803, 5, 128, 0, 0, 1803, 1804, 5, 25, 0, 0, 1804, 1805, 5, 27, 0, 0, 1805, 275, 1, 0, 0, 0, 1806, 1807, 5, 128, 0, 0, 1807, 1808, 5, 27, 0, 0, 1808, 277, 1, 0, 0, 0, 1809, 1810, 5, 304, 0, 0, 1810, 1815, 3, 280, 140, 0, 1811, 1812, 5, 306, 0, 0, 1812, 1814, 3, 280, 140, 0, 1813, 1811, 1, 0, 0, 0, 1814, 1817, 1, 0, 0, 0, 1815, 1813, 1, 0, 0, 0, 1815, 1816, 1, 0, 0, 0, 1816, 1818, 1, 0, 0, 0, 1817, 1815, 1, 0, 0, 0, 1818, 1819, 5, 305, 0, 0, 1819, 279, 1, 0, 0, 0, 1820, 1825, 3, 282, 141, 0, 1821, 1823, 5, 293, 0, 0, 1822, 1821, 1, 0, 0, 0, 1822, 1823, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1826, 3, 284, 142, 0, 1825, 1822, 1, 0, 0, 0, 1825, 1826, 1, 0, 0, 0, 1826, 281, 1, 0, 0, 0, 1827, 1831, 3, 256, 128, 0, 1828, 1831, 3, 226, 113, 0, 1829, 1831, 5, 323, 0, 0, 1830, 1827, 1, 0, 0, 0, 1830, 1828, 1, 0, 0, 0, 1830, 1829, 1, 0, 0, 0, 1831, 283, 1, 0, 0, 0, 1832, 1837, 5, 324, 0, 0, 1833, 1837, 5, 325, 0, 0, 1834, 1837, 3, 304, 152, 0, 1835, 1837, 5, 323, 0, 0, 1836, 1832, 1, 0, 0, 0, 1836, 1833, 1, 0, 0, 0, 1836, 1834, 1, 0, 0, 0, 1836, 1835, 1, 0, 0, 0, 1837, 285, 1, 0, 0, 0, 1838, 1845, 5, 23, 0, 0, 1839, 1840, 5, 299, 0, 0, 1840, 1845, 5, 299, 0, 0, 1841, 1845, 5, 22, 0, 0, 1842, 1843, 5, 298, 0, 0, 1843, 1845, 5, 298, 0, 0, 1844, 1838, 1, 0, 0, 0, 1844, 1839, 1, 0, 0, 0, 1844, 1841, 1, 0, 0, 0, 1844, 1842, 1, 0, 0, 0, 1845, 287, 1, 0, 0, 0, 1846, 1861, 5, 293, 0, 0, 1847, 1861, 5, 294, 0, 0, 1848, 1861, 5, 295, 0, 0, 1849, 1850, 5, 295, 0, 0, 1850, 1861, 5, 293, 0, 0, 1851, 1852, 5, 294, 0, 0, 1852, 1861, 5, 293, 0, 0, 1853, 1854, 5, 295, 0, 0, 1854, 1861, 5, 294, 0, 0, 1855, 1856, 5, 296, 0, 0, 1856, 1861, 5, 293, 0, 0, 1857, 1858, 5, 295, 0, 0, 1858, 1859, 5, 293, 0, 0, 1859, 1861, 5, 294, 0, 0, 1860, 1846, 1, 0, 0, 0, 1860, 1847, 1, 0, 0, 0, 1860, 1848, 1, 0, 0, 0, 1860, 1849, 1, 0, 0, 0, 1860, 1851, 1, 0, 0, 0, 1860, 1853, 1, 0, 0, 0, 1860, 1855, 1, 0, 0, 0, 1860, 1857, 1, 0, 0, 0, 1861, 289, 1, 0, 0, 0, 1862, 1863, 5, 295, 0, 0, 1863, 1870, 5, 295, 0, 0, 1864, 1865, 5, 294, 0, 0, 1865, 1870, 5, 294, 0, 0, 1866, 1870, 5, 299, 0, 0, 1867, 1870, 5, 300, 0, 0, 1868, 1870, 5, 298, 0, 0, 1869, 1862, 1, 0, 0, 0, 1869, 1864, 1, 0, 0, 0, 1869, 1866, 1, 0, 0, 0, 1869, 1867, 1, 0, 0, 0, 1869, 1868, 1, 0, 0, 0, 1870, 291, 1, 0, 0, 0, 1871, 1872, 7, 34, 0, 0, 1872, 293, 1, 0, 0, 0, 1873, 1874, 7, 35, 0, 0, 1874, 295, 1, 0, 0, 0, 1875, 1876, 3, 268, 134, 0, 1876, 297, 1, 0, 0, 0, 1877, 1890, 3, 300, 150, 0, 1878, 1890, 3, 302, 151, 0, 1879, 1890, 3, 232, 116, 0, 1880, 1881, 5, 315, 0, 0, 1881, 1890, 3, 302, 151, 0, 1882, 1890, 3, 304, 152, 0, 1883, 1890, 5, 325, 0, 0, 1884, 1890, 5, 326, 0, 0, 1885, 1887, 5, 25, 0, 0, 1886, 1885, 1, 0, 0, 0, 1886, 1887, 1, 0, 0, 0, 1887, 1888, 1, 0, 0, 0, 1888, 1890, 5, 291, 0, 0, 1889, 1877, 1, 0, 0, 0, 1889, 1878, 1, 0, 0, 0, 1889, 1879, 1, 0, 0, 0, 1889, 1880, 1, 0, 0, 0, 1889, 1882, 1, 0, 0, 0, 1889, 1883, 1, 0, 0, 0, 1889, 1884, 1, 0, 0, 0, 1889, 1886, 1, 0, 0, 0, 1890, 299, 1, 0, 0, 0, 1891, 1892, 5, 323, 0, 0, 1892, 301, 1, 0, 0, 0, 1893, 1894, 5, 324, 0, 0, 1894, 303, 1, 0, 0, 0, 1895, 1896, 7, 25, 0, 0, 1896, 305, 1, 0, 0, 0, 1897, 1898, 7, 36, 0, 0, 1898, 307, 1, 0, 0, 0, 1899, 1900, 7, 37, 0, 0, 1900, 309, 1, 0, 0, 0, 1901, 1902, 7, 38, 0, 0, 1902, 311, 1, 0, 0, 0, 1903, 1904, 7, 39, 0, 0, 1904, 313, 1, 0, 0, 0, 226, 322, 325, 327, 342, 360, 364, 373, 378, 385, 392, 396, 405, 417, 420, 427, 435, 440, 443, 450, 458, 462, 474, 482, 486, 507, 511, 515, 519, 528, 533, 537, 541, 545, 548, 552, 557, 563, 568, 573, 576, 580, 588, 596, 600, 604, 608, 612, 616, 620, 624, 628, 630, 640, 648, 672, 679, 694, 697, 705, 717, 741, 754, 759, 763, 771, 775, 783, 793, 797, 803, 807, 811, 814, 823, 827, 834, 837, 847, 855, 863, 867, 882, 901, 912, 916, 923, 928, 934, 938, 945, 949, 953, 957, 965, 969, 974, 979, 985, 988, 992, 1003, 1012, 1025, 1037, 1048, 1051, 1055, 1058, 1060, 1065, 1069, 1072, 1076, 1085, 1095, 1100, 1112, 1115, 1118, 1121, 1125, 1133, 1136, 1140, 1143, 1154, 1163, 1166, 1169, 1174, 1176, 1178, 1183, 1186, 1190, 1193, 1196, 1208, 1215, 1226, 1247, 1252, 1264, 1276, 1288, 1300, 1313, 1318, 1330, 1335, 1340, 1348, 1356, 1366, 1369, 1378, 1381, 1384, 1390, 1394, 1400, 1417, 1419, 1427, 1429, 1433, 1441, 1450, 1456, 1469, 1474, 1486, 1491, 1494, 1500, 1505, 1510, 1515, 1518, 1530, 1535, 1538, 1542, 1548, 1569, 1571, 1579, 1583, 1592, 1596, 1612, 1621, 1645, 1652, 1655, 1665, 1674, 1685, 1690, 1694, 1701, 1706, 1714, 1718, 1721, 1725, 1728, 1732, 1741, 1744, 1755, 1760, 1766, 1782, 1789, 1796, 1815, 1822, 1825, 1830, 1836, 1844, 1860, 1869, 1886, 1889] \ No newline at end of file +[4, 1, 349, 2142, 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, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 3, 2, 369, 8, 2, 1, 2, 5, 2, 372, 8, 2, 10, 2, 12, 2, 375, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 389, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 407, 8, 5, 1, 6, 1, 6, 3, 6, 411, 8, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 420, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 425, 8, 8, 1, 9, 1, 9, 1, 9, 5, 9, 430, 8, 9, 10, 9, 12, 9, 433, 9, 9, 1, 10, 1, 10, 1, 11, 1, 11, 3, 11, 439, 8, 11, 1, 11, 1, 11, 3, 11, 443, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 450, 8, 12, 10, 12, 12, 12, 453, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 464, 8, 13, 1, 13, 3, 13, 467, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 474, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 482, 8, 13, 1, 13, 1, 13, 1, 13, 3, 13, 487, 8, 13, 1, 13, 3, 13, 490, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 497, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 505, 8, 16, 1, 17, 1, 17, 3, 17, 509, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 521, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 529, 8, 19, 1, 19, 1, 19, 3, 19, 533, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 554, 8, 19, 1, 20, 1, 20, 3, 20, 558, 8, 20, 1, 21, 1, 21, 3, 21, 562, 8, 21, 1, 21, 1, 21, 3, 21, 566, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 573, 8, 21, 10, 21, 12, 21, 576, 9, 21, 1, 21, 1, 21, 3, 21, 580, 8, 21, 1, 21, 1, 21, 3, 21, 584, 8, 21, 1, 21, 1, 21, 3, 21, 588, 8, 21, 1, 21, 1, 21, 3, 21, 592, 8, 21, 1, 21, 3, 21, 595, 8, 21, 1, 21, 1, 21, 3, 21, 599, 8, 21, 1, 22, 1, 22, 1, 22, 3, 22, 604, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 610, 8, 22, 1, 23, 1, 23, 1, 23, 3, 23, 615, 8, 23, 1, 24, 1, 24, 1, 24, 3, 24, 620, 8, 24, 1, 24, 3, 24, 623, 8, 24, 1, 25, 1, 25, 3, 25, 627, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 633, 8, 26, 10, 26, 12, 26, 636, 9, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 3, 27, 643, 8, 27, 1, 27, 1, 27, 3, 27, 647, 8, 27, 1, 27, 1, 27, 3, 27, 651, 8, 27, 1, 27, 1, 27, 3, 27, 655, 8, 27, 1, 27, 1, 27, 3, 27, 659, 8, 27, 1, 27, 1, 27, 3, 27, 663, 8, 27, 1, 27, 1, 27, 3, 27, 667, 8, 27, 1, 27, 1, 27, 3, 27, 671, 8, 27, 1, 27, 1, 27, 3, 27, 675, 8, 27, 3, 27, 677, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 687, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 695, 8, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 5, 33, 717, 8, 33, 10, 33, 12, 33, 720, 9, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 726, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 741, 8, 36, 1, 36, 3, 36, 744, 8, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 752, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 3, 41, 764, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 786, 8, 45, 10, 45, 12, 45, 789, 9, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 799, 8, 46, 10, 46, 12, 46, 802, 9, 46, 1, 46, 1, 46, 3, 46, 806, 8, 46, 1, 47, 1, 47, 3, 47, 810, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 816, 8, 48, 10, 48, 12, 48, 819, 9, 48, 1, 48, 3, 48, 822, 8, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 830, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 3, 52, 840, 8, 52, 1, 52, 1, 52, 3, 52, 844, 8, 52, 1, 52, 1, 52, 1, 53, 1, 53, 3, 53, 850, 8, 53, 1, 53, 1, 53, 3, 53, 854, 8, 53, 1, 53, 1, 53, 3, 53, 858, 8, 53, 1, 53, 3, 53, 861, 8, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 870, 8, 54, 1, 54, 1, 54, 3, 54, 874, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 881, 8, 54, 1, 54, 3, 54, 884, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 892, 8, 55, 10, 55, 12, 55, 895, 9, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 3, 57, 902, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 910, 8, 57, 1, 58, 1, 58, 3, 58, 914, 8, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 929, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 948, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 959, 8, 66, 1, 66, 1, 66, 3, 66, 963, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 970, 8, 66, 1, 67, 1, 67, 1, 67, 3, 67, 975, 8, 67, 1, 67, 1, 67, 1, 68, 1, 68, 3, 68, 981, 8, 68, 1, 68, 1, 68, 3, 68, 985, 8, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 3, 69, 992, 8, 69, 1, 69, 1, 69, 3, 69, 996, 8, 69, 1, 70, 1, 70, 3, 70, 1000, 8, 70, 1, 70, 1, 70, 3, 70, 1004, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1012, 8, 71, 1, 71, 1, 71, 3, 71, 1016, 8, 71, 1, 71, 1, 71, 1, 72, 3, 72, 1021, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1026, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1032, 8, 73, 1, 73, 3, 73, 1035, 8, 73, 1, 73, 1, 73, 3, 73, 1039, 8, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 5, 75, 1048, 8, 75, 10, 75, 12, 75, 1051, 9, 75, 1, 76, 1, 76, 1, 76, 1, 76, 5, 76, 1057, 8, 76, 10, 76, 12, 76, 1060, 9, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 4, 77, 1070, 8, 77, 11, 77, 12, 77, 1071, 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, 3, 78, 1087, 8, 78, 1, 78, 3, 78, 1090, 8, 78, 1, 78, 1, 78, 3, 78, 1094, 8, 78, 1, 78, 3, 78, 1097, 8, 78, 3, 78, 1099, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1104, 8, 78, 1, 78, 1, 78, 3, 78, 1108, 8, 78, 1, 78, 3, 78, 1111, 8, 78, 5, 78, 1113, 8, 78, 10, 78, 12, 78, 1116, 9, 78, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 1122, 8, 79, 10, 79, 12, 79, 1125, 9, 79, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 1131, 8, 80, 10, 80, 12, 80, 1134, 9, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 1141, 8, 81, 10, 81, 12, 81, 1144, 9, 81, 1, 81, 1, 81, 3, 81, 1148, 8, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 3, 83, 1160, 8, 83, 1, 83, 3, 83, 1163, 8, 83, 1, 83, 3, 83, 1166, 8, 83, 1, 83, 3, 83, 1169, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1175, 8, 83, 1, 84, 1, 84, 3, 84, 1179, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 5, 84, 1185, 8, 84, 10, 84, 12, 84, 1188, 9, 84, 3, 84, 1190, 8, 84, 1, 85, 1, 85, 1, 85, 3, 85, 1195, 8, 85, 1, 85, 3, 85, 1198, 8, 85, 3, 85, 1200, 8, 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, 3, 86, 1214, 8, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1223, 8, 88, 10, 88, 12, 88, 1226, 9, 88, 1, 88, 1, 88, 3, 88, 1230, 8, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1238, 8, 88, 1, 88, 3, 88, 1241, 8, 88, 1, 88, 3, 88, 1244, 8, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1249, 8, 88, 5, 88, 1251, 8, 88, 10, 88, 12, 88, 1254, 9, 88, 1, 89, 1, 89, 3, 89, 1258, 8, 89, 1, 90, 3, 90, 1261, 8, 90, 1, 90, 1, 90, 3, 90, 1265, 8, 90, 1, 90, 3, 90, 1268, 8, 90, 1, 90, 3, 90, 1271, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 5, 90, 1281, 8, 90, 10, 90, 12, 90, 1284, 9, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1290, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1301, 8, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 5, 96, 1328, 8, 96, 10, 96, 12, 96, 1331, 9, 96, 1, 96, 1, 96, 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, 3, 98, 1352, 8, 98, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 5, 101, 1368, 8, 101, 10, 101, 12, 101, 1371, 9, 101, 1, 101, 1, 101, 3, 101, 1375, 8, 101, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 5, 103, 1385, 8, 103, 10, 103, 12, 103, 1388, 9, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1398, 8, 104, 10, 104, 12, 104, 1401, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1410, 8, 104, 10, 104, 12, 104, 1413, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1422, 8, 104, 10, 104, 12, 104, 1425, 9, 104, 1, 104, 1, 104, 3, 104, 1429, 8, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 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, 110, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1454, 8, 111, 10, 111, 12, 111, 1457, 9, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 3, 113, 1464, 8, 113, 1, 113, 1, 113, 3, 113, 1468, 8, 113, 1, 113, 3, 113, 1471, 8, 113, 1, 113, 3, 113, 1474, 8, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 3, 114, 1481, 8, 114, 1, 114, 3, 114, 1484, 8, 114, 1, 114, 3, 114, 1487, 8, 114, 1, 114, 3, 114, 1490, 8, 114, 1, 114, 3, 114, 1493, 8, 114, 1, 114, 3, 114, 1496, 8, 114, 1, 114, 1, 114, 1, 114, 3, 114, 1501, 8, 114, 1, 114, 3, 114, 1504, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 1511, 8, 115, 10, 115, 12, 115, 1514, 9, 115, 1, 116, 1, 116, 3, 116, 1518, 8, 116, 1, 116, 1, 116, 3, 116, 1522, 8, 116, 1, 117, 1, 117, 1, 117, 3, 117, 1527, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 5, 118, 1534, 8, 118, 10, 118, 12, 118, 1537, 9, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1555, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 5, 120, 1561, 8, 120, 10, 120, 12, 120, 1564, 9, 120, 1, 121, 1, 121, 1, 121, 4, 121, 1569, 8, 121, 11, 121, 12, 121, 1570, 1, 121, 1, 121, 3, 121, 1575, 8, 121, 1, 122, 1, 122, 3, 122, 1579, 8, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1589, 8, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1615, 8, 124, 1, 125, 1, 125, 1, 125, 1, 125, 5, 125, 1621, 8, 125, 10, 125, 12, 125, 1624, 9, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1635, 8, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1661, 8, 131, 3, 131, 1663, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1671, 8, 131, 10, 131, 12, 131, 1674, 9, 131, 1, 132, 3, 132, 1677, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1685, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 1692, 8, 132, 10, 132, 12, 132, 1695, 9, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1700, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1713, 8, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1718, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 1728, 8, 132, 10, 132, 12, 132, 1731, 9, 132, 1, 132, 1, 132, 3, 132, 1735, 8, 132, 1, 132, 3, 132, 1738, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1744, 8, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1749, 8, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1754, 8, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1759, 8, 132, 1, 133, 3, 133, 1762, 8, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 5, 133, 1772, 8, 133, 10, 133, 12, 133, 1775, 9, 133, 1, 133, 1, 133, 3, 133, 1779, 8, 133, 1, 133, 3, 133, 1782, 8, 133, 1, 133, 1, 133, 3, 133, 1786, 8, 133, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1792, 8, 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, 5, 134, 1813, 8, 134, 10, 134, 12, 134, 1816, 9, 134, 1, 135, 1, 135, 1, 135, 4, 135, 1821, 8, 135, 11, 135, 12, 135, 1822, 1, 135, 1, 135, 3, 135, 1827, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 4, 135, 1834, 8, 135, 11, 135, 12, 135, 1835, 1, 135, 1, 135, 3, 135, 1840, 8, 135, 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, 135, 1, 135, 3, 135, 1856, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 1865, 8, 135, 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, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 1889, 8, 135, 1, 135, 1, 135, 1, 135, 5, 135, 1894, 8, 135, 10, 135, 12, 135, 1897, 9, 135, 3, 135, 1899, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 1909, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 5, 135, 1916, 8, 135, 10, 135, 12, 135, 1919, 9, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 1, 139, 1, 139, 3, 139, 1929, 8, 139, 1, 140, 1, 140, 1, 140, 3, 140, 1934, 8, 140, 1, 141, 1, 141, 3, 141, 1938, 8, 141, 1, 142, 1, 142, 1, 142, 4, 142, 1943, 8, 142, 11, 142, 12, 142, 1944, 1, 143, 1, 143, 1, 143, 3, 143, 1950, 8, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 3, 145, 1958, 8, 145, 1, 145, 1, 145, 3, 145, 1962, 8, 145, 1, 146, 3, 146, 1965, 8, 146, 1, 146, 1, 146, 3, 146, 1969, 8, 146, 1, 147, 3, 147, 1972, 8, 147, 1, 147, 1, 147, 3, 147, 1976, 8, 147, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 4, 149, 1983, 8, 149, 11, 149, 12, 149, 1984, 1, 149, 3, 149, 1988, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 5, 151, 1997, 8, 151, 10, 151, 12, 151, 2000, 9, 151, 1, 152, 1, 152, 3, 152, 2004, 8, 152, 1, 153, 1, 153, 1, 153, 1, 153, 3, 153, 2010, 8, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 5, 157, 2024, 8, 157, 10, 157, 12, 157, 2027, 9, 157, 1, 158, 1, 158, 5, 158, 2031, 8, 158, 10, 158, 12, 158, 2034, 9, 158, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 5, 162, 2050, 8, 162, 10, 162, 12, 162, 2053, 9, 162, 1, 162, 1, 162, 1, 163, 1, 163, 3, 163, 2059, 8, 163, 1, 163, 3, 163, 2062, 8, 163, 1, 164, 1, 164, 1, 164, 3, 164, 2067, 8, 164, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2073, 8, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 2081, 8, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 3, 167, 2097, 8, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2106, 8, 168, 1, 169, 1, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 3, 172, 2123, 8, 172, 1, 172, 3, 172, 2126, 8, 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, 2032, 5, 156, 176, 262, 268, 270, 180, 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, 0, 42, 2, 0, 36, 36, 84, 84, 1, 0, 87, 89, 2, 0, 193, 193, 253, 255, 2, 0, 192, 192, 239, 239, 2, 0, 5, 5, 24, 24, 2, 0, 74, 74, 76, 76, 2, 0, 6, 6, 82, 82, 1, 0, 246, 250, 3, 0, 301, 301, 306, 306, 309, 309, 6, 0, 283, 283, 286, 290, 294, 298, 302, 302, 304, 304, 310, 310, 1, 0, 70, 71, 2, 0, 291, 293, 299, 300, 2, 0, 284, 284, 305, 305, 1, 0, 233, 234, 3, 0, 8, 8, 102, 102, 236, 236, 1, 0, 233, 235, 2, 0, 167, 167, 237, 238, 1, 0, 241, 243, 2, 0, 184, 184, 186, 186, 2, 0, 83, 83, 140, 140, 2, 0, 105, 106, 108, 108, 2, 0, 48, 49, 51, 52, 1, 0, 265, 267, 2, 0, 118, 118, 269, 273, 1, 0, 16, 17, 2, 0, 265, 266, 274, 274, 1, 0, 35, 36, 2, 0, 67, 67, 69, 69, 1, 0, 8, 9, 1, 0, 32, 33, 2, 0, 315, 315, 335, 336, 4, 0, 132, 132, 333, 333, 337, 337, 340, 340, 2, 0, 335, 336, 338, 338, 1, 0, 335, 336, 1, 0, 344, 345, 2, 0, 344, 344, 347, 347, 4, 0, 132, 132, 333, 333, 335, 337, 339, 340, 3, 0, 25, 25, 314, 315, 335, 336, 2, 0, 8, 8, 10, 10, 32, 0, 6, 6, 13, 17, 20, 21, 26, 30, 32, 32, 34, 36, 38, 38, 50, 50, 56, 69, 72, 72, 75, 77, 80, 81, 84, 85, 90, 93, 95, 97, 99, 99, 102, 104, 107, 107, 110, 124, 128, 142, 144, 184, 186, 203, 205, 212, 214, 234, 236, 237, 239, 240, 253, 254, 258, 260, 283, 291, 294, 296, 298, 303, 305, 310, 6, 0, 45, 46, 48, 52, 54, 55, 105, 108, 143, 143, 223, 223, 24, 0, 4, 42, 44, 44, 47, 47, 53, 53, 56, 70, 72, 77, 80, 81, 83, 85, 90, 99, 102, 104, 109, 142, 144, 176, 178, 212, 214, 222, 224, 234, 236, 237, 239, 240, 253, 254, 256, 256, 258, 260, 283, 291, 294, 296, 298, 303, 305, 310, 2319, 0, 360, 1, 0, 0, 0, 2, 363, 1, 0, 0, 0, 4, 373, 1, 0, 0, 0, 6, 388, 1, 0, 0, 0, 8, 390, 1, 0, 0, 0, 10, 406, 1, 0, 0, 0, 12, 410, 1, 0, 0, 0, 14, 412, 1, 0, 0, 0, 16, 415, 1, 0, 0, 0, 18, 426, 1, 0, 0, 0, 20, 434, 1, 0, 0, 0, 22, 442, 1, 0, 0, 0, 24, 444, 1, 0, 0, 0, 26, 489, 1, 0, 0, 0, 28, 491, 1, 0, 0, 0, 30, 498, 1, 0, 0, 0, 32, 502, 1, 0, 0, 0, 34, 506, 1, 0, 0, 0, 36, 510, 1, 0, 0, 0, 38, 553, 1, 0, 0, 0, 40, 557, 1, 0, 0, 0, 42, 559, 1, 0, 0, 0, 44, 600, 1, 0, 0, 0, 46, 614, 1, 0, 0, 0, 48, 616, 1, 0, 0, 0, 50, 626, 1, 0, 0, 0, 52, 628, 1, 0, 0, 0, 54, 676, 1, 0, 0, 0, 56, 678, 1, 0, 0, 0, 58, 682, 1, 0, 0, 0, 60, 690, 1, 0, 0, 0, 62, 698, 1, 0, 0, 0, 64, 702, 1, 0, 0, 0, 66, 709, 1, 0, 0, 0, 68, 725, 1, 0, 0, 0, 70, 732, 1, 0, 0, 0, 72, 735, 1, 0, 0, 0, 74, 745, 1, 0, 0, 0, 76, 747, 1, 0, 0, 0, 78, 753, 1, 0, 0, 0, 80, 755, 1, 0, 0, 0, 82, 763, 1, 0, 0, 0, 84, 771, 1, 0, 0, 0, 86, 773, 1, 0, 0, 0, 88, 777, 1, 0, 0, 0, 90, 781, 1, 0, 0, 0, 92, 805, 1, 0, 0, 0, 94, 809, 1, 0, 0, 0, 96, 811, 1, 0, 0, 0, 98, 823, 1, 0, 0, 0, 100, 829, 1, 0, 0, 0, 102, 831, 1, 0, 0, 0, 104, 836, 1, 0, 0, 0, 106, 847, 1, 0, 0, 0, 108, 865, 1, 0, 0, 0, 110, 885, 1, 0, 0, 0, 112, 896, 1, 0, 0, 0, 114, 898, 1, 0, 0, 0, 116, 911, 1, 0, 0, 0, 118, 918, 1, 0, 0, 0, 120, 921, 1, 0, 0, 0, 122, 930, 1, 0, 0, 0, 124, 934, 1, 0, 0, 0, 126, 938, 1, 0, 0, 0, 128, 941, 1, 0, 0, 0, 130, 949, 1, 0, 0, 0, 132, 954, 1, 0, 0, 0, 134, 971, 1, 0, 0, 0, 136, 978, 1, 0, 0, 0, 138, 988, 1, 0, 0, 0, 140, 997, 1, 0, 0, 0, 142, 1007, 1, 0, 0, 0, 144, 1025, 1, 0, 0, 0, 146, 1027, 1, 0, 0, 0, 148, 1040, 1, 0, 0, 0, 150, 1043, 1, 0, 0, 0, 152, 1052, 1, 0, 0, 0, 154, 1063, 1, 0, 0, 0, 156, 1098, 1, 0, 0, 0, 158, 1117, 1, 0, 0, 0, 160, 1126, 1, 0, 0, 0, 162, 1135, 1, 0, 0, 0, 164, 1154, 1, 0, 0, 0, 166, 1174, 1, 0, 0, 0, 168, 1176, 1, 0, 0, 0, 170, 1199, 1, 0, 0, 0, 172, 1213, 1, 0, 0, 0, 174, 1215, 1, 0, 0, 0, 176, 1229, 1, 0, 0, 0, 178, 1255, 1, 0, 0, 0, 180, 1300, 1, 0, 0, 0, 182, 1302, 1, 0, 0, 0, 184, 1304, 1, 0, 0, 0, 186, 1310, 1, 0, 0, 0, 188, 1312, 1, 0, 0, 0, 190, 1317, 1, 0, 0, 0, 192, 1322, 1, 0, 0, 0, 194, 1334, 1, 0, 0, 0, 196, 1351, 1, 0, 0, 0, 198, 1353, 1, 0, 0, 0, 200, 1355, 1, 0, 0, 0, 202, 1374, 1, 0, 0, 0, 204, 1376, 1, 0, 0, 0, 206, 1379, 1, 0, 0, 0, 208, 1428, 1, 0, 0, 0, 210, 1430, 1, 0, 0, 0, 212, 1433, 1, 0, 0, 0, 214, 1435, 1, 0, 0, 0, 216, 1442, 1, 0, 0, 0, 218, 1444, 1, 0, 0, 0, 220, 1446, 1, 0, 0, 0, 222, 1449, 1, 0, 0, 0, 224, 1458, 1, 0, 0, 0, 226, 1463, 1, 0, 0, 0, 228, 1477, 1, 0, 0, 0, 230, 1505, 1, 0, 0, 0, 232, 1515, 1, 0, 0, 0, 234, 1523, 1, 0, 0, 0, 236, 1528, 1, 0, 0, 0, 238, 1554, 1, 0, 0, 0, 240, 1556, 1, 0, 0, 0, 242, 1565, 1, 0, 0, 0, 244, 1576, 1, 0, 0, 0, 246, 1588, 1, 0, 0, 0, 248, 1614, 1, 0, 0, 0, 250, 1616, 1, 0, 0, 0, 252, 1634, 1, 0, 0, 0, 254, 1636, 1, 0, 0, 0, 256, 1641, 1, 0, 0, 0, 258, 1644, 1, 0, 0, 0, 260, 1648, 1, 0, 0, 0, 262, 1662, 1, 0, 0, 0, 264, 1758, 1, 0, 0, 0, 266, 1785, 1, 0, 0, 0, 268, 1791, 1, 0, 0, 0, 270, 1908, 1, 0, 0, 0, 272, 1920, 1, 0, 0, 0, 274, 1922, 1, 0, 0, 0, 276, 1924, 1, 0, 0, 0, 278, 1928, 1, 0, 0, 0, 280, 1930, 1, 0, 0, 0, 282, 1935, 1, 0, 0, 0, 284, 1942, 1, 0, 0, 0, 286, 1946, 1, 0, 0, 0, 288, 1951, 1, 0, 0, 0, 290, 1961, 1, 0, 0, 0, 292, 1964, 1, 0, 0, 0, 294, 1971, 1, 0, 0, 0, 296, 1977, 1, 0, 0, 0, 298, 1987, 1, 0, 0, 0, 300, 1989, 1, 0, 0, 0, 302, 1993, 1, 0, 0, 0, 304, 2003, 1, 0, 0, 0, 306, 2009, 1, 0, 0, 0, 308, 2011, 1, 0, 0, 0, 310, 2013, 1, 0, 0, 0, 312, 2015, 1, 0, 0, 0, 314, 2020, 1, 0, 0, 0, 316, 2028, 1, 0, 0, 0, 318, 2035, 1, 0, 0, 0, 320, 2038, 1, 0, 0, 0, 322, 2042, 1, 0, 0, 0, 324, 2045, 1, 0, 0, 0, 326, 2056, 1, 0, 0, 0, 328, 2066, 1, 0, 0, 0, 330, 2072, 1, 0, 0, 0, 332, 2080, 1, 0, 0, 0, 334, 2096, 1, 0, 0, 0, 336, 2105, 1, 0, 0, 0, 338, 2107, 1, 0, 0, 0, 340, 2109, 1, 0, 0, 0, 342, 2111, 1, 0, 0, 0, 344, 2125, 1, 0, 0, 0, 346, 2127, 1, 0, 0, 0, 348, 2129, 1, 0, 0, 0, 350, 2131, 1, 0, 0, 0, 352, 2133, 1, 0, 0, 0, 354, 2135, 1, 0, 0, 0, 356, 2137, 1, 0, 0, 0, 358, 2139, 1, 0, 0, 0, 360, 361, 3, 2, 1, 0, 361, 362, 5, 0, 0, 1, 362, 1, 1, 0, 0, 0, 363, 364, 3, 4, 2, 0, 364, 365, 5, 0, 0, 1, 365, 3, 1, 0, 0, 0, 366, 368, 3, 6, 3, 0, 367, 369, 5, 327, 0, 0, 368, 367, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 372, 1, 0, 0, 0, 370, 372, 3, 8, 4, 0, 371, 366, 1, 0, 0, 0, 371, 370, 1, 0, 0, 0, 372, 375, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 5, 1, 0, 0, 0, 375, 373, 1, 0, 0, 0, 376, 389, 3, 10, 5, 0, 377, 389, 3, 12, 6, 0, 378, 389, 3, 14, 7, 0, 379, 389, 3, 16, 8, 0, 380, 389, 3, 22, 11, 0, 381, 389, 3, 26, 13, 0, 382, 389, 3, 28, 14, 0, 383, 389, 3, 30, 15, 0, 384, 389, 3, 32, 16, 0, 385, 389, 3, 34, 17, 0, 386, 389, 3, 36, 18, 0, 387, 389, 3, 38, 19, 0, 388, 376, 1, 0, 0, 0, 388, 377, 1, 0, 0, 0, 388, 378, 1, 0, 0, 0, 388, 379, 1, 0, 0, 0, 388, 380, 1, 0, 0, 0, 388, 381, 1, 0, 0, 0, 388, 382, 1, 0, 0, 0, 388, 383, 1, 0, 0, 0, 388, 384, 1, 0, 0, 0, 388, 385, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 388, 387, 1, 0, 0, 0, 389, 7, 1, 0, 0, 0, 390, 391, 5, 327, 0, 0, 391, 9, 1, 0, 0, 0, 392, 407, 3, 40, 20, 0, 393, 407, 3, 104, 52, 0, 394, 407, 3, 106, 53, 0, 395, 407, 3, 108, 54, 0, 396, 407, 3, 102, 51, 0, 397, 407, 3, 114, 57, 0, 398, 407, 3, 128, 64, 0, 399, 407, 3, 130, 65, 0, 400, 407, 3, 132, 66, 0, 401, 407, 3, 134, 67, 0, 402, 407, 3, 136, 68, 0, 403, 407, 3, 138, 69, 0, 404, 407, 3, 140, 70, 0, 405, 407, 3, 142, 71, 0, 406, 392, 1, 0, 0, 0, 406, 393, 1, 0, 0, 0, 406, 394, 1, 0, 0, 0, 406, 395, 1, 0, 0, 0, 406, 396, 1, 0, 0, 0, 406, 397, 1, 0, 0, 0, 406, 398, 1, 0, 0, 0, 406, 399, 1, 0, 0, 0, 406, 400, 1, 0, 0, 0, 406, 401, 1, 0, 0, 0, 406, 402, 1, 0, 0, 0, 406, 403, 1, 0, 0, 0, 406, 404, 1, 0, 0, 0, 406, 405, 1, 0, 0, 0, 407, 11, 1, 0, 0, 0, 408, 411, 3, 156, 78, 0, 409, 411, 3, 144, 72, 0, 410, 408, 1, 0, 0, 0, 410, 409, 1, 0, 0, 0, 411, 13, 1, 0, 0, 0, 412, 413, 7, 0, 0, 0, 413, 414, 3, 316, 158, 0, 414, 15, 1, 0, 0, 0, 415, 419, 5, 85, 0, 0, 416, 420, 3, 18, 9, 0, 417, 418, 5, 86, 0, 0, 418, 420, 5, 37, 0, 0, 419, 416, 1, 0, 0, 0, 419, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 424, 1, 0, 0, 0, 421, 425, 3, 12, 6, 0, 422, 425, 3, 146, 73, 0, 423, 425, 3, 154, 77, 0, 424, 421, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 424, 423, 1, 0, 0, 0, 425, 17, 1, 0, 0, 0, 426, 431, 3, 20, 10, 0, 427, 428, 5, 326, 0, 0, 428, 430, 3, 20, 10, 0, 429, 427, 1, 0, 0, 0, 430, 433, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 19, 1, 0, 0, 0, 433, 431, 1, 0, 0, 0, 434, 435, 7, 1, 0, 0, 435, 21, 1, 0, 0, 0, 436, 438, 5, 99, 0, 0, 437, 439, 5, 239, 0, 0, 438, 437, 1, 0, 0, 0, 438, 439, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 443, 3, 316, 158, 0, 441, 443, 3, 24, 12, 0, 442, 436, 1, 0, 0, 0, 442, 441, 1, 0, 0, 0, 443, 23, 1, 0, 0, 0, 444, 445, 5, 99, 0, 0, 445, 446, 5, 101, 0, 0, 446, 451, 3, 316, 158, 0, 447, 448, 5, 326, 0, 0, 448, 450, 3, 316, 158, 0, 449, 447, 1, 0, 0, 0, 450, 453, 1, 0, 0, 0, 451, 449, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 25, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 454, 455, 5, 95, 0, 0, 455, 490, 7, 2, 0, 0, 456, 457, 5, 95, 0, 0, 457, 458, 5, 66, 0, 0, 458, 490, 7, 3, 0, 0, 459, 460, 5, 95, 0, 0, 460, 463, 5, 96, 0, 0, 461, 462, 7, 4, 0, 0, 462, 464, 3, 316, 158, 0, 463, 461, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 466, 1, 0, 0, 0, 465, 467, 3, 266, 133, 0, 466, 465, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 490, 1, 0, 0, 0, 468, 469, 5, 95, 0, 0, 469, 470, 5, 97, 0, 0, 470, 471, 7, 4, 0, 0, 471, 473, 3, 316, 158, 0, 472, 474, 3, 266, 133, 0, 473, 472, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 490, 1, 0, 0, 0, 475, 476, 5, 95, 0, 0, 476, 477, 5, 73, 0, 0, 477, 478, 7, 5, 0, 0, 478, 490, 3, 316, 158, 0, 479, 481, 5, 95, 0, 0, 480, 482, 5, 53, 0, 0, 481, 480, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 490, 5, 103, 0, 0, 484, 486, 5, 95, 0, 0, 485, 487, 5, 52, 0, 0, 486, 485, 1, 0, 0, 0, 486, 487, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 490, 5, 101, 0, 0, 489, 454, 1, 0, 0, 0, 489, 456, 1, 0, 0, 0, 489, 459, 1, 0, 0, 0, 489, 468, 1, 0, 0, 0, 489, 475, 1, 0, 0, 0, 489, 479, 1, 0, 0, 0, 489, 484, 1, 0, 0, 0, 490, 27, 1, 0, 0, 0, 491, 492, 5, 212, 0, 0, 492, 493, 5, 100, 0, 0, 493, 496, 3, 316, 158, 0, 494, 495, 5, 70, 0, 0, 495, 497, 3, 324, 162, 0, 496, 494, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 29, 1, 0, 0, 0, 498, 499, 5, 213, 0, 0, 499, 500, 5, 100, 0, 0, 500, 501, 3, 316, 158, 0, 501, 31, 1, 0, 0, 0, 502, 504, 5, 116, 0, 0, 503, 505, 3, 326, 163, 0, 504, 503, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 33, 1, 0, 0, 0, 506, 508, 5, 117, 0, 0, 507, 509, 3, 328, 164, 0, 508, 507, 1, 0, 0, 0, 508, 509, 1, 0, 0, 0, 509, 35, 1, 0, 0, 0, 510, 511, 7, 6, 0, 0, 511, 512, 5, 244, 0, 0, 512, 513, 3, 112, 56, 0, 513, 37, 1, 0, 0, 0, 514, 515, 5, 6, 0, 0, 515, 516, 5, 244, 0, 0, 516, 517, 5, 70, 0, 0, 517, 520, 5, 348, 0, 0, 518, 519, 5, 7, 0, 0, 519, 521, 3, 316, 158, 0, 520, 518, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 554, 1, 0, 0, 0, 522, 523, 5, 6, 0, 0, 523, 524, 5, 245, 0, 0, 524, 525, 5, 70, 0, 0, 525, 528, 5, 348, 0, 0, 526, 527, 5, 7, 0, 0, 527, 529, 3, 316, 158, 0, 528, 526, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 532, 1, 0, 0, 0, 530, 531, 5, 113, 0, 0, 531, 533, 3, 316, 158, 0, 532, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 554, 1, 0, 0, 0, 534, 535, 5, 6, 0, 0, 535, 536, 7, 7, 0, 0, 536, 537, 5, 70, 0, 0, 537, 538, 5, 348, 0, 0, 538, 539, 5, 113, 0, 0, 539, 554, 3, 316, 158, 0, 540, 541, 5, 6, 0, 0, 541, 542, 5, 251, 0, 0, 542, 554, 5, 348, 0, 0, 543, 544, 5, 6, 0, 0, 544, 545, 5, 252, 0, 0, 545, 546, 5, 245, 0, 0, 546, 547, 5, 70, 0, 0, 547, 548, 5, 348, 0, 0, 548, 549, 5, 113, 0, 0, 549, 550, 3, 316, 158, 0, 550, 551, 5, 258, 0, 0, 551, 552, 3, 316, 158, 0, 552, 554, 1, 0, 0, 0, 553, 514, 1, 0, 0, 0, 553, 522, 1, 0, 0, 0, 553, 534, 1, 0, 0, 0, 553, 540, 1, 0, 0, 0, 553, 543, 1, 0, 0, 0, 554, 39, 1, 0, 0, 0, 555, 558, 3, 42, 21, 0, 556, 558, 3, 44, 22, 0, 557, 555, 1, 0, 0, 0, 557, 556, 1, 0, 0, 0, 558, 41, 1, 0, 0, 0, 559, 561, 5, 73, 0, 0, 560, 562, 5, 166, 0, 0, 561, 560, 1, 0, 0, 0, 561, 562, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 565, 5, 74, 0, 0, 564, 566, 3, 320, 160, 0, 565, 564, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 568, 3, 98, 49, 0, 568, 569, 5, 322, 0, 0, 569, 574, 3, 46, 23, 0, 570, 571, 5, 326, 0, 0, 571, 573, 3, 46, 23, 0, 572, 570, 1, 0, 0, 0, 573, 576, 1, 0, 0, 0, 574, 572, 1, 0, 0, 0, 574, 575, 1, 0, 0, 0, 575, 579, 1, 0, 0, 0, 576, 574, 1, 0, 0, 0, 577, 578, 5, 326, 0, 0, 578, 580, 3, 80, 40, 0, 579, 577, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 583, 1, 0, 0, 0, 581, 582, 5, 326, 0, 0, 582, 584, 3, 82, 41, 0, 583, 581, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 587, 1, 0, 0, 0, 585, 586, 5, 326, 0, 0, 586, 588, 3, 86, 43, 0, 587, 585, 1, 0, 0, 0, 587, 588, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 591, 5, 323, 0, 0, 590, 592, 3, 70, 35, 0, 591, 590, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 594, 1, 0, 0, 0, 593, 595, 3, 88, 44, 0, 594, 593, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 598, 3, 318, 159, 0, 597, 599, 3, 96, 48, 0, 598, 597, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 43, 1, 0, 0, 0, 600, 601, 5, 73, 0, 0, 601, 603, 5, 74, 0, 0, 602, 604, 3, 320, 160, 0, 603, 602, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 3, 98, 49, 0, 606, 609, 3, 318, 159, 0, 607, 608, 5, 7, 0, 0, 608, 610, 3, 156, 78, 0, 609, 607, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 45, 1, 0, 0, 0, 611, 615, 3, 48, 24, 0, 612, 615, 3, 72, 36, 0, 613, 615, 3, 76, 38, 0, 614, 611, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 614, 613, 1, 0, 0, 0, 615, 47, 1, 0, 0, 0, 616, 617, 3, 50, 25, 0, 617, 619, 3, 54, 27, 0, 618, 620, 3, 68, 34, 0, 619, 618, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 622, 1, 0, 0, 0, 621, 623, 3, 70, 35, 0, 622, 621, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 49, 1, 0, 0, 0, 624, 627, 3, 316, 158, 0, 625, 627, 3, 260, 130, 0, 626, 624, 1, 0, 0, 0, 626, 625, 1, 0, 0, 0, 627, 51, 1, 0, 0, 0, 628, 629, 5, 322, 0, 0, 629, 634, 3, 50, 25, 0, 630, 631, 5, 326, 0, 0, 631, 633, 3, 50, 25, 0, 632, 630, 1, 0, 0, 0, 633, 636, 1, 0, 0, 0, 634, 632, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 637, 1, 0, 0, 0, 636, 634, 1, 0, 0, 0, 637, 638, 5, 323, 0, 0, 638, 53, 1, 0, 0, 0, 639, 677, 7, 8, 0, 0, 640, 642, 7, 9, 0, 0, 641, 643, 3, 56, 28, 0, 642, 641, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 677, 1, 0, 0, 0, 644, 646, 5, 303, 0, 0, 645, 647, 3, 56, 28, 0, 646, 645, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 654, 1, 0, 0, 0, 648, 650, 7, 10, 0, 0, 649, 651, 5, 224, 0, 0, 650, 649, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 652, 1, 0, 0, 0, 652, 653, 5, 302, 0, 0, 653, 655, 5, 264, 0, 0, 654, 648, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 677, 1, 0, 0, 0, 656, 658, 7, 11, 0, 0, 657, 659, 3, 58, 29, 0, 658, 657, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 677, 1, 0, 0, 0, 660, 662, 7, 12, 0, 0, 661, 663, 3, 62, 31, 0, 662, 661, 1, 0, 0, 0, 662, 663, 1, 0, 0, 0, 663, 677, 1, 0, 0, 0, 664, 666, 5, 285, 0, 0, 665, 667, 3, 64, 32, 0, 666, 665, 1, 0, 0, 0, 666, 667, 1, 0, 0, 0, 667, 677, 1, 0, 0, 0, 668, 670, 5, 308, 0, 0, 669, 671, 3, 66, 33, 0, 670, 669, 1, 0, 0, 0, 670, 671, 1, 0, 0, 0, 671, 677, 1, 0, 0, 0, 672, 674, 5, 307, 0, 0, 673, 675, 3, 60, 30, 0, 674, 673, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 677, 1, 0, 0, 0, 676, 639, 1, 0, 0, 0, 676, 640, 1, 0, 0, 0, 676, 644, 1, 0, 0, 0, 676, 656, 1, 0, 0, 0, 676, 660, 1, 0, 0, 0, 676, 664, 1, 0, 0, 0, 676, 668, 1, 0, 0, 0, 676, 672, 1, 0, 0, 0, 677, 55, 1, 0, 0, 0, 678, 679, 5, 322, 0, 0, 679, 680, 3, 348, 174, 0, 680, 681, 5, 323, 0, 0, 681, 57, 1, 0, 0, 0, 682, 683, 5, 322, 0, 0, 683, 686, 3, 348, 174, 0, 684, 685, 5, 326, 0, 0, 685, 687, 3, 348, 174, 0, 686, 684, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 5, 323, 0, 0, 689, 59, 1, 0, 0, 0, 690, 691, 5, 322, 0, 0, 691, 694, 3, 346, 173, 0, 692, 693, 5, 326, 0, 0, 693, 695, 3, 346, 173, 0, 694, 692, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 697, 5, 323, 0, 0, 697, 61, 1, 0, 0, 0, 698, 699, 5, 313, 0, 0, 699, 700, 3, 54, 27, 0, 700, 701, 5, 312, 0, 0, 701, 63, 1, 0, 0, 0, 702, 703, 5, 313, 0, 0, 703, 704, 3, 54, 27, 0, 704, 705, 5, 326, 0, 0, 705, 706, 3, 54, 27, 0, 706, 707, 1, 0, 0, 0, 707, 708, 5, 312, 0, 0, 708, 65, 1, 0, 0, 0, 709, 710, 5, 313, 0, 0, 710, 711, 3, 50, 25, 0, 711, 718, 3, 54, 27, 0, 712, 713, 5, 326, 0, 0, 713, 714, 3, 50, 25, 0, 714, 715, 3, 54, 27, 0, 715, 717, 1, 0, 0, 0, 716, 712, 1, 0, 0, 0, 717, 720, 1, 0, 0, 0, 718, 716, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 721, 1, 0, 0, 0, 720, 718, 1, 0, 0, 0, 721, 722, 5, 312, 0, 0, 722, 67, 1, 0, 0, 0, 723, 724, 5, 185, 0, 0, 724, 726, 3, 84, 42, 0, 725, 723, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 727, 1, 0, 0, 0, 727, 728, 5, 256, 0, 0, 728, 729, 5, 258, 0, 0, 729, 730, 5, 25, 0, 0, 730, 731, 5, 261, 0, 0, 731, 69, 1, 0, 0, 0, 732, 733, 5, 115, 0, 0, 733, 734, 5, 343, 0, 0, 734, 71, 1, 0, 0, 0, 735, 736, 3, 50, 25, 0, 736, 737, 3, 54, 27, 0, 737, 740, 5, 262, 0, 0, 738, 739, 5, 5, 0, 0, 739, 741, 3, 74, 37, 0, 740, 738, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 743, 1, 0, 0, 0, 742, 744, 5, 263, 0, 0, 743, 742, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 73, 1, 0, 0, 0, 745, 746, 5, 343, 0, 0, 746, 75, 1, 0, 0, 0, 747, 748, 3, 50, 25, 0, 748, 749, 5, 7, 0, 0, 749, 751, 3, 78, 39, 0, 750, 752, 3, 70, 35, 0, 751, 750, 1, 0, 0, 0, 751, 752, 1, 0, 0, 0, 752, 77, 1, 0, 0, 0, 753, 754, 3, 260, 130, 0, 754, 79, 1, 0, 0, 0, 755, 756, 5, 226, 0, 0, 756, 757, 5, 37, 0, 0, 757, 758, 3, 260, 130, 0, 758, 759, 5, 7, 0, 0, 759, 760, 3, 260, 130, 0, 760, 81, 1, 0, 0, 0, 761, 762, 5, 185, 0, 0, 762, 764, 3, 84, 42, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 765, 1, 0, 0, 0, 765, 766, 5, 256, 0, 0, 766, 767, 5, 258, 0, 0, 767, 768, 3, 52, 26, 0, 768, 769, 5, 25, 0, 0, 769, 770, 5, 261, 0, 0, 770, 83, 1, 0, 0, 0, 771, 772, 3, 304, 152, 0, 772, 85, 1, 0, 0, 0, 773, 774, 5, 259, 0, 0, 774, 775, 5, 37, 0, 0, 775, 776, 5, 260, 0, 0, 776, 87, 1, 0, 0, 0, 777, 778, 5, 200, 0, 0, 778, 779, 5, 13, 0, 0, 779, 780, 3, 90, 45, 0, 780, 89, 1, 0, 0, 0, 781, 782, 5, 322, 0, 0, 782, 787, 3, 92, 46, 0, 783, 784, 5, 326, 0, 0, 784, 786, 3, 92, 46, 0, 785, 783, 1, 0, 0, 0, 786, 789, 1, 0, 0, 0, 787, 785, 1, 0, 0, 0, 787, 788, 1, 0, 0, 0, 788, 790, 1, 0, 0, 0, 789, 787, 1, 0, 0, 0, 790, 791, 5, 323, 0, 0, 791, 91, 1, 0, 0, 0, 792, 806, 3, 278, 139, 0, 793, 794, 3, 304, 152, 0, 794, 795, 5, 322, 0, 0, 795, 800, 3, 94, 47, 0, 796, 797, 5, 326, 0, 0, 797, 799, 3, 94, 47, 0, 798, 796, 1, 0, 0, 0, 799, 802, 1, 0, 0, 0, 800, 798, 1, 0, 0, 0, 800, 801, 1, 0, 0, 0, 801, 803, 1, 0, 0, 0, 802, 800, 1, 0, 0, 0, 803, 804, 5, 323, 0, 0, 804, 806, 1, 0, 0, 0, 805, 792, 1, 0, 0, 0, 805, 793, 1, 0, 0, 0, 806, 93, 1, 0, 0, 0, 807, 810, 3, 278, 139, 0, 808, 810, 3, 344, 172, 0, 809, 807, 1, 0, 0, 0, 809, 808, 1, 0, 0, 0, 810, 95, 1, 0, 0, 0, 811, 812, 5, 29, 0, 0, 812, 821, 3, 98, 49, 0, 813, 817, 5, 322, 0, 0, 814, 816, 3, 100, 50, 0, 815, 814, 1, 0, 0, 0, 816, 819, 1, 0, 0, 0, 817, 815, 1, 0, 0, 0, 817, 818, 1, 0, 0, 0, 818, 820, 1, 0, 0, 0, 819, 817, 1, 0, 0, 0, 820, 822, 5, 323, 0, 0, 821, 813, 1, 0, 0, 0, 821, 822, 1, 0, 0, 0, 822, 97, 1, 0, 0, 0, 823, 824, 3, 316, 158, 0, 824, 99, 1, 0, 0, 0, 825, 826, 7, 13, 0, 0, 826, 830, 7, 14, 0, 0, 827, 828, 7, 15, 0, 0, 828, 830, 7, 16, 0, 0, 829, 825, 1, 0, 0, 0, 829, 827, 1, 0, 0, 0, 830, 101, 1, 0, 0, 0, 831, 832, 5, 73, 0, 0, 832, 833, 5, 239, 0, 0, 833, 834, 3, 316, 158, 0, 834, 835, 3, 318, 159, 0, 835, 103, 1, 0, 0, 0, 836, 837, 5, 73, 0, 0, 837, 839, 5, 192, 0, 0, 838, 840, 3, 320, 160, 0, 839, 838, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 841, 1, 0, 0, 0, 841, 843, 3, 316, 158, 0, 842, 844, 3, 70, 35, 0, 843, 842, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 845, 1, 0, 0, 0, 845, 846, 3, 318, 159, 0, 846, 105, 1, 0, 0, 0, 847, 849, 5, 73, 0, 0, 848, 850, 5, 166, 0, 0, 849, 848, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 851, 1, 0, 0, 0, 851, 853, 5, 76, 0, 0, 852, 854, 3, 320, 160, 0, 853, 852, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 1, 0, 0, 0, 855, 857, 3, 316, 158, 0, 856, 858, 3, 52, 26, 0, 857, 856, 1, 0, 0, 0, 857, 858, 1, 0, 0, 0, 858, 860, 1, 0, 0, 0, 859, 861, 3, 70, 35, 0, 860, 859, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 863, 5, 7, 0, 0, 863, 864, 3, 156, 78, 0, 864, 107, 1, 0, 0, 0, 865, 869, 5, 73, 0, 0, 866, 870, 5, 166, 0, 0, 867, 868, 5, 166, 0, 0, 868, 870, 5, 232, 0, 0, 869, 866, 1, 0, 0, 0, 869, 867, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 871, 1, 0, 0, 0, 871, 873, 5, 157, 0, 0, 872, 874, 3, 320, 160, 0, 873, 872, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 875, 1, 0, 0, 0, 875, 876, 3, 316, 158, 0, 876, 877, 5, 7, 0, 0, 877, 880, 3, 304, 152, 0, 878, 879, 5, 240, 0, 0, 879, 881, 7, 17, 0, 0, 880, 878, 1, 0, 0, 0, 880, 881, 1, 0, 0, 0, 881, 883, 1, 0, 0, 0, 882, 884, 3, 110, 55, 0, 883, 882, 1, 0, 0, 0, 883, 884, 1, 0, 0, 0, 884, 109, 1, 0, 0, 0, 885, 886, 5, 143, 0, 0, 886, 887, 5, 244, 0, 0, 887, 893, 3, 112, 56, 0, 888, 889, 5, 326, 0, 0, 889, 890, 5, 244, 0, 0, 890, 892, 3, 112, 56, 0, 891, 888, 1, 0, 0, 0, 892, 895, 1, 0, 0, 0, 893, 891, 1, 0, 0, 0, 893, 894, 1, 0, 0, 0, 894, 111, 1, 0, 0, 0, 895, 893, 1, 0, 0, 0, 896, 897, 5, 343, 0, 0, 897, 113, 1, 0, 0, 0, 898, 899, 5, 112, 0, 0, 899, 901, 5, 74, 0, 0, 900, 902, 3, 322, 161, 0, 901, 900, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 909, 3, 316, 158, 0, 904, 910, 3, 116, 58, 0, 905, 910, 3, 118, 59, 0, 906, 910, 3, 120, 60, 0, 907, 910, 3, 122, 61, 0, 908, 910, 3, 124, 62, 0, 909, 904, 1, 0, 0, 0, 909, 905, 1, 0, 0, 0, 909, 906, 1, 0, 0, 0, 909, 907, 1, 0, 0, 0, 909, 908, 1, 0, 0, 0, 910, 115, 1, 0, 0, 0, 911, 913, 5, 113, 0, 0, 912, 914, 3, 316, 158, 0, 913, 912, 1, 0, 0, 0, 913, 914, 1, 0, 0, 0, 914, 915, 1, 0, 0, 0, 915, 916, 5, 109, 0, 0, 916, 917, 3, 316, 158, 0, 917, 117, 1, 0, 0, 0, 918, 919, 5, 116, 0, 0, 919, 920, 3, 324, 162, 0, 920, 119, 1, 0, 0, 0, 921, 922, 5, 6, 0, 0, 922, 923, 5, 185, 0, 0, 923, 924, 3, 84, 42, 0, 924, 925, 5, 256, 0, 0, 925, 926, 5, 258, 0, 0, 926, 928, 3, 52, 26, 0, 927, 929, 3, 126, 63, 0, 928, 927, 1, 0, 0, 0, 928, 929, 1, 0, 0, 0, 929, 121, 1, 0, 0, 0, 930, 931, 5, 104, 0, 0, 931, 932, 5, 185, 0, 0, 932, 933, 3, 84, 42, 0, 933, 123, 1, 0, 0, 0, 934, 935, 5, 6, 0, 0, 935, 936, 5, 257, 0, 0, 936, 937, 3, 52, 26, 0, 937, 125, 1, 0, 0, 0, 938, 939, 5, 25, 0, 0, 939, 940, 5, 261, 0, 0, 940, 127, 1, 0, 0, 0, 941, 942, 5, 112, 0, 0, 942, 943, 5, 76, 0, 0, 943, 947, 3, 316, 158, 0, 944, 948, 3, 116, 58, 0, 945, 946, 5, 7, 0, 0, 946, 948, 3, 156, 78, 0, 947, 944, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 948, 129, 1, 0, 0, 0, 949, 950, 5, 112, 0, 0, 950, 951, 5, 192, 0, 0, 951, 952, 3, 316, 158, 0, 952, 953, 3, 118, 59, 0, 953, 131, 1, 0, 0, 0, 954, 958, 5, 112, 0, 0, 955, 959, 5, 166, 0, 0, 956, 957, 5, 166, 0, 0, 957, 959, 5, 232, 0, 0, 958, 955, 1, 0, 0, 0, 958, 956, 1, 0, 0, 0, 958, 959, 1, 0, 0, 0, 959, 960, 1, 0, 0, 0, 960, 962, 5, 157, 0, 0, 961, 963, 3, 322, 161, 0, 962, 961, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 964, 1, 0, 0, 0, 964, 965, 3, 316, 158, 0, 965, 966, 5, 7, 0, 0, 966, 969, 3, 304, 152, 0, 967, 968, 5, 240, 0, 0, 968, 970, 7, 17, 0, 0, 969, 967, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 133, 1, 0, 0, 0, 971, 972, 5, 104, 0, 0, 972, 974, 5, 239, 0, 0, 973, 975, 3, 322, 161, 0, 974, 973, 1, 0, 0, 0, 974, 975, 1, 0, 0, 0, 975, 976, 1, 0, 0, 0, 976, 977, 3, 316, 158, 0, 977, 135, 1, 0, 0, 0, 978, 980, 5, 104, 0, 0, 979, 981, 5, 166, 0, 0, 980, 979, 1, 0, 0, 0, 980, 981, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 984, 5, 74, 0, 0, 983, 985, 3, 322, 161, 0, 984, 983, 1, 0, 0, 0, 984, 985, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 987, 3, 316, 158, 0, 987, 137, 1, 0, 0, 0, 988, 989, 5, 104, 0, 0, 989, 991, 5, 192, 0, 0, 990, 992, 3, 322, 161, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 995, 3, 316, 158, 0, 994, 996, 7, 18, 0, 0, 995, 994, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 139, 1, 0, 0, 0, 997, 999, 5, 104, 0, 0, 998, 1000, 5, 166, 0, 0, 999, 998, 1, 0, 0, 0, 999, 1000, 1, 0, 0, 0, 1000, 1001, 1, 0, 0, 0, 1001, 1003, 5, 76, 0, 0, 1002, 1004, 3, 322, 161, 0, 1003, 1002, 1, 0, 0, 0, 1003, 1004, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1006, 3, 316, 158, 0, 1006, 141, 1, 0, 0, 0, 1007, 1011, 5, 104, 0, 0, 1008, 1012, 5, 166, 0, 0, 1009, 1010, 5, 166, 0, 0, 1010, 1012, 5, 232, 0, 0, 1011, 1008, 1, 0, 0, 0, 1011, 1009, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1015, 5, 157, 0, 0, 1014, 1016, 3, 322, 161, 0, 1015, 1014, 1, 0, 0, 0, 1015, 1016, 1, 0, 0, 0, 1016, 1017, 1, 0, 0, 0, 1017, 1018, 3, 316, 158, 0, 1018, 143, 1, 0, 0, 0, 1019, 1021, 5, 78, 0, 0, 1020, 1019, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1022, 1, 0, 0, 0, 1022, 1026, 3, 146, 73, 0, 1023, 1024, 5, 78, 0, 0, 1024, 1026, 3, 154, 77, 0, 1025, 1020, 1, 0, 0, 0, 1025, 1023, 1, 0, 0, 0, 1026, 145, 1, 0, 0, 0, 1027, 1028, 5, 80, 0, 0, 1028, 1029, 7, 19, 0, 0, 1029, 1038, 3, 316, 158, 0, 1030, 1032, 3, 148, 74, 0, 1031, 1030, 1, 0, 0, 0, 1031, 1032, 1, 0, 0, 0, 1032, 1034, 1, 0, 0, 0, 1033, 1035, 3, 52, 26, 0, 1034, 1033, 1, 0, 0, 0, 1034, 1035, 1, 0, 0, 0, 1035, 1036, 1, 0, 0, 0, 1036, 1039, 3, 156, 78, 0, 1037, 1039, 3, 150, 75, 0, 1038, 1031, 1, 0, 0, 0, 1038, 1037, 1, 0, 0, 0, 1039, 147, 1, 0, 0, 0, 1040, 1041, 5, 60, 0, 0, 1041, 1042, 3, 324, 162, 0, 1042, 149, 1, 0, 0, 0, 1043, 1044, 5, 72, 0, 0, 1044, 1049, 3, 152, 76, 0, 1045, 1046, 5, 326, 0, 0, 1046, 1048, 3, 152, 76, 0, 1047, 1045, 1, 0, 0, 0, 1048, 1051, 1, 0, 0, 0, 1049, 1047, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 151, 1, 0, 0, 0, 1051, 1049, 1, 0, 0, 0, 1052, 1053, 5, 322, 0, 0, 1053, 1058, 3, 344, 172, 0, 1054, 1055, 5, 326, 0, 0, 1055, 1057, 3, 344, 172, 0, 1056, 1054, 1, 0, 0, 0, 1057, 1060, 1, 0, 0, 0, 1058, 1056, 1, 0, 0, 0, 1058, 1059, 1, 0, 0, 0, 1059, 1061, 1, 0, 0, 0, 1060, 1058, 1, 0, 0, 0, 1061, 1062, 5, 323, 0, 0, 1062, 153, 1, 0, 0, 0, 1063, 1064, 5, 79, 0, 0, 1064, 1065, 5, 116, 0, 0, 1065, 1069, 5, 43, 0, 0, 1066, 1067, 3, 146, 73, 0, 1067, 1068, 5, 327, 0, 0, 1068, 1070, 1, 0, 0, 0, 1069, 1066, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1069, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 1073, 1, 0, 0, 0, 1073, 1074, 5, 44, 0, 0, 1074, 155, 1, 0, 0, 0, 1075, 1076, 6, 78, -1, 0, 1076, 1099, 3, 158, 79, 0, 1077, 1078, 3, 160, 80, 0, 1078, 1079, 3, 156, 78, 5, 1079, 1099, 1, 0, 0, 0, 1080, 1081, 5, 322, 0, 0, 1081, 1082, 3, 156, 78, 0, 1082, 1083, 5, 323, 0, 0, 1083, 1099, 1, 0, 0, 0, 1084, 1086, 3, 168, 84, 0, 1085, 1087, 3, 230, 115, 0, 1086, 1085, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1089, 1, 0, 0, 0, 1088, 1090, 3, 234, 117, 0, 1089, 1088, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1099, 1, 0, 0, 0, 1091, 1093, 3, 166, 83, 0, 1092, 1094, 3, 230, 115, 0, 1093, 1092, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1096, 1, 0, 0, 0, 1095, 1097, 3, 234, 117, 0, 1096, 1095, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 1099, 1, 0, 0, 0, 1098, 1075, 1, 0, 0, 0, 1098, 1077, 1, 0, 0, 0, 1098, 1080, 1, 0, 0, 0, 1098, 1084, 1, 0, 0, 0, 1098, 1091, 1, 0, 0, 0, 1099, 1114, 1, 0, 0, 0, 1100, 1101, 10, 3, 0, 0, 1101, 1103, 7, 20, 0, 0, 1102, 1104, 5, 8, 0, 0, 1103, 1102, 1, 0, 0, 0, 1103, 1104, 1, 0, 0, 0, 1104, 1105, 1, 0, 0, 0, 1105, 1107, 3, 156, 78, 0, 1106, 1108, 3, 230, 115, 0, 1107, 1106, 1, 0, 0, 0, 1107, 1108, 1, 0, 0, 0, 1108, 1110, 1, 0, 0, 0, 1109, 1111, 3, 234, 117, 0, 1110, 1109, 1, 0, 0, 0, 1110, 1111, 1, 0, 0, 0, 1111, 1113, 1, 0, 0, 0, 1112, 1100, 1, 0, 0, 0, 1113, 1116, 1, 0, 0, 0, 1114, 1112, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 157, 1, 0, 0, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1118, 5, 72, 0, 0, 1118, 1123, 3, 260, 130, 0, 1119, 1120, 5, 326, 0, 0, 1120, 1122, 3, 260, 130, 0, 1121, 1119, 1, 0, 0, 0, 1122, 1125, 1, 0, 0, 0, 1123, 1121, 1, 0, 0, 0, 1123, 1124, 1, 0, 0, 0, 1124, 159, 1, 0, 0, 0, 1125, 1123, 1, 0, 0, 0, 1126, 1127, 5, 70, 0, 0, 1127, 1132, 3, 162, 81, 0, 1128, 1129, 5, 326, 0, 0, 1129, 1131, 3, 162, 81, 0, 1130, 1128, 1, 0, 0, 0, 1131, 1134, 1, 0, 0, 0, 1132, 1130, 1, 0, 0, 0, 1132, 1133, 1, 0, 0, 0, 1133, 161, 1, 0, 0, 0, 1134, 1132, 1, 0, 0, 0, 1135, 1147, 3, 164, 82, 0, 1136, 1137, 5, 322, 0, 0, 1137, 1142, 3, 50, 25, 0, 1138, 1139, 5, 326, 0, 0, 1139, 1141, 3, 50, 25, 0, 1140, 1138, 1, 0, 0, 0, 1141, 1144, 1, 0, 0, 0, 1142, 1140, 1, 0, 0, 0, 1142, 1143, 1, 0, 0, 0, 1143, 1145, 1, 0, 0, 0, 1144, 1142, 1, 0, 0, 0, 1145, 1146, 5, 323, 0, 0, 1146, 1148, 1, 0, 0, 0, 1147, 1136, 1, 0, 0, 0, 1147, 1148, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 1150, 5, 7, 0, 0, 1150, 1151, 5, 322, 0, 0, 1151, 1152, 3, 156, 78, 0, 1152, 1153, 5, 323, 0, 0, 1153, 163, 1, 0, 0, 0, 1154, 1155, 3, 304, 152, 0, 1155, 165, 1, 0, 0, 0, 1156, 1157, 3, 168, 84, 0, 1157, 1159, 3, 174, 87, 0, 1158, 1160, 3, 204, 102, 0, 1159, 1158, 1, 0, 0, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1162, 1, 0, 0, 0, 1161, 1163, 3, 206, 103, 0, 1162, 1161, 1, 0, 0, 0, 1162, 1163, 1, 0, 0, 0, 1163, 1165, 1, 0, 0, 0, 1164, 1166, 3, 220, 110, 0, 1165, 1164, 1, 0, 0, 0, 1165, 1166, 1, 0, 0, 0, 1166, 1168, 1, 0, 0, 0, 1167, 1169, 3, 222, 111, 0, 1168, 1167, 1, 0, 0, 0, 1168, 1169, 1, 0, 0, 0, 1169, 1175, 1, 0, 0, 0, 1170, 1171, 3, 168, 84, 0, 1171, 1172, 3, 174, 87, 0, 1172, 1173, 3, 228, 114, 0, 1173, 1175, 1, 0, 0, 0, 1174, 1156, 1, 0, 0, 0, 1174, 1170, 1, 0, 0, 0, 1175, 167, 1, 0, 0, 0, 1176, 1178, 5, 4, 0, 0, 1177, 1179, 3, 352, 176, 0, 1178, 1177, 1, 0, 0, 0, 1178, 1179, 1, 0, 0, 0, 1179, 1189, 1, 0, 0, 0, 1180, 1190, 5, 333, 0, 0, 1181, 1186, 3, 170, 85, 0, 1182, 1183, 5, 326, 0, 0, 1183, 1185, 3, 170, 85, 0, 1184, 1182, 1, 0, 0, 0, 1185, 1188, 1, 0, 0, 0, 1186, 1184, 1, 0, 0, 0, 1186, 1187, 1, 0, 0, 0, 1187, 1190, 1, 0, 0, 0, 1188, 1186, 1, 0, 0, 0, 1189, 1180, 1, 0, 0, 0, 1189, 1181, 1, 0, 0, 0, 1190, 169, 1, 0, 0, 0, 1191, 1200, 3, 172, 86, 0, 1192, 1197, 3, 260, 130, 0, 1193, 1195, 5, 7, 0, 0, 1194, 1193, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1196, 1, 0, 0, 0, 1196, 1198, 3, 260, 130, 0, 1197, 1194, 1, 0, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1200, 1, 0, 0, 0, 1199, 1191, 1, 0, 0, 0, 1199, 1192, 1, 0, 0, 0, 1200, 171, 1, 0, 0, 0, 1201, 1202, 3, 270, 135, 0, 1202, 1203, 5, 59, 0, 0, 1203, 1204, 3, 226, 113, 0, 1204, 1205, 5, 7, 0, 0, 1205, 1206, 3, 306, 153, 0, 1206, 1214, 1, 0, 0, 0, 1207, 1208, 3, 270, 135, 0, 1208, 1209, 5, 59, 0, 0, 1209, 1210, 3, 296, 148, 0, 1210, 1211, 5, 7, 0, 0, 1211, 1212, 3, 306, 153, 0, 1212, 1214, 1, 0, 0, 0, 1213, 1201, 1, 0, 0, 0, 1213, 1207, 1, 0, 0, 0, 1214, 173, 1, 0, 0, 0, 1215, 1216, 5, 5, 0, 0, 1216, 1217, 3, 176, 88, 0, 1217, 175, 1, 0, 0, 0, 1218, 1219, 6, 88, -1, 0, 1219, 1224, 3, 178, 89, 0, 1220, 1221, 5, 326, 0, 0, 1221, 1223, 3, 178, 89, 0, 1222, 1220, 1, 0, 0, 0, 1223, 1226, 1, 0, 0, 0, 1224, 1222, 1, 0, 0, 0, 1224, 1225, 1, 0, 0, 0, 1225, 1230, 1, 0, 0, 0, 1226, 1224, 1, 0, 0, 0, 1227, 1230, 3, 188, 94, 0, 1228, 1230, 3, 190, 95, 0, 1229, 1218, 1, 0, 0, 0, 1229, 1227, 1, 0, 0, 0, 1229, 1228, 1, 0, 0, 0, 1230, 1252, 1, 0, 0, 0, 1231, 1232, 10, 3, 0, 0, 1232, 1233, 5, 46, 0, 0, 1233, 1234, 5, 45, 0, 0, 1234, 1251, 3, 176, 88, 4, 1235, 1237, 10, 4, 0, 0, 1236, 1238, 5, 54, 0, 0, 1237, 1236, 1, 0, 0, 0, 1237, 1238, 1, 0, 0, 0, 1238, 1240, 1, 0, 0, 0, 1239, 1241, 7, 21, 0, 0, 1240, 1239, 1, 0, 0, 0, 1240, 1241, 1, 0, 0, 0, 1241, 1243, 1, 0, 0, 0, 1242, 1244, 5, 47, 0, 0, 1243, 1242, 1, 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 1246, 5, 45, 0, 0, 1246, 1248, 3, 176, 88, 0, 1247, 1249, 3, 202, 101, 0, 1248, 1247, 1, 0, 0, 0, 1248, 1249, 1, 0, 0, 0, 1249, 1251, 1, 0, 0, 0, 1250, 1231, 1, 0, 0, 0, 1250, 1235, 1, 0, 0, 0, 1251, 1254, 1, 0, 0, 0, 1252, 1250, 1, 0, 0, 0, 1252, 1253, 1, 0, 0, 0, 1253, 177, 1, 0, 0, 0, 1254, 1252, 1, 0, 0, 0, 1255, 1257, 3, 180, 90, 0, 1256, 1258, 3, 294, 147, 0, 1257, 1256, 1, 0, 0, 0, 1257, 1258, 1, 0, 0, 0, 1258, 179, 1, 0, 0, 0, 1259, 1261, 5, 74, 0, 0, 1260, 1259, 1, 0, 0, 0, 1260, 1261, 1, 0, 0, 0, 1261, 1262, 1, 0, 0, 0, 1262, 1264, 3, 182, 91, 0, 1263, 1265, 3, 184, 92, 0, 1264, 1263, 1, 0, 0, 0, 1264, 1265, 1, 0, 0, 0, 1265, 1270, 1, 0, 0, 0, 1266, 1268, 5, 7, 0, 0, 1267, 1266, 1, 0, 0, 0, 1267, 1268, 1, 0, 0, 0, 1268, 1269, 1, 0, 0, 0, 1269, 1271, 3, 276, 138, 0, 1270, 1267, 1, 0, 0, 0, 1270, 1271, 1, 0, 0, 0, 1271, 1301, 1, 0, 0, 0, 1272, 1273, 5, 57, 0, 0, 1273, 1274, 5, 74, 0, 0, 1274, 1275, 5, 322, 0, 0, 1275, 1276, 3, 272, 136, 0, 1276, 1277, 5, 322, 0, 0, 1277, 1282, 3, 260, 130, 0, 1278, 1279, 5, 326, 0, 0, 1279, 1281, 3, 260, 130, 0, 1280, 1278, 1, 0, 0, 0, 1281, 1284, 1, 0, 0, 0, 1282, 1280, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1285, 1, 0, 0, 0, 1284, 1282, 1, 0, 0, 0, 1285, 1286, 5, 323, 0, 0, 1286, 1287, 5, 323, 0, 0, 1287, 1301, 1, 0, 0, 0, 1288, 1290, 5, 57, 0, 0, 1289, 1288, 1, 0, 0, 0, 1289, 1290, 1, 0, 0, 0, 1290, 1291, 1, 0, 0, 0, 1291, 1292, 5, 322, 0, 0, 1292, 1293, 3, 156, 78, 0, 1293, 1294, 5, 323, 0, 0, 1294, 1301, 1, 0, 0, 0, 1295, 1296, 5, 227, 0, 0, 1296, 1297, 5, 322, 0, 0, 1297, 1298, 3, 260, 130, 0, 1298, 1299, 5, 323, 0, 0, 1299, 1301, 1, 0, 0, 0, 1300, 1260, 1, 0, 0, 0, 1300, 1272, 1, 0, 0, 0, 1300, 1289, 1, 0, 0, 0, 1300, 1295, 1, 0, 0, 0, 1301, 181, 1, 0, 0, 0, 1302, 1303, 3, 316, 158, 0, 1303, 183, 1, 0, 0, 0, 1304, 1305, 5, 37, 0, 0, 1305, 1306, 5, 260, 0, 0, 1306, 1307, 5, 7, 0, 0, 1307, 1308, 5, 136, 0, 0, 1308, 1309, 3, 186, 93, 0, 1309, 185, 1, 0, 0, 0, 1310, 1311, 3, 260, 130, 0, 1311, 187, 1, 0, 0, 0, 1312, 1313, 5, 322, 0, 0, 1313, 1314, 3, 150, 75, 0, 1314, 1315, 5, 323, 0, 0, 1315, 1316, 3, 294, 147, 0, 1316, 189, 1, 0, 0, 0, 1317, 1318, 5, 74, 0, 0, 1318, 1319, 5, 322, 0, 0, 1319, 1320, 3, 192, 96, 0, 1320, 1321, 5, 323, 0, 0, 1321, 191, 1, 0, 0, 0, 1322, 1323, 3, 194, 97, 0, 1323, 1324, 5, 322, 0, 0, 1324, 1329, 3, 196, 98, 0, 1325, 1326, 5, 326, 0, 0, 1326, 1328, 3, 196, 98, 0, 1327, 1325, 1, 0, 0, 0, 1328, 1331, 1, 0, 0, 0, 1329, 1327, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1332, 1, 0, 0, 0, 1331, 1329, 1, 0, 0, 0, 1332, 1333, 5, 323, 0, 0, 1333, 193, 1, 0, 0, 0, 1334, 1335, 7, 22, 0, 0, 1335, 195, 1, 0, 0, 0, 1336, 1337, 5, 74, 0, 0, 1337, 1352, 3, 218, 109, 0, 1338, 1352, 3, 200, 100, 0, 1339, 1352, 3, 258, 129, 0, 1340, 1341, 5, 118, 0, 0, 1341, 1342, 5, 349, 0, 0, 1342, 1343, 5, 74, 0, 0, 1343, 1352, 3, 218, 109, 0, 1344, 1345, 5, 269, 0, 0, 1345, 1346, 5, 349, 0, 0, 1346, 1352, 3, 200, 100, 0, 1347, 1348, 3, 198, 99, 0, 1348, 1349, 5, 349, 0, 0, 1349, 1350, 3, 258, 129, 0, 1350, 1352, 1, 0, 0, 0, 1351, 1336, 1, 0, 0, 0, 1351, 1338, 1, 0, 0, 0, 1351, 1339, 1, 0, 0, 0, 1351, 1340, 1, 0, 0, 0, 1351, 1344, 1, 0, 0, 0, 1351, 1347, 1, 0, 0, 0, 1352, 197, 1, 0, 0, 0, 1353, 1354, 7, 23, 0, 0, 1354, 199, 1, 0, 0, 0, 1355, 1356, 5, 268, 0, 0, 1356, 1357, 5, 322, 0, 0, 1357, 1358, 3, 316, 158, 0, 1358, 1359, 5, 323, 0, 0, 1359, 201, 1, 0, 0, 0, 1360, 1361, 5, 55, 0, 0, 1361, 1375, 3, 262, 131, 0, 1362, 1363, 5, 143, 0, 0, 1363, 1364, 5, 322, 0, 0, 1364, 1369, 3, 316, 158, 0, 1365, 1366, 5, 326, 0, 0, 1366, 1368, 3, 316, 158, 0, 1367, 1365, 1, 0, 0, 0, 1368, 1371, 1, 0, 0, 0, 1369, 1367, 1, 0, 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 1372, 1, 0, 0, 0, 1371, 1369, 1, 0, 0, 0, 1372, 1373, 5, 323, 0, 0, 1373, 1375, 1, 0, 0, 0, 1374, 1360, 1, 0, 0, 0, 1374, 1362, 1, 0, 0, 0, 1375, 203, 1, 0, 0, 0, 1376, 1377, 5, 11, 0, 0, 1377, 1378, 3, 262, 131, 0, 1378, 205, 1, 0, 0, 0, 1379, 1380, 5, 12, 0, 0, 1380, 1381, 5, 13, 0, 0, 1381, 1386, 3, 208, 104, 0, 1382, 1383, 5, 326, 0, 0, 1383, 1385, 3, 208, 104, 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, 207, 1, 0, 0, 0, 1388, 1386, 1, 0, 0, 0, 1389, 1429, 3, 260, 130, 0, 1390, 1429, 3, 214, 107, 0, 1391, 1392, 5, 322, 0, 0, 1392, 1429, 5, 323, 0, 0, 1393, 1394, 5, 322, 0, 0, 1394, 1399, 3, 260, 130, 0, 1395, 1396, 5, 326, 0, 0, 1396, 1398, 3, 260, 130, 0, 1397, 1395, 1, 0, 0, 0, 1398, 1401, 1, 0, 0, 0, 1399, 1397, 1, 0, 0, 0, 1399, 1400, 1, 0, 0, 0, 1400, 1402, 1, 0, 0, 0, 1401, 1399, 1, 0, 0, 0, 1402, 1403, 5, 323, 0, 0, 1403, 1429, 1, 0, 0, 0, 1404, 1405, 3, 212, 106, 0, 1405, 1406, 5, 322, 0, 0, 1406, 1411, 3, 260, 130, 0, 1407, 1408, 5, 326, 0, 0, 1408, 1410, 3, 260, 130, 0, 1409, 1407, 1, 0, 0, 0, 1410, 1413, 1, 0, 0, 0, 1411, 1409, 1, 0, 0, 0, 1411, 1412, 1, 0, 0, 0, 1412, 1414, 1, 0, 0, 0, 1413, 1411, 1, 0, 0, 0, 1414, 1415, 5, 323, 0, 0, 1415, 1429, 1, 0, 0, 0, 1416, 1417, 3, 210, 105, 0, 1417, 1418, 5, 322, 0, 0, 1418, 1423, 3, 208, 104, 0, 1419, 1420, 5, 326, 0, 0, 1420, 1422, 3, 208, 104, 0, 1421, 1419, 1, 0, 0, 0, 1422, 1425, 1, 0, 0, 0, 1423, 1421, 1, 0, 0, 0, 1423, 1424, 1, 0, 0, 0, 1424, 1426, 1, 0, 0, 0, 1425, 1423, 1, 0, 0, 0, 1426, 1427, 5, 323, 0, 0, 1427, 1429, 1, 0, 0, 0, 1428, 1389, 1, 0, 0, 0, 1428, 1390, 1, 0, 0, 0, 1428, 1391, 1, 0, 0, 0, 1428, 1393, 1, 0, 0, 0, 1428, 1404, 1, 0, 0, 0, 1428, 1416, 1, 0, 0, 0, 1429, 209, 1, 0, 0, 0, 1430, 1431, 5, 14, 0, 0, 1431, 1432, 5, 15, 0, 0, 1432, 211, 1, 0, 0, 0, 1433, 1434, 7, 24, 0, 0, 1434, 213, 1, 0, 0, 0, 1435, 1436, 3, 216, 108, 0, 1436, 1437, 5, 322, 0, 0, 1437, 1438, 3, 218, 109, 0, 1438, 1439, 5, 326, 0, 0, 1439, 1440, 3, 258, 129, 0, 1440, 1441, 5, 323, 0, 0, 1441, 215, 1, 0, 0, 0, 1442, 1443, 7, 25, 0, 0, 1443, 217, 1, 0, 0, 0, 1444, 1445, 3, 316, 158, 0, 1445, 219, 1, 0, 0, 0, 1446, 1447, 5, 19, 0, 0, 1447, 1448, 3, 262, 131, 0, 1448, 221, 1, 0, 0, 0, 1449, 1450, 5, 58, 0, 0, 1450, 1455, 3, 224, 112, 0, 1451, 1452, 5, 326, 0, 0, 1452, 1454, 3, 224, 112, 0, 1453, 1451, 1, 0, 0, 0, 1454, 1457, 1, 0, 0, 0, 1455, 1453, 1, 0, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 223, 1, 0, 0, 0, 1457, 1455, 1, 0, 0, 0, 1458, 1459, 3, 296, 148, 0, 1459, 1460, 5, 7, 0, 0, 1460, 1461, 3, 226, 113, 0, 1461, 225, 1, 0, 0, 0, 1462, 1464, 3, 296, 148, 0, 1463, 1462, 1, 0, 0, 0, 1463, 1464, 1, 0, 0, 0, 1464, 1465, 1, 0, 0, 0, 1465, 1467, 5, 322, 0, 0, 1466, 1468, 3, 236, 118, 0, 1467, 1466, 1, 0, 0, 0, 1467, 1468, 1, 0, 0, 0, 1468, 1470, 1, 0, 0, 0, 1469, 1471, 3, 230, 115, 0, 1470, 1469, 1, 0, 0, 0, 1470, 1471, 1, 0, 0, 0, 1471, 1473, 1, 0, 0, 0, 1472, 1474, 3, 252, 126, 0, 1473, 1472, 1, 0, 0, 0, 1473, 1474, 1, 0, 0, 0, 1474, 1475, 1, 0, 0, 0, 1475, 1476, 5, 323, 0, 0, 1476, 227, 1, 0, 0, 0, 1477, 1478, 5, 275, 0, 0, 1478, 1480, 5, 322, 0, 0, 1479, 1481, 3, 236, 118, 0, 1480, 1479, 1, 0, 0, 0, 1480, 1481, 1, 0, 0, 0, 1481, 1483, 1, 0, 0, 0, 1482, 1484, 3, 230, 115, 0, 1483, 1482, 1, 0, 0, 0, 1483, 1484, 1, 0, 0, 0, 1484, 1486, 1, 0, 0, 0, 1485, 1487, 3, 240, 120, 0, 1486, 1485, 1, 0, 0, 0, 1486, 1487, 1, 0, 0, 0, 1487, 1489, 1, 0, 0, 0, 1488, 1490, 3, 246, 123, 0, 1489, 1488, 1, 0, 0, 0, 1489, 1490, 1, 0, 0, 0, 1490, 1492, 1, 0, 0, 0, 1491, 1493, 3, 248, 124, 0, 1492, 1491, 1, 0, 0, 0, 1492, 1493, 1, 0, 0, 0, 1493, 1495, 1, 0, 0, 0, 1494, 1496, 3, 242, 121, 0, 1495, 1494, 1, 0, 0, 0, 1495, 1496, 1, 0, 0, 0, 1496, 1497, 1, 0, 0, 0, 1497, 1498, 3, 250, 125, 0, 1498, 1503, 5, 323, 0, 0, 1499, 1501, 5, 7, 0, 0, 1500, 1499, 1, 0, 0, 0, 1500, 1501, 1, 0, 0, 0, 1501, 1502, 1, 0, 0, 0, 1502, 1504, 3, 306, 153, 0, 1503, 1500, 1, 0, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 229, 1, 0, 0, 0, 1505, 1506, 5, 18, 0, 0, 1506, 1507, 5, 13, 0, 0, 1507, 1512, 3, 232, 116, 0, 1508, 1509, 5, 326, 0, 0, 1509, 1511, 3, 232, 116, 0, 1510, 1508, 1, 0, 0, 0, 1511, 1514, 1, 0, 0, 0, 1512, 1510, 1, 0, 0, 0, 1512, 1513, 1, 0, 0, 0, 1513, 231, 1, 0, 0, 0, 1514, 1512, 1, 0, 0, 0, 1515, 1517, 3, 260, 130, 0, 1516, 1518, 7, 26, 0, 0, 1517, 1516, 1, 0, 0, 0, 1517, 1518, 1, 0, 0, 0, 1518, 1521, 1, 0, 0, 0, 1519, 1520, 5, 34, 0, 0, 1520, 1522, 7, 27, 0, 0, 1521, 1519, 1, 0, 0, 0, 1521, 1522, 1, 0, 0, 0, 1522, 233, 1, 0, 0, 0, 1523, 1526, 5, 20, 0, 0, 1524, 1527, 5, 8, 0, 0, 1525, 1527, 3, 260, 130, 0, 1526, 1524, 1, 0, 0, 0, 1526, 1525, 1, 0, 0, 0, 1527, 235, 1, 0, 0, 0, 1528, 1529, 5, 60, 0, 0, 1529, 1530, 5, 13, 0, 0, 1530, 1535, 3, 260, 130, 0, 1531, 1532, 5, 326, 0, 0, 1532, 1534, 3, 260, 130, 0, 1533, 1531, 1, 0, 0, 0, 1534, 1537, 1, 0, 0, 0, 1535, 1533, 1, 0, 0, 0, 1535, 1536, 1, 0, 0, 0, 1536, 237, 1, 0, 0, 0, 1537, 1535, 1, 0, 0, 0, 1538, 1555, 5, 333, 0, 0, 1539, 1555, 5, 336, 0, 0, 1540, 1555, 5, 341, 0, 0, 1541, 1542, 5, 324, 0, 0, 1542, 1543, 5, 344, 0, 0, 1543, 1544, 5, 326, 0, 0, 1544, 1545, 5, 344, 0, 0, 1545, 1555, 5, 325, 0, 0, 1546, 1547, 5, 324, 0, 0, 1547, 1548, 5, 344, 0, 0, 1548, 1549, 5, 326, 0, 0, 1549, 1555, 5, 325, 0, 0, 1550, 1551, 5, 324, 0, 0, 1551, 1552, 5, 326, 0, 0, 1552, 1553, 5, 344, 0, 0, 1553, 1555, 5, 325, 0, 0, 1554, 1538, 1, 0, 0, 0, 1554, 1539, 1, 0, 0, 0, 1554, 1540, 1, 0, 0, 0, 1554, 1541, 1, 0, 0, 0, 1554, 1546, 1, 0, 0, 0, 1554, 1550, 1, 0, 0, 0, 1555, 239, 1, 0, 0, 0, 1556, 1557, 5, 276, 0, 0, 1557, 1562, 3, 170, 85, 0, 1558, 1559, 5, 326, 0, 0, 1559, 1561, 3, 170, 85, 0, 1560, 1558, 1, 0, 0, 0, 1561, 1564, 1, 0, 0, 0, 1562, 1560, 1, 0, 0, 0, 1562, 1563, 1, 0, 0, 0, 1563, 241, 1, 0, 0, 0, 1564, 1562, 1, 0, 0, 0, 1565, 1566, 5, 277, 0, 0, 1566, 1568, 5, 322, 0, 0, 1567, 1569, 3, 244, 122, 0, 1568, 1567, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 1568, 1, 0, 0, 0, 1570, 1571, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 1574, 5, 323, 0, 0, 1573, 1575, 3, 256, 128, 0, 1574, 1573, 1, 0, 0, 0, 1574, 1575, 1, 0, 0, 0, 1575, 243, 1, 0, 0, 0, 1576, 1578, 3, 308, 154, 0, 1577, 1579, 3, 238, 119, 0, 1578, 1577, 1, 0, 0, 0, 1578, 1579, 1, 0, 0, 0, 1579, 245, 1, 0, 0, 0, 1580, 1581, 5, 8, 0, 0, 1581, 1582, 5, 62, 0, 0, 1582, 1583, 5, 279, 0, 0, 1583, 1589, 5, 228, 0, 0, 1584, 1585, 5, 278, 0, 0, 1585, 1586, 5, 308, 0, 0, 1586, 1587, 5, 279, 0, 0, 1587, 1589, 5, 228, 0, 0, 1588, 1580, 1, 0, 0, 0, 1588, 1584, 1, 0, 0, 0, 1589, 247, 1, 0, 0, 0, 1590, 1591, 5, 68, 0, 0, 1591, 1592, 5, 228, 0, 0, 1592, 1593, 5, 280, 0, 0, 1593, 1594, 5, 281, 0, 0, 1594, 1595, 5, 69, 0, 0, 1595, 1615, 5, 308, 0, 0, 1596, 1597, 5, 68, 0, 0, 1597, 1598, 5, 228, 0, 0, 1598, 1599, 5, 280, 0, 0, 1599, 1600, 5, 109, 0, 0, 1600, 1601, 5, 229, 0, 0, 1601, 1615, 5, 308, 0, 0, 1602, 1603, 5, 68, 0, 0, 1603, 1604, 5, 228, 0, 0, 1604, 1605, 5, 280, 0, 0, 1605, 1606, 5, 109, 0, 0, 1606, 1607, 5, 69, 0, 0, 1607, 1615, 3, 308, 154, 0, 1608, 1609, 5, 68, 0, 0, 1609, 1610, 5, 228, 0, 0, 1610, 1611, 5, 280, 0, 0, 1611, 1612, 5, 109, 0, 0, 1612, 1613, 5, 67, 0, 0, 1613, 1615, 3, 308, 154, 0, 1614, 1590, 1, 0, 0, 0, 1614, 1596, 1, 0, 0, 0, 1614, 1602, 1, 0, 0, 0, 1614, 1608, 1, 0, 0, 0, 1615, 249, 1, 0, 0, 0, 1616, 1617, 5, 282, 0, 0, 1617, 1622, 3, 170, 85, 0, 1618, 1619, 5, 326, 0, 0, 1619, 1621, 3, 170, 85, 0, 1620, 1618, 1, 0, 0, 0, 1621, 1624, 1, 0, 0, 0, 1622, 1620, 1, 0, 0, 0, 1622, 1623, 1, 0, 0, 0, 1623, 251, 1, 0, 0, 0, 1624, 1622, 1, 0, 0, 0, 1625, 1626, 5, 61, 0, 0, 1626, 1627, 5, 28, 0, 0, 1627, 1628, 3, 258, 129, 0, 1628, 1629, 3, 254, 127, 0, 1629, 1635, 1, 0, 0, 0, 1630, 1631, 5, 62, 0, 0, 1631, 1632, 5, 28, 0, 0, 1632, 1633, 5, 344, 0, 0, 1633, 1635, 3, 254, 127, 0, 1634, 1625, 1, 0, 0, 0, 1634, 1630, 1, 0, 0, 0, 1635, 253, 1, 0, 0, 0, 1636, 1637, 5, 64, 0, 0, 1637, 1638, 5, 23, 0, 0, 1638, 1639, 5, 66, 0, 0, 1639, 1640, 5, 308, 0, 0, 1640, 255, 1, 0, 0, 0, 1641, 1642, 5, 230, 0, 0, 1642, 1643, 3, 258, 129, 0, 1643, 257, 1, 0, 0, 0, 1644, 1645, 5, 38, 0, 0, 1645, 1646, 5, 343, 0, 0, 1646, 1647, 5, 347, 0, 0, 1647, 259, 1, 0, 0, 0, 1648, 1649, 3, 262, 131, 0, 1649, 261, 1, 0, 0, 0, 1650, 1651, 6, 131, -1, 0, 1651, 1652, 5, 25, 0, 0, 1652, 1663, 3, 262, 131, 5, 1653, 1654, 5, 27, 0, 0, 1654, 1655, 5, 322, 0, 0, 1655, 1656, 3, 156, 78, 0, 1656, 1657, 5, 323, 0, 0, 1657, 1663, 1, 0, 0, 0, 1658, 1660, 3, 268, 134, 0, 1659, 1661, 3, 264, 132, 0, 1660, 1659, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1663, 1, 0, 0, 0, 1662, 1650, 1, 0, 0, 0, 1662, 1653, 1, 0, 0, 0, 1662, 1658, 1, 0, 0, 0, 1663, 1672, 1, 0, 0, 0, 1664, 1665, 10, 2, 0, 0, 1665, 1666, 5, 23, 0, 0, 1666, 1671, 3, 262, 131, 3, 1667, 1668, 10, 1, 0, 0, 1668, 1669, 5, 22, 0, 0, 1669, 1671, 3, 262, 131, 2, 1670, 1664, 1, 0, 0, 0, 1670, 1667, 1, 0, 0, 0, 1671, 1674, 1, 0, 0, 0, 1672, 1670, 1, 0, 0, 0, 1672, 1673, 1, 0, 0, 0, 1673, 263, 1, 0, 0, 0, 1674, 1672, 1, 0, 0, 0, 1675, 1677, 5, 25, 0, 0, 1676, 1675, 1, 0, 0, 0, 1676, 1677, 1, 0, 0, 0, 1677, 1678, 1, 0, 0, 0, 1678, 1679, 5, 28, 0, 0, 1679, 1680, 3, 268, 134, 0, 1680, 1681, 5, 23, 0, 0, 1681, 1682, 3, 268, 134, 0, 1682, 1759, 1, 0, 0, 0, 1683, 1685, 5, 25, 0, 0, 1684, 1683, 1, 0, 0, 0, 1684, 1685, 1, 0, 0, 0, 1685, 1686, 1, 0, 0, 0, 1686, 1687, 5, 24, 0, 0, 1687, 1688, 5, 322, 0, 0, 1688, 1693, 3, 260, 130, 0, 1689, 1690, 5, 326, 0, 0, 1690, 1692, 3, 260, 130, 0, 1691, 1689, 1, 0, 0, 0, 1692, 1695, 1, 0, 0, 0, 1693, 1691, 1, 0, 0, 0, 1693, 1694, 1, 0, 0, 0, 1694, 1696, 1, 0, 0, 0, 1695, 1693, 1, 0, 0, 0, 1696, 1697, 5, 323, 0, 0, 1697, 1759, 1, 0, 0, 0, 1698, 1700, 5, 25, 0, 0, 1699, 1698, 1, 0, 0, 0, 1699, 1700, 1, 0, 0, 0, 1700, 1701, 1, 0, 0, 0, 1701, 1702, 5, 24, 0, 0, 1702, 1703, 5, 322, 0, 0, 1703, 1704, 3, 156, 78, 0, 1704, 1705, 5, 323, 0, 0, 1705, 1759, 1, 0, 0, 0, 1706, 1707, 5, 27, 0, 0, 1707, 1708, 5, 322, 0, 0, 1708, 1709, 3, 156, 78, 0, 1709, 1710, 5, 323, 0, 0, 1710, 1759, 1, 0, 0, 0, 1711, 1713, 5, 25, 0, 0, 1712, 1711, 1, 0, 0, 0, 1712, 1713, 1, 0, 0, 0, 1713, 1714, 1, 0, 0, 0, 1714, 1715, 5, 30, 0, 0, 1715, 1759, 3, 268, 134, 0, 1716, 1718, 5, 25, 0, 0, 1717, 1716, 1, 0, 0, 0, 1717, 1718, 1, 0, 0, 0, 1718, 1719, 1, 0, 0, 0, 1719, 1720, 5, 29, 0, 0, 1720, 1734, 7, 28, 0, 0, 1721, 1722, 5, 322, 0, 0, 1722, 1735, 5, 323, 0, 0, 1723, 1724, 5, 322, 0, 0, 1724, 1729, 3, 260, 130, 0, 1725, 1726, 5, 326, 0, 0, 1726, 1728, 3, 260, 130, 0, 1727, 1725, 1, 0, 0, 0, 1728, 1731, 1, 0, 0, 0, 1729, 1727, 1, 0, 0, 0, 1729, 1730, 1, 0, 0, 0, 1730, 1732, 1, 0, 0, 0, 1731, 1729, 1, 0, 0, 0, 1732, 1733, 5, 323, 0, 0, 1733, 1735, 1, 0, 0, 0, 1734, 1721, 1, 0, 0, 0, 1734, 1723, 1, 0, 0, 0, 1735, 1759, 1, 0, 0, 0, 1736, 1738, 5, 25, 0, 0, 1737, 1736, 1, 0, 0, 0, 1737, 1738, 1, 0, 0, 0, 1738, 1739, 1, 0, 0, 0, 1739, 1740, 5, 29, 0, 0, 1740, 1759, 3, 268, 134, 0, 1741, 1743, 5, 31, 0, 0, 1742, 1744, 5, 25, 0, 0, 1743, 1742, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1745, 1, 0, 0, 0, 1745, 1759, 5, 309, 0, 0, 1746, 1748, 5, 31, 0, 0, 1747, 1749, 5, 25, 0, 0, 1748, 1747, 1, 0, 0, 0, 1748, 1749, 1, 0, 0, 0, 1749, 1750, 1, 0, 0, 0, 1750, 1759, 7, 29, 0, 0, 1751, 1753, 5, 31, 0, 0, 1752, 1754, 5, 25, 0, 0, 1753, 1752, 1, 0, 0, 0, 1753, 1754, 1, 0, 0, 0, 1754, 1755, 1, 0, 0, 0, 1755, 1756, 5, 10, 0, 0, 1756, 1757, 5, 5, 0, 0, 1757, 1759, 3, 268, 134, 0, 1758, 1676, 1, 0, 0, 0, 1758, 1684, 1, 0, 0, 0, 1758, 1699, 1, 0, 0, 0, 1758, 1706, 1, 0, 0, 0, 1758, 1712, 1, 0, 0, 0, 1758, 1717, 1, 0, 0, 0, 1758, 1737, 1, 0, 0, 0, 1758, 1741, 1, 0, 0, 0, 1758, 1746, 1, 0, 0, 0, 1758, 1751, 1, 0, 0, 0, 1759, 265, 1, 0, 0, 0, 1760, 1762, 5, 25, 0, 0, 1761, 1760, 1, 0, 0, 0, 1761, 1762, 1, 0, 0, 0, 1762, 1763, 1, 0, 0, 0, 1763, 1764, 5, 29, 0, 0, 1764, 1778, 7, 28, 0, 0, 1765, 1766, 5, 322, 0, 0, 1766, 1779, 5, 323, 0, 0, 1767, 1768, 5, 322, 0, 0, 1768, 1773, 3, 260, 130, 0, 1769, 1770, 5, 326, 0, 0, 1770, 1772, 3, 260, 130, 0, 1771, 1769, 1, 0, 0, 0, 1772, 1775, 1, 0, 0, 0, 1773, 1771, 1, 0, 0, 0, 1773, 1774, 1, 0, 0, 0, 1774, 1776, 1, 0, 0, 0, 1775, 1773, 1, 0, 0, 0, 1776, 1777, 5, 323, 0, 0, 1777, 1779, 1, 0, 0, 0, 1778, 1765, 1, 0, 0, 0, 1778, 1767, 1, 0, 0, 0, 1779, 1786, 1, 0, 0, 0, 1780, 1782, 5, 25, 0, 0, 1781, 1780, 1, 0, 0, 0, 1781, 1782, 1, 0, 0, 0, 1782, 1783, 1, 0, 0, 0, 1783, 1784, 5, 29, 0, 0, 1784, 1786, 3, 268, 134, 0, 1785, 1761, 1, 0, 0, 0, 1785, 1781, 1, 0, 0, 0, 1786, 267, 1, 0, 0, 0, 1787, 1788, 6, 134, -1, 0, 1788, 1792, 3, 270, 135, 0, 1789, 1790, 7, 30, 0, 0, 1790, 1792, 3, 268, 134, 7, 1791, 1787, 1, 0, 0, 0, 1791, 1789, 1, 0, 0, 0, 1792, 1814, 1, 0, 0, 0, 1793, 1794, 10, 6, 0, 0, 1794, 1795, 7, 31, 0, 0, 1795, 1813, 3, 268, 134, 7, 1796, 1797, 10, 5, 0, 0, 1797, 1798, 7, 32, 0, 0, 1798, 1813, 3, 268, 134, 6, 1799, 1800, 10, 4, 0, 0, 1800, 1801, 5, 317, 0, 0, 1801, 1813, 3, 268, 134, 5, 1802, 1803, 10, 3, 0, 0, 1803, 1804, 5, 318, 0, 0, 1804, 1813, 3, 268, 134, 4, 1805, 1806, 10, 2, 0, 0, 1806, 1807, 5, 316, 0, 0, 1807, 1813, 3, 268, 134, 3, 1808, 1809, 10, 1, 0, 0, 1809, 1810, 3, 334, 167, 0, 1810, 1811, 3, 268, 134, 2, 1811, 1813, 1, 0, 0, 0, 1812, 1793, 1, 0, 0, 0, 1812, 1796, 1, 0, 0, 0, 1812, 1799, 1, 0, 0, 0, 1812, 1802, 1, 0, 0, 0, 1812, 1805, 1, 0, 0, 0, 1812, 1808, 1, 0, 0, 0, 1813, 1816, 1, 0, 0, 0, 1814, 1812, 1, 0, 0, 0, 1814, 1815, 1, 0, 0, 0, 1815, 269, 1, 0, 0, 0, 1816, 1814, 1, 0, 0, 0, 1817, 1818, 6, 135, -1, 0, 1818, 1820, 5, 39, 0, 0, 1819, 1821, 3, 312, 156, 0, 1820, 1819, 1, 0, 0, 0, 1821, 1822, 1, 0, 0, 0, 1822, 1820, 1, 0, 0, 0, 1822, 1823, 1, 0, 0, 0, 1823, 1826, 1, 0, 0, 0, 1824, 1825, 5, 42, 0, 0, 1825, 1827, 3, 260, 130, 0, 1826, 1824, 1, 0, 0, 0, 1826, 1827, 1, 0, 0, 0, 1827, 1828, 1, 0, 0, 0, 1828, 1829, 5, 44, 0, 0, 1829, 1909, 1, 0, 0, 0, 1830, 1831, 5, 39, 0, 0, 1831, 1833, 3, 260, 130, 0, 1832, 1834, 3, 312, 156, 0, 1833, 1832, 1, 0, 0, 0, 1834, 1835, 1, 0, 0, 0, 1835, 1833, 1, 0, 0, 0, 1835, 1836, 1, 0, 0, 0, 1836, 1839, 1, 0, 0, 0, 1837, 1838, 5, 42, 0, 0, 1838, 1840, 3, 260, 130, 0, 1839, 1837, 1, 0, 0, 0, 1839, 1840, 1, 0, 0, 0, 1840, 1841, 1, 0, 0, 0, 1841, 1842, 5, 44, 0, 0, 1842, 1909, 1, 0, 0, 0, 1843, 1844, 5, 94, 0, 0, 1844, 1845, 5, 322, 0, 0, 1845, 1846, 3, 260, 130, 0, 1846, 1847, 5, 7, 0, 0, 1847, 1848, 3, 54, 27, 0, 1848, 1849, 5, 323, 0, 0, 1849, 1909, 1, 0, 0, 0, 1850, 1851, 5, 67, 0, 0, 1851, 1852, 5, 322, 0, 0, 1852, 1855, 3, 260, 130, 0, 1853, 1854, 5, 124, 0, 0, 1854, 1856, 5, 34, 0, 0, 1855, 1853, 1, 0, 0, 0, 1855, 1856, 1, 0, 0, 0, 1856, 1857, 1, 0, 0, 0, 1857, 1858, 5, 323, 0, 0, 1858, 1909, 1, 0, 0, 0, 1859, 1860, 5, 69, 0, 0, 1860, 1861, 5, 322, 0, 0, 1861, 1864, 3, 260, 130, 0, 1862, 1863, 5, 124, 0, 0, 1863, 1865, 5, 34, 0, 0, 1864, 1862, 1, 0, 0, 0, 1864, 1865, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1867, 5, 323, 0, 0, 1867, 1909, 1, 0, 0, 0, 1868, 1869, 5, 129, 0, 0, 1869, 1870, 5, 322, 0, 0, 1870, 1871, 3, 268, 134, 0, 1871, 1872, 5, 24, 0, 0, 1872, 1873, 3, 268, 134, 0, 1873, 1874, 5, 323, 0, 0, 1874, 1909, 1, 0, 0, 0, 1875, 1909, 3, 344, 172, 0, 1876, 1909, 5, 333, 0, 0, 1877, 1878, 3, 316, 158, 0, 1878, 1879, 5, 319, 0, 0, 1879, 1880, 5, 333, 0, 0, 1880, 1909, 1, 0, 0, 0, 1881, 1882, 5, 322, 0, 0, 1882, 1883, 3, 156, 78, 0, 1883, 1884, 5, 323, 0, 0, 1884, 1909, 1, 0, 0, 0, 1885, 1886, 3, 272, 136, 0, 1886, 1898, 5, 322, 0, 0, 1887, 1889, 3, 352, 176, 0, 1888, 1887, 1, 0, 0, 0, 1888, 1889, 1, 0, 0, 0, 1889, 1890, 1, 0, 0, 0, 1890, 1895, 3, 260, 130, 0, 1891, 1892, 5, 326, 0, 0, 1892, 1894, 3, 260, 130, 0, 1893, 1891, 1, 0, 0, 0, 1894, 1897, 1, 0, 0, 0, 1895, 1893, 1, 0, 0, 0, 1895, 1896, 1, 0, 0, 0, 1896, 1899, 1, 0, 0, 0, 1897, 1895, 1, 0, 0, 0, 1898, 1888, 1, 0, 0, 0, 1898, 1899, 1, 0, 0, 0, 1899, 1900, 1, 0, 0, 0, 1900, 1901, 5, 323, 0, 0, 1901, 1909, 1, 0, 0, 0, 1902, 1909, 3, 304, 152, 0, 1903, 1909, 3, 274, 137, 0, 1904, 1905, 5, 322, 0, 0, 1905, 1906, 3, 260, 130, 0, 1906, 1907, 5, 323, 0, 0, 1907, 1909, 1, 0, 0, 0, 1908, 1817, 1, 0, 0, 0, 1908, 1830, 1, 0, 0, 0, 1908, 1843, 1, 0, 0, 0, 1908, 1850, 1, 0, 0, 0, 1908, 1859, 1, 0, 0, 0, 1908, 1868, 1, 0, 0, 0, 1908, 1875, 1, 0, 0, 0, 1908, 1876, 1, 0, 0, 0, 1908, 1877, 1, 0, 0, 0, 1908, 1881, 1, 0, 0, 0, 1908, 1885, 1, 0, 0, 0, 1908, 1902, 1, 0, 0, 0, 1908, 1903, 1, 0, 0, 0, 1908, 1904, 1, 0, 0, 0, 1909, 1917, 1, 0, 0, 0, 1910, 1911, 10, 4, 0, 0, 1911, 1912, 5, 320, 0, 0, 1912, 1913, 3, 268, 134, 0, 1913, 1914, 5, 321, 0, 0, 1914, 1916, 1, 0, 0, 0, 1915, 1910, 1, 0, 0, 0, 1916, 1919, 1, 0, 0, 0, 1917, 1915, 1, 0, 0, 0, 1917, 1918, 1, 0, 0, 0, 1918, 271, 1, 0, 0, 0, 1919, 1917, 1, 0, 0, 0, 1920, 1921, 3, 316, 158, 0, 1921, 273, 1, 0, 0, 0, 1922, 1923, 3, 316, 158, 0, 1923, 275, 1, 0, 0, 0, 1924, 1925, 3, 304, 152, 0, 1925, 277, 1, 0, 0, 0, 1926, 1929, 3, 304, 152, 0, 1927, 1929, 3, 274, 137, 0, 1928, 1926, 1, 0, 0, 0, 1928, 1927, 1, 0, 0, 0, 1929, 279, 1, 0, 0, 0, 1930, 1933, 5, 38, 0, 0, 1931, 1934, 3, 282, 141, 0, 1932, 1934, 3, 286, 143, 0, 1933, 1931, 1, 0, 0, 0, 1933, 1932, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 281, 1, 0, 0, 0, 1935, 1937, 3, 284, 142, 0, 1936, 1938, 3, 288, 144, 0, 1937, 1936, 1, 0, 0, 0, 1937, 1938, 1, 0, 0, 0, 1938, 283, 1, 0, 0, 0, 1939, 1940, 3, 290, 145, 0, 1940, 1941, 3, 304, 152, 0, 1941, 1943, 1, 0, 0, 0, 1942, 1939, 1, 0, 0, 0, 1943, 1944, 1, 0, 0, 0, 1944, 1942, 1, 0, 0, 0, 1944, 1945, 1, 0, 0, 0, 1945, 285, 1, 0, 0, 0, 1946, 1949, 3, 288, 144, 0, 1947, 1950, 3, 284, 142, 0, 1948, 1950, 3, 288, 144, 0, 1949, 1947, 1, 0, 0, 0, 1949, 1948, 1, 0, 0, 0, 1949, 1950, 1, 0, 0, 0, 1950, 287, 1, 0, 0, 0, 1951, 1952, 3, 290, 145, 0, 1952, 1953, 3, 304, 152, 0, 1953, 1954, 5, 109, 0, 0, 1954, 1955, 3, 304, 152, 0, 1955, 289, 1, 0, 0, 0, 1956, 1958, 7, 33, 0, 0, 1957, 1956, 1, 0, 0, 0, 1957, 1958, 1, 0, 0, 0, 1958, 1959, 1, 0, 0, 0, 1959, 1962, 7, 34, 0, 0, 1960, 1962, 5, 343, 0, 0, 1961, 1957, 1, 0, 0, 0, 1961, 1960, 1, 0, 0, 0, 1962, 291, 1, 0, 0, 0, 1963, 1965, 5, 7, 0, 0, 1964, 1963, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1966, 1, 0, 0, 0, 1966, 1968, 3, 306, 153, 0, 1967, 1969, 3, 300, 150, 0, 1968, 1967, 1, 0, 0, 0, 1968, 1969, 1, 0, 0, 0, 1969, 293, 1, 0, 0, 0, 1970, 1972, 5, 7, 0, 0, 1971, 1970, 1, 0, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 1973, 1, 0, 0, 0, 1973, 1975, 3, 306, 153, 0, 1974, 1976, 3, 300, 150, 0, 1975, 1974, 1, 0, 0, 0, 1975, 1976, 1, 0, 0, 0, 1976, 295, 1, 0, 0, 0, 1977, 1978, 3, 304, 152, 0, 1978, 1979, 3, 298, 149, 0, 1979, 297, 1, 0, 0, 0, 1980, 1981, 5, 131, 0, 0, 1981, 1983, 3, 304, 152, 0, 1982, 1980, 1, 0, 0, 0, 1983, 1984, 1, 0, 0, 0, 1984, 1982, 1, 0, 0, 0, 1984, 1985, 1, 0, 0, 0, 1985, 1988, 1, 0, 0, 0, 1986, 1988, 1, 0, 0, 0, 1987, 1982, 1, 0, 0, 0, 1987, 1986, 1, 0, 0, 0, 1988, 299, 1, 0, 0, 0, 1989, 1990, 5, 322, 0, 0, 1990, 1991, 3, 302, 151, 0, 1991, 1992, 5, 323, 0, 0, 1992, 301, 1, 0, 0, 0, 1993, 1998, 3, 304, 152, 0, 1994, 1995, 5, 326, 0, 0, 1995, 1997, 3, 304, 152, 0, 1996, 1994, 1, 0, 0, 0, 1997, 2000, 1, 0, 0, 0, 1998, 1996, 1, 0, 0, 0, 1998, 1999, 1, 0, 0, 0, 1999, 303, 1, 0, 0, 0, 2000, 1998, 1, 0, 0, 0, 2001, 2004, 3, 306, 153, 0, 2002, 2004, 3, 356, 178, 0, 2003, 2001, 1, 0, 0, 0, 2003, 2002, 1, 0, 0, 0, 2004, 305, 1, 0, 0, 0, 2005, 2010, 3, 308, 154, 0, 2006, 2010, 3, 310, 155, 0, 2007, 2010, 3, 354, 177, 0, 2008, 2010, 3, 358, 179, 0, 2009, 2005, 1, 0, 0, 0, 2009, 2006, 1, 0, 0, 0, 2009, 2007, 1, 0, 0, 0, 2009, 2008, 1, 0, 0, 0, 2010, 307, 1, 0, 0, 0, 2011, 2012, 7, 35, 0, 0, 2012, 309, 1, 0, 0, 0, 2013, 2014, 5, 343, 0, 0, 2014, 311, 1, 0, 0, 0, 2015, 2016, 5, 40, 0, 0, 2016, 2017, 3, 260, 130, 0, 2017, 2018, 5, 41, 0, 0, 2018, 2019, 3, 260, 130, 0, 2019, 313, 1, 0, 0, 0, 2020, 2025, 3, 316, 158, 0, 2021, 2022, 5, 326, 0, 0, 2022, 2024, 3, 316, 158, 0, 2023, 2021, 1, 0, 0, 0, 2024, 2027, 1, 0, 0, 0, 2025, 2023, 1, 0, 0, 0, 2025, 2026, 1, 0, 0, 0, 2026, 315, 1, 0, 0, 0, 2027, 2025, 1, 0, 0, 0, 2028, 2032, 5, 347, 0, 0, 2029, 2031, 5, 342, 0, 0, 2030, 2029, 1, 0, 0, 0, 2031, 2034, 1, 0, 0, 0, 2032, 2033, 1, 0, 0, 0, 2032, 2030, 1, 0, 0, 0, 2033, 317, 1, 0, 0, 0, 2034, 2032, 1, 0, 0, 0, 2035, 2036, 5, 70, 0, 0, 2036, 2037, 3, 324, 162, 0, 2037, 319, 1, 0, 0, 0, 2038, 2039, 5, 128, 0, 0, 2039, 2040, 5, 25, 0, 0, 2040, 2041, 5, 27, 0, 0, 2041, 321, 1, 0, 0, 0, 2042, 2043, 5, 128, 0, 0, 2043, 2044, 5, 27, 0, 0, 2044, 323, 1, 0, 0, 0, 2045, 2046, 5, 322, 0, 0, 2046, 2051, 3, 326, 163, 0, 2047, 2048, 5, 326, 0, 0, 2048, 2050, 3, 326, 163, 0, 2049, 2047, 1, 0, 0, 0, 2050, 2053, 1, 0, 0, 0, 2051, 2049, 1, 0, 0, 0, 2051, 2052, 1, 0, 0, 0, 2052, 2054, 1, 0, 0, 0, 2053, 2051, 1, 0, 0, 0, 2054, 2055, 5, 323, 0, 0, 2055, 325, 1, 0, 0, 0, 2056, 2061, 3, 328, 164, 0, 2057, 2059, 5, 311, 0, 0, 2058, 2057, 1, 0, 0, 0, 2058, 2059, 1, 0, 0, 0, 2059, 2060, 1, 0, 0, 0, 2060, 2062, 3, 330, 165, 0, 2061, 2058, 1, 0, 0, 0, 2061, 2062, 1, 0, 0, 0, 2062, 327, 1, 0, 0, 0, 2063, 2067, 3, 304, 152, 0, 2064, 2067, 3, 274, 137, 0, 2065, 2067, 5, 343, 0, 0, 2066, 2063, 1, 0, 0, 0, 2066, 2064, 1, 0, 0, 0, 2066, 2065, 1, 0, 0, 0, 2067, 329, 1, 0, 0, 0, 2068, 2073, 5, 344, 0, 0, 2069, 2073, 5, 345, 0, 0, 2070, 2073, 3, 350, 175, 0, 2071, 2073, 5, 343, 0, 0, 2072, 2068, 1, 0, 0, 0, 2072, 2069, 1, 0, 0, 0, 2072, 2070, 1, 0, 0, 0, 2072, 2071, 1, 0, 0, 0, 2073, 331, 1, 0, 0, 0, 2074, 2081, 5, 23, 0, 0, 2075, 2076, 5, 317, 0, 0, 2076, 2081, 5, 317, 0, 0, 2077, 2081, 5, 22, 0, 0, 2078, 2079, 5, 316, 0, 0, 2079, 2081, 5, 316, 0, 0, 2080, 2074, 1, 0, 0, 0, 2080, 2075, 1, 0, 0, 0, 2080, 2077, 1, 0, 0, 0, 2080, 2078, 1, 0, 0, 0, 2081, 333, 1, 0, 0, 0, 2082, 2097, 5, 311, 0, 0, 2083, 2097, 5, 312, 0, 0, 2084, 2097, 5, 313, 0, 0, 2085, 2086, 5, 313, 0, 0, 2086, 2097, 5, 311, 0, 0, 2087, 2088, 5, 312, 0, 0, 2088, 2097, 5, 311, 0, 0, 2089, 2090, 5, 313, 0, 0, 2090, 2097, 5, 312, 0, 0, 2091, 2092, 5, 314, 0, 0, 2092, 2097, 5, 311, 0, 0, 2093, 2094, 5, 313, 0, 0, 2094, 2095, 5, 311, 0, 0, 2095, 2097, 5, 312, 0, 0, 2096, 2082, 1, 0, 0, 0, 2096, 2083, 1, 0, 0, 0, 2096, 2084, 1, 0, 0, 0, 2096, 2085, 1, 0, 0, 0, 2096, 2087, 1, 0, 0, 0, 2096, 2089, 1, 0, 0, 0, 2096, 2091, 1, 0, 0, 0, 2096, 2093, 1, 0, 0, 0, 2097, 335, 1, 0, 0, 0, 2098, 2099, 5, 313, 0, 0, 2099, 2106, 5, 313, 0, 0, 2100, 2101, 5, 312, 0, 0, 2101, 2106, 5, 312, 0, 0, 2102, 2106, 5, 317, 0, 0, 2103, 2106, 5, 318, 0, 0, 2104, 2106, 5, 316, 0, 0, 2105, 2098, 1, 0, 0, 0, 2105, 2100, 1, 0, 0, 0, 2105, 2102, 1, 0, 0, 0, 2105, 2103, 1, 0, 0, 0, 2105, 2104, 1, 0, 0, 0, 2106, 337, 1, 0, 0, 0, 2107, 2108, 7, 36, 0, 0, 2108, 339, 1, 0, 0, 0, 2109, 2110, 7, 37, 0, 0, 2110, 341, 1, 0, 0, 0, 2111, 2112, 3, 316, 158, 0, 2112, 343, 1, 0, 0, 0, 2113, 2126, 3, 346, 173, 0, 2114, 2126, 3, 348, 174, 0, 2115, 2126, 3, 280, 140, 0, 2116, 2117, 5, 335, 0, 0, 2117, 2126, 3, 348, 174, 0, 2118, 2126, 3, 350, 175, 0, 2119, 2126, 5, 345, 0, 0, 2120, 2126, 5, 346, 0, 0, 2121, 2123, 5, 25, 0, 0, 2122, 2121, 1, 0, 0, 0, 2122, 2123, 1, 0, 0, 0, 2123, 2124, 1, 0, 0, 0, 2124, 2126, 5, 309, 0, 0, 2125, 2113, 1, 0, 0, 0, 2125, 2114, 1, 0, 0, 0, 2125, 2115, 1, 0, 0, 0, 2125, 2116, 1, 0, 0, 0, 2125, 2118, 1, 0, 0, 0, 2125, 2119, 1, 0, 0, 0, 2125, 2120, 1, 0, 0, 0, 2125, 2122, 1, 0, 0, 0, 2126, 345, 1, 0, 0, 0, 2127, 2128, 5, 343, 0, 0, 2128, 347, 1, 0, 0, 0, 2129, 2130, 5, 344, 0, 0, 2130, 349, 1, 0, 0, 0, 2131, 2132, 7, 29, 0, 0, 2132, 351, 1, 0, 0, 0, 2133, 2134, 7, 38, 0, 0, 2134, 353, 1, 0, 0, 0, 2135, 2136, 7, 39, 0, 0, 2136, 355, 1, 0, 0, 0, 2137, 2138, 7, 40, 0, 0, 2138, 357, 1, 0, 0, 0, 2139, 2140, 7, 41, 0, 0, 2140, 359, 1, 0, 0, 0, 244, 368, 371, 373, 388, 406, 410, 419, 424, 431, 438, 442, 451, 463, 466, 473, 481, 486, 489, 496, 504, 508, 520, 528, 532, 553, 557, 561, 565, 574, 579, 583, 587, 591, 594, 598, 603, 609, 614, 619, 622, 626, 634, 642, 646, 650, 654, 658, 662, 666, 670, 674, 676, 686, 694, 718, 725, 740, 743, 751, 763, 787, 800, 805, 809, 817, 821, 829, 839, 843, 849, 853, 857, 860, 869, 873, 880, 883, 893, 901, 909, 913, 928, 947, 958, 962, 969, 974, 980, 984, 991, 995, 999, 1003, 1011, 1015, 1020, 1025, 1031, 1034, 1038, 1049, 1058, 1071, 1086, 1089, 1093, 1096, 1098, 1103, 1107, 1110, 1114, 1123, 1132, 1142, 1147, 1159, 1162, 1165, 1168, 1174, 1178, 1186, 1189, 1194, 1197, 1199, 1213, 1224, 1229, 1237, 1240, 1243, 1248, 1250, 1252, 1257, 1260, 1264, 1267, 1270, 1282, 1289, 1300, 1329, 1351, 1369, 1374, 1386, 1399, 1411, 1423, 1428, 1455, 1463, 1467, 1470, 1473, 1480, 1483, 1486, 1489, 1492, 1495, 1500, 1503, 1512, 1517, 1521, 1526, 1535, 1554, 1562, 1570, 1574, 1578, 1588, 1614, 1622, 1634, 1660, 1662, 1670, 1672, 1676, 1684, 1693, 1699, 1712, 1717, 1729, 1734, 1737, 1743, 1748, 1753, 1758, 1761, 1773, 1778, 1781, 1785, 1791, 1812, 1814, 1822, 1826, 1835, 1839, 1855, 1864, 1888, 1895, 1898, 1908, 1917, 1928, 1933, 1937, 1944, 1949, 1957, 1961, 1964, 1968, 1971, 1975, 1984, 1987, 1998, 2003, 2009, 2025, 2032, 2051, 2058, 2061, 2066, 2072, 2080, 2096, 2105, 2122, 2125] \ No newline at end of file diff --git a/src/lib/flinksql/FlinkSqlParser.tokens b/src/lib/flinksql/FlinkSqlParser.tokens index 2398474..62cec6d 100644 --- a/src/lib/flinksql/FlinkSqlParser.tokens +++ b/src/lib/flinksql/FlinkSqlParser.tokens @@ -262,71 +262,91 @@ ENFORCED=261 METADATA=262 VIRTUAL=263 ZONE=264 -STRING=265 -ARRAY=266 -MAP=267 -CHAR=268 -VARCHAR=269 -BINARY=270 -VARBINARY=271 -BYTES=272 -DECIMAL=273 -DEC=274 -NUMERIC=275 -TINYINT=276 -SMALLINT=277 -INT=278 -INTEGER=279 -BIGINT=280 -FLOAT=281 -DOUBLE=282 -DATE=283 -TIME=284 -TIMESTAMP=285 -TIMESTAMP_LTZ=286 -MULTISET=287 -BOOLEAN=288 -RAW=289 -ROW=290 -NULL=291 -DATETIME=292 -EQUAL_SYMBOL=293 -GREATER_SYMBOL=294 -LESS_SYMBOL=295 -EXCLAMATION_SYMBOL=296 -BIT_NOT_OP=297 -BIT_OR_OP=298 -BIT_AND_OP=299 -BIT_XOR_OP=300 -DOT=301 -LS_BRACKET=302 -RS_BRACKET=303 -LR_BRACKET=304 -RR_BRACKET=305 -COMMA=306 -SEMICOLON=307 -AT_SIGN=308 -SINGLE_QUOTE_SYMB=309 -DOUBLE_QUOTE_SYMB=310 -REVERSE_QUOTE_SYMB=311 -COLON_SYMB=312 -ASTERISK_SIGN=313 -UNDERLINE_SIGN=314 -HYPNEN_SIGN=315 -ADD_SIGN=316 -PENCENT_SIGN=317 -DOUBLE_VERTICAL_SIGN=318 -DOUBLE_HYPNEN_SIGN=319 -SLASH_SIGN=320 -DOT_ID=321 -PLUS_DOT_ID=322 -STRING_LITERAL=323 -DIG_LITERAL=324 -REAL_LITERAL=325 -BIT_STRING=326 -ID_LITERAL=327 -PLUS_ID_LITERAL=328 -FILE_PATH=329 +TUMBLE=265 +HOP=266 +CUMULATE=267 +DESCRIPTOR=268 +TIMECOL=269 +SIZE=270 +OFFSET=271 +STEP=272 +SLIDE=273 +SESSION=274 +MATCH_RECOGNIZE=275 +MEASURES=276 +PATTERN=277 +ONE=278 +PER=279 +KW_SKIP=280 +PAST=281 +DEFINE=282 +STRING=283 +ARRAY=284 +MAP=285 +CHAR=286 +VARCHAR=287 +BINARY=288 +VARBINARY=289 +BYTES=290 +DECIMAL=291 +DEC=292 +NUMERIC=293 +TINYINT=294 +SMALLINT=295 +INT=296 +INTEGER=297 +BIGINT=298 +FLOAT=299 +DOUBLE=300 +DATE=301 +TIME=302 +TIMESTAMP=303 +TIMESTAMP_LTZ=304 +MULTISET=305 +BOOLEAN=306 +RAW=307 +ROW=308 +NULL=309 +DATETIME=310 +EQUAL_SYMBOL=311 +GREATER_SYMBOL=312 +LESS_SYMBOL=313 +EXCLAMATION_SYMBOL=314 +BIT_NOT_OP=315 +BIT_OR_OP=316 +BIT_AND_OP=317 +BIT_XOR_OP=318 +DOT=319 +LS_BRACKET=320 +RS_BRACKET=321 +LR_BRACKET=322 +RR_BRACKET=323 +LB_BRACKET=324 +RB_BRACKET=325 +COMMA=326 +SEMICOLON=327 +AT_SIGN=328 +SINGLE_QUOTE_SYMB=329 +DOUBLE_QUOTE_SYMB=330 +REVERSE_QUOTE_SYMB=331 +COLON_SYMB=332 +ASTERISK_SIGN=333 +UNDERLINE_SIGN=334 +HYPNEN_SIGN=335 +ADD_SIGN=336 +PENCENT_SIGN=337 +DOUBLE_VERTICAL_SIGN=338 +DOUBLE_HYPNEN_SIGN=339 +SLASH_SIGN=340 +QUESTION_MARK_SIGN=341 +DOT_ID=342 +STRING_LITERAL=343 +DIG_LITERAL=344 +REAL_LITERAL=345 +BIT_STRING=346 +ID_LITERAL=347 +FILE_PATH=348 +DOUBLE_ARROW=349 'SELECT'=4 'FROM'=5 'ADD'=6 @@ -588,59 +608,81 @@ FILE_PATH=329 'METADATA'=262 'VIRTUAL'=263 'ZONE'=264 -'STRING'=265 -'ARRAY'=266 -'MAP'=267 -'CHAR'=268 -'VARCHAR'=269 -'BINARY'=270 -'VARBINARY'=271 -'BYTES'=272 -'DECIMAL'=273 -'DEC'=274 -'NUMERIC'=275 -'TINYINT'=276 -'SMALLINT'=277 -'INT'=278 -'INTEGER'=279 -'BIGINT'=280 -'FLOAT'=281 -'DOUBLE'=282 -'DATE'=283 -'TIME'=284 -'TIMESTAMP'=285 -'TIMESTAMP_LTZ'=286 -'MULTISET'=287 -'BOOLEAN'=288 -'RAW'=289 -'ROW'=290 -'NULL'=291 -'DATETIME'=292 -'='=293 -'>'=294 -'<'=295 -'!'=296 -'~'=297 -'|'=298 -'&'=299 -'^'=300 -'.'=301 -'['=302 -']'=303 -'('=304 -')'=305 -','=306 -';'=307 -'@'=308 -'\''=309 -'"'=310 -'`'=311 -':'=312 -'*'=313 -'_'=314 -'-'=315 -'+'=316 -'%'=317 -'||'=318 -'--'=319 -'/'=320 +'TUMBLE'=265 +'HOP'=266 +'CUMULATE'=267 +'DESCRIPTOR'=268 +'TIMECOL'=269 +'SIZE'=270 +'OFFSET'=271 +'STEP'=272 +'SLIDE'=273 +'SESSION'=274 +'MATCH_RECOGNIZE'=275 +'MEASURES'=276 +'PATTERN'=277 +'ONE'=278 +'PER'=279 +'SKIP'=280 +'PAST'=281 +'DEFINE'=282 +'STRING'=283 +'ARRAY'=284 +'MAP'=285 +'CHAR'=286 +'VARCHAR'=287 +'BINARY'=288 +'VARBINARY'=289 +'BYTES'=290 +'DECIMAL'=291 +'DEC'=292 +'NUMERIC'=293 +'TINYINT'=294 +'SMALLINT'=295 +'INT'=296 +'INTEGER'=297 +'BIGINT'=298 +'FLOAT'=299 +'DOUBLE'=300 +'DATE'=301 +'TIME'=302 +'TIMESTAMP'=303 +'TIMESTAMP_LTZ'=304 +'MULTISET'=305 +'BOOLEAN'=306 +'RAW'=307 +'ROW'=308 +'NULL'=309 +'DATETIME'=310 +'='=311 +'>'=312 +'<'=313 +'!'=314 +'~'=315 +'|'=316 +'&'=317 +'^'=318 +'.'=319 +'['=320 +']'=321 +'('=322 +')'=323 +'{'=324 +'}'=325 +','=326 +';'=327 +'@'=328 +'\''=329 +'"'=330 +'`'=331 +':'=332 +'*'=333 +'_'=334 +'-'=335 +'+'=336 +'%'=337 +'||'=338 +'--'=339 +'/'=340 +'?'=341 +'=>'=349 diff --git a/src/lib/flinksql/FlinkSqlParser.ts b/src/lib/flinksql/FlinkSqlParser.ts index 3c78efb..177fe71 100644 --- a/src/lib/flinksql/FlinkSqlParser.ts +++ b/src/lib/flinksql/FlinkSqlParser.ts @@ -1,4 +1,4 @@ -// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0 +// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0 // noinspection ES6UnusedImports,JSUnusedGlobalSymbols,JSUnusedLocalSymbols import { @@ -283,71 +283,91 @@ export default class FlinkSqlParser extends Parser { public static readonly METADATA = 262; public static readonly VIRTUAL = 263; public static readonly ZONE = 264; - public static readonly STRING = 265; - public static readonly ARRAY = 266; - public static readonly MAP = 267; - public static readonly CHAR = 268; - public static readonly VARCHAR = 269; - public static readonly BINARY = 270; - public static readonly VARBINARY = 271; - public static readonly BYTES = 272; - public static readonly DECIMAL = 273; - public static readonly DEC = 274; - public static readonly NUMERIC = 275; - public static readonly TINYINT = 276; - public static readonly SMALLINT = 277; - public static readonly INT = 278; - public static readonly INTEGER = 279; - public static readonly BIGINT = 280; - public static readonly FLOAT = 281; - public static readonly DOUBLE = 282; - public static readonly DATE = 283; - public static readonly TIME = 284; - public static readonly TIMESTAMP = 285; - public static readonly TIMESTAMP_LTZ = 286; - public static readonly MULTISET = 287; - public static readonly BOOLEAN = 288; - public static readonly RAW = 289; - public static readonly ROW = 290; - public static readonly NULL = 291; - public static readonly DATETIME = 292; - public static readonly EQUAL_SYMBOL = 293; - public static readonly GREATER_SYMBOL = 294; - public static readonly LESS_SYMBOL = 295; - public static readonly EXCLAMATION_SYMBOL = 296; - public static readonly BIT_NOT_OP = 297; - public static readonly BIT_OR_OP = 298; - public static readonly BIT_AND_OP = 299; - public static readonly BIT_XOR_OP = 300; - public static readonly DOT = 301; - public static readonly LS_BRACKET = 302; - public static readonly RS_BRACKET = 303; - public static readonly LR_BRACKET = 304; - public static readonly RR_BRACKET = 305; - public static readonly COMMA = 306; - public static readonly SEMICOLON = 307; - public static readonly AT_SIGN = 308; - public static readonly SINGLE_QUOTE_SYMB = 309; - public static readonly DOUBLE_QUOTE_SYMB = 310; - public static readonly REVERSE_QUOTE_SYMB = 311; - public static readonly COLON_SYMB = 312; - public static readonly ASTERISK_SIGN = 313; - public static readonly UNDERLINE_SIGN = 314; - public static readonly HYPNEN_SIGN = 315; - public static readonly ADD_SIGN = 316; - public static readonly PENCENT_SIGN = 317; - public static readonly DOUBLE_VERTICAL_SIGN = 318; - public static readonly DOUBLE_HYPNEN_SIGN = 319; - public static readonly SLASH_SIGN = 320; - public static readonly DOT_ID = 321; - public static readonly PLUS_DOT_ID = 322; - public static readonly STRING_LITERAL = 323; - public static readonly DIG_LITERAL = 324; - public static readonly REAL_LITERAL = 325; - public static readonly BIT_STRING = 326; - public static readonly ID_LITERAL = 327; - public static readonly PLUS_ID_LITERAL = 328; - public static readonly FILE_PATH = 329; + public static readonly TUMBLE = 265; + public static readonly HOP = 266; + public static readonly CUMULATE = 267; + public static readonly DESCRIPTOR = 268; + public static readonly TIMECOL = 269; + public static readonly SIZE = 270; + public static readonly OFFSET = 271; + public static readonly STEP = 272; + public static readonly SLIDE = 273; + public static readonly SESSION = 274; + public static readonly MATCH_RECOGNIZE = 275; + public static readonly MEASURES = 276; + public static readonly PATTERN = 277; + public static readonly ONE = 278; + public static readonly PER = 279; + public static readonly KW_SKIP = 280; + public static readonly PAST = 281; + public static readonly DEFINE = 282; + public static readonly STRING = 283; + public static readonly ARRAY = 284; + public static readonly MAP = 285; + public static readonly CHAR = 286; + public static readonly VARCHAR = 287; + public static readonly BINARY = 288; + public static readonly VARBINARY = 289; + public static readonly BYTES = 290; + public static readonly DECIMAL = 291; + public static readonly DEC = 292; + public static readonly NUMERIC = 293; + public static readonly TINYINT = 294; + public static readonly SMALLINT = 295; + public static readonly INT = 296; + public static readonly INTEGER = 297; + public static readonly BIGINT = 298; + public static readonly FLOAT = 299; + public static readonly DOUBLE = 300; + public static readonly DATE = 301; + public static readonly TIME = 302; + public static readonly TIMESTAMP = 303; + public static readonly TIMESTAMP_LTZ = 304; + public static readonly MULTISET = 305; + public static readonly BOOLEAN = 306; + public static readonly RAW = 307; + public static readonly ROW = 308; + public static readonly NULL = 309; + public static readonly DATETIME = 310; + public static readonly EQUAL_SYMBOL = 311; + public static readonly GREATER_SYMBOL = 312; + public static readonly LESS_SYMBOL = 313; + public static readonly EXCLAMATION_SYMBOL = 314; + public static readonly BIT_NOT_OP = 315; + public static readonly BIT_OR_OP = 316; + public static readonly BIT_AND_OP = 317; + public static readonly BIT_XOR_OP = 318; + public static readonly DOT = 319; + public static readonly LS_BRACKET = 320; + public static readonly RS_BRACKET = 321; + public static readonly LR_BRACKET = 322; + public static readonly RR_BRACKET = 323; + public static readonly LB_BRACKET = 324; + public static readonly RB_BRACKET = 325; + public static readonly COMMA = 326; + public static readonly SEMICOLON = 327; + public static readonly AT_SIGN = 328; + public static readonly SINGLE_QUOTE_SYMB = 329; + public static readonly DOUBLE_QUOTE_SYMB = 330; + public static readonly REVERSE_QUOTE_SYMB = 331; + public static readonly COLON_SYMB = 332; + public static readonly ASTERISK_SIGN = 333; + public static readonly UNDERLINE_SIGN = 334; + public static readonly HYPNEN_SIGN = 335; + public static readonly ADD_SIGN = 336; + public static readonly PENCENT_SIGN = 337; + public static readonly DOUBLE_VERTICAL_SIGN = 338; + public static readonly DOUBLE_HYPNEN_SIGN = 339; + public static readonly SLASH_SIGN = 340; + public static readonly QUESTION_MARK_SIGN = 341; + public static readonly DOT_ID = 342; + public static readonly STRING_LITERAL = 343; + public static readonly DIG_LITERAL = 344; + public static readonly REAL_LITERAL = 345; + public static readonly BIT_STRING = 346; + public static readonly ID_LITERAL = 347; + public static readonly FILE_PATH = 348; + public static readonly DOUBLE_ARROW = 349; public static readonly EOF = Token.EOF; public static readonly RULE_program = 0; public static readonly RULE_statement = 1; @@ -429,83 +449,106 @@ export default class FlinkSqlParser extends Parser { public static readonly RULE_insertMulStatement = 77; public static readonly RULE_queryStatement = 78; public static readonly RULE_valuesCaluse = 79; - public static readonly RULE_withItem = 80; - public static readonly RULE_withItemName = 81; - public static readonly RULE_selectStatement = 82; - public static readonly RULE_selectClause = 83; - public static readonly RULE_projectItemDefinition = 84; - public static readonly RULE_fromClause = 85; - public static readonly RULE_tableExpression = 86; - public static readonly RULE_tableReference = 87; - public static readonly RULE_tablePrimary = 88; - public static readonly RULE_tablePath = 89; - public static readonly RULE_systemTimePeriod = 90; - public static readonly RULE_dateTimeExpression = 91; - public static readonly RULE_joinCondition = 92; - public static readonly RULE_whereClause = 93; - public static readonly RULE_groupByClause = 94; - public static readonly RULE_groupItemDefinition = 95; - public static readonly RULE_havingClause = 96; - public static readonly RULE_orderByCaluse = 97; - public static readonly RULE_orderItemDefition = 98; - public static readonly RULE_limitClause = 99; - public static readonly RULE_windowClause = 100; - public static readonly RULE_namedWindow = 101; - public static readonly RULE_windowSpec = 102; - public static readonly RULE_sortItem = 103; - public static readonly RULE_windowFrame = 104; - public static readonly RULE_frameBound = 105; - public static readonly RULE_expression = 106; - public static readonly RULE_booleanExpression = 107; - public static readonly RULE_predicate = 108; - public static readonly RULE_likePredicate = 109; - public static readonly RULE_valueExpression = 110; - public static readonly RULE_primaryExpression = 111; - public static readonly RULE_functionName = 112; - public static readonly RULE_dereferenceDefinition = 113; - public static readonly RULE_correlationName = 114; - public static readonly RULE_qualifiedName = 115; - public static readonly RULE_interval = 116; - public static readonly RULE_errorCapturingMultiUnitsInterval = 117; - public static readonly RULE_multiUnitsInterval = 118; - public static readonly RULE_errorCapturingUnitToUnitInterval = 119; - public static readonly RULE_unitToUnitInterval = 120; - public static readonly RULE_intervalValue = 121; - public static readonly RULE_columnAlias = 122; - public static readonly RULE_tableAlias = 123; - public static readonly RULE_errorCapturingIdentifier = 124; - public static readonly RULE_errorCapturingIdentifierExtra = 125; - public static readonly RULE_identifierList = 126; - public static readonly RULE_identifierSeq = 127; - public static readonly RULE_identifier = 128; - public static readonly RULE_strictIdentifier = 129; - public static readonly RULE_unquotedIdentifier = 130; - public static readonly RULE_quotedIdentifier = 131; - public static readonly RULE_whenClause = 132; - public static readonly RULE_uidList = 133; - public static readonly RULE_uid = 134; - public static readonly RULE_plusUid = 135; - public static readonly RULE_withOption = 136; - public static readonly RULE_ifNotExists = 137; - public static readonly RULE_ifExists = 138; - public static readonly RULE_tablePropertyList = 139; - public static readonly RULE_tableProperty = 140; - public static readonly RULE_tablePropertyKey = 141; - public static readonly RULE_tablePropertyValue = 142; - public static readonly RULE_logicalOperator = 143; - public static readonly RULE_comparisonOperator = 144; - public static readonly RULE_bitOperator = 145; - public static readonly RULE_mathOperator = 146; - public static readonly RULE_unaryOperator = 147; - public static readonly RULE_fullColumnName = 148; - public static readonly RULE_constant = 149; - public static readonly RULE_stringLiteral = 150; - public static readonly RULE_decimalLiteral = 151; - public static readonly RULE_booleanLiteral = 152; - public static readonly RULE_setQuantifier = 153; - public static readonly RULE_ansiNonReserved = 154; - public static readonly RULE_strictNonReserved = 155; - public static readonly RULE_nonReserved = 156; + public static readonly RULE_withClause = 80; + public static readonly RULE_withItem = 81; + public static readonly RULE_withItemName = 82; + public static readonly RULE_selectStatement = 83; + public static readonly RULE_selectClause = 84; + public static readonly RULE_projectItemDefinition = 85; + public static readonly RULE_overWindowItem = 86; + public static readonly RULE_fromClause = 87; + public static readonly RULE_tableExpression = 88; + public static readonly RULE_tableReference = 89; + public static readonly RULE_tablePrimary = 90; + public static readonly RULE_tablePath = 91; + public static readonly RULE_systemTimePeriod = 92; + public static readonly RULE_dateTimeExpression = 93; + public static readonly RULE_inlineDataValueClause = 94; + public static readonly RULE_windoTVFClause = 95; + public static readonly RULE_windowTVFExression = 96; + public static readonly RULE_windoTVFName = 97; + public static readonly RULE_windowTVFParam = 98; + public static readonly RULE_timeIntervalParamName = 99; + public static readonly RULE_columnDescriptor = 100; + public static readonly RULE_joinCondition = 101; + public static readonly RULE_whereClause = 102; + public static readonly RULE_groupByClause = 103; + public static readonly RULE_groupItemDefinition = 104; + public static readonly RULE_groupingSets = 105; + public static readonly RULE_groupingSetsNotaionName = 106; + public static readonly RULE_groupWindowFunction = 107; + public static readonly RULE_groupWindowFunctionName = 108; + public static readonly RULE_timeAttrColumn = 109; + public static readonly RULE_havingClause = 110; + public static readonly RULE_windowClause = 111; + public static readonly RULE_namedWindow = 112; + public static readonly RULE_windowSpec = 113; + public static readonly RULE_matchRecognizeClause = 114; + public static readonly RULE_orderByCaluse = 115; + public static readonly RULE_orderItemDefition = 116; + public static readonly RULE_limitClause = 117; + public static readonly RULE_partitionByClause = 118; + public static readonly RULE_quantifiers = 119; + public static readonly RULE_measuresClause = 120; + public static readonly RULE_patternDefination = 121; + public static readonly RULE_patternVariable = 122; + public static readonly RULE_outputMode = 123; + public static readonly RULE_afterMatchStrategy = 124; + public static readonly RULE_patternVariablesDefination = 125; + public static readonly RULE_windowFrame = 126; + public static readonly RULE_frameBound = 127; + public static readonly RULE_withinClause = 128; + public static readonly RULE_timeIntervalExpression = 129; + public static readonly RULE_expression = 130; + public static readonly RULE_booleanExpression = 131; + public static readonly RULE_predicate = 132; + public static readonly RULE_likePredicate = 133; + public static readonly RULE_valueExpression = 134; + public static readonly RULE_primaryExpression = 135; + public static readonly RULE_functionName = 136; + public static readonly RULE_dereferenceDefinition = 137; + public static readonly RULE_correlationName = 138; + public static readonly RULE_qualifiedName = 139; + public static readonly RULE_interval = 140; + public static readonly RULE_errorCapturingMultiUnitsInterval = 141; + public static readonly RULE_multiUnitsInterval = 142; + public static readonly RULE_errorCapturingUnitToUnitInterval = 143; + public static readonly RULE_unitToUnitInterval = 144; + public static readonly RULE_intervalValue = 145; + public static readonly RULE_columnAlias = 146; + public static readonly RULE_tableAlias = 147; + public static readonly RULE_errorCapturingIdentifier = 148; + public static readonly RULE_errorCapturingIdentifierExtra = 149; + public static readonly RULE_identifierList = 150; + public static readonly RULE_identifierSeq = 151; + public static readonly RULE_identifier = 152; + public static readonly RULE_strictIdentifier = 153; + public static readonly RULE_unquotedIdentifier = 154; + public static readonly RULE_quotedIdentifier = 155; + public static readonly RULE_whenClause = 156; + public static readonly RULE_uidList = 157; + public static readonly RULE_uid = 158; + public static readonly RULE_withOption = 159; + public static readonly RULE_ifNotExists = 160; + public static readonly RULE_ifExists = 161; + public static readonly RULE_tablePropertyList = 162; + public static readonly RULE_tableProperty = 163; + public static readonly RULE_tablePropertyKey = 164; + public static readonly RULE_tablePropertyValue = 165; + public static readonly RULE_logicalOperator = 166; + public static readonly RULE_comparisonOperator = 167; + public static readonly RULE_bitOperator = 168; + public static readonly RULE_mathOperator = 169; + public static readonly RULE_unaryOperator = 170; + public static readonly RULE_fullColumnName = 171; + public static readonly RULE_constant = 172; + public static readonly RULE_stringLiteral = 173; + public static readonly RULE_decimalLiteral = 174; + public static readonly RULE_booleanLiteral = 175; + public static readonly RULE_setQuantifier = 176; + public static readonly RULE_ansiNonReserved = 177; + public static readonly RULE_strictNonReserved = 178; + public static readonly RULE_nonReserved = 179; public static readonly literalNames: (string | null)[] = [ null, null, null, null, "'SELECT'", @@ -698,7 +741,20 @@ export default class FlinkSqlParser extends Parser { "'ENFORCED'", "'METADATA'", "'VIRTUAL'", - "'ZONE'", "'STRING'", + "'ZONE'", "'TUMBLE'", + "'HOP'", "'CUMULATE'", + "'DESCRIPTOR'", + "'TIMECOL'", + "'SIZE'", "'OFFSET'", + "'STEP'", "'SLIDE'", + "'SESSION'", + "'MATCH_RECOGNIZE'", + "'MEASURES'", + "'PATTERN'", + "'ONE'", "'PER'", + "'SKIP'", "'PAST'", + "'DEFINE'", + "'STRING'", "'ARRAY'", "'MAP'", "'CHAR'", "'VARCHAR'", "'BINARY'", @@ -723,14 +779,20 @@ export default class FlinkSqlParser extends Parser { "'&'", "'^'", "'.'", "'['", "']'", "'('", - "')'", "','", + "')'", "'{'", + "'}'", "','", "';'", "'@'", "'''", "'\"'", "'`'", "':'", "'*'", "'_'", "'-'", "'+'", "'%'", "'||'", - "'--'", "'/'" ]; + "'--'", "'/'", + "'?'", null, + null, null, + null, null, + null, null, + "'=>'" ]; public static readonly symbolicNames: (string | null)[] = [ null, "SPACE", "COMMENT_INPUT", "LINE_COMMENT", @@ -904,9 +966,22 @@ export default class FlinkSqlParser extends Parser { "ENFORCED", "METADATA", "VIRTUAL", - "ZONE", "STRING", - "ARRAY", "MAP", - "CHAR", "VARCHAR", + "ZONE", "TUMBLE", + "HOP", "CUMULATE", + "DESCRIPTOR", + "TIMECOL", + "SIZE", "OFFSET", + "STEP", "SLIDE", + "SESSION", + "MATCH_RECOGNIZE", + "MEASURES", + "PATTERN", + "ONE", "PER", + "KW_SKIP", + "PAST", "DEFINE", + "STRING", "ARRAY", + "MAP", "CHAR", + "VARCHAR", "BINARY", "VARBINARY", "BYTES", "DECIMAL", "DEC", "NUMERIC", @@ -933,6 +1008,8 @@ export default class FlinkSqlParser extends Parser { "RS_BRACKET", "LR_BRACKET", "RR_BRACKET", + "LB_BRACKET", + "RB_BRACKET", "COMMA", "SEMICOLON", "AT_SIGN", "SINGLE_QUOTE_SYMB", @@ -947,14 +1024,14 @@ export default class FlinkSqlParser extends Parser { "DOUBLE_VERTICAL_SIGN", "DOUBLE_HYPNEN_SIGN", "SLASH_SIGN", - "DOT_ID", "PLUS_DOT_ID", - "STRING_LITERAL", + "QUESTION_MARK_SIGN", + "DOT_ID", "STRING_LITERAL", "DIG_LITERAL", "REAL_LITERAL", "BIT_STRING", "ID_LITERAL", - "PLUS_ID_LITERAL", - "FILE_PATH" ]; + "FILE_PATH", + "DOUBLE_ARROW" ]; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ "program", "statement", "sqlStatements", "sqlStatement", "emptyStatement", @@ -976,20 +1053,26 @@ export default class FlinkSqlParser extends Parser { "dropCatalog", "dropTable", "dropDatabase", "dropView", "dropFunction", "insertStatement", "insertSimpleStatement", "insertPartitionDefinition", "valuesDefinition", "valuesRowDefinition", "insertMulStatement", "queryStatement", - "valuesCaluse", "withItem", "withItemName", "selectStatement", "selectClause", - "projectItemDefinition", "fromClause", "tableExpression", "tableReference", - "tablePrimary", "tablePath", "systemTimePeriod", "dateTimeExpression", + "valuesCaluse", "withClause", "withItem", "withItemName", "selectStatement", + "selectClause", "projectItemDefinition", "overWindowItem", "fromClause", + "tableExpression", "tableReference", "tablePrimary", "tablePath", "systemTimePeriod", + "dateTimeExpression", "inlineDataValueClause", "windoTVFClause", "windowTVFExression", + "windoTVFName", "windowTVFParam", "timeIntervalParamName", "columnDescriptor", "joinCondition", "whereClause", "groupByClause", "groupItemDefinition", - "havingClause", "orderByCaluse", "orderItemDefition", "limitClause", "windowClause", - "namedWindow", "windowSpec", "sortItem", "windowFrame", "frameBound", + "groupingSets", "groupingSetsNotaionName", "groupWindowFunction", "groupWindowFunctionName", + "timeAttrColumn", "havingClause", "windowClause", "namedWindow", "windowSpec", + "matchRecognizeClause", "orderByCaluse", "orderItemDefition", "limitClause", + "partitionByClause", "quantifiers", "measuresClause", "patternDefination", + "patternVariable", "outputMode", "afterMatchStrategy", "patternVariablesDefination", + "windowFrame", "frameBound", "withinClause", "timeIntervalExpression", "expression", "booleanExpression", "predicate", "likePredicate", "valueExpression", "primaryExpression", "functionName", "dereferenceDefinition", "correlationName", "qualifiedName", "interval", "errorCapturingMultiUnitsInterval", "multiUnitsInterval", "errorCapturingUnitToUnitInterval", "unitToUnitInterval", "intervalValue", "columnAlias", "tableAlias", "errorCapturingIdentifier", "errorCapturingIdentifierExtra", "identifierList", "identifierSeq", "identifier", "strictIdentifier", "unquotedIdentifier", - "quotedIdentifier", "whenClause", "uidList", "uid", "plusUid", "withOption", - "ifNotExists", "ifExists", "tablePropertyList", "tableProperty", "tablePropertyKey", + "quotedIdentifier", "whenClause", "uidList", "uid", "withOption", "ifNotExists", + "ifExists", "tablePropertyList", "tableProperty", "tablePropertyKey", "tablePropertyValue", "logicalOperator", "comparisonOperator", "bitOperator", "mathOperator", "unaryOperator", "fullColumnName", "constant", "stringLiteral", "decimalLiteral", "booleanLiteral", "setQuantifier", "ansiNonReserved", @@ -1016,9 +1099,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 314; + this.state = 360; this.statement(); - this.state = 315; + this.state = 361; this.match(FlinkSqlParser.EOF); } } @@ -1043,9 +1126,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 317; + this.state = 363; this.sqlStatements(); - this.state = 318; + this.state = 364; this.match(FlinkSqlParser.EOF); } } @@ -1071,12 +1154,12 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 327; + this.state = 373; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===4 || _la===6 || _la===36 || ((((_la - 70)) & ~0x1F) === 0 && ((1 << (_la - 70)) & 570479885) !== 0) || ((((_la - 104)) & ~0x1F) === 0 && ((1 << (_la - 104)) & 12545) !== 0) || _la===212 || _la===213 || _la===304 || _la===307) { + while (_la===4 || _la===6 || _la===36 || ((((_la - 70)) & ~0x1F) === 0 && ((1 << (_la - 70)) & 570479885) !== 0) || ((((_la - 104)) & ~0x1F) === 0 && ((1 << (_la - 104)) & 12545) !== 0) || _la===212 || _la===213 || _la===322 || _la===327) { { - this.state = 325; + this.state = 371; this._errHandler.sync(this); switch (this._input.LA(1)) { case 4: @@ -1098,25 +1181,25 @@ export default class FlinkSqlParser extends Parser { case 117: case 212: case 213: - case 304: + case 322: { - this.state = 320; + this.state = 366; this.sqlStatement(); - this.state = 322; + this.state = 368; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 0, this._ctx) ) { case 1: { - this.state = 321; + this.state = 367; this.match(FlinkSqlParser.SEMICOLON); } break; } } break; - case 307: + case 327: { - this.state = 324; + this.state = 370; this.emptyStatement(); } break; @@ -1124,7 +1207,7 @@ export default class FlinkSqlParser extends Parser { throw new NoViableAltException(this); } } - this.state = 329; + this.state = 375; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1149,90 +1232,90 @@ export default class FlinkSqlParser extends Parser { let localctx: SqlStatementContext = new SqlStatementContext(this, this._ctx, this.state); this.enterRule(localctx, 6, FlinkSqlParser.RULE_sqlStatement); try { - this.state = 342; + this.state = 388; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 3, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 330; + this.state = 376; this.ddlStatement(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 331; + this.state = 377; this.dmlStatement(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 332; + this.state = 378; this.describeStatement(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 333; + this.state = 379; this.explainStatement(); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 334; + this.state = 380; this.useStatement(); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 335; + this.state = 381; this.showStatememt(); } break; case 7: this.enterOuterAlt(localctx, 7); { - this.state = 336; + this.state = 382; this.loadStatement(); } break; case 8: this.enterOuterAlt(localctx, 8); { - this.state = 337; + this.state = 383; this.unloadStatememt(); } break; case 9: this.enterOuterAlt(localctx, 9); { - this.state = 338; + this.state = 384; this.setStatememt(); } break; case 10: this.enterOuterAlt(localctx, 10); { - this.state = 339; + this.state = 385; this.resetStatememt(); } break; case 11: this.enterOuterAlt(localctx, 11); { - this.state = 340; + this.state = 386; this.jarStatememt(); } break; case 12: this.enterOuterAlt(localctx, 12); { - this.state = 341; + this.state = 387; this.dtAddStatement(); } break; @@ -1259,7 +1342,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 344; + this.state = 390; this.match(FlinkSqlParser.SEMICOLON); } } @@ -1282,104 +1365,104 @@ export default class FlinkSqlParser extends Parser { let localctx: DdlStatementContext = new DdlStatementContext(this, this._ctx, this.state); this.enterRule(localctx, 10, FlinkSqlParser.RULE_ddlStatement); try { - this.state = 360; + this.state = 406; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 4, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 346; + this.state = 392; this.createTable(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 347; + this.state = 393; this.createDatabase(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 348; + this.state = 394; this.createView(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 349; + this.state = 395; this.createFunction(); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 350; + this.state = 396; this.createCatalog(); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 351; + this.state = 397; this.alterTable(); } break; case 7: this.enterOuterAlt(localctx, 7); { - this.state = 352; + this.state = 398; this.alertView(); } break; case 8: this.enterOuterAlt(localctx, 8); { - this.state = 353; + this.state = 399; this.alterDatabase(); } break; case 9: this.enterOuterAlt(localctx, 9); { - this.state = 354; + this.state = 400; this.alterFunction(); } break; case 10: this.enterOuterAlt(localctx, 10); { - this.state = 355; + this.state = 401; this.dropCatalog(); } break; case 11: this.enterOuterAlt(localctx, 11); { - this.state = 356; + this.state = 402; this.dropTable(); } break; case 12: this.enterOuterAlt(localctx, 12); { - this.state = 357; + this.state = 403; this.dropDatabase(); } break; case 13: this.enterOuterAlt(localctx, 13); { - this.state = 358; + this.state = 404; this.dropView(); } break; case 14: this.enterOuterAlt(localctx, 14); { - this.state = 359; + this.state = 405; this.dropFunction(); } break; @@ -1404,16 +1487,16 @@ export default class FlinkSqlParser extends Parser { let localctx: DmlStatementContext = new DmlStatementContext(this, this._ctx, this.state); this.enterRule(localctx, 12, FlinkSqlParser.RULE_dmlStatement); try { - this.state = 364; + this.state = 410; this._errHandler.sync(this); switch (this._input.LA(1)) { case 4: case 70: case 72: - case 304: + case 322: this.enterOuterAlt(localctx, 1); { - this.state = 362; + this.state = 408; this.queryStatement(0); } break; @@ -1421,7 +1504,7 @@ export default class FlinkSqlParser extends Parser { case 80: this.enterOuterAlt(localctx, 2); { - this.state = 363; + this.state = 409; this.insertStatement(); } break; @@ -1451,7 +1534,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 366; + this.state = 412; _la = this._input.LA(1); if(!(_la===36 || _la===84)) { this._errHandler.recoverInline(this); @@ -1460,7 +1543,7 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 367; + this.state = 413; this.uid(); } } @@ -1485,24 +1568,24 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 369; + this.state = 415; this.match(FlinkSqlParser.EXPLAIN); - this.state = 373; + this.state = 419; this._errHandler.sync(this); switch (this._input.LA(1)) { case 87: case 88: case 89: { - this.state = 370; + this.state = 416; this.explainDetails(); } break; case 86: { - this.state = 371; + this.state = 417; this.match(FlinkSqlParser.PLAN); - this.state = 372; + this.state = 418; this.match(FlinkSqlParser.FOR); } break; @@ -1512,29 +1595,29 @@ export default class FlinkSqlParser extends Parser { case 78: case 79: case 80: - case 304: + case 322: break; default: break; } - this.state = 378; + this.state = 424; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 7, this._ctx) ) { case 1: { - this.state = 375; + this.state = 421; this.dmlStatement(); } break; case 2: { - this.state = 376; + this.state = 422; this.insertSimpleStatement(); } break; case 3: { - this.state = 377; + this.state = 423; this.insertMulStatement(); } break; @@ -1563,21 +1646,21 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 380; + this.state = 426; this.explainDetail(); - this.state = 385; + this.state = 431; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 381; + this.state = 427; this.match(FlinkSqlParser.COMMA); - this.state = 382; + this.state = 428; this.explainDetail(); } } - this.state = 387; + this.state = 433; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1605,7 +1688,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 388; + this.state = 434; _la = this._input.LA(1); if(!(((((_la - 87)) & ~0x1F) === 0 && ((1 << (_la - 87)) & 7) !== 0))) { this._errHandler.recoverInline(this); @@ -1636,32 +1719,32 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 22, FlinkSqlParser.RULE_useStatement); let _la: number; try { - this.state = 396; + this.state = 442; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 10, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 390; + this.state = 436; this.match(FlinkSqlParser.USE); - this.state = 392; + this.state = 438; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===239) { { - this.state = 391; + this.state = 437; this.match(FlinkSqlParser.CATALOG); } } - this.state = 394; + this.state = 440; this.uid(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 395; + this.state = 441; this.useModuleStatement(); } break; @@ -1689,25 +1772,25 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 398; + this.state = 444; this.match(FlinkSqlParser.USE); - this.state = 399; + this.state = 445; this.match(FlinkSqlParser.MODULES); - this.state = 400; + this.state = 446; this.uid(); - this.state = 405; + this.state = 451; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 401; + this.state = 447; this.match(FlinkSqlParser.COMMA); - this.state = 402; + this.state = 448; this.uid(); } } - this.state = 407; + this.state = 453; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1733,15 +1816,15 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 26, FlinkSqlParser.RULE_showStatememt); let _la: number; try { - this.state = 443; + this.state = 489; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 17, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 408; + this.state = 454; this.match(FlinkSqlParser.SHOW); - this.state = 409; + this.state = 455; _la = this._input.LA(1); if(!(_la===193 || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 7) !== 0))) { this._errHandler.recoverInline(this); @@ -1755,11 +1838,11 @@ export default class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 410; + this.state = 456; this.match(FlinkSqlParser.SHOW); - this.state = 411; + this.state = 457; this.match(FlinkSqlParser.CURRENT); - this.state = 412; + this.state = 458; _la = this._input.LA(1); if(!(_la===192 || _la===239)) { this._errHandler.recoverInline(this); @@ -1773,16 +1856,16 @@ export default class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(localctx, 3); { - this.state = 413; + this.state = 459; this.match(FlinkSqlParser.SHOW); - this.state = 414; + this.state = 460; this.match(FlinkSqlParser.TABLES); - this.state = 417; + this.state = 463; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===5 || _la===24) { { - this.state = 415; + this.state = 461; _la = this._input.LA(1); if(!(_la===5 || _la===24)) { this._errHandler.recoverInline(this); @@ -1791,17 +1874,17 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 416; + this.state = 462; this.uid(); } } - this.state = 420; + this.state = 466; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25 || _la===29) { { - this.state = 419; + this.state = 465; this.likePredicate(); } } @@ -1811,11 +1894,11 @@ export default class FlinkSqlParser extends Parser { case 4: this.enterOuterAlt(localctx, 4); { - this.state = 422; + this.state = 468; this.match(FlinkSqlParser.SHOW); - this.state = 423; + this.state = 469; this.match(FlinkSqlParser.COLUMNS); - this.state = 424; + this.state = 470; _la = this._input.LA(1); if(!(_la===5 || _la===24)) { this._errHandler.recoverInline(this); @@ -1824,14 +1907,14 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 425; + this.state = 471; this.uid(); - this.state = 427; + this.state = 473; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25 || _la===29) { { - this.state = 426; + this.state = 472; this.likePredicate(); } } @@ -1841,11 +1924,11 @@ export default class FlinkSqlParser extends Parser { case 5: this.enterOuterAlt(localctx, 5); { - this.state = 429; + this.state = 475; this.match(FlinkSqlParser.SHOW); - this.state = 430; + this.state = 476; this.match(FlinkSqlParser.CREATE); - this.state = 431; + this.state = 477; _la = this._input.LA(1); if(!(_la===74 || _la===76)) { this._errHandler.recoverInline(this); @@ -1854,45 +1937,45 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 432; + this.state = 478; this.uid(); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 433; + this.state = 479; this.match(FlinkSqlParser.SHOW); - this.state = 435; + this.state = 481; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===53) { { - this.state = 434; + this.state = 480; this.match(FlinkSqlParser.USER); } } - this.state = 437; + this.state = 483; this.match(FlinkSqlParser.FUNCTIONS); } break; case 7: this.enterOuterAlt(localctx, 7); { - this.state = 438; + this.state = 484; this.match(FlinkSqlParser.SHOW); - this.state = 440; + this.state = 486; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===52) { { - this.state = 439; + this.state = 485; this.match(FlinkSqlParser.FULL); } } - this.state = 442; + this.state = 488; this.match(FlinkSqlParser.MODULES); } break; @@ -1919,20 +2002,20 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 445; + this.state = 491; this.match(FlinkSqlParser.LOAD); - this.state = 446; + this.state = 492; this.match(FlinkSqlParser.MODULE); - this.state = 447; + this.state = 493; this.uid(); - this.state = 450; + this.state = 496; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 18, this._ctx) ) { case 1: { - this.state = 448; + this.state = 494; this.match(FlinkSqlParser.WITH); - this.state = 449; + this.state = 495; this.tablePropertyList(); } break; @@ -1960,11 +2043,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 452; + this.state = 498; this.match(FlinkSqlParser.UNLOAD); - this.state = 453; + this.state = 499; this.match(FlinkSqlParser.MODULE); - this.state = 454; + this.state = 500; this.uid(); } } @@ -1989,14 +2072,14 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 456; + this.state = 502; this.match(FlinkSqlParser.SET); - this.state = 458; + this.state = 504; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 19, this._ctx) ) { case 1: { - this.state = 457; + this.state = 503; this.tableProperty(); } break; @@ -2024,14 +2107,14 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 460; + this.state = 506; this.match(FlinkSqlParser.RESET); - this.state = 462; + this.state = 508; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 20, this._ctx) ) { case 1: { - this.state = 461; + this.state = 507; this.tablePropertyKey(); } break; @@ -2060,7 +2143,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 464; + this.state = 510; _la = this._input.LA(1); if(!(_la===6 || _la===82)) { this._errHandler.recoverInline(this); @@ -2069,9 +2152,9 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 465; + this.state = 511; this.match(FlinkSqlParser.JAR); - this.state = 466; + this.state = 512; this.jarFileName(); } } @@ -2095,28 +2178,28 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 38, FlinkSqlParser.RULE_dtAddStatement); let _la: number; try { - this.state = 507; + this.state = 553; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 24, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 468; + this.state = 514; this.match(FlinkSqlParser.ADD); - this.state = 469; + this.state = 515; this.match(FlinkSqlParser.JAR); - this.state = 470; + this.state = 516; this.match(FlinkSqlParser.WITH); - this.state = 471; + this.state = 517; this.match(FlinkSqlParser.FILE_PATH); - this.state = 474; + this.state = 520; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===7) { { - this.state = 472; + this.state = 518; this.match(FlinkSqlParser.AS); - this.state = 473; + this.state = 519; this.uid(); } } @@ -2126,34 +2209,34 @@ export default class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 476; + this.state = 522; this.match(FlinkSqlParser.ADD); - this.state = 477; + this.state = 523; this.match(FlinkSqlParser.FILE); - this.state = 478; + this.state = 524; this.match(FlinkSqlParser.WITH); - this.state = 479; + this.state = 525; this.match(FlinkSqlParser.FILE_PATH); - this.state = 482; + this.state = 528; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===7) { { - this.state = 480; + this.state = 526; this.match(FlinkSqlParser.AS); - this.state = 481; + this.state = 527; this.uid(); } } - this.state = 486; + this.state = 532; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===113) { { - this.state = 484; + this.state = 530; this.match(FlinkSqlParser.RENAME); - this.state = 485; + this.state = 531; this.uid(); } } @@ -2163,9 +2246,9 @@ export default class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(localctx, 3); { - this.state = 488; + this.state = 534; this.match(FlinkSqlParser.ADD); - this.state = 489; + this.state = 535; _la = this._input.LA(1); if(!(((((_la - 246)) & ~0x1F) === 0 && ((1 << (_la - 246)) & 31) !== 0))) { this._errHandler.recoverInline(this); @@ -2174,47 +2257,47 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 490; + this.state = 536; this.match(FlinkSqlParser.WITH); - this.state = 491; + this.state = 537; this.match(FlinkSqlParser.FILE_PATH); - this.state = 492; + this.state = 538; this.match(FlinkSqlParser.RENAME); - this.state = 493; + this.state = 539; this.uid(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 494; + this.state = 540; this.match(FlinkSqlParser.ADD); - this.state = 495; + this.state = 541; this.match(FlinkSqlParser.PYTHON_PARAMETER); - this.state = 496; + this.state = 542; this.match(FlinkSqlParser.FILE_PATH); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 497; + this.state = 543; this.match(FlinkSqlParser.ADD); - this.state = 498; + this.state = 544; this.match(FlinkSqlParser.ENGINE); - this.state = 499; + this.state = 545; this.match(FlinkSqlParser.FILE); - this.state = 500; + this.state = 546; this.match(FlinkSqlParser.WITH); - this.state = 501; + this.state = 547; this.match(FlinkSqlParser.FILE_PATH); - this.state = 502; + this.state = 548; this.match(FlinkSqlParser.RENAME); - this.state = 503; + this.state = 549; this.uid(); - this.state = 504; + this.state = 550; this.match(FlinkSqlParser.KEY); - this.state = 505; + this.state = 551; this.uid(); } break; @@ -2241,18 +2324,18 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 511; + this.state = 557; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 25, this._ctx) ) { case 1: { - this.state = 509; + this.state = 555; this.simpleCreateTable(); } break; case 2: { - this.state = 510; + this.state = 556; this.createTableAsSelect(); } break; @@ -2282,120 +2365,120 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 513; + this.state = 559; this.match(FlinkSqlParser.CREATE); - this.state = 515; + this.state = 561; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===166) { { - this.state = 514; + this.state = 560; this.match(FlinkSqlParser.TEMPORARY); } } - this.state = 517; + this.state = 563; this.match(FlinkSqlParser.TABLE); - this.state = 519; + this.state = 565; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===128) { { - this.state = 518; + this.state = 564; this.ifNotExists(); } } - this.state = 521; + this.state = 567; this.sourceTable(); - this.state = 522; + this.state = 568; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 523; + this.state = 569; this.columnOptionDefinition(); - this.state = 528; + this.state = 574; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 28, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 524; + this.state = 570; this.match(FlinkSqlParser.COMMA); - this.state = 525; + this.state = 571; this.columnOptionDefinition(); } } } - this.state = 530; + this.state = 576; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 28, this._ctx); } - this.state = 533; + this.state = 579; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 29, this._ctx) ) { case 1: { - this.state = 531; + this.state = 577; this.match(FlinkSqlParser.COMMA); - this.state = 532; + this.state = 578; this.watermarkDefinition(); } break; } - this.state = 537; + this.state = 583; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 30, this._ctx) ) { case 1: { - this.state = 535; + this.state = 581; this.match(FlinkSqlParser.COMMA); - this.state = 536; + this.state = 582; this.tableConstraint(); } break; } - this.state = 541; + this.state = 587; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===306) { + if (_la===326) { { - this.state = 539; + this.state = 585; this.match(FlinkSqlParser.COMMA); - this.state = 540; + this.state = 586; this.selfDefinitionClause(); } } - this.state = 543; + this.state = 589; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 545; + this.state = 591; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===115) { { - this.state = 544; + this.state = 590; this.commentSpec(); } } - this.state = 548; + this.state = 594; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===200) { { - this.state = 547; + this.state = 593; this.partitionDefinition(); } } - this.state = 550; + this.state = 596; this.withOption(); - this.state = 552; + this.state = 598; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===29) { { - this.state = 551; + this.state = 597; this.likeDefinition(); } } @@ -2424,32 +2507,32 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 554; + this.state = 600; this.match(FlinkSqlParser.CREATE); - this.state = 555; + this.state = 601; this.match(FlinkSqlParser.TABLE); - this.state = 557; + this.state = 603; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===128) { { - this.state = 556; + this.state = 602; this.ifNotExists(); } } - this.state = 559; + this.state = 605; this.sourceTable(); - this.state = 560; + this.state = 606; this.withOption(); - this.state = 563; + this.state = 609; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===7) { { - this.state = 561; + this.state = 607; this.match(FlinkSqlParser.AS); - this.state = 562; + this.state = 608; this.queryStatement(0); } } @@ -2475,27 +2558,27 @@ export default class FlinkSqlParser extends Parser { let localctx: ColumnOptionDefinitionContext = new ColumnOptionDefinitionContext(this, this._ctx, this.state); this.enterRule(localctx, 46, FlinkSqlParser.RULE_columnOptionDefinition); try { - this.state = 568; + this.state = 614; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 37, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 565; + this.state = 611; this.physicalColumnDefinition(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 566; + this.state = 612; this.metadataColumnDefinition(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 567; + this.state = 613; this.computedColumnDefinition(); } break; @@ -2523,26 +2606,26 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 570; + this.state = 616; this.columnName(); - this.state = 571; + this.state = 617; this.columnType(); - this.state = 573; + this.state = 619; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===185 || _la===256) { { - this.state = 572; + this.state = 618; this.columnConstraint(); } } - this.state = 576; + this.state = 622; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===115) { { - this.state = 575; + this.state = 621; this.commentSpec(); } } @@ -2568,20 +2651,20 @@ export default class FlinkSqlParser extends Parser { let localctx: ColumnNameContext = new ColumnNameContext(this, this._ctx, this.state); this.enterRule(localctx, 50, FlinkSqlParser.RULE_columnName); try { - this.state = 580; + this.state = 626; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 40, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 578; - this.plusUid(); + this.state = 624; + this.uid(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 579; + this.state = 625; this.expression(); } break; @@ -2609,27 +2692,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 582; + this.state = 628; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 583; + this.state = 629; this.columnName(); - this.state = 588; + this.state = 634; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 584; + this.state = 630; this.match(FlinkSqlParser.COMMA); - this.state = 585; + this.state = 631; this.columnName(); } } - this.state = 590; + this.state = 636; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 591; + this.state = 637; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -2653,18 +2736,18 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 54, FlinkSqlParser.RULE_columnType); let _la: number; try { - this.state = 630; + this.state = 676; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 283: - case 288: - case 291: + case 301: + case 306: + case 309: this.enterOuterAlt(localctx, 1); { - this.state = 593; + this.state = 639; localctx._typeName = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 283)) & ~0x1F) === 0 && ((1 << (_la - 283)) & 289) !== 0))) { + if(!(((((_la - 301)) & ~0x1F) === 0 && ((1 << (_la - 301)) & 289) !== 0))) { localctx._typeName = this._errHandler.recoverInline(this); } else { @@ -2673,65 +2756,65 @@ export default class FlinkSqlParser extends Parser { } } break; - case 265: - case 268: - case 269: - case 270: - case 271: - case 272: - case 276: - case 277: - case 278: - case 279: - case 280: - case 284: + case 283: case 286: - case 292: + case 287: + case 288: + case 289: + case 290: + case 294: + case 295: + case 296: + case 297: + case 298: + case 302: + case 304: + case 310: this.enterOuterAlt(localctx, 2); { - this.state = 594; + this.state = 640; localctx._typeName = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 265)) & ~0x1F) === 0 && ((1 << (_la - 265)) & 136902905) !== 0))) { + if(!(((((_la - 283)) & ~0x1F) === 0 && ((1 << (_la - 283)) & 136902905) !== 0))) { localctx._typeName = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 596; + this.state = 642; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===304) { + if (_la===322) { { - this.state = 595; + this.state = 641; this.lengthOneDimension(); } } } break; - case 285: + case 303: this.enterOuterAlt(localctx, 3); { - this.state = 598; + this.state = 644; localctx._typeName = this.match(FlinkSqlParser.TIMESTAMP); - this.state = 600; + this.state = 646; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===304) { + if (_la===322) { { - this.state = 599; + this.state = 645; this.lengthOneDimension(); } } - this.state = 608; + this.state = 654; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===70 || _la===71) { { - this.state = 602; + this.state = 648; _la = this._input.LA(1); if(!(_la===70 || _la===71)) { this._errHandler.recoverInline(this); @@ -2740,125 +2823,125 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 604; + this.state = 650; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===224) { { - this.state = 603; + this.state = 649; this.match(FlinkSqlParser.LOCAL); } } - this.state = 606; + this.state = 652; this.match(FlinkSqlParser.TIME); - this.state = 607; + this.state = 653; this.match(FlinkSqlParser.ZONE); } } } break; - case 273: - case 274: - case 275: - case 281: - case 282: + case 291: + case 292: + case 293: + case 299: + case 300: this.enterOuterAlt(localctx, 4); { - this.state = 610; + this.state = 656; localctx._typeName = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 273)) & ~0x1F) === 0 && ((1 << (_la - 273)) & 775) !== 0))) { + if(!(((((_la - 291)) & ~0x1F) === 0 && ((1 << (_la - 291)) & 775) !== 0))) { localctx._typeName = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 612; + this.state = 658; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===304) { + if (_la===322) { { - this.state = 611; + this.state = 657; this.lengthTwoOptionalDimension(); } } } break; - case 266: - case 287: + case 284: + case 305: this.enterOuterAlt(localctx, 5); { - this.state = 614; + this.state = 660; localctx._type_ = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===266 || _la===287)) { + if(!(_la===284 || _la===305)) { localctx._type_ = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 616; + this.state = 662; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===295) { + if (_la===313) { { - this.state = 615; + this.state = 661; this.lengthOneTypeDimension(); } } } break; - case 267: + case 285: this.enterOuterAlt(localctx, 6); { - this.state = 618; + this.state = 664; localctx._type_ = this.match(FlinkSqlParser.MAP); - this.state = 620; + this.state = 666; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===295) { + if (_la===313) { { - this.state = 619; + this.state = 665; this.mapTypeDimension(); } } } break; - case 290: + case 308: this.enterOuterAlt(localctx, 7); { - this.state = 622; + this.state = 668; localctx._type_ = this.match(FlinkSqlParser.ROW); - this.state = 624; + this.state = 670; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===295) { + if (_la===313) { { - this.state = 623; + this.state = 669; this.rowTypeDimension(); } } } break; - case 289: + case 307: this.enterOuterAlt(localctx, 8); { - this.state = 626; + this.state = 672; localctx._type_ = this.match(FlinkSqlParser.RAW); - this.state = 628; + this.state = 674; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===304) { + if (_la===322) { { - this.state = 627; + this.state = 673; this.lengthTwoStringDimension(); } } @@ -2890,11 +2973,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 632; + this.state = 678; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 633; + this.state = 679; this.decimalLiteral(); - this.state = 634; + this.state = 680; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -2920,23 +3003,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 636; + this.state = 682; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 637; + this.state = 683; this.decimalLiteral(); - this.state = 640; + this.state = 686; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===306) { + if (_la===326) { { - this.state = 638; + this.state = 684; this.match(FlinkSqlParser.COMMA); - this.state = 639; + this.state = 685; this.decimalLiteral(); } } - this.state = 642; + this.state = 688; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -2962,23 +3045,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 644; + this.state = 690; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 645; + this.state = 691; this.stringLiteral(); - this.state = 648; + this.state = 694; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===306) { + if (_la===326) { { - this.state = 646; + this.state = 692; this.match(FlinkSqlParser.COMMA); - this.state = 647; + this.state = 693; this.stringLiteral(); } } - this.state = 650; + this.state = 696; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -3003,11 +3086,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 652; + this.state = 698; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 653; + this.state = 699; this.columnType(); - this.state = 654; + this.state = 700; this.match(FlinkSqlParser.GREATER_SYMBOL); } } @@ -3032,17 +3115,17 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 656; + this.state = 702; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 657; + this.state = 703; this.columnType(); { - this.state = 658; + this.state = 704; this.match(FlinkSqlParser.COMMA); - this.state = 659; + this.state = 705; this.columnType(); } - this.state = 661; + this.state = 707; this.match(FlinkSqlParser.GREATER_SYMBOL); } } @@ -3068,31 +3151,31 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 663; + this.state = 709; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 664; + this.state = 710; this.columnName(); - this.state = 665; + this.state = 711; this.columnType(); - this.state = 672; + this.state = 718; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 666; + this.state = 712; this.match(FlinkSqlParser.COMMA); - this.state = 667; + this.state = 713; this.columnName(); - this.state = 668; + this.state = 714; this.columnType(); } } - this.state = 674; + this.state = 720; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 675; + this.state = 721; this.match(FlinkSqlParser.GREATER_SYMBOL); } } @@ -3118,25 +3201,25 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 679; + this.state = 725; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===185) { { - this.state = 677; + this.state = 723; this.match(FlinkSqlParser.CONSTRAINT); - this.state = 678; + this.state = 724; this.constraintName(); } } - this.state = 681; + this.state = 727; this.match(FlinkSqlParser.PRIMARY); - this.state = 682; + this.state = 728; this.match(FlinkSqlParser.KEY); - this.state = 683; + this.state = 729; this.match(FlinkSqlParser.NOT); - this.state = 684; + this.state = 730; this.match(FlinkSqlParser.ENFORCED); } } @@ -3161,9 +3244,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 686; + this.state = 732; this.match(FlinkSqlParser.COMMENT); - this.state = 687; + this.state = 733; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -3189,30 +3272,30 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 689; + this.state = 735; this.columnName(); - this.state = 690; + this.state = 736; this.columnType(); - this.state = 691; + this.state = 737; this.match(FlinkSqlParser.METADATA); - this.state = 694; + this.state = 740; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===5) { { - this.state = 692; + this.state = 738; this.match(FlinkSqlParser.FROM); - this.state = 693; + this.state = 739; this.metadataKey(); } } - this.state = 697; + this.state = 743; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===263) { { - this.state = 696; + this.state = 742; this.match(FlinkSqlParser.VIRTUAL); } } @@ -3240,7 +3323,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 699; + this.state = 745; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -3266,18 +3349,18 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 701; + this.state = 747; this.columnName(); - this.state = 702; + this.state = 748; this.match(FlinkSqlParser.AS); - this.state = 703; + this.state = 749; this.computedColumnExpression(); - this.state = 705; + this.state = 751; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===115) { { - this.state = 704; + this.state = 750; this.commentSpec(); } } @@ -3305,7 +3388,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 707; + this.state = 753; this.expression(); } } @@ -3330,15 +3413,15 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 709; + this.state = 755; this.match(FlinkSqlParser.WATERMARK); - this.state = 710; + this.state = 756; this.match(FlinkSqlParser.FOR); - this.state = 711; + this.state = 757; this.expression(); - this.state = 712; + this.state = 758; this.match(FlinkSqlParser.AS); - this.state = 713; + this.state = 759; this.expression(); } } @@ -3364,27 +3447,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 717; + this.state = 763; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===185) { { - this.state = 715; + this.state = 761; this.match(FlinkSqlParser.CONSTRAINT); - this.state = 716; + this.state = 762; this.constraintName(); } } - this.state = 719; + this.state = 765; this.match(FlinkSqlParser.PRIMARY); - this.state = 720; + this.state = 766; this.match(FlinkSqlParser.KEY); - this.state = 721; + this.state = 767; this.columnNameList(); - this.state = 722; + this.state = 768; this.match(FlinkSqlParser.NOT); - this.state = 723; + this.state = 769; this.match(FlinkSqlParser.ENFORCED); } } @@ -3409,7 +3492,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 725; + this.state = 771; this.identifier(); } } @@ -3434,11 +3517,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 727; + this.state = 773; this.match(FlinkSqlParser.PERIOD); - this.state = 728; + this.state = 774; this.match(FlinkSqlParser.FOR); - this.state = 729; + this.state = 775; this.match(FlinkSqlParser.SYSTEM_TIME); } } @@ -3463,11 +3546,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 731; + this.state = 777; this.match(FlinkSqlParser.PARTITIONED); - this.state = 732; + this.state = 778; this.match(FlinkSqlParser.BY); - this.state = 733; + this.state = 779; this.transformList(); } } @@ -3493,27 +3576,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 735; + this.state = 781; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 736; + this.state = 782; this.transform(); - this.state = 741; + this.state = 787; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 737; + this.state = 783; this.match(FlinkSqlParser.COMMA); - this.state = 738; + this.state = 784; this.transform(); } } - this.state = 743; + this.state = 789; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 744; + this.state = 790; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -3537,14 +3620,14 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 92, FlinkSqlParser.RULE_transform); let _la: number; try { - this.state = 759; + this.state = 805; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 62, this._ctx) ) { case 1: localctx = new IdentityTransformContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 746; + this.state = 792; this.qualifiedName(); } break; @@ -3552,29 +3635,29 @@ export default class FlinkSqlParser extends Parser { localctx = new ApplyTransformContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 747; + this.state = 793; (localctx as ApplyTransformContext)._transformName = this.identifier(); - this.state = 748; + this.state = 794; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 749; + this.state = 795; this.transformArgument(); - this.state = 754; + this.state = 800; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 750; + this.state = 796; this.match(FlinkSqlParser.COMMA); - this.state = 751; + this.state = 797; this.transformArgument(); } } - this.state = 756; + this.state = 802; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 757; + this.state = 803; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -3599,20 +3682,20 @@ export default class FlinkSqlParser extends Parser { let localctx: TransformArgumentContext = new TransformArgumentContext(this, this._ctx, this.state); this.enterRule(localctx, 94, FlinkSqlParser.RULE_transformArgument); try { - this.state = 763; + this.state = 809; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 63, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 761; + this.state = 807; this.qualifiedName(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 762; + this.state = 808; this.constant(); } break; @@ -3640,32 +3723,32 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 765; + this.state = 811; this.match(FlinkSqlParser.LIKE); - this.state = 766; + this.state = 812; this.sourceTable(); - this.state = 775; + this.state = 821; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 65, this._ctx) ) { case 1: { - this.state = 767; + this.state = 813; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 771; + this.state = 817; this._errHandler.sync(this); _la = this._input.LA(1); while (((((_la - 233)) & ~0x1F) === 0 && ((1 << (_la - 233)) & 7) !== 0)) { { { - this.state = 768; + this.state = 814; this.likeOption(); } } - this.state = 773; + this.state = 819; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 774; + this.state = 820; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -3693,7 +3776,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 777; + this.state = 823; this.uid(); } } @@ -3717,14 +3800,14 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 100, FlinkSqlParser.RULE_likeOption); let _la: number; try { - this.state = 783; + this.state = 829; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 66, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { { - this.state = 779; + this.state = 825; _la = this._input.LA(1); if(!(_la===233 || _la===234)) { this._errHandler.recoverInline(this); @@ -3733,7 +3816,7 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 780; + this.state = 826; _la = this._input.LA(1); if(!(_la===8 || _la===102 || _la===236)) { this._errHandler.recoverInline(this); @@ -3749,7 +3832,7 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 2); { { - this.state = 781; + this.state = 827; _la = this._input.LA(1); if(!(((((_la - 233)) & ~0x1F) === 0 && ((1 << (_la - 233)) & 7) !== 0))) { this._errHandler.recoverInline(this); @@ -3758,7 +3841,7 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 782; + this.state = 828; _la = this._input.LA(1); if(!(_la===167 || _la===237 || _la===238)) { this._errHandler.recoverInline(this); @@ -3793,13 +3876,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 785; + this.state = 831; this.match(FlinkSqlParser.CREATE); - this.state = 786; + this.state = 832; this.match(FlinkSqlParser.CATALOG); - this.state = 787; + this.state = 833; this.uid(); - this.state = 788; + this.state = 834; this.withOption(); } } @@ -3825,33 +3908,33 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 790; + this.state = 836; this.match(FlinkSqlParser.CREATE); - this.state = 791; + this.state = 837; this.match(FlinkSqlParser.DATABASE); - this.state = 793; + this.state = 839; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===128) { { - this.state = 792; + this.state = 838; this.ifNotExists(); } } - this.state = 795; + this.state = 841; this.uid(); - this.state = 797; + this.state = 843; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===115) { { - this.state = 796; + this.state = 842; this.commentSpec(); } } - this.state = 799; + this.state = 845; this.withOption(); } } @@ -3877,55 +3960,55 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 801; + this.state = 847; this.match(FlinkSqlParser.CREATE); - this.state = 803; + this.state = 849; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===166) { { - this.state = 802; + this.state = 848; this.match(FlinkSqlParser.TEMPORARY); } } - this.state = 805; + this.state = 851; this.match(FlinkSqlParser.VIEW); - this.state = 807; + this.state = 853; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===128) { { - this.state = 806; + this.state = 852; this.ifNotExists(); } } - this.state = 809; + this.state = 855; this.uid(); - this.state = 811; + this.state = 857; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===304) { + if (_la===322) { { - this.state = 810; + this.state = 856; this.columnNameList(); } } - this.state = 814; + this.state = 860; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===115) { { - this.state = 813; + this.state = 859; this.commentSpec(); } } - this.state = 816; + this.state = 862; this.match(FlinkSqlParser.AS); - this.state = 817; + this.state = 863; this.queryStatement(0); } } @@ -3951,52 +4034,52 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 819; + this.state = 865; this.match(FlinkSqlParser.CREATE); - this.state = 823; + this.state = 869; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 73, this._ctx) ) { case 1: { - this.state = 820; + this.state = 866; this.match(FlinkSqlParser.TEMPORARY); } break; case 2: { - this.state = 821; + this.state = 867; this.match(FlinkSqlParser.TEMPORARY); - this.state = 822; + this.state = 868; this.match(FlinkSqlParser.SYSTEM); } break; } - this.state = 825; + this.state = 871; this.match(FlinkSqlParser.FUNCTION); - this.state = 827; + this.state = 873; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===128) { { - this.state = 826; + this.state = 872; this.ifNotExists(); } } - this.state = 829; + this.state = 875; this.uid(); - this.state = 830; + this.state = 876; this.match(FlinkSqlParser.AS); - this.state = 831; + this.state = 877; this.identifier(); - this.state = 834; + this.state = 880; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===240) { { - this.state = 832; + this.state = 878; this.match(FlinkSqlParser.LANGUAGE); - this.state = 833; + this.state = 879; _la = this._input.LA(1); if(!(((((_la - 241)) & ~0x1F) === 0 && ((1 << (_la - 241)) & 7) !== 0))) { this._errHandler.recoverInline(this); @@ -4008,12 +4091,12 @@ export default class FlinkSqlParser extends Parser { } } - this.state = 837; + this.state = 883; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===143) { { - this.state = 836; + this.state = 882; this.usingClause(); } } @@ -4042,27 +4125,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 839; + this.state = 885; this.match(FlinkSqlParser.USING); - this.state = 840; + this.state = 886; this.match(FlinkSqlParser.JAR); - this.state = 841; + this.state = 887; this.jarFileName(); - this.state = 847; + this.state = 893; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 842; + this.state = 888; this.match(FlinkSqlParser.COMMA); - this.state = 843; + this.state = 889; this.match(FlinkSqlParser.JAR); - this.state = 844; + this.state = 890; this.jarFileName(); } } - this.state = 849; + this.state = 895; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -4089,7 +4172,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 850; + this.state = 896; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -4115,52 +4198,52 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 852; + this.state = 898; this.match(FlinkSqlParser.ALTER); - this.state = 853; + this.state = 899; this.match(FlinkSqlParser.TABLE); - this.state = 855; + this.state = 901; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===128) { { - this.state = 854; + this.state = 900; this.ifExists(); } } - this.state = 857; + this.state = 903; this.uid(); - this.state = 863; + this.state = 909; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 79, this._ctx) ) { case 1: { - this.state = 858; + this.state = 904; this.renameDefinition(); } break; case 2: { - this.state = 859; + this.state = 905; this.setKeyValueDefinition(); } break; case 3: { - this.state = 860; + this.state = 906; this.addConstraint(); } break; case 4: { - this.state = 861; + this.state = 907; this.dropConstraint(); } break; case 5: { - this.state = 862; + this.state = 908; this.addUnique(); } break; @@ -4189,21 +4272,21 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 865; + this.state = 911; this.match(FlinkSqlParser.RENAME); - this.state = 867; + this.state = 913; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===327) { + if (_la===347) { { - this.state = 866; + this.state = 912; this.uid(); } } - this.state = 869; + this.state = 915; this.match(FlinkSqlParser.TO); - this.state = 870; + this.state = 916; this.uid(); } } @@ -4228,9 +4311,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 872; + this.state = 918; this.match(FlinkSqlParser.SET); - this.state = 873; + this.state = 919; this.tablePropertyList(); } } @@ -4256,24 +4339,24 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 875; + this.state = 921; this.match(FlinkSqlParser.ADD); - this.state = 876; + this.state = 922; this.match(FlinkSqlParser.CONSTRAINT); - this.state = 877; + this.state = 923; this.constraintName(); - this.state = 878; + this.state = 924; this.match(FlinkSqlParser.PRIMARY); - this.state = 879; + this.state = 925; this.match(FlinkSqlParser.KEY); - this.state = 880; + this.state = 926; this.columnNameList(); - this.state = 882; + this.state = 928; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 881; + this.state = 927; this.notForced(); } } @@ -4301,11 +4384,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 884; + this.state = 930; this.match(FlinkSqlParser.DROP); - this.state = 885; + this.state = 931; this.match(FlinkSqlParser.CONSTRAINT); - this.state = 886; + this.state = 932; this.constraintName(); } } @@ -4330,11 +4413,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 888; + this.state = 934; this.match(FlinkSqlParser.ADD); - this.state = 889; + this.state = 935; this.match(FlinkSqlParser.UNIQUE); - this.state = 890; + this.state = 936; this.columnNameList(); } } @@ -4359,9 +4442,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 892; + this.state = 938; this.match(FlinkSqlParser.NOT); - this.state = 893; + this.state = 939; this.match(FlinkSqlParser.ENFORCED); } } @@ -4386,26 +4469,26 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 895; + this.state = 941; this.match(FlinkSqlParser.ALTER); - this.state = 896; + this.state = 942; this.match(FlinkSqlParser.VIEW); - this.state = 897; + this.state = 943; this.uid(); - this.state = 901; + this.state = 947; this._errHandler.sync(this); switch (this._input.LA(1)) { case 113: { - this.state = 898; + this.state = 944; this.renameDefinition(); } break; case 7: { - this.state = 899; + this.state = 945; this.match(FlinkSqlParser.AS); - this.state = 900; + this.state = 946; this.queryStatement(0); } break; @@ -4435,13 +4518,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 903; + this.state = 949; this.match(FlinkSqlParser.ALTER); - this.state = 904; + this.state = 950; this.match(FlinkSqlParser.DATABASE); - this.state = 905; + this.state = 951; this.uid(); - this.state = 906; + this.state = 952; this.setKeyValueDefinition(); } } @@ -4467,52 +4550,52 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 908; + this.state = 954; this.match(FlinkSqlParser.ALTER); - this.state = 912; + this.state = 958; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 83, this._ctx) ) { case 1: { - this.state = 909; + this.state = 955; this.match(FlinkSqlParser.TEMPORARY); } break; case 2: { - this.state = 910; + this.state = 956; this.match(FlinkSqlParser.TEMPORARY); - this.state = 911; + this.state = 957; this.match(FlinkSqlParser.SYSTEM); } break; } - this.state = 914; + this.state = 960; this.match(FlinkSqlParser.FUNCTION); - this.state = 916; + this.state = 962; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===128) { { - this.state = 915; + this.state = 961; this.ifExists(); } } - this.state = 918; + this.state = 964; this.uid(); - this.state = 919; + this.state = 965; this.match(FlinkSqlParser.AS); - this.state = 920; + this.state = 966; this.identifier(); - this.state = 923; + this.state = 969; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===240) { { - this.state = 921; + this.state = 967; this.match(FlinkSqlParser.LANGUAGE); - this.state = 922; + this.state = 968; _la = this._input.LA(1); if(!(((((_la - 241)) & ~0x1F) === 0 && ((1 << (_la - 241)) & 7) !== 0))) { this._errHandler.recoverInline(this); @@ -4548,21 +4631,21 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 925; + this.state = 971; this.match(FlinkSqlParser.DROP); - this.state = 926; + this.state = 972; this.match(FlinkSqlParser.CATALOG); - this.state = 928; + this.state = 974; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===128) { { - this.state = 927; + this.state = 973; this.ifExists(); } } - this.state = 930; + this.state = 976; this.uid(); } } @@ -4588,31 +4671,31 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 932; + this.state = 978; this.match(FlinkSqlParser.DROP); - this.state = 934; + this.state = 980; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===166) { { - this.state = 933; + this.state = 979; this.match(FlinkSqlParser.TEMPORARY); } } - this.state = 936; + this.state = 982; this.match(FlinkSqlParser.TABLE); - this.state = 938; + this.state = 984; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===128) { { - this.state = 937; + this.state = 983; this.ifExists(); } } - this.state = 940; + this.state = 986; this.uid(); } } @@ -4638,28 +4721,28 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 942; + this.state = 988; this.match(FlinkSqlParser.DROP); - this.state = 943; + this.state = 989; this.match(FlinkSqlParser.DATABASE); - this.state = 945; + this.state = 991; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===128) { { - this.state = 944; + this.state = 990; this.ifExists(); } } - this.state = 947; + this.state = 993; this.uid(); - this.state = 949; + this.state = 995; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===184 || _la===186) { { - this.state = 948; + this.state = 994; localctx._dropType = this._input.LT(1); _la = this._input.LA(1); if(!(_la===184 || _la===186)) { @@ -4696,31 +4779,31 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 951; + this.state = 997; this.match(FlinkSqlParser.DROP); - this.state = 953; + this.state = 999; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===166) { { - this.state = 952; + this.state = 998; this.match(FlinkSqlParser.TEMPORARY); } } - this.state = 955; + this.state = 1001; this.match(FlinkSqlParser.VIEW); - this.state = 957; + this.state = 1003; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===128) { { - this.state = 956; + this.state = 1002; this.ifExists(); } } - this.state = 959; + this.state = 1005; this.uid(); } } @@ -4746,39 +4829,39 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 961; + this.state = 1007; this.match(FlinkSqlParser.DROP); - this.state = 965; + this.state = 1011; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 93, this._ctx) ) { case 1: { - this.state = 962; + this.state = 1008; this.match(FlinkSqlParser.TEMPORARY); } break; case 2: { - this.state = 963; + this.state = 1009; this.match(FlinkSqlParser.TEMPORARY); - this.state = 964; + this.state = 1010; this.match(FlinkSqlParser.SYSTEM); } break; } - this.state = 967; + this.state = 1013; this.match(FlinkSqlParser.FUNCTION); - this.state = 969; + this.state = 1015; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===128) { { - this.state = 968; + this.state = 1014; this.ifExists(); } } - this.state = 971; + this.state = 1017; this.uid(); } } @@ -4802,24 +4885,24 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 144, FlinkSqlParser.RULE_insertStatement); let _la: number; try { - this.state = 979; + this.state = 1025; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 96, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { { - this.state = 974; + this.state = 1020; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===78) { { - this.state = 973; + this.state = 1019; this.match(FlinkSqlParser.EXECUTE); } } - this.state = 976; + this.state = 1022; this.insertSimpleStatement(); } } @@ -4828,9 +4911,9 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 2); { { - this.state = 977; + this.state = 1023; this.match(FlinkSqlParser.EXECUTE); - this.state = 978; + this.state = 1024; this.insertMulStatement(); } } @@ -4859,9 +4942,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 981; + this.state = 1027; this.match(FlinkSqlParser.INSERT); - this.state = 982; + this.state = 1028; _la = this._input.LA(1); if(!(_la===83 || _la===140)) { this._errHandler.recoverInline(this); @@ -4870,40 +4953,40 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 983; + this.state = 1029; this.uid(); - this.state = 992; + this.state = 1038; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 99, this._ctx) ) { case 1: { - this.state = 985; + this.state = 1031; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===60) { { - this.state = 984; + this.state = 1030; this.insertPartitionDefinition(); } } - this.state = 988; + this.state = 1034; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 98, this._ctx) ) { case 1: { - this.state = 987; + this.state = 1033; this.columnNameList(); } break; } - this.state = 990; + this.state = 1036; this.queryStatement(0); } break; case 2: { - this.state = 991; + this.state = 1037; this.valuesDefinition(); } break; @@ -4931,9 +5014,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 994; + this.state = 1040; this.match(FlinkSqlParser.PARTITION); - this.state = 995; + this.state = 1041; this.tablePropertyList(); } } @@ -4959,23 +5042,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 997; + this.state = 1043; this.match(FlinkSqlParser.VALUES); - this.state = 998; + this.state = 1044; this.valuesRowDefinition(); - this.state = 1003; + this.state = 1049; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 999; + this.state = 1045; this.match(FlinkSqlParser.COMMA); - this.state = 1000; + this.state = 1046; this.valuesRowDefinition(); } } - this.state = 1005; + this.state = 1051; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5003,27 +5086,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1006; + this.state = 1052; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1007; + this.state = 1053; this.constant(); - this.state = 1012; + this.state = 1058; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 1008; + this.state = 1054; this.match(FlinkSqlParser.COMMA); - this.state = 1009; + this.state = 1055; this.constant(); } } - this.state = 1014; + this.state = 1060; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1015; + this.state = 1061; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -5049,29 +5132,29 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1017; + this.state = 1063; this.match(FlinkSqlParser.STATEMENT); - this.state = 1018; + this.state = 1064; this.match(FlinkSqlParser.SET); - this.state = 1019; + this.state = 1065; this.match(FlinkSqlParser.BEGIN); - this.state = 1023; + this.state = 1069; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1020; + this.state = 1066; this.insertSimpleStatement(); - this.state = 1021; + this.state = 1067; this.match(FlinkSqlParser.SEMICOLON); } } - this.state = 1025; + this.state = 1071; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la===80); - this.state = 1027; + this.state = 1073; this.match(FlinkSqlParser.END); } } @@ -5109,71 +5192,53 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1060; + this.state = 1098; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 108, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 107, this._ctx) ) { case 1: { - this.state = 1030; + this.state = 1076; this.valuesCaluse(); } break; case 2: { - this.state = 1031; - this.match(FlinkSqlParser.WITH); - this.state = 1032; - this.withItem(); - this.state = 1037; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la===306) { - { - { - this.state = 1033; - this.match(FlinkSqlParser.COMMA); - this.state = 1034; - this.withItem(); - } - } - this.state = 1039; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 1040; + this.state = 1077; + this.withClause(); + this.state = 1078; this.queryStatement(5); } break; case 3: { - this.state = 1042; + this.state = 1080; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1043; + this.state = 1081; this.queryStatement(0); - this.state = 1044; + this.state = 1082; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: { - this.state = 1046; + this.state = 1084; this.selectClause(); - this.state = 1048; + this.state = 1086; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 104, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 103, this._ctx) ) { case 1: { - this.state = 1047; + this.state = 1085; this.orderByCaluse(); } break; } - this.state = 1051; + this.state = 1089; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 105, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 104, this._ctx) ) { case 1: { - this.state = 1050; + this.state = 1088; this.limitClause(); } break; @@ -5182,24 +5247,24 @@ export default class FlinkSqlParser extends Parser { break; case 5: { - this.state = 1053; + this.state = 1091; this.selectStatement(); - this.state = 1055; + this.state = 1093; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 106, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 105, this._ctx) ) { case 1: { - this.state = 1054; + this.state = 1092; this.orderByCaluse(); } break; } - this.state = 1058; + this.state = 1096; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 107, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 106, this._ctx) ) { case 1: { - this.state = 1057; + this.state = 1095; this.limitClause(); } break; @@ -5208,9 +5273,9 @@ export default class FlinkSqlParser extends Parser { break; } this._ctx.stop = this._input.LT(-1); - this.state = 1076; + this.state = 1114; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 112, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 111, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -5222,11 +5287,11 @@ export default class FlinkSqlParser extends Parser { localctx = new QueryStatementContext(this, _parentctx, _parentState); localctx._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_queryStatement); - this.state = 1062; + this.state = 1100; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1063; + this.state = 1101; localctx._operator = this._input.LT(1); _la = this._input.LA(1); if(!(((((_la - 105)) & ~0x1F) === 0 && ((1 << (_la - 105)) & 11) !== 0))) { @@ -5236,34 +5301,34 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1065; + this.state = 1103; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===8) { { - this.state = 1064; + this.state = 1102; this.match(FlinkSqlParser.ALL); } } - this.state = 1067; + this.state = 1105; localctx._right = this.queryStatement(0); - this.state = 1069; + this.state = 1107; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 110, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 109, this._ctx) ) { case 1: { - this.state = 1068; + this.state = 1106; this.orderByCaluse(); } break; } - this.state = 1072; + this.state = 1110; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 111, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 110, this._ctx) ) { case 1: { - this.state = 1071; + this.state = 1109; this.limitClause(); } break; @@ -5271,9 +5336,9 @@ export default class FlinkSqlParser extends Parser { } } } - this.state = 1078; + this.state = 1116; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 112, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 111, this._ctx); } } } @@ -5299,27 +5364,71 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1079; + this.state = 1117; this.match(FlinkSqlParser.VALUES); - this.state = 1080; + this.state = 1118; this.expression(); - this.state = 1085; + this.state = 1123; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 113, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 112, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1081; + this.state = 1119; this.match(FlinkSqlParser.COMMA); - this.state = 1082; + this.state = 1120; this.expression(); } } } - this.state = 1087; + this.state = 1125; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 113, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 112, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public withClause(): WithClauseContext { + let localctx: WithClauseContext = new WithClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 160, FlinkSqlParser.RULE_withClause); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1126; + this.match(FlinkSqlParser.WITH); + this.state = 1127; + this.withItem(); + this.state = 1132; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===326) { + { + { + this.state = 1128; + this.match(FlinkSqlParser.COMMA); + this.state = 1129; + this.withItem(); + } + } + this.state = 1134; + this._errHandler.sync(this); + _la = this._input.LA(1); } } } @@ -5340,50 +5449,50 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public withItem(): WithItemContext { let localctx: WithItemContext = new WithItemContext(this, this._ctx, this.state); - this.enterRule(localctx, 160, FlinkSqlParser.RULE_withItem); + this.enterRule(localctx, 162, FlinkSqlParser.RULE_withItem); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1088; + this.state = 1135; this.withItemName(); - this.state = 1100; + this.state = 1147; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===304) { + if (_la===322) { { - this.state = 1089; + this.state = 1136; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1090; + this.state = 1137; this.columnName(); - this.state = 1095; + this.state = 1142; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 1091; + this.state = 1138; this.match(FlinkSqlParser.COMMA); - this.state = 1092; + this.state = 1139; this.columnName(); } } - this.state = 1097; + this.state = 1144; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1098; + this.state = 1145; this.match(FlinkSqlParser.RR_BRACKET); } } - this.state = 1102; + this.state = 1149; this.match(FlinkSqlParser.AS); - this.state = 1103; + this.state = 1150; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1104; + this.state = 1151; this.queryStatement(0); - this.state = 1105; + this.state = 1152; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -5404,11 +5513,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public withItemName(): WithItemNameContext { let localctx: WithItemNameContext = new WithItemNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 162, FlinkSqlParser.RULE_withItemName); + this.enterRule(localctx, 164, FlinkSqlParser.RULE_withItemName); try { this.enterOuterAlt(localctx, 1); { - this.state = 1107; + this.state = 1154; this.identifier(); } } @@ -5429,55 +5538,72 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public selectStatement(): SelectStatementContext { let localctx: SelectStatementContext = new SelectStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 164, FlinkSqlParser.RULE_selectStatement); + this.enterRule(localctx, 166, FlinkSqlParser.RULE_selectStatement); try { - this.enterOuterAlt(localctx, 1); - { - this.state = 1109; - this.selectClause(); - this.state = 1110; - this.fromClause(); - this.state = 1112; + this.state = 1174; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 116, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 120, this._ctx) ) { case 1: + this.enterOuterAlt(localctx, 1); { - this.state = 1111; - this.whereClause(); + this.state = 1156; + this.selectClause(); + this.state = 1157; + this.fromClause(); + this.state = 1159; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 116, this._ctx) ) { + case 1: + { + this.state = 1158; + this.whereClause(); + } + break; + } + this.state = 1162; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 117, this._ctx) ) { + case 1: + { + this.state = 1161; + this.groupByClause(); + } + break; + } + this.state = 1165; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 118, this._ctx) ) { + case 1: + { + this.state = 1164; + this.havingClause(); + } + break; + } + this.state = 1168; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 119, this._ctx) ) { + case 1: + { + this.state = 1167; + this.windowClause(); + } + break; + } } break; - } - this.state = 1115; - this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 117, this._ctx) ) { - case 1: + case 2: + this.enterOuterAlt(localctx, 2); { - this.state = 1114; - this.groupByClause(); + this.state = 1170; + this.selectClause(); + this.state = 1171; + this.fromClause(); + this.state = 1172; + this.matchRecognizeClause(); } break; } - this.state = 1118; - this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 118, this._ctx) ) { - case 1: - { - this.state = 1117; - this.havingClause(); - } - break; - } - this.state = 1121; - this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 119, this._ctx) ) { - case 1: - { - this.state = 1120; - this.windowClause(); - } - break; - } - } } catch (re) { if (re instanceof RecognitionException) { @@ -5496,53 +5622,53 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public selectClause(): SelectClauseContext { let localctx: SelectClauseContext = new SelectClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 166, FlinkSqlParser.RULE_selectClause); + this.enterRule(localctx, 168, FlinkSqlParser.RULE_selectClause); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1123; + this.state = 1176; this.match(FlinkSqlParser.SELECT); - this.state = 1125; + this.state = 1178; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 120, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 121, this._ctx) ) { case 1: { - this.state = 1124; + this.state = 1177; this.setQuantifier(); } break; } - this.state = 1136; + this.state = 1189; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 122, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 123, this._ctx) ) { case 1: { - this.state = 1127; + this.state = 1180; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; case 2: { - this.state = 1128; + this.state = 1181; this.projectItemDefinition(); - this.state = 1133; + this.state = 1186; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 121, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 122, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1129; + this.state = 1182; this.match(FlinkSqlParser.COMMA); - this.state = 1130; + this.state = 1183; this.projectItemDefinition(); } } } - this.state = 1135; + this.state = 1188; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 121, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 122, this._ctx); } } break; @@ -5566,32 +5692,99 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public projectItemDefinition(): ProjectItemDefinitionContext { let localctx: ProjectItemDefinitionContext = new ProjectItemDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 168, FlinkSqlParser.RULE_projectItemDefinition); + this.enterRule(localctx, 170, FlinkSqlParser.RULE_projectItemDefinition); try { - this.enterOuterAlt(localctx, 1); - { - this.state = 1138; - this.expression(); - this.state = 1143; + this.state = 1199; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 124, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 126, this._ctx) ) { case 1: + this.enterOuterAlt(localctx, 1); { - this.state = 1140; + this.state = 1191; + this.overWindowItem(); + } + break; + case 2: + this.enterOuterAlt(localctx, 2); + { + this.state = 1192; + this.expression(); + this.state = 1197; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 123, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 125, this._ctx) ) { case 1: { - this.state = 1139; - this.match(FlinkSqlParser.AS); + this.state = 1194; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 124, this._ctx) ) { + case 1: + { + this.state = 1193; + this.match(FlinkSqlParser.AS); + } + break; + } + this.state = 1196; + this.expression(); } break; } - this.state = 1142; - this.expression(); } break; } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public overWindowItem(): OverWindowItemContext { + let localctx: OverWindowItemContext = new OverWindowItemContext(this, this._ctx, this.state); + this.enterRule(localctx, 172, FlinkSqlParser.RULE_overWindowItem); + try { + this.state = 1213; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 127, this._ctx) ) { + case 1: + this.enterOuterAlt(localctx, 1); + { + this.state = 1201; + this.primaryExpression(0); + this.state = 1202; + this.match(FlinkSqlParser.OVER); + this.state = 1203; + this.windowSpec(); + this.state = 1204; + this.match(FlinkSqlParser.AS); + this.state = 1205; + this.strictIdentifier(); + } + break; + case 2: + this.enterOuterAlt(localctx, 2); + { + this.state = 1207; + this.primaryExpression(0); + this.state = 1208; + this.match(FlinkSqlParser.OVER); + this.state = 1209; + this.errorCapturingIdentifier(); + this.state = 1210; + this.match(FlinkSqlParser.AS); + this.state = 1211; + this.strictIdentifier(); + } + break; } } catch (re) { @@ -5611,13 +5804,13 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public fromClause(): FromClauseContext { let localctx: FromClauseContext = new FromClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 170, FlinkSqlParser.RULE_fromClause); + this.enterRule(localctx, 174, FlinkSqlParser.RULE_fromClause); try { this.enterOuterAlt(localctx, 1); { - this.state = 1145; + this.state = 1215; this.match(FlinkSqlParser.FROM); - this.state = 1146; + this.state = 1216; this.tableExpression(0); } } @@ -5648,39 +5841,57 @@ export default class FlinkSqlParser extends Parser { let _parentState: number = this.state; let localctx: TableExpressionContext = new TableExpressionContext(this, this._ctx, _parentState); let _prevctx: TableExpressionContext = localctx; - let _startState: number = 172; - this.enterRecursionRule(localctx, 172, FlinkSqlParser.RULE_tableExpression, _p); + let _startState: number = 176; + this.enterRecursionRule(localctx, 176, FlinkSqlParser.RULE_tableExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(localctx, 1); { - { - this.state = 1149; - this.tableReference(); - this.state = 1154; + this.state = 1229; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 125, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 1150; - this.match(FlinkSqlParser.COMMA); - this.state = 1151; - this.tableReference(); - } - } - } - this.state = 1156; + switch ( this._interp.adaptivePredict(this._input, 129, this._ctx) ) { + case 1: + { + this.state = 1219; + this.tableReference(); + this.state = 1224; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 125, this._ctx); - } + _alt = this._interp.adaptivePredict(this._input, 128, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 1220; + this.match(FlinkSqlParser.COMMA); + this.state = 1221; + this.tableReference(); + } + } + } + this.state = 1226; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 128, this._ctx); + } + } + break; + case 2: + { + this.state = 1227; + this.inlineDataValueClause(); + } + break; + case 3: + { + this.state = 1228; + this.windoTVFClause(); + } + break; } this._ctx.stop = this._input.LT(-1); - this.state = 1178; + this.state = 1252; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 131, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 135, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -5688,49 +5899,49 @@ export default class FlinkSqlParser extends Parser { } _prevctx = localctx; { - this.state = 1176; + this.state = 1250; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 130, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 134, this._ctx) ) { case 1: { localctx = new TableExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_tableExpression); - this.state = 1157; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + this.state = 1231; + if (!(this.precpred(this._ctx, 3))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1158; + this.state = 1232; this.match(FlinkSqlParser.CROSS); - this.state = 1159; + this.state = 1233; this.match(FlinkSqlParser.JOIN); - this.state = 1160; - this.tableExpression(2); + this.state = 1234; + this.tableExpression(4); } break; case 2: { localctx = new TableExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_tableExpression); - this.state = 1161; - if (!(this.precpred(this._ctx, 2))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); + this.state = 1235; + if (!(this.precpred(this._ctx, 4))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 1163; + this.state = 1237; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===54) { { - this.state = 1162; + this.state = 1236; this.match(FlinkSqlParser.NATURAL); } } - this.state = 1166; + this.state = 1240; this._errHandler.sync(this); _la = this._input.LA(1); if (((((_la - 48)) & ~0x1F) === 0 && ((1 << (_la - 48)) & 27) !== 0)) { { - this.state = 1165; + this.state = 1239; _la = this._input.LA(1); if(!(((((_la - 48)) & ~0x1F) === 0 && ((1 << (_la - 48)) & 27) !== 0))) { this._errHandler.recoverInline(this); @@ -5742,26 +5953,26 @@ export default class FlinkSqlParser extends Parser { } } - this.state = 1169; + this.state = 1243; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===47) { { - this.state = 1168; + this.state = 1242; this.match(FlinkSqlParser.OUTER); } } - this.state = 1171; + this.state = 1245; this.match(FlinkSqlParser.JOIN); - this.state = 1172; + this.state = 1246; this.tableExpression(0); - this.state = 1174; + this.state = 1248; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 129, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 133, this._ctx) ) { case 1: { - this.state = 1173; + this.state = 1247; this.joinCondition(); } break; @@ -5771,9 +5982,9 @@ export default class FlinkSqlParser extends Parser { } } } - this.state = 1180; + this.state = 1254; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 131, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 135, this._ctx); } } } @@ -5794,18 +6005,18 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public tableReference(): TableReferenceContext { let localctx: TableReferenceContext = new TableReferenceContext(this, this._ctx, this.state); - this.enterRule(localctx, 174, FlinkSqlParser.RULE_tableReference); + this.enterRule(localctx, 178, FlinkSqlParser.RULE_tableReference); try { this.enterOuterAlt(localctx, 1); { - this.state = 1181; + this.state = 1255; this.tablePrimary(); - this.state = 1183; + this.state = 1257; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 132, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 136, this._ctx) ) { case 1: { - this.state = 1182; + this.state = 1256; this.tableAlias(); } break; @@ -5829,53 +6040,53 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public tablePrimary(): TablePrimaryContext { let localctx: TablePrimaryContext = new TablePrimaryContext(this, this._ctx, this.state); - this.enterRule(localctx, 176, FlinkSqlParser.RULE_tablePrimary); + this.enterRule(localctx, 180, FlinkSqlParser.RULE_tablePrimary); let _la: number; try { - this.state = 1226; + this.state = 1300; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 139, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 143, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1186; + this.state = 1260; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===74) { { - this.state = 1185; + this.state = 1259; this.match(FlinkSqlParser.TABLE); } } - this.state = 1188; + this.state = 1262; this.tablePath(); - this.state = 1190; + this.state = 1264; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 134, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 138, this._ctx) ) { case 1: { - this.state = 1189; + this.state = 1263; this.systemTimePeriod(); } break; } - this.state = 1196; + this.state = 1270; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 136, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 140, this._ctx) ) { case 1: { - this.state = 1193; + this.state = 1267; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 135, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 139, this._ctx) ) { case 1: { - this.state = 1192; + this.state = 1266; this.match(FlinkSqlParser.AS); } break; } - this.state = 1195; + this.state = 1269; this.correlationName(); } break; @@ -5885,71 +6096,71 @@ export default class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1198; + this.state = 1272; this.match(FlinkSqlParser.LATERAL); - this.state = 1199; + this.state = 1273; this.match(FlinkSqlParser.TABLE); - this.state = 1200; + this.state = 1274; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1201; + this.state = 1275; this.functionName(); - this.state = 1202; + this.state = 1276; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1203; + this.state = 1277; this.expression(); - this.state = 1208; + this.state = 1282; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 1204; + this.state = 1278; this.match(FlinkSqlParser.COMMA); - this.state = 1205; + this.state = 1279; this.expression(); } } - this.state = 1210; + this.state = 1284; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1211; + this.state = 1285; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1212; + this.state = 1286; this.match(FlinkSqlParser.RR_BRACKET); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1215; + this.state = 1289; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===57) { { - this.state = 1214; + this.state = 1288; this.match(FlinkSqlParser.LATERAL); } } - this.state = 1217; + this.state = 1291; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1218; + this.state = 1292; this.queryStatement(0); - this.state = 1219; + this.state = 1293; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1221; + this.state = 1295; this.match(FlinkSqlParser.UNNEST); - this.state = 1222; + this.state = 1296; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1223; + this.state = 1297; this.expression(); - this.state = 1224; + this.state = 1298; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -5972,11 +6183,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public tablePath(): TablePathContext { let localctx: TablePathContext = new TablePathContext(this, this._ctx, this.state); - this.enterRule(localctx, 178, FlinkSqlParser.RULE_tablePath); + this.enterRule(localctx, 182, FlinkSqlParser.RULE_tablePath); try { this.enterOuterAlt(localctx, 1); { - this.state = 1228; + this.state = 1302; this.uid(); } } @@ -5997,19 +6208,19 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public systemTimePeriod(): SystemTimePeriodContext { let localctx: SystemTimePeriodContext = new SystemTimePeriodContext(this, this._ctx, this.state); - this.enterRule(localctx, 180, FlinkSqlParser.RULE_systemTimePeriod); + this.enterRule(localctx, 184, FlinkSqlParser.RULE_systemTimePeriod); try { this.enterOuterAlt(localctx, 1); { - this.state = 1230; + this.state = 1304; this.match(FlinkSqlParser.FOR); - this.state = 1231; + this.state = 1305; this.match(FlinkSqlParser.SYSTEM_TIME); - this.state = 1232; + this.state = 1306; this.match(FlinkSqlParser.AS); - this.state = 1233; + this.state = 1307; this.match(FlinkSqlParser.OF); - this.state = 1234; + this.state = 1308; this.dateTimeExpression(); } } @@ -6030,11 +6241,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public dateTimeExpression(): DateTimeExpressionContext { let localctx: DateTimeExpressionContext = new DateTimeExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 182, FlinkSqlParser.RULE_dateTimeExpression); + this.enterRule(localctx, 186, FlinkSqlParser.RULE_dateTimeExpression); try { this.enterOuterAlt(localctx, 1); { - this.state = 1236; + this.state = 1310; this.expression(); } } @@ -6053,49 +6264,338 @@ export default class FlinkSqlParser extends Parser { return localctx; } // @RuleVersion(0) + public inlineDataValueClause(): InlineDataValueClauseContext { + let localctx: InlineDataValueClauseContext = new InlineDataValueClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 188, FlinkSqlParser.RULE_inlineDataValueClause); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1312; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1313; + this.valuesDefinition(); + this.state = 1314; + this.match(FlinkSqlParser.RR_BRACKET); + this.state = 1315; + this.tableAlias(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public windoTVFClause(): WindoTVFClauseContext { + let localctx: WindoTVFClauseContext = new WindoTVFClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 190, FlinkSqlParser.RULE_windoTVFClause); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1317; + this.match(FlinkSqlParser.TABLE); + this.state = 1318; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1319; + this.windowTVFExression(); + this.state = 1320; + this.match(FlinkSqlParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public windowTVFExression(): WindowTVFExressionContext { + let localctx: WindowTVFExressionContext = new WindowTVFExressionContext(this, this._ctx, this.state); + this.enterRule(localctx, 192, FlinkSqlParser.RULE_windowTVFExression); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1322; + this.windoTVFName(); + this.state = 1323; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1324; + this.windowTVFParam(); + this.state = 1329; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===326) { + { + { + this.state = 1325; + this.match(FlinkSqlParser.COMMA); + this.state = 1326; + this.windowTVFParam(); + } + } + this.state = 1331; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1332; + this.match(FlinkSqlParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public windoTVFName(): WindoTVFNameContext { + let localctx: WindoTVFNameContext = new WindoTVFNameContext(this, this._ctx, this.state); + this.enterRule(localctx, 194, FlinkSqlParser.RULE_windoTVFName); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1334; + _la = this._input.LA(1); + if(!(((((_la - 265)) & ~0x1F) === 0 && ((1 << (_la - 265)) & 7) !== 0))) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public windowTVFParam(): WindowTVFParamContext { + let localctx: WindowTVFParamContext = new WindowTVFParamContext(this, this._ctx, this.state); + this.enterRule(localctx, 196, FlinkSqlParser.RULE_windowTVFParam); + try { + this.state = 1351; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 145, this._ctx) ) { + case 1: + this.enterOuterAlt(localctx, 1); + { + this.state = 1336; + this.match(FlinkSqlParser.TABLE); + this.state = 1337; + this.timeAttrColumn(); + } + break; + case 2: + this.enterOuterAlt(localctx, 2); + { + this.state = 1338; + this.columnDescriptor(); + } + break; + case 3: + this.enterOuterAlt(localctx, 3); + { + this.state = 1339; + this.timeIntervalExpression(); + } + break; + case 4: + this.enterOuterAlt(localctx, 4); + { + this.state = 1340; + this.match(FlinkSqlParser.DATA); + this.state = 1341; + this.match(FlinkSqlParser.DOUBLE_ARROW); + this.state = 1342; + this.match(FlinkSqlParser.TABLE); + this.state = 1343; + this.timeAttrColumn(); + } + break; + case 5: + this.enterOuterAlt(localctx, 5); + { + this.state = 1344; + this.match(FlinkSqlParser.TIMECOL); + this.state = 1345; + this.match(FlinkSqlParser.DOUBLE_ARROW); + this.state = 1346; + this.columnDescriptor(); + } + break; + case 6: + this.enterOuterAlt(localctx, 6); + { + this.state = 1347; + this.timeIntervalParamName(); + this.state = 1348; + this.match(FlinkSqlParser.DOUBLE_ARROW); + this.state = 1349; + this.timeIntervalExpression(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public timeIntervalParamName(): TimeIntervalParamNameContext { + let localctx: TimeIntervalParamNameContext = new TimeIntervalParamNameContext(this, this._ctx, this.state); + this.enterRule(localctx, 198, FlinkSqlParser.RULE_timeIntervalParamName); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1353; + _la = this._input.LA(1); + if(!(_la===118 || ((((_la - 269)) & ~0x1F) === 0 && ((1 << (_la - 269)) & 31) !== 0))) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public columnDescriptor(): ColumnDescriptorContext { + let localctx: ColumnDescriptorContext = new ColumnDescriptorContext(this, this._ctx, this.state); + this.enterRule(localctx, 200, FlinkSqlParser.RULE_columnDescriptor); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1355; + this.match(FlinkSqlParser.DESCRIPTOR); + this.state = 1356; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1357; + this.uid(); + this.state = 1358; + this.match(FlinkSqlParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) public joinCondition(): JoinConditionContext { let localctx: JoinConditionContext = new JoinConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 184, FlinkSqlParser.RULE_joinCondition); + this.enterRule(localctx, 202, FlinkSqlParser.RULE_joinCondition); let _la: number; try { - this.state = 1252; + this.state = 1374; this._errHandler.sync(this); switch (this._input.LA(1)) { case 55: this.enterOuterAlt(localctx, 1); { - this.state = 1238; + this.state = 1360; this.match(FlinkSqlParser.ON); - this.state = 1239; + this.state = 1361; this.booleanExpression(0); } break; case 143: this.enterOuterAlt(localctx, 2); { - this.state = 1240; + this.state = 1362; this.match(FlinkSqlParser.USING); - this.state = 1241; + this.state = 1363; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1242; + this.state = 1364; this.uid(); - this.state = 1247; + this.state = 1369; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 1243; + this.state = 1365; this.match(FlinkSqlParser.COMMA); - this.state = 1244; + this.state = 1366; this.uid(); } } - this.state = 1249; + this.state = 1371; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1250; + this.state = 1372; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6120,13 +6620,13 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public whereClause(): WhereClauseContext { let localctx: WhereClauseContext = new WhereClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 186, FlinkSqlParser.RULE_whereClause); + this.enterRule(localctx, 204, FlinkSqlParser.RULE_whereClause); try { this.enterOuterAlt(localctx, 1); { - this.state = 1254; + this.state = 1376; this.match(FlinkSqlParser.WHERE); - this.state = 1255; + this.state = 1377; this.booleanExpression(0); } } @@ -6147,264 +6647,32 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public groupByClause(): GroupByClauseContext { let localctx: GroupByClauseContext = new GroupByClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 188, FlinkSqlParser.RULE_groupByClause); + this.enterRule(localctx, 206, FlinkSqlParser.RULE_groupByClause); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1257; + this.state = 1379; this.match(FlinkSqlParser.GROUP); - this.state = 1258; + this.state = 1380; this.match(FlinkSqlParser.BY); - this.state = 1259; + this.state = 1381; this.groupItemDefinition(); - this.state = 1264; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 142, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 1260; - this.match(FlinkSqlParser.COMMA); - this.state = 1261; - this.groupItemDefinition(); - } - } - } - this.state = 1266; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 142, this._ctx); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) - public groupItemDefinition(): GroupItemDefinitionContext { - let localctx: GroupItemDefinitionContext = new GroupItemDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 190, FlinkSqlParser.RULE_groupItemDefinition); - let _la: number; - try { - this.state = 1318; - this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 147, this._ctx) ) { - case 1: - this.enterOuterAlt(localctx, 1); - { - this.state = 1267; - this.expression(); - } - break; - case 2: - this.enterOuterAlt(localctx, 2); - { - this.state = 1268; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1269; - this.match(FlinkSqlParser.RR_BRACKET); - } - break; - case 3: - this.enterOuterAlt(localctx, 3); - { - this.state = 1270; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1271; - this.expression(); - this.state = 1276; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la===306) { - { - { - this.state = 1272; - this.match(FlinkSqlParser.COMMA); - this.state = 1273; - this.expression(); - } - } - this.state = 1278; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 1279; - this.match(FlinkSqlParser.RR_BRACKET); - } - break; - case 4: - this.enterOuterAlt(localctx, 4); - { - this.state = 1281; - this.match(FlinkSqlParser.CUBE); - this.state = 1282; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1283; - this.expression(); - this.state = 1288; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la===306) { - { - { - this.state = 1284; - this.match(FlinkSqlParser.COMMA); - this.state = 1285; - this.expression(); - } - } - this.state = 1290; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 1291; - this.match(FlinkSqlParser.RR_BRACKET); - } - break; - case 5: - this.enterOuterAlt(localctx, 5); - { - this.state = 1293; - this.match(FlinkSqlParser.ROLLUP); - this.state = 1294; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1295; - this.expression(); - this.state = 1300; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la===306) { - { - { - this.state = 1296; - this.match(FlinkSqlParser.COMMA); - this.state = 1297; - this.expression(); - } - } - this.state = 1302; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 1303; - this.match(FlinkSqlParser.RR_BRACKET); - } - break; - case 6: - this.enterOuterAlt(localctx, 6); - { - this.state = 1305; - this.match(FlinkSqlParser.GROUPING); - this.state = 1306; - this.match(FlinkSqlParser.SETS); - this.state = 1307; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1308; - this.groupItemDefinition(); - this.state = 1313; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la===306) { - { - { - this.state = 1309; - this.match(FlinkSqlParser.COMMA); - this.state = 1310; - this.groupItemDefinition(); - } - } - this.state = 1315; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 1316; - this.match(FlinkSqlParser.RR_BRACKET); - } - break; - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) - public havingClause(): HavingClauseContext { - let localctx: HavingClauseContext = new HavingClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 192, FlinkSqlParser.RULE_havingClause); - try { - this.enterOuterAlt(localctx, 1); - { - this.state = 1320; - this.match(FlinkSqlParser.HAVING); - this.state = 1321; - this.booleanExpression(0); - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) - public orderByCaluse(): OrderByCaluseContext { - let localctx: OrderByCaluseContext = new OrderByCaluseContext(this, this._ctx, this.state); - this.enterRule(localctx, 194, FlinkSqlParser.RULE_orderByCaluse); - try { - let _alt: number; - this.enterOuterAlt(localctx, 1); - { - this.state = 1323; - this.match(FlinkSqlParser.ORDER); - this.state = 1324; - this.match(FlinkSqlParser.BY); - this.state = 1325; - this.orderItemDefition(); - this.state = 1330; + this.state = 1386; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 148, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1326; + this.state = 1382; this.match(FlinkSqlParser.COMMA); - this.state = 1327; - this.orderItemDefition(); + this.state = 1383; + this.groupItemDefinition(); } } } - this.state = 1332; + this.state = 1388; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 148, this._ctx); } @@ -6425,24 +6693,661 @@ export default class FlinkSqlParser extends Parser { return localctx; } // @RuleVersion(0) - public orderItemDefition(): OrderItemDefitionContext { - let localctx: OrderItemDefitionContext = new OrderItemDefitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 196, FlinkSqlParser.RULE_orderItemDefition); + public groupItemDefinition(): GroupItemDefinitionContext { + let localctx: GroupItemDefinitionContext = new GroupItemDefinitionContext(this, this._ctx, this.state); + this.enterRule(localctx, 208, FlinkSqlParser.RULE_groupItemDefinition); + let _la: number; + try { + this.state = 1428; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 152, this._ctx) ) { + case 1: + this.enterOuterAlt(localctx, 1); + { + this.state = 1389; + this.expression(); + } + break; + case 2: + this.enterOuterAlt(localctx, 2); + { + this.state = 1390; + this.groupWindowFunction(); + } + break; + case 3: + this.enterOuterAlt(localctx, 3); + { + this.state = 1391; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1392; + this.match(FlinkSqlParser.RR_BRACKET); + } + break; + case 4: + this.enterOuterAlt(localctx, 4); + { + this.state = 1393; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1394; + this.expression(); + this.state = 1399; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===326) { + { + { + this.state = 1395; + this.match(FlinkSqlParser.COMMA); + this.state = 1396; + this.expression(); + } + } + this.state = 1401; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1402; + this.match(FlinkSqlParser.RR_BRACKET); + } + break; + case 5: + this.enterOuterAlt(localctx, 5); + { + this.state = 1404; + this.groupingSetsNotaionName(); + this.state = 1405; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1406; + this.expression(); + this.state = 1411; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===326) { + { + { + this.state = 1407; + this.match(FlinkSqlParser.COMMA); + this.state = 1408; + this.expression(); + } + } + this.state = 1413; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1414; + this.match(FlinkSqlParser.RR_BRACKET); + } + break; + case 6: + this.enterOuterAlt(localctx, 6); + { + this.state = 1416; + this.groupingSets(); + this.state = 1417; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1418; + this.groupItemDefinition(); + this.state = 1423; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===326) { + { + { + this.state = 1419; + this.match(FlinkSqlParser.COMMA); + this.state = 1420; + this.groupItemDefinition(); + } + } + this.state = 1425; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1426; + this.match(FlinkSqlParser.RR_BRACKET); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public groupingSets(): GroupingSetsContext { + let localctx: GroupingSetsContext = new GroupingSetsContext(this, this._ctx, this.state); + this.enterRule(localctx, 210, FlinkSqlParser.RULE_groupingSets); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1430; + this.match(FlinkSqlParser.GROUPING); + this.state = 1431; + this.match(FlinkSqlParser.SETS); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public groupingSetsNotaionName(): GroupingSetsNotaionNameContext { + let localctx: GroupingSetsNotaionNameContext = new GroupingSetsNotaionNameContext(this, this._ctx, this.state); + this.enterRule(localctx, 212, FlinkSqlParser.RULE_groupingSetsNotaionName); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1333; - this.expression(); - this.state = 1335; + this.state = 1433; + _la = this._input.LA(1); + if(!(_la===16 || _la===17)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public groupWindowFunction(): GroupWindowFunctionContext { + let localctx: GroupWindowFunctionContext = new GroupWindowFunctionContext(this, this._ctx, this.state); + this.enterRule(localctx, 214, FlinkSqlParser.RULE_groupWindowFunction); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1435; + this.groupWindowFunctionName(); + this.state = 1436; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1437; + this.timeAttrColumn(); + this.state = 1438; + this.match(FlinkSqlParser.COMMA); + this.state = 1439; + this.timeIntervalExpression(); + this.state = 1440; + this.match(FlinkSqlParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public groupWindowFunctionName(): GroupWindowFunctionNameContext { + let localctx: GroupWindowFunctionNameContext = new GroupWindowFunctionNameContext(this, this._ctx, this.state); + this.enterRule(localctx, 216, FlinkSqlParser.RULE_groupWindowFunctionName); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1442; + _la = this._input.LA(1); + if(!(((((_la - 265)) & ~0x1F) === 0 && ((1 << (_la - 265)) & 515) !== 0))) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public timeAttrColumn(): TimeAttrColumnContext { + let localctx: TimeAttrColumnContext = new TimeAttrColumnContext(this, this._ctx, this.state); + this.enterRule(localctx, 218, FlinkSqlParser.RULE_timeAttrColumn); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1444; + this.uid(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public havingClause(): HavingClauseContext { + let localctx: HavingClauseContext = new HavingClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 220, FlinkSqlParser.RULE_havingClause); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1446; + this.match(FlinkSqlParser.HAVING); + this.state = 1447; + this.booleanExpression(0); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public windowClause(): WindowClauseContext { + let localctx: WindowClauseContext = new WindowClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 222, FlinkSqlParser.RULE_windowClause); + try { + let _alt: number; + this.enterOuterAlt(localctx, 1); + { + this.state = 1449; + this.match(FlinkSqlParser.WINDOW); + this.state = 1450; + this.namedWindow(); + this.state = 1455; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 149, this._ctx) ) { + _alt = this._interp.adaptivePredict(this._input, 153, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 1451; + this.match(FlinkSqlParser.COMMA); + this.state = 1452; + this.namedWindow(); + } + } + } + this.state = 1457; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 153, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public namedWindow(): NamedWindowContext { + let localctx: NamedWindowContext = new NamedWindowContext(this, this._ctx, this.state); + this.enterRule(localctx, 224, FlinkSqlParser.RULE_namedWindow); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1458; + localctx._name = this.errorCapturingIdentifier(); + this.state = 1459; + this.match(FlinkSqlParser.AS); + this.state = 1460; + this.windowSpec(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public windowSpec(): WindowSpecContext { + let localctx: WindowSpecContext = new WindowSpecContext(this, this._ctx, this.state); + this.enterRule(localctx, 226, FlinkSqlParser.RULE_windowSpec); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1463; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 4)) & ~0x1F) === 0 && ((1 << (_la - 4)) & 4294967295) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 4294967167) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 4291015671) !== 0) || ((((_la - 102)) & ~0x1F) === 0 && ((1 << (_la - 102)) & 4294967295) !== 0) || ((((_la - 134)) & ~0x1F) === 0 && ((1 << (_la - 134)) & 4294967295) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 4294967295) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4294934527) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 1971324639) !== 0) || ((((_la - 283)) & ~0x1F) === 0 && ((1 << (_la - 283)) & 266320383) !== 0) || ((((_la - 343)) & ~0x1F) === 0 && ((1 << (_la - 343)) & 19) !== 0)) { + { + this.state = 1462; + localctx._name = this.errorCapturingIdentifier(); + } + } + + this.state = 1465; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1467; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===60) { + { + this.state = 1466; + this.partitionByClause(); + } + } + + this.state = 1470; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===18) { + { + this.state = 1469; + this.orderByCaluse(); + } + } + + this.state = 1473; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===61 || _la===62) { + { + this.state = 1472; + this.windowFrame(); + } + } + + this.state = 1475; + this.match(FlinkSqlParser.RR_BRACKET); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public matchRecognizeClause(): MatchRecognizeClauseContext { + let localctx: MatchRecognizeClauseContext = new MatchRecognizeClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 228, FlinkSqlParser.RULE_matchRecognizeClause); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1477; + this.match(FlinkSqlParser.MATCH_RECOGNIZE); + this.state = 1478; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1480; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===60) { + { + this.state = 1479; + this.partitionByClause(); + } + } + + this.state = 1483; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===18) { + { + this.state = 1482; + this.orderByCaluse(); + } + } + + this.state = 1486; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===276) { + { + this.state = 1485; + this.measuresClause(); + } + } + + this.state = 1489; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===8 || _la===278) { + { + this.state = 1488; + this.outputMode(); + } + } + + this.state = 1492; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===68) { + { + this.state = 1491; + this.afterMatchStrategy(); + } + } + + this.state = 1495; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===277) { + { + this.state = 1494; + this.patternDefination(); + } + } + + this.state = 1497; + this.patternVariablesDefination(); + this.state = 1498; + this.match(FlinkSqlParser.RR_BRACKET); + this.state = 1503; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 165, this._ctx) ) { case 1: { - this.state = 1334; + this.state = 1500; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 164, this._ctx) ) { + case 1: + { + this.state = 1499; + this.match(FlinkSqlParser.AS); + } + break; + } + this.state = 1502; + this.strictIdentifier(); + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public orderByCaluse(): OrderByCaluseContext { + let localctx: OrderByCaluseContext = new OrderByCaluseContext(this, this._ctx, this.state); + this.enterRule(localctx, 230, FlinkSqlParser.RULE_orderByCaluse); + try { + let _alt: number; + this.enterOuterAlt(localctx, 1); + { + this.state = 1505; + this.match(FlinkSqlParser.ORDER); + this.state = 1506; + this.match(FlinkSqlParser.BY); + this.state = 1507; + this.orderItemDefition(); + this.state = 1512; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 166, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 1508; + this.match(FlinkSqlParser.COMMA); + this.state = 1509; + this.orderItemDefition(); + } + } + } + this.state = 1514; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 166, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public orderItemDefition(): OrderItemDefitionContext { + let localctx: OrderItemDefitionContext = new OrderItemDefitionContext(this, this._ctx, this.state); + this.enterRule(localctx, 232, FlinkSqlParser.RULE_orderItemDefition); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1515; + this.expression(); + this.state = 1517; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 167, this._ctx) ) { + case 1: + { + this.state = 1516; + localctx._ordering = this._input.LT(1); _la = this._input.LA(1); if(!(_la===35 || _la===36)) { - this._errHandler.recoverInline(this); + localctx._ordering = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } + this.state = 1521; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 168, this._ctx) ) { + case 1: + { + this.state = 1519; + this.match(FlinkSqlParser.NULLS); + this.state = 1520; + localctx._nullOrder = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===67 || _la===69)) { + localctx._nullOrder = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); @@ -6470,24 +7375,24 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public limitClause(): LimitClauseContext { let localctx: LimitClauseContext = new LimitClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 198, FlinkSqlParser.RULE_limitClause); + this.enterRule(localctx, 234, FlinkSqlParser.RULE_limitClause); try { this.enterOuterAlt(localctx, 1); { - this.state = 1337; + this.state = 1523; this.match(FlinkSqlParser.LIMIT); - this.state = 1340; + this.state = 1526; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 150, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 169, this._ctx) ) { case 1: { - this.state = 1338; + this.state = 1524; this.match(FlinkSqlParser.ALL); } break; case 2: { - this.state = 1339; + this.state = 1525; localctx._limit = this.expression(); } break; @@ -6509,233 +7414,264 @@ export default class FlinkSqlParser extends Parser { return localctx; } // @RuleVersion(0) - public windowClause(): WindowClauseContext { - let localctx: WindowClauseContext = new WindowClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 200, FlinkSqlParser.RULE_windowClause); - try { - let _alt: number; - this.enterOuterAlt(localctx, 1); - { - this.state = 1342; - this.match(FlinkSqlParser.WINDOW); - this.state = 1343; - this.namedWindow(); - this.state = 1348; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 151, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 1344; - this.match(FlinkSqlParser.COMMA); - this.state = 1345; - this.namedWindow(); - } - } - } - this.state = 1350; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 151, this._ctx); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) - public namedWindow(): NamedWindowContext { - let localctx: NamedWindowContext = new NamedWindowContext(this, this._ctx, this.state); - this.enterRule(localctx, 202, FlinkSqlParser.RULE_namedWindow); - try { - this.enterOuterAlt(localctx, 1); - { - this.state = 1351; - localctx._name = this.errorCapturingIdentifier(); - this.state = 1352; - this.match(FlinkSqlParser.AS); - this.state = 1353; - this.windowSpec(); - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) - public windowSpec(): WindowSpecContext { - let localctx: WindowSpecContext = new WindowSpecContext(this, this._ctx, this.state); - this.enterRule(localctx, 204, FlinkSqlParser.RULE_windowSpec); + public partitionByClause(): PartitionByClauseContext { + let localctx: PartitionByClauseContext = new PartitionByClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 236, FlinkSqlParser.RULE_partitionByClause); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1356; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 4)) & ~0x1F) === 0 && ((1 << (_la - 4)) & 4294967295) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 4294967167) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 4291015671) !== 0) || ((((_la - 102)) & ~0x1F) === 0 && ((1 << (_la - 102)) & 4294967295) !== 0) || ((((_la - 134)) & ~0x1F) === 0 && ((1 << (_la - 134)) & 4294967295) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 4294967295) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4294934527) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 1971324639) !== 0) || ((((_la - 265)) & ~0x1F) === 0 && ((1 << (_la - 265)) & 266320383) !== 0) || ((((_la - 323)) & ~0x1F) === 0 && ((1 << (_la - 323)) & 19) !== 0)) { - { - this.state = 1355; - localctx._name = this.errorCapturingIdentifier(); - } - } - - this.state = 1358; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1369; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===18) { - { - this.state = 1359; - this.match(FlinkSqlParser.ORDER); - this.state = 1360; - this.match(FlinkSqlParser.BY); - this.state = 1361; - this.sortItem(); - this.state = 1366; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la===306) { - { - { - this.state = 1362; - this.match(FlinkSqlParser.COMMA); - this.state = 1363; - this.sortItem(); - } - } - this.state = 1368; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } - } - - this.state = 1381; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===60) { - { - this.state = 1371; - this.match(FlinkSqlParser.PARTITION); - this.state = 1372; - this.match(FlinkSqlParser.BY); - this.state = 1373; - this.expression(); - this.state = 1378; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la===306) { - { - { - this.state = 1374; - this.match(FlinkSqlParser.COMMA); - this.state = 1375; - this.expression(); - } - } - this.state = 1380; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } - } - - this.state = 1384; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===61 || _la===62) { - { - this.state = 1383; - this.windowFrame(); - } - } - - this.state = 1386; - this.match(FlinkSqlParser.RR_BRACKET); - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) - public sortItem(): SortItemContext { - let localctx: SortItemContext = new SortItemContext(this, this._ctx, this.state); - this.enterRule(localctx, 206, FlinkSqlParser.RULE_sortItem); - let _la: number; - try { - this.enterOuterAlt(localctx, 1); - { - this.state = 1388; + this.state = 1528; + this.match(FlinkSqlParser.PARTITION); + this.state = 1529; + this.match(FlinkSqlParser.BY); + this.state = 1530; this.expression(); - this.state = 1390; + this.state = 1535; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===35 || _la===36) { + while (_la===326) { { - this.state = 1389; - localctx._ordering = this._input.LT(1); + { + this.state = 1531; + this.match(FlinkSqlParser.COMMA); + this.state = 1532; + this.expression(); + } + } + this.state = 1537; + this._errHandler.sync(this); _la = this._input.LA(1); - if(!(_la===35 || _la===36)) { - localctx._ordering = this._errHandler.recoverInline(this); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public quantifiers(): QuantifiersContext { + let localctx: QuantifiersContext = new QuantifiersContext(this, this._ctx, this.state); + this.enterRule(localctx, 238, FlinkSqlParser.RULE_quantifiers); + try { + this.state = 1554; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 171, this._ctx) ) { + case 1: + this.enterOuterAlt(localctx, 1); + { + { + this.state = 1538; + this.match(FlinkSqlParser.ASTERISK_SIGN); } - else { - this._errHandler.reportMatch(this); - this.consume(); } + break; + case 2: + this.enterOuterAlt(localctx, 2); + { + { + this.state = 1539; + this.match(FlinkSqlParser.ADD_SIGN); + } + } + break; + case 3: + this.enterOuterAlt(localctx, 3); + { + { + this.state = 1540; + this.match(FlinkSqlParser.QUESTION_MARK_SIGN); + } + } + break; + case 4: + this.enterOuterAlt(localctx, 4); + { + { + this.state = 1541; + this.match(FlinkSqlParser.LB_BRACKET); + this.state = 1542; + this.match(FlinkSqlParser.DIG_LITERAL); + this.state = 1543; + this.match(FlinkSqlParser.COMMA); + this.state = 1544; + this.match(FlinkSqlParser.DIG_LITERAL); + this.state = 1545; + this.match(FlinkSqlParser.RB_BRACKET); + } + } + break; + case 5: + this.enterOuterAlt(localctx, 5); + { + { + this.state = 1546; + this.match(FlinkSqlParser.LB_BRACKET); + this.state = 1547; + this.match(FlinkSqlParser.DIG_LITERAL); + this.state = 1548; + this.match(FlinkSqlParser.COMMA); + this.state = 1549; + this.match(FlinkSqlParser.RB_BRACKET); + } + } + break; + case 6: + this.enterOuterAlt(localctx, 6); + { + { + this.state = 1550; + this.match(FlinkSqlParser.LB_BRACKET); + this.state = 1551; + this.match(FlinkSqlParser.COMMA); + this.state = 1552; + this.match(FlinkSqlParser.DIG_LITERAL); + this.state = 1553; + this.match(FlinkSqlParser.RB_BRACKET); + } + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public measuresClause(): MeasuresClauseContext { + let localctx: MeasuresClauseContext = new MeasuresClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 240, FlinkSqlParser.RULE_measuresClause); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1556; + this.match(FlinkSqlParser.MEASURES); + this.state = 1557; + this.projectItemDefinition(); + this.state = 1562; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===326) { + { + { + this.state = 1558; + this.match(FlinkSqlParser.COMMA); + this.state = 1559; + this.projectItemDefinition(); + } + } + this.state = 1564; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public patternDefination(): PatternDefinationContext { + let localctx: PatternDefinationContext = new PatternDefinationContext(this, this._ctx, this.state); + this.enterRule(localctx, 242, FlinkSqlParser.RULE_patternDefination); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1565; + this.match(FlinkSqlParser.PATTERN); + this.state = 1566; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1568; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + { + { + this.state = 1567; + this.patternVariable(); + } + } + this.state = 1570; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la===344 || _la===347); + this.state = 1572; + this.match(FlinkSqlParser.RR_BRACKET); + this.state = 1574; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===230) { + { + this.state = 1573; + this.withinClause(); } } - this.state = 1394; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public patternVariable(): PatternVariableContext { + let localctx: PatternVariableContext = new PatternVariableContext(this, this._ctx, this.state); + this.enterRule(localctx, 244, FlinkSqlParser.RULE_patternVariable); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1576; + this.unquotedIdentifier(); + this.state = 1578; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===34) { + if (((((_la - 324)) & ~0x1F) === 0 && ((1 << (_la - 324)) & 135681) !== 0)) { { - this.state = 1392; - this.match(FlinkSqlParser.NULLS); - this.state = 1393; - localctx._nullOrder = this._input.LT(1); - _la = this._input.LA(1); - if(!(_la===67 || _la===69)) { - localctx._nullOrder = this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } + this.state = 1577; + this.quantifiers(); } } @@ -6756,28 +7692,224 @@ export default class FlinkSqlParser extends Parser { return localctx; } // @RuleVersion(0) + public outputMode(): OutputModeContext { + let localctx: OutputModeContext = new OutputModeContext(this, this._ctx, this.state); + this.enterRule(localctx, 246, FlinkSqlParser.RULE_outputMode); + try { + this.state = 1588; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 8: + this.enterOuterAlt(localctx, 1); + { + this.state = 1580; + this.match(FlinkSqlParser.ALL); + this.state = 1581; + this.match(FlinkSqlParser.ROWS); + this.state = 1582; + this.match(FlinkSqlParser.PER); + this.state = 1583; + this.match(FlinkSqlParser.MATCH); + } + break; + case 278: + this.enterOuterAlt(localctx, 2); + { + this.state = 1584; + this.match(FlinkSqlParser.ONE); + this.state = 1585; + this.match(FlinkSqlParser.ROW); + this.state = 1586; + this.match(FlinkSqlParser.PER); + this.state = 1587; + this.match(FlinkSqlParser.MATCH); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public afterMatchStrategy(): AfterMatchStrategyContext { + let localctx: AfterMatchStrategyContext = new AfterMatchStrategyContext(this, this._ctx, this.state); + this.enterRule(localctx, 248, FlinkSqlParser.RULE_afterMatchStrategy); + try { + this.state = 1614; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 177, this._ctx) ) { + case 1: + this.enterOuterAlt(localctx, 1); + { + this.state = 1590; + this.match(FlinkSqlParser.AFTER); + this.state = 1591; + this.match(FlinkSqlParser.MATCH); + this.state = 1592; + this.match(FlinkSqlParser.KW_SKIP); + this.state = 1593; + this.match(FlinkSqlParser.PAST); + this.state = 1594; + this.match(FlinkSqlParser.LAST); + this.state = 1595; + this.match(FlinkSqlParser.ROW); + } + break; + case 2: + this.enterOuterAlt(localctx, 2); + { + this.state = 1596; + this.match(FlinkSqlParser.AFTER); + this.state = 1597; + this.match(FlinkSqlParser.MATCH); + this.state = 1598; + this.match(FlinkSqlParser.KW_SKIP); + this.state = 1599; + this.match(FlinkSqlParser.TO); + this.state = 1600; + this.match(FlinkSqlParser.NEXT); + this.state = 1601; + this.match(FlinkSqlParser.ROW); + } + break; + case 3: + this.enterOuterAlt(localctx, 3); + { + this.state = 1602; + this.match(FlinkSqlParser.AFTER); + this.state = 1603; + this.match(FlinkSqlParser.MATCH); + this.state = 1604; + this.match(FlinkSqlParser.KW_SKIP); + this.state = 1605; + this.match(FlinkSqlParser.TO); + this.state = 1606; + this.match(FlinkSqlParser.LAST); + this.state = 1607; + this.unquotedIdentifier(); + } + break; + case 4: + this.enterOuterAlt(localctx, 4); + { + this.state = 1608; + this.match(FlinkSqlParser.AFTER); + this.state = 1609; + this.match(FlinkSqlParser.MATCH); + this.state = 1610; + this.match(FlinkSqlParser.KW_SKIP); + this.state = 1611; + this.match(FlinkSqlParser.TO); + this.state = 1612; + this.match(FlinkSqlParser.FIRST); + this.state = 1613; + this.unquotedIdentifier(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public patternVariablesDefination(): PatternVariablesDefinationContext { + let localctx: PatternVariablesDefinationContext = new PatternVariablesDefinationContext(this, this._ctx, this.state); + this.enterRule(localctx, 250, FlinkSqlParser.RULE_patternVariablesDefination); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1616; + this.match(FlinkSqlParser.DEFINE); + this.state = 1617; + this.projectItemDefinition(); + this.state = 1622; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===326) { + { + { + this.state = 1618; + this.match(FlinkSqlParser.COMMA); + this.state = 1619; + this.projectItemDefinition(); + } + } + this.state = 1624; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) public windowFrame(): WindowFrameContext { let localctx: WindowFrameContext = new WindowFrameContext(this, this._ctx, this.state); - this.enterRule(localctx, 208, FlinkSqlParser.RULE_windowFrame); + this.enterRule(localctx, 252, FlinkSqlParser.RULE_windowFrame); try { - this.state = 1400; + this.state = 1634; this._errHandler.sync(this); switch (this._input.LA(1)) { case 61: this.enterOuterAlt(localctx, 1); { - this.state = 1396; + this.state = 1625; this.match(FlinkSqlParser.RANGE); - this.state = 1397; + this.state = 1626; + this.match(FlinkSqlParser.BETWEEN); + this.state = 1627; + this.timeIntervalExpression(); + this.state = 1628; this.frameBound(); } break; case 62: this.enterOuterAlt(localctx, 2); { - this.state = 1398; + this.state = 1630; this.match(FlinkSqlParser.ROWS); - this.state = 1399; + this.state = 1631; + this.match(FlinkSqlParser.BETWEEN); + this.state = 1632; + this.match(FlinkSqlParser.DIG_LITERAL); + this.state = 1633; this.frameBound(); } break; @@ -6802,14 +7934,74 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public frameBound(): FrameBoundContext { let localctx: FrameBoundContext = new FrameBoundContext(this, this._ctx, this.state); - this.enterRule(localctx, 210, FlinkSqlParser.RULE_frameBound); + this.enterRule(localctx, 254, FlinkSqlParser.RULE_frameBound); try { this.enterOuterAlt(localctx, 1); { - this.state = 1402; - this.expression(); - this.state = 1403; + this.state = 1636; this.match(FlinkSqlParser.PRECEDING); + this.state = 1637; + this.match(FlinkSqlParser.AND); + this.state = 1638; + this.match(FlinkSqlParser.CURRENT); + this.state = 1639; + this.match(FlinkSqlParser.ROW); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public withinClause(): WithinClauseContext { + let localctx: WithinClauseContext = new WithinClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 256, FlinkSqlParser.RULE_withinClause); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1641; + this.match(FlinkSqlParser.WITHIN); + this.state = 1642; + this.timeIntervalExpression(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public timeIntervalExpression(): TimeIntervalExpressionContext { + let localctx: TimeIntervalExpressionContext = new TimeIntervalExpressionContext(this, this._ctx, this.state); + this.enterRule(localctx, 258, FlinkSqlParser.RULE_timeIntervalExpression); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1644; + this.match(FlinkSqlParser.INTERVAL); + this.state = 1645; + this.match(FlinkSqlParser.STRING_LITERAL); + this.state = 1646; + this.match(FlinkSqlParser.ID_LITERAL); } } catch (re) { @@ -6829,11 +8021,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public expression(): ExpressionContext { let localctx: ExpressionContext = new ExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 212, FlinkSqlParser.RULE_expression); + this.enterRule(localctx, 260, FlinkSqlParser.RULE_expression); try { this.enterOuterAlt(localctx, 1); { - this.state = 1405; + this.state = 1648; this.booleanExpression(0); } } @@ -6864,24 +8056,24 @@ export default class FlinkSqlParser extends Parser { let _parentState: number = this.state; let localctx: BooleanExpressionContext = new BooleanExpressionContext(this, this._ctx, _parentState); let _prevctx: BooleanExpressionContext = localctx; - let _startState: number = 214; - this.enterRecursionRule(localctx, 214, FlinkSqlParser.RULE_booleanExpression, _p); + let _startState: number = 262; + this.enterRecursionRule(localctx, 262, FlinkSqlParser.RULE_booleanExpression, _p); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1419; + this.state = 1662; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 162, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 181, this._ctx) ) { case 1: { localctx = new LogicalNotContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1408; + this.state = 1651; this.match(FlinkSqlParser.NOT); - this.state = 1409; + this.state = 1652; this.booleanExpression(5); } break; @@ -6890,13 +8082,13 @@ export default class FlinkSqlParser extends Parser { localctx = new ExistsContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1410; + this.state = 1653; this.match(FlinkSqlParser.EXISTS); - this.state = 1411; + this.state = 1654; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1412; + this.state = 1655; this.queryStatement(0); - this.state = 1413; + this.state = 1656; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6905,14 +8097,14 @@ export default class FlinkSqlParser extends Parser { localctx = new PredicatedContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1415; + this.state = 1658; this.valueExpression(0); - this.state = 1417; + this.state = 1660; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 161, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 180, this._ctx) ) { case 1: { - this.state = 1416; + this.state = 1659; this.predicate(); } break; @@ -6921,9 +8113,9 @@ export default class FlinkSqlParser extends Parser { break; } this._ctx.stop = this._input.LT(-1); - this.state = 1429; + this.state = 1672; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 164, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 183, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -6931,21 +8123,21 @@ export default class FlinkSqlParser extends Parser { } _prevctx = localctx; { - this.state = 1427; + this.state = 1670; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 163, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 182, this._ctx) ) { case 1: { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); (localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_booleanExpression); - this.state = 1421; + this.state = 1664; if (!(this.precpred(this._ctx, 2))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 1422; + this.state = 1665; (localctx as LogicalBinaryContext)._operator = this.match(FlinkSqlParser.AND); - this.state = 1423; + this.state = 1666; (localctx as LogicalBinaryContext)._right = this.booleanExpression(3); } break; @@ -6954,22 +8146,22 @@ export default class FlinkSqlParser extends Parser { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); (localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_booleanExpression); - this.state = 1424; + this.state = 1667; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 1425; + this.state = 1668; (localctx as LogicalBinaryContext)._operator = this.match(FlinkSqlParser.OR); - this.state = 1426; + this.state = 1669; (localctx as LogicalBinaryContext)._right = this.booleanExpression(2); } break; } } } - this.state = 1431; + this.state = 1674; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 164, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 183, this._ctx); } } } @@ -6990,145 +8182,145 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public predicate(): PredicateContext { let localctx: PredicateContext = new PredicateContext(this, this._ctx, this.state); - this.enterRule(localctx, 216, FlinkSqlParser.RULE_predicate); + this.enterRule(localctx, 264, FlinkSqlParser.RULE_predicate); let _la: number; try { - this.state = 1515; + this.state = 1758; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 177, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 196, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1433; + this.state = 1676; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 1432; + this.state = 1675; this.match(FlinkSqlParser.NOT); } } - this.state = 1435; + this.state = 1678; localctx._kind = this.match(FlinkSqlParser.BETWEEN); - this.state = 1436; + this.state = 1679; localctx._lower = this.valueExpression(0); - this.state = 1437; + this.state = 1680; this.match(FlinkSqlParser.AND); - this.state = 1438; + this.state = 1681; localctx._upper = this.valueExpression(0); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1441; + this.state = 1684; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 1440; + this.state = 1683; this.match(FlinkSqlParser.NOT); } } - this.state = 1443; + this.state = 1686; localctx._kind = this.match(FlinkSqlParser.IN); - this.state = 1444; + this.state = 1687; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1445; + this.state = 1688; this.expression(); - this.state = 1450; + this.state = 1693; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 1446; + this.state = 1689; this.match(FlinkSqlParser.COMMA); - this.state = 1447; + this.state = 1690; this.expression(); } } - this.state = 1452; + this.state = 1695; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1453; + this.state = 1696; this.match(FlinkSqlParser.RR_BRACKET); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1456; + this.state = 1699; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 1455; + this.state = 1698; this.match(FlinkSqlParser.NOT); } } - this.state = 1458; + this.state = 1701; localctx._kind = this.match(FlinkSqlParser.IN); - this.state = 1459; + this.state = 1702; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1460; + this.state = 1703; this.queryStatement(0); - this.state = 1461; + this.state = 1704; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1463; + this.state = 1706; localctx._kind = this.match(FlinkSqlParser.EXISTS); - this.state = 1464; + this.state = 1707; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1465; + this.state = 1708; this.queryStatement(0); - this.state = 1466; + this.state = 1709; this.match(FlinkSqlParser.RR_BRACKET); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 1469; + this.state = 1712; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 1468; + this.state = 1711; this.match(FlinkSqlParser.NOT); } } - this.state = 1471; + this.state = 1714; localctx._kind = this.match(FlinkSqlParser.RLIKE); - this.state = 1472; + this.state = 1715; localctx._pattern = this.valueExpression(0); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 1474; + this.state = 1717; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 1473; + this.state = 1716; this.match(FlinkSqlParser.NOT); } } - this.state = 1476; + this.state = 1719; localctx._kind = this.match(FlinkSqlParser.LIKE); - this.state = 1477; + this.state = 1720; localctx._quantifier = this._input.LT(1); _la = this._input.LA(1); if(!(_la===8 || _la===9)) { @@ -7138,40 +8330,40 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1491; + this.state = 1734; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 172, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 191, this._ctx) ) { case 1: { - this.state = 1478; + this.state = 1721; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1479; + this.state = 1722; this.match(FlinkSqlParser.RR_BRACKET); } break; case 2: { - this.state = 1480; + this.state = 1723; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1481; + this.state = 1724; this.expression(); - this.state = 1486; + this.state = 1729; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 1482; + this.state = 1725; this.match(FlinkSqlParser.COMMA); - this.state = 1483; + this.state = 1726; this.expression(); } } - this.state = 1488; + this.state = 1731; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1489; + this.state = 1732; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -7181,57 +8373,57 @@ export default class FlinkSqlParser extends Parser { case 7: this.enterOuterAlt(localctx, 7); { - this.state = 1494; + this.state = 1737; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 1493; + this.state = 1736; this.match(FlinkSqlParser.NOT); } } - this.state = 1496; + this.state = 1739; localctx._kind = this.match(FlinkSqlParser.LIKE); - this.state = 1497; + this.state = 1740; localctx._pattern = this.valueExpression(0); } break; case 8: this.enterOuterAlt(localctx, 8); { - this.state = 1498; + this.state = 1741; this.match(FlinkSqlParser.IS); - this.state = 1500; + this.state = 1743; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 1499; + this.state = 1742; this.match(FlinkSqlParser.NOT); } } - this.state = 1502; + this.state = 1745; localctx._kind = this.match(FlinkSqlParser.NULL); } break; case 9: this.enterOuterAlt(localctx, 9); { - this.state = 1503; + this.state = 1746; this.match(FlinkSqlParser.IS); - this.state = 1505; + this.state = 1748; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 1504; + this.state = 1747; this.match(FlinkSqlParser.NOT); } } - this.state = 1507; + this.state = 1750; localctx._kind = this._input.LT(1); _la = this._input.LA(1); if(!(_la===32 || _la===33)) { @@ -7246,23 +8438,23 @@ export default class FlinkSqlParser extends Parser { case 10: this.enterOuterAlt(localctx, 10); { - this.state = 1508; + this.state = 1751; this.match(FlinkSqlParser.IS); - this.state = 1510; + this.state = 1753; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 1509; + this.state = 1752; this.match(FlinkSqlParser.NOT); } } - this.state = 1512; + this.state = 1755; localctx._kind = this.match(FlinkSqlParser.DISTINCT); - this.state = 1513; + this.state = 1756; this.match(FlinkSqlParser.FROM); - this.state = 1514; + this.state = 1757; localctx._right = this.valueExpression(0); } break; @@ -7285,28 +8477,28 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public likePredicate(): LikePredicateContext { let localctx: LikePredicateContext = new LikePredicateContext(this, this._ctx, this.state); - this.enterRule(localctx, 218, FlinkSqlParser.RULE_likePredicate); + this.enterRule(localctx, 266, FlinkSqlParser.RULE_likePredicate); let _la: number; try { - this.state = 1542; + this.state = 1785; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 182, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 201, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1518; + this.state = 1761; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 1517; + this.state = 1760; this.match(FlinkSqlParser.NOT); } } - this.state = 1520; + this.state = 1763; localctx._kind = this.match(FlinkSqlParser.LIKE); - this.state = 1521; + this.state = 1764; localctx._quantifier = this._input.LT(1); _la = this._input.LA(1); if(!(_la===8 || _la===9)) { @@ -7316,40 +8508,40 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1535; + this.state = 1778; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 180, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 199, this._ctx) ) { case 1: { - this.state = 1522; + this.state = 1765; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1523; + this.state = 1766; this.match(FlinkSqlParser.RR_BRACKET); } break; case 2: { - this.state = 1524; + this.state = 1767; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1525; + this.state = 1768; this.expression(); - this.state = 1530; + this.state = 1773; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 1526; + this.state = 1769; this.match(FlinkSqlParser.COMMA); - this.state = 1527; + this.state = 1770; this.expression(); } } - this.state = 1532; + this.state = 1775; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1533; + this.state = 1776; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -7359,19 +8551,19 @@ export default class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1538; + this.state = 1781; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 1537; + this.state = 1780; this.match(FlinkSqlParser.NOT); } } - this.state = 1540; + this.state = 1783; localctx._kind = this.match(FlinkSqlParser.LIKE); - this.state = 1541; + this.state = 1784; localctx._pattern = this.valueExpression(0); } break; @@ -7404,23 +8596,23 @@ export default class FlinkSqlParser extends Parser { let _parentState: number = this.state; let localctx: ValueExpressionContext = new ValueExpressionContext(this, this._ctx, _parentState); let _prevctx: ValueExpressionContext = localctx; - let _startState: number = 220; - this.enterRecursionRule(localctx, 220, FlinkSqlParser.RULE_valueExpression, _p); + let _startState: number = 268; + this.enterRecursionRule(localctx, 268, FlinkSqlParser.RULE_valueExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1548; + this.state = 1791; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 183, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 202, this._ctx) ) { case 1: { localctx = new ValueExpressionDefaultContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1545; + this.state = 1788; this.primaryExpression(0); } break; @@ -7429,25 +8621,25 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticUnaryContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1546; + this.state = 1789; (localctx as ArithmeticUnaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 297)) & ~0x1F) === 0 && ((1 << (_la - 297)) & 786433) !== 0))) { + if(!(((((_la - 315)) & ~0x1F) === 0 && ((1 << (_la - 315)) & 3145729) !== 0))) { (localctx as ArithmeticUnaryContext)._operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1547; + this.state = 1790; this.valueExpression(7); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 1571; + this.state = 1814; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 185, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 204, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -7455,29 +8647,29 @@ export default class FlinkSqlParser extends Parser { } _prevctx = localctx; { - this.state = 1569; + this.state = 1812; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 184, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 203, this._ctx) ) { case 1: { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1550; + this.state = 1793; if (!(this.precpred(this._ctx, 6))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); } - this.state = 1551; + this.state = 1794; (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===132 || ((((_la - 313)) & ~0x1F) === 0 && ((1 << (_la - 313)) & 145) !== 0))) { + if(!(_la===132 || ((((_la - 333)) & ~0x1F) === 0 && ((1 << (_la - 333)) & 145) !== 0))) { (localctx as ArithmeticBinaryContext)._operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1552; + this.state = 1795; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(7); } break; @@ -7486,21 +8678,21 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1553; + this.state = 1796; if (!(this.precpred(this._ctx, 5))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); } - this.state = 1554; + this.state = 1797; (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 315)) & ~0x1F) === 0 && ((1 << (_la - 315)) & 11) !== 0))) { + if(!(((((_la - 335)) & ~0x1F) === 0 && ((1 << (_la - 335)) & 11) !== 0))) { (localctx as ArithmeticBinaryContext)._operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1555; + this.state = 1798; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(6); } break; @@ -7509,13 +8701,13 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1556; + this.state = 1799; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 1557; + this.state = 1800; (localctx as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_AND_OP); - this.state = 1558; + this.state = 1801; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(5); } break; @@ -7524,13 +8716,13 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1559; + this.state = 1802; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1560; + this.state = 1803; (localctx as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_XOR_OP); - this.state = 1561; + this.state = 1804; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(4); } break; @@ -7539,13 +8731,13 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1562; + this.state = 1805; if (!(this.precpred(this._ctx, 2))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 1563; + this.state = 1806; (localctx as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_OR_OP); - this.state = 1564; + this.state = 1807; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(3); } break; @@ -7554,22 +8746,22 @@ export default class FlinkSqlParser extends Parser { localctx = new ComparisonContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ComparisonContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1565; + this.state = 1808; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 1566; + this.state = 1809; this.comparisonOperator(); - this.state = 1567; + this.state = 1810; (localctx as ComparisonContext)._right = this.valueExpression(2); } break; } } } - this.state = 1573; + this.state = 1816; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 185, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 204, this._ctx); } } } @@ -7600,51 +8792,51 @@ export default class FlinkSqlParser extends Parser { let _parentState: number = this.state; let localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this, this._ctx, _parentState); let _prevctx: PrimaryExpressionContext = localctx; - let _startState: number = 222; - this.enterRecursionRule(localctx, 222, FlinkSqlParser.RULE_primaryExpression, _p); + let _startState: number = 270; + this.enterRecursionRule(localctx, 270, FlinkSqlParser.RULE_primaryExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1665; + this.state = 1908; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 195, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 214, this._ctx) ) { case 1: { localctx = new SearchedCaseContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1575; + this.state = 1818; this.match(FlinkSqlParser.CASE); - this.state = 1577; + this.state = 1820; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1576; + this.state = 1819; this.whenClause(); } } - this.state = 1579; + this.state = 1822; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la===40); - this.state = 1583; + this.state = 1826; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===42) { { - this.state = 1581; + this.state = 1824; this.match(FlinkSqlParser.ELSE); - this.state = 1582; + this.state = 1825; (localctx as SearchedCaseContext)._elseExpression = this.expression(); } } - this.state = 1585; + this.state = 1828; this.match(FlinkSqlParser.END); } break; @@ -7653,37 +8845,37 @@ export default class FlinkSqlParser extends Parser { localctx = new SimpleCaseContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1587; + this.state = 1830; this.match(FlinkSqlParser.CASE); - this.state = 1588; + this.state = 1831; (localctx as SimpleCaseContext)._value = this.expression(); - this.state = 1590; + this.state = 1833; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1589; + this.state = 1832; this.whenClause(); } } - this.state = 1592; + this.state = 1835; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la===40); - this.state = 1596; + this.state = 1839; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===42) { { - this.state = 1594; + this.state = 1837; this.match(FlinkSqlParser.ELSE); - this.state = 1595; + this.state = 1838; (localctx as SimpleCaseContext)._elseExpression = this.expression(); } } - this.state = 1598; + this.state = 1841; this.match(FlinkSqlParser.END); } break; @@ -7692,17 +8884,17 @@ export default class FlinkSqlParser extends Parser { localctx = new CastContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1600; + this.state = 1843; this.match(FlinkSqlParser.CAST); - this.state = 1601; + this.state = 1844; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1602; + this.state = 1845; this.expression(); - this.state = 1603; + this.state = 1846; this.match(FlinkSqlParser.AS); - this.state = 1604; + this.state = 1847; this.columnType(); - this.state = 1605; + this.state = 1848; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -7711,25 +8903,25 @@ export default class FlinkSqlParser extends Parser { localctx = new FirstContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1607; + this.state = 1850; this.match(FlinkSqlParser.FIRST); - this.state = 1608; + this.state = 1851; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1609; + this.state = 1852; this.expression(); - this.state = 1612; + this.state = 1855; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===124) { { - this.state = 1610; + this.state = 1853; this.match(FlinkSqlParser.IGNORE); - this.state = 1611; + this.state = 1854; this.match(FlinkSqlParser.NULLS); } } - this.state = 1614; + this.state = 1857; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -7738,25 +8930,25 @@ export default class FlinkSqlParser extends Parser { localctx = new LastContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1616; + this.state = 1859; this.match(FlinkSqlParser.LAST); - this.state = 1617; + this.state = 1860; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1618; + this.state = 1861; this.expression(); - this.state = 1621; + this.state = 1864; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===124) { { - this.state = 1619; + this.state = 1862; this.match(FlinkSqlParser.IGNORE); - this.state = 1620; + this.state = 1863; this.match(FlinkSqlParser.NULLS); } } - this.state = 1623; + this.state = 1866; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -7765,17 +8957,17 @@ export default class FlinkSqlParser extends Parser { localctx = new PositionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1625; + this.state = 1868; this.match(FlinkSqlParser.POSITION); - this.state = 1626; + this.state = 1869; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1627; + this.state = 1870; (localctx as PositionContext)._substr = this.valueExpression(0); - this.state = 1628; + this.state = 1871; this.match(FlinkSqlParser.IN); - this.state = 1629; + this.state = 1872; (localctx as PositionContext)._str = this.valueExpression(0); - this.state = 1630; + this.state = 1873; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -7784,7 +8976,7 @@ export default class FlinkSqlParser extends Parser { localctx = new ConstantDefaultContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1632; + this.state = 1875; this.constant(); } break; @@ -7793,7 +8985,7 @@ export default class FlinkSqlParser extends Parser { localctx = new StarContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1633; + this.state = 1876; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; @@ -7802,11 +8994,11 @@ export default class FlinkSqlParser extends Parser { localctx = new StarContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1634; + this.state = 1877; this.uid(); - this.state = 1635; + this.state = 1878; this.match(FlinkSqlParser.DOT); - this.state = 1636; + this.state = 1879; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; @@ -7815,11 +9007,11 @@ export default class FlinkSqlParser extends Parser { localctx = new SubqueryExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1638; + this.state = 1881; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1639; + this.state = 1882; this.queryStatement(0); - this.state = 1640; + this.state = 1883; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -7828,47 +9020,47 @@ export default class FlinkSqlParser extends Parser { localctx = new FunctionCallContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1642; + this.state = 1885; this.functionName(); - this.state = 1643; + this.state = 1886; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1655; + this.state = 1898; this._errHandler.sync(this); _la = this._input.LA(1); - if (((((_la - 4)) & ~0x1F) === 0 && ((1 << (_la - 4)) & 4294967295) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 4294967167) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 4291015671) !== 0) || ((((_la - 102)) & ~0x1F) === 0 && ((1 << (_la - 102)) & 4294967295) !== 0) || ((((_la - 134)) & ~0x1F) === 0 && ((1 << (_la - 134)) & 4294967295) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 4294967295) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4294934527) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 1971324639) !== 0) || ((((_la - 265)) & ~0x1F) === 0 && ((1 << (_la - 265)) & 266320383) !== 0) || ((((_la - 297)) & ~0x1F) === 0 && ((1 << (_la - 297)) & 2081226881) !== 0)) { + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967280) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294965247) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4231741311) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4294967247) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4292870143) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 1610725375) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4160749597) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 142540239) !== 0) || ((((_la - 322)) & ~0x1F) === 0 && ((1 << (_la - 322)) & 65038337) !== 0)) { { - this.state = 1645; + this.state = 1888; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 192, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 211, this._ctx) ) { case 1: { - this.state = 1644; + this.state = 1887; this.setQuantifier(); } break; } - this.state = 1647; + this.state = 1890; this.expression(); - this.state = 1652; + this.state = 1895; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 1648; + this.state = 1891; this.match(FlinkSqlParser.COMMA); - this.state = 1649; + this.state = 1892; this.expression(); } } - this.state = 1654; + this.state = 1897; this._errHandler.sync(this); _la = this._input.LA(1); } } } - this.state = 1657; + this.state = 1900; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -7877,7 +9069,7 @@ export default class FlinkSqlParser extends Parser { localctx = new ColumnReferenceContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1659; + this.state = 1902; this.identifier(); } break; @@ -7886,7 +9078,7 @@ export default class FlinkSqlParser extends Parser { localctx = new DereferenceContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1660; + this.state = 1903; this.dereferenceDefinition(); } break; @@ -7895,19 +9087,19 @@ export default class FlinkSqlParser extends Parser { localctx = new ParenthesizedExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1661; + this.state = 1904; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1662; + this.state = 1905; this.expression(); - this.state = 1663; + this.state = 1906; this.match(FlinkSqlParser.RR_BRACKET); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 1674; + this.state = 1917; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 196, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 215, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -7919,22 +9111,22 @@ export default class FlinkSqlParser extends Parser { localctx = new SubscriptContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState)); (localctx as SubscriptContext)._value = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_primaryExpression); - this.state = 1667; + this.state = 1910; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 1668; + this.state = 1911; this.match(FlinkSqlParser.LS_BRACKET); - this.state = 1669; + this.state = 1912; (localctx as SubscriptContext)._index = this.valueExpression(0); - this.state = 1670; + this.state = 1913; this.match(FlinkSqlParser.RS_BRACKET); } } } - this.state = 1676; + this.state = 1919; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 196, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 215, this._ctx); } } } @@ -7955,11 +9147,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public functionName(): FunctionNameContext { let localctx: FunctionNameContext = new FunctionNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 224, FlinkSqlParser.RULE_functionName); + this.enterRule(localctx, 272, FlinkSqlParser.RULE_functionName); try { this.enterOuterAlt(localctx, 1); { - this.state = 1677; + this.state = 1920; this.uid(); } } @@ -7980,11 +9172,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public dereferenceDefinition(): DereferenceDefinitionContext { let localctx: DereferenceDefinitionContext = new DereferenceDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 226, FlinkSqlParser.RULE_dereferenceDefinition); + this.enterRule(localctx, 274, FlinkSqlParser.RULE_dereferenceDefinition); try { this.enterOuterAlt(localctx, 1); { - this.state = 1679; + this.state = 1922; this.uid(); } } @@ -8005,11 +9197,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public correlationName(): CorrelationNameContext { let localctx: CorrelationNameContext = new CorrelationNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 228, FlinkSqlParser.RULE_correlationName); + this.enterRule(localctx, 276, FlinkSqlParser.RULE_correlationName); try { this.enterOuterAlt(localctx, 1); { - this.state = 1681; + this.state = 1924; this.identifier(); } } @@ -8030,22 +9222,22 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public qualifiedName(): QualifiedNameContext { let localctx: QualifiedNameContext = new QualifiedNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 230, FlinkSqlParser.RULE_qualifiedName); + this.enterRule(localctx, 278, FlinkSqlParser.RULE_qualifiedName); try { - this.state = 1685; + this.state = 1928; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 197, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 216, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1683; + this.state = 1926; this.identifier(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1684; + this.state = 1927; this.dereferenceDefinition(); } break; @@ -8068,24 +9260,24 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public interval(): IntervalContext { let localctx: IntervalContext = new IntervalContext(this, this._ctx, this.state); - this.enterRule(localctx, 232, FlinkSqlParser.RULE_interval); + this.enterRule(localctx, 280, FlinkSqlParser.RULE_interval); try { this.enterOuterAlt(localctx, 1); { - this.state = 1687; + this.state = 1930; this.match(FlinkSqlParser.INTERVAL); - this.state = 1690; + this.state = 1933; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 198, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 217, this._ctx) ) { case 1: { - this.state = 1688; + this.state = 1931; this.errorCapturingMultiUnitsInterval(); } break; case 2: { - this.state = 1689; + this.state = 1932; this.errorCapturingUnitToUnitInterval(); } break; @@ -8109,18 +9301,18 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public errorCapturingMultiUnitsInterval(): ErrorCapturingMultiUnitsIntervalContext { let localctx: ErrorCapturingMultiUnitsIntervalContext = new ErrorCapturingMultiUnitsIntervalContext(this, this._ctx, this.state); - this.enterRule(localctx, 234, FlinkSqlParser.RULE_errorCapturingMultiUnitsInterval); + this.enterRule(localctx, 282, FlinkSqlParser.RULE_errorCapturingMultiUnitsInterval); try { this.enterOuterAlt(localctx, 1); { - this.state = 1692; + this.state = 1935; this.multiUnitsInterval(); - this.state = 1694; + this.state = 1937; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 199, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 218, this._ctx) ) { case 1: { - this.state = 1693; + this.state = 1936; this.unitToUnitInterval(); } break; @@ -8144,12 +9336,12 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public multiUnitsInterval(): MultiUnitsIntervalContext { let localctx: MultiUnitsIntervalContext = new MultiUnitsIntervalContext(this, this._ctx, this.state); - this.enterRule(localctx, 236, FlinkSqlParser.RULE_multiUnitsInterval); + this.enterRule(localctx, 284, FlinkSqlParser.RULE_multiUnitsInterval); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1699; + this.state = 1942; this._errHandler.sync(this); _alt = 1; do { @@ -8157,9 +9349,9 @@ export default class FlinkSqlParser extends Parser { case 1: { { - this.state = 1696; + this.state = 1939; this.intervalValue(); - this.state = 1697; + this.state = 1940; this.identifier(); } } @@ -8167,9 +9359,9 @@ export default class FlinkSqlParser extends Parser { default: throw new NoViableAltException(this); } - this.state = 1701; + this.state = 1944; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 200, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 219, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } } @@ -8190,24 +9382,24 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public errorCapturingUnitToUnitInterval(): ErrorCapturingUnitToUnitIntervalContext { let localctx: ErrorCapturingUnitToUnitIntervalContext = new ErrorCapturingUnitToUnitIntervalContext(this, this._ctx, this.state); - this.enterRule(localctx, 238, FlinkSqlParser.RULE_errorCapturingUnitToUnitInterval); + this.enterRule(localctx, 286, FlinkSqlParser.RULE_errorCapturingUnitToUnitInterval); try { this.enterOuterAlt(localctx, 1); { - this.state = 1703; + this.state = 1946; localctx._body = this.unitToUnitInterval(); - this.state = 1706; + this.state = 1949; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 201, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 220, this._ctx) ) { case 1: { - this.state = 1704; + this.state = 1947; localctx._error1 = this.multiUnitsInterval(); } break; case 2: { - this.state = 1705; + this.state = 1948; localctx._error2 = this.unitToUnitInterval(); } break; @@ -8231,17 +9423,17 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public unitToUnitInterval(): UnitToUnitIntervalContext { let localctx: UnitToUnitIntervalContext = new UnitToUnitIntervalContext(this, this._ctx, this.state); - this.enterRule(localctx, 240, FlinkSqlParser.RULE_unitToUnitInterval); + this.enterRule(localctx, 288, FlinkSqlParser.RULE_unitToUnitInterval); try { this.enterOuterAlt(localctx, 1); { - this.state = 1708; + this.state = 1951; localctx._value = this.intervalValue(); - this.state = 1709; + this.state = 1952; localctx._from_ = this.identifier(); - this.state = 1710; + this.state = 1953; this.match(FlinkSqlParser.TO); - this.state = 1711; + this.state = 1954; localctx._to = this.identifier(); } } @@ -8262,26 +9454,26 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public intervalValue(): IntervalValueContext { let localctx: IntervalValueContext = new IntervalValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 242, FlinkSqlParser.RULE_intervalValue); + this.enterRule(localctx, 290, FlinkSqlParser.RULE_intervalValue); let _la: number; try { - this.state = 1718; + this.state = 1961; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 315: - case 316: - case 324: - case 325: + case 335: + case 336: + case 344: + case 345: this.enterOuterAlt(localctx, 1); { - this.state = 1714; + this.state = 1957; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===315 || _la===316) { + if (_la===335 || _la===336) { { - this.state = 1713; + this.state = 1956; _la = this._input.LA(1); - if(!(_la===315 || _la===316)) { + if(!(_la===335 || _la===336)) { this._errHandler.recoverInline(this); } else { @@ -8291,9 +9483,9 @@ export default class FlinkSqlParser extends Parser { } } - this.state = 1716; + this.state = 1959; _la = this._input.LA(1); - if(!(_la===324 || _la===325)) { + if(!(_la===344 || _la===345)) { this._errHandler.recoverInline(this); } else { @@ -8302,10 +9494,10 @@ export default class FlinkSqlParser extends Parser { } } break; - case 323: + case 343: this.enterOuterAlt(localctx, 2); { - this.state = 1717; + this.state = 1960; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -8330,29 +9522,29 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public columnAlias(): ColumnAliasContext { let localctx: ColumnAliasContext = new ColumnAliasContext(this, this._ctx, this.state); - this.enterRule(localctx, 244, FlinkSqlParser.RULE_columnAlias); + this.enterRule(localctx, 292, FlinkSqlParser.RULE_columnAlias); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1721; + this.state = 1964; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 204, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 223, this._ctx) ) { case 1: { - this.state = 1720; + this.state = 1963; this.match(FlinkSqlParser.AS); } break; } - this.state = 1723; + this.state = 1966; this.strictIdentifier(); - this.state = 1725; + this.state = 1968; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===304) { + if (_la===322) { { - this.state = 1724; + this.state = 1967; this.identifierList(); } } @@ -8376,28 +9568,28 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public tableAlias(): TableAliasContext { let localctx: TableAliasContext = new TableAliasContext(this, this._ctx, this.state); - this.enterRule(localctx, 246, FlinkSqlParser.RULE_tableAlias); + this.enterRule(localctx, 294, FlinkSqlParser.RULE_tableAlias); try { this.enterOuterAlt(localctx, 1); { - this.state = 1728; + this.state = 1971; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 206, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 225, this._ctx) ) { case 1: { - this.state = 1727; + this.state = 1970; this.match(FlinkSqlParser.AS); } break; } - this.state = 1730; + this.state = 1973; this.strictIdentifier(); - this.state = 1732; + this.state = 1975; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 207, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 226, this._ctx) ) { case 1: { - this.state = 1731; + this.state = 1974; this.identifierList(); } break; @@ -8421,13 +9613,13 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { let localctx: ErrorCapturingIdentifierContext = new ErrorCapturingIdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 248, FlinkSqlParser.RULE_errorCapturingIdentifier); + this.enterRule(localctx, 296, FlinkSqlParser.RULE_errorCapturingIdentifier); try { this.enterOuterAlt(localctx, 1); { - this.state = 1734; + this.state = 1977; this.identifier(); - this.state = 1735; + this.state = 1978; this.errorCapturingIdentifierExtra(); } } @@ -8448,36 +9640,36 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public errorCapturingIdentifierExtra(): ErrorCapturingIdentifierExtraContext { let localctx: ErrorCapturingIdentifierExtraContext = new ErrorCapturingIdentifierExtraContext(this, this._ctx, this.state); - this.enterRule(localctx, 250, FlinkSqlParser.RULE_errorCapturingIdentifierExtra); + this.enterRule(localctx, 298, FlinkSqlParser.RULE_errorCapturingIdentifierExtra); let _la: number; try { - this.state = 1744; + this.state = 1987; this._errHandler.sync(this); switch (this._input.LA(1)) { case 131: localctx = new ErrorIdentContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 1739; + this.state = 1982; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1737; + this.state = 1980; this.match(FlinkSqlParser.MINUS); - this.state = 1738; + this.state = 1981; this.identifier(); } } - this.state = 1741; + this.state = 1984; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la===131); } break; case 7: - case 304: + case 322: localctx = new RealIdentContext(this, localctx); this.enterOuterAlt(localctx, 2); // tslint:disable-next-line:no-empty @@ -8505,15 +9697,15 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public identifierList(): IdentifierListContext { let localctx: IdentifierListContext = new IdentifierListContext(this, this._ctx, this.state); - this.enterRule(localctx, 252, FlinkSqlParser.RULE_identifierList); + this.enterRule(localctx, 300, FlinkSqlParser.RULE_identifierList); try { this.enterOuterAlt(localctx, 1); { - this.state = 1746; + this.state = 1989; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1747; + this.state = 1990; this.identifierSeq(); - this.state = 1748; + this.state = 1991; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -8534,26 +9726,26 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public identifierSeq(): IdentifierSeqContext { let localctx: IdentifierSeqContext = new IdentifierSeqContext(this, this._ctx, this.state); - this.enterRule(localctx, 254, FlinkSqlParser.RULE_identifierSeq); + this.enterRule(localctx, 302, FlinkSqlParser.RULE_identifierSeq); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1750; + this.state = 1993; this.identifier(); - this.state = 1755; + this.state = 1998; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 1751; + this.state = 1994; this.match(FlinkSqlParser.COMMA); - this.state = 1752; + this.state = 1995; this.identifier(); } } - this.state = 1757; + this.state = 2000; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -8576,22 +9768,22 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public identifier(): IdentifierContext { let localctx: IdentifierContext = new IdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 256, FlinkSqlParser.RULE_identifier); + this.enterRule(localctx, 304, FlinkSqlParser.RULE_identifier); try { - this.state = 1760; + this.state = 2003; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 211, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 230, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1758; + this.state = 2001; this.strictIdentifier(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1759; + this.state = 2002; this.strictNonReserved(); } break; @@ -8614,16 +9806,16 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public strictIdentifier(): StrictIdentifierContext { let localctx: StrictIdentifierContext = new StrictIdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 258, FlinkSqlParser.RULE_strictIdentifier); + this.enterRule(localctx, 306, FlinkSqlParser.RULE_strictIdentifier); try { - this.state = 1766; + this.state = 2009; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 212, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 231, this._ctx) ) { case 1: localctx = new UnquotedIdentifierAlternativeContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 1762; + this.state = 2005; this.unquotedIdentifier(); } break; @@ -8631,7 +9823,7 @@ export default class FlinkSqlParser extends Parser { localctx = new QuotedIdentifierAlternativeContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 1763; + this.state = 2006; this.quotedIdentifier(); } break; @@ -8639,7 +9831,7 @@ export default class FlinkSqlParser extends Parser { localctx = new AnsiNonReservedKeywordsContext(this, localctx); this.enterOuterAlt(localctx, 3); { - this.state = 1764; + this.state = 2007; this.ansiNonReserved(); } break; @@ -8647,7 +9839,7 @@ export default class FlinkSqlParser extends Parser { localctx = new NonReservedKeywordsContext(this, localctx); this.enterOuterAlt(localctx, 4); { - this.state = 1765; + this.state = 2008; this.nonReserved(); } break; @@ -8670,14 +9862,14 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public unquotedIdentifier(): UnquotedIdentifierContext { let localctx: UnquotedIdentifierContext = new UnquotedIdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 260, FlinkSqlParser.RULE_unquotedIdentifier); + this.enterRule(localctx, 308, FlinkSqlParser.RULE_unquotedIdentifier); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1768; + this.state = 2011; _la = this._input.LA(1); - if(!(_la===324 || _la===327)) { + if(!(_la===344 || _la===347)) { this._errHandler.recoverInline(this); } else { @@ -8703,11 +9895,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public quotedIdentifier(): QuotedIdentifierContext { let localctx: QuotedIdentifierContext = new QuotedIdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 262, FlinkSqlParser.RULE_quotedIdentifier); + this.enterRule(localctx, 310, FlinkSqlParser.RULE_quotedIdentifier); try { this.enterOuterAlt(localctx, 1); { - this.state = 1770; + this.state = 2013; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -8728,17 +9920,17 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public whenClause(): WhenClauseContext { let localctx: WhenClauseContext = new WhenClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 264, FlinkSqlParser.RULE_whenClause); + this.enterRule(localctx, 312, FlinkSqlParser.RULE_whenClause); try { this.enterOuterAlt(localctx, 1); { - this.state = 1772; + this.state = 2015; this.match(FlinkSqlParser.WHEN); - this.state = 1773; + this.state = 2016; localctx._condition = this.expression(); - this.state = 1774; + this.state = 2017; this.match(FlinkSqlParser.THEN); - this.state = 1775; + this.state = 2018; localctx._result = this.expression(); } } @@ -8759,26 +9951,26 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public uidList(): UidListContext { let localctx: UidListContext = new UidListContext(this, this._ctx, this.state); - this.enterRule(localctx, 266, FlinkSqlParser.RULE_uidList); + this.enterRule(localctx, 314, FlinkSqlParser.RULE_uidList); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1777; + this.state = 2020; this.uid(); - this.state = 1782; + this.state = 2025; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 1778; + this.state = 2021; this.match(FlinkSqlParser.COMMA); - this.state = 1779; + this.state = 2022; this.uid(); } } - this.state = 1784; + this.state = 2027; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -8801,85 +9993,28 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public uid(): UidContext { let localctx: UidContext = new UidContext(this, this._ctx, this.state); - this.enterRule(localctx, 268, FlinkSqlParser.RULE_uid); + this.enterRule(localctx, 316, FlinkSqlParser.RULE_uid); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1785; + this.state = 2028; this.match(FlinkSqlParser.ID_LITERAL); - this.state = 1789; + this.state = 2032; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 214, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 233, this._ctx); while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1 + 1) { { { - this.state = 1786; + this.state = 2029; this.match(FlinkSqlParser.DOT_ID); } } } - this.state = 1791; + this.state = 2034; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 214, this._ctx); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) - public plusUid(): PlusUidContext { - let localctx: PlusUidContext = new PlusUidContext(this, this._ctx, this.state); - this.enterRule(localctx, 270, FlinkSqlParser.RULE_plusUid); - let _la: number; - try { - let _alt: number; - this.enterOuterAlt(localctx, 1); - { - this.state = 1792; - _la = this._input.LA(1); - if(!(_la===327 || _la===328)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1796; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 215, this._ctx); - while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1 + 1) { - { - { - this.state = 1793; - _la = this._input.LA(1); - if(!(_la===321 || _la===322)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } - } - } - this.state = 1798; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 215, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 233, this._ctx); } } } @@ -8900,13 +10035,13 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public withOption(): WithOptionContext { let localctx: WithOptionContext = new WithOptionContext(this, this._ctx, this.state); - this.enterRule(localctx, 272, FlinkSqlParser.RULE_withOption); + this.enterRule(localctx, 318, FlinkSqlParser.RULE_withOption); try { this.enterOuterAlt(localctx, 1); { - this.state = 1799; + this.state = 2035; this.match(FlinkSqlParser.WITH); - this.state = 1800; + this.state = 2036; this.tablePropertyList(); } } @@ -8927,15 +10062,15 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public ifNotExists(): IfNotExistsContext { let localctx: IfNotExistsContext = new IfNotExistsContext(this, this._ctx, this.state); - this.enterRule(localctx, 274, FlinkSqlParser.RULE_ifNotExists); + this.enterRule(localctx, 320, FlinkSqlParser.RULE_ifNotExists); try { this.enterOuterAlt(localctx, 1); { - this.state = 1802; + this.state = 2038; this.match(FlinkSqlParser.IF); - this.state = 1803; + this.state = 2039; this.match(FlinkSqlParser.NOT); - this.state = 1804; + this.state = 2040; this.match(FlinkSqlParser.EXISTS); } } @@ -8956,13 +10091,13 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public ifExists(): IfExistsContext { let localctx: IfExistsContext = new IfExistsContext(this, this._ctx, this.state); - this.enterRule(localctx, 276, FlinkSqlParser.RULE_ifExists); + this.enterRule(localctx, 322, FlinkSqlParser.RULE_ifExists); try { this.enterOuterAlt(localctx, 1); { - this.state = 1806; + this.state = 2042; this.match(FlinkSqlParser.IF); - this.state = 1807; + this.state = 2043; this.match(FlinkSqlParser.EXISTS); } } @@ -8983,32 +10118,32 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public tablePropertyList(): TablePropertyListContext { let localctx: TablePropertyListContext = new TablePropertyListContext(this, this._ctx, this.state); - this.enterRule(localctx, 278, FlinkSqlParser.RULE_tablePropertyList); + this.enterRule(localctx, 324, FlinkSqlParser.RULE_tablePropertyList); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1809; + this.state = 2045; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1810; + this.state = 2046; this.tableProperty(); - this.state = 1815; + this.state = 2051; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===306) { + while (_la===326) { { { - this.state = 1811; + this.state = 2047; this.match(FlinkSqlParser.COMMA); - this.state = 1812; + this.state = 2048; this.tableProperty(); } } - this.state = 1817; + this.state = 2053; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1818; + this.state = 2054; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -9029,29 +10164,29 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public tableProperty(): TablePropertyContext { let localctx: TablePropertyContext = new TablePropertyContext(this, this._ctx, this.state); - this.enterRule(localctx, 280, FlinkSqlParser.RULE_tableProperty); + this.enterRule(localctx, 326, FlinkSqlParser.RULE_tableProperty); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1820; + this.state = 2056; localctx._key = this.tablePropertyKey(); - this.state = 1825; + this.state = 2061; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===32 || _la===33 || ((((_la - 293)) & ~0x1F) === 0 && ((1 << (_la - 293)) & 3221225473) !== 0) || _la===325) { + if (_la===32 || _la===33 || _la===311 || ((((_la - 343)) & ~0x1F) === 0 && ((1 << (_la - 343)) & 7) !== 0)) { { - this.state = 1822; + this.state = 2058; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===293) { + if (_la===311) { { - this.state = 1821; + this.state = 2057; this.match(FlinkSqlParser.EQUAL_SYMBOL); } } - this.state = 1824; + this.state = 2060; localctx._value = this.tablePropertyValue(); } } @@ -9075,29 +10210,29 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public tablePropertyKey(): TablePropertyKeyContext { let localctx: TablePropertyKeyContext = new TablePropertyKeyContext(this, this._ctx, this.state); - this.enterRule(localctx, 282, FlinkSqlParser.RULE_tablePropertyKey); + this.enterRule(localctx, 328, FlinkSqlParser.RULE_tablePropertyKey); try { - this.state = 1830; + this.state = 2066; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 219, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 237, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1827; + this.state = 2063; this.identifier(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1828; + this.state = 2064; this.dereferenceDefinition(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1829; + this.state = 2065; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -9120,22 +10255,22 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public tablePropertyValue(): TablePropertyValueContext { let localctx: TablePropertyValueContext = new TablePropertyValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 284, FlinkSqlParser.RULE_tablePropertyValue); + this.enterRule(localctx, 330, FlinkSqlParser.RULE_tablePropertyValue); try { - this.state = 1836; + this.state = 2072; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 324: + case 344: this.enterOuterAlt(localctx, 1); { - this.state = 1832; + this.state = 2068; this.match(FlinkSqlParser.DIG_LITERAL); } break; - case 325: + case 345: this.enterOuterAlt(localctx, 2); { - this.state = 1833; + this.state = 2069; this.match(FlinkSqlParser.REAL_LITERAL); } break; @@ -9143,14 +10278,14 @@ export default class FlinkSqlParser extends Parser { case 33: this.enterOuterAlt(localctx, 3); { - this.state = 1834; + this.state = 2070; this.booleanLiteral(); } break; - case 323: + case 343: this.enterOuterAlt(localctx, 4); { - this.state = 1835; + this.state = 2071; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -9175,40 +10310,40 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public logicalOperator(): LogicalOperatorContext { let localctx: LogicalOperatorContext = new LogicalOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 286, FlinkSqlParser.RULE_logicalOperator); + this.enterRule(localctx, 332, FlinkSqlParser.RULE_logicalOperator); try { - this.state = 1844; + this.state = 2080; this._errHandler.sync(this); switch (this._input.LA(1)) { case 23: this.enterOuterAlt(localctx, 1); { - this.state = 1838; + this.state = 2074; this.match(FlinkSqlParser.AND); } break; - case 299: + case 317: this.enterOuterAlt(localctx, 2); { - this.state = 1839; + this.state = 2075; this.match(FlinkSqlParser.BIT_AND_OP); - this.state = 1840; + this.state = 2076; this.match(FlinkSqlParser.BIT_AND_OP); } break; case 22: this.enterOuterAlt(localctx, 3); { - this.state = 1841; + this.state = 2077; this.match(FlinkSqlParser.OR); } break; - case 298: + case 316: this.enterOuterAlt(localctx, 4); { - this.state = 1842; + this.state = 2078; this.match(FlinkSqlParser.BIT_OR_OP); - this.state = 1843; + this.state = 2079; this.match(FlinkSqlParser.BIT_OR_OP); } break; @@ -9233,76 +10368,76 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public comparisonOperator(): ComparisonOperatorContext { let localctx: ComparisonOperatorContext = new ComparisonOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 288, FlinkSqlParser.RULE_comparisonOperator); + this.enterRule(localctx, 334, FlinkSqlParser.RULE_comparisonOperator); try { - this.state = 1860; + this.state = 2096; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 222, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 240, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1846; + this.state = 2082; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1847; + this.state = 2083; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1848; + this.state = 2084; this.match(FlinkSqlParser.LESS_SYMBOL); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1849; + this.state = 2085; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 1850; + this.state = 2086; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 1851; + this.state = 2087; this.match(FlinkSqlParser.GREATER_SYMBOL); - this.state = 1852; + this.state = 2088; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 1853; + this.state = 2089; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 1854; + this.state = 2090; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; case 7: this.enterOuterAlt(localctx, 7); { - this.state = 1855; + this.state = 2091; this.match(FlinkSqlParser.EXCLAMATION_SYMBOL); - this.state = 1856; + this.state = 2092; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 8: this.enterOuterAlt(localctx, 8); { - this.state = 1857; + this.state = 2093; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 1858; + this.state = 2094; this.match(FlinkSqlParser.EQUAL_SYMBOL); - this.state = 1859; + this.state = 2095; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; @@ -9325,47 +10460,47 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public bitOperator(): BitOperatorContext { let localctx: BitOperatorContext = new BitOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 290, FlinkSqlParser.RULE_bitOperator); + this.enterRule(localctx, 336, FlinkSqlParser.RULE_bitOperator); try { - this.state = 1869; + this.state = 2105; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 295: + case 313: this.enterOuterAlt(localctx, 1); { - this.state = 1862; + this.state = 2098; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 1863; + this.state = 2099; this.match(FlinkSqlParser.LESS_SYMBOL); } break; - case 294: + case 312: this.enterOuterAlt(localctx, 2); { - this.state = 1864; + this.state = 2100; this.match(FlinkSqlParser.GREATER_SYMBOL); - this.state = 1865; + this.state = 2101; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; - case 299: + case 317: this.enterOuterAlt(localctx, 3); { - this.state = 1866; + this.state = 2102; this.match(FlinkSqlParser.BIT_AND_OP); } break; - case 300: + case 318: this.enterOuterAlt(localctx, 4); { - this.state = 1867; + this.state = 2103; this.match(FlinkSqlParser.BIT_XOR_OP); } break; - case 298: + case 316: this.enterOuterAlt(localctx, 5); { - this.state = 1868; + this.state = 2104; this.match(FlinkSqlParser.BIT_OR_OP); } break; @@ -9390,14 +10525,14 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public mathOperator(): MathOperatorContext { let localctx: MathOperatorContext = new MathOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 292, FlinkSqlParser.RULE_mathOperator); + this.enterRule(localctx, 338, FlinkSqlParser.RULE_mathOperator); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1871; + this.state = 2107; _la = this._input.LA(1); - if(!(_la===132 || ((((_la - 313)) & ~0x1F) === 0 && ((1 << (_la - 313)) & 221) !== 0))) { + if(!(_la===132 || ((((_la - 333)) & ~0x1F) === 0 && ((1 << (_la - 333)) & 221) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -9423,14 +10558,14 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public unaryOperator(): UnaryOperatorContext { let localctx: UnaryOperatorContext = new UnaryOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 294, FlinkSqlParser.RULE_unaryOperator); + this.enterRule(localctx, 340, FlinkSqlParser.RULE_unaryOperator); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1873; + this.state = 2109; _la = this._input.LA(1); - if(!(_la===25 || ((((_la - 296)) & ~0x1F) === 0 && ((1 << (_la - 296)) & 1572867) !== 0))) { + if(!(_la===25 || ((((_la - 314)) & ~0x1F) === 0 && ((1 << (_la - 314)) & 6291459) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -9456,11 +10591,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public fullColumnName(): FullColumnNameContext { let localctx: FullColumnNameContext = new FullColumnNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 296, FlinkSqlParser.RULE_fullColumnName); + this.enterRule(localctx, 342, FlinkSqlParser.RULE_fullColumnName); try { this.enterOuterAlt(localctx, 1); { - this.state = 1875; + this.state = 2111; this.uid(); } } @@ -9481,39 +10616,39 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public constant(): ConstantContext { let localctx: ConstantContext = new ConstantContext(this, this._ctx, this.state); - this.enterRule(localctx, 298, FlinkSqlParser.RULE_constant); + this.enterRule(localctx, 344, FlinkSqlParser.RULE_constant); let _la: number; try { - this.state = 1889; + this.state = 2125; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 323: + case 343: this.enterOuterAlt(localctx, 1); { - this.state = 1877; + this.state = 2113; this.stringLiteral(); } break; - case 324: + case 344: this.enterOuterAlt(localctx, 2); { - this.state = 1878; + this.state = 2114; this.decimalLiteral(); } break; case 38: this.enterOuterAlt(localctx, 3); { - this.state = 1879; + this.state = 2115; this.interval(); } break; - case 315: + case 335: this.enterOuterAlt(localctx, 4); { - this.state = 1880; + this.state = 2116; this.match(FlinkSqlParser.HYPNEN_SIGN); - this.state = 1881; + this.state = 2117; this.decimalLiteral(); } break; @@ -9521,39 +10656,39 @@ export default class FlinkSqlParser extends Parser { case 33: this.enterOuterAlt(localctx, 5); { - this.state = 1882; + this.state = 2118; this.booleanLiteral(); } break; - case 325: + case 345: this.enterOuterAlt(localctx, 6); { - this.state = 1883; + this.state = 2119; this.match(FlinkSqlParser.REAL_LITERAL); } break; - case 326: + case 346: this.enterOuterAlt(localctx, 7); { - this.state = 1884; + this.state = 2120; this.match(FlinkSqlParser.BIT_STRING); } break; case 25: - case 291: + case 309: this.enterOuterAlt(localctx, 8); { - this.state = 1886; + this.state = 2122; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===25) { { - this.state = 1885; + this.state = 2121; this.match(FlinkSqlParser.NOT); } } - this.state = 1888; + this.state = 2124; this.match(FlinkSqlParser.NULL); } break; @@ -9578,11 +10713,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public stringLiteral(): StringLiteralContext { let localctx: StringLiteralContext = new StringLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 300, FlinkSqlParser.RULE_stringLiteral); + this.enterRule(localctx, 346, FlinkSqlParser.RULE_stringLiteral); try { this.enterOuterAlt(localctx, 1); { - this.state = 1891; + this.state = 2127; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -9603,11 +10738,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public decimalLiteral(): DecimalLiteralContext { let localctx: DecimalLiteralContext = new DecimalLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 302, FlinkSqlParser.RULE_decimalLiteral); + this.enterRule(localctx, 348, FlinkSqlParser.RULE_decimalLiteral); try { this.enterOuterAlt(localctx, 1); { - this.state = 1893; + this.state = 2129; this.match(FlinkSqlParser.DIG_LITERAL); } } @@ -9628,12 +10763,12 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public booleanLiteral(): BooleanLiteralContext { let localctx: BooleanLiteralContext = new BooleanLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 304, FlinkSqlParser.RULE_booleanLiteral); + this.enterRule(localctx, 350, FlinkSqlParser.RULE_booleanLiteral); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1895; + this.state = 2131; _la = this._input.LA(1); if(!(_la===32 || _la===33)) { this._errHandler.recoverInline(this); @@ -9661,12 +10796,12 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public setQuantifier(): SetQuantifierContext { let localctx: SetQuantifierContext = new SetQuantifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 306, FlinkSqlParser.RULE_setQuantifier); + this.enterRule(localctx, 352, FlinkSqlParser.RULE_setQuantifier); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1897; + this.state = 2133; _la = this._input.LA(1); if(!(_la===8 || _la===10)) { this._errHandler.recoverInline(this); @@ -9694,14 +10829,14 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public ansiNonReserved(): AnsiNonReservedContext { let localctx: AnsiNonReservedContext = new AnsiNonReservedContext(this, this._ctx, this.state); - this.enterRule(localctx, 308, FlinkSqlParser.RULE_ansiNonReserved); + this.enterRule(localctx, 354, FlinkSqlParser.RULE_ansiNonReserved); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1899; + this.state = 2135; _la = this._input.LA(1); - if(!(((((_la - 6)) & ~0x1F) === 0 && ((1 << (_la - 6)) & 1978716033) !== 0) || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & 4294709249) !== 0) || ((((_la - 72)) & ~0x1F) === 0 && ((1 << (_la - 72)) & 3418108729) !== 0) || ((((_la - 104)) & ~0x1F) === 0 && ((1 << (_la - 104)) & 4280287177) !== 0) || ((((_la - 136)) & ~0x1F) === 0 && ((1 << (_la - 136)) & 4294967167) !== 0) || ((((_la - 168)) & ~0x1F) === 0 && ((1 << (_la - 168)) & 4294836223) !== 0) || ((((_la - 200)) & ~0x1F) === 0 && ((1 << (_la - 200)) & 4294959087) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 476053943) !== 0) || ((((_la - 265)) & ~0x1F) === 0 && ((1 << (_la - 265)) & 266320383) !== 0))) { + if(!(((((_la - 6)) & ~0x1F) === 0 && ((1 << (_la - 6)) & 1978716033) !== 0) || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & 4294709249) !== 0) || ((((_la - 72)) & ~0x1F) === 0 && ((1 << (_la - 72)) & 3418108729) !== 0) || ((((_la - 104)) & ~0x1F) === 0 && ((1 << (_la - 104)) & 4280287177) !== 0) || ((((_la - 136)) & ~0x1F) === 0 && ((1 << (_la - 136)) & 4294967167) !== 0) || ((((_la - 168)) & ~0x1F) === 0 && ((1 << (_la - 168)) & 4294836223) !== 0) || ((((_la - 200)) & ~0x1F) === 0 && ((1 << (_la - 200)) & 4294959087) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 476053943) !== 0) || ((((_la - 283)) & ~0x1F) === 0 && ((1 << (_la - 283)) & 266320383) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -9727,12 +10862,12 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public strictNonReserved(): StrictNonReservedContext { let localctx: StrictNonReservedContext = new StrictNonReservedContext(this, this._ctx, this.state); - this.enterRule(localctx, 310, FlinkSqlParser.RULE_strictNonReserved); + this.enterRule(localctx, 356, FlinkSqlParser.RULE_strictNonReserved); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1901; + this.state = 2137; _la = this._input.LA(1); if(!(((((_la - 45)) & ~0x1F) === 0 && ((1 << (_la - 45)) & 1787) !== 0) || ((((_la - 105)) & ~0x1F) === 0 && ((1 << (_la - 105)) & 15) !== 0) || _la===143 || _la===223)) { this._errHandler.recoverInline(this); @@ -9760,14 +10895,14 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public nonReserved(): NonReservedContext { let localctx: NonReservedContext = new NonReservedContext(this, this._ctx, this.state); - this.enterRule(localctx, 312, FlinkSqlParser.RULE_nonReserved); + this.enterRule(localctx, 358, FlinkSqlParser.RULE_nonReserved); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1903; + this.state = 2139; _la = this._input.LA(1); - if(!(((((_la - 4)) & ~0x1F) === 0 && ((1 << (_la - 4)) & 4294967295) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 4294052223) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 4291015671) !== 0) || ((((_la - 102)) & ~0x1F) === 0 && ((1 << (_la - 102)) & 4294967175) !== 0) || ((((_la - 134)) & ~0x1F) === 0 && ((1 << (_la - 134)) & 4294966783) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 4294965247) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4261380095) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 1971324639) !== 0) || ((((_la - 265)) & ~0x1F) === 0 && ((1 << (_la - 265)) & 266320383) !== 0))) { + if(!(((((_la - 4)) & ~0x1F) === 0 && ((1 << (_la - 4)) & 4294967295) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 4294052223) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 4291015671) !== 0) || ((((_la - 102)) & ~0x1F) === 0 && ((1 << (_la - 102)) & 4294967175) !== 0) || ((((_la - 134)) & ~0x1F) === 0 && ((1 << (_la - 134)) & 4294966783) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 4294965247) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4261380095) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 1971324639) !== 0) || ((((_la - 283)) & ~0x1F) === 0 && ((1 << (_la - 283)) & 266320383) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -9795,13 +10930,13 @@ export default class FlinkSqlParser extends Parser { switch (ruleIndex) { case 78: return this.queryStatement_sempred(localctx as QueryStatementContext, predIndex); - case 86: + case 88: return this.tableExpression_sempred(localctx as TableExpressionContext, predIndex); - case 107: + case 131: return this.booleanExpression_sempred(localctx as BooleanExpressionContext, predIndex); - case 110: + case 134: return this.valueExpression_sempred(localctx as ValueExpressionContext, predIndex); - case 111: + case 135: return this.primaryExpression_sempred(localctx as PrimaryExpressionContext, predIndex); } return true; @@ -9816,9 +10951,9 @@ export default class FlinkSqlParser extends Parser { private tableExpression_sempred(localctx: TableExpressionContext, predIndex: number): boolean { switch (predIndex) { case 1: - return this.precpred(this._ctx, 1); + return this.precpred(this._ctx, 3); case 2: - return this.precpred(this._ctx, 2); + return this.precpred(this._ctx, 4); } return true; } @@ -9856,7 +10991,7 @@ export default class FlinkSqlParser extends Parser { return true; } - public static readonly _serializedATN: number[] = [4,1,329,1906,2,0,7,0, + public static readonly _serializedATN: number[] = [4,1,349,2142,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, @@ -9879,698 +11014,789 @@ export default class FlinkSqlParser extends Parser { 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,1,0,1, - 0,1,0,1,1,1,1,1,1,1,2,1,2,3,2,323,8,2,1,2,5,2,326,8,2,10,2,12,2,329,9,2, - 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,343,8,3,1,4,1,4,1,5, - 1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,361,8,5,1,6,1,6, - 3,6,365,8,6,1,7,1,7,1,7,1,8,1,8,1,8,1,8,3,8,374,8,8,1,8,1,8,1,8,3,8,379, - 8,8,1,9,1,9,1,9,5,9,384,8,9,10,9,12,9,387,9,9,1,10,1,10,1,11,1,11,3,11, - 393,8,11,1,11,1,11,3,11,397,8,11,1,12,1,12,1,12,1,12,1,12,5,12,404,8,12, - 10,12,12,12,407,9,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,3,13, - 418,8,13,1,13,3,13,421,8,13,1,13,1,13,1,13,1,13,1,13,3,13,428,8,13,1,13, - 1,13,1,13,1,13,1,13,1,13,3,13,436,8,13,1,13,1,13,1,13,3,13,441,8,13,1,13, - 3,13,444,8,13,1,14,1,14,1,14,1,14,1,14,3,14,451,8,14,1,15,1,15,1,15,1,15, - 1,16,1,16,3,16,459,8,16,1,17,1,17,3,17,463,8,17,1,18,1,18,1,18,1,18,1,19, - 1,19,1,19,1,19,1,19,1,19,3,19,475,8,19,1,19,1,19,1,19,1,19,1,19,1,19,3, - 19,483,8,19,1,19,1,19,3,19,487,8,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19, - 1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,3,19,508,8, - 19,1,20,1,20,3,20,512,8,20,1,21,1,21,3,21,516,8,21,1,21,1,21,3,21,520,8, - 21,1,21,1,21,1,21,1,21,1,21,5,21,527,8,21,10,21,12,21,530,9,21,1,21,1,21, - 3,21,534,8,21,1,21,1,21,3,21,538,8,21,1,21,1,21,3,21,542,8,21,1,21,1,21, - 3,21,546,8,21,1,21,3,21,549,8,21,1,21,1,21,3,21,553,8,21,1,22,1,22,1,22, - 3,22,558,8,22,1,22,1,22,1,22,1,22,3,22,564,8,22,1,23,1,23,1,23,3,23,569, - 8,23,1,24,1,24,1,24,3,24,574,8,24,1,24,3,24,577,8,24,1,25,1,25,3,25,581, - 8,25,1,26,1,26,1,26,1,26,5,26,587,8,26,10,26,12,26,590,9,26,1,26,1,26,1, - 27,1,27,1,27,3,27,597,8,27,1,27,1,27,3,27,601,8,27,1,27,1,27,3,27,605,8, - 27,1,27,1,27,3,27,609,8,27,1,27,1,27,3,27,613,8,27,1,27,1,27,3,27,617,8, - 27,1,27,1,27,3,27,621,8,27,1,27,1,27,3,27,625,8,27,1,27,1,27,3,27,629,8, - 27,3,27,631,8,27,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,3,29,641,8,29, - 1,29,1,29,1,30,1,30,1,30,1,30,3,30,649,8,30,1,30,1,30,1,31,1,31,1,31,1, - 31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33, - 5,33,671,8,33,10,33,12,33,674,9,33,1,33,1,33,1,34,1,34,3,34,680,8,34,1, - 34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,3,36,695, - 8,36,1,36,3,36,698,8,36,1,37,1,37,1,38,1,38,1,38,1,38,3,38,706,8,38,1,39, - 1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,3,41,718,8,41,1,41,1,41,1, - 41,1,41,1,41,1,41,1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,45, - 1,45,1,45,1,45,5,45,740,8,45,10,45,12,45,743,9,45,1,45,1,45,1,46,1,46,1, - 46,1,46,1,46,1,46,5,46,753,8,46,10,46,12,46,756,9,46,1,46,1,46,3,46,760, - 8,46,1,47,1,47,3,47,764,8,47,1,48,1,48,1,48,1,48,5,48,770,8,48,10,48,12, - 48,773,9,48,1,48,3,48,776,8,48,1,49,1,49,1,50,1,50,1,50,1,50,3,50,784,8, - 50,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,3,52,794,8,52,1,52,1,52,3,52, - 798,8,52,1,52,1,52,1,53,1,53,3,53,804,8,53,1,53,1,53,3,53,808,8,53,1,53, - 1,53,3,53,812,8,53,1,53,3,53,815,8,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54, - 3,54,824,8,54,1,54,1,54,3,54,828,8,54,1,54,1,54,1,54,1,54,1,54,3,54,835, - 8,54,1,54,3,54,838,8,54,1,55,1,55,1,55,1,55,1,55,1,55,5,55,846,8,55,10, - 55,12,55,849,9,55,1,56,1,56,1,57,1,57,1,57,3,57,856,8,57,1,57,1,57,1,57, - 1,57,1,57,1,57,3,57,864,8,57,1,58,1,58,3,58,868,8,58,1,58,1,58,1,58,1,59, - 1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,883,8,60,1,61,1,61,1, - 61,1,61,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64, - 3,64,902,8,64,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,3,66,913,8,66, - 1,66,1,66,3,66,917,8,66,1,66,1,66,1,66,1,66,1,66,3,66,924,8,66,1,67,1,67, - 1,67,3,67,929,8,67,1,67,1,67,1,68,1,68,3,68,935,8,68,1,68,1,68,3,68,939, - 8,68,1,68,1,68,1,69,1,69,1,69,3,69,946,8,69,1,69,1,69,3,69,950,8,69,1,70, - 1,70,3,70,954,8,70,1,70,1,70,3,70,958,8,70,1,70,1,70,1,71,1,71,1,71,1,71, - 3,71,966,8,71,1,71,1,71,3,71,970,8,71,1,71,1,71,1,72,3,72,975,8,72,1,72, - 1,72,1,72,3,72,980,8,72,1,73,1,73,1,73,1,73,3,73,986,8,73,1,73,3,73,989, - 8,73,1,73,1,73,3,73,993,8,73,1,74,1,74,1,74,1,75,1,75,1,75,1,75,5,75,1002, - 8,75,10,75,12,75,1005,9,75,1,76,1,76,1,76,1,76,5,76,1011,8,76,10,76,12, - 76,1014,9,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,4,77,1024,8,77,11, - 77,12,77,1025,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,5,78,1036,8,78,10, - 78,12,78,1039,9,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,3,78,1049,8, - 78,1,78,3,78,1052,8,78,1,78,1,78,3,78,1056,8,78,1,78,3,78,1059,8,78,3,78, - 1061,8,78,1,78,1,78,1,78,3,78,1066,8,78,1,78,1,78,3,78,1070,8,78,1,78,3, - 78,1073,8,78,5,78,1075,8,78,10,78,12,78,1078,9,78,1,79,1,79,1,79,1,79,5, - 79,1084,8,79,10,79,12,79,1087,9,79,1,80,1,80,1,80,1,80,1,80,5,80,1094,8, - 80,10,80,12,80,1097,9,80,1,80,1,80,3,80,1101,8,80,1,80,1,80,1,80,1,80,1, - 80,1,81,1,81,1,82,1,82,1,82,3,82,1113,8,82,1,82,3,82,1116,8,82,1,82,3,82, - 1119,8,82,1,82,3,82,1122,8,82,1,83,1,83,3,83,1126,8,83,1,83,1,83,1,83,1, - 83,5,83,1132,8,83,10,83,12,83,1135,9,83,3,83,1137,8,83,1,84,1,84,3,84,1141, - 8,84,1,84,3,84,1144,8,84,1,85,1,85,1,85,1,86,1,86,1,86,1,86,5,86,1153,8, - 86,10,86,12,86,1156,9,86,1,86,1,86,1,86,1,86,1,86,1,86,3,86,1164,8,86,1, - 86,3,86,1167,8,86,1,86,3,86,1170,8,86,1,86,1,86,1,86,3,86,1175,8,86,5,86, - 1177,8,86,10,86,12,86,1180,9,86,1,87,1,87,3,87,1184,8,87,1,88,3,88,1187, - 8,88,1,88,1,88,3,88,1191,8,88,1,88,3,88,1194,8,88,1,88,3,88,1197,8,88,1, - 88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,5,88,1207,8,88,10,88,12,88,1210,9, - 88,1,88,1,88,1,88,1,88,3,88,1216,8,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88, - 1,88,1,88,3,88,1227,8,88,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1, - 91,1,92,1,92,1,92,1,92,1,92,1,92,1,92,5,92,1246,8,92,10,92,12,92,1249,9, - 92,1,92,1,92,3,92,1253,8,92,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,5,94, - 1263,8,94,10,94,12,94,1266,9,94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,5,95, - 1275,8,95,10,95,12,95,1278,9,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,5,95, - 1287,8,95,10,95,12,95,1290,9,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,5,95, - 1299,8,95,10,95,12,95,1302,9,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95, - 5,95,1312,8,95,10,95,12,95,1315,9,95,1,95,1,95,3,95,1319,8,95,1,96,1,96, - 1,96,1,97,1,97,1,97,1,97,1,97,5,97,1329,8,97,10,97,12,97,1332,9,97,1,98, - 1,98,3,98,1336,8,98,1,99,1,99,1,99,3,99,1341,8,99,1,100,1,100,1,100,1,100, - 5,100,1347,8,100,10,100,12,100,1350,9,100,1,101,1,101,1,101,1,101,1,102, - 3,102,1357,8,102,1,102,1,102,1,102,1,102,1,102,1,102,5,102,1365,8,102,10, - 102,12,102,1368,9,102,3,102,1370,8,102,1,102,1,102,1,102,1,102,1,102,5, - 102,1377,8,102,10,102,12,102,1380,9,102,3,102,1382,8,102,1,102,3,102,1385, - 8,102,1,102,1,102,1,103,1,103,3,103,1391,8,103,1,103,1,103,3,103,1395,8, - 103,1,104,1,104,1,104,1,104,3,104,1401,8,104,1,105,1,105,1,105,1,106,1, - 106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,3,107,1418, - 8,107,3,107,1420,8,107,1,107,1,107,1,107,1,107,1,107,1,107,5,107,1428,8, - 107,10,107,12,107,1431,9,107,1,108,3,108,1434,8,108,1,108,1,108,1,108,1, - 108,1,108,1,108,3,108,1442,8,108,1,108,1,108,1,108,1,108,1,108,5,108,1449, - 8,108,10,108,12,108,1452,9,108,1,108,1,108,1,108,3,108,1457,8,108,1,108, - 1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,3,108,1470, - 8,108,1,108,1,108,1,108,3,108,1475,8,108,1,108,1,108,1,108,1,108,1,108, - 1,108,1,108,1,108,5,108,1485,8,108,10,108,12,108,1488,9,108,1,108,1,108, - 3,108,1492,8,108,1,108,3,108,1495,8,108,1,108,1,108,1,108,1,108,3,108,1501, - 8,108,1,108,1,108,1,108,3,108,1506,8,108,1,108,1,108,1,108,3,108,1511,8, - 108,1,108,1,108,1,108,3,108,1516,8,108,1,109,3,109,1519,8,109,1,109,1,109, - 1,109,1,109,1,109,1,109,1,109,1,109,5,109,1529,8,109,10,109,12,109,1532, - 9,109,1,109,1,109,3,109,1536,8,109,1,109,3,109,1539,8,109,1,109,1,109,3, - 109,1543,8,109,1,110,1,110,1,110,1,110,3,110,1549,8,110,1,110,1,110,1,110, - 1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110, - 1,110,1,110,1,110,1,110,5,110,1570,8,110,10,110,12,110,1573,9,110,1,111, - 1,111,1,111,4,111,1578,8,111,11,111,12,111,1579,1,111,1,111,3,111,1584, - 8,111,1,111,1,111,1,111,1,111,1,111,4,111,1591,8,111,11,111,12,111,1592, - 1,111,1,111,3,111,1597,8,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111, - 1,111,1,111,1,111,1,111,1,111,1,111,1,111,3,111,1613,8,111,1,111,1,111, - 1,111,1,111,1,111,1,111,1,111,3,111,1622,8,111,1,111,1,111,1,111,1,111, - 1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111, - 1,111,1,111,1,111,1,111,1,111,1,111,3,111,1646,8,111,1,111,1,111,1,111, - 5,111,1651,8,111,10,111,12,111,1654,9,111,3,111,1656,8,111,1,111,1,111, - 1,111,1,111,1,111,1,111,1,111,1,111,3,111,1666,8,111,1,111,1,111,1,111, - 1,111,1,111,5,111,1673,8,111,10,111,12,111,1676,9,111,1,112,1,112,1,113, - 1,113,1,114,1,114,1,115,1,115,3,115,1686,8,115,1,116,1,116,1,116,3,116, - 1691,8,116,1,117,1,117,3,117,1695,8,117,1,118,1,118,1,118,4,118,1700,8, - 118,11,118,12,118,1701,1,119,1,119,1,119,3,119,1707,8,119,1,120,1,120,1, - 120,1,120,1,120,1,121,3,121,1715,8,121,1,121,1,121,3,121,1719,8,121,1,122, - 3,122,1722,8,122,1,122,1,122,3,122,1726,8,122,1,123,3,123,1729,8,123,1, - 123,1,123,3,123,1733,8,123,1,124,1,124,1,124,1,125,1,125,4,125,1740,8,125, - 11,125,12,125,1741,1,125,3,125,1745,8,125,1,126,1,126,1,126,1,126,1,127, - 1,127,1,127,5,127,1754,8,127,10,127,12,127,1757,9,127,1,128,1,128,3,128, - 1761,8,128,1,129,1,129,1,129,1,129,3,129,1767,8,129,1,130,1,130,1,131,1, - 131,1,132,1,132,1,132,1,132,1,132,1,133,1,133,1,133,5,133,1781,8,133,10, - 133,12,133,1784,9,133,1,134,1,134,5,134,1788,8,134,10,134,12,134,1791,9, - 134,1,135,1,135,5,135,1795,8,135,10,135,12,135,1798,9,135,1,136,1,136,1, - 136,1,137,1,137,1,137,1,137,1,138,1,138,1,138,1,139,1,139,1,139,1,139,5, - 139,1814,8,139,10,139,12,139,1817,9,139,1,139,1,139,1,140,1,140,3,140,1823, - 8,140,1,140,3,140,1826,8,140,1,141,1,141,1,141,3,141,1831,8,141,1,142,1, - 142,1,142,1,142,3,142,1837,8,142,1,143,1,143,1,143,1,143,1,143,1,143,3, - 143,1845,8,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,3,144,1861,8,144,1,145,1,145,1,145,1,145,1, - 145,1,145,1,145,3,145,1870,8,145,1,146,1,146,1,147,1,147,1,148,1,148,1, - 149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,3,149,1887,8,149,1, - 149,3,149,1890,8,149,1,150,1,150,1,151,1,151,1,152,1,152,1,153,1,153,1, - 154,1,154,1,155,1,155,1,156,1,156,1,156,2,1789,1796,5,156,172,214,220,222, - 157,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, - 0,40,2,0,36,36,84,84,1,0,87,89,2,0,193,193,253,255,2,0,192,192,239,239, - 2,0,5,5,24,24,2,0,74,74,76,76,2,0,6,6,82,82,1,0,246,250,3,0,283,283,288, - 288,291,291,6,0,265,265,268,272,276,280,284,284,286,286,292,292,1,0,70, - 71,2,0,273,275,281,282,2,0,266,266,287,287,1,0,233,234,3,0,8,8,102,102, - 236,236,1,0,233,235,2,0,167,167,237,238,1,0,241,243,2,0,184,184,186,186, - 2,0,83,83,140,140,2,0,105,106,108,108,2,0,48,49,51,52,1,0,35,36,2,0,67, - 67,69,69,1,0,8,9,1,0,32,33,2,0,297,297,315,316,4,0,132,132,313,313,317, - 317,320,320,2,0,315,316,318,318,1,0,315,316,1,0,324,325,2,0,324,324,327, - 327,1,0,327,328,1,0,321,322,4,0,132,132,313,313,315,317,319,320,3,0,25, - 25,296,297,315,316,2,0,8,8,10,10,32,0,6,6,13,17,20,21,26,30,32,32,34,36, - 38,38,50,50,56,69,72,72,75,77,80,81,84,85,90,93,95,97,99,99,102,104,107, - 107,110,124,128,142,144,184,186,203,205,212,214,234,236,237,239,240,253, - 254,258,260,265,273,276,278,280,285,287,292,6,0,45,46,48,52,54,55,105,108, - 143,143,223,223,24,0,4,42,44,44,47,47,53,53,56,70,72,77,80,81,83,85,90, - 99,102,104,109,142,144,176,178,212,214,222,224,234,236,237,239,240,253, - 254,256,256,258,260,265,273,276,278,280,285,287,292,2077,0,314,1,0,0,0, - 2,317,1,0,0,0,4,327,1,0,0,0,6,342,1,0,0,0,8,344,1,0,0,0,10,360,1,0,0,0, - 12,364,1,0,0,0,14,366,1,0,0,0,16,369,1,0,0,0,18,380,1,0,0,0,20,388,1,0, - 0,0,22,396,1,0,0,0,24,398,1,0,0,0,26,443,1,0,0,0,28,445,1,0,0,0,30,452, - 1,0,0,0,32,456,1,0,0,0,34,460,1,0,0,0,36,464,1,0,0,0,38,507,1,0,0,0,40, - 511,1,0,0,0,42,513,1,0,0,0,44,554,1,0,0,0,46,568,1,0,0,0,48,570,1,0,0,0, - 50,580,1,0,0,0,52,582,1,0,0,0,54,630,1,0,0,0,56,632,1,0,0,0,58,636,1,0, - 0,0,60,644,1,0,0,0,62,652,1,0,0,0,64,656,1,0,0,0,66,663,1,0,0,0,68,679, - 1,0,0,0,70,686,1,0,0,0,72,689,1,0,0,0,74,699,1,0,0,0,76,701,1,0,0,0,78, - 707,1,0,0,0,80,709,1,0,0,0,82,717,1,0,0,0,84,725,1,0,0,0,86,727,1,0,0,0, - 88,731,1,0,0,0,90,735,1,0,0,0,92,759,1,0,0,0,94,763,1,0,0,0,96,765,1,0, - 0,0,98,777,1,0,0,0,100,783,1,0,0,0,102,785,1,0,0,0,104,790,1,0,0,0,106, - 801,1,0,0,0,108,819,1,0,0,0,110,839,1,0,0,0,112,850,1,0,0,0,114,852,1,0, - 0,0,116,865,1,0,0,0,118,872,1,0,0,0,120,875,1,0,0,0,122,884,1,0,0,0,124, - 888,1,0,0,0,126,892,1,0,0,0,128,895,1,0,0,0,130,903,1,0,0,0,132,908,1,0, - 0,0,134,925,1,0,0,0,136,932,1,0,0,0,138,942,1,0,0,0,140,951,1,0,0,0,142, - 961,1,0,0,0,144,979,1,0,0,0,146,981,1,0,0,0,148,994,1,0,0,0,150,997,1,0, - 0,0,152,1006,1,0,0,0,154,1017,1,0,0,0,156,1060,1,0,0,0,158,1079,1,0,0,0, - 160,1088,1,0,0,0,162,1107,1,0,0,0,164,1109,1,0,0,0,166,1123,1,0,0,0,168, - 1138,1,0,0,0,170,1145,1,0,0,0,172,1148,1,0,0,0,174,1181,1,0,0,0,176,1226, - 1,0,0,0,178,1228,1,0,0,0,180,1230,1,0,0,0,182,1236,1,0,0,0,184,1252,1,0, - 0,0,186,1254,1,0,0,0,188,1257,1,0,0,0,190,1318,1,0,0,0,192,1320,1,0,0,0, - 194,1323,1,0,0,0,196,1333,1,0,0,0,198,1337,1,0,0,0,200,1342,1,0,0,0,202, - 1351,1,0,0,0,204,1356,1,0,0,0,206,1388,1,0,0,0,208,1400,1,0,0,0,210,1402, - 1,0,0,0,212,1405,1,0,0,0,214,1419,1,0,0,0,216,1515,1,0,0,0,218,1542,1,0, - 0,0,220,1548,1,0,0,0,222,1665,1,0,0,0,224,1677,1,0,0,0,226,1679,1,0,0,0, - 228,1681,1,0,0,0,230,1685,1,0,0,0,232,1687,1,0,0,0,234,1692,1,0,0,0,236, - 1699,1,0,0,0,238,1703,1,0,0,0,240,1708,1,0,0,0,242,1718,1,0,0,0,244,1721, - 1,0,0,0,246,1728,1,0,0,0,248,1734,1,0,0,0,250,1744,1,0,0,0,252,1746,1,0, - 0,0,254,1750,1,0,0,0,256,1760,1,0,0,0,258,1766,1,0,0,0,260,1768,1,0,0,0, - 262,1770,1,0,0,0,264,1772,1,0,0,0,266,1777,1,0,0,0,268,1785,1,0,0,0,270, - 1792,1,0,0,0,272,1799,1,0,0,0,274,1802,1,0,0,0,276,1806,1,0,0,0,278,1809, - 1,0,0,0,280,1820,1,0,0,0,282,1830,1,0,0,0,284,1836,1,0,0,0,286,1844,1,0, - 0,0,288,1860,1,0,0,0,290,1869,1,0,0,0,292,1871,1,0,0,0,294,1873,1,0,0,0, - 296,1875,1,0,0,0,298,1889,1,0,0,0,300,1891,1,0,0,0,302,1893,1,0,0,0,304, - 1895,1,0,0,0,306,1897,1,0,0,0,308,1899,1,0,0,0,310,1901,1,0,0,0,312,1903, - 1,0,0,0,314,315,3,2,1,0,315,316,5,0,0,1,316,1,1,0,0,0,317,318,3,4,2,0,318, - 319,5,0,0,1,319,3,1,0,0,0,320,322,3,6,3,0,321,323,5,307,0,0,322,321,1,0, - 0,0,322,323,1,0,0,0,323,326,1,0,0,0,324,326,3,8,4,0,325,320,1,0,0,0,325, - 324,1,0,0,0,326,329,1,0,0,0,327,325,1,0,0,0,327,328,1,0,0,0,328,5,1,0,0, - 0,329,327,1,0,0,0,330,343,3,10,5,0,331,343,3,12,6,0,332,343,3,14,7,0,333, - 343,3,16,8,0,334,343,3,22,11,0,335,343,3,26,13,0,336,343,3,28,14,0,337, - 343,3,30,15,0,338,343,3,32,16,0,339,343,3,34,17,0,340,343,3,36,18,0,341, - 343,3,38,19,0,342,330,1,0,0,0,342,331,1,0,0,0,342,332,1,0,0,0,342,333,1, - 0,0,0,342,334,1,0,0,0,342,335,1,0,0,0,342,336,1,0,0,0,342,337,1,0,0,0,342, - 338,1,0,0,0,342,339,1,0,0,0,342,340,1,0,0,0,342,341,1,0,0,0,343,7,1,0,0, - 0,344,345,5,307,0,0,345,9,1,0,0,0,346,361,3,40,20,0,347,361,3,104,52,0, - 348,361,3,106,53,0,349,361,3,108,54,0,350,361,3,102,51,0,351,361,3,114, - 57,0,352,361,3,128,64,0,353,361,3,130,65,0,354,361,3,132,66,0,355,361,3, - 134,67,0,356,361,3,136,68,0,357,361,3,138,69,0,358,361,3,140,70,0,359,361, - 3,142,71,0,360,346,1,0,0,0,360,347,1,0,0,0,360,348,1,0,0,0,360,349,1,0, - 0,0,360,350,1,0,0,0,360,351,1,0,0,0,360,352,1,0,0,0,360,353,1,0,0,0,360, - 354,1,0,0,0,360,355,1,0,0,0,360,356,1,0,0,0,360,357,1,0,0,0,360,358,1,0, - 0,0,360,359,1,0,0,0,361,11,1,0,0,0,362,365,3,156,78,0,363,365,3,144,72, - 0,364,362,1,0,0,0,364,363,1,0,0,0,365,13,1,0,0,0,366,367,7,0,0,0,367,368, - 3,268,134,0,368,15,1,0,0,0,369,373,5,85,0,0,370,374,3,18,9,0,371,372,5, - 86,0,0,372,374,5,37,0,0,373,370,1,0,0,0,373,371,1,0,0,0,373,374,1,0,0,0, - 374,378,1,0,0,0,375,379,3,12,6,0,376,379,3,146,73,0,377,379,3,154,77,0, - 378,375,1,0,0,0,378,376,1,0,0,0,378,377,1,0,0,0,379,17,1,0,0,0,380,385, - 3,20,10,0,381,382,5,306,0,0,382,384,3,20,10,0,383,381,1,0,0,0,384,387,1, - 0,0,0,385,383,1,0,0,0,385,386,1,0,0,0,386,19,1,0,0,0,387,385,1,0,0,0,388, - 389,7,1,0,0,389,21,1,0,0,0,390,392,5,99,0,0,391,393,5,239,0,0,392,391,1, - 0,0,0,392,393,1,0,0,0,393,394,1,0,0,0,394,397,3,268,134,0,395,397,3,24, - 12,0,396,390,1,0,0,0,396,395,1,0,0,0,397,23,1,0,0,0,398,399,5,99,0,0,399, - 400,5,101,0,0,400,405,3,268,134,0,401,402,5,306,0,0,402,404,3,268,134,0, - 403,401,1,0,0,0,404,407,1,0,0,0,405,403,1,0,0,0,405,406,1,0,0,0,406,25, - 1,0,0,0,407,405,1,0,0,0,408,409,5,95,0,0,409,444,7,2,0,0,410,411,5,95,0, - 0,411,412,5,66,0,0,412,444,7,3,0,0,413,414,5,95,0,0,414,417,5,96,0,0,415, - 416,7,4,0,0,416,418,3,268,134,0,417,415,1,0,0,0,417,418,1,0,0,0,418,420, - 1,0,0,0,419,421,3,218,109,0,420,419,1,0,0,0,420,421,1,0,0,0,421,444,1,0, - 0,0,422,423,5,95,0,0,423,424,5,97,0,0,424,425,7,4,0,0,425,427,3,268,134, - 0,426,428,3,218,109,0,427,426,1,0,0,0,427,428,1,0,0,0,428,444,1,0,0,0,429, - 430,5,95,0,0,430,431,5,73,0,0,431,432,7,5,0,0,432,444,3,268,134,0,433,435, - 5,95,0,0,434,436,5,53,0,0,435,434,1,0,0,0,435,436,1,0,0,0,436,437,1,0,0, - 0,437,444,5,103,0,0,438,440,5,95,0,0,439,441,5,52,0,0,440,439,1,0,0,0,440, - 441,1,0,0,0,441,442,1,0,0,0,442,444,5,101,0,0,443,408,1,0,0,0,443,410,1, - 0,0,0,443,413,1,0,0,0,443,422,1,0,0,0,443,429,1,0,0,0,443,433,1,0,0,0,443, - 438,1,0,0,0,444,27,1,0,0,0,445,446,5,212,0,0,446,447,5,100,0,0,447,450, - 3,268,134,0,448,449,5,70,0,0,449,451,3,278,139,0,450,448,1,0,0,0,450,451, - 1,0,0,0,451,29,1,0,0,0,452,453,5,213,0,0,453,454,5,100,0,0,454,455,3,268, - 134,0,455,31,1,0,0,0,456,458,5,116,0,0,457,459,3,280,140,0,458,457,1,0, - 0,0,458,459,1,0,0,0,459,33,1,0,0,0,460,462,5,117,0,0,461,463,3,282,141, - 0,462,461,1,0,0,0,462,463,1,0,0,0,463,35,1,0,0,0,464,465,7,6,0,0,465,466, - 5,244,0,0,466,467,3,112,56,0,467,37,1,0,0,0,468,469,5,6,0,0,469,470,5,244, - 0,0,470,471,5,70,0,0,471,474,5,329,0,0,472,473,5,7,0,0,473,475,3,268,134, - 0,474,472,1,0,0,0,474,475,1,0,0,0,475,508,1,0,0,0,476,477,5,6,0,0,477,478, - 5,245,0,0,478,479,5,70,0,0,479,482,5,329,0,0,480,481,5,7,0,0,481,483,3, - 268,134,0,482,480,1,0,0,0,482,483,1,0,0,0,483,486,1,0,0,0,484,485,5,113, - 0,0,485,487,3,268,134,0,486,484,1,0,0,0,486,487,1,0,0,0,487,508,1,0,0,0, - 488,489,5,6,0,0,489,490,7,7,0,0,490,491,5,70,0,0,491,492,5,329,0,0,492, - 493,5,113,0,0,493,508,3,268,134,0,494,495,5,6,0,0,495,496,5,251,0,0,496, - 508,5,329,0,0,497,498,5,6,0,0,498,499,5,252,0,0,499,500,5,245,0,0,500,501, - 5,70,0,0,501,502,5,329,0,0,502,503,5,113,0,0,503,504,3,268,134,0,504,505, - 5,258,0,0,505,506,3,268,134,0,506,508,1,0,0,0,507,468,1,0,0,0,507,476,1, - 0,0,0,507,488,1,0,0,0,507,494,1,0,0,0,507,497,1,0,0,0,508,39,1,0,0,0,509, - 512,3,42,21,0,510,512,3,44,22,0,511,509,1,0,0,0,511,510,1,0,0,0,512,41, - 1,0,0,0,513,515,5,73,0,0,514,516,5,166,0,0,515,514,1,0,0,0,515,516,1,0, - 0,0,516,517,1,0,0,0,517,519,5,74,0,0,518,520,3,274,137,0,519,518,1,0,0, - 0,519,520,1,0,0,0,520,521,1,0,0,0,521,522,3,98,49,0,522,523,5,304,0,0,523, - 528,3,46,23,0,524,525,5,306,0,0,525,527,3,46,23,0,526,524,1,0,0,0,527,530, - 1,0,0,0,528,526,1,0,0,0,528,529,1,0,0,0,529,533,1,0,0,0,530,528,1,0,0,0, - 531,532,5,306,0,0,532,534,3,80,40,0,533,531,1,0,0,0,533,534,1,0,0,0,534, - 537,1,0,0,0,535,536,5,306,0,0,536,538,3,82,41,0,537,535,1,0,0,0,537,538, - 1,0,0,0,538,541,1,0,0,0,539,540,5,306,0,0,540,542,3,86,43,0,541,539,1,0, - 0,0,541,542,1,0,0,0,542,543,1,0,0,0,543,545,5,305,0,0,544,546,3,70,35,0, - 545,544,1,0,0,0,545,546,1,0,0,0,546,548,1,0,0,0,547,549,3,88,44,0,548,547, - 1,0,0,0,548,549,1,0,0,0,549,550,1,0,0,0,550,552,3,272,136,0,551,553,3,96, - 48,0,552,551,1,0,0,0,552,553,1,0,0,0,553,43,1,0,0,0,554,555,5,73,0,0,555, - 557,5,74,0,0,556,558,3,274,137,0,557,556,1,0,0,0,557,558,1,0,0,0,558,559, - 1,0,0,0,559,560,3,98,49,0,560,563,3,272,136,0,561,562,5,7,0,0,562,564,3, - 156,78,0,563,561,1,0,0,0,563,564,1,0,0,0,564,45,1,0,0,0,565,569,3,48,24, - 0,566,569,3,72,36,0,567,569,3,76,38,0,568,565,1,0,0,0,568,566,1,0,0,0,568, - 567,1,0,0,0,569,47,1,0,0,0,570,571,3,50,25,0,571,573,3,54,27,0,572,574, - 3,68,34,0,573,572,1,0,0,0,573,574,1,0,0,0,574,576,1,0,0,0,575,577,3,70, - 35,0,576,575,1,0,0,0,576,577,1,0,0,0,577,49,1,0,0,0,578,581,3,270,135,0, - 579,581,3,212,106,0,580,578,1,0,0,0,580,579,1,0,0,0,581,51,1,0,0,0,582, - 583,5,304,0,0,583,588,3,50,25,0,584,585,5,306,0,0,585,587,3,50,25,0,586, - 584,1,0,0,0,587,590,1,0,0,0,588,586,1,0,0,0,588,589,1,0,0,0,589,591,1,0, - 0,0,590,588,1,0,0,0,591,592,5,305,0,0,592,53,1,0,0,0,593,631,7,8,0,0,594, - 596,7,9,0,0,595,597,3,56,28,0,596,595,1,0,0,0,596,597,1,0,0,0,597,631,1, - 0,0,0,598,600,5,285,0,0,599,601,3,56,28,0,600,599,1,0,0,0,600,601,1,0,0, - 0,601,608,1,0,0,0,602,604,7,10,0,0,603,605,5,224,0,0,604,603,1,0,0,0,604, - 605,1,0,0,0,605,606,1,0,0,0,606,607,5,284,0,0,607,609,5,264,0,0,608,602, - 1,0,0,0,608,609,1,0,0,0,609,631,1,0,0,0,610,612,7,11,0,0,611,613,3,58,29, - 0,612,611,1,0,0,0,612,613,1,0,0,0,613,631,1,0,0,0,614,616,7,12,0,0,615, - 617,3,62,31,0,616,615,1,0,0,0,616,617,1,0,0,0,617,631,1,0,0,0,618,620,5, - 267,0,0,619,621,3,64,32,0,620,619,1,0,0,0,620,621,1,0,0,0,621,631,1,0,0, - 0,622,624,5,290,0,0,623,625,3,66,33,0,624,623,1,0,0,0,624,625,1,0,0,0,625, - 631,1,0,0,0,626,628,5,289,0,0,627,629,3,60,30,0,628,627,1,0,0,0,628,629, - 1,0,0,0,629,631,1,0,0,0,630,593,1,0,0,0,630,594,1,0,0,0,630,598,1,0,0,0, - 630,610,1,0,0,0,630,614,1,0,0,0,630,618,1,0,0,0,630,622,1,0,0,0,630,626, - 1,0,0,0,631,55,1,0,0,0,632,633,5,304,0,0,633,634,3,302,151,0,634,635,5, - 305,0,0,635,57,1,0,0,0,636,637,5,304,0,0,637,640,3,302,151,0,638,639,5, - 306,0,0,639,641,3,302,151,0,640,638,1,0,0,0,640,641,1,0,0,0,641,642,1,0, - 0,0,642,643,5,305,0,0,643,59,1,0,0,0,644,645,5,304,0,0,645,648,3,300,150, - 0,646,647,5,306,0,0,647,649,3,300,150,0,648,646,1,0,0,0,648,649,1,0,0,0, - 649,650,1,0,0,0,650,651,5,305,0,0,651,61,1,0,0,0,652,653,5,295,0,0,653, - 654,3,54,27,0,654,655,5,294,0,0,655,63,1,0,0,0,656,657,5,295,0,0,657,658, - 3,54,27,0,658,659,5,306,0,0,659,660,3,54,27,0,660,661,1,0,0,0,661,662,5, - 294,0,0,662,65,1,0,0,0,663,664,5,295,0,0,664,665,3,50,25,0,665,672,3,54, - 27,0,666,667,5,306,0,0,667,668,3,50,25,0,668,669,3,54,27,0,669,671,1,0, - 0,0,670,666,1,0,0,0,671,674,1,0,0,0,672,670,1,0,0,0,672,673,1,0,0,0,673, - 675,1,0,0,0,674,672,1,0,0,0,675,676,5,294,0,0,676,67,1,0,0,0,677,678,5, - 185,0,0,678,680,3,84,42,0,679,677,1,0,0,0,679,680,1,0,0,0,680,681,1,0,0, - 0,681,682,5,256,0,0,682,683,5,258,0,0,683,684,5,25,0,0,684,685,5,261,0, - 0,685,69,1,0,0,0,686,687,5,115,0,0,687,688,5,323,0,0,688,71,1,0,0,0,689, - 690,3,50,25,0,690,691,3,54,27,0,691,694,5,262,0,0,692,693,5,5,0,0,693,695, - 3,74,37,0,694,692,1,0,0,0,694,695,1,0,0,0,695,697,1,0,0,0,696,698,5,263, - 0,0,697,696,1,0,0,0,697,698,1,0,0,0,698,73,1,0,0,0,699,700,5,323,0,0,700, - 75,1,0,0,0,701,702,3,50,25,0,702,703,5,7,0,0,703,705,3,78,39,0,704,706, - 3,70,35,0,705,704,1,0,0,0,705,706,1,0,0,0,706,77,1,0,0,0,707,708,3,212, - 106,0,708,79,1,0,0,0,709,710,5,226,0,0,710,711,5,37,0,0,711,712,3,212,106, - 0,712,713,5,7,0,0,713,714,3,212,106,0,714,81,1,0,0,0,715,716,5,185,0,0, - 716,718,3,84,42,0,717,715,1,0,0,0,717,718,1,0,0,0,718,719,1,0,0,0,719,720, - 5,256,0,0,720,721,5,258,0,0,721,722,3,52,26,0,722,723,5,25,0,0,723,724, - 5,261,0,0,724,83,1,0,0,0,725,726,3,256,128,0,726,85,1,0,0,0,727,728,5,259, - 0,0,728,729,5,37,0,0,729,730,5,260,0,0,730,87,1,0,0,0,731,732,5,200,0,0, - 732,733,5,13,0,0,733,734,3,90,45,0,734,89,1,0,0,0,735,736,5,304,0,0,736, - 741,3,92,46,0,737,738,5,306,0,0,738,740,3,92,46,0,739,737,1,0,0,0,740,743, - 1,0,0,0,741,739,1,0,0,0,741,742,1,0,0,0,742,744,1,0,0,0,743,741,1,0,0,0, - 744,745,5,305,0,0,745,91,1,0,0,0,746,760,3,230,115,0,747,748,3,256,128, - 0,748,749,5,304,0,0,749,754,3,94,47,0,750,751,5,306,0,0,751,753,3,94,47, - 0,752,750,1,0,0,0,753,756,1,0,0,0,754,752,1,0,0,0,754,755,1,0,0,0,755,757, - 1,0,0,0,756,754,1,0,0,0,757,758,5,305,0,0,758,760,1,0,0,0,759,746,1,0,0, - 0,759,747,1,0,0,0,760,93,1,0,0,0,761,764,3,230,115,0,762,764,3,298,149, - 0,763,761,1,0,0,0,763,762,1,0,0,0,764,95,1,0,0,0,765,766,5,29,0,0,766,775, - 3,98,49,0,767,771,5,304,0,0,768,770,3,100,50,0,769,768,1,0,0,0,770,773, - 1,0,0,0,771,769,1,0,0,0,771,772,1,0,0,0,772,774,1,0,0,0,773,771,1,0,0,0, - 774,776,5,305,0,0,775,767,1,0,0,0,775,776,1,0,0,0,776,97,1,0,0,0,777,778, - 3,268,134,0,778,99,1,0,0,0,779,780,7,13,0,0,780,784,7,14,0,0,781,782,7, - 15,0,0,782,784,7,16,0,0,783,779,1,0,0,0,783,781,1,0,0,0,784,101,1,0,0,0, - 785,786,5,73,0,0,786,787,5,239,0,0,787,788,3,268,134,0,788,789,3,272,136, - 0,789,103,1,0,0,0,790,791,5,73,0,0,791,793,5,192,0,0,792,794,3,274,137, - 0,793,792,1,0,0,0,793,794,1,0,0,0,794,795,1,0,0,0,795,797,3,268,134,0,796, - 798,3,70,35,0,797,796,1,0,0,0,797,798,1,0,0,0,798,799,1,0,0,0,799,800,3, - 272,136,0,800,105,1,0,0,0,801,803,5,73,0,0,802,804,5,166,0,0,803,802,1, - 0,0,0,803,804,1,0,0,0,804,805,1,0,0,0,805,807,5,76,0,0,806,808,3,274,137, - 0,807,806,1,0,0,0,807,808,1,0,0,0,808,809,1,0,0,0,809,811,3,268,134,0,810, - 812,3,52,26,0,811,810,1,0,0,0,811,812,1,0,0,0,812,814,1,0,0,0,813,815,3, - 70,35,0,814,813,1,0,0,0,814,815,1,0,0,0,815,816,1,0,0,0,816,817,5,7,0,0, - 817,818,3,156,78,0,818,107,1,0,0,0,819,823,5,73,0,0,820,824,5,166,0,0,821, - 822,5,166,0,0,822,824,5,232,0,0,823,820,1,0,0,0,823,821,1,0,0,0,823,824, - 1,0,0,0,824,825,1,0,0,0,825,827,5,157,0,0,826,828,3,274,137,0,827,826,1, - 0,0,0,827,828,1,0,0,0,828,829,1,0,0,0,829,830,3,268,134,0,830,831,5,7,0, - 0,831,834,3,256,128,0,832,833,5,240,0,0,833,835,7,17,0,0,834,832,1,0,0, - 0,834,835,1,0,0,0,835,837,1,0,0,0,836,838,3,110,55,0,837,836,1,0,0,0,837, - 838,1,0,0,0,838,109,1,0,0,0,839,840,5,143,0,0,840,841,5,244,0,0,841,847, - 3,112,56,0,842,843,5,306,0,0,843,844,5,244,0,0,844,846,3,112,56,0,845,842, - 1,0,0,0,846,849,1,0,0,0,847,845,1,0,0,0,847,848,1,0,0,0,848,111,1,0,0,0, - 849,847,1,0,0,0,850,851,5,323,0,0,851,113,1,0,0,0,852,853,5,112,0,0,853, - 855,5,74,0,0,854,856,3,276,138,0,855,854,1,0,0,0,855,856,1,0,0,0,856,857, - 1,0,0,0,857,863,3,268,134,0,858,864,3,116,58,0,859,864,3,118,59,0,860,864, - 3,120,60,0,861,864,3,122,61,0,862,864,3,124,62,0,863,858,1,0,0,0,863,859, - 1,0,0,0,863,860,1,0,0,0,863,861,1,0,0,0,863,862,1,0,0,0,864,115,1,0,0,0, - 865,867,5,113,0,0,866,868,3,268,134,0,867,866,1,0,0,0,867,868,1,0,0,0,868, - 869,1,0,0,0,869,870,5,109,0,0,870,871,3,268,134,0,871,117,1,0,0,0,872,873, - 5,116,0,0,873,874,3,278,139,0,874,119,1,0,0,0,875,876,5,6,0,0,876,877,5, - 185,0,0,877,878,3,84,42,0,878,879,5,256,0,0,879,880,5,258,0,0,880,882,3, - 52,26,0,881,883,3,126,63,0,882,881,1,0,0,0,882,883,1,0,0,0,883,121,1,0, - 0,0,884,885,5,104,0,0,885,886,5,185,0,0,886,887,3,84,42,0,887,123,1,0,0, - 0,888,889,5,6,0,0,889,890,5,257,0,0,890,891,3,52,26,0,891,125,1,0,0,0,892, - 893,5,25,0,0,893,894,5,261,0,0,894,127,1,0,0,0,895,896,5,112,0,0,896,897, - 5,76,0,0,897,901,3,268,134,0,898,902,3,116,58,0,899,900,5,7,0,0,900,902, - 3,156,78,0,901,898,1,0,0,0,901,899,1,0,0,0,902,129,1,0,0,0,903,904,5,112, - 0,0,904,905,5,192,0,0,905,906,3,268,134,0,906,907,3,118,59,0,907,131,1, - 0,0,0,908,912,5,112,0,0,909,913,5,166,0,0,910,911,5,166,0,0,911,913,5,232, - 0,0,912,909,1,0,0,0,912,910,1,0,0,0,912,913,1,0,0,0,913,914,1,0,0,0,914, - 916,5,157,0,0,915,917,3,276,138,0,916,915,1,0,0,0,916,917,1,0,0,0,917,918, - 1,0,0,0,918,919,3,268,134,0,919,920,5,7,0,0,920,923,3,256,128,0,921,922, - 5,240,0,0,922,924,7,17,0,0,923,921,1,0,0,0,923,924,1,0,0,0,924,133,1,0, - 0,0,925,926,5,104,0,0,926,928,5,239,0,0,927,929,3,276,138,0,928,927,1,0, - 0,0,928,929,1,0,0,0,929,930,1,0,0,0,930,931,3,268,134,0,931,135,1,0,0,0, - 932,934,5,104,0,0,933,935,5,166,0,0,934,933,1,0,0,0,934,935,1,0,0,0,935, - 936,1,0,0,0,936,938,5,74,0,0,937,939,3,276,138,0,938,937,1,0,0,0,938,939, - 1,0,0,0,939,940,1,0,0,0,940,941,3,268,134,0,941,137,1,0,0,0,942,943,5,104, - 0,0,943,945,5,192,0,0,944,946,3,276,138,0,945,944,1,0,0,0,945,946,1,0,0, - 0,946,947,1,0,0,0,947,949,3,268,134,0,948,950,7,18,0,0,949,948,1,0,0,0, - 949,950,1,0,0,0,950,139,1,0,0,0,951,953,5,104,0,0,952,954,5,166,0,0,953, - 952,1,0,0,0,953,954,1,0,0,0,954,955,1,0,0,0,955,957,5,76,0,0,956,958,3, - 276,138,0,957,956,1,0,0,0,957,958,1,0,0,0,958,959,1,0,0,0,959,960,3,268, - 134,0,960,141,1,0,0,0,961,965,5,104,0,0,962,966,5,166,0,0,963,964,5,166, - 0,0,964,966,5,232,0,0,965,962,1,0,0,0,965,963,1,0,0,0,965,966,1,0,0,0,966, - 967,1,0,0,0,967,969,5,157,0,0,968,970,3,276,138,0,969,968,1,0,0,0,969,970, - 1,0,0,0,970,971,1,0,0,0,971,972,3,268,134,0,972,143,1,0,0,0,973,975,5,78, - 0,0,974,973,1,0,0,0,974,975,1,0,0,0,975,976,1,0,0,0,976,980,3,146,73,0, - 977,978,5,78,0,0,978,980,3,154,77,0,979,974,1,0,0,0,979,977,1,0,0,0,980, - 145,1,0,0,0,981,982,5,80,0,0,982,983,7,19,0,0,983,992,3,268,134,0,984,986, - 3,148,74,0,985,984,1,0,0,0,985,986,1,0,0,0,986,988,1,0,0,0,987,989,3,52, - 26,0,988,987,1,0,0,0,988,989,1,0,0,0,989,990,1,0,0,0,990,993,3,156,78,0, - 991,993,3,150,75,0,992,985,1,0,0,0,992,991,1,0,0,0,993,147,1,0,0,0,994, - 995,5,60,0,0,995,996,3,278,139,0,996,149,1,0,0,0,997,998,5,72,0,0,998,1003, - 3,152,76,0,999,1000,5,306,0,0,1000,1002,3,152,76,0,1001,999,1,0,0,0,1002, - 1005,1,0,0,0,1003,1001,1,0,0,0,1003,1004,1,0,0,0,1004,151,1,0,0,0,1005, - 1003,1,0,0,0,1006,1007,5,304,0,0,1007,1012,3,298,149,0,1008,1009,5,306, - 0,0,1009,1011,3,298,149,0,1010,1008,1,0,0,0,1011,1014,1,0,0,0,1012,1010, - 1,0,0,0,1012,1013,1,0,0,0,1013,1015,1,0,0,0,1014,1012,1,0,0,0,1015,1016, - 5,305,0,0,1016,153,1,0,0,0,1017,1018,5,79,0,0,1018,1019,5,116,0,0,1019, - 1023,5,43,0,0,1020,1021,3,146,73,0,1021,1022,5,307,0,0,1022,1024,1,0,0, - 0,1023,1020,1,0,0,0,1024,1025,1,0,0,0,1025,1023,1,0,0,0,1025,1026,1,0,0, - 0,1026,1027,1,0,0,0,1027,1028,5,44,0,0,1028,155,1,0,0,0,1029,1030,6,78, - -1,0,1030,1061,3,158,79,0,1031,1032,5,70,0,0,1032,1037,3,160,80,0,1033, - 1034,5,306,0,0,1034,1036,3,160,80,0,1035,1033,1,0,0,0,1036,1039,1,0,0,0, - 1037,1035,1,0,0,0,1037,1038,1,0,0,0,1038,1040,1,0,0,0,1039,1037,1,0,0,0, - 1040,1041,3,156,78,5,1041,1061,1,0,0,0,1042,1043,5,304,0,0,1043,1044,3, - 156,78,0,1044,1045,5,305,0,0,1045,1061,1,0,0,0,1046,1048,3,166,83,0,1047, - 1049,3,194,97,0,1048,1047,1,0,0,0,1048,1049,1,0,0,0,1049,1051,1,0,0,0,1050, - 1052,3,198,99,0,1051,1050,1,0,0,0,1051,1052,1,0,0,0,1052,1061,1,0,0,0,1053, - 1055,3,164,82,0,1054,1056,3,194,97,0,1055,1054,1,0,0,0,1055,1056,1,0,0, - 0,1056,1058,1,0,0,0,1057,1059,3,198,99,0,1058,1057,1,0,0,0,1058,1059,1, - 0,0,0,1059,1061,1,0,0,0,1060,1029,1,0,0,0,1060,1031,1,0,0,0,1060,1042,1, - 0,0,0,1060,1046,1,0,0,0,1060,1053,1,0,0,0,1061,1076,1,0,0,0,1062,1063,10, - 3,0,0,1063,1065,7,20,0,0,1064,1066,5,8,0,0,1065,1064,1,0,0,0,1065,1066, - 1,0,0,0,1066,1067,1,0,0,0,1067,1069,3,156,78,0,1068,1070,3,194,97,0,1069, - 1068,1,0,0,0,1069,1070,1,0,0,0,1070,1072,1,0,0,0,1071,1073,3,198,99,0,1072, - 1071,1,0,0,0,1072,1073,1,0,0,0,1073,1075,1,0,0,0,1074,1062,1,0,0,0,1075, - 1078,1,0,0,0,1076,1074,1,0,0,0,1076,1077,1,0,0,0,1077,157,1,0,0,0,1078, - 1076,1,0,0,0,1079,1080,5,72,0,0,1080,1085,3,212,106,0,1081,1082,5,306,0, - 0,1082,1084,3,212,106,0,1083,1081,1,0,0,0,1084,1087,1,0,0,0,1085,1083,1, - 0,0,0,1085,1086,1,0,0,0,1086,159,1,0,0,0,1087,1085,1,0,0,0,1088,1100,3, - 162,81,0,1089,1090,5,304,0,0,1090,1095,3,50,25,0,1091,1092,5,306,0,0,1092, - 1094,3,50,25,0,1093,1091,1,0,0,0,1094,1097,1,0,0,0,1095,1093,1,0,0,0,1095, - 1096,1,0,0,0,1096,1098,1,0,0,0,1097,1095,1,0,0,0,1098,1099,5,305,0,0,1099, - 1101,1,0,0,0,1100,1089,1,0,0,0,1100,1101,1,0,0,0,1101,1102,1,0,0,0,1102, - 1103,5,7,0,0,1103,1104,5,304,0,0,1104,1105,3,156,78,0,1105,1106,5,305,0, - 0,1106,161,1,0,0,0,1107,1108,3,256,128,0,1108,163,1,0,0,0,1109,1110,3,166, - 83,0,1110,1112,3,170,85,0,1111,1113,3,186,93,0,1112,1111,1,0,0,0,1112,1113, - 1,0,0,0,1113,1115,1,0,0,0,1114,1116,3,188,94,0,1115,1114,1,0,0,0,1115,1116, - 1,0,0,0,1116,1118,1,0,0,0,1117,1119,3,192,96,0,1118,1117,1,0,0,0,1118,1119, - 1,0,0,0,1119,1121,1,0,0,0,1120,1122,3,200,100,0,1121,1120,1,0,0,0,1121, - 1122,1,0,0,0,1122,165,1,0,0,0,1123,1125,5,4,0,0,1124,1126,3,306,153,0,1125, - 1124,1,0,0,0,1125,1126,1,0,0,0,1126,1136,1,0,0,0,1127,1137,5,313,0,0,1128, - 1133,3,168,84,0,1129,1130,5,306,0,0,1130,1132,3,168,84,0,1131,1129,1,0, - 0,0,1132,1135,1,0,0,0,1133,1131,1,0,0,0,1133,1134,1,0,0,0,1134,1137,1,0, - 0,0,1135,1133,1,0,0,0,1136,1127,1,0,0,0,1136,1128,1,0,0,0,1137,167,1,0, - 0,0,1138,1143,3,212,106,0,1139,1141,5,7,0,0,1140,1139,1,0,0,0,1140,1141, - 1,0,0,0,1141,1142,1,0,0,0,1142,1144,3,212,106,0,1143,1140,1,0,0,0,1143, - 1144,1,0,0,0,1144,169,1,0,0,0,1145,1146,5,5,0,0,1146,1147,3,172,86,0,1147, - 171,1,0,0,0,1148,1149,6,86,-1,0,1149,1154,3,174,87,0,1150,1151,5,306,0, - 0,1151,1153,3,174,87,0,1152,1150,1,0,0,0,1153,1156,1,0,0,0,1154,1152,1, - 0,0,0,1154,1155,1,0,0,0,1155,1178,1,0,0,0,1156,1154,1,0,0,0,1157,1158,10, - 1,0,0,1158,1159,5,46,0,0,1159,1160,5,45,0,0,1160,1177,3,172,86,2,1161,1163, - 10,2,0,0,1162,1164,5,54,0,0,1163,1162,1,0,0,0,1163,1164,1,0,0,0,1164,1166, - 1,0,0,0,1165,1167,7,21,0,0,1166,1165,1,0,0,0,1166,1167,1,0,0,0,1167,1169, - 1,0,0,0,1168,1170,5,47,0,0,1169,1168,1,0,0,0,1169,1170,1,0,0,0,1170,1171, - 1,0,0,0,1171,1172,5,45,0,0,1172,1174,3,172,86,0,1173,1175,3,184,92,0,1174, - 1173,1,0,0,0,1174,1175,1,0,0,0,1175,1177,1,0,0,0,1176,1157,1,0,0,0,1176, - 1161,1,0,0,0,1177,1180,1,0,0,0,1178,1176,1,0,0,0,1178,1179,1,0,0,0,1179, - 173,1,0,0,0,1180,1178,1,0,0,0,1181,1183,3,176,88,0,1182,1184,3,246,123, - 0,1183,1182,1,0,0,0,1183,1184,1,0,0,0,1184,175,1,0,0,0,1185,1187,5,74,0, - 0,1186,1185,1,0,0,0,1186,1187,1,0,0,0,1187,1188,1,0,0,0,1188,1190,3,178, - 89,0,1189,1191,3,180,90,0,1190,1189,1,0,0,0,1190,1191,1,0,0,0,1191,1196, - 1,0,0,0,1192,1194,5,7,0,0,1193,1192,1,0,0,0,1193,1194,1,0,0,0,1194,1195, - 1,0,0,0,1195,1197,3,228,114,0,1196,1193,1,0,0,0,1196,1197,1,0,0,0,1197, - 1227,1,0,0,0,1198,1199,5,57,0,0,1199,1200,5,74,0,0,1200,1201,5,304,0,0, - 1201,1202,3,224,112,0,1202,1203,5,304,0,0,1203,1208,3,212,106,0,1204,1205, - 5,306,0,0,1205,1207,3,212,106,0,1206,1204,1,0,0,0,1207,1210,1,0,0,0,1208, - 1206,1,0,0,0,1208,1209,1,0,0,0,1209,1211,1,0,0,0,1210,1208,1,0,0,0,1211, - 1212,5,305,0,0,1212,1213,5,305,0,0,1213,1227,1,0,0,0,1214,1216,5,57,0,0, - 1215,1214,1,0,0,0,1215,1216,1,0,0,0,1216,1217,1,0,0,0,1217,1218,5,304,0, - 0,1218,1219,3,156,78,0,1219,1220,5,305,0,0,1220,1227,1,0,0,0,1221,1222, - 5,227,0,0,1222,1223,5,304,0,0,1223,1224,3,212,106,0,1224,1225,5,305,0,0, - 1225,1227,1,0,0,0,1226,1186,1,0,0,0,1226,1198,1,0,0,0,1226,1215,1,0,0,0, - 1226,1221,1,0,0,0,1227,177,1,0,0,0,1228,1229,3,268,134,0,1229,179,1,0,0, - 0,1230,1231,5,37,0,0,1231,1232,5,260,0,0,1232,1233,5,7,0,0,1233,1234,5, - 136,0,0,1234,1235,3,182,91,0,1235,181,1,0,0,0,1236,1237,3,212,106,0,1237, - 183,1,0,0,0,1238,1239,5,55,0,0,1239,1253,3,214,107,0,1240,1241,5,143,0, - 0,1241,1242,5,304,0,0,1242,1247,3,268,134,0,1243,1244,5,306,0,0,1244,1246, - 3,268,134,0,1245,1243,1,0,0,0,1246,1249,1,0,0,0,1247,1245,1,0,0,0,1247, - 1248,1,0,0,0,1248,1250,1,0,0,0,1249,1247,1,0,0,0,1250,1251,5,305,0,0,1251, - 1253,1,0,0,0,1252,1238,1,0,0,0,1252,1240,1,0,0,0,1253,185,1,0,0,0,1254, - 1255,5,11,0,0,1255,1256,3,214,107,0,1256,187,1,0,0,0,1257,1258,5,12,0,0, - 1258,1259,5,13,0,0,1259,1264,3,190,95,0,1260,1261,5,306,0,0,1261,1263,3, - 190,95,0,1262,1260,1,0,0,0,1263,1266,1,0,0,0,1264,1262,1,0,0,0,1264,1265, - 1,0,0,0,1265,189,1,0,0,0,1266,1264,1,0,0,0,1267,1319,3,212,106,0,1268,1269, - 5,304,0,0,1269,1319,5,305,0,0,1270,1271,5,304,0,0,1271,1276,3,212,106,0, - 1272,1273,5,306,0,0,1273,1275,3,212,106,0,1274,1272,1,0,0,0,1275,1278,1, - 0,0,0,1276,1274,1,0,0,0,1276,1277,1,0,0,0,1277,1279,1,0,0,0,1278,1276,1, - 0,0,0,1279,1280,5,305,0,0,1280,1319,1,0,0,0,1281,1282,5,16,0,0,1282,1283, - 5,304,0,0,1283,1288,3,212,106,0,1284,1285,5,306,0,0,1285,1287,3,212,106, - 0,1286,1284,1,0,0,0,1287,1290,1,0,0,0,1288,1286,1,0,0,0,1288,1289,1,0,0, - 0,1289,1291,1,0,0,0,1290,1288,1,0,0,0,1291,1292,5,305,0,0,1292,1319,1,0, - 0,0,1293,1294,5,17,0,0,1294,1295,5,304,0,0,1295,1300,3,212,106,0,1296,1297, - 5,306,0,0,1297,1299,3,212,106,0,1298,1296,1,0,0,0,1299,1302,1,0,0,0,1300, - 1298,1,0,0,0,1300,1301,1,0,0,0,1301,1303,1,0,0,0,1302,1300,1,0,0,0,1303, - 1304,5,305,0,0,1304,1319,1,0,0,0,1305,1306,5,14,0,0,1306,1307,5,15,0,0, - 1307,1308,5,304,0,0,1308,1313,3,190,95,0,1309,1310,5,306,0,0,1310,1312, - 3,190,95,0,1311,1309,1,0,0,0,1312,1315,1,0,0,0,1313,1311,1,0,0,0,1313,1314, - 1,0,0,0,1314,1316,1,0,0,0,1315,1313,1,0,0,0,1316,1317,5,305,0,0,1317,1319, - 1,0,0,0,1318,1267,1,0,0,0,1318,1268,1,0,0,0,1318,1270,1,0,0,0,1318,1281, - 1,0,0,0,1318,1293,1,0,0,0,1318,1305,1,0,0,0,1319,191,1,0,0,0,1320,1321, - 5,19,0,0,1321,1322,3,214,107,0,1322,193,1,0,0,0,1323,1324,5,18,0,0,1324, - 1325,5,13,0,0,1325,1330,3,196,98,0,1326,1327,5,306,0,0,1327,1329,3,196, - 98,0,1328,1326,1,0,0,0,1329,1332,1,0,0,0,1330,1328,1,0,0,0,1330,1331,1, - 0,0,0,1331,195,1,0,0,0,1332,1330,1,0,0,0,1333,1335,3,212,106,0,1334,1336, - 7,22,0,0,1335,1334,1,0,0,0,1335,1336,1,0,0,0,1336,197,1,0,0,0,1337,1340, - 5,20,0,0,1338,1341,5,8,0,0,1339,1341,3,212,106,0,1340,1338,1,0,0,0,1340, - 1339,1,0,0,0,1341,199,1,0,0,0,1342,1343,5,58,0,0,1343,1348,3,202,101,0, - 1344,1345,5,306,0,0,1345,1347,3,202,101,0,1346,1344,1,0,0,0,1347,1350,1, - 0,0,0,1348,1346,1,0,0,0,1348,1349,1,0,0,0,1349,201,1,0,0,0,1350,1348,1, - 0,0,0,1351,1352,3,248,124,0,1352,1353,5,7,0,0,1353,1354,3,204,102,0,1354, - 203,1,0,0,0,1355,1357,3,248,124,0,1356,1355,1,0,0,0,1356,1357,1,0,0,0,1357, - 1358,1,0,0,0,1358,1369,5,304,0,0,1359,1360,5,18,0,0,1360,1361,5,13,0,0, - 1361,1366,3,206,103,0,1362,1363,5,306,0,0,1363,1365,3,206,103,0,1364,1362, - 1,0,0,0,1365,1368,1,0,0,0,1366,1364,1,0,0,0,1366,1367,1,0,0,0,1367,1370, - 1,0,0,0,1368,1366,1,0,0,0,1369,1359,1,0,0,0,1369,1370,1,0,0,0,1370,1381, - 1,0,0,0,1371,1372,5,60,0,0,1372,1373,5,13,0,0,1373,1378,3,212,106,0,1374, - 1375,5,306,0,0,1375,1377,3,212,106,0,1376,1374,1,0,0,0,1377,1380,1,0,0, - 0,1378,1376,1,0,0,0,1378,1379,1,0,0,0,1379,1382,1,0,0,0,1380,1378,1,0,0, - 0,1381,1371,1,0,0,0,1381,1382,1,0,0,0,1382,1384,1,0,0,0,1383,1385,3,208, - 104,0,1384,1383,1,0,0,0,1384,1385,1,0,0,0,1385,1386,1,0,0,0,1386,1387,5, - 305,0,0,1387,205,1,0,0,0,1388,1390,3,212,106,0,1389,1391,7,22,0,0,1390, - 1389,1,0,0,0,1390,1391,1,0,0,0,1391,1394,1,0,0,0,1392,1393,5,34,0,0,1393, - 1395,7,23,0,0,1394,1392,1,0,0,0,1394,1395,1,0,0,0,1395,207,1,0,0,0,1396, - 1397,5,61,0,0,1397,1401,3,210,105,0,1398,1399,5,62,0,0,1399,1401,3,210, - 105,0,1400,1396,1,0,0,0,1400,1398,1,0,0,0,1401,209,1,0,0,0,1402,1403,3, - 212,106,0,1403,1404,5,64,0,0,1404,211,1,0,0,0,1405,1406,3,214,107,0,1406, - 213,1,0,0,0,1407,1408,6,107,-1,0,1408,1409,5,25,0,0,1409,1420,3,214,107, - 5,1410,1411,5,27,0,0,1411,1412,5,304,0,0,1412,1413,3,156,78,0,1413,1414, - 5,305,0,0,1414,1420,1,0,0,0,1415,1417,3,220,110,0,1416,1418,3,216,108,0, - 1417,1416,1,0,0,0,1417,1418,1,0,0,0,1418,1420,1,0,0,0,1419,1407,1,0,0,0, - 1419,1410,1,0,0,0,1419,1415,1,0,0,0,1420,1429,1,0,0,0,1421,1422,10,2,0, - 0,1422,1423,5,23,0,0,1423,1428,3,214,107,3,1424,1425,10,1,0,0,1425,1426, - 5,22,0,0,1426,1428,3,214,107,2,1427,1421,1,0,0,0,1427,1424,1,0,0,0,1428, - 1431,1,0,0,0,1429,1427,1,0,0,0,1429,1430,1,0,0,0,1430,215,1,0,0,0,1431, - 1429,1,0,0,0,1432,1434,5,25,0,0,1433,1432,1,0,0,0,1433,1434,1,0,0,0,1434, - 1435,1,0,0,0,1435,1436,5,28,0,0,1436,1437,3,220,110,0,1437,1438,5,23,0, - 0,1438,1439,3,220,110,0,1439,1516,1,0,0,0,1440,1442,5,25,0,0,1441,1440, - 1,0,0,0,1441,1442,1,0,0,0,1442,1443,1,0,0,0,1443,1444,5,24,0,0,1444,1445, - 5,304,0,0,1445,1450,3,212,106,0,1446,1447,5,306,0,0,1447,1449,3,212,106, - 0,1448,1446,1,0,0,0,1449,1452,1,0,0,0,1450,1448,1,0,0,0,1450,1451,1,0,0, - 0,1451,1453,1,0,0,0,1452,1450,1,0,0,0,1453,1454,5,305,0,0,1454,1516,1,0, - 0,0,1455,1457,5,25,0,0,1456,1455,1,0,0,0,1456,1457,1,0,0,0,1457,1458,1, - 0,0,0,1458,1459,5,24,0,0,1459,1460,5,304,0,0,1460,1461,3,156,78,0,1461, - 1462,5,305,0,0,1462,1516,1,0,0,0,1463,1464,5,27,0,0,1464,1465,5,304,0,0, - 1465,1466,3,156,78,0,1466,1467,5,305,0,0,1467,1516,1,0,0,0,1468,1470,5, - 25,0,0,1469,1468,1,0,0,0,1469,1470,1,0,0,0,1470,1471,1,0,0,0,1471,1472, - 5,30,0,0,1472,1516,3,220,110,0,1473,1475,5,25,0,0,1474,1473,1,0,0,0,1474, - 1475,1,0,0,0,1475,1476,1,0,0,0,1476,1477,5,29,0,0,1477,1491,7,24,0,0,1478, - 1479,5,304,0,0,1479,1492,5,305,0,0,1480,1481,5,304,0,0,1481,1486,3,212, - 106,0,1482,1483,5,306,0,0,1483,1485,3,212,106,0,1484,1482,1,0,0,0,1485, - 1488,1,0,0,0,1486,1484,1,0,0,0,1486,1487,1,0,0,0,1487,1489,1,0,0,0,1488, - 1486,1,0,0,0,1489,1490,5,305,0,0,1490,1492,1,0,0,0,1491,1478,1,0,0,0,1491, - 1480,1,0,0,0,1492,1516,1,0,0,0,1493,1495,5,25,0,0,1494,1493,1,0,0,0,1494, - 1495,1,0,0,0,1495,1496,1,0,0,0,1496,1497,5,29,0,0,1497,1516,3,220,110,0, - 1498,1500,5,31,0,0,1499,1501,5,25,0,0,1500,1499,1,0,0,0,1500,1501,1,0,0, - 0,1501,1502,1,0,0,0,1502,1516,5,291,0,0,1503,1505,5,31,0,0,1504,1506,5, - 25,0,0,1505,1504,1,0,0,0,1505,1506,1,0,0,0,1506,1507,1,0,0,0,1507,1516, - 7,25,0,0,1508,1510,5,31,0,0,1509,1511,5,25,0,0,1510,1509,1,0,0,0,1510,1511, - 1,0,0,0,1511,1512,1,0,0,0,1512,1513,5,10,0,0,1513,1514,5,5,0,0,1514,1516, - 3,220,110,0,1515,1433,1,0,0,0,1515,1441,1,0,0,0,1515,1456,1,0,0,0,1515, - 1463,1,0,0,0,1515,1469,1,0,0,0,1515,1474,1,0,0,0,1515,1494,1,0,0,0,1515, - 1498,1,0,0,0,1515,1503,1,0,0,0,1515,1508,1,0,0,0,1516,217,1,0,0,0,1517, - 1519,5,25,0,0,1518,1517,1,0,0,0,1518,1519,1,0,0,0,1519,1520,1,0,0,0,1520, - 1521,5,29,0,0,1521,1535,7,24,0,0,1522,1523,5,304,0,0,1523,1536,5,305,0, - 0,1524,1525,5,304,0,0,1525,1530,3,212,106,0,1526,1527,5,306,0,0,1527,1529, - 3,212,106,0,1528,1526,1,0,0,0,1529,1532,1,0,0,0,1530,1528,1,0,0,0,1530, - 1531,1,0,0,0,1531,1533,1,0,0,0,1532,1530,1,0,0,0,1533,1534,5,305,0,0,1534, - 1536,1,0,0,0,1535,1522,1,0,0,0,1535,1524,1,0,0,0,1536,1543,1,0,0,0,1537, - 1539,5,25,0,0,1538,1537,1,0,0,0,1538,1539,1,0,0,0,1539,1540,1,0,0,0,1540, - 1541,5,29,0,0,1541,1543,3,220,110,0,1542,1518,1,0,0,0,1542,1538,1,0,0,0, - 1543,219,1,0,0,0,1544,1545,6,110,-1,0,1545,1549,3,222,111,0,1546,1547,7, - 26,0,0,1547,1549,3,220,110,7,1548,1544,1,0,0,0,1548,1546,1,0,0,0,1549,1571, - 1,0,0,0,1550,1551,10,6,0,0,1551,1552,7,27,0,0,1552,1570,3,220,110,7,1553, - 1554,10,5,0,0,1554,1555,7,28,0,0,1555,1570,3,220,110,6,1556,1557,10,4,0, - 0,1557,1558,5,299,0,0,1558,1570,3,220,110,5,1559,1560,10,3,0,0,1560,1561, - 5,300,0,0,1561,1570,3,220,110,4,1562,1563,10,2,0,0,1563,1564,5,298,0,0, - 1564,1570,3,220,110,3,1565,1566,10,1,0,0,1566,1567,3,288,144,0,1567,1568, - 3,220,110,2,1568,1570,1,0,0,0,1569,1550,1,0,0,0,1569,1553,1,0,0,0,1569, - 1556,1,0,0,0,1569,1559,1,0,0,0,1569,1562,1,0,0,0,1569,1565,1,0,0,0,1570, - 1573,1,0,0,0,1571,1569,1,0,0,0,1571,1572,1,0,0,0,1572,221,1,0,0,0,1573, - 1571,1,0,0,0,1574,1575,6,111,-1,0,1575,1577,5,39,0,0,1576,1578,3,264,132, - 0,1577,1576,1,0,0,0,1578,1579,1,0,0,0,1579,1577,1,0,0,0,1579,1580,1,0,0, - 0,1580,1583,1,0,0,0,1581,1582,5,42,0,0,1582,1584,3,212,106,0,1583,1581, - 1,0,0,0,1583,1584,1,0,0,0,1584,1585,1,0,0,0,1585,1586,5,44,0,0,1586,1666, - 1,0,0,0,1587,1588,5,39,0,0,1588,1590,3,212,106,0,1589,1591,3,264,132,0, - 1590,1589,1,0,0,0,1591,1592,1,0,0,0,1592,1590,1,0,0,0,1592,1593,1,0,0,0, - 1593,1596,1,0,0,0,1594,1595,5,42,0,0,1595,1597,3,212,106,0,1596,1594,1, - 0,0,0,1596,1597,1,0,0,0,1597,1598,1,0,0,0,1598,1599,5,44,0,0,1599,1666, - 1,0,0,0,1600,1601,5,94,0,0,1601,1602,5,304,0,0,1602,1603,3,212,106,0,1603, - 1604,5,7,0,0,1604,1605,3,54,27,0,1605,1606,5,305,0,0,1606,1666,1,0,0,0, - 1607,1608,5,67,0,0,1608,1609,5,304,0,0,1609,1612,3,212,106,0,1610,1611, - 5,124,0,0,1611,1613,5,34,0,0,1612,1610,1,0,0,0,1612,1613,1,0,0,0,1613,1614, - 1,0,0,0,1614,1615,5,305,0,0,1615,1666,1,0,0,0,1616,1617,5,69,0,0,1617,1618, - 5,304,0,0,1618,1621,3,212,106,0,1619,1620,5,124,0,0,1620,1622,5,34,0,0, - 1621,1619,1,0,0,0,1621,1622,1,0,0,0,1622,1623,1,0,0,0,1623,1624,5,305,0, - 0,1624,1666,1,0,0,0,1625,1626,5,129,0,0,1626,1627,5,304,0,0,1627,1628,3, - 220,110,0,1628,1629,5,24,0,0,1629,1630,3,220,110,0,1630,1631,5,305,0,0, - 1631,1666,1,0,0,0,1632,1666,3,298,149,0,1633,1666,5,313,0,0,1634,1635,3, - 268,134,0,1635,1636,5,301,0,0,1636,1637,5,313,0,0,1637,1666,1,0,0,0,1638, - 1639,5,304,0,0,1639,1640,3,156,78,0,1640,1641,5,305,0,0,1641,1666,1,0,0, - 0,1642,1643,3,224,112,0,1643,1655,5,304,0,0,1644,1646,3,306,153,0,1645, - 1644,1,0,0,0,1645,1646,1,0,0,0,1646,1647,1,0,0,0,1647,1652,3,212,106,0, - 1648,1649,5,306,0,0,1649,1651,3,212,106,0,1650,1648,1,0,0,0,1651,1654,1, - 0,0,0,1652,1650,1,0,0,0,1652,1653,1,0,0,0,1653,1656,1,0,0,0,1654,1652,1, - 0,0,0,1655,1645,1,0,0,0,1655,1656,1,0,0,0,1656,1657,1,0,0,0,1657,1658,5, - 305,0,0,1658,1666,1,0,0,0,1659,1666,3,256,128,0,1660,1666,3,226,113,0,1661, - 1662,5,304,0,0,1662,1663,3,212,106,0,1663,1664,5,305,0,0,1664,1666,1,0, - 0,0,1665,1574,1,0,0,0,1665,1587,1,0,0,0,1665,1600,1,0,0,0,1665,1607,1,0, - 0,0,1665,1616,1,0,0,0,1665,1625,1,0,0,0,1665,1632,1,0,0,0,1665,1633,1,0, - 0,0,1665,1634,1,0,0,0,1665,1638,1,0,0,0,1665,1642,1,0,0,0,1665,1659,1,0, - 0,0,1665,1660,1,0,0,0,1665,1661,1,0,0,0,1666,1674,1,0,0,0,1667,1668,10, - 4,0,0,1668,1669,5,302,0,0,1669,1670,3,220,110,0,1670,1671,5,303,0,0,1671, - 1673,1,0,0,0,1672,1667,1,0,0,0,1673,1676,1,0,0,0,1674,1672,1,0,0,0,1674, - 1675,1,0,0,0,1675,223,1,0,0,0,1676,1674,1,0,0,0,1677,1678,3,268,134,0,1678, - 225,1,0,0,0,1679,1680,3,268,134,0,1680,227,1,0,0,0,1681,1682,3,256,128, - 0,1682,229,1,0,0,0,1683,1686,3,256,128,0,1684,1686,3,226,113,0,1685,1683, - 1,0,0,0,1685,1684,1,0,0,0,1686,231,1,0,0,0,1687,1690,5,38,0,0,1688,1691, - 3,234,117,0,1689,1691,3,238,119,0,1690,1688,1,0,0,0,1690,1689,1,0,0,0,1690, - 1691,1,0,0,0,1691,233,1,0,0,0,1692,1694,3,236,118,0,1693,1695,3,240,120, - 0,1694,1693,1,0,0,0,1694,1695,1,0,0,0,1695,235,1,0,0,0,1696,1697,3,242, - 121,0,1697,1698,3,256,128,0,1698,1700,1,0,0,0,1699,1696,1,0,0,0,1700,1701, - 1,0,0,0,1701,1699,1,0,0,0,1701,1702,1,0,0,0,1702,237,1,0,0,0,1703,1706, - 3,240,120,0,1704,1707,3,236,118,0,1705,1707,3,240,120,0,1706,1704,1,0,0, - 0,1706,1705,1,0,0,0,1706,1707,1,0,0,0,1707,239,1,0,0,0,1708,1709,3,242, - 121,0,1709,1710,3,256,128,0,1710,1711,5,109,0,0,1711,1712,3,256,128,0,1712, - 241,1,0,0,0,1713,1715,7,29,0,0,1714,1713,1,0,0,0,1714,1715,1,0,0,0,1715, - 1716,1,0,0,0,1716,1719,7,30,0,0,1717,1719,5,323,0,0,1718,1714,1,0,0,0,1718, - 1717,1,0,0,0,1719,243,1,0,0,0,1720,1722,5,7,0,0,1721,1720,1,0,0,0,1721, - 1722,1,0,0,0,1722,1723,1,0,0,0,1723,1725,3,258,129,0,1724,1726,3,252,126, - 0,1725,1724,1,0,0,0,1725,1726,1,0,0,0,1726,245,1,0,0,0,1727,1729,5,7,0, - 0,1728,1727,1,0,0,0,1728,1729,1,0,0,0,1729,1730,1,0,0,0,1730,1732,3,258, - 129,0,1731,1733,3,252,126,0,1732,1731,1,0,0,0,1732,1733,1,0,0,0,1733,247, - 1,0,0,0,1734,1735,3,256,128,0,1735,1736,3,250,125,0,1736,249,1,0,0,0,1737, - 1738,5,131,0,0,1738,1740,3,256,128,0,1739,1737,1,0,0,0,1740,1741,1,0,0, - 0,1741,1739,1,0,0,0,1741,1742,1,0,0,0,1742,1745,1,0,0,0,1743,1745,1,0,0, - 0,1744,1739,1,0,0,0,1744,1743,1,0,0,0,1745,251,1,0,0,0,1746,1747,5,304, - 0,0,1747,1748,3,254,127,0,1748,1749,5,305,0,0,1749,253,1,0,0,0,1750,1755, - 3,256,128,0,1751,1752,5,306,0,0,1752,1754,3,256,128,0,1753,1751,1,0,0,0, - 1754,1757,1,0,0,0,1755,1753,1,0,0,0,1755,1756,1,0,0,0,1756,255,1,0,0,0, - 1757,1755,1,0,0,0,1758,1761,3,258,129,0,1759,1761,3,310,155,0,1760,1758, - 1,0,0,0,1760,1759,1,0,0,0,1761,257,1,0,0,0,1762,1767,3,260,130,0,1763,1767, - 3,262,131,0,1764,1767,3,308,154,0,1765,1767,3,312,156,0,1766,1762,1,0,0, - 0,1766,1763,1,0,0,0,1766,1764,1,0,0,0,1766,1765,1,0,0,0,1767,259,1,0,0, - 0,1768,1769,7,31,0,0,1769,261,1,0,0,0,1770,1771,5,323,0,0,1771,263,1,0, - 0,0,1772,1773,5,40,0,0,1773,1774,3,212,106,0,1774,1775,5,41,0,0,1775,1776, - 3,212,106,0,1776,265,1,0,0,0,1777,1782,3,268,134,0,1778,1779,5,306,0,0, - 1779,1781,3,268,134,0,1780,1778,1,0,0,0,1781,1784,1,0,0,0,1782,1780,1,0, - 0,0,1782,1783,1,0,0,0,1783,267,1,0,0,0,1784,1782,1,0,0,0,1785,1789,5,327, - 0,0,1786,1788,5,321,0,0,1787,1786,1,0,0,0,1788,1791,1,0,0,0,1789,1790,1, - 0,0,0,1789,1787,1,0,0,0,1790,269,1,0,0,0,1791,1789,1,0,0,0,1792,1796,7, - 32,0,0,1793,1795,7,33,0,0,1794,1793,1,0,0,0,1795,1798,1,0,0,0,1796,1797, - 1,0,0,0,1796,1794,1,0,0,0,1797,271,1,0,0,0,1798,1796,1,0,0,0,1799,1800, - 5,70,0,0,1800,1801,3,278,139,0,1801,273,1,0,0,0,1802,1803,5,128,0,0,1803, - 1804,5,25,0,0,1804,1805,5,27,0,0,1805,275,1,0,0,0,1806,1807,5,128,0,0,1807, - 1808,5,27,0,0,1808,277,1,0,0,0,1809,1810,5,304,0,0,1810,1815,3,280,140, - 0,1811,1812,5,306,0,0,1812,1814,3,280,140,0,1813,1811,1,0,0,0,1814,1817, - 1,0,0,0,1815,1813,1,0,0,0,1815,1816,1,0,0,0,1816,1818,1,0,0,0,1817,1815, - 1,0,0,0,1818,1819,5,305,0,0,1819,279,1,0,0,0,1820,1825,3,282,141,0,1821, - 1823,5,293,0,0,1822,1821,1,0,0,0,1822,1823,1,0,0,0,1823,1824,1,0,0,0,1824, - 1826,3,284,142,0,1825,1822,1,0,0,0,1825,1826,1,0,0,0,1826,281,1,0,0,0,1827, - 1831,3,256,128,0,1828,1831,3,226,113,0,1829,1831,5,323,0,0,1830,1827,1, - 0,0,0,1830,1828,1,0,0,0,1830,1829,1,0,0,0,1831,283,1,0,0,0,1832,1837,5, - 324,0,0,1833,1837,5,325,0,0,1834,1837,3,304,152,0,1835,1837,5,323,0,0,1836, - 1832,1,0,0,0,1836,1833,1,0,0,0,1836,1834,1,0,0,0,1836,1835,1,0,0,0,1837, - 285,1,0,0,0,1838,1845,5,23,0,0,1839,1840,5,299,0,0,1840,1845,5,299,0,0, - 1841,1845,5,22,0,0,1842,1843,5,298,0,0,1843,1845,5,298,0,0,1844,1838,1, - 0,0,0,1844,1839,1,0,0,0,1844,1841,1,0,0,0,1844,1842,1,0,0,0,1845,287,1, - 0,0,0,1846,1861,5,293,0,0,1847,1861,5,294,0,0,1848,1861,5,295,0,0,1849, - 1850,5,295,0,0,1850,1861,5,293,0,0,1851,1852,5,294,0,0,1852,1861,5,293, - 0,0,1853,1854,5,295,0,0,1854,1861,5,294,0,0,1855,1856,5,296,0,0,1856,1861, - 5,293,0,0,1857,1858,5,295,0,0,1858,1859,5,293,0,0,1859,1861,5,294,0,0,1860, - 1846,1,0,0,0,1860,1847,1,0,0,0,1860,1848,1,0,0,0,1860,1849,1,0,0,0,1860, - 1851,1,0,0,0,1860,1853,1,0,0,0,1860,1855,1,0,0,0,1860,1857,1,0,0,0,1861, - 289,1,0,0,0,1862,1863,5,295,0,0,1863,1870,5,295,0,0,1864,1865,5,294,0,0, - 1865,1870,5,294,0,0,1866,1870,5,299,0,0,1867,1870,5,300,0,0,1868,1870,5, - 298,0,0,1869,1862,1,0,0,0,1869,1864,1,0,0,0,1869,1866,1,0,0,0,1869,1867, - 1,0,0,0,1869,1868,1,0,0,0,1870,291,1,0,0,0,1871,1872,7,34,0,0,1872,293, - 1,0,0,0,1873,1874,7,35,0,0,1874,295,1,0,0,0,1875,1876,3,268,134,0,1876, - 297,1,0,0,0,1877,1890,3,300,150,0,1878,1890,3,302,151,0,1879,1890,3,232, - 116,0,1880,1881,5,315,0,0,1881,1890,3,302,151,0,1882,1890,3,304,152,0,1883, - 1890,5,325,0,0,1884,1890,5,326,0,0,1885,1887,5,25,0,0,1886,1885,1,0,0,0, - 1886,1887,1,0,0,0,1887,1888,1,0,0,0,1888,1890,5,291,0,0,1889,1877,1,0,0, - 0,1889,1878,1,0,0,0,1889,1879,1,0,0,0,1889,1880,1,0,0,0,1889,1882,1,0,0, - 0,1889,1883,1,0,0,0,1889,1884,1,0,0,0,1889,1886,1,0,0,0,1890,299,1,0,0, - 0,1891,1892,5,323,0,0,1892,301,1,0,0,0,1893,1894,5,324,0,0,1894,303,1,0, - 0,0,1895,1896,7,25,0,0,1896,305,1,0,0,0,1897,1898,7,36,0,0,1898,307,1,0, - 0,0,1899,1900,7,37,0,0,1900,309,1,0,0,0,1901,1902,7,38,0,0,1902,311,1,0, - 0,0,1903,1904,7,39,0,0,1904,313,1,0,0,0,226,322,325,327,342,360,364,373, - 378,385,392,396,405,417,420,427,435,440,443,450,458,462,474,482,486,507, - 511,515,519,528,533,537,541,545,548,552,557,563,568,573,576,580,588,596, - 600,604,608,612,616,620,624,628,630,640,648,672,679,694,697,705,717,741, - 754,759,763,771,775,783,793,797,803,807,811,814,823,827,834,837,847,855, - 863,867,882,901,912,916,923,928,934,938,945,949,953,957,965,969,974,979, - 985,988,992,1003,1012,1025,1037,1048,1051,1055,1058,1060,1065,1069,1072, - 1076,1085,1095,1100,1112,1115,1118,1121,1125,1133,1136,1140,1143,1154,1163, - 1166,1169,1174,1176,1178,1183,1186,1190,1193,1196,1208,1215,1226,1247,1252, - 1264,1276,1288,1300,1313,1318,1330,1335,1340,1348,1356,1366,1369,1378,1381, - 1384,1390,1394,1400,1417,1419,1427,1429,1433,1441,1450,1456,1469,1474,1486, - 1491,1494,1500,1505,1510,1515,1518,1530,1535,1538,1542,1548,1569,1571,1579, - 1583,1592,1596,1612,1621,1645,1652,1655,1665,1674,1685,1690,1694,1701,1706, - 1714,1718,1721,1725,1728,1732,1741,1744,1755,1760,1766,1782,1789,1796,1815, - 1822,1825,1830,1836,1844,1860,1869,1886,1889]; + 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,1,0,1,0,1,0,1,1,1, + 1,1,1,1,2,1,2,3,2,369,8,2,1,2,5,2,372,8,2,10,2,12,2,375,9,2,1,3,1,3,1,3, + 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,389,8,3,1,4,1,4,1,5,1,5,1,5,1,5, + 1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,407,8,5,1,6,1,6,3,6,411,8,6, + 1,7,1,7,1,7,1,8,1,8,1,8,1,8,3,8,420,8,8,1,8,1,8,1,8,3,8,425,8,8,1,9,1,9, + 1,9,5,9,430,8,9,10,9,12,9,433,9,9,1,10,1,10,1,11,1,11,3,11,439,8,11,1,11, + 1,11,3,11,443,8,11,1,12,1,12,1,12,1,12,1,12,5,12,450,8,12,10,12,12,12,453, + 9,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,3,13,464,8,13,1,13,3, + 13,467,8,13,1,13,1,13,1,13,1,13,1,13,3,13,474,8,13,1,13,1,13,1,13,1,13, + 1,13,1,13,3,13,482,8,13,1,13,1,13,1,13,3,13,487,8,13,1,13,3,13,490,8,13, + 1,14,1,14,1,14,1,14,1,14,3,14,497,8,14,1,15,1,15,1,15,1,15,1,16,1,16,3, + 16,505,8,16,1,17,1,17,3,17,509,8,17,1,18,1,18,1,18,1,18,1,19,1,19,1,19, + 1,19,1,19,1,19,3,19,521,8,19,1,19,1,19,1,19,1,19,1,19,1,19,3,19,529,8,19, + 1,19,1,19,3,19,533,8,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1, + 19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,3,19,554,8,19,1,20,1,20, + 3,20,558,8,20,1,21,1,21,3,21,562,8,21,1,21,1,21,3,21,566,8,21,1,21,1,21, + 1,21,1,21,1,21,5,21,573,8,21,10,21,12,21,576,9,21,1,21,1,21,3,21,580,8, + 21,1,21,1,21,3,21,584,8,21,1,21,1,21,3,21,588,8,21,1,21,1,21,3,21,592,8, + 21,1,21,3,21,595,8,21,1,21,1,21,3,21,599,8,21,1,22,1,22,1,22,3,22,604,8, + 22,1,22,1,22,1,22,1,22,3,22,610,8,22,1,23,1,23,1,23,3,23,615,8,23,1,24, + 1,24,1,24,3,24,620,8,24,1,24,3,24,623,8,24,1,25,1,25,3,25,627,8,25,1,26, + 1,26,1,26,1,26,5,26,633,8,26,10,26,12,26,636,9,26,1,26,1,26,1,27,1,27,1, + 27,3,27,643,8,27,1,27,1,27,3,27,647,8,27,1,27,1,27,3,27,651,8,27,1,27,1, + 27,3,27,655,8,27,1,27,1,27,3,27,659,8,27,1,27,1,27,3,27,663,8,27,1,27,1, + 27,3,27,667,8,27,1,27,1,27,3,27,671,8,27,1,27,1,27,3,27,675,8,27,3,27,677, + 8,27,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,3,29,687,8,29,1,29,1,29,1, + 30,1,30,1,30,1,30,3,30,695,8,30,1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32, + 1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,5,33,717,8, + 33,10,33,12,33,720,9,33,1,33,1,33,1,34,1,34,3,34,726,8,34,1,34,1,34,1,34, + 1,34,1,34,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,3,36,741,8,36,1,36,3, + 36,744,8,36,1,37,1,37,1,38,1,38,1,38,1,38,3,38,752,8,38,1,39,1,39,1,40, + 1,40,1,40,1,40,1,40,1,40,1,41,1,41,3,41,764,8,41,1,41,1,41,1,41,1,41,1, + 41,1,41,1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,45,1,45,1,45, + 1,45,5,45,786,8,45,10,45,12,45,789,9,45,1,45,1,45,1,46,1,46,1,46,1,46,1, + 46,1,46,5,46,799,8,46,10,46,12,46,802,9,46,1,46,1,46,3,46,806,8,46,1,47, + 1,47,3,47,810,8,47,1,48,1,48,1,48,1,48,5,48,816,8,48,10,48,12,48,819,9, + 48,1,48,3,48,822,8,48,1,49,1,49,1,50,1,50,1,50,1,50,3,50,830,8,50,1,51, + 1,51,1,51,1,51,1,51,1,52,1,52,1,52,3,52,840,8,52,1,52,1,52,3,52,844,8,52, + 1,52,1,52,1,53,1,53,3,53,850,8,53,1,53,1,53,3,53,854,8,53,1,53,1,53,3,53, + 858,8,53,1,53,3,53,861,8,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,3,54,870, + 8,54,1,54,1,54,3,54,874,8,54,1,54,1,54,1,54,1,54,1,54,3,54,881,8,54,1,54, + 3,54,884,8,54,1,55,1,55,1,55,1,55,1,55,1,55,5,55,892,8,55,10,55,12,55,895, + 9,55,1,56,1,56,1,57,1,57,1,57,3,57,902,8,57,1,57,1,57,1,57,1,57,1,57,1, + 57,3,57,910,8,57,1,58,1,58,3,58,914,8,58,1,58,1,58,1,58,1,59,1,59,1,59, + 1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,929,8,60,1,61,1,61,1,61,1,61,1, + 62,1,62,1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,3,64,948, + 8,64,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,3,66,959,8,66,1,66,1, + 66,3,66,963,8,66,1,66,1,66,1,66,1,66,1,66,3,66,970,8,66,1,67,1,67,1,67, + 3,67,975,8,67,1,67,1,67,1,68,1,68,3,68,981,8,68,1,68,1,68,3,68,985,8,68, + 1,68,1,68,1,69,1,69,1,69,3,69,992,8,69,1,69,1,69,3,69,996,8,69,1,70,1,70, + 3,70,1000,8,70,1,70,1,70,3,70,1004,8,70,1,70,1,70,1,71,1,71,1,71,1,71,3, + 71,1012,8,71,1,71,1,71,3,71,1016,8,71,1,71,1,71,1,72,3,72,1021,8,72,1,72, + 1,72,1,72,3,72,1026,8,72,1,73,1,73,1,73,1,73,3,73,1032,8,73,1,73,3,73,1035, + 8,73,1,73,1,73,3,73,1039,8,73,1,74,1,74,1,74,1,75,1,75,1,75,1,75,5,75,1048, + 8,75,10,75,12,75,1051,9,75,1,76,1,76,1,76,1,76,5,76,1057,8,76,10,76,12, + 76,1060,9,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,4,77,1070,8,77,11, + 77,12,77,1071,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,3,78,1087,8,78,1,78,3,78,1090,8,78,1,78,1,78,3,78,1094,8,78,1,78, + 3,78,1097,8,78,3,78,1099,8,78,1,78,1,78,1,78,3,78,1104,8,78,1,78,1,78,3, + 78,1108,8,78,1,78,3,78,1111,8,78,5,78,1113,8,78,10,78,12,78,1116,9,78,1, + 79,1,79,1,79,1,79,5,79,1122,8,79,10,79,12,79,1125,9,79,1,80,1,80,1,80,1, + 80,5,80,1131,8,80,10,80,12,80,1134,9,80,1,81,1,81,1,81,1,81,1,81,5,81,1141, + 8,81,10,81,12,81,1144,9,81,1,81,1,81,3,81,1148,8,81,1,81,1,81,1,81,1,81, + 1,81,1,82,1,82,1,83,1,83,1,83,3,83,1160,8,83,1,83,3,83,1163,8,83,1,83,3, + 83,1166,8,83,1,83,3,83,1169,8,83,1,83,1,83,1,83,1,83,3,83,1175,8,83,1,84, + 1,84,3,84,1179,8,84,1,84,1,84,1,84,1,84,5,84,1185,8,84,10,84,12,84,1188, + 9,84,3,84,1190,8,84,1,85,1,85,1,85,3,85,1195,8,85,1,85,3,85,1198,8,85,3, + 85,1200,8,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, + 3,86,1214,8,86,1,87,1,87,1,87,1,88,1,88,1,88,1,88,5,88,1223,8,88,10,88, + 12,88,1226,9,88,1,88,1,88,3,88,1230,8,88,1,88,1,88,1,88,1,88,1,88,1,88, + 3,88,1238,8,88,1,88,3,88,1241,8,88,1,88,3,88,1244,8,88,1,88,1,88,1,88,3, + 88,1249,8,88,5,88,1251,8,88,10,88,12,88,1254,9,88,1,89,1,89,3,89,1258,8, + 89,1,90,3,90,1261,8,90,1,90,1,90,3,90,1265,8,90,1,90,3,90,1268,8,90,1,90, + 3,90,1271,8,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,5,90,1281,8,90,10, + 90,12,90,1284,9,90,1,90,1,90,1,90,1,90,3,90,1290,8,90,1,90,1,90,1,90,1, + 90,1,90,1,90,1,90,1,90,1,90,3,90,1301,8,90,1,91,1,91,1,92,1,92,1,92,1,92, + 1,92,1,92,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1, + 96,1,96,1,96,1,96,1,96,5,96,1328,8,96,10,96,12,96,1331,9,96,1,96,1,96,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,3,98,1352,8,98,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,101, + 1,101,1,101,1,101,1,101,1,101,1,101,5,101,1368,8,101,10,101,12,101,1371, + 9,101,1,101,1,101,3,101,1375,8,101,1,102,1,102,1,102,1,103,1,103,1,103, + 1,103,1,103,5,103,1385,8,103,10,103,12,103,1388,9,103,1,104,1,104,1,104, + 1,104,1,104,1,104,1,104,1,104,5,104,1398,8,104,10,104,12,104,1401,9,104, + 1,104,1,104,1,104,1,104,1,104,1,104,1,104,5,104,1410,8,104,10,104,12,104, + 1413,9,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,5,104,1422,8,104,10, + 104,12,104,1425,9,104,1,104,1,104,3,104,1429,8,104,1,105,1,105,1,105,1, + 106,1,106,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,110,1,111,1,111,1,111,1,111,5,111,1454,8,111,10,111,12, + 111,1457,9,111,1,112,1,112,1,112,1,112,1,113,3,113,1464,8,113,1,113,1,113, + 3,113,1468,8,113,1,113,3,113,1471,8,113,1,113,3,113,1474,8,113,1,113,1, + 113,1,114,1,114,1,114,3,114,1481,8,114,1,114,3,114,1484,8,114,1,114,3,114, + 1487,8,114,1,114,3,114,1490,8,114,1,114,3,114,1493,8,114,1,114,3,114,1496, + 8,114,1,114,1,114,1,114,3,114,1501,8,114,1,114,3,114,1504,8,114,1,115,1, + 115,1,115,1,115,1,115,5,115,1511,8,115,10,115,12,115,1514,9,115,1,116,1, + 116,3,116,1518,8,116,1,116,1,116,3,116,1522,8,116,1,117,1,117,1,117,3,117, + 1527,8,117,1,118,1,118,1,118,1,118,1,118,5,118,1534,8,118,10,118,12,118, + 1537,9,118,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119, + 1,119,1,119,1,119,1,119,1,119,1,119,3,119,1555,8,119,1,120,1,120,1,120, + 1,120,5,120,1561,8,120,10,120,12,120,1564,9,120,1,121,1,121,1,121,4,121, + 1569,8,121,11,121,12,121,1570,1,121,1,121,3,121,1575,8,121,1,122,1,122, + 3,122,1579,8,122,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,3,123, + 1589,8,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124, + 1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124, + 1,124,1,124,3,124,1615,8,124,1,125,1,125,1,125,1,125,5,125,1621,8,125,10, + 125,12,125,1624,9,125,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1, + 126,3,126,1635,8,126,1,127,1,127,1,127,1,127,1,127,1,128,1,128,1,128,1, + 129,1,129,1,129,1,129,1,130,1,130,1,131,1,131,1,131,1,131,1,131,1,131,1, + 131,1,131,1,131,1,131,3,131,1661,8,131,3,131,1663,8,131,1,131,1,131,1,131, + 1,131,1,131,1,131,5,131,1671,8,131,10,131,12,131,1674,9,131,1,132,3,132, + 1677,8,132,1,132,1,132,1,132,1,132,1,132,1,132,3,132,1685,8,132,1,132,1, + 132,1,132,1,132,1,132,5,132,1692,8,132,10,132,12,132,1695,9,132,1,132,1, + 132,1,132,3,132,1700,8,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1, + 132,1,132,1,132,1,132,3,132,1713,8,132,1,132,1,132,1,132,3,132,1718,8,132, + 1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,5,132,1728,8,132,10,132, + 12,132,1731,9,132,1,132,1,132,3,132,1735,8,132,1,132,3,132,1738,8,132,1, + 132,1,132,1,132,1,132,3,132,1744,8,132,1,132,1,132,1,132,3,132,1749,8,132, + 1,132,1,132,1,132,3,132,1754,8,132,1,132,1,132,1,132,3,132,1759,8,132,1, + 133,3,133,1762,8,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,5, + 133,1772,8,133,10,133,12,133,1775,9,133,1,133,1,133,3,133,1779,8,133,1, + 133,3,133,1782,8,133,1,133,1,133,3,133,1786,8,133,1,134,1,134,1,134,1,134, + 3,134,1792,8,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,5,134,1813, + 8,134,10,134,12,134,1816,9,134,1,135,1,135,1,135,4,135,1821,8,135,11,135, + 12,135,1822,1,135,1,135,3,135,1827,8,135,1,135,1,135,1,135,1,135,1,135, + 4,135,1834,8,135,11,135,12,135,1835,1,135,1,135,3,135,1840,8,135,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,135, + 1,135,3,135,1856,8,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,3,135, + 1865,8,135,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,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135, + 3,135,1889,8,135,1,135,1,135,1,135,5,135,1894,8,135,10,135,12,135,1897, + 9,135,3,135,1899,8,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135, + 3,135,1909,8,135,1,135,1,135,1,135,1,135,1,135,5,135,1916,8,135,10,135, + 12,135,1919,9,135,1,136,1,136,1,137,1,137,1,138,1,138,1,139,1,139,3,139, + 1929,8,139,1,140,1,140,1,140,3,140,1934,8,140,1,141,1,141,3,141,1938,8, + 141,1,142,1,142,1,142,4,142,1943,8,142,11,142,12,142,1944,1,143,1,143,1, + 143,3,143,1950,8,143,1,144,1,144,1,144,1,144,1,144,1,145,3,145,1958,8,145, + 1,145,1,145,3,145,1962,8,145,1,146,3,146,1965,8,146,1,146,1,146,3,146,1969, + 8,146,1,147,3,147,1972,8,147,1,147,1,147,3,147,1976,8,147,1,148,1,148,1, + 148,1,149,1,149,4,149,1983,8,149,11,149,12,149,1984,1,149,3,149,1988,8, + 149,1,150,1,150,1,150,1,150,1,151,1,151,1,151,5,151,1997,8,151,10,151,12, + 151,2000,9,151,1,152,1,152,3,152,2004,8,152,1,153,1,153,1,153,1,153,3,153, + 2010,8,153,1,154,1,154,1,155,1,155,1,156,1,156,1,156,1,156,1,156,1,157, + 1,157,1,157,5,157,2024,8,157,10,157,12,157,2027,9,157,1,158,1,158,5,158, + 2031,8,158,10,158,12,158,2034,9,158,1,159,1,159,1,159,1,160,1,160,1,160, + 1,160,1,161,1,161,1,161,1,162,1,162,1,162,1,162,5,162,2050,8,162,10,162, + 12,162,2053,9,162,1,162,1,162,1,163,1,163,3,163,2059,8,163,1,163,3,163, + 2062,8,163,1,164,1,164,1,164,3,164,2067,8,164,1,165,1,165,1,165,1,165,3, + 165,2073,8,165,1,166,1,166,1,166,1,166,1,166,1,166,3,166,2081,8,166,1,167, + 1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167, + 1,167,3,167,2097,8,167,1,168,1,168,1,168,1,168,1,168,1,168,1,168,3,168, + 2106,8,168,1,169,1,169,1,170,1,170,1,171,1,171,1,172,1,172,1,172,1,172, + 1,172,1,172,1,172,1,172,1,172,3,172,2123,8,172,1,172,3,172,2126,8,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,2032,5,156,176,262,268,270,180,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,0,42, + 2,0,36,36,84,84,1,0,87,89,2,0,193,193,253,255,2,0,192,192,239,239,2,0,5, + 5,24,24,2,0,74,74,76,76,2,0,6,6,82,82,1,0,246,250,3,0,301,301,306,306,309, + 309,6,0,283,283,286,290,294,298,302,302,304,304,310,310,1,0,70,71,2,0,291, + 293,299,300,2,0,284,284,305,305,1,0,233,234,3,0,8,8,102,102,236,236,1,0, + 233,235,2,0,167,167,237,238,1,0,241,243,2,0,184,184,186,186,2,0,83,83,140, + 140,2,0,105,106,108,108,2,0,48,49,51,52,1,0,265,267,2,0,118,118,269,273, + 1,0,16,17,2,0,265,266,274,274,1,0,35,36,2,0,67,67,69,69,1,0,8,9,1,0,32, + 33,2,0,315,315,335,336,4,0,132,132,333,333,337,337,340,340,2,0,335,336, + 338,338,1,0,335,336,1,0,344,345,2,0,344,344,347,347,4,0,132,132,333,333, + 335,337,339,340,3,0,25,25,314,315,335,336,2,0,8,8,10,10,32,0,6,6,13,17, + 20,21,26,30,32,32,34,36,38,38,50,50,56,69,72,72,75,77,80,81,84,85,90,93, + 95,97,99,99,102,104,107,107,110,124,128,142,144,184,186,203,205,212,214, + 234,236,237,239,240,253,254,258,260,283,291,294,296,298,303,305,310,6,0, + 45,46,48,52,54,55,105,108,143,143,223,223,24,0,4,42,44,44,47,47,53,53,56, + 70,72,77,80,81,83,85,90,99,102,104,109,142,144,176,178,212,214,222,224, + 234,236,237,239,240,253,254,256,256,258,260,283,291,294,296,298,303,305, + 310,2319,0,360,1,0,0,0,2,363,1,0,0,0,4,373,1,0,0,0,6,388,1,0,0,0,8,390, + 1,0,0,0,10,406,1,0,0,0,12,410,1,0,0,0,14,412,1,0,0,0,16,415,1,0,0,0,18, + 426,1,0,0,0,20,434,1,0,0,0,22,442,1,0,0,0,24,444,1,0,0,0,26,489,1,0,0,0, + 28,491,1,0,0,0,30,498,1,0,0,0,32,502,1,0,0,0,34,506,1,0,0,0,36,510,1,0, + 0,0,38,553,1,0,0,0,40,557,1,0,0,0,42,559,1,0,0,0,44,600,1,0,0,0,46,614, + 1,0,0,0,48,616,1,0,0,0,50,626,1,0,0,0,52,628,1,0,0,0,54,676,1,0,0,0,56, + 678,1,0,0,0,58,682,1,0,0,0,60,690,1,0,0,0,62,698,1,0,0,0,64,702,1,0,0,0, + 66,709,1,0,0,0,68,725,1,0,0,0,70,732,1,0,0,0,72,735,1,0,0,0,74,745,1,0, + 0,0,76,747,1,0,0,0,78,753,1,0,0,0,80,755,1,0,0,0,82,763,1,0,0,0,84,771, + 1,0,0,0,86,773,1,0,0,0,88,777,1,0,0,0,90,781,1,0,0,0,92,805,1,0,0,0,94, + 809,1,0,0,0,96,811,1,0,0,0,98,823,1,0,0,0,100,829,1,0,0,0,102,831,1,0,0, + 0,104,836,1,0,0,0,106,847,1,0,0,0,108,865,1,0,0,0,110,885,1,0,0,0,112,896, + 1,0,0,0,114,898,1,0,0,0,116,911,1,0,0,0,118,918,1,0,0,0,120,921,1,0,0,0, + 122,930,1,0,0,0,124,934,1,0,0,0,126,938,1,0,0,0,128,941,1,0,0,0,130,949, + 1,0,0,0,132,954,1,0,0,0,134,971,1,0,0,0,136,978,1,0,0,0,138,988,1,0,0,0, + 140,997,1,0,0,0,142,1007,1,0,0,0,144,1025,1,0,0,0,146,1027,1,0,0,0,148, + 1040,1,0,0,0,150,1043,1,0,0,0,152,1052,1,0,0,0,154,1063,1,0,0,0,156,1098, + 1,0,0,0,158,1117,1,0,0,0,160,1126,1,0,0,0,162,1135,1,0,0,0,164,1154,1,0, + 0,0,166,1174,1,0,0,0,168,1176,1,0,0,0,170,1199,1,0,0,0,172,1213,1,0,0,0, + 174,1215,1,0,0,0,176,1229,1,0,0,0,178,1255,1,0,0,0,180,1300,1,0,0,0,182, + 1302,1,0,0,0,184,1304,1,0,0,0,186,1310,1,0,0,0,188,1312,1,0,0,0,190,1317, + 1,0,0,0,192,1322,1,0,0,0,194,1334,1,0,0,0,196,1351,1,0,0,0,198,1353,1,0, + 0,0,200,1355,1,0,0,0,202,1374,1,0,0,0,204,1376,1,0,0,0,206,1379,1,0,0,0, + 208,1428,1,0,0,0,210,1430,1,0,0,0,212,1433,1,0,0,0,214,1435,1,0,0,0,216, + 1442,1,0,0,0,218,1444,1,0,0,0,220,1446,1,0,0,0,222,1449,1,0,0,0,224,1458, + 1,0,0,0,226,1463,1,0,0,0,228,1477,1,0,0,0,230,1505,1,0,0,0,232,1515,1,0, + 0,0,234,1523,1,0,0,0,236,1528,1,0,0,0,238,1554,1,0,0,0,240,1556,1,0,0,0, + 242,1565,1,0,0,0,244,1576,1,0,0,0,246,1588,1,0,0,0,248,1614,1,0,0,0,250, + 1616,1,0,0,0,252,1634,1,0,0,0,254,1636,1,0,0,0,256,1641,1,0,0,0,258,1644, + 1,0,0,0,260,1648,1,0,0,0,262,1662,1,0,0,0,264,1758,1,0,0,0,266,1785,1,0, + 0,0,268,1791,1,0,0,0,270,1908,1,0,0,0,272,1920,1,0,0,0,274,1922,1,0,0,0, + 276,1924,1,0,0,0,278,1928,1,0,0,0,280,1930,1,0,0,0,282,1935,1,0,0,0,284, + 1942,1,0,0,0,286,1946,1,0,0,0,288,1951,1,0,0,0,290,1961,1,0,0,0,292,1964, + 1,0,0,0,294,1971,1,0,0,0,296,1977,1,0,0,0,298,1987,1,0,0,0,300,1989,1,0, + 0,0,302,1993,1,0,0,0,304,2003,1,0,0,0,306,2009,1,0,0,0,308,2011,1,0,0,0, + 310,2013,1,0,0,0,312,2015,1,0,0,0,314,2020,1,0,0,0,316,2028,1,0,0,0,318, + 2035,1,0,0,0,320,2038,1,0,0,0,322,2042,1,0,0,0,324,2045,1,0,0,0,326,2056, + 1,0,0,0,328,2066,1,0,0,0,330,2072,1,0,0,0,332,2080,1,0,0,0,334,2096,1,0, + 0,0,336,2105,1,0,0,0,338,2107,1,0,0,0,340,2109,1,0,0,0,342,2111,1,0,0,0, + 344,2125,1,0,0,0,346,2127,1,0,0,0,348,2129,1,0,0,0,350,2131,1,0,0,0,352, + 2133,1,0,0,0,354,2135,1,0,0,0,356,2137,1,0,0,0,358,2139,1,0,0,0,360,361, + 3,2,1,0,361,362,5,0,0,1,362,1,1,0,0,0,363,364,3,4,2,0,364,365,5,0,0,1,365, + 3,1,0,0,0,366,368,3,6,3,0,367,369,5,327,0,0,368,367,1,0,0,0,368,369,1,0, + 0,0,369,372,1,0,0,0,370,372,3,8,4,0,371,366,1,0,0,0,371,370,1,0,0,0,372, + 375,1,0,0,0,373,371,1,0,0,0,373,374,1,0,0,0,374,5,1,0,0,0,375,373,1,0,0, + 0,376,389,3,10,5,0,377,389,3,12,6,0,378,389,3,14,7,0,379,389,3,16,8,0,380, + 389,3,22,11,0,381,389,3,26,13,0,382,389,3,28,14,0,383,389,3,30,15,0,384, + 389,3,32,16,0,385,389,3,34,17,0,386,389,3,36,18,0,387,389,3,38,19,0,388, + 376,1,0,0,0,388,377,1,0,0,0,388,378,1,0,0,0,388,379,1,0,0,0,388,380,1,0, + 0,0,388,381,1,0,0,0,388,382,1,0,0,0,388,383,1,0,0,0,388,384,1,0,0,0,388, + 385,1,0,0,0,388,386,1,0,0,0,388,387,1,0,0,0,389,7,1,0,0,0,390,391,5,327, + 0,0,391,9,1,0,0,0,392,407,3,40,20,0,393,407,3,104,52,0,394,407,3,106,53, + 0,395,407,3,108,54,0,396,407,3,102,51,0,397,407,3,114,57,0,398,407,3,128, + 64,0,399,407,3,130,65,0,400,407,3,132,66,0,401,407,3,134,67,0,402,407,3, + 136,68,0,403,407,3,138,69,0,404,407,3,140,70,0,405,407,3,142,71,0,406,392, + 1,0,0,0,406,393,1,0,0,0,406,394,1,0,0,0,406,395,1,0,0,0,406,396,1,0,0,0, + 406,397,1,0,0,0,406,398,1,0,0,0,406,399,1,0,0,0,406,400,1,0,0,0,406,401, + 1,0,0,0,406,402,1,0,0,0,406,403,1,0,0,0,406,404,1,0,0,0,406,405,1,0,0,0, + 407,11,1,0,0,0,408,411,3,156,78,0,409,411,3,144,72,0,410,408,1,0,0,0,410, + 409,1,0,0,0,411,13,1,0,0,0,412,413,7,0,0,0,413,414,3,316,158,0,414,15,1, + 0,0,0,415,419,5,85,0,0,416,420,3,18,9,0,417,418,5,86,0,0,418,420,5,37,0, + 0,419,416,1,0,0,0,419,417,1,0,0,0,419,420,1,0,0,0,420,424,1,0,0,0,421,425, + 3,12,6,0,422,425,3,146,73,0,423,425,3,154,77,0,424,421,1,0,0,0,424,422, + 1,0,0,0,424,423,1,0,0,0,425,17,1,0,0,0,426,431,3,20,10,0,427,428,5,326, + 0,0,428,430,3,20,10,0,429,427,1,0,0,0,430,433,1,0,0,0,431,429,1,0,0,0,431, + 432,1,0,0,0,432,19,1,0,0,0,433,431,1,0,0,0,434,435,7,1,0,0,435,21,1,0,0, + 0,436,438,5,99,0,0,437,439,5,239,0,0,438,437,1,0,0,0,438,439,1,0,0,0,439, + 440,1,0,0,0,440,443,3,316,158,0,441,443,3,24,12,0,442,436,1,0,0,0,442,441, + 1,0,0,0,443,23,1,0,0,0,444,445,5,99,0,0,445,446,5,101,0,0,446,451,3,316, + 158,0,447,448,5,326,0,0,448,450,3,316,158,0,449,447,1,0,0,0,450,453,1,0, + 0,0,451,449,1,0,0,0,451,452,1,0,0,0,452,25,1,0,0,0,453,451,1,0,0,0,454, + 455,5,95,0,0,455,490,7,2,0,0,456,457,5,95,0,0,457,458,5,66,0,0,458,490, + 7,3,0,0,459,460,5,95,0,0,460,463,5,96,0,0,461,462,7,4,0,0,462,464,3,316, + 158,0,463,461,1,0,0,0,463,464,1,0,0,0,464,466,1,0,0,0,465,467,3,266,133, + 0,466,465,1,0,0,0,466,467,1,0,0,0,467,490,1,0,0,0,468,469,5,95,0,0,469, + 470,5,97,0,0,470,471,7,4,0,0,471,473,3,316,158,0,472,474,3,266,133,0,473, + 472,1,0,0,0,473,474,1,0,0,0,474,490,1,0,0,0,475,476,5,95,0,0,476,477,5, + 73,0,0,477,478,7,5,0,0,478,490,3,316,158,0,479,481,5,95,0,0,480,482,5,53, + 0,0,481,480,1,0,0,0,481,482,1,0,0,0,482,483,1,0,0,0,483,490,5,103,0,0,484, + 486,5,95,0,0,485,487,5,52,0,0,486,485,1,0,0,0,486,487,1,0,0,0,487,488,1, + 0,0,0,488,490,5,101,0,0,489,454,1,0,0,0,489,456,1,0,0,0,489,459,1,0,0,0, + 489,468,1,0,0,0,489,475,1,0,0,0,489,479,1,0,0,0,489,484,1,0,0,0,490,27, + 1,0,0,0,491,492,5,212,0,0,492,493,5,100,0,0,493,496,3,316,158,0,494,495, + 5,70,0,0,495,497,3,324,162,0,496,494,1,0,0,0,496,497,1,0,0,0,497,29,1,0, + 0,0,498,499,5,213,0,0,499,500,5,100,0,0,500,501,3,316,158,0,501,31,1,0, + 0,0,502,504,5,116,0,0,503,505,3,326,163,0,504,503,1,0,0,0,504,505,1,0,0, + 0,505,33,1,0,0,0,506,508,5,117,0,0,507,509,3,328,164,0,508,507,1,0,0,0, + 508,509,1,0,0,0,509,35,1,0,0,0,510,511,7,6,0,0,511,512,5,244,0,0,512,513, + 3,112,56,0,513,37,1,0,0,0,514,515,5,6,0,0,515,516,5,244,0,0,516,517,5,70, + 0,0,517,520,5,348,0,0,518,519,5,7,0,0,519,521,3,316,158,0,520,518,1,0,0, + 0,520,521,1,0,0,0,521,554,1,0,0,0,522,523,5,6,0,0,523,524,5,245,0,0,524, + 525,5,70,0,0,525,528,5,348,0,0,526,527,5,7,0,0,527,529,3,316,158,0,528, + 526,1,0,0,0,528,529,1,0,0,0,529,532,1,0,0,0,530,531,5,113,0,0,531,533,3, + 316,158,0,532,530,1,0,0,0,532,533,1,0,0,0,533,554,1,0,0,0,534,535,5,6,0, + 0,535,536,7,7,0,0,536,537,5,70,0,0,537,538,5,348,0,0,538,539,5,113,0,0, + 539,554,3,316,158,0,540,541,5,6,0,0,541,542,5,251,0,0,542,554,5,348,0,0, + 543,544,5,6,0,0,544,545,5,252,0,0,545,546,5,245,0,0,546,547,5,70,0,0,547, + 548,5,348,0,0,548,549,5,113,0,0,549,550,3,316,158,0,550,551,5,258,0,0,551, + 552,3,316,158,0,552,554,1,0,0,0,553,514,1,0,0,0,553,522,1,0,0,0,553,534, + 1,0,0,0,553,540,1,0,0,0,553,543,1,0,0,0,554,39,1,0,0,0,555,558,3,42,21, + 0,556,558,3,44,22,0,557,555,1,0,0,0,557,556,1,0,0,0,558,41,1,0,0,0,559, + 561,5,73,0,0,560,562,5,166,0,0,561,560,1,0,0,0,561,562,1,0,0,0,562,563, + 1,0,0,0,563,565,5,74,0,0,564,566,3,320,160,0,565,564,1,0,0,0,565,566,1, + 0,0,0,566,567,1,0,0,0,567,568,3,98,49,0,568,569,5,322,0,0,569,574,3,46, + 23,0,570,571,5,326,0,0,571,573,3,46,23,0,572,570,1,0,0,0,573,576,1,0,0, + 0,574,572,1,0,0,0,574,575,1,0,0,0,575,579,1,0,0,0,576,574,1,0,0,0,577,578, + 5,326,0,0,578,580,3,80,40,0,579,577,1,0,0,0,579,580,1,0,0,0,580,583,1,0, + 0,0,581,582,5,326,0,0,582,584,3,82,41,0,583,581,1,0,0,0,583,584,1,0,0,0, + 584,587,1,0,0,0,585,586,5,326,0,0,586,588,3,86,43,0,587,585,1,0,0,0,587, + 588,1,0,0,0,588,589,1,0,0,0,589,591,5,323,0,0,590,592,3,70,35,0,591,590, + 1,0,0,0,591,592,1,0,0,0,592,594,1,0,0,0,593,595,3,88,44,0,594,593,1,0,0, + 0,594,595,1,0,0,0,595,596,1,0,0,0,596,598,3,318,159,0,597,599,3,96,48,0, + 598,597,1,0,0,0,598,599,1,0,0,0,599,43,1,0,0,0,600,601,5,73,0,0,601,603, + 5,74,0,0,602,604,3,320,160,0,603,602,1,0,0,0,603,604,1,0,0,0,604,605,1, + 0,0,0,605,606,3,98,49,0,606,609,3,318,159,0,607,608,5,7,0,0,608,610,3,156, + 78,0,609,607,1,0,0,0,609,610,1,0,0,0,610,45,1,0,0,0,611,615,3,48,24,0,612, + 615,3,72,36,0,613,615,3,76,38,0,614,611,1,0,0,0,614,612,1,0,0,0,614,613, + 1,0,0,0,615,47,1,0,0,0,616,617,3,50,25,0,617,619,3,54,27,0,618,620,3,68, + 34,0,619,618,1,0,0,0,619,620,1,0,0,0,620,622,1,0,0,0,621,623,3,70,35,0, + 622,621,1,0,0,0,622,623,1,0,0,0,623,49,1,0,0,0,624,627,3,316,158,0,625, + 627,3,260,130,0,626,624,1,0,0,0,626,625,1,0,0,0,627,51,1,0,0,0,628,629, + 5,322,0,0,629,634,3,50,25,0,630,631,5,326,0,0,631,633,3,50,25,0,632,630, + 1,0,0,0,633,636,1,0,0,0,634,632,1,0,0,0,634,635,1,0,0,0,635,637,1,0,0,0, + 636,634,1,0,0,0,637,638,5,323,0,0,638,53,1,0,0,0,639,677,7,8,0,0,640,642, + 7,9,0,0,641,643,3,56,28,0,642,641,1,0,0,0,642,643,1,0,0,0,643,677,1,0,0, + 0,644,646,5,303,0,0,645,647,3,56,28,0,646,645,1,0,0,0,646,647,1,0,0,0,647, + 654,1,0,0,0,648,650,7,10,0,0,649,651,5,224,0,0,650,649,1,0,0,0,650,651, + 1,0,0,0,651,652,1,0,0,0,652,653,5,302,0,0,653,655,5,264,0,0,654,648,1,0, + 0,0,654,655,1,0,0,0,655,677,1,0,0,0,656,658,7,11,0,0,657,659,3,58,29,0, + 658,657,1,0,0,0,658,659,1,0,0,0,659,677,1,0,0,0,660,662,7,12,0,0,661,663, + 3,62,31,0,662,661,1,0,0,0,662,663,1,0,0,0,663,677,1,0,0,0,664,666,5,285, + 0,0,665,667,3,64,32,0,666,665,1,0,0,0,666,667,1,0,0,0,667,677,1,0,0,0,668, + 670,5,308,0,0,669,671,3,66,33,0,670,669,1,0,0,0,670,671,1,0,0,0,671,677, + 1,0,0,0,672,674,5,307,0,0,673,675,3,60,30,0,674,673,1,0,0,0,674,675,1,0, + 0,0,675,677,1,0,0,0,676,639,1,0,0,0,676,640,1,0,0,0,676,644,1,0,0,0,676, + 656,1,0,0,0,676,660,1,0,0,0,676,664,1,0,0,0,676,668,1,0,0,0,676,672,1,0, + 0,0,677,55,1,0,0,0,678,679,5,322,0,0,679,680,3,348,174,0,680,681,5,323, + 0,0,681,57,1,0,0,0,682,683,5,322,0,0,683,686,3,348,174,0,684,685,5,326, + 0,0,685,687,3,348,174,0,686,684,1,0,0,0,686,687,1,0,0,0,687,688,1,0,0,0, + 688,689,5,323,0,0,689,59,1,0,0,0,690,691,5,322,0,0,691,694,3,346,173,0, + 692,693,5,326,0,0,693,695,3,346,173,0,694,692,1,0,0,0,694,695,1,0,0,0,695, + 696,1,0,0,0,696,697,5,323,0,0,697,61,1,0,0,0,698,699,5,313,0,0,699,700, + 3,54,27,0,700,701,5,312,0,0,701,63,1,0,0,0,702,703,5,313,0,0,703,704,3, + 54,27,0,704,705,5,326,0,0,705,706,3,54,27,0,706,707,1,0,0,0,707,708,5,312, + 0,0,708,65,1,0,0,0,709,710,5,313,0,0,710,711,3,50,25,0,711,718,3,54,27, + 0,712,713,5,326,0,0,713,714,3,50,25,0,714,715,3,54,27,0,715,717,1,0,0,0, + 716,712,1,0,0,0,717,720,1,0,0,0,718,716,1,0,0,0,718,719,1,0,0,0,719,721, + 1,0,0,0,720,718,1,0,0,0,721,722,5,312,0,0,722,67,1,0,0,0,723,724,5,185, + 0,0,724,726,3,84,42,0,725,723,1,0,0,0,725,726,1,0,0,0,726,727,1,0,0,0,727, + 728,5,256,0,0,728,729,5,258,0,0,729,730,5,25,0,0,730,731,5,261,0,0,731, + 69,1,0,0,0,732,733,5,115,0,0,733,734,5,343,0,0,734,71,1,0,0,0,735,736,3, + 50,25,0,736,737,3,54,27,0,737,740,5,262,0,0,738,739,5,5,0,0,739,741,3,74, + 37,0,740,738,1,0,0,0,740,741,1,0,0,0,741,743,1,0,0,0,742,744,5,263,0,0, + 743,742,1,0,0,0,743,744,1,0,0,0,744,73,1,0,0,0,745,746,5,343,0,0,746,75, + 1,0,0,0,747,748,3,50,25,0,748,749,5,7,0,0,749,751,3,78,39,0,750,752,3,70, + 35,0,751,750,1,0,0,0,751,752,1,0,0,0,752,77,1,0,0,0,753,754,3,260,130,0, + 754,79,1,0,0,0,755,756,5,226,0,0,756,757,5,37,0,0,757,758,3,260,130,0,758, + 759,5,7,0,0,759,760,3,260,130,0,760,81,1,0,0,0,761,762,5,185,0,0,762,764, + 3,84,42,0,763,761,1,0,0,0,763,764,1,0,0,0,764,765,1,0,0,0,765,766,5,256, + 0,0,766,767,5,258,0,0,767,768,3,52,26,0,768,769,5,25,0,0,769,770,5,261, + 0,0,770,83,1,0,0,0,771,772,3,304,152,0,772,85,1,0,0,0,773,774,5,259,0,0, + 774,775,5,37,0,0,775,776,5,260,0,0,776,87,1,0,0,0,777,778,5,200,0,0,778, + 779,5,13,0,0,779,780,3,90,45,0,780,89,1,0,0,0,781,782,5,322,0,0,782,787, + 3,92,46,0,783,784,5,326,0,0,784,786,3,92,46,0,785,783,1,0,0,0,786,789,1, + 0,0,0,787,785,1,0,0,0,787,788,1,0,0,0,788,790,1,0,0,0,789,787,1,0,0,0,790, + 791,5,323,0,0,791,91,1,0,0,0,792,806,3,278,139,0,793,794,3,304,152,0,794, + 795,5,322,0,0,795,800,3,94,47,0,796,797,5,326,0,0,797,799,3,94,47,0,798, + 796,1,0,0,0,799,802,1,0,0,0,800,798,1,0,0,0,800,801,1,0,0,0,801,803,1,0, + 0,0,802,800,1,0,0,0,803,804,5,323,0,0,804,806,1,0,0,0,805,792,1,0,0,0,805, + 793,1,0,0,0,806,93,1,0,0,0,807,810,3,278,139,0,808,810,3,344,172,0,809, + 807,1,0,0,0,809,808,1,0,0,0,810,95,1,0,0,0,811,812,5,29,0,0,812,821,3,98, + 49,0,813,817,5,322,0,0,814,816,3,100,50,0,815,814,1,0,0,0,816,819,1,0,0, + 0,817,815,1,0,0,0,817,818,1,0,0,0,818,820,1,0,0,0,819,817,1,0,0,0,820,822, + 5,323,0,0,821,813,1,0,0,0,821,822,1,0,0,0,822,97,1,0,0,0,823,824,3,316, + 158,0,824,99,1,0,0,0,825,826,7,13,0,0,826,830,7,14,0,0,827,828,7,15,0,0, + 828,830,7,16,0,0,829,825,1,0,0,0,829,827,1,0,0,0,830,101,1,0,0,0,831,832, + 5,73,0,0,832,833,5,239,0,0,833,834,3,316,158,0,834,835,3,318,159,0,835, + 103,1,0,0,0,836,837,5,73,0,0,837,839,5,192,0,0,838,840,3,320,160,0,839, + 838,1,0,0,0,839,840,1,0,0,0,840,841,1,0,0,0,841,843,3,316,158,0,842,844, + 3,70,35,0,843,842,1,0,0,0,843,844,1,0,0,0,844,845,1,0,0,0,845,846,3,318, + 159,0,846,105,1,0,0,0,847,849,5,73,0,0,848,850,5,166,0,0,849,848,1,0,0, + 0,849,850,1,0,0,0,850,851,1,0,0,0,851,853,5,76,0,0,852,854,3,320,160,0, + 853,852,1,0,0,0,853,854,1,0,0,0,854,855,1,0,0,0,855,857,3,316,158,0,856, + 858,3,52,26,0,857,856,1,0,0,0,857,858,1,0,0,0,858,860,1,0,0,0,859,861,3, + 70,35,0,860,859,1,0,0,0,860,861,1,0,0,0,861,862,1,0,0,0,862,863,5,7,0,0, + 863,864,3,156,78,0,864,107,1,0,0,0,865,869,5,73,0,0,866,870,5,166,0,0,867, + 868,5,166,0,0,868,870,5,232,0,0,869,866,1,0,0,0,869,867,1,0,0,0,869,870, + 1,0,0,0,870,871,1,0,0,0,871,873,5,157,0,0,872,874,3,320,160,0,873,872,1, + 0,0,0,873,874,1,0,0,0,874,875,1,0,0,0,875,876,3,316,158,0,876,877,5,7,0, + 0,877,880,3,304,152,0,878,879,5,240,0,0,879,881,7,17,0,0,880,878,1,0,0, + 0,880,881,1,0,0,0,881,883,1,0,0,0,882,884,3,110,55,0,883,882,1,0,0,0,883, + 884,1,0,0,0,884,109,1,0,0,0,885,886,5,143,0,0,886,887,5,244,0,0,887,893, + 3,112,56,0,888,889,5,326,0,0,889,890,5,244,0,0,890,892,3,112,56,0,891,888, + 1,0,0,0,892,895,1,0,0,0,893,891,1,0,0,0,893,894,1,0,0,0,894,111,1,0,0,0, + 895,893,1,0,0,0,896,897,5,343,0,0,897,113,1,0,0,0,898,899,5,112,0,0,899, + 901,5,74,0,0,900,902,3,322,161,0,901,900,1,0,0,0,901,902,1,0,0,0,902,903, + 1,0,0,0,903,909,3,316,158,0,904,910,3,116,58,0,905,910,3,118,59,0,906,910, + 3,120,60,0,907,910,3,122,61,0,908,910,3,124,62,0,909,904,1,0,0,0,909,905, + 1,0,0,0,909,906,1,0,0,0,909,907,1,0,0,0,909,908,1,0,0,0,910,115,1,0,0,0, + 911,913,5,113,0,0,912,914,3,316,158,0,913,912,1,0,0,0,913,914,1,0,0,0,914, + 915,1,0,0,0,915,916,5,109,0,0,916,917,3,316,158,0,917,117,1,0,0,0,918,919, + 5,116,0,0,919,920,3,324,162,0,920,119,1,0,0,0,921,922,5,6,0,0,922,923,5, + 185,0,0,923,924,3,84,42,0,924,925,5,256,0,0,925,926,5,258,0,0,926,928,3, + 52,26,0,927,929,3,126,63,0,928,927,1,0,0,0,928,929,1,0,0,0,929,121,1,0, + 0,0,930,931,5,104,0,0,931,932,5,185,0,0,932,933,3,84,42,0,933,123,1,0,0, + 0,934,935,5,6,0,0,935,936,5,257,0,0,936,937,3,52,26,0,937,125,1,0,0,0,938, + 939,5,25,0,0,939,940,5,261,0,0,940,127,1,0,0,0,941,942,5,112,0,0,942,943, + 5,76,0,0,943,947,3,316,158,0,944,948,3,116,58,0,945,946,5,7,0,0,946,948, + 3,156,78,0,947,944,1,0,0,0,947,945,1,0,0,0,948,129,1,0,0,0,949,950,5,112, + 0,0,950,951,5,192,0,0,951,952,3,316,158,0,952,953,3,118,59,0,953,131,1, + 0,0,0,954,958,5,112,0,0,955,959,5,166,0,0,956,957,5,166,0,0,957,959,5,232, + 0,0,958,955,1,0,0,0,958,956,1,0,0,0,958,959,1,0,0,0,959,960,1,0,0,0,960, + 962,5,157,0,0,961,963,3,322,161,0,962,961,1,0,0,0,962,963,1,0,0,0,963,964, + 1,0,0,0,964,965,3,316,158,0,965,966,5,7,0,0,966,969,3,304,152,0,967,968, + 5,240,0,0,968,970,7,17,0,0,969,967,1,0,0,0,969,970,1,0,0,0,970,133,1,0, + 0,0,971,972,5,104,0,0,972,974,5,239,0,0,973,975,3,322,161,0,974,973,1,0, + 0,0,974,975,1,0,0,0,975,976,1,0,0,0,976,977,3,316,158,0,977,135,1,0,0,0, + 978,980,5,104,0,0,979,981,5,166,0,0,980,979,1,0,0,0,980,981,1,0,0,0,981, + 982,1,0,0,0,982,984,5,74,0,0,983,985,3,322,161,0,984,983,1,0,0,0,984,985, + 1,0,0,0,985,986,1,0,0,0,986,987,3,316,158,0,987,137,1,0,0,0,988,989,5,104, + 0,0,989,991,5,192,0,0,990,992,3,322,161,0,991,990,1,0,0,0,991,992,1,0,0, + 0,992,993,1,0,0,0,993,995,3,316,158,0,994,996,7,18,0,0,995,994,1,0,0,0, + 995,996,1,0,0,0,996,139,1,0,0,0,997,999,5,104,0,0,998,1000,5,166,0,0,999, + 998,1,0,0,0,999,1000,1,0,0,0,1000,1001,1,0,0,0,1001,1003,5,76,0,0,1002, + 1004,3,322,161,0,1003,1002,1,0,0,0,1003,1004,1,0,0,0,1004,1005,1,0,0,0, + 1005,1006,3,316,158,0,1006,141,1,0,0,0,1007,1011,5,104,0,0,1008,1012,5, + 166,0,0,1009,1010,5,166,0,0,1010,1012,5,232,0,0,1011,1008,1,0,0,0,1011, + 1009,1,0,0,0,1011,1012,1,0,0,0,1012,1013,1,0,0,0,1013,1015,5,157,0,0,1014, + 1016,3,322,161,0,1015,1014,1,0,0,0,1015,1016,1,0,0,0,1016,1017,1,0,0,0, + 1017,1018,3,316,158,0,1018,143,1,0,0,0,1019,1021,5,78,0,0,1020,1019,1,0, + 0,0,1020,1021,1,0,0,0,1021,1022,1,0,0,0,1022,1026,3,146,73,0,1023,1024, + 5,78,0,0,1024,1026,3,154,77,0,1025,1020,1,0,0,0,1025,1023,1,0,0,0,1026, + 145,1,0,0,0,1027,1028,5,80,0,0,1028,1029,7,19,0,0,1029,1038,3,316,158,0, + 1030,1032,3,148,74,0,1031,1030,1,0,0,0,1031,1032,1,0,0,0,1032,1034,1,0, + 0,0,1033,1035,3,52,26,0,1034,1033,1,0,0,0,1034,1035,1,0,0,0,1035,1036,1, + 0,0,0,1036,1039,3,156,78,0,1037,1039,3,150,75,0,1038,1031,1,0,0,0,1038, + 1037,1,0,0,0,1039,147,1,0,0,0,1040,1041,5,60,0,0,1041,1042,3,324,162,0, + 1042,149,1,0,0,0,1043,1044,5,72,0,0,1044,1049,3,152,76,0,1045,1046,5,326, + 0,0,1046,1048,3,152,76,0,1047,1045,1,0,0,0,1048,1051,1,0,0,0,1049,1047, + 1,0,0,0,1049,1050,1,0,0,0,1050,151,1,0,0,0,1051,1049,1,0,0,0,1052,1053, + 5,322,0,0,1053,1058,3,344,172,0,1054,1055,5,326,0,0,1055,1057,3,344,172, + 0,1056,1054,1,0,0,0,1057,1060,1,0,0,0,1058,1056,1,0,0,0,1058,1059,1,0,0, + 0,1059,1061,1,0,0,0,1060,1058,1,0,0,0,1061,1062,5,323,0,0,1062,153,1,0, + 0,0,1063,1064,5,79,0,0,1064,1065,5,116,0,0,1065,1069,5,43,0,0,1066,1067, + 3,146,73,0,1067,1068,5,327,0,0,1068,1070,1,0,0,0,1069,1066,1,0,0,0,1070, + 1071,1,0,0,0,1071,1069,1,0,0,0,1071,1072,1,0,0,0,1072,1073,1,0,0,0,1073, + 1074,5,44,0,0,1074,155,1,0,0,0,1075,1076,6,78,-1,0,1076,1099,3,158,79,0, + 1077,1078,3,160,80,0,1078,1079,3,156,78,5,1079,1099,1,0,0,0,1080,1081,5, + 322,0,0,1081,1082,3,156,78,0,1082,1083,5,323,0,0,1083,1099,1,0,0,0,1084, + 1086,3,168,84,0,1085,1087,3,230,115,0,1086,1085,1,0,0,0,1086,1087,1,0,0, + 0,1087,1089,1,0,0,0,1088,1090,3,234,117,0,1089,1088,1,0,0,0,1089,1090,1, + 0,0,0,1090,1099,1,0,0,0,1091,1093,3,166,83,0,1092,1094,3,230,115,0,1093, + 1092,1,0,0,0,1093,1094,1,0,0,0,1094,1096,1,0,0,0,1095,1097,3,234,117,0, + 1096,1095,1,0,0,0,1096,1097,1,0,0,0,1097,1099,1,0,0,0,1098,1075,1,0,0,0, + 1098,1077,1,0,0,0,1098,1080,1,0,0,0,1098,1084,1,0,0,0,1098,1091,1,0,0,0, + 1099,1114,1,0,0,0,1100,1101,10,3,0,0,1101,1103,7,20,0,0,1102,1104,5,8,0, + 0,1103,1102,1,0,0,0,1103,1104,1,0,0,0,1104,1105,1,0,0,0,1105,1107,3,156, + 78,0,1106,1108,3,230,115,0,1107,1106,1,0,0,0,1107,1108,1,0,0,0,1108,1110, + 1,0,0,0,1109,1111,3,234,117,0,1110,1109,1,0,0,0,1110,1111,1,0,0,0,1111, + 1113,1,0,0,0,1112,1100,1,0,0,0,1113,1116,1,0,0,0,1114,1112,1,0,0,0,1114, + 1115,1,0,0,0,1115,157,1,0,0,0,1116,1114,1,0,0,0,1117,1118,5,72,0,0,1118, + 1123,3,260,130,0,1119,1120,5,326,0,0,1120,1122,3,260,130,0,1121,1119,1, + 0,0,0,1122,1125,1,0,0,0,1123,1121,1,0,0,0,1123,1124,1,0,0,0,1124,159,1, + 0,0,0,1125,1123,1,0,0,0,1126,1127,5,70,0,0,1127,1132,3,162,81,0,1128,1129, + 5,326,0,0,1129,1131,3,162,81,0,1130,1128,1,0,0,0,1131,1134,1,0,0,0,1132, + 1130,1,0,0,0,1132,1133,1,0,0,0,1133,161,1,0,0,0,1134,1132,1,0,0,0,1135, + 1147,3,164,82,0,1136,1137,5,322,0,0,1137,1142,3,50,25,0,1138,1139,5,326, + 0,0,1139,1141,3,50,25,0,1140,1138,1,0,0,0,1141,1144,1,0,0,0,1142,1140,1, + 0,0,0,1142,1143,1,0,0,0,1143,1145,1,0,0,0,1144,1142,1,0,0,0,1145,1146,5, + 323,0,0,1146,1148,1,0,0,0,1147,1136,1,0,0,0,1147,1148,1,0,0,0,1148,1149, + 1,0,0,0,1149,1150,5,7,0,0,1150,1151,5,322,0,0,1151,1152,3,156,78,0,1152, + 1153,5,323,0,0,1153,163,1,0,0,0,1154,1155,3,304,152,0,1155,165,1,0,0,0, + 1156,1157,3,168,84,0,1157,1159,3,174,87,0,1158,1160,3,204,102,0,1159,1158, + 1,0,0,0,1159,1160,1,0,0,0,1160,1162,1,0,0,0,1161,1163,3,206,103,0,1162, + 1161,1,0,0,0,1162,1163,1,0,0,0,1163,1165,1,0,0,0,1164,1166,3,220,110,0, + 1165,1164,1,0,0,0,1165,1166,1,0,0,0,1166,1168,1,0,0,0,1167,1169,3,222,111, + 0,1168,1167,1,0,0,0,1168,1169,1,0,0,0,1169,1175,1,0,0,0,1170,1171,3,168, + 84,0,1171,1172,3,174,87,0,1172,1173,3,228,114,0,1173,1175,1,0,0,0,1174, + 1156,1,0,0,0,1174,1170,1,0,0,0,1175,167,1,0,0,0,1176,1178,5,4,0,0,1177, + 1179,3,352,176,0,1178,1177,1,0,0,0,1178,1179,1,0,0,0,1179,1189,1,0,0,0, + 1180,1190,5,333,0,0,1181,1186,3,170,85,0,1182,1183,5,326,0,0,1183,1185, + 3,170,85,0,1184,1182,1,0,0,0,1185,1188,1,0,0,0,1186,1184,1,0,0,0,1186,1187, + 1,0,0,0,1187,1190,1,0,0,0,1188,1186,1,0,0,0,1189,1180,1,0,0,0,1189,1181, + 1,0,0,0,1190,169,1,0,0,0,1191,1200,3,172,86,0,1192,1197,3,260,130,0,1193, + 1195,5,7,0,0,1194,1193,1,0,0,0,1194,1195,1,0,0,0,1195,1196,1,0,0,0,1196, + 1198,3,260,130,0,1197,1194,1,0,0,0,1197,1198,1,0,0,0,1198,1200,1,0,0,0, + 1199,1191,1,0,0,0,1199,1192,1,0,0,0,1200,171,1,0,0,0,1201,1202,3,270,135, + 0,1202,1203,5,59,0,0,1203,1204,3,226,113,0,1204,1205,5,7,0,0,1205,1206, + 3,306,153,0,1206,1214,1,0,0,0,1207,1208,3,270,135,0,1208,1209,5,59,0,0, + 1209,1210,3,296,148,0,1210,1211,5,7,0,0,1211,1212,3,306,153,0,1212,1214, + 1,0,0,0,1213,1201,1,0,0,0,1213,1207,1,0,0,0,1214,173,1,0,0,0,1215,1216, + 5,5,0,0,1216,1217,3,176,88,0,1217,175,1,0,0,0,1218,1219,6,88,-1,0,1219, + 1224,3,178,89,0,1220,1221,5,326,0,0,1221,1223,3,178,89,0,1222,1220,1,0, + 0,0,1223,1226,1,0,0,0,1224,1222,1,0,0,0,1224,1225,1,0,0,0,1225,1230,1,0, + 0,0,1226,1224,1,0,0,0,1227,1230,3,188,94,0,1228,1230,3,190,95,0,1229,1218, + 1,0,0,0,1229,1227,1,0,0,0,1229,1228,1,0,0,0,1230,1252,1,0,0,0,1231,1232, + 10,3,0,0,1232,1233,5,46,0,0,1233,1234,5,45,0,0,1234,1251,3,176,88,4,1235, + 1237,10,4,0,0,1236,1238,5,54,0,0,1237,1236,1,0,0,0,1237,1238,1,0,0,0,1238, + 1240,1,0,0,0,1239,1241,7,21,0,0,1240,1239,1,0,0,0,1240,1241,1,0,0,0,1241, + 1243,1,0,0,0,1242,1244,5,47,0,0,1243,1242,1,0,0,0,1243,1244,1,0,0,0,1244, + 1245,1,0,0,0,1245,1246,5,45,0,0,1246,1248,3,176,88,0,1247,1249,3,202,101, + 0,1248,1247,1,0,0,0,1248,1249,1,0,0,0,1249,1251,1,0,0,0,1250,1231,1,0,0, + 0,1250,1235,1,0,0,0,1251,1254,1,0,0,0,1252,1250,1,0,0,0,1252,1253,1,0,0, + 0,1253,177,1,0,0,0,1254,1252,1,0,0,0,1255,1257,3,180,90,0,1256,1258,3,294, + 147,0,1257,1256,1,0,0,0,1257,1258,1,0,0,0,1258,179,1,0,0,0,1259,1261,5, + 74,0,0,1260,1259,1,0,0,0,1260,1261,1,0,0,0,1261,1262,1,0,0,0,1262,1264, + 3,182,91,0,1263,1265,3,184,92,0,1264,1263,1,0,0,0,1264,1265,1,0,0,0,1265, + 1270,1,0,0,0,1266,1268,5,7,0,0,1267,1266,1,0,0,0,1267,1268,1,0,0,0,1268, + 1269,1,0,0,0,1269,1271,3,276,138,0,1270,1267,1,0,0,0,1270,1271,1,0,0,0, + 1271,1301,1,0,0,0,1272,1273,5,57,0,0,1273,1274,5,74,0,0,1274,1275,5,322, + 0,0,1275,1276,3,272,136,0,1276,1277,5,322,0,0,1277,1282,3,260,130,0,1278, + 1279,5,326,0,0,1279,1281,3,260,130,0,1280,1278,1,0,0,0,1281,1284,1,0,0, + 0,1282,1280,1,0,0,0,1282,1283,1,0,0,0,1283,1285,1,0,0,0,1284,1282,1,0,0, + 0,1285,1286,5,323,0,0,1286,1287,5,323,0,0,1287,1301,1,0,0,0,1288,1290,5, + 57,0,0,1289,1288,1,0,0,0,1289,1290,1,0,0,0,1290,1291,1,0,0,0,1291,1292, + 5,322,0,0,1292,1293,3,156,78,0,1293,1294,5,323,0,0,1294,1301,1,0,0,0,1295, + 1296,5,227,0,0,1296,1297,5,322,0,0,1297,1298,3,260,130,0,1298,1299,5,323, + 0,0,1299,1301,1,0,0,0,1300,1260,1,0,0,0,1300,1272,1,0,0,0,1300,1289,1,0, + 0,0,1300,1295,1,0,0,0,1301,181,1,0,0,0,1302,1303,3,316,158,0,1303,183,1, + 0,0,0,1304,1305,5,37,0,0,1305,1306,5,260,0,0,1306,1307,5,7,0,0,1307,1308, + 5,136,0,0,1308,1309,3,186,93,0,1309,185,1,0,0,0,1310,1311,3,260,130,0,1311, + 187,1,0,0,0,1312,1313,5,322,0,0,1313,1314,3,150,75,0,1314,1315,5,323,0, + 0,1315,1316,3,294,147,0,1316,189,1,0,0,0,1317,1318,5,74,0,0,1318,1319,5, + 322,0,0,1319,1320,3,192,96,0,1320,1321,5,323,0,0,1321,191,1,0,0,0,1322, + 1323,3,194,97,0,1323,1324,5,322,0,0,1324,1329,3,196,98,0,1325,1326,5,326, + 0,0,1326,1328,3,196,98,0,1327,1325,1,0,0,0,1328,1331,1,0,0,0,1329,1327, + 1,0,0,0,1329,1330,1,0,0,0,1330,1332,1,0,0,0,1331,1329,1,0,0,0,1332,1333, + 5,323,0,0,1333,193,1,0,0,0,1334,1335,7,22,0,0,1335,195,1,0,0,0,1336,1337, + 5,74,0,0,1337,1352,3,218,109,0,1338,1352,3,200,100,0,1339,1352,3,258,129, + 0,1340,1341,5,118,0,0,1341,1342,5,349,0,0,1342,1343,5,74,0,0,1343,1352, + 3,218,109,0,1344,1345,5,269,0,0,1345,1346,5,349,0,0,1346,1352,3,200,100, + 0,1347,1348,3,198,99,0,1348,1349,5,349,0,0,1349,1350,3,258,129,0,1350,1352, + 1,0,0,0,1351,1336,1,0,0,0,1351,1338,1,0,0,0,1351,1339,1,0,0,0,1351,1340, + 1,0,0,0,1351,1344,1,0,0,0,1351,1347,1,0,0,0,1352,197,1,0,0,0,1353,1354, + 7,23,0,0,1354,199,1,0,0,0,1355,1356,5,268,0,0,1356,1357,5,322,0,0,1357, + 1358,3,316,158,0,1358,1359,5,323,0,0,1359,201,1,0,0,0,1360,1361,5,55,0, + 0,1361,1375,3,262,131,0,1362,1363,5,143,0,0,1363,1364,5,322,0,0,1364,1369, + 3,316,158,0,1365,1366,5,326,0,0,1366,1368,3,316,158,0,1367,1365,1,0,0,0, + 1368,1371,1,0,0,0,1369,1367,1,0,0,0,1369,1370,1,0,0,0,1370,1372,1,0,0,0, + 1371,1369,1,0,0,0,1372,1373,5,323,0,0,1373,1375,1,0,0,0,1374,1360,1,0,0, + 0,1374,1362,1,0,0,0,1375,203,1,0,0,0,1376,1377,5,11,0,0,1377,1378,3,262, + 131,0,1378,205,1,0,0,0,1379,1380,5,12,0,0,1380,1381,5,13,0,0,1381,1386, + 3,208,104,0,1382,1383,5,326,0,0,1383,1385,3,208,104,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,207,1,0,0,0, + 1388,1386,1,0,0,0,1389,1429,3,260,130,0,1390,1429,3,214,107,0,1391,1392, + 5,322,0,0,1392,1429,5,323,0,0,1393,1394,5,322,0,0,1394,1399,3,260,130,0, + 1395,1396,5,326,0,0,1396,1398,3,260,130,0,1397,1395,1,0,0,0,1398,1401,1, + 0,0,0,1399,1397,1,0,0,0,1399,1400,1,0,0,0,1400,1402,1,0,0,0,1401,1399,1, + 0,0,0,1402,1403,5,323,0,0,1403,1429,1,0,0,0,1404,1405,3,212,106,0,1405, + 1406,5,322,0,0,1406,1411,3,260,130,0,1407,1408,5,326,0,0,1408,1410,3,260, + 130,0,1409,1407,1,0,0,0,1410,1413,1,0,0,0,1411,1409,1,0,0,0,1411,1412,1, + 0,0,0,1412,1414,1,0,0,0,1413,1411,1,0,0,0,1414,1415,5,323,0,0,1415,1429, + 1,0,0,0,1416,1417,3,210,105,0,1417,1418,5,322,0,0,1418,1423,3,208,104,0, + 1419,1420,5,326,0,0,1420,1422,3,208,104,0,1421,1419,1,0,0,0,1422,1425,1, + 0,0,0,1423,1421,1,0,0,0,1423,1424,1,0,0,0,1424,1426,1,0,0,0,1425,1423,1, + 0,0,0,1426,1427,5,323,0,0,1427,1429,1,0,0,0,1428,1389,1,0,0,0,1428,1390, + 1,0,0,0,1428,1391,1,0,0,0,1428,1393,1,0,0,0,1428,1404,1,0,0,0,1428,1416, + 1,0,0,0,1429,209,1,0,0,0,1430,1431,5,14,0,0,1431,1432,5,15,0,0,1432,211, + 1,0,0,0,1433,1434,7,24,0,0,1434,213,1,0,0,0,1435,1436,3,216,108,0,1436, + 1437,5,322,0,0,1437,1438,3,218,109,0,1438,1439,5,326,0,0,1439,1440,3,258, + 129,0,1440,1441,5,323,0,0,1441,215,1,0,0,0,1442,1443,7,25,0,0,1443,217, + 1,0,0,0,1444,1445,3,316,158,0,1445,219,1,0,0,0,1446,1447,5,19,0,0,1447, + 1448,3,262,131,0,1448,221,1,0,0,0,1449,1450,5,58,0,0,1450,1455,3,224,112, + 0,1451,1452,5,326,0,0,1452,1454,3,224,112,0,1453,1451,1,0,0,0,1454,1457, + 1,0,0,0,1455,1453,1,0,0,0,1455,1456,1,0,0,0,1456,223,1,0,0,0,1457,1455, + 1,0,0,0,1458,1459,3,296,148,0,1459,1460,5,7,0,0,1460,1461,3,226,113,0,1461, + 225,1,0,0,0,1462,1464,3,296,148,0,1463,1462,1,0,0,0,1463,1464,1,0,0,0,1464, + 1465,1,0,0,0,1465,1467,5,322,0,0,1466,1468,3,236,118,0,1467,1466,1,0,0, + 0,1467,1468,1,0,0,0,1468,1470,1,0,0,0,1469,1471,3,230,115,0,1470,1469,1, + 0,0,0,1470,1471,1,0,0,0,1471,1473,1,0,0,0,1472,1474,3,252,126,0,1473,1472, + 1,0,0,0,1473,1474,1,0,0,0,1474,1475,1,0,0,0,1475,1476,5,323,0,0,1476,227, + 1,0,0,0,1477,1478,5,275,0,0,1478,1480,5,322,0,0,1479,1481,3,236,118,0,1480, + 1479,1,0,0,0,1480,1481,1,0,0,0,1481,1483,1,0,0,0,1482,1484,3,230,115,0, + 1483,1482,1,0,0,0,1483,1484,1,0,0,0,1484,1486,1,0,0,0,1485,1487,3,240,120, + 0,1486,1485,1,0,0,0,1486,1487,1,0,0,0,1487,1489,1,0,0,0,1488,1490,3,246, + 123,0,1489,1488,1,0,0,0,1489,1490,1,0,0,0,1490,1492,1,0,0,0,1491,1493,3, + 248,124,0,1492,1491,1,0,0,0,1492,1493,1,0,0,0,1493,1495,1,0,0,0,1494,1496, + 3,242,121,0,1495,1494,1,0,0,0,1495,1496,1,0,0,0,1496,1497,1,0,0,0,1497, + 1498,3,250,125,0,1498,1503,5,323,0,0,1499,1501,5,7,0,0,1500,1499,1,0,0, + 0,1500,1501,1,0,0,0,1501,1502,1,0,0,0,1502,1504,3,306,153,0,1503,1500,1, + 0,0,0,1503,1504,1,0,0,0,1504,229,1,0,0,0,1505,1506,5,18,0,0,1506,1507,5, + 13,0,0,1507,1512,3,232,116,0,1508,1509,5,326,0,0,1509,1511,3,232,116,0, + 1510,1508,1,0,0,0,1511,1514,1,0,0,0,1512,1510,1,0,0,0,1512,1513,1,0,0,0, + 1513,231,1,0,0,0,1514,1512,1,0,0,0,1515,1517,3,260,130,0,1516,1518,7,26, + 0,0,1517,1516,1,0,0,0,1517,1518,1,0,0,0,1518,1521,1,0,0,0,1519,1520,5,34, + 0,0,1520,1522,7,27,0,0,1521,1519,1,0,0,0,1521,1522,1,0,0,0,1522,233,1,0, + 0,0,1523,1526,5,20,0,0,1524,1527,5,8,0,0,1525,1527,3,260,130,0,1526,1524, + 1,0,0,0,1526,1525,1,0,0,0,1527,235,1,0,0,0,1528,1529,5,60,0,0,1529,1530, + 5,13,0,0,1530,1535,3,260,130,0,1531,1532,5,326,0,0,1532,1534,3,260,130, + 0,1533,1531,1,0,0,0,1534,1537,1,0,0,0,1535,1533,1,0,0,0,1535,1536,1,0,0, + 0,1536,237,1,0,0,0,1537,1535,1,0,0,0,1538,1555,5,333,0,0,1539,1555,5,336, + 0,0,1540,1555,5,341,0,0,1541,1542,5,324,0,0,1542,1543,5,344,0,0,1543,1544, + 5,326,0,0,1544,1545,5,344,0,0,1545,1555,5,325,0,0,1546,1547,5,324,0,0,1547, + 1548,5,344,0,0,1548,1549,5,326,0,0,1549,1555,5,325,0,0,1550,1551,5,324, + 0,0,1551,1552,5,326,0,0,1552,1553,5,344,0,0,1553,1555,5,325,0,0,1554,1538, + 1,0,0,0,1554,1539,1,0,0,0,1554,1540,1,0,0,0,1554,1541,1,0,0,0,1554,1546, + 1,0,0,0,1554,1550,1,0,0,0,1555,239,1,0,0,0,1556,1557,5,276,0,0,1557,1562, + 3,170,85,0,1558,1559,5,326,0,0,1559,1561,3,170,85,0,1560,1558,1,0,0,0,1561, + 1564,1,0,0,0,1562,1560,1,0,0,0,1562,1563,1,0,0,0,1563,241,1,0,0,0,1564, + 1562,1,0,0,0,1565,1566,5,277,0,0,1566,1568,5,322,0,0,1567,1569,3,244,122, + 0,1568,1567,1,0,0,0,1569,1570,1,0,0,0,1570,1568,1,0,0,0,1570,1571,1,0,0, + 0,1571,1572,1,0,0,0,1572,1574,5,323,0,0,1573,1575,3,256,128,0,1574,1573, + 1,0,0,0,1574,1575,1,0,0,0,1575,243,1,0,0,0,1576,1578,3,308,154,0,1577,1579, + 3,238,119,0,1578,1577,1,0,0,0,1578,1579,1,0,0,0,1579,245,1,0,0,0,1580,1581, + 5,8,0,0,1581,1582,5,62,0,0,1582,1583,5,279,0,0,1583,1589,5,228,0,0,1584, + 1585,5,278,0,0,1585,1586,5,308,0,0,1586,1587,5,279,0,0,1587,1589,5,228, + 0,0,1588,1580,1,0,0,0,1588,1584,1,0,0,0,1589,247,1,0,0,0,1590,1591,5,68, + 0,0,1591,1592,5,228,0,0,1592,1593,5,280,0,0,1593,1594,5,281,0,0,1594,1595, + 5,69,0,0,1595,1615,5,308,0,0,1596,1597,5,68,0,0,1597,1598,5,228,0,0,1598, + 1599,5,280,0,0,1599,1600,5,109,0,0,1600,1601,5,229,0,0,1601,1615,5,308, + 0,0,1602,1603,5,68,0,0,1603,1604,5,228,0,0,1604,1605,5,280,0,0,1605,1606, + 5,109,0,0,1606,1607,5,69,0,0,1607,1615,3,308,154,0,1608,1609,5,68,0,0,1609, + 1610,5,228,0,0,1610,1611,5,280,0,0,1611,1612,5,109,0,0,1612,1613,5,67,0, + 0,1613,1615,3,308,154,0,1614,1590,1,0,0,0,1614,1596,1,0,0,0,1614,1602,1, + 0,0,0,1614,1608,1,0,0,0,1615,249,1,0,0,0,1616,1617,5,282,0,0,1617,1622, + 3,170,85,0,1618,1619,5,326,0,0,1619,1621,3,170,85,0,1620,1618,1,0,0,0,1621, + 1624,1,0,0,0,1622,1620,1,0,0,0,1622,1623,1,0,0,0,1623,251,1,0,0,0,1624, + 1622,1,0,0,0,1625,1626,5,61,0,0,1626,1627,5,28,0,0,1627,1628,3,258,129, + 0,1628,1629,3,254,127,0,1629,1635,1,0,0,0,1630,1631,5,62,0,0,1631,1632, + 5,28,0,0,1632,1633,5,344,0,0,1633,1635,3,254,127,0,1634,1625,1,0,0,0,1634, + 1630,1,0,0,0,1635,253,1,0,0,0,1636,1637,5,64,0,0,1637,1638,5,23,0,0,1638, + 1639,5,66,0,0,1639,1640,5,308,0,0,1640,255,1,0,0,0,1641,1642,5,230,0,0, + 1642,1643,3,258,129,0,1643,257,1,0,0,0,1644,1645,5,38,0,0,1645,1646,5,343, + 0,0,1646,1647,5,347,0,0,1647,259,1,0,0,0,1648,1649,3,262,131,0,1649,261, + 1,0,0,0,1650,1651,6,131,-1,0,1651,1652,5,25,0,0,1652,1663,3,262,131,5,1653, + 1654,5,27,0,0,1654,1655,5,322,0,0,1655,1656,3,156,78,0,1656,1657,5,323, + 0,0,1657,1663,1,0,0,0,1658,1660,3,268,134,0,1659,1661,3,264,132,0,1660, + 1659,1,0,0,0,1660,1661,1,0,0,0,1661,1663,1,0,0,0,1662,1650,1,0,0,0,1662, + 1653,1,0,0,0,1662,1658,1,0,0,0,1663,1672,1,0,0,0,1664,1665,10,2,0,0,1665, + 1666,5,23,0,0,1666,1671,3,262,131,3,1667,1668,10,1,0,0,1668,1669,5,22,0, + 0,1669,1671,3,262,131,2,1670,1664,1,0,0,0,1670,1667,1,0,0,0,1671,1674,1, + 0,0,0,1672,1670,1,0,0,0,1672,1673,1,0,0,0,1673,263,1,0,0,0,1674,1672,1, + 0,0,0,1675,1677,5,25,0,0,1676,1675,1,0,0,0,1676,1677,1,0,0,0,1677,1678, + 1,0,0,0,1678,1679,5,28,0,0,1679,1680,3,268,134,0,1680,1681,5,23,0,0,1681, + 1682,3,268,134,0,1682,1759,1,0,0,0,1683,1685,5,25,0,0,1684,1683,1,0,0,0, + 1684,1685,1,0,0,0,1685,1686,1,0,0,0,1686,1687,5,24,0,0,1687,1688,5,322, + 0,0,1688,1693,3,260,130,0,1689,1690,5,326,0,0,1690,1692,3,260,130,0,1691, + 1689,1,0,0,0,1692,1695,1,0,0,0,1693,1691,1,0,0,0,1693,1694,1,0,0,0,1694, + 1696,1,0,0,0,1695,1693,1,0,0,0,1696,1697,5,323,0,0,1697,1759,1,0,0,0,1698, + 1700,5,25,0,0,1699,1698,1,0,0,0,1699,1700,1,0,0,0,1700,1701,1,0,0,0,1701, + 1702,5,24,0,0,1702,1703,5,322,0,0,1703,1704,3,156,78,0,1704,1705,5,323, + 0,0,1705,1759,1,0,0,0,1706,1707,5,27,0,0,1707,1708,5,322,0,0,1708,1709, + 3,156,78,0,1709,1710,5,323,0,0,1710,1759,1,0,0,0,1711,1713,5,25,0,0,1712, + 1711,1,0,0,0,1712,1713,1,0,0,0,1713,1714,1,0,0,0,1714,1715,5,30,0,0,1715, + 1759,3,268,134,0,1716,1718,5,25,0,0,1717,1716,1,0,0,0,1717,1718,1,0,0,0, + 1718,1719,1,0,0,0,1719,1720,5,29,0,0,1720,1734,7,28,0,0,1721,1722,5,322, + 0,0,1722,1735,5,323,0,0,1723,1724,5,322,0,0,1724,1729,3,260,130,0,1725, + 1726,5,326,0,0,1726,1728,3,260,130,0,1727,1725,1,0,0,0,1728,1731,1,0,0, + 0,1729,1727,1,0,0,0,1729,1730,1,0,0,0,1730,1732,1,0,0,0,1731,1729,1,0,0, + 0,1732,1733,5,323,0,0,1733,1735,1,0,0,0,1734,1721,1,0,0,0,1734,1723,1,0, + 0,0,1735,1759,1,0,0,0,1736,1738,5,25,0,0,1737,1736,1,0,0,0,1737,1738,1, + 0,0,0,1738,1739,1,0,0,0,1739,1740,5,29,0,0,1740,1759,3,268,134,0,1741,1743, + 5,31,0,0,1742,1744,5,25,0,0,1743,1742,1,0,0,0,1743,1744,1,0,0,0,1744,1745, + 1,0,0,0,1745,1759,5,309,0,0,1746,1748,5,31,0,0,1747,1749,5,25,0,0,1748, + 1747,1,0,0,0,1748,1749,1,0,0,0,1749,1750,1,0,0,0,1750,1759,7,29,0,0,1751, + 1753,5,31,0,0,1752,1754,5,25,0,0,1753,1752,1,0,0,0,1753,1754,1,0,0,0,1754, + 1755,1,0,0,0,1755,1756,5,10,0,0,1756,1757,5,5,0,0,1757,1759,3,268,134,0, + 1758,1676,1,0,0,0,1758,1684,1,0,0,0,1758,1699,1,0,0,0,1758,1706,1,0,0,0, + 1758,1712,1,0,0,0,1758,1717,1,0,0,0,1758,1737,1,0,0,0,1758,1741,1,0,0,0, + 1758,1746,1,0,0,0,1758,1751,1,0,0,0,1759,265,1,0,0,0,1760,1762,5,25,0,0, + 1761,1760,1,0,0,0,1761,1762,1,0,0,0,1762,1763,1,0,0,0,1763,1764,5,29,0, + 0,1764,1778,7,28,0,0,1765,1766,5,322,0,0,1766,1779,5,323,0,0,1767,1768, + 5,322,0,0,1768,1773,3,260,130,0,1769,1770,5,326,0,0,1770,1772,3,260,130, + 0,1771,1769,1,0,0,0,1772,1775,1,0,0,0,1773,1771,1,0,0,0,1773,1774,1,0,0, + 0,1774,1776,1,0,0,0,1775,1773,1,0,0,0,1776,1777,5,323,0,0,1777,1779,1,0, + 0,0,1778,1765,1,0,0,0,1778,1767,1,0,0,0,1779,1786,1,0,0,0,1780,1782,5,25, + 0,0,1781,1780,1,0,0,0,1781,1782,1,0,0,0,1782,1783,1,0,0,0,1783,1784,5,29, + 0,0,1784,1786,3,268,134,0,1785,1761,1,0,0,0,1785,1781,1,0,0,0,1786,267, + 1,0,0,0,1787,1788,6,134,-1,0,1788,1792,3,270,135,0,1789,1790,7,30,0,0,1790, + 1792,3,268,134,7,1791,1787,1,0,0,0,1791,1789,1,0,0,0,1792,1814,1,0,0,0, + 1793,1794,10,6,0,0,1794,1795,7,31,0,0,1795,1813,3,268,134,7,1796,1797,10, + 5,0,0,1797,1798,7,32,0,0,1798,1813,3,268,134,6,1799,1800,10,4,0,0,1800, + 1801,5,317,0,0,1801,1813,3,268,134,5,1802,1803,10,3,0,0,1803,1804,5,318, + 0,0,1804,1813,3,268,134,4,1805,1806,10,2,0,0,1806,1807,5,316,0,0,1807,1813, + 3,268,134,3,1808,1809,10,1,0,0,1809,1810,3,334,167,0,1810,1811,3,268,134, + 2,1811,1813,1,0,0,0,1812,1793,1,0,0,0,1812,1796,1,0,0,0,1812,1799,1,0,0, + 0,1812,1802,1,0,0,0,1812,1805,1,0,0,0,1812,1808,1,0,0,0,1813,1816,1,0,0, + 0,1814,1812,1,0,0,0,1814,1815,1,0,0,0,1815,269,1,0,0,0,1816,1814,1,0,0, + 0,1817,1818,6,135,-1,0,1818,1820,5,39,0,0,1819,1821,3,312,156,0,1820,1819, + 1,0,0,0,1821,1822,1,0,0,0,1822,1820,1,0,0,0,1822,1823,1,0,0,0,1823,1826, + 1,0,0,0,1824,1825,5,42,0,0,1825,1827,3,260,130,0,1826,1824,1,0,0,0,1826, + 1827,1,0,0,0,1827,1828,1,0,0,0,1828,1829,5,44,0,0,1829,1909,1,0,0,0,1830, + 1831,5,39,0,0,1831,1833,3,260,130,0,1832,1834,3,312,156,0,1833,1832,1,0, + 0,0,1834,1835,1,0,0,0,1835,1833,1,0,0,0,1835,1836,1,0,0,0,1836,1839,1,0, + 0,0,1837,1838,5,42,0,0,1838,1840,3,260,130,0,1839,1837,1,0,0,0,1839,1840, + 1,0,0,0,1840,1841,1,0,0,0,1841,1842,5,44,0,0,1842,1909,1,0,0,0,1843,1844, + 5,94,0,0,1844,1845,5,322,0,0,1845,1846,3,260,130,0,1846,1847,5,7,0,0,1847, + 1848,3,54,27,0,1848,1849,5,323,0,0,1849,1909,1,0,0,0,1850,1851,5,67,0,0, + 1851,1852,5,322,0,0,1852,1855,3,260,130,0,1853,1854,5,124,0,0,1854,1856, + 5,34,0,0,1855,1853,1,0,0,0,1855,1856,1,0,0,0,1856,1857,1,0,0,0,1857,1858, + 5,323,0,0,1858,1909,1,0,0,0,1859,1860,5,69,0,0,1860,1861,5,322,0,0,1861, + 1864,3,260,130,0,1862,1863,5,124,0,0,1863,1865,5,34,0,0,1864,1862,1,0,0, + 0,1864,1865,1,0,0,0,1865,1866,1,0,0,0,1866,1867,5,323,0,0,1867,1909,1,0, + 0,0,1868,1869,5,129,0,0,1869,1870,5,322,0,0,1870,1871,3,268,134,0,1871, + 1872,5,24,0,0,1872,1873,3,268,134,0,1873,1874,5,323,0,0,1874,1909,1,0,0, + 0,1875,1909,3,344,172,0,1876,1909,5,333,0,0,1877,1878,3,316,158,0,1878, + 1879,5,319,0,0,1879,1880,5,333,0,0,1880,1909,1,0,0,0,1881,1882,5,322,0, + 0,1882,1883,3,156,78,0,1883,1884,5,323,0,0,1884,1909,1,0,0,0,1885,1886, + 3,272,136,0,1886,1898,5,322,0,0,1887,1889,3,352,176,0,1888,1887,1,0,0,0, + 1888,1889,1,0,0,0,1889,1890,1,0,0,0,1890,1895,3,260,130,0,1891,1892,5,326, + 0,0,1892,1894,3,260,130,0,1893,1891,1,0,0,0,1894,1897,1,0,0,0,1895,1893, + 1,0,0,0,1895,1896,1,0,0,0,1896,1899,1,0,0,0,1897,1895,1,0,0,0,1898,1888, + 1,0,0,0,1898,1899,1,0,0,0,1899,1900,1,0,0,0,1900,1901,5,323,0,0,1901,1909, + 1,0,0,0,1902,1909,3,304,152,0,1903,1909,3,274,137,0,1904,1905,5,322,0,0, + 1905,1906,3,260,130,0,1906,1907,5,323,0,0,1907,1909,1,0,0,0,1908,1817,1, + 0,0,0,1908,1830,1,0,0,0,1908,1843,1,0,0,0,1908,1850,1,0,0,0,1908,1859,1, + 0,0,0,1908,1868,1,0,0,0,1908,1875,1,0,0,0,1908,1876,1,0,0,0,1908,1877,1, + 0,0,0,1908,1881,1,0,0,0,1908,1885,1,0,0,0,1908,1902,1,0,0,0,1908,1903,1, + 0,0,0,1908,1904,1,0,0,0,1909,1917,1,0,0,0,1910,1911,10,4,0,0,1911,1912, + 5,320,0,0,1912,1913,3,268,134,0,1913,1914,5,321,0,0,1914,1916,1,0,0,0,1915, + 1910,1,0,0,0,1916,1919,1,0,0,0,1917,1915,1,0,0,0,1917,1918,1,0,0,0,1918, + 271,1,0,0,0,1919,1917,1,0,0,0,1920,1921,3,316,158,0,1921,273,1,0,0,0,1922, + 1923,3,316,158,0,1923,275,1,0,0,0,1924,1925,3,304,152,0,1925,277,1,0,0, + 0,1926,1929,3,304,152,0,1927,1929,3,274,137,0,1928,1926,1,0,0,0,1928,1927, + 1,0,0,0,1929,279,1,0,0,0,1930,1933,5,38,0,0,1931,1934,3,282,141,0,1932, + 1934,3,286,143,0,1933,1931,1,0,0,0,1933,1932,1,0,0,0,1933,1934,1,0,0,0, + 1934,281,1,0,0,0,1935,1937,3,284,142,0,1936,1938,3,288,144,0,1937,1936, + 1,0,0,0,1937,1938,1,0,0,0,1938,283,1,0,0,0,1939,1940,3,290,145,0,1940,1941, + 3,304,152,0,1941,1943,1,0,0,0,1942,1939,1,0,0,0,1943,1944,1,0,0,0,1944, + 1942,1,0,0,0,1944,1945,1,0,0,0,1945,285,1,0,0,0,1946,1949,3,288,144,0,1947, + 1950,3,284,142,0,1948,1950,3,288,144,0,1949,1947,1,0,0,0,1949,1948,1,0, + 0,0,1949,1950,1,0,0,0,1950,287,1,0,0,0,1951,1952,3,290,145,0,1952,1953, + 3,304,152,0,1953,1954,5,109,0,0,1954,1955,3,304,152,0,1955,289,1,0,0,0, + 1956,1958,7,33,0,0,1957,1956,1,0,0,0,1957,1958,1,0,0,0,1958,1959,1,0,0, + 0,1959,1962,7,34,0,0,1960,1962,5,343,0,0,1961,1957,1,0,0,0,1961,1960,1, + 0,0,0,1962,291,1,0,0,0,1963,1965,5,7,0,0,1964,1963,1,0,0,0,1964,1965,1, + 0,0,0,1965,1966,1,0,0,0,1966,1968,3,306,153,0,1967,1969,3,300,150,0,1968, + 1967,1,0,0,0,1968,1969,1,0,0,0,1969,293,1,0,0,0,1970,1972,5,7,0,0,1971, + 1970,1,0,0,0,1971,1972,1,0,0,0,1972,1973,1,0,0,0,1973,1975,3,306,153,0, + 1974,1976,3,300,150,0,1975,1974,1,0,0,0,1975,1976,1,0,0,0,1976,295,1,0, + 0,0,1977,1978,3,304,152,0,1978,1979,3,298,149,0,1979,297,1,0,0,0,1980,1981, + 5,131,0,0,1981,1983,3,304,152,0,1982,1980,1,0,0,0,1983,1984,1,0,0,0,1984, + 1982,1,0,0,0,1984,1985,1,0,0,0,1985,1988,1,0,0,0,1986,1988,1,0,0,0,1987, + 1982,1,0,0,0,1987,1986,1,0,0,0,1988,299,1,0,0,0,1989,1990,5,322,0,0,1990, + 1991,3,302,151,0,1991,1992,5,323,0,0,1992,301,1,0,0,0,1993,1998,3,304,152, + 0,1994,1995,5,326,0,0,1995,1997,3,304,152,0,1996,1994,1,0,0,0,1997,2000, + 1,0,0,0,1998,1996,1,0,0,0,1998,1999,1,0,0,0,1999,303,1,0,0,0,2000,1998, + 1,0,0,0,2001,2004,3,306,153,0,2002,2004,3,356,178,0,2003,2001,1,0,0,0,2003, + 2002,1,0,0,0,2004,305,1,0,0,0,2005,2010,3,308,154,0,2006,2010,3,310,155, + 0,2007,2010,3,354,177,0,2008,2010,3,358,179,0,2009,2005,1,0,0,0,2009,2006, + 1,0,0,0,2009,2007,1,0,0,0,2009,2008,1,0,0,0,2010,307,1,0,0,0,2011,2012, + 7,35,0,0,2012,309,1,0,0,0,2013,2014,5,343,0,0,2014,311,1,0,0,0,2015,2016, + 5,40,0,0,2016,2017,3,260,130,0,2017,2018,5,41,0,0,2018,2019,3,260,130,0, + 2019,313,1,0,0,0,2020,2025,3,316,158,0,2021,2022,5,326,0,0,2022,2024,3, + 316,158,0,2023,2021,1,0,0,0,2024,2027,1,0,0,0,2025,2023,1,0,0,0,2025,2026, + 1,0,0,0,2026,315,1,0,0,0,2027,2025,1,0,0,0,2028,2032,5,347,0,0,2029,2031, + 5,342,0,0,2030,2029,1,0,0,0,2031,2034,1,0,0,0,2032,2033,1,0,0,0,2032,2030, + 1,0,0,0,2033,317,1,0,0,0,2034,2032,1,0,0,0,2035,2036,5,70,0,0,2036,2037, + 3,324,162,0,2037,319,1,0,0,0,2038,2039,5,128,0,0,2039,2040,5,25,0,0,2040, + 2041,5,27,0,0,2041,321,1,0,0,0,2042,2043,5,128,0,0,2043,2044,5,27,0,0,2044, + 323,1,0,0,0,2045,2046,5,322,0,0,2046,2051,3,326,163,0,2047,2048,5,326,0, + 0,2048,2050,3,326,163,0,2049,2047,1,0,0,0,2050,2053,1,0,0,0,2051,2049,1, + 0,0,0,2051,2052,1,0,0,0,2052,2054,1,0,0,0,2053,2051,1,0,0,0,2054,2055,5, + 323,0,0,2055,325,1,0,0,0,2056,2061,3,328,164,0,2057,2059,5,311,0,0,2058, + 2057,1,0,0,0,2058,2059,1,0,0,0,2059,2060,1,0,0,0,2060,2062,3,330,165,0, + 2061,2058,1,0,0,0,2061,2062,1,0,0,0,2062,327,1,0,0,0,2063,2067,3,304,152, + 0,2064,2067,3,274,137,0,2065,2067,5,343,0,0,2066,2063,1,0,0,0,2066,2064, + 1,0,0,0,2066,2065,1,0,0,0,2067,329,1,0,0,0,2068,2073,5,344,0,0,2069,2073, + 5,345,0,0,2070,2073,3,350,175,0,2071,2073,5,343,0,0,2072,2068,1,0,0,0,2072, + 2069,1,0,0,0,2072,2070,1,0,0,0,2072,2071,1,0,0,0,2073,331,1,0,0,0,2074, + 2081,5,23,0,0,2075,2076,5,317,0,0,2076,2081,5,317,0,0,2077,2081,5,22,0, + 0,2078,2079,5,316,0,0,2079,2081,5,316,0,0,2080,2074,1,0,0,0,2080,2075,1, + 0,0,0,2080,2077,1,0,0,0,2080,2078,1,0,0,0,2081,333,1,0,0,0,2082,2097,5, + 311,0,0,2083,2097,5,312,0,0,2084,2097,5,313,0,0,2085,2086,5,313,0,0,2086, + 2097,5,311,0,0,2087,2088,5,312,0,0,2088,2097,5,311,0,0,2089,2090,5,313, + 0,0,2090,2097,5,312,0,0,2091,2092,5,314,0,0,2092,2097,5,311,0,0,2093,2094, + 5,313,0,0,2094,2095,5,311,0,0,2095,2097,5,312,0,0,2096,2082,1,0,0,0,2096, + 2083,1,0,0,0,2096,2084,1,0,0,0,2096,2085,1,0,0,0,2096,2087,1,0,0,0,2096, + 2089,1,0,0,0,2096,2091,1,0,0,0,2096,2093,1,0,0,0,2097,335,1,0,0,0,2098, + 2099,5,313,0,0,2099,2106,5,313,0,0,2100,2101,5,312,0,0,2101,2106,5,312, + 0,0,2102,2106,5,317,0,0,2103,2106,5,318,0,0,2104,2106,5,316,0,0,2105,2098, + 1,0,0,0,2105,2100,1,0,0,0,2105,2102,1,0,0,0,2105,2103,1,0,0,0,2105,2104, + 1,0,0,0,2106,337,1,0,0,0,2107,2108,7,36,0,0,2108,339,1,0,0,0,2109,2110, + 7,37,0,0,2110,341,1,0,0,0,2111,2112,3,316,158,0,2112,343,1,0,0,0,2113,2126, + 3,346,173,0,2114,2126,3,348,174,0,2115,2126,3,280,140,0,2116,2117,5,335, + 0,0,2117,2126,3,348,174,0,2118,2126,3,350,175,0,2119,2126,5,345,0,0,2120, + 2126,5,346,0,0,2121,2123,5,25,0,0,2122,2121,1,0,0,0,2122,2123,1,0,0,0,2123, + 2124,1,0,0,0,2124,2126,5,309,0,0,2125,2113,1,0,0,0,2125,2114,1,0,0,0,2125, + 2115,1,0,0,0,2125,2116,1,0,0,0,2125,2118,1,0,0,0,2125,2119,1,0,0,0,2125, + 2120,1,0,0,0,2125,2122,1,0,0,0,2126,345,1,0,0,0,2127,2128,5,343,0,0,2128, + 347,1,0,0,0,2129,2130,5,344,0,0,2130,349,1,0,0,0,2131,2132,7,29,0,0,2132, + 351,1,0,0,0,2133,2134,7,38,0,0,2134,353,1,0,0,0,2135,2136,7,39,0,0,2136, + 355,1,0,0,0,2137,2138,7,40,0,0,2138,357,1,0,0,0,2139,2140,7,41,0,0,2140, + 359,1,0,0,0,244,368,371,373,388,406,410,419,424,431,438,442,451,463,466, + 473,481,486,489,496,504,508,520,528,532,553,557,561,565,574,579,583,587, + 591,594,598,603,609,614,619,622,626,634,642,646,650,654,658,662,666,670, + 674,676,686,694,718,725,740,743,751,763,787,800,805,809,817,821,829,839, + 843,849,853,857,860,869,873,880,883,893,901,909,913,928,947,958,962,969, + 974,980,984,991,995,999,1003,1011,1015,1020,1025,1031,1034,1038,1049,1058, + 1071,1086,1089,1093,1096,1098,1103,1107,1110,1114,1123,1132,1142,1147,1159, + 1162,1165,1168,1174,1178,1186,1189,1194,1197,1199,1213,1224,1229,1237,1240, + 1243,1248,1250,1252,1257,1260,1264,1267,1270,1282,1289,1300,1329,1351,1369, + 1374,1386,1399,1411,1423,1428,1455,1463,1467,1470,1473,1480,1483,1486,1489, + 1492,1495,1500,1503,1512,1517,1521,1526,1535,1554,1562,1570,1574,1578,1588, + 1614,1622,1634,1660,1662,1670,1672,1676,1684,1693,1699,1712,1717,1729,1734, + 1737,1743,1748,1753,1758,1761,1773,1778,1781,1785,1791,1812,1814,1822,1826, + 1835,1839,1855,1864,1888,1895,1898,1908,1917,1928,1933,1937,1944,1949,1957, + 1961,1964,1968,1971,1975,1984,1987,1998,2003,2009,2025,2032,2051,2058,2061, + 2066,2072,2080,2096,2105,2122,2125]; private static __ATN: ATN; public static get _ATN(): ATN { @@ -11778,8 +13004,8 @@ export class ColumnNameContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public plusUid(): PlusUidContext { - return this.getTypedRuleContext(PlusUidContext, 0) as PlusUidContext; + public uid(): UidContext { + return this.getTypedRuleContext(UidContext, 0) as UidContext; } public expression(): ExpressionContext { return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; @@ -14246,14 +15472,8 @@ export class QueryStatementContext extends ParserRuleContext { public valuesCaluse(): ValuesCaluseContext { return this.getTypedRuleContext(ValuesCaluseContext, 0) as ValuesCaluseContext; } - public WITH(): TerminalNode { - return this.getToken(FlinkSqlParser.WITH, 0); - } - public withItem_list(): WithItemContext[] { - return this.getTypedRuleContexts(WithItemContext) as WithItemContext[]; - } - public withItem(i: number): WithItemContext { - return this.getTypedRuleContext(WithItemContext, i) as WithItemContext; + public withClause(): WithClauseContext { + return this.getTypedRuleContext(WithClauseContext, 0) as WithClauseContext; } public queryStatement_list(): QueryStatementContext[] { return this.getTypedRuleContexts(QueryStatementContext) as QueryStatementContext[]; @@ -14261,12 +15481,6 @@ export class QueryStatementContext extends ParserRuleContext { public queryStatement(i: number): QueryStatementContext { return this.getTypedRuleContext(QueryStatementContext, i) as QueryStatementContext; } - public COMMA_list(): TerminalNode[] { - return this.getTokens(FlinkSqlParser.COMMA); - } - public COMMA(i: number): TerminalNode { - return this.getToken(FlinkSqlParser.COMMA, i); - } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); } @@ -14365,6 +15579,50 @@ export class ValuesCaluseContext extends ParserRuleContext { } +export class WithClauseContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public WITH(): TerminalNode { + return this.getToken(FlinkSqlParser.WITH, 0); + } + public withItem_list(): WithItemContext[] { + return this.getTypedRuleContexts(WithItemContext) as WithItemContext[]; + } + public withItem(i: number): WithItemContext { + return this.getTypedRuleContext(WithItemContext, i) as WithItemContext; + } + public COMMA_list(): TerminalNode[] { + return this.getTokens(FlinkSqlParser.COMMA); + } + public COMMA(i: number): TerminalNode { + return this.getToken(FlinkSqlParser.COMMA, i); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_withClause; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterWithClause) { + listener.enterWithClause(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitWithClause) { + listener.exitWithClause(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitWithClause) { + return visitor.visitWithClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class WithItemContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); @@ -14482,6 +15740,9 @@ export class SelectStatementContext extends ParserRuleContext { public windowClause(): WindowClauseContext { return this.getTypedRuleContext(WindowClauseContext, 0) as WindowClauseContext; } + public matchRecognizeClause(): MatchRecognizeClauseContext { + return this.getTypedRuleContext(MatchRecognizeClauseContext, 0) as MatchRecognizeClauseContext; + } public get ruleIndex(): number { return FlinkSqlParser.RULE_selectStatement; } @@ -14561,6 +15822,9 @@ export class ProjectItemDefinitionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } + public overWindowItem(): OverWindowItemContext { + return this.getTypedRuleContext(OverWindowItemContext, 0) as OverWindowItemContext; + } public expression_list(): ExpressionContext[] { return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; } @@ -14594,6 +15858,53 @@ export class ProjectItemDefinitionContext extends ParserRuleContext { } +export class OverWindowItemContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public primaryExpression(): PrimaryExpressionContext { + return this.getTypedRuleContext(PrimaryExpressionContext, 0) as PrimaryExpressionContext; + } + public OVER(): TerminalNode { + return this.getToken(FlinkSqlParser.OVER, 0); + } + public windowSpec(): WindowSpecContext { + return this.getTypedRuleContext(WindowSpecContext, 0) as WindowSpecContext; + } + public AS(): TerminalNode { + return this.getToken(FlinkSqlParser.AS, 0); + } + public strictIdentifier(): StrictIdentifierContext { + return this.getTypedRuleContext(StrictIdentifierContext, 0) as StrictIdentifierContext; + } + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { + return this.getTypedRuleContext(ErrorCapturingIdentifierContext, 0) as ErrorCapturingIdentifierContext; + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_overWindowItem; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterOverWindowItem) { + listener.enterOverWindowItem(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitOverWindowItem) { + listener.exitOverWindowItem(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitOverWindowItem) { + return visitor.visitOverWindowItem(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class FromClauseContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); @@ -14646,6 +15957,12 @@ export class TableExpressionContext extends ParserRuleContext { public COMMA(i: number): TerminalNode { return this.getToken(FlinkSqlParser.COMMA, i); } + public inlineDataValueClause(): InlineDataValueClauseContext { + return this.getTypedRuleContext(InlineDataValueClauseContext, 0) as InlineDataValueClauseContext; + } + public windoTVFClause(): WindoTVFClauseContext { + return this.getTypedRuleContext(WindoTVFClauseContext, 0) as WindoTVFClauseContext; + } public tableExpression_list(): TableExpressionContext[] { return this.getTypedRuleContexts(TableExpressionContext) as TableExpressionContext[]; } @@ -14926,6 +16243,317 @@ export class DateTimeExpressionContext extends ParserRuleContext { } +export class InlineDataValueClauseContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public LR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.LR_BRACKET, 0); + } + public valuesDefinition(): ValuesDefinitionContext { + return this.getTypedRuleContext(ValuesDefinitionContext, 0) as ValuesDefinitionContext; + } + public RR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.RR_BRACKET, 0); + } + public tableAlias(): TableAliasContext { + return this.getTypedRuleContext(TableAliasContext, 0) as TableAliasContext; + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_inlineDataValueClause; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterInlineDataValueClause) { + listener.enterInlineDataValueClause(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitInlineDataValueClause) { + listener.exitInlineDataValueClause(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitInlineDataValueClause) { + return visitor.visitInlineDataValueClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WindoTVFClauseContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public TABLE(): TerminalNode { + return this.getToken(FlinkSqlParser.TABLE, 0); + } + public LR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.LR_BRACKET, 0); + } + public windowTVFExression(): WindowTVFExressionContext { + return this.getTypedRuleContext(WindowTVFExressionContext, 0) as WindowTVFExressionContext; + } + public RR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.RR_BRACKET, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_windoTVFClause; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterWindoTVFClause) { + listener.enterWindoTVFClause(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitWindoTVFClause) { + listener.exitWindoTVFClause(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitWindoTVFClause) { + return visitor.visitWindoTVFClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WindowTVFExressionContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public windoTVFName(): WindoTVFNameContext { + return this.getTypedRuleContext(WindoTVFNameContext, 0) as WindoTVFNameContext; + } + public LR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.LR_BRACKET, 0); + } + public windowTVFParam_list(): WindowTVFParamContext[] { + return this.getTypedRuleContexts(WindowTVFParamContext) as WindowTVFParamContext[]; + } + public windowTVFParam(i: number): WindowTVFParamContext { + return this.getTypedRuleContext(WindowTVFParamContext, i) as WindowTVFParamContext; + } + public RR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.RR_BRACKET, 0); + } + public COMMA_list(): TerminalNode[] { + return this.getTokens(FlinkSqlParser.COMMA); + } + public COMMA(i: number): TerminalNode { + return this.getToken(FlinkSqlParser.COMMA, i); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_windowTVFExression; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterWindowTVFExression) { + listener.enterWindowTVFExression(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitWindowTVFExression) { + listener.exitWindowTVFExression(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitWindowTVFExression) { + return visitor.visitWindowTVFExression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WindoTVFNameContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public TUMBLE(): TerminalNode { + return this.getToken(FlinkSqlParser.TUMBLE, 0); + } + public HOP(): TerminalNode { + return this.getToken(FlinkSqlParser.HOP, 0); + } + public CUMULATE(): TerminalNode { + return this.getToken(FlinkSqlParser.CUMULATE, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_windoTVFName; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterWindoTVFName) { + listener.enterWindoTVFName(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitWindoTVFName) { + listener.exitWindoTVFName(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitWindoTVFName) { + return visitor.visitWindoTVFName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WindowTVFParamContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public TABLE(): TerminalNode { + return this.getToken(FlinkSqlParser.TABLE, 0); + } + public timeAttrColumn(): TimeAttrColumnContext { + return this.getTypedRuleContext(TimeAttrColumnContext, 0) as TimeAttrColumnContext; + } + public columnDescriptor(): ColumnDescriptorContext { + return this.getTypedRuleContext(ColumnDescriptorContext, 0) as ColumnDescriptorContext; + } + public timeIntervalExpression(): TimeIntervalExpressionContext { + return this.getTypedRuleContext(TimeIntervalExpressionContext, 0) as TimeIntervalExpressionContext; + } + public DATA(): TerminalNode { + return this.getToken(FlinkSqlParser.DATA, 0); + } + public DOUBLE_ARROW(): TerminalNode { + return this.getToken(FlinkSqlParser.DOUBLE_ARROW, 0); + } + public TIMECOL(): TerminalNode { + return this.getToken(FlinkSqlParser.TIMECOL, 0); + } + public timeIntervalParamName(): TimeIntervalParamNameContext { + return this.getTypedRuleContext(TimeIntervalParamNameContext, 0) as TimeIntervalParamNameContext; + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_windowTVFParam; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterWindowTVFParam) { + listener.enterWindowTVFParam(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitWindowTVFParam) { + listener.exitWindowTVFParam(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitWindowTVFParam) { + return visitor.visitWindowTVFParam(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimeIntervalParamNameContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public DATA(): TerminalNode { + return this.getToken(FlinkSqlParser.DATA, 0); + } + public TIMECOL(): TerminalNode { + return this.getToken(FlinkSqlParser.TIMECOL, 0); + } + public SIZE(): TerminalNode { + return this.getToken(FlinkSqlParser.SIZE, 0); + } + public OFFSET(): TerminalNode { + return this.getToken(FlinkSqlParser.OFFSET, 0); + } + public STEP(): TerminalNode { + return this.getToken(FlinkSqlParser.STEP, 0); + } + public SLIDE(): TerminalNode { + return this.getToken(FlinkSqlParser.SLIDE, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_timeIntervalParamName; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterTimeIntervalParamName) { + listener.enterTimeIntervalParamName(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitTimeIntervalParamName) { + listener.exitTimeIntervalParamName(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitTimeIntervalParamName) { + return visitor.visitTimeIntervalParamName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ColumnDescriptorContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public DESCRIPTOR(): TerminalNode { + return this.getToken(FlinkSqlParser.DESCRIPTOR, 0); + } + public LR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.LR_BRACKET, 0); + } + public uid(): UidContext { + return this.getTypedRuleContext(UidContext, 0) as UidContext; + } + public RR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.RR_BRACKET, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_columnDescriptor; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterColumnDescriptor) { + listener.enterColumnDescriptor(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitColumnDescriptor) { + listener.exitColumnDescriptor(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitColumnDescriptor) { + return visitor.visitColumnDescriptor(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class JoinConditionContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); @@ -15075,6 +16703,9 @@ export class GroupItemDefinitionContext extends ParserRuleContext { public expression(i: number): ExpressionContext { return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; } + public groupWindowFunction(): GroupWindowFunctionContext { + return this.getTypedRuleContext(GroupWindowFunctionContext, 0) as GroupWindowFunctionContext; + } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); } @@ -15087,17 +16718,11 @@ export class GroupItemDefinitionContext extends ParserRuleContext { public COMMA(i: number): TerminalNode { return this.getToken(FlinkSqlParser.COMMA, i); } - public CUBE(): TerminalNode { - return this.getToken(FlinkSqlParser.CUBE, 0); + public groupingSetsNotaionName(): GroupingSetsNotaionNameContext { + return this.getTypedRuleContext(GroupingSetsNotaionNameContext, 0) as GroupingSetsNotaionNameContext; } - public ROLLUP(): TerminalNode { - return this.getToken(FlinkSqlParser.ROLLUP, 0); - } - public GROUPING(): TerminalNode { - return this.getToken(FlinkSqlParser.GROUPING, 0); - } - public SETS(): TerminalNode { - return this.getToken(FlinkSqlParser.SETS, 0); + public groupingSets(): GroupingSetsContext { + return this.getTypedRuleContext(GroupingSetsContext, 0) as GroupingSetsContext; } public groupItemDefinition_list(): GroupItemDefinitionContext[] { return this.getTypedRuleContexts(GroupItemDefinitionContext) as GroupItemDefinitionContext[]; @@ -15129,6 +16754,193 @@ export class GroupItemDefinitionContext extends ParserRuleContext { } +export class GroupingSetsContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public GROUPING(): TerminalNode { + return this.getToken(FlinkSqlParser.GROUPING, 0); + } + public SETS(): TerminalNode { + return this.getToken(FlinkSqlParser.SETS, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_groupingSets; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterGroupingSets) { + listener.enterGroupingSets(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitGroupingSets) { + listener.exitGroupingSets(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitGroupingSets) { + return visitor.visitGroupingSets(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GroupingSetsNotaionNameContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public CUBE(): TerminalNode { + return this.getToken(FlinkSqlParser.CUBE, 0); + } + public ROLLUP(): TerminalNode { + return this.getToken(FlinkSqlParser.ROLLUP, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_groupingSetsNotaionName; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterGroupingSetsNotaionName) { + listener.enterGroupingSetsNotaionName(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitGroupingSetsNotaionName) { + listener.exitGroupingSetsNotaionName(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitGroupingSetsNotaionName) { + return visitor.visitGroupingSetsNotaionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GroupWindowFunctionContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public groupWindowFunctionName(): GroupWindowFunctionNameContext { + return this.getTypedRuleContext(GroupWindowFunctionNameContext, 0) as GroupWindowFunctionNameContext; + } + public LR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.LR_BRACKET, 0); + } + public timeAttrColumn(): TimeAttrColumnContext { + return this.getTypedRuleContext(TimeAttrColumnContext, 0) as TimeAttrColumnContext; + } + public COMMA(): TerminalNode { + return this.getToken(FlinkSqlParser.COMMA, 0); + } + public timeIntervalExpression(): TimeIntervalExpressionContext { + return this.getTypedRuleContext(TimeIntervalExpressionContext, 0) as TimeIntervalExpressionContext; + } + public RR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.RR_BRACKET, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_groupWindowFunction; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterGroupWindowFunction) { + listener.enterGroupWindowFunction(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitGroupWindowFunction) { + listener.exitGroupWindowFunction(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitGroupWindowFunction) { + return visitor.visitGroupWindowFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GroupWindowFunctionNameContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public TUMBLE(): TerminalNode { + return this.getToken(FlinkSqlParser.TUMBLE, 0); + } + public HOP(): TerminalNode { + return this.getToken(FlinkSqlParser.HOP, 0); + } + public SESSION(): TerminalNode { + return this.getToken(FlinkSqlParser.SESSION, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_groupWindowFunctionName; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterGroupWindowFunctionName) { + listener.enterGroupWindowFunctionName(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitGroupWindowFunctionName) { + listener.exitGroupWindowFunctionName(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitGroupWindowFunctionName) { + return visitor.visitGroupWindowFunctionName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimeAttrColumnContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public uid(): UidContext { + return this.getTypedRuleContext(UidContext, 0) as UidContext; + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_timeAttrColumn; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterTimeAttrColumn) { + listener.enterTimeAttrColumn(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitTimeAttrColumn) { + listener.exitTimeAttrColumn(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitTimeAttrColumn) { + return visitor.visitTimeAttrColumn(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class HavingClauseContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); @@ -15164,130 +16976,6 @@ export class HavingClauseContext extends ParserRuleContext { } -export class OrderByCaluseContext extends ParserRuleContext { - constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { - super(parent, invokingState); - this.parser = parser; - } - public ORDER(): TerminalNode { - return this.getToken(FlinkSqlParser.ORDER, 0); - } - public BY(): TerminalNode { - return this.getToken(FlinkSqlParser.BY, 0); - } - public orderItemDefition_list(): OrderItemDefitionContext[] { - return this.getTypedRuleContexts(OrderItemDefitionContext) as OrderItemDefitionContext[]; - } - public orderItemDefition(i: number): OrderItemDefitionContext { - return this.getTypedRuleContext(OrderItemDefitionContext, i) as OrderItemDefitionContext; - } - public COMMA_list(): TerminalNode[] { - return this.getTokens(FlinkSqlParser.COMMA); - } - public COMMA(i: number): TerminalNode { - return this.getToken(FlinkSqlParser.COMMA, i); - } - public get ruleIndex(): number { - return FlinkSqlParser.RULE_orderByCaluse; - } - public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterOrderByCaluse) { - listener.enterOrderByCaluse(this); - } - } - public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitOrderByCaluse) { - listener.exitOrderByCaluse(this); - } - } - // @Override - public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitOrderByCaluse) { - return visitor.visitOrderByCaluse(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class OrderItemDefitionContext extends ParserRuleContext { - constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { - super(parent, invokingState); - this.parser = parser; - } - public expression(): ExpressionContext { - return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; - } - public ASC(): TerminalNode { - return this.getToken(FlinkSqlParser.ASC, 0); - } - public DESC(): TerminalNode { - return this.getToken(FlinkSqlParser.DESC, 0); - } - public get ruleIndex(): number { - return FlinkSqlParser.RULE_orderItemDefition; - } - public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterOrderItemDefition) { - listener.enterOrderItemDefition(this); - } - } - public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitOrderItemDefition) { - listener.exitOrderItemDefition(this); - } - } - // @Override - public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitOrderItemDefition) { - return visitor.visitOrderItemDefition(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class LimitClauseContext extends ParserRuleContext { - public _limit!: ExpressionContext; - constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { - super(parent, invokingState); - this.parser = parser; - } - public LIMIT(): TerminalNode { - return this.getToken(FlinkSqlParser.LIMIT, 0); - } - public ALL(): TerminalNode { - return this.getToken(FlinkSqlParser.ALL, 0); - } - public expression(): ExpressionContext { - return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; - } - public get ruleIndex(): number { - return FlinkSqlParser.RULE_limitClause; - } - public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterLimitClause) { - listener.enterLimitClause(this); - } - } - public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitLimitClause) { - listener.exitLimitClause(this); - } - } - // @Override - public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitLimitClause) { - return visitor.visitLimitClause(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class WindowClauseContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); @@ -15383,29 +17071,11 @@ export class WindowSpecContext extends ParserRuleContext { public RR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.RR_BRACKET, 0); } - public ORDER(): TerminalNode { - return this.getToken(FlinkSqlParser.ORDER, 0); + public partitionByClause(): PartitionByClauseContext { + return this.getTypedRuleContext(PartitionByClauseContext, 0) as PartitionByClauseContext; } - public BY_list(): TerminalNode[] { - return this.getTokens(FlinkSqlParser.BY); - } - public BY(i: number): TerminalNode { - return this.getToken(FlinkSqlParser.BY, i); - } - public sortItem_list(): SortItemContext[] { - return this.getTypedRuleContexts(SortItemContext) as SortItemContext[]; - } - public sortItem(i: number): SortItemContext { - return this.getTypedRuleContext(SortItemContext, i) as SortItemContext; - } - public PARTITION(): TerminalNode { - return this.getToken(FlinkSqlParser.PARTITION, 0); - } - public expression_list(): ExpressionContext[] { - return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; - } - public expression(i: number): ExpressionContext { - return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + public orderByCaluse(): OrderByCaluseContext { + return this.getTypedRuleContext(OrderByCaluseContext, 0) as OrderByCaluseContext; } public windowFrame(): WindowFrameContext { return this.getTypedRuleContext(WindowFrameContext, 0) as WindowFrameContext; @@ -15413,12 +17083,6 @@ export class WindowSpecContext extends ParserRuleContext { public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { return this.getTypedRuleContext(ErrorCapturingIdentifierContext, 0) as ErrorCapturingIdentifierContext; } - public COMMA_list(): TerminalNode[] { - return this.getTokens(FlinkSqlParser.COMMA); - } - public COMMA(i: number): TerminalNode { - return this.getToken(FlinkSqlParser.COMMA, i); - } public get ruleIndex(): number { return FlinkSqlParser.RULE_windowSpec; } @@ -15443,7 +17107,119 @@ export class WindowSpecContext extends ParserRuleContext { } -export class SortItemContext extends ParserRuleContext { +export class MatchRecognizeClauseContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public MATCH_RECOGNIZE(): TerminalNode { + return this.getToken(FlinkSqlParser.MATCH_RECOGNIZE, 0); + } + public LR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.LR_BRACKET, 0); + } + public patternVariablesDefination(): PatternVariablesDefinationContext { + return this.getTypedRuleContext(PatternVariablesDefinationContext, 0) as PatternVariablesDefinationContext; + } + public RR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.RR_BRACKET, 0); + } + public partitionByClause(): PartitionByClauseContext { + return this.getTypedRuleContext(PartitionByClauseContext, 0) as PartitionByClauseContext; + } + public orderByCaluse(): OrderByCaluseContext { + return this.getTypedRuleContext(OrderByCaluseContext, 0) as OrderByCaluseContext; + } + public measuresClause(): MeasuresClauseContext { + return this.getTypedRuleContext(MeasuresClauseContext, 0) as MeasuresClauseContext; + } + public outputMode(): OutputModeContext { + return this.getTypedRuleContext(OutputModeContext, 0) as OutputModeContext; + } + public afterMatchStrategy(): AfterMatchStrategyContext { + return this.getTypedRuleContext(AfterMatchStrategyContext, 0) as AfterMatchStrategyContext; + } + public patternDefination(): PatternDefinationContext { + return this.getTypedRuleContext(PatternDefinationContext, 0) as PatternDefinationContext; + } + public strictIdentifier(): StrictIdentifierContext { + return this.getTypedRuleContext(StrictIdentifierContext, 0) as StrictIdentifierContext; + } + public AS(): TerminalNode { + return this.getToken(FlinkSqlParser.AS, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_matchRecognizeClause; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterMatchRecognizeClause) { + listener.enterMatchRecognizeClause(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitMatchRecognizeClause) { + listener.exitMatchRecognizeClause(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitMatchRecognizeClause) { + return visitor.visitMatchRecognizeClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class OrderByCaluseContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public ORDER(): TerminalNode { + return this.getToken(FlinkSqlParser.ORDER, 0); + } + public BY(): TerminalNode { + return this.getToken(FlinkSqlParser.BY, 0); + } + public orderItemDefition_list(): OrderItemDefitionContext[] { + return this.getTypedRuleContexts(OrderItemDefitionContext) as OrderItemDefitionContext[]; + } + public orderItemDefition(i: number): OrderItemDefitionContext { + return this.getTypedRuleContext(OrderItemDefitionContext, i) as OrderItemDefitionContext; + } + public COMMA_list(): TerminalNode[] { + return this.getTokens(FlinkSqlParser.COMMA); + } + public COMMA(i: number): TerminalNode { + return this.getToken(FlinkSqlParser.COMMA, i); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_orderByCaluse; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterOrderByCaluse) { + listener.enterOrderByCaluse(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitOrderByCaluse) { + listener.exitOrderByCaluse(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitOrderByCaluse) { + return visitor.visitOrderByCaluse(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class OrderItemDefitionContext extends ParserRuleContext { public _ordering!: Token; public _nullOrder!: Token; constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { @@ -15469,22 +17245,437 @@ export class SortItemContext extends ParserRuleContext { return this.getToken(FlinkSqlParser.FIRST, 0); } public get ruleIndex(): number { - return FlinkSqlParser.RULE_sortItem; + return FlinkSqlParser.RULE_orderItemDefition; } public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterSortItem) { - listener.enterSortItem(this); + if(listener.enterOrderItemDefition) { + listener.enterOrderItemDefition(this); } } public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitSortItem) { - listener.exitSortItem(this); + if(listener.exitOrderItemDefition) { + listener.exitOrderItemDefition(this); } } // @Override public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitSortItem) { - return visitor.visitSortItem(this); + if (visitor.visitOrderItemDefition) { + return visitor.visitOrderItemDefition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LimitClauseContext extends ParserRuleContext { + public _limit!: ExpressionContext; + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public LIMIT(): TerminalNode { + return this.getToken(FlinkSqlParser.LIMIT, 0); + } + public ALL(): TerminalNode { + return this.getToken(FlinkSqlParser.ALL, 0); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_limitClause; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterLimitClause) { + listener.enterLimitClause(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitLimitClause) { + listener.exitLimitClause(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitLimitClause) { + return visitor.visitLimitClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PartitionByClauseContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public PARTITION(): TerminalNode { + return this.getToken(FlinkSqlParser.PARTITION, 0); + } + public BY(): TerminalNode { + return this.getToken(FlinkSqlParser.BY, 0); + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public COMMA_list(): TerminalNode[] { + return this.getTokens(FlinkSqlParser.COMMA); + } + public COMMA(i: number): TerminalNode { + return this.getToken(FlinkSqlParser.COMMA, i); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_partitionByClause; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterPartitionByClause) { + listener.enterPartitionByClause(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitPartitionByClause) { + listener.exitPartitionByClause(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitPartitionByClause) { + return visitor.visitPartitionByClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QuantifiersContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public ASTERISK_SIGN(): TerminalNode { + return this.getToken(FlinkSqlParser.ASTERISK_SIGN, 0); + } + public ADD_SIGN(): TerminalNode { + return this.getToken(FlinkSqlParser.ADD_SIGN, 0); + } + public QUESTION_MARK_SIGN(): TerminalNode { + return this.getToken(FlinkSqlParser.QUESTION_MARK_SIGN, 0); + } + public LB_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.LB_BRACKET, 0); + } + public DIG_LITERAL_list(): TerminalNode[] { + return this.getTokens(FlinkSqlParser.DIG_LITERAL); + } + public DIG_LITERAL(i: number): TerminalNode { + return this.getToken(FlinkSqlParser.DIG_LITERAL, i); + } + public COMMA(): TerminalNode { + return this.getToken(FlinkSqlParser.COMMA, 0); + } + public RB_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.RB_BRACKET, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_quantifiers; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterQuantifiers) { + listener.enterQuantifiers(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitQuantifiers) { + listener.exitQuantifiers(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitQuantifiers) { + return visitor.visitQuantifiers(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MeasuresClauseContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public MEASURES(): TerminalNode { + return this.getToken(FlinkSqlParser.MEASURES, 0); + } + public projectItemDefinition_list(): ProjectItemDefinitionContext[] { + return this.getTypedRuleContexts(ProjectItemDefinitionContext) as ProjectItemDefinitionContext[]; + } + public projectItemDefinition(i: number): ProjectItemDefinitionContext { + return this.getTypedRuleContext(ProjectItemDefinitionContext, i) as ProjectItemDefinitionContext; + } + public COMMA_list(): TerminalNode[] { + return this.getTokens(FlinkSqlParser.COMMA); + } + public COMMA(i: number): TerminalNode { + return this.getToken(FlinkSqlParser.COMMA, i); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_measuresClause; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterMeasuresClause) { + listener.enterMeasuresClause(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitMeasuresClause) { + listener.exitMeasuresClause(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitMeasuresClause) { + return visitor.visitMeasuresClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternDefinationContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public PATTERN(): TerminalNode { + return this.getToken(FlinkSqlParser.PATTERN, 0); + } + public LR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.LR_BRACKET, 0); + } + public RR_BRACKET(): TerminalNode { + return this.getToken(FlinkSqlParser.RR_BRACKET, 0); + } + public patternVariable_list(): PatternVariableContext[] { + return this.getTypedRuleContexts(PatternVariableContext) as PatternVariableContext[]; + } + public patternVariable(i: number): PatternVariableContext { + return this.getTypedRuleContext(PatternVariableContext, i) as PatternVariableContext; + } + public withinClause(): WithinClauseContext { + return this.getTypedRuleContext(WithinClauseContext, 0) as WithinClauseContext; + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_patternDefination; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterPatternDefination) { + listener.enterPatternDefination(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitPatternDefination) { + listener.exitPatternDefination(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitPatternDefination) { + return visitor.visitPatternDefination(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternVariableContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public unquotedIdentifier(): UnquotedIdentifierContext { + return this.getTypedRuleContext(UnquotedIdentifierContext, 0) as UnquotedIdentifierContext; + } + public quantifiers(): QuantifiersContext { + return this.getTypedRuleContext(QuantifiersContext, 0) as QuantifiersContext; + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_patternVariable; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterPatternVariable) { + listener.enterPatternVariable(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitPatternVariable) { + listener.exitPatternVariable(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitPatternVariable) { + return visitor.visitPatternVariable(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class OutputModeContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public ALL(): TerminalNode { + return this.getToken(FlinkSqlParser.ALL, 0); + } + public ROWS(): TerminalNode { + return this.getToken(FlinkSqlParser.ROWS, 0); + } + public PER(): TerminalNode { + return this.getToken(FlinkSqlParser.PER, 0); + } + public MATCH(): TerminalNode { + return this.getToken(FlinkSqlParser.MATCH, 0); + } + public ONE(): TerminalNode { + return this.getToken(FlinkSqlParser.ONE, 0); + } + public ROW(): TerminalNode { + return this.getToken(FlinkSqlParser.ROW, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_outputMode; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterOutputMode) { + listener.enterOutputMode(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitOutputMode) { + listener.exitOutputMode(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitOutputMode) { + return visitor.visitOutputMode(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AfterMatchStrategyContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public AFTER(): TerminalNode { + return this.getToken(FlinkSqlParser.AFTER, 0); + } + public MATCH(): TerminalNode { + return this.getToken(FlinkSqlParser.MATCH, 0); + } + public KW_SKIP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SKIP, 0); + } + public PAST(): TerminalNode { + return this.getToken(FlinkSqlParser.PAST, 0); + } + public LAST(): TerminalNode { + return this.getToken(FlinkSqlParser.LAST, 0); + } + public ROW(): TerminalNode { + return this.getToken(FlinkSqlParser.ROW, 0); + } + public TO(): TerminalNode { + return this.getToken(FlinkSqlParser.TO, 0); + } + public NEXT(): TerminalNode { + return this.getToken(FlinkSqlParser.NEXT, 0); + } + public unquotedIdentifier(): UnquotedIdentifierContext { + return this.getTypedRuleContext(UnquotedIdentifierContext, 0) as UnquotedIdentifierContext; + } + public FIRST(): TerminalNode { + return this.getToken(FlinkSqlParser.FIRST, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_afterMatchStrategy; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterAfterMatchStrategy) { + listener.enterAfterMatchStrategy(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitAfterMatchStrategy) { + listener.exitAfterMatchStrategy(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitAfterMatchStrategy) { + return visitor.visitAfterMatchStrategy(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternVariablesDefinationContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public DEFINE(): TerminalNode { + return this.getToken(FlinkSqlParser.DEFINE, 0); + } + public projectItemDefinition_list(): ProjectItemDefinitionContext[] { + return this.getTypedRuleContexts(ProjectItemDefinitionContext) as ProjectItemDefinitionContext[]; + } + public projectItemDefinition(i: number): ProjectItemDefinitionContext { + return this.getTypedRuleContext(ProjectItemDefinitionContext, i) as ProjectItemDefinitionContext; + } + public COMMA_list(): TerminalNode[] { + return this.getTokens(FlinkSqlParser.COMMA); + } + public COMMA(i: number): TerminalNode { + return this.getToken(FlinkSqlParser.COMMA, i); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_patternVariablesDefination; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterPatternVariablesDefination) { + listener.enterPatternVariablesDefination(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitPatternVariablesDefination) { + listener.exitPatternVariablesDefination(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitPatternVariablesDefination) { + return visitor.visitPatternVariablesDefination(this); } else { return visitor.visitChildren(this); } @@ -15500,12 +17691,21 @@ export class WindowFrameContext extends ParserRuleContext { public RANGE(): TerminalNode { return this.getToken(FlinkSqlParser.RANGE, 0); } + public BETWEEN(): TerminalNode { + return this.getToken(FlinkSqlParser.BETWEEN, 0); + } + public timeIntervalExpression(): TimeIntervalExpressionContext { + return this.getTypedRuleContext(TimeIntervalExpressionContext, 0) as TimeIntervalExpressionContext; + } public frameBound(): FrameBoundContext { return this.getTypedRuleContext(FrameBoundContext, 0) as FrameBoundContext; } public ROWS(): TerminalNode { return this.getToken(FlinkSqlParser.ROWS, 0); } + public DIG_LITERAL(): TerminalNode { + return this.getToken(FlinkSqlParser.DIG_LITERAL, 0); + } public get ruleIndex(): number { return FlinkSqlParser.RULE_windowFrame; } @@ -15535,12 +17735,18 @@ export class FrameBoundContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public expression(): ExpressionContext { - return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; - } public PRECEDING(): TerminalNode { return this.getToken(FlinkSqlParser.PRECEDING, 0); } + public AND(): TerminalNode { + return this.getToken(FlinkSqlParser.AND, 0); + } + public CURRENT(): TerminalNode { + return this.getToken(FlinkSqlParser.CURRENT, 0); + } + public ROW(): TerminalNode { + return this.getToken(FlinkSqlParser.ROW, 0); + } public get ruleIndex(): number { return FlinkSqlParser.RULE_frameBound; } @@ -15565,6 +17771,79 @@ export class FrameBoundContext extends ParserRuleContext { } +export class WithinClauseContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public WITHIN(): TerminalNode { + return this.getToken(FlinkSqlParser.WITHIN, 0); + } + public timeIntervalExpression(): TimeIntervalExpressionContext { + return this.getTypedRuleContext(TimeIntervalExpressionContext, 0) as TimeIntervalExpressionContext; + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_withinClause; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterWithinClause) { + listener.enterWithinClause(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitWithinClause) { + listener.exitWithinClause(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitWithinClause) { + return visitor.visitWithinClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimeIntervalExpressionContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public INTERVAL(): TerminalNode { + return this.getToken(FlinkSqlParser.INTERVAL, 0); + } + public STRING_LITERAL(): TerminalNode { + return this.getToken(FlinkSqlParser.STRING_LITERAL, 0); + } + public ID_LITERAL(): TerminalNode { + return this.getToken(FlinkSqlParser.ID_LITERAL, 0); + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_timeIntervalExpression; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterTimeIntervalExpression) { + listener.enterTimeIntervalExpression(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitTimeIntervalExpression) { + listener.exitTimeIntervalExpression(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitTimeIntervalExpression) { + return visitor.visitTimeIntervalExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class ExpressionContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); @@ -17618,53 +19897,6 @@ export class UidContext extends ParserRuleContext { } -export class PlusUidContext extends ParserRuleContext { - constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { - super(parent, invokingState); - this.parser = parser; - } - public ID_LITERAL(): TerminalNode { - return this.getToken(FlinkSqlParser.ID_LITERAL, 0); - } - public PLUS_ID_LITERAL(): TerminalNode { - return this.getToken(FlinkSqlParser.PLUS_ID_LITERAL, 0); - } - public DOT_ID_list(): TerminalNode[] { - return this.getTokens(FlinkSqlParser.DOT_ID); - } - public DOT_ID(i: number): TerminalNode { - return this.getToken(FlinkSqlParser.DOT_ID, i); - } - public PLUS_DOT_ID_list(): TerminalNode[] { - return this.getTokens(FlinkSqlParser.PLUS_DOT_ID); - } - public PLUS_DOT_ID(i: number): TerminalNode { - return this.getToken(FlinkSqlParser.PLUS_DOT_ID, i); - } - public get ruleIndex(): number { - return FlinkSqlParser.RULE_plusUid; - } - public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterPlusUid) { - listener.enterPlusUid(this); - } - } - public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitPlusUid) { - listener.exitPlusUid(this); - } - } - // @Override - public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitPlusUid) { - return visitor.visitPlusUid(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class WithOptionContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); diff --git a/src/lib/flinksql/FlinkSqlParserListener.ts b/src/lib/flinksql/FlinkSqlParserListener.ts index 0ddaccc..6b521f9 100644 --- a/src/lib/flinksql/FlinkSqlParserListener.ts +++ b/src/lib/flinksql/FlinkSqlParserListener.ts @@ -1,4 +1,4 @@ -// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0 +// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0 import {ParseTreeListener} from "antlr4"; @@ -84,11 +84,13 @@ import { ValuesRowDefinitionContext } from "./FlinkSqlParser"; import { InsertMulStatementContext } from "./FlinkSqlParser"; import { QueryStatementContext } from "./FlinkSqlParser"; import { ValuesCaluseContext } from "./FlinkSqlParser"; +import { WithClauseContext } from "./FlinkSqlParser"; import { WithItemContext } from "./FlinkSqlParser"; import { WithItemNameContext } from "./FlinkSqlParser"; import { SelectStatementContext } from "./FlinkSqlParser"; import { SelectClauseContext } from "./FlinkSqlParser"; import { ProjectItemDefinitionContext } from "./FlinkSqlParser"; +import { OverWindowItemContext } from "./FlinkSqlParser"; import { FromClauseContext } from "./FlinkSqlParser"; import { TableExpressionContext } from "./FlinkSqlParser"; import { TableReferenceContext } from "./FlinkSqlParser"; @@ -96,20 +98,42 @@ import { TablePrimaryContext } from "./FlinkSqlParser"; import { TablePathContext } from "./FlinkSqlParser"; import { SystemTimePeriodContext } from "./FlinkSqlParser"; import { DateTimeExpressionContext } from "./FlinkSqlParser"; +import { InlineDataValueClauseContext } from "./FlinkSqlParser"; +import { WindoTVFClauseContext } from "./FlinkSqlParser"; +import { WindowTVFExressionContext } from "./FlinkSqlParser"; +import { WindoTVFNameContext } from "./FlinkSqlParser"; +import { WindowTVFParamContext } from "./FlinkSqlParser"; +import { TimeIntervalParamNameContext } from "./FlinkSqlParser"; +import { ColumnDescriptorContext } from "./FlinkSqlParser"; import { JoinConditionContext } from "./FlinkSqlParser"; import { WhereClauseContext } from "./FlinkSqlParser"; import { GroupByClauseContext } from "./FlinkSqlParser"; import { GroupItemDefinitionContext } from "./FlinkSqlParser"; +import { GroupingSetsContext } from "./FlinkSqlParser"; +import { GroupingSetsNotaionNameContext } from "./FlinkSqlParser"; +import { GroupWindowFunctionContext } from "./FlinkSqlParser"; +import { GroupWindowFunctionNameContext } from "./FlinkSqlParser"; +import { TimeAttrColumnContext } from "./FlinkSqlParser"; import { HavingClauseContext } from "./FlinkSqlParser"; -import { OrderByCaluseContext } from "./FlinkSqlParser"; -import { OrderItemDefitionContext } from "./FlinkSqlParser"; -import { LimitClauseContext } from "./FlinkSqlParser"; import { WindowClauseContext } from "./FlinkSqlParser"; import { NamedWindowContext } from "./FlinkSqlParser"; import { WindowSpecContext } from "./FlinkSqlParser"; -import { SortItemContext } from "./FlinkSqlParser"; +import { MatchRecognizeClauseContext } from "./FlinkSqlParser"; +import { OrderByCaluseContext } from "./FlinkSqlParser"; +import { OrderItemDefitionContext } from "./FlinkSqlParser"; +import { LimitClauseContext } from "./FlinkSqlParser"; +import { PartitionByClauseContext } from "./FlinkSqlParser"; +import { QuantifiersContext } from "./FlinkSqlParser"; +import { MeasuresClauseContext } from "./FlinkSqlParser"; +import { PatternDefinationContext } from "./FlinkSqlParser"; +import { PatternVariableContext } from "./FlinkSqlParser"; +import { OutputModeContext } from "./FlinkSqlParser"; +import { AfterMatchStrategyContext } from "./FlinkSqlParser"; +import { PatternVariablesDefinationContext } from "./FlinkSqlParser"; import { WindowFrameContext } from "./FlinkSqlParser"; import { FrameBoundContext } from "./FlinkSqlParser"; +import { WithinClauseContext } from "./FlinkSqlParser"; +import { TimeIntervalExpressionContext } from "./FlinkSqlParser"; import { ExpressionContext } from "./FlinkSqlParser"; import { LogicalNotContext } from "./FlinkSqlParser"; import { PredicatedContext } from "./FlinkSqlParser"; @@ -162,7 +186,6 @@ import { QuotedIdentifierContext } from "./FlinkSqlParser"; import { WhenClauseContext } from "./FlinkSqlParser"; import { UidListContext } from "./FlinkSqlParser"; import { UidContext } from "./FlinkSqlParser"; -import { PlusUidContext } from "./FlinkSqlParser"; import { WithOptionContext } from "./FlinkSqlParser"; import { IfNotExistsContext } from "./FlinkSqlParser"; import { IfExistsContext } from "./FlinkSqlParser"; @@ -1005,6 +1028,16 @@ export default class FlinkSqlParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitValuesCaluse?: (ctx: ValuesCaluseContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.withClause`. + * @param ctx the parse tree + */ + enterWithClause?: (ctx: WithClauseContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.withClause`. + * @param ctx the parse tree + */ + exitWithClause?: (ctx: WithClauseContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.withItem`. * @param ctx the parse tree @@ -1055,6 +1088,16 @@ export default class FlinkSqlParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitProjectItemDefinition?: (ctx: ProjectItemDefinitionContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.overWindowItem`. + * @param ctx the parse tree + */ + enterOverWindowItem?: (ctx: OverWindowItemContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.overWindowItem`. + * @param ctx the parse tree + */ + exitOverWindowItem?: (ctx: OverWindowItemContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.fromClause`. * @param ctx the parse tree @@ -1125,6 +1168,76 @@ export default class FlinkSqlParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitDateTimeExpression?: (ctx: DateTimeExpressionContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.inlineDataValueClause`. + * @param ctx the parse tree + */ + enterInlineDataValueClause?: (ctx: InlineDataValueClauseContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.inlineDataValueClause`. + * @param ctx the parse tree + */ + exitInlineDataValueClause?: (ctx: InlineDataValueClauseContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.windoTVFClause`. + * @param ctx the parse tree + */ + enterWindoTVFClause?: (ctx: WindoTVFClauseContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.windoTVFClause`. + * @param ctx the parse tree + */ + exitWindoTVFClause?: (ctx: WindoTVFClauseContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.windowTVFExression`. + * @param ctx the parse tree + */ + enterWindowTVFExression?: (ctx: WindowTVFExressionContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.windowTVFExression`. + * @param ctx the parse tree + */ + exitWindowTVFExression?: (ctx: WindowTVFExressionContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.windoTVFName`. + * @param ctx the parse tree + */ + enterWindoTVFName?: (ctx: WindoTVFNameContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.windoTVFName`. + * @param ctx the parse tree + */ + exitWindoTVFName?: (ctx: WindoTVFNameContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.windowTVFParam`. + * @param ctx the parse tree + */ + enterWindowTVFParam?: (ctx: WindowTVFParamContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.windowTVFParam`. + * @param ctx the parse tree + */ + exitWindowTVFParam?: (ctx: WindowTVFParamContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.timeIntervalParamName`. + * @param ctx the parse tree + */ + enterTimeIntervalParamName?: (ctx: TimeIntervalParamNameContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.timeIntervalParamName`. + * @param ctx the parse tree + */ + exitTimeIntervalParamName?: (ctx: TimeIntervalParamNameContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.columnDescriptor`. + * @param ctx the parse tree + */ + enterColumnDescriptor?: (ctx: ColumnDescriptorContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.columnDescriptor`. + * @param ctx the parse tree + */ + exitColumnDescriptor?: (ctx: ColumnDescriptorContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.joinCondition`. * @param ctx the parse tree @@ -1165,6 +1278,56 @@ export default class FlinkSqlParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitGroupItemDefinition?: (ctx: GroupItemDefinitionContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.groupingSets`. + * @param ctx the parse tree + */ + enterGroupingSets?: (ctx: GroupingSetsContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.groupingSets`. + * @param ctx the parse tree + */ + exitGroupingSets?: (ctx: GroupingSetsContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.groupingSetsNotaionName`. + * @param ctx the parse tree + */ + enterGroupingSetsNotaionName?: (ctx: GroupingSetsNotaionNameContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.groupingSetsNotaionName`. + * @param ctx the parse tree + */ + exitGroupingSetsNotaionName?: (ctx: GroupingSetsNotaionNameContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.groupWindowFunction`. + * @param ctx the parse tree + */ + enterGroupWindowFunction?: (ctx: GroupWindowFunctionContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.groupWindowFunction`. + * @param ctx the parse tree + */ + exitGroupWindowFunction?: (ctx: GroupWindowFunctionContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.groupWindowFunctionName`. + * @param ctx the parse tree + */ + enterGroupWindowFunctionName?: (ctx: GroupWindowFunctionNameContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.groupWindowFunctionName`. + * @param ctx the parse tree + */ + exitGroupWindowFunctionName?: (ctx: GroupWindowFunctionNameContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.timeAttrColumn`. + * @param ctx the parse tree + */ + enterTimeAttrColumn?: (ctx: TimeAttrColumnContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.timeAttrColumn`. + * @param ctx the parse tree + */ + exitTimeAttrColumn?: (ctx: TimeAttrColumnContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.havingClause`. * @param ctx the parse tree @@ -1175,36 +1338,6 @@ export default class FlinkSqlParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitHavingClause?: (ctx: HavingClauseContext) => void; - /** - * Enter a parse tree produced by `FlinkSqlParser.orderByCaluse`. - * @param ctx the parse tree - */ - enterOrderByCaluse?: (ctx: OrderByCaluseContext) => void; - /** - * Exit a parse tree produced by `FlinkSqlParser.orderByCaluse`. - * @param ctx the parse tree - */ - exitOrderByCaluse?: (ctx: OrderByCaluseContext) => void; - /** - * Enter a parse tree produced by `FlinkSqlParser.orderItemDefition`. - * @param ctx the parse tree - */ - enterOrderItemDefition?: (ctx: OrderItemDefitionContext) => void; - /** - * Exit a parse tree produced by `FlinkSqlParser.orderItemDefition`. - * @param ctx the parse tree - */ - exitOrderItemDefition?: (ctx: OrderItemDefitionContext) => void; - /** - * Enter a parse tree produced by `FlinkSqlParser.limitClause`. - * @param ctx the parse tree - */ - enterLimitClause?: (ctx: LimitClauseContext) => void; - /** - * Exit a parse tree produced by `FlinkSqlParser.limitClause`. - * @param ctx the parse tree - */ - exitLimitClause?: (ctx: LimitClauseContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.windowClause`. * @param ctx the parse tree @@ -1236,15 +1369,125 @@ export default class FlinkSqlParserListener extends ParseTreeListener { */ exitWindowSpec?: (ctx: WindowSpecContext) => void; /** - * Enter a parse tree produced by `FlinkSqlParser.sortItem`. + * Enter a parse tree produced by `FlinkSqlParser.matchRecognizeClause`. * @param ctx the parse tree */ - enterSortItem?: (ctx: SortItemContext) => void; + enterMatchRecognizeClause?: (ctx: MatchRecognizeClauseContext) => void; /** - * Exit a parse tree produced by `FlinkSqlParser.sortItem`. + * Exit a parse tree produced by `FlinkSqlParser.matchRecognizeClause`. * @param ctx the parse tree */ - exitSortItem?: (ctx: SortItemContext) => void; + exitMatchRecognizeClause?: (ctx: MatchRecognizeClauseContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.orderByCaluse`. + * @param ctx the parse tree + */ + enterOrderByCaluse?: (ctx: OrderByCaluseContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.orderByCaluse`. + * @param ctx the parse tree + */ + exitOrderByCaluse?: (ctx: OrderByCaluseContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.orderItemDefition`. + * @param ctx the parse tree + */ + enterOrderItemDefition?: (ctx: OrderItemDefitionContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.orderItemDefition`. + * @param ctx the parse tree + */ + exitOrderItemDefition?: (ctx: OrderItemDefitionContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.limitClause`. + * @param ctx the parse tree + */ + enterLimitClause?: (ctx: LimitClauseContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.limitClause`. + * @param ctx the parse tree + */ + exitLimitClause?: (ctx: LimitClauseContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.partitionByClause`. + * @param ctx the parse tree + */ + enterPartitionByClause?: (ctx: PartitionByClauseContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.partitionByClause`. + * @param ctx the parse tree + */ + exitPartitionByClause?: (ctx: PartitionByClauseContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.quantifiers`. + * @param ctx the parse tree + */ + enterQuantifiers?: (ctx: QuantifiersContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.quantifiers`. + * @param ctx the parse tree + */ + exitQuantifiers?: (ctx: QuantifiersContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.measuresClause`. + * @param ctx the parse tree + */ + enterMeasuresClause?: (ctx: MeasuresClauseContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.measuresClause`. + * @param ctx the parse tree + */ + exitMeasuresClause?: (ctx: MeasuresClauseContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.patternDefination`. + * @param ctx the parse tree + */ + enterPatternDefination?: (ctx: PatternDefinationContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.patternDefination`. + * @param ctx the parse tree + */ + exitPatternDefination?: (ctx: PatternDefinationContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.patternVariable`. + * @param ctx the parse tree + */ + enterPatternVariable?: (ctx: PatternVariableContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.patternVariable`. + * @param ctx the parse tree + */ + exitPatternVariable?: (ctx: PatternVariableContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.outputMode`. + * @param ctx the parse tree + */ + enterOutputMode?: (ctx: OutputModeContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.outputMode`. + * @param ctx the parse tree + */ + exitOutputMode?: (ctx: OutputModeContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.afterMatchStrategy`. + * @param ctx the parse tree + */ + enterAfterMatchStrategy?: (ctx: AfterMatchStrategyContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.afterMatchStrategy`. + * @param ctx the parse tree + */ + exitAfterMatchStrategy?: (ctx: AfterMatchStrategyContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.patternVariablesDefination`. + * @param ctx the parse tree + */ + enterPatternVariablesDefination?: (ctx: PatternVariablesDefinationContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.patternVariablesDefination`. + * @param ctx the parse tree + */ + exitPatternVariablesDefination?: (ctx: PatternVariablesDefinationContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.windowFrame`. * @param ctx the parse tree @@ -1265,6 +1508,26 @@ export default class FlinkSqlParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitFrameBound?: (ctx: FrameBoundContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.withinClause`. + * @param ctx the parse tree + */ + enterWithinClause?: (ctx: WithinClauseContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.withinClause`. + * @param ctx the parse tree + */ + exitWithinClause?: (ctx: WithinClauseContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.timeIntervalExpression`. + * @param ctx the parse tree + */ + enterTimeIntervalExpression?: (ctx: TimeIntervalExpressionContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.timeIntervalExpression`. + * @param ctx the parse tree + */ + exitTimeIntervalExpression?: (ctx: TimeIntervalExpressionContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.expression`. * @param ctx the parse tree @@ -1841,16 +2104,6 @@ export default class FlinkSqlParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitUid?: (ctx: UidContext) => void; - /** - * Enter a parse tree produced by `FlinkSqlParser.plusUid`. - * @param ctx the parse tree - */ - enterPlusUid?: (ctx: PlusUidContext) => void; - /** - * Exit a parse tree produced by `FlinkSqlParser.plusUid`. - * @param ctx the parse tree - */ - exitPlusUid?: (ctx: PlusUidContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.withOption`. * @param ctx the parse tree diff --git a/src/lib/flinksql/FlinkSqlParserVisitor.ts b/src/lib/flinksql/FlinkSqlParserVisitor.ts index e1a6d10..a34566e 100644 --- a/src/lib/flinksql/FlinkSqlParserVisitor.ts +++ b/src/lib/flinksql/FlinkSqlParserVisitor.ts @@ -1,4 +1,4 @@ -// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0 +// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0 import {ParseTreeVisitor} from 'antlr4'; @@ -84,11 +84,13 @@ import { ValuesRowDefinitionContext } from "./FlinkSqlParser"; import { InsertMulStatementContext } from "./FlinkSqlParser"; import { QueryStatementContext } from "./FlinkSqlParser"; import { ValuesCaluseContext } from "./FlinkSqlParser"; +import { WithClauseContext } from "./FlinkSqlParser"; import { WithItemContext } from "./FlinkSqlParser"; import { WithItemNameContext } from "./FlinkSqlParser"; import { SelectStatementContext } from "./FlinkSqlParser"; import { SelectClauseContext } from "./FlinkSqlParser"; import { ProjectItemDefinitionContext } from "./FlinkSqlParser"; +import { OverWindowItemContext } from "./FlinkSqlParser"; import { FromClauseContext } from "./FlinkSqlParser"; import { TableExpressionContext } from "./FlinkSqlParser"; import { TableReferenceContext } from "./FlinkSqlParser"; @@ -96,20 +98,42 @@ import { TablePrimaryContext } from "./FlinkSqlParser"; import { TablePathContext } from "./FlinkSqlParser"; import { SystemTimePeriodContext } from "./FlinkSqlParser"; import { DateTimeExpressionContext } from "./FlinkSqlParser"; +import { InlineDataValueClauseContext } from "./FlinkSqlParser"; +import { WindoTVFClauseContext } from "./FlinkSqlParser"; +import { WindowTVFExressionContext } from "./FlinkSqlParser"; +import { WindoTVFNameContext } from "./FlinkSqlParser"; +import { WindowTVFParamContext } from "./FlinkSqlParser"; +import { TimeIntervalParamNameContext } from "./FlinkSqlParser"; +import { ColumnDescriptorContext } from "./FlinkSqlParser"; import { JoinConditionContext } from "./FlinkSqlParser"; import { WhereClauseContext } from "./FlinkSqlParser"; import { GroupByClauseContext } from "./FlinkSqlParser"; import { GroupItemDefinitionContext } from "./FlinkSqlParser"; +import { GroupingSetsContext } from "./FlinkSqlParser"; +import { GroupingSetsNotaionNameContext } from "./FlinkSqlParser"; +import { GroupWindowFunctionContext } from "./FlinkSqlParser"; +import { GroupWindowFunctionNameContext } from "./FlinkSqlParser"; +import { TimeAttrColumnContext } from "./FlinkSqlParser"; import { HavingClauseContext } from "./FlinkSqlParser"; -import { OrderByCaluseContext } from "./FlinkSqlParser"; -import { OrderItemDefitionContext } from "./FlinkSqlParser"; -import { LimitClauseContext } from "./FlinkSqlParser"; import { WindowClauseContext } from "./FlinkSqlParser"; import { NamedWindowContext } from "./FlinkSqlParser"; import { WindowSpecContext } from "./FlinkSqlParser"; -import { SortItemContext } from "./FlinkSqlParser"; +import { MatchRecognizeClauseContext } from "./FlinkSqlParser"; +import { OrderByCaluseContext } from "./FlinkSqlParser"; +import { OrderItemDefitionContext } from "./FlinkSqlParser"; +import { LimitClauseContext } from "./FlinkSqlParser"; +import { PartitionByClauseContext } from "./FlinkSqlParser"; +import { QuantifiersContext } from "./FlinkSqlParser"; +import { MeasuresClauseContext } from "./FlinkSqlParser"; +import { PatternDefinationContext } from "./FlinkSqlParser"; +import { PatternVariableContext } from "./FlinkSqlParser"; +import { OutputModeContext } from "./FlinkSqlParser"; +import { AfterMatchStrategyContext } from "./FlinkSqlParser"; +import { PatternVariablesDefinationContext } from "./FlinkSqlParser"; import { WindowFrameContext } from "./FlinkSqlParser"; import { FrameBoundContext } from "./FlinkSqlParser"; +import { WithinClauseContext } from "./FlinkSqlParser"; +import { TimeIntervalExpressionContext } from "./FlinkSqlParser"; import { ExpressionContext } from "./FlinkSqlParser"; import { LogicalNotContext } from "./FlinkSqlParser"; import { PredicatedContext } from "./FlinkSqlParser"; @@ -162,7 +186,6 @@ import { QuotedIdentifierContext } from "./FlinkSqlParser"; import { WhenClauseContext } from "./FlinkSqlParser"; import { UidListContext } from "./FlinkSqlParser"; import { UidContext } from "./FlinkSqlParser"; -import { PlusUidContext } from "./FlinkSqlParser"; import { WithOptionContext } from "./FlinkSqlParser"; import { IfNotExistsContext } from "./FlinkSqlParser"; import { IfExistsContext } from "./FlinkSqlParser"; @@ -682,6 +705,12 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.withClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWithClause?: (ctx: WithClauseContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.withItem`. * @param ctx the parse tree @@ -712,6 +741,12 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.overWindowItem`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOverWindowItem?: (ctx: OverWindowItemContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.fromClause`. * @param ctx the parse tree @@ -754,6 +789,48 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.inlineDataValueClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInlineDataValueClause?: (ctx: InlineDataValueClauseContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.windoTVFClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindoTVFClause?: (ctx: WindoTVFClauseContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.windowTVFExression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowTVFExression?: (ctx: WindowTVFExressionContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.windoTVFName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindoTVFName?: (ctx: WindoTVFNameContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.windowTVFParam`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowTVFParam?: (ctx: WindowTVFParamContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.timeIntervalParamName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimeIntervalParamName?: (ctx: TimeIntervalParamNameContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.columnDescriptor`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColumnDescriptor?: (ctx: ColumnDescriptorContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.joinCondition`. * @param ctx the parse tree @@ -778,30 +855,42 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.groupingSets`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupingSets?: (ctx: GroupingSetsContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.groupingSetsNotaionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupingSetsNotaionName?: (ctx: GroupingSetsNotaionNameContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.groupWindowFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupWindowFunction?: (ctx: GroupWindowFunctionContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.groupWindowFunctionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupWindowFunctionName?: (ctx: GroupWindowFunctionNameContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.timeAttrColumn`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimeAttrColumn?: (ctx: TimeAttrColumnContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.havingClause`. * @param ctx the parse tree * @return the visitor result */ visitHavingClause?: (ctx: HavingClauseContext) => Result; - /** - * Visit a parse tree produced by `FlinkSqlParser.orderByCaluse`. - * @param ctx the parse tree - * @return the visitor result - */ - visitOrderByCaluse?: (ctx: OrderByCaluseContext) => Result; - /** - * Visit a parse tree produced by `FlinkSqlParser.orderItemDefition`. - * @param ctx the parse tree - * @return the visitor result - */ - visitOrderItemDefition?: (ctx: OrderItemDefitionContext) => Result; - /** - * Visit a parse tree produced by `FlinkSqlParser.limitClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLimitClause?: (ctx: LimitClauseContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.windowClause`. * @param ctx the parse tree @@ -821,11 +910,77 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; /** - * Visit a parse tree produced by `FlinkSqlParser.sortItem`. + * Visit a parse tree produced by `FlinkSqlParser.matchRecognizeClause`. * @param ctx the parse tree * @return the visitor result */ - visitSortItem?: (ctx: SortItemContext) => Result; + visitMatchRecognizeClause?: (ctx: MatchRecognizeClauseContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.orderByCaluse`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOrderByCaluse?: (ctx: OrderByCaluseContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.orderItemDefition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOrderItemDefition?: (ctx: OrderItemDefitionContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.limitClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLimitClause?: (ctx: LimitClauseContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.partitionByClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPartitionByClause?: (ctx: PartitionByClauseContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.quantifiers`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuantifiers?: (ctx: QuantifiersContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.measuresClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMeasuresClause?: (ctx: MeasuresClauseContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.patternDefination`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternDefination?: (ctx: PatternDefinationContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.patternVariable`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternVariable?: (ctx: PatternVariableContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.outputMode`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOutputMode?: (ctx: OutputModeContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.afterMatchStrategy`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAfterMatchStrategy?: (ctx: AfterMatchStrategyContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.patternVariablesDefination`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternVariablesDefination?: (ctx: PatternVariablesDefinationContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.windowFrame`. * @param ctx the parse tree @@ -838,6 +993,18 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.withinClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWithinClause?: (ctx: WithinClauseContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.timeIntervalExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimeIntervalExpression?: (ctx: TimeIntervalExpressionContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.expression`. * @param ctx the parse tree @@ -1178,12 +1345,6 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; - /** - * Visit a parse tree produced by `FlinkSqlParser.plusUid`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPlusUid?: (ctx: PlusUidContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.withOption`. * @param ctx the parse tree diff --git a/test/parser/flinksql/syntax/fixtures/select.sql b/test/parser/flinksql/syntax/fixtures/select.sql new file mode 100644 index 0000000..f46dc8b --- /dev/null +++ b/test/parser/flinksql/syntax/fixtures/select.sql @@ -0,0 +1,13 @@ +SELECT * FROM Orders; + +SELECT order_id, price + tax FROM Orders; + +SELECT order_id, price FROM (VALUES (1, 2.0), (2, 3.1)) AS t (order_id, price); + +SELECT price + tax FROM Orders WHERE id = 10; + +SELECT PRETTY_PRINT(order_id) FROM Orders; + +SELECT * FROM Orders ORDER BY order_time, order_id; + +SELECT * FROM Orders ORDER BY orderTime LIMIT 3; \ No newline at end of file diff --git a/test/parser/flinksql/syntax/fixtures/selectAggregation.sql b/test/parser/flinksql/syntax/fixtures/selectAggregation.sql new file mode 100644 index 0000000..77a5439 --- /dev/null +++ b/test/parser/flinksql/syntax/fixtures/selectAggregation.sql @@ -0,0 +1,122 @@ +-- Window TVF Aggregation +SELECT + window_start, + window_end, + supplier_id, + SUM(price) as price +FROM TABLE( + TUMBLE(TABLE Bid, DESCRIPTOR(bidtime), INTERVAL '10' MINUTES)) +GROUP BY window_start, window_end, GROUPING SETS ((supplier_id), ()); + +SELECT + window_start, + window_end, + supplier_id, + SUM(price) as price +FROM TABLE( + TUMBLE(TABLE Bid, DESCRIPTOR(bidtime), INTERVAL '10' MINUTES)) +GROUP BY window_start, window_end, ROLLUP (supplier_id); + +SELECT + window_start, + window_end, + item, supplier_id, + SUM(price) as price +FROM TABLE( + TUMBLE(TABLE Bid, DESCRIPTOR(bidtime), INTERVAL '10' MINUTES)) +GROUP BY window_start, window_end, CUBE (supplier_id, item); + +-- GROUPING SETS +SELECT + window_start, + window_end, + supplier_id, + SUM(price) as price +FROM TABLE( + TUMBLE(TABLE Bid, DESCRIPTOR(bidtime), INTERVAL '10' MINUTES)) +GROUP BY + window_start, + window_end, + GROUPING SETS ((supplier_id), ()); + +SELECT + window_start, + window_end, + supplier_id, + SUM(price) as price +FROM TABLE( + TUMBLE(TABLE Bid, DESCRIPTOR(bidtime), INTERVAL '10' MINUTES)) +GROUP BY + window_start, + window_end, + ROLLUP (supplier_id); + +SELECT + window_start, + window_end, + item, + supplier_id, + SUM(price) as price +FROM TABLE( + TUMBLE(TABLE Bid, DESCRIPTOR(bidtime), INTERVAL '10' MINUTES)) +GROUP BY + window_start, + window_end, + CUBE (supplier_id, item); + +-- Group Window Aggregation +SELECT + user, + TUMBLE_START(order_time, INTERVAL '1' DAY) AS wStart, + SUM(amount) FROM Orders +GROUP BY + TUMBLE(order_time, INTERVAL '1' DAY), + user; + +SELECT + user, + TUMBLE_START(order_time, INTERVAL '1' DAY) AS wStart, + SUM(amount) FROM Orders +GROUP BY + HOP(order_time, INTERVAL '1' DAY), + user; + +SELECT + user, + TUMBLE_START(order_time, INTERVAL '1' DAY) AS wStart, + SUM(amount) FROM Orders +GROUP BY + SESSION(order_time, INTERVAL '1' DAY), + user; + +-- Having +SELECT SUM(amount) +FROM Orders +GROUP BY users +HAVING SUM(amount) > 50; + +-- Over Aggregation +SELECT order_id, order_time, amount, + SUM(amount) OVER ( + PARTITION BY product + ORDER BY order_time + RANGE BETWEEN INTERVAL '1' HOUR PRECEDING AND CURRENT ROW + ) AS one_hour_prod_amount_sum +FROM Orders; + +SELECT product, order_time, amount, + SUM(amount) OVER ( + PARTITION BY product + ORDER BY order_time + ROWS BETWEEN 5 PRECEDING AND CURRENT ROW + ) AS one_hour_prod_amount_sum +FROM source_table; + +SELECT order_id, order_time, amount, + SUM(amount) OVER w AS sum_amount, + AVG(amount) OVER w AS avg_amount +FROM Orders +WINDOW w AS ( + PARTITION BY product + ORDER BY order_time + RANGE BETWEEN INTERVAL '1' HOUR PRECEDING AND CURRENT ROW); \ No newline at end of file diff --git a/test/parser/flinksql/syntax/fixtures/selectDistinct.sql b/test/parser/flinksql/syntax/fixtures/selectDistinct.sql new file mode 100644 index 0000000..df2ab5a --- /dev/null +++ b/test/parser/flinksql/syntax/fixtures/selectDistinct.sql @@ -0,0 +1,7 @@ +SELECT DISTINCT order_id, price + tax FROM Orders; + +SELECT DISTINCT order_id, price FROM (VALUES (1, 2.0), (2, 3.1)) AS t (order_id, price); + +SELECT DISTINCT price + tax FROM Orders WHERE id = 10; + +SELECT DISTINCT PRETTY_PRINT(order_id) FROM Orders; \ No newline at end of file diff --git a/test/parser/flinksql/syntax/fixtures/selectJoin.sql b/test/parser/flinksql/syntax/fixtures/selectJoin.sql new file mode 100644 index 0000000..27b07e3 --- /dev/null +++ b/test/parser/flinksql/syntax/fixtures/selectJoin.sql @@ -0,0 +1,128 @@ +-- INNER Equi-JOIN +SELECT * +FROM Orders +INNER JOIN Product +ON Orders.product_id = Product.id; + +-- OUTER Equi-JOIN +SELECT * +FROM Orders +LEFT JOIN Product +ON Orders.product_id = Product.id; + +SELECT * +FROM Orders +RIGHT JOIN Product +ON Orders.product_id = Product.id; + +SELECT * +FROM Orders +FULL OUTER JOIN Product +ON Orders.product_id = Product.id; + +-- Interval Joins +SELECT * +FROM Orders o, Shipments s +WHERE o.id = s.order_id +AND o.order_time BETWEEN s.ship_time - INTERVAL '4' HOUR AND s.ship_time; + +SELECT * +FROM Orders o, Shipments s +WHERE o.id = s.order_id +AND o.order_time = s.ship_time; -- ltime = rtime + +SELECT * +FROM Orders o, Shipments s +WHERE o.id = s.order_id +AND o.order_time >= s.ship_time -- ltime >= rtime AND ltime < rtime + INTERVAL '10' MINUTE +AND o.order_time < s.ship_time + INTERVAL '10' MINUTE; + +-- Temporal Joins +SELECT + order_id, + price, + orders.currency, + conversion_rate, + order_time +FROM orders +LEFT JOIN currency_rates FOR SYSTEM_TIME AS OF orders.order_time +ON orders.currency = currency_rates.currency; + +SELECT + o_amount, r_rate +FROM + Orders, + LATERAL TABLE (Rates(o_proctime)) +WHERE + r_currency = o_currency; + +-- Lookup Join +SELECT o.order_id, o.total, c.country, c.zip +FROM Orders AS o + JOIN Customers FOR SYSTEM_TIME AS OF o.proc_time AS c + ON o.customer_id = c.id; + +-- Table Function INNER JOIN +SELECT order_id, res +FROM Orders, +LATERAL TABLE(table_func(order_id)) t(res); + +-- Table Function LEFT OUTER JOIN +SELECT order_id, res +FROM Orders +LEFT OUTER JOIN LATERAL TABLE(table_func(order_id)) t(res) + ON TRUE; + +-- Cross Join +SELECT order_id, tag +FROM Orders CROSS JOIN UNNEST(tags) AS t (tag) + +-- FULL OUTER Window Join +SELECT L.num as L_Num, L.id as L_Id, R.num as R_Num, R.id as R_Id, +COALESCE(L.window_start, R.window_start) as window_start, +COALESCE(L.window_end, R.window_end) as window_end +FROM ( + SELECT * FROM TABLE(TUMBLE(TABLE LeftTable, DESCRIPTOR(row_time), INTERVAL '5' MINUTES)) +) L +FULL JOIN ( + SELECT * FROM TABLE(TUMBLE(TABLE RightTable, DESCRIPTOR(row_time), INTERVAL '5' MINUTES)) +) R +ON L.num = R.num AND L.window_start = R.window_start AND L.window_end = R.window_end; + +-- Semi Window Joins +SELECT * +FROM ( + SELECT * FROM TABLE(TUMBLE(TABLE LeftTable, DESCRIPTOR(row_time), INTERVAL '5' MINUTES)) +) L WHERE L.num IN ( + SELECT num FROM ( + SELECT * FROM TABLE(TUMBLE(TABLE RightTable, DESCRIPTOR(row_time), INTERVAL '5' MINUTES)) + ) R WHERE L.window_start = R.window_start AND L.window_end = R.window_end +); + +SELECT * +FROM ( + SELECT * FROM TABLE(TUMBLE(TABLE LeftTable, DESCRIPTOR(row_time), INTERVAL '5' MINUTES)) +) L WHERE L.num IN ( + SELECT num FROM ( + SELECT * FROM TABLE(TUMBLE(TABLE RightTable, DESCRIPTOR(row_time), INTERVAL '5' MINUTES)) + ) R WHERE L.window_start = R.window_start AND L.window_end = R.window_end +); + +-- Anti Window Joins +SELECT * +FROM ( + SELECT * FROM TABLE(TUMBLE(TABLE LeftTable, DESCRIPTOR(row_time), INTERVAL '5' MINUTES)) +) L WHERE L.num NOT IN ( + SELECT num FROM ( + SELECT * FROM TABLE(TUMBLE(TABLE RightTable, DESCRIPTOR(row_time), INTERVAL '5' MINUTES)) + ) R WHERE L.window_start = R.window_start AND L.window_end = R.window_end +); + +SELECT * +FROM ( + SELECT * FROM TABLE(TUMBLE(TABLE LeftTable, DESCRIPTOR(row_time), INTERVAL '5' MINUTES)) +) L WHERE NOT EXISTS ( + SELECT * FROM ( + SELECT * FROM TABLE(TUMBLE(TABLE RightTable, DESCRIPTOR(row_time), INTERVAL '5' MINUTES)) + ) R WHERE L.num = R.num AND L.window_start = R.window_start AND L.window_end = R.window_end +); \ No newline at end of file diff --git a/test/parser/flinksql/syntax/fixtures/selectPatternRecognition.sql b/test/parser/flinksql/syntax/fixtures/selectPatternRecognition.sql new file mode 100644 index 0000000..b6ed02a --- /dev/null +++ b/test/parser/flinksql/syntax/fixtures/selectPatternRecognition.sql @@ -0,0 +1,165 @@ +-- basic pattern recognition +SELECT T.aid, T.bid, T.cid +FROM MyTable + MATCH_RECOGNIZE ( + PARTITION BY userid + ORDER BY proctime + MEASURES + A.id AS aid, + B.id AS bid, + C.id AS cid + PATTERN (A B C) + DEFINE + A AS name = 'a', + B AS name = 'b', + C AS name = 'c' + ) AS T; + +SELECT * +FROM Ticker + MATCH_RECOGNIZE ( + PARTITION BY symbol + ORDER BY rowtime + MEASURES + START_ROW.rowtime AS start_tstamp, + _LAST(PRICE_DOWN.rowtime) AS bottom_tstamp, + _LAST(PRICE_UP.rowtime) AS end_tstamp + ONE ROW PER MATCH + AFTER MATCH SKIP TO LAST PRICE_UP + PATTERN (START_ROW PRICE_DOWN+ PRICE_UP) + DEFINE + PRICE_DOWN AS + (_LAST(PRICE_DOWN.price, 1) IS NULL AND PRICE_DOWN.price < START_ROW.price) OR + PRICE_DOWN.price < _LAST(PRICE_DOWN.price, 1), + PRICE_UP AS + PRICE_UP.price > _LAST(PRICE_DOWN.price, 1) + ) MR; + +-- Measures Aggregations +SELECT * +FROM Ticker + MATCH_RECOGNIZE ( + PARTITION BY symbol + ORDER BY rowtime + MEASURES + FIRST(A.rowtime) AS start_tstamp, + _LAST(A.rowtime) AS end_tstamp, + AVG(A.price) AS avgPrice + ONE ROW PER MATCH + AFTER MATCH SKIP PAST LAST ROW + PATTERN (A+ B) + DEFINE + A AS AVG(A.price) < 15 + ) MR; + +-- Define a Pattern +SELECT * +FROM Ticker + MATCH_RECOGNIZE( + PARTITION BY symbol + ORDER BY rowtime + MEASURES + C.price AS lastPrice + ONE ROW PER MATCH + AFTER MATCH SKIP PAST LAST ROW + PATTERN (A+ B* C? D{1,} E{,5} F{1,5}) + DEFINE + A AS A.price > 10, + B AS B.price < 15, + C AS C.price > 12 + ); + +-- Time constraint +SELECT * +FROM Ticker + MATCH_RECOGNIZE( + PARTITION BY symbol + ORDER BY rowtime + MEASURES + C.rowtime AS dropTime, + A.price - C.price AS dropDiff + ONE ROW PER MATCH + AFTER MATCH SKIP PAST LAST ROW + PATTERN (A B* C) WITHIN INTERVAL '1' HOUR + DEFINE + B AS B.price > A.price - 10, + C AS C.price < A.price - 10 + ); + +-- Output Mode +SELECT * +FROM Ticker + MATCH_RECOGNIZE( + PARTITION BY symbol + ORDER BY rowtime + MEASURES + FIRST(A.price) AS startPrice, + _LAST(A.price) AS topPrice, + B.price AS lastPrice + ONE ROW PER MATCH + PATTERN (A+ B) + DEFINE + A AS _LAST(A.price, 1) IS NULL OR A.price > _LAST(A.price, 1), + B AS B.price < _LAST(A.price) + ); + +SELECT * +FROM Ticker + MATCH_RECOGNIZE( + PARTITION BY symbol + ORDER BY rowtime + MEASURES + FIRST(A.price) AS startPrice, + _LAST(A.price) AS topPrice, + B.price AS lastPrice + ALL ROWS PER MATCH + PATTERN (A+ B) + DEFINE + A AS _LAST(A.price, 1) IS NULL OR A.price > _LAST(A.price, 1), + B AS B.price < _LAST(A.price) + ); + +-- After Match Strategy +SELECT * +FROM Ticker + MATCH_RECOGNIZE ( + PARTITION BY symbol + ORDER BY rowtime + MEASURES + FIRST(A.rowtime) AS start_tstamp + ONE ROW PER MATCH + AFTER MATCH SKIP TO NEXT ROW + PATTERN (A+ B) + DEFINE + A AS AVG(A.price) < 15 + ) MR; + +SELECT * +FROM Ticker + MATCH_RECOGNIZE ( + PARTITION BY symbol + ORDER BY rowtime + MEASURES + FIRST(A.rowtime) AS start_tstamp + ONE ROW PER MATCH + AFTER MATCH SKIP TO LAST A + PATTERN (A+ B) + DEFINE + A AS AVG(A.price) < 15 + ) MR; + +SELECT * +FROM Ticker + MATCH_RECOGNIZE ( + PARTITION BY symbol + ORDER BY rowtime + MEASURES + FIRST(A.rowtime) AS start_tstamp + ONE ROW PER MATCH + AFTER MATCH SKIP TO FIRST A + PATTERN (A+ B) + DEFINE + A AS AVG(A.price) < 15 + ) MR; + + \ No newline at end of file diff --git a/test/parser/flinksql/syntax/fixtures/selectSetOperations.sql b/test/parser/flinksql/syntax/fixtures/selectSetOperations.sql new file mode 100644 index 0000000..8faae7c --- /dev/null +++ b/test/parser/flinksql/syntax/fixtures/selectSetOperations.sql @@ -0,0 +1,28 @@ +-- UNION +(SELECT s FROM t1) UNION (SELECT s FROM t2); + +(SELECT s FROM t1) UNION ALL (SELECT s FROM t2); + +-- INTERSECT +(SELECT s FROM t1) INTERSECT (SELECT s FROM t2); + +(SELECT s FROM t1) INTERSECT ALL (SELECT s FROM t2); + +-- EXPECT +(SELECT s FROM t1) EXCEPT (SELECT s FROM t2); + +(SELECT s FROM t1) EXCEPT ALL (SELECT s FROM t2); + +-- IN +SELECT user, amount +FROM Orders +WHERE product IN ( + SELECT product FROM NewProducts +) + +-- EXISTS +SELECT user, amount +FROM Orders +WHERE product EXISTS ( + SELECT product FROM NewProducts +) \ No newline at end of file diff --git a/test/parser/flinksql/syntax/fixtures/selectWindowTVF.sql b/test/parser/flinksql/syntax/fixtures/selectWindowTVF.sql new file mode 100644 index 0000000..602b138 --- /dev/null +++ b/test/parser/flinksql/syntax/fixtures/selectWindowTVF.sql @@ -0,0 +1,52 @@ +SELECT * FROM TABLE( + TUMBLE( + DATA => TABLE Bid, + TIMECOL => DESCRIPTOR(bidtime), + SIZE => INTERVAL '10' MINUTES + ) +); + +SELECT window_start, + window_end, + SUM(price) +FROM TABLE( + TUMBLE( + TABLE Bid, + DESCRIPTOR(bidtime), + INTERVAL '10' MINUTES + ) +) +GROUP BY window_start, window_end; + +SELECT * FROM TABLE( + HOP(TABLE Bid, DESCRIPTOR(bidtime), INTERVAL '5' MINUTES, INTERVAL '10' MINUTES)); + +SELECT * FROM TABLE( + HOP( + DATA => TABLE Bid, + TIMECOL => DESCRIPTOR(bidtime), + SLIDE => INTERVAL '5' MINUTES, + SIZE => INTERVAL '10' MINUTES + ) +); + +SELECT * FROM TABLE( + CUMULATE( + DATA => TABLE Bid, + TIMECOL => DESCRIPTOR(bidtime), + STEP => INTERVAL '2' MINUTES, + SIZE => INTERVAL '10' MINUTES + ) +); + +SELECT window_start, + window_end, + SUM(price) +FROM TABLE( + CUMULATE( + TABLE Bid, + DESCRIPTOR(bidtime), + INTERVAL '2' MINUTES, + INTERVAL '10' MINUTES + )) +GROUP BY window_start, window_end; diff --git a/test/parser/flinksql/syntax/fixtures/selectWithClause.sql b/test/parser/flinksql/syntax/fixtures/selectWithClause.sql new file mode 100644 index 0000000..7188ad7 --- /dev/null +++ b/test/parser/flinksql/syntax/fixtures/selectWithClause.sql @@ -0,0 +1,7 @@ +WITH orders_with_total AS ( + SELECT order_id, price + tax AS total + FROM Orders +) +SELECT order_id, SUM(total) +FROM orders_with_total +GROUP BY order_id; \ No newline at end of file diff --git a/test/parser/flinksql/syntax/selectStatement.test.ts b/test/parser/flinksql/syntax/selectStatement.test.ts new file mode 100644 index 0000000..ec2cf8d --- /dev/null +++ b/test/parser/flinksql/syntax/selectStatement.test.ts @@ -0,0 +1,82 @@ +import FlinkSQL from "../../../../src/parser/flinksql"; +import { readSQL } from "../../../helper"; + +const parser = new FlinkSQL(); + +const features = { + base: readSQL(__dirname, "select.sql"), + withClause: readSQL(__dirname, "selectWithClause.sql"), + distinct: readSQL(__dirname, "selectDistinct.sql"), + windowTVF: readSQL(__dirname, "selectWindowTVF.sql"), + aggregation: readSQL(__dirname, "selectAggregation.sql"), + join: readSQL(__dirname, "selectJoin.sql"), + setOperation: readSQL(__dirname, "selectSetOperations.sql"), + pattern: readSQL(__dirname, "selectPatternRecognition.sql") +}; + +describe("FlinkSQL Query Statement Tests", () => { + describe("Base Select", () => { + features.base.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + }); + + describe("With Clause Select", () => { + features.withClause.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + }); + + + describe("Select DISTINCT", () => { + features.distinct.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }) + }) + + describe("Select Window TVF", () => { + features.windowTVF.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }) + }) + + describe("Select Aggregation", () => { + features.aggregation.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }) + }) + + describe("Select Join", () => { + features.join.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }) + }) + + describe("Select Set Operations", () => { + features.setOperation.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }) + }) + + describe("Select Pattern Recognition", () => { + features.pattern.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }) + }) +});