Skip to content

Commit 13e67bd

Browse files
authored
Refactoring of the KQL grammar. (#115632)
1 parent 2d85476 commit 13e67bd

File tree

13 files changed

+900
-803
lines changed

13 files changed

+900
-803
lines changed

x-pack/plugin/kql/src/main/antlr/KqlBase.g4

Lines changed: 48 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -26,70 +26,68 @@ topLevelQuery
2626
;
2727

2828
query
29-
: query (AND | OR) query #booleanQuery
30-
| NOT subQuery=simpleQuery #notQuery
31-
| simpleQuery #defaultQuery
29+
: <assoc=right> query operator=(AND | OR) query #booleanQuery
30+
| NOT subQuery=simpleQuery #notQuery
31+
| simpleQuery #defaultQuery
3232
;
3333

3434
simpleQuery
3535
: nestedQuery
36-
| expression
3736
| parenthesizedQuery
38-
;
39-
40-
expression
41-
: fieldTermQuery
42-
| fieldRangeQuery
37+
| matchAllQuery
38+
| existsQuery
39+
| rangeQuery
40+
| fieldQuery
41+
| fieldLessQuery
4342
;
4443

4544
nestedQuery
4645
: fieldName COLON LEFT_CURLY_BRACKET query RIGHT_CURLY_BRACKET
4746
;
4847

49-
parenthesizedQuery:
50-
LEFT_PARENTHESIS query RIGHT_PARENTHESIS;
51-
52-
fieldRangeQuery
53-
: fieldName operator=OP_COMPARE rangeQueryValue
48+
matchAllQuery
49+
: (WILDCARD COLON)? WILDCARD
5450
;
5551

56-
fieldTermQuery
57-
: (fieldName COLON)? termQueryValue
52+
parenthesizedQuery
53+
: LEFT_PARENTHESIS query RIGHT_PARENTHESIS
5854
;
5955

60-
fieldName
61-
: wildcardExpression
62-
| unquotedLiteralExpression
63-
| quotedStringExpression
56+
rangeQuery
57+
: fieldName operator=(OP_LESS|OP_LESS_EQ|OP_MORE|OP_MORE_EQ) rangeQueryValue
6458
;
6559

6660
rangeQueryValue
67-
: unquotedLiteralExpression
68-
| quotedStringExpression
69-
;
70-
71-
termQueryValue
72-
: wildcardExpression
73-
| quotedStringExpression
74-
| termValue=unquotedLiteralExpression
75-
| groupingTermExpression;
61+
: (UNQUOTED_LITERAL|WILDCARD)+
62+
| QUOTED_STRING
63+
;
7664

77-
groupingTermExpression
78-
: LEFT_PARENTHESIS unquotedLiteralExpression RIGHT_PARENTHESIS
65+
existsQuery
66+
:fieldName COLON WILDCARD
7967
;
8068

81-
unquotedLiteralExpression
82-
: UNQUOTED_LITERAL+
69+
fieldQuery
70+
: fieldName COLON fieldQueryValue
71+
| fieldName COLON LEFT_PARENTHESIS fieldQueryValue RIGHT_PARENTHESIS
8372
;
8473

85-
quotedStringExpression
86-
: QUOTED_STRING
74+
fieldLessQuery
75+
: fieldQueryValue
76+
| LEFT_PARENTHESIS fieldQueryValue RIGHT_PARENTHESIS
8777
;
8878

89-
wildcardExpression
90-
: WILDCARD
91-
;
79+
fieldQueryValue
80+
: (AND|OR)? (UNQUOTED_LITERAL | WILDCARD )+
81+
| (UNQUOTED_LITERAL | WILDCARD )+ (AND|OR)?
82+
| (NOT|AND|OR)
83+
| QUOTED_STRING
84+
;
9285

86+
fieldName
87+
: value=UNQUOTED_LITERAL+
88+
| value=QUOTED_STRING
89+
| value=WILDCARD
90+
;
9391

9492
DEFAULT_SKIP: WHITESPACE -> skip;
9593

@@ -98,31 +96,34 @@ OR: 'or';
9896
NOT: 'not';
9997

10098
COLON: ':';
101-
OP_COMPARE: OP_LESS | OP_MORE | OP_LESS_EQ | OP_MORE_EQ;
99+
OP_LESS: '<';
100+
OP_LESS_EQ: '<=';
101+
OP_MORE: '>';
102+
OP_MORE_EQ: '>=';
102103

103104
LEFT_PARENTHESIS: '(';
104105
RIGHT_PARENTHESIS: ')';
105106
LEFT_CURLY_BRACKET: '{';
106107
RIGHT_CURLY_BRACKET: '}';
107108

108-
UNQUOTED_LITERAL: WILDCARD* UNQUOTED_LITERAL_CHAR+ WILDCARD*;
109+
UNQUOTED_LITERAL: UNQUOTED_LITERAL_CHAR+;
109110

110111
QUOTED_STRING: '"'QUOTED_CHAR*'"';
111112

112-
WILDCARD: WILDCARD_CHAR+;
113+
WILDCARD: WILDCARD_CHAR;
113114

114115
fragment WILDCARD_CHAR: '*';
115-
fragment OP_LESS: '<';
116-
fragment OP_LESS_EQ: '<=';
117-
fragment OP_MORE: '>';
118-
fragment OP_MORE_EQ: '>=';
119116

120117
fragment UNQUOTED_LITERAL_CHAR
118+
: WILDCARD_CHAR* UNQUOTED_LITERAL_BASE_CHAR WILDCARD_CHAR*
119+
| WILDCARD_CHAR WILDCARD_CHAR+
120+
;
121+
122+
fragment UNQUOTED_LITERAL_BASE_CHAR
121123
: ESCAPED_WHITESPACE
122124
| ESCAPED_SPECIAL_CHAR
123125
| ESCAPE_UNICODE_SEQUENCE
124126
| '\\' (AND | OR | NOT)
125-
| WILDCARD_CHAR UNQUOTED_LITERAL_CHAR
126127
| NON_SPECIAL_CHAR
127128
;
128129

@@ -135,7 +136,7 @@ fragment QUOTED_CHAR
135136
136137
fragment WHITESPACE: [ \t\n\r\u3000];
137138
fragment ESCAPED_WHITESPACE: '\\r' | '\\t' | '\\n';
138-
fragment NON_SPECIAL_CHAR: ~[ \\():<>"*{}];
139+
fragment NON_SPECIAL_CHAR: ~[ \n\r\t\u3000\\():<>"*{}];
139140
fragment ESCAPED_SPECIAL_CHAR: '\\'[ \\():<>"*{}];
140141
141142
fragment ESCAPED_QUOTE: '\\"';

x-pack/plugin/kql/src/main/antlr/KqlBase.tokens

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,26 @@ AND=2
33
OR=3
44
NOT=4
55
COLON=5
6-
OP_COMPARE=6
7-
LEFT_PARENTHESIS=7
8-
RIGHT_PARENTHESIS=8
9-
LEFT_CURLY_BRACKET=9
10-
RIGHT_CURLY_BRACKET=10
11-
UNQUOTED_LITERAL=11
12-
QUOTED_STRING=12
13-
WILDCARD=13
6+
OP_LESS=6
7+
OP_LESS_EQ=7
8+
OP_MORE=8
9+
OP_MORE_EQ=9
10+
LEFT_PARENTHESIS=10
11+
RIGHT_PARENTHESIS=11
12+
LEFT_CURLY_BRACKET=12
13+
RIGHT_CURLY_BRACKET=13
14+
UNQUOTED_LITERAL=14
15+
QUOTED_STRING=15
16+
WILDCARD=16
1417
'and'=2
1518
'or'=3
1619
'not'=4
1720
':'=5
18-
'('=7
19-
')'=8
20-
'{'=9
21-
'}'=10
21+
'<'=6
22+
'<='=7
23+
'>'=8
24+
'>='=9
25+
'('=10
26+
')'=11
27+
'{'=12
28+
'}'=13

x-pack/plugin/kql/src/main/antlr/KqlBaseLexer.tokens

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,26 @@ AND=2
33
OR=3
44
NOT=4
55
COLON=5
6-
OP_COMPARE=6
7-
LEFT_PARENTHESIS=7
8-
RIGHT_PARENTHESIS=8
9-
LEFT_CURLY_BRACKET=9
10-
RIGHT_CURLY_BRACKET=10
11-
UNQUOTED_LITERAL=11
12-
QUOTED_STRING=12
13-
WILDCARD=13
6+
OP_LESS=6
7+
OP_LESS_EQ=7
8+
OP_MORE=8
9+
OP_MORE_EQ=9
10+
LEFT_PARENTHESIS=10
11+
RIGHT_PARENTHESIS=11
12+
LEFT_CURLY_BRACKET=12
13+
RIGHT_CURLY_BRACKET=13
14+
UNQUOTED_LITERAL=14
15+
QUOTED_STRING=15
16+
WILDCARD=16
1417
'and'=2
1518
'or'=3
1619
'not'=4
1720
':'=5
18-
'('=7
19-
')'=8
20-
'{'=9
21-
'}'=10
21+
'<'=6
22+
'<='=7
23+
'>'=8
24+
'>='=9
25+
'('=10
26+
')'=11
27+
'{'=12
28+
'}'=13

x-pack/plugin/kql/src/main/java/org/elasticsearch/xpack/kql/parser/KqlBase.interp

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ null
55
'or'
66
'not'
77
':'
8-
null
8+
'<'
9+
'<='
10+
'>'
11+
'>='
912
'('
1013
')'
1114
'{'
@@ -21,7 +24,10 @@ AND
2124
OR
2225
NOT
2326
COLON
24-
OP_COMPARE
27+
OP_LESS
28+
OP_LESS_EQ
29+
OP_MORE
30+
OP_MORE_EQ
2531
LEFT_PARENTHESIS
2632
RIGHT_PARENTHESIS
2733
LEFT_CURLY_BRACKET
@@ -34,19 +40,17 @@ rule names:
3440
topLevelQuery
3541
query
3642
simpleQuery
37-
expression
3843
nestedQuery
44+
matchAllQuery
3945
parenthesizedQuery
40-
fieldRangeQuery
41-
fieldTermQuery
42-
fieldName
46+
rangeQuery
4347
rangeQueryValue
44-
termQueryValue
45-
groupingTermExpression
46-
unquotedLiteralExpression
47-
quotedStringExpression
48-
wildcardExpression
48+
existsQuery
49+
fieldQuery
50+
fieldLessQuery
51+
fieldQueryValue
52+
fieldName
4953

5054

5155
atn:
52-
[4, 1, 13, 108, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 1, 0, 3, 0, 32, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 40, 8, 1, 1, 1, 1, 1, 1, 1, 5, 1, 45, 8, 1, 10, 1, 12, 1, 48, 9, 1, 1, 2, 1, 2, 1, 2, 3, 2, 53, 8, 2, 1, 3, 1, 3, 3, 3, 57, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 3, 7, 76, 8, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 3, 8, 83, 8, 8, 1, 9, 1, 9, 3, 9, 87, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 93, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 4, 12, 100, 8, 12, 11, 12, 12, 12, 101, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 0, 1, 2, 15, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 0, 1, 1, 0, 2, 3, 106, 0, 31, 1, 0, 0, 0, 2, 39, 1, 0, 0, 0, 4, 52, 1, 0, 0, 0, 6, 56, 1, 0, 0, 0, 8, 58, 1, 0, 0, 0, 10, 64, 1, 0, 0, 0, 12, 68, 1, 0, 0, 0, 14, 75, 1, 0, 0, 0, 16, 82, 1, 0, 0, 0, 18, 86, 1, 0, 0, 0, 20, 92, 1, 0, 0, 0, 22, 94, 1, 0, 0, 0, 24, 99, 1, 0, 0, 0, 26, 103, 1, 0, 0, 0, 28, 105, 1, 0, 0, 0, 30, 32, 3, 2, 1, 0, 31, 30, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 33, 1, 0, 0, 0, 33, 34, 5, 0, 0, 1, 34, 1, 1, 0, 0, 0, 35, 36, 6, 1, -1, 0, 36, 37, 5, 4, 0, 0, 37, 40, 3, 4, 2, 0, 38, 40, 3, 4, 2, 0, 39, 35, 1, 0, 0, 0, 39, 38, 1, 0, 0, 0, 40, 46, 1, 0, 0, 0, 41, 42, 10, 3, 0, 0, 42, 43, 7, 0, 0, 0, 43, 45, 3, 2, 1, 4, 44, 41, 1, 0, 0, 0, 45, 48, 1, 0, 0, 0, 46, 44, 1, 0, 0, 0, 46, 47, 1, 0, 0, 0, 47, 3, 1, 0, 0, 0, 48, 46, 1, 0, 0, 0, 49, 53, 3, 8, 4, 0, 50, 53, 3, 6, 3, 0, 51, 53, 3, 10, 5, 0, 52, 49, 1, 0, 0, 0, 52, 50, 1, 0, 0, 0, 52, 51, 1, 0, 0, 0, 53, 5, 1, 0, 0, 0, 54, 57, 3, 14, 7, 0, 55, 57, 3, 12, 6, 0, 56, 54, 1, 0, 0, 0, 56, 55, 1, 0, 0, 0, 57, 7, 1, 0, 0, 0, 58, 59, 3, 16, 8, 0, 59, 60, 5, 5, 0, 0, 60, 61, 5, 9, 0, 0, 61, 62, 3, 2, 1, 0, 62, 63, 5, 10, 0, 0, 63, 9, 1, 0, 0, 0, 64, 65, 5, 7, 0, 0, 65, 66, 3, 2, 1, 0, 66, 67, 5, 8, 0, 0, 67, 11, 1, 0, 0, 0, 68, 69, 3, 16, 8, 0, 69, 70, 5, 6, 0, 0, 70, 71, 3, 18, 9, 0, 71, 13, 1, 0, 0, 0, 72, 73, 3, 16, 8, 0, 73, 74, 5, 5, 0, 0, 74, 76, 1, 0, 0, 0, 75, 72, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 77, 1, 0, 0, 0, 77, 78, 3, 20, 10, 0, 78, 15, 1, 0, 0, 0, 79, 83, 3, 28, 14, 0, 80, 83, 3, 24, 12, 0, 81, 83, 3, 26, 13, 0, 82, 79, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 82, 81, 1, 0, 0, 0, 83, 17, 1, 0, 0, 0, 84, 87, 3, 24, 12, 0, 85, 87, 3, 26, 13, 0, 86, 84, 1, 0, 0, 0, 86, 85, 1, 0, 0, 0, 87, 19, 1, 0, 0, 0, 88, 93, 3, 28, 14, 0, 89, 93, 3, 26, 13, 0, 90, 93, 3, 24, 12, 0, 91, 93, 3, 22, 11, 0, 92, 88, 1, 0, 0, 0, 92, 89, 1, 0, 0, 0, 92, 90, 1, 0, 0, 0, 92, 91, 1, 0, 0, 0, 93, 21, 1, 0, 0, 0, 94, 95, 5, 7, 0, 0, 95, 96, 3, 24, 12, 0, 96, 97, 5, 8, 0, 0, 97, 23, 1, 0, 0, 0, 98, 100, 5, 11, 0, 0, 99, 98, 1, 0, 0, 0, 100, 101, 1, 0, 0, 0, 101, 99, 1, 0, 0, 0, 101, 102, 1, 0, 0, 0, 102, 25, 1, 0, 0, 0, 103, 104, 5, 12, 0, 0, 104, 27, 1, 0, 0, 0, 105, 106, 5, 13, 0, 0, 106, 29, 1, 0, 0, 0, 10, 31, 39, 46, 52, 56, 75, 82, 86, 92, 101]
56+
[4, 1, 16, 135, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 1, 0, 3, 0, 28, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 36, 8, 1, 1, 1, 1, 1, 1, 1, 5, 1, 41, 8, 1, 10, 1, 12, 1, 44, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 53, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 3, 4, 63, 8, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 4, 7, 76, 8, 7, 11, 7, 12, 7, 77, 1, 7, 3, 7, 81, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 97, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 104, 8, 10, 1, 11, 3, 11, 107, 8, 11, 1, 11, 4, 11, 110, 8, 11, 11, 11, 12, 11, 111, 1, 11, 4, 11, 115, 8, 11, 11, 11, 12, 11, 116, 1, 11, 3, 11, 120, 8, 11, 1, 11, 1, 11, 3, 11, 124, 8, 11, 1, 12, 4, 12, 127, 8, 12, 11, 12, 12, 12, 128, 1, 12, 1, 12, 3, 12, 133, 8, 12, 1, 12, 0, 1, 2, 13, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 0, 4, 1, 0, 2, 3, 1, 0, 6, 9, 2, 0, 14, 14, 16, 16, 1, 0, 2, 4, 145, 0, 27, 1, 0, 0, 0, 2, 35, 1, 0, 0, 0, 4, 52, 1, 0, 0, 0, 6, 54, 1, 0, 0, 0, 8, 62, 1, 0, 0, 0, 10, 66, 1, 0, 0, 0, 12, 70, 1, 0, 0, 0, 14, 80, 1, 0, 0, 0, 16, 82, 1, 0, 0, 0, 18, 96, 1, 0, 0, 0, 20, 103, 1, 0, 0, 0, 22, 123, 1, 0, 0, 0, 24, 132, 1, 0, 0, 0, 26, 28, 3, 2, 1, 0, 27, 26, 1, 0, 0, 0, 27, 28, 1, 0, 0, 0, 28, 29, 1, 0, 0, 0, 29, 30, 5, 0, 0, 1, 30, 1, 1, 0, 0, 0, 31, 32, 6, 1, -1, 0, 32, 33, 5, 4, 0, 0, 33, 36, 3, 4, 2, 0, 34, 36, 3, 4, 2, 0, 35, 31, 1, 0, 0, 0, 35, 34, 1, 0, 0, 0, 36, 42, 1, 0, 0, 0, 37, 38, 10, 3, 0, 0, 38, 39, 7, 0, 0, 0, 39, 41, 3, 2, 1, 3, 40, 37, 1, 0, 0, 0, 41, 44, 1, 0, 0, 0, 42, 40, 1, 0, 0, 0, 42, 43, 1, 0, 0, 0, 43, 3, 1, 0, 0, 0, 44, 42, 1, 0, 0, 0, 45, 53, 3, 6, 3, 0, 46, 53, 3, 10, 5, 0, 47, 53, 3, 8, 4, 0, 48, 53, 3, 16, 8, 0, 49, 53, 3, 12, 6, 0, 50, 53, 3, 18, 9, 0, 51, 53, 3, 20, 10, 0, 52, 45, 1, 0, 0, 0, 52, 46, 1, 0, 0, 0, 52, 47, 1, 0, 0, 0, 52, 48, 1, 0, 0, 0, 52, 49, 1, 0, 0, 0, 52, 50, 1, 0, 0, 0, 52, 51, 1, 0, 0, 0, 53, 5, 1, 0, 0, 0, 54, 55, 3, 24, 12, 0, 55, 56, 5, 5, 0, 0, 56, 57, 5, 12, 0, 0, 57, 58, 3, 2, 1, 0, 58, 59, 5, 13, 0, 0, 59, 7, 1, 0, 0, 0, 60, 61, 5, 16, 0, 0, 61, 63, 5, 5, 0, 0, 62, 60, 1, 0, 0, 0, 62, 63, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 65, 5, 16, 0, 0, 65, 9, 1, 0, 0, 0, 66, 67, 5, 10, 0, 0, 67, 68, 3, 2, 1, 0, 68, 69, 5, 11, 0, 0, 69, 11, 1, 0, 0, 0, 70, 71, 3, 24, 12, 0, 71, 72, 7, 1, 0, 0, 72, 73, 3, 14, 7, 0, 73, 13, 1, 0, 0, 0, 74, 76, 7, 2, 0, 0, 75, 74, 1, 0, 0, 0, 76, 77, 1, 0, 0, 0, 77, 75, 1, 0, 0, 0, 77, 78, 1, 0, 0, 0, 78, 81, 1, 0, 0, 0, 79, 81, 5, 15, 0, 0, 80, 75, 1, 0, 0, 0, 80, 79, 1, 0, 0, 0, 81, 15, 1, 0, 0, 0, 82, 83, 3, 24, 12, 0, 83, 84, 5, 5, 0, 0, 84, 85, 5, 16, 0, 0, 85, 17, 1, 0, 0, 0, 86, 87, 3, 24, 12, 0, 87, 88, 5, 5, 0, 0, 88, 89, 3, 22, 11, 0, 89, 97, 1, 0, 0, 0, 90, 91, 3, 24, 12, 0, 91, 92, 5, 5, 0, 0, 92, 93, 5, 10, 0, 0, 93, 94, 3, 22, 11, 0, 94, 95, 5, 11, 0, 0, 95, 97, 1, 0, 0, 0, 96, 86, 1, 0, 0, 0, 96, 90, 1, 0, 0, 0, 97, 19, 1, 0, 0, 0, 98, 104, 3, 22, 11, 0, 99, 100, 5, 10, 0, 0, 100, 101, 3, 22, 11, 0, 101, 102, 5, 11, 0, 0, 102, 104, 1, 0, 0, 0, 103, 98, 1, 0, 0, 0, 103, 99, 1, 0, 0, 0, 104, 21, 1, 0, 0, 0, 105, 107, 7, 0, 0, 0, 106, 105, 1, 0, 0, 0, 106, 107, 1, 0, 0, 0, 107, 109, 1, 0, 0, 0, 108, 110, 7, 2, 0, 0, 109, 108, 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 111, 112, 1, 0, 0, 0, 112, 124, 1, 0, 0, 0, 113, 115, 7, 2, 0, 0, 114, 113, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 114, 1, 0, 0, 0, 116, 117, 1, 0, 0, 0, 117, 119, 1, 0, 0, 0, 118, 120, 7, 0, 0, 0, 119, 118, 1, 0, 0, 0, 119, 120, 1, 0, 0, 0, 120, 124, 1, 0, 0, 0, 121, 124, 7, 3, 0, 0, 122, 124, 5, 15, 0, 0, 123, 106, 1, 0, 0, 0, 123, 114, 1, 0, 0, 0, 123, 121, 1, 0, 0, 0, 123, 122, 1, 0, 0, 0, 124, 23, 1, 0, 0, 0, 125, 127, 5, 14, 0, 0, 126, 125, 1, 0, 0, 0, 127, 128, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 133, 1, 0, 0, 0, 130, 133, 5, 15, 0, 0, 131, 133, 5, 16, 0, 0, 132, 126, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 132, 131, 1, 0, 0, 0, 133, 25, 1, 0, 0, 0, 16, 27, 35, 42, 52, 62, 77, 80, 96, 103, 106, 111, 116, 119, 123, 128, 132]

0 commit comments

Comments
 (0)