From a343bd33fd3e738fb02379494c8c4376c36fe7b7 Mon Sep 17 00:00:00 2001 From: Alfred Fuller Date: Tue, 5 Dec 2023 09:20:55 -0800 Subject: [PATCH] Tolerate missing ';' in enum elements (#213) While still producing an error, see https://github.com/bufbuild/protocompile/issues/200. --- ast/enum.go | 10 +- ast/ranges.go | 13 +- parser/ast.go | 18 + parser/parser_test.go | 44 +- parser/proto.y | 69 +-- parser/proto.y.go | 972 +++++++++++++++++++++--------------------- 6 files changed, 607 insertions(+), 519 deletions(-) diff --git a/ast/enum.go b/ast/enum.go index 84a1b839..7f79161c 100644 --- a/ast/enum.go +++ b/ast/enum.go @@ -131,10 +131,10 @@ func NewEnumValueNode(name *IdentNode, equals *RuneNode, number IntValueNode, op if number == nil { panic("number is nil") } - if semicolon == nil { - panic("semicolon is nil") + numChildren := 3 + if semicolon != nil { + numChildren++ } - numChildren := 4 if opts != nil { numChildren++ } @@ -143,7 +143,9 @@ func NewEnumValueNode(name *IdentNode, equals *RuneNode, number IntValueNode, op if opts != nil { children = append(children, opts) } - children = append(children, semicolon) + if semicolon != nil { + children = append(children, semicolon) + } return &EnumValueNode{ compositeNode: compositeNode{ children: children, diff --git a/ast/ranges.go b/ast/ranges.go index 781c0de5..1277f2c9 100644 --- a/ast/ranges.go +++ b/ast/ranges.go @@ -290,16 +290,17 @@ func NewReservedNamesNode(keyword *KeywordNode, names []StringValueNode, commas if keyword == nil { panic("keyword is nil") } - if semicolon == nil { - panic("semicolon is nil") - } if len(names) == 0 { panic("must have at least one name") } if len(commas) != len(names)-1 { panic(fmt.Sprintf("%d names requires %d commas, not %d", len(names), len(names)-1, len(commas))) } - children := make([]Node, 0, len(names)*2+1) + numChildren := len(names) * 2 + if semicolon != nil { + numChildren++ + } + children := make([]Node, 0, numChildren) children = append(children, keyword) for i, name := range names { if i > 0 { @@ -313,7 +314,9 @@ func NewReservedNamesNode(keyword *KeywordNode, names []StringValueNode, commas } children = append(children, name) } - children = append(children, semicolon) + if semicolon != nil { + children = append(children, semicolon) + } return &ReservedNode{ compositeNode: compositeNode{ children: children, diff --git a/parser/ast.go b/parser/ast.go index 23cc76e3..4afcbad9 100644 --- a/parser/ast.go +++ b/parser/ast.go @@ -126,6 +126,15 @@ func newFileElements(semicolons []*ast.RuneNode, elements []ast.FileElement) []a return elems } +func newEnumElements(semicolons []*ast.RuneNode, elements []ast.EnumElement) []ast.EnumElement { + elems := make([]ast.EnumElement, 0, len(semicolons)+len(elements)) + for _, semicolon := range semicolons { + elems = append(elems, ast.NewEmptyDeclNode(semicolon)) + } + elems = append(elems, elements...) + return elems +} + type nodeWithEmptyDecls[T ast.Node] struct { Node T EmptyDecls []*ast.EmptyDeclNode @@ -164,3 +173,12 @@ func toFileElements[T ast.FileElement](nodes nodeWithEmptyDecls[T]) []ast.FileEl } return elements } + +func toEnumElements[T ast.EnumElement](nodes nodeWithEmptyDecls[T]) []ast.EnumElement { + elements := make([]ast.EnumElement, 1+len(nodes.EmptyDecls)) + elements[0] = nodes.Node + for i, emptyDecl := range nodes.EmptyDecls { + elements[i+1] = emptyDecl + } + return elements +} diff --git a/parser/parser_test.go b/parser/parser_test.go index 46dace1e..842938b6 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -140,7 +140,6 @@ func TestLenientParse_SemicolonLess(t *testing.T) { Error: `syntax = "proto3"; service Foo { rpc Bar (Baz) returns (Qux) { - ; option (foo) = { bar: 1 } } }`, @@ -152,6 +151,49 @@ func TestLenientParse_SemicolonLess(t *testing.T) { } }`, }, + "enum-value": { + Error: `syntax = "proto3"; + enum Foo { + FOO = 0 + }`, + NoError: `syntax = "proto3"; + enum Foo { + ; + FOO = 0;; + }`, + }, + "enum-value-options": { + Error: `syntax = "proto3"; + enum Foo { + FOO = 0 [foo = 1] + }`, + NoError: `syntax = "proto3"; + enum Foo { + FOO = 0 [foo = 1]; + }`, + }, + "enum-options": { + Error: `syntax = "proto3"; + enum Foo { + option (foo) = 1 + }`, + NoError: `syntax = "proto3"; + enum Foo { + ; + option (foo) = 1;; + }`, + }, + "enum-reserved": { + Error: `syntax = "proto3"; + enum Foo { + reserved "FOO" + }`, + NoError: `syntax = "proto3"; + enum Foo { + ; + reserved "FOO";; + }`, + }, } for name, input := range inputs { name, input := name, input diff --git a/parser/proto.y b/parser/proto.y index fb18c3d3..7b85030c 100644 --- a/parser/proto.y +++ b/parser/proto.y @@ -33,11 +33,12 @@ import ( ooElements []ast.OneofElement ext *ast.ExtensionRangeNode resvd *ast.ReservedNode + resvdN nodeWithEmptyDecls[*ast.ReservedNode] en *ast.EnumNode enN nodeWithEmptyDecls[*ast.EnumNode] enElement ast.EnumElement enElements []ast.EnumElement - env *ast.EnumValueNode + env nodeWithEmptyDecls[*ast.EnumValueNode] extend *ast.ExtendNode extendN nodeWithEmptyDecls[*ast.ExtendNode] extElement ast.ExtendElement @@ -75,6 +76,8 @@ import ( // any non-terminal which returns a value needs a type, which is // really a field name in the above union struct +// TODO: Remove all *N types by migrating all usage to them, then removing the old types +// and renaming the *N types to the old types. %type file %type syntaxDecl %type editionDecl @@ -107,14 +110,14 @@ import ( %type oneofElement %type oneofElements oneofBody %type fieldNameStrings fieldNameIdents -%type msgReserved enumReserved reservedNames +%type msgReserved reservedNames +%type enumReserved reservedNamesWithEmptyDecls %type tagRange enumValueRange %type tagRanges enumValueRanges %type extensionRangeDecl %type enumDecl %type enumDeclWithEmptyDecls -%type enumElement -%type enumElements enumBody +%type enumElement enumElements enumBody %type enumValueDecl %type extensionDecl %type extensionDeclWithEmptyDecls @@ -757,10 +760,12 @@ msgReserved : _RESERVED tagRanges ';' { } | reservedNames -enumReserved : _RESERVED enumValueRanges ';' { - $$ = ast.NewReservedRangesNode($1.ToKeyword(), $2.ranges, $2.commas, $3) +enumReserved : _RESERVED enumValueRanges ';' semicolons { + // TODO: Tolerate a missing semicolon here. This currnelty creates a shift/reduce conflict + // between `reserved 1 to 10` and `reserved 1` followed by `to = 10`. + $$ = newNodeWithEmptyDecls(ast.NewReservedRangesNode($1.ToKeyword(), $2.ranges, $2.commas, $3), $4) } - | reservedNames + | reservedNamesWithEmptyDecls reservedNames : _RESERVED fieldNameStrings ';' { $$ = ast.NewReservedNamesNode($1.ToKeyword(), $2.names, $2.commas, $3) @@ -769,6 +774,15 @@ reservedNames : _RESERVED fieldNameStrings ';' { $$ = ast.NewReservedIdentifiersNode($1.ToKeyword(), $2.idents, $2.commas, $3) } +reservedNamesWithEmptyDecls : _RESERVED fieldNameStrings semicolons { + semi, extra := protolex.(*protoLex).requireSemicolon($3) + $$ = newNodeWithEmptyDecls(ast.NewReservedNamesNode($1.ToKeyword(), $2.names, $2.commas, semi), extra) + } + | _RESERVED fieldNameIdents semicolons { + semi, extra := protolex.(*protoLex).requireSemicolon($3) + $$ = newNodeWithEmptyDecls(ast.NewReservedIdentifiersNode($1.ToKeyword(), $2.idents, $2.commas, semi), extra) + } + fieldNameStrings : stringLit { $$ = &nameSlices{names: []ast.StringValueNode{toStringValueNode($1)}} } @@ -795,47 +809,40 @@ enumDeclWithEmptyDecls : _ENUM identifier '{' enumBody '}' semicolons { $$ = newNodeWithEmptyDecls(ast.NewEnumNode($1.ToKeyword(), $2, $3, $4, $5), $6) } -enumBody : { - $$ = nil +enumBody : semicolons { + $$ = newEnumElements($1, nil) + } + | semicolons enumElements { + $$ = newEnumElements($1, $2) } - | enumElements enumElements : enumElements enumElement { - if $2 != nil { - $$ = append($1, $2) - } else { - $$ = $1 - } + $$ = append($1, $2...) } | enumElement { - if $1 != nil { - $$ = []ast.EnumElement{$1} - } else { - $$ = nil - } + $$ = $1 } -enumElement : optionDecl { - $$ = $1 +enumElement : optionDeclWithEmptyDecls { + $$ = toEnumElements($1) } | enumValueDecl { - $$ = $1 + $$ = toEnumElements($1) } | enumReserved { - $$ = $1 - } - | ';' { - $$ = ast.NewEmptyDeclNode($1) + $$ = toEnumElements($1) } | error { $$ = nil } -enumValueDecl : enumValueName '=' enumValueNumber ';' { - $$ = ast.NewEnumValueNode($1, $2, $3, nil, $4) +enumValueDecl : enumValueName '=' enumValueNumber semicolons { + semi, extra := protolex.(*protoLex).requireSemicolon($4) + $$ = newNodeWithEmptyDecls(ast.NewEnumValueNode($1, $2, $3, nil, semi), extra) } - | enumValueName '=' enumValueNumber compactOptions ';' { - $$ = ast.NewEnumValueNode($1, $2, $3, $4, $5) + | enumValueName '=' enumValueNumber compactOptions semicolons { + semi, extra := protolex.(*protoLex).requireSemicolon($5) + $$ = newNodeWithEmptyDecls(ast.NewEnumValueNode($1, $2, $3, $4, semi), extra) } messageDecl : _MESSAGE identifier '{' messageBody '}' { diff --git a/parser/proto.y.go b/parser/proto.y.go index ecdde53e..a726f167 100644 --- a/parser/proto.y.go +++ b/parser/proto.y.go @@ -46,11 +46,12 @@ type protoSymType struct { ooElements []ast.OneofElement ext *ast.ExtensionRangeNode resvd *ast.ReservedNode + resvdN nodeWithEmptyDecls[*ast.ReservedNode] en *ast.EnumNode enN nodeWithEmptyDecls[*ast.EnumNode] enElement ast.EnumElement enElements []ast.EnumElement - env *ast.EnumValueNode + env nodeWithEmptyDecls[*ast.EnumValueNode] extend *ast.ExtendNode extendN nodeWithEmptyDecls[*ast.ExtendNode] extElement ast.ExtendElement @@ -240,242 +241,246 @@ var protoExca = [...]int16{ 1, 7, -2, 0, -1, 106, - 56, 190, - -2, 0, - -1, 107, - 56, 177, + 56, 191, -2, 0, -1, 108, - 56, 212, + 56, 213, -2, 0, -1, 129, - 56, 191, + 56, 192, -2, 0, -1, 194, - 56, 178, + 56, 179, -2, 0, - -1, 247, - 56, 213, + -1, 196, + 56, 214, -2, 0, - -1, 298, - 56, 225, + -1, 247, + 56, 226, -2, 0, - -1, 303, + -1, 252, 56, 65, 62, 65, -2, 0, - -1, 399, - 56, 226, + -1, 333, + 56, 180, -2, 0, - -1, 427, - 56, 177, + -1, 392, + 56, 227, -2, 0, - -1, 428, - 56, 190, + -1, 421, + 56, 191, -2, 0, - -1, 429, - 56, 212, + -1, 422, + 56, 213, -2, 0, - -1, 436, + -1, 429, 56, 123, -2, 0, - -1, 502, + -1, 499, 56, 124, -2, 0, - -1, 655, - 56, 190, + -1, 659, + 56, 191, -2, 0, - -1, 677, - 56, 190, + -1, 682, + 56, 191, -2, 0, - -1, 690, - 56, 190, + -1, 695, + 56, 191, -2, 0, - -1, 693, - 56, 236, + -1, 698, + 56, 237, -2, 0, - -1, 697, - 56, 190, + -1, 702, + 56, 191, -2, 0, - -1, 699, - 56, 237, + -1, 704, + 56, 238, -2, 0, } const protoPrivate = 57344 -const protoLast = 1773 +const protoLast = 1843 var protoAct = [...]int16{ - 40, 7, 18, 128, 700, 472, 431, 91, 115, 568, - 563, 416, 114, 92, 496, 503, 137, 388, 387, 370, - 117, 246, 153, 300, 136, 143, 470, 86, 89, 90, - 193, 94, 302, 32, 34, 400, 318, 248, 98, 39, - 195, 101, 369, 497, 130, 36, 483, 480, 102, 87, - 652, 412, 120, 102, 690, 651, 584, 482, 99, 100, - 417, 573, 654, 650, 583, 418, 430, 433, 688, 572, - 85, 667, 657, 574, 432, 655, 599, 594, 578, 556, - 484, 433, 389, 433, 684, 707, 433, 433, 433, 672, - 382, 433, 433, 433, 433, 127, 105, 564, 389, 666, - 120, 111, 112, 113, 119, 125, 571, 109, 417, 120, - 410, 411, 298, 555, 479, 116, 299, 417, 409, 560, - 460, 307, 102, 441, 196, 673, 592, 439, 459, 438, - 203, 442, 408, 250, 252, 440, 585, 432, 424, 9, - 407, 435, 390, 396, 104, 365, 366, 367, 103, 104, - 86, 373, 374, 379, 126, 368, 104, 9, 390, 380, - 96, 703, 698, 694, 102, 686, 9, 587, 683, 96, - 582, 581, 381, 378, 316, 580, 405, 398, 391, 383, - 315, 697, 677, 436, 429, 428, 427, 110, 108, 107, - 106, 5, 6, 372, 96, 375, 23, 695, 681, 678, - 669, 665, 659, 379, 24, 597, 589, 25, 26, 9, - 586, 196, 492, 393, 31, 663, 662, 203, 97, 561, - 486, 485, 465, 378, 437, 426, 385, 13, 12, 601, - 403, 498, 461, 434, 702, 384, 9, 15, 28, 27, - 29, 30, 26, 95, 680, 679, 26, 598, 577, 576, - 562, 552, 35, 371, 395, 445, 446, 447, 448, 449, - 450, 451, 452, 453, 454, 455, 456, 488, 499, 397, - 314, 312, 250, 252, 311, 309, 404, 462, 96, 33, - 33, 8, 313, 692, 699, 392, 310, 37, 38, 394, - 4, 402, 297, 10, 11, 399, 22, 247, 21, 134, - 197, 401, 194, 20, 307, 132, 135, 386, 198, 140, - 377, 376, 414, 501, 502, 129, 19, 421, 422, 423, - 133, 151, 419, 139, 506, 138, 249, 505, 131, 304, - 303, 478, 565, 603, 425, 508, 406, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 443, 253, 144, 604, 457, 319, 510, 254, 157, - 201, 606, 321, 463, 512, 464, 88, 466, 256, 495, - 467, 160, 401, 458, 444, 469, 413, 415, 473, 118, - 306, 494, 119, 119, 17, 16, 14, 3, 307, 2, - 471, 471, 1, 0, 481, 487, 0, 0, 0, 0, - 0, 0, 490, 0, 86, 468, 119, 0, 0, 475, - 0, 476, 0, 554, 196, 0, 0, 116, 500, 0, - 203, 491, 493, 504, 250, 252, 0, 0, 489, 0, - 0, 553, 0, 0, 0, 557, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 119, 0, 0, 558, 559, - 570, 0, 0, 569, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 579, 0, 575, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 0, 0, 0, 0, 0, 0, 0, 588, 504, - 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, + 7, 40, 18, 128, 705, 424, 469, 91, 115, 567, + 562, 114, 409, 92, 457, 493, 456, 137, 500, 319, + 117, 195, 193, 136, 249, 143, 467, 393, 86, 89, + 90, 326, 94, 32, 34, 325, 334, 98, 251, 39, + 101, 267, 197, 318, 494, 36, 130, 656, 405, 120, + 480, 87, 102, 573, 693, 102, 477, 410, 99, 100, + 655, 479, 411, 695, 658, 583, 572, 423, 654, 426, + 672, 85, 661, 582, 571, 425, 426, 659, 603, 9, + 593, 481, 426, 577, 458, 426, 563, 426, 689, 458, + 426, 677, 331, 426, 426, 426, 105, 670, 426, 127, + 111, 112, 120, 570, 113, 119, 125, 109, 194, 120, + 410, 247, 403, 404, 552, 248, 116, 410, 9, 9, + 402, 601, 256, 476, 102, 555, 435, 433, 434, 432, + 431, 401, 199, 554, 201, 584, 435, 433, 425, 400, + 678, 591, 428, 104, 459, 417, 314, 315, 316, 459, + 104, 86, 322, 323, 328, 317, 126, 103, 389, 9, + 329, 5, 6, 712, 708, 104, 102, 703, 699, 691, + 586, 581, 330, 327, 580, 9, 265, 688, 96, 579, + 398, 391, 384, 332, 264, 702, 682, 429, 422, 421, + 420, 110, 108, 107, 321, 106, 324, 335, 96, 96, + 9, 700, 686, 683, 388, 674, 9, 669, 663, 588, + 585, 489, 386, 23, 31, 667, 666, 560, 390, 483, + 199, 24, 201, 482, 25, 26, 396, 9, 462, 452, + 430, 419, 13, 12, 605, 685, 495, 558, 26, 385, + 427, 263, 261, 387, 15, 684, 602, 97, 95, 707, + 394, 260, 258, 262, 256, 28, 27, 29, 30, 35, + 576, 26, 407, 259, 575, 414, 561, 33, 415, 416, + 559, 412, 397, 496, 37, 38, 549, 320, 485, 96, + 33, 4, 8, 418, 10, 11, 697, 704, 395, 246, + 392, 399, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 22, 196, 21, 134, 336, 333, + 20, 132, 135, 453, 341, 337, 153, 140, 498, 499, + 129, 19, 133, 151, 139, 503, 138, 198, 502, 131, + 253, 436, 252, 450, 475, 564, 335, 607, 505, 202, + 144, 608, 328, 268, 507, 203, 157, 339, 610, 270, + 509, 205, 160, 437, 406, 408, 470, 118, 255, 491, + 17, 327, 16, 14, 3, 2, 1, 0, 0, 0, + 451, 0, 455, 0, 0, 0, 454, 0, 0, 0, + 0, 0, 0, 0, 0, 460, 0, 0, 0, 461, + 0, 463, 464, 0, 0, 394, 0, 0, 0, 466, + 0, 0, 0, 0, 0, 0, 119, 119, 0, 0, + 0, 0, 256, 468, 468, 0, 0, 0, 478, 484, + 465, 194, 0, 0, 0, 487, 0, 0, 86, 0, + 119, 0, 472, 0, 0, 473, 0, 551, 0, 0, + 497, 116, 0, 486, 488, 490, 199, 501, 201, 0, + 0, 0, 0, 0, 550, 556, 557, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, + 0, 0, 0, 119, 0, 0, 0, 0, 569, 0, + 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 578, 0, 0, 574, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 589, 590, 0, + 0, 0, 0, 0, 0, 0, 0, 501, 587, 0, + 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, - 0, 0, 0, 596, 0, 0, 0, 0, 0, 600, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, - 0, 0, 0, 656, 658, 86, 119, 0, 0, 0, - 0, 0, 0, 664, 0, 0, 0, 116, 661, 660, - 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, - 671, 0, 670, 0, 0, 0, 0, 0, 0, 674, + 0, 0, 0, 0, 596, 594, 599, 0, 0, 597, + 595, 0, 0, 0, 0, 0, 0, 604, 0, 0, + 0, 598, 0, 600, 0, 0, 0, 0, 0, 657, + 0, 660, 662, 0, 0, 86, 119, 0, 0, 0, + 0, 0, 0, 668, 0, 0, 665, 116, 671, 664, + 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, + 0, 0, 0, 0, 676, 0, 675, 0, 0, 0, + 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 119, 0, 0, 0, 0, 570, 0, 676, - 569, 675, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 682, 0, 685, 0, 0, 0, 0, 0, - 0, 687, 0, 0, 0, 693, 689, 691, 0, 0, - 0, 0, 0, 0, 696, 0, 701, 0, 0, 0, - 705, 704, 701, 567, 706, 33, 124, 121, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 0, 0, 0, 0, 120, 0, 0, 0, - 0, 0, 0, 0, 417, 123, 122, 0, 0, 0, - 566, 33, 124, 121, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 0, 0, - 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, - 417, 123, 122, 0, 0, 474, 33, 124, 121, 41, + 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, + 0, 0, 569, 681, 568, 680, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, + 690, 0, 0, 0, 0, 0, 692, 0, 0, 698, + 694, 696, 0, 0, 0, 0, 0, 0, 0, 701, + 0, 706, 0, 0, 710, 0, 709, 706, 566, 711, + 33, 124, 121, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 0, 0, 0, + 0, 120, 0, 0, 0, 0, 0, 0, 0, 410, + 123, 122, 0, 0, 0, 565, 33, 124, 121, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 0, 0, 0, 0, 120, 0, 0, - 0, 0, 0, 0, 0, 417, 123, 122, 33, 124, - 121, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 0, 0, 0, 0, 120, - 0, 0, 0, 0, 0, 305, 0, 0, 123, 122, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 477, 0, 305, 0, 0, - 0, 308, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 0, 0, 0, 0, - 0, 301, 0, 0, 0, 0, 0, 0, 0, 305, - 0, 0, 0, 308, 41, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 0, 410, 123, 122, 0, 0, + 471, 33, 124, 121, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 33, 389, 308, 41, 42, 43, 44, + 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, + 410, 123, 122, 33, 124, 121, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 390, 41, 42, 43, 44, 45, + 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, + 0, 0, 0, 123, 122, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 142, 0, 0, 0, 88, 161, 162, 163, 164, 165, - 166, 167, 149, 168, 169, 170, 171, 156, 155, 154, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 0, 150, 159, 148, 187, - 188, 152, 145, 146, 147, 189, 190, 191, 192, 0, - 0, 141, 0, 0, 0, 0, 0, 0, 158, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 93, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, - 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, - 644, 645, 646, 647, 648, 602, 649, 0, 0, 0, - 0, 0, 251, 0, 0, 0, 605, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 156, - 155, 154, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 0, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, 317, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 0, 0, 0, 0, 0, - 507, 0, 0, 0, 320, 513, 514, 515, 516, 517, - 518, 519, 149, 520, 521, 522, 523, 0, 0, 0, - 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, - 534, 535, 536, 537, 538, 509, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 0, - 0, 0, 0, 0, 200, 0, 0, 0, 511, 204, - 205, 206, 207, 208, 209, 210, 149, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 238, 202, 239, 240, 241, 242, - 243, 244, 245, 33, 371, 199, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 420, 0, 0, 0, 0, 41, 42, 43, 44, 45, + 0, 0, 0, 254, 88, 0, 0, 492, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 474, 0, 254, 0, 0, 0, 257, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 0, 0, 0, 0, 0, 250, + 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, + 0, 257, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 33, 458, 257, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 459, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, + 0, 0, 88, 161, 162, 163, 164, 165, 166, 167, + 149, 168, 169, 170, 171, 156, 155, 154, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 0, 150, 159, 148, 187, 188, 152, + 145, 146, 147, 189, 190, 191, 192, 0, 0, 141, + 0, 0, 0, 0, 0, 0, 158, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 93, 611, 612, 613, 614, 615, 616, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, + 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 606, 653, 0, 0, 0, 0, 0, + 200, 0, 0, 0, 609, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 156, 155, 154, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 0, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 204, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 266, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 0, 0, 0, 0, 0, 504, 0, + 0, 0, 269, 510, 511, 512, 513, 514, 515, 516, + 149, 517, 518, 519, 520, 0, 0, 0, 521, 522, + 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 506, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 0, 0, 0, + 0, 0, 0, 0, 33, 320, 508, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 338, 0, 0, 0, 0, 342, 343, 344, 345, + 346, 347, 348, 26, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 340, 377, 378, 379, 380, 381, 382, 383, + 413, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, @@ -488,101 +493,102 @@ var protoAct = [...]int16{ } var protoPact = [...]int16{ - 183, -1000, 86, 86, -1000, 176, 175, 194, 161, -1000, - -1000, -1000, 275, 275, 194, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 276, 1722, 1198, 1722, 1722, 1312, - 1722, -1000, 190, -1000, 165, -1000, 156, 275, 275, 104, + 153, -1000, 147, 147, -1000, 181, 180, 211, 161, -1000, + -1000, -1000, 276, 276, 211, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 263, 1792, 1266, 1792, 1792, 1380, + 1792, -1000, 195, -1000, 194, -1000, 174, 276, 276, 106, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 96, -1000, -1000, 1312, 135, - 134, 133, 62, 1722, 132, -1000, -1000, -1000, -1000, 156, - 156, -1000, 1722, 894, 1198, 28, 1258, 1582, 1420, 62, - 86, -1000, -1000, -1000, 86, -1000, -1000, 274, -1000, -1000, - 1015, -1000, 269, 265, -1000, -1000, -1000, -1000, 124, 1258, + -1000, -1000, -1000, -1000, -1000, 105, -1000, -1000, 1380, 140, + 138, 137, 64, 1792, 136, -1000, -1000, -1000, -1000, 174, + 174, -1000, 1792, 899, 1266, 32, 1326, 147, 1488, 64, + 147, -1000, -1000, -1000, 147, -1000, -1000, 275, -1000, -1000, + 1083, -1000, 246, 236, -1000, -1000, -1000, -1000, 128, 1326, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1474, 1722, 1722, 1722, 1312, 248, 1198, - 1722, 1722, 1629, -1000, -1000, -1000, -1000, 99, 1722, 27, + -1000, -1000, -1000, 1542, 1792, 1792, 1792, 1380, 272, 1266, + 1792, 1792, 1650, -1000, -1000, -1000, -1000, 100, 1792, 29, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 123, 1582, -1000, -1000, -1000, -1000, -1000, - -1000, 174, 1139, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 127, 1699, 126, 1488, -1000, -1000, -1000, + 159, 1542, 1792, 98, 1792, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 122, 1420, -1000, -1000, - -1000, 160, 1474, 1722, 83, 1722, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 125, 224, -1000, 124, + -1000, -1000, 1145, 78, 59, -6, -1000, 1748, -1000, -1000, + -1000, -1000, -1000, -1000, 147, -1000, 1792, 1792, 85, 1792, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 121, 228, -1000, - 120, -1000, -1000, 1077, 79, 57, -3, -1000, 1678, -1000, - -1000, -1000, -1000, -1000, -1000, 86, -1000, 1722, 1722, 78, - 1722, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 179, 135, 134, 133, 14, -1000, + 199, 90, 132, 178, 77, 76, 75, 275, -1000, 1792, + 64, 268, 147, 1699, -1000, -1000, -1000, -1000, -1000, 177, + 1207, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 173, 131, 130, 129, 13, - -1000, 192, 89, 128, 172, 76, 74, 70, 274, -1000, - 1722, 62, 231, 86, -1000, 93, 67, -1000, 191, -1000, - 272, 86, -1000, -1000, 1722, 170, 1722, 62, 86, 228, - -1000, -1000, -1000, -1000, 1722, -1000, -1000, -1000, -1000, -1000, - -1000, 767, 767, -1000, -1000, -1000, -1000, 953, 45, -12, - 11, -1000, 169, 168, 1722, 62, 262, 1582, 1258, 1420, - -1000, 159, 248, 330, 226, 894, 1528, 246, -1000, -1000, - 275, -1000, 1722, -1000, 52, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 26, 93, - -1000, 77, -1000, -1000, 167, 245, -1000, -1000, -1000, 31, - -1000, -1000, -1000, -1000, 701, -1000, 44, -1000, 0, -1000, - 4, -1000, -1000, 1722, -1000, 244, 243, -1000, 25, 119, - 115, 114, -1000, -1000, -5, -1000, -1000, 84, -1000, -1000, - 157, 111, 1528, -1000, -1000, -1000, -1000, 153, 1722, 1722, - 66, 1722, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 147, -1000, -1000, 1792, 176, 1792, + 64, 147, 224, -1000, -1000, -1000, -1000, 1792, -1000, -1000, + -1000, -1000, -1000, -1000, 772, 772, -1000, -1000, -1000, -1000, + 1021, 54, -8, 12, -1000, 171, 167, 1792, 64, 273, + 147, 1326, 1488, -1000, 158, 272, 958, 231, 899, 1596, + 271, -1000, -1000, 276, -1000, 1792, -1000, 53, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 84, 72, 66, 65, -1000, 196, -1000, 265, + -1000, 165, 261, -1000, -1000, -1000, 20, -1000, -1000, -1000, + -1000, 706, -1000, 41, -1000, 5, -1000, -16, -1000, -1000, + 1792, -1000, 259, 255, -1000, 30, 123, 118, 115, -1000, + -1000, 4, -1000, -1000, 83, -1000, -1000, 157, 114, 1596, + -1000, -1000, -1000, -1000, 156, 1792, 1792, 81, 1792, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 24, 274, -1000, 1312, -1000, 152, -1000, -1000, - -1000, 242, 23, 179, 1366, -6, -1000, -19, -1000, -1000, - -1000, -1000, -1000, 54, -1000, -7, 20, 19, -1000, 149, - -1000, -1000, -1000, -1000, 1198, 894, -1000, -1000, -1000, -1000, - 164, 163, 1722, 62, -1000, 148, 37, -1000, 18, -1000, - 147, 31, 1312, 22, 65, 1722, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 27, + 275, -1000, 1380, 26, 84, 147, -1000, -1000, 79, -1000, + 241, 25, 184, 1434, -1, -1000, -22, -1000, -1000, -1000, + -1000, -1000, 47, -1000, -5, 22, 19, -1000, 155, -1000, + -1000, -1000, -1000, 1266, 899, -1000, -1000, -1000, -1000, 164, + 163, 1792, 64, -1000, 154, 35, -1000, 147, -1000, -1000, + -1000, -1000, 17, -1000, 152, 20, 1380, 24, 80, 1792, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 832, -1000, -1000, -1000, 1258, 127, -1000, 146, -1000, - -1000, -1000, 240, 239, -1000, -1000, -1000, -1000, 145, -1000, - 113, 17, -1000, 1722, 62, -1000, 109, 1258, -1000, 15, - -1, -1000, -1000, 86, -1000, -1000, -1000, 107, -1000, 144, - 1258, 126, 106, 232, -1000, -1000, 105, 1258, 86, 232, - -1000, -1000, -1000, -1000, 29, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 837, -1000, -1000, -1000, 1326, + 131, -1000, 150, -1000, -1000, -1000, 240, 230, -1000, -1000, + -1000, -1000, -1000, 149, -1000, 122, 21, -1000, 1792, 64, + -1000, 113, 1326, -1000, 1, 8, -1000, -1000, 147, -1000, + -1000, -1000, 112, -1000, 148, 1326, 130, 111, 247, -1000, + -1000, 108, 1326, 147, 247, -1000, -1000, -1000, -1000, 107, + -1000, -1000, -1000, } var protoPgo = [...]int16{ - 0, 422, 419, 417, 290, 237, 416, 415, 414, 16, - 14, 2, 411, 49, 410, 43, 6, 26, 12, 8, - 11, 5, 409, 408, 9, 407, 406, 17, 0, 404, - 401, 398, 394, 392, 391, 390, 25, 13, 389, 388, - 387, 386, 384, 7, 383, 382, 335, 36, 333, 332, - 331, 330, 32, 23, 329, 328, 327, 326, 325, 24, - 324, 323, 321, 320, 316, 44, 315, 3, 15, 314, - 313, 311, 310, 309, 308, 22, 19, 18, 42, 307, - 306, 305, 303, 40, 302, 30, 300, 299, 298, 37, - 297, 21, 20, 296, 35, 295, 292, 291, 4, 284, - 283, 10, 1, 281, + 0, 366, 365, 364, 281, 244, 363, 362, 360, 17, + 15, 2, 359, 51, 358, 44, 5, 26, 11, 8, + 12, 6, 357, 356, 9, 355, 354, 14, 1, 353, + 352, 351, 350, 349, 348, 347, 25, 13, 346, 345, + 344, 343, 341, 7, 340, 339, 338, 41, 337, 335, + 334, 332, 38, 24, 330, 329, 328, 327, 326, 23, + 325, 324, 323, 322, 321, 46, 320, 3, 18, 319, + 318, 35, 31, 317, 316, 315, 314, 19, 16, 43, + 313, 312, 311, 310, 36, 309, 22, 308, 307, 306, + 42, 305, 21, 20, 304, 27, 290, 289, 288, 4, + 287, 286, 10, 0, 282, } var protoR1 = [...]int8{ 0, 1, 1, 1, 1, 1, 1, 4, 6, 6, - 5, 5, 5, 5, 5, 5, 5, 5, 103, 103, - 102, 102, 2, 3, 7, 7, 7, 8, 37, 37, + 5, 5, 5, 5, 5, 5, 5, 5, 104, 104, + 103, 103, 2, 3, 7, 7, 7, 8, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 42, 42, 9, 11, 15, 15, 15, 15, 13, 18, 18, 19, 19, 19, 22, 22, 22, 22, 22, 22, 22, 22, - 92, 92, 20, 20, 53, 52, 52, 51, 51, 51, + 93, 93, 20, 20, 53, 52, 52, 51, 51, 51, 51, 51, 51, 54, 54, 54, 14, 14, 14, 14, 17, 17, 17, 26, 26, 21, 21, 21, 23, 23, 23, 49, 49, 24, 24, 25, 25, 25, 50, 50, @@ -591,44 +597,44 @@ var protoR1 = [...]int8{ 59, 59, 58, 70, 70, 69, 69, 68, 68, 68, 68, 68, 56, 56, 60, 60, 61, 61, 62, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 80, 80, 78, 78, 76, 76, 76, 79, 79, - 77, 77, 77, 27, 27, 73, 73, 74, 74, 75, - 75, 71, 71, 72, 72, 81, 82, 85, 85, 84, - 84, 83, 83, 83, 83, 83, 86, 86, 63, 64, - 67, 67, 66, 66, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 55, 55, 55, 55, - 87, 88, 91, 91, 90, 90, 89, 89, 89, 89, - 57, 57, 57, 57, 93, 96, 96, 95, 95, 94, - 94, 94, 97, 97, 101, 101, 100, 100, 99, 99, - 98, 98, 30, 30, 30, 30, 30, 30, 30, 30, + 29, 81, 81, 79, 79, 77, 77, 77, 80, 80, + 78, 78, 78, 27, 27, 73, 73, 75, 75, 74, + 74, 76, 76, 71, 71, 72, 72, 82, 83, 86, + 86, 85, 85, 84, 84, 84, 84, 87, 87, 63, + 64, 67, 67, 66, 66, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 55, 55, 55, + 55, 88, 89, 92, 92, 91, 91, 90, 90, 90, + 90, 57, 57, 57, 57, 94, 97, 97, 96, 96, + 95, 95, 95, 98, 98, 102, 102, 101, 101, 100, + 100, 99, 99, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, + 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 35, 35, 35, 35, 35, + 31, 31, 31, 31, 31, 31, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 32, 32, 32, + 35, 35, 35, 35, 35, 35, 35, 35, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, + 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 28, 28, 28, 28, 28, 28, 28, 28, + 34, 34, 34, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, } var protoR2 = [...]int8{ @@ -648,14 +654,14 @@ var protoR2 = [...]int8{ 2, 1, 5, 6, 7, 8, 5, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 1, 3, 1, 3, 3, 1, 3, - 1, 3, 3, 1, 2, 3, 1, 3, 1, 3, - 3, 1, 3, 1, 3, 5, 6, 0, 1, 2, - 1, 1, 1, 1, 1, 1, 4, 5, 5, 6, - 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 6, 7, 5, 6, - 5, 6, 0, 1, 2, 1, 1, 1, 2, 1, - 6, 7, 5, 6, 6, 1, 2, 2, 1, 1, - 1, 1, 6, 9, 4, 3, 1, 2, 2, 1, + 1, 3, 3, 1, 2, 3, 1, 4, 1, 3, + 3, 3, 3, 1, 3, 1, 3, 5, 6, 1, + 2, 2, 1, 1, 1, 1, 1, 4, 5, 5, + 6, 0, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 6, 7, 5, + 6, 5, 6, 0, 1, 2, 1, 1, 1, 2, + 1, 6, 7, 5, 6, 6, 1, 2, 2, 1, + 1, 1, 1, 6, 9, 4, 3, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -684,81 +690,82 @@ var protoR2 = [...]int8{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, } var protoChk = [...]int16{ - -1000, -1, -2, -3, -4, 8, 9, -102, -103, 53, + -1000, -1, -2, -3, -4, 8, 9, -103, -104, 53, -4, -4, 52, 52, -6, -5, -7, -8, -11, -64, - -82, -88, -93, 2, 10, 13, 14, 45, 44, 46, - 47, 53, -92, 4, -92, -5, -92, 11, 12, -37, + -83, -89, -94, 2, 10, 13, 14, 45, 44, 46, + 47, 53, -93, 4, -93, -5, -93, 11, 12, -37, -28, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, -15, -28, -13, 66, -28, - -28, -43, -37, 60, -28, 53, 4, 53, -102, -92, - -92, -102, 60, 52, 60, -43, 55, 55, 55, -37, - 55, -102, -102, -28, -18, -19, -20, -92, -22, -28, + -28, -43, -37, 60, -28, 53, 4, 53, -103, -93, + -93, -103, 60, 52, 60, -43, 55, 55, 55, -37, + 55, -103, -103, -28, -18, -19, -20, -93, -22, -28, 55, 6, 65, 64, 5, -28, -13, 67, -67, -66, - -65, -55, -81, -63, -87, -80, -59, -9, -58, -61, + -65, -55, -82, -63, -88, -81, -59, -9, -58, -61, -73, 53, 2, -36, -44, 44, 45, 46, 40, 14, - 38, -62, 43, -75, 21, 20, 19, -38, 60, 39, + 38, -62, 43, -74, 21, 20, 19, -38, 60, 39, -30, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 41, 42, 47, - 48, 49, 50, -85, -84, -83, -9, -86, -74, 53, - 2, -35, 43, -75, 7, 8, 9, 10, 11, 12, - 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 48, 49, 50, -86, -103, -92, -91, -90, -57, -59, + 2, -36, -45, -39, 60, -31, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, - 45, 46, 47, 48, 49, 50, -91, -90, -89, -57, - -59, 2, -36, -45, -39, 60, -31, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, -96, -102, -102, - -53, 56, -52, -51, -54, 2, -14, -28, 68, 6, - 17, 5, 6, 17, 5, 56, -65, 37, -47, -41, - 60, -33, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, -28, -28, -28, -43, -78, - -76, 5, -15, -28, -28, -78, -71, -72, -92, -28, - 60, -37, 63, 56, -83, 52, -79, -77, -27, 5, - 65, 56, -89, 53, -47, -28, 60, -37, 56, -95, - -94, -11, -97, 2, 48, 56, -52, 61, 53, 61, - 53, 54, 54, -26, -21, -25, -20, 63, 68, -37, - 2, -102, -28, -28, 60, -37, 52, 55, 55, 55, - 53, -16, 61, 68, 41, 52, 55, 52, 53, 53, - 61, 53, 61, -28, -29, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, -102, -27, 61, - 53, 41, 5, -102, -28, 52, -28, -102, -94, -28, - -17, -19, -21, -23, 68, -17, -53, 62, -50, 69, - 2, -21, 69, 58, 69, 52, 52, -28, 5, -85, - -67, -91, 53, -76, -12, 69, -10, -15, 5, 42, - -18, -70, -69, -68, -9, -56, -60, 2, -46, 37, - -40, 60, -32, 7, 8, 9, 10, 11, 12, 13, - 15, 16, 17, 18, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 5, -92, -28, 61, 53, -16, -77, -27, - 42, 52, 5, -101, 66, -49, 69, 2, -24, -19, - -21, 62, 69, 61, 69, -37, 5, 5, 53, -16, - 56, 56, 56, 69, 61, 52, 53, 56, -68, 53, - -28, -28, 60, -37, 53, -16, -43, 53, 5, 53, - -16, 50, 49, -48, -42, 60, -34, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, - 69, 61, 69, -21, 69, 55, -16, 53, -16, 53, - -10, -18, 52, 52, -28, 53, 62, 53, -16, 53, - -101, -43, 67, 60, -37, -24, -67, 55, 53, 5, - 5, 53, -102, 55, 67, -28, 56, -67, 53, -16, - 55, -16, -100, -102, 56, 53, -67, 55, 56, -99, - -98, -11, 2, 56, -67, -102, -98, 56, + 34, 35, 36, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, -97, -103, -103, -53, + 56, -52, -51, -54, 2, -14, -28, 68, 6, 17, + 5, 6, 17, 5, 56, -65, 37, -47, -41, 60, + -33, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, -28, -28, -28, -43, -79, -77, + 5, -15, -28, -28, -79, -71, -72, -93, -28, 60, + -37, 63, 56, -85, -84, -11, -87, -75, 2, -35, + 43, -76, 7, 8, 9, 10, 11, 12, 13, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, + 47, 48, 49, 50, 56, -90, 53, -47, -28, 60, + -37, 56, -96, -95, -11, -98, 2, 48, 56, -52, + 61, 53, 61, 53, 54, 54, -26, -21, -25, -20, + 63, 68, -37, 2, -103, -28, -28, 60, -37, 52, + 55, 55, 55, 53, -16, 61, 68, 41, 52, 55, + 52, 53, 53, 61, 53, 61, -28, -29, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + -103, -84, 52, -80, -71, -72, -78, -27, 5, 65, + -103, -28, 52, -28, -103, -95, -28, -17, -19, -21, + -23, 68, -17, -53, 62, -50, 69, 2, -21, 69, + 58, 69, 52, 52, -28, 5, -86, -67, -92, 53, + -77, -12, 69, -10, -15, 5, 42, -18, -70, -69, + -68, -9, -56, -60, 2, -46, 37, -40, 60, -32, + 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, + 18, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 5, + -93, -28, 61, -27, 61, 53, -103, -103, 41, 5, + 52, 5, -102, 66, -49, 69, 2, -24, -19, -21, + 62, 69, 61, 69, -37, 5, 5, 53, -16, 56, + 56, 56, 69, 61, 52, 53, 56, -68, 53, -28, + -28, 60, -37, 53, -16, -43, -103, -16, -78, -103, + -27, 42, 5, 53, -16, 50, 49, -48, -42, 60, + -34, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 50, 69, 61, 69, -21, 69, 55, + -16, 53, -16, 53, -10, -18, 52, 52, -28, 53, + 62, -103, 53, -16, 53, -102, -43, 67, 60, -37, + -24, -67, 55, 53, 5, 5, 53, -103, 55, 67, + -28, 56, -67, 53, -16, 55, -16, -101, -103, 56, + 53, -67, 55, 56, -100, -99, -11, 2, 56, -67, + -103, -99, 56, } var protoDef = [...]int16{ @@ -766,73 +773,74 @@ var protoDef = [...]int16{ 4, 5, 0, 0, -2, 9, 10, 11, 12, 13, 14, 15, 16, 17, 0, 0, 0, 0, 0, 0, 0, 19, 0, 60, 0, 8, 21, 0, 0, 21, - 28, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 522, 523, 524, 525, 0, 42, 44, 0, 0, + 28, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, + 522, 523, 524, 525, 526, 0, 42, 44, 0, 0, 0, 0, 100, 0, 0, 22, 61, 23, 24, 21, - 21, 27, 0, 0, 0, 0, -2, -2, -2, 101, + 21, 27, 0, 0, 0, 0, -2, 21, -2, 101, 21, 25, 26, 29, 21, 47, 48, 49, 50, 51, 0, 52, 0, 0, 57, 43, 45, 46, 0, -2, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 166, 112, 113, 114, 102, 0, 268, - 30, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, 269, 270, 271, - 272, 273, 274, 0, -2, 180, 181, 182, 183, 184, - 185, 0, 0, 168, 315, 316, 317, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 0, -2, 215, 216, - 217, 219, 0, 0, 104, 0, 32, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 0, -2, 41, - 0, 63, 64, -2, 67, 72, 0, 76, 0, 53, - 56, 59, 54, 55, 58, 21, 192, 0, 0, 108, - 0, 36, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 438, 0, 0, 0, 0, 0, - 153, 155, 0, 0, 0, 0, 0, 0, 171, 173, - 0, 103, 0, 21, 179, 0, 0, 158, 160, 163, - 0, 21, 214, 218, 0, 0, 0, 105, 21, -2, - 228, 229, 230, 231, 0, 62, 66, 68, 69, 70, - 71, 0, 0, 74, 83, 84, 85, 0, 0, 0, - 0, 189, 0, 0, 0, 109, 0, -2, -2, -2, - 151, 0, 0, 0, 0, 0, -2, 0, 165, 169, - 0, 170, 0, 31, 0, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 176, 0, 0, - 167, 0, 164, 211, 0, 0, 33, 224, 227, 0, - 75, 80, 81, 82, 0, 73, 0, 87, 0, 96, - 0, 98, 77, 0, 79, 0, 0, 37, 0, 0, - 0, 0, 152, 154, 0, 116, 117, 0, 156, 157, - 0, 0, -2, 126, 127, 128, 129, 131, 0, 0, - 106, 0, 34, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 0, 172, 174, 0, 186, 0, 159, 161, - 162, 0, 0, 0, 0, 0, 89, 0, 91, 93, - 94, 86, 95, 0, 97, 0, 0, 0, 208, 0, - 175, 188, 210, 115, 0, 0, 40, 122, 125, 130, - 0, 0, 0, 107, 136, 0, 0, 187, 0, 222, - 0, 0, 0, 0, 110, 0, 38, 439, 440, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 88, 0, 90, 99, 78, -2, 0, 206, 0, 209, - 118, 119, 0, 0, 35, 137, 138, 220, 0, 223, - 21, 0, 235, 0, 111, 92, 0, -2, 207, 0, - 0, 221, 232, 21, 234, 39, 120, 0, 132, 0, - -2, 0, 0, -2, 121, 133, 0, -2, 21, -2, - 239, 240, 241, 134, 0, 233, 238, 135, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 166, 112, 113, 114, 102, 0, 269, + 30, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 270, 271, 272, + 273, 274, 275, 0, -2, 0, -2, 216, 217, 218, + 220, 0, 0, 104, 0, 32, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 0, -2, 41, 0, + 63, 64, -2, 67, 72, 0, 76, 0, 53, 56, + 59, 54, 55, 58, 21, 193, 0, 0, 108, 0, + 36, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 0, 0, 0, 0, 0, 153, + 155, 0, 0, 0, 0, 0, 0, 173, 175, 0, + 103, 0, 21, -2, 182, 183, 184, 185, 186, 0, + 0, 168, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 21, 215, 219, 0, 0, 0, + 105, 21, -2, 229, 230, 231, 232, 0, 62, 66, + 68, 69, 70, 71, 0, 0, 74, 83, 84, 85, + 0, 0, 0, 0, 190, 0, 0, 0, 109, 0, + 21, -2, -2, 151, 0, 0, 0, 0, 0, -2, + 0, 165, 169, 0, 170, 0, 31, 0, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 178, 181, 0, 0, 21, 21, 158, 160, 163, 0, + 212, 0, 0, 33, 225, 228, 0, 75, 80, 81, + 82, 0, 73, 0, 87, 0, 96, 0, 98, 77, + 0, 79, 0, 0, 37, 0, 0, 0, 0, 152, + 154, 0, 116, 117, 0, 156, 157, 0, 0, -2, + 126, 127, 128, 129, 131, 0, 0, 106, 0, 34, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, + 174, 176, 0, 21, 0, 21, 171, 172, 0, 164, + 0, 0, 0, 0, 0, 89, 0, 91, 93, 94, + 86, 95, 0, 97, 0, 0, 0, 209, 0, 177, + 189, 211, 115, 0, 0, 40, 122, 125, 130, 0, + 0, 0, 107, 136, 0, 0, 187, 21, 159, 167, + 161, 162, 0, 223, 0, 0, 0, 0, 110, 0, + 38, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 88, 0, 90, 99, 78, -2, + 0, 207, 0, 210, 118, 119, 0, 0, 35, 137, + 138, 188, 221, 0, 224, 21, 0, 236, 0, 111, + 92, 0, -2, 208, 0, 0, 222, 233, 21, 235, + 39, 120, 0, 132, 0, -2, 0, 0, -2, 121, + 133, 0, -2, 21, -2, 240, 241, 242, 134, 0, + 234, 239, 135, } var protoTok1 = [...]int8{ @@ -1985,9 +1993,11 @@ protodefault: protoVAL.resvd = ast.NewReservedRangesNode(protoDollar[1].id.ToKeyword(), protoDollar[2].rngs.ranges, protoDollar[2].rngs.commas, protoDollar[3].b) } case 167: - protoDollar = protoS[protopt-3 : protopt+1] + protoDollar = protoS[protopt-4 : protopt+1] { - protoVAL.resvd = ast.NewReservedRangesNode(protoDollar[1].id.ToKeyword(), protoDollar[2].rngs.ranges, protoDollar[2].rngs.commas, protoDollar[3].b) + // TODO: Tolerate a missing semicolon here. This currnelty creates a shift/reduce conflict + // between `reserved 1 to 10` and `reserved 1` followed by `to = 10`. + protoVAL.resvdN = newNodeWithEmptyDecls(ast.NewReservedRangesNode(protoDollar[1].id.ToKeyword(), protoDollar[2].rngs.ranges, protoDollar[2].rngs.commas, protoDollar[3].b), protoDollar[4].bs) } case 169: protoDollar = protoS[protopt-3 : protopt+1] @@ -2000,113 +2010,119 @@ protodefault: protoVAL.resvd = ast.NewReservedIdentifiersNode(protoDollar[1].id.ToKeyword(), protoDollar[2].names.idents, protoDollar[2].names.commas, protoDollar[3].b) } case 171: + protoDollar = protoS[protopt-3 : protopt+1] + { + semi, extra := protolex.(*protoLex).requireSemicolon(protoDollar[3].bs) + protoVAL.resvdN = newNodeWithEmptyDecls(ast.NewReservedNamesNode(protoDollar[1].id.ToKeyword(), protoDollar[2].names.names, protoDollar[2].names.commas, semi), extra) + } + case 172: + protoDollar = protoS[protopt-3 : protopt+1] + { + semi, extra := protolex.(*protoLex).requireSemicolon(protoDollar[3].bs) + protoVAL.resvdN = newNodeWithEmptyDecls(ast.NewReservedIdentifiersNode(protoDollar[1].id.ToKeyword(), protoDollar[2].names.idents, protoDollar[2].names.commas, semi), extra) + } + case 173: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.names = &nameSlices{names: []ast.StringValueNode{toStringValueNode(protoDollar[1].str)}} } - case 172: + case 174: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].names.names = append(protoDollar[1].names.names, toStringValueNode(protoDollar[3].str)) protoDollar[1].names.commas = append(protoDollar[1].names.commas, protoDollar[2].b) protoVAL.names = protoDollar[1].names } - case 173: + case 175: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.names = &nameSlices{idents: []*ast.IdentNode{protoDollar[1].id}} } - case 174: + case 176: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].names.idents = append(protoDollar[1].names.idents, protoDollar[3].id) protoDollar[1].names.commas = append(protoDollar[1].names.commas, protoDollar[2].b) protoVAL.names = protoDollar[1].names } - case 175: + case 177: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.en = ast.NewEnumNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].enElements, protoDollar[5].b) } - case 176: + case 178: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.enN = newNodeWithEmptyDecls(ast.NewEnumNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].enElements, protoDollar[5].b), protoDollar[6].bs) } - case 177: - protoDollar = protoS[protopt-0 : protopt+1] - { - protoVAL.enElements = nil - } case 179: - protoDollar = protoS[protopt-2 : protopt+1] + protoDollar = protoS[protopt-1 : protopt+1] { - if protoDollar[2].enElement != nil { - protoVAL.enElements = append(protoDollar[1].enElements, protoDollar[2].enElement) - } else { - protoVAL.enElements = protoDollar[1].enElements - } + protoVAL.enElements = newEnumElements(protoDollar[1].bs, nil) } case 180: - protoDollar = protoS[protopt-1 : protopt+1] + protoDollar = protoS[protopt-2 : protopt+1] { - if protoDollar[1].enElement != nil { - protoVAL.enElements = []ast.EnumElement{protoDollar[1].enElement} - } else { - protoVAL.enElements = nil - } + protoVAL.enElements = newEnumElements(protoDollar[1].bs, protoDollar[2].enElements) } case 181: - protoDollar = protoS[protopt-1 : protopt+1] + protoDollar = protoS[protopt-2 : protopt+1] { - protoVAL.enElement = protoDollar[1].opt + protoVAL.enElements = append(protoDollar[1].enElements, protoDollar[2].enElements...) } case 182: protoDollar = protoS[protopt-1 : protopt+1] { - protoVAL.enElement = protoDollar[1].env + protoVAL.enElements = protoDollar[1].enElements } case 183: protoDollar = protoS[protopt-1 : protopt+1] { - protoVAL.enElement = protoDollar[1].resvd + protoVAL.enElements = toEnumElements(protoDollar[1].optN) } case 184: protoDollar = protoS[protopt-1 : protopt+1] { - protoVAL.enElement = ast.NewEmptyDeclNode(protoDollar[1].b) + protoVAL.enElements = toEnumElements(protoDollar[1].env) } case 185: protoDollar = protoS[protopt-1 : protopt+1] { - protoVAL.enElement = nil + protoVAL.enElements = toEnumElements(protoDollar[1].resvdN) } case 186: - protoDollar = protoS[protopt-4 : protopt+1] + protoDollar = protoS[protopt-1 : protopt+1] { - protoVAL.env = ast.NewEnumValueNode(protoDollar[1].id, protoDollar[2].b, protoDollar[3].il, nil, protoDollar[4].b) + protoVAL.enElements = nil } case 187: - protoDollar = protoS[protopt-5 : protopt+1] + protoDollar = protoS[protopt-4 : protopt+1] { - protoVAL.env = ast.NewEnumValueNode(protoDollar[1].id, protoDollar[2].b, protoDollar[3].il, protoDollar[4].cmpctOpts, protoDollar[5].b) + semi, extra := protolex.(*protoLex).requireSemicolon(protoDollar[4].bs) + protoVAL.env = newNodeWithEmptyDecls(ast.NewEnumValueNode(protoDollar[1].id, protoDollar[2].b, protoDollar[3].il, nil, semi), extra) } case 188: protoDollar = protoS[protopt-5 : protopt+1] { - protoVAL.msg = ast.NewMessageNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].msgElements, protoDollar[5].b) + semi, extra := protolex.(*protoLex).requireSemicolon(protoDollar[5].bs) + protoVAL.env = newNodeWithEmptyDecls(ast.NewEnumValueNode(protoDollar[1].id, protoDollar[2].b, protoDollar[3].il, protoDollar[4].cmpctOpts, semi), extra) } case 189: + protoDollar = protoS[protopt-5 : protopt+1] + { + protoVAL.msg = ast.NewMessageNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].msgElements, protoDollar[5].b) + } + case 190: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.msgN = newNodeWithEmptyDecls(ast.NewMessageNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].msgElements, protoDollar[5].b), protoDollar[6].bs) } - case 190: + case 191: protoDollar = protoS[protopt-0 : protopt+1] { protoVAL.msgElements = nil } - case 192: + case 193: protoDollar = protoS[protopt-2 : protopt+1] { if protoDollar[2].msgElement != nil { @@ -2115,7 +2131,7 @@ protodefault: protoVAL.msgElements = protoDollar[1].msgElements } } - case 193: + case 194: protoDollar = protoS[protopt-1 : protopt+1] { if protoDollar[1].msgElement != nil { @@ -2124,102 +2140,102 @@ protodefault: protoVAL.msgElements = nil } } - case 194: + case 195: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].fld } - case 195: + case 196: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].en } - case 196: + case 197: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].msg } - case 197: + case 198: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].extend } - case 198: + case 199: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].ext } - case 199: + case 200: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].grp } - case 200: + case 201: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].opt } - case 201: + case 202: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].oo } - case 202: + case 203: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].mapFld } - case 203: + case 204: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].resvd } - case 204: + case 205: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = ast.NewEmptyDeclNode(protoDollar[1].b) } - case 205: + case 206: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = nil } - case 206: + case 207: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b) } - case 207: + case 208: protoDollar = protoS[protopt-7 : protopt+1] { protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b) } - case 208: + case 209: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b) } - case 209: + case 210: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b) } - case 210: + case 211: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.extend = ast.NewExtendNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].b, protoDollar[4].extElements, protoDollar[5].b) } - case 211: + case 212: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.extendN = newNodeWithEmptyDecls(ast.NewExtendNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].b, protoDollar[4].extElements, protoDollar[5].b), protoDollar[6].bs) } - case 212: + case 213: protoDollar = protoS[protopt-0 : protopt+1] { protoVAL.extElements = nil } - case 214: + case 215: protoDollar = protoS[protopt-2 : protopt+1] { if protoDollar[2].extElement != nil { @@ -2228,7 +2244,7 @@ protodefault: protoVAL.extElements = protoDollar[1].extElements } } - case 215: + case 216: protoDollar = protoS[protopt-1 : protopt+1] { if protoDollar[1].extElement != nil { @@ -2237,133 +2253,133 @@ protodefault: protoVAL.extElements = nil } } - case 216: + case 217: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.extElement = protoDollar[1].fld } - case 217: + case 218: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.extElement = protoDollar[1].grp } - case 218: + case 219: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.extElement = nil } - case 219: + case 220: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.extElement = nil } - case 220: + case 221: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b) } - case 221: + case 222: protoDollar = protoS[protopt-7 : protopt+1] { protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b) } - case 222: + case 223: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b) } - case 223: + case 224: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b) } - case 224: + case 225: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.svc = newNodeWithEmptyDecls(ast.NewServiceNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].svcElements, protoDollar[5].b), protoDollar[6].bs) } - case 225: + case 226: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.svcElements = newServiceElements(protoDollar[1].bs, nil) } - case 226: + case 227: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.svcElements = newServiceElements(protoDollar[1].bs, protoDollar[2].svcElements) } - case 227: + case 228: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.svcElements = append(protoDollar[1].svcElements, protoDollar[2].svcElements...) } - case 228: + case 229: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.svcElements = protoDollar[1].svcElements } - case 229: + case 230: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.svcElements = toServiceElements(protoDollar[1].optN) } - case 230: + case 231: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.svcElements = toServiceElements(protoDollar[1].mtd) } - case 231: + case 232: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.svcElements = nil } - case 232: + case 233: protoDollar = protoS[protopt-6 : protopt+1] { semi, extra := protolex.(*protoLex).requireSemicolon(protoDollar[6].bs) protoVAL.mtd = newNodeWithEmptyDecls(ast.NewRPCNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].mtdMsgType, protoDollar[4].id.ToKeyword(), protoDollar[5].mtdMsgType, semi), extra) } - case 233: + case 234: protoDollar = protoS[protopt-9 : protopt+1] { protoVAL.mtd = newNodeWithEmptyDecls(ast.NewRPCNodeWithBody(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].mtdMsgType, protoDollar[4].id.ToKeyword(), protoDollar[5].mtdMsgType, protoDollar[6].b, protoDollar[7].mtdElements, protoDollar[8].b), protoDollar[9].bs) } - case 234: + case 235: protoDollar = protoS[protopt-4 : protopt+1] { protoVAL.mtdMsgType = ast.NewRPCTypeNode(protoDollar[1].b, protoDollar[2].id.ToKeyword(), protoDollar[3].tid, protoDollar[4].b) } - case 235: + case 236: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.mtdMsgType = ast.NewRPCTypeNode(protoDollar[1].b, nil, protoDollar[2].tid, protoDollar[3].b) } - case 236: + case 237: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.mtdElements = newMethodElements(protoDollar[1].bs, nil) } - case 237: + case 238: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.mtdElements = newMethodElements(protoDollar[1].bs, protoDollar[2].mtdElements) } - case 238: + case 239: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.mtdElements = append(protoDollar[1].mtdElements, protoDollar[2].mtdElements...) } - case 239: + case 240: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.mtdElements = protoDollar[1].mtdElements } - case 240: + case 241: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.mtdElements = toMethodElements(protoDollar[1].optN) } - case 241: + case 242: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.mtdElements = nil