diff --git a/quint/io-cli-tests.md b/quint/io-cli-tests.md index 6907f5c47..d9744bc60 100644 --- a/quint/io-cli-tests.md +++ b/quint/io-cli-tests.md @@ -1130,7 +1130,7 @@ rm xTest.itf.json ``` -[{"#meta":{"index":0},"x":{"tag":"None","value":{}}},{"#meta":{"index":1},"x":{"tag":"Some","value":{"#bigint":"1"}}},{"#meta":{"index":2},"x":{"tag":"Some","value":{"#bigint":"2"}}}] +[{"#meta":{"index":0},"x":{"tag":"None","value":{"#tup":[]}}},{"#meta":{"index":1},"x":{"tag":"Some","value":{"#bigint":"1"}}},{"#meta":{"index":2},"x":{"tag":"Some","value":{"#bigint":"2"}}}] ``` ### FAIL on parsing filenames with different casing diff --git a/quint/src/generated/Quint.g4 b/quint/src/generated/Quint.g4 index 5e571e491..b562a451a 100644 --- a/quint/src/generated/Quint.g4 +++ b/quint/src/generated/Quint.g4 @@ -176,8 +176,9 @@ expr: // apply a built-in operator via the dot notation | 'all' '{' expr (',' expr)* ','? '}' # actionAll | 'any' '{' expr (',' expr)* ','? '}' # actionAny | ( qualId | INT | BOOL | STRING) # literalOrId - // a tuple constructor, the form tup(...) is just an operator call + // a tuple constructor, the form Tup(...) is just an operator call | '(' expr ',' expr (',' expr)* ','? ')' # tuple + | '(' ')' # unit // short-hand syntax for pairs, mainly designed for maps | expr '->' expr # pair | '{' recElem (',' recElem)* ','? '}' # record diff --git a/quint/src/generated/Quint.interp b/quint/src/generated/Quint.interp index f54adf8d9..f372f04a1 100644 --- a/quint/src/generated/Quint.interp +++ b/quint/src/generated/Quint.interp @@ -191,4 +191,4 @@ identifier atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 72, 801, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 3, 2, 6, 2, 90, 10, 2, 13, 2, 14, 2, 91, 3, 2, 3, 2, 3, 3, 7, 3, 97, 10, 3, 12, 3, 14, 3, 100, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 106, 10, 3, 12, 3, 14, 3, 109, 11, 3, 3, 3, 3, 3, 3, 4, 7, 4, 114, 10, 4, 12, 4, 14, 4, 117, 11, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 141, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 149, 10, 6, 12, 6, 14, 6, 152, 11, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 3, 6, 5, 6, 162, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 170, 10, 6, 12, 6, 14, 6, 173, 11, 6, 5, 6, 175, 10, 6, 3, 6, 5, 6, 178, 10, 6, 3, 6, 3, 6, 5, 6, 182, 10, 6, 3, 6, 3, 6, 5, 6, 186, 10, 6, 3, 6, 5, 6, 189, 10, 6, 5, 6, 191, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 205, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 212, 10, 8, 12, 8, 14, 8, 215, 11, 8, 3, 8, 5, 8, 218, 10, 8, 3, 9, 5, 9, 221, 10, 9, 3, 9, 3, 9, 3, 9, 7, 9, 226, 10, 9, 12, 9, 14, 9, 229, 11, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 236, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 242, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 247, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 258, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 266, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 272, 10, 13, 3, 13, 3, 13, 5, 13, 276, 10, 13, 5, 13, 278, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 289, 10, 14, 5, 14, 291, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 304, 10, 15, 12, 15, 14, 15, 307, 11, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 314, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 327, 10, 15, 12, 15, 14, 15, 330, 11, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 337, 10, 15, 5, 15, 339, 10, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 354, 10, 20, 12, 20, 14, 20, 357, 11, 20, 5, 20, 359, 10, 20, 3, 20, 5, 20, 362, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 383, 10, 20, 12, 20, 14, 20, 386, 11, 20, 3, 20, 5, 20, 389, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 395, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 412, 10, 20, 12, 20, 14, 20, 415, 11, 20, 3, 20, 3, 20, 5, 20, 419, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 427, 10, 20, 12, 20, 14, 20, 430, 11, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 443, 10, 22, 12, 22, 14, 22, 446, 11, 22, 3, 22, 3, 22, 3, 22, 5, 22, 451, 10, 22, 3, 22, 3, 22, 5, 22, 455, 10, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 464, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 480, 10, 24, 12, 24, 14, 24, 483, 11, 24, 3, 24, 5, 24, 486, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 495, 10, 24, 12, 24, 14, 24, 498, 11, 24, 3, 24, 5, 24, 501, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 511, 10, 24, 12, 24, 14, 24, 514, 11, 24, 3, 24, 5, 24, 517, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 526, 10, 24, 12, 24, 14, 24, 529, 11, 24, 3, 24, 5, 24, 532, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 540, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 548, 10, 24, 12, 24, 14, 24, 551, 11, 24, 3, 24, 5, 24, 554, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 562, 10, 24, 12, 24, 14, 24, 565, 11, 24, 3, 24, 5, 24, 568, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 576, 10, 24, 12, 24, 14, 24, 579, 11, 24, 5, 24, 581, 10, 24, 3, 24, 5, 24, 584, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 609, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 648, 10, 24, 3, 24, 5, 24, 651, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 658, 10, 24, 12, 24, 14, 24, 661, 11, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 667, 10, 25, 3, 25, 3, 25, 3, 25, 7, 25, 672, 10, 25, 12, 25, 14, 25, 675, 11, 25, 3, 25, 3, 25, 3, 26, 3, 26, 5, 26, 681, 10, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 690, 10, 27, 3, 27, 5, 27, 693, 10, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 704, 10, 28, 3, 29, 3, 29, 5, 29, 708, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 718, 10, 30, 12, 30, 14, 30, 721, 11, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 727, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 6, 31, 734, 10, 31, 13, 31, 14, 31, 735, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 5, 32, 745, 10, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 5, 35, 755, 10, 35, 3, 36, 3, 36, 3, 36, 7, 36, 760, 10, 36, 12, 36, 14, 36, 763, 11, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 771, 10, 37, 3, 38, 3, 38, 5, 38, 775, 10, 38, 3, 39, 3, 39, 5, 39, 779, 10, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 7, 42, 788, 10, 42, 12, 42, 14, 42, 791, 11, 42, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 797, 10, 43, 3, 44, 3, 44, 3, 44, 2, 2, 4, 38, 46, 45, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 2, 10, 3, 2, 53, 55, 3, 2, 51, 52, 3, 2, 56, 61, 4, 2, 45, 49, 65, 66, 3, 2, 45, 48, 5, 2, 33, 33, 45, 48, 51, 61, 3, 2, 42, 44, 3, 2, 67, 68, 2, 898, 2, 89, 3, 2, 2, 2, 4, 98, 3, 2, 2, 2, 6, 115, 3, 2, 2, 2, 8, 140, 3, 2, 2, 2, 10, 190, 3, 2, 2, 2, 12, 204, 3, 2, 2, 2, 14, 206, 3, 2, 2, 2, 16, 220, 3, 2, 2, 2, 18, 230, 3, 2, 2, 2, 20, 237, 3, 2, 2, 2, 22, 257, 3, 2, 2, 2, 24, 277, 3, 2, 2, 2, 26, 290, 3, 2, 2, 2, 28, 338, 3, 2, 2, 2, 30, 340, 3, 2, 2, 2, 32, 342, 3, 2, 2, 2, 34, 344, 3, 2, 2, 2, 36, 346, 3, 2, 2, 2, 38, 418, 3, 2, 2, 2, 40, 431, 3, 2, 2, 2, 42, 454, 3, 2, 2, 2, 44, 456, 3, 2, 2, 2, 46, 608, 3, 2, 2, 2, 48, 662, 3, 2, 2, 2, 50, 680, 3, 2, 2, 2, 52, 685, 3, 2, 2, 2, 54, 703, 3, 2, 2, 2, 56, 707, 3, 2, 2, 2, 58, 726, 3, 2, 2, 2, 60, 728, 3, 2, 2, 2, 62, 744, 3, 2, 2, 2, 64, 746, 3, 2, 2, 2, 66, 748, 3, 2, 2, 2, 68, 754, 3, 2, 2, 2, 70, 756, 3, 2, 2, 2, 72, 770, 3, 2, 2, 2, 74, 774, 3, 2, 2, 2, 76, 778, 3, 2, 2, 2, 78, 780, 3, 2, 2, 2, 80, 782, 3, 2, 2, 2, 82, 784, 3, 2, 2, 2, 84, 796, 3, 2, 2, 2, 86, 798, 3, 2, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 2, 2, 3, 94, 3, 3, 2, 2, 2, 95, 97, 7, 69, 2, 2, 96, 95, 3, 2, 2, 2, 97, 100, 3, 2, 2, 2, 98, 96, 3, 2, 2, 2, 98, 99, 3, 2, 2, 2, 99, 101, 3, 2, 2, 2, 100, 98, 3, 2, 2, 2, 101, 102, 7, 3, 2, 2, 102, 103, 5, 82, 42, 2, 103, 107, 7, 4, 2, 2, 104, 106, 5, 6, 4, 2, 105, 104, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 110, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 5, 2, 2, 111, 5, 3, 2, 2, 2, 112, 114, 7, 69, 2, 2, 113, 112, 3, 2, 2, 2, 114, 117, 3, 2, 2, 2, 115, 113, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 118, 3, 2, 2, 2, 117, 115, 3, 2, 2, 2, 118, 119, 5, 8, 5, 2, 119, 7, 3, 2, 2, 2, 120, 121, 7, 6, 2, 2, 121, 122, 5, 82, 42, 2, 122, 123, 7, 7, 2, 2, 123, 124, 5, 38, 20, 2, 124, 141, 3, 2, 2, 2, 125, 126, 7, 8, 2, 2, 126, 127, 5, 82, 42, 2, 127, 128, 7, 7, 2, 2, 128, 129, 5, 38, 20, 2, 129, 141, 3, 2, 2, 2, 130, 131, 7, 9, 2, 2, 131, 132, 5, 62, 32, 2, 132, 133, 7, 62, 2, 2, 133, 134, 5, 46, 24, 2, 134, 141, 3, 2, 2, 2, 135, 141, 5, 28, 15, 2, 136, 141, 5, 10, 6, 2, 137, 141, 5, 12, 7, 2, 138, 141, 5, 24, 13, 2, 139, 141, 5, 26, 14, 2, 140, 120, 3, 2, 2, 2, 140, 125, 3, 2, 2, 2, 140, 130, 3, 2, 2, 2, 140, 135, 3, 2, 2, 2, 140, 136, 3, 2, 2, 2, 140, 137, 3, 2, 2, 2, 140, 138, 3, 2, 2, 2, 140, 139, 3, 2, 2, 2, 141, 9, 3, 2, 2, 2, 142, 143, 5, 22, 12, 2, 143, 144, 5, 74, 38, 2, 144, 145, 7, 63, 2, 2, 145, 150, 5, 66, 34, 2, 146, 147, 7, 10, 2, 2, 147, 149, 5, 66, 34, 2, 148, 146, 3, 2, 2, 2, 149, 152, 3, 2, 2, 2, 150, 148, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 153, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 153, 154, 7, 64, 2, 2, 154, 155, 7, 7, 2, 2, 155, 158, 5, 38, 20, 2, 156, 157, 7, 62, 2, 2, 157, 159, 5, 46, 24, 2, 158, 156, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 162, 7, 11, 2, 2, 161, 160, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 191, 3, 2, 2, 2, 163, 164, 5, 22, 12, 2, 164, 177, 5, 74, 38, 2, 165, 174, 7, 63, 2, 2, 166, 171, 5, 64, 33, 2, 167, 168, 7, 10, 2, 2, 168, 170, 5, 64, 33, 2, 169, 167, 3, 2, 2, 2, 170, 173, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 175, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 174, 166, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 178, 7, 64, 2, 2, 177, 165, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 181, 3, 2, 2, 2, 179, 180, 7, 7, 2, 2, 180, 182, 5, 38, 20, 2, 181, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 185, 3, 2, 2, 2, 183, 184, 7, 62, 2, 2, 184, 186, 5, 46, 24, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 188, 3, 2, 2, 2, 187, 189, 7, 11, 2, 2, 188, 187, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 191, 3, 2, 2, 2, 190, 142, 3, 2, 2, 2, 190, 163, 3, 2, 2, 2, 191, 11, 3, 2, 2, 2, 192, 193, 7, 12, 2, 2, 193, 205, 5, 82, 42, 2, 194, 195, 7, 12, 2, 2, 195, 196, 5, 14, 8, 2, 196, 197, 7, 62, 2, 2, 197, 198, 5, 38, 20, 2, 198, 205, 3, 2, 2, 2, 199, 200, 7, 12, 2, 2, 200, 201, 5, 14, 8, 2, 201, 202, 7, 62, 2, 2, 202, 203, 5, 16, 9, 2, 203, 205, 3, 2, 2, 2, 204, 192, 3, 2, 2, 2, 204, 194, 3, 2, 2, 2, 204, 199, 3, 2, 2, 2, 205, 13, 3, 2, 2, 2, 206, 217, 5, 82, 42, 2, 207, 208, 7, 13, 2, 2, 208, 213, 7, 67, 2, 2, 209, 210, 7, 10, 2, 2, 210, 212, 7, 67, 2, 2, 211, 209, 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, 218, 7, 14, 2, 2, 217, 207, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 15, 3, 2, 2, 2, 219, 221, 7, 15, 2, 2, 220, 219, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 227, 5, 18, 10, 2, 223, 224, 7, 15, 2, 2, 224, 226, 5, 18, 10, 2, 225, 223, 3, 2, 2, 2, 226, 229, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 17, 3, 2, 2, 2, 229, 227, 3, 2, 2, 2, 230, 235, 5, 84, 43, 2, 231, 232, 7, 63, 2, 2, 232, 233, 5, 38, 20, 2, 233, 234, 7, 64, 2, 2, 234, 236, 3, 2, 2, 2, 235, 231, 3, 2, 2, 2, 235, 236, 3, 2, 2, 2, 236, 19, 3, 2, 2, 2, 237, 238, 7, 16, 2, 2, 238, 241, 5, 82, 42, 2, 239, 240, 7, 7, 2, 2, 240, 242, 5, 38, 20, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 244, 7, 62, 2, 2, 244, 246, 5, 46, 24, 2, 245, 247, 7, 11, 2, 2, 246, 245, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 21, 3, 2, 2, 2, 248, 258, 7, 17, 2, 2, 249, 258, 7, 18, 2, 2, 250, 251, 7, 19, 2, 2, 251, 258, 7, 17, 2, 2, 252, 253, 7, 19, 2, 2, 253, 258, 7, 18, 2, 2, 254, 258, 7, 20, 2, 2, 255, 258, 7, 21, 2, 2, 256, 258, 7, 22, 2, 2, 257, 248, 3, 2, 2, 2, 257, 249, 3, 2, 2, 2, 257, 250, 3, 2, 2, 2, 257, 252, 3, 2, 2, 2, 257, 254, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 257, 256, 3, 2, 2, 2, 258, 23, 3, 2, 2, 2, 259, 260, 7, 23, 2, 2, 260, 261, 5, 32, 17, 2, 261, 262, 7, 24, 2, 2, 262, 265, 5, 68, 35, 2, 263, 264, 7, 25, 2, 2, 264, 266, 5, 36, 19, 2, 265, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 278, 3, 2, 2, 2, 267, 268, 7, 23, 2, 2, 268, 271, 5, 32, 17, 2, 269, 270, 7, 26, 2, 2, 270, 272, 5, 32, 17, 2, 271, 269, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 275, 3, 2, 2, 2, 273, 274, 7, 25, 2, 2, 274, 276, 5, 36, 19, 2, 275, 273, 3, 2, 2, 2, 275, 276, 3, 2, 2, 2, 276, 278, 3, 2, 2, 2, 277, 259, 3, 2, 2, 2, 277, 267, 3, 2, 2, 2, 278, 25, 3, 2, 2, 2, 279, 280, 7, 27, 2, 2, 280, 281, 5, 32, 17, 2, 281, 282, 7, 24, 2, 2, 282, 283, 5, 68, 35, 2, 283, 291, 3, 2, 2, 2, 284, 285, 7, 27, 2, 2, 285, 288, 5, 32, 17, 2, 286, 287, 7, 26, 2, 2, 287, 289, 5, 32, 17, 2, 288, 286, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 291, 3, 2, 2, 2, 290, 279, 3, 2, 2, 2, 290, 284, 3, 2, 2, 2, 291, 27, 3, 2, 2, 2, 292, 293, 7, 23, 2, 2, 293, 294, 5, 30, 16, 2, 294, 295, 7, 63, 2, 2, 295, 296, 5, 32, 17, 2, 296, 297, 7, 62, 2, 2, 297, 305, 5, 46, 24, 2, 298, 299, 7, 10, 2, 2, 299, 300, 5, 32, 17, 2, 300, 301, 7, 62, 2, 2, 301, 302, 5, 46, 24, 2, 302, 304, 3, 2, 2, 2, 303, 298, 3, 2, 2, 2, 304, 307, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 308, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 308, 309, 7, 64, 2, 2, 309, 310, 7, 24, 2, 2, 310, 313, 7, 53, 2, 2, 311, 312, 7, 25, 2, 2, 312, 314, 5, 36, 19, 2, 313, 311, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 339, 3, 2, 2, 2, 315, 316, 7, 23, 2, 2, 316, 317, 5, 30, 16, 2, 317, 318, 7, 63, 2, 2, 318, 319, 5, 32, 17, 2, 319, 320, 7, 62, 2, 2, 320, 328, 5, 46, 24, 2, 321, 322, 7, 10, 2, 2, 322, 323, 5, 32, 17, 2, 323, 324, 7, 62, 2, 2, 324, 325, 5, 46, 24, 2, 325, 327, 3, 2, 2, 2, 326, 321, 3, 2, 2, 2, 327, 330, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 331, 3, 2, 2, 2, 330, 328, 3, 2, 2, 2, 331, 332, 7, 64, 2, 2, 332, 333, 7, 26, 2, 2, 333, 336, 5, 34, 18, 2, 334, 335, 7, 25, 2, 2, 335, 337, 5, 36, 19, 2, 336, 334, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 339, 3, 2, 2, 2, 338, 292, 3, 2, 2, 2, 338, 315, 3, 2, 2, 2, 339, 29, 3, 2, 2, 2, 340, 341, 5, 82, 42, 2, 341, 31, 3, 2, 2, 2, 342, 343, 5, 82, 42, 2, 343, 33, 3, 2, 2, 2, 344, 345, 5, 82, 42, 2, 345, 35, 3, 2, 2, 2, 346, 347, 7, 42, 2, 2, 347, 37, 3, 2, 2, 2, 348, 349, 8, 20, 1, 2, 349, 358, 7, 63, 2, 2, 350, 355, 5, 38, 20, 2, 351, 352, 7, 10, 2, 2, 352, 354, 5, 38, 20, 2, 353, 351, 3, 2, 2, 2, 354, 357, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, 356, 359, 3, 2, 2, 2, 357, 355, 3, 2, 2, 2, 358, 350, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 361, 3, 2, 2, 2, 360, 362, 7, 10, 2, 2, 361, 360, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 364, 7, 64, 2, 2, 364, 365, 7, 29, 2, 2, 365, 419, 5, 38, 20, 14, 366, 367, 7, 65, 2, 2, 367, 368, 7, 13, 2, 2, 368, 369, 5, 38, 20, 2, 369, 370, 7, 14, 2, 2, 370, 419, 3, 2, 2, 2, 371, 372, 7, 66, 2, 2, 372, 373, 7, 13, 2, 2, 373, 374, 5, 38, 20, 2, 374, 375, 7, 14, 2, 2, 375, 419, 3, 2, 2, 2, 376, 377, 7, 63, 2, 2, 377, 378, 5, 38, 20, 2, 378, 379, 7, 10, 2, 2, 379, 384, 5, 38, 20, 2, 380, 381, 7, 10, 2, 2, 381, 383, 5, 38, 20, 2, 382, 380, 3, 2, 2, 2, 383, 386, 3, 2, 2, 2, 384, 382, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 388, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 387, 389, 7, 10, 2, 2, 388, 387, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 391, 7, 64, 2, 2, 391, 419, 3, 2, 2, 2, 392, 394, 7, 4, 2, 2, 393, 395, 5, 42, 22, 2, 394, 393, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 419, 7, 5, 2, 2, 397, 419, 7, 30, 2, 2, 398, 419, 7, 31, 2, 2, 399, 419, 7, 32, 2, 2, 400, 419, 5, 40, 21, 2, 401, 419, 5, 82, 42, 2, 402, 403, 7, 63, 2, 2, 403, 404, 5, 38, 20, 2, 404, 405, 7, 64, 2, 2, 405, 419, 3, 2, 2, 2, 406, 407, 5, 82, 42, 2, 407, 408, 7, 13, 2, 2, 408, 413, 5, 38, 20, 2, 409, 410, 7, 10, 2, 2, 410, 412, 5, 38, 20, 2, 411, 409, 3, 2, 2, 2, 412, 415, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 416, 3, 2, 2, 2, 415, 413, 3, 2, 2, 2, 416, 417, 7, 14, 2, 2, 417, 419, 3, 2, 2, 2, 418, 348, 3, 2, 2, 2, 418, 366, 3, 2, 2, 2, 418, 371, 3, 2, 2, 2, 418, 376, 3, 2, 2, 2, 418, 392, 3, 2, 2, 2, 418, 397, 3, 2, 2, 2, 418, 398, 3, 2, 2, 2, 418, 399, 3, 2, 2, 2, 418, 400, 3, 2, 2, 2, 418, 401, 3, 2, 2, 2, 418, 402, 3, 2, 2, 2, 418, 406, 3, 2, 2, 2, 419, 428, 3, 2, 2, 2, 420, 421, 12, 16, 2, 2, 421, 422, 7, 28, 2, 2, 422, 427, 5, 38, 20, 16, 423, 424, 12, 15, 2, 2, 424, 425, 7, 29, 2, 2, 425, 427, 5, 38, 20, 15, 426, 420, 3, 2, 2, 2, 426, 423, 3, 2, 2, 2, 427, 430, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 39, 3, 2, 2, 2, 430, 428, 3, 2, 2, 2, 431, 432, 7, 67, 2, 2, 432, 41, 3, 2, 2, 2, 433, 434, 5, 44, 23, 2, 434, 435, 7, 7, 2, 2, 435, 436, 5, 38, 20, 2, 436, 444, 3, 2, 2, 2, 437, 438, 7, 10, 2, 2, 438, 439, 5, 44, 23, 2, 439, 440, 7, 7, 2, 2, 440, 441, 5, 38, 20, 2, 441, 443, 3, 2, 2, 2, 442, 437, 3, 2, 2, 2, 443, 446, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 450, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 447, 451, 7, 10, 2, 2, 448, 449, 7, 15, 2, 2, 449, 451, 5, 86, 44, 2, 450, 447, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 450, 451, 3, 2, 2, 2, 451, 455, 3, 2, 2, 2, 452, 453, 7, 15, 2, 2, 453, 455, 5, 86, 44, 2, 454, 433, 3, 2, 2, 2, 454, 452, 3, 2, 2, 2, 455, 43, 3, 2, 2, 2, 456, 457, 5, 84, 43, 2, 457, 45, 3, 2, 2, 2, 458, 459, 8, 24, 1, 2, 459, 609, 5, 56, 29, 2, 460, 461, 5, 74, 38, 2, 461, 463, 7, 63, 2, 2, 462, 464, 5, 70, 36, 2, 463, 462, 3, 2, 2, 2, 463, 464, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 466, 7, 64, 2, 2, 466, 609, 3, 2, 2, 2, 467, 468, 7, 52, 2, 2, 468, 609, 5, 46, 24, 27, 469, 470, 5, 82, 42, 2, 470, 471, 7, 34, 2, 2, 471, 472, 7, 62, 2, 2, 472, 473, 5, 46, 24, 23, 473, 609, 3, 2, 2, 2, 474, 475, 7, 45, 2, 2, 475, 476, 7, 4, 2, 2, 476, 481, 5, 46, 24, 2, 477, 478, 7, 10, 2, 2, 478, 480, 5, 46, 24, 2, 479, 477, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 485, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 486, 7, 10, 2, 2, 485, 484, 3, 2, 2, 2, 485, 486, 3, 2, 2, 2, 486, 487, 3, 2, 2, 2, 487, 488, 7, 5, 2, 2, 488, 609, 3, 2, 2, 2, 489, 490, 7, 46, 2, 2, 490, 491, 7, 4, 2, 2, 491, 496, 5, 46, 24, 2, 492, 493, 7, 10, 2, 2, 493, 495, 5, 46, 24, 2, 494, 492, 3, 2, 2, 2, 495, 498, 3, 2, 2, 2, 496, 494, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 500, 3, 2, 2, 2, 498, 496, 3, 2, 2, 2, 499, 501, 7, 10, 2, 2, 500, 499, 3, 2, 2, 2, 500, 501, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 503, 7, 5, 2, 2, 503, 609, 3, 2, 2, 2, 504, 609, 5, 48, 25, 2, 505, 506, 7, 35, 2, 2, 506, 507, 7, 4, 2, 2, 507, 512, 5, 46, 24, 2, 508, 509, 7, 10, 2, 2, 509, 511, 5, 46, 24, 2, 510, 508, 3, 2, 2, 2, 511, 514, 3, 2, 2, 2, 512, 510, 3, 2, 2, 2, 512, 513, 3, 2, 2, 2, 513, 516, 3, 2, 2, 2, 514, 512, 3, 2, 2, 2, 515, 517, 7, 10, 2, 2, 516, 515, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 519, 7, 5, 2, 2, 519, 609, 3, 2, 2, 2, 520, 521, 7, 36, 2, 2, 521, 522, 7, 4, 2, 2, 522, 527, 5, 46, 24, 2, 523, 524, 7, 10, 2, 2, 524, 526, 5, 46, 24, 2, 525, 523, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 527, 528, 3, 2, 2, 2, 528, 531, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 530, 532, 7, 10, 2, 2, 531, 530, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 533, 3, 2, 2, 2, 533, 534, 7, 5, 2, 2, 534, 609, 3, 2, 2, 2, 535, 540, 5, 82, 42, 2, 536, 540, 7, 44, 2, 2, 537, 540, 7, 43, 2, 2, 538, 540, 7, 42, 2, 2, 539, 535, 3, 2, 2, 2, 539, 536, 3, 2, 2, 2, 539, 537, 3, 2, 2, 2, 539, 538, 3, 2, 2, 2, 540, 609, 3, 2, 2, 2, 541, 542, 7, 63, 2, 2, 542, 543, 5, 46, 24, 2, 543, 544, 7, 10, 2, 2, 544, 549, 5, 46, 24, 2, 545, 546, 7, 10, 2, 2, 546, 548, 5, 46, 24, 2, 547, 545, 3, 2, 2, 2, 548, 551, 3, 2, 2, 2, 549, 547, 3, 2, 2, 2, 549, 550, 3, 2, 2, 2, 550, 553, 3, 2, 2, 2, 551, 549, 3, 2, 2, 2, 552, 554, 7, 10, 2, 2, 553, 552, 3, 2, 2, 2, 553, 554, 3, 2, 2, 2, 554, 555, 3, 2, 2, 2, 555, 556, 7, 64, 2, 2, 556, 609, 3, 2, 2, 2, 557, 558, 7, 4, 2, 2, 558, 563, 5, 72, 37, 2, 559, 560, 7, 10, 2, 2, 560, 562, 5, 72, 37, 2, 561, 559, 3, 2, 2, 2, 562, 565, 3, 2, 2, 2, 563, 561, 3, 2, 2, 2, 563, 564, 3, 2, 2, 2, 564, 567, 3, 2, 2, 2, 565, 563, 3, 2, 2, 2, 566, 568, 7, 10, 2, 2, 567, 566, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 569, 3, 2, 2, 2, 569, 570, 7, 5, 2, 2, 570, 609, 3, 2, 2, 2, 571, 580, 7, 13, 2, 2, 572, 577, 5, 46, 24, 2, 573, 574, 7, 10, 2, 2, 574, 576, 5, 46, 24, 2, 575, 573, 3, 2, 2, 2, 576, 579, 3, 2, 2, 2, 577, 575, 3, 2, 2, 2, 577, 578, 3, 2, 2, 2, 578, 581, 3, 2, 2, 2, 579, 577, 3, 2, 2, 2, 580, 572, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 583, 3, 2, 2, 2, 582, 584, 7, 10, 2, 2, 583, 582, 3, 2, 2, 2, 583, 584, 3, 2, 2, 2, 584, 585, 3, 2, 2, 2, 585, 609, 7, 14, 2, 2, 586, 587, 7, 37, 2, 2, 587, 588, 7, 63, 2, 2, 588, 589, 5, 46, 24, 2, 589, 590, 7, 64, 2, 2, 590, 591, 5, 46, 24, 2, 591, 592, 7, 38, 2, 2, 592, 593, 5, 46, 24, 7, 593, 609, 3, 2, 2, 2, 594, 595, 5, 10, 6, 2, 595, 596, 5, 46, 24, 6, 596, 609, 3, 2, 2, 2, 597, 598, 5, 20, 11, 2, 598, 599, 5, 46, 24, 5, 599, 609, 3, 2, 2, 2, 600, 601, 7, 63, 2, 2, 601, 602, 5, 46, 24, 2, 602, 603, 7, 64, 2, 2, 603, 609, 3, 2, 2, 2, 604, 605, 7, 4, 2, 2, 605, 606, 5, 46, 24, 2, 606, 607, 7, 5, 2, 2, 607, 609, 3, 2, 2, 2, 608, 458, 3, 2, 2, 2, 608, 460, 3, 2, 2, 2, 608, 467, 3, 2, 2, 2, 608, 469, 3, 2, 2, 2, 608, 474, 3, 2, 2, 2, 608, 489, 3, 2, 2, 2, 608, 504, 3, 2, 2, 2, 608, 505, 3, 2, 2, 2, 608, 520, 3, 2, 2, 2, 608, 539, 3, 2, 2, 2, 608, 541, 3, 2, 2, 2, 608, 557, 3, 2, 2, 2, 608, 571, 3, 2, 2, 2, 608, 586, 3, 2, 2, 2, 608, 594, 3, 2, 2, 2, 608, 597, 3, 2, 2, 2, 608, 600, 3, 2, 2, 2, 608, 604, 3, 2, 2, 2, 609, 659, 3, 2, 2, 2, 610, 611, 12, 28, 2, 2, 611, 612, 7, 33, 2, 2, 612, 658, 5, 46, 24, 28, 613, 614, 12, 26, 2, 2, 614, 615, 9, 2, 2, 2, 615, 658, 5, 46, 24, 27, 616, 617, 12, 25, 2, 2, 617, 618, 9, 3, 2, 2, 618, 658, 5, 46, 24, 26, 619, 620, 12, 24, 2, 2, 620, 621, 9, 4, 2, 2, 621, 658, 5, 46, 24, 25, 622, 623, 12, 22, 2, 2, 623, 624, 7, 62, 2, 2, 624, 625, 5, 46, 24, 23, 625, 626, 8, 24, 1, 2, 626, 658, 3, 2, 2, 2, 627, 628, 12, 20, 2, 2, 628, 629, 7, 45, 2, 2, 629, 658, 5, 46, 24, 21, 630, 631, 12, 18, 2, 2, 631, 632, 7, 46, 2, 2, 632, 658, 5, 46, 24, 19, 633, 634, 12, 17, 2, 2, 634, 635, 7, 47, 2, 2, 635, 658, 5, 46, 24, 18, 636, 637, 12, 16, 2, 2, 637, 638, 7, 48, 2, 2, 638, 658, 5, 46, 24, 17, 639, 640, 12, 10, 2, 2, 640, 641, 7, 28, 2, 2, 641, 658, 5, 46, 24, 11, 642, 643, 12, 32, 2, 2, 643, 644, 7, 24, 2, 2, 644, 650, 5, 76, 39, 2, 645, 647, 7, 63, 2, 2, 646, 648, 5, 70, 36, 2, 647, 646, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 651, 7, 64, 2, 2, 650, 645, 3, 2, 2, 2, 650, 651, 3, 2, 2, 2, 651, 658, 3, 2, 2, 2, 652, 653, 12, 29, 2, 2, 653, 654, 7, 13, 2, 2, 654, 655, 5, 46, 24, 2, 655, 656, 7, 14, 2, 2, 656, 658, 3, 2, 2, 2, 657, 610, 3, 2, 2, 2, 657, 613, 3, 2, 2, 2, 657, 616, 3, 2, 2, 2, 657, 619, 3, 2, 2, 2, 657, 622, 3, 2, 2, 2, 657, 627, 3, 2, 2, 2, 657, 630, 3, 2, 2, 2, 657, 633, 3, 2, 2, 2, 657, 636, 3, 2, 2, 2, 657, 639, 3, 2, 2, 2, 657, 642, 3, 2, 2, 2, 657, 652, 3, 2, 2, 2, 658, 661, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 659, 660, 3, 2, 2, 2, 660, 47, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 662, 663, 7, 50, 2, 2, 663, 664, 5, 46, 24, 2, 664, 666, 7, 4, 2, 2, 665, 667, 7, 15, 2, 2, 666, 665, 3, 2, 2, 2, 666, 667, 3, 2, 2, 2, 667, 668, 3, 2, 2, 2, 668, 673, 5, 50, 26, 2, 669, 670, 7, 15, 2, 2, 670, 672, 5, 50, 26, 2, 671, 669, 3, 2, 2, 2, 672, 675, 3, 2, 2, 2, 673, 671, 3, 2, 2, 2, 673, 674, 3, 2, 2, 2, 674, 676, 3, 2, 2, 2, 675, 673, 3, 2, 2, 2, 676, 677, 7, 5, 2, 2, 677, 49, 3, 2, 2, 2, 678, 681, 5, 52, 27, 2, 679, 681, 7, 39, 2, 2, 680, 678, 3, 2, 2, 2, 680, 679, 3, 2, 2, 2, 681, 682, 3, 2, 2, 2, 682, 683, 7, 29, 2, 2, 683, 684, 5, 46, 24, 2, 684, 51, 3, 2, 2, 2, 685, 692, 5, 84, 43, 2, 686, 689, 7, 63, 2, 2, 687, 690, 5, 84, 43, 2, 688, 690, 7, 39, 2, 2, 689, 687, 3, 2, 2, 2, 689, 688, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 693, 7, 64, 2, 2, 692, 686, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, 53, 3, 2, 2, 2, 694, 695, 5, 8, 5, 2, 695, 696, 7, 2, 2, 3, 696, 704, 3, 2, 2, 2, 697, 698, 5, 46, 24, 2, 698, 699, 7, 2, 2, 3, 699, 704, 3, 2, 2, 2, 700, 701, 7, 69, 2, 2, 701, 704, 7, 2, 2, 3, 702, 704, 7, 2, 2, 3, 703, 694, 3, 2, 2, 2, 703, 697, 3, 2, 2, 2, 703, 700, 3, 2, 2, 2, 703, 702, 3, 2, 2, 2, 704, 55, 3, 2, 2, 2, 705, 708, 5, 58, 30, 2, 706, 708, 5, 60, 31, 2, 707, 705, 3, 2, 2, 2, 707, 706, 3, 2, 2, 2, 708, 57, 3, 2, 2, 2, 709, 710, 5, 64, 33, 2, 710, 711, 7, 29, 2, 2, 711, 712, 5, 46, 24, 2, 712, 727, 3, 2, 2, 2, 713, 714, 7, 63, 2, 2, 714, 719, 5, 64, 33, 2, 715, 716, 7, 10, 2, 2, 716, 718, 5, 64, 33, 2, 717, 715, 3, 2, 2, 2, 718, 721, 3, 2, 2, 2, 719, 717, 3, 2, 2, 2, 719, 720, 3, 2, 2, 2, 720, 722, 3, 2, 2, 2, 721, 719, 3, 2, 2, 2, 722, 723, 7, 64, 2, 2, 723, 724, 7, 29, 2, 2, 724, 725, 5, 46, 24, 2, 725, 727, 3, 2, 2, 2, 726, 709, 3, 2, 2, 2, 726, 713, 3, 2, 2, 2, 727, 59, 3, 2, 2, 2, 728, 729, 7, 63, 2, 2, 729, 730, 7, 63, 2, 2, 730, 733, 5, 64, 33, 2, 731, 732, 7, 10, 2, 2, 732, 734, 5, 64, 33, 2, 733, 731, 3, 2, 2, 2, 734, 735, 3, 2, 2, 2, 735, 733, 3, 2, 2, 2, 735, 736, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 738, 7, 64, 2, 2, 738, 739, 7, 64, 2, 2, 739, 740, 7, 29, 2, 2, 740, 741, 5, 46, 24, 2, 741, 61, 3, 2, 2, 2, 742, 745, 7, 39, 2, 2, 743, 745, 5, 82, 42, 2, 744, 742, 3, 2, 2, 2, 744, 743, 3, 2, 2, 2, 745, 63, 3, 2, 2, 2, 746, 747, 5, 62, 32, 2, 747, 65, 3, 2, 2, 2, 748, 749, 5, 62, 32, 2, 749, 750, 7, 7, 2, 2, 750, 751, 5, 38, 20, 2, 751, 67, 3, 2, 2, 2, 752, 755, 7, 53, 2, 2, 753, 755, 5, 82, 42, 2, 754, 752, 3, 2, 2, 2, 754, 753, 3, 2, 2, 2, 755, 69, 3, 2, 2, 2, 756, 761, 5, 46, 24, 2, 757, 758, 7, 10, 2, 2, 758, 760, 5, 46, 24, 2, 759, 757, 3, 2, 2, 2, 760, 763, 3, 2, 2, 2, 761, 759, 3, 2, 2, 2, 761, 762, 3, 2, 2, 2, 762, 71, 3, 2, 2, 2, 763, 761, 3, 2, 2, 2, 764, 765, 5, 84, 43, 2, 765, 766, 7, 7, 2, 2, 766, 767, 5, 46, 24, 2, 767, 771, 3, 2, 2, 2, 768, 769, 7, 40, 2, 2, 769, 771, 5, 46, 24, 2, 770, 764, 3, 2, 2, 2, 770, 768, 3, 2, 2, 2, 771, 73, 3, 2, 2, 2, 772, 775, 5, 82, 42, 2, 773, 775, 9, 5, 2, 2, 774, 772, 3, 2, 2, 2, 774, 773, 3, 2, 2, 2, 775, 75, 3, 2, 2, 2, 776, 779, 5, 82, 42, 2, 777, 779, 9, 6, 2, 2, 778, 776, 3, 2, 2, 2, 778, 777, 3, 2, 2, 2, 779, 77, 3, 2, 2, 2, 780, 781, 9, 7, 2, 2, 781, 79, 3, 2, 2, 2, 782, 783, 9, 8, 2, 2, 783, 81, 3, 2, 2, 2, 784, 789, 5, 86, 44, 2, 785, 786, 7, 41, 2, 2, 786, 788, 5, 86, 44, 2, 787, 785, 3, 2, 2, 2, 788, 791, 3, 2, 2, 2, 789, 787, 3, 2, 2, 2, 789, 790, 3, 2, 2, 2, 790, 83, 3, 2, 2, 2, 791, 789, 3, 2, 2, 2, 792, 797, 5, 86, 44, 2, 793, 794, 5, 82, 42, 2, 794, 795, 8, 43, 1, 2, 795, 797, 3, 2, 2, 2, 796, 792, 3, 2, 2, 2, 796, 793, 3, 2, 2, 2, 797, 85, 3, 2, 2, 2, 798, 799, 9, 9, 2, 2, 799, 87, 3, 2, 2, 2, 90, 91, 98, 107, 115, 140, 150, 158, 161, 171, 174, 177, 181, 185, 188, 190, 204, 213, 217, 220, 227, 235, 241, 246, 257, 265, 271, 275, 277, 288, 290, 305, 313, 328, 336, 338, 355, 358, 361, 384, 388, 394, 413, 418, 426, 428, 444, 450, 454, 463, 481, 485, 496, 500, 512, 516, 527, 531, 539, 549, 553, 563, 567, 577, 580, 583, 608, 647, 650, 657, 659, 666, 673, 680, 689, 692, 703, 707, 719, 726, 735, 744, 754, 761, 770, 774, 778, 789, 796] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 72, 803, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 3, 2, 6, 2, 90, 10, 2, 13, 2, 14, 2, 91, 3, 2, 3, 2, 3, 3, 7, 3, 97, 10, 3, 12, 3, 14, 3, 100, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 106, 10, 3, 12, 3, 14, 3, 109, 11, 3, 3, 3, 3, 3, 3, 4, 7, 4, 114, 10, 4, 12, 4, 14, 4, 117, 11, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 141, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 149, 10, 6, 12, 6, 14, 6, 152, 11, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 159, 10, 6, 3, 6, 5, 6, 162, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 170, 10, 6, 12, 6, 14, 6, 173, 11, 6, 5, 6, 175, 10, 6, 3, 6, 5, 6, 178, 10, 6, 3, 6, 3, 6, 5, 6, 182, 10, 6, 3, 6, 3, 6, 5, 6, 186, 10, 6, 3, 6, 5, 6, 189, 10, 6, 5, 6, 191, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 205, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 212, 10, 8, 12, 8, 14, 8, 215, 11, 8, 3, 8, 5, 8, 218, 10, 8, 3, 9, 5, 9, 221, 10, 9, 3, 9, 3, 9, 3, 9, 7, 9, 226, 10, 9, 12, 9, 14, 9, 229, 11, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 236, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 242, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 247, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 258, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 266, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 272, 10, 13, 3, 13, 3, 13, 5, 13, 276, 10, 13, 5, 13, 278, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 289, 10, 14, 5, 14, 291, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 304, 10, 15, 12, 15, 14, 15, 307, 11, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 314, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 327, 10, 15, 12, 15, 14, 15, 330, 11, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 337, 10, 15, 5, 15, 339, 10, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 354, 10, 20, 12, 20, 14, 20, 357, 11, 20, 5, 20, 359, 10, 20, 3, 20, 5, 20, 362, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 383, 10, 20, 12, 20, 14, 20, 386, 11, 20, 3, 20, 5, 20, 389, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 395, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 412, 10, 20, 12, 20, 14, 20, 415, 11, 20, 3, 20, 3, 20, 5, 20, 419, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 427, 10, 20, 12, 20, 14, 20, 430, 11, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 443, 10, 22, 12, 22, 14, 22, 446, 11, 22, 3, 22, 3, 22, 3, 22, 5, 22, 451, 10, 22, 3, 22, 3, 22, 5, 22, 455, 10, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 464, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 480, 10, 24, 12, 24, 14, 24, 483, 11, 24, 3, 24, 5, 24, 486, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 495, 10, 24, 12, 24, 14, 24, 498, 11, 24, 3, 24, 5, 24, 501, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 511, 10, 24, 12, 24, 14, 24, 514, 11, 24, 3, 24, 5, 24, 517, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 526, 10, 24, 12, 24, 14, 24, 529, 11, 24, 3, 24, 5, 24, 532, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 540, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 548, 10, 24, 12, 24, 14, 24, 551, 11, 24, 3, 24, 5, 24, 554, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 564, 10, 24, 12, 24, 14, 24, 567, 11, 24, 3, 24, 5, 24, 570, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 578, 10, 24, 12, 24, 14, 24, 581, 11, 24, 5, 24, 583, 10, 24, 3, 24, 5, 24, 586, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 611, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 650, 10, 24, 3, 24, 5, 24, 653, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 660, 10, 24, 12, 24, 14, 24, 663, 11, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 669, 10, 25, 3, 25, 3, 25, 3, 25, 7, 25, 674, 10, 25, 12, 25, 14, 25, 677, 11, 25, 3, 25, 3, 25, 3, 26, 3, 26, 5, 26, 683, 10, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 692, 10, 27, 3, 27, 5, 27, 695, 10, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 706, 10, 28, 3, 29, 3, 29, 5, 29, 710, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 720, 10, 30, 12, 30, 14, 30, 723, 11, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 729, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 6, 31, 736, 10, 31, 13, 31, 14, 31, 737, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 5, 32, 747, 10, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 5, 35, 757, 10, 35, 3, 36, 3, 36, 3, 36, 7, 36, 762, 10, 36, 12, 36, 14, 36, 765, 11, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 773, 10, 37, 3, 38, 3, 38, 5, 38, 777, 10, 38, 3, 39, 3, 39, 5, 39, 781, 10, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 7, 42, 790, 10, 42, 12, 42, 14, 42, 793, 11, 42, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 799, 10, 43, 3, 44, 3, 44, 3, 44, 2, 2, 4, 38, 46, 45, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 2, 10, 3, 2, 53, 55, 3, 2, 51, 52, 3, 2, 56, 61, 4, 2, 45, 49, 65, 66, 3, 2, 45, 48, 5, 2, 33, 33, 45, 48, 51, 61, 3, 2, 42, 44, 3, 2, 67, 68, 2, 901, 2, 89, 3, 2, 2, 2, 4, 98, 3, 2, 2, 2, 6, 115, 3, 2, 2, 2, 8, 140, 3, 2, 2, 2, 10, 190, 3, 2, 2, 2, 12, 204, 3, 2, 2, 2, 14, 206, 3, 2, 2, 2, 16, 220, 3, 2, 2, 2, 18, 230, 3, 2, 2, 2, 20, 237, 3, 2, 2, 2, 22, 257, 3, 2, 2, 2, 24, 277, 3, 2, 2, 2, 26, 290, 3, 2, 2, 2, 28, 338, 3, 2, 2, 2, 30, 340, 3, 2, 2, 2, 32, 342, 3, 2, 2, 2, 34, 344, 3, 2, 2, 2, 36, 346, 3, 2, 2, 2, 38, 418, 3, 2, 2, 2, 40, 431, 3, 2, 2, 2, 42, 454, 3, 2, 2, 2, 44, 456, 3, 2, 2, 2, 46, 610, 3, 2, 2, 2, 48, 664, 3, 2, 2, 2, 50, 682, 3, 2, 2, 2, 52, 687, 3, 2, 2, 2, 54, 705, 3, 2, 2, 2, 56, 709, 3, 2, 2, 2, 58, 728, 3, 2, 2, 2, 60, 730, 3, 2, 2, 2, 62, 746, 3, 2, 2, 2, 64, 748, 3, 2, 2, 2, 66, 750, 3, 2, 2, 2, 68, 756, 3, 2, 2, 2, 70, 758, 3, 2, 2, 2, 72, 772, 3, 2, 2, 2, 74, 776, 3, 2, 2, 2, 76, 780, 3, 2, 2, 2, 78, 782, 3, 2, 2, 2, 80, 784, 3, 2, 2, 2, 82, 786, 3, 2, 2, 2, 84, 798, 3, 2, 2, 2, 86, 800, 3, 2, 2, 2, 88, 90, 5, 4, 3, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 7, 2, 2, 3, 94, 3, 3, 2, 2, 2, 95, 97, 7, 69, 2, 2, 96, 95, 3, 2, 2, 2, 97, 100, 3, 2, 2, 2, 98, 96, 3, 2, 2, 2, 98, 99, 3, 2, 2, 2, 99, 101, 3, 2, 2, 2, 100, 98, 3, 2, 2, 2, 101, 102, 7, 3, 2, 2, 102, 103, 5, 82, 42, 2, 103, 107, 7, 4, 2, 2, 104, 106, 5, 6, 4, 2, 105, 104, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 110, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 5, 2, 2, 111, 5, 3, 2, 2, 2, 112, 114, 7, 69, 2, 2, 113, 112, 3, 2, 2, 2, 114, 117, 3, 2, 2, 2, 115, 113, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 118, 3, 2, 2, 2, 117, 115, 3, 2, 2, 2, 118, 119, 5, 8, 5, 2, 119, 7, 3, 2, 2, 2, 120, 121, 7, 6, 2, 2, 121, 122, 5, 82, 42, 2, 122, 123, 7, 7, 2, 2, 123, 124, 5, 38, 20, 2, 124, 141, 3, 2, 2, 2, 125, 126, 7, 8, 2, 2, 126, 127, 5, 82, 42, 2, 127, 128, 7, 7, 2, 2, 128, 129, 5, 38, 20, 2, 129, 141, 3, 2, 2, 2, 130, 131, 7, 9, 2, 2, 131, 132, 5, 62, 32, 2, 132, 133, 7, 62, 2, 2, 133, 134, 5, 46, 24, 2, 134, 141, 3, 2, 2, 2, 135, 141, 5, 28, 15, 2, 136, 141, 5, 10, 6, 2, 137, 141, 5, 12, 7, 2, 138, 141, 5, 24, 13, 2, 139, 141, 5, 26, 14, 2, 140, 120, 3, 2, 2, 2, 140, 125, 3, 2, 2, 2, 140, 130, 3, 2, 2, 2, 140, 135, 3, 2, 2, 2, 140, 136, 3, 2, 2, 2, 140, 137, 3, 2, 2, 2, 140, 138, 3, 2, 2, 2, 140, 139, 3, 2, 2, 2, 141, 9, 3, 2, 2, 2, 142, 143, 5, 22, 12, 2, 143, 144, 5, 74, 38, 2, 144, 145, 7, 63, 2, 2, 145, 150, 5, 66, 34, 2, 146, 147, 7, 10, 2, 2, 147, 149, 5, 66, 34, 2, 148, 146, 3, 2, 2, 2, 149, 152, 3, 2, 2, 2, 150, 148, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 153, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 153, 154, 7, 64, 2, 2, 154, 155, 7, 7, 2, 2, 155, 158, 5, 38, 20, 2, 156, 157, 7, 62, 2, 2, 157, 159, 5, 46, 24, 2, 158, 156, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 162, 7, 11, 2, 2, 161, 160, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 191, 3, 2, 2, 2, 163, 164, 5, 22, 12, 2, 164, 177, 5, 74, 38, 2, 165, 174, 7, 63, 2, 2, 166, 171, 5, 64, 33, 2, 167, 168, 7, 10, 2, 2, 168, 170, 5, 64, 33, 2, 169, 167, 3, 2, 2, 2, 170, 173, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 175, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 174, 166, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 178, 7, 64, 2, 2, 177, 165, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 181, 3, 2, 2, 2, 179, 180, 7, 7, 2, 2, 180, 182, 5, 38, 20, 2, 181, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 185, 3, 2, 2, 2, 183, 184, 7, 62, 2, 2, 184, 186, 5, 46, 24, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 188, 3, 2, 2, 2, 187, 189, 7, 11, 2, 2, 188, 187, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 191, 3, 2, 2, 2, 190, 142, 3, 2, 2, 2, 190, 163, 3, 2, 2, 2, 191, 11, 3, 2, 2, 2, 192, 193, 7, 12, 2, 2, 193, 205, 5, 82, 42, 2, 194, 195, 7, 12, 2, 2, 195, 196, 5, 14, 8, 2, 196, 197, 7, 62, 2, 2, 197, 198, 5, 38, 20, 2, 198, 205, 3, 2, 2, 2, 199, 200, 7, 12, 2, 2, 200, 201, 5, 14, 8, 2, 201, 202, 7, 62, 2, 2, 202, 203, 5, 16, 9, 2, 203, 205, 3, 2, 2, 2, 204, 192, 3, 2, 2, 2, 204, 194, 3, 2, 2, 2, 204, 199, 3, 2, 2, 2, 205, 13, 3, 2, 2, 2, 206, 217, 5, 82, 42, 2, 207, 208, 7, 13, 2, 2, 208, 213, 7, 67, 2, 2, 209, 210, 7, 10, 2, 2, 210, 212, 7, 67, 2, 2, 211, 209, 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, 218, 7, 14, 2, 2, 217, 207, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 15, 3, 2, 2, 2, 219, 221, 7, 15, 2, 2, 220, 219, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 227, 5, 18, 10, 2, 223, 224, 7, 15, 2, 2, 224, 226, 5, 18, 10, 2, 225, 223, 3, 2, 2, 2, 226, 229, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 17, 3, 2, 2, 2, 229, 227, 3, 2, 2, 2, 230, 235, 5, 84, 43, 2, 231, 232, 7, 63, 2, 2, 232, 233, 5, 38, 20, 2, 233, 234, 7, 64, 2, 2, 234, 236, 3, 2, 2, 2, 235, 231, 3, 2, 2, 2, 235, 236, 3, 2, 2, 2, 236, 19, 3, 2, 2, 2, 237, 238, 7, 16, 2, 2, 238, 241, 5, 82, 42, 2, 239, 240, 7, 7, 2, 2, 240, 242, 5, 38, 20, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 244, 7, 62, 2, 2, 244, 246, 5, 46, 24, 2, 245, 247, 7, 11, 2, 2, 246, 245, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 21, 3, 2, 2, 2, 248, 258, 7, 17, 2, 2, 249, 258, 7, 18, 2, 2, 250, 251, 7, 19, 2, 2, 251, 258, 7, 17, 2, 2, 252, 253, 7, 19, 2, 2, 253, 258, 7, 18, 2, 2, 254, 258, 7, 20, 2, 2, 255, 258, 7, 21, 2, 2, 256, 258, 7, 22, 2, 2, 257, 248, 3, 2, 2, 2, 257, 249, 3, 2, 2, 2, 257, 250, 3, 2, 2, 2, 257, 252, 3, 2, 2, 2, 257, 254, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 257, 256, 3, 2, 2, 2, 258, 23, 3, 2, 2, 2, 259, 260, 7, 23, 2, 2, 260, 261, 5, 32, 17, 2, 261, 262, 7, 24, 2, 2, 262, 265, 5, 68, 35, 2, 263, 264, 7, 25, 2, 2, 264, 266, 5, 36, 19, 2, 265, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 278, 3, 2, 2, 2, 267, 268, 7, 23, 2, 2, 268, 271, 5, 32, 17, 2, 269, 270, 7, 26, 2, 2, 270, 272, 5, 32, 17, 2, 271, 269, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 275, 3, 2, 2, 2, 273, 274, 7, 25, 2, 2, 274, 276, 5, 36, 19, 2, 275, 273, 3, 2, 2, 2, 275, 276, 3, 2, 2, 2, 276, 278, 3, 2, 2, 2, 277, 259, 3, 2, 2, 2, 277, 267, 3, 2, 2, 2, 278, 25, 3, 2, 2, 2, 279, 280, 7, 27, 2, 2, 280, 281, 5, 32, 17, 2, 281, 282, 7, 24, 2, 2, 282, 283, 5, 68, 35, 2, 283, 291, 3, 2, 2, 2, 284, 285, 7, 27, 2, 2, 285, 288, 5, 32, 17, 2, 286, 287, 7, 26, 2, 2, 287, 289, 5, 32, 17, 2, 288, 286, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 291, 3, 2, 2, 2, 290, 279, 3, 2, 2, 2, 290, 284, 3, 2, 2, 2, 291, 27, 3, 2, 2, 2, 292, 293, 7, 23, 2, 2, 293, 294, 5, 30, 16, 2, 294, 295, 7, 63, 2, 2, 295, 296, 5, 32, 17, 2, 296, 297, 7, 62, 2, 2, 297, 305, 5, 46, 24, 2, 298, 299, 7, 10, 2, 2, 299, 300, 5, 32, 17, 2, 300, 301, 7, 62, 2, 2, 301, 302, 5, 46, 24, 2, 302, 304, 3, 2, 2, 2, 303, 298, 3, 2, 2, 2, 304, 307, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 308, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 308, 309, 7, 64, 2, 2, 309, 310, 7, 24, 2, 2, 310, 313, 7, 53, 2, 2, 311, 312, 7, 25, 2, 2, 312, 314, 5, 36, 19, 2, 313, 311, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 339, 3, 2, 2, 2, 315, 316, 7, 23, 2, 2, 316, 317, 5, 30, 16, 2, 317, 318, 7, 63, 2, 2, 318, 319, 5, 32, 17, 2, 319, 320, 7, 62, 2, 2, 320, 328, 5, 46, 24, 2, 321, 322, 7, 10, 2, 2, 322, 323, 5, 32, 17, 2, 323, 324, 7, 62, 2, 2, 324, 325, 5, 46, 24, 2, 325, 327, 3, 2, 2, 2, 326, 321, 3, 2, 2, 2, 327, 330, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 331, 3, 2, 2, 2, 330, 328, 3, 2, 2, 2, 331, 332, 7, 64, 2, 2, 332, 333, 7, 26, 2, 2, 333, 336, 5, 34, 18, 2, 334, 335, 7, 25, 2, 2, 335, 337, 5, 36, 19, 2, 336, 334, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 339, 3, 2, 2, 2, 338, 292, 3, 2, 2, 2, 338, 315, 3, 2, 2, 2, 339, 29, 3, 2, 2, 2, 340, 341, 5, 82, 42, 2, 341, 31, 3, 2, 2, 2, 342, 343, 5, 82, 42, 2, 343, 33, 3, 2, 2, 2, 344, 345, 5, 82, 42, 2, 345, 35, 3, 2, 2, 2, 346, 347, 7, 42, 2, 2, 347, 37, 3, 2, 2, 2, 348, 349, 8, 20, 1, 2, 349, 358, 7, 63, 2, 2, 350, 355, 5, 38, 20, 2, 351, 352, 7, 10, 2, 2, 352, 354, 5, 38, 20, 2, 353, 351, 3, 2, 2, 2, 354, 357, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, 356, 359, 3, 2, 2, 2, 357, 355, 3, 2, 2, 2, 358, 350, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 361, 3, 2, 2, 2, 360, 362, 7, 10, 2, 2, 361, 360, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 364, 7, 64, 2, 2, 364, 365, 7, 29, 2, 2, 365, 419, 5, 38, 20, 14, 366, 367, 7, 65, 2, 2, 367, 368, 7, 13, 2, 2, 368, 369, 5, 38, 20, 2, 369, 370, 7, 14, 2, 2, 370, 419, 3, 2, 2, 2, 371, 372, 7, 66, 2, 2, 372, 373, 7, 13, 2, 2, 373, 374, 5, 38, 20, 2, 374, 375, 7, 14, 2, 2, 375, 419, 3, 2, 2, 2, 376, 377, 7, 63, 2, 2, 377, 378, 5, 38, 20, 2, 378, 379, 7, 10, 2, 2, 379, 384, 5, 38, 20, 2, 380, 381, 7, 10, 2, 2, 381, 383, 5, 38, 20, 2, 382, 380, 3, 2, 2, 2, 383, 386, 3, 2, 2, 2, 384, 382, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 388, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 387, 389, 7, 10, 2, 2, 388, 387, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 391, 7, 64, 2, 2, 391, 419, 3, 2, 2, 2, 392, 394, 7, 4, 2, 2, 393, 395, 5, 42, 22, 2, 394, 393, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 419, 7, 5, 2, 2, 397, 419, 7, 30, 2, 2, 398, 419, 7, 31, 2, 2, 399, 419, 7, 32, 2, 2, 400, 419, 5, 40, 21, 2, 401, 419, 5, 82, 42, 2, 402, 403, 7, 63, 2, 2, 403, 404, 5, 38, 20, 2, 404, 405, 7, 64, 2, 2, 405, 419, 3, 2, 2, 2, 406, 407, 5, 82, 42, 2, 407, 408, 7, 13, 2, 2, 408, 413, 5, 38, 20, 2, 409, 410, 7, 10, 2, 2, 410, 412, 5, 38, 20, 2, 411, 409, 3, 2, 2, 2, 412, 415, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 416, 3, 2, 2, 2, 415, 413, 3, 2, 2, 2, 416, 417, 7, 14, 2, 2, 417, 419, 3, 2, 2, 2, 418, 348, 3, 2, 2, 2, 418, 366, 3, 2, 2, 2, 418, 371, 3, 2, 2, 2, 418, 376, 3, 2, 2, 2, 418, 392, 3, 2, 2, 2, 418, 397, 3, 2, 2, 2, 418, 398, 3, 2, 2, 2, 418, 399, 3, 2, 2, 2, 418, 400, 3, 2, 2, 2, 418, 401, 3, 2, 2, 2, 418, 402, 3, 2, 2, 2, 418, 406, 3, 2, 2, 2, 419, 428, 3, 2, 2, 2, 420, 421, 12, 16, 2, 2, 421, 422, 7, 28, 2, 2, 422, 427, 5, 38, 20, 16, 423, 424, 12, 15, 2, 2, 424, 425, 7, 29, 2, 2, 425, 427, 5, 38, 20, 15, 426, 420, 3, 2, 2, 2, 426, 423, 3, 2, 2, 2, 427, 430, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 39, 3, 2, 2, 2, 430, 428, 3, 2, 2, 2, 431, 432, 7, 67, 2, 2, 432, 41, 3, 2, 2, 2, 433, 434, 5, 44, 23, 2, 434, 435, 7, 7, 2, 2, 435, 436, 5, 38, 20, 2, 436, 444, 3, 2, 2, 2, 437, 438, 7, 10, 2, 2, 438, 439, 5, 44, 23, 2, 439, 440, 7, 7, 2, 2, 440, 441, 5, 38, 20, 2, 441, 443, 3, 2, 2, 2, 442, 437, 3, 2, 2, 2, 443, 446, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 450, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 447, 451, 7, 10, 2, 2, 448, 449, 7, 15, 2, 2, 449, 451, 5, 86, 44, 2, 450, 447, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 450, 451, 3, 2, 2, 2, 451, 455, 3, 2, 2, 2, 452, 453, 7, 15, 2, 2, 453, 455, 5, 86, 44, 2, 454, 433, 3, 2, 2, 2, 454, 452, 3, 2, 2, 2, 455, 43, 3, 2, 2, 2, 456, 457, 5, 84, 43, 2, 457, 45, 3, 2, 2, 2, 458, 459, 8, 24, 1, 2, 459, 611, 5, 56, 29, 2, 460, 461, 5, 74, 38, 2, 461, 463, 7, 63, 2, 2, 462, 464, 5, 70, 36, 2, 463, 462, 3, 2, 2, 2, 463, 464, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 466, 7, 64, 2, 2, 466, 611, 3, 2, 2, 2, 467, 468, 7, 52, 2, 2, 468, 611, 5, 46, 24, 28, 469, 470, 5, 82, 42, 2, 470, 471, 7, 34, 2, 2, 471, 472, 7, 62, 2, 2, 472, 473, 5, 46, 24, 24, 473, 611, 3, 2, 2, 2, 474, 475, 7, 45, 2, 2, 475, 476, 7, 4, 2, 2, 476, 481, 5, 46, 24, 2, 477, 478, 7, 10, 2, 2, 478, 480, 5, 46, 24, 2, 479, 477, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 485, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 486, 7, 10, 2, 2, 485, 484, 3, 2, 2, 2, 485, 486, 3, 2, 2, 2, 486, 487, 3, 2, 2, 2, 487, 488, 7, 5, 2, 2, 488, 611, 3, 2, 2, 2, 489, 490, 7, 46, 2, 2, 490, 491, 7, 4, 2, 2, 491, 496, 5, 46, 24, 2, 492, 493, 7, 10, 2, 2, 493, 495, 5, 46, 24, 2, 494, 492, 3, 2, 2, 2, 495, 498, 3, 2, 2, 2, 496, 494, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 500, 3, 2, 2, 2, 498, 496, 3, 2, 2, 2, 499, 501, 7, 10, 2, 2, 500, 499, 3, 2, 2, 2, 500, 501, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 503, 7, 5, 2, 2, 503, 611, 3, 2, 2, 2, 504, 611, 5, 48, 25, 2, 505, 506, 7, 35, 2, 2, 506, 507, 7, 4, 2, 2, 507, 512, 5, 46, 24, 2, 508, 509, 7, 10, 2, 2, 509, 511, 5, 46, 24, 2, 510, 508, 3, 2, 2, 2, 511, 514, 3, 2, 2, 2, 512, 510, 3, 2, 2, 2, 512, 513, 3, 2, 2, 2, 513, 516, 3, 2, 2, 2, 514, 512, 3, 2, 2, 2, 515, 517, 7, 10, 2, 2, 516, 515, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 519, 7, 5, 2, 2, 519, 611, 3, 2, 2, 2, 520, 521, 7, 36, 2, 2, 521, 522, 7, 4, 2, 2, 522, 527, 5, 46, 24, 2, 523, 524, 7, 10, 2, 2, 524, 526, 5, 46, 24, 2, 525, 523, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 527, 528, 3, 2, 2, 2, 528, 531, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 530, 532, 7, 10, 2, 2, 531, 530, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 533, 3, 2, 2, 2, 533, 534, 7, 5, 2, 2, 534, 611, 3, 2, 2, 2, 535, 540, 5, 82, 42, 2, 536, 540, 7, 44, 2, 2, 537, 540, 7, 43, 2, 2, 538, 540, 7, 42, 2, 2, 539, 535, 3, 2, 2, 2, 539, 536, 3, 2, 2, 2, 539, 537, 3, 2, 2, 2, 539, 538, 3, 2, 2, 2, 540, 611, 3, 2, 2, 2, 541, 542, 7, 63, 2, 2, 542, 543, 5, 46, 24, 2, 543, 544, 7, 10, 2, 2, 544, 549, 5, 46, 24, 2, 545, 546, 7, 10, 2, 2, 546, 548, 5, 46, 24, 2, 547, 545, 3, 2, 2, 2, 548, 551, 3, 2, 2, 2, 549, 547, 3, 2, 2, 2, 549, 550, 3, 2, 2, 2, 550, 553, 3, 2, 2, 2, 551, 549, 3, 2, 2, 2, 552, 554, 7, 10, 2, 2, 553, 552, 3, 2, 2, 2, 553, 554, 3, 2, 2, 2, 554, 555, 3, 2, 2, 2, 555, 556, 7, 64, 2, 2, 556, 611, 3, 2, 2, 2, 557, 558, 7, 63, 2, 2, 558, 611, 7, 64, 2, 2, 559, 560, 7, 4, 2, 2, 560, 565, 5, 72, 37, 2, 561, 562, 7, 10, 2, 2, 562, 564, 5, 72, 37, 2, 563, 561, 3, 2, 2, 2, 564, 567, 3, 2, 2, 2, 565, 563, 3, 2, 2, 2, 565, 566, 3, 2, 2, 2, 566, 569, 3, 2, 2, 2, 567, 565, 3, 2, 2, 2, 568, 570, 7, 10, 2, 2, 569, 568, 3, 2, 2, 2, 569, 570, 3, 2, 2, 2, 570, 571, 3, 2, 2, 2, 571, 572, 7, 5, 2, 2, 572, 611, 3, 2, 2, 2, 573, 582, 7, 13, 2, 2, 574, 579, 5, 46, 24, 2, 575, 576, 7, 10, 2, 2, 576, 578, 5, 46, 24, 2, 577, 575, 3, 2, 2, 2, 578, 581, 3, 2, 2, 2, 579, 577, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 583, 3, 2, 2, 2, 581, 579, 3, 2, 2, 2, 582, 574, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 585, 3, 2, 2, 2, 584, 586, 7, 10, 2, 2, 585, 584, 3, 2, 2, 2, 585, 586, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 611, 7, 14, 2, 2, 588, 589, 7, 37, 2, 2, 589, 590, 7, 63, 2, 2, 590, 591, 5, 46, 24, 2, 591, 592, 7, 64, 2, 2, 592, 593, 5, 46, 24, 2, 593, 594, 7, 38, 2, 2, 594, 595, 5, 46, 24, 7, 595, 611, 3, 2, 2, 2, 596, 597, 5, 10, 6, 2, 597, 598, 5, 46, 24, 6, 598, 611, 3, 2, 2, 2, 599, 600, 5, 20, 11, 2, 600, 601, 5, 46, 24, 5, 601, 611, 3, 2, 2, 2, 602, 603, 7, 63, 2, 2, 603, 604, 5, 46, 24, 2, 604, 605, 7, 64, 2, 2, 605, 611, 3, 2, 2, 2, 606, 607, 7, 4, 2, 2, 607, 608, 5, 46, 24, 2, 608, 609, 7, 5, 2, 2, 609, 611, 3, 2, 2, 2, 610, 458, 3, 2, 2, 2, 610, 460, 3, 2, 2, 2, 610, 467, 3, 2, 2, 2, 610, 469, 3, 2, 2, 2, 610, 474, 3, 2, 2, 2, 610, 489, 3, 2, 2, 2, 610, 504, 3, 2, 2, 2, 610, 505, 3, 2, 2, 2, 610, 520, 3, 2, 2, 2, 610, 539, 3, 2, 2, 2, 610, 541, 3, 2, 2, 2, 610, 557, 3, 2, 2, 2, 610, 559, 3, 2, 2, 2, 610, 573, 3, 2, 2, 2, 610, 588, 3, 2, 2, 2, 610, 596, 3, 2, 2, 2, 610, 599, 3, 2, 2, 2, 610, 602, 3, 2, 2, 2, 610, 606, 3, 2, 2, 2, 611, 661, 3, 2, 2, 2, 612, 613, 12, 29, 2, 2, 613, 614, 7, 33, 2, 2, 614, 660, 5, 46, 24, 29, 615, 616, 12, 27, 2, 2, 616, 617, 9, 2, 2, 2, 617, 660, 5, 46, 24, 28, 618, 619, 12, 26, 2, 2, 619, 620, 9, 3, 2, 2, 620, 660, 5, 46, 24, 27, 621, 622, 12, 25, 2, 2, 622, 623, 9, 4, 2, 2, 623, 660, 5, 46, 24, 26, 624, 625, 12, 23, 2, 2, 625, 626, 7, 62, 2, 2, 626, 627, 5, 46, 24, 24, 627, 628, 8, 24, 1, 2, 628, 660, 3, 2, 2, 2, 629, 630, 12, 21, 2, 2, 630, 631, 7, 45, 2, 2, 631, 660, 5, 46, 24, 22, 632, 633, 12, 19, 2, 2, 633, 634, 7, 46, 2, 2, 634, 660, 5, 46, 24, 20, 635, 636, 12, 18, 2, 2, 636, 637, 7, 47, 2, 2, 637, 660, 5, 46, 24, 19, 638, 639, 12, 17, 2, 2, 639, 640, 7, 48, 2, 2, 640, 660, 5, 46, 24, 18, 641, 642, 12, 10, 2, 2, 642, 643, 7, 28, 2, 2, 643, 660, 5, 46, 24, 11, 644, 645, 12, 33, 2, 2, 645, 646, 7, 24, 2, 2, 646, 652, 5, 76, 39, 2, 647, 649, 7, 63, 2, 2, 648, 650, 5, 70, 36, 2, 649, 648, 3, 2, 2, 2, 649, 650, 3, 2, 2, 2, 650, 651, 3, 2, 2, 2, 651, 653, 7, 64, 2, 2, 652, 647, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 660, 3, 2, 2, 2, 654, 655, 12, 30, 2, 2, 655, 656, 7, 13, 2, 2, 656, 657, 5, 46, 24, 2, 657, 658, 7, 14, 2, 2, 658, 660, 3, 2, 2, 2, 659, 612, 3, 2, 2, 2, 659, 615, 3, 2, 2, 2, 659, 618, 3, 2, 2, 2, 659, 621, 3, 2, 2, 2, 659, 624, 3, 2, 2, 2, 659, 629, 3, 2, 2, 2, 659, 632, 3, 2, 2, 2, 659, 635, 3, 2, 2, 2, 659, 638, 3, 2, 2, 2, 659, 641, 3, 2, 2, 2, 659, 644, 3, 2, 2, 2, 659, 654, 3, 2, 2, 2, 660, 663, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 661, 662, 3, 2, 2, 2, 662, 47, 3, 2, 2, 2, 663, 661, 3, 2, 2, 2, 664, 665, 7, 50, 2, 2, 665, 666, 5, 46, 24, 2, 666, 668, 7, 4, 2, 2, 667, 669, 7, 15, 2, 2, 668, 667, 3, 2, 2, 2, 668, 669, 3, 2, 2, 2, 669, 670, 3, 2, 2, 2, 670, 675, 5, 50, 26, 2, 671, 672, 7, 15, 2, 2, 672, 674, 5, 50, 26, 2, 673, 671, 3, 2, 2, 2, 674, 677, 3, 2, 2, 2, 675, 673, 3, 2, 2, 2, 675, 676, 3, 2, 2, 2, 676, 678, 3, 2, 2, 2, 677, 675, 3, 2, 2, 2, 678, 679, 7, 5, 2, 2, 679, 49, 3, 2, 2, 2, 680, 683, 5, 52, 27, 2, 681, 683, 7, 39, 2, 2, 682, 680, 3, 2, 2, 2, 682, 681, 3, 2, 2, 2, 683, 684, 3, 2, 2, 2, 684, 685, 7, 29, 2, 2, 685, 686, 5, 46, 24, 2, 686, 51, 3, 2, 2, 2, 687, 694, 5, 84, 43, 2, 688, 691, 7, 63, 2, 2, 689, 692, 5, 84, 43, 2, 690, 692, 7, 39, 2, 2, 691, 689, 3, 2, 2, 2, 691, 690, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, 695, 7, 64, 2, 2, 694, 688, 3, 2, 2, 2, 694, 695, 3, 2, 2, 2, 695, 53, 3, 2, 2, 2, 696, 697, 5, 8, 5, 2, 697, 698, 7, 2, 2, 3, 698, 706, 3, 2, 2, 2, 699, 700, 5, 46, 24, 2, 700, 701, 7, 2, 2, 3, 701, 706, 3, 2, 2, 2, 702, 703, 7, 69, 2, 2, 703, 706, 7, 2, 2, 3, 704, 706, 7, 2, 2, 3, 705, 696, 3, 2, 2, 2, 705, 699, 3, 2, 2, 2, 705, 702, 3, 2, 2, 2, 705, 704, 3, 2, 2, 2, 706, 55, 3, 2, 2, 2, 707, 710, 5, 58, 30, 2, 708, 710, 5, 60, 31, 2, 709, 707, 3, 2, 2, 2, 709, 708, 3, 2, 2, 2, 710, 57, 3, 2, 2, 2, 711, 712, 5, 64, 33, 2, 712, 713, 7, 29, 2, 2, 713, 714, 5, 46, 24, 2, 714, 729, 3, 2, 2, 2, 715, 716, 7, 63, 2, 2, 716, 721, 5, 64, 33, 2, 717, 718, 7, 10, 2, 2, 718, 720, 5, 64, 33, 2, 719, 717, 3, 2, 2, 2, 720, 723, 3, 2, 2, 2, 721, 719, 3, 2, 2, 2, 721, 722, 3, 2, 2, 2, 722, 724, 3, 2, 2, 2, 723, 721, 3, 2, 2, 2, 724, 725, 7, 64, 2, 2, 725, 726, 7, 29, 2, 2, 726, 727, 5, 46, 24, 2, 727, 729, 3, 2, 2, 2, 728, 711, 3, 2, 2, 2, 728, 715, 3, 2, 2, 2, 729, 59, 3, 2, 2, 2, 730, 731, 7, 63, 2, 2, 731, 732, 7, 63, 2, 2, 732, 735, 5, 64, 33, 2, 733, 734, 7, 10, 2, 2, 734, 736, 5, 64, 33, 2, 735, 733, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 735, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 739, 3, 2, 2, 2, 739, 740, 7, 64, 2, 2, 740, 741, 7, 64, 2, 2, 741, 742, 7, 29, 2, 2, 742, 743, 5, 46, 24, 2, 743, 61, 3, 2, 2, 2, 744, 747, 7, 39, 2, 2, 745, 747, 5, 82, 42, 2, 746, 744, 3, 2, 2, 2, 746, 745, 3, 2, 2, 2, 747, 63, 3, 2, 2, 2, 748, 749, 5, 62, 32, 2, 749, 65, 3, 2, 2, 2, 750, 751, 5, 62, 32, 2, 751, 752, 7, 7, 2, 2, 752, 753, 5, 38, 20, 2, 753, 67, 3, 2, 2, 2, 754, 757, 7, 53, 2, 2, 755, 757, 5, 82, 42, 2, 756, 754, 3, 2, 2, 2, 756, 755, 3, 2, 2, 2, 757, 69, 3, 2, 2, 2, 758, 763, 5, 46, 24, 2, 759, 760, 7, 10, 2, 2, 760, 762, 5, 46, 24, 2, 761, 759, 3, 2, 2, 2, 762, 765, 3, 2, 2, 2, 763, 761, 3, 2, 2, 2, 763, 764, 3, 2, 2, 2, 764, 71, 3, 2, 2, 2, 765, 763, 3, 2, 2, 2, 766, 767, 5, 84, 43, 2, 767, 768, 7, 7, 2, 2, 768, 769, 5, 46, 24, 2, 769, 773, 3, 2, 2, 2, 770, 771, 7, 40, 2, 2, 771, 773, 5, 46, 24, 2, 772, 766, 3, 2, 2, 2, 772, 770, 3, 2, 2, 2, 773, 73, 3, 2, 2, 2, 774, 777, 5, 82, 42, 2, 775, 777, 9, 5, 2, 2, 776, 774, 3, 2, 2, 2, 776, 775, 3, 2, 2, 2, 777, 75, 3, 2, 2, 2, 778, 781, 5, 82, 42, 2, 779, 781, 9, 6, 2, 2, 780, 778, 3, 2, 2, 2, 780, 779, 3, 2, 2, 2, 781, 77, 3, 2, 2, 2, 782, 783, 9, 7, 2, 2, 783, 79, 3, 2, 2, 2, 784, 785, 9, 8, 2, 2, 785, 81, 3, 2, 2, 2, 786, 791, 5, 86, 44, 2, 787, 788, 7, 41, 2, 2, 788, 790, 5, 86, 44, 2, 789, 787, 3, 2, 2, 2, 790, 793, 3, 2, 2, 2, 791, 789, 3, 2, 2, 2, 791, 792, 3, 2, 2, 2, 792, 83, 3, 2, 2, 2, 793, 791, 3, 2, 2, 2, 794, 799, 5, 86, 44, 2, 795, 796, 5, 82, 42, 2, 796, 797, 8, 43, 1, 2, 797, 799, 3, 2, 2, 2, 798, 794, 3, 2, 2, 2, 798, 795, 3, 2, 2, 2, 799, 85, 3, 2, 2, 2, 800, 801, 9, 9, 2, 2, 801, 87, 3, 2, 2, 2, 90, 91, 98, 107, 115, 140, 150, 158, 161, 171, 174, 177, 181, 185, 188, 190, 204, 213, 217, 220, 227, 235, 241, 246, 257, 265, 271, 275, 277, 288, 290, 305, 313, 328, 336, 338, 355, 358, 361, 384, 388, 394, 413, 418, 426, 428, 444, 450, 454, 463, 481, 485, 496, 500, 512, 516, 527, 531, 539, 549, 553, 565, 569, 579, 582, 585, 610, 649, 652, 659, 661, 668, 675, 682, 691, 694, 705, 709, 721, 728, 737, 746, 756, 763, 772, 776, 780, 791, 798] \ No newline at end of file diff --git a/quint/src/generated/QuintListener.ts b/quint/src/generated/QuintListener.ts index 7eade795d..0c24f2792 100644 --- a/quint/src/generated/QuintListener.ts +++ b/quint/src/generated/QuintListener.ts @@ -47,6 +47,7 @@ import { ActionAllContext } from "./QuintParser"; import { ActionAnyContext } from "./QuintParser"; import { LiteralOrIdContext } from "./QuintParser"; import { TupleContext } from "./QuintParser"; +import { UnitContext } from "./QuintParser"; import { PairContext } from "./QuintParser"; import { RecordContext } from "./QuintParser"; import { ListContext } from "./QuintParser"; @@ -609,6 +610,19 @@ export interface QuintListener extends ParseTreeListener { */ exitTuple?: (ctx: TupleContext) => void; + /** + * Enter a parse tree produced by the `unit` + * labeled alternative in `QuintParser.expr`. + * @param ctx the parse tree + */ + enterUnit?: (ctx: UnitContext) => void; + /** + * Exit a parse tree produced by the `unit` + * labeled alternative in `QuintParser.expr`. + * @param ctx the parse tree + */ + exitUnit?: (ctx: UnitContext) => void; + /** * Enter a parse tree produced by the `pair` * labeled alternative in `QuintParser.expr`. diff --git a/quint/src/generated/QuintParser.ts b/quint/src/generated/QuintParser.ts index 8cb906851..42faa5ee2 100644 --- a/quint/src/generated/QuintParser.ts +++ b/quint/src/generated/QuintParser.ts @@ -1881,7 +1881,7 @@ export class QuintParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 606; + this.state = 608; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 65, this._ctx) ) { case 1: @@ -1927,7 +1927,7 @@ export class QuintParser extends Parser { this.state = 465; this.match(QuintParser.MINUS); this.state = 466; - this.expr(25); + this.expr(26); } break; @@ -1943,7 +1943,7 @@ export class QuintParser extends Parser { this.state = 469; this.match(QuintParser.ASGN); this.state = 470; - this.expr(21); + this.expr(22); } break; @@ -2220,172 +2220,184 @@ export class QuintParser extends Parser { case 12: { - _localctx = new RecordContext(_localctx); + _localctx = new UnitContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; this.state = 555; - this.match(QuintParser.T__1); + this.match(QuintParser.LPAREN); this.state = 556; + this.match(QuintParser.RPAREN); + } + break; + + case 13: + { + _localctx = new RecordContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 557; + this.match(QuintParser.T__1); + this.state = 558; this.recElem(); - this.state = 561; + this.state = 563; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 557; + this.state = 559; this.match(QuintParser.T__7); - this.state = 558; + this.state = 560; this.recElem(); } } } - this.state = 563; + this.state = 565; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); } - this.state = 565; + this.state = 567; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__7) { { - this.state = 564; + this.state = 566; this.match(QuintParser.T__7); } } - this.state = 567; + this.state = 569; this.match(QuintParser.T__2); } break; - case 13: + case 14: { _localctx = new ListContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 569; + this.state = 571; this.match(QuintParser.T__10); - this.state = 578; + this.state = 580; this._errHandler.sync(this); _la = this._input.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << QuintParser.T__1) | (1 << QuintParser.T__10) | (1 << QuintParser.T__13) | (1 << QuintParser.T__14) | (1 << QuintParser.T__15) | (1 << QuintParser.T__16) | (1 << QuintParser.T__17) | (1 << QuintParser.T__18) | (1 << QuintParser.T__19))) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & ((1 << (QuintParser.T__32 - 33)) | (1 << (QuintParser.T__33 - 33)) | (1 << (QuintParser.T__34 - 33)) | (1 << (QuintParser.T__36 - 33)) | (1 << (QuintParser.STRING - 33)) | (1 << (QuintParser.BOOL - 33)) | (1 << (QuintParser.INT - 33)) | (1 << (QuintParser.AND - 33)) | (1 << (QuintParser.OR - 33)) | (1 << (QuintParser.IFF - 33)) | (1 << (QuintParser.IMPLIES - 33)) | (1 << (QuintParser.MAP - 33)) | (1 << (QuintParser.MATCH - 33)) | (1 << (QuintParser.MINUS - 33)) | (1 << (QuintParser.LPAREN - 33)) | (1 << (QuintParser.SET - 33)) | (1 << (QuintParser.LIST - 33)))) !== 0) || _la === QuintParser.LOW_ID || _la === QuintParser.CAP_ID) { { - this.state = 570; + this.state = 572; this.expr(0); - this.state = 575; + this.state = 577; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 571; + this.state = 573; this.match(QuintParser.T__7); - this.state = 572; + this.state = 574; this.expr(0); } } } - this.state = 577; + this.state = 579; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); } } } - this.state = 581; + this.state = 583; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__7) { { - this.state = 580; + this.state = 582; this.match(QuintParser.T__7); } } - this.state = 583; + this.state = 585; this.match(QuintParser.T__11); } break; - case 14: + case 15: { _localctx = new IfElseContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 584; - this.match(QuintParser.T__34); - this.state = 585; - this.match(QuintParser.LPAREN); this.state = 586; - this.expr(0); + this.match(QuintParser.T__34); this.state = 587; - this.match(QuintParser.RPAREN); + this.match(QuintParser.LPAREN); this.state = 588; this.expr(0); this.state = 589; - this.match(QuintParser.T__35); + this.match(QuintParser.RPAREN); this.state = 590; + this.expr(0); + this.state = 591; + this.match(QuintParser.T__35); + this.state = 592; this.expr(5); } break; - case 15: + case 16: { _localctx = new LetInContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 592; + this.state = 594; this.operDef(); - this.state = 593; + this.state = 595; this.expr(4); } break; - case 16: + case 17: { _localctx = new NondetContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 595; + this.state = 597; this.nondetOperDef(); - this.state = 596; + this.state = 598; this.expr(3); } break; - case 17: + case 18: { _localctx = new ParenContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 598; + this.state = 600; this.match(QuintParser.LPAREN); - this.state = 599; + this.state = 601; this.expr(0); - this.state = 600; + this.state = 602; this.match(QuintParser.RPAREN); } break; - case 18: + case 19: { _localctx = new BracesContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 602; + this.state = 604; this.match(QuintParser.T__1); - this.state = 603; + this.state = 605; this.expr(0); - this.state = 604; + this.state = 606; this.match(QuintParser.T__2); } break; } this._ctx._stop = this._input.tryLT(-1); - this.state = 657; + this.state = 659; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 69, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -2395,21 +2407,21 @@ export class QuintParser extends Parser { } _prevctx = _localctx; { - this.state = 655; + this.state = 657; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 68, this._ctx) ) { case 1: { _localctx = new PowContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 608; - if (!(this.precpred(this._ctx, 26))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 26)"); + this.state = 610; + if (!(this.precpred(this._ctx, 27))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 27)"); } - this.state = 609; + this.state = 611; (_localctx as PowContext)._op = this.match(QuintParser.T__30); - this.state = 610; - this.expr(26); + this.state = 612; + this.expr(27); } break; @@ -2417,11 +2429,11 @@ export class QuintParser extends Parser { { _localctx = new MultDivContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 611; - if (!(this.precpred(this._ctx, 24))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 24)"); + this.state = 613; + if (!(this.precpred(this._ctx, 25))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 25)"); } - this.state = 612; + this.state = 614; (_localctx as MultDivContext)._op = this._input.LT(1); _la = this._input.LA(1); if (!(((((_la - 51)) & ~0x1F) === 0 && ((1 << (_la - 51)) & ((1 << (QuintParser.MUL - 51)) | (1 << (QuintParser.DIV - 51)) | (1 << (QuintParser.MOD - 51)))) !== 0))) { @@ -2434,8 +2446,8 @@ export class QuintParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 613; - this.expr(25); + this.state = 615; + this.expr(26); } break; @@ -2443,11 +2455,11 @@ export class QuintParser extends Parser { { _localctx = new PlusMinusContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 614; - if (!(this.precpred(this._ctx, 23))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 23)"); + this.state = 616; + if (!(this.precpred(this._ctx, 24))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 24)"); } - this.state = 615; + this.state = 617; (_localctx as PlusMinusContext)._op = this._input.LT(1); _la = this._input.LA(1); if (!(_la === QuintParser.PLUS || _la === QuintParser.MINUS)) { @@ -2460,8 +2472,8 @@ export class QuintParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 616; - this.expr(24); + this.state = 618; + this.expr(25); } break; @@ -2469,11 +2481,11 @@ export class QuintParser extends Parser { { _localctx = new RelationsContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 617; - if (!(this.precpred(this._ctx, 22))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 22)"); + this.state = 619; + if (!(this.precpred(this._ctx, 23))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 23)"); } - this.state = 618; + this.state = 620; (_localctx as RelationsContext)._op = this._input.LT(1); _la = this._input.LA(1); if (!(((((_la - 54)) & ~0x1F) === 0 && ((1 << (_la - 54)) & ((1 << (QuintParser.GT - 54)) | (1 << (QuintParser.LT - 54)) | (1 << (QuintParser.GE - 54)) | (1 << (QuintParser.LE - 54)) | (1 << (QuintParser.NE - 54)) | (1 << (QuintParser.EQ - 54)))) !== 0))) { @@ -2486,8 +2498,8 @@ export class QuintParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 619; - this.expr(23); + this.state = 621; + this.expr(24); } break; @@ -2495,14 +2507,14 @@ export class QuintParser extends Parser { { _localctx = new ErrorEqContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 620; - if (!(this.precpred(this._ctx, 20))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 20)"); + this.state = 622; + if (!(this.precpred(this._ctx, 21))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 21)"); } - this.state = 621; + this.state = 623; this.match(QuintParser.ASGN); - this.state = 622; - this.expr(21); + this.state = 624; + this.expr(22); const m = "[QNT006] unexpected '=', did you mean '=='?" this.notifyErrorListeners(m) @@ -2514,14 +2526,14 @@ export class QuintParser extends Parser { { _localctx = new AndContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 625; - if (!(this.precpred(this._ctx, 18))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 18)"); + this.state = 627; + if (!(this.precpred(this._ctx, 19))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 19)"); } - this.state = 626; + this.state = 628; this.match(QuintParser.AND); - this.state = 627; - this.expr(19); + this.state = 629; + this.expr(20); } break; @@ -2529,14 +2541,14 @@ export class QuintParser extends Parser { { _localctx = new OrContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 628; - if (!(this.precpred(this._ctx, 16))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 16)"); + this.state = 630; + if (!(this.precpred(this._ctx, 17))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 17)"); } - this.state = 629; + this.state = 631; this.match(QuintParser.OR); - this.state = 630; - this.expr(17); + this.state = 632; + this.expr(18); } break; @@ -2544,14 +2556,14 @@ export class QuintParser extends Parser { { _localctx = new IffContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 631; - if (!(this.precpred(this._ctx, 15))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 15)"); + this.state = 633; + if (!(this.precpred(this._ctx, 16))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 16)"); } - this.state = 632; + this.state = 634; this.match(QuintParser.IFF); - this.state = 633; - this.expr(16); + this.state = 635; + this.expr(17); } break; @@ -2559,14 +2571,14 @@ export class QuintParser extends Parser { { _localctx = new ImpliesContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 634; - if (!(this.precpred(this._ctx, 14))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 14)"); + this.state = 636; + if (!(this.precpred(this._ctx, 15))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 15)"); } - this.state = 635; + this.state = 637; this.match(QuintParser.IMPLIES); - this.state = 636; - this.expr(15); + this.state = 638; + this.expr(16); } break; @@ -2574,13 +2586,13 @@ export class QuintParser extends Parser { { _localctx = new PairContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 637; + this.state = 639; if (!(this.precpred(this._ctx, 8))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 8)"); } - this.state = 638; + this.state = 640; this.match(QuintParser.T__25); - this.state = 639; + this.state = 641; this.expr(9); } break; @@ -2589,32 +2601,32 @@ export class QuintParser extends Parser { { _localctx = new DotCallContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 640; - if (!(this.precpred(this._ctx, 30))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 30)"); + this.state = 642; + if (!(this.precpred(this._ctx, 31))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 31)"); } - this.state = 641; + this.state = 643; this.match(QuintParser.T__21); - this.state = 642; + this.state = 644; this.nameAfterDot(); - this.state = 648; + this.state = 650; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 67, this._ctx) ) { case 1: { - this.state = 643; - this.match(QuintParser.LPAREN); this.state = 645; + this.match(QuintParser.LPAREN); + this.state = 647; this._errHandler.sync(this); _la = this._input.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << QuintParser.T__1) | (1 << QuintParser.T__10) | (1 << QuintParser.T__13) | (1 << QuintParser.T__14) | (1 << QuintParser.T__15) | (1 << QuintParser.T__16) | (1 << QuintParser.T__17) | (1 << QuintParser.T__18) | (1 << QuintParser.T__19))) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & ((1 << (QuintParser.T__32 - 33)) | (1 << (QuintParser.T__33 - 33)) | (1 << (QuintParser.T__34 - 33)) | (1 << (QuintParser.T__36 - 33)) | (1 << (QuintParser.STRING - 33)) | (1 << (QuintParser.BOOL - 33)) | (1 << (QuintParser.INT - 33)) | (1 << (QuintParser.AND - 33)) | (1 << (QuintParser.OR - 33)) | (1 << (QuintParser.IFF - 33)) | (1 << (QuintParser.IMPLIES - 33)) | (1 << (QuintParser.MAP - 33)) | (1 << (QuintParser.MATCH - 33)) | (1 << (QuintParser.MINUS - 33)) | (1 << (QuintParser.LPAREN - 33)) | (1 << (QuintParser.SET - 33)) | (1 << (QuintParser.LIST - 33)))) !== 0) || _la === QuintParser.LOW_ID || _la === QuintParser.CAP_ID) { { - this.state = 644; + this.state = 646; this.argList(); } } - this.state = 647; + this.state = 649; this.match(QuintParser.RPAREN); } break; @@ -2626,22 +2638,22 @@ export class QuintParser extends Parser { { _localctx = new ListAppContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 650; - if (!(this.precpred(this._ctx, 27))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 27)"); + this.state = 652; + if (!(this.precpred(this._ctx, 28))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 28)"); } - this.state = 651; + this.state = 653; this.match(QuintParser.T__10); - this.state = 652; + this.state = 654; this.expr(0); - this.state = 653; + this.state = 655; this.match(QuintParser.T__11); } break; } } } - this.state = 659; + this.state = 661; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 69, this._ctx); } @@ -2669,43 +2681,43 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 660; + this.state = 662; this.match(QuintParser.MATCH); - this.state = 661; + this.state = 663; this.expr(0); - this.state = 662; - this.match(QuintParser.T__1); this.state = 664; + this.match(QuintParser.T__1); + this.state = 666; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__12) { { - this.state = 663; + this.state = 665; this.match(QuintParser.T__12); } } - this.state = 666; + this.state = 668; _localctx._matchSumCase = this.matchSumCase(); _localctx._matchCase.push(_localctx._matchSumCase); - this.state = 671; + this.state = 673; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === QuintParser.T__12) { { { - this.state = 667; + this.state = 669; this.match(QuintParser.T__12); - this.state = 668; + this.state = 670; _localctx._matchSumCase = this.matchSumCase(); _localctx._matchCase.push(_localctx._matchSumCase); } } - this.state = 673; + this.state = 675; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 674; + this.state = 676; this.match(QuintParser.T__2); } } @@ -2730,28 +2742,28 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 678; + this.state = 680; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.LOW_ID: case QuintParser.CAP_ID: { - this.state = 676; + this.state = 678; _localctx._variantMatch = this.matchSumVariant(); } break; case QuintParser.T__36: { - this.state = 677; + this.state = 679; _localctx._wildCardMatch = this.match(QuintParser.T__36); } break; default: throw new NoViableAltException(this); } - this.state = 680; + this.state = 682; this.match(QuintParser.T__26); - this.state = 681; + this.state = 683; this.expr(0); } } @@ -2778,36 +2790,36 @@ export class QuintParser extends Parser { this.enterOuterAlt(_localctx, 1); { { - this.state = 683; + this.state = 685; _localctx._variantLabel = this.simpleId("variant label"); } - this.state = 690; + this.state = 692; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.LPAREN) { { - this.state = 684; + this.state = 686; this.match(QuintParser.LPAREN); - this.state = 687; + this.state = 689; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.LOW_ID: case QuintParser.CAP_ID: { - this.state = 685; + this.state = 687; _localctx._variantParam = this.simpleId("match case parameter"); } break; case QuintParser.T__36: { - this.state = 686; + this.state = 688; this.match(QuintParser.T__36); } break; default: throw new NoViableAltException(this); } - this.state = 689; + this.state = 691; this.match(QuintParser.RPAREN); } } @@ -2833,15 +2845,15 @@ export class QuintParser extends Parser { let _localctx: DeclarationOrExprContext = new DeclarationOrExprContext(this._ctx, this.state); this.enterRule(_localctx, 52, QuintParser.RULE_declarationOrExpr); try { - this.state = 701; + this.state = 703; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 75, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 692; + this.state = 694; this.declaration(); - this.state = 693; + this.state = 695; this.match(QuintParser.EOF); } break; @@ -2849,9 +2861,9 @@ export class QuintParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 695; + this.state = 697; this.expr(0); - this.state = 696; + this.state = 698; this.match(QuintParser.EOF); } break; @@ -2859,9 +2871,9 @@ export class QuintParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 698; + this.state = 700; this.match(QuintParser.DOCCOMMENT); - this.state = 699; + this.state = 701; this.match(QuintParser.EOF); } break; @@ -2869,7 +2881,7 @@ export class QuintParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 700; + this.state = 702; this.match(QuintParser.EOF); } break; @@ -2894,13 +2906,13 @@ export class QuintParser extends Parser { let _localctx: LambdaContext = new LambdaContext(this._ctx, this.state); this.enterRule(_localctx, 54, QuintParser.RULE_lambda); try { - this.state = 705; + this.state = 707; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 76, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 703; + this.state = 705; this.lambdaUnsugared(); } break; @@ -2908,7 +2920,7 @@ export class QuintParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 704; + this.state = 706; this.lambdaTupleSugar(); } break; @@ -2934,7 +2946,7 @@ export class QuintParser extends Parser { this.enterRule(_localctx, 56, QuintParser.RULE_lambdaUnsugared); let _la: number; try { - this.state = 724; + this.state = 726; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.T__36: @@ -2942,42 +2954,42 @@ export class QuintParser extends Parser { case QuintParser.CAP_ID: this.enterOuterAlt(_localctx, 1); { - this.state = 707; + this.state = 709; this.parameter(); - this.state = 708; + this.state = 710; this.match(QuintParser.T__26); - this.state = 709; + this.state = 711; this.expr(0); } break; case QuintParser.LPAREN: this.enterOuterAlt(_localctx, 2); { - this.state = 711; + this.state = 713; this.match(QuintParser.LPAREN); - this.state = 712; + this.state = 714; this.parameter(); - this.state = 717; + this.state = 719; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === QuintParser.T__7) { { { - this.state = 713; + this.state = 715; this.match(QuintParser.T__7); - this.state = 714; + this.state = 716; this.parameter(); } } - this.state = 719; + this.state = 721; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 720; + this.state = 722; this.match(QuintParser.RPAREN); - this.state = 721; + this.state = 723; this.match(QuintParser.T__26); - this.state = 722; + this.state = 724; this.expr(0); } break; @@ -3007,35 +3019,35 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 726; + this.state = 728; this.match(QuintParser.LPAREN); - this.state = 727; + this.state = 729; this.match(QuintParser.LPAREN); - this.state = 728; + this.state = 730; this.parameter(); - this.state = 731; + this.state = 733; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 729; + this.state = 731; this.match(QuintParser.T__7); - this.state = 730; + this.state = 732; this.parameter(); } } - this.state = 733; + this.state = 735; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la === QuintParser.T__7); - this.state = 735; + this.state = 737; this.match(QuintParser.RPAREN); - this.state = 736; + this.state = 738; this.match(QuintParser.RPAREN); - this.state = 737; + this.state = 739; this.match(QuintParser.T__26); - this.state = 738; + this.state = 740; this.expr(0); } } @@ -3058,13 +3070,13 @@ export class QuintParser extends Parser { let _localctx: IdentOrHoleContext = new IdentOrHoleContext(this._ctx, this.state); this.enterRule(_localctx, 60, QuintParser.RULE_identOrHole); try { - this.state = 742; + this.state = 744; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.T__36: this.enterOuterAlt(_localctx, 1); { - this.state = 740; + this.state = 742; this.match(QuintParser.T__36); } break; @@ -3072,7 +3084,7 @@ export class QuintParser extends Parser { case QuintParser.CAP_ID: this.enterOuterAlt(_localctx, 2); { - this.state = 741; + this.state = 743; this.qualId(); } break; @@ -3101,7 +3113,7 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 744; + this.state = 746; _localctx._paramName = this.identOrHole(); } } @@ -3126,11 +3138,11 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 746; + this.state = 748; _localctx._paramName = this.identOrHole(); - this.state = 747; + this.state = 749; this.match(QuintParser.T__4); - this.state = 748; + this.state = 750; this.type(0); } } @@ -3153,13 +3165,13 @@ export class QuintParser extends Parser { let _localctx: IdentOrStarContext = new IdentOrStarContext(this._ctx, this.state); this.enterRule(_localctx, 66, QuintParser.RULE_identOrStar); try { - this.state = 752; + this.state = 754; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.MUL: this.enterOuterAlt(_localctx, 1); { - this.state = 750; + this.state = 752; this.match(QuintParser.MUL); } break; @@ -3167,7 +3179,7 @@ export class QuintParser extends Parser { case QuintParser.CAP_ID: this.enterOuterAlt(_localctx, 2); { - this.state = 751; + this.state = 753; this.qualId(); } break; @@ -3197,21 +3209,21 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 754; + this.state = 756; this.expr(0); - this.state = 759; + this.state = 761; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === QuintParser.T__7) { { { - this.state = 755; + this.state = 757; this.match(QuintParser.T__7); - this.state = 756; + this.state = 758; this.expr(0); } } - this.state = 761; + this.state = 763; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -3236,27 +3248,27 @@ export class QuintParser extends Parser { let _localctx: RecElemContext = new RecElemContext(this._ctx, this.state); this.enterRule(_localctx, 70, QuintParser.RULE_recElem); try { - this.state = 768; + this.state = 770; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.LOW_ID: case QuintParser.CAP_ID: this.enterOuterAlt(_localctx, 1); { - this.state = 762; + this.state = 764; this.simpleId("record"); - this.state = 763; + this.state = 765; this.match(QuintParser.T__4); - this.state = 764; + this.state = 766; this.expr(0); } break; case QuintParser.T__37: this.enterOuterAlt(_localctx, 2); { - this.state = 766; + this.state = 768; this.match(QuintParser.T__37); - this.state = 767; + this.state = 769; this.expr(0); } break; @@ -3284,14 +3296,14 @@ export class QuintParser extends Parser { this.enterRule(_localctx, 72, QuintParser.RULE_normalCallName); let _la: number; try { - this.state = 772; + this.state = 774; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.LOW_ID: case QuintParser.CAP_ID: this.enterOuterAlt(_localctx, 1); { - this.state = 770; + this.state = 772; this.qualId(); } break; @@ -3304,7 +3316,7 @@ export class QuintParser extends Parser { case QuintParser.LIST: this.enterOuterAlt(_localctx, 2); { - this.state = 771; + this.state = 773; _localctx._op = this._input.LT(1); _la = this._input.LA(1); if (!(((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & ((1 << (QuintParser.AND - 43)) | (1 << (QuintParser.OR - 43)) | (1 << (QuintParser.IFF - 43)) | (1 << (QuintParser.IMPLIES - 43)) | (1 << (QuintParser.MAP - 43)) | (1 << (QuintParser.SET - 43)) | (1 << (QuintParser.LIST - 43)))) !== 0))) { @@ -3343,14 +3355,14 @@ export class QuintParser extends Parser { this.enterRule(_localctx, 74, QuintParser.RULE_nameAfterDot); let _la: number; try { - this.state = 776; + this.state = 778; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.LOW_ID: case QuintParser.CAP_ID: this.enterOuterAlt(_localctx, 1); { - this.state = 774; + this.state = 776; this.qualId(); } break; @@ -3360,7 +3372,7 @@ export class QuintParser extends Parser { case QuintParser.IMPLIES: this.enterOuterAlt(_localctx, 2); { - this.state = 775; + this.state = 777; _localctx._op = this._input.LT(1); _la = this._input.LA(1); if (!(((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & ((1 << (QuintParser.AND - 43)) | (1 << (QuintParser.OR - 43)) | (1 << (QuintParser.IFF - 43)) | (1 << (QuintParser.IMPLIES - 43)))) !== 0))) { @@ -3401,7 +3413,7 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 778; + this.state = 780; _la = this._input.LA(1); if (!(((((_la - 31)) & ~0x1F) === 0 && ((1 << (_la - 31)) & ((1 << (QuintParser.T__30 - 31)) | (1 << (QuintParser.AND - 31)) | (1 << (QuintParser.OR - 31)) | (1 << (QuintParser.IFF - 31)) | (1 << (QuintParser.IMPLIES - 31)) | (1 << (QuintParser.PLUS - 31)) | (1 << (QuintParser.MINUS - 31)) | (1 << (QuintParser.MUL - 31)) | (1 << (QuintParser.DIV - 31)) | (1 << (QuintParser.MOD - 31)) | (1 << (QuintParser.GT - 31)) | (1 << (QuintParser.LT - 31)) | (1 << (QuintParser.GE - 31)) | (1 << (QuintParser.LE - 31)) | (1 << (QuintParser.NE - 31)) | (1 << (QuintParser.EQ - 31)))) !== 0))) { this._errHandler.recoverInline(this); @@ -3437,7 +3449,7 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 780; + this.state = 782; _la = this._input.LA(1); if (!(((((_la - 40)) & ~0x1F) === 0 && ((1 << (_la - 40)) & ((1 << (QuintParser.STRING - 40)) | (1 << (QuintParser.BOOL - 40)) | (1 << (QuintParser.INT - 40)))) !== 0))) { this._errHandler.recoverInline(this); @@ -3473,23 +3485,23 @@ export class QuintParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 782; + this.state = 784; this.identifier(); - this.state = 787; + this.state = 789; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 86, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 783; + this.state = 785; this.match(QuintParser.T__38); - this.state = 784; + this.state = 786; this.identifier(); } } } - this.state = 789; + this.state = 791; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 86, this._ctx); } @@ -3514,13 +3526,13 @@ export class QuintParser extends Parser { let _localctx: SimpleIdContext = new SimpleIdContext(this._ctx, this.state, context); this.enterRule(_localctx, 82, QuintParser.RULE_simpleId); try { - this.state = 794; + this.state = 796; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 87, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 790; + this.state = 792; this.identifier(); } break; @@ -3528,7 +3540,7 @@ export class QuintParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 791; + this.state = 793; _localctx._qualId = this.qualId(); const err = quintErrorToString( @@ -3564,7 +3576,7 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 796; + this.state = 798; _la = this._input.LA(1); if (!(_la === QuintParser.LOW_ID || _la === QuintParser.CAP_ID)) { this._errHandler.recoverInline(this); @@ -3616,47 +3628,47 @@ export class QuintParser extends Parser { private expr_sempred(_localctx: ExprContext, predIndex: number): boolean { switch (predIndex) { case 2: - return this.precpred(this._ctx, 26); + return this.precpred(this._ctx, 27); case 3: - return this.precpred(this._ctx, 24); + return this.precpred(this._ctx, 25); case 4: - return this.precpred(this._ctx, 23); + return this.precpred(this._ctx, 24); case 5: - return this.precpred(this._ctx, 22); + return this.precpred(this._ctx, 23); case 6: - return this.precpred(this._ctx, 20); + return this.precpred(this._ctx, 21); case 7: - return this.precpred(this._ctx, 18); + return this.precpred(this._ctx, 19); case 8: - return this.precpred(this._ctx, 16); + return this.precpred(this._ctx, 17); case 9: - return this.precpred(this._ctx, 15); + return this.precpred(this._ctx, 16); case 10: - return this.precpred(this._ctx, 14); + return this.precpred(this._ctx, 15); case 11: return this.precpred(this._ctx, 8); case 12: - return this.precpred(this._ctx, 30); + return this.precpred(this._ctx, 31); case 13: - return this.precpred(this._ctx, 27); + return this.precpred(this._ctx, 28); } return true; } private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03H\u0321\x04\x02" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03H\u0323\x04\x02" + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + @@ -3717,142 +3729,142 @@ export class QuintParser extends Parser { "\u0211\v\x18\x03\x18\x05\x18\u0214\n\x18\x03\x18\x03\x18\x03\x18\x03\x18" + "\x03\x18\x03\x18\x05\x18\u021C\n\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03" + "\x18\x03\x18\x07\x18\u0224\n\x18\f\x18\x0E\x18\u0227\v\x18\x03\x18\x05" + - "\x18\u022A\n\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x07\x18" + - "\u0232\n\x18\f\x18\x0E\x18\u0235\v\x18\x03\x18\x05\x18\u0238\n\x18\x03" + - "\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x07\x18\u0240\n\x18\f\x18" + - "\x0E\x18\u0243\v\x18\x05\x18\u0245\n\x18\x03\x18\x05\x18\u0248\n\x18\x03" + + "\x18\u022A\n\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18" + + "\x03\x18\x07\x18\u0234\n\x18\f\x18\x0E\x18\u0237\v\x18\x03\x18\x05\x18" + + "\u023A\n\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x07\x18\u0242" + + "\n\x18\f\x18\x0E\x18\u0245\v\x18\x05\x18\u0247\n\x18\x03\x18\x05\x18\u024A" + + "\n\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18" + + "\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18" + + "\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x05\x18\u0263\n\x18\x03" + "\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03" + "\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03" + - "\x18\x03\x18\x03\x18\x03\x18\x03\x18\x05\x18\u0261\n\x18\x03\x18\x03\x18" + - "\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18" + - "\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18" + - "\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18" + - "\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x05\x18" + - "\u0288\n\x18\x03\x18\x05\x18\u028B\n\x18\x03\x18\x03\x18\x03\x18\x03\x18" + - "\x03\x18\x07\x18\u0292\n\x18\f\x18\x0E\x18\u0295\v\x18\x03\x19\x03\x19" + - "\x03\x19\x03\x19\x05\x19\u029B\n\x19\x03\x19\x03\x19\x03\x19\x07\x19\u02A0" + - "\n\x19\f\x19\x0E\x19\u02A3\v\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x05\x1A" + - "\u02A9\n\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x05" + - "\x1B\u02B2\n\x1B\x03\x1B\x05\x1B\u02B5\n\x1B\x03\x1C\x03\x1C\x03\x1C\x03" + - "\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x05\x1C\u02C0\n\x1C\x03\x1D" + - "\x03\x1D\x05\x1D\u02C4\n\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03" + - "\x1E\x03\x1E\x03\x1E\x07\x1E\u02CE\n\x1E\f\x1E\x0E\x1E\u02D1\v\x1E\x03" + - "\x1E\x03\x1E\x03\x1E\x03\x1E\x05\x1E\u02D7\n\x1E\x03\x1F\x03\x1F\x03\x1F" + - "\x03\x1F\x03\x1F\x06\x1F\u02DE\n\x1F\r\x1F\x0E\x1F\u02DF\x03\x1F\x03\x1F" + - "\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x05 \u02E9\n \x03!\x03!\x03\"\x03\"" + - "\x03\"\x03\"\x03#\x03#\x05#\u02F3\n#\x03$\x03$\x03$\x07$\u02F8\n$\f$\x0E" + - "$\u02FB\v$\x03%\x03%\x03%\x03%\x03%\x03%\x05%\u0303\n%\x03&\x03&\x05&" + - "\u0307\n&\x03\'\x03\'\x05\'\u030B\n\'\x03(\x03(\x03)\x03)\x03*\x03*\x03" + - "*\x07*\u0314\n*\f*\x0E*\u0317\v*\x03+\x03+\x03+\x03+\x05+\u031D\n+\x03" + - ",\x03,\x03,\x02\x02\x04&.-\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E" + - "\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 " + - "\x02\"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02" + - "<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02" + - "\x02\n\x03\x0257\x03\x0234\x03\x028=\x04\x02-1AB\x03\x02-0\x05\x02!!-" + - "03=\x03\x02*,\x03\x02CD\x02\u0382\x02Y\x03\x02\x02\x02\x04b\x03\x02\x02" + - "\x02\x06s\x03\x02\x02\x02\b\x8C\x03\x02\x02\x02\n\xBE\x03\x02\x02\x02" + - "\f\xCC\x03\x02\x02\x02\x0E\xCE\x03\x02\x02\x02\x10\xDC\x03\x02\x02\x02" + - "\x12\xE6\x03\x02\x02\x02\x14\xED\x03\x02\x02\x02\x16\u0101\x03\x02\x02" + - "\x02\x18\u0115\x03\x02\x02\x02\x1A\u0122\x03\x02\x02\x02\x1C\u0152\x03" + - "\x02\x02\x02\x1E\u0154\x03\x02\x02\x02 \u0156\x03\x02\x02\x02\"\u0158" + - "\x03\x02\x02\x02$\u015A\x03\x02\x02\x02&\u01A2\x03\x02\x02\x02(\u01AF" + - "\x03\x02\x02\x02*\u01C6\x03\x02\x02\x02,\u01C8\x03\x02\x02\x02.\u0260" + - "\x03\x02\x02\x020\u0296\x03\x02\x02\x022\u02A8\x03\x02\x02\x024\u02AD" + - "\x03\x02\x02\x026\u02BF\x03\x02\x02\x028\u02C3\x03\x02\x02\x02:\u02D6" + - "\x03\x02\x02\x02<\u02D8\x03\x02\x02\x02>\u02E8\x03\x02\x02\x02@\u02EA" + - "\x03\x02\x02\x02B\u02EC\x03\x02\x02\x02D\u02F2\x03\x02\x02\x02F\u02F4" + - "\x03\x02\x02\x02H\u0302\x03\x02\x02\x02J\u0306\x03\x02\x02\x02L\u030A" + - "\x03\x02\x02\x02N\u030C\x03\x02\x02\x02P\u030E\x03\x02\x02\x02R\u0310" + - "\x03\x02\x02\x02T\u031C\x03\x02\x02\x02V\u031E\x03\x02\x02\x02XZ\x05\x04" + - "\x03\x02YX\x03\x02\x02\x02Z[\x03\x02\x02\x02[Y\x03\x02\x02\x02[\\\x03" + - "\x02\x02\x02\\]\x03\x02\x02\x02]^\x07\x02\x02\x03^\x03\x03\x02\x02\x02" + - "_a\x07E\x02\x02`_\x03\x02\x02\x02ad\x03\x02\x02\x02b`\x03\x02\x02\x02" + - "bc\x03\x02\x02\x02ce\x03\x02\x02\x02db\x03\x02\x02\x02ef\x07\x03\x02\x02" + - "fg\x05R*\x02gk\x07\x04\x02\x02hj\x05\x06\x04\x02ih\x03\x02\x02\x02jm\x03" + - "\x02\x02\x02ki\x03\x02\x02\x02kl\x03\x02\x02\x02ln\x03\x02\x02\x02mk\x03" + - "\x02\x02\x02no\x07\x05\x02\x02o\x05\x03\x02\x02\x02pr\x07E\x02\x02qp\x03" + - "\x02\x02\x02ru\x03\x02\x02\x02sq\x03\x02\x02\x02st\x03\x02\x02\x02tv\x03" + - "\x02\x02\x02us\x03\x02\x02\x02vw\x05\b\x05\x02w\x07\x03\x02\x02\x02xy" + - "\x07\x06\x02\x02yz\x05R*\x02z{\x07\x07\x02\x02{|\x05&\x14\x02|\x8D\x03" + - "\x02\x02\x02}~\x07\b\x02\x02~\x7F\x05R*\x02\x7F\x80\x07\x07\x02\x02\x80" + - "\x81\x05&\x14\x02\x81\x8D\x03\x02\x02\x02\x82\x83\x07\t\x02\x02\x83\x84" + - "\x05> \x02\x84\x85\x07>\x02\x02\x85\x86\x05.\x18\x02\x86\x8D\x03\x02\x02" + - "\x02\x87\x8D\x05\x1C\x0F\x02\x88\x8D\x05\n\x06\x02\x89\x8D\x05\f\x07\x02" + - "\x8A\x8D\x05\x18\r\x02\x8B\x8D\x05\x1A\x0E\x02\x8Cx\x03\x02\x02\x02\x8C" + - "}\x03\x02\x02\x02\x8C\x82\x03\x02\x02\x02\x8C\x87\x03\x02\x02\x02\x8C" + - "\x88\x03\x02\x02\x02\x8C\x89\x03\x02\x02\x02\x8C\x8A\x03\x02\x02\x02\x8C" + - "\x8B\x03\x02\x02\x02\x8D\t\x03\x02\x02\x02\x8E\x8F\x05\x16\f\x02\x8F\x90" + - "\x05J&\x02\x90\x91\x07?\x02\x02\x91\x96\x05B\"\x02\x92\x93\x07\n\x02\x02" + - "\x93\x95\x05B\"\x02\x94\x92\x03\x02\x02\x02\x95\x98\x03\x02\x02\x02\x96" + - "\x94\x03\x02\x02\x02\x96\x97\x03\x02\x02\x02\x97\x99\x03\x02\x02\x02\x98" + - "\x96\x03\x02\x02\x02\x99\x9A\x07@\x02\x02\x9A\x9B\x07\x07\x02\x02\x9B" + - "\x9E\x05&\x14\x02\x9C\x9D\x07>\x02\x02\x9D\x9F\x05.\x18\x02\x9E\x9C\x03" + - "\x02\x02\x02\x9E\x9F\x03\x02\x02\x02\x9F\xA1\x03\x02\x02\x02\xA0\xA2\x07" + - "\v\x02\x02\xA1\xA0\x03\x02\x02\x02\xA1\xA2\x03\x02\x02\x02\xA2\xBF\x03" + - "\x02\x02\x02\xA3\xA4\x05\x16\f\x02\xA4\xB1\x05J&\x02\xA5\xAE\x07?\x02" + - "\x02\xA6\xAB\x05@!\x02\xA7\xA8\x07\n\x02\x02\xA8\xAA\x05@!\x02\xA9\xA7" + - "\x03\x02\x02\x02\xAA\xAD\x03\x02\x02\x02\xAB\xA9\x03\x02\x02\x02\xAB\xAC" + - "\x03\x02\x02\x02\xAC\xAF\x03\x02\x02\x02\xAD\xAB\x03\x02\x02\x02\xAE\xA6" + - "\x03\x02\x02\x02\xAE\xAF\x03\x02\x02\x02\xAF\xB0\x03\x02\x02\x02\xB0\xB2" + - "\x07@\x02\x02\xB1\xA5\x03\x02\x02\x02\xB1\xB2\x03\x02\x02\x02\xB2\xB5" + - "\x03\x02\x02\x02\xB3\xB4\x07\x07\x02\x02\xB4\xB6\x05&\x14\x02\xB5\xB3" + - "\x03\x02\x02\x02\xB5\xB6\x03\x02\x02\x02\xB6\xB9\x03\x02\x02\x02\xB7\xB8" + - "\x07>\x02\x02\xB8\xBA\x05.\x18\x02\xB9\xB7\x03\x02\x02\x02\xB9\xBA\x03" + - "\x02\x02\x02\xBA\xBC\x03\x02\x02\x02\xBB\xBD\x07\v\x02\x02\xBC\xBB\x03" + - "\x02\x02\x02\xBC\xBD\x03\x02\x02\x02\xBD\xBF\x03\x02\x02\x02\xBE\x8E\x03" + - "\x02\x02\x02\xBE\xA3\x03\x02\x02\x02\xBF\v\x03\x02\x02\x02\xC0\xC1\x07" + - "\f\x02\x02\xC1\xCD\x05R*\x02\xC2\xC3\x07\f\x02\x02\xC3\xC4\x05\x0E\b\x02" + - "\xC4\xC5\x07>\x02\x02\xC5\xC6\x05&\x14\x02\xC6\xCD\x03\x02\x02\x02\xC7" + - "\xC8\x07\f\x02\x02\xC8\xC9\x05\x0E\b\x02\xC9\xCA\x07>\x02\x02\xCA\xCB" + - "\x05\x10\t\x02\xCB\xCD\x03\x02\x02\x02\xCC\xC0\x03\x02\x02\x02\xCC\xC2" + - "\x03\x02\x02\x02\xCC\xC7\x03\x02\x02\x02\xCD\r\x03\x02\x02\x02\xCE\xD9" + - "\x05R*\x02\xCF\xD0\x07\r\x02\x02\xD0\xD5\x07C\x02\x02\xD1\xD2\x07\n\x02" + - "\x02\xD2\xD4\x07C\x02\x02\xD3\xD1\x03\x02\x02\x02\xD4\xD7\x03\x02\x02" + - "\x02\xD5\xD3\x03\x02\x02\x02\xD5\xD6\x03\x02\x02\x02\xD6\xD8\x03\x02\x02" + - "\x02\xD7\xD5\x03\x02\x02\x02\xD8\xDA\x07\x0E\x02\x02\xD9\xCF\x03\x02\x02" + - "\x02\xD9\xDA\x03\x02\x02\x02\xDA\x0F\x03\x02\x02\x02\xDB\xDD\x07\x0F\x02" + - "\x02\xDC\xDB\x03\x02\x02\x02\xDC\xDD\x03\x02\x02\x02\xDD\xDE\x03\x02\x02" + - "\x02\xDE\xE3\x05\x12\n\x02\xDF\xE0\x07\x0F\x02\x02\xE0\xE2\x05\x12\n\x02" + - "\xE1\xDF\x03\x02\x02\x02\xE2\xE5\x03\x02\x02\x02\xE3\xE1\x03\x02\x02\x02" + - "\xE3\xE4\x03\x02\x02\x02\xE4\x11\x03\x02\x02\x02\xE5\xE3\x03\x02\x02\x02" + - "\xE6\xEB\x05T+\x02\xE7\xE8\x07?\x02\x02\xE8\xE9\x05&\x14\x02\xE9\xEA\x07" + - "@\x02\x02\xEA\xEC\x03\x02\x02\x02\xEB\xE7\x03\x02\x02\x02\xEB\xEC\x03" + - "\x02\x02\x02\xEC\x13\x03\x02\x02\x02\xED\xEE\x07\x10\x02\x02\xEE\xF1\x05" + - "R*\x02\xEF\xF0\x07\x07\x02\x02\xF0\xF2\x05&\x14\x02\xF1\xEF\x03\x02\x02" + - "\x02\xF1\xF2\x03\x02\x02\x02\xF2\xF3\x03\x02\x02\x02\xF3\xF4\x07>\x02" + - "\x02\xF4\xF6\x05.\x18\x02\xF5\xF7\x07\v\x02\x02\xF6\xF5\x03\x02\x02\x02" + - "\xF6\xF7\x03\x02\x02\x02\xF7\x15\x03\x02\x02\x02\xF8\u0102\x07\x11\x02" + - "\x02\xF9\u0102\x07\x12\x02\x02\xFA\xFB\x07\x13\x02\x02\xFB\u0102\x07\x11" + - "\x02\x02\xFC\xFD\x07\x13\x02\x02\xFD\u0102\x07\x12\x02\x02\xFE\u0102\x07" + - "\x14\x02\x02\xFF\u0102\x07\x15\x02\x02\u0100\u0102\x07\x16\x02\x02\u0101" + - "\xF8\x03\x02\x02\x02\u0101\xF9\x03\x02\x02\x02\u0101\xFA\x03\x02\x02\x02" + - "\u0101\xFC\x03\x02\x02\x02\u0101\xFE\x03\x02\x02\x02\u0101\xFF\x03\x02" + - "\x02\x02\u0101\u0100\x03\x02\x02\x02\u0102\x17\x03\x02\x02\x02\u0103\u0104" + - "\x07\x17\x02\x02\u0104\u0105\x05 \x11\x02\u0105\u0106\x07\x18\x02\x02" + - "\u0106\u0109\x05D#\x02\u0107\u0108\x07\x19\x02\x02\u0108\u010A\x05$\x13" + - "\x02\u0109\u0107\x03\x02\x02\x02\u0109\u010A\x03\x02\x02\x02\u010A\u0116" + - "\x03\x02\x02\x02\u010B\u010C\x07\x17\x02\x02\u010C\u010F\x05 \x11\x02" + - "\u010D\u010E\x07\x1A\x02\x02\u010E\u0110\x05 \x11\x02\u010F\u010D\x03" + - "\x02\x02\x02\u010F\u0110\x03\x02\x02\x02\u0110\u0113\x03\x02\x02\x02\u0111" + - "\u0112\x07\x19\x02\x02\u0112\u0114\x05$\x13\x02\u0113\u0111\x03\x02\x02" + - "\x02\u0113\u0114\x03\x02\x02\x02\u0114\u0116\x03\x02\x02\x02\u0115\u0103" + - "\x03\x02\x02\x02\u0115\u010B\x03\x02\x02\x02\u0116\x19\x03\x02\x02\x02" + - "\u0117\u0118\x07\x1B\x02\x02\u0118\u0119\x05 \x11\x02\u0119\u011A\x07" + - "\x18\x02\x02\u011A\u011B\x05D#\x02\u011B\u0123\x03\x02\x02\x02\u011C\u011D" + - "\x07\x1B\x02\x02\u011D\u0120\x05 \x11\x02\u011E\u011F\x07\x1A\x02\x02" + - "\u011F\u0121\x05 \x11\x02\u0120\u011E\x03\x02\x02\x02\u0120\u0121\x03" + - "\x02\x02\x02\u0121\u0123\x03\x02\x02\x02\u0122\u0117\x03\x02\x02\x02\u0122" + - "\u011C\x03\x02\x02\x02\u0123\x1B\x03\x02\x02\x02\u0124\u0125\x07\x17\x02" + - "\x02\u0125\u0126\x05\x1E\x10\x02\u0126\u0127\x07?\x02\x02\u0127\u0128" + - "\x05 \x11\x02\u0128\u0129\x07>\x02\x02\u0129\u0131\x05.\x18\x02\u012A" + - "\u012B\x07\n\x02\x02\u012B\u012C\x05 \x11\x02\u012C\u012D\x07>\x02\x02" + - "\u012D\u012E\x05.\x18\x02\u012E\u0130\x03\x02\x02\x02\u012F\u012A\x03" + - "\x02\x02\x02\u0130\u0133\x03\x02\x02\x02\u0131\u012F\x03\x02\x02\x02\u0131" + - "\u0132\x03\x02\x02\x02\u0132\u0134\x03\x02\x02\x02\u0133\u0131\x03\x02" + - "\x02\x02\u0134\u0135\x07@\x02\x02\u0135\u0136\x07\x18\x02\x02\u0136\u0139" + - "\x075\x02\x02\u0137\u0138\x07\x19\x02\x02\u0138\u013A\x05$\x13\x02\u0139" + - "\u0137\x03\x02\x02\x02\u0139\u013A\x03\x02\x02\x02\u013A\u0153\x03\x02" + - "\x02\x02\u013B\u013C\x07\x17\x02\x02\u013C\u013D\x05\x1E\x10\x02\u013D" + + "\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03" + + "\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03" + + "\x18\x05\x18\u028A\n\x18\x03\x18\x05\x18\u028D\n\x18\x03\x18\x03\x18\x03" + + "\x18\x03\x18\x03\x18\x07\x18\u0294\n\x18\f\x18\x0E\x18\u0297\v\x18\x03" + + "\x19\x03\x19\x03\x19\x03\x19\x05\x19\u029D\n\x19\x03\x19\x03\x19\x03\x19" + + "\x07\x19\u02A2\n\x19\f\x19\x0E\x19\u02A5\v\x19\x03\x19\x03\x19\x03\x1A" + + "\x03\x1A\x05\x1A\u02AB\n\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03" + + "\x1B\x03\x1B\x05\x1B\u02B4\n\x1B\x03\x1B\x05\x1B\u02B7\n\x1B\x03\x1C\x03" + + "\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x05\x1C\u02C2" + + "\n\x1C\x03\x1D\x03\x1D\x05\x1D\u02C6\n\x1D\x03\x1E\x03\x1E\x03\x1E\x03" + + "\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x07\x1E\u02D0\n\x1E\f\x1E\x0E\x1E" + + "\u02D3\v\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x05\x1E\u02D9\n\x1E\x03\x1F" + + "\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x06\x1F\u02E0\n\x1F\r\x1F\x0E\x1F\u02E1" + + "\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x05 \u02EB\n \x03!" + + "\x03!\x03\"\x03\"\x03\"\x03\"\x03#\x03#\x05#\u02F5\n#\x03$\x03$\x03$\x07" + + "$\u02FA\n$\f$\x0E$\u02FD\v$\x03%\x03%\x03%\x03%\x03%\x03%\x05%\u0305\n" + + "%\x03&\x03&\x05&\u0309\n&\x03\'\x03\'\x05\'\u030D\n\'\x03(\x03(\x03)\x03" + + ")\x03*\x03*\x03*\x07*\u0316\n*\f*\x0E*\u0319\v*\x03+\x03+\x03+\x03+\x05" + + "+\u031F\n+\x03,\x03,\x03,\x02\x02\x04&.-\x02\x02\x04\x02\x06\x02\b\x02" + + "\n\x02\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C" + + "\x02\x1E\x02 \x02\"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026" + + "\x028\x02:\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02" + + "R\x02T\x02V\x02\x02\n\x03\x0257\x03\x0234\x03\x028=\x04\x02-1AB\x03\x02" + + "-0\x05\x02!!-03=\x03\x02*,\x03\x02CD\x02\u0385\x02Y\x03\x02\x02\x02\x04" + + "b\x03\x02\x02\x02\x06s\x03\x02\x02\x02\b\x8C\x03\x02\x02\x02\n\xBE\x03" + + "\x02\x02\x02\f\xCC\x03\x02\x02\x02\x0E\xCE\x03\x02\x02\x02\x10\xDC\x03" + + "\x02\x02\x02\x12\xE6\x03\x02\x02\x02\x14\xED\x03\x02\x02\x02\x16\u0101" + + "\x03\x02\x02\x02\x18\u0115\x03\x02\x02\x02\x1A\u0122\x03\x02\x02\x02\x1C" + + "\u0152\x03\x02\x02\x02\x1E\u0154\x03\x02\x02\x02 \u0156\x03\x02\x02\x02" + + "\"\u0158\x03\x02\x02\x02$\u015A\x03\x02\x02\x02&\u01A2\x03\x02\x02\x02" + + "(\u01AF\x03\x02\x02\x02*\u01C6\x03\x02\x02\x02,\u01C8\x03\x02\x02\x02" + + ".\u0262\x03\x02\x02\x020\u0298\x03\x02\x02\x022\u02AA\x03\x02\x02\x02" + + "4\u02AF\x03\x02\x02\x026\u02C1\x03\x02\x02\x028\u02C5\x03\x02\x02\x02" + + ":\u02D8\x03\x02\x02\x02<\u02DA\x03\x02\x02\x02>\u02EA\x03\x02\x02\x02" + + "@\u02EC\x03\x02\x02\x02B\u02EE\x03\x02\x02\x02D\u02F4\x03\x02\x02\x02" + + "F\u02F6\x03\x02\x02\x02H\u0304\x03\x02\x02\x02J\u0308\x03\x02\x02\x02" + + "L\u030C\x03\x02\x02\x02N\u030E\x03\x02\x02\x02P\u0310\x03\x02\x02\x02" + + "R\u0312\x03\x02\x02\x02T\u031E\x03\x02\x02\x02V\u0320\x03\x02\x02\x02" + + "XZ\x05\x04\x03\x02YX\x03\x02\x02\x02Z[\x03\x02\x02\x02[Y\x03\x02\x02\x02" + + "[\\\x03\x02\x02\x02\\]\x03\x02\x02\x02]^\x07\x02\x02\x03^\x03\x03\x02" + + "\x02\x02_a\x07E\x02\x02`_\x03\x02\x02\x02ad\x03\x02\x02\x02b`\x03\x02" + + "\x02\x02bc\x03\x02\x02\x02ce\x03\x02\x02\x02db\x03\x02\x02\x02ef\x07\x03" + + "\x02\x02fg\x05R*\x02gk\x07\x04\x02\x02hj\x05\x06\x04\x02ih\x03\x02\x02" + + "\x02jm\x03\x02\x02\x02ki\x03\x02\x02\x02kl\x03\x02\x02\x02ln\x03\x02\x02" + + "\x02mk\x03\x02\x02\x02no\x07\x05\x02\x02o\x05\x03\x02\x02\x02pr\x07E\x02" + + "\x02qp\x03\x02\x02\x02ru\x03\x02\x02\x02sq\x03\x02\x02\x02st\x03\x02\x02" + + "\x02tv\x03\x02\x02\x02us\x03\x02\x02\x02vw\x05\b\x05\x02w\x07\x03\x02" + + "\x02\x02xy\x07\x06\x02\x02yz\x05R*\x02z{\x07\x07\x02\x02{|\x05&\x14\x02" + + "|\x8D\x03\x02\x02\x02}~\x07\b\x02\x02~\x7F\x05R*\x02\x7F\x80\x07\x07\x02" + + "\x02\x80\x81\x05&\x14\x02\x81\x8D\x03\x02\x02\x02\x82\x83\x07\t\x02\x02" + + "\x83\x84\x05> \x02\x84\x85\x07>\x02\x02\x85\x86\x05.\x18\x02\x86\x8D\x03" + + "\x02\x02\x02\x87\x8D\x05\x1C\x0F\x02\x88\x8D\x05\n\x06\x02\x89\x8D\x05" + + "\f\x07\x02\x8A\x8D\x05\x18\r\x02\x8B\x8D\x05\x1A\x0E\x02\x8Cx\x03\x02" + + "\x02\x02\x8C}\x03\x02\x02\x02\x8C\x82\x03\x02\x02\x02\x8C\x87\x03\x02" + + "\x02\x02\x8C\x88\x03\x02\x02\x02\x8C\x89\x03\x02\x02\x02\x8C\x8A\x03\x02" + + "\x02\x02\x8C\x8B\x03\x02\x02\x02\x8D\t\x03\x02\x02\x02\x8E\x8F\x05\x16" + + "\f\x02\x8F\x90\x05J&\x02\x90\x91\x07?\x02\x02\x91\x96\x05B\"\x02\x92\x93" + + "\x07\n\x02\x02\x93\x95\x05B\"\x02\x94\x92\x03\x02\x02\x02\x95\x98\x03" + + "\x02\x02\x02\x96\x94\x03\x02\x02\x02\x96\x97\x03\x02\x02\x02\x97\x99\x03" + + "\x02\x02\x02\x98\x96\x03\x02\x02\x02\x99\x9A\x07@\x02\x02\x9A\x9B\x07" + + "\x07\x02\x02\x9B\x9E\x05&\x14\x02\x9C\x9D\x07>\x02\x02\x9D\x9F\x05.\x18" + + "\x02\x9E\x9C\x03\x02\x02\x02\x9E\x9F\x03\x02\x02\x02\x9F\xA1\x03\x02\x02" + + "\x02\xA0\xA2\x07\v\x02\x02\xA1\xA0\x03\x02\x02\x02\xA1\xA2\x03\x02\x02" + + "\x02\xA2\xBF\x03\x02\x02\x02\xA3\xA4\x05\x16\f\x02\xA4\xB1\x05J&\x02\xA5" + + "\xAE\x07?\x02\x02\xA6\xAB\x05@!\x02\xA7\xA8\x07\n\x02\x02\xA8\xAA\x05" + + "@!\x02\xA9\xA7\x03\x02\x02\x02\xAA\xAD\x03\x02\x02\x02\xAB\xA9\x03\x02" + + "\x02\x02\xAB\xAC\x03\x02\x02\x02\xAC\xAF\x03\x02\x02\x02\xAD\xAB\x03\x02" + + "\x02\x02\xAE\xA6\x03\x02\x02\x02\xAE\xAF\x03\x02\x02\x02\xAF\xB0\x03\x02" + + "\x02\x02\xB0\xB2\x07@\x02\x02\xB1\xA5\x03\x02\x02\x02\xB1\xB2\x03\x02" + + "\x02\x02\xB2\xB5\x03\x02\x02\x02\xB3\xB4\x07\x07\x02\x02\xB4\xB6\x05&" + + "\x14\x02\xB5\xB3\x03\x02\x02\x02\xB5\xB6\x03\x02\x02\x02\xB6\xB9\x03\x02" + + "\x02\x02\xB7\xB8\x07>\x02\x02\xB8\xBA\x05.\x18\x02\xB9\xB7\x03\x02\x02" + + "\x02\xB9\xBA\x03\x02\x02\x02\xBA\xBC\x03\x02\x02\x02\xBB\xBD\x07\v\x02" + + "\x02\xBC\xBB\x03\x02\x02\x02\xBC\xBD\x03\x02\x02\x02\xBD\xBF\x03\x02\x02" + + "\x02\xBE\x8E\x03\x02\x02\x02\xBE\xA3\x03\x02\x02\x02\xBF\v\x03\x02\x02" + + "\x02\xC0\xC1\x07\f\x02\x02\xC1\xCD\x05R*\x02\xC2\xC3\x07\f\x02\x02\xC3" + + "\xC4\x05\x0E\b\x02\xC4\xC5\x07>\x02\x02\xC5\xC6\x05&\x14\x02\xC6\xCD\x03" + + "\x02\x02\x02\xC7\xC8\x07\f\x02\x02\xC8\xC9\x05\x0E\b\x02\xC9\xCA\x07>" + + "\x02\x02\xCA\xCB\x05\x10\t\x02\xCB\xCD\x03\x02\x02\x02\xCC\xC0\x03\x02" + + "\x02\x02\xCC\xC2\x03\x02\x02\x02\xCC\xC7\x03\x02\x02\x02\xCD\r\x03\x02" + + "\x02\x02\xCE\xD9\x05R*\x02\xCF\xD0\x07\r\x02\x02\xD0\xD5\x07C\x02\x02" + + "\xD1\xD2\x07\n\x02\x02\xD2\xD4\x07C\x02\x02\xD3\xD1\x03\x02\x02\x02\xD4" + + "\xD7\x03\x02\x02\x02\xD5\xD3\x03\x02\x02\x02\xD5\xD6\x03\x02\x02\x02\xD6" + + "\xD8\x03\x02\x02\x02\xD7\xD5\x03\x02\x02\x02\xD8\xDA\x07\x0E\x02\x02\xD9" + + "\xCF\x03\x02\x02\x02\xD9\xDA\x03\x02\x02\x02\xDA\x0F\x03\x02\x02\x02\xDB" + + "\xDD\x07\x0F\x02\x02\xDC\xDB\x03\x02\x02\x02\xDC\xDD\x03\x02\x02\x02\xDD" + + "\xDE\x03\x02\x02\x02\xDE\xE3\x05\x12\n\x02\xDF\xE0\x07\x0F\x02\x02\xE0" + + "\xE2\x05\x12\n\x02\xE1\xDF\x03\x02\x02\x02\xE2\xE5\x03\x02\x02\x02\xE3" + + "\xE1\x03\x02\x02\x02\xE3\xE4\x03\x02\x02\x02\xE4\x11\x03\x02\x02\x02\xE5" + + "\xE3\x03\x02\x02\x02\xE6\xEB\x05T+\x02\xE7\xE8\x07?\x02\x02\xE8\xE9\x05" + + "&\x14\x02\xE9\xEA\x07@\x02\x02\xEA\xEC\x03\x02\x02\x02\xEB\xE7\x03\x02" + + "\x02\x02\xEB\xEC\x03\x02\x02\x02\xEC\x13\x03\x02\x02\x02\xED\xEE\x07\x10" + + "\x02\x02\xEE\xF1\x05R*\x02\xEF\xF0\x07\x07\x02\x02\xF0\xF2\x05&\x14\x02" + + "\xF1\xEF\x03\x02\x02\x02\xF1\xF2\x03\x02\x02\x02\xF2\xF3\x03\x02\x02\x02" + + "\xF3\xF4\x07>\x02\x02\xF4\xF6\x05.\x18\x02\xF5\xF7\x07\v\x02\x02\xF6\xF5" + + "\x03\x02\x02\x02\xF6\xF7\x03\x02\x02\x02\xF7\x15\x03\x02\x02\x02\xF8\u0102" + + "\x07\x11\x02\x02\xF9\u0102\x07\x12\x02\x02\xFA\xFB\x07\x13\x02\x02\xFB" + + "\u0102\x07\x11\x02\x02\xFC\xFD\x07\x13\x02\x02\xFD\u0102\x07\x12\x02\x02" + + "\xFE\u0102\x07\x14\x02\x02\xFF\u0102\x07\x15\x02\x02\u0100\u0102\x07\x16" + + "\x02\x02\u0101\xF8\x03\x02\x02\x02\u0101\xF9\x03\x02\x02\x02\u0101\xFA" + + "\x03\x02\x02\x02\u0101\xFC\x03\x02\x02\x02\u0101\xFE\x03\x02\x02\x02\u0101" + + "\xFF\x03\x02\x02\x02\u0101\u0100\x03\x02\x02\x02\u0102\x17\x03\x02\x02" + + "\x02\u0103\u0104\x07\x17\x02\x02\u0104\u0105\x05 \x11\x02\u0105\u0106" + + "\x07\x18\x02\x02\u0106\u0109\x05D#\x02\u0107\u0108\x07\x19\x02\x02\u0108" + + "\u010A\x05$\x13\x02\u0109\u0107\x03\x02\x02\x02\u0109\u010A\x03\x02\x02" + + "\x02\u010A\u0116\x03\x02\x02\x02\u010B\u010C\x07\x17\x02\x02\u010C\u010F" + + "\x05 \x11\x02\u010D\u010E\x07\x1A\x02\x02\u010E\u0110\x05 \x11\x02\u010F" + + "\u010D\x03\x02\x02\x02\u010F\u0110\x03\x02\x02\x02\u0110\u0113\x03\x02" + + "\x02\x02\u0111\u0112\x07\x19\x02\x02\u0112\u0114\x05$\x13\x02\u0113\u0111" + + "\x03\x02\x02\x02\u0113\u0114\x03\x02\x02\x02\u0114\u0116\x03\x02\x02\x02" + + "\u0115\u0103\x03\x02\x02\x02\u0115\u010B\x03\x02\x02\x02\u0116\x19\x03" + + "\x02\x02\x02\u0117\u0118\x07\x1B\x02\x02\u0118\u0119\x05 \x11\x02\u0119" + + "\u011A\x07\x18\x02\x02\u011A\u011B\x05D#\x02\u011B\u0123\x03\x02\x02\x02" + + "\u011C\u011D\x07\x1B\x02\x02\u011D\u0120\x05 \x11\x02\u011E\u011F\x07" + + "\x1A\x02\x02\u011F\u0121\x05 \x11\x02\u0120\u011E\x03\x02\x02\x02\u0120" + + "\u0121\x03\x02\x02\x02\u0121\u0123\x03\x02\x02\x02\u0122\u0117\x03\x02" + + "\x02\x02\u0122\u011C\x03\x02\x02\x02\u0123\x1B\x03\x02\x02\x02\u0124\u0125" + + "\x07\x17\x02\x02\u0125\u0126\x05\x1E\x10\x02\u0126\u0127\x07?\x02\x02" + + "\u0127\u0128\x05 \x11\x02\u0128\u0129\x07>\x02\x02\u0129\u0131\x05.\x18" + + "\x02\u012A\u012B\x07\n\x02\x02\u012B\u012C\x05 \x11\x02\u012C\u012D\x07" + + ">\x02\x02\u012D\u012E\x05.\x18\x02\u012E\u0130\x03\x02\x02\x02\u012F\u012A" + + "\x03\x02\x02\x02\u0130\u0133\x03\x02\x02\x02\u0131\u012F\x03\x02\x02\x02" + + "\u0131\u0132\x03\x02\x02\x02\u0132\u0134\x03\x02\x02\x02\u0133\u0131\x03" + + "\x02\x02\x02\u0134\u0135\x07@\x02\x02\u0135\u0136\x07\x18\x02\x02\u0136" + + "\u0139\x075\x02\x02\u0137\u0138\x07\x19\x02\x02\u0138\u013A\x05$\x13\x02" + + "\u0139\u0137\x03\x02\x02\x02\u0139\u013A\x03\x02\x02\x02\u013A\u0153\x03" + + "\x02\x02\x02\u013B\u013C\x07\x17\x02\x02\u013C\u013D\x05\x1E\x10\x02\u013D" + "\u013E\x07?\x02\x02\u013E\u013F\x05 \x11\x02\u013F\u0140\x07>\x02\x02" + "\u0140\u0148\x05.\x18\x02\u0141\u0142\x07\n\x02\x02\u0142\u0143\x05 \x11" + "\x02\u0143\u0144\x07>\x02\x02\u0144\u0145\x05.\x18\x02\u0145\u0147\x03" + @@ -3916,168 +3928,169 @@ export class QuintParser extends Parser { "\u01C7\x03\x02\x02\x02\u01C4\u01C5\x07\x0F\x02\x02\u01C5\u01C7\x05V,\x02" + "\u01C6\u01B1\x03\x02\x02\x02\u01C6\u01C4\x03\x02\x02\x02\u01C7+\x03\x02" + "\x02\x02\u01C8\u01C9\x05T+\x02\u01C9-\x03\x02\x02\x02\u01CA\u01CB\b\x18" + - "\x01\x02\u01CB\u0261\x058\x1D\x02\u01CC\u01CD\x05J&\x02\u01CD\u01CF\x07" + + "\x01\x02\u01CB\u0263\x058\x1D\x02\u01CC\u01CD\x05J&\x02\u01CD\u01CF\x07" + "?\x02\x02\u01CE\u01D0\x05F$\x02\u01CF\u01CE\x03\x02\x02\x02\u01CF\u01D0" + "\x03\x02\x02\x02\u01D0\u01D1\x03\x02\x02\x02\u01D1\u01D2\x07@\x02\x02" + - "\u01D2\u0261\x03\x02\x02\x02\u01D3\u01D4\x074\x02\x02\u01D4\u0261\x05" + - ".\x18\x1B\u01D5\u01D6\x05R*\x02\u01D6\u01D7\x07\"\x02\x02\u01D7\u01D8" + - "\x07>\x02\x02\u01D8\u01D9\x05.\x18\x17\u01D9\u0261\x03\x02\x02\x02\u01DA" + + "\u01D2\u0263\x03\x02\x02\x02\u01D3\u01D4\x074\x02\x02\u01D4\u0263\x05" + + ".\x18\x1C\u01D5\u01D6\x05R*\x02\u01D6\u01D7\x07\"\x02\x02\u01D7\u01D8" + + "\x07>\x02\x02\u01D8\u01D9\x05.\x18\x18\u01D9\u0263\x03\x02\x02\x02\u01DA" + "\u01DB\x07-\x02\x02\u01DB\u01DC\x07\x04\x02\x02\u01DC\u01E1\x05.\x18\x02" + "\u01DD\u01DE\x07\n\x02\x02\u01DE\u01E0\x05.\x18\x02\u01DF\u01DD\x03\x02" + "\x02\x02\u01E0\u01E3\x03\x02\x02\x02\u01E1\u01DF\x03\x02\x02\x02\u01E1" + "\u01E2\x03\x02\x02\x02\u01E2\u01E5\x03\x02\x02\x02\u01E3\u01E1\x03\x02" + "\x02\x02\u01E4\u01E6\x07\n\x02\x02\u01E5\u01E4\x03\x02\x02\x02\u01E5\u01E6" + "\x03\x02\x02\x02\u01E6\u01E7\x03\x02\x02\x02\u01E7\u01E8\x07\x05\x02\x02" + - "\u01E8\u0261\x03\x02\x02\x02\u01E9\u01EA\x07.\x02\x02\u01EA\u01EB\x07" + + "\u01E8\u0263\x03\x02\x02\x02\u01E9\u01EA\x07.\x02\x02\u01EA\u01EB\x07" + "\x04\x02\x02\u01EB\u01F0\x05.\x18\x02\u01EC\u01ED\x07\n\x02\x02\u01ED" + - "\u01EF\x05.\x18\x02\u01EE\u01EC\x03\x02"; + "\u01EF\x05.\x18\x02"; private static readonly _serializedATNSegment1: string = - "\x02\x02\u01EF\u01F2\x03\x02\x02\x02\u01F0\u01EE\x03\x02\x02\x02\u01F0" + - "\u01F1\x03\x02\x02\x02\u01F1\u01F4\x03\x02\x02\x02\u01F2\u01F0\x03\x02" + - "\x02\x02\u01F3\u01F5\x07\n\x02\x02\u01F4\u01F3\x03\x02\x02\x02\u01F4\u01F5" + - "\x03\x02\x02\x02\u01F5\u01F6\x03\x02\x02\x02\u01F6\u01F7\x07\x05\x02\x02" + - "\u01F7\u0261\x03\x02\x02\x02\u01F8\u0261\x050\x19\x02\u01F9\u01FA\x07" + - "#\x02\x02\u01FA\u01FB\x07\x04\x02\x02\u01FB\u0200\x05.\x18\x02\u01FC\u01FD" + - "\x07\n\x02\x02\u01FD\u01FF\x05.\x18\x02\u01FE\u01FC\x03\x02\x02\x02\u01FF" + - "\u0202\x03\x02\x02\x02\u0200\u01FE\x03\x02\x02\x02\u0200\u0201\x03\x02" + - "\x02\x02\u0201\u0204\x03\x02\x02\x02\u0202\u0200\x03\x02\x02\x02\u0203" + - "\u0205\x07\n\x02\x02\u0204\u0203\x03\x02\x02\x02\u0204\u0205\x03\x02\x02" + - "\x02\u0205\u0206\x03\x02\x02\x02\u0206\u0207\x07\x05\x02\x02\u0207\u0261" + - "\x03\x02\x02\x02\u0208\u0209\x07$\x02\x02\u0209\u020A\x07\x04\x02\x02" + - "\u020A\u020F\x05.\x18\x02\u020B\u020C\x07\n\x02\x02\u020C\u020E\x05.\x18" + - "\x02\u020D\u020B\x03\x02\x02\x02\u020E\u0211\x03\x02\x02\x02\u020F\u020D" + - "\x03\x02\x02\x02\u020F\u0210\x03\x02\x02\x02\u0210\u0213\x03\x02\x02\x02" + - "\u0211\u020F\x03\x02\x02\x02\u0212\u0214\x07\n\x02\x02\u0213\u0212\x03" + - "\x02\x02\x02\u0213\u0214\x03\x02\x02\x02\u0214\u0215\x03\x02\x02\x02\u0215" + - "\u0216\x07\x05\x02\x02\u0216\u0261\x03\x02\x02\x02\u0217\u021C\x05R*\x02" + - "\u0218\u021C\x07,\x02\x02\u0219\u021C\x07+\x02\x02\u021A\u021C\x07*\x02" + - "\x02\u021B\u0217\x03\x02\x02\x02\u021B\u0218\x03\x02\x02\x02\u021B\u0219" + - "\x03\x02\x02\x02\u021B\u021A\x03\x02\x02\x02\u021C\u0261\x03\x02\x02\x02" + - "\u021D\u021E\x07?\x02\x02\u021E\u021F\x05.\x18\x02\u021F\u0220\x07\n\x02" + - "\x02\u0220\u0225\x05.\x18\x02\u0221\u0222\x07\n\x02\x02\u0222\u0224\x05" + - ".\x18\x02\u0223\u0221\x03\x02\x02\x02\u0224\u0227\x03\x02\x02\x02\u0225" + - "\u0223\x03\x02\x02\x02\u0225\u0226\x03\x02\x02\x02\u0226\u0229\x03\x02" + - "\x02\x02\u0227\u0225\x03\x02\x02\x02\u0228\u022A\x07\n\x02\x02\u0229\u0228" + - "\x03\x02\x02\x02\u0229\u022A\x03\x02\x02\x02\u022A\u022B\x03\x02\x02\x02" + - "\u022B\u022C\x07@\x02\x02\u022C\u0261\x03\x02\x02\x02\u022D\u022E\x07" + - "\x04\x02\x02\u022E\u0233\x05H%\x02\u022F\u0230\x07\n\x02\x02\u0230\u0232" + - "\x05H%\x02\u0231\u022F\x03\x02\x02\x02\u0232\u0235\x03\x02\x02\x02\u0233" + - "\u0231\x03\x02\x02\x02\u0233\u0234\x03\x02\x02\x02\u0234\u0237\x03\x02" + - "\x02\x02\u0235\u0233\x03\x02\x02\x02\u0236\u0238\x07\n\x02\x02\u0237\u0236" + - "\x03\x02\x02\x02\u0237\u0238\x03\x02\x02\x02\u0238\u0239\x03\x02\x02\x02" + - "\u0239\u023A\x07\x05\x02\x02\u023A\u0261\x03\x02\x02\x02\u023B\u0244\x07" + - "\r\x02\x02\u023C\u0241\x05.\x18\x02\u023D\u023E\x07\n\x02\x02\u023E\u0240" + - "\x05.\x18\x02\u023F\u023D\x03\x02\x02\x02\u0240\u0243\x03\x02\x02\x02" + - "\u0241\u023F\x03\x02\x02\x02\u0241\u0242\x03\x02\x02\x02\u0242\u0245\x03" + - "\x02\x02\x02\u0243\u0241\x03\x02\x02\x02\u0244\u023C\x03\x02\x02\x02\u0244" + - "\u0245\x03\x02\x02\x02\u0245\u0247\x03\x02\x02\x02\u0246\u0248\x07\n\x02" + - "\x02\u0247\u0246\x03\x02\x02\x02\u0247\u0248\x03\x02\x02\x02\u0248\u0249" + - "\x03\x02\x02\x02\u0249\u0261\x07\x0E\x02\x02\u024A\u024B\x07%\x02\x02" + - "\u024B\u024C\x07?\x02\x02\u024C\u024D\x05.\x18\x02\u024D\u024E\x07@\x02" + - "\x02\u024E\u024F\x05.\x18\x02\u024F\u0250\x07&\x02\x02\u0250\u0251\x05" + - ".\x18\x07\u0251\u0261\x03\x02\x02\x02\u0252\u0253\x05\n\x06\x02\u0253" + - "\u0254\x05.\x18\x06\u0254\u0261\x03\x02\x02\x02\u0255\u0256\x05\x14\v" + - "\x02\u0256\u0257\x05.\x18\x05\u0257\u0261\x03\x02\x02\x02\u0258\u0259" + - "\x07?\x02\x02\u0259\u025A\x05.\x18\x02\u025A\u025B\x07@\x02\x02\u025B" + - "\u0261\x03\x02\x02\x02\u025C\u025D\x07\x04\x02\x02\u025D\u025E\x05.\x18" + - "\x02\u025E\u025F\x07\x05\x02\x02\u025F\u0261\x03\x02\x02\x02\u0260\u01CA" + - "\x03\x02\x02\x02\u0260\u01CC\x03\x02\x02\x02\u0260\u01D3\x03\x02\x02\x02" + - "\u0260\u01D5\x03\x02\x02\x02\u0260\u01DA\x03\x02\x02\x02\u0260\u01E9\x03" + - "\x02\x02\x02\u0260\u01F8\x03\x02\x02\x02\u0260\u01F9\x03\x02\x02\x02\u0260" + - "\u0208\x03\x02\x02\x02\u0260\u021B\x03\x02\x02\x02\u0260\u021D\x03\x02" + - "\x02\x02\u0260\u022D\x03\x02\x02\x02\u0260\u023B\x03\x02\x02\x02\u0260" + - "\u024A\x03\x02\x02\x02\u0260\u0252\x03\x02\x02\x02\u0260\u0255\x03\x02" + - "\x02\x02\u0260\u0258\x03\x02\x02\x02\u0260\u025C\x03\x02\x02\x02\u0261" + - "\u0293\x03\x02\x02\x02\u0262\u0263\f\x1C\x02\x02\u0263\u0264\x07!\x02" + - "\x02\u0264\u0292\x05.\x18\x1C\u0265\u0266\f\x1A\x02\x02\u0266\u0267\t" + - "\x02\x02\x02\u0267\u0292\x05.\x18\x1B\u0268\u0269\f\x19\x02\x02\u0269" + - "\u026A\t\x03\x02\x02\u026A\u0292\x05.\x18\x1A\u026B\u026C\f\x18\x02\x02" + - "\u026C\u026D\t\x04\x02\x02\u026D\u0292\x05.\x18\x19\u026E\u026F\f\x16" + - "\x02\x02\u026F\u0270\x07>\x02\x02\u0270\u0271\x05.\x18\x17\u0271\u0272" + - "\b\x18\x01\x02\u0272\u0292\x03\x02\x02\x02\u0273\u0274\f\x14\x02\x02\u0274" + - "\u0275\x07-\x02\x02\u0275\u0292\x05.\x18\x15\u0276\u0277\f\x12\x02\x02" + - "\u0277\u0278\x07.\x02\x02\u0278\u0292\x05.\x18\x13\u0279\u027A\f\x11\x02" + - "\x02\u027A\u027B\x07/\x02\x02\u027B\u0292\x05.\x18\x12\u027C\u027D\f\x10" + - "\x02\x02\u027D\u027E\x070\x02\x02\u027E\u0292\x05.\x18\x11\u027F\u0280" + - "\f\n\x02\x02\u0280\u0281\x07\x1C\x02\x02\u0281\u0292\x05.\x18\v\u0282" + - "\u0283\f \x02\x02\u0283\u0284\x07\x18\x02\x02\u0284\u028A\x05L\'\x02\u0285" + - "\u0287\x07?\x02\x02\u0286\u0288\x05F$\x02\u0287\u0286\x03\x02\x02\x02" + - "\u0287\u0288\x03\x02\x02\x02\u0288\u0289\x03\x02\x02\x02\u0289\u028B\x07" + - "@\x02\x02\u028A\u0285\x03\x02\x02\x02\u028A\u028B\x03\x02\x02\x02\u028B" + - "\u0292\x03\x02\x02\x02\u028C\u028D\f\x1D\x02\x02\u028D\u028E\x07\r\x02" + - "\x02\u028E\u028F\x05.\x18\x02\u028F\u0290\x07\x0E\x02\x02\u0290\u0292" + - "\x03\x02\x02\x02\u0291\u0262\x03\x02\x02\x02\u0291\u0265\x03\x02\x02\x02" + - "\u0291\u0268\x03\x02\x02\x02\u0291\u026B\x03\x02\x02\x02\u0291\u026E\x03" + - "\x02\x02\x02\u0291\u0273\x03\x02\x02\x02\u0291\u0276\x03\x02\x02\x02\u0291" + - "\u0279\x03\x02\x02\x02\u0291\u027C\x03\x02\x02\x02\u0291\u027F\x03\x02" + - "\x02\x02\u0291\u0282\x03\x02\x02\x02\u0291\u028C\x03\x02\x02\x02\u0292" + - "\u0295\x03\x02\x02\x02\u0293\u0291\x03\x02\x02\x02\u0293\u0294\x03\x02" + - "\x02\x02\u0294/\x03\x02\x02\x02\u0295\u0293\x03\x02\x02\x02\u0296\u0297" + - "\x072\x02\x02\u0297\u0298\x05.\x18\x02\u0298\u029A\x07\x04\x02\x02\u0299" + - "\u029B\x07\x0F\x02\x02\u029A\u0299\x03\x02\x02\x02\u029A\u029B\x03\x02" + - "\x02\x02\u029B\u029C\x03\x02\x02\x02\u029C\u02A1\x052\x1A\x02\u029D\u029E" + - "\x07\x0F\x02\x02\u029E\u02A0\x052\x1A\x02\u029F\u029D\x03\x02\x02\x02" + - "\u02A0\u02A3\x03\x02\x02\x02\u02A1\u029F\x03\x02\x02\x02\u02A1\u02A2\x03" + - "\x02\x02\x02\u02A2\u02A4\x03\x02\x02\x02\u02A3\u02A1\x03\x02\x02\x02\u02A4" + - "\u02A5\x07\x05\x02\x02\u02A51\x03\x02\x02\x02\u02A6\u02A9\x054\x1B\x02" + - "\u02A7\u02A9\x07\'\x02\x02\u02A8\u02A6\x03\x02\x02\x02\u02A8\u02A7\x03" + - "\x02\x02\x02\u02A9\u02AA\x03\x02\x02\x02\u02AA\u02AB\x07\x1D\x02\x02\u02AB" + - "\u02AC\x05.\x18\x02\u02AC3\x03\x02\x02\x02\u02AD\u02B4\x05T+\x02\u02AE" + - "\u02B1\x07?\x02\x02\u02AF\u02B2\x05T+\x02\u02B0\u02B2\x07\'\x02\x02\u02B1" + - "\u02AF\x03\x02\x02\x02\u02B1\u02B0\x03\x02\x02\x02\u02B2\u02B3\x03\x02" + - "\x02\x02\u02B3\u02B5\x07@\x02\x02\u02B4\u02AE\x03\x02\x02\x02\u02B4\u02B5" + - "\x03\x02\x02\x02\u02B55\x03\x02\x02\x02\u02B6\u02B7\x05\b\x05\x02\u02B7" + - "\u02B8\x07\x02\x02\x03\u02B8\u02C0\x03\x02\x02\x02\u02B9\u02BA\x05.\x18" + - "\x02\u02BA\u02BB\x07\x02\x02\x03\u02BB\u02C0\x03\x02\x02\x02\u02BC\u02BD" + - "\x07E\x02\x02\u02BD\u02C0\x07\x02\x02\x03\u02BE\u02C0\x07\x02\x02\x03" + - "\u02BF\u02B6\x03\x02\x02\x02\u02BF\u02B9\x03\x02\x02\x02\u02BF\u02BC\x03" + - "\x02\x02\x02\u02BF\u02BE\x03\x02\x02\x02\u02C07\x03\x02\x02\x02\u02C1" + - "\u02C4\x05:\x1E\x02\u02C2\u02C4\x05<\x1F\x02\u02C3\u02C1\x03\x02\x02\x02" + - "\u02C3\u02C2\x03\x02\x02\x02\u02C49\x03\x02\x02\x02\u02C5\u02C6\x05@!" + - "\x02\u02C6\u02C7\x07\x1D\x02\x02\u02C7\u02C8\x05.\x18\x02\u02C8\u02D7" + - "\x03\x02\x02\x02\u02C9\u02CA\x07?\x02\x02\u02CA\u02CF\x05@!\x02\u02CB" + - "\u02CC\x07\n\x02\x02\u02CC\u02CE\x05@!\x02\u02CD\u02CB\x03\x02\x02\x02" + - "\u02CE\u02D1\x03\x02\x02\x02\u02CF\u02CD\x03\x02\x02\x02\u02CF\u02D0\x03" + - "\x02\x02\x02\u02D0\u02D2\x03\x02\x02\x02\u02D1\u02CF\x03\x02\x02\x02\u02D2" + - "\u02D3\x07@\x02\x02\u02D3\u02D4\x07\x1D\x02\x02\u02D4\u02D5\x05.\x18\x02" + - "\u02D5\u02D7\x03\x02\x02\x02\u02D6\u02C5\x03\x02\x02\x02\u02D6\u02C9\x03" + - "\x02\x02\x02\u02D7;\x03\x02\x02\x02\u02D8\u02D9\x07?\x02\x02\u02D9\u02DA" + - "\x07?\x02\x02\u02DA\u02DD\x05@!\x02\u02DB\u02DC\x07\n\x02\x02\u02DC\u02DE" + - "\x05@!\x02\u02DD\u02DB\x03\x02\x02\x02\u02DE\u02DF\x03\x02\x02\x02\u02DF" + - "\u02DD\x03\x02\x02\x02\u02DF\u02E0\x03\x02\x02\x02\u02E0\u02E1\x03\x02" + - "\x02\x02\u02E1\u02E2\x07@\x02\x02\u02E2\u02E3\x07@\x02\x02\u02E3\u02E4" + - "\x07\x1D\x02\x02\u02E4\u02E5\x05.\x18\x02\u02E5=\x03\x02\x02\x02\u02E6" + - "\u02E9\x07\'\x02\x02\u02E7\u02E9\x05R*\x02\u02E8\u02E6\x03\x02\x02\x02" + - "\u02E8\u02E7\x03\x02\x02\x02\u02E9?\x03\x02\x02\x02\u02EA\u02EB\x05> " + - "\x02\u02EBA\x03\x02\x02\x02\u02EC\u02ED\x05> \x02\u02ED\u02EE\x07\x07" + - "\x02\x02\u02EE\u02EF\x05&\x14\x02\u02EFC\x03\x02\x02\x02\u02F0\u02F3\x07" + - "5\x02\x02\u02F1\u02F3\x05R*\x02\u02F2\u02F0\x03\x02\x02\x02\u02F2\u02F1" + - "\x03\x02\x02\x02\u02F3E\x03\x02\x02\x02\u02F4\u02F9\x05.\x18\x02\u02F5" + - "\u02F6\x07\n\x02\x02\u02F6\u02F8\x05.\x18\x02\u02F7\u02F5\x03\x02\x02" + - "\x02\u02F8\u02FB\x03\x02\x02\x02\u02F9\u02F7\x03\x02\x02\x02\u02F9\u02FA" + - "\x03\x02\x02\x02\u02FAG\x03\x02\x02\x02\u02FB\u02F9\x03\x02\x02\x02\u02FC" + - "\u02FD\x05T+\x02\u02FD\u02FE\x07\x07\x02\x02\u02FE\u02FF\x05.\x18\x02" + - "\u02FF\u0303\x03\x02\x02\x02\u0300\u0301\x07(\x02\x02\u0301\u0303\x05" + - ".\x18\x02\u0302\u02FC\x03\x02\x02\x02\u0302\u0300\x03\x02\x02\x02\u0303" + - "I\x03\x02\x02\x02\u0304\u0307\x05R*\x02\u0305\u0307\t\x05\x02\x02\u0306" + - "\u0304\x03\x02\x02\x02\u0306\u0305\x03\x02\x02\x02\u0307K\x03\x02\x02" + - "\x02\u0308\u030B\x05R*\x02\u0309\u030B\t\x06\x02\x02\u030A\u0308\x03\x02" + - "\x02\x02\u030A\u0309\x03\x02\x02\x02\u030BM\x03\x02\x02\x02\u030C\u030D" + - "\t\x07\x02\x02\u030DO\x03\x02\x02\x02\u030E\u030F\t\b\x02\x02\u030FQ\x03" + - "\x02\x02\x02\u0310\u0315\x05V,\x02\u0311\u0312\x07)\x02\x02\u0312\u0314" + - "\x05V,\x02\u0313\u0311\x03\x02\x02\x02\u0314\u0317\x03\x02\x02\x02\u0315" + - "\u0313\x03\x02\x02\x02\u0315\u0316\x03\x02\x02\x02\u0316S\x03\x02\x02" + - "\x02\u0317\u0315\x03\x02\x02\x02\u0318\u031D\x05V,\x02\u0319\u031A\x05" + - "R*\x02\u031A\u031B\b+\x01\x02\u031B\u031D\x03\x02\x02\x02\u031C\u0318" + - "\x03\x02\x02\x02\u031C\u0319\x03\x02\x02\x02\u031DU\x03\x02\x02\x02\u031E" + - "\u031F\t\t\x02\x02\u031FW\x03\x02\x02\x02Z[bks\x8C\x96\x9E\xA1\xAB\xAE" + - "\xB1\xB5\xB9\xBC\xBE\xCC\xD5\xD9\xDC\xE3\xEB\xF1\xF6\u0101\u0109\u010F" + - "\u0113\u0115\u0120\u0122\u0131\u0139\u0148\u0150\u0152\u0163\u0166\u0169" + - "\u0180\u0184\u018A\u019D\u01A2\u01AA\u01AC\u01BC\u01C2\u01C6\u01CF\u01E1" + - "\u01E5\u01F0\u01F4\u0200\u0204\u020F\u0213\u021B\u0225\u0229\u0233\u0237" + - "\u0241\u0244\u0247\u0260\u0287\u028A\u0291\u0293\u029A\u02A1\u02A8\u02B1" + - "\u02B4\u02BF\u02C3\u02CF\u02D6\u02DF\u02E8\u02F2\u02F9\u0302\u0306\u030A" + - "\u0315\u031C"; + "\u01EE\u01EC\x03\x02\x02\x02\u01EF\u01F2\x03\x02\x02\x02\u01F0\u01EE\x03" + + "\x02\x02\x02\u01F0\u01F1\x03\x02\x02\x02\u01F1\u01F4\x03\x02\x02\x02\u01F2" + + "\u01F0\x03\x02\x02\x02\u01F3\u01F5\x07\n\x02\x02\u01F4\u01F3\x03\x02\x02" + + "\x02\u01F4\u01F5\x03\x02\x02\x02\u01F5\u01F6\x03\x02\x02\x02\u01F6\u01F7" + + "\x07\x05\x02\x02\u01F7\u0263\x03\x02\x02\x02\u01F8\u0263\x050\x19\x02" + + "\u01F9\u01FA\x07#\x02\x02\u01FA\u01FB\x07\x04\x02\x02\u01FB\u0200\x05" + + ".\x18\x02\u01FC\u01FD\x07\n\x02\x02\u01FD\u01FF\x05.\x18\x02\u01FE\u01FC" + + "\x03\x02\x02\x02\u01FF\u0202\x03\x02\x02\x02\u0200\u01FE\x03\x02\x02\x02" + + "\u0200\u0201\x03\x02\x02\x02\u0201\u0204\x03\x02\x02\x02\u0202\u0200\x03" + + "\x02\x02\x02\u0203\u0205\x07\n\x02\x02\u0204\u0203\x03\x02\x02\x02\u0204" + + "\u0205\x03\x02\x02\x02\u0205\u0206\x03\x02\x02\x02\u0206\u0207\x07\x05" + + "\x02\x02\u0207\u0263\x03\x02\x02\x02\u0208\u0209\x07$\x02\x02\u0209\u020A" + + "\x07\x04\x02\x02\u020A\u020F\x05.\x18\x02\u020B\u020C\x07\n\x02\x02\u020C" + + "\u020E\x05.\x18\x02\u020D\u020B\x03\x02\x02\x02\u020E\u0211\x03\x02\x02" + + "\x02\u020F\u020D\x03\x02\x02\x02\u020F\u0210\x03\x02\x02\x02\u0210\u0213" + + "\x03\x02\x02\x02\u0211\u020F\x03\x02\x02\x02\u0212\u0214\x07\n\x02\x02" + + "\u0213\u0212\x03\x02\x02\x02\u0213\u0214\x03\x02\x02\x02\u0214\u0215\x03" + + "\x02\x02\x02\u0215\u0216\x07\x05\x02\x02\u0216\u0263\x03\x02\x02\x02\u0217" + + "\u021C\x05R*\x02\u0218\u021C\x07,\x02\x02\u0219\u021C\x07+\x02\x02\u021A" + + "\u021C\x07*\x02\x02\u021B\u0217\x03\x02\x02\x02\u021B\u0218\x03\x02\x02" + + "\x02\u021B\u0219\x03\x02\x02\x02\u021B\u021A\x03\x02\x02\x02\u021C\u0263" + + "\x03\x02\x02\x02\u021D\u021E\x07?\x02\x02\u021E\u021F\x05.\x18\x02\u021F" + + "\u0220\x07\n\x02\x02\u0220\u0225\x05.\x18\x02\u0221\u0222\x07\n\x02\x02" + + "\u0222\u0224\x05.\x18\x02\u0223\u0221\x03\x02\x02\x02\u0224\u0227\x03" + + "\x02\x02\x02\u0225\u0223\x03\x02\x02\x02\u0225\u0226\x03\x02\x02\x02\u0226" + + "\u0229\x03\x02\x02\x02\u0227\u0225\x03\x02\x02\x02\u0228\u022A\x07\n\x02" + + "\x02\u0229\u0228\x03\x02\x02\x02\u0229\u022A\x03\x02\x02\x02\u022A\u022B" + + "\x03\x02\x02\x02\u022B\u022C\x07@\x02\x02\u022C\u0263\x03\x02\x02\x02" + + "\u022D\u022E\x07?\x02\x02\u022E\u0263\x07@\x02\x02\u022F\u0230\x07\x04" + + "\x02\x02\u0230\u0235\x05H%\x02\u0231\u0232\x07\n\x02\x02\u0232\u0234\x05" + + "H%\x02\u0233\u0231\x03\x02\x02\x02\u0234\u0237\x03\x02\x02\x02\u0235\u0233" + + "\x03\x02\x02\x02\u0235\u0236\x03\x02\x02\x02\u0236\u0239\x03\x02\x02\x02" + + "\u0237\u0235\x03\x02\x02\x02\u0238\u023A\x07\n\x02\x02\u0239\u0238\x03" + + "\x02\x02\x02\u0239\u023A\x03\x02\x02\x02\u023A\u023B\x03\x02\x02\x02\u023B" + + "\u023C\x07\x05\x02\x02\u023C\u0263\x03\x02\x02\x02\u023D\u0246\x07\r\x02" + + "\x02\u023E\u0243\x05.\x18\x02\u023F\u0240\x07\n\x02\x02\u0240\u0242\x05" + + ".\x18\x02\u0241\u023F\x03\x02\x02\x02\u0242\u0245\x03\x02\x02\x02\u0243" + + "\u0241\x03\x02\x02\x02\u0243\u0244\x03\x02\x02\x02\u0244\u0247\x03\x02" + + "\x02\x02\u0245\u0243\x03\x02\x02\x02\u0246\u023E\x03\x02\x02\x02\u0246" + + "\u0247\x03\x02\x02\x02\u0247\u0249\x03\x02\x02\x02\u0248\u024A\x07\n\x02" + + "\x02\u0249\u0248\x03\x02\x02\x02\u0249\u024A\x03\x02\x02\x02\u024A\u024B" + + "\x03\x02\x02\x02\u024B\u0263\x07\x0E\x02\x02\u024C\u024D\x07%\x02\x02" + + "\u024D\u024E\x07?\x02\x02\u024E\u024F\x05.\x18\x02\u024F\u0250\x07@\x02" + + "\x02\u0250\u0251\x05.\x18\x02\u0251\u0252\x07&\x02\x02\u0252\u0253\x05" + + ".\x18\x07\u0253\u0263\x03\x02\x02\x02\u0254\u0255\x05\n\x06\x02\u0255" + + "\u0256\x05.\x18\x06\u0256\u0263\x03\x02\x02\x02\u0257\u0258\x05\x14\v" + + "\x02\u0258\u0259\x05.\x18\x05\u0259\u0263\x03\x02\x02\x02\u025A\u025B" + + "\x07?\x02\x02\u025B\u025C\x05.\x18\x02\u025C\u025D\x07@\x02\x02\u025D" + + "\u0263\x03\x02\x02\x02\u025E\u025F\x07\x04\x02\x02\u025F\u0260\x05.\x18" + + "\x02\u0260\u0261\x07\x05\x02\x02\u0261\u0263\x03\x02\x02\x02\u0262\u01CA" + + "\x03\x02\x02\x02\u0262\u01CC\x03\x02\x02\x02\u0262\u01D3\x03\x02\x02\x02" + + "\u0262\u01D5\x03\x02\x02\x02\u0262\u01DA\x03\x02\x02\x02\u0262\u01E9\x03" + + "\x02\x02\x02\u0262\u01F8\x03\x02\x02\x02\u0262\u01F9\x03\x02\x02\x02\u0262" + + "\u0208\x03\x02\x02\x02\u0262\u021B\x03\x02\x02\x02\u0262\u021D\x03\x02" + + "\x02\x02\u0262\u022D\x03\x02\x02\x02\u0262\u022F\x03\x02\x02\x02\u0262" + + "\u023D\x03\x02\x02\x02\u0262\u024C\x03\x02\x02\x02\u0262\u0254\x03\x02" + + "\x02\x02\u0262\u0257\x03\x02\x02\x02\u0262\u025A\x03\x02\x02\x02\u0262" + + "\u025E\x03\x02\x02\x02\u0263\u0295\x03\x02\x02\x02\u0264\u0265\f\x1D\x02" + + "\x02\u0265\u0266\x07!\x02\x02\u0266\u0294\x05.\x18\x1D\u0267\u0268\f\x1B" + + "\x02\x02\u0268\u0269\t\x02\x02\x02\u0269\u0294\x05.\x18\x1C\u026A\u026B" + + "\f\x1A\x02\x02\u026B\u026C\t\x03\x02\x02\u026C\u0294\x05.\x18\x1B\u026D" + + "\u026E\f\x19\x02\x02\u026E\u026F\t\x04\x02\x02\u026F\u0294\x05.\x18\x1A" + + "\u0270\u0271\f\x17\x02\x02\u0271\u0272\x07>\x02\x02\u0272\u0273\x05.\x18" + + "\x18\u0273\u0274\b\x18\x01\x02\u0274\u0294\x03\x02\x02\x02\u0275\u0276" + + "\f\x15\x02\x02\u0276\u0277\x07-\x02\x02\u0277\u0294\x05.\x18\x16\u0278" + + "\u0279\f\x13\x02\x02\u0279\u027A\x07.\x02\x02\u027A\u0294\x05.\x18\x14" + + "\u027B\u027C\f\x12\x02\x02\u027C\u027D\x07/\x02\x02\u027D\u0294\x05.\x18" + + "\x13\u027E\u027F\f\x11\x02\x02\u027F\u0280\x070\x02\x02\u0280\u0294\x05" + + ".\x18\x12\u0281\u0282\f\n\x02\x02\u0282\u0283\x07\x1C\x02\x02\u0283\u0294" + + "\x05.\x18\v\u0284\u0285\f!\x02\x02\u0285\u0286\x07\x18\x02\x02\u0286\u028C" + + "\x05L\'\x02\u0287\u0289\x07?\x02\x02\u0288\u028A\x05F$\x02\u0289\u0288" + + "\x03\x02\x02\x02\u0289\u028A\x03\x02\x02\x02\u028A\u028B\x03\x02\x02\x02" + + "\u028B\u028D\x07@\x02\x02\u028C\u0287\x03\x02\x02\x02\u028C\u028D\x03" + + "\x02\x02\x02\u028D\u0294\x03\x02\x02\x02\u028E\u028F\f\x1E\x02\x02\u028F" + + "\u0290\x07\r\x02\x02\u0290\u0291\x05.\x18\x02\u0291\u0292\x07\x0E\x02" + + "\x02\u0292\u0294\x03\x02\x02\x02\u0293\u0264\x03\x02\x02\x02\u0293\u0267" + + "\x03\x02\x02\x02\u0293\u026A\x03\x02\x02\x02\u0293\u026D\x03\x02\x02\x02" + + "\u0293\u0270\x03\x02\x02\x02\u0293\u0275\x03\x02\x02\x02\u0293\u0278\x03" + + "\x02\x02\x02\u0293\u027B\x03\x02\x02\x02\u0293\u027E\x03\x02\x02\x02\u0293" + + "\u0281\x03\x02\x02\x02\u0293\u0284\x03\x02\x02\x02\u0293\u028E\x03\x02" + + "\x02\x02\u0294\u0297\x03\x02\x02\x02\u0295\u0293\x03\x02\x02\x02\u0295" + + "\u0296\x03\x02\x02\x02\u0296/\x03\x02\x02\x02\u0297\u0295\x03\x02\x02" + + "\x02\u0298\u0299\x072\x02\x02\u0299\u029A\x05.\x18\x02\u029A\u029C\x07" + + "\x04\x02\x02\u029B\u029D\x07\x0F\x02\x02\u029C\u029B\x03\x02\x02\x02\u029C" + + "\u029D\x03\x02\x02\x02\u029D\u029E\x03\x02\x02\x02\u029E\u02A3\x052\x1A" + + "\x02\u029F\u02A0\x07\x0F\x02\x02\u02A0\u02A2\x052\x1A\x02\u02A1\u029F" + + "\x03\x02\x02\x02\u02A2\u02A5\x03\x02\x02\x02\u02A3\u02A1\x03\x02\x02\x02" + + "\u02A3\u02A4\x03\x02\x02\x02\u02A4\u02A6\x03\x02\x02\x02\u02A5\u02A3\x03" + + "\x02\x02\x02\u02A6\u02A7\x07\x05\x02\x02\u02A71\x03\x02\x02\x02\u02A8" + + "\u02AB\x054\x1B\x02\u02A9\u02AB\x07\'\x02\x02\u02AA\u02A8\x03\x02\x02" + + "\x02\u02AA\u02A9\x03\x02\x02\x02\u02AB\u02AC\x03\x02\x02\x02\u02AC\u02AD" + + "\x07\x1D\x02\x02\u02AD\u02AE\x05.\x18\x02\u02AE3\x03\x02\x02\x02\u02AF" + + "\u02B6\x05T+\x02\u02B0\u02B3\x07?\x02\x02\u02B1\u02B4\x05T+\x02\u02B2" + + "\u02B4\x07\'\x02\x02\u02B3\u02B1\x03\x02\x02\x02\u02B3\u02B2\x03\x02\x02" + + "\x02\u02B4\u02B5\x03\x02\x02\x02\u02B5\u02B7\x07@\x02\x02\u02B6\u02B0" + + "\x03\x02\x02\x02\u02B6\u02B7\x03\x02\x02\x02\u02B75\x03\x02\x02\x02\u02B8" + + "\u02B9\x05\b\x05\x02\u02B9\u02BA\x07\x02\x02\x03\u02BA\u02C2\x03\x02\x02" + + "\x02\u02BB\u02BC\x05.\x18\x02\u02BC\u02BD\x07\x02\x02\x03\u02BD\u02C2" + + "\x03\x02\x02\x02\u02BE\u02BF\x07E\x02\x02\u02BF\u02C2\x07\x02\x02\x03" + + "\u02C0\u02C2\x07\x02\x02\x03\u02C1\u02B8\x03\x02\x02\x02\u02C1\u02BB\x03" + + "\x02\x02\x02\u02C1\u02BE\x03\x02\x02\x02\u02C1\u02C0\x03\x02\x02\x02\u02C2" + + "7\x03\x02\x02\x02\u02C3\u02C6\x05:\x1E\x02\u02C4\u02C6\x05<\x1F\x02\u02C5" + + "\u02C3\x03\x02\x02\x02\u02C5\u02C4\x03\x02\x02\x02\u02C69\x03\x02\x02" + + "\x02\u02C7\u02C8\x05@!\x02\u02C8\u02C9\x07\x1D\x02\x02\u02C9\u02CA\x05" + + ".\x18\x02\u02CA\u02D9\x03\x02\x02\x02\u02CB\u02CC\x07?\x02\x02\u02CC\u02D1" + + "\x05@!\x02\u02CD\u02CE\x07\n\x02\x02\u02CE\u02D0\x05@!\x02\u02CF\u02CD" + + "\x03\x02\x02\x02\u02D0\u02D3\x03\x02\x02\x02\u02D1\u02CF\x03\x02\x02\x02" + + "\u02D1\u02D2\x03\x02\x02\x02\u02D2\u02D4\x03\x02\x02\x02\u02D3\u02D1\x03" + + "\x02\x02\x02\u02D4\u02D5\x07@\x02\x02\u02D5\u02D6\x07\x1D\x02\x02\u02D6" + + "\u02D7\x05.\x18\x02\u02D7\u02D9\x03\x02\x02\x02\u02D8\u02C7\x03\x02\x02" + + "\x02\u02D8\u02CB\x03\x02\x02\x02\u02D9;\x03\x02\x02\x02\u02DA\u02DB\x07" + + "?\x02\x02\u02DB\u02DC\x07?\x02\x02\u02DC\u02DF\x05@!\x02\u02DD\u02DE\x07" + + "\n\x02\x02\u02DE\u02E0\x05@!\x02\u02DF\u02DD\x03\x02\x02\x02\u02E0\u02E1" + + "\x03\x02\x02\x02\u02E1\u02DF\x03\x02\x02\x02\u02E1\u02E2\x03\x02\x02\x02" + + "\u02E2\u02E3\x03\x02\x02\x02\u02E3\u02E4\x07@\x02\x02\u02E4\u02E5\x07" + + "@\x02\x02\u02E5\u02E6\x07\x1D\x02\x02\u02E6\u02E7\x05.\x18\x02\u02E7=" + + "\x03\x02\x02\x02\u02E8\u02EB\x07\'\x02\x02\u02E9\u02EB\x05R*\x02\u02EA" + + "\u02E8\x03\x02\x02\x02\u02EA\u02E9\x03\x02\x02\x02\u02EB?\x03\x02\x02" + + "\x02\u02EC\u02ED\x05> \x02\u02EDA\x03\x02\x02\x02\u02EE\u02EF\x05> \x02" + + "\u02EF\u02F0\x07\x07\x02\x02\u02F0\u02F1\x05&\x14\x02\u02F1C\x03\x02\x02" + + "\x02\u02F2\u02F5\x075\x02\x02\u02F3\u02F5\x05R*\x02\u02F4\u02F2\x03\x02" + + "\x02\x02\u02F4\u02F3\x03\x02\x02\x02\u02F5E\x03\x02\x02\x02\u02F6\u02FB" + + "\x05.\x18\x02\u02F7\u02F8\x07\n\x02\x02\u02F8\u02FA\x05.\x18\x02\u02F9" + + "\u02F7\x03\x02\x02\x02\u02FA\u02FD\x03\x02\x02\x02\u02FB\u02F9\x03\x02" + + "\x02\x02\u02FB\u02FC\x03\x02\x02\x02\u02FCG\x03\x02\x02\x02\u02FD\u02FB" + + "\x03\x02\x02\x02\u02FE\u02FF\x05T+\x02\u02FF\u0300\x07\x07\x02\x02\u0300" + + "\u0301\x05.\x18\x02\u0301\u0305\x03\x02\x02\x02\u0302\u0303\x07(\x02\x02" + + "\u0303\u0305\x05.\x18\x02\u0304\u02FE\x03\x02\x02\x02\u0304\u0302\x03" + + "\x02\x02\x02\u0305I\x03\x02\x02\x02\u0306\u0309\x05R*\x02\u0307\u0309" + + "\t\x05\x02\x02\u0308\u0306\x03\x02\x02\x02\u0308\u0307\x03\x02\x02\x02" + + "\u0309K\x03\x02\x02\x02\u030A\u030D\x05R*\x02\u030B\u030D\t\x06\x02\x02" + + "\u030C\u030A\x03\x02\x02\x02\u030C\u030B\x03\x02\x02\x02\u030DM\x03\x02" + + "\x02\x02\u030E\u030F\t\x07\x02\x02\u030FO\x03\x02\x02\x02\u0310\u0311" + + "\t\b\x02\x02\u0311Q\x03\x02\x02\x02\u0312\u0317\x05V,\x02\u0313\u0314" + + "\x07)\x02\x02\u0314\u0316\x05V,\x02\u0315\u0313\x03\x02\x02\x02\u0316" + + "\u0319\x03\x02\x02\x02\u0317\u0315\x03\x02\x02\x02\u0317\u0318\x03\x02" + + "\x02\x02\u0318S\x03\x02\x02\x02\u0319\u0317\x03\x02\x02\x02\u031A\u031F" + + "\x05V,\x02\u031B\u031C\x05R*\x02\u031C\u031D\b+\x01\x02\u031D\u031F\x03" + + "\x02\x02\x02\u031E\u031A\x03\x02\x02\x02\u031E\u031B\x03\x02\x02\x02\u031F" + + "U\x03\x02\x02\x02\u0320\u0321\t\t\x02\x02\u0321W\x03\x02\x02\x02Z[bks" + + "\x8C\x96\x9E\xA1\xAB\xAE\xB1\xB5\xB9\xBC\xBE\xCC\xD5\xD9\xDC\xE3\xEB\xF1" + + "\xF6\u0101\u0109\u010F\u0113\u0115\u0120\u0122\u0131\u0139\u0148\u0150" + + "\u0152\u0163\u0166\u0169\u0180\u0184\u018A\u019D\u01A2\u01AA\u01AC\u01BC" + + "\u01C2\u01C6\u01CF\u01E1\u01E5\u01F0\u01F4\u0200\u0204\u020F\u0213\u021B" + + "\u0225\u0229\u0235\u0239\u0243\u0246\u0249\u0262\u0289\u028C\u0293\u0295" + + "\u029C\u02A3\u02AA\u02B3\u02B6\u02C1\u02C5\u02D1\u02D8\u02E1\u02EA\u02F4" + + "\u02FB\u0304\u0308\u030C\u0317\u031E"; public static readonly _serializedATN: string = Utils.join( [ QuintParser._serializedATNSegment0, @@ -6486,6 +6499,34 @@ export class TupleContext extends ExprContext { } } } +export class UnitContext extends ExprContext { + public LPAREN(): TerminalNode { return this.getToken(QuintParser.LPAREN, 0); } + public RPAREN(): TerminalNode { return this.getToken(QuintParser.RPAREN, 0); } + constructor(ctx: ExprContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: QuintListener): void { + if (listener.enterUnit) { + listener.enterUnit(this); + } + } + // @Override + public exitRule(listener: QuintListener): void { + if (listener.exitUnit) { + listener.exitUnit(this); + } + } + // @Override + public accept(visitor: QuintVisitor): Result { + if (visitor.visitUnit) { + return visitor.visitUnit(this); + } else { + return visitor.visitChildren(this); + } + } +} export class PairContext extends ExprContext { public expr(): ExprContext[]; public expr(i: number): ExprContext; diff --git a/quint/src/generated/QuintVisitor.ts b/quint/src/generated/QuintVisitor.ts index 7b5cc3ea0..cca740a52 100644 --- a/quint/src/generated/QuintVisitor.ts +++ b/quint/src/generated/QuintVisitor.ts @@ -47,6 +47,7 @@ import { ActionAllContext } from "./QuintParser"; import { ActionAnyContext } from "./QuintParser"; import { LiteralOrIdContext } from "./QuintParser"; import { TupleContext } from "./QuintParser"; +import { UnitContext } from "./QuintParser"; import { PairContext } from "./QuintParser"; import { RecordContext } from "./QuintParser"; import { ListContext } from "./QuintParser"; @@ -422,6 +423,14 @@ export interface QuintVisitor extends ParseTreeVisitor { */ visitTuple?: (ctx: TupleContext) => Result; + /** + * Visit a parse tree produced by the `unit` + * labeled alternative in `QuintParser.expr`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnit?: (ctx: UnitContext) => Result; + /** * Visit a parse tree produced by the `pair` * labeled alternative in `QuintParser.expr`. diff --git a/quint/src/ir/quintTypes.ts b/quint/src/ir/quintTypes.ts index f8322d67a..624bb2e31 100644 --- a/quint/src/ir/quintTypes.ts +++ b/quint/src/ir/quintTypes.ts @@ -69,22 +69,22 @@ export interface QuintTupleType extends WithOptionalId { fields: Row } -export interface QuintRecordType extends WithOptionalId { - kind: 'rec' - fields: Row -} - // A value of the unit type, i.e. an empty record -export function unitType(id: bigint): QuintRecordType { +export function unitType(id: bigint): QuintTupleType { return { id, - kind: 'rec', + kind: 'tup', fields: { kind: 'row', fields: [], other: { kind: 'empty' } }, } } export function isUnitType(r: QuintType): Boolean { - return r.kind === 'rec' && r.fields.kind === 'row' && r.fields.fields.length === 0 && r.fields.other.kind === 'empty' + return r.kind === 'tup' && r.fields.kind === 'row' && r.fields.fields.length === 0 && r.fields.other.kind === 'empty' +} + +export interface QuintRecordType extends WithOptionalId { + kind: 'rec' + fields: Row } export interface QuintSumType extends WithOptionalId { diff --git a/quint/src/parsing/ToIrListener.ts b/quint/src/parsing/ToIrListener.ts index a444e6d51..ce9b07be2 100644 --- a/quint/src/parsing/ToIrListener.ts +++ b/quint/src/parsing/ToIrListener.ts @@ -764,6 +764,11 @@ export class ToIrListener implements QuintListener { this.pushApplication(ctx, 'Tup', args) } + // The unit, (), represented by the empty tuple + exitUnit(ctx: p.UnitContext) { + this.exprStack.push(unitValue(this.getId(ctx))) + } + // pair constructor, e.g., 2 -> 3 exitPair(ctx: p.PairContext) { const args = popMany(this.exprStack, ctx.expr().length, this.undefinedExpr(ctx)) @@ -1353,7 +1358,7 @@ function unitValue(id: bigint): QuintBuiltinApp { return { id, kind: 'app', - opcode: 'Rec', + opcode: 'Tup', args: [], } } diff --git a/quint/src/types/constraintGenerator.ts b/quint/src/types/constraintGenerator.ts index 3f19dd1fb..9a17b6ddb 100644 --- a/quint/src/types/constraintGenerator.ts +++ b/quint/src/types/constraintGenerator.ts @@ -214,9 +214,7 @@ export class ConstraintGeneratorVisitor implements IRVisitor { return validateArity(e.opcode, results, l => l === 3, '3').chain(() => withConstraints(e.id, results, a)) // Tuple operators case 'Tup': - return validateArity(e.opcode, results, l => l > 0, 'at least one').chain(() => - tupleConstructorConstraints(e.id, results, a) - ) + return tupleConstructorConstraints(e.id, results, a) case 'item': return validateArity(e.opcode, results, l => l === 2, '2').chain(() => itemConstraints(e.id, results, a)) // Sum type operators diff --git a/quint/test/runtime/compile.test.ts b/quint/test/runtime/compile.test.ts index fe326ff69..12deb53a5 100644 --- a/quint/test/runtime/compile.test.ts +++ b/quint/test/runtime/compile.test.ts @@ -873,7 +873,7 @@ describe('compiling specs to runtime values', () => { it('can compile construction of sum type variants', () => { const context = 'type T = Some(int) | None' assertResultAsString('Some(40 + 2)', 'variant("Some", 42)', context) - assertResultAsString('None', 'variant("None", Rec())', context) + assertResultAsString('None', 'variant("None", Tup())', context) }) it('can compile elimination of sum type variants via match', () => { diff --git a/quint/test/types/aliasInliner.test.ts b/quint/test/types/aliasInliner.test.ts index f7f836b87..931b738ba 100644 --- a/quint/test/types/aliasInliner.test.ts +++ b/quint/test/types/aliasInliner.test.ts @@ -71,11 +71,11 @@ describe('inlineAliases', () => { const expectedModule = dedent(`module A { | type T1 = (B | C) - | val C: (B | C) = variant("C", Rec()) + | val C: (B | C) = variant("C", Tup()) | type T2 = (Some((B | C)) | None) - | val B: (B | C) = variant("B", Rec()) + | val B: (B | C) = variant("B", Tup()) | def Some: ((B | C)) => (Some((B | C)) | None) = ((__SomeParam) => variant("Some", __SomeParam)) - | val None: (Some((B | C)) | None) = variant("None", Rec()) + | val None: (Some((B | C)) | None) = variant("None", Tup()) | var x: (Some((B | C)) | None) |}`) diff --git a/quint/test/types/constraintGenerator.test.ts b/quint/test/types/constraintGenerator.test.ts index 8cb3fd0bf..784b62915 100644 --- a/quint/test/types/constraintGenerator.test.ts +++ b/quint/test/types/constraintGenerator.test.ts @@ -162,14 +162,6 @@ describe('ConstraintGeneratorVisitor', () => { ) }) - it('catches invalid arity on Tup operator', () => { - testArityError( - 'val x = Tup()', - 'Checking arity for application of Tup', - 'Operator expects at least one arguments but was given 0' - ) - }) - it('catches invalid arity on item operator', () => { testArityError( 'val x = (0, 1).item()', diff --git a/quint/test/types/inferrer.test.ts b/quint/test/types/inferrer.test.ts index a3471cf5d..7486ddf11 100644 --- a/quint/test/types/inferrer.test.ts +++ b/quint/test/types/inferrer.test.ts @@ -181,18 +181,18 @@ describe('inferTypes', () => { assert.sameDeepMembers(stringTypes, [ [15n, 'str'], [16n, 'int'], - [17n, '(A(int) | B({}))'], - [18n, '(A(int) | B({}))'], + [17n, '(A(int) | B(()))'], + [18n, '(A(int) | B(()))'], [6n, 'int'], [5n, 'str'], [7n, 'int'], - [8n, '(A(int) | B({}))'], - [9n, '(int) => (A(int) | B({}))'], - [10n, '(int) => (A(int) | B({}))'], + [8n, '(A(int) | B(()))'], + [9n, '(int) => (A(int) | B(()))'], + [10n, '(int) => (A(int) | B(()))'], [11n, 'str'], - [12n, '{}'], - [13n, '(B({}) | A(int))'], - [14n, '(B({}) | A(int))'], + [12n, '()'], + [13n, '(B(()) | A(int))'], + [14n, '(B(()) | A(int))'], ]) }) @@ -223,19 +223,19 @@ module B { assert.sameDeepMembers(stringTypes, [ [15n, 'str'], [16n, 'int'], - [17n, '(A(int) | B({}))'], - [18n, '(A(int) | B({}))'], + [17n, '(A(int) | B(()))'], + [18n, '(A(int) | B(()))'], [6n, 'int'], [5n, 'str'], [7n, 'int'], - [8n, '(A(int) | B({}))'], - [9n, '(int) => (A(int) | B({}))'], - [10n, '(int) => (A(int) | B({}))'], + [8n, '(A(int) | B(()))'], + [9n, '(int) => (A(int) | B(()))'], + [10n, '(int) => (A(int) | B(()))'], [11n, 'str'], - [12n, '{}'], - [13n, '(B({}) | A(int))'], - [14n, '(B({}) | A(int))'], - [19n, '(A(int) | B({}))'], + [12n, '()'], + [13n, '(B(()) | A(int))'], + [14n, '(B(()) | A(int))'], + [19n, '(A(int) | B(()))'], [25n, 'str'], [27n, 'int'], [20n, 'int'], @@ -243,9 +243,9 @@ module B { [22n, 'int'], [26n, '(int) => int'], [28n, 'str'], - [30n, '{}'], + [30n, '()'], [23n, 'int'], - [29n, '({}) => int'], + [29n, '(()) => int'], [24n, 'int'], [31n, 'int'], ]) diff --git a/quint/testFixture/_1043sumTypeDecl.json b/quint/testFixture/_1043sumTypeDecl.json index 90dc57e22..53f0aa6b2 100644 --- a/quint/testFixture/_1043sumTypeDecl.json +++ b/quint/testFixture/_1043sumTypeDecl.json @@ -1 +1 @@ -{"stage":"parsing","warnings":[],"modules":[{"id":22,"name":"SumTypes","declarations":[{"id":3,"kind":"typedef","name":"T","type":{"id":3,"kind":"sum","fields":{"kind":"row","fields":[{"fieldName":"A","fieldType":{"id":1,"kind":"rec","fields":{"kind":"row","fields":[],"other":{"kind":"empty"}}}},{"fieldName":"B","fieldType":{"id":2,"kind":"int"}}],"other":{"kind":"empty"}}},"depth":0},{"id":14,"kind":"def","name":"B","qualifier":"def","typeAnnotation":{"kind":"oper","args":[{"id":2,"kind":"int"}],"res":{"id":4,"kind":"const","name":"T"}},"expr":{"id":13,"kind":"lambda","params":[{"id":10,"name":"__BParam"}],"qualifier":"def","expr":{"id":12,"kind":"app","opcode":"variant","args":[{"id":9,"kind":"str","value":"B"},{"kind":"name","name":"__BParam","id":11}]}}},{"id":8,"kind":"def","name":"A","qualifier":"val","typeAnnotation":{"id":4,"kind":"const","name":"T"},"expr":{"id":7,"kind":"app","opcode":"variant","args":[{"id":5,"kind":"str","value":"A"},{"id":6,"kind":"app","opcode":"Rec","args":[]}]}},{"id":21,"kind":"def","name":"canConstructVariants","qualifier":"val","expr":{"id":20,"kind":"app","opcode":"List","args":[{"id":17,"kind":"name","name":"A"},{"id":19,"kind":"app","opcode":"B","args":[{"id":18,"kind":"int","value":2}]}]},"typeAnnotation":{"id":16,"kind":"list","elem":{"id":15,"kind":"const","name":"T"}}}]}],"table":{"4":{"id":3,"kind":"typedef","name":"T","type":{"id":3,"kind":"sum","fields":{"kind":"row","fields":[{"fieldName":"A","fieldType":{"id":1,"kind":"rec","fields":{"kind":"row","fields":[],"other":{"kind":"empty"}}}},{"fieldName":"B","fieldType":{"id":2,"kind":"int"}}],"other":{"kind":"empty"}}},"depth":0},"11":{"id":10,"name":"__BParam","kind":"param","depth":1},"15":{"id":3,"kind":"typedef","name":"T","type":{"id":3,"kind":"sum","fields":{"kind":"row","fields":[{"fieldName":"A","fieldType":{"id":1,"kind":"rec","fields":{"kind":"row","fields":[],"other":{"kind":"empty"}}}},{"fieldName":"B","fieldType":{"id":2,"kind":"int"}}],"other":{"kind":"empty"}}},"depth":0},"17":{"id":8,"kind":"def","name":"A","qualifier":"val","expr":{"id":7,"kind":"app","opcode":"variant","args":[{"id":5,"kind":"str","value":"A"},{"id":6,"kind":"app","opcode":"Rec","args":[]}]},"depth":0},"19":{"id":14,"kind":"def","name":"B","qualifier":"def","expr":{"id":13,"kind":"lambda","params":[{"id":10,"name":"__BParam"}],"qualifier":"def","expr":{"id":12,"kind":"app","opcode":"variant","args":[{"id":9,"kind":"str","value":"B"},{"kind":"name","name":"__BParam","id":11}]}},"depth":0}},"errors":[]} \ No newline at end of file +{"stage":"parsing","warnings":[],"modules":[{"id":22,"name":"SumTypes","declarations":[{"id":3,"kind":"typedef","name":"T","type":{"id":3,"kind":"sum","fields":{"kind":"row","fields":[{"fieldName":"A","fieldType":{"id":1,"kind":"tup","fields":{"kind":"row","fields":[],"other":{"kind":"empty"}}}},{"fieldName":"B","fieldType":{"id":2,"kind":"int"}}],"other":{"kind":"empty"}}},"depth":0},{"id":14,"kind":"def","name":"B","qualifier":"def","typeAnnotation":{"kind":"oper","args":[{"id":2,"kind":"int"}],"res":{"id":4,"kind":"const","name":"T"}},"expr":{"id":13,"kind":"lambda","params":[{"id":10,"name":"__BParam"}],"qualifier":"def","expr":{"id":12,"kind":"app","opcode":"variant","args":[{"id":9,"kind":"str","value":"B"},{"kind":"name","name":"__BParam","id":11}]}}},{"id":8,"kind":"def","name":"A","qualifier":"val","typeAnnotation":{"id":4,"kind":"const","name":"T"},"expr":{"id":7,"kind":"app","opcode":"variant","args":[{"id":5,"kind":"str","value":"A"},{"id":6,"kind":"app","opcode":"Tup","args":[]}]}},{"id":21,"kind":"def","name":"canConstructVariants","qualifier":"val","expr":{"id":20,"kind":"app","opcode":"List","args":[{"id":17,"kind":"name","name":"A"},{"id":19,"kind":"app","opcode":"B","args":[{"id":18,"kind":"int","value":2}]}]},"typeAnnotation":{"id":16,"kind":"list","elem":{"id":15,"kind":"const","name":"T"}}}]}],"table":{"4":{"id":3,"kind":"typedef","name":"T","type":{"id":3,"kind":"sum","fields":{"kind":"row","fields":[{"fieldName":"A","fieldType":{"id":1,"kind":"tup","fields":{"kind":"row","fields":[],"other":{"kind":"empty"}}}},{"fieldName":"B","fieldType":{"id":2,"kind":"int"}}],"other":{"kind":"empty"}}},"depth":0},"11":{"id":10,"name":"__BParam","kind":"param","depth":1},"15":{"id":3,"kind":"typedef","name":"T","type":{"id":3,"kind":"sum","fields":{"kind":"row","fields":[{"fieldName":"A","fieldType":{"id":1,"kind":"tup","fields":{"kind":"row","fields":[],"other":{"kind":"empty"}}}},{"fieldName":"B","fieldType":{"id":2,"kind":"int"}}],"other":{"kind":"empty"}}},"depth":0},"17":{"id":8,"kind":"def","name":"A","qualifier":"val","expr":{"id":7,"kind":"app","opcode":"variant","args":[{"id":5,"kind":"str","value":"A"},{"id":6,"kind":"app","opcode":"Tup","args":[]}]},"depth":0},"19":{"id":14,"kind":"def","name":"B","qualifier":"def","expr":{"id":13,"kind":"lambda","params":[{"id":10,"name":"__BParam"}],"qualifier":"def","expr":{"id":12,"kind":"app","opcode":"variant","args":[{"id":9,"kind":"str","value":"B"},{"kind":"name","name":"__BParam","id":11}]}},"depth":0}},"errors":[]} \ No newline at end of file diff --git a/quint/testFixture/_1044matchExpression.json b/quint/testFixture/_1044matchExpression.json index abd859adf..037d9dba6 100644 --- a/quint/testFixture/_1044matchExpression.json +++ b/quint/testFixture/_1044matchExpression.json @@ -1 +1 @@ -{"stage":"parsing","warnings":[],"modules":[{"id":41,"name":"SumTypes","declarations":[{"id":4,"kind":"typedef","name":"T","type":{"id":4,"kind":"sum","fields":{"kind":"row","fields":[{"fieldName":"A","fieldType":{"id":1,"kind":"rec","fields":{"kind":"row","fields":[],"other":{"kind":"empty"}}}},{"fieldName":"B","fieldType":{"id":2,"kind":"int"}},{"fieldName":"C","fieldType":{"id":3,"kind":"str"}}],"other":{"kind":"empty"}}},"depth":0},{"id":15,"kind":"def","name":"B","qualifier":"def","typeAnnotation":{"kind":"oper","args":[{"id":2,"kind":"int"}],"res":{"id":5,"kind":"const","name":"T"}},"expr":{"id":14,"kind":"lambda","params":[{"id":11,"name":"__BParam"}],"qualifier":"def","expr":{"id":13,"kind":"app","opcode":"variant","args":[{"id":10,"kind":"str","value":"B"},{"kind":"name","name":"__BParam","id":12}]}}},{"id":21,"kind":"def","name":"C","qualifier":"def","typeAnnotation":{"kind":"oper","args":[{"id":3,"kind":"str"}],"res":{"id":5,"kind":"const","name":"T"}},"expr":{"id":20,"kind":"lambda","params":[{"id":17,"name":"__CParam"}],"qualifier":"def","expr":{"id":19,"kind":"app","opcode":"variant","args":[{"id":16,"kind":"str","value":"C"},{"kind":"name","name":"__CParam","id":18}]}}},{"id":9,"kind":"def","name":"A","qualifier":"val","typeAnnotation":{"id":5,"kind":"const","name":"T"},"expr":{"id":8,"kind":"app","opcode":"variant","args":[{"id":6,"kind":"str","value":"A"},{"id":7,"kind":"app","opcode":"Rec","args":[]}]}},{"id":24,"kind":"def","name":"c","qualifier":"val","expr":{"id":23,"kind":"app","opcode":"C","args":[{"id":22,"kind":"str","value":"Foo"}]}},{"id":40,"kind":"def","name":"ex","qualifier":"val","expr":{"id":30,"kind":"app","opcode":"matchVariant","args":[{"id":25,"kind":"name","name":"c"},{"id":31,"kind":"str","value":"A"},{"id":32,"kind":"lambda","qualifier":"def","expr":{"id":26,"kind":"int","value":0},"params":[{"name":"_","id":33}]},{"id":34,"kind":"str","value":"B"},{"id":35,"kind":"lambda","qualifier":"def","expr":{"id":27,"kind":"name","name":"n"},"params":[{"name":"n","id":36}]},{"id":37,"kind":"str","value":"_"},{"id":38,"kind":"lambda","qualifier":"def","expr":{"id":29,"kind":"app","opcode":"iuminus","args":[{"id":28,"kind":"int","value":1}]},"params":[{"name":"_","id":39}]}]}}]}],"table":{"5":{"id":4,"kind":"typedef","name":"T","type":{"id":4,"kind":"sum","fields":{"kind":"row","fields":[{"fieldName":"A","fieldType":{"id":1,"kind":"rec","fields":{"kind":"row","fields":[],"other":{"kind":"empty"}}}},{"fieldName":"B","fieldType":{"id":2,"kind":"int"}},{"fieldName":"C","fieldType":{"id":3,"kind":"str"}}],"other":{"kind":"empty"}}},"depth":0},"12":{"id":11,"name":"__BParam","kind":"param","depth":1},"18":{"id":17,"name":"__CParam","kind":"param","depth":1},"23":{"id":21,"kind":"def","name":"C","qualifier":"def","expr":{"id":20,"kind":"lambda","params":[{"id":17,"name":"__CParam"}],"qualifier":"def","expr":{"id":19,"kind":"app","opcode":"variant","args":[{"id":16,"kind":"str","value":"C"},{"kind":"name","name":"__CParam","id":18}]}},"depth":0},"25":{"id":24,"kind":"def","name":"c","qualifier":"val","expr":{"id":23,"kind":"app","opcode":"C","args":[{"id":22,"kind":"str","value":"Foo"}]},"depth":0},"27":{"name":"n","id":36,"kind":"param","depth":1}},"errors":[]} \ No newline at end of file +{"stage":"parsing","warnings":[],"modules":[{"id":41,"name":"SumTypes","declarations":[{"id":4,"kind":"typedef","name":"T","type":{"id":4,"kind":"sum","fields":{"kind":"row","fields":[{"fieldName":"A","fieldType":{"id":1,"kind":"tup","fields":{"kind":"row","fields":[],"other":{"kind":"empty"}}}},{"fieldName":"B","fieldType":{"id":2,"kind":"int"}},{"fieldName":"C","fieldType":{"id":3,"kind":"str"}}],"other":{"kind":"empty"}}},"depth":0},{"id":15,"kind":"def","name":"B","qualifier":"def","typeAnnotation":{"kind":"oper","args":[{"id":2,"kind":"int"}],"res":{"id":5,"kind":"const","name":"T"}},"expr":{"id":14,"kind":"lambda","params":[{"id":11,"name":"__BParam"}],"qualifier":"def","expr":{"id":13,"kind":"app","opcode":"variant","args":[{"id":10,"kind":"str","value":"B"},{"kind":"name","name":"__BParam","id":12}]}}},{"id":21,"kind":"def","name":"C","qualifier":"def","typeAnnotation":{"kind":"oper","args":[{"id":3,"kind":"str"}],"res":{"id":5,"kind":"const","name":"T"}},"expr":{"id":20,"kind":"lambda","params":[{"id":17,"name":"__CParam"}],"qualifier":"def","expr":{"id":19,"kind":"app","opcode":"variant","args":[{"id":16,"kind":"str","value":"C"},{"kind":"name","name":"__CParam","id":18}]}}},{"id":9,"kind":"def","name":"A","qualifier":"val","typeAnnotation":{"id":5,"kind":"const","name":"T"},"expr":{"id":8,"kind":"app","opcode":"variant","args":[{"id":6,"kind":"str","value":"A"},{"id":7,"kind":"app","opcode":"Tup","args":[]}]}},{"id":24,"kind":"def","name":"c","qualifier":"val","expr":{"id":23,"kind":"app","opcode":"C","args":[{"id":22,"kind":"str","value":"Foo"}]}},{"id":40,"kind":"def","name":"ex","qualifier":"val","expr":{"id":30,"kind":"app","opcode":"matchVariant","args":[{"id":25,"kind":"name","name":"c"},{"id":31,"kind":"str","value":"A"},{"id":32,"kind":"lambda","qualifier":"def","expr":{"id":26,"kind":"int","value":0},"params":[{"name":"_","id":33}]},{"id":34,"kind":"str","value":"B"},{"id":35,"kind":"lambda","qualifier":"def","expr":{"id":27,"kind":"name","name":"n"},"params":[{"name":"n","id":36}]},{"id":37,"kind":"str","value":"_"},{"id":38,"kind":"lambda","qualifier":"def","expr":{"id":29,"kind":"app","opcode":"iuminus","args":[{"id":28,"kind":"int","value":1}]},"params":[{"name":"_","id":39}]}]}}]}],"table":{"5":{"id":4,"kind":"typedef","name":"T","type":{"id":4,"kind":"sum","fields":{"kind":"row","fields":[{"fieldName":"A","fieldType":{"id":1,"kind":"tup","fields":{"kind":"row","fields":[],"other":{"kind":"empty"}}}},{"fieldName":"B","fieldType":{"id":2,"kind":"int"}},{"fieldName":"C","fieldType":{"id":3,"kind":"str"}}],"other":{"kind":"empty"}}},"depth":0},"12":{"id":11,"name":"__BParam","kind":"param","depth":1},"18":{"id":17,"name":"__CParam","kind":"param","depth":1},"23":{"id":21,"kind":"def","name":"C","qualifier":"def","expr":{"id":20,"kind":"lambda","params":[{"id":17,"name":"__CParam"}],"qualifier":"def","expr":{"id":19,"kind":"app","opcode":"variant","args":[{"id":16,"kind":"str","value":"C"},{"kind":"name","name":"__CParam","id":18}]}},"depth":0},"25":{"id":24,"kind":"def","name":"c","qualifier":"val","expr":{"id":23,"kind":"app","opcode":"C","args":[{"id":22,"kind":"str","value":"Foo"}]},"depth":0},"27":{"name":"n","id":36,"kind":"param","depth":1}},"errors":[]} \ No newline at end of file