From 272a33ca25f7cafa1d759f0020ade873f46d3ffa Mon Sep 17 00:00:00 2001 From: "b.bianchi" Date: Thu, 16 May 2024 16:30:44 +0200 Subject: [PATCH] feat: allow '/' and '.' in type and relation names --- OpenFGALexer.g4 | 1 + OpenFGAParser.g4 | 14 +- pkg/go/gen/OpenFGALexer.interp | 5 +- pkg/go/gen/OpenFGALexer.tokens | 7 +- pkg/go/gen/OpenFGAParser.interp | 5 +- pkg/go/gen/OpenFGAParser.tokens | 7 +- pkg/go/gen/openfga_lexer.go | 645 +++++----- pkg/go/gen/openfga_parser.go | 1114 ++++++++++------- pkg/go/gen/openfgaparser_base_listener.go | 6 + pkg/go/gen/openfgaparser_listener.go | 6 + .../language/antlr/OpenFGALexer.interp | 5 +- .../openfga/language/antlr/OpenFGALexer.java | 866 ++++++------- .../language/antlr/OpenFGALexer.tokens | 7 +- .../language/antlr/OpenFGAParser.interp | 5 +- .../openfga/language/antlr/OpenFGAParser.java | 1110 ++++++++-------- .../language/antlr/OpenFGAParser.tokens | 7 +- .../antlr/OpenFGAParserBaseListener.java | 12 + .../language/antlr/OpenFGAParserListener.java | 10 + pkg/js/gen/OpenFGALexer.interp | 5 +- pkg/js/gen/OpenFGALexer.tokens | 7 +- pkg/js/gen/OpenFGALexer.ts | 472 +++---- pkg/js/gen/OpenFGAParser.interp | 5 +- pkg/js/gen/OpenFGAParser.tokens | 7 +- pkg/js/gen/OpenFGAParser.ts | 892 +++++++------ pkg/js/gen/OpenFGAParserListener.ts | 11 + tests/data/dsl-syntax-validation-cases.yaml | 64 +- 26 files changed, 2865 insertions(+), 2430 deletions(-) diff --git a/OpenFGALexer.g4 b/OpenFGALexer.g4 index 9ce9b704..be992bd3 100644 --- a/OpenFGALexer.g4 +++ b/OpenFGALexer.g4 @@ -133,6 +133,7 @@ IDENTIFIER: (LETTER | '_') (LETTER | DIGIT | '_' | MINUS)*; // NOTE: MINUS is not allowed in CEL, but allowed in FGA, CEL will be revalidated after // END CEL GRAMMAR +EXTENDED_IDENTIFIER: (LETTER | '_')((SLASH | DOT | MINUS)?(LETTER | DIGIT | '_')+)*; NEWLINE: WHITESPACE? ('\r'? '\n' | '\r' | '\f') WHITESPACE? NEWLINE?; diff --git a/OpenFGAParser.g4 b/OpenFGAParser.g4 index 68497f44..3c8c3948 100644 --- a/OpenFGAParser.g4 +++ b/OpenFGAParser.g4 @@ -10,11 +10,11 @@ moduleHeader: (multiLineComment NEWLINE)? MODULE WHITESPACE moduleName=identifie // Type Definitions typeDefs: typeDef*; -typeDef: (NEWLINE multiLineComment)? NEWLINE (EXTEND WHITESPACE)? TYPE WHITESPACE typeName=identifier (NEWLINE RELATIONS relationDeclaration+)?; +typeDef: (NEWLINE multiLineComment)? NEWLINE (EXTEND WHITESPACE)? TYPE WHITESPACE typeName=extended_identifier (NEWLINE RELATIONS relationDeclaration+)?; // Relation definitions relationDeclaration: (NEWLINE multiLineComment)? NEWLINE DEFINE WHITESPACE relationName WHITESPACE? COLON WHITESPACE? (relationDef); -relationName: identifier; +relationName: extended_identifier; relationDef: (relationDefDirectAssignment | relationDefGrouping | relationRecurse) (relationDefPartials)?; relationDefNoDirect: (relationDefGrouping | relationRecurseNoDirect) (relationDefPartials)?; @@ -23,7 +23,7 @@ relationDefPartials: (WHITESPACE OR WHITESPACE (relationDefGrouping | relationRecurseNoDirect))+ | (WHITESPACE AND WHITESPACE (relationDefGrouping | relationRecurseNoDirect))+ | (WHITESPACE BUT_NOT WHITESPACE (relationDefGrouping | relationRecurseNoDirect)); - + relationDefGrouping: relationDefRewrite; relationRecurse: @@ -39,15 +39,15 @@ relationRecurseNoDirect: ) WHITESPACE* RPAREN; relationDefDirectAssignment: LBRACKET WHITESPACE? relationDefTypeRestriction WHITESPACE? (COMMA WHITESPACE? relationDefTypeRestriction WHITESPACE?)* RPRACKET; -relationDefRewrite: rewriteComputedusersetName=identifier (WHITESPACE FROM WHITESPACE rewriteTuplesetName=identifier)?; +relationDefRewrite: rewriteComputedusersetName=extended_identifier (WHITESPACE FROM WHITESPACE rewriteTuplesetName=extended_identifier)?; relationDefTypeRestriction: NEWLINE? ( relationDefTypeRestrictionBase | (relationDefTypeRestrictionBase WHITESPACE KEYWORD_WITH WHITESPACE conditionName) ) NEWLINE?; -relationDefTypeRestrictionBase: relationDefTypeRestrictionType=identifier +relationDefTypeRestrictionBase: relationDefTypeRestrictionType=extended_identifier ((COLON relationDefTypeRestrictionWildcard=STAR) - | (HASH relationDefTypeRestrictionRelation=identifier))?; + | (HASH relationDefTypeRestrictionRelation=extended_identifier))?; // Conditions conditions: condition*; @@ -66,6 +66,8 @@ multiLineComment: HASH (~NEWLINE)* (NEWLINE multiLineComment)?; identifier: MODEL | SCHEMA | TYPE | RELATION | IDENTIFIER | MODULE | EXTEND; +extended_identifier: identifier | EXTENDED_IDENTIFIER; + conditionExpression: (( IDENTIFIER | EQUALS | diff --git a/pkg/go/gen/OpenFGALexer.interp b/pkg/go/gen/OpenFGALexer.interp index 25eba7b0..79d5cbb7 100644 --- a/pkg/go/gen/OpenFGALexer.interp +++ b/pkg/go/gen/OpenFGALexer.interp @@ -56,6 +56,7 @@ null null null null +null token symbolic names: null @@ -112,6 +113,7 @@ NUM_INT NUM_UINT STRING BYTES +EXTENDED_IDENTIFIER NEWLINE CONDITION_PARAM_CONTAINER CONDITION_PARAM_TYPE @@ -180,6 +182,7 @@ NUM_UINT STRING BYTES IDENTIFIER +EXTENDED_IDENTIFIER NEWLINE CONDITION_DEF_END CONDITION_PARAM_CONTAINER @@ -201,4 +204,4 @@ DEFAULT_MODE CONDITION_DEF atn: -[4, 0, 56, 694, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 4, 10, 198, 8, 10, 11, 10, 12, 10, 199, 1, 10, 1, 10, 4, 10, 204, 8, 10, 11, 10, 12, 10, 205, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 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, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 340, 8, 47, 1, 47, 4, 47, 343, 8, 47, 11, 47, 12, 47, 344, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 355, 8, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 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, 388, 8, 54, 1, 55, 4, 55, 391, 8, 55, 11, 55, 12, 55, 392, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 399, 8, 56, 10, 56, 12, 56, 402, 9, 56, 1, 56, 1, 56, 1, 57, 4, 57, 407, 8, 57, 11, 57, 12, 57, 408, 1, 57, 1, 57, 4, 57, 413, 8, 57, 11, 57, 12, 57, 414, 1, 57, 3, 57, 418, 8, 57, 1, 57, 4, 57, 421, 8, 57, 11, 57, 12, 57, 422, 1, 57, 1, 57, 1, 57, 1, 57, 4, 57, 429, 8, 57, 11, 57, 12, 57, 430, 1, 57, 3, 57, 434, 8, 57, 3, 57, 436, 8, 57, 1, 58, 4, 58, 439, 8, 58, 11, 58, 12, 58, 440, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 447, 8, 58, 11, 58, 12, 58, 448, 3, 58, 451, 8, 58, 1, 59, 4, 59, 454, 8, 59, 11, 59, 12, 59, 455, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 4, 59, 464, 8, 59, 11, 59, 12, 59, 465, 1, 59, 1, 59, 3, 59, 470, 8, 59, 1, 60, 1, 60, 1, 60, 5, 60, 475, 8, 60, 10, 60, 12, 60, 478, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 484, 8, 60, 10, 60, 12, 60, 487, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 496, 8, 60, 10, 60, 12, 60, 499, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 510, 8, 60, 10, 60, 12, 60, 513, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 521, 8, 60, 10, 60, 12, 60, 524, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 531, 8, 60, 10, 60, 12, 60, 534, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 544, 8, 60, 10, 60, 12, 60, 547, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 559, 8, 60, 10, 60, 12, 60, 562, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 568, 8, 60, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 3, 62, 575, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 581, 8, 62, 10, 62, 12, 62, 584, 9, 62, 1, 63, 3, 63, 587, 8, 63, 1, 63, 3, 63, 590, 8, 63, 1, 63, 1, 63, 3, 63, 594, 8, 63, 1, 63, 3, 63, 597, 8, 63, 1, 63, 3, 63, 600, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 614, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 665, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 4, 497, 511, 545, 560, 0, 74, 2, 11, 4, 1, 6, 2, 8, 12, 10, 13, 12, 14, 14, 15, 16, 16, 18, 17, 20, 18, 22, 19, 24, 20, 26, 21, 28, 22, 30, 23, 32, 24, 34, 25, 36, 26, 38, 27, 40, 28, 42, 29, 44, 3, 46, 30, 48, 31, 50, 4, 52, 32, 54, 33, 56, 5, 58, 34, 60, 35, 62, 36, 64, 7, 66, 8, 68, 37, 70, 38, 72, 39, 74, 40, 76, 41, 78, 42, 80, 43, 82, 44, 84, 45, 86, 46, 88, 47, 90, 0, 92, 0, 94, 0, 96, 0, 98, 0, 100, 0, 102, 0, 104, 0, 106, 0, 108, 0, 110, 0, 112, 9, 114, 48, 116, 49, 118, 50, 120, 51, 122, 52, 124, 53, 126, 10, 128, 54, 130, 0, 132, 55, 134, 56, 136, 0, 138, 0, 140, 0, 142, 0, 144, 0, 146, 0, 148, 0, 2, 0, 1, 16, 2, 0, 65, 90, 97, 122, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 82, 82, 114, 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120, 120, 3, 0, 9, 9, 12, 12, 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 1, 0, 92, 92, 3, 0, 10, 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39, 39, 2, 0, 66, 66, 98, 98, 742, 0, 2, 1, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 1, 130, 1, 0, 0, 0, 1, 132, 1, 0, 0, 0, 1, 134, 1, 0, 0, 0, 1, 136, 1, 0, 0, 0, 1, 138, 1, 0, 0, 0, 1, 140, 1, 0, 0, 0, 1, 142, 1, 0, 0, 0, 1, 144, 1, 0, 0, 0, 1, 146, 1, 0, 0, 0, 1, 148, 1, 0, 0, 0, 2, 150, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 6, 154, 1, 0, 0, 0, 8, 156, 1, 0, 0, 0, 10, 160, 1, 0, 0, 0, 12, 163, 1, 0, 0, 0, 14, 171, 1, 0, 0, 0, 16, 176, 1, 0, 0, 0, 18, 183, 1, 0, 0, 0, 20, 189, 1, 0, 0, 0, 22, 197, 1, 0, 0, 0, 24, 207, 1, 0, 0, 0, 26, 214, 1, 0, 0, 0, 28, 219, 1, 0, 0, 0, 30, 231, 1, 0, 0, 0, 32, 241, 1, 0, 0, 0, 34, 250, 1, 0, 0, 0, 36, 257, 1, 0, 0, 0, 38, 262, 1, 0, 0, 0, 40, 265, 1, 0, 0, 0, 42, 268, 1, 0, 0, 0, 44, 271, 1, 0, 0, 0, 46, 273, 1, 0, 0, 0, 48, 276, 1, 0, 0, 0, 50, 279, 1, 0, 0, 0, 52, 281, 1, 0, 0, 0, 54, 284, 1, 0, 0, 0, 56, 287, 1, 0, 0, 0, 58, 289, 1, 0, 0, 0, 60, 291, 1, 0, 0, 0, 62, 293, 1, 0, 0, 0, 64, 295, 1, 0, 0, 0, 66, 297, 1, 0, 0, 0, 68, 299, 1, 0, 0, 0, 70, 301, 1, 0, 0, 0, 72, 303, 1, 0, 0, 0, 74, 305, 1, 0, 0, 0, 76, 307, 1, 0, 0, 0, 78, 309, 1, 0, 0, 0, 80, 311, 1, 0, 0, 0, 82, 313, 1, 0, 0, 0, 84, 315, 1, 0, 0, 0, 86, 320, 1, 0, 0, 0, 88, 326, 1, 0, 0, 0, 90, 331, 1, 0, 0, 0, 92, 333, 1, 0, 0, 0, 94, 335, 1, 0, 0, 0, 96, 337, 1, 0, 0, 0, 98, 346, 1, 0, 0, 0, 100, 348, 1, 0, 0, 0, 102, 354, 1, 0, 0, 0, 104, 356, 1, 0, 0, 0, 106, 359, 1, 0, 0, 0, 108, 364, 1, 0, 0, 0, 110, 387, 1, 0, 0, 0, 112, 390, 1, 0, 0, 0, 114, 394, 1, 0, 0, 0, 116, 435, 1, 0, 0, 0, 118, 450, 1, 0, 0, 0, 120, 469, 1, 0, 0, 0, 122, 567, 1, 0, 0, 0, 124, 569, 1, 0, 0, 0, 126, 574, 1, 0, 0, 0, 128, 586, 1, 0, 0, 0, 130, 601, 1, 0, 0, 0, 132, 613, 1, 0, 0, 0, 134, 664, 1, 0, 0, 0, 136, 666, 1, 0, 0, 0, 138, 670, 1, 0, 0, 0, 140, 674, 1, 0, 0, 0, 142, 678, 1, 0, 0, 0, 144, 682, 1, 0, 0, 0, 146, 686, 1, 0, 0, 0, 148, 690, 1, 0, 0, 0, 150, 151, 5, 35, 0, 0, 151, 3, 1, 0, 0, 0, 152, 153, 5, 58, 0, 0, 153, 5, 1, 0, 0, 0, 154, 155, 5, 44, 0, 0, 155, 7, 1, 0, 0, 0, 156, 157, 5, 97, 0, 0, 157, 158, 5, 110, 0, 0, 158, 159, 5, 100, 0, 0, 159, 9, 1, 0, 0, 0, 160, 161, 5, 111, 0, 0, 161, 162, 5, 114, 0, 0, 162, 11, 1, 0, 0, 0, 163, 164, 5, 98, 0, 0, 164, 165, 5, 117, 0, 0, 165, 166, 5, 116, 0, 0, 166, 167, 5, 32, 0, 0, 167, 168, 5, 110, 0, 0, 168, 169, 5, 111, 0, 0, 169, 170, 5, 116, 0, 0, 170, 13, 1, 0, 0, 0, 171, 172, 5, 102, 0, 0, 172, 173, 5, 114, 0, 0, 173, 174, 5, 111, 0, 0, 174, 175, 5, 109, 0, 0, 175, 15, 1, 0, 0, 0, 176, 177, 5, 109, 0, 0, 177, 178, 5, 111, 0, 0, 178, 179, 5, 100, 0, 0, 179, 180, 5, 117, 0, 0, 180, 181, 5, 108, 0, 0, 181, 182, 5, 101, 0, 0, 182, 17, 1, 0, 0, 0, 183, 184, 5, 109, 0, 0, 184, 185, 5, 111, 0, 0, 185, 186, 5, 100, 0, 0, 186, 187, 5, 101, 0, 0, 187, 188, 5, 108, 0, 0, 188, 19, 1, 0, 0, 0, 189, 190, 5, 115, 0, 0, 190, 191, 5, 99, 0, 0, 191, 192, 5, 104, 0, 0, 192, 193, 5, 101, 0, 0, 193, 194, 5, 109, 0, 0, 194, 195, 5, 97, 0, 0, 195, 21, 1, 0, 0, 0, 196, 198, 3, 94, 46, 0, 197, 196, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 203, 5, 46, 0, 0, 202, 204, 3, 94, 46, 0, 203, 202, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 203, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 23, 1, 0, 0, 0, 207, 208, 5, 101, 0, 0, 208, 209, 5, 120, 0, 0, 209, 210, 5, 116, 0, 0, 210, 211, 5, 101, 0, 0, 211, 212, 5, 110, 0, 0, 212, 213, 5, 100, 0, 0, 213, 25, 1, 0, 0, 0, 214, 215, 5, 116, 0, 0, 215, 216, 5, 121, 0, 0, 216, 217, 5, 112, 0, 0, 217, 218, 5, 101, 0, 0, 218, 27, 1, 0, 0, 0, 219, 220, 5, 99, 0, 0, 220, 221, 5, 111, 0, 0, 221, 222, 5, 110, 0, 0, 222, 223, 5, 100, 0, 0, 223, 224, 5, 105, 0, 0, 224, 225, 5, 116, 0, 0, 225, 226, 5, 105, 0, 0, 226, 227, 5, 111, 0, 0, 227, 228, 5, 110, 0, 0, 228, 229, 1, 0, 0, 0, 229, 230, 6, 13, 0, 0, 230, 29, 1, 0, 0, 0, 231, 232, 5, 114, 0, 0, 232, 233, 5, 101, 0, 0, 233, 234, 5, 108, 0, 0, 234, 235, 5, 97, 0, 0, 235, 236, 5, 116, 0, 0, 236, 237, 5, 105, 0, 0, 237, 238, 5, 111, 0, 0, 238, 239, 5, 110, 0, 0, 239, 240, 5, 115, 0, 0, 240, 31, 1, 0, 0, 0, 241, 242, 5, 114, 0, 0, 242, 243, 5, 101, 0, 0, 243, 244, 5, 108, 0, 0, 244, 245, 5, 97, 0, 0, 245, 246, 5, 116, 0, 0, 246, 247, 5, 105, 0, 0, 247, 248, 5, 111, 0, 0, 248, 249, 5, 110, 0, 0, 249, 33, 1, 0, 0, 0, 250, 251, 5, 100, 0, 0, 251, 252, 5, 101, 0, 0, 252, 253, 5, 102, 0, 0, 253, 254, 5, 105, 0, 0, 254, 255, 5, 110, 0, 0, 255, 256, 5, 101, 0, 0, 256, 35, 1, 0, 0, 0, 257, 258, 5, 119, 0, 0, 258, 259, 5, 105, 0, 0, 259, 260, 5, 116, 0, 0, 260, 261, 5, 104, 0, 0, 261, 37, 1, 0, 0, 0, 262, 263, 5, 61, 0, 0, 263, 264, 5, 61, 0, 0, 264, 39, 1, 0, 0, 0, 265, 266, 5, 33, 0, 0, 266, 267, 5, 61, 0, 0, 267, 41, 1, 0, 0, 0, 268, 269, 5, 105, 0, 0, 269, 270, 5, 110, 0, 0, 270, 43, 1, 0, 0, 0, 271, 272, 5, 60, 0, 0, 272, 45, 1, 0, 0, 0, 273, 274, 5, 60, 0, 0, 274, 275, 5, 61, 0, 0, 275, 47, 1, 0, 0, 0, 276, 277, 5, 62, 0, 0, 277, 278, 5, 61, 0, 0, 278, 49, 1, 0, 0, 0, 279, 280, 5, 62, 0, 0, 280, 51, 1, 0, 0, 0, 281, 282, 5, 38, 0, 0, 282, 283, 5, 38, 0, 0, 283, 53, 1, 0, 0, 0, 284, 285, 5, 124, 0, 0, 285, 286, 5, 124, 0, 0, 286, 55, 1, 0, 0, 0, 287, 288, 5, 91, 0, 0, 288, 57, 1, 0, 0, 0, 289, 290, 5, 93, 0, 0, 290, 59, 1, 0, 0, 0, 291, 292, 5, 123, 0, 0, 292, 61, 1, 0, 0, 0, 293, 294, 5, 125, 0, 0, 294, 63, 1, 0, 0, 0, 295, 296, 5, 40, 0, 0, 296, 65, 1, 0, 0, 0, 297, 298, 5, 41, 0, 0, 298, 67, 1, 0, 0, 0, 299, 300, 5, 46, 0, 0, 300, 69, 1, 0, 0, 0, 301, 302, 5, 45, 0, 0, 302, 71, 1, 0, 0, 0, 303, 304, 5, 33, 0, 0, 304, 73, 1, 0, 0, 0, 305, 306, 5, 63, 0, 0, 306, 75, 1, 0, 0, 0, 307, 308, 5, 43, 0, 0, 308, 77, 1, 0, 0, 0, 309, 310, 5, 42, 0, 0, 310, 79, 1, 0, 0, 0, 311, 312, 5, 47, 0, 0, 312, 81, 1, 0, 0, 0, 313, 314, 5, 37, 0, 0, 314, 83, 1, 0, 0, 0, 315, 316, 5, 116, 0, 0, 316, 317, 5, 114, 0, 0, 317, 318, 5, 117, 0, 0, 318, 319, 5, 101, 0, 0, 319, 85, 1, 0, 0, 0, 320, 321, 5, 102, 0, 0, 321, 322, 5, 97, 0, 0, 322, 323, 5, 108, 0, 0, 323, 324, 5, 115, 0, 0, 324, 325, 5, 101, 0, 0, 325, 87, 1, 0, 0, 0, 326, 327, 5, 110, 0, 0, 327, 328, 5, 117, 0, 0, 328, 329, 5, 108, 0, 0, 329, 330, 5, 108, 0, 0, 330, 89, 1, 0, 0, 0, 331, 332, 5, 92, 0, 0, 332, 91, 1, 0, 0, 0, 333, 334, 7, 0, 0, 0, 334, 93, 1, 0, 0, 0, 335, 336, 2, 48, 57, 0, 336, 95, 1, 0, 0, 0, 337, 339, 7, 1, 0, 0, 338, 340, 7, 2, 0, 0, 339, 338, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 1, 0, 0, 0, 341, 343, 3, 94, 46, 0, 342, 341, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 342, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 97, 1, 0, 0, 0, 346, 347, 7, 3, 0, 0, 347, 99, 1, 0, 0, 0, 348, 349, 7, 4, 0, 0, 349, 101, 1, 0, 0, 0, 350, 355, 3, 104, 51, 0, 351, 355, 3, 108, 53, 0, 352, 355, 3, 110, 54, 0, 353, 355, 3, 106, 52, 0, 354, 350, 1, 0, 0, 0, 354, 351, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 353, 1, 0, 0, 0, 355, 103, 1, 0, 0, 0, 356, 357, 3, 90, 44, 0, 357, 358, 7, 5, 0, 0, 358, 105, 1, 0, 0, 0, 359, 360, 3, 90, 44, 0, 360, 361, 2, 48, 51, 0, 361, 362, 2, 48, 55, 0, 362, 363, 2, 48, 55, 0, 363, 107, 1, 0, 0, 0, 364, 365, 3, 90, 44, 0, 365, 366, 7, 6, 0, 0, 366, 367, 3, 98, 48, 0, 367, 368, 3, 98, 48, 0, 368, 109, 1, 0, 0, 0, 369, 370, 3, 90, 44, 0, 370, 371, 5, 117, 0, 0, 371, 372, 3, 98, 48, 0, 372, 373, 3, 98, 48, 0, 373, 374, 3, 98, 48, 0, 374, 375, 3, 98, 48, 0, 375, 388, 1, 0, 0, 0, 376, 377, 3, 90, 44, 0, 377, 378, 5, 85, 0, 0, 378, 379, 3, 98, 48, 0, 379, 380, 3, 98, 48, 0, 380, 381, 3, 98, 48, 0, 381, 382, 3, 98, 48, 0, 382, 383, 3, 98, 48, 0, 383, 384, 3, 98, 48, 0, 384, 385, 3, 98, 48, 0, 385, 386, 3, 98, 48, 0, 386, 388, 1, 0, 0, 0, 387, 369, 1, 0, 0, 0, 387, 376, 1, 0, 0, 0, 388, 111, 1, 0, 0, 0, 389, 391, 7, 7, 0, 0, 390, 389, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 113, 1, 0, 0, 0, 394, 395, 5, 47, 0, 0, 395, 396, 5, 47, 0, 0, 396, 400, 1, 0, 0, 0, 397, 399, 8, 8, 0, 0, 398, 397, 1, 0, 0, 0, 399, 402, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 403, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 403, 404, 6, 56, 1, 0, 404, 115, 1, 0, 0, 0, 405, 407, 3, 94, 46, 0, 406, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 406, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 412, 5, 46, 0, 0, 411, 413, 3, 94, 46, 0, 412, 411, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 417, 1, 0, 0, 0, 416, 418, 3, 96, 47, 0, 417, 416, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 436, 1, 0, 0, 0, 419, 421, 3, 94, 46, 0, 420, 419, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 425, 3, 96, 47, 0, 425, 436, 1, 0, 0, 0, 426, 428, 5, 46, 0, 0, 427, 429, 3, 94, 46, 0, 428, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 433, 1, 0, 0, 0, 432, 434, 3, 96, 47, 0, 433, 432, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 406, 1, 0, 0, 0, 435, 420, 1, 0, 0, 0, 435, 426, 1, 0, 0, 0, 436, 117, 1, 0, 0, 0, 437, 439, 3, 94, 46, 0, 438, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 438, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 451, 1, 0, 0, 0, 442, 443, 5, 48, 0, 0, 443, 444, 5, 120, 0, 0, 444, 446, 1, 0, 0, 0, 445, 447, 3, 98, 48, 0, 446, 445, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 446, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 451, 1, 0, 0, 0, 450, 438, 1, 0, 0, 0, 450, 442, 1, 0, 0, 0, 451, 119, 1, 0, 0, 0, 452, 454, 3, 94, 46, 0, 453, 452, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, 455, 456, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 458, 7, 9, 0, 0, 458, 470, 1, 0, 0, 0, 459, 460, 5, 48, 0, 0, 460, 461, 5, 120, 0, 0, 461, 463, 1, 0, 0, 0, 462, 464, 3, 98, 48, 0, 463, 462, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 463, 1, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 468, 7, 9, 0, 0, 468, 470, 1, 0, 0, 0, 469, 453, 1, 0, 0, 0, 469, 459, 1, 0, 0, 0, 470, 121, 1, 0, 0, 0, 471, 476, 5, 34, 0, 0, 472, 475, 3, 102, 50, 0, 473, 475, 8, 10, 0, 0, 474, 472, 1, 0, 0, 0, 474, 473, 1, 0, 0, 0, 475, 478, 1, 0, 0, 0, 476, 474, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 479, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 479, 568, 5, 34, 0, 0, 480, 485, 5, 39, 0, 0, 481, 484, 3, 102, 50, 0, 482, 484, 8, 11, 0, 0, 483, 481, 1, 0, 0, 0, 483, 482, 1, 0, 0, 0, 484, 487, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 488, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 488, 568, 5, 39, 0, 0, 489, 490, 5, 34, 0, 0, 490, 491, 5, 34, 0, 0, 491, 492, 5, 34, 0, 0, 492, 497, 1, 0, 0, 0, 493, 496, 3, 102, 50, 0, 494, 496, 8, 12, 0, 0, 495, 493, 1, 0, 0, 0, 495, 494, 1, 0, 0, 0, 496, 499, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 498, 500, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 501, 5, 34, 0, 0, 501, 502, 5, 34, 0, 0, 502, 568, 5, 34, 0, 0, 503, 504, 5, 39, 0, 0, 504, 505, 5, 39, 0, 0, 505, 506, 5, 39, 0, 0, 506, 511, 1, 0, 0, 0, 507, 510, 3, 102, 50, 0, 508, 510, 8, 12, 0, 0, 509, 507, 1, 0, 0, 0, 509, 508, 1, 0, 0, 0, 510, 513, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 512, 514, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 514, 515, 5, 39, 0, 0, 515, 516, 5, 39, 0, 0, 516, 568, 5, 39, 0, 0, 517, 518, 3, 100, 49, 0, 518, 522, 5, 34, 0, 0, 519, 521, 8, 13, 0, 0, 520, 519, 1, 0, 0, 0, 521, 524, 1, 0, 0, 0, 522, 520, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 525, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 525, 526, 5, 34, 0, 0, 526, 568, 1, 0, 0, 0, 527, 528, 3, 100, 49, 0, 528, 532, 5, 39, 0, 0, 529, 531, 8, 14, 0, 0, 530, 529, 1, 0, 0, 0, 531, 534, 1, 0, 0, 0, 532, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 535, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 535, 536, 5, 39, 0, 0, 536, 568, 1, 0, 0, 0, 537, 538, 3, 100, 49, 0, 538, 539, 5, 34, 0, 0, 539, 540, 5, 34, 0, 0, 540, 541, 5, 34, 0, 0, 541, 545, 1, 0, 0, 0, 542, 544, 9, 0, 0, 0, 543, 542, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 546, 548, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 549, 5, 34, 0, 0, 549, 550, 5, 34, 0, 0, 550, 551, 5, 34, 0, 0, 551, 568, 1, 0, 0, 0, 552, 553, 3, 100, 49, 0, 553, 554, 5, 39, 0, 0, 554, 555, 5, 39, 0, 0, 555, 556, 5, 39, 0, 0, 556, 560, 1, 0, 0, 0, 557, 559, 9, 0, 0, 0, 558, 557, 1, 0, 0, 0, 559, 562, 1, 0, 0, 0, 560, 561, 1, 0, 0, 0, 560, 558, 1, 0, 0, 0, 561, 563, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 563, 564, 5, 39, 0, 0, 564, 565, 5, 39, 0, 0, 565, 566, 5, 39, 0, 0, 566, 568, 1, 0, 0, 0, 567, 471, 1, 0, 0, 0, 567, 480, 1, 0, 0, 0, 567, 489, 1, 0, 0, 0, 567, 503, 1, 0, 0, 0, 567, 517, 1, 0, 0, 0, 567, 527, 1, 0, 0, 0, 567, 537, 1, 0, 0, 0, 567, 552, 1, 0, 0, 0, 568, 123, 1, 0, 0, 0, 569, 570, 7, 15, 0, 0, 570, 571, 3, 122, 60, 0, 571, 125, 1, 0, 0, 0, 572, 575, 3, 92, 45, 0, 573, 575, 5, 95, 0, 0, 574, 572, 1, 0, 0, 0, 574, 573, 1, 0, 0, 0, 575, 582, 1, 0, 0, 0, 576, 581, 3, 92, 45, 0, 577, 581, 3, 94, 46, 0, 578, 581, 5, 95, 0, 0, 579, 581, 3, 70, 34, 0, 580, 576, 1, 0, 0, 0, 580, 577, 1, 0, 0, 0, 580, 578, 1, 0, 0, 0, 580, 579, 1, 0, 0, 0, 581, 584, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 582, 583, 1, 0, 0, 0, 583, 127, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 585, 587, 3, 112, 55, 0, 586, 585, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 593, 1, 0, 0, 0, 588, 590, 5, 13, 0, 0, 589, 588, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 594, 5, 10, 0, 0, 592, 594, 2, 12, 13, 0, 593, 589, 1, 0, 0, 0, 593, 592, 1, 0, 0, 0, 594, 596, 1, 0, 0, 0, 595, 597, 3, 112, 55, 0, 596, 595, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 599, 1, 0, 0, 0, 598, 600, 3, 128, 63, 0, 599, 598, 1, 0, 0, 0, 599, 600, 1, 0, 0, 0, 600, 129, 1, 0, 0, 0, 601, 602, 3, 66, 32, 0, 602, 603, 1, 0, 0, 0, 603, 604, 6, 64, 2, 0, 604, 605, 6, 64, 3, 0, 605, 131, 1, 0, 0, 0, 606, 607, 5, 109, 0, 0, 607, 608, 5, 97, 0, 0, 608, 614, 5, 112, 0, 0, 609, 610, 5, 108, 0, 0, 610, 611, 5, 105, 0, 0, 611, 612, 5, 115, 0, 0, 612, 614, 5, 116, 0, 0, 613, 606, 1, 0, 0, 0, 613, 609, 1, 0, 0, 0, 614, 133, 1, 0, 0, 0, 615, 616, 5, 98, 0, 0, 616, 617, 5, 111, 0, 0, 617, 618, 5, 111, 0, 0, 618, 665, 5, 108, 0, 0, 619, 620, 5, 115, 0, 0, 620, 621, 5, 116, 0, 0, 621, 622, 5, 114, 0, 0, 622, 623, 5, 105, 0, 0, 623, 624, 5, 110, 0, 0, 624, 665, 5, 103, 0, 0, 625, 626, 5, 105, 0, 0, 626, 627, 5, 110, 0, 0, 627, 665, 5, 116, 0, 0, 628, 629, 5, 117, 0, 0, 629, 630, 5, 105, 0, 0, 630, 631, 5, 110, 0, 0, 631, 665, 5, 116, 0, 0, 632, 633, 5, 100, 0, 0, 633, 634, 5, 111, 0, 0, 634, 635, 5, 117, 0, 0, 635, 636, 5, 98, 0, 0, 636, 637, 5, 108, 0, 0, 637, 665, 5, 101, 0, 0, 638, 639, 5, 100, 0, 0, 639, 640, 5, 117, 0, 0, 640, 641, 5, 114, 0, 0, 641, 642, 5, 97, 0, 0, 642, 643, 5, 116, 0, 0, 643, 644, 5, 105, 0, 0, 644, 645, 5, 111, 0, 0, 645, 665, 5, 110, 0, 0, 646, 647, 5, 116, 0, 0, 647, 648, 5, 105, 0, 0, 648, 649, 5, 109, 0, 0, 649, 650, 5, 101, 0, 0, 650, 651, 5, 115, 0, 0, 651, 652, 5, 116, 0, 0, 652, 653, 5, 97, 0, 0, 653, 654, 5, 109, 0, 0, 654, 665, 5, 112, 0, 0, 655, 656, 5, 105, 0, 0, 656, 657, 5, 112, 0, 0, 657, 658, 5, 97, 0, 0, 658, 659, 5, 100, 0, 0, 659, 660, 5, 100, 0, 0, 660, 661, 5, 114, 0, 0, 661, 662, 5, 101, 0, 0, 662, 663, 5, 115, 0, 0, 663, 665, 5, 115, 0, 0, 664, 615, 1, 0, 0, 0, 664, 619, 1, 0, 0, 0, 664, 625, 1, 0, 0, 0, 664, 628, 1, 0, 0, 0, 664, 632, 1, 0, 0, 0, 664, 638, 1, 0, 0, 0, 664, 646, 1, 0, 0, 0, 664, 655, 1, 0, 0, 0, 665, 135, 1, 0, 0, 0, 666, 667, 3, 44, 21, 0, 667, 668, 1, 0, 0, 0, 668, 669, 6, 67, 4, 0, 669, 137, 1, 0, 0, 0, 670, 671, 3, 50, 24, 0, 671, 672, 1, 0, 0, 0, 672, 673, 6, 68, 5, 0, 673, 139, 1, 0, 0, 0, 674, 675, 3, 64, 31, 0, 675, 676, 1, 0, 0, 0, 676, 677, 6, 69, 6, 0, 677, 141, 1, 0, 0, 0, 678, 679, 3, 4, 1, 0, 679, 680, 1, 0, 0, 0, 680, 681, 6, 70, 7, 0, 681, 143, 1, 0, 0, 0, 682, 683, 3, 6, 2, 0, 683, 684, 1, 0, 0, 0, 684, 685, 6, 71, 8, 0, 685, 145, 1, 0, 0, 0, 686, 687, 3, 112, 55, 0, 687, 688, 1, 0, 0, 0, 688, 689, 6, 72, 9, 0, 689, 147, 1, 0, 0, 0, 690, 691, 3, 126, 62, 0, 691, 692, 1, 0, 0, 0, 692, 693, 6, 73, 10, 0, 693, 149, 1, 0, 0, 0, 46, 0, 1, 199, 205, 339, 344, 354, 387, 392, 400, 408, 414, 417, 422, 430, 433, 435, 440, 448, 450, 455, 465, 469, 474, 476, 483, 485, 495, 497, 509, 511, 522, 532, 545, 560, 567, 574, 580, 582, 586, 589, 593, 596, 599, 613, 664, 11, 5, 1, 0, 0, 1, 0, 7, 8, 0, 4, 0, 0, 7, 3, 0, 7, 4, 0, 7, 7, 0, 7, 1, 0, 7, 2, 0, 7, 9, 0, 7, 10, 0] \ No newline at end of file +[4, 0, 57, 717, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 4, 10, 200, 8, 10, 11, 10, 12, 10, 201, 1, 10, 1, 10, 4, 10, 206, 8, 10, 11, 10, 12, 10, 207, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 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, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 342, 8, 47, 1, 47, 4, 47, 345, 8, 47, 11, 47, 12, 47, 346, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 357, 8, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 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, 390, 8, 54, 1, 55, 4, 55, 393, 8, 55, 11, 55, 12, 55, 394, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 401, 8, 56, 10, 56, 12, 56, 404, 9, 56, 1, 56, 1, 56, 1, 57, 4, 57, 409, 8, 57, 11, 57, 12, 57, 410, 1, 57, 1, 57, 4, 57, 415, 8, 57, 11, 57, 12, 57, 416, 1, 57, 3, 57, 420, 8, 57, 1, 57, 4, 57, 423, 8, 57, 11, 57, 12, 57, 424, 1, 57, 1, 57, 1, 57, 1, 57, 4, 57, 431, 8, 57, 11, 57, 12, 57, 432, 1, 57, 3, 57, 436, 8, 57, 3, 57, 438, 8, 57, 1, 58, 4, 58, 441, 8, 58, 11, 58, 12, 58, 442, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 449, 8, 58, 11, 58, 12, 58, 450, 3, 58, 453, 8, 58, 1, 59, 4, 59, 456, 8, 59, 11, 59, 12, 59, 457, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 4, 59, 466, 8, 59, 11, 59, 12, 59, 467, 1, 59, 1, 59, 3, 59, 472, 8, 59, 1, 60, 1, 60, 1, 60, 5, 60, 477, 8, 60, 10, 60, 12, 60, 480, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 486, 8, 60, 10, 60, 12, 60, 489, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 498, 8, 60, 10, 60, 12, 60, 501, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 512, 8, 60, 10, 60, 12, 60, 515, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 523, 8, 60, 10, 60, 12, 60, 526, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 533, 8, 60, 10, 60, 12, 60, 536, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 546, 8, 60, 10, 60, 12, 60, 549, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 561, 8, 60, 10, 60, 12, 60, 564, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 570, 8, 60, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 3, 62, 577, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 583, 8, 62, 10, 62, 12, 62, 586, 9, 62, 1, 63, 1, 63, 3, 63, 590, 8, 63, 1, 63, 1, 63, 1, 63, 3, 63, 595, 8, 63, 1, 63, 1, 63, 1, 63, 4, 63, 600, 8, 63, 11, 63, 12, 63, 601, 5, 63, 604, 8, 63, 10, 63, 12, 63, 607, 9, 63, 1, 64, 3, 64, 610, 8, 64, 1, 64, 3, 64, 613, 8, 64, 1, 64, 1, 64, 3, 64, 617, 8, 64, 1, 64, 3, 64, 620, 8, 64, 1, 64, 3, 64, 623, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 637, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 688, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 4, 499, 513, 547, 562, 0, 75, 2, 11, 4, 1, 6, 2, 8, 12, 10, 13, 12, 14, 14, 15, 16, 16, 18, 17, 20, 18, 22, 19, 24, 20, 26, 21, 28, 22, 30, 23, 32, 24, 34, 25, 36, 26, 38, 27, 40, 28, 42, 29, 44, 3, 46, 30, 48, 31, 50, 4, 52, 32, 54, 33, 56, 5, 58, 34, 60, 35, 62, 36, 64, 7, 66, 8, 68, 37, 70, 38, 72, 39, 74, 40, 76, 41, 78, 42, 80, 43, 82, 44, 84, 45, 86, 46, 88, 47, 90, 0, 92, 0, 94, 0, 96, 0, 98, 0, 100, 0, 102, 0, 104, 0, 106, 0, 108, 0, 110, 0, 112, 9, 114, 48, 116, 49, 118, 50, 120, 51, 122, 52, 124, 53, 126, 10, 128, 54, 130, 55, 132, 0, 134, 56, 136, 57, 138, 0, 140, 0, 142, 0, 144, 0, 146, 0, 148, 0, 150, 0, 2, 0, 1, 16, 2, 0, 65, 90, 97, 122, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 82, 82, 114, 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120, 120, 3, 0, 9, 9, 12, 12, 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 1, 0, 92, 92, 3, 0, 10, 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39, 39, 2, 0, 66, 66, 98, 98, 773, 0, 2, 1, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 130, 1, 0, 0, 0, 1, 132, 1, 0, 0, 0, 1, 134, 1, 0, 0, 0, 1, 136, 1, 0, 0, 0, 1, 138, 1, 0, 0, 0, 1, 140, 1, 0, 0, 0, 1, 142, 1, 0, 0, 0, 1, 144, 1, 0, 0, 0, 1, 146, 1, 0, 0, 0, 1, 148, 1, 0, 0, 0, 1, 150, 1, 0, 0, 0, 2, 152, 1, 0, 0, 0, 4, 154, 1, 0, 0, 0, 6, 156, 1, 0, 0, 0, 8, 158, 1, 0, 0, 0, 10, 162, 1, 0, 0, 0, 12, 165, 1, 0, 0, 0, 14, 173, 1, 0, 0, 0, 16, 178, 1, 0, 0, 0, 18, 185, 1, 0, 0, 0, 20, 191, 1, 0, 0, 0, 22, 199, 1, 0, 0, 0, 24, 209, 1, 0, 0, 0, 26, 216, 1, 0, 0, 0, 28, 221, 1, 0, 0, 0, 30, 233, 1, 0, 0, 0, 32, 243, 1, 0, 0, 0, 34, 252, 1, 0, 0, 0, 36, 259, 1, 0, 0, 0, 38, 264, 1, 0, 0, 0, 40, 267, 1, 0, 0, 0, 42, 270, 1, 0, 0, 0, 44, 273, 1, 0, 0, 0, 46, 275, 1, 0, 0, 0, 48, 278, 1, 0, 0, 0, 50, 281, 1, 0, 0, 0, 52, 283, 1, 0, 0, 0, 54, 286, 1, 0, 0, 0, 56, 289, 1, 0, 0, 0, 58, 291, 1, 0, 0, 0, 60, 293, 1, 0, 0, 0, 62, 295, 1, 0, 0, 0, 64, 297, 1, 0, 0, 0, 66, 299, 1, 0, 0, 0, 68, 301, 1, 0, 0, 0, 70, 303, 1, 0, 0, 0, 72, 305, 1, 0, 0, 0, 74, 307, 1, 0, 0, 0, 76, 309, 1, 0, 0, 0, 78, 311, 1, 0, 0, 0, 80, 313, 1, 0, 0, 0, 82, 315, 1, 0, 0, 0, 84, 317, 1, 0, 0, 0, 86, 322, 1, 0, 0, 0, 88, 328, 1, 0, 0, 0, 90, 333, 1, 0, 0, 0, 92, 335, 1, 0, 0, 0, 94, 337, 1, 0, 0, 0, 96, 339, 1, 0, 0, 0, 98, 348, 1, 0, 0, 0, 100, 350, 1, 0, 0, 0, 102, 356, 1, 0, 0, 0, 104, 358, 1, 0, 0, 0, 106, 361, 1, 0, 0, 0, 108, 366, 1, 0, 0, 0, 110, 389, 1, 0, 0, 0, 112, 392, 1, 0, 0, 0, 114, 396, 1, 0, 0, 0, 116, 437, 1, 0, 0, 0, 118, 452, 1, 0, 0, 0, 120, 471, 1, 0, 0, 0, 122, 569, 1, 0, 0, 0, 124, 571, 1, 0, 0, 0, 126, 576, 1, 0, 0, 0, 128, 589, 1, 0, 0, 0, 130, 609, 1, 0, 0, 0, 132, 624, 1, 0, 0, 0, 134, 636, 1, 0, 0, 0, 136, 687, 1, 0, 0, 0, 138, 689, 1, 0, 0, 0, 140, 693, 1, 0, 0, 0, 142, 697, 1, 0, 0, 0, 144, 701, 1, 0, 0, 0, 146, 705, 1, 0, 0, 0, 148, 709, 1, 0, 0, 0, 150, 713, 1, 0, 0, 0, 152, 153, 5, 35, 0, 0, 153, 3, 1, 0, 0, 0, 154, 155, 5, 58, 0, 0, 155, 5, 1, 0, 0, 0, 156, 157, 5, 44, 0, 0, 157, 7, 1, 0, 0, 0, 158, 159, 5, 97, 0, 0, 159, 160, 5, 110, 0, 0, 160, 161, 5, 100, 0, 0, 161, 9, 1, 0, 0, 0, 162, 163, 5, 111, 0, 0, 163, 164, 5, 114, 0, 0, 164, 11, 1, 0, 0, 0, 165, 166, 5, 98, 0, 0, 166, 167, 5, 117, 0, 0, 167, 168, 5, 116, 0, 0, 168, 169, 5, 32, 0, 0, 169, 170, 5, 110, 0, 0, 170, 171, 5, 111, 0, 0, 171, 172, 5, 116, 0, 0, 172, 13, 1, 0, 0, 0, 173, 174, 5, 102, 0, 0, 174, 175, 5, 114, 0, 0, 175, 176, 5, 111, 0, 0, 176, 177, 5, 109, 0, 0, 177, 15, 1, 0, 0, 0, 178, 179, 5, 109, 0, 0, 179, 180, 5, 111, 0, 0, 180, 181, 5, 100, 0, 0, 181, 182, 5, 117, 0, 0, 182, 183, 5, 108, 0, 0, 183, 184, 5, 101, 0, 0, 184, 17, 1, 0, 0, 0, 185, 186, 5, 109, 0, 0, 186, 187, 5, 111, 0, 0, 187, 188, 5, 100, 0, 0, 188, 189, 5, 101, 0, 0, 189, 190, 5, 108, 0, 0, 190, 19, 1, 0, 0, 0, 191, 192, 5, 115, 0, 0, 192, 193, 5, 99, 0, 0, 193, 194, 5, 104, 0, 0, 194, 195, 5, 101, 0, 0, 195, 196, 5, 109, 0, 0, 196, 197, 5, 97, 0, 0, 197, 21, 1, 0, 0, 0, 198, 200, 3, 94, 46, 0, 199, 198, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 205, 5, 46, 0, 0, 204, 206, 3, 94, 46, 0, 205, 204, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 205, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 23, 1, 0, 0, 0, 209, 210, 5, 101, 0, 0, 210, 211, 5, 120, 0, 0, 211, 212, 5, 116, 0, 0, 212, 213, 5, 101, 0, 0, 213, 214, 5, 110, 0, 0, 214, 215, 5, 100, 0, 0, 215, 25, 1, 0, 0, 0, 216, 217, 5, 116, 0, 0, 217, 218, 5, 121, 0, 0, 218, 219, 5, 112, 0, 0, 219, 220, 5, 101, 0, 0, 220, 27, 1, 0, 0, 0, 221, 222, 5, 99, 0, 0, 222, 223, 5, 111, 0, 0, 223, 224, 5, 110, 0, 0, 224, 225, 5, 100, 0, 0, 225, 226, 5, 105, 0, 0, 226, 227, 5, 116, 0, 0, 227, 228, 5, 105, 0, 0, 228, 229, 5, 111, 0, 0, 229, 230, 5, 110, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 6, 13, 0, 0, 232, 29, 1, 0, 0, 0, 233, 234, 5, 114, 0, 0, 234, 235, 5, 101, 0, 0, 235, 236, 5, 108, 0, 0, 236, 237, 5, 97, 0, 0, 237, 238, 5, 116, 0, 0, 238, 239, 5, 105, 0, 0, 239, 240, 5, 111, 0, 0, 240, 241, 5, 110, 0, 0, 241, 242, 5, 115, 0, 0, 242, 31, 1, 0, 0, 0, 243, 244, 5, 114, 0, 0, 244, 245, 5, 101, 0, 0, 245, 246, 5, 108, 0, 0, 246, 247, 5, 97, 0, 0, 247, 248, 5, 116, 0, 0, 248, 249, 5, 105, 0, 0, 249, 250, 5, 111, 0, 0, 250, 251, 5, 110, 0, 0, 251, 33, 1, 0, 0, 0, 252, 253, 5, 100, 0, 0, 253, 254, 5, 101, 0, 0, 254, 255, 5, 102, 0, 0, 255, 256, 5, 105, 0, 0, 256, 257, 5, 110, 0, 0, 257, 258, 5, 101, 0, 0, 258, 35, 1, 0, 0, 0, 259, 260, 5, 119, 0, 0, 260, 261, 5, 105, 0, 0, 261, 262, 5, 116, 0, 0, 262, 263, 5, 104, 0, 0, 263, 37, 1, 0, 0, 0, 264, 265, 5, 61, 0, 0, 265, 266, 5, 61, 0, 0, 266, 39, 1, 0, 0, 0, 267, 268, 5, 33, 0, 0, 268, 269, 5, 61, 0, 0, 269, 41, 1, 0, 0, 0, 270, 271, 5, 105, 0, 0, 271, 272, 5, 110, 0, 0, 272, 43, 1, 0, 0, 0, 273, 274, 5, 60, 0, 0, 274, 45, 1, 0, 0, 0, 275, 276, 5, 60, 0, 0, 276, 277, 5, 61, 0, 0, 277, 47, 1, 0, 0, 0, 278, 279, 5, 62, 0, 0, 279, 280, 5, 61, 0, 0, 280, 49, 1, 0, 0, 0, 281, 282, 5, 62, 0, 0, 282, 51, 1, 0, 0, 0, 283, 284, 5, 38, 0, 0, 284, 285, 5, 38, 0, 0, 285, 53, 1, 0, 0, 0, 286, 287, 5, 124, 0, 0, 287, 288, 5, 124, 0, 0, 288, 55, 1, 0, 0, 0, 289, 290, 5, 91, 0, 0, 290, 57, 1, 0, 0, 0, 291, 292, 5, 93, 0, 0, 292, 59, 1, 0, 0, 0, 293, 294, 5, 123, 0, 0, 294, 61, 1, 0, 0, 0, 295, 296, 5, 125, 0, 0, 296, 63, 1, 0, 0, 0, 297, 298, 5, 40, 0, 0, 298, 65, 1, 0, 0, 0, 299, 300, 5, 41, 0, 0, 300, 67, 1, 0, 0, 0, 301, 302, 5, 46, 0, 0, 302, 69, 1, 0, 0, 0, 303, 304, 5, 45, 0, 0, 304, 71, 1, 0, 0, 0, 305, 306, 5, 33, 0, 0, 306, 73, 1, 0, 0, 0, 307, 308, 5, 63, 0, 0, 308, 75, 1, 0, 0, 0, 309, 310, 5, 43, 0, 0, 310, 77, 1, 0, 0, 0, 311, 312, 5, 42, 0, 0, 312, 79, 1, 0, 0, 0, 313, 314, 5, 47, 0, 0, 314, 81, 1, 0, 0, 0, 315, 316, 5, 37, 0, 0, 316, 83, 1, 0, 0, 0, 317, 318, 5, 116, 0, 0, 318, 319, 5, 114, 0, 0, 319, 320, 5, 117, 0, 0, 320, 321, 5, 101, 0, 0, 321, 85, 1, 0, 0, 0, 322, 323, 5, 102, 0, 0, 323, 324, 5, 97, 0, 0, 324, 325, 5, 108, 0, 0, 325, 326, 5, 115, 0, 0, 326, 327, 5, 101, 0, 0, 327, 87, 1, 0, 0, 0, 328, 329, 5, 110, 0, 0, 329, 330, 5, 117, 0, 0, 330, 331, 5, 108, 0, 0, 331, 332, 5, 108, 0, 0, 332, 89, 1, 0, 0, 0, 333, 334, 5, 92, 0, 0, 334, 91, 1, 0, 0, 0, 335, 336, 7, 0, 0, 0, 336, 93, 1, 0, 0, 0, 337, 338, 2, 48, 57, 0, 338, 95, 1, 0, 0, 0, 339, 341, 7, 1, 0, 0, 340, 342, 7, 2, 0, 0, 341, 340, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 344, 1, 0, 0, 0, 343, 345, 3, 94, 46, 0, 344, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 97, 1, 0, 0, 0, 348, 349, 7, 3, 0, 0, 349, 99, 1, 0, 0, 0, 350, 351, 7, 4, 0, 0, 351, 101, 1, 0, 0, 0, 352, 357, 3, 104, 51, 0, 353, 357, 3, 108, 53, 0, 354, 357, 3, 110, 54, 0, 355, 357, 3, 106, 52, 0, 356, 352, 1, 0, 0, 0, 356, 353, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 356, 355, 1, 0, 0, 0, 357, 103, 1, 0, 0, 0, 358, 359, 3, 90, 44, 0, 359, 360, 7, 5, 0, 0, 360, 105, 1, 0, 0, 0, 361, 362, 3, 90, 44, 0, 362, 363, 2, 48, 51, 0, 363, 364, 2, 48, 55, 0, 364, 365, 2, 48, 55, 0, 365, 107, 1, 0, 0, 0, 366, 367, 3, 90, 44, 0, 367, 368, 7, 6, 0, 0, 368, 369, 3, 98, 48, 0, 369, 370, 3, 98, 48, 0, 370, 109, 1, 0, 0, 0, 371, 372, 3, 90, 44, 0, 372, 373, 5, 117, 0, 0, 373, 374, 3, 98, 48, 0, 374, 375, 3, 98, 48, 0, 375, 376, 3, 98, 48, 0, 376, 377, 3, 98, 48, 0, 377, 390, 1, 0, 0, 0, 378, 379, 3, 90, 44, 0, 379, 380, 5, 85, 0, 0, 380, 381, 3, 98, 48, 0, 381, 382, 3, 98, 48, 0, 382, 383, 3, 98, 48, 0, 383, 384, 3, 98, 48, 0, 384, 385, 3, 98, 48, 0, 385, 386, 3, 98, 48, 0, 386, 387, 3, 98, 48, 0, 387, 388, 3, 98, 48, 0, 388, 390, 1, 0, 0, 0, 389, 371, 1, 0, 0, 0, 389, 378, 1, 0, 0, 0, 390, 111, 1, 0, 0, 0, 391, 393, 7, 7, 0, 0, 392, 391, 1, 0, 0, 0, 393, 394, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 113, 1, 0, 0, 0, 396, 397, 5, 47, 0, 0, 397, 398, 5, 47, 0, 0, 398, 402, 1, 0, 0, 0, 399, 401, 8, 8, 0, 0, 400, 399, 1, 0, 0, 0, 401, 404, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 405, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 405, 406, 6, 56, 1, 0, 406, 115, 1, 0, 0, 0, 407, 409, 3, 94, 46, 0, 408, 407, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 408, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 414, 5, 46, 0, 0, 413, 415, 3, 94, 46, 0, 414, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 419, 1, 0, 0, 0, 418, 420, 3, 96, 47, 0, 419, 418, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 438, 1, 0, 0, 0, 421, 423, 3, 94, 46, 0, 422, 421, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 427, 3, 96, 47, 0, 427, 438, 1, 0, 0, 0, 428, 430, 5, 46, 0, 0, 429, 431, 3, 94, 46, 0, 430, 429, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 430, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 435, 1, 0, 0, 0, 434, 436, 3, 96, 47, 0, 435, 434, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 438, 1, 0, 0, 0, 437, 408, 1, 0, 0, 0, 437, 422, 1, 0, 0, 0, 437, 428, 1, 0, 0, 0, 438, 117, 1, 0, 0, 0, 439, 441, 3, 94, 46, 0, 440, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 453, 1, 0, 0, 0, 444, 445, 5, 48, 0, 0, 445, 446, 5, 120, 0, 0, 446, 448, 1, 0, 0, 0, 447, 449, 3, 98, 48, 0, 448, 447, 1, 0, 0, 0, 449, 450, 1, 0, 0, 0, 450, 448, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 453, 1, 0, 0, 0, 452, 440, 1, 0, 0, 0, 452, 444, 1, 0, 0, 0, 453, 119, 1, 0, 0, 0, 454, 456, 3, 94, 46, 0, 455, 454, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 455, 1, 0, 0, 0, 457, 458, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 460, 7, 9, 0, 0, 460, 472, 1, 0, 0, 0, 461, 462, 5, 48, 0, 0, 462, 463, 5, 120, 0, 0, 463, 465, 1, 0, 0, 0, 464, 466, 3, 98, 48, 0, 465, 464, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 470, 7, 9, 0, 0, 470, 472, 1, 0, 0, 0, 471, 455, 1, 0, 0, 0, 471, 461, 1, 0, 0, 0, 472, 121, 1, 0, 0, 0, 473, 478, 5, 34, 0, 0, 474, 477, 3, 102, 50, 0, 475, 477, 8, 10, 0, 0, 476, 474, 1, 0, 0, 0, 476, 475, 1, 0, 0, 0, 477, 480, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 481, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 481, 570, 5, 34, 0, 0, 482, 487, 5, 39, 0, 0, 483, 486, 3, 102, 50, 0, 484, 486, 8, 11, 0, 0, 485, 483, 1, 0, 0, 0, 485, 484, 1, 0, 0, 0, 486, 489, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 490, 1, 0, 0, 0, 489, 487, 1, 0, 0, 0, 490, 570, 5, 39, 0, 0, 491, 492, 5, 34, 0, 0, 492, 493, 5, 34, 0, 0, 493, 494, 5, 34, 0, 0, 494, 499, 1, 0, 0, 0, 495, 498, 3, 102, 50, 0, 496, 498, 8, 12, 0, 0, 497, 495, 1, 0, 0, 0, 497, 496, 1, 0, 0, 0, 498, 501, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 502, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 502, 503, 5, 34, 0, 0, 503, 504, 5, 34, 0, 0, 504, 570, 5, 34, 0, 0, 505, 506, 5, 39, 0, 0, 506, 507, 5, 39, 0, 0, 507, 508, 5, 39, 0, 0, 508, 513, 1, 0, 0, 0, 509, 512, 3, 102, 50, 0, 510, 512, 8, 12, 0, 0, 511, 509, 1, 0, 0, 0, 511, 510, 1, 0, 0, 0, 512, 515, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 514, 516, 1, 0, 0, 0, 515, 513, 1, 0, 0, 0, 516, 517, 5, 39, 0, 0, 517, 518, 5, 39, 0, 0, 518, 570, 5, 39, 0, 0, 519, 520, 3, 100, 49, 0, 520, 524, 5, 34, 0, 0, 521, 523, 8, 13, 0, 0, 522, 521, 1, 0, 0, 0, 523, 526, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 1, 0, 0, 0, 526, 524, 1, 0, 0, 0, 527, 528, 5, 34, 0, 0, 528, 570, 1, 0, 0, 0, 529, 530, 3, 100, 49, 0, 530, 534, 5, 39, 0, 0, 531, 533, 8, 14, 0, 0, 532, 531, 1, 0, 0, 0, 533, 536, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 537, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 537, 538, 5, 39, 0, 0, 538, 570, 1, 0, 0, 0, 539, 540, 3, 100, 49, 0, 540, 541, 5, 34, 0, 0, 541, 542, 5, 34, 0, 0, 542, 543, 5, 34, 0, 0, 543, 547, 1, 0, 0, 0, 544, 546, 9, 0, 0, 0, 545, 544, 1, 0, 0, 0, 546, 549, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 550, 1, 0, 0, 0, 549, 547, 1, 0, 0, 0, 550, 551, 5, 34, 0, 0, 551, 552, 5, 34, 0, 0, 552, 553, 5, 34, 0, 0, 553, 570, 1, 0, 0, 0, 554, 555, 3, 100, 49, 0, 555, 556, 5, 39, 0, 0, 556, 557, 5, 39, 0, 0, 557, 558, 5, 39, 0, 0, 558, 562, 1, 0, 0, 0, 559, 561, 9, 0, 0, 0, 560, 559, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 563, 565, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 566, 5, 39, 0, 0, 566, 567, 5, 39, 0, 0, 567, 568, 5, 39, 0, 0, 568, 570, 1, 0, 0, 0, 569, 473, 1, 0, 0, 0, 569, 482, 1, 0, 0, 0, 569, 491, 1, 0, 0, 0, 569, 505, 1, 0, 0, 0, 569, 519, 1, 0, 0, 0, 569, 529, 1, 0, 0, 0, 569, 539, 1, 0, 0, 0, 569, 554, 1, 0, 0, 0, 570, 123, 1, 0, 0, 0, 571, 572, 7, 15, 0, 0, 572, 573, 3, 122, 60, 0, 573, 125, 1, 0, 0, 0, 574, 577, 3, 92, 45, 0, 575, 577, 5, 95, 0, 0, 576, 574, 1, 0, 0, 0, 576, 575, 1, 0, 0, 0, 577, 584, 1, 0, 0, 0, 578, 583, 3, 92, 45, 0, 579, 583, 3, 94, 46, 0, 580, 583, 5, 95, 0, 0, 581, 583, 3, 70, 34, 0, 582, 578, 1, 0, 0, 0, 582, 579, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 582, 581, 1, 0, 0, 0, 583, 586, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 127, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 587, 590, 3, 92, 45, 0, 588, 590, 5, 95, 0, 0, 589, 587, 1, 0, 0, 0, 589, 588, 1, 0, 0, 0, 590, 605, 1, 0, 0, 0, 591, 595, 3, 80, 39, 0, 592, 595, 3, 68, 33, 0, 593, 595, 3, 70, 34, 0, 594, 591, 1, 0, 0, 0, 594, 592, 1, 0, 0, 0, 594, 593, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 599, 1, 0, 0, 0, 596, 600, 3, 92, 45, 0, 597, 600, 3, 94, 46, 0, 598, 600, 5, 95, 0, 0, 599, 596, 1, 0, 0, 0, 599, 597, 1, 0, 0, 0, 599, 598, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 599, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 604, 1, 0, 0, 0, 603, 594, 1, 0, 0, 0, 604, 607, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 129, 1, 0, 0, 0, 607, 605, 1, 0, 0, 0, 608, 610, 3, 112, 55, 0, 609, 608, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 616, 1, 0, 0, 0, 611, 613, 5, 13, 0, 0, 612, 611, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 617, 5, 10, 0, 0, 615, 617, 2, 12, 13, 0, 616, 612, 1, 0, 0, 0, 616, 615, 1, 0, 0, 0, 617, 619, 1, 0, 0, 0, 618, 620, 3, 112, 55, 0, 619, 618, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 622, 1, 0, 0, 0, 621, 623, 3, 130, 64, 0, 622, 621, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 131, 1, 0, 0, 0, 624, 625, 3, 66, 32, 0, 625, 626, 1, 0, 0, 0, 626, 627, 6, 65, 2, 0, 627, 628, 6, 65, 3, 0, 628, 133, 1, 0, 0, 0, 629, 630, 5, 109, 0, 0, 630, 631, 5, 97, 0, 0, 631, 637, 5, 112, 0, 0, 632, 633, 5, 108, 0, 0, 633, 634, 5, 105, 0, 0, 634, 635, 5, 115, 0, 0, 635, 637, 5, 116, 0, 0, 636, 629, 1, 0, 0, 0, 636, 632, 1, 0, 0, 0, 637, 135, 1, 0, 0, 0, 638, 639, 5, 98, 0, 0, 639, 640, 5, 111, 0, 0, 640, 641, 5, 111, 0, 0, 641, 688, 5, 108, 0, 0, 642, 643, 5, 115, 0, 0, 643, 644, 5, 116, 0, 0, 644, 645, 5, 114, 0, 0, 645, 646, 5, 105, 0, 0, 646, 647, 5, 110, 0, 0, 647, 688, 5, 103, 0, 0, 648, 649, 5, 105, 0, 0, 649, 650, 5, 110, 0, 0, 650, 688, 5, 116, 0, 0, 651, 652, 5, 117, 0, 0, 652, 653, 5, 105, 0, 0, 653, 654, 5, 110, 0, 0, 654, 688, 5, 116, 0, 0, 655, 656, 5, 100, 0, 0, 656, 657, 5, 111, 0, 0, 657, 658, 5, 117, 0, 0, 658, 659, 5, 98, 0, 0, 659, 660, 5, 108, 0, 0, 660, 688, 5, 101, 0, 0, 661, 662, 5, 100, 0, 0, 662, 663, 5, 117, 0, 0, 663, 664, 5, 114, 0, 0, 664, 665, 5, 97, 0, 0, 665, 666, 5, 116, 0, 0, 666, 667, 5, 105, 0, 0, 667, 668, 5, 111, 0, 0, 668, 688, 5, 110, 0, 0, 669, 670, 5, 116, 0, 0, 670, 671, 5, 105, 0, 0, 671, 672, 5, 109, 0, 0, 672, 673, 5, 101, 0, 0, 673, 674, 5, 115, 0, 0, 674, 675, 5, 116, 0, 0, 675, 676, 5, 97, 0, 0, 676, 677, 5, 109, 0, 0, 677, 688, 5, 112, 0, 0, 678, 679, 5, 105, 0, 0, 679, 680, 5, 112, 0, 0, 680, 681, 5, 97, 0, 0, 681, 682, 5, 100, 0, 0, 682, 683, 5, 100, 0, 0, 683, 684, 5, 114, 0, 0, 684, 685, 5, 101, 0, 0, 685, 686, 5, 115, 0, 0, 686, 688, 5, 115, 0, 0, 687, 638, 1, 0, 0, 0, 687, 642, 1, 0, 0, 0, 687, 648, 1, 0, 0, 0, 687, 651, 1, 0, 0, 0, 687, 655, 1, 0, 0, 0, 687, 661, 1, 0, 0, 0, 687, 669, 1, 0, 0, 0, 687, 678, 1, 0, 0, 0, 688, 137, 1, 0, 0, 0, 689, 690, 3, 44, 21, 0, 690, 691, 1, 0, 0, 0, 691, 692, 6, 68, 4, 0, 692, 139, 1, 0, 0, 0, 693, 694, 3, 50, 24, 0, 694, 695, 1, 0, 0, 0, 695, 696, 6, 69, 5, 0, 696, 141, 1, 0, 0, 0, 697, 698, 3, 64, 31, 0, 698, 699, 1, 0, 0, 0, 699, 700, 6, 70, 6, 0, 700, 143, 1, 0, 0, 0, 701, 702, 3, 4, 1, 0, 702, 703, 1, 0, 0, 0, 703, 704, 6, 71, 7, 0, 704, 145, 1, 0, 0, 0, 705, 706, 3, 6, 2, 0, 706, 707, 1, 0, 0, 0, 707, 708, 6, 72, 8, 0, 708, 147, 1, 0, 0, 0, 709, 710, 3, 112, 55, 0, 710, 711, 1, 0, 0, 0, 711, 712, 6, 73, 9, 0, 712, 149, 1, 0, 0, 0, 713, 714, 3, 126, 62, 0, 714, 715, 1, 0, 0, 0, 715, 716, 6, 74, 10, 0, 716, 151, 1, 0, 0, 0, 51, 0, 1, 201, 207, 341, 346, 356, 389, 394, 402, 410, 416, 419, 424, 432, 435, 437, 442, 450, 452, 457, 467, 471, 476, 478, 485, 487, 497, 499, 511, 513, 524, 534, 547, 562, 569, 576, 582, 584, 589, 594, 599, 601, 605, 609, 612, 616, 619, 622, 636, 687, 11, 5, 1, 0, 0, 1, 0, 7, 8, 0, 4, 0, 0, 7, 3, 0, 7, 4, 0, 7, 7, 0, 7, 1, 0, 7, 2, 0, 7, 9, 0, 7, 10, 0] \ No newline at end of file diff --git a/pkg/go/gen/OpenFGALexer.tokens b/pkg/go/gen/OpenFGALexer.tokens index 273e2f7c..512cec30 100644 --- a/pkg/go/gen/OpenFGALexer.tokens +++ b/pkg/go/gen/OpenFGALexer.tokens @@ -51,9 +51,10 @@ NUM_INT=50 NUM_UINT=51 STRING=52 BYTES=53 -NEWLINE=54 -CONDITION_PARAM_CONTAINER=55 -CONDITION_PARAM_TYPE=56 +EXTENDED_IDENTIFIER=54 +NEWLINE=55 +CONDITION_PARAM_CONTAINER=56 +CONDITION_PARAM_TYPE=57 '#'=11 ':'=1 ','=2 diff --git a/pkg/go/gen/OpenFGAParser.interp b/pkg/go/gen/OpenFGAParser.interp index 2e582364..56431d97 100644 --- a/pkg/go/gen/OpenFGAParser.interp +++ b/pkg/go/gen/OpenFGAParser.interp @@ -56,6 +56,7 @@ null null null null +null token symbolic names: null @@ -112,6 +113,7 @@ NUM_INT NUM_UINT STRING BYTES +EXTENDED_IDENTIFIER NEWLINE CONDITION_PARAM_CONTAINER CONDITION_PARAM_TYPE @@ -142,8 +144,9 @@ parameterName parameterType multiLineComment identifier +extended_identifier conditionExpression atn: -[4, 1, 56, 386, 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, 1, 0, 3, 0, 54, 8, 0, 1, 0, 3, 0, 57, 8, 0, 1, 0, 1, 0, 3, 0, 61, 8, 0, 1, 0, 3, 0, 64, 8, 0, 1, 0, 1, 0, 3, 0, 68, 8, 0, 1, 0, 1, 0, 3, 0, 72, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 79, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 87, 8, 1, 1, 2, 1, 2, 1, 2, 3, 2, 92, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 98, 8, 2, 1, 3, 5, 3, 101, 8, 3, 10, 3, 12, 3, 104, 9, 3, 1, 4, 1, 4, 3, 4, 108, 8, 4, 1, 4, 1, 4, 1, 4, 3, 4, 113, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 4, 121, 8, 4, 11, 4, 12, 4, 122, 3, 4, 125, 8, 4, 1, 5, 1, 5, 3, 5, 129, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 136, 8, 5, 1, 5, 1, 5, 3, 5, 140, 8, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 3, 7, 149, 8, 7, 1, 7, 3, 7, 152, 8, 7, 1, 8, 1, 8, 3, 8, 156, 8, 8, 1, 8, 3, 8, 159, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 166, 8, 9, 4, 9, 168, 8, 9, 11, 9, 12, 9, 169, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 177, 8, 9, 4, 9, 179, 8, 9, 11, 9, 12, 9, 180, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 188, 8, 9, 3, 9, 190, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, 5, 11, 196, 8, 11, 10, 11, 12, 11, 199, 9, 11, 1, 11, 1, 11, 3, 11, 203, 8, 11, 1, 11, 5, 11, 206, 8, 11, 10, 11, 12, 11, 209, 9, 11, 1, 11, 1, 11, 1, 12, 1, 12, 5, 12, 215, 8, 12, 10, 12, 12, 12, 218, 9, 12, 1, 12, 1, 12, 3, 12, 222, 8, 12, 1, 12, 5, 12, 225, 8, 12, 10, 12, 12, 12, 228, 9, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 234, 8, 13, 1, 13, 1, 13, 3, 13, 238, 8, 13, 1, 13, 1, 13, 3, 13, 242, 8, 13, 1, 13, 1, 13, 3, 13, 246, 8, 13, 5, 13, 248, 8, 13, 10, 13, 12, 13, 251, 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 260, 8, 14, 1, 15, 3, 15, 263, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 272, 8, 15, 1, 15, 3, 15, 275, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 282, 8, 16, 1, 17, 5, 17, 285, 8, 17, 10, 17, 12, 17, 288, 9, 17, 1, 18, 1, 18, 3, 18, 292, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 299, 8, 18, 1, 18, 1, 18, 3, 18, 303, 8, 18, 1, 18, 1, 18, 3, 18, 307, 8, 18, 1, 18, 1, 18, 3, 18, 311, 8, 18, 1, 18, 1, 18, 3, 18, 315, 8, 18, 5, 18, 317, 8, 18, 10, 18, 12, 18, 320, 9, 18, 1, 18, 3, 18, 323, 8, 18, 1, 18, 1, 18, 3, 18, 327, 8, 18, 1, 18, 1, 18, 3, 18, 331, 8, 18, 1, 18, 3, 18, 334, 8, 18, 1, 18, 1, 18, 3, 18, 338, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 3, 20, 345, 8, 20, 1, 20, 1, 20, 3, 20, 349, 8, 20, 1, 20, 1, 20, 3, 20, 353, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 364, 8, 22, 1, 23, 1, 23, 5, 23, 368, 8, 23, 10, 23, 12, 23, 371, 9, 23, 1, 23, 1, 23, 3, 23, 375, 8, 23, 1, 24, 1, 24, 1, 25, 1, 25, 5, 25, 381, 8, 25, 10, 25, 12, 25, 384, 9, 25, 1, 25, 0, 0, 26, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 0, 4, 1, 0, 54, 54, 4, 0, 10, 10, 16, 18, 20, 21, 24, 24, 4, 0, 3, 5, 7, 10, 27, 35, 37, 54, 1, 0, 36, 36, 427, 0, 53, 1, 0, 0, 0, 2, 78, 1, 0, 0, 0, 4, 91, 1, 0, 0, 0, 6, 102, 1, 0, 0, 0, 8, 107, 1, 0, 0, 0, 10, 128, 1, 0, 0, 0, 12, 143, 1, 0, 0, 0, 14, 148, 1, 0, 0, 0, 16, 155, 1, 0, 0, 0, 18, 189, 1, 0, 0, 0, 20, 191, 1, 0, 0, 0, 22, 193, 1, 0, 0, 0, 24, 212, 1, 0, 0, 0, 26, 231, 1, 0, 0, 0, 28, 254, 1, 0, 0, 0, 30, 262, 1, 0, 0, 0, 32, 276, 1, 0, 0, 0, 34, 286, 1, 0, 0, 0, 36, 291, 1, 0, 0, 0, 38, 341, 1, 0, 0, 0, 40, 344, 1, 0, 0, 0, 42, 356, 1, 0, 0, 0, 44, 363, 1, 0, 0, 0, 46, 365, 1, 0, 0, 0, 48, 376, 1, 0, 0, 0, 50, 382, 1, 0, 0, 0, 52, 54, 5, 9, 0, 0, 53, 52, 1, 0, 0, 0, 53, 54, 1, 0, 0, 0, 54, 56, 1, 0, 0, 0, 55, 57, 5, 54, 0, 0, 56, 55, 1, 0, 0, 0, 56, 57, 1, 0, 0, 0, 57, 60, 1, 0, 0, 0, 58, 61, 3, 2, 1, 0, 59, 61, 3, 4, 2, 0, 60, 58, 1, 0, 0, 0, 60, 59, 1, 0, 0, 0, 61, 63, 1, 0, 0, 0, 62, 64, 5, 54, 0, 0, 63, 62, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 65, 1, 0, 0, 0, 65, 67, 3, 6, 3, 0, 66, 68, 5, 54, 0, 0, 67, 66, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 71, 3, 34, 17, 0, 70, 72, 5, 54, 0, 0, 71, 70, 1, 0, 0, 0, 71, 72, 1, 0, 0, 0, 72, 73, 1, 0, 0, 0, 73, 74, 5, 0, 0, 1, 74, 1, 1, 0, 0, 0, 75, 76, 3, 46, 23, 0, 76, 77, 5, 54, 0, 0, 77, 79, 1, 0, 0, 0, 78, 75, 1, 0, 0, 0, 78, 79, 1, 0, 0, 0, 79, 80, 1, 0, 0, 0, 80, 81, 5, 17, 0, 0, 81, 82, 5, 54, 0, 0, 82, 83, 5, 18, 0, 0, 83, 84, 5, 9, 0, 0, 84, 86, 5, 19, 0, 0, 85, 87, 5, 9, 0, 0, 86, 85, 1, 0, 0, 0, 86, 87, 1, 0, 0, 0, 87, 3, 1, 0, 0, 0, 88, 89, 3, 46, 23, 0, 89, 90, 5, 54, 0, 0, 90, 92, 1, 0, 0, 0, 91, 88, 1, 0, 0, 0, 91, 92, 1, 0, 0, 0, 92, 93, 1, 0, 0, 0, 93, 94, 5, 16, 0, 0, 94, 95, 5, 9, 0, 0, 95, 97, 3, 48, 24, 0, 96, 98, 5, 9, 0, 0, 97, 96, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 5, 1, 0, 0, 0, 99, 101, 3, 8, 4, 0, 100, 99, 1, 0, 0, 0, 101, 104, 1, 0, 0, 0, 102, 100, 1, 0, 0, 0, 102, 103, 1, 0, 0, 0, 103, 7, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 105, 106, 5, 54, 0, 0, 106, 108, 3, 46, 23, 0, 107, 105, 1, 0, 0, 0, 107, 108, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 112, 5, 54, 0, 0, 110, 111, 5, 20, 0, 0, 111, 113, 5, 9, 0, 0, 112, 110, 1, 0, 0, 0, 112, 113, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 115, 5, 21, 0, 0, 115, 116, 5, 9, 0, 0, 116, 124, 3, 48, 24, 0, 117, 118, 5, 54, 0, 0, 118, 120, 5, 23, 0, 0, 119, 121, 3, 10, 5, 0, 120, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 120, 1, 0, 0, 0, 122, 123, 1, 0, 0, 0, 123, 125, 1, 0, 0, 0, 124, 117, 1, 0, 0, 0, 124, 125, 1, 0, 0, 0, 125, 9, 1, 0, 0, 0, 126, 127, 5, 54, 0, 0, 127, 129, 3, 46, 23, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 130, 1, 0, 0, 0, 130, 131, 5, 54, 0, 0, 131, 132, 5, 25, 0, 0, 132, 133, 5, 9, 0, 0, 133, 135, 3, 12, 6, 0, 134, 136, 5, 9, 0, 0, 135, 134, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 139, 5, 1, 0, 0, 138, 140, 5, 9, 0, 0, 139, 138, 1, 0, 0, 0, 139, 140, 1, 0, 0, 0, 140, 141, 1, 0, 0, 0, 141, 142, 3, 14, 7, 0, 142, 11, 1, 0, 0, 0, 143, 144, 3, 48, 24, 0, 144, 13, 1, 0, 0, 0, 145, 149, 3, 26, 13, 0, 146, 149, 3, 20, 10, 0, 147, 149, 3, 22, 11, 0, 148, 145, 1, 0, 0, 0, 148, 146, 1, 0, 0, 0, 148, 147, 1, 0, 0, 0, 149, 151, 1, 0, 0, 0, 150, 152, 3, 18, 9, 0, 151, 150, 1, 0, 0, 0, 151, 152, 1, 0, 0, 0, 152, 15, 1, 0, 0, 0, 153, 156, 3, 20, 10, 0, 154, 156, 3, 24, 12, 0, 155, 153, 1, 0, 0, 0, 155, 154, 1, 0, 0, 0, 156, 158, 1, 0, 0, 0, 157, 159, 3, 18, 9, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 17, 1, 0, 0, 0, 160, 161, 5, 9, 0, 0, 161, 162, 5, 13, 0, 0, 162, 165, 5, 9, 0, 0, 163, 166, 3, 20, 10, 0, 164, 166, 3, 24, 12, 0, 165, 163, 1, 0, 0, 0, 165, 164, 1, 0, 0, 0, 166, 168, 1, 0, 0, 0, 167, 160, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 190, 1, 0, 0, 0, 171, 172, 5, 9, 0, 0, 172, 173, 5, 12, 0, 0, 173, 176, 5, 9, 0, 0, 174, 177, 3, 20, 10, 0, 175, 177, 3, 24, 12, 0, 176, 174, 1, 0, 0, 0, 176, 175, 1, 0, 0, 0, 177, 179, 1, 0, 0, 0, 178, 171, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 190, 1, 0, 0, 0, 182, 183, 5, 9, 0, 0, 183, 184, 5, 14, 0, 0, 184, 187, 5, 9, 0, 0, 185, 188, 3, 20, 10, 0, 186, 188, 3, 24, 12, 0, 187, 185, 1, 0, 0, 0, 187, 186, 1, 0, 0, 0, 188, 190, 1, 0, 0, 0, 189, 167, 1, 0, 0, 0, 189, 178, 1, 0, 0, 0, 189, 182, 1, 0, 0, 0, 190, 19, 1, 0, 0, 0, 191, 192, 3, 28, 14, 0, 192, 21, 1, 0, 0, 0, 193, 197, 5, 7, 0, 0, 194, 196, 5, 9, 0, 0, 195, 194, 1, 0, 0, 0, 196, 199, 1, 0, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 202, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 200, 203, 3, 14, 7, 0, 201, 203, 3, 24, 12, 0, 202, 200, 1, 0, 0, 0, 202, 201, 1, 0, 0, 0, 203, 207, 1, 0, 0, 0, 204, 206, 5, 9, 0, 0, 205, 204, 1, 0, 0, 0, 206, 209, 1, 0, 0, 0, 207, 205, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 210, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 210, 211, 5, 8, 0, 0, 211, 23, 1, 0, 0, 0, 212, 216, 5, 7, 0, 0, 213, 215, 5, 9, 0, 0, 214, 213, 1, 0, 0, 0, 215, 218, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 221, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 219, 222, 3, 16, 8, 0, 220, 222, 3, 24, 12, 0, 221, 219, 1, 0, 0, 0, 221, 220, 1, 0, 0, 0, 222, 226, 1, 0, 0, 0, 223, 225, 5, 9, 0, 0, 224, 223, 1, 0, 0, 0, 225, 228, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 229, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 229, 230, 5, 8, 0, 0, 230, 25, 1, 0, 0, 0, 231, 233, 5, 5, 0, 0, 232, 234, 5, 9, 0, 0, 233, 232, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 3, 30, 15, 0, 236, 238, 5, 9, 0, 0, 237, 236, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 249, 1, 0, 0, 0, 239, 241, 5, 2, 0, 0, 240, 242, 5, 9, 0, 0, 241, 240, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 245, 3, 30, 15, 0, 244, 246, 5, 9, 0, 0, 245, 244, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 248, 1, 0, 0, 0, 247, 239, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 252, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 253, 5, 34, 0, 0, 253, 27, 1, 0, 0, 0, 254, 259, 3, 48, 24, 0, 255, 256, 5, 9, 0, 0, 256, 257, 5, 15, 0, 0, 257, 258, 5, 9, 0, 0, 258, 260, 3, 48, 24, 0, 259, 255, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 29, 1, 0, 0, 0, 261, 263, 5, 54, 0, 0, 262, 261, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 271, 1, 0, 0, 0, 264, 272, 3, 32, 16, 0, 265, 266, 3, 32, 16, 0, 266, 267, 5, 9, 0, 0, 267, 268, 5, 26, 0, 0, 268, 269, 5, 9, 0, 0, 269, 270, 3, 38, 19, 0, 270, 272, 1, 0, 0, 0, 271, 264, 1, 0, 0, 0, 271, 265, 1, 0, 0, 0, 272, 274, 1, 0, 0, 0, 273, 275, 5, 54, 0, 0, 274, 273, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 31, 1, 0, 0, 0, 276, 281, 3, 48, 24, 0, 277, 278, 5, 1, 0, 0, 278, 282, 5, 42, 0, 0, 279, 280, 5, 11, 0, 0, 280, 282, 3, 48, 24, 0, 281, 277, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 33, 1, 0, 0, 0, 283, 285, 3, 36, 18, 0, 284, 283, 1, 0, 0, 0, 285, 288, 1, 0, 0, 0, 286, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 35, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 289, 290, 5, 54, 0, 0, 290, 292, 3, 46, 23, 0, 291, 289, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 294, 5, 54, 0, 0, 294, 295, 5, 22, 0, 0, 295, 296, 5, 9, 0, 0, 296, 298, 3, 38, 19, 0, 297, 299, 5, 9, 0, 0, 298, 297, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 302, 5, 7, 0, 0, 301, 303, 5, 9, 0, 0, 302, 301, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 306, 3, 40, 20, 0, 305, 307, 5, 9, 0, 0, 306, 305, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 318, 1, 0, 0, 0, 308, 310, 5, 2, 0, 0, 309, 311, 5, 9, 0, 0, 310, 309, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 314, 3, 40, 20, 0, 313, 315, 5, 9, 0, 0, 314, 313, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 317, 1, 0, 0, 0, 316, 308, 1, 0, 0, 0, 317, 320, 1, 0, 0, 0, 318, 316, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 321, 323, 5, 54, 0, 0, 322, 321, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 326, 5, 8, 0, 0, 325, 327, 5, 9, 0, 0, 326, 325, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 330, 5, 35, 0, 0, 329, 331, 5, 54, 0, 0, 330, 329, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 334, 5, 9, 0, 0, 333, 332, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 337, 3, 50, 25, 0, 336, 338, 5, 54, 0, 0, 337, 336, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 340, 5, 36, 0, 0, 340, 37, 1, 0, 0, 0, 341, 342, 5, 10, 0, 0, 342, 39, 1, 0, 0, 0, 343, 345, 5, 54, 0, 0, 344, 343, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 3, 42, 21, 0, 347, 349, 5, 9, 0, 0, 348, 347, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 352, 5, 1, 0, 0, 351, 353, 5, 9, 0, 0, 352, 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 355, 3, 44, 22, 0, 355, 41, 1, 0, 0, 0, 356, 357, 5, 10, 0, 0, 357, 43, 1, 0, 0, 0, 358, 364, 5, 56, 0, 0, 359, 360, 5, 55, 0, 0, 360, 361, 5, 3, 0, 0, 361, 362, 5, 56, 0, 0, 362, 364, 5, 4, 0, 0, 363, 358, 1, 0, 0, 0, 363, 359, 1, 0, 0, 0, 364, 45, 1, 0, 0, 0, 365, 369, 5, 11, 0, 0, 366, 368, 8, 0, 0, 0, 367, 366, 1, 0, 0, 0, 368, 371, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 374, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 372, 373, 5, 54, 0, 0, 373, 375, 3, 46, 23, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 47, 1, 0, 0, 0, 376, 377, 7, 1, 0, 0, 377, 49, 1, 0, 0, 0, 378, 381, 7, 2, 0, 0, 379, 381, 8, 3, 0, 0, 380, 378, 1, 0, 0, 0, 380, 379, 1, 0, 0, 0, 381, 384, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 51, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 65, 53, 56, 60, 63, 67, 71, 78, 86, 91, 97, 102, 107, 112, 122, 124, 128, 135, 139, 148, 151, 155, 158, 165, 169, 176, 180, 187, 189, 197, 202, 207, 216, 221, 226, 233, 237, 241, 245, 249, 259, 262, 271, 274, 281, 286, 291, 298, 302, 306, 310, 314, 318, 322, 326, 330, 333, 337, 344, 348, 352, 363, 369, 374, 380, 382] \ No newline at end of file +[4, 1, 57, 392, 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, 1, 0, 3, 0, 56, 8, 0, 1, 0, 3, 0, 59, 8, 0, 1, 0, 1, 0, 3, 0, 63, 8, 0, 1, 0, 3, 0, 66, 8, 0, 1, 0, 1, 0, 3, 0, 70, 8, 0, 1, 0, 1, 0, 3, 0, 74, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 81, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 89, 8, 1, 1, 2, 1, 2, 1, 2, 3, 2, 94, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 100, 8, 2, 1, 3, 5, 3, 103, 8, 3, 10, 3, 12, 3, 106, 9, 3, 1, 4, 1, 4, 3, 4, 110, 8, 4, 1, 4, 1, 4, 1, 4, 3, 4, 115, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 4, 123, 8, 4, 11, 4, 12, 4, 124, 3, 4, 127, 8, 4, 1, 5, 1, 5, 3, 5, 131, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 138, 8, 5, 1, 5, 1, 5, 3, 5, 142, 8, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 3, 7, 151, 8, 7, 1, 7, 3, 7, 154, 8, 7, 1, 8, 1, 8, 3, 8, 158, 8, 8, 1, 8, 3, 8, 161, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 168, 8, 9, 4, 9, 170, 8, 9, 11, 9, 12, 9, 171, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 179, 8, 9, 4, 9, 181, 8, 9, 11, 9, 12, 9, 182, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 190, 8, 9, 3, 9, 192, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, 5, 11, 198, 8, 11, 10, 11, 12, 11, 201, 9, 11, 1, 11, 1, 11, 3, 11, 205, 8, 11, 1, 11, 5, 11, 208, 8, 11, 10, 11, 12, 11, 211, 9, 11, 1, 11, 1, 11, 1, 12, 1, 12, 5, 12, 217, 8, 12, 10, 12, 12, 12, 220, 9, 12, 1, 12, 1, 12, 3, 12, 224, 8, 12, 1, 12, 5, 12, 227, 8, 12, 10, 12, 12, 12, 230, 9, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 236, 8, 13, 1, 13, 1, 13, 3, 13, 240, 8, 13, 1, 13, 1, 13, 3, 13, 244, 8, 13, 1, 13, 1, 13, 3, 13, 248, 8, 13, 5, 13, 250, 8, 13, 10, 13, 12, 13, 253, 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 262, 8, 14, 1, 15, 3, 15, 265, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 274, 8, 15, 1, 15, 3, 15, 277, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 284, 8, 16, 1, 17, 5, 17, 287, 8, 17, 10, 17, 12, 17, 290, 9, 17, 1, 18, 1, 18, 3, 18, 294, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 301, 8, 18, 1, 18, 1, 18, 3, 18, 305, 8, 18, 1, 18, 1, 18, 3, 18, 309, 8, 18, 1, 18, 1, 18, 3, 18, 313, 8, 18, 1, 18, 1, 18, 3, 18, 317, 8, 18, 5, 18, 319, 8, 18, 10, 18, 12, 18, 322, 9, 18, 1, 18, 3, 18, 325, 8, 18, 1, 18, 1, 18, 3, 18, 329, 8, 18, 1, 18, 1, 18, 3, 18, 333, 8, 18, 1, 18, 3, 18, 336, 8, 18, 1, 18, 1, 18, 3, 18, 340, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 3, 20, 347, 8, 20, 1, 20, 1, 20, 3, 20, 351, 8, 20, 1, 20, 1, 20, 3, 20, 355, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 366, 8, 22, 1, 23, 1, 23, 5, 23, 370, 8, 23, 10, 23, 12, 23, 373, 9, 23, 1, 23, 1, 23, 3, 23, 377, 8, 23, 1, 24, 1, 24, 1, 25, 1, 25, 3, 25, 383, 8, 25, 1, 26, 1, 26, 5, 26, 387, 8, 26, 10, 26, 12, 26, 390, 9, 26, 1, 26, 0, 0, 27, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 0, 4, 1, 0, 55, 55, 4, 0, 10, 10, 16, 18, 20, 21, 24, 24, 5, 0, 3, 5, 7, 10, 27, 35, 37, 53, 55, 55, 1, 0, 36, 36, 433, 0, 55, 1, 0, 0, 0, 2, 80, 1, 0, 0, 0, 4, 93, 1, 0, 0, 0, 6, 104, 1, 0, 0, 0, 8, 109, 1, 0, 0, 0, 10, 130, 1, 0, 0, 0, 12, 145, 1, 0, 0, 0, 14, 150, 1, 0, 0, 0, 16, 157, 1, 0, 0, 0, 18, 191, 1, 0, 0, 0, 20, 193, 1, 0, 0, 0, 22, 195, 1, 0, 0, 0, 24, 214, 1, 0, 0, 0, 26, 233, 1, 0, 0, 0, 28, 256, 1, 0, 0, 0, 30, 264, 1, 0, 0, 0, 32, 278, 1, 0, 0, 0, 34, 288, 1, 0, 0, 0, 36, 293, 1, 0, 0, 0, 38, 343, 1, 0, 0, 0, 40, 346, 1, 0, 0, 0, 42, 358, 1, 0, 0, 0, 44, 365, 1, 0, 0, 0, 46, 367, 1, 0, 0, 0, 48, 378, 1, 0, 0, 0, 50, 382, 1, 0, 0, 0, 52, 388, 1, 0, 0, 0, 54, 56, 5, 9, 0, 0, 55, 54, 1, 0, 0, 0, 55, 56, 1, 0, 0, 0, 56, 58, 1, 0, 0, 0, 57, 59, 5, 55, 0, 0, 58, 57, 1, 0, 0, 0, 58, 59, 1, 0, 0, 0, 59, 62, 1, 0, 0, 0, 60, 63, 3, 2, 1, 0, 61, 63, 3, 4, 2, 0, 62, 60, 1, 0, 0, 0, 62, 61, 1, 0, 0, 0, 63, 65, 1, 0, 0, 0, 64, 66, 5, 55, 0, 0, 65, 64, 1, 0, 0, 0, 65, 66, 1, 0, 0, 0, 66, 67, 1, 0, 0, 0, 67, 69, 3, 6, 3, 0, 68, 70, 5, 55, 0, 0, 69, 68, 1, 0, 0, 0, 69, 70, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 73, 3, 34, 17, 0, 72, 74, 5, 55, 0, 0, 73, 72, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 76, 5, 0, 0, 1, 76, 1, 1, 0, 0, 0, 77, 78, 3, 46, 23, 0, 78, 79, 5, 55, 0, 0, 79, 81, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 80, 81, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 83, 5, 17, 0, 0, 83, 84, 5, 55, 0, 0, 84, 85, 5, 18, 0, 0, 85, 86, 5, 9, 0, 0, 86, 88, 5, 19, 0, 0, 87, 89, 5, 9, 0, 0, 88, 87, 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 3, 1, 0, 0, 0, 90, 91, 3, 46, 23, 0, 91, 92, 5, 55, 0, 0, 92, 94, 1, 0, 0, 0, 93, 90, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 96, 5, 16, 0, 0, 96, 97, 5, 9, 0, 0, 97, 99, 3, 48, 24, 0, 98, 100, 5, 9, 0, 0, 99, 98, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 5, 1, 0, 0, 0, 101, 103, 3, 8, 4, 0, 102, 101, 1, 0, 0, 0, 103, 106, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 7, 1, 0, 0, 0, 106, 104, 1, 0, 0, 0, 107, 108, 5, 55, 0, 0, 108, 110, 3, 46, 23, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 114, 5, 55, 0, 0, 112, 113, 5, 20, 0, 0, 113, 115, 5, 9, 0, 0, 114, 112, 1, 0, 0, 0, 114, 115, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 117, 5, 21, 0, 0, 117, 118, 5, 9, 0, 0, 118, 126, 3, 50, 25, 0, 119, 120, 5, 55, 0, 0, 120, 122, 5, 23, 0, 0, 121, 123, 3, 10, 5, 0, 122, 121, 1, 0, 0, 0, 123, 124, 1, 0, 0, 0, 124, 122, 1, 0, 0, 0, 124, 125, 1, 0, 0, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, 9, 1, 0, 0, 0, 128, 129, 5, 55, 0, 0, 129, 131, 3, 46, 23, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 133, 5, 55, 0, 0, 133, 134, 5, 25, 0, 0, 134, 135, 5, 9, 0, 0, 135, 137, 3, 12, 6, 0, 136, 138, 5, 9, 0, 0, 137, 136, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 139, 1, 0, 0, 0, 139, 141, 5, 1, 0, 0, 140, 142, 5, 9, 0, 0, 141, 140, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 144, 3, 14, 7, 0, 144, 11, 1, 0, 0, 0, 145, 146, 3, 50, 25, 0, 146, 13, 1, 0, 0, 0, 147, 151, 3, 26, 13, 0, 148, 151, 3, 20, 10, 0, 149, 151, 3, 22, 11, 0, 150, 147, 1, 0, 0, 0, 150, 148, 1, 0, 0, 0, 150, 149, 1, 0, 0, 0, 151, 153, 1, 0, 0, 0, 152, 154, 3, 18, 9, 0, 153, 152, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 15, 1, 0, 0, 0, 155, 158, 3, 20, 10, 0, 156, 158, 3, 24, 12, 0, 157, 155, 1, 0, 0, 0, 157, 156, 1, 0, 0, 0, 158, 160, 1, 0, 0, 0, 159, 161, 3, 18, 9, 0, 160, 159, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 17, 1, 0, 0, 0, 162, 163, 5, 9, 0, 0, 163, 164, 5, 13, 0, 0, 164, 167, 5, 9, 0, 0, 165, 168, 3, 20, 10, 0, 166, 168, 3, 24, 12, 0, 167, 165, 1, 0, 0, 0, 167, 166, 1, 0, 0, 0, 168, 170, 1, 0, 0, 0, 169, 162, 1, 0, 0, 0, 170, 171, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, 192, 1, 0, 0, 0, 173, 174, 5, 9, 0, 0, 174, 175, 5, 12, 0, 0, 175, 178, 5, 9, 0, 0, 176, 179, 3, 20, 10, 0, 177, 179, 3, 24, 12, 0, 178, 176, 1, 0, 0, 0, 178, 177, 1, 0, 0, 0, 179, 181, 1, 0, 0, 0, 180, 173, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 192, 1, 0, 0, 0, 184, 185, 5, 9, 0, 0, 185, 186, 5, 14, 0, 0, 186, 189, 5, 9, 0, 0, 187, 190, 3, 20, 10, 0, 188, 190, 3, 24, 12, 0, 189, 187, 1, 0, 0, 0, 189, 188, 1, 0, 0, 0, 190, 192, 1, 0, 0, 0, 191, 169, 1, 0, 0, 0, 191, 180, 1, 0, 0, 0, 191, 184, 1, 0, 0, 0, 192, 19, 1, 0, 0, 0, 193, 194, 3, 28, 14, 0, 194, 21, 1, 0, 0, 0, 195, 199, 5, 7, 0, 0, 196, 198, 5, 9, 0, 0, 197, 196, 1, 0, 0, 0, 198, 201, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 204, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 202, 205, 3, 14, 7, 0, 203, 205, 3, 24, 12, 0, 204, 202, 1, 0, 0, 0, 204, 203, 1, 0, 0, 0, 205, 209, 1, 0, 0, 0, 206, 208, 5, 9, 0, 0, 207, 206, 1, 0, 0, 0, 208, 211, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 212, 1, 0, 0, 0, 211, 209, 1, 0, 0, 0, 212, 213, 5, 8, 0, 0, 213, 23, 1, 0, 0, 0, 214, 218, 5, 7, 0, 0, 215, 217, 5, 9, 0, 0, 216, 215, 1, 0, 0, 0, 217, 220, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 223, 1, 0, 0, 0, 220, 218, 1, 0, 0, 0, 221, 224, 3, 16, 8, 0, 222, 224, 3, 24, 12, 0, 223, 221, 1, 0, 0, 0, 223, 222, 1, 0, 0, 0, 224, 228, 1, 0, 0, 0, 225, 227, 5, 9, 0, 0, 226, 225, 1, 0, 0, 0, 227, 230, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 231, 1, 0, 0, 0, 230, 228, 1, 0, 0, 0, 231, 232, 5, 8, 0, 0, 232, 25, 1, 0, 0, 0, 233, 235, 5, 5, 0, 0, 234, 236, 5, 9, 0, 0, 235, 234, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 239, 3, 30, 15, 0, 238, 240, 5, 9, 0, 0, 239, 238, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 251, 1, 0, 0, 0, 241, 243, 5, 2, 0, 0, 242, 244, 5, 9, 0, 0, 243, 242, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 247, 3, 30, 15, 0, 246, 248, 5, 9, 0, 0, 247, 246, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 250, 1, 0, 0, 0, 249, 241, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 254, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 254, 255, 5, 34, 0, 0, 255, 27, 1, 0, 0, 0, 256, 261, 3, 50, 25, 0, 257, 258, 5, 9, 0, 0, 258, 259, 5, 15, 0, 0, 259, 260, 5, 9, 0, 0, 260, 262, 3, 50, 25, 0, 261, 257, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 29, 1, 0, 0, 0, 263, 265, 5, 55, 0, 0, 264, 263, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 273, 1, 0, 0, 0, 266, 274, 3, 32, 16, 0, 267, 268, 3, 32, 16, 0, 268, 269, 5, 9, 0, 0, 269, 270, 5, 26, 0, 0, 270, 271, 5, 9, 0, 0, 271, 272, 3, 38, 19, 0, 272, 274, 1, 0, 0, 0, 273, 266, 1, 0, 0, 0, 273, 267, 1, 0, 0, 0, 274, 276, 1, 0, 0, 0, 275, 277, 5, 55, 0, 0, 276, 275, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 31, 1, 0, 0, 0, 278, 283, 3, 50, 25, 0, 279, 280, 5, 1, 0, 0, 280, 284, 5, 42, 0, 0, 281, 282, 5, 11, 0, 0, 282, 284, 3, 50, 25, 0, 283, 279, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 33, 1, 0, 0, 0, 285, 287, 3, 36, 18, 0, 286, 285, 1, 0, 0, 0, 287, 290, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 35, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 291, 292, 5, 55, 0, 0, 292, 294, 3, 46, 23, 0, 293, 291, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 5, 55, 0, 0, 296, 297, 5, 22, 0, 0, 297, 298, 5, 9, 0, 0, 298, 300, 3, 38, 19, 0, 299, 301, 5, 9, 0, 0, 300, 299, 1, 0, 0, 0, 300, 301, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 304, 5, 7, 0, 0, 303, 305, 5, 9, 0, 0, 304, 303, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 308, 3, 40, 20, 0, 307, 309, 5, 9, 0, 0, 308, 307, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 320, 1, 0, 0, 0, 310, 312, 5, 2, 0, 0, 311, 313, 5, 9, 0, 0, 312, 311, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 316, 3, 40, 20, 0, 315, 317, 5, 9, 0, 0, 316, 315, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 319, 1, 0, 0, 0, 318, 310, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 324, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 323, 325, 5, 55, 0, 0, 324, 323, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 328, 5, 8, 0, 0, 327, 329, 5, 9, 0, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 330, 1, 0, 0, 0, 330, 332, 5, 35, 0, 0, 331, 333, 5, 55, 0, 0, 332, 331, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 335, 1, 0, 0, 0, 334, 336, 5, 9, 0, 0, 335, 334, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 339, 3, 52, 26, 0, 338, 340, 5, 55, 0, 0, 339, 338, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 342, 5, 36, 0, 0, 342, 37, 1, 0, 0, 0, 343, 344, 5, 10, 0, 0, 344, 39, 1, 0, 0, 0, 345, 347, 5, 55, 0, 0, 346, 345, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 348, 1, 0, 0, 0, 348, 350, 3, 42, 21, 0, 349, 351, 5, 9, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 5, 1, 0, 0, 353, 355, 5, 9, 0, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 357, 3, 44, 22, 0, 357, 41, 1, 0, 0, 0, 358, 359, 5, 10, 0, 0, 359, 43, 1, 0, 0, 0, 360, 366, 5, 57, 0, 0, 361, 362, 5, 56, 0, 0, 362, 363, 5, 3, 0, 0, 363, 364, 5, 57, 0, 0, 364, 366, 5, 4, 0, 0, 365, 360, 1, 0, 0, 0, 365, 361, 1, 0, 0, 0, 366, 45, 1, 0, 0, 0, 367, 371, 5, 11, 0, 0, 368, 370, 8, 0, 0, 0, 369, 368, 1, 0, 0, 0, 370, 373, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 371, 372, 1, 0, 0, 0, 372, 376, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 375, 5, 55, 0, 0, 375, 377, 3, 46, 23, 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 47, 1, 0, 0, 0, 378, 379, 7, 1, 0, 0, 379, 49, 1, 0, 0, 0, 380, 383, 3, 48, 24, 0, 381, 383, 5, 54, 0, 0, 382, 380, 1, 0, 0, 0, 382, 381, 1, 0, 0, 0, 383, 51, 1, 0, 0, 0, 384, 387, 7, 2, 0, 0, 385, 387, 8, 3, 0, 0, 386, 384, 1, 0, 0, 0, 386, 385, 1, 0, 0, 0, 387, 390, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 53, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 66, 55, 58, 62, 65, 69, 73, 80, 88, 93, 99, 104, 109, 114, 124, 126, 130, 137, 141, 150, 153, 157, 160, 167, 171, 178, 182, 189, 191, 199, 204, 209, 218, 223, 228, 235, 239, 243, 247, 251, 261, 264, 273, 276, 283, 288, 293, 300, 304, 308, 312, 316, 320, 324, 328, 332, 335, 339, 346, 350, 354, 365, 371, 376, 382, 386, 388] \ No newline at end of file diff --git a/pkg/go/gen/OpenFGAParser.tokens b/pkg/go/gen/OpenFGAParser.tokens index 273e2f7c..512cec30 100644 --- a/pkg/go/gen/OpenFGAParser.tokens +++ b/pkg/go/gen/OpenFGAParser.tokens @@ -51,9 +51,10 @@ NUM_INT=50 NUM_UINT=51 STRING=52 BYTES=53 -NEWLINE=54 -CONDITION_PARAM_CONTAINER=55 -CONDITION_PARAM_TYPE=56 +EXTENDED_IDENTIFIER=54 +NEWLINE=55 +CONDITION_PARAM_CONTAINER=56 +CONDITION_PARAM_TYPE=57 '#'=11 ':'=1 ','=2 diff --git a/pkg/go/gen/openfga_lexer.go b/pkg/go/gen/openfga_lexer.go index 0441d8b8..e661ccd0 100644 --- a/pkg/go/gen/openfga_lexer.go +++ b/pkg/go/gen/openfga_lexer.go @@ -59,7 +59,8 @@ func openfgalexerLexerInit() { "LOGICAL_OR", "RPRACKET", "LBRACE", "RBRACE", "DOT", "MINUS", "EXCLAM", "QUESTIONMARK", "PLUS", "STAR", "SLASH", "PERCENT", "CEL_TRUE", "CEL_FALSE", "NUL", "CEL_COMMENT", "NUM_FLOAT", "NUM_INT", "NUM_UINT", "STRING", - "BYTES", "NEWLINE", "CONDITION_PARAM_CONTAINER", "CONDITION_PARAM_TYPE", + "BYTES", "EXTENDED_IDENTIFIER", "NEWLINE", "CONDITION_PARAM_CONTAINER", + "CONDITION_PARAM_TYPE", } staticData.RuleNames = []string{ "HASH", "COLON", "COMMA", "AND", "OR", "BUT_NOT", "FROM", "MODULE", @@ -71,14 +72,14 @@ func openfgalexerLexerInit() { "SLASH", "PERCENT", "CEL_TRUE", "CEL_FALSE", "NUL", "BACKSLASH", "LETTER", "DIGIT", "EXPONENT", "HEXDIGIT", "RAW", "ESC_SEQ", "ESC_CHAR_SEQ", "ESC_OCT_SEQ", "ESC_BYTE_SEQ", "ESC_UNI_SEQ", "WHITESPACE", "CEL_COMMENT", "NUM_FLOAT", - "NUM_INT", "NUM_UINT", "STRING", "BYTES", "IDENTIFIER", "NEWLINE", "CONDITION_DEF_END", - "CONDITION_PARAM_CONTAINER", "CONDITION_PARAM_TYPE", "CONDITION_PARAM_TYPE_LESS", - "CONDITION_PARAM_TYPE_GREATER", "CONDITION_OPEN", "CONDITION_COLON", - "CONDITION_COMMA", "CONDITION_WS", "CONDITION_NAME", + "NUM_INT", "NUM_UINT", "STRING", "BYTES", "IDENTIFIER", "EXTENDED_IDENTIFIER", + "NEWLINE", "CONDITION_DEF_END", "CONDITION_PARAM_CONTAINER", "CONDITION_PARAM_TYPE", + "CONDITION_PARAM_TYPE_LESS", "CONDITION_PARAM_TYPE_GREATER", "CONDITION_OPEN", + "CONDITION_COLON", "CONDITION_COMMA", "CONDITION_WS", "CONDITION_NAME", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 0, 56, 694, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, + 4, 0, 57, 717, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, @@ -92,312 +93,325 @@ func openfgalexerLexerInit() { 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, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, - 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, - 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, - 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, - 9, 1, 9, 1, 10, 4, 10, 198, 8, 10, 11, 10, 12, 10, 199, 1, 10, 1, 10, 4, - 10, 204, 8, 10, 11, 10, 12, 10, 205, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, - 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, - 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, - 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, - 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, - 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, - 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, - 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, - 26, 1, 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, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, - 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, - 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, - 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, - 1, 47, 3, 47, 340, 8, 47, 1, 47, 4, 47, 343, 8, 47, 11, 47, 12, 47, 344, - 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 355, 8, - 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, - 1, 53, 1, 53, 1, 53, 1, 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, 388, 8, 54, 1, 55, 4, 55, 391, 8, 55, 11, 55, 12, 55, 392, 1, 56, - 1, 56, 1, 56, 1, 56, 5, 56, 399, 8, 56, 10, 56, 12, 56, 402, 9, 56, 1, - 56, 1, 56, 1, 57, 4, 57, 407, 8, 57, 11, 57, 12, 57, 408, 1, 57, 1, 57, - 4, 57, 413, 8, 57, 11, 57, 12, 57, 414, 1, 57, 3, 57, 418, 8, 57, 1, 57, - 4, 57, 421, 8, 57, 11, 57, 12, 57, 422, 1, 57, 1, 57, 1, 57, 1, 57, 4, - 57, 429, 8, 57, 11, 57, 12, 57, 430, 1, 57, 3, 57, 434, 8, 57, 3, 57, 436, - 8, 57, 1, 58, 4, 58, 439, 8, 58, 11, 58, 12, 58, 440, 1, 58, 1, 58, 1, - 58, 1, 58, 4, 58, 447, 8, 58, 11, 58, 12, 58, 448, 3, 58, 451, 8, 58, 1, - 59, 4, 59, 454, 8, 59, 11, 59, 12, 59, 455, 1, 59, 1, 59, 1, 59, 1, 59, - 1, 59, 1, 59, 4, 59, 464, 8, 59, 11, 59, 12, 59, 465, 1, 59, 1, 59, 3, - 59, 470, 8, 59, 1, 60, 1, 60, 1, 60, 5, 60, 475, 8, 60, 10, 60, 12, 60, - 478, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 484, 8, 60, 10, 60, 12, - 60, 487, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, - 496, 8, 60, 10, 60, 12, 60, 499, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, - 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 510, 8, 60, 10, 60, 12, 60, 513, - 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 521, 8, 60, 10, - 60, 12, 60, 524, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 531, - 8, 60, 10, 60, 12, 60, 534, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, - 60, 1, 60, 1, 60, 5, 60, 544, 8, 60, 10, 60, 12, 60, 547, 9, 60, 1, 60, - 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 559, - 8, 60, 10, 60, 12, 60, 562, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 568, - 8, 60, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 3, 62, 575, 8, 62, 1, 62, 1, - 62, 1, 62, 1, 62, 5, 62, 581, 8, 62, 10, 62, 12, 62, 584, 9, 62, 1, 63, - 3, 63, 587, 8, 63, 1, 63, 3, 63, 590, 8, 63, 1, 63, 1, 63, 3, 63, 594, - 8, 63, 1, 63, 3, 63, 597, 8, 63, 1, 63, 3, 63, 600, 8, 63, 1, 64, 1, 64, - 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, - 65, 614, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, - 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, - 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, - 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, - 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, - 665, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, - 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, - 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 4, 497, - 511, 545, 560, 0, 74, 2, 11, 4, 1, 6, 2, 8, 12, 10, 13, 12, 14, 14, 15, - 16, 16, 18, 17, 20, 18, 22, 19, 24, 20, 26, 21, 28, 22, 30, 23, 32, 24, - 34, 25, 36, 26, 38, 27, 40, 28, 42, 29, 44, 3, 46, 30, 48, 31, 50, 4, 52, - 32, 54, 33, 56, 5, 58, 34, 60, 35, 62, 36, 64, 7, 66, 8, 68, 37, 70, 38, - 72, 39, 74, 40, 76, 41, 78, 42, 80, 43, 82, 44, 84, 45, 86, 46, 88, 47, - 90, 0, 92, 0, 94, 0, 96, 0, 98, 0, 100, 0, 102, 0, 104, 0, 106, 0, 108, - 0, 110, 0, 112, 9, 114, 48, 116, 49, 118, 50, 120, 51, 122, 52, 124, 53, - 126, 10, 128, 54, 130, 0, 132, 55, 134, 56, 136, 0, 138, 0, 140, 0, 142, - 0, 144, 0, 146, 0, 148, 0, 2, 0, 1, 16, 2, 0, 65, 90, 97, 122, 2, 0, 69, - 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, - 82, 82, 114, 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96, 98, 102, 102, - 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120, 120, 3, 0, 9, - 9, 12, 12, 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117, 4, 0, 10, 10, - 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 1, 0, 92, - 92, 3, 0, 10, 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39, 39, 2, 0, 66, - 66, 98, 98, 742, 0, 2, 1, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 6, 1, 0, 0, 0, - 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, - 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, - 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, - 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, - 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, - 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, - 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, - 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, - 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, - 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, - 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, - 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, - 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, - 1, 0, 0, 0, 1, 130, 1, 0, 0, 0, 1, 132, 1, 0, 0, 0, 1, 134, 1, 0, 0, 0, - 1, 136, 1, 0, 0, 0, 1, 138, 1, 0, 0, 0, 1, 140, 1, 0, 0, 0, 1, 142, 1, - 0, 0, 0, 1, 144, 1, 0, 0, 0, 1, 146, 1, 0, 0, 0, 1, 148, 1, 0, 0, 0, 2, - 150, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 6, 154, 1, 0, 0, 0, 8, 156, 1, 0, - 0, 0, 10, 160, 1, 0, 0, 0, 12, 163, 1, 0, 0, 0, 14, 171, 1, 0, 0, 0, 16, - 176, 1, 0, 0, 0, 18, 183, 1, 0, 0, 0, 20, 189, 1, 0, 0, 0, 22, 197, 1, - 0, 0, 0, 24, 207, 1, 0, 0, 0, 26, 214, 1, 0, 0, 0, 28, 219, 1, 0, 0, 0, - 30, 231, 1, 0, 0, 0, 32, 241, 1, 0, 0, 0, 34, 250, 1, 0, 0, 0, 36, 257, - 1, 0, 0, 0, 38, 262, 1, 0, 0, 0, 40, 265, 1, 0, 0, 0, 42, 268, 1, 0, 0, - 0, 44, 271, 1, 0, 0, 0, 46, 273, 1, 0, 0, 0, 48, 276, 1, 0, 0, 0, 50, 279, - 1, 0, 0, 0, 52, 281, 1, 0, 0, 0, 54, 284, 1, 0, 0, 0, 56, 287, 1, 0, 0, - 0, 58, 289, 1, 0, 0, 0, 60, 291, 1, 0, 0, 0, 62, 293, 1, 0, 0, 0, 64, 295, - 1, 0, 0, 0, 66, 297, 1, 0, 0, 0, 68, 299, 1, 0, 0, 0, 70, 301, 1, 0, 0, - 0, 72, 303, 1, 0, 0, 0, 74, 305, 1, 0, 0, 0, 76, 307, 1, 0, 0, 0, 78, 309, - 1, 0, 0, 0, 80, 311, 1, 0, 0, 0, 82, 313, 1, 0, 0, 0, 84, 315, 1, 0, 0, - 0, 86, 320, 1, 0, 0, 0, 88, 326, 1, 0, 0, 0, 90, 331, 1, 0, 0, 0, 92, 333, - 1, 0, 0, 0, 94, 335, 1, 0, 0, 0, 96, 337, 1, 0, 0, 0, 98, 346, 1, 0, 0, - 0, 100, 348, 1, 0, 0, 0, 102, 354, 1, 0, 0, 0, 104, 356, 1, 0, 0, 0, 106, - 359, 1, 0, 0, 0, 108, 364, 1, 0, 0, 0, 110, 387, 1, 0, 0, 0, 112, 390, - 1, 0, 0, 0, 114, 394, 1, 0, 0, 0, 116, 435, 1, 0, 0, 0, 118, 450, 1, 0, - 0, 0, 120, 469, 1, 0, 0, 0, 122, 567, 1, 0, 0, 0, 124, 569, 1, 0, 0, 0, - 126, 574, 1, 0, 0, 0, 128, 586, 1, 0, 0, 0, 130, 601, 1, 0, 0, 0, 132, - 613, 1, 0, 0, 0, 134, 664, 1, 0, 0, 0, 136, 666, 1, 0, 0, 0, 138, 670, - 1, 0, 0, 0, 140, 674, 1, 0, 0, 0, 142, 678, 1, 0, 0, 0, 144, 682, 1, 0, - 0, 0, 146, 686, 1, 0, 0, 0, 148, 690, 1, 0, 0, 0, 150, 151, 5, 35, 0, 0, - 151, 3, 1, 0, 0, 0, 152, 153, 5, 58, 0, 0, 153, 5, 1, 0, 0, 0, 154, 155, - 5, 44, 0, 0, 155, 7, 1, 0, 0, 0, 156, 157, 5, 97, 0, 0, 157, 158, 5, 110, - 0, 0, 158, 159, 5, 100, 0, 0, 159, 9, 1, 0, 0, 0, 160, 161, 5, 111, 0, - 0, 161, 162, 5, 114, 0, 0, 162, 11, 1, 0, 0, 0, 163, 164, 5, 98, 0, 0, - 164, 165, 5, 117, 0, 0, 165, 166, 5, 116, 0, 0, 166, 167, 5, 32, 0, 0, - 167, 168, 5, 110, 0, 0, 168, 169, 5, 111, 0, 0, 169, 170, 5, 116, 0, 0, - 170, 13, 1, 0, 0, 0, 171, 172, 5, 102, 0, 0, 172, 173, 5, 114, 0, 0, 173, - 174, 5, 111, 0, 0, 174, 175, 5, 109, 0, 0, 175, 15, 1, 0, 0, 0, 176, 177, - 5, 109, 0, 0, 177, 178, 5, 111, 0, 0, 178, 179, 5, 100, 0, 0, 179, 180, - 5, 117, 0, 0, 180, 181, 5, 108, 0, 0, 181, 182, 5, 101, 0, 0, 182, 17, - 1, 0, 0, 0, 183, 184, 5, 109, 0, 0, 184, 185, 5, 111, 0, 0, 185, 186, 5, - 100, 0, 0, 186, 187, 5, 101, 0, 0, 187, 188, 5, 108, 0, 0, 188, 19, 1, - 0, 0, 0, 189, 190, 5, 115, 0, 0, 190, 191, 5, 99, 0, 0, 191, 192, 5, 104, - 0, 0, 192, 193, 5, 101, 0, 0, 193, 194, 5, 109, 0, 0, 194, 195, 5, 97, - 0, 0, 195, 21, 1, 0, 0, 0, 196, 198, 3, 94, 46, 0, 197, 196, 1, 0, 0, 0, - 198, 199, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, - 201, 1, 0, 0, 0, 201, 203, 5, 46, 0, 0, 202, 204, 3, 94, 46, 0, 203, 202, - 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 203, 1, 0, 0, 0, 205, 206, 1, 0, - 0, 0, 206, 23, 1, 0, 0, 0, 207, 208, 5, 101, 0, 0, 208, 209, 5, 120, 0, - 0, 209, 210, 5, 116, 0, 0, 210, 211, 5, 101, 0, 0, 211, 212, 5, 110, 0, - 0, 212, 213, 5, 100, 0, 0, 213, 25, 1, 0, 0, 0, 214, 215, 5, 116, 0, 0, - 215, 216, 5, 121, 0, 0, 216, 217, 5, 112, 0, 0, 217, 218, 5, 101, 0, 0, - 218, 27, 1, 0, 0, 0, 219, 220, 5, 99, 0, 0, 220, 221, 5, 111, 0, 0, 221, - 222, 5, 110, 0, 0, 222, 223, 5, 100, 0, 0, 223, 224, 5, 105, 0, 0, 224, - 225, 5, 116, 0, 0, 225, 226, 5, 105, 0, 0, 226, 227, 5, 111, 0, 0, 227, - 228, 5, 110, 0, 0, 228, 229, 1, 0, 0, 0, 229, 230, 6, 13, 0, 0, 230, 29, - 1, 0, 0, 0, 231, 232, 5, 114, 0, 0, 232, 233, 5, 101, 0, 0, 233, 234, 5, - 108, 0, 0, 234, 235, 5, 97, 0, 0, 235, 236, 5, 116, 0, 0, 236, 237, 5, - 105, 0, 0, 237, 238, 5, 111, 0, 0, 238, 239, 5, 110, 0, 0, 239, 240, 5, - 115, 0, 0, 240, 31, 1, 0, 0, 0, 241, 242, 5, 114, 0, 0, 242, 243, 5, 101, - 0, 0, 243, 244, 5, 108, 0, 0, 244, 245, 5, 97, 0, 0, 245, 246, 5, 116, - 0, 0, 246, 247, 5, 105, 0, 0, 247, 248, 5, 111, 0, 0, 248, 249, 5, 110, - 0, 0, 249, 33, 1, 0, 0, 0, 250, 251, 5, 100, 0, 0, 251, 252, 5, 101, 0, - 0, 252, 253, 5, 102, 0, 0, 253, 254, 5, 105, 0, 0, 254, 255, 5, 110, 0, - 0, 255, 256, 5, 101, 0, 0, 256, 35, 1, 0, 0, 0, 257, 258, 5, 119, 0, 0, - 258, 259, 5, 105, 0, 0, 259, 260, 5, 116, 0, 0, 260, 261, 5, 104, 0, 0, - 261, 37, 1, 0, 0, 0, 262, 263, 5, 61, 0, 0, 263, 264, 5, 61, 0, 0, 264, - 39, 1, 0, 0, 0, 265, 266, 5, 33, 0, 0, 266, 267, 5, 61, 0, 0, 267, 41, - 1, 0, 0, 0, 268, 269, 5, 105, 0, 0, 269, 270, 5, 110, 0, 0, 270, 43, 1, - 0, 0, 0, 271, 272, 5, 60, 0, 0, 272, 45, 1, 0, 0, 0, 273, 274, 5, 60, 0, - 0, 274, 275, 5, 61, 0, 0, 275, 47, 1, 0, 0, 0, 276, 277, 5, 62, 0, 0, 277, - 278, 5, 61, 0, 0, 278, 49, 1, 0, 0, 0, 279, 280, 5, 62, 0, 0, 280, 51, - 1, 0, 0, 0, 281, 282, 5, 38, 0, 0, 282, 283, 5, 38, 0, 0, 283, 53, 1, 0, - 0, 0, 284, 285, 5, 124, 0, 0, 285, 286, 5, 124, 0, 0, 286, 55, 1, 0, 0, - 0, 287, 288, 5, 91, 0, 0, 288, 57, 1, 0, 0, 0, 289, 290, 5, 93, 0, 0, 290, - 59, 1, 0, 0, 0, 291, 292, 5, 123, 0, 0, 292, 61, 1, 0, 0, 0, 293, 294, - 5, 125, 0, 0, 294, 63, 1, 0, 0, 0, 295, 296, 5, 40, 0, 0, 296, 65, 1, 0, - 0, 0, 297, 298, 5, 41, 0, 0, 298, 67, 1, 0, 0, 0, 299, 300, 5, 46, 0, 0, - 300, 69, 1, 0, 0, 0, 301, 302, 5, 45, 0, 0, 302, 71, 1, 0, 0, 0, 303, 304, - 5, 33, 0, 0, 304, 73, 1, 0, 0, 0, 305, 306, 5, 63, 0, 0, 306, 75, 1, 0, - 0, 0, 307, 308, 5, 43, 0, 0, 308, 77, 1, 0, 0, 0, 309, 310, 5, 42, 0, 0, - 310, 79, 1, 0, 0, 0, 311, 312, 5, 47, 0, 0, 312, 81, 1, 0, 0, 0, 313, 314, - 5, 37, 0, 0, 314, 83, 1, 0, 0, 0, 315, 316, 5, 116, 0, 0, 316, 317, 5, - 114, 0, 0, 317, 318, 5, 117, 0, 0, 318, 319, 5, 101, 0, 0, 319, 85, 1, - 0, 0, 0, 320, 321, 5, 102, 0, 0, 321, 322, 5, 97, 0, 0, 322, 323, 5, 108, - 0, 0, 323, 324, 5, 115, 0, 0, 324, 325, 5, 101, 0, 0, 325, 87, 1, 0, 0, - 0, 326, 327, 5, 110, 0, 0, 327, 328, 5, 117, 0, 0, 328, 329, 5, 108, 0, - 0, 329, 330, 5, 108, 0, 0, 330, 89, 1, 0, 0, 0, 331, 332, 5, 92, 0, 0, - 332, 91, 1, 0, 0, 0, 333, 334, 7, 0, 0, 0, 334, 93, 1, 0, 0, 0, 335, 336, - 2, 48, 57, 0, 336, 95, 1, 0, 0, 0, 337, 339, 7, 1, 0, 0, 338, 340, 7, 2, - 0, 0, 339, 338, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 1, 0, 0, 0, - 341, 343, 3, 94, 46, 0, 342, 341, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, - 342, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 97, 1, 0, 0, 0, 346, 347, 7, - 3, 0, 0, 347, 99, 1, 0, 0, 0, 348, 349, 7, 4, 0, 0, 349, 101, 1, 0, 0, - 0, 350, 355, 3, 104, 51, 0, 351, 355, 3, 108, 53, 0, 352, 355, 3, 110, - 54, 0, 353, 355, 3, 106, 52, 0, 354, 350, 1, 0, 0, 0, 354, 351, 1, 0, 0, - 0, 354, 352, 1, 0, 0, 0, 354, 353, 1, 0, 0, 0, 355, 103, 1, 0, 0, 0, 356, - 357, 3, 90, 44, 0, 357, 358, 7, 5, 0, 0, 358, 105, 1, 0, 0, 0, 359, 360, - 3, 90, 44, 0, 360, 361, 2, 48, 51, 0, 361, 362, 2, 48, 55, 0, 362, 363, - 2, 48, 55, 0, 363, 107, 1, 0, 0, 0, 364, 365, 3, 90, 44, 0, 365, 366, 7, - 6, 0, 0, 366, 367, 3, 98, 48, 0, 367, 368, 3, 98, 48, 0, 368, 109, 1, 0, - 0, 0, 369, 370, 3, 90, 44, 0, 370, 371, 5, 117, 0, 0, 371, 372, 3, 98, - 48, 0, 372, 373, 3, 98, 48, 0, 373, 374, 3, 98, 48, 0, 374, 375, 3, 98, - 48, 0, 375, 388, 1, 0, 0, 0, 376, 377, 3, 90, 44, 0, 377, 378, 5, 85, 0, - 0, 378, 379, 3, 98, 48, 0, 379, 380, 3, 98, 48, 0, 380, 381, 3, 98, 48, - 0, 381, 382, 3, 98, 48, 0, 382, 383, 3, 98, 48, 0, 383, 384, 3, 98, 48, - 0, 384, 385, 3, 98, 48, 0, 385, 386, 3, 98, 48, 0, 386, 388, 1, 0, 0, 0, - 387, 369, 1, 0, 0, 0, 387, 376, 1, 0, 0, 0, 388, 111, 1, 0, 0, 0, 389, - 391, 7, 7, 0, 0, 390, 389, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 390, - 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 113, 1, 0, 0, 0, 394, 395, 5, 47, - 0, 0, 395, 396, 5, 47, 0, 0, 396, 400, 1, 0, 0, 0, 397, 399, 8, 8, 0, 0, - 398, 397, 1, 0, 0, 0, 399, 402, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 400, - 401, 1, 0, 0, 0, 401, 403, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 403, 404, - 6, 56, 1, 0, 404, 115, 1, 0, 0, 0, 405, 407, 3, 94, 46, 0, 406, 405, 1, - 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 406, 1, 0, 0, 0, 408, 409, 1, 0, 0, - 0, 409, 410, 1, 0, 0, 0, 410, 412, 5, 46, 0, 0, 411, 413, 3, 94, 46, 0, - 412, 411, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 414, - 415, 1, 0, 0, 0, 415, 417, 1, 0, 0, 0, 416, 418, 3, 96, 47, 0, 417, 416, - 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 436, 1, 0, 0, 0, 419, 421, 3, 94, - 46, 0, 420, 419, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, - 422, 423, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 425, 3, 96, 47, 0, 425, - 436, 1, 0, 0, 0, 426, 428, 5, 46, 0, 0, 427, 429, 3, 94, 46, 0, 428, 427, - 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, - 0, 0, 431, 433, 1, 0, 0, 0, 432, 434, 3, 96, 47, 0, 433, 432, 1, 0, 0, - 0, 433, 434, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 406, 1, 0, 0, 0, 435, - 420, 1, 0, 0, 0, 435, 426, 1, 0, 0, 0, 436, 117, 1, 0, 0, 0, 437, 439, - 3, 94, 46, 0, 438, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 438, 1, - 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 451, 1, 0, 0, 0, 442, 443, 5, 48, 0, - 0, 443, 444, 5, 120, 0, 0, 444, 446, 1, 0, 0, 0, 445, 447, 3, 98, 48, 0, - 446, 445, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 446, 1, 0, 0, 0, 448, - 449, 1, 0, 0, 0, 449, 451, 1, 0, 0, 0, 450, 438, 1, 0, 0, 0, 450, 442, - 1, 0, 0, 0, 451, 119, 1, 0, 0, 0, 452, 454, 3, 94, 46, 0, 453, 452, 1, - 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, 455, 456, 1, 0, 0, - 0, 456, 457, 1, 0, 0, 0, 457, 458, 7, 9, 0, 0, 458, 470, 1, 0, 0, 0, 459, - 460, 5, 48, 0, 0, 460, 461, 5, 120, 0, 0, 461, 463, 1, 0, 0, 0, 462, 464, - 3, 98, 48, 0, 463, 462, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 463, 1, - 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 468, 7, 9, 0, - 0, 468, 470, 1, 0, 0, 0, 469, 453, 1, 0, 0, 0, 469, 459, 1, 0, 0, 0, 470, - 121, 1, 0, 0, 0, 471, 476, 5, 34, 0, 0, 472, 475, 3, 102, 50, 0, 473, 475, - 8, 10, 0, 0, 474, 472, 1, 0, 0, 0, 474, 473, 1, 0, 0, 0, 475, 478, 1, 0, - 0, 0, 476, 474, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 479, 1, 0, 0, 0, - 478, 476, 1, 0, 0, 0, 479, 568, 5, 34, 0, 0, 480, 485, 5, 39, 0, 0, 481, - 484, 3, 102, 50, 0, 482, 484, 8, 11, 0, 0, 483, 481, 1, 0, 0, 0, 483, 482, - 1, 0, 0, 0, 484, 487, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 485, 486, 1, 0, - 0, 0, 486, 488, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 488, 568, 5, 39, 0, 0, - 489, 490, 5, 34, 0, 0, 490, 491, 5, 34, 0, 0, 491, 492, 5, 34, 0, 0, 492, - 497, 1, 0, 0, 0, 493, 496, 3, 102, 50, 0, 494, 496, 8, 12, 0, 0, 495, 493, - 1, 0, 0, 0, 495, 494, 1, 0, 0, 0, 496, 499, 1, 0, 0, 0, 497, 498, 1, 0, - 0, 0, 497, 495, 1, 0, 0, 0, 498, 500, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, - 500, 501, 5, 34, 0, 0, 501, 502, 5, 34, 0, 0, 502, 568, 5, 34, 0, 0, 503, - 504, 5, 39, 0, 0, 504, 505, 5, 39, 0, 0, 505, 506, 5, 39, 0, 0, 506, 511, - 1, 0, 0, 0, 507, 510, 3, 102, 50, 0, 508, 510, 8, 12, 0, 0, 509, 507, 1, - 0, 0, 0, 509, 508, 1, 0, 0, 0, 510, 513, 1, 0, 0, 0, 511, 512, 1, 0, 0, - 0, 511, 509, 1, 0, 0, 0, 512, 514, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 514, - 515, 5, 39, 0, 0, 515, 516, 5, 39, 0, 0, 516, 568, 5, 39, 0, 0, 517, 518, - 3, 100, 49, 0, 518, 522, 5, 34, 0, 0, 519, 521, 8, 13, 0, 0, 520, 519, - 1, 0, 0, 0, 521, 524, 1, 0, 0, 0, 522, 520, 1, 0, 0, 0, 522, 523, 1, 0, - 0, 0, 523, 525, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 525, 526, 5, 34, 0, 0, - 526, 568, 1, 0, 0, 0, 527, 528, 3, 100, 49, 0, 528, 532, 5, 39, 0, 0, 529, - 531, 8, 14, 0, 0, 530, 529, 1, 0, 0, 0, 531, 534, 1, 0, 0, 0, 532, 530, - 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 535, 1, 0, 0, 0, 534, 532, 1, 0, - 0, 0, 535, 536, 5, 39, 0, 0, 536, 568, 1, 0, 0, 0, 537, 538, 3, 100, 49, - 0, 538, 539, 5, 34, 0, 0, 539, 540, 5, 34, 0, 0, 540, 541, 5, 34, 0, 0, - 541, 545, 1, 0, 0, 0, 542, 544, 9, 0, 0, 0, 543, 542, 1, 0, 0, 0, 544, - 547, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 546, 548, - 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 549, 5, 34, 0, 0, 549, 550, 5, 34, - 0, 0, 550, 551, 5, 34, 0, 0, 551, 568, 1, 0, 0, 0, 552, 553, 3, 100, 49, - 0, 553, 554, 5, 39, 0, 0, 554, 555, 5, 39, 0, 0, 555, 556, 5, 39, 0, 0, - 556, 560, 1, 0, 0, 0, 557, 559, 9, 0, 0, 0, 558, 557, 1, 0, 0, 0, 559, - 562, 1, 0, 0, 0, 560, 561, 1, 0, 0, 0, 560, 558, 1, 0, 0, 0, 561, 563, - 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 563, 564, 5, 39, 0, 0, 564, 565, 5, 39, - 0, 0, 565, 566, 5, 39, 0, 0, 566, 568, 1, 0, 0, 0, 567, 471, 1, 0, 0, 0, - 567, 480, 1, 0, 0, 0, 567, 489, 1, 0, 0, 0, 567, 503, 1, 0, 0, 0, 567, - 517, 1, 0, 0, 0, 567, 527, 1, 0, 0, 0, 567, 537, 1, 0, 0, 0, 567, 552, - 1, 0, 0, 0, 568, 123, 1, 0, 0, 0, 569, 570, 7, 15, 0, 0, 570, 571, 3, 122, - 60, 0, 571, 125, 1, 0, 0, 0, 572, 575, 3, 92, 45, 0, 573, 575, 5, 95, 0, - 0, 574, 572, 1, 0, 0, 0, 574, 573, 1, 0, 0, 0, 575, 582, 1, 0, 0, 0, 576, - 581, 3, 92, 45, 0, 577, 581, 3, 94, 46, 0, 578, 581, 5, 95, 0, 0, 579, - 581, 3, 70, 34, 0, 580, 576, 1, 0, 0, 0, 580, 577, 1, 0, 0, 0, 580, 578, - 1, 0, 0, 0, 580, 579, 1, 0, 0, 0, 581, 584, 1, 0, 0, 0, 582, 580, 1, 0, - 0, 0, 582, 583, 1, 0, 0, 0, 583, 127, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, - 585, 587, 3, 112, 55, 0, 586, 585, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, - 593, 1, 0, 0, 0, 588, 590, 5, 13, 0, 0, 589, 588, 1, 0, 0, 0, 589, 590, - 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 594, 5, 10, 0, 0, 592, 594, 2, 12, - 13, 0, 593, 589, 1, 0, 0, 0, 593, 592, 1, 0, 0, 0, 594, 596, 1, 0, 0, 0, - 595, 597, 3, 112, 55, 0, 596, 595, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, - 599, 1, 0, 0, 0, 598, 600, 3, 128, 63, 0, 599, 598, 1, 0, 0, 0, 599, 600, - 1, 0, 0, 0, 600, 129, 1, 0, 0, 0, 601, 602, 3, 66, 32, 0, 602, 603, 1, - 0, 0, 0, 603, 604, 6, 64, 2, 0, 604, 605, 6, 64, 3, 0, 605, 131, 1, 0, - 0, 0, 606, 607, 5, 109, 0, 0, 607, 608, 5, 97, 0, 0, 608, 614, 5, 112, - 0, 0, 609, 610, 5, 108, 0, 0, 610, 611, 5, 105, 0, 0, 611, 612, 5, 115, - 0, 0, 612, 614, 5, 116, 0, 0, 613, 606, 1, 0, 0, 0, 613, 609, 1, 0, 0, - 0, 614, 133, 1, 0, 0, 0, 615, 616, 5, 98, 0, 0, 616, 617, 5, 111, 0, 0, - 617, 618, 5, 111, 0, 0, 618, 665, 5, 108, 0, 0, 619, 620, 5, 115, 0, 0, - 620, 621, 5, 116, 0, 0, 621, 622, 5, 114, 0, 0, 622, 623, 5, 105, 0, 0, - 623, 624, 5, 110, 0, 0, 624, 665, 5, 103, 0, 0, 625, 626, 5, 105, 0, 0, - 626, 627, 5, 110, 0, 0, 627, 665, 5, 116, 0, 0, 628, 629, 5, 117, 0, 0, - 629, 630, 5, 105, 0, 0, 630, 631, 5, 110, 0, 0, 631, 665, 5, 116, 0, 0, - 632, 633, 5, 100, 0, 0, 633, 634, 5, 111, 0, 0, 634, 635, 5, 117, 0, 0, - 635, 636, 5, 98, 0, 0, 636, 637, 5, 108, 0, 0, 637, 665, 5, 101, 0, 0, - 638, 639, 5, 100, 0, 0, 639, 640, 5, 117, 0, 0, 640, 641, 5, 114, 0, 0, - 641, 642, 5, 97, 0, 0, 642, 643, 5, 116, 0, 0, 643, 644, 5, 105, 0, 0, - 644, 645, 5, 111, 0, 0, 645, 665, 5, 110, 0, 0, 646, 647, 5, 116, 0, 0, - 647, 648, 5, 105, 0, 0, 648, 649, 5, 109, 0, 0, 649, 650, 5, 101, 0, 0, - 650, 651, 5, 115, 0, 0, 651, 652, 5, 116, 0, 0, 652, 653, 5, 97, 0, 0, - 653, 654, 5, 109, 0, 0, 654, 665, 5, 112, 0, 0, 655, 656, 5, 105, 0, 0, - 656, 657, 5, 112, 0, 0, 657, 658, 5, 97, 0, 0, 658, 659, 5, 100, 0, 0, - 659, 660, 5, 100, 0, 0, 660, 661, 5, 114, 0, 0, 661, 662, 5, 101, 0, 0, - 662, 663, 5, 115, 0, 0, 663, 665, 5, 115, 0, 0, 664, 615, 1, 0, 0, 0, 664, - 619, 1, 0, 0, 0, 664, 625, 1, 0, 0, 0, 664, 628, 1, 0, 0, 0, 664, 632, - 1, 0, 0, 0, 664, 638, 1, 0, 0, 0, 664, 646, 1, 0, 0, 0, 664, 655, 1, 0, - 0, 0, 665, 135, 1, 0, 0, 0, 666, 667, 3, 44, 21, 0, 667, 668, 1, 0, 0, - 0, 668, 669, 6, 67, 4, 0, 669, 137, 1, 0, 0, 0, 670, 671, 3, 50, 24, 0, - 671, 672, 1, 0, 0, 0, 672, 673, 6, 68, 5, 0, 673, 139, 1, 0, 0, 0, 674, - 675, 3, 64, 31, 0, 675, 676, 1, 0, 0, 0, 676, 677, 6, 69, 6, 0, 677, 141, - 1, 0, 0, 0, 678, 679, 3, 4, 1, 0, 679, 680, 1, 0, 0, 0, 680, 681, 6, 70, - 7, 0, 681, 143, 1, 0, 0, 0, 682, 683, 3, 6, 2, 0, 683, 684, 1, 0, 0, 0, - 684, 685, 6, 71, 8, 0, 685, 145, 1, 0, 0, 0, 686, 687, 3, 112, 55, 0, 687, - 688, 1, 0, 0, 0, 688, 689, 6, 72, 9, 0, 689, 147, 1, 0, 0, 0, 690, 691, - 3, 126, 62, 0, 691, 692, 1, 0, 0, 0, 692, 693, 6, 73, 10, 0, 693, 149, - 1, 0, 0, 0, 46, 0, 1, 199, 205, 339, 344, 354, 387, 392, 400, 408, 414, - 417, 422, 430, 433, 435, 440, 448, 450, 455, 465, 469, 474, 476, 483, 485, - 495, 497, 509, 511, 522, 532, 545, 560, 567, 574, 580, 582, 586, 589, 593, - 596, 599, 613, 664, 11, 5, 1, 0, 0, 1, 0, 7, 8, 0, 4, 0, 0, 7, 3, 0, 7, - 4, 0, 7, 7, 0, 7, 1, 0, 7, 2, 0, 7, 9, 0, 7, 10, 0, + 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, + 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, + 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, + 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, + 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 4, 10, 200, 8, 10, 11, 10, 12, 10, 201, + 1, 10, 1, 10, 4, 10, 206, 8, 10, 11, 10, 12, 10, 207, 1, 11, 1, 11, 1, + 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, + 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, + 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, + 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, + 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, + 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, + 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, + 1, 25, 1, 26, 1, 26, 1, 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, 34, 1, 34, 1, 35, + 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, + 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, + 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, + 46, 1, 46, 1, 47, 1, 47, 3, 47, 342, 8, 47, 1, 47, 4, 47, 345, 8, 47, 11, + 47, 12, 47, 346, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, + 3, 50, 357, 8, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, + 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 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, 390, 8, 54, 1, 55, 4, 55, 393, 8, 55, 11, 55, + 12, 55, 394, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 401, 8, 56, 10, 56, 12, + 56, 404, 9, 56, 1, 56, 1, 56, 1, 57, 4, 57, 409, 8, 57, 11, 57, 12, 57, + 410, 1, 57, 1, 57, 4, 57, 415, 8, 57, 11, 57, 12, 57, 416, 1, 57, 3, 57, + 420, 8, 57, 1, 57, 4, 57, 423, 8, 57, 11, 57, 12, 57, 424, 1, 57, 1, 57, + 1, 57, 1, 57, 4, 57, 431, 8, 57, 11, 57, 12, 57, 432, 1, 57, 3, 57, 436, + 8, 57, 3, 57, 438, 8, 57, 1, 58, 4, 58, 441, 8, 58, 11, 58, 12, 58, 442, + 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 449, 8, 58, 11, 58, 12, 58, 450, 3, + 58, 453, 8, 58, 1, 59, 4, 59, 456, 8, 59, 11, 59, 12, 59, 457, 1, 59, 1, + 59, 1, 59, 1, 59, 1, 59, 1, 59, 4, 59, 466, 8, 59, 11, 59, 12, 59, 467, + 1, 59, 1, 59, 3, 59, 472, 8, 59, 1, 60, 1, 60, 1, 60, 5, 60, 477, 8, 60, + 10, 60, 12, 60, 480, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 486, 8, + 60, 10, 60, 12, 60, 489, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, + 1, 60, 5, 60, 498, 8, 60, 10, 60, 12, 60, 501, 9, 60, 1, 60, 1, 60, 1, + 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 512, 8, 60, 10, 60, + 12, 60, 515, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 523, + 8, 60, 10, 60, 12, 60, 526, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, + 60, 533, 8, 60, 10, 60, 12, 60, 536, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, + 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 546, 8, 60, 10, 60, 12, 60, 549, 9, + 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, + 5, 60, 561, 8, 60, 10, 60, 12, 60, 564, 9, 60, 1, 60, 1, 60, 1, 60, 1, + 60, 3, 60, 570, 8, 60, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 3, 62, 577, 8, + 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 583, 8, 62, 10, 62, 12, 62, 586, + 9, 62, 1, 63, 1, 63, 3, 63, 590, 8, 63, 1, 63, 1, 63, 1, 63, 3, 63, 595, + 8, 63, 1, 63, 1, 63, 1, 63, 4, 63, 600, 8, 63, 11, 63, 12, 63, 601, 5, + 63, 604, 8, 63, 10, 63, 12, 63, 607, 9, 63, 1, 64, 3, 64, 610, 8, 64, 1, + 64, 3, 64, 613, 8, 64, 1, 64, 1, 64, 3, 64, 617, 8, 64, 1, 64, 3, 64, 620, + 8, 64, 1, 64, 3, 64, 623, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, + 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 637, 8, 66, 1, 67, + 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, + 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, + 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, + 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, + 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 688, 8, 67, 1, 68, 1, + 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, + 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, + 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 4, 499, 513, 547, 562, 0, 75, 2, + 11, 4, 1, 6, 2, 8, 12, 10, 13, 12, 14, 14, 15, 16, 16, 18, 17, 20, 18, + 22, 19, 24, 20, 26, 21, 28, 22, 30, 23, 32, 24, 34, 25, 36, 26, 38, 27, + 40, 28, 42, 29, 44, 3, 46, 30, 48, 31, 50, 4, 52, 32, 54, 33, 56, 5, 58, + 34, 60, 35, 62, 36, 64, 7, 66, 8, 68, 37, 70, 38, 72, 39, 74, 40, 76, 41, + 78, 42, 80, 43, 82, 44, 84, 45, 86, 46, 88, 47, 90, 0, 92, 0, 94, 0, 96, + 0, 98, 0, 100, 0, 102, 0, 104, 0, 106, 0, 108, 0, 110, 0, 112, 9, 114, + 48, 116, 49, 118, 50, 120, 51, 122, 52, 124, 53, 126, 10, 128, 54, 130, + 55, 132, 0, 134, 56, 136, 57, 138, 0, 140, 0, 142, 0, 144, 0, 146, 0, 148, + 0, 150, 0, 2, 0, 1, 16, 2, 0, 65, 90, 97, 122, 2, 0, 69, 69, 101, 101, + 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 82, 82, 114, + 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96, 98, 102, 102, 110, 110, + 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120, 120, 3, 0, 9, 9, 12, 12, + 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, + 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 1, 0, 92, 92, 3, 0, 10, + 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39, 39, 2, 0, 66, 66, 98, 98, + 773, 0, 2, 1, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, + 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, + 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, + 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, + 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, + 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, + 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, + 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, + 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, + 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, + 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, + 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, + 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, + 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, + 0, 130, 1, 0, 0, 0, 1, 132, 1, 0, 0, 0, 1, 134, 1, 0, 0, 0, 1, 136, 1, + 0, 0, 0, 1, 138, 1, 0, 0, 0, 1, 140, 1, 0, 0, 0, 1, 142, 1, 0, 0, 0, 1, + 144, 1, 0, 0, 0, 1, 146, 1, 0, 0, 0, 1, 148, 1, 0, 0, 0, 1, 150, 1, 0, + 0, 0, 2, 152, 1, 0, 0, 0, 4, 154, 1, 0, 0, 0, 6, 156, 1, 0, 0, 0, 8, 158, + 1, 0, 0, 0, 10, 162, 1, 0, 0, 0, 12, 165, 1, 0, 0, 0, 14, 173, 1, 0, 0, + 0, 16, 178, 1, 0, 0, 0, 18, 185, 1, 0, 0, 0, 20, 191, 1, 0, 0, 0, 22, 199, + 1, 0, 0, 0, 24, 209, 1, 0, 0, 0, 26, 216, 1, 0, 0, 0, 28, 221, 1, 0, 0, + 0, 30, 233, 1, 0, 0, 0, 32, 243, 1, 0, 0, 0, 34, 252, 1, 0, 0, 0, 36, 259, + 1, 0, 0, 0, 38, 264, 1, 0, 0, 0, 40, 267, 1, 0, 0, 0, 42, 270, 1, 0, 0, + 0, 44, 273, 1, 0, 0, 0, 46, 275, 1, 0, 0, 0, 48, 278, 1, 0, 0, 0, 50, 281, + 1, 0, 0, 0, 52, 283, 1, 0, 0, 0, 54, 286, 1, 0, 0, 0, 56, 289, 1, 0, 0, + 0, 58, 291, 1, 0, 0, 0, 60, 293, 1, 0, 0, 0, 62, 295, 1, 0, 0, 0, 64, 297, + 1, 0, 0, 0, 66, 299, 1, 0, 0, 0, 68, 301, 1, 0, 0, 0, 70, 303, 1, 0, 0, + 0, 72, 305, 1, 0, 0, 0, 74, 307, 1, 0, 0, 0, 76, 309, 1, 0, 0, 0, 78, 311, + 1, 0, 0, 0, 80, 313, 1, 0, 0, 0, 82, 315, 1, 0, 0, 0, 84, 317, 1, 0, 0, + 0, 86, 322, 1, 0, 0, 0, 88, 328, 1, 0, 0, 0, 90, 333, 1, 0, 0, 0, 92, 335, + 1, 0, 0, 0, 94, 337, 1, 0, 0, 0, 96, 339, 1, 0, 0, 0, 98, 348, 1, 0, 0, + 0, 100, 350, 1, 0, 0, 0, 102, 356, 1, 0, 0, 0, 104, 358, 1, 0, 0, 0, 106, + 361, 1, 0, 0, 0, 108, 366, 1, 0, 0, 0, 110, 389, 1, 0, 0, 0, 112, 392, + 1, 0, 0, 0, 114, 396, 1, 0, 0, 0, 116, 437, 1, 0, 0, 0, 118, 452, 1, 0, + 0, 0, 120, 471, 1, 0, 0, 0, 122, 569, 1, 0, 0, 0, 124, 571, 1, 0, 0, 0, + 126, 576, 1, 0, 0, 0, 128, 589, 1, 0, 0, 0, 130, 609, 1, 0, 0, 0, 132, + 624, 1, 0, 0, 0, 134, 636, 1, 0, 0, 0, 136, 687, 1, 0, 0, 0, 138, 689, + 1, 0, 0, 0, 140, 693, 1, 0, 0, 0, 142, 697, 1, 0, 0, 0, 144, 701, 1, 0, + 0, 0, 146, 705, 1, 0, 0, 0, 148, 709, 1, 0, 0, 0, 150, 713, 1, 0, 0, 0, + 152, 153, 5, 35, 0, 0, 153, 3, 1, 0, 0, 0, 154, 155, 5, 58, 0, 0, 155, + 5, 1, 0, 0, 0, 156, 157, 5, 44, 0, 0, 157, 7, 1, 0, 0, 0, 158, 159, 5, + 97, 0, 0, 159, 160, 5, 110, 0, 0, 160, 161, 5, 100, 0, 0, 161, 9, 1, 0, + 0, 0, 162, 163, 5, 111, 0, 0, 163, 164, 5, 114, 0, 0, 164, 11, 1, 0, 0, + 0, 165, 166, 5, 98, 0, 0, 166, 167, 5, 117, 0, 0, 167, 168, 5, 116, 0, + 0, 168, 169, 5, 32, 0, 0, 169, 170, 5, 110, 0, 0, 170, 171, 5, 111, 0, + 0, 171, 172, 5, 116, 0, 0, 172, 13, 1, 0, 0, 0, 173, 174, 5, 102, 0, 0, + 174, 175, 5, 114, 0, 0, 175, 176, 5, 111, 0, 0, 176, 177, 5, 109, 0, 0, + 177, 15, 1, 0, 0, 0, 178, 179, 5, 109, 0, 0, 179, 180, 5, 111, 0, 0, 180, + 181, 5, 100, 0, 0, 181, 182, 5, 117, 0, 0, 182, 183, 5, 108, 0, 0, 183, + 184, 5, 101, 0, 0, 184, 17, 1, 0, 0, 0, 185, 186, 5, 109, 0, 0, 186, 187, + 5, 111, 0, 0, 187, 188, 5, 100, 0, 0, 188, 189, 5, 101, 0, 0, 189, 190, + 5, 108, 0, 0, 190, 19, 1, 0, 0, 0, 191, 192, 5, 115, 0, 0, 192, 193, 5, + 99, 0, 0, 193, 194, 5, 104, 0, 0, 194, 195, 5, 101, 0, 0, 195, 196, 5, + 109, 0, 0, 196, 197, 5, 97, 0, 0, 197, 21, 1, 0, 0, 0, 198, 200, 3, 94, + 46, 0, 199, 198, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, + 201, 202, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 205, 5, 46, 0, 0, 204, + 206, 3, 94, 46, 0, 205, 204, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 205, + 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 23, 1, 0, 0, 0, 209, 210, 5, 101, + 0, 0, 210, 211, 5, 120, 0, 0, 211, 212, 5, 116, 0, 0, 212, 213, 5, 101, + 0, 0, 213, 214, 5, 110, 0, 0, 214, 215, 5, 100, 0, 0, 215, 25, 1, 0, 0, + 0, 216, 217, 5, 116, 0, 0, 217, 218, 5, 121, 0, 0, 218, 219, 5, 112, 0, + 0, 219, 220, 5, 101, 0, 0, 220, 27, 1, 0, 0, 0, 221, 222, 5, 99, 0, 0, + 222, 223, 5, 111, 0, 0, 223, 224, 5, 110, 0, 0, 224, 225, 5, 100, 0, 0, + 225, 226, 5, 105, 0, 0, 226, 227, 5, 116, 0, 0, 227, 228, 5, 105, 0, 0, + 228, 229, 5, 111, 0, 0, 229, 230, 5, 110, 0, 0, 230, 231, 1, 0, 0, 0, 231, + 232, 6, 13, 0, 0, 232, 29, 1, 0, 0, 0, 233, 234, 5, 114, 0, 0, 234, 235, + 5, 101, 0, 0, 235, 236, 5, 108, 0, 0, 236, 237, 5, 97, 0, 0, 237, 238, + 5, 116, 0, 0, 238, 239, 5, 105, 0, 0, 239, 240, 5, 111, 0, 0, 240, 241, + 5, 110, 0, 0, 241, 242, 5, 115, 0, 0, 242, 31, 1, 0, 0, 0, 243, 244, 5, + 114, 0, 0, 244, 245, 5, 101, 0, 0, 245, 246, 5, 108, 0, 0, 246, 247, 5, + 97, 0, 0, 247, 248, 5, 116, 0, 0, 248, 249, 5, 105, 0, 0, 249, 250, 5, + 111, 0, 0, 250, 251, 5, 110, 0, 0, 251, 33, 1, 0, 0, 0, 252, 253, 5, 100, + 0, 0, 253, 254, 5, 101, 0, 0, 254, 255, 5, 102, 0, 0, 255, 256, 5, 105, + 0, 0, 256, 257, 5, 110, 0, 0, 257, 258, 5, 101, 0, 0, 258, 35, 1, 0, 0, + 0, 259, 260, 5, 119, 0, 0, 260, 261, 5, 105, 0, 0, 261, 262, 5, 116, 0, + 0, 262, 263, 5, 104, 0, 0, 263, 37, 1, 0, 0, 0, 264, 265, 5, 61, 0, 0, + 265, 266, 5, 61, 0, 0, 266, 39, 1, 0, 0, 0, 267, 268, 5, 33, 0, 0, 268, + 269, 5, 61, 0, 0, 269, 41, 1, 0, 0, 0, 270, 271, 5, 105, 0, 0, 271, 272, + 5, 110, 0, 0, 272, 43, 1, 0, 0, 0, 273, 274, 5, 60, 0, 0, 274, 45, 1, 0, + 0, 0, 275, 276, 5, 60, 0, 0, 276, 277, 5, 61, 0, 0, 277, 47, 1, 0, 0, 0, + 278, 279, 5, 62, 0, 0, 279, 280, 5, 61, 0, 0, 280, 49, 1, 0, 0, 0, 281, + 282, 5, 62, 0, 0, 282, 51, 1, 0, 0, 0, 283, 284, 5, 38, 0, 0, 284, 285, + 5, 38, 0, 0, 285, 53, 1, 0, 0, 0, 286, 287, 5, 124, 0, 0, 287, 288, 5, + 124, 0, 0, 288, 55, 1, 0, 0, 0, 289, 290, 5, 91, 0, 0, 290, 57, 1, 0, 0, + 0, 291, 292, 5, 93, 0, 0, 292, 59, 1, 0, 0, 0, 293, 294, 5, 123, 0, 0, + 294, 61, 1, 0, 0, 0, 295, 296, 5, 125, 0, 0, 296, 63, 1, 0, 0, 0, 297, + 298, 5, 40, 0, 0, 298, 65, 1, 0, 0, 0, 299, 300, 5, 41, 0, 0, 300, 67, + 1, 0, 0, 0, 301, 302, 5, 46, 0, 0, 302, 69, 1, 0, 0, 0, 303, 304, 5, 45, + 0, 0, 304, 71, 1, 0, 0, 0, 305, 306, 5, 33, 0, 0, 306, 73, 1, 0, 0, 0, + 307, 308, 5, 63, 0, 0, 308, 75, 1, 0, 0, 0, 309, 310, 5, 43, 0, 0, 310, + 77, 1, 0, 0, 0, 311, 312, 5, 42, 0, 0, 312, 79, 1, 0, 0, 0, 313, 314, 5, + 47, 0, 0, 314, 81, 1, 0, 0, 0, 315, 316, 5, 37, 0, 0, 316, 83, 1, 0, 0, + 0, 317, 318, 5, 116, 0, 0, 318, 319, 5, 114, 0, 0, 319, 320, 5, 117, 0, + 0, 320, 321, 5, 101, 0, 0, 321, 85, 1, 0, 0, 0, 322, 323, 5, 102, 0, 0, + 323, 324, 5, 97, 0, 0, 324, 325, 5, 108, 0, 0, 325, 326, 5, 115, 0, 0, + 326, 327, 5, 101, 0, 0, 327, 87, 1, 0, 0, 0, 328, 329, 5, 110, 0, 0, 329, + 330, 5, 117, 0, 0, 330, 331, 5, 108, 0, 0, 331, 332, 5, 108, 0, 0, 332, + 89, 1, 0, 0, 0, 333, 334, 5, 92, 0, 0, 334, 91, 1, 0, 0, 0, 335, 336, 7, + 0, 0, 0, 336, 93, 1, 0, 0, 0, 337, 338, 2, 48, 57, 0, 338, 95, 1, 0, 0, + 0, 339, 341, 7, 1, 0, 0, 340, 342, 7, 2, 0, 0, 341, 340, 1, 0, 0, 0, 341, + 342, 1, 0, 0, 0, 342, 344, 1, 0, 0, 0, 343, 345, 3, 94, 46, 0, 344, 343, + 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, + 0, 0, 347, 97, 1, 0, 0, 0, 348, 349, 7, 3, 0, 0, 349, 99, 1, 0, 0, 0, 350, + 351, 7, 4, 0, 0, 351, 101, 1, 0, 0, 0, 352, 357, 3, 104, 51, 0, 353, 357, + 3, 108, 53, 0, 354, 357, 3, 110, 54, 0, 355, 357, 3, 106, 52, 0, 356, 352, + 1, 0, 0, 0, 356, 353, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 356, 355, 1, 0, + 0, 0, 357, 103, 1, 0, 0, 0, 358, 359, 3, 90, 44, 0, 359, 360, 7, 5, 0, + 0, 360, 105, 1, 0, 0, 0, 361, 362, 3, 90, 44, 0, 362, 363, 2, 48, 51, 0, + 363, 364, 2, 48, 55, 0, 364, 365, 2, 48, 55, 0, 365, 107, 1, 0, 0, 0, 366, + 367, 3, 90, 44, 0, 367, 368, 7, 6, 0, 0, 368, 369, 3, 98, 48, 0, 369, 370, + 3, 98, 48, 0, 370, 109, 1, 0, 0, 0, 371, 372, 3, 90, 44, 0, 372, 373, 5, + 117, 0, 0, 373, 374, 3, 98, 48, 0, 374, 375, 3, 98, 48, 0, 375, 376, 3, + 98, 48, 0, 376, 377, 3, 98, 48, 0, 377, 390, 1, 0, 0, 0, 378, 379, 3, 90, + 44, 0, 379, 380, 5, 85, 0, 0, 380, 381, 3, 98, 48, 0, 381, 382, 3, 98, + 48, 0, 382, 383, 3, 98, 48, 0, 383, 384, 3, 98, 48, 0, 384, 385, 3, 98, + 48, 0, 385, 386, 3, 98, 48, 0, 386, 387, 3, 98, 48, 0, 387, 388, 3, 98, + 48, 0, 388, 390, 1, 0, 0, 0, 389, 371, 1, 0, 0, 0, 389, 378, 1, 0, 0, 0, + 390, 111, 1, 0, 0, 0, 391, 393, 7, 7, 0, 0, 392, 391, 1, 0, 0, 0, 393, + 394, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 113, + 1, 0, 0, 0, 396, 397, 5, 47, 0, 0, 397, 398, 5, 47, 0, 0, 398, 402, 1, + 0, 0, 0, 399, 401, 8, 8, 0, 0, 400, 399, 1, 0, 0, 0, 401, 404, 1, 0, 0, + 0, 402, 400, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 405, 1, 0, 0, 0, 404, + 402, 1, 0, 0, 0, 405, 406, 6, 56, 1, 0, 406, 115, 1, 0, 0, 0, 407, 409, + 3, 94, 46, 0, 408, 407, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 408, 1, + 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 414, 5, 46, 0, + 0, 413, 415, 3, 94, 46, 0, 414, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, + 416, 414, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 419, 1, 0, 0, 0, 418, + 420, 3, 96, 47, 0, 419, 418, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 438, + 1, 0, 0, 0, 421, 423, 3, 94, 46, 0, 422, 421, 1, 0, 0, 0, 423, 424, 1, + 0, 0, 0, 424, 422, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 426, 1, 0, 0, + 0, 426, 427, 3, 96, 47, 0, 427, 438, 1, 0, 0, 0, 428, 430, 5, 46, 0, 0, + 429, 431, 3, 94, 46, 0, 430, 429, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, + 430, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 435, 1, 0, 0, 0, 434, 436, + 3, 96, 47, 0, 435, 434, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 438, 1, + 0, 0, 0, 437, 408, 1, 0, 0, 0, 437, 422, 1, 0, 0, 0, 437, 428, 1, 0, 0, + 0, 438, 117, 1, 0, 0, 0, 439, 441, 3, 94, 46, 0, 440, 439, 1, 0, 0, 0, + 441, 442, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, + 453, 1, 0, 0, 0, 444, 445, 5, 48, 0, 0, 445, 446, 5, 120, 0, 0, 446, 448, + 1, 0, 0, 0, 447, 449, 3, 98, 48, 0, 448, 447, 1, 0, 0, 0, 449, 450, 1, + 0, 0, 0, 450, 448, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 453, 1, 0, 0, + 0, 452, 440, 1, 0, 0, 0, 452, 444, 1, 0, 0, 0, 453, 119, 1, 0, 0, 0, 454, + 456, 3, 94, 46, 0, 455, 454, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 455, + 1, 0, 0, 0, 457, 458, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 460, 7, 9, + 0, 0, 460, 472, 1, 0, 0, 0, 461, 462, 5, 48, 0, 0, 462, 463, 5, 120, 0, + 0, 463, 465, 1, 0, 0, 0, 464, 466, 3, 98, 48, 0, 465, 464, 1, 0, 0, 0, + 466, 467, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, + 469, 1, 0, 0, 0, 469, 470, 7, 9, 0, 0, 470, 472, 1, 0, 0, 0, 471, 455, + 1, 0, 0, 0, 471, 461, 1, 0, 0, 0, 472, 121, 1, 0, 0, 0, 473, 478, 5, 34, + 0, 0, 474, 477, 3, 102, 50, 0, 475, 477, 8, 10, 0, 0, 476, 474, 1, 0, 0, + 0, 476, 475, 1, 0, 0, 0, 477, 480, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 478, + 479, 1, 0, 0, 0, 479, 481, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 481, 570, + 5, 34, 0, 0, 482, 487, 5, 39, 0, 0, 483, 486, 3, 102, 50, 0, 484, 486, + 8, 11, 0, 0, 485, 483, 1, 0, 0, 0, 485, 484, 1, 0, 0, 0, 486, 489, 1, 0, + 0, 0, 487, 485, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 490, 1, 0, 0, 0, + 489, 487, 1, 0, 0, 0, 490, 570, 5, 39, 0, 0, 491, 492, 5, 34, 0, 0, 492, + 493, 5, 34, 0, 0, 493, 494, 5, 34, 0, 0, 494, 499, 1, 0, 0, 0, 495, 498, + 3, 102, 50, 0, 496, 498, 8, 12, 0, 0, 497, 495, 1, 0, 0, 0, 497, 496, 1, + 0, 0, 0, 498, 501, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 499, 497, 1, 0, 0, + 0, 500, 502, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 502, 503, 5, 34, 0, 0, 503, + 504, 5, 34, 0, 0, 504, 570, 5, 34, 0, 0, 505, 506, 5, 39, 0, 0, 506, 507, + 5, 39, 0, 0, 507, 508, 5, 39, 0, 0, 508, 513, 1, 0, 0, 0, 509, 512, 3, + 102, 50, 0, 510, 512, 8, 12, 0, 0, 511, 509, 1, 0, 0, 0, 511, 510, 1, 0, + 0, 0, 512, 515, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, + 514, 516, 1, 0, 0, 0, 515, 513, 1, 0, 0, 0, 516, 517, 5, 39, 0, 0, 517, + 518, 5, 39, 0, 0, 518, 570, 5, 39, 0, 0, 519, 520, 3, 100, 49, 0, 520, + 524, 5, 34, 0, 0, 521, 523, 8, 13, 0, 0, 522, 521, 1, 0, 0, 0, 523, 526, + 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 1, 0, + 0, 0, 526, 524, 1, 0, 0, 0, 527, 528, 5, 34, 0, 0, 528, 570, 1, 0, 0, 0, + 529, 530, 3, 100, 49, 0, 530, 534, 5, 39, 0, 0, 531, 533, 8, 14, 0, 0, + 532, 531, 1, 0, 0, 0, 533, 536, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 534, + 535, 1, 0, 0, 0, 535, 537, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 537, 538, + 5, 39, 0, 0, 538, 570, 1, 0, 0, 0, 539, 540, 3, 100, 49, 0, 540, 541, 5, + 34, 0, 0, 541, 542, 5, 34, 0, 0, 542, 543, 5, 34, 0, 0, 543, 547, 1, 0, + 0, 0, 544, 546, 9, 0, 0, 0, 545, 544, 1, 0, 0, 0, 546, 549, 1, 0, 0, 0, + 547, 548, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 550, 1, 0, 0, 0, 549, + 547, 1, 0, 0, 0, 550, 551, 5, 34, 0, 0, 551, 552, 5, 34, 0, 0, 552, 553, + 5, 34, 0, 0, 553, 570, 1, 0, 0, 0, 554, 555, 3, 100, 49, 0, 555, 556, 5, + 39, 0, 0, 556, 557, 5, 39, 0, 0, 557, 558, 5, 39, 0, 0, 558, 562, 1, 0, + 0, 0, 559, 561, 9, 0, 0, 0, 560, 559, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, + 562, 563, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 563, 565, 1, 0, 0, 0, 564, + 562, 1, 0, 0, 0, 565, 566, 5, 39, 0, 0, 566, 567, 5, 39, 0, 0, 567, 568, + 5, 39, 0, 0, 568, 570, 1, 0, 0, 0, 569, 473, 1, 0, 0, 0, 569, 482, 1, 0, + 0, 0, 569, 491, 1, 0, 0, 0, 569, 505, 1, 0, 0, 0, 569, 519, 1, 0, 0, 0, + 569, 529, 1, 0, 0, 0, 569, 539, 1, 0, 0, 0, 569, 554, 1, 0, 0, 0, 570, + 123, 1, 0, 0, 0, 571, 572, 7, 15, 0, 0, 572, 573, 3, 122, 60, 0, 573, 125, + 1, 0, 0, 0, 574, 577, 3, 92, 45, 0, 575, 577, 5, 95, 0, 0, 576, 574, 1, + 0, 0, 0, 576, 575, 1, 0, 0, 0, 577, 584, 1, 0, 0, 0, 578, 583, 3, 92, 45, + 0, 579, 583, 3, 94, 46, 0, 580, 583, 5, 95, 0, 0, 581, 583, 3, 70, 34, + 0, 582, 578, 1, 0, 0, 0, 582, 579, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 582, + 581, 1, 0, 0, 0, 583, 586, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, + 1, 0, 0, 0, 585, 127, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 587, 590, 3, 92, + 45, 0, 588, 590, 5, 95, 0, 0, 589, 587, 1, 0, 0, 0, 589, 588, 1, 0, 0, + 0, 590, 605, 1, 0, 0, 0, 591, 595, 3, 80, 39, 0, 592, 595, 3, 68, 33, 0, + 593, 595, 3, 70, 34, 0, 594, 591, 1, 0, 0, 0, 594, 592, 1, 0, 0, 0, 594, + 593, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 599, 1, 0, 0, 0, 596, 600, + 3, 92, 45, 0, 597, 600, 3, 94, 46, 0, 598, 600, 5, 95, 0, 0, 599, 596, + 1, 0, 0, 0, 599, 597, 1, 0, 0, 0, 599, 598, 1, 0, 0, 0, 600, 601, 1, 0, + 0, 0, 601, 599, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 604, 1, 0, 0, 0, + 603, 594, 1, 0, 0, 0, 604, 607, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 605, + 606, 1, 0, 0, 0, 606, 129, 1, 0, 0, 0, 607, 605, 1, 0, 0, 0, 608, 610, + 3, 112, 55, 0, 609, 608, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 616, 1, + 0, 0, 0, 611, 613, 5, 13, 0, 0, 612, 611, 1, 0, 0, 0, 612, 613, 1, 0, 0, + 0, 613, 614, 1, 0, 0, 0, 614, 617, 5, 10, 0, 0, 615, 617, 2, 12, 13, 0, + 616, 612, 1, 0, 0, 0, 616, 615, 1, 0, 0, 0, 617, 619, 1, 0, 0, 0, 618, + 620, 3, 112, 55, 0, 619, 618, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 622, + 1, 0, 0, 0, 621, 623, 3, 130, 64, 0, 622, 621, 1, 0, 0, 0, 622, 623, 1, + 0, 0, 0, 623, 131, 1, 0, 0, 0, 624, 625, 3, 66, 32, 0, 625, 626, 1, 0, + 0, 0, 626, 627, 6, 65, 2, 0, 627, 628, 6, 65, 3, 0, 628, 133, 1, 0, 0, + 0, 629, 630, 5, 109, 0, 0, 630, 631, 5, 97, 0, 0, 631, 637, 5, 112, 0, + 0, 632, 633, 5, 108, 0, 0, 633, 634, 5, 105, 0, 0, 634, 635, 5, 115, 0, + 0, 635, 637, 5, 116, 0, 0, 636, 629, 1, 0, 0, 0, 636, 632, 1, 0, 0, 0, + 637, 135, 1, 0, 0, 0, 638, 639, 5, 98, 0, 0, 639, 640, 5, 111, 0, 0, 640, + 641, 5, 111, 0, 0, 641, 688, 5, 108, 0, 0, 642, 643, 5, 115, 0, 0, 643, + 644, 5, 116, 0, 0, 644, 645, 5, 114, 0, 0, 645, 646, 5, 105, 0, 0, 646, + 647, 5, 110, 0, 0, 647, 688, 5, 103, 0, 0, 648, 649, 5, 105, 0, 0, 649, + 650, 5, 110, 0, 0, 650, 688, 5, 116, 0, 0, 651, 652, 5, 117, 0, 0, 652, + 653, 5, 105, 0, 0, 653, 654, 5, 110, 0, 0, 654, 688, 5, 116, 0, 0, 655, + 656, 5, 100, 0, 0, 656, 657, 5, 111, 0, 0, 657, 658, 5, 117, 0, 0, 658, + 659, 5, 98, 0, 0, 659, 660, 5, 108, 0, 0, 660, 688, 5, 101, 0, 0, 661, + 662, 5, 100, 0, 0, 662, 663, 5, 117, 0, 0, 663, 664, 5, 114, 0, 0, 664, + 665, 5, 97, 0, 0, 665, 666, 5, 116, 0, 0, 666, 667, 5, 105, 0, 0, 667, + 668, 5, 111, 0, 0, 668, 688, 5, 110, 0, 0, 669, 670, 5, 116, 0, 0, 670, + 671, 5, 105, 0, 0, 671, 672, 5, 109, 0, 0, 672, 673, 5, 101, 0, 0, 673, + 674, 5, 115, 0, 0, 674, 675, 5, 116, 0, 0, 675, 676, 5, 97, 0, 0, 676, + 677, 5, 109, 0, 0, 677, 688, 5, 112, 0, 0, 678, 679, 5, 105, 0, 0, 679, + 680, 5, 112, 0, 0, 680, 681, 5, 97, 0, 0, 681, 682, 5, 100, 0, 0, 682, + 683, 5, 100, 0, 0, 683, 684, 5, 114, 0, 0, 684, 685, 5, 101, 0, 0, 685, + 686, 5, 115, 0, 0, 686, 688, 5, 115, 0, 0, 687, 638, 1, 0, 0, 0, 687, 642, + 1, 0, 0, 0, 687, 648, 1, 0, 0, 0, 687, 651, 1, 0, 0, 0, 687, 655, 1, 0, + 0, 0, 687, 661, 1, 0, 0, 0, 687, 669, 1, 0, 0, 0, 687, 678, 1, 0, 0, 0, + 688, 137, 1, 0, 0, 0, 689, 690, 3, 44, 21, 0, 690, 691, 1, 0, 0, 0, 691, + 692, 6, 68, 4, 0, 692, 139, 1, 0, 0, 0, 693, 694, 3, 50, 24, 0, 694, 695, + 1, 0, 0, 0, 695, 696, 6, 69, 5, 0, 696, 141, 1, 0, 0, 0, 697, 698, 3, 64, + 31, 0, 698, 699, 1, 0, 0, 0, 699, 700, 6, 70, 6, 0, 700, 143, 1, 0, 0, + 0, 701, 702, 3, 4, 1, 0, 702, 703, 1, 0, 0, 0, 703, 704, 6, 71, 7, 0, 704, + 145, 1, 0, 0, 0, 705, 706, 3, 6, 2, 0, 706, 707, 1, 0, 0, 0, 707, 708, + 6, 72, 8, 0, 708, 147, 1, 0, 0, 0, 709, 710, 3, 112, 55, 0, 710, 711, 1, + 0, 0, 0, 711, 712, 6, 73, 9, 0, 712, 149, 1, 0, 0, 0, 713, 714, 3, 126, + 62, 0, 714, 715, 1, 0, 0, 0, 715, 716, 6, 74, 10, 0, 716, 151, 1, 0, 0, + 0, 51, 0, 1, 201, 207, 341, 346, 356, 389, 394, 402, 410, 416, 419, 424, + 432, 435, 437, 442, 450, 452, 457, 467, 471, 476, 478, 485, 487, 497, 499, + 511, 513, 524, 534, 547, 562, 569, 576, 582, 584, 589, 594, 599, 601, 605, + 609, 612, 616, 619, 622, 636, 687, 11, 5, 1, 0, 0, 1, 0, 7, 8, 0, 4, 0, + 0, 7, 3, 0, 7, 4, 0, 7, 7, 0, 7, 1, 0, 7, 2, 0, 7, 9, 0, 7, 10, 0, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -491,9 +505,10 @@ const ( OpenFGALexerNUM_UINT = 51 OpenFGALexerSTRING = 52 OpenFGALexerBYTES = 53 - OpenFGALexerNEWLINE = 54 - OpenFGALexerCONDITION_PARAM_CONTAINER = 55 - OpenFGALexerCONDITION_PARAM_TYPE = 56 + OpenFGALexerEXTENDED_IDENTIFIER = 54 + OpenFGALexerNEWLINE = 55 + OpenFGALexerCONDITION_PARAM_CONTAINER = 56 + OpenFGALexerCONDITION_PARAM_TYPE = 57 ) // OpenFGALexerCONDITION_DEF is the OpenFGALexer mode. diff --git a/pkg/go/gen/openfga_parser.go b/pkg/go/gen/openfga_parser.go index 1ea57549..6a6e525d 100644 --- a/pkg/go/gen/openfga_parser.go +++ b/pkg/go/gen/openfga_parser.go @@ -50,7 +50,8 @@ func openfgaparserParserInit() { "LOGICAL_OR", "RPRACKET", "LBRACE", "RBRACE", "DOT", "MINUS", "EXCLAM", "QUESTIONMARK", "PLUS", "STAR", "SLASH", "PERCENT", "CEL_TRUE", "CEL_FALSE", "NUL", "CEL_COMMENT", "NUM_FLOAT", "NUM_INT", "NUM_UINT", "STRING", - "BYTES", "NEWLINE", "CONDITION_PARAM_CONTAINER", "CONDITION_PARAM_TYPE", + "BYTES", "EXTENDED_IDENTIFIER", "NEWLINE", "CONDITION_PARAM_CONTAINER", + "CONDITION_PARAM_TYPE", } staticData.RuleNames = []string{ "main", "modelHeader", "moduleHeader", "typeDefs", "typeDef", "relationDeclaration", @@ -59,188 +60,191 @@ func openfgaparserParserInit() { "relationDefDirectAssignment", "relationDefRewrite", "relationDefTypeRestriction", "relationDefTypeRestrictionBase", "conditions", "condition", "conditionName", "conditionParameter", "parameterName", "parameterType", "multiLineComment", - "identifier", "conditionExpression", + "identifier", "extended_identifier", "conditionExpression", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 56, 386, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, + 4, 1, 57, 392, 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, 1, 0, - 3, 0, 54, 8, 0, 1, 0, 3, 0, 57, 8, 0, 1, 0, 1, 0, 3, 0, 61, 8, 0, 1, 0, - 3, 0, 64, 8, 0, 1, 0, 1, 0, 3, 0, 68, 8, 0, 1, 0, 1, 0, 3, 0, 72, 8, 0, - 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 79, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 1, 87, 8, 1, 1, 2, 1, 2, 1, 2, 3, 2, 92, 8, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 3, 2, 98, 8, 2, 1, 3, 5, 3, 101, 8, 3, 10, 3, 12, 3, 104, 9, - 3, 1, 4, 1, 4, 3, 4, 108, 8, 4, 1, 4, 1, 4, 1, 4, 3, 4, 113, 8, 4, 1, 4, - 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 4, 121, 8, 4, 11, 4, 12, 4, 122, 3, 4, - 125, 8, 4, 1, 5, 1, 5, 3, 5, 129, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, - 5, 136, 8, 5, 1, 5, 1, 5, 3, 5, 140, 8, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, - 1, 7, 1, 7, 3, 7, 149, 8, 7, 1, 7, 3, 7, 152, 8, 7, 1, 8, 1, 8, 3, 8, 156, - 8, 8, 1, 8, 3, 8, 159, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 166, 8, - 9, 4, 9, 168, 8, 9, 11, 9, 12, 9, 169, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, - 9, 177, 8, 9, 4, 9, 179, 8, 9, 11, 9, 12, 9, 180, 1, 9, 1, 9, 1, 9, 1, - 9, 1, 9, 3, 9, 188, 8, 9, 3, 9, 190, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, - 5, 11, 196, 8, 11, 10, 11, 12, 11, 199, 9, 11, 1, 11, 1, 11, 3, 11, 203, - 8, 11, 1, 11, 5, 11, 206, 8, 11, 10, 11, 12, 11, 209, 9, 11, 1, 11, 1, - 11, 1, 12, 1, 12, 5, 12, 215, 8, 12, 10, 12, 12, 12, 218, 9, 12, 1, 12, - 1, 12, 3, 12, 222, 8, 12, 1, 12, 5, 12, 225, 8, 12, 10, 12, 12, 12, 228, - 9, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 234, 8, 13, 1, 13, 1, 13, 3, - 13, 238, 8, 13, 1, 13, 1, 13, 3, 13, 242, 8, 13, 1, 13, 1, 13, 3, 13, 246, - 8, 13, 5, 13, 248, 8, 13, 10, 13, 12, 13, 251, 9, 13, 1, 13, 1, 13, 1, - 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 260, 8, 14, 1, 15, 3, 15, 263, 8, - 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 272, 8, 15, - 1, 15, 3, 15, 275, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 282, - 8, 16, 1, 17, 5, 17, 285, 8, 17, 10, 17, 12, 17, 288, 9, 17, 1, 18, 1, - 18, 3, 18, 292, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 299, 8, - 18, 1, 18, 1, 18, 3, 18, 303, 8, 18, 1, 18, 1, 18, 3, 18, 307, 8, 18, 1, - 18, 1, 18, 3, 18, 311, 8, 18, 1, 18, 1, 18, 3, 18, 315, 8, 18, 5, 18, 317, - 8, 18, 10, 18, 12, 18, 320, 9, 18, 1, 18, 3, 18, 323, 8, 18, 1, 18, 1, - 18, 3, 18, 327, 8, 18, 1, 18, 1, 18, 3, 18, 331, 8, 18, 1, 18, 3, 18, 334, - 8, 18, 1, 18, 1, 18, 3, 18, 338, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, - 20, 3, 20, 345, 8, 20, 1, 20, 1, 20, 3, 20, 349, 8, 20, 1, 20, 1, 20, 3, - 20, 353, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, - 1, 22, 3, 22, 364, 8, 22, 1, 23, 1, 23, 5, 23, 368, 8, 23, 10, 23, 12, - 23, 371, 9, 23, 1, 23, 1, 23, 3, 23, 375, 8, 23, 1, 24, 1, 24, 1, 25, 1, - 25, 5, 25, 381, 8, 25, 10, 25, 12, 25, 384, 9, 25, 1, 25, 0, 0, 26, 0, - 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, - 40, 42, 44, 46, 48, 50, 0, 4, 1, 0, 54, 54, 4, 0, 10, 10, 16, 18, 20, 21, - 24, 24, 4, 0, 3, 5, 7, 10, 27, 35, 37, 54, 1, 0, 36, 36, 427, 0, 53, 1, - 0, 0, 0, 2, 78, 1, 0, 0, 0, 4, 91, 1, 0, 0, 0, 6, 102, 1, 0, 0, 0, 8, 107, - 1, 0, 0, 0, 10, 128, 1, 0, 0, 0, 12, 143, 1, 0, 0, 0, 14, 148, 1, 0, 0, - 0, 16, 155, 1, 0, 0, 0, 18, 189, 1, 0, 0, 0, 20, 191, 1, 0, 0, 0, 22, 193, - 1, 0, 0, 0, 24, 212, 1, 0, 0, 0, 26, 231, 1, 0, 0, 0, 28, 254, 1, 0, 0, - 0, 30, 262, 1, 0, 0, 0, 32, 276, 1, 0, 0, 0, 34, 286, 1, 0, 0, 0, 36, 291, - 1, 0, 0, 0, 38, 341, 1, 0, 0, 0, 40, 344, 1, 0, 0, 0, 42, 356, 1, 0, 0, - 0, 44, 363, 1, 0, 0, 0, 46, 365, 1, 0, 0, 0, 48, 376, 1, 0, 0, 0, 50, 382, - 1, 0, 0, 0, 52, 54, 5, 9, 0, 0, 53, 52, 1, 0, 0, 0, 53, 54, 1, 0, 0, 0, - 54, 56, 1, 0, 0, 0, 55, 57, 5, 54, 0, 0, 56, 55, 1, 0, 0, 0, 56, 57, 1, - 0, 0, 0, 57, 60, 1, 0, 0, 0, 58, 61, 3, 2, 1, 0, 59, 61, 3, 4, 2, 0, 60, - 58, 1, 0, 0, 0, 60, 59, 1, 0, 0, 0, 61, 63, 1, 0, 0, 0, 62, 64, 5, 54, - 0, 0, 63, 62, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 65, 1, 0, 0, 0, 65, 67, - 3, 6, 3, 0, 66, 68, 5, 54, 0, 0, 67, 66, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, - 68, 69, 1, 0, 0, 0, 69, 71, 3, 34, 17, 0, 70, 72, 5, 54, 0, 0, 71, 70, - 1, 0, 0, 0, 71, 72, 1, 0, 0, 0, 72, 73, 1, 0, 0, 0, 73, 74, 5, 0, 0, 1, - 74, 1, 1, 0, 0, 0, 75, 76, 3, 46, 23, 0, 76, 77, 5, 54, 0, 0, 77, 79, 1, - 0, 0, 0, 78, 75, 1, 0, 0, 0, 78, 79, 1, 0, 0, 0, 79, 80, 1, 0, 0, 0, 80, - 81, 5, 17, 0, 0, 81, 82, 5, 54, 0, 0, 82, 83, 5, 18, 0, 0, 83, 84, 5, 9, - 0, 0, 84, 86, 5, 19, 0, 0, 85, 87, 5, 9, 0, 0, 86, 85, 1, 0, 0, 0, 86, - 87, 1, 0, 0, 0, 87, 3, 1, 0, 0, 0, 88, 89, 3, 46, 23, 0, 89, 90, 5, 54, - 0, 0, 90, 92, 1, 0, 0, 0, 91, 88, 1, 0, 0, 0, 91, 92, 1, 0, 0, 0, 92, 93, - 1, 0, 0, 0, 93, 94, 5, 16, 0, 0, 94, 95, 5, 9, 0, 0, 95, 97, 3, 48, 24, - 0, 96, 98, 5, 9, 0, 0, 97, 96, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 5, 1, - 0, 0, 0, 99, 101, 3, 8, 4, 0, 100, 99, 1, 0, 0, 0, 101, 104, 1, 0, 0, 0, - 102, 100, 1, 0, 0, 0, 102, 103, 1, 0, 0, 0, 103, 7, 1, 0, 0, 0, 104, 102, - 1, 0, 0, 0, 105, 106, 5, 54, 0, 0, 106, 108, 3, 46, 23, 0, 107, 105, 1, - 0, 0, 0, 107, 108, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 112, 5, 54, 0, - 0, 110, 111, 5, 20, 0, 0, 111, 113, 5, 9, 0, 0, 112, 110, 1, 0, 0, 0, 112, - 113, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 115, 5, 21, 0, 0, 115, 116, - 5, 9, 0, 0, 116, 124, 3, 48, 24, 0, 117, 118, 5, 54, 0, 0, 118, 120, 5, - 23, 0, 0, 119, 121, 3, 10, 5, 0, 120, 119, 1, 0, 0, 0, 121, 122, 1, 0, - 0, 0, 122, 120, 1, 0, 0, 0, 122, 123, 1, 0, 0, 0, 123, 125, 1, 0, 0, 0, - 124, 117, 1, 0, 0, 0, 124, 125, 1, 0, 0, 0, 125, 9, 1, 0, 0, 0, 126, 127, - 5, 54, 0, 0, 127, 129, 3, 46, 23, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, - 0, 0, 0, 129, 130, 1, 0, 0, 0, 130, 131, 5, 54, 0, 0, 131, 132, 5, 25, - 0, 0, 132, 133, 5, 9, 0, 0, 133, 135, 3, 12, 6, 0, 134, 136, 5, 9, 0, 0, - 135, 134, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, - 139, 5, 1, 0, 0, 138, 140, 5, 9, 0, 0, 139, 138, 1, 0, 0, 0, 139, 140, - 1, 0, 0, 0, 140, 141, 1, 0, 0, 0, 141, 142, 3, 14, 7, 0, 142, 11, 1, 0, - 0, 0, 143, 144, 3, 48, 24, 0, 144, 13, 1, 0, 0, 0, 145, 149, 3, 26, 13, - 0, 146, 149, 3, 20, 10, 0, 147, 149, 3, 22, 11, 0, 148, 145, 1, 0, 0, 0, - 148, 146, 1, 0, 0, 0, 148, 147, 1, 0, 0, 0, 149, 151, 1, 0, 0, 0, 150, - 152, 3, 18, 9, 0, 151, 150, 1, 0, 0, 0, 151, 152, 1, 0, 0, 0, 152, 15, - 1, 0, 0, 0, 153, 156, 3, 20, 10, 0, 154, 156, 3, 24, 12, 0, 155, 153, 1, - 0, 0, 0, 155, 154, 1, 0, 0, 0, 156, 158, 1, 0, 0, 0, 157, 159, 3, 18, 9, - 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 17, 1, 0, 0, 0, 160, - 161, 5, 9, 0, 0, 161, 162, 5, 13, 0, 0, 162, 165, 5, 9, 0, 0, 163, 166, - 3, 20, 10, 0, 164, 166, 3, 24, 12, 0, 165, 163, 1, 0, 0, 0, 165, 164, 1, - 0, 0, 0, 166, 168, 1, 0, 0, 0, 167, 160, 1, 0, 0, 0, 168, 169, 1, 0, 0, - 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 190, 1, 0, 0, 0, 171, - 172, 5, 9, 0, 0, 172, 173, 5, 12, 0, 0, 173, 176, 5, 9, 0, 0, 174, 177, - 3, 20, 10, 0, 175, 177, 3, 24, 12, 0, 176, 174, 1, 0, 0, 0, 176, 175, 1, - 0, 0, 0, 177, 179, 1, 0, 0, 0, 178, 171, 1, 0, 0, 0, 179, 180, 1, 0, 0, - 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 190, 1, 0, 0, 0, 182, - 183, 5, 9, 0, 0, 183, 184, 5, 14, 0, 0, 184, 187, 5, 9, 0, 0, 185, 188, - 3, 20, 10, 0, 186, 188, 3, 24, 12, 0, 187, 185, 1, 0, 0, 0, 187, 186, 1, - 0, 0, 0, 188, 190, 1, 0, 0, 0, 189, 167, 1, 0, 0, 0, 189, 178, 1, 0, 0, - 0, 189, 182, 1, 0, 0, 0, 190, 19, 1, 0, 0, 0, 191, 192, 3, 28, 14, 0, 192, - 21, 1, 0, 0, 0, 193, 197, 5, 7, 0, 0, 194, 196, 5, 9, 0, 0, 195, 194, 1, - 0, 0, 0, 196, 199, 1, 0, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, - 0, 198, 202, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 200, 203, 3, 14, 7, 0, 201, - 203, 3, 24, 12, 0, 202, 200, 1, 0, 0, 0, 202, 201, 1, 0, 0, 0, 203, 207, - 1, 0, 0, 0, 204, 206, 5, 9, 0, 0, 205, 204, 1, 0, 0, 0, 206, 209, 1, 0, - 0, 0, 207, 205, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 210, 1, 0, 0, 0, - 209, 207, 1, 0, 0, 0, 210, 211, 5, 8, 0, 0, 211, 23, 1, 0, 0, 0, 212, 216, - 5, 7, 0, 0, 213, 215, 5, 9, 0, 0, 214, 213, 1, 0, 0, 0, 215, 218, 1, 0, - 0, 0, 216, 214, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 221, 1, 0, 0, 0, - 218, 216, 1, 0, 0, 0, 219, 222, 3, 16, 8, 0, 220, 222, 3, 24, 12, 0, 221, - 219, 1, 0, 0, 0, 221, 220, 1, 0, 0, 0, 222, 226, 1, 0, 0, 0, 223, 225, - 5, 9, 0, 0, 224, 223, 1, 0, 0, 0, 225, 228, 1, 0, 0, 0, 226, 224, 1, 0, - 0, 0, 226, 227, 1, 0, 0, 0, 227, 229, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, - 229, 230, 5, 8, 0, 0, 230, 25, 1, 0, 0, 0, 231, 233, 5, 5, 0, 0, 232, 234, - 5, 9, 0, 0, 233, 232, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 235, 1, 0, - 0, 0, 235, 237, 3, 30, 15, 0, 236, 238, 5, 9, 0, 0, 237, 236, 1, 0, 0, - 0, 237, 238, 1, 0, 0, 0, 238, 249, 1, 0, 0, 0, 239, 241, 5, 2, 0, 0, 240, - 242, 5, 9, 0, 0, 241, 240, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, - 1, 0, 0, 0, 243, 245, 3, 30, 15, 0, 244, 246, 5, 9, 0, 0, 245, 244, 1, - 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 248, 1, 0, 0, 0, 247, 239, 1, 0, 0, - 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, - 252, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 253, 5, 34, 0, 0, 253, 27, - 1, 0, 0, 0, 254, 259, 3, 48, 24, 0, 255, 256, 5, 9, 0, 0, 256, 257, 5, - 15, 0, 0, 257, 258, 5, 9, 0, 0, 258, 260, 3, 48, 24, 0, 259, 255, 1, 0, - 0, 0, 259, 260, 1, 0, 0, 0, 260, 29, 1, 0, 0, 0, 261, 263, 5, 54, 0, 0, - 262, 261, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 271, 1, 0, 0, 0, 264, - 272, 3, 32, 16, 0, 265, 266, 3, 32, 16, 0, 266, 267, 5, 9, 0, 0, 267, 268, - 5, 26, 0, 0, 268, 269, 5, 9, 0, 0, 269, 270, 3, 38, 19, 0, 270, 272, 1, - 0, 0, 0, 271, 264, 1, 0, 0, 0, 271, 265, 1, 0, 0, 0, 272, 274, 1, 0, 0, - 0, 273, 275, 5, 54, 0, 0, 274, 273, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, - 31, 1, 0, 0, 0, 276, 281, 3, 48, 24, 0, 277, 278, 5, 1, 0, 0, 278, 282, - 5, 42, 0, 0, 279, 280, 5, 11, 0, 0, 280, 282, 3, 48, 24, 0, 281, 277, 1, - 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 33, 1, 0, 0, - 0, 283, 285, 3, 36, 18, 0, 284, 283, 1, 0, 0, 0, 285, 288, 1, 0, 0, 0, - 286, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 35, 1, 0, 0, 0, 288, 286, - 1, 0, 0, 0, 289, 290, 5, 54, 0, 0, 290, 292, 3, 46, 23, 0, 291, 289, 1, - 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 294, 5, 54, 0, - 0, 294, 295, 5, 22, 0, 0, 295, 296, 5, 9, 0, 0, 296, 298, 3, 38, 19, 0, - 297, 299, 5, 9, 0, 0, 298, 297, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, - 300, 1, 0, 0, 0, 300, 302, 5, 7, 0, 0, 301, 303, 5, 9, 0, 0, 302, 301, - 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 306, 3, 40, - 20, 0, 305, 307, 5, 9, 0, 0, 306, 305, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, - 307, 318, 1, 0, 0, 0, 308, 310, 5, 2, 0, 0, 309, 311, 5, 9, 0, 0, 310, - 309, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 314, - 3, 40, 20, 0, 313, 315, 5, 9, 0, 0, 314, 313, 1, 0, 0, 0, 314, 315, 1, - 0, 0, 0, 315, 317, 1, 0, 0, 0, 316, 308, 1, 0, 0, 0, 317, 320, 1, 0, 0, - 0, 318, 316, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, 320, - 318, 1, 0, 0, 0, 321, 323, 5, 54, 0, 0, 322, 321, 1, 0, 0, 0, 322, 323, - 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 326, 5, 8, 0, 0, 325, 327, 5, 9, - 0, 0, 326, 325, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, - 328, 330, 5, 35, 0, 0, 329, 331, 5, 54, 0, 0, 330, 329, 1, 0, 0, 0, 330, - 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 334, 5, 9, 0, 0, 333, 332, - 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 337, 3, 50, - 25, 0, 336, 338, 5, 54, 0, 0, 337, 336, 1, 0, 0, 0, 337, 338, 1, 0, 0, - 0, 338, 339, 1, 0, 0, 0, 339, 340, 5, 36, 0, 0, 340, 37, 1, 0, 0, 0, 341, - 342, 5, 10, 0, 0, 342, 39, 1, 0, 0, 0, 343, 345, 5, 54, 0, 0, 344, 343, - 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 3, 42, - 21, 0, 347, 349, 5, 9, 0, 0, 348, 347, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, - 349, 350, 1, 0, 0, 0, 350, 352, 5, 1, 0, 0, 351, 353, 5, 9, 0, 0, 352, - 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 355, - 3, 44, 22, 0, 355, 41, 1, 0, 0, 0, 356, 357, 5, 10, 0, 0, 357, 43, 1, 0, - 0, 0, 358, 364, 5, 56, 0, 0, 359, 360, 5, 55, 0, 0, 360, 361, 5, 3, 0, - 0, 361, 362, 5, 56, 0, 0, 362, 364, 5, 4, 0, 0, 363, 358, 1, 0, 0, 0, 363, - 359, 1, 0, 0, 0, 364, 45, 1, 0, 0, 0, 365, 369, 5, 11, 0, 0, 366, 368, - 8, 0, 0, 0, 367, 366, 1, 0, 0, 0, 368, 371, 1, 0, 0, 0, 369, 367, 1, 0, - 0, 0, 369, 370, 1, 0, 0, 0, 370, 374, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, - 372, 373, 5, 54, 0, 0, 373, 375, 3, 46, 23, 0, 374, 372, 1, 0, 0, 0, 374, - 375, 1, 0, 0, 0, 375, 47, 1, 0, 0, 0, 376, 377, 7, 1, 0, 0, 377, 49, 1, - 0, 0, 0, 378, 381, 7, 2, 0, 0, 379, 381, 8, 3, 0, 0, 380, 378, 1, 0, 0, - 0, 380, 379, 1, 0, 0, 0, 381, 384, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 382, - 383, 1, 0, 0, 0, 383, 51, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 65, 53, 56, - 60, 63, 67, 71, 78, 86, 91, 97, 102, 107, 112, 122, 124, 128, 135, 139, - 148, 151, 155, 158, 165, 169, 176, 180, 187, 189, 197, 202, 207, 216, 221, - 226, 233, 237, 241, 245, 249, 259, 262, 271, 274, 281, 286, 291, 298, 302, - 306, 310, 314, 318, 322, 326, 330, 333, 337, 344, 348, 352, 363, 369, 374, - 380, 382, + 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, + 7, 26, 1, 0, 3, 0, 56, 8, 0, 1, 0, 3, 0, 59, 8, 0, 1, 0, 1, 0, 3, 0, 63, + 8, 0, 1, 0, 3, 0, 66, 8, 0, 1, 0, 1, 0, 3, 0, 70, 8, 0, 1, 0, 1, 0, 3, + 0, 74, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 81, 8, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 89, 8, 1, 1, 2, 1, 2, 1, 2, 3, 2, 94, 8, + 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 100, 8, 2, 1, 3, 5, 3, 103, 8, 3, 10, + 3, 12, 3, 106, 9, 3, 1, 4, 1, 4, 3, 4, 110, 8, 4, 1, 4, 1, 4, 1, 4, 3, + 4, 115, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 4, 123, 8, 4, 11, + 4, 12, 4, 124, 3, 4, 127, 8, 4, 1, 5, 1, 5, 3, 5, 131, 8, 5, 1, 5, 1, 5, + 1, 5, 1, 5, 1, 5, 3, 5, 138, 8, 5, 1, 5, 1, 5, 3, 5, 142, 8, 5, 1, 5, 1, + 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 3, 7, 151, 8, 7, 1, 7, 3, 7, 154, 8, 7, + 1, 8, 1, 8, 3, 8, 158, 8, 8, 1, 8, 3, 8, 161, 8, 8, 1, 9, 1, 9, 1, 9, 1, + 9, 1, 9, 3, 9, 168, 8, 9, 4, 9, 170, 8, 9, 11, 9, 12, 9, 171, 1, 9, 1, + 9, 1, 9, 1, 9, 1, 9, 3, 9, 179, 8, 9, 4, 9, 181, 8, 9, 11, 9, 12, 9, 182, + 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 190, 8, 9, 3, 9, 192, 8, 9, 1, 10, + 1, 10, 1, 11, 1, 11, 5, 11, 198, 8, 11, 10, 11, 12, 11, 201, 9, 11, 1, + 11, 1, 11, 3, 11, 205, 8, 11, 1, 11, 5, 11, 208, 8, 11, 10, 11, 12, 11, + 211, 9, 11, 1, 11, 1, 11, 1, 12, 1, 12, 5, 12, 217, 8, 12, 10, 12, 12, + 12, 220, 9, 12, 1, 12, 1, 12, 3, 12, 224, 8, 12, 1, 12, 5, 12, 227, 8, + 12, 10, 12, 12, 12, 230, 9, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 236, + 8, 13, 1, 13, 1, 13, 3, 13, 240, 8, 13, 1, 13, 1, 13, 3, 13, 244, 8, 13, + 1, 13, 1, 13, 3, 13, 248, 8, 13, 5, 13, 250, 8, 13, 10, 13, 12, 13, 253, + 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 262, 8, + 14, 1, 15, 3, 15, 265, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, + 1, 15, 3, 15, 274, 8, 15, 1, 15, 3, 15, 277, 8, 15, 1, 16, 1, 16, 1, 16, + 1, 16, 1, 16, 3, 16, 284, 8, 16, 1, 17, 5, 17, 287, 8, 17, 10, 17, 12, + 17, 290, 9, 17, 1, 18, 1, 18, 3, 18, 294, 8, 18, 1, 18, 1, 18, 1, 18, 1, + 18, 1, 18, 3, 18, 301, 8, 18, 1, 18, 1, 18, 3, 18, 305, 8, 18, 1, 18, 1, + 18, 3, 18, 309, 8, 18, 1, 18, 1, 18, 3, 18, 313, 8, 18, 1, 18, 1, 18, 3, + 18, 317, 8, 18, 5, 18, 319, 8, 18, 10, 18, 12, 18, 322, 9, 18, 1, 18, 3, + 18, 325, 8, 18, 1, 18, 1, 18, 3, 18, 329, 8, 18, 1, 18, 1, 18, 3, 18, 333, + 8, 18, 1, 18, 3, 18, 336, 8, 18, 1, 18, 1, 18, 3, 18, 340, 8, 18, 1, 18, + 1, 18, 1, 19, 1, 19, 1, 20, 3, 20, 347, 8, 20, 1, 20, 1, 20, 3, 20, 351, + 8, 20, 1, 20, 1, 20, 3, 20, 355, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, + 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 366, 8, 22, 1, 23, 1, 23, 5, 23, + 370, 8, 23, 10, 23, 12, 23, 373, 9, 23, 1, 23, 1, 23, 3, 23, 377, 8, 23, + 1, 24, 1, 24, 1, 25, 1, 25, 3, 25, 383, 8, 25, 1, 26, 1, 26, 5, 26, 387, + 8, 26, 10, 26, 12, 26, 390, 9, 26, 1, 26, 0, 0, 27, 0, 2, 4, 6, 8, 10, + 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 0, 4, 1, 0, 55, 55, 4, 0, 10, 10, 16, 18, 20, 21, 24, 24, 5, + 0, 3, 5, 7, 10, 27, 35, 37, 53, 55, 55, 1, 0, 36, 36, 433, 0, 55, 1, 0, + 0, 0, 2, 80, 1, 0, 0, 0, 4, 93, 1, 0, 0, 0, 6, 104, 1, 0, 0, 0, 8, 109, + 1, 0, 0, 0, 10, 130, 1, 0, 0, 0, 12, 145, 1, 0, 0, 0, 14, 150, 1, 0, 0, + 0, 16, 157, 1, 0, 0, 0, 18, 191, 1, 0, 0, 0, 20, 193, 1, 0, 0, 0, 22, 195, + 1, 0, 0, 0, 24, 214, 1, 0, 0, 0, 26, 233, 1, 0, 0, 0, 28, 256, 1, 0, 0, + 0, 30, 264, 1, 0, 0, 0, 32, 278, 1, 0, 0, 0, 34, 288, 1, 0, 0, 0, 36, 293, + 1, 0, 0, 0, 38, 343, 1, 0, 0, 0, 40, 346, 1, 0, 0, 0, 42, 358, 1, 0, 0, + 0, 44, 365, 1, 0, 0, 0, 46, 367, 1, 0, 0, 0, 48, 378, 1, 0, 0, 0, 50, 382, + 1, 0, 0, 0, 52, 388, 1, 0, 0, 0, 54, 56, 5, 9, 0, 0, 55, 54, 1, 0, 0, 0, + 55, 56, 1, 0, 0, 0, 56, 58, 1, 0, 0, 0, 57, 59, 5, 55, 0, 0, 58, 57, 1, + 0, 0, 0, 58, 59, 1, 0, 0, 0, 59, 62, 1, 0, 0, 0, 60, 63, 3, 2, 1, 0, 61, + 63, 3, 4, 2, 0, 62, 60, 1, 0, 0, 0, 62, 61, 1, 0, 0, 0, 63, 65, 1, 0, 0, + 0, 64, 66, 5, 55, 0, 0, 65, 64, 1, 0, 0, 0, 65, 66, 1, 0, 0, 0, 66, 67, + 1, 0, 0, 0, 67, 69, 3, 6, 3, 0, 68, 70, 5, 55, 0, 0, 69, 68, 1, 0, 0, 0, + 69, 70, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 73, 3, 34, 17, 0, 72, 74, 5, + 55, 0, 0, 73, 72, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, + 76, 5, 0, 0, 1, 76, 1, 1, 0, 0, 0, 77, 78, 3, 46, 23, 0, 78, 79, 5, 55, + 0, 0, 79, 81, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 80, 81, 1, 0, 0, 0, 81, 82, + 1, 0, 0, 0, 82, 83, 5, 17, 0, 0, 83, 84, 5, 55, 0, 0, 84, 85, 5, 18, 0, + 0, 85, 86, 5, 9, 0, 0, 86, 88, 5, 19, 0, 0, 87, 89, 5, 9, 0, 0, 88, 87, + 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 3, 1, 0, 0, 0, 90, 91, 3, 46, 23, 0, + 91, 92, 5, 55, 0, 0, 92, 94, 1, 0, 0, 0, 93, 90, 1, 0, 0, 0, 93, 94, 1, + 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 96, 5, 16, 0, 0, 96, 97, 5, 9, 0, 0, 97, + 99, 3, 48, 24, 0, 98, 100, 5, 9, 0, 0, 99, 98, 1, 0, 0, 0, 99, 100, 1, + 0, 0, 0, 100, 5, 1, 0, 0, 0, 101, 103, 3, 8, 4, 0, 102, 101, 1, 0, 0, 0, + 103, 106, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, + 7, 1, 0, 0, 0, 106, 104, 1, 0, 0, 0, 107, 108, 5, 55, 0, 0, 108, 110, 3, + 46, 23, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 111, 1, 0, + 0, 0, 111, 114, 5, 55, 0, 0, 112, 113, 5, 20, 0, 0, 113, 115, 5, 9, 0, + 0, 114, 112, 1, 0, 0, 0, 114, 115, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, + 117, 5, 21, 0, 0, 117, 118, 5, 9, 0, 0, 118, 126, 3, 50, 25, 0, 119, 120, + 5, 55, 0, 0, 120, 122, 5, 23, 0, 0, 121, 123, 3, 10, 5, 0, 122, 121, 1, + 0, 0, 0, 123, 124, 1, 0, 0, 0, 124, 122, 1, 0, 0, 0, 124, 125, 1, 0, 0, + 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, + 9, 1, 0, 0, 0, 128, 129, 5, 55, 0, 0, 129, 131, 3, 46, 23, 0, 130, 128, + 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 133, 5, 55, + 0, 0, 133, 134, 5, 25, 0, 0, 134, 135, 5, 9, 0, 0, 135, 137, 3, 12, 6, + 0, 136, 138, 5, 9, 0, 0, 137, 136, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, + 139, 1, 0, 0, 0, 139, 141, 5, 1, 0, 0, 140, 142, 5, 9, 0, 0, 141, 140, + 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 144, 3, 14, + 7, 0, 144, 11, 1, 0, 0, 0, 145, 146, 3, 50, 25, 0, 146, 13, 1, 0, 0, 0, + 147, 151, 3, 26, 13, 0, 148, 151, 3, 20, 10, 0, 149, 151, 3, 22, 11, 0, + 150, 147, 1, 0, 0, 0, 150, 148, 1, 0, 0, 0, 150, 149, 1, 0, 0, 0, 151, + 153, 1, 0, 0, 0, 152, 154, 3, 18, 9, 0, 153, 152, 1, 0, 0, 0, 153, 154, + 1, 0, 0, 0, 154, 15, 1, 0, 0, 0, 155, 158, 3, 20, 10, 0, 156, 158, 3, 24, + 12, 0, 157, 155, 1, 0, 0, 0, 157, 156, 1, 0, 0, 0, 158, 160, 1, 0, 0, 0, + 159, 161, 3, 18, 9, 0, 160, 159, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, + 17, 1, 0, 0, 0, 162, 163, 5, 9, 0, 0, 163, 164, 5, 13, 0, 0, 164, 167, + 5, 9, 0, 0, 165, 168, 3, 20, 10, 0, 166, 168, 3, 24, 12, 0, 167, 165, 1, + 0, 0, 0, 167, 166, 1, 0, 0, 0, 168, 170, 1, 0, 0, 0, 169, 162, 1, 0, 0, + 0, 170, 171, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, + 192, 1, 0, 0, 0, 173, 174, 5, 9, 0, 0, 174, 175, 5, 12, 0, 0, 175, 178, + 5, 9, 0, 0, 176, 179, 3, 20, 10, 0, 177, 179, 3, 24, 12, 0, 178, 176, 1, + 0, 0, 0, 178, 177, 1, 0, 0, 0, 179, 181, 1, 0, 0, 0, 180, 173, 1, 0, 0, + 0, 181, 182, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, + 192, 1, 0, 0, 0, 184, 185, 5, 9, 0, 0, 185, 186, 5, 14, 0, 0, 186, 189, + 5, 9, 0, 0, 187, 190, 3, 20, 10, 0, 188, 190, 3, 24, 12, 0, 189, 187, 1, + 0, 0, 0, 189, 188, 1, 0, 0, 0, 190, 192, 1, 0, 0, 0, 191, 169, 1, 0, 0, + 0, 191, 180, 1, 0, 0, 0, 191, 184, 1, 0, 0, 0, 192, 19, 1, 0, 0, 0, 193, + 194, 3, 28, 14, 0, 194, 21, 1, 0, 0, 0, 195, 199, 5, 7, 0, 0, 196, 198, + 5, 9, 0, 0, 197, 196, 1, 0, 0, 0, 198, 201, 1, 0, 0, 0, 199, 197, 1, 0, + 0, 0, 199, 200, 1, 0, 0, 0, 200, 204, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, + 202, 205, 3, 14, 7, 0, 203, 205, 3, 24, 12, 0, 204, 202, 1, 0, 0, 0, 204, + 203, 1, 0, 0, 0, 205, 209, 1, 0, 0, 0, 206, 208, 5, 9, 0, 0, 207, 206, + 1, 0, 0, 0, 208, 211, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 209, 210, 1, 0, + 0, 0, 210, 212, 1, 0, 0, 0, 211, 209, 1, 0, 0, 0, 212, 213, 5, 8, 0, 0, + 213, 23, 1, 0, 0, 0, 214, 218, 5, 7, 0, 0, 215, 217, 5, 9, 0, 0, 216, 215, + 1, 0, 0, 0, 217, 220, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 218, 219, 1, 0, + 0, 0, 219, 223, 1, 0, 0, 0, 220, 218, 1, 0, 0, 0, 221, 224, 3, 16, 8, 0, + 222, 224, 3, 24, 12, 0, 223, 221, 1, 0, 0, 0, 223, 222, 1, 0, 0, 0, 224, + 228, 1, 0, 0, 0, 225, 227, 5, 9, 0, 0, 226, 225, 1, 0, 0, 0, 227, 230, + 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 231, 1, 0, + 0, 0, 230, 228, 1, 0, 0, 0, 231, 232, 5, 8, 0, 0, 232, 25, 1, 0, 0, 0, + 233, 235, 5, 5, 0, 0, 234, 236, 5, 9, 0, 0, 235, 234, 1, 0, 0, 0, 235, + 236, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 239, 3, 30, 15, 0, 238, 240, + 5, 9, 0, 0, 239, 238, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 251, 1, 0, + 0, 0, 241, 243, 5, 2, 0, 0, 242, 244, 5, 9, 0, 0, 243, 242, 1, 0, 0, 0, + 243, 244, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 247, 3, 30, 15, 0, 246, + 248, 5, 9, 0, 0, 247, 246, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 250, + 1, 0, 0, 0, 249, 241, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, + 0, 0, 251, 252, 1, 0, 0, 0, 252, 254, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, + 254, 255, 5, 34, 0, 0, 255, 27, 1, 0, 0, 0, 256, 261, 3, 50, 25, 0, 257, + 258, 5, 9, 0, 0, 258, 259, 5, 15, 0, 0, 259, 260, 5, 9, 0, 0, 260, 262, + 3, 50, 25, 0, 261, 257, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 29, 1, 0, + 0, 0, 263, 265, 5, 55, 0, 0, 264, 263, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, + 265, 273, 1, 0, 0, 0, 266, 274, 3, 32, 16, 0, 267, 268, 3, 32, 16, 0, 268, + 269, 5, 9, 0, 0, 269, 270, 5, 26, 0, 0, 270, 271, 5, 9, 0, 0, 271, 272, + 3, 38, 19, 0, 272, 274, 1, 0, 0, 0, 273, 266, 1, 0, 0, 0, 273, 267, 1, + 0, 0, 0, 274, 276, 1, 0, 0, 0, 275, 277, 5, 55, 0, 0, 276, 275, 1, 0, 0, + 0, 276, 277, 1, 0, 0, 0, 277, 31, 1, 0, 0, 0, 278, 283, 3, 50, 25, 0, 279, + 280, 5, 1, 0, 0, 280, 284, 5, 42, 0, 0, 281, 282, 5, 11, 0, 0, 282, 284, + 3, 50, 25, 0, 283, 279, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 283, 284, 1, + 0, 0, 0, 284, 33, 1, 0, 0, 0, 285, 287, 3, 36, 18, 0, 286, 285, 1, 0, 0, + 0, 287, 290, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, + 35, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 291, 292, 5, 55, 0, 0, 292, 294, + 3, 46, 23, 0, 293, 291, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 295, 1, + 0, 0, 0, 295, 296, 5, 55, 0, 0, 296, 297, 5, 22, 0, 0, 297, 298, 5, 9, + 0, 0, 298, 300, 3, 38, 19, 0, 299, 301, 5, 9, 0, 0, 300, 299, 1, 0, 0, + 0, 300, 301, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 304, 5, 7, 0, 0, 303, + 305, 5, 9, 0, 0, 304, 303, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 306, + 1, 0, 0, 0, 306, 308, 3, 40, 20, 0, 307, 309, 5, 9, 0, 0, 308, 307, 1, + 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 320, 1, 0, 0, 0, 310, 312, 5, 2, 0, + 0, 311, 313, 5, 9, 0, 0, 312, 311, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, + 314, 1, 0, 0, 0, 314, 316, 3, 40, 20, 0, 315, 317, 5, 9, 0, 0, 316, 315, + 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 319, 1, 0, 0, 0, 318, 310, 1, 0, + 0, 0, 319, 322, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, + 321, 324, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 323, 325, 5, 55, 0, 0, 324, + 323, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 328, + 5, 8, 0, 0, 327, 329, 5, 9, 0, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, + 0, 0, 329, 330, 1, 0, 0, 0, 330, 332, 5, 35, 0, 0, 331, 333, 5, 55, 0, + 0, 332, 331, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 335, 1, 0, 0, 0, 334, + 336, 5, 9, 0, 0, 335, 334, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 337, + 1, 0, 0, 0, 337, 339, 3, 52, 26, 0, 338, 340, 5, 55, 0, 0, 339, 338, 1, + 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 342, 5, 36, 0, + 0, 342, 37, 1, 0, 0, 0, 343, 344, 5, 10, 0, 0, 344, 39, 1, 0, 0, 0, 345, + 347, 5, 55, 0, 0, 346, 345, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 348, + 1, 0, 0, 0, 348, 350, 3, 42, 21, 0, 349, 351, 5, 9, 0, 0, 350, 349, 1, + 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 5, 1, 0, + 0, 353, 355, 5, 9, 0, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, + 356, 1, 0, 0, 0, 356, 357, 3, 44, 22, 0, 357, 41, 1, 0, 0, 0, 358, 359, + 5, 10, 0, 0, 359, 43, 1, 0, 0, 0, 360, 366, 5, 57, 0, 0, 361, 362, 5, 56, + 0, 0, 362, 363, 5, 3, 0, 0, 363, 364, 5, 57, 0, 0, 364, 366, 5, 4, 0, 0, + 365, 360, 1, 0, 0, 0, 365, 361, 1, 0, 0, 0, 366, 45, 1, 0, 0, 0, 367, 371, + 5, 11, 0, 0, 368, 370, 8, 0, 0, 0, 369, 368, 1, 0, 0, 0, 370, 373, 1, 0, + 0, 0, 371, 369, 1, 0, 0, 0, 371, 372, 1, 0, 0, 0, 372, 376, 1, 0, 0, 0, + 373, 371, 1, 0, 0, 0, 374, 375, 5, 55, 0, 0, 375, 377, 3, 46, 23, 0, 376, + 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 47, 1, 0, 0, 0, 378, 379, 7, + 1, 0, 0, 379, 49, 1, 0, 0, 0, 380, 383, 3, 48, 24, 0, 381, 383, 5, 54, + 0, 0, 382, 380, 1, 0, 0, 0, 382, 381, 1, 0, 0, 0, 383, 51, 1, 0, 0, 0, + 384, 387, 7, 2, 0, 0, 385, 387, 8, 3, 0, 0, 386, 384, 1, 0, 0, 0, 386, + 385, 1, 0, 0, 0, 387, 390, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 388, 389, + 1, 0, 0, 0, 389, 53, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 66, 55, 58, 62, + 65, 69, 73, 80, 88, 93, 99, 104, 109, 114, 124, 126, 130, 137, 141, 150, + 153, 157, 160, 167, 171, 178, 182, 189, 191, 199, 204, 209, 218, 223, 228, + 235, 239, 243, 247, 251, 261, 264, 273, 276, 283, 288, 293, 300, 304, 308, + 312, 316, 320, 324, 328, 332, 335, 339, 346, 350, 354, 365, 371, 376, 382, + 386, 388, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -333,9 +337,10 @@ const ( OpenFGAParserNUM_UINT = 51 OpenFGAParserSTRING = 52 OpenFGAParserBYTES = 53 - OpenFGAParserNEWLINE = 54 - OpenFGAParserCONDITION_PARAM_CONTAINER = 55 - OpenFGAParserCONDITION_PARAM_TYPE = 56 + OpenFGAParserEXTENDED_IDENTIFIER = 54 + OpenFGAParserNEWLINE = 55 + OpenFGAParserCONDITION_PARAM_CONTAINER = 56 + OpenFGAParserCONDITION_PARAM_TYPE = 57 ) // OpenFGAParser rules. @@ -365,7 +370,8 @@ const ( OpenFGAParserRULE_parameterType = 22 OpenFGAParserRULE_multiLineComment = 23 OpenFGAParserRULE_identifier = 24 - OpenFGAParserRULE_conditionExpression = 25 + OpenFGAParserRULE_extended_identifier = 25 + OpenFGAParserRULE_conditionExpression = 26 ) // IMainContext is an interface to support dynamic dispatch. @@ -531,7 +537,7 @@ func (p *OpenFGAParser) Main() (localctx IMainContext) { var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(53) + p.SetState(55) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -541,7 +547,7 @@ func (p *OpenFGAParser) Main() (localctx IMainContext) { if _la == OpenFGAParserWHITESPACE { { - p.SetState(52) + p.SetState(54) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -550,7 +556,7 @@ func (p *OpenFGAParser) Main() (localctx IMainContext) { } } - p.SetState(56) + p.SetState(58) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -560,7 +566,7 @@ func (p *OpenFGAParser) Main() (localctx IMainContext) { if _la == OpenFGAParserNEWLINE { { - p.SetState(55) + p.SetState(57) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -569,7 +575,7 @@ func (p *OpenFGAParser) Main() (localctx IMainContext) { } } - p.SetState(60) + p.SetState(62) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -578,27 +584,27 @@ func (p *OpenFGAParser) Main() (localctx IMainContext) { switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 2, p.GetParserRuleContext()) { case 1: { - p.SetState(58) + p.SetState(60) p.ModelHeader() } case 2: { - p.SetState(59) + p.SetState(61) p.ModuleHeader() } case antlr.ATNInvalidAltNumber: goto errorExit } - p.SetState(63) + p.SetState(65) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 3, p.GetParserRuleContext()) == 1 { { - p.SetState(62) + p.SetState(64) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -610,16 +616,16 @@ func (p *OpenFGAParser) Main() (localctx IMainContext) { goto errorExit } { - p.SetState(65) + p.SetState(67) p.TypeDefs() } - p.SetState(67) + p.SetState(69) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 4, p.GetParserRuleContext()) == 1 { { - p.SetState(66) + p.SetState(68) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -631,10 +637,10 @@ func (p *OpenFGAParser) Main() (localctx IMainContext) { goto errorExit } { - p.SetState(69) + p.SetState(71) p.Conditions() } - p.SetState(71) + p.SetState(73) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -644,7 +650,7 @@ func (p *OpenFGAParser) Main() (localctx IMainContext) { if _la == OpenFGAParserNEWLINE { { - p.SetState(70) + p.SetState(72) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -654,7 +660,7 @@ func (p *OpenFGAParser) Main() (localctx IMainContext) { } { - p.SetState(73) + p.SetState(75) p.Match(OpenFGAParserEOF) if p.HasError() { // Recognition error - abort rule @@ -820,7 +826,7 @@ func (p *OpenFGAParser) ModelHeader() (localctx IModelHeaderContext) { var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(78) + p.SetState(80) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -830,11 +836,11 @@ func (p *OpenFGAParser) ModelHeader() (localctx IModelHeaderContext) { if _la == OpenFGAParserHASH { { - p.SetState(75) + p.SetState(77) p.MultiLineComment() } { - p.SetState(76) + p.SetState(78) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -844,7 +850,7 @@ func (p *OpenFGAParser) ModelHeader() (localctx IModelHeaderContext) { } { - p.SetState(80) + p.SetState(82) p.Match(OpenFGAParserMODEL) if p.HasError() { // Recognition error - abort rule @@ -852,7 +858,7 @@ func (p *OpenFGAParser) ModelHeader() (localctx IModelHeaderContext) { } } { - p.SetState(81) + p.SetState(83) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -860,7 +866,7 @@ func (p *OpenFGAParser) ModelHeader() (localctx IModelHeaderContext) { } } { - p.SetState(82) + p.SetState(84) p.Match(OpenFGAParserSCHEMA) if p.HasError() { // Recognition error - abort rule @@ -868,7 +874,7 @@ func (p *OpenFGAParser) ModelHeader() (localctx IModelHeaderContext) { } } { - p.SetState(83) + p.SetState(85) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -876,7 +882,7 @@ func (p *OpenFGAParser) ModelHeader() (localctx IModelHeaderContext) { } } { - p.SetState(84) + p.SetState(86) var _m = p.Match(OpenFGAParserSCHEMA_VERSION) @@ -886,7 +892,7 @@ func (p *OpenFGAParser) ModelHeader() (localctx IModelHeaderContext) { goto errorExit } } - p.SetState(86) + p.SetState(88) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -896,7 +902,7 @@ func (p *OpenFGAParser) ModelHeader() (localctx IModelHeaderContext) { if _la == OpenFGAParserWHITESPACE { { - p.SetState(85) + p.SetState(87) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -1066,7 +1072,7 @@ func (p *OpenFGAParser) ModuleHeader() (localctx IModuleHeaderContext) { var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(91) + p.SetState(93) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1076,11 +1082,11 @@ func (p *OpenFGAParser) ModuleHeader() (localctx IModuleHeaderContext) { if _la == OpenFGAParserHASH { { - p.SetState(88) + p.SetState(90) p.MultiLineComment() } { - p.SetState(89) + p.SetState(91) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -1090,7 +1096,7 @@ func (p *OpenFGAParser) ModuleHeader() (localctx IModuleHeaderContext) { } { - p.SetState(93) + p.SetState(95) p.Match(OpenFGAParserMODULE) if p.HasError() { // Recognition error - abort rule @@ -1098,7 +1104,7 @@ func (p *OpenFGAParser) ModuleHeader() (localctx IModuleHeaderContext) { } } { - p.SetState(94) + p.SetState(96) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -1106,14 +1112,14 @@ func (p *OpenFGAParser) ModuleHeader() (localctx IModuleHeaderContext) { } } { - p.SetState(95) + p.SetState(97) var _x = p.Identifier() localctx.(*ModuleHeaderContext).moduleName = _x } - p.SetState(97) + p.SetState(99) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1123,7 +1129,7 @@ func (p *OpenFGAParser) ModuleHeader() (localctx IModuleHeaderContext) { if _la == OpenFGAParserWHITESPACE { { - p.SetState(96) + p.SetState(98) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -1267,7 +1273,7 @@ func (p *OpenFGAParser) TypeDefs() (localctx ITypeDefsContext) { var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(102) + p.SetState(104) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1279,13 +1285,13 @@ func (p *OpenFGAParser) TypeDefs() (localctx ITypeDefsContext) { for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(99) + p.SetState(101) p.TypeDef() } } - p.SetState(104) + p.SetState(106) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1320,11 +1326,11 @@ type ITypeDefContext interface { GetParser() antlr.Parser // GetTypeName returns the typeName rule contexts. - GetTypeName() IIdentifierContext + GetTypeName() IExtended_identifierContext // SetTypeName sets the typeName rule contexts. - SetTypeName(IIdentifierContext) + SetTypeName(IExtended_identifierContext) // Getter signatures @@ -1333,7 +1339,7 @@ type ITypeDefContext interface { TYPE() antlr.TerminalNode AllWHITESPACE() []antlr.TerminalNode WHITESPACE(i int) antlr.TerminalNode - Identifier() IIdentifierContext + Extended_identifier() IExtended_identifierContext MultiLineComment() IMultiLineCommentContext EXTEND() antlr.TerminalNode RELATIONS() antlr.TerminalNode @@ -1347,7 +1353,7 @@ type ITypeDefContext interface { type TypeDefContext struct { antlr.BaseParserRuleContext parser antlr.Parser - typeName IIdentifierContext + typeName IExtended_identifierContext } func NewEmptyTypeDefContext() *TypeDefContext { @@ -1377,10 +1383,10 @@ func NewTypeDefContext(parser antlr.Parser, parent antlr.ParserRuleContext, invo func (s *TypeDefContext) GetParser() antlr.Parser { return s.parser } -func (s *TypeDefContext) GetTypeName() IIdentifierContext { return s.typeName } +func (s *TypeDefContext) GetTypeName() IExtended_identifierContext { return s.typeName } -func (s *TypeDefContext) SetTypeName(v IIdentifierContext) { s.typeName = v } +func (s *TypeDefContext) SetTypeName(v IExtended_identifierContext) { s.typeName = v } func (s *TypeDefContext) AllNEWLINE() []antlr.TerminalNode { @@ -1403,10 +1409,10 @@ func (s *TypeDefContext) WHITESPACE(i int) antlr.TerminalNode { return s.GetToken(OpenFGAParserWHITESPACE, i) } -func (s *TypeDefContext) Identifier() IIdentifierContext { +func (s *TypeDefContext) Extended_identifier() IExtended_identifierContext { var t antlr.RuleContext; for _, ctx := range s.GetChildren() { - if _, ok := ctx.(IIdentifierContext); ok { + if _, ok := ctx.(IExtended_identifierContext); ok { t = ctx.(antlr.RuleContext); break } @@ -1416,7 +1422,7 @@ func (s *TypeDefContext) Identifier() IIdentifierContext { return nil } - return t.(IIdentifierContext) + return t.(IExtended_identifierContext) } func (s *TypeDefContext) MultiLineComment() IMultiLineCommentContext { @@ -1516,13 +1522,13 @@ func (p *OpenFGAParser) TypeDef() (localctx ITypeDefContext) { var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(107) + p.SetState(109) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 11, p.GetParserRuleContext()) == 1 { { - p.SetState(105) + p.SetState(107) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -1530,7 +1536,7 @@ func (p *OpenFGAParser) TypeDef() (localctx ITypeDefContext) { } } { - p.SetState(106) + p.SetState(108) p.MultiLineComment() } @@ -1538,14 +1544,14 @@ func (p *OpenFGAParser) TypeDef() (localctx ITypeDefContext) { goto errorExit } { - p.SetState(109) + p.SetState(111) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(112) + p.SetState(114) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1555,7 +1561,7 @@ func (p *OpenFGAParser) TypeDef() (localctx ITypeDefContext) { if _la == OpenFGAParserEXTEND { { - p.SetState(110) + p.SetState(112) p.Match(OpenFGAParserEXTEND) if p.HasError() { // Recognition error - abort rule @@ -1563,7 +1569,7 @@ func (p *OpenFGAParser) TypeDef() (localctx ITypeDefContext) { } } { - p.SetState(111) + p.SetState(113) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -1573,7 +1579,7 @@ func (p *OpenFGAParser) TypeDef() (localctx ITypeDefContext) { } { - p.SetState(114) + p.SetState(116) p.Match(OpenFGAParserTYPE) if p.HasError() { // Recognition error - abort rule @@ -1581,7 +1587,7 @@ func (p *OpenFGAParser) TypeDef() (localctx ITypeDefContext) { } } { - p.SetState(115) + p.SetState(117) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -1589,20 +1595,20 @@ func (p *OpenFGAParser) TypeDef() (localctx ITypeDefContext) { } } { - p.SetState(116) + p.SetState(118) - var _x = p.Identifier() + var _x = p.Extended_identifier() localctx.(*TypeDefContext).typeName = _x } - p.SetState(124) + p.SetState(126) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 14, p.GetParserRuleContext()) == 1 { { - p.SetState(117) + p.SetState(119) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -1610,14 +1616,14 @@ func (p *OpenFGAParser) TypeDef() (localctx ITypeDefContext) { } } { - p.SetState(118) + p.SetState(120) p.Match(OpenFGAParserRELATIONS) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(120) + p.SetState(122) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1627,7 +1633,7 @@ func (p *OpenFGAParser) TypeDef() (localctx ITypeDefContext) { switch _alt { case 1: { - p.SetState(119) + p.SetState(121) p.RelationDeclaration() } @@ -1639,7 +1645,7 @@ func (p *OpenFGAParser) TypeDef() (localctx ITypeDefContext) { goto errorExit } - p.SetState(122) + p.SetState(124) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 13, p.GetParserRuleContext()) if p.HasError() { @@ -1823,13 +1829,13 @@ func (p *OpenFGAParser) RelationDeclaration() (localctx IRelationDeclarationCont var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(128) + p.SetState(130) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 15, p.GetParserRuleContext()) == 1 { { - p.SetState(126) + p.SetState(128) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -1837,7 +1843,7 @@ func (p *OpenFGAParser) RelationDeclaration() (localctx IRelationDeclarationCont } } { - p.SetState(127) + p.SetState(129) p.MultiLineComment() } @@ -1845,7 +1851,7 @@ func (p *OpenFGAParser) RelationDeclaration() (localctx IRelationDeclarationCont goto errorExit } { - p.SetState(130) + p.SetState(132) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -1853,7 +1859,7 @@ func (p *OpenFGAParser) RelationDeclaration() (localctx IRelationDeclarationCont } } { - p.SetState(131) + p.SetState(133) p.Match(OpenFGAParserDEFINE) if p.HasError() { // Recognition error - abort rule @@ -1861,7 +1867,7 @@ func (p *OpenFGAParser) RelationDeclaration() (localctx IRelationDeclarationCont } } { - p.SetState(132) + p.SetState(134) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -1869,10 +1875,10 @@ func (p *OpenFGAParser) RelationDeclaration() (localctx IRelationDeclarationCont } } { - p.SetState(133) + p.SetState(135) p.RelationName() } - p.SetState(135) + p.SetState(137) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1882,7 +1888,7 @@ func (p *OpenFGAParser) RelationDeclaration() (localctx IRelationDeclarationCont if _la == OpenFGAParserWHITESPACE { { - p.SetState(134) + p.SetState(136) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -1892,14 +1898,14 @@ func (p *OpenFGAParser) RelationDeclaration() (localctx IRelationDeclarationCont } { - p.SetState(137) + p.SetState(139) p.Match(OpenFGAParserCOLON) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(139) + p.SetState(141) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1909,7 +1915,7 @@ func (p *OpenFGAParser) RelationDeclaration() (localctx IRelationDeclarationCont if _la == OpenFGAParserWHITESPACE { { - p.SetState(138) + p.SetState(140) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -1920,7 +1926,7 @@ func (p *OpenFGAParser) RelationDeclaration() (localctx IRelationDeclarationCont } { - p.SetState(141) + p.SetState(143) p.RelationDef() } @@ -1949,7 +1955,7 @@ type IRelationNameContext interface { GetParser() antlr.Parser // Getter signatures - Identifier() IIdentifierContext + Extended_identifier() IExtended_identifierContext // IsRelationNameContext differentiates from other interfaces. IsRelationNameContext() @@ -1987,10 +1993,10 @@ func NewRelationNameContext(parser antlr.Parser, parent antlr.ParserRuleContext, func (s *RelationNameContext) GetParser() antlr.Parser { return s.parser } -func (s *RelationNameContext) Identifier() IIdentifierContext { +func (s *RelationNameContext) Extended_identifier() IExtended_identifierContext { var t antlr.RuleContext; for _, ctx := range s.GetChildren() { - if _, ok := ctx.(IIdentifierContext); ok { + if _, ok := ctx.(IExtended_identifierContext); ok { t = ctx.(antlr.RuleContext); break } @@ -2000,7 +2006,7 @@ func (s *RelationNameContext) Identifier() IIdentifierContext { return nil } - return t.(IIdentifierContext) + return t.(IExtended_identifierContext) } func (s *RelationNameContext) GetRuleContext() antlr.RuleContext { @@ -2032,8 +2038,8 @@ func (p *OpenFGAParser) RelationName() (localctx IRelationNameContext) { p.EnterRule(localctx, 12, OpenFGAParserRULE_relationName) p.EnterOuterAlt(localctx, 1) { - p.SetState(143) - p.Identifier() + p.SetState(145) + p.Extended_identifier() } @@ -2193,7 +2199,7 @@ func (p *OpenFGAParser) RelationDef() (localctx IRelationDefContext) { localctx = NewRelationDefContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 14, OpenFGAParserRULE_relationDef) p.EnterOuterAlt(localctx, 1) - p.SetState(148) + p.SetState(150) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2202,21 +2208,21 @@ func (p *OpenFGAParser) RelationDef() (localctx IRelationDefContext) { switch p.GetTokenStream().LA(1) { case OpenFGAParserLBRACKET: { - p.SetState(145) + p.SetState(147) p.RelationDefDirectAssignment() } - case OpenFGAParserIDENTIFIER, OpenFGAParserMODULE, OpenFGAParserMODEL, OpenFGAParserSCHEMA, OpenFGAParserEXTEND, OpenFGAParserTYPE, OpenFGAParserRELATION: + case OpenFGAParserIDENTIFIER, OpenFGAParserMODULE, OpenFGAParserMODEL, OpenFGAParserSCHEMA, OpenFGAParserEXTEND, OpenFGAParserTYPE, OpenFGAParserRELATION, OpenFGAParserEXTENDED_IDENTIFIER: { - p.SetState(146) + p.SetState(148) p.RelationDefGrouping() } case OpenFGAParserLPAREN: { - p.SetState(147) + p.SetState(149) p.RelationRecurse() } @@ -2226,13 +2232,13 @@ func (p *OpenFGAParser) RelationDef() (localctx IRelationDefContext) { p.SetError(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) goto errorExit } - p.SetState(151) + p.SetState(153) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 19, p.GetParserRuleContext()) == 1 { { - p.SetState(150) + p.SetState(152) p.RelationDefPartials() } @@ -2380,23 +2386,23 @@ func (p *OpenFGAParser) RelationDefNoDirect() (localctx IRelationDefNoDirectCont localctx = NewRelationDefNoDirectContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 16, OpenFGAParserRULE_relationDefNoDirect) p.EnterOuterAlt(localctx, 1) - p.SetState(155) + p.SetState(157) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } switch p.GetTokenStream().LA(1) { - case OpenFGAParserIDENTIFIER, OpenFGAParserMODULE, OpenFGAParserMODEL, OpenFGAParserSCHEMA, OpenFGAParserEXTEND, OpenFGAParserTYPE, OpenFGAParserRELATION: + case OpenFGAParserIDENTIFIER, OpenFGAParserMODULE, OpenFGAParserMODEL, OpenFGAParserSCHEMA, OpenFGAParserEXTEND, OpenFGAParserTYPE, OpenFGAParserRELATION, OpenFGAParserEXTENDED_IDENTIFIER: { - p.SetState(153) + p.SetState(155) p.RelationDefGrouping() } case OpenFGAParserLPAREN: { - p.SetState(154) + p.SetState(156) p.RelationRecurseNoDirect() } @@ -2406,13 +2412,13 @@ func (p *OpenFGAParser) RelationDefNoDirect() (localctx IRelationDefNoDirectCont p.SetError(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) goto errorExit } - p.SetState(158) + p.SetState(160) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 21, p.GetParserRuleContext()) == 1 { { - p.SetState(157) + p.SetState(159) p.RelationDefPartials() } @@ -2631,7 +2637,7 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont p.EnterRule(localctx, 18, OpenFGAParserRULE_relationDefPartials) var _alt int - p.SetState(189) + p.SetState(191) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2640,7 +2646,7 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 27, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) - p.SetState(167) + p.SetState(169) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2650,7 +2656,7 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont switch _alt { case 1: { - p.SetState(160) + p.SetState(162) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -2658,7 +2664,7 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont } } { - p.SetState(161) + p.SetState(163) p.Match(OpenFGAParserOR) if p.HasError() { // Recognition error - abort rule @@ -2666,30 +2672,30 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont } } { - p.SetState(162) + p.SetState(164) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(165) + p.SetState(167) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } switch p.GetTokenStream().LA(1) { - case OpenFGAParserIDENTIFIER, OpenFGAParserMODULE, OpenFGAParserMODEL, OpenFGAParserSCHEMA, OpenFGAParserEXTEND, OpenFGAParserTYPE, OpenFGAParserRELATION: + case OpenFGAParserIDENTIFIER, OpenFGAParserMODULE, OpenFGAParserMODEL, OpenFGAParserSCHEMA, OpenFGAParserEXTEND, OpenFGAParserTYPE, OpenFGAParserRELATION, OpenFGAParserEXTENDED_IDENTIFIER: { - p.SetState(163) + p.SetState(165) p.RelationDefGrouping() } case OpenFGAParserLPAREN: { - p.SetState(164) + p.SetState(166) p.RelationRecurseNoDirect() } @@ -2708,7 +2714,7 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont goto errorExit } - p.SetState(169) + p.SetState(171) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 23, p.GetParserRuleContext()) if p.HasError() { @@ -2719,7 +2725,7 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont case 2: p.EnterOuterAlt(localctx, 2) - p.SetState(178) + p.SetState(180) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2729,7 +2735,7 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont switch _alt { case 1: { - p.SetState(171) + p.SetState(173) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -2737,7 +2743,7 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont } } { - p.SetState(172) + p.SetState(174) p.Match(OpenFGAParserAND) if p.HasError() { // Recognition error - abort rule @@ -2745,30 +2751,30 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont } } { - p.SetState(173) + p.SetState(175) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(176) + p.SetState(178) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } switch p.GetTokenStream().LA(1) { - case OpenFGAParserIDENTIFIER, OpenFGAParserMODULE, OpenFGAParserMODEL, OpenFGAParserSCHEMA, OpenFGAParserEXTEND, OpenFGAParserTYPE, OpenFGAParserRELATION: + case OpenFGAParserIDENTIFIER, OpenFGAParserMODULE, OpenFGAParserMODEL, OpenFGAParserSCHEMA, OpenFGAParserEXTEND, OpenFGAParserTYPE, OpenFGAParserRELATION, OpenFGAParserEXTENDED_IDENTIFIER: { - p.SetState(174) + p.SetState(176) p.RelationDefGrouping() } case OpenFGAParserLPAREN: { - p.SetState(175) + p.SetState(177) p.RelationRecurseNoDirect() } @@ -2787,7 +2793,7 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont goto errorExit } - p.SetState(180) + p.SetState(182) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 25, p.GetParserRuleContext()) if p.HasError() { @@ -2799,7 +2805,7 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(182) + p.SetState(184) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -2807,7 +2813,7 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont } } { - p.SetState(183) + p.SetState(185) p.Match(OpenFGAParserBUT_NOT) if p.HasError() { // Recognition error - abort rule @@ -2815,30 +2821,30 @@ func (p *OpenFGAParser) RelationDefPartials() (localctx IRelationDefPartialsCont } } { - p.SetState(184) + p.SetState(186) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(187) + p.SetState(189) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } switch p.GetTokenStream().LA(1) { - case OpenFGAParserIDENTIFIER, OpenFGAParserMODULE, OpenFGAParserMODEL, OpenFGAParserSCHEMA, OpenFGAParserEXTEND, OpenFGAParserTYPE, OpenFGAParserRELATION: + case OpenFGAParserIDENTIFIER, OpenFGAParserMODULE, OpenFGAParserMODEL, OpenFGAParserSCHEMA, OpenFGAParserEXTEND, OpenFGAParserTYPE, OpenFGAParserRELATION, OpenFGAParserEXTENDED_IDENTIFIER: { - p.SetState(185) + p.SetState(187) p.RelationDefGrouping() } case OpenFGAParserLPAREN: { - p.SetState(186) + p.SetState(188) p.RelationRecurseNoDirect() } @@ -2960,7 +2966,7 @@ func (p *OpenFGAParser) RelationDefGrouping() (localctx IRelationDefGroupingCont p.EnterRule(localctx, 20, OpenFGAParserRULE_relationDefGrouping) p.EnterOuterAlt(localctx, 1) { - p.SetState(191) + p.SetState(193) p.RelationDefRewrite() } @@ -3110,14 +3116,14 @@ func (p *OpenFGAParser) RelationRecurse() (localctx IRelationRecurseContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(193) + p.SetState(195) p.Match(OpenFGAParserLPAREN) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(197) + p.SetState(199) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3127,7 +3133,7 @@ func (p *OpenFGAParser) RelationRecurse() (localctx IRelationRecurseContext) { for _la == OpenFGAParserWHITESPACE { { - p.SetState(194) + p.SetState(196) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -3136,14 +3142,14 @@ func (p *OpenFGAParser) RelationRecurse() (localctx IRelationRecurseContext) { } - p.SetState(199) + p.SetState(201) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(202) + p.SetState(204) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3152,21 +3158,21 @@ func (p *OpenFGAParser) RelationRecurse() (localctx IRelationRecurseContext) { switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 29, p.GetParserRuleContext()) { case 1: { - p.SetState(200) + p.SetState(202) p.RelationDef() } case 2: { - p.SetState(201) + p.SetState(203) p.RelationRecurseNoDirect() } case antlr.ATNInvalidAltNumber: goto errorExit } - p.SetState(207) + p.SetState(209) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3176,7 +3182,7 @@ func (p *OpenFGAParser) RelationRecurse() (localctx IRelationRecurseContext) { for _la == OpenFGAParserWHITESPACE { { - p.SetState(204) + p.SetState(206) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -3185,7 +3191,7 @@ func (p *OpenFGAParser) RelationRecurse() (localctx IRelationRecurseContext) { } - p.SetState(209) + p.SetState(211) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3193,7 +3199,7 @@ func (p *OpenFGAParser) RelationRecurse() (localctx IRelationRecurseContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(210) + p.SetState(212) p.Match(OpenFGAParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -3347,14 +3353,14 @@ func (p *OpenFGAParser) RelationRecurseNoDirect() (localctx IRelationRecurseNoDi p.EnterOuterAlt(localctx, 1) { - p.SetState(212) + p.SetState(214) p.Match(OpenFGAParserLPAREN) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(216) + p.SetState(218) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3364,7 +3370,7 @@ func (p *OpenFGAParser) RelationRecurseNoDirect() (localctx IRelationRecurseNoDi for _la == OpenFGAParserWHITESPACE { { - p.SetState(213) + p.SetState(215) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -3373,14 +3379,14 @@ func (p *OpenFGAParser) RelationRecurseNoDirect() (localctx IRelationRecurseNoDi } - p.SetState(218) + p.SetState(220) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(221) + p.SetState(223) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3389,21 +3395,21 @@ func (p *OpenFGAParser) RelationRecurseNoDirect() (localctx IRelationRecurseNoDi switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 32, p.GetParserRuleContext()) { case 1: { - p.SetState(219) + p.SetState(221) p.RelationDefNoDirect() } case 2: { - p.SetState(220) + p.SetState(222) p.RelationRecurseNoDirect() } case antlr.ATNInvalidAltNumber: goto errorExit } - p.SetState(226) + p.SetState(228) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3413,7 +3419,7 @@ func (p *OpenFGAParser) RelationRecurseNoDirect() (localctx IRelationRecurseNoDi for _la == OpenFGAParserWHITESPACE { { - p.SetState(223) + p.SetState(225) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -3422,7 +3428,7 @@ func (p *OpenFGAParser) RelationRecurseNoDirect() (localctx IRelationRecurseNoDi } - p.SetState(228) + p.SetState(230) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3430,7 +3436,7 @@ func (p *OpenFGAParser) RelationRecurseNoDirect() (localctx IRelationRecurseNoDi _la = p.GetTokenStream().LA(1) } { - p.SetState(229) + p.SetState(231) p.Match(OpenFGAParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -3603,14 +3609,14 @@ func (p *OpenFGAParser) RelationDefDirectAssignment() (localctx IRelationDefDire p.EnterOuterAlt(localctx, 1) { - p.SetState(231) + p.SetState(233) p.Match(OpenFGAParserLBRACKET) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(233) + p.SetState(235) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3620,7 +3626,7 @@ func (p *OpenFGAParser) RelationDefDirectAssignment() (localctx IRelationDefDire if _la == OpenFGAParserWHITESPACE { { - p.SetState(232) + p.SetState(234) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -3630,10 +3636,10 @@ func (p *OpenFGAParser) RelationDefDirectAssignment() (localctx IRelationDefDire } { - p.SetState(235) + p.SetState(237) p.RelationDefTypeRestriction() } - p.SetState(237) + p.SetState(239) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3643,7 +3649,7 @@ func (p *OpenFGAParser) RelationDefDirectAssignment() (localctx IRelationDefDire if _la == OpenFGAParserWHITESPACE { { - p.SetState(236) + p.SetState(238) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -3652,7 +3658,7 @@ func (p *OpenFGAParser) RelationDefDirectAssignment() (localctx IRelationDefDire } } - p.SetState(249) + p.SetState(251) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3662,14 +3668,14 @@ func (p *OpenFGAParser) RelationDefDirectAssignment() (localctx IRelationDefDire for _la == OpenFGAParserCOMMA { { - p.SetState(239) + p.SetState(241) p.Match(OpenFGAParserCOMMA) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(241) + p.SetState(243) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3679,7 +3685,7 @@ func (p *OpenFGAParser) RelationDefDirectAssignment() (localctx IRelationDefDire if _la == OpenFGAParserWHITESPACE { { - p.SetState(240) + p.SetState(242) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -3689,10 +3695,10 @@ func (p *OpenFGAParser) RelationDefDirectAssignment() (localctx IRelationDefDire } { - p.SetState(243) + p.SetState(245) p.RelationDefTypeRestriction() } - p.SetState(245) + p.SetState(247) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3702,7 +3708,7 @@ func (p *OpenFGAParser) RelationDefDirectAssignment() (localctx IRelationDefDire if _la == OpenFGAParserWHITESPACE { { - p.SetState(244) + p.SetState(246) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -3713,7 +3719,7 @@ func (p *OpenFGAParser) RelationDefDirectAssignment() (localctx IRelationDefDire } - p.SetState(251) + p.SetState(253) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3721,7 +3727,7 @@ func (p *OpenFGAParser) RelationDefDirectAssignment() (localctx IRelationDefDire _la = p.GetTokenStream().LA(1) } { - p.SetState(252) + p.SetState(254) p.Match(OpenFGAParserRPRACKET) if p.HasError() { // Recognition error - abort rule @@ -3753,22 +3759,22 @@ type IRelationDefRewriteContext interface { GetParser() antlr.Parser // GetRewriteComputedusersetName returns the rewriteComputedusersetName rule contexts. - GetRewriteComputedusersetName() IIdentifierContext + GetRewriteComputedusersetName() IExtended_identifierContext // GetRewriteTuplesetName returns the rewriteTuplesetName rule contexts. - GetRewriteTuplesetName() IIdentifierContext + GetRewriteTuplesetName() IExtended_identifierContext // SetRewriteComputedusersetName sets the rewriteComputedusersetName rule contexts. - SetRewriteComputedusersetName(IIdentifierContext) + SetRewriteComputedusersetName(IExtended_identifierContext) // SetRewriteTuplesetName sets the rewriteTuplesetName rule contexts. - SetRewriteTuplesetName(IIdentifierContext) + SetRewriteTuplesetName(IExtended_identifierContext) // Getter signatures - AllIdentifier() []IIdentifierContext - Identifier(i int) IIdentifierContext + AllExtended_identifier() []IExtended_identifierContext + Extended_identifier(i int) IExtended_identifierContext AllWHITESPACE() []antlr.TerminalNode WHITESPACE(i int) antlr.TerminalNode FROM() antlr.TerminalNode @@ -3780,8 +3786,8 @@ type IRelationDefRewriteContext interface { type RelationDefRewriteContext struct { antlr.BaseParserRuleContext parser antlr.Parser - rewriteComputedusersetName IIdentifierContext - rewriteTuplesetName IIdentifierContext + rewriteComputedusersetName IExtended_identifierContext + rewriteTuplesetName IExtended_identifierContext } func NewEmptyRelationDefRewriteContext() *RelationDefRewriteContext { @@ -3811,30 +3817,30 @@ func NewRelationDefRewriteContext(parser antlr.Parser, parent antlr.ParserRuleCo func (s *RelationDefRewriteContext) GetParser() antlr.Parser { return s.parser } -func (s *RelationDefRewriteContext) GetRewriteComputedusersetName() IIdentifierContext { return s.rewriteComputedusersetName } +func (s *RelationDefRewriteContext) GetRewriteComputedusersetName() IExtended_identifierContext { return s.rewriteComputedusersetName } -func (s *RelationDefRewriteContext) GetRewriteTuplesetName() IIdentifierContext { return s.rewriteTuplesetName } +func (s *RelationDefRewriteContext) GetRewriteTuplesetName() IExtended_identifierContext { return s.rewriteTuplesetName } -func (s *RelationDefRewriteContext) SetRewriteComputedusersetName(v IIdentifierContext) { s.rewriteComputedusersetName = v } +func (s *RelationDefRewriteContext) SetRewriteComputedusersetName(v IExtended_identifierContext) { s.rewriteComputedusersetName = v } -func (s *RelationDefRewriteContext) SetRewriteTuplesetName(v IIdentifierContext) { s.rewriteTuplesetName = v } +func (s *RelationDefRewriteContext) SetRewriteTuplesetName(v IExtended_identifierContext) { s.rewriteTuplesetName = v } -func (s *RelationDefRewriteContext) AllIdentifier() []IIdentifierContext { +func (s *RelationDefRewriteContext) AllExtended_identifier() []IExtended_identifierContext { children := s.GetChildren() len := 0 for _, ctx := range children { - if _, ok := ctx.(IIdentifierContext); ok { + if _, ok := ctx.(IExtended_identifierContext); ok { len++ } } - tst := make([]IIdentifierContext, len) + tst := make([]IExtended_identifierContext, len) i := 0 for _, ctx := range children { - if t, ok := ctx.(IIdentifierContext); ok { - tst[i] = t.(IIdentifierContext) + if t, ok := ctx.(IExtended_identifierContext); ok { + tst[i] = t.(IExtended_identifierContext) i++ } } @@ -3842,11 +3848,11 @@ func (s *RelationDefRewriteContext) AllIdentifier() []IIdentifierContext { return tst } -func (s *RelationDefRewriteContext) Identifier(i int) IIdentifierContext { +func (s *RelationDefRewriteContext) Extended_identifier(i int) IExtended_identifierContext { var t antlr.RuleContext; j := 0 for _, ctx := range s.GetChildren() { - if _, ok := ctx.(IIdentifierContext); ok { + if _, ok := ctx.(IExtended_identifierContext); ok { if j == i { t = ctx.(antlr.RuleContext); break @@ -3859,7 +3865,7 @@ func (s *RelationDefRewriteContext) Identifier(i int) IIdentifierContext { return nil } - return t.(IIdentifierContext) + return t.(IExtended_identifierContext) } func (s *RelationDefRewriteContext) AllWHITESPACE() []antlr.TerminalNode { @@ -3903,20 +3909,20 @@ func (p *OpenFGAParser) RelationDefRewrite() (localctx IRelationDefRewriteContex p.EnterRule(localctx, 28, OpenFGAParserRULE_relationDefRewrite) p.EnterOuterAlt(localctx, 1) { - p.SetState(254) + p.SetState(256) - var _x = p.Identifier() + var _x = p.Extended_identifier() localctx.(*RelationDefRewriteContext).rewriteComputedusersetName = _x } - p.SetState(259) + p.SetState(261) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 39, p.GetParserRuleContext()) == 1 { { - p.SetState(255) + p.SetState(257) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -3924,7 +3930,7 @@ func (p *OpenFGAParser) RelationDefRewrite() (localctx IRelationDefRewriteContex } } { - p.SetState(256) + p.SetState(258) p.Match(OpenFGAParserFROM) if p.HasError() { // Recognition error - abort rule @@ -3932,7 +3938,7 @@ func (p *OpenFGAParser) RelationDefRewrite() (localctx IRelationDefRewriteContex } } { - p.SetState(257) + p.SetState(259) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -3940,9 +3946,9 @@ func (p *OpenFGAParser) RelationDefRewrite() (localctx IRelationDefRewriteContex } } { - p.SetState(258) + p.SetState(260) - var _x = p.Identifier() + var _x = p.Extended_identifier() localctx.(*RelationDefRewriteContext).rewriteTuplesetName = _x @@ -4102,7 +4108,7 @@ func (p *OpenFGAParser) RelationDefTypeRestriction() (localctx IRelationDefTypeR var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(262) + p.SetState(264) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4112,7 +4118,7 @@ func (p *OpenFGAParser) RelationDefTypeRestriction() (localctx IRelationDefTypeR if _la == OpenFGAParserNEWLINE { { - p.SetState(261) + p.SetState(263) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -4121,7 +4127,7 @@ func (p *OpenFGAParser) RelationDefTypeRestriction() (localctx IRelationDefTypeR } } - p.SetState(271) + p.SetState(273) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4130,18 +4136,18 @@ func (p *OpenFGAParser) RelationDefTypeRestriction() (localctx IRelationDefTypeR switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 41, p.GetParserRuleContext()) { case 1: { - p.SetState(264) + p.SetState(266) p.RelationDefTypeRestrictionBase() } case 2: { - p.SetState(265) + p.SetState(267) p.RelationDefTypeRestrictionBase() } { - p.SetState(266) + p.SetState(268) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -4149,7 +4155,7 @@ func (p *OpenFGAParser) RelationDefTypeRestriction() (localctx IRelationDefTypeR } } { - p.SetState(267) + p.SetState(269) p.Match(OpenFGAParserKEYWORD_WITH) if p.HasError() { // Recognition error - abort rule @@ -4157,7 +4163,7 @@ func (p *OpenFGAParser) RelationDefTypeRestriction() (localctx IRelationDefTypeR } } { - p.SetState(268) + p.SetState(270) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -4165,7 +4171,7 @@ func (p *OpenFGAParser) RelationDefTypeRestriction() (localctx IRelationDefTypeR } } { - p.SetState(269) + p.SetState(271) p.ConditionName() } @@ -4173,7 +4179,7 @@ func (p *OpenFGAParser) RelationDefTypeRestriction() (localctx IRelationDefTypeR case antlr.ATNInvalidAltNumber: goto errorExit } - p.SetState(274) + p.SetState(276) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4183,7 +4189,7 @@ func (p *OpenFGAParser) RelationDefTypeRestriction() (localctx IRelationDefTypeR if _la == OpenFGAParserNEWLINE { { - p.SetState(273) + p.SetState(275) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -4225,22 +4231,22 @@ type IRelationDefTypeRestrictionBaseContext interface { // GetRelationDefTypeRestrictionType returns the relationDefTypeRestrictionType rule contexts. - GetRelationDefTypeRestrictionType() IIdentifierContext + GetRelationDefTypeRestrictionType() IExtended_identifierContext // GetRelationDefTypeRestrictionRelation returns the relationDefTypeRestrictionRelation rule contexts. - GetRelationDefTypeRestrictionRelation() IIdentifierContext + GetRelationDefTypeRestrictionRelation() IExtended_identifierContext // SetRelationDefTypeRestrictionType sets the relationDefTypeRestrictionType rule contexts. - SetRelationDefTypeRestrictionType(IIdentifierContext) + SetRelationDefTypeRestrictionType(IExtended_identifierContext) // SetRelationDefTypeRestrictionRelation sets the relationDefTypeRestrictionRelation rule contexts. - SetRelationDefTypeRestrictionRelation(IIdentifierContext) + SetRelationDefTypeRestrictionRelation(IExtended_identifierContext) // Getter signatures - AllIdentifier() []IIdentifierContext - Identifier(i int) IIdentifierContext + AllExtended_identifier() []IExtended_identifierContext + Extended_identifier(i int) IExtended_identifierContext COLON() antlr.TerminalNode HASH() antlr.TerminalNode STAR() antlr.TerminalNode @@ -4252,9 +4258,9 @@ type IRelationDefTypeRestrictionBaseContext interface { type RelationDefTypeRestrictionBaseContext struct { antlr.BaseParserRuleContext parser antlr.Parser - relationDefTypeRestrictionType IIdentifierContext + relationDefTypeRestrictionType IExtended_identifierContext relationDefTypeRestrictionWildcard antlr.Token - relationDefTypeRestrictionRelation IIdentifierContext + relationDefTypeRestrictionRelation IExtended_identifierContext } func NewEmptyRelationDefTypeRestrictionBaseContext() *RelationDefTypeRestrictionBaseContext { @@ -4290,30 +4296,30 @@ func (s *RelationDefTypeRestrictionBaseContext) GetRelationDefTypeRestrictionWil func (s *RelationDefTypeRestrictionBaseContext) SetRelationDefTypeRestrictionWildcard(v antlr.Token) { s.relationDefTypeRestrictionWildcard = v } -func (s *RelationDefTypeRestrictionBaseContext) GetRelationDefTypeRestrictionType() IIdentifierContext { return s.relationDefTypeRestrictionType } +func (s *RelationDefTypeRestrictionBaseContext) GetRelationDefTypeRestrictionType() IExtended_identifierContext { return s.relationDefTypeRestrictionType } -func (s *RelationDefTypeRestrictionBaseContext) GetRelationDefTypeRestrictionRelation() IIdentifierContext { return s.relationDefTypeRestrictionRelation } +func (s *RelationDefTypeRestrictionBaseContext) GetRelationDefTypeRestrictionRelation() IExtended_identifierContext { return s.relationDefTypeRestrictionRelation } -func (s *RelationDefTypeRestrictionBaseContext) SetRelationDefTypeRestrictionType(v IIdentifierContext) { s.relationDefTypeRestrictionType = v } +func (s *RelationDefTypeRestrictionBaseContext) SetRelationDefTypeRestrictionType(v IExtended_identifierContext) { s.relationDefTypeRestrictionType = v } -func (s *RelationDefTypeRestrictionBaseContext) SetRelationDefTypeRestrictionRelation(v IIdentifierContext) { s.relationDefTypeRestrictionRelation = v } +func (s *RelationDefTypeRestrictionBaseContext) SetRelationDefTypeRestrictionRelation(v IExtended_identifierContext) { s.relationDefTypeRestrictionRelation = v } -func (s *RelationDefTypeRestrictionBaseContext) AllIdentifier() []IIdentifierContext { +func (s *RelationDefTypeRestrictionBaseContext) AllExtended_identifier() []IExtended_identifierContext { children := s.GetChildren() len := 0 for _, ctx := range children { - if _, ok := ctx.(IIdentifierContext); ok { + if _, ok := ctx.(IExtended_identifierContext); ok { len++ } } - tst := make([]IIdentifierContext, len) + tst := make([]IExtended_identifierContext, len) i := 0 for _, ctx := range children { - if t, ok := ctx.(IIdentifierContext); ok { - tst[i] = t.(IIdentifierContext) + if t, ok := ctx.(IExtended_identifierContext); ok { + tst[i] = t.(IExtended_identifierContext) i++ } } @@ -4321,11 +4327,11 @@ func (s *RelationDefTypeRestrictionBaseContext) AllIdentifier() []IIdentifierCon return tst } -func (s *RelationDefTypeRestrictionBaseContext) Identifier(i int) IIdentifierContext { +func (s *RelationDefTypeRestrictionBaseContext) Extended_identifier(i int) IExtended_identifierContext { var t antlr.RuleContext; j := 0 for _, ctx := range s.GetChildren() { - if _, ok := ctx.(IIdentifierContext); ok { + if _, ok := ctx.(IExtended_identifierContext); ok { if j == i { t = ctx.(antlr.RuleContext); break @@ -4338,7 +4344,7 @@ func (s *RelationDefTypeRestrictionBaseContext) Identifier(i int) IIdentifierCon return nil } - return t.(IIdentifierContext) + return t.(IExtended_identifierContext) } func (s *RelationDefTypeRestrictionBaseContext) COLON() antlr.TerminalNode { @@ -4382,14 +4388,14 @@ func (p *OpenFGAParser) RelationDefTypeRestrictionBase() (localctx IRelationDefT p.EnterRule(localctx, 32, OpenFGAParserRULE_relationDefTypeRestrictionBase) p.EnterOuterAlt(localctx, 1) { - p.SetState(276) + p.SetState(278) - var _x = p.Identifier() + var _x = p.Extended_identifier() localctx.(*RelationDefTypeRestrictionBaseContext).relationDefTypeRestrictionType = _x } - p.SetState(281) + p.SetState(283) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4397,7 +4403,7 @@ func (p *OpenFGAParser) RelationDefTypeRestrictionBase() (localctx IRelationDefT switch p.GetTokenStream().LA(1) { case OpenFGAParserCOLON: { - p.SetState(277) + p.SetState(279) p.Match(OpenFGAParserCOLON) if p.HasError() { // Recognition error - abort rule @@ -4405,7 +4411,7 @@ func (p *OpenFGAParser) RelationDefTypeRestrictionBase() (localctx IRelationDefT } } { - p.SetState(278) + p.SetState(280) var _m = p.Match(OpenFGAParserSTAR) @@ -4420,7 +4426,7 @@ func (p *OpenFGAParser) RelationDefTypeRestrictionBase() (localctx IRelationDefT case OpenFGAParserHASH: { - p.SetState(279) + p.SetState(281) p.Match(OpenFGAParserHASH) if p.HasError() { // Recognition error - abort rule @@ -4428,9 +4434,9 @@ func (p *OpenFGAParser) RelationDefTypeRestrictionBase() (localctx IRelationDefT } } { - p.SetState(280) + p.SetState(282) - var _x = p.Identifier() + var _x = p.Extended_identifier() localctx.(*RelationDefTypeRestrictionBaseContext).relationDefTypeRestrictionRelation = _x @@ -4579,7 +4585,7 @@ func (p *OpenFGAParser) Conditions() (localctx IConditionsContext) { var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(286) + p.SetState(288) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4591,13 +4597,13 @@ func (p *OpenFGAParser) Conditions() (localctx IConditionsContext) { for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(283) + p.SetState(285) p.Condition() } } - p.SetState(288) + p.SetState(290) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4848,13 +4854,13 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(291) + p.SetState(293) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 45, p.GetParserRuleContext()) == 1 { { - p.SetState(289) + p.SetState(291) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -4862,7 +4868,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } } { - p.SetState(290) + p.SetState(292) p.MultiLineComment() } @@ -4870,7 +4876,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { goto errorExit } { - p.SetState(293) + p.SetState(295) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -4878,7 +4884,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } } { - p.SetState(294) + p.SetState(296) p.Match(OpenFGAParserCONDITION) if p.HasError() { // Recognition error - abort rule @@ -4886,7 +4892,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } } { - p.SetState(295) + p.SetState(297) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -4894,10 +4900,10 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } } { - p.SetState(296) + p.SetState(298) p.ConditionName() } - p.SetState(298) + p.SetState(300) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4907,7 +4913,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { if _la == OpenFGAParserWHITESPACE { { - p.SetState(297) + p.SetState(299) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -4917,14 +4923,14 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } { - p.SetState(300) + p.SetState(302) p.Match(OpenFGAParserLPAREN) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(302) + p.SetState(304) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4934,7 +4940,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { if _la == OpenFGAParserWHITESPACE { { - p.SetState(301) + p.SetState(303) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -4944,10 +4950,10 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } { - p.SetState(304) + p.SetState(306) p.ConditionParameter() } - p.SetState(306) + p.SetState(308) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4957,7 +4963,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { if _la == OpenFGAParserWHITESPACE { { - p.SetState(305) + p.SetState(307) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -4966,7 +4972,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } } - p.SetState(318) + p.SetState(320) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4976,14 +4982,14 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { for _la == OpenFGAParserCOMMA { { - p.SetState(308) + p.SetState(310) p.Match(OpenFGAParserCOMMA) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(310) + p.SetState(312) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4993,7 +4999,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { if _la == OpenFGAParserWHITESPACE { { - p.SetState(309) + p.SetState(311) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -5003,10 +5009,10 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } { - p.SetState(312) + p.SetState(314) p.ConditionParameter() } - p.SetState(314) + p.SetState(316) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5016,7 +5022,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { if _la == OpenFGAParserWHITESPACE { { - p.SetState(313) + p.SetState(315) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -5027,14 +5033,14 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } - p.SetState(320) + p.SetState(322) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(322) + p.SetState(324) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5044,7 +5050,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { if _la == OpenFGAParserNEWLINE { { - p.SetState(321) + p.SetState(323) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5054,14 +5060,14 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } { - p.SetState(324) + p.SetState(326) p.Match(OpenFGAParserRPAREN) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(326) + p.SetState(328) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5071,7 +5077,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { if _la == OpenFGAParserWHITESPACE { { - p.SetState(325) + p.SetState(327) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -5081,20 +5087,20 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } { - p.SetState(328) + p.SetState(330) p.Match(OpenFGAParserLBRACE) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(330) + p.SetState(332) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 54, p.GetParserRuleContext()) == 1 { { - p.SetState(329) + p.SetState(331) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5105,13 +5111,13 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } else if p.HasError() { // JIM goto errorExit } - p.SetState(333) + p.SetState(335) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 55, p.GetParserRuleContext()) == 1 { { - p.SetState(332) + p.SetState(334) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -5123,10 +5129,10 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { goto errorExit } { - p.SetState(335) + p.SetState(337) p.ConditionExpression() } - p.SetState(337) + p.SetState(339) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5136,7 +5142,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { if _la == OpenFGAParserNEWLINE { { - p.SetState(336) + p.SetState(338) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5146,7 +5152,7 @@ func (p *OpenFGAParser) Condition() (localctx IConditionContext) { } { - p.SetState(339) + p.SetState(341) p.Match(OpenFGAParserRBRACE) if p.HasError() { // Recognition error - abort rule @@ -5249,7 +5255,7 @@ func (p *OpenFGAParser) ConditionName() (localctx IConditionNameContext) { p.EnterRule(localctx, 38, OpenFGAParserRULE_conditionName) p.EnterOuterAlt(localctx, 1) { - p.SetState(341) + p.SetState(343) p.Match(OpenFGAParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -5402,7 +5408,7 @@ func (p *OpenFGAParser) ConditionParameter() (localctx IConditionParameterContex var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(344) + p.SetState(346) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5412,7 +5418,7 @@ func (p *OpenFGAParser) ConditionParameter() (localctx IConditionParameterContex if _la == OpenFGAParserNEWLINE { { - p.SetState(343) + p.SetState(345) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5422,10 +5428,10 @@ func (p *OpenFGAParser) ConditionParameter() (localctx IConditionParameterContex } { - p.SetState(346) + p.SetState(348) p.ParameterName() } - p.SetState(348) + p.SetState(350) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5435,7 +5441,7 @@ func (p *OpenFGAParser) ConditionParameter() (localctx IConditionParameterContex if _la == OpenFGAParserWHITESPACE { { - p.SetState(347) + p.SetState(349) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -5445,14 +5451,14 @@ func (p *OpenFGAParser) ConditionParameter() (localctx IConditionParameterContex } { - p.SetState(350) + p.SetState(352) p.Match(OpenFGAParserCOLON) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(352) + p.SetState(354) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5462,7 +5468,7 @@ func (p *OpenFGAParser) ConditionParameter() (localctx IConditionParameterContex if _la == OpenFGAParserWHITESPACE { { - p.SetState(351) + p.SetState(353) p.Match(OpenFGAParserWHITESPACE) if p.HasError() { // Recognition error - abort rule @@ -5472,7 +5478,7 @@ func (p *OpenFGAParser) ConditionParameter() (localctx IConditionParameterContex } { - p.SetState(354) + p.SetState(356) p.ParameterType() } @@ -5571,7 +5577,7 @@ func (p *OpenFGAParser) ParameterName() (localctx IParameterNameContext) { p.EnterRule(localctx, 42, OpenFGAParserRULE_parameterName) p.EnterOuterAlt(localctx, 1) { - p.SetState(356) + p.SetState(358) p.Match(OpenFGAParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -5687,7 +5693,7 @@ func (s *ParameterTypeContext) ExitRule(listener antlr.ParseTreeListener) { func (p *OpenFGAParser) ParameterType() (localctx IParameterTypeContext) { localctx = NewParameterTypeContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 44, OpenFGAParserRULE_parameterType) - p.SetState(363) + p.SetState(365) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5697,7 +5703,7 @@ func (p *OpenFGAParser) ParameterType() (localctx IParameterTypeContext) { case OpenFGAParserCONDITION_PARAM_TYPE: p.EnterOuterAlt(localctx, 1) { - p.SetState(358) + p.SetState(360) p.Match(OpenFGAParserCONDITION_PARAM_TYPE) if p.HasError() { // Recognition error - abort rule @@ -5709,7 +5715,7 @@ func (p *OpenFGAParser) ParameterType() (localctx IParameterTypeContext) { case OpenFGAParserCONDITION_PARAM_CONTAINER: p.EnterOuterAlt(localctx, 2) { - p.SetState(359) + p.SetState(361) p.Match(OpenFGAParserCONDITION_PARAM_CONTAINER) if p.HasError() { // Recognition error - abort rule @@ -5717,7 +5723,7 @@ func (p *OpenFGAParser) ParameterType() (localctx IParameterTypeContext) { } } { - p.SetState(360) + p.SetState(362) p.Match(OpenFGAParserLESS) if p.HasError() { // Recognition error - abort rule @@ -5725,7 +5731,7 @@ func (p *OpenFGAParser) ParameterType() (localctx IParameterTypeContext) { } } { - p.SetState(361) + p.SetState(363) p.Match(OpenFGAParserCONDITION_PARAM_TYPE) if p.HasError() { // Recognition error - abort rule @@ -5733,7 +5739,7 @@ func (p *OpenFGAParser) ParameterType() (localctx IParameterTypeContext) { } } { - p.SetState(362) + p.SetState(364) p.Match(OpenFGAParserGREATER) if p.HasError() { // Recognition error - abort rule @@ -5872,14 +5878,14 @@ func (p *OpenFGAParser) MultiLineComment() (localctx IMultiLineCommentContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(365) + p.SetState(367) p.Match(OpenFGAParserHASH) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(369) + p.SetState(371) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5887,9 +5893,9 @@ func (p *OpenFGAParser) MultiLineComment() (localctx IMultiLineCommentContext) { _la = p.GetTokenStream().LA(1) - for ((int64(_la) & ^0x3f) == 0 && ((int64(1) << _la) & 126100789566373886) != 0) { + for ((int64(_la) & ^0x3f) == 0 && ((int64(1) << _la) & 252201579132747774) != 0) { { - p.SetState(366) + p.SetState(368) _la = p.GetTokenStream().LA(1) if _la <= 0 || _la == OpenFGAParserNEWLINE { @@ -5901,20 +5907,20 @@ func (p *OpenFGAParser) MultiLineComment() (localctx IMultiLineCommentContext) { } - p.SetState(371) + p.SetState(373) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(374) + p.SetState(376) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 62, p.GetParserRuleContext()) == 1 { { - p.SetState(372) + p.SetState(374) p.Match(OpenFGAParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5922,7 +5928,7 @@ func (p *OpenFGAParser) MultiLineComment() (localctx IMultiLineCommentContext) { } } { - p.SetState(373) + p.SetState(375) p.MultiLineComment() } @@ -6057,7 +6063,7 @@ func (p *OpenFGAParser) Identifier() (localctx IIdentifierContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(376) + p.SetState(378) _la = p.GetTokenStream().LA(1) if !(((int64(_la) & ^0x3f) == 0 && ((int64(1) << _la) & 20382720) != 0)) { @@ -6084,6 +6090,148 @@ errorExit: } +// IExtended_identifierContext is an interface to support dynamic dispatch. +type IExtended_identifierContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // Getter signatures + Identifier() IIdentifierContext + EXTENDED_IDENTIFIER() antlr.TerminalNode + + // IsExtended_identifierContext differentiates from other interfaces. + IsExtended_identifierContext() +} + +type Extended_identifierContext struct { + antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyExtended_identifierContext() *Extended_identifierContext { + var p = new(Extended_identifierContext) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = OpenFGAParserRULE_extended_identifier + return p +} + +func InitEmptyExtended_identifierContext(p *Extended_identifierContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = OpenFGAParserRULE_extended_identifier +} + +func (*Extended_identifierContext) IsExtended_identifierContext() {} + +func NewExtended_identifierContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *Extended_identifierContext { + var p = new(Extended_identifierContext) + + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) + + p.parser = parser + p.RuleIndex = OpenFGAParserRULE_extended_identifier + + return p +} + +func (s *Extended_identifierContext) GetParser() antlr.Parser { return s.parser } + +func (s *Extended_identifierContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *Extended_identifierContext) EXTENDED_IDENTIFIER() antlr.TerminalNode { + return s.GetToken(OpenFGAParserEXTENDED_IDENTIFIER, 0) +} + +func (s *Extended_identifierContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *Extended_identifierContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *Extended_identifierContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(OpenFGAParserListener); ok { + listenerT.EnterExtended_identifier(s) + } +} + +func (s *Extended_identifierContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(OpenFGAParserListener); ok { + listenerT.ExitExtended_identifier(s) + } +} + + + + +func (p *OpenFGAParser) Extended_identifier() (localctx IExtended_identifierContext) { + localctx = NewExtended_identifierContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 50, OpenFGAParserRULE_extended_identifier) + p.SetState(382) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + + switch p.GetTokenStream().LA(1) { + case OpenFGAParserIDENTIFIER, OpenFGAParserMODULE, OpenFGAParserMODEL, OpenFGAParserSCHEMA, OpenFGAParserEXTEND, OpenFGAParserTYPE, OpenFGAParserRELATION: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(380) + p.Identifier() + } + + + case OpenFGAParserEXTENDED_IDENTIFIER: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(381) + p.Match(OpenFGAParserEXTENDED_IDENTIFIER) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + + + + default: + p.SetError(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + goto errorExit + } + + +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + return localctx + goto errorExit // Trick to prevent compiler error if the label is not used +} + + // IConditionExpressionContext is an interface to support dynamic dispatch. type IConditionExpressionContext interface { antlr.ParserRuleContext @@ -6505,36 +6653,36 @@ func (s *ConditionExpressionContext) ExitRule(listener antlr.ParseTreeListener) func (p *OpenFGAParser) ConditionExpression() (localctx IConditionExpressionContext) { localctx = NewConditionExpressionContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 50, OpenFGAParserRULE_conditionExpression) + p.EnterRule(localctx, 52, OpenFGAParserRULE_conditionExpression) var _la int var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(382) + p.SetState(388) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 64, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 65, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { - p.SetState(380) + p.SetState(386) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 63, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 64, p.GetParserRuleContext()) { case 1: { - p.SetState(378) + p.SetState(384) _la = p.GetTokenStream().LA(1) - if !(((int64(_la) & ^0x3f) == 0 && ((int64(1) << _la) & 36028728165271480) != 0)) { + if !(((int64(_la) & ^0x3f) == 0 && ((int64(1) << _la) & 54043126674753464) != 0)) { p.GetErrorHandler().RecoverInline(p) } else { p.GetErrorHandler().ReportMatch(p) @@ -6545,7 +6693,7 @@ func (p *OpenFGAParser) ConditionExpression() (localctx IConditionExpressionCont case 2: { - p.SetState(379) + p.SetState(385) _la = p.GetTokenStream().LA(1) if _la <= 0 || _la == OpenFGAParserRBRACE { @@ -6561,12 +6709,12 @@ func (p *OpenFGAParser) ConditionExpression() (localctx IConditionExpressionCont } } - p.SetState(384) + p.SetState(390) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 64, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 65, p.GetParserRuleContext()) if p.HasError() { goto errorExit } diff --git a/pkg/go/gen/openfgaparser_base_listener.go b/pkg/go/gen/openfgaparser_base_listener.go index 2142ed68..bdddf485 100644 --- a/pkg/go/gen/openfgaparser_base_listener.go +++ b/pkg/go/gen/openfgaparser_base_listener.go @@ -171,6 +171,12 @@ func (s *BaseOpenFGAParserListener) EnterIdentifier(ctx *IdentifierContext) {} // ExitIdentifier is called when production identifier is exited. func (s *BaseOpenFGAParserListener) ExitIdentifier(ctx *IdentifierContext) {} +// EnterExtended_identifier is called when production extended_identifier is entered. +func (s *BaseOpenFGAParserListener) EnterExtended_identifier(ctx *Extended_identifierContext) {} + +// ExitExtended_identifier is called when production extended_identifier is exited. +func (s *BaseOpenFGAParserListener) ExitExtended_identifier(ctx *Extended_identifierContext) {} + // EnterConditionExpression is called when production conditionExpression is entered. func (s *BaseOpenFGAParserListener) EnterConditionExpression(ctx *ConditionExpressionContext) {} diff --git a/pkg/go/gen/openfgaparser_listener.go b/pkg/go/gen/openfgaparser_listener.go index 8d4501ce..052bb05e 100644 --- a/pkg/go/gen/openfgaparser_listener.go +++ b/pkg/go/gen/openfgaparser_listener.go @@ -84,6 +84,9 @@ type OpenFGAParserListener interface { // EnterIdentifier is called when entering the identifier production. EnterIdentifier(c *IdentifierContext) + // EnterExtended_identifier is called when entering the extended_identifier production. + EnterExtended_identifier(c *Extended_identifierContext) + // EnterConditionExpression is called when entering the conditionExpression production. EnterConditionExpression(c *ConditionExpressionContext) @@ -162,6 +165,9 @@ type OpenFGAParserListener interface { // ExitIdentifier is called when exiting the identifier production. ExitIdentifier(c *IdentifierContext) + // ExitExtended_identifier is called when exiting the extended_identifier production. + ExitExtended_identifier(c *Extended_identifierContext) + // ExitConditionExpression is called when exiting the conditionExpression production. ExitConditionExpression(c *ConditionExpressionContext) } diff --git a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGALexer.interp b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGALexer.interp index 25eba7b0..79d5cbb7 100644 --- a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGALexer.interp +++ b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGALexer.interp @@ -56,6 +56,7 @@ null null null null +null token symbolic names: null @@ -112,6 +113,7 @@ NUM_INT NUM_UINT STRING BYTES +EXTENDED_IDENTIFIER NEWLINE CONDITION_PARAM_CONTAINER CONDITION_PARAM_TYPE @@ -180,6 +182,7 @@ NUM_UINT STRING BYTES IDENTIFIER +EXTENDED_IDENTIFIER NEWLINE CONDITION_DEF_END CONDITION_PARAM_CONTAINER @@ -201,4 +204,4 @@ DEFAULT_MODE CONDITION_DEF atn: -[4, 0, 56, 694, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 4, 10, 198, 8, 10, 11, 10, 12, 10, 199, 1, 10, 1, 10, 4, 10, 204, 8, 10, 11, 10, 12, 10, 205, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 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, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 340, 8, 47, 1, 47, 4, 47, 343, 8, 47, 11, 47, 12, 47, 344, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 355, 8, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 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, 388, 8, 54, 1, 55, 4, 55, 391, 8, 55, 11, 55, 12, 55, 392, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 399, 8, 56, 10, 56, 12, 56, 402, 9, 56, 1, 56, 1, 56, 1, 57, 4, 57, 407, 8, 57, 11, 57, 12, 57, 408, 1, 57, 1, 57, 4, 57, 413, 8, 57, 11, 57, 12, 57, 414, 1, 57, 3, 57, 418, 8, 57, 1, 57, 4, 57, 421, 8, 57, 11, 57, 12, 57, 422, 1, 57, 1, 57, 1, 57, 1, 57, 4, 57, 429, 8, 57, 11, 57, 12, 57, 430, 1, 57, 3, 57, 434, 8, 57, 3, 57, 436, 8, 57, 1, 58, 4, 58, 439, 8, 58, 11, 58, 12, 58, 440, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 447, 8, 58, 11, 58, 12, 58, 448, 3, 58, 451, 8, 58, 1, 59, 4, 59, 454, 8, 59, 11, 59, 12, 59, 455, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 4, 59, 464, 8, 59, 11, 59, 12, 59, 465, 1, 59, 1, 59, 3, 59, 470, 8, 59, 1, 60, 1, 60, 1, 60, 5, 60, 475, 8, 60, 10, 60, 12, 60, 478, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 484, 8, 60, 10, 60, 12, 60, 487, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 496, 8, 60, 10, 60, 12, 60, 499, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 510, 8, 60, 10, 60, 12, 60, 513, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 521, 8, 60, 10, 60, 12, 60, 524, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 531, 8, 60, 10, 60, 12, 60, 534, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 544, 8, 60, 10, 60, 12, 60, 547, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 559, 8, 60, 10, 60, 12, 60, 562, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 568, 8, 60, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 3, 62, 575, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 581, 8, 62, 10, 62, 12, 62, 584, 9, 62, 1, 63, 3, 63, 587, 8, 63, 1, 63, 3, 63, 590, 8, 63, 1, 63, 1, 63, 3, 63, 594, 8, 63, 1, 63, 3, 63, 597, 8, 63, 1, 63, 3, 63, 600, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 614, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 665, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 4, 497, 511, 545, 560, 0, 74, 2, 11, 4, 1, 6, 2, 8, 12, 10, 13, 12, 14, 14, 15, 16, 16, 18, 17, 20, 18, 22, 19, 24, 20, 26, 21, 28, 22, 30, 23, 32, 24, 34, 25, 36, 26, 38, 27, 40, 28, 42, 29, 44, 3, 46, 30, 48, 31, 50, 4, 52, 32, 54, 33, 56, 5, 58, 34, 60, 35, 62, 36, 64, 7, 66, 8, 68, 37, 70, 38, 72, 39, 74, 40, 76, 41, 78, 42, 80, 43, 82, 44, 84, 45, 86, 46, 88, 47, 90, 0, 92, 0, 94, 0, 96, 0, 98, 0, 100, 0, 102, 0, 104, 0, 106, 0, 108, 0, 110, 0, 112, 9, 114, 48, 116, 49, 118, 50, 120, 51, 122, 52, 124, 53, 126, 10, 128, 54, 130, 0, 132, 55, 134, 56, 136, 0, 138, 0, 140, 0, 142, 0, 144, 0, 146, 0, 148, 0, 2, 0, 1, 16, 2, 0, 65, 90, 97, 122, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 82, 82, 114, 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120, 120, 3, 0, 9, 9, 12, 12, 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 1, 0, 92, 92, 3, 0, 10, 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39, 39, 2, 0, 66, 66, 98, 98, 742, 0, 2, 1, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 1, 130, 1, 0, 0, 0, 1, 132, 1, 0, 0, 0, 1, 134, 1, 0, 0, 0, 1, 136, 1, 0, 0, 0, 1, 138, 1, 0, 0, 0, 1, 140, 1, 0, 0, 0, 1, 142, 1, 0, 0, 0, 1, 144, 1, 0, 0, 0, 1, 146, 1, 0, 0, 0, 1, 148, 1, 0, 0, 0, 2, 150, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 6, 154, 1, 0, 0, 0, 8, 156, 1, 0, 0, 0, 10, 160, 1, 0, 0, 0, 12, 163, 1, 0, 0, 0, 14, 171, 1, 0, 0, 0, 16, 176, 1, 0, 0, 0, 18, 183, 1, 0, 0, 0, 20, 189, 1, 0, 0, 0, 22, 197, 1, 0, 0, 0, 24, 207, 1, 0, 0, 0, 26, 214, 1, 0, 0, 0, 28, 219, 1, 0, 0, 0, 30, 231, 1, 0, 0, 0, 32, 241, 1, 0, 0, 0, 34, 250, 1, 0, 0, 0, 36, 257, 1, 0, 0, 0, 38, 262, 1, 0, 0, 0, 40, 265, 1, 0, 0, 0, 42, 268, 1, 0, 0, 0, 44, 271, 1, 0, 0, 0, 46, 273, 1, 0, 0, 0, 48, 276, 1, 0, 0, 0, 50, 279, 1, 0, 0, 0, 52, 281, 1, 0, 0, 0, 54, 284, 1, 0, 0, 0, 56, 287, 1, 0, 0, 0, 58, 289, 1, 0, 0, 0, 60, 291, 1, 0, 0, 0, 62, 293, 1, 0, 0, 0, 64, 295, 1, 0, 0, 0, 66, 297, 1, 0, 0, 0, 68, 299, 1, 0, 0, 0, 70, 301, 1, 0, 0, 0, 72, 303, 1, 0, 0, 0, 74, 305, 1, 0, 0, 0, 76, 307, 1, 0, 0, 0, 78, 309, 1, 0, 0, 0, 80, 311, 1, 0, 0, 0, 82, 313, 1, 0, 0, 0, 84, 315, 1, 0, 0, 0, 86, 320, 1, 0, 0, 0, 88, 326, 1, 0, 0, 0, 90, 331, 1, 0, 0, 0, 92, 333, 1, 0, 0, 0, 94, 335, 1, 0, 0, 0, 96, 337, 1, 0, 0, 0, 98, 346, 1, 0, 0, 0, 100, 348, 1, 0, 0, 0, 102, 354, 1, 0, 0, 0, 104, 356, 1, 0, 0, 0, 106, 359, 1, 0, 0, 0, 108, 364, 1, 0, 0, 0, 110, 387, 1, 0, 0, 0, 112, 390, 1, 0, 0, 0, 114, 394, 1, 0, 0, 0, 116, 435, 1, 0, 0, 0, 118, 450, 1, 0, 0, 0, 120, 469, 1, 0, 0, 0, 122, 567, 1, 0, 0, 0, 124, 569, 1, 0, 0, 0, 126, 574, 1, 0, 0, 0, 128, 586, 1, 0, 0, 0, 130, 601, 1, 0, 0, 0, 132, 613, 1, 0, 0, 0, 134, 664, 1, 0, 0, 0, 136, 666, 1, 0, 0, 0, 138, 670, 1, 0, 0, 0, 140, 674, 1, 0, 0, 0, 142, 678, 1, 0, 0, 0, 144, 682, 1, 0, 0, 0, 146, 686, 1, 0, 0, 0, 148, 690, 1, 0, 0, 0, 150, 151, 5, 35, 0, 0, 151, 3, 1, 0, 0, 0, 152, 153, 5, 58, 0, 0, 153, 5, 1, 0, 0, 0, 154, 155, 5, 44, 0, 0, 155, 7, 1, 0, 0, 0, 156, 157, 5, 97, 0, 0, 157, 158, 5, 110, 0, 0, 158, 159, 5, 100, 0, 0, 159, 9, 1, 0, 0, 0, 160, 161, 5, 111, 0, 0, 161, 162, 5, 114, 0, 0, 162, 11, 1, 0, 0, 0, 163, 164, 5, 98, 0, 0, 164, 165, 5, 117, 0, 0, 165, 166, 5, 116, 0, 0, 166, 167, 5, 32, 0, 0, 167, 168, 5, 110, 0, 0, 168, 169, 5, 111, 0, 0, 169, 170, 5, 116, 0, 0, 170, 13, 1, 0, 0, 0, 171, 172, 5, 102, 0, 0, 172, 173, 5, 114, 0, 0, 173, 174, 5, 111, 0, 0, 174, 175, 5, 109, 0, 0, 175, 15, 1, 0, 0, 0, 176, 177, 5, 109, 0, 0, 177, 178, 5, 111, 0, 0, 178, 179, 5, 100, 0, 0, 179, 180, 5, 117, 0, 0, 180, 181, 5, 108, 0, 0, 181, 182, 5, 101, 0, 0, 182, 17, 1, 0, 0, 0, 183, 184, 5, 109, 0, 0, 184, 185, 5, 111, 0, 0, 185, 186, 5, 100, 0, 0, 186, 187, 5, 101, 0, 0, 187, 188, 5, 108, 0, 0, 188, 19, 1, 0, 0, 0, 189, 190, 5, 115, 0, 0, 190, 191, 5, 99, 0, 0, 191, 192, 5, 104, 0, 0, 192, 193, 5, 101, 0, 0, 193, 194, 5, 109, 0, 0, 194, 195, 5, 97, 0, 0, 195, 21, 1, 0, 0, 0, 196, 198, 3, 94, 46, 0, 197, 196, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 203, 5, 46, 0, 0, 202, 204, 3, 94, 46, 0, 203, 202, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 203, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 23, 1, 0, 0, 0, 207, 208, 5, 101, 0, 0, 208, 209, 5, 120, 0, 0, 209, 210, 5, 116, 0, 0, 210, 211, 5, 101, 0, 0, 211, 212, 5, 110, 0, 0, 212, 213, 5, 100, 0, 0, 213, 25, 1, 0, 0, 0, 214, 215, 5, 116, 0, 0, 215, 216, 5, 121, 0, 0, 216, 217, 5, 112, 0, 0, 217, 218, 5, 101, 0, 0, 218, 27, 1, 0, 0, 0, 219, 220, 5, 99, 0, 0, 220, 221, 5, 111, 0, 0, 221, 222, 5, 110, 0, 0, 222, 223, 5, 100, 0, 0, 223, 224, 5, 105, 0, 0, 224, 225, 5, 116, 0, 0, 225, 226, 5, 105, 0, 0, 226, 227, 5, 111, 0, 0, 227, 228, 5, 110, 0, 0, 228, 229, 1, 0, 0, 0, 229, 230, 6, 13, 0, 0, 230, 29, 1, 0, 0, 0, 231, 232, 5, 114, 0, 0, 232, 233, 5, 101, 0, 0, 233, 234, 5, 108, 0, 0, 234, 235, 5, 97, 0, 0, 235, 236, 5, 116, 0, 0, 236, 237, 5, 105, 0, 0, 237, 238, 5, 111, 0, 0, 238, 239, 5, 110, 0, 0, 239, 240, 5, 115, 0, 0, 240, 31, 1, 0, 0, 0, 241, 242, 5, 114, 0, 0, 242, 243, 5, 101, 0, 0, 243, 244, 5, 108, 0, 0, 244, 245, 5, 97, 0, 0, 245, 246, 5, 116, 0, 0, 246, 247, 5, 105, 0, 0, 247, 248, 5, 111, 0, 0, 248, 249, 5, 110, 0, 0, 249, 33, 1, 0, 0, 0, 250, 251, 5, 100, 0, 0, 251, 252, 5, 101, 0, 0, 252, 253, 5, 102, 0, 0, 253, 254, 5, 105, 0, 0, 254, 255, 5, 110, 0, 0, 255, 256, 5, 101, 0, 0, 256, 35, 1, 0, 0, 0, 257, 258, 5, 119, 0, 0, 258, 259, 5, 105, 0, 0, 259, 260, 5, 116, 0, 0, 260, 261, 5, 104, 0, 0, 261, 37, 1, 0, 0, 0, 262, 263, 5, 61, 0, 0, 263, 264, 5, 61, 0, 0, 264, 39, 1, 0, 0, 0, 265, 266, 5, 33, 0, 0, 266, 267, 5, 61, 0, 0, 267, 41, 1, 0, 0, 0, 268, 269, 5, 105, 0, 0, 269, 270, 5, 110, 0, 0, 270, 43, 1, 0, 0, 0, 271, 272, 5, 60, 0, 0, 272, 45, 1, 0, 0, 0, 273, 274, 5, 60, 0, 0, 274, 275, 5, 61, 0, 0, 275, 47, 1, 0, 0, 0, 276, 277, 5, 62, 0, 0, 277, 278, 5, 61, 0, 0, 278, 49, 1, 0, 0, 0, 279, 280, 5, 62, 0, 0, 280, 51, 1, 0, 0, 0, 281, 282, 5, 38, 0, 0, 282, 283, 5, 38, 0, 0, 283, 53, 1, 0, 0, 0, 284, 285, 5, 124, 0, 0, 285, 286, 5, 124, 0, 0, 286, 55, 1, 0, 0, 0, 287, 288, 5, 91, 0, 0, 288, 57, 1, 0, 0, 0, 289, 290, 5, 93, 0, 0, 290, 59, 1, 0, 0, 0, 291, 292, 5, 123, 0, 0, 292, 61, 1, 0, 0, 0, 293, 294, 5, 125, 0, 0, 294, 63, 1, 0, 0, 0, 295, 296, 5, 40, 0, 0, 296, 65, 1, 0, 0, 0, 297, 298, 5, 41, 0, 0, 298, 67, 1, 0, 0, 0, 299, 300, 5, 46, 0, 0, 300, 69, 1, 0, 0, 0, 301, 302, 5, 45, 0, 0, 302, 71, 1, 0, 0, 0, 303, 304, 5, 33, 0, 0, 304, 73, 1, 0, 0, 0, 305, 306, 5, 63, 0, 0, 306, 75, 1, 0, 0, 0, 307, 308, 5, 43, 0, 0, 308, 77, 1, 0, 0, 0, 309, 310, 5, 42, 0, 0, 310, 79, 1, 0, 0, 0, 311, 312, 5, 47, 0, 0, 312, 81, 1, 0, 0, 0, 313, 314, 5, 37, 0, 0, 314, 83, 1, 0, 0, 0, 315, 316, 5, 116, 0, 0, 316, 317, 5, 114, 0, 0, 317, 318, 5, 117, 0, 0, 318, 319, 5, 101, 0, 0, 319, 85, 1, 0, 0, 0, 320, 321, 5, 102, 0, 0, 321, 322, 5, 97, 0, 0, 322, 323, 5, 108, 0, 0, 323, 324, 5, 115, 0, 0, 324, 325, 5, 101, 0, 0, 325, 87, 1, 0, 0, 0, 326, 327, 5, 110, 0, 0, 327, 328, 5, 117, 0, 0, 328, 329, 5, 108, 0, 0, 329, 330, 5, 108, 0, 0, 330, 89, 1, 0, 0, 0, 331, 332, 5, 92, 0, 0, 332, 91, 1, 0, 0, 0, 333, 334, 7, 0, 0, 0, 334, 93, 1, 0, 0, 0, 335, 336, 2, 48, 57, 0, 336, 95, 1, 0, 0, 0, 337, 339, 7, 1, 0, 0, 338, 340, 7, 2, 0, 0, 339, 338, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 1, 0, 0, 0, 341, 343, 3, 94, 46, 0, 342, 341, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 342, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 97, 1, 0, 0, 0, 346, 347, 7, 3, 0, 0, 347, 99, 1, 0, 0, 0, 348, 349, 7, 4, 0, 0, 349, 101, 1, 0, 0, 0, 350, 355, 3, 104, 51, 0, 351, 355, 3, 108, 53, 0, 352, 355, 3, 110, 54, 0, 353, 355, 3, 106, 52, 0, 354, 350, 1, 0, 0, 0, 354, 351, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 353, 1, 0, 0, 0, 355, 103, 1, 0, 0, 0, 356, 357, 3, 90, 44, 0, 357, 358, 7, 5, 0, 0, 358, 105, 1, 0, 0, 0, 359, 360, 3, 90, 44, 0, 360, 361, 2, 48, 51, 0, 361, 362, 2, 48, 55, 0, 362, 363, 2, 48, 55, 0, 363, 107, 1, 0, 0, 0, 364, 365, 3, 90, 44, 0, 365, 366, 7, 6, 0, 0, 366, 367, 3, 98, 48, 0, 367, 368, 3, 98, 48, 0, 368, 109, 1, 0, 0, 0, 369, 370, 3, 90, 44, 0, 370, 371, 5, 117, 0, 0, 371, 372, 3, 98, 48, 0, 372, 373, 3, 98, 48, 0, 373, 374, 3, 98, 48, 0, 374, 375, 3, 98, 48, 0, 375, 388, 1, 0, 0, 0, 376, 377, 3, 90, 44, 0, 377, 378, 5, 85, 0, 0, 378, 379, 3, 98, 48, 0, 379, 380, 3, 98, 48, 0, 380, 381, 3, 98, 48, 0, 381, 382, 3, 98, 48, 0, 382, 383, 3, 98, 48, 0, 383, 384, 3, 98, 48, 0, 384, 385, 3, 98, 48, 0, 385, 386, 3, 98, 48, 0, 386, 388, 1, 0, 0, 0, 387, 369, 1, 0, 0, 0, 387, 376, 1, 0, 0, 0, 388, 111, 1, 0, 0, 0, 389, 391, 7, 7, 0, 0, 390, 389, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 113, 1, 0, 0, 0, 394, 395, 5, 47, 0, 0, 395, 396, 5, 47, 0, 0, 396, 400, 1, 0, 0, 0, 397, 399, 8, 8, 0, 0, 398, 397, 1, 0, 0, 0, 399, 402, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 403, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 403, 404, 6, 56, 1, 0, 404, 115, 1, 0, 0, 0, 405, 407, 3, 94, 46, 0, 406, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 406, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 412, 5, 46, 0, 0, 411, 413, 3, 94, 46, 0, 412, 411, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 417, 1, 0, 0, 0, 416, 418, 3, 96, 47, 0, 417, 416, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 436, 1, 0, 0, 0, 419, 421, 3, 94, 46, 0, 420, 419, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 425, 3, 96, 47, 0, 425, 436, 1, 0, 0, 0, 426, 428, 5, 46, 0, 0, 427, 429, 3, 94, 46, 0, 428, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 433, 1, 0, 0, 0, 432, 434, 3, 96, 47, 0, 433, 432, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 406, 1, 0, 0, 0, 435, 420, 1, 0, 0, 0, 435, 426, 1, 0, 0, 0, 436, 117, 1, 0, 0, 0, 437, 439, 3, 94, 46, 0, 438, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 438, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 451, 1, 0, 0, 0, 442, 443, 5, 48, 0, 0, 443, 444, 5, 120, 0, 0, 444, 446, 1, 0, 0, 0, 445, 447, 3, 98, 48, 0, 446, 445, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 446, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 451, 1, 0, 0, 0, 450, 438, 1, 0, 0, 0, 450, 442, 1, 0, 0, 0, 451, 119, 1, 0, 0, 0, 452, 454, 3, 94, 46, 0, 453, 452, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, 455, 456, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 458, 7, 9, 0, 0, 458, 470, 1, 0, 0, 0, 459, 460, 5, 48, 0, 0, 460, 461, 5, 120, 0, 0, 461, 463, 1, 0, 0, 0, 462, 464, 3, 98, 48, 0, 463, 462, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 463, 1, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 468, 7, 9, 0, 0, 468, 470, 1, 0, 0, 0, 469, 453, 1, 0, 0, 0, 469, 459, 1, 0, 0, 0, 470, 121, 1, 0, 0, 0, 471, 476, 5, 34, 0, 0, 472, 475, 3, 102, 50, 0, 473, 475, 8, 10, 0, 0, 474, 472, 1, 0, 0, 0, 474, 473, 1, 0, 0, 0, 475, 478, 1, 0, 0, 0, 476, 474, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 479, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 479, 568, 5, 34, 0, 0, 480, 485, 5, 39, 0, 0, 481, 484, 3, 102, 50, 0, 482, 484, 8, 11, 0, 0, 483, 481, 1, 0, 0, 0, 483, 482, 1, 0, 0, 0, 484, 487, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 488, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 488, 568, 5, 39, 0, 0, 489, 490, 5, 34, 0, 0, 490, 491, 5, 34, 0, 0, 491, 492, 5, 34, 0, 0, 492, 497, 1, 0, 0, 0, 493, 496, 3, 102, 50, 0, 494, 496, 8, 12, 0, 0, 495, 493, 1, 0, 0, 0, 495, 494, 1, 0, 0, 0, 496, 499, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 498, 500, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 501, 5, 34, 0, 0, 501, 502, 5, 34, 0, 0, 502, 568, 5, 34, 0, 0, 503, 504, 5, 39, 0, 0, 504, 505, 5, 39, 0, 0, 505, 506, 5, 39, 0, 0, 506, 511, 1, 0, 0, 0, 507, 510, 3, 102, 50, 0, 508, 510, 8, 12, 0, 0, 509, 507, 1, 0, 0, 0, 509, 508, 1, 0, 0, 0, 510, 513, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 512, 514, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 514, 515, 5, 39, 0, 0, 515, 516, 5, 39, 0, 0, 516, 568, 5, 39, 0, 0, 517, 518, 3, 100, 49, 0, 518, 522, 5, 34, 0, 0, 519, 521, 8, 13, 0, 0, 520, 519, 1, 0, 0, 0, 521, 524, 1, 0, 0, 0, 522, 520, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 525, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 525, 526, 5, 34, 0, 0, 526, 568, 1, 0, 0, 0, 527, 528, 3, 100, 49, 0, 528, 532, 5, 39, 0, 0, 529, 531, 8, 14, 0, 0, 530, 529, 1, 0, 0, 0, 531, 534, 1, 0, 0, 0, 532, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 535, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 535, 536, 5, 39, 0, 0, 536, 568, 1, 0, 0, 0, 537, 538, 3, 100, 49, 0, 538, 539, 5, 34, 0, 0, 539, 540, 5, 34, 0, 0, 540, 541, 5, 34, 0, 0, 541, 545, 1, 0, 0, 0, 542, 544, 9, 0, 0, 0, 543, 542, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 546, 548, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 549, 5, 34, 0, 0, 549, 550, 5, 34, 0, 0, 550, 551, 5, 34, 0, 0, 551, 568, 1, 0, 0, 0, 552, 553, 3, 100, 49, 0, 553, 554, 5, 39, 0, 0, 554, 555, 5, 39, 0, 0, 555, 556, 5, 39, 0, 0, 556, 560, 1, 0, 0, 0, 557, 559, 9, 0, 0, 0, 558, 557, 1, 0, 0, 0, 559, 562, 1, 0, 0, 0, 560, 561, 1, 0, 0, 0, 560, 558, 1, 0, 0, 0, 561, 563, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 563, 564, 5, 39, 0, 0, 564, 565, 5, 39, 0, 0, 565, 566, 5, 39, 0, 0, 566, 568, 1, 0, 0, 0, 567, 471, 1, 0, 0, 0, 567, 480, 1, 0, 0, 0, 567, 489, 1, 0, 0, 0, 567, 503, 1, 0, 0, 0, 567, 517, 1, 0, 0, 0, 567, 527, 1, 0, 0, 0, 567, 537, 1, 0, 0, 0, 567, 552, 1, 0, 0, 0, 568, 123, 1, 0, 0, 0, 569, 570, 7, 15, 0, 0, 570, 571, 3, 122, 60, 0, 571, 125, 1, 0, 0, 0, 572, 575, 3, 92, 45, 0, 573, 575, 5, 95, 0, 0, 574, 572, 1, 0, 0, 0, 574, 573, 1, 0, 0, 0, 575, 582, 1, 0, 0, 0, 576, 581, 3, 92, 45, 0, 577, 581, 3, 94, 46, 0, 578, 581, 5, 95, 0, 0, 579, 581, 3, 70, 34, 0, 580, 576, 1, 0, 0, 0, 580, 577, 1, 0, 0, 0, 580, 578, 1, 0, 0, 0, 580, 579, 1, 0, 0, 0, 581, 584, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 582, 583, 1, 0, 0, 0, 583, 127, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 585, 587, 3, 112, 55, 0, 586, 585, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 593, 1, 0, 0, 0, 588, 590, 5, 13, 0, 0, 589, 588, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 594, 5, 10, 0, 0, 592, 594, 2, 12, 13, 0, 593, 589, 1, 0, 0, 0, 593, 592, 1, 0, 0, 0, 594, 596, 1, 0, 0, 0, 595, 597, 3, 112, 55, 0, 596, 595, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 599, 1, 0, 0, 0, 598, 600, 3, 128, 63, 0, 599, 598, 1, 0, 0, 0, 599, 600, 1, 0, 0, 0, 600, 129, 1, 0, 0, 0, 601, 602, 3, 66, 32, 0, 602, 603, 1, 0, 0, 0, 603, 604, 6, 64, 2, 0, 604, 605, 6, 64, 3, 0, 605, 131, 1, 0, 0, 0, 606, 607, 5, 109, 0, 0, 607, 608, 5, 97, 0, 0, 608, 614, 5, 112, 0, 0, 609, 610, 5, 108, 0, 0, 610, 611, 5, 105, 0, 0, 611, 612, 5, 115, 0, 0, 612, 614, 5, 116, 0, 0, 613, 606, 1, 0, 0, 0, 613, 609, 1, 0, 0, 0, 614, 133, 1, 0, 0, 0, 615, 616, 5, 98, 0, 0, 616, 617, 5, 111, 0, 0, 617, 618, 5, 111, 0, 0, 618, 665, 5, 108, 0, 0, 619, 620, 5, 115, 0, 0, 620, 621, 5, 116, 0, 0, 621, 622, 5, 114, 0, 0, 622, 623, 5, 105, 0, 0, 623, 624, 5, 110, 0, 0, 624, 665, 5, 103, 0, 0, 625, 626, 5, 105, 0, 0, 626, 627, 5, 110, 0, 0, 627, 665, 5, 116, 0, 0, 628, 629, 5, 117, 0, 0, 629, 630, 5, 105, 0, 0, 630, 631, 5, 110, 0, 0, 631, 665, 5, 116, 0, 0, 632, 633, 5, 100, 0, 0, 633, 634, 5, 111, 0, 0, 634, 635, 5, 117, 0, 0, 635, 636, 5, 98, 0, 0, 636, 637, 5, 108, 0, 0, 637, 665, 5, 101, 0, 0, 638, 639, 5, 100, 0, 0, 639, 640, 5, 117, 0, 0, 640, 641, 5, 114, 0, 0, 641, 642, 5, 97, 0, 0, 642, 643, 5, 116, 0, 0, 643, 644, 5, 105, 0, 0, 644, 645, 5, 111, 0, 0, 645, 665, 5, 110, 0, 0, 646, 647, 5, 116, 0, 0, 647, 648, 5, 105, 0, 0, 648, 649, 5, 109, 0, 0, 649, 650, 5, 101, 0, 0, 650, 651, 5, 115, 0, 0, 651, 652, 5, 116, 0, 0, 652, 653, 5, 97, 0, 0, 653, 654, 5, 109, 0, 0, 654, 665, 5, 112, 0, 0, 655, 656, 5, 105, 0, 0, 656, 657, 5, 112, 0, 0, 657, 658, 5, 97, 0, 0, 658, 659, 5, 100, 0, 0, 659, 660, 5, 100, 0, 0, 660, 661, 5, 114, 0, 0, 661, 662, 5, 101, 0, 0, 662, 663, 5, 115, 0, 0, 663, 665, 5, 115, 0, 0, 664, 615, 1, 0, 0, 0, 664, 619, 1, 0, 0, 0, 664, 625, 1, 0, 0, 0, 664, 628, 1, 0, 0, 0, 664, 632, 1, 0, 0, 0, 664, 638, 1, 0, 0, 0, 664, 646, 1, 0, 0, 0, 664, 655, 1, 0, 0, 0, 665, 135, 1, 0, 0, 0, 666, 667, 3, 44, 21, 0, 667, 668, 1, 0, 0, 0, 668, 669, 6, 67, 4, 0, 669, 137, 1, 0, 0, 0, 670, 671, 3, 50, 24, 0, 671, 672, 1, 0, 0, 0, 672, 673, 6, 68, 5, 0, 673, 139, 1, 0, 0, 0, 674, 675, 3, 64, 31, 0, 675, 676, 1, 0, 0, 0, 676, 677, 6, 69, 6, 0, 677, 141, 1, 0, 0, 0, 678, 679, 3, 4, 1, 0, 679, 680, 1, 0, 0, 0, 680, 681, 6, 70, 7, 0, 681, 143, 1, 0, 0, 0, 682, 683, 3, 6, 2, 0, 683, 684, 1, 0, 0, 0, 684, 685, 6, 71, 8, 0, 685, 145, 1, 0, 0, 0, 686, 687, 3, 112, 55, 0, 687, 688, 1, 0, 0, 0, 688, 689, 6, 72, 9, 0, 689, 147, 1, 0, 0, 0, 690, 691, 3, 126, 62, 0, 691, 692, 1, 0, 0, 0, 692, 693, 6, 73, 10, 0, 693, 149, 1, 0, 0, 0, 46, 0, 1, 199, 205, 339, 344, 354, 387, 392, 400, 408, 414, 417, 422, 430, 433, 435, 440, 448, 450, 455, 465, 469, 474, 476, 483, 485, 495, 497, 509, 511, 522, 532, 545, 560, 567, 574, 580, 582, 586, 589, 593, 596, 599, 613, 664, 11, 5, 1, 0, 0, 1, 0, 7, 8, 0, 4, 0, 0, 7, 3, 0, 7, 4, 0, 7, 7, 0, 7, 1, 0, 7, 2, 0, 7, 9, 0, 7, 10, 0] \ No newline at end of file +[4, 0, 57, 717, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 4, 10, 200, 8, 10, 11, 10, 12, 10, 201, 1, 10, 1, 10, 4, 10, 206, 8, 10, 11, 10, 12, 10, 207, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 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, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 342, 8, 47, 1, 47, 4, 47, 345, 8, 47, 11, 47, 12, 47, 346, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 357, 8, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 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, 390, 8, 54, 1, 55, 4, 55, 393, 8, 55, 11, 55, 12, 55, 394, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 401, 8, 56, 10, 56, 12, 56, 404, 9, 56, 1, 56, 1, 56, 1, 57, 4, 57, 409, 8, 57, 11, 57, 12, 57, 410, 1, 57, 1, 57, 4, 57, 415, 8, 57, 11, 57, 12, 57, 416, 1, 57, 3, 57, 420, 8, 57, 1, 57, 4, 57, 423, 8, 57, 11, 57, 12, 57, 424, 1, 57, 1, 57, 1, 57, 1, 57, 4, 57, 431, 8, 57, 11, 57, 12, 57, 432, 1, 57, 3, 57, 436, 8, 57, 3, 57, 438, 8, 57, 1, 58, 4, 58, 441, 8, 58, 11, 58, 12, 58, 442, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 449, 8, 58, 11, 58, 12, 58, 450, 3, 58, 453, 8, 58, 1, 59, 4, 59, 456, 8, 59, 11, 59, 12, 59, 457, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 4, 59, 466, 8, 59, 11, 59, 12, 59, 467, 1, 59, 1, 59, 3, 59, 472, 8, 59, 1, 60, 1, 60, 1, 60, 5, 60, 477, 8, 60, 10, 60, 12, 60, 480, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 486, 8, 60, 10, 60, 12, 60, 489, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 498, 8, 60, 10, 60, 12, 60, 501, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 512, 8, 60, 10, 60, 12, 60, 515, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 523, 8, 60, 10, 60, 12, 60, 526, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 533, 8, 60, 10, 60, 12, 60, 536, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 546, 8, 60, 10, 60, 12, 60, 549, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 561, 8, 60, 10, 60, 12, 60, 564, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 570, 8, 60, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 3, 62, 577, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 583, 8, 62, 10, 62, 12, 62, 586, 9, 62, 1, 63, 1, 63, 3, 63, 590, 8, 63, 1, 63, 1, 63, 1, 63, 3, 63, 595, 8, 63, 1, 63, 1, 63, 1, 63, 4, 63, 600, 8, 63, 11, 63, 12, 63, 601, 5, 63, 604, 8, 63, 10, 63, 12, 63, 607, 9, 63, 1, 64, 3, 64, 610, 8, 64, 1, 64, 3, 64, 613, 8, 64, 1, 64, 1, 64, 3, 64, 617, 8, 64, 1, 64, 3, 64, 620, 8, 64, 1, 64, 3, 64, 623, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 637, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 688, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 4, 499, 513, 547, 562, 0, 75, 2, 11, 4, 1, 6, 2, 8, 12, 10, 13, 12, 14, 14, 15, 16, 16, 18, 17, 20, 18, 22, 19, 24, 20, 26, 21, 28, 22, 30, 23, 32, 24, 34, 25, 36, 26, 38, 27, 40, 28, 42, 29, 44, 3, 46, 30, 48, 31, 50, 4, 52, 32, 54, 33, 56, 5, 58, 34, 60, 35, 62, 36, 64, 7, 66, 8, 68, 37, 70, 38, 72, 39, 74, 40, 76, 41, 78, 42, 80, 43, 82, 44, 84, 45, 86, 46, 88, 47, 90, 0, 92, 0, 94, 0, 96, 0, 98, 0, 100, 0, 102, 0, 104, 0, 106, 0, 108, 0, 110, 0, 112, 9, 114, 48, 116, 49, 118, 50, 120, 51, 122, 52, 124, 53, 126, 10, 128, 54, 130, 55, 132, 0, 134, 56, 136, 57, 138, 0, 140, 0, 142, 0, 144, 0, 146, 0, 148, 0, 150, 0, 2, 0, 1, 16, 2, 0, 65, 90, 97, 122, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 82, 82, 114, 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120, 120, 3, 0, 9, 9, 12, 12, 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 1, 0, 92, 92, 3, 0, 10, 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39, 39, 2, 0, 66, 66, 98, 98, 773, 0, 2, 1, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 130, 1, 0, 0, 0, 1, 132, 1, 0, 0, 0, 1, 134, 1, 0, 0, 0, 1, 136, 1, 0, 0, 0, 1, 138, 1, 0, 0, 0, 1, 140, 1, 0, 0, 0, 1, 142, 1, 0, 0, 0, 1, 144, 1, 0, 0, 0, 1, 146, 1, 0, 0, 0, 1, 148, 1, 0, 0, 0, 1, 150, 1, 0, 0, 0, 2, 152, 1, 0, 0, 0, 4, 154, 1, 0, 0, 0, 6, 156, 1, 0, 0, 0, 8, 158, 1, 0, 0, 0, 10, 162, 1, 0, 0, 0, 12, 165, 1, 0, 0, 0, 14, 173, 1, 0, 0, 0, 16, 178, 1, 0, 0, 0, 18, 185, 1, 0, 0, 0, 20, 191, 1, 0, 0, 0, 22, 199, 1, 0, 0, 0, 24, 209, 1, 0, 0, 0, 26, 216, 1, 0, 0, 0, 28, 221, 1, 0, 0, 0, 30, 233, 1, 0, 0, 0, 32, 243, 1, 0, 0, 0, 34, 252, 1, 0, 0, 0, 36, 259, 1, 0, 0, 0, 38, 264, 1, 0, 0, 0, 40, 267, 1, 0, 0, 0, 42, 270, 1, 0, 0, 0, 44, 273, 1, 0, 0, 0, 46, 275, 1, 0, 0, 0, 48, 278, 1, 0, 0, 0, 50, 281, 1, 0, 0, 0, 52, 283, 1, 0, 0, 0, 54, 286, 1, 0, 0, 0, 56, 289, 1, 0, 0, 0, 58, 291, 1, 0, 0, 0, 60, 293, 1, 0, 0, 0, 62, 295, 1, 0, 0, 0, 64, 297, 1, 0, 0, 0, 66, 299, 1, 0, 0, 0, 68, 301, 1, 0, 0, 0, 70, 303, 1, 0, 0, 0, 72, 305, 1, 0, 0, 0, 74, 307, 1, 0, 0, 0, 76, 309, 1, 0, 0, 0, 78, 311, 1, 0, 0, 0, 80, 313, 1, 0, 0, 0, 82, 315, 1, 0, 0, 0, 84, 317, 1, 0, 0, 0, 86, 322, 1, 0, 0, 0, 88, 328, 1, 0, 0, 0, 90, 333, 1, 0, 0, 0, 92, 335, 1, 0, 0, 0, 94, 337, 1, 0, 0, 0, 96, 339, 1, 0, 0, 0, 98, 348, 1, 0, 0, 0, 100, 350, 1, 0, 0, 0, 102, 356, 1, 0, 0, 0, 104, 358, 1, 0, 0, 0, 106, 361, 1, 0, 0, 0, 108, 366, 1, 0, 0, 0, 110, 389, 1, 0, 0, 0, 112, 392, 1, 0, 0, 0, 114, 396, 1, 0, 0, 0, 116, 437, 1, 0, 0, 0, 118, 452, 1, 0, 0, 0, 120, 471, 1, 0, 0, 0, 122, 569, 1, 0, 0, 0, 124, 571, 1, 0, 0, 0, 126, 576, 1, 0, 0, 0, 128, 589, 1, 0, 0, 0, 130, 609, 1, 0, 0, 0, 132, 624, 1, 0, 0, 0, 134, 636, 1, 0, 0, 0, 136, 687, 1, 0, 0, 0, 138, 689, 1, 0, 0, 0, 140, 693, 1, 0, 0, 0, 142, 697, 1, 0, 0, 0, 144, 701, 1, 0, 0, 0, 146, 705, 1, 0, 0, 0, 148, 709, 1, 0, 0, 0, 150, 713, 1, 0, 0, 0, 152, 153, 5, 35, 0, 0, 153, 3, 1, 0, 0, 0, 154, 155, 5, 58, 0, 0, 155, 5, 1, 0, 0, 0, 156, 157, 5, 44, 0, 0, 157, 7, 1, 0, 0, 0, 158, 159, 5, 97, 0, 0, 159, 160, 5, 110, 0, 0, 160, 161, 5, 100, 0, 0, 161, 9, 1, 0, 0, 0, 162, 163, 5, 111, 0, 0, 163, 164, 5, 114, 0, 0, 164, 11, 1, 0, 0, 0, 165, 166, 5, 98, 0, 0, 166, 167, 5, 117, 0, 0, 167, 168, 5, 116, 0, 0, 168, 169, 5, 32, 0, 0, 169, 170, 5, 110, 0, 0, 170, 171, 5, 111, 0, 0, 171, 172, 5, 116, 0, 0, 172, 13, 1, 0, 0, 0, 173, 174, 5, 102, 0, 0, 174, 175, 5, 114, 0, 0, 175, 176, 5, 111, 0, 0, 176, 177, 5, 109, 0, 0, 177, 15, 1, 0, 0, 0, 178, 179, 5, 109, 0, 0, 179, 180, 5, 111, 0, 0, 180, 181, 5, 100, 0, 0, 181, 182, 5, 117, 0, 0, 182, 183, 5, 108, 0, 0, 183, 184, 5, 101, 0, 0, 184, 17, 1, 0, 0, 0, 185, 186, 5, 109, 0, 0, 186, 187, 5, 111, 0, 0, 187, 188, 5, 100, 0, 0, 188, 189, 5, 101, 0, 0, 189, 190, 5, 108, 0, 0, 190, 19, 1, 0, 0, 0, 191, 192, 5, 115, 0, 0, 192, 193, 5, 99, 0, 0, 193, 194, 5, 104, 0, 0, 194, 195, 5, 101, 0, 0, 195, 196, 5, 109, 0, 0, 196, 197, 5, 97, 0, 0, 197, 21, 1, 0, 0, 0, 198, 200, 3, 94, 46, 0, 199, 198, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 205, 5, 46, 0, 0, 204, 206, 3, 94, 46, 0, 205, 204, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 205, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 23, 1, 0, 0, 0, 209, 210, 5, 101, 0, 0, 210, 211, 5, 120, 0, 0, 211, 212, 5, 116, 0, 0, 212, 213, 5, 101, 0, 0, 213, 214, 5, 110, 0, 0, 214, 215, 5, 100, 0, 0, 215, 25, 1, 0, 0, 0, 216, 217, 5, 116, 0, 0, 217, 218, 5, 121, 0, 0, 218, 219, 5, 112, 0, 0, 219, 220, 5, 101, 0, 0, 220, 27, 1, 0, 0, 0, 221, 222, 5, 99, 0, 0, 222, 223, 5, 111, 0, 0, 223, 224, 5, 110, 0, 0, 224, 225, 5, 100, 0, 0, 225, 226, 5, 105, 0, 0, 226, 227, 5, 116, 0, 0, 227, 228, 5, 105, 0, 0, 228, 229, 5, 111, 0, 0, 229, 230, 5, 110, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 6, 13, 0, 0, 232, 29, 1, 0, 0, 0, 233, 234, 5, 114, 0, 0, 234, 235, 5, 101, 0, 0, 235, 236, 5, 108, 0, 0, 236, 237, 5, 97, 0, 0, 237, 238, 5, 116, 0, 0, 238, 239, 5, 105, 0, 0, 239, 240, 5, 111, 0, 0, 240, 241, 5, 110, 0, 0, 241, 242, 5, 115, 0, 0, 242, 31, 1, 0, 0, 0, 243, 244, 5, 114, 0, 0, 244, 245, 5, 101, 0, 0, 245, 246, 5, 108, 0, 0, 246, 247, 5, 97, 0, 0, 247, 248, 5, 116, 0, 0, 248, 249, 5, 105, 0, 0, 249, 250, 5, 111, 0, 0, 250, 251, 5, 110, 0, 0, 251, 33, 1, 0, 0, 0, 252, 253, 5, 100, 0, 0, 253, 254, 5, 101, 0, 0, 254, 255, 5, 102, 0, 0, 255, 256, 5, 105, 0, 0, 256, 257, 5, 110, 0, 0, 257, 258, 5, 101, 0, 0, 258, 35, 1, 0, 0, 0, 259, 260, 5, 119, 0, 0, 260, 261, 5, 105, 0, 0, 261, 262, 5, 116, 0, 0, 262, 263, 5, 104, 0, 0, 263, 37, 1, 0, 0, 0, 264, 265, 5, 61, 0, 0, 265, 266, 5, 61, 0, 0, 266, 39, 1, 0, 0, 0, 267, 268, 5, 33, 0, 0, 268, 269, 5, 61, 0, 0, 269, 41, 1, 0, 0, 0, 270, 271, 5, 105, 0, 0, 271, 272, 5, 110, 0, 0, 272, 43, 1, 0, 0, 0, 273, 274, 5, 60, 0, 0, 274, 45, 1, 0, 0, 0, 275, 276, 5, 60, 0, 0, 276, 277, 5, 61, 0, 0, 277, 47, 1, 0, 0, 0, 278, 279, 5, 62, 0, 0, 279, 280, 5, 61, 0, 0, 280, 49, 1, 0, 0, 0, 281, 282, 5, 62, 0, 0, 282, 51, 1, 0, 0, 0, 283, 284, 5, 38, 0, 0, 284, 285, 5, 38, 0, 0, 285, 53, 1, 0, 0, 0, 286, 287, 5, 124, 0, 0, 287, 288, 5, 124, 0, 0, 288, 55, 1, 0, 0, 0, 289, 290, 5, 91, 0, 0, 290, 57, 1, 0, 0, 0, 291, 292, 5, 93, 0, 0, 292, 59, 1, 0, 0, 0, 293, 294, 5, 123, 0, 0, 294, 61, 1, 0, 0, 0, 295, 296, 5, 125, 0, 0, 296, 63, 1, 0, 0, 0, 297, 298, 5, 40, 0, 0, 298, 65, 1, 0, 0, 0, 299, 300, 5, 41, 0, 0, 300, 67, 1, 0, 0, 0, 301, 302, 5, 46, 0, 0, 302, 69, 1, 0, 0, 0, 303, 304, 5, 45, 0, 0, 304, 71, 1, 0, 0, 0, 305, 306, 5, 33, 0, 0, 306, 73, 1, 0, 0, 0, 307, 308, 5, 63, 0, 0, 308, 75, 1, 0, 0, 0, 309, 310, 5, 43, 0, 0, 310, 77, 1, 0, 0, 0, 311, 312, 5, 42, 0, 0, 312, 79, 1, 0, 0, 0, 313, 314, 5, 47, 0, 0, 314, 81, 1, 0, 0, 0, 315, 316, 5, 37, 0, 0, 316, 83, 1, 0, 0, 0, 317, 318, 5, 116, 0, 0, 318, 319, 5, 114, 0, 0, 319, 320, 5, 117, 0, 0, 320, 321, 5, 101, 0, 0, 321, 85, 1, 0, 0, 0, 322, 323, 5, 102, 0, 0, 323, 324, 5, 97, 0, 0, 324, 325, 5, 108, 0, 0, 325, 326, 5, 115, 0, 0, 326, 327, 5, 101, 0, 0, 327, 87, 1, 0, 0, 0, 328, 329, 5, 110, 0, 0, 329, 330, 5, 117, 0, 0, 330, 331, 5, 108, 0, 0, 331, 332, 5, 108, 0, 0, 332, 89, 1, 0, 0, 0, 333, 334, 5, 92, 0, 0, 334, 91, 1, 0, 0, 0, 335, 336, 7, 0, 0, 0, 336, 93, 1, 0, 0, 0, 337, 338, 2, 48, 57, 0, 338, 95, 1, 0, 0, 0, 339, 341, 7, 1, 0, 0, 340, 342, 7, 2, 0, 0, 341, 340, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 344, 1, 0, 0, 0, 343, 345, 3, 94, 46, 0, 344, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 97, 1, 0, 0, 0, 348, 349, 7, 3, 0, 0, 349, 99, 1, 0, 0, 0, 350, 351, 7, 4, 0, 0, 351, 101, 1, 0, 0, 0, 352, 357, 3, 104, 51, 0, 353, 357, 3, 108, 53, 0, 354, 357, 3, 110, 54, 0, 355, 357, 3, 106, 52, 0, 356, 352, 1, 0, 0, 0, 356, 353, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 356, 355, 1, 0, 0, 0, 357, 103, 1, 0, 0, 0, 358, 359, 3, 90, 44, 0, 359, 360, 7, 5, 0, 0, 360, 105, 1, 0, 0, 0, 361, 362, 3, 90, 44, 0, 362, 363, 2, 48, 51, 0, 363, 364, 2, 48, 55, 0, 364, 365, 2, 48, 55, 0, 365, 107, 1, 0, 0, 0, 366, 367, 3, 90, 44, 0, 367, 368, 7, 6, 0, 0, 368, 369, 3, 98, 48, 0, 369, 370, 3, 98, 48, 0, 370, 109, 1, 0, 0, 0, 371, 372, 3, 90, 44, 0, 372, 373, 5, 117, 0, 0, 373, 374, 3, 98, 48, 0, 374, 375, 3, 98, 48, 0, 375, 376, 3, 98, 48, 0, 376, 377, 3, 98, 48, 0, 377, 390, 1, 0, 0, 0, 378, 379, 3, 90, 44, 0, 379, 380, 5, 85, 0, 0, 380, 381, 3, 98, 48, 0, 381, 382, 3, 98, 48, 0, 382, 383, 3, 98, 48, 0, 383, 384, 3, 98, 48, 0, 384, 385, 3, 98, 48, 0, 385, 386, 3, 98, 48, 0, 386, 387, 3, 98, 48, 0, 387, 388, 3, 98, 48, 0, 388, 390, 1, 0, 0, 0, 389, 371, 1, 0, 0, 0, 389, 378, 1, 0, 0, 0, 390, 111, 1, 0, 0, 0, 391, 393, 7, 7, 0, 0, 392, 391, 1, 0, 0, 0, 393, 394, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 113, 1, 0, 0, 0, 396, 397, 5, 47, 0, 0, 397, 398, 5, 47, 0, 0, 398, 402, 1, 0, 0, 0, 399, 401, 8, 8, 0, 0, 400, 399, 1, 0, 0, 0, 401, 404, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 405, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 405, 406, 6, 56, 1, 0, 406, 115, 1, 0, 0, 0, 407, 409, 3, 94, 46, 0, 408, 407, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 408, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 414, 5, 46, 0, 0, 413, 415, 3, 94, 46, 0, 414, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 419, 1, 0, 0, 0, 418, 420, 3, 96, 47, 0, 419, 418, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 438, 1, 0, 0, 0, 421, 423, 3, 94, 46, 0, 422, 421, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 427, 3, 96, 47, 0, 427, 438, 1, 0, 0, 0, 428, 430, 5, 46, 0, 0, 429, 431, 3, 94, 46, 0, 430, 429, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 430, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 435, 1, 0, 0, 0, 434, 436, 3, 96, 47, 0, 435, 434, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 438, 1, 0, 0, 0, 437, 408, 1, 0, 0, 0, 437, 422, 1, 0, 0, 0, 437, 428, 1, 0, 0, 0, 438, 117, 1, 0, 0, 0, 439, 441, 3, 94, 46, 0, 440, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 453, 1, 0, 0, 0, 444, 445, 5, 48, 0, 0, 445, 446, 5, 120, 0, 0, 446, 448, 1, 0, 0, 0, 447, 449, 3, 98, 48, 0, 448, 447, 1, 0, 0, 0, 449, 450, 1, 0, 0, 0, 450, 448, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 453, 1, 0, 0, 0, 452, 440, 1, 0, 0, 0, 452, 444, 1, 0, 0, 0, 453, 119, 1, 0, 0, 0, 454, 456, 3, 94, 46, 0, 455, 454, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 455, 1, 0, 0, 0, 457, 458, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 460, 7, 9, 0, 0, 460, 472, 1, 0, 0, 0, 461, 462, 5, 48, 0, 0, 462, 463, 5, 120, 0, 0, 463, 465, 1, 0, 0, 0, 464, 466, 3, 98, 48, 0, 465, 464, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 470, 7, 9, 0, 0, 470, 472, 1, 0, 0, 0, 471, 455, 1, 0, 0, 0, 471, 461, 1, 0, 0, 0, 472, 121, 1, 0, 0, 0, 473, 478, 5, 34, 0, 0, 474, 477, 3, 102, 50, 0, 475, 477, 8, 10, 0, 0, 476, 474, 1, 0, 0, 0, 476, 475, 1, 0, 0, 0, 477, 480, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 481, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 481, 570, 5, 34, 0, 0, 482, 487, 5, 39, 0, 0, 483, 486, 3, 102, 50, 0, 484, 486, 8, 11, 0, 0, 485, 483, 1, 0, 0, 0, 485, 484, 1, 0, 0, 0, 486, 489, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 490, 1, 0, 0, 0, 489, 487, 1, 0, 0, 0, 490, 570, 5, 39, 0, 0, 491, 492, 5, 34, 0, 0, 492, 493, 5, 34, 0, 0, 493, 494, 5, 34, 0, 0, 494, 499, 1, 0, 0, 0, 495, 498, 3, 102, 50, 0, 496, 498, 8, 12, 0, 0, 497, 495, 1, 0, 0, 0, 497, 496, 1, 0, 0, 0, 498, 501, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 502, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 502, 503, 5, 34, 0, 0, 503, 504, 5, 34, 0, 0, 504, 570, 5, 34, 0, 0, 505, 506, 5, 39, 0, 0, 506, 507, 5, 39, 0, 0, 507, 508, 5, 39, 0, 0, 508, 513, 1, 0, 0, 0, 509, 512, 3, 102, 50, 0, 510, 512, 8, 12, 0, 0, 511, 509, 1, 0, 0, 0, 511, 510, 1, 0, 0, 0, 512, 515, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 514, 516, 1, 0, 0, 0, 515, 513, 1, 0, 0, 0, 516, 517, 5, 39, 0, 0, 517, 518, 5, 39, 0, 0, 518, 570, 5, 39, 0, 0, 519, 520, 3, 100, 49, 0, 520, 524, 5, 34, 0, 0, 521, 523, 8, 13, 0, 0, 522, 521, 1, 0, 0, 0, 523, 526, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 1, 0, 0, 0, 526, 524, 1, 0, 0, 0, 527, 528, 5, 34, 0, 0, 528, 570, 1, 0, 0, 0, 529, 530, 3, 100, 49, 0, 530, 534, 5, 39, 0, 0, 531, 533, 8, 14, 0, 0, 532, 531, 1, 0, 0, 0, 533, 536, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 537, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 537, 538, 5, 39, 0, 0, 538, 570, 1, 0, 0, 0, 539, 540, 3, 100, 49, 0, 540, 541, 5, 34, 0, 0, 541, 542, 5, 34, 0, 0, 542, 543, 5, 34, 0, 0, 543, 547, 1, 0, 0, 0, 544, 546, 9, 0, 0, 0, 545, 544, 1, 0, 0, 0, 546, 549, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 550, 1, 0, 0, 0, 549, 547, 1, 0, 0, 0, 550, 551, 5, 34, 0, 0, 551, 552, 5, 34, 0, 0, 552, 553, 5, 34, 0, 0, 553, 570, 1, 0, 0, 0, 554, 555, 3, 100, 49, 0, 555, 556, 5, 39, 0, 0, 556, 557, 5, 39, 0, 0, 557, 558, 5, 39, 0, 0, 558, 562, 1, 0, 0, 0, 559, 561, 9, 0, 0, 0, 560, 559, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 563, 565, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 566, 5, 39, 0, 0, 566, 567, 5, 39, 0, 0, 567, 568, 5, 39, 0, 0, 568, 570, 1, 0, 0, 0, 569, 473, 1, 0, 0, 0, 569, 482, 1, 0, 0, 0, 569, 491, 1, 0, 0, 0, 569, 505, 1, 0, 0, 0, 569, 519, 1, 0, 0, 0, 569, 529, 1, 0, 0, 0, 569, 539, 1, 0, 0, 0, 569, 554, 1, 0, 0, 0, 570, 123, 1, 0, 0, 0, 571, 572, 7, 15, 0, 0, 572, 573, 3, 122, 60, 0, 573, 125, 1, 0, 0, 0, 574, 577, 3, 92, 45, 0, 575, 577, 5, 95, 0, 0, 576, 574, 1, 0, 0, 0, 576, 575, 1, 0, 0, 0, 577, 584, 1, 0, 0, 0, 578, 583, 3, 92, 45, 0, 579, 583, 3, 94, 46, 0, 580, 583, 5, 95, 0, 0, 581, 583, 3, 70, 34, 0, 582, 578, 1, 0, 0, 0, 582, 579, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 582, 581, 1, 0, 0, 0, 583, 586, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 127, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 587, 590, 3, 92, 45, 0, 588, 590, 5, 95, 0, 0, 589, 587, 1, 0, 0, 0, 589, 588, 1, 0, 0, 0, 590, 605, 1, 0, 0, 0, 591, 595, 3, 80, 39, 0, 592, 595, 3, 68, 33, 0, 593, 595, 3, 70, 34, 0, 594, 591, 1, 0, 0, 0, 594, 592, 1, 0, 0, 0, 594, 593, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 599, 1, 0, 0, 0, 596, 600, 3, 92, 45, 0, 597, 600, 3, 94, 46, 0, 598, 600, 5, 95, 0, 0, 599, 596, 1, 0, 0, 0, 599, 597, 1, 0, 0, 0, 599, 598, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 599, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 604, 1, 0, 0, 0, 603, 594, 1, 0, 0, 0, 604, 607, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 129, 1, 0, 0, 0, 607, 605, 1, 0, 0, 0, 608, 610, 3, 112, 55, 0, 609, 608, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 616, 1, 0, 0, 0, 611, 613, 5, 13, 0, 0, 612, 611, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 617, 5, 10, 0, 0, 615, 617, 2, 12, 13, 0, 616, 612, 1, 0, 0, 0, 616, 615, 1, 0, 0, 0, 617, 619, 1, 0, 0, 0, 618, 620, 3, 112, 55, 0, 619, 618, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 622, 1, 0, 0, 0, 621, 623, 3, 130, 64, 0, 622, 621, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 131, 1, 0, 0, 0, 624, 625, 3, 66, 32, 0, 625, 626, 1, 0, 0, 0, 626, 627, 6, 65, 2, 0, 627, 628, 6, 65, 3, 0, 628, 133, 1, 0, 0, 0, 629, 630, 5, 109, 0, 0, 630, 631, 5, 97, 0, 0, 631, 637, 5, 112, 0, 0, 632, 633, 5, 108, 0, 0, 633, 634, 5, 105, 0, 0, 634, 635, 5, 115, 0, 0, 635, 637, 5, 116, 0, 0, 636, 629, 1, 0, 0, 0, 636, 632, 1, 0, 0, 0, 637, 135, 1, 0, 0, 0, 638, 639, 5, 98, 0, 0, 639, 640, 5, 111, 0, 0, 640, 641, 5, 111, 0, 0, 641, 688, 5, 108, 0, 0, 642, 643, 5, 115, 0, 0, 643, 644, 5, 116, 0, 0, 644, 645, 5, 114, 0, 0, 645, 646, 5, 105, 0, 0, 646, 647, 5, 110, 0, 0, 647, 688, 5, 103, 0, 0, 648, 649, 5, 105, 0, 0, 649, 650, 5, 110, 0, 0, 650, 688, 5, 116, 0, 0, 651, 652, 5, 117, 0, 0, 652, 653, 5, 105, 0, 0, 653, 654, 5, 110, 0, 0, 654, 688, 5, 116, 0, 0, 655, 656, 5, 100, 0, 0, 656, 657, 5, 111, 0, 0, 657, 658, 5, 117, 0, 0, 658, 659, 5, 98, 0, 0, 659, 660, 5, 108, 0, 0, 660, 688, 5, 101, 0, 0, 661, 662, 5, 100, 0, 0, 662, 663, 5, 117, 0, 0, 663, 664, 5, 114, 0, 0, 664, 665, 5, 97, 0, 0, 665, 666, 5, 116, 0, 0, 666, 667, 5, 105, 0, 0, 667, 668, 5, 111, 0, 0, 668, 688, 5, 110, 0, 0, 669, 670, 5, 116, 0, 0, 670, 671, 5, 105, 0, 0, 671, 672, 5, 109, 0, 0, 672, 673, 5, 101, 0, 0, 673, 674, 5, 115, 0, 0, 674, 675, 5, 116, 0, 0, 675, 676, 5, 97, 0, 0, 676, 677, 5, 109, 0, 0, 677, 688, 5, 112, 0, 0, 678, 679, 5, 105, 0, 0, 679, 680, 5, 112, 0, 0, 680, 681, 5, 97, 0, 0, 681, 682, 5, 100, 0, 0, 682, 683, 5, 100, 0, 0, 683, 684, 5, 114, 0, 0, 684, 685, 5, 101, 0, 0, 685, 686, 5, 115, 0, 0, 686, 688, 5, 115, 0, 0, 687, 638, 1, 0, 0, 0, 687, 642, 1, 0, 0, 0, 687, 648, 1, 0, 0, 0, 687, 651, 1, 0, 0, 0, 687, 655, 1, 0, 0, 0, 687, 661, 1, 0, 0, 0, 687, 669, 1, 0, 0, 0, 687, 678, 1, 0, 0, 0, 688, 137, 1, 0, 0, 0, 689, 690, 3, 44, 21, 0, 690, 691, 1, 0, 0, 0, 691, 692, 6, 68, 4, 0, 692, 139, 1, 0, 0, 0, 693, 694, 3, 50, 24, 0, 694, 695, 1, 0, 0, 0, 695, 696, 6, 69, 5, 0, 696, 141, 1, 0, 0, 0, 697, 698, 3, 64, 31, 0, 698, 699, 1, 0, 0, 0, 699, 700, 6, 70, 6, 0, 700, 143, 1, 0, 0, 0, 701, 702, 3, 4, 1, 0, 702, 703, 1, 0, 0, 0, 703, 704, 6, 71, 7, 0, 704, 145, 1, 0, 0, 0, 705, 706, 3, 6, 2, 0, 706, 707, 1, 0, 0, 0, 707, 708, 6, 72, 8, 0, 708, 147, 1, 0, 0, 0, 709, 710, 3, 112, 55, 0, 710, 711, 1, 0, 0, 0, 711, 712, 6, 73, 9, 0, 712, 149, 1, 0, 0, 0, 713, 714, 3, 126, 62, 0, 714, 715, 1, 0, 0, 0, 715, 716, 6, 74, 10, 0, 716, 151, 1, 0, 0, 0, 51, 0, 1, 201, 207, 341, 346, 356, 389, 394, 402, 410, 416, 419, 424, 432, 435, 437, 442, 450, 452, 457, 467, 471, 476, 478, 485, 487, 497, 499, 511, 513, 524, 534, 547, 562, 569, 576, 582, 584, 589, 594, 599, 601, 605, 609, 612, 616, 619, 622, 636, 687, 11, 5, 1, 0, 0, 1, 0, 7, 8, 0, 4, 0, 0, 7, 3, 0, 7, 4, 0, 7, 7, 0, 7, 1, 0, 7, 2, 0, 7, 9, 0, 7, 10, 0] \ No newline at end of file diff --git a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGALexer.java b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGALexer.java index 684594f9..b62eea80 100644 --- a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGALexer.java +++ b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGALexer.java @@ -25,7 +25,8 @@ public class OpenFGALexer extends Lexer { LOGICAL_OR=33, RPRACKET=34, LBRACE=35, RBRACE=36, DOT=37, MINUS=38, EXCLAM=39, QUESTIONMARK=40, PLUS=41, STAR=42, SLASH=43, PERCENT=44, CEL_TRUE=45, CEL_FALSE=46, NUL=47, CEL_COMMENT=48, NUM_FLOAT=49, NUM_INT=50, NUM_UINT=51, - STRING=52, BYTES=53, NEWLINE=54, CONDITION_PARAM_CONTAINER=55, CONDITION_PARAM_TYPE=56; + STRING=52, BYTES=53, EXTENDED_IDENTIFIER=54, NEWLINE=55, CONDITION_PARAM_CONTAINER=56, + CONDITION_PARAM_TYPE=57; public static final int CONDITION_DEF=1; public static String[] channelNames = { @@ -47,10 +48,10 @@ private static String[] makeRuleNames() { "CEL_TRUE", "CEL_FALSE", "NUL", "BACKSLASH", "LETTER", "DIGIT", "EXPONENT", "HEXDIGIT", "RAW", "ESC_SEQ", "ESC_CHAR_SEQ", "ESC_OCT_SEQ", "ESC_BYTE_SEQ", "ESC_UNI_SEQ", "WHITESPACE", "CEL_COMMENT", "NUM_FLOAT", "NUM_INT", "NUM_UINT", - "STRING", "BYTES", "IDENTIFIER", "NEWLINE", "CONDITION_DEF_END", "CONDITION_PARAM_CONTAINER", - "CONDITION_PARAM_TYPE", "CONDITION_PARAM_TYPE_LESS", "CONDITION_PARAM_TYPE_GREATER", - "CONDITION_OPEN", "CONDITION_COLON", "CONDITION_COMMA", "CONDITION_WS", - "CONDITION_NAME" + "STRING", "BYTES", "IDENTIFIER", "EXTENDED_IDENTIFIER", "NEWLINE", "CONDITION_DEF_END", + "CONDITION_PARAM_CONTAINER", "CONDITION_PARAM_TYPE", "CONDITION_PARAM_TYPE_LESS", + "CONDITION_PARAM_TYPE_GREATER", "CONDITION_OPEN", "CONDITION_COLON", + "CONDITION_COMMA", "CONDITION_WS", "CONDITION_NAME" }; } public static final String[] ruleNames = makeRuleNames(); @@ -75,8 +76,8 @@ private static String[] makeSymbolicNames() { "NOT_EQUALS", "IN", "LESS_EQUALS", "GREATER_EQUALS", "LOGICAL_AND", "LOGICAL_OR", "RPRACKET", "LBRACE", "RBRACE", "DOT", "MINUS", "EXCLAM", "QUESTIONMARK", "PLUS", "STAR", "SLASH", "PERCENT", "CEL_TRUE", "CEL_FALSE", "NUL", "CEL_COMMENT", - "NUM_FLOAT", "NUM_INT", "NUM_UINT", "STRING", "BYTES", "NEWLINE", "CONDITION_PARAM_CONTAINER", - "CONDITION_PARAM_TYPE" + "NUM_FLOAT", "NUM_INT", "NUM_UINT", "STRING", "BYTES", "EXTENDED_IDENTIFIER", + "NEWLINE", "CONDITION_PARAM_CONTAINER", "CONDITION_PARAM_TYPE" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -138,7 +139,7 @@ public OpenFGALexer(CharStream input) { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\u0004\u00008\u02b6\u0006\uffff\uffff\u0006\uffff\uffff\u0002\u0000\u0007"+ + "\u0004\u00009\u02cd\u0006\uffff\uffff\u0006\uffff\uffff\u0002\u0000\u0007"+ "\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007"+ "\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007"+ "\u0006\u0002\u0007\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n"+ @@ -157,423 +158,440 @@ public OpenFGALexer(CharStream input) { "9\u00079\u0002:\u0007:\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002"+ ">\u0007>\u0002?\u0007?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002"+ "C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002"+ - "H\u0007H\u0002I\u0007I\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001"+ - "\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ - "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0005"+ - "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006"+ - "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+ - "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001"+ - "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+ - "\t\u0001\t\u0001\t\u0001\n\u0004\n\u00c6\b\n\u000b\n\f\n\u00c7\u0001\n"+ - "\u0001\n\u0004\n\u00cc\b\n\u000b\n\f\n\u00cd\u0001\u000b\u0001\u000b\u0001"+ - "\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f"+ - "\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ - "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e"+ - "\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+ - "\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ - "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010"+ - "\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010"+ - "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012"+ - "\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014"+ - "\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016"+ - "\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018"+ - "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a"+ - "\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d"+ - "\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001!"+ - "\u0001!\u0001\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001%\u0001%\u0001"+ - "&\u0001&\u0001\'\u0001\'\u0001(\u0001(\u0001)\u0001)\u0001)\u0001)\u0001"+ - ")\u0001*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001"+ - "+\u0001+\u0001,\u0001,\u0001-\u0001-\u0001.\u0001.\u0001/\u0001/\u0003"+ - "/\u0154\b/\u0001/\u0004/\u0157\b/\u000b/\f/\u0158\u00010\u00010\u0001"+ - "1\u00011\u00012\u00012\u00012\u00012\u00032\u0163\b2\u00013\u00013\u0001"+ - "3\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u00015\u00015\u0001"+ - "5\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u0001"+ - "6\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00036\u0184"+ - "\b6\u00017\u00047\u0187\b7\u000b7\f7\u0188\u00018\u00018\u00018\u0001"+ - "8\u00058\u018f\b8\n8\f8\u0192\t8\u00018\u00018\u00019\u00049\u0197\b9"+ - "\u000b9\f9\u0198\u00019\u00019\u00049\u019d\b9\u000b9\f9\u019e\u00019"+ - "\u00039\u01a2\b9\u00019\u00049\u01a5\b9\u000b9\f9\u01a6\u00019\u00019"+ - "\u00019\u00019\u00049\u01ad\b9\u000b9\f9\u01ae\u00019\u00039\u01b2\b9"+ - "\u00039\u01b4\b9\u0001:\u0004:\u01b7\b:\u000b:\f:\u01b8\u0001:\u0001:"+ - "\u0001:\u0001:\u0004:\u01bf\b:\u000b:\f:\u01c0\u0003:\u01c3\b:\u0001;"+ - "\u0004;\u01c6\b;\u000b;\f;\u01c7\u0001;\u0001;\u0001;\u0001;\u0001;\u0001"+ - ";\u0004;\u01d0\b;\u000b;\f;\u01d1\u0001;\u0001;\u0003;\u01d6\b;\u0001"+ - "<\u0001<\u0001<\u0005<\u01db\b<\n<\f<\u01de\t<\u0001<\u0001<\u0001<\u0001"+ - "<\u0005<\u01e4\b<\n<\f<\u01e7\t<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001"+ - "<\u0001<\u0005<\u01f0\b<\n<\f<\u01f3\t<\u0001<\u0001<\u0001<\u0001<\u0001"+ - "<\u0001<\u0001<\u0001<\u0001<\u0005<\u01fe\b<\n<\f<\u0201\t<\u0001<\u0001"+ - "<\u0001<\u0001<\u0001<\u0001<\u0005<\u0209\b<\n<\f<\u020c\t<\u0001<\u0001"+ - "<\u0001<\u0001<\u0001<\u0005<\u0213\b<\n<\f<\u0216\t<\u0001<\u0001<\u0001"+ - "<\u0001<\u0001<\u0001<\u0001<\u0001<\u0005<\u0220\b<\n<\f<\u0223\t<\u0001"+ + "H\u0007H\u0002I\u0007I\u0002J\u0007J\u0001\u0000\u0001\u0000\u0001\u0001"+ + "\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+ + "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005"+ + "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001"+ + "\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0004\n\u00c8\b\n\u000b\n\f"+ + "\n\u00c9\u0001\n\u0001\n\u0004\n\u00ce\b\n\u000b\n\f\n\u00cf\u0001\u000b"+ + "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+ + "\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ + "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+ + "\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001"+ + "\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001"+ + "\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+ + "\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001"+ + "\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001"+ + "\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001"+ + " \u0001 \u0001!\u0001!\u0001\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001"+ + "%\u0001%\u0001&\u0001&\u0001\'\u0001\'\u0001(\u0001(\u0001)\u0001)\u0001"+ + ")\u0001)\u0001)\u0001*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001+\u0001"+ + "+\u0001+\u0001+\u0001+\u0001,\u0001,\u0001-\u0001-\u0001.\u0001.\u0001"+ + "/\u0001/\u0003/\u0156\b/\u0001/\u0004/\u0159\b/\u000b/\f/\u015a\u0001"+ + "0\u00010\u00011\u00011\u00012\u00012\u00012\u00012\u00032\u0165\b2\u0001"+ + "3\u00013\u00013\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u0001"+ + "5\u00015\u00015\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u0001"+ + "6\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u0001"+ + "6\u00036\u0186\b6\u00017\u00047\u0189\b7\u000b7\f7\u018a\u00018\u0001"+ + "8\u00018\u00018\u00058\u0191\b8\n8\f8\u0194\t8\u00018\u00018\u00019\u0004"+ + "9\u0199\b9\u000b9\f9\u019a\u00019\u00019\u00049\u019f\b9\u000b9\f9\u01a0"+ + "\u00019\u00039\u01a4\b9\u00019\u00049\u01a7\b9\u000b9\f9\u01a8\u00019"+ + "\u00019\u00019\u00019\u00049\u01af\b9\u000b9\f9\u01b0\u00019\u00039\u01b4"+ + "\b9\u00039\u01b6\b9\u0001:\u0004:\u01b9\b:\u000b:\f:\u01ba\u0001:\u0001"+ + ":\u0001:\u0001:\u0004:\u01c1\b:\u000b:\f:\u01c2\u0003:\u01c5\b:\u0001"+ + ";\u0004;\u01c8\b;\u000b;\f;\u01c9\u0001;\u0001;\u0001;\u0001;\u0001;\u0001"+ + ";\u0004;\u01d2\b;\u000b;\f;\u01d3\u0001;\u0001;\u0003;\u01d8\b;\u0001"+ + "<\u0001<\u0001<\u0005<\u01dd\b<\n<\f<\u01e0\t<\u0001<\u0001<\u0001<\u0001"+ + "<\u0005<\u01e6\b<\n<\f<\u01e9\t<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001"+ + "<\u0001<\u0005<\u01f2\b<\n<\f<\u01f5\t<\u0001<\u0001<\u0001<\u0001<\u0001"+ + "<\u0001<\u0001<\u0001<\u0001<\u0005<\u0200\b<\n<\f<\u0203\t<\u0001<\u0001"+ + "<\u0001<\u0001<\u0001<\u0001<\u0005<\u020b\b<\n<\f<\u020e\t<\u0001<\u0001"+ + "<\u0001<\u0001<\u0001<\u0005<\u0215\b<\n<\f<\u0218\t<\u0001<\u0001<\u0001"+ + "<\u0001<\u0001<\u0001<\u0001<\u0001<\u0005<\u0222\b<\n<\f<\u0225\t<\u0001"+ "<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0005"+ - "<\u022f\b<\n<\f<\u0232\t<\u0001<\u0001<\u0001<\u0001<\u0003<\u0238\b<"+ - "\u0001=\u0001=\u0001=\u0001>\u0001>\u0003>\u023f\b>\u0001>\u0001>\u0001"+ - ">\u0001>\u0005>\u0245\b>\n>\f>\u0248\t>\u0001?\u0003?\u024b\b?\u0001?"+ - "\u0003?\u024e\b?\u0001?\u0001?\u0003?\u0252\b?\u0001?\u0003?\u0255\b?"+ - "\u0001?\u0003?\u0258\b?\u0001@\u0001@\u0001@\u0001@\u0001@\u0001A\u0001"+ - "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0003A\u0266\bA\u0001B\u0001B\u0001"+ - "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ - "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ - "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ - "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ - "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0003B\u0299\bB\u0001C\u0001"+ - "C\u0001C\u0001C\u0001D\u0001D\u0001D\u0001D\u0001E\u0001E\u0001E\u0001"+ - "E\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001H\u0001"+ - "H\u0001H\u0001H\u0001I\u0001I\u0001I\u0001I\u0004\u01f1\u01ff\u0221\u0230"+ - "\u0000J\u0002\u000b\u0004\u0001\u0006\u0002\b\f\n\r\f\u000e\u000e\u000f"+ - "\u0010\u0010\u0012\u0011\u0014\u0012\u0016\u0013\u0018\u0014\u001a\u0015"+ - "\u001c\u0016\u001e\u0017 \u0018\"\u0019$\u001a&\u001b(\u001c*\u001d,\u0003"+ - ".\u001e0\u001f2\u00044 6!8\u0005:\"<#>$@\u0007B\bD%F&H\'J(L)N*P+R,T-V"+ - ".X/Z\u0000\\\u0000^\u0000`\u0000b\u0000d\u0000f\u0000h\u0000j\u0000l\u0000"+ - "n\u0000p\tr0t1v2x3z4|5~\n\u00806\u0082\u0000\u00847\u00868\u0088\u0000"+ - "\u008a\u0000\u008c\u0000\u008e\u0000\u0090\u0000\u0092\u0000\u0094\u0000"+ - "\u0002\u0000\u0001\u0010\u0002\u0000AZaz\u0002\u0000EEee\u0002\u0000+"+ - "+--\u0003\u000009AFaf\u0002\u0000RRrr\n\u0000\"\"\'\'??\\\\`bffnnrrtt"+ - "vv\u0002\u0000XXxx\u0003\u0000\t\t\f\f \u0001\u0000\n\n\u0002\u0000U"+ - "Uuu\u0004\u0000\n\n\r\r\"\"\\\\\u0004\u0000\n\n\r\r\'\'\\\\\u0001\u0000"+ - "\\\\\u0003\u0000\n\n\r\r\"\"\u0003\u0000\n\n\r\r\'\'\u0002\u0000BBbb\u02e6"+ - "\u0000\u0002\u0001\u0000\u0000\u0000\u0000\u0004\u0001\u0000\u0000\u0000"+ - "\u0000\u0006\u0001\u0000\u0000\u0000\u0000\b\u0001\u0000\u0000\u0000\u0000"+ - "\n\u0001\u0000\u0000\u0000\u0000\f\u0001\u0000\u0000\u0000\u0000\u000e"+ - "\u0001\u0000\u0000\u0000\u0000\u0010\u0001\u0000\u0000\u0000\u0000\u0012"+ - "\u0001\u0000\u0000\u0000\u0000\u0014\u0001\u0000\u0000\u0000\u0000\u0016"+ - "\u0001\u0000\u0000\u0000\u0000\u0018\u0001\u0000\u0000\u0000\u0000\u001a"+ - "\u0001\u0000\u0000\u0000\u0000\u001c\u0001\u0000\u0000\u0000\u0000\u001e"+ - "\u0001\u0000\u0000\u0000\u0000 \u0001\u0000\u0000\u0000\u0000\"\u0001"+ - "\u0000\u0000\u0000\u0000$\u0001\u0000\u0000\u0000\u0000&\u0001\u0000\u0000"+ - "\u0000\u0000(\u0001\u0000\u0000\u0000\u0000*\u0001\u0000\u0000\u0000\u0000"+ - ",\u0001\u0000\u0000\u0000\u0000.\u0001\u0000\u0000\u0000\u00000\u0001"+ - "\u0000\u0000\u0000\u00002\u0001\u0000\u0000\u0000\u00004\u0001\u0000\u0000"+ - "\u0000\u00006\u0001\u0000\u0000\u0000\u00008\u0001\u0000\u0000\u0000\u0000"+ - ":\u0001\u0000\u0000\u0000\u0000<\u0001\u0000\u0000\u0000\u0000>\u0001"+ - "\u0000\u0000\u0000\u0000@\u0001\u0000\u0000\u0000\u0000B\u0001\u0000\u0000"+ - "\u0000\u0000D\u0001\u0000\u0000\u0000\u0000F\u0001\u0000\u0000\u0000\u0000"+ - "H\u0001\u0000\u0000\u0000\u0000J\u0001\u0000\u0000\u0000\u0000L\u0001"+ - "\u0000\u0000\u0000\u0000N\u0001\u0000\u0000\u0000\u0000P\u0001\u0000\u0000"+ - "\u0000\u0000R\u0001\u0000\u0000\u0000\u0000T\u0001\u0000\u0000\u0000\u0000"+ - "V\u0001\u0000\u0000\u0000\u0000X\u0001\u0000\u0000\u0000\u0000p\u0001"+ - "\u0000\u0000\u0000\u0000r\u0001\u0000\u0000\u0000\u0000t\u0001\u0000\u0000"+ - "\u0000\u0000v\u0001\u0000\u0000\u0000\u0000x\u0001\u0000\u0000\u0000\u0000"+ - "z\u0001\u0000\u0000\u0000\u0000|\u0001\u0000\u0000\u0000\u0000~\u0001"+ - "\u0000\u0000\u0000\u0000\u0080\u0001\u0000\u0000\u0000\u0001\u0082\u0001"+ - "\u0000\u0000\u0000\u0001\u0084\u0001\u0000\u0000\u0000\u0001\u0086\u0001"+ - "\u0000\u0000\u0000\u0001\u0088\u0001\u0000\u0000\u0000\u0001\u008a\u0001"+ - "\u0000\u0000\u0000\u0001\u008c\u0001\u0000\u0000\u0000\u0001\u008e\u0001"+ - "\u0000\u0000\u0000\u0001\u0090\u0001\u0000\u0000\u0000\u0001\u0092\u0001"+ - "\u0000\u0000\u0000\u0001\u0094\u0001\u0000\u0000\u0000\u0002\u0096\u0001"+ - "\u0000\u0000\u0000\u0004\u0098\u0001\u0000\u0000\u0000\u0006\u009a\u0001"+ - "\u0000\u0000\u0000\b\u009c\u0001\u0000\u0000\u0000\n\u00a0\u0001\u0000"+ - "\u0000\u0000\f\u00a3\u0001\u0000\u0000\u0000\u000e\u00ab\u0001\u0000\u0000"+ - "\u0000\u0010\u00b0\u0001\u0000\u0000\u0000\u0012\u00b7\u0001\u0000\u0000"+ - "\u0000\u0014\u00bd\u0001\u0000\u0000\u0000\u0016\u00c5\u0001\u0000\u0000"+ - "\u0000\u0018\u00cf\u0001\u0000\u0000\u0000\u001a\u00d6\u0001\u0000\u0000"+ - "\u0000\u001c\u00db\u0001\u0000\u0000\u0000\u001e\u00e7\u0001\u0000\u0000"+ - "\u0000 \u00f1\u0001\u0000\u0000\u0000\"\u00fa\u0001\u0000\u0000\u0000"+ - "$\u0101\u0001\u0000\u0000\u0000&\u0106\u0001\u0000\u0000\u0000(\u0109"+ - "\u0001\u0000\u0000\u0000*\u010c\u0001\u0000\u0000\u0000,\u010f\u0001\u0000"+ - "\u0000\u0000.\u0111\u0001\u0000\u0000\u00000\u0114\u0001\u0000\u0000\u0000"+ - "2\u0117\u0001\u0000\u0000\u00004\u0119\u0001\u0000\u0000\u00006\u011c"+ - "\u0001\u0000\u0000\u00008\u011f\u0001\u0000\u0000\u0000:\u0121\u0001\u0000"+ - "\u0000\u0000<\u0123\u0001\u0000\u0000\u0000>\u0125\u0001\u0000\u0000\u0000"+ - "@\u0127\u0001\u0000\u0000\u0000B\u0129\u0001\u0000\u0000\u0000D\u012b"+ - "\u0001\u0000\u0000\u0000F\u012d\u0001\u0000\u0000\u0000H\u012f\u0001\u0000"+ - "\u0000\u0000J\u0131\u0001\u0000\u0000\u0000L\u0133\u0001\u0000\u0000\u0000"+ - "N\u0135\u0001\u0000\u0000\u0000P\u0137\u0001\u0000\u0000\u0000R\u0139"+ - "\u0001\u0000\u0000\u0000T\u013b\u0001\u0000\u0000\u0000V\u0140\u0001\u0000"+ - "\u0000\u0000X\u0146\u0001\u0000\u0000\u0000Z\u014b\u0001\u0000\u0000\u0000"+ - "\\\u014d\u0001\u0000\u0000\u0000^\u014f\u0001\u0000\u0000\u0000`\u0151"+ - "\u0001\u0000\u0000\u0000b\u015a\u0001\u0000\u0000\u0000d\u015c\u0001\u0000"+ - "\u0000\u0000f\u0162\u0001\u0000\u0000\u0000h\u0164\u0001\u0000\u0000\u0000"+ - "j\u0167\u0001\u0000\u0000\u0000l\u016c\u0001\u0000\u0000\u0000n\u0183"+ - "\u0001\u0000\u0000\u0000p\u0186\u0001\u0000\u0000\u0000r\u018a\u0001\u0000"+ - "\u0000\u0000t\u01b3\u0001\u0000\u0000\u0000v\u01c2\u0001\u0000\u0000\u0000"+ - "x\u01d5\u0001\u0000\u0000\u0000z\u0237\u0001\u0000\u0000\u0000|\u0239"+ - "\u0001\u0000\u0000\u0000~\u023e\u0001\u0000\u0000\u0000\u0080\u024a\u0001"+ - "\u0000\u0000\u0000\u0082\u0259\u0001\u0000\u0000\u0000\u0084\u0265\u0001"+ - "\u0000\u0000\u0000\u0086\u0298\u0001\u0000\u0000\u0000\u0088\u029a\u0001"+ - "\u0000\u0000\u0000\u008a\u029e\u0001\u0000\u0000\u0000\u008c\u02a2\u0001"+ - "\u0000\u0000\u0000\u008e\u02a6\u0001\u0000\u0000\u0000\u0090\u02aa\u0001"+ - "\u0000\u0000\u0000\u0092\u02ae\u0001\u0000\u0000\u0000\u0094\u02b2\u0001"+ - "\u0000\u0000\u0000\u0096\u0097\u0005#\u0000\u0000\u0097\u0003\u0001\u0000"+ - "\u0000\u0000\u0098\u0099\u0005:\u0000\u0000\u0099\u0005\u0001\u0000\u0000"+ - "\u0000\u009a\u009b\u0005,\u0000\u0000\u009b\u0007\u0001\u0000\u0000\u0000"+ - "\u009c\u009d\u0005a\u0000\u0000\u009d\u009e\u0005n\u0000\u0000\u009e\u009f"+ - "\u0005d\u0000\u0000\u009f\t\u0001\u0000\u0000\u0000\u00a0\u00a1\u0005"+ - "o\u0000\u0000\u00a1\u00a2\u0005r\u0000\u0000\u00a2\u000b\u0001\u0000\u0000"+ - "\u0000\u00a3\u00a4\u0005b\u0000\u0000\u00a4\u00a5\u0005u\u0000\u0000\u00a5"+ - "\u00a6\u0005t\u0000\u0000\u00a6\u00a7\u0005 \u0000\u0000\u00a7\u00a8\u0005"+ - "n\u0000\u0000\u00a8\u00a9\u0005o\u0000\u0000\u00a9\u00aa\u0005t\u0000"+ - "\u0000\u00aa\r\u0001\u0000\u0000\u0000\u00ab\u00ac\u0005f\u0000\u0000"+ - "\u00ac\u00ad\u0005r\u0000\u0000\u00ad\u00ae\u0005o\u0000\u0000\u00ae\u00af"+ - "\u0005m\u0000\u0000\u00af\u000f\u0001\u0000\u0000\u0000\u00b0\u00b1\u0005"+ - "m\u0000\u0000\u00b1\u00b2\u0005o\u0000\u0000\u00b2\u00b3\u0005d\u0000"+ - "\u0000\u00b3\u00b4\u0005u\u0000\u0000\u00b4\u00b5\u0005l\u0000\u0000\u00b5"+ - "\u00b6\u0005e\u0000\u0000\u00b6\u0011\u0001\u0000\u0000\u0000\u00b7\u00b8"+ - "\u0005m\u0000\u0000\u00b8\u00b9\u0005o\u0000\u0000\u00b9\u00ba\u0005d"+ - "\u0000\u0000\u00ba\u00bb\u0005e\u0000\u0000\u00bb\u00bc\u0005l\u0000\u0000"+ - "\u00bc\u0013\u0001\u0000\u0000\u0000\u00bd\u00be\u0005s\u0000\u0000\u00be"+ - "\u00bf\u0005c\u0000\u0000\u00bf\u00c0\u0005h\u0000\u0000\u00c0\u00c1\u0005"+ - "e\u0000\u0000\u00c1\u00c2\u0005m\u0000\u0000\u00c2\u00c3\u0005a\u0000"+ - "\u0000\u00c3\u0015\u0001\u0000\u0000\u0000\u00c4\u00c6\u0003^.\u0000\u00c5"+ - "\u00c4\u0001\u0000\u0000\u0000\u00c6\u00c7\u0001\u0000\u0000\u0000\u00c7"+ - "\u00c5\u0001\u0000\u0000\u0000\u00c7\u00c8\u0001\u0000\u0000\u0000\u00c8"+ - "\u00c9\u0001\u0000\u0000\u0000\u00c9\u00cb\u0005.\u0000\u0000\u00ca\u00cc"+ - "\u0003^.\u0000\u00cb\u00ca\u0001\u0000\u0000\u0000\u00cc\u00cd\u0001\u0000"+ - "\u0000\u0000\u00cd\u00cb\u0001\u0000\u0000\u0000\u00cd\u00ce\u0001\u0000"+ - "\u0000\u0000\u00ce\u0017\u0001\u0000\u0000\u0000\u00cf\u00d0\u0005e\u0000"+ - "\u0000\u00d0\u00d1\u0005x\u0000\u0000\u00d1\u00d2\u0005t\u0000\u0000\u00d2"+ - "\u00d3\u0005e\u0000\u0000\u00d3\u00d4\u0005n\u0000\u0000\u00d4\u00d5\u0005"+ - "d\u0000\u0000\u00d5\u0019\u0001\u0000\u0000\u0000\u00d6\u00d7\u0005t\u0000"+ - "\u0000\u00d7\u00d8\u0005y\u0000\u0000\u00d8\u00d9\u0005p\u0000\u0000\u00d9"+ - "\u00da\u0005e\u0000\u0000\u00da\u001b\u0001\u0000\u0000\u0000\u00db\u00dc"+ - "\u0005c\u0000\u0000\u00dc\u00dd\u0005o\u0000\u0000\u00dd\u00de\u0005n"+ - "\u0000\u0000\u00de\u00df\u0005d\u0000\u0000\u00df\u00e0\u0005i\u0000\u0000"+ - "\u00e0\u00e1\u0005t\u0000\u0000\u00e1\u00e2\u0005i\u0000\u0000\u00e2\u00e3"+ - "\u0005o\u0000\u0000\u00e3\u00e4\u0005n\u0000\u0000\u00e4\u00e5\u0001\u0000"+ - "\u0000\u0000\u00e5\u00e6\u0006\r\u0000\u0000\u00e6\u001d\u0001\u0000\u0000"+ - "\u0000\u00e7\u00e8\u0005r\u0000\u0000\u00e8\u00e9\u0005e\u0000\u0000\u00e9"+ - "\u00ea\u0005l\u0000\u0000\u00ea\u00eb\u0005a\u0000\u0000\u00eb\u00ec\u0005"+ - "t\u0000\u0000\u00ec\u00ed\u0005i\u0000\u0000\u00ed\u00ee\u0005o\u0000"+ - "\u0000\u00ee\u00ef\u0005n\u0000\u0000\u00ef\u00f0\u0005s\u0000\u0000\u00f0"+ - "\u001f\u0001\u0000\u0000\u0000\u00f1\u00f2\u0005r\u0000\u0000\u00f2\u00f3"+ - "\u0005e\u0000\u0000\u00f3\u00f4\u0005l\u0000\u0000\u00f4\u00f5\u0005a"+ - "\u0000\u0000\u00f5\u00f6\u0005t\u0000\u0000\u00f6\u00f7\u0005i\u0000\u0000"+ - "\u00f7\u00f8\u0005o\u0000\u0000\u00f8\u00f9\u0005n\u0000\u0000\u00f9!"+ - "\u0001\u0000\u0000\u0000\u00fa\u00fb\u0005d\u0000\u0000\u00fb\u00fc\u0005"+ - "e\u0000\u0000\u00fc\u00fd\u0005f\u0000\u0000\u00fd\u00fe\u0005i\u0000"+ - "\u0000\u00fe\u00ff\u0005n\u0000\u0000\u00ff\u0100\u0005e\u0000\u0000\u0100"+ - "#\u0001\u0000\u0000\u0000\u0101\u0102\u0005w\u0000\u0000\u0102\u0103\u0005"+ - "i\u0000\u0000\u0103\u0104\u0005t\u0000\u0000\u0104\u0105\u0005h\u0000"+ - "\u0000\u0105%\u0001\u0000\u0000\u0000\u0106\u0107\u0005=\u0000\u0000\u0107"+ - "\u0108\u0005=\u0000\u0000\u0108\'\u0001\u0000\u0000\u0000\u0109\u010a"+ - "\u0005!\u0000\u0000\u010a\u010b\u0005=\u0000\u0000\u010b)\u0001\u0000"+ - "\u0000\u0000\u010c\u010d\u0005i\u0000\u0000\u010d\u010e\u0005n\u0000\u0000"+ - "\u010e+\u0001\u0000\u0000\u0000\u010f\u0110\u0005<\u0000\u0000\u0110-"+ - "\u0001\u0000\u0000\u0000\u0111\u0112\u0005<\u0000\u0000\u0112\u0113\u0005"+ - "=\u0000\u0000\u0113/\u0001\u0000\u0000\u0000\u0114\u0115\u0005>\u0000"+ - "\u0000\u0115\u0116\u0005=\u0000\u0000\u01161\u0001\u0000\u0000\u0000\u0117"+ - "\u0118\u0005>\u0000\u0000\u01183\u0001\u0000\u0000\u0000\u0119\u011a\u0005"+ - "&\u0000\u0000\u011a\u011b\u0005&\u0000\u0000\u011b5\u0001\u0000\u0000"+ - "\u0000\u011c\u011d\u0005|\u0000\u0000\u011d\u011e\u0005|\u0000\u0000\u011e"+ - "7\u0001\u0000\u0000\u0000\u011f\u0120\u0005[\u0000\u0000\u01209\u0001"+ - "\u0000\u0000\u0000\u0121\u0122\u0005]\u0000\u0000\u0122;\u0001\u0000\u0000"+ - "\u0000\u0123\u0124\u0005{\u0000\u0000\u0124=\u0001\u0000\u0000\u0000\u0125"+ - "\u0126\u0005}\u0000\u0000\u0126?\u0001\u0000\u0000\u0000\u0127\u0128\u0005"+ - "(\u0000\u0000\u0128A\u0001\u0000\u0000\u0000\u0129\u012a\u0005)\u0000"+ - "\u0000\u012aC\u0001\u0000\u0000\u0000\u012b\u012c\u0005.\u0000\u0000\u012c"+ - "E\u0001\u0000\u0000\u0000\u012d\u012e\u0005-\u0000\u0000\u012eG\u0001"+ - "\u0000\u0000\u0000\u012f\u0130\u0005!\u0000\u0000\u0130I\u0001\u0000\u0000"+ - "\u0000\u0131\u0132\u0005?\u0000\u0000\u0132K\u0001\u0000\u0000\u0000\u0133"+ - "\u0134\u0005+\u0000\u0000\u0134M\u0001\u0000\u0000\u0000\u0135\u0136\u0005"+ - "*\u0000\u0000\u0136O\u0001\u0000\u0000\u0000\u0137\u0138\u0005/\u0000"+ - "\u0000\u0138Q\u0001\u0000\u0000\u0000\u0139\u013a\u0005%\u0000\u0000\u013a"+ - "S\u0001\u0000\u0000\u0000\u013b\u013c\u0005t\u0000\u0000\u013c\u013d\u0005"+ - "r\u0000\u0000\u013d\u013e\u0005u\u0000\u0000\u013e\u013f\u0005e\u0000"+ - "\u0000\u013fU\u0001\u0000\u0000\u0000\u0140\u0141\u0005f\u0000\u0000\u0141"+ - "\u0142\u0005a\u0000\u0000\u0142\u0143\u0005l\u0000\u0000\u0143\u0144\u0005"+ - "s\u0000\u0000\u0144\u0145\u0005e\u0000\u0000\u0145W\u0001\u0000\u0000"+ - "\u0000\u0146\u0147\u0005n\u0000\u0000\u0147\u0148\u0005u\u0000\u0000\u0148"+ - "\u0149\u0005l\u0000\u0000\u0149\u014a\u0005l\u0000\u0000\u014aY\u0001"+ - "\u0000\u0000\u0000\u014b\u014c\u0005\\\u0000\u0000\u014c[\u0001\u0000"+ - "\u0000\u0000\u014d\u014e\u0007\u0000\u0000\u0000\u014e]\u0001\u0000\u0000"+ - "\u0000\u014f\u0150\u000209\u0000\u0150_\u0001\u0000\u0000\u0000\u0151"+ - "\u0153\u0007\u0001\u0000\u0000\u0152\u0154\u0007\u0002\u0000\u0000\u0153"+ - "\u0152\u0001\u0000\u0000\u0000\u0153\u0154\u0001\u0000\u0000\u0000\u0154"+ - "\u0156\u0001\u0000\u0000\u0000\u0155\u0157\u0003^.\u0000\u0156\u0155\u0001"+ - "\u0000\u0000\u0000\u0157\u0158\u0001\u0000\u0000\u0000\u0158\u0156\u0001"+ - "\u0000\u0000\u0000\u0158\u0159\u0001\u0000\u0000\u0000\u0159a\u0001\u0000"+ - "\u0000\u0000\u015a\u015b\u0007\u0003\u0000\u0000\u015bc\u0001\u0000\u0000"+ - "\u0000\u015c\u015d\u0007\u0004\u0000\u0000\u015de\u0001\u0000\u0000\u0000"+ - "\u015e\u0163\u0003h3\u0000\u015f\u0163\u0003l5\u0000\u0160\u0163\u0003"+ - "n6\u0000\u0161\u0163\u0003j4\u0000\u0162\u015e\u0001\u0000\u0000\u0000"+ - "\u0162\u015f\u0001\u0000\u0000\u0000\u0162\u0160\u0001\u0000\u0000\u0000"+ - "\u0162\u0161\u0001\u0000\u0000\u0000\u0163g\u0001\u0000\u0000\u0000\u0164"+ - "\u0165\u0003Z,\u0000\u0165\u0166\u0007\u0005\u0000\u0000\u0166i\u0001"+ - "\u0000\u0000\u0000\u0167\u0168\u0003Z,\u0000\u0168\u0169\u000203\u0000"+ - "\u0169\u016a\u000207\u0000\u016a\u016b\u000207\u0000\u016bk\u0001\u0000"+ - "\u0000\u0000\u016c\u016d\u0003Z,\u0000\u016d\u016e\u0007\u0006\u0000\u0000"+ - "\u016e\u016f\u0003b0\u0000\u016f\u0170\u0003b0\u0000\u0170m\u0001\u0000"+ - "\u0000\u0000\u0171\u0172\u0003Z,\u0000\u0172\u0173\u0005u\u0000\u0000"+ - "\u0173\u0174\u0003b0\u0000\u0174\u0175\u0003b0\u0000\u0175\u0176\u0003"+ - "b0\u0000\u0176\u0177\u0003b0\u0000\u0177\u0184\u0001\u0000\u0000\u0000"+ - "\u0178\u0179\u0003Z,\u0000\u0179\u017a\u0005U\u0000\u0000\u017a\u017b"+ - "\u0003b0\u0000\u017b\u017c\u0003b0\u0000\u017c\u017d\u0003b0\u0000\u017d"+ - "\u017e\u0003b0\u0000\u017e\u017f\u0003b0\u0000\u017f\u0180\u0003b0\u0000"+ - "\u0180\u0181\u0003b0\u0000\u0181\u0182\u0003b0\u0000\u0182\u0184\u0001"+ - "\u0000\u0000\u0000\u0183\u0171\u0001\u0000\u0000\u0000\u0183\u0178\u0001"+ - "\u0000\u0000\u0000\u0184o\u0001\u0000\u0000\u0000\u0185\u0187\u0007\u0007"+ - "\u0000\u0000\u0186\u0185\u0001\u0000\u0000\u0000\u0187\u0188\u0001\u0000"+ - "\u0000\u0000\u0188\u0186\u0001\u0000\u0000\u0000\u0188\u0189\u0001\u0000"+ - "\u0000\u0000\u0189q\u0001\u0000\u0000\u0000\u018a\u018b\u0005/\u0000\u0000"+ - "\u018b\u018c\u0005/\u0000\u0000\u018c\u0190\u0001\u0000\u0000\u0000\u018d"+ - "\u018f\b\b\u0000\u0000\u018e\u018d\u0001\u0000\u0000\u0000\u018f\u0192"+ - "\u0001\u0000\u0000\u0000\u0190\u018e\u0001\u0000\u0000\u0000\u0190\u0191"+ - "\u0001\u0000\u0000\u0000\u0191\u0193\u0001\u0000\u0000\u0000\u0192\u0190"+ - "\u0001\u0000\u0000\u0000\u0193\u0194\u00068\u0001\u0000\u0194s\u0001\u0000"+ - "\u0000\u0000\u0195\u0197\u0003^.\u0000\u0196\u0195\u0001\u0000\u0000\u0000"+ - "\u0197\u0198\u0001\u0000\u0000\u0000\u0198\u0196\u0001\u0000\u0000\u0000"+ - "\u0198\u0199\u0001\u0000\u0000\u0000\u0199\u019a\u0001\u0000\u0000\u0000"+ - "\u019a\u019c\u0005.\u0000\u0000\u019b\u019d\u0003^.\u0000\u019c\u019b"+ - "\u0001\u0000\u0000\u0000\u019d\u019e\u0001\u0000\u0000\u0000\u019e\u019c"+ - "\u0001\u0000\u0000\u0000\u019e\u019f\u0001\u0000\u0000\u0000\u019f\u01a1"+ - "\u0001\u0000\u0000\u0000\u01a0\u01a2\u0003`/\u0000\u01a1\u01a0\u0001\u0000"+ - "\u0000\u0000\u01a1\u01a2\u0001\u0000\u0000\u0000\u01a2\u01b4\u0001\u0000"+ - "\u0000\u0000\u01a3\u01a5\u0003^.\u0000\u01a4\u01a3\u0001\u0000\u0000\u0000"+ - "\u01a5\u01a6\u0001\u0000\u0000\u0000\u01a6\u01a4\u0001\u0000\u0000\u0000"+ - "\u01a6\u01a7\u0001\u0000\u0000\u0000\u01a7\u01a8\u0001\u0000\u0000\u0000"+ - "\u01a8\u01a9\u0003`/\u0000\u01a9\u01b4\u0001\u0000\u0000\u0000\u01aa\u01ac"+ - "\u0005.\u0000\u0000\u01ab\u01ad\u0003^.\u0000\u01ac\u01ab\u0001\u0000"+ - "\u0000\u0000\u01ad\u01ae\u0001\u0000\u0000\u0000\u01ae\u01ac\u0001\u0000"+ - "\u0000\u0000\u01ae\u01af\u0001\u0000\u0000\u0000\u01af\u01b1\u0001\u0000"+ - "\u0000\u0000\u01b0\u01b2\u0003`/\u0000\u01b1\u01b0\u0001\u0000\u0000\u0000"+ - "\u01b1\u01b2\u0001\u0000\u0000\u0000\u01b2\u01b4\u0001\u0000\u0000\u0000"+ - "\u01b3\u0196\u0001\u0000\u0000\u0000\u01b3\u01a4\u0001\u0000\u0000\u0000"+ - "\u01b3\u01aa\u0001\u0000\u0000\u0000\u01b4u\u0001\u0000\u0000\u0000\u01b5"+ - "\u01b7\u0003^.\u0000\u01b6\u01b5\u0001\u0000\u0000\u0000\u01b7\u01b8\u0001"+ - "\u0000\u0000\u0000\u01b8\u01b6\u0001\u0000\u0000\u0000\u01b8\u01b9\u0001"+ - "\u0000\u0000\u0000\u01b9\u01c3\u0001\u0000\u0000\u0000\u01ba\u01bb\u0005"+ - "0\u0000\u0000\u01bb\u01bc\u0005x\u0000\u0000\u01bc\u01be\u0001\u0000\u0000"+ - "\u0000\u01bd\u01bf\u0003b0\u0000\u01be\u01bd\u0001\u0000\u0000\u0000\u01bf"+ - "\u01c0\u0001\u0000\u0000\u0000\u01c0\u01be\u0001\u0000\u0000\u0000\u01c0"+ - "\u01c1\u0001\u0000\u0000\u0000\u01c1\u01c3\u0001\u0000\u0000\u0000\u01c2"+ - "\u01b6\u0001\u0000\u0000\u0000\u01c2\u01ba\u0001\u0000\u0000\u0000\u01c3"+ - "w\u0001\u0000\u0000\u0000\u01c4\u01c6\u0003^.\u0000\u01c5\u01c4\u0001"+ - "\u0000\u0000\u0000\u01c6\u01c7\u0001\u0000\u0000\u0000\u01c7\u01c5\u0001"+ - "\u0000\u0000\u0000\u01c7\u01c8\u0001\u0000\u0000\u0000\u01c8\u01c9\u0001"+ - "\u0000\u0000\u0000\u01c9\u01ca\u0007\t\u0000\u0000\u01ca\u01d6\u0001\u0000"+ - "\u0000\u0000\u01cb\u01cc\u00050\u0000\u0000\u01cc\u01cd\u0005x\u0000\u0000"+ - "\u01cd\u01cf\u0001\u0000\u0000\u0000\u01ce\u01d0\u0003b0\u0000\u01cf\u01ce"+ - "\u0001\u0000\u0000\u0000\u01d0\u01d1\u0001\u0000\u0000\u0000\u01d1\u01cf"+ - "\u0001\u0000\u0000\u0000\u01d1\u01d2\u0001\u0000\u0000\u0000\u01d2\u01d3"+ - "\u0001\u0000\u0000\u0000\u01d3\u01d4\u0007\t\u0000\u0000\u01d4\u01d6\u0001"+ - "\u0000\u0000\u0000\u01d5\u01c5\u0001\u0000\u0000\u0000\u01d5\u01cb\u0001"+ - "\u0000\u0000\u0000\u01d6y\u0001\u0000\u0000\u0000\u01d7\u01dc\u0005\""+ - "\u0000\u0000\u01d8\u01db\u0003f2\u0000\u01d9\u01db\b\n\u0000\u0000\u01da"+ - "\u01d8\u0001\u0000\u0000\u0000\u01da\u01d9\u0001\u0000\u0000\u0000\u01db"+ - "\u01de\u0001\u0000\u0000\u0000\u01dc\u01da\u0001\u0000\u0000\u0000\u01dc"+ - "\u01dd\u0001\u0000\u0000\u0000\u01dd\u01df\u0001\u0000\u0000\u0000\u01de"+ - "\u01dc\u0001\u0000\u0000\u0000\u01df\u0238\u0005\"\u0000\u0000\u01e0\u01e5"+ - "\u0005\'\u0000\u0000\u01e1\u01e4\u0003f2\u0000\u01e2\u01e4\b\u000b\u0000"+ - "\u0000\u01e3\u01e1\u0001\u0000\u0000\u0000\u01e3\u01e2\u0001\u0000\u0000"+ - "\u0000\u01e4\u01e7\u0001\u0000\u0000\u0000\u01e5\u01e3\u0001\u0000\u0000"+ - "\u0000\u01e5\u01e6\u0001\u0000\u0000\u0000\u01e6\u01e8\u0001\u0000\u0000"+ - "\u0000\u01e7\u01e5\u0001\u0000\u0000\u0000\u01e8\u0238\u0005\'\u0000\u0000"+ - "\u01e9\u01ea\u0005\"\u0000\u0000\u01ea\u01eb\u0005\"\u0000\u0000\u01eb"+ - "\u01ec\u0005\"\u0000\u0000\u01ec\u01f1\u0001\u0000\u0000\u0000\u01ed\u01f0"+ - "\u0003f2\u0000\u01ee\u01f0\b\f\u0000\u0000\u01ef\u01ed\u0001\u0000\u0000"+ - "\u0000\u01ef\u01ee\u0001\u0000\u0000\u0000\u01f0\u01f3\u0001\u0000\u0000"+ - "\u0000\u01f1\u01f2\u0001\u0000\u0000\u0000\u01f1\u01ef\u0001\u0000\u0000"+ - "\u0000\u01f2\u01f4\u0001\u0000\u0000\u0000\u01f3\u01f1\u0001\u0000\u0000"+ - "\u0000\u01f4\u01f5\u0005\"\u0000\u0000\u01f5\u01f6\u0005\"\u0000\u0000"+ - "\u01f6\u0238\u0005\"\u0000\u0000\u01f7\u01f8\u0005\'\u0000\u0000\u01f8"+ - "\u01f9\u0005\'\u0000\u0000\u01f9\u01fa\u0005\'\u0000\u0000\u01fa\u01ff"+ - "\u0001\u0000\u0000\u0000\u01fb\u01fe\u0003f2\u0000\u01fc\u01fe\b\f\u0000"+ - "\u0000\u01fd\u01fb\u0001\u0000\u0000\u0000\u01fd\u01fc\u0001\u0000\u0000"+ - "\u0000\u01fe\u0201\u0001\u0000\u0000\u0000\u01ff\u0200\u0001\u0000\u0000"+ - "\u0000\u01ff\u01fd\u0001\u0000\u0000\u0000\u0200\u0202\u0001\u0000\u0000"+ - "\u0000\u0201\u01ff\u0001\u0000\u0000\u0000\u0202\u0203\u0005\'\u0000\u0000"+ - "\u0203\u0204\u0005\'\u0000\u0000\u0204\u0238\u0005\'\u0000\u0000\u0205"+ - "\u0206\u0003d1\u0000\u0206\u020a\u0005\"\u0000\u0000\u0207\u0209\b\r\u0000"+ - "\u0000\u0208\u0207\u0001\u0000\u0000\u0000\u0209\u020c\u0001\u0000\u0000"+ - "\u0000\u020a\u0208\u0001\u0000\u0000\u0000\u020a\u020b\u0001\u0000\u0000"+ - "\u0000\u020b\u020d\u0001\u0000\u0000\u0000\u020c\u020a\u0001\u0000\u0000"+ - "\u0000\u020d\u020e\u0005\"\u0000\u0000\u020e\u0238\u0001\u0000\u0000\u0000"+ - "\u020f\u0210\u0003d1\u0000\u0210\u0214\u0005\'\u0000\u0000\u0211\u0213"+ - "\b\u000e\u0000\u0000\u0212\u0211\u0001\u0000\u0000\u0000\u0213\u0216\u0001"+ - "\u0000\u0000\u0000\u0214\u0212\u0001\u0000\u0000\u0000\u0214\u0215\u0001"+ - "\u0000\u0000\u0000\u0215\u0217\u0001\u0000\u0000\u0000\u0216\u0214\u0001"+ - "\u0000\u0000\u0000\u0217\u0218\u0005\'\u0000\u0000\u0218\u0238\u0001\u0000"+ - "\u0000\u0000\u0219\u021a\u0003d1\u0000\u021a\u021b\u0005\"\u0000\u0000"+ - "\u021b\u021c\u0005\"\u0000\u0000\u021c\u021d\u0005\"\u0000\u0000\u021d"+ - "\u0221\u0001\u0000\u0000\u0000\u021e\u0220\t\u0000\u0000\u0000\u021f\u021e"+ - "\u0001\u0000\u0000\u0000\u0220\u0223\u0001\u0000\u0000\u0000\u0221\u0222"+ - "\u0001\u0000\u0000\u0000\u0221\u021f\u0001\u0000\u0000\u0000\u0222\u0224"+ - "\u0001\u0000\u0000\u0000\u0223\u0221\u0001\u0000\u0000\u0000\u0224\u0225"+ - "\u0005\"\u0000\u0000\u0225\u0226\u0005\"\u0000\u0000\u0226\u0227\u0005"+ - "\"\u0000\u0000\u0227\u0238\u0001\u0000\u0000\u0000\u0228\u0229\u0003d"+ - "1\u0000\u0229\u022a\u0005\'\u0000\u0000\u022a\u022b\u0005\'\u0000\u0000"+ - "\u022b\u022c\u0005\'\u0000\u0000\u022c\u0230\u0001\u0000\u0000\u0000\u022d"+ - "\u022f\t\u0000\u0000\u0000\u022e\u022d\u0001\u0000\u0000\u0000\u022f\u0232"+ - "\u0001\u0000\u0000\u0000\u0230\u0231\u0001\u0000\u0000\u0000\u0230\u022e"+ - "\u0001\u0000\u0000\u0000\u0231\u0233\u0001\u0000\u0000\u0000\u0232\u0230"+ - "\u0001\u0000\u0000\u0000\u0233\u0234\u0005\'\u0000\u0000\u0234\u0235\u0005"+ - "\'\u0000\u0000\u0235\u0236\u0005\'\u0000\u0000\u0236\u0238\u0001\u0000"+ - "\u0000\u0000\u0237\u01d7\u0001\u0000\u0000\u0000\u0237\u01e0\u0001\u0000"+ - "\u0000\u0000\u0237\u01e9\u0001\u0000\u0000\u0000\u0237\u01f7\u0001\u0000"+ - "\u0000\u0000\u0237\u0205\u0001\u0000\u0000\u0000\u0237\u020f\u0001\u0000"+ - "\u0000\u0000\u0237\u0219\u0001\u0000\u0000\u0000\u0237\u0228\u0001\u0000"+ - "\u0000\u0000\u0238{\u0001\u0000\u0000\u0000\u0239\u023a\u0007\u000f\u0000"+ - "\u0000\u023a\u023b\u0003z<\u0000\u023b}\u0001\u0000\u0000\u0000\u023c"+ - "\u023f\u0003\\-\u0000\u023d\u023f\u0005_\u0000\u0000\u023e\u023c\u0001"+ - "\u0000\u0000\u0000\u023e\u023d\u0001\u0000\u0000\u0000\u023f\u0246\u0001"+ - "\u0000\u0000\u0000\u0240\u0245\u0003\\-\u0000\u0241\u0245\u0003^.\u0000"+ - "\u0242\u0245\u0005_\u0000\u0000\u0243\u0245\u0003F\"\u0000\u0244\u0240"+ - "\u0001\u0000\u0000\u0000\u0244\u0241\u0001\u0000\u0000\u0000\u0244\u0242"+ - "\u0001\u0000\u0000\u0000\u0244\u0243\u0001\u0000\u0000\u0000\u0245\u0248"+ - "\u0001\u0000\u0000\u0000\u0246\u0244\u0001\u0000\u0000\u0000\u0246\u0247"+ - "\u0001\u0000\u0000\u0000\u0247\u007f\u0001\u0000\u0000\u0000\u0248\u0246"+ - "\u0001\u0000\u0000\u0000\u0249\u024b\u0003p7\u0000\u024a\u0249\u0001\u0000"+ - "\u0000\u0000\u024a\u024b\u0001\u0000\u0000\u0000\u024b\u0251\u0001\u0000"+ - "\u0000\u0000\u024c\u024e\u0005\r\u0000\u0000\u024d\u024c\u0001\u0000\u0000"+ - "\u0000\u024d\u024e\u0001\u0000\u0000\u0000\u024e\u024f\u0001\u0000\u0000"+ - "\u0000\u024f\u0252\u0005\n\u0000\u0000\u0250\u0252\u0002\f\r\u0000\u0251"+ - "\u024d\u0001\u0000\u0000\u0000\u0251\u0250\u0001\u0000\u0000\u0000\u0252"+ - "\u0254\u0001\u0000\u0000\u0000\u0253\u0255\u0003p7\u0000\u0254\u0253\u0001"+ - "\u0000\u0000\u0000\u0254\u0255\u0001\u0000\u0000\u0000\u0255\u0257\u0001"+ - "\u0000\u0000\u0000\u0256\u0258\u0003\u0080?\u0000\u0257\u0256\u0001\u0000"+ - "\u0000\u0000\u0257\u0258\u0001\u0000\u0000\u0000\u0258\u0081\u0001\u0000"+ - "\u0000\u0000\u0259\u025a\u0003B \u0000\u025a\u025b\u0001\u0000\u0000\u0000"+ - "\u025b\u025c\u0006@\u0002\u0000\u025c\u025d\u0006@\u0003\u0000\u025d\u0083"+ - "\u0001\u0000\u0000\u0000\u025e\u025f\u0005m\u0000\u0000\u025f\u0260\u0005"+ - "a\u0000\u0000\u0260\u0266\u0005p\u0000\u0000\u0261\u0262\u0005l\u0000"+ - "\u0000\u0262\u0263\u0005i\u0000\u0000\u0263\u0264\u0005s\u0000\u0000\u0264"+ - "\u0266\u0005t\u0000\u0000\u0265\u025e\u0001\u0000\u0000\u0000\u0265\u0261"+ - "\u0001\u0000\u0000\u0000\u0266\u0085\u0001\u0000\u0000\u0000\u0267\u0268"+ - "\u0005b\u0000\u0000\u0268\u0269\u0005o\u0000\u0000\u0269\u026a\u0005o"+ - "\u0000\u0000\u026a\u0299\u0005l\u0000\u0000\u026b\u026c\u0005s\u0000\u0000"+ - "\u026c\u026d\u0005t\u0000\u0000\u026d\u026e\u0005r\u0000\u0000\u026e\u026f"+ - "\u0005i\u0000\u0000\u026f\u0270\u0005n\u0000\u0000\u0270\u0299\u0005g"+ - "\u0000\u0000\u0271\u0272\u0005i\u0000\u0000\u0272\u0273\u0005n\u0000\u0000"+ - "\u0273\u0299\u0005t\u0000\u0000\u0274\u0275\u0005u\u0000\u0000\u0275\u0276"+ - "\u0005i\u0000\u0000\u0276\u0277\u0005n\u0000\u0000\u0277\u0299\u0005t"+ - "\u0000\u0000\u0278\u0279\u0005d\u0000\u0000\u0279\u027a\u0005o\u0000\u0000"+ - "\u027a\u027b\u0005u\u0000\u0000\u027b\u027c\u0005b\u0000\u0000\u027c\u027d"+ - "\u0005l\u0000\u0000\u027d\u0299\u0005e\u0000\u0000\u027e\u027f\u0005d"+ - "\u0000\u0000\u027f\u0280\u0005u\u0000\u0000\u0280\u0281\u0005r\u0000\u0000"+ - "\u0281\u0282\u0005a\u0000\u0000\u0282\u0283\u0005t\u0000\u0000\u0283\u0284"+ - "\u0005i\u0000\u0000\u0284\u0285\u0005o\u0000\u0000\u0285\u0299\u0005n"+ - "\u0000\u0000\u0286\u0287\u0005t\u0000\u0000\u0287\u0288\u0005i\u0000\u0000"+ - "\u0288\u0289\u0005m\u0000\u0000\u0289\u028a\u0005e\u0000\u0000\u028a\u028b"+ - "\u0005s\u0000\u0000\u028b\u028c\u0005t\u0000\u0000\u028c\u028d\u0005a"+ - "\u0000\u0000\u028d\u028e\u0005m\u0000\u0000\u028e\u0299\u0005p\u0000\u0000"+ - "\u028f\u0290\u0005i\u0000\u0000\u0290\u0291\u0005p\u0000\u0000\u0291\u0292"+ - "\u0005a\u0000\u0000\u0292\u0293\u0005d\u0000\u0000\u0293\u0294\u0005d"+ - "\u0000\u0000\u0294\u0295\u0005r\u0000\u0000\u0295\u0296\u0005e\u0000\u0000"+ - "\u0296\u0297\u0005s\u0000\u0000\u0297\u0299\u0005s\u0000\u0000\u0298\u0267"+ - "\u0001\u0000\u0000\u0000\u0298\u026b\u0001\u0000\u0000\u0000\u0298\u0271"+ - "\u0001\u0000\u0000\u0000\u0298\u0274\u0001\u0000\u0000\u0000\u0298\u0278"+ - "\u0001\u0000\u0000\u0000\u0298\u027e\u0001\u0000\u0000\u0000\u0298\u0286"+ - "\u0001\u0000\u0000\u0000\u0298\u028f\u0001\u0000\u0000\u0000\u0299\u0087"+ - "\u0001\u0000\u0000\u0000\u029a\u029b\u0003,\u0015\u0000\u029b\u029c\u0001"+ - "\u0000\u0000\u0000\u029c\u029d\u0006C\u0004\u0000\u029d\u0089\u0001\u0000"+ - "\u0000\u0000\u029e\u029f\u00032\u0018\u0000\u029f\u02a0\u0001\u0000\u0000"+ - "\u0000\u02a0\u02a1\u0006D\u0005\u0000\u02a1\u008b\u0001\u0000\u0000\u0000"+ - "\u02a2\u02a3\u0003@\u001f\u0000\u02a3\u02a4\u0001\u0000\u0000\u0000\u02a4"+ - "\u02a5\u0006E\u0006\u0000\u02a5\u008d\u0001\u0000\u0000\u0000\u02a6\u02a7"+ - "\u0003\u0004\u0001\u0000\u02a7\u02a8\u0001\u0000\u0000\u0000\u02a8\u02a9"+ - "\u0006F\u0007\u0000\u02a9\u008f\u0001\u0000\u0000\u0000\u02aa\u02ab\u0003"+ - "\u0006\u0002\u0000\u02ab\u02ac\u0001\u0000\u0000\u0000\u02ac\u02ad\u0006"+ - "G\b\u0000\u02ad\u0091\u0001\u0000\u0000\u0000\u02ae\u02af\u0003p7\u0000"+ - "\u02af\u02b0\u0001\u0000\u0000\u0000\u02b0\u02b1\u0006H\t\u0000\u02b1"+ - "\u0093\u0001\u0000\u0000\u0000\u02b2\u02b3\u0003~>\u0000\u02b3\u02b4\u0001"+ - "\u0000\u0000\u0000\u02b4\u02b5\u0006I\n\u0000\u02b5\u0095\u0001\u0000"+ - "\u0000\u0000.\u0000\u0001\u00c7\u00cd\u0153\u0158\u0162\u0183\u0188\u0190"+ - "\u0198\u019e\u01a1\u01a6\u01ae\u01b1\u01b3\u01b8\u01c0\u01c2\u01c7\u01d1"+ - "\u01d5\u01da\u01dc\u01e3\u01e5\u01ef\u01f1\u01fd\u01ff\u020a\u0214\u0221"+ - "\u0230\u0237\u023e\u0244\u0246\u024a\u024d\u0251\u0254\u0257\u0265\u0298"+ - "\u000b\u0005\u0001\u0000\u0000\u0001\u0000\u0007\b\u0000\u0004\u0000\u0000"+ - "\u0007\u0003\u0000\u0007\u0004\u0000\u0007\u0007\u0000\u0007\u0001\u0000"+ - "\u0007\u0002\u0000\u0007\t\u0000\u0007\n\u0000"; + "<\u0231\b<\n<\f<\u0234\t<\u0001<\u0001<\u0001<\u0001<\u0003<\u023a\b<"+ + "\u0001=\u0001=\u0001=\u0001>\u0001>\u0003>\u0241\b>\u0001>\u0001>\u0001"+ + ">\u0001>\u0005>\u0247\b>\n>\f>\u024a\t>\u0001?\u0001?\u0003?\u024e\b?"+ + "\u0001?\u0001?\u0001?\u0003?\u0253\b?\u0001?\u0001?\u0001?\u0004?\u0258"+ + "\b?\u000b?\f?\u0259\u0005?\u025c\b?\n?\f?\u025f\t?\u0001@\u0003@\u0262"+ + "\b@\u0001@\u0003@\u0265\b@\u0001@\u0001@\u0003@\u0269\b@\u0001@\u0003"+ + "@\u026c\b@\u0001@\u0003@\u026f\b@\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0003B\u027d\bB\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0003C\u02b0\bC\u0001"+ + "D\u0001D\u0001D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001F\u0001F\u0001"+ + "F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001H\u0001H\u0001H\u0001H\u0001"+ + "I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0004\u01f3\u0201\u0223"+ + "\u0232\u0000K\u0002\u000b\u0004\u0001\u0006\u0002\b\f\n\r\f\u000e\u000e"+ + "\u000f\u0010\u0010\u0012\u0011\u0014\u0012\u0016\u0013\u0018\u0014\u001a"+ + "\u0015\u001c\u0016\u001e\u0017 \u0018\"\u0019$\u001a&\u001b(\u001c*\u001d"+ + ",\u0003.\u001e0\u001f2\u00044 6!8\u0005:\"<#>$@\u0007B\bD%F&H\'J(L)N*"+ + "P+R,T-V.X/Z\u0000\\\u0000^\u0000`\u0000b\u0000d\u0000f\u0000h\u0000j\u0000"+ + "l\u0000n\u0000p\tr0t1v2x3z4|5~\n\u00806\u00827\u0084\u0000\u00868\u0088"+ + "9\u008a\u0000\u008c\u0000\u008e\u0000\u0090\u0000\u0092\u0000\u0094\u0000"+ + "\u0096\u0000\u0002\u0000\u0001\u0010\u0002\u0000AZaz\u0002\u0000EEee\u0002"+ + "\u0000++--\u0003\u000009AFaf\u0002\u0000RRrr\n\u0000\"\"\'\'??\\\\`bf"+ + "fnnrrttvv\u0002\u0000XXxx\u0003\u0000\t\t\f\f \u0001\u0000\n\n\u0002"+ + "\u0000UUuu\u0004\u0000\n\n\r\r\"\"\\\\\u0004\u0000\n\n\r\r\'\'\\\\\u0001"+ + "\u0000\\\\\u0003\u0000\n\n\r\r\"\"\u0003\u0000\n\n\r\r\'\'\u0002\u0000"+ + "BBbb\u0305\u0000\u0002\u0001\u0000\u0000\u0000\u0000\u0004\u0001\u0000"+ + "\u0000\u0000\u0000\u0006\u0001\u0000\u0000\u0000\u0000\b\u0001\u0000\u0000"+ + "\u0000\u0000\n\u0001\u0000\u0000\u0000\u0000\f\u0001\u0000\u0000\u0000"+ + "\u0000\u000e\u0001\u0000\u0000\u0000\u0000\u0010\u0001\u0000\u0000\u0000"+ + "\u0000\u0012\u0001\u0000\u0000\u0000\u0000\u0014\u0001\u0000\u0000\u0000"+ + "\u0000\u0016\u0001\u0000\u0000\u0000\u0000\u0018\u0001\u0000\u0000\u0000"+ + "\u0000\u001a\u0001\u0000\u0000\u0000\u0000\u001c\u0001\u0000\u0000\u0000"+ + "\u0000\u001e\u0001\u0000\u0000\u0000\u0000 \u0001\u0000\u0000\u0000\u0000"+ + "\"\u0001\u0000\u0000\u0000\u0000$\u0001\u0000\u0000\u0000\u0000&\u0001"+ + "\u0000\u0000\u0000\u0000(\u0001\u0000\u0000\u0000\u0000*\u0001\u0000\u0000"+ + "\u0000\u0000,\u0001\u0000\u0000\u0000\u0000.\u0001\u0000\u0000\u0000\u0000"+ + "0\u0001\u0000\u0000\u0000\u00002\u0001\u0000\u0000\u0000\u00004\u0001"+ + "\u0000\u0000\u0000\u00006\u0001\u0000\u0000\u0000\u00008\u0001\u0000\u0000"+ + "\u0000\u0000:\u0001\u0000\u0000\u0000\u0000<\u0001\u0000\u0000\u0000\u0000"+ + ">\u0001\u0000\u0000\u0000\u0000@\u0001\u0000\u0000\u0000\u0000B\u0001"+ + "\u0000\u0000\u0000\u0000D\u0001\u0000\u0000\u0000\u0000F\u0001\u0000\u0000"+ + "\u0000\u0000H\u0001\u0000\u0000\u0000\u0000J\u0001\u0000\u0000\u0000\u0000"+ + "L\u0001\u0000\u0000\u0000\u0000N\u0001\u0000\u0000\u0000\u0000P\u0001"+ + "\u0000\u0000\u0000\u0000R\u0001\u0000\u0000\u0000\u0000T\u0001\u0000\u0000"+ + "\u0000\u0000V\u0001\u0000\u0000\u0000\u0000X\u0001\u0000\u0000\u0000\u0000"+ + "p\u0001\u0000\u0000\u0000\u0000r\u0001\u0000\u0000\u0000\u0000t\u0001"+ + "\u0000\u0000\u0000\u0000v\u0001\u0000\u0000\u0000\u0000x\u0001\u0000\u0000"+ + "\u0000\u0000z\u0001\u0000\u0000\u0000\u0000|\u0001\u0000\u0000\u0000\u0000"+ + "~\u0001\u0000\u0000\u0000\u0000\u0080\u0001\u0000\u0000\u0000\u0000\u0082"+ + "\u0001\u0000\u0000\u0000\u0001\u0084\u0001\u0000\u0000\u0000\u0001\u0086"+ + "\u0001\u0000\u0000\u0000\u0001\u0088\u0001\u0000\u0000\u0000\u0001\u008a"+ + "\u0001\u0000\u0000\u0000\u0001\u008c\u0001\u0000\u0000\u0000\u0001\u008e"+ + "\u0001\u0000\u0000\u0000\u0001\u0090\u0001\u0000\u0000\u0000\u0001\u0092"+ + "\u0001\u0000\u0000\u0000\u0001\u0094\u0001\u0000\u0000\u0000\u0001\u0096"+ + "\u0001\u0000\u0000\u0000\u0002\u0098\u0001\u0000\u0000\u0000\u0004\u009a"+ + "\u0001\u0000\u0000\u0000\u0006\u009c\u0001\u0000\u0000\u0000\b\u009e\u0001"+ + "\u0000\u0000\u0000\n\u00a2\u0001\u0000\u0000\u0000\f\u00a5\u0001\u0000"+ + "\u0000\u0000\u000e\u00ad\u0001\u0000\u0000\u0000\u0010\u00b2\u0001\u0000"+ + "\u0000\u0000\u0012\u00b9\u0001\u0000\u0000\u0000\u0014\u00bf\u0001\u0000"+ + "\u0000\u0000\u0016\u00c7\u0001\u0000\u0000\u0000\u0018\u00d1\u0001\u0000"+ + "\u0000\u0000\u001a\u00d8\u0001\u0000\u0000\u0000\u001c\u00dd\u0001\u0000"+ + "\u0000\u0000\u001e\u00e9\u0001\u0000\u0000\u0000 \u00f3\u0001\u0000\u0000"+ + "\u0000\"\u00fc\u0001\u0000\u0000\u0000$\u0103\u0001\u0000\u0000\u0000"+ + "&\u0108\u0001\u0000\u0000\u0000(\u010b\u0001\u0000\u0000\u0000*\u010e"+ + "\u0001\u0000\u0000\u0000,\u0111\u0001\u0000\u0000\u0000.\u0113\u0001\u0000"+ + "\u0000\u00000\u0116\u0001\u0000\u0000\u00002\u0119\u0001\u0000\u0000\u0000"+ + "4\u011b\u0001\u0000\u0000\u00006\u011e\u0001\u0000\u0000\u00008\u0121"+ + "\u0001\u0000\u0000\u0000:\u0123\u0001\u0000\u0000\u0000<\u0125\u0001\u0000"+ + "\u0000\u0000>\u0127\u0001\u0000\u0000\u0000@\u0129\u0001\u0000\u0000\u0000"+ + "B\u012b\u0001\u0000\u0000\u0000D\u012d\u0001\u0000\u0000\u0000F\u012f"+ + "\u0001\u0000\u0000\u0000H\u0131\u0001\u0000\u0000\u0000J\u0133\u0001\u0000"+ + "\u0000\u0000L\u0135\u0001\u0000\u0000\u0000N\u0137\u0001\u0000\u0000\u0000"+ + "P\u0139\u0001\u0000\u0000\u0000R\u013b\u0001\u0000\u0000\u0000T\u013d"+ + "\u0001\u0000\u0000\u0000V\u0142\u0001\u0000\u0000\u0000X\u0148\u0001\u0000"+ + "\u0000\u0000Z\u014d\u0001\u0000\u0000\u0000\\\u014f\u0001\u0000\u0000"+ + "\u0000^\u0151\u0001\u0000\u0000\u0000`\u0153\u0001\u0000\u0000\u0000b"+ + "\u015c\u0001\u0000\u0000\u0000d\u015e\u0001\u0000\u0000\u0000f\u0164\u0001"+ + "\u0000\u0000\u0000h\u0166\u0001\u0000\u0000\u0000j\u0169\u0001\u0000\u0000"+ + "\u0000l\u016e\u0001\u0000\u0000\u0000n\u0185\u0001\u0000\u0000\u0000p"+ + "\u0188\u0001\u0000\u0000\u0000r\u018c\u0001\u0000\u0000\u0000t\u01b5\u0001"+ + "\u0000\u0000\u0000v\u01c4\u0001\u0000\u0000\u0000x\u01d7\u0001\u0000\u0000"+ + "\u0000z\u0239\u0001\u0000\u0000\u0000|\u023b\u0001\u0000\u0000\u0000~"+ + "\u0240\u0001\u0000\u0000\u0000\u0080\u024d\u0001\u0000\u0000\u0000\u0082"+ + "\u0261\u0001\u0000\u0000\u0000\u0084\u0270\u0001\u0000\u0000\u0000\u0086"+ + "\u027c\u0001\u0000\u0000\u0000\u0088\u02af\u0001\u0000\u0000\u0000\u008a"+ + "\u02b1\u0001\u0000\u0000\u0000\u008c\u02b5\u0001\u0000\u0000\u0000\u008e"+ + "\u02b9\u0001\u0000\u0000\u0000\u0090\u02bd\u0001\u0000\u0000\u0000\u0092"+ + "\u02c1\u0001\u0000\u0000\u0000\u0094\u02c5\u0001\u0000\u0000\u0000\u0096"+ + "\u02c9\u0001\u0000\u0000\u0000\u0098\u0099\u0005#\u0000\u0000\u0099\u0003"+ + "\u0001\u0000\u0000\u0000\u009a\u009b\u0005:\u0000\u0000\u009b\u0005\u0001"+ + "\u0000\u0000\u0000\u009c\u009d\u0005,\u0000\u0000\u009d\u0007\u0001\u0000"+ + "\u0000\u0000\u009e\u009f\u0005a\u0000\u0000\u009f\u00a0\u0005n\u0000\u0000"+ + "\u00a0\u00a1\u0005d\u0000\u0000\u00a1\t\u0001\u0000\u0000\u0000\u00a2"+ + "\u00a3\u0005o\u0000\u0000\u00a3\u00a4\u0005r\u0000\u0000\u00a4\u000b\u0001"+ + "\u0000\u0000\u0000\u00a5\u00a6\u0005b\u0000\u0000\u00a6\u00a7\u0005u\u0000"+ + "\u0000\u00a7\u00a8\u0005t\u0000\u0000\u00a8\u00a9\u0005 \u0000\u0000\u00a9"+ + "\u00aa\u0005n\u0000\u0000\u00aa\u00ab\u0005o\u0000\u0000\u00ab\u00ac\u0005"+ + "t\u0000\u0000\u00ac\r\u0001\u0000\u0000\u0000\u00ad\u00ae\u0005f\u0000"+ + "\u0000\u00ae\u00af\u0005r\u0000\u0000\u00af\u00b0\u0005o\u0000\u0000\u00b0"+ + "\u00b1\u0005m\u0000\u0000\u00b1\u000f\u0001\u0000\u0000\u0000\u00b2\u00b3"+ + "\u0005m\u0000\u0000\u00b3\u00b4\u0005o\u0000\u0000\u00b4\u00b5\u0005d"+ + "\u0000\u0000\u00b5\u00b6\u0005u\u0000\u0000\u00b6\u00b7\u0005l\u0000\u0000"+ + "\u00b7\u00b8\u0005e\u0000\u0000\u00b8\u0011\u0001\u0000\u0000\u0000\u00b9"+ + "\u00ba\u0005m\u0000\u0000\u00ba\u00bb\u0005o\u0000\u0000\u00bb\u00bc\u0005"+ + "d\u0000\u0000\u00bc\u00bd\u0005e\u0000\u0000\u00bd\u00be\u0005l\u0000"+ + "\u0000\u00be\u0013\u0001\u0000\u0000\u0000\u00bf\u00c0\u0005s\u0000\u0000"+ + "\u00c0\u00c1\u0005c\u0000\u0000\u00c1\u00c2\u0005h\u0000\u0000\u00c2\u00c3"+ + "\u0005e\u0000\u0000\u00c3\u00c4\u0005m\u0000\u0000\u00c4\u00c5\u0005a"+ + "\u0000\u0000\u00c5\u0015\u0001\u0000\u0000\u0000\u00c6\u00c8\u0003^.\u0000"+ + "\u00c7\u00c6\u0001\u0000\u0000\u0000\u00c8\u00c9\u0001\u0000\u0000\u0000"+ + "\u00c9\u00c7\u0001\u0000\u0000\u0000\u00c9\u00ca\u0001\u0000\u0000\u0000"+ + "\u00ca\u00cb\u0001\u0000\u0000\u0000\u00cb\u00cd\u0005.\u0000\u0000\u00cc"+ + "\u00ce\u0003^.\u0000\u00cd\u00cc\u0001\u0000\u0000\u0000\u00ce\u00cf\u0001"+ + "\u0000\u0000\u0000\u00cf\u00cd\u0001\u0000\u0000\u0000\u00cf\u00d0\u0001"+ + "\u0000\u0000\u0000\u00d0\u0017\u0001\u0000\u0000\u0000\u00d1\u00d2\u0005"+ + "e\u0000\u0000\u00d2\u00d3\u0005x\u0000\u0000\u00d3\u00d4\u0005t\u0000"+ + "\u0000\u00d4\u00d5\u0005e\u0000\u0000\u00d5\u00d6\u0005n\u0000\u0000\u00d6"+ + "\u00d7\u0005d\u0000\u0000\u00d7\u0019\u0001\u0000\u0000\u0000\u00d8\u00d9"+ + "\u0005t\u0000\u0000\u00d9\u00da\u0005y\u0000\u0000\u00da\u00db\u0005p"+ + "\u0000\u0000\u00db\u00dc\u0005e\u0000\u0000\u00dc\u001b\u0001\u0000\u0000"+ + "\u0000\u00dd\u00de\u0005c\u0000\u0000\u00de\u00df\u0005o\u0000\u0000\u00df"+ + "\u00e0\u0005n\u0000\u0000\u00e0\u00e1\u0005d\u0000\u0000\u00e1\u00e2\u0005"+ + "i\u0000\u0000\u00e2\u00e3\u0005t\u0000\u0000\u00e3\u00e4\u0005i\u0000"+ + "\u0000\u00e4\u00e5\u0005o\u0000\u0000\u00e5\u00e6\u0005n\u0000\u0000\u00e6"+ + "\u00e7\u0001\u0000\u0000\u0000\u00e7\u00e8\u0006\r\u0000\u0000\u00e8\u001d"+ + "\u0001\u0000\u0000\u0000\u00e9\u00ea\u0005r\u0000\u0000\u00ea\u00eb\u0005"+ + "e\u0000\u0000\u00eb\u00ec\u0005l\u0000\u0000\u00ec\u00ed\u0005a\u0000"+ + "\u0000\u00ed\u00ee\u0005t\u0000\u0000\u00ee\u00ef\u0005i\u0000\u0000\u00ef"+ + "\u00f0\u0005o\u0000\u0000\u00f0\u00f1\u0005n\u0000\u0000\u00f1\u00f2\u0005"+ + "s\u0000\u0000\u00f2\u001f\u0001\u0000\u0000\u0000\u00f3\u00f4\u0005r\u0000"+ + "\u0000\u00f4\u00f5\u0005e\u0000\u0000\u00f5\u00f6\u0005l\u0000\u0000\u00f6"+ + "\u00f7\u0005a\u0000\u0000\u00f7\u00f8\u0005t\u0000\u0000\u00f8\u00f9\u0005"+ + "i\u0000\u0000\u00f9\u00fa\u0005o\u0000\u0000\u00fa\u00fb\u0005n\u0000"+ + "\u0000\u00fb!\u0001\u0000\u0000\u0000\u00fc\u00fd\u0005d\u0000\u0000\u00fd"+ + "\u00fe\u0005e\u0000\u0000\u00fe\u00ff\u0005f\u0000\u0000\u00ff\u0100\u0005"+ + "i\u0000\u0000\u0100\u0101\u0005n\u0000\u0000\u0101\u0102\u0005e\u0000"+ + "\u0000\u0102#\u0001\u0000\u0000\u0000\u0103\u0104\u0005w\u0000\u0000\u0104"+ + "\u0105\u0005i\u0000\u0000\u0105\u0106\u0005t\u0000\u0000\u0106\u0107\u0005"+ + "h\u0000\u0000\u0107%\u0001\u0000\u0000\u0000\u0108\u0109\u0005=\u0000"+ + "\u0000\u0109\u010a\u0005=\u0000\u0000\u010a\'\u0001\u0000\u0000\u0000"+ + "\u010b\u010c\u0005!\u0000\u0000\u010c\u010d\u0005=\u0000\u0000\u010d)"+ + "\u0001\u0000\u0000\u0000\u010e\u010f\u0005i\u0000\u0000\u010f\u0110\u0005"+ + "n\u0000\u0000\u0110+\u0001\u0000\u0000\u0000\u0111\u0112\u0005<\u0000"+ + "\u0000\u0112-\u0001\u0000\u0000\u0000\u0113\u0114\u0005<\u0000\u0000\u0114"+ + "\u0115\u0005=\u0000\u0000\u0115/\u0001\u0000\u0000\u0000\u0116\u0117\u0005"+ + ">\u0000\u0000\u0117\u0118\u0005=\u0000\u0000\u01181\u0001\u0000\u0000"+ + "\u0000\u0119\u011a\u0005>\u0000\u0000\u011a3\u0001\u0000\u0000\u0000\u011b"+ + "\u011c\u0005&\u0000\u0000\u011c\u011d\u0005&\u0000\u0000\u011d5\u0001"+ + "\u0000\u0000\u0000\u011e\u011f\u0005|\u0000\u0000\u011f\u0120\u0005|\u0000"+ + "\u0000\u01207\u0001\u0000\u0000\u0000\u0121\u0122\u0005[\u0000\u0000\u0122"+ + "9\u0001\u0000\u0000\u0000\u0123\u0124\u0005]\u0000\u0000\u0124;\u0001"+ + "\u0000\u0000\u0000\u0125\u0126\u0005{\u0000\u0000\u0126=\u0001\u0000\u0000"+ + "\u0000\u0127\u0128\u0005}\u0000\u0000\u0128?\u0001\u0000\u0000\u0000\u0129"+ + "\u012a\u0005(\u0000\u0000\u012aA\u0001\u0000\u0000\u0000\u012b\u012c\u0005"+ + ")\u0000\u0000\u012cC\u0001\u0000\u0000\u0000\u012d\u012e\u0005.\u0000"+ + "\u0000\u012eE\u0001\u0000\u0000\u0000\u012f\u0130\u0005-\u0000\u0000\u0130"+ + "G\u0001\u0000\u0000\u0000\u0131\u0132\u0005!\u0000\u0000\u0132I\u0001"+ + "\u0000\u0000\u0000\u0133\u0134\u0005?\u0000\u0000\u0134K\u0001\u0000\u0000"+ + "\u0000\u0135\u0136\u0005+\u0000\u0000\u0136M\u0001\u0000\u0000\u0000\u0137"+ + "\u0138\u0005*\u0000\u0000\u0138O\u0001\u0000\u0000\u0000\u0139\u013a\u0005"+ + "/\u0000\u0000\u013aQ\u0001\u0000\u0000\u0000\u013b\u013c\u0005%\u0000"+ + "\u0000\u013cS\u0001\u0000\u0000\u0000\u013d\u013e\u0005t\u0000\u0000\u013e"+ + "\u013f\u0005r\u0000\u0000\u013f\u0140\u0005u\u0000\u0000\u0140\u0141\u0005"+ + "e\u0000\u0000\u0141U\u0001\u0000\u0000\u0000\u0142\u0143\u0005f\u0000"+ + "\u0000\u0143\u0144\u0005a\u0000\u0000\u0144\u0145\u0005l\u0000\u0000\u0145"+ + "\u0146\u0005s\u0000\u0000\u0146\u0147\u0005e\u0000\u0000\u0147W\u0001"+ + "\u0000\u0000\u0000\u0148\u0149\u0005n\u0000\u0000\u0149\u014a\u0005u\u0000"+ + "\u0000\u014a\u014b\u0005l\u0000\u0000\u014b\u014c\u0005l\u0000\u0000\u014c"+ + "Y\u0001\u0000\u0000\u0000\u014d\u014e\u0005\\\u0000\u0000\u014e[\u0001"+ + "\u0000\u0000\u0000\u014f\u0150\u0007\u0000\u0000\u0000\u0150]\u0001\u0000"+ + "\u0000\u0000\u0151\u0152\u000209\u0000\u0152_\u0001\u0000\u0000\u0000"+ + "\u0153\u0155\u0007\u0001\u0000\u0000\u0154\u0156\u0007\u0002\u0000\u0000"+ + "\u0155\u0154\u0001\u0000\u0000\u0000\u0155\u0156\u0001\u0000\u0000\u0000"+ + "\u0156\u0158\u0001\u0000\u0000\u0000\u0157\u0159\u0003^.\u0000\u0158\u0157"+ + "\u0001\u0000\u0000\u0000\u0159\u015a\u0001\u0000\u0000\u0000\u015a\u0158"+ + "\u0001\u0000\u0000\u0000\u015a\u015b\u0001\u0000\u0000\u0000\u015ba\u0001"+ + "\u0000\u0000\u0000\u015c\u015d\u0007\u0003\u0000\u0000\u015dc\u0001\u0000"+ + "\u0000\u0000\u015e\u015f\u0007\u0004\u0000\u0000\u015fe\u0001\u0000\u0000"+ + "\u0000\u0160\u0165\u0003h3\u0000\u0161\u0165\u0003l5\u0000\u0162\u0165"+ + "\u0003n6\u0000\u0163\u0165\u0003j4\u0000\u0164\u0160\u0001\u0000\u0000"+ + "\u0000\u0164\u0161\u0001\u0000\u0000\u0000\u0164\u0162\u0001\u0000\u0000"+ + "\u0000\u0164\u0163\u0001\u0000\u0000\u0000\u0165g\u0001\u0000\u0000\u0000"+ + "\u0166\u0167\u0003Z,\u0000\u0167\u0168\u0007\u0005\u0000\u0000\u0168i"+ + "\u0001\u0000\u0000\u0000\u0169\u016a\u0003Z,\u0000\u016a\u016b\u00020"+ + "3\u0000\u016b\u016c\u000207\u0000\u016c\u016d\u000207\u0000\u016dk\u0001"+ + "\u0000\u0000\u0000\u016e\u016f\u0003Z,\u0000\u016f\u0170\u0007\u0006\u0000"+ + "\u0000\u0170\u0171\u0003b0\u0000\u0171\u0172\u0003b0\u0000\u0172m\u0001"+ + "\u0000\u0000\u0000\u0173\u0174\u0003Z,\u0000\u0174\u0175\u0005u\u0000"+ + "\u0000\u0175\u0176\u0003b0\u0000\u0176\u0177\u0003b0\u0000\u0177\u0178"+ + "\u0003b0\u0000\u0178\u0179\u0003b0\u0000\u0179\u0186\u0001\u0000\u0000"+ + "\u0000\u017a\u017b\u0003Z,\u0000\u017b\u017c\u0005U\u0000\u0000\u017c"+ + "\u017d\u0003b0\u0000\u017d\u017e\u0003b0\u0000\u017e\u017f\u0003b0\u0000"+ + "\u017f\u0180\u0003b0\u0000\u0180\u0181\u0003b0\u0000\u0181\u0182\u0003"+ + "b0\u0000\u0182\u0183\u0003b0\u0000\u0183\u0184\u0003b0\u0000\u0184\u0186"+ + "\u0001\u0000\u0000\u0000\u0185\u0173\u0001\u0000\u0000\u0000\u0185\u017a"+ + "\u0001\u0000\u0000\u0000\u0186o\u0001\u0000\u0000\u0000\u0187\u0189\u0007"+ + "\u0007\u0000\u0000\u0188\u0187\u0001\u0000\u0000\u0000\u0189\u018a\u0001"+ + "\u0000\u0000\u0000\u018a\u0188\u0001\u0000\u0000\u0000\u018a\u018b\u0001"+ + "\u0000\u0000\u0000\u018bq\u0001\u0000\u0000\u0000\u018c\u018d\u0005/\u0000"+ + "\u0000\u018d\u018e\u0005/\u0000\u0000\u018e\u0192\u0001\u0000\u0000\u0000"+ + "\u018f\u0191\b\b\u0000\u0000\u0190\u018f\u0001\u0000\u0000\u0000\u0191"+ + "\u0194\u0001\u0000\u0000\u0000\u0192\u0190\u0001\u0000\u0000\u0000\u0192"+ + "\u0193\u0001\u0000\u0000\u0000\u0193\u0195\u0001\u0000\u0000\u0000\u0194"+ + "\u0192\u0001\u0000\u0000\u0000\u0195\u0196\u00068\u0001\u0000\u0196s\u0001"+ + "\u0000\u0000\u0000\u0197\u0199\u0003^.\u0000\u0198\u0197\u0001\u0000\u0000"+ + "\u0000\u0199\u019a\u0001\u0000\u0000\u0000\u019a\u0198\u0001\u0000\u0000"+ + "\u0000\u019a\u019b\u0001\u0000\u0000\u0000\u019b\u019c\u0001\u0000\u0000"+ + "\u0000\u019c\u019e\u0005.\u0000\u0000\u019d\u019f\u0003^.\u0000\u019e"+ + "\u019d\u0001\u0000\u0000\u0000\u019f\u01a0\u0001\u0000\u0000\u0000\u01a0"+ + "\u019e\u0001\u0000\u0000\u0000\u01a0\u01a1\u0001\u0000\u0000\u0000\u01a1"+ + "\u01a3\u0001\u0000\u0000\u0000\u01a2\u01a4\u0003`/\u0000\u01a3\u01a2\u0001"+ + "\u0000\u0000\u0000\u01a3\u01a4\u0001\u0000\u0000\u0000\u01a4\u01b6\u0001"+ + "\u0000\u0000\u0000\u01a5\u01a7\u0003^.\u0000\u01a6\u01a5\u0001\u0000\u0000"+ + "\u0000\u01a7\u01a8\u0001\u0000\u0000\u0000\u01a8\u01a6\u0001\u0000\u0000"+ + "\u0000\u01a8\u01a9\u0001\u0000\u0000\u0000\u01a9\u01aa\u0001\u0000\u0000"+ + "\u0000\u01aa\u01ab\u0003`/\u0000\u01ab\u01b6\u0001\u0000\u0000\u0000\u01ac"+ + "\u01ae\u0005.\u0000\u0000\u01ad\u01af\u0003^.\u0000\u01ae\u01ad\u0001"+ + "\u0000\u0000\u0000\u01af\u01b0\u0001\u0000\u0000\u0000\u01b0\u01ae\u0001"+ + "\u0000\u0000\u0000\u01b0\u01b1\u0001\u0000\u0000\u0000\u01b1\u01b3\u0001"+ + "\u0000\u0000\u0000\u01b2\u01b4\u0003`/\u0000\u01b3\u01b2\u0001\u0000\u0000"+ + "\u0000\u01b3\u01b4\u0001\u0000\u0000\u0000\u01b4\u01b6\u0001\u0000\u0000"+ + "\u0000\u01b5\u0198\u0001\u0000\u0000\u0000\u01b5\u01a6\u0001\u0000\u0000"+ + "\u0000\u01b5\u01ac\u0001\u0000\u0000\u0000\u01b6u\u0001\u0000\u0000\u0000"+ + "\u01b7\u01b9\u0003^.\u0000\u01b8\u01b7\u0001\u0000\u0000\u0000\u01b9\u01ba"+ + "\u0001\u0000\u0000\u0000\u01ba\u01b8\u0001\u0000\u0000\u0000\u01ba\u01bb"+ + "\u0001\u0000\u0000\u0000\u01bb\u01c5\u0001\u0000\u0000\u0000\u01bc\u01bd"+ + "\u00050\u0000\u0000\u01bd\u01be\u0005x\u0000\u0000\u01be\u01c0\u0001\u0000"+ + "\u0000\u0000\u01bf\u01c1\u0003b0\u0000\u01c0\u01bf\u0001\u0000\u0000\u0000"+ + "\u01c1\u01c2\u0001\u0000\u0000\u0000\u01c2\u01c0\u0001\u0000\u0000\u0000"+ + "\u01c2\u01c3\u0001\u0000\u0000\u0000\u01c3\u01c5\u0001\u0000\u0000\u0000"+ + "\u01c4\u01b8\u0001\u0000\u0000\u0000\u01c4\u01bc\u0001\u0000\u0000\u0000"+ + "\u01c5w\u0001\u0000\u0000\u0000\u01c6\u01c8\u0003^.\u0000\u01c7\u01c6"+ + "\u0001\u0000\u0000\u0000\u01c8\u01c9\u0001\u0000\u0000\u0000\u01c9\u01c7"+ + "\u0001\u0000\u0000\u0000\u01c9\u01ca\u0001\u0000\u0000\u0000\u01ca\u01cb"+ + "\u0001\u0000\u0000\u0000\u01cb\u01cc\u0007\t\u0000\u0000\u01cc\u01d8\u0001"+ + "\u0000\u0000\u0000\u01cd\u01ce\u00050\u0000\u0000\u01ce\u01cf\u0005x\u0000"+ + "\u0000\u01cf\u01d1\u0001\u0000\u0000\u0000\u01d0\u01d2\u0003b0\u0000\u01d1"+ + "\u01d0\u0001\u0000\u0000\u0000\u01d2\u01d3\u0001\u0000\u0000\u0000\u01d3"+ + "\u01d1\u0001\u0000\u0000\u0000\u01d3\u01d4\u0001\u0000\u0000\u0000\u01d4"+ + "\u01d5\u0001\u0000\u0000\u0000\u01d5\u01d6\u0007\t\u0000\u0000\u01d6\u01d8"+ + "\u0001\u0000\u0000\u0000\u01d7\u01c7\u0001\u0000\u0000\u0000\u01d7\u01cd"+ + "\u0001\u0000\u0000\u0000\u01d8y\u0001\u0000\u0000\u0000\u01d9\u01de\u0005"+ + "\"\u0000\u0000\u01da\u01dd\u0003f2\u0000\u01db\u01dd\b\n\u0000\u0000\u01dc"+ + "\u01da\u0001\u0000\u0000\u0000\u01dc\u01db\u0001\u0000\u0000\u0000\u01dd"+ + "\u01e0\u0001\u0000\u0000\u0000\u01de\u01dc\u0001\u0000\u0000\u0000\u01de"+ + "\u01df\u0001\u0000\u0000\u0000\u01df\u01e1\u0001\u0000\u0000\u0000\u01e0"+ + "\u01de\u0001\u0000\u0000\u0000\u01e1\u023a\u0005\"\u0000\u0000\u01e2\u01e7"+ + "\u0005\'\u0000\u0000\u01e3\u01e6\u0003f2\u0000\u01e4\u01e6\b\u000b\u0000"+ + "\u0000\u01e5\u01e3\u0001\u0000\u0000\u0000\u01e5\u01e4\u0001\u0000\u0000"+ + "\u0000\u01e6\u01e9\u0001\u0000\u0000\u0000\u01e7\u01e5\u0001\u0000\u0000"+ + "\u0000\u01e7\u01e8\u0001\u0000\u0000\u0000\u01e8\u01ea\u0001\u0000\u0000"+ + "\u0000\u01e9\u01e7\u0001\u0000\u0000\u0000\u01ea\u023a\u0005\'\u0000\u0000"+ + "\u01eb\u01ec\u0005\"\u0000\u0000\u01ec\u01ed\u0005\"\u0000\u0000\u01ed"+ + "\u01ee\u0005\"\u0000\u0000\u01ee\u01f3\u0001\u0000\u0000\u0000\u01ef\u01f2"+ + "\u0003f2\u0000\u01f0\u01f2\b\f\u0000\u0000\u01f1\u01ef\u0001\u0000\u0000"+ + "\u0000\u01f1\u01f0\u0001\u0000\u0000\u0000\u01f2\u01f5\u0001\u0000\u0000"+ + "\u0000\u01f3\u01f4\u0001\u0000\u0000\u0000\u01f3\u01f1\u0001\u0000\u0000"+ + "\u0000\u01f4\u01f6\u0001\u0000\u0000\u0000\u01f5\u01f3\u0001\u0000\u0000"+ + "\u0000\u01f6\u01f7\u0005\"\u0000\u0000\u01f7\u01f8\u0005\"\u0000\u0000"+ + "\u01f8\u023a\u0005\"\u0000\u0000\u01f9\u01fa\u0005\'\u0000\u0000\u01fa"+ + "\u01fb\u0005\'\u0000\u0000\u01fb\u01fc\u0005\'\u0000\u0000\u01fc\u0201"+ + "\u0001\u0000\u0000\u0000\u01fd\u0200\u0003f2\u0000\u01fe\u0200\b\f\u0000"+ + "\u0000\u01ff\u01fd\u0001\u0000\u0000\u0000\u01ff\u01fe\u0001\u0000\u0000"+ + "\u0000\u0200\u0203\u0001\u0000\u0000\u0000\u0201\u0202\u0001\u0000\u0000"+ + "\u0000\u0201\u01ff\u0001\u0000\u0000\u0000\u0202\u0204\u0001\u0000\u0000"+ + "\u0000\u0203\u0201\u0001\u0000\u0000\u0000\u0204\u0205\u0005\'\u0000\u0000"+ + "\u0205\u0206\u0005\'\u0000\u0000\u0206\u023a\u0005\'\u0000\u0000\u0207"+ + "\u0208\u0003d1\u0000\u0208\u020c\u0005\"\u0000\u0000\u0209\u020b\b\r\u0000"+ + "\u0000\u020a\u0209\u0001\u0000\u0000\u0000\u020b\u020e\u0001\u0000\u0000"+ + "\u0000\u020c\u020a\u0001\u0000\u0000\u0000\u020c\u020d\u0001\u0000\u0000"+ + "\u0000\u020d\u020f\u0001\u0000\u0000\u0000\u020e\u020c\u0001\u0000\u0000"+ + "\u0000\u020f\u0210\u0005\"\u0000\u0000\u0210\u023a\u0001\u0000\u0000\u0000"+ + "\u0211\u0212\u0003d1\u0000\u0212\u0216\u0005\'\u0000\u0000\u0213\u0215"+ + "\b\u000e\u0000\u0000\u0214\u0213\u0001\u0000\u0000\u0000\u0215\u0218\u0001"+ + "\u0000\u0000\u0000\u0216\u0214\u0001\u0000\u0000\u0000\u0216\u0217\u0001"+ + "\u0000\u0000\u0000\u0217\u0219\u0001\u0000\u0000\u0000\u0218\u0216\u0001"+ + "\u0000\u0000\u0000\u0219\u021a\u0005\'\u0000\u0000\u021a\u023a\u0001\u0000"+ + "\u0000\u0000\u021b\u021c\u0003d1\u0000\u021c\u021d\u0005\"\u0000\u0000"+ + "\u021d\u021e\u0005\"\u0000\u0000\u021e\u021f\u0005\"\u0000\u0000\u021f"+ + "\u0223\u0001\u0000\u0000\u0000\u0220\u0222\t\u0000\u0000\u0000\u0221\u0220"+ + "\u0001\u0000\u0000\u0000\u0222\u0225\u0001\u0000\u0000\u0000\u0223\u0224"+ + "\u0001\u0000\u0000\u0000\u0223\u0221\u0001\u0000\u0000\u0000\u0224\u0226"+ + "\u0001\u0000\u0000\u0000\u0225\u0223\u0001\u0000\u0000\u0000\u0226\u0227"+ + "\u0005\"\u0000\u0000\u0227\u0228\u0005\"\u0000\u0000\u0228\u0229\u0005"+ + "\"\u0000\u0000\u0229\u023a\u0001\u0000\u0000\u0000\u022a\u022b\u0003d"+ + "1\u0000\u022b\u022c\u0005\'\u0000\u0000\u022c\u022d\u0005\'\u0000\u0000"+ + "\u022d\u022e\u0005\'\u0000\u0000\u022e\u0232\u0001\u0000\u0000\u0000\u022f"+ + "\u0231\t\u0000\u0000\u0000\u0230\u022f\u0001\u0000\u0000\u0000\u0231\u0234"+ + "\u0001\u0000\u0000\u0000\u0232\u0233\u0001\u0000\u0000\u0000\u0232\u0230"+ + "\u0001\u0000\u0000\u0000\u0233\u0235\u0001\u0000\u0000\u0000\u0234\u0232"+ + "\u0001\u0000\u0000\u0000\u0235\u0236\u0005\'\u0000\u0000\u0236\u0237\u0005"+ + "\'\u0000\u0000\u0237\u0238\u0005\'\u0000\u0000\u0238\u023a\u0001\u0000"+ + "\u0000\u0000\u0239\u01d9\u0001\u0000\u0000\u0000\u0239\u01e2\u0001\u0000"+ + "\u0000\u0000\u0239\u01eb\u0001\u0000\u0000\u0000\u0239\u01f9\u0001\u0000"+ + "\u0000\u0000\u0239\u0207\u0001\u0000\u0000\u0000\u0239\u0211\u0001\u0000"+ + "\u0000\u0000\u0239\u021b\u0001\u0000\u0000\u0000\u0239\u022a\u0001\u0000"+ + "\u0000\u0000\u023a{\u0001\u0000\u0000\u0000\u023b\u023c\u0007\u000f\u0000"+ + "\u0000\u023c\u023d\u0003z<\u0000\u023d}\u0001\u0000\u0000\u0000\u023e"+ + "\u0241\u0003\\-\u0000\u023f\u0241\u0005_\u0000\u0000\u0240\u023e\u0001"+ + "\u0000\u0000\u0000\u0240\u023f\u0001\u0000\u0000\u0000\u0241\u0248\u0001"+ + "\u0000\u0000\u0000\u0242\u0247\u0003\\-\u0000\u0243\u0247\u0003^.\u0000"+ + "\u0244\u0247\u0005_\u0000\u0000\u0245\u0247\u0003F\"\u0000\u0246\u0242"+ + "\u0001\u0000\u0000\u0000\u0246\u0243\u0001\u0000\u0000\u0000\u0246\u0244"+ + "\u0001\u0000\u0000\u0000\u0246\u0245\u0001\u0000\u0000\u0000\u0247\u024a"+ + "\u0001\u0000\u0000\u0000\u0248\u0246\u0001\u0000\u0000\u0000\u0248\u0249"+ + "\u0001\u0000\u0000\u0000\u0249\u007f\u0001\u0000\u0000\u0000\u024a\u0248"+ + "\u0001\u0000\u0000\u0000\u024b\u024e\u0003\\-\u0000\u024c\u024e\u0005"+ + "_\u0000\u0000\u024d\u024b\u0001\u0000\u0000\u0000\u024d\u024c\u0001\u0000"+ + "\u0000\u0000\u024e\u025d\u0001\u0000\u0000\u0000\u024f\u0253\u0003P\'"+ + "\u0000\u0250\u0253\u0003D!\u0000\u0251\u0253\u0003F\"\u0000\u0252\u024f"+ + "\u0001\u0000\u0000\u0000\u0252\u0250\u0001\u0000\u0000\u0000\u0252\u0251"+ + "\u0001\u0000\u0000\u0000\u0252\u0253\u0001\u0000\u0000\u0000\u0253\u0257"+ + "\u0001\u0000\u0000\u0000\u0254\u0258\u0003\\-\u0000\u0255\u0258\u0003"+ + "^.\u0000\u0256\u0258\u0005_\u0000\u0000\u0257\u0254\u0001\u0000\u0000"+ + "\u0000\u0257\u0255\u0001\u0000\u0000\u0000\u0257\u0256\u0001\u0000\u0000"+ + "\u0000\u0258\u0259\u0001\u0000\u0000\u0000\u0259\u0257\u0001\u0000\u0000"+ + "\u0000\u0259\u025a\u0001\u0000\u0000\u0000\u025a\u025c\u0001\u0000\u0000"+ + "\u0000\u025b\u0252\u0001\u0000\u0000\u0000\u025c\u025f\u0001\u0000\u0000"+ + "\u0000\u025d\u025b\u0001\u0000\u0000\u0000\u025d\u025e\u0001\u0000\u0000"+ + "\u0000\u025e\u0081\u0001\u0000\u0000\u0000\u025f\u025d\u0001\u0000\u0000"+ + "\u0000\u0260\u0262\u0003p7\u0000\u0261\u0260\u0001\u0000\u0000\u0000\u0261"+ + "\u0262\u0001\u0000\u0000\u0000\u0262\u0268\u0001\u0000\u0000\u0000\u0263"+ + "\u0265\u0005\r\u0000\u0000\u0264\u0263\u0001\u0000\u0000\u0000\u0264\u0265"+ + "\u0001\u0000\u0000\u0000\u0265\u0266\u0001\u0000\u0000\u0000\u0266\u0269"+ + "\u0005\n\u0000\u0000\u0267\u0269\u0002\f\r\u0000\u0268\u0264\u0001\u0000"+ + "\u0000\u0000\u0268\u0267\u0001\u0000\u0000\u0000\u0269\u026b\u0001\u0000"+ + "\u0000\u0000\u026a\u026c\u0003p7\u0000\u026b\u026a\u0001\u0000\u0000\u0000"+ + "\u026b\u026c\u0001\u0000\u0000\u0000\u026c\u026e\u0001\u0000\u0000\u0000"+ + "\u026d\u026f\u0003\u0082@\u0000\u026e\u026d\u0001\u0000\u0000\u0000\u026e"+ + "\u026f\u0001\u0000\u0000\u0000\u026f\u0083\u0001\u0000\u0000\u0000\u0270"+ + "\u0271\u0003B \u0000\u0271\u0272\u0001\u0000\u0000\u0000\u0272\u0273\u0006"+ + "A\u0002\u0000\u0273\u0274\u0006A\u0003\u0000\u0274\u0085\u0001\u0000\u0000"+ + "\u0000\u0275\u0276\u0005m\u0000\u0000\u0276\u0277\u0005a\u0000\u0000\u0277"+ + "\u027d\u0005p\u0000\u0000\u0278\u0279\u0005l\u0000\u0000\u0279\u027a\u0005"+ + "i\u0000\u0000\u027a\u027b\u0005s\u0000\u0000\u027b\u027d\u0005t\u0000"+ + "\u0000\u027c\u0275\u0001\u0000\u0000\u0000\u027c\u0278\u0001\u0000\u0000"+ + "\u0000\u027d\u0087\u0001\u0000\u0000\u0000\u027e\u027f\u0005b\u0000\u0000"+ + "\u027f\u0280\u0005o\u0000\u0000\u0280\u0281\u0005o\u0000\u0000\u0281\u02b0"+ + "\u0005l\u0000\u0000\u0282\u0283\u0005s\u0000\u0000\u0283\u0284\u0005t"+ + "\u0000\u0000\u0284\u0285\u0005r\u0000\u0000\u0285\u0286\u0005i\u0000\u0000"+ + "\u0286\u0287\u0005n\u0000\u0000\u0287\u02b0\u0005g\u0000\u0000\u0288\u0289"+ + "\u0005i\u0000\u0000\u0289\u028a\u0005n\u0000\u0000\u028a\u02b0\u0005t"+ + "\u0000\u0000\u028b\u028c\u0005u\u0000\u0000\u028c\u028d\u0005i\u0000\u0000"+ + "\u028d\u028e\u0005n\u0000\u0000\u028e\u02b0\u0005t\u0000\u0000\u028f\u0290"+ + "\u0005d\u0000\u0000\u0290\u0291\u0005o\u0000\u0000\u0291\u0292\u0005u"+ + "\u0000\u0000\u0292\u0293\u0005b\u0000\u0000\u0293\u0294\u0005l\u0000\u0000"+ + "\u0294\u02b0\u0005e\u0000\u0000\u0295\u0296\u0005d\u0000\u0000\u0296\u0297"+ + "\u0005u\u0000\u0000\u0297\u0298\u0005r\u0000\u0000\u0298\u0299\u0005a"+ + "\u0000\u0000\u0299\u029a\u0005t\u0000\u0000\u029a\u029b\u0005i\u0000\u0000"+ + "\u029b\u029c\u0005o\u0000\u0000\u029c\u02b0\u0005n\u0000\u0000\u029d\u029e"+ + "\u0005t\u0000\u0000\u029e\u029f\u0005i\u0000\u0000\u029f\u02a0\u0005m"+ + "\u0000\u0000\u02a0\u02a1\u0005e\u0000\u0000\u02a1\u02a2\u0005s\u0000\u0000"+ + "\u02a2\u02a3\u0005t\u0000\u0000\u02a3\u02a4\u0005a\u0000\u0000\u02a4\u02a5"+ + "\u0005m\u0000\u0000\u02a5\u02b0\u0005p\u0000\u0000\u02a6\u02a7\u0005i"+ + "\u0000\u0000\u02a7\u02a8\u0005p\u0000\u0000\u02a8\u02a9\u0005a\u0000\u0000"+ + "\u02a9\u02aa\u0005d\u0000\u0000\u02aa\u02ab\u0005d\u0000\u0000\u02ab\u02ac"+ + "\u0005r\u0000\u0000\u02ac\u02ad\u0005e\u0000\u0000\u02ad\u02ae\u0005s"+ + "\u0000\u0000\u02ae\u02b0\u0005s\u0000\u0000\u02af\u027e\u0001\u0000\u0000"+ + "\u0000\u02af\u0282\u0001\u0000\u0000\u0000\u02af\u0288\u0001\u0000\u0000"+ + "\u0000\u02af\u028b\u0001\u0000\u0000\u0000\u02af\u028f\u0001\u0000\u0000"+ + "\u0000\u02af\u0295\u0001\u0000\u0000\u0000\u02af\u029d\u0001\u0000\u0000"+ + "\u0000\u02af\u02a6\u0001\u0000\u0000\u0000\u02b0\u0089\u0001\u0000\u0000"+ + "\u0000\u02b1\u02b2\u0003,\u0015\u0000\u02b2\u02b3\u0001\u0000\u0000\u0000"+ + "\u02b3\u02b4\u0006D\u0004\u0000\u02b4\u008b\u0001\u0000\u0000\u0000\u02b5"+ + "\u02b6\u00032\u0018\u0000\u02b6\u02b7\u0001\u0000\u0000\u0000\u02b7\u02b8"+ + "\u0006E\u0005\u0000\u02b8\u008d\u0001\u0000\u0000\u0000\u02b9\u02ba\u0003"+ + "@\u001f\u0000\u02ba\u02bb\u0001\u0000\u0000\u0000\u02bb\u02bc\u0006F\u0006"+ + "\u0000\u02bc\u008f\u0001\u0000\u0000\u0000\u02bd\u02be\u0003\u0004\u0001"+ + "\u0000\u02be\u02bf\u0001\u0000\u0000\u0000\u02bf\u02c0\u0006G\u0007\u0000"+ + "\u02c0\u0091\u0001\u0000\u0000\u0000\u02c1\u02c2\u0003\u0006\u0002\u0000"+ + "\u02c2\u02c3\u0001\u0000\u0000\u0000\u02c3\u02c4\u0006H\b\u0000\u02c4"+ + "\u0093\u0001\u0000\u0000\u0000\u02c5\u02c6\u0003p7\u0000\u02c6\u02c7\u0001"+ + "\u0000\u0000\u0000\u02c7\u02c8\u0006I\t\u0000\u02c8\u0095\u0001\u0000"+ + "\u0000\u0000\u02c9\u02ca\u0003~>\u0000\u02ca\u02cb\u0001\u0000\u0000\u0000"+ + "\u02cb\u02cc\u0006J\n\u0000\u02cc\u0097\u0001\u0000\u0000\u00003\u0000"+ + "\u0001\u00c9\u00cf\u0155\u015a\u0164\u0185\u018a\u0192\u019a\u01a0\u01a3"+ + "\u01a8\u01b0\u01b3\u01b5\u01ba\u01c2\u01c4\u01c9\u01d3\u01d7\u01dc\u01de"+ + "\u01e5\u01e7\u01f1\u01f3\u01ff\u0201\u020c\u0216\u0223\u0232\u0239\u0240"+ + "\u0246\u0248\u024d\u0252\u0257\u0259\u025d\u0261\u0264\u0268\u026b\u026e"+ + "\u027c\u02af\u000b\u0005\u0001\u0000\u0000\u0001\u0000\u0007\b\u0000\u0004"+ + "\u0000\u0000\u0007\u0003\u0000\u0007\u0004\u0000\u0007\u0007\u0000\u0007"+ + "\u0001\u0000\u0007\u0002\u0000\u0007\t\u0000\u0007\n\u0000"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGALexer.tokens b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGALexer.tokens index 273e2f7c..512cec30 100644 --- a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGALexer.tokens +++ b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGALexer.tokens @@ -51,9 +51,10 @@ NUM_INT=50 NUM_UINT=51 STRING=52 BYTES=53 -NEWLINE=54 -CONDITION_PARAM_CONTAINER=55 -CONDITION_PARAM_TYPE=56 +EXTENDED_IDENTIFIER=54 +NEWLINE=55 +CONDITION_PARAM_CONTAINER=56 +CONDITION_PARAM_TYPE=57 '#'=11 ':'=1 ','=2 diff --git a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParser.interp b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParser.interp index 2e582364..56431d97 100644 --- a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParser.interp +++ b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParser.interp @@ -56,6 +56,7 @@ null null null null +null token symbolic names: null @@ -112,6 +113,7 @@ NUM_INT NUM_UINT STRING BYTES +EXTENDED_IDENTIFIER NEWLINE CONDITION_PARAM_CONTAINER CONDITION_PARAM_TYPE @@ -142,8 +144,9 @@ parameterName parameterType multiLineComment identifier +extended_identifier conditionExpression atn: -[4, 1, 56, 386, 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, 1, 0, 3, 0, 54, 8, 0, 1, 0, 3, 0, 57, 8, 0, 1, 0, 1, 0, 3, 0, 61, 8, 0, 1, 0, 3, 0, 64, 8, 0, 1, 0, 1, 0, 3, 0, 68, 8, 0, 1, 0, 1, 0, 3, 0, 72, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 79, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 87, 8, 1, 1, 2, 1, 2, 1, 2, 3, 2, 92, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 98, 8, 2, 1, 3, 5, 3, 101, 8, 3, 10, 3, 12, 3, 104, 9, 3, 1, 4, 1, 4, 3, 4, 108, 8, 4, 1, 4, 1, 4, 1, 4, 3, 4, 113, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 4, 121, 8, 4, 11, 4, 12, 4, 122, 3, 4, 125, 8, 4, 1, 5, 1, 5, 3, 5, 129, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 136, 8, 5, 1, 5, 1, 5, 3, 5, 140, 8, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 3, 7, 149, 8, 7, 1, 7, 3, 7, 152, 8, 7, 1, 8, 1, 8, 3, 8, 156, 8, 8, 1, 8, 3, 8, 159, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 166, 8, 9, 4, 9, 168, 8, 9, 11, 9, 12, 9, 169, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 177, 8, 9, 4, 9, 179, 8, 9, 11, 9, 12, 9, 180, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 188, 8, 9, 3, 9, 190, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, 5, 11, 196, 8, 11, 10, 11, 12, 11, 199, 9, 11, 1, 11, 1, 11, 3, 11, 203, 8, 11, 1, 11, 5, 11, 206, 8, 11, 10, 11, 12, 11, 209, 9, 11, 1, 11, 1, 11, 1, 12, 1, 12, 5, 12, 215, 8, 12, 10, 12, 12, 12, 218, 9, 12, 1, 12, 1, 12, 3, 12, 222, 8, 12, 1, 12, 5, 12, 225, 8, 12, 10, 12, 12, 12, 228, 9, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 234, 8, 13, 1, 13, 1, 13, 3, 13, 238, 8, 13, 1, 13, 1, 13, 3, 13, 242, 8, 13, 1, 13, 1, 13, 3, 13, 246, 8, 13, 5, 13, 248, 8, 13, 10, 13, 12, 13, 251, 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 260, 8, 14, 1, 15, 3, 15, 263, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 272, 8, 15, 1, 15, 3, 15, 275, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 282, 8, 16, 1, 17, 5, 17, 285, 8, 17, 10, 17, 12, 17, 288, 9, 17, 1, 18, 1, 18, 3, 18, 292, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 299, 8, 18, 1, 18, 1, 18, 3, 18, 303, 8, 18, 1, 18, 1, 18, 3, 18, 307, 8, 18, 1, 18, 1, 18, 3, 18, 311, 8, 18, 1, 18, 1, 18, 3, 18, 315, 8, 18, 5, 18, 317, 8, 18, 10, 18, 12, 18, 320, 9, 18, 1, 18, 3, 18, 323, 8, 18, 1, 18, 1, 18, 3, 18, 327, 8, 18, 1, 18, 1, 18, 3, 18, 331, 8, 18, 1, 18, 3, 18, 334, 8, 18, 1, 18, 1, 18, 3, 18, 338, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 3, 20, 345, 8, 20, 1, 20, 1, 20, 3, 20, 349, 8, 20, 1, 20, 1, 20, 3, 20, 353, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 364, 8, 22, 1, 23, 1, 23, 5, 23, 368, 8, 23, 10, 23, 12, 23, 371, 9, 23, 1, 23, 1, 23, 3, 23, 375, 8, 23, 1, 24, 1, 24, 1, 25, 1, 25, 5, 25, 381, 8, 25, 10, 25, 12, 25, 384, 9, 25, 1, 25, 0, 0, 26, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 0, 4, 1, 0, 54, 54, 4, 0, 10, 10, 16, 18, 20, 21, 24, 24, 4, 0, 3, 5, 7, 10, 27, 35, 37, 54, 1, 0, 36, 36, 427, 0, 53, 1, 0, 0, 0, 2, 78, 1, 0, 0, 0, 4, 91, 1, 0, 0, 0, 6, 102, 1, 0, 0, 0, 8, 107, 1, 0, 0, 0, 10, 128, 1, 0, 0, 0, 12, 143, 1, 0, 0, 0, 14, 148, 1, 0, 0, 0, 16, 155, 1, 0, 0, 0, 18, 189, 1, 0, 0, 0, 20, 191, 1, 0, 0, 0, 22, 193, 1, 0, 0, 0, 24, 212, 1, 0, 0, 0, 26, 231, 1, 0, 0, 0, 28, 254, 1, 0, 0, 0, 30, 262, 1, 0, 0, 0, 32, 276, 1, 0, 0, 0, 34, 286, 1, 0, 0, 0, 36, 291, 1, 0, 0, 0, 38, 341, 1, 0, 0, 0, 40, 344, 1, 0, 0, 0, 42, 356, 1, 0, 0, 0, 44, 363, 1, 0, 0, 0, 46, 365, 1, 0, 0, 0, 48, 376, 1, 0, 0, 0, 50, 382, 1, 0, 0, 0, 52, 54, 5, 9, 0, 0, 53, 52, 1, 0, 0, 0, 53, 54, 1, 0, 0, 0, 54, 56, 1, 0, 0, 0, 55, 57, 5, 54, 0, 0, 56, 55, 1, 0, 0, 0, 56, 57, 1, 0, 0, 0, 57, 60, 1, 0, 0, 0, 58, 61, 3, 2, 1, 0, 59, 61, 3, 4, 2, 0, 60, 58, 1, 0, 0, 0, 60, 59, 1, 0, 0, 0, 61, 63, 1, 0, 0, 0, 62, 64, 5, 54, 0, 0, 63, 62, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 65, 1, 0, 0, 0, 65, 67, 3, 6, 3, 0, 66, 68, 5, 54, 0, 0, 67, 66, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 71, 3, 34, 17, 0, 70, 72, 5, 54, 0, 0, 71, 70, 1, 0, 0, 0, 71, 72, 1, 0, 0, 0, 72, 73, 1, 0, 0, 0, 73, 74, 5, 0, 0, 1, 74, 1, 1, 0, 0, 0, 75, 76, 3, 46, 23, 0, 76, 77, 5, 54, 0, 0, 77, 79, 1, 0, 0, 0, 78, 75, 1, 0, 0, 0, 78, 79, 1, 0, 0, 0, 79, 80, 1, 0, 0, 0, 80, 81, 5, 17, 0, 0, 81, 82, 5, 54, 0, 0, 82, 83, 5, 18, 0, 0, 83, 84, 5, 9, 0, 0, 84, 86, 5, 19, 0, 0, 85, 87, 5, 9, 0, 0, 86, 85, 1, 0, 0, 0, 86, 87, 1, 0, 0, 0, 87, 3, 1, 0, 0, 0, 88, 89, 3, 46, 23, 0, 89, 90, 5, 54, 0, 0, 90, 92, 1, 0, 0, 0, 91, 88, 1, 0, 0, 0, 91, 92, 1, 0, 0, 0, 92, 93, 1, 0, 0, 0, 93, 94, 5, 16, 0, 0, 94, 95, 5, 9, 0, 0, 95, 97, 3, 48, 24, 0, 96, 98, 5, 9, 0, 0, 97, 96, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 5, 1, 0, 0, 0, 99, 101, 3, 8, 4, 0, 100, 99, 1, 0, 0, 0, 101, 104, 1, 0, 0, 0, 102, 100, 1, 0, 0, 0, 102, 103, 1, 0, 0, 0, 103, 7, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 105, 106, 5, 54, 0, 0, 106, 108, 3, 46, 23, 0, 107, 105, 1, 0, 0, 0, 107, 108, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 112, 5, 54, 0, 0, 110, 111, 5, 20, 0, 0, 111, 113, 5, 9, 0, 0, 112, 110, 1, 0, 0, 0, 112, 113, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 115, 5, 21, 0, 0, 115, 116, 5, 9, 0, 0, 116, 124, 3, 48, 24, 0, 117, 118, 5, 54, 0, 0, 118, 120, 5, 23, 0, 0, 119, 121, 3, 10, 5, 0, 120, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 120, 1, 0, 0, 0, 122, 123, 1, 0, 0, 0, 123, 125, 1, 0, 0, 0, 124, 117, 1, 0, 0, 0, 124, 125, 1, 0, 0, 0, 125, 9, 1, 0, 0, 0, 126, 127, 5, 54, 0, 0, 127, 129, 3, 46, 23, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 130, 1, 0, 0, 0, 130, 131, 5, 54, 0, 0, 131, 132, 5, 25, 0, 0, 132, 133, 5, 9, 0, 0, 133, 135, 3, 12, 6, 0, 134, 136, 5, 9, 0, 0, 135, 134, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 139, 5, 1, 0, 0, 138, 140, 5, 9, 0, 0, 139, 138, 1, 0, 0, 0, 139, 140, 1, 0, 0, 0, 140, 141, 1, 0, 0, 0, 141, 142, 3, 14, 7, 0, 142, 11, 1, 0, 0, 0, 143, 144, 3, 48, 24, 0, 144, 13, 1, 0, 0, 0, 145, 149, 3, 26, 13, 0, 146, 149, 3, 20, 10, 0, 147, 149, 3, 22, 11, 0, 148, 145, 1, 0, 0, 0, 148, 146, 1, 0, 0, 0, 148, 147, 1, 0, 0, 0, 149, 151, 1, 0, 0, 0, 150, 152, 3, 18, 9, 0, 151, 150, 1, 0, 0, 0, 151, 152, 1, 0, 0, 0, 152, 15, 1, 0, 0, 0, 153, 156, 3, 20, 10, 0, 154, 156, 3, 24, 12, 0, 155, 153, 1, 0, 0, 0, 155, 154, 1, 0, 0, 0, 156, 158, 1, 0, 0, 0, 157, 159, 3, 18, 9, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 17, 1, 0, 0, 0, 160, 161, 5, 9, 0, 0, 161, 162, 5, 13, 0, 0, 162, 165, 5, 9, 0, 0, 163, 166, 3, 20, 10, 0, 164, 166, 3, 24, 12, 0, 165, 163, 1, 0, 0, 0, 165, 164, 1, 0, 0, 0, 166, 168, 1, 0, 0, 0, 167, 160, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 190, 1, 0, 0, 0, 171, 172, 5, 9, 0, 0, 172, 173, 5, 12, 0, 0, 173, 176, 5, 9, 0, 0, 174, 177, 3, 20, 10, 0, 175, 177, 3, 24, 12, 0, 176, 174, 1, 0, 0, 0, 176, 175, 1, 0, 0, 0, 177, 179, 1, 0, 0, 0, 178, 171, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 190, 1, 0, 0, 0, 182, 183, 5, 9, 0, 0, 183, 184, 5, 14, 0, 0, 184, 187, 5, 9, 0, 0, 185, 188, 3, 20, 10, 0, 186, 188, 3, 24, 12, 0, 187, 185, 1, 0, 0, 0, 187, 186, 1, 0, 0, 0, 188, 190, 1, 0, 0, 0, 189, 167, 1, 0, 0, 0, 189, 178, 1, 0, 0, 0, 189, 182, 1, 0, 0, 0, 190, 19, 1, 0, 0, 0, 191, 192, 3, 28, 14, 0, 192, 21, 1, 0, 0, 0, 193, 197, 5, 7, 0, 0, 194, 196, 5, 9, 0, 0, 195, 194, 1, 0, 0, 0, 196, 199, 1, 0, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 202, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 200, 203, 3, 14, 7, 0, 201, 203, 3, 24, 12, 0, 202, 200, 1, 0, 0, 0, 202, 201, 1, 0, 0, 0, 203, 207, 1, 0, 0, 0, 204, 206, 5, 9, 0, 0, 205, 204, 1, 0, 0, 0, 206, 209, 1, 0, 0, 0, 207, 205, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 210, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 210, 211, 5, 8, 0, 0, 211, 23, 1, 0, 0, 0, 212, 216, 5, 7, 0, 0, 213, 215, 5, 9, 0, 0, 214, 213, 1, 0, 0, 0, 215, 218, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 221, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 219, 222, 3, 16, 8, 0, 220, 222, 3, 24, 12, 0, 221, 219, 1, 0, 0, 0, 221, 220, 1, 0, 0, 0, 222, 226, 1, 0, 0, 0, 223, 225, 5, 9, 0, 0, 224, 223, 1, 0, 0, 0, 225, 228, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 229, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 229, 230, 5, 8, 0, 0, 230, 25, 1, 0, 0, 0, 231, 233, 5, 5, 0, 0, 232, 234, 5, 9, 0, 0, 233, 232, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 3, 30, 15, 0, 236, 238, 5, 9, 0, 0, 237, 236, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 249, 1, 0, 0, 0, 239, 241, 5, 2, 0, 0, 240, 242, 5, 9, 0, 0, 241, 240, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 245, 3, 30, 15, 0, 244, 246, 5, 9, 0, 0, 245, 244, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 248, 1, 0, 0, 0, 247, 239, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 252, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 253, 5, 34, 0, 0, 253, 27, 1, 0, 0, 0, 254, 259, 3, 48, 24, 0, 255, 256, 5, 9, 0, 0, 256, 257, 5, 15, 0, 0, 257, 258, 5, 9, 0, 0, 258, 260, 3, 48, 24, 0, 259, 255, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 29, 1, 0, 0, 0, 261, 263, 5, 54, 0, 0, 262, 261, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 271, 1, 0, 0, 0, 264, 272, 3, 32, 16, 0, 265, 266, 3, 32, 16, 0, 266, 267, 5, 9, 0, 0, 267, 268, 5, 26, 0, 0, 268, 269, 5, 9, 0, 0, 269, 270, 3, 38, 19, 0, 270, 272, 1, 0, 0, 0, 271, 264, 1, 0, 0, 0, 271, 265, 1, 0, 0, 0, 272, 274, 1, 0, 0, 0, 273, 275, 5, 54, 0, 0, 274, 273, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 31, 1, 0, 0, 0, 276, 281, 3, 48, 24, 0, 277, 278, 5, 1, 0, 0, 278, 282, 5, 42, 0, 0, 279, 280, 5, 11, 0, 0, 280, 282, 3, 48, 24, 0, 281, 277, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 33, 1, 0, 0, 0, 283, 285, 3, 36, 18, 0, 284, 283, 1, 0, 0, 0, 285, 288, 1, 0, 0, 0, 286, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 35, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 289, 290, 5, 54, 0, 0, 290, 292, 3, 46, 23, 0, 291, 289, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 294, 5, 54, 0, 0, 294, 295, 5, 22, 0, 0, 295, 296, 5, 9, 0, 0, 296, 298, 3, 38, 19, 0, 297, 299, 5, 9, 0, 0, 298, 297, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 302, 5, 7, 0, 0, 301, 303, 5, 9, 0, 0, 302, 301, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 306, 3, 40, 20, 0, 305, 307, 5, 9, 0, 0, 306, 305, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 318, 1, 0, 0, 0, 308, 310, 5, 2, 0, 0, 309, 311, 5, 9, 0, 0, 310, 309, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 314, 3, 40, 20, 0, 313, 315, 5, 9, 0, 0, 314, 313, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 317, 1, 0, 0, 0, 316, 308, 1, 0, 0, 0, 317, 320, 1, 0, 0, 0, 318, 316, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 321, 323, 5, 54, 0, 0, 322, 321, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 326, 5, 8, 0, 0, 325, 327, 5, 9, 0, 0, 326, 325, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 330, 5, 35, 0, 0, 329, 331, 5, 54, 0, 0, 330, 329, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 334, 5, 9, 0, 0, 333, 332, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 337, 3, 50, 25, 0, 336, 338, 5, 54, 0, 0, 337, 336, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 340, 5, 36, 0, 0, 340, 37, 1, 0, 0, 0, 341, 342, 5, 10, 0, 0, 342, 39, 1, 0, 0, 0, 343, 345, 5, 54, 0, 0, 344, 343, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 3, 42, 21, 0, 347, 349, 5, 9, 0, 0, 348, 347, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 352, 5, 1, 0, 0, 351, 353, 5, 9, 0, 0, 352, 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 355, 3, 44, 22, 0, 355, 41, 1, 0, 0, 0, 356, 357, 5, 10, 0, 0, 357, 43, 1, 0, 0, 0, 358, 364, 5, 56, 0, 0, 359, 360, 5, 55, 0, 0, 360, 361, 5, 3, 0, 0, 361, 362, 5, 56, 0, 0, 362, 364, 5, 4, 0, 0, 363, 358, 1, 0, 0, 0, 363, 359, 1, 0, 0, 0, 364, 45, 1, 0, 0, 0, 365, 369, 5, 11, 0, 0, 366, 368, 8, 0, 0, 0, 367, 366, 1, 0, 0, 0, 368, 371, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 374, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 372, 373, 5, 54, 0, 0, 373, 375, 3, 46, 23, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 47, 1, 0, 0, 0, 376, 377, 7, 1, 0, 0, 377, 49, 1, 0, 0, 0, 378, 381, 7, 2, 0, 0, 379, 381, 8, 3, 0, 0, 380, 378, 1, 0, 0, 0, 380, 379, 1, 0, 0, 0, 381, 384, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 51, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 65, 53, 56, 60, 63, 67, 71, 78, 86, 91, 97, 102, 107, 112, 122, 124, 128, 135, 139, 148, 151, 155, 158, 165, 169, 176, 180, 187, 189, 197, 202, 207, 216, 221, 226, 233, 237, 241, 245, 249, 259, 262, 271, 274, 281, 286, 291, 298, 302, 306, 310, 314, 318, 322, 326, 330, 333, 337, 344, 348, 352, 363, 369, 374, 380, 382] \ No newline at end of file +[4, 1, 57, 392, 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, 1, 0, 3, 0, 56, 8, 0, 1, 0, 3, 0, 59, 8, 0, 1, 0, 1, 0, 3, 0, 63, 8, 0, 1, 0, 3, 0, 66, 8, 0, 1, 0, 1, 0, 3, 0, 70, 8, 0, 1, 0, 1, 0, 3, 0, 74, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 81, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 89, 8, 1, 1, 2, 1, 2, 1, 2, 3, 2, 94, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 100, 8, 2, 1, 3, 5, 3, 103, 8, 3, 10, 3, 12, 3, 106, 9, 3, 1, 4, 1, 4, 3, 4, 110, 8, 4, 1, 4, 1, 4, 1, 4, 3, 4, 115, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 4, 123, 8, 4, 11, 4, 12, 4, 124, 3, 4, 127, 8, 4, 1, 5, 1, 5, 3, 5, 131, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 138, 8, 5, 1, 5, 1, 5, 3, 5, 142, 8, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 3, 7, 151, 8, 7, 1, 7, 3, 7, 154, 8, 7, 1, 8, 1, 8, 3, 8, 158, 8, 8, 1, 8, 3, 8, 161, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 168, 8, 9, 4, 9, 170, 8, 9, 11, 9, 12, 9, 171, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 179, 8, 9, 4, 9, 181, 8, 9, 11, 9, 12, 9, 182, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 190, 8, 9, 3, 9, 192, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, 5, 11, 198, 8, 11, 10, 11, 12, 11, 201, 9, 11, 1, 11, 1, 11, 3, 11, 205, 8, 11, 1, 11, 5, 11, 208, 8, 11, 10, 11, 12, 11, 211, 9, 11, 1, 11, 1, 11, 1, 12, 1, 12, 5, 12, 217, 8, 12, 10, 12, 12, 12, 220, 9, 12, 1, 12, 1, 12, 3, 12, 224, 8, 12, 1, 12, 5, 12, 227, 8, 12, 10, 12, 12, 12, 230, 9, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 236, 8, 13, 1, 13, 1, 13, 3, 13, 240, 8, 13, 1, 13, 1, 13, 3, 13, 244, 8, 13, 1, 13, 1, 13, 3, 13, 248, 8, 13, 5, 13, 250, 8, 13, 10, 13, 12, 13, 253, 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 262, 8, 14, 1, 15, 3, 15, 265, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 274, 8, 15, 1, 15, 3, 15, 277, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 284, 8, 16, 1, 17, 5, 17, 287, 8, 17, 10, 17, 12, 17, 290, 9, 17, 1, 18, 1, 18, 3, 18, 294, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 301, 8, 18, 1, 18, 1, 18, 3, 18, 305, 8, 18, 1, 18, 1, 18, 3, 18, 309, 8, 18, 1, 18, 1, 18, 3, 18, 313, 8, 18, 1, 18, 1, 18, 3, 18, 317, 8, 18, 5, 18, 319, 8, 18, 10, 18, 12, 18, 322, 9, 18, 1, 18, 3, 18, 325, 8, 18, 1, 18, 1, 18, 3, 18, 329, 8, 18, 1, 18, 1, 18, 3, 18, 333, 8, 18, 1, 18, 3, 18, 336, 8, 18, 1, 18, 1, 18, 3, 18, 340, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 3, 20, 347, 8, 20, 1, 20, 1, 20, 3, 20, 351, 8, 20, 1, 20, 1, 20, 3, 20, 355, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 366, 8, 22, 1, 23, 1, 23, 5, 23, 370, 8, 23, 10, 23, 12, 23, 373, 9, 23, 1, 23, 1, 23, 3, 23, 377, 8, 23, 1, 24, 1, 24, 1, 25, 1, 25, 3, 25, 383, 8, 25, 1, 26, 1, 26, 5, 26, 387, 8, 26, 10, 26, 12, 26, 390, 9, 26, 1, 26, 0, 0, 27, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 0, 4, 1, 0, 55, 55, 4, 0, 10, 10, 16, 18, 20, 21, 24, 24, 5, 0, 3, 5, 7, 10, 27, 35, 37, 53, 55, 55, 1, 0, 36, 36, 433, 0, 55, 1, 0, 0, 0, 2, 80, 1, 0, 0, 0, 4, 93, 1, 0, 0, 0, 6, 104, 1, 0, 0, 0, 8, 109, 1, 0, 0, 0, 10, 130, 1, 0, 0, 0, 12, 145, 1, 0, 0, 0, 14, 150, 1, 0, 0, 0, 16, 157, 1, 0, 0, 0, 18, 191, 1, 0, 0, 0, 20, 193, 1, 0, 0, 0, 22, 195, 1, 0, 0, 0, 24, 214, 1, 0, 0, 0, 26, 233, 1, 0, 0, 0, 28, 256, 1, 0, 0, 0, 30, 264, 1, 0, 0, 0, 32, 278, 1, 0, 0, 0, 34, 288, 1, 0, 0, 0, 36, 293, 1, 0, 0, 0, 38, 343, 1, 0, 0, 0, 40, 346, 1, 0, 0, 0, 42, 358, 1, 0, 0, 0, 44, 365, 1, 0, 0, 0, 46, 367, 1, 0, 0, 0, 48, 378, 1, 0, 0, 0, 50, 382, 1, 0, 0, 0, 52, 388, 1, 0, 0, 0, 54, 56, 5, 9, 0, 0, 55, 54, 1, 0, 0, 0, 55, 56, 1, 0, 0, 0, 56, 58, 1, 0, 0, 0, 57, 59, 5, 55, 0, 0, 58, 57, 1, 0, 0, 0, 58, 59, 1, 0, 0, 0, 59, 62, 1, 0, 0, 0, 60, 63, 3, 2, 1, 0, 61, 63, 3, 4, 2, 0, 62, 60, 1, 0, 0, 0, 62, 61, 1, 0, 0, 0, 63, 65, 1, 0, 0, 0, 64, 66, 5, 55, 0, 0, 65, 64, 1, 0, 0, 0, 65, 66, 1, 0, 0, 0, 66, 67, 1, 0, 0, 0, 67, 69, 3, 6, 3, 0, 68, 70, 5, 55, 0, 0, 69, 68, 1, 0, 0, 0, 69, 70, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 73, 3, 34, 17, 0, 72, 74, 5, 55, 0, 0, 73, 72, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 76, 5, 0, 0, 1, 76, 1, 1, 0, 0, 0, 77, 78, 3, 46, 23, 0, 78, 79, 5, 55, 0, 0, 79, 81, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 80, 81, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 83, 5, 17, 0, 0, 83, 84, 5, 55, 0, 0, 84, 85, 5, 18, 0, 0, 85, 86, 5, 9, 0, 0, 86, 88, 5, 19, 0, 0, 87, 89, 5, 9, 0, 0, 88, 87, 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 3, 1, 0, 0, 0, 90, 91, 3, 46, 23, 0, 91, 92, 5, 55, 0, 0, 92, 94, 1, 0, 0, 0, 93, 90, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 96, 5, 16, 0, 0, 96, 97, 5, 9, 0, 0, 97, 99, 3, 48, 24, 0, 98, 100, 5, 9, 0, 0, 99, 98, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 5, 1, 0, 0, 0, 101, 103, 3, 8, 4, 0, 102, 101, 1, 0, 0, 0, 103, 106, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 7, 1, 0, 0, 0, 106, 104, 1, 0, 0, 0, 107, 108, 5, 55, 0, 0, 108, 110, 3, 46, 23, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 114, 5, 55, 0, 0, 112, 113, 5, 20, 0, 0, 113, 115, 5, 9, 0, 0, 114, 112, 1, 0, 0, 0, 114, 115, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 117, 5, 21, 0, 0, 117, 118, 5, 9, 0, 0, 118, 126, 3, 50, 25, 0, 119, 120, 5, 55, 0, 0, 120, 122, 5, 23, 0, 0, 121, 123, 3, 10, 5, 0, 122, 121, 1, 0, 0, 0, 123, 124, 1, 0, 0, 0, 124, 122, 1, 0, 0, 0, 124, 125, 1, 0, 0, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, 9, 1, 0, 0, 0, 128, 129, 5, 55, 0, 0, 129, 131, 3, 46, 23, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 133, 5, 55, 0, 0, 133, 134, 5, 25, 0, 0, 134, 135, 5, 9, 0, 0, 135, 137, 3, 12, 6, 0, 136, 138, 5, 9, 0, 0, 137, 136, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 139, 1, 0, 0, 0, 139, 141, 5, 1, 0, 0, 140, 142, 5, 9, 0, 0, 141, 140, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 144, 3, 14, 7, 0, 144, 11, 1, 0, 0, 0, 145, 146, 3, 50, 25, 0, 146, 13, 1, 0, 0, 0, 147, 151, 3, 26, 13, 0, 148, 151, 3, 20, 10, 0, 149, 151, 3, 22, 11, 0, 150, 147, 1, 0, 0, 0, 150, 148, 1, 0, 0, 0, 150, 149, 1, 0, 0, 0, 151, 153, 1, 0, 0, 0, 152, 154, 3, 18, 9, 0, 153, 152, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 15, 1, 0, 0, 0, 155, 158, 3, 20, 10, 0, 156, 158, 3, 24, 12, 0, 157, 155, 1, 0, 0, 0, 157, 156, 1, 0, 0, 0, 158, 160, 1, 0, 0, 0, 159, 161, 3, 18, 9, 0, 160, 159, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 17, 1, 0, 0, 0, 162, 163, 5, 9, 0, 0, 163, 164, 5, 13, 0, 0, 164, 167, 5, 9, 0, 0, 165, 168, 3, 20, 10, 0, 166, 168, 3, 24, 12, 0, 167, 165, 1, 0, 0, 0, 167, 166, 1, 0, 0, 0, 168, 170, 1, 0, 0, 0, 169, 162, 1, 0, 0, 0, 170, 171, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, 192, 1, 0, 0, 0, 173, 174, 5, 9, 0, 0, 174, 175, 5, 12, 0, 0, 175, 178, 5, 9, 0, 0, 176, 179, 3, 20, 10, 0, 177, 179, 3, 24, 12, 0, 178, 176, 1, 0, 0, 0, 178, 177, 1, 0, 0, 0, 179, 181, 1, 0, 0, 0, 180, 173, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 192, 1, 0, 0, 0, 184, 185, 5, 9, 0, 0, 185, 186, 5, 14, 0, 0, 186, 189, 5, 9, 0, 0, 187, 190, 3, 20, 10, 0, 188, 190, 3, 24, 12, 0, 189, 187, 1, 0, 0, 0, 189, 188, 1, 0, 0, 0, 190, 192, 1, 0, 0, 0, 191, 169, 1, 0, 0, 0, 191, 180, 1, 0, 0, 0, 191, 184, 1, 0, 0, 0, 192, 19, 1, 0, 0, 0, 193, 194, 3, 28, 14, 0, 194, 21, 1, 0, 0, 0, 195, 199, 5, 7, 0, 0, 196, 198, 5, 9, 0, 0, 197, 196, 1, 0, 0, 0, 198, 201, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 204, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 202, 205, 3, 14, 7, 0, 203, 205, 3, 24, 12, 0, 204, 202, 1, 0, 0, 0, 204, 203, 1, 0, 0, 0, 205, 209, 1, 0, 0, 0, 206, 208, 5, 9, 0, 0, 207, 206, 1, 0, 0, 0, 208, 211, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 212, 1, 0, 0, 0, 211, 209, 1, 0, 0, 0, 212, 213, 5, 8, 0, 0, 213, 23, 1, 0, 0, 0, 214, 218, 5, 7, 0, 0, 215, 217, 5, 9, 0, 0, 216, 215, 1, 0, 0, 0, 217, 220, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 223, 1, 0, 0, 0, 220, 218, 1, 0, 0, 0, 221, 224, 3, 16, 8, 0, 222, 224, 3, 24, 12, 0, 223, 221, 1, 0, 0, 0, 223, 222, 1, 0, 0, 0, 224, 228, 1, 0, 0, 0, 225, 227, 5, 9, 0, 0, 226, 225, 1, 0, 0, 0, 227, 230, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 231, 1, 0, 0, 0, 230, 228, 1, 0, 0, 0, 231, 232, 5, 8, 0, 0, 232, 25, 1, 0, 0, 0, 233, 235, 5, 5, 0, 0, 234, 236, 5, 9, 0, 0, 235, 234, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 239, 3, 30, 15, 0, 238, 240, 5, 9, 0, 0, 239, 238, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 251, 1, 0, 0, 0, 241, 243, 5, 2, 0, 0, 242, 244, 5, 9, 0, 0, 243, 242, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 247, 3, 30, 15, 0, 246, 248, 5, 9, 0, 0, 247, 246, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 250, 1, 0, 0, 0, 249, 241, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 254, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 254, 255, 5, 34, 0, 0, 255, 27, 1, 0, 0, 0, 256, 261, 3, 50, 25, 0, 257, 258, 5, 9, 0, 0, 258, 259, 5, 15, 0, 0, 259, 260, 5, 9, 0, 0, 260, 262, 3, 50, 25, 0, 261, 257, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 29, 1, 0, 0, 0, 263, 265, 5, 55, 0, 0, 264, 263, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 273, 1, 0, 0, 0, 266, 274, 3, 32, 16, 0, 267, 268, 3, 32, 16, 0, 268, 269, 5, 9, 0, 0, 269, 270, 5, 26, 0, 0, 270, 271, 5, 9, 0, 0, 271, 272, 3, 38, 19, 0, 272, 274, 1, 0, 0, 0, 273, 266, 1, 0, 0, 0, 273, 267, 1, 0, 0, 0, 274, 276, 1, 0, 0, 0, 275, 277, 5, 55, 0, 0, 276, 275, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 31, 1, 0, 0, 0, 278, 283, 3, 50, 25, 0, 279, 280, 5, 1, 0, 0, 280, 284, 5, 42, 0, 0, 281, 282, 5, 11, 0, 0, 282, 284, 3, 50, 25, 0, 283, 279, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 33, 1, 0, 0, 0, 285, 287, 3, 36, 18, 0, 286, 285, 1, 0, 0, 0, 287, 290, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 35, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 291, 292, 5, 55, 0, 0, 292, 294, 3, 46, 23, 0, 293, 291, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 5, 55, 0, 0, 296, 297, 5, 22, 0, 0, 297, 298, 5, 9, 0, 0, 298, 300, 3, 38, 19, 0, 299, 301, 5, 9, 0, 0, 300, 299, 1, 0, 0, 0, 300, 301, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 304, 5, 7, 0, 0, 303, 305, 5, 9, 0, 0, 304, 303, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 308, 3, 40, 20, 0, 307, 309, 5, 9, 0, 0, 308, 307, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 320, 1, 0, 0, 0, 310, 312, 5, 2, 0, 0, 311, 313, 5, 9, 0, 0, 312, 311, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 316, 3, 40, 20, 0, 315, 317, 5, 9, 0, 0, 316, 315, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 319, 1, 0, 0, 0, 318, 310, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 324, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 323, 325, 5, 55, 0, 0, 324, 323, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 328, 5, 8, 0, 0, 327, 329, 5, 9, 0, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 330, 1, 0, 0, 0, 330, 332, 5, 35, 0, 0, 331, 333, 5, 55, 0, 0, 332, 331, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 335, 1, 0, 0, 0, 334, 336, 5, 9, 0, 0, 335, 334, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 339, 3, 52, 26, 0, 338, 340, 5, 55, 0, 0, 339, 338, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 342, 5, 36, 0, 0, 342, 37, 1, 0, 0, 0, 343, 344, 5, 10, 0, 0, 344, 39, 1, 0, 0, 0, 345, 347, 5, 55, 0, 0, 346, 345, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 348, 1, 0, 0, 0, 348, 350, 3, 42, 21, 0, 349, 351, 5, 9, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 5, 1, 0, 0, 353, 355, 5, 9, 0, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 357, 3, 44, 22, 0, 357, 41, 1, 0, 0, 0, 358, 359, 5, 10, 0, 0, 359, 43, 1, 0, 0, 0, 360, 366, 5, 57, 0, 0, 361, 362, 5, 56, 0, 0, 362, 363, 5, 3, 0, 0, 363, 364, 5, 57, 0, 0, 364, 366, 5, 4, 0, 0, 365, 360, 1, 0, 0, 0, 365, 361, 1, 0, 0, 0, 366, 45, 1, 0, 0, 0, 367, 371, 5, 11, 0, 0, 368, 370, 8, 0, 0, 0, 369, 368, 1, 0, 0, 0, 370, 373, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 371, 372, 1, 0, 0, 0, 372, 376, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 375, 5, 55, 0, 0, 375, 377, 3, 46, 23, 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 47, 1, 0, 0, 0, 378, 379, 7, 1, 0, 0, 379, 49, 1, 0, 0, 0, 380, 383, 3, 48, 24, 0, 381, 383, 5, 54, 0, 0, 382, 380, 1, 0, 0, 0, 382, 381, 1, 0, 0, 0, 383, 51, 1, 0, 0, 0, 384, 387, 7, 2, 0, 0, 385, 387, 8, 3, 0, 0, 386, 384, 1, 0, 0, 0, 386, 385, 1, 0, 0, 0, 387, 390, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 53, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 66, 55, 58, 62, 65, 69, 73, 80, 88, 93, 99, 104, 109, 114, 124, 126, 130, 137, 141, 150, 153, 157, 160, 167, 171, 178, 182, 189, 191, 199, 204, 209, 218, 223, 228, 235, 239, 243, 247, 251, 261, 264, 273, 276, 283, 288, 293, 300, 304, 308, 312, 316, 320, 324, 328, 332, 335, 339, 346, 350, 354, 365, 371, 376, 382, 386, 388] \ No newline at end of file diff --git a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParser.java b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParser.java index 23475c6d..4f6586f4 100644 --- a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParser.java +++ b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParser.java @@ -25,7 +25,8 @@ public class OpenFGAParser extends Parser { LOGICAL_OR=33, RPRACKET=34, LBRACE=35, RBRACE=36, DOT=37, MINUS=38, EXCLAM=39, QUESTIONMARK=40, PLUS=41, STAR=42, SLASH=43, PERCENT=44, CEL_TRUE=45, CEL_FALSE=46, NUL=47, CEL_COMMENT=48, NUM_FLOAT=49, NUM_INT=50, NUM_UINT=51, - STRING=52, BYTES=53, NEWLINE=54, CONDITION_PARAM_CONTAINER=55, CONDITION_PARAM_TYPE=56; + STRING=52, BYTES=53, EXTENDED_IDENTIFIER=54, NEWLINE=55, CONDITION_PARAM_CONTAINER=56, + CONDITION_PARAM_TYPE=57; public static final int RULE_main = 0, RULE_modelHeader = 1, RULE_moduleHeader = 2, RULE_typeDefs = 3, RULE_typeDef = 4, RULE_relationDeclaration = 5, RULE_relationName = 6, @@ -35,7 +36,7 @@ public class OpenFGAParser extends Parser { RULE_relationDefTypeRestrictionBase = 16, RULE_conditions = 17, RULE_condition = 18, RULE_conditionName = 19, RULE_conditionParameter = 20, RULE_parameterName = 21, RULE_parameterType = 22, RULE_multiLineComment = 23, RULE_identifier = 24, - RULE_conditionExpression = 25; + RULE_extended_identifier = 25, RULE_conditionExpression = 26; private static String[] makeRuleNames() { return new String[] { "main", "modelHeader", "moduleHeader", "typeDefs", "typeDef", "relationDeclaration", @@ -44,7 +45,7 @@ private static String[] makeRuleNames() { "relationDefDirectAssignment", "relationDefRewrite", "relationDefTypeRestriction", "relationDefTypeRestrictionBase", "conditions", "condition", "conditionName", "conditionParameter", "parameterName", "parameterType", "multiLineComment", - "identifier", "conditionExpression" + "identifier", "extended_identifier", "conditionExpression" }; } public static final String[] ruleNames = makeRuleNames(); @@ -69,8 +70,8 @@ private static String[] makeSymbolicNames() { "NOT_EQUALS", "IN", "LESS_EQUALS", "GREATER_EQUALS", "LOGICAL_AND", "LOGICAL_OR", "RPRACKET", "LBRACE", "RBRACE", "DOT", "MINUS", "EXCLAM", "QUESTIONMARK", "PLUS", "STAR", "SLASH", "PERCENT", "CEL_TRUE", "CEL_FALSE", "NUL", "CEL_COMMENT", - "NUM_FLOAT", "NUM_INT", "NUM_UINT", "STRING", "BYTES", "NEWLINE", "CONDITION_PARAM_CONTAINER", - "CONDITION_PARAM_TYPE" + "NUM_FLOAT", "NUM_INT", "NUM_UINT", "STRING", "BYTES", "EXTENDED_IDENTIFIER", + "NEWLINE", "CONDITION_PARAM_CONTAINER", "CONDITION_PARAM_TYPE" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -165,77 +166,77 @@ public final MainContext main() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(53); + setState(55); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(52); + setState(54); match(WHITESPACE); } } - setState(56); + setState(58); _errHandler.sync(this); _la = _input.LA(1); if (_la==NEWLINE) { { - setState(55); + setState(57); match(NEWLINE); } } - setState(60); + setState(62); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) { case 1: { - setState(58); + setState(60); modelHeader(); } break; case 2: { - setState(59); + setState(61); moduleHeader(); } break; } - setState(63); + setState(65); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) { case 1: { - setState(62); + setState(64); match(NEWLINE); } break; } - setState(65); - typeDefs(); setState(67); + typeDefs(); + setState(69); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) { case 1: { - setState(66); + setState(68); match(NEWLINE); } break; } - setState(69); - conditions(); setState(71); + conditions(); + setState(73); _errHandler.sync(this); _la = _input.LA(1); if (_la==NEWLINE) { { - setState(70); + setState(72); match(NEWLINE); } } - setState(73); + setState(75); match(EOF); } } @@ -288,34 +289,34 @@ public final ModelHeaderContext modelHeader() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(78); + setState(80); _errHandler.sync(this); _la = _input.LA(1); if (_la==HASH) { { - setState(75); + setState(77); multiLineComment(); - setState(76); + setState(78); match(NEWLINE); } } - setState(80); + setState(82); match(MODEL); - setState(81); + setState(83); match(NEWLINE); - setState(82); + setState(84); match(SCHEMA); - setState(83); + setState(85); match(WHITESPACE); - setState(84); - ((ModelHeaderContext)_localctx).schemaVersion = match(SCHEMA_VERSION); setState(86); + ((ModelHeaderContext)_localctx).schemaVersion = match(SCHEMA_VERSION); + setState(88); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(85); + setState(87); match(WHITESPACE); } } @@ -369,30 +370,30 @@ public final ModuleHeaderContext moduleHeader() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(91); + setState(93); _errHandler.sync(this); _la = _input.LA(1); if (_la==HASH) { { - setState(88); + setState(90); multiLineComment(); - setState(89); + setState(91); match(NEWLINE); } } - setState(93); + setState(95); match(MODULE); - setState(94); + setState(96); match(WHITESPACE); - setState(95); - ((ModuleHeaderContext)_localctx).moduleName = identifier(); setState(97); + ((ModuleHeaderContext)_localctx).moduleName = identifier(); + setState(99); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(96); + setState(98); match(WHITESPACE); } } @@ -439,19 +440,19 @@ public final TypeDefsContext typeDefs() throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(102); + setState(104); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,10,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(99); + setState(101); typeDef(); } } } - setState(104); + setState(106); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,10,_ctx); } @@ -470,7 +471,7 @@ public final TypeDefsContext typeDefs() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class TypeDefContext extends ParserRuleContext { - public IdentifierContext typeName; + public Extended_identifierContext typeName; public List NEWLINE() { return getTokens(OpenFGAParser.NEWLINE); } public TerminalNode NEWLINE(int i) { return getToken(OpenFGAParser.NEWLINE, i); @@ -480,8 +481,8 @@ public TerminalNode NEWLINE(int i) { public TerminalNode WHITESPACE(int i) { return getToken(OpenFGAParser.WHITESPACE, i); } - public IdentifierContext identifier() { - return getRuleContext(IdentifierContext.class,0); + public Extended_identifierContext extended_identifier() { + return getRuleContext(Extended_identifierContext.class,0); } public MultiLineCommentContext multiLineComment() { return getRuleContext(MultiLineCommentContext.class,0); @@ -516,48 +517,48 @@ public final TypeDefContext typeDef() throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(107); + setState(109); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { case 1: { - setState(105); + setState(107); match(NEWLINE); - setState(106); + setState(108); multiLineComment(); } break; } - setState(109); + setState(111); match(NEWLINE); - setState(112); + setState(114); _errHandler.sync(this); _la = _input.LA(1); if (_la==EXTEND) { { - setState(110); + setState(112); match(EXTEND); - setState(111); + setState(113); match(WHITESPACE); } } - setState(114); + setState(116); match(TYPE); - setState(115); + setState(117); match(WHITESPACE); - setState(116); - ((TypeDefContext)_localctx).typeName = identifier(); - setState(124); + setState(118); + ((TypeDefContext)_localctx).typeName = extended_identifier(); + setState(126); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { case 1: { - setState(117); + setState(119); match(NEWLINE); - setState(118); + setState(120); match(RELATIONS); - setState(120); + setState(122); _errHandler.sync(this); _alt = 1; do { @@ -565,7 +566,7 @@ public final TypeDefContext typeDef() throws RecognitionException { case 1: { { - setState(119); + setState(121); relationDeclaration(); } } @@ -573,7 +574,7 @@ public final TypeDefContext typeDef() throws RecognitionException { default: throw new NoViableAltException(this); } - setState(122); + setState(124); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,13,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); @@ -635,50 +636,50 @@ public final RelationDeclarationContext relationDeclaration() throws Recognition try { enterOuterAlt(_localctx, 1); { - setState(128); + setState(130); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { case 1: { - setState(126); + setState(128); match(NEWLINE); - setState(127); + setState(129); multiLineComment(); } break; } - setState(130); + setState(132); match(NEWLINE); - setState(131); + setState(133); match(DEFINE); - setState(132); + setState(134); match(WHITESPACE); - setState(133); - relationName(); setState(135); + relationName(); + setState(137); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(134); + setState(136); match(WHITESPACE); } } - setState(137); - match(COLON); setState(139); + match(COLON); + setState(141); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(138); + setState(140); match(WHITESPACE); } } { - setState(141); + setState(143); relationDef(); } } @@ -696,8 +697,8 @@ public final RelationDeclarationContext relationDeclaration() throws Recognition @SuppressWarnings("CheckReturnValue") public static class RelationNameContext extends ParserRuleContext { - public IdentifierContext identifier() { - return getRuleContext(IdentifierContext.class,0); + public Extended_identifierContext extended_identifier() { + return getRuleContext(Extended_identifierContext.class,0); } public RelationNameContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); @@ -719,8 +720,8 @@ public final RelationNameContext relationName() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(143); - identifier(); + setState(145); + extended_identifier(); } } catch (RecognitionException re) { @@ -768,12 +769,12 @@ public final RelationDefContext relationDef() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(148); + setState(150); _errHandler.sync(this); switch (_input.LA(1)) { case LBRACKET: { - setState(145); + setState(147); relationDefDirectAssignment(); } break; @@ -784,26 +785,27 @@ public final RelationDefContext relationDef() throws RecognitionException { case EXTEND: case TYPE: case RELATION: + case EXTENDED_IDENTIFIER: { - setState(146); + setState(148); relationDefGrouping(); } break; case LPAREN: { - setState(147); + setState(149); relationRecurse(); } break; default: throw new NoViableAltException(this); } - setState(151); + setState(153); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) { case 1: { - setState(150); + setState(152); relationDefPartials(); } break; @@ -852,7 +854,7 @@ public final RelationDefNoDirectContext relationDefNoDirect() throws Recognition try { enterOuterAlt(_localctx, 1); { - setState(155); + setState(157); _errHandler.sync(this); switch (_input.LA(1)) { case IDENTIFIER: @@ -862,26 +864,27 @@ public final RelationDefNoDirectContext relationDefNoDirect() throws Recognition case EXTEND: case TYPE: case RELATION: + case EXTENDED_IDENTIFIER: { - setState(153); + setState(155); relationDefGrouping(); } break; case LPAREN: { - setState(154); + setState(156); relationRecurseNoDirect(); } break; default: throw new NoViableAltException(this); } - setState(158); + setState(160); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,21,_ctx) ) { case 1: { - setState(157); + setState(159); relationDefPartials(); } break; @@ -945,13 +948,13 @@ public final RelationDefPartialsContext relationDefPartials() throws Recognition enterRule(_localctx, 18, RULE_relationDefPartials); try { int _alt; - setState(189); + setState(191); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(167); + setState(169); _errHandler.sync(this); _alt = 1; do { @@ -959,13 +962,13 @@ public final RelationDefPartialsContext relationDefPartials() throws Recognition case 1: { { - setState(160); + setState(162); match(WHITESPACE); - setState(161); + setState(163); match(OR); - setState(162); + setState(164); match(WHITESPACE); - setState(165); + setState(167); _errHandler.sync(this); switch (_input.LA(1)) { case IDENTIFIER: @@ -975,14 +978,15 @@ public final RelationDefPartialsContext relationDefPartials() throws Recognition case EXTEND: case TYPE: case RELATION: + case EXTENDED_IDENTIFIER: { - setState(163); + setState(165); relationDefGrouping(); } break; case LPAREN: { - setState(164); + setState(166); relationRecurseNoDirect(); } break; @@ -995,7 +999,7 @@ public final RelationDefPartialsContext relationDefPartials() throws Recognition default: throw new NoViableAltException(this); } - setState(169); + setState(171); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,23,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); @@ -1004,7 +1008,7 @@ public final RelationDefPartialsContext relationDefPartials() throws Recognition case 2: enterOuterAlt(_localctx, 2); { - setState(178); + setState(180); _errHandler.sync(this); _alt = 1; do { @@ -1012,13 +1016,13 @@ public final RelationDefPartialsContext relationDefPartials() throws Recognition case 1: { { - setState(171); + setState(173); match(WHITESPACE); - setState(172); + setState(174); match(AND); - setState(173); + setState(175); match(WHITESPACE); - setState(176); + setState(178); _errHandler.sync(this); switch (_input.LA(1)) { case IDENTIFIER: @@ -1028,14 +1032,15 @@ public final RelationDefPartialsContext relationDefPartials() throws Recognition case EXTEND: case TYPE: case RELATION: + case EXTENDED_IDENTIFIER: { - setState(174); + setState(176); relationDefGrouping(); } break; case LPAREN: { - setState(175); + setState(177); relationRecurseNoDirect(); } break; @@ -1048,7 +1053,7 @@ public final RelationDefPartialsContext relationDefPartials() throws Recognition default: throw new NoViableAltException(this); } - setState(180); + setState(182); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,25,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); @@ -1058,13 +1063,13 @@ public final RelationDefPartialsContext relationDefPartials() throws Recognition enterOuterAlt(_localctx, 3); { { - setState(182); + setState(184); match(WHITESPACE); - setState(183); + setState(185); match(BUT_NOT); - setState(184); + setState(186); match(WHITESPACE); - setState(187); + setState(189); _errHandler.sync(this); switch (_input.LA(1)) { case IDENTIFIER: @@ -1074,14 +1079,15 @@ public final RelationDefPartialsContext relationDefPartials() throws Recognition case EXTEND: case TYPE: case RELATION: + case EXTENDED_IDENTIFIER: { - setState(185); + setState(187); relationDefGrouping(); } break; case LPAREN: { - setState(186); + setState(188); relationRecurseNoDirect(); } break; @@ -1129,7 +1135,7 @@ public final RelationDefGroupingContext relationDefGrouping() throws Recognition try { enterOuterAlt(_localctx, 1); { - setState(191); + setState(193); relationDefRewrite(); } } @@ -1179,53 +1185,53 @@ public final RelationRecurseContext relationRecurse() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(193); + setState(195); match(LPAREN); - setState(197); + setState(199); _errHandler.sync(this); _la = _input.LA(1); while (_la==WHITESPACE) { { { - setState(194); + setState(196); match(WHITESPACE); } } - setState(199); + setState(201); _errHandler.sync(this); _la = _input.LA(1); } - setState(202); + setState(204); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) { case 1: { - setState(200); + setState(202); relationDef(); } break; case 2: { - setState(201); + setState(203); relationRecurseNoDirect(); } break; } - setState(207); + setState(209); _errHandler.sync(this); _la = _input.LA(1); while (_la==WHITESPACE) { { { - setState(204); + setState(206); match(WHITESPACE); } } - setState(209); + setState(211); _errHandler.sync(this); _la = _input.LA(1); } - setState(210); + setState(212); match(RPAREN); } } @@ -1275,53 +1281,53 @@ public final RelationRecurseNoDirectContext relationRecurseNoDirect() throws Rec try { enterOuterAlt(_localctx, 1); { - setState(212); + setState(214); match(LPAREN); - setState(216); + setState(218); _errHandler.sync(this); _la = _input.LA(1); while (_la==WHITESPACE) { { { - setState(213); + setState(215); match(WHITESPACE); } } - setState(218); + setState(220); _errHandler.sync(this); _la = _input.LA(1); } - setState(221); + setState(223); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,32,_ctx) ) { case 1: { - setState(219); + setState(221); relationDefNoDirect(); } break; case 2: { - setState(220); + setState(222); relationRecurseNoDirect(); } break; } - setState(226); + setState(228); _errHandler.sync(this); _la = _input.LA(1); while (_la==WHITESPACE) { { { - setState(223); + setState(225); match(WHITESPACE); } } - setState(228); + setState(230); _errHandler.sync(this); _la = _input.LA(1); } - setState(229); + setState(231); match(RPAREN); } } @@ -1375,67 +1381,67 @@ public final RelationDefDirectAssignmentContext relationDefDirectAssignment() th try { enterOuterAlt(_localctx, 1); { - setState(231); - match(LBRACKET); setState(233); + match(LBRACKET); + setState(235); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(232); + setState(234); match(WHITESPACE); } } - setState(235); - relationDefTypeRestriction(); setState(237); + relationDefTypeRestriction(); + setState(239); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(236); + setState(238); match(WHITESPACE); } } - setState(249); + setState(251); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(239); - match(COMMA); setState(241); + match(COMMA); + setState(243); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(240); + setState(242); match(WHITESPACE); } } - setState(243); - relationDefTypeRestriction(); setState(245); + relationDefTypeRestriction(); + setState(247); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(244); + setState(246); match(WHITESPACE); } } } } - setState(251); + setState(253); _errHandler.sync(this); _la = _input.LA(1); } - setState(252); + setState(254); match(RPRACKET); } } @@ -1452,13 +1458,13 @@ public final RelationDefDirectAssignmentContext relationDefDirectAssignment() th @SuppressWarnings("CheckReturnValue") public static class RelationDefRewriteContext extends ParserRuleContext { - public IdentifierContext rewriteComputedusersetName; - public IdentifierContext rewriteTuplesetName; - public List identifier() { - return getRuleContexts(IdentifierContext.class); + public Extended_identifierContext rewriteComputedusersetName; + public Extended_identifierContext rewriteTuplesetName; + public List extended_identifier() { + return getRuleContexts(Extended_identifierContext.class); } - public IdentifierContext identifier(int i) { - return getRuleContext(IdentifierContext.class,i); + public Extended_identifierContext extended_identifier(int i) { + return getRuleContext(Extended_identifierContext.class,i); } public List WHITESPACE() { return getTokens(OpenFGAParser.WHITESPACE); } public TerminalNode WHITESPACE(int i) { @@ -1485,21 +1491,21 @@ public final RelationDefRewriteContext relationDefRewrite() throws RecognitionEx try { enterOuterAlt(_localctx, 1); { - setState(254); - ((RelationDefRewriteContext)_localctx).rewriteComputedusersetName = identifier(); - setState(259); + setState(256); + ((RelationDefRewriteContext)_localctx).rewriteComputedusersetName = extended_identifier(); + setState(261); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { case 1: { - setState(255); - match(WHITESPACE); - setState(256); - match(FROM); setState(257); match(WHITESPACE); setState(258); - ((RelationDefRewriteContext)_localctx).rewriteTuplesetName = identifier(); + match(FROM); + setState(259); + match(WHITESPACE); + setState(260); + ((RelationDefRewriteContext)_localctx).rewriteTuplesetName = extended_identifier(); } break; } @@ -1554,48 +1560,48 @@ public final RelationDefTypeRestrictionContext relationDefTypeRestriction() thro try { enterOuterAlt(_localctx, 1); { - setState(262); + setState(264); _errHandler.sync(this); _la = _input.LA(1); if (_la==NEWLINE) { { - setState(261); + setState(263); match(NEWLINE); } } - setState(271); + setState(273); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,41,_ctx) ) { case 1: { - setState(264); + setState(266); relationDefTypeRestrictionBase(); } break; case 2: { { - setState(265); - relationDefTypeRestrictionBase(); - setState(266); - match(WHITESPACE); setState(267); - match(KEYWORD_WITH); + relationDefTypeRestrictionBase(); setState(268); match(WHITESPACE); setState(269); + match(KEYWORD_WITH); + setState(270); + match(WHITESPACE); + setState(271); conditionName(); } } break; } - setState(274); + setState(276); _errHandler.sync(this); _la = _input.LA(1); if (_la==NEWLINE) { { - setState(273); + setState(275); match(NEWLINE); } } @@ -1615,14 +1621,14 @@ public final RelationDefTypeRestrictionContext relationDefTypeRestriction() thro @SuppressWarnings("CheckReturnValue") public static class RelationDefTypeRestrictionBaseContext extends ParserRuleContext { - public IdentifierContext relationDefTypeRestrictionType; + public Extended_identifierContext relationDefTypeRestrictionType; public Token relationDefTypeRestrictionWildcard; - public IdentifierContext relationDefTypeRestrictionRelation; - public List identifier() { - return getRuleContexts(IdentifierContext.class); + public Extended_identifierContext relationDefTypeRestrictionRelation; + public List extended_identifier() { + return getRuleContexts(Extended_identifierContext.class); } - public IdentifierContext identifier(int i) { - return getRuleContext(IdentifierContext.class,i); + public Extended_identifierContext extended_identifier(int i) { + return getRuleContext(Extended_identifierContext.class,i); } public TerminalNode COLON() { return getToken(OpenFGAParser.COLON, 0); } public TerminalNode HASH() { return getToken(OpenFGAParser.HASH, 0); } @@ -1647,17 +1653,17 @@ public final RelationDefTypeRestrictionBaseContext relationDefTypeRestrictionBas try { enterOuterAlt(_localctx, 1); { - setState(276); - ((RelationDefTypeRestrictionBaseContext)_localctx).relationDefTypeRestrictionType = identifier(); - setState(281); + setState(278); + ((RelationDefTypeRestrictionBaseContext)_localctx).relationDefTypeRestrictionType = extended_identifier(); + setState(283); _errHandler.sync(this); switch (_input.LA(1)) { case COLON: { { - setState(277); + setState(279); match(COLON); - setState(278); + setState(280); ((RelationDefTypeRestrictionBaseContext)_localctx).relationDefTypeRestrictionWildcard = match(STAR); } } @@ -1665,10 +1671,10 @@ public final RelationDefTypeRestrictionBaseContext relationDefTypeRestrictionBas case HASH: { { - setState(279); + setState(281); match(HASH); - setState(280); - ((RelationDefTypeRestrictionBaseContext)_localctx).relationDefTypeRestrictionRelation = identifier(); + setState(282); + ((RelationDefTypeRestrictionBaseContext)_localctx).relationDefTypeRestrictionRelation = extended_identifier(); } } break; @@ -1722,19 +1728,19 @@ public final ConditionsContext conditions() throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(286); + setState(288); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,44,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(283); + setState(285); condition(); } } } - setState(288); + setState(290); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,44,_ctx); } @@ -1806,153 +1812,153 @@ public final ConditionContext condition() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(291); + setState(293); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) { case 1: { - setState(289); + setState(291); match(NEWLINE); - setState(290); + setState(292); multiLineComment(); } break; } - setState(293); + setState(295); match(NEWLINE); - setState(294); + setState(296); match(CONDITION); - setState(295); + setState(297); match(WHITESPACE); - setState(296); - conditionName(); setState(298); + conditionName(); + setState(300); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(297); + setState(299); match(WHITESPACE); } } - setState(300); - match(LPAREN); setState(302); + match(LPAREN); + setState(304); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(301); + setState(303); match(WHITESPACE); } } - setState(304); - conditionParameter(); setState(306); + conditionParameter(); + setState(308); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(305); + setState(307); match(WHITESPACE); } } - setState(318); + setState(320); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(308); - match(COMMA); setState(310); + match(COMMA); + setState(312); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(309); + setState(311); match(WHITESPACE); } } - setState(312); - conditionParameter(); setState(314); + conditionParameter(); + setState(316); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(313); + setState(315); match(WHITESPACE); } } } } - setState(320); + setState(322); _errHandler.sync(this); _la = _input.LA(1); } - setState(322); + setState(324); _errHandler.sync(this); _la = _input.LA(1); if (_la==NEWLINE) { { - setState(321); + setState(323); match(NEWLINE); } } - setState(324); - match(RPAREN); setState(326); + match(RPAREN); + setState(328); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(325); + setState(327); match(WHITESPACE); } } - setState(328); - match(LBRACE); setState(330); + match(LBRACE); + setState(332); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { case 1: { - setState(329); + setState(331); match(NEWLINE); } break; } - setState(333); + setState(335); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,55,_ctx) ) { case 1: { - setState(332); + setState(334); match(WHITESPACE); } break; } - setState(335); - conditionExpression(); setState(337); + conditionExpression(); + setState(339); _errHandler.sync(this); _la = _input.LA(1); if (_la==NEWLINE) { { - setState(336); + setState(338); match(NEWLINE); } } - setState(339); + setState(341); match(RBRACE); } } @@ -1990,7 +1996,7 @@ public final ConditionNameContext conditionName() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(341); + setState(343); match(IDENTIFIER); } } @@ -2040,41 +2046,41 @@ public final ConditionParameterContext conditionParameter() throws RecognitionEx try { enterOuterAlt(_localctx, 1); { - setState(344); + setState(346); _errHandler.sync(this); _la = _input.LA(1); if (_la==NEWLINE) { { - setState(343); + setState(345); match(NEWLINE); } } - setState(346); - parameterName(); setState(348); + parameterName(); + setState(350); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(347); + setState(349); match(WHITESPACE); } } - setState(350); - match(COLON); setState(352); + match(COLON); + setState(354); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHITESPACE) { { - setState(351); + setState(353); match(WHITESPACE); } } - setState(354); + setState(356); parameterType(); } } @@ -2112,7 +2118,7 @@ public final ParameterNameContext parameterName() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(356); + setState(358); match(IDENTIFIER); } } @@ -2151,13 +2157,13 @@ public final ParameterTypeContext parameterType() throws RecognitionException { ParameterTypeContext _localctx = new ParameterTypeContext(_ctx, getState()); enterRule(_localctx, 44, RULE_parameterType); try { - setState(363); + setState(365); _errHandler.sync(this); switch (_input.LA(1)) { case CONDITION_PARAM_TYPE: enterOuterAlt(_localctx, 1); { - setState(358); + setState(360); match(CONDITION_PARAM_TYPE); } break; @@ -2165,13 +2171,13 @@ public final ParameterTypeContext parameterType() throws RecognitionException { enterOuterAlt(_localctx, 2); { { - setState(359); + setState(361); match(CONDITION_PARAM_CONTAINER); - setState(360); + setState(362); match(LESS); - setState(361); + setState(363); match(CONDITION_PARAM_TYPE); - setState(362); + setState(364); match(GREATER); } } @@ -2222,15 +2228,15 @@ public final MultiLineCommentContext multiLineComment() throws RecognitionExcept try { enterOuterAlt(_localctx, 1); { - setState(365); + setState(367); match(HASH); - setState(369); + setState(371); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 126100789566373886L) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 252201579132747774L) != 0)) { { { - setState(366); + setState(368); _la = _input.LA(1); if ( _la <= 0 || (_la==NEWLINE) ) { _errHandler.recoverInline(this); @@ -2242,18 +2248,18 @@ public final MultiLineCommentContext multiLineComment() throws RecognitionExcept } } } - setState(371); + setState(373); _errHandler.sync(this); _la = _input.LA(1); } - setState(374); + setState(376); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,62,_ctx) ) { case 1: { - setState(372); + setState(374); match(NEWLINE); - setState(373); + setState(375); multiLineComment(); } break; @@ -2301,7 +2307,7 @@ public final IdentifierContext identifier() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(376); + setState(378); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 20382720L) != 0)) ) { _errHandler.recoverInline(this); @@ -2324,6 +2330,68 @@ public final IdentifierContext identifier() throws RecognitionException { return _localctx; } + @SuppressWarnings("CheckReturnValue") + public static class Extended_identifierContext extends ParserRuleContext { + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); + } + public TerminalNode EXTENDED_IDENTIFIER() { return getToken(OpenFGAParser.EXTENDED_IDENTIFIER, 0); } + public Extended_identifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_extended_identifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof OpenFGAParserListener ) ((OpenFGAParserListener)listener).enterExtended_identifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof OpenFGAParserListener ) ((OpenFGAParserListener)listener).exitExtended_identifier(this); + } + } + + public final Extended_identifierContext extended_identifier() throws RecognitionException { + Extended_identifierContext _localctx = new Extended_identifierContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_extended_identifier); + try { + setState(382); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IDENTIFIER: + case MODULE: + case MODEL: + case SCHEMA: + case EXTEND: + case TYPE: + case RELATION: + enterOuterAlt(_localctx, 1); + { + setState(380); + identifier(); + } + break; + case EXTENDED_IDENTIFIER: + enterOuterAlt(_localctx, 2); + { + setState(381); + match(EXTENDED_IDENTIFIER); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + @SuppressWarnings("CheckReturnValue") public static class ConditionExpressionContext extends ParserRuleContext { public List IDENTIFIER() { return getTokens(OpenFGAParser.IDENTIFIER); } @@ -2482,26 +2550,26 @@ public void exitRule(ParseTreeListener listener) { public final ConditionExpressionContext conditionExpression() throws RecognitionException { ConditionExpressionContext _localctx = new ConditionExpressionContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_conditionExpression); + enterRule(_localctx, 52, RULE_conditionExpression); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(382); + setState(388); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,64,_ctx); + _alt = getInterpreter().adaptivePredict(_input,65,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - setState(380); + setState(386); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,63,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) { case 1: { - setState(378); + setState(384); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 36028728165271480L) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 54043126674753464L) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -2513,7 +2581,7 @@ public final ConditionExpressionContext conditionExpression() throws Recognition break; case 2: { - setState(379); + setState(385); _la = _input.LA(1); if ( _la <= 0 || (_la==RBRACE) ) { _errHandler.recoverInline(this); @@ -2528,9 +2596,9 @@ public final ConditionExpressionContext conditionExpression() throws Recognition } } } - setState(384); + setState(390); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,64,_ctx); + _alt = getInterpreter().adaptivePredict(_input,65,_ctx); } } } @@ -2546,7 +2614,7 @@ public final ConditionExpressionContext conditionExpression() throws Recognition } public static final String _serializedATN = - "\u0004\u00018\u0182\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u00019\u0188\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ @@ -2554,258 +2622,262 @@ public final ConditionExpressionContext conditionExpression() throws Recognition "\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+ "\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+ "\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+ - "\u0002\u0019\u0007\u0019\u0001\u0000\u0003\u00006\b\u0000\u0001\u0000"+ - "\u0003\u00009\b\u0000\u0001\u0000\u0001\u0000\u0003\u0000=\b\u0000\u0001"+ - "\u0000\u0003\u0000@\b\u0000\u0001\u0000\u0001\u0000\u0003\u0000D\b\u0000"+ - "\u0001\u0000\u0001\u0000\u0003\u0000H\b\u0000\u0001\u0000\u0001\u0000"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001O\b\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "W\b\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002\\\b\u0002\u0001"+ - "\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002b\b\u0002\u0001"+ - "\u0003\u0005\u0003e\b\u0003\n\u0003\f\u0003h\t\u0003\u0001\u0004\u0001"+ - "\u0004\u0003\u0004l\b\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0003"+ - "\u0004q\b\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ - "\u0004\u0001\u0004\u0004\u0004y\b\u0004\u000b\u0004\f\u0004z\u0003\u0004"+ - "}\b\u0004\u0001\u0005\u0001\u0005\u0003\u0005\u0081\b\u0005\u0001\u0005"+ - "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005\u0088\b\u0005"+ - "\u0001\u0005\u0001\u0005\u0003\u0005\u008c\b\u0005\u0001\u0005\u0001\u0005"+ - "\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0003\u0007"+ - "\u0095\b\u0007\u0001\u0007\u0003\u0007\u0098\b\u0007\u0001\b\u0001\b\u0003"+ - "\b\u009c\b\b\u0001\b\u0003\b\u009f\b\b\u0001\t\u0001\t\u0001\t\u0001\t"+ - "\u0001\t\u0003\t\u00a6\b\t\u0004\t\u00a8\b\t\u000b\t\f\t\u00a9\u0001\t"+ - "\u0001\t\u0001\t\u0001\t\u0001\t\u0003\t\u00b1\b\t\u0004\t\u00b3\b\t\u000b"+ - "\t\f\t\u00b4\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0003\t\u00bc\b\t"+ - "\u0003\t\u00be\b\t\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0005\u000b"+ - "\u00c4\b\u000b\n\u000b\f\u000b\u00c7\t\u000b\u0001\u000b\u0001\u000b\u0003"+ - "\u000b\u00cb\b\u000b\u0001\u000b\u0005\u000b\u00ce\b\u000b\n\u000b\f\u000b"+ - "\u00d1\t\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0005\f\u00d7\b"+ - "\f\n\f\f\f\u00da\t\f\u0001\f\u0001\f\u0003\f\u00de\b\f\u0001\f\u0005\f"+ - "\u00e1\b\f\n\f\f\f\u00e4\t\f\u0001\f\u0001\f\u0001\r\u0001\r\u0003\r\u00ea"+ - "\b\r\u0001\r\u0001\r\u0003\r\u00ee\b\r\u0001\r\u0001\r\u0003\r\u00f2\b"+ - "\r\u0001\r\u0001\r\u0003\r\u00f6\b\r\u0005\r\u00f8\b\r\n\r\f\r\u00fb\t"+ - "\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ - "\u000e\u0003\u000e\u0104\b\u000e\u0001\u000f\u0003\u000f\u0107\b\u000f"+ - "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ - "\u0001\u000f\u0003\u000f\u0110\b\u000f\u0001\u000f\u0003\u000f\u0113\b"+ - "\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0003"+ - "\u0010\u011a\b\u0010\u0001\u0011\u0005\u0011\u011d\b\u0011\n\u0011\f\u0011"+ - "\u0120\t\u0011\u0001\u0012\u0001\u0012\u0003\u0012\u0124\b\u0012\u0001"+ - "\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u012b"+ - "\b\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u012f\b\u0012\u0001\u0012"+ - "\u0001\u0012\u0003\u0012\u0133\b\u0012\u0001\u0012\u0001\u0012\u0003\u0012"+ - "\u0137\b\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u013b\b\u0012\u0005"+ - "\u0012\u013d\b\u0012\n\u0012\f\u0012\u0140\t\u0012\u0001\u0012\u0003\u0012"+ - "\u0143\b\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u0147\b\u0012\u0001"+ - "\u0012\u0001\u0012\u0003\u0012\u014b\b\u0012\u0001\u0012\u0003\u0012\u014e"+ - "\b\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u0152\b\u0012\u0001\u0012"+ - "\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0014\u0003\u0014\u0159\b\u0014"+ - "\u0001\u0014\u0001\u0014\u0003\u0014\u015d\b\u0014\u0001\u0014\u0001\u0014"+ - "\u0003\u0014\u0161\b\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015"+ - "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0003\u0016"+ - "\u016c\b\u0016\u0001\u0017\u0001\u0017\u0005\u0017\u0170\b\u0017\n\u0017"+ - "\f\u0017\u0173\t\u0017\u0001\u0017\u0001\u0017\u0003\u0017\u0177\b\u0017"+ - "\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0005\u0019\u017d\b\u0019"+ - "\n\u0019\f\u0019\u0180\t\u0019\u0001\u0019\u0000\u0000\u001a\u0000\u0002"+ - "\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e"+ - " \"$&(*,.02\u0000\u0004\u0001\u000066\u0004\u0000\n\n\u0010\u0012\u0014"+ - "\u0015\u0018\u0018\u0004\u0000\u0003\u0005\u0007\n\u001b#%6\u0001\u0000"+ - "$$\u01ab\u00005\u0001\u0000\u0000\u0000\u0002N\u0001\u0000\u0000\u0000"+ - "\u0004[\u0001\u0000\u0000\u0000\u0006f\u0001\u0000\u0000\u0000\bk\u0001"+ - "\u0000\u0000\u0000\n\u0080\u0001\u0000\u0000\u0000\f\u008f\u0001\u0000"+ - "\u0000\u0000\u000e\u0094\u0001\u0000\u0000\u0000\u0010\u009b\u0001\u0000"+ - "\u0000\u0000\u0012\u00bd\u0001\u0000\u0000\u0000\u0014\u00bf\u0001\u0000"+ - "\u0000\u0000\u0016\u00c1\u0001\u0000\u0000\u0000\u0018\u00d4\u0001\u0000"+ - "\u0000\u0000\u001a\u00e7\u0001\u0000\u0000\u0000\u001c\u00fe\u0001\u0000"+ - "\u0000\u0000\u001e\u0106\u0001\u0000\u0000\u0000 \u0114\u0001\u0000\u0000"+ - "\u0000\"\u011e\u0001\u0000\u0000\u0000$\u0123\u0001\u0000\u0000\u0000"+ - "&\u0155\u0001\u0000\u0000\u0000(\u0158\u0001\u0000\u0000\u0000*\u0164"+ - "\u0001\u0000\u0000\u0000,\u016b\u0001\u0000\u0000\u0000.\u016d\u0001\u0000"+ - "\u0000\u00000\u0178\u0001\u0000\u0000\u00002\u017e\u0001\u0000\u0000\u0000"+ - "46\u0005\t\u0000\u000054\u0001\u0000\u0000\u000056\u0001\u0000\u0000\u0000"+ - "68\u0001\u0000\u0000\u000079\u00056\u0000\u000087\u0001\u0000\u0000\u0000"+ - "89\u0001\u0000\u0000\u00009<\u0001\u0000\u0000\u0000:=\u0003\u0002\u0001"+ - "\u0000;=\u0003\u0004\u0002\u0000<:\u0001\u0000\u0000\u0000<;\u0001\u0000"+ - "\u0000\u0000=?\u0001\u0000\u0000\u0000>@\u00056\u0000\u0000?>\u0001\u0000"+ - "\u0000\u0000?@\u0001\u0000\u0000\u0000@A\u0001\u0000\u0000\u0000AC\u0003"+ - "\u0006\u0003\u0000BD\u00056\u0000\u0000CB\u0001\u0000\u0000\u0000CD\u0001"+ - "\u0000\u0000\u0000DE\u0001\u0000\u0000\u0000EG\u0003\"\u0011\u0000FH\u0005"+ - "6\u0000\u0000GF\u0001\u0000\u0000\u0000GH\u0001\u0000\u0000\u0000HI\u0001"+ - "\u0000\u0000\u0000IJ\u0005\u0000\u0000\u0001J\u0001\u0001\u0000\u0000"+ - "\u0000KL\u0003.\u0017\u0000LM\u00056\u0000\u0000MO\u0001\u0000\u0000\u0000"+ - "NK\u0001\u0000\u0000\u0000NO\u0001\u0000\u0000\u0000OP\u0001\u0000\u0000"+ - "\u0000PQ\u0005\u0011\u0000\u0000QR\u00056\u0000\u0000RS\u0005\u0012\u0000"+ - "\u0000ST\u0005\t\u0000\u0000TV\u0005\u0013\u0000\u0000UW\u0005\t\u0000"+ - "\u0000VU\u0001\u0000\u0000\u0000VW\u0001\u0000\u0000\u0000W\u0003\u0001"+ - "\u0000\u0000\u0000XY\u0003.\u0017\u0000YZ\u00056\u0000\u0000Z\\\u0001"+ - "\u0000\u0000\u0000[X\u0001\u0000\u0000\u0000[\\\u0001\u0000\u0000\u0000"+ - "\\]\u0001\u0000\u0000\u0000]^\u0005\u0010\u0000\u0000^_\u0005\t\u0000"+ - "\u0000_a\u00030\u0018\u0000`b\u0005\t\u0000\u0000a`\u0001\u0000\u0000"+ - "\u0000ab\u0001\u0000\u0000\u0000b\u0005\u0001\u0000\u0000\u0000ce\u0003"+ - "\b\u0004\u0000dc\u0001\u0000\u0000\u0000eh\u0001\u0000\u0000\u0000fd\u0001"+ - "\u0000\u0000\u0000fg\u0001\u0000\u0000\u0000g\u0007\u0001\u0000\u0000"+ - "\u0000hf\u0001\u0000\u0000\u0000ij\u00056\u0000\u0000jl\u0003.\u0017\u0000"+ - "ki\u0001\u0000\u0000\u0000kl\u0001\u0000\u0000\u0000lm\u0001\u0000\u0000"+ - "\u0000mp\u00056\u0000\u0000no\u0005\u0014\u0000\u0000oq\u0005\t\u0000"+ - "\u0000pn\u0001\u0000\u0000\u0000pq\u0001\u0000\u0000\u0000qr\u0001\u0000"+ - "\u0000\u0000rs\u0005\u0015\u0000\u0000st\u0005\t\u0000\u0000t|\u00030"+ - "\u0018\u0000uv\u00056\u0000\u0000vx\u0005\u0017\u0000\u0000wy\u0003\n"+ - "\u0005\u0000xw\u0001\u0000\u0000\u0000yz\u0001\u0000\u0000\u0000zx\u0001"+ - "\u0000\u0000\u0000z{\u0001\u0000\u0000\u0000{}\u0001\u0000\u0000\u0000"+ - "|u\u0001\u0000\u0000\u0000|}\u0001\u0000\u0000\u0000}\t\u0001\u0000\u0000"+ - "\u0000~\u007f\u00056\u0000\u0000\u007f\u0081\u0003.\u0017\u0000\u0080"+ - "~\u0001\u0000\u0000\u0000\u0080\u0081\u0001\u0000\u0000\u0000\u0081\u0082"+ - "\u0001\u0000\u0000\u0000\u0082\u0083\u00056\u0000\u0000\u0083\u0084\u0005"+ - "\u0019\u0000\u0000\u0084\u0085\u0005\t\u0000\u0000\u0085\u0087\u0003\f"+ - "\u0006\u0000\u0086\u0088\u0005\t\u0000\u0000\u0087\u0086\u0001\u0000\u0000"+ - "\u0000\u0087\u0088\u0001\u0000\u0000\u0000\u0088\u0089\u0001\u0000\u0000"+ - "\u0000\u0089\u008b\u0005\u0001\u0000\u0000\u008a\u008c\u0005\t\u0000\u0000"+ - "\u008b\u008a\u0001\u0000\u0000\u0000\u008b\u008c\u0001\u0000\u0000\u0000"+ - "\u008c\u008d\u0001\u0000\u0000\u0000\u008d\u008e\u0003\u000e\u0007\u0000"+ - "\u008e\u000b\u0001\u0000\u0000\u0000\u008f\u0090\u00030\u0018\u0000\u0090"+ - "\r\u0001\u0000\u0000\u0000\u0091\u0095\u0003\u001a\r\u0000\u0092\u0095"+ - "\u0003\u0014\n\u0000\u0093\u0095\u0003\u0016\u000b\u0000\u0094\u0091\u0001"+ - "\u0000\u0000\u0000\u0094\u0092\u0001\u0000\u0000\u0000\u0094\u0093\u0001"+ - "\u0000\u0000\u0000\u0095\u0097\u0001\u0000\u0000\u0000\u0096\u0098\u0003"+ - "\u0012\t\u0000\u0097\u0096\u0001\u0000\u0000\u0000\u0097\u0098\u0001\u0000"+ - "\u0000\u0000\u0098\u000f\u0001\u0000\u0000\u0000\u0099\u009c\u0003\u0014"+ - "\n\u0000\u009a\u009c\u0003\u0018\f\u0000\u009b\u0099\u0001\u0000\u0000"+ - "\u0000\u009b\u009a\u0001\u0000\u0000\u0000\u009c\u009e\u0001\u0000\u0000"+ - "\u0000\u009d\u009f\u0003\u0012\t\u0000\u009e\u009d\u0001\u0000\u0000\u0000"+ - "\u009e\u009f\u0001\u0000\u0000\u0000\u009f\u0011\u0001\u0000\u0000\u0000"+ - "\u00a0\u00a1\u0005\t\u0000\u0000\u00a1\u00a2\u0005\r\u0000\u0000\u00a2"+ - "\u00a5\u0005\t\u0000\u0000\u00a3\u00a6\u0003\u0014\n\u0000\u00a4\u00a6"+ - "\u0003\u0018\f\u0000\u00a5\u00a3\u0001\u0000\u0000\u0000\u00a5\u00a4\u0001"+ - "\u0000\u0000\u0000\u00a6\u00a8\u0001\u0000\u0000\u0000\u00a7\u00a0\u0001"+ - "\u0000\u0000\u0000\u00a8\u00a9\u0001\u0000\u0000\u0000\u00a9\u00a7\u0001"+ - "\u0000\u0000\u0000\u00a9\u00aa\u0001\u0000\u0000\u0000\u00aa\u00be\u0001"+ - "\u0000\u0000\u0000\u00ab\u00ac\u0005\t\u0000\u0000\u00ac\u00ad\u0005\f"+ - "\u0000\u0000\u00ad\u00b0\u0005\t\u0000\u0000\u00ae\u00b1\u0003\u0014\n"+ - "\u0000\u00af\u00b1\u0003\u0018\f\u0000\u00b0\u00ae\u0001\u0000\u0000\u0000"+ - "\u00b0\u00af\u0001\u0000\u0000\u0000\u00b1\u00b3\u0001\u0000\u0000\u0000"+ - "\u00b2\u00ab\u0001\u0000\u0000\u0000\u00b3\u00b4\u0001\u0000\u0000\u0000"+ - "\u00b4\u00b2\u0001\u0000\u0000\u0000\u00b4\u00b5\u0001\u0000\u0000\u0000"+ - "\u00b5\u00be\u0001\u0000\u0000\u0000\u00b6\u00b7\u0005\t\u0000\u0000\u00b7"+ - "\u00b8\u0005\u000e\u0000\u0000\u00b8\u00bb\u0005\t\u0000\u0000\u00b9\u00bc"+ - "\u0003\u0014\n\u0000\u00ba\u00bc\u0003\u0018\f\u0000\u00bb\u00b9\u0001"+ - "\u0000\u0000\u0000\u00bb\u00ba\u0001\u0000\u0000\u0000\u00bc\u00be\u0001"+ - "\u0000\u0000\u0000\u00bd\u00a7\u0001\u0000\u0000\u0000\u00bd\u00b2\u0001"+ - "\u0000\u0000\u0000\u00bd\u00b6\u0001\u0000\u0000\u0000\u00be\u0013\u0001"+ - "\u0000\u0000\u0000\u00bf\u00c0\u0003\u001c\u000e\u0000\u00c0\u0015\u0001"+ - "\u0000\u0000\u0000\u00c1\u00c5\u0005\u0007\u0000\u0000\u00c2\u00c4\u0005"+ - "\t\u0000\u0000\u00c3\u00c2\u0001\u0000\u0000\u0000\u00c4\u00c7\u0001\u0000"+ - "\u0000\u0000\u00c5\u00c3\u0001\u0000\u0000\u0000\u00c5\u00c6\u0001\u0000"+ - "\u0000\u0000\u00c6\u00ca\u0001\u0000\u0000\u0000\u00c7\u00c5\u0001\u0000"+ - "\u0000\u0000\u00c8\u00cb\u0003\u000e\u0007\u0000\u00c9\u00cb\u0003\u0018"+ - "\f\u0000\u00ca\u00c8\u0001\u0000\u0000\u0000\u00ca\u00c9\u0001\u0000\u0000"+ - "\u0000\u00cb\u00cf\u0001\u0000\u0000\u0000\u00cc\u00ce\u0005\t\u0000\u0000"+ - "\u00cd\u00cc\u0001\u0000\u0000\u0000\u00ce\u00d1\u0001\u0000\u0000\u0000"+ - "\u00cf\u00cd\u0001\u0000\u0000\u0000\u00cf\u00d0\u0001\u0000\u0000\u0000"+ - "\u00d0\u00d2\u0001\u0000\u0000\u0000\u00d1\u00cf\u0001\u0000\u0000\u0000"+ - "\u00d2\u00d3\u0005\b\u0000\u0000\u00d3\u0017\u0001\u0000\u0000\u0000\u00d4"+ - "\u00d8\u0005\u0007\u0000\u0000\u00d5\u00d7\u0005\t\u0000\u0000\u00d6\u00d5"+ - "\u0001\u0000\u0000\u0000\u00d7\u00da\u0001\u0000\u0000\u0000\u00d8\u00d6"+ - "\u0001\u0000\u0000\u0000\u00d8\u00d9\u0001\u0000\u0000\u0000\u00d9\u00dd"+ - "\u0001\u0000\u0000\u0000\u00da\u00d8\u0001\u0000\u0000\u0000\u00db\u00de"+ - "\u0003\u0010\b\u0000\u00dc\u00de\u0003\u0018\f\u0000\u00dd\u00db\u0001"+ - "\u0000\u0000\u0000\u00dd\u00dc\u0001\u0000\u0000\u0000\u00de\u00e2\u0001"+ - "\u0000\u0000\u0000\u00df\u00e1\u0005\t\u0000\u0000\u00e0\u00df\u0001\u0000"+ - "\u0000\u0000\u00e1\u00e4\u0001\u0000\u0000\u0000\u00e2\u00e0\u0001\u0000"+ - "\u0000\u0000\u00e2\u00e3\u0001\u0000\u0000\u0000\u00e3\u00e5\u0001\u0000"+ - "\u0000\u0000\u00e4\u00e2\u0001\u0000\u0000\u0000\u00e5\u00e6\u0005\b\u0000"+ - "\u0000\u00e6\u0019\u0001\u0000\u0000\u0000\u00e7\u00e9\u0005\u0005\u0000"+ - "\u0000\u00e8\u00ea\u0005\t\u0000\u0000\u00e9\u00e8\u0001\u0000\u0000\u0000"+ - "\u00e9\u00ea\u0001\u0000\u0000\u0000\u00ea\u00eb\u0001\u0000\u0000\u0000"+ - "\u00eb\u00ed\u0003\u001e\u000f\u0000\u00ec\u00ee\u0005\t\u0000\u0000\u00ed"+ - "\u00ec\u0001\u0000\u0000\u0000\u00ed\u00ee\u0001\u0000\u0000\u0000\u00ee"+ - "\u00f9\u0001\u0000\u0000\u0000\u00ef\u00f1\u0005\u0002\u0000\u0000\u00f0"+ - "\u00f2\u0005\t\u0000\u0000\u00f1\u00f0\u0001\u0000\u0000\u0000\u00f1\u00f2"+ - "\u0001\u0000\u0000\u0000\u00f2\u00f3\u0001\u0000\u0000\u0000\u00f3\u00f5"+ - "\u0003\u001e\u000f\u0000\u00f4\u00f6\u0005\t\u0000\u0000\u00f5\u00f4\u0001"+ - "\u0000\u0000\u0000\u00f5\u00f6\u0001\u0000\u0000\u0000\u00f6\u00f8\u0001"+ - "\u0000\u0000\u0000\u00f7\u00ef\u0001\u0000\u0000\u0000\u00f8\u00fb\u0001"+ - "\u0000\u0000\u0000\u00f9\u00f7\u0001\u0000\u0000\u0000\u00f9\u00fa\u0001"+ - "\u0000\u0000\u0000\u00fa\u00fc\u0001\u0000\u0000\u0000\u00fb\u00f9\u0001"+ - "\u0000\u0000\u0000\u00fc\u00fd\u0005\"\u0000\u0000\u00fd\u001b\u0001\u0000"+ - "\u0000\u0000\u00fe\u0103\u00030\u0018\u0000\u00ff\u0100\u0005\t\u0000"+ - "\u0000\u0100\u0101\u0005\u000f\u0000\u0000\u0101\u0102\u0005\t\u0000\u0000"+ - "\u0102\u0104\u00030\u0018\u0000\u0103\u00ff\u0001\u0000\u0000\u0000\u0103"+ - "\u0104\u0001\u0000\u0000\u0000\u0104\u001d\u0001\u0000\u0000\u0000\u0105"+ - "\u0107\u00056\u0000\u0000\u0106\u0105\u0001\u0000\u0000\u0000\u0106\u0107"+ - "\u0001\u0000\u0000\u0000\u0107\u010f\u0001\u0000\u0000\u0000\u0108\u0110"+ - "\u0003 \u0010\u0000\u0109\u010a\u0003 \u0010\u0000\u010a\u010b\u0005\t"+ - "\u0000\u0000\u010b\u010c\u0005\u001a\u0000\u0000\u010c\u010d\u0005\t\u0000"+ - "\u0000\u010d\u010e\u0003&\u0013\u0000\u010e\u0110\u0001\u0000\u0000\u0000"+ - "\u010f\u0108\u0001\u0000\u0000\u0000\u010f\u0109\u0001\u0000\u0000\u0000"+ - "\u0110\u0112\u0001\u0000\u0000\u0000\u0111\u0113\u00056\u0000\u0000\u0112"+ - "\u0111\u0001\u0000\u0000\u0000\u0112\u0113\u0001\u0000\u0000\u0000\u0113"+ - "\u001f\u0001\u0000\u0000\u0000\u0114\u0119\u00030\u0018\u0000\u0115\u0116"+ - "\u0005\u0001\u0000\u0000\u0116\u011a\u0005*\u0000\u0000\u0117\u0118\u0005"+ - "\u000b\u0000\u0000\u0118\u011a\u00030\u0018\u0000\u0119\u0115\u0001\u0000"+ - "\u0000\u0000\u0119\u0117\u0001\u0000\u0000\u0000\u0119\u011a\u0001\u0000"+ - "\u0000\u0000\u011a!\u0001\u0000\u0000\u0000\u011b\u011d\u0003$\u0012\u0000"+ - "\u011c\u011b\u0001\u0000\u0000\u0000\u011d\u0120\u0001\u0000\u0000\u0000"+ - "\u011e\u011c\u0001\u0000\u0000\u0000\u011e\u011f\u0001\u0000\u0000\u0000"+ - "\u011f#\u0001\u0000\u0000\u0000\u0120\u011e\u0001\u0000\u0000\u0000\u0121"+ - "\u0122\u00056\u0000\u0000\u0122\u0124\u0003.\u0017\u0000\u0123\u0121\u0001"+ - "\u0000\u0000\u0000\u0123\u0124\u0001\u0000\u0000\u0000\u0124\u0125\u0001"+ - "\u0000\u0000\u0000\u0125\u0126\u00056\u0000\u0000\u0126\u0127\u0005\u0016"+ - "\u0000\u0000\u0127\u0128\u0005\t\u0000\u0000\u0128\u012a\u0003&\u0013"+ - "\u0000\u0129\u012b\u0005\t\u0000\u0000\u012a\u0129\u0001\u0000\u0000\u0000"+ - "\u012a\u012b\u0001\u0000\u0000\u0000\u012b\u012c\u0001\u0000\u0000\u0000"+ - "\u012c\u012e\u0005\u0007\u0000\u0000\u012d\u012f\u0005\t\u0000\u0000\u012e"+ - "\u012d\u0001\u0000\u0000\u0000\u012e\u012f\u0001\u0000\u0000\u0000\u012f"+ - "\u0130\u0001\u0000\u0000\u0000\u0130\u0132\u0003(\u0014\u0000\u0131\u0133"+ - "\u0005\t\u0000\u0000\u0132\u0131\u0001\u0000\u0000\u0000\u0132\u0133\u0001"+ - "\u0000\u0000\u0000\u0133\u013e\u0001\u0000\u0000\u0000\u0134\u0136\u0005"+ - "\u0002\u0000\u0000\u0135\u0137\u0005\t\u0000\u0000\u0136\u0135\u0001\u0000"+ - "\u0000\u0000\u0136\u0137\u0001\u0000\u0000\u0000\u0137\u0138\u0001\u0000"+ - "\u0000\u0000\u0138\u013a\u0003(\u0014\u0000\u0139\u013b\u0005\t\u0000"+ - "\u0000\u013a\u0139\u0001\u0000\u0000\u0000\u013a\u013b\u0001\u0000\u0000"+ - "\u0000\u013b\u013d\u0001\u0000\u0000\u0000\u013c\u0134\u0001\u0000\u0000"+ - "\u0000\u013d\u0140\u0001\u0000\u0000\u0000\u013e\u013c\u0001\u0000\u0000"+ - "\u0000\u013e\u013f\u0001\u0000\u0000\u0000\u013f\u0142\u0001\u0000\u0000"+ - "\u0000\u0140\u013e\u0001\u0000\u0000\u0000\u0141\u0143\u00056\u0000\u0000"+ - "\u0142\u0141\u0001\u0000\u0000\u0000\u0142\u0143\u0001\u0000\u0000\u0000"+ - "\u0143\u0144\u0001\u0000\u0000\u0000\u0144\u0146\u0005\b\u0000\u0000\u0145"+ - "\u0147\u0005\t\u0000\u0000\u0146\u0145\u0001\u0000\u0000\u0000\u0146\u0147"+ - "\u0001\u0000\u0000\u0000\u0147\u0148\u0001\u0000\u0000\u0000\u0148\u014a"+ - "\u0005#\u0000\u0000\u0149\u014b\u00056\u0000\u0000\u014a\u0149\u0001\u0000"+ - "\u0000\u0000\u014a\u014b\u0001\u0000\u0000\u0000\u014b\u014d\u0001\u0000"+ - "\u0000\u0000\u014c\u014e\u0005\t\u0000\u0000\u014d\u014c\u0001\u0000\u0000"+ - "\u0000\u014d\u014e\u0001\u0000\u0000\u0000\u014e\u014f\u0001\u0000\u0000"+ - "\u0000\u014f\u0151\u00032\u0019\u0000\u0150\u0152\u00056\u0000\u0000\u0151"+ - "\u0150\u0001\u0000\u0000\u0000\u0151\u0152\u0001\u0000\u0000\u0000\u0152"+ - "\u0153\u0001\u0000\u0000\u0000\u0153\u0154\u0005$\u0000\u0000\u0154%\u0001"+ - "\u0000\u0000\u0000\u0155\u0156\u0005\n\u0000\u0000\u0156\'\u0001\u0000"+ - "\u0000\u0000\u0157\u0159\u00056\u0000\u0000\u0158\u0157\u0001\u0000\u0000"+ - "\u0000\u0158\u0159\u0001\u0000\u0000\u0000\u0159\u015a\u0001\u0000\u0000"+ - "\u0000\u015a\u015c\u0003*\u0015\u0000\u015b\u015d\u0005\t\u0000\u0000"+ - "\u015c\u015b\u0001\u0000\u0000\u0000\u015c\u015d\u0001\u0000\u0000\u0000"+ - "\u015d\u015e\u0001\u0000\u0000\u0000\u015e\u0160\u0005\u0001\u0000\u0000"+ - "\u015f\u0161\u0005\t\u0000\u0000\u0160\u015f\u0001\u0000\u0000\u0000\u0160"+ - "\u0161\u0001\u0000\u0000\u0000\u0161\u0162\u0001\u0000\u0000\u0000\u0162"+ - "\u0163\u0003,\u0016\u0000\u0163)\u0001\u0000\u0000\u0000\u0164\u0165\u0005"+ - "\n\u0000\u0000\u0165+\u0001\u0000\u0000\u0000\u0166\u016c\u00058\u0000"+ - "\u0000\u0167\u0168\u00057\u0000\u0000\u0168\u0169\u0005\u0003\u0000\u0000"+ - "\u0169\u016a\u00058\u0000\u0000\u016a\u016c\u0005\u0004\u0000\u0000\u016b"+ - "\u0166\u0001\u0000\u0000\u0000\u016b\u0167\u0001\u0000\u0000\u0000\u016c"+ - "-\u0001\u0000\u0000\u0000\u016d\u0171\u0005\u000b\u0000\u0000\u016e\u0170"+ - "\b\u0000\u0000\u0000\u016f\u016e\u0001\u0000\u0000\u0000\u0170\u0173\u0001"+ - "\u0000\u0000\u0000\u0171\u016f\u0001\u0000\u0000\u0000\u0171\u0172\u0001"+ - "\u0000\u0000\u0000\u0172\u0176\u0001\u0000\u0000\u0000\u0173\u0171\u0001"+ - "\u0000\u0000\u0000\u0174\u0175\u00056\u0000\u0000\u0175\u0177\u0003.\u0017"+ - "\u0000\u0176\u0174\u0001\u0000\u0000\u0000\u0176\u0177\u0001\u0000\u0000"+ - "\u0000\u0177/\u0001\u0000\u0000\u0000\u0178\u0179\u0007\u0001\u0000\u0000"+ - "\u01791\u0001\u0000\u0000\u0000\u017a\u017d\u0007\u0002\u0000\u0000\u017b"+ - "\u017d\b\u0003\u0000\u0000\u017c\u017a\u0001\u0000\u0000\u0000\u017c\u017b"+ - "\u0001\u0000\u0000\u0000\u017d\u0180\u0001\u0000\u0000\u0000\u017e\u017c"+ - "\u0001\u0000\u0000\u0000\u017e\u017f\u0001\u0000\u0000\u0000\u017f3\u0001"+ - "\u0000\u0000\u0000\u0180\u017e\u0001\u0000\u0000\u0000A58\u0001\u0000"+ + "\u0000\u0000<\u0001"+ + "\u0000\u0000\u0000>=\u0001\u0000\u0000\u0000?A\u0001\u0000\u0000\u0000"+ + "@B\u00057\u0000\u0000A@\u0001\u0000\u0000\u0000AB\u0001\u0000\u0000\u0000"+ + "BC\u0001\u0000\u0000\u0000CE\u0003\u0006\u0003\u0000DF\u00057\u0000\u0000"+ + "ED\u0001\u0000\u0000\u0000EF\u0001\u0000\u0000\u0000FG\u0001\u0000\u0000"+ + "\u0000GI\u0003\"\u0011\u0000HJ\u00057\u0000\u0000IH\u0001\u0000\u0000"+ + "\u0000IJ\u0001\u0000\u0000\u0000JK\u0001\u0000\u0000\u0000KL\u0005\u0000"+ + "\u0000\u0001L\u0001\u0001\u0000\u0000\u0000MN\u0003.\u0017\u0000NO\u0005"+ + "7\u0000\u0000OQ\u0001\u0000\u0000\u0000PM\u0001\u0000\u0000\u0000PQ\u0001"+ + "\u0000\u0000\u0000QR\u0001\u0000\u0000\u0000RS\u0005\u0011\u0000\u0000"+ + "ST\u00057\u0000\u0000TU\u0005\u0012\u0000\u0000UV\u0005\t\u0000\u0000"+ + "VX\u0005\u0013\u0000\u0000WY\u0005\t\u0000\u0000XW\u0001\u0000\u0000\u0000"+ + "XY\u0001\u0000\u0000\u0000Y\u0003\u0001\u0000\u0000\u0000Z[\u0003.\u0017"+ + "\u0000[\\\u00057\u0000\u0000\\^\u0001\u0000\u0000\u0000]Z\u0001\u0000"+ + "\u0000\u0000]^\u0001\u0000\u0000\u0000^_\u0001\u0000\u0000\u0000_`\u0005"+ + "\u0010\u0000\u0000`a\u0005\t\u0000\u0000ac\u00030\u0018\u0000bd\u0005"+ + "\t\u0000\u0000cb\u0001\u0000\u0000\u0000cd\u0001\u0000\u0000\u0000d\u0005"+ + "\u0001\u0000\u0000\u0000eg\u0003\b\u0004\u0000fe\u0001\u0000\u0000\u0000"+ + "gj\u0001\u0000\u0000\u0000hf\u0001\u0000\u0000\u0000hi\u0001\u0000\u0000"+ + "\u0000i\u0007\u0001\u0000\u0000\u0000jh\u0001\u0000\u0000\u0000kl\u0005"+ + "7\u0000\u0000ln\u0003.\u0017\u0000mk\u0001\u0000\u0000\u0000mn\u0001\u0000"+ + "\u0000\u0000no\u0001\u0000\u0000\u0000or\u00057\u0000\u0000pq\u0005\u0014"+ + "\u0000\u0000qs\u0005\t\u0000\u0000rp\u0001\u0000\u0000\u0000rs\u0001\u0000"+ + "\u0000\u0000st\u0001\u0000\u0000\u0000tu\u0005\u0015\u0000\u0000uv\u0005"+ + "\t\u0000\u0000v~\u00032\u0019\u0000wx\u00057\u0000\u0000xz\u0005\u0017"+ + "\u0000\u0000y{\u0003\n\u0005\u0000zy\u0001\u0000\u0000\u0000{|\u0001\u0000"+ + "\u0000\u0000|z\u0001\u0000\u0000\u0000|}\u0001\u0000\u0000\u0000}\u007f"+ + "\u0001\u0000\u0000\u0000~w\u0001\u0000\u0000\u0000~\u007f\u0001\u0000"+ + "\u0000\u0000\u007f\t\u0001\u0000\u0000\u0000\u0080\u0081\u00057\u0000"+ + "\u0000\u0081\u0083\u0003.\u0017\u0000\u0082\u0080\u0001\u0000\u0000\u0000"+ + "\u0082\u0083\u0001\u0000\u0000\u0000\u0083\u0084\u0001\u0000\u0000\u0000"+ + "\u0084\u0085\u00057\u0000\u0000\u0085\u0086\u0005\u0019\u0000\u0000\u0086"+ + "\u0087\u0005\t\u0000\u0000\u0087\u0089\u0003\f\u0006\u0000\u0088\u008a"+ + "\u0005\t\u0000\u0000\u0089\u0088\u0001\u0000\u0000\u0000\u0089\u008a\u0001"+ + "\u0000\u0000\u0000\u008a\u008b\u0001\u0000\u0000\u0000\u008b\u008d\u0005"+ + "\u0001\u0000\u0000\u008c\u008e\u0005\t\u0000\u0000\u008d\u008c\u0001\u0000"+ + "\u0000\u0000\u008d\u008e\u0001\u0000\u0000\u0000\u008e\u008f\u0001\u0000"+ + "\u0000\u0000\u008f\u0090\u0003\u000e\u0007\u0000\u0090\u000b\u0001\u0000"+ + "\u0000\u0000\u0091\u0092\u00032\u0019\u0000\u0092\r\u0001\u0000\u0000"+ + "\u0000\u0093\u0097\u0003\u001a\r\u0000\u0094\u0097\u0003\u0014\n\u0000"+ + "\u0095\u0097\u0003\u0016\u000b\u0000\u0096\u0093\u0001\u0000\u0000\u0000"+ + "\u0096\u0094\u0001\u0000\u0000\u0000\u0096\u0095\u0001\u0000\u0000\u0000"+ + "\u0097\u0099\u0001\u0000\u0000\u0000\u0098\u009a\u0003\u0012\t\u0000\u0099"+ + "\u0098\u0001\u0000\u0000\u0000\u0099\u009a\u0001\u0000\u0000\u0000\u009a"+ + "\u000f\u0001\u0000\u0000\u0000\u009b\u009e\u0003\u0014\n\u0000\u009c\u009e"+ + "\u0003\u0018\f\u0000\u009d\u009b\u0001\u0000\u0000\u0000\u009d\u009c\u0001"+ + "\u0000\u0000\u0000\u009e\u00a0\u0001\u0000\u0000\u0000\u009f\u00a1\u0003"+ + "\u0012\t\u0000\u00a0\u009f\u0001\u0000\u0000\u0000\u00a0\u00a1\u0001\u0000"+ + "\u0000\u0000\u00a1\u0011\u0001\u0000\u0000\u0000\u00a2\u00a3\u0005\t\u0000"+ + "\u0000\u00a3\u00a4\u0005\r\u0000\u0000\u00a4\u00a7\u0005\t\u0000\u0000"+ + "\u00a5\u00a8\u0003\u0014\n\u0000\u00a6\u00a8\u0003\u0018\f\u0000\u00a7"+ + "\u00a5\u0001\u0000\u0000\u0000\u00a7\u00a6\u0001\u0000\u0000\u0000\u00a8"+ + "\u00aa\u0001\u0000\u0000\u0000\u00a9\u00a2\u0001\u0000\u0000\u0000\u00aa"+ + "\u00ab\u0001\u0000\u0000\u0000\u00ab\u00a9\u0001\u0000\u0000\u0000\u00ab"+ + "\u00ac\u0001\u0000\u0000\u0000\u00ac\u00c0\u0001\u0000\u0000\u0000\u00ad"+ + "\u00ae\u0005\t\u0000\u0000\u00ae\u00af\u0005\f\u0000\u0000\u00af\u00b2"+ + "\u0005\t\u0000\u0000\u00b0\u00b3\u0003\u0014\n\u0000\u00b1\u00b3\u0003"+ + "\u0018\f\u0000\u00b2\u00b0\u0001\u0000\u0000\u0000\u00b2\u00b1\u0001\u0000"+ + "\u0000\u0000\u00b3\u00b5\u0001\u0000\u0000\u0000\u00b4\u00ad\u0001\u0000"+ + "\u0000\u0000\u00b5\u00b6\u0001\u0000\u0000\u0000\u00b6\u00b4\u0001\u0000"+ + "\u0000\u0000\u00b6\u00b7\u0001\u0000\u0000\u0000\u00b7\u00c0\u0001\u0000"+ + "\u0000\u0000\u00b8\u00b9\u0005\t\u0000\u0000\u00b9\u00ba\u0005\u000e\u0000"+ + "\u0000\u00ba\u00bd\u0005\t\u0000\u0000\u00bb\u00be\u0003\u0014\n\u0000"+ + "\u00bc\u00be\u0003\u0018\f\u0000\u00bd\u00bb\u0001\u0000\u0000\u0000\u00bd"+ + "\u00bc\u0001\u0000\u0000\u0000\u00be\u00c0\u0001\u0000\u0000\u0000\u00bf"+ + "\u00a9\u0001\u0000\u0000\u0000\u00bf\u00b4\u0001\u0000\u0000\u0000\u00bf"+ + "\u00b8\u0001\u0000\u0000\u0000\u00c0\u0013\u0001\u0000\u0000\u0000\u00c1"+ + "\u00c2\u0003\u001c\u000e\u0000\u00c2\u0015\u0001\u0000\u0000\u0000\u00c3"+ + "\u00c7\u0005\u0007\u0000\u0000\u00c4\u00c6\u0005\t\u0000\u0000\u00c5\u00c4"+ + "\u0001\u0000\u0000\u0000\u00c6\u00c9\u0001\u0000\u0000\u0000\u00c7\u00c5"+ + "\u0001\u0000\u0000\u0000\u00c7\u00c8\u0001\u0000\u0000\u0000\u00c8\u00cc"+ + "\u0001\u0000\u0000\u0000\u00c9\u00c7\u0001\u0000\u0000\u0000\u00ca\u00cd"+ + "\u0003\u000e\u0007\u0000\u00cb\u00cd\u0003\u0018\f\u0000\u00cc\u00ca\u0001"+ + "\u0000\u0000\u0000\u00cc\u00cb\u0001\u0000\u0000\u0000\u00cd\u00d1\u0001"+ + "\u0000\u0000\u0000\u00ce\u00d0\u0005\t\u0000\u0000\u00cf\u00ce\u0001\u0000"+ + "\u0000\u0000\u00d0\u00d3\u0001\u0000\u0000\u0000\u00d1\u00cf\u0001\u0000"+ + "\u0000\u0000\u00d1\u00d2\u0001\u0000\u0000\u0000\u00d2\u00d4\u0001\u0000"+ + "\u0000\u0000\u00d3\u00d1\u0001\u0000\u0000\u0000\u00d4\u00d5\u0005\b\u0000"+ + "\u0000\u00d5\u0017\u0001\u0000\u0000\u0000\u00d6\u00da\u0005\u0007\u0000"+ + "\u0000\u00d7\u00d9\u0005\t\u0000\u0000\u00d8\u00d7\u0001\u0000\u0000\u0000"+ + "\u00d9\u00dc\u0001\u0000\u0000\u0000\u00da\u00d8\u0001\u0000\u0000\u0000"+ + "\u00da\u00db\u0001\u0000\u0000\u0000\u00db\u00df\u0001\u0000\u0000\u0000"+ + "\u00dc\u00da\u0001\u0000\u0000\u0000\u00dd\u00e0\u0003\u0010\b\u0000\u00de"+ + "\u00e0\u0003\u0018\f\u0000\u00df\u00dd\u0001\u0000\u0000\u0000\u00df\u00de"+ + "\u0001\u0000\u0000\u0000\u00e0\u00e4\u0001\u0000\u0000\u0000\u00e1\u00e3"+ + "\u0005\t\u0000\u0000\u00e2\u00e1\u0001\u0000\u0000\u0000\u00e3\u00e6\u0001"+ + "\u0000\u0000\u0000\u00e4\u00e2\u0001\u0000\u0000\u0000\u00e4\u00e5\u0001"+ + "\u0000\u0000\u0000\u00e5\u00e7\u0001\u0000\u0000\u0000\u00e6\u00e4\u0001"+ + "\u0000\u0000\u0000\u00e7\u00e8\u0005\b\u0000\u0000\u00e8\u0019\u0001\u0000"+ + "\u0000\u0000\u00e9\u00eb\u0005\u0005\u0000\u0000\u00ea\u00ec\u0005\t\u0000"+ + "\u0000\u00eb\u00ea\u0001\u0000\u0000\u0000\u00eb\u00ec\u0001\u0000\u0000"+ + "\u0000\u00ec\u00ed\u0001\u0000\u0000\u0000\u00ed\u00ef\u0003\u001e\u000f"+ + "\u0000\u00ee\u00f0\u0005\t\u0000\u0000\u00ef\u00ee\u0001\u0000\u0000\u0000"+ + "\u00ef\u00f0\u0001\u0000\u0000\u0000\u00f0\u00fb\u0001\u0000\u0000\u0000"+ + "\u00f1\u00f3\u0005\u0002\u0000\u0000\u00f2\u00f4\u0005\t\u0000\u0000\u00f3"+ + "\u00f2\u0001\u0000\u0000\u0000\u00f3\u00f4\u0001\u0000\u0000\u0000\u00f4"+ + "\u00f5\u0001\u0000\u0000\u0000\u00f5\u00f7\u0003\u001e\u000f\u0000\u00f6"+ + "\u00f8\u0005\t\u0000\u0000\u00f7\u00f6\u0001\u0000\u0000\u0000\u00f7\u00f8"+ + "\u0001\u0000\u0000\u0000\u00f8\u00fa\u0001\u0000\u0000\u0000\u00f9\u00f1"+ + "\u0001\u0000\u0000\u0000\u00fa\u00fd\u0001\u0000\u0000\u0000\u00fb\u00f9"+ + "\u0001\u0000\u0000\u0000\u00fb\u00fc\u0001\u0000\u0000\u0000\u00fc\u00fe"+ + "\u0001\u0000\u0000\u0000\u00fd\u00fb\u0001\u0000\u0000\u0000\u00fe\u00ff"+ + "\u0005\"\u0000\u0000\u00ff\u001b\u0001\u0000\u0000\u0000\u0100\u0105\u0003"+ + "2\u0019\u0000\u0101\u0102\u0005\t\u0000\u0000\u0102\u0103\u0005\u000f"+ + "\u0000\u0000\u0103\u0104\u0005\t\u0000\u0000\u0104\u0106\u00032\u0019"+ + "\u0000\u0105\u0101\u0001\u0000\u0000\u0000\u0105\u0106\u0001\u0000\u0000"+ + "\u0000\u0106\u001d\u0001\u0000\u0000\u0000\u0107\u0109\u00057\u0000\u0000"+ + "\u0108\u0107\u0001\u0000\u0000\u0000\u0108\u0109\u0001\u0000\u0000\u0000"+ + "\u0109\u0111\u0001\u0000\u0000\u0000\u010a\u0112\u0003 \u0010\u0000\u010b"+ + "\u010c\u0003 \u0010\u0000\u010c\u010d\u0005\t\u0000\u0000\u010d\u010e"+ + "\u0005\u001a\u0000\u0000\u010e\u010f\u0005\t\u0000\u0000\u010f\u0110\u0003"+ + "&\u0013\u0000\u0110\u0112\u0001\u0000\u0000\u0000\u0111\u010a\u0001\u0000"+ + "\u0000\u0000\u0111\u010b\u0001\u0000\u0000\u0000\u0112\u0114\u0001\u0000"+ + "\u0000\u0000\u0113\u0115\u00057\u0000\u0000\u0114\u0113\u0001\u0000\u0000"+ + "\u0000\u0114\u0115\u0001\u0000\u0000\u0000\u0115\u001f\u0001\u0000\u0000"+ + "\u0000\u0116\u011b\u00032\u0019\u0000\u0117\u0118\u0005\u0001\u0000\u0000"+ + "\u0118\u011c\u0005*\u0000\u0000\u0119\u011a\u0005\u000b\u0000\u0000\u011a"+ + "\u011c\u00032\u0019\u0000\u011b\u0117\u0001\u0000\u0000\u0000\u011b\u0119"+ + "\u0001\u0000\u0000\u0000\u011b\u011c\u0001\u0000\u0000\u0000\u011c!\u0001"+ + "\u0000\u0000\u0000\u011d\u011f\u0003$\u0012\u0000\u011e\u011d\u0001\u0000"+ + "\u0000\u0000\u011f\u0122\u0001\u0000\u0000\u0000\u0120\u011e\u0001\u0000"+ + "\u0000\u0000\u0120\u0121\u0001\u0000\u0000\u0000\u0121#\u0001\u0000\u0000"+ + "\u0000\u0122\u0120\u0001\u0000\u0000\u0000\u0123\u0124\u00057\u0000\u0000"+ + "\u0124\u0126\u0003.\u0017\u0000\u0125\u0123\u0001\u0000\u0000\u0000\u0125"+ + "\u0126\u0001\u0000\u0000\u0000\u0126\u0127\u0001\u0000\u0000\u0000\u0127"+ + "\u0128\u00057\u0000\u0000\u0128\u0129\u0005\u0016\u0000\u0000\u0129\u012a"+ + "\u0005\t\u0000\u0000\u012a\u012c\u0003&\u0013\u0000\u012b\u012d\u0005"+ + "\t\u0000\u0000\u012c\u012b\u0001\u0000\u0000\u0000\u012c\u012d\u0001\u0000"+ + "\u0000\u0000\u012d\u012e\u0001\u0000\u0000\u0000\u012e\u0130\u0005\u0007"+ + "\u0000\u0000\u012f\u0131\u0005\t\u0000\u0000\u0130\u012f\u0001\u0000\u0000"+ + "\u0000\u0130\u0131\u0001\u0000\u0000\u0000\u0131\u0132\u0001\u0000\u0000"+ + "\u0000\u0132\u0134\u0003(\u0014\u0000\u0133\u0135\u0005\t\u0000\u0000"+ + "\u0134\u0133\u0001\u0000\u0000\u0000\u0134\u0135\u0001\u0000\u0000\u0000"+ + "\u0135\u0140\u0001\u0000\u0000\u0000\u0136\u0138\u0005\u0002\u0000\u0000"+ + "\u0137\u0139\u0005\t\u0000\u0000\u0138\u0137\u0001\u0000\u0000\u0000\u0138"+ + "\u0139\u0001\u0000\u0000\u0000\u0139\u013a\u0001\u0000\u0000\u0000\u013a"+ + "\u013c\u0003(\u0014\u0000\u013b\u013d\u0005\t\u0000\u0000\u013c\u013b"+ + "\u0001\u0000\u0000\u0000\u013c\u013d\u0001\u0000\u0000\u0000\u013d\u013f"+ + "\u0001\u0000\u0000\u0000\u013e\u0136\u0001\u0000\u0000\u0000\u013f\u0142"+ + "\u0001\u0000\u0000\u0000\u0140\u013e\u0001\u0000\u0000\u0000\u0140\u0141"+ + "\u0001\u0000\u0000\u0000\u0141\u0144\u0001\u0000\u0000\u0000\u0142\u0140"+ + "\u0001\u0000\u0000\u0000\u0143\u0145\u00057\u0000\u0000\u0144\u0143\u0001"+ + "\u0000\u0000\u0000\u0144\u0145\u0001\u0000\u0000\u0000\u0145\u0146\u0001"+ + "\u0000\u0000\u0000\u0146\u0148\u0005\b\u0000\u0000\u0147\u0149\u0005\t"+ + "\u0000\u0000\u0148\u0147\u0001\u0000\u0000\u0000\u0148\u0149\u0001\u0000"+ + "\u0000\u0000\u0149\u014a\u0001\u0000\u0000\u0000\u014a\u014c\u0005#\u0000"+ + "\u0000\u014b\u014d\u00057\u0000\u0000\u014c\u014b\u0001\u0000\u0000\u0000"+ + "\u014c\u014d\u0001\u0000\u0000\u0000\u014d\u014f\u0001\u0000\u0000\u0000"+ + "\u014e\u0150\u0005\t\u0000\u0000\u014f\u014e\u0001\u0000\u0000\u0000\u014f"+ + "\u0150\u0001\u0000\u0000\u0000\u0150\u0151\u0001\u0000\u0000\u0000\u0151"+ + "\u0153\u00034\u001a\u0000\u0152\u0154\u00057\u0000\u0000\u0153\u0152\u0001"+ + "\u0000\u0000\u0000\u0153\u0154\u0001\u0000\u0000\u0000\u0154\u0155\u0001"+ + "\u0000\u0000\u0000\u0155\u0156\u0005$\u0000\u0000\u0156%\u0001\u0000\u0000"+ + "\u0000\u0157\u0158\u0005\n\u0000\u0000\u0158\'\u0001\u0000\u0000\u0000"+ + "\u0159\u015b\u00057\u0000\u0000\u015a\u0159\u0001\u0000\u0000\u0000\u015a"+ + "\u015b\u0001\u0000\u0000\u0000\u015b\u015c\u0001\u0000\u0000\u0000\u015c"+ + "\u015e\u0003*\u0015\u0000\u015d\u015f\u0005\t\u0000\u0000\u015e\u015d"+ + "\u0001\u0000\u0000\u0000\u015e\u015f\u0001\u0000\u0000\u0000\u015f\u0160"+ + "\u0001\u0000\u0000\u0000\u0160\u0162\u0005\u0001\u0000\u0000\u0161\u0163"+ + "\u0005\t\u0000\u0000\u0162\u0161\u0001\u0000\u0000\u0000\u0162\u0163\u0001"+ + "\u0000\u0000\u0000\u0163\u0164\u0001\u0000\u0000\u0000\u0164\u0165\u0003"+ + ",\u0016\u0000\u0165)\u0001\u0000\u0000\u0000\u0166\u0167\u0005\n\u0000"+ + "\u0000\u0167+\u0001\u0000\u0000\u0000\u0168\u016e\u00059\u0000\u0000\u0169"+ + "\u016a\u00058\u0000\u0000\u016a\u016b\u0005\u0003\u0000\u0000\u016b\u016c"+ + "\u00059\u0000\u0000\u016c\u016e\u0005\u0004\u0000\u0000\u016d\u0168\u0001"+ + "\u0000\u0000\u0000\u016d\u0169\u0001\u0000\u0000\u0000\u016e-\u0001\u0000"+ + "\u0000\u0000\u016f\u0173\u0005\u000b\u0000\u0000\u0170\u0172\b\u0000\u0000"+ + "\u0000\u0171\u0170\u0001\u0000\u0000\u0000\u0172\u0175\u0001\u0000\u0000"+ + "\u0000\u0173\u0171\u0001\u0000\u0000\u0000\u0173\u0174\u0001\u0000\u0000"+ + "\u0000\u0174\u0178\u0001\u0000\u0000\u0000\u0175\u0173\u0001\u0000\u0000"+ + "\u0000\u0176\u0177\u00057\u0000\u0000\u0177\u0179\u0003.\u0017\u0000\u0178"+ + "\u0176\u0001\u0000\u0000\u0000\u0178\u0179\u0001\u0000\u0000\u0000\u0179"+ + "/\u0001\u0000\u0000\u0000\u017a\u017b\u0007\u0001\u0000\u0000\u017b1\u0001"+ + "\u0000\u0000\u0000\u017c\u017f\u00030\u0018\u0000\u017d\u017f\u00056\u0000"+ + "\u0000\u017e\u017c\u0001\u0000\u0000\u0000\u017e\u017d\u0001\u0000\u0000"+ + "\u0000\u017f3\u0001\u0000\u0000\u0000\u0180\u0183\u0007\u0002\u0000\u0000"+ + "\u0181\u0183\b\u0003\u0000\u0000\u0182\u0180\u0001\u0000\u0000\u0000\u0182"+ + "\u0181\u0001\u0000\u0000\u0000\u0183\u0186\u0001\u0000\u0000\u0000\u0184"+ + "\u0182\u0001\u0000\u0000\u0000\u0184\u0185\u0001\u0000\u0000\u0000\u0185"+ + "5\u0001\u0000\u0000\u0000\u0186\u0184\u0001\u0000\u0000\u0000B7:>AEIP"+ + "X]chmr|~\u0082\u0089\u008d\u0096\u0099\u009d\u00a0\u00a7\u00ab\u00b2\u00b6"+ + "\u00bd\u00bf\u00c7\u00cc\u00d1\u00da\u00df\u00e4\u00eb\u00ef\u00f3\u00f7"+ + "\u00fb\u0105\u0108\u0111\u0114\u011b\u0120\u0125\u012c\u0130\u0134\u0138"+ + "\u013c\u0140\u0144\u0148\u014c\u014f\u0153\u015a\u015e\u0162\u016d\u0173"+ + "\u0178\u017e\u0182\u0184"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParser.tokens b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParser.tokens index 273e2f7c..512cec30 100644 --- a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParser.tokens +++ b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParser.tokens @@ -51,9 +51,10 @@ NUM_INT=50 NUM_UINT=51 STRING=52 BYTES=53 -NEWLINE=54 -CONDITION_PARAM_CONTAINER=55 -CONDITION_PARAM_TYPE=56 +EXTENDED_IDENTIFIER=54 +NEWLINE=55 +CONDITION_PARAM_CONTAINER=56 +CONDITION_PARAM_TYPE=57 '#'=11 ':'=1 ','=2 diff --git a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParserBaseListener.java b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParserBaseListener.java index fab73bb7..3d7136d4 100644 --- a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParserBaseListener.java +++ b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParserBaseListener.java @@ -312,6 +312,18 @@ public class OpenFGAParserBaseListener implements OpenFGAParserListener { *

The default implementation does nothing.

*/ @Override public void exitIdentifier(OpenFGAParser.IdentifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExtended_identifier(OpenFGAParser.Extended_identifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExtended_identifier(OpenFGAParser.Extended_identifierContext ctx) { } /** * {@inheritDoc} * diff --git a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParserListener.java b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParserListener.java index 1b7faf5a..157fc372 100644 --- a/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParserListener.java +++ b/pkg/java/src/main/gen/dev/openfga/language/antlr/OpenFGAParserListener.java @@ -257,6 +257,16 @@ public interface OpenFGAParserListener extends ParseTreeListener { * @param ctx the parse tree */ void exitIdentifier(OpenFGAParser.IdentifierContext ctx); + /** + * Enter a parse tree produced by {@link OpenFGAParser#extended_identifier}. + * @param ctx the parse tree + */ + void enterExtended_identifier(OpenFGAParser.Extended_identifierContext ctx); + /** + * Exit a parse tree produced by {@link OpenFGAParser#extended_identifier}. + * @param ctx the parse tree + */ + void exitExtended_identifier(OpenFGAParser.Extended_identifierContext ctx); /** * Enter a parse tree produced by {@link OpenFGAParser#conditionExpression}. * @param ctx the parse tree diff --git a/pkg/js/gen/OpenFGALexer.interp b/pkg/js/gen/OpenFGALexer.interp index 25eba7b0..79d5cbb7 100644 --- a/pkg/js/gen/OpenFGALexer.interp +++ b/pkg/js/gen/OpenFGALexer.interp @@ -56,6 +56,7 @@ null null null null +null token symbolic names: null @@ -112,6 +113,7 @@ NUM_INT NUM_UINT STRING BYTES +EXTENDED_IDENTIFIER NEWLINE CONDITION_PARAM_CONTAINER CONDITION_PARAM_TYPE @@ -180,6 +182,7 @@ NUM_UINT STRING BYTES IDENTIFIER +EXTENDED_IDENTIFIER NEWLINE CONDITION_DEF_END CONDITION_PARAM_CONTAINER @@ -201,4 +204,4 @@ DEFAULT_MODE CONDITION_DEF atn: -[4, 0, 56, 694, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 4, 10, 198, 8, 10, 11, 10, 12, 10, 199, 1, 10, 1, 10, 4, 10, 204, 8, 10, 11, 10, 12, 10, 205, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 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, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 340, 8, 47, 1, 47, 4, 47, 343, 8, 47, 11, 47, 12, 47, 344, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 355, 8, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 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, 388, 8, 54, 1, 55, 4, 55, 391, 8, 55, 11, 55, 12, 55, 392, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 399, 8, 56, 10, 56, 12, 56, 402, 9, 56, 1, 56, 1, 56, 1, 57, 4, 57, 407, 8, 57, 11, 57, 12, 57, 408, 1, 57, 1, 57, 4, 57, 413, 8, 57, 11, 57, 12, 57, 414, 1, 57, 3, 57, 418, 8, 57, 1, 57, 4, 57, 421, 8, 57, 11, 57, 12, 57, 422, 1, 57, 1, 57, 1, 57, 1, 57, 4, 57, 429, 8, 57, 11, 57, 12, 57, 430, 1, 57, 3, 57, 434, 8, 57, 3, 57, 436, 8, 57, 1, 58, 4, 58, 439, 8, 58, 11, 58, 12, 58, 440, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 447, 8, 58, 11, 58, 12, 58, 448, 3, 58, 451, 8, 58, 1, 59, 4, 59, 454, 8, 59, 11, 59, 12, 59, 455, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 4, 59, 464, 8, 59, 11, 59, 12, 59, 465, 1, 59, 1, 59, 3, 59, 470, 8, 59, 1, 60, 1, 60, 1, 60, 5, 60, 475, 8, 60, 10, 60, 12, 60, 478, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 484, 8, 60, 10, 60, 12, 60, 487, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 496, 8, 60, 10, 60, 12, 60, 499, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 510, 8, 60, 10, 60, 12, 60, 513, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 521, 8, 60, 10, 60, 12, 60, 524, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 531, 8, 60, 10, 60, 12, 60, 534, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 544, 8, 60, 10, 60, 12, 60, 547, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 559, 8, 60, 10, 60, 12, 60, 562, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 568, 8, 60, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 3, 62, 575, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 581, 8, 62, 10, 62, 12, 62, 584, 9, 62, 1, 63, 3, 63, 587, 8, 63, 1, 63, 3, 63, 590, 8, 63, 1, 63, 1, 63, 3, 63, 594, 8, 63, 1, 63, 3, 63, 597, 8, 63, 1, 63, 3, 63, 600, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 614, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 665, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 4, 497, 511, 545, 560, 0, 74, 2, 11, 4, 1, 6, 2, 8, 12, 10, 13, 12, 14, 14, 15, 16, 16, 18, 17, 20, 18, 22, 19, 24, 20, 26, 21, 28, 22, 30, 23, 32, 24, 34, 25, 36, 26, 38, 27, 40, 28, 42, 29, 44, 3, 46, 30, 48, 31, 50, 4, 52, 32, 54, 33, 56, 5, 58, 34, 60, 35, 62, 36, 64, 7, 66, 8, 68, 37, 70, 38, 72, 39, 74, 40, 76, 41, 78, 42, 80, 43, 82, 44, 84, 45, 86, 46, 88, 47, 90, 0, 92, 0, 94, 0, 96, 0, 98, 0, 100, 0, 102, 0, 104, 0, 106, 0, 108, 0, 110, 0, 112, 9, 114, 48, 116, 49, 118, 50, 120, 51, 122, 52, 124, 53, 126, 10, 128, 54, 130, 0, 132, 55, 134, 56, 136, 0, 138, 0, 140, 0, 142, 0, 144, 0, 146, 0, 148, 0, 2, 0, 1, 16, 2, 0, 65, 90, 97, 122, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 82, 82, 114, 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120, 120, 3, 0, 9, 9, 12, 12, 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 1, 0, 92, 92, 3, 0, 10, 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39, 39, 2, 0, 66, 66, 98, 98, 742, 0, 2, 1, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 1, 130, 1, 0, 0, 0, 1, 132, 1, 0, 0, 0, 1, 134, 1, 0, 0, 0, 1, 136, 1, 0, 0, 0, 1, 138, 1, 0, 0, 0, 1, 140, 1, 0, 0, 0, 1, 142, 1, 0, 0, 0, 1, 144, 1, 0, 0, 0, 1, 146, 1, 0, 0, 0, 1, 148, 1, 0, 0, 0, 2, 150, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 6, 154, 1, 0, 0, 0, 8, 156, 1, 0, 0, 0, 10, 160, 1, 0, 0, 0, 12, 163, 1, 0, 0, 0, 14, 171, 1, 0, 0, 0, 16, 176, 1, 0, 0, 0, 18, 183, 1, 0, 0, 0, 20, 189, 1, 0, 0, 0, 22, 197, 1, 0, 0, 0, 24, 207, 1, 0, 0, 0, 26, 214, 1, 0, 0, 0, 28, 219, 1, 0, 0, 0, 30, 231, 1, 0, 0, 0, 32, 241, 1, 0, 0, 0, 34, 250, 1, 0, 0, 0, 36, 257, 1, 0, 0, 0, 38, 262, 1, 0, 0, 0, 40, 265, 1, 0, 0, 0, 42, 268, 1, 0, 0, 0, 44, 271, 1, 0, 0, 0, 46, 273, 1, 0, 0, 0, 48, 276, 1, 0, 0, 0, 50, 279, 1, 0, 0, 0, 52, 281, 1, 0, 0, 0, 54, 284, 1, 0, 0, 0, 56, 287, 1, 0, 0, 0, 58, 289, 1, 0, 0, 0, 60, 291, 1, 0, 0, 0, 62, 293, 1, 0, 0, 0, 64, 295, 1, 0, 0, 0, 66, 297, 1, 0, 0, 0, 68, 299, 1, 0, 0, 0, 70, 301, 1, 0, 0, 0, 72, 303, 1, 0, 0, 0, 74, 305, 1, 0, 0, 0, 76, 307, 1, 0, 0, 0, 78, 309, 1, 0, 0, 0, 80, 311, 1, 0, 0, 0, 82, 313, 1, 0, 0, 0, 84, 315, 1, 0, 0, 0, 86, 320, 1, 0, 0, 0, 88, 326, 1, 0, 0, 0, 90, 331, 1, 0, 0, 0, 92, 333, 1, 0, 0, 0, 94, 335, 1, 0, 0, 0, 96, 337, 1, 0, 0, 0, 98, 346, 1, 0, 0, 0, 100, 348, 1, 0, 0, 0, 102, 354, 1, 0, 0, 0, 104, 356, 1, 0, 0, 0, 106, 359, 1, 0, 0, 0, 108, 364, 1, 0, 0, 0, 110, 387, 1, 0, 0, 0, 112, 390, 1, 0, 0, 0, 114, 394, 1, 0, 0, 0, 116, 435, 1, 0, 0, 0, 118, 450, 1, 0, 0, 0, 120, 469, 1, 0, 0, 0, 122, 567, 1, 0, 0, 0, 124, 569, 1, 0, 0, 0, 126, 574, 1, 0, 0, 0, 128, 586, 1, 0, 0, 0, 130, 601, 1, 0, 0, 0, 132, 613, 1, 0, 0, 0, 134, 664, 1, 0, 0, 0, 136, 666, 1, 0, 0, 0, 138, 670, 1, 0, 0, 0, 140, 674, 1, 0, 0, 0, 142, 678, 1, 0, 0, 0, 144, 682, 1, 0, 0, 0, 146, 686, 1, 0, 0, 0, 148, 690, 1, 0, 0, 0, 150, 151, 5, 35, 0, 0, 151, 3, 1, 0, 0, 0, 152, 153, 5, 58, 0, 0, 153, 5, 1, 0, 0, 0, 154, 155, 5, 44, 0, 0, 155, 7, 1, 0, 0, 0, 156, 157, 5, 97, 0, 0, 157, 158, 5, 110, 0, 0, 158, 159, 5, 100, 0, 0, 159, 9, 1, 0, 0, 0, 160, 161, 5, 111, 0, 0, 161, 162, 5, 114, 0, 0, 162, 11, 1, 0, 0, 0, 163, 164, 5, 98, 0, 0, 164, 165, 5, 117, 0, 0, 165, 166, 5, 116, 0, 0, 166, 167, 5, 32, 0, 0, 167, 168, 5, 110, 0, 0, 168, 169, 5, 111, 0, 0, 169, 170, 5, 116, 0, 0, 170, 13, 1, 0, 0, 0, 171, 172, 5, 102, 0, 0, 172, 173, 5, 114, 0, 0, 173, 174, 5, 111, 0, 0, 174, 175, 5, 109, 0, 0, 175, 15, 1, 0, 0, 0, 176, 177, 5, 109, 0, 0, 177, 178, 5, 111, 0, 0, 178, 179, 5, 100, 0, 0, 179, 180, 5, 117, 0, 0, 180, 181, 5, 108, 0, 0, 181, 182, 5, 101, 0, 0, 182, 17, 1, 0, 0, 0, 183, 184, 5, 109, 0, 0, 184, 185, 5, 111, 0, 0, 185, 186, 5, 100, 0, 0, 186, 187, 5, 101, 0, 0, 187, 188, 5, 108, 0, 0, 188, 19, 1, 0, 0, 0, 189, 190, 5, 115, 0, 0, 190, 191, 5, 99, 0, 0, 191, 192, 5, 104, 0, 0, 192, 193, 5, 101, 0, 0, 193, 194, 5, 109, 0, 0, 194, 195, 5, 97, 0, 0, 195, 21, 1, 0, 0, 0, 196, 198, 3, 94, 46, 0, 197, 196, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 203, 5, 46, 0, 0, 202, 204, 3, 94, 46, 0, 203, 202, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 203, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 23, 1, 0, 0, 0, 207, 208, 5, 101, 0, 0, 208, 209, 5, 120, 0, 0, 209, 210, 5, 116, 0, 0, 210, 211, 5, 101, 0, 0, 211, 212, 5, 110, 0, 0, 212, 213, 5, 100, 0, 0, 213, 25, 1, 0, 0, 0, 214, 215, 5, 116, 0, 0, 215, 216, 5, 121, 0, 0, 216, 217, 5, 112, 0, 0, 217, 218, 5, 101, 0, 0, 218, 27, 1, 0, 0, 0, 219, 220, 5, 99, 0, 0, 220, 221, 5, 111, 0, 0, 221, 222, 5, 110, 0, 0, 222, 223, 5, 100, 0, 0, 223, 224, 5, 105, 0, 0, 224, 225, 5, 116, 0, 0, 225, 226, 5, 105, 0, 0, 226, 227, 5, 111, 0, 0, 227, 228, 5, 110, 0, 0, 228, 229, 1, 0, 0, 0, 229, 230, 6, 13, 0, 0, 230, 29, 1, 0, 0, 0, 231, 232, 5, 114, 0, 0, 232, 233, 5, 101, 0, 0, 233, 234, 5, 108, 0, 0, 234, 235, 5, 97, 0, 0, 235, 236, 5, 116, 0, 0, 236, 237, 5, 105, 0, 0, 237, 238, 5, 111, 0, 0, 238, 239, 5, 110, 0, 0, 239, 240, 5, 115, 0, 0, 240, 31, 1, 0, 0, 0, 241, 242, 5, 114, 0, 0, 242, 243, 5, 101, 0, 0, 243, 244, 5, 108, 0, 0, 244, 245, 5, 97, 0, 0, 245, 246, 5, 116, 0, 0, 246, 247, 5, 105, 0, 0, 247, 248, 5, 111, 0, 0, 248, 249, 5, 110, 0, 0, 249, 33, 1, 0, 0, 0, 250, 251, 5, 100, 0, 0, 251, 252, 5, 101, 0, 0, 252, 253, 5, 102, 0, 0, 253, 254, 5, 105, 0, 0, 254, 255, 5, 110, 0, 0, 255, 256, 5, 101, 0, 0, 256, 35, 1, 0, 0, 0, 257, 258, 5, 119, 0, 0, 258, 259, 5, 105, 0, 0, 259, 260, 5, 116, 0, 0, 260, 261, 5, 104, 0, 0, 261, 37, 1, 0, 0, 0, 262, 263, 5, 61, 0, 0, 263, 264, 5, 61, 0, 0, 264, 39, 1, 0, 0, 0, 265, 266, 5, 33, 0, 0, 266, 267, 5, 61, 0, 0, 267, 41, 1, 0, 0, 0, 268, 269, 5, 105, 0, 0, 269, 270, 5, 110, 0, 0, 270, 43, 1, 0, 0, 0, 271, 272, 5, 60, 0, 0, 272, 45, 1, 0, 0, 0, 273, 274, 5, 60, 0, 0, 274, 275, 5, 61, 0, 0, 275, 47, 1, 0, 0, 0, 276, 277, 5, 62, 0, 0, 277, 278, 5, 61, 0, 0, 278, 49, 1, 0, 0, 0, 279, 280, 5, 62, 0, 0, 280, 51, 1, 0, 0, 0, 281, 282, 5, 38, 0, 0, 282, 283, 5, 38, 0, 0, 283, 53, 1, 0, 0, 0, 284, 285, 5, 124, 0, 0, 285, 286, 5, 124, 0, 0, 286, 55, 1, 0, 0, 0, 287, 288, 5, 91, 0, 0, 288, 57, 1, 0, 0, 0, 289, 290, 5, 93, 0, 0, 290, 59, 1, 0, 0, 0, 291, 292, 5, 123, 0, 0, 292, 61, 1, 0, 0, 0, 293, 294, 5, 125, 0, 0, 294, 63, 1, 0, 0, 0, 295, 296, 5, 40, 0, 0, 296, 65, 1, 0, 0, 0, 297, 298, 5, 41, 0, 0, 298, 67, 1, 0, 0, 0, 299, 300, 5, 46, 0, 0, 300, 69, 1, 0, 0, 0, 301, 302, 5, 45, 0, 0, 302, 71, 1, 0, 0, 0, 303, 304, 5, 33, 0, 0, 304, 73, 1, 0, 0, 0, 305, 306, 5, 63, 0, 0, 306, 75, 1, 0, 0, 0, 307, 308, 5, 43, 0, 0, 308, 77, 1, 0, 0, 0, 309, 310, 5, 42, 0, 0, 310, 79, 1, 0, 0, 0, 311, 312, 5, 47, 0, 0, 312, 81, 1, 0, 0, 0, 313, 314, 5, 37, 0, 0, 314, 83, 1, 0, 0, 0, 315, 316, 5, 116, 0, 0, 316, 317, 5, 114, 0, 0, 317, 318, 5, 117, 0, 0, 318, 319, 5, 101, 0, 0, 319, 85, 1, 0, 0, 0, 320, 321, 5, 102, 0, 0, 321, 322, 5, 97, 0, 0, 322, 323, 5, 108, 0, 0, 323, 324, 5, 115, 0, 0, 324, 325, 5, 101, 0, 0, 325, 87, 1, 0, 0, 0, 326, 327, 5, 110, 0, 0, 327, 328, 5, 117, 0, 0, 328, 329, 5, 108, 0, 0, 329, 330, 5, 108, 0, 0, 330, 89, 1, 0, 0, 0, 331, 332, 5, 92, 0, 0, 332, 91, 1, 0, 0, 0, 333, 334, 7, 0, 0, 0, 334, 93, 1, 0, 0, 0, 335, 336, 2, 48, 57, 0, 336, 95, 1, 0, 0, 0, 337, 339, 7, 1, 0, 0, 338, 340, 7, 2, 0, 0, 339, 338, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 1, 0, 0, 0, 341, 343, 3, 94, 46, 0, 342, 341, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 342, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 97, 1, 0, 0, 0, 346, 347, 7, 3, 0, 0, 347, 99, 1, 0, 0, 0, 348, 349, 7, 4, 0, 0, 349, 101, 1, 0, 0, 0, 350, 355, 3, 104, 51, 0, 351, 355, 3, 108, 53, 0, 352, 355, 3, 110, 54, 0, 353, 355, 3, 106, 52, 0, 354, 350, 1, 0, 0, 0, 354, 351, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 353, 1, 0, 0, 0, 355, 103, 1, 0, 0, 0, 356, 357, 3, 90, 44, 0, 357, 358, 7, 5, 0, 0, 358, 105, 1, 0, 0, 0, 359, 360, 3, 90, 44, 0, 360, 361, 2, 48, 51, 0, 361, 362, 2, 48, 55, 0, 362, 363, 2, 48, 55, 0, 363, 107, 1, 0, 0, 0, 364, 365, 3, 90, 44, 0, 365, 366, 7, 6, 0, 0, 366, 367, 3, 98, 48, 0, 367, 368, 3, 98, 48, 0, 368, 109, 1, 0, 0, 0, 369, 370, 3, 90, 44, 0, 370, 371, 5, 117, 0, 0, 371, 372, 3, 98, 48, 0, 372, 373, 3, 98, 48, 0, 373, 374, 3, 98, 48, 0, 374, 375, 3, 98, 48, 0, 375, 388, 1, 0, 0, 0, 376, 377, 3, 90, 44, 0, 377, 378, 5, 85, 0, 0, 378, 379, 3, 98, 48, 0, 379, 380, 3, 98, 48, 0, 380, 381, 3, 98, 48, 0, 381, 382, 3, 98, 48, 0, 382, 383, 3, 98, 48, 0, 383, 384, 3, 98, 48, 0, 384, 385, 3, 98, 48, 0, 385, 386, 3, 98, 48, 0, 386, 388, 1, 0, 0, 0, 387, 369, 1, 0, 0, 0, 387, 376, 1, 0, 0, 0, 388, 111, 1, 0, 0, 0, 389, 391, 7, 7, 0, 0, 390, 389, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 113, 1, 0, 0, 0, 394, 395, 5, 47, 0, 0, 395, 396, 5, 47, 0, 0, 396, 400, 1, 0, 0, 0, 397, 399, 8, 8, 0, 0, 398, 397, 1, 0, 0, 0, 399, 402, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 403, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 403, 404, 6, 56, 1, 0, 404, 115, 1, 0, 0, 0, 405, 407, 3, 94, 46, 0, 406, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 406, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 412, 5, 46, 0, 0, 411, 413, 3, 94, 46, 0, 412, 411, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 417, 1, 0, 0, 0, 416, 418, 3, 96, 47, 0, 417, 416, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 436, 1, 0, 0, 0, 419, 421, 3, 94, 46, 0, 420, 419, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 425, 3, 96, 47, 0, 425, 436, 1, 0, 0, 0, 426, 428, 5, 46, 0, 0, 427, 429, 3, 94, 46, 0, 428, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 433, 1, 0, 0, 0, 432, 434, 3, 96, 47, 0, 433, 432, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 406, 1, 0, 0, 0, 435, 420, 1, 0, 0, 0, 435, 426, 1, 0, 0, 0, 436, 117, 1, 0, 0, 0, 437, 439, 3, 94, 46, 0, 438, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 438, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 451, 1, 0, 0, 0, 442, 443, 5, 48, 0, 0, 443, 444, 5, 120, 0, 0, 444, 446, 1, 0, 0, 0, 445, 447, 3, 98, 48, 0, 446, 445, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 446, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 451, 1, 0, 0, 0, 450, 438, 1, 0, 0, 0, 450, 442, 1, 0, 0, 0, 451, 119, 1, 0, 0, 0, 452, 454, 3, 94, 46, 0, 453, 452, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, 455, 456, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 458, 7, 9, 0, 0, 458, 470, 1, 0, 0, 0, 459, 460, 5, 48, 0, 0, 460, 461, 5, 120, 0, 0, 461, 463, 1, 0, 0, 0, 462, 464, 3, 98, 48, 0, 463, 462, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 463, 1, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 468, 7, 9, 0, 0, 468, 470, 1, 0, 0, 0, 469, 453, 1, 0, 0, 0, 469, 459, 1, 0, 0, 0, 470, 121, 1, 0, 0, 0, 471, 476, 5, 34, 0, 0, 472, 475, 3, 102, 50, 0, 473, 475, 8, 10, 0, 0, 474, 472, 1, 0, 0, 0, 474, 473, 1, 0, 0, 0, 475, 478, 1, 0, 0, 0, 476, 474, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 479, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 479, 568, 5, 34, 0, 0, 480, 485, 5, 39, 0, 0, 481, 484, 3, 102, 50, 0, 482, 484, 8, 11, 0, 0, 483, 481, 1, 0, 0, 0, 483, 482, 1, 0, 0, 0, 484, 487, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 488, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 488, 568, 5, 39, 0, 0, 489, 490, 5, 34, 0, 0, 490, 491, 5, 34, 0, 0, 491, 492, 5, 34, 0, 0, 492, 497, 1, 0, 0, 0, 493, 496, 3, 102, 50, 0, 494, 496, 8, 12, 0, 0, 495, 493, 1, 0, 0, 0, 495, 494, 1, 0, 0, 0, 496, 499, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 498, 500, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 501, 5, 34, 0, 0, 501, 502, 5, 34, 0, 0, 502, 568, 5, 34, 0, 0, 503, 504, 5, 39, 0, 0, 504, 505, 5, 39, 0, 0, 505, 506, 5, 39, 0, 0, 506, 511, 1, 0, 0, 0, 507, 510, 3, 102, 50, 0, 508, 510, 8, 12, 0, 0, 509, 507, 1, 0, 0, 0, 509, 508, 1, 0, 0, 0, 510, 513, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 512, 514, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 514, 515, 5, 39, 0, 0, 515, 516, 5, 39, 0, 0, 516, 568, 5, 39, 0, 0, 517, 518, 3, 100, 49, 0, 518, 522, 5, 34, 0, 0, 519, 521, 8, 13, 0, 0, 520, 519, 1, 0, 0, 0, 521, 524, 1, 0, 0, 0, 522, 520, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 525, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 525, 526, 5, 34, 0, 0, 526, 568, 1, 0, 0, 0, 527, 528, 3, 100, 49, 0, 528, 532, 5, 39, 0, 0, 529, 531, 8, 14, 0, 0, 530, 529, 1, 0, 0, 0, 531, 534, 1, 0, 0, 0, 532, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 535, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 535, 536, 5, 39, 0, 0, 536, 568, 1, 0, 0, 0, 537, 538, 3, 100, 49, 0, 538, 539, 5, 34, 0, 0, 539, 540, 5, 34, 0, 0, 540, 541, 5, 34, 0, 0, 541, 545, 1, 0, 0, 0, 542, 544, 9, 0, 0, 0, 543, 542, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 546, 548, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 549, 5, 34, 0, 0, 549, 550, 5, 34, 0, 0, 550, 551, 5, 34, 0, 0, 551, 568, 1, 0, 0, 0, 552, 553, 3, 100, 49, 0, 553, 554, 5, 39, 0, 0, 554, 555, 5, 39, 0, 0, 555, 556, 5, 39, 0, 0, 556, 560, 1, 0, 0, 0, 557, 559, 9, 0, 0, 0, 558, 557, 1, 0, 0, 0, 559, 562, 1, 0, 0, 0, 560, 561, 1, 0, 0, 0, 560, 558, 1, 0, 0, 0, 561, 563, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 563, 564, 5, 39, 0, 0, 564, 565, 5, 39, 0, 0, 565, 566, 5, 39, 0, 0, 566, 568, 1, 0, 0, 0, 567, 471, 1, 0, 0, 0, 567, 480, 1, 0, 0, 0, 567, 489, 1, 0, 0, 0, 567, 503, 1, 0, 0, 0, 567, 517, 1, 0, 0, 0, 567, 527, 1, 0, 0, 0, 567, 537, 1, 0, 0, 0, 567, 552, 1, 0, 0, 0, 568, 123, 1, 0, 0, 0, 569, 570, 7, 15, 0, 0, 570, 571, 3, 122, 60, 0, 571, 125, 1, 0, 0, 0, 572, 575, 3, 92, 45, 0, 573, 575, 5, 95, 0, 0, 574, 572, 1, 0, 0, 0, 574, 573, 1, 0, 0, 0, 575, 582, 1, 0, 0, 0, 576, 581, 3, 92, 45, 0, 577, 581, 3, 94, 46, 0, 578, 581, 5, 95, 0, 0, 579, 581, 3, 70, 34, 0, 580, 576, 1, 0, 0, 0, 580, 577, 1, 0, 0, 0, 580, 578, 1, 0, 0, 0, 580, 579, 1, 0, 0, 0, 581, 584, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 582, 583, 1, 0, 0, 0, 583, 127, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 585, 587, 3, 112, 55, 0, 586, 585, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 593, 1, 0, 0, 0, 588, 590, 5, 13, 0, 0, 589, 588, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 594, 5, 10, 0, 0, 592, 594, 2, 12, 13, 0, 593, 589, 1, 0, 0, 0, 593, 592, 1, 0, 0, 0, 594, 596, 1, 0, 0, 0, 595, 597, 3, 112, 55, 0, 596, 595, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 599, 1, 0, 0, 0, 598, 600, 3, 128, 63, 0, 599, 598, 1, 0, 0, 0, 599, 600, 1, 0, 0, 0, 600, 129, 1, 0, 0, 0, 601, 602, 3, 66, 32, 0, 602, 603, 1, 0, 0, 0, 603, 604, 6, 64, 2, 0, 604, 605, 6, 64, 3, 0, 605, 131, 1, 0, 0, 0, 606, 607, 5, 109, 0, 0, 607, 608, 5, 97, 0, 0, 608, 614, 5, 112, 0, 0, 609, 610, 5, 108, 0, 0, 610, 611, 5, 105, 0, 0, 611, 612, 5, 115, 0, 0, 612, 614, 5, 116, 0, 0, 613, 606, 1, 0, 0, 0, 613, 609, 1, 0, 0, 0, 614, 133, 1, 0, 0, 0, 615, 616, 5, 98, 0, 0, 616, 617, 5, 111, 0, 0, 617, 618, 5, 111, 0, 0, 618, 665, 5, 108, 0, 0, 619, 620, 5, 115, 0, 0, 620, 621, 5, 116, 0, 0, 621, 622, 5, 114, 0, 0, 622, 623, 5, 105, 0, 0, 623, 624, 5, 110, 0, 0, 624, 665, 5, 103, 0, 0, 625, 626, 5, 105, 0, 0, 626, 627, 5, 110, 0, 0, 627, 665, 5, 116, 0, 0, 628, 629, 5, 117, 0, 0, 629, 630, 5, 105, 0, 0, 630, 631, 5, 110, 0, 0, 631, 665, 5, 116, 0, 0, 632, 633, 5, 100, 0, 0, 633, 634, 5, 111, 0, 0, 634, 635, 5, 117, 0, 0, 635, 636, 5, 98, 0, 0, 636, 637, 5, 108, 0, 0, 637, 665, 5, 101, 0, 0, 638, 639, 5, 100, 0, 0, 639, 640, 5, 117, 0, 0, 640, 641, 5, 114, 0, 0, 641, 642, 5, 97, 0, 0, 642, 643, 5, 116, 0, 0, 643, 644, 5, 105, 0, 0, 644, 645, 5, 111, 0, 0, 645, 665, 5, 110, 0, 0, 646, 647, 5, 116, 0, 0, 647, 648, 5, 105, 0, 0, 648, 649, 5, 109, 0, 0, 649, 650, 5, 101, 0, 0, 650, 651, 5, 115, 0, 0, 651, 652, 5, 116, 0, 0, 652, 653, 5, 97, 0, 0, 653, 654, 5, 109, 0, 0, 654, 665, 5, 112, 0, 0, 655, 656, 5, 105, 0, 0, 656, 657, 5, 112, 0, 0, 657, 658, 5, 97, 0, 0, 658, 659, 5, 100, 0, 0, 659, 660, 5, 100, 0, 0, 660, 661, 5, 114, 0, 0, 661, 662, 5, 101, 0, 0, 662, 663, 5, 115, 0, 0, 663, 665, 5, 115, 0, 0, 664, 615, 1, 0, 0, 0, 664, 619, 1, 0, 0, 0, 664, 625, 1, 0, 0, 0, 664, 628, 1, 0, 0, 0, 664, 632, 1, 0, 0, 0, 664, 638, 1, 0, 0, 0, 664, 646, 1, 0, 0, 0, 664, 655, 1, 0, 0, 0, 665, 135, 1, 0, 0, 0, 666, 667, 3, 44, 21, 0, 667, 668, 1, 0, 0, 0, 668, 669, 6, 67, 4, 0, 669, 137, 1, 0, 0, 0, 670, 671, 3, 50, 24, 0, 671, 672, 1, 0, 0, 0, 672, 673, 6, 68, 5, 0, 673, 139, 1, 0, 0, 0, 674, 675, 3, 64, 31, 0, 675, 676, 1, 0, 0, 0, 676, 677, 6, 69, 6, 0, 677, 141, 1, 0, 0, 0, 678, 679, 3, 4, 1, 0, 679, 680, 1, 0, 0, 0, 680, 681, 6, 70, 7, 0, 681, 143, 1, 0, 0, 0, 682, 683, 3, 6, 2, 0, 683, 684, 1, 0, 0, 0, 684, 685, 6, 71, 8, 0, 685, 145, 1, 0, 0, 0, 686, 687, 3, 112, 55, 0, 687, 688, 1, 0, 0, 0, 688, 689, 6, 72, 9, 0, 689, 147, 1, 0, 0, 0, 690, 691, 3, 126, 62, 0, 691, 692, 1, 0, 0, 0, 692, 693, 6, 73, 10, 0, 693, 149, 1, 0, 0, 0, 46, 0, 1, 199, 205, 339, 344, 354, 387, 392, 400, 408, 414, 417, 422, 430, 433, 435, 440, 448, 450, 455, 465, 469, 474, 476, 483, 485, 495, 497, 509, 511, 522, 532, 545, 560, 567, 574, 580, 582, 586, 589, 593, 596, 599, 613, 664, 11, 5, 1, 0, 0, 1, 0, 7, 8, 0, 4, 0, 0, 7, 3, 0, 7, 4, 0, 7, 7, 0, 7, 1, 0, 7, 2, 0, 7, 9, 0, 7, 10, 0] \ No newline at end of file +[4, 0, 57, 717, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 4, 10, 200, 8, 10, 11, 10, 12, 10, 201, 1, 10, 1, 10, 4, 10, 206, 8, 10, 11, 10, 12, 10, 207, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 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, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 342, 8, 47, 1, 47, 4, 47, 345, 8, 47, 11, 47, 12, 47, 346, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 357, 8, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 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, 390, 8, 54, 1, 55, 4, 55, 393, 8, 55, 11, 55, 12, 55, 394, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 401, 8, 56, 10, 56, 12, 56, 404, 9, 56, 1, 56, 1, 56, 1, 57, 4, 57, 409, 8, 57, 11, 57, 12, 57, 410, 1, 57, 1, 57, 4, 57, 415, 8, 57, 11, 57, 12, 57, 416, 1, 57, 3, 57, 420, 8, 57, 1, 57, 4, 57, 423, 8, 57, 11, 57, 12, 57, 424, 1, 57, 1, 57, 1, 57, 1, 57, 4, 57, 431, 8, 57, 11, 57, 12, 57, 432, 1, 57, 3, 57, 436, 8, 57, 3, 57, 438, 8, 57, 1, 58, 4, 58, 441, 8, 58, 11, 58, 12, 58, 442, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 449, 8, 58, 11, 58, 12, 58, 450, 3, 58, 453, 8, 58, 1, 59, 4, 59, 456, 8, 59, 11, 59, 12, 59, 457, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 4, 59, 466, 8, 59, 11, 59, 12, 59, 467, 1, 59, 1, 59, 3, 59, 472, 8, 59, 1, 60, 1, 60, 1, 60, 5, 60, 477, 8, 60, 10, 60, 12, 60, 480, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 486, 8, 60, 10, 60, 12, 60, 489, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 498, 8, 60, 10, 60, 12, 60, 501, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 512, 8, 60, 10, 60, 12, 60, 515, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 523, 8, 60, 10, 60, 12, 60, 526, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 533, 8, 60, 10, 60, 12, 60, 536, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 546, 8, 60, 10, 60, 12, 60, 549, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 561, 8, 60, 10, 60, 12, 60, 564, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 570, 8, 60, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 3, 62, 577, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 583, 8, 62, 10, 62, 12, 62, 586, 9, 62, 1, 63, 1, 63, 3, 63, 590, 8, 63, 1, 63, 1, 63, 1, 63, 3, 63, 595, 8, 63, 1, 63, 1, 63, 1, 63, 4, 63, 600, 8, 63, 11, 63, 12, 63, 601, 5, 63, 604, 8, 63, 10, 63, 12, 63, 607, 9, 63, 1, 64, 3, 64, 610, 8, 64, 1, 64, 3, 64, 613, 8, 64, 1, 64, 1, 64, 3, 64, 617, 8, 64, 1, 64, 3, 64, 620, 8, 64, 1, 64, 3, 64, 623, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 637, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 688, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 4, 499, 513, 547, 562, 0, 75, 2, 11, 4, 1, 6, 2, 8, 12, 10, 13, 12, 14, 14, 15, 16, 16, 18, 17, 20, 18, 22, 19, 24, 20, 26, 21, 28, 22, 30, 23, 32, 24, 34, 25, 36, 26, 38, 27, 40, 28, 42, 29, 44, 3, 46, 30, 48, 31, 50, 4, 52, 32, 54, 33, 56, 5, 58, 34, 60, 35, 62, 36, 64, 7, 66, 8, 68, 37, 70, 38, 72, 39, 74, 40, 76, 41, 78, 42, 80, 43, 82, 44, 84, 45, 86, 46, 88, 47, 90, 0, 92, 0, 94, 0, 96, 0, 98, 0, 100, 0, 102, 0, 104, 0, 106, 0, 108, 0, 110, 0, 112, 9, 114, 48, 116, 49, 118, 50, 120, 51, 122, 52, 124, 53, 126, 10, 128, 54, 130, 55, 132, 0, 134, 56, 136, 57, 138, 0, 140, 0, 142, 0, 144, 0, 146, 0, 148, 0, 150, 0, 2, 0, 1, 16, 2, 0, 65, 90, 97, 122, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 82, 82, 114, 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120, 120, 3, 0, 9, 9, 12, 12, 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 1, 0, 92, 92, 3, 0, 10, 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39, 39, 2, 0, 66, 66, 98, 98, 773, 0, 2, 1, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 130, 1, 0, 0, 0, 1, 132, 1, 0, 0, 0, 1, 134, 1, 0, 0, 0, 1, 136, 1, 0, 0, 0, 1, 138, 1, 0, 0, 0, 1, 140, 1, 0, 0, 0, 1, 142, 1, 0, 0, 0, 1, 144, 1, 0, 0, 0, 1, 146, 1, 0, 0, 0, 1, 148, 1, 0, 0, 0, 1, 150, 1, 0, 0, 0, 2, 152, 1, 0, 0, 0, 4, 154, 1, 0, 0, 0, 6, 156, 1, 0, 0, 0, 8, 158, 1, 0, 0, 0, 10, 162, 1, 0, 0, 0, 12, 165, 1, 0, 0, 0, 14, 173, 1, 0, 0, 0, 16, 178, 1, 0, 0, 0, 18, 185, 1, 0, 0, 0, 20, 191, 1, 0, 0, 0, 22, 199, 1, 0, 0, 0, 24, 209, 1, 0, 0, 0, 26, 216, 1, 0, 0, 0, 28, 221, 1, 0, 0, 0, 30, 233, 1, 0, 0, 0, 32, 243, 1, 0, 0, 0, 34, 252, 1, 0, 0, 0, 36, 259, 1, 0, 0, 0, 38, 264, 1, 0, 0, 0, 40, 267, 1, 0, 0, 0, 42, 270, 1, 0, 0, 0, 44, 273, 1, 0, 0, 0, 46, 275, 1, 0, 0, 0, 48, 278, 1, 0, 0, 0, 50, 281, 1, 0, 0, 0, 52, 283, 1, 0, 0, 0, 54, 286, 1, 0, 0, 0, 56, 289, 1, 0, 0, 0, 58, 291, 1, 0, 0, 0, 60, 293, 1, 0, 0, 0, 62, 295, 1, 0, 0, 0, 64, 297, 1, 0, 0, 0, 66, 299, 1, 0, 0, 0, 68, 301, 1, 0, 0, 0, 70, 303, 1, 0, 0, 0, 72, 305, 1, 0, 0, 0, 74, 307, 1, 0, 0, 0, 76, 309, 1, 0, 0, 0, 78, 311, 1, 0, 0, 0, 80, 313, 1, 0, 0, 0, 82, 315, 1, 0, 0, 0, 84, 317, 1, 0, 0, 0, 86, 322, 1, 0, 0, 0, 88, 328, 1, 0, 0, 0, 90, 333, 1, 0, 0, 0, 92, 335, 1, 0, 0, 0, 94, 337, 1, 0, 0, 0, 96, 339, 1, 0, 0, 0, 98, 348, 1, 0, 0, 0, 100, 350, 1, 0, 0, 0, 102, 356, 1, 0, 0, 0, 104, 358, 1, 0, 0, 0, 106, 361, 1, 0, 0, 0, 108, 366, 1, 0, 0, 0, 110, 389, 1, 0, 0, 0, 112, 392, 1, 0, 0, 0, 114, 396, 1, 0, 0, 0, 116, 437, 1, 0, 0, 0, 118, 452, 1, 0, 0, 0, 120, 471, 1, 0, 0, 0, 122, 569, 1, 0, 0, 0, 124, 571, 1, 0, 0, 0, 126, 576, 1, 0, 0, 0, 128, 589, 1, 0, 0, 0, 130, 609, 1, 0, 0, 0, 132, 624, 1, 0, 0, 0, 134, 636, 1, 0, 0, 0, 136, 687, 1, 0, 0, 0, 138, 689, 1, 0, 0, 0, 140, 693, 1, 0, 0, 0, 142, 697, 1, 0, 0, 0, 144, 701, 1, 0, 0, 0, 146, 705, 1, 0, 0, 0, 148, 709, 1, 0, 0, 0, 150, 713, 1, 0, 0, 0, 152, 153, 5, 35, 0, 0, 153, 3, 1, 0, 0, 0, 154, 155, 5, 58, 0, 0, 155, 5, 1, 0, 0, 0, 156, 157, 5, 44, 0, 0, 157, 7, 1, 0, 0, 0, 158, 159, 5, 97, 0, 0, 159, 160, 5, 110, 0, 0, 160, 161, 5, 100, 0, 0, 161, 9, 1, 0, 0, 0, 162, 163, 5, 111, 0, 0, 163, 164, 5, 114, 0, 0, 164, 11, 1, 0, 0, 0, 165, 166, 5, 98, 0, 0, 166, 167, 5, 117, 0, 0, 167, 168, 5, 116, 0, 0, 168, 169, 5, 32, 0, 0, 169, 170, 5, 110, 0, 0, 170, 171, 5, 111, 0, 0, 171, 172, 5, 116, 0, 0, 172, 13, 1, 0, 0, 0, 173, 174, 5, 102, 0, 0, 174, 175, 5, 114, 0, 0, 175, 176, 5, 111, 0, 0, 176, 177, 5, 109, 0, 0, 177, 15, 1, 0, 0, 0, 178, 179, 5, 109, 0, 0, 179, 180, 5, 111, 0, 0, 180, 181, 5, 100, 0, 0, 181, 182, 5, 117, 0, 0, 182, 183, 5, 108, 0, 0, 183, 184, 5, 101, 0, 0, 184, 17, 1, 0, 0, 0, 185, 186, 5, 109, 0, 0, 186, 187, 5, 111, 0, 0, 187, 188, 5, 100, 0, 0, 188, 189, 5, 101, 0, 0, 189, 190, 5, 108, 0, 0, 190, 19, 1, 0, 0, 0, 191, 192, 5, 115, 0, 0, 192, 193, 5, 99, 0, 0, 193, 194, 5, 104, 0, 0, 194, 195, 5, 101, 0, 0, 195, 196, 5, 109, 0, 0, 196, 197, 5, 97, 0, 0, 197, 21, 1, 0, 0, 0, 198, 200, 3, 94, 46, 0, 199, 198, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 205, 5, 46, 0, 0, 204, 206, 3, 94, 46, 0, 205, 204, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 205, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 23, 1, 0, 0, 0, 209, 210, 5, 101, 0, 0, 210, 211, 5, 120, 0, 0, 211, 212, 5, 116, 0, 0, 212, 213, 5, 101, 0, 0, 213, 214, 5, 110, 0, 0, 214, 215, 5, 100, 0, 0, 215, 25, 1, 0, 0, 0, 216, 217, 5, 116, 0, 0, 217, 218, 5, 121, 0, 0, 218, 219, 5, 112, 0, 0, 219, 220, 5, 101, 0, 0, 220, 27, 1, 0, 0, 0, 221, 222, 5, 99, 0, 0, 222, 223, 5, 111, 0, 0, 223, 224, 5, 110, 0, 0, 224, 225, 5, 100, 0, 0, 225, 226, 5, 105, 0, 0, 226, 227, 5, 116, 0, 0, 227, 228, 5, 105, 0, 0, 228, 229, 5, 111, 0, 0, 229, 230, 5, 110, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 6, 13, 0, 0, 232, 29, 1, 0, 0, 0, 233, 234, 5, 114, 0, 0, 234, 235, 5, 101, 0, 0, 235, 236, 5, 108, 0, 0, 236, 237, 5, 97, 0, 0, 237, 238, 5, 116, 0, 0, 238, 239, 5, 105, 0, 0, 239, 240, 5, 111, 0, 0, 240, 241, 5, 110, 0, 0, 241, 242, 5, 115, 0, 0, 242, 31, 1, 0, 0, 0, 243, 244, 5, 114, 0, 0, 244, 245, 5, 101, 0, 0, 245, 246, 5, 108, 0, 0, 246, 247, 5, 97, 0, 0, 247, 248, 5, 116, 0, 0, 248, 249, 5, 105, 0, 0, 249, 250, 5, 111, 0, 0, 250, 251, 5, 110, 0, 0, 251, 33, 1, 0, 0, 0, 252, 253, 5, 100, 0, 0, 253, 254, 5, 101, 0, 0, 254, 255, 5, 102, 0, 0, 255, 256, 5, 105, 0, 0, 256, 257, 5, 110, 0, 0, 257, 258, 5, 101, 0, 0, 258, 35, 1, 0, 0, 0, 259, 260, 5, 119, 0, 0, 260, 261, 5, 105, 0, 0, 261, 262, 5, 116, 0, 0, 262, 263, 5, 104, 0, 0, 263, 37, 1, 0, 0, 0, 264, 265, 5, 61, 0, 0, 265, 266, 5, 61, 0, 0, 266, 39, 1, 0, 0, 0, 267, 268, 5, 33, 0, 0, 268, 269, 5, 61, 0, 0, 269, 41, 1, 0, 0, 0, 270, 271, 5, 105, 0, 0, 271, 272, 5, 110, 0, 0, 272, 43, 1, 0, 0, 0, 273, 274, 5, 60, 0, 0, 274, 45, 1, 0, 0, 0, 275, 276, 5, 60, 0, 0, 276, 277, 5, 61, 0, 0, 277, 47, 1, 0, 0, 0, 278, 279, 5, 62, 0, 0, 279, 280, 5, 61, 0, 0, 280, 49, 1, 0, 0, 0, 281, 282, 5, 62, 0, 0, 282, 51, 1, 0, 0, 0, 283, 284, 5, 38, 0, 0, 284, 285, 5, 38, 0, 0, 285, 53, 1, 0, 0, 0, 286, 287, 5, 124, 0, 0, 287, 288, 5, 124, 0, 0, 288, 55, 1, 0, 0, 0, 289, 290, 5, 91, 0, 0, 290, 57, 1, 0, 0, 0, 291, 292, 5, 93, 0, 0, 292, 59, 1, 0, 0, 0, 293, 294, 5, 123, 0, 0, 294, 61, 1, 0, 0, 0, 295, 296, 5, 125, 0, 0, 296, 63, 1, 0, 0, 0, 297, 298, 5, 40, 0, 0, 298, 65, 1, 0, 0, 0, 299, 300, 5, 41, 0, 0, 300, 67, 1, 0, 0, 0, 301, 302, 5, 46, 0, 0, 302, 69, 1, 0, 0, 0, 303, 304, 5, 45, 0, 0, 304, 71, 1, 0, 0, 0, 305, 306, 5, 33, 0, 0, 306, 73, 1, 0, 0, 0, 307, 308, 5, 63, 0, 0, 308, 75, 1, 0, 0, 0, 309, 310, 5, 43, 0, 0, 310, 77, 1, 0, 0, 0, 311, 312, 5, 42, 0, 0, 312, 79, 1, 0, 0, 0, 313, 314, 5, 47, 0, 0, 314, 81, 1, 0, 0, 0, 315, 316, 5, 37, 0, 0, 316, 83, 1, 0, 0, 0, 317, 318, 5, 116, 0, 0, 318, 319, 5, 114, 0, 0, 319, 320, 5, 117, 0, 0, 320, 321, 5, 101, 0, 0, 321, 85, 1, 0, 0, 0, 322, 323, 5, 102, 0, 0, 323, 324, 5, 97, 0, 0, 324, 325, 5, 108, 0, 0, 325, 326, 5, 115, 0, 0, 326, 327, 5, 101, 0, 0, 327, 87, 1, 0, 0, 0, 328, 329, 5, 110, 0, 0, 329, 330, 5, 117, 0, 0, 330, 331, 5, 108, 0, 0, 331, 332, 5, 108, 0, 0, 332, 89, 1, 0, 0, 0, 333, 334, 5, 92, 0, 0, 334, 91, 1, 0, 0, 0, 335, 336, 7, 0, 0, 0, 336, 93, 1, 0, 0, 0, 337, 338, 2, 48, 57, 0, 338, 95, 1, 0, 0, 0, 339, 341, 7, 1, 0, 0, 340, 342, 7, 2, 0, 0, 341, 340, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 344, 1, 0, 0, 0, 343, 345, 3, 94, 46, 0, 344, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 97, 1, 0, 0, 0, 348, 349, 7, 3, 0, 0, 349, 99, 1, 0, 0, 0, 350, 351, 7, 4, 0, 0, 351, 101, 1, 0, 0, 0, 352, 357, 3, 104, 51, 0, 353, 357, 3, 108, 53, 0, 354, 357, 3, 110, 54, 0, 355, 357, 3, 106, 52, 0, 356, 352, 1, 0, 0, 0, 356, 353, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 356, 355, 1, 0, 0, 0, 357, 103, 1, 0, 0, 0, 358, 359, 3, 90, 44, 0, 359, 360, 7, 5, 0, 0, 360, 105, 1, 0, 0, 0, 361, 362, 3, 90, 44, 0, 362, 363, 2, 48, 51, 0, 363, 364, 2, 48, 55, 0, 364, 365, 2, 48, 55, 0, 365, 107, 1, 0, 0, 0, 366, 367, 3, 90, 44, 0, 367, 368, 7, 6, 0, 0, 368, 369, 3, 98, 48, 0, 369, 370, 3, 98, 48, 0, 370, 109, 1, 0, 0, 0, 371, 372, 3, 90, 44, 0, 372, 373, 5, 117, 0, 0, 373, 374, 3, 98, 48, 0, 374, 375, 3, 98, 48, 0, 375, 376, 3, 98, 48, 0, 376, 377, 3, 98, 48, 0, 377, 390, 1, 0, 0, 0, 378, 379, 3, 90, 44, 0, 379, 380, 5, 85, 0, 0, 380, 381, 3, 98, 48, 0, 381, 382, 3, 98, 48, 0, 382, 383, 3, 98, 48, 0, 383, 384, 3, 98, 48, 0, 384, 385, 3, 98, 48, 0, 385, 386, 3, 98, 48, 0, 386, 387, 3, 98, 48, 0, 387, 388, 3, 98, 48, 0, 388, 390, 1, 0, 0, 0, 389, 371, 1, 0, 0, 0, 389, 378, 1, 0, 0, 0, 390, 111, 1, 0, 0, 0, 391, 393, 7, 7, 0, 0, 392, 391, 1, 0, 0, 0, 393, 394, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 113, 1, 0, 0, 0, 396, 397, 5, 47, 0, 0, 397, 398, 5, 47, 0, 0, 398, 402, 1, 0, 0, 0, 399, 401, 8, 8, 0, 0, 400, 399, 1, 0, 0, 0, 401, 404, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 405, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 405, 406, 6, 56, 1, 0, 406, 115, 1, 0, 0, 0, 407, 409, 3, 94, 46, 0, 408, 407, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 408, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 414, 5, 46, 0, 0, 413, 415, 3, 94, 46, 0, 414, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 419, 1, 0, 0, 0, 418, 420, 3, 96, 47, 0, 419, 418, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 438, 1, 0, 0, 0, 421, 423, 3, 94, 46, 0, 422, 421, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 427, 3, 96, 47, 0, 427, 438, 1, 0, 0, 0, 428, 430, 5, 46, 0, 0, 429, 431, 3, 94, 46, 0, 430, 429, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 430, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 435, 1, 0, 0, 0, 434, 436, 3, 96, 47, 0, 435, 434, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 438, 1, 0, 0, 0, 437, 408, 1, 0, 0, 0, 437, 422, 1, 0, 0, 0, 437, 428, 1, 0, 0, 0, 438, 117, 1, 0, 0, 0, 439, 441, 3, 94, 46, 0, 440, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 453, 1, 0, 0, 0, 444, 445, 5, 48, 0, 0, 445, 446, 5, 120, 0, 0, 446, 448, 1, 0, 0, 0, 447, 449, 3, 98, 48, 0, 448, 447, 1, 0, 0, 0, 449, 450, 1, 0, 0, 0, 450, 448, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 453, 1, 0, 0, 0, 452, 440, 1, 0, 0, 0, 452, 444, 1, 0, 0, 0, 453, 119, 1, 0, 0, 0, 454, 456, 3, 94, 46, 0, 455, 454, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 455, 1, 0, 0, 0, 457, 458, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 460, 7, 9, 0, 0, 460, 472, 1, 0, 0, 0, 461, 462, 5, 48, 0, 0, 462, 463, 5, 120, 0, 0, 463, 465, 1, 0, 0, 0, 464, 466, 3, 98, 48, 0, 465, 464, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 470, 7, 9, 0, 0, 470, 472, 1, 0, 0, 0, 471, 455, 1, 0, 0, 0, 471, 461, 1, 0, 0, 0, 472, 121, 1, 0, 0, 0, 473, 478, 5, 34, 0, 0, 474, 477, 3, 102, 50, 0, 475, 477, 8, 10, 0, 0, 476, 474, 1, 0, 0, 0, 476, 475, 1, 0, 0, 0, 477, 480, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 481, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 481, 570, 5, 34, 0, 0, 482, 487, 5, 39, 0, 0, 483, 486, 3, 102, 50, 0, 484, 486, 8, 11, 0, 0, 485, 483, 1, 0, 0, 0, 485, 484, 1, 0, 0, 0, 486, 489, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 490, 1, 0, 0, 0, 489, 487, 1, 0, 0, 0, 490, 570, 5, 39, 0, 0, 491, 492, 5, 34, 0, 0, 492, 493, 5, 34, 0, 0, 493, 494, 5, 34, 0, 0, 494, 499, 1, 0, 0, 0, 495, 498, 3, 102, 50, 0, 496, 498, 8, 12, 0, 0, 497, 495, 1, 0, 0, 0, 497, 496, 1, 0, 0, 0, 498, 501, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 502, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 502, 503, 5, 34, 0, 0, 503, 504, 5, 34, 0, 0, 504, 570, 5, 34, 0, 0, 505, 506, 5, 39, 0, 0, 506, 507, 5, 39, 0, 0, 507, 508, 5, 39, 0, 0, 508, 513, 1, 0, 0, 0, 509, 512, 3, 102, 50, 0, 510, 512, 8, 12, 0, 0, 511, 509, 1, 0, 0, 0, 511, 510, 1, 0, 0, 0, 512, 515, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 514, 516, 1, 0, 0, 0, 515, 513, 1, 0, 0, 0, 516, 517, 5, 39, 0, 0, 517, 518, 5, 39, 0, 0, 518, 570, 5, 39, 0, 0, 519, 520, 3, 100, 49, 0, 520, 524, 5, 34, 0, 0, 521, 523, 8, 13, 0, 0, 522, 521, 1, 0, 0, 0, 523, 526, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 1, 0, 0, 0, 526, 524, 1, 0, 0, 0, 527, 528, 5, 34, 0, 0, 528, 570, 1, 0, 0, 0, 529, 530, 3, 100, 49, 0, 530, 534, 5, 39, 0, 0, 531, 533, 8, 14, 0, 0, 532, 531, 1, 0, 0, 0, 533, 536, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 537, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 537, 538, 5, 39, 0, 0, 538, 570, 1, 0, 0, 0, 539, 540, 3, 100, 49, 0, 540, 541, 5, 34, 0, 0, 541, 542, 5, 34, 0, 0, 542, 543, 5, 34, 0, 0, 543, 547, 1, 0, 0, 0, 544, 546, 9, 0, 0, 0, 545, 544, 1, 0, 0, 0, 546, 549, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 550, 1, 0, 0, 0, 549, 547, 1, 0, 0, 0, 550, 551, 5, 34, 0, 0, 551, 552, 5, 34, 0, 0, 552, 553, 5, 34, 0, 0, 553, 570, 1, 0, 0, 0, 554, 555, 3, 100, 49, 0, 555, 556, 5, 39, 0, 0, 556, 557, 5, 39, 0, 0, 557, 558, 5, 39, 0, 0, 558, 562, 1, 0, 0, 0, 559, 561, 9, 0, 0, 0, 560, 559, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 563, 565, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 566, 5, 39, 0, 0, 566, 567, 5, 39, 0, 0, 567, 568, 5, 39, 0, 0, 568, 570, 1, 0, 0, 0, 569, 473, 1, 0, 0, 0, 569, 482, 1, 0, 0, 0, 569, 491, 1, 0, 0, 0, 569, 505, 1, 0, 0, 0, 569, 519, 1, 0, 0, 0, 569, 529, 1, 0, 0, 0, 569, 539, 1, 0, 0, 0, 569, 554, 1, 0, 0, 0, 570, 123, 1, 0, 0, 0, 571, 572, 7, 15, 0, 0, 572, 573, 3, 122, 60, 0, 573, 125, 1, 0, 0, 0, 574, 577, 3, 92, 45, 0, 575, 577, 5, 95, 0, 0, 576, 574, 1, 0, 0, 0, 576, 575, 1, 0, 0, 0, 577, 584, 1, 0, 0, 0, 578, 583, 3, 92, 45, 0, 579, 583, 3, 94, 46, 0, 580, 583, 5, 95, 0, 0, 581, 583, 3, 70, 34, 0, 582, 578, 1, 0, 0, 0, 582, 579, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 582, 581, 1, 0, 0, 0, 583, 586, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 127, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 587, 590, 3, 92, 45, 0, 588, 590, 5, 95, 0, 0, 589, 587, 1, 0, 0, 0, 589, 588, 1, 0, 0, 0, 590, 605, 1, 0, 0, 0, 591, 595, 3, 80, 39, 0, 592, 595, 3, 68, 33, 0, 593, 595, 3, 70, 34, 0, 594, 591, 1, 0, 0, 0, 594, 592, 1, 0, 0, 0, 594, 593, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 599, 1, 0, 0, 0, 596, 600, 3, 92, 45, 0, 597, 600, 3, 94, 46, 0, 598, 600, 5, 95, 0, 0, 599, 596, 1, 0, 0, 0, 599, 597, 1, 0, 0, 0, 599, 598, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 599, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 604, 1, 0, 0, 0, 603, 594, 1, 0, 0, 0, 604, 607, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 129, 1, 0, 0, 0, 607, 605, 1, 0, 0, 0, 608, 610, 3, 112, 55, 0, 609, 608, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 616, 1, 0, 0, 0, 611, 613, 5, 13, 0, 0, 612, 611, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 617, 5, 10, 0, 0, 615, 617, 2, 12, 13, 0, 616, 612, 1, 0, 0, 0, 616, 615, 1, 0, 0, 0, 617, 619, 1, 0, 0, 0, 618, 620, 3, 112, 55, 0, 619, 618, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 622, 1, 0, 0, 0, 621, 623, 3, 130, 64, 0, 622, 621, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 131, 1, 0, 0, 0, 624, 625, 3, 66, 32, 0, 625, 626, 1, 0, 0, 0, 626, 627, 6, 65, 2, 0, 627, 628, 6, 65, 3, 0, 628, 133, 1, 0, 0, 0, 629, 630, 5, 109, 0, 0, 630, 631, 5, 97, 0, 0, 631, 637, 5, 112, 0, 0, 632, 633, 5, 108, 0, 0, 633, 634, 5, 105, 0, 0, 634, 635, 5, 115, 0, 0, 635, 637, 5, 116, 0, 0, 636, 629, 1, 0, 0, 0, 636, 632, 1, 0, 0, 0, 637, 135, 1, 0, 0, 0, 638, 639, 5, 98, 0, 0, 639, 640, 5, 111, 0, 0, 640, 641, 5, 111, 0, 0, 641, 688, 5, 108, 0, 0, 642, 643, 5, 115, 0, 0, 643, 644, 5, 116, 0, 0, 644, 645, 5, 114, 0, 0, 645, 646, 5, 105, 0, 0, 646, 647, 5, 110, 0, 0, 647, 688, 5, 103, 0, 0, 648, 649, 5, 105, 0, 0, 649, 650, 5, 110, 0, 0, 650, 688, 5, 116, 0, 0, 651, 652, 5, 117, 0, 0, 652, 653, 5, 105, 0, 0, 653, 654, 5, 110, 0, 0, 654, 688, 5, 116, 0, 0, 655, 656, 5, 100, 0, 0, 656, 657, 5, 111, 0, 0, 657, 658, 5, 117, 0, 0, 658, 659, 5, 98, 0, 0, 659, 660, 5, 108, 0, 0, 660, 688, 5, 101, 0, 0, 661, 662, 5, 100, 0, 0, 662, 663, 5, 117, 0, 0, 663, 664, 5, 114, 0, 0, 664, 665, 5, 97, 0, 0, 665, 666, 5, 116, 0, 0, 666, 667, 5, 105, 0, 0, 667, 668, 5, 111, 0, 0, 668, 688, 5, 110, 0, 0, 669, 670, 5, 116, 0, 0, 670, 671, 5, 105, 0, 0, 671, 672, 5, 109, 0, 0, 672, 673, 5, 101, 0, 0, 673, 674, 5, 115, 0, 0, 674, 675, 5, 116, 0, 0, 675, 676, 5, 97, 0, 0, 676, 677, 5, 109, 0, 0, 677, 688, 5, 112, 0, 0, 678, 679, 5, 105, 0, 0, 679, 680, 5, 112, 0, 0, 680, 681, 5, 97, 0, 0, 681, 682, 5, 100, 0, 0, 682, 683, 5, 100, 0, 0, 683, 684, 5, 114, 0, 0, 684, 685, 5, 101, 0, 0, 685, 686, 5, 115, 0, 0, 686, 688, 5, 115, 0, 0, 687, 638, 1, 0, 0, 0, 687, 642, 1, 0, 0, 0, 687, 648, 1, 0, 0, 0, 687, 651, 1, 0, 0, 0, 687, 655, 1, 0, 0, 0, 687, 661, 1, 0, 0, 0, 687, 669, 1, 0, 0, 0, 687, 678, 1, 0, 0, 0, 688, 137, 1, 0, 0, 0, 689, 690, 3, 44, 21, 0, 690, 691, 1, 0, 0, 0, 691, 692, 6, 68, 4, 0, 692, 139, 1, 0, 0, 0, 693, 694, 3, 50, 24, 0, 694, 695, 1, 0, 0, 0, 695, 696, 6, 69, 5, 0, 696, 141, 1, 0, 0, 0, 697, 698, 3, 64, 31, 0, 698, 699, 1, 0, 0, 0, 699, 700, 6, 70, 6, 0, 700, 143, 1, 0, 0, 0, 701, 702, 3, 4, 1, 0, 702, 703, 1, 0, 0, 0, 703, 704, 6, 71, 7, 0, 704, 145, 1, 0, 0, 0, 705, 706, 3, 6, 2, 0, 706, 707, 1, 0, 0, 0, 707, 708, 6, 72, 8, 0, 708, 147, 1, 0, 0, 0, 709, 710, 3, 112, 55, 0, 710, 711, 1, 0, 0, 0, 711, 712, 6, 73, 9, 0, 712, 149, 1, 0, 0, 0, 713, 714, 3, 126, 62, 0, 714, 715, 1, 0, 0, 0, 715, 716, 6, 74, 10, 0, 716, 151, 1, 0, 0, 0, 51, 0, 1, 201, 207, 341, 346, 356, 389, 394, 402, 410, 416, 419, 424, 432, 435, 437, 442, 450, 452, 457, 467, 471, 476, 478, 485, 487, 497, 499, 511, 513, 524, 534, 547, 562, 569, 576, 582, 584, 589, 594, 599, 601, 605, 609, 612, 616, 619, 622, 636, 687, 11, 5, 1, 0, 0, 1, 0, 7, 8, 0, 4, 0, 0, 7, 3, 0, 7, 4, 0, 7, 7, 0, 7, 1, 0, 7, 2, 0, 7, 9, 0, 7, 10, 0] \ No newline at end of file diff --git a/pkg/js/gen/OpenFGALexer.tokens b/pkg/js/gen/OpenFGALexer.tokens index 273e2f7c..512cec30 100644 --- a/pkg/js/gen/OpenFGALexer.tokens +++ b/pkg/js/gen/OpenFGALexer.tokens @@ -51,9 +51,10 @@ NUM_INT=50 NUM_UINT=51 STRING=52 BYTES=53 -NEWLINE=54 -CONDITION_PARAM_CONTAINER=55 -CONDITION_PARAM_TYPE=56 +EXTENDED_IDENTIFIER=54 +NEWLINE=55 +CONDITION_PARAM_CONTAINER=56 +CONDITION_PARAM_TYPE=57 '#'=11 ':'=1 ','=2 diff --git a/pkg/js/gen/OpenFGALexer.ts b/pkg/js/gen/OpenFGALexer.ts index 53272bdf..dad8ef01 100644 --- a/pkg/js/gen/OpenFGALexer.ts +++ b/pkg/js/gen/OpenFGALexer.ts @@ -65,9 +65,10 @@ export default class OpenFGALexer extends Lexer { public static readonly NUM_UINT = 51; public static readonly STRING = 52; public static readonly BYTES = 53; - public static readonly NEWLINE = 54; - public static readonly CONDITION_PARAM_CONTAINER = 55; - public static readonly CONDITION_PARAM_TYPE = 56; + public static readonly EXTENDED_IDENTIFIER = 54; + public static readonly NEWLINE = 55; + public static readonly CONDITION_PARAM_CONTAINER = 56; + public static readonly CONDITION_PARAM_TYPE = 57; public static readonly EOF = Token.EOF; public static readonly CONDITION_DEF = 1; @@ -134,6 +135,7 @@ export default class OpenFGALexer extends Lexer { "NUM_INT", "NUM_UINT", "STRING", "BYTES", + "EXTENDED_IDENTIFIER", "NEWLINE", "CONDITION_PARAM_CONTAINER", "CONDITION_PARAM_TYPE" ]; @@ -149,10 +151,10 @@ export default class OpenFGALexer extends Lexer { "CEL_TRUE", "CEL_FALSE", "NUL", "BACKSLASH", "LETTER", "DIGIT", "EXPONENT", "HEXDIGIT", "RAW", "ESC_SEQ", "ESC_CHAR_SEQ", "ESC_OCT_SEQ", "ESC_BYTE_SEQ", "ESC_UNI_SEQ", "WHITESPACE", "CEL_COMMENT", "NUM_FLOAT", "NUM_INT", "NUM_UINT", - "STRING", "BYTES", "IDENTIFIER", "NEWLINE", "CONDITION_DEF_END", "CONDITION_PARAM_CONTAINER", - "CONDITION_PARAM_TYPE", "CONDITION_PARAM_TYPE_LESS", "CONDITION_PARAM_TYPE_GREATER", - "CONDITION_OPEN", "CONDITION_COLON", "CONDITION_COMMA", "CONDITION_WS", - "CONDITION_NAME", + "STRING", "BYTES", "IDENTIFIER", "EXTENDED_IDENTIFIER", "NEWLINE", "CONDITION_DEF_END", + "CONDITION_PARAM_CONTAINER", "CONDITION_PARAM_TYPE", "CONDITION_PARAM_TYPE_LESS", + "CONDITION_PARAM_TYPE_GREATER", "CONDITION_OPEN", "CONDITION_COLON", "CONDITION_COMMA", + "CONDITION_WS", "CONDITION_NAME", ]; @@ -173,7 +175,7 @@ export default class OpenFGALexer extends Lexer { public get modeNames(): string[] { return OpenFGALexer.modeNames; } - public static readonly _serializedATN: number[] = [4,0,56,694,6,-1,6,-1, + public static readonly _serializedATN: number[] = [4,0,57,717,6,-1,6,-1, 2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8, 2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16, 7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7, @@ -183,232 +185,242 @@ export default class OpenFGALexer extends Lexer { 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,1,0, - 1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5, - 1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8, - 1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,10,4,10,198,8,10,11,10,12,10,199, - 1,10,1,10,4,10,204,8,10,11,10,12,10,205,1,11,1,11,1,11,1,11,1,11,1,11,1, - 11,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, - 1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1, - 15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16, - 1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,19,1,19,1,19,1,20,1,20,1,20,1, - 21,1,21,1,22,1,22,1,22,1,23,1,23,1,23,1,24,1,24,1,25,1,25,1,25,1,26,1,26, - 1,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,34,1,34,1,35,1,35,1,36,1,36,1,37,1,37,1,38,1,38,1,39,1,39,1,40,1,40, - 1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1, - 43,1,43,1,44,1,44,1,45,1,45,1,46,1,46,1,47,1,47,3,47,340,8,47,1,47,4,47, - 343,8,47,11,47,12,47,344,1,48,1,48,1,49,1,49,1,50,1,50,1,50,1,50,3,50,355, - 8,50,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1, - 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,388,8,54,1,55,4,55,391,8,55,11,55,12,55,392,1,56,1, - 56,1,56,1,56,5,56,399,8,56,10,56,12,56,402,9,56,1,56,1,56,1,57,4,57,407, - 8,57,11,57,12,57,408,1,57,1,57,4,57,413,8,57,11,57,12,57,414,1,57,3,57, - 418,8,57,1,57,4,57,421,8,57,11,57,12,57,422,1,57,1,57,1,57,1,57,4,57,429, - 8,57,11,57,12,57,430,1,57,3,57,434,8,57,3,57,436,8,57,1,58,4,58,439,8,58, - 11,58,12,58,440,1,58,1,58,1,58,1,58,4,58,447,8,58,11,58,12,58,448,3,58, - 451,8,58,1,59,4,59,454,8,59,11,59,12,59,455,1,59,1,59,1,59,1,59,1,59,1, - 59,4,59,464,8,59,11,59,12,59,465,1,59,1,59,3,59,470,8,59,1,60,1,60,1,60, - 5,60,475,8,60,10,60,12,60,478,9,60,1,60,1,60,1,60,1,60,5,60,484,8,60,10, - 60,12,60,487,9,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,5,60,496,8,60,10,60, - 12,60,499,9,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,5,60,510,8, - 60,10,60,12,60,513,9,60,1,60,1,60,1,60,1,60,1,60,1,60,5,60,521,8,60,10, - 60,12,60,524,9,60,1,60,1,60,1,60,1,60,1,60,5,60,531,8,60,10,60,12,60,534, - 9,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,5,60,544,8,60,10,60,12,60, - 547,9,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,5,60,559,8,60, - 10,60,12,60,562,9,60,1,60,1,60,1,60,1,60,3,60,568,8,60,1,61,1,61,1,61,1, - 62,1,62,3,62,575,8,62,1,62,1,62,1,62,1,62,5,62,581,8,62,10,62,12,62,584, - 9,62,1,63,3,63,587,8,63,1,63,3,63,590,8,63,1,63,1,63,3,63,594,8,63,1,63, - 3,63,597,8,63,1,63,3,63,600,8,63,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65, - 1,65,1,65,1,65,1,65,3,65,614,8,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1, - 66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66, - 1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1, - 66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,3,66,665, - 8,66,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,70,1, - 70,1,70,1,70,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73, - 4,497,511,545,560,0,74,2,11,4,1,6,2,8,12,10,13,12,14,14,15,16,16,18,17, + 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,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,5,1,5,1,5,1, + 5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1, + 8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,10,4,10,200,8,10,11,10, + 12,10,201,1,10,1,10,4,10,206,8,10,11,10,12,10,207,1,11,1,11,1,11,1,11,1, + 11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13, + 1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1, + 14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16, + 1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,19,1,19,1,19,1,20,1, + 20,1,20,1,21,1,21,1,22,1,22,1,22,1,23,1,23,1,23,1,24,1,24,1,25,1,25,1,25, + 1,26,1,26,1,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,34,1,34,1,35,1,35,1,36,1,36,1,37,1,37,1,38,1,38,1,39,1,39, + 1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1, + 43,1,43,1,43,1,43,1,44,1,44,1,45,1,45,1,46,1,46,1,47,1,47,3,47,342,8,47, + 1,47,4,47,345,8,47,11,47,12,47,346,1,48,1,48,1,49,1,49,1,50,1,50,1,50,1, + 50,3,50,357,8,50,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53, + 1,53,1,53,1,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,390,8,54,1,55,4,55,393,8,55,11,55,12,55, + 394,1,56,1,56,1,56,1,56,5,56,401,8,56,10,56,12,56,404,9,56,1,56,1,56,1, + 57,4,57,409,8,57,11,57,12,57,410,1,57,1,57,4,57,415,8,57,11,57,12,57,416, + 1,57,3,57,420,8,57,1,57,4,57,423,8,57,11,57,12,57,424,1,57,1,57,1,57,1, + 57,4,57,431,8,57,11,57,12,57,432,1,57,3,57,436,8,57,3,57,438,8,57,1,58, + 4,58,441,8,58,11,58,12,58,442,1,58,1,58,1,58,1,58,4,58,449,8,58,11,58,12, + 58,450,3,58,453,8,58,1,59,4,59,456,8,59,11,59,12,59,457,1,59,1,59,1,59, + 1,59,1,59,1,59,4,59,466,8,59,11,59,12,59,467,1,59,1,59,3,59,472,8,59,1, + 60,1,60,1,60,5,60,477,8,60,10,60,12,60,480,9,60,1,60,1,60,1,60,1,60,5,60, + 486,8,60,10,60,12,60,489,9,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,5,60,498, + 8,60,10,60,12,60,501,9,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60, + 5,60,512,8,60,10,60,12,60,515,9,60,1,60,1,60,1,60,1,60,1,60,1,60,5,60,523, + 8,60,10,60,12,60,526,9,60,1,60,1,60,1,60,1,60,1,60,5,60,533,8,60,10,60, + 12,60,536,9,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,5,60,546,8,60,10, + 60,12,60,549,9,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,5,60, + 561,8,60,10,60,12,60,564,9,60,1,60,1,60,1,60,1,60,3,60,570,8,60,1,61,1, + 61,1,61,1,62,1,62,3,62,577,8,62,1,62,1,62,1,62,1,62,5,62,583,8,62,10,62, + 12,62,586,9,62,1,63,1,63,3,63,590,8,63,1,63,1,63,1,63,3,63,595,8,63,1,63, + 1,63,1,63,4,63,600,8,63,11,63,12,63,601,5,63,604,8,63,10,63,12,63,607,9, + 63,1,64,3,64,610,8,64,1,64,3,64,613,8,64,1,64,1,64,3,64,617,8,64,1,64,3, + 64,620,8,64,1,64,3,64,623,8,64,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66, + 1,66,1,66,1,66,1,66,3,66,637,8,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1, + 67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67, + 1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1, + 67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,3,67,688, + 8,67,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,71,1, + 71,1,71,1,71,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74, + 4,499,513,547,562,0,75,2,11,4,1,6,2,8,12,10,13,12,14,14,15,16,16,18,17, 20,18,22,19,24,20,26,21,28,22,30,23,32,24,34,25,36,26,38,27,40,28,42,29, 44,3,46,30,48,31,50,4,52,32,54,33,56,5,58,34,60,35,62,36,64,7,66,8,68,37, 70,38,72,39,74,40,76,41,78,42,80,43,82,44,84,45,86,46,88,47,90,0,92,0,94, 0,96,0,98,0,100,0,102,0,104,0,106,0,108,0,110,0,112,9,114,48,116,49,118, - 50,120,51,122,52,124,53,126,10,128,54,130,0,132,55,134,56,136,0,138,0,140, - 0,142,0,144,0,146,0,148,0,2,0,1,16,2,0,65,90,97,122,2,0,69,69,101,101,2, - 0,43,43,45,45,3,0,48,57,65,70,97,102,2,0,82,82,114,114,10,0,34,34,39,39, - 63,63,92,92,96,98,102,102,110,110,114,114,116,116,118,118,2,0,88,88,120, - 120,3,0,9,9,12,12,32,32,1,0,10,10,2,0,85,85,117,117,4,0,10,10,13,13,34, - 34,92,92,4,0,10,10,13,13,39,39,92,92,1,0,92,92,3,0,10,10,13,13,34,34,3, - 0,10,10,13,13,39,39,2,0,66,66,98,98,742,0,2,1,0,0,0,0,4,1,0,0,0,0,6,1,0, - 0,0,0,8,1,0,0,0,0,10,1,0,0,0,0,12,1,0,0,0,0,14,1,0,0,0,0,16,1,0,0,0,0,18, - 1,0,0,0,0,20,1,0,0,0,0,22,1,0,0,0,0,24,1,0,0,0,0,26,1,0,0,0,0,28,1,0,0, - 0,0,30,1,0,0,0,0,32,1,0,0,0,0,34,1,0,0,0,0,36,1,0,0,0,0,38,1,0,0,0,0,40, - 1,0,0,0,0,42,1,0,0,0,0,44,1,0,0,0,0,46,1,0,0,0,0,48,1,0,0,0,0,50,1,0,0, - 0,0,52,1,0,0,0,0,54,1,0,0,0,0,56,1,0,0,0,0,58,1,0,0,0,0,60,1,0,0,0,0,62, - 1,0,0,0,0,64,1,0,0,0,0,66,1,0,0,0,0,68,1,0,0,0,0,70,1,0,0,0,0,72,1,0,0, - 0,0,74,1,0,0,0,0,76,1,0,0,0,0,78,1,0,0,0,0,80,1,0,0,0,0,82,1,0,0,0,0,84, - 1,0,0,0,0,86,1,0,0,0,0,88,1,0,0,0,0,112,1,0,0,0,0,114,1,0,0,0,0,116,1,0, - 0,0,0,118,1,0,0,0,0,120,1,0,0,0,0,122,1,0,0,0,0,124,1,0,0,0,0,126,1,0,0, - 0,0,128,1,0,0,0,1,130,1,0,0,0,1,132,1,0,0,0,1,134,1,0,0,0,1,136,1,0,0,0, - 1,138,1,0,0,0,1,140,1,0,0,0,1,142,1,0,0,0,1,144,1,0,0,0,1,146,1,0,0,0,1, - 148,1,0,0,0,2,150,1,0,0,0,4,152,1,0,0,0,6,154,1,0,0,0,8,156,1,0,0,0,10, - 160,1,0,0,0,12,163,1,0,0,0,14,171,1,0,0,0,16,176,1,0,0,0,18,183,1,0,0,0, - 20,189,1,0,0,0,22,197,1,0,0,0,24,207,1,0,0,0,26,214,1,0,0,0,28,219,1,0, - 0,0,30,231,1,0,0,0,32,241,1,0,0,0,34,250,1,0,0,0,36,257,1,0,0,0,38,262, - 1,0,0,0,40,265,1,0,0,0,42,268,1,0,0,0,44,271,1,0,0,0,46,273,1,0,0,0,48, - 276,1,0,0,0,50,279,1,0,0,0,52,281,1,0,0,0,54,284,1,0,0,0,56,287,1,0,0,0, - 58,289,1,0,0,0,60,291,1,0,0,0,62,293,1,0,0,0,64,295,1,0,0,0,66,297,1,0, - 0,0,68,299,1,0,0,0,70,301,1,0,0,0,72,303,1,0,0,0,74,305,1,0,0,0,76,307, - 1,0,0,0,78,309,1,0,0,0,80,311,1,0,0,0,82,313,1,0,0,0,84,315,1,0,0,0,86, - 320,1,0,0,0,88,326,1,0,0,0,90,331,1,0,0,0,92,333,1,0,0,0,94,335,1,0,0,0, - 96,337,1,0,0,0,98,346,1,0,0,0,100,348,1,0,0,0,102,354,1,0,0,0,104,356,1, - 0,0,0,106,359,1,0,0,0,108,364,1,0,0,0,110,387,1,0,0,0,112,390,1,0,0,0,114, - 394,1,0,0,0,116,435,1,0,0,0,118,450,1,0,0,0,120,469,1,0,0,0,122,567,1,0, - 0,0,124,569,1,0,0,0,126,574,1,0,0,0,128,586,1,0,0,0,130,601,1,0,0,0,132, - 613,1,0,0,0,134,664,1,0,0,0,136,666,1,0,0,0,138,670,1,0,0,0,140,674,1,0, - 0,0,142,678,1,0,0,0,144,682,1,0,0,0,146,686,1,0,0,0,148,690,1,0,0,0,150, - 151,5,35,0,0,151,3,1,0,0,0,152,153,5,58,0,0,153,5,1,0,0,0,154,155,5,44, - 0,0,155,7,1,0,0,0,156,157,5,97,0,0,157,158,5,110,0,0,158,159,5,100,0,0, - 159,9,1,0,0,0,160,161,5,111,0,0,161,162,5,114,0,0,162,11,1,0,0,0,163,164, - 5,98,0,0,164,165,5,117,0,0,165,166,5,116,0,0,166,167,5,32,0,0,167,168,5, - 110,0,0,168,169,5,111,0,0,169,170,5,116,0,0,170,13,1,0,0,0,171,172,5,102, - 0,0,172,173,5,114,0,0,173,174,5,111,0,0,174,175,5,109,0,0,175,15,1,0,0, - 0,176,177,5,109,0,0,177,178,5,111,0,0,178,179,5,100,0,0,179,180,5,117,0, - 0,180,181,5,108,0,0,181,182,5,101,0,0,182,17,1,0,0,0,183,184,5,109,0,0, - 184,185,5,111,0,0,185,186,5,100,0,0,186,187,5,101,0,0,187,188,5,108,0,0, - 188,19,1,0,0,0,189,190,5,115,0,0,190,191,5,99,0,0,191,192,5,104,0,0,192, - 193,5,101,0,0,193,194,5,109,0,0,194,195,5,97,0,0,195,21,1,0,0,0,196,198, - 3,94,46,0,197,196,1,0,0,0,198,199,1,0,0,0,199,197,1,0,0,0,199,200,1,0,0, - 0,200,201,1,0,0,0,201,203,5,46,0,0,202,204,3,94,46,0,203,202,1,0,0,0,204, - 205,1,0,0,0,205,203,1,0,0,0,205,206,1,0,0,0,206,23,1,0,0,0,207,208,5,101, - 0,0,208,209,5,120,0,0,209,210,5,116,0,0,210,211,5,101,0,0,211,212,5,110, - 0,0,212,213,5,100,0,0,213,25,1,0,0,0,214,215,5,116,0,0,215,216,5,121,0, - 0,216,217,5,112,0,0,217,218,5,101,0,0,218,27,1,0,0,0,219,220,5,99,0,0,220, - 221,5,111,0,0,221,222,5,110,0,0,222,223,5,100,0,0,223,224,5,105,0,0,224, - 225,5,116,0,0,225,226,5,105,0,0,226,227,5,111,0,0,227,228,5,110,0,0,228, - 229,1,0,0,0,229,230,6,13,0,0,230,29,1,0,0,0,231,232,5,114,0,0,232,233,5, - 101,0,0,233,234,5,108,0,0,234,235,5,97,0,0,235,236,5,116,0,0,236,237,5, - 105,0,0,237,238,5,111,0,0,238,239,5,110,0,0,239,240,5,115,0,0,240,31,1, - 0,0,0,241,242,5,114,0,0,242,243,5,101,0,0,243,244,5,108,0,0,244,245,5,97, - 0,0,245,246,5,116,0,0,246,247,5,105,0,0,247,248,5,111,0,0,248,249,5,110, - 0,0,249,33,1,0,0,0,250,251,5,100,0,0,251,252,5,101,0,0,252,253,5,102,0, - 0,253,254,5,105,0,0,254,255,5,110,0,0,255,256,5,101,0,0,256,35,1,0,0,0, - 257,258,5,119,0,0,258,259,5,105,0,0,259,260,5,116,0,0,260,261,5,104,0,0, - 261,37,1,0,0,0,262,263,5,61,0,0,263,264,5,61,0,0,264,39,1,0,0,0,265,266, - 5,33,0,0,266,267,5,61,0,0,267,41,1,0,0,0,268,269,5,105,0,0,269,270,5,110, - 0,0,270,43,1,0,0,0,271,272,5,60,0,0,272,45,1,0,0,0,273,274,5,60,0,0,274, - 275,5,61,0,0,275,47,1,0,0,0,276,277,5,62,0,0,277,278,5,61,0,0,278,49,1, - 0,0,0,279,280,5,62,0,0,280,51,1,0,0,0,281,282,5,38,0,0,282,283,5,38,0,0, - 283,53,1,0,0,0,284,285,5,124,0,0,285,286,5,124,0,0,286,55,1,0,0,0,287,288, - 5,91,0,0,288,57,1,0,0,0,289,290,5,93,0,0,290,59,1,0,0,0,291,292,5,123,0, - 0,292,61,1,0,0,0,293,294,5,125,0,0,294,63,1,0,0,0,295,296,5,40,0,0,296, - 65,1,0,0,0,297,298,5,41,0,0,298,67,1,0,0,0,299,300,5,46,0,0,300,69,1,0, - 0,0,301,302,5,45,0,0,302,71,1,0,0,0,303,304,5,33,0,0,304,73,1,0,0,0,305, - 306,5,63,0,0,306,75,1,0,0,0,307,308,5,43,0,0,308,77,1,0,0,0,309,310,5,42, - 0,0,310,79,1,0,0,0,311,312,5,47,0,0,312,81,1,0,0,0,313,314,5,37,0,0,314, - 83,1,0,0,0,315,316,5,116,0,0,316,317,5,114,0,0,317,318,5,117,0,0,318,319, - 5,101,0,0,319,85,1,0,0,0,320,321,5,102,0,0,321,322,5,97,0,0,322,323,5,108, - 0,0,323,324,5,115,0,0,324,325,5,101,0,0,325,87,1,0,0,0,326,327,5,110,0, - 0,327,328,5,117,0,0,328,329,5,108,0,0,329,330,5,108,0,0,330,89,1,0,0,0, - 331,332,5,92,0,0,332,91,1,0,0,0,333,334,7,0,0,0,334,93,1,0,0,0,335,336, - 2,48,57,0,336,95,1,0,0,0,337,339,7,1,0,0,338,340,7,2,0,0,339,338,1,0,0, - 0,339,340,1,0,0,0,340,342,1,0,0,0,341,343,3,94,46,0,342,341,1,0,0,0,343, - 344,1,0,0,0,344,342,1,0,0,0,344,345,1,0,0,0,345,97,1,0,0,0,346,347,7,3, - 0,0,347,99,1,0,0,0,348,349,7,4,0,0,349,101,1,0,0,0,350,355,3,104,51,0,351, - 355,3,108,53,0,352,355,3,110,54,0,353,355,3,106,52,0,354,350,1,0,0,0,354, - 351,1,0,0,0,354,352,1,0,0,0,354,353,1,0,0,0,355,103,1,0,0,0,356,357,3,90, - 44,0,357,358,7,5,0,0,358,105,1,0,0,0,359,360,3,90,44,0,360,361,2,48,51, - 0,361,362,2,48,55,0,362,363,2,48,55,0,363,107,1,0,0,0,364,365,3,90,44,0, - 365,366,7,6,0,0,366,367,3,98,48,0,367,368,3,98,48,0,368,109,1,0,0,0,369, - 370,3,90,44,0,370,371,5,117,0,0,371,372,3,98,48,0,372,373,3,98,48,0,373, - 374,3,98,48,0,374,375,3,98,48,0,375,388,1,0,0,0,376,377,3,90,44,0,377,378, - 5,85,0,0,378,379,3,98,48,0,379,380,3,98,48,0,380,381,3,98,48,0,381,382, - 3,98,48,0,382,383,3,98,48,0,383,384,3,98,48,0,384,385,3,98,48,0,385,386, - 3,98,48,0,386,388,1,0,0,0,387,369,1,0,0,0,387,376,1,0,0,0,388,111,1,0,0, - 0,389,391,7,7,0,0,390,389,1,0,0,0,391,392,1,0,0,0,392,390,1,0,0,0,392,393, - 1,0,0,0,393,113,1,0,0,0,394,395,5,47,0,0,395,396,5,47,0,0,396,400,1,0,0, - 0,397,399,8,8,0,0,398,397,1,0,0,0,399,402,1,0,0,0,400,398,1,0,0,0,400,401, - 1,0,0,0,401,403,1,0,0,0,402,400,1,0,0,0,403,404,6,56,1,0,404,115,1,0,0, - 0,405,407,3,94,46,0,406,405,1,0,0,0,407,408,1,0,0,0,408,406,1,0,0,0,408, - 409,1,0,0,0,409,410,1,0,0,0,410,412,5,46,0,0,411,413,3,94,46,0,412,411, - 1,0,0,0,413,414,1,0,0,0,414,412,1,0,0,0,414,415,1,0,0,0,415,417,1,0,0,0, - 416,418,3,96,47,0,417,416,1,0,0,0,417,418,1,0,0,0,418,436,1,0,0,0,419,421, - 3,94,46,0,420,419,1,0,0,0,421,422,1,0,0,0,422,420,1,0,0,0,422,423,1,0,0, - 0,423,424,1,0,0,0,424,425,3,96,47,0,425,436,1,0,0,0,426,428,5,46,0,0,427, - 429,3,94,46,0,428,427,1,0,0,0,429,430,1,0,0,0,430,428,1,0,0,0,430,431,1, - 0,0,0,431,433,1,0,0,0,432,434,3,96,47,0,433,432,1,0,0,0,433,434,1,0,0,0, - 434,436,1,0,0,0,435,406,1,0,0,0,435,420,1,0,0,0,435,426,1,0,0,0,436,117, - 1,0,0,0,437,439,3,94,46,0,438,437,1,0,0,0,439,440,1,0,0,0,440,438,1,0,0, - 0,440,441,1,0,0,0,441,451,1,0,0,0,442,443,5,48,0,0,443,444,5,120,0,0,444, - 446,1,0,0,0,445,447,3,98,48,0,446,445,1,0,0,0,447,448,1,0,0,0,448,446,1, - 0,0,0,448,449,1,0,0,0,449,451,1,0,0,0,450,438,1,0,0,0,450,442,1,0,0,0,451, - 119,1,0,0,0,452,454,3,94,46,0,453,452,1,0,0,0,454,455,1,0,0,0,455,453,1, - 0,0,0,455,456,1,0,0,0,456,457,1,0,0,0,457,458,7,9,0,0,458,470,1,0,0,0,459, - 460,5,48,0,0,460,461,5,120,0,0,461,463,1,0,0,0,462,464,3,98,48,0,463,462, - 1,0,0,0,464,465,1,0,0,0,465,463,1,0,0,0,465,466,1,0,0,0,466,467,1,0,0,0, - 467,468,7,9,0,0,468,470,1,0,0,0,469,453,1,0,0,0,469,459,1,0,0,0,470,121, - 1,0,0,0,471,476,5,34,0,0,472,475,3,102,50,0,473,475,8,10,0,0,474,472,1, - 0,0,0,474,473,1,0,0,0,475,478,1,0,0,0,476,474,1,0,0,0,476,477,1,0,0,0,477, - 479,1,0,0,0,478,476,1,0,0,0,479,568,5,34,0,0,480,485,5,39,0,0,481,484,3, - 102,50,0,482,484,8,11,0,0,483,481,1,0,0,0,483,482,1,0,0,0,484,487,1,0,0, - 0,485,483,1,0,0,0,485,486,1,0,0,0,486,488,1,0,0,0,487,485,1,0,0,0,488,568, - 5,39,0,0,489,490,5,34,0,0,490,491,5,34,0,0,491,492,5,34,0,0,492,497,1,0, - 0,0,493,496,3,102,50,0,494,496,8,12,0,0,495,493,1,0,0,0,495,494,1,0,0,0, - 496,499,1,0,0,0,497,498,1,0,0,0,497,495,1,0,0,0,498,500,1,0,0,0,499,497, - 1,0,0,0,500,501,5,34,0,0,501,502,5,34,0,0,502,568,5,34,0,0,503,504,5,39, - 0,0,504,505,5,39,0,0,505,506,5,39,0,0,506,511,1,0,0,0,507,510,3,102,50, - 0,508,510,8,12,0,0,509,507,1,0,0,0,509,508,1,0,0,0,510,513,1,0,0,0,511, - 512,1,0,0,0,511,509,1,0,0,0,512,514,1,0,0,0,513,511,1,0,0,0,514,515,5,39, - 0,0,515,516,5,39,0,0,516,568,5,39,0,0,517,518,3,100,49,0,518,522,5,34,0, - 0,519,521,8,13,0,0,520,519,1,0,0,0,521,524,1,0,0,0,522,520,1,0,0,0,522, - 523,1,0,0,0,523,525,1,0,0,0,524,522,1,0,0,0,525,526,5,34,0,0,526,568,1, - 0,0,0,527,528,3,100,49,0,528,532,5,39,0,0,529,531,8,14,0,0,530,529,1,0, - 0,0,531,534,1,0,0,0,532,530,1,0,0,0,532,533,1,0,0,0,533,535,1,0,0,0,534, - 532,1,0,0,0,535,536,5,39,0,0,536,568,1,0,0,0,537,538,3,100,49,0,538,539, - 5,34,0,0,539,540,5,34,0,0,540,541,5,34,0,0,541,545,1,0,0,0,542,544,9,0, - 0,0,543,542,1,0,0,0,544,547,1,0,0,0,545,546,1,0,0,0,545,543,1,0,0,0,546, - 548,1,0,0,0,547,545,1,0,0,0,548,549,5,34,0,0,549,550,5,34,0,0,550,551,5, - 34,0,0,551,568,1,0,0,0,552,553,3,100,49,0,553,554,5,39,0,0,554,555,5,39, - 0,0,555,556,5,39,0,0,556,560,1,0,0,0,557,559,9,0,0,0,558,557,1,0,0,0,559, - 562,1,0,0,0,560,561,1,0,0,0,560,558,1,0,0,0,561,563,1,0,0,0,562,560,1,0, - 0,0,563,564,5,39,0,0,564,565,5,39,0,0,565,566,5,39,0,0,566,568,1,0,0,0, - 567,471,1,0,0,0,567,480,1,0,0,0,567,489,1,0,0,0,567,503,1,0,0,0,567,517, - 1,0,0,0,567,527,1,0,0,0,567,537,1,0,0,0,567,552,1,0,0,0,568,123,1,0,0,0, - 569,570,7,15,0,0,570,571,3,122,60,0,571,125,1,0,0,0,572,575,3,92,45,0,573, - 575,5,95,0,0,574,572,1,0,0,0,574,573,1,0,0,0,575,582,1,0,0,0,576,581,3, - 92,45,0,577,581,3,94,46,0,578,581,5,95,0,0,579,581,3,70,34,0,580,576,1, - 0,0,0,580,577,1,0,0,0,580,578,1,0,0,0,580,579,1,0,0,0,581,584,1,0,0,0,582, - 580,1,0,0,0,582,583,1,0,0,0,583,127,1,0,0,0,584,582,1,0,0,0,585,587,3,112, - 55,0,586,585,1,0,0,0,586,587,1,0,0,0,587,593,1,0,0,0,588,590,5,13,0,0,589, - 588,1,0,0,0,589,590,1,0,0,0,590,591,1,0,0,0,591,594,5,10,0,0,592,594,2, - 12,13,0,593,589,1,0,0,0,593,592,1,0,0,0,594,596,1,0,0,0,595,597,3,112,55, - 0,596,595,1,0,0,0,596,597,1,0,0,0,597,599,1,0,0,0,598,600,3,128,63,0,599, - 598,1,0,0,0,599,600,1,0,0,0,600,129,1,0,0,0,601,602,3,66,32,0,602,603,1, - 0,0,0,603,604,6,64,2,0,604,605,6,64,3,0,605,131,1,0,0,0,606,607,5,109,0, - 0,607,608,5,97,0,0,608,614,5,112,0,0,609,610,5,108,0,0,610,611,5,105,0, - 0,611,612,5,115,0,0,612,614,5,116,0,0,613,606,1,0,0,0,613,609,1,0,0,0,614, - 133,1,0,0,0,615,616,5,98,0,0,616,617,5,111,0,0,617,618,5,111,0,0,618,665, - 5,108,0,0,619,620,5,115,0,0,620,621,5,116,0,0,621,622,5,114,0,0,622,623, - 5,105,0,0,623,624,5,110,0,0,624,665,5,103,0,0,625,626,5,105,0,0,626,627, - 5,110,0,0,627,665,5,116,0,0,628,629,5,117,0,0,629,630,5,105,0,0,630,631, - 5,110,0,0,631,665,5,116,0,0,632,633,5,100,0,0,633,634,5,111,0,0,634,635, - 5,117,0,0,635,636,5,98,0,0,636,637,5,108,0,0,637,665,5,101,0,0,638,639, - 5,100,0,0,639,640,5,117,0,0,640,641,5,114,0,0,641,642,5,97,0,0,642,643, - 5,116,0,0,643,644,5,105,0,0,644,645,5,111,0,0,645,665,5,110,0,0,646,647, - 5,116,0,0,647,648,5,105,0,0,648,649,5,109,0,0,649,650,5,101,0,0,650,651, - 5,115,0,0,651,652,5,116,0,0,652,653,5,97,0,0,653,654,5,109,0,0,654,665, - 5,112,0,0,655,656,5,105,0,0,656,657,5,112,0,0,657,658,5,97,0,0,658,659, - 5,100,0,0,659,660,5,100,0,0,660,661,5,114,0,0,661,662,5,101,0,0,662,663, - 5,115,0,0,663,665,5,115,0,0,664,615,1,0,0,0,664,619,1,0,0,0,664,625,1,0, - 0,0,664,628,1,0,0,0,664,632,1,0,0,0,664,638,1,0,0,0,664,646,1,0,0,0,664, - 655,1,0,0,0,665,135,1,0,0,0,666,667,3,44,21,0,667,668,1,0,0,0,668,669,6, - 67,4,0,669,137,1,0,0,0,670,671,3,50,24,0,671,672,1,0,0,0,672,673,6,68,5, - 0,673,139,1,0,0,0,674,675,3,64,31,0,675,676,1,0,0,0,676,677,6,69,6,0,677, - 141,1,0,0,0,678,679,3,4,1,0,679,680,1,0,0,0,680,681,6,70,7,0,681,143,1, - 0,0,0,682,683,3,6,2,0,683,684,1,0,0,0,684,685,6,71,8,0,685,145,1,0,0,0, - 686,687,3,112,55,0,687,688,1,0,0,0,688,689,6,72,9,0,689,147,1,0,0,0,690, - 691,3,126,62,0,691,692,1,0,0,0,692,693,6,73,10,0,693,149,1,0,0,0,46,0,1, - 199,205,339,344,354,387,392,400,408,414,417,422,430,433,435,440,448,450, - 455,465,469,474,476,483,485,495,497,509,511,522,532,545,560,567,574,580, - 582,586,589,593,596,599,613,664,11,5,1,0,0,1,0,7,8,0,4,0,0,7,3,0,7,4,0, - 7,7,0,7,1,0,7,2,0,7,9,0,7,10,0]; + 50,120,51,122,52,124,53,126,10,128,54,130,55,132,0,134,56,136,57,138,0, + 140,0,142,0,144,0,146,0,148,0,150,0,2,0,1,16,2,0,65,90,97,122,2,0,69,69, + 101,101,2,0,43,43,45,45,3,0,48,57,65,70,97,102,2,0,82,82,114,114,10,0,34, + 34,39,39,63,63,92,92,96,98,102,102,110,110,114,114,116,116,118,118,2,0, + 88,88,120,120,3,0,9,9,12,12,32,32,1,0,10,10,2,0,85,85,117,117,4,0,10,10, + 13,13,34,34,92,92,4,0,10,10,13,13,39,39,92,92,1,0,92,92,3,0,10,10,13,13, + 34,34,3,0,10,10,13,13,39,39,2,0,66,66,98,98,773,0,2,1,0,0,0,0,4,1,0,0,0, + 0,6,1,0,0,0,0,8,1,0,0,0,0,10,1,0,0,0,0,12,1,0,0,0,0,14,1,0,0,0,0,16,1,0, + 0,0,0,18,1,0,0,0,0,20,1,0,0,0,0,22,1,0,0,0,0,24,1,0,0,0,0,26,1,0,0,0,0, + 28,1,0,0,0,0,30,1,0,0,0,0,32,1,0,0,0,0,34,1,0,0,0,0,36,1,0,0,0,0,38,1,0, + 0,0,0,40,1,0,0,0,0,42,1,0,0,0,0,44,1,0,0,0,0,46,1,0,0,0,0,48,1,0,0,0,0, + 50,1,0,0,0,0,52,1,0,0,0,0,54,1,0,0,0,0,56,1,0,0,0,0,58,1,0,0,0,0,60,1,0, + 0,0,0,62,1,0,0,0,0,64,1,0,0,0,0,66,1,0,0,0,0,68,1,0,0,0,0,70,1,0,0,0,0, + 72,1,0,0,0,0,74,1,0,0,0,0,76,1,0,0,0,0,78,1,0,0,0,0,80,1,0,0,0,0,82,1,0, + 0,0,0,84,1,0,0,0,0,86,1,0,0,0,0,88,1,0,0,0,0,112,1,0,0,0,0,114,1,0,0,0, + 0,116,1,0,0,0,0,118,1,0,0,0,0,120,1,0,0,0,0,122,1,0,0,0,0,124,1,0,0,0,0, + 126,1,0,0,0,0,128,1,0,0,0,0,130,1,0,0,0,1,132,1,0,0,0,1,134,1,0,0,0,1,136, + 1,0,0,0,1,138,1,0,0,0,1,140,1,0,0,0,1,142,1,0,0,0,1,144,1,0,0,0,1,146,1, + 0,0,0,1,148,1,0,0,0,1,150,1,0,0,0,2,152,1,0,0,0,4,154,1,0,0,0,6,156,1,0, + 0,0,8,158,1,0,0,0,10,162,1,0,0,0,12,165,1,0,0,0,14,173,1,0,0,0,16,178,1, + 0,0,0,18,185,1,0,0,0,20,191,1,0,0,0,22,199,1,0,0,0,24,209,1,0,0,0,26,216, + 1,0,0,0,28,221,1,0,0,0,30,233,1,0,0,0,32,243,1,0,0,0,34,252,1,0,0,0,36, + 259,1,0,0,0,38,264,1,0,0,0,40,267,1,0,0,0,42,270,1,0,0,0,44,273,1,0,0,0, + 46,275,1,0,0,0,48,278,1,0,0,0,50,281,1,0,0,0,52,283,1,0,0,0,54,286,1,0, + 0,0,56,289,1,0,0,0,58,291,1,0,0,0,60,293,1,0,0,0,62,295,1,0,0,0,64,297, + 1,0,0,0,66,299,1,0,0,0,68,301,1,0,0,0,70,303,1,0,0,0,72,305,1,0,0,0,74, + 307,1,0,0,0,76,309,1,0,0,0,78,311,1,0,0,0,80,313,1,0,0,0,82,315,1,0,0,0, + 84,317,1,0,0,0,86,322,1,0,0,0,88,328,1,0,0,0,90,333,1,0,0,0,92,335,1,0, + 0,0,94,337,1,0,0,0,96,339,1,0,0,0,98,348,1,0,0,0,100,350,1,0,0,0,102,356, + 1,0,0,0,104,358,1,0,0,0,106,361,1,0,0,0,108,366,1,0,0,0,110,389,1,0,0,0, + 112,392,1,0,0,0,114,396,1,0,0,0,116,437,1,0,0,0,118,452,1,0,0,0,120,471, + 1,0,0,0,122,569,1,0,0,0,124,571,1,0,0,0,126,576,1,0,0,0,128,589,1,0,0,0, + 130,609,1,0,0,0,132,624,1,0,0,0,134,636,1,0,0,0,136,687,1,0,0,0,138,689, + 1,0,0,0,140,693,1,0,0,0,142,697,1,0,0,0,144,701,1,0,0,0,146,705,1,0,0,0, + 148,709,1,0,0,0,150,713,1,0,0,0,152,153,5,35,0,0,153,3,1,0,0,0,154,155, + 5,58,0,0,155,5,1,0,0,0,156,157,5,44,0,0,157,7,1,0,0,0,158,159,5,97,0,0, + 159,160,5,110,0,0,160,161,5,100,0,0,161,9,1,0,0,0,162,163,5,111,0,0,163, + 164,5,114,0,0,164,11,1,0,0,0,165,166,5,98,0,0,166,167,5,117,0,0,167,168, + 5,116,0,0,168,169,5,32,0,0,169,170,5,110,0,0,170,171,5,111,0,0,171,172, + 5,116,0,0,172,13,1,0,0,0,173,174,5,102,0,0,174,175,5,114,0,0,175,176,5, + 111,0,0,176,177,5,109,0,0,177,15,1,0,0,0,178,179,5,109,0,0,179,180,5,111, + 0,0,180,181,5,100,0,0,181,182,5,117,0,0,182,183,5,108,0,0,183,184,5,101, + 0,0,184,17,1,0,0,0,185,186,5,109,0,0,186,187,5,111,0,0,187,188,5,100,0, + 0,188,189,5,101,0,0,189,190,5,108,0,0,190,19,1,0,0,0,191,192,5,115,0,0, + 192,193,5,99,0,0,193,194,5,104,0,0,194,195,5,101,0,0,195,196,5,109,0,0, + 196,197,5,97,0,0,197,21,1,0,0,0,198,200,3,94,46,0,199,198,1,0,0,0,200,201, + 1,0,0,0,201,199,1,0,0,0,201,202,1,0,0,0,202,203,1,0,0,0,203,205,5,46,0, + 0,204,206,3,94,46,0,205,204,1,0,0,0,206,207,1,0,0,0,207,205,1,0,0,0,207, + 208,1,0,0,0,208,23,1,0,0,0,209,210,5,101,0,0,210,211,5,120,0,0,211,212, + 5,116,0,0,212,213,5,101,0,0,213,214,5,110,0,0,214,215,5,100,0,0,215,25, + 1,0,0,0,216,217,5,116,0,0,217,218,5,121,0,0,218,219,5,112,0,0,219,220,5, + 101,0,0,220,27,1,0,0,0,221,222,5,99,0,0,222,223,5,111,0,0,223,224,5,110, + 0,0,224,225,5,100,0,0,225,226,5,105,0,0,226,227,5,116,0,0,227,228,5,105, + 0,0,228,229,5,111,0,0,229,230,5,110,0,0,230,231,1,0,0,0,231,232,6,13,0, + 0,232,29,1,0,0,0,233,234,5,114,0,0,234,235,5,101,0,0,235,236,5,108,0,0, + 236,237,5,97,0,0,237,238,5,116,0,0,238,239,5,105,0,0,239,240,5,111,0,0, + 240,241,5,110,0,0,241,242,5,115,0,0,242,31,1,0,0,0,243,244,5,114,0,0,244, + 245,5,101,0,0,245,246,5,108,0,0,246,247,5,97,0,0,247,248,5,116,0,0,248, + 249,5,105,0,0,249,250,5,111,0,0,250,251,5,110,0,0,251,33,1,0,0,0,252,253, + 5,100,0,0,253,254,5,101,0,0,254,255,5,102,0,0,255,256,5,105,0,0,256,257, + 5,110,0,0,257,258,5,101,0,0,258,35,1,0,0,0,259,260,5,119,0,0,260,261,5, + 105,0,0,261,262,5,116,0,0,262,263,5,104,0,0,263,37,1,0,0,0,264,265,5,61, + 0,0,265,266,5,61,0,0,266,39,1,0,0,0,267,268,5,33,0,0,268,269,5,61,0,0,269, + 41,1,0,0,0,270,271,5,105,0,0,271,272,5,110,0,0,272,43,1,0,0,0,273,274,5, + 60,0,0,274,45,1,0,0,0,275,276,5,60,0,0,276,277,5,61,0,0,277,47,1,0,0,0, + 278,279,5,62,0,0,279,280,5,61,0,0,280,49,1,0,0,0,281,282,5,62,0,0,282,51, + 1,0,0,0,283,284,5,38,0,0,284,285,5,38,0,0,285,53,1,0,0,0,286,287,5,124, + 0,0,287,288,5,124,0,0,288,55,1,0,0,0,289,290,5,91,0,0,290,57,1,0,0,0,291, + 292,5,93,0,0,292,59,1,0,0,0,293,294,5,123,0,0,294,61,1,0,0,0,295,296,5, + 125,0,0,296,63,1,0,0,0,297,298,5,40,0,0,298,65,1,0,0,0,299,300,5,41,0,0, + 300,67,1,0,0,0,301,302,5,46,0,0,302,69,1,0,0,0,303,304,5,45,0,0,304,71, + 1,0,0,0,305,306,5,33,0,0,306,73,1,0,0,0,307,308,5,63,0,0,308,75,1,0,0,0, + 309,310,5,43,0,0,310,77,1,0,0,0,311,312,5,42,0,0,312,79,1,0,0,0,313,314, + 5,47,0,0,314,81,1,0,0,0,315,316,5,37,0,0,316,83,1,0,0,0,317,318,5,116,0, + 0,318,319,5,114,0,0,319,320,5,117,0,0,320,321,5,101,0,0,321,85,1,0,0,0, + 322,323,5,102,0,0,323,324,5,97,0,0,324,325,5,108,0,0,325,326,5,115,0,0, + 326,327,5,101,0,0,327,87,1,0,0,0,328,329,5,110,0,0,329,330,5,117,0,0,330, + 331,5,108,0,0,331,332,5,108,0,0,332,89,1,0,0,0,333,334,5,92,0,0,334,91, + 1,0,0,0,335,336,7,0,0,0,336,93,1,0,0,0,337,338,2,48,57,0,338,95,1,0,0,0, + 339,341,7,1,0,0,340,342,7,2,0,0,341,340,1,0,0,0,341,342,1,0,0,0,342,344, + 1,0,0,0,343,345,3,94,46,0,344,343,1,0,0,0,345,346,1,0,0,0,346,344,1,0,0, + 0,346,347,1,0,0,0,347,97,1,0,0,0,348,349,7,3,0,0,349,99,1,0,0,0,350,351, + 7,4,0,0,351,101,1,0,0,0,352,357,3,104,51,0,353,357,3,108,53,0,354,357,3, + 110,54,0,355,357,3,106,52,0,356,352,1,0,0,0,356,353,1,0,0,0,356,354,1,0, + 0,0,356,355,1,0,0,0,357,103,1,0,0,0,358,359,3,90,44,0,359,360,7,5,0,0,360, + 105,1,0,0,0,361,362,3,90,44,0,362,363,2,48,51,0,363,364,2,48,55,0,364,365, + 2,48,55,0,365,107,1,0,0,0,366,367,3,90,44,0,367,368,7,6,0,0,368,369,3,98, + 48,0,369,370,3,98,48,0,370,109,1,0,0,0,371,372,3,90,44,0,372,373,5,117, + 0,0,373,374,3,98,48,0,374,375,3,98,48,0,375,376,3,98,48,0,376,377,3,98, + 48,0,377,390,1,0,0,0,378,379,3,90,44,0,379,380,5,85,0,0,380,381,3,98,48, + 0,381,382,3,98,48,0,382,383,3,98,48,0,383,384,3,98,48,0,384,385,3,98,48, + 0,385,386,3,98,48,0,386,387,3,98,48,0,387,388,3,98,48,0,388,390,1,0,0,0, + 389,371,1,0,0,0,389,378,1,0,0,0,390,111,1,0,0,0,391,393,7,7,0,0,392,391, + 1,0,0,0,393,394,1,0,0,0,394,392,1,0,0,0,394,395,1,0,0,0,395,113,1,0,0,0, + 396,397,5,47,0,0,397,398,5,47,0,0,398,402,1,0,0,0,399,401,8,8,0,0,400,399, + 1,0,0,0,401,404,1,0,0,0,402,400,1,0,0,0,402,403,1,0,0,0,403,405,1,0,0,0, + 404,402,1,0,0,0,405,406,6,56,1,0,406,115,1,0,0,0,407,409,3,94,46,0,408, + 407,1,0,0,0,409,410,1,0,0,0,410,408,1,0,0,0,410,411,1,0,0,0,411,412,1,0, + 0,0,412,414,5,46,0,0,413,415,3,94,46,0,414,413,1,0,0,0,415,416,1,0,0,0, + 416,414,1,0,0,0,416,417,1,0,0,0,417,419,1,0,0,0,418,420,3,96,47,0,419,418, + 1,0,0,0,419,420,1,0,0,0,420,438,1,0,0,0,421,423,3,94,46,0,422,421,1,0,0, + 0,423,424,1,0,0,0,424,422,1,0,0,0,424,425,1,0,0,0,425,426,1,0,0,0,426,427, + 3,96,47,0,427,438,1,0,0,0,428,430,5,46,0,0,429,431,3,94,46,0,430,429,1, + 0,0,0,431,432,1,0,0,0,432,430,1,0,0,0,432,433,1,0,0,0,433,435,1,0,0,0,434, + 436,3,96,47,0,435,434,1,0,0,0,435,436,1,0,0,0,436,438,1,0,0,0,437,408,1, + 0,0,0,437,422,1,0,0,0,437,428,1,0,0,0,438,117,1,0,0,0,439,441,3,94,46,0, + 440,439,1,0,0,0,441,442,1,0,0,0,442,440,1,0,0,0,442,443,1,0,0,0,443,453, + 1,0,0,0,444,445,5,48,0,0,445,446,5,120,0,0,446,448,1,0,0,0,447,449,3,98, + 48,0,448,447,1,0,0,0,449,450,1,0,0,0,450,448,1,0,0,0,450,451,1,0,0,0,451, + 453,1,0,0,0,452,440,1,0,0,0,452,444,1,0,0,0,453,119,1,0,0,0,454,456,3,94, + 46,0,455,454,1,0,0,0,456,457,1,0,0,0,457,455,1,0,0,0,457,458,1,0,0,0,458, + 459,1,0,0,0,459,460,7,9,0,0,460,472,1,0,0,0,461,462,5,48,0,0,462,463,5, + 120,0,0,463,465,1,0,0,0,464,466,3,98,48,0,465,464,1,0,0,0,466,467,1,0,0, + 0,467,465,1,0,0,0,467,468,1,0,0,0,468,469,1,0,0,0,469,470,7,9,0,0,470,472, + 1,0,0,0,471,455,1,0,0,0,471,461,1,0,0,0,472,121,1,0,0,0,473,478,5,34,0, + 0,474,477,3,102,50,0,475,477,8,10,0,0,476,474,1,0,0,0,476,475,1,0,0,0,477, + 480,1,0,0,0,478,476,1,0,0,0,478,479,1,0,0,0,479,481,1,0,0,0,480,478,1,0, + 0,0,481,570,5,34,0,0,482,487,5,39,0,0,483,486,3,102,50,0,484,486,8,11,0, + 0,485,483,1,0,0,0,485,484,1,0,0,0,486,489,1,0,0,0,487,485,1,0,0,0,487,488, + 1,0,0,0,488,490,1,0,0,0,489,487,1,0,0,0,490,570,5,39,0,0,491,492,5,34,0, + 0,492,493,5,34,0,0,493,494,5,34,0,0,494,499,1,0,0,0,495,498,3,102,50,0, + 496,498,8,12,0,0,497,495,1,0,0,0,497,496,1,0,0,0,498,501,1,0,0,0,499,500, + 1,0,0,0,499,497,1,0,0,0,500,502,1,0,0,0,501,499,1,0,0,0,502,503,5,34,0, + 0,503,504,5,34,0,0,504,570,5,34,0,0,505,506,5,39,0,0,506,507,5,39,0,0,507, + 508,5,39,0,0,508,513,1,0,0,0,509,512,3,102,50,0,510,512,8,12,0,0,511,509, + 1,0,0,0,511,510,1,0,0,0,512,515,1,0,0,0,513,514,1,0,0,0,513,511,1,0,0,0, + 514,516,1,0,0,0,515,513,1,0,0,0,516,517,5,39,0,0,517,518,5,39,0,0,518,570, + 5,39,0,0,519,520,3,100,49,0,520,524,5,34,0,0,521,523,8,13,0,0,522,521,1, + 0,0,0,523,526,1,0,0,0,524,522,1,0,0,0,524,525,1,0,0,0,525,527,1,0,0,0,526, + 524,1,0,0,0,527,528,5,34,0,0,528,570,1,0,0,0,529,530,3,100,49,0,530,534, + 5,39,0,0,531,533,8,14,0,0,532,531,1,0,0,0,533,536,1,0,0,0,534,532,1,0,0, + 0,534,535,1,0,0,0,535,537,1,0,0,0,536,534,1,0,0,0,537,538,5,39,0,0,538, + 570,1,0,0,0,539,540,3,100,49,0,540,541,5,34,0,0,541,542,5,34,0,0,542,543, + 5,34,0,0,543,547,1,0,0,0,544,546,9,0,0,0,545,544,1,0,0,0,546,549,1,0,0, + 0,547,548,1,0,0,0,547,545,1,0,0,0,548,550,1,0,0,0,549,547,1,0,0,0,550,551, + 5,34,0,0,551,552,5,34,0,0,552,553,5,34,0,0,553,570,1,0,0,0,554,555,3,100, + 49,0,555,556,5,39,0,0,556,557,5,39,0,0,557,558,5,39,0,0,558,562,1,0,0,0, + 559,561,9,0,0,0,560,559,1,0,0,0,561,564,1,0,0,0,562,563,1,0,0,0,562,560, + 1,0,0,0,563,565,1,0,0,0,564,562,1,0,0,0,565,566,5,39,0,0,566,567,5,39,0, + 0,567,568,5,39,0,0,568,570,1,0,0,0,569,473,1,0,0,0,569,482,1,0,0,0,569, + 491,1,0,0,0,569,505,1,0,0,0,569,519,1,0,0,0,569,529,1,0,0,0,569,539,1,0, + 0,0,569,554,1,0,0,0,570,123,1,0,0,0,571,572,7,15,0,0,572,573,3,122,60,0, + 573,125,1,0,0,0,574,577,3,92,45,0,575,577,5,95,0,0,576,574,1,0,0,0,576, + 575,1,0,0,0,577,584,1,0,0,0,578,583,3,92,45,0,579,583,3,94,46,0,580,583, + 5,95,0,0,581,583,3,70,34,0,582,578,1,0,0,0,582,579,1,0,0,0,582,580,1,0, + 0,0,582,581,1,0,0,0,583,586,1,0,0,0,584,582,1,0,0,0,584,585,1,0,0,0,585, + 127,1,0,0,0,586,584,1,0,0,0,587,590,3,92,45,0,588,590,5,95,0,0,589,587, + 1,0,0,0,589,588,1,0,0,0,590,605,1,0,0,0,591,595,3,80,39,0,592,595,3,68, + 33,0,593,595,3,70,34,0,594,591,1,0,0,0,594,592,1,0,0,0,594,593,1,0,0,0, + 594,595,1,0,0,0,595,599,1,0,0,0,596,600,3,92,45,0,597,600,3,94,46,0,598, + 600,5,95,0,0,599,596,1,0,0,0,599,597,1,0,0,0,599,598,1,0,0,0,600,601,1, + 0,0,0,601,599,1,0,0,0,601,602,1,0,0,0,602,604,1,0,0,0,603,594,1,0,0,0,604, + 607,1,0,0,0,605,603,1,0,0,0,605,606,1,0,0,0,606,129,1,0,0,0,607,605,1,0, + 0,0,608,610,3,112,55,0,609,608,1,0,0,0,609,610,1,0,0,0,610,616,1,0,0,0, + 611,613,5,13,0,0,612,611,1,0,0,0,612,613,1,0,0,0,613,614,1,0,0,0,614,617, + 5,10,0,0,615,617,2,12,13,0,616,612,1,0,0,0,616,615,1,0,0,0,617,619,1,0, + 0,0,618,620,3,112,55,0,619,618,1,0,0,0,619,620,1,0,0,0,620,622,1,0,0,0, + 621,623,3,130,64,0,622,621,1,0,0,0,622,623,1,0,0,0,623,131,1,0,0,0,624, + 625,3,66,32,0,625,626,1,0,0,0,626,627,6,65,2,0,627,628,6,65,3,0,628,133, + 1,0,0,0,629,630,5,109,0,0,630,631,5,97,0,0,631,637,5,112,0,0,632,633,5, + 108,0,0,633,634,5,105,0,0,634,635,5,115,0,0,635,637,5,116,0,0,636,629,1, + 0,0,0,636,632,1,0,0,0,637,135,1,0,0,0,638,639,5,98,0,0,639,640,5,111,0, + 0,640,641,5,111,0,0,641,688,5,108,0,0,642,643,5,115,0,0,643,644,5,116,0, + 0,644,645,5,114,0,0,645,646,5,105,0,0,646,647,5,110,0,0,647,688,5,103,0, + 0,648,649,5,105,0,0,649,650,5,110,0,0,650,688,5,116,0,0,651,652,5,117,0, + 0,652,653,5,105,0,0,653,654,5,110,0,0,654,688,5,116,0,0,655,656,5,100,0, + 0,656,657,5,111,0,0,657,658,5,117,0,0,658,659,5,98,0,0,659,660,5,108,0, + 0,660,688,5,101,0,0,661,662,5,100,0,0,662,663,5,117,0,0,663,664,5,114,0, + 0,664,665,5,97,0,0,665,666,5,116,0,0,666,667,5,105,0,0,667,668,5,111,0, + 0,668,688,5,110,0,0,669,670,5,116,0,0,670,671,5,105,0,0,671,672,5,109,0, + 0,672,673,5,101,0,0,673,674,5,115,0,0,674,675,5,116,0,0,675,676,5,97,0, + 0,676,677,5,109,0,0,677,688,5,112,0,0,678,679,5,105,0,0,679,680,5,112,0, + 0,680,681,5,97,0,0,681,682,5,100,0,0,682,683,5,100,0,0,683,684,5,114,0, + 0,684,685,5,101,0,0,685,686,5,115,0,0,686,688,5,115,0,0,687,638,1,0,0,0, + 687,642,1,0,0,0,687,648,1,0,0,0,687,651,1,0,0,0,687,655,1,0,0,0,687,661, + 1,0,0,0,687,669,1,0,0,0,687,678,1,0,0,0,688,137,1,0,0,0,689,690,3,44,21, + 0,690,691,1,0,0,0,691,692,6,68,4,0,692,139,1,0,0,0,693,694,3,50,24,0,694, + 695,1,0,0,0,695,696,6,69,5,0,696,141,1,0,0,0,697,698,3,64,31,0,698,699, + 1,0,0,0,699,700,6,70,6,0,700,143,1,0,0,0,701,702,3,4,1,0,702,703,1,0,0, + 0,703,704,6,71,7,0,704,145,1,0,0,0,705,706,3,6,2,0,706,707,1,0,0,0,707, + 708,6,72,8,0,708,147,1,0,0,0,709,710,3,112,55,0,710,711,1,0,0,0,711,712, + 6,73,9,0,712,149,1,0,0,0,713,714,3,126,62,0,714,715,1,0,0,0,715,716,6,74, + 10,0,716,151,1,0,0,0,51,0,1,201,207,341,346,356,389,394,402,410,416,419, + 424,432,435,437,442,450,452,457,467,471,476,478,485,487,497,499,511,513, + 524,534,547,562,569,576,582,584,589,594,599,601,605,609,612,616,619,622, + 636,687,11,5,1,0,0,1,0,7,8,0,4,0,0,7,3,0,7,4,0,7,7,0,7,1,0,7,2,0,7,9,0, + 7,10,0]; private static __ATN: ATN; public static get _ATN(): ATN { diff --git a/pkg/js/gen/OpenFGAParser.interp b/pkg/js/gen/OpenFGAParser.interp index 2e582364..56431d97 100644 --- a/pkg/js/gen/OpenFGAParser.interp +++ b/pkg/js/gen/OpenFGAParser.interp @@ -56,6 +56,7 @@ null null null null +null token symbolic names: null @@ -112,6 +113,7 @@ NUM_INT NUM_UINT STRING BYTES +EXTENDED_IDENTIFIER NEWLINE CONDITION_PARAM_CONTAINER CONDITION_PARAM_TYPE @@ -142,8 +144,9 @@ parameterName parameterType multiLineComment identifier +extended_identifier conditionExpression atn: -[4, 1, 56, 386, 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, 1, 0, 3, 0, 54, 8, 0, 1, 0, 3, 0, 57, 8, 0, 1, 0, 1, 0, 3, 0, 61, 8, 0, 1, 0, 3, 0, 64, 8, 0, 1, 0, 1, 0, 3, 0, 68, 8, 0, 1, 0, 1, 0, 3, 0, 72, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 79, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 87, 8, 1, 1, 2, 1, 2, 1, 2, 3, 2, 92, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 98, 8, 2, 1, 3, 5, 3, 101, 8, 3, 10, 3, 12, 3, 104, 9, 3, 1, 4, 1, 4, 3, 4, 108, 8, 4, 1, 4, 1, 4, 1, 4, 3, 4, 113, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 4, 121, 8, 4, 11, 4, 12, 4, 122, 3, 4, 125, 8, 4, 1, 5, 1, 5, 3, 5, 129, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 136, 8, 5, 1, 5, 1, 5, 3, 5, 140, 8, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 3, 7, 149, 8, 7, 1, 7, 3, 7, 152, 8, 7, 1, 8, 1, 8, 3, 8, 156, 8, 8, 1, 8, 3, 8, 159, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 166, 8, 9, 4, 9, 168, 8, 9, 11, 9, 12, 9, 169, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 177, 8, 9, 4, 9, 179, 8, 9, 11, 9, 12, 9, 180, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 188, 8, 9, 3, 9, 190, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, 5, 11, 196, 8, 11, 10, 11, 12, 11, 199, 9, 11, 1, 11, 1, 11, 3, 11, 203, 8, 11, 1, 11, 5, 11, 206, 8, 11, 10, 11, 12, 11, 209, 9, 11, 1, 11, 1, 11, 1, 12, 1, 12, 5, 12, 215, 8, 12, 10, 12, 12, 12, 218, 9, 12, 1, 12, 1, 12, 3, 12, 222, 8, 12, 1, 12, 5, 12, 225, 8, 12, 10, 12, 12, 12, 228, 9, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 234, 8, 13, 1, 13, 1, 13, 3, 13, 238, 8, 13, 1, 13, 1, 13, 3, 13, 242, 8, 13, 1, 13, 1, 13, 3, 13, 246, 8, 13, 5, 13, 248, 8, 13, 10, 13, 12, 13, 251, 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 260, 8, 14, 1, 15, 3, 15, 263, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 272, 8, 15, 1, 15, 3, 15, 275, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 282, 8, 16, 1, 17, 5, 17, 285, 8, 17, 10, 17, 12, 17, 288, 9, 17, 1, 18, 1, 18, 3, 18, 292, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 299, 8, 18, 1, 18, 1, 18, 3, 18, 303, 8, 18, 1, 18, 1, 18, 3, 18, 307, 8, 18, 1, 18, 1, 18, 3, 18, 311, 8, 18, 1, 18, 1, 18, 3, 18, 315, 8, 18, 5, 18, 317, 8, 18, 10, 18, 12, 18, 320, 9, 18, 1, 18, 3, 18, 323, 8, 18, 1, 18, 1, 18, 3, 18, 327, 8, 18, 1, 18, 1, 18, 3, 18, 331, 8, 18, 1, 18, 3, 18, 334, 8, 18, 1, 18, 1, 18, 3, 18, 338, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 3, 20, 345, 8, 20, 1, 20, 1, 20, 3, 20, 349, 8, 20, 1, 20, 1, 20, 3, 20, 353, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 364, 8, 22, 1, 23, 1, 23, 5, 23, 368, 8, 23, 10, 23, 12, 23, 371, 9, 23, 1, 23, 1, 23, 3, 23, 375, 8, 23, 1, 24, 1, 24, 1, 25, 1, 25, 5, 25, 381, 8, 25, 10, 25, 12, 25, 384, 9, 25, 1, 25, 0, 0, 26, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 0, 4, 1, 0, 54, 54, 4, 0, 10, 10, 16, 18, 20, 21, 24, 24, 4, 0, 3, 5, 7, 10, 27, 35, 37, 54, 1, 0, 36, 36, 427, 0, 53, 1, 0, 0, 0, 2, 78, 1, 0, 0, 0, 4, 91, 1, 0, 0, 0, 6, 102, 1, 0, 0, 0, 8, 107, 1, 0, 0, 0, 10, 128, 1, 0, 0, 0, 12, 143, 1, 0, 0, 0, 14, 148, 1, 0, 0, 0, 16, 155, 1, 0, 0, 0, 18, 189, 1, 0, 0, 0, 20, 191, 1, 0, 0, 0, 22, 193, 1, 0, 0, 0, 24, 212, 1, 0, 0, 0, 26, 231, 1, 0, 0, 0, 28, 254, 1, 0, 0, 0, 30, 262, 1, 0, 0, 0, 32, 276, 1, 0, 0, 0, 34, 286, 1, 0, 0, 0, 36, 291, 1, 0, 0, 0, 38, 341, 1, 0, 0, 0, 40, 344, 1, 0, 0, 0, 42, 356, 1, 0, 0, 0, 44, 363, 1, 0, 0, 0, 46, 365, 1, 0, 0, 0, 48, 376, 1, 0, 0, 0, 50, 382, 1, 0, 0, 0, 52, 54, 5, 9, 0, 0, 53, 52, 1, 0, 0, 0, 53, 54, 1, 0, 0, 0, 54, 56, 1, 0, 0, 0, 55, 57, 5, 54, 0, 0, 56, 55, 1, 0, 0, 0, 56, 57, 1, 0, 0, 0, 57, 60, 1, 0, 0, 0, 58, 61, 3, 2, 1, 0, 59, 61, 3, 4, 2, 0, 60, 58, 1, 0, 0, 0, 60, 59, 1, 0, 0, 0, 61, 63, 1, 0, 0, 0, 62, 64, 5, 54, 0, 0, 63, 62, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 65, 1, 0, 0, 0, 65, 67, 3, 6, 3, 0, 66, 68, 5, 54, 0, 0, 67, 66, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 71, 3, 34, 17, 0, 70, 72, 5, 54, 0, 0, 71, 70, 1, 0, 0, 0, 71, 72, 1, 0, 0, 0, 72, 73, 1, 0, 0, 0, 73, 74, 5, 0, 0, 1, 74, 1, 1, 0, 0, 0, 75, 76, 3, 46, 23, 0, 76, 77, 5, 54, 0, 0, 77, 79, 1, 0, 0, 0, 78, 75, 1, 0, 0, 0, 78, 79, 1, 0, 0, 0, 79, 80, 1, 0, 0, 0, 80, 81, 5, 17, 0, 0, 81, 82, 5, 54, 0, 0, 82, 83, 5, 18, 0, 0, 83, 84, 5, 9, 0, 0, 84, 86, 5, 19, 0, 0, 85, 87, 5, 9, 0, 0, 86, 85, 1, 0, 0, 0, 86, 87, 1, 0, 0, 0, 87, 3, 1, 0, 0, 0, 88, 89, 3, 46, 23, 0, 89, 90, 5, 54, 0, 0, 90, 92, 1, 0, 0, 0, 91, 88, 1, 0, 0, 0, 91, 92, 1, 0, 0, 0, 92, 93, 1, 0, 0, 0, 93, 94, 5, 16, 0, 0, 94, 95, 5, 9, 0, 0, 95, 97, 3, 48, 24, 0, 96, 98, 5, 9, 0, 0, 97, 96, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 5, 1, 0, 0, 0, 99, 101, 3, 8, 4, 0, 100, 99, 1, 0, 0, 0, 101, 104, 1, 0, 0, 0, 102, 100, 1, 0, 0, 0, 102, 103, 1, 0, 0, 0, 103, 7, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 105, 106, 5, 54, 0, 0, 106, 108, 3, 46, 23, 0, 107, 105, 1, 0, 0, 0, 107, 108, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 112, 5, 54, 0, 0, 110, 111, 5, 20, 0, 0, 111, 113, 5, 9, 0, 0, 112, 110, 1, 0, 0, 0, 112, 113, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 115, 5, 21, 0, 0, 115, 116, 5, 9, 0, 0, 116, 124, 3, 48, 24, 0, 117, 118, 5, 54, 0, 0, 118, 120, 5, 23, 0, 0, 119, 121, 3, 10, 5, 0, 120, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 120, 1, 0, 0, 0, 122, 123, 1, 0, 0, 0, 123, 125, 1, 0, 0, 0, 124, 117, 1, 0, 0, 0, 124, 125, 1, 0, 0, 0, 125, 9, 1, 0, 0, 0, 126, 127, 5, 54, 0, 0, 127, 129, 3, 46, 23, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 130, 1, 0, 0, 0, 130, 131, 5, 54, 0, 0, 131, 132, 5, 25, 0, 0, 132, 133, 5, 9, 0, 0, 133, 135, 3, 12, 6, 0, 134, 136, 5, 9, 0, 0, 135, 134, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 139, 5, 1, 0, 0, 138, 140, 5, 9, 0, 0, 139, 138, 1, 0, 0, 0, 139, 140, 1, 0, 0, 0, 140, 141, 1, 0, 0, 0, 141, 142, 3, 14, 7, 0, 142, 11, 1, 0, 0, 0, 143, 144, 3, 48, 24, 0, 144, 13, 1, 0, 0, 0, 145, 149, 3, 26, 13, 0, 146, 149, 3, 20, 10, 0, 147, 149, 3, 22, 11, 0, 148, 145, 1, 0, 0, 0, 148, 146, 1, 0, 0, 0, 148, 147, 1, 0, 0, 0, 149, 151, 1, 0, 0, 0, 150, 152, 3, 18, 9, 0, 151, 150, 1, 0, 0, 0, 151, 152, 1, 0, 0, 0, 152, 15, 1, 0, 0, 0, 153, 156, 3, 20, 10, 0, 154, 156, 3, 24, 12, 0, 155, 153, 1, 0, 0, 0, 155, 154, 1, 0, 0, 0, 156, 158, 1, 0, 0, 0, 157, 159, 3, 18, 9, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 17, 1, 0, 0, 0, 160, 161, 5, 9, 0, 0, 161, 162, 5, 13, 0, 0, 162, 165, 5, 9, 0, 0, 163, 166, 3, 20, 10, 0, 164, 166, 3, 24, 12, 0, 165, 163, 1, 0, 0, 0, 165, 164, 1, 0, 0, 0, 166, 168, 1, 0, 0, 0, 167, 160, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 190, 1, 0, 0, 0, 171, 172, 5, 9, 0, 0, 172, 173, 5, 12, 0, 0, 173, 176, 5, 9, 0, 0, 174, 177, 3, 20, 10, 0, 175, 177, 3, 24, 12, 0, 176, 174, 1, 0, 0, 0, 176, 175, 1, 0, 0, 0, 177, 179, 1, 0, 0, 0, 178, 171, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 190, 1, 0, 0, 0, 182, 183, 5, 9, 0, 0, 183, 184, 5, 14, 0, 0, 184, 187, 5, 9, 0, 0, 185, 188, 3, 20, 10, 0, 186, 188, 3, 24, 12, 0, 187, 185, 1, 0, 0, 0, 187, 186, 1, 0, 0, 0, 188, 190, 1, 0, 0, 0, 189, 167, 1, 0, 0, 0, 189, 178, 1, 0, 0, 0, 189, 182, 1, 0, 0, 0, 190, 19, 1, 0, 0, 0, 191, 192, 3, 28, 14, 0, 192, 21, 1, 0, 0, 0, 193, 197, 5, 7, 0, 0, 194, 196, 5, 9, 0, 0, 195, 194, 1, 0, 0, 0, 196, 199, 1, 0, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 202, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 200, 203, 3, 14, 7, 0, 201, 203, 3, 24, 12, 0, 202, 200, 1, 0, 0, 0, 202, 201, 1, 0, 0, 0, 203, 207, 1, 0, 0, 0, 204, 206, 5, 9, 0, 0, 205, 204, 1, 0, 0, 0, 206, 209, 1, 0, 0, 0, 207, 205, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 210, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 210, 211, 5, 8, 0, 0, 211, 23, 1, 0, 0, 0, 212, 216, 5, 7, 0, 0, 213, 215, 5, 9, 0, 0, 214, 213, 1, 0, 0, 0, 215, 218, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 221, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 219, 222, 3, 16, 8, 0, 220, 222, 3, 24, 12, 0, 221, 219, 1, 0, 0, 0, 221, 220, 1, 0, 0, 0, 222, 226, 1, 0, 0, 0, 223, 225, 5, 9, 0, 0, 224, 223, 1, 0, 0, 0, 225, 228, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 229, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 229, 230, 5, 8, 0, 0, 230, 25, 1, 0, 0, 0, 231, 233, 5, 5, 0, 0, 232, 234, 5, 9, 0, 0, 233, 232, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 3, 30, 15, 0, 236, 238, 5, 9, 0, 0, 237, 236, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 249, 1, 0, 0, 0, 239, 241, 5, 2, 0, 0, 240, 242, 5, 9, 0, 0, 241, 240, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 245, 3, 30, 15, 0, 244, 246, 5, 9, 0, 0, 245, 244, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 248, 1, 0, 0, 0, 247, 239, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 252, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 253, 5, 34, 0, 0, 253, 27, 1, 0, 0, 0, 254, 259, 3, 48, 24, 0, 255, 256, 5, 9, 0, 0, 256, 257, 5, 15, 0, 0, 257, 258, 5, 9, 0, 0, 258, 260, 3, 48, 24, 0, 259, 255, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 29, 1, 0, 0, 0, 261, 263, 5, 54, 0, 0, 262, 261, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 271, 1, 0, 0, 0, 264, 272, 3, 32, 16, 0, 265, 266, 3, 32, 16, 0, 266, 267, 5, 9, 0, 0, 267, 268, 5, 26, 0, 0, 268, 269, 5, 9, 0, 0, 269, 270, 3, 38, 19, 0, 270, 272, 1, 0, 0, 0, 271, 264, 1, 0, 0, 0, 271, 265, 1, 0, 0, 0, 272, 274, 1, 0, 0, 0, 273, 275, 5, 54, 0, 0, 274, 273, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 31, 1, 0, 0, 0, 276, 281, 3, 48, 24, 0, 277, 278, 5, 1, 0, 0, 278, 282, 5, 42, 0, 0, 279, 280, 5, 11, 0, 0, 280, 282, 3, 48, 24, 0, 281, 277, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 33, 1, 0, 0, 0, 283, 285, 3, 36, 18, 0, 284, 283, 1, 0, 0, 0, 285, 288, 1, 0, 0, 0, 286, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 35, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 289, 290, 5, 54, 0, 0, 290, 292, 3, 46, 23, 0, 291, 289, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 294, 5, 54, 0, 0, 294, 295, 5, 22, 0, 0, 295, 296, 5, 9, 0, 0, 296, 298, 3, 38, 19, 0, 297, 299, 5, 9, 0, 0, 298, 297, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 302, 5, 7, 0, 0, 301, 303, 5, 9, 0, 0, 302, 301, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 306, 3, 40, 20, 0, 305, 307, 5, 9, 0, 0, 306, 305, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 318, 1, 0, 0, 0, 308, 310, 5, 2, 0, 0, 309, 311, 5, 9, 0, 0, 310, 309, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 314, 3, 40, 20, 0, 313, 315, 5, 9, 0, 0, 314, 313, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 317, 1, 0, 0, 0, 316, 308, 1, 0, 0, 0, 317, 320, 1, 0, 0, 0, 318, 316, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 321, 323, 5, 54, 0, 0, 322, 321, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 326, 5, 8, 0, 0, 325, 327, 5, 9, 0, 0, 326, 325, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 330, 5, 35, 0, 0, 329, 331, 5, 54, 0, 0, 330, 329, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 334, 5, 9, 0, 0, 333, 332, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 337, 3, 50, 25, 0, 336, 338, 5, 54, 0, 0, 337, 336, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 340, 5, 36, 0, 0, 340, 37, 1, 0, 0, 0, 341, 342, 5, 10, 0, 0, 342, 39, 1, 0, 0, 0, 343, 345, 5, 54, 0, 0, 344, 343, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 3, 42, 21, 0, 347, 349, 5, 9, 0, 0, 348, 347, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 352, 5, 1, 0, 0, 351, 353, 5, 9, 0, 0, 352, 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 355, 3, 44, 22, 0, 355, 41, 1, 0, 0, 0, 356, 357, 5, 10, 0, 0, 357, 43, 1, 0, 0, 0, 358, 364, 5, 56, 0, 0, 359, 360, 5, 55, 0, 0, 360, 361, 5, 3, 0, 0, 361, 362, 5, 56, 0, 0, 362, 364, 5, 4, 0, 0, 363, 358, 1, 0, 0, 0, 363, 359, 1, 0, 0, 0, 364, 45, 1, 0, 0, 0, 365, 369, 5, 11, 0, 0, 366, 368, 8, 0, 0, 0, 367, 366, 1, 0, 0, 0, 368, 371, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 374, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 372, 373, 5, 54, 0, 0, 373, 375, 3, 46, 23, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 47, 1, 0, 0, 0, 376, 377, 7, 1, 0, 0, 377, 49, 1, 0, 0, 0, 378, 381, 7, 2, 0, 0, 379, 381, 8, 3, 0, 0, 380, 378, 1, 0, 0, 0, 380, 379, 1, 0, 0, 0, 381, 384, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 51, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 65, 53, 56, 60, 63, 67, 71, 78, 86, 91, 97, 102, 107, 112, 122, 124, 128, 135, 139, 148, 151, 155, 158, 165, 169, 176, 180, 187, 189, 197, 202, 207, 216, 221, 226, 233, 237, 241, 245, 249, 259, 262, 271, 274, 281, 286, 291, 298, 302, 306, 310, 314, 318, 322, 326, 330, 333, 337, 344, 348, 352, 363, 369, 374, 380, 382] \ No newline at end of file +[4, 1, 57, 392, 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, 1, 0, 3, 0, 56, 8, 0, 1, 0, 3, 0, 59, 8, 0, 1, 0, 1, 0, 3, 0, 63, 8, 0, 1, 0, 3, 0, 66, 8, 0, 1, 0, 1, 0, 3, 0, 70, 8, 0, 1, 0, 1, 0, 3, 0, 74, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 81, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 89, 8, 1, 1, 2, 1, 2, 1, 2, 3, 2, 94, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 100, 8, 2, 1, 3, 5, 3, 103, 8, 3, 10, 3, 12, 3, 106, 9, 3, 1, 4, 1, 4, 3, 4, 110, 8, 4, 1, 4, 1, 4, 1, 4, 3, 4, 115, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 4, 123, 8, 4, 11, 4, 12, 4, 124, 3, 4, 127, 8, 4, 1, 5, 1, 5, 3, 5, 131, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 138, 8, 5, 1, 5, 1, 5, 3, 5, 142, 8, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 3, 7, 151, 8, 7, 1, 7, 3, 7, 154, 8, 7, 1, 8, 1, 8, 3, 8, 158, 8, 8, 1, 8, 3, 8, 161, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 168, 8, 9, 4, 9, 170, 8, 9, 11, 9, 12, 9, 171, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 179, 8, 9, 4, 9, 181, 8, 9, 11, 9, 12, 9, 182, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 190, 8, 9, 3, 9, 192, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, 5, 11, 198, 8, 11, 10, 11, 12, 11, 201, 9, 11, 1, 11, 1, 11, 3, 11, 205, 8, 11, 1, 11, 5, 11, 208, 8, 11, 10, 11, 12, 11, 211, 9, 11, 1, 11, 1, 11, 1, 12, 1, 12, 5, 12, 217, 8, 12, 10, 12, 12, 12, 220, 9, 12, 1, 12, 1, 12, 3, 12, 224, 8, 12, 1, 12, 5, 12, 227, 8, 12, 10, 12, 12, 12, 230, 9, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 236, 8, 13, 1, 13, 1, 13, 3, 13, 240, 8, 13, 1, 13, 1, 13, 3, 13, 244, 8, 13, 1, 13, 1, 13, 3, 13, 248, 8, 13, 5, 13, 250, 8, 13, 10, 13, 12, 13, 253, 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 262, 8, 14, 1, 15, 3, 15, 265, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 274, 8, 15, 1, 15, 3, 15, 277, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 284, 8, 16, 1, 17, 5, 17, 287, 8, 17, 10, 17, 12, 17, 290, 9, 17, 1, 18, 1, 18, 3, 18, 294, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 301, 8, 18, 1, 18, 1, 18, 3, 18, 305, 8, 18, 1, 18, 1, 18, 3, 18, 309, 8, 18, 1, 18, 1, 18, 3, 18, 313, 8, 18, 1, 18, 1, 18, 3, 18, 317, 8, 18, 5, 18, 319, 8, 18, 10, 18, 12, 18, 322, 9, 18, 1, 18, 3, 18, 325, 8, 18, 1, 18, 1, 18, 3, 18, 329, 8, 18, 1, 18, 1, 18, 3, 18, 333, 8, 18, 1, 18, 3, 18, 336, 8, 18, 1, 18, 1, 18, 3, 18, 340, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 3, 20, 347, 8, 20, 1, 20, 1, 20, 3, 20, 351, 8, 20, 1, 20, 1, 20, 3, 20, 355, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 366, 8, 22, 1, 23, 1, 23, 5, 23, 370, 8, 23, 10, 23, 12, 23, 373, 9, 23, 1, 23, 1, 23, 3, 23, 377, 8, 23, 1, 24, 1, 24, 1, 25, 1, 25, 3, 25, 383, 8, 25, 1, 26, 1, 26, 5, 26, 387, 8, 26, 10, 26, 12, 26, 390, 9, 26, 1, 26, 0, 0, 27, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 0, 4, 1, 0, 55, 55, 4, 0, 10, 10, 16, 18, 20, 21, 24, 24, 5, 0, 3, 5, 7, 10, 27, 35, 37, 53, 55, 55, 1, 0, 36, 36, 433, 0, 55, 1, 0, 0, 0, 2, 80, 1, 0, 0, 0, 4, 93, 1, 0, 0, 0, 6, 104, 1, 0, 0, 0, 8, 109, 1, 0, 0, 0, 10, 130, 1, 0, 0, 0, 12, 145, 1, 0, 0, 0, 14, 150, 1, 0, 0, 0, 16, 157, 1, 0, 0, 0, 18, 191, 1, 0, 0, 0, 20, 193, 1, 0, 0, 0, 22, 195, 1, 0, 0, 0, 24, 214, 1, 0, 0, 0, 26, 233, 1, 0, 0, 0, 28, 256, 1, 0, 0, 0, 30, 264, 1, 0, 0, 0, 32, 278, 1, 0, 0, 0, 34, 288, 1, 0, 0, 0, 36, 293, 1, 0, 0, 0, 38, 343, 1, 0, 0, 0, 40, 346, 1, 0, 0, 0, 42, 358, 1, 0, 0, 0, 44, 365, 1, 0, 0, 0, 46, 367, 1, 0, 0, 0, 48, 378, 1, 0, 0, 0, 50, 382, 1, 0, 0, 0, 52, 388, 1, 0, 0, 0, 54, 56, 5, 9, 0, 0, 55, 54, 1, 0, 0, 0, 55, 56, 1, 0, 0, 0, 56, 58, 1, 0, 0, 0, 57, 59, 5, 55, 0, 0, 58, 57, 1, 0, 0, 0, 58, 59, 1, 0, 0, 0, 59, 62, 1, 0, 0, 0, 60, 63, 3, 2, 1, 0, 61, 63, 3, 4, 2, 0, 62, 60, 1, 0, 0, 0, 62, 61, 1, 0, 0, 0, 63, 65, 1, 0, 0, 0, 64, 66, 5, 55, 0, 0, 65, 64, 1, 0, 0, 0, 65, 66, 1, 0, 0, 0, 66, 67, 1, 0, 0, 0, 67, 69, 3, 6, 3, 0, 68, 70, 5, 55, 0, 0, 69, 68, 1, 0, 0, 0, 69, 70, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 73, 3, 34, 17, 0, 72, 74, 5, 55, 0, 0, 73, 72, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 76, 5, 0, 0, 1, 76, 1, 1, 0, 0, 0, 77, 78, 3, 46, 23, 0, 78, 79, 5, 55, 0, 0, 79, 81, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 80, 81, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 83, 5, 17, 0, 0, 83, 84, 5, 55, 0, 0, 84, 85, 5, 18, 0, 0, 85, 86, 5, 9, 0, 0, 86, 88, 5, 19, 0, 0, 87, 89, 5, 9, 0, 0, 88, 87, 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 3, 1, 0, 0, 0, 90, 91, 3, 46, 23, 0, 91, 92, 5, 55, 0, 0, 92, 94, 1, 0, 0, 0, 93, 90, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 96, 5, 16, 0, 0, 96, 97, 5, 9, 0, 0, 97, 99, 3, 48, 24, 0, 98, 100, 5, 9, 0, 0, 99, 98, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 5, 1, 0, 0, 0, 101, 103, 3, 8, 4, 0, 102, 101, 1, 0, 0, 0, 103, 106, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 7, 1, 0, 0, 0, 106, 104, 1, 0, 0, 0, 107, 108, 5, 55, 0, 0, 108, 110, 3, 46, 23, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 114, 5, 55, 0, 0, 112, 113, 5, 20, 0, 0, 113, 115, 5, 9, 0, 0, 114, 112, 1, 0, 0, 0, 114, 115, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 117, 5, 21, 0, 0, 117, 118, 5, 9, 0, 0, 118, 126, 3, 50, 25, 0, 119, 120, 5, 55, 0, 0, 120, 122, 5, 23, 0, 0, 121, 123, 3, 10, 5, 0, 122, 121, 1, 0, 0, 0, 123, 124, 1, 0, 0, 0, 124, 122, 1, 0, 0, 0, 124, 125, 1, 0, 0, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, 9, 1, 0, 0, 0, 128, 129, 5, 55, 0, 0, 129, 131, 3, 46, 23, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 133, 5, 55, 0, 0, 133, 134, 5, 25, 0, 0, 134, 135, 5, 9, 0, 0, 135, 137, 3, 12, 6, 0, 136, 138, 5, 9, 0, 0, 137, 136, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 139, 1, 0, 0, 0, 139, 141, 5, 1, 0, 0, 140, 142, 5, 9, 0, 0, 141, 140, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 144, 3, 14, 7, 0, 144, 11, 1, 0, 0, 0, 145, 146, 3, 50, 25, 0, 146, 13, 1, 0, 0, 0, 147, 151, 3, 26, 13, 0, 148, 151, 3, 20, 10, 0, 149, 151, 3, 22, 11, 0, 150, 147, 1, 0, 0, 0, 150, 148, 1, 0, 0, 0, 150, 149, 1, 0, 0, 0, 151, 153, 1, 0, 0, 0, 152, 154, 3, 18, 9, 0, 153, 152, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 15, 1, 0, 0, 0, 155, 158, 3, 20, 10, 0, 156, 158, 3, 24, 12, 0, 157, 155, 1, 0, 0, 0, 157, 156, 1, 0, 0, 0, 158, 160, 1, 0, 0, 0, 159, 161, 3, 18, 9, 0, 160, 159, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 17, 1, 0, 0, 0, 162, 163, 5, 9, 0, 0, 163, 164, 5, 13, 0, 0, 164, 167, 5, 9, 0, 0, 165, 168, 3, 20, 10, 0, 166, 168, 3, 24, 12, 0, 167, 165, 1, 0, 0, 0, 167, 166, 1, 0, 0, 0, 168, 170, 1, 0, 0, 0, 169, 162, 1, 0, 0, 0, 170, 171, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, 192, 1, 0, 0, 0, 173, 174, 5, 9, 0, 0, 174, 175, 5, 12, 0, 0, 175, 178, 5, 9, 0, 0, 176, 179, 3, 20, 10, 0, 177, 179, 3, 24, 12, 0, 178, 176, 1, 0, 0, 0, 178, 177, 1, 0, 0, 0, 179, 181, 1, 0, 0, 0, 180, 173, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 192, 1, 0, 0, 0, 184, 185, 5, 9, 0, 0, 185, 186, 5, 14, 0, 0, 186, 189, 5, 9, 0, 0, 187, 190, 3, 20, 10, 0, 188, 190, 3, 24, 12, 0, 189, 187, 1, 0, 0, 0, 189, 188, 1, 0, 0, 0, 190, 192, 1, 0, 0, 0, 191, 169, 1, 0, 0, 0, 191, 180, 1, 0, 0, 0, 191, 184, 1, 0, 0, 0, 192, 19, 1, 0, 0, 0, 193, 194, 3, 28, 14, 0, 194, 21, 1, 0, 0, 0, 195, 199, 5, 7, 0, 0, 196, 198, 5, 9, 0, 0, 197, 196, 1, 0, 0, 0, 198, 201, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 204, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 202, 205, 3, 14, 7, 0, 203, 205, 3, 24, 12, 0, 204, 202, 1, 0, 0, 0, 204, 203, 1, 0, 0, 0, 205, 209, 1, 0, 0, 0, 206, 208, 5, 9, 0, 0, 207, 206, 1, 0, 0, 0, 208, 211, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 212, 1, 0, 0, 0, 211, 209, 1, 0, 0, 0, 212, 213, 5, 8, 0, 0, 213, 23, 1, 0, 0, 0, 214, 218, 5, 7, 0, 0, 215, 217, 5, 9, 0, 0, 216, 215, 1, 0, 0, 0, 217, 220, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 223, 1, 0, 0, 0, 220, 218, 1, 0, 0, 0, 221, 224, 3, 16, 8, 0, 222, 224, 3, 24, 12, 0, 223, 221, 1, 0, 0, 0, 223, 222, 1, 0, 0, 0, 224, 228, 1, 0, 0, 0, 225, 227, 5, 9, 0, 0, 226, 225, 1, 0, 0, 0, 227, 230, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 231, 1, 0, 0, 0, 230, 228, 1, 0, 0, 0, 231, 232, 5, 8, 0, 0, 232, 25, 1, 0, 0, 0, 233, 235, 5, 5, 0, 0, 234, 236, 5, 9, 0, 0, 235, 234, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 239, 3, 30, 15, 0, 238, 240, 5, 9, 0, 0, 239, 238, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 251, 1, 0, 0, 0, 241, 243, 5, 2, 0, 0, 242, 244, 5, 9, 0, 0, 243, 242, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 247, 3, 30, 15, 0, 246, 248, 5, 9, 0, 0, 247, 246, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 250, 1, 0, 0, 0, 249, 241, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 254, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 254, 255, 5, 34, 0, 0, 255, 27, 1, 0, 0, 0, 256, 261, 3, 50, 25, 0, 257, 258, 5, 9, 0, 0, 258, 259, 5, 15, 0, 0, 259, 260, 5, 9, 0, 0, 260, 262, 3, 50, 25, 0, 261, 257, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 29, 1, 0, 0, 0, 263, 265, 5, 55, 0, 0, 264, 263, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 273, 1, 0, 0, 0, 266, 274, 3, 32, 16, 0, 267, 268, 3, 32, 16, 0, 268, 269, 5, 9, 0, 0, 269, 270, 5, 26, 0, 0, 270, 271, 5, 9, 0, 0, 271, 272, 3, 38, 19, 0, 272, 274, 1, 0, 0, 0, 273, 266, 1, 0, 0, 0, 273, 267, 1, 0, 0, 0, 274, 276, 1, 0, 0, 0, 275, 277, 5, 55, 0, 0, 276, 275, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 31, 1, 0, 0, 0, 278, 283, 3, 50, 25, 0, 279, 280, 5, 1, 0, 0, 280, 284, 5, 42, 0, 0, 281, 282, 5, 11, 0, 0, 282, 284, 3, 50, 25, 0, 283, 279, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 33, 1, 0, 0, 0, 285, 287, 3, 36, 18, 0, 286, 285, 1, 0, 0, 0, 287, 290, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 35, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 291, 292, 5, 55, 0, 0, 292, 294, 3, 46, 23, 0, 293, 291, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 5, 55, 0, 0, 296, 297, 5, 22, 0, 0, 297, 298, 5, 9, 0, 0, 298, 300, 3, 38, 19, 0, 299, 301, 5, 9, 0, 0, 300, 299, 1, 0, 0, 0, 300, 301, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 304, 5, 7, 0, 0, 303, 305, 5, 9, 0, 0, 304, 303, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 308, 3, 40, 20, 0, 307, 309, 5, 9, 0, 0, 308, 307, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 320, 1, 0, 0, 0, 310, 312, 5, 2, 0, 0, 311, 313, 5, 9, 0, 0, 312, 311, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 316, 3, 40, 20, 0, 315, 317, 5, 9, 0, 0, 316, 315, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 319, 1, 0, 0, 0, 318, 310, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 324, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 323, 325, 5, 55, 0, 0, 324, 323, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 328, 5, 8, 0, 0, 327, 329, 5, 9, 0, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 330, 1, 0, 0, 0, 330, 332, 5, 35, 0, 0, 331, 333, 5, 55, 0, 0, 332, 331, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 335, 1, 0, 0, 0, 334, 336, 5, 9, 0, 0, 335, 334, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 339, 3, 52, 26, 0, 338, 340, 5, 55, 0, 0, 339, 338, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 342, 5, 36, 0, 0, 342, 37, 1, 0, 0, 0, 343, 344, 5, 10, 0, 0, 344, 39, 1, 0, 0, 0, 345, 347, 5, 55, 0, 0, 346, 345, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 348, 1, 0, 0, 0, 348, 350, 3, 42, 21, 0, 349, 351, 5, 9, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 5, 1, 0, 0, 353, 355, 5, 9, 0, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 357, 3, 44, 22, 0, 357, 41, 1, 0, 0, 0, 358, 359, 5, 10, 0, 0, 359, 43, 1, 0, 0, 0, 360, 366, 5, 57, 0, 0, 361, 362, 5, 56, 0, 0, 362, 363, 5, 3, 0, 0, 363, 364, 5, 57, 0, 0, 364, 366, 5, 4, 0, 0, 365, 360, 1, 0, 0, 0, 365, 361, 1, 0, 0, 0, 366, 45, 1, 0, 0, 0, 367, 371, 5, 11, 0, 0, 368, 370, 8, 0, 0, 0, 369, 368, 1, 0, 0, 0, 370, 373, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 371, 372, 1, 0, 0, 0, 372, 376, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 375, 5, 55, 0, 0, 375, 377, 3, 46, 23, 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 47, 1, 0, 0, 0, 378, 379, 7, 1, 0, 0, 379, 49, 1, 0, 0, 0, 380, 383, 3, 48, 24, 0, 381, 383, 5, 54, 0, 0, 382, 380, 1, 0, 0, 0, 382, 381, 1, 0, 0, 0, 383, 51, 1, 0, 0, 0, 384, 387, 7, 2, 0, 0, 385, 387, 8, 3, 0, 0, 386, 384, 1, 0, 0, 0, 386, 385, 1, 0, 0, 0, 387, 390, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 53, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 66, 55, 58, 62, 65, 69, 73, 80, 88, 93, 99, 104, 109, 114, 124, 126, 130, 137, 141, 150, 153, 157, 160, 167, 171, 178, 182, 189, 191, 199, 204, 209, 218, 223, 228, 235, 239, 243, 247, 251, 261, 264, 273, 276, 283, 288, 293, 300, 304, 308, 312, 316, 320, 324, 328, 332, 335, 339, 346, 350, 354, 365, 371, 376, 382, 386, 388] \ No newline at end of file diff --git a/pkg/js/gen/OpenFGAParser.tokens b/pkg/js/gen/OpenFGAParser.tokens index 273e2f7c..512cec30 100644 --- a/pkg/js/gen/OpenFGAParser.tokens +++ b/pkg/js/gen/OpenFGAParser.tokens @@ -51,9 +51,10 @@ NUM_INT=50 NUM_UINT=51 STRING=52 BYTES=53 -NEWLINE=54 -CONDITION_PARAM_CONTAINER=55 -CONDITION_PARAM_TYPE=56 +EXTENDED_IDENTIFIER=54 +NEWLINE=55 +CONDITION_PARAM_CONTAINER=56 +CONDITION_PARAM_TYPE=57 '#'=11 ':'=1 ','=2 diff --git a/pkg/js/gen/OpenFGAParser.ts b/pkg/js/gen/OpenFGAParser.ts index 015365b0..e51b674a 100644 --- a/pkg/js/gen/OpenFGAParser.ts +++ b/pkg/js/gen/OpenFGAParser.ts @@ -70,9 +70,10 @@ export default class OpenFGAParser extends Parser { public static readonly NUM_UINT = 51; public static readonly STRING = 52; public static readonly BYTES = 53; - public static readonly NEWLINE = 54; - public static readonly CONDITION_PARAM_CONTAINER = 55; - public static readonly CONDITION_PARAM_TYPE = 56; + public static readonly EXTENDED_IDENTIFIER = 54; + public static readonly NEWLINE = 55; + public static readonly CONDITION_PARAM_CONTAINER = 56; + public static readonly CONDITION_PARAM_TYPE = 57; public static readonly EOF = Token.EOF; public static readonly RULE_main = 0; public static readonly RULE_modelHeader = 1; @@ -99,7 +100,8 @@ export default class OpenFGAParser extends Parser { public static readonly RULE_parameterType = 22; public static readonly RULE_multiLineComment = 23; public static readonly RULE_identifier = 24; - public static readonly RULE_conditionExpression = 25; + public static readonly RULE_extended_identifier = 25; + public static readonly RULE_conditionExpression = 26; public static readonly literalNames: (string | null)[] = [ null, "':'", "','", "'<'", "'>'", "'['", @@ -162,6 +164,7 @@ export default class OpenFGAParser extends Parser { "NUM_INT", "NUM_UINT", "STRING", "BYTES", + "EXTENDED_IDENTIFIER", "NEWLINE", "CONDITION_PARAM_CONTAINER", "CONDITION_PARAM_TYPE" ]; @@ -172,7 +175,8 @@ export default class OpenFGAParser extends Parser { "relationDefGrouping", "relationRecurse", "relationRecurseNoDirect", "relationDefDirectAssignment", "relationDefRewrite", "relationDefTypeRestriction", "relationDefTypeRestrictionBase", "conditions", "condition", "conditionName", "conditionParameter", "parameterName", - "parameterType", "multiLineComment", "identifier", "conditionExpression", + "parameterType", "multiLineComment", "identifier", "extended_identifier", + "conditionExpression", ]; public get grammarFileName(): string { return "OpenFGAParser.g4"; } public get literalNames(): (string | null)[] { return OpenFGAParser.literalNames; } @@ -196,77 +200,77 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 53; + this.state = 55; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 52; + this.state = 54; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 56; + this.state = 58; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===54) { + if (_la===55) { { - this.state = 55; + this.state = 57; this.match(OpenFGAParser.NEWLINE); } } - this.state = 60; + this.state = 62; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 2, this._ctx) ) { case 1: { - this.state = 58; + this.state = 60; this.modelHeader(); } break; case 2: { - this.state = 59; + this.state = 61; this.moduleHeader(); } break; } - this.state = 63; + this.state = 65; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 3, this._ctx) ) { case 1: { - this.state = 62; + this.state = 64; this.match(OpenFGAParser.NEWLINE); } break; } - this.state = 65; - this.typeDefs(); this.state = 67; + this.typeDefs(); + this.state = 69; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 4, this._ctx) ) { case 1: { - this.state = 66; + this.state = 68; this.match(OpenFGAParser.NEWLINE); } break; } - this.state = 69; - this.conditions(); this.state = 71; + this.conditions(); + this.state = 73; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===54) { + if (_la===55) { { - this.state = 70; + this.state = 72; this.match(OpenFGAParser.NEWLINE); } } - this.state = 73; + this.state = 75; this.match(OpenFGAParser.EOF); } } @@ -292,34 +296,34 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 78; + this.state = 80; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===11) { { - this.state = 75; + this.state = 77; this.multiLineComment(); - this.state = 76; + this.state = 78; this.match(OpenFGAParser.NEWLINE); } } - this.state = 80; + this.state = 82; this.match(OpenFGAParser.MODEL); - this.state = 81; + this.state = 83; this.match(OpenFGAParser.NEWLINE); - this.state = 82; + this.state = 84; this.match(OpenFGAParser.SCHEMA); - this.state = 83; + this.state = 85; this.match(OpenFGAParser.WHITESPACE); - this.state = 84; - localctx._schemaVersion = this.match(OpenFGAParser.SCHEMA_VERSION); this.state = 86; + localctx._schemaVersion = this.match(OpenFGAParser.SCHEMA_VERSION); + this.state = 88; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 85; + this.state = 87; this.match(OpenFGAParser.WHITESPACE); } } @@ -348,30 +352,30 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 91; + this.state = 93; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===11) { { - this.state = 88; + this.state = 90; this.multiLineComment(); - this.state = 89; + this.state = 91; this.match(OpenFGAParser.NEWLINE); } } - this.state = 93; + this.state = 95; this.match(OpenFGAParser.MODULE); - this.state = 94; + this.state = 96; this.match(OpenFGAParser.WHITESPACE); - this.state = 95; - localctx._moduleName = this.identifier(); this.state = 97; + localctx._moduleName = this.identifier(); + this.state = 99; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 96; + this.state = 98; this.match(OpenFGAParser.WHITESPACE); } } @@ -400,19 +404,19 @@ export default class OpenFGAParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 102; + this.state = 104; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 10, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 99; + this.state = 101; this.typeDef(); } } } - this.state = 104; + this.state = 106; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 10, this._ctx); } @@ -441,48 +445,48 @@ export default class OpenFGAParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 107; + this.state = 109; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 11, this._ctx) ) { case 1: { - this.state = 105; + this.state = 107; this.match(OpenFGAParser.NEWLINE); - this.state = 106; + this.state = 108; this.multiLineComment(); } break; } - this.state = 109; + this.state = 111; this.match(OpenFGAParser.NEWLINE); - this.state = 112; + this.state = 114; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===20) { { - this.state = 110; + this.state = 112; this.match(OpenFGAParser.EXTEND); - this.state = 111; + this.state = 113; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 114; + this.state = 116; this.match(OpenFGAParser.TYPE); - this.state = 115; + this.state = 117; this.match(OpenFGAParser.WHITESPACE); - this.state = 116; - localctx._typeName = this.identifier(); - this.state = 124; + this.state = 118; + localctx._typeName = this.extended_identifier(); + this.state = 126; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 14, this._ctx) ) { case 1: { - this.state = 117; + this.state = 119; this.match(OpenFGAParser.NEWLINE); - this.state = 118; - this.match(OpenFGAParser.RELATIONS); this.state = 120; + this.match(OpenFGAParser.RELATIONS); + this.state = 122; this._errHandler.sync(this); _alt = 1; do { @@ -490,7 +494,7 @@ export default class OpenFGAParser extends Parser { case 1: { { - this.state = 119; + this.state = 121; this.relationDeclaration(); } } @@ -498,7 +502,7 @@ export default class OpenFGAParser extends Parser { default: throw new NoViableAltException(this); } - this.state = 122; + this.state = 124; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 13, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); @@ -529,50 +533,50 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 128; + this.state = 130; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 15, this._ctx) ) { case 1: { - this.state = 126; + this.state = 128; this.match(OpenFGAParser.NEWLINE); - this.state = 127; + this.state = 129; this.multiLineComment(); } break; } - this.state = 130; + this.state = 132; this.match(OpenFGAParser.NEWLINE); - this.state = 131; + this.state = 133; this.match(OpenFGAParser.DEFINE); - this.state = 132; + this.state = 134; this.match(OpenFGAParser.WHITESPACE); - this.state = 133; - this.relationName(); this.state = 135; + this.relationName(); + this.state = 137; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 134; + this.state = 136; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 137; - this.match(OpenFGAParser.COLON); this.state = 139; + this.match(OpenFGAParser.COLON); + this.state = 141; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 138; + this.state = 140; this.match(OpenFGAParser.WHITESPACE); } } { - this.state = 141; + this.state = 143; this.relationDef(); } } @@ -598,8 +602,8 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 143; - this.identifier(); + this.state = 145; + this.extended_identifier(); } } catch (re) { @@ -623,12 +627,12 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 148; + this.state = 150; this._errHandler.sync(this); switch (this._input.LA(1)) { case 5: { - this.state = 145; + this.state = 147; this.relationDefDirectAssignment(); } break; @@ -639,26 +643,27 @@ export default class OpenFGAParser extends Parser { case 20: case 21: case 24: + case 54: { - this.state = 146; + this.state = 148; this.relationDefGrouping(); } break; case 7: { - this.state = 147; + this.state = 149; this.relationRecurse(); } break; default: throw new NoViableAltException(this); } - this.state = 151; + this.state = 153; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 19, this._ctx) ) { case 1: { - this.state = 150; + this.state = 152; this.relationDefPartials(); } break; @@ -686,7 +691,7 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 155; + this.state = 157; this._errHandler.sync(this); switch (this._input.LA(1)) { case 10: @@ -696,26 +701,27 @@ export default class OpenFGAParser extends Parser { case 20: case 21: case 24: + case 54: { - this.state = 153; + this.state = 155; this.relationDefGrouping(); } break; case 7: { - this.state = 154; + this.state = 156; this.relationRecurseNoDirect(); } break; default: throw new NoViableAltException(this); } - this.state = 158; + this.state = 160; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 21, this._ctx) ) { case 1: { - this.state = 157; + this.state = 159; this.relationDefPartials(); } break; @@ -742,13 +748,13 @@ export default class OpenFGAParser extends Parser { this.enterRule(localctx, 18, OpenFGAParser.RULE_relationDefPartials); try { let _alt: number; - this.state = 189; + this.state = 191; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 27, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 167; + this.state = 169; this._errHandler.sync(this); _alt = 1; do { @@ -756,13 +762,13 @@ export default class OpenFGAParser extends Parser { case 1: { { - this.state = 160; + this.state = 162; this.match(OpenFGAParser.WHITESPACE); - this.state = 161; + this.state = 163; this.match(OpenFGAParser.OR); - this.state = 162; + this.state = 164; this.match(OpenFGAParser.WHITESPACE); - this.state = 165; + this.state = 167; this._errHandler.sync(this); switch (this._input.LA(1)) { case 10: @@ -772,14 +778,15 @@ export default class OpenFGAParser extends Parser { case 20: case 21: case 24: + case 54: { - this.state = 163; + this.state = 165; this.relationDefGrouping(); } break; case 7: { - this.state = 164; + this.state = 166; this.relationRecurseNoDirect(); } break; @@ -792,7 +799,7 @@ export default class OpenFGAParser extends Parser { default: throw new NoViableAltException(this); } - this.state = 169; + this.state = 171; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 23, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); @@ -801,7 +808,7 @@ export default class OpenFGAParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 178; + this.state = 180; this._errHandler.sync(this); _alt = 1; do { @@ -809,13 +816,13 @@ export default class OpenFGAParser extends Parser { case 1: { { - this.state = 171; + this.state = 173; this.match(OpenFGAParser.WHITESPACE); - this.state = 172; + this.state = 174; this.match(OpenFGAParser.AND); - this.state = 173; + this.state = 175; this.match(OpenFGAParser.WHITESPACE); - this.state = 176; + this.state = 178; this._errHandler.sync(this); switch (this._input.LA(1)) { case 10: @@ -825,14 +832,15 @@ export default class OpenFGAParser extends Parser { case 20: case 21: case 24: + case 54: { - this.state = 174; + this.state = 176; this.relationDefGrouping(); } break; case 7: { - this.state = 175; + this.state = 177; this.relationRecurseNoDirect(); } break; @@ -845,7 +853,7 @@ export default class OpenFGAParser extends Parser { default: throw new NoViableAltException(this); } - this.state = 180; + this.state = 182; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 25, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); @@ -855,13 +863,13 @@ export default class OpenFGAParser extends Parser { this.enterOuterAlt(localctx, 3); { { - this.state = 182; + this.state = 184; this.match(OpenFGAParser.WHITESPACE); - this.state = 183; + this.state = 185; this.match(OpenFGAParser.BUT_NOT); - this.state = 184; + this.state = 186; this.match(OpenFGAParser.WHITESPACE); - this.state = 187; + this.state = 189; this._errHandler.sync(this); switch (this._input.LA(1)) { case 10: @@ -871,14 +879,15 @@ export default class OpenFGAParser extends Parser { case 20: case 21: case 24: + case 54: { - this.state = 185; + this.state = 187; this.relationDefGrouping(); } break; case 7: { - this.state = 186; + this.state = 188; this.relationRecurseNoDirect(); } break; @@ -911,7 +920,7 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 191; + this.state = 193; this.relationDefRewrite(); } } @@ -937,53 +946,53 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 193; + this.state = 195; this.match(OpenFGAParser.LPAREN); - this.state = 197; + this.state = 199; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===9) { { { - this.state = 194; + this.state = 196; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 199; + this.state = 201; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 202; + this.state = 204; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 29, this._ctx) ) { case 1: { - this.state = 200; + this.state = 202; this.relationDef(); } break; case 2: { - this.state = 201; + this.state = 203; this.relationRecurseNoDirect(); } break; } - this.state = 207; + this.state = 209; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===9) { { { - this.state = 204; + this.state = 206; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 209; + this.state = 211; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 210; + this.state = 212; this.match(OpenFGAParser.RPAREN); } } @@ -1009,53 +1018,53 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 212; + this.state = 214; this.match(OpenFGAParser.LPAREN); - this.state = 216; + this.state = 218; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===9) { { { - this.state = 213; + this.state = 215; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 218; + this.state = 220; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 221; + this.state = 223; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 32, this._ctx) ) { case 1: { - this.state = 219; + this.state = 221; this.relationDefNoDirect(); } break; case 2: { - this.state = 220; + this.state = 222; this.relationRecurseNoDirect(); } break; } - this.state = 226; + this.state = 228; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===9) { { { - this.state = 223; + this.state = 225; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 228; + this.state = 230; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 229; + this.state = 231; this.match(OpenFGAParser.RPAREN); } } @@ -1081,67 +1090,67 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 231; - this.match(OpenFGAParser.LBRACKET); this.state = 233; + this.match(OpenFGAParser.LBRACKET); + this.state = 235; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 232; + this.state = 234; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 235; - this.relationDefTypeRestriction(); this.state = 237; + this.relationDefTypeRestriction(); + this.state = 239; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 236; + this.state = 238; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 249; + this.state = 251; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===2) { { { - this.state = 239; - this.match(OpenFGAParser.COMMA); this.state = 241; + this.match(OpenFGAParser.COMMA); + this.state = 243; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 240; + this.state = 242; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 243; - this.relationDefTypeRestriction(); this.state = 245; + this.relationDefTypeRestriction(); + this.state = 247; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 244; + this.state = 246; this.match(OpenFGAParser.WHITESPACE); } } } } - this.state = 251; + this.state = 253; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 252; + this.state = 254; this.match(OpenFGAParser.RPRACKET); } } @@ -1166,21 +1175,21 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 254; - localctx._rewriteComputedusersetName = this.identifier(); - this.state = 259; + this.state = 256; + localctx._rewriteComputedusersetName = this.extended_identifier(); + this.state = 261; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 39, this._ctx) ) { case 1: { - this.state = 255; - this.match(OpenFGAParser.WHITESPACE); - this.state = 256; - this.match(OpenFGAParser.FROM); this.state = 257; this.match(OpenFGAParser.WHITESPACE); this.state = 258; - localctx._rewriteTuplesetName = this.identifier(); + this.match(OpenFGAParser.FROM); + this.state = 259; + this.match(OpenFGAParser.WHITESPACE); + this.state = 260; + localctx._rewriteTuplesetName = this.extended_identifier(); } break; } @@ -1208,48 +1217,48 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 262; + this.state = 264; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===54) { + if (_la===55) { { - this.state = 261; + this.state = 263; this.match(OpenFGAParser.NEWLINE); } } - this.state = 271; + this.state = 273; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 41, this._ctx) ) { case 1: { - this.state = 264; + this.state = 266; this.relationDefTypeRestrictionBase(); } break; case 2: { { - this.state = 265; - this.relationDefTypeRestrictionBase(); - this.state = 266; - this.match(OpenFGAParser.WHITESPACE); this.state = 267; - this.match(OpenFGAParser.KEYWORD_WITH); + this.relationDefTypeRestrictionBase(); this.state = 268; this.match(OpenFGAParser.WHITESPACE); this.state = 269; + this.match(OpenFGAParser.KEYWORD_WITH); + this.state = 270; + this.match(OpenFGAParser.WHITESPACE); + this.state = 271; this.conditionName(); } } break; } - this.state = 274; + this.state = 276; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===54) { + if (_la===55) { { - this.state = 273; + this.state = 275; this.match(OpenFGAParser.NEWLINE); } } @@ -1277,17 +1286,17 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 276; - localctx._relationDefTypeRestrictionType = this.identifier(); - this.state = 281; + this.state = 278; + localctx._relationDefTypeRestrictionType = this.extended_identifier(); + this.state = 283; this._errHandler.sync(this); switch (this._input.LA(1)) { case 1: { { - this.state = 277; + this.state = 279; this.match(OpenFGAParser.COLON); - this.state = 278; + this.state = 280; localctx._relationDefTypeRestrictionWildcard = this.match(OpenFGAParser.STAR); } } @@ -1295,17 +1304,17 @@ export default class OpenFGAParser extends Parser { case 11: { { - this.state = 279; + this.state = 281; this.match(OpenFGAParser.HASH); - this.state = 280; - localctx._relationDefTypeRestrictionRelation = this.identifier(); + this.state = 282; + localctx._relationDefTypeRestrictionRelation = this.extended_identifier(); } } break; case 2: case 9: case 34: - case 54: + case 55: break; default: break; @@ -1334,19 +1343,19 @@ export default class OpenFGAParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 286; + this.state = 288; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 44, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 283; + this.state = 285; this.condition(); } } } - this.state = 288; + this.state = 290; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 44, this._ctx); } @@ -1374,153 +1383,153 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 291; + this.state = 293; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 45, this._ctx) ) { case 1: { - this.state = 289; + this.state = 291; this.match(OpenFGAParser.NEWLINE); - this.state = 290; + this.state = 292; this.multiLineComment(); } break; } - this.state = 293; + this.state = 295; this.match(OpenFGAParser.NEWLINE); - this.state = 294; + this.state = 296; this.match(OpenFGAParser.CONDITION); - this.state = 295; + this.state = 297; this.match(OpenFGAParser.WHITESPACE); - this.state = 296; - this.conditionName(); this.state = 298; + this.conditionName(); + this.state = 300; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 297; + this.state = 299; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 300; - this.match(OpenFGAParser.LPAREN); this.state = 302; + this.match(OpenFGAParser.LPAREN); + this.state = 304; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 301; + this.state = 303; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 304; - this.conditionParameter(); this.state = 306; + this.conditionParameter(); + this.state = 308; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 305; + this.state = 307; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 318; + this.state = 320; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===2) { { { - this.state = 308; - this.match(OpenFGAParser.COMMA); this.state = 310; + this.match(OpenFGAParser.COMMA); + this.state = 312; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 309; + this.state = 311; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 312; - this.conditionParameter(); this.state = 314; + this.conditionParameter(); + this.state = 316; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 313; + this.state = 315; this.match(OpenFGAParser.WHITESPACE); } } } } - this.state = 320; + this.state = 322; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 322; + this.state = 324; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===54) { + if (_la===55) { { - this.state = 321; + this.state = 323; this.match(OpenFGAParser.NEWLINE); } } - this.state = 324; - this.match(OpenFGAParser.RPAREN); this.state = 326; + this.match(OpenFGAParser.RPAREN); + this.state = 328; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 325; + this.state = 327; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 328; - this.match(OpenFGAParser.LBRACE); this.state = 330; + this.match(OpenFGAParser.LBRACE); + this.state = 332; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 54, this._ctx) ) { case 1: { - this.state = 329; + this.state = 331; this.match(OpenFGAParser.NEWLINE); } break; } - this.state = 333; + this.state = 335; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 55, this._ctx) ) { case 1: { - this.state = 332; + this.state = 334; this.match(OpenFGAParser.WHITESPACE); } break; } - this.state = 335; - this.conditionExpression(); this.state = 337; + this.conditionExpression(); + this.state = 339; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===54) { + if (_la===55) { { - this.state = 336; + this.state = 338; this.match(OpenFGAParser.NEWLINE); } } - this.state = 339; + this.state = 341; this.match(OpenFGAParser.RBRACE); } } @@ -1545,7 +1554,7 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 341; + this.state = 343; this.match(OpenFGAParser.IDENTIFIER); } } @@ -1571,41 +1580,41 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 344; + this.state = 346; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===54) { + if (_la===55) { { - this.state = 343; + this.state = 345; this.match(OpenFGAParser.NEWLINE); } } - this.state = 346; - this.parameterName(); this.state = 348; + this.parameterName(); + this.state = 350; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 347; + this.state = 349; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 350; - this.match(OpenFGAParser.COLON); this.state = 352; + this.match(OpenFGAParser.COLON); + this.state = 354; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===9) { { - this.state = 351; + this.state = 353; this.match(OpenFGAParser.WHITESPACE); } } - this.state = 354; + this.state = 356; this.parameterType(); } } @@ -1630,7 +1639,7 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 356; + this.state = 358; this.match(OpenFGAParser.IDENTIFIER); } } @@ -1653,27 +1662,27 @@ export default class OpenFGAParser extends Parser { let localctx: ParameterTypeContext = new ParameterTypeContext(this, this._ctx, this.state); this.enterRule(localctx, 44, OpenFGAParser.RULE_parameterType); try { - this.state = 363; + this.state = 365; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 56: + case 57: this.enterOuterAlt(localctx, 1); { - this.state = 358; + this.state = 360; this.match(OpenFGAParser.CONDITION_PARAM_TYPE); } break; - case 55: + case 56: this.enterOuterAlt(localctx, 2); { { - this.state = 359; + this.state = 361; this.match(OpenFGAParser.CONDITION_PARAM_CONTAINER); - this.state = 360; + this.state = 362; this.match(OpenFGAParser.LESS); - this.state = 361; + this.state = 363; this.match(OpenFGAParser.CONDITION_PARAM_TYPE); - this.state = 362; + this.state = 364; this.match(OpenFGAParser.GREATER); } } @@ -1704,17 +1713,17 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 365; + this.state = 367; this.match(OpenFGAParser.HASH); - this.state = 369; + this.state = 371; this._errHandler.sync(this); _la = this._input.LA(1); - while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967294) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 29360127) !== 0)) { + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967294) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 58720255) !== 0)) { { { - this.state = 366; + this.state = 368; _la = this._input.LA(1); - if(_la<=0 || _la===54) { + if(_la<=0 || _la===55) { this._errHandler.recoverInline(this); } else { @@ -1723,18 +1732,18 @@ export default class OpenFGAParser extends Parser { } } } - this.state = 371; + this.state = 373; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 374; + this.state = 376; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 62, this._ctx) ) { case 1: { - this.state = 372; + this.state = 374; this.match(OpenFGAParser.NEWLINE); - this.state = 373; + this.state = 375; this.multiLineComment(); } break; @@ -1763,7 +1772,7 @@ export default class OpenFGAParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 376; + this.state = 378; _la = this._input.LA(1); if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 20382720) !== 0))) { this._errHandler.recoverInline(this); @@ -1789,28 +1798,74 @@ export default class OpenFGAParser extends Parser { return localctx; } // @RuleVersion(0) + public extended_identifier(): Extended_identifierContext { + let localctx: Extended_identifierContext = new Extended_identifierContext(this, this._ctx, this.state); + this.enterRule(localctx, 50, OpenFGAParser.RULE_extended_identifier); + try { + this.state = 382; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 10: + case 16: + case 17: + case 18: + case 20: + case 21: + case 24: + this.enterOuterAlt(localctx, 1); + { + this.state = 380; + this.identifier(); + } + break; + case 54: + this.enterOuterAlt(localctx, 2); + { + this.state = 381; + this.match(OpenFGAParser.EXTENDED_IDENTIFIER); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) public conditionExpression(): ConditionExpressionContext { let localctx: ConditionExpressionContext = new ConditionExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 50, OpenFGAParser.RULE_conditionExpression); + this.enterRule(localctx, 52, OpenFGAParser.RULE_conditionExpression); let _la: number; try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 382; + this.state = 388; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 64, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 65, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { - this.state = 380; + this.state = 386; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 63, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 64, this._ctx) ) { case 1: { - this.state = 378; + this.state = 384; _la = this._input.LA(1); - if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 4160751544) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 8388591) !== 0))) { + if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 4160751544) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 12582895) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -1821,7 +1876,7 @@ export default class OpenFGAParser extends Parser { break; case 2: { - this.state = 379; + this.state = 385; _la = this._input.LA(1); if(_la<=0 || _la===36) { this._errHandler.recoverInline(this); @@ -1835,9 +1890,9 @@ export default class OpenFGAParser extends Parser { } } } - this.state = 384; + this.state = 390; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 64, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 65, this._ctx); } } } @@ -1856,136 +1911,138 @@ export default class OpenFGAParser extends Parser { return localctx; } - public static readonly _serializedATN: number[] = [4,1,56,386,2,0,7,0,2, + public static readonly _serializedATN: number[] = [4,1,57,392,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,1,0,3,0,54,8,0,1,0,3,0,57,8,0,1,0,1,0,3,0,61,8,0,1,0,3,0,64, - 8,0,1,0,1,0,3,0,68,8,0,1,0,1,0,3,0,72,8,0,1,0,1,0,1,1,1,1,1,1,3,1,79,8, - 1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,87,8,1,1,2,1,2,1,2,3,2,92,8,2,1,2,1,2,1,2, - 1,2,3,2,98,8,2,1,3,5,3,101,8,3,10,3,12,3,104,9,3,1,4,1,4,3,4,108,8,4,1, - 4,1,4,1,4,3,4,113,8,4,1,4,1,4,1,4,1,4,1,4,1,4,4,4,121,8,4,11,4,12,4,122, - 3,4,125,8,4,1,5,1,5,3,5,129,8,5,1,5,1,5,1,5,1,5,1,5,3,5,136,8,5,1,5,1,5, - 3,5,140,8,5,1,5,1,5,1,6,1,6,1,7,1,7,1,7,3,7,149,8,7,1,7,3,7,152,8,7,1,8, - 1,8,3,8,156,8,8,1,8,3,8,159,8,8,1,9,1,9,1,9,1,9,1,9,3,9,166,8,9,4,9,168, - 8,9,11,9,12,9,169,1,9,1,9,1,9,1,9,1,9,3,9,177,8,9,4,9,179,8,9,11,9,12,9, - 180,1,9,1,9,1,9,1,9,1,9,3,9,188,8,9,3,9,190,8,9,1,10,1,10,1,11,1,11,5,11, - 196,8,11,10,11,12,11,199,9,11,1,11,1,11,3,11,203,8,11,1,11,5,11,206,8,11, - 10,11,12,11,209,9,11,1,11,1,11,1,12,1,12,5,12,215,8,12,10,12,12,12,218, - 9,12,1,12,1,12,3,12,222,8,12,1,12,5,12,225,8,12,10,12,12,12,228,9,12,1, - 12,1,12,1,13,1,13,3,13,234,8,13,1,13,1,13,3,13,238,8,13,1,13,1,13,3,13, - 242,8,13,1,13,1,13,3,13,246,8,13,5,13,248,8,13,10,13,12,13,251,9,13,1,13, - 1,13,1,14,1,14,1,14,1,14,1,14,3,14,260,8,14,1,15,3,15,263,8,15,1,15,1,15, - 1,15,1,15,1,15,1,15,1,15,3,15,272,8,15,1,15,3,15,275,8,15,1,16,1,16,1,16, - 1,16,1,16,3,16,282,8,16,1,17,5,17,285,8,17,10,17,12,17,288,9,17,1,18,1, - 18,3,18,292,8,18,1,18,1,18,1,18,1,18,1,18,3,18,299,8,18,1,18,1,18,3,18, - 303,8,18,1,18,1,18,3,18,307,8,18,1,18,1,18,3,18,311,8,18,1,18,1,18,3,18, - 315,8,18,5,18,317,8,18,10,18,12,18,320,9,18,1,18,3,18,323,8,18,1,18,1,18, - 3,18,327,8,18,1,18,1,18,3,18,331,8,18,1,18,3,18,334,8,18,1,18,1,18,3,18, - 338,8,18,1,18,1,18,1,19,1,19,1,20,3,20,345,8,20,1,20,1,20,3,20,349,8,20, - 1,20,1,20,3,20,353,8,20,1,20,1,20,1,21,1,21,1,22,1,22,1,22,1,22,1,22,3, - 22,364,8,22,1,23,1,23,5,23,368,8,23,10,23,12,23,371,9,23,1,23,1,23,3,23, - 375,8,23,1,24,1,24,1,25,1,25,5,25,381,8,25,10,25,12,25,384,9,25,1,25,0, - 0,26,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46, - 48,50,0,4,1,0,54,54,4,0,10,10,16,18,20,21,24,24,4,0,3,5,7,10,27,35,37,54, - 1,0,36,36,427,0,53,1,0,0,0,2,78,1,0,0,0,4,91,1,0,0,0,6,102,1,0,0,0,8,107, - 1,0,0,0,10,128,1,0,0,0,12,143,1,0,0,0,14,148,1,0,0,0,16,155,1,0,0,0,18, - 189,1,0,0,0,20,191,1,0,0,0,22,193,1,0,0,0,24,212,1,0,0,0,26,231,1,0,0,0, - 28,254,1,0,0,0,30,262,1,0,0,0,32,276,1,0,0,0,34,286,1,0,0,0,36,291,1,0, - 0,0,38,341,1,0,0,0,40,344,1,0,0,0,42,356,1,0,0,0,44,363,1,0,0,0,46,365, - 1,0,0,0,48,376,1,0,0,0,50,382,1,0,0,0,52,54,5,9,0,0,53,52,1,0,0,0,53,54, - 1,0,0,0,54,56,1,0,0,0,55,57,5,54,0,0,56,55,1,0,0,0,56,57,1,0,0,0,57,60, - 1,0,0,0,58,61,3,2,1,0,59,61,3,4,2,0,60,58,1,0,0,0,60,59,1,0,0,0,61,63,1, - 0,0,0,62,64,5,54,0,0,63,62,1,0,0,0,63,64,1,0,0,0,64,65,1,0,0,0,65,67,3, - 6,3,0,66,68,5,54,0,0,67,66,1,0,0,0,67,68,1,0,0,0,68,69,1,0,0,0,69,71,3, - 34,17,0,70,72,5,54,0,0,71,70,1,0,0,0,71,72,1,0,0,0,72,73,1,0,0,0,73,74, - 5,0,0,1,74,1,1,0,0,0,75,76,3,46,23,0,76,77,5,54,0,0,77,79,1,0,0,0,78,75, - 1,0,0,0,78,79,1,0,0,0,79,80,1,0,0,0,80,81,5,17,0,0,81,82,5,54,0,0,82,83, - 5,18,0,0,83,84,5,9,0,0,84,86,5,19,0,0,85,87,5,9,0,0,86,85,1,0,0,0,86,87, - 1,0,0,0,87,3,1,0,0,0,88,89,3,46,23,0,89,90,5,54,0,0,90,92,1,0,0,0,91,88, - 1,0,0,0,91,92,1,0,0,0,92,93,1,0,0,0,93,94,5,16,0,0,94,95,5,9,0,0,95,97, - 3,48,24,0,96,98,5,9,0,0,97,96,1,0,0,0,97,98,1,0,0,0,98,5,1,0,0,0,99,101, - 3,8,4,0,100,99,1,0,0,0,101,104,1,0,0,0,102,100,1,0,0,0,102,103,1,0,0,0, - 103,7,1,0,0,0,104,102,1,0,0,0,105,106,5,54,0,0,106,108,3,46,23,0,107,105, - 1,0,0,0,107,108,1,0,0,0,108,109,1,0,0,0,109,112,5,54,0,0,110,111,5,20,0, - 0,111,113,5,9,0,0,112,110,1,0,0,0,112,113,1,0,0,0,113,114,1,0,0,0,114,115, - 5,21,0,0,115,116,5,9,0,0,116,124,3,48,24,0,117,118,5,54,0,0,118,120,5,23, - 0,0,119,121,3,10,5,0,120,119,1,0,0,0,121,122,1,0,0,0,122,120,1,0,0,0,122, - 123,1,0,0,0,123,125,1,0,0,0,124,117,1,0,0,0,124,125,1,0,0,0,125,9,1,0,0, - 0,126,127,5,54,0,0,127,129,3,46,23,0,128,126,1,0,0,0,128,129,1,0,0,0,129, - 130,1,0,0,0,130,131,5,54,0,0,131,132,5,25,0,0,132,133,5,9,0,0,133,135,3, - 12,6,0,134,136,5,9,0,0,135,134,1,0,0,0,135,136,1,0,0,0,136,137,1,0,0,0, - 137,139,5,1,0,0,138,140,5,9,0,0,139,138,1,0,0,0,139,140,1,0,0,0,140,141, - 1,0,0,0,141,142,3,14,7,0,142,11,1,0,0,0,143,144,3,48,24,0,144,13,1,0,0, - 0,145,149,3,26,13,0,146,149,3,20,10,0,147,149,3,22,11,0,148,145,1,0,0,0, - 148,146,1,0,0,0,148,147,1,0,0,0,149,151,1,0,0,0,150,152,3,18,9,0,151,150, - 1,0,0,0,151,152,1,0,0,0,152,15,1,0,0,0,153,156,3,20,10,0,154,156,3,24,12, - 0,155,153,1,0,0,0,155,154,1,0,0,0,156,158,1,0,0,0,157,159,3,18,9,0,158, - 157,1,0,0,0,158,159,1,0,0,0,159,17,1,0,0,0,160,161,5,9,0,0,161,162,5,13, - 0,0,162,165,5,9,0,0,163,166,3,20,10,0,164,166,3,24,12,0,165,163,1,0,0,0, - 165,164,1,0,0,0,166,168,1,0,0,0,167,160,1,0,0,0,168,169,1,0,0,0,169,167, - 1,0,0,0,169,170,1,0,0,0,170,190,1,0,0,0,171,172,5,9,0,0,172,173,5,12,0, - 0,173,176,5,9,0,0,174,177,3,20,10,0,175,177,3,24,12,0,176,174,1,0,0,0,176, - 175,1,0,0,0,177,179,1,0,0,0,178,171,1,0,0,0,179,180,1,0,0,0,180,178,1,0, - 0,0,180,181,1,0,0,0,181,190,1,0,0,0,182,183,5,9,0,0,183,184,5,14,0,0,184, - 187,5,9,0,0,185,188,3,20,10,0,186,188,3,24,12,0,187,185,1,0,0,0,187,186, - 1,0,0,0,188,190,1,0,0,0,189,167,1,0,0,0,189,178,1,0,0,0,189,182,1,0,0,0, - 190,19,1,0,0,0,191,192,3,28,14,0,192,21,1,0,0,0,193,197,5,7,0,0,194,196, - 5,9,0,0,195,194,1,0,0,0,196,199,1,0,0,0,197,195,1,0,0,0,197,198,1,0,0,0, - 198,202,1,0,0,0,199,197,1,0,0,0,200,203,3,14,7,0,201,203,3,24,12,0,202, - 200,1,0,0,0,202,201,1,0,0,0,203,207,1,0,0,0,204,206,5,9,0,0,205,204,1,0, - 0,0,206,209,1,0,0,0,207,205,1,0,0,0,207,208,1,0,0,0,208,210,1,0,0,0,209, - 207,1,0,0,0,210,211,5,8,0,0,211,23,1,0,0,0,212,216,5,7,0,0,213,215,5,9, - 0,0,214,213,1,0,0,0,215,218,1,0,0,0,216,214,1,0,0,0,216,217,1,0,0,0,217, - 221,1,0,0,0,218,216,1,0,0,0,219,222,3,16,8,0,220,222,3,24,12,0,221,219, - 1,0,0,0,221,220,1,0,0,0,222,226,1,0,0,0,223,225,5,9,0,0,224,223,1,0,0,0, - 225,228,1,0,0,0,226,224,1,0,0,0,226,227,1,0,0,0,227,229,1,0,0,0,228,226, - 1,0,0,0,229,230,5,8,0,0,230,25,1,0,0,0,231,233,5,5,0,0,232,234,5,9,0,0, - 233,232,1,0,0,0,233,234,1,0,0,0,234,235,1,0,0,0,235,237,3,30,15,0,236,238, - 5,9,0,0,237,236,1,0,0,0,237,238,1,0,0,0,238,249,1,0,0,0,239,241,5,2,0,0, - 240,242,5,9,0,0,241,240,1,0,0,0,241,242,1,0,0,0,242,243,1,0,0,0,243,245, - 3,30,15,0,244,246,5,9,0,0,245,244,1,0,0,0,245,246,1,0,0,0,246,248,1,0,0, - 0,247,239,1,0,0,0,248,251,1,0,0,0,249,247,1,0,0,0,249,250,1,0,0,0,250,252, - 1,0,0,0,251,249,1,0,0,0,252,253,5,34,0,0,253,27,1,0,0,0,254,259,3,48,24, - 0,255,256,5,9,0,0,256,257,5,15,0,0,257,258,5,9,0,0,258,260,3,48,24,0,259, - 255,1,0,0,0,259,260,1,0,0,0,260,29,1,0,0,0,261,263,5,54,0,0,262,261,1,0, - 0,0,262,263,1,0,0,0,263,271,1,0,0,0,264,272,3,32,16,0,265,266,3,32,16,0, - 266,267,5,9,0,0,267,268,5,26,0,0,268,269,5,9,0,0,269,270,3,38,19,0,270, - 272,1,0,0,0,271,264,1,0,0,0,271,265,1,0,0,0,272,274,1,0,0,0,273,275,5,54, - 0,0,274,273,1,0,0,0,274,275,1,0,0,0,275,31,1,0,0,0,276,281,3,48,24,0,277, - 278,5,1,0,0,278,282,5,42,0,0,279,280,5,11,0,0,280,282,3,48,24,0,281,277, - 1,0,0,0,281,279,1,0,0,0,281,282,1,0,0,0,282,33,1,0,0,0,283,285,3,36,18, - 0,284,283,1,0,0,0,285,288,1,0,0,0,286,284,1,0,0,0,286,287,1,0,0,0,287,35, - 1,0,0,0,288,286,1,0,0,0,289,290,5,54,0,0,290,292,3,46,23,0,291,289,1,0, - 0,0,291,292,1,0,0,0,292,293,1,0,0,0,293,294,5,54,0,0,294,295,5,22,0,0,295, - 296,5,9,0,0,296,298,3,38,19,0,297,299,5,9,0,0,298,297,1,0,0,0,298,299,1, - 0,0,0,299,300,1,0,0,0,300,302,5,7,0,0,301,303,5,9,0,0,302,301,1,0,0,0,302, - 303,1,0,0,0,303,304,1,0,0,0,304,306,3,40,20,0,305,307,5,9,0,0,306,305,1, - 0,0,0,306,307,1,0,0,0,307,318,1,0,0,0,308,310,5,2,0,0,309,311,5,9,0,0,310, - 309,1,0,0,0,310,311,1,0,0,0,311,312,1,0,0,0,312,314,3,40,20,0,313,315,5, - 9,0,0,314,313,1,0,0,0,314,315,1,0,0,0,315,317,1,0,0,0,316,308,1,0,0,0,317, - 320,1,0,0,0,318,316,1,0,0,0,318,319,1,0,0,0,319,322,1,0,0,0,320,318,1,0, - 0,0,321,323,5,54,0,0,322,321,1,0,0,0,322,323,1,0,0,0,323,324,1,0,0,0,324, - 326,5,8,0,0,325,327,5,9,0,0,326,325,1,0,0,0,326,327,1,0,0,0,327,328,1,0, - 0,0,328,330,5,35,0,0,329,331,5,54,0,0,330,329,1,0,0,0,330,331,1,0,0,0,331, - 333,1,0,0,0,332,334,5,9,0,0,333,332,1,0,0,0,333,334,1,0,0,0,334,335,1,0, - 0,0,335,337,3,50,25,0,336,338,5,54,0,0,337,336,1,0,0,0,337,338,1,0,0,0, - 338,339,1,0,0,0,339,340,5,36,0,0,340,37,1,0,0,0,341,342,5,10,0,0,342,39, - 1,0,0,0,343,345,5,54,0,0,344,343,1,0,0,0,344,345,1,0,0,0,345,346,1,0,0, - 0,346,348,3,42,21,0,347,349,5,9,0,0,348,347,1,0,0,0,348,349,1,0,0,0,349, - 350,1,0,0,0,350,352,5,1,0,0,351,353,5,9,0,0,352,351,1,0,0,0,352,353,1,0, - 0,0,353,354,1,0,0,0,354,355,3,44,22,0,355,41,1,0,0,0,356,357,5,10,0,0,357, - 43,1,0,0,0,358,364,5,56,0,0,359,360,5,55,0,0,360,361,5,3,0,0,361,362,5, - 56,0,0,362,364,5,4,0,0,363,358,1,0,0,0,363,359,1,0,0,0,364,45,1,0,0,0,365, - 369,5,11,0,0,366,368,8,0,0,0,367,366,1,0,0,0,368,371,1,0,0,0,369,367,1, - 0,0,0,369,370,1,0,0,0,370,374,1,0,0,0,371,369,1,0,0,0,372,373,5,54,0,0, - 373,375,3,46,23,0,374,372,1,0,0,0,374,375,1,0,0,0,375,47,1,0,0,0,376,377, - 7,1,0,0,377,49,1,0,0,0,378,381,7,2,0,0,379,381,8,3,0,0,380,378,1,0,0,0, - 380,379,1,0,0,0,381,384,1,0,0,0,382,380,1,0,0,0,382,383,1,0,0,0,383,51, - 1,0,0,0,384,382,1,0,0,0,65,53,56,60,63,67,71,78,86,91,97,102,107,112,122, - 124,128,135,139,148,151,155,158,165,169,176,180,187,189,197,202,207,216, - 221,226,233,237,241,245,249,259,262,271,274,281,286,291,298,302,306,310, - 314,318,322,326,330,333,337,344,348,352,363,369,374,380,382]; + 24,2,25,7,25,2,26,7,26,1,0,3,0,56,8,0,1,0,3,0,59,8,0,1,0,1,0,3,0,63,8,0, + 1,0,3,0,66,8,0,1,0,1,0,3,0,70,8,0,1,0,1,0,3,0,74,8,0,1,0,1,0,1,1,1,1,1, + 1,3,1,81,8,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,89,8,1,1,2,1,2,1,2,3,2,94,8,2, + 1,2,1,2,1,2,1,2,3,2,100,8,2,1,3,5,3,103,8,3,10,3,12,3,106,9,3,1,4,1,4,3, + 4,110,8,4,1,4,1,4,1,4,3,4,115,8,4,1,4,1,4,1,4,1,4,1,4,1,4,4,4,123,8,4,11, + 4,12,4,124,3,4,127,8,4,1,5,1,5,3,5,131,8,5,1,5,1,5,1,5,1,5,1,5,3,5,138, + 8,5,1,5,1,5,3,5,142,8,5,1,5,1,5,1,6,1,6,1,7,1,7,1,7,3,7,151,8,7,1,7,3,7, + 154,8,7,1,8,1,8,3,8,158,8,8,1,8,3,8,161,8,8,1,9,1,9,1,9,1,9,1,9,3,9,168, + 8,9,4,9,170,8,9,11,9,12,9,171,1,9,1,9,1,9,1,9,1,9,3,9,179,8,9,4,9,181,8, + 9,11,9,12,9,182,1,9,1,9,1,9,1,9,1,9,3,9,190,8,9,3,9,192,8,9,1,10,1,10,1, + 11,1,11,5,11,198,8,11,10,11,12,11,201,9,11,1,11,1,11,3,11,205,8,11,1,11, + 5,11,208,8,11,10,11,12,11,211,9,11,1,11,1,11,1,12,1,12,5,12,217,8,12,10, + 12,12,12,220,9,12,1,12,1,12,3,12,224,8,12,1,12,5,12,227,8,12,10,12,12,12, + 230,9,12,1,12,1,12,1,13,1,13,3,13,236,8,13,1,13,1,13,3,13,240,8,13,1,13, + 1,13,3,13,244,8,13,1,13,1,13,3,13,248,8,13,5,13,250,8,13,10,13,12,13,253, + 9,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,3,14,262,8,14,1,15,3,15,265,8,15, + 1,15,1,15,1,15,1,15,1,15,1,15,1,15,3,15,274,8,15,1,15,3,15,277,8,15,1,16, + 1,16,1,16,1,16,1,16,3,16,284,8,16,1,17,5,17,287,8,17,10,17,12,17,290,9, + 17,1,18,1,18,3,18,294,8,18,1,18,1,18,1,18,1,18,1,18,3,18,301,8,18,1,18, + 1,18,3,18,305,8,18,1,18,1,18,3,18,309,8,18,1,18,1,18,3,18,313,8,18,1,18, + 1,18,3,18,317,8,18,5,18,319,8,18,10,18,12,18,322,9,18,1,18,3,18,325,8,18, + 1,18,1,18,3,18,329,8,18,1,18,1,18,3,18,333,8,18,1,18,3,18,336,8,18,1,18, + 1,18,3,18,340,8,18,1,18,1,18,1,19,1,19,1,20,3,20,347,8,20,1,20,1,20,3,20, + 351,8,20,1,20,1,20,3,20,355,8,20,1,20,1,20,1,21,1,21,1,22,1,22,1,22,1,22, + 1,22,3,22,366,8,22,1,23,1,23,5,23,370,8,23,10,23,12,23,373,9,23,1,23,1, + 23,3,23,377,8,23,1,24,1,24,1,25,1,25,3,25,383,8,25,1,26,1,26,5,26,387,8, + 26,10,26,12,26,390,9,26,1,26,0,0,27,0,2,4,6,8,10,12,14,16,18,20,22,24,26, + 28,30,32,34,36,38,40,42,44,46,48,50,52,0,4,1,0,55,55,4,0,10,10,16,18,20, + 21,24,24,5,0,3,5,7,10,27,35,37,53,55,55,1,0,36,36,433,0,55,1,0,0,0,2,80, + 1,0,0,0,4,93,1,0,0,0,6,104,1,0,0,0,8,109,1,0,0,0,10,130,1,0,0,0,12,145, + 1,0,0,0,14,150,1,0,0,0,16,157,1,0,0,0,18,191,1,0,0,0,20,193,1,0,0,0,22, + 195,1,0,0,0,24,214,1,0,0,0,26,233,1,0,0,0,28,256,1,0,0,0,30,264,1,0,0,0, + 32,278,1,0,0,0,34,288,1,0,0,0,36,293,1,0,0,0,38,343,1,0,0,0,40,346,1,0, + 0,0,42,358,1,0,0,0,44,365,1,0,0,0,46,367,1,0,0,0,48,378,1,0,0,0,50,382, + 1,0,0,0,52,388,1,0,0,0,54,56,5,9,0,0,55,54,1,0,0,0,55,56,1,0,0,0,56,58, + 1,0,0,0,57,59,5,55,0,0,58,57,1,0,0,0,58,59,1,0,0,0,59,62,1,0,0,0,60,63, + 3,2,1,0,61,63,3,4,2,0,62,60,1,0,0,0,62,61,1,0,0,0,63,65,1,0,0,0,64,66,5, + 55,0,0,65,64,1,0,0,0,65,66,1,0,0,0,66,67,1,0,0,0,67,69,3,6,3,0,68,70,5, + 55,0,0,69,68,1,0,0,0,69,70,1,0,0,0,70,71,1,0,0,0,71,73,3,34,17,0,72,74, + 5,55,0,0,73,72,1,0,0,0,73,74,1,0,0,0,74,75,1,0,0,0,75,76,5,0,0,1,76,1,1, + 0,0,0,77,78,3,46,23,0,78,79,5,55,0,0,79,81,1,0,0,0,80,77,1,0,0,0,80,81, + 1,0,0,0,81,82,1,0,0,0,82,83,5,17,0,0,83,84,5,55,0,0,84,85,5,18,0,0,85,86, + 5,9,0,0,86,88,5,19,0,0,87,89,5,9,0,0,88,87,1,0,0,0,88,89,1,0,0,0,89,3,1, + 0,0,0,90,91,3,46,23,0,91,92,5,55,0,0,92,94,1,0,0,0,93,90,1,0,0,0,93,94, + 1,0,0,0,94,95,1,0,0,0,95,96,5,16,0,0,96,97,5,9,0,0,97,99,3,48,24,0,98,100, + 5,9,0,0,99,98,1,0,0,0,99,100,1,0,0,0,100,5,1,0,0,0,101,103,3,8,4,0,102, + 101,1,0,0,0,103,106,1,0,0,0,104,102,1,0,0,0,104,105,1,0,0,0,105,7,1,0,0, + 0,106,104,1,0,0,0,107,108,5,55,0,0,108,110,3,46,23,0,109,107,1,0,0,0,109, + 110,1,0,0,0,110,111,1,0,0,0,111,114,5,55,0,0,112,113,5,20,0,0,113,115,5, + 9,0,0,114,112,1,0,0,0,114,115,1,0,0,0,115,116,1,0,0,0,116,117,5,21,0,0, + 117,118,5,9,0,0,118,126,3,50,25,0,119,120,5,55,0,0,120,122,5,23,0,0,121, + 123,3,10,5,0,122,121,1,0,0,0,123,124,1,0,0,0,124,122,1,0,0,0,124,125,1, + 0,0,0,125,127,1,0,0,0,126,119,1,0,0,0,126,127,1,0,0,0,127,9,1,0,0,0,128, + 129,5,55,0,0,129,131,3,46,23,0,130,128,1,0,0,0,130,131,1,0,0,0,131,132, + 1,0,0,0,132,133,5,55,0,0,133,134,5,25,0,0,134,135,5,9,0,0,135,137,3,12, + 6,0,136,138,5,9,0,0,137,136,1,0,0,0,137,138,1,0,0,0,138,139,1,0,0,0,139, + 141,5,1,0,0,140,142,5,9,0,0,141,140,1,0,0,0,141,142,1,0,0,0,142,143,1,0, + 0,0,143,144,3,14,7,0,144,11,1,0,0,0,145,146,3,50,25,0,146,13,1,0,0,0,147, + 151,3,26,13,0,148,151,3,20,10,0,149,151,3,22,11,0,150,147,1,0,0,0,150,148, + 1,0,0,0,150,149,1,0,0,0,151,153,1,0,0,0,152,154,3,18,9,0,153,152,1,0,0, + 0,153,154,1,0,0,0,154,15,1,0,0,0,155,158,3,20,10,0,156,158,3,24,12,0,157, + 155,1,0,0,0,157,156,1,0,0,0,158,160,1,0,0,0,159,161,3,18,9,0,160,159,1, + 0,0,0,160,161,1,0,0,0,161,17,1,0,0,0,162,163,5,9,0,0,163,164,5,13,0,0,164, + 167,5,9,0,0,165,168,3,20,10,0,166,168,3,24,12,0,167,165,1,0,0,0,167,166, + 1,0,0,0,168,170,1,0,0,0,169,162,1,0,0,0,170,171,1,0,0,0,171,169,1,0,0,0, + 171,172,1,0,0,0,172,192,1,0,0,0,173,174,5,9,0,0,174,175,5,12,0,0,175,178, + 5,9,0,0,176,179,3,20,10,0,177,179,3,24,12,0,178,176,1,0,0,0,178,177,1,0, + 0,0,179,181,1,0,0,0,180,173,1,0,0,0,181,182,1,0,0,0,182,180,1,0,0,0,182, + 183,1,0,0,0,183,192,1,0,0,0,184,185,5,9,0,0,185,186,5,14,0,0,186,189,5, + 9,0,0,187,190,3,20,10,0,188,190,3,24,12,0,189,187,1,0,0,0,189,188,1,0,0, + 0,190,192,1,0,0,0,191,169,1,0,0,0,191,180,1,0,0,0,191,184,1,0,0,0,192,19, + 1,0,0,0,193,194,3,28,14,0,194,21,1,0,0,0,195,199,5,7,0,0,196,198,5,9,0, + 0,197,196,1,0,0,0,198,201,1,0,0,0,199,197,1,0,0,0,199,200,1,0,0,0,200,204, + 1,0,0,0,201,199,1,0,0,0,202,205,3,14,7,0,203,205,3,24,12,0,204,202,1,0, + 0,0,204,203,1,0,0,0,205,209,1,0,0,0,206,208,5,9,0,0,207,206,1,0,0,0,208, + 211,1,0,0,0,209,207,1,0,0,0,209,210,1,0,0,0,210,212,1,0,0,0,211,209,1,0, + 0,0,212,213,5,8,0,0,213,23,1,0,0,0,214,218,5,7,0,0,215,217,5,9,0,0,216, + 215,1,0,0,0,217,220,1,0,0,0,218,216,1,0,0,0,218,219,1,0,0,0,219,223,1,0, + 0,0,220,218,1,0,0,0,221,224,3,16,8,0,222,224,3,24,12,0,223,221,1,0,0,0, + 223,222,1,0,0,0,224,228,1,0,0,0,225,227,5,9,0,0,226,225,1,0,0,0,227,230, + 1,0,0,0,228,226,1,0,0,0,228,229,1,0,0,0,229,231,1,0,0,0,230,228,1,0,0,0, + 231,232,5,8,0,0,232,25,1,0,0,0,233,235,5,5,0,0,234,236,5,9,0,0,235,234, + 1,0,0,0,235,236,1,0,0,0,236,237,1,0,0,0,237,239,3,30,15,0,238,240,5,9,0, + 0,239,238,1,0,0,0,239,240,1,0,0,0,240,251,1,0,0,0,241,243,5,2,0,0,242,244, + 5,9,0,0,243,242,1,0,0,0,243,244,1,0,0,0,244,245,1,0,0,0,245,247,3,30,15, + 0,246,248,5,9,0,0,247,246,1,0,0,0,247,248,1,0,0,0,248,250,1,0,0,0,249,241, + 1,0,0,0,250,253,1,0,0,0,251,249,1,0,0,0,251,252,1,0,0,0,252,254,1,0,0,0, + 253,251,1,0,0,0,254,255,5,34,0,0,255,27,1,0,0,0,256,261,3,50,25,0,257,258, + 5,9,0,0,258,259,5,15,0,0,259,260,5,9,0,0,260,262,3,50,25,0,261,257,1,0, + 0,0,261,262,1,0,0,0,262,29,1,0,0,0,263,265,5,55,0,0,264,263,1,0,0,0,264, + 265,1,0,0,0,265,273,1,0,0,0,266,274,3,32,16,0,267,268,3,32,16,0,268,269, + 5,9,0,0,269,270,5,26,0,0,270,271,5,9,0,0,271,272,3,38,19,0,272,274,1,0, + 0,0,273,266,1,0,0,0,273,267,1,0,0,0,274,276,1,0,0,0,275,277,5,55,0,0,276, + 275,1,0,0,0,276,277,1,0,0,0,277,31,1,0,0,0,278,283,3,50,25,0,279,280,5, + 1,0,0,280,284,5,42,0,0,281,282,5,11,0,0,282,284,3,50,25,0,283,279,1,0,0, + 0,283,281,1,0,0,0,283,284,1,0,0,0,284,33,1,0,0,0,285,287,3,36,18,0,286, + 285,1,0,0,0,287,290,1,0,0,0,288,286,1,0,0,0,288,289,1,0,0,0,289,35,1,0, + 0,0,290,288,1,0,0,0,291,292,5,55,0,0,292,294,3,46,23,0,293,291,1,0,0,0, + 293,294,1,0,0,0,294,295,1,0,0,0,295,296,5,55,0,0,296,297,5,22,0,0,297,298, + 5,9,0,0,298,300,3,38,19,0,299,301,5,9,0,0,300,299,1,0,0,0,300,301,1,0,0, + 0,301,302,1,0,0,0,302,304,5,7,0,0,303,305,5,9,0,0,304,303,1,0,0,0,304,305, + 1,0,0,0,305,306,1,0,0,0,306,308,3,40,20,0,307,309,5,9,0,0,308,307,1,0,0, + 0,308,309,1,0,0,0,309,320,1,0,0,0,310,312,5,2,0,0,311,313,5,9,0,0,312,311, + 1,0,0,0,312,313,1,0,0,0,313,314,1,0,0,0,314,316,3,40,20,0,315,317,5,9,0, + 0,316,315,1,0,0,0,316,317,1,0,0,0,317,319,1,0,0,0,318,310,1,0,0,0,319,322, + 1,0,0,0,320,318,1,0,0,0,320,321,1,0,0,0,321,324,1,0,0,0,322,320,1,0,0,0, + 323,325,5,55,0,0,324,323,1,0,0,0,324,325,1,0,0,0,325,326,1,0,0,0,326,328, + 5,8,0,0,327,329,5,9,0,0,328,327,1,0,0,0,328,329,1,0,0,0,329,330,1,0,0,0, + 330,332,5,35,0,0,331,333,5,55,0,0,332,331,1,0,0,0,332,333,1,0,0,0,333,335, + 1,0,0,0,334,336,5,9,0,0,335,334,1,0,0,0,335,336,1,0,0,0,336,337,1,0,0,0, + 337,339,3,52,26,0,338,340,5,55,0,0,339,338,1,0,0,0,339,340,1,0,0,0,340, + 341,1,0,0,0,341,342,5,36,0,0,342,37,1,0,0,0,343,344,5,10,0,0,344,39,1,0, + 0,0,345,347,5,55,0,0,346,345,1,0,0,0,346,347,1,0,0,0,347,348,1,0,0,0,348, + 350,3,42,21,0,349,351,5,9,0,0,350,349,1,0,0,0,350,351,1,0,0,0,351,352,1, + 0,0,0,352,354,5,1,0,0,353,355,5,9,0,0,354,353,1,0,0,0,354,355,1,0,0,0,355, + 356,1,0,0,0,356,357,3,44,22,0,357,41,1,0,0,0,358,359,5,10,0,0,359,43,1, + 0,0,0,360,366,5,57,0,0,361,362,5,56,0,0,362,363,5,3,0,0,363,364,5,57,0, + 0,364,366,5,4,0,0,365,360,1,0,0,0,365,361,1,0,0,0,366,45,1,0,0,0,367,371, + 5,11,0,0,368,370,8,0,0,0,369,368,1,0,0,0,370,373,1,0,0,0,371,369,1,0,0, + 0,371,372,1,0,0,0,372,376,1,0,0,0,373,371,1,0,0,0,374,375,5,55,0,0,375, + 377,3,46,23,0,376,374,1,0,0,0,376,377,1,0,0,0,377,47,1,0,0,0,378,379,7, + 1,0,0,379,49,1,0,0,0,380,383,3,48,24,0,381,383,5,54,0,0,382,380,1,0,0,0, + 382,381,1,0,0,0,383,51,1,0,0,0,384,387,7,2,0,0,385,387,8,3,0,0,386,384, + 1,0,0,0,386,385,1,0,0,0,387,390,1,0,0,0,388,386,1,0,0,0,388,389,1,0,0,0, + 389,53,1,0,0,0,390,388,1,0,0,0,66,55,58,62,65,69,73,80,88,93,99,104,109, + 114,124,126,130,137,141,150,153,157,160,167,171,178,182,189,191,199,204, + 209,218,223,228,235,239,243,247,251,261,264,273,276,283,288,293,300,304, + 308,312,316,320,324,328,332,335,339,346,350,354,365,371,376,382,386,388]; private static __ATN: ATN; public static get _ATN(): ATN { @@ -2160,7 +2217,7 @@ export class TypeDefsContext extends ParserRuleContext { export class TypeDefContext extends ParserRuleContext { - public _typeName!: IdentifierContext; + public _typeName!: Extended_identifierContext; constructor(parser?: OpenFGAParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); this.parser = parser; @@ -2180,8 +2237,8 @@ export class TypeDefContext extends ParserRuleContext { public WHITESPACE(i: number): TerminalNode { return this.getToken(OpenFGAParser.WHITESPACE, i); } - public identifier(): IdentifierContext { - return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + public extended_identifier(): Extended_identifierContext { + return this.getTypedRuleContext(Extended_identifierContext, 0) as Extended_identifierContext; } public multiLineComment(): MultiLineCommentContext { return this.getTypedRuleContext(MultiLineCommentContext, 0) as MultiLineCommentContext; @@ -2267,8 +2324,8 @@ export class RelationNameContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public identifier(): IdentifierContext { - return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + public extended_identifier(): Extended_identifierContext { + return this.getTypedRuleContext(Extended_identifierContext, 0) as Extended_identifierContext; } public get ruleIndex(): number { return OpenFGAParser.RULE_relationName; @@ -2551,17 +2608,17 @@ export class RelationDefDirectAssignmentContext extends ParserRuleContext { export class RelationDefRewriteContext extends ParserRuleContext { - public _rewriteComputedusersetName!: IdentifierContext; - public _rewriteTuplesetName!: IdentifierContext; + public _rewriteComputedusersetName!: Extended_identifierContext; + public _rewriteTuplesetName!: Extended_identifierContext; constructor(parser?: OpenFGAParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); this.parser = parser; } - public identifier_list(): IdentifierContext[] { - return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + public extended_identifier_list(): Extended_identifierContext[] { + return this.getTypedRuleContexts(Extended_identifierContext) as Extended_identifierContext[]; } - public identifier(i: number): IdentifierContext { - return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + public extended_identifier(i: number): Extended_identifierContext { + return this.getTypedRuleContext(Extended_identifierContext, i) as Extended_identifierContext; } public WHITESPACE_list(): TerminalNode[] { return this.getTokens(OpenFGAParser.WHITESPACE); @@ -2631,18 +2688,18 @@ export class RelationDefTypeRestrictionContext extends ParserRuleContext { export class RelationDefTypeRestrictionBaseContext extends ParserRuleContext { - public _relationDefTypeRestrictionType!: IdentifierContext; + public _relationDefTypeRestrictionType!: Extended_identifierContext; public _relationDefTypeRestrictionWildcard!: Token; - public _relationDefTypeRestrictionRelation!: IdentifierContext; + public _relationDefTypeRestrictionRelation!: Extended_identifierContext; constructor(parser?: OpenFGAParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); this.parser = parser; } - public identifier_list(): IdentifierContext[] { - return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + public extended_identifier_list(): Extended_identifierContext[] { + return this.getTypedRuleContexts(Extended_identifierContext) as Extended_identifierContext[]; } - public identifier(i: number): IdentifierContext { - return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + public extended_identifier(i: number): Extended_identifierContext { + return this.getTypedRuleContext(Extended_identifierContext, i) as Extended_identifierContext; } public COLON(): TerminalNode { return this.getToken(OpenFGAParser.COLON, 0); @@ -2960,6 +3017,33 @@ export class IdentifierContext extends ParserRuleContext { } +export class Extended_identifierContext extends ParserRuleContext { + constructor(parser?: OpenFGAParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public EXTENDED_IDENTIFIER(): TerminalNode { + return this.getToken(OpenFGAParser.EXTENDED_IDENTIFIER, 0); + } + public get ruleIndex(): number { + return OpenFGAParser.RULE_extended_identifier; + } + public enterRule(listener: OpenFGAParserListener): void { + if(listener.enterExtended_identifier) { + listener.enterExtended_identifier(this); + } + } + public exitRule(listener: OpenFGAParserListener): void { + if(listener.exitExtended_identifier) { + listener.exitExtended_identifier(this); + } + } +} + + export class ConditionExpressionContext extends ParserRuleContext { constructor(parser?: OpenFGAParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); diff --git a/pkg/js/gen/OpenFGAParserListener.ts b/pkg/js/gen/OpenFGAParserListener.ts index 5284c17f..b549d590 100644 --- a/pkg/js/gen/OpenFGAParserListener.ts +++ b/pkg/js/gen/OpenFGAParserListener.ts @@ -28,6 +28,7 @@ import { ParameterNameContext } from "./OpenFGAParser"; import { ParameterTypeContext } from "./OpenFGAParser"; import { MultiLineCommentContext } from "./OpenFGAParser"; import { IdentifierContext } from "./OpenFGAParser"; +import { Extended_identifierContext } from "./OpenFGAParser"; import { ConditionExpressionContext } from "./OpenFGAParser"; @@ -286,6 +287,16 @@ export default class OpenFGAParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitIdentifier?: (ctx: IdentifierContext) => void; + /** + * Enter a parse tree produced by `OpenFGAParser.extended_identifier`. + * @param ctx the parse tree + */ + enterExtended_identifier?: (ctx: Extended_identifierContext) => void; + /** + * Exit a parse tree produced by `OpenFGAParser.extended_identifier`. + * @param ctx the parse tree + */ + exitExtended_identifier?: (ctx: Extended_identifierContext) => void; /** * Enter a parse tree produced by `OpenFGAParser.conditionExpression`. * @param ctx the parse tree diff --git a/tests/data/dsl-syntax-validation-cases.yaml b/tests/data/dsl-syntax-validation-cases.yaml index a4fe5094..e49edfbd 100644 --- a/tests/data/dsl-syntax-validation-cases.yaml +++ b/tests/data/dsl-syntax-validation-cases.yaml @@ -20,6 +20,20 @@ define viewer: [user] define can_view: viewer or admin +- name: "valid syntax (4): extended identifiers" + dsl: | + model + schema 1.1 + type a + type _a + type __a__ + type a/b + type _.a_/_b._ + type a.bc/def + type a.b + relations + define a.b.c: [a/b] + define a.b/c: [_.a_/_b._] - name: no model header dsl: | type user @@ -70,15 +84,15 @@ model schema1.1 expected_errors: - - msg: "mismatched input 'schema1' expecting 'schema'" + - msg: "mismatched input 'schema1.1' expecting 'schema'" line: start: 1 end: 1 column: start: 2 - end: 9 + end: 11 metadata: - symbol: "schema1" + symbol: "schema1.1" - name: schema 1.1 required dsl: | model @@ -98,15 +112,15 @@ model schema a.b expected_errors: - - msg: "mismatched input 'a' expecting SCHEMA_VERSION" + - msg: "mismatched input 'a.b' expecting SCHEMA_VERSION" line: start: 1 end: 1 column: start: 9 - end: 10 + end: 12 metadata: - symbol: "a" + symbol: "a.b" - name: a module with missing name dsl: | module @@ -381,7 +395,7 @@ define member: [ ] define reader: [user] expected_errors: - - msg: "extraneous input ']' expecting {IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', NEWLINE}" + - msg: "extraneous input ']' expecting {IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER, NEWLINE}" line: start: 5 end: 5 @@ -391,7 +405,7 @@ metadata: symbol: "]" - msg: mismatched input 'define' expecting {IDENTIFIER, 'module', 'model', - 'schema', 'extend', 'type', 'relation'} + 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER} line: start: 6 end: 6 @@ -419,7 +433,7 @@ define member: [] define reader: [user] expected_errors: - - msg: "extraneous input ']' expecting {WHITESPACE, IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', NEWLINE}" + - msg: "extraneous input ']' expecting {WHITESPACE, IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER, NEWLINE}" line: start: 5 end: 5 @@ -428,7 +442,7 @@ end: 21 metadata: symbol: "]" - - msg: "mismatched input 'define' expecting {IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "mismatched input 'define' expecting {IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 6 end: 6 @@ -566,7 +580,7 @@ define editor: [user] define viewer: editor but not [document#viewer] expected_errors: - - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 6 end: 6 @@ -593,7 +607,7 @@ define viewer: [document#viewer] or [document#editor] define editor: [document#viewer] or [document#editor] expected_errors: - - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 4 end: 4 @@ -621,7 +635,7 @@ define editor: [user] define viewer: [user] and [document#editor] expected_errors: - - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 6 end: 6 @@ -649,7 +663,7 @@ define editor: [user] define viewer: [document#editor] but not [user] expected_errors: - - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 6 end: 6 @@ -677,7 +691,7 @@ define editor: [user] define viewer: [user] but not [document#editor] expected_errors: - - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 6 end: 6 @@ -705,7 +719,7 @@ define editor: [user] define viewer: [user] or [document#editor] expected_errors: - - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 6 end: 6 @@ -840,7 +854,7 @@ type org relations - define member: [user] + define member: [user] type group relations @@ -1190,8 +1204,8 @@ model schema 1.1 type user - relations - define follower: [user, user:*, user#follower, user with is_not_hidden, user:* with is_not_hidden, user#follower with is_not_hidden] + relations + define follower: [user, user:*, user#follower, user with is_not_hidden, user:* with is_not_hidden, user#follower with is_not_hidden] condition is_not_hidden(status: string) { status != "hidden" } @@ -1236,7 +1250,7 @@ relations define viewer: [user] or [user] expected_errors: - - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 4 end: 4 @@ -1303,7 +1317,7 @@ define rel1: [user] define rel2: but not rel1 expected_errors: - - msg: "mismatched input 'but not' expecting {'[', '(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "mismatched input 'but not' expecting {'[', '(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 5 end: 5 @@ -1322,7 +1336,7 @@ define rel1: [user] define rel2: or rel1 expected_errors: - - msg: "mismatched input 'or' expecting {'[', '(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "mismatched input 'or' expecting {'[', '(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 5 end: 5 @@ -1341,7 +1355,7 @@ define rel1: [user] define rel2: and rel1 expected_errors: - - msg: "mismatched input 'and' expecting {'[', '(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "mismatched input 'and' expecting {'[', '(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 5 end: 5 @@ -1360,7 +1374,7 @@ define rel1: [user] define rel2: rel1 and [user] expected_errors: - - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 5 end: 5 @@ -1390,7 +1404,7 @@ define rel3: [user] define relation: rel3 or ((rel1 and rel2) but not [user]) expected_errors: - - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation'}" + - msg: "extraneous input '[' expecting {'(', IDENTIFIER, 'module', 'model', 'schema', 'extend', 'type', 'relation', EXTENDED_IDENTIFIER}" line: start: 7 end: 7