mirror of
https://github.com/MontFerret/ferret.git
synced 2025-03-17 21:18:37 +02:00
Added support of optional chaining (#634)
This commit is contained in:
parent
742bdae0ae
commit
1d0617eb3b
@ -385,6 +385,118 @@ RETURN o1.first["second"][o2.prop].fourth["fifth"]["bottom"]
|
||||
So(string(out), ShouldEqual, "1")
|
||||
})
|
||||
})
|
||||
|
||||
Convey("Optional chaining", t, func() {
|
||||
Convey("Object", func() {
|
||||
Convey("When value does not exist", func() {
|
||||
c := compiler.New()
|
||||
|
||||
p, err := c.Compile(`
|
||||
LET obj = { foo: None }
|
||||
|
||||
RETURN obj.foo?.bar
|
||||
`)
|
||||
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
out, err := p.Run(context.Background())
|
||||
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
So(string(out), ShouldEqual, `null`)
|
||||
})
|
||||
|
||||
Convey("When value does exists", func() {
|
||||
c := compiler.New()
|
||||
|
||||
p, err := c.Compile(`
|
||||
LET obj = { foo: { bar: "bar" } }
|
||||
|
||||
RETURN obj.foo?.bar
|
||||
`)
|
||||
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
out, err := p.Run(context.Background())
|
||||
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
So(string(out), ShouldEqual, `"bar"`)
|
||||
})
|
||||
})
|
||||
|
||||
Convey("Array", func() {
|
||||
Convey("When value does not exist", func() {
|
||||
c := compiler.New()
|
||||
|
||||
p, err := c.Compile(`
|
||||
LET obj = { foo: None }
|
||||
|
||||
RETURN obj.foo?.bar?.[0]
|
||||
`)
|
||||
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
out, err := p.Run(context.Background())
|
||||
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
So(string(out), ShouldEqual, `null`)
|
||||
})
|
||||
|
||||
Convey("When value does exists", func() {
|
||||
c := compiler.New()
|
||||
|
||||
p, err := c.Compile(`
|
||||
LET obj = { foo: { bar: ["bar"] } }
|
||||
|
||||
RETURN obj.foo?.bar?.[0]
|
||||
`)
|
||||
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
out, err := p.Run(context.Background())
|
||||
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
So(string(out), ShouldEqual, `"bar"`)
|
||||
})
|
||||
})
|
||||
|
||||
Convey("Function", func() {
|
||||
Convey("When value does not exist", func() {
|
||||
c := compiler.New()
|
||||
|
||||
p, err := c.Compile(`
|
||||
RETURN FIRST([])?.foo
|
||||
`)
|
||||
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
out, err := p.Run(context.Background())
|
||||
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
So(string(out), ShouldEqual, `null`)
|
||||
})
|
||||
|
||||
Convey("When value does exists", func() {
|
||||
c := compiler.New()
|
||||
|
||||
p, err := c.Compile(`
|
||||
RETURN FIRST([{ foo: "bar" }])?.foo
|
||||
`)
|
||||
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
out, err := p.Run(context.Background())
|
||||
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
So(string(out), ShouldEqual, `"bar"`)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func BenchmarkMemberArray(b *testing.B) {
|
||||
|
@ -876,13 +876,14 @@ func (v *visitor) doVisitMemberExpression(ctx *fql.MemberExpressionContext, scop
|
||||
}
|
||||
|
||||
children := ctx.AllMemberExpressionPath()
|
||||
path := make([]core.Expression, 0, len(children))
|
||||
path := make([]*expressions.MemberPathSegment, 0, len(children))
|
||||
|
||||
for _, memberPath := range children {
|
||||
var exp core.Expression
|
||||
var err error
|
||||
|
||||
memberPath := memberPath.(*fql.MemberExpressionPathContext)
|
||||
optional := memberPath.QuestionMark() != nil
|
||||
|
||||
if prop := memberPath.PropertyName(); prop != nil {
|
||||
exp, err = v.doVisitPropertyNameContext(prop.(*fql.PropertyNameContext), scope)
|
||||
@ -896,7 +897,13 @@ func (v *visitor) doVisitMemberExpression(ctx *fql.MemberExpressionContext, scop
|
||||
return nil, err
|
||||
}
|
||||
|
||||
path = append(path, exp)
|
||||
segment, err := expressions.NewMemberPathSegment(exp, optional)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
path = append(path, segment)
|
||||
}
|
||||
|
||||
return expressions.NewMemberExpression(
|
||||
|
@ -271,8 +271,8 @@ memberExpressionSource
|
||||
;
|
||||
|
||||
memberExpressionPath
|
||||
: Dot propertyName
|
||||
| computedPropertyName
|
||||
: QuestionMark? Dot propertyName
|
||||
| (QuestionMark Dot)? computedPropertyName
|
||||
;
|
||||
|
||||
functionCallExpression
|
||||
|
File diff suppressed because one or more lines are too long
@ -15,7 +15,7 @@ var _ = reflect.Copy
|
||||
var _ = strconv.Itoa
|
||||
|
||||
var parserATN = []uint16{
|
||||
3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 71, 644,
|
||||
3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 71, 651,
|
||||
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,
|
||||
@ -77,238 +77,241 @@ var parserATN = []uint16{
|
||||
47, 3, 47, 3, 47, 5, 47, 561, 10, 47, 3, 47, 3, 47, 7, 47, 565, 10, 47,
|
||||
12, 47, 14, 47, 568, 11, 47, 3, 48, 3, 48, 6, 48, 572, 10, 48, 13, 48,
|
||||
14, 48, 573, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 581, 10, 49, 3,
|
||||
50, 3, 50, 3, 50, 5, 50, 586, 10, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52,
|
||||
3, 52, 3, 53, 7, 53, 595, 10, 53, 12, 53, 14, 53, 598, 11, 53, 3, 54, 3,
|
||||
54, 3, 54, 3, 54, 7, 54, 604, 10, 54, 12, 54, 14, 54, 607, 11, 54, 5, 54,
|
||||
609, 10, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 5, 56, 618,
|
||||
10, 56, 3, 57, 3, 57, 3, 57, 5, 57, 623, 10, 57, 3, 58, 3, 58, 3, 59, 3,
|
||||
59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64,
|
||||
3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 2, 3, 92, 67, 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, 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, 688, 2, 135, 3,
|
||||
2, 2, 2, 4, 141, 3, 2, 2, 2, 6, 143, 3, 2, 2, 2, 8, 145, 3, 2, 2, 2, 10,
|
||||
148, 3, 2, 2, 2, 12, 154, 3, 2, 2, 2, 14, 162, 3, 2, 2, 2, 16, 166, 3,
|
||||
2, 2, 2, 18, 182, 3, 2, 2, 2, 20, 200, 3, 2, 2, 2, 22, 233, 3, 2, 2, 2,
|
||||
24, 242, 3, 2, 2, 2, 26, 248, 3, 2, 2, 2, 28, 252, 3, 2, 2, 2, 30, 256,
|
||||
3, 2, 2, 2, 32, 260, 3, 2, 2, 2, 34, 262, 3, 2, 2, 2, 36, 265, 3, 2, 2,
|
||||
2, 38, 273, 3, 2, 2, 2, 40, 275, 3, 2, 2, 2, 42, 284, 3, 2, 2, 2, 44, 306,
|
||||
3, 2, 2, 2, 46, 308, 3, 2, 2, 2, 48, 312, 3, 2, 2, 2, 50, 320, 3, 2, 2,
|
||||
2, 52, 329, 3, 2, 2, 2, 54, 341, 3, 2, 2, 2, 56, 343, 3, 2, 2, 2, 58, 352,
|
||||
3, 2, 2, 2, 60, 354, 3, 2, 2, 2, 62, 369, 3, 2, 2, 2, 64, 376, 3, 2, 2,
|
||||
2, 66, 381, 3, 2, 2, 2, 68, 386, 3, 2, 2, 2, 70, 394, 3, 2, 2, 2, 72, 410,
|
||||
3, 2, 2, 2, 74, 435, 3, 2, 2, 2, 76, 437, 3, 2, 2, 2, 78, 444, 3, 2, 2,
|
||||
2, 80, 446, 3, 2, 2, 2, 82, 448, 3, 2, 2, 2, 84, 450, 3, 2, 2, 2, 86, 452,
|
||||
3, 2, 2, 2, 88, 454, 3, 2, 2, 2, 90, 456, 3, 2, 2, 2, 92, 477, 3, 2, 2,
|
||||
2, 94, 569, 3, 2, 2, 2, 96, 580, 3, 2, 2, 2, 98, 585, 3, 2, 2, 2, 100,
|
||||
587, 3, 2, 2, 2, 102, 591, 3, 2, 2, 2, 104, 596, 3, 2, 2, 2, 106, 599,
|
||||
3, 2, 2, 2, 108, 612, 3, 2, 2, 2, 110, 617, 3, 2, 2, 2, 112, 622, 3, 2,
|
||||
2, 2, 114, 624, 3, 2, 2, 2, 116, 626, 3, 2, 2, 2, 118, 628, 3, 2, 2, 2,
|
||||
120, 630, 3, 2, 2, 2, 122, 632, 3, 2, 2, 2, 124, 634, 3, 2, 2, 2, 126,
|
||||
636, 3, 2, 2, 2, 128, 638, 3, 2, 2, 2, 130, 641, 3, 2, 2, 2, 132, 134,
|
||||
5, 4, 3, 2, 133, 132, 3, 2, 2, 2, 134, 137, 3, 2, 2, 2, 135, 133, 3, 2,
|
||||
2, 2, 135, 136, 3, 2, 2, 2, 136, 138, 3, 2, 2, 2, 137, 135, 3, 2, 2, 2,
|
||||
138, 139, 5, 12, 7, 2, 139, 140, 7, 2, 2, 3, 140, 3, 3, 2, 2, 2, 141, 142,
|
||||
5, 6, 4, 2, 142, 5, 3, 2, 2, 2, 143, 144, 5, 8, 5, 2, 144, 7, 3, 2, 2,
|
||||
2, 145, 146, 7, 51, 2, 2, 146, 147, 5, 10, 6, 2, 147, 9, 3, 2, 2, 2, 148,
|
||||
149, 5, 104, 53, 2, 149, 150, 7, 66, 2, 2, 150, 11, 3, 2, 2, 2, 151, 153,
|
||||
5, 14, 8, 2, 152, 151, 3, 2, 2, 2, 153, 156, 3, 2, 2, 2, 154, 152, 3, 2,
|
||||
2, 2, 154, 155, 3, 2, 2, 2, 155, 157, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2,
|
||||
157, 158, 5, 16, 9, 2, 158, 13, 3, 2, 2, 2, 159, 163, 5, 18, 10, 2, 160,
|
||||
163, 5, 100, 51, 2, 161, 163, 5, 60, 31, 2, 162, 159, 3, 2, 2, 2, 162,
|
||||
160, 3, 2, 2, 2, 162, 161, 3, 2, 2, 2, 163, 15, 3, 2, 2, 2, 164, 167, 5,
|
||||
20, 11, 2, 165, 167, 5, 22, 12, 2, 166, 164, 3, 2, 2, 2, 166, 165, 3, 2,
|
||||
2, 2, 167, 17, 3, 2, 2, 2, 168, 169, 7, 45, 2, 2, 169, 170, 7, 66, 2, 2,
|
||||
170, 171, 7, 33, 2, 2, 171, 174, 7, 13, 2, 2, 172, 175, 5, 22, 12, 2, 173,
|
||||
175, 5, 60, 31, 2, 174, 172, 3, 2, 2, 2, 174, 173, 3, 2, 2, 2, 175, 176,
|
||||
3, 2, 2, 2, 176, 177, 7, 14, 2, 2, 177, 183, 3, 2, 2, 2, 178, 179, 7, 45,
|
||||
2, 2, 179, 180, 7, 66, 2, 2, 180, 181, 7, 33, 2, 2, 181, 183, 5, 92, 47,
|
||||
2, 182, 168, 3, 2, 2, 2, 182, 178, 3, 2, 2, 2, 183, 19, 3, 2, 2, 2, 184,
|
||||
186, 7, 38, 2, 2, 185, 187, 7, 41, 2, 2, 186, 185, 3, 2, 2, 2, 186, 187,
|
||||
3, 2, 2, 2, 187, 188, 3, 2, 2, 2, 188, 191, 7, 13, 2, 2, 189, 192, 5, 22,
|
||||
12, 2, 190, 192, 5, 60, 31, 2, 191, 189, 3, 2, 2, 2, 191, 190, 3, 2, 2,
|
||||
2, 192, 193, 3, 2, 2, 2, 193, 194, 7, 14, 2, 2, 194, 201, 3, 2, 2, 2, 195,
|
||||
197, 7, 38, 2, 2, 196, 198, 7, 41, 2, 2, 197, 196, 3, 2, 2, 2, 197, 198,
|
||||
3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 201, 5, 92, 47, 2, 200, 184, 3,
|
||||
2, 2, 2, 200, 195, 3, 2, 2, 2, 201, 21, 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, 24, 13, 2, 210, 212, 5, 30, 16, 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, 32,
|
||||
17, 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, 92, 47, 2, 225, 227,
|
||||
5, 30, 16, 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, 32, 17, 2, 232, 234, 3, 2, 2, 2, 233, 202, 3, 2, 2, 2,
|
||||
233, 218, 3, 2, 2, 2, 234, 23, 3, 2, 2, 2, 235, 243, 5, 100, 51, 2, 236,
|
||||
243, 5, 70, 36, 2, 237, 243, 5, 72, 37, 2, 238, 243, 5, 130, 66, 2, 239,
|
||||
243, 5, 94, 48, 2, 240, 243, 5, 68, 35, 2, 241, 243, 5, 128, 65, 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, 25, 3, 2, 2, 2, 244, 249, 5, 36, 19, 2, 245, 249, 5, 40, 21,
|
||||
2, 246, 249, 5, 34, 18, 2, 247, 249, 5, 44, 23, 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,
|
||||
27, 3, 2, 2, 2, 250, 253, 5, 18, 10, 2, 251, 253, 5, 100, 51, 2, 252, 250,
|
||||
3, 2, 2, 2, 252, 251, 3, 2, 2, 2, 253, 29, 3, 2, 2, 2, 254, 257, 5, 28,
|
||||
15, 2, 255, 257, 5, 26, 14, 2, 256, 254, 3, 2, 2, 2, 256, 255, 3, 2, 2,
|
||||
2, 257, 31, 3, 2, 2, 2, 258, 261, 5, 20, 11, 2, 259, 261, 5, 22, 12, 2,
|
||||
260, 258, 3, 2, 2, 2, 260, 259, 3, 2, 2, 2, 261, 33, 3, 2, 2, 2, 262, 263,
|
||||
7, 42, 2, 2, 263, 264, 5, 92, 47, 2, 264, 35, 3, 2, 2, 2, 265, 266, 7,
|
||||
44, 2, 2, 266, 269, 5, 38, 20, 2, 267, 268, 7, 10, 2, 2, 268, 270, 5, 38,
|
||||
20, 2, 269, 267, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 37, 3, 2, 2, 2,
|
||||
271, 274, 7, 68, 2, 2, 272, 274, 5, 128, 65, 2, 273, 271, 3, 2, 2, 2, 273,
|
||||
272, 3, 2, 2, 2, 274, 39, 3, 2, 2, 2, 275, 276, 7, 43, 2, 2, 276, 281,
|
||||
5, 42, 22, 2, 277, 278, 7, 10, 2, 2, 278, 280, 5, 42, 22, 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, 41, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 284, 286, 5, 92, 47, 2,
|
||||
285, 287, 7, 47, 2, 2, 286, 285, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287,
|
||||
43, 3, 2, 2, 2, 288, 289, 7, 46, 2, 2, 289, 307, 5, 56, 29, 2, 290, 291,
|
||||
7, 46, 2, 2, 291, 307, 5, 50, 26, 2, 292, 293, 7, 46, 2, 2, 293, 294, 5,
|
||||
48, 25, 2, 294, 295, 5, 50, 26, 2, 295, 307, 3, 2, 2, 2, 296, 297, 7, 46,
|
||||
2, 2, 297, 298, 5, 48, 25, 2, 298, 299, 5, 54, 28, 2, 299, 307, 3, 2, 2,
|
||||
2, 300, 301, 7, 46, 2, 2, 301, 302, 5, 48, 25, 2, 302, 303, 5, 56, 29,
|
||||
2, 303, 307, 3, 2, 2, 2, 304, 305, 7, 46, 2, 2, 305, 307, 5, 48, 25, 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, 45, 3,
|
||||
2, 2, 2, 308, 309, 7, 66, 2, 2, 309, 310, 7, 33, 2, 2, 310, 311, 5, 92,
|
||||
47, 2, 311, 47, 3, 2, 2, 2, 312, 317, 5, 46, 24, 2, 313, 314, 7, 10, 2,
|
||||
2, 314, 316, 5, 46, 24, 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, 49, 3, 2, 2, 2, 319, 317,
|
||||
3, 2, 2, 2, 320, 321, 7, 58, 2, 2, 321, 326, 5, 52, 27, 2, 322, 323, 7,
|
||||
10, 2, 2, 323, 325, 5, 52, 27, 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, 51, 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, 100, 51, 2, 332, 53, 3, 2, 2, 2, 333, 334, 7, 52, 2, 2, 334, 342,
|
||||
5, 46, 24, 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, 55, 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, 57, 3, 2, 2, 2, 348, 349,
|
||||
7, 40, 2, 2, 349, 353, 5, 72, 37, 2, 350, 351, 7, 40, 2, 2, 351, 353, 5,
|
||||
130, 66, 2, 352, 348, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 353, 59, 3, 2,
|
||||
2, 2, 354, 355, 7, 39, 2, 2, 355, 356, 7, 59, 2, 2, 356, 357, 5, 64, 33,
|
||||
2, 357, 358, 7, 62, 2, 2, 358, 360, 5, 66, 34, 2, 359, 361, 5, 58, 30,
|
||||
2, 360, 359, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 363, 3, 2, 2, 2, 362,
|
||||
364, 5, 62, 32, 2, 363, 362, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 61,
|
||||
3, 2, 2, 2, 365, 370, 5, 86, 44, 2, 366, 370, 5, 130, 66, 2, 367, 370,
|
||||
5, 100, 51, 2, 368, 370, 5, 94, 48, 2, 369, 365, 3, 2, 2, 2, 369, 366,
|
||||
3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 369, 368, 3, 2, 2, 2, 370, 63, 3, 2,
|
||||
2, 2, 371, 377, 5, 82, 42, 2, 372, 377, 5, 130, 66, 2, 373, 377, 5, 128,
|
||||
65, 2, 374, 377, 5, 100, 51, 2, 375, 377, 5, 94, 48, 2, 376, 371, 3, 2,
|
||||
2, 2, 376, 372, 3, 2, 2, 2, 376, 373, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2,
|
||||
376, 375, 3, 2, 2, 2, 377, 65, 3, 2, 2, 2, 378, 382, 5, 100, 51, 2, 379,
|
||||
382, 5, 130, 66, 2, 380, 382, 5, 94, 48, 2, 381, 378, 3, 2, 2, 2, 381,
|
||||
379, 3, 2, 2, 2, 381, 380, 3, 2, 2, 2, 382, 67, 3, 2, 2, 2, 383, 387, 5,
|
||||
86, 44, 2, 384, 387, 5, 130, 66, 2, 385, 387, 5, 128, 65, 2, 386, 383,
|
||||
3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 386, 385, 3, 2, 2, 2, 387, 388, 3, 2,
|
||||
2, 2, 388, 392, 7, 32, 2, 2, 389, 393, 5, 86, 44, 2, 390, 393, 5, 130,
|
||||
66, 2, 391, 393, 5, 128, 65, 2, 392, 389, 3, 2, 2, 2, 392, 390, 3, 2, 2,
|
||||
2, 392, 391, 3, 2, 2, 2, 393, 69, 3, 2, 2, 2, 394, 406, 7, 11, 2, 2, 395,
|
||||
400, 5, 92, 47, 2, 396, 397, 7, 10, 2, 2, 397, 399, 5, 92, 47, 2, 398,
|
||||
396, 3, 2, 2, 2, 399, 402, 3, 2, 2, 2, 400, 398, 3, 2, 2, 2, 400, 401,
|
||||
3, 2, 2, 2, 401, 404, 3, 2, 2, 2, 402, 400, 3, 2, 2, 2, 403, 405, 7, 10,
|
||||
2, 2, 404, 403, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 407, 3, 2, 2, 2,
|
||||
406, 395, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408,
|
||||
409, 7, 12, 2, 2, 409, 71, 3, 2, 2, 2, 410, 422, 7, 15, 2, 2, 411, 416,
|
||||
5, 74, 38, 2, 412, 413, 7, 10, 2, 2, 413, 415, 5, 74, 38, 2, 414, 412,
|
||||
3, 2, 2, 2, 415, 418, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 417, 3, 2,
|
||||
2, 2, 417, 420, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 419, 421, 7, 10, 2, 2,
|
||||
420, 419, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 423, 3, 2, 2, 2, 422,
|
||||
411, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 425,
|
||||
7, 16, 2, 2, 425, 73, 3, 2, 2, 2, 426, 427, 5, 78, 40, 2, 427, 428, 7,
|
||||
7, 2, 2, 428, 429, 5, 92, 47, 2, 429, 436, 3, 2, 2, 2, 430, 431, 5, 76,
|
||||
39, 2, 431, 432, 7, 7, 2, 2, 432, 433, 5, 92, 47, 2, 433, 436, 3, 2, 2,
|
||||
2, 434, 436, 5, 130, 66, 2, 435, 426, 3, 2, 2, 2, 435, 430, 3, 2, 2, 2,
|
||||
435, 434, 3, 2, 2, 2, 436, 75, 3, 2, 2, 2, 437, 438, 7, 11, 2, 2, 438,
|
||||
439, 5, 92, 47, 2, 439, 440, 7, 12, 2, 2, 440, 77, 3, 2, 2, 2, 441, 445,
|
||||
7, 66, 2, 2, 442, 445, 5, 82, 42, 2, 443, 445, 5, 128, 65, 2, 444, 441,
|
||||
3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 444, 443, 3, 2, 2, 2, 445, 79, 3, 2,
|
||||
2, 2, 446, 447, 7, 50, 2, 2, 447, 81, 3, 2, 2, 2, 448, 449, 7, 67, 2, 2,
|
||||
449, 83, 3, 2, 2, 2, 450, 451, 7, 69, 2, 2, 451, 85, 3, 2, 2, 2, 452, 453,
|
||||
7, 68, 2, 2, 453, 87, 3, 2, 2, 2, 454, 455, 9, 2, 2, 2, 455, 89, 3, 2,
|
||||
2, 2, 456, 457, 7, 13, 2, 2, 457, 458, 5, 92, 47, 2, 458, 459, 7, 14, 2,
|
||||
2, 459, 91, 3, 2, 2, 2, 460, 461, 8, 47, 1, 2, 461, 462, 5, 126, 64, 2,
|
||||
462, 463, 5, 92, 47, 29, 463, 478, 3, 2, 2, 2, 464, 478, 5, 68, 35, 2,
|
||||
465, 478, 5, 82, 42, 2, 466, 478, 5, 84, 43, 2, 467, 478, 5, 86, 44, 2,
|
||||
468, 478, 5, 80, 41, 2, 469, 478, 5, 70, 36, 2, 470, 478, 5, 72, 37, 2,
|
||||
471, 478, 5, 94, 48, 2, 472, 478, 5, 100, 51, 2, 473, 478, 5, 128, 65,
|
||||
2, 474, 478, 5, 130, 66, 2, 475, 478, 5, 88, 45, 2, 476, 478, 5, 90, 46,
|
||||
2, 477, 460, 3, 2, 2, 2, 477, 464, 3, 2, 2, 2, 477, 465, 3, 2, 2, 2, 477,
|
||||
466, 3, 2, 2, 2, 477, 467, 3, 2, 2, 2, 477, 468, 3, 2, 2, 2, 477, 469,
|
||||
3, 2, 2, 2, 477, 470, 3, 2, 2, 2, 477, 471, 3, 2, 2, 2, 477, 472, 3, 2,
|
||||
2, 2, 477, 473, 3, 2, 2, 2, 477, 474, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2,
|
||||
477, 476, 3, 2, 2, 2, 478, 566, 3, 2, 2, 2, 479, 480, 12, 28, 2, 2, 480,
|
||||
481, 5, 122, 62, 2, 481, 482, 5, 92, 47, 29, 482, 565, 3, 2, 2, 2, 483,
|
||||
484, 12, 27, 2, 2, 484, 485, 5, 124, 63, 2, 485, 486, 5, 92, 47, 28, 486,
|
||||
565, 3, 2, 2, 2, 487, 488, 12, 26, 2, 2, 488, 491, 5, 108, 55, 2, 489,
|
||||
492, 5, 110, 56, 2, 490, 492, 5, 114, 58, 2, 491, 489, 3, 2, 2, 2, 491,
|
||||
490, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 494, 5, 92, 47, 27, 494, 565,
|
||||
3, 2, 2, 2, 495, 496, 12, 25, 2, 2, 496, 497, 5, 110, 56, 2, 497, 498,
|
||||
5, 92, 47, 26, 498, 565, 3, 2, 2, 2, 499, 500, 12, 24, 2, 2, 500, 501,
|
||||
5, 112, 57, 2, 501, 502, 5, 92, 47, 25, 502, 565, 3, 2, 2, 2, 503, 504,
|
||||
12, 23, 2, 2, 504, 505, 5, 114, 58, 2, 505, 506, 5, 92, 47, 24, 506, 565,
|
||||
3, 2, 2, 2, 507, 508, 12, 22, 2, 2, 508, 509, 5, 116, 59, 2, 509, 510,
|
||||
5, 92, 47, 23, 510, 565, 3, 2, 2, 2, 511, 512, 12, 21, 2, 2, 512, 513,
|
||||
5, 118, 60, 2, 513, 514, 5, 92, 47, 22, 514, 565, 3, 2, 2, 2, 515, 516,
|
||||
12, 20, 2, 2, 516, 517, 5, 120, 61, 2, 517, 518, 5, 92, 47, 21, 518, 565,
|
||||
3, 2, 2, 2, 519, 520, 12, 17, 2, 2, 520, 521, 7, 34, 2, 2, 521, 524, 7,
|
||||
13, 2, 2, 522, 525, 5, 22, 12, 2, 523, 525, 5, 60, 31, 2, 524, 522, 3,
|
||||
2, 2, 2, 524, 523, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 527, 7, 14, 2,
|
||||
2, 527, 528, 7, 7, 2, 2, 528, 529, 5, 92, 47, 18, 529, 565, 3, 2, 2, 2,
|
||||
530, 531, 12, 16, 2, 2, 531, 533, 7, 34, 2, 2, 532, 534, 5, 92, 47, 2,
|
||||
533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535,
|
||||
536, 7, 7, 2, 2, 536, 565, 5, 92, 47, 17, 537, 538, 12, 19, 2, 2, 538,
|
||||
539, 7, 34, 2, 2, 539, 542, 7, 13, 2, 2, 540, 543, 5, 22, 12, 2, 541, 543,
|
||||
5, 60, 31, 2, 542, 540, 3, 2, 2, 2, 542, 541, 3, 2, 2, 2, 543, 544, 3,
|
||||
2, 2, 2, 544, 545, 7, 14, 2, 2, 545, 546, 7, 7, 2, 2, 546, 549, 7, 13,
|
||||
2, 2, 547, 550, 5, 22, 12, 2, 548, 550, 5, 60, 31, 2, 549, 547, 3, 2, 2,
|
||||
2, 549, 548, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 552, 7, 14, 2, 2, 552,
|
||||
565, 3, 2, 2, 2, 553, 554, 12, 18, 2, 2, 554, 555, 7, 34, 2, 2, 555, 556,
|
||||
5, 92, 47, 2, 556, 557, 7, 7, 2, 2, 557, 560, 7, 13, 2, 2, 558, 561, 5,
|
||||
22, 12, 2, 559, 561, 5, 60, 31, 2, 560, 558, 3, 2, 2, 2, 560, 559, 3, 2,
|
||||
2, 2, 561, 562, 3, 2, 2, 2, 562, 563, 7, 14, 2, 2, 563, 565, 3, 2, 2, 2,
|
||||
564, 479, 3, 2, 2, 2, 564, 483, 3, 2, 2, 2, 564, 487, 3, 2, 2, 2, 564,
|
||||
495, 3, 2, 2, 2, 564, 499, 3, 2, 2, 2, 564, 503, 3, 2, 2, 2, 564, 507,
|
||||
3, 2, 2, 2, 564, 511, 3, 2, 2, 2, 564, 515, 3, 2, 2, 2, 564, 519, 3, 2,
|
||||
2, 2, 564, 530, 3, 2, 2, 2, 564, 537, 3, 2, 2, 2, 564, 553, 3, 2, 2, 2,
|
||||
565, 568, 3, 2, 2, 2, 566, 564, 3, 2, 2, 2, 566, 567, 3, 2, 2, 2, 567,
|
||||
93, 3, 2, 2, 2, 568, 566, 3, 2, 2, 2, 569, 571, 5, 96, 49, 2, 570, 572,
|
||||
5, 98, 50, 2, 571, 570, 3, 2, 2, 2, 572, 573, 3, 2, 2, 2, 573, 571, 3,
|
||||
2, 2, 2, 573, 574, 3, 2, 2, 2, 574, 95, 3, 2, 2, 2, 575, 581, 5, 130, 66,
|
||||
2, 576, 581, 5, 128, 65, 2, 577, 581, 5, 100, 51, 2, 578, 581, 5, 70, 36,
|
||||
2, 579, 581, 5, 72, 37, 2, 580, 575, 3, 2, 2, 2, 580, 576, 3, 2, 2, 2,
|
||||
580, 577, 3, 2, 2, 2, 580, 578, 3, 2, 2, 2, 580, 579, 3, 2, 2, 2, 581,
|
||||
97, 3, 2, 2, 2, 582, 583, 7, 9, 2, 2, 583, 586, 5, 78, 40, 2, 584, 586,
|
||||
5, 76, 39, 2, 585, 582, 3, 2, 2, 2, 585, 584, 3, 2, 2, 2, 586, 99, 3, 2,
|
||||
2, 2, 587, 588, 5, 104, 53, 2, 588, 589, 5, 102, 52, 2, 589, 590, 5, 106,
|
||||
54, 2, 590, 101, 3, 2, 2, 2, 591, 592, 9, 3, 2, 2, 592, 103, 3, 2, 2, 2,
|
||||
593, 595, 7, 70, 2, 2, 594, 593, 3, 2, 2, 2, 595, 598, 3, 2, 2, 2, 596,
|
||||
594, 3, 2, 2, 2, 596, 597, 3, 2, 2, 2, 597, 105, 3, 2, 2, 2, 598, 596,
|
||||
3, 2, 2, 2, 599, 608, 7, 13, 2, 2, 600, 605, 5, 92, 47, 2, 601, 602, 7,
|
||||
10, 2, 2, 602, 604, 5, 92, 47, 2, 603, 601, 3, 2, 2, 2, 604, 607, 3, 2,
|
||||
2, 2, 605, 603, 3, 2, 2, 2, 605, 606, 3, 2, 2, 2, 606, 609, 3, 2, 2, 2,
|
||||
607, 605, 3, 2, 2, 2, 608, 600, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609,
|
||||
610, 3, 2, 2, 2, 610, 611, 7, 14, 2, 2, 611, 107, 3, 2, 2, 2, 612, 613,
|
||||
9, 4, 2, 2, 613, 109, 3, 2, 2, 2, 614, 618, 7, 62, 2, 2, 615, 616, 7, 61,
|
||||
2, 2, 616, 618, 7, 62, 2, 2, 617, 614, 3, 2, 2, 2, 617, 615, 3, 2, 2, 2,
|
||||
618, 111, 3, 2, 2, 2, 619, 623, 7, 60, 2, 2, 620, 621, 7, 61, 2, 2, 621,
|
||||
623, 7, 60, 2, 2, 622, 619, 3, 2, 2, 2, 622, 620, 3, 2, 2, 2, 623, 113,
|
||||
3, 2, 2, 2, 624, 625, 9, 5, 2, 2, 625, 115, 3, 2, 2, 2, 626, 627, 9, 6,
|
||||
2, 2, 627, 117, 3, 2, 2, 2, 628, 629, 7, 30, 2, 2, 629, 119, 3, 2, 2, 2,
|
||||
630, 631, 7, 31, 2, 2, 631, 121, 3, 2, 2, 2, 632, 633, 9, 7, 2, 2, 633,
|
||||
123, 3, 2, 2, 2, 634, 635, 9, 8, 2, 2, 635, 125, 3, 2, 2, 2, 636, 637,
|
||||
9, 9, 2, 2, 637, 127, 3, 2, 2, 2, 638, 639, 7, 65, 2, 2, 639, 640, 7, 66,
|
||||
2, 2, 640, 129, 3, 2, 2, 2, 641, 642, 7, 66, 2, 2, 642, 131, 3, 2, 2, 2,
|
||||
64, 135, 154, 162, 166, 174, 182, 186, 191, 197, 200, 206, 213, 221, 228,
|
||||
233, 242, 248, 252, 256, 260, 269, 273, 281, 286, 306, 317, 326, 339, 341,
|
||||
352, 360, 363, 369, 376, 381, 386, 392, 400, 404, 406, 416, 420, 422, 435,
|
||||
444, 477, 491, 524, 533, 542, 549, 560, 564, 566, 573, 580, 585, 596, 605,
|
||||
608, 617, 622,
|
||||
50, 5, 50, 584, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 590, 10, 50,
|
||||
3, 50, 5, 50, 593, 10, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3,
|
||||
53, 7, 53, 602, 10, 53, 12, 53, 14, 53, 605, 11, 53, 3, 54, 3, 54, 3, 54,
|
||||
3, 54, 7, 54, 611, 10, 54, 12, 54, 14, 54, 614, 11, 54, 5, 54, 616, 10,
|
||||
54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 5, 56, 625, 10, 56,
|
||||
3, 57, 3, 57, 3, 57, 5, 57, 630, 10, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3,
|
||||
60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65,
|
||||
3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 2, 3, 92, 67, 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, 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, 697, 2, 135, 3, 2, 2, 2,
|
||||
4, 141, 3, 2, 2, 2, 6, 143, 3, 2, 2, 2, 8, 145, 3, 2, 2, 2, 10, 148, 3,
|
||||
2, 2, 2, 12, 154, 3, 2, 2, 2, 14, 162, 3, 2, 2, 2, 16, 166, 3, 2, 2, 2,
|
||||
18, 182, 3, 2, 2, 2, 20, 200, 3, 2, 2, 2, 22, 233, 3, 2, 2, 2, 24, 242,
|
||||
3, 2, 2, 2, 26, 248, 3, 2, 2, 2, 28, 252, 3, 2, 2, 2, 30, 256, 3, 2, 2,
|
||||
2, 32, 260, 3, 2, 2, 2, 34, 262, 3, 2, 2, 2, 36, 265, 3, 2, 2, 2, 38, 273,
|
||||
3, 2, 2, 2, 40, 275, 3, 2, 2, 2, 42, 284, 3, 2, 2, 2, 44, 306, 3, 2, 2,
|
||||
2, 46, 308, 3, 2, 2, 2, 48, 312, 3, 2, 2, 2, 50, 320, 3, 2, 2, 2, 52, 329,
|
||||
3, 2, 2, 2, 54, 341, 3, 2, 2, 2, 56, 343, 3, 2, 2, 2, 58, 352, 3, 2, 2,
|
||||
2, 60, 354, 3, 2, 2, 2, 62, 369, 3, 2, 2, 2, 64, 376, 3, 2, 2, 2, 66, 381,
|
||||
3, 2, 2, 2, 68, 386, 3, 2, 2, 2, 70, 394, 3, 2, 2, 2, 72, 410, 3, 2, 2,
|
||||
2, 74, 435, 3, 2, 2, 2, 76, 437, 3, 2, 2, 2, 78, 444, 3, 2, 2, 2, 80, 446,
|
||||
3, 2, 2, 2, 82, 448, 3, 2, 2, 2, 84, 450, 3, 2, 2, 2, 86, 452, 3, 2, 2,
|
||||
2, 88, 454, 3, 2, 2, 2, 90, 456, 3, 2, 2, 2, 92, 477, 3, 2, 2, 2, 94, 569,
|
||||
3, 2, 2, 2, 96, 580, 3, 2, 2, 2, 98, 592, 3, 2, 2, 2, 100, 594, 3, 2, 2,
|
||||
2, 102, 598, 3, 2, 2, 2, 104, 603, 3, 2, 2, 2, 106, 606, 3, 2, 2, 2, 108,
|
||||
619, 3, 2, 2, 2, 110, 624, 3, 2, 2, 2, 112, 629, 3, 2, 2, 2, 114, 631,
|
||||
3, 2, 2, 2, 116, 633, 3, 2, 2, 2, 118, 635, 3, 2, 2, 2, 120, 637, 3, 2,
|
||||
2, 2, 122, 639, 3, 2, 2, 2, 124, 641, 3, 2, 2, 2, 126, 643, 3, 2, 2, 2,
|
||||
128, 645, 3, 2, 2, 2, 130, 648, 3, 2, 2, 2, 132, 134, 5, 4, 3, 2, 133,
|
||||
132, 3, 2, 2, 2, 134, 137, 3, 2, 2, 2, 135, 133, 3, 2, 2, 2, 135, 136,
|
||||
3, 2, 2, 2, 136, 138, 3, 2, 2, 2, 137, 135, 3, 2, 2, 2, 138, 139, 5, 12,
|
||||
7, 2, 139, 140, 7, 2, 2, 3, 140, 3, 3, 2, 2, 2, 141, 142, 5, 6, 4, 2, 142,
|
||||
5, 3, 2, 2, 2, 143, 144, 5, 8, 5, 2, 144, 7, 3, 2, 2, 2, 145, 146, 7, 51,
|
||||
2, 2, 146, 147, 5, 10, 6, 2, 147, 9, 3, 2, 2, 2, 148, 149, 5, 104, 53,
|
||||
2, 149, 150, 7, 66, 2, 2, 150, 11, 3, 2, 2, 2, 151, 153, 5, 14, 8, 2, 152,
|
||||
151, 3, 2, 2, 2, 153, 156, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 154, 155,
|
||||
3, 2, 2, 2, 155, 157, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 158, 5, 16,
|
||||
9, 2, 158, 13, 3, 2, 2, 2, 159, 163, 5, 18, 10, 2, 160, 163, 5, 100, 51,
|
||||
2, 161, 163, 5, 60, 31, 2, 162, 159, 3, 2, 2, 2, 162, 160, 3, 2, 2, 2,
|
||||
162, 161, 3, 2, 2, 2, 163, 15, 3, 2, 2, 2, 164, 167, 5, 20, 11, 2, 165,
|
||||
167, 5, 22, 12, 2, 166, 164, 3, 2, 2, 2, 166, 165, 3, 2, 2, 2, 167, 17,
|
||||
3, 2, 2, 2, 168, 169, 7, 45, 2, 2, 169, 170, 7, 66, 2, 2, 170, 171, 7,
|
||||
33, 2, 2, 171, 174, 7, 13, 2, 2, 172, 175, 5, 22, 12, 2, 173, 175, 5, 60,
|
||||
31, 2, 174, 172, 3, 2, 2, 2, 174, 173, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2,
|
||||
176, 177, 7, 14, 2, 2, 177, 183, 3, 2, 2, 2, 178, 179, 7, 45, 2, 2, 179,
|
||||
180, 7, 66, 2, 2, 180, 181, 7, 33, 2, 2, 181, 183, 5, 92, 47, 2, 182, 168,
|
||||
3, 2, 2, 2, 182, 178, 3, 2, 2, 2, 183, 19, 3, 2, 2, 2, 184, 186, 7, 38,
|
||||
2, 2, 185, 187, 7, 41, 2, 2, 186, 185, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2,
|
||||
187, 188, 3, 2, 2, 2, 188, 191, 7, 13, 2, 2, 189, 192, 5, 22, 12, 2, 190,
|
||||
192, 5, 60, 31, 2, 191, 189, 3, 2, 2, 2, 191, 190, 3, 2, 2, 2, 192, 193,
|
||||
3, 2, 2, 2, 193, 194, 7, 14, 2, 2, 194, 201, 3, 2, 2, 2, 195, 197, 7, 38,
|
||||
2, 2, 196, 198, 7, 41, 2, 2, 197, 196, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2,
|
||||
198, 199, 3, 2, 2, 2, 199, 201, 5, 92, 47, 2, 200, 184, 3, 2, 2, 2, 200,
|
||||
195, 3, 2, 2, 2, 201, 21, 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, 24, 13, 2, 210, 212, 5, 30, 16, 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, 32, 17, 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, 92, 47, 2, 225, 227, 5, 30, 16,
|
||||
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, 32, 17, 2, 232, 234, 3, 2, 2, 2, 233, 202, 3, 2, 2, 2, 233, 218, 3,
|
||||
2, 2, 2, 234, 23, 3, 2, 2, 2, 235, 243, 5, 100, 51, 2, 236, 243, 5, 70,
|
||||
36, 2, 237, 243, 5, 72, 37, 2, 238, 243, 5, 130, 66, 2, 239, 243, 5, 94,
|
||||
48, 2, 240, 243, 5, 68, 35, 2, 241, 243, 5, 128, 65, 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,
|
||||
25, 3, 2, 2, 2, 244, 249, 5, 36, 19, 2, 245, 249, 5, 40, 21, 2, 246, 249,
|
||||
5, 34, 18, 2, 247, 249, 5, 44, 23, 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, 27, 3, 2, 2,
|
||||
2, 250, 253, 5, 18, 10, 2, 251, 253, 5, 100, 51, 2, 252, 250, 3, 2, 2,
|
||||
2, 252, 251, 3, 2, 2, 2, 253, 29, 3, 2, 2, 2, 254, 257, 5, 28, 15, 2, 255,
|
||||
257, 5, 26, 14, 2, 256, 254, 3, 2, 2, 2, 256, 255, 3, 2, 2, 2, 257, 31,
|
||||
3, 2, 2, 2, 258, 261, 5, 20, 11, 2, 259, 261, 5, 22, 12, 2, 260, 258, 3,
|
||||
2, 2, 2, 260, 259, 3, 2, 2, 2, 261, 33, 3, 2, 2, 2, 262, 263, 7, 42, 2,
|
||||
2, 263, 264, 5, 92, 47, 2, 264, 35, 3, 2, 2, 2, 265, 266, 7, 44, 2, 2,
|
||||
266, 269, 5, 38, 20, 2, 267, 268, 7, 10, 2, 2, 268, 270, 5, 38, 20, 2,
|
||||
269, 267, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 37, 3, 2, 2, 2, 271, 274,
|
||||
7, 68, 2, 2, 272, 274, 5, 128, 65, 2, 273, 271, 3, 2, 2, 2, 273, 272, 3,
|
||||
2, 2, 2, 274, 39, 3, 2, 2, 2, 275, 276, 7, 43, 2, 2, 276, 281, 5, 42, 22,
|
||||
2, 277, 278, 7, 10, 2, 2, 278, 280, 5, 42, 22, 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,
|
||||
41, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 284, 286, 5, 92, 47, 2, 285, 287,
|
||||
7, 47, 2, 2, 286, 285, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 43, 3, 2,
|
||||
2, 2, 288, 289, 7, 46, 2, 2, 289, 307, 5, 56, 29, 2, 290, 291, 7, 46, 2,
|
||||
2, 291, 307, 5, 50, 26, 2, 292, 293, 7, 46, 2, 2, 293, 294, 5, 48, 25,
|
||||
2, 294, 295, 5, 50, 26, 2, 295, 307, 3, 2, 2, 2, 296, 297, 7, 46, 2, 2,
|
||||
297, 298, 5, 48, 25, 2, 298, 299, 5, 54, 28, 2, 299, 307, 3, 2, 2, 2, 300,
|
||||
301, 7, 46, 2, 2, 301, 302, 5, 48, 25, 2, 302, 303, 5, 56, 29, 2, 303,
|
||||
307, 3, 2, 2, 2, 304, 305, 7, 46, 2, 2, 305, 307, 5, 48, 25, 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, 45, 3, 2, 2, 2,
|
||||
308, 309, 7, 66, 2, 2, 309, 310, 7, 33, 2, 2, 310, 311, 5, 92, 47, 2, 311,
|
||||
47, 3, 2, 2, 2, 312, 317, 5, 46, 24, 2, 313, 314, 7, 10, 2, 2, 314, 316,
|
||||
5, 46, 24, 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, 49, 3, 2, 2, 2, 319, 317, 3, 2, 2,
|
||||
2, 320, 321, 7, 58, 2, 2, 321, 326, 5, 52, 27, 2, 322, 323, 7, 10, 2, 2,
|
||||
323, 325, 5, 52, 27, 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, 51, 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, 100,
|
||||
51, 2, 332, 53, 3, 2, 2, 2, 333, 334, 7, 52, 2, 2, 334, 342, 5, 46, 24,
|
||||
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, 55, 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, 57, 3, 2, 2, 2, 348, 349, 7, 40, 2, 2,
|
||||
349, 353, 5, 72, 37, 2, 350, 351, 7, 40, 2, 2, 351, 353, 5, 130, 66, 2,
|
||||
352, 348, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 353, 59, 3, 2, 2, 2, 354, 355,
|
||||
7, 39, 2, 2, 355, 356, 7, 59, 2, 2, 356, 357, 5, 64, 33, 2, 357, 358, 7,
|
||||
62, 2, 2, 358, 360, 5, 66, 34, 2, 359, 361, 5, 58, 30, 2, 360, 359, 3,
|
||||
2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 363, 3, 2, 2, 2, 362, 364, 5, 62, 32,
|
||||
2, 363, 362, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 61, 3, 2, 2, 2, 365,
|
||||
370, 5, 86, 44, 2, 366, 370, 5, 130, 66, 2, 367, 370, 5, 100, 51, 2, 368,
|
||||
370, 5, 94, 48, 2, 369, 365, 3, 2, 2, 2, 369, 366, 3, 2, 2, 2, 369, 367,
|
||||
3, 2, 2, 2, 369, 368, 3, 2, 2, 2, 370, 63, 3, 2, 2, 2, 371, 377, 5, 82,
|
||||
42, 2, 372, 377, 5, 130, 66, 2, 373, 377, 5, 128, 65, 2, 374, 377, 5, 100,
|
||||
51, 2, 375, 377, 5, 94, 48, 2, 376, 371, 3, 2, 2, 2, 376, 372, 3, 2, 2,
|
||||
2, 376, 373, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 376, 375, 3, 2, 2, 2, 377,
|
||||
65, 3, 2, 2, 2, 378, 382, 5, 100, 51, 2, 379, 382, 5, 130, 66, 2, 380,
|
||||
382, 5, 94, 48, 2, 381, 378, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 381, 380,
|
||||
3, 2, 2, 2, 382, 67, 3, 2, 2, 2, 383, 387, 5, 86, 44, 2, 384, 387, 5, 130,
|
||||
66, 2, 385, 387, 5, 128, 65, 2, 386, 383, 3, 2, 2, 2, 386, 384, 3, 2, 2,
|
||||
2, 386, 385, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 392, 7, 32, 2, 2, 389,
|
||||
393, 5, 86, 44, 2, 390, 393, 5, 130, 66, 2, 391, 393, 5, 128, 65, 2, 392,
|
||||
389, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 392, 391, 3, 2, 2, 2, 393, 69, 3,
|
||||
2, 2, 2, 394, 406, 7, 11, 2, 2, 395, 400, 5, 92, 47, 2, 396, 397, 7, 10,
|
||||
2, 2, 397, 399, 5, 92, 47, 2, 398, 396, 3, 2, 2, 2, 399, 402, 3, 2, 2,
|
||||
2, 400, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 404, 3, 2, 2, 2, 402,
|
||||
400, 3, 2, 2, 2, 403, 405, 7, 10, 2, 2, 404, 403, 3, 2, 2, 2, 404, 405,
|
||||
3, 2, 2, 2, 405, 407, 3, 2, 2, 2, 406, 395, 3, 2, 2, 2, 406, 407, 3, 2,
|
||||
2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 7, 12, 2, 2, 409, 71, 3, 2, 2, 2,
|
||||
410, 422, 7, 15, 2, 2, 411, 416, 5, 74, 38, 2, 412, 413, 7, 10, 2, 2, 413,
|
||||
415, 5, 74, 38, 2, 414, 412, 3, 2, 2, 2, 415, 418, 3, 2, 2, 2, 416, 414,
|
||||
3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 420, 3, 2, 2, 2, 418, 416, 3, 2,
|
||||
2, 2, 419, 421, 7, 10, 2, 2, 420, 419, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2,
|
||||
421, 423, 3, 2, 2, 2, 422, 411, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423,
|
||||
424, 3, 2, 2, 2, 424, 425, 7, 16, 2, 2, 425, 73, 3, 2, 2, 2, 426, 427,
|
||||
5, 78, 40, 2, 427, 428, 7, 7, 2, 2, 428, 429, 5, 92, 47, 2, 429, 436, 3,
|
||||
2, 2, 2, 430, 431, 5, 76, 39, 2, 431, 432, 7, 7, 2, 2, 432, 433, 5, 92,
|
||||
47, 2, 433, 436, 3, 2, 2, 2, 434, 436, 5, 130, 66, 2, 435, 426, 3, 2, 2,
|
||||
2, 435, 430, 3, 2, 2, 2, 435, 434, 3, 2, 2, 2, 436, 75, 3, 2, 2, 2, 437,
|
||||
438, 7, 11, 2, 2, 438, 439, 5, 92, 47, 2, 439, 440, 7, 12, 2, 2, 440, 77,
|
||||
3, 2, 2, 2, 441, 445, 7, 66, 2, 2, 442, 445, 5, 82, 42, 2, 443, 445, 5,
|
||||
128, 65, 2, 444, 441, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 444, 443, 3, 2,
|
||||
2, 2, 445, 79, 3, 2, 2, 2, 446, 447, 7, 50, 2, 2, 447, 81, 3, 2, 2, 2,
|
||||
448, 449, 7, 67, 2, 2, 449, 83, 3, 2, 2, 2, 450, 451, 7, 69, 2, 2, 451,
|
||||
85, 3, 2, 2, 2, 452, 453, 7, 68, 2, 2, 453, 87, 3, 2, 2, 2, 454, 455, 9,
|
||||
2, 2, 2, 455, 89, 3, 2, 2, 2, 456, 457, 7, 13, 2, 2, 457, 458, 5, 92, 47,
|
||||
2, 458, 459, 7, 14, 2, 2, 459, 91, 3, 2, 2, 2, 460, 461, 8, 47, 1, 2, 461,
|
||||
462, 5, 126, 64, 2, 462, 463, 5, 92, 47, 29, 463, 478, 3, 2, 2, 2, 464,
|
||||
478, 5, 68, 35, 2, 465, 478, 5, 82, 42, 2, 466, 478, 5, 84, 43, 2, 467,
|
||||
478, 5, 86, 44, 2, 468, 478, 5, 80, 41, 2, 469, 478, 5, 70, 36, 2, 470,
|
||||
478, 5, 72, 37, 2, 471, 478, 5, 94, 48, 2, 472, 478, 5, 100, 51, 2, 473,
|
||||
478, 5, 128, 65, 2, 474, 478, 5, 130, 66, 2, 475, 478, 5, 88, 45, 2, 476,
|
||||
478, 5, 90, 46, 2, 477, 460, 3, 2, 2, 2, 477, 464, 3, 2, 2, 2, 477, 465,
|
||||
3, 2, 2, 2, 477, 466, 3, 2, 2, 2, 477, 467, 3, 2, 2, 2, 477, 468, 3, 2,
|
||||
2, 2, 477, 469, 3, 2, 2, 2, 477, 470, 3, 2, 2, 2, 477, 471, 3, 2, 2, 2,
|
||||
477, 472, 3, 2, 2, 2, 477, 473, 3, 2, 2, 2, 477, 474, 3, 2, 2, 2, 477,
|
||||
475, 3, 2, 2, 2, 477, 476, 3, 2, 2, 2, 478, 566, 3, 2, 2, 2, 479, 480,
|
||||
12, 28, 2, 2, 480, 481, 5, 122, 62, 2, 481, 482, 5, 92, 47, 29, 482, 565,
|
||||
3, 2, 2, 2, 483, 484, 12, 27, 2, 2, 484, 485, 5, 124, 63, 2, 485, 486,
|
||||
5, 92, 47, 28, 486, 565, 3, 2, 2, 2, 487, 488, 12, 26, 2, 2, 488, 491,
|
||||
5, 108, 55, 2, 489, 492, 5, 110, 56, 2, 490, 492, 5, 114, 58, 2, 491, 489,
|
||||
3, 2, 2, 2, 491, 490, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 494, 5, 92,
|
||||
47, 27, 494, 565, 3, 2, 2, 2, 495, 496, 12, 25, 2, 2, 496, 497, 5, 110,
|
||||
56, 2, 497, 498, 5, 92, 47, 26, 498, 565, 3, 2, 2, 2, 499, 500, 12, 24,
|
||||
2, 2, 500, 501, 5, 112, 57, 2, 501, 502, 5, 92, 47, 25, 502, 565, 3, 2,
|
||||
2, 2, 503, 504, 12, 23, 2, 2, 504, 505, 5, 114, 58, 2, 505, 506, 5, 92,
|
||||
47, 24, 506, 565, 3, 2, 2, 2, 507, 508, 12, 22, 2, 2, 508, 509, 5, 116,
|
||||
59, 2, 509, 510, 5, 92, 47, 23, 510, 565, 3, 2, 2, 2, 511, 512, 12, 21,
|
||||
2, 2, 512, 513, 5, 118, 60, 2, 513, 514, 5, 92, 47, 22, 514, 565, 3, 2,
|
||||
2, 2, 515, 516, 12, 20, 2, 2, 516, 517, 5, 120, 61, 2, 517, 518, 5, 92,
|
||||
47, 21, 518, 565, 3, 2, 2, 2, 519, 520, 12, 17, 2, 2, 520, 521, 7, 34,
|
||||
2, 2, 521, 524, 7, 13, 2, 2, 522, 525, 5, 22, 12, 2, 523, 525, 5, 60, 31,
|
||||
2, 524, 522, 3, 2, 2, 2, 524, 523, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526,
|
||||
527, 7, 14, 2, 2, 527, 528, 7, 7, 2, 2, 528, 529, 5, 92, 47, 18, 529, 565,
|
||||
3, 2, 2, 2, 530, 531, 12, 16, 2, 2, 531, 533, 7, 34, 2, 2, 532, 534, 5,
|
||||
92, 47, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 3, 2,
|
||||
2, 2, 535, 536, 7, 7, 2, 2, 536, 565, 5, 92, 47, 17, 537, 538, 12, 19,
|
||||
2, 2, 538, 539, 7, 34, 2, 2, 539, 542, 7, 13, 2, 2, 540, 543, 5, 22, 12,
|
||||
2, 541, 543, 5, 60, 31, 2, 542, 540, 3, 2, 2, 2, 542, 541, 3, 2, 2, 2,
|
||||
543, 544, 3, 2, 2, 2, 544, 545, 7, 14, 2, 2, 545, 546, 7, 7, 2, 2, 546,
|
||||
549, 7, 13, 2, 2, 547, 550, 5, 22, 12, 2, 548, 550, 5, 60, 31, 2, 549,
|
||||
547, 3, 2, 2, 2, 549, 548, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 552,
|
||||
7, 14, 2, 2, 552, 565, 3, 2, 2, 2, 553, 554, 12, 18, 2, 2, 554, 555, 7,
|
||||
34, 2, 2, 555, 556, 5, 92, 47, 2, 556, 557, 7, 7, 2, 2, 557, 560, 7, 13,
|
||||
2, 2, 558, 561, 5, 22, 12, 2, 559, 561, 5, 60, 31, 2, 560, 558, 3, 2, 2,
|
||||
2, 560, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 563, 7, 14, 2, 2, 563,
|
||||
565, 3, 2, 2, 2, 564, 479, 3, 2, 2, 2, 564, 483, 3, 2, 2, 2, 564, 487,
|
||||
3, 2, 2, 2, 564, 495, 3, 2, 2, 2, 564, 499, 3, 2, 2, 2, 564, 503, 3, 2,
|
||||
2, 2, 564, 507, 3, 2, 2, 2, 564, 511, 3, 2, 2, 2, 564, 515, 3, 2, 2, 2,
|
||||
564, 519, 3, 2, 2, 2, 564, 530, 3, 2, 2, 2, 564, 537, 3, 2, 2, 2, 564,
|
||||
553, 3, 2, 2, 2, 565, 568, 3, 2, 2, 2, 566, 564, 3, 2, 2, 2, 566, 567,
|
||||
3, 2, 2, 2, 567, 93, 3, 2, 2, 2, 568, 566, 3, 2, 2, 2, 569, 571, 5, 96,
|
||||
49, 2, 570, 572, 5, 98, 50, 2, 571, 570, 3, 2, 2, 2, 572, 573, 3, 2, 2,
|
||||
2, 573, 571, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, 95, 3, 2, 2, 2, 575,
|
||||
581, 5, 130, 66, 2, 576, 581, 5, 128, 65, 2, 577, 581, 5, 100, 51, 2, 578,
|
||||
581, 5, 70, 36, 2, 579, 581, 5, 72, 37, 2, 580, 575, 3, 2, 2, 2, 580, 576,
|
||||
3, 2, 2, 2, 580, 577, 3, 2, 2, 2, 580, 578, 3, 2, 2, 2, 580, 579, 3, 2,
|
||||
2, 2, 581, 97, 3, 2, 2, 2, 582, 584, 7, 34, 2, 2, 583, 582, 3, 2, 2, 2,
|
||||
583, 584, 3, 2, 2, 2, 584, 585, 3, 2, 2, 2, 585, 586, 7, 9, 2, 2, 586,
|
||||
593, 5, 78, 40, 2, 587, 588, 7, 34, 2, 2, 588, 590, 7, 9, 2, 2, 589, 587,
|
||||
3, 2, 2, 2, 589, 590, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 593, 5, 76,
|
||||
39, 2, 592, 583, 3, 2, 2, 2, 592, 589, 3, 2, 2, 2, 593, 99, 3, 2, 2, 2,
|
||||
594, 595, 5, 104, 53, 2, 595, 596, 5, 102, 52, 2, 596, 597, 5, 106, 54,
|
||||
2, 597, 101, 3, 2, 2, 2, 598, 599, 9, 3, 2, 2, 599, 103, 3, 2, 2, 2, 600,
|
||||
602, 7, 70, 2, 2, 601, 600, 3, 2, 2, 2, 602, 605, 3, 2, 2, 2, 603, 601,
|
||||
3, 2, 2, 2, 603, 604, 3, 2, 2, 2, 604, 105, 3, 2, 2, 2, 605, 603, 3, 2,
|
||||
2, 2, 606, 615, 7, 13, 2, 2, 607, 612, 5, 92, 47, 2, 608, 609, 7, 10, 2,
|
||||
2, 609, 611, 5, 92, 47, 2, 610, 608, 3, 2, 2, 2, 611, 614, 3, 2, 2, 2,
|
||||
612, 610, 3, 2, 2, 2, 612, 613, 3, 2, 2, 2, 613, 616, 3, 2, 2, 2, 614,
|
||||
612, 3, 2, 2, 2, 615, 607, 3, 2, 2, 2, 615, 616, 3, 2, 2, 2, 616, 617,
|
||||
3, 2, 2, 2, 617, 618, 7, 14, 2, 2, 618, 107, 3, 2, 2, 2, 619, 620, 9, 4,
|
||||
2, 2, 620, 109, 3, 2, 2, 2, 621, 625, 7, 62, 2, 2, 622, 623, 7, 61, 2,
|
||||
2, 623, 625, 7, 62, 2, 2, 624, 621, 3, 2, 2, 2, 624, 622, 3, 2, 2, 2, 625,
|
||||
111, 3, 2, 2, 2, 626, 630, 7, 60, 2, 2, 627, 628, 7, 61, 2, 2, 628, 630,
|
||||
7, 60, 2, 2, 629, 626, 3, 2, 2, 2, 629, 627, 3, 2, 2, 2, 630, 113, 3, 2,
|
||||
2, 2, 631, 632, 9, 5, 2, 2, 632, 115, 3, 2, 2, 2, 633, 634, 9, 6, 2, 2,
|
||||
634, 117, 3, 2, 2, 2, 635, 636, 7, 30, 2, 2, 636, 119, 3, 2, 2, 2, 637,
|
||||
638, 7, 31, 2, 2, 638, 121, 3, 2, 2, 2, 639, 640, 9, 7, 2, 2, 640, 123,
|
||||
3, 2, 2, 2, 641, 642, 9, 8, 2, 2, 642, 125, 3, 2, 2, 2, 643, 644, 9, 9,
|
||||
2, 2, 644, 127, 3, 2, 2, 2, 645, 646, 7, 65, 2, 2, 646, 647, 7, 66, 2,
|
||||
2, 647, 129, 3, 2, 2, 2, 648, 649, 7, 66, 2, 2, 649, 131, 3, 2, 2, 2, 66,
|
||||
135, 154, 162, 166, 174, 182, 186, 191, 197, 200, 206, 213, 221, 228, 233,
|
||||
242, 248, 252, 256, 260, 269, 273, 281, 286, 306, 317, 326, 339, 341, 352,
|
||||
360, 363, 369, 376, 381, 386, 392, 400, 404, 406, 416, 420, 422, 435, 444,
|
||||
477, 491, 524, 533, 542, 549, 560, 564, 566, 573, 580, 583, 589, 592, 603,
|
||||
612, 615, 624, 629,
|
||||
}
|
||||
var literalNames = []string{
|
||||
"", "", "", "", "", "':'", "';'", "'.'", "','", "'['", "']'", "'('", "')'",
|
||||
@ -8532,6 +8535,10 @@ func (s *MemberExpressionPathContext) PropertyName() IPropertyNameContext {
|
||||
return t.(IPropertyNameContext)
|
||||
}
|
||||
|
||||
func (s *MemberExpressionPathContext) QuestionMark() antlr.TerminalNode {
|
||||
return s.GetToken(FqlParserQuestionMark, 0)
|
||||
}
|
||||
|
||||
func (s *MemberExpressionPathContext) ComputedPropertyName() IComputedPropertyNameContext {
|
||||
var t = s.GetTypedRuleContext(reflect.TypeOf((*IComputedPropertyNameContext)(nil)).Elem(), 0)
|
||||
|
||||
@ -8575,6 +8582,7 @@ func (s *MemberExpressionPathContext) Accept(visitor antlr.ParseTreeVisitor) int
|
||||
func (p *FqlParser) MemberExpressionPath() (localctx IMemberExpressionPathContext) {
|
||||
localctx = NewMemberExpressionPathContext(p, p.GetParserRuleContext(), p.GetState())
|
||||
p.EnterRule(localctx, 96, FqlParserRULE_memberExpressionPath)
|
||||
var _la int
|
||||
|
||||
defer func() {
|
||||
p.ExitRule()
|
||||
@ -8592,30 +8600,53 @@ func (p *FqlParser) MemberExpressionPath() (localctx IMemberExpressionPathContex
|
||||
}
|
||||
}()
|
||||
|
||||
p.SetState(583)
|
||||
p.SetState(590)
|
||||
p.GetErrorHandler().Sync(p)
|
||||
|
||||
switch p.GetTokenStream().LA(1) {
|
||||
case FqlParserDot:
|
||||
switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 58, p.GetParserRuleContext()) {
|
||||
case 1:
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
p.SetState(581)
|
||||
p.GetErrorHandler().Sync(p)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
|
||||
if _la == FqlParserQuestionMark {
|
||||
{
|
||||
p.SetState(580)
|
||||
p.Match(FqlParserQuestionMark)
|
||||
}
|
||||
|
||||
}
|
||||
{
|
||||
p.SetState(580)
|
||||
p.SetState(583)
|
||||
p.Match(FqlParserDot)
|
||||
}
|
||||
{
|
||||
p.SetState(581)
|
||||
p.SetState(584)
|
||||
p.PropertyName()
|
||||
}
|
||||
|
||||
case FqlParserOpenBracket:
|
||||
case 2:
|
||||
p.EnterOuterAlt(localctx, 2)
|
||||
p.SetState(587)
|
||||
p.GetErrorHandler().Sync(p)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
|
||||
if _la == FqlParserQuestionMark {
|
||||
{
|
||||
p.SetState(585)
|
||||
p.Match(FqlParserQuestionMark)
|
||||
}
|
||||
{
|
||||
p.SetState(586)
|
||||
p.Match(FqlParserDot)
|
||||
}
|
||||
|
||||
}
|
||||
{
|
||||
p.SetState(582)
|
||||
p.SetState(589)
|
||||
p.ComputedPropertyName()
|
||||
}
|
||||
|
||||
default:
|
||||
panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil))
|
||||
}
|
||||
|
||||
return localctx
|
||||
@ -8741,15 +8772,15 @@ func (p *FqlParser) FunctionCallExpression() (localctx IFunctionCallExpressionCo
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(585)
|
||||
p.SetState(592)
|
||||
p.Namespace()
|
||||
}
|
||||
{
|
||||
p.SetState(586)
|
||||
p.SetState(593)
|
||||
p.FunctionIdentifier()
|
||||
}
|
||||
{
|
||||
p.SetState(587)
|
||||
p.SetState(594)
|
||||
p.Arguments()
|
||||
}
|
||||
|
||||
@ -8959,7 +8990,7 @@ func (p *FqlParser) FunctionIdentifier() (localctx IFunctionIdentifierContext) {
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(589)
|
||||
p.SetState(596)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
|
||||
if !(_la == FqlParserAnd || _la == FqlParserOr || (((_la-35)&-(0x1f+1)) == 0 && ((1<<uint((_la-35)))&((1<<(FqlParserFor-35))|(1<<(FqlParserReturn-35))|(1<<(FqlParserWaitfor-35))|(1<<(FqlParserDistinct-35))|(1<<(FqlParserFilter-35))|(1<<(FqlParserSort-35))|(1<<(FqlParserLimit-35))|(1<<(FqlParserLet-35))|(1<<(FqlParserCollect-35))|(1<<(FqlParserSortDirection-35))|(1<<(FqlParserNone-35))|(1<<(FqlParserNull-35))|(1<<(FqlParserBooleanLiteral-35))|(1<<(FqlParserUse-35))|(1<<(FqlParserInto-35))|(1<<(FqlParserKeep-35))|(1<<(FqlParserWith-35))|(1<<(FqlParserCount-35))|(1<<(FqlParserAll-35))|(1<<(FqlParserAny-35))|(1<<(FqlParserAggregate-35))|(1<<(FqlParserEvent-35))|(1<<(FqlParserLike-35))|(1<<(FqlParserNot-35))|(1<<(FqlParserIn-35))|(1<<(FqlParserIdentifier-35)))) != 0)) {
|
||||
@ -9071,17 +9102,17 @@ func (p *FqlParser) Namespace() (localctx INamespaceContext) {
|
||||
}()
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
p.SetState(594)
|
||||
p.SetState(601)
|
||||
p.GetErrorHandler().Sync(p)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
|
||||
for _la == FqlParserNamespaceSegment {
|
||||
{
|
||||
p.SetState(591)
|
||||
p.SetState(598)
|
||||
p.Match(FqlParserNamespaceSegment)
|
||||
}
|
||||
|
||||
p.SetState(596)
|
||||
p.SetState(603)
|
||||
p.GetErrorHandler().Sync(p)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
}
|
||||
@ -9219,40 +9250,40 @@ func (p *FqlParser) Arguments() (localctx IArgumentsContext) {
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(597)
|
||||
p.SetState(604)
|
||||
p.Match(FqlParserOpenParen)
|
||||
}
|
||||
p.SetState(606)
|
||||
p.SetState(613)
|
||||
p.GetErrorHandler().Sync(p)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
|
||||
if (((_la-9)&-(0x1f+1)) == 0 && ((1<<uint((_la-9)))&((1<<(FqlParserOpenBracket-9))|(1<<(FqlParserOpenParen-9))|(1<<(FqlParserOpenBrace-9))|(1<<(FqlParserPlus-9))|(1<<(FqlParserMinus-9))|(1<<(FqlParserAnd-9))|(1<<(FqlParserOr-9))|(1<<(FqlParserFor-9))|(1<<(FqlParserReturn-9))|(1<<(FqlParserWaitfor-9))|(1<<(FqlParserDistinct-9))|(1<<(FqlParserFilter-9)))) != 0) || (((_la-41)&-(0x1f+1)) == 0 && ((1<<uint((_la-41)))&((1<<(FqlParserSort-41))|(1<<(FqlParserLimit-41))|(1<<(FqlParserLet-41))|(1<<(FqlParserCollect-41))|(1<<(FqlParserSortDirection-41))|(1<<(FqlParserNone-41))|(1<<(FqlParserNull-41))|(1<<(FqlParserBooleanLiteral-41))|(1<<(FqlParserUse-41))|(1<<(FqlParserInto-41))|(1<<(FqlParserKeep-41))|(1<<(FqlParserWith-41))|(1<<(FqlParserCount-41))|(1<<(FqlParserAll-41))|(1<<(FqlParserAny-41))|(1<<(FqlParserAggregate-41))|(1<<(FqlParserEvent-41))|(1<<(FqlParserLike-41))|(1<<(FqlParserNot-41))|(1<<(FqlParserIn-41))|(1<<(FqlParserParam-41))|(1<<(FqlParserIdentifier-41))|(1<<(FqlParserStringLiteral-41))|(1<<(FqlParserIntegerLiteral-41))|(1<<(FqlParserFloatLiteral-41))|(1<<(FqlParserNamespaceSegment-41)))) != 0) {
|
||||
{
|
||||
p.SetState(598)
|
||||
p.SetState(605)
|
||||
p.expression(0)
|
||||
}
|
||||
p.SetState(603)
|
||||
p.SetState(610)
|
||||
p.GetErrorHandler().Sync(p)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
|
||||
for _la == FqlParserComma {
|
||||
{
|
||||
p.SetState(599)
|
||||
p.SetState(606)
|
||||
p.Match(FqlParserComma)
|
||||
}
|
||||
{
|
||||
p.SetState(600)
|
||||
p.SetState(607)
|
||||
p.expression(0)
|
||||
}
|
||||
|
||||
p.SetState(605)
|
||||
p.SetState(612)
|
||||
p.GetErrorHandler().Sync(p)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
}
|
||||
|
||||
}
|
||||
{
|
||||
p.SetState(608)
|
||||
p.SetState(615)
|
||||
p.Match(FqlParserCloseParen)
|
||||
}
|
||||
|
||||
@ -9362,7 +9393,7 @@ func (p *FqlParser) ArrayOperator() (localctx IArrayOperatorContext) {
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(610)
|
||||
p.SetState(617)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
|
||||
if !(((_la-46)&-(0x1f+1)) == 0 && ((1<<uint((_la-46)))&((1<<(FqlParserNone-46))|(1<<(FqlParserAll-46))|(1<<(FqlParserAny-46)))) != 0) {
|
||||
@ -9472,25 +9503,25 @@ func (p *FqlParser) InOperator() (localctx IInOperatorContext) {
|
||||
}
|
||||
}()
|
||||
|
||||
p.SetState(615)
|
||||
p.SetState(622)
|
||||
p.GetErrorHandler().Sync(p)
|
||||
|
||||
switch p.GetTokenStream().LA(1) {
|
||||
case FqlParserIn:
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(612)
|
||||
p.SetState(619)
|
||||
p.Match(FqlParserIn)
|
||||
}
|
||||
|
||||
case FqlParserNot:
|
||||
p.EnterOuterAlt(localctx, 2)
|
||||
{
|
||||
p.SetState(613)
|
||||
p.SetState(620)
|
||||
p.Match(FqlParserNot)
|
||||
}
|
||||
{
|
||||
p.SetState(614)
|
||||
p.SetState(621)
|
||||
p.Match(FqlParserIn)
|
||||
}
|
||||
|
||||
@ -9597,25 +9628,25 @@ func (p *FqlParser) LikeOperator() (localctx ILikeOperatorContext) {
|
||||
}
|
||||
}()
|
||||
|
||||
p.SetState(620)
|
||||
p.SetState(627)
|
||||
p.GetErrorHandler().Sync(p)
|
||||
|
||||
switch p.GetTokenStream().LA(1) {
|
||||
case FqlParserLike:
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(617)
|
||||
p.SetState(624)
|
||||
p.Match(FqlParserLike)
|
||||
}
|
||||
|
||||
case FqlParserNot:
|
||||
p.EnterOuterAlt(localctx, 2)
|
||||
{
|
||||
p.SetState(618)
|
||||
p.SetState(625)
|
||||
p.Match(FqlParserNot)
|
||||
}
|
||||
{
|
||||
p.SetState(619)
|
||||
p.SetState(626)
|
||||
p.Match(FqlParserLike)
|
||||
}
|
||||
|
||||
@ -9741,7 +9772,7 @@ func (p *FqlParser) EqualityOperator() (localctx IEqualityOperatorContext) {
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(622)
|
||||
p.SetState(629)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
|
||||
if !(((_la)&-(0x1f+1)) == 0 && ((1<<uint(_la))&((1<<FqlParserGt)|(1<<FqlParserLt)|(1<<FqlParserEq)|(1<<FqlParserGte)|(1<<FqlParserLte)|(1<<FqlParserNeq))) != 0) {
|
||||
@ -9854,7 +9885,7 @@ func (p *FqlParser) RegexpOperator() (localctx IRegexpOperatorContext) {
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(624)
|
||||
p.SetState(631)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
|
||||
if !(_la == FqlParserRegexNotMatch || _la == FqlParserRegexMatch) {
|
||||
@ -9962,7 +9993,7 @@ func (p *FqlParser) LogicalAndOperator() (localctx ILogicalAndOperatorContext) {
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(626)
|
||||
p.SetState(633)
|
||||
p.Match(FqlParserAnd)
|
||||
}
|
||||
|
||||
@ -10063,7 +10094,7 @@ func (p *FqlParser) LogicalOrOperator() (localctx ILogicalOrOperatorContext) {
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(628)
|
||||
p.SetState(635)
|
||||
p.Match(FqlParserOr)
|
||||
}
|
||||
|
||||
@ -10173,7 +10204,7 @@ func (p *FqlParser) MultiplicativeOperator() (localctx IMultiplicativeOperatorCo
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(630)
|
||||
p.SetState(637)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
|
||||
if !(((_la)&-(0x1f+1)) == 0 && ((1<<uint(_la))&((1<<FqlParserMulti)|(1<<FqlParserDiv)|(1<<FqlParserMod))) != 0) {
|
||||
@ -10286,7 +10317,7 @@ func (p *FqlParser) AdditiveOperator() (localctx IAdditiveOperatorContext) {
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(632)
|
||||
p.SetState(639)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
|
||||
if !(_la == FqlParserPlus || _la == FqlParserMinus) {
|
||||
@ -10403,7 +10434,7 @@ func (p *FqlParser) UnaryOperator() (localctx IUnaryOperatorContext) {
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(634)
|
||||
p.SetState(641)
|
||||
_la = p.GetTokenStream().LA(1)
|
||||
|
||||
if !(_la == FqlParserPlus || _la == FqlParserMinus || _la == FqlParserNot) {
|
||||
@ -10515,11 +10546,11 @@ func (p *FqlParser) Param() (localctx IParamContext) {
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(636)
|
||||
p.SetState(643)
|
||||
p.Match(FqlParserParam)
|
||||
}
|
||||
{
|
||||
p.SetState(637)
|
||||
p.SetState(644)
|
||||
p.Match(FqlParserIdentifier)
|
||||
}
|
||||
|
||||
@ -10620,7 +10651,7 @@ func (p *FqlParser) Variable() (localctx IVariableContext) {
|
||||
|
||||
p.EnterOuterAlt(localctx, 1)
|
||||
{
|
||||
p.SetState(639)
|
||||
p.SetState(646)
|
||||
p.Match(FqlParserIdentifier)
|
||||
}
|
||||
|
||||
|
@ -10,10 +10,10 @@ import (
|
||||
type MemberExpression struct {
|
||||
src core.SourceMap
|
||||
source core.Expression
|
||||
path []core.Expression
|
||||
path []*MemberPathSegment
|
||||
}
|
||||
|
||||
func NewMemberExpression(src core.SourceMap, source core.Expression, path []core.Expression) (*MemberExpression, error) {
|
||||
func NewMemberExpression(src core.SourceMap, source core.Expression, path []*MemberPathSegment) (*MemberExpression, error) {
|
||||
if source == nil {
|
||||
return nil, core.Error(core.ErrMissedArgument, "source")
|
||||
}
|
||||
@ -38,8 +38,8 @@ func (e *MemberExpression) Exec(ctx context.Context, scope *core.Scope) (core.Va
|
||||
out := val
|
||||
path := make([]core.Value, 1)
|
||||
|
||||
for _, exp := range e.path {
|
||||
segment, err := exp.Exec(ctx, scope)
|
||||
for _, seg := range e.path {
|
||||
segment, err := seg.exp.Exec(ctx, scope)
|
||||
|
||||
if err != nil {
|
||||
return values.None, err
|
||||
@ -49,7 +49,11 @@ func (e *MemberExpression) Exec(ctx context.Context, scope *core.Scope) (core.Va
|
||||
c, err := values.GetIn(ctx, out, path)
|
||||
|
||||
if err != nil {
|
||||
return values.None, core.SourceError(e.src, err)
|
||||
if !seg.optional {
|
||||
return values.None, core.SourceError(e.src, err)
|
||||
}
|
||||
|
||||
return values.None, nil
|
||||
}
|
||||
|
||||
out = c
|
||||
|
16
pkg/runtime/expressions/member_path.go
Normal file
16
pkg/runtime/expressions/member_path.go
Normal file
@ -0,0 +1,16 @@
|
||||
package expressions
|
||||
|
||||
import "github.com/MontFerret/ferret/pkg/runtime/core"
|
||||
|
||||
type MemberPathSegment struct {
|
||||
exp core.Expression
|
||||
optional bool
|
||||
}
|
||||
|
||||
func NewMemberPathSegment(source core.Expression, optional bool) (*MemberPathSegment, error) {
|
||||
if source == nil {
|
||||
return nil, core.Error(core.ErrMissedArgument, "source")
|
||||
}
|
||||
|
||||
return &MemberPathSegment{source, optional}, nil
|
||||
}
|
@ -18,6 +18,7 @@ import (
|
||||
// GetIn call from.GetIn method, otherwise return error.
|
||||
func GetIn(ctx context.Context, from core.Value, byPath []core.Value) (core.Value, error) {
|
||||
getter, ok := from.(core.Getter)
|
||||
|
||||
if !ok {
|
||||
return None, core.TypeError(
|
||||
from.Type(),
|
||||
|
Loading…
x
Reference in New Issue
Block a user