From 7d0b8df0c3db3e80f18322ce05571b127566ff6e Mon Sep 17 00:00:00 2001 From: Spade A <71589810+SpadeA-Tang@users.noreply.github.com> Date: Thu, 16 Apr 2026 18:01:42 +0800 Subject: [PATCH] feat: impl StructArray -- support index access (#48987) issue: https://github.com/milvus-io/milvus/issues/42148 design doc: https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260306-struct.md --------- Signed-off-by: SpadeA --- internal/parser/planparserv2/Plan.g4 | 6 +- .../parser/planparserv2/generated/Plan.interp | 4 +- .../parser/planparserv2/generated/Plan.tokens | 9 +- .../planparserv2/generated/PlanLexer.interp | 5 +- .../planparserv2/generated/PlanLexer.tokens | 9 +- .../generated/plan_base_visitor.go | 4 + .../planparserv2/generated/plan_lexer.go | 1327 +++++++++-------- .../planparserv2/generated/plan_parser.go | 1160 +++++++------- .../planparserv2/generated/plan_visitor.go | 3 + .../parser/planparserv2/parser_visitor.go | 77 +- .../planparserv2/plan_parser_v2_test.go | 188 +++ 11 files changed, 1558 insertions(+), 1234 deletions(-) diff --git a/internal/parser/planparserv2/Plan.g4 b/internal/parser/planparserv2/Plan.g4 index cf968884e6..4d5f36810f 100644 --- a/internal/parser/planparserv2/Plan.g4 +++ b/internal/parser/planparserv2/Plan.g4 @@ -10,6 +10,7 @@ expr: | (Identifier|Meta) # Identifier | JSONIdentifier # JSONIdentifier | StructFieldIdentifier # StructField + | StructIndexFieldIdentifier # StructIndexField | StructSubFieldIdentifier # StructSubField | LBRACE Identifier RBRACE # TemplateVariable | '(' expr ')' # Parens @@ -38,8 +39,8 @@ expr: | STIsValid'('Identifier')' # STIsValid | ArrayLength'('(Identifier | JSONIdentifier | StructFieldIdentifier)')' # ArrayLength | Identifier '(' ( expr (',' expr )* ','? )? ')' # Call - | expr op1 = (LT | LE) (Identifier | JSONIdentifier | StructSubFieldIdentifier) op2 = (LT | LE) expr # Range - | expr op1 = (GT | GE) (Identifier | JSONIdentifier | StructSubFieldIdentifier) op2 = (GT | GE) expr # ReverseRange + | expr op1 = (LT | LE) (Identifier | JSONIdentifier | StructSubFieldIdentifier | StructIndexFieldIdentifier) op2 = (LT | LE) expr # Range + | expr op1 = (GT | GE) (Identifier | JSONIdentifier | StructSubFieldIdentifier | StructIndexFieldIdentifier) op2 = (GT | GE) expr # ReverseRange | expr op = (LT | LE | GT | GE) expr # Relational | expr op = (EQ | NE) expr # Equality | expr BAND expr # BitAnd @@ -140,6 +141,7 @@ Meta: '$meta'; StringLiteral: EncodingPrefix? ('"' DoubleSCharSequence? '"' | '\'' SingleSCharSequence? '\''); JSONIdentifier: (Identifier | Meta)('[' (StringLiteral | DecimalConstant) ']')+; +StructIndexFieldIdentifier: Identifier '[' DecimalConstant ']' '[' Identifier ']'; StructFieldIdentifier: Identifier '[' Identifier ']'; StructSubFieldIdentifier: '$[' Identifier ']'; diff --git a/internal/parser/planparserv2/generated/Plan.interp b/internal/parser/planparserv2/generated/Plan.interp index 9131b69eb7..4d49df2c5c 100644 --- a/internal/parser/planparserv2/generated/Plan.interp +++ b/internal/parser/planparserv2/generated/Plan.interp @@ -75,6 +75,7 @@ null null null null +null token symbolic names: null @@ -149,6 +150,7 @@ Identifier Meta StringLiteral JSONIdentifier +StructIndexFieldIdentifier StructFieldIdentifier StructSubFieldIdentifier Whitespace @@ -160,4 +162,4 @@ textMatchOption atn: -[4, 1, 75, 235, 2, 0, 7, 0, 2, 1, 7, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 10, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 22, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 43, 8, 0, 10, 0, 12, 0, 46, 9, 0, 1, 0, 3, 0, 49, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 63, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 73, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 157, 8, 0, 10, 0, 12, 0, 160, 9, 0, 1, 0, 3, 0, 163, 8, 0, 3, 0, 165, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 172, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 188, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 226, 8, 0, 10, 0, 12, 0, 229, 9, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 2, 0, 2, 0, 19, 1, 0, 29, 30, 1, 0, 8, 13, 1, 0, 68, 69, 1, 0, 19, 20, 1, 0, 21, 23, 2, 0, 29, 30, 44, 45, 2, 0, 48, 48, 51, 51, 2, 0, 49, 49, 52, 52, 2, 0, 50, 50, 53, 53, 1, 0, 56, 62, 2, 0, 68, 68, 71, 72, 2, 0, 68, 68, 71, 71, 1, 0, 31, 33, 1, 0, 35, 36, 1, 0, 8, 9, 3, 0, 68, 68, 71, 71, 73, 73, 1, 0, 10, 11, 1, 0, 8, 11, 1, 0, 12, 13, 288, 0, 171, 1, 0, 0, 0, 2, 230, 1, 0, 0, 0, 4, 5, 6, 0, -1, 0, 5, 9, 5, 68, 0, 0, 6, 7, 7, 0, 0, 0, 7, 8, 5, 24, 0, 0, 8, 10, 5, 70, 0, 0, 9, 6, 1, 0, 0, 0, 9, 10, 1, 0, 0, 0, 10, 11, 1, 0, 0, 0, 11, 12, 7, 1, 0, 0, 12, 13, 5, 25, 0, 0, 13, 172, 5, 70, 0, 0, 14, 15, 5, 25, 0, 0, 15, 16, 5, 70, 0, 0, 16, 17, 7, 1, 0, 0, 17, 21, 5, 68, 0, 0, 18, 19, 7, 0, 0, 0, 19, 20, 5, 24, 0, 0, 20, 22, 5, 70, 0, 0, 21, 18, 1, 0, 0, 0, 21, 22, 1, 0, 0, 0, 22, 172, 1, 0, 0, 0, 23, 172, 5, 66, 0, 0, 24, 172, 5, 67, 0, 0, 25, 172, 5, 65, 0, 0, 26, 172, 5, 70, 0, 0, 27, 172, 7, 2, 0, 0, 28, 172, 5, 71, 0, 0, 29, 172, 5, 72, 0, 0, 30, 172, 5, 73, 0, 0, 31, 32, 5, 6, 0, 0, 32, 33, 5, 68, 0, 0, 33, 172, 5, 7, 0, 0, 34, 35, 5, 1, 0, 0, 35, 36, 3, 0, 0, 0, 36, 37, 5, 2, 0, 0, 37, 172, 1, 0, 0, 0, 38, 39, 5, 3, 0, 0, 39, 44, 3, 0, 0, 0, 40, 41, 5, 4, 0, 0, 41, 43, 3, 0, 0, 0, 42, 40, 1, 0, 0, 0, 43, 46, 1, 0, 0, 0, 44, 42, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 48, 1, 0, 0, 0, 46, 44, 1, 0, 0, 0, 47, 49, 5, 4, 0, 0, 48, 47, 1, 0, 0, 0, 48, 49, 1, 0, 0, 0, 49, 50, 1, 0, 0, 0, 50, 51, 5, 5, 0, 0, 51, 172, 1, 0, 0, 0, 52, 172, 5, 47, 0, 0, 53, 54, 5, 15, 0, 0, 54, 172, 3, 0, 0, 33, 55, 56, 5, 16, 0, 0, 56, 57, 5, 1, 0, 0, 57, 58, 5, 68, 0, 0, 58, 59, 5, 4, 0, 0, 59, 62, 5, 70, 0, 0, 60, 61, 5, 4, 0, 0, 61, 63, 3, 2, 1, 0, 62, 60, 1, 0, 0, 0, 62, 63, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 172, 5, 2, 0, 0, 65, 66, 5, 17, 0, 0, 66, 67, 5, 1, 0, 0, 67, 68, 5, 68, 0, 0, 68, 69, 5, 4, 0, 0, 69, 72, 5, 70, 0, 0, 70, 71, 5, 4, 0, 0, 71, 73, 3, 0, 0, 0, 72, 70, 1, 0, 0, 0, 72, 73, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 172, 5, 2, 0, 0, 75, 76, 5, 18, 0, 0, 76, 77, 5, 1, 0, 0, 77, 78, 3, 0, 0, 0, 78, 79, 5, 2, 0, 0, 79, 172, 1, 0, 0, 0, 80, 81, 5, 55, 0, 0, 81, 82, 5, 1, 0, 0, 82, 83, 5, 68, 0, 0, 83, 84, 5, 4, 0, 0, 84, 85, 3, 0, 0, 0, 85, 86, 5, 2, 0, 0, 86, 172, 1, 0, 0, 0, 87, 88, 7, 3, 0, 0, 88, 89, 5, 1, 0, 0, 89, 90, 5, 68, 0, 0, 90, 91, 5, 4, 0, 0, 91, 92, 3, 0, 0, 0, 92, 93, 5, 2, 0, 0, 93, 172, 1, 0, 0, 0, 94, 95, 7, 4, 0, 0, 95, 96, 5, 1, 0, 0, 96, 97, 5, 68, 0, 0, 97, 98, 5, 4, 0, 0, 98, 99, 3, 0, 0, 0, 99, 100, 5, 4, 0, 0, 100, 101, 5, 27, 0, 0, 101, 102, 5, 28, 0, 0, 102, 103, 5, 66, 0, 0, 103, 104, 5, 2, 0, 0, 104, 172, 1, 0, 0, 0, 105, 106, 7, 5, 0, 0, 106, 172, 3, 0, 0, 24, 107, 108, 7, 6, 0, 0, 108, 109, 5, 1, 0, 0, 109, 110, 3, 0, 0, 0, 110, 111, 5, 4, 0, 0, 111, 112, 3, 0, 0, 0, 112, 113, 5, 2, 0, 0, 113, 172, 1, 0, 0, 0, 114, 115, 7, 7, 0, 0, 115, 116, 5, 1, 0, 0, 116, 117, 3, 0, 0, 0, 117, 118, 5, 4, 0, 0, 118, 119, 3, 0, 0, 0, 119, 120, 5, 2, 0, 0, 120, 172, 1, 0, 0, 0, 121, 122, 7, 8, 0, 0, 122, 123, 5, 1, 0, 0, 123, 124, 3, 0, 0, 0, 124, 125, 5, 4, 0, 0, 125, 126, 3, 0, 0, 0, 126, 127, 5, 2, 0, 0, 127, 172, 1, 0, 0, 0, 128, 129, 7, 9, 0, 0, 129, 130, 5, 1, 0, 0, 130, 131, 5, 68, 0, 0, 131, 132, 5, 4, 0, 0, 132, 133, 5, 70, 0, 0, 133, 172, 5, 2, 0, 0, 134, 135, 5, 63, 0, 0, 135, 136, 5, 1, 0, 0, 136, 137, 5, 68, 0, 0, 137, 138, 5, 4, 0, 0, 138, 139, 5, 70, 0, 0, 139, 140, 5, 4, 0, 0, 140, 141, 3, 0, 0, 0, 141, 142, 5, 2, 0, 0, 142, 172, 1, 0, 0, 0, 143, 144, 5, 64, 0, 0, 144, 145, 5, 1, 0, 0, 145, 146, 5, 68, 0, 0, 146, 172, 5, 2, 0, 0, 147, 148, 5, 54, 0, 0, 148, 149, 5, 1, 0, 0, 149, 150, 7, 10, 0, 0, 150, 172, 5, 2, 0, 0, 151, 152, 5, 68, 0, 0, 152, 164, 5, 1, 0, 0, 153, 158, 3, 0, 0, 0, 154, 155, 5, 4, 0, 0, 155, 157, 3, 0, 0, 0, 156, 154, 1, 0, 0, 0, 157, 160, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 162, 1, 0, 0, 0, 160, 158, 1, 0, 0, 0, 161, 163, 5, 4, 0, 0, 162, 161, 1, 0, 0, 0, 162, 163, 1, 0, 0, 0, 163, 165, 1, 0, 0, 0, 164, 153, 1, 0, 0, 0, 164, 165, 1, 0, 0, 0, 165, 166, 1, 0, 0, 0, 166, 172, 5, 2, 0, 0, 167, 168, 7, 11, 0, 0, 168, 172, 5, 42, 0, 0, 169, 170, 7, 11, 0, 0, 170, 172, 5, 43, 0, 0, 171, 4, 1, 0, 0, 0, 171, 14, 1, 0, 0, 0, 171, 23, 1, 0, 0, 0, 171, 24, 1, 0, 0, 0, 171, 25, 1, 0, 0, 0, 171, 26, 1, 0, 0, 0, 171, 27, 1, 0, 0, 0, 171, 28, 1, 0, 0, 0, 171, 29, 1, 0, 0, 0, 171, 30, 1, 0, 0, 0, 171, 31, 1, 0, 0, 0, 171, 34, 1, 0, 0, 0, 171, 38, 1, 0, 0, 0, 171, 52, 1, 0, 0, 0, 171, 53, 1, 0, 0, 0, 171, 55, 1, 0, 0, 0, 171, 65, 1, 0, 0, 0, 171, 75, 1, 0, 0, 0, 171, 80, 1, 0, 0, 0, 171, 87, 1, 0, 0, 0, 171, 94, 1, 0, 0, 0, 171, 105, 1, 0, 0, 0, 171, 107, 1, 0, 0, 0, 171, 114, 1, 0, 0, 0, 171, 121, 1, 0, 0, 0, 171, 128, 1, 0, 0, 0, 171, 134, 1, 0, 0, 0, 171, 143, 1, 0, 0, 0, 171, 147, 1, 0, 0, 0, 171, 151, 1, 0, 0, 0, 171, 167, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 172, 227, 1, 0, 0, 0, 173, 174, 10, 25, 0, 0, 174, 175, 5, 34, 0, 0, 175, 226, 3, 0, 0, 26, 176, 177, 10, 23, 0, 0, 177, 178, 7, 12, 0, 0, 178, 226, 3, 0, 0, 24, 179, 180, 10, 22, 0, 0, 180, 181, 7, 0, 0, 0, 181, 226, 3, 0, 0, 23, 182, 183, 10, 21, 0, 0, 183, 184, 7, 13, 0, 0, 184, 226, 3, 0, 0, 22, 185, 187, 10, 20, 0, 0, 186, 188, 5, 45, 0, 0, 187, 186, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 190, 5, 46, 0, 0, 190, 226, 3, 0, 0, 21, 191, 192, 10, 11, 0, 0, 192, 193, 7, 14, 0, 0, 193, 194, 7, 15, 0, 0, 194, 195, 7, 14, 0, 0, 195, 226, 3, 0, 0, 12, 196, 197, 10, 10, 0, 0, 197, 198, 7, 16, 0, 0, 198, 199, 7, 15, 0, 0, 199, 200, 7, 16, 0, 0, 200, 226, 3, 0, 0, 11, 201, 202, 10, 9, 0, 0, 202, 203, 7, 17, 0, 0, 203, 226, 3, 0, 0, 10, 204, 205, 10, 8, 0, 0, 205, 206, 7, 18, 0, 0, 206, 226, 3, 0, 0, 9, 207, 208, 10, 7, 0, 0, 208, 209, 5, 37, 0, 0, 209, 226, 3, 0, 0, 8, 210, 211, 10, 6, 0, 0, 211, 212, 5, 39, 0, 0, 212, 226, 3, 0, 0, 7, 213, 214, 10, 5, 0, 0, 214, 215, 5, 38, 0, 0, 215, 226, 3, 0, 0, 6, 216, 217, 10, 4, 0, 0, 217, 218, 5, 40, 0, 0, 218, 226, 3, 0, 0, 5, 219, 220, 10, 3, 0, 0, 220, 221, 5, 41, 0, 0, 221, 226, 3, 0, 0, 4, 222, 223, 10, 32, 0, 0, 223, 224, 5, 14, 0, 0, 224, 226, 5, 70, 0, 0, 225, 173, 1, 0, 0, 0, 225, 176, 1, 0, 0, 0, 225, 179, 1, 0, 0, 0, 225, 182, 1, 0, 0, 0, 225, 185, 1, 0, 0, 0, 225, 191, 1, 0, 0, 0, 225, 196, 1, 0, 0, 0, 225, 201, 1, 0, 0, 0, 225, 204, 1, 0, 0, 0, 225, 207, 1, 0, 0, 0, 225, 210, 1, 0, 0, 0, 225, 213, 1, 0, 0, 0, 225, 216, 1, 0, 0, 0, 225, 219, 1, 0, 0, 0, 225, 222, 1, 0, 0, 0, 226, 229, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 1, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 230, 231, 5, 26, 0, 0, 231, 232, 5, 28, 0, 0, 232, 233, 5, 66, 0, 0, 233, 3, 1, 0, 0, 0, 13, 9, 21, 44, 48, 62, 72, 158, 162, 164, 171, 187, 225, 227] \ No newline at end of file +[4, 1, 76, 236, 2, 0, 7, 0, 2, 1, 7, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 10, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 22, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 44, 8, 0, 10, 0, 12, 0, 47, 9, 0, 1, 0, 3, 0, 50, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 64, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 74, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 158, 8, 0, 10, 0, 12, 0, 161, 9, 0, 1, 0, 3, 0, 164, 8, 0, 3, 0, 166, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 173, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 189, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 227, 8, 0, 10, 0, 12, 0, 230, 9, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 2, 0, 2, 0, 19, 1, 0, 29, 30, 1, 0, 8, 13, 1, 0, 68, 69, 1, 0, 19, 20, 1, 0, 21, 23, 2, 0, 29, 30, 44, 45, 2, 0, 48, 48, 51, 51, 2, 0, 49, 49, 52, 52, 2, 0, 50, 50, 53, 53, 1, 0, 56, 62, 3, 0, 68, 68, 71, 71, 73, 73, 2, 0, 68, 68, 71, 71, 1, 0, 31, 33, 1, 0, 35, 36, 1, 0, 8, 9, 3, 0, 68, 68, 71, 72, 74, 74, 1, 0, 10, 11, 1, 0, 8, 11, 1, 0, 12, 13, 290, 0, 172, 1, 0, 0, 0, 2, 231, 1, 0, 0, 0, 4, 5, 6, 0, -1, 0, 5, 9, 5, 68, 0, 0, 6, 7, 7, 0, 0, 0, 7, 8, 5, 24, 0, 0, 8, 10, 5, 70, 0, 0, 9, 6, 1, 0, 0, 0, 9, 10, 1, 0, 0, 0, 10, 11, 1, 0, 0, 0, 11, 12, 7, 1, 0, 0, 12, 13, 5, 25, 0, 0, 13, 173, 5, 70, 0, 0, 14, 15, 5, 25, 0, 0, 15, 16, 5, 70, 0, 0, 16, 17, 7, 1, 0, 0, 17, 21, 5, 68, 0, 0, 18, 19, 7, 0, 0, 0, 19, 20, 5, 24, 0, 0, 20, 22, 5, 70, 0, 0, 21, 18, 1, 0, 0, 0, 21, 22, 1, 0, 0, 0, 22, 173, 1, 0, 0, 0, 23, 173, 5, 66, 0, 0, 24, 173, 5, 67, 0, 0, 25, 173, 5, 65, 0, 0, 26, 173, 5, 70, 0, 0, 27, 173, 7, 2, 0, 0, 28, 173, 5, 71, 0, 0, 29, 173, 5, 73, 0, 0, 30, 173, 5, 72, 0, 0, 31, 173, 5, 74, 0, 0, 32, 33, 5, 6, 0, 0, 33, 34, 5, 68, 0, 0, 34, 173, 5, 7, 0, 0, 35, 36, 5, 1, 0, 0, 36, 37, 3, 0, 0, 0, 37, 38, 5, 2, 0, 0, 38, 173, 1, 0, 0, 0, 39, 40, 5, 3, 0, 0, 40, 45, 3, 0, 0, 0, 41, 42, 5, 4, 0, 0, 42, 44, 3, 0, 0, 0, 43, 41, 1, 0, 0, 0, 44, 47, 1, 0, 0, 0, 45, 43, 1, 0, 0, 0, 45, 46, 1, 0, 0, 0, 46, 49, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 48, 50, 5, 4, 0, 0, 49, 48, 1, 0, 0, 0, 49, 50, 1, 0, 0, 0, 50, 51, 1, 0, 0, 0, 51, 52, 5, 5, 0, 0, 52, 173, 1, 0, 0, 0, 53, 173, 5, 47, 0, 0, 54, 55, 5, 15, 0, 0, 55, 173, 3, 0, 0, 33, 56, 57, 5, 16, 0, 0, 57, 58, 5, 1, 0, 0, 58, 59, 5, 68, 0, 0, 59, 60, 5, 4, 0, 0, 60, 63, 5, 70, 0, 0, 61, 62, 5, 4, 0, 0, 62, 64, 3, 2, 1, 0, 63, 61, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 65, 1, 0, 0, 0, 65, 173, 5, 2, 0, 0, 66, 67, 5, 17, 0, 0, 67, 68, 5, 1, 0, 0, 68, 69, 5, 68, 0, 0, 69, 70, 5, 4, 0, 0, 70, 73, 5, 70, 0, 0, 71, 72, 5, 4, 0, 0, 72, 74, 3, 0, 0, 0, 73, 71, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 173, 5, 2, 0, 0, 76, 77, 5, 18, 0, 0, 77, 78, 5, 1, 0, 0, 78, 79, 3, 0, 0, 0, 79, 80, 5, 2, 0, 0, 80, 173, 1, 0, 0, 0, 81, 82, 5, 55, 0, 0, 82, 83, 5, 1, 0, 0, 83, 84, 5, 68, 0, 0, 84, 85, 5, 4, 0, 0, 85, 86, 3, 0, 0, 0, 86, 87, 5, 2, 0, 0, 87, 173, 1, 0, 0, 0, 88, 89, 7, 3, 0, 0, 89, 90, 5, 1, 0, 0, 90, 91, 5, 68, 0, 0, 91, 92, 5, 4, 0, 0, 92, 93, 3, 0, 0, 0, 93, 94, 5, 2, 0, 0, 94, 173, 1, 0, 0, 0, 95, 96, 7, 4, 0, 0, 96, 97, 5, 1, 0, 0, 97, 98, 5, 68, 0, 0, 98, 99, 5, 4, 0, 0, 99, 100, 3, 0, 0, 0, 100, 101, 5, 4, 0, 0, 101, 102, 5, 27, 0, 0, 102, 103, 5, 28, 0, 0, 103, 104, 5, 66, 0, 0, 104, 105, 5, 2, 0, 0, 105, 173, 1, 0, 0, 0, 106, 107, 7, 5, 0, 0, 107, 173, 3, 0, 0, 24, 108, 109, 7, 6, 0, 0, 109, 110, 5, 1, 0, 0, 110, 111, 3, 0, 0, 0, 111, 112, 5, 4, 0, 0, 112, 113, 3, 0, 0, 0, 113, 114, 5, 2, 0, 0, 114, 173, 1, 0, 0, 0, 115, 116, 7, 7, 0, 0, 116, 117, 5, 1, 0, 0, 117, 118, 3, 0, 0, 0, 118, 119, 5, 4, 0, 0, 119, 120, 3, 0, 0, 0, 120, 121, 5, 2, 0, 0, 121, 173, 1, 0, 0, 0, 122, 123, 7, 8, 0, 0, 123, 124, 5, 1, 0, 0, 124, 125, 3, 0, 0, 0, 125, 126, 5, 4, 0, 0, 126, 127, 3, 0, 0, 0, 127, 128, 5, 2, 0, 0, 128, 173, 1, 0, 0, 0, 129, 130, 7, 9, 0, 0, 130, 131, 5, 1, 0, 0, 131, 132, 5, 68, 0, 0, 132, 133, 5, 4, 0, 0, 133, 134, 5, 70, 0, 0, 134, 173, 5, 2, 0, 0, 135, 136, 5, 63, 0, 0, 136, 137, 5, 1, 0, 0, 137, 138, 5, 68, 0, 0, 138, 139, 5, 4, 0, 0, 139, 140, 5, 70, 0, 0, 140, 141, 5, 4, 0, 0, 141, 142, 3, 0, 0, 0, 142, 143, 5, 2, 0, 0, 143, 173, 1, 0, 0, 0, 144, 145, 5, 64, 0, 0, 145, 146, 5, 1, 0, 0, 146, 147, 5, 68, 0, 0, 147, 173, 5, 2, 0, 0, 148, 149, 5, 54, 0, 0, 149, 150, 5, 1, 0, 0, 150, 151, 7, 10, 0, 0, 151, 173, 5, 2, 0, 0, 152, 153, 5, 68, 0, 0, 153, 165, 5, 1, 0, 0, 154, 159, 3, 0, 0, 0, 155, 156, 5, 4, 0, 0, 156, 158, 3, 0, 0, 0, 157, 155, 1, 0, 0, 0, 158, 161, 1, 0, 0, 0, 159, 157, 1, 0, 0, 0, 159, 160, 1, 0, 0, 0, 160, 163, 1, 0, 0, 0, 161, 159, 1, 0, 0, 0, 162, 164, 5, 4, 0, 0, 163, 162, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 166, 1, 0, 0, 0, 165, 154, 1, 0, 0, 0, 165, 166, 1, 0, 0, 0, 166, 167, 1, 0, 0, 0, 167, 173, 5, 2, 0, 0, 168, 169, 7, 11, 0, 0, 169, 173, 5, 42, 0, 0, 170, 171, 7, 11, 0, 0, 171, 173, 5, 43, 0, 0, 172, 4, 1, 0, 0, 0, 172, 14, 1, 0, 0, 0, 172, 23, 1, 0, 0, 0, 172, 24, 1, 0, 0, 0, 172, 25, 1, 0, 0, 0, 172, 26, 1, 0, 0, 0, 172, 27, 1, 0, 0, 0, 172, 28, 1, 0, 0, 0, 172, 29, 1, 0, 0, 0, 172, 30, 1, 0, 0, 0, 172, 31, 1, 0, 0, 0, 172, 32, 1, 0, 0, 0, 172, 35, 1, 0, 0, 0, 172, 39, 1, 0, 0, 0, 172, 53, 1, 0, 0, 0, 172, 54, 1, 0, 0, 0, 172, 56, 1, 0, 0, 0, 172, 66, 1, 0, 0, 0, 172, 76, 1, 0, 0, 0, 172, 81, 1, 0, 0, 0, 172, 88, 1, 0, 0, 0, 172, 95, 1, 0, 0, 0, 172, 106, 1, 0, 0, 0, 172, 108, 1, 0, 0, 0, 172, 115, 1, 0, 0, 0, 172, 122, 1, 0, 0, 0, 172, 129, 1, 0, 0, 0, 172, 135, 1, 0, 0, 0, 172, 144, 1, 0, 0, 0, 172, 148, 1, 0, 0, 0, 172, 152, 1, 0, 0, 0, 172, 168, 1, 0, 0, 0, 172, 170, 1, 0, 0, 0, 173, 228, 1, 0, 0, 0, 174, 175, 10, 25, 0, 0, 175, 176, 5, 34, 0, 0, 176, 227, 3, 0, 0, 26, 177, 178, 10, 23, 0, 0, 178, 179, 7, 12, 0, 0, 179, 227, 3, 0, 0, 24, 180, 181, 10, 22, 0, 0, 181, 182, 7, 0, 0, 0, 182, 227, 3, 0, 0, 23, 183, 184, 10, 21, 0, 0, 184, 185, 7, 13, 0, 0, 185, 227, 3, 0, 0, 22, 186, 188, 10, 20, 0, 0, 187, 189, 5, 45, 0, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 191, 5, 46, 0, 0, 191, 227, 3, 0, 0, 21, 192, 193, 10, 11, 0, 0, 193, 194, 7, 14, 0, 0, 194, 195, 7, 15, 0, 0, 195, 196, 7, 14, 0, 0, 196, 227, 3, 0, 0, 12, 197, 198, 10, 10, 0, 0, 198, 199, 7, 16, 0, 0, 199, 200, 7, 15, 0, 0, 200, 201, 7, 16, 0, 0, 201, 227, 3, 0, 0, 11, 202, 203, 10, 9, 0, 0, 203, 204, 7, 17, 0, 0, 204, 227, 3, 0, 0, 10, 205, 206, 10, 8, 0, 0, 206, 207, 7, 18, 0, 0, 207, 227, 3, 0, 0, 9, 208, 209, 10, 7, 0, 0, 209, 210, 5, 37, 0, 0, 210, 227, 3, 0, 0, 8, 211, 212, 10, 6, 0, 0, 212, 213, 5, 39, 0, 0, 213, 227, 3, 0, 0, 7, 214, 215, 10, 5, 0, 0, 215, 216, 5, 38, 0, 0, 216, 227, 3, 0, 0, 6, 217, 218, 10, 4, 0, 0, 218, 219, 5, 40, 0, 0, 219, 227, 3, 0, 0, 5, 220, 221, 10, 3, 0, 0, 221, 222, 5, 41, 0, 0, 222, 227, 3, 0, 0, 4, 223, 224, 10, 32, 0, 0, 224, 225, 5, 14, 0, 0, 225, 227, 5, 70, 0, 0, 226, 174, 1, 0, 0, 0, 226, 177, 1, 0, 0, 0, 226, 180, 1, 0, 0, 0, 226, 183, 1, 0, 0, 0, 226, 186, 1, 0, 0, 0, 226, 192, 1, 0, 0, 0, 226, 197, 1, 0, 0, 0, 226, 202, 1, 0, 0, 0, 226, 205, 1, 0, 0, 0, 226, 208, 1, 0, 0, 0, 226, 211, 1, 0, 0, 0, 226, 214, 1, 0, 0, 0, 226, 217, 1, 0, 0, 0, 226, 220, 1, 0, 0, 0, 226, 223, 1, 0, 0, 0, 227, 230, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 1, 1, 0, 0, 0, 230, 228, 1, 0, 0, 0, 231, 232, 5, 26, 0, 0, 232, 233, 5, 28, 0, 0, 233, 234, 5, 66, 0, 0, 234, 3, 1, 0, 0, 0, 13, 9, 21, 45, 49, 63, 73, 159, 163, 165, 172, 188, 226, 228] \ No newline at end of file diff --git a/internal/parser/planparserv2/generated/Plan.tokens b/internal/parser/planparserv2/generated/Plan.tokens index c73cac0814..f684657ec4 100644 --- a/internal/parser/planparserv2/generated/Plan.tokens +++ b/internal/parser/planparserv2/generated/Plan.tokens @@ -69,10 +69,11 @@ Identifier=68 Meta=69 StringLiteral=70 JSONIdentifier=71 -StructFieldIdentifier=72 -StructSubFieldIdentifier=73 -Whitespace=74 -Newline=75 +StructIndexFieldIdentifier=72 +StructFieldIdentifier=73 +StructSubFieldIdentifier=74 +Whitespace=75 +Newline=76 '('=1 ')'=2 '['=3 diff --git a/internal/parser/planparserv2/generated/PlanLexer.interp b/internal/parser/planparserv2/generated/PlanLexer.interp index 21c02fe9b2..e74365c8b1 100644 --- a/internal/parser/planparserv2/generated/PlanLexer.interp +++ b/internal/parser/planparserv2/generated/PlanLexer.interp @@ -75,6 +75,7 @@ null null null null +null token symbolic names: null @@ -149,6 +150,7 @@ Identifier Meta StringLiteral JSONIdentifier +StructIndexFieldIdentifier StructFieldIdentifier StructSubFieldIdentifier Whitespace @@ -226,6 +228,7 @@ Identifier Meta StringLiteral JSONIdentifier +StructIndexFieldIdentifier StructFieldIdentifier StructSubFieldIdentifier EncodingPrefix @@ -264,4 +267,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 75, 1381, 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, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 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, 3, 13, 240, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 254, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 276, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 302, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 330, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 350, 8, 18, 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, 370, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 394, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 416, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 440, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 458, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 466, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 508, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 528, 8, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 565, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 573, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 589, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 613, 8, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 624, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 630, 8, 45, 1, 46, 1, 46, 1, 46, 5, 46, 635, 8, 46, 10, 46, 12, 46, 638, 9, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 668, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 704, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 740, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 770, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 808, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 846, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 872, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 902, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 922, 8, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 944, 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 968, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 990, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1014, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 1042, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 1062, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1084, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1106, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 1135, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1141, 8, 65, 1, 66, 1, 66, 3, 66, 1145, 8, 66, 1, 67, 1, 67, 1, 67, 5, 67, 1150, 8, 67, 10, 67, 12, 67, 1153, 9, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 3, 69, 1162, 8, 69, 1, 69, 1, 69, 3, 69, 1166, 8, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1171, 8, 69, 1, 69, 3, 69, 1174, 8, 69, 1, 70, 1, 70, 3, 70, 1178, 8, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1183, 8, 70, 1, 70, 1, 70, 4, 70, 1187, 8, 70, 11, 70, 12, 70, 1188, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 3, 73, 1205, 8, 73, 1, 74, 4, 74, 1208, 8, 74, 11, 74, 12, 74, 1209, 1, 75, 4, 75, 1213, 8, 75, 11, 75, 12, 75, 1214, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 1224, 8, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1233, 8, 77, 1, 78, 1, 78, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 4, 80, 1242, 8, 80, 11, 80, 12, 80, 1243, 1, 81, 1, 81, 5, 81, 1248, 8, 81, 10, 81, 12, 81, 1251, 9, 81, 1, 81, 3, 81, 1254, 8, 81, 1, 82, 1, 82, 5, 82, 1258, 8, 82, 10, 82, 12, 82, 1261, 9, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, 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, 3, 88, 1288, 8, 88, 1, 89, 1, 89, 3, 89, 1292, 8, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1297, 8, 89, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1303, 8, 90, 1, 90, 1, 90, 1, 91, 3, 91, 1308, 8, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 1315, 8, 91, 1, 92, 1, 92, 3, 92, 1319, 8, 92, 1, 92, 1, 92, 1, 93, 4, 93, 1324, 8, 93, 11, 93, 12, 93, 1325, 1, 94, 3, 94, 1329, 8, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1336, 8, 94, 1, 95, 4, 95, 1339, 8, 95, 11, 95, 12, 95, 1340, 1, 96, 1, 96, 3, 96, 1345, 8, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 1354, 8, 97, 1, 97, 3, 97, 1357, 8, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 1364, 8, 97, 1, 98, 4, 98, 1367, 8, 98, 11, 98, 12, 98, 1368, 1, 98, 1, 98, 1, 99, 1, 99, 3, 99, 1375, 8, 99, 1, 99, 3, 99, 1378, 8, 99, 1, 99, 1, 99, 0, 0, 100, 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, 0, 149, 0, 151, 0, 153, 0, 155, 0, 157, 0, 159, 0, 161, 0, 163, 0, 165, 0, 167, 0, 169, 0, 171, 0, 173, 0, 175, 0, 177, 0, 179, 0, 181, 0, 183, 0, 185, 0, 187, 0, 189, 0, 191, 0, 193, 0, 195, 0, 197, 74, 199, 75, 1, 0, 16, 3, 0, 76, 76, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 2, 0, 88, 88, 120, 120, 1, 0, 49, 57, 1, 0, 48, 55, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 2, 0, 80, 80, 112, 112, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 97, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 9, 9, 32, 32, 1448, 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, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 1, 201, 1, 0, 0, 0, 3, 203, 1, 0, 0, 0, 5, 205, 1, 0, 0, 0, 7, 207, 1, 0, 0, 0, 9, 209, 1, 0, 0, 0, 11, 211, 1, 0, 0, 0, 13, 213, 1, 0, 0, 0, 15, 215, 1, 0, 0, 0, 17, 217, 1, 0, 0, 0, 19, 220, 1, 0, 0, 0, 21, 222, 1, 0, 0, 0, 23, 225, 1, 0, 0, 0, 25, 228, 1, 0, 0, 0, 27, 239, 1, 0, 0, 0, 29, 253, 1, 0, 0, 0, 31, 275, 1, 0, 0, 0, 33, 301, 1, 0, 0, 0, 35, 329, 1, 0, 0, 0, 37, 349, 1, 0, 0, 0, 39, 369, 1, 0, 0, 0, 41, 393, 1, 0, 0, 0, 43, 415, 1, 0, 0, 0, 45, 439, 1, 0, 0, 0, 47, 457, 1, 0, 0, 0, 49, 465, 1, 0, 0, 0, 51, 507, 1, 0, 0, 0, 53, 527, 1, 0, 0, 0, 55, 529, 1, 0, 0, 0, 57, 531, 1, 0, 0, 0, 59, 533, 1, 0, 0, 0, 61, 535, 1, 0, 0, 0, 63, 537, 1, 0, 0, 0, 65, 539, 1, 0, 0, 0, 67, 541, 1, 0, 0, 0, 69, 544, 1, 0, 0, 0, 71, 547, 1, 0, 0, 0, 73, 550, 1, 0, 0, 0, 75, 552, 1, 0, 0, 0, 77, 554, 1, 0, 0, 0, 79, 564, 1, 0, 0, 0, 81, 572, 1, 0, 0, 0, 83, 588, 1, 0, 0, 0, 85, 612, 1, 0, 0, 0, 87, 614, 1, 0, 0, 0, 89, 623, 1, 0, 0, 0, 91, 629, 1, 0, 0, 0, 93, 631, 1, 0, 0, 0, 95, 667, 1, 0, 0, 0, 97, 703, 1, 0, 0, 0, 99, 739, 1, 0, 0, 0, 101, 769, 1, 0, 0, 0, 103, 807, 1, 0, 0, 0, 105, 845, 1, 0, 0, 0, 107, 871, 1, 0, 0, 0, 109, 901, 1, 0, 0, 0, 111, 921, 1, 0, 0, 0, 113, 943, 1, 0, 0, 0, 115, 967, 1, 0, 0, 0, 117, 989, 1, 0, 0, 0, 119, 1013, 1, 0, 0, 0, 121, 1041, 1, 0, 0, 0, 123, 1061, 1, 0, 0, 0, 125, 1083, 1, 0, 0, 0, 127, 1105, 1, 0, 0, 0, 129, 1134, 1, 0, 0, 0, 131, 1140, 1, 0, 0, 0, 133, 1144, 1, 0, 0, 0, 135, 1146, 1, 0, 0, 0, 137, 1154, 1, 0, 0, 0, 139, 1161, 1, 0, 0, 0, 141, 1177, 1, 0, 0, 0, 143, 1190, 1, 0, 0, 0, 145, 1195, 1, 0, 0, 0, 147, 1204, 1, 0, 0, 0, 149, 1207, 1, 0, 0, 0, 151, 1212, 1, 0, 0, 0, 153, 1223, 1, 0, 0, 0, 155, 1232, 1, 0, 0, 0, 157, 1234, 1, 0, 0, 0, 159, 1236, 1, 0, 0, 0, 161, 1238, 1, 0, 0, 0, 163, 1253, 1, 0, 0, 0, 165, 1255, 1, 0, 0, 0, 167, 1262, 1, 0, 0, 0, 169, 1266, 1, 0, 0, 0, 171, 1268, 1, 0, 0, 0, 173, 1270, 1, 0, 0, 0, 175, 1272, 1, 0, 0, 0, 177, 1287, 1, 0, 0, 0, 179, 1296, 1, 0, 0, 0, 181, 1298, 1, 0, 0, 0, 183, 1314, 1, 0, 0, 0, 185, 1316, 1, 0, 0, 0, 187, 1323, 1, 0, 0, 0, 189, 1335, 1, 0, 0, 0, 191, 1338, 1, 0, 0, 0, 193, 1342, 1, 0, 0, 0, 195, 1363, 1, 0, 0, 0, 197, 1366, 1, 0, 0, 0, 199, 1377, 1, 0, 0, 0, 201, 202, 5, 40, 0, 0, 202, 2, 1, 0, 0, 0, 203, 204, 5, 41, 0, 0, 204, 4, 1, 0, 0, 0, 205, 206, 5, 91, 0, 0, 206, 6, 1, 0, 0, 0, 207, 208, 5, 44, 0, 0, 208, 8, 1, 0, 0, 0, 209, 210, 5, 93, 0, 0, 210, 10, 1, 0, 0, 0, 211, 212, 5, 123, 0, 0, 212, 12, 1, 0, 0, 0, 213, 214, 5, 125, 0, 0, 214, 14, 1, 0, 0, 0, 215, 216, 5, 60, 0, 0, 216, 16, 1, 0, 0, 0, 217, 218, 5, 60, 0, 0, 218, 219, 5, 61, 0, 0, 219, 18, 1, 0, 0, 0, 220, 221, 5, 62, 0, 0, 221, 20, 1, 0, 0, 0, 222, 223, 5, 62, 0, 0, 223, 224, 5, 61, 0, 0, 224, 22, 1, 0, 0, 0, 225, 226, 5, 61, 0, 0, 226, 227, 5, 61, 0, 0, 227, 24, 1, 0, 0, 0, 228, 229, 5, 33, 0, 0, 229, 230, 5, 61, 0, 0, 230, 26, 1, 0, 0, 0, 231, 232, 5, 108, 0, 0, 232, 233, 5, 105, 0, 0, 233, 234, 5, 107, 0, 0, 234, 240, 5, 101, 0, 0, 235, 236, 5, 76, 0, 0, 236, 237, 5, 73, 0, 0, 237, 238, 5, 75, 0, 0, 238, 240, 5, 69, 0, 0, 239, 231, 1, 0, 0, 0, 239, 235, 1, 0, 0, 0, 240, 28, 1, 0, 0, 0, 241, 242, 5, 101, 0, 0, 242, 243, 5, 120, 0, 0, 243, 244, 5, 105, 0, 0, 244, 245, 5, 115, 0, 0, 245, 246, 5, 116, 0, 0, 246, 254, 5, 115, 0, 0, 247, 248, 5, 69, 0, 0, 248, 249, 5, 88, 0, 0, 249, 250, 5, 73, 0, 0, 250, 251, 5, 83, 0, 0, 251, 252, 5, 84, 0, 0, 252, 254, 5, 83, 0, 0, 253, 241, 1, 0, 0, 0, 253, 247, 1, 0, 0, 0, 254, 30, 1, 0, 0, 0, 255, 256, 5, 116, 0, 0, 256, 257, 5, 101, 0, 0, 257, 258, 5, 120, 0, 0, 258, 259, 5, 116, 0, 0, 259, 260, 5, 95, 0, 0, 260, 261, 5, 109, 0, 0, 261, 262, 5, 97, 0, 0, 262, 263, 5, 116, 0, 0, 263, 264, 5, 99, 0, 0, 264, 276, 5, 104, 0, 0, 265, 266, 5, 84, 0, 0, 266, 267, 5, 69, 0, 0, 267, 268, 5, 88, 0, 0, 268, 269, 5, 84, 0, 0, 269, 270, 5, 95, 0, 0, 270, 271, 5, 77, 0, 0, 271, 272, 5, 65, 0, 0, 272, 273, 5, 84, 0, 0, 273, 274, 5, 67, 0, 0, 274, 276, 5, 72, 0, 0, 275, 255, 1, 0, 0, 0, 275, 265, 1, 0, 0, 0, 276, 32, 1, 0, 0, 0, 277, 278, 5, 112, 0, 0, 278, 279, 5, 104, 0, 0, 279, 280, 5, 114, 0, 0, 280, 281, 5, 97, 0, 0, 281, 282, 5, 115, 0, 0, 282, 283, 5, 101, 0, 0, 283, 284, 5, 95, 0, 0, 284, 285, 5, 109, 0, 0, 285, 286, 5, 97, 0, 0, 286, 287, 5, 116, 0, 0, 287, 288, 5, 99, 0, 0, 288, 302, 5, 104, 0, 0, 289, 290, 5, 80, 0, 0, 290, 291, 5, 72, 0, 0, 291, 292, 5, 82, 0, 0, 292, 293, 5, 65, 0, 0, 293, 294, 5, 83, 0, 0, 294, 295, 5, 69, 0, 0, 295, 296, 5, 95, 0, 0, 296, 297, 5, 77, 0, 0, 297, 298, 5, 65, 0, 0, 298, 299, 5, 84, 0, 0, 299, 300, 5, 67, 0, 0, 300, 302, 5, 72, 0, 0, 301, 277, 1, 0, 0, 0, 301, 289, 1, 0, 0, 0, 302, 34, 1, 0, 0, 0, 303, 304, 5, 114, 0, 0, 304, 305, 5, 97, 0, 0, 305, 306, 5, 110, 0, 0, 306, 307, 5, 100, 0, 0, 307, 308, 5, 111, 0, 0, 308, 309, 5, 109, 0, 0, 309, 310, 5, 95, 0, 0, 310, 311, 5, 115, 0, 0, 311, 312, 5, 97, 0, 0, 312, 313, 5, 109, 0, 0, 313, 314, 5, 112, 0, 0, 314, 315, 5, 108, 0, 0, 315, 330, 5, 101, 0, 0, 316, 317, 5, 82, 0, 0, 317, 318, 5, 65, 0, 0, 318, 319, 5, 78, 0, 0, 319, 320, 5, 68, 0, 0, 320, 321, 5, 79, 0, 0, 321, 322, 5, 77, 0, 0, 322, 323, 5, 95, 0, 0, 323, 324, 5, 83, 0, 0, 324, 325, 5, 65, 0, 0, 325, 326, 5, 77, 0, 0, 326, 327, 5, 80, 0, 0, 327, 328, 5, 76, 0, 0, 328, 330, 5, 69, 0, 0, 329, 303, 1, 0, 0, 0, 329, 316, 1, 0, 0, 0, 330, 36, 1, 0, 0, 0, 331, 332, 5, 109, 0, 0, 332, 333, 5, 97, 0, 0, 333, 334, 5, 116, 0, 0, 334, 335, 5, 99, 0, 0, 335, 336, 5, 104, 0, 0, 336, 337, 5, 95, 0, 0, 337, 338, 5, 97, 0, 0, 338, 339, 5, 108, 0, 0, 339, 350, 5, 108, 0, 0, 340, 341, 5, 77, 0, 0, 341, 342, 5, 65, 0, 0, 342, 343, 5, 84, 0, 0, 343, 344, 5, 67, 0, 0, 344, 345, 5, 72, 0, 0, 345, 346, 5, 95, 0, 0, 346, 347, 5, 65, 0, 0, 347, 348, 5, 76, 0, 0, 348, 350, 5, 76, 0, 0, 349, 331, 1, 0, 0, 0, 349, 340, 1, 0, 0, 0, 350, 38, 1, 0, 0, 0, 351, 352, 5, 109, 0, 0, 352, 353, 5, 97, 0, 0, 353, 354, 5, 116, 0, 0, 354, 355, 5, 99, 0, 0, 355, 356, 5, 104, 0, 0, 356, 357, 5, 95, 0, 0, 357, 358, 5, 97, 0, 0, 358, 359, 5, 110, 0, 0, 359, 370, 5, 121, 0, 0, 360, 361, 5, 77, 0, 0, 361, 362, 5, 65, 0, 0, 362, 363, 5, 84, 0, 0, 363, 364, 5, 67, 0, 0, 364, 365, 5, 72, 0, 0, 365, 366, 5, 95, 0, 0, 366, 367, 5, 65, 0, 0, 367, 368, 5, 78, 0, 0, 368, 370, 5, 89, 0, 0, 369, 351, 1, 0, 0, 0, 369, 360, 1, 0, 0, 0, 370, 40, 1, 0, 0, 0, 371, 372, 5, 109, 0, 0, 372, 373, 5, 97, 0, 0, 373, 374, 5, 116, 0, 0, 374, 375, 5, 99, 0, 0, 375, 376, 5, 104, 0, 0, 376, 377, 5, 95, 0, 0, 377, 378, 5, 108, 0, 0, 378, 379, 5, 101, 0, 0, 379, 380, 5, 97, 0, 0, 380, 381, 5, 115, 0, 0, 381, 394, 5, 116, 0, 0, 382, 383, 5, 77, 0, 0, 383, 384, 5, 65, 0, 0, 384, 385, 5, 84, 0, 0, 385, 386, 5, 67, 0, 0, 386, 387, 5, 72, 0, 0, 387, 388, 5, 95, 0, 0, 388, 389, 5, 76, 0, 0, 389, 390, 5, 69, 0, 0, 390, 391, 5, 65, 0, 0, 391, 392, 5, 83, 0, 0, 392, 394, 5, 84, 0, 0, 393, 371, 1, 0, 0, 0, 393, 382, 1, 0, 0, 0, 394, 42, 1, 0, 0, 0, 395, 396, 5, 109, 0, 0, 396, 397, 5, 97, 0, 0, 397, 398, 5, 116, 0, 0, 398, 399, 5, 99, 0, 0, 399, 400, 5, 104, 0, 0, 400, 401, 5, 95, 0, 0, 401, 402, 5, 109, 0, 0, 402, 403, 5, 111, 0, 0, 403, 404, 5, 115, 0, 0, 404, 416, 5, 116, 0, 0, 405, 406, 5, 77, 0, 0, 406, 407, 5, 65, 0, 0, 407, 408, 5, 84, 0, 0, 408, 409, 5, 67, 0, 0, 409, 410, 5, 72, 0, 0, 410, 411, 5, 95, 0, 0, 411, 412, 5, 77, 0, 0, 412, 413, 5, 79, 0, 0, 413, 414, 5, 83, 0, 0, 414, 416, 5, 84, 0, 0, 415, 395, 1, 0, 0, 0, 415, 405, 1, 0, 0, 0, 416, 44, 1, 0, 0, 0, 417, 418, 5, 109, 0, 0, 418, 419, 5, 97, 0, 0, 419, 420, 5, 116, 0, 0, 420, 421, 5, 99, 0, 0, 421, 422, 5, 104, 0, 0, 422, 423, 5, 95, 0, 0, 423, 424, 5, 101, 0, 0, 424, 425, 5, 120, 0, 0, 425, 426, 5, 97, 0, 0, 426, 427, 5, 99, 0, 0, 427, 440, 5, 116, 0, 0, 428, 429, 5, 77, 0, 0, 429, 430, 5, 65, 0, 0, 430, 431, 5, 84, 0, 0, 431, 432, 5, 67, 0, 0, 432, 433, 5, 72, 0, 0, 433, 434, 5, 95, 0, 0, 434, 435, 5, 69, 0, 0, 435, 436, 5, 88, 0, 0, 436, 437, 5, 65, 0, 0, 437, 438, 5, 67, 0, 0, 438, 440, 5, 84, 0, 0, 439, 417, 1, 0, 0, 0, 439, 428, 1, 0, 0, 0, 440, 46, 1, 0, 0, 0, 441, 442, 5, 105, 0, 0, 442, 443, 5, 110, 0, 0, 443, 444, 5, 116, 0, 0, 444, 445, 5, 101, 0, 0, 445, 446, 5, 114, 0, 0, 446, 447, 5, 118, 0, 0, 447, 448, 5, 97, 0, 0, 448, 458, 5, 108, 0, 0, 449, 450, 5, 73, 0, 0, 450, 451, 5, 78, 0, 0, 451, 452, 5, 84, 0, 0, 452, 453, 5, 69, 0, 0, 453, 454, 5, 82, 0, 0, 454, 455, 5, 86, 0, 0, 455, 456, 5, 65, 0, 0, 456, 458, 5, 76, 0, 0, 457, 441, 1, 0, 0, 0, 457, 449, 1, 0, 0, 0, 458, 48, 1, 0, 0, 0, 459, 460, 5, 105, 0, 0, 460, 461, 5, 115, 0, 0, 461, 466, 5, 111, 0, 0, 462, 463, 5, 73, 0, 0, 463, 464, 5, 83, 0, 0, 464, 466, 5, 79, 0, 0, 465, 459, 1, 0, 0, 0, 465, 462, 1, 0, 0, 0, 466, 50, 1, 0, 0, 0, 467, 468, 5, 109, 0, 0, 468, 469, 5, 105, 0, 0, 469, 470, 5, 110, 0, 0, 470, 471, 5, 105, 0, 0, 471, 472, 5, 109, 0, 0, 472, 473, 5, 117, 0, 0, 473, 474, 5, 109, 0, 0, 474, 475, 5, 95, 0, 0, 475, 476, 5, 115, 0, 0, 476, 477, 5, 104, 0, 0, 477, 478, 5, 111, 0, 0, 478, 479, 5, 117, 0, 0, 479, 480, 5, 108, 0, 0, 480, 481, 5, 100, 0, 0, 481, 482, 5, 95, 0, 0, 482, 483, 5, 109, 0, 0, 483, 484, 5, 97, 0, 0, 484, 485, 5, 116, 0, 0, 485, 486, 5, 99, 0, 0, 486, 508, 5, 104, 0, 0, 487, 488, 5, 77, 0, 0, 488, 489, 5, 73, 0, 0, 489, 490, 5, 78, 0, 0, 490, 491, 5, 73, 0, 0, 491, 492, 5, 77, 0, 0, 492, 493, 5, 85, 0, 0, 493, 494, 5, 77, 0, 0, 494, 495, 5, 95, 0, 0, 495, 496, 5, 83, 0, 0, 496, 497, 5, 72, 0, 0, 497, 498, 5, 79, 0, 0, 498, 499, 5, 85, 0, 0, 499, 500, 5, 76, 0, 0, 500, 501, 5, 68, 0, 0, 501, 502, 5, 95, 0, 0, 502, 503, 5, 77, 0, 0, 503, 504, 5, 65, 0, 0, 504, 505, 5, 84, 0, 0, 505, 506, 5, 67, 0, 0, 506, 508, 5, 72, 0, 0, 507, 467, 1, 0, 0, 0, 507, 487, 1, 0, 0, 0, 508, 52, 1, 0, 0, 0, 509, 510, 5, 116, 0, 0, 510, 511, 5, 104, 0, 0, 511, 512, 5, 114, 0, 0, 512, 513, 5, 101, 0, 0, 513, 514, 5, 115, 0, 0, 514, 515, 5, 104, 0, 0, 515, 516, 5, 111, 0, 0, 516, 517, 5, 108, 0, 0, 517, 528, 5, 100, 0, 0, 518, 519, 5, 84, 0, 0, 519, 520, 5, 72, 0, 0, 520, 521, 5, 82, 0, 0, 521, 522, 5, 69, 0, 0, 522, 523, 5, 83, 0, 0, 523, 524, 5, 72, 0, 0, 524, 525, 5, 79, 0, 0, 525, 526, 5, 76, 0, 0, 526, 528, 5, 68, 0, 0, 527, 509, 1, 0, 0, 0, 527, 518, 1, 0, 0, 0, 528, 54, 1, 0, 0, 0, 529, 530, 5, 61, 0, 0, 530, 56, 1, 0, 0, 0, 531, 532, 5, 43, 0, 0, 532, 58, 1, 0, 0, 0, 533, 534, 5, 45, 0, 0, 534, 60, 1, 0, 0, 0, 535, 536, 5, 42, 0, 0, 536, 62, 1, 0, 0, 0, 537, 538, 5, 47, 0, 0, 538, 64, 1, 0, 0, 0, 539, 540, 5, 37, 0, 0, 540, 66, 1, 0, 0, 0, 541, 542, 5, 42, 0, 0, 542, 543, 5, 42, 0, 0, 543, 68, 1, 0, 0, 0, 544, 545, 5, 60, 0, 0, 545, 546, 5, 60, 0, 0, 546, 70, 1, 0, 0, 0, 547, 548, 5, 62, 0, 0, 548, 549, 5, 62, 0, 0, 549, 72, 1, 0, 0, 0, 550, 551, 5, 38, 0, 0, 551, 74, 1, 0, 0, 0, 552, 553, 5, 124, 0, 0, 553, 76, 1, 0, 0, 0, 554, 555, 5, 94, 0, 0, 555, 78, 1, 0, 0, 0, 556, 557, 5, 38, 0, 0, 557, 565, 5, 38, 0, 0, 558, 559, 5, 97, 0, 0, 559, 560, 5, 110, 0, 0, 560, 565, 5, 100, 0, 0, 561, 562, 5, 65, 0, 0, 562, 563, 5, 78, 0, 0, 563, 565, 5, 68, 0, 0, 564, 556, 1, 0, 0, 0, 564, 558, 1, 0, 0, 0, 564, 561, 1, 0, 0, 0, 565, 80, 1, 0, 0, 0, 566, 567, 5, 124, 0, 0, 567, 573, 5, 124, 0, 0, 568, 569, 5, 111, 0, 0, 569, 573, 5, 114, 0, 0, 570, 571, 5, 79, 0, 0, 571, 573, 5, 82, 0, 0, 572, 566, 1, 0, 0, 0, 572, 568, 1, 0, 0, 0, 572, 570, 1, 0, 0, 0, 573, 82, 1, 0, 0, 0, 574, 575, 5, 105, 0, 0, 575, 576, 5, 115, 0, 0, 576, 577, 5, 32, 0, 0, 577, 578, 5, 110, 0, 0, 578, 579, 5, 117, 0, 0, 579, 580, 5, 108, 0, 0, 580, 589, 5, 108, 0, 0, 581, 582, 5, 73, 0, 0, 582, 583, 5, 83, 0, 0, 583, 584, 5, 32, 0, 0, 584, 585, 5, 78, 0, 0, 585, 586, 5, 85, 0, 0, 586, 587, 5, 76, 0, 0, 587, 589, 5, 76, 0, 0, 588, 574, 1, 0, 0, 0, 588, 581, 1, 0, 0, 0, 589, 84, 1, 0, 0, 0, 590, 591, 5, 105, 0, 0, 591, 592, 5, 115, 0, 0, 592, 593, 5, 32, 0, 0, 593, 594, 5, 110, 0, 0, 594, 595, 5, 111, 0, 0, 595, 596, 5, 116, 0, 0, 596, 597, 5, 32, 0, 0, 597, 598, 5, 110, 0, 0, 598, 599, 5, 117, 0, 0, 599, 600, 5, 108, 0, 0, 600, 613, 5, 108, 0, 0, 601, 602, 5, 73, 0, 0, 602, 603, 5, 83, 0, 0, 603, 604, 5, 32, 0, 0, 604, 605, 5, 78, 0, 0, 605, 606, 5, 79, 0, 0, 606, 607, 5, 84, 0, 0, 607, 608, 5, 32, 0, 0, 608, 609, 5, 78, 0, 0, 609, 610, 5, 85, 0, 0, 610, 611, 5, 76, 0, 0, 611, 613, 5, 76, 0, 0, 612, 590, 1, 0, 0, 0, 612, 601, 1, 0, 0, 0, 613, 86, 1, 0, 0, 0, 614, 615, 5, 126, 0, 0, 615, 88, 1, 0, 0, 0, 616, 624, 5, 33, 0, 0, 617, 618, 5, 110, 0, 0, 618, 619, 5, 111, 0, 0, 619, 624, 5, 116, 0, 0, 620, 621, 5, 78, 0, 0, 621, 622, 5, 79, 0, 0, 622, 624, 5, 84, 0, 0, 623, 616, 1, 0, 0, 0, 623, 617, 1, 0, 0, 0, 623, 620, 1, 0, 0, 0, 624, 90, 1, 0, 0, 0, 625, 626, 5, 105, 0, 0, 626, 630, 5, 110, 0, 0, 627, 628, 5, 73, 0, 0, 628, 630, 5, 78, 0, 0, 629, 625, 1, 0, 0, 0, 629, 627, 1, 0, 0, 0, 630, 92, 1, 0, 0, 0, 631, 636, 5, 91, 0, 0, 632, 635, 3, 197, 98, 0, 633, 635, 3, 199, 99, 0, 634, 632, 1, 0, 0, 0, 634, 633, 1, 0, 0, 0, 635, 638, 1, 0, 0, 0, 636, 634, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 639, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, 639, 640, 5, 93, 0, 0, 640, 94, 1, 0, 0, 0, 641, 642, 5, 106, 0, 0, 642, 643, 5, 115, 0, 0, 643, 644, 5, 111, 0, 0, 644, 645, 5, 110, 0, 0, 645, 646, 5, 95, 0, 0, 646, 647, 5, 99, 0, 0, 647, 648, 5, 111, 0, 0, 648, 649, 5, 110, 0, 0, 649, 650, 5, 116, 0, 0, 650, 651, 5, 97, 0, 0, 651, 652, 5, 105, 0, 0, 652, 653, 5, 110, 0, 0, 653, 668, 5, 115, 0, 0, 654, 655, 5, 74, 0, 0, 655, 656, 5, 83, 0, 0, 656, 657, 5, 79, 0, 0, 657, 658, 5, 78, 0, 0, 658, 659, 5, 95, 0, 0, 659, 660, 5, 67, 0, 0, 660, 661, 5, 79, 0, 0, 661, 662, 5, 78, 0, 0, 662, 663, 5, 84, 0, 0, 663, 664, 5, 65, 0, 0, 664, 665, 5, 73, 0, 0, 665, 666, 5, 78, 0, 0, 666, 668, 5, 83, 0, 0, 667, 641, 1, 0, 0, 0, 667, 654, 1, 0, 0, 0, 668, 96, 1, 0, 0, 0, 669, 670, 5, 106, 0, 0, 670, 671, 5, 115, 0, 0, 671, 672, 5, 111, 0, 0, 672, 673, 5, 110, 0, 0, 673, 674, 5, 95, 0, 0, 674, 675, 5, 99, 0, 0, 675, 676, 5, 111, 0, 0, 676, 677, 5, 110, 0, 0, 677, 678, 5, 116, 0, 0, 678, 679, 5, 97, 0, 0, 679, 680, 5, 105, 0, 0, 680, 681, 5, 110, 0, 0, 681, 682, 5, 115, 0, 0, 682, 683, 5, 95, 0, 0, 683, 684, 5, 97, 0, 0, 684, 685, 5, 108, 0, 0, 685, 704, 5, 108, 0, 0, 686, 687, 5, 74, 0, 0, 687, 688, 5, 83, 0, 0, 688, 689, 5, 79, 0, 0, 689, 690, 5, 78, 0, 0, 690, 691, 5, 95, 0, 0, 691, 692, 5, 67, 0, 0, 692, 693, 5, 79, 0, 0, 693, 694, 5, 78, 0, 0, 694, 695, 5, 84, 0, 0, 695, 696, 5, 65, 0, 0, 696, 697, 5, 73, 0, 0, 697, 698, 5, 78, 0, 0, 698, 699, 5, 83, 0, 0, 699, 700, 5, 95, 0, 0, 700, 701, 5, 65, 0, 0, 701, 702, 5, 76, 0, 0, 702, 704, 5, 76, 0, 0, 703, 669, 1, 0, 0, 0, 703, 686, 1, 0, 0, 0, 704, 98, 1, 0, 0, 0, 705, 706, 5, 106, 0, 0, 706, 707, 5, 115, 0, 0, 707, 708, 5, 111, 0, 0, 708, 709, 5, 110, 0, 0, 709, 710, 5, 95, 0, 0, 710, 711, 5, 99, 0, 0, 711, 712, 5, 111, 0, 0, 712, 713, 5, 110, 0, 0, 713, 714, 5, 116, 0, 0, 714, 715, 5, 97, 0, 0, 715, 716, 5, 105, 0, 0, 716, 717, 5, 110, 0, 0, 717, 718, 5, 115, 0, 0, 718, 719, 5, 95, 0, 0, 719, 720, 5, 97, 0, 0, 720, 721, 5, 110, 0, 0, 721, 740, 5, 121, 0, 0, 722, 723, 5, 74, 0, 0, 723, 724, 5, 83, 0, 0, 724, 725, 5, 79, 0, 0, 725, 726, 5, 78, 0, 0, 726, 727, 5, 95, 0, 0, 727, 728, 5, 67, 0, 0, 728, 729, 5, 79, 0, 0, 729, 730, 5, 78, 0, 0, 730, 731, 5, 84, 0, 0, 731, 732, 5, 65, 0, 0, 732, 733, 5, 73, 0, 0, 733, 734, 5, 78, 0, 0, 734, 735, 5, 83, 0, 0, 735, 736, 5, 95, 0, 0, 736, 737, 5, 65, 0, 0, 737, 738, 5, 78, 0, 0, 738, 740, 5, 89, 0, 0, 739, 705, 1, 0, 0, 0, 739, 722, 1, 0, 0, 0, 740, 100, 1, 0, 0, 0, 741, 742, 5, 97, 0, 0, 742, 743, 5, 114, 0, 0, 743, 744, 5, 114, 0, 0, 744, 745, 5, 97, 0, 0, 745, 746, 5, 121, 0, 0, 746, 747, 5, 95, 0, 0, 747, 748, 5, 99, 0, 0, 748, 749, 5, 111, 0, 0, 749, 750, 5, 110, 0, 0, 750, 751, 5, 116, 0, 0, 751, 752, 5, 97, 0, 0, 752, 753, 5, 105, 0, 0, 753, 754, 5, 110, 0, 0, 754, 770, 5, 115, 0, 0, 755, 756, 5, 65, 0, 0, 756, 757, 5, 82, 0, 0, 757, 758, 5, 82, 0, 0, 758, 759, 5, 65, 0, 0, 759, 760, 5, 89, 0, 0, 760, 761, 5, 95, 0, 0, 761, 762, 5, 67, 0, 0, 762, 763, 5, 79, 0, 0, 763, 764, 5, 78, 0, 0, 764, 765, 5, 84, 0, 0, 765, 766, 5, 65, 0, 0, 766, 767, 5, 73, 0, 0, 767, 768, 5, 78, 0, 0, 768, 770, 5, 83, 0, 0, 769, 741, 1, 0, 0, 0, 769, 755, 1, 0, 0, 0, 770, 102, 1, 0, 0, 0, 771, 772, 5, 97, 0, 0, 772, 773, 5, 114, 0, 0, 773, 774, 5, 114, 0, 0, 774, 775, 5, 97, 0, 0, 775, 776, 5, 121, 0, 0, 776, 777, 5, 95, 0, 0, 777, 778, 5, 99, 0, 0, 778, 779, 5, 111, 0, 0, 779, 780, 5, 110, 0, 0, 780, 781, 5, 116, 0, 0, 781, 782, 5, 97, 0, 0, 782, 783, 5, 105, 0, 0, 783, 784, 5, 110, 0, 0, 784, 785, 5, 115, 0, 0, 785, 786, 5, 95, 0, 0, 786, 787, 5, 97, 0, 0, 787, 788, 5, 108, 0, 0, 788, 808, 5, 108, 0, 0, 789, 790, 5, 65, 0, 0, 790, 791, 5, 82, 0, 0, 791, 792, 5, 82, 0, 0, 792, 793, 5, 65, 0, 0, 793, 794, 5, 89, 0, 0, 794, 795, 5, 95, 0, 0, 795, 796, 5, 67, 0, 0, 796, 797, 5, 79, 0, 0, 797, 798, 5, 78, 0, 0, 798, 799, 5, 84, 0, 0, 799, 800, 5, 65, 0, 0, 800, 801, 5, 73, 0, 0, 801, 802, 5, 78, 0, 0, 802, 803, 5, 83, 0, 0, 803, 804, 5, 95, 0, 0, 804, 805, 5, 65, 0, 0, 805, 806, 5, 76, 0, 0, 806, 808, 5, 76, 0, 0, 807, 771, 1, 0, 0, 0, 807, 789, 1, 0, 0, 0, 808, 104, 1, 0, 0, 0, 809, 810, 5, 97, 0, 0, 810, 811, 5, 114, 0, 0, 811, 812, 5, 114, 0, 0, 812, 813, 5, 97, 0, 0, 813, 814, 5, 121, 0, 0, 814, 815, 5, 95, 0, 0, 815, 816, 5, 99, 0, 0, 816, 817, 5, 111, 0, 0, 817, 818, 5, 110, 0, 0, 818, 819, 5, 116, 0, 0, 819, 820, 5, 97, 0, 0, 820, 821, 5, 105, 0, 0, 821, 822, 5, 110, 0, 0, 822, 823, 5, 115, 0, 0, 823, 824, 5, 95, 0, 0, 824, 825, 5, 97, 0, 0, 825, 826, 5, 110, 0, 0, 826, 846, 5, 121, 0, 0, 827, 828, 5, 65, 0, 0, 828, 829, 5, 82, 0, 0, 829, 830, 5, 82, 0, 0, 830, 831, 5, 65, 0, 0, 831, 832, 5, 89, 0, 0, 832, 833, 5, 95, 0, 0, 833, 834, 5, 67, 0, 0, 834, 835, 5, 79, 0, 0, 835, 836, 5, 78, 0, 0, 836, 837, 5, 84, 0, 0, 837, 838, 5, 65, 0, 0, 838, 839, 5, 73, 0, 0, 839, 840, 5, 78, 0, 0, 840, 841, 5, 83, 0, 0, 841, 842, 5, 95, 0, 0, 842, 843, 5, 65, 0, 0, 843, 844, 5, 78, 0, 0, 844, 846, 5, 89, 0, 0, 845, 809, 1, 0, 0, 0, 845, 827, 1, 0, 0, 0, 846, 106, 1, 0, 0, 0, 847, 848, 5, 97, 0, 0, 848, 849, 5, 114, 0, 0, 849, 850, 5, 114, 0, 0, 850, 851, 5, 97, 0, 0, 851, 852, 5, 121, 0, 0, 852, 853, 5, 95, 0, 0, 853, 854, 5, 108, 0, 0, 854, 855, 5, 101, 0, 0, 855, 856, 5, 110, 0, 0, 856, 857, 5, 103, 0, 0, 857, 858, 5, 116, 0, 0, 858, 872, 5, 104, 0, 0, 859, 860, 5, 65, 0, 0, 860, 861, 5, 82, 0, 0, 861, 862, 5, 82, 0, 0, 862, 863, 5, 65, 0, 0, 863, 864, 5, 89, 0, 0, 864, 865, 5, 95, 0, 0, 865, 866, 5, 76, 0, 0, 866, 867, 5, 69, 0, 0, 867, 868, 5, 78, 0, 0, 868, 869, 5, 71, 0, 0, 869, 870, 5, 84, 0, 0, 870, 872, 5, 72, 0, 0, 871, 847, 1, 0, 0, 0, 871, 859, 1, 0, 0, 0, 872, 108, 1, 0, 0, 0, 873, 874, 5, 101, 0, 0, 874, 875, 5, 108, 0, 0, 875, 876, 5, 101, 0, 0, 876, 877, 5, 109, 0, 0, 877, 878, 5, 101, 0, 0, 878, 879, 5, 110, 0, 0, 879, 880, 5, 116, 0, 0, 880, 881, 5, 95, 0, 0, 881, 882, 5, 102, 0, 0, 882, 883, 5, 105, 0, 0, 883, 884, 5, 108, 0, 0, 884, 885, 5, 116, 0, 0, 885, 886, 5, 101, 0, 0, 886, 902, 5, 114, 0, 0, 887, 888, 5, 69, 0, 0, 888, 889, 5, 76, 0, 0, 889, 890, 5, 69, 0, 0, 890, 891, 5, 77, 0, 0, 891, 892, 5, 69, 0, 0, 892, 893, 5, 78, 0, 0, 893, 894, 5, 84, 0, 0, 894, 895, 5, 95, 0, 0, 895, 896, 5, 70, 0, 0, 896, 897, 5, 73, 0, 0, 897, 898, 5, 76, 0, 0, 898, 899, 5, 84, 0, 0, 899, 900, 5, 69, 0, 0, 900, 902, 5, 82, 0, 0, 901, 873, 1, 0, 0, 0, 901, 887, 1, 0, 0, 0, 902, 110, 1, 0, 0, 0, 903, 904, 5, 115, 0, 0, 904, 905, 5, 116, 0, 0, 905, 906, 5, 95, 0, 0, 906, 907, 5, 101, 0, 0, 907, 908, 5, 113, 0, 0, 908, 909, 5, 117, 0, 0, 909, 910, 5, 97, 0, 0, 910, 911, 5, 108, 0, 0, 911, 922, 5, 115, 0, 0, 912, 913, 5, 83, 0, 0, 913, 914, 5, 84, 0, 0, 914, 915, 5, 95, 0, 0, 915, 916, 5, 69, 0, 0, 916, 917, 5, 81, 0, 0, 917, 918, 5, 85, 0, 0, 918, 919, 5, 65, 0, 0, 919, 920, 5, 76, 0, 0, 920, 922, 5, 83, 0, 0, 921, 903, 1, 0, 0, 0, 921, 912, 1, 0, 0, 0, 922, 112, 1, 0, 0, 0, 923, 924, 5, 115, 0, 0, 924, 925, 5, 116, 0, 0, 925, 926, 5, 95, 0, 0, 926, 927, 5, 116, 0, 0, 927, 928, 5, 111, 0, 0, 928, 929, 5, 117, 0, 0, 929, 930, 5, 99, 0, 0, 930, 931, 5, 104, 0, 0, 931, 932, 5, 101, 0, 0, 932, 944, 5, 115, 0, 0, 933, 934, 5, 83, 0, 0, 934, 935, 5, 84, 0, 0, 935, 936, 5, 95, 0, 0, 936, 937, 5, 84, 0, 0, 937, 938, 5, 79, 0, 0, 938, 939, 5, 85, 0, 0, 939, 940, 5, 67, 0, 0, 940, 941, 5, 72, 0, 0, 941, 942, 5, 69, 0, 0, 942, 944, 5, 83, 0, 0, 943, 923, 1, 0, 0, 0, 943, 933, 1, 0, 0, 0, 944, 114, 1, 0, 0, 0, 945, 946, 5, 115, 0, 0, 946, 947, 5, 116, 0, 0, 947, 948, 5, 95, 0, 0, 948, 949, 5, 111, 0, 0, 949, 950, 5, 118, 0, 0, 950, 951, 5, 101, 0, 0, 951, 952, 5, 114, 0, 0, 952, 953, 5, 108, 0, 0, 953, 954, 5, 97, 0, 0, 954, 955, 5, 112, 0, 0, 955, 968, 5, 115, 0, 0, 956, 957, 5, 83, 0, 0, 957, 958, 5, 84, 0, 0, 958, 959, 5, 95, 0, 0, 959, 960, 5, 79, 0, 0, 960, 961, 5, 86, 0, 0, 961, 962, 5, 69, 0, 0, 962, 963, 5, 82, 0, 0, 963, 964, 5, 76, 0, 0, 964, 965, 5, 65, 0, 0, 965, 966, 5, 80, 0, 0, 966, 968, 5, 83, 0, 0, 967, 945, 1, 0, 0, 0, 967, 956, 1, 0, 0, 0, 968, 116, 1, 0, 0, 0, 969, 970, 5, 115, 0, 0, 970, 971, 5, 116, 0, 0, 971, 972, 5, 95, 0, 0, 972, 973, 5, 99, 0, 0, 973, 974, 5, 114, 0, 0, 974, 975, 5, 111, 0, 0, 975, 976, 5, 115, 0, 0, 976, 977, 5, 115, 0, 0, 977, 978, 5, 101, 0, 0, 978, 990, 5, 115, 0, 0, 979, 980, 5, 83, 0, 0, 980, 981, 5, 84, 0, 0, 981, 982, 5, 95, 0, 0, 982, 983, 5, 67, 0, 0, 983, 984, 5, 82, 0, 0, 984, 985, 5, 79, 0, 0, 985, 986, 5, 83, 0, 0, 986, 987, 5, 83, 0, 0, 987, 988, 5, 69, 0, 0, 988, 990, 5, 83, 0, 0, 989, 969, 1, 0, 0, 0, 989, 979, 1, 0, 0, 0, 990, 118, 1, 0, 0, 0, 991, 992, 5, 115, 0, 0, 992, 993, 5, 116, 0, 0, 993, 994, 5, 95, 0, 0, 994, 995, 5, 99, 0, 0, 995, 996, 5, 111, 0, 0, 996, 997, 5, 110, 0, 0, 997, 998, 5, 116, 0, 0, 998, 999, 5, 97, 0, 0, 999, 1000, 5, 105, 0, 0, 1000, 1001, 5, 110, 0, 0, 1001, 1014, 5, 115, 0, 0, 1002, 1003, 5, 83, 0, 0, 1003, 1004, 5, 84, 0, 0, 1004, 1005, 5, 95, 0, 0, 1005, 1006, 5, 67, 0, 0, 1006, 1007, 5, 79, 0, 0, 1007, 1008, 5, 78, 0, 0, 1008, 1009, 5, 84, 0, 0, 1009, 1010, 5, 65, 0, 0, 1010, 1011, 5, 73, 0, 0, 1011, 1012, 5, 78, 0, 0, 1012, 1014, 5, 83, 0, 0, 1013, 991, 1, 0, 0, 0, 1013, 1002, 1, 0, 0, 0, 1014, 120, 1, 0, 0, 0, 1015, 1016, 5, 115, 0, 0, 1016, 1017, 5, 116, 0, 0, 1017, 1018, 5, 95, 0, 0, 1018, 1019, 5, 105, 0, 0, 1019, 1020, 5, 110, 0, 0, 1020, 1021, 5, 116, 0, 0, 1021, 1022, 5, 101, 0, 0, 1022, 1023, 5, 114, 0, 0, 1023, 1024, 5, 115, 0, 0, 1024, 1025, 5, 101, 0, 0, 1025, 1026, 5, 99, 0, 0, 1026, 1027, 5, 116, 0, 0, 1027, 1042, 5, 115, 0, 0, 1028, 1029, 5, 83, 0, 0, 1029, 1030, 5, 84, 0, 0, 1030, 1031, 5, 95, 0, 0, 1031, 1032, 5, 73, 0, 0, 1032, 1033, 5, 78, 0, 0, 1033, 1034, 5, 84, 0, 0, 1034, 1035, 5, 69, 0, 0, 1035, 1036, 5, 82, 0, 0, 1036, 1037, 5, 83, 0, 0, 1037, 1038, 5, 69, 0, 0, 1038, 1039, 5, 67, 0, 0, 1039, 1040, 5, 84, 0, 0, 1040, 1042, 5, 83, 0, 0, 1041, 1015, 1, 0, 0, 0, 1041, 1028, 1, 0, 0, 0, 1042, 122, 1, 0, 0, 0, 1043, 1044, 5, 115, 0, 0, 1044, 1045, 5, 116, 0, 0, 1045, 1046, 5, 95, 0, 0, 1046, 1047, 5, 119, 0, 0, 1047, 1048, 5, 105, 0, 0, 1048, 1049, 5, 116, 0, 0, 1049, 1050, 5, 104, 0, 0, 1050, 1051, 5, 105, 0, 0, 1051, 1062, 5, 110, 0, 0, 1052, 1053, 5, 83, 0, 0, 1053, 1054, 5, 84, 0, 0, 1054, 1055, 5, 95, 0, 0, 1055, 1056, 5, 87, 0, 0, 1056, 1057, 5, 73, 0, 0, 1057, 1058, 5, 84, 0, 0, 1058, 1059, 5, 72, 0, 0, 1059, 1060, 5, 73, 0, 0, 1060, 1062, 5, 78, 0, 0, 1061, 1043, 1, 0, 0, 0, 1061, 1052, 1, 0, 0, 0, 1062, 124, 1, 0, 0, 0, 1063, 1064, 5, 115, 0, 0, 1064, 1065, 5, 116, 0, 0, 1065, 1066, 5, 95, 0, 0, 1066, 1067, 5, 100, 0, 0, 1067, 1068, 5, 119, 0, 0, 1068, 1069, 5, 105, 0, 0, 1069, 1070, 5, 116, 0, 0, 1070, 1071, 5, 104, 0, 0, 1071, 1072, 5, 105, 0, 0, 1072, 1084, 5, 110, 0, 0, 1073, 1074, 5, 83, 0, 0, 1074, 1075, 5, 84, 0, 0, 1075, 1076, 5, 95, 0, 0, 1076, 1077, 5, 68, 0, 0, 1077, 1078, 5, 87, 0, 0, 1078, 1079, 5, 73, 0, 0, 1079, 1080, 5, 84, 0, 0, 1080, 1081, 5, 72, 0, 0, 1081, 1082, 5, 73, 0, 0, 1082, 1084, 5, 78, 0, 0, 1083, 1063, 1, 0, 0, 0, 1083, 1073, 1, 0, 0, 0, 1084, 126, 1, 0, 0, 0, 1085, 1086, 5, 115, 0, 0, 1086, 1087, 5, 116, 0, 0, 1087, 1088, 5, 95, 0, 0, 1088, 1089, 5, 105, 0, 0, 1089, 1090, 5, 115, 0, 0, 1090, 1091, 5, 118, 0, 0, 1091, 1092, 5, 97, 0, 0, 1092, 1093, 5, 108, 0, 0, 1093, 1094, 5, 105, 0, 0, 1094, 1106, 5, 100, 0, 0, 1095, 1096, 5, 83, 0, 0, 1096, 1097, 5, 84, 0, 0, 1097, 1098, 5, 95, 0, 0, 1098, 1099, 5, 73, 0, 0, 1099, 1100, 5, 83, 0, 0, 1100, 1101, 5, 86, 0, 0, 1101, 1102, 5, 65, 0, 0, 1102, 1103, 5, 76, 0, 0, 1103, 1104, 5, 73, 0, 0, 1104, 1106, 5, 68, 0, 0, 1105, 1085, 1, 0, 0, 0, 1105, 1095, 1, 0, 0, 0, 1106, 128, 1, 0, 0, 0, 1107, 1108, 5, 116, 0, 0, 1108, 1109, 5, 114, 0, 0, 1109, 1110, 5, 117, 0, 0, 1110, 1135, 5, 101, 0, 0, 1111, 1112, 5, 84, 0, 0, 1112, 1113, 5, 114, 0, 0, 1113, 1114, 5, 117, 0, 0, 1114, 1135, 5, 101, 0, 0, 1115, 1116, 5, 84, 0, 0, 1116, 1117, 5, 82, 0, 0, 1117, 1118, 5, 85, 0, 0, 1118, 1135, 5, 69, 0, 0, 1119, 1120, 5, 102, 0, 0, 1120, 1121, 5, 97, 0, 0, 1121, 1122, 5, 108, 0, 0, 1122, 1123, 5, 115, 0, 0, 1123, 1135, 5, 101, 0, 0, 1124, 1125, 5, 70, 0, 0, 1125, 1126, 5, 97, 0, 0, 1126, 1127, 5, 108, 0, 0, 1127, 1128, 5, 115, 0, 0, 1128, 1135, 5, 101, 0, 0, 1129, 1130, 5, 70, 0, 0, 1130, 1131, 5, 65, 0, 0, 1131, 1132, 5, 76, 0, 0, 1132, 1133, 5, 83, 0, 0, 1133, 1135, 5, 69, 0, 0, 1134, 1107, 1, 0, 0, 0, 1134, 1111, 1, 0, 0, 0, 1134, 1115, 1, 0, 0, 0, 1134, 1119, 1, 0, 0, 0, 1134, 1124, 1, 0, 0, 0, 1134, 1129, 1, 0, 0, 0, 1135, 130, 1, 0, 0, 0, 1136, 1141, 3, 163, 81, 0, 1137, 1141, 3, 165, 82, 0, 1138, 1141, 3, 167, 83, 0, 1139, 1141, 3, 161, 80, 0, 1140, 1136, 1, 0, 0, 0, 1140, 1137, 1, 0, 0, 0, 1140, 1138, 1, 0, 0, 0, 1140, 1139, 1, 0, 0, 0, 1141, 132, 1, 0, 0, 0, 1142, 1145, 3, 179, 89, 0, 1143, 1145, 3, 181, 90, 0, 1144, 1142, 1, 0, 0, 0, 1144, 1143, 1, 0, 0, 0, 1145, 134, 1, 0, 0, 0, 1146, 1151, 3, 157, 78, 0, 1147, 1150, 3, 157, 78, 0, 1148, 1150, 3, 159, 79, 0, 1149, 1147, 1, 0, 0, 0, 1149, 1148, 1, 0, 0, 0, 1150, 1153, 1, 0, 0, 0, 1151, 1149, 1, 0, 0, 0, 1151, 1152, 1, 0, 0, 0, 1152, 136, 1, 0, 0, 0, 1153, 1151, 1, 0, 0, 0, 1154, 1155, 5, 36, 0, 0, 1155, 1156, 5, 109, 0, 0, 1156, 1157, 5, 101, 0, 0, 1157, 1158, 5, 116, 0, 0, 1158, 1159, 5, 97, 0, 0, 1159, 138, 1, 0, 0, 0, 1160, 1162, 3, 147, 73, 0, 1161, 1160, 1, 0, 0, 0, 1161, 1162, 1, 0, 0, 0, 1162, 1173, 1, 0, 0, 0, 1163, 1165, 5, 34, 0, 0, 1164, 1166, 3, 149, 74, 0, 1165, 1164, 1, 0, 0, 0, 1165, 1166, 1, 0, 0, 0, 1166, 1167, 1, 0, 0, 0, 1167, 1174, 5, 34, 0, 0, 1168, 1170, 5, 39, 0, 0, 1169, 1171, 3, 151, 75, 0, 1170, 1169, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 1172, 1, 0, 0, 0, 1172, 1174, 5, 39, 0, 0, 1173, 1163, 1, 0, 0, 0, 1173, 1168, 1, 0, 0, 0, 1174, 140, 1, 0, 0, 0, 1175, 1178, 3, 135, 67, 0, 1176, 1178, 3, 137, 68, 0, 1177, 1175, 1, 0, 0, 0, 1177, 1176, 1, 0, 0, 0, 1178, 1186, 1, 0, 0, 0, 1179, 1182, 5, 91, 0, 0, 1180, 1183, 3, 139, 69, 0, 1181, 1183, 3, 163, 81, 0, 1182, 1180, 1, 0, 0, 0, 1182, 1181, 1, 0, 0, 0, 1183, 1184, 1, 0, 0, 0, 1184, 1185, 5, 93, 0, 0, 1185, 1187, 1, 0, 0, 0, 1186, 1179, 1, 0, 0, 0, 1187, 1188, 1, 0, 0, 0, 1188, 1186, 1, 0, 0, 0, 1188, 1189, 1, 0, 0, 0, 1189, 142, 1, 0, 0, 0, 1190, 1191, 3, 135, 67, 0, 1191, 1192, 5, 91, 0, 0, 1192, 1193, 3, 135, 67, 0, 1193, 1194, 5, 93, 0, 0, 1194, 144, 1, 0, 0, 0, 1195, 1196, 5, 36, 0, 0, 1196, 1197, 5, 91, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1199, 3, 135, 67, 0, 1199, 1200, 5, 93, 0, 0, 1200, 146, 1, 0, 0, 0, 1201, 1202, 5, 117, 0, 0, 1202, 1205, 5, 56, 0, 0, 1203, 1205, 7, 0, 0, 0, 1204, 1201, 1, 0, 0, 0, 1204, 1203, 1, 0, 0, 0, 1205, 148, 1, 0, 0, 0, 1206, 1208, 3, 153, 76, 0, 1207, 1206, 1, 0, 0, 0, 1208, 1209, 1, 0, 0, 0, 1209, 1207, 1, 0, 0, 0, 1209, 1210, 1, 0, 0, 0, 1210, 150, 1, 0, 0, 0, 1211, 1213, 3, 155, 77, 0, 1212, 1211, 1, 0, 0, 0, 1213, 1214, 1, 0, 0, 0, 1214, 1212, 1, 0, 0, 0, 1214, 1215, 1, 0, 0, 0, 1215, 152, 1, 0, 0, 0, 1216, 1224, 8, 1, 0, 0, 1217, 1224, 3, 195, 97, 0, 1218, 1219, 5, 92, 0, 0, 1219, 1224, 5, 10, 0, 0, 1220, 1221, 5, 92, 0, 0, 1221, 1222, 5, 13, 0, 0, 1222, 1224, 5, 10, 0, 0, 1223, 1216, 1, 0, 0, 0, 1223, 1217, 1, 0, 0, 0, 1223, 1218, 1, 0, 0, 0, 1223, 1220, 1, 0, 0, 0, 1224, 154, 1, 0, 0, 0, 1225, 1233, 8, 2, 0, 0, 1226, 1233, 3, 195, 97, 0, 1227, 1228, 5, 92, 0, 0, 1228, 1233, 5, 10, 0, 0, 1229, 1230, 5, 92, 0, 0, 1230, 1231, 5, 13, 0, 0, 1231, 1233, 5, 10, 0, 0, 1232, 1225, 1, 0, 0, 0, 1232, 1226, 1, 0, 0, 0, 1232, 1227, 1, 0, 0, 0, 1232, 1229, 1, 0, 0, 0, 1233, 156, 1, 0, 0, 0, 1234, 1235, 7, 3, 0, 0, 1235, 158, 1, 0, 0, 0, 1236, 1237, 7, 4, 0, 0, 1237, 160, 1, 0, 0, 0, 1238, 1239, 5, 48, 0, 0, 1239, 1241, 7, 5, 0, 0, 1240, 1242, 7, 6, 0, 0, 1241, 1240, 1, 0, 0, 0, 1242, 1243, 1, 0, 0, 0, 1243, 1241, 1, 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 162, 1, 0, 0, 0, 1245, 1249, 3, 169, 84, 0, 1246, 1248, 3, 159, 79, 0, 1247, 1246, 1, 0, 0, 0, 1248, 1251, 1, 0, 0, 0, 1249, 1247, 1, 0, 0, 0, 1249, 1250, 1, 0, 0, 0, 1250, 1254, 1, 0, 0, 0, 1251, 1249, 1, 0, 0, 0, 1252, 1254, 5, 48, 0, 0, 1253, 1245, 1, 0, 0, 0, 1253, 1252, 1, 0, 0, 0, 1254, 164, 1, 0, 0, 0, 1255, 1259, 5, 48, 0, 0, 1256, 1258, 3, 171, 85, 0, 1257, 1256, 1, 0, 0, 0, 1258, 1261, 1, 0, 0, 0, 1259, 1257, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 166, 1, 0, 0, 0, 1261, 1259, 1, 0, 0, 0, 1262, 1263, 5, 48, 0, 0, 1263, 1264, 7, 7, 0, 0, 1264, 1265, 3, 191, 95, 0, 1265, 168, 1, 0, 0, 0, 1266, 1267, 7, 8, 0, 0, 1267, 170, 1, 0, 0, 0, 1268, 1269, 7, 9, 0, 0, 1269, 172, 1, 0, 0, 0, 1270, 1271, 7, 10, 0, 0, 1271, 174, 1, 0, 0, 0, 1272, 1273, 3, 173, 86, 0, 1273, 1274, 3, 173, 86, 0, 1274, 1275, 3, 173, 86, 0, 1275, 1276, 3, 173, 86, 0, 1276, 176, 1, 0, 0, 0, 1277, 1278, 5, 92, 0, 0, 1278, 1279, 5, 117, 0, 0, 1279, 1280, 1, 0, 0, 0, 1280, 1288, 3, 175, 87, 0, 1281, 1282, 5, 92, 0, 0, 1282, 1283, 5, 85, 0, 0, 1283, 1284, 1, 0, 0, 0, 1284, 1285, 3, 175, 87, 0, 1285, 1286, 3, 175, 87, 0, 1286, 1288, 1, 0, 0, 0, 1287, 1277, 1, 0, 0, 0, 1287, 1281, 1, 0, 0, 0, 1288, 178, 1, 0, 0, 0, 1289, 1291, 3, 183, 91, 0, 1290, 1292, 3, 185, 92, 0, 1291, 1290, 1, 0, 0, 0, 1291, 1292, 1, 0, 0, 0, 1292, 1297, 1, 0, 0, 0, 1293, 1294, 3, 187, 93, 0, 1294, 1295, 3, 185, 92, 0, 1295, 1297, 1, 0, 0, 0, 1296, 1289, 1, 0, 0, 0, 1296, 1293, 1, 0, 0, 0, 1297, 180, 1, 0, 0, 0, 1298, 1299, 5, 48, 0, 0, 1299, 1302, 7, 7, 0, 0, 1300, 1303, 3, 189, 94, 0, 1301, 1303, 3, 191, 95, 0, 1302, 1300, 1, 0, 0, 0, 1302, 1301, 1, 0, 0, 0, 1303, 1304, 1, 0, 0, 0, 1304, 1305, 3, 193, 96, 0, 1305, 182, 1, 0, 0, 0, 1306, 1308, 3, 187, 93, 0, 1307, 1306, 1, 0, 0, 0, 1307, 1308, 1, 0, 0, 0, 1308, 1309, 1, 0, 0, 0, 1309, 1310, 5, 46, 0, 0, 1310, 1315, 3, 187, 93, 0, 1311, 1312, 3, 187, 93, 0, 1312, 1313, 5, 46, 0, 0, 1313, 1315, 1, 0, 0, 0, 1314, 1307, 1, 0, 0, 0, 1314, 1311, 1, 0, 0, 0, 1315, 184, 1, 0, 0, 0, 1316, 1318, 7, 11, 0, 0, 1317, 1319, 7, 12, 0, 0, 1318, 1317, 1, 0, 0, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1320, 1, 0, 0, 0, 1320, 1321, 3, 187, 93, 0, 1321, 186, 1, 0, 0, 0, 1322, 1324, 3, 159, 79, 0, 1323, 1322, 1, 0, 0, 0, 1324, 1325, 1, 0, 0, 0, 1325, 1323, 1, 0, 0, 0, 1325, 1326, 1, 0, 0, 0, 1326, 188, 1, 0, 0, 0, 1327, 1329, 3, 191, 95, 0, 1328, 1327, 1, 0, 0, 0, 1328, 1329, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1331, 5, 46, 0, 0, 1331, 1336, 3, 191, 95, 0, 1332, 1333, 3, 191, 95, 0, 1333, 1334, 5, 46, 0, 0, 1334, 1336, 1, 0, 0, 0, 1335, 1328, 1, 0, 0, 0, 1335, 1332, 1, 0, 0, 0, 1336, 190, 1, 0, 0, 0, 1337, 1339, 3, 173, 86, 0, 1338, 1337, 1, 0, 0, 0, 1339, 1340, 1, 0, 0, 0, 1340, 1338, 1, 0, 0, 0, 1340, 1341, 1, 0, 0, 0, 1341, 192, 1, 0, 0, 0, 1342, 1344, 7, 13, 0, 0, 1343, 1345, 7, 12, 0, 0, 1344, 1343, 1, 0, 0, 0, 1344, 1345, 1, 0, 0, 0, 1345, 1346, 1, 0, 0, 0, 1346, 1347, 3, 187, 93, 0, 1347, 194, 1, 0, 0, 0, 1348, 1349, 5, 92, 0, 0, 1349, 1364, 7, 14, 0, 0, 1350, 1351, 5, 92, 0, 0, 1351, 1353, 3, 171, 85, 0, 1352, 1354, 3, 171, 85, 0, 1353, 1352, 1, 0, 0, 0, 1353, 1354, 1, 0, 0, 0, 1354, 1356, 1, 0, 0, 0, 1355, 1357, 3, 171, 85, 0, 1356, 1355, 1, 0, 0, 0, 1356, 1357, 1, 0, 0, 0, 1357, 1364, 1, 0, 0, 0, 1358, 1359, 5, 92, 0, 0, 1359, 1360, 5, 120, 0, 0, 1360, 1361, 1, 0, 0, 0, 1361, 1364, 3, 191, 95, 0, 1362, 1364, 3, 177, 88, 0, 1363, 1348, 1, 0, 0, 0, 1363, 1350, 1, 0, 0, 0, 1363, 1358, 1, 0, 0, 0, 1363, 1362, 1, 0, 0, 0, 1364, 196, 1, 0, 0, 0, 1365, 1367, 7, 15, 0, 0, 1366, 1365, 1, 0, 0, 0, 1367, 1368, 1, 0, 0, 0, 1368, 1366, 1, 0, 0, 0, 1368, 1369, 1, 0, 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 1371, 6, 98, 0, 0, 1371, 198, 1, 0, 0, 0, 1372, 1374, 5, 13, 0, 0, 1373, 1375, 5, 10, 0, 0, 1374, 1373, 1, 0, 0, 0, 1374, 1375, 1, 0, 0, 0, 1375, 1378, 1, 0, 0, 0, 1376, 1378, 5, 10, 0, 0, 1377, 1372, 1, 0, 0, 0, 1377, 1376, 1, 0, 0, 0, 1378, 1379, 1, 0, 0, 0, 1379, 1380, 6, 99, 0, 0, 1380, 200, 1, 0, 0, 0, 79, 0, 239, 253, 275, 301, 329, 349, 369, 393, 415, 439, 457, 465, 507, 527, 564, 572, 588, 612, 623, 629, 634, 636, 667, 703, 739, 769, 807, 845, 871, 901, 921, 943, 967, 989, 1013, 1041, 1061, 1083, 1105, 1134, 1140, 1144, 1149, 1151, 1161, 1165, 1170, 1173, 1177, 1182, 1188, 1204, 1209, 1214, 1223, 1232, 1243, 1249, 1253, 1259, 1287, 1291, 1296, 1302, 1307, 1314, 1318, 1325, 1328, 1335, 1340, 1344, 1353, 1356, 1363, 1368, 1374, 1377, 1, 6, 0, 0] \ No newline at end of file +[4, 0, 76, 1391, 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, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 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, 3, 13, 242, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 256, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 278, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 304, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 332, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 352, 8, 18, 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, 372, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 396, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 418, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 442, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 460, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 468, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 510, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 530, 8, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 567, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 575, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 591, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 615, 8, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 626, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 632, 8, 45, 1, 46, 1, 46, 1, 46, 5, 46, 637, 8, 46, 10, 46, 12, 46, 640, 9, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 670, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 706, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 742, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 772, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 810, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 848, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 874, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 904, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 924, 8, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 946, 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 970, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 992, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1016, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 1044, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 1064, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1086, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1108, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 1137, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1143, 8, 65, 1, 66, 1, 66, 3, 66, 1147, 8, 66, 1, 67, 1, 67, 1, 67, 5, 67, 1152, 8, 67, 10, 67, 12, 67, 1155, 9, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 3, 69, 1164, 8, 69, 1, 69, 1, 69, 3, 69, 1168, 8, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1173, 8, 69, 1, 69, 3, 69, 1176, 8, 69, 1, 70, 1, 70, 3, 70, 1180, 8, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1185, 8, 70, 1, 70, 1, 70, 4, 70, 1189, 8, 70, 11, 70, 12, 70, 1190, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 3, 74, 1215, 8, 74, 1, 75, 4, 75, 1218, 8, 75, 11, 75, 12, 75, 1219, 1, 76, 4, 76, 1223, 8, 76, 11, 76, 12, 76, 1224, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1234, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1243, 8, 78, 1, 79, 1, 79, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 4, 81, 1252, 8, 81, 11, 81, 12, 81, 1253, 1, 82, 1, 82, 5, 82, 1258, 8, 82, 10, 82, 12, 82, 1261, 9, 82, 1, 82, 3, 82, 1264, 8, 82, 1, 83, 1, 83, 5, 83, 1268, 8, 83, 10, 83, 12, 83, 1271, 9, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1298, 8, 89, 1, 90, 1, 90, 3, 90, 1302, 8, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1307, 8, 90, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 1313, 8, 91, 1, 91, 1, 91, 1, 92, 3, 92, 1318, 8, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 3, 92, 1325, 8, 92, 1, 93, 1, 93, 3, 93, 1329, 8, 93, 1, 93, 1, 93, 1, 94, 4, 94, 1334, 8, 94, 11, 94, 12, 94, 1335, 1, 95, 3, 95, 1339, 8, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1346, 8, 95, 1, 96, 4, 96, 1349, 8, 96, 11, 96, 12, 96, 1350, 1, 97, 1, 97, 3, 97, 1355, 8, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1364, 8, 98, 1, 98, 3, 98, 1367, 8, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1374, 8, 98, 1, 99, 4, 99, 1377, 8, 99, 11, 99, 12, 99, 1378, 1, 99, 1, 99, 1, 100, 1, 100, 3, 100, 1385, 8, 100, 1, 100, 3, 100, 1388, 8, 100, 1, 100, 1, 100, 0, 0, 101, 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, 0, 151, 0, 153, 0, 155, 0, 157, 0, 159, 0, 161, 0, 163, 0, 165, 0, 167, 0, 169, 0, 171, 0, 173, 0, 175, 0, 177, 0, 179, 0, 181, 0, 183, 0, 185, 0, 187, 0, 189, 0, 191, 0, 193, 0, 195, 0, 197, 0, 199, 75, 201, 76, 1, 0, 16, 3, 0, 76, 76, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 2, 0, 88, 88, 120, 120, 1, 0, 49, 57, 1, 0, 48, 55, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 2, 0, 80, 80, 112, 112, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 97, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 9, 9, 32, 32, 1458, 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, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 1, 203, 1, 0, 0, 0, 3, 205, 1, 0, 0, 0, 5, 207, 1, 0, 0, 0, 7, 209, 1, 0, 0, 0, 9, 211, 1, 0, 0, 0, 11, 213, 1, 0, 0, 0, 13, 215, 1, 0, 0, 0, 15, 217, 1, 0, 0, 0, 17, 219, 1, 0, 0, 0, 19, 222, 1, 0, 0, 0, 21, 224, 1, 0, 0, 0, 23, 227, 1, 0, 0, 0, 25, 230, 1, 0, 0, 0, 27, 241, 1, 0, 0, 0, 29, 255, 1, 0, 0, 0, 31, 277, 1, 0, 0, 0, 33, 303, 1, 0, 0, 0, 35, 331, 1, 0, 0, 0, 37, 351, 1, 0, 0, 0, 39, 371, 1, 0, 0, 0, 41, 395, 1, 0, 0, 0, 43, 417, 1, 0, 0, 0, 45, 441, 1, 0, 0, 0, 47, 459, 1, 0, 0, 0, 49, 467, 1, 0, 0, 0, 51, 509, 1, 0, 0, 0, 53, 529, 1, 0, 0, 0, 55, 531, 1, 0, 0, 0, 57, 533, 1, 0, 0, 0, 59, 535, 1, 0, 0, 0, 61, 537, 1, 0, 0, 0, 63, 539, 1, 0, 0, 0, 65, 541, 1, 0, 0, 0, 67, 543, 1, 0, 0, 0, 69, 546, 1, 0, 0, 0, 71, 549, 1, 0, 0, 0, 73, 552, 1, 0, 0, 0, 75, 554, 1, 0, 0, 0, 77, 556, 1, 0, 0, 0, 79, 566, 1, 0, 0, 0, 81, 574, 1, 0, 0, 0, 83, 590, 1, 0, 0, 0, 85, 614, 1, 0, 0, 0, 87, 616, 1, 0, 0, 0, 89, 625, 1, 0, 0, 0, 91, 631, 1, 0, 0, 0, 93, 633, 1, 0, 0, 0, 95, 669, 1, 0, 0, 0, 97, 705, 1, 0, 0, 0, 99, 741, 1, 0, 0, 0, 101, 771, 1, 0, 0, 0, 103, 809, 1, 0, 0, 0, 105, 847, 1, 0, 0, 0, 107, 873, 1, 0, 0, 0, 109, 903, 1, 0, 0, 0, 111, 923, 1, 0, 0, 0, 113, 945, 1, 0, 0, 0, 115, 969, 1, 0, 0, 0, 117, 991, 1, 0, 0, 0, 119, 1015, 1, 0, 0, 0, 121, 1043, 1, 0, 0, 0, 123, 1063, 1, 0, 0, 0, 125, 1085, 1, 0, 0, 0, 127, 1107, 1, 0, 0, 0, 129, 1136, 1, 0, 0, 0, 131, 1142, 1, 0, 0, 0, 133, 1146, 1, 0, 0, 0, 135, 1148, 1, 0, 0, 0, 137, 1156, 1, 0, 0, 0, 139, 1163, 1, 0, 0, 0, 141, 1179, 1, 0, 0, 0, 143, 1192, 1, 0, 0, 0, 145, 1200, 1, 0, 0, 0, 147, 1205, 1, 0, 0, 0, 149, 1214, 1, 0, 0, 0, 151, 1217, 1, 0, 0, 0, 153, 1222, 1, 0, 0, 0, 155, 1233, 1, 0, 0, 0, 157, 1242, 1, 0, 0, 0, 159, 1244, 1, 0, 0, 0, 161, 1246, 1, 0, 0, 0, 163, 1248, 1, 0, 0, 0, 165, 1263, 1, 0, 0, 0, 167, 1265, 1, 0, 0, 0, 169, 1272, 1, 0, 0, 0, 171, 1276, 1, 0, 0, 0, 173, 1278, 1, 0, 0, 0, 175, 1280, 1, 0, 0, 0, 177, 1282, 1, 0, 0, 0, 179, 1297, 1, 0, 0, 0, 181, 1306, 1, 0, 0, 0, 183, 1308, 1, 0, 0, 0, 185, 1324, 1, 0, 0, 0, 187, 1326, 1, 0, 0, 0, 189, 1333, 1, 0, 0, 0, 191, 1345, 1, 0, 0, 0, 193, 1348, 1, 0, 0, 0, 195, 1352, 1, 0, 0, 0, 197, 1373, 1, 0, 0, 0, 199, 1376, 1, 0, 0, 0, 201, 1387, 1, 0, 0, 0, 203, 204, 5, 40, 0, 0, 204, 2, 1, 0, 0, 0, 205, 206, 5, 41, 0, 0, 206, 4, 1, 0, 0, 0, 207, 208, 5, 91, 0, 0, 208, 6, 1, 0, 0, 0, 209, 210, 5, 44, 0, 0, 210, 8, 1, 0, 0, 0, 211, 212, 5, 93, 0, 0, 212, 10, 1, 0, 0, 0, 213, 214, 5, 123, 0, 0, 214, 12, 1, 0, 0, 0, 215, 216, 5, 125, 0, 0, 216, 14, 1, 0, 0, 0, 217, 218, 5, 60, 0, 0, 218, 16, 1, 0, 0, 0, 219, 220, 5, 60, 0, 0, 220, 221, 5, 61, 0, 0, 221, 18, 1, 0, 0, 0, 222, 223, 5, 62, 0, 0, 223, 20, 1, 0, 0, 0, 224, 225, 5, 62, 0, 0, 225, 226, 5, 61, 0, 0, 226, 22, 1, 0, 0, 0, 227, 228, 5, 61, 0, 0, 228, 229, 5, 61, 0, 0, 229, 24, 1, 0, 0, 0, 230, 231, 5, 33, 0, 0, 231, 232, 5, 61, 0, 0, 232, 26, 1, 0, 0, 0, 233, 234, 5, 108, 0, 0, 234, 235, 5, 105, 0, 0, 235, 236, 5, 107, 0, 0, 236, 242, 5, 101, 0, 0, 237, 238, 5, 76, 0, 0, 238, 239, 5, 73, 0, 0, 239, 240, 5, 75, 0, 0, 240, 242, 5, 69, 0, 0, 241, 233, 1, 0, 0, 0, 241, 237, 1, 0, 0, 0, 242, 28, 1, 0, 0, 0, 243, 244, 5, 101, 0, 0, 244, 245, 5, 120, 0, 0, 245, 246, 5, 105, 0, 0, 246, 247, 5, 115, 0, 0, 247, 248, 5, 116, 0, 0, 248, 256, 5, 115, 0, 0, 249, 250, 5, 69, 0, 0, 250, 251, 5, 88, 0, 0, 251, 252, 5, 73, 0, 0, 252, 253, 5, 83, 0, 0, 253, 254, 5, 84, 0, 0, 254, 256, 5, 83, 0, 0, 255, 243, 1, 0, 0, 0, 255, 249, 1, 0, 0, 0, 256, 30, 1, 0, 0, 0, 257, 258, 5, 116, 0, 0, 258, 259, 5, 101, 0, 0, 259, 260, 5, 120, 0, 0, 260, 261, 5, 116, 0, 0, 261, 262, 5, 95, 0, 0, 262, 263, 5, 109, 0, 0, 263, 264, 5, 97, 0, 0, 264, 265, 5, 116, 0, 0, 265, 266, 5, 99, 0, 0, 266, 278, 5, 104, 0, 0, 267, 268, 5, 84, 0, 0, 268, 269, 5, 69, 0, 0, 269, 270, 5, 88, 0, 0, 270, 271, 5, 84, 0, 0, 271, 272, 5, 95, 0, 0, 272, 273, 5, 77, 0, 0, 273, 274, 5, 65, 0, 0, 274, 275, 5, 84, 0, 0, 275, 276, 5, 67, 0, 0, 276, 278, 5, 72, 0, 0, 277, 257, 1, 0, 0, 0, 277, 267, 1, 0, 0, 0, 278, 32, 1, 0, 0, 0, 279, 280, 5, 112, 0, 0, 280, 281, 5, 104, 0, 0, 281, 282, 5, 114, 0, 0, 282, 283, 5, 97, 0, 0, 283, 284, 5, 115, 0, 0, 284, 285, 5, 101, 0, 0, 285, 286, 5, 95, 0, 0, 286, 287, 5, 109, 0, 0, 287, 288, 5, 97, 0, 0, 288, 289, 5, 116, 0, 0, 289, 290, 5, 99, 0, 0, 290, 304, 5, 104, 0, 0, 291, 292, 5, 80, 0, 0, 292, 293, 5, 72, 0, 0, 293, 294, 5, 82, 0, 0, 294, 295, 5, 65, 0, 0, 295, 296, 5, 83, 0, 0, 296, 297, 5, 69, 0, 0, 297, 298, 5, 95, 0, 0, 298, 299, 5, 77, 0, 0, 299, 300, 5, 65, 0, 0, 300, 301, 5, 84, 0, 0, 301, 302, 5, 67, 0, 0, 302, 304, 5, 72, 0, 0, 303, 279, 1, 0, 0, 0, 303, 291, 1, 0, 0, 0, 304, 34, 1, 0, 0, 0, 305, 306, 5, 114, 0, 0, 306, 307, 5, 97, 0, 0, 307, 308, 5, 110, 0, 0, 308, 309, 5, 100, 0, 0, 309, 310, 5, 111, 0, 0, 310, 311, 5, 109, 0, 0, 311, 312, 5, 95, 0, 0, 312, 313, 5, 115, 0, 0, 313, 314, 5, 97, 0, 0, 314, 315, 5, 109, 0, 0, 315, 316, 5, 112, 0, 0, 316, 317, 5, 108, 0, 0, 317, 332, 5, 101, 0, 0, 318, 319, 5, 82, 0, 0, 319, 320, 5, 65, 0, 0, 320, 321, 5, 78, 0, 0, 321, 322, 5, 68, 0, 0, 322, 323, 5, 79, 0, 0, 323, 324, 5, 77, 0, 0, 324, 325, 5, 95, 0, 0, 325, 326, 5, 83, 0, 0, 326, 327, 5, 65, 0, 0, 327, 328, 5, 77, 0, 0, 328, 329, 5, 80, 0, 0, 329, 330, 5, 76, 0, 0, 330, 332, 5, 69, 0, 0, 331, 305, 1, 0, 0, 0, 331, 318, 1, 0, 0, 0, 332, 36, 1, 0, 0, 0, 333, 334, 5, 109, 0, 0, 334, 335, 5, 97, 0, 0, 335, 336, 5, 116, 0, 0, 336, 337, 5, 99, 0, 0, 337, 338, 5, 104, 0, 0, 338, 339, 5, 95, 0, 0, 339, 340, 5, 97, 0, 0, 340, 341, 5, 108, 0, 0, 341, 352, 5, 108, 0, 0, 342, 343, 5, 77, 0, 0, 343, 344, 5, 65, 0, 0, 344, 345, 5, 84, 0, 0, 345, 346, 5, 67, 0, 0, 346, 347, 5, 72, 0, 0, 347, 348, 5, 95, 0, 0, 348, 349, 5, 65, 0, 0, 349, 350, 5, 76, 0, 0, 350, 352, 5, 76, 0, 0, 351, 333, 1, 0, 0, 0, 351, 342, 1, 0, 0, 0, 352, 38, 1, 0, 0, 0, 353, 354, 5, 109, 0, 0, 354, 355, 5, 97, 0, 0, 355, 356, 5, 116, 0, 0, 356, 357, 5, 99, 0, 0, 357, 358, 5, 104, 0, 0, 358, 359, 5, 95, 0, 0, 359, 360, 5, 97, 0, 0, 360, 361, 5, 110, 0, 0, 361, 372, 5, 121, 0, 0, 362, 363, 5, 77, 0, 0, 363, 364, 5, 65, 0, 0, 364, 365, 5, 84, 0, 0, 365, 366, 5, 67, 0, 0, 366, 367, 5, 72, 0, 0, 367, 368, 5, 95, 0, 0, 368, 369, 5, 65, 0, 0, 369, 370, 5, 78, 0, 0, 370, 372, 5, 89, 0, 0, 371, 353, 1, 0, 0, 0, 371, 362, 1, 0, 0, 0, 372, 40, 1, 0, 0, 0, 373, 374, 5, 109, 0, 0, 374, 375, 5, 97, 0, 0, 375, 376, 5, 116, 0, 0, 376, 377, 5, 99, 0, 0, 377, 378, 5, 104, 0, 0, 378, 379, 5, 95, 0, 0, 379, 380, 5, 108, 0, 0, 380, 381, 5, 101, 0, 0, 381, 382, 5, 97, 0, 0, 382, 383, 5, 115, 0, 0, 383, 396, 5, 116, 0, 0, 384, 385, 5, 77, 0, 0, 385, 386, 5, 65, 0, 0, 386, 387, 5, 84, 0, 0, 387, 388, 5, 67, 0, 0, 388, 389, 5, 72, 0, 0, 389, 390, 5, 95, 0, 0, 390, 391, 5, 76, 0, 0, 391, 392, 5, 69, 0, 0, 392, 393, 5, 65, 0, 0, 393, 394, 5, 83, 0, 0, 394, 396, 5, 84, 0, 0, 395, 373, 1, 0, 0, 0, 395, 384, 1, 0, 0, 0, 396, 42, 1, 0, 0, 0, 397, 398, 5, 109, 0, 0, 398, 399, 5, 97, 0, 0, 399, 400, 5, 116, 0, 0, 400, 401, 5, 99, 0, 0, 401, 402, 5, 104, 0, 0, 402, 403, 5, 95, 0, 0, 403, 404, 5, 109, 0, 0, 404, 405, 5, 111, 0, 0, 405, 406, 5, 115, 0, 0, 406, 418, 5, 116, 0, 0, 407, 408, 5, 77, 0, 0, 408, 409, 5, 65, 0, 0, 409, 410, 5, 84, 0, 0, 410, 411, 5, 67, 0, 0, 411, 412, 5, 72, 0, 0, 412, 413, 5, 95, 0, 0, 413, 414, 5, 77, 0, 0, 414, 415, 5, 79, 0, 0, 415, 416, 5, 83, 0, 0, 416, 418, 5, 84, 0, 0, 417, 397, 1, 0, 0, 0, 417, 407, 1, 0, 0, 0, 418, 44, 1, 0, 0, 0, 419, 420, 5, 109, 0, 0, 420, 421, 5, 97, 0, 0, 421, 422, 5, 116, 0, 0, 422, 423, 5, 99, 0, 0, 423, 424, 5, 104, 0, 0, 424, 425, 5, 95, 0, 0, 425, 426, 5, 101, 0, 0, 426, 427, 5, 120, 0, 0, 427, 428, 5, 97, 0, 0, 428, 429, 5, 99, 0, 0, 429, 442, 5, 116, 0, 0, 430, 431, 5, 77, 0, 0, 431, 432, 5, 65, 0, 0, 432, 433, 5, 84, 0, 0, 433, 434, 5, 67, 0, 0, 434, 435, 5, 72, 0, 0, 435, 436, 5, 95, 0, 0, 436, 437, 5, 69, 0, 0, 437, 438, 5, 88, 0, 0, 438, 439, 5, 65, 0, 0, 439, 440, 5, 67, 0, 0, 440, 442, 5, 84, 0, 0, 441, 419, 1, 0, 0, 0, 441, 430, 1, 0, 0, 0, 442, 46, 1, 0, 0, 0, 443, 444, 5, 105, 0, 0, 444, 445, 5, 110, 0, 0, 445, 446, 5, 116, 0, 0, 446, 447, 5, 101, 0, 0, 447, 448, 5, 114, 0, 0, 448, 449, 5, 118, 0, 0, 449, 450, 5, 97, 0, 0, 450, 460, 5, 108, 0, 0, 451, 452, 5, 73, 0, 0, 452, 453, 5, 78, 0, 0, 453, 454, 5, 84, 0, 0, 454, 455, 5, 69, 0, 0, 455, 456, 5, 82, 0, 0, 456, 457, 5, 86, 0, 0, 457, 458, 5, 65, 0, 0, 458, 460, 5, 76, 0, 0, 459, 443, 1, 0, 0, 0, 459, 451, 1, 0, 0, 0, 460, 48, 1, 0, 0, 0, 461, 462, 5, 105, 0, 0, 462, 463, 5, 115, 0, 0, 463, 468, 5, 111, 0, 0, 464, 465, 5, 73, 0, 0, 465, 466, 5, 83, 0, 0, 466, 468, 5, 79, 0, 0, 467, 461, 1, 0, 0, 0, 467, 464, 1, 0, 0, 0, 468, 50, 1, 0, 0, 0, 469, 470, 5, 109, 0, 0, 470, 471, 5, 105, 0, 0, 471, 472, 5, 110, 0, 0, 472, 473, 5, 105, 0, 0, 473, 474, 5, 109, 0, 0, 474, 475, 5, 117, 0, 0, 475, 476, 5, 109, 0, 0, 476, 477, 5, 95, 0, 0, 477, 478, 5, 115, 0, 0, 478, 479, 5, 104, 0, 0, 479, 480, 5, 111, 0, 0, 480, 481, 5, 117, 0, 0, 481, 482, 5, 108, 0, 0, 482, 483, 5, 100, 0, 0, 483, 484, 5, 95, 0, 0, 484, 485, 5, 109, 0, 0, 485, 486, 5, 97, 0, 0, 486, 487, 5, 116, 0, 0, 487, 488, 5, 99, 0, 0, 488, 510, 5, 104, 0, 0, 489, 490, 5, 77, 0, 0, 490, 491, 5, 73, 0, 0, 491, 492, 5, 78, 0, 0, 492, 493, 5, 73, 0, 0, 493, 494, 5, 77, 0, 0, 494, 495, 5, 85, 0, 0, 495, 496, 5, 77, 0, 0, 496, 497, 5, 95, 0, 0, 497, 498, 5, 83, 0, 0, 498, 499, 5, 72, 0, 0, 499, 500, 5, 79, 0, 0, 500, 501, 5, 85, 0, 0, 501, 502, 5, 76, 0, 0, 502, 503, 5, 68, 0, 0, 503, 504, 5, 95, 0, 0, 504, 505, 5, 77, 0, 0, 505, 506, 5, 65, 0, 0, 506, 507, 5, 84, 0, 0, 507, 508, 5, 67, 0, 0, 508, 510, 5, 72, 0, 0, 509, 469, 1, 0, 0, 0, 509, 489, 1, 0, 0, 0, 510, 52, 1, 0, 0, 0, 511, 512, 5, 116, 0, 0, 512, 513, 5, 104, 0, 0, 513, 514, 5, 114, 0, 0, 514, 515, 5, 101, 0, 0, 515, 516, 5, 115, 0, 0, 516, 517, 5, 104, 0, 0, 517, 518, 5, 111, 0, 0, 518, 519, 5, 108, 0, 0, 519, 530, 5, 100, 0, 0, 520, 521, 5, 84, 0, 0, 521, 522, 5, 72, 0, 0, 522, 523, 5, 82, 0, 0, 523, 524, 5, 69, 0, 0, 524, 525, 5, 83, 0, 0, 525, 526, 5, 72, 0, 0, 526, 527, 5, 79, 0, 0, 527, 528, 5, 76, 0, 0, 528, 530, 5, 68, 0, 0, 529, 511, 1, 0, 0, 0, 529, 520, 1, 0, 0, 0, 530, 54, 1, 0, 0, 0, 531, 532, 5, 61, 0, 0, 532, 56, 1, 0, 0, 0, 533, 534, 5, 43, 0, 0, 534, 58, 1, 0, 0, 0, 535, 536, 5, 45, 0, 0, 536, 60, 1, 0, 0, 0, 537, 538, 5, 42, 0, 0, 538, 62, 1, 0, 0, 0, 539, 540, 5, 47, 0, 0, 540, 64, 1, 0, 0, 0, 541, 542, 5, 37, 0, 0, 542, 66, 1, 0, 0, 0, 543, 544, 5, 42, 0, 0, 544, 545, 5, 42, 0, 0, 545, 68, 1, 0, 0, 0, 546, 547, 5, 60, 0, 0, 547, 548, 5, 60, 0, 0, 548, 70, 1, 0, 0, 0, 549, 550, 5, 62, 0, 0, 550, 551, 5, 62, 0, 0, 551, 72, 1, 0, 0, 0, 552, 553, 5, 38, 0, 0, 553, 74, 1, 0, 0, 0, 554, 555, 5, 124, 0, 0, 555, 76, 1, 0, 0, 0, 556, 557, 5, 94, 0, 0, 557, 78, 1, 0, 0, 0, 558, 559, 5, 38, 0, 0, 559, 567, 5, 38, 0, 0, 560, 561, 5, 97, 0, 0, 561, 562, 5, 110, 0, 0, 562, 567, 5, 100, 0, 0, 563, 564, 5, 65, 0, 0, 564, 565, 5, 78, 0, 0, 565, 567, 5, 68, 0, 0, 566, 558, 1, 0, 0, 0, 566, 560, 1, 0, 0, 0, 566, 563, 1, 0, 0, 0, 567, 80, 1, 0, 0, 0, 568, 569, 5, 124, 0, 0, 569, 575, 5, 124, 0, 0, 570, 571, 5, 111, 0, 0, 571, 575, 5, 114, 0, 0, 572, 573, 5, 79, 0, 0, 573, 575, 5, 82, 0, 0, 574, 568, 1, 0, 0, 0, 574, 570, 1, 0, 0, 0, 574, 572, 1, 0, 0, 0, 575, 82, 1, 0, 0, 0, 576, 577, 5, 105, 0, 0, 577, 578, 5, 115, 0, 0, 578, 579, 5, 32, 0, 0, 579, 580, 5, 110, 0, 0, 580, 581, 5, 117, 0, 0, 581, 582, 5, 108, 0, 0, 582, 591, 5, 108, 0, 0, 583, 584, 5, 73, 0, 0, 584, 585, 5, 83, 0, 0, 585, 586, 5, 32, 0, 0, 586, 587, 5, 78, 0, 0, 587, 588, 5, 85, 0, 0, 588, 589, 5, 76, 0, 0, 589, 591, 5, 76, 0, 0, 590, 576, 1, 0, 0, 0, 590, 583, 1, 0, 0, 0, 591, 84, 1, 0, 0, 0, 592, 593, 5, 105, 0, 0, 593, 594, 5, 115, 0, 0, 594, 595, 5, 32, 0, 0, 595, 596, 5, 110, 0, 0, 596, 597, 5, 111, 0, 0, 597, 598, 5, 116, 0, 0, 598, 599, 5, 32, 0, 0, 599, 600, 5, 110, 0, 0, 600, 601, 5, 117, 0, 0, 601, 602, 5, 108, 0, 0, 602, 615, 5, 108, 0, 0, 603, 604, 5, 73, 0, 0, 604, 605, 5, 83, 0, 0, 605, 606, 5, 32, 0, 0, 606, 607, 5, 78, 0, 0, 607, 608, 5, 79, 0, 0, 608, 609, 5, 84, 0, 0, 609, 610, 5, 32, 0, 0, 610, 611, 5, 78, 0, 0, 611, 612, 5, 85, 0, 0, 612, 613, 5, 76, 0, 0, 613, 615, 5, 76, 0, 0, 614, 592, 1, 0, 0, 0, 614, 603, 1, 0, 0, 0, 615, 86, 1, 0, 0, 0, 616, 617, 5, 126, 0, 0, 617, 88, 1, 0, 0, 0, 618, 626, 5, 33, 0, 0, 619, 620, 5, 110, 0, 0, 620, 621, 5, 111, 0, 0, 621, 626, 5, 116, 0, 0, 622, 623, 5, 78, 0, 0, 623, 624, 5, 79, 0, 0, 624, 626, 5, 84, 0, 0, 625, 618, 1, 0, 0, 0, 625, 619, 1, 0, 0, 0, 625, 622, 1, 0, 0, 0, 626, 90, 1, 0, 0, 0, 627, 628, 5, 105, 0, 0, 628, 632, 5, 110, 0, 0, 629, 630, 5, 73, 0, 0, 630, 632, 5, 78, 0, 0, 631, 627, 1, 0, 0, 0, 631, 629, 1, 0, 0, 0, 632, 92, 1, 0, 0, 0, 633, 638, 5, 91, 0, 0, 634, 637, 3, 199, 99, 0, 635, 637, 3, 201, 100, 0, 636, 634, 1, 0, 0, 0, 636, 635, 1, 0, 0, 0, 637, 640, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, 638, 639, 1, 0, 0, 0, 639, 641, 1, 0, 0, 0, 640, 638, 1, 0, 0, 0, 641, 642, 5, 93, 0, 0, 642, 94, 1, 0, 0, 0, 643, 644, 5, 106, 0, 0, 644, 645, 5, 115, 0, 0, 645, 646, 5, 111, 0, 0, 646, 647, 5, 110, 0, 0, 647, 648, 5, 95, 0, 0, 648, 649, 5, 99, 0, 0, 649, 650, 5, 111, 0, 0, 650, 651, 5, 110, 0, 0, 651, 652, 5, 116, 0, 0, 652, 653, 5, 97, 0, 0, 653, 654, 5, 105, 0, 0, 654, 655, 5, 110, 0, 0, 655, 670, 5, 115, 0, 0, 656, 657, 5, 74, 0, 0, 657, 658, 5, 83, 0, 0, 658, 659, 5, 79, 0, 0, 659, 660, 5, 78, 0, 0, 660, 661, 5, 95, 0, 0, 661, 662, 5, 67, 0, 0, 662, 663, 5, 79, 0, 0, 663, 664, 5, 78, 0, 0, 664, 665, 5, 84, 0, 0, 665, 666, 5, 65, 0, 0, 666, 667, 5, 73, 0, 0, 667, 668, 5, 78, 0, 0, 668, 670, 5, 83, 0, 0, 669, 643, 1, 0, 0, 0, 669, 656, 1, 0, 0, 0, 670, 96, 1, 0, 0, 0, 671, 672, 5, 106, 0, 0, 672, 673, 5, 115, 0, 0, 673, 674, 5, 111, 0, 0, 674, 675, 5, 110, 0, 0, 675, 676, 5, 95, 0, 0, 676, 677, 5, 99, 0, 0, 677, 678, 5, 111, 0, 0, 678, 679, 5, 110, 0, 0, 679, 680, 5, 116, 0, 0, 680, 681, 5, 97, 0, 0, 681, 682, 5, 105, 0, 0, 682, 683, 5, 110, 0, 0, 683, 684, 5, 115, 0, 0, 684, 685, 5, 95, 0, 0, 685, 686, 5, 97, 0, 0, 686, 687, 5, 108, 0, 0, 687, 706, 5, 108, 0, 0, 688, 689, 5, 74, 0, 0, 689, 690, 5, 83, 0, 0, 690, 691, 5, 79, 0, 0, 691, 692, 5, 78, 0, 0, 692, 693, 5, 95, 0, 0, 693, 694, 5, 67, 0, 0, 694, 695, 5, 79, 0, 0, 695, 696, 5, 78, 0, 0, 696, 697, 5, 84, 0, 0, 697, 698, 5, 65, 0, 0, 698, 699, 5, 73, 0, 0, 699, 700, 5, 78, 0, 0, 700, 701, 5, 83, 0, 0, 701, 702, 5, 95, 0, 0, 702, 703, 5, 65, 0, 0, 703, 704, 5, 76, 0, 0, 704, 706, 5, 76, 0, 0, 705, 671, 1, 0, 0, 0, 705, 688, 1, 0, 0, 0, 706, 98, 1, 0, 0, 0, 707, 708, 5, 106, 0, 0, 708, 709, 5, 115, 0, 0, 709, 710, 5, 111, 0, 0, 710, 711, 5, 110, 0, 0, 711, 712, 5, 95, 0, 0, 712, 713, 5, 99, 0, 0, 713, 714, 5, 111, 0, 0, 714, 715, 5, 110, 0, 0, 715, 716, 5, 116, 0, 0, 716, 717, 5, 97, 0, 0, 717, 718, 5, 105, 0, 0, 718, 719, 5, 110, 0, 0, 719, 720, 5, 115, 0, 0, 720, 721, 5, 95, 0, 0, 721, 722, 5, 97, 0, 0, 722, 723, 5, 110, 0, 0, 723, 742, 5, 121, 0, 0, 724, 725, 5, 74, 0, 0, 725, 726, 5, 83, 0, 0, 726, 727, 5, 79, 0, 0, 727, 728, 5, 78, 0, 0, 728, 729, 5, 95, 0, 0, 729, 730, 5, 67, 0, 0, 730, 731, 5, 79, 0, 0, 731, 732, 5, 78, 0, 0, 732, 733, 5, 84, 0, 0, 733, 734, 5, 65, 0, 0, 734, 735, 5, 73, 0, 0, 735, 736, 5, 78, 0, 0, 736, 737, 5, 83, 0, 0, 737, 738, 5, 95, 0, 0, 738, 739, 5, 65, 0, 0, 739, 740, 5, 78, 0, 0, 740, 742, 5, 89, 0, 0, 741, 707, 1, 0, 0, 0, 741, 724, 1, 0, 0, 0, 742, 100, 1, 0, 0, 0, 743, 744, 5, 97, 0, 0, 744, 745, 5, 114, 0, 0, 745, 746, 5, 114, 0, 0, 746, 747, 5, 97, 0, 0, 747, 748, 5, 121, 0, 0, 748, 749, 5, 95, 0, 0, 749, 750, 5, 99, 0, 0, 750, 751, 5, 111, 0, 0, 751, 752, 5, 110, 0, 0, 752, 753, 5, 116, 0, 0, 753, 754, 5, 97, 0, 0, 754, 755, 5, 105, 0, 0, 755, 756, 5, 110, 0, 0, 756, 772, 5, 115, 0, 0, 757, 758, 5, 65, 0, 0, 758, 759, 5, 82, 0, 0, 759, 760, 5, 82, 0, 0, 760, 761, 5, 65, 0, 0, 761, 762, 5, 89, 0, 0, 762, 763, 5, 95, 0, 0, 763, 764, 5, 67, 0, 0, 764, 765, 5, 79, 0, 0, 765, 766, 5, 78, 0, 0, 766, 767, 5, 84, 0, 0, 767, 768, 5, 65, 0, 0, 768, 769, 5, 73, 0, 0, 769, 770, 5, 78, 0, 0, 770, 772, 5, 83, 0, 0, 771, 743, 1, 0, 0, 0, 771, 757, 1, 0, 0, 0, 772, 102, 1, 0, 0, 0, 773, 774, 5, 97, 0, 0, 774, 775, 5, 114, 0, 0, 775, 776, 5, 114, 0, 0, 776, 777, 5, 97, 0, 0, 777, 778, 5, 121, 0, 0, 778, 779, 5, 95, 0, 0, 779, 780, 5, 99, 0, 0, 780, 781, 5, 111, 0, 0, 781, 782, 5, 110, 0, 0, 782, 783, 5, 116, 0, 0, 783, 784, 5, 97, 0, 0, 784, 785, 5, 105, 0, 0, 785, 786, 5, 110, 0, 0, 786, 787, 5, 115, 0, 0, 787, 788, 5, 95, 0, 0, 788, 789, 5, 97, 0, 0, 789, 790, 5, 108, 0, 0, 790, 810, 5, 108, 0, 0, 791, 792, 5, 65, 0, 0, 792, 793, 5, 82, 0, 0, 793, 794, 5, 82, 0, 0, 794, 795, 5, 65, 0, 0, 795, 796, 5, 89, 0, 0, 796, 797, 5, 95, 0, 0, 797, 798, 5, 67, 0, 0, 798, 799, 5, 79, 0, 0, 799, 800, 5, 78, 0, 0, 800, 801, 5, 84, 0, 0, 801, 802, 5, 65, 0, 0, 802, 803, 5, 73, 0, 0, 803, 804, 5, 78, 0, 0, 804, 805, 5, 83, 0, 0, 805, 806, 5, 95, 0, 0, 806, 807, 5, 65, 0, 0, 807, 808, 5, 76, 0, 0, 808, 810, 5, 76, 0, 0, 809, 773, 1, 0, 0, 0, 809, 791, 1, 0, 0, 0, 810, 104, 1, 0, 0, 0, 811, 812, 5, 97, 0, 0, 812, 813, 5, 114, 0, 0, 813, 814, 5, 114, 0, 0, 814, 815, 5, 97, 0, 0, 815, 816, 5, 121, 0, 0, 816, 817, 5, 95, 0, 0, 817, 818, 5, 99, 0, 0, 818, 819, 5, 111, 0, 0, 819, 820, 5, 110, 0, 0, 820, 821, 5, 116, 0, 0, 821, 822, 5, 97, 0, 0, 822, 823, 5, 105, 0, 0, 823, 824, 5, 110, 0, 0, 824, 825, 5, 115, 0, 0, 825, 826, 5, 95, 0, 0, 826, 827, 5, 97, 0, 0, 827, 828, 5, 110, 0, 0, 828, 848, 5, 121, 0, 0, 829, 830, 5, 65, 0, 0, 830, 831, 5, 82, 0, 0, 831, 832, 5, 82, 0, 0, 832, 833, 5, 65, 0, 0, 833, 834, 5, 89, 0, 0, 834, 835, 5, 95, 0, 0, 835, 836, 5, 67, 0, 0, 836, 837, 5, 79, 0, 0, 837, 838, 5, 78, 0, 0, 838, 839, 5, 84, 0, 0, 839, 840, 5, 65, 0, 0, 840, 841, 5, 73, 0, 0, 841, 842, 5, 78, 0, 0, 842, 843, 5, 83, 0, 0, 843, 844, 5, 95, 0, 0, 844, 845, 5, 65, 0, 0, 845, 846, 5, 78, 0, 0, 846, 848, 5, 89, 0, 0, 847, 811, 1, 0, 0, 0, 847, 829, 1, 0, 0, 0, 848, 106, 1, 0, 0, 0, 849, 850, 5, 97, 0, 0, 850, 851, 5, 114, 0, 0, 851, 852, 5, 114, 0, 0, 852, 853, 5, 97, 0, 0, 853, 854, 5, 121, 0, 0, 854, 855, 5, 95, 0, 0, 855, 856, 5, 108, 0, 0, 856, 857, 5, 101, 0, 0, 857, 858, 5, 110, 0, 0, 858, 859, 5, 103, 0, 0, 859, 860, 5, 116, 0, 0, 860, 874, 5, 104, 0, 0, 861, 862, 5, 65, 0, 0, 862, 863, 5, 82, 0, 0, 863, 864, 5, 82, 0, 0, 864, 865, 5, 65, 0, 0, 865, 866, 5, 89, 0, 0, 866, 867, 5, 95, 0, 0, 867, 868, 5, 76, 0, 0, 868, 869, 5, 69, 0, 0, 869, 870, 5, 78, 0, 0, 870, 871, 5, 71, 0, 0, 871, 872, 5, 84, 0, 0, 872, 874, 5, 72, 0, 0, 873, 849, 1, 0, 0, 0, 873, 861, 1, 0, 0, 0, 874, 108, 1, 0, 0, 0, 875, 876, 5, 101, 0, 0, 876, 877, 5, 108, 0, 0, 877, 878, 5, 101, 0, 0, 878, 879, 5, 109, 0, 0, 879, 880, 5, 101, 0, 0, 880, 881, 5, 110, 0, 0, 881, 882, 5, 116, 0, 0, 882, 883, 5, 95, 0, 0, 883, 884, 5, 102, 0, 0, 884, 885, 5, 105, 0, 0, 885, 886, 5, 108, 0, 0, 886, 887, 5, 116, 0, 0, 887, 888, 5, 101, 0, 0, 888, 904, 5, 114, 0, 0, 889, 890, 5, 69, 0, 0, 890, 891, 5, 76, 0, 0, 891, 892, 5, 69, 0, 0, 892, 893, 5, 77, 0, 0, 893, 894, 5, 69, 0, 0, 894, 895, 5, 78, 0, 0, 895, 896, 5, 84, 0, 0, 896, 897, 5, 95, 0, 0, 897, 898, 5, 70, 0, 0, 898, 899, 5, 73, 0, 0, 899, 900, 5, 76, 0, 0, 900, 901, 5, 84, 0, 0, 901, 902, 5, 69, 0, 0, 902, 904, 5, 82, 0, 0, 903, 875, 1, 0, 0, 0, 903, 889, 1, 0, 0, 0, 904, 110, 1, 0, 0, 0, 905, 906, 5, 115, 0, 0, 906, 907, 5, 116, 0, 0, 907, 908, 5, 95, 0, 0, 908, 909, 5, 101, 0, 0, 909, 910, 5, 113, 0, 0, 910, 911, 5, 117, 0, 0, 911, 912, 5, 97, 0, 0, 912, 913, 5, 108, 0, 0, 913, 924, 5, 115, 0, 0, 914, 915, 5, 83, 0, 0, 915, 916, 5, 84, 0, 0, 916, 917, 5, 95, 0, 0, 917, 918, 5, 69, 0, 0, 918, 919, 5, 81, 0, 0, 919, 920, 5, 85, 0, 0, 920, 921, 5, 65, 0, 0, 921, 922, 5, 76, 0, 0, 922, 924, 5, 83, 0, 0, 923, 905, 1, 0, 0, 0, 923, 914, 1, 0, 0, 0, 924, 112, 1, 0, 0, 0, 925, 926, 5, 115, 0, 0, 926, 927, 5, 116, 0, 0, 927, 928, 5, 95, 0, 0, 928, 929, 5, 116, 0, 0, 929, 930, 5, 111, 0, 0, 930, 931, 5, 117, 0, 0, 931, 932, 5, 99, 0, 0, 932, 933, 5, 104, 0, 0, 933, 934, 5, 101, 0, 0, 934, 946, 5, 115, 0, 0, 935, 936, 5, 83, 0, 0, 936, 937, 5, 84, 0, 0, 937, 938, 5, 95, 0, 0, 938, 939, 5, 84, 0, 0, 939, 940, 5, 79, 0, 0, 940, 941, 5, 85, 0, 0, 941, 942, 5, 67, 0, 0, 942, 943, 5, 72, 0, 0, 943, 944, 5, 69, 0, 0, 944, 946, 5, 83, 0, 0, 945, 925, 1, 0, 0, 0, 945, 935, 1, 0, 0, 0, 946, 114, 1, 0, 0, 0, 947, 948, 5, 115, 0, 0, 948, 949, 5, 116, 0, 0, 949, 950, 5, 95, 0, 0, 950, 951, 5, 111, 0, 0, 951, 952, 5, 118, 0, 0, 952, 953, 5, 101, 0, 0, 953, 954, 5, 114, 0, 0, 954, 955, 5, 108, 0, 0, 955, 956, 5, 97, 0, 0, 956, 957, 5, 112, 0, 0, 957, 970, 5, 115, 0, 0, 958, 959, 5, 83, 0, 0, 959, 960, 5, 84, 0, 0, 960, 961, 5, 95, 0, 0, 961, 962, 5, 79, 0, 0, 962, 963, 5, 86, 0, 0, 963, 964, 5, 69, 0, 0, 964, 965, 5, 82, 0, 0, 965, 966, 5, 76, 0, 0, 966, 967, 5, 65, 0, 0, 967, 968, 5, 80, 0, 0, 968, 970, 5, 83, 0, 0, 969, 947, 1, 0, 0, 0, 969, 958, 1, 0, 0, 0, 970, 116, 1, 0, 0, 0, 971, 972, 5, 115, 0, 0, 972, 973, 5, 116, 0, 0, 973, 974, 5, 95, 0, 0, 974, 975, 5, 99, 0, 0, 975, 976, 5, 114, 0, 0, 976, 977, 5, 111, 0, 0, 977, 978, 5, 115, 0, 0, 978, 979, 5, 115, 0, 0, 979, 980, 5, 101, 0, 0, 980, 992, 5, 115, 0, 0, 981, 982, 5, 83, 0, 0, 982, 983, 5, 84, 0, 0, 983, 984, 5, 95, 0, 0, 984, 985, 5, 67, 0, 0, 985, 986, 5, 82, 0, 0, 986, 987, 5, 79, 0, 0, 987, 988, 5, 83, 0, 0, 988, 989, 5, 83, 0, 0, 989, 990, 5, 69, 0, 0, 990, 992, 5, 83, 0, 0, 991, 971, 1, 0, 0, 0, 991, 981, 1, 0, 0, 0, 992, 118, 1, 0, 0, 0, 993, 994, 5, 115, 0, 0, 994, 995, 5, 116, 0, 0, 995, 996, 5, 95, 0, 0, 996, 997, 5, 99, 0, 0, 997, 998, 5, 111, 0, 0, 998, 999, 5, 110, 0, 0, 999, 1000, 5, 116, 0, 0, 1000, 1001, 5, 97, 0, 0, 1001, 1002, 5, 105, 0, 0, 1002, 1003, 5, 110, 0, 0, 1003, 1016, 5, 115, 0, 0, 1004, 1005, 5, 83, 0, 0, 1005, 1006, 5, 84, 0, 0, 1006, 1007, 5, 95, 0, 0, 1007, 1008, 5, 67, 0, 0, 1008, 1009, 5, 79, 0, 0, 1009, 1010, 5, 78, 0, 0, 1010, 1011, 5, 84, 0, 0, 1011, 1012, 5, 65, 0, 0, 1012, 1013, 5, 73, 0, 0, 1013, 1014, 5, 78, 0, 0, 1014, 1016, 5, 83, 0, 0, 1015, 993, 1, 0, 0, 0, 1015, 1004, 1, 0, 0, 0, 1016, 120, 1, 0, 0, 0, 1017, 1018, 5, 115, 0, 0, 1018, 1019, 5, 116, 0, 0, 1019, 1020, 5, 95, 0, 0, 1020, 1021, 5, 105, 0, 0, 1021, 1022, 5, 110, 0, 0, 1022, 1023, 5, 116, 0, 0, 1023, 1024, 5, 101, 0, 0, 1024, 1025, 5, 114, 0, 0, 1025, 1026, 5, 115, 0, 0, 1026, 1027, 5, 101, 0, 0, 1027, 1028, 5, 99, 0, 0, 1028, 1029, 5, 116, 0, 0, 1029, 1044, 5, 115, 0, 0, 1030, 1031, 5, 83, 0, 0, 1031, 1032, 5, 84, 0, 0, 1032, 1033, 5, 95, 0, 0, 1033, 1034, 5, 73, 0, 0, 1034, 1035, 5, 78, 0, 0, 1035, 1036, 5, 84, 0, 0, 1036, 1037, 5, 69, 0, 0, 1037, 1038, 5, 82, 0, 0, 1038, 1039, 5, 83, 0, 0, 1039, 1040, 5, 69, 0, 0, 1040, 1041, 5, 67, 0, 0, 1041, 1042, 5, 84, 0, 0, 1042, 1044, 5, 83, 0, 0, 1043, 1017, 1, 0, 0, 0, 1043, 1030, 1, 0, 0, 0, 1044, 122, 1, 0, 0, 0, 1045, 1046, 5, 115, 0, 0, 1046, 1047, 5, 116, 0, 0, 1047, 1048, 5, 95, 0, 0, 1048, 1049, 5, 119, 0, 0, 1049, 1050, 5, 105, 0, 0, 1050, 1051, 5, 116, 0, 0, 1051, 1052, 5, 104, 0, 0, 1052, 1053, 5, 105, 0, 0, 1053, 1064, 5, 110, 0, 0, 1054, 1055, 5, 83, 0, 0, 1055, 1056, 5, 84, 0, 0, 1056, 1057, 5, 95, 0, 0, 1057, 1058, 5, 87, 0, 0, 1058, 1059, 5, 73, 0, 0, 1059, 1060, 5, 84, 0, 0, 1060, 1061, 5, 72, 0, 0, 1061, 1062, 5, 73, 0, 0, 1062, 1064, 5, 78, 0, 0, 1063, 1045, 1, 0, 0, 0, 1063, 1054, 1, 0, 0, 0, 1064, 124, 1, 0, 0, 0, 1065, 1066, 5, 115, 0, 0, 1066, 1067, 5, 116, 0, 0, 1067, 1068, 5, 95, 0, 0, 1068, 1069, 5, 100, 0, 0, 1069, 1070, 5, 119, 0, 0, 1070, 1071, 5, 105, 0, 0, 1071, 1072, 5, 116, 0, 0, 1072, 1073, 5, 104, 0, 0, 1073, 1074, 5, 105, 0, 0, 1074, 1086, 5, 110, 0, 0, 1075, 1076, 5, 83, 0, 0, 1076, 1077, 5, 84, 0, 0, 1077, 1078, 5, 95, 0, 0, 1078, 1079, 5, 68, 0, 0, 1079, 1080, 5, 87, 0, 0, 1080, 1081, 5, 73, 0, 0, 1081, 1082, 5, 84, 0, 0, 1082, 1083, 5, 72, 0, 0, 1083, 1084, 5, 73, 0, 0, 1084, 1086, 5, 78, 0, 0, 1085, 1065, 1, 0, 0, 0, 1085, 1075, 1, 0, 0, 0, 1086, 126, 1, 0, 0, 0, 1087, 1088, 5, 115, 0, 0, 1088, 1089, 5, 116, 0, 0, 1089, 1090, 5, 95, 0, 0, 1090, 1091, 5, 105, 0, 0, 1091, 1092, 5, 115, 0, 0, 1092, 1093, 5, 118, 0, 0, 1093, 1094, 5, 97, 0, 0, 1094, 1095, 5, 108, 0, 0, 1095, 1096, 5, 105, 0, 0, 1096, 1108, 5, 100, 0, 0, 1097, 1098, 5, 83, 0, 0, 1098, 1099, 5, 84, 0, 0, 1099, 1100, 5, 95, 0, 0, 1100, 1101, 5, 73, 0, 0, 1101, 1102, 5, 83, 0, 0, 1102, 1103, 5, 86, 0, 0, 1103, 1104, 5, 65, 0, 0, 1104, 1105, 5, 76, 0, 0, 1105, 1106, 5, 73, 0, 0, 1106, 1108, 5, 68, 0, 0, 1107, 1087, 1, 0, 0, 0, 1107, 1097, 1, 0, 0, 0, 1108, 128, 1, 0, 0, 0, 1109, 1110, 5, 116, 0, 0, 1110, 1111, 5, 114, 0, 0, 1111, 1112, 5, 117, 0, 0, 1112, 1137, 5, 101, 0, 0, 1113, 1114, 5, 84, 0, 0, 1114, 1115, 5, 114, 0, 0, 1115, 1116, 5, 117, 0, 0, 1116, 1137, 5, 101, 0, 0, 1117, 1118, 5, 84, 0, 0, 1118, 1119, 5, 82, 0, 0, 1119, 1120, 5, 85, 0, 0, 1120, 1137, 5, 69, 0, 0, 1121, 1122, 5, 102, 0, 0, 1122, 1123, 5, 97, 0, 0, 1123, 1124, 5, 108, 0, 0, 1124, 1125, 5, 115, 0, 0, 1125, 1137, 5, 101, 0, 0, 1126, 1127, 5, 70, 0, 0, 1127, 1128, 5, 97, 0, 0, 1128, 1129, 5, 108, 0, 0, 1129, 1130, 5, 115, 0, 0, 1130, 1137, 5, 101, 0, 0, 1131, 1132, 5, 70, 0, 0, 1132, 1133, 5, 65, 0, 0, 1133, 1134, 5, 76, 0, 0, 1134, 1135, 5, 83, 0, 0, 1135, 1137, 5, 69, 0, 0, 1136, 1109, 1, 0, 0, 0, 1136, 1113, 1, 0, 0, 0, 1136, 1117, 1, 0, 0, 0, 1136, 1121, 1, 0, 0, 0, 1136, 1126, 1, 0, 0, 0, 1136, 1131, 1, 0, 0, 0, 1137, 130, 1, 0, 0, 0, 1138, 1143, 3, 165, 82, 0, 1139, 1143, 3, 167, 83, 0, 1140, 1143, 3, 169, 84, 0, 1141, 1143, 3, 163, 81, 0, 1142, 1138, 1, 0, 0, 0, 1142, 1139, 1, 0, 0, 0, 1142, 1140, 1, 0, 0, 0, 1142, 1141, 1, 0, 0, 0, 1143, 132, 1, 0, 0, 0, 1144, 1147, 3, 181, 90, 0, 1145, 1147, 3, 183, 91, 0, 1146, 1144, 1, 0, 0, 0, 1146, 1145, 1, 0, 0, 0, 1147, 134, 1, 0, 0, 0, 1148, 1153, 3, 159, 79, 0, 1149, 1152, 3, 159, 79, 0, 1150, 1152, 3, 161, 80, 0, 1151, 1149, 1, 0, 0, 0, 1151, 1150, 1, 0, 0, 0, 1152, 1155, 1, 0, 0, 0, 1153, 1151, 1, 0, 0, 0, 1153, 1154, 1, 0, 0, 0, 1154, 136, 1, 0, 0, 0, 1155, 1153, 1, 0, 0, 0, 1156, 1157, 5, 36, 0, 0, 1157, 1158, 5, 109, 0, 0, 1158, 1159, 5, 101, 0, 0, 1159, 1160, 5, 116, 0, 0, 1160, 1161, 5, 97, 0, 0, 1161, 138, 1, 0, 0, 0, 1162, 1164, 3, 149, 74, 0, 1163, 1162, 1, 0, 0, 0, 1163, 1164, 1, 0, 0, 0, 1164, 1175, 1, 0, 0, 0, 1165, 1167, 5, 34, 0, 0, 1166, 1168, 3, 151, 75, 0, 1167, 1166, 1, 0, 0, 0, 1167, 1168, 1, 0, 0, 0, 1168, 1169, 1, 0, 0, 0, 1169, 1176, 5, 34, 0, 0, 1170, 1172, 5, 39, 0, 0, 1171, 1173, 3, 153, 76, 0, 1172, 1171, 1, 0, 0, 0, 1172, 1173, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 1176, 5, 39, 0, 0, 1175, 1165, 1, 0, 0, 0, 1175, 1170, 1, 0, 0, 0, 1176, 140, 1, 0, 0, 0, 1177, 1180, 3, 135, 67, 0, 1178, 1180, 3, 137, 68, 0, 1179, 1177, 1, 0, 0, 0, 1179, 1178, 1, 0, 0, 0, 1180, 1188, 1, 0, 0, 0, 1181, 1184, 5, 91, 0, 0, 1182, 1185, 3, 139, 69, 0, 1183, 1185, 3, 165, 82, 0, 1184, 1182, 1, 0, 0, 0, 1184, 1183, 1, 0, 0, 0, 1185, 1186, 1, 0, 0, 0, 1186, 1187, 5, 93, 0, 0, 1187, 1189, 1, 0, 0, 0, 1188, 1181, 1, 0, 0, 0, 1189, 1190, 1, 0, 0, 0, 1190, 1188, 1, 0, 0, 0, 1190, 1191, 1, 0, 0, 0, 1191, 142, 1, 0, 0, 0, 1192, 1193, 3, 135, 67, 0, 1193, 1194, 5, 91, 0, 0, 1194, 1195, 3, 165, 82, 0, 1195, 1196, 5, 93, 0, 0, 1196, 1197, 5, 91, 0, 0, 1197, 1198, 3, 135, 67, 0, 1198, 1199, 5, 93, 0, 0, 1199, 144, 1, 0, 0, 0, 1200, 1201, 3, 135, 67, 0, 1201, 1202, 5, 91, 0, 0, 1202, 1203, 3, 135, 67, 0, 1203, 1204, 5, 93, 0, 0, 1204, 146, 1, 0, 0, 0, 1205, 1206, 5, 36, 0, 0, 1206, 1207, 5, 91, 0, 0, 1207, 1208, 1, 0, 0, 0, 1208, 1209, 3, 135, 67, 0, 1209, 1210, 5, 93, 0, 0, 1210, 148, 1, 0, 0, 0, 1211, 1212, 5, 117, 0, 0, 1212, 1215, 5, 56, 0, 0, 1213, 1215, 7, 0, 0, 0, 1214, 1211, 1, 0, 0, 0, 1214, 1213, 1, 0, 0, 0, 1215, 150, 1, 0, 0, 0, 1216, 1218, 3, 155, 77, 0, 1217, 1216, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 1217, 1, 0, 0, 0, 1219, 1220, 1, 0, 0, 0, 1220, 152, 1, 0, 0, 0, 1221, 1223, 3, 157, 78, 0, 1222, 1221, 1, 0, 0, 0, 1223, 1224, 1, 0, 0, 0, 1224, 1222, 1, 0, 0, 0, 1224, 1225, 1, 0, 0, 0, 1225, 154, 1, 0, 0, 0, 1226, 1234, 8, 1, 0, 0, 1227, 1234, 3, 197, 98, 0, 1228, 1229, 5, 92, 0, 0, 1229, 1234, 5, 10, 0, 0, 1230, 1231, 5, 92, 0, 0, 1231, 1232, 5, 13, 0, 0, 1232, 1234, 5, 10, 0, 0, 1233, 1226, 1, 0, 0, 0, 1233, 1227, 1, 0, 0, 0, 1233, 1228, 1, 0, 0, 0, 1233, 1230, 1, 0, 0, 0, 1234, 156, 1, 0, 0, 0, 1235, 1243, 8, 2, 0, 0, 1236, 1243, 3, 197, 98, 0, 1237, 1238, 5, 92, 0, 0, 1238, 1243, 5, 10, 0, 0, 1239, 1240, 5, 92, 0, 0, 1240, 1241, 5, 13, 0, 0, 1241, 1243, 5, 10, 0, 0, 1242, 1235, 1, 0, 0, 0, 1242, 1236, 1, 0, 0, 0, 1242, 1237, 1, 0, 0, 0, 1242, 1239, 1, 0, 0, 0, 1243, 158, 1, 0, 0, 0, 1244, 1245, 7, 3, 0, 0, 1245, 160, 1, 0, 0, 0, 1246, 1247, 7, 4, 0, 0, 1247, 162, 1, 0, 0, 0, 1248, 1249, 5, 48, 0, 0, 1249, 1251, 7, 5, 0, 0, 1250, 1252, 7, 6, 0, 0, 1251, 1250, 1, 0, 0, 0, 1252, 1253, 1, 0, 0, 0, 1253, 1251, 1, 0, 0, 0, 1253, 1254, 1, 0, 0, 0, 1254, 164, 1, 0, 0, 0, 1255, 1259, 3, 171, 85, 0, 1256, 1258, 3, 161, 80, 0, 1257, 1256, 1, 0, 0, 0, 1258, 1261, 1, 0, 0, 0, 1259, 1257, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1264, 1, 0, 0, 0, 1261, 1259, 1, 0, 0, 0, 1262, 1264, 5, 48, 0, 0, 1263, 1255, 1, 0, 0, 0, 1263, 1262, 1, 0, 0, 0, 1264, 166, 1, 0, 0, 0, 1265, 1269, 5, 48, 0, 0, 1266, 1268, 3, 173, 86, 0, 1267, 1266, 1, 0, 0, 0, 1268, 1271, 1, 0, 0, 0, 1269, 1267, 1, 0, 0, 0, 1269, 1270, 1, 0, 0, 0, 1270, 168, 1, 0, 0, 0, 1271, 1269, 1, 0, 0, 0, 1272, 1273, 5, 48, 0, 0, 1273, 1274, 7, 7, 0, 0, 1274, 1275, 3, 193, 96, 0, 1275, 170, 1, 0, 0, 0, 1276, 1277, 7, 8, 0, 0, 1277, 172, 1, 0, 0, 0, 1278, 1279, 7, 9, 0, 0, 1279, 174, 1, 0, 0, 0, 1280, 1281, 7, 10, 0, 0, 1281, 176, 1, 0, 0, 0, 1282, 1283, 3, 175, 87, 0, 1283, 1284, 3, 175, 87, 0, 1284, 1285, 3, 175, 87, 0, 1285, 1286, 3, 175, 87, 0, 1286, 178, 1, 0, 0, 0, 1287, 1288, 5, 92, 0, 0, 1288, 1289, 5, 117, 0, 0, 1289, 1290, 1, 0, 0, 0, 1290, 1298, 3, 177, 88, 0, 1291, 1292, 5, 92, 0, 0, 1292, 1293, 5, 85, 0, 0, 1293, 1294, 1, 0, 0, 0, 1294, 1295, 3, 177, 88, 0, 1295, 1296, 3, 177, 88, 0, 1296, 1298, 1, 0, 0, 0, 1297, 1287, 1, 0, 0, 0, 1297, 1291, 1, 0, 0, 0, 1298, 180, 1, 0, 0, 0, 1299, 1301, 3, 185, 92, 0, 1300, 1302, 3, 187, 93, 0, 1301, 1300, 1, 0, 0, 0, 1301, 1302, 1, 0, 0, 0, 1302, 1307, 1, 0, 0, 0, 1303, 1304, 3, 189, 94, 0, 1304, 1305, 3, 187, 93, 0, 1305, 1307, 1, 0, 0, 0, 1306, 1299, 1, 0, 0, 0, 1306, 1303, 1, 0, 0, 0, 1307, 182, 1, 0, 0, 0, 1308, 1309, 5, 48, 0, 0, 1309, 1312, 7, 7, 0, 0, 1310, 1313, 3, 191, 95, 0, 1311, 1313, 3, 193, 96, 0, 1312, 1310, 1, 0, 0, 0, 1312, 1311, 1, 0, 0, 0, 1313, 1314, 1, 0, 0, 0, 1314, 1315, 3, 195, 97, 0, 1315, 184, 1, 0, 0, 0, 1316, 1318, 3, 189, 94, 0, 1317, 1316, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1320, 5, 46, 0, 0, 1320, 1325, 3, 189, 94, 0, 1321, 1322, 3, 189, 94, 0, 1322, 1323, 5, 46, 0, 0, 1323, 1325, 1, 0, 0, 0, 1324, 1317, 1, 0, 0, 0, 1324, 1321, 1, 0, 0, 0, 1325, 186, 1, 0, 0, 0, 1326, 1328, 7, 11, 0, 0, 1327, 1329, 7, 12, 0, 0, 1328, 1327, 1, 0, 0, 0, 1328, 1329, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1331, 3, 189, 94, 0, 1331, 188, 1, 0, 0, 0, 1332, 1334, 3, 161, 80, 0, 1333, 1332, 1, 0, 0, 0, 1334, 1335, 1, 0, 0, 0, 1335, 1333, 1, 0, 0, 0, 1335, 1336, 1, 0, 0, 0, 1336, 190, 1, 0, 0, 0, 1337, 1339, 3, 193, 96, 0, 1338, 1337, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 1340, 1, 0, 0, 0, 1340, 1341, 5, 46, 0, 0, 1341, 1346, 3, 193, 96, 0, 1342, 1343, 3, 193, 96, 0, 1343, 1344, 5, 46, 0, 0, 1344, 1346, 1, 0, 0, 0, 1345, 1338, 1, 0, 0, 0, 1345, 1342, 1, 0, 0, 0, 1346, 192, 1, 0, 0, 0, 1347, 1349, 3, 175, 87, 0, 1348, 1347, 1, 0, 0, 0, 1349, 1350, 1, 0, 0, 0, 1350, 1348, 1, 0, 0, 0, 1350, 1351, 1, 0, 0, 0, 1351, 194, 1, 0, 0, 0, 1352, 1354, 7, 13, 0, 0, 1353, 1355, 7, 12, 0, 0, 1354, 1353, 1, 0, 0, 0, 1354, 1355, 1, 0, 0, 0, 1355, 1356, 1, 0, 0, 0, 1356, 1357, 3, 189, 94, 0, 1357, 196, 1, 0, 0, 0, 1358, 1359, 5, 92, 0, 0, 1359, 1374, 7, 14, 0, 0, 1360, 1361, 5, 92, 0, 0, 1361, 1363, 3, 173, 86, 0, 1362, 1364, 3, 173, 86, 0, 1363, 1362, 1, 0, 0, 0, 1363, 1364, 1, 0, 0, 0, 1364, 1366, 1, 0, 0, 0, 1365, 1367, 3, 173, 86, 0, 1366, 1365, 1, 0, 0, 0, 1366, 1367, 1, 0, 0, 0, 1367, 1374, 1, 0, 0, 0, 1368, 1369, 5, 92, 0, 0, 1369, 1370, 5, 120, 0, 0, 1370, 1371, 1, 0, 0, 0, 1371, 1374, 3, 193, 96, 0, 1372, 1374, 3, 179, 89, 0, 1373, 1358, 1, 0, 0, 0, 1373, 1360, 1, 0, 0, 0, 1373, 1368, 1, 0, 0, 0, 1373, 1372, 1, 0, 0, 0, 1374, 198, 1, 0, 0, 0, 1375, 1377, 7, 15, 0, 0, 1376, 1375, 1, 0, 0, 0, 1377, 1378, 1, 0, 0, 0, 1378, 1376, 1, 0, 0, 0, 1378, 1379, 1, 0, 0, 0, 1379, 1380, 1, 0, 0, 0, 1380, 1381, 6, 99, 0, 0, 1381, 200, 1, 0, 0, 0, 1382, 1384, 5, 13, 0, 0, 1383, 1385, 5, 10, 0, 0, 1384, 1383, 1, 0, 0, 0, 1384, 1385, 1, 0, 0, 0, 1385, 1388, 1, 0, 0, 0, 1386, 1388, 5, 10, 0, 0, 1387, 1382, 1, 0, 0, 0, 1387, 1386, 1, 0, 0, 0, 1388, 1389, 1, 0, 0, 0, 1389, 1390, 6, 100, 0, 0, 1390, 202, 1, 0, 0, 0, 79, 0, 241, 255, 277, 303, 331, 351, 371, 395, 417, 441, 459, 467, 509, 529, 566, 574, 590, 614, 625, 631, 636, 638, 669, 705, 741, 771, 809, 847, 873, 903, 923, 945, 969, 991, 1015, 1043, 1063, 1085, 1107, 1136, 1142, 1146, 1151, 1153, 1163, 1167, 1172, 1175, 1179, 1184, 1190, 1214, 1219, 1224, 1233, 1242, 1253, 1259, 1263, 1269, 1297, 1301, 1306, 1312, 1317, 1324, 1328, 1335, 1338, 1345, 1350, 1354, 1363, 1366, 1373, 1378, 1384, 1387, 1, 6, 0, 0] \ No newline at end of file diff --git a/internal/parser/planparserv2/generated/PlanLexer.tokens b/internal/parser/planparserv2/generated/PlanLexer.tokens index c73cac0814..f684657ec4 100644 --- a/internal/parser/planparserv2/generated/PlanLexer.tokens +++ b/internal/parser/planparserv2/generated/PlanLexer.tokens @@ -69,10 +69,11 @@ Identifier=68 Meta=69 StringLiteral=70 JSONIdentifier=71 -StructFieldIdentifier=72 -StructSubFieldIdentifier=73 -Whitespace=74 -Newline=75 +StructIndexFieldIdentifier=72 +StructFieldIdentifier=73 +StructSubFieldIdentifier=74 +Whitespace=75 +Newline=76 '('=1 ')'=2 '['=3 diff --git a/internal/parser/planparserv2/generated/plan_base_visitor.go b/internal/parser/planparserv2/generated/plan_base_visitor.go index b8a5221cc8..79058d44a2 100644 --- a/internal/parser/planparserv2/generated/plan_base_visitor.go +++ b/internal/parser/planparserv2/generated/plan_base_visitor.go @@ -183,6 +183,10 @@ func (v *BasePlanVisitor) VisitBitAnd(ctx *BitAndContext) interface{} { return v.VisitChildren(ctx) } +func (v *BasePlanVisitor) VisitStructIndexField(ctx *StructIndexFieldContext) interface{} { + return v.VisitChildren(ctx) +} + func (v *BasePlanVisitor) VisitIsNull(ctx *IsNullContext) interface{} { return v.VisitChildren(ctx) } diff --git a/internal/parser/planparserv2/generated/plan_lexer.go b/internal/parser/planparserv2/generated/plan_lexer.go index 094329bcf9..f465755dc1 100644 --- a/internal/parser/planparserv2/generated/plan_lexer.go +++ b/internal/parser/planparserv2/generated/plan_lexer.go @@ -62,7 +62,8 @@ func planlexerLexerInit() { "STEuqals", "STTouches", "STOverlaps", "STCrosses", "STContains", "STIntersects", "STWithin", "STDWithin", "STIsValid", "BooleanConstant", "IntegerConstant", "FloatingConstant", "Identifier", "Meta", "StringLiteral", "JSONIdentifier", - "StructFieldIdentifier", "StructSubFieldIdentifier", "Whitespace", "Newline", + "StructIndexFieldIdentifier", "StructFieldIdentifier", "StructSubFieldIdentifier", + "Whitespace", "Newline", } staticData.RuleNames = []string{ "T__0", "T__1", "T__2", "T__3", "T__4", "LBRACE", "RBRACE", "LT", "LE", @@ -76,18 +77,19 @@ func planlexerLexerInit() { "ElementFilter", "STEuqals", "STTouches", "STOverlaps", "STCrosses", "STContains", "STIntersects", "STWithin", "STDWithin", "STIsValid", "BooleanConstant", "IntegerConstant", "FloatingConstant", "Identifier", - "Meta", "StringLiteral", "JSONIdentifier", "StructFieldIdentifier", - "StructSubFieldIdentifier", "EncodingPrefix", "DoubleSCharSequence", - "SingleSCharSequence", "DoubleSChar", "SingleSChar", "Nondigit", "Digit", - "BinaryConstant", "DecimalConstant", "OctalConstant", "HexadecimalConstant", - "NonzeroDigit", "OctalDigit", "HexadecimalDigit", "HexQuad", "UniversalCharacterName", - "DecimalFloatingConstant", "HexadecimalFloatingConstant", "FractionalConstant", - "ExponentPart", "DigitSequence", "HexadecimalFractionalConstant", "HexadecimalDigitSequence", - "BinaryExponentPart", "EscapeSequence", "Whitespace", "Newline", + "Meta", "StringLiteral", "JSONIdentifier", "StructIndexFieldIdentifier", + "StructFieldIdentifier", "StructSubFieldIdentifier", "EncodingPrefix", + "DoubleSCharSequence", "SingleSCharSequence", "DoubleSChar", "SingleSChar", + "Nondigit", "Digit", "BinaryConstant", "DecimalConstant", "OctalConstant", + "HexadecimalConstant", "NonzeroDigit", "OctalDigit", "HexadecimalDigit", + "HexQuad", "UniversalCharacterName", "DecimalFloatingConstant", "HexadecimalFloatingConstant", + "FractionalConstant", "ExponentPart", "DigitSequence", "HexadecimalFractionalConstant", + "HexadecimalDigitSequence", "BinaryExponentPart", "EscapeSequence", + "Whitespace", "Newline", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 0, 75, 1381, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, + 4, 0, 76, 1391, 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, @@ -106,617 +108,621 @@ func planlexerLexerInit() { 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, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, - 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, - 1, 10, 1, 10, 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, 3, 13, 240, 8, 13, 1, 14, 1, 14, - 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, - 14, 254, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, - 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, - 15, 1, 15, 3, 15, 276, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, - 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, - 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 302, 8, 16, + 99, 7, 99, 2, 100, 7, 100, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, + 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, + 9, 1, 9, 1, 10, 1, 10, 1, 10, 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, 3, 13, 242, 8, + 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, + 1, 14, 1, 14, 3, 14, 256, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, + 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, + 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 278, 8, 15, 1, 16, 1, 16, 1, 16, 1, + 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, + 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, + 16, 304, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, - 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, - 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 330, 8, 17, 1, 18, 1, 18, 1, - 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, - 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 350, 8, 18, 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, 370, 8, 19, 1, 20, 1, 20, 1, + 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 332, 8, 17, + 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, + 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 352, 8, 18, + 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, 372, 8, 19, + 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, - 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 394, - 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, + 1, 20, 3, 20, 396, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, - 3, 21, 416, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, + 1, 21, 1, 21, 1, 21, 3, 21, 418, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, - 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 440, 8, 22, 1, 23, 1, 23, 1, 23, 1, + 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 442, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, - 1, 23, 1, 23, 3, 23, 458, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, - 24, 3, 24, 466, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, + 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 460, 8, 23, 1, 24, 1, 24, 1, + 24, 1, 24, 1, 24, 1, 24, 3, 24, 468, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, - 25, 1, 25, 3, 25, 508, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, + 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 510, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, - 26, 1, 26, 3, 26, 528, 8, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, - 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, - 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, - 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 565, 8, - 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 573, 8, 40, 1, 41, - 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, - 41, 1, 41, 1, 41, 3, 41, 589, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, + 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 530, 8, 26, 1, 27, 1, 27, 1, 28, + 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, + 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, + 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, + 39, 3, 39, 567, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, + 575, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, + 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 591, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, - 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 613, 8, 42, 1, 43, - 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 624, 8, - 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 630, 8, 45, 1, 46, 1, 46, 1, 46, - 5, 46, 635, 8, 46, 10, 46, 12, 46, 638, 9, 46, 1, 46, 1, 46, 1, 47, 1, + 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, + 615, 8, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, + 44, 3, 44, 626, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 632, 8, 45, 1, + 46, 1, 46, 1, 46, 5, 46, 637, 8, 46, 10, 46, 12, 46, 640, 9, 46, 1, 46, + 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, - 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, - 47, 1, 47, 1, 47, 1, 47, 3, 47, 668, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, + 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 670, 8, 47, 1, 48, 1, + 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, - 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 704, - 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, + 1, 48, 3, 48, 706, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, - 49, 1, 49, 1, 49, 1, 49, 3, 49, 740, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, + 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 742, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, - 1, 50, 1, 50, 1, 50, 3, 50, 770, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, + 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 772, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, - 3, 51, 808, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, + 1, 51, 1, 51, 1, 51, 3, 51, 810, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, - 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 846, 8, 52, - 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, + 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, + 3, 52, 848, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, - 1, 53, 1, 53, 1, 53, 3, 53, 872, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, + 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 874, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, - 54, 1, 54, 1, 54, 3, 54, 902, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, + 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 904, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, - 55, 1, 55, 1, 55, 3, 55, 922, 8, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, + 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 924, 8, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, - 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 944, 8, 56, 1, 57, 1, 57, 1, 57, + 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 946, 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, - 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 968, - 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, + 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, + 1, 57, 3, 57, 970, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, - 3, 58, 990, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, + 1, 58, 1, 58, 1, 58, 3, 58, 992, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, - 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1014, 8, 59, 1, 60, 1, 60, 1, 60, 1, + 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1016, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, - 60, 1, 60, 3, 60, 1042, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, + 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 1044, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, - 61, 1, 61, 3, 61, 1062, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, + 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 1064, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, - 62, 1, 62, 1, 62, 1, 62, 3, 62, 1084, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, + 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1086, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, - 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1106, 8, 63, 1, 64, 1, 64, - 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, + 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1108, + 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, - 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 1135, 8, 64, 1, 65, 1, 65, 1, 65, 1, - 65, 3, 65, 1141, 8, 65, 1, 66, 1, 66, 3, 66, 1145, 8, 66, 1, 67, 1, 67, - 1, 67, 5, 67, 1150, 8, 67, 10, 67, 12, 67, 1153, 9, 67, 1, 68, 1, 68, 1, - 68, 1, 68, 1, 68, 1, 68, 1, 69, 3, 69, 1162, 8, 69, 1, 69, 1, 69, 3, 69, - 1166, 8, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1171, 8, 69, 1, 69, 3, 69, 1174, - 8, 69, 1, 70, 1, 70, 3, 70, 1178, 8, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1183, - 8, 70, 1, 70, 1, 70, 4, 70, 1187, 8, 70, 11, 70, 12, 70, 1188, 1, 71, 1, - 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, - 1, 73, 1, 73, 3, 73, 1205, 8, 73, 1, 74, 4, 74, 1208, 8, 74, 11, 74, 12, - 74, 1209, 1, 75, 4, 75, 1213, 8, 75, 11, 75, 12, 75, 1214, 1, 76, 1, 76, - 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 1224, 8, 76, 1, 77, 1, 77, 1, - 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1233, 8, 77, 1, 78, 1, 78, 1, 79, - 1, 79, 1, 80, 1, 80, 1, 80, 4, 80, 1242, 8, 80, 11, 80, 12, 80, 1243, 1, - 81, 1, 81, 5, 81, 1248, 8, 81, 10, 81, 12, 81, 1251, 9, 81, 1, 81, 3, 81, - 1254, 8, 81, 1, 82, 1, 82, 5, 82, 1258, 8, 82, 10, 82, 12, 82, 1261, 9, - 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, - 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, 3, 88, 1288, 8, 88, 1, 89, 1, 89, 3, 89, - 1292, 8, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1297, 8, 89, 1, 90, 1, 90, 1, - 90, 1, 90, 3, 90, 1303, 8, 90, 1, 90, 1, 90, 1, 91, 3, 91, 1308, 8, 91, - 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 1315, 8, 91, 1, 92, 1, 92, 3, - 92, 1319, 8, 92, 1, 92, 1, 92, 1, 93, 4, 93, 1324, 8, 93, 11, 93, 12, 93, - 1325, 1, 94, 3, 94, 1329, 8, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, - 94, 1336, 8, 94, 1, 95, 4, 95, 1339, 8, 95, 11, 95, 12, 95, 1340, 1, 96, - 1, 96, 3, 96, 1345, 8, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, - 97, 3, 97, 1354, 8, 97, 1, 97, 3, 97, 1357, 8, 97, 1, 97, 1, 97, 1, 97, - 1, 97, 1, 97, 3, 97, 1364, 8, 97, 1, 98, 4, 98, 1367, 8, 98, 11, 98, 12, - 98, 1368, 1, 98, 1, 98, 1, 99, 1, 99, 3, 99, 1375, 8, 99, 1, 99, 3, 99, - 1378, 8, 99, 1, 99, 1, 99, 0, 0, 100, 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, 0, 149, 0, 151, - 0, 153, 0, 155, 0, 157, 0, 159, 0, 161, 0, 163, 0, 165, 0, 167, 0, 169, - 0, 171, 0, 173, 0, 175, 0, 177, 0, 179, 0, 181, 0, 183, 0, 185, 0, 187, - 0, 189, 0, 191, 0, 193, 0, 195, 0, 197, 74, 199, 75, 1, 0, 16, 3, 0, 76, - 76, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, - 13, 13, 39, 39, 92, 92, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 2, - 0, 66, 66, 98, 98, 1, 0, 48, 49, 2, 0, 88, 88, 120, 120, 1, 0, 49, 57, - 1, 0, 48, 55, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 69, 69, 101, 101, 2, - 0, 43, 43, 45, 45, 2, 0, 80, 80, 112, 112, 10, 0, 34, 34, 39, 39, 63, 63, - 92, 92, 97, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, - 9, 9, 32, 32, 1448, 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, 197, 1, 0, 0, 0, 0, - 199, 1, 0, 0, 0, 1, 201, 1, 0, 0, 0, 3, 203, 1, 0, 0, 0, 5, 205, 1, 0, - 0, 0, 7, 207, 1, 0, 0, 0, 9, 209, 1, 0, 0, 0, 11, 211, 1, 0, 0, 0, 13, - 213, 1, 0, 0, 0, 15, 215, 1, 0, 0, 0, 17, 217, 1, 0, 0, 0, 19, 220, 1, - 0, 0, 0, 21, 222, 1, 0, 0, 0, 23, 225, 1, 0, 0, 0, 25, 228, 1, 0, 0, 0, - 27, 239, 1, 0, 0, 0, 29, 253, 1, 0, 0, 0, 31, 275, 1, 0, 0, 0, 33, 301, - 1, 0, 0, 0, 35, 329, 1, 0, 0, 0, 37, 349, 1, 0, 0, 0, 39, 369, 1, 0, 0, - 0, 41, 393, 1, 0, 0, 0, 43, 415, 1, 0, 0, 0, 45, 439, 1, 0, 0, 0, 47, 457, - 1, 0, 0, 0, 49, 465, 1, 0, 0, 0, 51, 507, 1, 0, 0, 0, 53, 527, 1, 0, 0, - 0, 55, 529, 1, 0, 0, 0, 57, 531, 1, 0, 0, 0, 59, 533, 1, 0, 0, 0, 61, 535, - 1, 0, 0, 0, 63, 537, 1, 0, 0, 0, 65, 539, 1, 0, 0, 0, 67, 541, 1, 0, 0, - 0, 69, 544, 1, 0, 0, 0, 71, 547, 1, 0, 0, 0, 73, 550, 1, 0, 0, 0, 75, 552, - 1, 0, 0, 0, 77, 554, 1, 0, 0, 0, 79, 564, 1, 0, 0, 0, 81, 572, 1, 0, 0, - 0, 83, 588, 1, 0, 0, 0, 85, 612, 1, 0, 0, 0, 87, 614, 1, 0, 0, 0, 89, 623, - 1, 0, 0, 0, 91, 629, 1, 0, 0, 0, 93, 631, 1, 0, 0, 0, 95, 667, 1, 0, 0, - 0, 97, 703, 1, 0, 0, 0, 99, 739, 1, 0, 0, 0, 101, 769, 1, 0, 0, 0, 103, - 807, 1, 0, 0, 0, 105, 845, 1, 0, 0, 0, 107, 871, 1, 0, 0, 0, 109, 901, - 1, 0, 0, 0, 111, 921, 1, 0, 0, 0, 113, 943, 1, 0, 0, 0, 115, 967, 1, 0, - 0, 0, 117, 989, 1, 0, 0, 0, 119, 1013, 1, 0, 0, 0, 121, 1041, 1, 0, 0, - 0, 123, 1061, 1, 0, 0, 0, 125, 1083, 1, 0, 0, 0, 127, 1105, 1, 0, 0, 0, - 129, 1134, 1, 0, 0, 0, 131, 1140, 1, 0, 0, 0, 133, 1144, 1, 0, 0, 0, 135, - 1146, 1, 0, 0, 0, 137, 1154, 1, 0, 0, 0, 139, 1161, 1, 0, 0, 0, 141, 1177, - 1, 0, 0, 0, 143, 1190, 1, 0, 0, 0, 145, 1195, 1, 0, 0, 0, 147, 1204, 1, - 0, 0, 0, 149, 1207, 1, 0, 0, 0, 151, 1212, 1, 0, 0, 0, 153, 1223, 1, 0, - 0, 0, 155, 1232, 1, 0, 0, 0, 157, 1234, 1, 0, 0, 0, 159, 1236, 1, 0, 0, - 0, 161, 1238, 1, 0, 0, 0, 163, 1253, 1, 0, 0, 0, 165, 1255, 1, 0, 0, 0, - 167, 1262, 1, 0, 0, 0, 169, 1266, 1, 0, 0, 0, 171, 1268, 1, 0, 0, 0, 173, - 1270, 1, 0, 0, 0, 175, 1272, 1, 0, 0, 0, 177, 1287, 1, 0, 0, 0, 179, 1296, - 1, 0, 0, 0, 181, 1298, 1, 0, 0, 0, 183, 1314, 1, 0, 0, 0, 185, 1316, 1, - 0, 0, 0, 187, 1323, 1, 0, 0, 0, 189, 1335, 1, 0, 0, 0, 191, 1338, 1, 0, - 0, 0, 193, 1342, 1, 0, 0, 0, 195, 1363, 1, 0, 0, 0, 197, 1366, 1, 0, 0, - 0, 199, 1377, 1, 0, 0, 0, 201, 202, 5, 40, 0, 0, 202, 2, 1, 0, 0, 0, 203, - 204, 5, 41, 0, 0, 204, 4, 1, 0, 0, 0, 205, 206, 5, 91, 0, 0, 206, 6, 1, - 0, 0, 0, 207, 208, 5, 44, 0, 0, 208, 8, 1, 0, 0, 0, 209, 210, 5, 93, 0, - 0, 210, 10, 1, 0, 0, 0, 211, 212, 5, 123, 0, 0, 212, 12, 1, 0, 0, 0, 213, - 214, 5, 125, 0, 0, 214, 14, 1, 0, 0, 0, 215, 216, 5, 60, 0, 0, 216, 16, - 1, 0, 0, 0, 217, 218, 5, 60, 0, 0, 218, 219, 5, 61, 0, 0, 219, 18, 1, 0, - 0, 0, 220, 221, 5, 62, 0, 0, 221, 20, 1, 0, 0, 0, 222, 223, 5, 62, 0, 0, - 223, 224, 5, 61, 0, 0, 224, 22, 1, 0, 0, 0, 225, 226, 5, 61, 0, 0, 226, - 227, 5, 61, 0, 0, 227, 24, 1, 0, 0, 0, 228, 229, 5, 33, 0, 0, 229, 230, - 5, 61, 0, 0, 230, 26, 1, 0, 0, 0, 231, 232, 5, 108, 0, 0, 232, 233, 5, - 105, 0, 0, 233, 234, 5, 107, 0, 0, 234, 240, 5, 101, 0, 0, 235, 236, 5, - 76, 0, 0, 236, 237, 5, 73, 0, 0, 237, 238, 5, 75, 0, 0, 238, 240, 5, 69, - 0, 0, 239, 231, 1, 0, 0, 0, 239, 235, 1, 0, 0, 0, 240, 28, 1, 0, 0, 0, - 241, 242, 5, 101, 0, 0, 242, 243, 5, 120, 0, 0, 243, 244, 5, 105, 0, 0, - 244, 245, 5, 115, 0, 0, 245, 246, 5, 116, 0, 0, 246, 254, 5, 115, 0, 0, - 247, 248, 5, 69, 0, 0, 248, 249, 5, 88, 0, 0, 249, 250, 5, 73, 0, 0, 250, - 251, 5, 83, 0, 0, 251, 252, 5, 84, 0, 0, 252, 254, 5, 83, 0, 0, 253, 241, - 1, 0, 0, 0, 253, 247, 1, 0, 0, 0, 254, 30, 1, 0, 0, 0, 255, 256, 5, 116, - 0, 0, 256, 257, 5, 101, 0, 0, 257, 258, 5, 120, 0, 0, 258, 259, 5, 116, - 0, 0, 259, 260, 5, 95, 0, 0, 260, 261, 5, 109, 0, 0, 261, 262, 5, 97, 0, - 0, 262, 263, 5, 116, 0, 0, 263, 264, 5, 99, 0, 0, 264, 276, 5, 104, 0, - 0, 265, 266, 5, 84, 0, 0, 266, 267, 5, 69, 0, 0, 267, 268, 5, 88, 0, 0, - 268, 269, 5, 84, 0, 0, 269, 270, 5, 95, 0, 0, 270, 271, 5, 77, 0, 0, 271, - 272, 5, 65, 0, 0, 272, 273, 5, 84, 0, 0, 273, 274, 5, 67, 0, 0, 274, 276, - 5, 72, 0, 0, 275, 255, 1, 0, 0, 0, 275, 265, 1, 0, 0, 0, 276, 32, 1, 0, - 0, 0, 277, 278, 5, 112, 0, 0, 278, 279, 5, 104, 0, 0, 279, 280, 5, 114, - 0, 0, 280, 281, 5, 97, 0, 0, 281, 282, 5, 115, 0, 0, 282, 283, 5, 101, - 0, 0, 283, 284, 5, 95, 0, 0, 284, 285, 5, 109, 0, 0, 285, 286, 5, 97, 0, - 0, 286, 287, 5, 116, 0, 0, 287, 288, 5, 99, 0, 0, 288, 302, 5, 104, 0, - 0, 289, 290, 5, 80, 0, 0, 290, 291, 5, 72, 0, 0, 291, 292, 5, 82, 0, 0, - 292, 293, 5, 65, 0, 0, 293, 294, 5, 83, 0, 0, 294, 295, 5, 69, 0, 0, 295, - 296, 5, 95, 0, 0, 296, 297, 5, 77, 0, 0, 297, 298, 5, 65, 0, 0, 298, 299, - 5, 84, 0, 0, 299, 300, 5, 67, 0, 0, 300, 302, 5, 72, 0, 0, 301, 277, 1, - 0, 0, 0, 301, 289, 1, 0, 0, 0, 302, 34, 1, 0, 0, 0, 303, 304, 5, 114, 0, - 0, 304, 305, 5, 97, 0, 0, 305, 306, 5, 110, 0, 0, 306, 307, 5, 100, 0, - 0, 307, 308, 5, 111, 0, 0, 308, 309, 5, 109, 0, 0, 309, 310, 5, 95, 0, - 0, 310, 311, 5, 115, 0, 0, 311, 312, 5, 97, 0, 0, 312, 313, 5, 109, 0, - 0, 313, 314, 5, 112, 0, 0, 314, 315, 5, 108, 0, 0, 315, 330, 5, 101, 0, - 0, 316, 317, 5, 82, 0, 0, 317, 318, 5, 65, 0, 0, 318, 319, 5, 78, 0, 0, - 319, 320, 5, 68, 0, 0, 320, 321, 5, 79, 0, 0, 321, 322, 5, 77, 0, 0, 322, - 323, 5, 95, 0, 0, 323, 324, 5, 83, 0, 0, 324, 325, 5, 65, 0, 0, 325, 326, - 5, 77, 0, 0, 326, 327, 5, 80, 0, 0, 327, 328, 5, 76, 0, 0, 328, 330, 5, - 69, 0, 0, 329, 303, 1, 0, 0, 0, 329, 316, 1, 0, 0, 0, 330, 36, 1, 0, 0, - 0, 331, 332, 5, 109, 0, 0, 332, 333, 5, 97, 0, 0, 333, 334, 5, 116, 0, - 0, 334, 335, 5, 99, 0, 0, 335, 336, 5, 104, 0, 0, 336, 337, 5, 95, 0, 0, - 337, 338, 5, 97, 0, 0, 338, 339, 5, 108, 0, 0, 339, 350, 5, 108, 0, 0, - 340, 341, 5, 77, 0, 0, 341, 342, 5, 65, 0, 0, 342, 343, 5, 84, 0, 0, 343, - 344, 5, 67, 0, 0, 344, 345, 5, 72, 0, 0, 345, 346, 5, 95, 0, 0, 346, 347, - 5, 65, 0, 0, 347, 348, 5, 76, 0, 0, 348, 350, 5, 76, 0, 0, 349, 331, 1, - 0, 0, 0, 349, 340, 1, 0, 0, 0, 350, 38, 1, 0, 0, 0, 351, 352, 5, 109, 0, - 0, 352, 353, 5, 97, 0, 0, 353, 354, 5, 116, 0, 0, 354, 355, 5, 99, 0, 0, - 355, 356, 5, 104, 0, 0, 356, 357, 5, 95, 0, 0, 357, 358, 5, 97, 0, 0, 358, - 359, 5, 110, 0, 0, 359, 370, 5, 121, 0, 0, 360, 361, 5, 77, 0, 0, 361, - 362, 5, 65, 0, 0, 362, 363, 5, 84, 0, 0, 363, 364, 5, 67, 0, 0, 364, 365, - 5, 72, 0, 0, 365, 366, 5, 95, 0, 0, 366, 367, 5, 65, 0, 0, 367, 368, 5, - 78, 0, 0, 368, 370, 5, 89, 0, 0, 369, 351, 1, 0, 0, 0, 369, 360, 1, 0, - 0, 0, 370, 40, 1, 0, 0, 0, 371, 372, 5, 109, 0, 0, 372, 373, 5, 97, 0, - 0, 373, 374, 5, 116, 0, 0, 374, 375, 5, 99, 0, 0, 375, 376, 5, 104, 0, - 0, 376, 377, 5, 95, 0, 0, 377, 378, 5, 108, 0, 0, 378, 379, 5, 101, 0, - 0, 379, 380, 5, 97, 0, 0, 380, 381, 5, 115, 0, 0, 381, 394, 5, 116, 0, - 0, 382, 383, 5, 77, 0, 0, 383, 384, 5, 65, 0, 0, 384, 385, 5, 84, 0, 0, - 385, 386, 5, 67, 0, 0, 386, 387, 5, 72, 0, 0, 387, 388, 5, 95, 0, 0, 388, - 389, 5, 76, 0, 0, 389, 390, 5, 69, 0, 0, 390, 391, 5, 65, 0, 0, 391, 392, - 5, 83, 0, 0, 392, 394, 5, 84, 0, 0, 393, 371, 1, 0, 0, 0, 393, 382, 1, - 0, 0, 0, 394, 42, 1, 0, 0, 0, 395, 396, 5, 109, 0, 0, 396, 397, 5, 97, - 0, 0, 397, 398, 5, 116, 0, 0, 398, 399, 5, 99, 0, 0, 399, 400, 5, 104, - 0, 0, 400, 401, 5, 95, 0, 0, 401, 402, 5, 109, 0, 0, 402, 403, 5, 111, - 0, 0, 403, 404, 5, 115, 0, 0, 404, 416, 5, 116, 0, 0, 405, 406, 5, 77, - 0, 0, 406, 407, 5, 65, 0, 0, 407, 408, 5, 84, 0, 0, 408, 409, 5, 67, 0, - 0, 409, 410, 5, 72, 0, 0, 410, 411, 5, 95, 0, 0, 411, 412, 5, 77, 0, 0, - 412, 413, 5, 79, 0, 0, 413, 414, 5, 83, 0, 0, 414, 416, 5, 84, 0, 0, 415, - 395, 1, 0, 0, 0, 415, 405, 1, 0, 0, 0, 416, 44, 1, 0, 0, 0, 417, 418, 5, - 109, 0, 0, 418, 419, 5, 97, 0, 0, 419, 420, 5, 116, 0, 0, 420, 421, 5, - 99, 0, 0, 421, 422, 5, 104, 0, 0, 422, 423, 5, 95, 0, 0, 423, 424, 5, 101, - 0, 0, 424, 425, 5, 120, 0, 0, 425, 426, 5, 97, 0, 0, 426, 427, 5, 99, 0, - 0, 427, 440, 5, 116, 0, 0, 428, 429, 5, 77, 0, 0, 429, 430, 5, 65, 0, 0, - 430, 431, 5, 84, 0, 0, 431, 432, 5, 67, 0, 0, 432, 433, 5, 72, 0, 0, 433, - 434, 5, 95, 0, 0, 434, 435, 5, 69, 0, 0, 435, 436, 5, 88, 0, 0, 436, 437, - 5, 65, 0, 0, 437, 438, 5, 67, 0, 0, 438, 440, 5, 84, 0, 0, 439, 417, 1, - 0, 0, 0, 439, 428, 1, 0, 0, 0, 440, 46, 1, 0, 0, 0, 441, 442, 5, 105, 0, - 0, 442, 443, 5, 110, 0, 0, 443, 444, 5, 116, 0, 0, 444, 445, 5, 101, 0, - 0, 445, 446, 5, 114, 0, 0, 446, 447, 5, 118, 0, 0, 447, 448, 5, 97, 0, - 0, 448, 458, 5, 108, 0, 0, 449, 450, 5, 73, 0, 0, 450, 451, 5, 78, 0, 0, - 451, 452, 5, 84, 0, 0, 452, 453, 5, 69, 0, 0, 453, 454, 5, 82, 0, 0, 454, - 455, 5, 86, 0, 0, 455, 456, 5, 65, 0, 0, 456, 458, 5, 76, 0, 0, 457, 441, - 1, 0, 0, 0, 457, 449, 1, 0, 0, 0, 458, 48, 1, 0, 0, 0, 459, 460, 5, 105, - 0, 0, 460, 461, 5, 115, 0, 0, 461, 466, 5, 111, 0, 0, 462, 463, 5, 73, - 0, 0, 463, 464, 5, 83, 0, 0, 464, 466, 5, 79, 0, 0, 465, 459, 1, 0, 0, - 0, 465, 462, 1, 0, 0, 0, 466, 50, 1, 0, 0, 0, 467, 468, 5, 109, 0, 0, 468, - 469, 5, 105, 0, 0, 469, 470, 5, 110, 0, 0, 470, 471, 5, 105, 0, 0, 471, - 472, 5, 109, 0, 0, 472, 473, 5, 117, 0, 0, 473, 474, 5, 109, 0, 0, 474, - 475, 5, 95, 0, 0, 475, 476, 5, 115, 0, 0, 476, 477, 5, 104, 0, 0, 477, - 478, 5, 111, 0, 0, 478, 479, 5, 117, 0, 0, 479, 480, 5, 108, 0, 0, 480, - 481, 5, 100, 0, 0, 481, 482, 5, 95, 0, 0, 482, 483, 5, 109, 0, 0, 483, - 484, 5, 97, 0, 0, 484, 485, 5, 116, 0, 0, 485, 486, 5, 99, 0, 0, 486, 508, - 5, 104, 0, 0, 487, 488, 5, 77, 0, 0, 488, 489, 5, 73, 0, 0, 489, 490, 5, - 78, 0, 0, 490, 491, 5, 73, 0, 0, 491, 492, 5, 77, 0, 0, 492, 493, 5, 85, - 0, 0, 493, 494, 5, 77, 0, 0, 494, 495, 5, 95, 0, 0, 495, 496, 5, 83, 0, - 0, 496, 497, 5, 72, 0, 0, 497, 498, 5, 79, 0, 0, 498, 499, 5, 85, 0, 0, - 499, 500, 5, 76, 0, 0, 500, 501, 5, 68, 0, 0, 501, 502, 5, 95, 0, 0, 502, - 503, 5, 77, 0, 0, 503, 504, 5, 65, 0, 0, 504, 505, 5, 84, 0, 0, 505, 506, - 5, 67, 0, 0, 506, 508, 5, 72, 0, 0, 507, 467, 1, 0, 0, 0, 507, 487, 1, - 0, 0, 0, 508, 52, 1, 0, 0, 0, 509, 510, 5, 116, 0, 0, 510, 511, 5, 104, - 0, 0, 511, 512, 5, 114, 0, 0, 512, 513, 5, 101, 0, 0, 513, 514, 5, 115, - 0, 0, 514, 515, 5, 104, 0, 0, 515, 516, 5, 111, 0, 0, 516, 517, 5, 108, - 0, 0, 517, 528, 5, 100, 0, 0, 518, 519, 5, 84, 0, 0, 519, 520, 5, 72, 0, - 0, 520, 521, 5, 82, 0, 0, 521, 522, 5, 69, 0, 0, 522, 523, 5, 83, 0, 0, - 523, 524, 5, 72, 0, 0, 524, 525, 5, 79, 0, 0, 525, 526, 5, 76, 0, 0, 526, - 528, 5, 68, 0, 0, 527, 509, 1, 0, 0, 0, 527, 518, 1, 0, 0, 0, 528, 54, - 1, 0, 0, 0, 529, 530, 5, 61, 0, 0, 530, 56, 1, 0, 0, 0, 531, 532, 5, 43, - 0, 0, 532, 58, 1, 0, 0, 0, 533, 534, 5, 45, 0, 0, 534, 60, 1, 0, 0, 0, - 535, 536, 5, 42, 0, 0, 536, 62, 1, 0, 0, 0, 537, 538, 5, 47, 0, 0, 538, - 64, 1, 0, 0, 0, 539, 540, 5, 37, 0, 0, 540, 66, 1, 0, 0, 0, 541, 542, 5, - 42, 0, 0, 542, 543, 5, 42, 0, 0, 543, 68, 1, 0, 0, 0, 544, 545, 5, 60, - 0, 0, 545, 546, 5, 60, 0, 0, 546, 70, 1, 0, 0, 0, 547, 548, 5, 62, 0, 0, - 548, 549, 5, 62, 0, 0, 549, 72, 1, 0, 0, 0, 550, 551, 5, 38, 0, 0, 551, - 74, 1, 0, 0, 0, 552, 553, 5, 124, 0, 0, 553, 76, 1, 0, 0, 0, 554, 555, - 5, 94, 0, 0, 555, 78, 1, 0, 0, 0, 556, 557, 5, 38, 0, 0, 557, 565, 5, 38, - 0, 0, 558, 559, 5, 97, 0, 0, 559, 560, 5, 110, 0, 0, 560, 565, 5, 100, - 0, 0, 561, 562, 5, 65, 0, 0, 562, 563, 5, 78, 0, 0, 563, 565, 5, 68, 0, - 0, 564, 556, 1, 0, 0, 0, 564, 558, 1, 0, 0, 0, 564, 561, 1, 0, 0, 0, 565, - 80, 1, 0, 0, 0, 566, 567, 5, 124, 0, 0, 567, 573, 5, 124, 0, 0, 568, 569, - 5, 111, 0, 0, 569, 573, 5, 114, 0, 0, 570, 571, 5, 79, 0, 0, 571, 573, - 5, 82, 0, 0, 572, 566, 1, 0, 0, 0, 572, 568, 1, 0, 0, 0, 572, 570, 1, 0, - 0, 0, 573, 82, 1, 0, 0, 0, 574, 575, 5, 105, 0, 0, 575, 576, 5, 115, 0, - 0, 576, 577, 5, 32, 0, 0, 577, 578, 5, 110, 0, 0, 578, 579, 5, 117, 0, - 0, 579, 580, 5, 108, 0, 0, 580, 589, 5, 108, 0, 0, 581, 582, 5, 73, 0, - 0, 582, 583, 5, 83, 0, 0, 583, 584, 5, 32, 0, 0, 584, 585, 5, 78, 0, 0, - 585, 586, 5, 85, 0, 0, 586, 587, 5, 76, 0, 0, 587, 589, 5, 76, 0, 0, 588, - 574, 1, 0, 0, 0, 588, 581, 1, 0, 0, 0, 589, 84, 1, 0, 0, 0, 590, 591, 5, - 105, 0, 0, 591, 592, 5, 115, 0, 0, 592, 593, 5, 32, 0, 0, 593, 594, 5, - 110, 0, 0, 594, 595, 5, 111, 0, 0, 595, 596, 5, 116, 0, 0, 596, 597, 5, - 32, 0, 0, 597, 598, 5, 110, 0, 0, 598, 599, 5, 117, 0, 0, 599, 600, 5, - 108, 0, 0, 600, 613, 5, 108, 0, 0, 601, 602, 5, 73, 0, 0, 602, 603, 5, - 83, 0, 0, 603, 604, 5, 32, 0, 0, 604, 605, 5, 78, 0, 0, 605, 606, 5, 79, - 0, 0, 606, 607, 5, 84, 0, 0, 607, 608, 5, 32, 0, 0, 608, 609, 5, 78, 0, - 0, 609, 610, 5, 85, 0, 0, 610, 611, 5, 76, 0, 0, 611, 613, 5, 76, 0, 0, - 612, 590, 1, 0, 0, 0, 612, 601, 1, 0, 0, 0, 613, 86, 1, 0, 0, 0, 614, 615, - 5, 126, 0, 0, 615, 88, 1, 0, 0, 0, 616, 624, 5, 33, 0, 0, 617, 618, 5, - 110, 0, 0, 618, 619, 5, 111, 0, 0, 619, 624, 5, 116, 0, 0, 620, 621, 5, - 78, 0, 0, 621, 622, 5, 79, 0, 0, 622, 624, 5, 84, 0, 0, 623, 616, 1, 0, - 0, 0, 623, 617, 1, 0, 0, 0, 623, 620, 1, 0, 0, 0, 624, 90, 1, 0, 0, 0, - 625, 626, 5, 105, 0, 0, 626, 630, 5, 110, 0, 0, 627, 628, 5, 73, 0, 0, - 628, 630, 5, 78, 0, 0, 629, 625, 1, 0, 0, 0, 629, 627, 1, 0, 0, 0, 630, - 92, 1, 0, 0, 0, 631, 636, 5, 91, 0, 0, 632, 635, 3, 197, 98, 0, 633, 635, - 3, 199, 99, 0, 634, 632, 1, 0, 0, 0, 634, 633, 1, 0, 0, 0, 635, 638, 1, - 0, 0, 0, 636, 634, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 639, 1, 0, 0, - 0, 638, 636, 1, 0, 0, 0, 639, 640, 5, 93, 0, 0, 640, 94, 1, 0, 0, 0, 641, - 642, 5, 106, 0, 0, 642, 643, 5, 115, 0, 0, 643, 644, 5, 111, 0, 0, 644, - 645, 5, 110, 0, 0, 645, 646, 5, 95, 0, 0, 646, 647, 5, 99, 0, 0, 647, 648, - 5, 111, 0, 0, 648, 649, 5, 110, 0, 0, 649, 650, 5, 116, 0, 0, 650, 651, - 5, 97, 0, 0, 651, 652, 5, 105, 0, 0, 652, 653, 5, 110, 0, 0, 653, 668, - 5, 115, 0, 0, 654, 655, 5, 74, 0, 0, 655, 656, 5, 83, 0, 0, 656, 657, 5, - 79, 0, 0, 657, 658, 5, 78, 0, 0, 658, 659, 5, 95, 0, 0, 659, 660, 5, 67, - 0, 0, 660, 661, 5, 79, 0, 0, 661, 662, 5, 78, 0, 0, 662, 663, 5, 84, 0, - 0, 663, 664, 5, 65, 0, 0, 664, 665, 5, 73, 0, 0, 665, 666, 5, 78, 0, 0, - 666, 668, 5, 83, 0, 0, 667, 641, 1, 0, 0, 0, 667, 654, 1, 0, 0, 0, 668, - 96, 1, 0, 0, 0, 669, 670, 5, 106, 0, 0, 670, 671, 5, 115, 0, 0, 671, 672, - 5, 111, 0, 0, 672, 673, 5, 110, 0, 0, 673, 674, 5, 95, 0, 0, 674, 675, - 5, 99, 0, 0, 675, 676, 5, 111, 0, 0, 676, 677, 5, 110, 0, 0, 677, 678, - 5, 116, 0, 0, 678, 679, 5, 97, 0, 0, 679, 680, 5, 105, 0, 0, 680, 681, - 5, 110, 0, 0, 681, 682, 5, 115, 0, 0, 682, 683, 5, 95, 0, 0, 683, 684, - 5, 97, 0, 0, 684, 685, 5, 108, 0, 0, 685, 704, 5, 108, 0, 0, 686, 687, - 5, 74, 0, 0, 687, 688, 5, 83, 0, 0, 688, 689, 5, 79, 0, 0, 689, 690, 5, - 78, 0, 0, 690, 691, 5, 95, 0, 0, 691, 692, 5, 67, 0, 0, 692, 693, 5, 79, - 0, 0, 693, 694, 5, 78, 0, 0, 694, 695, 5, 84, 0, 0, 695, 696, 5, 65, 0, - 0, 696, 697, 5, 73, 0, 0, 697, 698, 5, 78, 0, 0, 698, 699, 5, 83, 0, 0, - 699, 700, 5, 95, 0, 0, 700, 701, 5, 65, 0, 0, 701, 702, 5, 76, 0, 0, 702, - 704, 5, 76, 0, 0, 703, 669, 1, 0, 0, 0, 703, 686, 1, 0, 0, 0, 704, 98, - 1, 0, 0, 0, 705, 706, 5, 106, 0, 0, 706, 707, 5, 115, 0, 0, 707, 708, 5, - 111, 0, 0, 708, 709, 5, 110, 0, 0, 709, 710, 5, 95, 0, 0, 710, 711, 5, - 99, 0, 0, 711, 712, 5, 111, 0, 0, 712, 713, 5, 110, 0, 0, 713, 714, 5, - 116, 0, 0, 714, 715, 5, 97, 0, 0, 715, 716, 5, 105, 0, 0, 716, 717, 5, - 110, 0, 0, 717, 718, 5, 115, 0, 0, 718, 719, 5, 95, 0, 0, 719, 720, 5, - 97, 0, 0, 720, 721, 5, 110, 0, 0, 721, 740, 5, 121, 0, 0, 722, 723, 5, - 74, 0, 0, 723, 724, 5, 83, 0, 0, 724, 725, 5, 79, 0, 0, 725, 726, 5, 78, - 0, 0, 726, 727, 5, 95, 0, 0, 727, 728, 5, 67, 0, 0, 728, 729, 5, 79, 0, - 0, 729, 730, 5, 78, 0, 0, 730, 731, 5, 84, 0, 0, 731, 732, 5, 65, 0, 0, - 732, 733, 5, 73, 0, 0, 733, 734, 5, 78, 0, 0, 734, 735, 5, 83, 0, 0, 735, - 736, 5, 95, 0, 0, 736, 737, 5, 65, 0, 0, 737, 738, 5, 78, 0, 0, 738, 740, - 5, 89, 0, 0, 739, 705, 1, 0, 0, 0, 739, 722, 1, 0, 0, 0, 740, 100, 1, 0, - 0, 0, 741, 742, 5, 97, 0, 0, 742, 743, 5, 114, 0, 0, 743, 744, 5, 114, - 0, 0, 744, 745, 5, 97, 0, 0, 745, 746, 5, 121, 0, 0, 746, 747, 5, 95, 0, - 0, 747, 748, 5, 99, 0, 0, 748, 749, 5, 111, 0, 0, 749, 750, 5, 110, 0, - 0, 750, 751, 5, 116, 0, 0, 751, 752, 5, 97, 0, 0, 752, 753, 5, 105, 0, - 0, 753, 754, 5, 110, 0, 0, 754, 770, 5, 115, 0, 0, 755, 756, 5, 65, 0, - 0, 756, 757, 5, 82, 0, 0, 757, 758, 5, 82, 0, 0, 758, 759, 5, 65, 0, 0, - 759, 760, 5, 89, 0, 0, 760, 761, 5, 95, 0, 0, 761, 762, 5, 67, 0, 0, 762, - 763, 5, 79, 0, 0, 763, 764, 5, 78, 0, 0, 764, 765, 5, 84, 0, 0, 765, 766, - 5, 65, 0, 0, 766, 767, 5, 73, 0, 0, 767, 768, 5, 78, 0, 0, 768, 770, 5, - 83, 0, 0, 769, 741, 1, 0, 0, 0, 769, 755, 1, 0, 0, 0, 770, 102, 1, 0, 0, - 0, 771, 772, 5, 97, 0, 0, 772, 773, 5, 114, 0, 0, 773, 774, 5, 114, 0, - 0, 774, 775, 5, 97, 0, 0, 775, 776, 5, 121, 0, 0, 776, 777, 5, 95, 0, 0, - 777, 778, 5, 99, 0, 0, 778, 779, 5, 111, 0, 0, 779, 780, 5, 110, 0, 0, - 780, 781, 5, 116, 0, 0, 781, 782, 5, 97, 0, 0, 782, 783, 5, 105, 0, 0, - 783, 784, 5, 110, 0, 0, 784, 785, 5, 115, 0, 0, 785, 786, 5, 95, 0, 0, - 786, 787, 5, 97, 0, 0, 787, 788, 5, 108, 0, 0, 788, 808, 5, 108, 0, 0, - 789, 790, 5, 65, 0, 0, 790, 791, 5, 82, 0, 0, 791, 792, 5, 82, 0, 0, 792, - 793, 5, 65, 0, 0, 793, 794, 5, 89, 0, 0, 794, 795, 5, 95, 0, 0, 795, 796, - 5, 67, 0, 0, 796, 797, 5, 79, 0, 0, 797, 798, 5, 78, 0, 0, 798, 799, 5, - 84, 0, 0, 799, 800, 5, 65, 0, 0, 800, 801, 5, 73, 0, 0, 801, 802, 5, 78, - 0, 0, 802, 803, 5, 83, 0, 0, 803, 804, 5, 95, 0, 0, 804, 805, 5, 65, 0, - 0, 805, 806, 5, 76, 0, 0, 806, 808, 5, 76, 0, 0, 807, 771, 1, 0, 0, 0, - 807, 789, 1, 0, 0, 0, 808, 104, 1, 0, 0, 0, 809, 810, 5, 97, 0, 0, 810, - 811, 5, 114, 0, 0, 811, 812, 5, 114, 0, 0, 812, 813, 5, 97, 0, 0, 813, - 814, 5, 121, 0, 0, 814, 815, 5, 95, 0, 0, 815, 816, 5, 99, 0, 0, 816, 817, - 5, 111, 0, 0, 817, 818, 5, 110, 0, 0, 818, 819, 5, 116, 0, 0, 819, 820, - 5, 97, 0, 0, 820, 821, 5, 105, 0, 0, 821, 822, 5, 110, 0, 0, 822, 823, - 5, 115, 0, 0, 823, 824, 5, 95, 0, 0, 824, 825, 5, 97, 0, 0, 825, 826, 5, - 110, 0, 0, 826, 846, 5, 121, 0, 0, 827, 828, 5, 65, 0, 0, 828, 829, 5, - 82, 0, 0, 829, 830, 5, 82, 0, 0, 830, 831, 5, 65, 0, 0, 831, 832, 5, 89, - 0, 0, 832, 833, 5, 95, 0, 0, 833, 834, 5, 67, 0, 0, 834, 835, 5, 79, 0, - 0, 835, 836, 5, 78, 0, 0, 836, 837, 5, 84, 0, 0, 837, 838, 5, 65, 0, 0, - 838, 839, 5, 73, 0, 0, 839, 840, 5, 78, 0, 0, 840, 841, 5, 83, 0, 0, 841, - 842, 5, 95, 0, 0, 842, 843, 5, 65, 0, 0, 843, 844, 5, 78, 0, 0, 844, 846, - 5, 89, 0, 0, 845, 809, 1, 0, 0, 0, 845, 827, 1, 0, 0, 0, 846, 106, 1, 0, - 0, 0, 847, 848, 5, 97, 0, 0, 848, 849, 5, 114, 0, 0, 849, 850, 5, 114, - 0, 0, 850, 851, 5, 97, 0, 0, 851, 852, 5, 121, 0, 0, 852, 853, 5, 95, 0, - 0, 853, 854, 5, 108, 0, 0, 854, 855, 5, 101, 0, 0, 855, 856, 5, 110, 0, - 0, 856, 857, 5, 103, 0, 0, 857, 858, 5, 116, 0, 0, 858, 872, 5, 104, 0, - 0, 859, 860, 5, 65, 0, 0, 860, 861, 5, 82, 0, 0, 861, 862, 5, 82, 0, 0, - 862, 863, 5, 65, 0, 0, 863, 864, 5, 89, 0, 0, 864, 865, 5, 95, 0, 0, 865, - 866, 5, 76, 0, 0, 866, 867, 5, 69, 0, 0, 867, 868, 5, 78, 0, 0, 868, 869, - 5, 71, 0, 0, 869, 870, 5, 84, 0, 0, 870, 872, 5, 72, 0, 0, 871, 847, 1, - 0, 0, 0, 871, 859, 1, 0, 0, 0, 872, 108, 1, 0, 0, 0, 873, 874, 5, 101, - 0, 0, 874, 875, 5, 108, 0, 0, 875, 876, 5, 101, 0, 0, 876, 877, 5, 109, - 0, 0, 877, 878, 5, 101, 0, 0, 878, 879, 5, 110, 0, 0, 879, 880, 5, 116, - 0, 0, 880, 881, 5, 95, 0, 0, 881, 882, 5, 102, 0, 0, 882, 883, 5, 105, - 0, 0, 883, 884, 5, 108, 0, 0, 884, 885, 5, 116, 0, 0, 885, 886, 5, 101, - 0, 0, 886, 902, 5, 114, 0, 0, 887, 888, 5, 69, 0, 0, 888, 889, 5, 76, 0, - 0, 889, 890, 5, 69, 0, 0, 890, 891, 5, 77, 0, 0, 891, 892, 5, 69, 0, 0, - 892, 893, 5, 78, 0, 0, 893, 894, 5, 84, 0, 0, 894, 895, 5, 95, 0, 0, 895, - 896, 5, 70, 0, 0, 896, 897, 5, 73, 0, 0, 897, 898, 5, 76, 0, 0, 898, 899, - 5, 84, 0, 0, 899, 900, 5, 69, 0, 0, 900, 902, 5, 82, 0, 0, 901, 873, 1, - 0, 0, 0, 901, 887, 1, 0, 0, 0, 902, 110, 1, 0, 0, 0, 903, 904, 5, 115, - 0, 0, 904, 905, 5, 116, 0, 0, 905, 906, 5, 95, 0, 0, 906, 907, 5, 101, - 0, 0, 907, 908, 5, 113, 0, 0, 908, 909, 5, 117, 0, 0, 909, 910, 5, 97, - 0, 0, 910, 911, 5, 108, 0, 0, 911, 922, 5, 115, 0, 0, 912, 913, 5, 83, - 0, 0, 913, 914, 5, 84, 0, 0, 914, 915, 5, 95, 0, 0, 915, 916, 5, 69, 0, - 0, 916, 917, 5, 81, 0, 0, 917, 918, 5, 85, 0, 0, 918, 919, 5, 65, 0, 0, - 919, 920, 5, 76, 0, 0, 920, 922, 5, 83, 0, 0, 921, 903, 1, 0, 0, 0, 921, - 912, 1, 0, 0, 0, 922, 112, 1, 0, 0, 0, 923, 924, 5, 115, 0, 0, 924, 925, - 5, 116, 0, 0, 925, 926, 5, 95, 0, 0, 926, 927, 5, 116, 0, 0, 927, 928, - 5, 111, 0, 0, 928, 929, 5, 117, 0, 0, 929, 930, 5, 99, 0, 0, 930, 931, - 5, 104, 0, 0, 931, 932, 5, 101, 0, 0, 932, 944, 5, 115, 0, 0, 933, 934, - 5, 83, 0, 0, 934, 935, 5, 84, 0, 0, 935, 936, 5, 95, 0, 0, 936, 937, 5, - 84, 0, 0, 937, 938, 5, 79, 0, 0, 938, 939, 5, 85, 0, 0, 939, 940, 5, 67, - 0, 0, 940, 941, 5, 72, 0, 0, 941, 942, 5, 69, 0, 0, 942, 944, 5, 83, 0, - 0, 943, 923, 1, 0, 0, 0, 943, 933, 1, 0, 0, 0, 944, 114, 1, 0, 0, 0, 945, - 946, 5, 115, 0, 0, 946, 947, 5, 116, 0, 0, 947, 948, 5, 95, 0, 0, 948, - 949, 5, 111, 0, 0, 949, 950, 5, 118, 0, 0, 950, 951, 5, 101, 0, 0, 951, - 952, 5, 114, 0, 0, 952, 953, 5, 108, 0, 0, 953, 954, 5, 97, 0, 0, 954, - 955, 5, 112, 0, 0, 955, 968, 5, 115, 0, 0, 956, 957, 5, 83, 0, 0, 957, - 958, 5, 84, 0, 0, 958, 959, 5, 95, 0, 0, 959, 960, 5, 79, 0, 0, 960, 961, - 5, 86, 0, 0, 961, 962, 5, 69, 0, 0, 962, 963, 5, 82, 0, 0, 963, 964, 5, - 76, 0, 0, 964, 965, 5, 65, 0, 0, 965, 966, 5, 80, 0, 0, 966, 968, 5, 83, - 0, 0, 967, 945, 1, 0, 0, 0, 967, 956, 1, 0, 0, 0, 968, 116, 1, 0, 0, 0, - 969, 970, 5, 115, 0, 0, 970, 971, 5, 116, 0, 0, 971, 972, 5, 95, 0, 0, - 972, 973, 5, 99, 0, 0, 973, 974, 5, 114, 0, 0, 974, 975, 5, 111, 0, 0, - 975, 976, 5, 115, 0, 0, 976, 977, 5, 115, 0, 0, 977, 978, 5, 101, 0, 0, - 978, 990, 5, 115, 0, 0, 979, 980, 5, 83, 0, 0, 980, 981, 5, 84, 0, 0, 981, - 982, 5, 95, 0, 0, 982, 983, 5, 67, 0, 0, 983, 984, 5, 82, 0, 0, 984, 985, - 5, 79, 0, 0, 985, 986, 5, 83, 0, 0, 986, 987, 5, 83, 0, 0, 987, 988, 5, - 69, 0, 0, 988, 990, 5, 83, 0, 0, 989, 969, 1, 0, 0, 0, 989, 979, 1, 0, - 0, 0, 990, 118, 1, 0, 0, 0, 991, 992, 5, 115, 0, 0, 992, 993, 5, 116, 0, - 0, 993, 994, 5, 95, 0, 0, 994, 995, 5, 99, 0, 0, 995, 996, 5, 111, 0, 0, - 996, 997, 5, 110, 0, 0, 997, 998, 5, 116, 0, 0, 998, 999, 5, 97, 0, 0, - 999, 1000, 5, 105, 0, 0, 1000, 1001, 5, 110, 0, 0, 1001, 1014, 5, 115, - 0, 0, 1002, 1003, 5, 83, 0, 0, 1003, 1004, 5, 84, 0, 0, 1004, 1005, 5, - 95, 0, 0, 1005, 1006, 5, 67, 0, 0, 1006, 1007, 5, 79, 0, 0, 1007, 1008, - 5, 78, 0, 0, 1008, 1009, 5, 84, 0, 0, 1009, 1010, 5, 65, 0, 0, 1010, 1011, - 5, 73, 0, 0, 1011, 1012, 5, 78, 0, 0, 1012, 1014, 5, 83, 0, 0, 1013, 991, - 1, 0, 0, 0, 1013, 1002, 1, 0, 0, 0, 1014, 120, 1, 0, 0, 0, 1015, 1016, - 5, 115, 0, 0, 1016, 1017, 5, 116, 0, 0, 1017, 1018, 5, 95, 0, 0, 1018, - 1019, 5, 105, 0, 0, 1019, 1020, 5, 110, 0, 0, 1020, 1021, 5, 116, 0, 0, - 1021, 1022, 5, 101, 0, 0, 1022, 1023, 5, 114, 0, 0, 1023, 1024, 5, 115, - 0, 0, 1024, 1025, 5, 101, 0, 0, 1025, 1026, 5, 99, 0, 0, 1026, 1027, 5, - 116, 0, 0, 1027, 1042, 5, 115, 0, 0, 1028, 1029, 5, 83, 0, 0, 1029, 1030, - 5, 84, 0, 0, 1030, 1031, 5, 95, 0, 0, 1031, 1032, 5, 73, 0, 0, 1032, 1033, - 5, 78, 0, 0, 1033, 1034, 5, 84, 0, 0, 1034, 1035, 5, 69, 0, 0, 1035, 1036, - 5, 82, 0, 0, 1036, 1037, 5, 83, 0, 0, 1037, 1038, 5, 69, 0, 0, 1038, 1039, - 5, 67, 0, 0, 1039, 1040, 5, 84, 0, 0, 1040, 1042, 5, 83, 0, 0, 1041, 1015, - 1, 0, 0, 0, 1041, 1028, 1, 0, 0, 0, 1042, 122, 1, 0, 0, 0, 1043, 1044, - 5, 115, 0, 0, 1044, 1045, 5, 116, 0, 0, 1045, 1046, 5, 95, 0, 0, 1046, - 1047, 5, 119, 0, 0, 1047, 1048, 5, 105, 0, 0, 1048, 1049, 5, 116, 0, 0, - 1049, 1050, 5, 104, 0, 0, 1050, 1051, 5, 105, 0, 0, 1051, 1062, 5, 110, - 0, 0, 1052, 1053, 5, 83, 0, 0, 1053, 1054, 5, 84, 0, 0, 1054, 1055, 5, - 95, 0, 0, 1055, 1056, 5, 87, 0, 0, 1056, 1057, 5, 73, 0, 0, 1057, 1058, - 5, 84, 0, 0, 1058, 1059, 5, 72, 0, 0, 1059, 1060, 5, 73, 0, 0, 1060, 1062, - 5, 78, 0, 0, 1061, 1043, 1, 0, 0, 0, 1061, 1052, 1, 0, 0, 0, 1062, 124, - 1, 0, 0, 0, 1063, 1064, 5, 115, 0, 0, 1064, 1065, 5, 116, 0, 0, 1065, 1066, - 5, 95, 0, 0, 1066, 1067, 5, 100, 0, 0, 1067, 1068, 5, 119, 0, 0, 1068, - 1069, 5, 105, 0, 0, 1069, 1070, 5, 116, 0, 0, 1070, 1071, 5, 104, 0, 0, - 1071, 1072, 5, 105, 0, 0, 1072, 1084, 5, 110, 0, 0, 1073, 1074, 5, 83, - 0, 0, 1074, 1075, 5, 84, 0, 0, 1075, 1076, 5, 95, 0, 0, 1076, 1077, 5, - 68, 0, 0, 1077, 1078, 5, 87, 0, 0, 1078, 1079, 5, 73, 0, 0, 1079, 1080, - 5, 84, 0, 0, 1080, 1081, 5, 72, 0, 0, 1081, 1082, 5, 73, 0, 0, 1082, 1084, - 5, 78, 0, 0, 1083, 1063, 1, 0, 0, 0, 1083, 1073, 1, 0, 0, 0, 1084, 126, - 1, 0, 0, 0, 1085, 1086, 5, 115, 0, 0, 1086, 1087, 5, 116, 0, 0, 1087, 1088, - 5, 95, 0, 0, 1088, 1089, 5, 105, 0, 0, 1089, 1090, 5, 115, 0, 0, 1090, - 1091, 5, 118, 0, 0, 1091, 1092, 5, 97, 0, 0, 1092, 1093, 5, 108, 0, 0, - 1093, 1094, 5, 105, 0, 0, 1094, 1106, 5, 100, 0, 0, 1095, 1096, 5, 83, - 0, 0, 1096, 1097, 5, 84, 0, 0, 1097, 1098, 5, 95, 0, 0, 1098, 1099, 5, - 73, 0, 0, 1099, 1100, 5, 83, 0, 0, 1100, 1101, 5, 86, 0, 0, 1101, 1102, - 5, 65, 0, 0, 1102, 1103, 5, 76, 0, 0, 1103, 1104, 5, 73, 0, 0, 1104, 1106, - 5, 68, 0, 0, 1105, 1085, 1, 0, 0, 0, 1105, 1095, 1, 0, 0, 0, 1106, 128, - 1, 0, 0, 0, 1107, 1108, 5, 116, 0, 0, 1108, 1109, 5, 114, 0, 0, 1109, 1110, - 5, 117, 0, 0, 1110, 1135, 5, 101, 0, 0, 1111, 1112, 5, 84, 0, 0, 1112, - 1113, 5, 114, 0, 0, 1113, 1114, 5, 117, 0, 0, 1114, 1135, 5, 101, 0, 0, - 1115, 1116, 5, 84, 0, 0, 1116, 1117, 5, 82, 0, 0, 1117, 1118, 5, 85, 0, - 0, 1118, 1135, 5, 69, 0, 0, 1119, 1120, 5, 102, 0, 0, 1120, 1121, 5, 97, - 0, 0, 1121, 1122, 5, 108, 0, 0, 1122, 1123, 5, 115, 0, 0, 1123, 1135, 5, - 101, 0, 0, 1124, 1125, 5, 70, 0, 0, 1125, 1126, 5, 97, 0, 0, 1126, 1127, - 5, 108, 0, 0, 1127, 1128, 5, 115, 0, 0, 1128, 1135, 5, 101, 0, 0, 1129, - 1130, 5, 70, 0, 0, 1130, 1131, 5, 65, 0, 0, 1131, 1132, 5, 76, 0, 0, 1132, - 1133, 5, 83, 0, 0, 1133, 1135, 5, 69, 0, 0, 1134, 1107, 1, 0, 0, 0, 1134, - 1111, 1, 0, 0, 0, 1134, 1115, 1, 0, 0, 0, 1134, 1119, 1, 0, 0, 0, 1134, - 1124, 1, 0, 0, 0, 1134, 1129, 1, 0, 0, 0, 1135, 130, 1, 0, 0, 0, 1136, - 1141, 3, 163, 81, 0, 1137, 1141, 3, 165, 82, 0, 1138, 1141, 3, 167, 83, - 0, 1139, 1141, 3, 161, 80, 0, 1140, 1136, 1, 0, 0, 0, 1140, 1137, 1, 0, - 0, 0, 1140, 1138, 1, 0, 0, 0, 1140, 1139, 1, 0, 0, 0, 1141, 132, 1, 0, - 0, 0, 1142, 1145, 3, 179, 89, 0, 1143, 1145, 3, 181, 90, 0, 1144, 1142, - 1, 0, 0, 0, 1144, 1143, 1, 0, 0, 0, 1145, 134, 1, 0, 0, 0, 1146, 1151, - 3, 157, 78, 0, 1147, 1150, 3, 157, 78, 0, 1148, 1150, 3, 159, 79, 0, 1149, - 1147, 1, 0, 0, 0, 1149, 1148, 1, 0, 0, 0, 1150, 1153, 1, 0, 0, 0, 1151, - 1149, 1, 0, 0, 0, 1151, 1152, 1, 0, 0, 0, 1152, 136, 1, 0, 0, 0, 1153, - 1151, 1, 0, 0, 0, 1154, 1155, 5, 36, 0, 0, 1155, 1156, 5, 109, 0, 0, 1156, - 1157, 5, 101, 0, 0, 1157, 1158, 5, 116, 0, 0, 1158, 1159, 5, 97, 0, 0, - 1159, 138, 1, 0, 0, 0, 1160, 1162, 3, 147, 73, 0, 1161, 1160, 1, 0, 0, - 0, 1161, 1162, 1, 0, 0, 0, 1162, 1173, 1, 0, 0, 0, 1163, 1165, 5, 34, 0, - 0, 1164, 1166, 3, 149, 74, 0, 1165, 1164, 1, 0, 0, 0, 1165, 1166, 1, 0, - 0, 0, 1166, 1167, 1, 0, 0, 0, 1167, 1174, 5, 34, 0, 0, 1168, 1170, 5, 39, - 0, 0, 1169, 1171, 3, 151, 75, 0, 1170, 1169, 1, 0, 0, 0, 1170, 1171, 1, - 0, 0, 0, 1171, 1172, 1, 0, 0, 0, 1172, 1174, 5, 39, 0, 0, 1173, 1163, 1, - 0, 0, 0, 1173, 1168, 1, 0, 0, 0, 1174, 140, 1, 0, 0, 0, 1175, 1178, 3, - 135, 67, 0, 1176, 1178, 3, 137, 68, 0, 1177, 1175, 1, 0, 0, 0, 1177, 1176, - 1, 0, 0, 0, 1178, 1186, 1, 0, 0, 0, 1179, 1182, 5, 91, 0, 0, 1180, 1183, - 3, 139, 69, 0, 1181, 1183, 3, 163, 81, 0, 1182, 1180, 1, 0, 0, 0, 1182, - 1181, 1, 0, 0, 0, 1183, 1184, 1, 0, 0, 0, 1184, 1185, 5, 93, 0, 0, 1185, - 1187, 1, 0, 0, 0, 1186, 1179, 1, 0, 0, 0, 1187, 1188, 1, 0, 0, 0, 1188, - 1186, 1, 0, 0, 0, 1188, 1189, 1, 0, 0, 0, 1189, 142, 1, 0, 0, 0, 1190, - 1191, 3, 135, 67, 0, 1191, 1192, 5, 91, 0, 0, 1192, 1193, 3, 135, 67, 0, - 1193, 1194, 5, 93, 0, 0, 1194, 144, 1, 0, 0, 0, 1195, 1196, 5, 36, 0, 0, - 1196, 1197, 5, 91, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1199, 3, 135, 67, - 0, 1199, 1200, 5, 93, 0, 0, 1200, 146, 1, 0, 0, 0, 1201, 1202, 5, 117, - 0, 0, 1202, 1205, 5, 56, 0, 0, 1203, 1205, 7, 0, 0, 0, 1204, 1201, 1, 0, - 0, 0, 1204, 1203, 1, 0, 0, 0, 1205, 148, 1, 0, 0, 0, 1206, 1208, 3, 153, - 76, 0, 1207, 1206, 1, 0, 0, 0, 1208, 1209, 1, 0, 0, 0, 1209, 1207, 1, 0, - 0, 0, 1209, 1210, 1, 0, 0, 0, 1210, 150, 1, 0, 0, 0, 1211, 1213, 3, 155, - 77, 0, 1212, 1211, 1, 0, 0, 0, 1213, 1214, 1, 0, 0, 0, 1214, 1212, 1, 0, - 0, 0, 1214, 1215, 1, 0, 0, 0, 1215, 152, 1, 0, 0, 0, 1216, 1224, 8, 1, - 0, 0, 1217, 1224, 3, 195, 97, 0, 1218, 1219, 5, 92, 0, 0, 1219, 1224, 5, - 10, 0, 0, 1220, 1221, 5, 92, 0, 0, 1221, 1222, 5, 13, 0, 0, 1222, 1224, - 5, 10, 0, 0, 1223, 1216, 1, 0, 0, 0, 1223, 1217, 1, 0, 0, 0, 1223, 1218, - 1, 0, 0, 0, 1223, 1220, 1, 0, 0, 0, 1224, 154, 1, 0, 0, 0, 1225, 1233, - 8, 2, 0, 0, 1226, 1233, 3, 195, 97, 0, 1227, 1228, 5, 92, 0, 0, 1228, 1233, - 5, 10, 0, 0, 1229, 1230, 5, 92, 0, 0, 1230, 1231, 5, 13, 0, 0, 1231, 1233, - 5, 10, 0, 0, 1232, 1225, 1, 0, 0, 0, 1232, 1226, 1, 0, 0, 0, 1232, 1227, - 1, 0, 0, 0, 1232, 1229, 1, 0, 0, 0, 1233, 156, 1, 0, 0, 0, 1234, 1235, - 7, 3, 0, 0, 1235, 158, 1, 0, 0, 0, 1236, 1237, 7, 4, 0, 0, 1237, 160, 1, - 0, 0, 0, 1238, 1239, 5, 48, 0, 0, 1239, 1241, 7, 5, 0, 0, 1240, 1242, 7, - 6, 0, 0, 1241, 1240, 1, 0, 0, 0, 1242, 1243, 1, 0, 0, 0, 1243, 1241, 1, - 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 162, 1, 0, 0, 0, 1245, 1249, 3, - 169, 84, 0, 1246, 1248, 3, 159, 79, 0, 1247, 1246, 1, 0, 0, 0, 1248, 1251, - 1, 0, 0, 0, 1249, 1247, 1, 0, 0, 0, 1249, 1250, 1, 0, 0, 0, 1250, 1254, - 1, 0, 0, 0, 1251, 1249, 1, 0, 0, 0, 1252, 1254, 5, 48, 0, 0, 1253, 1245, - 1, 0, 0, 0, 1253, 1252, 1, 0, 0, 0, 1254, 164, 1, 0, 0, 0, 1255, 1259, - 5, 48, 0, 0, 1256, 1258, 3, 171, 85, 0, 1257, 1256, 1, 0, 0, 0, 1258, 1261, - 1, 0, 0, 0, 1259, 1257, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 166, - 1, 0, 0, 0, 1261, 1259, 1, 0, 0, 0, 1262, 1263, 5, 48, 0, 0, 1263, 1264, - 7, 7, 0, 0, 1264, 1265, 3, 191, 95, 0, 1265, 168, 1, 0, 0, 0, 1266, 1267, - 7, 8, 0, 0, 1267, 170, 1, 0, 0, 0, 1268, 1269, 7, 9, 0, 0, 1269, 172, 1, - 0, 0, 0, 1270, 1271, 7, 10, 0, 0, 1271, 174, 1, 0, 0, 0, 1272, 1273, 3, - 173, 86, 0, 1273, 1274, 3, 173, 86, 0, 1274, 1275, 3, 173, 86, 0, 1275, - 1276, 3, 173, 86, 0, 1276, 176, 1, 0, 0, 0, 1277, 1278, 5, 92, 0, 0, 1278, - 1279, 5, 117, 0, 0, 1279, 1280, 1, 0, 0, 0, 1280, 1288, 3, 175, 87, 0, - 1281, 1282, 5, 92, 0, 0, 1282, 1283, 5, 85, 0, 0, 1283, 1284, 1, 0, 0, - 0, 1284, 1285, 3, 175, 87, 0, 1285, 1286, 3, 175, 87, 0, 1286, 1288, 1, - 0, 0, 0, 1287, 1277, 1, 0, 0, 0, 1287, 1281, 1, 0, 0, 0, 1288, 178, 1, - 0, 0, 0, 1289, 1291, 3, 183, 91, 0, 1290, 1292, 3, 185, 92, 0, 1291, 1290, - 1, 0, 0, 0, 1291, 1292, 1, 0, 0, 0, 1292, 1297, 1, 0, 0, 0, 1293, 1294, - 3, 187, 93, 0, 1294, 1295, 3, 185, 92, 0, 1295, 1297, 1, 0, 0, 0, 1296, - 1289, 1, 0, 0, 0, 1296, 1293, 1, 0, 0, 0, 1297, 180, 1, 0, 0, 0, 1298, - 1299, 5, 48, 0, 0, 1299, 1302, 7, 7, 0, 0, 1300, 1303, 3, 189, 94, 0, 1301, - 1303, 3, 191, 95, 0, 1302, 1300, 1, 0, 0, 0, 1302, 1301, 1, 0, 0, 0, 1303, - 1304, 1, 0, 0, 0, 1304, 1305, 3, 193, 96, 0, 1305, 182, 1, 0, 0, 0, 1306, - 1308, 3, 187, 93, 0, 1307, 1306, 1, 0, 0, 0, 1307, 1308, 1, 0, 0, 0, 1308, - 1309, 1, 0, 0, 0, 1309, 1310, 5, 46, 0, 0, 1310, 1315, 3, 187, 93, 0, 1311, - 1312, 3, 187, 93, 0, 1312, 1313, 5, 46, 0, 0, 1313, 1315, 1, 0, 0, 0, 1314, - 1307, 1, 0, 0, 0, 1314, 1311, 1, 0, 0, 0, 1315, 184, 1, 0, 0, 0, 1316, - 1318, 7, 11, 0, 0, 1317, 1319, 7, 12, 0, 0, 1318, 1317, 1, 0, 0, 0, 1318, - 1319, 1, 0, 0, 0, 1319, 1320, 1, 0, 0, 0, 1320, 1321, 3, 187, 93, 0, 1321, - 186, 1, 0, 0, 0, 1322, 1324, 3, 159, 79, 0, 1323, 1322, 1, 0, 0, 0, 1324, - 1325, 1, 0, 0, 0, 1325, 1323, 1, 0, 0, 0, 1325, 1326, 1, 0, 0, 0, 1326, - 188, 1, 0, 0, 0, 1327, 1329, 3, 191, 95, 0, 1328, 1327, 1, 0, 0, 0, 1328, - 1329, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1331, 5, 46, 0, 0, 1331, - 1336, 3, 191, 95, 0, 1332, 1333, 3, 191, 95, 0, 1333, 1334, 5, 46, 0, 0, - 1334, 1336, 1, 0, 0, 0, 1335, 1328, 1, 0, 0, 0, 1335, 1332, 1, 0, 0, 0, - 1336, 190, 1, 0, 0, 0, 1337, 1339, 3, 173, 86, 0, 1338, 1337, 1, 0, 0, - 0, 1339, 1340, 1, 0, 0, 0, 1340, 1338, 1, 0, 0, 0, 1340, 1341, 1, 0, 0, - 0, 1341, 192, 1, 0, 0, 0, 1342, 1344, 7, 13, 0, 0, 1343, 1345, 7, 12, 0, - 0, 1344, 1343, 1, 0, 0, 0, 1344, 1345, 1, 0, 0, 0, 1345, 1346, 1, 0, 0, - 0, 1346, 1347, 3, 187, 93, 0, 1347, 194, 1, 0, 0, 0, 1348, 1349, 5, 92, - 0, 0, 1349, 1364, 7, 14, 0, 0, 1350, 1351, 5, 92, 0, 0, 1351, 1353, 3, - 171, 85, 0, 1352, 1354, 3, 171, 85, 0, 1353, 1352, 1, 0, 0, 0, 1353, 1354, - 1, 0, 0, 0, 1354, 1356, 1, 0, 0, 0, 1355, 1357, 3, 171, 85, 0, 1356, 1355, - 1, 0, 0, 0, 1356, 1357, 1, 0, 0, 0, 1357, 1364, 1, 0, 0, 0, 1358, 1359, - 5, 92, 0, 0, 1359, 1360, 5, 120, 0, 0, 1360, 1361, 1, 0, 0, 0, 1361, 1364, - 3, 191, 95, 0, 1362, 1364, 3, 177, 88, 0, 1363, 1348, 1, 0, 0, 0, 1363, - 1350, 1, 0, 0, 0, 1363, 1358, 1, 0, 0, 0, 1363, 1362, 1, 0, 0, 0, 1364, - 196, 1, 0, 0, 0, 1365, 1367, 7, 15, 0, 0, 1366, 1365, 1, 0, 0, 0, 1367, - 1368, 1, 0, 0, 0, 1368, 1366, 1, 0, 0, 0, 1368, 1369, 1, 0, 0, 0, 1369, - 1370, 1, 0, 0, 0, 1370, 1371, 6, 98, 0, 0, 1371, 198, 1, 0, 0, 0, 1372, - 1374, 5, 13, 0, 0, 1373, 1375, 5, 10, 0, 0, 1374, 1373, 1, 0, 0, 0, 1374, - 1375, 1, 0, 0, 0, 1375, 1378, 1, 0, 0, 0, 1376, 1378, 5, 10, 0, 0, 1377, - 1372, 1, 0, 0, 0, 1377, 1376, 1, 0, 0, 0, 1378, 1379, 1, 0, 0, 0, 1379, - 1380, 6, 99, 0, 0, 1380, 200, 1, 0, 0, 0, 79, 0, 239, 253, 275, 301, 329, - 349, 369, 393, 415, 439, 457, 465, 507, 527, 564, 572, 588, 612, 623, 629, - 634, 636, 667, 703, 739, 769, 807, 845, 871, 901, 921, 943, 967, 989, 1013, - 1041, 1061, 1083, 1105, 1134, 1140, 1144, 1149, 1151, 1161, 1165, 1170, - 1173, 1177, 1182, 1188, 1204, 1209, 1214, 1223, 1232, 1243, 1249, 1253, - 1259, 1287, 1291, 1296, 1302, 1307, 1314, 1318, 1325, 1328, 1335, 1340, - 1344, 1353, 1356, 1363, 1368, 1374, 1377, 1, 6, 0, 0, + 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 1137, 8, 64, 1, + 65, 1, 65, 1, 65, 1, 65, 3, 65, 1143, 8, 65, 1, 66, 1, 66, 3, 66, 1147, + 8, 66, 1, 67, 1, 67, 1, 67, 5, 67, 1152, 8, 67, 10, 67, 12, 67, 1155, 9, + 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 3, 69, 1164, 8, 69, + 1, 69, 1, 69, 3, 69, 1168, 8, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1173, 8, + 69, 1, 69, 3, 69, 1176, 8, 69, 1, 70, 1, 70, 3, 70, 1180, 8, 70, 1, 70, + 1, 70, 1, 70, 3, 70, 1185, 8, 70, 1, 70, 1, 70, 4, 70, 1189, 8, 70, 11, + 70, 12, 70, 1190, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, + 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, + 73, 1, 74, 1, 74, 1, 74, 3, 74, 1215, 8, 74, 1, 75, 4, 75, 1218, 8, 75, + 11, 75, 12, 75, 1219, 1, 76, 4, 76, 1223, 8, 76, 11, 76, 12, 76, 1224, + 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1234, 8, 77, 1, + 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1243, 8, 78, 1, 79, + 1, 79, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 4, 81, 1252, 8, 81, 11, 81, 12, + 81, 1253, 1, 82, 1, 82, 5, 82, 1258, 8, 82, 10, 82, 12, 82, 1261, 9, 82, + 1, 82, 3, 82, 1264, 8, 82, 1, 83, 1, 83, 5, 83, 1268, 8, 83, 10, 83, 12, + 83, 1271, 9, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, + 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, + 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1298, 8, 89, 1, 90, + 1, 90, 3, 90, 1302, 8, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1307, 8, 90, 1, + 91, 1, 91, 1, 91, 1, 91, 3, 91, 1313, 8, 91, 1, 91, 1, 91, 1, 92, 3, 92, + 1318, 8, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 3, 92, 1325, 8, 92, 1, + 93, 1, 93, 3, 93, 1329, 8, 93, 1, 93, 1, 93, 1, 94, 4, 94, 1334, 8, 94, + 11, 94, 12, 94, 1335, 1, 95, 3, 95, 1339, 8, 95, 1, 95, 1, 95, 1, 95, 1, + 95, 1, 95, 3, 95, 1346, 8, 95, 1, 96, 4, 96, 1349, 8, 96, 11, 96, 12, 96, + 1350, 1, 97, 1, 97, 3, 97, 1355, 8, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, + 98, 1, 98, 1, 98, 3, 98, 1364, 8, 98, 1, 98, 3, 98, 1367, 8, 98, 1, 98, + 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1374, 8, 98, 1, 99, 4, 99, 1377, 8, + 99, 11, 99, 12, 99, 1378, 1, 99, 1, 99, 1, 100, 1, 100, 3, 100, 1385, 8, + 100, 1, 100, 3, 100, 1388, 8, 100, 1, 100, 1, 100, 0, 0, 101, 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, 0, 151, 0, 153, 0, 155, 0, 157, 0, 159, 0, 161, 0, 163, + 0, 165, 0, 167, 0, 169, 0, 171, 0, 173, 0, 175, 0, 177, 0, 179, 0, 181, + 0, 183, 0, 185, 0, 187, 0, 189, 0, 191, 0, 193, 0, 195, 0, 197, 0, 199, + 75, 201, 76, 1, 0, 16, 3, 0, 76, 76, 85, 85, 117, 117, 4, 0, 10, 10, 13, + 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 3, 0, 65, 90, + 95, 95, 97, 122, 1, 0, 48, 57, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 2, 0, + 88, 88, 120, 120, 1, 0, 49, 57, 1, 0, 48, 55, 3, 0, 48, 57, 65, 70, 97, + 102, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 2, 0, 80, 80, 112, 112, + 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 97, 98, 102, 102, 110, 110, 114, + 114, 116, 116, 118, 118, 2, 0, 9, 9, 32, 32, 1458, 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, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 1, 203, + 1, 0, 0, 0, 3, 205, 1, 0, 0, 0, 5, 207, 1, 0, 0, 0, 7, 209, 1, 0, 0, 0, + 9, 211, 1, 0, 0, 0, 11, 213, 1, 0, 0, 0, 13, 215, 1, 0, 0, 0, 15, 217, + 1, 0, 0, 0, 17, 219, 1, 0, 0, 0, 19, 222, 1, 0, 0, 0, 21, 224, 1, 0, 0, + 0, 23, 227, 1, 0, 0, 0, 25, 230, 1, 0, 0, 0, 27, 241, 1, 0, 0, 0, 29, 255, + 1, 0, 0, 0, 31, 277, 1, 0, 0, 0, 33, 303, 1, 0, 0, 0, 35, 331, 1, 0, 0, + 0, 37, 351, 1, 0, 0, 0, 39, 371, 1, 0, 0, 0, 41, 395, 1, 0, 0, 0, 43, 417, + 1, 0, 0, 0, 45, 441, 1, 0, 0, 0, 47, 459, 1, 0, 0, 0, 49, 467, 1, 0, 0, + 0, 51, 509, 1, 0, 0, 0, 53, 529, 1, 0, 0, 0, 55, 531, 1, 0, 0, 0, 57, 533, + 1, 0, 0, 0, 59, 535, 1, 0, 0, 0, 61, 537, 1, 0, 0, 0, 63, 539, 1, 0, 0, + 0, 65, 541, 1, 0, 0, 0, 67, 543, 1, 0, 0, 0, 69, 546, 1, 0, 0, 0, 71, 549, + 1, 0, 0, 0, 73, 552, 1, 0, 0, 0, 75, 554, 1, 0, 0, 0, 77, 556, 1, 0, 0, + 0, 79, 566, 1, 0, 0, 0, 81, 574, 1, 0, 0, 0, 83, 590, 1, 0, 0, 0, 85, 614, + 1, 0, 0, 0, 87, 616, 1, 0, 0, 0, 89, 625, 1, 0, 0, 0, 91, 631, 1, 0, 0, + 0, 93, 633, 1, 0, 0, 0, 95, 669, 1, 0, 0, 0, 97, 705, 1, 0, 0, 0, 99, 741, + 1, 0, 0, 0, 101, 771, 1, 0, 0, 0, 103, 809, 1, 0, 0, 0, 105, 847, 1, 0, + 0, 0, 107, 873, 1, 0, 0, 0, 109, 903, 1, 0, 0, 0, 111, 923, 1, 0, 0, 0, + 113, 945, 1, 0, 0, 0, 115, 969, 1, 0, 0, 0, 117, 991, 1, 0, 0, 0, 119, + 1015, 1, 0, 0, 0, 121, 1043, 1, 0, 0, 0, 123, 1063, 1, 0, 0, 0, 125, 1085, + 1, 0, 0, 0, 127, 1107, 1, 0, 0, 0, 129, 1136, 1, 0, 0, 0, 131, 1142, 1, + 0, 0, 0, 133, 1146, 1, 0, 0, 0, 135, 1148, 1, 0, 0, 0, 137, 1156, 1, 0, + 0, 0, 139, 1163, 1, 0, 0, 0, 141, 1179, 1, 0, 0, 0, 143, 1192, 1, 0, 0, + 0, 145, 1200, 1, 0, 0, 0, 147, 1205, 1, 0, 0, 0, 149, 1214, 1, 0, 0, 0, + 151, 1217, 1, 0, 0, 0, 153, 1222, 1, 0, 0, 0, 155, 1233, 1, 0, 0, 0, 157, + 1242, 1, 0, 0, 0, 159, 1244, 1, 0, 0, 0, 161, 1246, 1, 0, 0, 0, 163, 1248, + 1, 0, 0, 0, 165, 1263, 1, 0, 0, 0, 167, 1265, 1, 0, 0, 0, 169, 1272, 1, + 0, 0, 0, 171, 1276, 1, 0, 0, 0, 173, 1278, 1, 0, 0, 0, 175, 1280, 1, 0, + 0, 0, 177, 1282, 1, 0, 0, 0, 179, 1297, 1, 0, 0, 0, 181, 1306, 1, 0, 0, + 0, 183, 1308, 1, 0, 0, 0, 185, 1324, 1, 0, 0, 0, 187, 1326, 1, 0, 0, 0, + 189, 1333, 1, 0, 0, 0, 191, 1345, 1, 0, 0, 0, 193, 1348, 1, 0, 0, 0, 195, + 1352, 1, 0, 0, 0, 197, 1373, 1, 0, 0, 0, 199, 1376, 1, 0, 0, 0, 201, 1387, + 1, 0, 0, 0, 203, 204, 5, 40, 0, 0, 204, 2, 1, 0, 0, 0, 205, 206, 5, 41, + 0, 0, 206, 4, 1, 0, 0, 0, 207, 208, 5, 91, 0, 0, 208, 6, 1, 0, 0, 0, 209, + 210, 5, 44, 0, 0, 210, 8, 1, 0, 0, 0, 211, 212, 5, 93, 0, 0, 212, 10, 1, + 0, 0, 0, 213, 214, 5, 123, 0, 0, 214, 12, 1, 0, 0, 0, 215, 216, 5, 125, + 0, 0, 216, 14, 1, 0, 0, 0, 217, 218, 5, 60, 0, 0, 218, 16, 1, 0, 0, 0, + 219, 220, 5, 60, 0, 0, 220, 221, 5, 61, 0, 0, 221, 18, 1, 0, 0, 0, 222, + 223, 5, 62, 0, 0, 223, 20, 1, 0, 0, 0, 224, 225, 5, 62, 0, 0, 225, 226, + 5, 61, 0, 0, 226, 22, 1, 0, 0, 0, 227, 228, 5, 61, 0, 0, 228, 229, 5, 61, + 0, 0, 229, 24, 1, 0, 0, 0, 230, 231, 5, 33, 0, 0, 231, 232, 5, 61, 0, 0, + 232, 26, 1, 0, 0, 0, 233, 234, 5, 108, 0, 0, 234, 235, 5, 105, 0, 0, 235, + 236, 5, 107, 0, 0, 236, 242, 5, 101, 0, 0, 237, 238, 5, 76, 0, 0, 238, + 239, 5, 73, 0, 0, 239, 240, 5, 75, 0, 0, 240, 242, 5, 69, 0, 0, 241, 233, + 1, 0, 0, 0, 241, 237, 1, 0, 0, 0, 242, 28, 1, 0, 0, 0, 243, 244, 5, 101, + 0, 0, 244, 245, 5, 120, 0, 0, 245, 246, 5, 105, 0, 0, 246, 247, 5, 115, + 0, 0, 247, 248, 5, 116, 0, 0, 248, 256, 5, 115, 0, 0, 249, 250, 5, 69, + 0, 0, 250, 251, 5, 88, 0, 0, 251, 252, 5, 73, 0, 0, 252, 253, 5, 83, 0, + 0, 253, 254, 5, 84, 0, 0, 254, 256, 5, 83, 0, 0, 255, 243, 1, 0, 0, 0, + 255, 249, 1, 0, 0, 0, 256, 30, 1, 0, 0, 0, 257, 258, 5, 116, 0, 0, 258, + 259, 5, 101, 0, 0, 259, 260, 5, 120, 0, 0, 260, 261, 5, 116, 0, 0, 261, + 262, 5, 95, 0, 0, 262, 263, 5, 109, 0, 0, 263, 264, 5, 97, 0, 0, 264, 265, + 5, 116, 0, 0, 265, 266, 5, 99, 0, 0, 266, 278, 5, 104, 0, 0, 267, 268, + 5, 84, 0, 0, 268, 269, 5, 69, 0, 0, 269, 270, 5, 88, 0, 0, 270, 271, 5, + 84, 0, 0, 271, 272, 5, 95, 0, 0, 272, 273, 5, 77, 0, 0, 273, 274, 5, 65, + 0, 0, 274, 275, 5, 84, 0, 0, 275, 276, 5, 67, 0, 0, 276, 278, 5, 72, 0, + 0, 277, 257, 1, 0, 0, 0, 277, 267, 1, 0, 0, 0, 278, 32, 1, 0, 0, 0, 279, + 280, 5, 112, 0, 0, 280, 281, 5, 104, 0, 0, 281, 282, 5, 114, 0, 0, 282, + 283, 5, 97, 0, 0, 283, 284, 5, 115, 0, 0, 284, 285, 5, 101, 0, 0, 285, + 286, 5, 95, 0, 0, 286, 287, 5, 109, 0, 0, 287, 288, 5, 97, 0, 0, 288, 289, + 5, 116, 0, 0, 289, 290, 5, 99, 0, 0, 290, 304, 5, 104, 0, 0, 291, 292, + 5, 80, 0, 0, 292, 293, 5, 72, 0, 0, 293, 294, 5, 82, 0, 0, 294, 295, 5, + 65, 0, 0, 295, 296, 5, 83, 0, 0, 296, 297, 5, 69, 0, 0, 297, 298, 5, 95, + 0, 0, 298, 299, 5, 77, 0, 0, 299, 300, 5, 65, 0, 0, 300, 301, 5, 84, 0, + 0, 301, 302, 5, 67, 0, 0, 302, 304, 5, 72, 0, 0, 303, 279, 1, 0, 0, 0, + 303, 291, 1, 0, 0, 0, 304, 34, 1, 0, 0, 0, 305, 306, 5, 114, 0, 0, 306, + 307, 5, 97, 0, 0, 307, 308, 5, 110, 0, 0, 308, 309, 5, 100, 0, 0, 309, + 310, 5, 111, 0, 0, 310, 311, 5, 109, 0, 0, 311, 312, 5, 95, 0, 0, 312, + 313, 5, 115, 0, 0, 313, 314, 5, 97, 0, 0, 314, 315, 5, 109, 0, 0, 315, + 316, 5, 112, 0, 0, 316, 317, 5, 108, 0, 0, 317, 332, 5, 101, 0, 0, 318, + 319, 5, 82, 0, 0, 319, 320, 5, 65, 0, 0, 320, 321, 5, 78, 0, 0, 321, 322, + 5, 68, 0, 0, 322, 323, 5, 79, 0, 0, 323, 324, 5, 77, 0, 0, 324, 325, 5, + 95, 0, 0, 325, 326, 5, 83, 0, 0, 326, 327, 5, 65, 0, 0, 327, 328, 5, 77, + 0, 0, 328, 329, 5, 80, 0, 0, 329, 330, 5, 76, 0, 0, 330, 332, 5, 69, 0, + 0, 331, 305, 1, 0, 0, 0, 331, 318, 1, 0, 0, 0, 332, 36, 1, 0, 0, 0, 333, + 334, 5, 109, 0, 0, 334, 335, 5, 97, 0, 0, 335, 336, 5, 116, 0, 0, 336, + 337, 5, 99, 0, 0, 337, 338, 5, 104, 0, 0, 338, 339, 5, 95, 0, 0, 339, 340, + 5, 97, 0, 0, 340, 341, 5, 108, 0, 0, 341, 352, 5, 108, 0, 0, 342, 343, + 5, 77, 0, 0, 343, 344, 5, 65, 0, 0, 344, 345, 5, 84, 0, 0, 345, 346, 5, + 67, 0, 0, 346, 347, 5, 72, 0, 0, 347, 348, 5, 95, 0, 0, 348, 349, 5, 65, + 0, 0, 349, 350, 5, 76, 0, 0, 350, 352, 5, 76, 0, 0, 351, 333, 1, 0, 0, + 0, 351, 342, 1, 0, 0, 0, 352, 38, 1, 0, 0, 0, 353, 354, 5, 109, 0, 0, 354, + 355, 5, 97, 0, 0, 355, 356, 5, 116, 0, 0, 356, 357, 5, 99, 0, 0, 357, 358, + 5, 104, 0, 0, 358, 359, 5, 95, 0, 0, 359, 360, 5, 97, 0, 0, 360, 361, 5, + 110, 0, 0, 361, 372, 5, 121, 0, 0, 362, 363, 5, 77, 0, 0, 363, 364, 5, + 65, 0, 0, 364, 365, 5, 84, 0, 0, 365, 366, 5, 67, 0, 0, 366, 367, 5, 72, + 0, 0, 367, 368, 5, 95, 0, 0, 368, 369, 5, 65, 0, 0, 369, 370, 5, 78, 0, + 0, 370, 372, 5, 89, 0, 0, 371, 353, 1, 0, 0, 0, 371, 362, 1, 0, 0, 0, 372, + 40, 1, 0, 0, 0, 373, 374, 5, 109, 0, 0, 374, 375, 5, 97, 0, 0, 375, 376, + 5, 116, 0, 0, 376, 377, 5, 99, 0, 0, 377, 378, 5, 104, 0, 0, 378, 379, + 5, 95, 0, 0, 379, 380, 5, 108, 0, 0, 380, 381, 5, 101, 0, 0, 381, 382, + 5, 97, 0, 0, 382, 383, 5, 115, 0, 0, 383, 396, 5, 116, 0, 0, 384, 385, + 5, 77, 0, 0, 385, 386, 5, 65, 0, 0, 386, 387, 5, 84, 0, 0, 387, 388, 5, + 67, 0, 0, 388, 389, 5, 72, 0, 0, 389, 390, 5, 95, 0, 0, 390, 391, 5, 76, + 0, 0, 391, 392, 5, 69, 0, 0, 392, 393, 5, 65, 0, 0, 393, 394, 5, 83, 0, + 0, 394, 396, 5, 84, 0, 0, 395, 373, 1, 0, 0, 0, 395, 384, 1, 0, 0, 0, 396, + 42, 1, 0, 0, 0, 397, 398, 5, 109, 0, 0, 398, 399, 5, 97, 0, 0, 399, 400, + 5, 116, 0, 0, 400, 401, 5, 99, 0, 0, 401, 402, 5, 104, 0, 0, 402, 403, + 5, 95, 0, 0, 403, 404, 5, 109, 0, 0, 404, 405, 5, 111, 0, 0, 405, 406, + 5, 115, 0, 0, 406, 418, 5, 116, 0, 0, 407, 408, 5, 77, 0, 0, 408, 409, + 5, 65, 0, 0, 409, 410, 5, 84, 0, 0, 410, 411, 5, 67, 0, 0, 411, 412, 5, + 72, 0, 0, 412, 413, 5, 95, 0, 0, 413, 414, 5, 77, 0, 0, 414, 415, 5, 79, + 0, 0, 415, 416, 5, 83, 0, 0, 416, 418, 5, 84, 0, 0, 417, 397, 1, 0, 0, + 0, 417, 407, 1, 0, 0, 0, 418, 44, 1, 0, 0, 0, 419, 420, 5, 109, 0, 0, 420, + 421, 5, 97, 0, 0, 421, 422, 5, 116, 0, 0, 422, 423, 5, 99, 0, 0, 423, 424, + 5, 104, 0, 0, 424, 425, 5, 95, 0, 0, 425, 426, 5, 101, 0, 0, 426, 427, + 5, 120, 0, 0, 427, 428, 5, 97, 0, 0, 428, 429, 5, 99, 0, 0, 429, 442, 5, + 116, 0, 0, 430, 431, 5, 77, 0, 0, 431, 432, 5, 65, 0, 0, 432, 433, 5, 84, + 0, 0, 433, 434, 5, 67, 0, 0, 434, 435, 5, 72, 0, 0, 435, 436, 5, 95, 0, + 0, 436, 437, 5, 69, 0, 0, 437, 438, 5, 88, 0, 0, 438, 439, 5, 65, 0, 0, + 439, 440, 5, 67, 0, 0, 440, 442, 5, 84, 0, 0, 441, 419, 1, 0, 0, 0, 441, + 430, 1, 0, 0, 0, 442, 46, 1, 0, 0, 0, 443, 444, 5, 105, 0, 0, 444, 445, + 5, 110, 0, 0, 445, 446, 5, 116, 0, 0, 446, 447, 5, 101, 0, 0, 447, 448, + 5, 114, 0, 0, 448, 449, 5, 118, 0, 0, 449, 450, 5, 97, 0, 0, 450, 460, + 5, 108, 0, 0, 451, 452, 5, 73, 0, 0, 452, 453, 5, 78, 0, 0, 453, 454, 5, + 84, 0, 0, 454, 455, 5, 69, 0, 0, 455, 456, 5, 82, 0, 0, 456, 457, 5, 86, + 0, 0, 457, 458, 5, 65, 0, 0, 458, 460, 5, 76, 0, 0, 459, 443, 1, 0, 0, + 0, 459, 451, 1, 0, 0, 0, 460, 48, 1, 0, 0, 0, 461, 462, 5, 105, 0, 0, 462, + 463, 5, 115, 0, 0, 463, 468, 5, 111, 0, 0, 464, 465, 5, 73, 0, 0, 465, + 466, 5, 83, 0, 0, 466, 468, 5, 79, 0, 0, 467, 461, 1, 0, 0, 0, 467, 464, + 1, 0, 0, 0, 468, 50, 1, 0, 0, 0, 469, 470, 5, 109, 0, 0, 470, 471, 5, 105, + 0, 0, 471, 472, 5, 110, 0, 0, 472, 473, 5, 105, 0, 0, 473, 474, 5, 109, + 0, 0, 474, 475, 5, 117, 0, 0, 475, 476, 5, 109, 0, 0, 476, 477, 5, 95, + 0, 0, 477, 478, 5, 115, 0, 0, 478, 479, 5, 104, 0, 0, 479, 480, 5, 111, + 0, 0, 480, 481, 5, 117, 0, 0, 481, 482, 5, 108, 0, 0, 482, 483, 5, 100, + 0, 0, 483, 484, 5, 95, 0, 0, 484, 485, 5, 109, 0, 0, 485, 486, 5, 97, 0, + 0, 486, 487, 5, 116, 0, 0, 487, 488, 5, 99, 0, 0, 488, 510, 5, 104, 0, + 0, 489, 490, 5, 77, 0, 0, 490, 491, 5, 73, 0, 0, 491, 492, 5, 78, 0, 0, + 492, 493, 5, 73, 0, 0, 493, 494, 5, 77, 0, 0, 494, 495, 5, 85, 0, 0, 495, + 496, 5, 77, 0, 0, 496, 497, 5, 95, 0, 0, 497, 498, 5, 83, 0, 0, 498, 499, + 5, 72, 0, 0, 499, 500, 5, 79, 0, 0, 500, 501, 5, 85, 0, 0, 501, 502, 5, + 76, 0, 0, 502, 503, 5, 68, 0, 0, 503, 504, 5, 95, 0, 0, 504, 505, 5, 77, + 0, 0, 505, 506, 5, 65, 0, 0, 506, 507, 5, 84, 0, 0, 507, 508, 5, 67, 0, + 0, 508, 510, 5, 72, 0, 0, 509, 469, 1, 0, 0, 0, 509, 489, 1, 0, 0, 0, 510, + 52, 1, 0, 0, 0, 511, 512, 5, 116, 0, 0, 512, 513, 5, 104, 0, 0, 513, 514, + 5, 114, 0, 0, 514, 515, 5, 101, 0, 0, 515, 516, 5, 115, 0, 0, 516, 517, + 5, 104, 0, 0, 517, 518, 5, 111, 0, 0, 518, 519, 5, 108, 0, 0, 519, 530, + 5, 100, 0, 0, 520, 521, 5, 84, 0, 0, 521, 522, 5, 72, 0, 0, 522, 523, 5, + 82, 0, 0, 523, 524, 5, 69, 0, 0, 524, 525, 5, 83, 0, 0, 525, 526, 5, 72, + 0, 0, 526, 527, 5, 79, 0, 0, 527, 528, 5, 76, 0, 0, 528, 530, 5, 68, 0, + 0, 529, 511, 1, 0, 0, 0, 529, 520, 1, 0, 0, 0, 530, 54, 1, 0, 0, 0, 531, + 532, 5, 61, 0, 0, 532, 56, 1, 0, 0, 0, 533, 534, 5, 43, 0, 0, 534, 58, + 1, 0, 0, 0, 535, 536, 5, 45, 0, 0, 536, 60, 1, 0, 0, 0, 537, 538, 5, 42, + 0, 0, 538, 62, 1, 0, 0, 0, 539, 540, 5, 47, 0, 0, 540, 64, 1, 0, 0, 0, + 541, 542, 5, 37, 0, 0, 542, 66, 1, 0, 0, 0, 543, 544, 5, 42, 0, 0, 544, + 545, 5, 42, 0, 0, 545, 68, 1, 0, 0, 0, 546, 547, 5, 60, 0, 0, 547, 548, + 5, 60, 0, 0, 548, 70, 1, 0, 0, 0, 549, 550, 5, 62, 0, 0, 550, 551, 5, 62, + 0, 0, 551, 72, 1, 0, 0, 0, 552, 553, 5, 38, 0, 0, 553, 74, 1, 0, 0, 0, + 554, 555, 5, 124, 0, 0, 555, 76, 1, 0, 0, 0, 556, 557, 5, 94, 0, 0, 557, + 78, 1, 0, 0, 0, 558, 559, 5, 38, 0, 0, 559, 567, 5, 38, 0, 0, 560, 561, + 5, 97, 0, 0, 561, 562, 5, 110, 0, 0, 562, 567, 5, 100, 0, 0, 563, 564, + 5, 65, 0, 0, 564, 565, 5, 78, 0, 0, 565, 567, 5, 68, 0, 0, 566, 558, 1, + 0, 0, 0, 566, 560, 1, 0, 0, 0, 566, 563, 1, 0, 0, 0, 567, 80, 1, 0, 0, + 0, 568, 569, 5, 124, 0, 0, 569, 575, 5, 124, 0, 0, 570, 571, 5, 111, 0, + 0, 571, 575, 5, 114, 0, 0, 572, 573, 5, 79, 0, 0, 573, 575, 5, 82, 0, 0, + 574, 568, 1, 0, 0, 0, 574, 570, 1, 0, 0, 0, 574, 572, 1, 0, 0, 0, 575, + 82, 1, 0, 0, 0, 576, 577, 5, 105, 0, 0, 577, 578, 5, 115, 0, 0, 578, 579, + 5, 32, 0, 0, 579, 580, 5, 110, 0, 0, 580, 581, 5, 117, 0, 0, 581, 582, + 5, 108, 0, 0, 582, 591, 5, 108, 0, 0, 583, 584, 5, 73, 0, 0, 584, 585, + 5, 83, 0, 0, 585, 586, 5, 32, 0, 0, 586, 587, 5, 78, 0, 0, 587, 588, 5, + 85, 0, 0, 588, 589, 5, 76, 0, 0, 589, 591, 5, 76, 0, 0, 590, 576, 1, 0, + 0, 0, 590, 583, 1, 0, 0, 0, 591, 84, 1, 0, 0, 0, 592, 593, 5, 105, 0, 0, + 593, 594, 5, 115, 0, 0, 594, 595, 5, 32, 0, 0, 595, 596, 5, 110, 0, 0, + 596, 597, 5, 111, 0, 0, 597, 598, 5, 116, 0, 0, 598, 599, 5, 32, 0, 0, + 599, 600, 5, 110, 0, 0, 600, 601, 5, 117, 0, 0, 601, 602, 5, 108, 0, 0, + 602, 615, 5, 108, 0, 0, 603, 604, 5, 73, 0, 0, 604, 605, 5, 83, 0, 0, 605, + 606, 5, 32, 0, 0, 606, 607, 5, 78, 0, 0, 607, 608, 5, 79, 0, 0, 608, 609, + 5, 84, 0, 0, 609, 610, 5, 32, 0, 0, 610, 611, 5, 78, 0, 0, 611, 612, 5, + 85, 0, 0, 612, 613, 5, 76, 0, 0, 613, 615, 5, 76, 0, 0, 614, 592, 1, 0, + 0, 0, 614, 603, 1, 0, 0, 0, 615, 86, 1, 0, 0, 0, 616, 617, 5, 126, 0, 0, + 617, 88, 1, 0, 0, 0, 618, 626, 5, 33, 0, 0, 619, 620, 5, 110, 0, 0, 620, + 621, 5, 111, 0, 0, 621, 626, 5, 116, 0, 0, 622, 623, 5, 78, 0, 0, 623, + 624, 5, 79, 0, 0, 624, 626, 5, 84, 0, 0, 625, 618, 1, 0, 0, 0, 625, 619, + 1, 0, 0, 0, 625, 622, 1, 0, 0, 0, 626, 90, 1, 0, 0, 0, 627, 628, 5, 105, + 0, 0, 628, 632, 5, 110, 0, 0, 629, 630, 5, 73, 0, 0, 630, 632, 5, 78, 0, + 0, 631, 627, 1, 0, 0, 0, 631, 629, 1, 0, 0, 0, 632, 92, 1, 0, 0, 0, 633, + 638, 5, 91, 0, 0, 634, 637, 3, 199, 99, 0, 635, 637, 3, 201, 100, 0, 636, + 634, 1, 0, 0, 0, 636, 635, 1, 0, 0, 0, 637, 640, 1, 0, 0, 0, 638, 636, + 1, 0, 0, 0, 638, 639, 1, 0, 0, 0, 639, 641, 1, 0, 0, 0, 640, 638, 1, 0, + 0, 0, 641, 642, 5, 93, 0, 0, 642, 94, 1, 0, 0, 0, 643, 644, 5, 106, 0, + 0, 644, 645, 5, 115, 0, 0, 645, 646, 5, 111, 0, 0, 646, 647, 5, 110, 0, + 0, 647, 648, 5, 95, 0, 0, 648, 649, 5, 99, 0, 0, 649, 650, 5, 111, 0, 0, + 650, 651, 5, 110, 0, 0, 651, 652, 5, 116, 0, 0, 652, 653, 5, 97, 0, 0, + 653, 654, 5, 105, 0, 0, 654, 655, 5, 110, 0, 0, 655, 670, 5, 115, 0, 0, + 656, 657, 5, 74, 0, 0, 657, 658, 5, 83, 0, 0, 658, 659, 5, 79, 0, 0, 659, + 660, 5, 78, 0, 0, 660, 661, 5, 95, 0, 0, 661, 662, 5, 67, 0, 0, 662, 663, + 5, 79, 0, 0, 663, 664, 5, 78, 0, 0, 664, 665, 5, 84, 0, 0, 665, 666, 5, + 65, 0, 0, 666, 667, 5, 73, 0, 0, 667, 668, 5, 78, 0, 0, 668, 670, 5, 83, + 0, 0, 669, 643, 1, 0, 0, 0, 669, 656, 1, 0, 0, 0, 670, 96, 1, 0, 0, 0, + 671, 672, 5, 106, 0, 0, 672, 673, 5, 115, 0, 0, 673, 674, 5, 111, 0, 0, + 674, 675, 5, 110, 0, 0, 675, 676, 5, 95, 0, 0, 676, 677, 5, 99, 0, 0, 677, + 678, 5, 111, 0, 0, 678, 679, 5, 110, 0, 0, 679, 680, 5, 116, 0, 0, 680, + 681, 5, 97, 0, 0, 681, 682, 5, 105, 0, 0, 682, 683, 5, 110, 0, 0, 683, + 684, 5, 115, 0, 0, 684, 685, 5, 95, 0, 0, 685, 686, 5, 97, 0, 0, 686, 687, + 5, 108, 0, 0, 687, 706, 5, 108, 0, 0, 688, 689, 5, 74, 0, 0, 689, 690, + 5, 83, 0, 0, 690, 691, 5, 79, 0, 0, 691, 692, 5, 78, 0, 0, 692, 693, 5, + 95, 0, 0, 693, 694, 5, 67, 0, 0, 694, 695, 5, 79, 0, 0, 695, 696, 5, 78, + 0, 0, 696, 697, 5, 84, 0, 0, 697, 698, 5, 65, 0, 0, 698, 699, 5, 73, 0, + 0, 699, 700, 5, 78, 0, 0, 700, 701, 5, 83, 0, 0, 701, 702, 5, 95, 0, 0, + 702, 703, 5, 65, 0, 0, 703, 704, 5, 76, 0, 0, 704, 706, 5, 76, 0, 0, 705, + 671, 1, 0, 0, 0, 705, 688, 1, 0, 0, 0, 706, 98, 1, 0, 0, 0, 707, 708, 5, + 106, 0, 0, 708, 709, 5, 115, 0, 0, 709, 710, 5, 111, 0, 0, 710, 711, 5, + 110, 0, 0, 711, 712, 5, 95, 0, 0, 712, 713, 5, 99, 0, 0, 713, 714, 5, 111, + 0, 0, 714, 715, 5, 110, 0, 0, 715, 716, 5, 116, 0, 0, 716, 717, 5, 97, + 0, 0, 717, 718, 5, 105, 0, 0, 718, 719, 5, 110, 0, 0, 719, 720, 5, 115, + 0, 0, 720, 721, 5, 95, 0, 0, 721, 722, 5, 97, 0, 0, 722, 723, 5, 110, 0, + 0, 723, 742, 5, 121, 0, 0, 724, 725, 5, 74, 0, 0, 725, 726, 5, 83, 0, 0, + 726, 727, 5, 79, 0, 0, 727, 728, 5, 78, 0, 0, 728, 729, 5, 95, 0, 0, 729, + 730, 5, 67, 0, 0, 730, 731, 5, 79, 0, 0, 731, 732, 5, 78, 0, 0, 732, 733, + 5, 84, 0, 0, 733, 734, 5, 65, 0, 0, 734, 735, 5, 73, 0, 0, 735, 736, 5, + 78, 0, 0, 736, 737, 5, 83, 0, 0, 737, 738, 5, 95, 0, 0, 738, 739, 5, 65, + 0, 0, 739, 740, 5, 78, 0, 0, 740, 742, 5, 89, 0, 0, 741, 707, 1, 0, 0, + 0, 741, 724, 1, 0, 0, 0, 742, 100, 1, 0, 0, 0, 743, 744, 5, 97, 0, 0, 744, + 745, 5, 114, 0, 0, 745, 746, 5, 114, 0, 0, 746, 747, 5, 97, 0, 0, 747, + 748, 5, 121, 0, 0, 748, 749, 5, 95, 0, 0, 749, 750, 5, 99, 0, 0, 750, 751, + 5, 111, 0, 0, 751, 752, 5, 110, 0, 0, 752, 753, 5, 116, 0, 0, 753, 754, + 5, 97, 0, 0, 754, 755, 5, 105, 0, 0, 755, 756, 5, 110, 0, 0, 756, 772, + 5, 115, 0, 0, 757, 758, 5, 65, 0, 0, 758, 759, 5, 82, 0, 0, 759, 760, 5, + 82, 0, 0, 760, 761, 5, 65, 0, 0, 761, 762, 5, 89, 0, 0, 762, 763, 5, 95, + 0, 0, 763, 764, 5, 67, 0, 0, 764, 765, 5, 79, 0, 0, 765, 766, 5, 78, 0, + 0, 766, 767, 5, 84, 0, 0, 767, 768, 5, 65, 0, 0, 768, 769, 5, 73, 0, 0, + 769, 770, 5, 78, 0, 0, 770, 772, 5, 83, 0, 0, 771, 743, 1, 0, 0, 0, 771, + 757, 1, 0, 0, 0, 772, 102, 1, 0, 0, 0, 773, 774, 5, 97, 0, 0, 774, 775, + 5, 114, 0, 0, 775, 776, 5, 114, 0, 0, 776, 777, 5, 97, 0, 0, 777, 778, + 5, 121, 0, 0, 778, 779, 5, 95, 0, 0, 779, 780, 5, 99, 0, 0, 780, 781, 5, + 111, 0, 0, 781, 782, 5, 110, 0, 0, 782, 783, 5, 116, 0, 0, 783, 784, 5, + 97, 0, 0, 784, 785, 5, 105, 0, 0, 785, 786, 5, 110, 0, 0, 786, 787, 5, + 115, 0, 0, 787, 788, 5, 95, 0, 0, 788, 789, 5, 97, 0, 0, 789, 790, 5, 108, + 0, 0, 790, 810, 5, 108, 0, 0, 791, 792, 5, 65, 0, 0, 792, 793, 5, 82, 0, + 0, 793, 794, 5, 82, 0, 0, 794, 795, 5, 65, 0, 0, 795, 796, 5, 89, 0, 0, + 796, 797, 5, 95, 0, 0, 797, 798, 5, 67, 0, 0, 798, 799, 5, 79, 0, 0, 799, + 800, 5, 78, 0, 0, 800, 801, 5, 84, 0, 0, 801, 802, 5, 65, 0, 0, 802, 803, + 5, 73, 0, 0, 803, 804, 5, 78, 0, 0, 804, 805, 5, 83, 0, 0, 805, 806, 5, + 95, 0, 0, 806, 807, 5, 65, 0, 0, 807, 808, 5, 76, 0, 0, 808, 810, 5, 76, + 0, 0, 809, 773, 1, 0, 0, 0, 809, 791, 1, 0, 0, 0, 810, 104, 1, 0, 0, 0, + 811, 812, 5, 97, 0, 0, 812, 813, 5, 114, 0, 0, 813, 814, 5, 114, 0, 0, + 814, 815, 5, 97, 0, 0, 815, 816, 5, 121, 0, 0, 816, 817, 5, 95, 0, 0, 817, + 818, 5, 99, 0, 0, 818, 819, 5, 111, 0, 0, 819, 820, 5, 110, 0, 0, 820, + 821, 5, 116, 0, 0, 821, 822, 5, 97, 0, 0, 822, 823, 5, 105, 0, 0, 823, + 824, 5, 110, 0, 0, 824, 825, 5, 115, 0, 0, 825, 826, 5, 95, 0, 0, 826, + 827, 5, 97, 0, 0, 827, 828, 5, 110, 0, 0, 828, 848, 5, 121, 0, 0, 829, + 830, 5, 65, 0, 0, 830, 831, 5, 82, 0, 0, 831, 832, 5, 82, 0, 0, 832, 833, + 5, 65, 0, 0, 833, 834, 5, 89, 0, 0, 834, 835, 5, 95, 0, 0, 835, 836, 5, + 67, 0, 0, 836, 837, 5, 79, 0, 0, 837, 838, 5, 78, 0, 0, 838, 839, 5, 84, + 0, 0, 839, 840, 5, 65, 0, 0, 840, 841, 5, 73, 0, 0, 841, 842, 5, 78, 0, + 0, 842, 843, 5, 83, 0, 0, 843, 844, 5, 95, 0, 0, 844, 845, 5, 65, 0, 0, + 845, 846, 5, 78, 0, 0, 846, 848, 5, 89, 0, 0, 847, 811, 1, 0, 0, 0, 847, + 829, 1, 0, 0, 0, 848, 106, 1, 0, 0, 0, 849, 850, 5, 97, 0, 0, 850, 851, + 5, 114, 0, 0, 851, 852, 5, 114, 0, 0, 852, 853, 5, 97, 0, 0, 853, 854, + 5, 121, 0, 0, 854, 855, 5, 95, 0, 0, 855, 856, 5, 108, 0, 0, 856, 857, + 5, 101, 0, 0, 857, 858, 5, 110, 0, 0, 858, 859, 5, 103, 0, 0, 859, 860, + 5, 116, 0, 0, 860, 874, 5, 104, 0, 0, 861, 862, 5, 65, 0, 0, 862, 863, + 5, 82, 0, 0, 863, 864, 5, 82, 0, 0, 864, 865, 5, 65, 0, 0, 865, 866, 5, + 89, 0, 0, 866, 867, 5, 95, 0, 0, 867, 868, 5, 76, 0, 0, 868, 869, 5, 69, + 0, 0, 869, 870, 5, 78, 0, 0, 870, 871, 5, 71, 0, 0, 871, 872, 5, 84, 0, + 0, 872, 874, 5, 72, 0, 0, 873, 849, 1, 0, 0, 0, 873, 861, 1, 0, 0, 0, 874, + 108, 1, 0, 0, 0, 875, 876, 5, 101, 0, 0, 876, 877, 5, 108, 0, 0, 877, 878, + 5, 101, 0, 0, 878, 879, 5, 109, 0, 0, 879, 880, 5, 101, 0, 0, 880, 881, + 5, 110, 0, 0, 881, 882, 5, 116, 0, 0, 882, 883, 5, 95, 0, 0, 883, 884, + 5, 102, 0, 0, 884, 885, 5, 105, 0, 0, 885, 886, 5, 108, 0, 0, 886, 887, + 5, 116, 0, 0, 887, 888, 5, 101, 0, 0, 888, 904, 5, 114, 0, 0, 889, 890, + 5, 69, 0, 0, 890, 891, 5, 76, 0, 0, 891, 892, 5, 69, 0, 0, 892, 893, 5, + 77, 0, 0, 893, 894, 5, 69, 0, 0, 894, 895, 5, 78, 0, 0, 895, 896, 5, 84, + 0, 0, 896, 897, 5, 95, 0, 0, 897, 898, 5, 70, 0, 0, 898, 899, 5, 73, 0, + 0, 899, 900, 5, 76, 0, 0, 900, 901, 5, 84, 0, 0, 901, 902, 5, 69, 0, 0, + 902, 904, 5, 82, 0, 0, 903, 875, 1, 0, 0, 0, 903, 889, 1, 0, 0, 0, 904, + 110, 1, 0, 0, 0, 905, 906, 5, 115, 0, 0, 906, 907, 5, 116, 0, 0, 907, 908, + 5, 95, 0, 0, 908, 909, 5, 101, 0, 0, 909, 910, 5, 113, 0, 0, 910, 911, + 5, 117, 0, 0, 911, 912, 5, 97, 0, 0, 912, 913, 5, 108, 0, 0, 913, 924, + 5, 115, 0, 0, 914, 915, 5, 83, 0, 0, 915, 916, 5, 84, 0, 0, 916, 917, 5, + 95, 0, 0, 917, 918, 5, 69, 0, 0, 918, 919, 5, 81, 0, 0, 919, 920, 5, 85, + 0, 0, 920, 921, 5, 65, 0, 0, 921, 922, 5, 76, 0, 0, 922, 924, 5, 83, 0, + 0, 923, 905, 1, 0, 0, 0, 923, 914, 1, 0, 0, 0, 924, 112, 1, 0, 0, 0, 925, + 926, 5, 115, 0, 0, 926, 927, 5, 116, 0, 0, 927, 928, 5, 95, 0, 0, 928, + 929, 5, 116, 0, 0, 929, 930, 5, 111, 0, 0, 930, 931, 5, 117, 0, 0, 931, + 932, 5, 99, 0, 0, 932, 933, 5, 104, 0, 0, 933, 934, 5, 101, 0, 0, 934, + 946, 5, 115, 0, 0, 935, 936, 5, 83, 0, 0, 936, 937, 5, 84, 0, 0, 937, 938, + 5, 95, 0, 0, 938, 939, 5, 84, 0, 0, 939, 940, 5, 79, 0, 0, 940, 941, 5, + 85, 0, 0, 941, 942, 5, 67, 0, 0, 942, 943, 5, 72, 0, 0, 943, 944, 5, 69, + 0, 0, 944, 946, 5, 83, 0, 0, 945, 925, 1, 0, 0, 0, 945, 935, 1, 0, 0, 0, + 946, 114, 1, 0, 0, 0, 947, 948, 5, 115, 0, 0, 948, 949, 5, 116, 0, 0, 949, + 950, 5, 95, 0, 0, 950, 951, 5, 111, 0, 0, 951, 952, 5, 118, 0, 0, 952, + 953, 5, 101, 0, 0, 953, 954, 5, 114, 0, 0, 954, 955, 5, 108, 0, 0, 955, + 956, 5, 97, 0, 0, 956, 957, 5, 112, 0, 0, 957, 970, 5, 115, 0, 0, 958, + 959, 5, 83, 0, 0, 959, 960, 5, 84, 0, 0, 960, 961, 5, 95, 0, 0, 961, 962, + 5, 79, 0, 0, 962, 963, 5, 86, 0, 0, 963, 964, 5, 69, 0, 0, 964, 965, 5, + 82, 0, 0, 965, 966, 5, 76, 0, 0, 966, 967, 5, 65, 0, 0, 967, 968, 5, 80, + 0, 0, 968, 970, 5, 83, 0, 0, 969, 947, 1, 0, 0, 0, 969, 958, 1, 0, 0, 0, + 970, 116, 1, 0, 0, 0, 971, 972, 5, 115, 0, 0, 972, 973, 5, 116, 0, 0, 973, + 974, 5, 95, 0, 0, 974, 975, 5, 99, 0, 0, 975, 976, 5, 114, 0, 0, 976, 977, + 5, 111, 0, 0, 977, 978, 5, 115, 0, 0, 978, 979, 5, 115, 0, 0, 979, 980, + 5, 101, 0, 0, 980, 992, 5, 115, 0, 0, 981, 982, 5, 83, 0, 0, 982, 983, + 5, 84, 0, 0, 983, 984, 5, 95, 0, 0, 984, 985, 5, 67, 0, 0, 985, 986, 5, + 82, 0, 0, 986, 987, 5, 79, 0, 0, 987, 988, 5, 83, 0, 0, 988, 989, 5, 83, + 0, 0, 989, 990, 5, 69, 0, 0, 990, 992, 5, 83, 0, 0, 991, 971, 1, 0, 0, + 0, 991, 981, 1, 0, 0, 0, 992, 118, 1, 0, 0, 0, 993, 994, 5, 115, 0, 0, + 994, 995, 5, 116, 0, 0, 995, 996, 5, 95, 0, 0, 996, 997, 5, 99, 0, 0, 997, + 998, 5, 111, 0, 0, 998, 999, 5, 110, 0, 0, 999, 1000, 5, 116, 0, 0, 1000, + 1001, 5, 97, 0, 0, 1001, 1002, 5, 105, 0, 0, 1002, 1003, 5, 110, 0, 0, + 1003, 1016, 5, 115, 0, 0, 1004, 1005, 5, 83, 0, 0, 1005, 1006, 5, 84, 0, + 0, 1006, 1007, 5, 95, 0, 0, 1007, 1008, 5, 67, 0, 0, 1008, 1009, 5, 79, + 0, 0, 1009, 1010, 5, 78, 0, 0, 1010, 1011, 5, 84, 0, 0, 1011, 1012, 5, + 65, 0, 0, 1012, 1013, 5, 73, 0, 0, 1013, 1014, 5, 78, 0, 0, 1014, 1016, + 5, 83, 0, 0, 1015, 993, 1, 0, 0, 0, 1015, 1004, 1, 0, 0, 0, 1016, 120, + 1, 0, 0, 0, 1017, 1018, 5, 115, 0, 0, 1018, 1019, 5, 116, 0, 0, 1019, 1020, + 5, 95, 0, 0, 1020, 1021, 5, 105, 0, 0, 1021, 1022, 5, 110, 0, 0, 1022, + 1023, 5, 116, 0, 0, 1023, 1024, 5, 101, 0, 0, 1024, 1025, 5, 114, 0, 0, + 1025, 1026, 5, 115, 0, 0, 1026, 1027, 5, 101, 0, 0, 1027, 1028, 5, 99, + 0, 0, 1028, 1029, 5, 116, 0, 0, 1029, 1044, 5, 115, 0, 0, 1030, 1031, 5, + 83, 0, 0, 1031, 1032, 5, 84, 0, 0, 1032, 1033, 5, 95, 0, 0, 1033, 1034, + 5, 73, 0, 0, 1034, 1035, 5, 78, 0, 0, 1035, 1036, 5, 84, 0, 0, 1036, 1037, + 5, 69, 0, 0, 1037, 1038, 5, 82, 0, 0, 1038, 1039, 5, 83, 0, 0, 1039, 1040, + 5, 69, 0, 0, 1040, 1041, 5, 67, 0, 0, 1041, 1042, 5, 84, 0, 0, 1042, 1044, + 5, 83, 0, 0, 1043, 1017, 1, 0, 0, 0, 1043, 1030, 1, 0, 0, 0, 1044, 122, + 1, 0, 0, 0, 1045, 1046, 5, 115, 0, 0, 1046, 1047, 5, 116, 0, 0, 1047, 1048, + 5, 95, 0, 0, 1048, 1049, 5, 119, 0, 0, 1049, 1050, 5, 105, 0, 0, 1050, + 1051, 5, 116, 0, 0, 1051, 1052, 5, 104, 0, 0, 1052, 1053, 5, 105, 0, 0, + 1053, 1064, 5, 110, 0, 0, 1054, 1055, 5, 83, 0, 0, 1055, 1056, 5, 84, 0, + 0, 1056, 1057, 5, 95, 0, 0, 1057, 1058, 5, 87, 0, 0, 1058, 1059, 5, 73, + 0, 0, 1059, 1060, 5, 84, 0, 0, 1060, 1061, 5, 72, 0, 0, 1061, 1062, 5, + 73, 0, 0, 1062, 1064, 5, 78, 0, 0, 1063, 1045, 1, 0, 0, 0, 1063, 1054, + 1, 0, 0, 0, 1064, 124, 1, 0, 0, 0, 1065, 1066, 5, 115, 0, 0, 1066, 1067, + 5, 116, 0, 0, 1067, 1068, 5, 95, 0, 0, 1068, 1069, 5, 100, 0, 0, 1069, + 1070, 5, 119, 0, 0, 1070, 1071, 5, 105, 0, 0, 1071, 1072, 5, 116, 0, 0, + 1072, 1073, 5, 104, 0, 0, 1073, 1074, 5, 105, 0, 0, 1074, 1086, 5, 110, + 0, 0, 1075, 1076, 5, 83, 0, 0, 1076, 1077, 5, 84, 0, 0, 1077, 1078, 5, + 95, 0, 0, 1078, 1079, 5, 68, 0, 0, 1079, 1080, 5, 87, 0, 0, 1080, 1081, + 5, 73, 0, 0, 1081, 1082, 5, 84, 0, 0, 1082, 1083, 5, 72, 0, 0, 1083, 1084, + 5, 73, 0, 0, 1084, 1086, 5, 78, 0, 0, 1085, 1065, 1, 0, 0, 0, 1085, 1075, + 1, 0, 0, 0, 1086, 126, 1, 0, 0, 0, 1087, 1088, 5, 115, 0, 0, 1088, 1089, + 5, 116, 0, 0, 1089, 1090, 5, 95, 0, 0, 1090, 1091, 5, 105, 0, 0, 1091, + 1092, 5, 115, 0, 0, 1092, 1093, 5, 118, 0, 0, 1093, 1094, 5, 97, 0, 0, + 1094, 1095, 5, 108, 0, 0, 1095, 1096, 5, 105, 0, 0, 1096, 1108, 5, 100, + 0, 0, 1097, 1098, 5, 83, 0, 0, 1098, 1099, 5, 84, 0, 0, 1099, 1100, 5, + 95, 0, 0, 1100, 1101, 5, 73, 0, 0, 1101, 1102, 5, 83, 0, 0, 1102, 1103, + 5, 86, 0, 0, 1103, 1104, 5, 65, 0, 0, 1104, 1105, 5, 76, 0, 0, 1105, 1106, + 5, 73, 0, 0, 1106, 1108, 5, 68, 0, 0, 1107, 1087, 1, 0, 0, 0, 1107, 1097, + 1, 0, 0, 0, 1108, 128, 1, 0, 0, 0, 1109, 1110, 5, 116, 0, 0, 1110, 1111, + 5, 114, 0, 0, 1111, 1112, 5, 117, 0, 0, 1112, 1137, 5, 101, 0, 0, 1113, + 1114, 5, 84, 0, 0, 1114, 1115, 5, 114, 0, 0, 1115, 1116, 5, 117, 0, 0, + 1116, 1137, 5, 101, 0, 0, 1117, 1118, 5, 84, 0, 0, 1118, 1119, 5, 82, 0, + 0, 1119, 1120, 5, 85, 0, 0, 1120, 1137, 5, 69, 0, 0, 1121, 1122, 5, 102, + 0, 0, 1122, 1123, 5, 97, 0, 0, 1123, 1124, 5, 108, 0, 0, 1124, 1125, 5, + 115, 0, 0, 1125, 1137, 5, 101, 0, 0, 1126, 1127, 5, 70, 0, 0, 1127, 1128, + 5, 97, 0, 0, 1128, 1129, 5, 108, 0, 0, 1129, 1130, 5, 115, 0, 0, 1130, + 1137, 5, 101, 0, 0, 1131, 1132, 5, 70, 0, 0, 1132, 1133, 5, 65, 0, 0, 1133, + 1134, 5, 76, 0, 0, 1134, 1135, 5, 83, 0, 0, 1135, 1137, 5, 69, 0, 0, 1136, + 1109, 1, 0, 0, 0, 1136, 1113, 1, 0, 0, 0, 1136, 1117, 1, 0, 0, 0, 1136, + 1121, 1, 0, 0, 0, 1136, 1126, 1, 0, 0, 0, 1136, 1131, 1, 0, 0, 0, 1137, + 130, 1, 0, 0, 0, 1138, 1143, 3, 165, 82, 0, 1139, 1143, 3, 167, 83, 0, + 1140, 1143, 3, 169, 84, 0, 1141, 1143, 3, 163, 81, 0, 1142, 1138, 1, 0, + 0, 0, 1142, 1139, 1, 0, 0, 0, 1142, 1140, 1, 0, 0, 0, 1142, 1141, 1, 0, + 0, 0, 1143, 132, 1, 0, 0, 0, 1144, 1147, 3, 181, 90, 0, 1145, 1147, 3, + 183, 91, 0, 1146, 1144, 1, 0, 0, 0, 1146, 1145, 1, 0, 0, 0, 1147, 134, + 1, 0, 0, 0, 1148, 1153, 3, 159, 79, 0, 1149, 1152, 3, 159, 79, 0, 1150, + 1152, 3, 161, 80, 0, 1151, 1149, 1, 0, 0, 0, 1151, 1150, 1, 0, 0, 0, 1152, + 1155, 1, 0, 0, 0, 1153, 1151, 1, 0, 0, 0, 1153, 1154, 1, 0, 0, 0, 1154, + 136, 1, 0, 0, 0, 1155, 1153, 1, 0, 0, 0, 1156, 1157, 5, 36, 0, 0, 1157, + 1158, 5, 109, 0, 0, 1158, 1159, 5, 101, 0, 0, 1159, 1160, 5, 116, 0, 0, + 1160, 1161, 5, 97, 0, 0, 1161, 138, 1, 0, 0, 0, 1162, 1164, 3, 149, 74, + 0, 1163, 1162, 1, 0, 0, 0, 1163, 1164, 1, 0, 0, 0, 1164, 1175, 1, 0, 0, + 0, 1165, 1167, 5, 34, 0, 0, 1166, 1168, 3, 151, 75, 0, 1167, 1166, 1, 0, + 0, 0, 1167, 1168, 1, 0, 0, 0, 1168, 1169, 1, 0, 0, 0, 1169, 1176, 5, 34, + 0, 0, 1170, 1172, 5, 39, 0, 0, 1171, 1173, 3, 153, 76, 0, 1172, 1171, 1, + 0, 0, 0, 1172, 1173, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 1176, 5, + 39, 0, 0, 1175, 1165, 1, 0, 0, 0, 1175, 1170, 1, 0, 0, 0, 1176, 140, 1, + 0, 0, 0, 1177, 1180, 3, 135, 67, 0, 1178, 1180, 3, 137, 68, 0, 1179, 1177, + 1, 0, 0, 0, 1179, 1178, 1, 0, 0, 0, 1180, 1188, 1, 0, 0, 0, 1181, 1184, + 5, 91, 0, 0, 1182, 1185, 3, 139, 69, 0, 1183, 1185, 3, 165, 82, 0, 1184, + 1182, 1, 0, 0, 0, 1184, 1183, 1, 0, 0, 0, 1185, 1186, 1, 0, 0, 0, 1186, + 1187, 5, 93, 0, 0, 1187, 1189, 1, 0, 0, 0, 1188, 1181, 1, 0, 0, 0, 1189, + 1190, 1, 0, 0, 0, 1190, 1188, 1, 0, 0, 0, 1190, 1191, 1, 0, 0, 0, 1191, + 142, 1, 0, 0, 0, 1192, 1193, 3, 135, 67, 0, 1193, 1194, 5, 91, 0, 0, 1194, + 1195, 3, 165, 82, 0, 1195, 1196, 5, 93, 0, 0, 1196, 1197, 5, 91, 0, 0, + 1197, 1198, 3, 135, 67, 0, 1198, 1199, 5, 93, 0, 0, 1199, 144, 1, 0, 0, + 0, 1200, 1201, 3, 135, 67, 0, 1201, 1202, 5, 91, 0, 0, 1202, 1203, 3, 135, + 67, 0, 1203, 1204, 5, 93, 0, 0, 1204, 146, 1, 0, 0, 0, 1205, 1206, 5, 36, + 0, 0, 1206, 1207, 5, 91, 0, 0, 1207, 1208, 1, 0, 0, 0, 1208, 1209, 3, 135, + 67, 0, 1209, 1210, 5, 93, 0, 0, 1210, 148, 1, 0, 0, 0, 1211, 1212, 5, 117, + 0, 0, 1212, 1215, 5, 56, 0, 0, 1213, 1215, 7, 0, 0, 0, 1214, 1211, 1, 0, + 0, 0, 1214, 1213, 1, 0, 0, 0, 1215, 150, 1, 0, 0, 0, 1216, 1218, 3, 155, + 77, 0, 1217, 1216, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 1217, 1, 0, + 0, 0, 1219, 1220, 1, 0, 0, 0, 1220, 152, 1, 0, 0, 0, 1221, 1223, 3, 157, + 78, 0, 1222, 1221, 1, 0, 0, 0, 1223, 1224, 1, 0, 0, 0, 1224, 1222, 1, 0, + 0, 0, 1224, 1225, 1, 0, 0, 0, 1225, 154, 1, 0, 0, 0, 1226, 1234, 8, 1, + 0, 0, 1227, 1234, 3, 197, 98, 0, 1228, 1229, 5, 92, 0, 0, 1229, 1234, 5, + 10, 0, 0, 1230, 1231, 5, 92, 0, 0, 1231, 1232, 5, 13, 0, 0, 1232, 1234, + 5, 10, 0, 0, 1233, 1226, 1, 0, 0, 0, 1233, 1227, 1, 0, 0, 0, 1233, 1228, + 1, 0, 0, 0, 1233, 1230, 1, 0, 0, 0, 1234, 156, 1, 0, 0, 0, 1235, 1243, + 8, 2, 0, 0, 1236, 1243, 3, 197, 98, 0, 1237, 1238, 5, 92, 0, 0, 1238, 1243, + 5, 10, 0, 0, 1239, 1240, 5, 92, 0, 0, 1240, 1241, 5, 13, 0, 0, 1241, 1243, + 5, 10, 0, 0, 1242, 1235, 1, 0, 0, 0, 1242, 1236, 1, 0, 0, 0, 1242, 1237, + 1, 0, 0, 0, 1242, 1239, 1, 0, 0, 0, 1243, 158, 1, 0, 0, 0, 1244, 1245, + 7, 3, 0, 0, 1245, 160, 1, 0, 0, 0, 1246, 1247, 7, 4, 0, 0, 1247, 162, 1, + 0, 0, 0, 1248, 1249, 5, 48, 0, 0, 1249, 1251, 7, 5, 0, 0, 1250, 1252, 7, + 6, 0, 0, 1251, 1250, 1, 0, 0, 0, 1252, 1253, 1, 0, 0, 0, 1253, 1251, 1, + 0, 0, 0, 1253, 1254, 1, 0, 0, 0, 1254, 164, 1, 0, 0, 0, 1255, 1259, 3, + 171, 85, 0, 1256, 1258, 3, 161, 80, 0, 1257, 1256, 1, 0, 0, 0, 1258, 1261, + 1, 0, 0, 0, 1259, 1257, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1264, + 1, 0, 0, 0, 1261, 1259, 1, 0, 0, 0, 1262, 1264, 5, 48, 0, 0, 1263, 1255, + 1, 0, 0, 0, 1263, 1262, 1, 0, 0, 0, 1264, 166, 1, 0, 0, 0, 1265, 1269, + 5, 48, 0, 0, 1266, 1268, 3, 173, 86, 0, 1267, 1266, 1, 0, 0, 0, 1268, 1271, + 1, 0, 0, 0, 1269, 1267, 1, 0, 0, 0, 1269, 1270, 1, 0, 0, 0, 1270, 168, + 1, 0, 0, 0, 1271, 1269, 1, 0, 0, 0, 1272, 1273, 5, 48, 0, 0, 1273, 1274, + 7, 7, 0, 0, 1274, 1275, 3, 193, 96, 0, 1275, 170, 1, 0, 0, 0, 1276, 1277, + 7, 8, 0, 0, 1277, 172, 1, 0, 0, 0, 1278, 1279, 7, 9, 0, 0, 1279, 174, 1, + 0, 0, 0, 1280, 1281, 7, 10, 0, 0, 1281, 176, 1, 0, 0, 0, 1282, 1283, 3, + 175, 87, 0, 1283, 1284, 3, 175, 87, 0, 1284, 1285, 3, 175, 87, 0, 1285, + 1286, 3, 175, 87, 0, 1286, 178, 1, 0, 0, 0, 1287, 1288, 5, 92, 0, 0, 1288, + 1289, 5, 117, 0, 0, 1289, 1290, 1, 0, 0, 0, 1290, 1298, 3, 177, 88, 0, + 1291, 1292, 5, 92, 0, 0, 1292, 1293, 5, 85, 0, 0, 1293, 1294, 1, 0, 0, + 0, 1294, 1295, 3, 177, 88, 0, 1295, 1296, 3, 177, 88, 0, 1296, 1298, 1, + 0, 0, 0, 1297, 1287, 1, 0, 0, 0, 1297, 1291, 1, 0, 0, 0, 1298, 180, 1, + 0, 0, 0, 1299, 1301, 3, 185, 92, 0, 1300, 1302, 3, 187, 93, 0, 1301, 1300, + 1, 0, 0, 0, 1301, 1302, 1, 0, 0, 0, 1302, 1307, 1, 0, 0, 0, 1303, 1304, + 3, 189, 94, 0, 1304, 1305, 3, 187, 93, 0, 1305, 1307, 1, 0, 0, 0, 1306, + 1299, 1, 0, 0, 0, 1306, 1303, 1, 0, 0, 0, 1307, 182, 1, 0, 0, 0, 1308, + 1309, 5, 48, 0, 0, 1309, 1312, 7, 7, 0, 0, 1310, 1313, 3, 191, 95, 0, 1311, + 1313, 3, 193, 96, 0, 1312, 1310, 1, 0, 0, 0, 1312, 1311, 1, 0, 0, 0, 1313, + 1314, 1, 0, 0, 0, 1314, 1315, 3, 195, 97, 0, 1315, 184, 1, 0, 0, 0, 1316, + 1318, 3, 189, 94, 0, 1317, 1316, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, + 1319, 1, 0, 0, 0, 1319, 1320, 5, 46, 0, 0, 1320, 1325, 3, 189, 94, 0, 1321, + 1322, 3, 189, 94, 0, 1322, 1323, 5, 46, 0, 0, 1323, 1325, 1, 0, 0, 0, 1324, + 1317, 1, 0, 0, 0, 1324, 1321, 1, 0, 0, 0, 1325, 186, 1, 0, 0, 0, 1326, + 1328, 7, 11, 0, 0, 1327, 1329, 7, 12, 0, 0, 1328, 1327, 1, 0, 0, 0, 1328, + 1329, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1331, 3, 189, 94, 0, 1331, + 188, 1, 0, 0, 0, 1332, 1334, 3, 161, 80, 0, 1333, 1332, 1, 0, 0, 0, 1334, + 1335, 1, 0, 0, 0, 1335, 1333, 1, 0, 0, 0, 1335, 1336, 1, 0, 0, 0, 1336, + 190, 1, 0, 0, 0, 1337, 1339, 3, 193, 96, 0, 1338, 1337, 1, 0, 0, 0, 1338, + 1339, 1, 0, 0, 0, 1339, 1340, 1, 0, 0, 0, 1340, 1341, 5, 46, 0, 0, 1341, + 1346, 3, 193, 96, 0, 1342, 1343, 3, 193, 96, 0, 1343, 1344, 5, 46, 0, 0, + 1344, 1346, 1, 0, 0, 0, 1345, 1338, 1, 0, 0, 0, 1345, 1342, 1, 0, 0, 0, + 1346, 192, 1, 0, 0, 0, 1347, 1349, 3, 175, 87, 0, 1348, 1347, 1, 0, 0, + 0, 1349, 1350, 1, 0, 0, 0, 1350, 1348, 1, 0, 0, 0, 1350, 1351, 1, 0, 0, + 0, 1351, 194, 1, 0, 0, 0, 1352, 1354, 7, 13, 0, 0, 1353, 1355, 7, 12, 0, + 0, 1354, 1353, 1, 0, 0, 0, 1354, 1355, 1, 0, 0, 0, 1355, 1356, 1, 0, 0, + 0, 1356, 1357, 3, 189, 94, 0, 1357, 196, 1, 0, 0, 0, 1358, 1359, 5, 92, + 0, 0, 1359, 1374, 7, 14, 0, 0, 1360, 1361, 5, 92, 0, 0, 1361, 1363, 3, + 173, 86, 0, 1362, 1364, 3, 173, 86, 0, 1363, 1362, 1, 0, 0, 0, 1363, 1364, + 1, 0, 0, 0, 1364, 1366, 1, 0, 0, 0, 1365, 1367, 3, 173, 86, 0, 1366, 1365, + 1, 0, 0, 0, 1366, 1367, 1, 0, 0, 0, 1367, 1374, 1, 0, 0, 0, 1368, 1369, + 5, 92, 0, 0, 1369, 1370, 5, 120, 0, 0, 1370, 1371, 1, 0, 0, 0, 1371, 1374, + 3, 193, 96, 0, 1372, 1374, 3, 179, 89, 0, 1373, 1358, 1, 0, 0, 0, 1373, + 1360, 1, 0, 0, 0, 1373, 1368, 1, 0, 0, 0, 1373, 1372, 1, 0, 0, 0, 1374, + 198, 1, 0, 0, 0, 1375, 1377, 7, 15, 0, 0, 1376, 1375, 1, 0, 0, 0, 1377, + 1378, 1, 0, 0, 0, 1378, 1376, 1, 0, 0, 0, 1378, 1379, 1, 0, 0, 0, 1379, + 1380, 1, 0, 0, 0, 1380, 1381, 6, 99, 0, 0, 1381, 200, 1, 0, 0, 0, 1382, + 1384, 5, 13, 0, 0, 1383, 1385, 5, 10, 0, 0, 1384, 1383, 1, 0, 0, 0, 1384, + 1385, 1, 0, 0, 0, 1385, 1388, 1, 0, 0, 0, 1386, 1388, 5, 10, 0, 0, 1387, + 1382, 1, 0, 0, 0, 1387, 1386, 1, 0, 0, 0, 1388, 1389, 1, 0, 0, 0, 1389, + 1390, 6, 100, 0, 0, 1390, 202, 1, 0, 0, 0, 79, 0, 241, 255, 277, 303, 331, + 351, 371, 395, 417, 441, 459, 467, 509, 529, 566, 574, 590, 614, 625, 631, + 636, 638, 669, 705, 741, 771, 809, 847, 873, 903, 923, 945, 969, 991, 1015, + 1043, 1063, 1085, 1107, 1136, 1142, 1146, 1151, 1153, 1163, 1167, 1172, + 1175, 1179, 1184, 1190, 1214, 1219, 1224, 1233, 1242, 1253, 1259, 1263, + 1269, 1297, 1301, 1306, 1312, 1317, 1324, 1328, 1335, 1338, 1345, 1350, + 1354, 1363, 1366, 1373, 1378, 1384, 1387, 1, 6, 0, 0, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -757,79 +763,80 @@ func NewPlanLexer(input antlr.CharStream) *PlanLexer { // PlanLexer tokens. const ( - PlanLexerT__0 = 1 - PlanLexerT__1 = 2 - PlanLexerT__2 = 3 - PlanLexerT__3 = 4 - PlanLexerT__4 = 5 - PlanLexerLBRACE = 6 - PlanLexerRBRACE = 7 - PlanLexerLT = 8 - PlanLexerLE = 9 - PlanLexerGT = 10 - PlanLexerGE = 11 - PlanLexerEQ = 12 - PlanLexerNE = 13 - PlanLexerLIKE = 14 - PlanLexerEXISTS = 15 - PlanLexerTEXTMATCH = 16 - PlanLexerPHRASEMATCH = 17 - PlanLexerRANDOMSAMPLE = 18 - PlanLexerMATCH_ALL = 19 - PlanLexerMATCH_ANY = 20 - PlanLexerMATCH_LEAST = 21 - PlanLexerMATCH_MOST = 22 - PlanLexerMATCH_EXACT = 23 - PlanLexerINTERVAL = 24 - PlanLexerISO = 25 - PlanLexerMINIMUM_SHOULD_MATCH = 26 - PlanLexerTHRESHOLD = 27 - PlanLexerASSIGN = 28 - PlanLexerADD = 29 - PlanLexerSUB = 30 - PlanLexerMUL = 31 - PlanLexerDIV = 32 - PlanLexerMOD = 33 - PlanLexerPOW = 34 - PlanLexerSHL = 35 - PlanLexerSHR = 36 - PlanLexerBAND = 37 - PlanLexerBOR = 38 - PlanLexerBXOR = 39 - PlanLexerAND = 40 - PlanLexerOR = 41 - PlanLexerISNULL = 42 - PlanLexerISNOTNULL = 43 - PlanLexerBNOT = 44 - PlanLexerNOT = 45 - PlanLexerIN = 46 - PlanLexerEmptyArray = 47 - PlanLexerJSONContains = 48 - PlanLexerJSONContainsAll = 49 - PlanLexerJSONContainsAny = 50 - PlanLexerArrayContains = 51 - PlanLexerArrayContainsAll = 52 - PlanLexerArrayContainsAny = 53 - PlanLexerArrayLength = 54 - PlanLexerElementFilter = 55 - PlanLexerSTEuqals = 56 - PlanLexerSTTouches = 57 - PlanLexerSTOverlaps = 58 - PlanLexerSTCrosses = 59 - PlanLexerSTContains = 60 - PlanLexerSTIntersects = 61 - PlanLexerSTWithin = 62 - PlanLexerSTDWithin = 63 - PlanLexerSTIsValid = 64 - PlanLexerBooleanConstant = 65 - PlanLexerIntegerConstant = 66 - PlanLexerFloatingConstant = 67 - PlanLexerIdentifier = 68 - PlanLexerMeta = 69 - PlanLexerStringLiteral = 70 - PlanLexerJSONIdentifier = 71 - PlanLexerStructFieldIdentifier = 72 - PlanLexerStructSubFieldIdentifier = 73 - PlanLexerWhitespace = 74 - PlanLexerNewline = 75 + PlanLexerT__0 = 1 + PlanLexerT__1 = 2 + PlanLexerT__2 = 3 + PlanLexerT__3 = 4 + PlanLexerT__4 = 5 + PlanLexerLBRACE = 6 + PlanLexerRBRACE = 7 + PlanLexerLT = 8 + PlanLexerLE = 9 + PlanLexerGT = 10 + PlanLexerGE = 11 + PlanLexerEQ = 12 + PlanLexerNE = 13 + PlanLexerLIKE = 14 + PlanLexerEXISTS = 15 + PlanLexerTEXTMATCH = 16 + PlanLexerPHRASEMATCH = 17 + PlanLexerRANDOMSAMPLE = 18 + PlanLexerMATCH_ALL = 19 + PlanLexerMATCH_ANY = 20 + PlanLexerMATCH_LEAST = 21 + PlanLexerMATCH_MOST = 22 + PlanLexerMATCH_EXACT = 23 + PlanLexerINTERVAL = 24 + PlanLexerISO = 25 + PlanLexerMINIMUM_SHOULD_MATCH = 26 + PlanLexerTHRESHOLD = 27 + PlanLexerASSIGN = 28 + PlanLexerADD = 29 + PlanLexerSUB = 30 + PlanLexerMUL = 31 + PlanLexerDIV = 32 + PlanLexerMOD = 33 + PlanLexerPOW = 34 + PlanLexerSHL = 35 + PlanLexerSHR = 36 + PlanLexerBAND = 37 + PlanLexerBOR = 38 + PlanLexerBXOR = 39 + PlanLexerAND = 40 + PlanLexerOR = 41 + PlanLexerISNULL = 42 + PlanLexerISNOTNULL = 43 + PlanLexerBNOT = 44 + PlanLexerNOT = 45 + PlanLexerIN = 46 + PlanLexerEmptyArray = 47 + PlanLexerJSONContains = 48 + PlanLexerJSONContainsAll = 49 + PlanLexerJSONContainsAny = 50 + PlanLexerArrayContains = 51 + PlanLexerArrayContainsAll = 52 + PlanLexerArrayContainsAny = 53 + PlanLexerArrayLength = 54 + PlanLexerElementFilter = 55 + PlanLexerSTEuqals = 56 + PlanLexerSTTouches = 57 + PlanLexerSTOverlaps = 58 + PlanLexerSTCrosses = 59 + PlanLexerSTContains = 60 + PlanLexerSTIntersects = 61 + PlanLexerSTWithin = 62 + PlanLexerSTDWithin = 63 + PlanLexerSTIsValid = 64 + PlanLexerBooleanConstant = 65 + PlanLexerIntegerConstant = 66 + PlanLexerFloatingConstant = 67 + PlanLexerIdentifier = 68 + PlanLexerMeta = 69 + PlanLexerStringLiteral = 70 + PlanLexerJSONIdentifier = 71 + PlanLexerStructIndexFieldIdentifier = 72 + PlanLexerStructFieldIdentifier = 73 + PlanLexerStructSubFieldIdentifier = 74 + PlanLexerWhitespace = 75 + PlanLexerNewline = 76 ) diff --git a/internal/parser/planparserv2/generated/plan_parser.go b/internal/parser/planparserv2/generated/plan_parser.go index 99606da829..1eace95a09 100644 --- a/internal/parser/planparserv2/generated/plan_parser.go +++ b/internal/parser/planparserv2/generated/plan_parser.go @@ -51,126 +51,128 @@ func planParserInit() { "STEuqals", "STTouches", "STOverlaps", "STCrosses", "STContains", "STIntersects", "STWithin", "STDWithin", "STIsValid", "BooleanConstant", "IntegerConstant", "FloatingConstant", "Identifier", "Meta", "StringLiteral", "JSONIdentifier", - "StructFieldIdentifier", "StructSubFieldIdentifier", "Whitespace", "Newline", + "StructIndexFieldIdentifier", "StructFieldIdentifier", "StructSubFieldIdentifier", + "Whitespace", "Newline", } staticData.RuleNames = []string{ "expr", "textMatchOption", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 75, 235, 2, 0, 7, 0, 2, 1, 7, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, + 4, 1, 76, 236, 2, 0, 7, 0, 2, 1, 7, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 10, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 22, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 43, 8, 0, - 10, 0, 12, 0, 46, 9, 0, 1, 0, 3, 0, 49, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 63, 8, 0, 1, 0, 1, 0, - 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 73, 8, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 44, + 8, 0, 10, 0, 12, 0, 47, 9, 0, 1, 0, 3, 0, 50, 8, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 64, 8, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 74, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 157, 8, 0, 10, 0, 12, 0, 160, - 9, 0, 1, 0, 3, 0, 163, 8, 0, 3, 0, 165, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 3, 0, 172, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 188, 8, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 226, 8, 0, 10, - 0, 12, 0, 229, 9, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 2, 0, 2, 0, - 19, 1, 0, 29, 30, 1, 0, 8, 13, 1, 0, 68, 69, 1, 0, 19, 20, 1, 0, 21, 23, - 2, 0, 29, 30, 44, 45, 2, 0, 48, 48, 51, 51, 2, 0, 49, 49, 52, 52, 2, 0, - 50, 50, 53, 53, 1, 0, 56, 62, 2, 0, 68, 68, 71, 72, 2, 0, 68, 68, 71, 71, - 1, 0, 31, 33, 1, 0, 35, 36, 1, 0, 8, 9, 3, 0, 68, 68, 71, 71, 73, 73, 1, - 0, 10, 11, 1, 0, 8, 11, 1, 0, 12, 13, 288, 0, 171, 1, 0, 0, 0, 2, 230, - 1, 0, 0, 0, 4, 5, 6, 0, -1, 0, 5, 9, 5, 68, 0, 0, 6, 7, 7, 0, 0, 0, 7, - 8, 5, 24, 0, 0, 8, 10, 5, 70, 0, 0, 9, 6, 1, 0, 0, 0, 9, 10, 1, 0, 0, 0, - 10, 11, 1, 0, 0, 0, 11, 12, 7, 1, 0, 0, 12, 13, 5, 25, 0, 0, 13, 172, 5, - 70, 0, 0, 14, 15, 5, 25, 0, 0, 15, 16, 5, 70, 0, 0, 16, 17, 7, 1, 0, 0, - 17, 21, 5, 68, 0, 0, 18, 19, 7, 0, 0, 0, 19, 20, 5, 24, 0, 0, 20, 22, 5, - 70, 0, 0, 21, 18, 1, 0, 0, 0, 21, 22, 1, 0, 0, 0, 22, 172, 1, 0, 0, 0, - 23, 172, 5, 66, 0, 0, 24, 172, 5, 67, 0, 0, 25, 172, 5, 65, 0, 0, 26, 172, - 5, 70, 0, 0, 27, 172, 7, 2, 0, 0, 28, 172, 5, 71, 0, 0, 29, 172, 5, 72, - 0, 0, 30, 172, 5, 73, 0, 0, 31, 32, 5, 6, 0, 0, 32, 33, 5, 68, 0, 0, 33, - 172, 5, 7, 0, 0, 34, 35, 5, 1, 0, 0, 35, 36, 3, 0, 0, 0, 36, 37, 5, 2, - 0, 0, 37, 172, 1, 0, 0, 0, 38, 39, 5, 3, 0, 0, 39, 44, 3, 0, 0, 0, 40, - 41, 5, 4, 0, 0, 41, 43, 3, 0, 0, 0, 42, 40, 1, 0, 0, 0, 43, 46, 1, 0, 0, - 0, 44, 42, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 48, 1, 0, 0, 0, 46, 44, - 1, 0, 0, 0, 47, 49, 5, 4, 0, 0, 48, 47, 1, 0, 0, 0, 48, 49, 1, 0, 0, 0, - 49, 50, 1, 0, 0, 0, 50, 51, 5, 5, 0, 0, 51, 172, 1, 0, 0, 0, 52, 172, 5, - 47, 0, 0, 53, 54, 5, 15, 0, 0, 54, 172, 3, 0, 0, 33, 55, 56, 5, 16, 0, - 0, 56, 57, 5, 1, 0, 0, 57, 58, 5, 68, 0, 0, 58, 59, 5, 4, 0, 0, 59, 62, - 5, 70, 0, 0, 60, 61, 5, 4, 0, 0, 61, 63, 3, 2, 1, 0, 62, 60, 1, 0, 0, 0, - 62, 63, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 172, 5, 2, 0, 0, 65, 66, 5, - 17, 0, 0, 66, 67, 5, 1, 0, 0, 67, 68, 5, 68, 0, 0, 68, 69, 5, 4, 0, 0, - 69, 72, 5, 70, 0, 0, 70, 71, 5, 4, 0, 0, 71, 73, 3, 0, 0, 0, 72, 70, 1, - 0, 0, 0, 72, 73, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 172, 5, 2, 0, 0, 75, - 76, 5, 18, 0, 0, 76, 77, 5, 1, 0, 0, 77, 78, 3, 0, 0, 0, 78, 79, 5, 2, - 0, 0, 79, 172, 1, 0, 0, 0, 80, 81, 5, 55, 0, 0, 81, 82, 5, 1, 0, 0, 82, - 83, 5, 68, 0, 0, 83, 84, 5, 4, 0, 0, 84, 85, 3, 0, 0, 0, 85, 86, 5, 2, - 0, 0, 86, 172, 1, 0, 0, 0, 87, 88, 7, 3, 0, 0, 88, 89, 5, 1, 0, 0, 89, - 90, 5, 68, 0, 0, 90, 91, 5, 4, 0, 0, 91, 92, 3, 0, 0, 0, 92, 93, 5, 2, - 0, 0, 93, 172, 1, 0, 0, 0, 94, 95, 7, 4, 0, 0, 95, 96, 5, 1, 0, 0, 96, - 97, 5, 68, 0, 0, 97, 98, 5, 4, 0, 0, 98, 99, 3, 0, 0, 0, 99, 100, 5, 4, - 0, 0, 100, 101, 5, 27, 0, 0, 101, 102, 5, 28, 0, 0, 102, 103, 5, 66, 0, - 0, 103, 104, 5, 2, 0, 0, 104, 172, 1, 0, 0, 0, 105, 106, 7, 5, 0, 0, 106, - 172, 3, 0, 0, 24, 107, 108, 7, 6, 0, 0, 108, 109, 5, 1, 0, 0, 109, 110, - 3, 0, 0, 0, 110, 111, 5, 4, 0, 0, 111, 112, 3, 0, 0, 0, 112, 113, 5, 2, - 0, 0, 113, 172, 1, 0, 0, 0, 114, 115, 7, 7, 0, 0, 115, 116, 5, 1, 0, 0, - 116, 117, 3, 0, 0, 0, 117, 118, 5, 4, 0, 0, 118, 119, 3, 0, 0, 0, 119, - 120, 5, 2, 0, 0, 120, 172, 1, 0, 0, 0, 121, 122, 7, 8, 0, 0, 122, 123, - 5, 1, 0, 0, 123, 124, 3, 0, 0, 0, 124, 125, 5, 4, 0, 0, 125, 126, 3, 0, - 0, 0, 126, 127, 5, 2, 0, 0, 127, 172, 1, 0, 0, 0, 128, 129, 7, 9, 0, 0, - 129, 130, 5, 1, 0, 0, 130, 131, 5, 68, 0, 0, 131, 132, 5, 4, 0, 0, 132, - 133, 5, 70, 0, 0, 133, 172, 5, 2, 0, 0, 134, 135, 5, 63, 0, 0, 135, 136, - 5, 1, 0, 0, 136, 137, 5, 68, 0, 0, 137, 138, 5, 4, 0, 0, 138, 139, 5, 70, - 0, 0, 139, 140, 5, 4, 0, 0, 140, 141, 3, 0, 0, 0, 141, 142, 5, 2, 0, 0, - 142, 172, 1, 0, 0, 0, 143, 144, 5, 64, 0, 0, 144, 145, 5, 1, 0, 0, 145, - 146, 5, 68, 0, 0, 146, 172, 5, 2, 0, 0, 147, 148, 5, 54, 0, 0, 148, 149, - 5, 1, 0, 0, 149, 150, 7, 10, 0, 0, 150, 172, 5, 2, 0, 0, 151, 152, 5, 68, - 0, 0, 152, 164, 5, 1, 0, 0, 153, 158, 3, 0, 0, 0, 154, 155, 5, 4, 0, 0, - 155, 157, 3, 0, 0, 0, 156, 154, 1, 0, 0, 0, 157, 160, 1, 0, 0, 0, 158, - 156, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 162, 1, 0, 0, 0, 160, 158, - 1, 0, 0, 0, 161, 163, 5, 4, 0, 0, 162, 161, 1, 0, 0, 0, 162, 163, 1, 0, - 0, 0, 163, 165, 1, 0, 0, 0, 164, 153, 1, 0, 0, 0, 164, 165, 1, 0, 0, 0, - 165, 166, 1, 0, 0, 0, 166, 172, 5, 2, 0, 0, 167, 168, 7, 11, 0, 0, 168, - 172, 5, 42, 0, 0, 169, 170, 7, 11, 0, 0, 170, 172, 5, 43, 0, 0, 171, 4, - 1, 0, 0, 0, 171, 14, 1, 0, 0, 0, 171, 23, 1, 0, 0, 0, 171, 24, 1, 0, 0, - 0, 171, 25, 1, 0, 0, 0, 171, 26, 1, 0, 0, 0, 171, 27, 1, 0, 0, 0, 171, - 28, 1, 0, 0, 0, 171, 29, 1, 0, 0, 0, 171, 30, 1, 0, 0, 0, 171, 31, 1, 0, - 0, 0, 171, 34, 1, 0, 0, 0, 171, 38, 1, 0, 0, 0, 171, 52, 1, 0, 0, 0, 171, - 53, 1, 0, 0, 0, 171, 55, 1, 0, 0, 0, 171, 65, 1, 0, 0, 0, 171, 75, 1, 0, - 0, 0, 171, 80, 1, 0, 0, 0, 171, 87, 1, 0, 0, 0, 171, 94, 1, 0, 0, 0, 171, - 105, 1, 0, 0, 0, 171, 107, 1, 0, 0, 0, 171, 114, 1, 0, 0, 0, 171, 121, - 1, 0, 0, 0, 171, 128, 1, 0, 0, 0, 171, 134, 1, 0, 0, 0, 171, 143, 1, 0, - 0, 0, 171, 147, 1, 0, 0, 0, 171, 151, 1, 0, 0, 0, 171, 167, 1, 0, 0, 0, - 171, 169, 1, 0, 0, 0, 172, 227, 1, 0, 0, 0, 173, 174, 10, 25, 0, 0, 174, - 175, 5, 34, 0, 0, 175, 226, 3, 0, 0, 26, 176, 177, 10, 23, 0, 0, 177, 178, - 7, 12, 0, 0, 178, 226, 3, 0, 0, 24, 179, 180, 10, 22, 0, 0, 180, 181, 7, - 0, 0, 0, 181, 226, 3, 0, 0, 23, 182, 183, 10, 21, 0, 0, 183, 184, 7, 13, - 0, 0, 184, 226, 3, 0, 0, 22, 185, 187, 10, 20, 0, 0, 186, 188, 5, 45, 0, - 0, 187, 186, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, - 190, 5, 46, 0, 0, 190, 226, 3, 0, 0, 21, 191, 192, 10, 11, 0, 0, 192, 193, - 7, 14, 0, 0, 193, 194, 7, 15, 0, 0, 194, 195, 7, 14, 0, 0, 195, 226, 3, - 0, 0, 12, 196, 197, 10, 10, 0, 0, 197, 198, 7, 16, 0, 0, 198, 199, 7, 15, - 0, 0, 199, 200, 7, 16, 0, 0, 200, 226, 3, 0, 0, 11, 201, 202, 10, 9, 0, - 0, 202, 203, 7, 17, 0, 0, 203, 226, 3, 0, 0, 10, 204, 205, 10, 8, 0, 0, - 205, 206, 7, 18, 0, 0, 206, 226, 3, 0, 0, 9, 207, 208, 10, 7, 0, 0, 208, - 209, 5, 37, 0, 0, 209, 226, 3, 0, 0, 8, 210, 211, 10, 6, 0, 0, 211, 212, - 5, 39, 0, 0, 212, 226, 3, 0, 0, 7, 213, 214, 10, 5, 0, 0, 214, 215, 5, - 38, 0, 0, 215, 226, 3, 0, 0, 6, 216, 217, 10, 4, 0, 0, 217, 218, 5, 40, - 0, 0, 218, 226, 3, 0, 0, 5, 219, 220, 10, 3, 0, 0, 220, 221, 5, 41, 0, - 0, 221, 226, 3, 0, 0, 4, 222, 223, 10, 32, 0, 0, 223, 224, 5, 14, 0, 0, - 224, 226, 5, 70, 0, 0, 225, 173, 1, 0, 0, 0, 225, 176, 1, 0, 0, 0, 225, - 179, 1, 0, 0, 0, 225, 182, 1, 0, 0, 0, 225, 185, 1, 0, 0, 0, 225, 191, - 1, 0, 0, 0, 225, 196, 1, 0, 0, 0, 225, 201, 1, 0, 0, 0, 225, 204, 1, 0, - 0, 0, 225, 207, 1, 0, 0, 0, 225, 210, 1, 0, 0, 0, 225, 213, 1, 0, 0, 0, - 225, 216, 1, 0, 0, 0, 225, 219, 1, 0, 0, 0, 225, 222, 1, 0, 0, 0, 226, - 229, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 1, 1, - 0, 0, 0, 229, 227, 1, 0, 0, 0, 230, 231, 5, 26, 0, 0, 231, 232, 5, 28, - 0, 0, 232, 233, 5, 66, 0, 0, 233, 3, 1, 0, 0, 0, 13, 9, 21, 44, 48, 62, - 72, 158, 162, 164, 171, 187, 225, 227, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 158, 8, 0, 10, 0, 12, + 0, 161, 9, 0, 1, 0, 3, 0, 164, 8, 0, 3, 0, 166, 8, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 3, 0, 173, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 189, 8, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 227, + 8, 0, 10, 0, 12, 0, 230, 9, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 2, + 0, 2, 0, 19, 1, 0, 29, 30, 1, 0, 8, 13, 1, 0, 68, 69, 1, 0, 19, 20, 1, + 0, 21, 23, 2, 0, 29, 30, 44, 45, 2, 0, 48, 48, 51, 51, 2, 0, 49, 49, 52, + 52, 2, 0, 50, 50, 53, 53, 1, 0, 56, 62, 3, 0, 68, 68, 71, 71, 73, 73, 2, + 0, 68, 68, 71, 71, 1, 0, 31, 33, 1, 0, 35, 36, 1, 0, 8, 9, 3, 0, 68, 68, + 71, 72, 74, 74, 1, 0, 10, 11, 1, 0, 8, 11, 1, 0, 12, 13, 290, 0, 172, 1, + 0, 0, 0, 2, 231, 1, 0, 0, 0, 4, 5, 6, 0, -1, 0, 5, 9, 5, 68, 0, 0, 6, 7, + 7, 0, 0, 0, 7, 8, 5, 24, 0, 0, 8, 10, 5, 70, 0, 0, 9, 6, 1, 0, 0, 0, 9, + 10, 1, 0, 0, 0, 10, 11, 1, 0, 0, 0, 11, 12, 7, 1, 0, 0, 12, 13, 5, 25, + 0, 0, 13, 173, 5, 70, 0, 0, 14, 15, 5, 25, 0, 0, 15, 16, 5, 70, 0, 0, 16, + 17, 7, 1, 0, 0, 17, 21, 5, 68, 0, 0, 18, 19, 7, 0, 0, 0, 19, 20, 5, 24, + 0, 0, 20, 22, 5, 70, 0, 0, 21, 18, 1, 0, 0, 0, 21, 22, 1, 0, 0, 0, 22, + 173, 1, 0, 0, 0, 23, 173, 5, 66, 0, 0, 24, 173, 5, 67, 0, 0, 25, 173, 5, + 65, 0, 0, 26, 173, 5, 70, 0, 0, 27, 173, 7, 2, 0, 0, 28, 173, 5, 71, 0, + 0, 29, 173, 5, 73, 0, 0, 30, 173, 5, 72, 0, 0, 31, 173, 5, 74, 0, 0, 32, + 33, 5, 6, 0, 0, 33, 34, 5, 68, 0, 0, 34, 173, 5, 7, 0, 0, 35, 36, 5, 1, + 0, 0, 36, 37, 3, 0, 0, 0, 37, 38, 5, 2, 0, 0, 38, 173, 1, 0, 0, 0, 39, + 40, 5, 3, 0, 0, 40, 45, 3, 0, 0, 0, 41, 42, 5, 4, 0, 0, 42, 44, 3, 0, 0, + 0, 43, 41, 1, 0, 0, 0, 44, 47, 1, 0, 0, 0, 45, 43, 1, 0, 0, 0, 45, 46, + 1, 0, 0, 0, 46, 49, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 48, 50, 5, 4, 0, 0, + 49, 48, 1, 0, 0, 0, 49, 50, 1, 0, 0, 0, 50, 51, 1, 0, 0, 0, 51, 52, 5, + 5, 0, 0, 52, 173, 1, 0, 0, 0, 53, 173, 5, 47, 0, 0, 54, 55, 5, 15, 0, 0, + 55, 173, 3, 0, 0, 33, 56, 57, 5, 16, 0, 0, 57, 58, 5, 1, 0, 0, 58, 59, + 5, 68, 0, 0, 59, 60, 5, 4, 0, 0, 60, 63, 5, 70, 0, 0, 61, 62, 5, 4, 0, + 0, 62, 64, 3, 2, 1, 0, 63, 61, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 65, + 1, 0, 0, 0, 65, 173, 5, 2, 0, 0, 66, 67, 5, 17, 0, 0, 67, 68, 5, 1, 0, + 0, 68, 69, 5, 68, 0, 0, 69, 70, 5, 4, 0, 0, 70, 73, 5, 70, 0, 0, 71, 72, + 5, 4, 0, 0, 72, 74, 3, 0, 0, 0, 73, 71, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, + 74, 75, 1, 0, 0, 0, 75, 173, 5, 2, 0, 0, 76, 77, 5, 18, 0, 0, 77, 78, 5, + 1, 0, 0, 78, 79, 3, 0, 0, 0, 79, 80, 5, 2, 0, 0, 80, 173, 1, 0, 0, 0, 81, + 82, 5, 55, 0, 0, 82, 83, 5, 1, 0, 0, 83, 84, 5, 68, 0, 0, 84, 85, 5, 4, + 0, 0, 85, 86, 3, 0, 0, 0, 86, 87, 5, 2, 0, 0, 87, 173, 1, 0, 0, 0, 88, + 89, 7, 3, 0, 0, 89, 90, 5, 1, 0, 0, 90, 91, 5, 68, 0, 0, 91, 92, 5, 4, + 0, 0, 92, 93, 3, 0, 0, 0, 93, 94, 5, 2, 0, 0, 94, 173, 1, 0, 0, 0, 95, + 96, 7, 4, 0, 0, 96, 97, 5, 1, 0, 0, 97, 98, 5, 68, 0, 0, 98, 99, 5, 4, + 0, 0, 99, 100, 3, 0, 0, 0, 100, 101, 5, 4, 0, 0, 101, 102, 5, 27, 0, 0, + 102, 103, 5, 28, 0, 0, 103, 104, 5, 66, 0, 0, 104, 105, 5, 2, 0, 0, 105, + 173, 1, 0, 0, 0, 106, 107, 7, 5, 0, 0, 107, 173, 3, 0, 0, 24, 108, 109, + 7, 6, 0, 0, 109, 110, 5, 1, 0, 0, 110, 111, 3, 0, 0, 0, 111, 112, 5, 4, + 0, 0, 112, 113, 3, 0, 0, 0, 113, 114, 5, 2, 0, 0, 114, 173, 1, 0, 0, 0, + 115, 116, 7, 7, 0, 0, 116, 117, 5, 1, 0, 0, 117, 118, 3, 0, 0, 0, 118, + 119, 5, 4, 0, 0, 119, 120, 3, 0, 0, 0, 120, 121, 5, 2, 0, 0, 121, 173, + 1, 0, 0, 0, 122, 123, 7, 8, 0, 0, 123, 124, 5, 1, 0, 0, 124, 125, 3, 0, + 0, 0, 125, 126, 5, 4, 0, 0, 126, 127, 3, 0, 0, 0, 127, 128, 5, 2, 0, 0, + 128, 173, 1, 0, 0, 0, 129, 130, 7, 9, 0, 0, 130, 131, 5, 1, 0, 0, 131, + 132, 5, 68, 0, 0, 132, 133, 5, 4, 0, 0, 133, 134, 5, 70, 0, 0, 134, 173, + 5, 2, 0, 0, 135, 136, 5, 63, 0, 0, 136, 137, 5, 1, 0, 0, 137, 138, 5, 68, + 0, 0, 138, 139, 5, 4, 0, 0, 139, 140, 5, 70, 0, 0, 140, 141, 5, 4, 0, 0, + 141, 142, 3, 0, 0, 0, 142, 143, 5, 2, 0, 0, 143, 173, 1, 0, 0, 0, 144, + 145, 5, 64, 0, 0, 145, 146, 5, 1, 0, 0, 146, 147, 5, 68, 0, 0, 147, 173, + 5, 2, 0, 0, 148, 149, 5, 54, 0, 0, 149, 150, 5, 1, 0, 0, 150, 151, 7, 10, + 0, 0, 151, 173, 5, 2, 0, 0, 152, 153, 5, 68, 0, 0, 153, 165, 5, 1, 0, 0, + 154, 159, 3, 0, 0, 0, 155, 156, 5, 4, 0, 0, 156, 158, 3, 0, 0, 0, 157, + 155, 1, 0, 0, 0, 158, 161, 1, 0, 0, 0, 159, 157, 1, 0, 0, 0, 159, 160, + 1, 0, 0, 0, 160, 163, 1, 0, 0, 0, 161, 159, 1, 0, 0, 0, 162, 164, 5, 4, + 0, 0, 163, 162, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 166, 1, 0, 0, 0, + 165, 154, 1, 0, 0, 0, 165, 166, 1, 0, 0, 0, 166, 167, 1, 0, 0, 0, 167, + 173, 5, 2, 0, 0, 168, 169, 7, 11, 0, 0, 169, 173, 5, 42, 0, 0, 170, 171, + 7, 11, 0, 0, 171, 173, 5, 43, 0, 0, 172, 4, 1, 0, 0, 0, 172, 14, 1, 0, + 0, 0, 172, 23, 1, 0, 0, 0, 172, 24, 1, 0, 0, 0, 172, 25, 1, 0, 0, 0, 172, + 26, 1, 0, 0, 0, 172, 27, 1, 0, 0, 0, 172, 28, 1, 0, 0, 0, 172, 29, 1, 0, + 0, 0, 172, 30, 1, 0, 0, 0, 172, 31, 1, 0, 0, 0, 172, 32, 1, 0, 0, 0, 172, + 35, 1, 0, 0, 0, 172, 39, 1, 0, 0, 0, 172, 53, 1, 0, 0, 0, 172, 54, 1, 0, + 0, 0, 172, 56, 1, 0, 0, 0, 172, 66, 1, 0, 0, 0, 172, 76, 1, 0, 0, 0, 172, + 81, 1, 0, 0, 0, 172, 88, 1, 0, 0, 0, 172, 95, 1, 0, 0, 0, 172, 106, 1, + 0, 0, 0, 172, 108, 1, 0, 0, 0, 172, 115, 1, 0, 0, 0, 172, 122, 1, 0, 0, + 0, 172, 129, 1, 0, 0, 0, 172, 135, 1, 0, 0, 0, 172, 144, 1, 0, 0, 0, 172, + 148, 1, 0, 0, 0, 172, 152, 1, 0, 0, 0, 172, 168, 1, 0, 0, 0, 172, 170, + 1, 0, 0, 0, 173, 228, 1, 0, 0, 0, 174, 175, 10, 25, 0, 0, 175, 176, 5, + 34, 0, 0, 176, 227, 3, 0, 0, 26, 177, 178, 10, 23, 0, 0, 178, 179, 7, 12, + 0, 0, 179, 227, 3, 0, 0, 24, 180, 181, 10, 22, 0, 0, 181, 182, 7, 0, 0, + 0, 182, 227, 3, 0, 0, 23, 183, 184, 10, 21, 0, 0, 184, 185, 7, 13, 0, 0, + 185, 227, 3, 0, 0, 22, 186, 188, 10, 20, 0, 0, 187, 189, 5, 45, 0, 0, 188, + 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 191, + 5, 46, 0, 0, 191, 227, 3, 0, 0, 21, 192, 193, 10, 11, 0, 0, 193, 194, 7, + 14, 0, 0, 194, 195, 7, 15, 0, 0, 195, 196, 7, 14, 0, 0, 196, 227, 3, 0, + 0, 12, 197, 198, 10, 10, 0, 0, 198, 199, 7, 16, 0, 0, 199, 200, 7, 15, + 0, 0, 200, 201, 7, 16, 0, 0, 201, 227, 3, 0, 0, 11, 202, 203, 10, 9, 0, + 0, 203, 204, 7, 17, 0, 0, 204, 227, 3, 0, 0, 10, 205, 206, 10, 8, 0, 0, + 206, 207, 7, 18, 0, 0, 207, 227, 3, 0, 0, 9, 208, 209, 10, 7, 0, 0, 209, + 210, 5, 37, 0, 0, 210, 227, 3, 0, 0, 8, 211, 212, 10, 6, 0, 0, 212, 213, + 5, 39, 0, 0, 213, 227, 3, 0, 0, 7, 214, 215, 10, 5, 0, 0, 215, 216, 5, + 38, 0, 0, 216, 227, 3, 0, 0, 6, 217, 218, 10, 4, 0, 0, 218, 219, 5, 40, + 0, 0, 219, 227, 3, 0, 0, 5, 220, 221, 10, 3, 0, 0, 221, 222, 5, 41, 0, + 0, 222, 227, 3, 0, 0, 4, 223, 224, 10, 32, 0, 0, 224, 225, 5, 14, 0, 0, + 225, 227, 5, 70, 0, 0, 226, 174, 1, 0, 0, 0, 226, 177, 1, 0, 0, 0, 226, + 180, 1, 0, 0, 0, 226, 183, 1, 0, 0, 0, 226, 186, 1, 0, 0, 0, 226, 192, + 1, 0, 0, 0, 226, 197, 1, 0, 0, 0, 226, 202, 1, 0, 0, 0, 226, 205, 1, 0, + 0, 0, 226, 208, 1, 0, 0, 0, 226, 211, 1, 0, 0, 0, 226, 214, 1, 0, 0, 0, + 226, 217, 1, 0, 0, 0, 226, 220, 1, 0, 0, 0, 226, 223, 1, 0, 0, 0, 227, + 230, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 1, 1, + 0, 0, 0, 230, 228, 1, 0, 0, 0, 231, 232, 5, 26, 0, 0, 232, 233, 5, 28, + 0, 0, 233, 234, 5, 66, 0, 0, 234, 3, 1, 0, 0, 0, 13, 9, 21, 45, 49, 63, + 73, 159, 163, 165, 172, 188, 226, 228, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -208,82 +210,83 @@ func NewPlanParser(input antlr.TokenStream) *PlanParser { // PlanParser tokens. const ( - PlanParserEOF = antlr.TokenEOF - PlanParserT__0 = 1 - PlanParserT__1 = 2 - PlanParserT__2 = 3 - PlanParserT__3 = 4 - PlanParserT__4 = 5 - PlanParserLBRACE = 6 - PlanParserRBRACE = 7 - PlanParserLT = 8 - PlanParserLE = 9 - PlanParserGT = 10 - PlanParserGE = 11 - PlanParserEQ = 12 - PlanParserNE = 13 - PlanParserLIKE = 14 - PlanParserEXISTS = 15 - PlanParserTEXTMATCH = 16 - PlanParserPHRASEMATCH = 17 - PlanParserRANDOMSAMPLE = 18 - PlanParserMATCH_ALL = 19 - PlanParserMATCH_ANY = 20 - PlanParserMATCH_LEAST = 21 - PlanParserMATCH_MOST = 22 - PlanParserMATCH_EXACT = 23 - PlanParserINTERVAL = 24 - PlanParserISO = 25 - PlanParserMINIMUM_SHOULD_MATCH = 26 - PlanParserTHRESHOLD = 27 - PlanParserASSIGN = 28 - PlanParserADD = 29 - PlanParserSUB = 30 - PlanParserMUL = 31 - PlanParserDIV = 32 - PlanParserMOD = 33 - PlanParserPOW = 34 - PlanParserSHL = 35 - PlanParserSHR = 36 - PlanParserBAND = 37 - PlanParserBOR = 38 - PlanParserBXOR = 39 - PlanParserAND = 40 - PlanParserOR = 41 - PlanParserISNULL = 42 - PlanParserISNOTNULL = 43 - PlanParserBNOT = 44 - PlanParserNOT = 45 - PlanParserIN = 46 - PlanParserEmptyArray = 47 - PlanParserJSONContains = 48 - PlanParserJSONContainsAll = 49 - PlanParserJSONContainsAny = 50 - PlanParserArrayContains = 51 - PlanParserArrayContainsAll = 52 - PlanParserArrayContainsAny = 53 - PlanParserArrayLength = 54 - PlanParserElementFilter = 55 - PlanParserSTEuqals = 56 - PlanParserSTTouches = 57 - PlanParserSTOverlaps = 58 - PlanParserSTCrosses = 59 - PlanParserSTContains = 60 - PlanParserSTIntersects = 61 - PlanParserSTWithin = 62 - PlanParserSTDWithin = 63 - PlanParserSTIsValid = 64 - PlanParserBooleanConstant = 65 - PlanParserIntegerConstant = 66 - PlanParserFloatingConstant = 67 - PlanParserIdentifier = 68 - PlanParserMeta = 69 - PlanParserStringLiteral = 70 - PlanParserJSONIdentifier = 71 - PlanParserStructFieldIdentifier = 72 - PlanParserStructSubFieldIdentifier = 73 - PlanParserWhitespace = 74 - PlanParserNewline = 75 + PlanParserEOF = antlr.TokenEOF + PlanParserT__0 = 1 + PlanParserT__1 = 2 + PlanParserT__2 = 3 + PlanParserT__3 = 4 + PlanParserT__4 = 5 + PlanParserLBRACE = 6 + PlanParserRBRACE = 7 + PlanParserLT = 8 + PlanParserLE = 9 + PlanParserGT = 10 + PlanParserGE = 11 + PlanParserEQ = 12 + PlanParserNE = 13 + PlanParserLIKE = 14 + PlanParserEXISTS = 15 + PlanParserTEXTMATCH = 16 + PlanParserPHRASEMATCH = 17 + PlanParserRANDOMSAMPLE = 18 + PlanParserMATCH_ALL = 19 + PlanParserMATCH_ANY = 20 + PlanParserMATCH_LEAST = 21 + PlanParserMATCH_MOST = 22 + PlanParserMATCH_EXACT = 23 + PlanParserINTERVAL = 24 + PlanParserISO = 25 + PlanParserMINIMUM_SHOULD_MATCH = 26 + PlanParserTHRESHOLD = 27 + PlanParserASSIGN = 28 + PlanParserADD = 29 + PlanParserSUB = 30 + PlanParserMUL = 31 + PlanParserDIV = 32 + PlanParserMOD = 33 + PlanParserPOW = 34 + PlanParserSHL = 35 + PlanParserSHR = 36 + PlanParserBAND = 37 + PlanParserBOR = 38 + PlanParserBXOR = 39 + PlanParserAND = 40 + PlanParserOR = 41 + PlanParserISNULL = 42 + PlanParserISNOTNULL = 43 + PlanParserBNOT = 44 + PlanParserNOT = 45 + PlanParserIN = 46 + PlanParserEmptyArray = 47 + PlanParserJSONContains = 48 + PlanParserJSONContainsAll = 49 + PlanParserJSONContainsAny = 50 + PlanParserArrayContains = 51 + PlanParserArrayContainsAll = 52 + PlanParserArrayContainsAny = 53 + PlanParserArrayLength = 54 + PlanParserElementFilter = 55 + PlanParserSTEuqals = 56 + PlanParserSTTouches = 57 + PlanParserSTOverlaps = 58 + PlanParserSTCrosses = 59 + PlanParserSTContains = 60 + PlanParserSTIntersects = 61 + PlanParserSTWithin = 62 + PlanParserSTDWithin = 63 + PlanParserSTIsValid = 64 + PlanParserBooleanConstant = 65 + PlanParserIntegerConstant = 66 + PlanParserFloatingConstant = 67 + PlanParserIdentifier = 68 + PlanParserMeta = 69 + PlanParserStringLiteral = 70 + PlanParserJSONIdentifier = 71 + PlanParserStructIndexFieldIdentifier = 72 + PlanParserStructFieldIdentifier = 73 + PlanParserStructSubFieldIdentifier = 74 + PlanParserWhitespace = 75 + PlanParserNewline = 76 ) // PlanParser rules. @@ -1718,6 +1721,10 @@ func (s *ReverseRangeContext) StructSubFieldIdentifier() antlr.TerminalNode { return s.GetToken(PlanParserStructSubFieldIdentifier, 0) } +func (s *ReverseRangeContext) StructIndexFieldIdentifier() antlr.TerminalNode { + return s.GetToken(PlanParserStructIndexFieldIdentifier, 0) +} + func (s *ReverseRangeContext) AllGT() []antlr.TerminalNode { return s.GetTokens(PlanParserGT) } @@ -2417,6 +2424,10 @@ func (s *RangeContext) StructSubFieldIdentifier() antlr.TerminalNode { return s.GetToken(PlanParserStructSubFieldIdentifier, 0) } +func (s *RangeContext) StructIndexFieldIdentifier() antlr.TerminalNode { + return s.GetToken(PlanParserStructIndexFieldIdentifier, 0) +} + func (s *RangeContext) AllLT() []antlr.TerminalNode { return s.GetTokens(PlanParserLT) } @@ -3106,6 +3117,38 @@ func (s *BitAndContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } } +type StructIndexFieldContext struct { + ExprContext +} + +func NewStructIndexFieldContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *StructIndexFieldContext { + var p = new(StructIndexFieldContext) + + InitEmptyExprContext(&p.ExprContext) + p.parser = parser + p.CopyAll(ctx.(*ExprContext)) + + return p +} + +func (s *StructIndexFieldContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *StructIndexFieldContext) StructIndexFieldIdentifier() antlr.TerminalNode { + return s.GetToken(PlanParserStructIndexFieldIdentifier, 0) +} + +func (s *StructIndexFieldContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case PlanVisitor: + return t.VisitStructIndexField(s) + + default: + return t.VisitChildren(s) + } +} + type IsNullContext struct { ExprContext } @@ -3269,7 +3312,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(171) + p.SetState(172) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3564,12 +3607,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } case 10: - localctx = NewStructSubFieldContext(p, localctx) + localctx = NewStructIndexFieldContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { p.SetState(30) - p.Match(PlanParserStructSubFieldIdentifier) + p.Match(PlanParserStructIndexFieldIdentifier) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -3577,28 +3620,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } case 11: - localctx = NewTemplateVariableContext(p, localctx) + localctx = NewStructSubFieldContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { p.SetState(31) - p.Match(PlanParserLBRACE) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(32) - p.Match(PlanParserIdentifier) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(33) - p.Match(PlanParserRBRACE) + p.Match(PlanParserStructSubFieldIdentifier) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -3606,24 +3633,28 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } case 12: - localctx = NewParensContext(p, localctx) + localctx = NewTemplateVariableContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(34) - p.Match(PlanParserT__0) + p.SetState(32) + p.Match(PlanParserLBRACE) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(35) - p.expr(0) + p.SetState(33) + p.Match(PlanParserIdentifier) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(36) - p.Match(PlanParserT__1) + p.SetState(34) + p.Match(PlanParserRBRACE) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -3631,11 +3662,36 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } case 13: + localctx = NewParensContext(p, localctx) + p.SetParserRuleContext(localctx) + _prevctx = localctx + { + p.SetState(35) + p.Match(PlanParserT__0) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(36) + p.expr(0) + } + { + p.SetState(37) + p.Match(PlanParserT__1) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + + case 14: localctx = NewArrayContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(38) + p.SetState(39) p.Match(PlanParserT__2) if p.HasError() { // Recognition error - abort rule @@ -3643,10 +3699,10 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(39) + p.SetState(40) p.expr(0) } - p.SetState(44) + p.SetState(45) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3658,7 +3714,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(40) + p.SetState(41) p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule @@ -3666,12 +3722,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(41) + p.SetState(42) p.expr(0) } } - p.SetState(46) + p.SetState(47) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3681,7 +3737,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { goto errorExit } } - p.SetState(48) + p.SetState(49) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3690,7 +3746,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { if _la == PlanParserT__3 { { - p.SetState(47) + p.SetState(48) p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule @@ -3700,7 +3756,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } { - p.SetState(50) + p.SetState(51) p.Match(PlanParserT__4) if p.HasError() { // Recognition error - abort rule @@ -3708,12 +3764,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } - case 14: + case 15: localctx = NewEmptyArrayContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(52) + p.SetState(53) p.Match(PlanParserEmptyArray) if p.HasError() { // Recognition error - abort rule @@ -3721,12 +3777,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } - case 15: + case 16: localctx = NewExistsContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(53) + p.SetState(54) p.Match(PlanParserEXISTS) if p.HasError() { // Recognition error - abort rule @@ -3734,33 +3790,25 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(54) + p.SetState(55) p.expr(33) } - case 16: + case 17: localctx = NewTextMatchContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(55) + p.SetState(56) p.Match(PlanParserTEXTMATCH) if p.HasError() { // Recognition error - abort rule goto errorExit } } - { - p.SetState(56) - p.Match(PlanParserT__0) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } { p.SetState(57) - p.Match(PlanParserIdentifier) + p.Match(PlanParserT__0) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -3768,73 +3816,6 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } { p.SetState(58) - p.Match(PlanParserT__3) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(59) - p.Match(PlanParserStringLiteral) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - p.SetState(62) - p.GetErrorHandler().Sync(p) - if p.HasError() { - goto errorExit - } - _la = p.GetTokenStream().LA(1) - - if _la == PlanParserT__3 { - { - p.SetState(60) - p.Match(PlanParserT__3) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(61) - p.TextMatchOption() - } - - } - { - p.SetState(64) - p.Match(PlanParserT__1) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - - case 17: - localctx = NewPhraseMatchContext(p, localctx) - p.SetParserRuleContext(localctx) - _prevctx = localctx - { - p.SetState(65) - p.Match(PlanParserPHRASEMATCH) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(66) - p.Match(PlanParserT__0) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(67) p.Match(PlanParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -3842,7 +3823,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(68) + p.SetState(59) p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule @@ -3850,14 +3831,14 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(69) + p.SetState(60) p.Match(PlanParserStringLiteral) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(72) + p.SetState(63) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3866,7 +3847,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { if _la == PlanParserT__3 { { - p.SetState(70) + p.SetState(61) p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule @@ -3874,13 +3855,13 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(71) - p.expr(0) + p.SetState(62) + p.TextMatchOption() } } { - p.SetState(74) + p.SetState(65) p.Match(PlanParserT__1) if p.HasError() { // Recognition error - abort rule @@ -3889,19 +3870,19 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } case 18: - localctx = NewRandomSampleContext(p, localctx) + localctx = NewPhraseMatchContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(75) - p.Match(PlanParserRANDOMSAMPLE) + p.SetState(66) + p.Match(PlanParserPHRASEMATCH) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(76) + p.SetState(67) p.Match(PlanParserT__0) if p.HasError() { // Recognition error - abort rule @@ -3909,11 +3890,53 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(77) - p.expr(0) + p.SetState(68) + p.Match(PlanParserIdentifier) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(78) + p.SetState(69) + p.Match(PlanParserT__3) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(70) + p.Match(PlanParserStringLiteral) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + p.SetState(73) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + _la = p.GetTokenStream().LA(1) + + if _la == PlanParserT__3 { + { + p.SetState(71) + p.Match(PlanParserT__3) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(72) + p.expr(0) + } + + } + { + p.SetState(75) p.Match(PlanParserT__1) if p.HasError() { // Recognition error - abort rule @@ -3922,19 +3945,19 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } case 19: - localctx = NewElementFilterContext(p, localctx) + localctx = NewRandomSampleContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(80) - p.Match(PlanParserElementFilter) + p.SetState(76) + p.Match(PlanParserRANDOMSAMPLE) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(81) + p.SetState(77) p.Match(PlanParserT__0) if p.HasError() { // Recognition error - abort rule @@ -3942,27 +3965,11 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(82) - p.Match(PlanParserIdentifier) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(83) - p.Match(PlanParserT__3) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(84) + p.SetState(78) p.expr(0) } { - p.SetState(85) + p.SetState(79) p.Match(PlanParserT__1) if p.HasError() { // Recognition error - abort rule @@ -3971,11 +3978,60 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } case 20: + localctx = NewElementFilterContext(p, localctx) + p.SetParserRuleContext(localctx) + _prevctx = localctx + { + p.SetState(81) + p.Match(PlanParserElementFilter) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(82) + p.Match(PlanParserT__0) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(83) + p.Match(PlanParserIdentifier) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(84) + p.Match(PlanParserT__3) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(85) + p.expr(0) + } + { + p.SetState(86) + p.Match(PlanParserT__1) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + + case 21: localctx = NewMatchSimpleContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(87) + p.SetState(88) var _lt = p.GetTokenStream().LT(1) @@ -3993,7 +4049,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(88) + p.SetState(89) p.Match(PlanParserT__0) if p.HasError() { // Recognition error - abort rule @@ -4001,7 +4057,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(89) + p.SetState(90) p.Match(PlanParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -4009,7 +4065,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(90) + p.SetState(91) p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule @@ -4017,11 +4073,11 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(91) + p.SetState(92) p.expr(0) } { - p.SetState(92) + p.SetState(93) p.Match(PlanParserT__1) if p.HasError() { // Recognition error - abort rule @@ -4029,12 +4085,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } - case 21: + case 22: localctx = NewMatchThresholdContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(94) + p.SetState(95) var _lt = p.GetTokenStream().LT(1) @@ -4052,7 +4108,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(95) + p.SetState(96) p.Match(PlanParserT__0) if p.HasError() { // Recognition error - abort rule @@ -4060,7 +4116,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(96) + p.SetState(97) p.Match(PlanParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -4068,28 +4124,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(97) + p.SetState(98) p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule goto errorExit } } - { - p.SetState(98) - p.expr(0) - } { p.SetState(99) - p.Match(PlanParserT__3) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } + p.expr(0) } { p.SetState(100) - p.Match(PlanParserTHRESHOLD) + p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -4097,7 +4145,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } { p.SetState(101) - p.Match(PlanParserASSIGN) + p.Match(PlanParserTHRESHOLD) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -4105,7 +4153,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } { p.SetState(102) - p.Match(PlanParserIntegerConstant) + p.Match(PlanParserASSIGN) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -4113,6 +4161,14 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } { p.SetState(103) + p.Match(PlanParserIntegerConstant) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(104) p.Match(PlanParserT__1) if p.HasError() { // Recognition error - abort rule @@ -4120,12 +4176,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } - case 22: + case 23: localctx = NewUnaryContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(105) + p.SetState(106) var _lt = p.GetTokenStream().LT(1) @@ -4143,16 +4199,16 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(106) + p.SetState(107) p.expr(24) } - case 23: + case 24: localctx = NewJSONContainsContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(107) + p.SetState(108) _la = p.GetTokenStream().LA(1) if !(_la == PlanParserJSONContains || _la == PlanParserArrayContains) { @@ -4163,7 +4219,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(108) + p.SetState(109) p.Match(PlanParserT__0) if p.HasError() { // Recognition error - abort rule @@ -4171,11 +4227,11 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(109) + p.SetState(110) p.expr(0) } { - p.SetState(110) + p.SetState(111) p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule @@ -4183,11 +4239,11 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(111) + p.SetState(112) p.expr(0) } { - p.SetState(112) + p.SetState(113) p.Match(PlanParserT__1) if p.HasError() { // Recognition error - abort rule @@ -4195,12 +4251,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } - case 24: + case 25: localctx = NewJSONContainsAllContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(114) + p.SetState(115) _la = p.GetTokenStream().LA(1) if !(_la == PlanParserJSONContainsAll || _la == PlanParserArrayContainsAll) { @@ -4211,7 +4267,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(115) + p.SetState(116) p.Match(PlanParserT__0) if p.HasError() { // Recognition error - abort rule @@ -4219,11 +4275,11 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(116) + p.SetState(117) p.expr(0) } { - p.SetState(117) + p.SetState(118) p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule @@ -4231,11 +4287,11 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(118) + p.SetState(119) p.expr(0) } { - p.SetState(119) + p.SetState(120) p.Match(PlanParserT__1) if p.HasError() { // Recognition error - abort rule @@ -4243,12 +4299,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } - case 25: + case 26: localctx = NewJSONContainsAnyContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(121) + p.SetState(122) _la = p.GetTokenStream().LA(1) if !(_la == PlanParserJSONContainsAny || _la == PlanParserArrayContainsAny) { @@ -4259,7 +4315,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(122) + p.SetState(123) p.Match(PlanParserT__0) if p.HasError() { // Recognition error - abort rule @@ -4267,11 +4323,11 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(123) + p.SetState(124) p.expr(0) } { - p.SetState(124) + p.SetState(125) p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule @@ -4279,11 +4335,11 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(125) + p.SetState(126) p.expr(0) } { - p.SetState(126) + p.SetState(127) p.Match(PlanParserT__1) if p.HasError() { // Recognition error - abort rule @@ -4291,12 +4347,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } - case 26: + case 27: localctx = NewSpatialBinaryContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(128) + p.SetState(129) var _lt = p.GetTokenStream().LT(1) @@ -4313,17 +4369,9 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { p.Consume() } } - { - p.SetState(129) - p.Match(PlanParserT__0) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } { p.SetState(130) - p.Match(PlanParserIdentifier) + p.Match(PlanParserT__0) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -4331,51 +4379,6 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } { p.SetState(131) - p.Match(PlanParserT__3) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(132) - p.Match(PlanParserStringLiteral) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(133) - p.Match(PlanParserT__1) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - - case 27: - localctx = NewSTDWithinContext(p, localctx) - p.SetParserRuleContext(localctx) - _prevctx = localctx - { - p.SetState(134) - p.Match(PlanParserSTDWithin) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(135) - p.Match(PlanParserT__0) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(136) p.Match(PlanParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -4383,7 +4386,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(137) + p.SetState(132) p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule @@ -4391,7 +4394,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(138) + p.SetState(133) p.Match(PlanParserStringLiteral) if p.HasError() { // Recognition error - abort rule @@ -4399,19 +4402,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(139) - p.Match(PlanParserT__3) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(140) - p.expr(0) - } - { - p.SetState(141) + p.SetState(134) p.Match(PlanParserT__1) if p.HasError() { // Recognition error - abort rule @@ -4420,19 +4411,19 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } case 28: - localctx = NewSTIsValidContext(p, localctx) + localctx = NewSTDWithinContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(143) - p.Match(PlanParserSTIsValid) + p.SetState(135) + p.Match(PlanParserSTDWithin) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(144) + p.SetState(136) p.Match(PlanParserT__0) if p.HasError() { // Recognition error - abort rule @@ -4440,7 +4431,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(145) + p.SetState(137) p.Match(PlanParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -4448,7 +4439,35 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(146) + p.SetState(138) + p.Match(PlanParserT__3) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(139) + p.Match(PlanParserStringLiteral) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(140) + p.Match(PlanParserT__3) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(141) + p.expr(0) + } + { + p.SetState(142) p.Match(PlanParserT__1) if p.HasError() { // Recognition error - abort rule @@ -4457,19 +4476,19 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } case 29: - localctx = NewArrayLengthContext(p, localctx) + localctx = NewSTIsValidContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(147) - p.Match(PlanParserArrayLength) + p.SetState(144) + p.Match(PlanParserSTIsValid) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(148) + p.SetState(145) p.Match(PlanParserT__0) if p.HasError() { // Recognition error - abort rule @@ -4477,18 +4496,15 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(149) - _la = p.GetTokenStream().LA(1) - - if !((int64((_la-68)) & ^0x3f) == 0 && ((int64(1)<<(_la-68))&25) != 0) { - p.GetErrorHandler().RecoverInline(p) - } else { - p.GetErrorHandler().ReportMatch(p) - p.Consume() + p.SetState(146) + p.Match(PlanParserIdentifier) + if p.HasError() { + // Recognition error - abort rule + goto errorExit } } { - p.SetState(150) + p.SetState(147) p.Match(PlanParserT__1) if p.HasError() { // Recognition error - abort rule @@ -4497,11 +4513,51 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } case 30: + localctx = NewArrayLengthContext(p, localctx) + p.SetParserRuleContext(localctx) + _prevctx = localctx + { + p.SetState(148) + p.Match(PlanParserArrayLength) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(149) + p.Match(PlanParserT__0) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(150) + _la = p.GetTokenStream().LA(1) + + if !((int64((_la-68)) & ^0x3f) == 0 && ((int64(1)<<(_la-68))&41) != 0) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + { + p.SetState(151) + p.Match(PlanParserT__1) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + + case 31: localctx = NewCallContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(151) + p.SetState(152) p.Match(PlanParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -4509,26 +4565,26 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(152) + p.SetState(153) p.Match(PlanParserT__0) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(164) + p.SetState(165) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if ((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&-87959269310390) != 0) || ((int64((_la-64)) & ^0x3f) == 0 && ((int64(1)<<(_la-64))&1023) != 0) { + if ((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&-87959269310390) != 0) || ((int64((_la-64)) & ^0x3f) == 0 && ((int64(1)<<(_la-64))&2047) != 0) { { - p.SetState(153) + p.SetState(154) p.expr(0) } - p.SetState(158) + p.SetState(159) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4540,7 +4596,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(154) + p.SetState(155) p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule @@ -4548,12 +4604,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(155) + p.SetState(156) p.expr(0) } } - p.SetState(160) + p.SetState(161) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4563,7 +4619,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { goto errorExit } } - p.SetState(162) + p.SetState(163) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4572,7 +4628,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { if _la == PlanParserT__3 { { - p.SetState(161) + p.SetState(162) p.Match(PlanParserT__3) if p.HasError() { // Recognition error - abort rule @@ -4584,7 +4640,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } { - p.SetState(166) + p.SetState(167) p.Match(PlanParserT__1) if p.HasError() { // Recognition error - abort rule @@ -4592,12 +4648,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } - case 31: + case 32: localctx = NewIsNullContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(167) + p.SetState(168) _la = p.GetTokenStream().LA(1) if !(_la == PlanParserIdentifier || _la == PlanParserJSONIdentifier) { @@ -4608,7 +4664,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(168) + p.SetState(169) p.Match(PlanParserISNULL) if p.HasError() { // Recognition error - abort rule @@ -4616,12 +4672,12 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } - case 32: + case 33: localctx = NewIsNotNullContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(169) + p.SetState(170) _la = p.GetTokenStream().LA(1) if !(_la == PlanParserIdentifier || _la == PlanParserJSONIdentifier) { @@ -4632,7 +4688,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(170) + p.SetState(171) p.Match(PlanParserISNOTNULL) if p.HasError() { // Recognition error - abort rule @@ -4644,7 +4700,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { goto errorExit } p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) - p.SetState(227) + p.SetState(228) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4659,7 +4715,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { p.TriggerExitRuleEvent() } _prevctx = localctx - p.SetState(225) + p.SetState(226) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4669,14 +4725,14 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { case 1: localctx = NewPowerContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(173) + p.SetState(174) if !(p.Precpred(p.GetParserRuleContext(), 25)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 25)", "")) goto errorExit } { - p.SetState(174) + p.SetState(175) p.Match(PlanParserPOW) if p.HasError() { // Recognition error - abort rule @@ -4684,21 +4740,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(175) + p.SetState(176) p.expr(26) } case 2: localctx = NewMulDivModContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(176) + p.SetState(177) if !(p.Precpred(p.GetParserRuleContext(), 23)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 23)", "")) goto errorExit } { - p.SetState(177) + p.SetState(178) var _lt = p.GetTokenStream().LT(1) @@ -4716,21 +4772,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(178) + p.SetState(179) p.expr(24) } case 3: localctx = NewAddSubContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(179) + p.SetState(180) if !(p.Precpred(p.GetParserRuleContext(), 22)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 22)", "")) goto errorExit } { - p.SetState(180) + p.SetState(181) var _lt = p.GetTokenStream().LT(1) @@ -4748,21 +4804,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(181) + p.SetState(182) p.expr(23) } case 4: localctx = NewShiftContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(182) + p.SetState(183) if !(p.Precpred(p.GetParserRuleContext(), 21)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 21)", "")) goto errorExit } { - p.SetState(183) + p.SetState(184) var _lt = p.GetTokenStream().LT(1) @@ -4780,20 +4836,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(184) + p.SetState(185) p.expr(22) } case 5: localctx = NewTermContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(185) + p.SetState(186) if !(p.Precpred(p.GetParserRuleContext(), 20)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 20)", "")) goto errorExit } - p.SetState(187) + p.SetState(188) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4802,7 +4858,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { if _la == PlanParserNOT { { - p.SetState(186) + p.SetState(187) var _m = p.Match(PlanParserNOT) @@ -4815,7 +4871,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } { - p.SetState(189) + p.SetState(190) p.Match(PlanParserIN) if p.HasError() { // Recognition error - abort rule @@ -4823,21 +4879,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(190) + p.SetState(191) p.expr(21) } case 6: localctx = NewRangeContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(191) + p.SetState(192) if !(p.Precpred(p.GetParserRuleContext(), 11)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 11)", "")) goto errorExit } { - p.SetState(192) + p.SetState(193) var _lt = p.GetTokenStream().LT(1) @@ -4855,10 +4911,10 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(193) + p.SetState(194) _la = p.GetTokenStream().LA(1) - if !((int64((_la-68)) & ^0x3f) == 0 && ((int64(1)<<(_la-68))&41) != 0) { + if !((int64((_la-68)) & ^0x3f) == 0 && ((int64(1)<<(_la-68))&89) != 0) { p.GetErrorHandler().RecoverInline(p) } else { p.GetErrorHandler().ReportMatch(p) @@ -4866,7 +4922,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(194) + p.SetState(195) var _lt = p.GetTokenStream().LT(1) @@ -4884,21 +4940,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(195) + p.SetState(196) p.expr(12) } case 7: localctx = NewReverseRangeContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(196) + p.SetState(197) if !(p.Precpred(p.GetParserRuleContext(), 10)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 10)", "")) goto errorExit } { - p.SetState(197) + p.SetState(198) var _lt = p.GetTokenStream().LT(1) @@ -4916,10 +4972,10 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(198) + p.SetState(199) _la = p.GetTokenStream().LA(1) - if !((int64((_la-68)) & ^0x3f) == 0 && ((int64(1)<<(_la-68))&41) != 0) { + if !((int64((_la-68)) & ^0x3f) == 0 && ((int64(1)<<(_la-68))&89) != 0) { p.GetErrorHandler().RecoverInline(p) } else { p.GetErrorHandler().ReportMatch(p) @@ -4927,7 +4983,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(199) + p.SetState(200) var _lt = p.GetTokenStream().LT(1) @@ -4945,21 +5001,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(200) + p.SetState(201) p.expr(11) } case 8: localctx = NewRelationalContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(201) + p.SetState(202) if !(p.Precpred(p.GetParserRuleContext(), 9)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 9)", "")) goto errorExit } { - p.SetState(202) + p.SetState(203) var _lt = p.GetTokenStream().LT(1) @@ -4977,21 +5033,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(203) + p.SetState(204) p.expr(10) } case 9: localctx = NewEqualityContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(204) + p.SetState(205) if !(p.Precpred(p.GetParserRuleContext(), 8)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 8)", "")) goto errorExit } { - p.SetState(205) + p.SetState(206) var _lt = p.GetTokenStream().LT(1) @@ -5009,21 +5065,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(206) + p.SetState(207) p.expr(9) } case 10: localctx = NewBitAndContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(207) + p.SetState(208) if !(p.Precpred(p.GetParserRuleContext(), 7)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 7)", "")) goto errorExit } { - p.SetState(208) + p.SetState(209) p.Match(PlanParserBAND) if p.HasError() { // Recognition error - abort rule @@ -5031,21 +5087,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(209) + p.SetState(210) p.expr(8) } case 11: localctx = NewBitXorContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(210) + p.SetState(211) if !(p.Precpred(p.GetParserRuleContext(), 6)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 6)", "")) goto errorExit } { - p.SetState(211) + p.SetState(212) p.Match(PlanParserBXOR) if p.HasError() { // Recognition error - abort rule @@ -5053,21 +5109,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(212) + p.SetState(213) p.expr(7) } case 12: localctx = NewBitOrContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(213) + p.SetState(214) if !(p.Precpred(p.GetParserRuleContext(), 5)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 5)", "")) goto errorExit } { - p.SetState(214) + p.SetState(215) p.Match(PlanParserBOR) if p.HasError() { // Recognition error - abort rule @@ -5075,21 +5131,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(215) + p.SetState(216) p.expr(6) } case 13: localctx = NewLogicalAndContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(216) + p.SetState(217) if !(p.Precpred(p.GetParserRuleContext(), 4)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 4)", "")) goto errorExit } { - p.SetState(217) + p.SetState(218) p.Match(PlanParserAND) if p.HasError() { // Recognition error - abort rule @@ -5097,21 +5153,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(218) + p.SetState(219) p.expr(5) } case 14: localctx = NewLogicalOrContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(219) + p.SetState(220) if !(p.Precpred(p.GetParserRuleContext(), 3)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 3)", "")) goto errorExit } { - p.SetState(220) + p.SetState(221) p.Match(PlanParserOR) if p.HasError() { // Recognition error - abort rule @@ -5119,21 +5175,21 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(221) + p.SetState(222) p.expr(4) } case 15: localctx = NewLikeContext(p, NewExprContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr) - p.SetState(222) + p.SetState(223) if !(p.Precpred(p.GetParserRuleContext(), 32)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 32)", "")) goto errorExit } { - p.SetState(223) + p.SetState(224) p.Match(PlanParserLIKE) if p.HasError() { // Recognition error - abort rule @@ -5141,7 +5197,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } { - p.SetState(224) + p.SetState(225) p.Match(PlanParserStringLiteral) if p.HasError() { // Recognition error - abort rule @@ -5154,7 +5210,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) { } } - p.SetState(229) + p.SetState(230) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5261,7 +5317,7 @@ func (p *PlanParser) TextMatchOption() (localctx ITextMatchOptionContext) { p.EnterRule(localctx, 2, PlanParserRULE_textMatchOption) p.EnterOuterAlt(localctx, 1) { - p.SetState(230) + p.SetState(231) p.Match(PlanParserMINIMUM_SHOULD_MATCH) if p.HasError() { // Recognition error - abort rule @@ -5269,7 +5325,7 @@ func (p *PlanParser) TextMatchOption() (localctx ITextMatchOptionContext) { } } { - p.SetState(231) + p.SetState(232) p.Match(PlanParserASSIGN) if p.HasError() { // Recognition error - abort rule @@ -5277,7 +5333,7 @@ func (p *PlanParser) TextMatchOption() (localctx ITextMatchOptionContext) { } } { - p.SetState(232) + p.SetState(233) p.Match(PlanParserIntegerConstant) if p.HasError() { // Recognition error - abort rule diff --git a/internal/parser/planparserv2/generated/plan_visitor.go b/internal/parser/planparserv2/generated/plan_visitor.go index 0508e91201..c8f509ecf3 100644 --- a/internal/parser/planparserv2/generated/plan_visitor.go +++ b/internal/parser/planparserv2/generated/plan_visitor.go @@ -139,6 +139,9 @@ type PlanVisitor interface { // Visit a parse tree produced by PlanParser#BitAnd. VisitBitAnd(ctx *BitAndContext) interface{} + // Visit a parse tree produced by PlanParser#StructIndexField. + VisitStructIndexField(ctx *StructIndexFieldContext) interface{} + // Visit a parse tree produced by PlanParser#IsNull. VisitIsNull(ctx *IsNullContext) interface{} diff --git a/internal/parser/planparserv2/parser_visitor.go b/internal/parser/planparserv2/parser_visitor.go index f8b7bfdf51..a175f59da7 100644 --- a/internal/parser/planparserv2/parser_visitor.go +++ b/internal/parser/planparserv2/parser_visitor.go @@ -665,10 +665,6 @@ func isElementFilterExpr(expr *ExprWithType) bool { return expr.expr.GetElementFilterExpr() != nil } -func isMatchExpr(expr *ExprWithType) bool { - return expr.expr.GetMatchExpr() != nil -} - const EPSILON = 1e-10 func (v *ParserVisitor) VisitRandomSample(ctx *parser.RandomSampleContext) interface{} { @@ -849,7 +845,32 @@ func (v *ParserVisitor) getColumnInfoFromStructSubField(tokenText string) (*plan }, nil } -func (v *ParserVisitor) getChildColumnInfo(identifier, child, structSubField antlr.TerminalNode) (*planpb.ColumnInfo, error) { +func (v *ParserVisitor) getColumnInfoFromStructIndexField(identifier string) (*planpb.ColumnInfo, error) { + // Parse "struct_arr[0][sub_field]" -> fieldName="struct_arr", index="0", subField="sub_field" + parts := strings.SplitN(identifier, "[", 3) + if len(parts) != 3 { + return nil, merr.WrapErrParameterInvalidMsg("invalid struct index field identifier: %s", identifier) + } + + fieldName := parts[0] + index := strings.TrimSuffix(parts[1], "]") + subField := strings.TrimSuffix(parts[2], "]") + + structFieldName := fieldName + "[" + subField + "]" + field, err := v.schema.GetFieldFromName(structFieldName) + if err != nil { + return nil, merr.WrapErrParameterInvalidMsg("struct field not found: %s, error: %s", structFieldName, err) + } + + return &planpb.ColumnInfo{ + FieldId: field.FieldID, + DataType: field.DataType, + NestedPath: []string{index}, + ElementType: field.GetElementType(), + }, nil +} + +func (v *ParserVisitor) getChildColumnInfo(identifier, child, structSubField, structIndexField antlr.TerminalNode) (*planpb.ColumnInfo, error) { if identifier != nil { childExpr, err := v.translateIdentifier(identifier.GetText()) if err != nil { @@ -862,6 +883,10 @@ func (v *ParserVisitor) getChildColumnInfo(identifier, child, structSubField ant return v.getColumnInfoFromStructSubField(structSubField.GetText()) } + if structIndexField != nil { + return v.getColumnInfoFromStructIndexField(structIndexField.GetText()) + } + return v.getColumnInfoFromJSONIdentifier(child.GetText()) } @@ -892,7 +917,12 @@ func (v *ParserVisitor) VisitCall(ctx *parser.CallContext) interface{} { // VisitRange translates expr to range plan. func (v *ParserVisitor) VisitRange(ctx *parser.RangeContext) interface{} { - columnInfo, err := v.getChildColumnInfo(ctx.Identifier(), ctx.JSONIdentifier(), ctx.StructSubFieldIdentifier()) + columnInfo, err := v.getChildColumnInfo( + ctx.Identifier(), + ctx.JSONIdentifier(), + ctx.StructSubFieldIdentifier(), + ctx.StructIndexFieldIdentifier(), + ) if err != nil { return err } @@ -973,7 +1003,12 @@ func (v *ParserVisitor) VisitRange(ctx *parser.RangeContext) interface{} { // VisitReverseRange parses the expression like "1 > a > 0". func (v *ParserVisitor) VisitReverseRange(ctx *parser.ReverseRangeContext) interface{} { - columnInfo, err := v.getChildColumnInfo(ctx.Identifier(), ctx.JSONIdentifier(), ctx.StructSubFieldIdentifier()) + columnInfo, err := v.getChildColumnInfo( + ctx.Identifier(), + ctx.JSONIdentifier(), + ctx.StructSubFieldIdentifier(), + ctx.StructIndexFieldIdentifier(), + ) if err != nil { return err } @@ -1431,6 +1466,28 @@ func (v *ParserVisitor) VisitStructField(ctx *parser.StructFieldContext) interfa } } +// VisitStructIndexField handles struct_arr[index][sub_field] syntax for accessing +// a specific element's sub-field in a struct array. +func (v *ParserVisitor) VisitStructIndexField(ctx *parser.StructIndexFieldContext) interface{} { + identifier := ctx.StructIndexFieldIdentifier().GetText() + columnInfo, err := v.getColumnInfoFromStructIndexField(identifier) + if err != nil { + return err + } + + return &ExprWithType{ + expr: &planpb.Expr{ + Expr: &planpb.Expr_ColumnExpr{ + ColumnExpr: &planpb.ColumnExpr{ + Info: columnInfo, + }, + }, + }, + dataType: columnInfo.GetDataType(), + nodeDependent: true, + } +} + func (v *ParserVisitor) VisitExists(ctx *parser.ExistsContext) interface{} { child := ctx.Expr().Accept(v) if err := getError(child); err != nil { @@ -1538,7 +1595,7 @@ func (v *ParserVisitor) VisitEmptyArray(ctx *parser.EmptyArrayContext) interface } func (v *ParserVisitor) VisitIsNotNull(ctx *parser.IsNotNullContext) interface{} { - column, err := v.getChildColumnInfo(ctx.Identifier(), ctx.JSONIdentifier(), nil) + column, err := v.getChildColumnInfo(ctx.Identifier(), ctx.JSONIdentifier(), nil, nil) if err != nil { return err } @@ -1582,7 +1639,7 @@ func (v *ParserVisitor) VisitIsNotNull(ctx *parser.IsNotNullContext) interface{} } func (v *ParserVisitor) VisitIsNull(ctx *parser.IsNullContext) interface{} { - column, err := v.getChildColumnInfo(ctx.Identifier(), ctx.JSONIdentifier(), nil) + column, err := v.getChildColumnInfo(ctx.Identifier(), ctx.JSONIdentifier(), nil, nil) if err != nil { return err } @@ -1804,7 +1861,7 @@ func (v *ParserVisitor) VisitArrayLength(ctx *parser.ArrayLengthContext) interfa ElementType: field.GetElementType(), } } else { - columnInfo, err = v.getChildColumnInfo(ctx.Identifier(), ctx.JSONIdentifier(), nil) + columnInfo, err = v.getChildColumnInfo(ctx.Identifier(), ctx.JSONIdentifier(), nil, nil) if err != nil { return err } diff --git a/internal/parser/planparserv2/plan_parser_v2_test.go b/internal/parser/planparserv2/plan_parser_v2_test.go index eacf6d6432..6cce98a4c5 100644 --- a/internal/parser/planparserv2/plan_parser_v2_test.go +++ b/internal/parser/planparserv2/plan_parser_v2_test.go @@ -2740,6 +2740,194 @@ func TestExpr_ArrayContains(t *testing.T) { } } +func TestExpr_StructIndexField(t *testing.T) { + schema := newTestSchema(true) + helper, err := typeutil.CreateSchemaHelper(schema) + assert.NoError(t, err) + + // Valid struct_arr[index][sub_field] expressions + validExprs := []string{ + // comparison + `struct_array[0][sub_int] > 50`, + `struct_array[0][sub_int] == 100`, + `struct_array[1][sub_str] == "apple"`, + `struct_array[0][sub_str] != "banana"`, + // range via && + `struct_array[0][sub_int] >= 30 && struct_array[0][sub_int] <= 70`, + // IN / NOT IN + `struct_array[0][sub_int] in [10, 20, 30, 40, 50]`, + `struct_array[0][sub_int] not in [0, 1, 2, 3]`, + `struct_array[0][sub_str] in ["apple", "banana"]`, + `struct_array[0][sub_str] not in ["apple", "banana"]`, + } + + for _, expr := range validExprs { + assertValidExpr(t, helper, expr) + } + + // Invalid expressions + invalidExprs := []string{ + // non-existent parent or sub-field + `non_existent[0][sub_int] > 50`, + `struct_array[0][non_existent] > 50`, + // unsupported form: sub-field first then index + `struct_array[sub_int][0] > 50`, + `struct_array[sub_str][0] == "apple"`, + `struct_array[sub_int][0] in [10, 20, 30]`, + } + + for _, expr := range invalidExprs { + assertInvalidExpr(t, helper, expr) + } +} + +func TestExpr_StructIndexField_PlanShape(t *testing.T) { + schema := newTestSchemaHelper(t) + + plan, err := CreateSearchPlan(schema, `struct_array[0][sub_int] == 100`, "FloatVectorField", &planpb.QueryInfo{ + Topk: 0, + MetricType: "", + SearchParams: "", + RoundDecimal: 0, + }, nil, nil) + require.NoError(t, err) + + predicates := plan.GetVectorAnns().GetPredicates() + require.NotNil(t, predicates) + + ure := predicates.GetUnaryRangeExpr() + require.NotNil(t, ure) + assert.Equal(t, planpb.OpType_Equal, ure.GetOp()) + assert.Equal(t, int64(100), ure.GetValue().GetInt64Val()) + + columnInfo := ure.GetColumnInfo() + require.NotNil(t, columnInfo) + assert.Equal(t, int64(134), columnInfo.GetFieldId()) + assert.Equal(t, schemapb.DataType_Array, columnInfo.GetDataType()) + assert.Equal(t, schemapb.DataType_Int32, columnInfo.GetElementType()) + assert.Equal(t, []string{"0"}, columnInfo.GetNestedPath()) + + ret := handleExpr(schema, `struct_array[1][sub_str] in ["apple", "banana"]`) + ewt, ok := ret.(*ExprWithType) + require.True(t, ok, "handleExpr should return *ExprWithType for term expression") + + te := ewt.expr.GetTermExpr() + require.NotNil(t, te) + assert.Len(t, te.GetValues(), 2) + assert.Equal(t, "apple", te.GetValues()[0].GetStringVal()) + assert.Equal(t, "banana", te.GetValues()[1].GetStringVal()) + + columnInfo = te.GetColumnInfo() + require.NotNil(t, columnInfo) + assert.Equal(t, int64(133), columnInfo.GetFieldId()) + assert.Equal(t, schemapb.DataType_Array, columnInfo.GetDataType()) + assert.Equal(t, schemapb.DataType_VarChar, columnInfo.GetElementType()) + assert.Equal(t, []string{"1"}, columnInfo.GetNestedPath()) +} + +func TestExpr_StructFieldArrayLength(t *testing.T) { + schema := newTestSchemaHelper(t) + + ret := handleExpr(schema, `array_length(struct_array[sub_int])`) + ewt, ok := ret.(*ExprWithType) + require.True(t, ok, "handleExpr should return *ExprWithType") + assert.Equal(t, schemapb.DataType_Int64, ewt.dataType) + + bae := ewt.expr.GetBinaryArithExpr() + require.NotNil(t, bae) + assert.Equal(t, planpb.ArithOpType_ArrayLength, bae.GetOp()) + require.Nil(t, bae.GetRight()) + + columnInfo := bae.GetLeft().GetColumnExpr().GetInfo() + require.NotNil(t, columnInfo) + assert.Equal(t, int64(134), columnInfo.GetFieldId()) + assert.Equal(t, schemapb.DataType_Array, columnInfo.GetDataType()) + assert.Equal(t, schemapb.DataType_Int32, columnInfo.GetElementType()) + assert.Empty(t, columnInfo.GetNestedPath()) + + validExprs := []string{ + `array_length(struct_array[sub_int]) == 10`, + `array_length(struct_array[sub_str]) > 0`, + } + for _, expr := range validExprs { + _, err := CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{ + Topk: 0, + MetricType: "", + SearchParams: "", + RoundDecimal: 0, + }, nil, nil) + assert.NoError(t, err, expr) + } +} + +func TestExpr_StructIndexField_RangeForms(t *testing.T) { + schema := newTestSchemaHelper(t) + + testCases := []struct { + expr string + lower int64 + upper int64 + lowerInclusive bool + upperInclusive bool + }{ + { + expr: `1 < struct_array[0][sub_int] < 3`, + lower: 1, + upper: 3, + lowerInclusive: false, + upperInclusive: false, + }, + { + expr: `0 <= struct_array[0][sub_int] <= 100`, + lower: 0, + upper: 100, + lowerInclusive: true, + upperInclusive: true, + }, + { + expr: `100 > struct_array[0][sub_int] > 0`, + lower: 0, + upper: 100, + lowerInclusive: false, + upperInclusive: false, + }, + { + expr: `100 >= struct_array[0][sub_int] >= 0`, + lower: 0, + upper: 100, + lowerInclusive: true, + upperInclusive: true, + }, + } + + for _, tc := range testCases { + plan, err := CreateSearchPlan(schema, tc.expr, "FloatVectorField", &planpb.QueryInfo{ + Topk: 0, + MetricType: "", + SearchParams: "", + RoundDecimal: 0, + }, nil, nil) + require.NoError(t, err, tc.expr) + + predicates := plan.GetVectorAnns().GetPredicates() + require.NotNil(t, predicates, tc.expr) + + bre := predicates.GetBinaryRangeExpr() + require.NotNil(t, bre, tc.expr) + assert.Equal(t, tc.lower, bre.GetLowerValue().GetInt64Val(), tc.expr) + assert.Equal(t, tc.upper, bre.GetUpperValue().GetInt64Val(), tc.expr) + assert.Equal(t, tc.lowerInclusive, bre.GetLowerInclusive(), tc.expr) + assert.Equal(t, tc.upperInclusive, bre.GetUpperInclusive(), tc.expr) + + columnInfo := bre.GetColumnInfo() + require.NotNil(t, columnInfo, tc.expr) + assert.Equal(t, int64(134), columnInfo.GetFieldId(), tc.expr) + assert.Equal(t, schemapb.DataType_Array, columnInfo.GetDataType(), tc.expr) + assert.Equal(t, schemapb.DataType_Int32, columnInfo.GetElementType(), tc.expr) + assert.Equal(t, []string{"0"}, columnInfo.GetNestedPath(), tc.expr) + } +} + // ============================================================================ // Timestamptz Expression Tests // These tests cover VisitTimestamptzCompareForward and VisitTimestamptzCompareReverse