From b3c19bff823988d3a957494c88a79dbf1f3eb84d Mon Sep 17 00:00:00 2001 From: Tim Voronov Date: Mon, 20 Sep 2021 12:01:47 -0400 Subject: [PATCH] Feature/variables optimization (#673) * Added optimization to FOR loops by disabling allocation if RETURN statement returns NONE * Added support of ignoring expression results in variable declaration using '_' as a variable name --- pkg/compiler/compiler_for_test.go | 17 + pkg/compiler/compiler_let_test.go | 37 + pkg/compiler/scope.go | 4 + pkg/compiler/visitor.go | 18 +- pkg/parser/antlr/FqlLexer.g4 | 4 +- pkg/parser/antlr/FqlLexer.tokens | 11 +- pkg/parser/antlr/FqlParser.g4 | 1 + pkg/parser/fql/FqlLexer.interp | 6 +- pkg/parser/fql/FqlLexer.tokens | 11 +- pkg/parser/fql/FqlParser.interp | 4 +- pkg/parser/fql/FqlParser.tokens | 11 +- pkg/parser/fql/fql_lexer.go | 524 ++++----- pkg/parser/fql/fql_parser.go | 1293 +++++++++++----------- pkg/runtime/core/consts.go | 5 + pkg/runtime/core/scope.go | 15 +- pkg/runtime/expressions/for.go | 79 +- pkg/runtime/expressions/for_result.go | 88 ++ pkg/runtime/expressions/literals/none.go | 6 + pkg/runtime/expressions/return.go | 4 + pkg/runtime/expressions/vector.go | 108 ++ pkg/runtime/values/array.go | 4 + 21 files changed, 1280 insertions(+), 970 deletions(-) create mode 100644 pkg/runtime/core/consts.go create mode 100644 pkg/runtime/expressions/for_result.go create mode 100644 pkg/runtime/expressions/vector.go diff --git a/pkg/compiler/compiler_for_test.go b/pkg/compiler/compiler_for_test.go index 21a0a354..c3b1561f 100644 --- a/pkg/compiler/compiler_for_test.go +++ b/pkg/compiler/compiler_for_test.go @@ -45,6 +45,23 @@ func TestFor(t *testing.T) { So(string(out), ShouldEqual, "[1,2,3]") }) + Convey("Should not allocate memory if NONE is a return statement", t, func() { + c := compiler.New() + + p, err := c.Compile(` + FOR i IN 0..100 + RETURN NONE + `) + + So(err, ShouldBeNil) + So(p, ShouldHaveSameTypeAs, &runtime.Program{}) + + out, err := p.Run(context.Background()) + + So(err, ShouldBeNil) + So(string(out), ShouldEqual, "[]") + }) + Convey("Should compile FOR i, k IN [1, 2, 3] RETURN k", t, func() { c := compiler.New() diff --git a/pkg/compiler/compiler_let_test.go b/pkg/compiler/compiler_let_test.go index ebbb92ac..1b16010e 100644 --- a/pkg/compiler/compiler_let_test.go +++ b/pkg/compiler/compiler_let_test.go @@ -337,4 +337,41 @@ func TestLet(t *testing.T) { So(err, ShouldBeNil) So(string(out), ShouldEqual, `false`) }) + + Convey("Should use ignorable variable name", t, func() { + out, err := newCompilerWithObservable().MustCompile(` + LET _ = (FOR i IN 1..100 RETURN NONE) + + RETURN TRUE + `).Run(context.Background()) + + So(err, ShouldBeNil) + So(string(out), ShouldEqual, `true`) + }) + + Convey("Should allow to declare a variable name using _", t, func() { + c := compiler.New() + + out, err := c.MustCompile(` + LET _ = (FOR i IN 1..100 RETURN NONE) + LET _ = (FOR i IN 1..100 RETURN NONE) + + RETURN TRUE + `).Run(context.Background()) + + So(err, ShouldBeNil) + So(string(out), ShouldEqual, `true`) + }) + + Convey("Should not allow to use ignorable variable name", t, func() { + c := compiler.New() + + _, err := c.Compile(` + LET _ = (FOR i IN 1..100 RETURN NONE) + + RETURN _ + `) + + So(err, ShouldNotBeNil) + }) } diff --git a/pkg/compiler/scope.go b/pkg/compiler/scope.go index d7aea34e..518afbae 100644 --- a/pkg/compiler/scope.go +++ b/pkg/compiler/scope.go @@ -55,6 +55,10 @@ func (s *scope) HasVariable(name string) bool { } func (s *scope) SetVariable(name string) error { + if name == core.IgnorableVariable { + return nil + } + _, exists := s.vars[name] if exists { diff --git a/pkg/compiler/visitor.go b/pkg/compiler/visitor.go index d91d5d78..7c0d406d 100644 --- a/pkg/compiler/visitor.go +++ b/pkg/compiler/visitor.go @@ -249,6 +249,7 @@ func (v *visitor) doVisitForExpression(ctx *fql.ForExpressionContext, scope *sco if !isWhileLoop { srcCtx := ctx.ForExpressionSource().(*fql.ForExpressionSourceContext) srcExp, err := v.doVisitForExpressionSource(srcCtx, scope) + if err != nil { return nil, err } @@ -266,6 +267,7 @@ func (v *visitor) doVisitForExpression(ctx *fql.ForExpressionContext, scope *sco } else { whileExpCtx := ctx.Expression().(*fql.ExpressionContext) conditionExp, err := v.doVisitExpression(whileExpCtx, scope) + if err != nil { return nil, err } @@ -315,6 +317,7 @@ func (v *visitor) doVisitForExpression(ctx *fql.ForExpressionContext, scope *sco valVarName, keyVarName, ) + if err != nil { return nil, err } @@ -325,6 +328,7 @@ func (v *visitor) doVisitForExpression(ctx *fql.ForExpressionContext, scope *sco statementCtx.(*fql.ForExpressionStatementContext), forInScope, ) + if err != nil { return nil, err } @@ -336,12 +340,14 @@ func (v *visitor) doVisitForExpression(ctx *fql.ForExpressionContext, scope *sco var spread bool var distinct bool var predicate core.Expression + var passThrough bool forRetCtx := ctx.ForExpressionReturn().(*fql.ForExpressionReturnContext) returnCtx := forRetCtx.ReturnExpression() if returnCtx != nil { returnCtx := returnCtx.(*fql.ReturnExpressionContext) returnExp, err := v.doVisitReturnExpression(returnCtx, forInScope) + if err != nil { return nil, err } @@ -353,9 +359,13 @@ func (v *visitor) doVisitForExpression(ctx *fql.ForExpressionContext, scope *sco } predicate = returnExp + + ret := returnExp.(*expressions.ReturnExpression) + passThrough = literals.IsNone(ret.Predicate()) } else { forInCtx := forRetCtx.ForExpression().(*fql.ForExpressionContext) forInExp, err := v.doVisitForExpression(forInCtx, forInScope) + if err != nil { return nil, err } @@ -371,7 +381,9 @@ func (v *visitor) doVisitForExpression(ctx *fql.ForExpressionContext, scope *sco predicate, distinct, spread, + passThrough, ) + if err != nil { return nil, err } @@ -1130,8 +1142,12 @@ func (v *visitor) doVisitVariable(ctx *fql.VariableContext, scope *scope) (core. func (v *visitor) doVisitVariableDeclaration(ctx *fql.VariableDeclarationContext, scope *scope) (core.Expression, error) { var init core.Expression var err error + name := core.IgnorableVariable + + if id := ctx.Identifier(); id != nil { + name = id.GetText() + } - name := ctx.Identifier().GetText() err = scope.SetVariable(name) if err != nil { diff --git a/pkg/parser/antlr/FqlLexer.g4 b/pkg/parser/antlr/FqlLexer.g4 index 1b5f42f1..fa706b6b 100644 --- a/pkg/parser/antlr/FqlLexer.g4 +++ b/pkg/parser/antlr/FqlLexer.g4 @@ -86,6 +86,7 @@ While: 'WHILE'; // Literals Param: '@'; Identifier: Letter+ (Symbols (Identifier)*)* (Digit (Identifier)*)*; +IgnoreIdentifier: Underscore; StringLiteral: SQString | DQSring | BacktickString | TickString; IntegerLiteral: [0-9]+; FloatLiteral @@ -111,7 +112,8 @@ fragment ExponentPart fragment Letter : 'A'..'Z' | 'a'..'z' ; -fragment Symbols: '_'; +fragment Symbols: Underscore; +fragment Underscore: '_'; fragment Digit : '0'..'9' ; diff --git a/pkg/parser/antlr/FqlLexer.tokens b/pkg/parser/antlr/FqlLexer.tokens index 37b913e6..d5663a12 100644 --- a/pkg/parser/antlr/FqlLexer.tokens +++ b/pkg/parser/antlr/FqlLexer.tokens @@ -62,11 +62,12 @@ Do=61 While=62 Param=63 Identifier=64 -StringLiteral=65 -IntegerLiteral=66 -FloatLiteral=67 -NamespaceSegment=68 -UnknownIdentifier=69 +IgnoreIdentifier=65 +StringLiteral=66 +IntegerLiteral=67 +FloatLiteral=68 +NamespaceSegment=69 +UnknownIdentifier=70 ':'=5 ';'=6 '.'=7 diff --git a/pkg/parser/antlr/FqlParser.g4 b/pkg/parser/antlr/FqlParser.g4 index 6c061637..91c9a841 100644 --- a/pkg/parser/antlr/FqlParser.g4 +++ b/pkg/parser/antlr/FqlParser.g4 @@ -41,6 +41,7 @@ bodyExpression variableDeclaration : Let Identifier Assign expression + | Let IgnoreIdentifier Assign expression ; returnExpression diff --git a/pkg/parser/fql/FqlLexer.interp b/pkg/parser/fql/FqlLexer.interp index ab2968cb..8dfc9a88 100644 --- a/pkg/parser/fql/FqlLexer.interp +++ b/pkg/parser/fql/FqlLexer.interp @@ -69,6 +69,7 @@ null null null null +null token symbolic names: null @@ -136,6 +137,7 @@ Do While Param Identifier +IgnoreIdentifier StringLiteral IntegerLiteral FloatLiteral @@ -207,6 +209,7 @@ Do While Param Identifier +IgnoreIdentifier StringLiteral IntegerLiteral FloatLiteral @@ -217,6 +220,7 @@ DecimalIntegerLiteral ExponentPart Letter Symbols +Underscore Digit DQSring SQString @@ -232,4 +236,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 71, 595, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 168, 10, 2, 12, 2, 14, 2, 171, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 182, 10, 3, 12, 3, 14, 3, 185, 11, 3, 3, 3, 3, 3, 3, 4, 6, 4, 190, 10, 4, 13, 4, 14, 4, 191, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 257, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 263, 10, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 351, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 381, 10, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 441, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 6, 65, 458, 10, 65, 13, 65, 14, 65, 459, 3, 65, 3, 65, 7, 65, 464, 10, 65, 12, 65, 14, 65, 467, 11, 65, 7, 65, 469, 10, 65, 12, 65, 14, 65, 472, 11, 65, 3, 65, 3, 65, 7, 65, 476, 10, 65, 12, 65, 14, 65, 479, 11, 65, 7, 65, 481, 10, 65, 12, 65, 14, 65, 484, 11, 65, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 490, 10, 66, 3, 67, 6, 67, 493, 10, 67, 13, 67, 14, 67, 494, 3, 68, 3, 68, 3, 68, 6, 68, 500, 10, 68, 13, 68, 14, 68, 501, 3, 68, 5, 68, 505, 10, 68, 3, 68, 3, 68, 5, 68, 509, 10, 68, 5, 68, 511, 10, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 7, 72, 523, 10, 72, 12, 72, 14, 72, 526, 11, 72, 5, 72, 528, 10, 72, 3, 73, 3, 73, 5, 73, 532, 10, 73, 3, 73, 6, 73, 535, 10, 73, 13, 73, 14, 73, 536, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 551, 10, 77, 12, 77, 14, 77, 554, 11, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 564, 10, 78, 12, 78, 14, 78, 567, 11, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 575, 10, 79, 12, 79, 14, 79, 578, 11, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 7, 80, 586, 10, 80, 12, 80, 14, 80, 589, 11, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 169, 2, 82, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 2, 143, 2, 145, 2, 147, 2, 149, 2, 151, 2, 153, 2, 155, 2, 157, 2, 159, 2, 161, 2, 3, 2, 14, 5, 2, 12, 12, 15, 15, 8234, 8235, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 3, 2, 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 51, 59, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 67, 92, 99, 124, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 3, 2, 98, 98, 3, 2, 182, 182, 2, 620, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 3, 163, 3, 2, 2, 2, 5, 177, 3, 2, 2, 2, 7, 189, 3, 2, 2, 2, 9, 195, 3, 2, 2, 2, 11, 199, 3, 2, 2, 2, 13, 201, 3, 2, 2, 2, 15, 203, 3, 2, 2, 2, 17, 205, 3, 2, 2, 2, 19, 207, 3, 2, 2, 2, 21, 209, 3, 2, 2, 2, 23, 211, 3, 2, 2, 2, 25, 213, 3, 2, 2, 2, 27, 215, 3, 2, 2, 2, 29, 217, 3, 2, 2, 2, 31, 219, 3, 2, 2, 2, 33, 221, 3, 2, 2, 2, 35, 223, 3, 2, 2, 2, 37, 226, 3, 2, 2, 2, 39, 229, 3, 2, 2, 2, 41, 232, 3, 2, 2, 2, 43, 235, 3, 2, 2, 2, 45, 237, 3, 2, 2, 2, 47, 239, 3, 2, 2, 2, 49, 241, 3, 2, 2, 2, 51, 243, 3, 2, 2, 2, 53, 245, 3, 2, 2, 2, 55, 248, 3, 2, 2, 2, 57, 256, 3, 2, 2, 2, 59, 262, 3, 2, 2, 2, 61, 264, 3, 2, 2, 2, 63, 267, 3, 2, 2, 2, 65, 269, 3, 2, 2, 2, 67, 271, 3, 2, 2, 2, 69, 274, 3, 2, 2, 2, 71, 277, 3, 2, 2, 2, 73, 281, 3, 2, 2, 2, 75, 288, 3, 2, 2, 2, 77, 296, 3, 2, 2, 2, 79, 304, 3, 2, 2, 2, 81, 313, 3, 2, 2, 2, 83, 320, 3, 2, 2, 2, 85, 325, 3, 2, 2, 2, 87, 331, 3, 2, 2, 2, 89, 335, 3, 2, 2, 2, 91, 350, 3, 2, 2, 2, 93, 352, 3, 2, 2, 2, 95, 357, 3, 2, 2, 2, 97, 380, 3, 2, 2, 2, 99, 382, 3, 2, 2, 2, 101, 386, 3, 2, 2, 2, 103, 391, 3, 2, 2, 2, 105, 396, 3, 2, 2, 2, 107, 401, 3, 2, 2, 2, 109, 407, 3, 2, 2, 2, 111, 411, 3, 2, 2, 2, 113, 415, 3, 2, 2, 2, 115, 425, 3, 2, 2, 2, 117, 431, 3, 2, 2, 2, 119, 440, 3, 2, 2, 2, 121, 442, 3, 2, 2, 2, 123, 445, 3, 2, 2, 2, 125, 448, 3, 2, 2, 2, 127, 454, 3, 2, 2, 2, 129, 457, 3, 2, 2, 2, 131, 489, 3, 2, 2, 2, 133, 492, 3, 2, 2, 2, 135, 510, 3, 2, 2, 2, 137, 512, 3, 2, 2, 2, 139, 515, 3, 2, 2, 2, 141, 517, 3, 2, 2, 2, 143, 527, 3, 2, 2, 2, 145, 529, 3, 2, 2, 2, 147, 538, 3, 2, 2, 2, 149, 540, 3, 2, 2, 2, 151, 542, 3, 2, 2, 2, 153, 544, 3, 2, 2, 2, 155, 557, 3, 2, 2, 2, 157, 570, 3, 2, 2, 2, 159, 581, 3, 2, 2, 2, 161, 592, 3, 2, 2, 2, 163, 164, 7, 49, 2, 2, 164, 165, 7, 44, 2, 2, 165, 169, 3, 2, 2, 2, 166, 168, 11, 2, 2, 2, 167, 166, 3, 2, 2, 2, 168, 171, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 169, 167, 3, 2, 2, 2, 170, 172, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 172, 173, 7, 44, 2, 2, 173, 174, 7, 49, 2, 2, 174, 175, 3, 2, 2, 2, 175, 176, 8, 2, 2, 2, 176, 4, 3, 2, 2, 2, 177, 178, 7, 49, 2, 2, 178, 179, 7, 49, 2, 2, 179, 183, 3, 2, 2, 2, 180, 182, 10, 2, 2, 2, 181, 180, 3, 2, 2, 2, 182, 185, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 186, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 186, 187, 8, 3, 2, 2, 187, 6, 3, 2, 2, 2, 188, 190, 9, 3, 2, 2, 189, 188, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 8, 4, 2, 2, 194, 8, 3, 2, 2, 2, 195, 196, 9, 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, 198, 8, 5, 2, 2, 198, 10, 3, 2, 2, 2, 199, 200, 7, 60, 2, 2, 200, 12, 3, 2, 2, 2, 201, 202, 7, 61, 2, 2, 202, 14, 3, 2, 2, 2, 203, 204, 7, 48, 2, 2, 204, 16, 3, 2, 2, 2, 205, 206, 7, 46, 2, 2, 206, 18, 3, 2, 2, 2, 207, 208, 7, 93, 2, 2, 208, 20, 3, 2, 2, 2, 209, 210, 7, 95, 2, 2, 210, 22, 3, 2, 2, 2, 211, 212, 7, 42, 2, 2, 212, 24, 3, 2, 2, 2, 213, 214, 7, 43, 2, 2, 214, 26, 3, 2, 2, 2, 215, 216, 7, 125, 2, 2, 216, 28, 3, 2, 2, 2, 217, 218, 7, 127, 2, 2, 218, 30, 3, 2, 2, 2, 219, 220, 7, 64, 2, 2, 220, 32, 3, 2, 2, 2, 221, 222, 7, 62, 2, 2, 222, 34, 3, 2, 2, 2, 223, 224, 7, 63, 2, 2, 224, 225, 7, 63, 2, 2, 225, 36, 3, 2, 2, 2, 226, 227, 7, 64, 2, 2, 227, 228, 7, 63, 2, 2, 228, 38, 3, 2, 2, 2, 229, 230, 7, 62, 2, 2, 230, 231, 7, 63, 2, 2, 231, 40, 3, 2, 2, 2, 232, 233, 7, 35, 2, 2, 233, 234, 7, 63, 2, 2, 234, 42, 3, 2, 2, 2, 235, 236, 7, 44, 2, 2, 236, 44, 3, 2, 2, 2, 237, 238, 7, 49, 2, 2, 238, 46, 3, 2, 2, 2, 239, 240, 7, 39, 2, 2, 240, 48, 3, 2, 2, 2, 241, 242, 7, 45, 2, 2, 242, 50, 3, 2, 2, 2, 243, 244, 7, 47, 2, 2, 244, 52, 3, 2, 2, 2, 245, 246, 7, 47, 2, 2, 246, 247, 7, 47, 2, 2, 247, 54, 3, 2, 2, 2, 248, 249, 7, 45, 2, 2, 249, 250, 7, 45, 2, 2, 250, 56, 3, 2, 2, 2, 251, 252, 7, 67, 2, 2, 252, 253, 7, 80, 2, 2, 253, 257, 7, 70, 2, 2, 254, 255, 7, 40, 2, 2, 255, 257, 7, 40, 2, 2, 256, 251, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 257, 58, 3, 2, 2, 2, 258, 259, 7, 81, 2, 2, 259, 263, 7, 84, 2, 2, 260, 261, 7, 126, 2, 2, 261, 263, 7, 126, 2, 2, 262, 258, 3, 2, 2, 2, 262, 260, 3, 2, 2, 2, 263, 60, 3, 2, 2, 2, 264, 265, 5, 15, 8, 2, 265, 266, 5, 15, 8, 2, 266, 62, 3, 2, 2, 2, 267, 268, 7, 63, 2, 2, 268, 64, 3, 2, 2, 2, 269, 270, 7, 65, 2, 2, 270, 66, 3, 2, 2, 2, 271, 272, 7, 35, 2, 2, 272, 273, 7, 128, 2, 2, 273, 68, 3, 2, 2, 2, 274, 275, 7, 63, 2, 2, 275, 276, 7, 128, 2, 2, 276, 70, 3, 2, 2, 2, 277, 278, 7, 72, 2, 2, 278, 279, 7, 81, 2, 2, 279, 280, 7, 84, 2, 2, 280, 72, 3, 2, 2, 2, 281, 282, 7, 84, 2, 2, 282, 283, 7, 71, 2, 2, 283, 284, 7, 86, 2, 2, 284, 285, 7, 87, 2, 2, 285, 286, 7, 84, 2, 2, 286, 287, 7, 80, 2, 2, 287, 74, 3, 2, 2, 2, 288, 289, 7, 89, 2, 2, 289, 290, 7, 67, 2, 2, 290, 291, 7, 75, 2, 2, 291, 292, 7, 86, 2, 2, 292, 293, 7, 72, 2, 2, 293, 294, 7, 81, 2, 2, 294, 295, 7, 84, 2, 2, 295, 76, 3, 2, 2, 2, 296, 297, 7, 81, 2, 2, 297, 298, 7, 82, 2, 2, 298, 299, 7, 86, 2, 2, 299, 300, 7, 75, 2, 2, 300, 301, 7, 81, 2, 2, 301, 302, 7, 80, 2, 2, 302, 303, 7, 85, 2, 2, 303, 78, 3, 2, 2, 2, 304, 305, 7, 70, 2, 2, 305, 306, 7, 75, 2, 2, 306, 307, 7, 85, 2, 2, 307, 308, 7, 86, 2, 2, 308, 309, 7, 75, 2, 2, 309, 310, 7, 80, 2, 2, 310, 311, 7, 69, 2, 2, 311, 312, 7, 86, 2, 2, 312, 80, 3, 2, 2, 2, 313, 314, 7, 72, 2, 2, 314, 315, 7, 75, 2, 2, 315, 316, 7, 78, 2, 2, 316, 317, 7, 86, 2, 2, 317, 318, 7, 71, 2, 2, 318, 319, 7, 84, 2, 2, 319, 82, 3, 2, 2, 2, 320, 321, 7, 85, 2, 2, 321, 322, 7, 81, 2, 2, 322, 323, 7, 84, 2, 2, 323, 324, 7, 86, 2, 2, 324, 84, 3, 2, 2, 2, 325, 326, 7, 78, 2, 2, 326, 327, 7, 75, 2, 2, 327, 328, 7, 79, 2, 2, 328, 329, 7, 75, 2, 2, 329, 330, 7, 86, 2, 2, 330, 86, 3, 2, 2, 2, 331, 332, 7, 78, 2, 2, 332, 333, 7, 71, 2, 2, 333, 334, 7, 86, 2, 2, 334, 88, 3, 2, 2, 2, 335, 336, 7, 69, 2, 2, 336, 337, 7, 81, 2, 2, 337, 338, 7, 78, 2, 2, 338, 339, 7, 78, 2, 2, 339, 340, 7, 71, 2, 2, 340, 341, 7, 69, 2, 2, 341, 342, 7, 86, 2, 2, 342, 90, 3, 2, 2, 2, 343, 344, 7, 67, 2, 2, 344, 345, 7, 85, 2, 2, 345, 351, 7, 69, 2, 2, 346, 347, 7, 70, 2, 2, 347, 348, 7, 71, 2, 2, 348, 349, 7, 85, 2, 2, 349, 351, 7, 69, 2, 2, 350, 343, 3, 2, 2, 2, 350, 346, 3, 2, 2, 2, 351, 92, 3, 2, 2, 2, 352, 353, 7, 80, 2, 2, 353, 354, 7, 81, 2, 2, 354, 355, 7, 80, 2, 2, 355, 356, 7, 71, 2, 2, 356, 94, 3, 2, 2, 2, 357, 358, 7, 80, 2, 2, 358, 359, 7, 87, 2, 2, 359, 360, 7, 78, 2, 2, 360, 361, 7, 78, 2, 2, 361, 96, 3, 2, 2, 2, 362, 363, 7, 86, 2, 2, 363, 364, 7, 84, 2, 2, 364, 365, 7, 87, 2, 2, 365, 381, 7, 71, 2, 2, 366, 367, 7, 118, 2, 2, 367, 368, 7, 116, 2, 2, 368, 369, 7, 119, 2, 2, 369, 381, 7, 103, 2, 2, 370, 371, 7, 72, 2, 2, 371, 372, 7, 67, 2, 2, 372, 373, 7, 78, 2, 2, 373, 374, 7, 85, 2, 2, 374, 381, 7, 71, 2, 2, 375, 376, 7, 104, 2, 2, 376, 377, 7, 99, 2, 2, 377, 378, 7, 110, 2, 2, 378, 379, 7, 117, 2, 2, 379, 381, 7, 103, 2, 2, 380, 362, 3, 2, 2, 2, 380, 366, 3, 2, 2, 2, 380, 370, 3, 2, 2, 2, 380, 375, 3, 2, 2, 2, 381, 98, 3, 2, 2, 2, 382, 383, 7, 87, 2, 2, 383, 384, 7, 85, 2, 2, 384, 385, 7, 71, 2, 2, 385, 100, 3, 2, 2, 2, 386, 387, 7, 75, 2, 2, 387, 388, 7, 80, 2, 2, 388, 389, 7, 86, 2, 2, 389, 390, 7, 81, 2, 2, 390, 102, 3, 2, 2, 2, 391, 392, 7, 77, 2, 2, 392, 393, 7, 71, 2, 2, 393, 394, 7, 71, 2, 2, 394, 395, 7, 82, 2, 2, 395, 104, 3, 2, 2, 2, 396, 397, 7, 89, 2, 2, 397, 398, 7, 75, 2, 2, 398, 399, 7, 86, 2, 2, 399, 400, 7, 74, 2, 2, 400, 106, 3, 2, 2, 2, 401, 402, 7, 69, 2, 2, 402, 403, 7, 81, 2, 2, 403, 404, 7, 87, 2, 2, 404, 405, 7, 80, 2, 2, 405, 406, 7, 86, 2, 2, 406, 108, 3, 2, 2, 2, 407, 408, 7, 67, 2, 2, 408, 409, 7, 78, 2, 2, 409, 410, 7, 78, 2, 2, 410, 110, 3, 2, 2, 2, 411, 412, 7, 67, 2, 2, 412, 413, 7, 80, 2, 2, 413, 414, 7, 91, 2, 2, 414, 112, 3, 2, 2, 2, 415, 416, 7, 67, 2, 2, 416, 417, 7, 73, 2, 2, 417, 418, 7, 73, 2, 2, 418, 419, 7, 84, 2, 2, 419, 420, 7, 71, 2, 2, 420, 421, 7, 73, 2, 2, 421, 422, 7, 67, 2, 2, 422, 423, 7, 86, 2, 2, 423, 424, 7, 71, 2, 2, 424, 114, 3, 2, 2, 2, 425, 426, 7, 71, 2, 2, 426, 427, 7, 88, 2, 2, 427, 428, 7, 71, 2, 2, 428, 429, 7, 80, 2, 2, 429, 430, 7, 86, 2, 2, 430, 116, 3, 2, 2, 2, 431, 432, 7, 78, 2, 2, 432, 433, 7, 75, 2, 2, 433, 434, 7, 77, 2, 2, 434, 435, 7, 71, 2, 2, 435, 118, 3, 2, 2, 2, 436, 437, 7, 80, 2, 2, 437, 438, 7, 81, 2, 2, 438, 441, 7, 86, 2, 2, 439, 441, 7, 35, 2, 2, 440, 436, 3, 2, 2, 2, 440, 439, 3, 2, 2, 2, 441, 120, 3, 2, 2, 2, 442, 443, 7, 75, 2, 2, 443, 444, 7, 80, 2, 2, 444, 122, 3, 2, 2, 2, 445, 446, 7, 70, 2, 2, 446, 447, 7, 81, 2, 2, 447, 124, 3, 2, 2, 2, 448, 449, 7, 89, 2, 2, 449, 450, 7, 74, 2, 2, 450, 451, 7, 75, 2, 2, 451, 452, 7, 78, 2, 2, 452, 453, 7, 71, 2, 2, 453, 126, 3, 2, 2, 2, 454, 455, 7, 66, 2, 2, 455, 128, 3, 2, 2, 2, 456, 458, 5, 147, 74, 2, 457, 456, 3, 2, 2, 2, 458, 459, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 470, 3, 2, 2, 2, 461, 465, 5, 149, 75, 2, 462, 464, 5, 129, 65, 2, 463, 462, 3, 2, 2, 2, 464, 467, 3, 2, 2, 2, 465, 463, 3, 2, 2, 2, 465, 466, 3, 2, 2, 2, 466, 469, 3, 2, 2, 2, 467, 465, 3, 2, 2, 2, 468, 461, 3, 2, 2, 2, 469, 472, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 482, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 473, 477, 5, 151, 76, 2, 474, 476, 5, 129, 65, 2, 475, 474, 3, 2, 2, 2, 476, 479, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2, 477, 478, 3, 2, 2, 2, 478, 481, 3, 2, 2, 2, 479, 477, 3, 2, 2, 2, 480, 473, 3, 2, 2, 2, 481, 484, 3, 2, 2, 2, 482, 480, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2, 483, 130, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 485, 490, 5, 155, 78, 2, 486, 490, 5, 153, 77, 2, 487, 490, 5, 157, 79, 2, 488, 490, 5, 159, 80, 2, 489, 485, 3, 2, 2, 2, 489, 486, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 489, 488, 3, 2, 2, 2, 490, 132, 3, 2, 2, 2, 491, 493, 9, 4, 2, 2, 492, 491, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 492, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 134, 3, 2, 2, 2, 496, 497, 5, 143, 72, 2, 497, 499, 5, 15, 8, 2, 498, 500, 9, 4, 2, 2, 499, 498, 3, 2, 2, 2, 500, 501, 3, 2, 2, 2, 501, 499, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 504, 3, 2, 2, 2, 503, 505, 5, 145, 73, 2, 504, 503, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 511, 3, 2, 2, 2, 506, 508, 5, 143, 72, 2, 507, 509, 5, 145, 73, 2, 508, 507, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 511, 3, 2, 2, 2, 510, 496, 3, 2, 2, 2, 510, 506, 3, 2, 2, 2, 511, 136, 3, 2, 2, 2, 512, 513, 5, 129, 65, 2, 513, 514, 5, 161, 81, 2, 514, 138, 3, 2, 2, 2, 515, 516, 11, 2, 2, 2, 516, 140, 3, 2, 2, 2, 517, 518, 9, 5, 2, 2, 518, 142, 3, 2, 2, 2, 519, 528, 7, 50, 2, 2, 520, 524, 9, 6, 2, 2, 521, 523, 9, 4, 2, 2, 522, 521, 3, 2, 2, 2, 523, 526, 3, 2, 2, 2, 524, 522, 3, 2, 2, 2, 524, 525, 3, 2, 2, 2, 525, 528, 3, 2, 2, 2, 526, 524, 3, 2, 2, 2, 527, 519, 3, 2, 2, 2, 527, 520, 3, 2, 2, 2, 528, 144, 3, 2, 2, 2, 529, 531, 9, 7, 2, 2, 530, 532, 9, 8, 2, 2, 531, 530, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 534, 3, 2, 2, 2, 533, 535, 9, 4, 2, 2, 534, 533, 3, 2, 2, 2, 535, 536, 3, 2, 2, 2, 536, 534, 3, 2, 2, 2, 536, 537, 3, 2, 2, 2, 537, 146, 3, 2, 2, 2, 538, 539, 9, 9, 2, 2, 539, 148, 3, 2, 2, 2, 540, 541, 7, 97, 2, 2, 541, 150, 3, 2, 2, 2, 542, 543, 4, 50, 59, 2, 543, 152, 3, 2, 2, 2, 544, 552, 7, 36, 2, 2, 545, 546, 7, 94, 2, 2, 546, 551, 11, 2, 2, 2, 547, 548, 7, 36, 2, 2, 548, 551, 7, 36, 2, 2, 549, 551, 10, 10, 2, 2, 550, 545, 3, 2, 2, 2, 550, 547, 3, 2, 2, 2, 550, 549, 3, 2, 2, 2, 551, 554, 3, 2, 2, 2, 552, 550, 3, 2, 2, 2, 552, 553, 3, 2, 2, 2, 553, 555, 3, 2, 2, 2, 554, 552, 3, 2, 2, 2, 555, 556, 7, 36, 2, 2, 556, 154, 3, 2, 2, 2, 557, 565, 7, 41, 2, 2, 558, 559, 7, 94, 2, 2, 559, 564, 11, 2, 2, 2, 560, 561, 7, 41, 2, 2, 561, 564, 7, 41, 2, 2, 562, 564, 10, 11, 2, 2, 563, 558, 3, 2, 2, 2, 563, 560, 3, 2, 2, 2, 563, 562, 3, 2, 2, 2, 564, 567, 3, 2, 2, 2, 565, 563, 3, 2, 2, 2, 565, 566, 3, 2, 2, 2, 566, 568, 3, 2, 2, 2, 567, 565, 3, 2, 2, 2, 568, 569, 7, 41, 2, 2, 569, 156, 3, 2, 2, 2, 570, 576, 7, 98, 2, 2, 571, 572, 7, 94, 2, 2, 572, 575, 7, 98, 2, 2, 573, 575, 10, 12, 2, 2, 574, 571, 3, 2, 2, 2, 574, 573, 3, 2, 2, 2, 575, 578, 3, 2, 2, 2, 576, 574, 3, 2, 2, 2, 576, 577, 3, 2, 2, 2, 577, 579, 3, 2, 2, 2, 578, 576, 3, 2, 2, 2, 579, 580, 7, 98, 2, 2, 580, 158, 3, 2, 2, 2, 581, 587, 7, 182, 2, 2, 582, 583, 7, 94, 2, 2, 583, 586, 7, 182, 2, 2, 584, 586, 10, 13, 2, 2, 585, 582, 3, 2, 2, 2, 585, 584, 3, 2, 2, 2, 586, 589, 3, 2, 2, 2, 587, 585, 3, 2, 2, 2, 587, 588, 3, 2, 2, 2, 588, 590, 3, 2, 2, 2, 589, 587, 3, 2, 2, 2, 590, 591, 7, 182, 2, 2, 591, 160, 3, 2, 2, 2, 592, 593, 7, 60, 2, 2, 593, 594, 7, 60, 2, 2, 594, 162, 3, 2, 2, 2, 34, 2, 169, 183, 191, 256, 262, 350, 380, 440, 459, 465, 470, 477, 482, 489, 494, 501, 504, 508, 510, 524, 527, 531, 536, 550, 552, 563, 565, 574, 576, 585, 587, 3, 2, 3, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 72, 603, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 172, 10, 2, 12, 2, 14, 2, 175, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 186, 10, 3, 12, 3, 14, 3, 189, 11, 3, 3, 3, 3, 3, 3, 4, 6, 4, 194, 10, 4, 13, 4, 14, 4, 195, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 261, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 267, 10, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 355, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 385, 10, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 445, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 6, 65, 462, 10, 65, 13, 65, 14, 65, 463, 3, 65, 3, 65, 7, 65, 468, 10, 65, 12, 65, 14, 65, 471, 11, 65, 7, 65, 473, 10, 65, 12, 65, 14, 65, 476, 11, 65, 3, 65, 3, 65, 7, 65, 480, 10, 65, 12, 65, 14, 65, 483, 11, 65, 7, 65, 485, 10, 65, 12, 65, 14, 65, 488, 11, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 496, 10, 67, 3, 68, 6, 68, 499, 10, 68, 13, 68, 14, 68, 500, 3, 69, 3, 69, 3, 69, 6, 69, 506, 10, 69, 13, 69, 14, 69, 507, 3, 69, 5, 69, 511, 10, 69, 3, 69, 3, 69, 5, 69, 515, 10, 69, 5, 69, 517, 10, 69, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 7, 73, 529, 10, 73, 12, 73, 14, 73, 532, 11, 73, 5, 73, 534, 10, 73, 3, 74, 3, 74, 5, 74, 538, 10, 74, 3, 74, 6, 74, 541, 10, 74, 13, 74, 14, 74, 542, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 559, 10, 79, 12, 79, 14, 79, 562, 11, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 7, 80, 572, 10, 80, 12, 80, 14, 80, 575, 11, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 7, 81, 583, 10, 81, 12, 81, 14, 81, 586, 11, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 7, 82, 594, 10, 82, 12, 82, 14, 82, 597, 11, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 173, 2, 84, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 2, 145, 2, 147, 2, 149, 2, 151, 2, 153, 2, 155, 2, 157, 2, 159, 2, 161, 2, 163, 2, 165, 2, 3, 2, 14, 5, 2, 12, 12, 15, 15, 8234, 8235, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 3, 2, 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 51, 59, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 67, 92, 99, 124, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 3, 2, 98, 98, 3, 2, 182, 182, 2, 627, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 3, 167, 3, 2, 2, 2, 5, 181, 3, 2, 2, 2, 7, 193, 3, 2, 2, 2, 9, 199, 3, 2, 2, 2, 11, 203, 3, 2, 2, 2, 13, 205, 3, 2, 2, 2, 15, 207, 3, 2, 2, 2, 17, 209, 3, 2, 2, 2, 19, 211, 3, 2, 2, 2, 21, 213, 3, 2, 2, 2, 23, 215, 3, 2, 2, 2, 25, 217, 3, 2, 2, 2, 27, 219, 3, 2, 2, 2, 29, 221, 3, 2, 2, 2, 31, 223, 3, 2, 2, 2, 33, 225, 3, 2, 2, 2, 35, 227, 3, 2, 2, 2, 37, 230, 3, 2, 2, 2, 39, 233, 3, 2, 2, 2, 41, 236, 3, 2, 2, 2, 43, 239, 3, 2, 2, 2, 45, 241, 3, 2, 2, 2, 47, 243, 3, 2, 2, 2, 49, 245, 3, 2, 2, 2, 51, 247, 3, 2, 2, 2, 53, 249, 3, 2, 2, 2, 55, 252, 3, 2, 2, 2, 57, 260, 3, 2, 2, 2, 59, 266, 3, 2, 2, 2, 61, 268, 3, 2, 2, 2, 63, 271, 3, 2, 2, 2, 65, 273, 3, 2, 2, 2, 67, 275, 3, 2, 2, 2, 69, 278, 3, 2, 2, 2, 71, 281, 3, 2, 2, 2, 73, 285, 3, 2, 2, 2, 75, 292, 3, 2, 2, 2, 77, 300, 3, 2, 2, 2, 79, 308, 3, 2, 2, 2, 81, 317, 3, 2, 2, 2, 83, 324, 3, 2, 2, 2, 85, 329, 3, 2, 2, 2, 87, 335, 3, 2, 2, 2, 89, 339, 3, 2, 2, 2, 91, 354, 3, 2, 2, 2, 93, 356, 3, 2, 2, 2, 95, 361, 3, 2, 2, 2, 97, 384, 3, 2, 2, 2, 99, 386, 3, 2, 2, 2, 101, 390, 3, 2, 2, 2, 103, 395, 3, 2, 2, 2, 105, 400, 3, 2, 2, 2, 107, 405, 3, 2, 2, 2, 109, 411, 3, 2, 2, 2, 111, 415, 3, 2, 2, 2, 113, 419, 3, 2, 2, 2, 115, 429, 3, 2, 2, 2, 117, 435, 3, 2, 2, 2, 119, 444, 3, 2, 2, 2, 121, 446, 3, 2, 2, 2, 123, 449, 3, 2, 2, 2, 125, 452, 3, 2, 2, 2, 127, 458, 3, 2, 2, 2, 129, 461, 3, 2, 2, 2, 131, 489, 3, 2, 2, 2, 133, 495, 3, 2, 2, 2, 135, 498, 3, 2, 2, 2, 137, 516, 3, 2, 2, 2, 139, 518, 3, 2, 2, 2, 141, 521, 3, 2, 2, 2, 143, 523, 3, 2, 2, 2, 145, 533, 3, 2, 2, 2, 147, 535, 3, 2, 2, 2, 149, 544, 3, 2, 2, 2, 151, 546, 3, 2, 2, 2, 153, 548, 3, 2, 2, 2, 155, 550, 3, 2, 2, 2, 157, 552, 3, 2, 2, 2, 159, 565, 3, 2, 2, 2, 161, 578, 3, 2, 2, 2, 163, 589, 3, 2, 2, 2, 165, 600, 3, 2, 2, 2, 167, 168, 7, 49, 2, 2, 168, 169, 7, 44, 2, 2, 169, 173, 3, 2, 2, 2, 170, 172, 11, 2, 2, 2, 171, 170, 3, 2, 2, 2, 172, 175, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 174, 176, 3, 2, 2, 2, 175, 173, 3, 2, 2, 2, 176, 177, 7, 44, 2, 2, 177, 178, 7, 49, 2, 2, 178, 179, 3, 2, 2, 2, 179, 180, 8, 2, 2, 2, 180, 4, 3, 2, 2, 2, 181, 182, 7, 49, 2, 2, 182, 183, 7, 49, 2, 2, 183, 187, 3, 2, 2, 2, 184, 186, 10, 2, 2, 2, 185, 184, 3, 2, 2, 2, 186, 189, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 187, 188, 3, 2, 2, 2, 188, 190, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 190, 191, 8, 3, 2, 2, 191, 6, 3, 2, 2, 2, 192, 194, 9, 3, 2, 2, 193, 192, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, 198, 8, 4, 2, 2, 198, 8, 3, 2, 2, 2, 199, 200, 9, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 202, 8, 5, 2, 2, 202, 10, 3, 2, 2, 2, 203, 204, 7, 60, 2, 2, 204, 12, 3, 2, 2, 2, 205, 206, 7, 61, 2, 2, 206, 14, 3, 2, 2, 2, 207, 208, 7, 48, 2, 2, 208, 16, 3, 2, 2, 2, 209, 210, 7, 46, 2, 2, 210, 18, 3, 2, 2, 2, 211, 212, 7, 93, 2, 2, 212, 20, 3, 2, 2, 2, 213, 214, 7, 95, 2, 2, 214, 22, 3, 2, 2, 2, 215, 216, 7, 42, 2, 2, 216, 24, 3, 2, 2, 2, 217, 218, 7, 43, 2, 2, 218, 26, 3, 2, 2, 2, 219, 220, 7, 125, 2, 2, 220, 28, 3, 2, 2, 2, 221, 222, 7, 127, 2, 2, 222, 30, 3, 2, 2, 2, 223, 224, 7, 64, 2, 2, 224, 32, 3, 2, 2, 2, 225, 226, 7, 62, 2, 2, 226, 34, 3, 2, 2, 2, 227, 228, 7, 63, 2, 2, 228, 229, 7, 63, 2, 2, 229, 36, 3, 2, 2, 2, 230, 231, 7, 64, 2, 2, 231, 232, 7, 63, 2, 2, 232, 38, 3, 2, 2, 2, 233, 234, 7, 62, 2, 2, 234, 235, 7, 63, 2, 2, 235, 40, 3, 2, 2, 2, 236, 237, 7, 35, 2, 2, 237, 238, 7, 63, 2, 2, 238, 42, 3, 2, 2, 2, 239, 240, 7, 44, 2, 2, 240, 44, 3, 2, 2, 2, 241, 242, 7, 49, 2, 2, 242, 46, 3, 2, 2, 2, 243, 244, 7, 39, 2, 2, 244, 48, 3, 2, 2, 2, 245, 246, 7, 45, 2, 2, 246, 50, 3, 2, 2, 2, 247, 248, 7, 47, 2, 2, 248, 52, 3, 2, 2, 2, 249, 250, 7, 47, 2, 2, 250, 251, 7, 47, 2, 2, 251, 54, 3, 2, 2, 2, 252, 253, 7, 45, 2, 2, 253, 254, 7, 45, 2, 2, 254, 56, 3, 2, 2, 2, 255, 256, 7, 67, 2, 2, 256, 257, 7, 80, 2, 2, 257, 261, 7, 70, 2, 2, 258, 259, 7, 40, 2, 2, 259, 261, 7, 40, 2, 2, 260, 255, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 261, 58, 3, 2, 2, 2, 262, 263, 7, 81, 2, 2, 263, 267, 7, 84, 2, 2, 264, 265, 7, 126, 2, 2, 265, 267, 7, 126, 2, 2, 266, 262, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 267, 60, 3, 2, 2, 2, 268, 269, 5, 15, 8, 2, 269, 270, 5, 15, 8, 2, 270, 62, 3, 2, 2, 2, 271, 272, 7, 63, 2, 2, 272, 64, 3, 2, 2, 2, 273, 274, 7, 65, 2, 2, 274, 66, 3, 2, 2, 2, 275, 276, 7, 35, 2, 2, 276, 277, 7, 128, 2, 2, 277, 68, 3, 2, 2, 2, 278, 279, 7, 63, 2, 2, 279, 280, 7, 128, 2, 2, 280, 70, 3, 2, 2, 2, 281, 282, 7, 72, 2, 2, 282, 283, 7, 81, 2, 2, 283, 284, 7, 84, 2, 2, 284, 72, 3, 2, 2, 2, 285, 286, 7, 84, 2, 2, 286, 287, 7, 71, 2, 2, 287, 288, 7, 86, 2, 2, 288, 289, 7, 87, 2, 2, 289, 290, 7, 84, 2, 2, 290, 291, 7, 80, 2, 2, 291, 74, 3, 2, 2, 2, 292, 293, 7, 89, 2, 2, 293, 294, 7, 67, 2, 2, 294, 295, 7, 75, 2, 2, 295, 296, 7, 86, 2, 2, 296, 297, 7, 72, 2, 2, 297, 298, 7, 81, 2, 2, 298, 299, 7, 84, 2, 2, 299, 76, 3, 2, 2, 2, 300, 301, 7, 81, 2, 2, 301, 302, 7, 82, 2, 2, 302, 303, 7, 86, 2, 2, 303, 304, 7, 75, 2, 2, 304, 305, 7, 81, 2, 2, 305, 306, 7, 80, 2, 2, 306, 307, 7, 85, 2, 2, 307, 78, 3, 2, 2, 2, 308, 309, 7, 70, 2, 2, 309, 310, 7, 75, 2, 2, 310, 311, 7, 85, 2, 2, 311, 312, 7, 86, 2, 2, 312, 313, 7, 75, 2, 2, 313, 314, 7, 80, 2, 2, 314, 315, 7, 69, 2, 2, 315, 316, 7, 86, 2, 2, 316, 80, 3, 2, 2, 2, 317, 318, 7, 72, 2, 2, 318, 319, 7, 75, 2, 2, 319, 320, 7, 78, 2, 2, 320, 321, 7, 86, 2, 2, 321, 322, 7, 71, 2, 2, 322, 323, 7, 84, 2, 2, 323, 82, 3, 2, 2, 2, 324, 325, 7, 85, 2, 2, 325, 326, 7, 81, 2, 2, 326, 327, 7, 84, 2, 2, 327, 328, 7, 86, 2, 2, 328, 84, 3, 2, 2, 2, 329, 330, 7, 78, 2, 2, 330, 331, 7, 75, 2, 2, 331, 332, 7, 79, 2, 2, 332, 333, 7, 75, 2, 2, 333, 334, 7, 86, 2, 2, 334, 86, 3, 2, 2, 2, 335, 336, 7, 78, 2, 2, 336, 337, 7, 71, 2, 2, 337, 338, 7, 86, 2, 2, 338, 88, 3, 2, 2, 2, 339, 340, 7, 69, 2, 2, 340, 341, 7, 81, 2, 2, 341, 342, 7, 78, 2, 2, 342, 343, 7, 78, 2, 2, 343, 344, 7, 71, 2, 2, 344, 345, 7, 69, 2, 2, 345, 346, 7, 86, 2, 2, 346, 90, 3, 2, 2, 2, 347, 348, 7, 67, 2, 2, 348, 349, 7, 85, 2, 2, 349, 355, 7, 69, 2, 2, 350, 351, 7, 70, 2, 2, 351, 352, 7, 71, 2, 2, 352, 353, 7, 85, 2, 2, 353, 355, 7, 69, 2, 2, 354, 347, 3, 2, 2, 2, 354, 350, 3, 2, 2, 2, 355, 92, 3, 2, 2, 2, 356, 357, 7, 80, 2, 2, 357, 358, 7, 81, 2, 2, 358, 359, 7, 80, 2, 2, 359, 360, 7, 71, 2, 2, 360, 94, 3, 2, 2, 2, 361, 362, 7, 80, 2, 2, 362, 363, 7, 87, 2, 2, 363, 364, 7, 78, 2, 2, 364, 365, 7, 78, 2, 2, 365, 96, 3, 2, 2, 2, 366, 367, 7, 86, 2, 2, 367, 368, 7, 84, 2, 2, 368, 369, 7, 87, 2, 2, 369, 385, 7, 71, 2, 2, 370, 371, 7, 118, 2, 2, 371, 372, 7, 116, 2, 2, 372, 373, 7, 119, 2, 2, 373, 385, 7, 103, 2, 2, 374, 375, 7, 72, 2, 2, 375, 376, 7, 67, 2, 2, 376, 377, 7, 78, 2, 2, 377, 378, 7, 85, 2, 2, 378, 385, 7, 71, 2, 2, 379, 380, 7, 104, 2, 2, 380, 381, 7, 99, 2, 2, 381, 382, 7, 110, 2, 2, 382, 383, 7, 117, 2, 2, 383, 385, 7, 103, 2, 2, 384, 366, 3, 2, 2, 2, 384, 370, 3, 2, 2, 2, 384, 374, 3, 2, 2, 2, 384, 379, 3, 2, 2, 2, 385, 98, 3, 2, 2, 2, 386, 387, 7, 87, 2, 2, 387, 388, 7, 85, 2, 2, 388, 389, 7, 71, 2, 2, 389, 100, 3, 2, 2, 2, 390, 391, 7, 75, 2, 2, 391, 392, 7, 80, 2, 2, 392, 393, 7, 86, 2, 2, 393, 394, 7, 81, 2, 2, 394, 102, 3, 2, 2, 2, 395, 396, 7, 77, 2, 2, 396, 397, 7, 71, 2, 2, 397, 398, 7, 71, 2, 2, 398, 399, 7, 82, 2, 2, 399, 104, 3, 2, 2, 2, 400, 401, 7, 89, 2, 2, 401, 402, 7, 75, 2, 2, 402, 403, 7, 86, 2, 2, 403, 404, 7, 74, 2, 2, 404, 106, 3, 2, 2, 2, 405, 406, 7, 69, 2, 2, 406, 407, 7, 81, 2, 2, 407, 408, 7, 87, 2, 2, 408, 409, 7, 80, 2, 2, 409, 410, 7, 86, 2, 2, 410, 108, 3, 2, 2, 2, 411, 412, 7, 67, 2, 2, 412, 413, 7, 78, 2, 2, 413, 414, 7, 78, 2, 2, 414, 110, 3, 2, 2, 2, 415, 416, 7, 67, 2, 2, 416, 417, 7, 80, 2, 2, 417, 418, 7, 91, 2, 2, 418, 112, 3, 2, 2, 2, 419, 420, 7, 67, 2, 2, 420, 421, 7, 73, 2, 2, 421, 422, 7, 73, 2, 2, 422, 423, 7, 84, 2, 2, 423, 424, 7, 71, 2, 2, 424, 425, 7, 73, 2, 2, 425, 426, 7, 67, 2, 2, 426, 427, 7, 86, 2, 2, 427, 428, 7, 71, 2, 2, 428, 114, 3, 2, 2, 2, 429, 430, 7, 71, 2, 2, 430, 431, 7, 88, 2, 2, 431, 432, 7, 71, 2, 2, 432, 433, 7, 80, 2, 2, 433, 434, 7, 86, 2, 2, 434, 116, 3, 2, 2, 2, 435, 436, 7, 78, 2, 2, 436, 437, 7, 75, 2, 2, 437, 438, 7, 77, 2, 2, 438, 439, 7, 71, 2, 2, 439, 118, 3, 2, 2, 2, 440, 441, 7, 80, 2, 2, 441, 442, 7, 81, 2, 2, 442, 445, 7, 86, 2, 2, 443, 445, 7, 35, 2, 2, 444, 440, 3, 2, 2, 2, 444, 443, 3, 2, 2, 2, 445, 120, 3, 2, 2, 2, 446, 447, 7, 75, 2, 2, 447, 448, 7, 80, 2, 2, 448, 122, 3, 2, 2, 2, 449, 450, 7, 70, 2, 2, 450, 451, 7, 81, 2, 2, 451, 124, 3, 2, 2, 2, 452, 453, 7, 89, 2, 2, 453, 454, 7, 74, 2, 2, 454, 455, 7, 75, 2, 2, 455, 456, 7, 78, 2, 2, 456, 457, 7, 71, 2, 2, 457, 126, 3, 2, 2, 2, 458, 459, 7, 66, 2, 2, 459, 128, 3, 2, 2, 2, 460, 462, 5, 149, 75, 2, 461, 460, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 461, 3, 2, 2, 2, 463, 464, 3, 2, 2, 2, 464, 474, 3, 2, 2, 2, 465, 469, 5, 151, 76, 2, 466, 468, 5, 129, 65, 2, 467, 466, 3, 2, 2, 2, 468, 471, 3, 2, 2, 2, 469, 467, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, 473, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 472, 465, 3, 2, 2, 2, 473, 476, 3, 2, 2, 2, 474, 472, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 486, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 477, 481, 5, 155, 78, 2, 478, 480, 5, 129, 65, 2, 479, 478, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 485, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 477, 3, 2, 2, 2, 485, 488, 3, 2, 2, 2, 486, 484, 3, 2, 2, 2, 486, 487, 3, 2, 2, 2, 487, 130, 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 489, 490, 5, 153, 77, 2, 490, 132, 3, 2, 2, 2, 491, 496, 5, 159, 80, 2, 492, 496, 5, 157, 79, 2, 493, 496, 5, 161, 81, 2, 494, 496, 5, 163, 82, 2, 495, 491, 3, 2, 2, 2, 495, 492, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 494, 3, 2, 2, 2, 496, 134, 3, 2, 2, 2, 497, 499, 9, 4, 2, 2, 498, 497, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 498, 3, 2, 2, 2, 500, 501, 3, 2, 2, 2, 501, 136, 3, 2, 2, 2, 502, 503, 5, 145, 73, 2, 503, 505, 5, 15, 8, 2, 504, 506, 9, 4, 2, 2, 505, 504, 3, 2, 2, 2, 506, 507, 3, 2, 2, 2, 507, 505, 3, 2, 2, 2, 507, 508, 3, 2, 2, 2, 508, 510, 3, 2, 2, 2, 509, 511, 5, 147, 74, 2, 510, 509, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 517, 3, 2, 2, 2, 512, 514, 5, 145, 73, 2, 513, 515, 5, 147, 74, 2, 514, 513, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 517, 3, 2, 2, 2, 516, 502, 3, 2, 2, 2, 516, 512, 3, 2, 2, 2, 517, 138, 3, 2, 2, 2, 518, 519, 5, 129, 65, 2, 519, 520, 5, 165, 83, 2, 520, 140, 3, 2, 2, 2, 521, 522, 11, 2, 2, 2, 522, 142, 3, 2, 2, 2, 523, 524, 9, 5, 2, 2, 524, 144, 3, 2, 2, 2, 525, 534, 7, 50, 2, 2, 526, 530, 9, 6, 2, 2, 527, 529, 9, 4, 2, 2, 528, 527, 3, 2, 2, 2, 529, 532, 3, 2, 2, 2, 530, 528, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 534, 3, 2, 2, 2, 532, 530, 3, 2, 2, 2, 533, 525, 3, 2, 2, 2, 533, 526, 3, 2, 2, 2, 534, 146, 3, 2, 2, 2, 535, 537, 9, 7, 2, 2, 536, 538, 9, 8, 2, 2, 537, 536, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 540, 3, 2, 2, 2, 539, 541, 9, 4, 2, 2, 540, 539, 3, 2, 2, 2, 541, 542, 3, 2, 2, 2, 542, 540, 3, 2, 2, 2, 542, 543, 3, 2, 2, 2, 543, 148, 3, 2, 2, 2, 544, 545, 9, 9, 2, 2, 545, 150, 3, 2, 2, 2, 546, 547, 5, 153, 77, 2, 547, 152, 3, 2, 2, 2, 548, 549, 7, 97, 2, 2, 549, 154, 3, 2, 2, 2, 550, 551, 4, 50, 59, 2, 551, 156, 3, 2, 2, 2, 552, 560, 7, 36, 2, 2, 553, 554, 7, 94, 2, 2, 554, 559, 11, 2, 2, 2, 555, 556, 7, 36, 2, 2, 556, 559, 7, 36, 2, 2, 557, 559, 10, 10, 2, 2, 558, 553, 3, 2, 2, 2, 558, 555, 3, 2, 2, 2, 558, 557, 3, 2, 2, 2, 559, 562, 3, 2, 2, 2, 560, 558, 3, 2, 2, 2, 560, 561, 3, 2, 2, 2, 561, 563, 3, 2, 2, 2, 562, 560, 3, 2, 2, 2, 563, 564, 7, 36, 2, 2, 564, 158, 3, 2, 2, 2, 565, 573, 7, 41, 2, 2, 566, 567, 7, 94, 2, 2, 567, 572, 11, 2, 2, 2, 568, 569, 7, 41, 2, 2, 569, 572, 7, 41, 2, 2, 570, 572, 10, 11, 2, 2, 571, 566, 3, 2, 2, 2, 571, 568, 3, 2, 2, 2, 571, 570, 3, 2, 2, 2, 572, 575, 3, 2, 2, 2, 573, 571, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, 576, 3, 2, 2, 2, 575, 573, 3, 2, 2, 2, 576, 577, 7, 41, 2, 2, 577, 160, 3, 2, 2, 2, 578, 584, 7, 98, 2, 2, 579, 580, 7, 94, 2, 2, 580, 583, 7, 98, 2, 2, 581, 583, 10, 12, 2, 2, 582, 579, 3, 2, 2, 2, 582, 581, 3, 2, 2, 2, 583, 586, 3, 2, 2, 2, 584, 582, 3, 2, 2, 2, 584, 585, 3, 2, 2, 2, 585, 587, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 587, 588, 7, 98, 2, 2, 588, 162, 3, 2, 2, 2, 589, 595, 7, 182, 2, 2, 590, 591, 7, 94, 2, 2, 591, 594, 7, 182, 2, 2, 592, 594, 10, 13, 2, 2, 593, 590, 3, 2, 2, 2, 593, 592, 3, 2, 2, 2, 594, 597, 3, 2, 2, 2, 595, 593, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 598, 3, 2, 2, 2, 597, 595, 3, 2, 2, 2, 598, 599, 7, 182, 2, 2, 599, 164, 3, 2, 2, 2, 600, 601, 7, 60, 2, 2, 601, 602, 7, 60, 2, 2, 602, 166, 3, 2, 2, 2, 34, 2, 173, 187, 195, 260, 266, 354, 384, 444, 463, 469, 474, 481, 486, 495, 500, 507, 510, 514, 516, 530, 533, 537, 542, 558, 560, 571, 573, 582, 584, 593, 595, 3, 2, 3, 2] \ No newline at end of file diff --git a/pkg/parser/fql/FqlLexer.tokens b/pkg/parser/fql/FqlLexer.tokens index 37b913e6..d5663a12 100644 --- a/pkg/parser/fql/FqlLexer.tokens +++ b/pkg/parser/fql/FqlLexer.tokens @@ -62,11 +62,12 @@ Do=61 While=62 Param=63 Identifier=64 -StringLiteral=65 -IntegerLiteral=66 -FloatLiteral=67 -NamespaceSegment=68 -UnknownIdentifier=69 +IgnoreIdentifier=65 +StringLiteral=66 +IntegerLiteral=67 +FloatLiteral=68 +NamespaceSegment=69 +UnknownIdentifier=70 ':'=5 ';'=6 '.'=7 diff --git a/pkg/parser/fql/FqlParser.interp b/pkg/parser/fql/FqlParser.interp index c4c37909..f509c67a 100644 --- a/pkg/parser/fql/FqlParser.interp +++ b/pkg/parser/fql/FqlParser.interp @@ -69,6 +69,7 @@ null null null null +null token symbolic names: null @@ -136,6 +137,7 @@ Do While Param Identifier +IgnoreIdentifier StringLiteral IntegerLiteral FloatLiteral @@ -215,4 +217,4 @@ variable atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 71, 616, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 3, 2, 7, 2, 142, 10, 2, 12, 2, 14, 2, 145, 11, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 7, 7, 161, 10, 7, 12, 7, 14, 7, 164, 11, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 5, 8, 171, 10, 8, 3, 9, 3, 9, 5, 9, 175, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 5, 11, 184, 10, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 192, 10, 12, 3, 13, 3, 13, 5, 13, 196, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 202, 10, 14, 3, 14, 3, 14, 3, 14, 7, 14, 207, 10, 14, 12, 14, 14, 14, 210, 11, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 217, 10, 14, 3, 14, 3, 14, 3, 14, 7, 14, 222, 10, 14, 12, 14, 14, 14, 225, 11, 14, 3, 14, 3, 14, 5, 14, 229, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 238, 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 244, 10, 16, 3, 17, 3, 17, 5, 17, 248, 10, 17, 3, 18, 3, 18, 5, 18, 252, 10, 18, 3, 19, 3, 19, 5, 19, 256, 10, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 265, 10, 21, 3, 22, 3, 22, 5, 22, 269, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 275, 10, 23, 12, 23, 14, 23, 278, 11, 23, 3, 24, 3, 24, 5, 24, 282, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 302, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 7, 27, 311, 10, 27, 12, 27, 14, 27, 314, 11, 27, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 320, 10, 28, 12, 28, 14, 28, 323, 11, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 335, 10, 30, 5, 30, 337, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 348, 10, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 356, 10, 33, 3, 33, 5, 33, 359, 10, 33, 3, 34, 3, 34, 3, 34, 5, 34, 364, 10, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 5, 35, 371, 10, 35, 3, 36, 3, 36, 3, 36, 5, 36, 376, 10, 36, 3, 37, 3, 37, 3, 37, 5, 37, 381, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 387, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 7, 38, 393, 10, 38, 12, 38, 14, 38, 396, 11, 38, 3, 38, 5, 38, 399, 10, 38, 5, 38, 401, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 7, 39, 409, 10, 39, 12, 39, 14, 39, 412, 11, 39, 3, 39, 5, 39, 415, 10, 39, 5, 39, 417, 10, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 430, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 5, 42, 439, 10, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 469, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 483, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 514, 10, 48, 3, 48, 3, 48, 7, 48, 518, 10, 48, 12, 48, 14, 48, 521, 11, 48, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 527, 10, 49, 3, 50, 3, 50, 6, 50, 531, 10, 50, 13, 50, 14, 50, 532, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 540, 10, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 5, 53, 548, 10, 53, 3, 54, 5, 54, 551, 10, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 557, 10, 54, 3, 54, 5, 54, 560, 10, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 7, 57, 567, 10, 57, 12, 57, 14, 57, 570, 11, 57, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 576, 10, 58, 12, 58, 14, 58, 579, 11, 58, 5, 58, 581, 10, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 590, 10, 60, 3, 61, 3, 61, 3, 61, 5, 61, 595, 10, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 2, 3, 94, 71, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 2, 10, 3, 2, 48, 49, 6, 2, 30, 31, 37, 39, 41, 62, 66, 66, 4, 2, 48, 48, 56, 57, 3, 2, 17, 22, 3, 2, 35, 36, 3, 2, 23, 25, 3, 2, 26, 27, 4, 2, 26, 27, 61, 61, 2, 650, 2, 143, 3, 2, 2, 2, 4, 149, 3, 2, 2, 2, 6, 151, 3, 2, 2, 2, 8, 153, 3, 2, 2, 2, 10, 156, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 170, 3, 2, 2, 2, 16, 174, 3, 2, 2, 2, 18, 176, 3, 2, 2, 2, 20, 181, 3, 2, 2, 2, 22, 187, 3, 2, 2, 2, 24, 195, 3, 2, 2, 2, 26, 228, 3, 2, 2, 2, 28, 237, 3, 2, 2, 2, 30, 243, 3, 2, 2, 2, 32, 247, 3, 2, 2, 2, 34, 251, 3, 2, 2, 2, 36, 255, 3, 2, 2, 2, 38, 257, 3, 2, 2, 2, 40, 260, 3, 2, 2, 2, 42, 268, 3, 2, 2, 2, 44, 270, 3, 2, 2, 2, 46, 279, 3, 2, 2, 2, 48, 301, 3, 2, 2, 2, 50, 303, 3, 2, 2, 2, 52, 307, 3, 2, 2, 2, 54, 315, 3, 2, 2, 2, 56, 324, 3, 2, 2, 2, 58, 336, 3, 2, 2, 2, 60, 338, 3, 2, 2, 2, 62, 347, 3, 2, 2, 2, 64, 349, 3, 2, 2, 2, 66, 363, 3, 2, 2, 2, 68, 370, 3, 2, 2, 2, 70, 375, 3, 2, 2, 2, 72, 380, 3, 2, 2, 2, 74, 388, 3, 2, 2, 2, 76, 404, 3, 2, 2, 2, 78, 429, 3, 2, 2, 2, 80, 431, 3, 2, 2, 2, 82, 438, 3, 2, 2, 2, 84, 440, 3, 2, 2, 2, 86, 442, 3, 2, 2, 2, 88, 444, 3, 2, 2, 2, 90, 446, 3, 2, 2, 2, 92, 448, 3, 2, 2, 2, 94, 468, 3, 2, 2, 2, 96, 522, 3, 2, 2, 2, 98, 528, 3, 2, 2, 2, 100, 539, 3, 2, 2, 2, 102, 541, 3, 2, 2, 2, 104, 545, 3, 2, 2, 2, 106, 559, 3, 2, 2, 2, 108, 561, 3, 2, 2, 2, 110, 563, 3, 2, 2, 2, 112, 568, 3, 2, 2, 2, 114, 571, 3, 2, 2, 2, 116, 584, 3, 2, 2, 2, 118, 589, 3, 2, 2, 2, 120, 594, 3, 2, 2, 2, 122, 596, 3, 2, 2, 2, 124, 598, 3, 2, 2, 2, 126, 600, 3, 2, 2, 2, 128, 602, 3, 2, 2, 2, 130, 604, 3, 2, 2, 2, 132, 606, 3, 2, 2, 2, 134, 608, 3, 2, 2, 2, 136, 610, 3, 2, 2, 2, 138, 613, 3, 2, 2, 2, 140, 142, 5, 4, 3, 2, 141, 140, 3, 2, 2, 2, 142, 145, 3, 2, 2, 2, 143, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 146, 3, 2, 2, 2, 145, 143, 3, 2, 2, 2, 146, 147, 5, 12, 7, 2, 147, 148, 7, 2, 2, 3, 148, 3, 3, 2, 2, 2, 149, 150, 5, 6, 4, 2, 150, 5, 3, 2, 2, 2, 151, 152, 5, 8, 5, 2, 152, 7, 3, 2, 2, 2, 153, 154, 7, 51, 2, 2, 154, 155, 5, 10, 6, 2, 155, 9, 3, 2, 2, 2, 156, 157, 5, 112, 57, 2, 157, 158, 7, 66, 2, 2, 158, 11, 3, 2, 2, 2, 159, 161, 5, 14, 8, 2, 160, 159, 3, 2, 2, 2, 161, 164, 3, 2, 2, 2, 162, 160, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, 165, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 165, 166, 5, 16, 9, 2, 166, 13, 3, 2, 2, 2, 167, 171, 5, 18, 10, 2, 168, 171, 5, 104, 53, 2, 169, 171, 5, 64, 33, 2, 170, 167, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 169, 3, 2, 2, 2, 171, 15, 3, 2, 2, 2, 172, 175, 5, 20, 11, 2, 173, 175, 5, 26, 14, 2, 174, 172, 3, 2, 2, 2, 174, 173, 3, 2, 2, 2, 175, 17, 3, 2, 2, 2, 176, 177, 7, 45, 2, 2, 177, 178, 7, 66, 2, 2, 178, 179, 7, 33, 2, 2, 179, 180, 5, 94, 48, 2, 180, 19, 3, 2, 2, 2, 181, 183, 7, 38, 2, 2, 182, 184, 7, 41, 2, 2, 183, 182, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 185, 3, 2, 2, 2, 185, 186, 5, 94, 48, 2, 186, 21, 3, 2, 2, 2, 187, 188, 7, 13, 2, 2, 188, 189, 5, 24, 13, 2, 189, 191, 7, 14, 2, 2, 190, 192, 5, 108, 55, 2, 191, 190, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 23, 3, 2, 2, 2, 193, 196, 5, 26, 14, 2, 194, 196, 5, 64, 33, 2, 195, 193, 3, 2, 2, 2, 195, 194, 3, 2, 2, 2, 196, 25, 3, 2, 2, 2, 197, 198, 7, 37, 2, 2, 198, 201, 7, 66, 2, 2, 199, 200, 7, 10, 2, 2, 200, 202, 7, 66, 2, 2, 201, 199, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 7, 62, 2, 2, 204, 208, 5, 28, 15, 2, 205, 207, 5, 34, 18, 2, 206, 205, 3, 2, 2, 2, 207, 210, 3, 2, 2, 2, 208, 206, 3, 2, 2, 2, 208, 209, 3, 2, 2, 2, 209, 211, 3, 2, 2, 2, 210, 208, 3, 2, 2, 2, 211, 212, 5, 36, 19, 2, 212, 229, 3, 2, 2, 2, 213, 214, 7, 37, 2, 2, 214, 216, 7, 66, 2, 2, 215, 217, 7, 63, 2, 2, 216, 215, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 7, 64, 2, 2, 219, 223, 5, 94, 48, 2, 220, 222, 5, 34, 18, 2, 221, 220, 3, 2, 2, 2, 222, 225, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 226, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 226, 227, 5, 36, 19, 2, 227, 229, 3, 2, 2, 2, 228, 197, 3, 2, 2, 2, 228, 213, 3, 2, 2, 2, 229, 27, 3, 2, 2, 2, 230, 238, 5, 104, 53, 2, 231, 238, 5, 74, 38, 2, 232, 238, 5, 76, 39, 2, 233, 238, 5, 138, 70, 2, 234, 238, 5, 98, 50, 2, 235, 238, 5, 72, 37, 2, 236, 238, 5, 136, 69, 2, 237, 230, 3, 2, 2, 2, 237, 231, 3, 2, 2, 2, 237, 232, 3, 2, 2, 2, 237, 233, 3, 2, 2, 2, 237, 234, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 236, 3, 2, 2, 2, 238, 29, 3, 2, 2, 2, 239, 244, 5, 40, 21, 2, 240, 244, 5, 44, 23, 2, 241, 244, 5, 38, 20, 2, 242, 244, 5, 48, 25, 2, 243, 239, 3, 2, 2, 2, 243, 240, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 243, 242, 3, 2, 2, 2, 244, 31, 3, 2, 2, 2, 245, 248, 5, 18, 10, 2, 246, 248, 5, 104, 53, 2, 247, 245, 3, 2, 2, 2, 247, 246, 3, 2, 2, 2, 248, 33, 3, 2, 2, 2, 249, 252, 5, 32, 17, 2, 250, 252, 5, 30, 16, 2, 251, 249, 3, 2, 2, 2, 251, 250, 3, 2, 2, 2, 252, 35, 3, 2, 2, 2, 253, 256, 5, 20, 11, 2, 254, 256, 5, 26, 14, 2, 255, 253, 3, 2, 2, 2, 255, 254, 3, 2, 2, 2, 256, 37, 3, 2, 2, 2, 257, 258, 7, 42, 2, 2, 258, 259, 5, 94, 48, 2, 259, 39, 3, 2, 2, 2, 260, 261, 7, 44, 2, 2, 261, 264, 5, 42, 22, 2, 262, 263, 7, 10, 2, 2, 263, 265, 5, 42, 22, 2, 264, 262, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 41, 3, 2, 2, 2, 266, 269, 7, 68, 2, 2, 267, 269, 5, 136, 69, 2, 268, 266, 3, 2, 2, 2, 268, 267, 3, 2, 2, 2, 269, 43, 3, 2, 2, 2, 270, 271, 7, 43, 2, 2, 271, 276, 5, 46, 24, 2, 272, 273, 7, 10, 2, 2, 273, 275, 5, 46, 24, 2, 274, 272, 3, 2, 2, 2, 275, 278, 3, 2, 2, 2, 276, 274, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 45, 3, 2, 2, 2, 278, 276, 3, 2, 2, 2, 279, 281, 5, 94, 48, 2, 280, 282, 7, 47, 2, 2, 281, 280, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 47, 3, 2, 2, 2, 283, 284, 7, 46, 2, 2, 284, 302, 5, 60, 31, 2, 285, 286, 7, 46, 2, 2, 286, 302, 5, 54, 28, 2, 287, 288, 7, 46, 2, 2, 288, 289, 5, 52, 27, 2, 289, 290, 5, 54, 28, 2, 290, 302, 3, 2, 2, 2, 291, 292, 7, 46, 2, 2, 292, 293, 5, 52, 27, 2, 293, 294, 5, 58, 30, 2, 294, 302, 3, 2, 2, 2, 295, 296, 7, 46, 2, 2, 296, 297, 5, 52, 27, 2, 297, 298, 5, 60, 31, 2, 298, 302, 3, 2, 2, 2, 299, 300, 7, 46, 2, 2, 300, 302, 5, 52, 27, 2, 301, 283, 3, 2, 2, 2, 301, 285, 3, 2, 2, 2, 301, 287, 3, 2, 2, 2, 301, 291, 3, 2, 2, 2, 301, 295, 3, 2, 2, 2, 301, 299, 3, 2, 2, 2, 302, 49, 3, 2, 2, 2, 303, 304, 7, 66, 2, 2, 304, 305, 7, 33, 2, 2, 305, 306, 5, 94, 48, 2, 306, 51, 3, 2, 2, 2, 307, 312, 5, 50, 26, 2, 308, 309, 7, 10, 2, 2, 309, 311, 5, 50, 26, 2, 310, 308, 3, 2, 2, 2, 311, 314, 3, 2, 2, 2, 312, 310, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 53, 3, 2, 2, 2, 314, 312, 3, 2, 2, 2, 315, 316, 7, 58, 2, 2, 316, 321, 5, 56, 29, 2, 317, 318, 7, 10, 2, 2, 318, 320, 5, 56, 29, 2, 319, 317, 3, 2, 2, 2, 320, 323, 3, 2, 2, 2, 321, 319, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 55, 3, 2, 2, 2, 323, 321, 3, 2, 2, 2, 324, 325, 7, 66, 2, 2, 325, 326, 7, 33, 2, 2, 326, 327, 5, 104, 53, 2, 327, 57, 3, 2, 2, 2, 328, 329, 7, 52, 2, 2, 329, 337, 5, 50, 26, 2, 330, 331, 7, 52, 2, 2, 331, 334, 7, 66, 2, 2, 332, 333, 7, 53, 2, 2, 333, 335, 7, 66, 2, 2, 334, 332, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 337, 3, 2, 2, 2, 336, 328, 3, 2, 2, 2, 336, 330, 3, 2, 2, 2, 337, 59, 3, 2, 2, 2, 338, 339, 7, 54, 2, 2, 339, 340, 7, 55, 2, 2, 340, 341, 7, 52, 2, 2, 341, 342, 7, 66, 2, 2, 342, 61, 3, 2, 2, 2, 343, 344, 7, 40, 2, 2, 344, 348, 5, 76, 39, 2, 345, 346, 7, 40, 2, 2, 346, 348, 5, 138, 70, 2, 347, 343, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 348, 63, 3, 2, 2, 2, 349, 350, 7, 39, 2, 2, 350, 351, 7, 59, 2, 2, 351, 352, 5, 68, 35, 2, 352, 353, 7, 62, 2, 2, 353, 355, 5, 70, 36, 2, 354, 356, 5, 62, 32, 2, 355, 354, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, 356, 358, 3, 2, 2, 2, 357, 359, 5, 66, 34, 2, 358, 357, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 65, 3, 2, 2, 2, 360, 364, 5, 90, 46, 2, 361, 364, 5, 138, 70, 2, 362, 364, 5, 136, 69, 2, 363, 360, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 363, 362, 3, 2, 2, 2, 364, 67, 3, 2, 2, 2, 365, 371, 5, 86, 44, 2, 366, 371, 5, 138, 70, 2, 367, 371, 5, 136, 69, 2, 368, 371, 5, 104, 53, 2, 369, 371, 5, 98, 50, 2, 370, 365, 3, 2, 2, 2, 370, 366, 3, 2, 2, 2, 370, 367, 3, 2, 2, 2, 370, 368, 3, 2, 2, 2, 370, 369, 3, 2, 2, 2, 371, 69, 3, 2, 2, 2, 372, 376, 5, 104, 53, 2, 373, 376, 5, 138, 70, 2, 374, 376, 5, 98, 50, 2, 375, 372, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 375, 374, 3, 2, 2, 2, 376, 71, 3, 2, 2, 2, 377, 381, 5, 90, 46, 2, 378, 381, 5, 138, 70, 2, 379, 381, 5, 136, 69, 2, 380, 377, 3, 2, 2, 2, 380, 378, 3, 2, 2, 2, 380, 379, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 386, 7, 32, 2, 2, 383, 387, 5, 90, 46, 2, 384, 387, 5, 138, 70, 2, 385, 387, 5, 136, 69, 2, 386, 383, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 386, 385, 3, 2, 2, 2, 387, 73, 3, 2, 2, 2, 388, 400, 7, 11, 2, 2, 389, 394, 5, 94, 48, 2, 390, 391, 7, 10, 2, 2, 391, 393, 5, 94, 48, 2, 392, 390, 3, 2, 2, 2, 393, 396, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 398, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 397, 399, 7, 10, 2, 2, 398, 397, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 401, 3, 2, 2, 2, 400, 389, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 7, 12, 2, 2, 403, 75, 3, 2, 2, 2, 404, 416, 7, 15, 2, 2, 405, 410, 5, 78, 40, 2, 406, 407, 7, 10, 2, 2, 407, 409, 5, 78, 40, 2, 408, 406, 3, 2, 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 414, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 413, 415, 7, 10, 2, 2, 414, 413, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 417, 3, 2, 2, 2, 416, 405, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 419, 7, 16, 2, 2, 419, 77, 3, 2, 2, 2, 420, 421, 5, 82, 42, 2, 421, 422, 7, 7, 2, 2, 422, 423, 5, 94, 48, 2, 423, 430, 3, 2, 2, 2, 424, 425, 5, 80, 41, 2, 425, 426, 7, 7, 2, 2, 426, 427, 5, 94, 48, 2, 427, 430, 3, 2, 2, 2, 428, 430, 5, 138, 70, 2, 429, 420, 3, 2, 2, 2, 429, 424, 3, 2, 2, 2, 429, 428, 3, 2, 2, 2, 430, 79, 3, 2, 2, 2, 431, 432, 7, 11, 2, 2, 432, 433, 5, 94, 48, 2, 433, 434, 7, 12, 2, 2, 434, 81, 3, 2, 2, 2, 435, 439, 7, 66, 2, 2, 436, 439, 5, 86, 44, 2, 437, 439, 5, 136, 69, 2, 438, 435, 3, 2, 2, 2, 438, 436, 3, 2, 2, 2, 438, 437, 3, 2, 2, 2, 439, 83, 3, 2, 2, 2, 440, 441, 7, 50, 2, 2, 441, 85, 3, 2, 2, 2, 442, 443, 7, 67, 2, 2, 443, 87, 3, 2, 2, 2, 444, 445, 7, 69, 2, 2, 445, 89, 3, 2, 2, 2, 446, 447, 7, 68, 2, 2, 447, 91, 3, 2, 2, 2, 448, 449, 9, 2, 2, 2, 449, 93, 3, 2, 2, 2, 450, 451, 8, 48, 1, 2, 451, 452, 5, 134, 68, 2, 452, 453, 5, 94, 48, 27, 453, 469, 3, 2, 2, 2, 454, 469, 5, 72, 37, 2, 455, 469, 5, 86, 44, 2, 456, 469, 5, 88, 45, 2, 457, 469, 5, 90, 46, 2, 458, 469, 5, 84, 43, 2, 459, 469, 5, 74, 38, 2, 460, 469, 5, 76, 39, 2, 461, 469, 5, 98, 50, 2, 462, 469, 5, 104, 53, 2, 463, 469, 5, 136, 69, 2, 464, 469, 5, 138, 70, 2, 465, 469, 5, 92, 47, 2, 466, 469, 5, 96, 49, 2, 467, 469, 5, 22, 12, 2, 468, 450, 3, 2, 2, 2, 468, 454, 3, 2, 2, 2, 468, 455, 3, 2, 2, 2, 468, 456, 3, 2, 2, 2, 468, 457, 3, 2, 2, 2, 468, 458, 3, 2, 2, 2, 468, 459, 3, 2, 2, 2, 468, 460, 3, 2, 2, 2, 468, 461, 3, 2, 2, 2, 468, 462, 3, 2, 2, 2, 468, 463, 3, 2, 2, 2, 468, 464, 3, 2, 2, 2, 468, 465, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 468, 467, 3, 2, 2, 2, 469, 519, 3, 2, 2, 2, 470, 471, 12, 26, 2, 2, 471, 472, 5, 130, 66, 2, 472, 473, 5, 94, 48, 27, 473, 518, 3, 2, 2, 2, 474, 475, 12, 25, 2, 2, 475, 476, 5, 132, 67, 2, 476, 477, 5, 94, 48, 26, 477, 518, 3, 2, 2, 2, 478, 479, 12, 24, 2, 2, 479, 482, 5, 116, 59, 2, 480, 483, 5, 118, 60, 2, 481, 483, 5, 122, 62, 2, 482, 480, 3, 2, 2, 2, 482, 481, 3, 2, 2, 2, 483, 484, 3, 2, 2, 2, 484, 485, 5, 94, 48, 25, 485, 518, 3, 2, 2, 2, 486, 487, 12, 23, 2, 2, 487, 488, 5, 118, 60, 2, 488, 489, 5, 94, 48, 24, 489, 518, 3, 2, 2, 2, 490, 491, 12, 22, 2, 2, 491, 492, 5, 120, 61, 2, 492, 493, 5, 94, 48, 23, 493, 518, 3, 2, 2, 2, 494, 495, 12, 21, 2, 2, 495, 496, 5, 122, 62, 2, 496, 497, 5, 94, 48, 22, 497, 518, 3, 2, 2, 2, 498, 499, 12, 20, 2, 2, 499, 500, 5, 124, 63, 2, 500, 501, 5, 94, 48, 21, 501, 518, 3, 2, 2, 2, 502, 503, 12, 19, 2, 2, 503, 504, 5, 126, 64, 2, 504, 505, 5, 94, 48, 20, 505, 518, 3, 2, 2, 2, 506, 507, 12, 18, 2, 2, 507, 508, 5, 128, 65, 2, 508, 509, 5, 94, 48, 19, 509, 518, 3, 2, 2, 2, 510, 511, 12, 17, 2, 2, 511, 513, 7, 34, 2, 2, 512, 514, 5, 94, 48, 2, 513, 512, 3, 2, 2, 2, 513, 514, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 516, 7, 7, 2, 2, 516, 518, 5, 94, 48, 18, 517, 470, 3, 2, 2, 2, 517, 474, 3, 2, 2, 2, 517, 478, 3, 2, 2, 2, 517, 486, 3, 2, 2, 2, 517, 490, 3, 2, 2, 2, 517, 494, 3, 2, 2, 2, 517, 498, 3, 2, 2, 2, 517, 502, 3, 2, 2, 2, 517, 506, 3, 2, 2, 2, 517, 510, 3, 2, 2, 2, 518, 521, 3, 2, 2, 2, 519, 517, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 95, 3, 2, 2, 2, 521, 519, 3, 2, 2, 2, 522, 523, 7, 13, 2, 2, 523, 524, 5, 94, 48, 2, 524, 526, 7, 14, 2, 2, 525, 527, 5, 108, 55, 2, 526, 525, 3, 2, 2, 2, 526, 527, 3, 2, 2, 2, 527, 97, 3, 2, 2, 2, 528, 530, 5, 100, 51, 2, 529, 531, 5, 106, 54, 2, 530, 529, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 530, 3, 2, 2, 2, 532, 533, 3, 2, 2, 2, 533, 99, 3, 2, 2, 2, 534, 540, 5, 138, 70, 2, 535, 540, 5, 136, 69, 2, 536, 540, 5, 74, 38, 2, 537, 540, 5, 76, 39, 2, 538, 540, 5, 102, 52, 2, 539, 534, 3, 2, 2, 2, 539, 535, 3, 2, 2, 2, 539, 536, 3, 2, 2, 2, 539, 537, 3, 2, 2, 2, 539, 538, 3, 2, 2, 2, 540, 101, 3, 2, 2, 2, 541, 542, 5, 112, 57, 2, 542, 543, 5, 110, 56, 2, 543, 544, 5, 114, 58, 2, 544, 103, 3, 2, 2, 2, 545, 547, 5, 102, 52, 2, 546, 548, 5, 108, 55, 2, 547, 546, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 105, 3, 2, 2, 2, 549, 551, 7, 34, 2, 2, 550, 549, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 552, 3, 2, 2, 2, 552, 553, 7, 9, 2, 2, 553, 560, 5, 82, 42, 2, 554, 555, 7, 34, 2, 2, 555, 557, 7, 9, 2, 2, 556, 554, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 560, 5, 80, 41, 2, 559, 550, 3, 2, 2, 2, 559, 556, 3, 2, 2, 2, 560, 107, 3, 2, 2, 2, 561, 562, 7, 34, 2, 2, 562, 109, 3, 2, 2, 2, 563, 564, 9, 3, 2, 2, 564, 111, 3, 2, 2, 2, 565, 567, 7, 70, 2, 2, 566, 565, 3, 2, 2, 2, 567, 570, 3, 2, 2, 2, 568, 566, 3, 2, 2, 2, 568, 569, 3, 2, 2, 2, 569, 113, 3, 2, 2, 2, 570, 568, 3, 2, 2, 2, 571, 580, 7, 13, 2, 2, 572, 577, 5, 94, 48, 2, 573, 574, 7, 10, 2, 2, 574, 576, 5, 94, 48, 2, 575, 573, 3, 2, 2, 2, 576, 579, 3, 2, 2, 2, 577, 575, 3, 2, 2, 2, 577, 578, 3, 2, 2, 2, 578, 581, 3, 2, 2, 2, 579, 577, 3, 2, 2, 2, 580, 572, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 7, 14, 2, 2, 583, 115, 3, 2, 2, 2, 584, 585, 9, 4, 2, 2, 585, 117, 3, 2, 2, 2, 586, 590, 7, 62, 2, 2, 587, 588, 7, 61, 2, 2, 588, 590, 7, 62, 2, 2, 589, 586, 3, 2, 2, 2, 589, 587, 3, 2, 2, 2, 590, 119, 3, 2, 2, 2, 591, 595, 7, 60, 2, 2, 592, 593, 7, 61, 2, 2, 593, 595, 7, 60, 2, 2, 594, 591, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 595, 121, 3, 2, 2, 2, 596, 597, 9, 5, 2, 2, 597, 123, 3, 2, 2, 2, 598, 599, 9, 6, 2, 2, 599, 125, 3, 2, 2, 2, 600, 601, 7, 30, 2, 2, 601, 127, 3, 2, 2, 2, 602, 603, 7, 31, 2, 2, 603, 129, 3, 2, 2, 2, 604, 605, 9, 7, 2, 2, 605, 131, 3, 2, 2, 2, 606, 607, 9, 8, 2, 2, 607, 133, 3, 2, 2, 2, 608, 609, 9, 9, 2, 2, 609, 135, 3, 2, 2, 2, 610, 611, 7, 65, 2, 2, 611, 612, 7, 66, 2, 2, 612, 137, 3, 2, 2, 2, 613, 614, 7, 66, 2, 2, 614, 139, 3, 2, 2, 2, 61, 143, 162, 170, 174, 183, 191, 195, 201, 208, 216, 223, 228, 237, 243, 247, 251, 255, 264, 268, 276, 281, 301, 312, 321, 334, 336, 347, 355, 358, 363, 370, 375, 380, 386, 394, 398, 400, 410, 414, 416, 429, 438, 468, 482, 513, 517, 519, 526, 532, 539, 547, 550, 556, 559, 568, 577, 580, 589, 594] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 72, 621, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 3, 2, 7, 2, 142, 10, 2, 12, 2, 14, 2, 145, 11, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 7, 7, 161, 10, 7, 12, 7, 14, 7, 164, 11, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 5, 8, 171, 10, 8, 3, 9, 3, 9, 5, 9, 175, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 185, 10, 10, 3, 11, 3, 11, 5, 11, 189, 10, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 197, 10, 12, 3, 13, 3, 13, 5, 13, 201, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 207, 10, 14, 3, 14, 3, 14, 3, 14, 7, 14, 212, 10, 14, 12, 14, 14, 14, 215, 11, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 222, 10, 14, 3, 14, 3, 14, 3, 14, 7, 14, 227, 10, 14, 12, 14, 14, 14, 230, 11, 14, 3, 14, 3, 14, 5, 14, 234, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 243, 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 249, 10, 16, 3, 17, 3, 17, 5, 17, 253, 10, 17, 3, 18, 3, 18, 5, 18, 257, 10, 18, 3, 19, 3, 19, 5, 19, 261, 10, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 270, 10, 21, 3, 22, 3, 22, 5, 22, 274, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 280, 10, 23, 12, 23, 14, 23, 283, 11, 23, 3, 24, 3, 24, 5, 24, 287, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 307, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 7, 27, 316, 10, 27, 12, 27, 14, 27, 319, 11, 27, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 325, 10, 28, 12, 28, 14, 28, 328, 11, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 340, 10, 30, 5, 30, 342, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 353, 10, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 361, 10, 33, 3, 33, 5, 33, 364, 10, 33, 3, 34, 3, 34, 3, 34, 5, 34, 369, 10, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 5, 35, 376, 10, 35, 3, 36, 3, 36, 3, 36, 5, 36, 381, 10, 36, 3, 37, 3, 37, 3, 37, 5, 37, 386, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 392, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 7, 38, 398, 10, 38, 12, 38, 14, 38, 401, 11, 38, 3, 38, 5, 38, 404, 10, 38, 5, 38, 406, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 7, 39, 414, 10, 39, 12, 39, 14, 39, 417, 11, 39, 3, 39, 5, 39, 420, 10, 39, 5, 39, 422, 10, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 435, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 5, 42, 444, 10, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 474, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 488, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 519, 10, 48, 3, 48, 3, 48, 7, 48, 523, 10, 48, 12, 48, 14, 48, 526, 11, 48, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 532, 10, 49, 3, 50, 3, 50, 6, 50, 536, 10, 50, 13, 50, 14, 50, 537, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 545, 10, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 5, 53, 553, 10, 53, 3, 54, 5, 54, 556, 10, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 562, 10, 54, 3, 54, 5, 54, 565, 10, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 7, 57, 572, 10, 57, 12, 57, 14, 57, 575, 11, 57, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 581, 10, 58, 12, 58, 14, 58, 584, 11, 58, 5, 58, 586, 10, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 595, 10, 60, 3, 61, 3, 61, 3, 61, 5, 61, 600, 10, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 2, 3, 94, 71, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 2, 10, 3, 2, 48, 49, 6, 2, 30, 31, 37, 39, 41, 62, 66, 66, 4, 2, 48, 48, 56, 57, 3, 2, 17, 22, 3, 2, 35, 36, 3, 2, 23, 25, 3, 2, 26, 27, 4, 2, 26, 27, 61, 61, 2, 656, 2, 143, 3, 2, 2, 2, 4, 149, 3, 2, 2, 2, 6, 151, 3, 2, 2, 2, 8, 153, 3, 2, 2, 2, 10, 156, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 170, 3, 2, 2, 2, 16, 174, 3, 2, 2, 2, 18, 184, 3, 2, 2, 2, 20, 186, 3, 2, 2, 2, 22, 192, 3, 2, 2, 2, 24, 200, 3, 2, 2, 2, 26, 233, 3, 2, 2, 2, 28, 242, 3, 2, 2, 2, 30, 248, 3, 2, 2, 2, 32, 252, 3, 2, 2, 2, 34, 256, 3, 2, 2, 2, 36, 260, 3, 2, 2, 2, 38, 262, 3, 2, 2, 2, 40, 265, 3, 2, 2, 2, 42, 273, 3, 2, 2, 2, 44, 275, 3, 2, 2, 2, 46, 284, 3, 2, 2, 2, 48, 306, 3, 2, 2, 2, 50, 308, 3, 2, 2, 2, 52, 312, 3, 2, 2, 2, 54, 320, 3, 2, 2, 2, 56, 329, 3, 2, 2, 2, 58, 341, 3, 2, 2, 2, 60, 343, 3, 2, 2, 2, 62, 352, 3, 2, 2, 2, 64, 354, 3, 2, 2, 2, 66, 368, 3, 2, 2, 2, 68, 375, 3, 2, 2, 2, 70, 380, 3, 2, 2, 2, 72, 385, 3, 2, 2, 2, 74, 393, 3, 2, 2, 2, 76, 409, 3, 2, 2, 2, 78, 434, 3, 2, 2, 2, 80, 436, 3, 2, 2, 2, 82, 443, 3, 2, 2, 2, 84, 445, 3, 2, 2, 2, 86, 447, 3, 2, 2, 2, 88, 449, 3, 2, 2, 2, 90, 451, 3, 2, 2, 2, 92, 453, 3, 2, 2, 2, 94, 473, 3, 2, 2, 2, 96, 527, 3, 2, 2, 2, 98, 533, 3, 2, 2, 2, 100, 544, 3, 2, 2, 2, 102, 546, 3, 2, 2, 2, 104, 550, 3, 2, 2, 2, 106, 564, 3, 2, 2, 2, 108, 566, 3, 2, 2, 2, 110, 568, 3, 2, 2, 2, 112, 573, 3, 2, 2, 2, 114, 576, 3, 2, 2, 2, 116, 589, 3, 2, 2, 2, 118, 594, 3, 2, 2, 2, 120, 599, 3, 2, 2, 2, 122, 601, 3, 2, 2, 2, 124, 603, 3, 2, 2, 2, 126, 605, 3, 2, 2, 2, 128, 607, 3, 2, 2, 2, 130, 609, 3, 2, 2, 2, 132, 611, 3, 2, 2, 2, 134, 613, 3, 2, 2, 2, 136, 615, 3, 2, 2, 2, 138, 618, 3, 2, 2, 2, 140, 142, 5, 4, 3, 2, 141, 140, 3, 2, 2, 2, 142, 145, 3, 2, 2, 2, 143, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 146, 3, 2, 2, 2, 145, 143, 3, 2, 2, 2, 146, 147, 5, 12, 7, 2, 147, 148, 7, 2, 2, 3, 148, 3, 3, 2, 2, 2, 149, 150, 5, 6, 4, 2, 150, 5, 3, 2, 2, 2, 151, 152, 5, 8, 5, 2, 152, 7, 3, 2, 2, 2, 153, 154, 7, 51, 2, 2, 154, 155, 5, 10, 6, 2, 155, 9, 3, 2, 2, 2, 156, 157, 5, 112, 57, 2, 157, 158, 7, 66, 2, 2, 158, 11, 3, 2, 2, 2, 159, 161, 5, 14, 8, 2, 160, 159, 3, 2, 2, 2, 161, 164, 3, 2, 2, 2, 162, 160, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, 165, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 165, 166, 5, 16, 9, 2, 166, 13, 3, 2, 2, 2, 167, 171, 5, 18, 10, 2, 168, 171, 5, 104, 53, 2, 169, 171, 5, 64, 33, 2, 170, 167, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 169, 3, 2, 2, 2, 171, 15, 3, 2, 2, 2, 172, 175, 5, 20, 11, 2, 173, 175, 5, 26, 14, 2, 174, 172, 3, 2, 2, 2, 174, 173, 3, 2, 2, 2, 175, 17, 3, 2, 2, 2, 176, 177, 7, 45, 2, 2, 177, 178, 7, 66, 2, 2, 178, 179, 7, 33, 2, 2, 179, 185, 5, 94, 48, 2, 180, 181, 7, 45, 2, 2, 181, 182, 7, 67, 2, 2, 182, 183, 7, 33, 2, 2, 183, 185, 5, 94, 48, 2, 184, 176, 3, 2, 2, 2, 184, 180, 3, 2, 2, 2, 185, 19, 3, 2, 2, 2, 186, 188, 7, 38, 2, 2, 187, 189, 7, 41, 2, 2, 188, 187, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 191, 5, 94, 48, 2, 191, 21, 3, 2, 2, 2, 192, 193, 7, 13, 2, 2, 193, 194, 5, 24, 13, 2, 194, 196, 7, 14, 2, 2, 195, 197, 5, 108, 55, 2, 196, 195, 3, 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, 23, 3, 2, 2, 2, 198, 201, 5, 26, 14, 2, 199, 201, 5, 64, 33, 2, 200, 198, 3, 2, 2, 2, 200, 199, 3, 2, 2, 2, 201, 25, 3, 2, 2, 2, 202, 203, 7, 37, 2, 2, 203, 206, 7, 66, 2, 2, 204, 205, 7, 10, 2, 2, 205, 207, 7, 66, 2, 2, 206, 204, 3, 2, 2, 2, 206, 207, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 209, 7, 62, 2, 2, 209, 213, 5, 28, 15, 2, 210, 212, 5, 34, 18, 2, 211, 210, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 216, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 217, 5, 36, 19, 2, 217, 234, 3, 2, 2, 2, 218, 219, 7, 37, 2, 2, 219, 221, 7, 66, 2, 2, 220, 222, 7, 63, 2, 2, 221, 220, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 224, 7, 64, 2, 2, 224, 228, 5, 94, 48, 2, 225, 227, 5, 34, 18, 2, 226, 225, 3, 2, 2, 2, 227, 230, 3, 2, 2, 2, 228, 226, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 231, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 231, 232, 5, 36, 19, 2, 232, 234, 3, 2, 2, 2, 233, 202, 3, 2, 2, 2, 233, 218, 3, 2, 2, 2, 234, 27, 3, 2, 2, 2, 235, 243, 5, 104, 53, 2, 236, 243, 5, 74, 38, 2, 237, 243, 5, 76, 39, 2, 238, 243, 5, 138, 70, 2, 239, 243, 5, 98, 50, 2, 240, 243, 5, 72, 37, 2, 241, 243, 5, 136, 69, 2, 242, 235, 3, 2, 2, 2, 242, 236, 3, 2, 2, 2, 242, 237, 3, 2, 2, 2, 242, 238, 3, 2, 2, 2, 242, 239, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 242, 241, 3, 2, 2, 2, 243, 29, 3, 2, 2, 2, 244, 249, 5, 40, 21, 2, 245, 249, 5, 44, 23, 2, 246, 249, 5, 38, 20, 2, 247, 249, 5, 48, 25, 2, 248, 244, 3, 2, 2, 2, 248, 245, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 247, 3, 2, 2, 2, 249, 31, 3, 2, 2, 2, 250, 253, 5, 18, 10, 2, 251, 253, 5, 104, 53, 2, 252, 250, 3, 2, 2, 2, 252, 251, 3, 2, 2, 2, 253, 33, 3, 2, 2, 2, 254, 257, 5, 32, 17, 2, 255, 257, 5, 30, 16, 2, 256, 254, 3, 2, 2, 2, 256, 255, 3, 2, 2, 2, 257, 35, 3, 2, 2, 2, 258, 261, 5, 20, 11, 2, 259, 261, 5, 26, 14, 2, 260, 258, 3, 2, 2, 2, 260, 259, 3, 2, 2, 2, 261, 37, 3, 2, 2, 2, 262, 263, 7, 42, 2, 2, 263, 264, 5, 94, 48, 2, 264, 39, 3, 2, 2, 2, 265, 266, 7, 44, 2, 2, 266, 269, 5, 42, 22, 2, 267, 268, 7, 10, 2, 2, 268, 270, 5, 42, 22, 2, 269, 267, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 41, 3, 2, 2, 2, 271, 274, 7, 69, 2, 2, 272, 274, 5, 136, 69, 2, 273, 271, 3, 2, 2, 2, 273, 272, 3, 2, 2, 2, 274, 43, 3, 2, 2, 2, 275, 276, 7, 43, 2, 2, 276, 281, 5, 46, 24, 2, 277, 278, 7, 10, 2, 2, 278, 280, 5, 46, 24, 2, 279, 277, 3, 2, 2, 2, 280, 283, 3, 2, 2, 2, 281, 279, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 45, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 284, 286, 5, 94, 48, 2, 285, 287, 7, 47, 2, 2, 286, 285, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 47, 3, 2, 2, 2, 288, 289, 7, 46, 2, 2, 289, 307, 5, 60, 31, 2, 290, 291, 7, 46, 2, 2, 291, 307, 5, 54, 28, 2, 292, 293, 7, 46, 2, 2, 293, 294, 5, 52, 27, 2, 294, 295, 5, 54, 28, 2, 295, 307, 3, 2, 2, 2, 296, 297, 7, 46, 2, 2, 297, 298, 5, 52, 27, 2, 298, 299, 5, 58, 30, 2, 299, 307, 3, 2, 2, 2, 300, 301, 7, 46, 2, 2, 301, 302, 5, 52, 27, 2, 302, 303, 5, 60, 31, 2, 303, 307, 3, 2, 2, 2, 304, 305, 7, 46, 2, 2, 305, 307, 5, 52, 27, 2, 306, 288, 3, 2, 2, 2, 306, 290, 3, 2, 2, 2, 306, 292, 3, 2, 2, 2, 306, 296, 3, 2, 2, 2, 306, 300, 3, 2, 2, 2, 306, 304, 3, 2, 2, 2, 307, 49, 3, 2, 2, 2, 308, 309, 7, 66, 2, 2, 309, 310, 7, 33, 2, 2, 310, 311, 5, 94, 48, 2, 311, 51, 3, 2, 2, 2, 312, 317, 5, 50, 26, 2, 313, 314, 7, 10, 2, 2, 314, 316, 5, 50, 26, 2, 315, 313, 3, 2, 2, 2, 316, 319, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 53, 3, 2, 2, 2, 319, 317, 3, 2, 2, 2, 320, 321, 7, 58, 2, 2, 321, 326, 5, 56, 29, 2, 322, 323, 7, 10, 2, 2, 323, 325, 5, 56, 29, 2, 324, 322, 3, 2, 2, 2, 325, 328, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 55, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 329, 330, 7, 66, 2, 2, 330, 331, 7, 33, 2, 2, 331, 332, 5, 104, 53, 2, 332, 57, 3, 2, 2, 2, 333, 334, 7, 52, 2, 2, 334, 342, 5, 50, 26, 2, 335, 336, 7, 52, 2, 2, 336, 339, 7, 66, 2, 2, 337, 338, 7, 53, 2, 2, 338, 340, 7, 66, 2, 2, 339, 337, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 342, 3, 2, 2, 2, 341, 333, 3, 2, 2, 2, 341, 335, 3, 2, 2, 2, 342, 59, 3, 2, 2, 2, 343, 344, 7, 54, 2, 2, 344, 345, 7, 55, 2, 2, 345, 346, 7, 52, 2, 2, 346, 347, 7, 66, 2, 2, 347, 61, 3, 2, 2, 2, 348, 349, 7, 40, 2, 2, 349, 353, 5, 76, 39, 2, 350, 351, 7, 40, 2, 2, 351, 353, 5, 138, 70, 2, 352, 348, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 353, 63, 3, 2, 2, 2, 354, 355, 7, 39, 2, 2, 355, 356, 7, 59, 2, 2, 356, 357, 5, 68, 35, 2, 357, 358, 7, 62, 2, 2, 358, 360, 5, 70, 36, 2, 359, 361, 5, 62, 32, 2, 360, 359, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 363, 3, 2, 2, 2, 362, 364, 5, 66, 34, 2, 363, 362, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 65, 3, 2, 2, 2, 365, 369, 5, 90, 46, 2, 366, 369, 5, 138, 70, 2, 367, 369, 5, 136, 69, 2, 368, 365, 3, 2, 2, 2, 368, 366, 3, 2, 2, 2, 368, 367, 3, 2, 2, 2, 369, 67, 3, 2, 2, 2, 370, 376, 5, 86, 44, 2, 371, 376, 5, 138, 70, 2, 372, 376, 5, 136, 69, 2, 373, 376, 5, 104, 53, 2, 374, 376, 5, 98, 50, 2, 375, 370, 3, 2, 2, 2, 375, 371, 3, 2, 2, 2, 375, 372, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 375, 374, 3, 2, 2, 2, 376, 69, 3, 2, 2, 2, 377, 381, 5, 104, 53, 2, 378, 381, 5, 138, 70, 2, 379, 381, 5, 98, 50, 2, 380, 377, 3, 2, 2, 2, 380, 378, 3, 2, 2, 2, 380, 379, 3, 2, 2, 2, 381, 71, 3, 2, 2, 2, 382, 386, 5, 90, 46, 2, 383, 386, 5, 138, 70, 2, 384, 386, 5, 136, 69, 2, 385, 382, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 385, 384, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 391, 7, 32, 2, 2, 388, 392, 5, 90, 46, 2, 389, 392, 5, 138, 70, 2, 390, 392, 5, 136, 69, 2, 391, 388, 3, 2, 2, 2, 391, 389, 3, 2, 2, 2, 391, 390, 3, 2, 2, 2, 392, 73, 3, 2, 2, 2, 393, 405, 7, 11, 2, 2, 394, 399, 5, 94, 48, 2, 395, 396, 7, 10, 2, 2, 396, 398, 5, 94, 48, 2, 397, 395, 3, 2, 2, 2, 398, 401, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 403, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 402, 404, 7, 10, 2, 2, 403, 402, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 406, 3, 2, 2, 2, 405, 394, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 7, 12, 2, 2, 408, 75, 3, 2, 2, 2, 409, 421, 7, 15, 2, 2, 410, 415, 5, 78, 40, 2, 411, 412, 7, 10, 2, 2, 412, 414, 5, 78, 40, 2, 413, 411, 3, 2, 2, 2, 414, 417, 3, 2, 2, 2, 415, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 419, 3, 2, 2, 2, 417, 415, 3, 2, 2, 2, 418, 420, 7, 10, 2, 2, 419, 418, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 422, 3, 2, 2, 2, 421, 410, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 424, 7, 16, 2, 2, 424, 77, 3, 2, 2, 2, 425, 426, 5, 82, 42, 2, 426, 427, 7, 7, 2, 2, 427, 428, 5, 94, 48, 2, 428, 435, 3, 2, 2, 2, 429, 430, 5, 80, 41, 2, 430, 431, 7, 7, 2, 2, 431, 432, 5, 94, 48, 2, 432, 435, 3, 2, 2, 2, 433, 435, 5, 138, 70, 2, 434, 425, 3, 2, 2, 2, 434, 429, 3, 2, 2, 2, 434, 433, 3, 2, 2, 2, 435, 79, 3, 2, 2, 2, 436, 437, 7, 11, 2, 2, 437, 438, 5, 94, 48, 2, 438, 439, 7, 12, 2, 2, 439, 81, 3, 2, 2, 2, 440, 444, 7, 66, 2, 2, 441, 444, 5, 86, 44, 2, 442, 444, 5, 136, 69, 2, 443, 440, 3, 2, 2, 2, 443, 441, 3, 2, 2, 2, 443, 442, 3, 2, 2, 2, 444, 83, 3, 2, 2, 2, 445, 446, 7, 50, 2, 2, 446, 85, 3, 2, 2, 2, 447, 448, 7, 68, 2, 2, 448, 87, 3, 2, 2, 2, 449, 450, 7, 70, 2, 2, 450, 89, 3, 2, 2, 2, 451, 452, 7, 69, 2, 2, 452, 91, 3, 2, 2, 2, 453, 454, 9, 2, 2, 2, 454, 93, 3, 2, 2, 2, 455, 456, 8, 48, 1, 2, 456, 457, 5, 134, 68, 2, 457, 458, 5, 94, 48, 27, 458, 474, 3, 2, 2, 2, 459, 474, 5, 72, 37, 2, 460, 474, 5, 86, 44, 2, 461, 474, 5, 88, 45, 2, 462, 474, 5, 90, 46, 2, 463, 474, 5, 84, 43, 2, 464, 474, 5, 74, 38, 2, 465, 474, 5, 76, 39, 2, 466, 474, 5, 98, 50, 2, 467, 474, 5, 104, 53, 2, 468, 474, 5, 136, 69, 2, 469, 474, 5, 138, 70, 2, 470, 474, 5, 92, 47, 2, 471, 474, 5, 96, 49, 2, 472, 474, 5, 22, 12, 2, 473, 455, 3, 2, 2, 2, 473, 459, 3, 2, 2, 2, 473, 460, 3, 2, 2, 2, 473, 461, 3, 2, 2, 2, 473, 462, 3, 2, 2, 2, 473, 463, 3, 2, 2, 2, 473, 464, 3, 2, 2, 2, 473, 465, 3, 2, 2, 2, 473, 466, 3, 2, 2, 2, 473, 467, 3, 2, 2, 2, 473, 468, 3, 2, 2, 2, 473, 469, 3, 2, 2, 2, 473, 470, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 473, 472, 3, 2, 2, 2, 474, 524, 3, 2, 2, 2, 475, 476, 12, 26, 2, 2, 476, 477, 5, 130, 66, 2, 477, 478, 5, 94, 48, 27, 478, 523, 3, 2, 2, 2, 479, 480, 12, 25, 2, 2, 480, 481, 5, 132, 67, 2, 481, 482, 5, 94, 48, 26, 482, 523, 3, 2, 2, 2, 483, 484, 12, 24, 2, 2, 484, 487, 5, 116, 59, 2, 485, 488, 5, 118, 60, 2, 486, 488, 5, 122, 62, 2, 487, 485, 3, 2, 2, 2, 487, 486, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 5, 94, 48, 25, 490, 523, 3, 2, 2, 2, 491, 492, 12, 23, 2, 2, 492, 493, 5, 118, 60, 2, 493, 494, 5, 94, 48, 24, 494, 523, 3, 2, 2, 2, 495, 496, 12, 22, 2, 2, 496, 497, 5, 120, 61, 2, 497, 498, 5, 94, 48, 23, 498, 523, 3, 2, 2, 2, 499, 500, 12, 21, 2, 2, 500, 501, 5, 122, 62, 2, 501, 502, 5, 94, 48, 22, 502, 523, 3, 2, 2, 2, 503, 504, 12, 20, 2, 2, 504, 505, 5, 124, 63, 2, 505, 506, 5, 94, 48, 21, 506, 523, 3, 2, 2, 2, 507, 508, 12, 19, 2, 2, 508, 509, 5, 126, 64, 2, 509, 510, 5, 94, 48, 20, 510, 523, 3, 2, 2, 2, 511, 512, 12, 18, 2, 2, 512, 513, 5, 128, 65, 2, 513, 514, 5, 94, 48, 19, 514, 523, 3, 2, 2, 2, 515, 516, 12, 17, 2, 2, 516, 518, 7, 34, 2, 2, 517, 519, 5, 94, 48, 2, 518, 517, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 521, 7, 7, 2, 2, 521, 523, 5, 94, 48, 18, 522, 475, 3, 2, 2, 2, 522, 479, 3, 2, 2, 2, 522, 483, 3, 2, 2, 2, 522, 491, 3, 2, 2, 2, 522, 495, 3, 2, 2, 2, 522, 499, 3, 2, 2, 2, 522, 503, 3, 2, 2, 2, 522, 507, 3, 2, 2, 2, 522, 511, 3, 2, 2, 2, 522, 515, 3, 2, 2, 2, 523, 526, 3, 2, 2, 2, 524, 522, 3, 2, 2, 2, 524, 525, 3, 2, 2, 2, 525, 95, 3, 2, 2, 2, 526, 524, 3, 2, 2, 2, 527, 528, 7, 13, 2, 2, 528, 529, 5, 94, 48, 2, 529, 531, 7, 14, 2, 2, 530, 532, 5, 108, 55, 2, 531, 530, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 97, 3, 2, 2, 2, 533, 535, 5, 100, 51, 2, 534, 536, 5, 106, 54, 2, 535, 534, 3, 2, 2, 2, 536, 537, 3, 2, 2, 2, 537, 535, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 99, 3, 2, 2, 2, 539, 545, 5, 138, 70, 2, 540, 545, 5, 136, 69, 2, 541, 545, 5, 74, 38, 2, 542, 545, 5, 76, 39, 2, 543, 545, 5, 102, 52, 2, 544, 539, 3, 2, 2, 2, 544, 540, 3, 2, 2, 2, 544, 541, 3, 2, 2, 2, 544, 542, 3, 2, 2, 2, 544, 543, 3, 2, 2, 2, 545, 101, 3, 2, 2, 2, 546, 547, 5, 112, 57, 2, 547, 548, 5, 110, 56, 2, 548, 549, 5, 114, 58, 2, 549, 103, 3, 2, 2, 2, 550, 552, 5, 102, 52, 2, 551, 553, 5, 108, 55, 2, 552, 551, 3, 2, 2, 2, 552, 553, 3, 2, 2, 2, 553, 105, 3, 2, 2, 2, 554, 556, 7, 34, 2, 2, 555, 554, 3, 2, 2, 2, 555, 556, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 7, 9, 2, 2, 558, 565, 5, 82, 42, 2, 559, 560, 7, 34, 2, 2, 560, 562, 7, 9, 2, 2, 561, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 563, 3, 2, 2, 2, 563, 565, 5, 80, 41, 2, 564, 555, 3, 2, 2, 2, 564, 561, 3, 2, 2, 2, 565, 107, 3, 2, 2, 2, 566, 567, 7, 34, 2, 2, 567, 109, 3, 2, 2, 2, 568, 569, 9, 3, 2, 2, 569, 111, 3, 2, 2, 2, 570, 572, 7, 71, 2, 2, 571, 570, 3, 2, 2, 2, 572, 575, 3, 2, 2, 2, 573, 571, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, 113, 3, 2, 2, 2, 575, 573, 3, 2, 2, 2, 576, 585, 7, 13, 2, 2, 577, 582, 5, 94, 48, 2, 578, 579, 7, 10, 2, 2, 579, 581, 5, 94, 48, 2, 580, 578, 3, 2, 2, 2, 581, 584, 3, 2, 2, 2, 582, 580, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 586, 3, 2, 2, 2, 584, 582, 3, 2, 2, 2, 585, 577, 3, 2, 2, 2, 585, 586, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 588, 7, 14, 2, 2, 588, 115, 3, 2, 2, 2, 589, 590, 9, 4, 2, 2, 590, 117, 3, 2, 2, 2, 591, 595, 7, 62, 2, 2, 592, 593, 7, 61, 2, 2, 593, 595, 7, 62, 2, 2, 594, 591, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 595, 119, 3, 2, 2, 2, 596, 600, 7, 60, 2, 2, 597, 598, 7, 61, 2, 2, 598, 600, 7, 60, 2, 2, 599, 596, 3, 2, 2, 2, 599, 597, 3, 2, 2, 2, 600, 121, 3, 2, 2, 2, 601, 602, 9, 5, 2, 2, 602, 123, 3, 2, 2, 2, 603, 604, 9, 6, 2, 2, 604, 125, 3, 2, 2, 2, 605, 606, 7, 30, 2, 2, 606, 127, 3, 2, 2, 2, 607, 608, 7, 31, 2, 2, 608, 129, 3, 2, 2, 2, 609, 610, 9, 7, 2, 2, 610, 131, 3, 2, 2, 2, 611, 612, 9, 8, 2, 2, 612, 133, 3, 2, 2, 2, 613, 614, 9, 9, 2, 2, 614, 135, 3, 2, 2, 2, 615, 616, 7, 65, 2, 2, 616, 617, 7, 66, 2, 2, 617, 137, 3, 2, 2, 2, 618, 619, 7, 66, 2, 2, 619, 139, 3, 2, 2, 2, 62, 143, 162, 170, 174, 184, 188, 196, 200, 206, 213, 221, 228, 233, 242, 248, 252, 256, 260, 269, 273, 281, 286, 306, 317, 326, 339, 341, 352, 360, 363, 368, 375, 380, 385, 391, 399, 403, 405, 415, 419, 421, 434, 443, 473, 487, 518, 522, 524, 531, 537, 544, 552, 555, 561, 564, 573, 582, 585, 594, 599] \ No newline at end of file diff --git a/pkg/parser/fql/FqlParser.tokens b/pkg/parser/fql/FqlParser.tokens index 37b913e6..d5663a12 100644 --- a/pkg/parser/fql/FqlParser.tokens +++ b/pkg/parser/fql/FqlParser.tokens @@ -62,11 +62,12 @@ Do=61 While=62 Param=63 Identifier=64 -StringLiteral=65 -IntegerLiteral=66 -FloatLiteral=67 -NamespaceSegment=68 -UnknownIdentifier=69 +IgnoreIdentifier=65 +StringLiteral=66 +IntegerLiteral=67 +FloatLiteral=68 +NamespaceSegment=69 +UnknownIdentifier=70 ':'=5 ';'=6 '.'=7 diff --git a/pkg/parser/fql/fql_lexer.go b/pkg/parser/fql/fql_lexer.go index cb19a18e..b4f0be72 100644 --- a/pkg/parser/fql/fql_lexer.go +++ b/pkg/parser/fql/fql_lexer.go @@ -14,7 +14,7 @@ var _ = fmt.Printf var _ = unicode.IsLetter var serializedLexerAtn = []uint16{ - 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 71, 595, + 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 72, 603, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, @@ -30,255 +30,258 @@ var serializedLexerAtn = []uint16{ 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, - 81, 9, 81, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 168, 10, 2, 12, 2, 14, 2, 171, - 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 182, - 10, 3, 12, 3, 14, 3, 185, 11, 3, 3, 3, 3, 3, 3, 4, 6, 4, 190, 10, 4, 13, - 4, 14, 4, 191, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, - 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, - 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, - 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, - 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, - 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, - 29, 5, 29, 257, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 263, 10, 30, - 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, - 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, - 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, - 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, - 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, - 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, - 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, - 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, - 3, 46, 3, 46, 5, 46, 351, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, - 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, + 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 172, + 10, 2, 12, 2, 14, 2, 175, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, + 3, 3, 3, 3, 3, 7, 3, 186, 10, 3, 12, 3, 14, 3, 189, 11, 3, 3, 3, 3, 3, + 3, 4, 6, 4, 194, 10, 4, 13, 4, 14, 4, 195, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, + 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, + 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, + 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, + 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, + 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, + 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 261, 10, 29, 3, 30, 3, 30, 3, 30, + 3, 30, 5, 30, 267, 10, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, + 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, + 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, + 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, + 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, + 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, + 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, + 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, + 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 355, 10, 46, 3, 47, 3, + 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, - 49, 3, 49, 5, 49, 381, 10, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, - 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, - 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, - 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, - 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, - 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 5, - 60, 441, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, - 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 6, 65, 458, 10, 65, 13, - 65, 14, 65, 459, 3, 65, 3, 65, 7, 65, 464, 10, 65, 12, 65, 14, 65, 467, - 11, 65, 7, 65, 469, 10, 65, 12, 65, 14, 65, 472, 11, 65, 3, 65, 3, 65, - 7, 65, 476, 10, 65, 12, 65, 14, 65, 479, 11, 65, 7, 65, 481, 10, 65, 12, - 65, 14, 65, 484, 11, 65, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 490, 10, 66, - 3, 67, 6, 67, 493, 10, 67, 13, 67, 14, 67, 494, 3, 68, 3, 68, 3, 68, 6, - 68, 500, 10, 68, 13, 68, 14, 68, 501, 3, 68, 5, 68, 505, 10, 68, 3, 68, - 3, 68, 5, 68, 509, 10, 68, 5, 68, 511, 10, 68, 3, 69, 3, 69, 3, 69, 3, - 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 7, 72, 523, 10, 72, 12, 72, - 14, 72, 526, 11, 72, 5, 72, 528, 10, 72, 3, 73, 3, 73, 5, 73, 532, 10, - 73, 3, 73, 6, 73, 535, 10, 73, 13, 73, 14, 73, 536, 3, 74, 3, 74, 3, 75, - 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 551, - 10, 77, 12, 77, 14, 77, 554, 11, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, - 3, 78, 3, 78, 3, 78, 7, 78, 564, 10, 78, 12, 78, 14, 78, 567, 11, 78, 3, - 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 575, 10, 79, 12, 79, 14, - 79, 578, 11, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 7, 80, 586, - 10, 80, 12, 80, 14, 80, 589, 11, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, - 3, 169, 2, 82, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, - 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, - 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, - 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, - 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, - 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, - 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, - 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, - 141, 2, 143, 2, 145, 2, 147, 2, 149, 2, 151, 2, 153, 2, 155, 2, 157, 2, - 159, 2, 161, 2, 3, 2, 14, 5, 2, 12, 12, 15, 15, 8234, 8235, 6, 2, 11, 11, - 13, 14, 34, 34, 162, 162, 3, 2, 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, - 3, 2, 51, 59, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 67, 92, - 99, 124, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 3, 2, 98, 98, 3, 2, - 182, 182, 2, 620, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, - 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, - 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, - 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, - 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, - 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, - 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, - 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, - 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, - 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, - 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, - 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, - 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, - 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, - 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, - 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, - 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, - 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, - 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 3, 163, 3, 2, 2, 2, 5, 177, 3, - 2, 2, 2, 7, 189, 3, 2, 2, 2, 9, 195, 3, 2, 2, 2, 11, 199, 3, 2, 2, 2, 13, - 201, 3, 2, 2, 2, 15, 203, 3, 2, 2, 2, 17, 205, 3, 2, 2, 2, 19, 207, 3, - 2, 2, 2, 21, 209, 3, 2, 2, 2, 23, 211, 3, 2, 2, 2, 25, 213, 3, 2, 2, 2, - 27, 215, 3, 2, 2, 2, 29, 217, 3, 2, 2, 2, 31, 219, 3, 2, 2, 2, 33, 221, - 3, 2, 2, 2, 35, 223, 3, 2, 2, 2, 37, 226, 3, 2, 2, 2, 39, 229, 3, 2, 2, - 2, 41, 232, 3, 2, 2, 2, 43, 235, 3, 2, 2, 2, 45, 237, 3, 2, 2, 2, 47, 239, - 3, 2, 2, 2, 49, 241, 3, 2, 2, 2, 51, 243, 3, 2, 2, 2, 53, 245, 3, 2, 2, - 2, 55, 248, 3, 2, 2, 2, 57, 256, 3, 2, 2, 2, 59, 262, 3, 2, 2, 2, 61, 264, - 3, 2, 2, 2, 63, 267, 3, 2, 2, 2, 65, 269, 3, 2, 2, 2, 67, 271, 3, 2, 2, - 2, 69, 274, 3, 2, 2, 2, 71, 277, 3, 2, 2, 2, 73, 281, 3, 2, 2, 2, 75, 288, - 3, 2, 2, 2, 77, 296, 3, 2, 2, 2, 79, 304, 3, 2, 2, 2, 81, 313, 3, 2, 2, - 2, 83, 320, 3, 2, 2, 2, 85, 325, 3, 2, 2, 2, 87, 331, 3, 2, 2, 2, 89, 335, - 3, 2, 2, 2, 91, 350, 3, 2, 2, 2, 93, 352, 3, 2, 2, 2, 95, 357, 3, 2, 2, - 2, 97, 380, 3, 2, 2, 2, 99, 382, 3, 2, 2, 2, 101, 386, 3, 2, 2, 2, 103, - 391, 3, 2, 2, 2, 105, 396, 3, 2, 2, 2, 107, 401, 3, 2, 2, 2, 109, 407, - 3, 2, 2, 2, 111, 411, 3, 2, 2, 2, 113, 415, 3, 2, 2, 2, 115, 425, 3, 2, - 2, 2, 117, 431, 3, 2, 2, 2, 119, 440, 3, 2, 2, 2, 121, 442, 3, 2, 2, 2, - 123, 445, 3, 2, 2, 2, 125, 448, 3, 2, 2, 2, 127, 454, 3, 2, 2, 2, 129, - 457, 3, 2, 2, 2, 131, 489, 3, 2, 2, 2, 133, 492, 3, 2, 2, 2, 135, 510, - 3, 2, 2, 2, 137, 512, 3, 2, 2, 2, 139, 515, 3, 2, 2, 2, 141, 517, 3, 2, - 2, 2, 143, 527, 3, 2, 2, 2, 145, 529, 3, 2, 2, 2, 147, 538, 3, 2, 2, 2, - 149, 540, 3, 2, 2, 2, 151, 542, 3, 2, 2, 2, 153, 544, 3, 2, 2, 2, 155, - 557, 3, 2, 2, 2, 157, 570, 3, 2, 2, 2, 159, 581, 3, 2, 2, 2, 161, 592, - 3, 2, 2, 2, 163, 164, 7, 49, 2, 2, 164, 165, 7, 44, 2, 2, 165, 169, 3, - 2, 2, 2, 166, 168, 11, 2, 2, 2, 167, 166, 3, 2, 2, 2, 168, 171, 3, 2, 2, - 2, 169, 170, 3, 2, 2, 2, 169, 167, 3, 2, 2, 2, 170, 172, 3, 2, 2, 2, 171, - 169, 3, 2, 2, 2, 172, 173, 7, 44, 2, 2, 173, 174, 7, 49, 2, 2, 174, 175, - 3, 2, 2, 2, 175, 176, 8, 2, 2, 2, 176, 4, 3, 2, 2, 2, 177, 178, 7, 49, - 2, 2, 178, 179, 7, 49, 2, 2, 179, 183, 3, 2, 2, 2, 180, 182, 10, 2, 2, - 2, 181, 180, 3, 2, 2, 2, 182, 185, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 183, - 184, 3, 2, 2, 2, 184, 186, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 186, 187, - 8, 3, 2, 2, 187, 6, 3, 2, 2, 2, 188, 190, 9, 3, 2, 2, 189, 188, 3, 2, 2, - 2, 190, 191, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, - 193, 3, 2, 2, 2, 193, 194, 8, 4, 2, 2, 194, 8, 3, 2, 2, 2, 195, 196, 9, - 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, 198, 8, 5, 2, 2, 198, 10, 3, 2, 2, - 2, 199, 200, 7, 60, 2, 2, 200, 12, 3, 2, 2, 2, 201, 202, 7, 61, 2, 2, 202, - 14, 3, 2, 2, 2, 203, 204, 7, 48, 2, 2, 204, 16, 3, 2, 2, 2, 205, 206, 7, - 46, 2, 2, 206, 18, 3, 2, 2, 2, 207, 208, 7, 93, 2, 2, 208, 20, 3, 2, 2, - 2, 209, 210, 7, 95, 2, 2, 210, 22, 3, 2, 2, 2, 211, 212, 7, 42, 2, 2, 212, - 24, 3, 2, 2, 2, 213, 214, 7, 43, 2, 2, 214, 26, 3, 2, 2, 2, 215, 216, 7, - 125, 2, 2, 216, 28, 3, 2, 2, 2, 217, 218, 7, 127, 2, 2, 218, 30, 3, 2, - 2, 2, 219, 220, 7, 64, 2, 2, 220, 32, 3, 2, 2, 2, 221, 222, 7, 62, 2, 2, - 222, 34, 3, 2, 2, 2, 223, 224, 7, 63, 2, 2, 224, 225, 7, 63, 2, 2, 225, - 36, 3, 2, 2, 2, 226, 227, 7, 64, 2, 2, 227, 228, 7, 63, 2, 2, 228, 38, - 3, 2, 2, 2, 229, 230, 7, 62, 2, 2, 230, 231, 7, 63, 2, 2, 231, 40, 3, 2, - 2, 2, 232, 233, 7, 35, 2, 2, 233, 234, 7, 63, 2, 2, 234, 42, 3, 2, 2, 2, - 235, 236, 7, 44, 2, 2, 236, 44, 3, 2, 2, 2, 237, 238, 7, 49, 2, 2, 238, - 46, 3, 2, 2, 2, 239, 240, 7, 39, 2, 2, 240, 48, 3, 2, 2, 2, 241, 242, 7, - 45, 2, 2, 242, 50, 3, 2, 2, 2, 243, 244, 7, 47, 2, 2, 244, 52, 3, 2, 2, - 2, 245, 246, 7, 47, 2, 2, 246, 247, 7, 47, 2, 2, 247, 54, 3, 2, 2, 2, 248, - 249, 7, 45, 2, 2, 249, 250, 7, 45, 2, 2, 250, 56, 3, 2, 2, 2, 251, 252, - 7, 67, 2, 2, 252, 253, 7, 80, 2, 2, 253, 257, 7, 70, 2, 2, 254, 255, 7, - 40, 2, 2, 255, 257, 7, 40, 2, 2, 256, 251, 3, 2, 2, 2, 256, 254, 3, 2, - 2, 2, 257, 58, 3, 2, 2, 2, 258, 259, 7, 81, 2, 2, 259, 263, 7, 84, 2, 2, - 260, 261, 7, 126, 2, 2, 261, 263, 7, 126, 2, 2, 262, 258, 3, 2, 2, 2, 262, - 260, 3, 2, 2, 2, 263, 60, 3, 2, 2, 2, 264, 265, 5, 15, 8, 2, 265, 266, - 5, 15, 8, 2, 266, 62, 3, 2, 2, 2, 267, 268, 7, 63, 2, 2, 268, 64, 3, 2, - 2, 2, 269, 270, 7, 65, 2, 2, 270, 66, 3, 2, 2, 2, 271, 272, 7, 35, 2, 2, - 272, 273, 7, 128, 2, 2, 273, 68, 3, 2, 2, 2, 274, 275, 7, 63, 2, 2, 275, - 276, 7, 128, 2, 2, 276, 70, 3, 2, 2, 2, 277, 278, 7, 72, 2, 2, 278, 279, - 7, 81, 2, 2, 279, 280, 7, 84, 2, 2, 280, 72, 3, 2, 2, 2, 281, 282, 7, 84, - 2, 2, 282, 283, 7, 71, 2, 2, 283, 284, 7, 86, 2, 2, 284, 285, 7, 87, 2, - 2, 285, 286, 7, 84, 2, 2, 286, 287, 7, 80, 2, 2, 287, 74, 3, 2, 2, 2, 288, - 289, 7, 89, 2, 2, 289, 290, 7, 67, 2, 2, 290, 291, 7, 75, 2, 2, 291, 292, - 7, 86, 2, 2, 292, 293, 7, 72, 2, 2, 293, 294, 7, 81, 2, 2, 294, 295, 7, - 84, 2, 2, 295, 76, 3, 2, 2, 2, 296, 297, 7, 81, 2, 2, 297, 298, 7, 82, - 2, 2, 298, 299, 7, 86, 2, 2, 299, 300, 7, 75, 2, 2, 300, 301, 7, 81, 2, - 2, 301, 302, 7, 80, 2, 2, 302, 303, 7, 85, 2, 2, 303, 78, 3, 2, 2, 2, 304, - 305, 7, 70, 2, 2, 305, 306, 7, 75, 2, 2, 306, 307, 7, 85, 2, 2, 307, 308, - 7, 86, 2, 2, 308, 309, 7, 75, 2, 2, 309, 310, 7, 80, 2, 2, 310, 311, 7, - 69, 2, 2, 311, 312, 7, 86, 2, 2, 312, 80, 3, 2, 2, 2, 313, 314, 7, 72, - 2, 2, 314, 315, 7, 75, 2, 2, 315, 316, 7, 78, 2, 2, 316, 317, 7, 86, 2, - 2, 317, 318, 7, 71, 2, 2, 318, 319, 7, 84, 2, 2, 319, 82, 3, 2, 2, 2, 320, - 321, 7, 85, 2, 2, 321, 322, 7, 81, 2, 2, 322, 323, 7, 84, 2, 2, 323, 324, - 7, 86, 2, 2, 324, 84, 3, 2, 2, 2, 325, 326, 7, 78, 2, 2, 326, 327, 7, 75, - 2, 2, 327, 328, 7, 79, 2, 2, 328, 329, 7, 75, 2, 2, 329, 330, 7, 86, 2, - 2, 330, 86, 3, 2, 2, 2, 331, 332, 7, 78, 2, 2, 332, 333, 7, 71, 2, 2, 333, - 334, 7, 86, 2, 2, 334, 88, 3, 2, 2, 2, 335, 336, 7, 69, 2, 2, 336, 337, - 7, 81, 2, 2, 337, 338, 7, 78, 2, 2, 338, 339, 7, 78, 2, 2, 339, 340, 7, - 71, 2, 2, 340, 341, 7, 69, 2, 2, 341, 342, 7, 86, 2, 2, 342, 90, 3, 2, - 2, 2, 343, 344, 7, 67, 2, 2, 344, 345, 7, 85, 2, 2, 345, 351, 7, 69, 2, - 2, 346, 347, 7, 70, 2, 2, 347, 348, 7, 71, 2, 2, 348, 349, 7, 85, 2, 2, - 349, 351, 7, 69, 2, 2, 350, 343, 3, 2, 2, 2, 350, 346, 3, 2, 2, 2, 351, - 92, 3, 2, 2, 2, 352, 353, 7, 80, 2, 2, 353, 354, 7, 81, 2, 2, 354, 355, - 7, 80, 2, 2, 355, 356, 7, 71, 2, 2, 356, 94, 3, 2, 2, 2, 357, 358, 7, 80, - 2, 2, 358, 359, 7, 87, 2, 2, 359, 360, 7, 78, 2, 2, 360, 361, 7, 78, 2, - 2, 361, 96, 3, 2, 2, 2, 362, 363, 7, 86, 2, 2, 363, 364, 7, 84, 2, 2, 364, - 365, 7, 87, 2, 2, 365, 381, 7, 71, 2, 2, 366, 367, 7, 118, 2, 2, 367, 368, - 7, 116, 2, 2, 368, 369, 7, 119, 2, 2, 369, 381, 7, 103, 2, 2, 370, 371, - 7, 72, 2, 2, 371, 372, 7, 67, 2, 2, 372, 373, 7, 78, 2, 2, 373, 374, 7, - 85, 2, 2, 374, 381, 7, 71, 2, 2, 375, 376, 7, 104, 2, 2, 376, 377, 7, 99, - 2, 2, 377, 378, 7, 110, 2, 2, 378, 379, 7, 117, 2, 2, 379, 381, 7, 103, - 2, 2, 380, 362, 3, 2, 2, 2, 380, 366, 3, 2, 2, 2, 380, 370, 3, 2, 2, 2, - 380, 375, 3, 2, 2, 2, 381, 98, 3, 2, 2, 2, 382, 383, 7, 87, 2, 2, 383, - 384, 7, 85, 2, 2, 384, 385, 7, 71, 2, 2, 385, 100, 3, 2, 2, 2, 386, 387, - 7, 75, 2, 2, 387, 388, 7, 80, 2, 2, 388, 389, 7, 86, 2, 2, 389, 390, 7, - 81, 2, 2, 390, 102, 3, 2, 2, 2, 391, 392, 7, 77, 2, 2, 392, 393, 7, 71, - 2, 2, 393, 394, 7, 71, 2, 2, 394, 395, 7, 82, 2, 2, 395, 104, 3, 2, 2, - 2, 396, 397, 7, 89, 2, 2, 397, 398, 7, 75, 2, 2, 398, 399, 7, 86, 2, 2, - 399, 400, 7, 74, 2, 2, 400, 106, 3, 2, 2, 2, 401, 402, 7, 69, 2, 2, 402, - 403, 7, 81, 2, 2, 403, 404, 7, 87, 2, 2, 404, 405, 7, 80, 2, 2, 405, 406, - 7, 86, 2, 2, 406, 108, 3, 2, 2, 2, 407, 408, 7, 67, 2, 2, 408, 409, 7, - 78, 2, 2, 409, 410, 7, 78, 2, 2, 410, 110, 3, 2, 2, 2, 411, 412, 7, 67, - 2, 2, 412, 413, 7, 80, 2, 2, 413, 414, 7, 91, 2, 2, 414, 112, 3, 2, 2, - 2, 415, 416, 7, 67, 2, 2, 416, 417, 7, 73, 2, 2, 417, 418, 7, 73, 2, 2, - 418, 419, 7, 84, 2, 2, 419, 420, 7, 71, 2, 2, 420, 421, 7, 73, 2, 2, 421, - 422, 7, 67, 2, 2, 422, 423, 7, 86, 2, 2, 423, 424, 7, 71, 2, 2, 424, 114, - 3, 2, 2, 2, 425, 426, 7, 71, 2, 2, 426, 427, 7, 88, 2, 2, 427, 428, 7, - 71, 2, 2, 428, 429, 7, 80, 2, 2, 429, 430, 7, 86, 2, 2, 430, 116, 3, 2, - 2, 2, 431, 432, 7, 78, 2, 2, 432, 433, 7, 75, 2, 2, 433, 434, 7, 77, 2, - 2, 434, 435, 7, 71, 2, 2, 435, 118, 3, 2, 2, 2, 436, 437, 7, 80, 2, 2, - 437, 438, 7, 81, 2, 2, 438, 441, 7, 86, 2, 2, 439, 441, 7, 35, 2, 2, 440, - 436, 3, 2, 2, 2, 440, 439, 3, 2, 2, 2, 441, 120, 3, 2, 2, 2, 442, 443, - 7, 75, 2, 2, 443, 444, 7, 80, 2, 2, 444, 122, 3, 2, 2, 2, 445, 446, 7, - 70, 2, 2, 446, 447, 7, 81, 2, 2, 447, 124, 3, 2, 2, 2, 448, 449, 7, 89, - 2, 2, 449, 450, 7, 74, 2, 2, 450, 451, 7, 75, 2, 2, 451, 452, 7, 78, 2, - 2, 452, 453, 7, 71, 2, 2, 453, 126, 3, 2, 2, 2, 454, 455, 7, 66, 2, 2, - 455, 128, 3, 2, 2, 2, 456, 458, 5, 147, 74, 2, 457, 456, 3, 2, 2, 2, 458, - 459, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 470, - 3, 2, 2, 2, 461, 465, 5, 149, 75, 2, 462, 464, 5, 129, 65, 2, 463, 462, - 3, 2, 2, 2, 464, 467, 3, 2, 2, 2, 465, 463, 3, 2, 2, 2, 465, 466, 3, 2, - 2, 2, 466, 469, 3, 2, 2, 2, 467, 465, 3, 2, 2, 2, 468, 461, 3, 2, 2, 2, - 469, 472, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, - 482, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 473, 477, 5, 151, 76, 2, 474, 476, - 5, 129, 65, 2, 475, 474, 3, 2, 2, 2, 476, 479, 3, 2, 2, 2, 477, 475, 3, - 2, 2, 2, 477, 478, 3, 2, 2, 2, 478, 481, 3, 2, 2, 2, 479, 477, 3, 2, 2, - 2, 480, 473, 3, 2, 2, 2, 481, 484, 3, 2, 2, 2, 482, 480, 3, 2, 2, 2, 482, - 483, 3, 2, 2, 2, 483, 130, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 485, 490, - 5, 155, 78, 2, 486, 490, 5, 153, 77, 2, 487, 490, 5, 157, 79, 2, 488, 490, - 5, 159, 80, 2, 489, 485, 3, 2, 2, 2, 489, 486, 3, 2, 2, 2, 489, 487, 3, - 2, 2, 2, 489, 488, 3, 2, 2, 2, 490, 132, 3, 2, 2, 2, 491, 493, 9, 4, 2, - 2, 492, 491, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 492, 3, 2, 2, 2, 494, - 495, 3, 2, 2, 2, 495, 134, 3, 2, 2, 2, 496, 497, 5, 143, 72, 2, 497, 499, - 5, 15, 8, 2, 498, 500, 9, 4, 2, 2, 499, 498, 3, 2, 2, 2, 500, 501, 3, 2, - 2, 2, 501, 499, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 504, 3, 2, 2, 2, - 503, 505, 5, 145, 73, 2, 504, 503, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, - 511, 3, 2, 2, 2, 506, 508, 5, 143, 72, 2, 507, 509, 5, 145, 73, 2, 508, - 507, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 511, 3, 2, 2, 2, 510, 496, - 3, 2, 2, 2, 510, 506, 3, 2, 2, 2, 511, 136, 3, 2, 2, 2, 512, 513, 5, 129, - 65, 2, 513, 514, 5, 161, 81, 2, 514, 138, 3, 2, 2, 2, 515, 516, 11, 2, - 2, 2, 516, 140, 3, 2, 2, 2, 517, 518, 9, 5, 2, 2, 518, 142, 3, 2, 2, 2, - 519, 528, 7, 50, 2, 2, 520, 524, 9, 6, 2, 2, 521, 523, 9, 4, 2, 2, 522, - 521, 3, 2, 2, 2, 523, 526, 3, 2, 2, 2, 524, 522, 3, 2, 2, 2, 524, 525, - 3, 2, 2, 2, 525, 528, 3, 2, 2, 2, 526, 524, 3, 2, 2, 2, 527, 519, 3, 2, - 2, 2, 527, 520, 3, 2, 2, 2, 528, 144, 3, 2, 2, 2, 529, 531, 9, 7, 2, 2, - 530, 532, 9, 8, 2, 2, 531, 530, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, - 534, 3, 2, 2, 2, 533, 535, 9, 4, 2, 2, 534, 533, 3, 2, 2, 2, 535, 536, - 3, 2, 2, 2, 536, 534, 3, 2, 2, 2, 536, 537, 3, 2, 2, 2, 537, 146, 3, 2, - 2, 2, 538, 539, 9, 9, 2, 2, 539, 148, 3, 2, 2, 2, 540, 541, 7, 97, 2, 2, - 541, 150, 3, 2, 2, 2, 542, 543, 4, 50, 59, 2, 543, 152, 3, 2, 2, 2, 544, - 552, 7, 36, 2, 2, 545, 546, 7, 94, 2, 2, 546, 551, 11, 2, 2, 2, 547, 548, - 7, 36, 2, 2, 548, 551, 7, 36, 2, 2, 549, 551, 10, 10, 2, 2, 550, 545, 3, - 2, 2, 2, 550, 547, 3, 2, 2, 2, 550, 549, 3, 2, 2, 2, 551, 554, 3, 2, 2, - 2, 552, 550, 3, 2, 2, 2, 552, 553, 3, 2, 2, 2, 553, 555, 3, 2, 2, 2, 554, - 552, 3, 2, 2, 2, 555, 556, 7, 36, 2, 2, 556, 154, 3, 2, 2, 2, 557, 565, - 7, 41, 2, 2, 558, 559, 7, 94, 2, 2, 559, 564, 11, 2, 2, 2, 560, 561, 7, - 41, 2, 2, 561, 564, 7, 41, 2, 2, 562, 564, 10, 11, 2, 2, 563, 558, 3, 2, - 2, 2, 563, 560, 3, 2, 2, 2, 563, 562, 3, 2, 2, 2, 564, 567, 3, 2, 2, 2, - 565, 563, 3, 2, 2, 2, 565, 566, 3, 2, 2, 2, 566, 568, 3, 2, 2, 2, 567, - 565, 3, 2, 2, 2, 568, 569, 7, 41, 2, 2, 569, 156, 3, 2, 2, 2, 570, 576, - 7, 98, 2, 2, 571, 572, 7, 94, 2, 2, 572, 575, 7, 98, 2, 2, 573, 575, 10, - 12, 2, 2, 574, 571, 3, 2, 2, 2, 574, 573, 3, 2, 2, 2, 575, 578, 3, 2, 2, - 2, 576, 574, 3, 2, 2, 2, 576, 577, 3, 2, 2, 2, 577, 579, 3, 2, 2, 2, 578, - 576, 3, 2, 2, 2, 579, 580, 7, 98, 2, 2, 580, 158, 3, 2, 2, 2, 581, 587, - 7, 182, 2, 2, 582, 583, 7, 94, 2, 2, 583, 586, 7, 182, 2, 2, 584, 586, - 10, 13, 2, 2, 585, 582, 3, 2, 2, 2, 585, 584, 3, 2, 2, 2, 586, 589, 3, - 2, 2, 2, 587, 585, 3, 2, 2, 2, 587, 588, 3, 2, 2, 2, 588, 590, 3, 2, 2, - 2, 589, 587, 3, 2, 2, 2, 590, 591, 7, 182, 2, 2, 591, 160, 3, 2, 2, 2, - 592, 593, 7, 60, 2, 2, 593, 594, 7, 60, 2, 2, 594, 162, 3, 2, 2, 2, 34, - 2, 169, 183, 191, 256, 262, 350, 380, 440, 459, 465, 470, 477, 482, 489, - 494, 501, 504, 508, 510, 524, 527, 531, 536, 550, 552, 563, 565, 574, 576, - 585, 587, 3, 2, 3, 2, + 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 385, 10, 49, 3, 50, 3, 50, + 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, + 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, + 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, + 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, + 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, + 60, 3, 60, 3, 60, 3, 60, 5, 60, 445, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, + 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, + 65, 6, 65, 462, 10, 65, 13, 65, 14, 65, 463, 3, 65, 3, 65, 7, 65, 468, + 10, 65, 12, 65, 14, 65, 471, 11, 65, 7, 65, 473, 10, 65, 12, 65, 14, 65, + 476, 11, 65, 3, 65, 3, 65, 7, 65, 480, 10, 65, 12, 65, 14, 65, 483, 11, + 65, 7, 65, 485, 10, 65, 12, 65, 14, 65, 488, 11, 65, 3, 66, 3, 66, 3, 67, + 3, 67, 3, 67, 3, 67, 5, 67, 496, 10, 67, 3, 68, 6, 68, 499, 10, 68, 13, + 68, 14, 68, 500, 3, 69, 3, 69, 3, 69, 6, 69, 506, 10, 69, 13, 69, 14, 69, + 507, 3, 69, 5, 69, 511, 10, 69, 3, 69, 3, 69, 5, 69, 515, 10, 69, 5, 69, + 517, 10, 69, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, + 73, 3, 73, 7, 73, 529, 10, 73, 12, 73, 14, 73, 532, 11, 73, 5, 73, 534, + 10, 73, 3, 74, 3, 74, 5, 74, 538, 10, 74, 3, 74, 6, 74, 541, 10, 74, 13, + 74, 14, 74, 542, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, + 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 559, 10, 79, 12, 79, 14, + 79, 562, 11, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, + 7, 80, 572, 10, 80, 12, 80, 14, 80, 575, 11, 80, 3, 80, 3, 80, 3, 81, 3, + 81, 3, 81, 3, 81, 7, 81, 583, 10, 81, 12, 81, 14, 81, 586, 11, 81, 3, 81, + 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 7, 82, 594, 10, 82, 12, 82, 14, 82, + 597, 11, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 173, 2, 84, 3, 3, 5, + 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, + 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, + 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, + 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, + 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, + 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, + 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, + 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 2, 145, + 2, 147, 2, 149, 2, 151, 2, 153, 2, 155, 2, 157, 2, 159, 2, 161, 2, 163, + 2, 165, 2, 3, 2, 14, 5, 2, 12, 12, 15, 15, 8234, 8235, 6, 2, 11, 11, 13, + 14, 34, 34, 162, 162, 3, 2, 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, + 51, 59, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 67, 92, 99, + 124, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 3, 2, 98, 98, 3, 2, 182, + 182, 2, 627, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, + 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, + 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, + 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, + 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, + 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, + 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, + 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, + 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, + 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, + 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, + 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, + 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, + 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, + 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, + 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, + 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, + 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, + 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 3, 167, 3, 2, 2, 2, + 5, 181, 3, 2, 2, 2, 7, 193, 3, 2, 2, 2, 9, 199, 3, 2, 2, 2, 11, 203, 3, + 2, 2, 2, 13, 205, 3, 2, 2, 2, 15, 207, 3, 2, 2, 2, 17, 209, 3, 2, 2, 2, + 19, 211, 3, 2, 2, 2, 21, 213, 3, 2, 2, 2, 23, 215, 3, 2, 2, 2, 25, 217, + 3, 2, 2, 2, 27, 219, 3, 2, 2, 2, 29, 221, 3, 2, 2, 2, 31, 223, 3, 2, 2, + 2, 33, 225, 3, 2, 2, 2, 35, 227, 3, 2, 2, 2, 37, 230, 3, 2, 2, 2, 39, 233, + 3, 2, 2, 2, 41, 236, 3, 2, 2, 2, 43, 239, 3, 2, 2, 2, 45, 241, 3, 2, 2, + 2, 47, 243, 3, 2, 2, 2, 49, 245, 3, 2, 2, 2, 51, 247, 3, 2, 2, 2, 53, 249, + 3, 2, 2, 2, 55, 252, 3, 2, 2, 2, 57, 260, 3, 2, 2, 2, 59, 266, 3, 2, 2, + 2, 61, 268, 3, 2, 2, 2, 63, 271, 3, 2, 2, 2, 65, 273, 3, 2, 2, 2, 67, 275, + 3, 2, 2, 2, 69, 278, 3, 2, 2, 2, 71, 281, 3, 2, 2, 2, 73, 285, 3, 2, 2, + 2, 75, 292, 3, 2, 2, 2, 77, 300, 3, 2, 2, 2, 79, 308, 3, 2, 2, 2, 81, 317, + 3, 2, 2, 2, 83, 324, 3, 2, 2, 2, 85, 329, 3, 2, 2, 2, 87, 335, 3, 2, 2, + 2, 89, 339, 3, 2, 2, 2, 91, 354, 3, 2, 2, 2, 93, 356, 3, 2, 2, 2, 95, 361, + 3, 2, 2, 2, 97, 384, 3, 2, 2, 2, 99, 386, 3, 2, 2, 2, 101, 390, 3, 2, 2, + 2, 103, 395, 3, 2, 2, 2, 105, 400, 3, 2, 2, 2, 107, 405, 3, 2, 2, 2, 109, + 411, 3, 2, 2, 2, 111, 415, 3, 2, 2, 2, 113, 419, 3, 2, 2, 2, 115, 429, + 3, 2, 2, 2, 117, 435, 3, 2, 2, 2, 119, 444, 3, 2, 2, 2, 121, 446, 3, 2, + 2, 2, 123, 449, 3, 2, 2, 2, 125, 452, 3, 2, 2, 2, 127, 458, 3, 2, 2, 2, + 129, 461, 3, 2, 2, 2, 131, 489, 3, 2, 2, 2, 133, 495, 3, 2, 2, 2, 135, + 498, 3, 2, 2, 2, 137, 516, 3, 2, 2, 2, 139, 518, 3, 2, 2, 2, 141, 521, + 3, 2, 2, 2, 143, 523, 3, 2, 2, 2, 145, 533, 3, 2, 2, 2, 147, 535, 3, 2, + 2, 2, 149, 544, 3, 2, 2, 2, 151, 546, 3, 2, 2, 2, 153, 548, 3, 2, 2, 2, + 155, 550, 3, 2, 2, 2, 157, 552, 3, 2, 2, 2, 159, 565, 3, 2, 2, 2, 161, + 578, 3, 2, 2, 2, 163, 589, 3, 2, 2, 2, 165, 600, 3, 2, 2, 2, 167, 168, + 7, 49, 2, 2, 168, 169, 7, 44, 2, 2, 169, 173, 3, 2, 2, 2, 170, 172, 11, + 2, 2, 2, 171, 170, 3, 2, 2, 2, 172, 175, 3, 2, 2, 2, 173, 174, 3, 2, 2, + 2, 173, 171, 3, 2, 2, 2, 174, 176, 3, 2, 2, 2, 175, 173, 3, 2, 2, 2, 176, + 177, 7, 44, 2, 2, 177, 178, 7, 49, 2, 2, 178, 179, 3, 2, 2, 2, 179, 180, + 8, 2, 2, 2, 180, 4, 3, 2, 2, 2, 181, 182, 7, 49, 2, 2, 182, 183, 7, 49, + 2, 2, 183, 187, 3, 2, 2, 2, 184, 186, 10, 2, 2, 2, 185, 184, 3, 2, 2, 2, + 186, 189, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 187, 188, 3, 2, 2, 2, 188, + 190, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 190, 191, 8, 3, 2, 2, 191, 6, 3, + 2, 2, 2, 192, 194, 9, 3, 2, 2, 193, 192, 3, 2, 2, 2, 194, 195, 3, 2, 2, + 2, 195, 193, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, + 198, 8, 4, 2, 2, 198, 8, 3, 2, 2, 2, 199, 200, 9, 2, 2, 2, 200, 201, 3, + 2, 2, 2, 201, 202, 8, 5, 2, 2, 202, 10, 3, 2, 2, 2, 203, 204, 7, 60, 2, + 2, 204, 12, 3, 2, 2, 2, 205, 206, 7, 61, 2, 2, 206, 14, 3, 2, 2, 2, 207, + 208, 7, 48, 2, 2, 208, 16, 3, 2, 2, 2, 209, 210, 7, 46, 2, 2, 210, 18, + 3, 2, 2, 2, 211, 212, 7, 93, 2, 2, 212, 20, 3, 2, 2, 2, 213, 214, 7, 95, + 2, 2, 214, 22, 3, 2, 2, 2, 215, 216, 7, 42, 2, 2, 216, 24, 3, 2, 2, 2, + 217, 218, 7, 43, 2, 2, 218, 26, 3, 2, 2, 2, 219, 220, 7, 125, 2, 2, 220, + 28, 3, 2, 2, 2, 221, 222, 7, 127, 2, 2, 222, 30, 3, 2, 2, 2, 223, 224, + 7, 64, 2, 2, 224, 32, 3, 2, 2, 2, 225, 226, 7, 62, 2, 2, 226, 34, 3, 2, + 2, 2, 227, 228, 7, 63, 2, 2, 228, 229, 7, 63, 2, 2, 229, 36, 3, 2, 2, 2, + 230, 231, 7, 64, 2, 2, 231, 232, 7, 63, 2, 2, 232, 38, 3, 2, 2, 2, 233, + 234, 7, 62, 2, 2, 234, 235, 7, 63, 2, 2, 235, 40, 3, 2, 2, 2, 236, 237, + 7, 35, 2, 2, 237, 238, 7, 63, 2, 2, 238, 42, 3, 2, 2, 2, 239, 240, 7, 44, + 2, 2, 240, 44, 3, 2, 2, 2, 241, 242, 7, 49, 2, 2, 242, 46, 3, 2, 2, 2, + 243, 244, 7, 39, 2, 2, 244, 48, 3, 2, 2, 2, 245, 246, 7, 45, 2, 2, 246, + 50, 3, 2, 2, 2, 247, 248, 7, 47, 2, 2, 248, 52, 3, 2, 2, 2, 249, 250, 7, + 47, 2, 2, 250, 251, 7, 47, 2, 2, 251, 54, 3, 2, 2, 2, 252, 253, 7, 45, + 2, 2, 253, 254, 7, 45, 2, 2, 254, 56, 3, 2, 2, 2, 255, 256, 7, 67, 2, 2, + 256, 257, 7, 80, 2, 2, 257, 261, 7, 70, 2, 2, 258, 259, 7, 40, 2, 2, 259, + 261, 7, 40, 2, 2, 260, 255, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 261, 58, + 3, 2, 2, 2, 262, 263, 7, 81, 2, 2, 263, 267, 7, 84, 2, 2, 264, 265, 7, + 126, 2, 2, 265, 267, 7, 126, 2, 2, 266, 262, 3, 2, 2, 2, 266, 264, 3, 2, + 2, 2, 267, 60, 3, 2, 2, 2, 268, 269, 5, 15, 8, 2, 269, 270, 5, 15, 8, 2, + 270, 62, 3, 2, 2, 2, 271, 272, 7, 63, 2, 2, 272, 64, 3, 2, 2, 2, 273, 274, + 7, 65, 2, 2, 274, 66, 3, 2, 2, 2, 275, 276, 7, 35, 2, 2, 276, 277, 7, 128, + 2, 2, 277, 68, 3, 2, 2, 2, 278, 279, 7, 63, 2, 2, 279, 280, 7, 128, 2, + 2, 280, 70, 3, 2, 2, 2, 281, 282, 7, 72, 2, 2, 282, 283, 7, 81, 2, 2, 283, + 284, 7, 84, 2, 2, 284, 72, 3, 2, 2, 2, 285, 286, 7, 84, 2, 2, 286, 287, + 7, 71, 2, 2, 287, 288, 7, 86, 2, 2, 288, 289, 7, 87, 2, 2, 289, 290, 7, + 84, 2, 2, 290, 291, 7, 80, 2, 2, 291, 74, 3, 2, 2, 2, 292, 293, 7, 89, + 2, 2, 293, 294, 7, 67, 2, 2, 294, 295, 7, 75, 2, 2, 295, 296, 7, 86, 2, + 2, 296, 297, 7, 72, 2, 2, 297, 298, 7, 81, 2, 2, 298, 299, 7, 84, 2, 2, + 299, 76, 3, 2, 2, 2, 300, 301, 7, 81, 2, 2, 301, 302, 7, 82, 2, 2, 302, + 303, 7, 86, 2, 2, 303, 304, 7, 75, 2, 2, 304, 305, 7, 81, 2, 2, 305, 306, + 7, 80, 2, 2, 306, 307, 7, 85, 2, 2, 307, 78, 3, 2, 2, 2, 308, 309, 7, 70, + 2, 2, 309, 310, 7, 75, 2, 2, 310, 311, 7, 85, 2, 2, 311, 312, 7, 86, 2, + 2, 312, 313, 7, 75, 2, 2, 313, 314, 7, 80, 2, 2, 314, 315, 7, 69, 2, 2, + 315, 316, 7, 86, 2, 2, 316, 80, 3, 2, 2, 2, 317, 318, 7, 72, 2, 2, 318, + 319, 7, 75, 2, 2, 319, 320, 7, 78, 2, 2, 320, 321, 7, 86, 2, 2, 321, 322, + 7, 71, 2, 2, 322, 323, 7, 84, 2, 2, 323, 82, 3, 2, 2, 2, 324, 325, 7, 85, + 2, 2, 325, 326, 7, 81, 2, 2, 326, 327, 7, 84, 2, 2, 327, 328, 7, 86, 2, + 2, 328, 84, 3, 2, 2, 2, 329, 330, 7, 78, 2, 2, 330, 331, 7, 75, 2, 2, 331, + 332, 7, 79, 2, 2, 332, 333, 7, 75, 2, 2, 333, 334, 7, 86, 2, 2, 334, 86, + 3, 2, 2, 2, 335, 336, 7, 78, 2, 2, 336, 337, 7, 71, 2, 2, 337, 338, 7, + 86, 2, 2, 338, 88, 3, 2, 2, 2, 339, 340, 7, 69, 2, 2, 340, 341, 7, 81, + 2, 2, 341, 342, 7, 78, 2, 2, 342, 343, 7, 78, 2, 2, 343, 344, 7, 71, 2, + 2, 344, 345, 7, 69, 2, 2, 345, 346, 7, 86, 2, 2, 346, 90, 3, 2, 2, 2, 347, + 348, 7, 67, 2, 2, 348, 349, 7, 85, 2, 2, 349, 355, 7, 69, 2, 2, 350, 351, + 7, 70, 2, 2, 351, 352, 7, 71, 2, 2, 352, 353, 7, 85, 2, 2, 353, 355, 7, + 69, 2, 2, 354, 347, 3, 2, 2, 2, 354, 350, 3, 2, 2, 2, 355, 92, 3, 2, 2, + 2, 356, 357, 7, 80, 2, 2, 357, 358, 7, 81, 2, 2, 358, 359, 7, 80, 2, 2, + 359, 360, 7, 71, 2, 2, 360, 94, 3, 2, 2, 2, 361, 362, 7, 80, 2, 2, 362, + 363, 7, 87, 2, 2, 363, 364, 7, 78, 2, 2, 364, 365, 7, 78, 2, 2, 365, 96, + 3, 2, 2, 2, 366, 367, 7, 86, 2, 2, 367, 368, 7, 84, 2, 2, 368, 369, 7, + 87, 2, 2, 369, 385, 7, 71, 2, 2, 370, 371, 7, 118, 2, 2, 371, 372, 7, 116, + 2, 2, 372, 373, 7, 119, 2, 2, 373, 385, 7, 103, 2, 2, 374, 375, 7, 72, + 2, 2, 375, 376, 7, 67, 2, 2, 376, 377, 7, 78, 2, 2, 377, 378, 7, 85, 2, + 2, 378, 385, 7, 71, 2, 2, 379, 380, 7, 104, 2, 2, 380, 381, 7, 99, 2, 2, + 381, 382, 7, 110, 2, 2, 382, 383, 7, 117, 2, 2, 383, 385, 7, 103, 2, 2, + 384, 366, 3, 2, 2, 2, 384, 370, 3, 2, 2, 2, 384, 374, 3, 2, 2, 2, 384, + 379, 3, 2, 2, 2, 385, 98, 3, 2, 2, 2, 386, 387, 7, 87, 2, 2, 387, 388, + 7, 85, 2, 2, 388, 389, 7, 71, 2, 2, 389, 100, 3, 2, 2, 2, 390, 391, 7, + 75, 2, 2, 391, 392, 7, 80, 2, 2, 392, 393, 7, 86, 2, 2, 393, 394, 7, 81, + 2, 2, 394, 102, 3, 2, 2, 2, 395, 396, 7, 77, 2, 2, 396, 397, 7, 71, 2, + 2, 397, 398, 7, 71, 2, 2, 398, 399, 7, 82, 2, 2, 399, 104, 3, 2, 2, 2, + 400, 401, 7, 89, 2, 2, 401, 402, 7, 75, 2, 2, 402, 403, 7, 86, 2, 2, 403, + 404, 7, 74, 2, 2, 404, 106, 3, 2, 2, 2, 405, 406, 7, 69, 2, 2, 406, 407, + 7, 81, 2, 2, 407, 408, 7, 87, 2, 2, 408, 409, 7, 80, 2, 2, 409, 410, 7, + 86, 2, 2, 410, 108, 3, 2, 2, 2, 411, 412, 7, 67, 2, 2, 412, 413, 7, 78, + 2, 2, 413, 414, 7, 78, 2, 2, 414, 110, 3, 2, 2, 2, 415, 416, 7, 67, 2, + 2, 416, 417, 7, 80, 2, 2, 417, 418, 7, 91, 2, 2, 418, 112, 3, 2, 2, 2, + 419, 420, 7, 67, 2, 2, 420, 421, 7, 73, 2, 2, 421, 422, 7, 73, 2, 2, 422, + 423, 7, 84, 2, 2, 423, 424, 7, 71, 2, 2, 424, 425, 7, 73, 2, 2, 425, 426, + 7, 67, 2, 2, 426, 427, 7, 86, 2, 2, 427, 428, 7, 71, 2, 2, 428, 114, 3, + 2, 2, 2, 429, 430, 7, 71, 2, 2, 430, 431, 7, 88, 2, 2, 431, 432, 7, 71, + 2, 2, 432, 433, 7, 80, 2, 2, 433, 434, 7, 86, 2, 2, 434, 116, 3, 2, 2, + 2, 435, 436, 7, 78, 2, 2, 436, 437, 7, 75, 2, 2, 437, 438, 7, 77, 2, 2, + 438, 439, 7, 71, 2, 2, 439, 118, 3, 2, 2, 2, 440, 441, 7, 80, 2, 2, 441, + 442, 7, 81, 2, 2, 442, 445, 7, 86, 2, 2, 443, 445, 7, 35, 2, 2, 444, 440, + 3, 2, 2, 2, 444, 443, 3, 2, 2, 2, 445, 120, 3, 2, 2, 2, 446, 447, 7, 75, + 2, 2, 447, 448, 7, 80, 2, 2, 448, 122, 3, 2, 2, 2, 449, 450, 7, 70, 2, + 2, 450, 451, 7, 81, 2, 2, 451, 124, 3, 2, 2, 2, 452, 453, 7, 89, 2, 2, + 453, 454, 7, 74, 2, 2, 454, 455, 7, 75, 2, 2, 455, 456, 7, 78, 2, 2, 456, + 457, 7, 71, 2, 2, 457, 126, 3, 2, 2, 2, 458, 459, 7, 66, 2, 2, 459, 128, + 3, 2, 2, 2, 460, 462, 5, 149, 75, 2, 461, 460, 3, 2, 2, 2, 462, 463, 3, + 2, 2, 2, 463, 461, 3, 2, 2, 2, 463, 464, 3, 2, 2, 2, 464, 474, 3, 2, 2, + 2, 465, 469, 5, 151, 76, 2, 466, 468, 5, 129, 65, 2, 467, 466, 3, 2, 2, + 2, 468, 471, 3, 2, 2, 2, 469, 467, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, + 473, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 472, 465, 3, 2, 2, 2, 473, 476, + 3, 2, 2, 2, 474, 472, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 486, 3, 2, + 2, 2, 476, 474, 3, 2, 2, 2, 477, 481, 5, 155, 78, 2, 478, 480, 5, 129, + 65, 2, 479, 478, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, + 481, 482, 3, 2, 2, 2, 482, 485, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, + 477, 3, 2, 2, 2, 485, 488, 3, 2, 2, 2, 486, 484, 3, 2, 2, 2, 486, 487, + 3, 2, 2, 2, 487, 130, 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 489, 490, 5, 153, + 77, 2, 490, 132, 3, 2, 2, 2, 491, 496, 5, 159, 80, 2, 492, 496, 5, 157, + 79, 2, 493, 496, 5, 161, 81, 2, 494, 496, 5, 163, 82, 2, 495, 491, 3, 2, + 2, 2, 495, 492, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 494, 3, 2, 2, 2, + 496, 134, 3, 2, 2, 2, 497, 499, 9, 4, 2, 2, 498, 497, 3, 2, 2, 2, 499, + 500, 3, 2, 2, 2, 500, 498, 3, 2, 2, 2, 500, 501, 3, 2, 2, 2, 501, 136, + 3, 2, 2, 2, 502, 503, 5, 145, 73, 2, 503, 505, 5, 15, 8, 2, 504, 506, 9, + 4, 2, 2, 505, 504, 3, 2, 2, 2, 506, 507, 3, 2, 2, 2, 507, 505, 3, 2, 2, + 2, 507, 508, 3, 2, 2, 2, 508, 510, 3, 2, 2, 2, 509, 511, 5, 147, 74, 2, + 510, 509, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 517, 3, 2, 2, 2, 512, + 514, 5, 145, 73, 2, 513, 515, 5, 147, 74, 2, 514, 513, 3, 2, 2, 2, 514, + 515, 3, 2, 2, 2, 515, 517, 3, 2, 2, 2, 516, 502, 3, 2, 2, 2, 516, 512, + 3, 2, 2, 2, 517, 138, 3, 2, 2, 2, 518, 519, 5, 129, 65, 2, 519, 520, 5, + 165, 83, 2, 520, 140, 3, 2, 2, 2, 521, 522, 11, 2, 2, 2, 522, 142, 3, 2, + 2, 2, 523, 524, 9, 5, 2, 2, 524, 144, 3, 2, 2, 2, 525, 534, 7, 50, 2, 2, + 526, 530, 9, 6, 2, 2, 527, 529, 9, 4, 2, 2, 528, 527, 3, 2, 2, 2, 529, + 532, 3, 2, 2, 2, 530, 528, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 534, + 3, 2, 2, 2, 532, 530, 3, 2, 2, 2, 533, 525, 3, 2, 2, 2, 533, 526, 3, 2, + 2, 2, 534, 146, 3, 2, 2, 2, 535, 537, 9, 7, 2, 2, 536, 538, 9, 8, 2, 2, + 537, 536, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 540, 3, 2, 2, 2, 539, + 541, 9, 4, 2, 2, 540, 539, 3, 2, 2, 2, 541, 542, 3, 2, 2, 2, 542, 540, + 3, 2, 2, 2, 542, 543, 3, 2, 2, 2, 543, 148, 3, 2, 2, 2, 544, 545, 9, 9, + 2, 2, 545, 150, 3, 2, 2, 2, 546, 547, 5, 153, 77, 2, 547, 152, 3, 2, 2, + 2, 548, 549, 7, 97, 2, 2, 549, 154, 3, 2, 2, 2, 550, 551, 4, 50, 59, 2, + 551, 156, 3, 2, 2, 2, 552, 560, 7, 36, 2, 2, 553, 554, 7, 94, 2, 2, 554, + 559, 11, 2, 2, 2, 555, 556, 7, 36, 2, 2, 556, 559, 7, 36, 2, 2, 557, 559, + 10, 10, 2, 2, 558, 553, 3, 2, 2, 2, 558, 555, 3, 2, 2, 2, 558, 557, 3, + 2, 2, 2, 559, 562, 3, 2, 2, 2, 560, 558, 3, 2, 2, 2, 560, 561, 3, 2, 2, + 2, 561, 563, 3, 2, 2, 2, 562, 560, 3, 2, 2, 2, 563, 564, 7, 36, 2, 2, 564, + 158, 3, 2, 2, 2, 565, 573, 7, 41, 2, 2, 566, 567, 7, 94, 2, 2, 567, 572, + 11, 2, 2, 2, 568, 569, 7, 41, 2, 2, 569, 572, 7, 41, 2, 2, 570, 572, 10, + 11, 2, 2, 571, 566, 3, 2, 2, 2, 571, 568, 3, 2, 2, 2, 571, 570, 3, 2, 2, + 2, 572, 575, 3, 2, 2, 2, 573, 571, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, + 576, 3, 2, 2, 2, 575, 573, 3, 2, 2, 2, 576, 577, 7, 41, 2, 2, 577, 160, + 3, 2, 2, 2, 578, 584, 7, 98, 2, 2, 579, 580, 7, 94, 2, 2, 580, 583, 7, + 98, 2, 2, 581, 583, 10, 12, 2, 2, 582, 579, 3, 2, 2, 2, 582, 581, 3, 2, + 2, 2, 583, 586, 3, 2, 2, 2, 584, 582, 3, 2, 2, 2, 584, 585, 3, 2, 2, 2, + 585, 587, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 587, 588, 7, 98, 2, 2, 588, + 162, 3, 2, 2, 2, 589, 595, 7, 182, 2, 2, 590, 591, 7, 94, 2, 2, 591, 594, + 7, 182, 2, 2, 592, 594, 10, 13, 2, 2, 593, 590, 3, 2, 2, 2, 593, 592, 3, + 2, 2, 2, 594, 597, 3, 2, 2, 2, 595, 593, 3, 2, 2, 2, 595, 596, 3, 2, 2, + 2, 596, 598, 3, 2, 2, 2, 597, 595, 3, 2, 2, 2, 598, 599, 7, 182, 2, 2, + 599, 164, 3, 2, 2, 2, 600, 601, 7, 60, 2, 2, 601, 602, 7, 60, 2, 2, 602, + 166, 3, 2, 2, 2, 34, 2, 173, 187, 195, 260, 266, 354, 384, 444, 463, 469, + 474, 481, 486, 495, 500, 507, 510, 514, 516, 530, 533, 537, 542, 558, 560, + 571, 573, 582, 584, 593, 595, 3, 2, 3, 2, } var lexerChannelNames = []string{ @@ -308,8 +311,9 @@ var lexerSymbolicNames = []string{ "For", "Return", "Waitfor", "Options", "Distinct", "Filter", "Sort", "Limit", "Let", "Collect", "SortDirection", "None", "Null", "BooleanLiteral", "Use", "Into", "Keep", "With", "Count", "All", "Any", "Aggregate", "Event", "Like", - "Not", "In", "Do", "While", "Param", "Identifier", "StringLiteral", "IntegerLiteral", - "FloatLiteral", "NamespaceSegment", "UnknownIdentifier", + "Not", "In", "Do", "While", "Param", "Identifier", "IgnoreIdentifier", + "StringLiteral", "IntegerLiteral", "FloatLiteral", "NamespaceSegment", + "UnknownIdentifier", } var lexerRuleNames = []string{ @@ -321,9 +325,10 @@ var lexerRuleNames = []string{ "For", "Return", "Waitfor", "Options", "Distinct", "Filter", "Sort", "Limit", "Let", "Collect", "SortDirection", "None", "Null", "BooleanLiteral", "Use", "Into", "Keep", "With", "Count", "All", "Any", "Aggregate", "Event", "Like", - "Not", "In", "Do", "While", "Param", "Identifier", "StringLiteral", "IntegerLiteral", - "FloatLiteral", "NamespaceSegment", "UnknownIdentifier", "HexDigit", "DecimalIntegerLiteral", - "ExponentPart", "Letter", "Symbols", "Digit", "DQSring", "SQString", "BacktickString", + "Not", "In", "Do", "While", "Param", "Identifier", "IgnoreIdentifier", + "StringLiteral", "IntegerLiteral", "FloatLiteral", "NamespaceSegment", + "UnknownIdentifier", "HexDigit", "DecimalIntegerLiteral", "ExponentPart", + "Letter", "Symbols", "Underscore", "Digit", "DQSring", "SQString", "BacktickString", "TickString", "NamespaceSeparator", } @@ -428,9 +433,10 @@ const ( FqlLexerWhile = 62 FqlLexerParam = 63 FqlLexerIdentifier = 64 - FqlLexerStringLiteral = 65 - FqlLexerIntegerLiteral = 66 - FqlLexerFloatLiteral = 67 - FqlLexerNamespaceSegment = 68 - FqlLexerUnknownIdentifier = 69 + FqlLexerIgnoreIdentifier = 65 + FqlLexerStringLiteral = 66 + FqlLexerIntegerLiteral = 67 + FqlLexerFloatLiteral = 68 + FqlLexerNamespaceSegment = 69 + FqlLexerUnknownIdentifier = 70 ) diff --git a/pkg/parser/fql/fql_parser.go b/pkg/parser/fql/fql_parser.go index 9d281a1a..7a232039 100644 --- a/pkg/parser/fql/fql_parser.go +++ b/pkg/parser/fql/fql_parser.go @@ -15,7 +15,7 @@ var _ = reflect.Copy var _ = strconv.Itoa var parserATN = []uint16{ - 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 71, 616, + 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 72, 621, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, @@ -33,267 +33,269 @@ var parserATN = []uint16{ 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 7, 7, 161, 10, 7, 12, 7, 14, 7, 164, 11, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 5, 8, 171, 10, 8, 3, 9, 3, 9, 5, 9, 175, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, - 3, 11, 3, 11, 5, 11, 184, 10, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, - 12, 5, 12, 192, 10, 12, 3, 13, 3, 13, 5, 13, 196, 10, 13, 3, 14, 3, 14, - 3, 14, 3, 14, 5, 14, 202, 10, 14, 3, 14, 3, 14, 3, 14, 7, 14, 207, 10, - 14, 12, 14, 14, 14, 210, 11, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, - 14, 217, 10, 14, 3, 14, 3, 14, 3, 14, 7, 14, 222, 10, 14, 12, 14, 14, 14, - 225, 11, 14, 3, 14, 3, 14, 5, 14, 229, 10, 14, 3, 15, 3, 15, 3, 15, 3, - 15, 3, 15, 3, 15, 3, 15, 5, 15, 238, 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, - 5, 16, 244, 10, 16, 3, 17, 3, 17, 5, 17, 248, 10, 17, 3, 18, 3, 18, 5, - 18, 252, 10, 18, 3, 19, 3, 19, 5, 19, 256, 10, 19, 3, 20, 3, 20, 3, 20, - 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 265, 10, 21, 3, 22, 3, 22, 5, 22, 269, - 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 275, 10, 23, 12, 23, 14, 23, - 278, 11, 23, 3, 24, 3, 24, 5, 24, 282, 10, 24, 3, 25, 3, 25, 3, 25, 3, - 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, - 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 302, 10, 25, 3, 26, 3, 26, 3, 26, 3, - 26, 3, 27, 3, 27, 3, 27, 7, 27, 311, 10, 27, 12, 27, 14, 27, 314, 11, 27, - 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 320, 10, 28, 12, 28, 14, 28, 323, 11, - 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, - 5, 30, 335, 10, 30, 5, 30, 337, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, - 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 348, 10, 32, 3, 33, 3, 33, 3, 33, - 3, 33, 3, 33, 3, 33, 5, 33, 356, 10, 33, 3, 33, 5, 33, 359, 10, 33, 3, - 34, 3, 34, 3, 34, 5, 34, 364, 10, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, - 5, 35, 371, 10, 35, 3, 36, 3, 36, 3, 36, 5, 36, 376, 10, 36, 3, 37, 3, - 37, 3, 37, 5, 37, 381, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 387, - 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 7, 38, 393, 10, 38, 12, 38, 14, 38, - 396, 11, 38, 3, 38, 5, 38, 399, 10, 38, 5, 38, 401, 10, 38, 3, 38, 3, 38, - 3, 39, 3, 39, 3, 39, 3, 39, 7, 39, 409, 10, 39, 12, 39, 14, 39, 412, 11, - 39, 3, 39, 5, 39, 415, 10, 39, 5, 39, 417, 10, 39, 3, 39, 3, 39, 3, 40, - 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 430, 10, - 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 5, 42, 439, 10, 42, - 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, - 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, - 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 469, 10, 48, 3, - 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, - 3, 48, 5, 48, 483, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, + 3, 10, 3, 10, 3, 10, 5, 10, 185, 10, 10, 3, 11, 3, 11, 5, 11, 189, 10, + 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 197, 10, 12, 3, 13, + 3, 13, 5, 13, 201, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 207, 10, + 14, 3, 14, 3, 14, 3, 14, 7, 14, 212, 10, 14, 12, 14, 14, 14, 215, 11, 14, + 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 222, 10, 14, 3, 14, 3, 14, 3, + 14, 7, 14, 227, 10, 14, 12, 14, 14, 14, 230, 11, 14, 3, 14, 3, 14, 5, 14, + 234, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 243, + 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 249, 10, 16, 3, 17, 3, 17, 5, + 17, 253, 10, 17, 3, 18, 3, 18, 5, 18, 257, 10, 18, 3, 19, 3, 19, 5, 19, + 261, 10, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 270, + 10, 21, 3, 22, 3, 22, 5, 22, 274, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 7, + 23, 280, 10, 23, 12, 23, 14, 23, 283, 11, 23, 3, 24, 3, 24, 5, 24, 287, + 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, + 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 307, + 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 7, 27, 316, 10, + 27, 12, 27, 14, 27, 319, 11, 27, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 325, + 10, 28, 12, 28, 14, 28, 328, 11, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, + 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 340, 10, 30, 5, 30, 342, 10, + 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, + 353, 10, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 361, 10, + 33, 3, 33, 5, 33, 364, 10, 33, 3, 34, 3, 34, 3, 34, 5, 34, 369, 10, 34, + 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 5, 35, 376, 10, 35, 3, 36, 3, 36, 3, + 36, 5, 36, 381, 10, 36, 3, 37, 3, 37, 3, 37, 5, 37, 386, 10, 37, 3, 37, + 3, 37, 3, 37, 3, 37, 5, 37, 392, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 7, + 38, 398, 10, 38, 12, 38, 14, 38, 401, 11, 38, 3, 38, 5, 38, 404, 10, 38, + 5, 38, 406, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 7, 39, 414, + 10, 39, 12, 39, 14, 39, 417, 11, 39, 3, 39, 5, 39, 420, 10, 39, 5, 39, + 422, 10, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, + 40, 3, 40, 3, 40, 5, 40, 435, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, + 3, 42, 3, 42, 5, 42, 444, 10, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, + 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, + 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, + 48, 3, 48, 5, 48, 474, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, + 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 488, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, - 48, 3, 48, 5, 48, 514, 10, 48, 3, 48, 3, 48, 7, 48, 518, 10, 48, 12, 48, - 14, 48, 521, 11, 48, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 527, 10, 49, 3, - 50, 3, 50, 6, 50, 531, 10, 50, 13, 50, 14, 50, 532, 3, 51, 3, 51, 3, 51, - 3, 51, 3, 51, 5, 51, 540, 10, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, - 53, 5, 53, 548, 10, 53, 3, 54, 5, 54, 551, 10, 54, 3, 54, 3, 54, 3, 54, - 3, 54, 5, 54, 557, 10, 54, 3, 54, 5, 54, 560, 10, 54, 3, 55, 3, 55, 3, - 56, 3, 56, 3, 57, 7, 57, 567, 10, 57, 12, 57, 14, 57, 570, 11, 57, 3, 58, - 3, 58, 3, 58, 3, 58, 7, 58, 576, 10, 58, 12, 58, 14, 58, 579, 11, 58, 5, - 58, 581, 10, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, - 590, 10, 60, 3, 61, 3, 61, 3, 61, 5, 61, 595, 10, 61, 3, 62, 3, 62, 3, - 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, - 3, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 2, 3, 94, 71, 2, 4, 6, - 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, - 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, - 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, - 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 2, 10, - 3, 2, 48, 49, 6, 2, 30, 31, 37, 39, 41, 62, 66, 66, 4, 2, 48, 48, 56, 57, - 3, 2, 17, 22, 3, 2, 35, 36, 3, 2, 23, 25, 3, 2, 26, 27, 4, 2, 26, 27, 61, - 61, 2, 650, 2, 143, 3, 2, 2, 2, 4, 149, 3, 2, 2, 2, 6, 151, 3, 2, 2, 2, - 8, 153, 3, 2, 2, 2, 10, 156, 3, 2, 2, 2, 12, 162, 3, 2, 2, 2, 14, 170, - 3, 2, 2, 2, 16, 174, 3, 2, 2, 2, 18, 176, 3, 2, 2, 2, 20, 181, 3, 2, 2, - 2, 22, 187, 3, 2, 2, 2, 24, 195, 3, 2, 2, 2, 26, 228, 3, 2, 2, 2, 28, 237, - 3, 2, 2, 2, 30, 243, 3, 2, 2, 2, 32, 247, 3, 2, 2, 2, 34, 251, 3, 2, 2, - 2, 36, 255, 3, 2, 2, 2, 38, 257, 3, 2, 2, 2, 40, 260, 3, 2, 2, 2, 42, 268, - 3, 2, 2, 2, 44, 270, 3, 2, 2, 2, 46, 279, 3, 2, 2, 2, 48, 301, 3, 2, 2, - 2, 50, 303, 3, 2, 2, 2, 52, 307, 3, 2, 2, 2, 54, 315, 3, 2, 2, 2, 56, 324, - 3, 2, 2, 2, 58, 336, 3, 2, 2, 2, 60, 338, 3, 2, 2, 2, 62, 347, 3, 2, 2, - 2, 64, 349, 3, 2, 2, 2, 66, 363, 3, 2, 2, 2, 68, 370, 3, 2, 2, 2, 70, 375, - 3, 2, 2, 2, 72, 380, 3, 2, 2, 2, 74, 388, 3, 2, 2, 2, 76, 404, 3, 2, 2, - 2, 78, 429, 3, 2, 2, 2, 80, 431, 3, 2, 2, 2, 82, 438, 3, 2, 2, 2, 84, 440, - 3, 2, 2, 2, 86, 442, 3, 2, 2, 2, 88, 444, 3, 2, 2, 2, 90, 446, 3, 2, 2, - 2, 92, 448, 3, 2, 2, 2, 94, 468, 3, 2, 2, 2, 96, 522, 3, 2, 2, 2, 98, 528, - 3, 2, 2, 2, 100, 539, 3, 2, 2, 2, 102, 541, 3, 2, 2, 2, 104, 545, 3, 2, - 2, 2, 106, 559, 3, 2, 2, 2, 108, 561, 3, 2, 2, 2, 110, 563, 3, 2, 2, 2, - 112, 568, 3, 2, 2, 2, 114, 571, 3, 2, 2, 2, 116, 584, 3, 2, 2, 2, 118, - 589, 3, 2, 2, 2, 120, 594, 3, 2, 2, 2, 122, 596, 3, 2, 2, 2, 124, 598, - 3, 2, 2, 2, 126, 600, 3, 2, 2, 2, 128, 602, 3, 2, 2, 2, 130, 604, 3, 2, - 2, 2, 132, 606, 3, 2, 2, 2, 134, 608, 3, 2, 2, 2, 136, 610, 3, 2, 2, 2, - 138, 613, 3, 2, 2, 2, 140, 142, 5, 4, 3, 2, 141, 140, 3, 2, 2, 2, 142, - 145, 3, 2, 2, 2, 143, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 146, - 3, 2, 2, 2, 145, 143, 3, 2, 2, 2, 146, 147, 5, 12, 7, 2, 147, 148, 7, 2, - 2, 3, 148, 3, 3, 2, 2, 2, 149, 150, 5, 6, 4, 2, 150, 5, 3, 2, 2, 2, 151, - 152, 5, 8, 5, 2, 152, 7, 3, 2, 2, 2, 153, 154, 7, 51, 2, 2, 154, 155, 5, - 10, 6, 2, 155, 9, 3, 2, 2, 2, 156, 157, 5, 112, 57, 2, 157, 158, 7, 66, - 2, 2, 158, 11, 3, 2, 2, 2, 159, 161, 5, 14, 8, 2, 160, 159, 3, 2, 2, 2, - 161, 164, 3, 2, 2, 2, 162, 160, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, - 165, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 165, 166, 5, 16, 9, 2, 166, 13, - 3, 2, 2, 2, 167, 171, 5, 18, 10, 2, 168, 171, 5, 104, 53, 2, 169, 171, - 5, 64, 33, 2, 170, 167, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 169, 3, - 2, 2, 2, 171, 15, 3, 2, 2, 2, 172, 175, 5, 20, 11, 2, 173, 175, 5, 26, - 14, 2, 174, 172, 3, 2, 2, 2, 174, 173, 3, 2, 2, 2, 175, 17, 3, 2, 2, 2, - 176, 177, 7, 45, 2, 2, 177, 178, 7, 66, 2, 2, 178, 179, 7, 33, 2, 2, 179, - 180, 5, 94, 48, 2, 180, 19, 3, 2, 2, 2, 181, 183, 7, 38, 2, 2, 182, 184, - 7, 41, 2, 2, 183, 182, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 185, 3, 2, - 2, 2, 185, 186, 5, 94, 48, 2, 186, 21, 3, 2, 2, 2, 187, 188, 7, 13, 2, - 2, 188, 189, 5, 24, 13, 2, 189, 191, 7, 14, 2, 2, 190, 192, 5, 108, 55, - 2, 191, 190, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 23, 3, 2, 2, 2, 193, - 196, 5, 26, 14, 2, 194, 196, 5, 64, 33, 2, 195, 193, 3, 2, 2, 2, 195, 194, - 3, 2, 2, 2, 196, 25, 3, 2, 2, 2, 197, 198, 7, 37, 2, 2, 198, 201, 7, 66, - 2, 2, 199, 200, 7, 10, 2, 2, 200, 202, 7, 66, 2, 2, 201, 199, 3, 2, 2, - 2, 201, 202, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 7, 62, 2, 2, 204, - 208, 5, 28, 15, 2, 205, 207, 5, 34, 18, 2, 206, 205, 3, 2, 2, 2, 207, 210, - 3, 2, 2, 2, 208, 206, 3, 2, 2, 2, 208, 209, 3, 2, 2, 2, 209, 211, 3, 2, - 2, 2, 210, 208, 3, 2, 2, 2, 211, 212, 5, 36, 19, 2, 212, 229, 3, 2, 2, - 2, 213, 214, 7, 37, 2, 2, 214, 216, 7, 66, 2, 2, 215, 217, 7, 63, 2, 2, - 216, 215, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, - 219, 7, 64, 2, 2, 219, 223, 5, 94, 48, 2, 220, 222, 5, 34, 18, 2, 221, - 220, 3, 2, 2, 2, 222, 225, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 223, 224, - 3, 2, 2, 2, 224, 226, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 226, 227, 5, 36, - 19, 2, 227, 229, 3, 2, 2, 2, 228, 197, 3, 2, 2, 2, 228, 213, 3, 2, 2, 2, - 229, 27, 3, 2, 2, 2, 230, 238, 5, 104, 53, 2, 231, 238, 5, 74, 38, 2, 232, - 238, 5, 76, 39, 2, 233, 238, 5, 138, 70, 2, 234, 238, 5, 98, 50, 2, 235, - 238, 5, 72, 37, 2, 236, 238, 5, 136, 69, 2, 237, 230, 3, 2, 2, 2, 237, - 231, 3, 2, 2, 2, 237, 232, 3, 2, 2, 2, 237, 233, 3, 2, 2, 2, 237, 234, - 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 236, 3, 2, 2, 2, 238, 29, 3, 2, - 2, 2, 239, 244, 5, 40, 21, 2, 240, 244, 5, 44, 23, 2, 241, 244, 5, 38, - 20, 2, 242, 244, 5, 48, 25, 2, 243, 239, 3, 2, 2, 2, 243, 240, 3, 2, 2, - 2, 243, 241, 3, 2, 2, 2, 243, 242, 3, 2, 2, 2, 244, 31, 3, 2, 2, 2, 245, - 248, 5, 18, 10, 2, 246, 248, 5, 104, 53, 2, 247, 245, 3, 2, 2, 2, 247, - 246, 3, 2, 2, 2, 248, 33, 3, 2, 2, 2, 249, 252, 5, 32, 17, 2, 250, 252, - 5, 30, 16, 2, 251, 249, 3, 2, 2, 2, 251, 250, 3, 2, 2, 2, 252, 35, 3, 2, - 2, 2, 253, 256, 5, 20, 11, 2, 254, 256, 5, 26, 14, 2, 255, 253, 3, 2, 2, - 2, 255, 254, 3, 2, 2, 2, 256, 37, 3, 2, 2, 2, 257, 258, 7, 42, 2, 2, 258, - 259, 5, 94, 48, 2, 259, 39, 3, 2, 2, 2, 260, 261, 7, 44, 2, 2, 261, 264, - 5, 42, 22, 2, 262, 263, 7, 10, 2, 2, 263, 265, 5, 42, 22, 2, 264, 262, - 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 41, 3, 2, 2, 2, 266, 269, 7, 68, - 2, 2, 267, 269, 5, 136, 69, 2, 268, 266, 3, 2, 2, 2, 268, 267, 3, 2, 2, - 2, 269, 43, 3, 2, 2, 2, 270, 271, 7, 43, 2, 2, 271, 276, 5, 46, 24, 2, - 272, 273, 7, 10, 2, 2, 273, 275, 5, 46, 24, 2, 274, 272, 3, 2, 2, 2, 275, - 278, 3, 2, 2, 2, 276, 274, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 45, 3, - 2, 2, 2, 278, 276, 3, 2, 2, 2, 279, 281, 5, 94, 48, 2, 280, 282, 7, 47, - 2, 2, 281, 280, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 47, 3, 2, 2, 2, - 283, 284, 7, 46, 2, 2, 284, 302, 5, 60, 31, 2, 285, 286, 7, 46, 2, 2, 286, - 302, 5, 54, 28, 2, 287, 288, 7, 46, 2, 2, 288, 289, 5, 52, 27, 2, 289, - 290, 5, 54, 28, 2, 290, 302, 3, 2, 2, 2, 291, 292, 7, 46, 2, 2, 292, 293, - 5, 52, 27, 2, 293, 294, 5, 58, 30, 2, 294, 302, 3, 2, 2, 2, 295, 296, 7, - 46, 2, 2, 296, 297, 5, 52, 27, 2, 297, 298, 5, 60, 31, 2, 298, 302, 3, - 2, 2, 2, 299, 300, 7, 46, 2, 2, 300, 302, 5, 52, 27, 2, 301, 283, 3, 2, - 2, 2, 301, 285, 3, 2, 2, 2, 301, 287, 3, 2, 2, 2, 301, 291, 3, 2, 2, 2, - 301, 295, 3, 2, 2, 2, 301, 299, 3, 2, 2, 2, 302, 49, 3, 2, 2, 2, 303, 304, - 7, 66, 2, 2, 304, 305, 7, 33, 2, 2, 305, 306, 5, 94, 48, 2, 306, 51, 3, - 2, 2, 2, 307, 312, 5, 50, 26, 2, 308, 309, 7, 10, 2, 2, 309, 311, 5, 50, - 26, 2, 310, 308, 3, 2, 2, 2, 311, 314, 3, 2, 2, 2, 312, 310, 3, 2, 2, 2, - 312, 313, 3, 2, 2, 2, 313, 53, 3, 2, 2, 2, 314, 312, 3, 2, 2, 2, 315, 316, - 7, 58, 2, 2, 316, 321, 5, 56, 29, 2, 317, 318, 7, 10, 2, 2, 318, 320, 5, - 56, 29, 2, 319, 317, 3, 2, 2, 2, 320, 323, 3, 2, 2, 2, 321, 319, 3, 2, - 2, 2, 321, 322, 3, 2, 2, 2, 322, 55, 3, 2, 2, 2, 323, 321, 3, 2, 2, 2, - 324, 325, 7, 66, 2, 2, 325, 326, 7, 33, 2, 2, 326, 327, 5, 104, 53, 2, - 327, 57, 3, 2, 2, 2, 328, 329, 7, 52, 2, 2, 329, 337, 5, 50, 26, 2, 330, - 331, 7, 52, 2, 2, 331, 334, 7, 66, 2, 2, 332, 333, 7, 53, 2, 2, 333, 335, - 7, 66, 2, 2, 334, 332, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 337, 3, 2, - 2, 2, 336, 328, 3, 2, 2, 2, 336, 330, 3, 2, 2, 2, 337, 59, 3, 2, 2, 2, - 338, 339, 7, 54, 2, 2, 339, 340, 7, 55, 2, 2, 340, 341, 7, 52, 2, 2, 341, - 342, 7, 66, 2, 2, 342, 61, 3, 2, 2, 2, 343, 344, 7, 40, 2, 2, 344, 348, - 5, 76, 39, 2, 345, 346, 7, 40, 2, 2, 346, 348, 5, 138, 70, 2, 347, 343, - 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 348, 63, 3, 2, 2, 2, 349, 350, 7, 39, - 2, 2, 350, 351, 7, 59, 2, 2, 351, 352, 5, 68, 35, 2, 352, 353, 7, 62, 2, - 2, 353, 355, 5, 70, 36, 2, 354, 356, 5, 62, 32, 2, 355, 354, 3, 2, 2, 2, - 355, 356, 3, 2, 2, 2, 356, 358, 3, 2, 2, 2, 357, 359, 5, 66, 34, 2, 358, - 357, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 65, 3, 2, 2, 2, 360, 364, 5, - 90, 46, 2, 361, 364, 5, 138, 70, 2, 362, 364, 5, 136, 69, 2, 363, 360, - 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 363, 362, 3, 2, 2, 2, 364, 67, 3, 2, - 2, 2, 365, 371, 5, 86, 44, 2, 366, 371, 5, 138, 70, 2, 367, 371, 5, 136, - 69, 2, 368, 371, 5, 104, 53, 2, 369, 371, 5, 98, 50, 2, 370, 365, 3, 2, - 2, 2, 370, 366, 3, 2, 2, 2, 370, 367, 3, 2, 2, 2, 370, 368, 3, 2, 2, 2, - 370, 369, 3, 2, 2, 2, 371, 69, 3, 2, 2, 2, 372, 376, 5, 104, 53, 2, 373, - 376, 5, 138, 70, 2, 374, 376, 5, 98, 50, 2, 375, 372, 3, 2, 2, 2, 375, - 373, 3, 2, 2, 2, 375, 374, 3, 2, 2, 2, 376, 71, 3, 2, 2, 2, 377, 381, 5, - 90, 46, 2, 378, 381, 5, 138, 70, 2, 379, 381, 5, 136, 69, 2, 380, 377, - 3, 2, 2, 2, 380, 378, 3, 2, 2, 2, 380, 379, 3, 2, 2, 2, 381, 382, 3, 2, - 2, 2, 382, 386, 7, 32, 2, 2, 383, 387, 5, 90, 46, 2, 384, 387, 5, 138, - 70, 2, 385, 387, 5, 136, 69, 2, 386, 383, 3, 2, 2, 2, 386, 384, 3, 2, 2, - 2, 386, 385, 3, 2, 2, 2, 387, 73, 3, 2, 2, 2, 388, 400, 7, 11, 2, 2, 389, - 394, 5, 94, 48, 2, 390, 391, 7, 10, 2, 2, 391, 393, 5, 94, 48, 2, 392, - 390, 3, 2, 2, 2, 393, 396, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 394, 395, - 3, 2, 2, 2, 395, 398, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 397, 399, 7, 10, - 2, 2, 398, 397, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 401, 3, 2, 2, 2, - 400, 389, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, - 403, 7, 12, 2, 2, 403, 75, 3, 2, 2, 2, 404, 416, 7, 15, 2, 2, 405, 410, - 5, 78, 40, 2, 406, 407, 7, 10, 2, 2, 407, 409, 5, 78, 40, 2, 408, 406, - 3, 2, 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, - 2, 2, 411, 414, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 413, 415, 7, 10, 2, 2, - 414, 413, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 417, 3, 2, 2, 2, 416, - 405, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 419, - 7, 16, 2, 2, 419, 77, 3, 2, 2, 2, 420, 421, 5, 82, 42, 2, 421, 422, 7, - 7, 2, 2, 422, 423, 5, 94, 48, 2, 423, 430, 3, 2, 2, 2, 424, 425, 5, 80, - 41, 2, 425, 426, 7, 7, 2, 2, 426, 427, 5, 94, 48, 2, 427, 430, 3, 2, 2, - 2, 428, 430, 5, 138, 70, 2, 429, 420, 3, 2, 2, 2, 429, 424, 3, 2, 2, 2, - 429, 428, 3, 2, 2, 2, 430, 79, 3, 2, 2, 2, 431, 432, 7, 11, 2, 2, 432, - 433, 5, 94, 48, 2, 433, 434, 7, 12, 2, 2, 434, 81, 3, 2, 2, 2, 435, 439, - 7, 66, 2, 2, 436, 439, 5, 86, 44, 2, 437, 439, 5, 136, 69, 2, 438, 435, - 3, 2, 2, 2, 438, 436, 3, 2, 2, 2, 438, 437, 3, 2, 2, 2, 439, 83, 3, 2, - 2, 2, 440, 441, 7, 50, 2, 2, 441, 85, 3, 2, 2, 2, 442, 443, 7, 67, 2, 2, - 443, 87, 3, 2, 2, 2, 444, 445, 7, 69, 2, 2, 445, 89, 3, 2, 2, 2, 446, 447, - 7, 68, 2, 2, 447, 91, 3, 2, 2, 2, 448, 449, 9, 2, 2, 2, 449, 93, 3, 2, - 2, 2, 450, 451, 8, 48, 1, 2, 451, 452, 5, 134, 68, 2, 452, 453, 5, 94, - 48, 27, 453, 469, 3, 2, 2, 2, 454, 469, 5, 72, 37, 2, 455, 469, 5, 86, - 44, 2, 456, 469, 5, 88, 45, 2, 457, 469, 5, 90, 46, 2, 458, 469, 5, 84, - 43, 2, 459, 469, 5, 74, 38, 2, 460, 469, 5, 76, 39, 2, 461, 469, 5, 98, - 50, 2, 462, 469, 5, 104, 53, 2, 463, 469, 5, 136, 69, 2, 464, 469, 5, 138, - 70, 2, 465, 469, 5, 92, 47, 2, 466, 469, 5, 96, 49, 2, 467, 469, 5, 22, - 12, 2, 468, 450, 3, 2, 2, 2, 468, 454, 3, 2, 2, 2, 468, 455, 3, 2, 2, 2, - 468, 456, 3, 2, 2, 2, 468, 457, 3, 2, 2, 2, 468, 458, 3, 2, 2, 2, 468, - 459, 3, 2, 2, 2, 468, 460, 3, 2, 2, 2, 468, 461, 3, 2, 2, 2, 468, 462, - 3, 2, 2, 2, 468, 463, 3, 2, 2, 2, 468, 464, 3, 2, 2, 2, 468, 465, 3, 2, - 2, 2, 468, 466, 3, 2, 2, 2, 468, 467, 3, 2, 2, 2, 469, 519, 3, 2, 2, 2, - 470, 471, 12, 26, 2, 2, 471, 472, 5, 130, 66, 2, 472, 473, 5, 94, 48, 27, - 473, 518, 3, 2, 2, 2, 474, 475, 12, 25, 2, 2, 475, 476, 5, 132, 67, 2, - 476, 477, 5, 94, 48, 26, 477, 518, 3, 2, 2, 2, 478, 479, 12, 24, 2, 2, - 479, 482, 5, 116, 59, 2, 480, 483, 5, 118, 60, 2, 481, 483, 5, 122, 62, - 2, 482, 480, 3, 2, 2, 2, 482, 481, 3, 2, 2, 2, 483, 484, 3, 2, 2, 2, 484, - 485, 5, 94, 48, 25, 485, 518, 3, 2, 2, 2, 486, 487, 12, 23, 2, 2, 487, - 488, 5, 118, 60, 2, 488, 489, 5, 94, 48, 24, 489, 518, 3, 2, 2, 2, 490, - 491, 12, 22, 2, 2, 491, 492, 5, 120, 61, 2, 492, 493, 5, 94, 48, 23, 493, - 518, 3, 2, 2, 2, 494, 495, 12, 21, 2, 2, 495, 496, 5, 122, 62, 2, 496, - 497, 5, 94, 48, 22, 497, 518, 3, 2, 2, 2, 498, 499, 12, 20, 2, 2, 499, - 500, 5, 124, 63, 2, 500, 501, 5, 94, 48, 21, 501, 518, 3, 2, 2, 2, 502, - 503, 12, 19, 2, 2, 503, 504, 5, 126, 64, 2, 504, 505, 5, 94, 48, 20, 505, - 518, 3, 2, 2, 2, 506, 507, 12, 18, 2, 2, 507, 508, 5, 128, 65, 2, 508, - 509, 5, 94, 48, 19, 509, 518, 3, 2, 2, 2, 510, 511, 12, 17, 2, 2, 511, - 513, 7, 34, 2, 2, 512, 514, 5, 94, 48, 2, 513, 512, 3, 2, 2, 2, 513, 514, - 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 516, 7, 7, 2, 2, 516, 518, 5, 94, - 48, 18, 517, 470, 3, 2, 2, 2, 517, 474, 3, 2, 2, 2, 517, 478, 3, 2, 2, - 2, 517, 486, 3, 2, 2, 2, 517, 490, 3, 2, 2, 2, 517, 494, 3, 2, 2, 2, 517, - 498, 3, 2, 2, 2, 517, 502, 3, 2, 2, 2, 517, 506, 3, 2, 2, 2, 517, 510, - 3, 2, 2, 2, 518, 521, 3, 2, 2, 2, 519, 517, 3, 2, 2, 2, 519, 520, 3, 2, - 2, 2, 520, 95, 3, 2, 2, 2, 521, 519, 3, 2, 2, 2, 522, 523, 7, 13, 2, 2, - 523, 524, 5, 94, 48, 2, 524, 526, 7, 14, 2, 2, 525, 527, 5, 108, 55, 2, - 526, 525, 3, 2, 2, 2, 526, 527, 3, 2, 2, 2, 527, 97, 3, 2, 2, 2, 528, 530, - 5, 100, 51, 2, 529, 531, 5, 106, 54, 2, 530, 529, 3, 2, 2, 2, 531, 532, - 3, 2, 2, 2, 532, 530, 3, 2, 2, 2, 532, 533, 3, 2, 2, 2, 533, 99, 3, 2, - 2, 2, 534, 540, 5, 138, 70, 2, 535, 540, 5, 136, 69, 2, 536, 540, 5, 74, - 38, 2, 537, 540, 5, 76, 39, 2, 538, 540, 5, 102, 52, 2, 539, 534, 3, 2, - 2, 2, 539, 535, 3, 2, 2, 2, 539, 536, 3, 2, 2, 2, 539, 537, 3, 2, 2, 2, - 539, 538, 3, 2, 2, 2, 540, 101, 3, 2, 2, 2, 541, 542, 5, 112, 57, 2, 542, - 543, 5, 110, 56, 2, 543, 544, 5, 114, 58, 2, 544, 103, 3, 2, 2, 2, 545, - 547, 5, 102, 52, 2, 546, 548, 5, 108, 55, 2, 547, 546, 3, 2, 2, 2, 547, - 548, 3, 2, 2, 2, 548, 105, 3, 2, 2, 2, 549, 551, 7, 34, 2, 2, 550, 549, - 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 552, 3, 2, 2, 2, 552, 553, 7, 9, - 2, 2, 553, 560, 5, 82, 42, 2, 554, 555, 7, 34, 2, 2, 555, 557, 7, 9, 2, - 2, 556, 554, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, - 560, 5, 80, 41, 2, 559, 550, 3, 2, 2, 2, 559, 556, 3, 2, 2, 2, 560, 107, - 3, 2, 2, 2, 561, 562, 7, 34, 2, 2, 562, 109, 3, 2, 2, 2, 563, 564, 9, 3, - 2, 2, 564, 111, 3, 2, 2, 2, 565, 567, 7, 70, 2, 2, 566, 565, 3, 2, 2, 2, - 567, 570, 3, 2, 2, 2, 568, 566, 3, 2, 2, 2, 568, 569, 3, 2, 2, 2, 569, - 113, 3, 2, 2, 2, 570, 568, 3, 2, 2, 2, 571, 580, 7, 13, 2, 2, 572, 577, - 5, 94, 48, 2, 573, 574, 7, 10, 2, 2, 574, 576, 5, 94, 48, 2, 575, 573, - 3, 2, 2, 2, 576, 579, 3, 2, 2, 2, 577, 575, 3, 2, 2, 2, 577, 578, 3, 2, - 2, 2, 578, 581, 3, 2, 2, 2, 579, 577, 3, 2, 2, 2, 580, 572, 3, 2, 2, 2, - 580, 581, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 7, 14, 2, 2, 583, - 115, 3, 2, 2, 2, 584, 585, 9, 4, 2, 2, 585, 117, 3, 2, 2, 2, 586, 590, - 7, 62, 2, 2, 587, 588, 7, 61, 2, 2, 588, 590, 7, 62, 2, 2, 589, 586, 3, - 2, 2, 2, 589, 587, 3, 2, 2, 2, 590, 119, 3, 2, 2, 2, 591, 595, 7, 60, 2, - 2, 592, 593, 7, 61, 2, 2, 593, 595, 7, 60, 2, 2, 594, 591, 3, 2, 2, 2, - 594, 592, 3, 2, 2, 2, 595, 121, 3, 2, 2, 2, 596, 597, 9, 5, 2, 2, 597, - 123, 3, 2, 2, 2, 598, 599, 9, 6, 2, 2, 599, 125, 3, 2, 2, 2, 600, 601, - 7, 30, 2, 2, 601, 127, 3, 2, 2, 2, 602, 603, 7, 31, 2, 2, 603, 129, 3, - 2, 2, 2, 604, 605, 9, 7, 2, 2, 605, 131, 3, 2, 2, 2, 606, 607, 9, 8, 2, - 2, 607, 133, 3, 2, 2, 2, 608, 609, 9, 9, 2, 2, 609, 135, 3, 2, 2, 2, 610, - 611, 7, 65, 2, 2, 611, 612, 7, 66, 2, 2, 612, 137, 3, 2, 2, 2, 613, 614, - 7, 66, 2, 2, 614, 139, 3, 2, 2, 2, 61, 143, 162, 170, 174, 183, 191, 195, - 201, 208, 216, 223, 228, 237, 243, 247, 251, 255, 264, 268, 276, 281, 301, - 312, 321, 334, 336, 347, 355, 358, 363, 370, 375, 380, 386, 394, 398, 400, - 410, 414, 416, 429, 438, 468, 482, 513, 517, 519, 526, 532, 539, 547, 550, - 556, 559, 568, 577, 580, 589, 594, + 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 519, 10, 48, 3, 48, + 3, 48, 7, 48, 523, 10, 48, 12, 48, 14, 48, 526, 11, 48, 3, 49, 3, 49, 3, + 49, 3, 49, 5, 49, 532, 10, 49, 3, 50, 3, 50, 6, 50, 536, 10, 50, 13, 50, + 14, 50, 537, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 545, 10, 51, 3, + 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 5, 53, 553, 10, 53, 3, 54, 5, 54, + 556, 10, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 562, 10, 54, 3, 54, 5, + 54, 565, 10, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 7, 57, 572, 10, 57, + 12, 57, 14, 57, 575, 11, 57, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 581, 10, + 58, 12, 58, 14, 58, 584, 11, 58, 5, 58, 586, 10, 58, 3, 58, 3, 58, 3, 59, + 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 595, 10, 60, 3, 61, 3, 61, 3, 61, 5, + 61, 600, 10, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, + 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, + 70, 3, 70, 2, 3, 94, 71, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, + 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, + 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, + 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, + 130, 132, 134, 136, 138, 2, 10, 3, 2, 48, 49, 6, 2, 30, 31, 37, 39, 41, + 62, 66, 66, 4, 2, 48, 48, 56, 57, 3, 2, 17, 22, 3, 2, 35, 36, 3, 2, 23, + 25, 3, 2, 26, 27, 4, 2, 26, 27, 61, 61, 2, 656, 2, 143, 3, 2, 2, 2, 4, + 149, 3, 2, 2, 2, 6, 151, 3, 2, 2, 2, 8, 153, 3, 2, 2, 2, 10, 156, 3, 2, + 2, 2, 12, 162, 3, 2, 2, 2, 14, 170, 3, 2, 2, 2, 16, 174, 3, 2, 2, 2, 18, + 184, 3, 2, 2, 2, 20, 186, 3, 2, 2, 2, 22, 192, 3, 2, 2, 2, 24, 200, 3, + 2, 2, 2, 26, 233, 3, 2, 2, 2, 28, 242, 3, 2, 2, 2, 30, 248, 3, 2, 2, 2, + 32, 252, 3, 2, 2, 2, 34, 256, 3, 2, 2, 2, 36, 260, 3, 2, 2, 2, 38, 262, + 3, 2, 2, 2, 40, 265, 3, 2, 2, 2, 42, 273, 3, 2, 2, 2, 44, 275, 3, 2, 2, + 2, 46, 284, 3, 2, 2, 2, 48, 306, 3, 2, 2, 2, 50, 308, 3, 2, 2, 2, 52, 312, + 3, 2, 2, 2, 54, 320, 3, 2, 2, 2, 56, 329, 3, 2, 2, 2, 58, 341, 3, 2, 2, + 2, 60, 343, 3, 2, 2, 2, 62, 352, 3, 2, 2, 2, 64, 354, 3, 2, 2, 2, 66, 368, + 3, 2, 2, 2, 68, 375, 3, 2, 2, 2, 70, 380, 3, 2, 2, 2, 72, 385, 3, 2, 2, + 2, 74, 393, 3, 2, 2, 2, 76, 409, 3, 2, 2, 2, 78, 434, 3, 2, 2, 2, 80, 436, + 3, 2, 2, 2, 82, 443, 3, 2, 2, 2, 84, 445, 3, 2, 2, 2, 86, 447, 3, 2, 2, + 2, 88, 449, 3, 2, 2, 2, 90, 451, 3, 2, 2, 2, 92, 453, 3, 2, 2, 2, 94, 473, + 3, 2, 2, 2, 96, 527, 3, 2, 2, 2, 98, 533, 3, 2, 2, 2, 100, 544, 3, 2, 2, + 2, 102, 546, 3, 2, 2, 2, 104, 550, 3, 2, 2, 2, 106, 564, 3, 2, 2, 2, 108, + 566, 3, 2, 2, 2, 110, 568, 3, 2, 2, 2, 112, 573, 3, 2, 2, 2, 114, 576, + 3, 2, 2, 2, 116, 589, 3, 2, 2, 2, 118, 594, 3, 2, 2, 2, 120, 599, 3, 2, + 2, 2, 122, 601, 3, 2, 2, 2, 124, 603, 3, 2, 2, 2, 126, 605, 3, 2, 2, 2, + 128, 607, 3, 2, 2, 2, 130, 609, 3, 2, 2, 2, 132, 611, 3, 2, 2, 2, 134, + 613, 3, 2, 2, 2, 136, 615, 3, 2, 2, 2, 138, 618, 3, 2, 2, 2, 140, 142, + 5, 4, 3, 2, 141, 140, 3, 2, 2, 2, 142, 145, 3, 2, 2, 2, 143, 141, 3, 2, + 2, 2, 143, 144, 3, 2, 2, 2, 144, 146, 3, 2, 2, 2, 145, 143, 3, 2, 2, 2, + 146, 147, 5, 12, 7, 2, 147, 148, 7, 2, 2, 3, 148, 3, 3, 2, 2, 2, 149, 150, + 5, 6, 4, 2, 150, 5, 3, 2, 2, 2, 151, 152, 5, 8, 5, 2, 152, 7, 3, 2, 2, + 2, 153, 154, 7, 51, 2, 2, 154, 155, 5, 10, 6, 2, 155, 9, 3, 2, 2, 2, 156, + 157, 5, 112, 57, 2, 157, 158, 7, 66, 2, 2, 158, 11, 3, 2, 2, 2, 159, 161, + 5, 14, 8, 2, 160, 159, 3, 2, 2, 2, 161, 164, 3, 2, 2, 2, 162, 160, 3, 2, + 2, 2, 162, 163, 3, 2, 2, 2, 163, 165, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, + 165, 166, 5, 16, 9, 2, 166, 13, 3, 2, 2, 2, 167, 171, 5, 18, 10, 2, 168, + 171, 5, 104, 53, 2, 169, 171, 5, 64, 33, 2, 170, 167, 3, 2, 2, 2, 170, + 168, 3, 2, 2, 2, 170, 169, 3, 2, 2, 2, 171, 15, 3, 2, 2, 2, 172, 175, 5, + 20, 11, 2, 173, 175, 5, 26, 14, 2, 174, 172, 3, 2, 2, 2, 174, 173, 3, 2, + 2, 2, 175, 17, 3, 2, 2, 2, 176, 177, 7, 45, 2, 2, 177, 178, 7, 66, 2, 2, + 178, 179, 7, 33, 2, 2, 179, 185, 5, 94, 48, 2, 180, 181, 7, 45, 2, 2, 181, + 182, 7, 67, 2, 2, 182, 183, 7, 33, 2, 2, 183, 185, 5, 94, 48, 2, 184, 176, + 3, 2, 2, 2, 184, 180, 3, 2, 2, 2, 185, 19, 3, 2, 2, 2, 186, 188, 7, 38, + 2, 2, 187, 189, 7, 41, 2, 2, 188, 187, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, + 189, 190, 3, 2, 2, 2, 190, 191, 5, 94, 48, 2, 191, 21, 3, 2, 2, 2, 192, + 193, 7, 13, 2, 2, 193, 194, 5, 24, 13, 2, 194, 196, 7, 14, 2, 2, 195, 197, + 5, 108, 55, 2, 196, 195, 3, 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, 23, 3, + 2, 2, 2, 198, 201, 5, 26, 14, 2, 199, 201, 5, 64, 33, 2, 200, 198, 3, 2, + 2, 2, 200, 199, 3, 2, 2, 2, 201, 25, 3, 2, 2, 2, 202, 203, 7, 37, 2, 2, + 203, 206, 7, 66, 2, 2, 204, 205, 7, 10, 2, 2, 205, 207, 7, 66, 2, 2, 206, + 204, 3, 2, 2, 2, 206, 207, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 209, + 7, 62, 2, 2, 209, 213, 5, 28, 15, 2, 210, 212, 5, 34, 18, 2, 211, 210, + 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, + 2, 2, 214, 216, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 217, 5, 36, 19, + 2, 217, 234, 3, 2, 2, 2, 218, 219, 7, 37, 2, 2, 219, 221, 7, 66, 2, 2, + 220, 222, 7, 63, 2, 2, 221, 220, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, + 223, 3, 2, 2, 2, 223, 224, 7, 64, 2, 2, 224, 228, 5, 94, 48, 2, 225, 227, + 5, 34, 18, 2, 226, 225, 3, 2, 2, 2, 227, 230, 3, 2, 2, 2, 228, 226, 3, + 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 231, 3, 2, 2, 2, 230, 228, 3, 2, 2, + 2, 231, 232, 5, 36, 19, 2, 232, 234, 3, 2, 2, 2, 233, 202, 3, 2, 2, 2, + 233, 218, 3, 2, 2, 2, 234, 27, 3, 2, 2, 2, 235, 243, 5, 104, 53, 2, 236, + 243, 5, 74, 38, 2, 237, 243, 5, 76, 39, 2, 238, 243, 5, 138, 70, 2, 239, + 243, 5, 98, 50, 2, 240, 243, 5, 72, 37, 2, 241, 243, 5, 136, 69, 2, 242, + 235, 3, 2, 2, 2, 242, 236, 3, 2, 2, 2, 242, 237, 3, 2, 2, 2, 242, 238, + 3, 2, 2, 2, 242, 239, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 242, 241, 3, 2, + 2, 2, 243, 29, 3, 2, 2, 2, 244, 249, 5, 40, 21, 2, 245, 249, 5, 44, 23, + 2, 246, 249, 5, 38, 20, 2, 247, 249, 5, 48, 25, 2, 248, 244, 3, 2, 2, 2, + 248, 245, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 247, 3, 2, 2, 2, 249, + 31, 3, 2, 2, 2, 250, 253, 5, 18, 10, 2, 251, 253, 5, 104, 53, 2, 252, 250, + 3, 2, 2, 2, 252, 251, 3, 2, 2, 2, 253, 33, 3, 2, 2, 2, 254, 257, 5, 32, + 17, 2, 255, 257, 5, 30, 16, 2, 256, 254, 3, 2, 2, 2, 256, 255, 3, 2, 2, + 2, 257, 35, 3, 2, 2, 2, 258, 261, 5, 20, 11, 2, 259, 261, 5, 26, 14, 2, + 260, 258, 3, 2, 2, 2, 260, 259, 3, 2, 2, 2, 261, 37, 3, 2, 2, 2, 262, 263, + 7, 42, 2, 2, 263, 264, 5, 94, 48, 2, 264, 39, 3, 2, 2, 2, 265, 266, 7, + 44, 2, 2, 266, 269, 5, 42, 22, 2, 267, 268, 7, 10, 2, 2, 268, 270, 5, 42, + 22, 2, 269, 267, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 41, 3, 2, 2, 2, + 271, 274, 7, 69, 2, 2, 272, 274, 5, 136, 69, 2, 273, 271, 3, 2, 2, 2, 273, + 272, 3, 2, 2, 2, 274, 43, 3, 2, 2, 2, 275, 276, 7, 43, 2, 2, 276, 281, + 5, 46, 24, 2, 277, 278, 7, 10, 2, 2, 278, 280, 5, 46, 24, 2, 279, 277, + 3, 2, 2, 2, 280, 283, 3, 2, 2, 2, 281, 279, 3, 2, 2, 2, 281, 282, 3, 2, + 2, 2, 282, 45, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 284, 286, 5, 94, 48, 2, + 285, 287, 7, 47, 2, 2, 286, 285, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, + 47, 3, 2, 2, 2, 288, 289, 7, 46, 2, 2, 289, 307, 5, 60, 31, 2, 290, 291, + 7, 46, 2, 2, 291, 307, 5, 54, 28, 2, 292, 293, 7, 46, 2, 2, 293, 294, 5, + 52, 27, 2, 294, 295, 5, 54, 28, 2, 295, 307, 3, 2, 2, 2, 296, 297, 7, 46, + 2, 2, 297, 298, 5, 52, 27, 2, 298, 299, 5, 58, 30, 2, 299, 307, 3, 2, 2, + 2, 300, 301, 7, 46, 2, 2, 301, 302, 5, 52, 27, 2, 302, 303, 5, 60, 31, + 2, 303, 307, 3, 2, 2, 2, 304, 305, 7, 46, 2, 2, 305, 307, 5, 52, 27, 2, + 306, 288, 3, 2, 2, 2, 306, 290, 3, 2, 2, 2, 306, 292, 3, 2, 2, 2, 306, + 296, 3, 2, 2, 2, 306, 300, 3, 2, 2, 2, 306, 304, 3, 2, 2, 2, 307, 49, 3, + 2, 2, 2, 308, 309, 7, 66, 2, 2, 309, 310, 7, 33, 2, 2, 310, 311, 5, 94, + 48, 2, 311, 51, 3, 2, 2, 2, 312, 317, 5, 50, 26, 2, 313, 314, 7, 10, 2, + 2, 314, 316, 5, 50, 26, 2, 315, 313, 3, 2, 2, 2, 316, 319, 3, 2, 2, 2, + 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 53, 3, 2, 2, 2, 319, 317, + 3, 2, 2, 2, 320, 321, 7, 58, 2, 2, 321, 326, 5, 56, 29, 2, 322, 323, 7, + 10, 2, 2, 323, 325, 5, 56, 29, 2, 324, 322, 3, 2, 2, 2, 325, 328, 3, 2, + 2, 2, 326, 324, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 55, 3, 2, 2, 2, + 328, 326, 3, 2, 2, 2, 329, 330, 7, 66, 2, 2, 330, 331, 7, 33, 2, 2, 331, + 332, 5, 104, 53, 2, 332, 57, 3, 2, 2, 2, 333, 334, 7, 52, 2, 2, 334, 342, + 5, 50, 26, 2, 335, 336, 7, 52, 2, 2, 336, 339, 7, 66, 2, 2, 337, 338, 7, + 53, 2, 2, 338, 340, 7, 66, 2, 2, 339, 337, 3, 2, 2, 2, 339, 340, 3, 2, + 2, 2, 340, 342, 3, 2, 2, 2, 341, 333, 3, 2, 2, 2, 341, 335, 3, 2, 2, 2, + 342, 59, 3, 2, 2, 2, 343, 344, 7, 54, 2, 2, 344, 345, 7, 55, 2, 2, 345, + 346, 7, 52, 2, 2, 346, 347, 7, 66, 2, 2, 347, 61, 3, 2, 2, 2, 348, 349, + 7, 40, 2, 2, 349, 353, 5, 76, 39, 2, 350, 351, 7, 40, 2, 2, 351, 353, 5, + 138, 70, 2, 352, 348, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 353, 63, 3, 2, + 2, 2, 354, 355, 7, 39, 2, 2, 355, 356, 7, 59, 2, 2, 356, 357, 5, 68, 35, + 2, 357, 358, 7, 62, 2, 2, 358, 360, 5, 70, 36, 2, 359, 361, 5, 62, 32, + 2, 360, 359, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 363, 3, 2, 2, 2, 362, + 364, 5, 66, 34, 2, 363, 362, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 65, + 3, 2, 2, 2, 365, 369, 5, 90, 46, 2, 366, 369, 5, 138, 70, 2, 367, 369, + 5, 136, 69, 2, 368, 365, 3, 2, 2, 2, 368, 366, 3, 2, 2, 2, 368, 367, 3, + 2, 2, 2, 369, 67, 3, 2, 2, 2, 370, 376, 5, 86, 44, 2, 371, 376, 5, 138, + 70, 2, 372, 376, 5, 136, 69, 2, 373, 376, 5, 104, 53, 2, 374, 376, 5, 98, + 50, 2, 375, 370, 3, 2, 2, 2, 375, 371, 3, 2, 2, 2, 375, 372, 3, 2, 2, 2, + 375, 373, 3, 2, 2, 2, 375, 374, 3, 2, 2, 2, 376, 69, 3, 2, 2, 2, 377, 381, + 5, 104, 53, 2, 378, 381, 5, 138, 70, 2, 379, 381, 5, 98, 50, 2, 380, 377, + 3, 2, 2, 2, 380, 378, 3, 2, 2, 2, 380, 379, 3, 2, 2, 2, 381, 71, 3, 2, + 2, 2, 382, 386, 5, 90, 46, 2, 383, 386, 5, 138, 70, 2, 384, 386, 5, 136, + 69, 2, 385, 382, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 385, 384, 3, 2, 2, 2, + 386, 387, 3, 2, 2, 2, 387, 391, 7, 32, 2, 2, 388, 392, 5, 90, 46, 2, 389, + 392, 5, 138, 70, 2, 390, 392, 5, 136, 69, 2, 391, 388, 3, 2, 2, 2, 391, + 389, 3, 2, 2, 2, 391, 390, 3, 2, 2, 2, 392, 73, 3, 2, 2, 2, 393, 405, 7, + 11, 2, 2, 394, 399, 5, 94, 48, 2, 395, 396, 7, 10, 2, 2, 396, 398, 5, 94, + 48, 2, 397, 395, 3, 2, 2, 2, 398, 401, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, + 399, 400, 3, 2, 2, 2, 400, 403, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 402, + 404, 7, 10, 2, 2, 403, 402, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 406, + 3, 2, 2, 2, 405, 394, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 407, 3, 2, + 2, 2, 407, 408, 7, 12, 2, 2, 408, 75, 3, 2, 2, 2, 409, 421, 7, 15, 2, 2, + 410, 415, 5, 78, 40, 2, 411, 412, 7, 10, 2, 2, 412, 414, 5, 78, 40, 2, + 413, 411, 3, 2, 2, 2, 414, 417, 3, 2, 2, 2, 415, 413, 3, 2, 2, 2, 415, + 416, 3, 2, 2, 2, 416, 419, 3, 2, 2, 2, 417, 415, 3, 2, 2, 2, 418, 420, + 7, 10, 2, 2, 419, 418, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 422, 3, 2, + 2, 2, 421, 410, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, + 423, 424, 7, 16, 2, 2, 424, 77, 3, 2, 2, 2, 425, 426, 5, 82, 42, 2, 426, + 427, 7, 7, 2, 2, 427, 428, 5, 94, 48, 2, 428, 435, 3, 2, 2, 2, 429, 430, + 5, 80, 41, 2, 430, 431, 7, 7, 2, 2, 431, 432, 5, 94, 48, 2, 432, 435, 3, + 2, 2, 2, 433, 435, 5, 138, 70, 2, 434, 425, 3, 2, 2, 2, 434, 429, 3, 2, + 2, 2, 434, 433, 3, 2, 2, 2, 435, 79, 3, 2, 2, 2, 436, 437, 7, 11, 2, 2, + 437, 438, 5, 94, 48, 2, 438, 439, 7, 12, 2, 2, 439, 81, 3, 2, 2, 2, 440, + 444, 7, 66, 2, 2, 441, 444, 5, 86, 44, 2, 442, 444, 5, 136, 69, 2, 443, + 440, 3, 2, 2, 2, 443, 441, 3, 2, 2, 2, 443, 442, 3, 2, 2, 2, 444, 83, 3, + 2, 2, 2, 445, 446, 7, 50, 2, 2, 446, 85, 3, 2, 2, 2, 447, 448, 7, 68, 2, + 2, 448, 87, 3, 2, 2, 2, 449, 450, 7, 70, 2, 2, 450, 89, 3, 2, 2, 2, 451, + 452, 7, 69, 2, 2, 452, 91, 3, 2, 2, 2, 453, 454, 9, 2, 2, 2, 454, 93, 3, + 2, 2, 2, 455, 456, 8, 48, 1, 2, 456, 457, 5, 134, 68, 2, 457, 458, 5, 94, + 48, 27, 458, 474, 3, 2, 2, 2, 459, 474, 5, 72, 37, 2, 460, 474, 5, 86, + 44, 2, 461, 474, 5, 88, 45, 2, 462, 474, 5, 90, 46, 2, 463, 474, 5, 84, + 43, 2, 464, 474, 5, 74, 38, 2, 465, 474, 5, 76, 39, 2, 466, 474, 5, 98, + 50, 2, 467, 474, 5, 104, 53, 2, 468, 474, 5, 136, 69, 2, 469, 474, 5, 138, + 70, 2, 470, 474, 5, 92, 47, 2, 471, 474, 5, 96, 49, 2, 472, 474, 5, 22, + 12, 2, 473, 455, 3, 2, 2, 2, 473, 459, 3, 2, 2, 2, 473, 460, 3, 2, 2, 2, + 473, 461, 3, 2, 2, 2, 473, 462, 3, 2, 2, 2, 473, 463, 3, 2, 2, 2, 473, + 464, 3, 2, 2, 2, 473, 465, 3, 2, 2, 2, 473, 466, 3, 2, 2, 2, 473, 467, + 3, 2, 2, 2, 473, 468, 3, 2, 2, 2, 473, 469, 3, 2, 2, 2, 473, 470, 3, 2, + 2, 2, 473, 471, 3, 2, 2, 2, 473, 472, 3, 2, 2, 2, 474, 524, 3, 2, 2, 2, + 475, 476, 12, 26, 2, 2, 476, 477, 5, 130, 66, 2, 477, 478, 5, 94, 48, 27, + 478, 523, 3, 2, 2, 2, 479, 480, 12, 25, 2, 2, 480, 481, 5, 132, 67, 2, + 481, 482, 5, 94, 48, 26, 482, 523, 3, 2, 2, 2, 483, 484, 12, 24, 2, 2, + 484, 487, 5, 116, 59, 2, 485, 488, 5, 118, 60, 2, 486, 488, 5, 122, 62, + 2, 487, 485, 3, 2, 2, 2, 487, 486, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, + 490, 5, 94, 48, 25, 490, 523, 3, 2, 2, 2, 491, 492, 12, 23, 2, 2, 492, + 493, 5, 118, 60, 2, 493, 494, 5, 94, 48, 24, 494, 523, 3, 2, 2, 2, 495, + 496, 12, 22, 2, 2, 496, 497, 5, 120, 61, 2, 497, 498, 5, 94, 48, 23, 498, + 523, 3, 2, 2, 2, 499, 500, 12, 21, 2, 2, 500, 501, 5, 122, 62, 2, 501, + 502, 5, 94, 48, 22, 502, 523, 3, 2, 2, 2, 503, 504, 12, 20, 2, 2, 504, + 505, 5, 124, 63, 2, 505, 506, 5, 94, 48, 21, 506, 523, 3, 2, 2, 2, 507, + 508, 12, 19, 2, 2, 508, 509, 5, 126, 64, 2, 509, 510, 5, 94, 48, 20, 510, + 523, 3, 2, 2, 2, 511, 512, 12, 18, 2, 2, 512, 513, 5, 128, 65, 2, 513, + 514, 5, 94, 48, 19, 514, 523, 3, 2, 2, 2, 515, 516, 12, 17, 2, 2, 516, + 518, 7, 34, 2, 2, 517, 519, 5, 94, 48, 2, 518, 517, 3, 2, 2, 2, 518, 519, + 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 521, 7, 7, 2, 2, 521, 523, 5, 94, + 48, 18, 522, 475, 3, 2, 2, 2, 522, 479, 3, 2, 2, 2, 522, 483, 3, 2, 2, + 2, 522, 491, 3, 2, 2, 2, 522, 495, 3, 2, 2, 2, 522, 499, 3, 2, 2, 2, 522, + 503, 3, 2, 2, 2, 522, 507, 3, 2, 2, 2, 522, 511, 3, 2, 2, 2, 522, 515, + 3, 2, 2, 2, 523, 526, 3, 2, 2, 2, 524, 522, 3, 2, 2, 2, 524, 525, 3, 2, + 2, 2, 525, 95, 3, 2, 2, 2, 526, 524, 3, 2, 2, 2, 527, 528, 7, 13, 2, 2, + 528, 529, 5, 94, 48, 2, 529, 531, 7, 14, 2, 2, 530, 532, 5, 108, 55, 2, + 531, 530, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 97, 3, 2, 2, 2, 533, 535, + 5, 100, 51, 2, 534, 536, 5, 106, 54, 2, 535, 534, 3, 2, 2, 2, 536, 537, + 3, 2, 2, 2, 537, 535, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 99, 3, 2, + 2, 2, 539, 545, 5, 138, 70, 2, 540, 545, 5, 136, 69, 2, 541, 545, 5, 74, + 38, 2, 542, 545, 5, 76, 39, 2, 543, 545, 5, 102, 52, 2, 544, 539, 3, 2, + 2, 2, 544, 540, 3, 2, 2, 2, 544, 541, 3, 2, 2, 2, 544, 542, 3, 2, 2, 2, + 544, 543, 3, 2, 2, 2, 545, 101, 3, 2, 2, 2, 546, 547, 5, 112, 57, 2, 547, + 548, 5, 110, 56, 2, 548, 549, 5, 114, 58, 2, 549, 103, 3, 2, 2, 2, 550, + 552, 5, 102, 52, 2, 551, 553, 5, 108, 55, 2, 552, 551, 3, 2, 2, 2, 552, + 553, 3, 2, 2, 2, 553, 105, 3, 2, 2, 2, 554, 556, 7, 34, 2, 2, 555, 554, + 3, 2, 2, 2, 555, 556, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 7, 9, + 2, 2, 558, 565, 5, 82, 42, 2, 559, 560, 7, 34, 2, 2, 560, 562, 7, 9, 2, + 2, 561, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 563, 3, 2, 2, 2, 563, + 565, 5, 80, 41, 2, 564, 555, 3, 2, 2, 2, 564, 561, 3, 2, 2, 2, 565, 107, + 3, 2, 2, 2, 566, 567, 7, 34, 2, 2, 567, 109, 3, 2, 2, 2, 568, 569, 9, 3, + 2, 2, 569, 111, 3, 2, 2, 2, 570, 572, 7, 71, 2, 2, 571, 570, 3, 2, 2, 2, + 572, 575, 3, 2, 2, 2, 573, 571, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, + 113, 3, 2, 2, 2, 575, 573, 3, 2, 2, 2, 576, 585, 7, 13, 2, 2, 577, 582, + 5, 94, 48, 2, 578, 579, 7, 10, 2, 2, 579, 581, 5, 94, 48, 2, 580, 578, + 3, 2, 2, 2, 581, 584, 3, 2, 2, 2, 582, 580, 3, 2, 2, 2, 582, 583, 3, 2, + 2, 2, 583, 586, 3, 2, 2, 2, 584, 582, 3, 2, 2, 2, 585, 577, 3, 2, 2, 2, + 585, 586, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 588, 7, 14, 2, 2, 588, + 115, 3, 2, 2, 2, 589, 590, 9, 4, 2, 2, 590, 117, 3, 2, 2, 2, 591, 595, + 7, 62, 2, 2, 592, 593, 7, 61, 2, 2, 593, 595, 7, 62, 2, 2, 594, 591, 3, + 2, 2, 2, 594, 592, 3, 2, 2, 2, 595, 119, 3, 2, 2, 2, 596, 600, 7, 60, 2, + 2, 597, 598, 7, 61, 2, 2, 598, 600, 7, 60, 2, 2, 599, 596, 3, 2, 2, 2, + 599, 597, 3, 2, 2, 2, 600, 121, 3, 2, 2, 2, 601, 602, 9, 5, 2, 2, 602, + 123, 3, 2, 2, 2, 603, 604, 9, 6, 2, 2, 604, 125, 3, 2, 2, 2, 605, 606, + 7, 30, 2, 2, 606, 127, 3, 2, 2, 2, 607, 608, 7, 31, 2, 2, 608, 129, 3, + 2, 2, 2, 609, 610, 9, 7, 2, 2, 610, 131, 3, 2, 2, 2, 611, 612, 9, 8, 2, + 2, 612, 133, 3, 2, 2, 2, 613, 614, 9, 9, 2, 2, 614, 135, 3, 2, 2, 2, 615, + 616, 7, 65, 2, 2, 616, 617, 7, 66, 2, 2, 617, 137, 3, 2, 2, 2, 618, 619, + 7, 66, 2, 2, 619, 139, 3, 2, 2, 2, 62, 143, 162, 170, 174, 184, 188, 196, + 200, 206, 213, 221, 228, 233, 242, 248, 252, 256, 260, 269, 273, 281, 286, + 306, 317, 326, 339, 341, 352, 360, 363, 368, 375, 380, 385, 391, 399, 403, + 405, 415, 419, 421, 434, 443, 473, 487, 518, 522, 524, 531, 537, 544, 552, + 555, 561, 564, 573, 582, 585, 594, 599, } var literalNames = []string{ "", "", "", "", "", "':'", "';'", "'.'", "','", "'['", "']'", "'('", "')'", @@ -313,8 +315,9 @@ var symbolicNames = []string{ "For", "Return", "Waitfor", "Options", "Distinct", "Filter", "Sort", "Limit", "Let", "Collect", "SortDirection", "None", "Null", "BooleanLiteral", "Use", "Into", "Keep", "With", "Count", "All", "Any", "Aggregate", "Event", "Like", - "Not", "In", "Do", "While", "Param", "Identifier", "StringLiteral", "IntegerLiteral", - "FloatLiteral", "NamespaceSegment", "UnknownIdentifier", + "Not", "In", "Do", "While", "Param", "Identifier", "IgnoreIdentifier", + "StringLiteral", "IntegerLiteral", "FloatLiteral", "NamespaceSegment", + "UnknownIdentifier", } var ruleNames = []string{ @@ -432,11 +435,12 @@ const ( FqlParserWhile = 62 FqlParserParam = 63 FqlParserIdentifier = 64 - FqlParserStringLiteral = 65 - FqlParserIntegerLiteral = 66 - FqlParserFloatLiteral = 67 - FqlParserNamespaceSegment = 68 - FqlParserUnknownIdentifier = 69 + FqlParserIgnoreIdentifier = 65 + FqlParserStringLiteral = 66 + FqlParserIntegerLiteral = 67 + FqlParserFloatLiteral = 68 + FqlParserNamespaceSegment = 69 + FqlParserUnknownIdentifier = 70 ) // FqlParser rules. @@ -1600,6 +1604,10 @@ func (s *VariableDeclarationContext) Expression() IExpressionContext { return t.(IExpressionContext) } +func (s *VariableDeclarationContext) IgnoreIdentifier() antlr.TerminalNode { + return s.GetToken(FqlParserIgnoreIdentifier, 0) +} + func (s *VariableDeclarationContext) GetRuleContext() antlr.RuleContext { return s } @@ -1650,22 +1658,47 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) } }() - p.EnterOuterAlt(localctx, 1) - { - p.SetState(174) - p.Match(FqlParserLet) - } - { - p.SetState(175) - p.Match(FqlParserIdentifier) - } - { - p.SetState(176) - p.Match(FqlParserAssign) - } - { - p.SetState(177) - p.expression(0) + p.SetState(182) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 4, p.GetParserRuleContext()) { + case 1: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(174) + p.Match(FqlParserLet) + } + { + p.SetState(175) + p.Match(FqlParserIdentifier) + } + { + p.SetState(176) + p.Match(FqlParserAssign) + } + { + p.SetState(177) + p.expression(0) + } + + case 2: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(178) + p.Match(FqlParserLet) + } + { + p.SetState(179) + p.Match(FqlParserIgnoreIdentifier) + } + { + p.SetState(180) + p.Match(FqlParserAssign) + } + { + p.SetState(181) + p.expression(0) + } + } return localctx @@ -1779,21 +1812,21 @@ func (p *FqlParser) ReturnExpression() (localctx IReturnExpressionContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(179) + p.SetState(184) p.Match(FqlParserReturn) } - p.SetState(181) + p.SetState(186) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 4, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 5, p.GetParserRuleContext()) == 1 { { - p.SetState(180) + p.SetState(185) p.Match(FqlParserDistinct) } } { - p.SetState(183) + p.SetState(188) p.expression(0) } @@ -1918,23 +1951,23 @@ func (p *FqlParser) InlineHighLevelExpression() (localctx IInlineHighLevelExpres p.EnterOuterAlt(localctx, 1) { - p.SetState(185) + p.SetState(190) p.Match(FqlParserOpenParen) } { - p.SetState(186) + p.SetState(191) p.HighLevelExpression() } { - p.SetState(187) + p.SetState(192) p.Match(FqlParserCloseParen) } - p.SetState(189) + p.SetState(194) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 5, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 6, p.GetParserRuleContext()) == 1 { { - p.SetState(188) + p.SetState(193) p.ErrorOperator() } @@ -2051,21 +2084,21 @@ func (p *FqlParser) HighLevelExpression() (localctx IHighLevelExpressionContext) } }() - p.SetState(193) + p.SetState(198) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case FqlParserFor: p.EnterOuterAlt(localctx, 1) { - p.SetState(191) + p.SetState(196) p.ForExpression() } case FqlParserWaitfor: p.EnterOuterAlt(localctx, 2) { - p.SetState(192) + p.SetState(197) p.WaitForExpression() } @@ -2248,110 +2281,110 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { var _alt int - p.SetState(226) + p.SetState(231) p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 11, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 12, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(195) + p.SetState(200) p.Match(FqlParserFor) } { - p.SetState(196) + p.SetState(201) p.Match(FqlParserIdentifier) } - p.SetState(199) + p.SetState(204) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == FqlParserComma { { - p.SetState(197) + p.SetState(202) p.Match(FqlParserComma) } { - p.SetState(198) + p.SetState(203) p.Match(FqlParserIdentifier) } } { - p.SetState(201) + p.SetState(206) p.Match(FqlParserIn) } { - p.SetState(202) + p.SetState(207) p.ForExpressionSource() } - p.SetState(206) + p.SetState(211) p.GetErrorHandler().Sync(p) - _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 8, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 9, p.GetParserRuleContext()) for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(203) + p.SetState(208) p.ForExpressionBody() } } - p.SetState(208) + p.SetState(213) p.GetErrorHandler().Sync(p) - _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 8, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 9, p.GetParserRuleContext()) } { - p.SetState(209) + p.SetState(214) p.ForExpressionReturn() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(211) + p.SetState(216) p.Match(FqlParserFor) } { - p.SetState(212) + p.SetState(217) p.Match(FqlParserIdentifier) } - p.SetState(214) + p.SetState(219) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == FqlParserDo { { - p.SetState(213) + p.SetState(218) p.Match(FqlParserDo) } } { - p.SetState(216) + p.SetState(221) p.Match(FqlParserWhile) } { - p.SetState(217) + p.SetState(222) p.expression(0) } - p.SetState(221) + p.SetState(226) p.GetErrorHandler().Sync(p) - _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 10, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 11, p.GetParserRuleContext()) for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(218) + p.SetState(223) p.ForExpressionBody() } } - p.SetState(223) + p.SetState(228) p.GetErrorHandler().Sync(p) - _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 10, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 11, p.GetParserRuleContext()) } { - p.SetState(224) + p.SetState(229) p.ForExpressionReturn() } @@ -2518,55 +2551,55 @@ func (p *FqlParser) ForExpressionSource() (localctx IForExpressionSourceContext) } }() - p.SetState(235) + p.SetState(240) p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 12, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 13, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(228) + p.SetState(233) p.FunctionCallExpression() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(229) + p.SetState(234) p.ArrayLiteral() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(230) + p.SetState(235) p.ObjectLiteral() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(231) + p.SetState(236) p.Variable() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(232) + p.SetState(237) p.MemberExpression() } case 6: p.EnterOuterAlt(localctx, 6) { - p.SetState(233) + p.SetState(238) p.RangeOperator() } case 7: p.EnterOuterAlt(localctx, 7) { - p.SetState(234) + p.SetState(239) p.Param() } @@ -2703,35 +2736,35 @@ func (p *FqlParser) ForExpressionClause() (localctx IForExpressionClauseContext) } }() - p.SetState(241) + p.SetState(246) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case FqlParserLimit: p.EnterOuterAlt(localctx, 1) { - p.SetState(237) + p.SetState(242) p.LimitClause() } case FqlParserSort: p.EnterOuterAlt(localctx, 2) { - p.SetState(238) + p.SetState(243) p.SortClause() } case FqlParserFilter: p.EnterOuterAlt(localctx, 3) { - p.SetState(239) + p.SetState(244) p.FilterClause() } case FqlParserCollect: p.EnterOuterAlt(localctx, 4) { - p.SetState(240) + p.SetState(245) p.CollectClause() } @@ -2850,20 +2883,20 @@ func (p *FqlParser) ForExpressionStatement() (localctx IForExpressionStatementCo } }() - p.SetState(245) + p.SetState(250) p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 14, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 15, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(243) + p.SetState(248) p.VariableDeclaration() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(244) + p.SetState(249) p.FunctionCallExpression() } @@ -2980,20 +3013,20 @@ func (p *FqlParser) ForExpressionBody() (localctx IForExpressionBodyContext) { } }() - p.SetState(249) + p.SetState(254) p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 15, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 16, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(247) + p.SetState(252) p.ForExpressionStatement() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(248) + p.SetState(253) p.ForExpressionClause() } @@ -3110,21 +3143,21 @@ func (p *FqlParser) ForExpressionReturn() (localctx IForExpressionReturnContext) } }() - p.SetState(253) + p.SetState(258) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case FqlParserReturn: p.EnterOuterAlt(localctx, 1) { - p.SetState(251) + p.SetState(256) p.ReturnExpression() } case FqlParserFor: p.EnterOuterAlt(localctx, 2) { - p.SetState(252) + p.SetState(257) p.ForExpression() } @@ -3239,11 +3272,11 @@ func (p *FqlParser) FilterClause() (localctx IFilterClauseContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(255) + p.SetState(260) p.Match(FqlParserFilter) } { - p.SetState(256) + p.SetState(261) p.expression(0) } @@ -3372,24 +3405,24 @@ func (p *FqlParser) LimitClause() (localctx ILimitClauseContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(258) + p.SetState(263) p.Match(FqlParserLimit) } { - p.SetState(259) + p.SetState(264) p.LimitClauseValue() } - p.SetState(262) + p.SetState(267) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == FqlParserComma { { - p.SetState(260) + p.SetState(265) p.Match(FqlParserComma) } { - p.SetState(261) + p.SetState(266) p.LimitClauseValue() } @@ -3500,21 +3533,21 @@ func (p *FqlParser) LimitClauseValue() (localctx ILimitClauseValueContext) { } }() - p.SetState(266) + p.SetState(271) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case FqlParserIntegerLiteral: p.EnterOuterAlt(localctx, 1) { - p.SetState(264) + p.SetState(269) p.Match(FqlParserIntegerLiteral) } case FqlParserParam: p.EnterOuterAlt(localctx, 2) { - p.SetState(265) + p.SetState(270) p.Param() } @@ -3651,28 +3684,28 @@ func (p *FqlParser) SortClause() (localctx ISortClauseContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(268) + p.SetState(273) p.Match(FqlParserSort) } { - p.SetState(269) + p.SetState(274) p.SortClauseExpression() } - p.SetState(274) + p.SetState(279) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for _la == FqlParserComma { { - p.SetState(270) + p.SetState(275) p.Match(FqlParserComma) } { - p.SetState(271) + p.SetState(276) p.SortClauseExpression() } - p.SetState(276) + p.SetState(281) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } @@ -3784,15 +3817,15 @@ func (p *FqlParser) SortClauseExpression() (localctx ISortClauseExpressionContex p.EnterOuterAlt(localctx, 1) { - p.SetState(277) + p.SetState(282) p.expression(0) } - p.SetState(279) + p.SetState(284) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 20, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 21, p.GetParserRuleContext()) == 1 { { - p.SetState(278) + p.SetState(283) p.Match(FqlParserSortDirection) } @@ -3933,84 +3966,84 @@ func (p *FqlParser) CollectClause() (localctx ICollectClauseContext) { } }() - p.SetState(299) + p.SetState(304) p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 21, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 22, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(281) + p.SetState(286) p.Match(FqlParserCollect) } { - p.SetState(282) + p.SetState(287) p.CollectCounter() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(283) + p.SetState(288) p.Match(FqlParserCollect) } { - p.SetState(284) + p.SetState(289) p.CollectAggregator() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(285) + p.SetState(290) p.Match(FqlParserCollect) } { - p.SetState(286) + p.SetState(291) p.CollectGrouping() } { - p.SetState(287) + p.SetState(292) p.CollectAggregator() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(289) + p.SetState(294) p.Match(FqlParserCollect) } { - p.SetState(290) + p.SetState(295) p.CollectGrouping() } { - p.SetState(291) + p.SetState(296) p.CollectGroupVariable() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(293) + p.SetState(298) p.Match(FqlParserCollect) } { - p.SetState(294) + p.SetState(299) p.CollectGrouping() } { - p.SetState(295) + p.SetState(300) p.CollectCounter() } case 6: p.EnterOuterAlt(localctx, 6) { - p.SetState(297) + p.SetState(302) p.Match(FqlParserCollect) } { - p.SetState(298) + p.SetState(303) p.CollectGrouping() } @@ -4127,15 +4160,15 @@ func (p *FqlParser) CollectSelector() (localctx ICollectSelectorContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(301) + p.SetState(306) p.Match(FqlParserIdentifier) } { - p.SetState(302) + p.SetState(307) p.Match(FqlParserAssign) } { - p.SetState(303) + p.SetState(308) p.expression(0) } @@ -4264,24 +4297,24 @@ func (p *FqlParser) CollectGrouping() (localctx ICollectGroupingContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(305) + p.SetState(310) p.CollectSelector() } - p.SetState(310) + p.SetState(315) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for _la == FqlParserComma { { - p.SetState(306) + p.SetState(311) p.Match(FqlParserComma) } { - p.SetState(307) + p.SetState(312) p.CollectSelector() } - p.SetState(312) + p.SetState(317) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } @@ -4415,28 +4448,28 @@ func (p *FqlParser) CollectAggregator() (localctx ICollectAggregatorContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(313) + p.SetState(318) p.Match(FqlParserAggregate) } { - p.SetState(314) + p.SetState(319) p.CollectAggregateSelector() } - p.SetState(319) + p.SetState(324) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for _la == FqlParserComma { { - p.SetState(315) + p.SetState(320) p.Match(FqlParserComma) } { - p.SetState(316) + p.SetState(321) p.CollectAggregateSelector() } - p.SetState(321) + p.SetState(326) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } @@ -4552,15 +4585,15 @@ func (p *FqlParser) CollectAggregateSelector() (localctx ICollectAggregateSelect p.EnterOuterAlt(localctx, 1) { - p.SetState(322) + p.SetState(327) p.Match(FqlParserIdentifier) } { - p.SetState(323) + p.SetState(328) p.Match(FqlParserAssign) } { - p.SetState(324) + p.SetState(329) p.FunctionCallExpression() } @@ -4681,40 +4714,40 @@ func (p *FqlParser) CollectGroupVariable() (localctx ICollectGroupVariableContex } }() - p.SetState(334) + p.SetState(339) p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 25, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 26, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(326) + p.SetState(331) p.Match(FqlParserInto) } { - p.SetState(327) + p.SetState(332) p.CollectSelector() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(328) + p.SetState(333) p.Match(FqlParserInto) } { - p.SetState(329) + p.SetState(334) p.Match(FqlParserIdentifier) } - p.SetState(332) + p.SetState(337) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 24, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 25, p.GetParserRuleContext()) == 1 { { - p.SetState(330) + p.SetState(335) p.Match(FqlParserKeep) } { - p.SetState(331) + p.SetState(336) p.Match(FqlParserIdentifier) } @@ -4831,19 +4864,19 @@ func (p *FqlParser) CollectCounter() (localctx ICollectCounterContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(336) + p.SetState(341) p.Match(FqlParserWith) } { - p.SetState(337) + p.SetState(342) p.Match(FqlParserCount) } { - p.SetState(338) + p.SetState(343) p.Match(FqlParserInto) } { - p.SetState(339) + p.SetState(344) p.Match(FqlParserIdentifier) } @@ -4962,28 +4995,28 @@ func (p *FqlParser) OptionsClause() (localctx IOptionsClauseContext) { } }() - p.SetState(345) + p.SetState(350) p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 26, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 27, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(341) + p.SetState(346) p.Match(FqlParserOptions) } { - p.SetState(342) + p.SetState(347) p.ObjectLiteral() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(343) + p.SetState(348) p.Match(FqlParserOptions) } { - p.SetState(344) + p.SetState(349) p.Variable() } @@ -5135,42 +5168,42 @@ func (p *FqlParser) WaitForExpression() (localctx IWaitForExpressionContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(347) + p.SetState(352) p.Match(FqlParserWaitfor) } { - p.SetState(348) + p.SetState(353) p.Match(FqlParserEvent) } { - p.SetState(349) + p.SetState(354) p.WaitForEventName() } { - p.SetState(350) + p.SetState(355) p.Match(FqlParserIn) } { - p.SetState(351) + p.SetState(356) p.WaitForEventSource() } - p.SetState(353) + p.SetState(358) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == FqlParserOptions { { - p.SetState(352) + p.SetState(357) p.OptionsClause() } } - p.SetState(356) + p.SetState(361) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 28, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 29, p.GetParserRuleContext()) == 1 { { - p.SetState(355) + p.SetState(360) p.WaitForTimeout() } @@ -5297,28 +5330,28 @@ func (p *FqlParser) WaitForTimeout() (localctx IWaitForTimeoutContext) { } }() - p.SetState(361) + p.SetState(366) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case FqlParserIntegerLiteral: p.EnterOuterAlt(localctx, 1) { - p.SetState(358) + p.SetState(363) p.IntegerLiteral() } case FqlParserIdentifier: p.EnterOuterAlt(localctx, 2) { - p.SetState(359) + p.SetState(364) p.Variable() } case FqlParserParam: p.EnterOuterAlt(localctx, 3) { - p.SetState(360) + p.SetState(365) p.Param() } @@ -5467,41 +5500,41 @@ func (p *FqlParser) WaitForEventName() (localctx IWaitForEventNameContext) { } }() - p.SetState(368) + p.SetState(373) p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 30, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 31, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(363) + p.SetState(368) p.StringLiteral() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(364) + p.SetState(369) p.Variable() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(365) + p.SetState(370) p.Param() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(366) + p.SetState(371) p.FunctionCallExpression() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(367) + p.SetState(372) p.MemberExpression() } @@ -5628,27 +5661,27 @@ func (p *FqlParser) WaitForEventSource() (localctx IWaitForEventSourceContext) { } }() - p.SetState(373) + p.SetState(378) p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 31, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 32, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(370) + p.SetState(375) p.FunctionCallExpression() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(371) + p.SetState(376) p.Variable() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(372) + p.SetState(377) p.MemberExpression() } @@ -5819,25 +5852,25 @@ func (p *FqlParser) RangeOperator() (localctx IRangeOperatorContext) { }() p.EnterOuterAlt(localctx, 1) - p.SetState(378) + p.SetState(383) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case FqlParserIntegerLiteral: { - p.SetState(375) + p.SetState(380) p.IntegerLiteral() } case FqlParserIdentifier: { - p.SetState(376) + p.SetState(381) p.Variable() } case FqlParserParam: { - p.SetState(377) + p.SetState(382) p.Param() } @@ -5845,28 +5878,28 @@ func (p *FqlParser) RangeOperator() (localctx IRangeOperatorContext) { panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) } { - p.SetState(380) + p.SetState(385) p.Match(FqlParserRange) } - p.SetState(384) + p.SetState(389) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case FqlParserIntegerLiteral: { - p.SetState(381) + p.SetState(386) p.IntegerLiteral() } case FqlParserIdentifier: { - p.SetState(382) + p.SetState(387) p.Variable() } case FqlParserParam: { - p.SetState(383) + p.SetState(388) p.Param() } @@ -6009,45 +6042,45 @@ func (p *FqlParser) ArrayLiteral() (localctx IArrayLiteralContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(386) + p.SetState(391) p.Match(FqlParserOpenBracket) } - p.SetState(398) + p.SetState(403) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if (((_la-9)&-(0x1f+1)) == 0 && ((1<= len(vec.slices) { + return values.None + } + + return vec.slices[sliceIndex][itemIndex] +} + +func (vec *Vector) ForEach(predicate func(item core.Value, index int)) { + if len(vec.slices) == 0 { + return + } + + lastIndex := vec.capacity * len(vec.slices) + + for i := 0; i <= lastIndex; i++ { + itemIndex := i % vec.capacity + sliceIndex := int(math.Floor(float64(i / vec.capacity))) + + predicate(vec.slices[sliceIndex][itemIndex], i) + } +} + +func (vec *Vector) ToSlice() []core.Value { + out := make([]core.Value, vec.capacity*len(vec.slices)) + + if len(vec.slices) == 0 { + return out + } + + lastIndex := vec.capacity * len(vec.slices) + + for i := 0; i <= lastIndex; i++ { + itemIndex := i % vec.capacity + sliceIndex := int(math.Floor(float64(i / vec.capacity))) + + out[i] = vec.slices[sliceIndex][itemIndex] + } + + return out +} + +func (vec *Vector) getCurrentSlice() []core.Value { + if vec.current < 0 { + return vec.newSlice() + } + + current := vec.slices[vec.current] + + if len(current) < vec.capacity { + return current + } + + return vec.newSlice() +} + +func (vec *Vector) newSlice() []core.Value { + slice := make([]core.Value, 0, vec.capacity) + + vec.current++ + vec.slices[vec.current] = slice + + return slice +} diff --git a/pkg/runtime/values/array.go b/pkg/runtime/values/array.go index f36b1f30..4b93bff8 100644 --- a/pkg/runtime/values/array.go +++ b/pkg/runtime/values/array.go @@ -34,6 +34,10 @@ func NewArrayWith(values ...core.Value) *Array { return &Array{items: values} } +func NewArrayOf(values []core.Value) *Array { + return &Array{items: values} +} + func (t *Array) MarshalJSON() ([]byte, error) { return jettison.MarshalOpts(t.items, jettison.NoHTMLEscaping()) }