From 0a5c2b184d1b2bca3124200366af8825cc52533d Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 1 Apr 2021 14:43:06 +0300 Subject: [PATCH 01/64] support vitess Comments in CREATE/ALTER/DROP TABLE statements Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/sqlparser/ast.go | 3 + go/vt/sqlparser/ast_clone.go | 3 + go/vt/sqlparser/ast_equals.go | 9 +- go/vt/sqlparser/ast_rewrite.go | 15 + go/vt/sqlparser/ast_visit.go | 9 + go/vt/sqlparser/cached_size.go | 27 +- go/vt/sqlparser/comments_test.go | 43 +- go/vt/sqlparser/sql.go | 4348 +++++++++++++++--------------- go/vt/sqlparser/sql.y | 12 +- 9 files changed, 2250 insertions(+), 2219 deletions(-) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 2c77fe8e124..8a57a9701f1 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -428,6 +428,7 @@ type ( Table TableName AlterOptions []AlterOption PartitionSpec *PartitionSpec + Comments Comments FullyParsed bool } @@ -437,6 +438,7 @@ type ( FromTables TableNames // The following fields are set if a DDL was fully analyzed. IfExists bool + Comments Comments } // DropView represents a DROP VIEW statement. @@ -452,6 +454,7 @@ type ( IfNotExists bool TableSpec *TableSpec OptLike *OptLike + Comments Comments FullyParsed bool } diff --git a/go/vt/sqlparser/ast_clone.go b/go/vt/sqlparser/ast_clone.go index 44db68253c7..5e117628922 100644 --- a/go/vt/sqlparser/ast_clone.go +++ b/go/vt/sqlparser/ast_clone.go @@ -426,6 +426,7 @@ func CloneRefOfAlterTable(n *AlterTable) *AlterTable { out.Table = CloneTableName(n.Table) out.AlterOptions = CloneSliceOfAlterOption(n.AlterOptions) out.PartitionSpec = CloneRefOfPartitionSpec(n.PartitionSpec) + out.Comments = CloneComments(n.Comments) return &out } @@ -687,6 +688,7 @@ func CloneRefOfCreateTable(n *CreateTable) *CreateTable { out.Table = CloneTableName(n.Table) out.TableSpec = CloneRefOfTableSpec(n.TableSpec) out.OptLike = CloneRefOfOptLike(n.OptLike) + out.Comments = CloneComments(n.Comments) return &out } @@ -786,6 +788,7 @@ func CloneRefOfDropTable(n *DropTable) *DropTable { } out := *n out.FromTables = CloneTableNames(n.FromTables) + out.Comments = CloneComments(n.Comments) return &out } diff --git a/go/vt/sqlparser/ast_equals.go b/go/vt/sqlparser/ast_equals.go index c19138584ba..4fba1195e51 100644 --- a/go/vt/sqlparser/ast_equals.go +++ b/go/vt/sqlparser/ast_equals.go @@ -1031,7 +1031,8 @@ func EqualsRefOfAlterTable(a, b *AlterTable) bool { return a.FullyParsed == b.FullyParsed && EqualsTableName(a.Table, b.Table) && EqualsSliceOfAlterOption(a.AlterOptions, b.AlterOptions) && - EqualsRefOfPartitionSpec(a.PartitionSpec, b.PartitionSpec) + EqualsRefOfPartitionSpec(a.PartitionSpec, b.PartitionSpec) && + EqualsComments(a.Comments, b.Comments) } // EqualsRefOfAlterView does deep equals between the two objects. @@ -1357,7 +1358,8 @@ func EqualsRefOfCreateTable(a, b *CreateTable) bool { a.FullyParsed == b.FullyParsed && EqualsTableName(a.Table, b.Table) && EqualsRefOfTableSpec(a.TableSpec, b.TableSpec) && - EqualsRefOfOptLike(a.OptLike, b.OptLike) + EqualsRefOfOptLike(a.OptLike, b.OptLike) && + EqualsComments(a.Comments, b.Comments) } // EqualsRefOfCreateView does deep equals between the two objects. @@ -1476,7 +1478,8 @@ func EqualsRefOfDropTable(a, b *DropTable) bool { } return a.Temp == b.Temp && a.IfExists == b.IfExists && - EqualsTableNames(a.FromTables, b.FromTables) + EqualsTableNames(a.FromTables, b.FromTables) && + EqualsComments(a.Comments, b.Comments) } // EqualsRefOfDropView does deep equals between the two objects. diff --git a/go/vt/sqlparser/ast_rewrite.go b/go/vt/sqlparser/ast_rewrite.go index 68cbc4b27be..15c46feba7d 100644 --- a/go/vt/sqlparser/ast_rewrite.go +++ b/go/vt/sqlparser/ast_rewrite.go @@ -626,6 +626,11 @@ func (a *application) rewriteRefOfAlterTable(parent SQLNode, node *AlterTable, r }) { return false } + if !a.rewriteComments(node, node.Comments, func(newNode, parent SQLNode) { + parent.(*AlterTable).Comments = newNode.(Comments) + }) { + return false + } if a.post != nil { a.cur.replacer = replacer a.cur.parent = parent @@ -1418,6 +1423,11 @@ func (a *application) rewriteRefOfCreateTable(parent SQLNode, node *CreateTable, }) { return false } + if !a.rewriteComments(node, node.Comments, func(newNode, parent SQLNode) { + parent.(*CreateTable).Comments = newNode.(Comments) + }) { + return false + } if a.post != nil { a.cur.replacer = replacer a.cur.parent = parent @@ -1708,6 +1718,11 @@ func (a *application) rewriteRefOfDropTable(parent SQLNode, node *DropTable, rep }) { return false } + if !a.rewriteComments(node, node.Comments, func(newNode, parent SQLNode) { + parent.(*DropTable).Comments = newNode.(Comments) + }) { + return false + } if a.post != nil { a.cur.replacer = replacer a.cur.parent = parent diff --git a/go/vt/sqlparser/ast_visit.go b/go/vt/sqlparser/ast_visit.go index bd52dfb25c7..3bc96521ace 100644 --- a/go/vt/sqlparser/ast_visit.go +++ b/go/vt/sqlparser/ast_visit.go @@ -462,6 +462,9 @@ func VisitRefOfAlterTable(in *AlterTable, f Visit) error { if err := VisitRefOfPartitionSpec(in.PartitionSpec, f); err != nil { return err } + if err := VisitComments(in.Comments, f); err != nil { + return err + } return nil } func VisitRefOfAlterView(in *AlterView, f Visit) error { @@ -820,6 +823,9 @@ func VisitRefOfCreateTable(in *CreateTable, f Visit) error { if err := VisitRefOfOptLike(in.OptLike, f); err != nil { return err } + if err := VisitComments(in.Comments, f); err != nil { + return err + } return nil } func VisitRefOfCreateView(in *CreateView, f Visit) error { @@ -955,6 +961,9 @@ func VisitRefOfDropTable(in *DropTable, f Visit) error { if err := VisitTableNames(in.FromTables, f); err != nil { return err } + if err := VisitComments(in.Comments, f); err != nil { + return err + } return nil } func VisitRefOfDropView(in *DropView, f Visit) error { diff --git a/go/vt/sqlparser/cached_size.go b/go/vt/sqlparser/cached_size.go index 3f2eb013846..4e6009df211 100644 --- a/go/vt/sqlparser/cached_size.go +++ b/go/vt/sqlparser/cached_size.go @@ -174,7 +174,7 @@ func (cached *AlterTable) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(65) + size += int64(89) } // field Table vitess.io/vitess/go/vt/sqlparser.TableName size += cached.Table.CachedSize(false) @@ -189,6 +189,13 @@ func (cached *AlterTable) CachedSize(alloc bool) int64 { } // field PartitionSpec *vitess.io/vitess/go/vt/sqlparser.PartitionSpec size += cached.PartitionSpec.CachedSize(true) + // field Comments vitess.io/vitess/go/vt/sqlparser.Comments + { + size += int64(cap(cached.Comments)) * int64(16) + for _, elem := range cached.Comments { + size += int64(len(elem)) + } + } return size } func (cached *AlterView) CachedSize(alloc bool) int64 { @@ -645,7 +652,7 @@ func (cached *CreateTable) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(65) + size += int64(89) } // field Table vitess.io/vitess/go/vt/sqlparser.TableName size += cached.Table.CachedSize(false) @@ -653,6 +660,13 @@ func (cached *CreateTable) CachedSize(alloc bool) int64 { size += cached.TableSpec.CachedSize(true) // field OptLike *vitess.io/vitess/go/vt/sqlparser.OptLike size += cached.OptLike.CachedSize(true) + // field Comments vitess.io/vitess/go/vt/sqlparser.Comments + { + size += int64(cap(cached.Comments)) * int64(16) + for _, elem := range cached.Comments { + size += int64(len(elem)) + } + } return size } func (cached *CreateView) CachedSize(alloc bool) int64 { @@ -828,7 +842,7 @@ func (cached *DropTable) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(33) + size += int64(64) } // field FromTables vitess.io/vitess/go/vt/sqlparser.TableNames { @@ -837,6 +851,13 @@ func (cached *DropTable) CachedSize(alloc bool) int64 { size += elem.CachedSize(false) } } + // field Comments vitess.io/vitess/go/vt/sqlparser.Comments + { + size += int64(cap(cached.Comments)) * int64(16) + for _, elem := range cached.Comments { + size += int64(len(elem)) + } + } return size } func (cached *DropView) CachedSize(alloc bool) int64 { diff --git a/go/vt/sqlparser/comments_test.go b/go/vt/sqlparser/comments_test.go index 8ec7d4905fa..2e062b98dc9 100644 --- a/go/vt/sqlparser/comments_test.go +++ b/go/vt/sqlparser/comments_test.go @@ -318,14 +318,43 @@ func TestExtractCommentDirectives(t *testing.T) { }} for _, testCase := range testCases { - sql := "select " + testCase.input + " 1 from dual" - stmt, _ := Parse(sql) - comments := stmt.(*Select).Comments - vals := ExtractCommentDirectives(comments) + t.Run(testCase.input, func(t *testing.T) { + sqls := []string{ + "select " + testCase.input + " 1 from dual", + "update " + testCase.input + " t set i=i+1", + "delete " + testCase.input + " from t where id>1", + "drop table " + testCase.input + " t", + "create table " + testCase.input + " if not exists t (id int primary key)", + "alter table " + testCase.input + " t add column c int not null", + } + for _, sql := range sqls { + t.Run(sql, func(t *testing.T) { + var comments Comments + stmt, _ := Parse(sql) + switch s := stmt.(type) { + case *Select: + comments = s.Comments + case *Update: + comments = s.Comments + case *Delete: + comments = s.Comments + case *DropTable: + comments = s.Comments + case *AlterTable: + comments = s.Comments + case *CreateTable: + comments = s.Comments + default: + t.Errorf("Unexpected statement type %+v", s) + } + vals := ExtractCommentDirectives(comments) - if !reflect.DeepEqual(vals, testCase.vals) { - t.Errorf("test input: '%v', got vals:\n%+v, want\n%+v", testCase.input, vals, testCase.vals) - } + if !reflect.DeepEqual(vals, testCase.vals) { + t.Errorf("test input: '%v', got vals:\n%+v, want\n%+v", testCase.input, vals, testCase.vals) + } + }) + } + }) } d := CommentDirectives{ diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 2cce7934e64..d2e14cbeb7d 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -1069,666 +1069,520 @@ var yyExca = [...]int{ 176, 39, 181, 39, -2, 243, - -1, 1420, + -1, 1421, 150, 960, -2, 954, - -1, 1512, + -1, 1513, 74, 66, 82, 66, -2, 70, - -1, 1533, + -1, 1534, 1, 270, 474, 270, -2, 118, - -1, 1945, + -1, 1947, 5, 821, 18, 821, 20, 821, 32, 821, 83, 821, -2, 604, - -1, 2157, + -1, 2160, 46, 896, -2, 890, } const yyPrivate = 57344 -const yyLast = 28297 +const yyLast = 27775 var yyAct = [...]int{ - 579, 2242, 2186, 1858, 2231, 2170, 1997, 2208, 1746, 1548, - 2158, 522, 2086, 939, 551, 2108, 1925, 1827, 1021, 1530, - 1713, 1926, 1994, 537, 1457, 1597, 1068, 1747, 1922, 1563, - 1831, 1733, 83, 3, 520, 892, 1183, 1811, 1568, 1812, - 829, 769, 1509, 1075, 1937, 147, 1884, 1223, 1673, 180, - 1406, 1414, 180, 1810, 485, 180, 1647, 1570, 1595, 1320, - 501, 1804, 180, 1112, 794, 133, 1105, 1498, 626, 1096, - 180, 1491, 1073, 1205, 1078, 919, 601, 81, 1459, 1095, - 1098, 1060, 524, 1440, 513, 586, 1383, 957, 33, 776, - 1102, 1182, 501, 1295, 807, 501, 180, 501, 777, 1559, - 781, 773, 800, 795, 79, 623, 1212, 1474, 796, 1111, - 1514, 1085, 1325, 886, 1417, 797, 110, 1172, 937, 150, - 111, 1549, 1197, 116, 1180, 1109, 117, 508, 871, 8, - 7, 6, 78, 1177, 1034, 1850, 1849, 1626, 1282, 1872, - 2110, 1873, 1454, 1455, 1372, 1037, 182, 183, 184, 1371, - 1370, 1369, 1368, 1367, 511, 1360, 512, 2200, 1711, 770, - 592, 608, 612, 2154, 1971, 112, 2065, 958, 587, 118, - 2132, 2131, 833, 180, 2081, 460, 831, 2082, 2248, 832, - 2205, 610, 84, 2241, 834, 80, 2181, 2234, 1998, 845, - 846, 509, 849, 850, 851, 852, 1614, 1663, 855, 856, - 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, - 867, 868, 869, 627, 958, 811, 2204, 620, 171, 86, - 87, 88, 89, 90, 91, 1901, 788, 2029, 786, 112, - 787, 2180, 1712, 968, 789, 1633, 810, 1951, 926, 1632, - 928, 842, 1871, 113, 177, 135, 1661, 514, 107, 1524, - 453, 454, 1184, 489, 155, 835, 836, 837, 564, 1515, - 570, 571, 568, 569, 1456, 567, 566, 565, 1777, 1952, - 1953, 1776, 847, 1573, 1778, 572, 573, 925, 927, 911, - 968, 1525, 1526, 912, 35, 145, 785, 72, 39, 40, - 134, 1113, 905, 1114, 899, 900, 935, 583, 112, 582, - 1794, 171, 182, 183, 184, 105, 488, 848, 152, 1542, - 153, 790, 956, 2020, 1860, 122, 123, 144, 143, 170, - 1361, 1362, 1363, 2018, 499, 1359, 113, 503, 964, 104, - 107, 172, 497, 585, 877, 2183, 1832, 155, 1596, 2144, + 579, 2245, 2234, 1999, 2189, 1860, 2173, 2211, 2089, 1747, + 2161, 83, 3, 2111, 1714, 1927, 1598, 1928, 1829, 939, + 1531, 1021, 551, 1996, 1458, 1075, 1068, 537, 1748, 1924, + 592, 1648, 1564, 1734, 1833, 1812, 520, 769, 1813, 1569, + 1510, 147, 1886, 1939, 522, 1674, 1182, 1177, 1811, 180, + 1102, 1596, 180, 1205, 485, 180, 626, 919, 133, 81, + 501, 1571, 180, 1415, 1805, 794, 1321, 1112, 892, 1105, + 180, 1492, 1223, 1073, 1078, 1407, 1499, 1460, 1098, 586, + 1095, 1384, 1060, 957, 33, 776, 1441, 513, 1096, 524, + 886, 773, 501, 1181, 1212, 501, 180, 501, 1475, 1550, + 781, 800, 1187, 1560, 829, 797, 601, 1296, 777, 795, + 796, 623, 1085, 1515, 79, 552, 34, 1111, 1326, 1109, + 110, 508, 111, 116, 117, 1197, 871, 150, 78, 84, + 8, 1852, 1851, 1172, 7, 6, 1627, 1282, 958, 937, + 1037, 2113, 1874, 1875, 182, 183, 184, 1373, 1372, 1371, + 34, 1370, 1369, 460, 1368, 1034, 1455, 1456, 1361, 2203, + 770, 608, 612, 1712, 587, 958, 86, 87, 88, 89, + 90, 91, 118, 112, 2157, 182, 183, 184, 2068, 511, + 834, 512, 1973, 2135, 2134, 509, 833, 2084, 1549, 832, + 2085, 627, 807, 2251, 610, 588, 2208, 2244, 80, 1664, + 2184, 2237, 2000, 1615, 968, 2207, 1183, 2183, 1903, 2032, + 786, 620, 789, 2147, 983, 982, 992, 993, 985, 986, + 987, 988, 989, 990, 991, 984, 810, 1574, 994, 104, + 788, 968, 787, 785, 1634, 477, 1778, 112, 1633, 1777, + 831, 1113, 1779, 1114, 476, 835, 836, 837, 1954, 1955, + 847, 1526, 1527, 845, 846, 474, 849, 850, 851, 852, + 514, 1516, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 35, 1457, 177, + 72, 39, 40, 956, 1713, 107, 1953, 99, 926, 1873, + 928, 1662, 102, 1525, 471, 101, 100, 911, 489, 964, + 848, 583, 870, 483, 790, 582, 112, 1573, 182, 183, + 184, 1795, 564, 811, 570, 571, 568, 569, 912, 567, + 566, 565, 2023, 1362, 1363, 1364, 964, 925, 927, 572, + 573, 905, 899, 900, 935, 1543, 2186, 2021, 1418, 842, + 499, 1360, 105, 1862, 107, 503, 453, 454, 497, 877, + 489, 488, 71, 897, 1307, 1305, 1306, 898, 899, 900, + 585, 1834, 1856, 1597, 1272, 107, 172, 1630, 1302, 1309, + 1857, 1310, 1297, 1311, 2236, 932, 872, 461, 463, 464, + 918, 480, 482, 490, 2204, 916, 917, 478, 479, 491, + 465, 466, 495, 494, 481, 881, 470, 467, 469, 475, + 1865, 105, 1887, 488, 473, 492, 1273, 1642, 1274, 914, + 915, 2131, 913, 854, 853, 1864, 489, 934, 1301, 1863, + 489, 1299, 1303, 809, 2079, 906, 1599, 818, 816, 176, + 924, 1493, 2148, 923, 929, 963, 960, 961, 962, 967, + 969, 966, 827, 965, 826, 809, 1889, 106, 825, 922, + 959, 824, 180, 1191, 885, 823, 1972, 180, 822, 1300, + 180, 821, 963, 960, 961, 962, 967, 969, 966, 488, + 965, 820, 815, 488, 791, 828, 2080, 959, 930, 1575, + 1632, 2252, 2182, 489, 109, 1516, 501, 501, 501, 878, + 774, 2223, 774, 175, 774, 803, 772, 1647, 802, 909, + 887, 931, 1188, 809, 501, 501, 106, 844, 1891, 2249, + 1895, 614, 1890, 809, 1888, 1866, 809, 950, 1621, 1893, + 819, 817, 1211, 1210, 1314, 944, 1663, 106, 1892, 493, + 895, 838, 901, 902, 903, 904, 488, 1821, 1629, 933, + 2174, 1894, 1896, 1912, 1911, 1910, 784, 486, 1715, 1717, + 2187, 783, 782, 936, 1844, 884, 780, 459, 2168, 808, + 809, 451, 487, 2052, 1641, 812, 802, 1640, 1952, 1284, + 1283, 1285, 1286, 1287, 1693, 813, 1690, 1617, 1006, 1007, + 1739, 808, 1650, 180, 1682, 888, 1607, 1649, 802, 805, + 806, 1521, 774, 814, 1650, 1089, 799, 803, 1019, 1649, + 1066, 938, 938, 938, 896, 73, 890, 984, 1774, 1004, + 994, 501, 1065, 1532, 180, 798, 180, 180, 994, 501, + 920, 34, 1471, 1327, 1356, 501, 941, 942, 971, 974, + 908, 2139, 94, 894, 1003, 1005, 953, 1022, 623, 808, + 951, 952, 910, 830, 974, 1716, 802, 805, 806, 808, + 774, 843, 808, 876, 799, 803, 1094, 2247, 812, 802, + 2248, 1061, 2246, 880, 1905, 1018, 1937, 1298, 813, 1023, + 1024, 1025, 1026, 1027, 1028, 1029, 1030, 95, 1033, 1035, + 1038, 1038, 1038, 1035, 1038, 1038, 1035, 1038, 1051, 1052, + 1053, 1054, 1055, 1056, 1057, 1115, 808, 954, 1792, 1787, + 1063, 1616, 879, 1058, 34, 1442, 1040, 1042, 1079, 1045, + 1047, 975, 1050, 1006, 1007, 1006, 1007, 1587, 627, 1067, + 1036, 1039, 1041, 1043, 1044, 1046, 1048, 1049, 1442, 1391, + 1700, 1100, 1614, 873, 1612, 874, 921, 818, 875, 1328, + 973, 971, 1788, 1389, 1390, 1388, 893, 514, 985, 986, + 987, 988, 989, 990, 991, 984, 1032, 974, 994, 182, + 183, 184, 1609, 1409, 1790, 816, 1609, 1785, 2253, 180, + 182, 183, 184, 1173, 1800, 1379, 1381, 1382, 2238, 1786, + 1957, 2228, 1082, 1184, 1185, 1186, 1613, 1380, 1071, 1074, + 1611, 987, 988, 989, 990, 991, 984, 1110, 501, 994, + 1207, 71, 1476, 1477, 1291, 174, 2239, 2067, 1216, 2229, + 2066, 1978, 1220, 1387, 1688, 501, 501, 1809, 501, 1410, + 501, 501, 1687, 501, 501, 501, 501, 501, 501, 2232, + 1801, 1667, 1668, 1669, 1914, 1203, 2254, 1808, 501, 1793, + 1791, 1578, 180, 1256, 972, 973, 971, 972, 973, 971, + 1444, 613, 1196, 1292, 1277, 1217, 1473, 1276, 1269, 1275, + 1267, 1215, 974, 1290, 1261, 974, 182, 183, 184, 501, + 1781, 180, 182, 183, 184, 1253, 1591, 180, 1258, 1257, + 1251, 1252, 1915, 2231, 972, 973, 971, 180, 1225, 618, + 1226, 180, 1228, 1230, 1189, 1190, 1234, 1236, 1238, 1240, + 1242, 1214, 974, 779, 1289, 1232, 1179, 180, 2230, 1279, + 1180, 182, 183, 184, 180, 1589, 1194, 1192, 1193, 1472, + 2219, 180, 180, 180, 180, 180, 180, 180, 180, 180, + 501, 501, 501, 1206, 595, 2217, 2102, 1077, 1254, 2064, + 2040, 615, 616, 1960, 972, 973, 971, 1323, 1916, 1818, + 1789, 1806, 1259, 1260, 1658, 1329, 1330, 180, 1265, 1266, + 1625, 1624, 974, 1288, 972, 973, 971, 1810, 1278, 1334, + 1324, 1280, 1907, 1689, 1331, 1268, 1341, 1264, 1263, 1320, + 2035, 1335, 974, 1337, 1338, 1339, 1340, 1262, 1342, 1064, + 1859, 972, 973, 971, 596, 1408, 1985, 2222, 1213, 1213, + 1385, 788, 1357, 787, 1411, 1985, 2180, 1367, 112, 974, + 1936, 182, 183, 184, 1315, 1270, 1985, 2169, 501, 182, + 183, 184, 1985, 596, 1985, 2137, 1333, 983, 982, 992, + 993, 985, 986, 987, 988, 989, 990, 991, 984, 1419, + 2129, 994, 80, 1412, 1413, 938, 938, 938, 1425, 2082, + 596, 2128, 501, 501, 1609, 596, 1998, 972, 973, 971, + 2050, 596, 1836, 180, 1985, 1990, 1820, 1386, 82, 1352, + 1353, 1354, 1430, 1433, 1925, 974, 1421, 501, 1443, 1970, + 1969, 1966, 1967, 1936, 180, 1465, 1420, 501, 1517, 1325, + 1022, 180, 1735, 180, 1966, 1965, 1466, 1484, 596, 1516, + 1853, 180, 180, 1176, 1838, 1735, 1478, 35, 501, 1419, + 1540, 501, 1511, 1831, 1832, 1496, 596, 1610, 1449, 1450, + 596, 2069, 501, 970, 596, 1176, 1175, 623, 1121, 1120, + 623, 1517, 1742, 2047, 1484, 1422, 992, 993, 985, 986, + 987, 988, 989, 990, 991, 984, 1421, 1495, 994, 1768, + 1518, 970, 1514, 35, 35, 1743, 1490, 1516, 1520, 1536, + 2138, 1496, 1535, 1485, 1985, 1374, 1375, 1376, 1377, 2070, + 2071, 2072, 1609, 1815, 1936, 1968, 1544, 501, 1545, 1546, + 1547, 1548, 71, 2172, 501, 1496, 1486, 1539, 180, 1247, + 1588, 1590, 1524, 1518, 1556, 1557, 1558, 1559, 1496, 1488, + 1705, 1516, 2118, 501, 1566, 1704, 589, 627, 1484, 501, + 627, 1609, 1592, 1216, 1474, 1216, 1512, 1519, 1453, 1365, + 1428, 1429, 1572, 1608, 1313, 1107, 1523, 1522, 71, 71, + 71, 1538, 1537, 1484, 793, 792, 2091, 1248, 1249, 1250, + 1595, 982, 992, 993, 985, 986, 987, 988, 989, 990, + 991, 984, 1997, 501, 994, 1408, 2058, 1178, 514, 1565, + 1408, 1408, 1858, 1602, 1567, 1561, 1605, 1555, 1606, 1554, + 1294, 1208, 1562, 1563, 1204, 1174, 1577, 96, 1583, 1584, + 1585, 71, 177, 1580, 1814, 1576, 2073, 1579, 1940, 1941, + 1618, 580, 1244, 1861, 1601, 180, 2092, 1183, 1567, 2241, + 180, 180, 180, 180, 180, 1619, 1604, 810, 1600, 2235, + 1530, 1943, 1925, 1826, 180, 180, 1825, 180, 1824, 1581, + 1358, 180, 1316, 1759, 1551, 1552, 1553, 180, 1760, 1815, + 1620, 2074, 2075, 1946, 180, 1622, 1623, 1245, 1246, 1757, + 181, 1945, 1756, 181, 1758, 1628, 181, 1761, 1755, 1505, + 1506, 502, 2225, 181, 2206, 1917, 1724, 1076, 2051, 180, + 501, 181, 1426, 1427, 1988, 1733, 1432, 1435, 1436, 1568, 983, 982, 992, 993, 985, 986, 987, 988, 989, 990, - 991, 984, 897, 1572, 994, 1854, 898, 899, 900, 71, - 1306, 1304, 1305, 1855, 1301, 1629, 1296, 139, 120, 146, - 127, 119, 1272, 140, 141, 964, 872, 913, 156, 934, - 924, 2233, 2201, 923, 929, 107, 906, 99, 161, 128, - 1861, 152, 102, 153, 176, 101, 100, 916, 917, 922, - 932, 918, 170, 131, 129, 124, 125, 126, 130, 1641, - 106, 914, 915, 121, 1273, 1308, 1274, 1309, 1302, 1310, - 1862, 881, 132, 489, 1863, 1298, 854, 489, 853, 1885, - 2128, 2076, 1598, 1492, 1300, 818, 816, 827, 1970, 826, - 825, 824, 105, 823, 822, 809, 821, 820, 809, 815, - 517, 791, 180, 1191, 885, 828, 2246, 180, 175, 1515, - 180, 156, 2077, 109, 963, 960, 961, 962, 967, 969, - 966, 161, 965, 1887, 878, 1299, 488, 489, 930, 959, - 488, 1631, 2249, 1646, 774, 2220, 501, 501, 501, 803, - 774, 774, 106, 802, 148, 772, 909, 895, 1864, 901, - 902, 903, 904, 931, 501, 501, 2179, 1211, 1210, 1791, - 1786, 963, 960, 961, 962, 967, 969, 966, 887, 965, - 936, 1181, 614, 1620, 1662, 1574, 959, 2171, 819, 817, - 488, 1714, 1716, 1313, 944, 1889, 838, 1893, 950, 1888, - 1820, 1886, 1628, 809, 1910, 1909, 1891, 106, 142, 2184, - 1908, 784, 783, 1787, 782, 1890, 1649, 933, 2145, 1443, - 136, 1648, 1842, 137, 884, 1616, 780, 459, 1892, 1894, - 1284, 1283, 1285, 1286, 1287, 1789, 451, 148, 1784, 1640, - 1649, 808, 1639, 180, 808, 1648, 2165, 812, 802, 2049, - 1785, 802, 805, 806, 809, 774, 1950, 813, 1738, 799, - 803, 1681, 1004, 896, 2244, 941, 942, 2245, 809, 2243, - 1531, 501, 73, 1606, 180, 814, 180, 180, 798, 501, - 1692, 1066, 1006, 1007, 1520, 501, 1089, 908, 1715, 1019, - 1065, 1689, 623, 890, 994, 953, 951, 952, 888, 910, - 1773, 1022, 880, 595, 984, 1390, 844, 994, 1470, 894, - 1792, 1790, 809, 876, 1355, 974, 2136, 830, 1094, 1388, - 1389, 1387, 94, 1061, 149, 154, 151, 157, 158, 159, - 160, 162, 163, 164, 165, 972, 973, 971, 1079, 808, - 166, 167, 168, 169, 1935, 920, 802, 805, 806, 1615, - 774, 1326, 971, 974, 799, 803, 1297, 1580, 975, 1036, - 1039, 1041, 1043, 1044, 1046, 1048, 1049, 95, 974, 1058, - 1115, 1040, 1042, 1077, 1045, 1047, 954, 1050, 983, 982, - 992, 993, 985, 986, 987, 988, 989, 990, 991, 984, - 808, 879, 994, 873, 514, 874, 812, 802, 875, 1903, - 627, 973, 971, 1032, 808, 1441, 813, 149, 154, 151, - 157, 158, 159, 160, 162, 163, 164, 165, 974, 1006, - 1007, 1788, 893, 166, 167, 168, 169, 1613, 1611, 180, - 1006, 1007, 1067, 1173, 818, 1071, 1074, 816, 1674, 972, - 973, 971, 1955, 1185, 1186, 1187, 1608, 1905, 808, 1608, - 843, 987, 988, 989, 990, 991, 984, 974, 501, 994, - 1207, 921, 182, 183, 184, 1082, 1408, 1327, 1216, 1441, - 1612, 1699, 1220, 1610, 174, 501, 501, 2235, 501, 1291, - 501, 501, 1217, 501, 501, 501, 501, 501, 501, 2250, - 1189, 1190, 182, 183, 184, 2064, 1799, 71, 501, 1203, - 1289, 1110, 180, 1256, 613, 2236, 2063, 1251, 1252, 1386, - 985, 986, 987, 988, 989, 990, 991, 984, 1269, 1196, - 994, 1279, 1409, 1225, 1976, 1226, 1808, 1228, 1230, 501, - 2225, 1234, 1236, 1238, 1240, 1242, 1807, 180, 1290, 1253, - 1577, 1215, 1472, 1292, 1378, 1380, 1381, 180, 1259, 1260, - 1277, 180, 1800, 1276, 1265, 1266, 1379, 2251, 2226, 1288, - 1213, 1213, 1275, 1687, 1666, 1667, 1668, 180, 1179, 1267, - 1188, 1686, 779, 1214, 180, 1193, 1194, 1206, 1912, 1192, - 1278, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 501, 501, 501, 618, 615, 616, 972, 973, 971, 1261, - 1258, 1330, 182, 183, 184, 1471, 1780, 2229, 1334, 1257, - 1336, 1337, 1338, 1339, 974, 1341, 1232, 180, 2032, 1322, - 1254, 182, 183, 184, 596, 1590, 1913, 2228, 2227, 1356, - 972, 973, 971, 1328, 1329, 596, 1008, 1009, 1010, 1011, - 1012, 1013, 1014, 1015, 1016, 1017, 2216, 1333, 974, 1475, - 1476, 2214, 1384, 2099, 1340, 1407, 2061, 788, 1314, 2037, - 112, 787, 1319, 1958, 1410, 983, 982, 992, 993, 985, - 986, 987, 988, 989, 990, 991, 984, 1914, 501, 994, - 1332, 983, 982, 992, 993, 985, 986, 987, 988, 989, - 990, 991, 984, 1418, 1688, 994, 182, 183, 184, 1429, - 1432, 1411, 1412, 1809, 1817, 1442, 1805, 1366, 1351, 1352, - 1353, 1657, 501, 501, 182, 183, 184, 1624, 1588, 1623, - 1385, 1323, 1280, 180, 1268, 1264, 1424, 972, 973, 971, - 1263, 972, 973, 971, 1262, 1064, 1324, 501, 1857, 1419, - 1983, 2219, 1464, 2126, 180, 974, 2125, 501, 1420, 974, - 1923, 180, 1996, 180, 1022, 80, 182, 183, 184, 1934, - 1270, 180, 180, 1418, 1983, 2177, 1448, 1449, 501, 1983, - 2166, 501, 1983, 596, 1983, 2134, 2079, 596, 972, 973, - 971, 623, 501, 1834, 623, 1421, 540, 539, 542, 543, - 544, 545, 1819, 1510, 1516, 541, 974, 546, 1425, 1426, - 1608, 596, 1431, 1434, 1435, 1550, 1551, 1552, 1734, 1489, - 2047, 596, 1373, 1374, 1375, 1376, 1485, 1516, 1420, 1983, - 1988, 1968, 1967, 1535, 1964, 1965, 1534, 1609, 1447, 1964, - 1963, 1450, 1451, 596, 1483, 596, 35, 501, 1515, 1851, - 1734, 180, 1176, 1836, 82, 501, 1538, 1829, 1830, 180, - 1587, 1589, 1513, 1495, 596, 35, 1517, 1539, 1487, 970, - 596, 1565, 1934, 501, 1519, 1176, 1175, 1427, 1428, 501, - 1121, 1120, 1571, 1216, 1518, 1216, 2044, 1495, 1522, 1517, - 1741, 1494, 1608, 1607, 2115, 1537, 1465, 1515, 970, 627, - 1536, 1767, 627, 1521, 1484, 2135, 1477, 1983, 1966, 1515, - 1495, 2066, 1523, 1742, 1594, 514, 35, 1704, 1703, 1934, - 1483, 71, 589, 501, 1483, 1407, 1608, 1591, 1473, 1452, - 1407, 1407, 1543, 1364, 1544, 1545, 1546, 1547, 1561, 1562, - 71, 1814, 1495, 1578, 1566, 1575, 580, 1583, 1584, 1585, - 1555, 1556, 1557, 1558, 1312, 1576, 1604, 1107, 1605, 2067, - 2068, 2069, 1247, 2169, 1617, 180, 811, 1529, 1600, 180, - 180, 180, 180, 180, 1483, 1619, 1213, 793, 1566, 1599, - 1621, 1622, 1618, 180, 180, 180, 180, 810, 1603, 792, - 180, 71, 71, 2088, 1995, 181, 180, 71, 181, 2055, - 1178, 181, 1564, 180, 1856, 1601, 502, 1560, 181, 2031, - 1248, 1249, 1250, 1944, 1554, 1553, 181, 1294, 1208, 1204, - 1174, 96, 177, 2070, 1938, 1939, 1567, 1859, 180, 501, - 2089, 1184, 2238, 2232, 1652, 1653, 1941, 1923, 502, 1655, - 1825, 502, 181, 502, 1813, 1824, 1656, 1244, 1823, 1581, - 1357, 1315, 1943, 1755, 1754, 1627, 983, 982, 992, 993, - 985, 986, 987, 988, 989, 990, 991, 984, 2071, 2072, - 994, 1760, 1384, 1504, 1505, 1644, 983, 982, 992, 993, - 985, 986, 987, 988, 989, 990, 991, 984, 2222, 1814, - 994, 1758, 1245, 1246, 1756, 2203, 1759, 1382, 1915, 1757, - 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, - 1401, 1402, 1403, 1404, 1405, 1723, 1076, 2188, 2048, 181, - 1986, 1732, 1660, 180, 1731, 2187, 1500, 1503, 1504, 1505, - 1501, 180, 1502, 1506, 2159, 2161, 1938, 1939, 2224, 2207, - 1385, 2209, 2191, 2162, 1669, 992, 993, 985, 986, 987, - 988, 989, 990, 991, 984, 180, 98, 994, 2156, 1444, - 1311, 581, 1720, 1818, 1437, 840, 180, 180, 180, 180, - 180, 103, 606, 602, 1727, 1721, 1748, 1682, 180, 1438, - 587, 839, 180, 1722, 1069, 180, 180, 2007, 603, 180, - 180, 180, 1739, 1698, 1743, 1813, 1070, 1736, 1870, 943, - 1678, 1679, 1779, 1061, 1710, 1844, 1843, 452, 113, 1718, - 2113, 1080, 1081, 605, 1765, 604, 1726, 1960, 1959, 173, - 1798, 1696, 455, 1602, 1795, 1796, 1222, 1768, 1735, 1221, - 1209, 1770, 1737, 2042, 1475, 1476, 1750, 1751, 1797, 1753, - 1801, 1802, 1803, 1468, 1761, 1749, 1821, 1318, 1752, 1782, - 1422, 1423, 180, 2127, 1766, 1683, 1771, 1774, 2083, 1322, - 1730, 1508, 1307, 501, 590, 591, 1665, 593, 1729, 501, - 1783, 2215, 501, 2213, 1216, 2212, 1571, 2192, 1833, 501, - 2190, 2041, 1982, 1816, 1592, 594, 1806, 82, 1918, 1837, - 1839, 1848, 2040, 1700, 606, 602, 1466, 1815, 1734, 180, - 1500, 1503, 1504, 1505, 1501, 1693, 1502, 1506, 1690, 1847, - 603, 2240, 2239, 589, 1090, 1083, 2240, 180, 2163, 1846, - 1957, 1469, 80, 1724, 1725, 1074, 85, 1196, 77, 1, - 472, 1453, 1059, 599, 600, 605, 1419, 604, 484, 2230, - 1281, 1271, 1999, 2085, 1989, 1420, 1845, 1838, 1569, 801, - 138, 1532, 501, 1533, 2173, 93, 767, 92, 1407, 804, - 907, 1593, 2080, 1793, 1541, 1881, 1127, 1125, 1126, 1866, - 1124, 1865, 1129, 1128, 1123, 1358, 498, 1507, 178, 1116, - 1883, 1084, 841, 462, 1969, 1354, 1625, 468, 501, 1874, - 1002, 1728, 1775, 624, 617, 1929, 1882, 1868, 181, 180, - 1869, 2185, 1880, 181, 2155, 1896, 181, 2157, 1895, 501, - 1902, 2109, 2160, 2153, 2223, 501, 501, 2206, 1540, 1467, - 1924, 1072, 1881, 1748, 2039, 1917, 1697, 1927, 1031, 1439, - 1099, 523, 502, 502, 502, 1911, 1463, 1377, 180, 538, - 535, 536, 1478, 1740, 976, 521, 515, 1091, 1933, 1499, - 502, 502, 982, 992, 993, 985, 986, 987, 988, 989, - 990, 991, 984, 1932, 1497, 994, 1496, 1942, 1946, 1316, - 1948, 1103, 1949, 1940, 1936, 1097, 1482, 1630, 1853, 955, - 1947, 598, 510, 97, 1436, 1961, 1962, 2026, 2143, 1977, - 1664, 180, 2028, 597, 180, 180, 180, 1954, 61, 38, - 501, 505, 2199, 946, 607, 32, 31, 30, 29, 1670, - 1671, 1672, 28, 180, 1985, 23, 22, 21, 20, 19, - 1973, 1972, 25, 18, 1974, 1975, 17, 16, 108, 181, - 2000, 501, 501, 501, 48, 180, 45, 1990, 43, 115, - 114, 1984, 46, 1571, 2008, 1987, 1993, 42, 882, 1992, - 27, 1904, 26, 15, 14, 13, 12, 502, 11, 10, - 181, 9, 181, 181, 5, 502, 4, 949, 24, 1020, - 1921, 502, 2, 0, 2005, 2006, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1919, 0, 0, 2016, - 0, 0, 0, 2038, 0, 0, 983, 982, 992, 993, - 985, 986, 987, 988, 989, 990, 991, 984, 0, 0, - 994, 0, 0, 0, 0, 0, 1748, 0, 0, 0, - 0, 0, 0, 2043, 0, 0, 0, 0, 0, 0, - 0, 0, 2052, 0, 0, 0, 0, 0, 0, 0, - 1676, 0, 0, 2060, 1677, 2062, 0, 2051, 0, 2058, - 0, 2059, 0, 501, 501, 1684, 1685, 0, 0, 0, - 2057, 1691, 0, 0, 1694, 1695, 501, 0, 0, 501, - 2074, 2073, 1701, 0, 1702, 0, 0, 1705, 1706, 1707, - 1708, 1709, 2087, 2084, 0, 2092, 0, 0, 0, 2013, - 2014, 0, 2015, 1719, 2091, 2017, 0, 2019, 0, 0, - 0, 0, 0, 0, 501, 501, 501, 180, 2090, 0, - 0, 0, 0, 2011, 0, 181, 0, 2107, 501, 0, - 501, 2102, 2104, 2105, 0, 0, 501, 0, 0, 1927, - 2112, 2106, 0, 1927, 0, 2118, 2114, 0, 0, 1763, - 1764, 0, 0, 2121, 502, 0, 0, 0, 180, 2116, - 2123, 0, 2124, 0, 0, 0, 0, 2030, 0, 501, - 180, 502, 502, 0, 502, 0, 502, 502, 0, 502, - 502, 502, 502, 502, 502, 2130, 2137, 0, 0, 0, - 514, 0, 0, 0, 502, 0, 2133, 2053, 181, 0, - 2054, 0, 0, 2056, 0, 1876, 1877, 2152, 0, 0, - 1927, 0, 2164, 0, 0, 0, 501, 501, 0, 0, - 1897, 1898, 0, 1899, 1900, 502, 0, 0, 2172, 2087, - 2174, 0, 0, 181, 1906, 1907, 0, 0, 0, 0, - 2167, 0, 0, 181, 550, 2025, 501, 181, 2189, 2182, - 501, 0, 2193, 2195, 0, 1748, 0, 0, 0, 0, - 0, 2202, 0, 181, 0, 0, 0, 2198, 2211, 2098, - 181, 0, 2210, 182, 183, 184, 0, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 502, 502, 502, 2221, - 0, 0, 2120, 179, 0, 0, 458, 0, 2122, 496, - 0, 171, 2111, 514, 0, 0, 458, 0, 0, 0, - 0, 2024, 0, 181, 458, 2237, 0, 1956, 1878, 1879, - 0, 0, 2247, 0, 0, 0, 113, 0, 0, 0, - 0, 611, 611, 477, 0, 0, 0, 155, 0, 0, - 458, 0, 476, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 474, 983, 982, 992, 993, 985, 986, - 987, 988, 989, 990, 991, 984, 0, 0, 994, 0, - 0, 0, 0, 0, 502, 0, 0, 0, 1781, 0, - 0, 0, 0, 0, 1930, 0, 0, 0, 0, 0, - 0, 152, 471, 153, 0, 2023, 0, 0, 0, 0, - 0, 483, 170, 0, 0, 1945, 2009, 0, 502, 502, - 0, 0, 0, 0, 0, 0, 0, 458, 0, 181, - 983, 982, 992, 993, 985, 986, 987, 988, 989, 990, - 991, 984, 0, 502, 994, 0, 0, 0, 0, 0, - 181, 0, 0, 502, 0, 0, 0, 181, 489, 181, - 0, 0, 0, 0, 0, 0, 0, 181, 181, 0, - 0, 156, 0, 0, 502, 0, 0, 502, 0, 0, - 0, 161, 0, 0, 0, 461, 463, 464, 502, 480, - 482, 490, 0, 0, 0, 478, 479, 491, 465, 466, - 495, 494, 481, 0, 470, 467, 469, 475, 0, 0, - 0, 488, 473, 492, 983, 982, 992, 993, 985, 986, - 987, 988, 989, 990, 991, 984, 0, 0, 994, 0, - 2010, 0, 0, 0, 2012, 0, 0, 0, 0, 0, - 0, 0, 0, 502, 0, 2021, 2022, 181, 0, 0, - 0, 502, 0, 0, 0, 181, 0, 0, 0, 0, - 0, 2036, 0, 0, 2093, 2094, 2095, 2096, 2097, 502, - 0, 0, 2100, 2101, 0, 502, 0, 0, 2045, 2046, - 0, 978, 2050, 981, 0, 0, 0, 148, 0, 995, - 996, 997, 998, 999, 1000, 1001, 0, 979, 980, 977, + 991, 984, 1732, 502, 994, 2191, 502, 181, 502, 2227, + 2210, 2212, 1448, 2190, 811, 1451, 1452, 1722, 1653, 1654, + 2162, 2164, 103, 1656, 1213, 1723, 1645, 98, 2194, 2165, + 1657, 1385, 2159, 1312, 581, 978, 1819, 981, 840, 839, + 2010, 1814, 1872, 995, 996, 997, 998, 999, 1000, 1001, + 1675, 979, 980, 977, 983, 982, 992, 993, 985, 986, + 987, 988, 989, 990, 991, 984, 1438, 1069, 994, 1661, + 173, 943, 1846, 455, 180, 1845, 1684, 2116, 452, 1070, + 113, 1439, 180, 540, 539, 542, 543, 544, 545, 1962, + 1670, 1961, 541, 1603, 546, 1222, 1221, 1209, 1386, 2045, + 1469, 1501, 1504, 1505, 1506, 1502, 180, 1503, 1507, 1476, + 1477, 1940, 1941, 1721, 1827, 1319, 2130, 180, 180, 180, + 180, 180, 1683, 1308, 1744, 1728, 2086, 587, 1509, 180, + 590, 591, 1666, 180, 606, 602, 180, 180, 593, 2218, + 180, 180, 180, 1731, 1766, 1740, 1737, 1699, 2043, 2216, + 603, 1730, 1061, 1780, 2215, 1681, 1711, 2195, 588, 1719, + 1749, 2193, 2044, 1501, 1504, 1505, 1506, 1502, 1727, 1503, + 1507, 1799, 1984, 1080, 1081, 605, 1769, 604, 1593, 1736, + 1771, 594, 82, 1920, 1735, 2243, 2242, 589, 1694, 1691, + 1798, 1090, 1802, 1803, 1804, 1718, 1783, 1750, 1323, 1083, + 1753, 180, 180, 2243, 1762, 1767, 1751, 1752, 2166, 1754, + 1772, 1959, 1775, 1738, 501, 1470, 80, 85, 77, 1, + 501, 1100, 1784, 501, 472, 1216, 1454, 1059, 1745, 1746, + 501, 550, 1100, 1100, 1100, 1100, 1100, 1572, 484, 2233, + 1807, 1839, 1850, 1281, 1271, 2001, 2088, 1841, 1512, 1991, + 180, 1100, 1816, 1570, 801, 1100, 138, 1701, 1533, 1534, + 2176, 1849, 1835, 93, 767, 92, 180, 804, 180, 907, + 1594, 1196, 2083, 1794, 1848, 1542, 1127, 1125, 1840, 1126, + 179, 1124, 1129, 458, 1421, 1128, 496, 1725, 1726, 1074, + 1847, 1123, 1359, 458, 1420, 606, 602, 498, 1817, 1508, + 178, 458, 1116, 501, 1084, 841, 462, 1971, 1355, 1408, + 1626, 603, 468, 1002, 1729, 1868, 1867, 1776, 611, 611, + 624, 617, 1883, 1931, 2188, 2158, 2160, 458, 2112, 1884, + 1870, 1885, 2163, 1871, 599, 600, 605, 1876, 604, 501, + 2156, 2226, 2209, 1904, 1541, 1468, 1843, 1072, 2042, 1919, + 180, 1698, 1898, 1031, 1796, 1797, 1440, 1099, 523, 1464, + 501, 1378, 538, 181, 535, 1882, 501, 501, 181, 536, + 1479, 181, 1926, 1741, 976, 1679, 1680, 521, 515, 1883, + 1091, 1500, 1498, 1497, 1897, 1317, 1929, 1103, 1942, 180, + 1938, 1923, 1097, 1483, 1631, 1855, 1697, 502, 502, 502, + 955, 1935, 598, 510, 97, 1437, 2034, 1749, 2146, 1665, + 2031, 1913, 597, 61, 38, 502, 502, 1944, 505, 2202, + 946, 1948, 607, 1950, 32, 1951, 31, 30, 29, 1949, + 28, 23, 22, 21, 20, 19, 25, 1963, 1964, 1934, + 1979, 18, 180, 17, 1956, 180, 180, 180, 16, 108, + 48, 45, 501, 983, 982, 992, 993, 985, 986, 987, + 988, 989, 990, 991, 984, 180, 43, 994, 115, 1975, + 114, 1974, 46, 42, 882, 27, 26, 15, 14, 1930, + 1992, 34, 2002, 501, 501, 501, 13, 180, 12, 1986, + 11, 1423, 1424, 10, 181, 9, 2011, 517, 1989, 1987, + 5, 4, 1995, 1994, 1100, 1572, 949, 24, 1020, 2, + 0, 0, 0, 0, 0, 1906, 0, 0, 596, 2007, + 0, 0, 502, 0, 0, 181, 0, 181, 181, 0, + 502, 0, 0, 0, 0, 2014, 502, 1467, 0, 1976, + 1977, 0, 0, 0, 2019, 0, 0, 0, 0, 0, + 1921, 0, 0, 0, 0, 2016, 2017, 0, 2018, 2008, + 2009, 2020, 0, 2022, 983, 982, 992, 993, 985, 986, + 987, 988, 989, 990, 991, 984, 2046, 0, 994, 0, + 0, 2054, 0, 0, 0, 2055, 0, 0, 0, 0, + 0, 0, 0, 0, 2060, 0, 0, 0, 0, 0, + 0, 1749, 0, 2061, 0, 501, 501, 2062, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, + 0, 501, 0, 2077, 2076, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2087, 0, 2095, 2030, + 2090, 0, 0, 0, 0, 0, 2036, 2037, 2038, 0, + 0, 0, 0, 0, 0, 0, 0, 501, 501, 501, + 180, 2093, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 501, 0, 501, 0, 2105, 2107, 2108, 0, 501, + 181, 2119, 2101, 458, 2109, 2117, 2115, 2121, 458, 0, + 1929, 458, 0, 0, 1929, 0, 0, 2124, 0, 0, + 0, 180, 0, 0, 2126, 2123, 2127, 0, 0, 502, + 0, 2125, 501, 180, 0, 0, 0, 0, 2136, 2133, + 0, 0, 2033, 0, 2041, 0, 502, 502, 0, 502, + 2140, 502, 502, 0, 502, 502, 502, 502, 502, 502, + 0, 0, 0, 0, 2155, 514, 0, 0, 0, 502, + 0, 0, 2056, 181, 2167, 2057, 0, 0, 2059, 501, + 501, 1929, 2170, 0, 0, 0, 0, 2175, 0, 0, + 0, 0, 0, 0, 2063, 0, 2065, 0, 2090, 2177, + 502, 0, 181, 1930, 0, 34, 0, 1930, 181, 501, + 2185, 2192, 0, 501, 0, 0, 2196, 2198, 181, 0, + 0, 0, 181, 0, 0, 0, 2205, 0, 0, 0, + 0, 2201, 0, 2214, 458, 2213, 0, 0, 181, 0, + 0, 0, 34, 0, 0, 181, 2094, 2029, 0, 2224, + 611, 1749, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 502, 502, 502, 0, 458, 0, 458, 1106, 2110, + 1877, 0, 0, 0, 1930, 0, 2240, 0, 2114, 514, + 0, 0, 0, 0, 0, 2250, 34, 2171, 181, 0, 983, 982, 992, 993, 985, 986, 987, 988, 989, 990, - 991, 984, 0, 549, 994, 0, 0, 0, 0, 502, - 1875, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 493, 0, 2078, - 983, 982, 992, 993, 985, 986, 987, 988, 989, 990, - 991, 984, 0, 0, 994, 486, 0, 0, 0, 0, - 0, 181, 0, 0, 0, 181, 181, 181, 181, 181, - 487, 0, 0, 500, 0, 0, 0, 0, 0, 181, - 181, 181, 181, 2103, 1144, 0, 181, 0, 0, 0, - 0, 0, 181, 0, 0, 0, 0, 0, 0, 181, - 0, 0, 0, 0, 0, 625, 458, 1675, 771, 2196, - 778, 458, 0, 0, 458, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 181, 502, 0, 983, 982, 992, - 993, 985, 986, 987, 988, 989, 990, 991, 984, 0, - 0, 994, 0, 2139, 2140, 2141, 2142, 0, 2146, 0, - 2147, 2148, 2149, 0, 2150, 2151, 0, 149, 154, 151, - 157, 158, 159, 160, 162, 163, 164, 165, 0, 0, - 0, 0, 0, 166, 167, 168, 169, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2178, 0, 0, 0, 1132, 0, 0, - 0, 0, 0, 0, 35, 36, 37, 72, 39, 40, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, - 0, 0, 0, 0, 76, 0, 0, 181, 0, 41, - 67, 68, 0, 65, 69, 0, 0, 458, 0, 0, - 66, 1145, 0, 0, 0, 0, 2217, 2218, 0, 0, - 0, 181, 0, 611, 0, 0, 0, 0, 0, 0, - 0, 0, 181, 181, 181, 181, 181, 0, 458, 54, - 458, 1106, 0, 0, 181, 0, 0, 0, 181, 71, - 0, 181, 181, 0, 0, 181, 181, 181, 0, 0, - 0, 0, 1158, 1161, 1162, 1163, 1164, 1165, 1166, 0, - 1167, 1168, 1169, 1170, 1171, 1146, 1147, 1148, 1149, 1130, - 1131, 1159, 0, 1133, 0, 1134, 1135, 1136, 1137, 1138, - 1139, 1140, 1141, 1142, 1143, 1150, 1151, 1152, 1153, 1154, - 1155, 1156, 1157, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, - 0, 44, 47, 50, 49, 52, 0, 64, 0, 502, - 70, 0, 0, 0, 0, 502, 0, 0, 502, 0, - 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, - 0, 0, 0, 53, 75, 74, 0, 0, 62, 63, - 51, 0, 0, 0, 0, 181, 0, 0, 1160, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 458, 0, 0, 0, 0, 0, 55, - 56, 0, 57, 58, 59, 60, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1219, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, - 1219, 1219, 0, 0, 0, 181, 458, 0, 0, 625, - 625, 625, 0, 0, 0, 502, 0, 0, 0, 0, - 0, 502, 502, 0, 0, 0, 0, 945, 947, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 458, 73, 0, 181, 0, 0, 0, 0, 0, - 0, 458, 0, 0, 0, 1321, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 458, 0, 0, 0, 0, 0, 0, 458, 0, - 0, 0, 0, 0, 0, 1342, 1343, 458, 458, 458, - 458, 458, 458, 458, 0, 0, 0, 181, 0, 0, - 181, 181, 181, 0, 0, 0, 502, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, - 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1062, 1087, 0, 0, 502, 502, 502, - 0, 181, 625, 0, 0, 0, 0, 0, 1117, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 611, 1321, 457, 0, 0, 611, 611, - 0, 0, 611, 611, 611, 504, 0, 0, 1219, 0, - 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 611, 611, - 611, 611, 611, 0, 0, 0, 0, 1461, 0, 775, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 458, 552, - 34, 0, 0, 0, 1321, 458, 0, 458, 0, 502, - 502, 0, 0, 0, 0, 458, 458, 0, 0, 0, - 0, 0, 502, 0, 0, 502, 0, 0, 0, 0, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 870, 0, 0, 0, - 502, 502, 502, 181, 0, 0, 0, 0, 0, 0, - 0, 771, 0, 0, 502, 0, 502, 0, 0, 588, - 0, 0, 502, 0, 1218, 0, 0, 0, 1224, 1224, - 0, 1224, 0, 1224, 1224, 458, 1233, 1224, 1224, 1224, - 1224, 1224, 0, 1586, 181, 0, 0, 0, 0, 1218, - 1218, 771, 0, 0, 0, 502, 181, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1293, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 502, 502, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 502, 0, 0, 0, 502, 0, 0, 0, - 0, 0, 0, 625, 625, 625, 0, 0, 0, 458, - 0, 0, 0, 458, 458, 458, 458, 458, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 458, 458, 458, - 458, 0, 0, 0, 1650, 0, 0, 0, 0, 0, - 458, 0, 0, 0, 0, 0, 0, 458, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1413, 0, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1218, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1445, 1446, 0, 0, 0, - 611, 611, 0, 0, 0, 883, 0, 0, 0, 0, - 889, 0, 0, 891, 0, 0, 0, 0, 0, 0, - 1479, 611, 0, 0, 0, 0, 0, 0, 0, 0, - 1087, 0, 0, 625, 0, 0, 0, 458, 0, 0, - 0, 0, 0, 0, 0, 1461, 0, 0, 0, 0, - 0, 625, 0, 0, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 771, 0, 0, 611, 458, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1219, - 458, 458, 458, 458, 458, 0, 0, 0, 0, 0, - 0, 0, 1762, 0, 0, 0, 458, 0, 0, 458, - 458, 0, 0, 458, 1772, 1321, 0, 0, 0, 0, - 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, - 778, 0, 1826, 0, 0, 0, 0, 0, 1582, 0, - 0, 0, 0, 0, 0, 0, 113, 0, 135, 0, - 0, 0, 0, 0, 0, 0, 771, 155, 0, 0, - 0, 0, 778, 0, 0, 938, 938, 938, 0, 0, - 0, 0, 0, 0, 0, 0, 458, 1093, 0, 0, - 1104, 0, 0, 0, 0, 34, 0, 0, 145, 0, - 0, 1219, 0, 134, 0, 0, 0, 0, 1003, 1005, - 0, 1321, 0, 0, 0, 0, 771, 0, 0, 0, - 0, 152, 0, 153, 0, 0, 0, 0, 1199, 1200, - 144, 143, 170, 458, 0, 0, 0, 0, 0, 1018, - 0, 0, 0, 1023, 1024, 1025, 1026, 1027, 1028, 1029, - 1030, 458, 1033, 1035, 1038, 1038, 1038, 1035, 1038, 1038, - 1035, 1038, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 0, - 0, 0, 0, 0, 1063, 0, 0, 0, 34, 0, - 139, 1201, 146, 171, 1198, 611, 140, 141, 0, 0, - 0, 156, 0, 0, 1195, 0, 0, 0, 0, 0, - 0, 161, 0, 0, 0, 1100, 0, 0, 113, 0, - 135, 0, 0, 0, 0, 0, 0, 0, 0, 155, - 0, 0, 1659, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, - 0, 0, 1122, 0, 0, 0, 1219, 0, 0, 0, - 145, 0, 0, 0, 0, 134, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 458, 152, 0, 153, 0, 0, 0, 0, - 1199, 1200, 144, 143, 170, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, - 0, 0, 0, 0, 0, 1255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 458, 0, 0, 458, 458, - 458, 0, 139, 1201, 146, 0, 1198, 1219, 140, 141, - 0, 0, 0, 156, 0, 0, 0, 458, 0, 0, - 1303, 0, 0, 161, 0, 0, 0, 0, 1218, 0, - 1317, 142, 0, 0, 0, 0, 0, 0, 0, 458, - 0, 0, 0, 136, 0, 0, 137, 0, 0, 0, - 1331, 0, 0, 0, 0, 0, 0, 1335, 0, 0, - 0, 0, 0, 0, 0, 0, 1344, 1345, 1346, 1347, - 1348, 1349, 1350, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1104, 0, 0, 0, 0, 0, 0, 0, 0, 1219, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1828, 0, 0, 148, - 1218, 0, 1835, 0, 0, 1828, 0, 0, 0, 0, - 625, 0, 1840, 0, 0, 0, 0, 149, 154, 151, - 157, 158, 159, 160, 162, 163, 164, 165, 0, 0, - 0, 0, 0, 166, 167, 168, 169, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 142, 0, 0, 0, 0, 0, 938, - 938, 938, 0, 0, 0, 136, 0, 0, 137, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1461, 0, 0, 0, 625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1486, 0, 0, - 0, 0, 0, 0, 1490, 0, 1493, 0, 0, 0, - 0, 0, 0, 0, 0, 1512, 0, 0, 0, 0, - 0, 1224, 458, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, - 0, 0, 625, 0, 0, 1218, 0, 0, 1931, 1224, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, - 154, 151, 157, 158, 159, 160, 162, 163, 164, 165, - 0, 0, 0, 0, 0, 166, 167, 168, 169, 0, - 0, 0, 0, 0, 1579, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1219, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1511, 0, 0, 771, 0, 0, 1218, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2001, 2002, 2003, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1104, 0, - 0, 0, 1634, 1635, 1636, 1637, 1638, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1642, 1643, 1104, 1645, - 0, 0, 0, 0, 0, 0, 0, 0, 1218, 1651, - 0, 0, 0, 0, 0, 0, 1654, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1658, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1828, 2075, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1828, - 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1828, 1828, 1828, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2117, 0, 2119, 0, 0, 0, 0, 0, 1828, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1828, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1769, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, - 625, 0, 0, 0, 0, 0, 0, 0, 1680, 0, - 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1218, 0, 2194, - 0, 0, 0, 1828, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1717, 0, - 0, 0, 0, 0, 0, 1822, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1100, 0, 0, 0, 0, 0, - 0, 1744, 1745, 0, 0, 1100, 1100, 1100, 1100, 1100, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1511, 1852, 0, 1100, 0, 0, 0, 1100, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1867, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1841, - 0, 0, 1916, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1978, 0, 0, 1979, 1980, 1981, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1991, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1928, 0, 34, 0, 0, 0, 2004, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1100, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2027, 0, 0, 0, 0, 0, 0, 2033, 2034, - 2035, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2129, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2138, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 991, 984, 1677, 0, 994, 0, 1678, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1685, 1686, 0, + 0, 0, 0, 1692, 0, 0, 1695, 1696, 0, 0, + 0, 0, 0, 0, 1702, 0, 1703, 0, 0, 1706, + 1707, 1708, 1709, 1710, 0, 0, 0, 0, 0, 502, + 0, 1676, 0, 0, 2028, 1720, 983, 982, 992, 993, + 985, 986, 987, 988, 989, 990, 991, 984, 0, 0, + 994, 983, 982, 992, 993, 985, 986, 987, 988, 989, + 990, 991, 984, 502, 502, 994, 2027, 0, 0, 0, + 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, + 0, 1764, 1765, 0, 0, 0, 0, 0, 502, 0, + 0, 0, 0, 0, 0, 181, 0, 0, 502, 0, + 458, 0, 181, 0, 181, 0, 0, 0, 0, 0, + 0, 0, 181, 181, 2026, 0, 0, 0, 0, 502, + 0, 0, 502, 1008, 1009, 1010, 1011, 1012, 1013, 1014, + 1015, 1016, 1017, 502, 0, 0, 0, 0, 0, 0, + 0, 0, 1219, 983, 982, 992, 993, 985, 986, 987, + 988, 989, 990, 991, 984, 0, 0, 994, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1219, 1219, 0, + 0, 0, 0, 458, 0, 983, 982, 992, 993, 985, + 986, 987, 988, 989, 990, 991, 984, 0, 502, 994, + 0, 0, 0, 0, 0, 502, 0, 0, 0, 181, + 0, 0, 458, 0, 0, 0, 0, 0, 458, 0, + 0, 0, 0, 0, 502, 0, 0, 0, 458, 0, + 502, 0, 1322, 983, 982, 992, 993, 985, 986, 987, + 988, 989, 990, 991, 984, 0, 0, 994, 458, 0, + 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, + 1880, 1881, 1343, 1344, 458, 458, 458, 458, 458, 458, + 458, 0, 0, 0, 502, 983, 982, 992, 993, 985, + 986, 987, 988, 989, 990, 991, 984, 0, 0, 994, + 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 549, 0, 0, 181, 0, 0, 0, + 0, 181, 181, 181, 181, 181, 1932, 0, 0, 0, + 0, 0, 0, 0, 0, 181, 181, 0, 181, 0, + 0, 0, 181, 0, 0, 0, 0, 1947, 181, 0, + 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, + 611, 1322, 0, 0, 0, 611, 611, 0, 0, 611, + 611, 611, 0, 500, 0, 1219, 0, 0, 0, 0, + 181, 502, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 611, 611, 611, 611, + 0, 0, 0, 0, 1462, 625, 0, 0, 771, 0, + 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, + 0, 1322, 458, 0, 458, 0, 0, 0, 0, 0, + 0, 0, 458, 458, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, + 0, 0, 0, 2013, 0, 0, 0, 2015, 0, 0, + 0, 0, 0, 0, 0, 181, 0, 0, 2024, 2025, + 0, 113, 0, 181, 0, 0, 0, 0, 0, 0, + 0, 0, 155, 0, 2039, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, + 0, 2048, 2049, 0, 0, 2053, 0, 0, 181, 181, + 181, 181, 181, 0, 0, 0, 0, 0, 0, 1586, + 181, 0, 0, 1782, 181, 0, 0, 181, 181, 0, + 0, 181, 181, 181, 0, 0, 152, 0, 153, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2081, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1383, 0, 0, 1392, 1393, 1394, + 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, + 1405, 1406, 181, 181, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 502, 156, 2106, 0, 0, + 0, 502, 0, 0, 502, 0, 161, 0, 0, 0, + 0, 502, 0, 0, 0, 0, 458, 0, 0, 0, + 0, 458, 458, 458, 458, 458, 1445, 1062, 0, 0, + 0, 181, 0, 0, 0, 458, 458, 0, 458, 0, + 0, 0, 1651, 0, 0, 0, 0, 181, 458, 181, + 0, 0, 0, 0, 0, 458, 0, 2142, 2143, 2144, + 2145, 0, 2149, 0, 2150, 2151, 2152, 0, 2153, 2154, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, + 458, 0, 0, 0, 502, 0, 0, 0, 0, 504, + 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2181, 0, 0, + 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, + 502, 0, 0, 775, 0, 0, 0, 0, 0, 0, + 0, 181, 0, 0, 0, 0, 0, 0, 611, 611, + 0, 502, 0, 0, 0, 0, 0, 502, 502, 0, + 0, 0, 0, 0, 0, 0, 0, 171, 0, 611, + 2220, 2221, 0, 0, 0, 0, 0, 0, 0, 0, + 181, 0, 0, 0, 0, 458, 0, 0, 0, 625, + 625, 625, 113, 1462, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 155, 0, 0, 0, 945, 947, 0, + 0, 0, 0, 0, 0, 0, 611, 458, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1219, 458, 458, + 458, 458, 458, 181, 0, 0, 181, 181, 181, 0, + 1763, 0, 0, 502, 458, 0, 0, 458, 458, 0, + 0, 458, 1773, 1322, 0, 0, 181, 152, 0, 153, + 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, + 0, 0, 0, 0, 502, 502, 502, 0, 181, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 149, 154, 151, 157, 158, 159, 160, 162, + 163, 164, 165, 0, 0, 0, 0, 0, 166, 167, + 168, 169, 458, 458, 1087, 0, 0, 0, 0, 0, + 0, 0, 625, 0, 0, 0, 0, 156, 1117, 1219, + 0, 0, 0, 0, 0, 0, 0, 161, 0, 1322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 458, 0, 458, + 0, 0, 0, 0, 0, 0, 0, 1671, 1672, 1673, + 0, 0, 0, 0, 0, 0, 502, 502, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, + 0, 0, 502, 611, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 148, 0, 0, 0, 0, 502, 502, + 502, 181, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 458, 502, 0, 502, 0, 0, 0, 0, 0, + 502, 0, 0, 0, 1219, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 883, + 0, 0, 181, 0, 889, 0, 0, 891, 0, 0, + 458, 771, 0, 502, 181, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1218, 0, 0, 0, 1224, 1224, + 0, 1224, 0, 1224, 1224, 0, 1233, 1224, 1224, 1224, + 1224, 1224, 0, 0, 0, 0, 0, 0, 0, 1218, + 1218, 771, 0, 0, 0, 0, 0, 0, 0, 0, + 502, 502, 0, 458, 0, 0, 458, 458, 458, 0, + 0, 0, 0, 0, 0, 0, 1219, 0, 0, 0, + 0, 0, 1293, 0, 0, 0, 458, 0, 0, 0, + 502, 0, 0, 0, 502, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 149, 154, 151, 157, 158, 159, 160, + 162, 163, 164, 165, 0, 0, 0, 0, 0, 166, + 167, 168, 169, 625, 625, 625, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1093, 0, 0, 1104, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1219, 0, + 0, 0, 0, 1878, 1879, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1899, 1900, + 0, 1901, 1902, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1908, 1909, 0, 0, 0, 0, 0, 35, + 36, 37, 72, 39, 40, 0, 0, 0, 0, 0, + 0, 1414, 0, 625, 0, 0, 0, 0, 0, 76, + 0, 0, 0, 0, 41, 67, 68, 1218, 65, 69, + 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1446, 1447, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1462, 0, 0, 54, 0, 0, 0, 0, 0, + 1480, 0, 0, 0, 71, 1958, 0, 0, 0, 0, + 1087, 0, 0, 625, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1122, 0, 0, 0, + 0, 625, 458, 0, 625, 0, 0, 0, 0, 171, + 0, 0, 0, 0, 458, 771, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 113, 0, 135, 0, 0, 0, + 0, 0, 0, 0, 0, 155, 44, 47, 50, 49, + 52, 0, 64, 0, 0, 70, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2012, 0, 0, 0, 1255, + 778, 0, 0, 0, 0, 0, 145, 1582, 53, 75, + 74, 134, 0, 62, 63, 51, 0, 0, 1219, 0, + 0, 0, 0, 0, 0, 0, 771, 0, 1295, 152, + 0, 153, 778, 0, 1304, 0, 122, 123, 144, 143, + 170, 0, 0, 0, 1318, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 55, 56, 0, 57, 58, 59, + 60, 0, 0, 0, 1332, 0, 0, 0, 0, 0, + 0, 1336, 0, 0, 0, 0, 771, 0, 0, 0, + 1345, 1346, 1347, 1348, 1349, 1350, 1351, 0, 139, 120, + 146, 127, 119, 0, 140, 141, 0, 0, 0, 156, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, + 128, 0, 0, 0, 1104, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 131, 129, 124, 125, 126, 130, + 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, + 0, 0, 0, 132, 2096, 2097, 2098, 2099, 2100, 0, + 0, 0, 2103, 2104, 0, 0, 0, 73, 0, 0, + 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1828, 0, 0, 0, + 0, 0, 0, 1660, 0, 0, 0, 0, 0, 0, + 113, 0, 135, 0, 0, 0, 0, 0, 0, 0, + 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 145, 0, 0, 0, 0, 134, 0, 0, + 0, 1487, 0, 0, 0, 0, 0, 0, 1491, 0, + 1494, 0, 0, 0, 0, 152, 0, 153, 0, 1513, + 171, 0, 1199, 1200, 144, 143, 170, 0, 0, 142, + 0, 1195, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 136, 0, 0, 137, 113, 0, 135, 0, 2199, + 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 139, 1201, 146, 0, 1198, 1218, + 140, 141, 0, 0, 0, 156, 0, 145, 0, 0, + 0, 0, 134, 0, 0, 161, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 152, 0, 153, 0, 0, 0, 0, 1199, 1200, 144, + 143, 170, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 149, 154, 151, 157, 158, + 159, 160, 162, 163, 164, 165, 0, 0, 0, 0, + 0, 166, 167, 168, 169, 0, 0, 0, 0, 139, + 1201, 146, 0, 1198, 0, 140, 141, 1830, 0, 0, + 156, 1218, 0, 1837, 0, 0, 1830, 0, 0, 0, + 161, 625, 0, 1842, 0, 0, 0, 0, 0, 0, + 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1104, 0, 0, 0, 0, 1635, 1636, 1637, + 1638, 1639, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1643, 1644, 0, 1646, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1652, 0, 0, 0, 0, 0, + 0, 1655, 0, 0, 0, 142, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 625, 136, 0, 0, + 137, 0, 0, 0, 0, 0, 1659, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1144, 0, 0, 0, 148, 0, 0, 0, + 0, 0, 1224, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 625, 0, 0, 1218, 0, 0, 1933, + 1224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 136, 0, 0, 137, 0, 0, 0, 0, + 0, 149, 154, 151, 157, 158, 159, 160, 162, 163, + 164, 165, 0, 0, 0, 0, 0, 166, 167, 168, + 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1132, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 771, 0, 0, 1218, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1770, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2003, 2004, 2005, 1145, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 149, 154, 151, 157, + 158, 159, 160, 162, 163, 164, 165, 0, 0, 0, + 0, 0, 166, 167, 168, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1822, 1823, + 1158, 1161, 1162, 1163, 1164, 1165, 1166, 0, 1167, 1168, + 1169, 1170, 1171, 1146, 1147, 1148, 1149, 1130, 1131, 1159, + 1218, 1133, 0, 1134, 1135, 1136, 1137, 1138, 1139, 1140, + 1141, 1142, 1143, 1150, 1151, 1152, 1153, 1154, 1155, 1156, + 1157, 0, 0, 0, 0, 0, 0, 1854, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1104, 0, 1869, 0, 0, 1830, 2078, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1830, 0, 0, 625, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1830, 1830, 1830, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2120, 0, 2122, 0, 0, 0, + 0, 0, 1830, 0, 0, 0, 0, 1918, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1830, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 625, 625, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1980, + 0, 0, 1981, 1982, 1983, 0, 0, 0, 0, 0, + 1218, 0, 2197, 0, 0, 0, 1830, 0, 0, 0, + 0, 0, 1993, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1928, 0, 34, 0, 1928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1928, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 750, 737, 34, 2168, 686, - 753, 657, 675, 762, 677, 680, 720, 636, 699, 327, - 672, 0, 661, 632, 668, 633, 659, 688, 237, 692, - 656, 739, 702, 752, 285, 0, 638, 662, 341, 722, - 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, - 300, 339, 397, 333, 759, 289, 709, 0, 388, 312, - 0, 0, 0, 690, 742, 697, 733, 685, 721, 646, - 708, 754, 673, 717, 755, 275, 221, 190, 324, 389, - 251, 0, 0, 0, 182, 183, 184, 0, 2175, 2176, - 0, 0, 0, 0, 0, 212, 0, 219, 714, 749, - 670, 716, 233, 273, 239, 232, 404, 719, 765, 631, - 711, 0, 634, 637, 761, 745, 665, 666, 0, 0, - 0, 0, 0, 0, 0, 689, 698, 730, 683, 0, - 0, 0, 0, 0, 0, 0, 0, 663, 0, 707, - 0, 0, 0, 642, 635, 0, 0, 0, 0, 687, - 0, 0, 0, 645, 0, 664, 731, 0, 629, 259, - 639, 313, 0, 735, 744, 684, 435, 748, 682, 681, - 751, 726, 643, 741, 676, 284, 641, 281, 186, 201, - 0, 674, 323, 362, 368, 740, 660, 669, 224, 667, - 366, 337, 421, 208, 249, 359, 342, 364, 706, 724, - 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, - 401, 433, 447, 202, 228, 331, 394, 424, 385, 310, - 405, 406, 280, 384, 257, 189, 288, 444, 200, 374, - 216, 193, 396, 417, 213, 377, 0, 0, 0, 195, - 415, 393, 307, 277, 278, 194, 0, 358, 235, 255, - 226, 326, 412, 413, 225, 449, 204, 432, 197, 940, - 431, 319, 408, 416, 308, 299, 196, 414, 306, 298, - 283, 245, 265, 352, 293, 353, 266, 315, 314, 316, - 0, 191, 0, 390, 425, 450, 210, 655, 736, 403, - 441, 446, 0, 355, 211, 256, 244, 351, 254, 286, - 440, 442, 443, 445, 209, 349, 262, 330, 420, 248, - 428, 318, 205, 268, 386, 282, 291, 728, 764, 336, - 367, 214, 423, 387, 650, 654, 648, 649, 700, 701, - 651, 756, 757, 758, 732, 644, 0, 652, 653, 0, - 738, 746, 747, 705, 185, 198, 287, 760, 356, 252, - 448, 430, 426, 630, 647, 230, 658, 0, 0, 671, - 678, 679, 691, 693, 694, 695, 696, 704, 712, 713, - 715, 723, 725, 727, 729, 734, 743, 763, 187, 188, - 199, 207, 217, 229, 242, 250, 260, 264, 267, 270, - 271, 274, 279, 296, 301, 302, 303, 304, 320, 321, - 322, 325, 328, 329, 332, 334, 335, 338, 344, 345, - 346, 347, 348, 350, 357, 361, 369, 370, 371, 372, - 373, 375, 376, 380, 381, 382, 383, 391, 395, 410, - 411, 422, 434, 438, 261, 418, 439, 0, 295, 703, - 710, 297, 246, 263, 272, 718, 429, 392, 203, 363, - 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, - 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, - 400, 402, 309, 234, 750, 737, 0, 0, 686, 753, - 657, 675, 762, 677, 680, 720, 636, 699, 327, 672, - 0, 661, 632, 668, 633, 659, 688, 237, 692, 656, - 739, 702, 752, 285, 0, 638, 662, 341, 722, 379, - 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, - 339, 397, 333, 759, 289, 709, 0, 388, 312, 0, - 0, 0, 690, 742, 697, 733, 685, 721, 646, 708, - 754, 673, 717, 755, 275, 221, 190, 324, 389, 251, - 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, - 0, 0, 0, 0, 212, 0, 219, 714, 749, 670, - 716, 233, 273, 239, 232, 404, 719, 765, 631, 711, - 0, 634, 637, 761, 745, 665, 666, 0, 0, 0, - 0, 0, 0, 0, 689, 698, 730, 683, 0, 0, - 0, 0, 0, 0, 1920, 0, 663, 0, 707, 0, - 0, 0, 642, 635, 0, 0, 0, 0, 687, 0, - 0, 0, 645, 0, 664, 731, 0, 629, 259, 639, - 313, 0, 735, 744, 684, 435, 748, 682, 681, 751, - 726, 643, 741, 676, 284, 641, 281, 186, 201, 0, - 674, 323, 362, 368, 740, 660, 669, 224, 667, 366, - 337, 421, 208, 249, 359, 342, 364, 706, 724, 365, - 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, - 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, - 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, - 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, - 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, - 326, 412, 413, 225, 449, 204, 432, 197, 940, 431, - 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, - 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, - 191, 0, 390, 425, 450, 210, 655, 736, 403, 441, - 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, - 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, - 318, 205, 268, 386, 282, 291, 728, 764, 336, 367, - 214, 423, 387, 650, 654, 648, 649, 700, 701, 651, - 756, 757, 758, 732, 644, 0, 652, 653, 0, 738, - 746, 747, 705, 185, 198, 287, 760, 356, 252, 448, - 430, 426, 630, 647, 230, 658, 0, 0, 671, 678, - 679, 691, 693, 694, 695, 696, 704, 712, 713, 715, - 723, 725, 727, 729, 734, 743, 763, 187, 188, 199, - 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, - 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, - 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, - 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, - 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, - 422, 434, 438, 261, 418, 439, 0, 295, 703, 710, - 297, 246, 263, 272, 718, 429, 392, 203, 363, 253, - 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, - 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, - 402, 309, 234, 750, 737, 0, 0, 686, 753, 657, + 0, 0, 0, 750, 737, 0, 0, 686, 753, 657, 675, 762, 677, 680, 720, 636, 699, 327, 672, 0, 661, 632, 668, 633, 659, 688, 237, 692, 656, 739, 702, 752, 285, 0, 638, 662, 341, 722, 379, 223, @@ -1736,15 +1590,15 @@ var yyAct = [...]int{ 397, 333, 759, 289, 709, 0, 388, 312, 0, 0, 0, 690, 742, 697, 733, 685, 721, 646, 708, 754, 673, 717, 755, 275, 221, 190, 324, 389, 251, 0, - 0, 0, 182, 183, 184, 0, 0, 0, 0, 0, + 0, 0, 182, 183, 184, 0, 2178, 2179, 0, 0, 0, 0, 0, 212, 0, 219, 714, 749, 670, 716, 233, 273, 239, 232, 404, 719, 765, 631, 711, 0, 634, 637, 761, 745, 665, 666, 0, 0, 0, 0, 0, 0, 0, 689, 698, 730, 683, 0, 0, 0, - 0, 0, 0, 1773, 0, 663, 0, 707, 0, 0, - 0, 642, 635, 0, 0, 0, 0, 687, 0, 0, + 0, 0, 0, 0, 0, 663, 0, 707, 0, 0, + 0, 642, 635, 0, 0, 0, 0, 687, 2132, 0, 0, 645, 0, 664, 731, 0, 629, 259, 639, 313, - 0, 735, 744, 684, 435, 748, 682, 681, 751, 726, + 2141, 735, 744, 684, 435, 748, 682, 681, 751, 726, 643, 741, 676, 284, 641, 281, 186, 201, 0, 674, 323, 362, 368, 740, 660, 669, 224, 667, 366, 337, 421, 208, 249, 359, 342, 364, 706, 724, 365, 290, @@ -1788,7 +1642,7 @@ var yyAct = [...]int{ 273, 239, 232, 404, 719, 765, 631, 711, 0, 634, 637, 761, 745, 665, 666, 0, 0, 0, 0, 0, 0, 0, 689, 698, 730, 683, 0, 0, 0, 0, - 0, 0, 1488, 0, 663, 0, 707, 0, 0, 0, + 0, 0, 1922, 0, 663, 0, 707, 0, 0, 0, 642, 635, 0, 0, 0, 0, 687, 0, 0, 0, 645, 0, 664, 731, 0, 629, 259, 639, 313, 0, 735, 744, 684, 435, 748, 682, 681, 751, 726, 643, @@ -1829,13 +1683,13 @@ var yyAct = [...]int{ 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, 759, 289, 709, 0, 388, 312, 0, 0, 0, 690, 742, 697, 733, 685, 721, 646, 708, 754, 673, 717, - 755, 275, 221, 190, 324, 389, 251, 71, 0, 0, + 755, 275, 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 219, 714, 749, 670, 716, 233, 273, 239, 232, 404, 719, 765, 631, 711, 0, 634, 637, 761, 745, 665, 666, 0, 0, 0, 0, 0, 0, 0, 689, 698, 730, 683, 0, 0, 0, 0, 0, - 0, 0, 0, 663, 0, 707, 0, 0, 0, 642, + 0, 1774, 0, 663, 0, 707, 0, 0, 0, 642, 635, 0, 0, 0, 0, 687, 0, 0, 0, 645, 0, 664, 731, 0, 629, 259, 639, 313, 0, 735, 744, 684, 435, 748, 682, 681, 751, 726, 643, 741, @@ -1882,7 +1736,7 @@ var yyAct = [...]int{ 232, 404, 719, 765, 631, 711, 0, 634, 637, 761, 745, 665, 666, 0, 0, 0, 0, 0, 0, 0, 689, 698, 730, 683, 0, 0, 0, 0, 0, 0, - 0, 0, 663, 0, 707, 0, 0, 0, 642, 635, + 1489, 0, 663, 0, 707, 0, 0, 0, 642, 635, 0, 0, 0, 0, 687, 0, 0, 0, 645, 0, 664, 731, 0, 629, 259, 639, 313, 0, 735, 744, 684, 435, 748, 682, 681, 751, 726, 643, 741, 676, @@ -1923,7 +1777,7 @@ var yyAct = [...]int{ 240, 236, 222, 269, 300, 339, 397, 333, 759, 289, 709, 0, 388, 312, 0, 0, 0, 690, 742, 697, 733, 685, 721, 646, 708, 754, 673, 717, 755, 275, - 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, + 221, 190, 324, 389, 251, 71, 0, 0, 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 219, 714, 749, 670, 716, 233, 273, 239, 232, 404, 719, 765, 631, 711, 0, 634, 637, 761, 745, @@ -1941,12 +1795,12 @@ var yyAct = [...]int{ 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, - 204, 432, 197, 640, 431, 319, 408, 416, 308, 299, + 204, 432, 197, 940, 431, 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, 210, 655, 736, 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, - 262, 330, 420, 248, 428, 628, 766, 622, 621, 282, + 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, 728, 764, 336, 367, 214, 423, 387, 650, 654, 648, 649, 700, 701, 651, 756, 757, 758, 732, 644, 0, 652, 653, 0, 738, 746, 747, 705, 185, 198, @@ -1985,15 +1839,15 @@ var yyAct = [...]int{ 364, 706, 724, 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, - 444, 200, 374, 216, 193, 396, 1108, 213, 377, 0, + 444, 200, 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, - 432, 197, 640, 431, 319, 408, 416, 308, 299, 196, + 432, 197, 940, 431, 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, 210, 655, 736, 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, - 330, 420, 248, 428, 628, 766, 622, 621, 282, 291, + 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, 728, 764, 336, 367, 214, 423, 387, 650, 654, 648, 649, 700, 701, 651, 756, 757, 758, 732, 644, 0, 652, 653, 0, 738, 746, 747, 705, 185, 198, 287, @@ -2032,7 +1886,7 @@ var yyAct = [...]int{ 706, 724, 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, 444, - 200, 374, 216, 193, 396, 619, 213, 377, 0, 0, + 200, 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, 640, 431, 319, 408, 416, 308, 299, 196, 414, @@ -2056,290 +1910,155 @@ var yyAct = [...]int{ 295, 703, 710, 297, 246, 263, 272, 718, 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, - 398, 399, 400, 402, 309, 234, 327, 0, 0, 1415, - 0, 519, 0, 0, 0, 237, 0, 518, 0, 0, - 0, 285, 0, 0, 1416, 341, 0, 379, 223, 294, - 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, - 333, 562, 289, 0, 0, 388, 312, 0, 0, 0, - 0, 0, 553, 554, 0, 0, 0, 0, 0, 0, - 0, 0, 275, 221, 190, 324, 389, 251, 71, 0, - 0, 182, 183, 184, 540, 539, 542, 543, 544, 545, - 0, 0, 212, 541, 219, 546, 547, 548, 0, 233, - 273, 239, 232, 404, 0, 0, 0, 516, 533, 0, - 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 530, 531, 609, 0, 0, 0, 577, 0, 532, 0, - 0, 525, 526, 528, 527, 529, 534, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 259, 0, 313, 0, - 576, 0, 0, 435, 0, 0, 574, 0, 0, 0, - 0, 0, 284, 0, 281, 186, 201, 0, 0, 323, - 362, 368, 0, 0, 0, 224, 0, 366, 337, 421, - 208, 249, 359, 342, 364, 0, 0, 365, 290, 409, - 354, 419, 436, 437, 231, 317, 427, 401, 433, 447, - 202, 228, 331, 394, 424, 385, 310, 405, 406, 280, - 384, 257, 189, 288, 444, 200, 374, 216, 193, 396, - 417, 213, 377, 0, 0, 0, 195, 415, 393, 307, - 277, 278, 194, 0, 358, 235, 255, 226, 326, 412, - 413, 225, 449, 204, 432, 197, 0, 431, 319, 408, - 416, 308, 299, 196, 414, 306, 298, 283, 245, 265, - 352, 293, 353, 266, 315, 314, 316, 0, 191, 0, - 390, 425, 450, 210, 0, 0, 403, 441, 446, 0, - 355, 211, 256, 244, 351, 254, 286, 440, 442, 443, - 445, 209, 349, 262, 330, 420, 248, 428, 318, 205, - 268, 386, 282, 291, 0, 0, 336, 367, 214, 423, - 387, 564, 575, 570, 571, 568, 569, 563, 567, 566, - 565, 578, 555, 556, 557, 558, 560, 0, 572, 573, - 559, 185, 198, 287, 0, 356, 252, 448, 430, 426, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 187, 188, 199, 207, 217, - 229, 242, 250, 260, 264, 267, 270, 271, 274, 279, - 296, 301, 302, 303, 304, 320, 321, 322, 325, 328, - 329, 332, 334, 335, 338, 344, 345, 346, 347, 348, - 350, 357, 361, 369, 370, 371, 372, 373, 375, 376, - 380, 381, 382, 383, 391, 395, 410, 411, 422, 434, - 438, 261, 418, 439, 0, 295, 0, 0, 297, 246, - 263, 272, 0, 429, 392, 203, 363, 253, 192, 220, - 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, - 238, 218, 360, 215, 378, 398, 399, 400, 402, 309, - 234, 327, 0, 0, 0, 0, 519, 0, 0, 0, - 237, 0, 518, 0, 0, 0, 285, 0, 0, 0, - 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, - 222, 269, 300, 339, 397, 333, 562, 289, 0, 0, - 388, 312, 0, 0, 0, 0, 0, 553, 554, 0, - 0, 0, 0, 0, 0, 1527, 0, 275, 221, 190, - 324, 389, 251, 71, 0, 0, 182, 183, 184, 540, - 539, 542, 543, 544, 545, 0, 0, 212, 541, 219, - 546, 547, 548, 1528, 233, 273, 239, 232, 404, 0, - 0, 0, 516, 533, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 530, 531, 0, 0, 0, - 0, 577, 0, 532, 0, 0, 525, 526, 528, 527, - 529, 534, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 259, 0, 313, 0, 576, 0, 0, 435, 0, - 0, 574, 0, 0, 0, 0, 0, 284, 0, 281, - 186, 201, 0, 0, 323, 362, 368, 0, 0, 0, - 224, 0, 366, 337, 421, 208, 249, 359, 342, 364, - 0, 0, 365, 290, 409, 354, 419, 436, 437, 231, - 317, 427, 401, 433, 447, 202, 228, 331, 394, 424, - 385, 310, 405, 406, 280, 384, 257, 189, 288, 444, - 200, 374, 216, 193, 396, 417, 213, 377, 0, 0, - 0, 195, 415, 393, 307, 277, 278, 194, 0, 358, - 235, 255, 226, 326, 412, 413, 225, 449, 204, 432, - 197, 0, 431, 319, 408, 416, 308, 299, 196, 414, - 306, 298, 283, 245, 265, 352, 293, 353, 266, 315, - 314, 316, 0, 191, 0, 390, 425, 450, 210, 0, - 0, 403, 441, 446, 0, 355, 211, 256, 244, 351, - 254, 286, 440, 442, 443, 445, 209, 349, 262, 330, - 420, 248, 428, 318, 205, 268, 386, 282, 291, 0, - 0, 336, 367, 214, 423, 387, 564, 575, 570, 571, - 568, 569, 563, 567, 566, 565, 578, 555, 556, 557, - 558, 560, 0, 572, 573, 559, 185, 198, 287, 0, - 356, 252, 448, 430, 426, 0, 0, 230, 0, 0, + 398, 399, 400, 402, 309, 234, 750, 737, 0, 0, + 686, 753, 657, 675, 762, 677, 680, 720, 636, 699, + 327, 672, 0, 661, 632, 668, 633, 659, 688, 237, + 692, 656, 739, 702, 752, 285, 0, 638, 662, 341, + 722, 379, 223, 294, 292, 407, 247, 240, 236, 222, + 269, 300, 339, 397, 333, 759, 289, 709, 0, 388, + 312, 0, 0, 0, 690, 742, 697, 733, 685, 721, + 646, 708, 754, 673, 717, 755, 275, 221, 190, 324, + 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, + 0, 0, 0, 0, 0, 0, 212, 0, 219, 714, + 749, 670, 716, 233, 273, 239, 232, 404, 719, 765, + 631, 711, 0, 634, 637, 761, 745, 665, 666, 0, + 0, 0, 0, 0, 0, 0, 689, 698, 730, 683, + 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, + 707, 0, 0, 0, 642, 635, 0, 0, 0, 0, + 687, 0, 0, 0, 645, 0, 664, 731, 0, 629, + 259, 639, 313, 0, 735, 744, 684, 435, 748, 682, + 681, 751, 726, 643, 741, 676, 284, 641, 281, 186, + 201, 0, 674, 323, 362, 368, 740, 660, 669, 224, + 667, 366, 337, 421, 208, 249, 359, 342, 364, 706, + 724, 365, 290, 409, 354, 419, 436, 437, 231, 317, + 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, + 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, + 374, 216, 193, 396, 1108, 213, 377, 0, 0, 0, + 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, + 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, + 640, 431, 319, 408, 416, 308, 299, 196, 414, 306, + 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, + 316, 0, 191, 0, 390, 425, 450, 210, 655, 736, + 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, + 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, + 248, 428, 628, 766, 622, 621, 282, 291, 728, 764, + 336, 367, 214, 423, 387, 650, 654, 648, 649, 700, + 701, 651, 756, 757, 758, 732, 644, 0, 652, 653, + 0, 738, 746, 747, 705, 185, 198, 287, 760, 356, + 252, 448, 430, 426, 630, 647, 230, 658, 0, 0, + 671, 678, 679, 691, 693, 694, 695, 696, 704, 712, + 713, 715, 723, 725, 727, 729, 734, 743, 763, 187, + 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, + 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, + 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, + 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, + 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, + 410, 411, 422, 434, 438, 261, 418, 439, 0, 295, + 703, 710, 297, 246, 263, 272, 718, 429, 392, 203, + 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, + 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, + 399, 400, 402, 309, 234, 750, 737, 0, 0, 686, + 753, 657, 675, 762, 677, 680, 720, 636, 699, 327, + 672, 0, 661, 632, 668, 633, 659, 688, 237, 692, + 656, 739, 702, 752, 285, 0, 638, 662, 341, 722, + 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, + 300, 339, 397, 333, 759, 289, 709, 0, 388, 312, + 0, 0, 0, 690, 742, 697, 733, 685, 721, 646, + 708, 754, 673, 717, 755, 275, 221, 190, 324, 389, + 251, 0, 0, 0, 182, 183, 184, 0, 0, 0, + 0, 0, 0, 0, 0, 212, 0, 219, 714, 749, + 670, 716, 233, 273, 239, 232, 404, 719, 765, 631, + 711, 0, 634, 637, 761, 745, 665, 666, 0, 0, + 0, 0, 0, 0, 0, 689, 698, 730, 683, 0, + 0, 0, 0, 0, 0, 0, 0, 663, 0, 707, + 0, 0, 0, 642, 635, 0, 0, 0, 0, 687, + 0, 0, 0, 645, 0, 664, 731, 0, 629, 259, + 639, 313, 0, 735, 744, 684, 435, 748, 682, 681, + 751, 726, 643, 741, 676, 284, 641, 281, 186, 201, + 0, 674, 323, 362, 368, 740, 660, 669, 224, 667, + 366, 337, 421, 208, 249, 359, 342, 364, 706, 724, + 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, + 401, 433, 447, 202, 228, 331, 394, 424, 385, 310, + 405, 406, 280, 384, 257, 189, 288, 444, 200, 374, + 216, 193, 396, 619, 213, 377, 0, 0, 0, 195, + 415, 393, 307, 277, 278, 194, 0, 358, 235, 255, + 226, 326, 412, 413, 225, 449, 204, 432, 197, 640, + 431, 319, 408, 416, 308, 299, 196, 414, 306, 298, + 283, 245, 265, 352, 293, 353, 266, 315, 314, 316, + 0, 191, 0, 390, 425, 450, 210, 655, 736, 403, + 441, 446, 0, 355, 211, 256, 244, 351, 254, 286, + 440, 442, 443, 445, 209, 349, 262, 330, 420, 248, + 428, 628, 766, 622, 621, 282, 291, 728, 764, 336, + 367, 214, 423, 387, 650, 654, 648, 649, 700, 701, + 651, 756, 757, 758, 732, 644, 0, 652, 653, 0, + 738, 746, 747, 705, 185, 198, 287, 760, 356, 252, + 448, 430, 426, 630, 647, 230, 658, 0, 0, 671, + 678, 679, 691, 693, 694, 695, 696, 704, 712, 713, + 715, 723, 725, 727, 729, 734, 743, 763, 187, 188, + 199, 207, 217, 229, 242, 250, 260, 264, 267, 270, + 271, 274, 279, 296, 301, 302, 303, 304, 320, 321, + 322, 325, 328, 329, 332, 334, 335, 338, 344, 345, + 346, 347, 348, 350, 357, 361, 369, 370, 371, 372, + 373, 375, 376, 380, 381, 382, 383, 391, 395, 410, + 411, 422, 434, 438, 261, 418, 439, 0, 295, 703, + 710, 297, 246, 263, 272, 718, 429, 392, 203, 363, + 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, + 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, + 400, 402, 309, 234, 327, 0, 0, 1416, 0, 519, + 0, 0, 0, 237, 0, 518, 0, 0, 0, 285, + 0, 0, 1417, 341, 0, 379, 223, 294, 292, 407, + 247, 240, 236, 222, 269, 300, 339, 397, 333, 562, + 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, + 553, 554, 0, 0, 0, 0, 0, 0, 0, 0, + 275, 221, 190, 324, 389, 251, 71, 0, 0, 182, + 183, 184, 540, 539, 542, 543, 544, 545, 0, 0, + 212, 541, 219, 546, 547, 548, 0, 233, 273, 239, + 232, 404, 0, 0, 0, 516, 533, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 530, 531, + 609, 0, 0, 0, 577, 0, 532, 0, 0, 525, + 526, 528, 527, 529, 534, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 259, 0, 313, 0, 576, 0, + 0, 435, 0, 0, 574, 0, 0, 0, 0, 0, + 284, 0, 281, 186, 201, 0, 0, 323, 362, 368, + 0, 0, 0, 224, 0, 366, 337, 421, 208, 249, + 359, 342, 364, 0, 0, 365, 290, 409, 354, 419, + 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, + 331, 394, 424, 385, 310, 405, 406, 280, 384, 257, + 189, 288, 444, 200, 374, 216, 193, 396, 417, 213, + 377, 0, 0, 0, 195, 415, 393, 307, 277, 278, + 194, 0, 358, 235, 255, 226, 326, 412, 413, 225, + 449, 204, 432, 197, 0, 431, 319, 408, 416, 308, + 299, 196, 414, 306, 298, 283, 245, 265, 352, 293, + 353, 266, 315, 314, 316, 0, 191, 0, 390, 425, + 450, 210, 0, 0, 403, 441, 446, 0, 355, 211, + 256, 244, 351, 254, 286, 440, 442, 443, 445, 209, + 349, 262, 330, 420, 248, 428, 318, 205, 268, 386, + 282, 291, 0, 0, 336, 367, 214, 423, 387, 564, + 575, 570, 571, 568, 569, 563, 567, 566, 565, 578, + 555, 556, 557, 558, 560, 0, 572, 573, 559, 185, + 198, 287, 0, 356, 252, 448, 430, 426, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 187, 188, 199, 207, 217, 229, 242, 250, 260, 264, - 267, 270, 271, 274, 279, 296, 301, 302, 303, 304, - 320, 321, 322, 325, 328, 329, 332, 334, 335, 338, - 344, 345, 346, 347, 348, 350, 357, 361, 369, 370, - 371, 372, 373, 375, 376, 380, 381, 382, 383, 391, - 395, 410, 411, 422, 434, 438, 261, 418, 439, 0, - 295, 0, 0, 297, 246, 263, 272, 0, 429, 392, - 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, - 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, - 398, 399, 400, 402, 309, 234, 327, 0, 0, 0, - 0, 519, 0, 0, 0, 237, 0, 518, 0, 0, - 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, - 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, - 333, 562, 289, 0, 0, 388, 312, 0, 0, 0, - 0, 0, 553, 554, 0, 0, 0, 0, 0, 0, - 0, 0, 275, 221, 190, 324, 389, 251, 71, 0, - 596, 182, 183, 184, 540, 539, 542, 543, 544, 545, - 0, 0, 212, 541, 219, 546, 547, 548, 0, 233, - 273, 239, 232, 404, 0, 0, 0, 516, 533, 0, - 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 530, 531, 0, 0, 0, 0, 577, 0, 532, 0, - 0, 525, 526, 528, 527, 529, 534, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 259, 0, 313, 0, - 576, 0, 0, 435, 0, 0, 574, 0, 0, 0, - 0, 0, 284, 0, 281, 186, 201, 0, 0, 323, - 362, 368, 0, 0, 0, 224, 0, 366, 337, 421, - 208, 249, 359, 342, 364, 0, 0, 365, 290, 409, - 354, 419, 436, 437, 231, 317, 427, 401, 433, 447, - 202, 228, 331, 394, 424, 385, 310, 405, 406, 280, - 384, 257, 189, 288, 444, 200, 374, 216, 193, 396, - 417, 213, 377, 0, 0, 0, 195, 415, 393, 307, - 277, 278, 194, 0, 358, 235, 255, 226, 326, 412, - 413, 225, 449, 204, 432, 197, 0, 431, 319, 408, - 416, 308, 299, 196, 414, 306, 298, 283, 245, 265, - 352, 293, 353, 266, 315, 314, 316, 0, 191, 0, - 390, 425, 450, 210, 0, 0, 403, 441, 446, 0, - 355, 211, 256, 244, 351, 254, 286, 440, 442, 443, - 445, 209, 349, 262, 330, 420, 248, 428, 318, 205, - 268, 386, 282, 291, 0, 0, 336, 367, 214, 423, - 387, 564, 575, 570, 571, 568, 569, 563, 567, 566, - 565, 578, 555, 556, 557, 558, 560, 0, 572, 573, - 559, 185, 198, 287, 0, 356, 252, 448, 430, 426, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 187, 188, 199, 207, 217, - 229, 242, 250, 260, 264, 267, 270, 271, 274, 279, - 296, 301, 302, 303, 304, 320, 321, 322, 325, 328, - 329, 332, 334, 335, 338, 344, 345, 346, 347, 348, - 350, 357, 361, 369, 370, 371, 372, 373, 375, 376, - 380, 381, 382, 383, 391, 395, 410, 411, 422, 434, - 438, 261, 418, 439, 0, 295, 0, 0, 297, 246, - 263, 272, 0, 429, 392, 203, 363, 253, 192, 220, - 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, - 238, 218, 360, 215, 378, 398, 399, 400, 402, 309, - 234, 327, 0, 0, 0, 0, 519, 0, 0, 0, - 237, 0, 518, 0, 0, 0, 285, 0, 0, 0, - 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, - 222, 269, 300, 339, 397, 333, 562, 289, 0, 0, - 388, 312, 0, 0, 0, 0, 0, 553, 554, 0, - 0, 0, 0, 0, 0, 0, 0, 275, 221, 190, - 324, 389, 251, 71, 0, 0, 182, 183, 184, 540, - 539, 542, 543, 544, 545, 0, 0, 212, 541, 219, - 546, 547, 548, 0, 233, 273, 239, 232, 404, 0, - 0, 0, 516, 533, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 530, 531, 609, 0, 0, - 0, 577, 0, 532, 0, 0, 525, 526, 528, 527, - 529, 534, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 259, 0, 313, 0, 576, 0, 0, 435, 0, - 0, 574, 0, 0, 0, 0, 0, 284, 0, 281, - 186, 201, 0, 0, 323, 362, 368, 0, 0, 0, - 224, 0, 366, 337, 421, 208, 249, 359, 342, 364, - 0, 0, 365, 290, 409, 354, 419, 436, 437, 231, - 317, 427, 401, 433, 447, 202, 228, 331, 394, 424, - 385, 310, 405, 406, 280, 384, 257, 189, 288, 444, - 200, 374, 216, 193, 396, 417, 213, 377, 0, 0, - 0, 195, 415, 393, 307, 277, 278, 194, 0, 358, - 235, 255, 226, 326, 412, 413, 225, 449, 204, 432, - 197, 0, 431, 319, 408, 416, 308, 299, 196, 414, - 306, 298, 283, 245, 265, 352, 293, 353, 266, 315, - 314, 316, 0, 191, 0, 390, 425, 450, 210, 0, - 0, 403, 441, 446, 0, 355, 211, 256, 244, 351, - 254, 286, 440, 442, 443, 445, 209, 349, 262, 330, - 420, 248, 428, 318, 205, 268, 386, 282, 291, 0, - 0, 336, 367, 214, 423, 387, 564, 575, 570, 571, - 568, 569, 563, 567, 566, 565, 578, 555, 556, 557, - 558, 560, 0, 572, 573, 559, 185, 198, 287, 0, - 356, 252, 448, 430, 426, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 187, 188, 199, 207, 217, 229, 242, 250, 260, 264, - 267, 270, 271, 274, 279, 296, 301, 302, 303, 304, - 320, 321, 322, 325, 328, 329, 332, 334, 335, 338, - 344, 345, 346, 347, 348, 350, 357, 361, 369, 370, - 371, 372, 373, 375, 376, 380, 381, 382, 383, 391, - 395, 410, 411, 422, 434, 438, 261, 418, 439, 0, - 295, 0, 0, 297, 246, 263, 272, 0, 429, 392, - 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, - 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, - 398, 399, 400, 402, 309, 234, 327, 0, 0, 0, - 0, 519, 0, 0, 0, 237, 0, 518, 0, 0, - 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, - 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, - 333, 562, 289, 0, 0, 388, 312, 0, 0, 0, - 0, 0, 553, 554, 0, 0, 0, 0, 0, 0, - 0, 0, 275, 221, 190, 324, 389, 251, 71, 0, - 0, 182, 183, 184, 540, 1433, 542, 543, 544, 545, - 0, 0, 212, 541, 219, 546, 547, 548, 0, 233, - 273, 239, 232, 404, 0, 0, 0, 516, 533, 0, - 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 530, 531, 609, 0, 0, 0, 577, 0, 532, 0, - 0, 525, 526, 528, 527, 529, 534, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 259, 0, 313, 0, - 576, 0, 0, 435, 0, 0, 574, 0, 0, 0, - 0, 0, 284, 0, 281, 186, 201, 0, 0, 323, - 362, 368, 0, 0, 0, 224, 0, 366, 337, 421, - 208, 249, 359, 342, 364, 0, 0, 365, 290, 409, - 354, 419, 436, 437, 231, 317, 427, 401, 433, 447, - 202, 228, 331, 394, 424, 385, 310, 405, 406, 280, - 384, 257, 189, 288, 444, 200, 374, 216, 193, 396, - 417, 213, 377, 0, 0, 0, 195, 415, 393, 307, - 277, 278, 194, 0, 358, 235, 255, 226, 326, 412, - 413, 225, 449, 204, 432, 197, 0, 431, 319, 408, - 416, 308, 299, 196, 414, 306, 298, 283, 245, 265, - 352, 293, 353, 266, 315, 314, 316, 0, 191, 0, - 390, 425, 450, 210, 0, 0, 403, 441, 446, 0, - 355, 211, 256, 244, 351, 254, 286, 440, 442, 443, - 445, 209, 349, 262, 330, 420, 248, 428, 318, 205, - 268, 386, 282, 291, 0, 0, 336, 367, 214, 423, - 387, 564, 575, 570, 571, 568, 569, 563, 567, 566, - 565, 578, 555, 556, 557, 558, 560, 0, 572, 573, - 559, 185, 198, 287, 0, 356, 252, 448, 430, 426, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 187, 188, 199, 207, 217, - 229, 242, 250, 260, 264, 267, 270, 271, 274, 279, - 296, 301, 302, 303, 304, 320, 321, 322, 325, 328, - 329, 332, 334, 335, 338, 344, 345, 346, 347, 348, - 350, 357, 361, 369, 370, 371, 372, 373, 375, 376, - 380, 381, 382, 383, 391, 395, 410, 411, 422, 434, - 438, 261, 418, 439, 0, 295, 0, 0, 297, 246, - 263, 272, 0, 429, 392, 203, 363, 253, 192, 220, - 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, - 238, 218, 360, 215, 378, 398, 399, 400, 402, 309, - 234, 327, 0, 0, 0, 0, 519, 0, 0, 0, - 237, 0, 518, 0, 0, 0, 285, 0, 0, 0, - 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, - 222, 269, 300, 339, 397, 333, 562, 289, 0, 0, - 388, 312, 0, 0, 0, 0, 0, 553, 554, 0, - 0, 0, 0, 0, 0, 0, 0, 275, 221, 190, - 324, 389, 251, 71, 0, 0, 182, 183, 184, 540, - 1430, 542, 543, 544, 545, 0, 0, 212, 541, 219, - 546, 547, 548, 0, 233, 273, 239, 232, 404, 0, - 0, 0, 516, 533, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 530, 531, 609, 0, 0, - 0, 577, 0, 532, 0, 0, 525, 526, 528, 527, - 529, 534, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 259, 0, 313, 0, 576, 0, 0, 435, 0, - 0, 574, 0, 0, 0, 0, 0, 284, 0, 281, - 186, 201, 0, 0, 323, 362, 368, 0, 0, 0, - 224, 0, 366, 337, 421, 208, 249, 359, 342, 364, - 0, 0, 365, 290, 409, 354, 419, 436, 437, 231, - 317, 427, 401, 433, 447, 202, 228, 331, 394, 424, - 385, 310, 405, 406, 280, 384, 257, 189, 288, 444, - 200, 374, 216, 193, 396, 417, 213, 377, 0, 0, - 0, 195, 415, 393, 307, 277, 278, 194, 0, 358, - 235, 255, 226, 326, 412, 413, 225, 449, 204, 432, - 197, 0, 431, 319, 408, 416, 308, 299, 196, 414, - 306, 298, 283, 245, 265, 352, 293, 353, 266, 315, - 314, 316, 0, 191, 0, 390, 425, 450, 210, 0, - 0, 403, 441, 446, 0, 355, 211, 256, 244, 351, - 254, 286, 440, 442, 443, 445, 209, 349, 262, 330, - 420, 248, 428, 318, 205, 268, 386, 282, 291, 0, - 0, 336, 367, 214, 423, 387, 564, 575, 570, 571, - 568, 569, 563, 567, 566, 565, 578, 555, 556, 557, - 558, 560, 0, 572, 573, 559, 185, 198, 287, 0, - 356, 252, 448, 430, 426, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 187, 188, 199, 207, 217, 229, 242, 250, 260, 264, - 267, 270, 271, 274, 279, 296, 301, 302, 303, 304, - 320, 321, 322, 325, 328, 329, 332, 334, 335, 338, - 344, 345, 346, 347, 348, 350, 357, 361, 369, 370, - 371, 372, 373, 375, 376, 380, 381, 382, 383, 391, - 395, 410, 411, 422, 434, 438, 261, 418, 439, 0, - 295, 0, 0, 297, 246, 263, 272, 0, 429, 392, - 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, - 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, - 398, 399, 400, 402, 309, 234, 589, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, + 0, 0, 0, 187, 188, 199, 207, 217, 229, 242, + 250, 260, 264, 267, 270, 271, 274, 279, 296, 301, + 302, 303, 304, 320, 321, 322, 325, 328, 329, 332, + 334, 335, 338, 344, 345, 346, 347, 348, 350, 357, + 361, 369, 370, 371, 372, 373, 375, 376, 380, 381, + 382, 383, 391, 395, 410, 411, 422, 434, 438, 261, + 418, 439, 0, 295, 0, 0, 297, 246, 263, 272, + 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, + 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, + 360, 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, 0, 0, 0, 519, 0, 0, 0, 237, 0, 518, 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, 562, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 553, 554, 0, 0, 0, - 0, 0, 0, 0, 0, 275, 221, 190, 324, 389, + 0, 0, 0, 1528, 0, 275, 221, 190, 324, 389, 251, 71, 0, 0, 182, 183, 184, 540, 539, 542, 543, 544, 545, 0, 0, 212, 541, 219, 546, 547, - 548, 0, 233, 273, 239, 232, 404, 0, 0, 0, + 548, 1529, 233, 273, 239, 232, 404, 0, 0, 0, 516, 533, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 531, 0, 0, 0, 0, 577, @@ -2382,7 +2101,7 @@ var yyAct = [...]int{ 247, 240, 236, 222, 269, 300, 339, 397, 333, 562, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 553, 554, 0, 0, 0, 0, 0, 0, 0, 0, - 275, 221, 190, 324, 389, 251, 71, 0, 0, 182, + 275, 221, 190, 324, 389, 251, 71, 0, 596, 182, 183, 184, 540, 539, 542, 543, 544, 545, 0, 0, 212, 541, 219, 546, 547, 548, 0, 233, 273, 239, 232, 404, 0, 0, 0, 516, 533, 0, 561, 0, @@ -2422,8 +2141,8 @@ var yyAct = [...]int{ 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, 327, - 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, - 0, 0, 0, 0, 285, 0, 0, 0, 341, 0, + 0, 0, 0, 0, 519, 0, 0, 0, 237, 0, + 518, 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, 562, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 553, 554, 0, 0, 0, @@ -2431,15 +2150,15 @@ var yyAct = [...]int{ 251, 71, 0, 0, 182, 183, 184, 540, 539, 542, 543, 544, 545, 0, 0, 212, 541, 219, 546, 547, 548, 0, 233, 273, 239, 232, 404, 0, 0, 0, - 0, 533, 0, 561, 0, 0, 0, 0, 0, 0, + 516, 533, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 530, 531, 0, 0, 0, 0, 577, + 0, 0, 0, 530, 531, 609, 0, 0, 0, 577, 0, 532, 0, 0, 525, 526, 528, 527, 529, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, 0, 576, 0, 0, 435, 0, 0, 574, 0, 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, 0, - 366, 337, 421, 208, 249, 359, 342, 364, 2197, 0, + 366, 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, 374, @@ -2467,19 +2186,19 @@ var yyAct = [...]int{ 0, 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, - 400, 402, 309, 234, 327, 0, 0, 0, 0, 0, - 0, 0, 0, 237, 0, 0, 0, 0, 0, 285, + 400, 402, 309, 234, 327, 0, 0, 0, 0, 519, + 0, 0, 0, 237, 0, 518, 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, 562, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 553, 554, 0, 0, 0, 0, 0, 0, 0, 0, - 275, 221, 190, 324, 389, 251, 71, 0, 596, 182, - 183, 184, 540, 539, 542, 543, 544, 545, 0, 0, + 275, 221, 190, 324, 389, 251, 71, 0, 0, 182, + 183, 184, 540, 1434, 542, 543, 544, 545, 0, 0, 212, 541, 219, 546, 547, 548, 0, 233, 273, 239, - 232, 404, 0, 0, 0, 0, 533, 0, 561, 0, + 232, 404, 0, 0, 0, 516, 533, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 531, - 0, 0, 0, 0, 577, 0, 532, 0, 0, 525, + 609, 0, 0, 0, 577, 0, 532, 0, 0, 525, 526, 528, 527, 529, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, 0, 576, 0, 0, 435, 0, 0, 574, 0, 0, 0, 0, 0, @@ -2513,18 +2232,18 @@ var yyAct = [...]int{ 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, 327, - 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, - 0, 0, 0, 0, 285, 0, 0, 0, 341, 0, + 0, 0, 0, 0, 519, 0, 0, 0, 237, 0, + 518, 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, 562, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 553, 554, 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, 389, - 251, 71, 0, 0, 182, 183, 184, 540, 539, 542, + 251, 71, 0, 0, 182, 183, 184, 540, 1431, 542, 543, 544, 545, 0, 0, 212, 541, 219, 546, 547, 548, 0, 233, 273, 239, 232, 404, 0, 0, 0, - 0, 533, 0, 561, 0, 0, 0, 0, 0, 0, + 516, 533, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 530, 531, 0, 0, 0, 0, 577, + 0, 0, 0, 530, 531, 609, 0, 0, 0, 577, 0, 532, 0, 0, 525, 526, 528, 527, 529, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, 0, 576, 0, 0, 435, 0, 0, 574, @@ -2558,160 +2277,69 @@ var yyAct = [...]int{ 0, 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, - 400, 402, 309, 234, 327, 0, 0, 0, 0, 0, - 0, 0, 0, 237, 0, 0, 0, 0, 0, 285, - 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, - 247, 240, 236, 222, 269, 300, 339, 397, 333, 0, - 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 275, 221, 190, 324, 389, 251, 0, 0, 0, 182, - 183, 184, 0, 0, 0, 0, 0, 0, 0, 0, - 212, 0, 219, 0, 0, 0, 0, 233, 273, 239, - 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 983, 982, 992, 993, 985, 986, - 987, 988, 989, 990, 991, 984, 0, 0, 994, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 259, 0, 313, 0, 0, 0, - 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, - 284, 0, 281, 186, 201, 0, 0, 323, 362, 368, - 0, 0, 0, 224, 0, 366, 337, 421, 208, 249, - 359, 342, 364, 0, 0, 365, 290, 409, 354, 419, - 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, - 331, 394, 424, 385, 310, 405, 406, 280, 384, 257, - 189, 288, 444, 200, 374, 216, 193, 396, 417, 213, - 377, 0, 0, 0, 195, 415, 393, 307, 277, 278, - 194, 0, 358, 235, 255, 226, 326, 412, 413, 225, - 449, 204, 432, 197, 0, 431, 319, 408, 416, 308, - 299, 196, 414, 306, 298, 283, 245, 265, 352, 293, - 353, 266, 315, 314, 316, 0, 191, 0, 390, 425, - 450, 210, 0, 0, 403, 441, 446, 0, 355, 211, - 256, 244, 351, 254, 286, 440, 442, 443, 445, 209, - 349, 262, 330, 420, 248, 428, 318, 205, 268, 386, - 282, 291, 0, 0, 336, 367, 214, 423, 387, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, - 198, 287, 0, 356, 252, 448, 430, 426, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 187, 188, 199, 207, 217, 229, 242, - 250, 260, 264, 267, 270, 271, 274, 279, 296, 301, - 302, 303, 304, 320, 321, 322, 325, 328, 329, 332, - 334, 335, 338, 344, 345, 346, 347, 348, 350, 357, - 361, 369, 370, 371, 372, 373, 375, 376, 380, 381, - 382, 383, 391, 395, 410, 411, 422, 434, 438, 261, - 418, 439, 0, 295, 0, 0, 297, 246, 263, 272, - 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, - 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, - 360, 215, 378, 398, 399, 400, 402, 309, 234, 327, - 0, 0, 0, 0, 0, 0, 0, 0, 237, 809, - 0, 0, 0, 0, 285, 0, 0, 0, 341, 0, - 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, - 300, 339, 397, 333, 0, 289, 0, 0, 388, 312, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 275, 221, 190, 324, 389, - 251, 0, 0, 0, 182, 183, 184, 0, 0, 0, - 0, 0, 0, 0, 0, 212, 0, 219, 0, 0, - 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, - 0, 313, 0, 0, 0, 808, 435, 0, 0, 0, - 0, 0, 0, 805, 806, 284, 774, 281, 186, 201, - 799, 803, 323, 362, 368, 0, 0, 0, 224, 0, - 366, 337, 421, 208, 249, 359, 342, 364, 0, 0, - 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, - 401, 433, 447, 202, 228, 331, 394, 424, 385, 310, - 405, 406, 280, 384, 257, 189, 288, 444, 200, 374, - 216, 193, 396, 417, 213, 377, 0, 0, 0, 195, - 415, 393, 307, 277, 278, 194, 0, 358, 235, 255, - 226, 326, 412, 413, 225, 449, 204, 432, 197, 0, - 431, 319, 408, 416, 308, 299, 196, 414, 306, 298, - 283, 245, 265, 352, 293, 353, 266, 315, 314, 316, - 0, 191, 0, 390, 425, 450, 210, 0, 0, 403, - 441, 446, 0, 355, 211, 256, 244, 351, 254, 286, - 440, 442, 443, 445, 209, 349, 262, 330, 420, 248, - 428, 318, 205, 268, 386, 282, 291, 0, 0, 336, - 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 198, 287, 0, 356, 252, - 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 199, 207, 217, 229, 242, 250, 260, 264, 267, 270, - 271, 274, 279, 296, 301, 302, 303, 304, 320, 321, - 322, 325, 328, 329, 332, 334, 335, 338, 344, 345, - 346, 347, 348, 350, 357, 361, 369, 370, 371, 372, - 373, 375, 376, 380, 381, 382, 383, 391, 395, 410, - 411, 422, 434, 438, 261, 418, 439, 0, 295, 0, - 0, 297, 246, 263, 272, 0, 429, 392, 203, 363, - 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, - 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, - 400, 402, 309, 234, 327, 0, 0, 0, 1086, 0, - 0, 0, 0, 237, 0, 0, 0, 0, 0, 285, - 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, - 247, 240, 236, 222, 269, 300, 339, 397, 333, 0, - 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 275, 221, 190, 324, 389, 251, 0, 0, 0, 182, - 183, 184, 0, 1088, 0, 0, 0, 0, 0, 0, - 212, 0, 219, 0, 0, 0, 0, 233, 273, 239, - 232, 404, 972, 973, 971, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 259, 0, 313, 0, 0, 0, - 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, - 284, 0, 281, 186, 201, 0, 0, 323, 362, 368, - 0, 0, 0, 224, 0, 366, 337, 421, 208, 249, - 359, 342, 364, 0, 0, 365, 290, 409, 354, 419, - 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, - 331, 394, 424, 385, 310, 405, 406, 280, 384, 257, - 189, 288, 444, 200, 374, 216, 193, 396, 417, 213, - 377, 0, 0, 0, 195, 415, 393, 307, 277, 278, - 194, 0, 358, 235, 255, 226, 326, 412, 413, 225, - 449, 204, 432, 197, 0, 431, 319, 408, 416, 308, - 299, 196, 414, 306, 298, 283, 245, 265, 352, 293, - 353, 266, 315, 314, 316, 0, 191, 0, 390, 425, - 450, 210, 0, 0, 403, 441, 446, 0, 355, 211, - 256, 244, 351, 254, 286, 440, 442, 443, 445, 209, - 349, 262, 330, 420, 248, 428, 318, 205, 268, 386, - 282, 291, 0, 0, 336, 367, 214, 423, 387, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, - 198, 287, 0, 356, 252, 448, 430, 426, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 187, 188, 199, 207, 217, 229, 242, - 250, 260, 264, 267, 270, 271, 274, 279, 296, 301, - 302, 303, 304, 320, 321, 322, 325, 328, 329, 332, - 334, 335, 338, 344, 345, 346, 347, 348, 350, 357, - 361, 369, 370, 371, 372, 373, 375, 376, 380, 381, - 382, 383, 391, 395, 410, 411, 422, 434, 438, 261, - 418, 439, 0, 295, 0, 0, 297, 246, 263, 272, - 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, - 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, - 360, 215, 378, 398, 399, 400, 402, 309, 234, 35, + 400, 402, 309, 234, 589, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, + 0, 0, 519, 0, 0, 0, 237, 0, 518, 0, + 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, + 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, + 397, 333, 562, 289, 0, 0, 388, 312, 0, 0, + 0, 0, 0, 553, 554, 0, 0, 0, 0, 0, + 0, 0, 0, 275, 221, 190, 324, 389, 251, 71, + 0, 0, 182, 183, 184, 540, 539, 542, 543, 544, + 545, 0, 0, 212, 541, 219, 546, 547, 548, 0, + 233, 273, 239, 232, 404, 0, 0, 0, 516, 533, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 530, 531, 0, 0, 0, 0, 577, 0, 532, + 0, 0, 525, 526, 528, 527, 529, 534, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, + 0, 576, 0, 0, 435, 0, 0, 574, 0, 0, + 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, + 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, + 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, + 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, + 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, + 280, 384, 257, 189, 288, 444, 200, 374, 216, 193, + 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, + 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, + 412, 413, 225, 449, 204, 432, 197, 0, 431, 319, + 408, 416, 308, 299, 196, 414, 306, 298, 283, 245, + 265, 352, 293, 353, 266, 315, 314, 316, 0, 191, + 0, 390, 425, 450, 210, 0, 0, 403, 441, 446, + 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, + 443, 445, 209, 349, 262, 330, 420, 248, 428, 318, + 205, 268, 386, 282, 291, 0, 0, 336, 367, 214, + 423, 387, 564, 575, 570, 571, 568, 569, 563, 567, + 566, 565, 578, 555, 556, 557, 558, 560, 0, 572, + 573, 559, 185, 198, 287, 0, 356, 252, 448, 430, + 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, - 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, + 0, 0, 0, 0, 0, 0, 187, 188, 199, 207, + 217, 229, 242, 250, 260, 264, 267, 270, 271, 274, + 279, 296, 301, 302, 303, 304, 320, 321, 322, 325, + 328, 329, 332, 334, 335, 338, 344, 345, 346, 347, + 348, 350, 357, 361, 369, 370, 371, 372, 373, 375, + 376, 380, 381, 382, 383, 391, 395, 410, 411, 422, + 434, 438, 261, 418, 439, 0, 295, 0, 0, 297, + 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, + 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, + 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, + 309, 234, 327, 0, 0, 0, 0, 519, 0, 0, + 0, 237, 0, 518, 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, - 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, - 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, + 236, 222, 269, 300, 339, 397, 333, 562, 289, 0, + 0, 388, 312, 0, 0, 0, 0, 0, 553, 554, 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, - 190, 324, 389, 251, 71, 0, 596, 182, 183, 184, - 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, - 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 259, 0, 313, 0, 0, 0, 0, 435, - 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, + 190, 324, 389, 251, 71, 0, 0, 182, 183, 184, + 540, 539, 542, 543, 544, 545, 0, 0, 212, 541, + 219, 546, 547, 548, 0, 233, 273, 239, 232, 404, + 0, 0, 0, 516, 533, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 530, 531, 0, 0, + 0, 0, 577, 0, 532, 0, 0, 525, 526, 528, + 527, 529, 534, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 259, 0, 313, 0, 576, 0, 0, 435, + 0, 0, 574, 0, 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, @@ -2726,9 +2354,9 @@ var yyAct = [...]int{ 0, 0, 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, - 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 185, 198, 287, + 0, 0, 336, 367, 214, 423, 387, 564, 575, 570, + 571, 568, 569, 563, 567, 566, 565, 578, 555, 556, + 557, 558, 560, 0, 572, 573, 559, 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2742,24 +2370,115 @@ var yyAct = [...]int{ 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, 0, - 0, 1460, 0, 0, 0, 0, 237, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, - 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 275, 221, 190, 324, 389, 251, 0, - 0, 0, 182, 183, 184, 0, 1462, 0, 0, 0, - 0, 0, 0, 212, 0, 219, 0, 0, 0, 0, - 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 397, 333, 562, 289, 0, 0, 388, 312, 0, 0, + 0, 0, 0, 553, 554, 0, 0, 0, 0, 0, + 0, 0, 0, 275, 221, 190, 324, 389, 251, 71, + 0, 0, 182, 183, 184, 540, 539, 542, 543, 544, + 545, 0, 0, 212, 541, 219, 546, 547, 548, 0, + 233, 273, 239, 232, 404, 0, 0, 0, 0, 533, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 530, 531, 0, 0, 0, 0, 577, 0, 532, + 0, 0, 525, 526, 528, 527, 529, 534, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, + 0, 576, 0, 0, 435, 0, 0, 574, 0, 0, + 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, + 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, + 421, 208, 249, 359, 342, 364, 2200, 0, 365, 290, + 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, + 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, + 280, 384, 257, 189, 288, 444, 200, 374, 216, 193, + 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, + 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, + 412, 413, 225, 449, 204, 432, 197, 0, 431, 319, + 408, 416, 308, 299, 196, 414, 306, 298, 283, 245, + 265, 352, 293, 353, 266, 315, 314, 316, 0, 191, + 0, 390, 425, 450, 210, 0, 0, 403, 441, 446, + 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, + 443, 445, 209, 349, 262, 330, 420, 248, 428, 318, + 205, 268, 386, 282, 291, 0, 0, 336, 367, 214, + 423, 387, 564, 575, 570, 571, 568, 569, 563, 567, + 566, 565, 578, 555, 556, 557, 558, 560, 0, 572, + 573, 559, 185, 198, 287, 0, 356, 252, 448, 430, + 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 187, 188, 199, 207, + 217, 229, 242, 250, 260, 264, 267, 270, 271, 274, + 279, 296, 301, 302, 303, 304, 320, 321, 322, 325, + 328, 329, 332, 334, 335, 338, 344, 345, 346, 347, + 348, 350, 357, 361, 369, 370, 371, 372, 373, 375, + 376, 380, 381, 382, 383, 391, 395, 410, 411, 422, + 434, 438, 261, 418, 439, 0, 295, 0, 0, 297, + 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, + 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, + 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, + 309, 234, 327, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, + 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, + 236, 222, 269, 300, 339, 397, 333, 562, 289, 0, + 0, 388, 312, 0, 0, 0, 0, 0, 553, 554, + 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, + 190, 324, 389, 251, 71, 0, 596, 182, 183, 184, + 540, 539, 542, 543, 544, 545, 0, 0, 212, 541, + 219, 546, 547, 548, 0, 233, 273, 239, 232, 404, + 0, 0, 0, 0, 533, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 530, 531, 0, 0, + 0, 0, 577, 0, 532, 0, 0, 525, 526, 528, + 527, 529, 534, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 259, 0, 313, 0, 576, 0, 0, 435, + 0, 0, 574, 0, 0, 0, 0, 0, 284, 0, + 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, + 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, + 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, + 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, + 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, + 444, 200, 374, 216, 193, 396, 417, 213, 377, 0, + 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, + 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, + 432, 197, 0, 431, 319, 408, 416, 308, 299, 196, + 414, 306, 298, 283, 245, 265, 352, 293, 353, 266, + 315, 314, 316, 0, 191, 0, 390, 425, 450, 210, + 0, 0, 403, 441, 446, 0, 355, 211, 256, 244, + 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, + 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, + 0, 0, 336, 367, 214, 423, 387, 564, 575, 570, + 571, 568, 569, 563, 567, 566, 565, 578, 555, 556, + 557, 558, 560, 0, 572, 573, 559, 185, 198, 287, + 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 187, 188, 199, 207, 217, 229, 242, 250, 260, + 264, 267, 270, 271, 274, 279, 296, 301, 302, 303, + 304, 320, 321, 322, 325, 328, 329, 332, 334, 335, + 338, 344, 345, 346, 347, 348, 350, 357, 361, 369, + 370, 371, 372, 373, 375, 376, 380, 381, 382, 383, + 391, 395, 410, 411, 422, 434, 438, 261, 418, 439, + 0, 295, 0, 0, 297, 246, 263, 272, 0, 429, + 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, + 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, + 378, 398, 399, 400, 402, 309, 234, 327, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, + 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, + 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, + 397, 333, 562, 289, 0, 0, 388, 312, 0, 0, + 0, 0, 0, 553, 554, 0, 0, 0, 0, 0, + 0, 0, 0, 275, 221, 190, 324, 389, 251, 71, + 0, 0, 182, 183, 184, 540, 539, 542, 543, 544, + 545, 0, 0, 212, 541, 219, 546, 547, 548, 0, + 233, 273, 239, 232, 404, 0, 0, 0, 0, 533, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 530, 531, 0, 0, 0, 0, 577, 0, 532, + 0, 0, 525, 526, 528, 527, 529, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, - 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, + 0, 576, 0, 0, 435, 0, 0, 574, 0, 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, - 421, 208, 249, 359, 342, 364, 0, 1458, 365, 290, + 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, 193, @@ -2772,9 +2491,9 @@ var yyAct = [...]int{ 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, 214, - 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 198, 287, 0, 356, 252, 448, 430, + 423, 387, 564, 575, 570, 571, 568, 569, 563, 567, + 566, 565, 578, 555, 556, 557, 558, 560, 0, 572, + 573, 559, 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, 207, @@ -2797,13 +2516,13 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 983, 982, 992, 993, 985, 986, 987, 988, + 989, 990, 991, 984, 0, 0, 994, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, 435, - 0, 0, 0, 0, 0, 0, 0, 0, 284, 774, - 281, 186, 201, 772, 0, 323, 362, 368, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, + 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, @@ -2833,13 +2552,13 @@ var yyAct = [...]int{ 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, 0, - 0, 1460, 0, 0, 0, 0, 237, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 809, 0, 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, 0, - 0, 0, 182, 183, 184, 0, 1462, 0, 0, 0, + 0, 0, 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2847,8 +2566,8 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, - 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, - 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, + 0, 0, 0, 808, 435, 0, 0, 0, 0, 0, + 0, 805, 806, 284, 774, 281, 186, 201, 799, 803, 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, @@ -2878,61 +2597,61 @@ var yyAct = [...]int{ 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, - 309, 234, 35, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, - 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, - 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 221, 190, 324, 389, 251, 71, 0, 0, - 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, - 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, - 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, + 309, 234, 327, 0, 0, 0, 1086, 0, 0, 0, + 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, + 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, + 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, + 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, + 190, 324, 389, 251, 0, 0, 0, 182, 183, 184, + 0, 1088, 0, 0, 0, 0, 0, 0, 212, 0, + 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, + 972, 973, 971, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 259, 0, 313, 0, 0, 0, 0, 435, + 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, + 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, + 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, + 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, + 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, + 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, + 444, 200, 374, 216, 193, 396, 417, 213, 377, 0, + 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, + 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, + 432, 197, 0, 431, 319, 408, 416, 308, 299, 196, + 414, 306, 298, 283, 245, 265, 352, 293, 353, 266, + 315, 314, 316, 0, 191, 0, 390, 425, 450, 210, + 0, 0, 403, 441, 446, 0, 355, 211, 256, 244, + 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, + 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, + 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, - 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, - 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, - 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, - 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, - 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, - 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, - 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, - 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, - 225, 449, 204, 432, 197, 0, 431, 319, 408, 416, - 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, - 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, - 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, - 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, - 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, - 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, + 0, 0, 0, 0, 0, 0, 0, 185, 198, 287, + 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 187, 188, 199, 207, 217, 229, 242, 250, 260, + 264, 267, 270, 271, 274, 279, 296, 301, 302, 303, + 304, 320, 321, 322, 325, 328, 329, 332, 334, 335, + 338, 344, 345, 346, 347, 348, 350, 357, 361, 369, + 370, 371, 372, 373, 375, 376, 380, 381, 382, 383, + 391, 395, 410, 411, 422, 434, 438, 261, 418, 439, + 0, 295, 0, 0, 297, 246, 263, 272, 0, 429, + 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, + 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, + 378, 398, 399, 400, 402, 309, 234, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, - 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, - 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, - 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, - 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, - 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, - 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, - 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, - 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, - 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, - 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, - 1480, 0, 0, 1481, 0, 0, 212, 0, 219, 0, + 389, 251, 71, 0, 596, 182, 183, 184, 0, 0, + 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2970,14 +2689,14 @@ var yyAct = [...]int{ 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 237, 0, 1119, 0, 0, 0, + 399, 400, 402, 309, 234, 327, 0, 0, 0, 1461, + 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, - 182, 183, 184, 0, 1118, 0, 0, 0, 0, 0, + 182, 183, 184, 0, 1463, 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2988,7 +2707,7 @@ var yyAct = [...]int{ 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, - 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, + 249, 359, 342, 364, 0, 1459, 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, @@ -3022,17 +2741,17 @@ var yyAct = [...]int{ 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, - 389, 251, 0, 0, 596, 182, 183, 184, 0, 0, + 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, - 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, + 0, 0, 0, 0, 0, 0, 284, 774, 281, 186, + 201, 772, 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, @@ -3061,14 +2780,14 @@ var yyAct = [...]int{ 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, 327, 0, 0, 0, 0, + 399, 400, 402, 309, 234, 327, 0, 0, 0, 1461, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 221, 190, 324, 389, 251, 71, 0, 0, - 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, + 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, + 182, 183, 184, 0, 1463, 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3107,416 +2826,782 @@ var yyAct = [...]int{ 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, - 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, - 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, - 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, - 389, 251, 0, 0, 0, 182, 183, 184, 0, 1462, - 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, - 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, + 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, + 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, + 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, + 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, + 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, + 221, 190, 324, 389, 251, 71, 0, 0, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, + 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, + 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, + 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, + 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, + 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, + 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, + 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, + 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, + 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, + 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, + 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, + 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, + 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, + 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, + 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, + 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, + 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, + 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, - 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, - 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, - 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, - 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, - 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, - 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, - 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, - 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, - 0, 431, 319, 408, 416, 308, 299, 196, 414, 306, - 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, - 316, 0, 191, 0, 390, 425, 450, 210, 0, 0, - 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, - 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, - 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, - 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, + 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 198, 287, 0, 356, - 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, - 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, - 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, - 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, - 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, - 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, - 410, 411, 422, 434, 438, 261, 418, 439, 0, 295, - 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, - 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, - 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, - 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, - 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, + 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, + 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, + 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, + 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, + 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, + 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, + 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, + 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, + 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, + 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, + 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, + 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, - 182, 183, 184, 0, 1088, 0, 0, 0, 0, 0, - 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, - 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, + 0, 0, 0, 182, 183, 184, 0, 0, 1481, 0, + 0, 1482, 0, 0, 212, 0, 219, 0, 0, 0, + 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, - 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, - 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, - 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, - 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, - 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, - 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, - 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, - 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, - 225, 449, 204, 432, 197, 0, 431, 319, 408, 416, - 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, - 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, - 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, - 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, - 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, - 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, + 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, + 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, + 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, + 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, + 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, + 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, + 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, + 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, + 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, + 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, + 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, + 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, + 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, + 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, + 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, + 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, + 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, + 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, + 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, + 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, + 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, + 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, + 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, + 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, + 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, + 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, + 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, + 402, 309, 234, 327, 0, 0, 0, 0, 0, 0, + 0, 0, 237, 0, 1119, 0, 0, 0, 285, 0, + 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, + 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, + 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, + 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, + 184, 0, 1118, 0, 0, 0, 0, 0, 0, 212, + 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, + 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, - 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, - 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, - 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, - 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, - 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, - 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, - 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, - 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, - 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, - 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, - 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, - 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, - 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, - 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, + 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, + 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, + 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, + 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, + 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, + 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, + 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, + 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, + 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, + 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, + 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, + 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, + 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, + 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, + 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, + 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, + 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, - 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, - 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, - 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, - 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, - 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, - 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, - 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, - 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, - 0, 431, 319, 408, 416, 308, 299, 196, 414, 306, - 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, - 316, 0, 191, 0, 390, 425, 450, 210, 0, 0, - 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, - 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, - 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, - 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 198, 287, 1365, 356, - 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, + 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, + 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, + 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, + 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, + 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, + 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, + 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, + 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, + 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, + 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, + 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, + 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, - 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, - 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, - 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, - 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, - 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, - 410, 411, 422, 434, 438, 261, 418, 439, 0, 295, - 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, - 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, - 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, 327, 0, 1243, 0, 0, - 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, - 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, - 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, + 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, + 0, 0, 596, 182, 183, 184, 0, 0, 0, 0, + 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, + 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, - 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, - 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, - 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, + 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, + 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, + 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, + 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, + 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, + 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, + 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, + 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, + 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, + 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, + 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, + 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, + 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, + 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, + 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, + 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, - 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, - 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, - 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, - 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, - 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, - 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, - 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, - 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, - 225, 449, 204, 432, 197, 0, 431, 319, 408, 416, - 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, - 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, - 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, - 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, - 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, - 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, + 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, + 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, + 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, + 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, + 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, + 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, + 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, + 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, + 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, + 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, + 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, + 402, 309, 234, 327, 0, 0, 0, 0, 0, 0, + 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, + 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, + 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, + 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, + 221, 190, 324, 389, 251, 71, 0, 0, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, + 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, + 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, - 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, - 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, - 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, - 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, - 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, - 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, - 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, - 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, - 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 327, 0, 1241, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, - 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, - 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, - 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, - 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, - 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, + 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, + 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, + 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, + 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, + 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, + 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, + 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, + 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, + 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, + 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, + 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, + 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, + 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, + 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, + 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, + 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, + 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, - 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, - 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, - 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, - 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, - 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, - 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, - 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, - 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, - 0, 431, 319, 408, 416, 308, 299, 196, 414, 306, - 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, - 316, 0, 191, 0, 390, 425, 450, 210, 0, 0, - 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, - 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, - 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, - 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, + 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, + 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, + 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, + 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, + 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, + 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, + 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, + 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, + 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, + 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, + 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, + 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 198, 287, 0, 356, - 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, + 0, 0, 0, 182, 183, 184, 0, 1463, 0, 0, + 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, + 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, - 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, - 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, - 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, - 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, - 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, - 410, 411, 422, 434, 438, 261, 418, 439, 0, 295, - 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, - 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, - 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, 327, 0, 1239, 0, 0, - 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, - 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, - 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, - 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, - 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, - 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, + 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, + 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, + 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, + 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, + 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, + 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, + 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, + 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, + 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, + 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, + 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, + 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, + 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, + 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, + 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, + 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, + 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, - 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, - 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, - 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, - 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, - 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, - 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, - 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, - 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, - 225, 449, 204, 432, 197, 0, 431, 319, 408, 416, - 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, - 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, - 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, - 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, - 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, - 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, + 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, + 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, + 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, + 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, + 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, + 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, + 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, + 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, + 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, + 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, + 402, 309, 234, 327, 0, 0, 0, 0, 0, 0, + 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, + 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, + 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, + 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, + 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, + 184, 0, 1088, 0, 0, 0, 0, 0, 0, 212, + 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, + 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, - 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, - 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, - 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, - 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, - 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, - 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, - 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, - 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, - 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 327, 0, 1237, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, - 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, - 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, - 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, - 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, - 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, + 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, + 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, + 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, + 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, + 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, + 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, + 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, + 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, + 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, + 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, + 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, + 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, + 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, + 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, + 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, + 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, + 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, + 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, + 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, + 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, + 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, + 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, + 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, + 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, + 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, + 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, + 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, + 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, - 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, - 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, - 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, - 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, - 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, - 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, - 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, - 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, - 0, 431, 319, 408, 416, 308, 299, 196, 414, 306, - 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, - 316, 0, 191, 0, 390, 425, 450, 210, 0, 0, - 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, - 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, - 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, - 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, + 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, + 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, + 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 198, 287, 0, 356, - 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, - 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, - 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, - 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, - 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, - 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, - 410, 411, 422, 434, 438, 261, 418, 439, 0, 295, - 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, - 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, - 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, 327, 0, 1235, 0, 0, - 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, - 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, - 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, - 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, - 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, - 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, + 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, + 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, + 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, + 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, + 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, + 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, + 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, + 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, + 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, + 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, + 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, + 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, + 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, + 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, + 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, + 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 185, 198, 287, 1366, 356, 252, 448, + 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, + 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, + 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, + 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, + 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, + 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, + 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, + 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, + 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, + 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, + 402, 309, 234, 327, 0, 1243, 0, 0, 0, 0, + 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, + 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, + 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, + 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, + 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, + 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, + 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, + 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, + 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, + 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, + 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, + 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, + 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, + 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, + 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, + 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, + 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, + 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, + 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, + 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, + 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, + 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, + 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, + 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, + 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, + 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, + 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, + 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, + 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, + 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, + 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, + 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, + 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, + 1241, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, + 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, + 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, + 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, + 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, + 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, + 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, + 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, + 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, + 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, + 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, + 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, + 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, + 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, + 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, + 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, + 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, + 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, + 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, + 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, + 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, + 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, + 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, + 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, + 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, + 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, + 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, + 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, + 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, + 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, + 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, + 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, + 402, 309, 234, 327, 0, 1239, 0, 0, 0, 0, + 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, + 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, + 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, + 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, + 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, + 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, + 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, + 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, + 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, + 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, + 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, + 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, + 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, + 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, + 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, + 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, + 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, + 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, + 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, + 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, + 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, + 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, + 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, + 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, + 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, + 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, + 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, + 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, + 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, + 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, + 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, + 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, + 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, + 1237, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, + 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, + 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, + 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, + 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, + 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, + 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, + 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, + 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, + 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, + 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, + 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, + 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, + 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, + 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, + 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, + 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, + 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, + 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, + 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, + 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, + 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, + 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, + 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, + 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, + 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, + 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, + 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, + 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, + 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, + 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, + 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, + 402, 309, 234, 327, 0, 1235, 0, 0, 0, 0, + 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, + 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, + 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, + 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, + 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, + 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, + 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, + 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, + 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, + 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, + 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, + 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, + 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, + 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, + 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, + 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, + 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, + 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, + 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, + 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, + 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, + 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, + 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, + 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, + 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, + 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, + 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, + 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, + 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, + 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, + 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, + 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, + 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, + 1231, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, + 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, + 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, + 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, + 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, + 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, + 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, + 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, + 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, + 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, + 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, + 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, + 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, + 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, + 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, + 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, + 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, + 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, + 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, + 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, + 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, + 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, + 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, + 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, + 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, + 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, + 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, + 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, + 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, + 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, + 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, + 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, + 402, 309, 234, 327, 0, 1229, 0, 0, 0, 0, + 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, + 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, + 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, + 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, + 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, + 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, + 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, + 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, + 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, + 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, + 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, + 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, + 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, + 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, + 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, + 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, + 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, + 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, + 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, + 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, + 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, + 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, + 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, + 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, + 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, + 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, + 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, + 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, + 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, + 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, + 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, + 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, + 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, + 1227, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, + 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, + 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, + 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, + 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, + 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, - 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, - 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, - 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, - 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, - 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, - 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, - 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, - 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, - 225, 449, 204, 432, 197, 0, 431, 319, 408, 416, - 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, - 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, - 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, - 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, - 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, - 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, + 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, + 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, + 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, + 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, + 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, + 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, + 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, + 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, + 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, + 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, + 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, + 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, + 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, + 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, + 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, + 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, + 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, - 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, - 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, - 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, - 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, - 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, - 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, - 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, - 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, - 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 327, 0, 1231, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, - 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, - 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, - 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, - 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, - 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, + 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, + 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, + 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, + 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, + 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, + 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, + 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, + 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, + 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, + 402, 309, 234, 327, 0, 0, 0, 0, 0, 0, + 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, + 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, + 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, + 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, + 221, 190, 324, 389, 251, 1202, 0, 0, 182, 183, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, + 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, + 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, + 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, + 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, + 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, + 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, + 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, + 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, + 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, + 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, + 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, + 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, + 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, + 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, + 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, + 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, + 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, + 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, - 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, - 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, - 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, - 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, - 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, - 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, - 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, - 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, - 0, 431, 319, 408, 416, 308, 299, 196, 414, 306, - 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, - 316, 0, 191, 0, 390, 425, 450, 210, 0, 0, - 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, - 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, - 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, - 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, + 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 198, 287, 0, 356, - 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, - 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, - 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, - 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, - 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, - 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, - 410, 411, 422, 434, 438, 261, 418, 439, 0, 295, - 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, - 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, - 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, 327, 0, 1229, 0, 0, + 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, + 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, + 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, + 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, + 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, + 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, + 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, + 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, + 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, + 215, 378, 398, 399, 400, 402, 309, 234, 1101, 0, + 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, @@ -3562,7 +3647,7 @@ var yyAct = [...]int{ 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 327, 0, 1227, 0, 0, 0, 0, 0, 0, 237, + 327, 0, 0, 0, 0, 0, 0, 0, 1092, 237, 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, @@ -3613,8 +3698,8 @@ var yyAct = [...]int{ 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 221, 190, 324, 389, 251, 1202, 0, 0, - 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, + 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, + 182, 183, 184, 0, 948, 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3632,322 +3717,185 @@ var yyAct = [...]int{ 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, 319, 408, 416, - 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, - 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, - 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, - 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, - 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, - 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, - 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, - 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, - 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, - 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, - 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, - 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, - 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, - 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, - 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 1101, 0, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, - 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, - 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 275, 221, 190, 324, 389, 251, 0, - 0, 0, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 212, 0, 219, 0, 0, 0, 0, - 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, - 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, - 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, - 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, - 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, - 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, - 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, - 280, 384, 257, 189, 288, 444, 200, 374, 216, 193, - 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, - 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, - 412, 413, 225, 449, 204, 432, 197, 0, 431, 319, - 408, 416, 308, 299, 196, 414, 306, 298, 283, 245, - 265, 352, 293, 353, 266, 315, 314, 316, 0, 191, - 0, 390, 425, 450, 210, 0, 0, 403, 441, 446, - 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, - 443, 445, 209, 349, 262, 330, 420, 248, 428, 318, - 205, 268, 386, 282, 291, 0, 0, 336, 367, 214, - 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 198, 287, 0, 356, 252, 448, 430, - 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 187, 188, 199, 207, - 217, 229, 242, 250, 260, 264, 267, 270, 271, 274, - 279, 296, 301, 302, 303, 304, 320, 321, 322, 325, - 328, 329, 332, 334, 335, 338, 344, 345, 346, 347, - 348, 350, 357, 361, 369, 370, 371, 372, 373, 375, - 376, 380, 381, 382, 383, 391, 395, 410, 411, 422, - 434, 438, 261, 418, 439, 0, 295, 0, 0, 297, - 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, - 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, - 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, - 309, 234, 327, 0, 0, 0, 0, 0, 0, 0, - 1092, 237, 0, 0, 0, 0, 0, 285, 0, 0, - 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, - 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, - 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, - 190, 324, 389, 251, 0, 0, 0, 182, 183, 184, - 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, - 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 259, 0, 313, 0, 0, 0, 0, 435, - 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, - 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, - 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, - 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, - 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, - 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, - 444, 200, 374, 216, 193, 396, 417, 213, 377, 0, - 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, - 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, - 432, 197, 0, 431, 319, 408, 416, 308, 299, 196, - 414, 306, 298, 283, 245, 265, 352, 293, 353, 266, - 315, 314, 316, 0, 191, 0, 390, 425, 450, 210, - 0, 0, 403, 441, 446, 0, 355, 211, 256, 244, - 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, - 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, - 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 185, 198, 287, - 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 187, 188, 199, 207, 217, 229, 242, 250, 260, - 264, 267, 270, 271, 274, 279, 296, 301, 302, 303, - 304, 320, 321, 322, 325, 328, 329, 332, 334, 335, - 338, 344, 345, 346, 347, 348, 350, 357, 361, 369, - 370, 371, 372, 373, 375, 376, 380, 381, 382, 383, - 391, 395, 410, 411, 422, 434, 438, 261, 418, 439, - 0, 295, 0, 0, 297, 246, 263, 272, 0, 429, - 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, - 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, - 378, 398, 399, 400, 402, 309, 234, 327, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, - 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, - 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 275, 221, 190, 324, 389, 251, 0, - 0, 0, 182, 183, 184, 0, 948, 0, 0, 0, - 0, 0, 0, 212, 0, 219, 0, 0, 0, 0, - 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, - 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, - 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, - 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, - 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, - 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, - 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, - 280, 384, 257, 189, 288, 444, 200, 374, 216, 193, - 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, - 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, - 412, 413, 225, 449, 204, 432, 197, 0, 431, 319, - 408, 416, 308, 299, 196, 414, 306, 298, 283, 245, - 265, 352, 293, 353, 266, 315, 314, 316, 0, 191, - 0, 390, 425, 450, 210, 0, 0, 403, 441, 446, - 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, - 443, 445, 209, 349, 262, 330, 420, 248, 428, 318, - 205, 268, 386, 282, 291, 0, 0, 336, 367, 214, - 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 198, 287, 0, 356, 252, 448, 430, - 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, + 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, + 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, + 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, + 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, + 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, + 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 187, 188, 199, 207, - 217, 229, 242, 250, 260, 264, 267, 270, 271, 274, - 279, 296, 301, 302, 303, 304, 320, 321, 322, 325, - 328, 329, 332, 334, 335, 338, 344, 345, 346, 347, - 348, 350, 357, 361, 369, 370, 371, 372, 373, 375, - 376, 380, 381, 382, 383, 391, 395, 410, 411, 422, - 434, 438, 261, 418, 439, 0, 295, 0, 0, 297, - 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, - 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, - 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, - 309, 234, 327, 0, 0, 0, 0, 0, 0, 0, - 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, - 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, - 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, - 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, - 190, 324, 389, 251, 0, 0, 0, 182, 183, 184, - 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, - 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, + 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, + 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, + 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, + 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, + 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, + 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, + 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, + 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, + 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, + 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, + 327, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, + 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, + 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, + 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, + 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, + 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, + 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 507, 0, 259, 0, 313, 0, 0, 0, 0, 435, - 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, - 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, - 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, - 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, - 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, - 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, - 444, 200, 374, 216, 193, 396, 417, 213, 377, 0, - 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, - 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, - 432, 197, 0, 431, 319, 408, 416, 308, 299, 196, - 414, 306, 298, 283, 245, 265, 352, 293, 353, 266, - 315, 314, 316, 0, 191, 0, 390, 425, 450, 210, - 0, 0, 403, 441, 446, 0, 355, 211, 256, 244, - 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, - 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, - 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 185, 198, 287, - 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, + 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, + 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, + 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, + 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, + 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, + 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, + 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, + 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, + 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, + 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, + 0, 431, 319, 408, 416, 308, 299, 196, 414, 306, + 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, + 316, 0, 191, 0, 390, 425, 450, 210, 0, 0, + 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, + 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, + 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, + 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 185, 198, 287, 0, 356, + 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 187, 188, 199, 207, 217, 229, 242, 250, 260, - 264, 267, 270, 271, 274, 279, 296, 301, 302, 303, - 304, 320, 321, 322, 325, 328, 329, 332, 334, 335, - 338, 344, 345, 346, 347, 348, 350, 357, 361, 369, - 370, 371, 372, 373, 375, 376, 380, 381, 382, 383, - 391, 395, 410, 411, 422, 434, 438, 506, 418, 439, - 0, 295, 0, 0, 297, 246, 263, 272, 0, 429, - 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, - 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, - 378, 398, 399, 400, 402, 309, 234, 327, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, - 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, - 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, + 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, + 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, + 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, + 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, + 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, + 410, 411, 422, 434, 438, 506, 418, 439, 0, 295, + 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, + 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, + 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, + 399, 400, 402, 309, 234, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, + 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, + 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, + 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 275, 221, 190, 324, 389, 251, 0, - 0, 0, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 212, 0, 219, 0, 0, 0, 0, - 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, + 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, + 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, + 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, + 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, - 0, 0, 456, 0, 435, 0, 0, 0, 0, 0, - 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, - 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, - 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, - 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, - 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, - 280, 384, 257, 189, 288, 444, 200, 374, 216, 193, - 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, - 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, - 412, 413, 225, 449, 204, 432, 197, 0, 431, 319, - 408, 416, 308, 299, 196, 414, 306, 298, 283, 245, - 265, 352, 293, 353, 266, 315, 314, 316, 0, 191, - 0, 390, 425, 450, 210, 0, 0, 403, 441, 446, - 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, - 443, 445, 209, 349, 262, 330, 420, 248, 428, 318, - 205, 268, 386, 282, 291, 0, 0, 336, 367, 214, - 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, + 456, 0, 435, 0, 0, 0, 0, 0, 0, 0, + 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, + 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, + 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, + 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, + 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, + 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, + 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, + 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, + 225, 449, 204, 432, 197, 0, 431, 319, 408, 416, + 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, + 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, + 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, + 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, + 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, + 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 198, 287, 0, 356, 252, 448, 430, - 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 187, 188, 199, 207, - 217, 229, 242, 250, 260, 264, 267, 270, 271, 274, - 279, 296, 301, 302, 303, 304, 320, 321, 322, 325, - 328, 329, 332, 334, 335, 338, 344, 345, 346, 347, - 348, 350, 357, 361, 369, 370, 371, 372, 373, 375, - 376, 380, 381, 382, 383, 391, 395, 410, 411, 422, - 434, 438, 261, 418, 439, 0, 295, 0, 0, 297, - 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, - 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, - 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, - 309, 234, 327, 0, 0, 0, 0, 0, 0, 0, - 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, - 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, - 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, - 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, - 190, 324, 389, 251, 0, 0, 0, 182, 183, 184, - 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, - 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, + 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, + 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, + 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, + 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, + 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, + 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, + 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, + 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, + 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, + 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, + 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, + 327, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, + 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, + 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, + 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, + 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, + 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, + 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 259, 0, 313, 0, 0, 0, 0, 435, - 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, - 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, - 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, - 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, - 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, - 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, - 444, 200, 374, 216, 193, 396, 417, 213, 377, 0, - 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, - 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, - 432, 197, 0, 431, 319, 408, 416, 308, 299, 196, - 414, 306, 298, 283, 245, 265, 352, 293, 353, 266, - 315, 314, 316, 0, 191, 0, 390, 425, 450, 210, - 0, 0, 403, 441, 446, 0, 355, 211, 256, 244, - 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, - 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, - 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 185, 198, 287, - 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, + 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, + 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, + 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, + 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, + 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, + 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, + 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, + 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, + 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, + 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, + 0, 431, 319, 408, 416, 308, 299, 196, 414, 306, + 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, + 316, 0, 191, 0, 390, 425, 450, 210, 0, 0, + 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, + 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, + 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, + 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 185, 198, 287, 0, 356, + 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 187, 188, 199, 207, 217, 229, 242, 250, 260, - 264, 267, 270, 271, 274, 279, 296, 301, 302, 303, - 304, 320, 321, 322, 325, 328, 329, 332, 334, 335, - 338, 344, 345, 346, 347, 348, 350, 357, 361, 369, - 370, 371, 372, 373, 375, 376, 380, 381, 382, 383, - 391, 395, 410, 411, 422, 434, 438, 261, 418, 439, - 0, 295, 0, 0, 297, 246, 263, 272, 0, 429, - 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, - 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, - 378, 398, 399, 400, 402, 309, 234, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, + 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, + 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, + 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, + 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, + 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, + 410, 411, 422, 434, 438, 261, 418, 439, 0, 295, + 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, + 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, + 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, + 399, 400, 402, 309, 234, } var yyPact = [...]int{ - 2708, -1000, -342, 1647, -1000, -1000, -1000, -1000, -1000, -1000, + 3583, -1000, -346, 1591, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1601, 1240, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 581, 1270, 222, 1508, 213, 167, 27823, 412, - 85, 27368, 403, 2109, 27823, -1000, 99, -1000, 86, 27823, - 91, 26913, -1000, -1000, -284, 12775, 1450, 10, 8, 27823, - 106, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1246, - 1573, 1579, 1598, 1090, 1603, -1000, 10942, 10942, 354, 354, - 354, 9122, -1000, -1000, 16883, 27823, 27823, 1275, 402, 952, - 389, 387, 386, -1000, -106, -1000, -1000, -1000, -1000, 1508, - -1000, -1000, 168, -1000, 254, 1237, -1000, 1225, -1000, 419, - 416, 250, 330, 329, 248, 247, 245, 244, 242, 241, - 240, 238, 259, -1000, 539, 539, -172, -179, 296, 321, - 321, 321, 369, 1477, 1461, -1000, 623, -1000, 539, 539, - 164, 539, 539, 539, 539, 221, 219, 539, 539, 539, - 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, - 539, 539, 27823, -1000, 162, 580, 246, 613, 1508, 212, + -1000, -1000, -1000, 1546, 1147, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 551, 1196, 122, 1430, 3694, 202, 27301, 397, + 181, 26846, 393, 91, 27301, -1000, 115, -1000, 102, 27301, + 109, 26391, -1000, -1000, -259, 12253, 1373, 16, 12, 27301, + 133, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1200, + 1489, 1500, 1544, 1037, 1654, -1000, 10420, 10420, 343, 343, + 343, 8600, -1000, -1000, 16361, 27301, 27301, 1205, 392, 935, + 387, 386, 381, -1000, -124, -1000, -1000, -1000, -1000, 1430, + -1000, -1000, 161, -1000, 277, 1153, -1000, 1152, -1000, 416, + 394, 273, 322, 321, 272, 262, 259, 256, 252, 249, + 245, 243, 279, -1000, 525, 525, -162, -165, 3042, 326, + 326, 326, 364, 1385, 1384, -1000, 484, -1000, 525, 525, + 157, 525, 525, 525, 525, 207, 206, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, -1000, -1000, 162, 580, 261, 584, 1430, 186, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -3975,26 +3923,26 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 27823, 400, 952, 349, -1000, 27823, -1000, 483, 27823, - 636, 636, 63, 636, 636, 636, 636, 82, 462, -10, - -1000, 73, 201, 187, 191, 673, 74, 62, -1000, -1000, - 189, 673, 90, -1000, 636, 7246, 7246, 7246, -1000, 1498, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 367, -1000, - -1000, -1000, -1000, 27823, 26458, 278, 598, -1000, -1000, -1000, - 23, -1000, -1000, 1146, 568, -1000, 12775, 2381, 1241, 1241, - -1000, -1000, 471, -1000, -1000, 14140, 14140, 14140, 14140, 14140, - 14140, 14140, 14140, 14140, 14140, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1241, - 479, -1000, 12320, 1241, 1241, 1241, 1241, 1241, 1241, 1241, - 1241, 12775, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, - 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, -1000, - -1000, -1000, 27823, -1000, 1241, 987, 1601, -1000, 1240, -1000, - -1000, -1000, 1494, 12775, 12775, 1601, -1000, 1390, 10942, -1000, - -1000, 1481, -1000, -1000, -1000, -1000, -1000, 711, 1633, -1000, - 15505, 476, 1632, 26003, -1000, 19626, 25548, 1205, 8653, -24, - -1000, -1000, -1000, 592, 18716, -1000, -1000, -1000, -1000, -1000, + -1000, 27301, 391, 935, 331, -1000, 27301, -1000, 456, 27301, + 620, 620, 64, 620, 620, 620, 620, 121, 465, 8, + -1000, 108, 199, 175, 170, 608, 124, 60, -1000, -1000, + 164, 608, 128, -1000, 620, 6724, 6724, 6724, -1000, 1420, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 358, -1000, + -1000, -1000, -1000, 27301, 25936, 271, 579, -1000, -1000, -1000, + -6, -1000, -1000, 1069, 737, -1000, 12253, 1305, 1149, 1149, + -1000, -1000, 427, -1000, -1000, 13618, 13618, 13618, 13618, 13618, + 13618, 13618, 13618, 13618, 13618, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1149, + 448, -1000, 11798, 1149, 1149, 1149, 1149, 1149, 1149, 1149, + 1149, 12253, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, + 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, -1000, + -1000, -1000, 27301, -1000, 1149, 901, 1546, -1000, 1147, -1000, + -1000, -1000, 1427, 12253, 12253, 1546, -1000, 1301, 10420, -1000, + -1000, 1493, -1000, -1000, -1000, -1000, -1000, 688, 1567, -1000, + 14983, 445, 1559, 25481, -1000, 19104, 25026, 1143, 8131, -74, + -1000, -1000, -1000, 577, 18194, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1498, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1420, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -4006,188 +3954,188 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1128, 27823, -1000, - -1000, 2563, 952, -1000, 1269, -1000, 1123, -1000, 1249, 162, - 352, 1287, 952, 952, 952, 352, -1000, -1000, -1000, 539, - 539, 257, 213, 3838, -1000, -1000, -1000, 25086, 1268, 952, - -1000, 1267, -1000, 1531, 337, 579, 579, 952, -1000, -1000, - 27823, 952, 1530, 1527, 27823, 27823, -1000, 24631, -1000, 24176, - 23721, 867, 27823, 23266, 22811, 22356, 21901, 21446, -1000, 1347, - -1000, 1262, -1000, -1000, -1000, 27823, 27823, 27823, -6, -1000, - -1000, 27823, 952, -1000, -1000, 860, 851, 539, 539, 850, - 986, 982, 977, 539, 539, 820, 976, 1012, 190, 813, - 804, 801, 831, 974, 108, 810, 789, 794, 27823, 1266, - -1000, 150, 578, 220, 270, 200, 27823, 132, 1571, 198, - 1508, 1449, 1202, 366, 349, 1308, 27823, 1553, 349, -1000, - 7715, -1000, -1000, 973, 12775, -1000, 679, 673, 673, -1000, - -1000, -1000, -1000, -1000, -1000, 636, 27823, 679, -1000, -1000, - -1000, 673, 636, 27823, 636, 636, 636, 636, 673, 636, - 27823, 27823, 27823, 27823, 27823, 27823, 27823, 27823, 27823, 7246, - 7246, 7246, 528, 636, -1000, 1307, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 89, -1000, -1000, -1000, -1000, -1000, - 1647, -1000, -1000, -1000, -115, 1181, 20991, -1000, -288, -289, - -290, -291, -1000, -1000, -1000, -292, -297, -1000, -1000, -1000, - 12775, 12775, 12775, 12775, 786, 530, 14140, 756, 533, 14140, - 14140, 14140, 14140, 14140, 14140, 14140, 14140, 14140, 14140, 14140, - 14140, 14140, 14140, 14140, 718, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 952, -1000, 1637, 1039, 1039, 491, 491, - 491, 491, 491, 491, 491, 491, 491, 14595, 9577, 7715, - 1090, 1117, 1601, 10942, 10942, 12775, 12775, 11852, 11397, 10942, - 1472, 631, 568, 27823, -1000, 881, -1000, -1000, 13685, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1046, 27301, -1000, + -1000, 4261, 935, -1000, 1194, -1000, 1043, -1000, 1176, 162, + -1000, 1223, 935, 935, 935, 333, -1000, -1000, -1000, 525, + 525, 257, 3694, 4015, -1000, -1000, -1000, 24564, 1193, 935, + -1000, 1190, -1000, 1448, 352, 531, 531, 935, -1000, -1000, + 27301, 935, 1447, 1446, 27301, 27301, -1000, 24109, -1000, 23654, + 23199, 816, 27301, 22744, 22289, 21834, 21379, 20924, -1000, 1262, + -1000, 1159, -1000, -1000, -1000, 27301, 27301, 27301, 39, -1000, + -1000, 27301, 935, -1000, -1000, 790, 789, 525, 525, 775, + 899, 890, 889, 525, 525, 771, 887, 927, 182, 770, + 768, 765, 879, 883, 107, 874, 774, 764, 27301, 1189, + 27301, 156, 549, 216, 254, 204, 27301, 126, 1482, 152, + 1430, 1372, 1142, 357, -1000, 1249, 27301, 1471, 331, -1000, + 7193, -1000, -1000, 882, 12253, -1000, 611, 608, 608, -1000, + -1000, -1000, -1000, -1000, -1000, 620, 27301, 611, -1000, -1000, + -1000, 608, 620, 27301, 620, 620, 620, 620, 608, 620, + 27301, 27301, 27301, 27301, 27301, 27301, 27301, 27301, 27301, 6724, + 6724, 6724, 498, 620, -1000, 1247, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 105, -1000, -1000, -1000, -1000, -1000, + 1591, -1000, -1000, -1000, -112, 1137, 20469, -1000, -287, -289, + -290, -292, -1000, -1000, -1000, -293, -294, -1000, -1000, -1000, + 12253, 12253, 12253, 12253, 677, 504, 13618, 720, 617, 13618, + 13618, 13618, 13618, 13618, 13618, 13618, 13618, 13618, 13618, 13618, + 13618, 13618, 13618, 13618, 675, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 935, -1000, 1561, 1376, 1376, 475, 475, + 475, 475, 475, 475, 475, 475, 475, 14073, 9055, 7193, + 1037, 1041, 1546, 10420, 10420, 12253, 12253, 11330, 10875, 10420, + 1424, 591, 737, 27301, -1000, 911, -1000, -1000, 13163, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 27823, 27823, 10942, 10942, 10942, 10942, 10942, -1000, 1177, - -1000, -175, 16428, 12775, -1000, 1579, 1090, 1481, 1546, 1641, - 520, 863, 1176, -1000, 964, 1579, 18261, 1222, -1000, 1481, - -1000, -1000, -1000, 27823, -1000, -1000, 20536, -1000, -1000, 6777, - 27823, 234, 27823, -1000, 1190, 1567, -1000, -1000, -1000, 1568, - 17806, 27823, 1145, 1122, -1000, -1000, 474, 8184, -24, -1000, - 8184, 1160, -1000, -67, -37, 10032, 467, -1000, -1000, -1000, - 296, 15050, 1114, -1000, 25, -1000, -1000, -1000, 1249, -1000, - 1249, 1249, 1249, 1249, -6, -6, -6, -6, -1000, -1000, - -1000, -1000, -1000, 1264, 1263, -1000, 1249, 1249, 1249, 1249, + -1000, 27301, 27301, 10420, 10420, 10420, 10420, 10420, -1000, 1136, + -1000, -161, 15906, 12253, -1000, 1500, 1037, 1493, 1453, 1585, + 494, 837, 1132, -1000, 777, 1500, 17739, 1151, -1000, 1493, + -1000, -1000, -1000, 27301, -1000, -1000, 20014, -1000, -1000, 6255, + 27301, 232, 27301, -1000, 1116, 1480, -1000, -1000, -1000, 1485, + 17284, 27301, 1119, 1076, -1000, -1000, 441, 7662, -74, -1000, + 7662, 1110, -1000, -23, -67, 9510, 470, -1000, -1000, -1000, + 3042, 14528, 1027, -1000, 51, -1000, -1000, -1000, 1176, -1000, + 1176, 1176, 1176, 1176, 39, 39, 39, 39, -1000, -1000, + -1000, -1000, -1000, 1188, 1186, -1000, 1176, 1176, 1176, 1176, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1256, 1256, 1256, - 1251, 1251, 314, -1000, 12775, 178, 27823, 1539, 791, 150, - 27823, 587, 1306, -1000, 27823, 1287, 1287, 1287, 27823, 970, - 877, -1000, 1175, -1000, -1000, 1597, -1000, -1000, 514, 671, - 668, 565, 27823, 114, 233, -1000, 308, -1000, 27823, 1254, - 1524, 579, 952, -1000, 952, -1000, -1000, -1000, -1000, 463, - -1000, -1000, 952, 1174, -1000, 1140, 707, 662, 704, 661, - 1174, -1000, -1000, -151, 1174, -1000, 1174, -1000, 1174, -1000, - 1174, -1000, 1174, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 534, 27823, 114, 718, -1000, 356, -1000, -1000, 718, - 718, -1000, -1000, -1000, -1000, 971, 969, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1184, 1184, 1184, + 1178, 1178, 318, -1000, 12253, 132, 27301, 1464, 752, 156, + 333, 1246, -1000, 27301, 1223, 1223, 1223, 27301, 607, 827, + 788, -1000, 1130, -1000, -1000, 1541, -1000, -1000, 474, 659, + 631, 487, 27301, 139, 227, -1000, 314, -1000, 27301, 1182, + 1444, 531, 935, -1000, 935, -1000, -1000, -1000, -1000, 436, + -1000, -1000, 935, 1129, -1000, 1090, 684, 628, 680, 626, + 1129, -1000, -1000, -144, 1129, -1000, 1129, -1000, 1129, -1000, + 1129, -1000, 1129, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 546, 27301, 139, 675, -1000, 351, -1000, -1000, 675, + 675, -1000, -1000, -1000, -1000, 873, 872, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -334, 27823, 376, 142, 151, 27823, 27823, - 27823, 27823, 27823, 424, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 202, 27823, 27823, 27823, 27823, 401, -1000, -1000, 27823, - -1000, -1000, -1000, -1000, 568, 27823, -1000, -1000, 636, 636, - -1000, -1000, 27823, 636, -1000, -1000, -1000, -1000, -1000, -1000, - 636, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 963, -1000, 27823, 27823, -1000, - -1000, -1000, -1000, -1000, 70, -71, 177, -1000, -1000, -1000, - -1000, 1576, -1000, 568, 530, 633, 583, -1000, -1000, 806, - -1000, -1000, 1277, -1000, -1000, -1000, -1000, 756, 14140, 14140, - 14140, 589, 1277, 2508, 1344, 1652, 491, 656, 656, 504, - 504, 504, 504, 504, 717, 717, -1000, -1000, -1000, -1000, - 881, -1000, -1000, -1000, 881, 10942, 10942, 1172, 1241, 451, - -1000, 1246, -1000, -1000, 1579, 1092, 1092, 829, 1011, 619, - 1626, 1092, 608, 1623, 1092, 1092, 10942, -1000, -1000, 695, - -1000, 12775, 881, -1000, 892, 1166, 1165, 1092, 881, 881, - 1092, 1092, 27823, -1000, -280, -1000, -86, 460, 1241, -1000, - 20081, -1000, -1000, 881, 1146, 1494, -1000, -1000, 1466, -1000, - 1387, 12775, 12775, 12775, -1000, -1000, -1000, 1494, 1578, -1000, - 1400, 1397, 1615, 10942, 19626, 1481, -1000, -1000, -1000, 448, - 1615, 1189, 1241, -1000, 27823, 19626, 19626, 19626, 19626, 19626, - -1000, 1321, 1320, -1000, 1361, 1358, 1338, 27823, -1000, 1111, - 1090, 17806, 234, 1157, 19626, 27823, -1000, -1000, 19626, 27823, - 6308, -1000, 1160, -24, -49, -1000, -1000, -1000, -1000, 568, - -1000, 858, -1000, 2216, -1000, 315, -1000, -1000, -1000, -1000, - 480, 15, -1000, -1000, -6, -6, -1000, -1000, 467, 748, - 467, 467, 467, 958, 958, -1000, -1000, -1000, -1000, -1000, - 787, -1000, -1000, -1000, 777, -1000, -1000, 960, 1342, 178, - -1000, -1000, 539, 956, 1455, -1000, -1000, 1049, 374, -1000, - 1552, 27823, -1000, 1305, 1302, 1297, -1000, -1000, -1000, -1000, - -1000, 3686, 27823, 1105, -1000, 111, 27823, 1040, 27823, -1000, - 1100, 27823, -1000, 952, -1000, -1000, 7715, -1000, 27823, 1241, - -1000, -1000, -1000, -1000, 398, 1506, 1505, 114, 111, 467, - 952, -1000, -1000, -1000, -1000, -1000, -337, 1096, 27823, 141, - -1000, 1253, 993, -1000, 1283, -1000, -1000, -1000, -1000, 109, - 215, 216, 331, -1000, 377, 1342, 27823, -1000, -1000, -1000, - -1000, 673, -1000, -1000, 673, -1000, -1000, -1000, -1000, -1000, - -1000, 1496, -75, -311, -1000, -307, -1000, -1000, -1000, -1000, - 589, 1277, 2421, -1000, 14140, 14140, -1000, -1000, 1092, 1092, - 10942, 7715, 1601, 1494, -1000, -1000, 285, 718, 285, 14140, - 14140, -1000, 14140, 14140, -1000, -119, 1168, 622, -1000, 12775, - 672, -1000, -1000, 14140, 14140, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 385, 380, 379, 27823, -1000, -1000, - -1000, 878, 929, 1369, 568, 568, -1000, -1000, 27823, -1000, - -1000, -1000, -1000, 1604, 12775, -1000, 1158, -1000, 5839, 1579, - 1294, 27823, 1241, 1647, 15973, 27823, 1167, -1000, 566, 1567, - 1281, 1293, 1393, -1000, -1000, -1000, -1000, 1319, -1000, 1280, - -1000, -1000, -1000, -1000, -1000, 1090, 1615, 19626, 1135, -1000, - 1135, -1000, 446, -1000, -1000, -1000, -80, -52, -1000, -1000, - -1000, 296, -1000, -1000, -1000, 684, 14140, 1640, -1000, 915, - 1519, -1000, 1518, -1000, -1000, 467, 467, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1087, -1000, 1082, 1156, 1079, 54, - -1000, 1194, 1493, 539, 539, -1000, 775, -1000, 952, -1000, - 27823, -1000, -1000, 27823, 27823, 27823, 1595, 1155, -1000, 27823, - -1000, -1000, 27823, -1000, -1000, 1396, 178, 1077, -1000, -1000, - -1000, 233, 27823, -1000, 1039, 111, -1000, -1000, -1000, -1000, - -1000, -1000, 1243, -1000, -1000, -1000, 1009, -1000, -159, 952, - 27823, 27823, 27823, -1000, 27823, -1000, -1000, -1000, 636, 636, - -1000, 1485, -1000, 952, -1000, 14140, 1277, 1277, -1000, -1000, - 881, -1000, 1579, -1000, 881, 1249, 1249, -1000, 1249, 1251, - -1000, 1249, 79, 1249, 69, 881, 881, 2295, 2211, 2145, - 1797, 1241, -113, -1000, 568, 12775, 1257, 876, 1241, 1241, - 1241, 1058, 911, -6, -1000, -1000, -1000, 1607, 1594, 568, - -1000, -1000, -1000, 1535, 1017, 1134, -1000, -1000, 10487, 1068, - 1394, 439, 1058, 1601, 27823, 12775, -1000, -1000, 12775, 1248, - -1000, 12775, -1000, -1000, -1000, 1601, 1601, 1135, -1000, -1000, - 505, -1000, -1000, -1000, -1000, -1000, 1277, -66, -1000, -1000, - -1000, -1000, -1000, -6, 908, -6, 757, -1000, 746, -1000, - -1000, -218, -1000, -1000, 1211, 1323, -1000, -1000, 1243, -1000, - -1000, -1000, 27823, 27823, -1000, -1000, 230, -1000, 279, 1034, - -1000, -173, -1000, -1000, 1565, 27823, -1000, -1000, 7715, -1000, - -1000, 1242, 1286, -1000, -1000, -1000, -1000, -1000, -1000, 1277, - -1000, 1494, -1000, -1000, 218, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 14140, 14140, 14140, 14140, 14140, 1579, 905, - 568, 14140, 14140, 19171, 27823, 27823, 17338, -6, 0, -1000, - 12775, 12775, 1511, -1000, 1241, -1000, 1170, 27823, 1241, 27823, - -1000, 1579, -1000, 568, 568, 27823, 568, 1579, -1000, -1000, - 467, -1000, 467, 1003, 1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1560, 1155, -1000, 228, 27823, -1000, 233, - -1000, -180, -181, 1240, 1032, 1153, -1000, 538, 27823, 27823, - -1000, -1000, -1000, 892, 892, 892, 892, 211, 881, -1000, - 892, 892, 1030, -1000, 1030, 1030, 460, -271, -1000, 1445, - 1420, 568, 1146, 1638, -1000, 1241, 1647, 436, 1134, -1000, - -1000, 1027, -1000, -1000, -1000, -1000, -1000, 1240, 1241, 1212, - -1000, -1000, -1000, 180, -1000, 7715, 5370, 1022, -1000, -1000, - -1000, -1000, -1000, 881, 161, -162, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 0, 287, -1000, 1403, 1420, -1000, 1593, - 1426, 1590, -1000, 27823, 1134, 27823, -1000, 180, 13230, 27823, - -1000, -56, -1000, -1000, -1000, -1000, -1000, 1283, -1000, 1366, - -130, -169, 1419, 1422, 1422, 1403, -1000, 1588, 1586, -1000, - 903, 1584, 898, 1120, -1000, -1000, 892, 881, 998, 309, - -1000, -1000, -159, -1000, 1359, -1000, 1417, 797, -1000, -1000, - -1000, -1000, 880, 879, -1000, 859, -1000, -1000, -1000, 1290, - 166, -1000, -160, -1000, 744, -1000, -1000, -1000, -1000, -1000, - 1289, -1000, 1631, -1000, -165, -1000, -1000, -1000, 1636, 425, - 425, -171, -1000, -1000, -1000, 304, 799, -1000, -1000, -1000, - -1000, -1000, + -1000, -1000, -1000, -335, 27301, -1000, 372, 144, 150, 27301, + 27301, 27301, 27301, 27301, 409, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 200, 27301, 27301, 331, 27301, 415, -1000, -1000, + 27301, -1000, -1000, -1000, -1000, 737, 27301, -1000, -1000, 620, + 620, -1000, -1000, 27301, 620, -1000, -1000, -1000, -1000, -1000, + -1000, 620, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 866, -1000, 27301, 27301, + -1000, -1000, -1000, -1000, -1000, 21, -26, 179, -1000, -1000, + -1000, -1000, 1492, -1000, 737, 504, 632, 519, -1000, -1000, + 733, -1000, -1000, 2416, -1000, -1000, -1000, -1000, 720, 13618, + 13618, 13618, 1241, 2416, 2202, 1005, 1111, 475, 656, 656, + 467, 467, 467, 467, 467, 615, 615, -1000, -1000, -1000, + -1000, 911, -1000, -1000, -1000, 911, 10420, 10420, 1126, 1149, + 434, -1000, 1200, -1000, -1000, 1500, 1015, 1015, 740, 950, + 564, 1557, 1015, 562, 1556, 1015, 1015, 10420, -1000, -1000, + 614, -1000, 12253, 911, -1000, 1815, 1123, 1118, 1015, 911, + 911, 1015, 1015, 27301, -1000, -275, -1000, -34, 477, 1149, + -1000, 19559, -1000, -1000, 911, 1069, 1427, -1000, -1000, 1358, + -1000, 1298, 12253, 12253, 12253, -1000, -1000, -1000, 1427, 1511, + -1000, 1328, 1311, 1551, 10420, 19104, 1493, -1000, -1000, -1000, + 430, 1551, 1101, 1149, -1000, 27301, 19104, 19104, 19104, 19104, + 19104, -1000, 1285, 1279, -1000, 1276, 1260, 1284, 27301, -1000, + 1033, 1037, 17284, 232, 1075, 19104, 27301, -1000, -1000, 19104, + 27301, 5786, -1000, 1110, -74, -81, -1000, -1000, -1000, -1000, + 737, -1000, 782, -1000, 2721, -1000, 316, -1000, -1000, -1000, + -1000, 669, 26, -1000, -1000, 39, 39, -1000, -1000, 470, + 686, 470, 470, 470, 863, 863, -1000, -1000, -1000, -1000, + -1000, 748, -1000, -1000, -1000, 728, -1000, -1000, 884, 1252, + 132, -1000, -1000, 525, 861, 1378, -1000, -1000, 983, 371, + 27301, 27301, -1000, 1245, 1243, 1240, -1000, 1470, -1000, -1000, + -1000, -1000, 3920, 27301, 1031, -1000, 136, 27301, 979, 27301, + -1000, 1021, 27301, -1000, 935, -1000, -1000, 7193, -1000, 27301, + 1149, -1000, -1000, -1000, -1000, 390, 1425, 1422, 139, 136, + 470, 935, -1000, -1000, -1000, -1000, -1000, -341, 1017, 27301, + 148, -1000, 1181, 905, -1000, 1219, -1000, -1000, -1000, -1000, + 138, 210, 192, 348, -1000, 27301, 1252, 27301, -1000, -1000, + -1000, -1000, 608, -1000, -1000, 608, -1000, -1000, -1000, -1000, + -1000, -1000, 1390, -28, -308, -1000, -305, -1000, -1000, -1000, + -1000, 1241, 2416, 2121, -1000, 13618, 13618, -1000, -1000, 1015, + 1015, 10420, 7193, 1546, 1427, -1000, -1000, 258, 675, 258, + 13618, 13618, -1000, 13618, 13618, -1000, -136, 1052, 547, -1000, + 12253, 857, -1000, -1000, 13618, 13618, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 380, 379, 378, 27301, -1000, + -1000, -1000, 794, 860, 1296, 737, 737, -1000, -1000, 27301, + -1000, -1000, -1000, -1000, 1549, 12253, -1000, 1103, -1000, 5317, + 1500, 1239, 27301, 1149, 1591, 15451, 27301, 1092, -1000, 548, + 1480, 1215, 1238, 1418, -1000, -1000, -1000, -1000, 1278, -1000, + 1270, -1000, -1000, -1000, -1000, -1000, 1037, 1551, 19104, 1079, + -1000, 1079, -1000, 418, -1000, -1000, -1000, -31, -73, -1000, + -1000, -1000, 3042, -1000, -1000, -1000, 682, 13618, 1581, -1000, + 855, 1442, -1000, 1440, -1000, -1000, 470, 470, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1012, -1000, 999, 1093, 997, + 72, -1000, 1096, 1389, 525, 525, -1000, 722, -1000, 935, + -1000, 27301, -1000, -1000, 27301, 27301, 27301, -1000, 1535, 1082, + -1000, 27301, -1000, -1000, 27301, -1000, -1000, 1310, 132, 982, + -1000, -1000, -1000, 227, 27301, -1000, 1376, 136, -1000, -1000, + -1000, -1000, -1000, -1000, 1171, -1000, -1000, -1000, 973, -1000, + -145, 935, 27301, 27301, 27301, -1000, 27301, 403, -1000, -1000, + 620, 620, -1000, 1388, -1000, 935, -1000, 13618, 2416, 2416, + -1000, -1000, 911, -1000, 1500, -1000, 911, 1176, 1176, -1000, + 1176, 1178, -1000, 1176, 93, 1176, 78, 911, 911, 2374, + 2326, 2294, 2187, 1149, -131, -1000, 737, 12253, 1704, 898, + 1149, 1149, 1149, 972, 852, 39, -1000, -1000, -1000, 1513, + 1525, 737, -1000, -1000, -1000, 1451, 1001, 1051, -1000, -1000, + 9965, 978, 1304, 413, 972, 1546, 27301, 12253, -1000, -1000, + 12253, 1175, -1000, 12253, -1000, -1000, -1000, 1546, 1546, 1079, + -1000, -1000, 473, -1000, -1000, -1000, -1000, -1000, 2416, -12, + -1000, -1000, -1000, -1000, -1000, 39, 851, 39, 721, -1000, + 718, -1000, -1000, -206, -1000, -1000, 1091, 1256, -1000, -1000, + 1171, -1000, -1000, -1000, 27301, 27301, -1000, -1000, 223, -1000, + 293, 967, -1000, -160, -1000, -1000, 1483, 27301, -1000, -1000, + 7193, -1000, -1000, 1155, 1222, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 2416, -1000, 1427, -1000, -1000, 224, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 13618, 13618, 13618, 13618, + 13618, 1500, 848, 737, 13618, 13618, 18649, 27301, 27301, 16816, + 39, 38, -1000, 12253, 12253, 1428, -1000, 1149, -1000, 1148, + 27301, 1149, 27301, -1000, 1500, -1000, 737, 737, 27301, 737, + 1500, -1000, -1000, 470, -1000, 470, 968, 957, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 1473, 1082, -1000, 209, + 27301, -1000, 227, -1000, -167, -168, 1147, 942, 1078, -1000, + 513, 27301, 27301, -1000, -1000, -1000, 1815, 1815, 1815, 1815, + 85, 911, -1000, 1815, 1815, 940, -1000, 940, 940, 477, + -260, -1000, 1369, 1356, 737, 1069, 1578, -1000, 1149, 1591, + 408, 1051, -1000, -1000, 934, -1000, -1000, -1000, -1000, -1000, + 1147, 1149, 1102, -1000, -1000, -1000, 193, -1000, 7193, 4848, + 923, -1000, -1000, -1000, -1000, -1000, 911, 137, -148, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 38, 288, -1000, 1341, + 1356, -1000, 1524, 1362, 1520, -1000, 27301, 1051, 27301, -1000, + 193, 12708, 27301, -1000, -54, -1000, -1000, -1000, -1000, -1000, + 1219, -1000, 1295, -141, -153, 1340, 1342, 1342, 1341, -1000, + 1517, 1512, -1000, 847, 1502, 832, 928, -1000, -1000, 1815, + 911, 914, 315, -1000, -1000, -145, -1000, 1293, -1000, 1338, + 708, -1000, -1000, -1000, -1000, 820, 795, -1000, 741, -1000, + -1000, -1000, 1236, 159, -1000, -146, -1000, 705, -1000, -1000, + -1000, -1000, -1000, 1226, -1000, 1555, -1000, -151, -1000, -1000, + -1000, 1573, 478, 478, -156, -1000, -1000, -1000, 303, 738, + -1000, -1000, -1000, -1000, -1000, } var yyPgo = [...]int{ - 0, 1902, 1899, 32, 88, 85, 1898, 1897, 1896, 1894, - 131, 130, 129, 1891, 1889, 1888, 1886, 1885, 1884, 1883, - 1882, 1880, 1878, 1877, 1872, 65, 122, 37, 39, 126, - 1870, 1869, 53, 1868, 1866, 1864, 120, 116, 463, 1858, - 119, 1857, 1856, 1853, 1852, 1849, 1848, 1847, 1846, 1845, - 1842, 1838, 1837, 1836, 1835, 182, 1834, 1833, 5, 1832, - 56, 1831, 1829, 1828, 1823, 1822, 87, 1820, 1818, 1814, - 104, 1813, 1812, 48, 114, 51, 74, 1811, 1809, 76, - 814, 1808, 93, 128, 1807, 181, 1806, 42, 79, 69, - 1805, 44, 1804, 1803, 90, 1801, 1799, 1796, 67, 1794, - 1779, 3133, 1777, 66, 80, 20, 31, 1776, 1775, 1774, - 1773, 34, 450, 1772, 1771, 23, 1770, 1769, 145, 1767, - 86, 18, 1766, 16, 14, 21, 1761, 82, 1760, 11, - 58, 30, 1759, 83, 1758, 1756, 1755, 1754, 43, 1751, - 72, 107, 160, 1749, 1748, 7, 15, 1747, 1744, 1743, - 1742, 1741, 1737, 10, 1734, 2, 1731, 26, 1725, 17, - 22, 71, 47, 28, 8, 1724, 121, 1723, 27, 125, - 63, 109, 1722, 1721, 1720, 844, 140, 1717, 1716, 35, - 1715, 113, 124, 1714, 1486, 1713, 1712, 68, 1276, 2523, - 13, 111, 1711, 1709, 2164, 59, 78, 24, 1708, 75, - 1707, 1706, 1705, 127, 118, 50, 841, 46, 1704, 1703, - 1702, 1700, 1698, 1697, 1696, 133, 9, 19, 99, 29, - 1694, 1693, 1692, 61, 41, 1691, 108, 103, 64, 94, - 1690, 112, 106, 73, 1689, 40, 1687, 1686, 1685, 1684, - 45, 1683, 1681, 1680, 1679, 98, 89, 57, 36, 1678, - 38, 91, 102, 101, 1674, 25, 123, 12, 1673, 6, - 0, 1672, 3, 117, 1501, 115, 1671, 1670, 1, 1669, - 4, 1668, 1662, 81, 1661, 1660, 1659, 1658, 3249, 559, - 110, 1656, 134, + 0, 1889, 1888, 11, 84, 79, 1887, 1886, 1881, 1880, + 135, 134, 130, 1875, 1873, 1870, 1868, 1866, 1858, 1857, + 1856, 1855, 1854, 1853, 1852, 58, 125, 35, 38, 124, + 1850, 1848, 48, 1846, 1831, 1830, 122, 120, 484, 1829, + 127, 1828, 1823, 1821, 1816, 1815, 1814, 1813, 1812, 1811, + 1810, 1808, 1807, 1806, 1804, 129, 1802, 1800, 6, 1799, + 31, 1798, 1794, 1793, 1792, 1790, 83, 1789, 1788, 1785, + 114, 1784, 1783, 45, 338, 63, 74, 1782, 1780, 106, + 805, 1775, 107, 126, 1774, 194, 1773, 40, 80, 88, + 1772, 43, 1770, 1768, 50, 1767, 1765, 1763, 76, 1762, + 1761, 2917, 1760, 69, 78, 14, 33, 1758, 1757, 1754, + 1753, 36, 1877, 1750, 1749, 27, 1744, 1742, 140, 1741, + 81, 21, 1739, 15, 22, 17, 1738, 89, 1737, 44, + 51, 34, 1736, 86, 1733, 1731, 1729, 1728, 25, 1727, + 73, 98, 30, 1725, 1724, 7, 13, 1722, 1721, 1720, + 1712, 1708, 1706, 10, 1705, 4, 1704, 26, 1703, 18, + 23, 71, 72, 29, 9, 1701, 99, 1700, 28, 119, + 67, 117, 1697, 1694, 1693, 851, 141, 1692, 1690, 68, + 1688, 90, 102, 1687, 1407, 1686, 1685, 56, 1291, 2583, + 19, 112, 1684, 1682, 1611, 66, 77, 24, 1680, 57, + 1679, 1677, 1672, 121, 139, 75, 797, 42, 1671, 1665, + 1662, 1661, 1659, 1657, 1656, 47, 188, 20, 103, 32, + 1655, 1653, 1652, 64, 37, 1650, 110, 109, 65, 192, + 1649, 118, 94, 53, 1647, 104, 1645, 1644, 1643, 1640, + 41, 1639, 1638, 1636, 1634, 108, 85, 61, 46, 1633, + 39, 93, 101, 91, 1629, 16, 123, 8, 1626, 3, + 0, 1625, 5, 133, 1402, 105, 1624, 1623, 1, 1619, + 2, 1618, 1607, 82, 1606, 1604, 1599, 1598, 115, 850, + 113, 1597, 155, } //line sql.y:5200 @@ -4778,7 +4726,7 @@ var yyR2 = [...]int{ 0, 4, 3, 5, 4, 1, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 6, 11, 2, 0, 2, 0, 2, 1, 0, 2, 1, 3, - 3, 5, 3, 6, 7, 7, 7, 5, 2, 1, + 3, 6, 4, 6, 7, 7, 7, 5, 2, 1, 1, 4, 0, 1, 1, 1, 2, 2, 0, 1, 4, 4, 4, 4, 2, 4, 1, 3, 1, 1, 3, 4, 3, 3, 3, 3, 0, 2, 3, 3, @@ -4809,7 +4757,7 @@ var yyR2 = [...]int{ 7, 5, 9, 4, 4, 4, 4, 5, 3, 7, 4, 4, 4, 4, 3, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 0, - 2, 2, 1, 3, 8, 8, 3, 3, 5, 6, + 2, 2, 1, 3, 8, 8, 3, 3, 5, 7, 6, 5, 5, 3, 2, 3, 3, 3, 7, 3, 3, 3, 3, 4, 7, 5, 2, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, @@ -4995,7 +4943,7 @@ var yyChk = [...]int{ 34, -186, -229, 167, 23, -235, -235, -166, 143, -235, -235, -235, -235, 207, 207, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, - -101, -83, 214, 153, 155, 158, 73, 88, 228, 118, + -55, -83, 214, 153, 155, 158, 73, 88, 228, 118, -38, 209, -22, -101, 164, -260, -181, 169, -55, -101, 150, -101, -179, 126, 13, -179, -176, 289, 293, 294, 295, -179, -179, -179, -179, 210, 304, -230, 165, 34, @@ -5026,7 +4974,7 @@ var yyChk = [...]int{ 272, 273, 274, 275, 276, 277, 278, 279, 239, 258, 345, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, -263, -260, 81, 83, 82, -215, 81, -83, - -182, 169, -251, -248, 74, -260, -260, -260, -182, -235, + -55, -251, -248, 74, -260, -260, -260, -182, 169, -235, -235, 196, -29, -26, -256, 16, -25, -26, 158, 102, 103, 155, 81, -224, 81, -233, -263, -260, 81, 29, 171, 170, -232, -229, -232, -233, -260, -129, -189, -194, @@ -5037,103 +4985,103 @@ var yyChk = [...]int{ -235, 89, 88, 88, 88, -235, -235, 89, 88, -260, 88, -266, 182, 224, 226, 89, 89, 89, 89, 30, 88, -267, 30, 463, 462, 464, 465, 466, 89, 30, - 89, 30, 89, -189, 81, -82, 216, 118, 205, 205, - 164, 164, 218, -101, 229, 230, 228, 21, 217, 219, - 221, 41, 82, 167, -181, 73, -96, -101, 24, -181, - -195, -194, -187, 88, -85, -231, 12, 128, -199, -199, - -179, -101, -231, -199, -179, -101, -179, -179, -179, -179, - -199, -179, -194, -194, -101, -101, -101, -101, -101, -101, - -101, -204, -204, -204, -180, 126, -179, 73, -202, 236, - 270, 435, 436, 437, 82, 347, -94, 441, 441, 441, - 441, 441, 441, -85, -85, -85, -85, -119, 98, 110, - 99, 100, -112, -120, -124, -127, 93, 128, 126, 127, - 112, -112, -112, -112, -112, -112, -112, -112, -112, -112, - -112, -112, -112, -112, -112, -112, -205, -260, 88, 144, - -260, -111, -111, -189, -75, 22, 37, -74, -190, -195, - -187, -70, -279, -279, -138, -74, -74, -85, -85, -129, - 88, -74, -129, 88, -74, -74, -69, 22, 37, -132, - -133, 114, -129, -279, -112, -189, -189, -74, -75, -75, - -74, -74, 82, -274, 317, 318, 439, -197, 199, -196, - 23, -194, 88, -122, -121, -142, -279, -143, 27, 10, - 128, 82, 19, 82, -141, 25, 26, -142, -113, -189, - 89, 92, -86, 82, 12, -79, -101, -191, 135, -195, - -101, -161, 199, -101, 31, 82, -97, -99, -98, -100, - 63, 67, 69, 64, 65, 66, 70, -200, 23, -87, - -3, -278, -101, -94, -280, 82, 12, 74, -280, 82, - 150, -169, -171, 82, 316, 318, 319, 73, 101, -85, - -217, 143, -242, -241, -240, -224, -226, -227, -228, 83, - -144, -220, 284, -215, -215, -215, -215, -215, -216, -166, - -216, -216, -216, 81, 81, -215, -215, -215, -215, -218, - 81, -218, -218, -219, 81, -219, -253, -85, -250, -249, - -247, -248, 175, 95, 347, -245, -141, 89, -82, -101, - 110, 73, -189, -251, -251, -251, -194, -260, 88, -260, - 88, 82, 17, -225, -224, -130, 224, -255, 199, -252, - -246, 81, 29, -232, -233, -233, 150, -260, 82, 27, - 106, 106, 106, 106, 347, 155, 31, -224, -130, -205, - 167, -205, -205, 88, 88, -178, 471, -94, 166, 223, - -84, 330, 88, 84, -101, -101, -101, -101, -101, 158, - 155, 207, -101, -101, -94, -101, 82, -60, 184, 179, - -194, -101, -179, -179, -101, -179, -179, 88, -101, -189, - -66, 317, 347, 20, -67, 20, 98, 99, 100, -120, - -112, -112, -112, -73, 189, 109, -279, -279, -74, -74, - -278, 150, -5, -142, -279, -279, 82, 74, 23, 12, - 12, -279, 12, 12, -279, -279, -74, -135, -133, 116, - -85, -279, -279, 82, 82, -279, -279, -279, -279, -279, - -273, 438, 318, -105, 71, 168, 72, -278, -196, -279, - -157, 39, 47, 58, -85, -85, -140, -157, -173, 20, - 12, 54, 54, -106, 13, -76, -87, -79, 150, -106, - -110, 31, 54, -3, -278, -278, -164, -168, -129, -88, - -89, -89, -88, -89, 63, 63, 63, 68, 63, 68, - 63, -98, -194, -279, -279, -3, -161, 74, -87, -101, - -87, -103, -194, 135, -170, -172, 320, 317, 323, -260, - 88, 82, -240, -228, 98, 110, 30, 73, 281, 95, - 171, 29, 170, -221, 285, -216, -216, -217, -260, 88, - 144, -217, -217, -217, -223, 88, -223, 89, 89, 83, - -32, -27, -28, 32, 77, -247, -235, 88, 38, 83, - 166, 24, -101, 73, 73, 73, 16, -159, -189, 82, - 83, -131, 225, -129, 83, -189, 83, -159, -233, -190, - -189, -278, 164, 30, 30, -130, -131, -217, -260, 473, - 472, 83, -101, -81, 214, 222, 81, 85, -262, 74, - 205, 281, 205, 208, 167, -60, -32, -101, -199, -199, - 32, 317, 450, 448, -73, 109, -112, -112, -279, -279, - -75, -190, -138, -157, -207, 144, 256, 188, 254, 250, - 270, 261, 283, 252, 284, -205, -207, -112, -112, -112, - -112, 344, -138, 117, -85, 115, -112, -112, 165, 165, - 165, -162, 40, 88, 88, 59, -101, -136, 14, -85, - 135, -142, -163, 73, -164, -123, -125, -124, -278, -158, - -279, -189, -162, -106, 82, 118, -92, -91, 73, 74, - -93, 73, -91, 63, 63, -279, -106, -87, -106, -106, - 150, 317, 321, 322, -240, 98, -112, 10, 88, 29, - 29, -217, -217, 83, 82, 83, 82, 83, 82, -183, - 384, 110, -28, -27, -235, -235, 89, -260, -101, -101, - -101, -101, 17, 82, -224, -129, 54, -250, 83, -254, - -255, -101, -111, -131, -160, 81, 83, -259, 347, -261, - -260, -189, -189, -189, -101, -179, -179, 32, -260, -112, - -279, -142, -279, -215, -215, -215, -219, -215, 244, -215, - 244, -279, -279, 20, 20, 20, 20, -278, -65, 340, - -85, 82, 82, -278, -278, -278, -279, 88, -216, -137, - 15, 17, 28, -163, 82, -279, -279, 82, 54, 150, - -279, -138, -168, -85, -85, 81, -85, -138, -106, -115, - -216, 88, -216, 89, 89, 384, 30, 78, 79, 80, - 30, 75, 76, -160, -159, -189, 201, 183, -279, 82, - -222, 347, 350, 23, -159, -258, -257, -190, 81, 74, - -157, -216, -260, -112, -112, -112, -112, -112, -142, 88, - -112, -112, -159, -279, -159, -159, -197, -216, -146, -151, - -176, -85, -121, 29, -125, 54, -3, -189, -123, -189, - -142, -159, -142, -217, -217, 83, 83, 23, 202, -101, - -255, 351, 351, -3, 83, 82, 118, -159, -101, -279, - -279, -279, -279, -68, 128, 347, -279, -279, -279, -279, - -279, -279, -105, -149, 434, -154, 43, -152, -153, 44, - -150, 45, 53, 10, -123, 150, 83, -3, -278, 81, - -58, 347, -257, -239, -190, 88, 89, 83, -279, 345, - 70, 348, -146, 48, 262, -156, -155, 52, 44, -153, - 17, 46, 17, -164, -189, -58, -112, 198, -159, -59, - 213, 438, -262, 59, 346, 349, -147, 50, -145, 49, - -145, -155, 17, 17, 88, 17, 88, -279, -279, 83, - 176, -259, 59, -148, 51, 73, 101, 88, 88, 88, - -269, -270, 73, 215, 347, 73, 101, -270, 73, 11, - 10, 348, -268, 184, 179, 182, 31, -268, 349, 178, - 30, 98, + 89, 30, 89, -189, 81, -101, -82, 216, 118, 205, + 205, 164, 164, 218, -101, 229, 230, 228, 21, 217, + 219, 221, 41, 82, 167, -55, 73, -96, -101, 24, + -181, -195, -194, -187, 88, -85, -231, 12, 128, -199, + -199, -179, -101, -231, -199, -179, -101, -179, -179, -179, + -179, -199, -179, -194, -194, -101, -101, -101, -101, -101, + -101, -101, -204, -204, -204, -180, 126, -179, 73, -202, + 236, 270, 435, 436, 437, 82, 347, -94, 441, 441, + 441, 441, 441, 441, -85, -85, -85, -85, -119, 98, + 110, 99, 100, -112, -120, -124, -127, 93, 128, 126, + 127, 112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -205, -260, 88, + 144, -260, -111, -111, -189, -75, 22, 37, -74, -190, + -195, -187, -70, -279, -279, -138, -74, -74, -85, -85, + -129, 88, -74, -129, 88, -74, -74, -69, 22, 37, + -132, -133, 114, -129, -279, -112, -189, -189, -74, -75, + -75, -74, -74, 82, -274, 317, 318, 439, -197, 199, + -196, 23, -194, 88, -122, -121, -142, -279, -143, 27, + 10, 128, 82, 19, 82, -141, 25, 26, -142, -113, + -189, 89, 92, -86, 82, 12, -79, -101, -191, 135, + -195, -101, -161, 199, -101, 31, 82, -97, -99, -98, + -100, 63, 67, 69, 64, 65, 66, 70, -200, 23, + -87, -3, -278, -101, -94, -280, 82, 12, 74, -280, + 82, 150, -169, -171, 82, 316, 318, 319, 73, 101, + -85, -217, 143, -242, -241, -240, -224, -226, -227, -228, + 83, -144, -220, 284, -215, -215, -215, -215, -215, -216, + -166, -216, -216, -216, 81, 81, -215, -215, -215, -215, + -218, 81, -218, -218, -219, 81, -219, -253, -85, -250, + -249, -247, -248, 175, 95, 347, -245, -141, 89, -82, + -182, 73, -189, -251, -251, -251, -194, 110, -260, 88, + -260, 88, 82, 17, -225, -224, -130, 224, -255, 199, + -252, -246, 81, 29, -232, -233, -233, 150, -260, 82, + 27, 106, 106, 106, 106, 347, 155, 31, -224, -130, + -205, 167, -205, -205, 88, 88, -178, 471, -94, 166, + 223, -84, 330, 88, 84, -101, -101, -101, -101, -101, + 158, 155, 207, -101, -101, -181, -101, 82, -60, 184, + 179, -194, -101, -179, -179, -101, -179, -179, 88, -101, + -189, -66, 317, 347, 20, -67, 20, 98, 99, 100, + -120, -112, -112, -112, -73, 189, 109, -279, -279, -74, + -74, -278, 150, -5, -142, -279, -279, 82, 74, 23, + 12, 12, -279, 12, 12, -279, -279, -74, -135, -133, + 116, -85, -279, -279, 82, 82, -279, -279, -279, -279, + -279, -273, 438, 318, -105, 71, 168, 72, -278, -196, + -279, -157, 39, 47, 58, -85, -85, -140, -157, -173, + 20, 12, 54, 54, -106, 13, -76, -87, -79, 150, + -106, -110, 31, 54, -3, -278, -278, -164, -168, -129, + -88, -89, -89, -88, -89, 63, 63, 63, 68, 63, + 68, 63, -98, -194, -279, -279, -3, -161, 74, -87, + -101, -87, -103, -194, 135, -170, -172, 320, 317, 323, + -260, 88, 82, -240, -228, 98, 110, 30, 73, 281, + 95, 171, 29, 170, -221, 285, -216, -216, -217, -260, + 88, 144, -217, -217, -217, -223, 88, -223, 89, 89, + 83, -32, -27, -28, 32, 77, -247, -235, 88, 38, + 83, 166, -101, -101, 73, 73, 73, 24, 16, -159, + -189, 82, 83, -131, 225, -129, 83, -189, 83, -159, + -233, -190, -189, -278, 164, 30, 30, -130, -131, -217, + -260, 473, 472, 83, -101, -81, 214, 222, 81, 85, + -262, 74, 205, 281, 205, 208, 167, -94, -32, -101, + -199, -199, 32, 317, 450, 448, -73, 109, -112, -112, + -279, -279, -75, -190, -138, -157, -207, 144, 256, 188, + 254, 250, 270, 261, 283, 252, 284, -205, -207, -112, + -112, -112, -112, 344, -138, 117, -85, 115, -112, -112, + 165, 165, 165, -162, 40, 88, 88, 59, -101, -136, + 14, -85, 135, -142, -163, 73, -164, -123, -125, -124, + -278, -158, -279, -189, -162, -106, 82, 118, -92, -91, + 73, 74, -93, 73, -91, 63, 63, -279, -106, -87, + -106, -106, 150, 317, 321, 322, -240, 98, -112, 10, + 88, 29, 29, -217, -217, 83, 82, 83, 82, 83, + 82, -183, 384, 110, -28, -27, -235, -235, 89, -260, + -101, -101, -101, -101, 17, 82, -224, -129, 54, -250, + 83, -254, -255, -101, -111, -131, -160, 81, 83, -259, + 347, -261, -260, -189, -189, -189, -101, -60, -179, -179, + 32, -260, -112, -279, -142, -279, -215, -215, -215, -219, + -215, 244, -215, 244, -279, -279, 20, 20, 20, 20, + -278, -65, 340, -85, 82, 82, -278, -278, -278, -279, + 88, -216, -137, 15, 17, 28, -163, 82, -279, -279, + 82, 54, 150, -279, -138, -168, -85, -85, 81, -85, + -138, -106, -115, -216, 88, -216, 89, 89, 384, 30, + 78, 79, 80, 30, 75, 76, -160, -159, -189, 201, + 183, -279, 82, -222, 347, 350, 23, -159, -258, -257, + -190, 81, 74, -157, -216, -260, -112, -112, -112, -112, + -112, -142, 88, -112, -112, -159, -279, -159, -159, -197, + -216, -146, -151, -176, -85, -121, 29, -125, 54, -3, + -189, -123, -189, -142, -159, -142, -217, -217, 83, 83, + 23, 202, -101, -255, 351, 351, -3, 83, 82, 118, + -159, -101, -279, -279, -279, -279, -68, 128, 347, -279, + -279, -279, -279, -279, -279, -105, -149, 434, -154, 43, + -152, -153, 44, -150, 45, 53, 10, -123, 150, 83, + -3, -278, 81, -58, 347, -257, -239, -190, 88, 89, + 83, -279, 345, 70, 348, -146, 48, 262, -156, -155, + 52, 44, -153, 17, 46, 17, -164, -189, -58, -112, + 198, -159, -59, 213, 438, -262, 59, 346, 349, -147, + 50, -145, 49, -145, -155, 17, 17, 88, 17, 88, + -279, -279, 83, 176, -259, 59, -148, 51, 73, 101, + 88, 88, 88, -269, -270, 73, 215, 347, 73, 101, + -270, 73, 11, 10, 348, -268, 184, 179, 182, 31, + -268, 349, 178, 30, 98, } var yyDef = [...]int{ @@ -5154,7 +5102,7 @@ var yyDef = [...]int{ 320, 320, 0, 0, 0, 354, 942, 274, 224, 224, 0, 224, 224, 224, 224, 0, 0, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 0, 108, 858, 0, 0, 0, 118, 958, + 224, 224, 557, 108, 858, 0, 0, 0, 118, 958, 955, 956, 35, 36, 37, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, @@ -5215,7 +5163,7 @@ var yyDef = [...]int{ 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, -2, 0, 0, 128, 129, 0, 38, 250, 0, 124, 0, 244, 197, 858, - 938, 948, 0, 0, 0, 938, 92, 116, 117, 224, + 557, 948, 0, 0, 0, 938, 92, 116, 117, 224, 224, 0, 118, 118, 336, 337, 338, 0, 0, -2, 248, 0, 321, 0, 0, 238, 238, 242, 240, 241, 0, 0, 0, 0, 0, 0, 348, 0, 349, 0, @@ -5224,8 +5172,8 @@ var yyDef = [...]int{ 347, 0, 0, 943, 944, 0, 0, 224, 224, 0, 0, 0, 0, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 102, 849, 0, 0, 0, 0, 0, 0, 0, 0, - -2, 0, 416, 0, 936, 0, 0, 0, 936, 423, + 0, 849, 0, 0, 0, 0, 0, 0, 0, 0, + -2, 0, 416, 0, 557, 0, 0, 0, 936, 423, 0, 425, 426, 0, 0, 427, 0, 478, 478, 476, 477, 429, 430, 431, 432, 481, 0, 0, 233, 234, 235, 478, 481, 0, 481, 481, 481, 481, 478, 481, @@ -5255,7 +5203,7 @@ var yyDef = [...]int{ 187, 188, 189, 190, 191, 192, 193, 194, 153, 154, 155, 156, 157, 158, 159, 160, 161, 199, 199, 199, 201, 201, 0, 39, 0, 216, 0, 826, 0, 849, - 0, 0, 0, 949, 0, 948, 948, 948, 0, 0, + 938, 0, 949, 0, 948, 948, 948, 0, 0, 0, 0, 369, 330, 358, 370, 0, 333, 334, -2, 0, 0, 320, 0, 322, 0, 232, 0, -2, 0, 0, 0, 238, 242, 239, 242, 230, 243, 350, 803, 0, @@ -5266,103 +5214,103 @@ var yyDef = [...]int{ 0, 280, 281, 282, 283, 0, 0, 286, 287, 288, 289, 290, 314, 315, 316, 291, 292, 293, 294, 295, 296, 297, 308, 309, 310, 311, 312, 313, 298, 299, - 300, 301, 302, 305, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 383, 384, 385, 386, 846, 847, - 848, 0, 0, 0, 0, 0, 263, 64, 937, 0, - 643, 959, 960, 482, 483, 0, 236, 237, 481, 481, - 433, 456, 0, 481, 437, 458, 438, 440, 439, 441, - 481, 444, 479, 480, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 460, 0, 461, 0, 0, 499, - 503, 504, 505, 506, 0, 0, 535, 540, 541, 542, - 543, 555, 548, 694, 653, 654, 655, 657, 674, 0, - 676, 678, 664, 665, 689, 690, 691, 0, 0, 0, - 0, 687, 669, 0, 700, 701, 702, 703, 704, 705, - 706, 707, 708, 709, 710, 711, 714, 778, 779, 780, - 0, 712, 713, 724, 0, 0, 0, 571, 804, 0, - -2, 0, 692, 913, 829, 0, 0, 0, 0, 697, - 806, 0, 697, 806, 0, 0, 0, 568, 569, 801, - 798, 0, 0, 764, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 525, 526, 528, 0, 645, 0, 626, - 0, 628, 629, 0, 947, 864, 52, 42, 0, 865, - 0, 0, 0, 0, 825, 827, 828, 864, 0, 814, - 0, 0, 650, 0, 0, 575, 48, 592, 588, 0, - 650, 0, 0, 640, 0, 0, 0, 0, 0, 0, - 630, 0, 0, 633, 0, 0, 0, 0, 624, 0, - 0, 0, -2, 0, 0, 0, 62, 63, 0, 0, - 0, 919, 73, 0, 0, 78, 79, 920, 921, 922, - 923, 0, 111, -2, 271, 130, 132, 133, 134, 125, - 135, 206, 205, 151, 208, 208, 174, 175, 212, 0, - 212, 212, 212, 0, 0, 168, 169, 170, 171, 162, - 0, 163, 164, 165, 0, 166, 249, 0, 833, 217, - 218, 220, 224, 0, 0, 245, 246, 0, 0, 101, - 0, 0, 950, 0, 0, 0, 107, 120, 121, 122, - 123, 118, 0, 0, 126, 324, 0, 0, 0, 247, - 0, 0, 226, 242, 227, 228, 0, 353, 0, 0, - 390, 391, 392, 393, 0, 0, 0, 322, 324, 212, - 0, 278, 279, 284, 285, 303, 0, 0, 0, 0, - 859, 860, 0, 863, 93, 376, 378, 377, 381, 0, - 0, 0, 0, 417, 263, 833, 0, 421, 264, 265, - 422, 478, 443, 459, 478, 435, 442, 485, 464, 495, - 539, 0, 0, 0, 547, 0, 675, 677, 679, 666, - 687, 670, 0, 667, 0, 0, 661, 729, 0, 0, - 570, 0, 821, 864, 733, 734, 0, 0, 0, 0, - 0, 771, 0, 0, 772, 0, 821, 0, 799, 0, - 0, 745, 765, 0, 0, 766, 767, 768, 769, 770, - 524, 527, 529, 605, 0, 0, 0, 0, 627, 945, - 44, 0, 0, 0, 831, 832, 824, 43, 0, 932, - 933, 815, 816, 817, 0, 585, 596, 576, 0, 829, - 907, 0, 0, 899, 0, 0, 650, 915, 0, 598, - 619, 621, 0, 616, 631, 632, 634, 0, 636, 0, - 638, 639, 602, 603, 604, 0, 650, 0, 650, 67, - 650, 69, 0, 644, 76, 77, 0, 0, 83, 213, - 214, 118, 273, 131, 137, 0, 0, 0, 141, 0, - 0, 144, 146, 147, 207, 212, 212, 176, 209, 210, - 211, 177, 178, 179, 0, 195, 0, 0, 0, 266, - 88, 837, 836, 224, 224, 219, 0, 222, 0, 198, - 0, 939, 103, 0, 0, 0, 0, 328, 609, 0, - 339, 340, 0, 323, 387, 0, 216, 0, 229, 804, - 612, 0, 0, 341, 0, 324, 344, 345, 356, 306, - 307, 304, 607, 850, 851, 852, 0, 862, 96, 0, - 0, 0, 0, 374, 0, 419, 420, 65, 481, 481, - 534, 0, 537, 0, 668, 0, 688, 671, 730, 731, - 0, 805, 829, 46, 0, 197, 197, 784, 197, 201, - 787, 197, 789, 197, 792, 0, 0, 0, 0, 0, - 0, 0, 796, 744, 802, 0, 0, 0, 0, 0, - 0, 0, 0, 208, 869, 866, 45, 819, 0, 651, - 589, 49, 53, 0, 907, 898, 909, 911, 0, 0, - 0, 903, 0, 821, 0, 0, 613, 620, 0, 0, - 614, 0, 615, 635, 637, -2, 821, 650, 60, 61, - 0, 80, 81, 82, 272, 138, 139, 0, 142, 143, - 145, 172, 173, 208, 0, 208, 0, 202, 0, 255, - 267, 0, 834, 835, 0, 0, 221, 223, 607, 104, - 105, 106, 0, 0, 127, 325, 0, 215, 0, 0, - 412, 409, 342, 343, 0, 0, 861, 375, 0, 94, - 95, 0, 0, 380, 418, 428, 434, 536, 556, 672, - 732, 864, 735, 781, 208, 785, 786, 788, 790, 791, - 793, 737, 736, 0, 0, 0, 0, 0, 829, 0, - 800, 0, 0, 0, 0, 0, 625, 208, 889, 50, - 0, 0, 0, 54, 0, 912, 0, 0, 0, 0, - 71, 829, 916, 917, 617, 0, 622, 829, 59, 140, - 212, 196, 212, 0, 0, 268, 838, 839, 840, 841, - 842, 843, 844, 0, 331, 610, 0, 0, 389, 0, - 397, 0, 0, 0, 0, 97, 98, 0, 0, 0, - 47, 782, 783, 0, 0, 0, 0, 773, 0, 797, - 0, 0, 0, 647, 0, 0, 645, 871, 870, 883, - 896, 820, 818, 0, 910, 0, 902, 905, 901, 904, - 57, 0, 58, 185, 186, 200, 203, 0, 0, 0, - 413, 410, 411, 853, 608, 0, 0, 0, 382, 738, - 740, 739, 741, 0, 0, 0, 743, 761, 762, 646, - 648, 649, 606, 889, 0, 882, 0, -2, 891, 0, - 0, 0, 897, 0, 900, 0, 618, 853, 0, 0, - 372, 855, 99, 100, 317, 318, 319, 93, 742, 0, - 0, 0, 876, 874, 874, 884, 885, 0, 0, 892, - 0, 0, 0, 908, 906, 89, 0, 0, 0, 0, - 856, 857, 96, 774, 0, 777, 879, 0, 872, 875, - 873, 886, 0, 0, 893, 0, 895, 414, 415, 251, - 0, 379, 775, 868, 0, 877, 878, 887, 888, 894, - 252, 253, 0, 854, 0, 880, 881, 254, 0, 0, - 0, 0, 256, 258, 259, 0, 0, 257, 776, 260, - 261, 262, + 300, 301, 302, 305, 0, 102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 383, 384, 385, 386, 846, + 847, 848, 0, 0, 0, 936, 0, 263, 64, 937, + 0, 643, 959, 960, 482, 483, 0, 236, 237, 481, + 481, 433, 456, 0, 481, 437, 458, 438, 440, 439, + 441, 481, 444, 479, 480, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 460, 0, 461, 0, 0, + 499, 503, 504, 505, 506, 0, 0, 535, 540, 541, + 542, 543, 555, 548, 694, 653, 654, 655, 657, 674, + 0, 676, 678, 664, 665, 689, 690, 691, 0, 0, + 0, 0, 687, 669, 0, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 714, 778, 779, + 780, 0, 712, 713, 724, 0, 0, 0, 571, 804, + 0, -2, 0, 692, 913, 829, 0, 0, 0, 0, + 697, 806, 0, 697, 806, 0, 0, 0, 568, 569, + 801, 798, 0, 0, 764, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 525, 526, 528, 0, 645, 0, + 626, 0, 628, 629, 0, 947, 864, 52, 42, 0, + 865, 0, 0, 0, 0, 825, 827, 828, 864, 0, + 814, 0, 0, 650, 0, 0, 575, 48, 592, 588, + 0, 650, 0, 0, 640, 0, 0, 0, 0, 0, + 0, 630, 0, 0, 633, 0, 0, 0, 0, 624, + 0, 0, 0, -2, 0, 0, 0, 62, 63, 0, + 0, 0, 919, 73, 0, 0, 78, 79, 920, 921, + 922, 923, 0, 111, -2, 271, 130, 132, 133, 134, + 125, 135, 206, 205, 151, 208, 208, 174, 175, 212, + 0, 212, 212, 212, 0, 0, 168, 169, 170, 171, + 162, 0, 163, 164, 165, 0, 166, 249, 0, 833, + 217, 218, 220, 224, 0, 0, 245, 246, 0, 0, + 0, 0, 950, 0, 0, 0, 107, 0, 120, 121, + 122, 123, 118, 0, 0, 126, 324, 0, 0, 0, + 247, 0, 0, 226, 242, 227, 228, 0, 353, 0, + 0, 390, 391, 392, 393, 0, 0, 0, 322, 324, + 212, 0, 278, 279, 284, 285, 303, 0, 0, 0, + 0, 859, 860, 0, 863, 93, 376, 378, 377, 381, + 0, 0, 0, 0, 417, 0, 833, 0, 421, 264, + 265, 422, 478, 443, 459, 478, 435, 442, 485, 464, + 495, 539, 0, 0, 0, 547, 0, 675, 677, 679, + 666, 687, 670, 0, 667, 0, 0, 661, 729, 0, + 0, 570, 0, 821, 864, 733, 734, 0, 0, 0, + 0, 0, 771, 0, 0, 772, 0, 821, 0, 799, + 0, 0, 745, 765, 0, 0, 766, 767, 768, 769, + 770, 524, 527, 529, 605, 0, 0, 0, 0, 627, + 945, 44, 0, 0, 0, 831, 832, 824, 43, 0, + 932, 933, 815, 816, 817, 0, 585, 596, 576, 0, + 829, 907, 0, 0, 899, 0, 0, 650, 915, 0, + 598, 619, 621, 0, 616, 631, 632, 634, 0, 636, + 0, 638, 639, 602, 603, 604, 0, 650, 0, 650, + 67, 650, 69, 0, 644, 76, 77, 0, 0, 83, + 213, 214, 118, 273, 131, 137, 0, 0, 0, 141, + 0, 0, 144, 146, 147, 207, 212, 212, 176, 209, + 210, 211, 177, 178, 179, 0, 195, 0, 0, 0, + 266, 88, 837, 836, 224, 224, 219, 0, 222, 0, + 198, 0, 101, 103, 0, 0, 0, 939, 0, 328, + 609, 0, 339, 340, 0, 323, 387, 0, 216, 0, + 229, 804, 612, 0, 0, 341, 0, 324, 344, 345, + 356, 306, 307, 304, 607, 850, 851, 852, 0, 862, + 96, 0, 0, 0, 0, 374, 0, 263, 420, 65, + 481, 481, 534, 0, 537, 0, 668, 0, 688, 671, + 730, 731, 0, 805, 829, 46, 0, 197, 197, 784, + 197, 201, 787, 197, 789, 197, 792, 0, 0, 0, + 0, 0, 0, 0, 796, 744, 802, 0, 0, 0, + 0, 0, 0, 0, 0, 208, 869, 866, 45, 819, + 0, 651, 589, 49, 53, 0, 907, 898, 909, 911, + 0, 0, 0, 903, 0, 821, 0, 0, 613, 620, + 0, 0, 614, 0, 615, 635, 637, -2, 821, 650, + 60, 61, 0, 80, 81, 82, 272, 138, 139, 0, + 142, 143, 145, 172, 173, 208, 0, 208, 0, 202, + 0, 255, 267, 0, 834, 835, 0, 0, 221, 223, + 607, 104, 105, 106, 0, 0, 127, 325, 0, 215, + 0, 0, 412, 409, 342, 343, 0, 0, 861, 375, + 0, 94, 95, 0, 0, 380, 418, 419, 428, 434, + 536, 556, 672, 732, 864, 735, 781, 208, 785, 786, + 788, 790, 791, 793, 737, 736, 0, 0, 0, 0, + 0, 829, 0, 800, 0, 0, 0, 0, 0, 625, + 208, 889, 50, 0, 0, 0, 54, 0, 912, 0, + 0, 0, 0, 71, 829, 916, 917, 617, 0, 622, + 829, 59, 140, 212, 196, 212, 0, 0, 268, 838, + 839, 840, 841, 842, 843, 844, 0, 331, 610, 0, + 0, 389, 0, 397, 0, 0, 0, 0, 97, 98, + 0, 0, 0, 47, 782, 783, 0, 0, 0, 0, + 773, 0, 797, 0, 0, 0, 647, 0, 0, 645, + 871, 870, 883, 896, 820, 818, 0, 910, 0, 902, + 905, 901, 904, 57, 0, 58, 185, 186, 200, 203, + 0, 0, 0, 413, 410, 411, 853, 608, 0, 0, + 0, 382, 738, 740, 739, 741, 0, 0, 0, 743, + 761, 762, 646, 648, 649, 606, 889, 0, 882, 0, + -2, 891, 0, 0, 0, 897, 0, 900, 0, 618, + 853, 0, 0, 372, 855, 99, 100, 317, 318, 319, + 93, 742, 0, 0, 0, 876, 874, 874, 884, 885, + 0, 0, 892, 0, 0, 0, 908, 906, 89, 0, + 0, 0, 0, 856, 857, 96, 774, 0, 777, 879, + 0, 872, 875, 873, 886, 0, 0, 893, 0, 895, + 414, 415, 251, 0, 379, 775, 868, 0, 877, 878, + 887, 888, 894, 252, 253, 0, 854, 0, 880, 881, + 254, 0, 0, 0, 0, 256, 258, 259, 0, 0, + 257, 776, 260, 261, 262, } var yyTok1 = [...]int{ @@ -6365,20 +6313,20 @@ yydefault: yyVAL.vindexParam = VindexParam{Key: yyDollar[1].colIdent, Val: yyDollar[3].str} } case 101: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *CreateTable //line sql.y:847 { - yyLOCAL = &CreateTable{Table: yyDollar[5].tableName, IfNotExists: yyDollar[4].booleanUnion(), Temp: yyDollar[2].booleanUnion()} + yyLOCAL = &CreateTable{Comments: Comments(yyDollar[4].strs), Table: yyDollar[6].tableName, IfNotExists: yyDollar[5].booleanUnion(), Temp: yyDollar[2].booleanUnion()} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL case 102: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *AlterTable //line sql.y:854 { - yyLOCAL = &AlterTable{Table: yyDollar[3].tableName} + yyLOCAL = &AlterTable{Comments: Comments(yyDollar[3].strs), Table: yyDollar[4].tableName} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL @@ -8699,11 +8647,11 @@ yydefault: *yySLICE = append(*yySLICE, &RenameTablePair{FromTable: yyDollar[3].tableName, ToTable: yyDollar[5].tableName}) } case 419: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement //line sql.y:2327 { - yyLOCAL = &DropTable{FromTables: yyDollar[5].tableNamesUnion(), IfExists: yyDollar[4].booleanUnion(), Temp: yyDollar[2].booleanUnion()} + yyLOCAL = &DropTable{Comments: Comments(yyDollar[4].strs), FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Temp: yyDollar[2].booleanUnion()} } yyVAL.union = yyLOCAL case 420: diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 329204898d1..67d7359fdd3 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -843,16 +843,16 @@ vindex_param: } create_table_prefix: - CREATE temp_opt TABLE not_exists_opt table_name + CREATE temp_opt TABLE comment_opt not_exists_opt table_name { - $$ = &CreateTable{Table: $5, IfNotExists: $4, Temp: $2} + $$ = &CreateTable{Comments: Comments($4), Table: $6, IfNotExists: $5, Temp: $2} setDDL(yylex, $$) } alter_table_prefix: - ALTER TABLE table_name + ALTER TABLE comment_opt table_name { - $$ = &AlterTable{Table: $3} + $$ = &AlterTable{Comments: Comments($3), Table: $4} setDDL(yylex, $$) } @@ -2323,9 +2323,9 @@ rename_list: } drop_statement: - DROP temp_opt TABLE exists_opt table_name_list restrict_or_cascade_opt + DROP temp_opt TABLE comment_opt exists_opt table_name_list restrict_or_cascade_opt { - $$ = &DropTable{FromTables: $5, IfExists: $4, Temp: $2} + $$ = &DropTable{Comments: Comments($4), FromTables: $6, IfExists: $5, Temp: $2} } | DROP INDEX id_or_var ON table_name algorithm_lock_opt { From a5b39a2d9cc8b67ea0ec3e4cb003fbebd2603096 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 1 Apr 2021 19:33:49 +0300 Subject: [PATCH 02/64] improved upon comment_opt in CREATE, ALTER and DROP statements Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/sqlparser/ast_format.go | 8 +- go/vt/sqlparser/ast_format_fast.go | 12 +- go/vt/sqlparser/comments_test.go | 6 +- go/vt/sqlparser/parse_test.go | 11 +- go/vt/sqlparser/sql.go | 6805 ++++++++++++++-------------- go/vt/sqlparser/sql.y | 126 +- 6 files changed, 3500 insertions(+), 3468 deletions(-) diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go index 6cfda1e4d06..ba82151b3eb 100644 --- a/go/vt/sqlparser/ast_format.go +++ b/go/vt/sqlparser/ast_format.go @@ -1374,7 +1374,7 @@ func (node *AlterDatabase) Format(buf *TrackedBuffer) { // Format formats the node. func (node *CreateTable) Format(buf *TrackedBuffer) { - buf.WriteString("create ") + buf.astPrintf(node, "create %v", node.Comments) if node.Temp { buf.WriteString("temporary ") } @@ -1451,13 +1451,13 @@ func (node *AlterView) Format(buf *TrackedBuffer) { func (node *DropTable) Format(buf *TrackedBuffer) { temp := "" if node.Temp { - temp = " temporary" + temp = "temporary " } exists := "" if node.IfExists { exists = " if exists" } - buf.astPrintf(node, "drop%s table%s %v", temp, exists, node.FromTables) + buf.astPrintf(node, "drop %v%stable%s %v", node.Comments, temp, exists, node.FromTables) } // Format formats the node. @@ -1471,7 +1471,7 @@ func (node *DropView) Format(buf *TrackedBuffer) { // Format formats the AlterTable node. func (node *AlterTable) Format(buf *TrackedBuffer) { - buf.astPrintf(node, "alter table %v", node.Table) + buf.astPrintf(node, "alter %vtable %v", node.Comments, node.Table) prefix := "" for i, option := range node.AlterOptions { if i != 0 { diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go index 5746f5106c8..65f2b3632af 100644 --- a/go/vt/sqlparser/ast_format_fast.go +++ b/go/vt/sqlparser/ast_format_fast.go @@ -1815,6 +1815,7 @@ func (node *AlterDatabase) formatFast(buf *TrackedBuffer) { // formatFast formats the node. func (node *CreateTable) formatFast(buf *TrackedBuffer) { buf.WriteString("create ") + node.Comments.formatFast(buf) if node.Temp { buf.WriteString("temporary ") } @@ -1915,15 +1916,16 @@ func (node *AlterView) formatFast(buf *TrackedBuffer) { func (node *DropTable) formatFast(buf *TrackedBuffer) { temp := "" if node.Temp { - temp = " temporary" + temp = "temporary " } exists := "" if node.IfExists { exists = " if exists" } - buf.WriteString("drop") + buf.WriteString("drop ") + node.Comments.formatFast(buf) buf.WriteString(temp) - buf.WriteString(" table") + buf.WriteString("table") buf.WriteString(exists) buf.WriteByte(' ') node.FromTables.formatFast(buf) @@ -1943,7 +1945,9 @@ func (node *DropView) formatFast(buf *TrackedBuffer) { // formatFast formats the AlterTable node. func (node *AlterTable) formatFast(buf *TrackedBuffer) { - buf.WriteString("alter table ") + buf.WriteString("alter ") + node.Comments.formatFast(buf) + buf.WriteString("table ") node.Table.formatFast(buf) prefix := "" for i, option := range node.AlterOptions { diff --git a/go/vt/sqlparser/comments_test.go b/go/vt/sqlparser/comments_test.go index 2e062b98dc9..bd3d0ff9346 100644 --- a/go/vt/sqlparser/comments_test.go +++ b/go/vt/sqlparser/comments_test.go @@ -323,9 +323,9 @@ func TestExtractCommentDirectives(t *testing.T) { "select " + testCase.input + " 1 from dual", "update " + testCase.input + " t set i=i+1", "delete " + testCase.input + " from t where id>1", - "drop table " + testCase.input + " t", - "create table " + testCase.input + " if not exists t (id int primary key)", - "alter table " + testCase.input + " t add column c int not null", + "drop " + testCase.input + " table t", + "create " + testCase.input + " table if not exists t (id int primary key)", + "alter " + testCase.input + " table t add column c int not null", } for _, sql := range sqls { t.Run(sql, func(t *testing.T) { diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index a7adc76887b..0bdde9c8673 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -938,6 +938,8 @@ var ( input: "alter table a add fulltext key foo (column1), order by a, b, c", }, { input: "alter table a add unique key foo (column1)", + }, { + input: "alter /*vt+ strategy=online */ table a add unique key foo (column1)", }, { input: "alter table a change column s foo int default 1 after x", }, { @@ -1123,6 +1125,8 @@ var ( input: "create table test (\n\t__year year(4)\n)", }, { input: "create table a (\n\ta int not null\n)", + }, { + input: "create /*vt+ strategy=online */ table a (\n\ta int not null\n)", }, { input: "create table a (\n\ta int not null default 0\n)", }, { @@ -1287,8 +1291,11 @@ var ( input: "drop view a,B,c", output: "drop view a, b, c", }, { - input: "drop table a", - output: "drop table a", + input: "drop table a", + }, { + input: "drop /*vt+ strategy=online */ table if exists a", + }, { + input: "drop /*vt+ strategy=online */ table a", }, { input: "drop table a, b", output: "drop table a, b", diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index d2e14cbeb7d..7b146eeb228 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -987,9 +987,6 @@ var yyExca = [...]int{ -1, 1, 1, -1, -2, 0, - -1, 44, - 164, 934, - -2, 91, -1, 45, 1, 112, 474, 112, @@ -1012,2890 +1009,2913 @@ var yyExca = [...]int{ -1, 84, 56, 564, -2, 572, - -1, 109, + -1, 97, + 164, 934, + -2, 91, + -1, 99, 1, 113, 474, 113, -2, 118, - -1, 119, + -1, 109, 170, 231, 171, 231, -2, 320, - -1, 138, + -1, 128, 143, 118, 259, 118, 312, 118, -2, 335, - -1, 579, + -1, 561, 150, 955, -2, 951, - -1, 580, + -1, 562, 150, 956, -2, 952, - -1, 599, + -1, 581, 56, 565, -2, 577, - -1, 600, + -1, 582, 56, 566, -2, 578, - -1, 621, + -1, 603, 118, 1299, -2, 84, - -1, 622, + -1, 604, 118, 1181, -2, 85, - -1, 628, + -1, 610, 118, 1231, -2, 928, - -1, 766, + -1, 748, 118, 1118, -2, 925, - -1, 799, + -1, 784, 176, 38, 181, 38, -2, 242, - -1, 880, + -1, 861, 1, 373, 474, 373, -2, 118, - -1, 1120, + -1, 1100, 1, 269, 474, 269, -2, 118, - -1, 1198, + -1, 1176, 170, 231, 171, 231, -2, 320, - -1, 1207, + -1, 1185, 176, 39, 181, 39, -2, 243, - -1, 1421, + -1, 1391, 150, 960, -2, 954, - -1, 1513, + -1, 1483, 74, 66, 82, 66, -2, 70, - -1, 1534, + -1, 1504, 1, 270, 474, 270, -2, 118, - -1, 1947, + -1, 1928, 5, 821, 18, 821, 20, 821, 32, 821, 83, 821, -2, 604, - -1, 2160, + -1, 2153, 46, 896, -2, 890, } const yyPrivate = 57344 -const yyLast = 27775 +const yyLast = 27990 var yyAct = [...]int{ - 579, 2245, 2234, 1999, 2189, 1860, 2173, 2211, 2089, 1747, - 2161, 83, 3, 2111, 1714, 1927, 1598, 1928, 1829, 939, - 1531, 1021, 551, 1996, 1458, 1075, 1068, 537, 1748, 1924, - 592, 1648, 1564, 1734, 1833, 1812, 520, 769, 1813, 1569, - 1510, 147, 1886, 1939, 522, 1674, 1182, 1177, 1811, 180, - 1102, 1596, 180, 1205, 485, 180, 626, 919, 133, 81, - 501, 1571, 180, 1415, 1805, 794, 1321, 1112, 892, 1105, - 180, 1492, 1223, 1073, 1078, 1407, 1499, 1460, 1098, 586, - 1095, 1384, 1060, 957, 33, 776, 1441, 513, 1096, 524, - 886, 773, 501, 1181, 1212, 501, 180, 501, 1475, 1550, - 781, 800, 1187, 1560, 829, 797, 601, 1296, 777, 795, - 796, 623, 1085, 1515, 79, 552, 34, 1111, 1326, 1109, - 110, 508, 111, 116, 117, 1197, 871, 150, 78, 84, - 8, 1852, 1851, 1172, 7, 6, 1627, 1282, 958, 937, - 1037, 2113, 1874, 1875, 182, 183, 184, 1373, 1372, 1371, - 34, 1370, 1369, 460, 1368, 1034, 1455, 1456, 1361, 2203, - 770, 608, 612, 1712, 587, 958, 86, 87, 88, 89, - 90, 91, 118, 112, 2157, 182, 183, 184, 2068, 511, - 834, 512, 1973, 2135, 2134, 509, 833, 2084, 1549, 832, - 2085, 627, 807, 2251, 610, 588, 2208, 2244, 80, 1664, - 2184, 2237, 2000, 1615, 968, 2207, 1183, 2183, 1903, 2032, - 786, 620, 789, 2147, 983, 982, 992, 993, 985, 986, - 987, 988, 989, 990, 991, 984, 810, 1574, 994, 104, - 788, 968, 787, 785, 1634, 477, 1778, 112, 1633, 1777, - 831, 1113, 1779, 1114, 476, 835, 836, 837, 1954, 1955, - 847, 1526, 1527, 845, 846, 474, 849, 850, 851, 852, - 514, 1516, 855, 856, 857, 858, 859, 860, 861, 862, - 863, 864, 865, 866, 867, 868, 869, 35, 1457, 177, - 72, 39, 40, 956, 1713, 107, 1953, 99, 926, 1873, - 928, 1662, 102, 1525, 471, 101, 100, 911, 489, 964, - 848, 583, 870, 483, 790, 582, 112, 1573, 182, 183, - 184, 1795, 564, 811, 570, 571, 568, 569, 912, 567, - 566, 565, 2023, 1362, 1363, 1364, 964, 925, 927, 572, - 573, 905, 899, 900, 935, 1543, 2186, 2021, 1418, 842, - 499, 1360, 105, 1862, 107, 503, 453, 454, 497, 877, - 489, 488, 71, 897, 1307, 1305, 1306, 898, 899, 900, - 585, 1834, 1856, 1597, 1272, 107, 172, 1630, 1302, 1309, - 1857, 1310, 1297, 1311, 2236, 932, 872, 461, 463, 464, - 918, 480, 482, 490, 2204, 916, 917, 478, 479, 491, - 465, 466, 495, 494, 481, 881, 470, 467, 469, 475, - 1865, 105, 1887, 488, 473, 492, 1273, 1642, 1274, 914, - 915, 2131, 913, 854, 853, 1864, 489, 934, 1301, 1863, - 489, 1299, 1303, 809, 2079, 906, 1599, 818, 816, 176, - 924, 1493, 2148, 923, 929, 963, 960, 961, 962, 967, - 969, 966, 827, 965, 826, 809, 1889, 106, 825, 922, - 959, 824, 180, 1191, 885, 823, 1972, 180, 822, 1300, - 180, 821, 963, 960, 961, 962, 967, 969, 966, 488, - 965, 820, 815, 488, 791, 828, 2080, 959, 930, 1575, - 1632, 2252, 2182, 489, 109, 1516, 501, 501, 501, 878, - 774, 2223, 774, 175, 774, 803, 772, 1647, 802, 909, - 887, 931, 1188, 809, 501, 501, 106, 844, 1891, 2249, - 1895, 614, 1890, 809, 1888, 1866, 809, 950, 1621, 1893, - 819, 817, 1211, 1210, 1314, 944, 1663, 106, 1892, 493, - 895, 838, 901, 902, 903, 904, 488, 1821, 1629, 933, - 2174, 1894, 1896, 1912, 1911, 1910, 784, 486, 1715, 1717, - 2187, 783, 782, 936, 1844, 884, 780, 459, 2168, 808, - 809, 451, 487, 2052, 1641, 812, 802, 1640, 1952, 1284, - 1283, 1285, 1286, 1287, 1693, 813, 1690, 1617, 1006, 1007, - 1739, 808, 1650, 180, 1682, 888, 1607, 1649, 802, 805, - 806, 1521, 774, 814, 1650, 1089, 799, 803, 1019, 1649, - 1066, 938, 938, 938, 896, 73, 890, 984, 1774, 1004, - 994, 501, 1065, 1532, 180, 798, 180, 180, 994, 501, - 920, 34, 1471, 1327, 1356, 501, 941, 942, 971, 974, - 908, 2139, 94, 894, 1003, 1005, 953, 1022, 623, 808, - 951, 952, 910, 830, 974, 1716, 802, 805, 806, 808, - 774, 843, 808, 876, 799, 803, 1094, 2247, 812, 802, - 2248, 1061, 2246, 880, 1905, 1018, 1937, 1298, 813, 1023, - 1024, 1025, 1026, 1027, 1028, 1029, 1030, 95, 1033, 1035, - 1038, 1038, 1038, 1035, 1038, 1038, 1035, 1038, 1051, 1052, - 1053, 1054, 1055, 1056, 1057, 1115, 808, 954, 1792, 1787, - 1063, 1616, 879, 1058, 34, 1442, 1040, 1042, 1079, 1045, - 1047, 975, 1050, 1006, 1007, 1006, 1007, 1587, 627, 1067, - 1036, 1039, 1041, 1043, 1044, 1046, 1048, 1049, 1442, 1391, - 1700, 1100, 1614, 873, 1612, 874, 921, 818, 875, 1328, - 973, 971, 1788, 1389, 1390, 1388, 893, 514, 985, 986, - 987, 988, 989, 990, 991, 984, 1032, 974, 994, 182, - 183, 184, 1609, 1409, 1790, 816, 1609, 1785, 2253, 180, - 182, 183, 184, 1173, 1800, 1379, 1381, 1382, 2238, 1786, - 1957, 2228, 1082, 1184, 1185, 1186, 1613, 1380, 1071, 1074, - 1611, 987, 988, 989, 990, 991, 984, 1110, 501, 994, - 1207, 71, 1476, 1477, 1291, 174, 2239, 2067, 1216, 2229, - 2066, 1978, 1220, 1387, 1688, 501, 501, 1809, 501, 1410, - 501, 501, 1687, 501, 501, 501, 501, 501, 501, 2232, - 1801, 1667, 1668, 1669, 1914, 1203, 2254, 1808, 501, 1793, - 1791, 1578, 180, 1256, 972, 973, 971, 972, 973, 971, - 1444, 613, 1196, 1292, 1277, 1217, 1473, 1276, 1269, 1275, - 1267, 1215, 974, 1290, 1261, 974, 182, 183, 184, 501, - 1781, 180, 182, 183, 184, 1253, 1591, 180, 1258, 1257, - 1251, 1252, 1915, 2231, 972, 973, 971, 180, 1225, 618, - 1226, 180, 1228, 1230, 1189, 1190, 1234, 1236, 1238, 1240, - 1242, 1214, 974, 779, 1289, 1232, 1179, 180, 2230, 1279, - 1180, 182, 183, 184, 180, 1589, 1194, 1192, 1193, 1472, - 2219, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 501, 501, 501, 1206, 595, 2217, 2102, 1077, 1254, 2064, - 2040, 615, 616, 1960, 972, 973, 971, 1323, 1916, 1818, - 1789, 1806, 1259, 1260, 1658, 1329, 1330, 180, 1265, 1266, - 1625, 1624, 974, 1288, 972, 973, 971, 1810, 1278, 1334, - 1324, 1280, 1907, 1689, 1331, 1268, 1341, 1264, 1263, 1320, - 2035, 1335, 974, 1337, 1338, 1339, 1340, 1262, 1342, 1064, - 1859, 972, 973, 971, 596, 1408, 1985, 2222, 1213, 1213, - 1385, 788, 1357, 787, 1411, 1985, 2180, 1367, 112, 974, - 1936, 182, 183, 184, 1315, 1270, 1985, 2169, 501, 182, - 183, 184, 1985, 596, 1985, 2137, 1333, 983, 982, 992, - 993, 985, 986, 987, 988, 989, 990, 991, 984, 1419, - 2129, 994, 80, 1412, 1413, 938, 938, 938, 1425, 2082, - 596, 2128, 501, 501, 1609, 596, 1998, 972, 973, 971, - 2050, 596, 1836, 180, 1985, 1990, 1820, 1386, 82, 1352, - 1353, 1354, 1430, 1433, 1925, 974, 1421, 501, 1443, 1970, - 1969, 1966, 1967, 1936, 180, 1465, 1420, 501, 1517, 1325, - 1022, 180, 1735, 180, 1966, 1965, 1466, 1484, 596, 1516, - 1853, 180, 180, 1176, 1838, 1735, 1478, 35, 501, 1419, - 1540, 501, 1511, 1831, 1832, 1496, 596, 1610, 1449, 1450, - 596, 2069, 501, 970, 596, 1176, 1175, 623, 1121, 1120, - 623, 1517, 1742, 2047, 1484, 1422, 992, 993, 985, 986, - 987, 988, 989, 990, 991, 984, 1421, 1495, 994, 1768, - 1518, 970, 1514, 35, 35, 1743, 1490, 1516, 1520, 1536, - 2138, 1496, 1535, 1485, 1985, 1374, 1375, 1376, 1377, 2070, - 2071, 2072, 1609, 1815, 1936, 1968, 1544, 501, 1545, 1546, - 1547, 1548, 71, 2172, 501, 1496, 1486, 1539, 180, 1247, - 1588, 1590, 1524, 1518, 1556, 1557, 1558, 1559, 1496, 1488, - 1705, 1516, 2118, 501, 1566, 1704, 589, 627, 1484, 501, - 627, 1609, 1592, 1216, 1474, 1216, 1512, 1519, 1453, 1365, - 1428, 1429, 1572, 1608, 1313, 1107, 1523, 1522, 71, 71, - 71, 1538, 1537, 1484, 793, 792, 2091, 1248, 1249, 1250, - 1595, 982, 992, 993, 985, 986, 987, 988, 989, 990, - 991, 984, 1997, 501, 994, 1408, 2058, 1178, 514, 1565, - 1408, 1408, 1858, 1602, 1567, 1561, 1605, 1555, 1606, 1554, - 1294, 1208, 1562, 1563, 1204, 1174, 1577, 96, 1583, 1584, - 1585, 71, 177, 1580, 1814, 1576, 2073, 1579, 1940, 1941, - 1618, 580, 1244, 1861, 1601, 180, 2092, 1183, 1567, 2241, - 180, 180, 180, 180, 180, 1619, 1604, 810, 1600, 2235, - 1530, 1943, 1925, 1826, 180, 180, 1825, 180, 1824, 1581, - 1358, 180, 1316, 1759, 1551, 1552, 1553, 180, 1760, 1815, - 1620, 2074, 2075, 1946, 180, 1622, 1623, 1245, 1246, 1757, - 181, 1945, 1756, 181, 1758, 1628, 181, 1761, 1755, 1505, - 1506, 502, 2225, 181, 2206, 1917, 1724, 1076, 2051, 180, - 501, 181, 1426, 1427, 1988, 1733, 1432, 1435, 1436, 1568, - 983, 982, 992, 993, 985, 986, 987, 988, 989, 990, - 991, 984, 1732, 502, 994, 2191, 502, 181, 502, 2227, - 2210, 2212, 1448, 2190, 811, 1451, 1452, 1722, 1653, 1654, - 2162, 2164, 103, 1656, 1213, 1723, 1645, 98, 2194, 2165, - 1657, 1385, 2159, 1312, 581, 978, 1819, 981, 840, 839, - 2010, 1814, 1872, 995, 996, 997, 998, 999, 1000, 1001, - 1675, 979, 980, 977, 983, 982, 992, 993, 985, 986, - 987, 988, 989, 990, 991, 984, 1438, 1069, 994, 1661, - 173, 943, 1846, 455, 180, 1845, 1684, 2116, 452, 1070, - 113, 1439, 180, 540, 539, 542, 543, 544, 545, 1962, - 1670, 1961, 541, 1603, 546, 1222, 1221, 1209, 1386, 2045, - 1469, 1501, 1504, 1505, 1506, 1502, 180, 1503, 1507, 1476, - 1477, 1940, 1941, 1721, 1827, 1319, 2130, 180, 180, 180, - 180, 180, 1683, 1308, 1744, 1728, 2086, 587, 1509, 180, - 590, 591, 1666, 180, 606, 602, 180, 180, 593, 2218, - 180, 180, 180, 1731, 1766, 1740, 1737, 1699, 2043, 2216, - 603, 1730, 1061, 1780, 2215, 1681, 1711, 2195, 588, 1719, - 1749, 2193, 2044, 1501, 1504, 1505, 1506, 1502, 1727, 1503, - 1507, 1799, 1984, 1080, 1081, 605, 1769, 604, 1593, 1736, - 1771, 594, 82, 1920, 1735, 2243, 2242, 589, 1694, 1691, - 1798, 1090, 1802, 1803, 1804, 1718, 1783, 1750, 1323, 1083, - 1753, 180, 180, 2243, 1762, 1767, 1751, 1752, 2166, 1754, - 1772, 1959, 1775, 1738, 501, 1470, 80, 85, 77, 1, - 501, 1100, 1784, 501, 472, 1216, 1454, 1059, 1745, 1746, - 501, 550, 1100, 1100, 1100, 1100, 1100, 1572, 484, 2233, - 1807, 1839, 1850, 1281, 1271, 2001, 2088, 1841, 1512, 1991, - 180, 1100, 1816, 1570, 801, 1100, 138, 1701, 1533, 1534, - 2176, 1849, 1835, 93, 767, 92, 180, 804, 180, 907, - 1594, 1196, 2083, 1794, 1848, 1542, 1127, 1125, 1840, 1126, - 179, 1124, 1129, 458, 1421, 1128, 496, 1725, 1726, 1074, - 1847, 1123, 1359, 458, 1420, 606, 602, 498, 1817, 1508, - 178, 458, 1116, 501, 1084, 841, 462, 1971, 1355, 1408, - 1626, 603, 468, 1002, 1729, 1868, 1867, 1776, 611, 611, - 624, 617, 1883, 1931, 2188, 2158, 2160, 458, 2112, 1884, - 1870, 1885, 2163, 1871, 599, 600, 605, 1876, 604, 501, - 2156, 2226, 2209, 1904, 1541, 1468, 1843, 1072, 2042, 1919, - 180, 1698, 1898, 1031, 1796, 1797, 1440, 1099, 523, 1464, - 501, 1378, 538, 181, 535, 1882, 501, 501, 181, 536, - 1479, 181, 1926, 1741, 976, 1679, 1680, 521, 515, 1883, - 1091, 1500, 1498, 1497, 1897, 1317, 1929, 1103, 1942, 180, - 1938, 1923, 1097, 1483, 1631, 1855, 1697, 502, 502, 502, - 955, 1935, 598, 510, 97, 1437, 2034, 1749, 2146, 1665, - 2031, 1913, 597, 61, 38, 502, 502, 1944, 505, 2202, - 946, 1948, 607, 1950, 32, 1951, 31, 30, 29, 1949, - 28, 23, 22, 21, 20, 19, 25, 1963, 1964, 1934, - 1979, 18, 180, 17, 1956, 180, 180, 180, 16, 108, - 48, 45, 501, 983, 982, 992, 993, 985, 986, 987, - 988, 989, 990, 991, 984, 180, 43, 994, 115, 1975, - 114, 1974, 46, 42, 882, 27, 26, 15, 14, 1930, - 1992, 34, 2002, 501, 501, 501, 13, 180, 12, 1986, - 11, 1423, 1424, 10, 181, 9, 2011, 517, 1989, 1987, - 5, 4, 1995, 1994, 1100, 1572, 949, 24, 1020, 2, - 0, 0, 0, 0, 0, 1906, 0, 0, 596, 2007, - 0, 0, 502, 0, 0, 181, 0, 181, 181, 0, - 502, 0, 0, 0, 0, 2014, 502, 1467, 0, 1976, - 1977, 0, 0, 0, 2019, 0, 0, 0, 0, 0, - 1921, 0, 0, 0, 0, 2016, 2017, 0, 2018, 2008, - 2009, 2020, 0, 2022, 983, 982, 992, 993, 985, 986, - 987, 988, 989, 990, 991, 984, 2046, 0, 994, 0, - 0, 2054, 0, 0, 0, 2055, 0, 0, 0, 0, - 0, 0, 0, 0, 2060, 0, 0, 0, 0, 0, - 0, 1749, 0, 2061, 0, 501, 501, 2062, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, - 0, 501, 0, 2077, 2076, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2087, 0, 2095, 2030, - 2090, 0, 0, 0, 0, 0, 2036, 2037, 2038, 0, - 0, 0, 0, 0, 0, 0, 0, 501, 501, 501, - 180, 2093, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 501, 0, 501, 0, 2105, 2107, 2108, 0, 501, - 181, 2119, 2101, 458, 2109, 2117, 2115, 2121, 458, 0, - 1929, 458, 0, 0, 1929, 0, 0, 2124, 0, 0, - 0, 180, 0, 0, 2126, 2123, 2127, 0, 0, 502, - 0, 2125, 501, 180, 0, 0, 0, 0, 2136, 2133, - 0, 0, 2033, 0, 2041, 0, 502, 502, 0, 502, - 2140, 502, 502, 0, 502, 502, 502, 502, 502, 502, - 0, 0, 0, 0, 2155, 514, 0, 0, 0, 502, - 0, 0, 2056, 181, 2167, 2057, 0, 0, 2059, 501, - 501, 1929, 2170, 0, 0, 0, 0, 2175, 0, 0, - 0, 0, 0, 0, 2063, 0, 2065, 0, 2090, 2177, - 502, 0, 181, 1930, 0, 34, 0, 1930, 181, 501, - 2185, 2192, 0, 501, 0, 0, 2196, 2198, 181, 0, - 0, 0, 181, 0, 0, 0, 2205, 0, 0, 0, - 0, 2201, 0, 2214, 458, 2213, 0, 0, 181, 0, - 0, 0, 34, 0, 0, 181, 2094, 2029, 0, 2224, - 611, 1749, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 502, 502, 502, 0, 458, 0, 458, 1106, 2110, - 1877, 0, 0, 0, 1930, 0, 2240, 0, 2114, 514, - 0, 0, 0, 0, 0, 2250, 34, 2171, 181, 0, - 983, 982, 992, 993, 985, 986, 987, 988, 989, 990, - 991, 984, 1677, 0, 994, 0, 1678, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1685, 1686, 0, - 0, 0, 0, 1692, 0, 0, 1695, 1696, 0, 0, - 0, 0, 0, 0, 1702, 0, 1703, 0, 0, 1706, - 1707, 1708, 1709, 1710, 0, 0, 0, 0, 0, 502, - 0, 1676, 0, 0, 2028, 1720, 983, 982, 992, 993, - 985, 986, 987, 988, 989, 990, 991, 984, 0, 0, - 994, 983, 982, 992, 993, 985, 986, 987, 988, 989, - 990, 991, 984, 502, 502, 994, 2027, 0, 0, 0, - 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, - 0, 1764, 1765, 0, 0, 0, 0, 0, 502, 0, - 0, 0, 0, 0, 0, 181, 0, 0, 502, 0, - 458, 0, 181, 0, 181, 0, 0, 0, 0, 0, - 0, 0, 181, 181, 2026, 0, 0, 0, 0, 502, - 0, 0, 502, 1008, 1009, 1010, 1011, 1012, 1013, 1014, - 1015, 1016, 1017, 502, 0, 0, 0, 0, 0, 0, - 0, 0, 1219, 983, 982, 992, 993, 985, 986, 987, - 988, 989, 990, 991, 984, 0, 0, 994, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1219, 1219, 0, - 0, 0, 0, 458, 0, 983, 982, 992, 993, 985, - 986, 987, 988, 989, 990, 991, 984, 0, 502, 994, - 0, 0, 0, 0, 0, 502, 0, 0, 0, 181, - 0, 0, 458, 0, 0, 0, 0, 0, 458, 0, - 0, 0, 0, 0, 502, 0, 0, 0, 458, 0, - 502, 0, 1322, 983, 982, 992, 993, 985, 986, 987, - 988, 989, 990, 991, 984, 0, 0, 994, 458, 0, - 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, - 1880, 1881, 1343, 1344, 458, 458, 458, 458, 458, 458, - 458, 0, 0, 0, 502, 983, 982, 992, 993, 985, - 986, 987, 988, 989, 990, 991, 984, 0, 0, 994, - 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 549, 0, 0, 181, 0, 0, 0, - 0, 181, 181, 181, 181, 181, 1932, 0, 0, 0, - 0, 0, 0, 0, 0, 181, 181, 0, 181, 0, - 0, 0, 181, 0, 0, 0, 0, 1947, 181, 0, - 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, - 611, 1322, 0, 0, 0, 611, 611, 0, 0, 611, - 611, 611, 0, 500, 0, 1219, 0, 0, 0, 0, - 181, 502, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 611, 611, 611, 611, 611, - 0, 0, 0, 0, 1462, 625, 0, 0, 771, 0, - 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, - 0, 1322, 458, 0, 458, 0, 0, 0, 0, 0, - 0, 0, 458, 458, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, - 0, 0, 0, 2013, 0, 0, 0, 2015, 0, 0, - 0, 0, 0, 0, 0, 181, 0, 0, 2024, 2025, - 0, 113, 0, 181, 0, 0, 0, 0, 0, 0, - 0, 0, 155, 0, 2039, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, - 0, 2048, 2049, 0, 0, 2053, 0, 0, 181, 181, - 181, 181, 181, 0, 0, 0, 0, 0, 0, 1586, - 181, 0, 0, 1782, 181, 0, 0, 181, 181, 0, - 0, 181, 181, 181, 0, 0, 152, 0, 153, 0, - 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2081, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1383, 0, 0, 1392, 1393, 1394, - 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, - 1405, 1406, 181, 181, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 502, 156, 2106, 0, 0, - 0, 502, 0, 0, 502, 0, 161, 0, 0, 0, - 0, 502, 0, 0, 0, 0, 458, 0, 0, 0, - 0, 458, 458, 458, 458, 458, 1445, 1062, 0, 0, - 0, 181, 0, 0, 0, 458, 458, 0, 458, 0, - 0, 0, 1651, 0, 0, 0, 0, 181, 458, 181, - 0, 0, 0, 0, 0, 458, 0, 2142, 2143, 2144, - 2145, 0, 2149, 0, 2150, 2151, 2152, 0, 2153, 2154, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, - 458, 0, 0, 0, 502, 0, 0, 0, 0, 504, - 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2181, 0, 0, - 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, - 502, 0, 0, 775, 0, 0, 0, 0, 0, 0, - 0, 181, 0, 0, 0, 0, 0, 0, 611, 611, - 0, 502, 0, 0, 0, 0, 0, 502, 502, 0, - 0, 0, 0, 0, 0, 0, 0, 171, 0, 611, - 2220, 2221, 0, 0, 0, 0, 0, 0, 0, 0, - 181, 0, 0, 0, 0, 458, 0, 0, 0, 625, - 625, 625, 113, 1462, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 155, 0, 0, 0, 945, 947, 0, - 0, 0, 0, 0, 0, 0, 611, 458, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1219, 458, 458, - 458, 458, 458, 181, 0, 0, 181, 181, 181, 0, - 1763, 0, 0, 502, 458, 0, 0, 458, 458, 0, - 0, 458, 1773, 1322, 0, 0, 181, 152, 0, 153, - 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, - 0, 0, 0, 0, 502, 502, 502, 0, 181, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 149, 154, 151, 157, 158, 159, 160, 162, - 163, 164, 165, 0, 0, 0, 0, 0, 166, 167, - 168, 169, 458, 458, 1087, 0, 0, 0, 0, 0, - 0, 0, 625, 0, 0, 0, 0, 156, 1117, 1219, - 0, 0, 0, 0, 0, 0, 0, 161, 0, 1322, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 458, 0, 458, - 0, 0, 0, 0, 0, 0, 0, 1671, 1672, 1673, - 0, 0, 0, 0, 0, 0, 502, 502, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, - 0, 0, 502, 611, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 148, 0, 0, 0, 0, 502, 502, - 502, 181, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 458, 502, 0, 502, 0, 0, 0, 0, 0, - 502, 0, 0, 0, 1219, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 883, - 0, 0, 181, 0, 889, 0, 0, 891, 0, 0, - 458, 771, 0, 502, 181, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1218, 0, 0, 0, 1224, 1224, - 0, 1224, 0, 1224, 1224, 0, 1233, 1224, 1224, 1224, - 1224, 1224, 0, 0, 0, 0, 0, 0, 0, 1218, - 1218, 771, 0, 0, 0, 0, 0, 0, 0, 0, - 502, 502, 0, 458, 0, 0, 458, 458, 458, 0, - 0, 0, 0, 0, 0, 0, 1219, 0, 0, 0, - 0, 0, 1293, 0, 0, 0, 458, 0, 0, 0, - 502, 0, 0, 0, 502, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 149, 154, 151, 157, 158, 159, 160, - 162, 163, 164, 165, 0, 0, 0, 0, 0, 166, - 167, 168, 169, 625, 625, 625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1093, 0, 0, 1104, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1219, 0, - 0, 0, 0, 1878, 1879, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1899, 1900, - 0, 1901, 1902, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1908, 1909, 0, 0, 0, 0, 0, 35, - 36, 37, 72, 39, 40, 0, 0, 0, 0, 0, - 0, 1414, 0, 625, 0, 0, 0, 0, 0, 76, - 0, 0, 0, 0, 41, 67, 68, 1218, 65, 69, - 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1446, 1447, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1462, 0, 0, 54, 0, 0, 0, 0, 0, - 1480, 0, 0, 0, 71, 1958, 0, 0, 0, 0, - 1087, 0, 0, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1122, 0, 0, 0, - 0, 625, 458, 0, 625, 0, 0, 0, 0, 171, - 0, 0, 0, 0, 458, 771, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 113, 0, 135, 0, 0, 0, - 0, 0, 0, 0, 0, 155, 44, 47, 50, 49, - 52, 0, 64, 0, 0, 70, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2012, 0, 0, 0, 1255, - 778, 0, 0, 0, 0, 0, 145, 1582, 53, 75, - 74, 134, 0, 62, 63, 51, 0, 0, 1219, 0, - 0, 0, 0, 0, 0, 0, 771, 0, 1295, 152, - 0, 153, 778, 0, 1304, 0, 122, 123, 144, 143, - 170, 0, 0, 0, 1318, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 55, 56, 0, 57, 58, 59, - 60, 0, 0, 0, 1332, 0, 0, 0, 0, 0, - 0, 1336, 0, 0, 0, 0, 771, 0, 0, 0, - 1345, 1346, 1347, 1348, 1349, 1350, 1351, 0, 139, 120, - 146, 127, 119, 0, 140, 141, 0, 0, 0, 156, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, - 128, 0, 0, 0, 1104, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 131, 129, 124, 125, 126, 130, - 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 2096, 2097, 2098, 2099, 2100, 0, - 0, 0, 2103, 2104, 0, 0, 0, 73, 0, 0, - 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1828, 0, 0, 0, - 0, 0, 0, 1660, 0, 0, 0, 0, 0, 0, - 113, 0, 135, 0, 0, 0, 0, 0, 0, 0, - 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 145, 0, 0, 0, 0, 134, 0, 0, - 0, 1487, 0, 0, 0, 0, 0, 0, 1491, 0, - 1494, 0, 0, 0, 0, 152, 0, 153, 0, 1513, - 171, 0, 1199, 1200, 144, 143, 170, 0, 0, 142, - 0, 1195, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 136, 0, 0, 137, 113, 0, 135, 0, 2199, - 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 139, 1201, 146, 0, 1198, 1218, - 140, 141, 0, 0, 0, 156, 0, 145, 0, 0, - 0, 0, 134, 0, 0, 161, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 152, 0, 153, 0, 0, 0, 0, 1199, 1200, 144, - 143, 170, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 149, 154, 151, 157, 158, - 159, 160, 162, 163, 164, 165, 0, 0, 0, 0, - 0, 166, 167, 168, 169, 0, 0, 0, 0, 139, - 1201, 146, 0, 1198, 0, 140, 141, 1830, 0, 0, - 156, 1218, 0, 1837, 0, 0, 1830, 0, 0, 0, - 161, 625, 0, 1842, 0, 0, 0, 0, 0, 0, - 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1104, 0, 0, 0, 0, 1635, 1636, 1637, - 1638, 1639, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1643, 1644, 0, 1646, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1652, 0, 0, 0, 0, 0, - 0, 1655, 0, 0, 0, 142, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 625, 136, 0, 0, - 137, 0, 0, 0, 0, 0, 1659, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1144, 0, 0, 0, 148, 0, 0, 0, - 0, 0, 1224, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 625, 0, 0, 1218, 0, 0, 1933, - 1224, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 136, 0, 0, 137, 0, 0, 0, 0, - 0, 149, 154, 151, 157, 158, 159, 160, 162, 163, - 164, 165, 0, 0, 0, 0, 0, 166, 167, 168, - 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1132, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 771, 0, 0, 1218, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1770, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2003, 2004, 2005, 1145, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 149, 154, 151, 157, - 158, 159, 160, 162, 163, 164, 165, 0, 0, 0, - 0, 0, 166, 167, 168, 169, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1822, 1823, - 1158, 1161, 1162, 1163, 1164, 1165, 1166, 0, 1167, 1168, - 1169, 1170, 1171, 1146, 1147, 1148, 1149, 1130, 1131, 1159, - 1218, 1133, 0, 1134, 1135, 1136, 1137, 1138, 1139, 1140, - 1141, 1142, 1143, 1150, 1151, 1152, 1153, 1154, 1155, 1156, - 1157, 0, 0, 0, 0, 0, 0, 1854, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1104, 0, 1869, 0, 0, 1830, 2078, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1830, 0, 0, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1830, 1830, 1830, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2120, 0, 2122, 0, 0, 0, - 0, 0, 1830, 0, 0, 0, 0, 1918, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1830, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 625, 625, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1980, - 0, 0, 1981, 1982, 1983, 0, 0, 0, 0, 0, - 1218, 0, 2197, 0, 0, 0, 1830, 0, 0, 0, - 0, 0, 1993, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2006, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 750, 737, 0, 0, 686, 753, 657, - 675, 762, 677, 680, 720, 636, 699, 327, 672, 0, - 661, 632, 668, 633, 659, 688, 237, 692, 656, 739, - 702, 752, 285, 0, 638, 662, 341, 722, 379, 223, - 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, - 397, 333, 759, 289, 709, 0, 388, 312, 0, 0, - 0, 690, 742, 697, 733, 685, 721, 646, 708, 754, - 673, 717, 755, 275, 221, 190, 324, 389, 251, 0, - 0, 0, 182, 183, 184, 0, 2178, 2179, 0, 0, - 0, 0, 0, 212, 0, 219, 714, 749, 670, 716, - 233, 273, 239, 232, 404, 719, 765, 631, 711, 0, - 634, 637, 761, 745, 665, 666, 0, 0, 0, 0, - 0, 0, 0, 689, 698, 730, 683, 0, 0, 0, - 0, 0, 0, 0, 0, 663, 0, 707, 0, 0, - 0, 642, 635, 0, 0, 0, 0, 687, 2132, 0, - 0, 645, 0, 664, 731, 0, 629, 259, 639, 313, - 2141, 735, 744, 684, 435, 748, 682, 681, 751, 726, - 643, 741, 676, 284, 641, 281, 186, 201, 0, 674, - 323, 362, 368, 740, 660, 669, 224, 667, 366, 337, - 421, 208, 249, 359, 342, 364, 706, 724, 365, 290, - 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, - 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, - 280, 384, 257, 189, 288, 444, 200, 374, 216, 193, - 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, - 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, - 412, 413, 225, 449, 204, 432, 197, 940, 431, 319, - 408, 416, 308, 299, 196, 414, 306, 298, 283, 245, - 265, 352, 293, 353, 266, 315, 314, 316, 0, 191, - 0, 390, 425, 450, 210, 655, 736, 403, 441, 446, - 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, - 443, 445, 209, 349, 262, 330, 420, 248, 428, 318, - 205, 268, 386, 282, 291, 728, 764, 336, 367, 214, - 423, 387, 650, 654, 648, 649, 700, 701, 651, 756, - 757, 758, 732, 644, 0, 652, 653, 0, 738, 746, - 747, 705, 185, 198, 287, 760, 356, 252, 448, 430, - 426, 630, 647, 230, 658, 0, 0, 671, 678, 679, - 691, 693, 694, 695, 696, 704, 712, 713, 715, 723, - 725, 727, 729, 734, 743, 763, 187, 188, 199, 207, - 217, 229, 242, 250, 260, 264, 267, 270, 271, 274, - 279, 296, 301, 302, 303, 304, 320, 321, 322, 325, - 328, 329, 332, 334, 335, 338, 344, 345, 346, 347, - 348, 350, 357, 361, 369, 370, 371, 372, 373, 375, - 376, 380, 381, 382, 383, 391, 395, 410, 411, 422, - 434, 438, 261, 418, 439, 0, 295, 703, 710, 297, - 246, 263, 272, 718, 429, 392, 203, 363, 253, 192, - 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, - 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, - 309, 234, 750, 737, 0, 0, 686, 753, 657, 675, - 762, 677, 680, 720, 636, 699, 327, 672, 0, 661, - 632, 668, 633, 659, 688, 237, 692, 656, 739, 702, - 752, 285, 0, 638, 662, 341, 722, 379, 223, 294, - 292, 407, 247, 240, 236, 222, 269, 300, 339, 397, - 333, 759, 289, 709, 0, 388, 312, 0, 0, 0, - 690, 742, 697, 733, 685, 721, 646, 708, 754, 673, - 717, 755, 275, 221, 190, 324, 389, 251, 0, 0, - 0, 182, 183, 184, 0, 0, 0, 0, 0, 0, - 0, 0, 212, 0, 219, 714, 749, 670, 716, 233, - 273, 239, 232, 404, 719, 765, 631, 711, 0, 634, - 637, 761, 745, 665, 666, 0, 0, 0, 0, 0, - 0, 0, 689, 698, 730, 683, 0, 0, 0, 0, - 0, 0, 1922, 0, 663, 0, 707, 0, 0, 0, - 642, 635, 0, 0, 0, 0, 687, 0, 0, 0, - 645, 0, 664, 731, 0, 629, 259, 639, 313, 0, - 735, 744, 684, 435, 748, 682, 681, 751, 726, 643, - 741, 676, 284, 641, 281, 186, 201, 0, 674, 323, - 362, 368, 740, 660, 669, 224, 667, 366, 337, 421, - 208, 249, 359, 342, 364, 706, 724, 365, 290, 409, - 354, 419, 436, 437, 231, 317, 427, 401, 433, 447, - 202, 228, 331, 394, 424, 385, 310, 405, 406, 280, - 384, 257, 189, 288, 444, 200, 374, 216, 193, 396, - 417, 213, 377, 0, 0, 0, 195, 415, 393, 307, - 277, 278, 194, 0, 358, 235, 255, 226, 326, 412, - 413, 225, 449, 204, 432, 197, 940, 431, 319, 408, - 416, 308, 299, 196, 414, 306, 298, 283, 245, 265, - 352, 293, 353, 266, 315, 314, 316, 0, 191, 0, - 390, 425, 450, 210, 655, 736, 403, 441, 446, 0, - 355, 211, 256, 244, 351, 254, 286, 440, 442, 443, - 445, 209, 349, 262, 330, 420, 248, 428, 318, 205, - 268, 386, 282, 291, 728, 764, 336, 367, 214, 423, - 387, 650, 654, 648, 649, 700, 701, 651, 756, 757, - 758, 732, 644, 0, 652, 653, 0, 738, 746, 747, - 705, 185, 198, 287, 760, 356, 252, 448, 430, 426, - 630, 647, 230, 658, 0, 0, 671, 678, 679, 691, - 693, 694, 695, 696, 704, 712, 713, 715, 723, 725, - 727, 729, 734, 743, 763, 187, 188, 199, 207, 217, - 229, 242, 250, 260, 264, 267, 270, 271, 274, 279, - 296, 301, 302, 303, 304, 320, 321, 322, 325, 328, - 329, 332, 334, 335, 338, 344, 345, 346, 347, 348, - 350, 357, 361, 369, 370, 371, 372, 373, 375, 376, - 380, 381, 382, 383, 391, 395, 410, 411, 422, 434, - 438, 261, 418, 439, 0, 295, 703, 710, 297, 246, - 263, 272, 718, 429, 392, 203, 363, 253, 192, 220, - 206, 227, 241, 243, 276, 305, 311, 340, 343, 258, - 238, 218, 360, 215, 378, 398, 399, 400, 402, 309, - 234, 750, 737, 0, 0, 686, 753, 657, 675, 762, - 677, 680, 720, 636, 699, 327, 672, 0, 661, 632, - 668, 633, 659, 688, 237, 692, 656, 739, 702, 752, - 285, 0, 638, 662, 341, 722, 379, 223, 294, 292, - 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, - 759, 289, 709, 0, 388, 312, 0, 0, 0, 690, - 742, 697, 733, 685, 721, 646, 708, 754, 673, 717, - 755, 275, 221, 190, 324, 389, 251, 0, 0, 0, - 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, - 0, 212, 0, 219, 714, 749, 670, 716, 233, 273, - 239, 232, 404, 719, 765, 631, 711, 0, 634, 637, - 761, 745, 665, 666, 0, 0, 0, 0, 0, 0, - 0, 689, 698, 730, 683, 0, 0, 0, 0, 0, - 0, 1774, 0, 663, 0, 707, 0, 0, 0, 642, - 635, 0, 0, 0, 0, 687, 0, 0, 0, 645, - 0, 664, 731, 0, 629, 259, 639, 313, 0, 735, - 744, 684, 435, 748, 682, 681, 751, 726, 643, 741, - 676, 284, 641, 281, 186, 201, 0, 674, 323, 362, - 368, 740, 660, 669, 224, 667, 366, 337, 421, 208, - 249, 359, 342, 364, 706, 724, 365, 290, 409, 354, - 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, - 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, - 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, - 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, - 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, - 225, 449, 204, 432, 197, 940, 431, 319, 408, 416, - 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, - 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, - 425, 450, 210, 655, 736, 403, 441, 446, 0, 355, - 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, - 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, - 386, 282, 291, 728, 764, 336, 367, 214, 423, 387, - 650, 654, 648, 649, 700, 701, 651, 756, 757, 758, - 732, 644, 0, 652, 653, 0, 738, 746, 747, 705, - 185, 198, 287, 760, 356, 252, 448, 430, 426, 630, - 647, 230, 658, 0, 0, 671, 678, 679, 691, 693, - 694, 695, 696, 704, 712, 713, 715, 723, 725, 727, - 729, 734, 743, 763, 187, 188, 199, 207, 217, 229, - 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, - 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, - 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, - 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, - 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, - 261, 418, 439, 0, 295, 703, 710, 297, 246, 263, - 272, 718, 429, 392, 203, 363, 253, 192, 220, 206, - 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, - 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 750, 737, 0, 0, 686, 753, 657, 675, 762, 677, - 680, 720, 636, 699, 327, 672, 0, 661, 632, 668, - 633, 659, 688, 237, 692, 656, 739, 702, 752, 285, - 0, 638, 662, 341, 722, 379, 223, 294, 292, 407, - 247, 240, 236, 222, 269, 300, 339, 397, 333, 759, - 289, 709, 0, 388, 312, 0, 0, 0, 690, 742, - 697, 733, 685, 721, 646, 708, 754, 673, 717, 755, - 275, 221, 190, 324, 389, 251, 0, 0, 0, 182, - 183, 184, 0, 0, 0, 0, 0, 0, 0, 0, - 212, 0, 219, 714, 749, 670, 716, 233, 273, 239, - 232, 404, 719, 765, 631, 711, 0, 634, 637, 761, - 745, 665, 666, 0, 0, 0, 0, 0, 0, 0, - 689, 698, 730, 683, 0, 0, 0, 0, 0, 0, - 1489, 0, 663, 0, 707, 0, 0, 0, 642, 635, - 0, 0, 0, 0, 687, 0, 0, 0, 645, 0, - 664, 731, 0, 629, 259, 639, 313, 0, 735, 744, - 684, 435, 748, 682, 681, 751, 726, 643, 741, 676, - 284, 641, 281, 186, 201, 0, 674, 323, 362, 368, - 740, 660, 669, 224, 667, 366, 337, 421, 208, 249, - 359, 342, 364, 706, 724, 365, 290, 409, 354, 419, - 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, - 331, 394, 424, 385, 310, 405, 406, 280, 384, 257, - 189, 288, 444, 200, 374, 216, 193, 396, 417, 213, - 377, 0, 0, 0, 195, 415, 393, 307, 277, 278, - 194, 0, 358, 235, 255, 226, 326, 412, 413, 225, - 449, 204, 432, 197, 940, 431, 319, 408, 416, 308, - 299, 196, 414, 306, 298, 283, 245, 265, 352, 293, - 353, 266, 315, 314, 316, 0, 191, 0, 390, 425, - 450, 210, 655, 736, 403, 441, 446, 0, 355, 211, - 256, 244, 351, 254, 286, 440, 442, 443, 445, 209, - 349, 262, 330, 420, 248, 428, 318, 205, 268, 386, - 282, 291, 728, 764, 336, 367, 214, 423, 387, 650, - 654, 648, 649, 700, 701, 651, 756, 757, 758, 732, - 644, 0, 652, 653, 0, 738, 746, 747, 705, 185, - 198, 287, 760, 356, 252, 448, 430, 426, 630, 647, - 230, 658, 0, 0, 671, 678, 679, 691, 693, 694, - 695, 696, 704, 712, 713, 715, 723, 725, 727, 729, - 734, 743, 763, 187, 188, 199, 207, 217, 229, 242, - 250, 260, 264, 267, 270, 271, 274, 279, 296, 301, - 302, 303, 304, 320, 321, 322, 325, 328, 329, 332, - 334, 335, 338, 344, 345, 346, 347, 348, 350, 357, - 361, 369, 370, 371, 372, 373, 375, 376, 380, 381, - 382, 383, 391, 395, 410, 411, 422, 434, 438, 261, - 418, 439, 0, 295, 703, 710, 297, 246, 263, 272, - 718, 429, 392, 203, 363, 253, 192, 220, 206, 227, - 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, - 360, 215, 378, 398, 399, 400, 402, 309, 234, 750, - 737, 0, 0, 686, 753, 657, 675, 762, 677, 680, - 720, 636, 699, 327, 672, 0, 661, 632, 668, 633, - 659, 688, 237, 692, 656, 739, 702, 752, 285, 0, - 638, 662, 341, 722, 379, 223, 294, 292, 407, 247, - 240, 236, 222, 269, 300, 339, 397, 333, 759, 289, - 709, 0, 388, 312, 0, 0, 0, 690, 742, 697, - 733, 685, 721, 646, 708, 754, 673, 717, 755, 275, - 221, 190, 324, 389, 251, 71, 0, 0, 182, 183, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, - 0, 219, 714, 749, 670, 716, 233, 273, 239, 232, - 404, 719, 765, 631, 711, 0, 634, 637, 761, 745, - 665, 666, 0, 0, 0, 0, 0, 0, 0, 689, - 698, 730, 683, 0, 0, 0, 0, 0, 0, 0, - 0, 663, 0, 707, 0, 0, 0, 642, 635, 0, - 0, 0, 0, 687, 0, 0, 0, 645, 0, 664, - 731, 0, 629, 259, 639, 313, 0, 735, 744, 684, - 435, 748, 682, 681, 751, 726, 643, 741, 676, 284, - 641, 281, 186, 201, 0, 674, 323, 362, 368, 740, - 660, 669, 224, 667, 366, 337, 421, 208, 249, 359, - 342, 364, 706, 724, 365, 290, 409, 354, 419, 436, - 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, - 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, - 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, - 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, - 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, - 204, 432, 197, 940, 431, 319, 408, 416, 308, 299, - 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, - 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, - 210, 655, 736, 403, 441, 446, 0, 355, 211, 256, - 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, - 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, - 291, 728, 764, 336, 367, 214, 423, 387, 650, 654, - 648, 649, 700, 701, 651, 756, 757, 758, 732, 644, - 0, 652, 653, 0, 738, 746, 747, 705, 185, 198, - 287, 760, 356, 252, 448, 430, 426, 630, 647, 230, - 658, 0, 0, 671, 678, 679, 691, 693, 694, 695, - 696, 704, 712, 713, 715, 723, 725, 727, 729, 734, - 743, 763, 187, 188, 199, 207, 217, 229, 242, 250, - 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, - 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, - 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, - 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, - 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, - 439, 0, 295, 703, 710, 297, 246, 263, 272, 718, - 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, - 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, - 215, 378, 398, 399, 400, 402, 309, 234, 750, 737, - 0, 0, 686, 753, 657, 675, 762, 677, 680, 720, - 636, 699, 327, 672, 0, 661, 632, 668, 633, 659, - 688, 237, 692, 656, 739, 702, 752, 285, 0, 638, - 662, 341, 722, 379, 223, 294, 292, 407, 247, 240, - 236, 222, 269, 300, 339, 397, 333, 759, 289, 709, - 0, 388, 312, 0, 0, 0, 690, 742, 697, 733, - 685, 721, 646, 708, 754, 673, 717, 755, 275, 221, - 190, 324, 389, 251, 0, 0, 0, 182, 183, 184, - 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, - 219, 714, 749, 670, 716, 233, 273, 239, 232, 404, - 719, 765, 631, 711, 0, 634, 637, 761, 745, 665, - 666, 0, 0, 0, 0, 0, 0, 0, 689, 698, - 730, 683, 0, 0, 0, 0, 0, 0, 0, 0, - 663, 0, 707, 0, 0, 0, 642, 635, 0, 0, - 0, 0, 687, 0, 0, 0, 645, 0, 664, 731, - 0, 629, 259, 639, 313, 0, 735, 744, 684, 435, - 748, 682, 681, 751, 726, 643, 741, 676, 284, 641, - 281, 186, 201, 0, 674, 323, 362, 368, 740, 660, - 669, 224, 667, 366, 337, 421, 208, 249, 359, 342, - 364, 706, 724, 365, 290, 409, 354, 419, 436, 437, - 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, - 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, - 444, 200, 374, 216, 193, 396, 417, 213, 377, 0, - 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, - 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, - 432, 197, 940, 431, 319, 408, 416, 308, 299, 196, - 414, 306, 298, 283, 245, 265, 352, 293, 353, 266, - 315, 314, 316, 0, 191, 0, 390, 425, 450, 210, - 655, 736, 403, 441, 446, 0, 355, 211, 256, 244, - 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, - 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, - 728, 764, 336, 367, 214, 423, 387, 650, 654, 648, - 649, 700, 701, 651, 756, 757, 758, 732, 644, 0, - 652, 653, 0, 738, 746, 747, 705, 185, 198, 287, - 760, 356, 252, 448, 430, 426, 630, 647, 230, 658, - 0, 0, 671, 678, 679, 691, 693, 694, 695, 696, - 704, 712, 713, 715, 723, 725, 727, 729, 734, 743, - 763, 187, 188, 199, 207, 217, 229, 242, 250, 260, - 264, 267, 270, 271, 274, 279, 296, 301, 302, 303, - 304, 320, 321, 322, 325, 328, 329, 332, 334, 335, - 338, 344, 345, 346, 347, 348, 350, 357, 361, 369, - 370, 371, 372, 373, 375, 376, 380, 381, 382, 383, - 391, 395, 410, 411, 422, 434, 438, 261, 418, 439, - 0, 295, 703, 710, 297, 246, 263, 272, 718, 429, - 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, - 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, - 378, 398, 399, 400, 402, 309, 234, 750, 737, 0, - 0, 686, 753, 657, 675, 762, 677, 680, 720, 636, - 699, 327, 672, 0, 661, 632, 668, 633, 659, 688, - 237, 692, 656, 739, 702, 752, 285, 0, 638, 662, - 341, 722, 379, 223, 294, 292, 407, 247, 240, 236, - 222, 269, 300, 339, 397, 333, 759, 289, 709, 0, - 388, 312, 0, 0, 0, 690, 742, 697, 733, 685, - 721, 646, 708, 754, 673, 717, 755, 275, 221, 190, - 324, 389, 251, 0, 0, 0, 182, 183, 184, 0, - 0, 0, 0, 0, 0, 0, 0, 212, 0, 219, - 714, 749, 670, 716, 233, 273, 239, 232, 404, 719, - 765, 631, 711, 0, 634, 637, 761, 745, 665, 666, - 0, 0, 0, 0, 0, 0, 0, 689, 698, 730, - 683, 0, 0, 0, 0, 0, 0, 0, 0, 663, - 0, 707, 0, 0, 0, 642, 635, 0, 0, 0, - 0, 687, 0, 0, 0, 645, 0, 664, 731, 0, - 629, 259, 639, 313, 0, 735, 744, 684, 435, 748, - 682, 681, 751, 726, 643, 741, 676, 284, 641, 281, - 186, 201, 0, 674, 323, 362, 368, 740, 660, 669, - 224, 667, 366, 337, 421, 208, 249, 359, 342, 364, - 706, 724, 365, 290, 409, 354, 419, 436, 437, 231, - 317, 427, 401, 433, 447, 202, 228, 331, 394, 424, - 385, 310, 405, 406, 280, 384, 257, 189, 288, 444, - 200, 374, 216, 193, 396, 417, 213, 377, 0, 0, - 0, 195, 415, 393, 307, 277, 278, 194, 0, 358, - 235, 255, 226, 326, 412, 413, 225, 449, 204, 432, - 197, 640, 431, 319, 408, 416, 308, 299, 196, 414, - 306, 298, 283, 245, 265, 352, 293, 353, 266, 315, - 314, 316, 0, 191, 0, 390, 425, 450, 210, 655, - 736, 403, 441, 446, 0, 355, 211, 256, 244, 351, - 254, 286, 440, 442, 443, 445, 209, 349, 262, 330, - 420, 248, 428, 628, 766, 622, 621, 282, 291, 728, - 764, 336, 367, 214, 423, 387, 650, 654, 648, 649, - 700, 701, 651, 756, 757, 758, 732, 644, 0, 652, - 653, 0, 738, 746, 747, 705, 185, 198, 287, 760, - 356, 252, 448, 430, 426, 630, 647, 230, 658, 0, - 0, 671, 678, 679, 691, 693, 694, 695, 696, 704, - 712, 713, 715, 723, 725, 727, 729, 734, 743, 763, - 187, 188, 199, 207, 217, 229, 242, 250, 260, 264, - 267, 270, 271, 274, 279, 296, 301, 302, 303, 304, - 320, 321, 322, 325, 328, 329, 332, 334, 335, 338, - 344, 345, 346, 347, 348, 350, 357, 361, 369, 370, - 371, 372, 373, 375, 376, 380, 381, 382, 383, 391, - 395, 410, 411, 422, 434, 438, 261, 418, 439, 0, - 295, 703, 710, 297, 246, 263, 272, 718, 429, 392, - 203, 363, 253, 192, 220, 206, 227, 241, 243, 276, - 305, 311, 340, 343, 258, 238, 218, 360, 215, 378, - 398, 399, 400, 402, 309, 234, 750, 737, 0, 0, - 686, 753, 657, 675, 762, 677, 680, 720, 636, 699, - 327, 672, 0, 661, 632, 668, 633, 659, 688, 237, - 692, 656, 739, 702, 752, 285, 0, 638, 662, 341, - 722, 379, 223, 294, 292, 407, 247, 240, 236, 222, - 269, 300, 339, 397, 333, 759, 289, 709, 0, 388, - 312, 0, 0, 0, 690, 742, 697, 733, 685, 721, - 646, 708, 754, 673, 717, 755, 275, 221, 190, 324, - 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 0, 219, 714, - 749, 670, 716, 233, 273, 239, 232, 404, 719, 765, - 631, 711, 0, 634, 637, 761, 745, 665, 666, 0, - 0, 0, 0, 0, 0, 0, 689, 698, 730, 683, - 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, - 707, 0, 0, 0, 642, 635, 0, 0, 0, 0, - 687, 0, 0, 0, 645, 0, 664, 731, 0, 629, - 259, 639, 313, 0, 735, 744, 684, 435, 748, 682, - 681, 751, 726, 643, 741, 676, 284, 641, 281, 186, - 201, 0, 674, 323, 362, 368, 740, 660, 669, 224, - 667, 366, 337, 421, 208, 249, 359, 342, 364, 706, - 724, 365, 290, 409, 354, 419, 436, 437, 231, 317, - 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, - 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, - 374, 216, 193, 396, 1108, 213, 377, 0, 0, 0, - 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, - 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, - 640, 431, 319, 408, 416, 308, 299, 196, 414, 306, - 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, - 316, 0, 191, 0, 390, 425, 450, 210, 655, 736, - 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, - 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, - 248, 428, 628, 766, 622, 621, 282, 291, 728, 764, - 336, 367, 214, 423, 387, 650, 654, 648, 649, 700, - 701, 651, 756, 757, 758, 732, 644, 0, 652, 653, - 0, 738, 746, 747, 705, 185, 198, 287, 760, 356, - 252, 448, 430, 426, 630, 647, 230, 658, 0, 0, - 671, 678, 679, 691, 693, 694, 695, 696, 704, 712, - 713, 715, 723, 725, 727, 729, 734, 743, 763, 187, - 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, - 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, - 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, - 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, - 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, - 410, 411, 422, 434, 438, 261, 418, 439, 0, 295, - 703, 710, 297, 246, 263, 272, 718, 429, 392, 203, - 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, - 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, 750, 737, 0, 0, 686, - 753, 657, 675, 762, 677, 680, 720, 636, 699, 327, - 672, 0, 661, 632, 668, 633, 659, 688, 237, 692, - 656, 739, 702, 752, 285, 0, 638, 662, 341, 722, - 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, - 300, 339, 397, 333, 759, 289, 709, 0, 388, 312, - 0, 0, 0, 690, 742, 697, 733, 685, 721, 646, - 708, 754, 673, 717, 755, 275, 221, 190, 324, 389, - 251, 0, 0, 0, 182, 183, 184, 0, 0, 0, - 0, 0, 0, 0, 0, 212, 0, 219, 714, 749, - 670, 716, 233, 273, 239, 232, 404, 719, 765, 631, - 711, 0, 634, 637, 761, 745, 665, 666, 0, 0, - 0, 0, 0, 0, 0, 689, 698, 730, 683, 0, - 0, 0, 0, 0, 0, 0, 0, 663, 0, 707, - 0, 0, 0, 642, 635, 0, 0, 0, 0, 687, - 0, 0, 0, 645, 0, 664, 731, 0, 629, 259, - 639, 313, 0, 735, 744, 684, 435, 748, 682, 681, - 751, 726, 643, 741, 676, 284, 641, 281, 186, 201, - 0, 674, 323, 362, 368, 740, 660, 669, 224, 667, - 366, 337, 421, 208, 249, 359, 342, 364, 706, 724, - 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, - 401, 433, 447, 202, 228, 331, 394, 424, 385, 310, - 405, 406, 280, 384, 257, 189, 288, 444, 200, 374, - 216, 193, 396, 619, 213, 377, 0, 0, 0, 195, - 415, 393, 307, 277, 278, 194, 0, 358, 235, 255, - 226, 326, 412, 413, 225, 449, 204, 432, 197, 640, - 431, 319, 408, 416, 308, 299, 196, 414, 306, 298, - 283, 245, 265, 352, 293, 353, 266, 315, 314, 316, - 0, 191, 0, 390, 425, 450, 210, 655, 736, 403, - 441, 446, 0, 355, 211, 256, 244, 351, 254, 286, - 440, 442, 443, 445, 209, 349, 262, 330, 420, 248, - 428, 628, 766, 622, 621, 282, 291, 728, 764, 336, - 367, 214, 423, 387, 650, 654, 648, 649, 700, 701, - 651, 756, 757, 758, 732, 644, 0, 652, 653, 0, - 738, 746, 747, 705, 185, 198, 287, 760, 356, 252, - 448, 430, 426, 630, 647, 230, 658, 0, 0, 671, - 678, 679, 691, 693, 694, 695, 696, 704, 712, 713, - 715, 723, 725, 727, 729, 734, 743, 763, 187, 188, - 199, 207, 217, 229, 242, 250, 260, 264, 267, 270, - 271, 274, 279, 296, 301, 302, 303, 304, 320, 321, - 322, 325, 328, 329, 332, 334, 335, 338, 344, 345, - 346, 347, 348, 350, 357, 361, 369, 370, 371, 372, - 373, 375, 376, 380, 381, 382, 383, 391, 395, 410, - 411, 422, 434, 438, 261, 418, 439, 0, 295, 703, - 710, 297, 246, 263, 272, 718, 429, 392, 203, 363, - 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, - 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, - 400, 402, 309, 234, 327, 0, 0, 1416, 0, 519, - 0, 0, 0, 237, 0, 518, 0, 0, 0, 285, - 0, 0, 1417, 341, 0, 379, 223, 294, 292, 407, - 247, 240, 236, 222, 269, 300, 339, 397, 333, 562, - 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, - 553, 554, 0, 0, 0, 0, 0, 0, 0, 0, - 275, 221, 190, 324, 389, 251, 71, 0, 0, 182, - 183, 184, 540, 539, 542, 543, 544, 545, 0, 0, - 212, 541, 219, 546, 547, 548, 0, 233, 273, 239, - 232, 404, 0, 0, 0, 516, 533, 0, 561, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 530, 531, - 609, 0, 0, 0, 577, 0, 532, 0, 0, 525, - 526, 528, 527, 529, 534, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 259, 0, 313, 0, 576, 0, - 0, 435, 0, 0, 574, 0, 0, 0, 0, 0, - 284, 0, 281, 186, 201, 0, 0, 323, 362, 368, - 0, 0, 0, 224, 0, 366, 337, 421, 208, 249, - 359, 342, 364, 0, 0, 365, 290, 409, 354, 419, - 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, - 331, 394, 424, 385, 310, 405, 406, 280, 384, 257, - 189, 288, 444, 200, 374, 216, 193, 396, 417, 213, - 377, 0, 0, 0, 195, 415, 393, 307, 277, 278, - 194, 0, 358, 235, 255, 226, 326, 412, 413, 225, - 449, 204, 432, 197, 0, 431, 319, 408, 416, 308, - 299, 196, 414, 306, 298, 283, 245, 265, 352, 293, - 353, 266, 315, 314, 316, 0, 191, 0, 390, 425, - 450, 210, 0, 0, 403, 441, 446, 0, 355, 211, - 256, 244, 351, 254, 286, 440, 442, 443, 445, 209, - 349, 262, 330, 420, 248, 428, 318, 205, 268, 386, - 282, 291, 0, 0, 336, 367, 214, 423, 387, 564, - 575, 570, 571, 568, 569, 563, 567, 566, 565, 578, - 555, 556, 557, 558, 560, 0, 572, 573, 559, 185, - 198, 287, 0, 356, 252, 448, 430, 426, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 187, 188, 199, 207, 217, 229, 242, - 250, 260, 264, 267, 270, 271, 274, 279, 296, 301, - 302, 303, 304, 320, 321, 322, 325, 328, 329, 332, - 334, 335, 338, 344, 345, 346, 347, 348, 350, 357, - 361, 369, 370, 371, 372, 373, 375, 376, 380, 381, - 382, 383, 391, 395, 410, 411, 422, 434, 438, 261, - 418, 439, 0, 295, 0, 0, 297, 246, 263, 272, - 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, - 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, - 360, 215, 378, 398, 399, 400, 402, 309, 234, 327, - 0, 0, 0, 0, 519, 0, 0, 0, 237, 0, - 518, 0, 0, 0, 285, 0, 0, 0, 341, 0, - 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, - 300, 339, 397, 333, 562, 289, 0, 0, 388, 312, - 0, 0, 0, 0, 0, 553, 554, 0, 0, 0, - 0, 0, 0, 1528, 0, 275, 221, 190, 324, 389, - 251, 71, 0, 0, 182, 183, 184, 540, 539, 542, - 543, 544, 545, 0, 0, 212, 541, 219, 546, 547, - 548, 1529, 233, 273, 239, 232, 404, 0, 0, 0, - 516, 533, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 530, 531, 0, 0, 0, 0, 577, - 0, 532, 0, 0, 525, 526, 528, 527, 529, 534, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, - 0, 313, 0, 576, 0, 0, 435, 0, 0, 574, - 0, 0, 0, 0, 0, 284, 0, 281, 186, 201, - 0, 0, 323, 362, 368, 0, 0, 0, 224, 0, - 366, 337, 421, 208, 249, 359, 342, 364, 0, 0, - 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, - 401, 433, 447, 202, 228, 331, 394, 424, 385, 310, - 405, 406, 280, 384, 257, 189, 288, 444, 200, 374, - 216, 193, 396, 417, 213, 377, 0, 0, 0, 195, - 415, 393, 307, 277, 278, 194, 0, 358, 235, 255, - 226, 326, 412, 413, 225, 449, 204, 432, 197, 0, - 431, 319, 408, 416, 308, 299, 196, 414, 306, 298, - 283, 245, 265, 352, 293, 353, 266, 315, 314, 316, - 0, 191, 0, 390, 425, 450, 210, 0, 0, 403, - 441, 446, 0, 355, 211, 256, 244, 351, 254, 286, - 440, 442, 443, 445, 209, 349, 262, 330, 420, 248, - 428, 318, 205, 268, 386, 282, 291, 0, 0, 336, - 367, 214, 423, 387, 564, 575, 570, 571, 568, 569, - 563, 567, 566, 565, 578, 555, 556, 557, 558, 560, - 0, 572, 573, 559, 185, 198, 287, 0, 356, 252, - 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 199, 207, 217, 229, 242, 250, 260, 264, 267, 270, - 271, 274, 279, 296, 301, 302, 303, 304, 320, 321, - 322, 325, 328, 329, 332, 334, 335, 338, 344, 345, - 346, 347, 348, 350, 357, 361, 369, 370, 371, 372, - 373, 375, 376, 380, 381, 382, 383, 391, 395, 410, - 411, 422, 434, 438, 261, 418, 439, 0, 295, 0, - 0, 297, 246, 263, 272, 0, 429, 392, 203, 363, - 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, - 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, - 400, 402, 309, 234, 327, 0, 0, 0, 0, 519, - 0, 0, 0, 237, 0, 518, 0, 0, 0, 285, - 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, - 247, 240, 236, 222, 269, 300, 339, 397, 333, 562, - 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, - 553, 554, 0, 0, 0, 0, 0, 0, 0, 0, - 275, 221, 190, 324, 389, 251, 71, 0, 596, 182, - 183, 184, 540, 539, 542, 543, 544, 545, 0, 0, - 212, 541, 219, 546, 547, 548, 0, 233, 273, 239, - 232, 404, 0, 0, 0, 516, 533, 0, 561, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 530, 531, - 0, 0, 0, 0, 577, 0, 532, 0, 0, 525, - 526, 528, 527, 529, 534, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 259, 0, 313, 0, 576, 0, - 0, 435, 0, 0, 574, 0, 0, 0, 0, 0, - 284, 0, 281, 186, 201, 0, 0, 323, 362, 368, - 0, 0, 0, 224, 0, 366, 337, 421, 208, 249, - 359, 342, 364, 0, 0, 365, 290, 409, 354, 419, - 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, - 331, 394, 424, 385, 310, 405, 406, 280, 384, 257, - 189, 288, 444, 200, 374, 216, 193, 396, 417, 213, - 377, 0, 0, 0, 195, 415, 393, 307, 277, 278, - 194, 0, 358, 235, 255, 226, 326, 412, 413, 225, - 449, 204, 432, 197, 0, 431, 319, 408, 416, 308, - 299, 196, 414, 306, 298, 283, 245, 265, 352, 293, - 353, 266, 315, 314, 316, 0, 191, 0, 390, 425, - 450, 210, 0, 0, 403, 441, 446, 0, 355, 211, - 256, 244, 351, 254, 286, 440, 442, 443, 445, 209, - 349, 262, 330, 420, 248, 428, 318, 205, 268, 386, - 282, 291, 0, 0, 336, 367, 214, 423, 387, 564, - 575, 570, 571, 568, 569, 563, 567, 566, 565, 578, - 555, 556, 557, 558, 560, 0, 572, 573, 559, 185, - 198, 287, 0, 356, 252, 448, 430, 426, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 187, 188, 199, 207, 217, 229, 242, - 250, 260, 264, 267, 270, 271, 274, 279, 296, 301, - 302, 303, 304, 320, 321, 322, 325, 328, 329, 332, - 334, 335, 338, 344, 345, 346, 347, 348, 350, 357, - 361, 369, 370, 371, 372, 373, 375, 376, 380, 381, - 382, 383, 391, 395, 410, 411, 422, 434, 438, 261, - 418, 439, 0, 295, 0, 0, 297, 246, 263, 272, - 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, - 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, - 360, 215, 378, 398, 399, 400, 402, 309, 234, 327, - 0, 0, 0, 0, 519, 0, 0, 0, 237, 0, - 518, 0, 0, 0, 285, 0, 0, 0, 341, 0, - 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, - 300, 339, 397, 333, 562, 289, 0, 0, 388, 312, - 0, 0, 0, 0, 0, 553, 554, 0, 0, 0, - 0, 0, 0, 0, 0, 275, 221, 190, 324, 389, - 251, 71, 0, 0, 182, 183, 184, 540, 539, 542, - 543, 544, 545, 0, 0, 212, 541, 219, 546, 547, - 548, 0, 233, 273, 239, 232, 404, 0, 0, 0, - 516, 533, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 530, 531, 609, 0, 0, 0, 577, - 0, 532, 0, 0, 525, 526, 528, 527, 529, 534, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, - 0, 313, 0, 576, 0, 0, 435, 0, 0, 574, - 0, 0, 0, 0, 0, 284, 0, 281, 186, 201, - 0, 0, 323, 362, 368, 0, 0, 0, 224, 0, - 366, 337, 421, 208, 249, 359, 342, 364, 0, 0, - 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, - 401, 433, 447, 202, 228, 331, 394, 424, 385, 310, - 405, 406, 280, 384, 257, 189, 288, 444, 200, 374, - 216, 193, 396, 417, 213, 377, 0, 0, 0, 195, - 415, 393, 307, 277, 278, 194, 0, 358, 235, 255, - 226, 326, 412, 413, 225, 449, 204, 432, 197, 0, - 431, 319, 408, 416, 308, 299, 196, 414, 306, 298, - 283, 245, 265, 352, 293, 353, 266, 315, 314, 316, - 0, 191, 0, 390, 425, 450, 210, 0, 0, 403, - 441, 446, 0, 355, 211, 256, 244, 351, 254, 286, - 440, 442, 443, 445, 209, 349, 262, 330, 420, 248, - 428, 318, 205, 268, 386, 282, 291, 0, 0, 336, - 367, 214, 423, 387, 564, 575, 570, 571, 568, 569, - 563, 567, 566, 565, 578, 555, 556, 557, 558, 560, - 0, 572, 573, 559, 185, 198, 287, 0, 356, 252, - 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 199, 207, 217, 229, 242, 250, 260, 264, 267, 270, - 271, 274, 279, 296, 301, 302, 303, 304, 320, 321, - 322, 325, 328, 329, 332, 334, 335, 338, 344, 345, - 346, 347, 348, 350, 357, 361, 369, 370, 371, 372, - 373, 375, 376, 380, 381, 382, 383, 391, 395, 410, - 411, 422, 434, 438, 261, 418, 439, 0, 295, 0, - 0, 297, 246, 263, 272, 0, 429, 392, 203, 363, - 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, - 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, - 400, 402, 309, 234, 327, 0, 0, 0, 0, 519, - 0, 0, 0, 237, 0, 518, 0, 0, 0, 285, - 0, 0, 0, 341, 0, 379, 223, 294, 292, 407, - 247, 240, 236, 222, 269, 300, 339, 397, 333, 562, - 289, 0, 0, 388, 312, 0, 0, 0, 0, 0, - 553, 554, 0, 0, 0, 0, 0, 0, 0, 0, - 275, 221, 190, 324, 389, 251, 71, 0, 0, 182, - 183, 184, 540, 1434, 542, 543, 544, 545, 0, 0, - 212, 541, 219, 546, 547, 548, 0, 233, 273, 239, - 232, 404, 0, 0, 0, 516, 533, 0, 561, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 530, 531, - 609, 0, 0, 0, 577, 0, 532, 0, 0, 525, - 526, 528, 527, 529, 534, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 259, 0, 313, 0, 576, 0, - 0, 435, 0, 0, 574, 0, 0, 0, 0, 0, - 284, 0, 281, 186, 201, 0, 0, 323, 362, 368, - 0, 0, 0, 224, 0, 366, 337, 421, 208, 249, - 359, 342, 364, 0, 0, 365, 290, 409, 354, 419, - 436, 437, 231, 317, 427, 401, 433, 447, 202, 228, - 331, 394, 424, 385, 310, 405, 406, 280, 384, 257, - 189, 288, 444, 200, 374, 216, 193, 396, 417, 213, - 377, 0, 0, 0, 195, 415, 393, 307, 277, 278, - 194, 0, 358, 235, 255, 226, 326, 412, 413, 225, - 449, 204, 432, 197, 0, 431, 319, 408, 416, 308, - 299, 196, 414, 306, 298, 283, 245, 265, 352, 293, - 353, 266, 315, 314, 316, 0, 191, 0, 390, 425, - 450, 210, 0, 0, 403, 441, 446, 0, 355, 211, - 256, 244, 351, 254, 286, 440, 442, 443, 445, 209, - 349, 262, 330, 420, 248, 428, 318, 205, 268, 386, - 282, 291, 0, 0, 336, 367, 214, 423, 387, 564, - 575, 570, 571, 568, 569, 563, 567, 566, 565, 578, - 555, 556, 557, 558, 560, 0, 572, 573, 559, 185, - 198, 287, 0, 356, 252, 448, 430, 426, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 187, 188, 199, 207, 217, 229, 242, - 250, 260, 264, 267, 270, 271, 274, 279, 296, 301, - 302, 303, 304, 320, 321, 322, 325, 328, 329, 332, - 334, 335, 338, 344, 345, 346, 347, 348, 350, 357, - 361, 369, 370, 371, 372, 373, 375, 376, 380, 381, - 382, 383, 391, 395, 410, 411, 422, 434, 438, 261, - 418, 439, 0, 295, 0, 0, 297, 246, 263, 272, - 0, 429, 392, 203, 363, 253, 192, 220, 206, 227, - 241, 243, 276, 305, 311, 340, 343, 258, 238, 218, - 360, 215, 378, 398, 399, 400, 402, 309, 234, 327, - 0, 0, 0, 0, 519, 0, 0, 0, 237, 0, - 518, 0, 0, 0, 285, 0, 0, 0, 341, 0, - 379, 223, 294, 292, 407, 247, 240, 236, 222, 269, - 300, 339, 397, 333, 562, 289, 0, 0, 388, 312, - 0, 0, 0, 0, 0, 553, 554, 0, 0, 0, - 0, 0, 0, 0, 0, 275, 221, 190, 324, 389, - 251, 71, 0, 0, 182, 183, 184, 540, 1431, 542, - 543, 544, 545, 0, 0, 212, 541, 219, 546, 547, - 548, 0, 233, 273, 239, 232, 404, 0, 0, 0, - 516, 533, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 530, 531, 609, 0, 0, 0, 577, - 0, 532, 0, 0, 525, 526, 528, 527, 529, 534, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, - 0, 313, 0, 576, 0, 0, 435, 0, 0, 574, - 0, 0, 0, 0, 0, 284, 0, 281, 186, 201, - 0, 0, 323, 362, 368, 0, 0, 0, 224, 0, - 366, 337, 421, 208, 249, 359, 342, 364, 0, 0, - 365, 290, 409, 354, 419, 436, 437, 231, 317, 427, - 401, 433, 447, 202, 228, 331, 394, 424, 385, 310, - 405, 406, 280, 384, 257, 189, 288, 444, 200, 374, - 216, 193, 396, 417, 213, 377, 0, 0, 0, 195, - 415, 393, 307, 277, 278, 194, 0, 358, 235, 255, - 226, 326, 412, 413, 225, 449, 204, 432, 197, 0, - 431, 319, 408, 416, 308, 299, 196, 414, 306, 298, - 283, 245, 265, 352, 293, 353, 266, 315, 314, 316, - 0, 191, 0, 390, 425, 450, 210, 0, 0, 403, - 441, 446, 0, 355, 211, 256, 244, 351, 254, 286, - 440, 442, 443, 445, 209, 349, 262, 330, 420, 248, - 428, 318, 205, 268, 386, 282, 291, 0, 0, 336, - 367, 214, 423, 387, 564, 575, 570, 571, 568, 569, - 563, 567, 566, 565, 578, 555, 556, 557, 558, 560, - 0, 572, 573, 559, 185, 198, 287, 0, 356, 252, - 448, 430, 426, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 188, - 199, 207, 217, 229, 242, 250, 260, 264, 267, 270, - 271, 274, 279, 296, 301, 302, 303, 304, 320, 321, - 322, 325, 328, 329, 332, 334, 335, 338, 344, 345, - 346, 347, 348, 350, 357, 361, 369, 370, 371, 372, - 373, 375, 376, 380, 381, 382, 383, 391, 395, 410, - 411, 422, 434, 438, 261, 418, 439, 0, 295, 0, - 0, 297, 246, 263, 272, 0, 429, 392, 203, 363, - 253, 192, 220, 206, 227, 241, 243, 276, 305, 311, - 340, 343, 258, 238, 218, 360, 215, 378, 398, 399, - 400, 402, 309, 234, 589, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 0, 519, 0, 0, 0, 237, 0, 518, 0, - 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, - 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, - 397, 333, 562, 289, 0, 0, 388, 312, 0, 0, - 0, 0, 0, 553, 554, 0, 0, 0, 0, 0, - 0, 0, 0, 275, 221, 190, 324, 389, 251, 71, - 0, 0, 182, 183, 184, 540, 539, 542, 543, 544, - 545, 0, 0, 212, 541, 219, 546, 547, 548, 0, - 233, 273, 239, 232, 404, 0, 0, 0, 516, 533, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 530, 531, 0, 0, 0, 0, 577, 0, 532, - 0, 0, 525, 526, 528, 527, 529, 534, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, - 0, 576, 0, 0, 435, 0, 0, 574, 0, 0, - 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, - 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, - 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, - 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, - 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, - 280, 384, 257, 189, 288, 444, 200, 374, 216, 193, - 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, - 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, - 412, 413, 225, 449, 204, 432, 197, 0, 431, 319, - 408, 416, 308, 299, 196, 414, 306, 298, 283, 245, - 265, 352, 293, 353, 266, 315, 314, 316, 0, 191, - 0, 390, 425, 450, 210, 0, 0, 403, 441, 446, - 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, - 443, 445, 209, 349, 262, 330, 420, 248, 428, 318, - 205, 268, 386, 282, 291, 0, 0, 336, 367, 214, - 423, 387, 564, 575, 570, 571, 568, 569, 563, 567, - 566, 565, 578, 555, 556, 557, 558, 560, 0, 572, - 573, 559, 185, 198, 287, 0, 356, 252, 448, 430, - 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 187, 188, 199, 207, - 217, 229, 242, 250, 260, 264, 267, 270, 271, 274, - 279, 296, 301, 302, 303, 304, 320, 321, 322, 325, - 328, 329, 332, 334, 335, 338, 344, 345, 346, 347, - 348, 350, 357, 361, 369, 370, 371, 372, 373, 375, - 376, 380, 381, 382, 383, 391, 395, 410, 411, 422, - 434, 438, 261, 418, 439, 0, 295, 0, 0, 297, - 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, - 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, - 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, - 309, 234, 327, 0, 0, 0, 0, 519, 0, 0, - 0, 237, 0, 518, 0, 0, 0, 285, 0, 0, - 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, - 236, 222, 269, 300, 339, 397, 333, 562, 289, 0, - 0, 388, 312, 0, 0, 0, 0, 0, 553, 554, - 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, - 190, 324, 389, 251, 71, 0, 0, 182, 183, 184, - 540, 539, 542, 543, 544, 545, 0, 0, 212, 541, - 219, 546, 547, 548, 0, 233, 273, 239, 232, 404, - 0, 0, 0, 516, 533, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 530, 531, 0, 0, - 0, 0, 577, 0, 532, 0, 0, 525, 526, 528, - 527, 529, 534, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 259, 0, 313, 0, 576, 0, 0, 435, - 0, 0, 574, 0, 0, 0, 0, 0, 284, 0, - 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, - 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, - 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, - 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, - 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, - 444, 200, 374, 216, 193, 396, 417, 213, 377, 0, - 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, - 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, - 432, 197, 0, 431, 319, 408, 416, 308, 299, 196, - 414, 306, 298, 283, 245, 265, 352, 293, 353, 266, - 315, 314, 316, 0, 191, 0, 390, 425, 450, 210, - 0, 0, 403, 441, 446, 0, 355, 211, 256, 244, - 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, - 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, - 0, 0, 336, 367, 214, 423, 387, 564, 575, 570, - 571, 568, 569, 563, 567, 566, 565, 578, 555, 556, - 557, 558, 560, 0, 572, 573, 559, 185, 198, 287, - 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 187, 188, 199, 207, 217, 229, 242, 250, 260, - 264, 267, 270, 271, 274, 279, 296, 301, 302, 303, - 304, 320, 321, 322, 325, 328, 329, 332, 334, 335, - 338, 344, 345, 346, 347, 348, 350, 357, 361, 369, - 370, 371, 372, 373, 375, 376, 380, 381, 382, 383, - 391, 395, 410, 411, 422, 434, 438, 261, 418, 439, - 0, 295, 0, 0, 297, 246, 263, 272, 0, 429, - 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, - 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, - 378, 398, 399, 400, 402, 309, 234, 327, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, - 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, - 397, 333, 562, 289, 0, 0, 388, 312, 0, 0, - 0, 0, 0, 553, 554, 0, 0, 0, 0, 0, - 0, 0, 0, 275, 221, 190, 324, 389, 251, 71, - 0, 0, 182, 183, 184, 540, 539, 542, 543, 544, - 545, 0, 0, 212, 541, 219, 546, 547, 548, 0, - 233, 273, 239, 232, 404, 0, 0, 0, 0, 533, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 530, 531, 0, 0, 0, 0, 577, 0, 532, - 0, 0, 525, 526, 528, 527, 529, 534, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, - 0, 576, 0, 0, 435, 0, 0, 574, 0, 0, - 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, - 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, - 421, 208, 249, 359, 342, 364, 2200, 0, 365, 290, - 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, - 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, - 280, 384, 257, 189, 288, 444, 200, 374, 216, 193, - 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, - 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, - 412, 413, 225, 449, 204, 432, 197, 0, 431, 319, - 408, 416, 308, 299, 196, 414, 306, 298, 283, 245, - 265, 352, 293, 353, 266, 315, 314, 316, 0, 191, - 0, 390, 425, 450, 210, 0, 0, 403, 441, 446, - 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, - 443, 445, 209, 349, 262, 330, 420, 248, 428, 318, - 205, 268, 386, 282, 291, 0, 0, 336, 367, 214, - 423, 387, 564, 575, 570, 571, 568, 569, 563, 567, - 566, 565, 578, 555, 556, 557, 558, 560, 0, 572, - 573, 559, 185, 198, 287, 0, 356, 252, 448, 430, - 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 187, 188, 199, 207, - 217, 229, 242, 250, 260, 264, 267, 270, 271, 274, - 279, 296, 301, 302, 303, 304, 320, 321, 322, 325, - 328, 329, 332, 334, 335, 338, 344, 345, 346, 347, - 348, 350, 357, 361, 369, 370, 371, 372, 373, 375, - 376, 380, 381, 382, 383, 391, 395, 410, 411, 422, - 434, 438, 261, 418, 439, 0, 295, 0, 0, 297, - 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, - 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, - 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, - 309, 234, 327, 0, 0, 0, 0, 0, 0, 0, - 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, - 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, - 236, 222, 269, 300, 339, 397, 333, 562, 289, 0, - 0, 388, 312, 0, 0, 0, 0, 0, 553, 554, - 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, - 190, 324, 389, 251, 71, 0, 596, 182, 183, 184, - 540, 539, 542, 543, 544, 545, 0, 0, 212, 541, - 219, 546, 547, 548, 0, 233, 273, 239, 232, 404, - 0, 0, 0, 0, 533, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 530, 531, 0, 0, - 0, 0, 577, 0, 532, 0, 0, 525, 526, 528, - 527, 529, 534, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 259, 0, 313, 0, 576, 0, 0, 435, - 0, 0, 574, 0, 0, 0, 0, 0, 284, 0, - 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, - 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, - 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, - 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, - 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, - 444, 200, 374, 216, 193, 396, 417, 213, 377, 0, - 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, - 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, - 432, 197, 0, 431, 319, 408, 416, 308, 299, 196, - 414, 306, 298, 283, 245, 265, 352, 293, 353, 266, - 315, 314, 316, 0, 191, 0, 390, 425, 450, 210, - 0, 0, 403, 441, 446, 0, 355, 211, 256, 244, - 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, - 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, - 0, 0, 336, 367, 214, 423, 387, 564, 575, 570, - 571, 568, 569, 563, 567, 566, 565, 578, 555, 556, - 557, 558, 560, 0, 572, 573, 559, 185, 198, 287, - 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 187, 188, 199, 207, 217, 229, 242, 250, 260, - 264, 267, 270, 271, 274, 279, 296, 301, 302, 303, - 304, 320, 321, 322, 325, 328, 329, 332, 334, 335, - 338, 344, 345, 346, 347, 348, 350, 357, 361, 369, - 370, 371, 372, 373, 375, 376, 380, 381, 382, 383, - 391, 395, 410, 411, 422, 434, 438, 261, 418, 439, - 0, 295, 0, 0, 297, 246, 263, 272, 0, 429, - 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, - 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, - 378, 398, 399, 400, 402, 309, 234, 327, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, - 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, - 397, 333, 562, 289, 0, 0, 388, 312, 0, 0, - 0, 0, 0, 553, 554, 0, 0, 0, 0, 0, - 0, 0, 0, 275, 221, 190, 324, 389, 251, 71, - 0, 0, 182, 183, 184, 540, 539, 542, 543, 544, - 545, 0, 0, 212, 541, 219, 546, 547, 548, 0, - 233, 273, 239, 232, 404, 0, 0, 0, 0, 533, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 530, 531, 0, 0, 0, 0, 577, 0, 532, - 0, 0, 525, 526, 528, 527, 529, 534, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, - 0, 576, 0, 0, 435, 0, 0, 574, 0, 0, - 0, 0, 0, 284, 0, 281, 186, 201, 0, 0, - 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, - 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, - 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, - 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, - 280, 384, 257, 189, 288, 444, 200, 374, 216, 193, - 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, - 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, - 412, 413, 225, 449, 204, 432, 197, 0, 431, 319, - 408, 416, 308, 299, 196, 414, 306, 298, 283, 245, - 265, 352, 293, 353, 266, 315, 314, 316, 0, 191, - 0, 390, 425, 450, 210, 0, 0, 403, 441, 446, - 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, - 443, 445, 209, 349, 262, 330, 420, 248, 428, 318, - 205, 268, 386, 282, 291, 0, 0, 336, 367, 214, - 423, 387, 564, 575, 570, 571, 568, 569, 563, 567, - 566, 565, 578, 555, 556, 557, 558, 560, 0, 572, - 573, 559, 185, 198, 287, 0, 356, 252, 448, 430, - 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 187, 188, 199, 207, - 217, 229, 242, 250, 260, 264, 267, 270, 271, 274, - 279, 296, 301, 302, 303, 304, 320, 321, 322, 325, - 328, 329, 332, 334, 335, 338, 344, 345, 346, 347, - 348, 350, 357, 361, 369, 370, 371, 372, 373, 375, - 376, 380, 381, 382, 383, 391, 395, 410, 411, 422, - 434, 438, 261, 418, 439, 0, 295, 0, 0, 297, - 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, - 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, - 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, - 309, 234, 327, 0, 0, 0, 0, 0, 0, 0, - 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, - 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, - 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, - 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, - 190, 324, 389, 251, 0, 0, 0, 182, 183, 184, - 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, - 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 983, 982, 992, 993, 985, 986, 987, 988, - 989, 990, 991, 984, 0, 0, 994, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 259, 0, 313, 0, 0, 0, 0, 435, - 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, - 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, - 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, - 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, - 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, - 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, - 444, 200, 374, 216, 193, 396, 417, 213, 377, 0, - 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, - 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, - 432, 197, 0, 431, 319, 408, 416, 308, 299, 196, - 414, 306, 298, 283, 245, 265, 352, 293, 353, 266, - 315, 314, 316, 0, 191, 0, 390, 425, 450, 210, - 0, 0, 403, 441, 446, 0, 355, 211, 256, 244, - 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, - 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, - 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 185, 198, 287, - 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 187, 188, 199, 207, 217, 229, 242, 250, 260, - 264, 267, 270, 271, 274, 279, 296, 301, 302, 303, - 304, 320, 321, 322, 325, 328, 329, 332, 334, 335, - 338, 344, 345, 346, 347, 348, 350, 357, 361, 369, - 370, 371, 372, 373, 375, 376, 380, 381, 382, 383, - 391, 395, 410, 411, 422, 434, 438, 261, 418, 439, - 0, 295, 0, 0, 297, 246, 263, 272, 0, 429, - 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, - 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, - 378, 398, 399, 400, 402, 309, 234, 327, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 809, 0, 0, - 0, 0, 285, 0, 0, 0, 341, 0, 379, 223, - 294, 292, 407, 247, 240, 236, 222, 269, 300, 339, - 397, 333, 0, 289, 0, 0, 388, 312, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 275, 221, 190, 324, 389, 251, 0, - 0, 0, 182, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 212, 0, 219, 0, 0, 0, 0, - 233, 273, 239, 232, 404, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 259, 0, 313, - 0, 0, 0, 808, 435, 0, 0, 0, 0, 0, - 0, 805, 806, 284, 774, 281, 186, 201, 799, 803, - 323, 362, 368, 0, 0, 0, 224, 0, 366, 337, - 421, 208, 249, 359, 342, 364, 0, 0, 365, 290, - 409, 354, 419, 436, 437, 231, 317, 427, 401, 433, - 447, 202, 228, 331, 394, 424, 385, 310, 405, 406, - 280, 384, 257, 189, 288, 444, 200, 374, 216, 193, - 396, 417, 213, 377, 0, 0, 0, 195, 415, 393, - 307, 277, 278, 194, 0, 358, 235, 255, 226, 326, - 412, 413, 225, 449, 204, 432, 197, 0, 431, 319, - 408, 416, 308, 299, 196, 414, 306, 298, 283, 245, - 265, 352, 293, 353, 266, 315, 314, 316, 0, 191, - 0, 390, 425, 450, 210, 0, 0, 403, 441, 446, - 0, 355, 211, 256, 244, 351, 254, 286, 440, 442, - 443, 445, 209, 349, 262, 330, 420, 248, 428, 318, - 205, 268, 386, 282, 291, 0, 0, 336, 367, 214, - 423, 387, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 198, 287, 0, 356, 252, 448, 430, - 426, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 187, 188, 199, 207, - 217, 229, 242, 250, 260, 264, 267, 270, 271, 274, - 279, 296, 301, 302, 303, 304, 320, 321, 322, 325, - 328, 329, 332, 334, 335, 338, 344, 345, 346, 347, - 348, 350, 357, 361, 369, 370, 371, 372, 373, 375, - 376, 380, 381, 382, 383, 391, 395, 410, 411, 422, - 434, 438, 261, 418, 439, 0, 295, 0, 0, 297, - 246, 263, 272, 0, 429, 392, 203, 363, 253, 192, - 220, 206, 227, 241, 243, 276, 305, 311, 340, 343, - 258, 238, 218, 360, 215, 378, 398, 399, 400, 402, - 309, 234, 327, 0, 0, 0, 1086, 0, 0, 0, - 0, 237, 0, 0, 0, 0, 0, 285, 0, 0, - 0, 341, 0, 379, 223, 294, 292, 407, 247, 240, - 236, 222, 269, 300, 339, 397, 333, 0, 289, 0, - 0, 388, 312, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 275, 221, - 190, 324, 389, 251, 0, 0, 0, 182, 183, 184, - 0, 1088, 0, 0, 0, 0, 0, 0, 212, 0, - 219, 0, 0, 0, 0, 233, 273, 239, 232, 404, - 972, 973, 971, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 974, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 259, 0, 313, 0, 0, 0, 0, 435, - 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, - 281, 186, 201, 0, 0, 323, 362, 368, 0, 0, - 0, 224, 0, 366, 337, 421, 208, 249, 359, 342, - 364, 0, 0, 365, 290, 409, 354, 419, 436, 437, - 231, 317, 427, 401, 433, 447, 202, 228, 331, 394, - 424, 385, 310, 405, 406, 280, 384, 257, 189, 288, - 444, 200, 374, 216, 193, 396, 417, 213, 377, 0, - 0, 0, 195, 415, 393, 307, 277, 278, 194, 0, - 358, 235, 255, 226, 326, 412, 413, 225, 449, 204, - 432, 197, 0, 431, 319, 408, 416, 308, 299, 196, - 414, 306, 298, 283, 245, 265, 352, 293, 353, 266, - 315, 314, 316, 0, 191, 0, 390, 425, 450, 210, - 0, 0, 403, 441, 446, 0, 355, 211, 256, 244, - 351, 254, 286, 440, 442, 443, 445, 209, 349, 262, - 330, 420, 248, 428, 318, 205, 268, 386, 282, 291, - 0, 0, 336, 367, 214, 423, 387, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 185, 198, 287, - 0, 356, 252, 448, 430, 426, 0, 0, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 187, 188, 199, 207, 217, 229, 242, 250, 260, - 264, 267, 270, 271, 274, 279, 296, 301, 302, 303, - 304, 320, 321, 322, 325, 328, 329, 332, 334, 335, - 338, 344, 345, 346, 347, 348, 350, 357, 361, 369, - 370, 371, 372, 373, 375, 376, 380, 381, 382, 383, - 391, 395, 410, 411, 422, 434, 438, 261, 418, 439, - 0, 295, 0, 0, 297, 246, 263, 272, 0, 429, - 392, 203, 363, 253, 192, 220, 206, 227, 241, 243, - 276, 305, 311, 340, 343, 258, 238, 218, 360, 215, - 378, 398, 399, 400, 402, 309, 234, 35, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, - 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, - 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, - 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, - 389, 251, 71, 0, 596, 182, 183, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, - 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, - 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, - 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, - 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, - 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, - 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, - 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, - 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, - 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, - 0, 431, 319, 408, 416, 308, 299, 196, 414, 306, - 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, - 316, 0, 191, 0, 390, 425, 450, 210, 0, 0, - 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, - 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, - 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, - 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 198, 287, 0, 356, - 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, - 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, - 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, - 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, - 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, - 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, - 410, 411, 422, 434, 438, 261, 418, 439, 0, 295, - 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, - 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, - 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, 327, 0, 0, 0, 1461, - 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, - 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, - 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, - 182, 183, 184, 0, 1463, 0, 0, 0, 0, 0, - 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, - 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, - 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, - 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, - 249, 359, 342, 364, 0, 1459, 365, 290, 409, 354, - 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, - 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, - 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, - 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, - 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, - 225, 449, 204, 432, 197, 0, 431, 319, 408, 416, - 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, - 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, - 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, - 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, - 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, - 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, - 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, - 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, - 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, - 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, - 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, - 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, - 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, - 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, - 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, - 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, - 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, - 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, - 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, - 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 774, 281, 186, - 201, 772, 0, 323, 362, 368, 0, 0, 0, 224, - 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, - 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, - 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, - 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, - 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, - 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, - 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, - 0, 431, 319, 408, 416, 308, 299, 196, 414, 306, - 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, - 316, 0, 191, 0, 390, 425, 450, 210, 0, 0, - 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, - 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, - 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, - 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 198, 287, 0, 356, - 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, - 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, - 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, - 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, - 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, - 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, - 410, 411, 422, 434, 438, 261, 418, 439, 0, 295, - 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, - 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, - 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, 327, 0, 0, 0, 1461, - 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, - 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, - 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, - 182, 183, 184, 0, 1463, 0, 0, 0, 0, 0, - 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, - 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, - 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, - 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, - 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, - 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, - 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, - 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, - 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, - 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, - 225, 449, 204, 432, 197, 0, 431, 319, 408, 416, - 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, - 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, - 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, - 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, - 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, - 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, - 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, - 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, - 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, - 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, - 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, - 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, - 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, - 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, - 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, - 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, - 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, - 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 221, 190, 324, 389, 251, 71, 0, 0, 182, 183, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, - 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, - 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, - 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, - 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, - 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, - 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, - 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, - 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, - 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, - 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, - 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, - 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, - 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, - 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, - 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, - 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, - 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, - 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, - 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, - 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, - 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, - 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, - 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, - 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, - 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, - 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, - 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, - 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, - 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, - 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, - 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, - 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, - 0, 0, 0, 182, 183, 184, 0, 0, 1481, 0, - 0, 1482, 0, 0, 212, 0, 219, 0, 0, 0, - 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, - 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, - 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, - 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, - 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, - 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, - 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, - 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, - 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, - 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, - 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, - 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, - 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, - 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, - 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, - 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, - 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, - 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, - 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, - 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, - 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, - 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, - 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, - 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, - 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, - 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, - 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, - 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, - 402, 309, 234, 327, 0, 0, 0, 0, 0, 0, - 0, 0, 237, 0, 1119, 0, 0, 0, 285, 0, - 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, - 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, - 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, - 184, 0, 1118, 0, 0, 0, 0, 0, 0, 212, - 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, - 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, - 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, - 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, - 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, - 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, - 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, - 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, - 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, - 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, - 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, - 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, - 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, - 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, - 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, - 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, - 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, - 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, - 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, - 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, - 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, - 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, - 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, - 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, - 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, - 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, - 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, - 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, - 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, - 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, - 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, - 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, - 0, 0, 596, 182, 183, 184, 0, 0, 0, 0, - 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, - 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, - 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, - 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, - 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, - 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, - 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, - 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, - 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, - 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, - 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, - 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, - 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, - 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, - 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, - 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, - 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, - 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, - 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, - 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, - 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, - 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, - 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, - 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, - 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, - 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, - 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, - 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, - 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, - 402, 309, 234, 327, 0, 0, 0, 0, 0, 0, - 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, - 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, - 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 221, 190, 324, 389, 251, 71, 0, 0, 182, 183, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, - 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, - 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, - 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, - 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, - 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, - 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, - 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, - 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, - 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, - 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, - 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, - 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, - 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, - 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, - 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, - 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, - 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, - 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, - 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, - 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, - 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, - 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, - 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, - 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, - 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, - 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, - 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, - 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, - 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, - 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, - 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, - 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, - 0, 0, 0, 182, 183, 184, 0, 1463, 0, 0, - 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, - 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, - 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, - 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, - 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, - 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, - 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, - 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, - 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, - 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, - 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, - 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, - 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, - 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, - 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, - 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, - 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, - 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, - 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, - 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, - 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, - 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, - 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, - 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, - 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, - 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, - 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, - 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, - 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, - 402, 309, 234, 327, 0, 0, 0, 0, 0, 0, - 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, - 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, - 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, - 184, 0, 1088, 0, 0, 0, 0, 0, 0, 212, - 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, - 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, - 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, - 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, - 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, - 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, - 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, - 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, - 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, - 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, - 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, - 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, - 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, - 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, - 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, - 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, - 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, - 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, - 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, - 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, - 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, - 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, - 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, - 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, - 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, - 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, - 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, - 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, - 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, - 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, - 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, - 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, - 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, - 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, - 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, - 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, - 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, - 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, - 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, - 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, - 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, - 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, - 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, - 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, - 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, - 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, - 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, - 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, - 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, - 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, - 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, - 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 185, 198, 287, 1366, 356, 252, 448, - 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, - 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, - 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, - 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, - 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, - 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, - 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, - 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, - 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, - 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, - 402, 309, 234, 327, 0, 1243, 0, 0, 0, 0, - 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, - 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, - 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, - 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, - 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, - 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, - 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, - 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, - 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, - 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, - 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, - 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, - 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, - 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, - 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, - 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, - 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, - 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, - 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, - 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, - 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, - 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, - 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, - 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, - 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, - 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, - 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, - 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, - 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, - 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, - 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, - 1241, 0, 0, 0, 0, 0, 0, 237, 0, 0, - 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, - 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, - 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, - 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, - 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, - 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, - 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, - 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, - 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, - 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, - 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, - 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, - 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, - 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, - 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, - 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, - 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, - 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, - 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, - 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, - 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, - 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, - 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, - 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, - 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, - 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, - 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, - 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, - 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, - 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, - 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, - 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, - 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, - 402, 309, 234, 327, 0, 1239, 0, 0, 0, 0, - 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, - 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, - 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, - 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, - 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, - 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, - 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, - 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, - 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, - 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, - 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, - 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, - 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, - 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, - 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, - 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, - 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, - 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, - 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, - 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, - 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, - 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, - 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, - 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, - 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, - 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, - 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, - 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, - 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, - 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, - 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, - 1237, 0, 0, 0, 0, 0, 0, 237, 0, 0, - 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, - 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, - 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, - 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, - 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, - 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, - 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, - 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, - 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, - 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, - 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, - 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, - 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, - 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, - 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, - 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, - 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, - 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, - 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, - 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, - 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, - 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, - 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, - 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, - 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, - 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, - 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, - 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, - 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, - 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, - 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, - 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, - 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, - 402, 309, 234, 327, 0, 1235, 0, 0, 0, 0, - 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, - 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, - 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, - 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, - 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, - 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, - 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, - 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, - 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, - 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, - 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, - 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, - 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, - 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, - 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, - 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, - 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, - 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, - 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, - 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, - 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, - 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, - 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, - 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, - 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, - 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, - 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, - 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, - 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, - 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, - 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, - 1231, 0, 0, 0, 0, 0, 0, 237, 0, 0, - 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, - 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, - 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, - 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, - 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, - 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, - 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, - 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, - 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, - 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, - 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, - 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, - 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, - 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, - 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, - 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, - 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, - 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, - 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, - 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, - 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, - 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, - 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, - 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, - 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, - 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, - 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, - 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, - 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, - 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, - 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, - 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, - 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, - 402, 309, 234, 327, 0, 1229, 0, 0, 0, 0, - 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, - 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, - 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 221, 190, 324, 389, 251, 0, 0, 0, 182, 183, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, - 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, - 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, - 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, - 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, - 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, - 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, - 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, - 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, - 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, - 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, - 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, - 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, - 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, - 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, - 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, - 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, - 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, - 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, - 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, - 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, - 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, - 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, - 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, - 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, - 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, - 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, - 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, - 215, 378, 398, 399, 400, 402, 309, 234, 327, 0, - 1227, 0, 0, 0, 0, 0, 0, 237, 0, 0, - 0, 0, 0, 285, 0, 0, 0, 341, 0, 379, - 223, 294, 292, 407, 247, 240, 236, 222, 269, 300, - 339, 397, 333, 0, 289, 0, 0, 388, 312, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 275, 221, 190, 324, 389, 251, - 0, 0, 0, 182, 183, 184, 0, 0, 0, 0, - 0, 0, 0, 0, 212, 0, 219, 0, 0, 0, - 0, 233, 273, 239, 232, 404, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, - 313, 0, 0, 0, 0, 435, 0, 0, 0, 0, - 0, 0, 0, 0, 284, 0, 281, 186, 201, 0, - 0, 323, 362, 368, 0, 0, 0, 224, 0, 366, - 337, 421, 208, 249, 359, 342, 364, 0, 0, 365, - 290, 409, 354, 419, 436, 437, 231, 317, 427, 401, - 433, 447, 202, 228, 331, 394, 424, 385, 310, 405, - 406, 280, 384, 257, 189, 288, 444, 200, 374, 216, - 193, 396, 417, 213, 377, 0, 0, 0, 195, 415, - 393, 307, 277, 278, 194, 0, 358, 235, 255, 226, - 326, 412, 413, 225, 449, 204, 432, 197, 0, 431, - 319, 408, 416, 308, 299, 196, 414, 306, 298, 283, - 245, 265, 352, 293, 353, 266, 315, 314, 316, 0, - 191, 0, 390, 425, 450, 210, 0, 0, 403, 441, - 446, 0, 355, 211, 256, 244, 351, 254, 286, 440, - 442, 443, 445, 209, 349, 262, 330, 420, 248, 428, - 318, 205, 268, 386, 282, 291, 0, 0, 336, 367, - 214, 423, 387, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 185, 198, 287, 0, 356, 252, 448, - 430, 426, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 187, 188, 199, - 207, 217, 229, 242, 250, 260, 264, 267, 270, 271, - 274, 279, 296, 301, 302, 303, 304, 320, 321, 322, - 325, 328, 329, 332, 334, 335, 338, 344, 345, 346, - 347, 348, 350, 357, 361, 369, 370, 371, 372, 373, - 375, 376, 380, 381, 382, 383, 391, 395, 410, 411, - 422, 434, 438, 261, 418, 439, 0, 295, 0, 0, - 297, 246, 263, 272, 0, 429, 392, 203, 363, 253, - 192, 220, 206, 227, 241, 243, 276, 305, 311, 340, - 343, 258, 238, 218, 360, 215, 378, 398, 399, 400, - 402, 309, 234, 327, 0, 0, 0, 0, 0, 0, - 0, 0, 237, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 341, 0, 379, 223, 294, 292, 407, 247, - 240, 236, 222, 269, 300, 339, 397, 333, 0, 289, - 0, 0, 388, 312, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 221, 190, 324, 389, 251, 1202, 0, 0, 182, 183, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 212, - 0, 219, 0, 0, 0, 0, 233, 273, 239, 232, - 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 259, 0, 313, 0, 0, 0, 0, - 435, 0, 0, 0, 0, 0, 0, 0, 0, 284, - 0, 281, 186, 201, 0, 0, 323, 362, 368, 0, - 0, 0, 224, 0, 366, 337, 421, 208, 249, 359, - 342, 364, 0, 0, 365, 290, 409, 354, 419, 436, - 437, 231, 317, 427, 401, 433, 447, 202, 228, 331, - 394, 424, 385, 310, 405, 406, 280, 384, 257, 189, - 288, 444, 200, 374, 216, 193, 396, 417, 213, 377, - 0, 0, 0, 195, 415, 393, 307, 277, 278, 194, - 0, 358, 235, 255, 226, 326, 412, 413, 225, 449, - 204, 432, 197, 0, 431, 319, 408, 416, 308, 299, - 196, 414, 306, 298, 283, 245, 265, 352, 293, 353, - 266, 315, 314, 316, 0, 191, 0, 390, 425, 450, - 210, 0, 0, 403, 441, 446, 0, 355, 211, 256, - 244, 351, 254, 286, 440, 442, 443, 445, 209, 349, - 262, 330, 420, 248, 428, 318, 205, 268, 386, 282, - 291, 0, 0, 336, 367, 214, 423, 387, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 198, - 287, 0, 356, 252, 448, 430, 426, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 187, 188, 199, 207, 217, 229, 242, 250, - 260, 264, 267, 270, 271, 274, 279, 296, 301, 302, - 303, 304, 320, 321, 322, 325, 328, 329, 332, 334, - 335, 338, 344, 345, 346, 347, 348, 350, 357, 361, - 369, 370, 371, 372, 373, 375, 376, 380, 381, 382, - 383, 391, 395, 410, 411, 422, 434, 438, 261, 418, - 439, 0, 295, 0, 0, 297, 246, 263, 272, 0, - 429, 392, 203, 363, 253, 192, 220, 206, 227, 241, - 243, 276, 305, 311, 340, 343, 258, 238, 218, 360, - 215, 378, 398, 399, 400, 402, 309, 234, 1101, 0, - 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, - 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, - 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, - 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, - 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, - 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, - 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, - 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, - 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, - 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, - 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, - 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, - 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, - 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, - 225, 449, 204, 432, 197, 0, 431, 319, 408, 416, - 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, - 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, - 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, - 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, - 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, - 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, - 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, - 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, - 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, - 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, - 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, - 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, - 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, - 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, - 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 327, 0, 0, 0, 0, 0, 0, 0, 1092, 237, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, - 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, - 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, - 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, - 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, - 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, - 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, - 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, - 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, - 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, - 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, - 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, - 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, - 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, - 0, 431, 319, 408, 416, 308, 299, 196, 414, 306, - 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, - 316, 0, 191, 0, 390, 425, 450, 210, 0, 0, - 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, - 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, - 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, - 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 198, 287, 0, 356, - 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, - 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, - 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, - 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, - 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, - 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, - 410, 411, 422, 434, 438, 261, 418, 439, 0, 295, - 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, - 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, - 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, - 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, - 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, - 182, 183, 184, 0, 948, 0, 0, 0, 0, 0, - 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, - 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, - 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, - 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, - 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, - 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, - 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, - 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, - 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, - 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, - 225, 449, 204, 432, 197, 0, 431, 319, 408, 416, - 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, - 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, - 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, - 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, - 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, - 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, - 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, - 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, - 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, - 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, - 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, - 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, - 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, - 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, - 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, - 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, - 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, - 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, - 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, - 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, - 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, - 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, - 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, - 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, - 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, - 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, - 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, - 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, - 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, - 0, 431, 319, 408, 416, 308, 299, 196, 414, 306, - 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, - 316, 0, 191, 0, 390, 425, 450, 210, 0, 0, - 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, - 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, - 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, - 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 198, 287, 0, 356, - 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, - 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, - 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, - 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, - 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, - 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, - 410, 411, 422, 434, 438, 506, 418, 439, 0, 295, - 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, - 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, - 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 341, 0, 379, 223, 294, 292, - 407, 247, 240, 236, 222, 269, 300, 339, 397, 333, - 0, 289, 0, 0, 388, 312, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 221, 190, 324, 389, 251, 0, 0, 0, - 182, 183, 184, 0, 0, 0, 0, 0, 0, 0, - 0, 212, 0, 219, 0, 0, 0, 0, 233, 273, - 239, 232, 404, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 259, 0, 313, 0, 0, - 456, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 284, 0, 281, 186, 201, 0, 0, 323, 362, - 368, 0, 0, 0, 224, 0, 366, 337, 421, 208, - 249, 359, 342, 364, 0, 0, 365, 290, 409, 354, - 419, 436, 437, 231, 317, 427, 401, 433, 447, 202, - 228, 331, 394, 424, 385, 310, 405, 406, 280, 384, - 257, 189, 288, 444, 200, 374, 216, 193, 396, 417, - 213, 377, 0, 0, 0, 195, 415, 393, 307, 277, - 278, 194, 0, 358, 235, 255, 226, 326, 412, 413, - 225, 449, 204, 432, 197, 0, 431, 319, 408, 416, - 308, 299, 196, 414, 306, 298, 283, 245, 265, 352, - 293, 353, 266, 315, 314, 316, 0, 191, 0, 390, - 425, 450, 210, 0, 0, 403, 441, 446, 0, 355, - 211, 256, 244, 351, 254, 286, 440, 442, 443, 445, - 209, 349, 262, 330, 420, 248, 428, 318, 205, 268, - 386, 282, 291, 0, 0, 336, 367, 214, 423, 387, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 198, 287, 0, 356, 252, 448, 430, 426, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 188, 199, 207, 217, 229, - 242, 250, 260, 264, 267, 270, 271, 274, 279, 296, - 301, 302, 303, 304, 320, 321, 322, 325, 328, 329, - 332, 334, 335, 338, 344, 345, 346, 347, 348, 350, - 357, 361, 369, 370, 371, 372, 373, 375, 376, 380, - 381, 382, 383, 391, 395, 410, 411, 422, 434, 438, - 261, 418, 439, 0, 295, 0, 0, 297, 246, 263, - 272, 0, 429, 392, 203, 363, 253, 192, 220, 206, - 227, 241, 243, 276, 305, 311, 340, 343, 258, 238, - 218, 360, 215, 378, 398, 399, 400, 402, 309, 234, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 341, - 0, 379, 223, 294, 292, 407, 247, 240, 236, 222, - 269, 300, 339, 397, 333, 0, 289, 0, 0, 388, - 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 275, 221, 190, 324, - 389, 251, 0, 0, 0, 182, 183, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 0, 219, 0, - 0, 0, 0, 233, 273, 239, 232, 404, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 259, 0, 313, 0, 0, 0, 0, 435, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 281, 186, - 201, 0, 0, 323, 362, 368, 0, 0, 0, 224, - 0, 366, 337, 421, 208, 249, 359, 342, 364, 0, - 0, 365, 290, 409, 354, 419, 436, 437, 231, 317, - 427, 401, 433, 447, 202, 228, 331, 394, 424, 385, - 310, 405, 406, 280, 384, 257, 189, 288, 444, 200, - 374, 216, 193, 396, 417, 213, 377, 0, 0, 0, - 195, 415, 393, 307, 277, 278, 194, 0, 358, 235, - 255, 226, 326, 412, 413, 225, 449, 204, 432, 197, - 0, 431, 319, 408, 416, 308, 299, 196, 414, 306, - 298, 283, 245, 265, 352, 293, 353, 266, 315, 314, - 316, 0, 191, 0, 390, 425, 450, 210, 0, 0, - 403, 441, 446, 0, 355, 211, 256, 244, 351, 254, - 286, 440, 442, 443, 445, 209, 349, 262, 330, 420, - 248, 428, 318, 205, 268, 386, 282, 291, 0, 0, - 336, 367, 214, 423, 387, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 198, 287, 0, 356, - 252, 448, 430, 426, 0, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, - 188, 199, 207, 217, 229, 242, 250, 260, 264, 267, - 270, 271, 274, 279, 296, 301, 302, 303, 304, 320, - 321, 322, 325, 328, 329, 332, 334, 335, 338, 344, - 345, 346, 347, 348, 350, 357, 361, 369, 370, 371, - 372, 373, 375, 376, 380, 381, 382, 383, 391, 395, - 410, 411, 422, 434, 438, 261, 418, 439, 0, 295, - 0, 0, 297, 246, 263, 272, 0, 429, 392, 203, - 363, 253, 192, 220, 206, 227, 241, 243, 276, 305, - 311, 340, 343, 258, 238, 218, 360, 215, 378, 398, - 399, 400, 402, 309, 234, + 561, 2245, 2232, 2078, 2180, 1985, 2154, 2193, 2103, 1804, + 2131, 1687, 83, 3, 1720, 2075, 1569, 1428, 1001, 2206, + 1908, 1501, 1909, 519, 1721, 1905, 1534, 1048, 1414, 1784, + 502, 533, 1554, 1055, 1847, 1808, 1785, 1519, 1786, 1707, + 504, 1539, 1920, 1480, 137, 1867, 751, 123, 872, 165, + 1385, 1647, 165, 919, 467, 165, 1567, 899, 574, 1553, + 483, 1291, 165, 1377, 1082, 1778, 1092, 81, 1600, 1201, + 165, 1183, 1085, 1541, 1462, 779, 1058, 1469, 583, 1053, + 608, 1075, 1430, 814, 495, 1411, 506, 1078, 1040, 568, + 1388, 937, 483, 1354, 758, 483, 165, 483, 1076, 1551, + 1288, 1190, 755, 1274, 33, 785, 780, 1530, 1445, 781, + 759, 1091, 577, 1485, 1089, 1065, 79, 1296, 782, 140, + 106, 100, 1175, 1157, 101, 490, 857, 1014, 1152, 8, + 7, 6, 1827, 1826, 1017, 792, 107, 78, 1598, 1260, + 917, 1855, 1856, 1343, 2105, 605, 1342, 938, 1341, 1425, + 1426, 167, 168, 169, 1340, 1339, 1338, 493, 2220, 494, + 1685, 1331, 762, 590, 594, 102, 767, 534, 34, 108, + 752, 2150, 2054, 819, 2127, 2126, 818, 2073, 817, 1954, + 2074, 80, 2251, 546, 569, 552, 553, 550, 551, 491, + 549, 548, 547, 2203, 2244, 2175, 2236, 167, 168, 169, + 554, 555, 34, 2079, 938, 1637, 602, 1586, 2202, 816, + 2174, 1884, 2018, 948, 84, 1520, 1166, 1686, 860, 102, + 1934, 773, 830, 831, 772, 834, 835, 836, 837, 795, + 1854, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 796, 570, 820, 821, + 822, 86, 87, 88, 89, 90, 91, 459, 1546, 97, + 1935, 1936, 162, 1635, 1834, 437, 458, 1486, 1833, 442, + 948, 1427, 827, 1496, 1497, 1751, 1495, 456, 1750, 1544, + 1093, 1752, 1094, 102, 892, 35, 833, 885, 72, 39, + 40, 471, 936, 915, 161, 768, 167, 168, 169, 891, + 771, 565, 866, 867, 771, 855, 775, 609, 944, 877, + 879, 880, 564, 878, 879, 880, 453, 1513, 774, 103, + 1768, 1987, 2009, 2007, 2177, 465, 1332, 1333, 1334, 856, + 145, 2140, 963, 962, 972, 973, 965, 966, 967, 968, + 969, 970, 971, 964, 470, 481, 974, 1330, 485, 1280, + 479, 771, 1250, 763, 567, 1809, 832, 769, 766, 1543, + 71, 765, 764, 1568, 1601, 944, 2243, 1830, 859, 1981, + 1606, 1755, 471, 1611, 1609, 1610, 914, 1982, 893, 1275, + 912, 886, 898, 2221, 142, 1613, 143, 1614, 862, 1615, + 1842, 906, 1605, 908, 1251, 160, 1252, 1988, 1616, 443, + 445, 446, 471, 462, 464, 472, 896, 897, 769, 460, + 461, 473, 447, 448, 477, 476, 463, 839, 452, 449, + 451, 457, 471, 838, 1607, 470, 455, 474, 894, 895, + 905, 907, 858, 1604, 1989, 1603, 2123, 165, 2068, 165, + 1570, 803, 165, 1463, 943, 940, 941, 942, 947, 949, + 946, 801, 945, 1953, 146, 470, 812, 811, 810, 939, + 910, 809, 770, 808, 151, 807, 770, 806, 483, 483, + 483, 471, 805, 800, 776, 470, 1169, 813, 2069, 1486, + 1846, 2252, 2234, 756, 756, 2173, 483, 483, 788, 1281, + 794, 787, 875, 1289, 881, 882, 883, 884, 2249, 1552, + 930, 943, 940, 941, 942, 947, 949, 946, 911, 945, + 1832, 1189, 1188, 770, 756, 916, 939, 1868, 754, 1688, + 1690, 913, 829, 2194, 470, 596, 1843, 889, 794, 1592, + 1285, 1545, 1636, 904, 804, 924, 903, 909, 2178, 823, + 1961, 1829, 1893, 1892, 802, 1891, 1164, 1163, 794, 1162, + 2141, 475, 902, 1819, 1286, 1160, 441, 436, 1666, 1841, + 2161, 1870, 1840, 986, 987, 165, 99, 1588, 1279, 468, + 138, 1262, 1261, 1263, 1264, 1265, 1849, 1849, 2038, 1933, + 1712, 1848, 1848, 1046, 469, 1655, 1578, 1491, 984, 876, + 1069, 999, 1663, 483, 870, 1502, 165, 974, 165, 165, + 865, 483, 1045, 964, 868, 1747, 974, 483, 1441, 921, + 922, 953, 951, 73, 94, 951, 1689, 933, 931, 932, + 874, 1765, 1760, 1872, 794, 1876, 793, 1871, 954, 1869, + 794, 954, 797, 787, 1874, 918, 918, 918, 900, 1002, + 1326, 1074, 798, 1873, 794, 1297, 2247, 954, 1276, 2248, + 1277, 2246, 1041, 1278, 605, 34, 1875, 1877, 888, 95, + 799, 2169, 1059, 815, 793, 1761, 828, 1918, 983, 985, + 890, 1057, 1602, 1282, 1016, 1019, 1021, 1023, 1024, 1026, + 1028, 1029, 1020, 1022, 793, 1025, 1027, 1763, 1030, 1038, + 1758, 1587, 167, 168, 169, 1095, 1379, 986, 987, 998, + 934, 1886, 1759, 1003, 1004, 1005, 1006, 1007, 1008, 1009, + 1010, 1783, 1013, 1015, 1018, 1018, 1018, 1015, 1018, 1018, + 1015, 1018, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1797, + 861, 986, 987, 873, 1043, 952, 953, 951, 34, 1412, + 139, 144, 141, 147, 148, 149, 150, 152, 153, 154, + 155, 165, 1380, 954, 901, 1153, 156, 157, 158, 159, + 793, 1298, 1766, 1764, 1161, 1080, 793, 787, 790, 791, + 1585, 756, 797, 787, 1580, 784, 788, 167, 168, 169, + 793, 1773, 798, 483, 1583, 1185, 1047, 787, 790, 791, + 1412, 756, 1673, 1194, 783, 784, 788, 1198, 1584, 1938, + 483, 483, 803, 483, 801, 483, 483, 1580, 483, 483, + 483, 483, 483, 483, 2237, 1062, 609, 967, 968, 969, + 970, 971, 964, 483, 2053, 974, 1174, 165, 1234, 1181, + 1269, 1582, 1349, 1351, 1352, 2226, 1195, 1774, 1090, 952, + 953, 951, 2238, 1247, 1350, 965, 966, 967, 968, 969, + 970, 971, 964, 2253, 483, 974, 165, 954, 1167, 1168, + 1267, 1229, 1230, 2227, 1193, 71, 2052, 1287, 1959, 1231, + 1203, 165, 1204, 1762, 1206, 1208, 1361, 1357, 1212, 1214, + 1216, 1218, 1220, 1640, 1641, 1642, 1782, 165, 1159, 1268, + 1359, 1360, 1358, 1192, 165, 1781, 1446, 1447, 1172, 1895, + 1171, 165, 165, 165, 165, 165, 165, 165, 165, 165, + 483, 483, 483, 1184, 1170, 1549, 1237, 1238, 1270, 1266, + 1255, 2254, 1243, 1244, 1254, 1661, 1191, 1191, 1257, 1253, + 600, 1245, 1443, 1660, 1301, 1299, 1300, 165, 1239, 1236, + 1662, 1305, 1235, 1307, 1308, 1309, 1310, 1896, 1312, 1304, + 595, 1293, 1210, 167, 168, 169, 1311, 1754, 952, 953, + 951, 2230, 1327, 963, 962, 972, 973, 965, 966, 967, + 968, 969, 970, 971, 964, 1378, 954, 974, 952, 953, + 951, 102, 1165, 773, 1381, 2229, 772, 1256, 2228, 1355, + 167, 168, 169, 2214, 1562, 1442, 954, 2212, 483, 2094, + 2050, 1337, 167, 168, 169, 1303, 962, 972, 973, 965, + 966, 967, 968, 969, 970, 971, 964, 1382, 1383, 974, + 952, 953, 951, 1648, 952, 953, 951, 2026, 1941, 1393, + 1394, 1897, 483, 483, 1791, 1779, 1395, 1631, 954, 1232, + 597, 598, 954, 165, 1356, 1596, 1595, 1294, 1400, 1403, + 1322, 1323, 1324, 1389, 1413, 1258, 1246, 483, 952, 953, + 951, 1390, 1435, 1242, 165, 1241, 1888, 483, 167, 168, + 169, 165, 1560, 165, 1240, 1437, 954, 918, 918, 918, + 1391, 165, 165, 1290, 1044, 1419, 1420, 1984, 483, 80, + 1002, 483, 578, 1481, 1396, 1397, 1968, 2218, 1402, 1405, + 1406, 2121, 483, 1917, 1436, 1968, 2200, 522, 521, 524, + 525, 526, 527, 2120, 1448, 2077, 523, 1392, 528, 1968, + 2167, 1968, 2162, 1389, 1418, 1968, 578, 1421, 1422, 2071, + 578, 1460, 167, 168, 169, 1811, 1248, 1708, 1456, 1580, + 578, 605, 2036, 578, 605, 1505, 1484, 1906, 1506, 1794, + 1391, 1968, 1973, 1521, 1522, 1523, 1917, 483, 1951, 1950, + 1947, 1948, 82, 1555, 1556, 1557, 578, 578, 1559, 1561, + 1947, 1946, 1454, 578, 1486, 1828, 1708, 1509, 1536, 1156, + 1813, 483, 1458, 1806, 1807, 1466, 578, 483, 1542, 950, + 578, 1194, 2055, 1194, 1156, 1155, 1510, 1489, 1487, 35, + 1493, 1579, 1492, 1101, 1100, 2033, 1466, 1465, 1508, 1487, + 2168, 1507, 963, 962, 972, 973, 965, 966, 967, 968, + 969, 970, 971, 964, 1715, 1455, 974, 1566, 1454, 950, + 35, 483, 1514, 1378, 1515, 1516, 1517, 1518, 1378, 1378, + 2056, 2057, 2058, 35, 1581, 1917, 1741, 1716, 1482, 1968, + 1526, 1527, 1528, 1529, 1486, 1537, 1532, 1533, 1466, 1225, + 1488, 1949, 1576, 1550, 1577, 1558, 1548, 1547, 1490, 1466, + 1494, 1488, 1678, 165, 71, 571, 1677, 1589, 2110, 1486, + 165, 1572, 1454, 1580, 562, 165, 165, 1537, 1590, 165, + 1571, 1575, 1563, 1444, 1423, 1454, 1591, 165, 795, 1580, + 1335, 1593, 1594, 609, 165, 71, 609, 1226, 1227, 1228, + 1471, 1474, 1475, 1476, 1472, 796, 1473, 1477, 71, 2165, + 1921, 1922, 1284, 1087, 778, 1191, 777, 71, 2059, 165, + 483, 2133, 2076, 166, 2044, 1158, 166, 1599, 1535, 166, + 1983, 1573, 1531, 1525, 484, 2021, 166, 1524, 1626, 1627, + 71, 1272, 1186, 1629, 166, 1182, 1154, 96, 1788, 1787, + 1630, 860, 1222, 1921, 1922, 1471, 1474, 1475, 1476, 1472, + 592, 1473, 1477, 2060, 2061, 1986, 484, 2134, 1546, 484, + 166, 484, 2240, 2233, 1966, 1965, 1964, 1619, 1924, 1906, + 1355, 1624, 963, 962, 972, 973, 965, 966, 967, 968, + 969, 970, 971, 964, 1788, 1927, 974, 1223, 1224, 1798, + 1650, 1620, 1328, 1732, 1651, 1730, 1926, 1729, 1733, 1734, + 1731, 1475, 1476, 1728, 165, 1658, 1659, 1634, 2223, 2201, + 1898, 1665, 165, 1697, 1668, 1669, 496, 1056, 2037, 1971, + 1706, 1705, 1675, 2225, 1676, 1356, 2205, 1679, 1680, 1681, + 1682, 1683, 1643, 2182, 1657, 2207, 165, 2155, 2157, 2152, + 2185, 2181, 1283, 1693, 1694, 1695, 2158, 165, 165, 165, + 165, 165, 563, 1696, 1792, 1717, 1701, 1652, 1653, 165, + 825, 824, 1656, 165, 1996, 1408, 165, 165, 1787, 1853, + 165, 165, 165, 1049, 1821, 1739, 1672, 569, 1670, 1710, + 1409, 1713, 923, 1753, 1820, 1050, 1722, 103, 2108, 1737, + 1738, 1041, 1684, 1943, 1692, 1942, 1574, 1200, 1199, 1187, + 2031, 1772, 1446, 1447, 1700, 1439, 1962, 1623, 2163, 1742, + 2128, 1709, 1479, 1744, 1704, 1711, 572, 573, 1612, 1639, + 2213, 1771, 1703, 1775, 1776, 1777, 575, 483, 1723, 1756, + 2211, 1726, 165, 1769, 1770, 1735, 2210, 1654, 1740, 165, + 570, 1748, 2186, 1745, 2184, 483, 1724, 1725, 2030, 1727, + 1967, 483, 1293, 1542, 483, 1564, 1194, 576, 82, 2029, + 1901, 483, 1757, 1814, 1708, 2242, 2241, 571, 1667, 1664, + 1070, 1780, 1063, 1825, 2242, 2159, 1940, 1691, 1440, 80, + 85, 77, 1, 454, 165, 165, 165, 165, 165, 1810, + 1424, 1174, 1039, 1824, 1789, 1799, 1800, 1801, 2020, 1795, + 165, 165, 466, 1080, 2231, 165, 1823, 1790, 1259, 1249, + 1718, 1719, 1816, 2080, 1080, 1080, 1080, 1080, 1080, 2130, + 1390, 1974, 1540, 786, 128, 1503, 1822, 1815, 588, 584, + 1482, 1504, 2196, 1080, 93, 749, 483, 1080, 92, 1391, + 789, 887, 1378, 1565, 585, 963, 962, 972, 973, 965, + 966, 967, 968, 969, 970, 971, 964, 2072, 1767, 974, + 1512, 1861, 1862, 1851, 1844, 1866, 1852, 1060, 1061, 587, + 1865, 586, 483, 1107, 1105, 1106, 1857, 1104, 1109, 2015, + 1108, 1103, 1329, 165, 1885, 1863, 480, 1478, 1879, 1864, + 163, 1096, 1064, 483, 826, 444, 1952, 1325, 1597, 483, + 483, 166, 450, 166, 982, 1878, 166, 1702, 1749, 606, + 1907, 972, 973, 965, 966, 967, 968, 969, 970, 971, + 964, 599, 165, 974, 1912, 2179, 2151, 1913, 1910, 1818, + 2153, 2104, 484, 484, 484, 2156, 1722, 2149, 2224, 2204, + 1916, 1894, 588, 584, 1511, 1438, 1864, 1052, 1928, 1925, + 484, 484, 1904, 2028, 1900, 1671, 1011, 1410, 585, 1079, + 1929, 505, 1931, 1434, 1932, 1930, 1348, 520, 517, 1915, + 518, 1944, 1945, 1960, 1449, 1714, 956, 503, 497, 165, + 1937, 581, 582, 587, 1071, 586, 1470, 483, 963, 962, + 972, 973, 965, 966, 967, 968, 969, 970, 971, 964, + 165, 1468, 974, 1956, 1955, 1467, 1621, 1083, 1923, 1919, + 165, 1077, 1453, 1831, 1980, 1975, 935, 580, 492, 761, + 1407, 2139, 1638, 2017, 165, 579, 1542, 165, 61, 166, + 1970, 38, 1977, 1969, 487, 1972, 2219, 1997, 1978, 926, + 589, 32, 31, 30, 29, 28, 23, 22, 21, 955, + 20, 1957, 1958, 19, 25, 1992, 18, 484, 17, 1991, + 166, 16, 166, 166, 1911, 484, 34, 98, 48, 45, + 43, 484, 1999, 105, 104, 46, 2001, 2014, 42, 2005, + 1994, 1995, 863, 27, 26, 496, 15, 2010, 2011, 1080, + 14, 13, 12, 11, 1012, 10, 9, 5, 4, 929, + 24, 1000, 2, 2025, 2000, 0, 0, 0, 0, 0, + 0, 0, 0, 2032, 2027, 0, 0, 0, 0, 0, + 2034, 2035, 2041, 0, 2039, 0, 1051, 1054, 0, 0, + 2040, 0, 0, 0, 0, 0, 0, 0, 1722, 0, + 0, 0, 165, 2046, 2048, 165, 165, 165, 483, 483, + 2047, 0, 0, 0, 0, 0, 0, 2066, 0, 0, + 0, 0, 0, 0, 2049, 0, 2051, 2081, 483, 483, + 483, 0, 2002, 2003, 0, 2004, 0, 0, 2006, 0, + 2008, 0, 0, 2070, 2087, 0, 963, 962, 972, 973, + 965, 966, 967, 968, 969, 970, 971, 964, 0, 0, + 974, 0, 0, 483, 483, 483, 165, 0, 2085, 0, + 0, 0, 2097, 2099, 2100, 166, 0, 483, 0, 483, + 0, 2086, 0, 2101, 0, 483, 0, 0, 2111, 2107, + 0, 2098, 2016, 0, 2116, 0, 2109, 0, 2113, 2022, + 2023, 2024, 0, 0, 2102, 1910, 0, 484, 0, 1910, + 165, 2118, 0, 2119, 0, 0, 2093, 483, 2122, 0, + 483, 0, 0, 0, 484, 484, 2129, 484, 2125, 484, + 484, 0, 484, 484, 484, 484, 484, 484, 0, 2115, + 0, 0, 0, 0, 0, 2117, 0, 484, 0, 0, + 0, 166, 0, 2148, 0, 0, 0, 2135, 2136, 2137, + 2138, 0, 2142, 0, 2143, 2144, 2145, 0, 2146, 2147, + 0, 2160, 0, 2132, 483, 165, 0, 0, 484, 0, + 166, 2166, 1910, 2170, 0, 0, 0, 0, 0, 0, + 0, 2013, 0, 0, 0, 166, 0, 0, 2176, 0, + 2183, 0, 483, 532, 0, 0, 483, 0, 2172, 483, + 483, 166, 0, 0, 2187, 2192, 2189, 499, 166, 2195, + 0, 0, 0, 0, 2209, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 484, 484, 484, 2215, 2208, 0, + 1722, 1911, 0, 34, 0, 1911, 2222, 0, 0, 0, + 161, 0, 164, 0, 0, 440, 0, 0, 478, 2216, + 2217, 166, 2132, 2197, 0, 440, 2235, 0, 0, 0, + 0, 0, 0, 440, 2239, 103, 0, 0, 0, 0, + 0, 0, 0, 0, 2250, 1295, 145, 0, 0, 0, + 593, 593, 0, 0, 0, 0, 0, 0, 0, 440, + 963, 962, 972, 973, 965, 966, 967, 968, 969, 970, + 971, 964, 0, 0, 974, 0, 0, 0, 1911, 0, + 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, + 0, 2164, 0, 0, 0, 0, 34, 0, 0, 0, + 142, 0, 143, 0, 0, 0, 0, 0, 0, 0, + 0, 160, 0, 0, 0, 0, 484, 484, 0, 0, + 0, 1344, 1345, 1346, 1347, 0, 0, 166, 0, 0, + 0, 34, 0, 0, 0, 0, 2012, 0, 0, 0, + 0, 484, 0, 0, 0, 0, 0, 0, 166, 0, + 0, 484, 0, 0, 0, 166, 0, 166, 0, 0, + 0, 0, 0, 0, 0, 166, 166, 0, 0, 0, + 146, 0, 484, 0, 0, 484, 1398, 1399, 0, 0, + 151, 0, 0, 0, 0, 0, 484, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, + 37, 72, 39, 40, 0, 0, 0, 531, 0, 0, + 0, 0, 0, 0, 496, 0, 0, 0, 76, 0, + 0, 0, 0, 41, 67, 68, 0, 65, 69, 0, + 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, + 0, 484, 0, 0, 1042, 963, 962, 972, 973, 965, + 966, 967, 968, 969, 970, 971, 964, 0, 0, 974, + 0, 0, 0, 54, 0, 484, 1500, 482, 0, 0, + 0, 484, 0, 71, 963, 962, 972, 973, 965, 966, + 967, 968, 969, 970, 971, 964, 138, 0, 974, 0, + 0, 0, 0, 0, 0, 0, 439, 0, 0, 607, + 0, 0, 753, 0, 760, 0, 486, 1858, 0, 0, + 0, 0, 0, 0, 566, 484, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1538, 0, 963, 962, 972, + 973, 965, 966, 967, 968, 969, 970, 971, 964, 0, + 757, 974, 0, 0, 0, 44, 47, 50, 49, 52, + 0, 64, 0, 0, 70, 0, 0, 166, 0, 0, + 0, 0, 0, 0, 166, 0, 0, 0, 0, 166, + 166, 0, 0, 166, 0, 0, 0, 53, 75, 74, + 0, 166, 62, 63, 51, 0, 0, 0, 166, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 440, 0, 440, 0, 0, 440, 0, 0, 0, 0, + 1649, 0, 0, 166, 484, 0, 0, 0, 0, 0, + 0, 0, 0, 55, 56, 0, 57, 58, 59, 60, + 963, 962, 972, 973, 965, 966, 967, 968, 969, 970, + 971, 964, 0, 0, 974, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 139, 144, 141, 147, + 148, 149, 150, 152, 153, 154, 155, 0, 0, 0, + 0, 0, 156, 157, 158, 159, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 988, 989, 990, 991, 992, + 993, 994, 995, 996, 997, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, + 1124, 0, 0, 0, 0, 0, 166, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 73, 0, 440, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 166, 0, 0, 0, 593, 0, 0, 0, 0, 0, + 0, 166, 166, 166, 166, 166, 0, 0, 0, 440, + 0, 440, 1086, 166, 0, 0, 0, 166, 0, 0, + 166, 166, 0, 0, 166, 166, 166, 958, 0, 961, + 0, 0, 0, 1674, 0, 975, 976, 977, 978, 979, + 980, 981, 0, 959, 960, 957, 963, 962, 972, 973, + 965, 966, 967, 968, 969, 970, 971, 964, 0, 0, + 974, 0, 0, 1698, 1699, 1054, 0, 0, 0, 0, + 0, 0, 0, 1112, 0, 0, 0, 0, 0, 0, + 0, 484, 0, 0, 0, 0, 166, 0, 0, 0, + 0, 0, 0, 166, 0, 0, 0, 0, 0, 484, + 0, 0, 0, 0, 0, 484, 0, 0, 484, 0, + 0, 0, 0, 0, 0, 484, 0, 1125, 0, 0, + 0, 0, 0, 0, 0, 607, 607, 607, 0, 0, + 0, 864, 0, 869, 0, 0, 871, 0, 166, 166, + 166, 166, 166, 925, 927, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 166, 166, 0, 0, 0, 166, + 0, 0, 0, 0, 440, 0, 0, 0, 1138, 1141, + 1142, 1143, 1144, 1145, 1146, 0, 1147, 1148, 1149, 1150, + 1151, 1126, 1127, 1128, 1129, 1110, 1111, 1139, 0, 1113, + 484, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, + 1123, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1197, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, + 0, 0, 0, 0, 1197, 1197, 0, 166, 0, 0, + 440, 0, 0, 0, 0, 0, 0, 484, 0, 0, + 1067, 0, 0, 484, 484, 0, 0, 0, 607, 0, + 0, 0, 0, 0, 1097, 0, 0, 0, 0, 440, + 0, 0, 0, 0, 1140, 0, 166, 0, 0, 0, + 0, 0, 0, 0, 1292, 0, 0, 0, 0, 0, + 1073, 0, 0, 1084, 1887, 0, 0, 0, 0, 0, + 440, 0, 0, 0, 0, 0, 0, 440, 0, 0, + 0, 0, 0, 0, 1313, 1314, 440, 440, 440, 440, + 440, 440, 440, 0, 0, 0, 0, 0, 0, 1902, + 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, + 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, + 440, 0, 0, 0, 166, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, + 0, 166, 0, 0, 1353, 0, 0, 1362, 1363, 1364, + 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, + 1375, 1376, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 593, 1292, 0, 0, 0, 593, 593, 0, + 0, 593, 593, 593, 0, 0, 0, 1197, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 753, 0, 0, 0, 0, 1102, 1415, 593, 593, 593, + 593, 593, 0, 1196, 0, 0, 1432, 1202, 1202, 0, + 1202, 0, 1202, 1202, 0, 1211, 1202, 1202, 1202, 1202, + 1202, 0, 0, 0, 0, 0, 0, 440, 1196, 1196, + 753, 0, 0, 1292, 440, 0, 440, 0, 0, 0, + 0, 0, 0, 0, 440, 440, 166, 0, 0, 166, + 166, 166, 484, 484, 0, 0, 0, 0, 0, 2019, + 0, 1271, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1233, 484, 484, 484, 0, 0, 0, 0, 0, + 0, 0, 496, 0, 0, 0, 0, 0, 0, 2042, + 0, 0, 2043, 0, 0, 2045, 0, 0, 0, 0, + 1273, 0, 0, 0, 0, 0, 0, 484, 484, 484, + 166, 0, 0, 0, 0, 0, 0, 607, 607, 607, + 0, 484, 0, 484, 0, 0, 0, 0, 0, 484, + 0, 1302, 0, 0, 0, 0, 0, 0, 1306, 0, + 0, 0, 0, 0, 0, 0, 0, 1315, 1316, 1317, + 1318, 1319, 1320, 1321, 166, 0, 0, 0, 0, 0, + 0, 484, 0, 0, 484, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1084, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2106, 496, 0, 0, 0, 1384, 0, 607, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 484, 166, + 0, 1196, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 440, 0, 0, 1416, + 1417, 0, 0, 440, 0, 0, 484, 0, 440, 440, + 484, 0, 440, 484, 484, 0, 0, 0, 0, 0, + 440, 0, 0, 0, 1450, 0, 0, 440, 0, 0, + 0, 0, 0, 0, 1067, 0, 0, 607, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 440, 0, 0, 607, 0, 0, 607, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1457, 753, + 0, 0, 0, 0, 0, 1461, 0, 1464, 0, 0, + 0, 0, 0, 0, 0, 0, 1483, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1644, 1645, 1646, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 593, 593, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 760, 0, 0, 0, 0, 0, + 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 440, 753, 0, + 0, 0, 0, 0, 760, 1432, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 593, 440, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1197, + 440, 440, 440, 440, 440, 0, 0, 0, 753, 0, + 0, 0, 1736, 0, 0, 0, 440, 0, 0, 440, + 440, 0, 0, 440, 1746, 1292, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 440, 0, 1084, 0, 0, + 0, 0, 1802, 0, 1608, 0, 0, 0, 0, 1617, + 1618, 0, 1197, 1622, 0, 0, 0, 1633, 0, 0, + 0, 1625, 1292, 0, 0, 0, 0, 0, 1628, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 440, 440, 440, + 440, 440, 0, 1632, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 440, 440, 0, 0, 0, 1850, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, + 0, 0, 0, 0, 0, 0, 1859, 1860, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1880, 1881, 0, 1882, 1883, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1889, 1890, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, + 0, 0, 0, 1196, 0, 0, 0, 0, 0, 1197, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1743, 0, 0, 0, 0, 0, 0, 1939, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1793, 0, 0, 0, 0, 0, + 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1805, 1197, 0, 0, 1196, 0, 1812, 0, + 0, 1805, 0, 440, 0, 0, 607, 0, 1817, 0, + 0, 0, 0, 440, 0, 0, 1796, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, + 440, 0, 0, 0, 0, 0, 0, 161, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1998, 0, 0, 0, + 0, 0, 103, 0, 125, 0, 0, 0, 1835, 1836, + 1837, 1838, 1839, 145, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 607, 1084, 1845, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1197, 0, 0, 135, 0, 0, 0, 0, 124, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1202, + 0, 0, 0, 0, 0, 0, 0, 142, 0, 143, + 0, 0, 0, 0, 112, 113, 134, 133, 160, 0, + 607, 0, 0, 1196, 0, 440, 1914, 1202, 440, 440, + 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1899, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 110, 136, 117, + 109, 0, 130, 131, 0, 0, 0, 146, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 151, 118, 1432, + 2088, 2089, 2090, 2091, 2092, 0, 0, 0, 2095, 2096, + 0, 0, 121, 119, 114, 115, 116, 120, 0, 0, + 0, 0, 111, 0, 753, 0, 0, 1196, 0, 0, + 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1963, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1976, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1979, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1990, 0, + 0, 1993, 0, 138, 0, 0, 0, 0, 440, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1197, 0, 1196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2190, 0, 0, 0, 0, 132, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, + 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1805, 2067, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2082, 2083, 2084, 0, 0, + 0, 0, 0, 0, 0, 0, 2062, 0, 0, 2063, + 2064, 2065, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1805, 1805, 1805, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2112, 0, 2114, 0, 0, 0, + 0, 0, 1805, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 139, 144, 141, 147, 148, 149, 150, + 152, 153, 154, 155, 0, 0, 0, 0, 0, 156, + 157, 158, 159, 0, 1805, 0, 0, 607, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2124, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1805, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1196, 0, 2188, + 0, 0, 0, 1805, 0, 0, 607, 607, 0, 2171, + 732, 719, 0, 0, 668, 735, 639, 657, 744, 659, + 662, 702, 618, 681, 312, 654, 0, 643, 614, 650, + 615, 641, 670, 222, 674, 638, 721, 684, 734, 270, + 0, 620, 644, 326, 704, 364, 208, 279, 277, 392, + 232, 225, 221, 207, 254, 285, 324, 382, 318, 741, + 274, 691, 0, 373, 297, 0, 0, 0, 672, 724, + 679, 715, 667, 703, 628, 690, 736, 655, 699, 737, + 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, + 168, 169, 0, 2198, 2199, 0, 0, 0, 0, 0, + 197, 0, 204, 696, 731, 652, 698, 218, 258, 224, + 217, 389, 701, 747, 613, 693, 0, 616, 619, 743, + 727, 647, 648, 0, 0, 0, 0, 0, 0, 0, + 671, 680, 712, 665, 0, 0, 0, 0, 0, 0, + 0, 0, 645, 0, 689, 0, 0, 0, 624, 617, + 0, 0, 0, 0, 669, 0, 0, 0, 627, 0, + 646, 713, 0, 611, 244, 621, 298, 0, 717, 726, + 666, 420, 730, 664, 663, 733, 708, 625, 723, 658, + 269, 623, 266, 171, 186, 0, 656, 308, 347, 353, + 722, 642, 651, 209, 649, 351, 322, 406, 193, 234, + 344, 327, 349, 688, 706, 350, 275, 394, 339, 404, + 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, + 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, + 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, + 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, + 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, + 434, 189, 417, 182, 920, 416, 304, 393, 401, 293, + 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, + 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, + 435, 195, 637, 718, 388, 426, 431, 0, 340, 196, + 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, + 334, 247, 315, 405, 233, 413, 303, 190, 253, 371, + 267, 276, 710, 746, 321, 352, 199, 408, 372, 632, + 636, 630, 631, 682, 683, 633, 738, 739, 740, 714, + 626, 0, 634, 635, 0, 720, 728, 729, 687, 170, + 183, 272, 742, 341, 237, 433, 415, 411, 612, 629, + 215, 640, 0, 0, 653, 660, 661, 673, 675, 676, + 677, 678, 686, 694, 695, 697, 705, 707, 709, 711, + 716, 725, 745, 172, 173, 184, 192, 202, 214, 227, + 235, 245, 249, 252, 255, 256, 259, 264, 281, 286, + 287, 288, 289, 305, 306, 307, 310, 313, 314, 317, + 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, + 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, + 367, 368, 376, 380, 395, 396, 407, 419, 423, 246, + 403, 424, 0, 280, 685, 692, 282, 231, 248, 257, + 700, 414, 377, 188, 348, 238, 177, 205, 191, 212, + 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, + 345, 200, 363, 383, 384, 385, 387, 294, 219, 732, + 719, 0, 0, 668, 735, 639, 657, 744, 659, 662, + 702, 618, 681, 312, 654, 0, 643, 614, 650, 615, + 641, 670, 222, 674, 638, 721, 684, 734, 270, 0, + 620, 644, 326, 704, 364, 208, 279, 277, 392, 232, + 225, 221, 207, 254, 285, 324, 382, 318, 741, 274, + 691, 0, 373, 297, 0, 0, 0, 672, 724, 679, + 715, 667, 703, 628, 690, 736, 655, 699, 737, 260, + 206, 175, 309, 374, 236, 0, 0, 0, 167, 168, + 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, + 0, 204, 696, 731, 652, 698, 218, 258, 224, 217, + 389, 701, 747, 613, 693, 0, 616, 619, 743, 727, + 647, 648, 0, 0, 0, 0, 0, 0, 0, 671, + 680, 712, 665, 0, 0, 0, 0, 0, 0, 1903, + 0, 645, 0, 689, 0, 0, 0, 624, 617, 0, + 0, 0, 0, 669, 0, 0, 0, 627, 0, 646, + 713, 0, 611, 244, 621, 298, 0, 717, 726, 666, + 420, 730, 664, 663, 733, 708, 625, 723, 658, 269, + 623, 266, 171, 186, 0, 656, 308, 347, 353, 722, + 642, 651, 209, 649, 351, 322, 406, 193, 234, 344, + 327, 349, 688, 706, 350, 275, 394, 339, 404, 421, + 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, + 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, + 273, 429, 185, 359, 201, 178, 381, 402, 198, 362, + 0, 0, 0, 180, 400, 378, 292, 262, 263, 179, + 0, 343, 220, 240, 211, 311, 397, 398, 210, 434, + 189, 417, 182, 920, 416, 304, 393, 401, 293, 284, + 181, 399, 291, 283, 268, 230, 250, 337, 278, 338, + 251, 300, 299, 301, 0, 176, 0, 375, 410, 435, + 195, 637, 718, 388, 426, 431, 0, 340, 196, 241, + 229, 336, 239, 271, 425, 427, 428, 430, 194, 334, + 247, 315, 405, 233, 413, 303, 190, 253, 371, 267, + 276, 710, 746, 321, 352, 199, 408, 372, 632, 636, + 630, 631, 682, 683, 633, 738, 739, 740, 714, 626, + 0, 634, 635, 0, 720, 728, 729, 687, 170, 183, + 272, 742, 341, 237, 433, 415, 411, 612, 629, 215, + 640, 0, 0, 653, 660, 661, 673, 675, 676, 677, + 678, 686, 694, 695, 697, 705, 707, 709, 711, 716, + 725, 745, 172, 173, 184, 192, 202, 214, 227, 235, + 245, 249, 252, 255, 256, 259, 264, 281, 286, 287, + 288, 289, 305, 306, 307, 310, 313, 314, 317, 319, + 320, 323, 329, 330, 331, 332, 333, 335, 342, 346, + 354, 355, 356, 357, 358, 360, 361, 365, 366, 367, + 368, 376, 380, 395, 396, 407, 419, 423, 246, 403, + 424, 0, 280, 685, 692, 282, 231, 248, 257, 700, + 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, + 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, + 200, 363, 383, 384, 385, 387, 294, 219, 732, 719, + 0, 0, 668, 735, 639, 657, 744, 659, 662, 702, + 618, 681, 312, 654, 0, 643, 614, 650, 615, 641, + 670, 222, 674, 638, 721, 684, 734, 270, 0, 620, + 644, 326, 704, 364, 208, 279, 277, 392, 232, 225, + 221, 207, 254, 285, 324, 382, 318, 741, 274, 691, + 0, 373, 297, 0, 0, 0, 672, 724, 679, 715, + 667, 703, 628, 690, 736, 655, 699, 737, 260, 206, + 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, + 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, + 204, 696, 731, 652, 698, 218, 258, 224, 217, 389, + 701, 747, 613, 693, 0, 616, 619, 743, 727, 647, + 648, 0, 0, 0, 0, 0, 0, 0, 671, 680, + 712, 665, 0, 0, 0, 0, 0, 0, 1747, 0, + 645, 0, 689, 0, 0, 0, 624, 617, 0, 0, + 0, 0, 669, 0, 0, 0, 627, 0, 646, 713, + 0, 611, 244, 621, 298, 0, 717, 726, 666, 420, + 730, 664, 663, 733, 708, 625, 723, 658, 269, 623, + 266, 171, 186, 0, 656, 308, 347, 353, 722, 642, + 651, 209, 649, 351, 322, 406, 193, 234, 344, 327, + 349, 688, 706, 350, 275, 394, 339, 404, 421, 422, + 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, + 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, + 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, + 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, + 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, + 417, 182, 920, 416, 304, 393, 401, 293, 284, 181, + 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, + 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, + 637, 718, 388, 426, 431, 0, 340, 196, 241, 229, + 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, + 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, + 710, 746, 321, 352, 199, 408, 372, 632, 636, 630, + 631, 682, 683, 633, 738, 739, 740, 714, 626, 0, + 634, 635, 0, 720, 728, 729, 687, 170, 183, 272, + 742, 341, 237, 433, 415, 411, 612, 629, 215, 640, + 0, 0, 653, 660, 661, 673, 675, 676, 677, 678, + 686, 694, 695, 697, 705, 707, 709, 711, 716, 725, + 745, 172, 173, 184, 192, 202, 214, 227, 235, 245, + 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, + 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, + 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, + 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, + 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, + 0, 280, 685, 692, 282, 231, 248, 257, 700, 414, + 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, + 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, + 363, 383, 384, 385, 387, 294, 219, 732, 719, 0, + 0, 668, 735, 639, 657, 744, 659, 662, 702, 618, + 681, 312, 654, 0, 643, 614, 650, 615, 641, 670, + 222, 674, 638, 721, 684, 734, 270, 0, 620, 644, + 326, 704, 364, 208, 279, 277, 392, 232, 225, 221, + 207, 254, 285, 324, 382, 318, 741, 274, 691, 0, + 373, 297, 0, 0, 0, 672, 724, 679, 715, 667, + 703, 628, 690, 736, 655, 699, 737, 260, 206, 175, + 309, 374, 236, 0, 0, 0, 167, 168, 169, 0, + 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, + 696, 731, 652, 698, 218, 258, 224, 217, 389, 701, + 747, 613, 693, 0, 616, 619, 743, 727, 647, 648, + 0, 0, 0, 0, 0, 0, 0, 671, 680, 712, + 665, 0, 0, 0, 0, 0, 0, 1459, 0, 645, + 0, 689, 0, 0, 0, 624, 617, 0, 0, 0, + 0, 669, 0, 0, 0, 627, 0, 646, 713, 0, + 611, 244, 621, 298, 0, 717, 726, 666, 420, 730, + 664, 663, 733, 708, 625, 723, 658, 269, 623, 266, + 171, 186, 0, 656, 308, 347, 353, 722, 642, 651, + 209, 649, 351, 322, 406, 193, 234, 344, 327, 349, + 688, 706, 350, 275, 394, 339, 404, 421, 422, 216, + 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, + 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, + 185, 359, 201, 178, 381, 402, 198, 362, 0, 0, + 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, + 220, 240, 211, 311, 397, 398, 210, 434, 189, 417, + 182, 920, 416, 304, 393, 401, 293, 284, 181, 399, + 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, + 299, 301, 0, 176, 0, 375, 410, 435, 195, 637, + 718, 388, 426, 431, 0, 340, 196, 241, 229, 336, + 239, 271, 425, 427, 428, 430, 194, 334, 247, 315, + 405, 233, 413, 303, 190, 253, 371, 267, 276, 710, + 746, 321, 352, 199, 408, 372, 632, 636, 630, 631, + 682, 683, 633, 738, 739, 740, 714, 626, 0, 634, + 635, 0, 720, 728, 729, 687, 170, 183, 272, 742, + 341, 237, 433, 415, 411, 612, 629, 215, 640, 0, + 0, 653, 660, 661, 673, 675, 676, 677, 678, 686, + 694, 695, 697, 705, 707, 709, 711, 716, 725, 745, + 172, 173, 184, 192, 202, 214, 227, 235, 245, 249, + 252, 255, 256, 259, 264, 281, 286, 287, 288, 289, + 305, 306, 307, 310, 313, 314, 317, 319, 320, 323, + 329, 330, 331, 332, 333, 335, 342, 346, 354, 355, + 356, 357, 358, 360, 361, 365, 366, 367, 368, 376, + 380, 395, 396, 407, 419, 423, 246, 403, 424, 0, + 280, 685, 692, 282, 231, 248, 257, 700, 414, 377, + 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, + 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, + 383, 384, 385, 387, 294, 219, 732, 719, 0, 0, + 668, 735, 639, 657, 744, 659, 662, 702, 618, 681, + 312, 654, 0, 643, 614, 650, 615, 641, 670, 222, + 674, 638, 721, 684, 734, 270, 0, 620, 644, 326, + 704, 364, 208, 279, 277, 392, 232, 225, 221, 207, + 254, 285, 324, 382, 318, 741, 274, 691, 0, 373, + 297, 0, 0, 0, 672, 724, 679, 715, 667, 703, + 628, 690, 736, 655, 699, 737, 260, 206, 175, 309, + 374, 236, 71, 0, 0, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 696, + 731, 652, 698, 218, 258, 224, 217, 389, 701, 747, + 613, 693, 0, 616, 619, 743, 727, 647, 648, 0, + 0, 0, 0, 0, 0, 0, 671, 680, 712, 665, + 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, + 689, 0, 0, 0, 624, 617, 0, 0, 0, 0, + 669, 0, 0, 0, 627, 0, 646, 713, 0, 611, + 244, 621, 298, 0, 717, 726, 666, 420, 730, 664, + 663, 733, 708, 625, 723, 658, 269, 623, 266, 171, + 186, 0, 656, 308, 347, 353, 722, 642, 651, 209, + 649, 351, 322, 406, 193, 234, 344, 327, 349, 688, + 706, 350, 275, 394, 339, 404, 421, 422, 216, 302, + 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, + 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, + 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, + 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, + 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, + 920, 416, 304, 393, 401, 293, 284, 181, 399, 291, + 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, + 301, 0, 176, 0, 375, 410, 435, 195, 637, 718, + 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, + 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, + 233, 413, 303, 190, 253, 371, 267, 276, 710, 746, + 321, 352, 199, 408, 372, 632, 636, 630, 631, 682, + 683, 633, 738, 739, 740, 714, 626, 0, 634, 635, + 0, 720, 728, 729, 687, 170, 183, 272, 742, 341, + 237, 433, 415, 411, 612, 629, 215, 640, 0, 0, + 653, 660, 661, 673, 675, 676, 677, 678, 686, 694, + 695, 697, 705, 707, 709, 711, 716, 725, 745, 172, + 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, + 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, + 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, + 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, + 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, + 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, + 685, 692, 282, 231, 248, 257, 700, 414, 377, 188, + 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, + 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, + 384, 385, 387, 294, 219, 732, 719, 0, 0, 668, + 735, 639, 657, 744, 659, 662, 702, 618, 681, 312, + 654, 0, 643, 614, 650, 615, 641, 670, 222, 674, + 638, 721, 684, 734, 270, 0, 620, 644, 326, 704, + 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, + 285, 324, 382, 318, 741, 274, 691, 0, 373, 297, + 0, 0, 0, 672, 724, 679, 715, 667, 703, 628, + 690, 736, 655, 699, 737, 260, 206, 175, 309, 374, + 236, 0, 0, 0, 167, 168, 169, 0, 0, 0, + 0, 0, 0, 0, 0, 197, 0, 204, 696, 731, + 652, 698, 218, 258, 224, 217, 389, 701, 747, 613, + 693, 0, 616, 619, 743, 727, 647, 648, 0, 0, + 0, 0, 0, 0, 0, 671, 680, 712, 665, 0, + 0, 0, 0, 0, 0, 0, 0, 645, 0, 689, + 0, 0, 0, 624, 617, 0, 0, 0, 0, 669, + 0, 0, 0, 627, 0, 646, 713, 0, 611, 244, + 621, 298, 0, 717, 726, 666, 420, 730, 664, 663, + 733, 708, 625, 723, 658, 269, 623, 266, 171, 186, + 0, 656, 308, 347, 353, 722, 642, 651, 209, 649, + 351, 322, 406, 193, 234, 344, 327, 349, 688, 706, + 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, + 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, + 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, + 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, + 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, + 211, 311, 397, 398, 210, 434, 189, 417, 182, 920, + 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, + 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, + 0, 176, 0, 375, 410, 435, 195, 637, 718, 388, + 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, + 425, 427, 428, 430, 194, 334, 247, 315, 405, 233, + 413, 303, 190, 253, 371, 267, 276, 710, 746, 321, + 352, 199, 408, 372, 632, 636, 630, 631, 682, 683, + 633, 738, 739, 740, 714, 626, 0, 634, 635, 0, + 720, 728, 729, 687, 170, 183, 272, 742, 341, 237, + 433, 415, 411, 612, 629, 215, 640, 0, 0, 653, + 660, 661, 673, 675, 676, 677, 678, 686, 694, 695, + 697, 705, 707, 709, 711, 716, 725, 745, 172, 173, + 184, 192, 202, 214, 227, 235, 245, 249, 252, 255, + 256, 259, 264, 281, 286, 287, 288, 289, 305, 306, + 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, + 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, + 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, + 396, 407, 419, 423, 246, 403, 424, 0, 280, 685, + 692, 282, 231, 248, 257, 700, 414, 377, 188, 348, + 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, + 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, + 385, 387, 294, 219, 732, 719, 0, 0, 668, 735, + 639, 657, 744, 659, 662, 702, 618, 681, 312, 654, + 0, 643, 614, 650, 615, 641, 670, 222, 674, 638, + 721, 684, 734, 270, 0, 620, 644, 326, 704, 364, + 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, + 324, 382, 318, 741, 274, 691, 0, 373, 297, 0, + 0, 0, 672, 724, 679, 715, 667, 703, 628, 690, + 736, 655, 699, 737, 260, 206, 175, 309, 374, 236, + 0, 0, 0, 167, 168, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 197, 0, 204, 696, 731, 652, + 698, 218, 258, 224, 217, 389, 701, 747, 613, 693, + 0, 616, 619, 743, 727, 647, 648, 0, 0, 0, + 0, 0, 0, 0, 671, 680, 712, 665, 0, 0, + 0, 0, 0, 0, 0, 0, 645, 0, 689, 0, + 0, 0, 624, 617, 0, 0, 0, 0, 669, 0, + 0, 0, 627, 0, 646, 713, 0, 611, 244, 621, + 298, 0, 717, 726, 666, 420, 730, 664, 663, 733, + 708, 625, 723, 658, 269, 623, 266, 171, 186, 0, + 656, 308, 347, 353, 722, 642, 651, 209, 649, 351, + 322, 406, 193, 234, 344, 327, 349, 688, 706, 350, + 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, + 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, + 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, + 178, 381, 402, 198, 362, 0, 0, 0, 180, 400, + 378, 292, 262, 263, 179, 0, 343, 220, 240, 211, + 311, 397, 398, 210, 434, 189, 417, 182, 622, 416, + 304, 393, 401, 293, 284, 181, 399, 291, 283, 268, + 230, 250, 337, 278, 338, 251, 300, 299, 301, 0, + 176, 0, 375, 410, 435, 195, 637, 718, 388, 426, + 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, + 427, 428, 430, 194, 334, 247, 315, 405, 233, 413, + 610, 748, 604, 603, 267, 276, 710, 746, 321, 352, + 199, 408, 372, 632, 636, 630, 631, 682, 683, 633, + 738, 739, 740, 714, 626, 0, 634, 635, 0, 720, + 728, 729, 687, 170, 183, 272, 742, 341, 237, 433, + 415, 411, 612, 629, 215, 640, 0, 0, 653, 660, + 661, 673, 675, 676, 677, 678, 686, 694, 695, 697, + 705, 707, 709, 711, 716, 725, 745, 172, 173, 184, + 192, 202, 214, 227, 235, 245, 249, 252, 255, 256, + 259, 264, 281, 286, 287, 288, 289, 305, 306, 307, + 310, 313, 314, 317, 319, 320, 323, 329, 330, 331, + 332, 333, 335, 342, 346, 354, 355, 356, 357, 358, + 360, 361, 365, 366, 367, 368, 376, 380, 395, 396, + 407, 419, 423, 246, 403, 424, 0, 280, 685, 692, + 282, 231, 248, 257, 700, 414, 377, 188, 348, 238, + 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, + 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, + 387, 294, 219, 732, 719, 0, 0, 668, 735, 639, + 657, 744, 659, 662, 702, 618, 681, 312, 654, 0, + 643, 614, 650, 615, 641, 670, 222, 674, 638, 721, + 684, 734, 270, 0, 620, 644, 326, 704, 364, 208, + 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, + 382, 318, 741, 274, 691, 0, 373, 297, 0, 0, + 0, 672, 724, 679, 715, 667, 703, 628, 690, 736, + 655, 699, 737, 260, 206, 175, 309, 374, 236, 0, + 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, + 0, 0, 0, 197, 0, 204, 696, 731, 652, 698, + 218, 258, 224, 217, 389, 701, 747, 613, 693, 0, + 616, 619, 743, 727, 647, 648, 0, 0, 0, 0, + 0, 0, 0, 671, 680, 712, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 645, 0, 689, 0, 0, + 0, 624, 617, 0, 0, 0, 0, 669, 0, 0, + 0, 627, 0, 646, 713, 0, 611, 244, 621, 298, + 0, 717, 726, 666, 420, 730, 664, 663, 733, 708, + 625, 723, 658, 269, 623, 266, 171, 186, 0, 656, + 308, 347, 353, 722, 642, 651, 209, 649, 351, 322, + 406, 193, 234, 344, 327, 349, 688, 706, 350, 275, + 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, + 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, + 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, + 381, 1088, 198, 362, 0, 0, 0, 180, 400, 378, + 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, + 397, 398, 210, 434, 189, 417, 182, 622, 416, 304, + 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, + 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, + 0, 375, 410, 435, 195, 637, 718, 388, 426, 431, + 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, + 428, 430, 194, 334, 247, 315, 405, 233, 413, 610, + 748, 604, 603, 267, 276, 710, 746, 321, 352, 199, + 408, 372, 632, 636, 630, 631, 682, 683, 633, 738, + 739, 740, 714, 626, 0, 634, 635, 0, 720, 728, + 729, 687, 170, 183, 272, 742, 341, 237, 433, 415, + 411, 612, 629, 215, 640, 0, 0, 653, 660, 661, + 673, 675, 676, 677, 678, 686, 694, 695, 697, 705, + 707, 709, 711, 716, 725, 745, 172, 173, 184, 192, + 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, + 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, + 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, + 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, + 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, + 419, 423, 246, 403, 424, 0, 280, 685, 692, 282, + 231, 248, 257, 700, 414, 377, 188, 348, 238, 177, + 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, + 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, + 294, 219, 732, 719, 0, 0, 668, 735, 639, 657, + 744, 659, 662, 702, 618, 681, 312, 654, 0, 643, + 614, 650, 615, 641, 670, 222, 674, 638, 721, 684, + 734, 270, 0, 620, 644, 326, 704, 364, 208, 279, + 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, + 318, 741, 274, 691, 0, 373, 297, 0, 0, 0, + 672, 724, 679, 715, 667, 703, 628, 690, 736, 655, + 699, 737, 260, 206, 175, 309, 374, 236, 0, 0, + 0, 167, 168, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 197, 0, 204, 696, 731, 652, 698, 218, + 258, 224, 217, 389, 701, 747, 613, 693, 0, 616, + 619, 743, 727, 647, 648, 0, 0, 0, 0, 0, + 0, 0, 671, 680, 712, 665, 0, 0, 0, 0, + 0, 0, 0, 0, 645, 0, 689, 0, 0, 0, + 624, 617, 0, 0, 0, 0, 669, 0, 0, 0, + 627, 0, 646, 713, 0, 611, 244, 621, 298, 0, + 717, 726, 666, 420, 730, 664, 663, 733, 708, 625, + 723, 658, 269, 623, 266, 171, 186, 0, 656, 308, + 347, 353, 722, 642, 651, 209, 649, 351, 322, 406, + 193, 234, 344, 327, 349, 688, 706, 350, 275, 394, + 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, + 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, + 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, + 601, 198, 362, 0, 0, 0, 180, 400, 378, 292, + 262, 263, 179, 0, 343, 220, 240, 211, 311, 397, + 398, 210, 434, 189, 417, 182, 622, 416, 304, 393, + 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, + 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, + 375, 410, 435, 195, 637, 718, 388, 426, 431, 0, + 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, + 430, 194, 334, 247, 315, 405, 233, 413, 610, 748, + 604, 603, 267, 276, 710, 746, 321, 352, 199, 408, + 372, 632, 636, 630, 631, 682, 683, 633, 738, 739, + 740, 714, 626, 0, 634, 635, 0, 720, 728, 729, + 687, 170, 183, 272, 742, 341, 237, 433, 415, 411, + 612, 629, 215, 640, 0, 0, 653, 660, 661, 673, + 675, 676, 677, 678, 686, 694, 695, 697, 705, 707, + 709, 711, 716, 725, 745, 172, 173, 184, 192, 202, + 214, 227, 235, 245, 249, 252, 255, 256, 259, 264, + 281, 286, 287, 288, 289, 305, 306, 307, 310, 313, + 314, 317, 319, 320, 323, 329, 330, 331, 332, 333, + 335, 342, 346, 354, 355, 356, 357, 358, 360, 361, + 365, 366, 367, 368, 376, 380, 395, 396, 407, 419, + 423, 246, 403, 424, 0, 280, 685, 692, 282, 231, + 248, 257, 700, 414, 377, 188, 348, 238, 177, 205, + 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, + 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, + 219, 312, 0, 0, 1386, 0, 501, 0, 0, 0, + 222, 0, 500, 0, 0, 0, 270, 0, 0, 1387, + 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, + 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, + 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, + 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, + 309, 374, 236, 71, 0, 0, 167, 168, 169, 522, + 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, + 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, + 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 512, 513, 591, 0, 0, + 0, 559, 0, 514, 0, 0, 507, 508, 510, 509, + 511, 516, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 244, 0, 298, 0, 558, 0, 0, 420, 0, + 0, 556, 0, 0, 0, 0, 0, 269, 0, 266, + 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, + 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, + 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, + 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, + 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, + 185, 359, 201, 178, 381, 402, 198, 362, 0, 0, + 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, + 220, 240, 211, 311, 397, 398, 210, 434, 189, 417, + 182, 0, 416, 304, 393, 401, 293, 284, 181, 399, + 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, + 299, 301, 0, 176, 0, 375, 410, 435, 195, 0, + 0, 388, 426, 431, 0, 340, 196, 241, 229, 336, + 239, 271, 425, 427, 428, 430, 194, 334, 247, 315, + 405, 233, 413, 303, 190, 253, 371, 267, 276, 0, + 0, 321, 352, 199, 408, 372, 546, 557, 552, 553, + 550, 551, 545, 549, 548, 547, 560, 537, 538, 539, + 540, 542, 0, 554, 555, 541, 170, 183, 272, 0, + 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 172, 173, 184, 192, 202, 214, 227, 235, 245, 249, + 252, 255, 256, 259, 264, 281, 286, 287, 288, 289, + 305, 306, 307, 310, 313, 314, 317, 319, 320, 323, + 329, 330, 331, 332, 333, 335, 342, 346, 354, 355, + 356, 357, 358, 360, 361, 365, 366, 367, 368, 376, + 380, 395, 396, 407, 419, 423, 246, 403, 424, 0, + 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, + 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, + 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, + 383, 384, 385, 387, 294, 219, 312, 0, 0, 0, + 0, 501, 0, 0, 0, 222, 0, 500, 0, 0, + 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, + 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, + 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, + 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, + 1498, 0, 260, 206, 175, 309, 374, 236, 71, 0, + 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, + 0, 0, 197, 523, 204, 528, 529, 530, 1499, 218, + 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, + 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 512, 513, 0, 0, 0, 0, 559, 0, 514, 0, + 0, 507, 508, 510, 509, 511, 516, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, + 558, 0, 0, 420, 0, 0, 556, 0, 0, 0, + 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, + 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, + 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, + 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, + 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, + 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, + 402, 198, 362, 0, 0, 0, 180, 400, 378, 292, + 262, 263, 179, 0, 343, 220, 240, 211, 311, 397, + 398, 210, 434, 189, 417, 182, 0, 416, 304, 393, + 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, + 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, + 375, 410, 435, 195, 0, 0, 388, 426, 431, 0, + 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, + 430, 194, 334, 247, 315, 405, 233, 413, 303, 190, + 253, 371, 267, 276, 0, 0, 321, 352, 199, 408, + 372, 546, 557, 552, 553, 550, 551, 545, 549, 548, + 547, 560, 537, 538, 539, 540, 542, 0, 554, 555, + 541, 170, 183, 272, 0, 341, 237, 433, 415, 411, + 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 172, 173, 184, 192, 202, + 214, 227, 235, 245, 249, 252, 255, 256, 259, 264, + 281, 286, 287, 288, 289, 305, 306, 307, 310, 313, + 314, 317, 319, 320, 323, 329, 330, 331, 332, 333, + 335, 342, 346, 354, 355, 356, 357, 358, 360, 361, + 365, 366, 367, 368, 376, 380, 395, 396, 407, 419, + 423, 246, 403, 424, 0, 280, 0, 0, 282, 231, + 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, + 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, + 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, + 219, 312, 0, 0, 0, 0, 501, 0, 0, 0, + 222, 0, 500, 0, 0, 0, 270, 0, 0, 0, + 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, + 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, + 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, + 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, + 309, 374, 236, 71, 0, 578, 167, 168, 169, 522, + 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, + 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, + 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 512, 513, 0, 0, 0, + 0, 559, 0, 514, 0, 0, 507, 508, 510, 509, + 511, 516, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 244, 0, 298, 0, 558, 0, 0, 420, 0, + 0, 556, 0, 0, 0, 0, 0, 269, 0, 266, + 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, + 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, + 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, + 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, + 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, + 185, 359, 201, 178, 381, 402, 198, 362, 0, 0, + 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, + 220, 240, 211, 311, 397, 398, 210, 434, 189, 417, + 182, 0, 416, 304, 393, 401, 293, 284, 181, 399, + 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, + 299, 301, 0, 176, 0, 375, 410, 435, 195, 0, + 0, 388, 426, 431, 0, 340, 196, 241, 229, 336, + 239, 271, 425, 427, 428, 430, 194, 334, 247, 315, + 405, 233, 413, 303, 190, 253, 371, 267, 276, 0, + 0, 321, 352, 199, 408, 372, 546, 557, 552, 553, + 550, 551, 545, 549, 548, 547, 560, 537, 538, 539, + 540, 542, 0, 554, 555, 541, 170, 183, 272, 0, + 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 172, 173, 184, 192, 202, 214, 227, 235, 245, 249, + 252, 255, 256, 259, 264, 281, 286, 287, 288, 289, + 305, 306, 307, 310, 313, 314, 317, 319, 320, 323, + 329, 330, 331, 332, 333, 335, 342, 346, 354, 355, + 356, 357, 358, 360, 361, 365, 366, 367, 368, 376, + 380, 395, 396, 407, 419, 423, 246, 403, 424, 0, + 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, + 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, + 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, + 383, 384, 385, 387, 294, 219, 312, 0, 0, 0, + 0, 501, 0, 0, 0, 222, 0, 500, 0, 0, + 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, + 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, + 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, + 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, + 0, 0, 260, 206, 175, 309, 374, 236, 71, 0, + 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, + 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, + 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, + 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 512, 513, 591, 0, 0, 0, 559, 0, 514, 0, + 0, 507, 508, 510, 509, 511, 516, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, + 558, 0, 0, 420, 0, 0, 556, 0, 0, 0, + 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, + 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, + 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, + 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, + 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, + 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, + 402, 198, 362, 0, 0, 0, 180, 400, 378, 292, + 262, 263, 179, 0, 343, 220, 240, 211, 311, 397, + 398, 210, 434, 189, 417, 182, 0, 416, 304, 393, + 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, + 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, + 375, 410, 435, 195, 0, 0, 388, 426, 431, 0, + 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, + 430, 194, 334, 247, 315, 405, 233, 413, 303, 190, + 253, 371, 267, 276, 0, 0, 321, 352, 199, 408, + 372, 546, 557, 552, 553, 550, 551, 545, 549, 548, + 547, 560, 537, 538, 539, 540, 542, 0, 554, 555, + 541, 170, 183, 272, 0, 341, 237, 433, 415, 411, + 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 172, 173, 184, 192, 202, + 214, 227, 235, 245, 249, 252, 255, 256, 259, 264, + 281, 286, 287, 288, 289, 305, 306, 307, 310, 313, + 314, 317, 319, 320, 323, 329, 330, 331, 332, 333, + 335, 342, 346, 354, 355, 356, 357, 358, 360, 361, + 365, 366, 367, 368, 376, 380, 395, 396, 407, 419, + 423, 246, 403, 424, 0, 280, 0, 0, 282, 231, + 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, + 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, + 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, + 219, 312, 0, 0, 0, 0, 501, 0, 0, 0, + 222, 0, 500, 0, 0, 0, 270, 0, 0, 0, + 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, + 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, + 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, + 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, + 309, 374, 236, 71, 0, 0, 167, 168, 169, 522, + 1404, 524, 525, 526, 527, 0, 0, 197, 523, 204, + 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, + 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 512, 513, 591, 0, 0, + 0, 559, 0, 514, 0, 0, 507, 508, 510, 509, + 511, 516, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 244, 0, 298, 0, 558, 0, 0, 420, 0, + 0, 556, 0, 0, 0, 0, 0, 269, 0, 266, + 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, + 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, + 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, + 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, + 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, + 185, 359, 201, 178, 381, 402, 198, 362, 0, 0, + 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, + 220, 240, 211, 311, 397, 398, 210, 434, 189, 417, + 182, 0, 416, 304, 393, 401, 293, 284, 181, 399, + 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, + 299, 301, 0, 176, 0, 375, 410, 435, 195, 0, + 0, 388, 426, 431, 0, 340, 196, 241, 229, 336, + 239, 271, 425, 427, 428, 430, 194, 334, 247, 315, + 405, 233, 413, 303, 190, 253, 371, 267, 276, 0, + 0, 321, 352, 199, 408, 372, 546, 557, 552, 553, + 550, 551, 545, 549, 548, 547, 560, 537, 538, 539, + 540, 542, 0, 554, 555, 541, 170, 183, 272, 0, + 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 172, 173, 184, 192, 202, 214, 227, 235, 245, 249, + 252, 255, 256, 259, 264, 281, 286, 287, 288, 289, + 305, 306, 307, 310, 313, 314, 317, 319, 320, 323, + 329, 330, 331, 332, 333, 335, 342, 346, 354, 355, + 356, 357, 358, 360, 361, 365, 366, 367, 368, 376, + 380, 395, 396, 407, 419, 423, 246, 403, 424, 0, + 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, + 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, + 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, + 383, 384, 385, 387, 294, 219, 312, 0, 0, 0, + 0, 501, 0, 0, 0, 222, 0, 500, 0, 0, + 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, + 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, + 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, + 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, + 0, 0, 260, 206, 175, 309, 374, 236, 71, 0, + 0, 167, 168, 169, 522, 1401, 524, 525, 526, 527, + 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, + 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, + 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 512, 513, 591, 0, 0, 0, 559, 0, 514, 0, + 0, 507, 508, 510, 509, 511, 516, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, + 558, 0, 0, 420, 0, 0, 556, 0, 0, 0, + 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, + 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, + 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, + 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, + 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, + 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, + 402, 198, 362, 0, 0, 0, 180, 400, 378, 292, + 262, 263, 179, 0, 343, 220, 240, 211, 311, 397, + 398, 210, 434, 189, 417, 182, 0, 416, 304, 393, + 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, + 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, + 375, 410, 435, 195, 0, 0, 388, 426, 431, 0, + 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, + 430, 194, 334, 247, 315, 405, 233, 413, 303, 190, + 253, 371, 267, 276, 0, 0, 321, 352, 199, 408, + 372, 546, 557, 552, 553, 550, 551, 545, 549, 548, + 547, 560, 537, 538, 539, 540, 542, 0, 554, 555, + 541, 170, 183, 272, 0, 341, 237, 433, 415, 411, + 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 172, 173, 184, 192, 202, + 214, 227, 235, 245, 249, 252, 255, 256, 259, 264, + 281, 286, 287, 288, 289, 305, 306, 307, 310, 313, + 314, 317, 319, 320, 323, 329, 330, 331, 332, 333, + 335, 342, 346, 354, 355, 356, 357, 358, 360, 361, + 365, 366, 367, 368, 376, 380, 395, 396, 407, 419, + 423, 246, 403, 424, 0, 280, 0, 0, 282, 231, + 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, + 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, + 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, + 219, 571, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 0, 0, 0, 501, + 0, 0, 0, 222, 0, 500, 0, 0, 0, 270, + 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, + 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, + 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, + 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, + 260, 206, 175, 309, 374, 236, 71, 0, 0, 167, + 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, + 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, + 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, + 0, 0, 0, 0, 559, 0, 514, 0, 0, 507, + 508, 510, 509, 511, 516, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 0, 298, 0, 558, 0, + 0, 420, 0, 0, 556, 0, 0, 0, 0, 0, + 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, + 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, + 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, + 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, + 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, + 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, + 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, + 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, + 434, 189, 417, 182, 0, 416, 304, 393, 401, 293, + 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, + 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, + 435, 195, 0, 0, 388, 426, 431, 0, 340, 196, + 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, + 334, 247, 315, 405, 233, 413, 303, 190, 253, 371, + 267, 276, 0, 0, 321, 352, 199, 408, 372, 546, + 557, 552, 553, 550, 551, 545, 549, 548, 547, 560, + 537, 538, 539, 540, 542, 0, 554, 555, 541, 170, + 183, 272, 0, 341, 237, 433, 415, 411, 0, 0, + 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 172, 173, 184, 192, 202, 214, 227, + 235, 245, 249, 252, 255, 256, 259, 264, 281, 286, + 287, 288, 289, 305, 306, 307, 310, 313, 314, 317, + 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, + 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, + 367, 368, 376, 380, 395, 396, 407, 419, 423, 246, + 403, 424, 0, 280, 0, 0, 282, 231, 248, 257, + 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, + 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, + 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, + 0, 0, 0, 0, 501, 0, 0, 0, 222, 0, + 500, 0, 0, 0, 270, 0, 0, 0, 326, 0, + 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, + 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, + 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, + 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, + 236, 71, 0, 0, 167, 168, 169, 522, 521, 524, + 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, + 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, + 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 512, 513, 0, 0, 0, 0, 559, + 0, 514, 0, 0, 507, 508, 510, 509, 511, 516, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, + 0, 298, 0, 558, 0, 0, 420, 0, 0, 556, + 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, + 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, + 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, + 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, + 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, + 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, + 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, + 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, + 211, 311, 397, 398, 210, 434, 189, 417, 182, 0, + 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, + 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, + 0, 176, 0, 375, 410, 435, 195, 0, 0, 388, + 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, + 425, 427, 428, 430, 194, 334, 247, 315, 405, 233, + 413, 303, 190, 253, 371, 267, 276, 0, 0, 321, + 352, 199, 408, 372, 546, 557, 552, 553, 550, 551, + 545, 549, 548, 547, 560, 537, 538, 539, 540, 542, + 0, 554, 555, 541, 170, 183, 272, 0, 341, 237, + 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 172, 173, + 184, 192, 202, 214, 227, 235, 245, 249, 252, 255, + 256, 259, 264, 281, 286, 287, 288, 289, 305, 306, + 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, + 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, + 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, + 396, 407, 419, 423, 246, 403, 424, 0, 280, 0, + 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, + 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, + 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, + 385, 387, 294, 219, 312, 0, 0, 0, 0, 0, + 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, + 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, + 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, + 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, + 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, + 260, 206, 175, 309, 374, 236, 71, 0, 0, 167, + 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, + 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, + 217, 389, 0, 0, 0, 0, 515, 0, 543, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, + 0, 0, 0, 0, 559, 0, 514, 0, 0, 507, + 508, 510, 509, 511, 516, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 0, 298, 0, 558, 0, + 0, 420, 0, 0, 556, 0, 0, 0, 0, 0, + 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, + 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, + 344, 327, 349, 2191, 0, 350, 275, 394, 339, 404, + 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, + 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, + 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, + 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, + 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, + 434, 189, 417, 182, 0, 416, 304, 393, 401, 293, + 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, + 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, + 435, 195, 0, 0, 388, 426, 431, 0, 340, 196, + 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, + 334, 247, 315, 405, 233, 413, 303, 190, 253, 371, + 267, 276, 0, 0, 321, 352, 199, 408, 372, 546, + 557, 552, 553, 550, 551, 545, 549, 548, 547, 560, + 537, 538, 539, 540, 542, 0, 554, 555, 541, 170, + 183, 272, 0, 341, 237, 433, 415, 411, 0, 0, + 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 172, 173, 184, 192, 202, 214, 227, + 235, 245, 249, 252, 255, 256, 259, 264, 281, 286, + 287, 288, 289, 305, 306, 307, 310, 313, 314, 317, + 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, + 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, + 367, 368, 376, 380, 395, 396, 407, 419, 423, 246, + 403, 424, 0, 280, 0, 0, 282, 231, 248, 257, + 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, + 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, + 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, + 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, + 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, + 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, + 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, + 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, + 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, + 236, 71, 0, 578, 167, 168, 169, 522, 521, 524, + 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, + 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, + 0, 515, 0, 543, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 512, 513, 0, 0, 0, 0, 559, + 0, 514, 0, 0, 507, 508, 510, 509, 511, 516, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, + 0, 298, 0, 558, 0, 0, 420, 0, 0, 556, + 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, + 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, + 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, + 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, + 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, + 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, + 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, + 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, + 211, 311, 397, 398, 210, 434, 189, 417, 182, 0, + 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, + 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, + 0, 176, 0, 375, 410, 435, 195, 0, 0, 388, + 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, + 425, 427, 428, 430, 194, 334, 247, 315, 405, 233, + 413, 303, 190, 253, 371, 267, 276, 0, 0, 321, + 352, 199, 408, 372, 546, 557, 552, 553, 550, 551, + 545, 549, 548, 547, 560, 537, 538, 539, 540, 542, + 0, 554, 555, 541, 170, 183, 272, 0, 341, 237, + 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 172, 173, + 184, 192, 202, 214, 227, 235, 245, 249, 252, 255, + 256, 259, 264, 281, 286, 287, 288, 289, 305, 306, + 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, + 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, + 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, + 396, 407, 419, 423, 246, 403, 424, 0, 280, 0, + 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, + 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, + 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, + 385, 387, 294, 219, 312, 0, 0, 0, 0, 0, + 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, + 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, + 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, + 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, + 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, + 260, 206, 175, 309, 374, 236, 71, 0, 0, 167, + 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, + 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, + 217, 389, 0, 0, 0, 0, 515, 0, 543, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, + 0, 0, 0, 0, 559, 0, 514, 0, 0, 507, + 508, 510, 509, 511, 516, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 0, 298, 0, 558, 0, + 0, 420, 0, 0, 556, 0, 0, 0, 0, 0, + 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, + 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, + 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, + 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, + 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, + 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, + 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, + 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, + 434, 189, 417, 182, 0, 416, 304, 393, 401, 293, + 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, + 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, + 435, 195, 0, 0, 388, 426, 431, 0, 340, 196, + 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, + 334, 247, 315, 405, 233, 413, 303, 190, 253, 371, + 267, 276, 0, 0, 321, 352, 199, 408, 372, 546, + 557, 552, 553, 550, 551, 545, 549, 548, 547, 560, + 537, 538, 539, 540, 542, 0, 554, 555, 541, 170, + 183, 272, 0, 341, 237, 433, 415, 411, 0, 0, + 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 172, 173, 184, 192, 202, 214, 227, + 235, 245, 249, 252, 255, 256, 259, 264, 281, 286, + 287, 288, 289, 305, 306, 307, 310, 313, 314, 317, + 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, + 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, + 367, 368, 376, 380, 395, 396, 407, 419, 423, 246, + 403, 424, 0, 280, 0, 0, 282, 231, 248, 257, + 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, + 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, + 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, + 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, + 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, + 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, + 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, + 236, 0, 0, 0, 167, 168, 169, 0, 0, 0, + 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, + 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 963, + 962, 972, 973, 965, 966, 967, 968, 969, 970, 971, + 964, 0, 0, 974, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, + 0, 298, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, + 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, + 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, + 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, + 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, + 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, + 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, + 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, + 211, 311, 397, 398, 210, 434, 189, 417, 182, 0, + 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, + 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, + 0, 176, 0, 375, 410, 435, 195, 0, 0, 388, + 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, + 425, 427, 428, 430, 194, 334, 247, 315, 405, 233, + 413, 303, 190, 253, 371, 267, 276, 0, 0, 321, + 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 170, 183, 272, 0, 341, 237, + 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 172, 173, + 184, 192, 202, 214, 227, 235, 245, 249, 252, 255, + 256, 259, 264, 281, 286, 287, 288, 289, 305, 306, + 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, + 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, + 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, + 396, 407, 419, 423, 246, 403, 424, 0, 280, 0, + 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, + 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, + 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, + 385, 387, 294, 219, 312, 0, 0, 0, 0, 0, + 0, 0, 0, 222, 794, 0, 0, 0, 0, 270, + 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, + 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, + 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, + 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, + 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, + 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 0, 298, 0, 0, 0, + 793, 420, 0, 0, 0, 0, 0, 0, 790, 791, + 269, 756, 266, 171, 186, 784, 788, 308, 347, 353, + 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, + 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, + 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, + 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, + 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, + 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, + 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, + 434, 189, 417, 182, 0, 416, 304, 393, 401, 293, + 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, + 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, + 435, 195, 0, 0, 388, 426, 431, 0, 340, 196, + 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, + 334, 247, 315, 405, 233, 413, 303, 190, 253, 371, + 267, 276, 0, 0, 321, 352, 199, 408, 372, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, + 183, 272, 0, 341, 237, 433, 415, 411, 0, 0, + 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 172, 173, 184, 192, 202, 214, 227, + 235, 245, 249, 252, 255, 256, 259, 264, 281, 286, + 287, 288, 289, 305, 306, 307, 310, 313, 314, 317, + 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, + 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, + 367, 368, 376, 380, 395, 396, 407, 419, 423, 246, + 403, 424, 0, 280, 0, 0, 282, 231, 248, 257, + 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, + 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, + 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, + 0, 0, 0, 1066, 0, 0, 0, 0, 222, 0, + 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, + 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, + 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, + 236, 0, 0, 0, 167, 168, 169, 0, 1068, 0, + 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, + 0, 0, 218, 258, 224, 217, 389, 952, 953, 951, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 954, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, + 0, 298, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, + 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, + 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, + 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, + 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, + 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, + 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, + 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, + 211, 311, 397, 398, 210, 434, 189, 417, 182, 0, + 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, + 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, + 0, 176, 0, 375, 410, 435, 195, 0, 0, 388, + 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, + 425, 427, 428, 430, 194, 334, 247, 315, 405, 233, + 413, 303, 190, 253, 371, 267, 276, 0, 0, 321, + 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 170, 183, 272, 0, 341, 237, + 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 172, 173, + 184, 192, 202, 214, 227, 235, 245, 249, 252, 255, + 256, 259, 264, 281, 286, 287, 288, 289, 305, 306, + 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, + 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, + 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, + 396, 407, 419, 423, 246, 403, 424, 0, 280, 0, + 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, + 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, + 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, + 385, 387, 294, 219, 35, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, + 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, + 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, + 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, + 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 260, 206, 175, 309, 374, 236, 71, + 0, 578, 167, 168, 169, 0, 0, 0, 0, 0, + 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, + 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, + 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, + 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, + 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, + 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, + 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, + 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, + 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, + 397, 398, 210, 434, 189, 417, 182, 0, 416, 304, + 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, + 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, + 0, 375, 410, 435, 195, 0, 0, 388, 426, 431, + 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, + 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, + 190, 253, 371, 267, 276, 0, 0, 321, 352, 199, + 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 170, 183, 272, 0, 341, 237, 433, 415, + 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 172, 173, 184, 192, + 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, + 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, + 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, + 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, + 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, + 419, 423, 246, 403, 424, 0, 280, 0, 0, 282, + 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, + 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, + 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, + 294, 219, 312, 0, 0, 0, 1431, 0, 0, 0, + 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, + 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, + 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, + 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, + 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, + 0, 1433, 0, 0, 0, 0, 0, 0, 197, 0, + 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, + 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, + 349, 0, 1429, 350, 275, 394, 339, 404, 421, 422, + 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, + 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, + 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, + 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, + 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, + 417, 182, 0, 416, 304, 393, 401, 293, 284, 181, + 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, + 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, + 0, 0, 388, 426, 431, 0, 340, 196, 241, 229, + 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, + 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, + 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 183, 272, + 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 172, 173, 184, 192, 202, 214, 227, 235, 245, + 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, + 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, + 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, + 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, + 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, + 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, + 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, + 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, + 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, + 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, + 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, + 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, + 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, + 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, + 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, + 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 756, 266, 171, 186, 754, 0, + 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, + 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, + 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, + 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, + 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, + 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, + 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, + 397, 398, 210, 434, 189, 417, 182, 0, 416, 304, + 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, + 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, + 0, 375, 410, 435, 195, 0, 0, 388, 426, 431, + 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, + 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, + 190, 253, 371, 267, 276, 0, 0, 321, 352, 199, + 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 170, 183, 272, 0, 341, 237, 433, 415, + 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 172, 173, 184, 192, + 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, + 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, + 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, + 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, + 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, + 419, 423, 246, 403, 424, 0, 280, 0, 0, 282, + 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, + 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, + 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, + 294, 219, 312, 0, 0, 0, 1431, 0, 0, 0, + 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, + 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, + 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, + 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, + 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, + 0, 1433, 0, 0, 0, 0, 0, 0, 197, 0, + 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, + 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, + 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, + 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, + 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, + 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, + 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, + 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, + 417, 182, 0, 416, 304, 393, 401, 293, 284, 181, + 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, + 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, + 0, 0, 388, 426, 431, 0, 340, 196, 241, 229, + 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, + 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, + 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 183, 272, + 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 172, 173, 184, 192, 202, 214, 227, 235, 245, + 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, + 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, + 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, + 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, + 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, + 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, + 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, + 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, + 363, 383, 384, 385, 387, 294, 219, 35, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, + 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, + 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, + 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, + 374, 236, 71, 0, 0, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, + 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, + 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, + 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, + 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, + 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, + 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, + 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, + 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, + 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, + 0, 416, 304, 393, 401, 293, 284, 181, 399, 291, + 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, + 301, 0, 176, 0, 375, 410, 435, 195, 0, 0, + 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, + 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, + 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, + 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, + 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, + 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, + 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, + 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, + 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, + 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, + 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, + 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, + 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, + 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, + 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, + 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, + 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, + 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, + 167, 168, 169, 0, 0, 1451, 0, 0, 1452, 0, + 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, + 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, + 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, + 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, + 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, + 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, + 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, + 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, + 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, + 210, 434, 189, 417, 182, 0, 416, 304, 393, 401, + 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, + 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, + 410, 435, 195, 0, 0, 388, 426, 431, 0, 340, + 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, + 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, + 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, + 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 173, 184, 192, 202, 214, + 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, + 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, + 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, + 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, + 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, + 246, 403, 424, 0, 280, 0, 0, 282, 231, 248, + 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, + 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, + 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, + 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 0, 1099, 0, 0, 0, 270, 0, 0, 0, 326, + 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, + 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, + 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, + 374, 236, 0, 0, 0, 167, 168, 169, 0, 1098, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, + 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, + 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, + 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, + 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, + 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, + 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, + 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, + 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, + 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, + 0, 416, 304, 393, 401, 293, 284, 181, 399, 291, + 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, + 301, 0, 176, 0, 375, 410, 435, 195, 0, 0, + 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, + 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, + 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, + 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, + 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, + 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, + 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, + 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, + 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, + 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, + 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, + 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, + 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, + 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, + 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, + 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, + 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, + 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 0, 0, 578, + 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, + 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, + 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, + 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, + 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, + 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, + 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, + 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, + 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, + 210, 434, 189, 417, 182, 0, 416, 304, 393, 401, + 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, + 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, + 410, 435, 195, 0, 0, 388, 426, 431, 0, 340, + 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, + 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, + 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, + 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 173, 184, 192, 202, 214, + 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, + 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, + 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, + 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, + 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, + 246, 403, 424, 0, 280, 0, 0, 282, 231, 248, + 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, + 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, + 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, + 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, + 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, + 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, + 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, + 374, 236, 71, 0, 0, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, + 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, + 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, + 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, + 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, + 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, + 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, + 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, + 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, + 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, + 0, 416, 304, 393, 401, 293, 284, 181, 399, 291, + 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, + 301, 0, 176, 0, 375, 410, 435, 195, 0, 0, + 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, + 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, + 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, + 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, + 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, + 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, + 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, + 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, + 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, + 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, + 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, + 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, + 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, + 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, + 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, + 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, + 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, + 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, + 167, 168, 169, 0, 1433, 0, 0, 0, 0, 0, + 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, + 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, + 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, + 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, + 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, + 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, + 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, + 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, + 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, + 210, 434, 189, 417, 182, 0, 416, 304, 393, 401, + 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, + 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, + 410, 435, 195, 0, 0, 388, 426, 431, 0, 340, + 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, + 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, + 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, + 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 173, 184, 192, 202, 214, + 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, + 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, + 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, + 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, + 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, + 246, 403, 424, 0, 280, 0, 0, 282, 231, 248, + 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, + 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, + 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, + 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, + 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, + 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, + 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, + 374, 236, 0, 0, 0, 167, 168, 169, 0, 1068, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, + 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, + 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, + 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, + 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, + 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, + 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, + 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, + 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, + 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, + 0, 416, 304, 393, 401, 293, 284, 181, 399, 291, + 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, + 301, 0, 176, 0, 375, 410, 435, 195, 0, 0, + 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, + 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, + 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, + 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, + 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, + 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, + 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, + 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, + 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, + 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, + 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, + 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, + 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, + 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, + 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, + 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, + 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, + 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, + 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, + 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, + 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, + 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, + 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, + 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, + 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, + 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, + 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, + 210, 434, 189, 417, 182, 0, 416, 304, 393, 401, + 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, + 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, + 410, 435, 195, 0, 0, 388, 426, 431, 0, 340, + 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, + 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, + 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 183, 272, 1336, 341, 237, 433, 415, 411, 0, + 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 173, 184, 192, 202, 214, + 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, + 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, + 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, + 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, + 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, + 246, 403, 424, 0, 280, 0, 0, 282, 231, 248, + 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, + 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, + 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, + 312, 0, 1221, 0, 0, 0, 0, 0, 0, 222, + 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, + 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, + 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, + 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, + 374, 236, 0, 0, 0, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, + 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, + 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, + 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, + 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, + 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, + 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, + 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, + 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, + 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, + 0, 416, 304, 393, 401, 293, 284, 181, 399, 291, + 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, + 301, 0, 176, 0, 375, 410, 435, 195, 0, 0, + 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, + 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, + 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, + 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, + 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, + 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, + 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, + 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, + 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, + 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, + 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, + 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, + 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, + 384, 385, 387, 294, 219, 312, 0, 1219, 0, 0, + 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, + 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, + 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, + 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, + 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, + 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, + 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, + 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, + 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, + 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, + 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, + 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, + 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, + 210, 434, 189, 417, 182, 0, 416, 304, 393, 401, + 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, + 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, + 410, 435, 195, 0, 0, 388, 426, 431, 0, 340, + 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, + 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, + 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, + 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 173, 184, 192, 202, 214, + 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, + 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, + 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, + 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, + 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, + 246, 403, 424, 0, 280, 0, 0, 282, 231, 248, + 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, + 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, + 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, + 312, 0, 1217, 0, 0, 0, 0, 0, 0, 222, + 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, + 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, + 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, + 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, + 374, 236, 0, 0, 0, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, + 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, + 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, + 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, + 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, + 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, + 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, + 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, + 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, + 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, + 0, 416, 304, 393, 401, 293, 284, 181, 399, 291, + 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, + 301, 0, 176, 0, 375, 410, 435, 195, 0, 0, + 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, + 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, + 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, + 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, + 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, + 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, + 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, + 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, + 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, + 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, + 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, + 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, + 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, + 384, 385, 387, 294, 219, 312, 0, 1215, 0, 0, + 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, + 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, + 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, + 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, + 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, + 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, + 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, + 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, + 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, + 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, + 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, + 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, + 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, + 210, 434, 189, 417, 182, 0, 416, 304, 393, 401, + 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, + 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, + 410, 435, 195, 0, 0, 388, 426, 431, 0, 340, + 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, + 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, + 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, + 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 173, 184, 192, 202, 214, + 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, + 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, + 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, + 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, + 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, + 246, 403, 424, 0, 280, 0, 0, 282, 231, 248, + 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, + 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, + 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, + 312, 0, 1213, 0, 0, 0, 0, 0, 0, 222, + 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, + 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, + 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, + 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, + 374, 236, 0, 0, 0, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, + 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, + 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, + 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, + 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, + 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, + 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, + 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, + 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, + 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, + 0, 416, 304, 393, 401, 293, 284, 181, 399, 291, + 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, + 301, 0, 176, 0, 375, 410, 435, 195, 0, 0, + 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, + 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, + 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, + 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, + 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, + 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, + 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, + 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, + 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, + 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, + 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, + 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, + 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, + 384, 385, 387, 294, 219, 312, 0, 1209, 0, 0, + 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, + 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, + 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, + 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, + 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, + 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, + 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, + 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, + 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, + 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, + 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, + 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, + 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, + 210, 434, 189, 417, 182, 0, 416, 304, 393, 401, + 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, + 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, + 410, 435, 195, 0, 0, 388, 426, 431, 0, 340, + 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, + 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, + 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, + 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 173, 184, 192, 202, 214, + 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, + 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, + 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, + 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, + 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, + 246, 403, 424, 0, 280, 0, 0, 282, 231, 248, + 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, + 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, + 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, + 312, 0, 1207, 0, 0, 0, 0, 0, 0, 222, + 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, + 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, + 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, + 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, + 374, 236, 0, 0, 0, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, + 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, + 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, + 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, + 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, + 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, + 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, + 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, + 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, + 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, + 0, 416, 304, 393, 401, 293, 284, 181, 399, 291, + 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, + 301, 0, 176, 0, 375, 410, 435, 195, 0, 0, + 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, + 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, + 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, + 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, + 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, + 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, + 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, + 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, + 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, + 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, + 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, + 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, + 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, + 384, 385, 387, 294, 219, 312, 0, 1205, 0, 0, + 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, + 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, + 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, + 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, + 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, + 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, + 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, + 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, + 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, + 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, + 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, + 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, + 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, + 210, 434, 189, 417, 182, 0, 416, 304, 393, 401, + 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, + 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, + 410, 435, 195, 0, 0, 388, 426, 431, 0, 340, + 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, + 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, + 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, + 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 173, 184, 192, 202, 214, + 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, + 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, + 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, + 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, + 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, + 246, 403, 424, 0, 280, 0, 0, 282, 231, 248, + 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, + 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, + 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, + 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, + 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, + 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, + 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, + 374, 236, 1180, 0, 0, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, + 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, + 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, + 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, + 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, + 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, + 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, + 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, + 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, + 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, + 0, 416, 304, 393, 401, 293, 284, 181, 399, 291, + 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, + 301, 0, 176, 0, 375, 410, 435, 195, 0, 0, + 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, + 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, + 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, + 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, + 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, + 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, + 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, + 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, + 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, + 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, + 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, + 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, + 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, + 384, 385, 387, 294, 219, 1081, 0, 0, 0, 0, + 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, + 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, + 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, + 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, + 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, + 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, + 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, + 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, + 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, + 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, + 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, + 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, + 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, + 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, + 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, + 417, 182, 0, 416, 304, 393, 401, 293, 284, 181, + 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, + 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, + 0, 0, 388, 426, 431, 0, 340, 196, 241, 229, + 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, + 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, + 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 183, 272, + 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 172, 173, 184, 192, 202, 214, 227, 235, 245, + 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, + 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, + 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, + 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, + 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, + 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, + 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, + 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, + 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, + 0, 0, 0, 0, 0, 1072, 222, 0, 0, 0, + 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, + 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, + 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, + 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, + 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, + 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, + 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, + 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, + 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, + 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, + 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, + 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, + 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, + 397, 398, 210, 434, 189, 417, 182, 0, 416, 304, + 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, + 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, + 0, 375, 410, 435, 195, 0, 0, 388, 426, 431, + 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, + 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, + 190, 253, 371, 267, 276, 0, 0, 321, 352, 199, + 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 170, 183, 272, 0, 341, 237, 433, 415, + 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 172, 173, 184, 192, + 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, + 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, + 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, + 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, + 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, + 419, 423, 246, 403, 424, 0, 280, 0, 0, 282, + 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, + 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, + 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, + 294, 219, 312, 0, 0, 0, 0, 0, 0, 0, + 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, + 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, + 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, + 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, + 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, + 0, 928, 0, 0, 0, 0, 0, 0, 197, 0, + 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, + 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, + 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, + 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, + 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, + 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, + 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, + 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, + 417, 182, 0, 416, 304, 393, 401, 293, 284, 181, + 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, + 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, + 0, 0, 388, 426, 431, 0, 340, 196, 241, 229, + 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, + 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, + 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 183, 272, + 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 172, 173, 184, 192, 202, 214, 227, 235, 245, + 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, + 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, + 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, + 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, + 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, + 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, + 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, + 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, + 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, + 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, + 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, + 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, + 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, + 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, + 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, + 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 489, 0, 244, 0, 298, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, + 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, + 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, + 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, + 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, + 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, + 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, + 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, + 397, 398, 210, 434, 189, 417, 182, 0, 416, 304, + 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, + 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, + 0, 375, 410, 435, 195, 0, 0, 388, 426, 431, + 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, + 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, + 190, 253, 371, 267, 276, 0, 0, 321, 352, 199, + 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 170, 183, 272, 0, 341, 237, 433, 415, + 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 172, 173, 184, 192, + 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, + 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, + 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, + 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, + 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, + 419, 423, 488, 403, 424, 0, 280, 0, 0, 282, + 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, + 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, + 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, + 294, 219, 312, 0, 0, 0, 0, 0, 0, 0, + 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, + 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, + 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, + 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, + 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, + 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, + 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 0, 298, 0, 0, 438, 0, 420, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, + 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, + 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, + 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, + 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, + 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, + 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, + 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, + 417, 182, 0, 416, 304, 393, 401, 293, 284, 181, + 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, + 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, + 0, 0, 388, 426, 431, 0, 340, 196, 241, 229, + 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, + 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, + 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 183, 272, + 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 172, 173, 184, 192, 202, 214, 227, 235, 245, + 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, + 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, + 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, + 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, + 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, + 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, + 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, + 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, + 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, + 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, + 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, + 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, + 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, + 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, + 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, + 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, + 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, + 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, + 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, + 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, + 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, + 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, + 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, + 397, 398, 210, 434, 189, 417, 182, 0, 416, 304, + 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, + 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, + 0, 375, 410, 435, 195, 0, 0, 388, 426, 431, + 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, + 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, + 190, 253, 371, 267, 276, 0, 0, 321, 352, 199, + 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 170, 183, 272, 0, 341, 237, 433, 415, + 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 172, 173, 184, 192, + 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, + 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, + 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, + 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, + 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, + 419, 423, 246, 403, 424, 0, 280, 0, 0, 282, + 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, + 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, + 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, + 294, 219, 161, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1803, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 161, 0, 0, 103, 0, 125, + 0, 0, 0, 0, 0, 1173, 0, 0, 145, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, + 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, + 145, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 142, 0, 143, 0, 124, 0, 0, 1177, + 1178, 134, 133, 160, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 142, 0, 143, 0, 0, 0, + 0, 1177, 1178, 134, 133, 160, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 1179, 136, 0, 1176, 0, 130, 131, 0, + 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 151, 129, 1179, 136, 0, 1176, 0, 130, + 131, 0, 0, 0, 146, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 0, 0, 127, 0, 0, + 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 126, 0, 0, 127, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 139, 144, + 141, 147, 148, 149, 150, 152, 153, 154, 155, 0, + 0, 0, 0, 0, 156, 157, 158, 159, 0, 0, + 139, 144, 141, 147, 148, 149, 150, 152, 153, 154, + 155, 0, 0, 0, 0, 0, 156, 157, 158, 159, } var yyPact = [...]int{ - 3583, -1000, -346, 1591, -1000, -1000, -1000, -1000, -1000, -1000, + 2392, -1000, -337, 1594, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1546, 1147, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 551, 1196, 122, 1430, 3694, 202, 27301, 397, - 181, 26846, 393, 91, 27301, -1000, 115, -1000, 102, 27301, - 109, 26391, -1000, -1000, -259, 12253, 1373, 16, 12, 27301, - 133, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1200, - 1489, 1500, 1544, 1037, 1654, -1000, 10420, 10420, 343, 343, - 343, 8600, -1000, -1000, 16361, 27301, 27301, 1205, 392, 935, - 387, 386, 381, -1000, -124, -1000, -1000, -1000, -1000, 1430, - -1000, -1000, 161, -1000, 277, 1153, -1000, 1152, -1000, 416, - 394, 273, 322, 321, 272, 262, 259, 256, 252, 249, - 245, 243, 279, -1000, 525, 525, -162, -165, 3042, 326, - 326, 326, 364, 1385, 1384, -1000, 484, -1000, 525, 525, - 157, 525, 525, 525, 525, 207, 206, 525, 525, 525, - 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, - 525, 525, -1000, -1000, 162, 580, 261, 584, 1430, 186, + -1000, -1000, -1000, 1562, 1237, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 533, 1276, -1000, 1477, 4012, -1000, 27028, 393, + -1000, 26573, 392, 113, 27028, -1000, 117, -1000, 107, 27028, + 112, 26118, -1000, -1000, -281, 11980, 1431, 23, 12, 27028, + 127, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1269, + 1515, 1528, 1560, 1084, 1741, -1000, 10147, 10147, 357, 357, + 357, 8327, -1000, -1000, 16088, 27028, 27028, 188, -1000, 1477, + -1000, -1000, 163, -1000, 277, 1244, -1000, 1242, -1000, 595, + 461, 274, 345, 335, 273, 268, 266, 264, 262, 259, + 258, 257, 281, -1000, 545, 545, -173, -175, 2205, 319, + 319, 319, 372, 1447, 1446, -1000, 499, -1000, 545, 545, + 143, 545, 545, 545, 545, 216, 210, 545, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, + 545, 545, 141, 1477, 179, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -3922,27 +3942,26 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 27028, 137, 27028, -1000, + 444, 27028, 607, 607, 20, 607, 607, 607, 607, 77, + 493, 10, -1000, 74, 218, 196, 172, 626, 227, 67, + -1000, -1000, 169, 626, 87, -1000, 607, 6451, 6451, 6451, + -1000, 1471, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 368, -1000, -1000, -1000, -1000, 27028, 25663, 279, 582, -1000, + -1000, -1000, 3, -1000, -1000, 1147, 732, -1000, 11980, 2667, + 1246, 1246, -1000, -1000, 412, -1000, -1000, 13345, 13345, 13345, + 13345, 13345, 13345, 13345, 13345, 13345, 13345, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 27301, 391, 935, 331, -1000, 27301, -1000, 456, 27301, - 620, 620, 64, 620, 620, 620, 620, 121, 465, 8, - -1000, 108, 199, 175, 170, 608, 124, 60, -1000, -1000, - 164, 608, 128, -1000, 620, 6724, 6724, 6724, -1000, 1420, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 358, -1000, - -1000, -1000, -1000, 27301, 25936, 271, 579, -1000, -1000, -1000, - -6, -1000, -1000, 1069, 737, -1000, 12253, 1305, 1149, 1149, - -1000, -1000, 427, -1000, -1000, 13618, 13618, 13618, 13618, 13618, - 13618, 13618, 13618, 13618, 13618, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1149, - 448, -1000, 11798, 1149, 1149, 1149, 1149, 1149, 1149, 1149, - 1149, 12253, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, - 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, -1000, - -1000, -1000, 27301, -1000, 1149, 901, 1546, -1000, 1147, -1000, - -1000, -1000, 1427, 12253, 12253, 1546, -1000, 1301, 10420, -1000, - -1000, 1493, -1000, -1000, -1000, -1000, -1000, 688, 1567, -1000, - 14983, 445, 1559, 25481, -1000, 19104, 25026, 1143, 8131, -74, - -1000, -1000, -1000, 577, 18194, -1000, -1000, -1000, -1000, -1000, + -1000, 1246, 441, -1000, 11525, 1246, 1246, 1246, 1246, 1246, + 1246, 1246, 1246, 11980, 1246, 1246, 1246, 1246, 1246, 1246, + 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, + 1246, -1000, -1000, -1000, 27028, -1000, 1246, 996, 1562, -1000, + 1237, -1000, -1000, -1000, 1473, 11980, 11980, 1562, -1000, 1381, + 10147, -1000, -1000, 1627, -1000, -1000, -1000, -1000, -1000, 721, + 1580, -1000, 14710, 440, 1578, 25208, -1000, 18831, 24753, 1241, + 7858, -35, -1000, -1000, -1000, 577, 17921, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1420, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1471, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -3954,188 +3973,190 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1046, 27301, -1000, - -1000, 4261, 935, -1000, 1194, -1000, 1043, -1000, 1176, 162, - -1000, 1223, 935, 935, 935, 333, -1000, -1000, -1000, 525, - 525, 257, 3694, 4015, -1000, -1000, -1000, 24564, 1193, 935, - -1000, 1190, -1000, 1448, 352, 531, 531, 935, -1000, -1000, - 27301, 935, 1447, 1446, 27301, 27301, -1000, 24109, -1000, 23654, - 23199, 816, 27301, 22744, 22289, 21834, 21379, 20924, -1000, 1262, - -1000, 1159, -1000, -1000, -1000, 27301, 27301, 27301, 39, -1000, - -1000, 27301, 935, -1000, -1000, 790, 789, 525, 525, 775, - 899, 890, 889, 525, 525, 771, 887, 927, 182, 770, - 768, 765, 879, 883, 107, 874, 774, 764, 27301, 1189, - 27301, 156, 549, 216, 254, 204, 27301, 126, 1482, 152, - 1430, 1372, 1142, 357, -1000, 1249, 27301, 1471, 331, -1000, - 7193, -1000, -1000, 882, 12253, -1000, 611, 608, 608, -1000, - -1000, -1000, -1000, -1000, -1000, 620, 27301, 611, -1000, -1000, - -1000, 608, 620, 27301, 620, 620, 620, 620, 608, 620, - 27301, 27301, 27301, 27301, 27301, 27301, 27301, 27301, 27301, 6724, - 6724, 6724, 498, 620, -1000, 1247, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 105, -1000, -1000, -1000, -1000, -1000, - 1591, -1000, -1000, -1000, -112, 1137, 20469, -1000, -287, -289, - -290, -292, -1000, -1000, -1000, -293, -294, -1000, -1000, -1000, - 12253, 12253, 12253, 12253, 677, 504, 13618, 720, 617, 13618, - 13618, 13618, 13618, 13618, 13618, 13618, 13618, 13618, 13618, 13618, - 13618, 13618, 13618, 13618, 675, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 935, -1000, 1561, 1376, 1376, 475, 475, - 475, 475, 475, 475, 475, 475, 475, 14073, 9055, 7193, - 1037, 1041, 1546, 10420, 10420, 12253, 12253, 11330, 10875, 10420, - 1424, 591, 737, 27301, -1000, 911, -1000, -1000, 13163, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1121, + 27028, -1000, -1000, 2679, 918, -1000, 1275, -1000, 1112, -1000, + 1254, 1284, 391, 918, 384, 382, 381, -1000, -118, -1000, + -1000, -1000, -1000, -1000, 545, 545, 280, 4012, 27519, -1000, + -1000, -1000, 24291, 1274, 918, -1000, 1271, -1000, 1490, 341, + 519, 519, 918, -1000, -1000, 27028, 918, 1489, 1488, 27028, + 27028, -1000, 23836, -1000, 23381, 22926, 863, 27028, 22471, 22016, + 21561, 21106, 20651, -1000, 1332, -1000, 1229, -1000, -1000, -1000, + 27028, 27028, 27028, 32, -1000, -1000, 27028, 918, -1000, -1000, + 853, 850, 545, 545, 849, 986, 977, 975, 545, 545, + 842, 968, 1048, 170, 840, 835, 831, 898, 967, 109, + 830, 800, 829, 27028, 1270, 27028, -1000, 165, 495, 261, + 555, 1477, 1421, 1240, 363, 390, 918, 324, -1000, -1000, + 6920, -1000, -1000, 959, 11980, -1000, 633, 626, 626, -1000, + -1000, -1000, -1000, -1000, -1000, 607, 27028, 633, -1000, -1000, + -1000, 626, 607, 27028, 607, 607, 607, 607, 626, 607, + 27028, 27028, 27028, 27028, 27028, 27028, 27028, 27028, 27028, 6451, + 6451, 6451, 514, 607, -1000, 1339, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 111, -1000, -1000, -1000, -1000, -1000, + 1594, -1000, -1000, -1000, -109, 1218, 20196, -1000, -285, -286, + -287, -293, -1000, -1000, -1000, -295, -298, -1000, -1000, -1000, + 11980, 11980, 11980, 11980, 734, 522, 13345, 784, 764, 13345, + 13345, 13345, 13345, 13345, 13345, 13345, 13345, 13345, 13345, 13345, + 13345, 13345, 13345, 13345, 608, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 918, -1000, 1581, 1020, 1020, 454, 454, + 454, 454, 454, 454, 454, 454, 454, 13800, 8782, 6920, + 1084, 1107, 1562, 10147, 10147, 11980, 11980, 11057, 10602, 10147, + 1463, 625, 732, 27028, -1000, 1009, -1000, -1000, 12890, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 27301, 27301, 10420, 10420, 10420, 10420, 10420, -1000, 1136, - -1000, -161, 15906, 12253, -1000, 1500, 1037, 1493, 1453, 1585, - 494, 837, 1132, -1000, 777, 1500, 17739, 1151, -1000, 1493, - -1000, -1000, -1000, 27301, -1000, -1000, 20014, -1000, -1000, 6255, - 27301, 232, 27301, -1000, 1116, 1480, -1000, -1000, -1000, 1485, - 17284, 27301, 1119, 1076, -1000, -1000, 441, 7662, -74, -1000, - 7662, 1110, -1000, -23, -67, 9510, 470, -1000, -1000, -1000, - 3042, 14528, 1027, -1000, 51, -1000, -1000, -1000, 1176, -1000, - 1176, 1176, 1176, 1176, 39, 39, 39, 39, -1000, -1000, - -1000, -1000, -1000, 1188, 1186, -1000, 1176, 1176, 1176, 1176, + -1000, 27028, 27028, 10147, 10147, 10147, 10147, 10147, -1000, 1212, + -1000, -168, 15633, 11980, -1000, 1528, 1084, 1627, 1498, 1588, + 480, 913, 1211, -1000, 871, 1528, 17466, 1213, -1000, 1627, + -1000, -1000, -1000, 27028, -1000, -1000, 19741, -1000, -1000, 5982, + 27028, 244, 27028, -1000, 1176, 1302, -1000, -1000, -1000, 1509, + 17011, 27028, 1197, 1186, -1000, -1000, 437, 7389, -35, -1000, + 7389, 1188, -1000, -40, -45, 9237, 452, -1000, -1000, -1000, + 2205, 14255, 1113, -1000, 33, -1000, -1000, -1000, 1254, -1000, + 1254, 1254, 1254, 1254, 32, 32, 32, 32, -1000, -1000, + -1000, -1000, -1000, 1266, 1262, -1000, 1254, 1254, 1254, 1254, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1184, 1184, 1184, - 1178, 1178, 318, -1000, 12253, 132, 27301, 1464, 752, 156, - 333, 1246, -1000, 27301, 1223, 1223, 1223, 27301, 607, 827, - 788, -1000, 1130, -1000, -1000, 1541, -1000, -1000, 474, 659, - 631, 487, 27301, 139, 227, -1000, 314, -1000, 27301, 1182, - 1444, 531, 935, -1000, 935, -1000, -1000, -1000, -1000, 436, - -1000, -1000, 935, 1129, -1000, 1090, 684, 628, 680, 626, - 1129, -1000, -1000, -144, 1129, -1000, 1129, -1000, 1129, -1000, - 1129, -1000, 1129, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 546, 27301, 139, 675, -1000, 351, -1000, -1000, 675, - 675, -1000, -1000, -1000, -1000, 873, 872, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1261, 1261, 1261, + 1257, 1257, 308, -1000, 11980, 184, 27028, 1497, 826, 165, + 330, 1304, 918, 918, 918, 330, -1000, 984, 906, -1000, + 1210, -1000, -1000, 1558, -1000, -1000, 615, 698, 696, 601, + 27028, 139, 241, -1000, 307, -1000, 27028, 1260, 1487, 519, + 918, -1000, 918, -1000, -1000, -1000, -1000, 436, -1000, -1000, + 918, 1201, -1000, 1217, 725, 678, 692, 664, 1201, -1000, + -1000, -140, 1201, -1000, 1201, -1000, 1201, -1000, 1201, -1000, + 1201, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 536, + 27028, 139, 608, -1000, 362, -1000, -1000, 608, 608, -1000, + -1000, -1000, -1000, 958, 957, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -335, 27301, -1000, 372, 144, 150, 27301, - 27301, 27301, 27301, 27301, 409, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 200, 27301, 27301, 331, 27301, 415, -1000, -1000, - 27301, -1000, -1000, -1000, -1000, 737, 27301, -1000, -1000, 620, - 620, -1000, -1000, 27301, 620, -1000, -1000, -1000, -1000, -1000, - -1000, 620, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 866, -1000, 27301, 27301, - -1000, -1000, -1000, -1000, -1000, 21, -26, 179, -1000, -1000, - -1000, -1000, 1492, -1000, 737, 504, 632, 519, -1000, -1000, - 733, -1000, -1000, 2416, -1000, -1000, -1000, -1000, 720, 13618, - 13618, 13618, 1241, 2416, 2202, 1005, 1111, 475, 656, 656, - 467, 467, 467, 467, 467, 615, 615, -1000, -1000, -1000, - -1000, 911, -1000, -1000, -1000, 911, 10420, 10420, 1126, 1149, - 434, -1000, 1200, -1000, -1000, 1500, 1015, 1015, 740, 950, - 564, 1557, 1015, 562, 1556, 1015, 1015, 10420, -1000, -1000, - 614, -1000, 12253, 911, -1000, 1815, 1123, 1118, 1015, 911, - 911, 1015, 1015, 27301, -1000, -275, -1000, -34, 477, 1149, - -1000, 19559, -1000, -1000, 911, 1069, 1427, -1000, -1000, 1358, - -1000, 1298, 12253, 12253, 12253, -1000, -1000, -1000, 1427, 1511, - -1000, 1328, 1311, 1551, 10420, 19104, 1493, -1000, -1000, -1000, - 430, 1551, 1101, 1149, -1000, 27301, 19104, 19104, 19104, 19104, - 19104, -1000, 1285, 1279, -1000, 1276, 1260, 1284, 27301, -1000, - 1033, 1037, 17284, 232, 1075, 19104, 27301, -1000, -1000, 19104, - 27301, 5786, -1000, 1110, -74, -81, -1000, -1000, -1000, -1000, - 737, -1000, 782, -1000, 2721, -1000, 316, -1000, -1000, -1000, - -1000, 669, 26, -1000, -1000, 39, 39, -1000, -1000, 470, - 686, 470, 470, 470, 863, 863, -1000, -1000, -1000, -1000, - -1000, 748, -1000, -1000, -1000, 728, -1000, -1000, 884, 1252, - 132, -1000, -1000, 525, 861, 1378, -1000, -1000, 983, 371, - 27301, 27301, -1000, 1245, 1243, 1240, -1000, 1470, -1000, -1000, - -1000, -1000, 3920, 27301, 1031, -1000, 136, 27301, 979, 27301, - -1000, 1021, 27301, -1000, 935, -1000, -1000, 7193, -1000, 27301, - 1149, -1000, -1000, -1000, -1000, 390, 1425, 1422, 139, 136, - 470, 935, -1000, -1000, -1000, -1000, -1000, -341, 1017, 27301, - 148, -1000, 1181, 905, -1000, 1219, -1000, -1000, -1000, -1000, - 138, 210, 192, 348, -1000, 27301, 1252, 27301, -1000, -1000, - -1000, -1000, 608, -1000, -1000, 608, -1000, -1000, -1000, -1000, - -1000, -1000, 1390, -28, -308, -1000, -305, -1000, -1000, -1000, - -1000, 1241, 2416, 2121, -1000, 13618, 13618, -1000, -1000, 1015, - 1015, 10420, 7193, 1546, 1427, -1000, -1000, 258, 675, 258, - 13618, 13618, -1000, 13618, 13618, -1000, -136, 1052, 547, -1000, - 12253, 857, -1000, -1000, 13618, 13618, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 380, 379, 378, 27301, -1000, - -1000, -1000, 794, 860, 1296, 737, 737, -1000, -1000, 27301, - -1000, -1000, -1000, -1000, 1549, 12253, -1000, 1103, -1000, 5317, - 1500, 1239, 27301, 1149, 1591, 15451, 27301, 1092, -1000, 548, - 1480, 1215, 1238, 1418, -1000, -1000, -1000, -1000, 1278, -1000, - 1270, -1000, -1000, -1000, -1000, -1000, 1037, 1551, 19104, 1079, - -1000, 1079, -1000, 418, -1000, -1000, -1000, -31, -73, -1000, - -1000, -1000, 3042, -1000, -1000, -1000, 682, 13618, 1581, -1000, - 855, 1442, -1000, 1440, -1000, -1000, 470, 470, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1012, -1000, 999, 1093, 997, - 72, -1000, 1096, 1389, 525, 525, -1000, 722, -1000, 935, - -1000, 27301, -1000, -1000, 27301, 27301, 27301, -1000, 1535, 1082, - -1000, 27301, -1000, -1000, 27301, -1000, -1000, 1310, 132, 982, - -1000, -1000, -1000, 227, 27301, -1000, 1376, 136, -1000, -1000, - -1000, -1000, -1000, -1000, 1171, -1000, -1000, -1000, 973, -1000, - -145, 935, 27301, 27301, 27301, -1000, 27301, 403, -1000, -1000, - 620, 620, -1000, 1388, -1000, 935, -1000, 13618, 2416, 2416, - -1000, -1000, 911, -1000, 1500, -1000, 911, 1176, 1176, -1000, - 1176, 1178, -1000, 1176, 93, 1176, 78, 911, 911, 2374, - 2326, 2294, 2187, 1149, -131, -1000, 737, 12253, 1704, 898, - 1149, 1149, 1149, 972, 852, 39, -1000, -1000, -1000, 1513, - 1525, 737, -1000, -1000, -1000, 1451, 1001, 1051, -1000, -1000, - 9965, 978, 1304, 413, 972, 1546, 27301, 12253, -1000, -1000, - 12253, 1175, -1000, 12253, -1000, -1000, -1000, 1546, 1546, 1079, - -1000, -1000, 473, -1000, -1000, -1000, -1000, -1000, 2416, -12, - -1000, -1000, -1000, -1000, -1000, 39, 851, 39, 721, -1000, - 718, -1000, -1000, -206, -1000, -1000, 1091, 1256, -1000, -1000, - 1171, -1000, -1000, -1000, 27301, 27301, -1000, -1000, 223, -1000, - 293, 967, -1000, -160, -1000, -1000, 1483, 27301, -1000, -1000, - 7193, -1000, -1000, 1155, 1222, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 2416, -1000, 1427, -1000, -1000, 224, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 13618, 13618, 13618, 13618, - 13618, 1500, 848, 737, 13618, 13618, 18649, 27301, 27301, 16816, - 39, 38, -1000, 12253, 12253, 1428, -1000, 1149, -1000, 1148, - 27301, 1149, 27301, -1000, 1500, -1000, 737, 737, 27301, 737, - 1500, -1000, -1000, 470, -1000, 470, 968, 957, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1473, 1082, -1000, 209, - 27301, -1000, 227, -1000, -167, -168, 1147, 942, 1078, -1000, - 513, 27301, 27301, -1000, -1000, -1000, 1815, 1815, 1815, 1815, - 85, 911, -1000, 1815, 1815, 940, -1000, 940, 940, 477, - -260, -1000, 1369, 1356, 737, 1069, 1578, -1000, 1149, 1591, - 408, 1051, -1000, -1000, 934, -1000, -1000, -1000, -1000, -1000, - 1147, 1149, 1102, -1000, -1000, -1000, 193, -1000, 7193, 4848, - 923, -1000, -1000, -1000, -1000, -1000, 911, 137, -148, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 38, 288, -1000, 1341, - 1356, -1000, 1524, 1362, 1520, -1000, 27301, 1051, 27301, -1000, - 193, 12708, 27301, -1000, -54, -1000, -1000, -1000, -1000, -1000, - 1219, -1000, 1295, -141, -153, 1340, 1342, 1342, 1341, -1000, - 1517, 1512, -1000, 847, 1502, 832, 928, -1000, -1000, 1815, - 911, 914, 315, -1000, -1000, -145, -1000, 1293, -1000, 1338, - 708, -1000, -1000, -1000, -1000, 820, 795, -1000, 741, -1000, - -1000, -1000, 1236, 159, -1000, -146, -1000, 705, -1000, -1000, - -1000, -1000, -1000, 1226, -1000, 1555, -1000, -151, -1000, -1000, - -1000, 1573, 478, 478, -156, -1000, -1000, -1000, 303, 738, + -1000, -333, 27028, -1000, 148, 554, 230, 228, 206, 27028, + 145, 1517, 168, 191, 27028, 27028, 324, 1338, 27028, 1503, + 324, -1000, -1000, -1000, -1000, 732, 27028, -1000, -1000, 607, + 607, -1000, -1000, 27028, 607, -1000, -1000, -1000, -1000, -1000, + -1000, 607, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 949, -1000, 27028, 27028, + -1000, -1000, -1000, -1000, -1000, 60, -54, 185, -1000, -1000, + -1000, -1000, 1519, -1000, 732, 522, 503, 506, -1000, -1000, + 785, -1000, -1000, 2345, -1000, -1000, -1000, -1000, 784, 13345, + 13345, 13345, 834, 2345, 2501, 1600, 876, 454, 682, 682, + 463, 463, 463, 463, 463, 712, 712, -1000, -1000, -1000, + -1000, 1009, -1000, -1000, -1000, 1009, 10147, 10147, 1200, 1246, + 435, -1000, 1269, -1000, -1000, 1528, 1090, 1090, 851, 917, + 580, 1577, 1090, 546, 1576, 1090, 1090, 10147, -1000, -1000, + 676, -1000, 11980, 1009, -1000, 1083, 1194, 1190, 1090, 1009, + 1009, 1090, 1090, 27028, -1000, -278, -1000, -101, 448, 1246, + -1000, 19286, -1000, -1000, 1009, 1147, 1473, -1000, -1000, 1426, + -1000, 1375, 11980, 11980, 11980, -1000, -1000, -1000, 1473, 1522, + -1000, 1387, 1386, 1571, 10147, 18831, 1627, -1000, -1000, -1000, + 430, 1571, 1193, 1246, -1000, 27028, 18831, 18831, 18831, 18831, + 18831, -1000, 1360, 1354, -1000, 1352, 1350, 1356, 27028, -1000, + 1103, 1084, 17011, 244, 1172, 18831, 27028, -1000, -1000, 18831, + 27028, 5513, -1000, 1188, -35, -42, -1000, -1000, -1000, -1000, + 732, -1000, 869, -1000, 289, -1000, 338, -1000, -1000, -1000, + -1000, 592, 35, -1000, -1000, 32, 32, -1000, -1000, 452, + 693, 452, 452, 452, 947, 947, -1000, -1000, -1000, -1000, + -1000, 806, -1000, -1000, -1000, 797, -1000, -1000, 628, 1327, + 184, -1000, -1000, 545, 946, 1436, 27028, -1000, -1000, 1066, + 148, 27028, 619, 1336, -1000, 1304, 1304, 1304, 27028, -1000, + -1000, -1000, -1000, 27497, 27028, 1101, -1000, 130, 27028, 1052, + 27028, -1000, 1097, 27028, -1000, 918, -1000, -1000, 6920, -1000, + 27028, 1246, -1000, -1000, -1000, -1000, 389, 1474, 1464, 139, + 130, 452, 918, -1000, -1000, -1000, -1000, -1000, -340, 1092, + 375, 144, 180, 27028, 27028, 27028, 27028, 27028, 404, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 182, 359, -1000, 27028, + 27028, 398, -1000, -1000, 27028, 626, -1000, -1000, 626, -1000, + -1000, -1000, -1000, -1000, -1000, 1457, -87, -309, -1000, -306, + -1000, -1000, -1000, -1000, 834, 2345, 2398, -1000, 13345, 13345, + -1000, -1000, 1090, 1090, 10147, 6920, 1562, 1473, -1000, -1000, + 373, 608, 373, 13345, 13345, -1000, 13345, 13345, -1000, -133, + 1146, 584, -1000, 11980, 951, -1000, -1000, 13345, 13345, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 380, 378, + 377, 27028, -1000, -1000, -1000, 859, 943, 1371, 732, 732, + -1000, -1000, 27028, -1000, -1000, -1000, -1000, 1566, 11980, -1000, + 1187, -1000, 5044, 1528, 1316, 27028, 1246, 1594, 15178, 27028, + 1163, -1000, 549, 1302, 1290, 1315, 1247, -1000, -1000, -1000, + -1000, 1353, -1000, 1342, -1000, -1000, -1000, -1000, -1000, 1084, + 1571, 18831, 1124, -1000, 1124, -1000, 429, -1000, -1000, -1000, + -97, -61, -1000, -1000, -1000, 2205, -1000, -1000, -1000, 701, + 13345, 1586, -1000, 940, 1486, -1000, 1484, -1000, -1000, 452, + 452, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1088, -1000, + 1078, 1179, 1076, 69, -1000, 1281, 1456, 545, 545, -1000, + 779, -1000, 918, -1000, -1000, 374, -1000, 1502, 27028, 1313, + 1312, 1311, -1000, 1553, 1167, -1000, 27028, -1000, -1000, 27028, + -1000, -1000, 1385, 184, 1069, -1000, -1000, -1000, 241, 27028, + -1000, 1020, 130, -1000, -1000, -1000, -1000, -1000, -1000, 27028, + 155, -1000, 1259, 1002, -1000, 1301, -1000, -1000, -1000, -1000, + 116, 229, -1000, 27028, 397, 1327, 27028, -1000, -1000, -1000, + -1000, 607, 607, -1000, 1452, -1000, 918, -1000, 13345, 2345, + 2345, -1000, -1000, 1009, -1000, 1528, -1000, 1009, 1254, 1254, + -1000, 1254, 1257, -1000, 1254, 79, 1254, 78, 1009, 1009, + 2316, 2131, 1877, 1679, 1246, -128, -1000, 732, 11980, 1536, + 1263, 1246, 1246, 1246, 1057, 939, 32, -1000, -1000, -1000, + 1564, 1551, 732, -1000, -1000, -1000, 1492, 1074, 1123, -1000, + -1000, 9692, 1060, 1384, 428, 1057, 1562, 27028, 11980, -1000, + -1000, 11980, 1253, -1000, 11980, -1000, -1000, -1000, 1562, 1562, + 1124, -1000, -1000, 470, -1000, -1000, -1000, -1000, -1000, 2345, + -141, -1000, -1000, -1000, -1000, -1000, 32, 912, 32, 777, + -1000, 735, -1000, -1000, -212, -1000, -1000, 1162, 1298, -1000, + -1000, 27028, -1000, -1000, 27028, 27028, 27028, 27028, 27028, -1000, + -1000, 237, -1000, 295, 1047, -1000, -170, -1000, -1000, 1251, + -1000, -1000, -1000, 1032, -1000, -144, 918, 27028, 27028, 27028, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2345, -1000, + 1473, -1000, -1000, 212, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 13345, 13345, 13345, 13345, 13345, 1528, 911, 732, + 13345, 13345, 18376, 27028, 27028, 16543, 32, 16, -1000, 11980, + 11980, 1479, -1000, 1246, -1000, 1224, 27028, 1246, 27028, -1000, + 1528, -1000, 732, 732, 27028, 732, 1528, -1000, -1000, 452, + -1000, 452, 1030, 1018, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1251, -1000, -1000, -1000, 1167, -1000, 234, 27028, + -1000, 241, -1000, -176, -177, 1507, 27028, -1000, -1000, 6920, + -1000, -1000, 1250, 1303, -1000, -1000, -1000, -1000, 1083, 1083, + 1083, 1083, 203, 1009, -1000, 1083, 1083, 1043, -1000, 1043, + 1043, 448, -263, -1000, 1416, 1413, 732, 1147, 1585, -1000, + 1246, 1594, 410, 1123, -1000, -1000, 1039, -1000, -1000, -1000, + -1000, -1000, 1505, 1246, 1238, -1000, -1000, -1000, 1237, 1037, + 1128, -1000, 543, 27028, 27028, -1000, -1000, -1000, -1000, 1009, + 140, -153, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 16, + 276, -1000, 1409, 1413, -1000, 1547, 1414, 1545, -1000, 27028, + 1123, 27028, -1000, 1237, 12435, 27028, 176, -1000, 6920, 4575, + 1023, -1000, -1000, 1370, -138, -156, 1396, 1406, 1406, 1409, + -1000, 1539, 1533, -1000, 909, 1523, 905, 1021, -1000, 176, + 1083, 1009, 1014, -1000, -55, -1000, -1000, -1000, -1000, -1000, + 1301, -1000, 1369, -1000, 1392, 762, -1000, -1000, -1000, -1000, + 900, 897, -1000, 873, -1000, -1000, -1000, -1000, 1310, 306, + -1000, -1000, -144, -151, -1000, 741, -1000, -1000, -1000, -1000, + -1000, 1309, -1000, 1575, 151, -1000, -154, -1000, -1000, -1000, + 1584, 467, 467, -1000, -167, -1000, -1000, -1000, 303, 823, -1000, -1000, -1000, -1000, -1000, } var yyPgo = [...]int{ - 0, 1889, 1888, 11, 84, 79, 1887, 1886, 1881, 1880, - 135, 134, 130, 1875, 1873, 1870, 1868, 1866, 1858, 1857, - 1856, 1855, 1854, 1853, 1852, 58, 125, 35, 38, 124, - 1850, 1848, 48, 1846, 1831, 1830, 122, 120, 484, 1829, - 127, 1828, 1823, 1821, 1816, 1815, 1814, 1813, 1812, 1811, - 1810, 1808, 1807, 1806, 1804, 129, 1802, 1800, 6, 1799, - 31, 1798, 1794, 1793, 1792, 1790, 83, 1789, 1788, 1785, - 114, 1784, 1783, 45, 338, 63, 74, 1782, 1780, 106, - 805, 1775, 107, 126, 1774, 194, 1773, 40, 80, 88, - 1772, 43, 1770, 1768, 50, 1767, 1765, 1763, 76, 1762, - 1761, 2917, 1760, 69, 78, 14, 33, 1758, 1757, 1754, - 1753, 36, 1877, 1750, 1749, 27, 1744, 1742, 140, 1741, - 81, 21, 1739, 15, 22, 17, 1738, 89, 1737, 44, - 51, 34, 1736, 86, 1733, 1731, 1729, 1728, 25, 1727, - 73, 98, 30, 1725, 1724, 7, 13, 1722, 1721, 1720, - 1712, 1708, 1706, 10, 1705, 4, 1704, 26, 1703, 18, - 23, 71, 72, 29, 9, 1701, 99, 1700, 28, 119, - 67, 117, 1697, 1694, 1693, 851, 141, 1692, 1690, 68, - 1688, 90, 102, 1687, 1407, 1686, 1685, 56, 1291, 2583, - 19, 112, 1684, 1682, 1611, 66, 77, 24, 1680, 57, - 1679, 1677, 1672, 121, 139, 75, 797, 42, 1671, 1665, - 1662, 1661, 1659, 1657, 1656, 47, 188, 20, 103, 32, - 1655, 1653, 1652, 64, 37, 1650, 110, 109, 65, 192, - 1649, 118, 94, 53, 1647, 104, 1645, 1644, 1643, 1640, - 41, 1639, 1638, 1636, 1634, 108, 85, 61, 46, 1633, - 39, 93, 101, 91, 1629, 16, 123, 8, 1626, 3, - 0, 1625, 5, 133, 1402, 105, 1624, 1623, 1, 1619, - 2, 1618, 1607, 82, 1606, 1604, 1599, 1598, 115, 850, - 113, 1597, 155, + 0, 1922, 1921, 12, 104, 89, 1920, 1919, 1918, 1917, + 131, 130, 129, 1916, 1915, 1913, 1912, 1911, 1910, 1906, + 1904, 1903, 1902, 1898, 1895, 47, 122, 36, 38, 136, + 1894, 1893, 29, 1890, 1889, 1888, 124, 121, 566, 1887, + 119, 1881, 1878, 1876, 1874, 1873, 1870, 1868, 1867, 1866, + 1865, 1864, 1863, 1862, 1861, 214, 1860, 1859, 7, 1856, + 34, 1854, 1851, 1848, 1845, 1843, 91, 1842, 1841, 1840, + 116, 1839, 1838, 51, 90, 50, 76, 1837, 1836, 78, + 126, 1834, 68, 103, 1833, 1370, 1832, 43, 81, 98, + 1831, 42, 1829, 1828, 64, 1827, 1826, 1825, 77, 1821, + 1806, 2444, 1804, 72, 87, 11, 39, 1798, 1797, 1796, + 1795, 30, 2177, 1794, 1790, 23, 1788, 1787, 134, 1786, + 93, 18, 1783, 20, 31, 22, 1781, 86, 1779, 40, + 56, 35, 1777, 85, 1776, 1775, 1774, 1773, 33, 1767, + 79, 108, 58, 1765, 1764, 19, 8, 1759, 1758, 1757, + 1755, 1751, 1750, 6, 1746, 4, 1745, 27, 1744, 9, + 15, 74, 69, 25, 14, 1741, 215, 1729, 24, 114, + 66, 111, 1728, 1727, 1724, 950, 144, 1722, 1718, 48, + 1717, 100, 99, 1716, 162, 1715, 1714, 80, 1284, 2407, + 53, 115, 1712, 1711, 2163, 61, 82, 17, 1710, 57, + 1707, 1706, 1702, 125, 140, 63, 838, 45, 1701, 1700, + 1698, 1697, 1695, 1694, 1693, 123, 37, 21, 107, 26, + 1680, 1678, 1677, 65, 46, 1663, 109, 106, 75, 135, + 1661, 117, 101, 71, 1660, 83, 1658, 1655, 1654, 1652, + 44, 1651, 1645, 1644, 1643, 110, 94, 73, 32, 1642, + 41, 59, 105, 102, 1641, 16, 120, 10, 1639, 3, + 0, 1633, 5, 128, 166, 118, 1629, 1628, 1, 1624, + 2, 1622, 1612, 88, 1610, 1603, 1602, 1601, 167, 28, + 113, 1600, 127, } //line sql.y:5200 @@ -4724,9 +4745,9 @@ var yyR2 = [...]int{ 8, 1, 3, 7, 8, 1, 1, 9, 9, 8, 7, 7, 1, 1, 1, 3, 1, 3, 1, 3, 0, 4, 3, 5, 4, 1, 3, 3, 2, 2, - 2, 2, 2, 1, 1, 1, 2, 2, 6, 11, + 2, 2, 2, 1, 1, 1, 2, 2, 6, 12, 2, 0, 2, 0, 2, 1, 0, 2, 1, 3, - 3, 6, 4, 6, 7, 7, 7, 5, 2, 1, + 3, 6, 4, 7, 8, 8, 8, 6, 3, 1, 1, 4, 0, 1, 1, 1, 2, 2, 0, 1, 4, 4, 4, 4, 2, 4, 1, 3, 1, 1, 3, 4, 3, 3, 3, 3, 0, 2, 3, 3, @@ -4753,12 +4774,12 @@ var yyR2 = [...]int{ 5, 5, 6, 6, 5, 5, 2, 2, 2, 2, 3, 3, 3, 4, 1, 3, 5, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 4, - 4, 2, 10, 3, 6, 7, 5, 5, 5, 12, - 7, 5, 9, 4, 4, 4, 4, 5, 3, 7, + 4, 2, 11, 3, 6, 8, 6, 6, 6, 13, + 8, 6, 10, 5, 5, 5, 5, 5, 3, 7, 4, 4, 4, 4, 3, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 0, 2, 2, 1, 3, 8, 8, 3, 3, 5, 7, - 6, 5, 5, 3, 2, 3, 3, 3, 7, 3, + 7, 6, 6, 3, 2, 3, 3, 3, 7, 3, 3, 3, 3, 4, 7, 5, 2, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 2, 4, 5, @@ -4865,86 +4886,84 @@ var yyChk = [...]int{ 237, -63, 190, 191, 159, 35, 42, 32, 33, 36, 162, 81, 9, 334, 187, 186, 26, -277, 474, -70, 5, -138, 16, -3, -55, -281, -55, -55, -55, -55, - -55, -55, -236, -238, 81, 126, 81, -71, -184, 165, - 174, 173, 170, -264, 107, 220, 325, 163, -39, -38, + -55, -55, -236, -238, 81, 126, 81, -55, -39, -38, -37, -36, -40, 30, -30, -31, -256, -29, -26, 158, 155, 200, 102, 103, 192, 193, 194, 157, 176, 191, 195, 190, 209, -25, 77, 32, 347, 350, -243, 154, 160, 161, 335, 105, 104, 72, 156, -240, 281, 451, -40, 453, 95, 97, 452, 41, 165, 454, 455, 456, 457, 175, 458, 459, 460, 461, 467, 468, 469, 470, - 106, 5, 164, -264, -80, 291, 227, 77, -198, -194, - -260, -188, 84, 85, 86, 344, 178, 378, 379, 225, - 77, 281, 451, 231, 245, 239, 266, 258, 345, 380, - 228, 179, 213, 448, 256, 312, 453, 381, 193, 304, - 286, 294, 95, 234, 321, 466, 230, 382, 464, 97, - 452, 76, 48, 41, 188, 254, 250, 454, 214, 383, - 355, 207, 105, 102, 473, 248, 47, 28, 463, 104, - 46, 455, 384, 456, 296, 271, 442, 45, 309, 194, - 385, 80, 349, 450, 298, 249, 295, 224, 462, 159, - 386, 434, 306, 443, 387, 272, 276, 388, 313, 49, - 389, 390, 444, 103, 391, 75, 457, 243, 244, 392, - 222, 177, 315, 270, 175, 34, 299, 346, 226, 55, - 201, 316, 43, 274, 42, 438, 393, 441, 269, 265, - 50, 394, 395, 396, 397, 458, 268, 242, 264, 472, - 219, 459, 59, 161, 278, 277, 279, 208, 311, 261, - 398, 399, 400, 182, 78, 401, 251, 19, 402, 403, - 307, 215, 404, 53, 405, 406, 319, 191, 407, 51, - 460, 38, 196, 461, 408, 409, 410, 411, 412, 305, - 413, 297, 273, 275, 203, 293, 348, 414, 247, 195, - 465, 415, 183, 449, 197, 200, 190, 320, 184, 416, - 417, 418, 419, 420, 229, 421, 422, 235, 467, 40, - 423, 424, 425, 426, 223, 218, 314, 323, 58, 79, - 283, 427, 447, 241, 216, 428, 232, 52, 468, 469, - 470, 210, 471, 289, 106, 220, 221, 44, 262, 202, - 429, 430, 252, 253, 267, 240, 263, 233, 435, 204, - 308, 192, 431, 322, 217, 284, 352, 209, 310, 446, - 351, 260, 257, 211, 432, 166, 205, 206, 433, 436, - 300, 290, 301, 302, 227, 303, 291, 212, 350, 255, - 285, 164, -184, 165, 166, -264, 164, -101, -194, 164, - -166, 286, -185, 287, 288, 299, 300, 306, -177, 307, - 305, 203, -275, 313, 164, 308, 153, 144, 296, 297, - 290, 303, 291, 212, -271, -260, 456, 471, 312, 259, - 292, 298, 314, 438, 302, 301, -194, 233, -201, 238, - -189, -260, -188, 236, -101, -61, 434, 157, -203, -203, - -72, 438, 440, -121, -85, -107, 110, -112, 30, 24, - -111, -108, -129, -126, -127, 144, 145, 147, 146, 148, - 133, 134, 141, 111, 149, -116, -114, -115, -117, 88, - 87, 96, 89, 90, 91, 92, 98, 99, 100, -189, - -194, -124, -278, 65, 66, 335, 336, 337, 338, 343, - 339, 113, 54, 330, 324, 333, 332, 331, 328, 329, - 326, 327, 341, 342, 169, 325, 163, 139, 334, -260, - -188, 41, 289, 289, -101, 227, -5, -4, -278, 6, - 21, 22, -142, 18, 17, -279, 83, -64, -77, 60, - 61, -79, 22, 37, 64, 62, 21, -56, -76, 135, - -85, -194, -76, -175, 168, -175, -175, -165, -206, 233, - -169, 314, 313, -190, -167, -189, -187, -166, 311, 158, - 353, 109, 23, 25, 112, 144, 17, 113, 36, 160, - 259, 176, 143, 172, 335, 153, 69, 354, 326, 327, - 324, 330, 337, 338, 325, 287, 30, 11, 356, 26, - 186, 22, 37, 137, 155, 116, 117, 189, 24, 187, - 100, 359, 20, 72, 181, 12, 174, 14, 360, 361, - 15, 169, 168, 128, 165, 67, 9, 149, 27, 125, - 63, 362, 29, 363, 364, 365, 366, 65, 126, 18, - 328, 329, 32, 439, 367, 343, 198, 139, 70, 56, - 440, 110, 368, 369, 98, 370, 101, 73, 445, 107, - 16, 68, 39, 371, 199, 372, 171, 373, 317, 374, - 127, 156, 334, 66, 375, 163, 288, 6, 340, 31, - 185, 173, 64, 376, 164, 115, 341, 342, 167, 99, - 5, 170, 33, 10, 71, 74, 331, 332, 333, 54, - 347, 114, 13, 377, 318, 108, 312, -237, 126, -224, - -228, -189, 180, -253, 176, -101, -246, -245, -189, -80, - 164, -260, 165, 165, 165, -55, 334, -36, -37, -166, - 143, 197, 82, 82, -228, -227, -226, -265, 199, 180, - -252, -244, 172, 181, -234, 173, 174, -229, 165, 29, - -265, -229, 171, 181, 199, 199, 106, 199, 106, 199, - 199, 199, 199, 199, 199, 199, 199, 199, 196, -235, - 118, -235, 351, 351, -240, -265, -265, -265, 167, 34, - 34, -186, -229, 167, 23, -235, -235, -166, 143, -235, - -235, -235, -235, 207, 207, -235, -235, -235, -235, -235, + 106, 5, -55, -198, -194, -260, -188, 84, 85, 86, + 344, 178, 378, 379, 225, 77, 281, 451, 231, 245, + 239, 266, 258, 345, 380, 228, 179, 213, 448, 256, + 312, 453, 381, 193, 304, 286, 294, 95, 234, 321, + 466, 230, 382, 464, 97, 452, 76, 48, 41, 188, + 254, 250, 454, 214, 383, 355, 207, 105, 102, 473, + 248, 47, 28, 463, 104, 46, 455, 384, 456, 296, + 271, 442, 45, 309, 194, 385, 80, 349, 450, 298, + 249, 295, 224, 462, 159, 386, 434, 306, 443, 387, + 272, 276, 388, 313, 49, 389, 390, 444, 103, 391, + 75, 457, 243, 244, 392, 222, 177, 315, 270, 175, + 34, 299, 346, 226, 55, 201, 316, 43, 274, 42, + 438, 393, 441, 269, 265, 50, 394, 395, 396, 397, + 458, 268, 242, 264, 472, 219, 459, 59, 161, 278, + 277, 279, 208, 311, 261, 398, 399, 400, 182, 78, + 401, 251, 19, 402, 403, 307, 215, 404, 53, 405, + 406, 319, 191, 407, 51, 460, 38, 196, 461, 408, + 409, 410, 411, 412, 305, 413, 297, 273, 275, 203, + 293, 348, 414, 247, 195, 465, 415, 183, 449, 197, + 200, 190, 320, 184, 416, 417, 418, 419, 420, 229, + 421, 422, 235, 467, 40, 423, 424, 425, 426, 223, + 218, 314, 323, 58, 79, 283, 427, 447, 241, 216, + 428, 232, 52, 468, 469, 470, 210, 471, 289, 106, + 220, 221, 44, 262, 202, 429, 430, 252, 253, 267, + 240, 263, 233, 435, 204, 308, 192, 431, 322, 217, + 284, 352, 209, 310, 446, 351, 260, 257, 211, 432, + 166, 205, 206, 433, 436, 300, 290, 301, 302, 227, + 303, 291, 212, 350, 255, 285, 164, -55, 164, -101, + -194, 164, -166, 286, -185, 287, 288, 299, 300, 306, + -177, 307, 305, 203, -275, 313, 164, 308, 153, 144, + 296, 297, 290, 303, 291, 212, -271, -260, 456, 471, + 312, 259, 292, 298, 314, 438, 302, 301, -194, 233, + -201, 238, -189, -260, -188, 236, -101, -61, 434, 157, + -203, -203, -72, 438, 440, -121, -85, -107, 110, -112, + 30, 24, -111, -108, -129, -126, -127, 144, 145, 147, + 146, 148, 133, 134, 141, 111, 149, -116, -114, -115, + -117, 88, 87, 96, 89, 90, 91, 92, 98, 99, + 100, -189, -194, -124, -278, 65, 66, 335, 336, 337, + 338, 343, 339, 113, 54, 330, 324, 333, 332, 331, + 328, 329, 326, 327, 341, 342, 169, 325, 163, 139, + 334, -260, -188, 41, 289, 289, -101, 227, -5, -4, + -278, 6, 21, 22, -142, 18, 17, -279, 83, -64, + -77, 60, 61, -79, 22, 37, 64, 62, 21, -56, + -76, 135, -85, -194, -76, -175, 168, -175, -175, -165, + -206, 233, -169, 314, 313, -190, -167, -189, -187, -166, + 311, 158, 353, 109, 23, 25, 112, 144, 17, 113, + 36, 160, 259, 176, 143, 172, 335, 153, 69, 354, + 326, 327, 324, 330, 337, 338, 325, 287, 30, 11, + 356, 26, 186, 22, 37, 137, 155, 116, 117, 189, + 24, 187, 100, 359, 20, 72, 181, 12, 174, 14, + 360, 361, 15, 169, 168, 128, 165, 67, 9, 149, + 27, 125, 63, 362, 29, 363, 364, 365, 366, 65, + 126, 18, 328, 329, 32, 439, 367, 343, 198, 139, + 70, 56, 440, 110, 368, 369, 98, 370, 101, 73, + 445, 107, 16, 68, 39, 371, 199, 372, 171, 373, + 317, 374, 127, 156, 334, 66, 375, 163, 288, 6, + 340, 31, 185, 173, 64, 376, 164, 115, 341, 342, + 167, 99, 5, 170, 33, 10, 71, 74, 331, 332, + 333, 54, 347, 114, 13, 377, 318, 108, 312, -237, + 126, -224, -228, -189, 180, -253, 176, -101, -246, -245, + -189, -71, -184, 165, 174, 173, 170, -264, 107, 220, + 325, 163, -36, -37, -166, 143, 197, 82, 82, -228, + -227, -226, -265, 199, 180, -252, -244, 172, 181, -234, + 173, 174, -229, 165, 29, -265, -229, 171, 181, 199, + 199, 106, 199, 106, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 196, -235, 118, -235, 351, 351, -240, + -265, -265, -265, 167, 34, 34, -186, -229, 167, 23, + -235, -235, -166, 143, -235, -235, -235, -235, 207, 207, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, - -55, -83, 214, 153, 155, 158, 73, 88, 228, 118, - -38, 209, -22, -101, 164, -260, -181, 169, -55, -101, + -235, -235, -235, -235, -235, 164, -264, -80, 291, 227, + 77, -38, 209, -22, -101, -184, 165, 166, -264, -101, 150, -101, -179, 126, 13, -179, -176, 289, 293, 294, 295, -179, -179, -179, -179, 210, 304, -230, 165, 34, 177, 289, 210, 304, 210, 211, 210, 211, 210, -199, @@ -4973,22 +4992,21 @@ var yyChk = [...]int{ 268, 269, 270, 271, 31, 188, 252, 253, 254, 255, 272, 273, 274, 275, 276, 277, 278, 279, 239, 258, 345, 240, 241, 242, 243, 244, 245, 247, 248, 249, - 250, 251, -263, -260, 81, 83, 82, -215, 81, -83, - -55, -251, -248, 74, -260, -260, -260, -182, 169, -235, - -235, 196, -29, -26, -256, 16, -25, -26, 158, 102, - 103, 155, 81, -224, 81, -233, -263, -260, 81, 29, - 171, 170, -232, -229, -232, -233, -260, -129, -189, -194, - -260, 29, 29, -162, -189, -162, -162, 21, -162, 21, - -162, 21, 89, -189, -162, 21, -162, 21, -162, 21, - -162, 21, -162, 21, 30, 75, 76, 30, 78, 79, - 80, -129, -129, -224, -166, -101, -260, 89, 89, -235, - -235, 89, 88, 88, 88, -235, -235, 89, 88, -260, - 88, -266, 182, 224, 226, 89, 89, 89, 89, 30, - 88, -267, 30, 463, 462, 464, 465, 466, 89, 30, - 89, 30, 89, -189, 81, -101, -82, 216, 118, 205, - 205, 164, 164, 218, -101, 229, 230, 228, 21, 217, - 219, 221, 41, 82, 167, -55, 73, -96, -101, 24, - -181, -195, -194, -187, 88, -85, -231, 12, 128, -199, + 250, 251, -263, -260, 81, 83, 82, -215, 81, -80, + 164, -260, 165, 165, 165, -55, 334, -235, -235, 196, + -29, -26, -256, 16, -25, -26, 158, 102, 103, 155, + 81, -224, 81, -233, -263, -260, 81, 29, 171, 170, + -232, -229, -232, -233, -260, -129, -189, -194, -260, 29, + 29, -162, -189, -162, -162, 21, -162, 21, -162, 21, + 89, -189, -162, 21, -162, 21, -162, 21, -162, 21, + -162, 21, 30, 75, 76, 30, 78, 79, 80, -129, + -129, -224, -166, -101, -260, 89, 89, -235, -235, 89, + 88, 88, 88, -235, -235, 89, 88, -260, 88, -266, + 182, 224, 226, 89, 89, 89, 89, 30, 88, -267, + 30, 463, 462, 464, 465, 466, 89, 30, 89, 30, + 89, -189, 81, -101, -83, 214, 153, 155, 158, 73, + 88, 228, 118, 41, 82, 167, 164, -260, -181, 169, + -55, -195, -194, -187, 88, -85, -231, 12, 128, -199, -199, -179, -101, -231, -199, -179, -101, -179, -179, -179, -179, -199, -179, -194, -194, -101, -101, -101, -101, -101, -101, -101, -204, -204, -204, -180, 126, -179, 73, -202, @@ -5013,74 +5031,77 @@ var yyChk = [...]int{ 83, -144, -220, 284, -215, -215, -215, -215, -215, -216, -166, -216, -216, -216, 81, 81, -215, -215, -215, -215, -218, 81, -218, -218, -219, 81, -219, -253, -85, -250, - -249, -247, -248, 175, 95, 347, -245, -141, 89, -82, - -182, 73, -189, -251, -251, -251, -194, 110, -260, 88, - -260, 88, 82, 17, -225, -224, -130, 224, -255, 199, - -252, -246, 81, 29, -232, -233, -233, 150, -260, 82, - 27, 106, 106, 106, 106, 347, 155, 31, -224, -130, - -205, 167, -205, -205, 88, 88, -178, 471, -94, 166, + -249, -247, -248, 175, 95, 347, 74, -245, -141, 89, + -83, -182, 169, -251, -248, -260, -260, -260, -182, -260, + 88, -260, 88, 82, 17, -225, -224, -130, 224, -255, + 199, -252, -246, 81, 29, -232, -233, -233, 150, -260, + 82, 27, 106, 106, 106, 106, 347, 155, 31, -224, + -130, -205, 167, -205, -205, 88, 88, -178, 471, -94, + -82, 216, 118, 205, 205, 164, 164, 218, -101, 229, + 230, 228, 21, 217, 219, 221, 207, -101, -101, -181, + 73, -96, -101, 24, -181, -101, -179, -179, -101, -179, + -179, 88, -101, -189, -66, 317, 347, 20, -67, 20, + 98, 99, 100, -120, -112, -112, -112, -73, 189, 109, + -279, -279, -74, -74, -278, 150, -5, -142, -279, -279, + 82, 74, 23, 12, 12, -279, 12, 12, -279, -279, + -74, -135, -133, 116, -85, -279, -279, 82, 82, -279, + -279, -279, -279, -279, -273, 438, 318, -105, 71, 168, + 72, -278, -196, -279, -157, 39, 47, 58, -85, -85, + -140, -157, -173, 20, 12, 54, 54, -106, 13, -76, + -87, -79, 150, -106, -110, 31, 54, -3, -278, -278, + -164, -168, -129, -88, -89, -89, -88, -89, 63, 63, + 63, 68, 63, 68, 63, -98, -194, -279, -279, -3, + -161, 74, -87, -101, -87, -103, -194, 135, -170, -172, + 320, 317, 323, -260, 88, 82, -240, -228, 98, 110, + 30, 73, 281, 95, 171, 29, 170, -221, 285, -216, + -216, -217, -260, 88, 144, -217, -217, -217, -223, 88, + -223, 89, 89, 83, -32, -27, -28, 32, 77, -247, + -235, 88, 38, -189, 83, -82, -101, 110, 73, -251, + -251, -251, -194, 16, -159, -189, 82, 83, -131, 225, + -129, 83, -189, 83, -159, -233, -190, -189, -278, 164, + 30, 30, -130, -131, -217, -260, 473, 472, 83, 166, 223, -84, 330, 88, 84, -101, -101, -101, -101, -101, - 158, 155, 207, -101, -101, -181, -101, 82, -60, 184, - 179, -194, -101, -179, -179, -101, -179, -179, 88, -101, - -189, -66, 317, 347, 20, -67, 20, 98, 99, 100, - -120, -112, -112, -112, -73, 189, 109, -279, -279, -74, - -74, -278, 150, -5, -142, -279, -279, 82, 74, 23, - 12, 12, -279, 12, 12, -279, -279, -74, -135, -133, - 116, -85, -279, -279, 82, 82, -279, -279, -279, -279, - -279, -273, 438, 318, -105, 71, 168, 72, -278, -196, - -279, -157, 39, 47, 58, -85, -85, -140, -157, -173, - 20, 12, 54, 54, -106, 13, -76, -87, -79, 150, - -106, -110, 31, 54, -3, -278, -278, -164, -168, -129, - -88, -89, -89, -88, -89, 63, 63, 63, 68, 63, - 68, 63, -98, -194, -279, -279, -3, -161, 74, -87, - -101, -87, -103, -194, 135, -170, -172, 320, 317, 323, - -260, 88, 82, -240, -228, 98, 110, 30, 73, 281, - 95, 171, 29, 170, -221, 285, -216, -216, -217, -260, - 88, 144, -217, -217, -217, -223, 88, -223, 89, 89, - 83, -32, -27, -28, 32, 77, -247, -235, 88, 38, - 83, 166, -101, -101, 73, 73, 73, 24, 16, -159, - -189, 82, 83, -131, 225, -129, 83, -189, 83, -159, - -233, -190, -189, -278, 164, 30, 30, -130, -131, -217, - -260, 473, 472, 83, -101, -81, 214, 222, 81, 85, - -262, 74, 205, 281, 205, 208, 167, -94, -32, -101, - -199, -199, 32, 317, 450, 448, -73, 109, -112, -112, - -279, -279, -75, -190, -138, -157, -207, 144, 256, 188, - 254, 250, 270, 261, 283, 252, 284, -205, -207, -112, - -112, -112, -112, 344, -138, 117, -85, 115, -112, -112, - 165, 165, 165, -162, 40, 88, 88, 59, -101, -136, - 14, -85, 135, -142, -163, 73, -164, -123, -125, -124, - -278, -158, -279, -189, -162, -106, 82, 118, -92, -91, - 73, 74, -93, 73, -91, 63, 63, -279, -106, -87, - -106, -106, 150, 317, 321, 322, -240, 98, -112, 10, - 88, 29, 29, -217, -217, 83, 82, 83, 82, 83, - 82, -183, 384, 110, -28, -27, -235, -235, 89, -260, - -101, -101, -101, -101, 17, 82, -224, -129, 54, -250, - 83, -254, -255, -101, -111, -131, -160, 81, 83, -259, - 347, -261, -260, -189, -189, -189, -101, -60, -179, -179, - 32, -260, -112, -279, -142, -279, -215, -215, -215, -219, - -215, 244, -215, 244, -279, -279, 20, 20, 20, 20, - -278, -65, 340, -85, 82, 82, -278, -278, -278, -279, - 88, -216, -137, 15, 17, 28, -163, 82, -279, -279, - 82, 54, 150, -279, -138, -168, -85, -85, 81, -85, - -138, -106, -115, -216, 88, -216, 89, 89, 384, 30, - 78, 79, 80, 30, 75, 76, -160, -159, -189, 201, - 183, -279, 82, -222, 347, 350, 23, -159, -258, -257, - -190, 81, 74, -157, -216, -260, -112, -112, -112, -112, - -112, -142, 88, -112, -112, -159, -279, -159, -159, -197, - -216, -146, -151, -176, -85, -121, 29, -125, 54, -3, - -189, -123, -189, -142, -159, -142, -217, -217, 83, 83, - 23, 202, -101, -255, 351, 351, -3, 83, 82, 118, - -159, -101, -279, -279, -279, -279, -68, 128, 347, -279, - -279, -279, -279, -279, -279, -105, -149, 434, -154, 43, - -152, -153, 44, -150, 45, 53, 10, -123, 150, 83, - -3, -278, 81, -58, 347, -257, -239, -190, 88, 89, - 83, -279, 345, 70, 348, -146, 48, 262, -156, -155, - 52, 44, -153, 17, 46, 17, -164, -189, -58, -112, - 198, -159, -59, 213, 438, -262, 59, 346, 349, -147, - 50, -145, 49, -145, -155, 17, 17, 88, 17, 88, - -279, -279, 83, 176, -259, 59, -148, 51, 73, 101, - 88, 88, 88, -269, -270, 73, 215, 347, 73, 101, - -270, 73, 11, 10, 348, -268, 184, 179, 182, 31, + 158, 155, 208, 167, -94, -101, 82, -60, 184, 179, + -194, -199, -199, 32, 317, 450, 448, -73, 109, -112, + -112, -279, -279, -75, -190, -138, -157, -207, 144, 256, + 188, 254, 250, 270, 261, 283, 252, 284, -205, -207, + -112, -112, -112, -112, 344, -138, 117, -85, 115, -112, + -112, 165, 165, 165, -162, 40, 88, 88, 59, -101, + -136, 14, -85, 135, -142, -163, 73, -164, -123, -125, + -124, -278, -158, -279, -189, -162, -106, 82, 118, -92, + -91, 73, 74, -93, 73, -91, 63, 63, -279, -106, + -87, -106, -106, 150, 317, 321, 322, -240, 98, -112, + 10, 88, 29, 29, -217, -217, 83, 82, 83, 82, + 83, 82, -183, 384, 110, -28, -27, -235, -235, 89, + -260, 166, 24, -101, 73, 73, 73, 17, 82, -224, + -129, 54, -250, 83, -254, -255, -101, -111, -131, -101, + -81, 214, 222, 81, 85, -262, 74, 205, 281, 205, + -101, -60, -32, -101, -179, -179, 32, -260, -112, -279, + -142, -279, -215, -215, -215, -219, -215, 244, -215, 244, + -279, -279, 20, 20, 20, 20, -278, -65, 340, -85, + 82, 82, -278, -278, -278, -279, 88, -216, -137, 15, + 17, 28, -163, 82, -279, -279, 82, 54, 150, -279, + -138, -168, -85, -85, 81, -85, -138, -106, -115, -216, + 88, -216, 89, 89, 384, 30, 78, 79, 80, 30, + 75, 76, -101, -101, -101, -101, -159, -189, 201, 183, + -279, 82, -222, 347, 350, -160, 81, 83, -259, 347, + -261, -260, -189, -189, -189, -157, -216, -260, -112, -112, + -112, -112, -112, -142, 88, -112, -112, -159, -279, -159, + -159, -197, -216, -146, -151, -176, -85, -121, 29, -125, + 54, -3, -189, -123, -189, -142, -159, -142, -217, -217, + 83, 83, -160, 202, -101, -255, 351, 351, 23, -159, + -258, -257, -190, 81, 74, -279, -279, -279, -279, -68, + 128, 347, -279, -279, -279, -279, -279, -279, -105, -149, + 434, -154, 43, -152, -153, 44, -150, 45, 53, 10, + -123, 150, 83, 23, -278, 81, -3, 83, 82, 118, + -159, -101, -279, 345, 70, 348, -146, 48, 262, -156, + -155, 52, 44, -153, 17, 46, 17, -164, -189, -3, + -112, 198, -159, -58, 347, -257, -239, -190, 88, 89, + 83, 59, 346, 349, -147, 50, -145, 49, -145, -155, + 17, 17, 88, 17, 88, -58, -279, -279, 83, -59, + 213, 438, -262, 59, -148, 51, 73, 101, 88, 88, + 88, -269, -270, 73, 176, -259, 347, 73, 101, -270, + 73, 11, 10, 215, 348, -268, 184, 179, 182, 31, -268, 349, 178, 30, 98, } @@ -5089,91 +5110,89 @@ var yyDef = [...]int{ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 821, 0, 557, 557, 557, 557, 557, - 557, 557, 0, 0, -2, -2, -2, 845, 957, 0, - 934, 0, 0, -2, 490, 491, 0, 493, -2, 0, + 557, 557, 0, 0, 557, -2, -2, 557, 957, 0, + 557, 0, 0, -2, 490, 491, 0, 493, -2, 0, 0, 502, 1366, 1366, 552, 0, 0, 0, 0, 0, 0, 1364, 55, 56, 508, 509, 510, 1, 3, 0, 561, 829, 0, 0, -2, 559, 0, 0, 940, 940, - 940, 0, 86, 87, 0, 0, 0, 845, 0, 0, - 0, 0, 0, 557, 0, 935, 109, 110, 90, -2, + 940, 0, 86, 87, 0, 0, 0, -2, 90, -2, 114, 115, 0, 119, 368, 329, 371, 327, 357, -2, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 224, 224, 0, 0, -2, 320, 320, 320, 0, 0, 0, 354, 942, 274, 224, 224, 0, 224, 224, 224, 224, 0, 0, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 557, 108, 858, 0, 0, 0, 118, 958, - 955, 956, 35, 36, 37, 1098, 1099, 1100, 1101, 1102, - 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, - 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, - 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, - 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, - 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, - 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, - 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, - 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, - 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, - 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, - 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, - 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, - 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, - 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, - 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, - 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, - 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, - 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, - 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, - 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, - 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, - 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, - 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, - 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, - 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, - 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, - 1363, 0, 0, 0, 936, 557, 0, 424, 642, 0, - 481, 481, 0, 481, 481, 481, 481, 0, 0, 0, - 436, 0, 0, 0, 0, 478, 0, 0, 455, 457, - 0, 478, 0, 465, 481, 1367, 1367, 1367, 925, 0, - 475, 473, 487, 488, 470, 471, 489, 492, 0, 497, - 500, 951, 952, 0, 515, 0, 1174, 507, 520, 521, - 0, 553, 554, 40, 693, 652, 0, 658, 660, 0, - 695, 696, 697, 698, 699, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 725, 726, 727, 728, 806, - 807, 808, 809, 810, 811, 812, 813, 662, 663, 803, - 0, 914, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 794, 0, 763, 763, 763, 763, 763, 763, 763, - 763, 763, 0, 0, 0, 0, 0, 0, 0, -2, - -2, 1366, 0, 530, 0, 0, 821, 51, 0, 557, - 562, 563, 864, 0, 0, 821, 1365, 0, 0, -2, - -2, 573, 579, 580, 581, 582, 583, 558, 0, 586, - 590, 0, 0, 0, 941, 0, 0, 72, 0, 1330, - 918, -2, -2, 0, 0, 953, 954, 927, -2, 961, - 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, - 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, - 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, - 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, - 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, - 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, - 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, - 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, - 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, - 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, - 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, - 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, - 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, - 1092, 1093, 1094, 1095, 1096, 1097, -2, 0, 0, 128, - 129, 0, 38, 250, 0, 124, 0, 244, 197, 858, - 557, 948, 0, 0, 0, 938, 92, 116, 117, 224, - 224, 0, 118, 118, 336, 337, 338, 0, 0, -2, - 248, 0, 321, 0, 0, 238, 238, 242, 240, 241, - 0, 0, 0, 0, 0, 0, 348, 0, 349, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, - 225, 0, 366, 367, 275, 0, 0, 0, 0, 346, - 347, 0, 0, 943, 944, 0, 0, 224, 224, 0, - 0, 0, 0, 224, 224, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 849, 0, 0, 0, 0, 0, 0, 0, 0, - -2, 0, 416, 0, 557, 0, 0, 0, 936, 423, + 224, 224, 845, 118, 958, 955, 956, 35, 36, 37, + 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, + 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, + 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, + 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, + 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, + 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, + 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, + 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, + 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, + 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, + 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, + 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, + 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, + 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, + 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, + 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, + 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, + 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, + 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, + 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, + 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, + 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, + 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, + 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, + 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, + 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, + 1358, 1359, 1360, 1361, 1362, 1363, 0, 934, 0, 424, + 642, 0, 481, 481, 0, 481, 481, 481, 481, 0, + 0, 0, 436, 0, 0, 0, 0, 478, 0, 0, + 455, 457, 0, 478, 0, 465, 481, 1367, 1367, 1367, + 925, 0, 475, 473, 487, 488, 470, 471, 489, 492, + 0, 497, 500, 951, 952, 0, 515, 0, 1174, 507, + 520, 521, 0, 553, 554, 40, 693, 652, 0, 658, + 660, 0, 695, 696, 697, 698, 699, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 725, 726, 727, + 728, 806, 807, 808, 809, 810, 811, 812, 813, 662, + 663, 803, 0, 914, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 794, 0, 763, 763, 763, 763, 763, + 763, 763, 763, 763, 0, 0, 0, 0, 0, 0, + 0, -2, -2, 1366, 0, 530, 0, 0, 821, 51, + 0, 557, 562, 563, 864, 0, 0, 821, 1365, 0, + 0, -2, -2, 573, 579, 580, 581, 582, 583, 558, + 0, 586, 590, 0, 0, 0, 941, 0, 0, 72, + 0, 1330, 918, -2, -2, 0, 0, 953, 954, 927, + -2, 961, 962, 963, 964, 965, 966, 967, 968, 969, + 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, + 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, + 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, + 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, + 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, + 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, + 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, + 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, + 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, + 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, + 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, + 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, -2, 0, + 0, 128, 129, 0, 38, 250, 0, 124, 0, 244, + 197, 845, 0, 0, 0, 0, 0, 557, 0, 935, + 109, 110, 116, 117, 224, 224, 0, 118, 118, 336, + 337, 338, 0, 0, -2, 248, 0, 321, 0, 0, + 238, 238, 242, 240, 241, 0, 0, 0, 0, 0, + 0, 348, 0, 349, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 408, 0, 225, 0, 366, 367, 275, + 0, 0, 0, 0, 346, 347, 0, 0, 943, 944, + 0, 0, 224, 224, 0, 0, 0, 0, 224, 224, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 108, 858, 0, 0, + 0, -2, 0, 416, 0, 0, 0, 936, 557, 423, 0, 425, 426, 0, 0, 427, 0, 478, 478, 476, 477, 429, 430, 431, 432, 481, 0, 0, 233, 234, 235, 478, 481, 0, 481, 481, 481, 481, 478, 481, @@ -5202,22 +5221,21 @@ var yyDef = [...]int{ 182, 183, 184, 0, 0, 167, 197, 197, 197, 197, 187, 188, 189, 190, 191, 192, 193, 194, 153, 154, 155, 156, 157, 158, 159, 160, 161, 199, 199, 199, - 201, 201, 0, 39, 0, 216, 0, 826, 0, 849, - 938, 0, 949, 0, 948, 948, 948, 0, 0, 0, - 0, 369, 330, 358, 370, 0, 333, 334, -2, 0, - 0, 320, 0, 322, 0, 232, 0, -2, 0, 0, - 0, 238, 242, 239, 242, 230, 243, 350, 803, 0, - 351, 352, 0, 388, 611, 0, 0, 0, 0, 0, - 394, 395, 396, 0, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 359, 360, 361, 362, 363, 364, - 365, 0, 0, 322, 0, 355, 0, 276, 277, 0, - 0, 280, 281, 282, 283, 0, 0, 286, 287, 288, - 289, 290, 314, 315, 316, 291, 292, 293, 294, 295, - 296, 297, 308, 309, 310, 311, 312, 313, 298, 299, - 300, 301, 302, 305, 0, 102, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 383, 384, 385, 386, 846, - 847, 848, 0, 0, 0, 936, 0, 263, 64, 937, - 0, 643, 959, 960, 482, 483, 0, 236, 237, 481, + 201, 201, 0, 39, 0, 216, 0, 826, 0, 858, + 938, 948, 0, 0, 0, 938, 92, 0, 0, 369, + 330, 358, 370, 0, 333, 334, -2, 0, 0, 320, + 0, 322, 0, 232, 0, -2, 0, 0, 0, 238, + 242, 239, 242, 230, 243, 350, 803, 0, 351, 352, + 0, 388, 611, 0, 0, 0, 0, 0, 394, 395, + 396, 0, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 359, 360, 361, 362, 363, 364, 365, 0, + 0, 322, 0, 355, 0, 276, 277, 0, 0, 280, + 281, 282, 283, 0, 0, 286, 287, 288, 289, 290, + 314, 315, 316, 291, 292, 293, 294, 295, 296, 297, + 308, 309, 310, 311, 312, 313, 298, 299, 300, 301, + 302, 305, 0, 102, 849, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 936, 0, 0, 0, + 936, 643, 959, 960, 482, 483, 0, 236, 237, 481, 481, 433, 456, 0, 481, 437, 458, 438, 440, 439, 441, 481, 444, 479, 480, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 460, 0, 461, 0, 0, @@ -5242,74 +5260,77 @@ var yyDef = [...]int{ 125, 135, 206, 205, 151, 208, 208, 174, 175, 212, 0, 212, 212, 212, 0, 0, 168, 169, 170, 171, 162, 0, 163, 164, 165, 0, 166, 249, 0, 833, - 217, 218, 220, 224, 0, 0, 245, 246, 0, 0, - 0, 0, 950, 0, 0, 0, 107, 0, 120, 121, - 122, 123, 118, 0, 0, 126, 324, 0, 0, 0, - 247, 0, 0, 226, 242, 227, 228, 0, 353, 0, - 0, 390, 391, 392, 393, 0, 0, 0, 322, 324, - 212, 0, 278, 279, 284, 285, 303, 0, 0, 0, + 217, 218, 220, 224, 0, 0, 0, 245, 246, 0, + 849, 0, 0, 0, 949, 948, 948, 948, 0, 120, + 121, 122, 123, 118, 0, 0, 126, 324, 0, 0, + 0, 247, 0, 0, 226, 242, 227, 228, 0, 353, + 0, 0, 390, 391, 392, 393, 0, 0, 0, 322, + 324, 212, 0, 278, 279, 284, 285, 303, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, + 384, 385, 386, 846, 847, 848, 0, 0, 417, 0, + 0, 263, 64, 937, 0, 478, 443, 459, 478, 435, + 442, 485, 464, 495, 539, 0, 0, 0, 547, 0, + 675, 677, 679, 666, 687, 670, 0, 667, 0, 0, + 661, 729, 0, 0, 570, 0, 821, 864, 733, 734, + 0, 0, 0, 0, 0, 771, 0, 0, 772, 0, + 821, 0, 799, 0, 0, 745, 765, 0, 0, 766, + 767, 768, 769, 770, 524, 527, 529, 605, 0, 0, + 0, 0, 627, 945, 44, 0, 0, 0, 831, 832, + 824, 43, 0, 932, 933, 815, 816, 817, 0, 585, + 596, 576, 0, 829, 907, 0, 0, 899, 0, 0, + 650, 915, 0, 598, 619, 621, 0, 616, 631, 632, + 634, 0, 636, 0, 638, 639, 602, 603, 604, 0, + 650, 0, 650, 67, 650, 69, 0, 644, 76, 77, + 0, 0, 83, 213, 214, 118, 273, 131, 137, 0, + 0, 0, 141, 0, 0, 144, 146, 147, 207, 212, + 212, 176, 209, 210, 211, 177, 178, 179, 0, 195, + 0, 0, 0, 266, 88, 837, 836, 224, 224, 219, + 0, 222, 0, 950, 198, 0, 101, 0, 0, 0, + 0, 0, 107, 0, 328, 609, 0, 339, 340, 0, + 323, 387, 0, 216, 0, 229, 804, 612, 0, 0, + 341, 0, 324, 344, 345, 356, 306, 307, 304, 0, 0, 859, 860, 0, 863, 93, 376, 378, 377, 381, - 0, 0, 0, 0, 417, 0, 833, 0, 421, 264, - 265, 422, 478, 443, 459, 478, 435, 442, 485, 464, - 495, 539, 0, 0, 0, 547, 0, 675, 677, 679, - 666, 687, 670, 0, 667, 0, 0, 661, 729, 0, - 0, 570, 0, 821, 864, 733, 734, 0, 0, 0, - 0, 0, 771, 0, 0, 772, 0, 821, 0, 799, - 0, 0, 745, 765, 0, 0, 766, 767, 768, 769, - 770, 524, 527, 529, 605, 0, 0, 0, 0, 627, - 945, 44, 0, 0, 0, 831, 832, 824, 43, 0, - 932, 933, 815, 816, 817, 0, 585, 596, 576, 0, - 829, 907, 0, 0, 899, 0, 0, 650, 915, 0, - 598, 619, 621, 0, 616, 631, 632, 634, 0, 636, - 0, 638, 639, 602, 603, 604, 0, 650, 0, 650, - 67, 650, 69, 0, 644, 76, 77, 0, 0, 83, - 213, 214, 118, 273, 131, 137, 0, 0, 0, 141, - 0, 0, 144, 146, 147, 207, 212, 212, 176, 209, - 210, 211, 177, 178, 179, 0, 195, 0, 0, 0, - 266, 88, 837, 836, 224, 224, 219, 0, 222, 0, - 198, 0, 101, 103, 0, 0, 0, 939, 0, 328, - 609, 0, 339, 340, 0, 323, 387, 0, 216, 0, - 229, 804, 612, 0, 0, 341, 0, 324, 344, 345, - 356, 306, 307, 304, 607, 850, 851, 852, 0, 862, - 96, 0, 0, 0, 0, 374, 0, 263, 420, 65, - 481, 481, 534, 0, 537, 0, 668, 0, 688, 671, - 730, 731, 0, 805, 829, 46, 0, 197, 197, 784, - 197, 201, 787, 197, 789, 197, 792, 0, 0, 0, - 0, 0, 0, 0, 796, 744, 802, 0, 0, 0, - 0, 0, 0, 0, 0, 208, 869, 866, 45, 819, - 0, 651, 589, 49, 53, 0, 907, 898, 909, 911, - 0, 0, 0, 903, 0, 821, 0, 0, 613, 620, - 0, 0, 614, 0, 615, 635, 637, -2, 821, 650, - 60, 61, 0, 80, 81, 82, 272, 138, 139, 0, - 142, 143, 145, 172, 173, 208, 0, 208, 0, 202, - 0, 255, 267, 0, 834, 835, 0, 0, 221, 223, - 607, 104, 105, 106, 0, 0, 127, 325, 0, 215, - 0, 0, 412, 409, 342, 343, 0, 0, 861, 375, - 0, 94, 95, 0, 0, 380, 418, 419, 428, 434, - 536, 556, 672, 732, 864, 735, 781, 208, 785, 786, - 788, 790, 791, 793, 737, 736, 0, 0, 0, 0, - 0, 829, 0, 800, 0, 0, 0, 0, 0, 625, - 208, 889, 50, 0, 0, 0, 54, 0, 912, 0, - 0, 0, 0, 71, 829, 916, 917, 617, 0, 622, - 829, 59, 140, 212, 196, 212, 0, 0, 268, 838, - 839, 840, 841, 842, 843, 844, 0, 331, 610, 0, - 0, 389, 0, 397, 0, 0, 0, 0, 97, 98, - 0, 0, 0, 47, 782, 783, 0, 0, 0, 0, - 773, 0, 797, 0, 0, 0, 647, 0, 0, 645, - 871, 870, 883, 896, 820, 818, 0, 910, 0, 902, - 905, 901, 904, 57, 0, 58, 185, 186, 200, 203, - 0, 0, 0, 413, 410, 411, 853, 608, 0, 0, - 0, 382, 738, 740, 739, 741, 0, 0, 0, 743, - 761, 762, 646, 648, 649, 606, 889, 0, 882, 0, - -2, 891, 0, 0, 0, 897, 0, 900, 0, 618, - 853, 0, 0, 372, 855, 99, 100, 317, 318, 319, - 93, 742, 0, 0, 0, 876, 874, 874, 884, 885, - 0, 0, 892, 0, 0, 0, 908, 906, 89, 0, - 0, 0, 0, 856, 857, 96, 774, 0, 777, 879, - 0, 872, 875, 873, 886, 0, 0, 893, 0, 895, - 414, 415, 251, 0, 379, 775, 868, 0, 877, 878, - 887, 888, 894, 252, 253, 0, 854, 0, 880, 881, - 254, 0, 0, 0, 0, 256, 258, 259, 0, 0, + 0, 0, 374, 0, 263, 833, 0, 421, 264, 265, + 422, 481, 481, 534, 0, 537, 0, 668, 0, 688, + 671, 730, 731, 0, 805, 829, 46, 0, 197, 197, + 784, 197, 201, 787, 197, 789, 197, 792, 0, 0, + 0, 0, 0, 0, 0, 796, 744, 802, 0, 0, + 0, 0, 0, 0, 0, 0, 208, 869, 866, 45, + 819, 0, 651, 589, 49, 53, 0, 907, 898, 909, + 911, 0, 0, 0, 903, 0, 821, 0, 0, 613, + 620, 0, 0, 614, 0, 615, 635, 637, -2, 821, + 650, 60, 61, 0, 80, 81, 82, 272, 138, 139, + 0, 142, 143, 145, 172, 173, 208, 0, 208, 0, + 202, 0, 255, 267, 0, 834, 835, 0, 0, 221, + 223, 0, 939, 103, 0, 0, 0, 0, 0, 127, + 325, 0, 215, 0, 0, 412, 409, 342, 343, 607, + 850, 851, 852, 0, 862, 96, 0, 0, 0, 0, + 418, 419, 420, 65, 428, 434, 536, 556, 672, 732, + 864, 735, 781, 208, 785, 786, 788, 790, 791, 793, + 737, 736, 0, 0, 0, 0, 0, 829, 0, 800, + 0, 0, 0, 0, 0, 625, 208, 889, 50, 0, + 0, 0, 54, 0, 912, 0, 0, 0, 0, 71, + 829, 916, 917, 617, 0, 622, 829, 59, 140, 212, + 196, 212, 0, 0, 268, 838, 839, 840, 841, 842, + 843, 844, 607, 104, 105, 106, 331, 610, 0, 0, + 389, 0, 397, 0, 0, 0, 0, 861, 375, 0, + 94, 95, 0, 0, 380, 47, 782, 783, 0, 0, + 0, 0, 773, 0, 797, 0, 0, 0, 647, 0, + 0, 645, 871, 870, 883, 896, 820, 818, 0, 910, + 0, 902, 905, 901, 904, 57, 0, 58, 185, 186, + 200, 203, 0, 0, 0, 413, 410, 411, 0, 0, + 97, 98, 0, 0, 0, 738, 740, 739, 741, 0, + 0, 0, 743, 761, 762, 646, 648, 649, 606, 889, + 0, 882, 0, -2, 891, 0, 0, 0, 897, 0, + 900, 0, 618, 0, 0, 0, 853, 608, 0, 0, + 0, 382, 742, 0, 0, 0, 876, 874, 874, 884, + 885, 0, 0, 892, 0, 0, 0, 908, 906, 853, + 0, 0, 0, 372, 855, 99, 100, 317, 318, 319, + 93, 774, 0, 777, 879, 0, 872, 875, 873, 886, + 0, 0, 893, 0, 895, 89, 414, 415, 251, 0, + 856, 857, 96, 775, 868, 0, 877, 878, 887, 888, + 894, 252, 253, 0, 0, 379, 0, 880, 881, 254, + 0, 0, 0, 854, 0, 256, 258, 259, 0, 0, 257, 776, 260, 261, 262, } @@ -6222,11 +6243,11 @@ yydefault: } yyVAL.union = yyLOCAL case 89: - yyDollar = yyS[yypt-11 : yypt+1] + yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Statement //line sql.y:784 { - yyLOCAL = &CreateView{ViewName: yyDollar[7].tableName.ToViewName(), IsReplace: yyDollar[2].booleanUnion(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].str, Security: yyDollar[5].str, Columns: yyDollar[8].columnsUnion(), Select: yyDollar[10].selStmtUnion(), CheckOption: yyDollar[11].str} + yyLOCAL = &CreateView{ViewName: yyDollar[8].tableName.ToViewName(), IsReplace: yyDollar[3].booleanUnion(), Algorithm: yyDollar[4].str, Definer: yyDollar[5].str, Security: yyDollar[6].str, Columns: yyDollar[9].columnsUnion(), Select: yyDollar[11].selStmtUnion(), CheckOption: yyDollar[12].str} } yyVAL.union = yyLOCAL case 90: @@ -6317,7 +6338,7 @@ yydefault: var yyLOCAL *CreateTable //line sql.y:847 { - yyLOCAL = &CreateTable{Comments: Comments(yyDollar[4].strs), Table: yyDollar[6].tableName, IfNotExists: yyDollar[5].booleanUnion(), Temp: yyDollar[2].booleanUnion()} + yyLOCAL = &CreateTable{Comments: Comments(yyDollar[2].strs), Table: yyDollar[6].tableName, IfNotExists: yyDollar[5].booleanUnion(), Temp: yyDollar[3].booleanUnion()} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL @@ -6326,57 +6347,57 @@ yydefault: var yyLOCAL *AlterTable //line sql.y:854 { - yyLOCAL = &AlterTable{Comments: Comments(yyDollar[3].strs), Table: yyDollar[4].tableName} + yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs), Table: yyDollar[4].tableName} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL case 103: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AlterTable //line sql.y:861 { - yyLOCAL = &AlterTable{Table: yyDollar[6].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[3].colIdent, Type: string(yyDollar[2].str)}, Options: yyDollar[4].indexOptionsUnion()}}}} + yyLOCAL = &AlterTable{Table: yyDollar[7].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[4].colIdent, Type: string(yyDollar[3].str)}, Options: yyDollar[5].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL case 104: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable //line sql.y:866 { - yyLOCAL = &AlterTable{Table: yyDollar[7].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[4].colIdent, Type: string(yyDollar[2].str) + " " + string(yyDollar[3].str), Fulltext: true}, Options: yyDollar[5].indexOptionsUnion()}}}} + yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].colIdent, Type: string(yyDollar[3].str) + " " + string(yyDollar[4].str), Fulltext: true}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL case 105: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable //line sql.y:871 { - yyLOCAL = &AlterTable{Table: yyDollar[7].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[4].colIdent, Type: string(yyDollar[2].str) + " " + string(yyDollar[3].str), Spatial: true}, Options: yyDollar[5].indexOptionsUnion()}}}} + yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].colIdent, Type: string(yyDollar[3].str) + " " + string(yyDollar[4].str), Spatial: true}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL case 106: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable //line sql.y:876 { - yyLOCAL = &AlterTable{Table: yyDollar[7].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[4].colIdent, Type: string(yyDollar[2].str) + " " + string(yyDollar[3].str), Unique: true}, Options: yyDollar[5].indexOptionsUnion()}}}} + yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].colIdent, Type: string(yyDollar[3].str) + " " + string(yyDollar[4].str), Unique: true}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL case 107: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *CreateDatabase //line sql.y:883 { - yyLOCAL = &CreateDatabase{Comments: Comments(yyDollar[3].strs), DBName: yyDollar[5].tableIdent, IfNotExists: yyDollar[4].booleanUnion()} + yyLOCAL = &CreateDatabase{Comments: Comments(yyDollar[4].strs), DBName: yyDollar[6].tableIdent, IfNotExists: yyDollar[5].booleanUnion()} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL case 108: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AlterDatabase //line sql.y:890 { @@ -8220,11 +8241,11 @@ yydefault: } yyVAL.union = yyLOCAL case 372: - yyDollar = yyS[yypt-10 : yypt+1] + yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement //line sql.y:2072 { - yyLOCAL = &AlterView{ViewName: yyDollar[6].tableName.ToViewName(), Algorithm: yyDollar[2].str, Definer: yyDollar[3].str, Security: yyDollar[4].str, Columns: yyDollar[7].columnsUnion(), Select: yyDollar[9].selStmtUnion(), CheckOption: yyDollar[10].str} + yyLOCAL = &AlterView{ViewName: yyDollar[7].tableName.ToViewName(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].str, Security: yyDollar[5].str, Columns: yyDollar[8].columnsUnion(), Select: yyDollar[10].selStmtUnion(), CheckOption: yyDollar[11].str} } yyVAL.union = yyLOCAL case 373: @@ -8250,140 +8271,140 @@ yydefault: } yyVAL.union = yyLOCAL case 375: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement //line sql.y:2090 { yyLOCAL = &AlterVschema{ Action: CreateVindexDDLAction, - Table: yyDollar[5].tableName, + Table: yyDollar[6].tableName, VindexSpec: &VindexSpec{ - Name: NewColIdent(yyDollar[5].tableName.Name.String()), - Type: yyDollar[6].colIdent, - Params: yyDollar[7].vindexParamsUnion(), + Name: NewColIdent(yyDollar[6].tableName.Name.String()), + Type: yyDollar[7].colIdent, + Params: yyDollar[8].vindexParamsUnion(), }, } } yyVAL.union = yyLOCAL case 376: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement //line sql.y:2102 { yyLOCAL = &AlterVschema{ Action: DropVindexDDLAction, - Table: yyDollar[5].tableName, + Table: yyDollar[6].tableName, VindexSpec: &VindexSpec{ - Name: NewColIdent(yyDollar[5].tableName.Name.String()), + Name: NewColIdent(yyDollar[6].tableName.Name.String()), }, } } yyVAL.union = yyLOCAL case 377: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement //line sql.y:2112 { - yyLOCAL = &AlterVschema{Action: AddVschemaTableDDLAction, Table: yyDollar[5].tableName} + yyLOCAL = &AlterVschema{Action: AddVschemaTableDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL case 378: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement //line sql.y:2116 { - yyLOCAL = &AlterVschema{Action: DropVschemaTableDDLAction, Table: yyDollar[5].tableName} + yyLOCAL = &AlterVschema{Action: DropVschemaTableDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL case 379: - yyDollar = yyS[yypt-12 : yypt+1] + yyDollar = yyS[yypt-13 : yypt+1] var yyLOCAL Statement //line sql.y:2120 { yyLOCAL = &AlterVschema{ Action: AddColVindexDDLAction, - Table: yyDollar[4].tableName, + Table: yyDollar[5].tableName, VindexSpec: &VindexSpec{ - Name: yyDollar[7].colIdent, - Type: yyDollar[11].colIdent, - Params: yyDollar[12].vindexParamsUnion(), + Name: yyDollar[8].colIdent, + Type: yyDollar[12].colIdent, + Params: yyDollar[13].vindexParamsUnion(), }, - VindexCols: yyDollar[9].columnsUnion(), + VindexCols: yyDollar[10].columnsUnion(), } } yyVAL.union = yyLOCAL case 380: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement //line sql.y:2133 { yyLOCAL = &AlterVschema{ Action: DropColVindexDDLAction, - Table: yyDollar[4].tableName, + Table: yyDollar[5].tableName, VindexSpec: &VindexSpec{ - Name: yyDollar[7].colIdent, + Name: yyDollar[8].colIdent, }, } } yyVAL.union = yyLOCAL case 381: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement //line sql.y:2143 { - yyLOCAL = &AlterVschema{Action: AddSequenceDDLAction, Table: yyDollar[5].tableName} + yyLOCAL = &AlterVschema{Action: AddSequenceDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL case 382: - yyDollar = yyS[yypt-9 : yypt+1] + yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement //line sql.y:2147 { yyLOCAL = &AlterVschema{ Action: AddAutoIncDDLAction, - Table: yyDollar[4].tableName, + Table: yyDollar[5].tableName, AutoIncSpec: &AutoIncSpec{ - Column: yyDollar[7].colIdent, - Sequence: yyDollar[9].tableName, + Column: yyDollar[8].colIdent, + Sequence: yyDollar[10].tableName, }, } } yyVAL.union = yyLOCAL case 383: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement //line sql.y:2158 { yyLOCAL = &AlterMigration{ Type: RetryMigrationType, - UUID: string(yyDollar[3].str), + UUID: string(yyDollar[4].str), } } yyVAL.union = yyLOCAL case 384: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement //line sql.y:2165 { yyLOCAL = &AlterMigration{ Type: CompleteMigrationType, - UUID: string(yyDollar[3].str), + UUID: string(yyDollar[4].str), } } yyVAL.union = yyLOCAL case 385: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement //line sql.y:2172 { yyLOCAL = &AlterMigration{ Type: CancelMigrationType, - UUID: string(yyDollar[3].str), + UUID: string(yyDollar[4].str), } } yyVAL.union = yyLOCAL case 386: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement //line sql.y:2179 { @@ -8651,36 +8672,36 @@ yydefault: var yyLOCAL Statement //line sql.y:2327 { - yyLOCAL = &DropTable{Comments: Comments(yyDollar[4].strs), FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Temp: yyDollar[2].booleanUnion()} + yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs), Temp: yyDollar[3].booleanUnion()} } yyVAL.union = yyLOCAL case 420: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement //line sql.y:2331 { // Change this to an alter statement - if yyDollar[3].colIdent.Lowered() == "primary" { - yyLOCAL = &AlterTable{Table: yyDollar[5].tableName, AlterOptions: append([]AlterOption{&DropKey{Type: PrimaryKeyType}}, yyDollar[6].alterOptionsUnion()...)} + if yyDollar[4].colIdent.Lowered() == "primary" { + yyLOCAL = &AlterTable{Table: yyDollar[6].tableName, AlterOptions: append([]AlterOption{&DropKey{Type: PrimaryKeyType}}, yyDollar[7].alterOptionsUnion()...)} } else { - yyLOCAL = &AlterTable{Table: yyDollar[5].tableName, AlterOptions: append([]AlterOption{&DropKey{Type: NormalKeyType, Name: yyDollar[3].colIdent}}, yyDollar[6].alterOptionsUnion()...)} + yyLOCAL = &AlterTable{Table: yyDollar[6].tableName, AlterOptions: append([]AlterOption{&DropKey{Type: NormalKeyType, Name: yyDollar[4].colIdent}}, yyDollar[7].alterOptionsUnion()...)} } } yyVAL.union = yyLOCAL case 421: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement //line sql.y:2340 { - yyLOCAL = &DropView{FromTables: yyDollar[4].tableNamesUnion(), IfExists: yyDollar[3].booleanUnion()} + yyLOCAL = &DropView{FromTables: yyDollar[5].tableNamesUnion(), IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL case 422: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement //line sql.y:2344 { - yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[3].strs), DBName: yyDollar[5].tableIdent, IfExists: yyDollar[4].booleanUnion()} + yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[4].strs), DBName: yyDollar[6].tableIdent, IfExists: yyDollar[5].booleanUnion()} } yyVAL.union = yyLOCAL case 423: diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 67d7359fdd3..675fa4f9284 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -780,9 +780,9 @@ create_statement: $1.FullyParsed = true $$ = $1 } -| CREATE replace_opt algorithm_view definer_opt security_view_opt VIEW table_name column_list_opt AS select_statement check_option_opt +| CREATE comment_opt replace_opt algorithm_view definer_opt security_view_opt VIEW table_name column_list_opt AS select_statement check_option_opt { - $$ = &CreateView{ViewName: $7.ToViewName(), IsReplace:$2, Algorithm:$3, Definer: $4 ,Security:$5, Columns:$8, Select: $10, CheckOption: $11 } + $$ = &CreateView{ViewName: $8.ToViewName(), IsReplace:$3, Algorithm:$4, Definer: $5 ,Security:$6, Columns:$9, Select: $11, CheckOption: $12 } } | create_database_prefix create_options_opt { @@ -843,50 +843,50 @@ vindex_param: } create_table_prefix: - CREATE temp_opt TABLE comment_opt not_exists_opt table_name + CREATE comment_opt temp_opt TABLE not_exists_opt table_name { - $$ = &CreateTable{Comments: Comments($4), Table: $6, IfNotExists: $5, Temp: $2} + $$ = &CreateTable{Comments: Comments($2), Table: $6, IfNotExists: $5, Temp: $3} setDDL(yylex, $$) } alter_table_prefix: - ALTER TABLE comment_opt table_name + ALTER comment_opt TABLE table_name { - $$ = &AlterTable{Comments: Comments($3), Table: $4} + $$ = &AlterTable{Comments: Comments($2), Table: $4} setDDL(yylex, $$) } create_index_prefix: - CREATE INDEX id_or_var using_opt ON table_name + CREATE comment_opt INDEX id_or_var using_opt ON table_name { - $$ = &AlterTable{Table: $6, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition:&IndexDefinition{Info: &IndexInfo{Name:$3, Type:string($2)}, Options:$4}}}} + $$ = &AlterTable{Table: $7, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition:&IndexDefinition{Info: &IndexInfo{Name:$4, Type:string($3)}, Options:$5}}}} setDDL(yylex, $$) } -| CREATE FULLTEXT INDEX id_or_var using_opt ON table_name +| CREATE comment_opt FULLTEXT INDEX id_or_var using_opt ON table_name { - $$ = &AlterTable{Table: $7, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition:&IndexDefinition{Info: &IndexInfo{Name:$4, Type:string($2)+" "+string($3), Fulltext:true}, Options:$5}}}} + $$ = &AlterTable{Table: $8, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition:&IndexDefinition{Info: &IndexInfo{Name:$5, Type:string($3)+" "+string($4), Fulltext:true}, Options:$6}}}} setDDL(yylex, $$) } -| CREATE SPATIAL INDEX id_or_var using_opt ON table_name +| CREATE comment_opt SPATIAL INDEX id_or_var using_opt ON table_name { - $$ = &AlterTable{Table: $7, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition:&IndexDefinition{Info: &IndexInfo{Name:$4, Type:string($2)+" "+string($3), Spatial:true}, Options:$5}}}} + $$ = &AlterTable{Table: $8, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition:&IndexDefinition{Info: &IndexInfo{Name:$5, Type:string($3)+" "+string($4), Spatial:true}, Options:$6}}}} setDDL(yylex, $$) } -| CREATE UNIQUE INDEX id_or_var using_opt ON table_name +| CREATE comment_opt UNIQUE INDEX id_or_var using_opt ON table_name { - $$ = &AlterTable{Table: $7, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition:&IndexDefinition{Info: &IndexInfo{Name:$4, Type:string($2)+" "+string($3), Unique:true}, Options:$5}}}} + $$ = &AlterTable{Table: $8, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition:&IndexDefinition{Info: &IndexInfo{Name:$5, Type:string($3)+" "+string($4), Unique:true}, Options:$6}}}} setDDL(yylex, $$) } create_database_prefix: - CREATE database_or_schema comment_opt not_exists_opt table_id + CREATE comment_opt database_or_schema comment_opt not_exists_opt table_id { - $$ = &CreateDatabase{Comments: Comments($3), DBName: $5, IfNotExists: $4} + $$ = &CreateDatabase{Comments: Comments($4), DBName: $6, IfNotExists: $5} setDDL(yylex,$$) } alter_database_prefix: - ALTER database_or_schema + ALTER comment_opt database_or_schema { $$ = &AlterDatabase{} setDDL(yylex,$$) @@ -2068,9 +2068,9 @@ alter_statement: $1.PartitionSpec = $2 $$ = $1 } -| ALTER algorithm_view definer_opt security_view_opt VIEW table_name column_list_opt AS select_statement check_option_opt +| ALTER comment_opt algorithm_view definer_opt security_view_opt VIEW table_name column_list_opt AS select_statement check_option_opt { - $$ = &AlterView{ViewName: $6.ToViewName(), Algorithm:$2, Definer: $3 ,Security:$4, Columns:$7, Select: $9, CheckOption: $10 } + $$ = &AlterView{ViewName: $7.ToViewName(), Algorithm:$3, Definer: $4 ,Security:$5, Columns:$8, Select: $10, CheckOption: $11 } } | alter_database_prefix table_id_opt create_options { @@ -2086,96 +2086,96 @@ alter_statement: $1.UpdateDataDirectory = true $$ = $1 } -| ALTER VSCHEMA CREATE VINDEX table_name vindex_type_opt vindex_params_opt +| ALTER comment_opt VSCHEMA CREATE VINDEX table_name vindex_type_opt vindex_params_opt { $$ = &AlterVschema{ Action: CreateVindexDDLAction, - Table: $5, + Table: $6, VindexSpec: &VindexSpec{ - Name: NewColIdent($5.Name.String()), - Type: $6, - Params: $7, + Name: NewColIdent($6.Name.String()), + Type: $7, + Params: $8, }, } } -| ALTER VSCHEMA DROP VINDEX table_name +| ALTER comment_opt VSCHEMA DROP VINDEX table_name { $$ = &AlterVschema{ Action: DropVindexDDLAction, - Table: $5, + Table: $6, VindexSpec: &VindexSpec{ - Name: NewColIdent($5.Name.String()), + Name: NewColIdent($6.Name.String()), }, } } -| ALTER VSCHEMA ADD TABLE table_name +| ALTER comment_opt VSCHEMA ADD TABLE table_name { - $$ = &AlterVschema{Action: AddVschemaTableDDLAction, Table: $5} + $$ = &AlterVschema{Action: AddVschemaTableDDLAction, Table: $6} } -| ALTER VSCHEMA DROP TABLE table_name +| ALTER comment_opt VSCHEMA DROP TABLE table_name { - $$ = &AlterVschema{Action: DropVschemaTableDDLAction, Table: $5} + $$ = &AlterVschema{Action: DropVschemaTableDDLAction, Table: $6} } -| ALTER VSCHEMA ON table_name ADD VINDEX sql_id '(' column_list ')' vindex_type_opt vindex_params_opt +| ALTER comment_opt VSCHEMA ON table_name ADD VINDEX sql_id '(' column_list ')' vindex_type_opt vindex_params_opt { $$ = &AlterVschema{ Action: AddColVindexDDLAction, - Table: $4, + Table: $5, VindexSpec: &VindexSpec{ - Name: $7, - Type: $11, - Params: $12, + Name: $8, + Type: $12, + Params: $13, }, - VindexCols: $9, + VindexCols: $10, } } -| ALTER VSCHEMA ON table_name DROP VINDEX sql_id +| ALTER comment_opt VSCHEMA ON table_name DROP VINDEX sql_id { $$ = &AlterVschema{ Action: DropColVindexDDLAction, - Table: $4, + Table: $5, VindexSpec: &VindexSpec{ - Name: $7, + Name: $8, }, } } -| ALTER VSCHEMA ADD SEQUENCE table_name +| ALTER comment_opt VSCHEMA ADD SEQUENCE table_name { - $$ = &AlterVschema{Action: AddSequenceDDLAction, Table: $5} + $$ = &AlterVschema{Action: AddSequenceDDLAction, Table: $6} } -| ALTER VSCHEMA ON table_name ADD AUTO_INCREMENT sql_id USING table_name +| ALTER comment_opt VSCHEMA ON table_name ADD AUTO_INCREMENT sql_id USING table_name { $$ = &AlterVschema{ Action: AddAutoIncDDLAction, - Table: $4, + Table: $5, AutoIncSpec: &AutoIncSpec{ - Column: $7, - Sequence: $9, + Column: $8, + Sequence: $10, }, } } -| ALTER VITESS_MIGRATION STRING RETRY +| ALTER comment_opt VITESS_MIGRATION STRING RETRY { $$ = &AlterMigration{ Type: RetryMigrationType, - UUID: string($3), + UUID: string($4), } } -| ALTER VITESS_MIGRATION STRING COMPLETE +| ALTER comment_opt VITESS_MIGRATION STRING COMPLETE { $$ = &AlterMigration{ Type: CompleteMigrationType, - UUID: string($3), + UUID: string($4), } } -| ALTER VITESS_MIGRATION STRING CANCEL +| ALTER comment_opt VITESS_MIGRATION STRING CANCEL { $$ = &AlterMigration{ Type: CancelMigrationType, - UUID: string($3), + UUID: string($4), } } -| ALTER VITESS_MIGRATION CANCEL ALL +| ALTER comment_opt VITESS_MIGRATION CANCEL ALL { $$ = &AlterMigration{ Type: CancelAllMigrationType, @@ -2323,26 +2323,26 @@ rename_list: } drop_statement: - DROP temp_opt TABLE comment_opt exists_opt table_name_list restrict_or_cascade_opt + DROP comment_opt temp_opt TABLE exists_opt table_name_list restrict_or_cascade_opt { - $$ = &DropTable{Comments: Comments($4), FromTables: $6, IfExists: $5, Temp: $2} + $$ = &DropTable{FromTables: $6, IfExists: $5, Comments: Comments($2), Temp: $3} } -| DROP INDEX id_or_var ON table_name algorithm_lock_opt +| DROP comment_opt INDEX id_or_var ON table_name algorithm_lock_opt { // Change this to an alter statement - if $3.Lowered() == "primary" { - $$ = &AlterTable{Table: $5,AlterOptions: append([]AlterOption{&DropKey{Type:PrimaryKeyType}},$6...)} + if $4.Lowered() == "primary" { + $$ = &AlterTable{Table: $6,AlterOptions: append([]AlterOption{&DropKey{Type:PrimaryKeyType}},$7...)} } else { - $$ = &AlterTable{Table: $5,AlterOptions: append([]AlterOption{&DropKey{Type:NormalKeyType, Name:$3}},$6...)} + $$ = &AlterTable{Table: $6,AlterOptions: append([]AlterOption{&DropKey{Type:NormalKeyType, Name:$4}},$7...)} } } -| DROP VIEW exists_opt view_name_list restrict_or_cascade_opt +| DROP comment_opt VIEW exists_opt view_name_list restrict_or_cascade_opt { - $$ = &DropView{FromTables: $4, IfExists: $3} + $$ = &DropView{FromTables: $5, IfExists: $4} } -| DROP database_or_schema comment_opt exists_opt table_id +| DROP comment_opt database_or_schema comment_opt exists_opt table_id { - $$ = &DropDatabase{Comments: Comments($3), DBName: $5, IfExists: $4} + $$ = &DropDatabase{Comments: Comments($4), DBName: $6, IfExists: $5} } truncate_statement: From 1234caba5b2bec24026296b0967df5bab4b19ebf Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Fri, 2 Apr 2021 08:30:53 +0300 Subject: [PATCH 03/64] normalized comments for DROP statements Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/sqlparser/ast_format.go | 2 +- go/vt/sqlparser/ast_format_fast.go | 3 +- go/vt/sqlparser/parse_test.go | 4 +- go/vt/sqlparser/sql.go | 2599 ++++++++++++++-------------- go/vt/sqlparser/sql.y | 4 +- 5 files changed, 1300 insertions(+), 1312 deletions(-) diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go index ba82151b3eb..4d07fae005f 100644 --- a/go/vt/sqlparser/ast_format.go +++ b/go/vt/sqlparser/ast_format.go @@ -153,7 +153,7 @@ func (node *DropDatabase) Format(buf *TrackedBuffer) { if node.IfExists { exists = "if exists " } - buf.astPrintf(node, "%s database %v%s%v", DropStr, node.Comments, exists, node.DBName) + buf.astPrintf(node, "%s %vdatabase %s%v", DropStr, node.Comments, exists, node.DBName) } // Format formats the node. diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go index 65f2b3632af..9008feb0553 100644 --- a/go/vt/sqlparser/ast_format_fast.go +++ b/go/vt/sqlparser/ast_format_fast.go @@ -253,8 +253,9 @@ func (node *DropDatabase) formatFast(buf *TrackedBuffer) { exists = "if exists " } buf.WriteString(DropStr) - buf.WriteString(" database ") + buf.WriteByte(' ') node.Comments.formatFast(buf) + buf.WriteString("database ") buf.WriteString(exists) node.DBName.formatFast(buf) } diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index 0bdde9c8673..58ec005db81 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -1818,12 +1818,12 @@ var ( input: "CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysql` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;", output: "create database if not exists mysql default character set utf8mb4 collate utf8mb4_0900_ai_ci", }, { - input: "drop database /* simple */ test_db", + input: "drop /* simple */ database test_db", }, { input: "drop schema test_db", output: "drop database test_db", }, { - input: "drop database /* simple */ if exists test_db", + input: "drop /* simple */ database if exists test_db", }, { input: "delete a.*, b.* from tbl_a a, tbl_b b where a.id = b.id and b.name = 'test'", output: "delete a, b from tbl_a as a, tbl_b as b where a.id = b.id and b.`name` = 'test'", diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 7b146eeb228..d8baa5086dd 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -1080,716 +1080,517 @@ var yyExca = [...]int{ 1, 270, 474, 270, -2, 118, - -1, 1928, + -1, 1927, 5, 821, 18, 821, 20, 821, 32, 821, 83, 821, -2, 604, - -1, 2153, + -1, 2152, 46, 896, -2, 890, } const yyPrivate = 57344 -const yyLast = 27990 +const yyLast = 27857 var yyAct = [...]int{ - 561, 2245, 2232, 2078, 2180, 1985, 2154, 2193, 2103, 1804, - 2131, 1687, 83, 3, 1720, 2075, 1569, 1428, 1001, 2206, - 1908, 1501, 1909, 519, 1721, 1905, 1534, 1048, 1414, 1784, - 502, 533, 1554, 1055, 1847, 1808, 1785, 1519, 1786, 1707, - 504, 1539, 1920, 1480, 137, 1867, 751, 123, 872, 165, - 1385, 1647, 165, 919, 467, 165, 1567, 899, 574, 1553, - 483, 1291, 165, 1377, 1082, 1778, 1092, 81, 1600, 1201, - 165, 1183, 1085, 1541, 1462, 779, 1058, 1469, 583, 1053, - 608, 1075, 1430, 814, 495, 1411, 506, 1078, 1040, 568, - 1388, 937, 483, 1354, 758, 483, 165, 483, 1076, 1551, - 1288, 1190, 755, 1274, 33, 785, 780, 1530, 1445, 781, - 759, 1091, 577, 1485, 1089, 1065, 79, 1296, 782, 140, - 106, 100, 1175, 1157, 101, 490, 857, 1014, 1152, 8, - 7, 6, 1827, 1826, 1017, 792, 107, 78, 1598, 1260, - 917, 1855, 1856, 1343, 2105, 605, 1342, 938, 1341, 1425, - 1426, 167, 168, 169, 1340, 1339, 1338, 493, 2220, 494, - 1685, 1331, 762, 590, 594, 102, 767, 534, 34, 108, - 752, 2150, 2054, 819, 2127, 2126, 818, 2073, 817, 1954, - 2074, 80, 2251, 546, 569, 552, 553, 550, 551, 491, - 549, 548, 547, 2203, 2244, 2175, 2236, 167, 168, 169, - 554, 555, 34, 2079, 938, 1637, 602, 1586, 2202, 816, - 2174, 1884, 2018, 948, 84, 1520, 1166, 1686, 860, 102, - 1934, 773, 830, 831, 772, 834, 835, 836, 837, 795, - 1854, 840, 841, 842, 843, 844, 845, 846, 847, 848, - 849, 850, 851, 852, 853, 854, 796, 570, 820, 821, - 822, 86, 87, 88, 89, 90, 91, 459, 1546, 97, - 1935, 1936, 162, 1635, 1834, 437, 458, 1486, 1833, 442, - 948, 1427, 827, 1496, 1497, 1751, 1495, 456, 1750, 1544, - 1093, 1752, 1094, 102, 892, 35, 833, 885, 72, 39, - 40, 471, 936, 915, 161, 768, 167, 168, 169, 891, - 771, 565, 866, 867, 771, 855, 775, 609, 944, 877, - 879, 880, 564, 878, 879, 880, 453, 1513, 774, 103, - 1768, 1987, 2009, 2007, 2177, 465, 1332, 1333, 1334, 856, - 145, 2140, 963, 962, 972, 973, 965, 966, 967, 968, - 969, 970, 971, 964, 470, 481, 974, 1330, 485, 1280, - 479, 771, 1250, 763, 567, 1809, 832, 769, 766, 1543, - 71, 765, 764, 1568, 1601, 944, 2243, 1830, 859, 1981, - 1606, 1755, 471, 1611, 1609, 1610, 914, 1982, 893, 1275, - 912, 886, 898, 2221, 142, 1613, 143, 1614, 862, 1615, - 1842, 906, 1605, 908, 1251, 160, 1252, 1988, 1616, 443, - 445, 446, 471, 462, 464, 472, 896, 897, 769, 460, - 461, 473, 447, 448, 477, 476, 463, 839, 452, 449, - 451, 457, 471, 838, 1607, 470, 455, 474, 894, 895, - 905, 907, 858, 1604, 1989, 1603, 2123, 165, 2068, 165, - 1570, 803, 165, 1463, 943, 940, 941, 942, 947, 949, - 946, 801, 945, 1953, 146, 470, 812, 811, 810, 939, - 910, 809, 770, 808, 151, 807, 770, 806, 483, 483, - 483, 471, 805, 800, 776, 470, 1169, 813, 2069, 1486, - 1846, 2252, 2234, 756, 756, 2173, 483, 483, 788, 1281, - 794, 787, 875, 1289, 881, 882, 883, 884, 2249, 1552, - 930, 943, 940, 941, 942, 947, 949, 946, 911, 945, - 1832, 1189, 1188, 770, 756, 916, 939, 1868, 754, 1688, - 1690, 913, 829, 2194, 470, 596, 1843, 889, 794, 1592, - 1285, 1545, 1636, 904, 804, 924, 903, 909, 2178, 823, - 1961, 1829, 1893, 1892, 802, 1891, 1164, 1163, 794, 1162, - 2141, 475, 902, 1819, 1286, 1160, 441, 436, 1666, 1841, - 2161, 1870, 1840, 986, 987, 165, 99, 1588, 1279, 468, - 138, 1262, 1261, 1263, 1264, 1265, 1849, 1849, 2038, 1933, - 1712, 1848, 1848, 1046, 469, 1655, 1578, 1491, 984, 876, - 1069, 999, 1663, 483, 870, 1502, 165, 974, 165, 165, - 865, 483, 1045, 964, 868, 1747, 974, 483, 1441, 921, - 922, 953, 951, 73, 94, 951, 1689, 933, 931, 932, - 874, 1765, 1760, 1872, 794, 1876, 793, 1871, 954, 1869, - 794, 954, 797, 787, 1874, 918, 918, 918, 900, 1002, - 1326, 1074, 798, 1873, 794, 1297, 2247, 954, 1276, 2248, - 1277, 2246, 1041, 1278, 605, 34, 1875, 1877, 888, 95, - 799, 2169, 1059, 815, 793, 1761, 828, 1918, 983, 985, - 890, 1057, 1602, 1282, 1016, 1019, 1021, 1023, 1024, 1026, - 1028, 1029, 1020, 1022, 793, 1025, 1027, 1763, 1030, 1038, - 1758, 1587, 167, 168, 169, 1095, 1379, 986, 987, 998, - 934, 1886, 1759, 1003, 1004, 1005, 1006, 1007, 1008, 1009, - 1010, 1783, 1013, 1015, 1018, 1018, 1018, 1015, 1018, 1018, - 1015, 1018, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1797, - 861, 986, 987, 873, 1043, 952, 953, 951, 34, 1412, - 139, 144, 141, 147, 148, 149, 150, 152, 153, 154, - 155, 165, 1380, 954, 901, 1153, 156, 157, 158, 159, - 793, 1298, 1766, 1764, 1161, 1080, 793, 787, 790, 791, - 1585, 756, 797, 787, 1580, 784, 788, 167, 168, 169, - 793, 1773, 798, 483, 1583, 1185, 1047, 787, 790, 791, - 1412, 756, 1673, 1194, 783, 784, 788, 1198, 1584, 1938, - 483, 483, 803, 483, 801, 483, 483, 1580, 483, 483, - 483, 483, 483, 483, 2237, 1062, 609, 967, 968, 969, - 970, 971, 964, 483, 2053, 974, 1174, 165, 1234, 1181, - 1269, 1582, 1349, 1351, 1352, 2226, 1195, 1774, 1090, 952, - 953, 951, 2238, 1247, 1350, 965, 966, 967, 968, 969, - 970, 971, 964, 2253, 483, 974, 165, 954, 1167, 1168, - 1267, 1229, 1230, 2227, 1193, 71, 2052, 1287, 1959, 1231, - 1203, 165, 1204, 1762, 1206, 1208, 1361, 1357, 1212, 1214, - 1216, 1218, 1220, 1640, 1641, 1642, 1782, 165, 1159, 1268, - 1359, 1360, 1358, 1192, 165, 1781, 1446, 1447, 1172, 1895, - 1171, 165, 165, 165, 165, 165, 165, 165, 165, 165, - 483, 483, 483, 1184, 1170, 1549, 1237, 1238, 1270, 1266, - 1255, 2254, 1243, 1244, 1254, 1661, 1191, 1191, 1257, 1253, - 600, 1245, 1443, 1660, 1301, 1299, 1300, 165, 1239, 1236, - 1662, 1305, 1235, 1307, 1308, 1309, 1310, 1896, 1312, 1304, - 595, 1293, 1210, 167, 168, 169, 1311, 1754, 952, 953, - 951, 2230, 1327, 963, 962, 972, 973, 965, 966, 967, - 968, 969, 970, 971, 964, 1378, 954, 974, 952, 953, - 951, 102, 1165, 773, 1381, 2229, 772, 1256, 2228, 1355, - 167, 168, 169, 2214, 1562, 1442, 954, 2212, 483, 2094, - 2050, 1337, 167, 168, 169, 1303, 962, 972, 973, 965, + 561, 2244, 2231, 2077, 1984, 2179, 2153, 2102, 2192, 2130, + 1804, 83, 3, 1720, 533, 1907, 2074, 1687, 1428, 1501, + 2205, 1721, 1908, 519, 1904, 1784, 1157, 1569, 1001, 1847, + 502, 574, 1534, 1055, 1519, 1808, 1554, 1785, 919, 1048, + 1539, 504, 1786, 814, 137, 1480, 1919, 872, 1866, 165, + 1385, 1647, 165, 1291, 467, 165, 751, 1183, 1567, 123, + 483, 608, 165, 1377, 1600, 1707, 1778, 81, 1541, 1092, + 165, 1553, 899, 779, 1462, 1085, 1469, 1076, 1058, 1053, + 1430, 583, 1078, 506, 1040, 568, 1354, 1411, 1082, 937, + 1075, 1288, 483, 1190, 495, 483, 165, 483, 792, 782, + 1551, 1445, 1274, 759, 1530, 758, 780, 781, 755, 1388, + 785, 1091, 1485, 1201, 79, 1089, 1065, 917, 1296, 100, + 101, 140, 1520, 1014, 857, 490, 33, 8, 1152, 7, + 605, 1017, 78, 6, 1827, 1826, 1598, 1175, 1260, 106, + 1854, 1855, 107, 2104, 167, 168, 169, 1425, 1426, 1343, + 1342, 1341, 1340, 1339, 1338, 493, 2219, 494, 1331, 1685, + 2149, 1953, 762, 2053, 2126, 590, 594, 102, 752, 816, + 2125, 767, 2072, 819, 818, 2073, 442, 938, 817, 1637, + 2250, 2202, 830, 831, 108, 834, 835, 836, 837, 491, + 1546, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 569, 602, 84, 796, + 795, 1544, 2243, 2174, 609, 2235, 80, 2078, 1586, 773, + 772, 102, 2201, 2173, 1883, 774, 2017, 1166, 1686, 820, + 821, 822, 1093, 35, 1094, 827, 72, 39, 40, 1934, + 1935, 1486, 1933, 948, 1853, 86, 87, 88, 89, 90, + 91, 1834, 1635, 97, 768, 1833, 162, 833, 1751, 437, + 906, 1750, 908, 832, 1752, 1496, 1497, 1495, 892, 1427, + 860, 885, 775, 471, 771, 915, 866, 867, 161, 546, + 891, 552, 553, 550, 551, 102, 549, 548, 547, 1803, + 565, 1543, 167, 168, 169, 564, 554, 555, 1768, 905, + 907, 879, 880, 103, 1513, 125, 1986, 2176, 71, 2008, + 771, 2006, 763, 481, 145, 1330, 485, 766, 479, 1280, + 765, 764, 936, 1332, 1333, 1334, 470, 167, 168, 169, + 1250, 769, 567, 1568, 856, 877, 1980, 1809, 944, 878, + 879, 880, 1830, 1606, 1981, 135, 1611, 1609, 1610, 1601, + 124, 938, 2242, 1275, 896, 897, 771, 855, 914, 894, + 895, 1414, 893, 912, 898, 886, 862, 769, 142, 1842, + 143, 1616, 1251, 471, 1252, 1177, 1178, 134, 133, 160, + 839, 2220, 1987, 838, 1605, 1988, 1603, 459, 471, 1613, + 2122, 1614, 2067, 1615, 1570, 803, 458, 1607, 1463, 801, + 812, 811, 904, 810, 809, 903, 909, 456, 808, 807, + 2251, 806, 805, 800, 776, 1169, 2068, 948, 813, 1289, + 859, 902, 1486, 2233, 756, 1604, 470, 129, 1179, 136, + 1846, 1176, 794, 130, 131, 1952, 770, 165, 146, 165, + 787, 470, 165, 596, 2248, 577, 453, 756, 151, 1552, + 756, 1843, 788, 1960, 754, 465, 1189, 1188, 1592, 1281, + 910, 1285, 924, 1545, 823, 1688, 1690, 471, 483, 483, + 483, 1829, 770, 889, 943, 940, 941, 942, 947, 949, + 946, 1892, 945, 794, 858, 1891, 483, 483, 804, 939, + 1890, 875, 802, 881, 882, 883, 884, 1832, 2172, 930, + 1164, 911, 471, 1163, 1162, 1819, 1636, 1286, 1160, 441, + 436, 2160, 944, 2037, 916, 1932, 829, 1588, 770, 1849, + 470, 2177, 794, 99, 1848, 1765, 1760, 1849, 1712, 443, + 445, 446, 1848, 462, 464, 472, 913, 986, 987, 460, + 461, 473, 447, 448, 477, 476, 463, 1655, 452, 449, + 451, 457, 794, 1666, 138, 470, 455, 474, 2193, 1578, + 794, 73, 1689, 1841, 1491, 165, 1840, 1663, 793, 1761, + 1262, 1261, 1263, 1264, 1265, 787, 790, 791, 1069, 756, + 999, 870, 1046, 784, 788, 984, 921, 922, 876, 1502, + 974, 1763, 2246, 483, 1758, 2247, 165, 2245, 165, 165, + 865, 483, 1045, 1747, 888, 1441, 1759, 483, 132, 868, + 964, 1326, 954, 974, 94, 933, 890, 931, 2168, 793, + 126, 932, 794, 127, 815, 2139, 963, 962, 972, 973, + 965, 966, 967, 968, 969, 970, 971, 964, 1917, 605, + 974, 1587, 1867, 1074, 900, 1297, 951, 1041, 943, 940, + 941, 942, 947, 949, 946, 1885, 945, 874, 793, 95, + 828, 1002, 954, 939, 1279, 1059, 1766, 1764, 1602, 1282, + 1016, 1019, 1021, 1023, 1024, 1026, 1028, 1029, 1095, 1020, + 1022, 475, 1025, 1027, 934, 1030, 1869, 861, 793, 1038, + 1057, 1412, 986, 987, 797, 787, 793, 1797, 1412, 468, + 1673, 1585, 797, 787, 798, 1583, 986, 987, 1349, 1351, + 1352, 803, 798, 499, 469, 167, 168, 169, 801, 1379, + 1350, 1361, 799, 609, 139, 144, 141, 147, 148, 149, + 150, 152, 153, 154, 155, 1359, 1360, 1358, 1580, 1937, + 156, 157, 158, 159, 1276, 2229, 1277, 1580, 1871, 1278, + 1875, 165, 1870, 1062, 1868, 1153, 2236, 2252, 793, 1873, + 901, 1298, 1584, 1443, 1161, 787, 790, 791, 1872, 756, + 873, 1582, 1090, 784, 788, 1380, 2052, 1762, 953, 951, + 1047, 1874, 1876, 483, 2237, 1185, 967, 968, 969, 970, + 971, 964, 783, 1194, 974, 954, 1661, 1198, 1269, 2051, + 483, 483, 595, 483, 1660, 483, 483, 2225, 483, 483, + 483, 483, 483, 483, 952, 953, 951, 1958, 1167, 1168, + 167, 168, 169, 483, 1773, 2253, 1442, 165, 1234, 952, + 953, 951, 954, 71, 1782, 2226, 1894, 1195, 1174, 1181, + 952, 953, 951, 1247, 2140, 1357, 1781, 954, 1887, 1783, + 1193, 952, 953, 951, 483, 2228, 165, 1268, 954, 1640, + 1641, 1642, 1229, 1230, 600, 1549, 1270, 1287, 1255, 954, + 1254, 165, 1253, 952, 953, 951, 1237, 1238, 1245, 1231, + 1774, 1239, 1243, 1244, 1895, 1192, 1159, 165, 1236, 1191, + 1191, 954, 597, 598, 165, 167, 168, 169, 1235, 1754, + 2227, 165, 165, 165, 165, 165, 165, 165, 165, 165, + 483, 483, 483, 1184, 1203, 1171, 1204, 1172, 1206, 1208, + 1170, 1267, 1212, 1214, 1216, 1218, 1220, 167, 168, 169, + 1210, 1562, 1293, 1301, 167, 168, 169, 165, 1560, 2213, + 1305, 1257, 1307, 1308, 1309, 1310, 1232, 1312, 2211, 2093, + 1299, 1300, 965, 966, 967, 968, 969, 970, 971, 964, + 1290, 1327, 974, 2049, 1304, 167, 168, 169, 2025, 1248, + 1940, 1311, 1355, 1896, 1662, 1378, 1165, 167, 168, 169, + 1266, 773, 772, 102, 1381, 963, 962, 972, 973, 965, + 966, 967, 968, 969, 970, 971, 964, 1791, 483, 974, + 1256, 1779, 1631, 1596, 1595, 1294, 1303, 972, 973, 965, 966, 967, 968, 969, 970, 971, 964, 1382, 1383, 974, - 952, 953, 951, 1648, 952, 953, 951, 2026, 1941, 1393, - 1394, 1897, 483, 483, 1791, 1779, 1395, 1631, 954, 1232, - 597, 598, 954, 165, 1356, 1596, 1595, 1294, 1400, 1403, - 1322, 1323, 1324, 1389, 1413, 1258, 1246, 483, 952, 953, - 951, 1390, 1435, 1242, 165, 1241, 1888, 483, 167, 168, - 169, 165, 1560, 165, 1240, 1437, 954, 918, 918, 918, - 1391, 165, 165, 1290, 1044, 1419, 1420, 1984, 483, 80, - 1002, 483, 578, 1481, 1396, 1397, 1968, 2218, 1402, 1405, - 1406, 2121, 483, 1917, 1436, 1968, 2200, 522, 521, 524, - 525, 526, 527, 2120, 1448, 2077, 523, 1392, 528, 1968, - 2167, 1968, 2162, 1389, 1418, 1968, 578, 1421, 1422, 2071, - 578, 1460, 167, 168, 169, 1811, 1248, 1708, 1456, 1580, - 578, 605, 2036, 578, 605, 1505, 1484, 1906, 1506, 1794, - 1391, 1968, 1973, 1521, 1522, 1523, 1917, 483, 1951, 1950, - 1947, 1948, 82, 1555, 1556, 1557, 578, 578, 1559, 1561, - 1947, 1946, 1454, 578, 1486, 1828, 1708, 1509, 1536, 1156, - 1813, 483, 1458, 1806, 1807, 1466, 578, 483, 1542, 950, - 578, 1194, 2055, 1194, 1156, 1155, 1510, 1489, 1487, 35, - 1493, 1579, 1492, 1101, 1100, 2033, 1466, 1465, 1508, 1487, - 2168, 1507, 963, 962, 972, 973, 965, 966, 967, 968, - 969, 970, 971, 964, 1715, 1455, 974, 1566, 1454, 950, - 35, 483, 1514, 1378, 1515, 1516, 1517, 1518, 1378, 1378, - 2056, 2057, 2058, 35, 1581, 1917, 1741, 1716, 1482, 1968, - 1526, 1527, 1528, 1529, 1486, 1537, 1532, 1533, 1466, 1225, - 1488, 1949, 1576, 1550, 1577, 1558, 1548, 1547, 1490, 1466, - 1494, 1488, 1678, 165, 71, 571, 1677, 1589, 2110, 1486, - 165, 1572, 1454, 1580, 562, 165, 165, 1537, 1590, 165, - 1571, 1575, 1563, 1444, 1423, 1454, 1591, 165, 795, 1580, - 1335, 1593, 1594, 609, 165, 71, 609, 1226, 1227, 1228, - 1471, 1474, 1475, 1476, 1472, 796, 1473, 1477, 71, 2165, - 1921, 1922, 1284, 1087, 778, 1191, 777, 71, 2059, 165, - 483, 2133, 2076, 166, 2044, 1158, 166, 1599, 1535, 166, - 1983, 1573, 1531, 1525, 484, 2021, 166, 1524, 1626, 1627, - 71, 1272, 1186, 1629, 166, 1182, 1154, 96, 1788, 1787, - 1630, 860, 1222, 1921, 1922, 1471, 1474, 1475, 1476, 1472, - 592, 1473, 1477, 2060, 2061, 1986, 484, 2134, 1546, 484, - 166, 484, 2240, 2233, 1966, 1965, 1964, 1619, 1924, 1906, - 1355, 1624, 963, 962, 972, 973, 965, 966, 967, 968, - 969, 970, 971, 964, 1788, 1927, 974, 1223, 1224, 1798, - 1650, 1620, 1328, 1732, 1651, 1730, 1926, 1729, 1733, 1734, - 1731, 1475, 1476, 1728, 165, 1658, 1659, 1634, 2223, 2201, - 1898, 1665, 165, 1697, 1668, 1669, 496, 1056, 2037, 1971, - 1706, 1705, 1675, 2225, 1676, 1356, 2205, 1679, 1680, 1681, - 1682, 1683, 1643, 2182, 1657, 2207, 165, 2155, 2157, 2152, - 2185, 2181, 1283, 1693, 1694, 1695, 2158, 165, 165, 165, - 165, 165, 563, 1696, 1792, 1717, 1701, 1652, 1653, 165, - 825, 824, 1656, 165, 1996, 1408, 165, 165, 1787, 1853, - 165, 165, 165, 1049, 1821, 1739, 1672, 569, 1670, 1710, - 1409, 1713, 923, 1753, 1820, 1050, 1722, 103, 2108, 1737, - 1738, 1041, 1684, 1943, 1692, 1942, 1574, 1200, 1199, 1187, - 2031, 1772, 1446, 1447, 1700, 1439, 1962, 1623, 2163, 1742, - 2128, 1709, 1479, 1744, 1704, 1711, 572, 573, 1612, 1639, - 2213, 1771, 1703, 1775, 1776, 1777, 575, 483, 1723, 1756, - 2211, 1726, 165, 1769, 1770, 1735, 2210, 1654, 1740, 165, - 570, 1748, 2186, 1745, 2184, 483, 1724, 1725, 2030, 1727, - 1967, 483, 1293, 1542, 483, 1564, 1194, 576, 82, 2029, - 1901, 483, 1757, 1814, 1708, 2242, 2241, 571, 1667, 1664, - 1070, 1780, 1063, 1825, 2242, 2159, 1940, 1691, 1440, 80, - 85, 77, 1, 454, 165, 165, 165, 165, 165, 1810, - 1424, 1174, 1039, 1824, 1789, 1799, 1800, 1801, 2020, 1795, - 165, 165, 466, 1080, 2231, 165, 1823, 1790, 1259, 1249, - 1718, 1719, 1816, 2080, 1080, 1080, 1080, 1080, 1080, 2130, - 1390, 1974, 1540, 786, 128, 1503, 1822, 1815, 588, 584, - 1482, 1504, 2196, 1080, 93, 749, 483, 1080, 92, 1391, - 789, 887, 1378, 1565, 585, 963, 962, 972, 973, 965, - 966, 967, 968, 969, 970, 971, 964, 2072, 1767, 974, - 1512, 1861, 1862, 1851, 1844, 1866, 1852, 1060, 1061, 587, - 1865, 586, 483, 1107, 1105, 1106, 1857, 1104, 1109, 2015, - 1108, 1103, 1329, 165, 1885, 1863, 480, 1478, 1879, 1864, - 163, 1096, 1064, 483, 826, 444, 1952, 1325, 1597, 483, - 483, 166, 450, 166, 982, 1878, 166, 1702, 1749, 606, - 1907, 972, 973, 965, 966, 967, 968, 969, 970, 971, - 964, 599, 165, 974, 1912, 2179, 2151, 1913, 1910, 1818, - 2153, 2104, 484, 484, 484, 2156, 1722, 2149, 2224, 2204, - 1916, 1894, 588, 584, 1511, 1438, 1864, 1052, 1928, 1925, - 484, 484, 1904, 2028, 1900, 1671, 1011, 1410, 585, 1079, - 1929, 505, 1931, 1434, 1932, 1930, 1348, 520, 517, 1915, - 518, 1944, 1945, 1960, 1449, 1714, 956, 503, 497, 165, - 1937, 581, 582, 587, 1071, 586, 1470, 483, 963, 962, - 972, 973, 965, 966, 967, 968, 969, 970, 971, 964, - 165, 1468, 974, 1956, 1955, 1467, 1621, 1083, 1923, 1919, - 165, 1077, 1453, 1831, 1980, 1975, 935, 580, 492, 761, - 1407, 2139, 1638, 2017, 165, 579, 1542, 165, 61, 166, - 1970, 38, 1977, 1969, 487, 1972, 2219, 1997, 1978, 926, - 589, 32, 31, 30, 29, 28, 23, 22, 21, 955, - 20, 1957, 1958, 19, 25, 1992, 18, 484, 17, 1991, - 166, 16, 166, 166, 1911, 484, 34, 98, 48, 45, - 43, 484, 1999, 105, 104, 46, 2001, 2014, 42, 2005, - 1994, 1995, 863, 27, 26, 496, 15, 2010, 2011, 1080, - 14, 13, 12, 11, 1012, 10, 9, 5, 4, 929, - 24, 1000, 2, 2025, 2000, 0, 0, 0, 0, 0, - 0, 0, 0, 2032, 2027, 0, 0, 0, 0, 0, - 2034, 2035, 2041, 0, 2039, 0, 1051, 1054, 0, 0, - 2040, 0, 0, 0, 0, 0, 0, 0, 1722, 0, - 0, 0, 165, 2046, 2048, 165, 165, 165, 483, 483, - 2047, 0, 0, 0, 0, 0, 0, 2066, 0, 0, - 0, 0, 0, 0, 2049, 0, 2051, 2081, 483, 483, - 483, 0, 2002, 2003, 0, 2004, 0, 0, 2006, 0, - 2008, 0, 0, 2070, 2087, 0, 963, 962, 972, 973, + 1258, 1446, 1447, 1246, 1242, 1337, 1241, 1322, 1323, 1324, + 1240, 1044, 483, 483, 1983, 578, 1395, 2120, 1389, 1967, + 2217, 1356, 80, 165, 2119, 1648, 1967, 2199, 2076, 1400, + 1403, 1967, 2166, 1390, 1811, 1413, 82, 483, 952, 953, + 951, 1391, 1967, 2161, 165, 1967, 578, 483, 2070, 578, + 1794, 165, 1435, 165, 1580, 578, 954, 1436, 1510, 2035, + 578, 165, 165, 1967, 1972, 1419, 1420, 1448, 483, 1950, + 1949, 483, 1481, 1946, 1947, 1946, 1945, 1454, 578, 1486, + 1828, 1916, 483, 952, 953, 951, 1156, 1813, 1389, 1806, + 1807, 35, 1002, 1396, 1397, 1392, 1708, 1402, 1405, 1406, + 578, 954, 1454, 1460, 1466, 578, 605, 1487, 1487, 605, + 35, 1391, 950, 578, 1455, 1514, 1715, 1515, 1516, 1517, + 1518, 1456, 1708, 1418, 1581, 1505, 1421, 1422, 1156, 1155, + 1521, 1522, 1523, 1526, 1527, 1528, 1529, 483, 1506, 1716, + 1101, 1100, 1905, 1555, 1556, 1557, 2054, 2032, 1559, 1561, + 1484, 1916, 1741, 2167, 950, 1509, 1967, 35, 2109, 1948, + 1486, 483, 1466, 1458, 1536, 1466, 71, 483, 1494, 1488, + 1488, 1194, 1542, 1194, 1678, 1465, 1489, 1490, 1486, 1580, + 1493, 1579, 1677, 1492, 1454, 71, 571, 1225, 1508, 1507, + 609, 1916, 1454, 609, 2055, 2056, 2057, 1580, 1788, 1563, + 1444, 988, 989, 990, 991, 992, 993, 994, 995, 996, + 997, 483, 1423, 1378, 1335, 860, 1284, 1566, 1378, 1378, + 522, 521, 524, 525, 526, 527, 1466, 1087, 1576, 523, + 1577, 528, 71, 1532, 1533, 1226, 1227, 1228, 778, 1548, + 1547, 1537, 1550, 777, 2164, 71, 1558, 2132, 2075, 1926, + 2043, 1158, 1535, 165, 1982, 1573, 1531, 1525, 796, 795, + 165, 71, 1524, 1575, 562, 165, 165, 1589, 1191, 165, + 1590, 165, 1572, 1537, 1272, 1571, 1591, 165, 958, 1186, + 961, 1593, 1594, 1182, 165, 1154, 975, 976, 977, 978, + 979, 980, 981, 96, 959, 960, 957, 963, 962, 972, + 973, 965, 966, 967, 968, 969, 970, 971, 964, 165, + 483, 974, 1787, 166, 1920, 1921, 166, 578, 1985, 166, + 2133, 1546, 2239, 2232, 484, 1965, 166, 1626, 1627, 1964, + 2058, 1963, 1629, 1923, 166, 1905, 1925, 1798, 1620, 1630, + 1328, 1599, 1393, 1394, 1734, 2020, 1475, 1476, 1471, 1474, + 1475, 1476, 1472, 1355, 1473, 1477, 484, 1788, 1619, 484, + 166, 484, 1729, 963, 962, 972, 973, 965, 966, 967, + 968, 969, 970, 971, 964, 2059, 2060, 974, 1222, 1471, + 1474, 1475, 1476, 1472, 1728, 1473, 1477, 2222, 1437, 1920, + 1921, 2200, 963, 962, 972, 973, 965, 966, 967, 968, + 969, 970, 971, 964, 165, 1634, 974, 1657, 1732, 1730, + 1897, 1697, 165, 1733, 1731, 1056, 2036, 2154, 2156, 1970, + 1706, 1705, 1356, 1223, 1224, 1643, 2157, 2181, 2224, 2204, + 2206, 1695, 2184, 2151, 1283, 2180, 165, 563, 1792, 1696, + 1408, 825, 824, 1995, 1787, 1049, 1852, 165, 165, 165, + 165, 165, 923, 1821, 1717, 1409, 1694, 1050, 1656, 165, + 1820, 103, 2107, 165, 1942, 1941, 165, 165, 1701, 1574, + 165, 165, 165, 1200, 1739, 1199, 1652, 1653, 1672, 1187, + 2030, 1710, 1439, 1753, 1446, 1447, 1041, 1722, 1684, 1961, + 1623, 2162, 1692, 2127, 1479, 572, 573, 1670, 1704, 569, + 1612, 1772, 1639, 575, 1700, 2212, 1703, 1713, 2210, 2209, + 2185, 1742, 2183, 1709, 2029, 1744, 1966, 1564, 1711, 1771, + 576, 1775, 1776, 1777, 82, 1724, 1725, 483, 1727, 1756, + 1769, 1770, 165, 1293, 1735, 2028, 1900, 1723, 1740, 165, + 1726, 1708, 2241, 2240, 1748, 483, 1745, 1667, 1664, 1070, + 1063, 483, 2241, 2158, 483, 1939, 1194, 1542, 1440, 571, + 1757, 483, 80, 85, 1814, 77, 1, 1790, 454, 1424, + 1039, 466, 1780, 1825, 2230, 1259, 588, 584, 1249, 2079, + 2129, 1973, 588, 584, 165, 165, 165, 165, 165, 1789, + 1810, 1824, 585, 1540, 786, 1795, 128, 1816, 585, 1503, + 165, 165, 1504, 1174, 2195, 93, 1823, 1799, 1800, 1801, + 749, 92, 1390, 1815, 789, 1060, 1061, 587, 887, 586, + 1391, 581, 582, 587, 1565, 586, 2071, 1767, 1822, 1512, + 1107, 1105, 1106, 1104, 1109, 1108, 483, 1103, 1329, 480, + 1478, 163, 1378, 1096, 1064, 826, 444, 1951, 1325, 1597, + 1353, 450, 982, 1362, 1363, 1364, 1365, 1366, 1367, 1368, + 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1702, 1749, + 1864, 606, 483, 599, 1863, 1911, 1856, 1865, 1850, 2178, + 2150, 1851, 2152, 165, 1884, 1862, 2103, 2155, 1844, 2148, + 2223, 1878, 2203, 483, 1511, 1438, 1052, 2027, 1899, 483, + 483, 166, 1671, 166, 1011, 1877, 166, 1410, 1079, 1906, + 505, 1909, 1415, 1434, 1348, 520, 517, 518, 1449, 1714, + 956, 503, 165, 1650, 497, 1903, 1071, 1651, 1470, 1468, + 1467, 1863, 484, 484, 484, 1621, 1083, 1722, 1658, 1659, + 1922, 1918, 1077, 1453, 1665, 1831, 1979, 1668, 1669, 935, + 484, 484, 580, 1924, 492, 1675, 761, 1676, 1407, 2138, + 1679, 1680, 1681, 1682, 1683, 1638, 1915, 1929, 2016, 1943, + 1944, 579, 61, 1959, 38, 487, 1693, 2218, 926, 165, + 1936, 589, 32, 31, 30, 1893, 1928, 483, 1930, 29, + 1931, 28, 23, 22, 21, 20, 19, 25, 18, 17, + 165, 16, 98, 48, 1955, 45, 43, 105, 1954, 104, + 165, 1956, 1957, 1914, 46, 42, 863, 27, 26, 15, + 14, 13, 1737, 1738, 165, 12, 1974, 165, 11, 166, + 1542, 1969, 1976, 10, 1971, 9, 1996, 5, 1977, 2019, + 4, 929, 24, 1968, 1000, 2, 0, 0, 534, 34, + 0, 1991, 0, 0, 1990, 0, 0, 484, 0, 0, + 166, 0, 166, 166, 0, 484, 0, 0, 0, 0, + 0, 484, 0, 0, 2001, 2002, 1999, 2003, 1993, 1994, + 2005, 0, 2007, 34, 2004, 0, 963, 962, 972, 973, 965, 966, 967, 968, 969, 970, 971, 964, 0, 0, - 974, 0, 0, 483, 483, 483, 165, 0, 2085, 0, - 0, 0, 2097, 2099, 2100, 166, 0, 483, 0, 483, - 0, 2086, 0, 2101, 0, 483, 0, 0, 2111, 2107, - 0, 2098, 2016, 0, 2116, 0, 2109, 0, 2113, 2022, - 2023, 2024, 0, 0, 2102, 1910, 0, 484, 0, 1910, - 165, 2118, 0, 2119, 0, 0, 2093, 483, 2122, 0, - 483, 0, 0, 0, 484, 484, 2129, 484, 2125, 484, - 484, 0, 484, 484, 484, 484, 484, 484, 0, 2115, - 0, 0, 0, 0, 0, 2117, 0, 484, 0, 0, - 0, 166, 0, 2148, 0, 0, 0, 2135, 2136, 2137, - 2138, 0, 2142, 0, 2143, 2144, 2145, 0, 2146, 2147, - 0, 2160, 0, 2132, 483, 165, 0, 0, 484, 0, - 166, 2166, 1910, 2170, 0, 0, 0, 0, 0, 0, - 0, 2013, 0, 0, 0, 166, 0, 0, 2176, 0, - 2183, 0, 483, 532, 0, 0, 483, 0, 2172, 483, - 483, 166, 0, 0, 2187, 2192, 2189, 499, 166, 2195, - 0, 0, 0, 0, 2209, 166, 166, 166, 166, 166, - 166, 166, 166, 166, 484, 484, 484, 2215, 2208, 0, - 1722, 1911, 0, 34, 0, 1911, 2222, 0, 0, 0, - 161, 0, 164, 0, 0, 440, 0, 0, 478, 2216, - 2217, 166, 2132, 2197, 0, 440, 2235, 0, 0, 0, - 0, 0, 0, 440, 2239, 103, 0, 0, 0, 0, - 0, 0, 0, 0, 2250, 1295, 145, 0, 0, 0, - 593, 593, 0, 0, 0, 0, 0, 0, 0, 440, - 963, 962, 972, 973, 965, 966, 967, 968, 969, 970, - 971, 964, 0, 0, 974, 0, 0, 0, 1911, 0, - 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, - 0, 2164, 0, 0, 0, 0, 34, 0, 0, 0, - 142, 0, 143, 0, 0, 0, 0, 0, 0, 0, - 0, 160, 0, 0, 0, 0, 484, 484, 0, 0, - 0, 1344, 1345, 1346, 1347, 0, 0, 166, 0, 0, - 0, 34, 0, 0, 0, 0, 2012, 0, 0, 0, + 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2026, 2031, 0, 0, 0, 0, 0, 0, 2040, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 570, 2039, + 0, 0, 0, 0, 0, 0, 0, 0, 1722, 0, + 0, 165, 2045, 2047, 165, 165, 165, 483, 483, 0, + 0, 0, 0, 0, 0, 0, 0, 2065, 0, 0, + 2048, 0, 2050, 0, 0, 0, 2080, 483, 483, 483, + 0, 0, 0, 0, 0, 2046, 0, 0, 0, 0, + 0, 0, 0, 2086, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1860, 1861, 0, 0, 0, 0, + 0, 0, 483, 483, 483, 165, 0, 0, 0, 0, + 0, 0, 2096, 2098, 2099, 166, 483, 2085, 483, 2084, + 0, 0, 0, 2100, 483, 0, 2110, 1909, 2092, 0, + 0, 1909, 2112, 0, 2115, 2108, 0, 0, 2106, 0, + 2101, 0, 0, 0, 0, 0, 0, 484, 2117, 165, + 2118, 2114, 0, 1644, 1645, 1646, 483, 2116, 2121, 483, + 1912, 0, 0, 0, 484, 484, 2128, 484, 0, 484, + 484, 0, 484, 484, 484, 484, 484, 484, 2124, 0, + 0, 1927, 0, 0, 0, 0, 0, 484, 0, 0, + 0, 166, 0, 0, 0, 0, 0, 2131, 2147, 0, + 0, 0, 0, 0, 1909, 2159, 0, 0, 0, 0, + 0, 0, 0, 483, 165, 0, 0, 0, 484, 2165, + 166, 0, 0, 2169, 0, 0, 0, 0, 0, 0, + 532, 0, 0, 0, 0, 166, 2175, 0, 0, 2182, + 0, 483, 0, 0, 0, 483, 0, 0, 483, 483, + 0, 166, 2186, 0, 2188, 2191, 0, 2194, 166, 0, + 2014, 0, 0, 0, 2208, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 484, 484, 484, 2214, 2207, 164, + 1722, 0, 440, 0, 2221, 478, 2131, 2196, 0, 0, + 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, + 440, 166, 592, 0, 1998, 2234, 0, 0, 2000, 161, + 0, 0, 0, 2238, 0, 0, 0, 593, 593, 2009, + 2010, 0, 0, 2249, 0, 0, 440, 0, 0, 0, + 0, 0, 0, 0, 103, 2024, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, + 0, 0, 2033, 2034, 0, 0, 2038, 0, 0, 0, + 0, 0, 484, 0, 0, 0, 0, 0, 496, 963, + 962, 972, 973, 965, 966, 967, 968, 969, 970, 971, + 964, 0, 0, 974, 0, 0, 1755, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 484, 484, 0, 142, + 0, 143, 0, 0, 0, 0, 0, 166, 0, 0, + 160, 0, 0, 0, 0, 2069, 918, 918, 918, 0, 0, 484, 0, 0, 0, 0, 0, 0, 166, 0, - 0, 484, 0, 0, 0, 166, 0, 166, 0, 0, - 0, 0, 0, 0, 0, 166, 166, 0, 0, 0, - 146, 0, 484, 0, 0, 484, 1398, 1399, 0, 0, - 151, 0, 0, 0, 0, 0, 484, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, - 37, 72, 39, 40, 0, 0, 0, 531, 0, 0, - 0, 0, 0, 0, 496, 0, 0, 0, 76, 0, - 0, 0, 0, 41, 67, 68, 0, 65, 69, 0, - 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, - 0, 484, 0, 0, 1042, 963, 962, 972, 973, 965, - 966, 967, 968, 969, 970, 971, 964, 0, 0, 974, - 0, 0, 0, 54, 0, 484, 1500, 482, 0, 0, - 0, 484, 0, 71, 963, 962, 972, 973, 965, 966, - 967, 968, 969, 970, 971, 964, 138, 0, 974, 0, - 0, 0, 0, 0, 0, 0, 439, 0, 0, 607, - 0, 0, 753, 0, 760, 0, 486, 1858, 0, 0, - 0, 0, 0, 0, 566, 484, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1538, 0, 963, 962, 972, - 973, 965, 966, 967, 968, 969, 970, 971, 964, 0, - 757, 974, 0, 0, 0, 44, 47, 50, 49, 52, - 0, 64, 0, 0, 70, 0, 0, 166, 0, 0, + 0, 484, 0, 0, 0, 166, 34, 166, 0, 0, + 0, 0, 1858, 1859, 0, 166, 166, 2013, 0, 983, + 985, 0, 484, 0, 0, 484, 0, 1879, 1880, 0, + 1881, 1882, 0, 2097, 0, 0, 484, 0, 0, 146, + 0, 1888, 1889, 0, 0, 0, 0, 0, 0, 151, + 998, 0, 0, 0, 1003, 1004, 1005, 1006, 1007, 1008, + 1009, 1010, 2012, 1013, 1015, 1018, 1018, 1018, 1015, 1018, + 1018, 1015, 1018, 1031, 1032, 1033, 1034, 1035, 1036, 1037, + 2011, 0, 0, 0, 0, 1043, 0, 0, 0, 34, + 0, 484, 0, 0, 0, 0, 0, 0, 0, 2134, + 2135, 2136, 2137, 0, 2141, 0, 2142, 2143, 2144, 0, + 2145, 2146, 0, 0, 0, 484, 1080, 0, 0, 0, + 0, 484, 0, 0, 1938, 0, 963, 962, 972, 973, + 965, 966, 967, 968, 969, 970, 971, 964, 0, 0, + 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2171, 0, 0, 0, 0, 138, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, + 0, 963, 962, 972, 973, 965, 966, 967, 968, 969, + 970, 971, 964, 0, 0, 974, 0, 0, 0, 963, + 962, 972, 973, 965, 966, 967, 968, 969, 970, 971, + 964, 2215, 2216, 974, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 166, - 166, 0, 0, 166, 0, 0, 0, 53, 75, 74, - 0, 166, 62, 63, 51, 0, 0, 0, 166, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 440, 0, 440, 0, 0, 440, 0, 0, 0, 0, - 1649, 0, 0, 166, 484, 0, 0, 0, 0, 0, - 0, 0, 0, 55, 56, 0, 57, 58, 59, 60, - 963, 962, 972, 973, 965, 966, 967, 968, 969, 970, - 971, 964, 0, 0, 974, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 139, 144, 141, 147, - 148, 149, 150, 152, 153, 154, 155, 0, 0, 0, - 0, 0, 156, 157, 158, 159, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 988, 989, 990, 991, 992, - 993, 994, 995, 996, 997, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, - 1124, 0, 0, 0, 0, 0, 166, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 73, 0, 440, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 166, 0, 0, 0, 593, 0, 0, 0, 0, 0, - 0, 166, 166, 166, 166, 166, 0, 0, 0, 440, - 0, 440, 1086, 166, 0, 0, 0, 166, 0, 0, - 166, 166, 0, 0, 166, 166, 166, 958, 0, 961, - 0, 0, 0, 1674, 0, 975, 976, 977, 978, 979, - 980, 981, 0, 959, 960, 957, 963, 962, 972, 973, + 166, 1997, 0, 166, 1857, 166, 0, 0, 0, 0, + 0, 166, 0, 0, 0, 0, 0, 440, 166, 440, + 0, 0, 440, 0, 963, 962, 972, 973, 965, 966, + 967, 968, 969, 970, 971, 964, 1649, 0, 974, 0, + 0, 0, 0, 166, 484, 0, 0, 161, 0, 0, + 0, 0, 0, 0, 0, 0, 963, 962, 972, 973, 965, 966, 967, 968, 969, 970, 971, 964, 0, 0, - 974, 0, 0, 1698, 1699, 1054, 0, 0, 0, 0, - 0, 0, 0, 1112, 0, 0, 0, 0, 0, 0, + 974, 0, 103, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 145, 963, 962, 972, 973, 965, 966, + 967, 968, 969, 970, 971, 964, 0, 0, 974, 0, + 0, 0, 0, 0, 0, 139, 144, 141, 147, 148, + 149, 150, 152, 153, 154, 155, 0, 0, 0, 0, + 0, 156, 157, 158, 159, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 142, 166, 143, + 0, 0, 531, 0, 0, 440, 166, 0, 160, 0, + 0, 955, 0, 0, 0, 2087, 2088, 2089, 2090, 2091, + 0, 593, 0, 2094, 2095, 0, 0, 0, 0, 0, + 166, 0, 0, 0, 0, 0, 440, 0, 440, 1086, + 0, 166, 166, 166, 166, 166, 0, 496, 0, 0, + 0, 0, 0, 166, 0, 0, 1012, 166, 0, 0, + 166, 166, 482, 0, 166, 166, 166, 146, 918, 918, + 918, 0, 0, 0, 0, 0, 0, 151, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1051, 1054, + 0, 0, 0, 0, 607, 0, 0, 753, 0, 760, + 962, 972, 973, 965, 966, 967, 968, 969, 970, 971, + 964, 0, 0, 974, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 484, 0, 0, 484, 0, - 0, 0, 0, 0, 0, 484, 0, 1125, 0, 0, - 0, 0, 0, 0, 0, 607, 607, 607, 0, 0, - 0, 864, 0, 869, 0, 0, 871, 0, 166, 166, - 166, 166, 166, 925, 927, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 166, 166, 0, 0, 0, 166, - 0, 0, 0, 0, 440, 0, 0, 0, 1138, 1141, - 1142, 1143, 1144, 1145, 1146, 0, 1147, 1148, 1149, 1150, - 1151, 1126, 1127, 1128, 1129, 1110, 1111, 1139, 0, 1113, - 484, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, - 1123, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1197, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, - 0, 0, 0, 0, 1197, 1197, 0, 166, 0, 0, - 440, 0, 0, 0, 0, 0, 0, 484, 0, 0, - 1067, 0, 0, 484, 484, 0, 0, 0, 607, 0, - 0, 0, 0, 0, 1097, 0, 0, 0, 0, 440, - 0, 0, 0, 0, 1140, 0, 166, 0, 0, 0, - 0, 0, 0, 0, 1292, 0, 0, 0, 0, 0, - 1073, 0, 0, 1084, 1887, 0, 0, 0, 0, 0, - 440, 0, 0, 0, 0, 0, 0, 440, 0, 0, - 0, 0, 0, 0, 1313, 1314, 440, 440, 440, 440, - 440, 440, 440, 0, 0, 0, 0, 0, 0, 1902, - 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, - 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, - 440, 0, 0, 0, 166, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2189, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, + 166, 166, 166, 138, 0, 0, 0, 0, 0, 0, + 0, 440, 0, 0, 166, 166, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 484, 0, 0, 0, 0, 0, 1197, 0, 0, 1482, + 0, 0, 0, 1042, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1197, 1197, 0, 0, 0, 484, 440, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, + 0, 0, 0, 484, 484, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, + 0, 1292, 0, 566, 0, 0, 166, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, + 0, 0, 0, 0, 440, 0, 0, 0, 0, 757, + 0, 1313, 1314, 440, 440, 440, 440, 440, 440, 440, + 0, 0, 0, 139, 144, 141, 147, 148, 149, 150, + 152, 153, 154, 155, 0, 0, 0, 0, 0, 156, + 157, 158, 159, 166, 0, 0, 0, 440, 0, 0, + 0, 484, 0, 0, 0, 0, 0, 1295, 0, 0, + 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, - 0, 166, 0, 0, 1353, 0, 0, 1362, 1363, 1364, - 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, - 1375, 1376, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 593, 1292, 0, 0, 0, 593, 593, 0, - 0, 593, 593, 593, 0, 0, 0, 1197, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 753, 0, 0, 0, 0, 1102, 1415, 593, 593, 593, - 593, 593, 0, 1196, 0, 0, 1432, 1202, 1202, 0, - 1202, 0, 1202, 1202, 0, 1211, 1202, 1202, 1202, 1202, - 1202, 0, 0, 0, 0, 0, 0, 440, 1196, 1196, - 753, 0, 0, 1292, 440, 0, 440, 0, 0, 0, - 0, 0, 0, 0, 440, 440, 166, 0, 0, 166, - 166, 166, 484, 484, 0, 0, 0, 0, 0, 2019, - 0, 1271, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1233, 484, 484, 484, 0, 0, 0, 0, 0, - 0, 0, 496, 0, 0, 0, 0, 0, 0, 2042, - 0, 0, 2043, 0, 0, 2045, 0, 0, 0, 0, - 1273, 0, 0, 0, 0, 0, 0, 484, 484, 484, - 166, 0, 0, 0, 0, 0, 0, 607, 607, 607, - 0, 484, 0, 484, 0, 0, 0, 0, 0, 484, - 0, 1302, 0, 0, 0, 0, 0, 0, 1306, 0, - 0, 0, 0, 0, 0, 0, 0, 1315, 1316, 1317, - 1318, 1319, 1320, 1321, 166, 0, 0, 0, 0, 0, - 0, 484, 0, 0, 484, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1084, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2106, 496, 0, 0, 0, 1384, 0, 607, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 484, 166, - 0, 1196, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 440, 0, 0, 1416, - 1417, 0, 0, 440, 0, 0, 484, 0, 440, 440, - 484, 0, 440, 484, 484, 0, 0, 0, 0, 0, - 440, 0, 0, 0, 1450, 0, 0, 440, 0, 0, - 0, 0, 0, 0, 1067, 0, 0, 607, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 440, 0, 0, 607, 0, 0, 607, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1457, 753, - 0, 0, 0, 0, 0, 1461, 0, 1464, 0, 0, - 0, 0, 0, 0, 0, 0, 1483, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1644, 1645, 1646, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 593, 593, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 760, 0, 0, 0, 0, 0, - 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 440, 753, 0, - 0, 0, 0, 0, 760, 1432, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 593, 440, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1197, - 440, 440, 440, 440, 440, 0, 0, 0, 753, 0, - 0, 0, 1736, 0, 0, 0, 440, 0, 0, 440, - 440, 0, 0, 440, 1746, 1292, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, + 1292, 0, 0, 0, 593, 593, 0, 0, 593, 593, + 593, 0, 0, 0, 1197, 0, 0, 0, 0, 0, + 0, 0, 0, 1344, 1345, 1346, 1347, 0, 0, 0, + 607, 607, 607, 0, 593, 593, 593, 593, 593, 0, + 0, 0, 0, 1432, 0, 0, 0, 0, 925, 927, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, + 1292, 440, 0, 440, 0, 0, 0, 0, 1398, 1399, + 0, 440, 440, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 166, 0, 0, 166, 166, + 166, 484, 484, 0, 0, 0, 0, 0, 1654, 0, + 0, 570, 0, 0, 0, 0, 496, 0, 0, 0, + 0, 484, 484, 484, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1691, 0, + 0, 0, 0, 0, 0, 1067, 484, 484, 484, 166, + 0, 0, 0, 607, 0, 0, 0, 0, 1500, 1097, + 484, 0, 484, 0, 1080, 0, 0, 0, 484, 0, + 0, 1718, 1719, 0, 0, 1080, 1080, 1080, 1080, 1080, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1482, 0, 166, 1080, 0, 0, 0, 1080, 0, + 484, 0, 0, 484, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1538, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 864, 0, 869, 0, 0, 871, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 484, 166, 0, + 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, + 440, 0, 0, 0, 0, 440, 440, 0, 0, 440, + 0, 1624, 0, 0, 0, 484, 0, 440, 0, 484, + 1818, 0, 484, 484, 440, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1196, 0, + 0, 0, 1202, 1202, 0, 1202, 0, 1202, 1202, 0, + 1211, 1202, 1202, 1202, 1202, 1202, 0, 0, 0, 0, + 0, 0, 0, 1196, 1196, 753, 0, 593, 593, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1073, + 0, 0, 1084, 0, 0, 0, 0, 0, 593, 0, + 0, 0, 0, 0, 0, 0, 1271, 0, 0, 0, + 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, + 0, 0, 1432, 0, 0, 1910, 0, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 593, 440, 0, 0, 0, + 1080, 0, 0, 0, 0, 0, 1197, 440, 440, 440, + 440, 440, 607, 607, 607, 0, 0, 0, 0, 1736, + 0, 0, 0, 440, 0, 1674, 440, 440, 0, 0, + 440, 1746, 1292, 0, 0, 0, 0, 0, 35, 36, + 37, 72, 39, 40, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1698, 1699, 1054, 76, 0, + 0, 0, 0, 41, 67, 68, 0, 65, 69, 0, + 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 440, 0, 1102, 0, 0, 0, 0, 1802, + 1384, 0, 607, 54, 0, 0, 0, 0, 0, 1197, + 0, 0, 0, 71, 0, 0, 1196, 0, 0, 1292, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1416, 1417, 0, 0, 0, 0, + 0, 0, 2015, 0, 440, 440, 440, 440, 440, 2021, + 2022, 2023, 0, 0, 0, 0, 0, 0, 0, 1450, + 440, 440, 0, 0, 0, 0, 0, 0, 0, 1067, + 1233, 0, 607, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 44, 47, 50, 49, 52, + 607, 64, 0, 607, 70, 593, 0, 0, 0, 1273, + 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 53, 75, 74, + 0, 0, 62, 63, 51, 0, 0, 0, 0, 0, + 1302, 0, 0, 0, 0, 0, 0, 1306, 0, 0, + 0, 0, 0, 440, 0, 0, 1315, 1316, 1317, 1318, + 1319, 1320, 1321, 0, 0, 0, 1197, 0, 0, 760, + 0, 0, 0, 55, 56, 0, 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1084, 0, 440, 753, 0, 0, 1886, 0, 0, 760, + 0, 1910, 0, 34, 0, 1910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 440, 0, 1084, 0, 0, - 0, 0, 1802, 0, 1608, 0, 0, 0, 0, 1617, - 1618, 0, 1197, 1622, 0, 0, 0, 1633, 0, 0, - 0, 1625, 1292, 0, 0, 0, 0, 0, 1628, 0, + 0, 1901, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 753, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 440, 440, 440, - 440, 440, 0, 1632, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 440, 440, 0, 0, 0, 1850, 0, + 1197, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 440, 0, 0, 0, 0, 0, 73, 0, 1910, 0, + 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2163, 0, 0, 440, 0, 34, 440, 161, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1457, 0, 0, + 0, 0, 0, 103, 1461, 125, 1464, 0, 0, 0, + 0, 34, 0, 0, 145, 1483, 0, 0, 0, 0, + 0, 0, 1633, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 135, 0, 1197, 0, 0, + 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, + 143, 0, 0, 0, 0, 112, 113, 134, 133, 160, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2018, 440, 0, 0, 440, 440, 440, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, + 2041, 0, 0, 2042, 0, 0, 2044, 129, 110, 136, + 117, 109, 0, 130, 131, 0, 0, 0, 146, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 151, 118, + 0, 0, 0, 0, 0, 1432, 0, 0, 1196, 0, + 0, 0, 0, 121, 119, 114, 115, 116, 120, 0, + 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, + 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, + 161, 0, 0, 0, 0, 0, 1084, 0, 0, 0, + 0, 1173, 0, 1608, 0, 0, 0, 0, 1617, 1618, + 0, 0, 1622, 0, 0, 103, 0, 125, 0, 0, + 1625, 2105, 496, 0, 0, 0, 145, 1628, 0, 1793, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 138, 0, 0, 1805, 0, 0, + 0, 1196, 1632, 1812, 440, 0, 1805, 135, 0, 0, + 0, 607, 124, 1817, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1197, + 142, 0, 143, 0, 0, 0, 0, 1177, 1178, 134, + 133, 160, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 126, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, - 0, 0, 0, 0, 0, 0, 1859, 1860, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1124, 607, 129, + 1179, 136, 0, 1176, 0, 130, 131, 0, 0, 0, + 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1880, 1881, 0, 1882, 1883, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1889, 1890, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, - 0, 0, 0, 1196, 0, 0, 0, 0, 0, 1197, + 0, 0, 0, 0, 0, 607, 0, 0, 1196, 0, + 0, 1913, 1202, 0, 0, 0, 0, 0, 0, 0, + 1743, 0, 0, 0, 139, 144, 141, 147, 148, 149, + 150, 152, 153, 154, 155, 0, 0, 0, 0, 0, + 156, 157, 158, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1112, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, + 0, 0, 0, 0, 0, 1796, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, + 0, 0, 1196, 0, 1125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 132, 0, 0, 0, 0, 0, 0, 1835, 1836, 1837, + 1838, 1839, 126, 0, 0, 127, 0, 0, 0, 0, + 0, 0, 0, 1084, 1845, 1138, 1141, 1142, 1143, 1144, + 1145, 1146, 0, 1147, 1148, 1149, 1150, 1151, 1126, 1127, + 1128, 1129, 1110, 1111, 1139, 0, 1113, 0, 1114, 1115, + 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1130, 1131, + 1132, 1133, 1134, 1135, 1136, 1137, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1743, 0, 0, 0, 0, 0, 0, 1939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1793, 0, 0, 0, 0, 0, - 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1805, 1197, 0, 0, 1196, 0, 1812, 0, - 0, 1805, 0, 440, 0, 0, 607, 0, 1817, 0, - 0, 0, 0, 440, 0, 0, 1796, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, - 440, 0, 0, 0, 0, 0, 0, 161, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1998, 0, 0, 0, - 0, 0, 103, 0, 125, 0, 0, 0, 1835, 1836, - 1837, 1838, 1839, 145, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 607, 1084, 1845, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1197, 0, 0, 135, 0, 0, 0, 0, 124, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1202, - 0, 0, 0, 0, 0, 0, 0, 142, 0, 143, - 0, 0, 0, 0, 112, 113, 134, 133, 160, 0, - 607, 0, 0, 1196, 0, 440, 1914, 1202, 440, 440, - 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1899, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 129, 110, 136, 117, - 109, 0, 130, 131, 0, 0, 0, 146, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 151, 118, 1432, - 2088, 2089, 2090, 2091, 2092, 0, 0, 0, 2095, 2096, - 0, 0, 121, 119, 114, 115, 116, 120, 0, 0, - 0, 0, 111, 0, 753, 0, 0, 1196, 0, 0, - 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1963, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1898, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 139, 144, 141, 147, + 148, 149, 150, 152, 153, 154, 155, 0, 0, 1805, + 2066, 1140, 156, 157, 158, 159, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2081, + 2082, 2083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1976, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1979, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1990, 0, - 0, 1993, 0, 138, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1805, 1805, 1805, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2111, 0, + 2113, 0, 1962, 0, 0, 0, 1805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1197, 0, 1196, 0, 0, 0, 0, + 0, 0, 0, 1975, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1978, 0, 0, 0, 0, 1805, 0, + 0, 607, 0, 0, 0, 0, 0, 1989, 0, 0, + 1992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2190, 0, 0, 0, 0, 132, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, - 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1805, 2067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2082, 2083, 2084, 0, 0, - 0, 0, 0, 0, 0, 0, 2062, 0, 0, 2063, - 2064, 2065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1805, 1805, 1805, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2112, 0, 2114, 0, 0, 0, - 0, 0, 1805, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 139, 144, 141, 147, 148, 149, 150, - 152, 153, 154, 155, 0, 0, 0, 0, 0, 156, - 157, 158, 159, 0, 1805, 0, 0, 607, 0, 0, + 0, 0, 0, 0, 0, 1805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2124, 0, 0, 0, 0, 0, + 0, 1196, 0, 2187, 0, 0, 0, 1805, 0, 0, + 607, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1805, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2061, 0, 0, 2062, 2063, 2064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1196, 0, 2188, - 0, 0, 0, 1805, 0, 0, 607, 607, 0, 2171, - 732, 719, 0, 0, 668, 735, 639, 657, 744, 659, - 662, 702, 618, 681, 312, 654, 0, 643, 614, 650, - 615, 641, 670, 222, 674, 638, 721, 684, 734, 270, - 0, 620, 644, 326, 704, 364, 208, 279, 277, 392, - 232, 225, 221, 207, 254, 285, 324, 382, 318, 741, - 274, 691, 0, 373, 297, 0, 0, 0, 672, 724, - 679, 715, 667, 703, 628, 690, 736, 655, 699, 737, - 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, - 168, 169, 0, 2198, 2199, 0, 0, 0, 0, 0, - 197, 0, 204, 696, 731, 652, 698, 218, 258, 224, - 217, 389, 701, 747, 613, 693, 0, 616, 619, 743, - 727, 647, 648, 0, 0, 0, 0, 0, 0, 0, - 671, 680, 712, 665, 0, 0, 0, 0, 0, 0, - 0, 0, 645, 0, 689, 0, 0, 0, 624, 617, - 0, 0, 0, 0, 669, 0, 0, 0, 627, 0, - 646, 713, 0, 611, 244, 621, 298, 0, 717, 726, - 666, 420, 730, 664, 663, 733, 708, 625, 723, 658, - 269, 623, 266, 171, 186, 0, 656, 308, 347, 353, - 722, 642, 651, 209, 649, 351, 322, 406, 193, 234, - 344, 327, 349, 688, 706, 350, 275, 394, 339, 404, - 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, - 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, - 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, - 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, - 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, - 434, 189, 417, 182, 920, 416, 304, 393, 401, 293, - 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, - 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, - 435, 195, 637, 718, 388, 426, 431, 0, 340, 196, - 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, - 334, 247, 315, 405, 233, 413, 303, 190, 253, 371, - 267, 276, 710, 746, 321, 352, 199, 408, 372, 632, - 636, 630, 631, 682, 683, 633, 738, 739, 740, 714, - 626, 0, 634, 635, 0, 720, 728, 729, 687, 170, - 183, 272, 742, 341, 237, 433, 415, 411, 612, 629, - 215, 640, 0, 0, 653, 660, 661, 673, 675, 676, - 677, 678, 686, 694, 695, 697, 705, 707, 709, 711, - 716, 725, 745, 172, 173, 184, 192, 202, 214, 227, - 235, 245, 249, 252, 255, 256, 259, 264, 281, 286, - 287, 288, 289, 305, 306, 307, 310, 313, 314, 317, - 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, - 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, - 367, 368, 376, 380, 395, 396, 407, 419, 423, 246, - 403, 424, 0, 280, 685, 692, 282, 231, 248, 257, - 700, 414, 377, 188, 348, 238, 177, 205, 191, 212, - 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, - 345, 200, 363, 383, 384, 385, 387, 294, 219, 732, - 719, 0, 0, 668, 735, 639, 657, 744, 659, 662, - 702, 618, 681, 312, 654, 0, 643, 614, 650, 615, - 641, 670, 222, 674, 638, 721, 684, 734, 270, 0, - 620, 644, 326, 704, 364, 208, 279, 277, 392, 232, - 225, 221, 207, 254, 285, 324, 382, 318, 741, 274, - 691, 0, 373, 297, 0, 0, 0, 672, 724, 679, - 715, 667, 703, 628, 690, 736, 655, 699, 737, 260, - 206, 175, 309, 374, 236, 0, 0, 0, 167, 168, - 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, - 0, 204, 696, 731, 652, 698, 218, 258, 224, 217, - 389, 701, 747, 613, 693, 0, 616, 619, 743, 727, - 647, 648, 0, 0, 0, 0, 0, 0, 0, 671, - 680, 712, 665, 0, 0, 0, 0, 0, 0, 1903, - 0, 645, 0, 689, 0, 0, 0, 624, 617, 0, - 0, 0, 0, 669, 0, 0, 0, 627, 0, 646, - 713, 0, 611, 244, 621, 298, 0, 717, 726, 666, - 420, 730, 664, 663, 733, 708, 625, 723, 658, 269, - 623, 266, 171, 186, 0, 656, 308, 347, 353, 722, - 642, 651, 209, 649, 351, 322, 406, 193, 234, 344, - 327, 349, 688, 706, 350, 275, 394, 339, 404, 421, - 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, - 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, - 273, 429, 185, 359, 201, 178, 381, 402, 198, 362, - 0, 0, 0, 180, 400, 378, 292, 262, 263, 179, - 0, 343, 220, 240, 211, 311, 397, 398, 210, 434, - 189, 417, 182, 920, 416, 304, 393, 401, 293, 284, - 181, 399, 291, 283, 268, 230, 250, 337, 278, 338, - 251, 300, 299, 301, 0, 176, 0, 375, 410, 435, - 195, 637, 718, 388, 426, 431, 0, 340, 196, 241, - 229, 336, 239, 271, 425, 427, 428, 430, 194, 334, - 247, 315, 405, 233, 413, 303, 190, 253, 371, 267, - 276, 710, 746, 321, 352, 199, 408, 372, 632, 636, - 630, 631, 682, 683, 633, 738, 739, 740, 714, 626, - 0, 634, 635, 0, 720, 728, 729, 687, 170, 183, - 272, 742, 341, 237, 433, 415, 411, 612, 629, 215, - 640, 0, 0, 653, 660, 661, 673, 675, 676, 677, - 678, 686, 694, 695, 697, 705, 707, 709, 711, 716, - 725, 745, 172, 173, 184, 192, 202, 214, 227, 235, - 245, 249, 252, 255, 256, 259, 264, 281, 286, 287, - 288, 289, 305, 306, 307, 310, 313, 314, 317, 319, - 320, 323, 329, 330, 331, 332, 333, 335, 342, 346, - 354, 355, 356, 357, 358, 360, 361, 365, 366, 367, - 368, 376, 380, 395, 396, 407, 419, 423, 246, 403, - 424, 0, 280, 685, 692, 282, 231, 248, 257, 700, - 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, - 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, - 200, 363, 383, 384, 385, 387, 294, 219, 732, 719, - 0, 0, 668, 735, 639, 657, 744, 659, 662, 702, - 618, 681, 312, 654, 0, 643, 614, 650, 615, 641, - 670, 222, 674, 638, 721, 684, 734, 270, 0, 620, - 644, 326, 704, 364, 208, 279, 277, 392, 232, 225, - 221, 207, 254, 285, 324, 382, 318, 741, 274, 691, - 0, 373, 297, 0, 0, 0, 672, 724, 679, 715, - 667, 703, 628, 690, 736, 655, 699, 737, 260, 206, - 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, - 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, - 204, 696, 731, 652, 698, 218, 258, 224, 217, 389, - 701, 747, 613, 693, 0, 616, 619, 743, 727, 647, - 648, 0, 0, 0, 0, 0, 0, 0, 671, 680, - 712, 665, 0, 0, 0, 0, 0, 0, 1747, 0, - 645, 0, 689, 0, 0, 0, 624, 617, 0, 0, - 0, 0, 669, 0, 0, 0, 627, 0, 646, 713, - 0, 611, 244, 621, 298, 0, 717, 726, 666, 420, - 730, 664, 663, 733, 708, 625, 723, 658, 269, 623, - 266, 171, 186, 0, 656, 308, 347, 353, 722, 642, - 651, 209, 649, 351, 322, 406, 193, 234, 344, 327, - 349, 688, 706, 350, 275, 394, 339, 404, 421, 422, - 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, - 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, - 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, - 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, - 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, - 417, 182, 920, 416, 304, 393, 401, 293, 284, 181, - 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, - 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, - 637, 718, 388, 426, 431, 0, 340, 196, 241, 229, - 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, - 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, - 710, 746, 321, 352, 199, 408, 372, 632, 636, 630, - 631, 682, 683, 633, 738, 739, 740, 714, 626, 0, - 634, 635, 0, 720, 728, 729, 687, 170, 183, 272, - 742, 341, 237, 433, 415, 411, 612, 629, 215, 640, - 0, 0, 653, 660, 661, 673, 675, 676, 677, 678, - 686, 694, 695, 697, 705, 707, 709, 711, 716, 725, - 745, 172, 173, 184, 192, 202, 214, 227, 235, 245, - 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, - 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, - 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, - 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, - 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, - 0, 280, 685, 692, 282, 231, 248, 257, 700, 414, - 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, - 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, - 363, 383, 384, 385, 387, 294, 219, 732, 719, 0, - 0, 668, 735, 639, 657, 744, 659, 662, 702, 618, - 681, 312, 654, 0, 643, 614, 650, 615, 641, 670, - 222, 674, 638, 721, 684, 734, 270, 0, 620, 644, - 326, 704, 364, 208, 279, 277, 392, 232, 225, 221, - 207, 254, 285, 324, 382, 318, 741, 274, 691, 0, - 373, 297, 0, 0, 0, 672, 724, 679, 715, 667, - 703, 628, 690, 736, 655, 699, 737, 260, 206, 175, - 309, 374, 236, 0, 0, 0, 167, 168, 169, 0, - 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, - 696, 731, 652, 698, 218, 258, 224, 217, 389, 701, - 747, 613, 693, 0, 616, 619, 743, 727, 647, 648, - 0, 0, 0, 0, 0, 0, 0, 671, 680, 712, - 665, 0, 0, 0, 0, 0, 0, 1459, 0, 645, - 0, 689, 0, 0, 0, 624, 617, 0, 0, 0, - 0, 669, 0, 0, 0, 627, 0, 646, 713, 0, - 611, 244, 621, 298, 0, 717, 726, 666, 420, 730, - 664, 663, 733, 708, 625, 723, 658, 269, 623, 266, - 171, 186, 0, 656, 308, 347, 353, 722, 642, 651, - 209, 649, 351, 322, 406, 193, 234, 344, 327, 349, - 688, 706, 350, 275, 394, 339, 404, 421, 422, 216, - 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, - 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, - 185, 359, 201, 178, 381, 402, 198, 362, 0, 0, - 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, - 220, 240, 211, 311, 397, 398, 210, 434, 189, 417, - 182, 920, 416, 304, 393, 401, 293, 284, 181, 399, - 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, - 299, 301, 0, 176, 0, 375, 410, 435, 195, 637, - 718, 388, 426, 431, 0, 340, 196, 241, 229, 336, - 239, 271, 425, 427, 428, 430, 194, 334, 247, 315, - 405, 233, 413, 303, 190, 253, 371, 267, 276, 710, - 746, 321, 352, 199, 408, 372, 632, 636, 630, 631, - 682, 683, 633, 738, 739, 740, 714, 626, 0, 634, - 635, 0, 720, 728, 729, 687, 170, 183, 272, 742, - 341, 237, 433, 415, 411, 612, 629, 215, 640, 0, - 0, 653, 660, 661, 673, 675, 676, 677, 678, 686, - 694, 695, 697, 705, 707, 709, 711, 716, 725, 745, - 172, 173, 184, 192, 202, 214, 227, 235, 245, 249, - 252, 255, 256, 259, 264, 281, 286, 287, 288, 289, - 305, 306, 307, 310, 313, 314, 317, 319, 320, 323, - 329, 330, 331, 332, 333, 335, 342, 346, 354, 355, - 356, 357, 358, 360, 361, 365, 366, 367, 368, 376, - 380, 395, 396, 407, 419, 423, 246, 403, 424, 0, - 280, 685, 692, 282, 231, 248, 257, 700, 414, 377, - 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, - 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, - 383, 384, 385, 387, 294, 219, 732, 719, 0, 0, - 668, 735, 639, 657, 744, 659, 662, 702, 618, 681, - 312, 654, 0, 643, 614, 650, 615, 641, 670, 222, - 674, 638, 721, 684, 734, 270, 0, 620, 644, 326, - 704, 364, 208, 279, 277, 392, 232, 225, 221, 207, - 254, 285, 324, 382, 318, 741, 274, 691, 0, 373, - 297, 0, 0, 0, 672, 724, 679, 715, 667, 703, - 628, 690, 736, 655, 699, 737, 260, 206, 175, 309, - 374, 236, 71, 0, 0, 167, 168, 169, 0, 0, - 0, 0, 0, 0, 0, 0, 197, 0, 204, 696, - 731, 652, 698, 218, 258, 224, 217, 389, 701, 747, - 613, 693, 0, 616, 619, 743, 727, 647, 648, 0, - 0, 0, 0, 0, 0, 0, 671, 680, 712, 665, - 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, - 689, 0, 0, 0, 624, 617, 0, 0, 0, 0, - 669, 0, 0, 0, 627, 0, 646, 713, 0, 611, - 244, 621, 298, 0, 717, 726, 666, 420, 730, 664, - 663, 733, 708, 625, 723, 658, 269, 623, 266, 171, - 186, 0, 656, 308, 347, 353, 722, 642, 651, 209, - 649, 351, 322, 406, 193, 234, 344, 327, 349, 688, - 706, 350, 275, 394, 339, 404, 421, 422, 216, 302, - 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, - 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, - 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, - 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, - 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, - 920, 416, 304, 393, 401, 293, 284, 181, 399, 291, - 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, - 301, 0, 176, 0, 375, 410, 435, 195, 637, 718, - 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, - 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, - 233, 413, 303, 190, 253, 371, 267, 276, 710, 746, - 321, 352, 199, 408, 372, 632, 636, 630, 631, 682, - 683, 633, 738, 739, 740, 714, 626, 0, 634, 635, - 0, 720, 728, 729, 687, 170, 183, 272, 742, 341, - 237, 433, 415, 411, 612, 629, 215, 640, 0, 0, - 653, 660, 661, 673, 675, 676, 677, 678, 686, 694, - 695, 697, 705, 707, 709, 711, 716, 725, 745, 172, - 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, - 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, - 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, - 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, - 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, - 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, - 685, 692, 282, 231, 248, 257, 700, 414, 377, 188, - 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, - 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, - 384, 385, 387, 294, 219, 732, 719, 0, 0, 668, + 0, 0, 0, 0, 0, 732, 719, 0, 0, 668, 735, 639, 657, 744, 659, 662, 702, 618, 681, 312, 654, 0, 643, 614, 650, 615, 641, 670, 222, 674, 638, 721, 684, 734, 270, 0, 620, 644, 326, 704, @@ -1797,14 +1598,14 @@ var yyAct = [...]int{ 285, 324, 382, 318, 741, 274, 691, 0, 373, 297, 0, 0, 0, 672, 724, 679, 715, 667, 703, 628, 690, 736, 655, 699, 737, 260, 206, 175, 309, 374, - 236, 0, 0, 0, 167, 168, 169, 0, 0, 0, - 0, 0, 0, 0, 0, 197, 0, 204, 696, 731, + 236, 0, 0, 0, 167, 168, 169, 0, 2197, 2198, + 0, 0, 2123, 0, 0, 197, 0, 204, 696, 731, 652, 698, 218, 258, 224, 217, 389, 701, 747, 613, 693, 0, 616, 619, 743, 727, 647, 648, 0, 0, 0, 0, 0, 0, 0, 671, 680, 712, 665, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 689, 0, 0, 0, 624, 617, 0, 0, 0, 0, 669, - 0, 0, 0, 627, 0, 646, 713, 0, 611, 244, + 0, 0, 0, 627, 0, 646, 713, 2170, 611, 244, 621, 298, 0, 717, 726, 666, 420, 730, 664, 663, 733, 708, 625, 723, 658, 269, 623, 266, 171, 186, 0, 656, 308, 347, 353, 722, 642, 651, 209, 649, @@ -1849,7 +1650,7 @@ var yyAct = [...]int{ 698, 218, 258, 224, 217, 389, 701, 747, 613, 693, 0, 616, 619, 743, 727, 647, 648, 0, 0, 0, 0, 0, 0, 0, 671, 680, 712, 665, 0, 0, - 0, 0, 0, 0, 0, 0, 645, 0, 689, 0, + 0, 0, 0, 0, 1902, 0, 645, 0, 689, 0, 0, 0, 624, 617, 0, 0, 0, 0, 669, 0, 0, 0, 627, 0, 646, 713, 0, 611, 244, 621, 298, 0, 717, 726, 666, 420, 730, 664, 663, 733, @@ -1861,13 +1662,13 @@ var yyAct = [...]int{ 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, 211, - 311, 397, 398, 210, 434, 189, 417, 182, 622, 416, + 311, 397, 398, 210, 434, 189, 417, 182, 920, 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, 637, 718, 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, 233, 413, - 610, 748, 604, 603, 267, 276, 710, 746, 321, 352, + 303, 190, 253, 371, 267, 276, 710, 746, 321, 352, 199, 408, 372, 632, 636, 630, 631, 682, 683, 633, 738, 739, 740, 714, 626, 0, 634, 635, 0, 720, 728, 729, 687, 170, 183, 272, 742, 341, 237, 433, @@ -1896,7 +1697,7 @@ var yyAct = [...]int{ 218, 258, 224, 217, 389, 701, 747, 613, 693, 0, 616, 619, 743, 727, 647, 648, 0, 0, 0, 0, 0, 0, 0, 671, 680, 712, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 645, 0, 689, 0, 0, + 0, 0, 0, 1747, 0, 645, 0, 689, 0, 0, 0, 624, 617, 0, 0, 0, 0, 669, 0, 0, 0, 627, 0, 646, 713, 0, 611, 244, 621, 298, 0, 717, 726, 666, 420, 730, 664, 663, 733, 708, @@ -1906,15 +1707,15 @@ var yyAct = [...]int{ 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, - 381, 1088, 198, 362, 0, 0, 0, 180, 400, 378, + 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, - 397, 398, 210, 434, 189, 417, 182, 622, 416, 304, + 397, 398, 210, 434, 189, 417, 182, 920, 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, 637, 718, 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, - 428, 430, 194, 334, 247, 315, 405, 233, 413, 610, - 748, 604, 603, 267, 276, 710, 746, 321, 352, 199, + 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, + 190, 253, 371, 267, 276, 710, 746, 321, 352, 199, 408, 372, 632, 636, 630, 631, 682, 683, 633, 738, 739, 740, 714, 626, 0, 634, 635, 0, 720, 728, 729, 687, 170, 183, 272, 742, 341, 237, 433, 415, @@ -1943,7 +1744,7 @@ var yyAct = [...]int{ 258, 224, 217, 389, 701, 747, 613, 693, 0, 616, 619, 743, 727, 647, 648, 0, 0, 0, 0, 0, 0, 0, 671, 680, 712, 665, 0, 0, 0, 0, - 0, 0, 0, 0, 645, 0, 689, 0, 0, 0, + 0, 0, 1459, 0, 645, 0, 689, 0, 0, 0, 624, 617, 0, 0, 0, 0, 669, 0, 0, 0, 627, 0, 646, 713, 0, 611, 244, 621, 298, 0, 717, 726, 666, 420, 730, 664, 663, 733, 708, 625, @@ -1953,15 +1754,15 @@ var yyAct = [...]int{ 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, - 601, 198, 362, 0, 0, 0, 180, 400, 378, 292, + 402, 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, 397, - 398, 210, 434, 189, 417, 182, 622, 416, 304, 393, + 398, 210, 434, 189, 417, 182, 920, 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, 637, 718, 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, - 430, 194, 334, 247, 315, 405, 233, 413, 610, 748, - 604, 603, 267, 276, 710, 746, 321, 352, 199, 408, + 430, 194, 334, 247, 315, 405, 233, 413, 303, 190, + 253, 371, 267, 276, 710, 746, 321, 352, 199, 408, 372, 632, 636, 630, 631, 682, 683, 633, 738, 739, 740, 714, 626, 0, 634, 635, 0, 720, 728, 729, 687, 170, 183, 272, 742, 341, 237, 433, 415, 411, @@ -1977,64 +1778,253 @@ var yyAct = [...]int{ 248, 257, 700, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, - 219, 312, 0, 0, 1386, 0, 501, 0, 0, 0, - 222, 0, 500, 0, 0, 0, 270, 0, 0, 1387, - 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, - 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, - 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, - 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, - 309, 374, 236, 71, 0, 0, 167, 168, 169, 522, - 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, - 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, - 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 512, 513, 591, 0, 0, - 0, 559, 0, 514, 0, 0, 507, 508, 510, 509, - 511, 516, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 244, 0, 298, 0, 558, 0, 0, 420, 0, - 0, 556, 0, 0, 0, 0, 0, 269, 0, 266, - 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, - 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, - 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, + 219, 732, 719, 0, 0, 668, 735, 639, 657, 744, + 659, 662, 702, 618, 681, 312, 654, 0, 643, 614, + 650, 615, 641, 670, 222, 674, 638, 721, 684, 734, + 270, 0, 620, 644, 326, 704, 364, 208, 279, 277, + 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, + 741, 274, 691, 0, 373, 297, 0, 0, 0, 672, + 724, 679, 715, 667, 703, 628, 690, 736, 655, 699, + 737, 260, 206, 175, 309, 374, 236, 71, 0, 0, + 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 204, 696, 731, 652, 698, 218, 258, + 224, 217, 389, 701, 747, 613, 693, 0, 616, 619, + 743, 727, 647, 648, 0, 0, 0, 0, 0, 0, + 0, 671, 680, 712, 665, 0, 0, 0, 0, 0, + 0, 0, 0, 645, 0, 689, 0, 0, 0, 624, + 617, 0, 0, 0, 0, 669, 0, 0, 0, 627, + 0, 646, 713, 0, 611, 244, 621, 298, 0, 717, + 726, 666, 420, 730, 664, 663, 733, 708, 625, 723, + 658, 269, 623, 266, 171, 186, 0, 656, 308, 347, + 353, 722, 642, 651, 209, 649, 351, 322, 406, 193, + 234, 344, 327, 349, 688, 706, 350, 275, 394, 339, + 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, + 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, + 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, + 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, + 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, + 210, 434, 189, 417, 182, 920, 416, 304, 393, 401, + 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, + 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, + 410, 435, 195, 637, 718, 388, 426, 431, 0, 340, + 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, + 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, + 371, 267, 276, 710, 746, 321, 352, 199, 408, 372, + 632, 636, 630, 631, 682, 683, 633, 738, 739, 740, + 714, 626, 0, 634, 635, 0, 720, 728, 729, 687, + 170, 183, 272, 742, 341, 237, 433, 415, 411, 612, + 629, 215, 640, 0, 0, 653, 660, 661, 673, 675, + 676, 677, 678, 686, 694, 695, 697, 705, 707, 709, + 711, 716, 725, 745, 172, 173, 184, 192, 202, 214, + 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, + 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, + 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, + 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, + 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, + 246, 403, 424, 0, 280, 685, 692, 282, 231, 248, + 257, 700, 414, 377, 188, 348, 238, 177, 205, 191, + 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, + 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, + 732, 719, 0, 0, 668, 735, 639, 657, 744, 659, + 662, 702, 618, 681, 312, 654, 0, 643, 614, 650, + 615, 641, 670, 222, 674, 638, 721, 684, 734, 270, + 0, 620, 644, 326, 704, 364, 208, 279, 277, 392, + 232, 225, 221, 207, 254, 285, 324, 382, 318, 741, + 274, 691, 0, 373, 297, 0, 0, 0, 672, 724, + 679, 715, 667, 703, 628, 690, 736, 655, 699, 737, + 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, + 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, + 197, 0, 204, 696, 731, 652, 698, 218, 258, 224, + 217, 389, 701, 747, 613, 693, 0, 616, 619, 743, + 727, 647, 648, 0, 0, 0, 0, 0, 0, 0, + 671, 680, 712, 665, 0, 0, 0, 0, 0, 0, + 0, 0, 645, 0, 689, 0, 0, 0, 624, 617, + 0, 0, 0, 0, 669, 0, 0, 0, 627, 0, + 646, 713, 0, 611, 244, 621, 298, 0, 717, 726, + 666, 420, 730, 664, 663, 733, 708, 625, 723, 658, + 269, 623, 266, 171, 186, 0, 656, 308, 347, 353, + 722, 642, 651, 209, 649, 351, 322, 406, 193, 234, + 344, 327, 349, 688, 706, 350, 275, 394, 339, 404, + 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, + 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, + 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, + 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, + 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, + 434, 189, 417, 182, 920, 416, 304, 393, 401, 293, + 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, + 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, + 435, 195, 637, 718, 388, 426, 431, 0, 340, 196, + 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, + 334, 247, 315, 405, 233, 413, 303, 190, 253, 371, + 267, 276, 710, 746, 321, 352, 199, 408, 372, 632, + 636, 630, 631, 682, 683, 633, 738, 739, 740, 714, + 626, 0, 634, 635, 0, 720, 728, 729, 687, 170, + 183, 272, 742, 341, 237, 433, 415, 411, 612, 629, + 215, 640, 0, 0, 653, 660, 661, 673, 675, 676, + 677, 678, 686, 694, 695, 697, 705, 707, 709, 711, + 716, 725, 745, 172, 173, 184, 192, 202, 214, 227, + 235, 245, 249, 252, 255, 256, 259, 264, 281, 286, + 287, 288, 289, 305, 306, 307, 310, 313, 314, 317, + 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, + 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, + 367, 368, 376, 380, 395, 396, 407, 419, 423, 246, + 403, 424, 0, 280, 685, 692, 282, 231, 248, 257, + 700, 414, 377, 188, 348, 238, 177, 205, 191, 212, + 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, + 345, 200, 363, 383, 384, 385, 387, 294, 219, 732, + 719, 0, 0, 668, 735, 639, 657, 744, 659, 662, + 702, 618, 681, 312, 654, 0, 643, 614, 650, 615, + 641, 670, 222, 674, 638, 721, 684, 734, 270, 0, + 620, 644, 326, 704, 364, 208, 279, 277, 392, 232, + 225, 221, 207, 254, 285, 324, 382, 318, 741, 274, + 691, 0, 373, 297, 0, 0, 0, 672, 724, 679, + 715, 667, 703, 628, 690, 736, 655, 699, 737, 260, + 206, 175, 309, 374, 236, 0, 0, 0, 167, 168, + 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, + 0, 204, 696, 731, 652, 698, 218, 258, 224, 217, + 389, 701, 747, 613, 693, 0, 616, 619, 743, 727, + 647, 648, 0, 0, 0, 0, 0, 0, 0, 671, + 680, 712, 665, 0, 0, 0, 0, 0, 0, 0, + 0, 645, 0, 689, 0, 0, 0, 624, 617, 0, + 0, 0, 0, 669, 0, 0, 0, 627, 0, 646, + 713, 0, 611, 244, 621, 298, 0, 717, 726, 666, + 420, 730, 664, 663, 733, 708, 625, 723, 658, 269, + 623, 266, 171, 186, 0, 656, 308, 347, 353, 722, + 642, 651, 209, 649, 351, 322, 406, 193, 234, 344, + 327, 349, 688, 706, 350, 275, 394, 339, 404, 421, + 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, + 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, + 273, 429, 185, 359, 201, 178, 381, 402, 198, 362, + 0, 0, 0, 180, 400, 378, 292, 262, 263, 179, + 0, 343, 220, 240, 211, 311, 397, 398, 210, 434, + 189, 417, 182, 622, 416, 304, 393, 401, 293, 284, + 181, 399, 291, 283, 268, 230, 250, 337, 278, 338, + 251, 300, 299, 301, 0, 176, 0, 375, 410, 435, + 195, 637, 718, 388, 426, 431, 0, 340, 196, 241, + 229, 336, 239, 271, 425, 427, 428, 430, 194, 334, + 247, 315, 405, 233, 413, 610, 748, 604, 603, 267, + 276, 710, 746, 321, 352, 199, 408, 372, 632, 636, + 630, 631, 682, 683, 633, 738, 739, 740, 714, 626, + 0, 634, 635, 0, 720, 728, 729, 687, 170, 183, + 272, 742, 341, 237, 433, 415, 411, 612, 629, 215, + 640, 0, 0, 653, 660, 661, 673, 675, 676, 677, + 678, 686, 694, 695, 697, 705, 707, 709, 711, 716, + 725, 745, 172, 173, 184, 192, 202, 214, 227, 235, + 245, 249, 252, 255, 256, 259, 264, 281, 286, 287, + 288, 289, 305, 306, 307, 310, 313, 314, 317, 319, + 320, 323, 329, 330, 331, 332, 333, 335, 342, 346, + 354, 355, 356, 357, 358, 360, 361, 365, 366, 367, + 368, 376, 380, 395, 396, 407, 419, 423, 246, 403, + 424, 0, 280, 685, 692, 282, 231, 248, 257, 700, + 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, + 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, + 200, 363, 383, 384, 385, 387, 294, 219, 732, 719, + 0, 0, 668, 735, 639, 657, 744, 659, 662, 702, + 618, 681, 312, 654, 0, 643, 614, 650, 615, 641, + 670, 222, 674, 638, 721, 684, 734, 270, 0, 620, + 644, 326, 704, 364, 208, 279, 277, 392, 232, 225, + 221, 207, 254, 285, 324, 382, 318, 741, 274, 691, + 0, 373, 297, 0, 0, 0, 672, 724, 679, 715, + 667, 703, 628, 690, 736, 655, 699, 737, 260, 206, + 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, + 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, + 204, 696, 731, 652, 698, 218, 258, 224, 217, 389, + 701, 747, 613, 693, 0, 616, 619, 743, 727, 647, + 648, 0, 0, 0, 0, 0, 0, 0, 671, 680, + 712, 665, 0, 0, 0, 0, 0, 0, 0, 0, + 645, 0, 689, 0, 0, 0, 624, 617, 0, 0, + 0, 0, 669, 0, 0, 0, 627, 0, 646, 713, + 0, 611, 244, 621, 298, 0, 717, 726, 666, 420, + 730, 664, 663, 733, 708, 625, 723, 658, 269, 623, + 266, 171, 186, 0, 656, 308, 347, 353, 722, 642, + 651, 209, 649, 351, 322, 406, 193, 234, 344, 327, + 349, 688, 706, 350, 275, 394, 339, 404, 421, 422, + 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, + 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, + 429, 185, 359, 201, 178, 381, 1088, 198, 362, 0, + 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, + 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, + 417, 182, 622, 416, 304, 393, 401, 293, 284, 181, + 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, + 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, + 637, 718, 388, 426, 431, 0, 340, 196, 241, 229, + 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, + 315, 405, 233, 413, 610, 748, 604, 603, 267, 276, + 710, 746, 321, 352, 199, 408, 372, 632, 636, 630, + 631, 682, 683, 633, 738, 739, 740, 714, 626, 0, + 634, 635, 0, 720, 728, 729, 687, 170, 183, 272, + 742, 341, 237, 433, 415, 411, 612, 629, 215, 640, + 0, 0, 653, 660, 661, 673, 675, 676, 677, 678, + 686, 694, 695, 697, 705, 707, 709, 711, 716, 725, + 745, 172, 173, 184, 192, 202, 214, 227, 235, 245, + 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, + 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, + 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, + 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, + 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, + 0, 280, 685, 692, 282, 231, 248, 257, 700, 414, + 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, + 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, + 363, 383, 384, 385, 387, 294, 219, 732, 719, 0, + 0, 668, 735, 639, 657, 744, 659, 662, 702, 618, + 681, 312, 654, 0, 643, 614, 650, 615, 641, 670, + 222, 674, 638, 721, 684, 734, 270, 0, 620, 644, + 326, 704, 364, 208, 279, 277, 392, 232, 225, 221, + 207, 254, 285, 324, 382, 318, 741, 274, 691, 0, + 373, 297, 0, 0, 0, 672, 724, 679, 715, 667, + 703, 628, 690, 736, 655, 699, 737, 260, 206, 175, + 309, 374, 236, 0, 0, 0, 167, 168, 169, 0, + 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, + 696, 731, 652, 698, 218, 258, 224, 217, 389, 701, + 747, 613, 693, 0, 616, 619, 743, 727, 647, 648, + 0, 0, 0, 0, 0, 0, 0, 671, 680, 712, + 665, 0, 0, 0, 0, 0, 0, 0, 0, 645, + 0, 689, 0, 0, 0, 624, 617, 0, 0, 0, + 0, 669, 0, 0, 0, 627, 0, 646, 713, 0, + 611, 244, 621, 298, 0, 717, 726, 666, 420, 730, + 664, 663, 733, 708, 625, 723, 658, 269, 623, 266, + 171, 186, 0, 656, 308, 347, 353, 722, 642, 651, + 209, 649, 351, 322, 406, 193, 234, 344, 327, 349, + 688, 706, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, - 185, 359, 201, 178, 381, 402, 198, 362, 0, 0, + 185, 359, 201, 178, 381, 601, 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, 417, - 182, 0, 416, 304, 393, 401, 293, 284, 181, 399, + 182, 622, 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, - 299, 301, 0, 176, 0, 375, 410, 435, 195, 0, - 0, 388, 426, 431, 0, 340, 196, 241, 229, 336, + 299, 301, 0, 176, 0, 375, 410, 435, 195, 637, + 718, 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, 315, - 405, 233, 413, 303, 190, 253, 371, 267, 276, 0, - 0, 321, 352, 199, 408, 372, 546, 557, 552, 553, - 550, 551, 545, 549, 548, 547, 560, 537, 538, 539, - 540, 542, 0, 554, 555, 541, 170, 183, 272, 0, - 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 405, 233, 413, 610, 748, 604, 603, 267, 276, 710, + 746, 321, 352, 199, 408, 372, 632, 636, 630, 631, + 682, 683, 633, 738, 739, 740, 714, 626, 0, 634, + 635, 0, 720, 728, 729, 687, 170, 183, 272, 742, + 341, 237, 433, 415, 411, 612, 629, 215, 640, 0, + 0, 653, 660, 661, 673, 675, 676, 677, 678, 686, + 694, 695, 697, 705, 707, 709, 711, 716, 725, 745, 172, 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, 0, - 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, + 280, 685, 692, 282, 231, 248, 257, 700, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, - 383, 384, 385, 387, 294, 219, 312, 0, 0, 0, + 383, 384, 385, 387, 294, 219, 312, 0, 0, 1386, 0, 501, 0, 0, 0, 222, 0, 500, 0, 0, - 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, + 0, 270, 0, 0, 1387, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, - 1498, 0, 260, 206, 175, 309, 374, 236, 71, 0, + 0, 0, 260, 206, 175, 309, 374, 236, 71, 0, 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, - 0, 0, 197, 523, 204, 528, 529, 530, 1499, 218, + 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 512, 513, 0, 0, 0, 0, 559, 0, 514, 0, + 512, 513, 591, 0, 0, 0, 559, 0, 514, 0, 0, 507, 508, 510, 509, 511, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, 558, 0, 0, 420, 0, 0, 556, 0, 0, 0, @@ -2073,10 +2063,10 @@ var yyAct = [...]int{ 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, - 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, - 309, 374, 236, 71, 0, 578, 167, 168, 169, 522, + 0, 0, 0, 0, 0, 1498, 0, 260, 206, 175, + 309, 374, 236, 71, 0, 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, - 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, + 528, 529, 530, 1499, 218, 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, 0, 0, 0, @@ -2120,12 +2110,12 @@ var yyAct = [...]int{ 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 71, 0, - 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, + 578, 167, 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 512, 513, 591, 0, 0, 0, 559, 0, 514, 0, + 512, 513, 0, 0, 0, 0, 559, 0, 514, 0, 0, 507, 508, 510, 509, 511, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, 558, 0, 0, 420, 0, 0, 556, 0, 0, 0, @@ -2166,7 +2156,7 @@ var yyAct = [...]int{ 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 71, 0, 0, 167, 168, 169, 522, - 1404, 524, 525, 526, 527, 0, 0, 197, 523, 204, + 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2211,7 +2201,7 @@ var yyAct = [...]int{ 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 71, 0, - 0, 167, 168, 169, 522, 1401, 524, 525, 526, 527, + 0, 167, 168, 169, 522, 1404, 524, 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2250,53 +2240,53 @@ var yyAct = [...]int{ 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, - 219, 571, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 312, 0, 0, 0, 0, 501, - 0, 0, 0, 222, 0, 500, 0, 0, 0, 270, - 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, - 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, - 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, - 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, - 260, 206, 175, 309, 374, 236, 71, 0, 0, 167, - 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, - 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, - 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, + 219, 312, 0, 0, 0, 0, 501, 0, 0, 0, + 222, 0, 500, 0, 0, 0, 270, 0, 0, 0, + 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, + 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, + 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, + 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, + 309, 374, 236, 71, 0, 0, 167, 168, 169, 522, + 1401, 524, 525, 526, 527, 0, 0, 197, 523, 204, + 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, + 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, - 0, 0, 0, 0, 559, 0, 514, 0, 0, 507, - 508, 510, 509, 511, 516, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 244, 0, 298, 0, 558, 0, - 0, 420, 0, 0, 556, 0, 0, 0, 0, 0, - 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, - 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, - 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, - 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, - 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, - 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, - 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, - 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, - 434, 189, 417, 182, 0, 416, 304, 393, 401, 293, - 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, - 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, - 435, 195, 0, 0, 388, 426, 431, 0, 340, 196, - 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, - 334, 247, 315, 405, 233, 413, 303, 190, 253, 371, - 267, 276, 0, 0, 321, 352, 199, 408, 372, 546, - 557, 552, 553, 550, 551, 545, 549, 548, 547, 560, - 537, 538, 539, 540, 542, 0, 554, 555, 541, 170, - 183, 272, 0, 341, 237, 433, 415, 411, 0, 0, - 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 512, 513, 591, 0, 0, + 0, 559, 0, 514, 0, 0, 507, 508, 510, 509, + 511, 516, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 244, 0, 298, 0, 558, 0, 0, 420, 0, + 0, 556, 0, 0, 0, 0, 0, 269, 0, 266, + 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, + 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, + 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, + 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, + 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, + 185, 359, 201, 178, 381, 402, 198, 362, 0, 0, + 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, + 220, 240, 211, 311, 397, 398, 210, 434, 189, 417, + 182, 0, 416, 304, 393, 401, 293, 284, 181, 399, + 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, + 299, 301, 0, 176, 0, 375, 410, 435, 195, 0, + 0, 388, 426, 431, 0, 340, 196, 241, 229, 336, + 239, 271, 425, 427, 428, 430, 194, 334, 247, 315, + 405, 233, 413, 303, 190, 253, 371, 267, 276, 0, + 0, 321, 352, 199, 408, 372, 546, 557, 552, 553, + 550, 551, 545, 549, 548, 547, 560, 537, 538, 539, + 540, 542, 0, 554, 555, 541, 170, 183, 272, 0, + 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 172, 173, 184, 192, 202, 214, 227, - 235, 245, 249, 252, 255, 256, 259, 264, 281, 286, - 287, 288, 289, 305, 306, 307, 310, 313, 314, 317, - 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, - 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, - 367, 368, 376, 380, 395, 396, 407, 419, 423, 246, - 403, 424, 0, 280, 0, 0, 282, 231, 248, 257, - 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, - 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, - 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 172, 173, 184, 192, 202, 214, 227, 235, 245, 249, + 252, 255, 256, 259, 264, 281, 286, 287, 288, 289, + 305, 306, 307, 310, 313, 314, 317, 319, 320, 323, + 329, 330, 331, 332, 333, 335, 342, 346, 354, 355, + 356, 357, 358, 360, 361, 365, 366, 367, 368, 376, + 380, 395, 396, 407, 419, 423, 246, 403, 424, 0, + 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, + 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, + 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, + 383, 384, 385, 387, 294, 219, 571, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 501, 0, 0, 0, 222, 0, 500, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, @@ -2342,8 +2332,8 @@ var yyAct = [...]int{ 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, - 385, 387, 294, 219, 312, 0, 0, 0, 0, 0, - 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, + 385, 387, 294, 219, 312, 0, 0, 0, 0, 501, + 0, 0, 0, 222, 0, 500, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, @@ -2351,7 +2341,7 @@ var yyAct = [...]int{ 260, 206, 175, 309, 374, 236, 71, 0, 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, - 217, 389, 0, 0, 0, 0, 515, 0, 543, 0, + 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, 0, 0, 0, 0, 559, 0, 514, 0, 0, 507, @@ -2360,7 +2350,7 @@ var yyAct = [...]int{ 0, 420, 0, 0, 556, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, - 344, 327, 349, 2191, 0, 350, 275, 394, 339, 404, + 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, @@ -2394,7 +2384,7 @@ var yyAct = [...]int{ 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, - 236, 71, 0, 578, 167, 168, 169, 522, 521, 524, + 236, 71, 0, 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 515, 0, 543, 0, 0, 0, 0, 0, 0, @@ -2405,7 +2395,7 @@ var yyAct = [...]int{ 0, 298, 0, 558, 0, 0, 420, 0, 0, 556, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, - 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, + 351, 322, 406, 193, 234, 344, 327, 349, 2190, 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, @@ -2439,7 +2429,7 @@ var yyAct = [...]int{ 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, - 260, 206, 175, 309, 374, 236, 71, 0, 0, 167, + 260, 206, 175, 309, 374, 236, 71, 0, 578, 167, 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 515, 0, 543, 0, @@ -2482,18 +2472,18 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, - 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, + 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, - 236, 0, 0, 0, 167, 168, 169, 0, 0, 0, - 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, - 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, + 236, 71, 0, 0, 167, 168, 169, 522, 521, 524, + 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, + 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, + 0, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 963, - 962, 972, 973, 965, 966, 967, 968, 969, 970, 971, - 964, 0, 0, 974, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 512, 513, 0, 0, 0, 0, 559, + 0, 514, 0, 0, 507, 508, 510, 509, 511, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, - 0, 298, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 298, 0, 558, 0, 0, 420, 0, 0, 556, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, @@ -2509,9 +2499,9 @@ var yyAct = [...]int{ 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, 321, - 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 183, 272, 0, 341, 237, + 352, 199, 408, 372, 546, 557, 552, 553, 550, 551, + 545, 549, 548, 547, 560, 537, 538, 539, 540, 542, + 0, 554, 555, 541, 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 173, @@ -2525,7 +2515,7 @@ var yyAct = [...]int{ 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, 0, - 0, 0, 0, 222, 794, 0, 0, 0, 0, 270, + 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, @@ -2535,12 +2525,12 @@ var yyAct = [...]int{ 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 963, 962, 972, 973, 965, 966, + 967, 968, 969, 970, 971, 964, 0, 0, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, 0, - 793, 420, 0, 0, 0, 0, 0, 0, 790, 791, - 269, 756, 266, 171, 186, 784, 788, 308, 347, 353, + 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, @@ -2570,23 +2560,23 @@ var yyAct = [...]int{ 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, - 0, 0, 0, 1066, 0, 0, 0, 0, 222, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 222, 794, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, - 236, 0, 0, 0, 167, 168, 169, 0, 1068, 0, + 236, 0, 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, - 0, 0, 218, 258, 224, 217, 389, 952, 953, 951, + 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, - 0, 298, 0, 0, 0, 0, 420, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, - 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, + 0, 298, 0, 0, 0, 793, 420, 0, 0, 0, + 0, 0, 0, 790, 791, 269, 756, 266, 171, 186, + 784, 788, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, @@ -2615,61 +2605,61 @@ var yyAct = [...]int{ 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, - 385, 387, 294, 219, 35, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, - 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, - 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, - 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, - 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, + 385, 387, 294, 219, 312, 0, 0, 0, 1066, 0, + 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, + 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, + 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, + 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 260, 206, 175, 309, 374, 236, 71, - 0, 578, 167, 168, 169, 0, 0, 0, 0, 0, - 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, - 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, + 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, + 168, 169, 0, 1068, 0, 0, 0, 0, 0, 0, + 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, + 217, 389, 952, 953, 951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 0, 298, 0, 0, 0, + 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, + 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, + 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, + 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, + 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, + 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, + 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, + 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, + 434, 189, 417, 182, 0, 416, 304, 393, 401, 293, + 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, + 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, + 435, 195, 0, 0, 388, 426, 431, 0, 340, 196, + 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, + 334, 247, 315, 405, 233, 413, 303, 190, 253, 371, + 267, 276, 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, - 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, - 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, - 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, - 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, - 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, - 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, - 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, - 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, - 397, 398, 210, 434, 189, 417, 182, 0, 416, 304, - 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, - 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, - 0, 375, 410, 435, 195, 0, 0, 388, 426, 431, - 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, - 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, - 190, 253, 371, 267, 276, 0, 0, 321, 352, 199, - 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, + 183, 272, 0, 341, 237, 433, 415, 411, 0, 0, + 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 170, 183, 272, 0, 341, 237, 433, 415, - 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 172, 173, 184, 192, 202, 214, 227, + 235, 245, 249, 252, 255, 256, 259, 264, 281, 286, + 287, 288, 289, 305, 306, 307, 310, 313, 314, 317, + 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, + 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, + 367, 368, 376, 380, 395, 396, 407, 419, 423, 246, + 403, 424, 0, 280, 0, 0, 282, 231, 248, 257, + 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, + 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, + 345, 200, 363, 383, 384, 385, 387, 294, 219, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 172, 173, 184, 192, - 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, - 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, - 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, - 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, - 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, - 419, 423, 246, 403, 424, 0, 280, 0, 0, 282, - 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, - 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, - 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, - 294, 219, 312, 0, 0, 0, 1431, 0, 0, 0, + 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, - 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, - 0, 1433, 0, 0, 0, 0, 0, 0, 197, 0, + 175, 309, 374, 236, 71, 0, 578, 167, 168, 169, + 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2680,7 +2670,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, - 349, 0, 1429, 350, 275, 394, 339, 404, 421, 422, + 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, @@ -2708,24 +2698,24 @@ var yyAct = [...]int{ 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, - 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, + 0, 1431, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, - 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, + 0, 0, 167, 168, 169, 0, 1433, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 756, 266, 171, 186, 754, 0, + 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, - 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, + 406, 193, 234, 344, 327, 349, 0, 1429, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, @@ -2753,23 +2743,23 @@ var yyAct = [...]int{ 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, - 294, 219, 312, 0, 0, 0, 1431, 0, 0, 0, + 294, 219, 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, - 0, 1433, 0, 0, 0, 0, 0, 0, 197, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, - 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, - 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 756, + 266, 171, 186, 754, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, @@ -2798,61 +2788,61 @@ var yyAct = [...]int{ 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, - 363, 383, 384, 385, 387, 294, 219, 35, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, - 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, - 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, - 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, - 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, - 374, 236, 71, 0, 0, 167, 168, 169, 0, 0, - 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, - 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, + 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, + 0, 1431, 0, 0, 0, 0, 222, 0, 0, 0, + 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, + 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, + 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, + 0, 0, 167, 168, 169, 0, 1433, 0, 0, 0, + 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, + 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, - 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, - 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, - 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, - 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, - 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, - 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, - 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, - 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, - 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, - 0, 416, 304, 393, 401, 293, 284, 181, 399, 291, - 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, - 301, 0, 176, 0, 375, 410, 435, 195, 0, 0, - 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, - 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, - 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, - 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, + 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, + 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, + 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, + 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, + 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, + 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, + 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, + 397, 398, 210, 434, 189, 417, 182, 0, 416, 304, + 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, + 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, + 0, 375, 410, 435, 195, 0, 0, 388, 426, 431, + 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, + 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, + 190, 253, 371, 267, 276, 0, 0, 321, 352, 199, + 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, - 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, + 0, 0, 170, 183, 272, 0, 341, 237, 433, 415, + 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, - 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, - 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, - 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, - 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, - 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, - 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, - 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, - 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, - 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, - 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 172, 173, 184, 192, + 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, + 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, + 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, + 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, + 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, + 419, 423, 246, 403, 424, 0, 280, 0, 0, 282, + 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, + 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, + 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, + 294, 219, 35, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, - 167, 168, 169, 0, 0, 1451, 0, 0, 1452, 0, + 0, 260, 206, 175, 309, 374, 236, 71, 0, 0, + 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2892,13 +2882,13 @@ var yyAct = [...]int{ 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, - 0, 1099, 0, 0, 0, 270, 0, 0, 0, 326, + 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, - 374, 236, 0, 0, 0, 167, 168, 169, 0, 1098, - 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, + 374, 236, 0, 0, 0, 167, 168, 169, 0, 0, + 1451, 0, 0, 1452, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2937,13 +2927,13 @@ var yyAct = [...]int{ 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, - 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 222, 0, 1099, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 260, 206, 175, 309, 374, 236, 0, 0, 578, - 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, + 167, 168, 169, 0, 1098, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2988,7 +2978,7 @@ var yyAct = [...]int{ 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, - 374, 236, 71, 0, 0, 167, 168, 169, 0, 0, + 374, 236, 0, 0, 578, 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3033,8 +3023,8 @@ var yyAct = [...]int{ 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, - 167, 168, 169, 0, 1433, 0, 0, 0, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 71, 0, 0, + 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3079,7 +3069,7 @@ var yyAct = [...]int{ 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, - 374, 236, 0, 0, 0, 167, 168, 169, 0, 1068, + 374, 236, 0, 0, 0, 167, 168, 169, 0, 1433, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3125,7 +3115,7 @@ var yyAct = [...]int{ 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, - 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, + 167, 168, 169, 0, 1068, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3151,7 +3141,7 @@ var yyAct = [...]int{ 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 170, 183, 272, 1336, 341, 237, 433, 415, 411, 0, + 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 173, 184, 192, 202, 214, @@ -3164,7 +3154,7 @@ var yyAct = [...]int{ 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, - 312, 0, 1221, 0, 0, 0, 0, 0, 0, 222, + 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, @@ -3196,7 +3186,7 @@ var yyAct = [...]int{ 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, + 0, 0, 0, 0, 0, 170, 183, 272, 1336, 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, @@ -3209,7 +3199,7 @@ var yyAct = [...]int{ 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, - 384, 385, 387, 294, 219, 312, 0, 1219, 0, 0, + 384, 385, 387, 294, 219, 312, 0, 1221, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, @@ -3255,7 +3245,7 @@ var yyAct = [...]int{ 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, - 312, 0, 1217, 0, 0, 0, 0, 0, 0, 222, + 312, 0, 1219, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, @@ -3300,7 +3290,7 @@ var yyAct = [...]int{ 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, - 384, 385, 387, 294, 219, 312, 0, 1215, 0, 0, + 384, 385, 387, 294, 219, 312, 0, 1217, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, @@ -3346,7 +3336,7 @@ var yyAct = [...]int{ 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, - 312, 0, 1213, 0, 0, 0, 0, 0, 0, 222, + 312, 0, 1215, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, @@ -3391,7 +3381,7 @@ var yyAct = [...]int{ 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, - 384, 385, 387, 294, 219, 312, 0, 1209, 0, 0, + 384, 385, 387, 294, 219, 312, 0, 1213, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, @@ -3437,7 +3427,7 @@ var yyAct = [...]int{ 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, - 312, 0, 1207, 0, 0, 0, 0, 0, 0, 222, + 312, 0, 1209, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, @@ -3482,7 +3472,7 @@ var yyAct = [...]int{ 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, - 384, 385, 387, 294, 219, 312, 0, 1205, 0, 0, + 384, 385, 387, 294, 219, 312, 0, 1207, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, @@ -3528,13 +3518,13 @@ var yyAct = [...]int{ 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, - 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 312, 0, 1205, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, - 374, 236, 1180, 0, 0, 167, 168, 169, 0, 0, + 374, 236, 0, 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3573,54 +3563,54 @@ var yyAct = [...]int{ 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, - 384, 385, 387, 294, 219, 1081, 0, 0, 0, 0, - 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, - 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, - 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, - 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, - 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, - 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, - 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, - 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, + 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, + 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, + 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, + 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, + 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 1180, 0, 0, + 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, + 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, - 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, - 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, - 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, - 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, - 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, - 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, - 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, - 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, - 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, - 417, 182, 0, 416, 304, 393, 401, 293, 284, 181, - 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, - 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, - 0, 0, 388, 426, 431, 0, 340, 196, 241, 229, - 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, - 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, - 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, + 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, + 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, + 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, + 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, + 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, + 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, + 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, + 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, + 210, 434, 189, 417, 182, 0, 416, 304, 393, 401, + 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, + 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, + 410, 435, 195, 0, 0, 388, 426, 431, 0, 340, + 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, + 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, + 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 170, 183, 272, - 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, + 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 172, 173, 184, 192, 202, 214, 227, 235, 245, - 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, - 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, - 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, - 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, - 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, - 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, - 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, - 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, - 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, - 0, 0, 0, 0, 0, 1072, 222, 0, 0, 0, + 0, 0, 0, 0, 172, 173, 184, 192, 202, 214, + 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, + 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, + 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, + 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, + 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, + 246, 403, 424, 0, 280, 0, 0, 282, 231, 248, + 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, + 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, + 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, + 1081, 0, 0, 0, 0, 0, 0, 312, 0, 0, + 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, @@ -3666,13 +3656,13 @@ var yyAct = [...]int{ 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, 0, 0, 0, - 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, + 1072, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, - 0, 928, 0, 0, 0, 0, 0, 0, 197, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3717,14 +3707,14 @@ var yyAct = [...]int{ 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, - 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, + 0, 0, 167, 168, 169, 0, 928, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 489, 0, 244, 0, 298, + 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, @@ -3752,7 +3742,7 @@ var yyAct = [...]int{ 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, - 419, 423, 488, 403, 424, 0, 280, 0, 0, 282, + 419, 423, 246, 403, 424, 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, @@ -3770,7 +3760,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 244, 0, 298, 0, 0, 438, 0, 420, + 489, 0, 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, @@ -3797,7 +3787,7 @@ var yyAct = [...]int{ 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, - 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, + 376, 380, 395, 396, 407, 419, 423, 488, 403, 424, 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, @@ -3816,7 +3806,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, - 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 438, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, @@ -3847,75 +3837,72 @@ var yyAct = [...]int{ 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, - 294, 219, 161, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1803, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 161, 0, 0, 103, 0, 125, - 0, 0, 0, 0, 0, 1173, 0, 0, 145, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, - 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 145, 0, 0, 0, 0, 0, 0, 0, 0, 135, - 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 135, 142, 0, 143, 0, 124, 0, 0, 1177, - 1178, 134, 133, 160, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 142, 0, 143, 0, 0, 0, - 0, 1177, 1178, 134, 133, 160, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 129, 1179, 136, 0, 1176, 0, 130, 131, 0, - 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 151, 129, 1179, 136, 0, 1176, 0, 130, - 131, 0, 0, 0, 146, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 294, 219, 312, 0, 0, 0, 0, 0, 0, 0, + 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, + 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, + 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, + 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, + 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, + 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, + 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 126, 0, 0, 127, 0, 0, - 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 126, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, + 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, + 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, + 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, + 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, + 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, + 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, + 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, + 417, 182, 0, 416, 304, 393, 401, 293, 284, 181, + 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, + 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, + 0, 0, 388, 426, 431, 0, 340, 196, 241, 229, + 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, + 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, + 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 183, 272, + 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 139, 144, - 141, 147, 148, 149, 150, 152, 153, 154, 155, 0, - 0, 0, 0, 0, 156, 157, 158, 159, 0, 0, - 139, 144, 141, 147, 148, 149, 150, 152, 153, 154, - 155, 0, 0, 0, 0, 0, 156, 157, 158, 159, + 0, 172, 173, 184, 192, 202, 214, 227, 235, 245, + 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, + 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, + 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, + 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, + 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, + 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, + 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, + 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, + 363, 383, 384, 385, 387, 294, 219, } var yyPact = [...]int{ - 2392, -1000, -337, 1594, -1000, -1000, -1000, -1000, -1000, -1000, + 3642, -1000, -342, 1577, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1562, 1237, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 533, 1276, -1000, 1477, 4012, -1000, 27028, 393, - -1000, 26573, 392, 113, 27028, -1000, 117, -1000, 107, 27028, - 112, 26118, -1000, -1000, -281, 11980, 1431, 23, 12, 27028, - 127, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1269, - 1515, 1528, 1560, 1084, 1741, -1000, 10147, 10147, 357, 357, - 357, 8327, -1000, -1000, 16088, 27028, 27028, 188, -1000, 1477, - -1000, -1000, 163, -1000, 277, 1244, -1000, 1242, -1000, 595, - 461, 274, 345, 335, 273, 268, 266, 264, 262, 259, - 258, 257, 281, -1000, 545, 545, -173, -175, 2205, 319, - 319, 319, 372, 1447, 1446, -1000, 499, -1000, 545, 545, - 143, 545, 545, 545, 545, 216, 210, 545, 545, 545, - 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, - 545, 545, 141, 1477, 179, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1528, 1171, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 533, 1232, -1000, 1451, 3993, -1000, 27383, 346, + -1000, 26928, 345, 243, 27383, -1000, 85, -1000, 75, 27383, + 80, 26473, -1000, -1000, -283, 12335, 1416, 6, 1, 27383, + 105, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1200, + 1494, 1505, 1523, 1037, 1581, -1000, 10502, 10502, 275, 275, + 275, 8682, -1000, -1000, 16443, 27383, 27383, 147, -1000, 1451, + -1000, -1000, 129, -1000, 217, 1181, -1000, 1176, -1000, 593, + 523, 214, 293, 289, 213, 212, 210, 209, 205, 204, + 202, 201, 222, -1000, 506, 506, -173, -177, 2612, 268, + 268, 268, 297, 1428, 1427, -1000, 493, -1000, 506, 506, + 114, 506, 506, 506, 506, 176, 173, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 193, 1451, 157, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -3942,26 +3929,26 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 27028, 137, 27028, -1000, - 444, 27028, 607, 607, 20, 607, 607, 607, 607, 77, - 493, 10, -1000, 74, 218, 196, 172, 626, 227, 67, - -1000, -1000, 169, 626, 87, -1000, 607, 6451, 6451, 6451, - -1000, 1471, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 368, -1000, -1000, -1000, -1000, 27028, 25663, 279, 582, -1000, - -1000, -1000, 3, -1000, -1000, 1147, 732, -1000, 11980, 2667, - 1246, 1246, -1000, -1000, 412, -1000, -1000, 13345, 13345, 13345, - 13345, 13345, 13345, 13345, 13345, 13345, 13345, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 27383, 111, 27383, -1000, + 431, 27383, 644, 644, 46, 644, 644, 644, 644, 61, + 439, -9, -1000, 58, 149, 144, 154, 632, 96, 60, + -1000, -1000, 152, 632, 69, -1000, 644, 6806, 6806, 6806, + -1000, 1441, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 295, -1000, -1000, -1000, -1000, 27383, 26018, 227, 566, -1000, + -1000, -1000, 33, -1000, -1000, 1092, 707, -1000, 12335, 1188, + 1184, 1184, -1000, -1000, 386, -1000, -1000, 13700, 13700, 13700, + 13700, 13700, 13700, 13700, 13700, 13700, 13700, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 1246, 441, -1000, 11525, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 11980, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, -1000, -1000, -1000, 27028, -1000, 1246, 996, 1562, -1000, - 1237, -1000, -1000, -1000, 1473, 11980, 11980, 1562, -1000, 1381, - 10147, -1000, -1000, 1627, -1000, -1000, -1000, -1000, -1000, 721, - 1580, -1000, 14710, 440, 1578, 25208, -1000, 18831, 24753, 1241, - 7858, -35, -1000, -1000, -1000, 577, 17921, -1000, -1000, -1000, + -1000, 1184, 430, -1000, 11880, 1184, 1184, 1184, 1184, 1184, + 1184, 1184, 1184, 12335, 1184, 1184, 1184, 1184, 1184, 1184, + 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, + 1184, -1000, -1000, -1000, 27383, -1000, 1184, 943, 1528, -1000, + 1171, -1000, -1000, -1000, 1445, 12335, 12335, 1528, -1000, 1379, + 10502, -1000, -1000, 1575, -1000, -1000, -1000, -1000, -1000, 659, + 1558, -1000, 15065, 428, 1557, 25563, -1000, 19186, 25108, 1165, + 8213, -83, -1000, -1000, -1000, 560, 18276, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1471, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1441, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -3973,190 +3960,190 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1121, - 27028, -1000, -1000, 2679, 918, -1000, 1275, -1000, 1112, -1000, - 1254, 1284, 391, 918, 384, 382, 381, -1000, -118, -1000, - -1000, -1000, -1000, -1000, 545, 545, 280, 4012, 27519, -1000, - -1000, -1000, 24291, 1274, 918, -1000, 1271, -1000, 1490, 341, - 519, 519, 918, -1000, -1000, 27028, 918, 1489, 1488, 27028, - 27028, -1000, 23836, -1000, 23381, 22926, 863, 27028, 22471, 22016, - 21561, 21106, 20651, -1000, 1332, -1000, 1229, -1000, -1000, -1000, - 27028, 27028, 27028, 32, -1000, -1000, 27028, 918, -1000, -1000, - 853, 850, 545, 545, 849, 986, 977, 975, 545, 545, - 842, 968, 1048, 170, 840, 835, 831, 898, 967, 109, - 830, 800, 829, 27028, 1270, 27028, -1000, 165, 495, 261, - 555, 1477, 1421, 1240, 363, 390, 918, 324, -1000, -1000, - 6920, -1000, -1000, 959, 11980, -1000, 633, 626, 626, -1000, - -1000, -1000, -1000, -1000, -1000, 607, 27028, 633, -1000, -1000, - -1000, 626, 607, 27028, 607, 607, 607, 607, 626, 607, - 27028, 27028, 27028, 27028, 27028, 27028, 27028, 27028, 27028, 6451, - 6451, 6451, 514, 607, -1000, 1339, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 111, -1000, -1000, -1000, -1000, -1000, - 1594, -1000, -1000, -1000, -109, 1218, 20196, -1000, -285, -286, - -287, -293, -1000, -1000, -1000, -295, -298, -1000, -1000, -1000, - 11980, 11980, 11980, 11980, 734, 522, 13345, 784, 764, 13345, - 13345, 13345, 13345, 13345, 13345, 13345, 13345, 13345, 13345, 13345, - 13345, 13345, 13345, 13345, 608, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 918, -1000, 1581, 1020, 1020, 454, 454, - 454, 454, 454, 454, 454, 454, 454, 13800, 8782, 6920, - 1084, 1107, 1562, 10147, 10147, 11980, 11980, 11057, 10602, 10147, - 1463, 625, 732, 27028, -1000, 1009, -1000, -1000, 12890, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1078, + 27383, -1000, -1000, 4336, 893, -1000, 1224, -1000, 1066, -1000, + 1190, 1158, 344, 893, 339, 338, 335, -1000, -107, -1000, + -1000, -1000, -1000, -1000, 506, 506, 219, 3993, 4215, -1000, + -1000, -1000, 24646, 1222, 893, -1000, 1218, -1000, 1470, 286, + 454, 454, 893, -1000, -1000, 27383, 893, 1466, 1464, 27383, + 27383, -1000, 24191, -1000, 23736, 23281, 841, 27383, 22826, 22371, + 21916, 21461, 21006, -1000, 1368, -1000, 1177, -1000, -1000, -1000, + 27383, 27383, 27383, 14, -1000, -1000, 27383, 893, -1000, -1000, + 809, 799, 506, 506, 792, 942, 938, 936, 506, 506, + 789, 935, 881, 148, 783, 781, 779, 911, 932, 108, + 891, 768, 777, 27383, 1213, 27383, -1000, 139, 591, 231, + 551, 1451, 1413, 1154, 294, 343, 893, 250, 250, -1000, + 7275, -1000, -1000, 917, 12335, -1000, 633, 632, 632, -1000, + -1000, -1000, -1000, -1000, -1000, 644, 27383, 633, -1000, -1000, + -1000, 632, 644, 27383, 644, 644, 644, 644, 632, 644, + 27383, 27383, 27383, 27383, 27383, 27383, 27383, 27383, 27383, 6806, + 6806, 6806, 485, 644, -1000, 1287, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 79, -1000, -1000, -1000, -1000, -1000, + 1577, -1000, -1000, -1000, -112, 1152, 20551, -1000, -287, -288, + -289, -290, -1000, -1000, -1000, -291, -292, -1000, -1000, -1000, + 12335, 12335, 12335, 12335, 610, 487, 13700, 752, 609, 13700, + 13700, 13700, 13700, 13700, 13700, 13700, 13700, 13700, 13700, 13700, + 13700, 13700, 13700, 13700, 631, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 893, -1000, 1573, 1153, 1153, 447, 447, + 447, 447, 447, 447, 447, 447, 447, 14155, 9137, 7275, + 1037, 1050, 1528, 10502, 10502, 12335, 12335, 11412, 10957, 10502, + 1438, 577, 707, 27383, -1000, 952, -1000, -1000, 13245, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 27028, 27028, 10147, 10147, 10147, 10147, 10147, -1000, 1212, - -1000, -168, 15633, 11980, -1000, 1528, 1084, 1627, 1498, 1588, - 480, 913, 1211, -1000, 871, 1528, 17466, 1213, -1000, 1627, - -1000, -1000, -1000, 27028, -1000, -1000, 19741, -1000, -1000, 5982, - 27028, 244, 27028, -1000, 1176, 1302, -1000, -1000, -1000, 1509, - 17011, 27028, 1197, 1186, -1000, -1000, 437, 7389, -35, -1000, - 7389, 1188, -1000, -40, -45, 9237, 452, -1000, -1000, -1000, - 2205, 14255, 1113, -1000, 33, -1000, -1000, -1000, 1254, -1000, - 1254, 1254, 1254, 1254, 32, 32, 32, 32, -1000, -1000, - -1000, -1000, -1000, 1266, 1262, -1000, 1254, 1254, 1254, 1254, + -1000, 27383, 27383, 10502, 10502, 10502, 10502, 10502, -1000, 1150, + -1000, -170, 15988, 12335, -1000, 1505, 1037, 1575, 1475, 1568, + 477, 744, 1138, -1000, 996, 1505, 17821, 1122, -1000, 1575, + -1000, -1000, -1000, 27383, -1000, -1000, 20096, -1000, -1000, 6337, + 27383, 199, 27383, -1000, 1164, 1305, -1000, -1000, -1000, 1491, + 17366, 27383, 1116, 1115, -1000, -1000, 414, 7744, -83, -1000, + 7744, 1106, -1000, -49, -53, 9592, 446, -1000, -1000, -1000, + 2612, 14610, 995, -1000, 20, -1000, -1000, -1000, 1190, -1000, + 1190, 1190, 1190, 1190, 14, 14, 14, 14, -1000, -1000, + -1000, -1000, -1000, 1201, 1196, -1000, 1190, 1190, 1190, 1190, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1261, 1261, 1261, - 1257, 1257, 308, -1000, 11980, 184, 27028, 1497, 826, 165, - 330, 1304, 918, 918, 918, 330, -1000, 984, 906, -1000, - 1210, -1000, -1000, 1558, -1000, -1000, 615, 698, 696, 601, - 27028, 139, 241, -1000, 307, -1000, 27028, 1260, 1487, 519, - 918, -1000, 918, -1000, -1000, -1000, -1000, 436, -1000, -1000, - 918, 1201, -1000, 1217, 725, 678, 692, 664, 1201, -1000, - -1000, -140, 1201, -1000, 1201, -1000, 1201, -1000, 1201, -1000, - 1201, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 536, - 27028, 139, 608, -1000, 362, -1000, -1000, 608, 608, -1000, - -1000, -1000, -1000, 958, 957, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1195, 1195, 1195, + 1191, 1191, 248, -1000, 12335, 116, 27383, 1479, 776, 139, + 280, 1267, 893, 893, 893, 280, -1000, 850, 843, -1000, + 1137, -1000, -1000, 1520, -1000, -1000, 403, 612, 605, 531, + 27383, 109, 195, -1000, 271, -1000, 27383, 1194, 1460, 454, + 893, -1000, 893, -1000, -1000, -1000, -1000, 409, -1000, -1000, + 893, 1135, -1000, 1117, 665, 599, 656, 595, 1135, -1000, + -1000, -129, 1135, -1000, 1135, -1000, 1135, -1000, 1135, -1000, + 1135, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 486, + 27383, 109, 631, -1000, 291, -1000, -1000, 631, 631, -1000, + -1000, -1000, -1000, 916, 915, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -333, 27028, -1000, 148, 554, 230, 228, 206, 27028, - 145, 1517, 168, 191, 27028, 27028, 324, 1338, 27028, 1503, - 324, -1000, -1000, -1000, -1000, 732, 27028, -1000, -1000, 607, - 607, -1000, -1000, 27028, 607, -1000, -1000, -1000, -1000, -1000, - -1000, 607, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 949, -1000, 27028, 27028, - -1000, -1000, -1000, -1000, -1000, 60, -54, 185, -1000, -1000, - -1000, -1000, 1519, -1000, 732, 522, 503, 506, -1000, -1000, - 785, -1000, -1000, 2345, -1000, -1000, -1000, -1000, 784, 13345, - 13345, 13345, 834, 2345, 2501, 1600, 876, 454, 682, 682, - 463, 463, 463, 463, 463, 712, 712, -1000, -1000, -1000, - -1000, 1009, -1000, -1000, -1000, 1009, 10147, 10147, 1200, 1246, - 435, -1000, 1269, -1000, -1000, 1528, 1090, 1090, 851, 917, - 580, 1577, 1090, 546, 1576, 1090, 1090, 10147, -1000, -1000, - 676, -1000, 11980, 1009, -1000, 1083, 1194, 1190, 1090, 1009, - 1009, 1090, 1090, 27028, -1000, -278, -1000, -101, 448, 1246, - -1000, 19286, -1000, -1000, 1009, 1147, 1473, -1000, -1000, 1426, - -1000, 1375, 11980, 11980, 11980, -1000, -1000, -1000, 1473, 1522, - -1000, 1387, 1386, 1571, 10147, 18831, 1627, -1000, -1000, -1000, - 430, 1571, 1193, 1246, -1000, 27028, 18831, 18831, 18831, 18831, - 18831, -1000, 1360, 1354, -1000, 1352, 1350, 1356, 27028, -1000, - 1103, 1084, 17011, 244, 1172, 18831, 27028, -1000, -1000, 18831, - 27028, 5513, -1000, 1188, -35, -42, -1000, -1000, -1000, -1000, - 732, -1000, 869, -1000, 289, -1000, 338, -1000, -1000, -1000, - -1000, 592, 35, -1000, -1000, 32, 32, -1000, -1000, 452, - 693, 452, 452, 452, 947, 947, -1000, -1000, -1000, -1000, - -1000, 806, -1000, -1000, -1000, 797, -1000, -1000, 628, 1327, - 184, -1000, -1000, 545, 946, 1436, 27028, -1000, -1000, 1066, - 148, 27028, 619, 1336, -1000, 1304, 1304, 1304, 27028, -1000, - -1000, -1000, -1000, 27497, 27028, 1101, -1000, 130, 27028, 1052, - 27028, -1000, 1097, 27028, -1000, 918, -1000, -1000, 6920, -1000, - 27028, 1246, -1000, -1000, -1000, -1000, 389, 1474, 1464, 139, - 130, 452, 918, -1000, -1000, -1000, -1000, -1000, -340, 1092, - 375, 144, 180, 27028, 27028, 27028, 27028, 27028, 404, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 182, 359, -1000, 27028, - 27028, 398, -1000, -1000, 27028, 626, -1000, -1000, 626, -1000, - -1000, -1000, -1000, -1000, -1000, 1457, -87, -309, -1000, -306, - -1000, -1000, -1000, -1000, 834, 2345, 2398, -1000, 13345, 13345, - -1000, -1000, 1090, 1090, 10147, 6920, 1562, 1473, -1000, -1000, - 373, 608, 373, 13345, 13345, -1000, 13345, 13345, -1000, -133, - 1146, 584, -1000, 11980, 951, -1000, -1000, 13345, 13345, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 380, 378, - 377, 27028, -1000, -1000, -1000, 859, 943, 1371, 732, 732, - -1000, -1000, 27028, -1000, -1000, -1000, -1000, 1566, 11980, -1000, - 1187, -1000, 5044, 1528, 1316, 27028, 1246, 1594, 15178, 27028, - 1163, -1000, 549, 1302, 1290, 1315, 1247, -1000, -1000, -1000, - -1000, 1353, -1000, 1342, -1000, -1000, -1000, -1000, -1000, 1084, - 1571, 18831, 1124, -1000, 1124, -1000, 429, -1000, -1000, -1000, - -97, -61, -1000, -1000, -1000, 2205, -1000, -1000, -1000, 701, - 13345, 1586, -1000, 940, 1486, -1000, 1484, -1000, -1000, 452, - 452, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1088, -1000, - 1078, 1179, 1076, 69, -1000, 1281, 1456, 545, 545, -1000, - 779, -1000, 918, -1000, -1000, 374, -1000, 1502, 27028, 1313, - 1312, 1311, -1000, 1553, 1167, -1000, 27028, -1000, -1000, 27028, - -1000, -1000, 1385, 184, 1069, -1000, -1000, -1000, 241, 27028, - -1000, 1020, 130, -1000, -1000, -1000, -1000, -1000, -1000, 27028, - 155, -1000, 1259, 1002, -1000, 1301, -1000, -1000, -1000, -1000, - 116, 229, -1000, 27028, 397, 1327, 27028, -1000, -1000, -1000, - -1000, 607, 607, -1000, 1452, -1000, 918, -1000, 13345, 2345, - 2345, -1000, -1000, 1009, -1000, 1528, -1000, 1009, 1254, 1254, - -1000, 1254, 1257, -1000, 1254, 79, 1254, 78, 1009, 1009, - 2316, 2131, 1877, 1679, 1246, -128, -1000, 732, 11980, 1536, - 1263, 1246, 1246, 1246, 1057, 939, 32, -1000, -1000, -1000, - 1564, 1551, 732, -1000, -1000, -1000, 1492, 1074, 1123, -1000, - -1000, 9692, 1060, 1384, 428, 1057, 1562, 27028, 11980, -1000, - -1000, 11980, 1253, -1000, 11980, -1000, -1000, -1000, 1562, 1562, - 1124, -1000, -1000, 470, -1000, -1000, -1000, -1000, -1000, 2345, - -141, -1000, -1000, -1000, -1000, -1000, 32, 912, 32, 777, - -1000, 735, -1000, -1000, -212, -1000, -1000, 1162, 1298, -1000, - -1000, 27028, -1000, -1000, 27028, 27028, 27028, 27028, 27028, -1000, - -1000, 237, -1000, 295, 1047, -1000, -170, -1000, -1000, 1251, - -1000, -1000, -1000, 1032, -1000, -144, 918, 27028, 27028, 27028, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2345, -1000, - 1473, -1000, -1000, 212, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 13345, 13345, 13345, 13345, 13345, 1528, 911, 732, - 13345, 13345, 18376, 27028, 27028, 16543, 32, 16, -1000, 11980, - 11980, 1479, -1000, 1246, -1000, 1224, 27028, 1246, 27028, -1000, - 1528, -1000, 732, 732, 27028, 732, 1528, -1000, -1000, 452, - -1000, 452, 1030, 1018, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1251, -1000, -1000, -1000, 1167, -1000, 234, 27028, - -1000, 241, -1000, -176, -177, 1507, 27028, -1000, -1000, 6920, - -1000, -1000, 1250, 1303, -1000, -1000, -1000, -1000, 1083, 1083, - 1083, 1083, 203, 1009, -1000, 1083, 1083, 1043, -1000, 1043, - 1043, 448, -263, -1000, 1416, 1413, 732, 1147, 1585, -1000, - 1246, 1594, 410, 1123, -1000, -1000, 1039, -1000, -1000, -1000, - -1000, -1000, 1505, 1246, 1238, -1000, -1000, -1000, 1237, 1037, - 1128, -1000, 543, 27028, 27028, -1000, -1000, -1000, -1000, 1009, - 140, -153, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 16, - 276, -1000, 1409, 1413, -1000, 1547, 1414, 1545, -1000, 27028, - 1123, 27028, -1000, 1237, 12435, 27028, 176, -1000, 6920, 4575, - 1023, -1000, -1000, 1370, -138, -156, 1396, 1406, 1406, 1409, - -1000, 1539, 1533, -1000, 909, 1523, 905, 1021, -1000, 176, - 1083, 1009, 1014, -1000, -55, -1000, -1000, -1000, -1000, -1000, - 1301, -1000, 1369, -1000, 1392, 762, -1000, -1000, -1000, -1000, - 900, 897, -1000, 873, -1000, -1000, -1000, -1000, 1310, 306, - -1000, -1000, -144, -151, -1000, 741, -1000, -1000, -1000, -1000, - -1000, 1309, -1000, 1575, 151, -1000, -154, -1000, -1000, -1000, - 1584, 467, 467, -1000, -167, -1000, -1000, -1000, 303, 823, - -1000, -1000, -1000, -1000, -1000, + -1000, -335, 27383, -1000, 133, 550, 181, 220, 179, 27383, + 118, 1499, 172, 164, 27383, 27383, 250, 1285, 27383, 1486, + 27383, -1000, -1000, -1000, -1000, 707, 27383, -1000, -1000, 644, + 644, -1000, -1000, 27383, 644, -1000, -1000, -1000, -1000, -1000, + -1000, 644, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 914, -1000, 27383, 27383, + -1000, -1000, -1000, -1000, -1000, 207, -65, 159, -1000, -1000, + -1000, -1000, 1502, -1000, 707, 487, 670, 537, -1000, -1000, + 761, -1000, -1000, 2525, -1000, -1000, -1000, -1000, 752, 13700, + 13700, 13700, 856, 2525, 2497, 876, 2680, 447, 651, 651, + 470, 470, 470, 470, 470, 819, 819, -1000, -1000, -1000, + -1000, 952, -1000, -1000, -1000, 952, 10502, 10502, 1130, 1184, + 397, -1000, 1200, -1000, -1000, 1505, 1015, 1015, 722, 951, + 555, 1556, 1015, 541, 1555, 1015, 1015, 10502, -1000, -1000, + 584, -1000, 12335, 952, -1000, 1254, 1120, 1112, 1015, 952, + 952, 1015, 1015, 27383, -1000, -279, -1000, -90, 394, 1184, + -1000, 19641, -1000, -1000, 952, 1092, 1445, -1000, -1000, 1412, + -1000, 1373, 12335, 12335, 12335, -1000, -1000, -1000, 1445, 1506, + -1000, 1387, 1386, 1548, 10502, 19186, 1575, -1000, -1000, -1000, + 378, 1548, 1105, 1184, -1000, 27383, 19186, 19186, 19186, 19186, + 19186, -1000, 1341, 1319, -1000, 1366, 1365, 1301, 27383, -1000, + 1042, 1037, 17366, 199, 1098, 19186, 27383, -1000, -1000, 19186, + 27383, 5868, -1000, 1106, -83, -59, -1000, -1000, -1000, -1000, + 707, -1000, 811, -1000, 2224, -1000, 274, -1000, -1000, -1000, + -1000, 496, 13, -1000, -1000, 14, 14, -1000, -1000, 446, + 736, 446, 446, 446, 913, 913, -1000, -1000, -1000, -1000, + -1000, 757, -1000, -1000, -1000, 745, -1000, -1000, 766, 1300, + 116, -1000, -1000, 506, 909, 1420, 27383, -1000, -1000, 987, + 133, 27383, 587, 1284, -1000, 1267, 1267, 1267, 27383, -1000, + -1000, -1000, -1000, 273, 27383, 1027, -1000, 112, 27383, 971, + 27383, -1000, 1024, 27383, -1000, 893, -1000, -1000, 7275, -1000, + 27383, 1184, -1000, -1000, -1000, -1000, 341, 1450, 1443, 109, + 112, 446, 893, -1000, -1000, -1000, -1000, -1000, -338, 1017, + 305, 119, 167, 27383, 27383, 27383, 27383, 27383, 408, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 161, 284, -1000, 27383, + 27383, 348, -1000, -1000, -1000, 632, -1000, -1000, 632, -1000, + -1000, -1000, -1000, -1000, -1000, 1434, -73, -310, -1000, -307, + -1000, -1000, -1000, -1000, 856, 2525, 2465, -1000, 13700, 13700, + -1000, -1000, 1015, 1015, 10502, 7275, 1528, 1445, -1000, -1000, + 498, 631, 498, 13700, 13700, -1000, 13700, 13700, -1000, -120, + 1040, 538, -1000, 12335, 733, -1000, -1000, 13700, 13700, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 325, 320, + 316, 27383, -1000, -1000, -1000, 796, 885, 1371, 707, 707, + -1000, -1000, 27383, -1000, -1000, -1000, -1000, 1542, 12335, -1000, + 1100, -1000, 5399, 1505, 1282, 27383, 1184, 1577, 15533, 27383, + 1129, -1000, 520, 1305, 1261, 1280, 1336, -1000, -1000, -1000, + -1000, 1293, -1000, 1206, -1000, -1000, -1000, -1000, -1000, 1037, + 1548, 19186, 1103, -1000, 1103, -1000, 365, -1000, -1000, -1000, + -75, -82, -1000, -1000, -1000, 2612, -1000, -1000, -1000, 641, + 13700, 1565, -1000, 882, 1456, -1000, 1455, -1000, -1000, 446, + 446, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1013, -1000, + 1011, 1097, 1007, 51, -1000, 1141, 1432, 506, 506, -1000, + 728, -1000, 893, -1000, -1000, 287, -1000, 1485, 27383, 1278, + 1276, 1272, -1000, 1519, 1094, -1000, 27383, -1000, -1000, 27383, + -1000, -1000, 1385, 116, 1001, -1000, -1000, -1000, 195, 27383, + -1000, 1153, 112, -1000, -1000, -1000, -1000, -1000, -1000, 27383, + 122, -1000, 1193, 949, -1000, 1264, -1000, -1000, -1000, -1000, + 101, 180, -1000, 27383, 340, 1300, 27383, -1000, -1000, -1000, + 644, 644, -1000, 1431, -1000, 893, -1000, 13700, 2525, 2525, + -1000, -1000, 952, -1000, 1505, -1000, 952, 1190, 1190, -1000, + 1190, 1191, -1000, 1190, 67, 1190, 65, 952, 952, 2410, + 2392, 2347, 2160, 1184, -114, -1000, 707, 12335, 1777, 1283, + 1184, 1184, 1184, 992, 880, 14, -1000, -1000, -1000, 1540, + 1517, 707, -1000, -1000, -1000, 1472, 1089, 1085, -1000, -1000, + 10047, 997, 1382, 363, 992, 1528, 27383, 12335, -1000, -1000, + 12335, 1189, -1000, 12335, -1000, -1000, -1000, 1528, 1528, 1103, + -1000, -1000, 468, -1000, -1000, -1000, -1000, -1000, 2525, -45, + -1000, -1000, -1000, -1000, -1000, 14, 875, 14, 710, -1000, + 687, -1000, -1000, -221, -1000, -1000, 1136, 1320, -1000, -1000, + 27383, -1000, -1000, 27383, 27383, 27383, 27383, 27383, -1000, -1000, + 191, -1000, 233, 986, -1000, -175, -1000, -1000, 1187, -1000, + -1000, -1000, 965, -1000, -130, 893, 27383, 27383, 27383, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2525, -1000, 1445, + -1000, -1000, 208, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 13700, 13700, 13700, 13700, 13700, 1505, 861, 707, 13700, + 13700, 18731, 27383, 27383, 16898, 14, 7, -1000, 12335, 12335, + 1453, -1000, 1184, -1000, 1124, 27383, 1184, 27383, -1000, 1505, + -1000, 707, 707, 27383, 707, 1505, -1000, -1000, 446, -1000, + 446, 961, 954, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1187, -1000, -1000, -1000, 1094, -1000, 188, 27383, -1000, + 195, -1000, -181, -187, 1490, 27383, -1000, -1000, 7275, -1000, + -1000, 1186, 1266, -1000, -1000, -1000, -1000, 1254, 1254, 1254, + 1254, 497, 952, -1000, 1254, 1254, 983, -1000, 983, 983, + 394, -274, -1000, 1410, 1393, 707, 1092, 1563, -1000, 1184, + 1577, 361, 1085, -1000, -1000, 980, -1000, -1000, -1000, -1000, + -1000, 1488, 1184, 1183, -1000, -1000, -1000, 1171, 969, 1091, + -1000, 500, 27383, 27383, -1000, -1000, -1000, -1000, 952, 153, + -135, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 7, 259, + -1000, 1403, 1393, -1000, 1515, 1406, 1513, -1000, 27383, 1085, + 27383, -1000, 1171, 12790, 27383, 211, -1000, 7275, 4930, 964, + -1000, -1000, 1352, -124, -168, 1399, 1401, 1401, 1403, -1000, + 1512, 1511, -1000, 860, 1508, 851, 1019, -1000, 211, 1254, + 952, 957, -1000, -57, -1000, -1000, -1000, -1000, -1000, 1264, + -1000, 1348, -1000, 1397, 734, -1000, -1000, -1000, -1000, 812, + 767, -1000, 657, -1000, -1000, -1000, -1000, 1270, 247, -1000, + -1000, -130, -132, -1000, 683, -1000, -1000, -1000, -1000, -1000, + 1269, -1000, 1552, 137, -1000, -136, -1000, -1000, -1000, 1562, + 413, 413, -1000, -169, -1000, -1000, -1000, 232, 727, -1000, + -1000, -1000, -1000, -1000, } var yyPgo = [...]int{ - 0, 1922, 1921, 12, 104, 89, 1920, 1919, 1918, 1917, - 131, 130, 129, 1916, 1915, 1913, 1912, 1911, 1910, 1906, - 1904, 1903, 1902, 1898, 1895, 47, 122, 36, 38, 136, - 1894, 1893, 29, 1890, 1889, 1888, 124, 121, 566, 1887, - 119, 1881, 1878, 1876, 1874, 1873, 1870, 1868, 1867, 1866, - 1865, 1864, 1863, 1862, 1861, 214, 1860, 1859, 7, 1856, - 34, 1854, 1851, 1848, 1845, 1843, 91, 1842, 1841, 1840, - 116, 1839, 1838, 51, 90, 50, 76, 1837, 1836, 78, - 126, 1834, 68, 103, 1833, 1370, 1832, 43, 81, 98, - 1831, 42, 1829, 1828, 64, 1827, 1826, 1825, 77, 1821, - 1806, 2444, 1804, 72, 87, 11, 39, 1798, 1797, 1796, - 1795, 30, 2177, 1794, 1790, 23, 1788, 1787, 134, 1786, - 93, 18, 1783, 20, 31, 22, 1781, 86, 1779, 40, - 56, 35, 1777, 85, 1776, 1775, 1774, 1773, 33, 1767, - 79, 108, 58, 1765, 1764, 19, 8, 1759, 1758, 1757, - 1755, 1751, 1750, 6, 1746, 4, 1745, 27, 1744, 9, - 15, 74, 69, 25, 14, 1741, 215, 1729, 24, 114, - 66, 111, 1728, 1727, 1724, 950, 144, 1722, 1718, 48, - 1717, 100, 99, 1716, 162, 1715, 1714, 80, 1284, 2407, - 53, 115, 1712, 1711, 2163, 61, 82, 17, 1710, 57, - 1707, 1706, 1702, 125, 140, 63, 838, 45, 1701, 1700, - 1698, 1697, 1695, 1694, 1693, 123, 37, 21, 107, 26, - 1680, 1678, 1677, 65, 46, 1663, 109, 106, 75, 135, - 1661, 117, 101, 71, 1660, 83, 1658, 1655, 1654, 1652, - 44, 1651, 1645, 1644, 1643, 110, 94, 73, 32, 1642, - 41, 59, 105, 102, 1641, 16, 120, 10, 1639, 3, - 0, 1633, 5, 128, 166, 118, 1629, 1628, 1, 1624, - 2, 1622, 1612, 88, 1610, 1603, 1602, 1601, 167, 28, - 113, 1600, 127, + 0, 1865, 1864, 11, 126, 85, 1862, 1861, 1860, 1857, + 133, 129, 127, 1855, 1853, 1848, 1845, 1841, 1840, 1839, + 1838, 1837, 1836, 1835, 1834, 59, 137, 37, 42, 142, + 1829, 1827, 25, 1826, 1825, 1823, 120, 119, 523, 1822, + 121, 1821, 1819, 1818, 1817, 1816, 1815, 1814, 1813, 1812, + 1811, 1809, 1804, 1803, 1802, 208, 1801, 1798, 8, 1797, + 29, 1795, 1794, 1792, 1791, 1788, 89, 1785, 1779, 1778, + 114, 1776, 1774, 51, 109, 50, 78, 1772, 1769, 81, + 124, 1766, 64, 102, 1765, 2222, 1763, 45, 90, 77, + 1762, 46, 1761, 1760, 88, 1756, 1755, 1750, 76, 1749, + 1748, 2953, 1746, 75, 82, 17, 65, 1744, 1741, 1740, + 1739, 30, 713, 1738, 1737, 23, 1736, 1735, 131, 1734, + 86, 28, 1733, 15, 14, 22, 1730, 83, 1728, 41, + 58, 35, 1727, 87, 1724, 1722, 1718, 1717, 33, 1716, + 79, 101, 31, 1715, 1714, 20, 7, 1712, 1710, 1709, + 1707, 1706, 1702, 6, 1700, 5, 1699, 39, 1695, 10, + 16, 74, 113, 24, 13, 1693, 122, 1691, 21, 115, + 69, 111, 1689, 1688, 1672, 802, 143, 1671, 1669, 47, + 1668, 91, 100, 1667, 162, 1666, 1665, 61, 1284, 2712, + 38, 116, 1664, 1663, 2150, 53, 80, 18, 1661, 72, + 1660, 1659, 1658, 125, 117, 63, 772, 48, 1657, 1655, + 1654, 1653, 1652, 1651, 1650, 26, 34, 19, 104, 32, + 1649, 1647, 1646, 66, 56, 1644, 107, 106, 73, 98, + 1638, 118, 93, 57, 1634, 43, 1631, 1630, 1625, 1624, + 44, 1622, 1619, 1616, 1614, 103, 105, 68, 36, 1613, + 40, 71, 110, 108, 1601, 27, 139, 9, 1600, 3, + 0, 1599, 4, 128, 171, 99, 1598, 1595, 1, 1594, + 2, 1591, 1590, 84, 1589, 1588, 1586, 1585, 1868, 361, + 112, 1583, 123, } //line sql.y:5200 @@ -4779,7 +4766,7 @@ var yyR2 = [...]int{ 4, 4, 4, 4, 3, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 0, 2, 2, 1, 3, 8, 8, 3, 3, 5, 7, - 7, 6, 6, 3, 2, 3, 3, 3, 7, 3, + 7, 6, 5, 3, 2, 3, 3, 3, 7, 3, 3, 3, 3, 4, 7, 5, 2, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 2, 4, 5, @@ -5006,7 +4993,7 @@ var yyChk = [...]int{ 30, 463, 462, 464, 465, 466, 89, 30, 89, 30, 89, -189, 81, -101, -83, 214, 153, 155, 158, 73, 88, 228, 118, 41, 82, 167, 164, -260, -181, 169, - -55, -195, -194, -187, 88, -85, -231, 12, 128, -199, + -181, -195, -194, -187, 88, -85, -231, 12, 128, -199, -199, -179, -101, -231, -199, -179, -101, -179, -179, -179, -179, -199, -179, -194, -194, -101, -101, -101, -101, -101, -101, -101, -204, -204, -204, -180, 126, -179, 73, -202, @@ -5039,7 +5026,7 @@ var yyChk = [...]int{ -130, -205, 167, -205, -205, 88, 88, -178, 471, -94, -82, 216, 118, 205, 205, 164, 164, 218, -101, 229, 230, 228, 21, 217, 219, 221, 207, -101, -101, -181, - 73, -96, -101, 24, -181, -101, -179, -179, -101, -179, + 73, -96, -101, 24, -194, -101, -179, -179, -101, -179, -179, 88, -101, -189, -66, 317, 347, 20, -67, 20, 98, 99, 100, -120, -112, -112, -112, -73, 189, 109, -279, -279, -74, -74, -278, 150, -5, -142, -279, -279, @@ -5062,47 +5049,47 @@ var yyChk = [...]int{ 30, 30, -130, -131, -217, -260, 473, 472, 83, 166, 223, -84, 330, 88, 84, -101, -101, -101, -101, -101, 158, 155, 208, 167, -94, -101, 82, -60, 184, 179, - -194, -199, -199, 32, 317, 450, 448, -73, 109, -112, - -112, -279, -279, -75, -190, -138, -157, -207, 144, 256, - 188, 254, 250, 270, 261, 283, 252, 284, -205, -207, - -112, -112, -112, -112, 344, -138, 117, -85, 115, -112, - -112, 165, 165, 165, -162, 40, 88, 88, 59, -101, - -136, 14, -85, 135, -142, -163, 73, -164, -123, -125, - -124, -278, -158, -279, -189, -162, -106, 82, 118, -92, - -91, 73, 74, -93, 73, -91, 63, 63, -279, -106, - -87, -106, -106, 150, 317, 321, 322, -240, 98, -112, - 10, 88, 29, 29, -217, -217, 83, 82, 83, 82, - 83, 82, -183, 384, 110, -28, -27, -235, -235, 89, - -260, 166, 24, -101, 73, 73, 73, 17, 82, -224, - -129, 54, -250, 83, -254, -255, -101, -111, -131, -101, - -81, 214, 222, 81, 85, -262, 74, 205, 281, 205, - -101, -60, -32, -101, -179, -179, 32, -260, -112, -279, - -142, -279, -215, -215, -215, -219, -215, 244, -215, 244, - -279, -279, 20, 20, 20, 20, -278, -65, 340, -85, - 82, 82, -278, -278, -278, -279, 88, -216, -137, 15, - 17, 28, -163, 82, -279, -279, 82, 54, 150, -279, - -138, -168, -85, -85, 81, -85, -138, -106, -115, -216, - 88, -216, 89, 89, 384, 30, 78, 79, 80, 30, - 75, 76, -101, -101, -101, -101, -159, -189, 201, 183, - -279, 82, -222, 347, 350, -160, 81, 83, -259, 347, - -261, -260, -189, -189, -189, -157, -216, -260, -112, -112, - -112, -112, -112, -142, 88, -112, -112, -159, -279, -159, - -159, -197, -216, -146, -151, -176, -85, -121, 29, -125, - 54, -3, -189, -123, -189, -142, -159, -142, -217, -217, - 83, 83, -160, 202, -101, -255, 351, 351, 23, -159, - -258, -257, -190, 81, 74, -279, -279, -279, -279, -68, - 128, 347, -279, -279, -279, -279, -279, -279, -105, -149, - 434, -154, 43, -152, -153, 44, -150, 45, 53, 10, - -123, 150, 83, 23, -278, 81, -3, 83, 82, 118, - -159, -101, -279, 345, 70, 348, -146, 48, 262, -156, - -155, 52, 44, -153, 17, 46, 17, -164, -189, -3, - -112, 198, -159, -58, 347, -257, -239, -190, 88, 89, - 83, 59, 346, 349, -147, 50, -145, 49, -145, -155, - 17, 17, 88, 17, 88, -58, -279, -279, 83, -59, - 213, 438, -262, 59, -148, 51, 73, 101, 88, 88, - 88, -269, -270, 73, 176, -259, 347, 73, 101, -270, - 73, 11, 10, 215, 348, -268, 184, 179, 182, 31, - -268, 349, 178, 30, 98, + -199, -199, 32, 317, 450, 448, -73, 109, -112, -112, + -279, -279, -75, -190, -138, -157, -207, 144, 256, 188, + 254, 250, 270, 261, 283, 252, 284, -205, -207, -112, + -112, -112, -112, 344, -138, 117, -85, 115, -112, -112, + 165, 165, 165, -162, 40, 88, 88, 59, -101, -136, + 14, -85, 135, -142, -163, 73, -164, -123, -125, -124, + -278, -158, -279, -189, -162, -106, 82, 118, -92, -91, + 73, 74, -93, 73, -91, 63, 63, -279, -106, -87, + -106, -106, 150, 317, 321, 322, -240, 98, -112, 10, + 88, 29, 29, -217, -217, 83, 82, 83, 82, 83, + 82, -183, 384, 110, -28, -27, -235, -235, 89, -260, + 166, 24, -101, 73, 73, 73, 17, 82, -224, -129, + 54, -250, 83, -254, -255, -101, -111, -131, -101, -81, + 214, 222, 81, 85, -262, 74, 205, 281, 205, -101, + -60, -32, -101, -179, -179, 32, -260, -112, -279, -142, + -279, -215, -215, -215, -219, -215, 244, -215, 244, -279, + -279, 20, 20, 20, 20, -278, -65, 340, -85, 82, + 82, -278, -278, -278, -279, 88, -216, -137, 15, 17, + 28, -163, 82, -279, -279, 82, 54, 150, -279, -138, + -168, -85, -85, 81, -85, -138, -106, -115, -216, 88, + -216, 89, 89, 384, 30, 78, 79, 80, 30, 75, + 76, -101, -101, -101, -101, -159, -189, 201, 183, -279, + 82, -222, 347, 350, -160, 81, 83, -259, 347, -261, + -260, -189, -189, -189, -157, -216, -260, -112, -112, -112, + -112, -112, -142, 88, -112, -112, -159, -279, -159, -159, + -197, -216, -146, -151, -176, -85, -121, 29, -125, 54, + -3, -189, -123, -189, -142, -159, -142, -217, -217, 83, + 83, -160, 202, -101, -255, 351, 351, 23, -159, -258, + -257, -190, 81, 74, -279, -279, -279, -279, -68, 128, + 347, -279, -279, -279, -279, -279, -279, -105, -149, 434, + -154, 43, -152, -153, 44, -150, 45, 53, 10, -123, + 150, 83, 23, -278, 81, -3, 83, 82, 118, -159, + -101, -279, 345, 70, 348, -146, 48, 262, -156, -155, + 52, 44, -153, 17, 46, 17, -164, -189, -3, -112, + 198, -159, -58, 347, -257, -239, -190, 88, 89, 83, + 59, 346, 349, -147, 50, -145, 49, -145, -155, 17, + 17, 88, 17, 88, -58, -279, -279, 83, -59, 213, + 438, -262, 59, -148, 51, 73, 101, 88, 88, 88, + -269, -270, 73, 176, -259, 347, 73, 101, -270, 73, + 11, 10, 215, 348, -268, 184, 179, 182, 31, -268, + 349, 178, 30, 98, } var yyDef = [...]int{ @@ -5192,7 +5179,7 @@ var yyDef = [...]int{ 0, 0, 224, 224, 0, 0, 0, 0, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 858, 0, 0, - 0, -2, 0, 416, 0, 0, 0, 936, 557, 423, + 0, -2, 0, 416, 0, 0, 0, 936, 936, 423, 0, 425, 426, 0, 0, 427, 0, 478, 478, 476, 477, 429, 430, 431, 432, 481, 0, 0, 233, 234, 235, 478, 481, 0, 481, 481, 481, 481, 478, 481, @@ -5235,7 +5222,7 @@ var yyDef = [...]int{ 308, 309, 310, 311, 312, 313, 298, 299, 300, 301, 302, 305, 0, 102, 849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 936, 0, 0, 0, - 936, 643, 959, 960, 482, 483, 0, 236, 237, 481, + 0, 643, 959, 960, 482, 483, 0, 236, 237, 481, 481, 433, 456, 0, 481, 437, 458, 438, 440, 439, 441, 481, 444, 479, 480, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 460, 0, 461, 0, 0, @@ -5268,7 +5255,7 @@ var yyDef = [...]int{ 324, 212, 0, 278, 279, 284, 285, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 384, 385, 386, 846, 847, 848, 0, 0, 417, 0, - 0, 263, 64, 937, 0, 478, 443, 459, 478, 435, + 0, 263, 64, 937, 422, 478, 443, 459, 478, 435, 442, 485, 464, 495, 539, 0, 0, 0, 547, 0, 675, 677, 679, 666, 687, 670, 0, 667, 0, 0, 661, 729, 0, 0, 570, 0, 821, 864, 733, 734, @@ -5291,47 +5278,47 @@ var yyDef = [...]int{ 341, 0, 324, 344, 345, 356, 306, 307, 304, 0, 0, 859, 860, 0, 863, 93, 376, 378, 377, 381, 0, 0, 374, 0, 263, 833, 0, 421, 264, 265, - 422, 481, 481, 534, 0, 537, 0, 668, 0, 688, - 671, 730, 731, 0, 805, 829, 46, 0, 197, 197, - 784, 197, 201, 787, 197, 789, 197, 792, 0, 0, - 0, 0, 0, 0, 0, 796, 744, 802, 0, 0, - 0, 0, 0, 0, 0, 0, 208, 869, 866, 45, - 819, 0, 651, 589, 49, 53, 0, 907, 898, 909, - 911, 0, 0, 0, 903, 0, 821, 0, 0, 613, - 620, 0, 0, 614, 0, 615, 635, 637, -2, 821, - 650, 60, 61, 0, 80, 81, 82, 272, 138, 139, - 0, 142, 143, 145, 172, 173, 208, 0, 208, 0, - 202, 0, 255, 267, 0, 834, 835, 0, 0, 221, - 223, 0, 939, 103, 0, 0, 0, 0, 0, 127, - 325, 0, 215, 0, 0, 412, 409, 342, 343, 607, - 850, 851, 852, 0, 862, 96, 0, 0, 0, 0, - 418, 419, 420, 65, 428, 434, 536, 556, 672, 732, - 864, 735, 781, 208, 785, 786, 788, 790, 791, 793, - 737, 736, 0, 0, 0, 0, 0, 829, 0, 800, - 0, 0, 0, 0, 0, 625, 208, 889, 50, 0, - 0, 0, 54, 0, 912, 0, 0, 0, 0, 71, - 829, 916, 917, 617, 0, 622, 829, 59, 140, 212, - 196, 212, 0, 0, 268, 838, 839, 840, 841, 842, - 843, 844, 607, 104, 105, 106, 331, 610, 0, 0, - 389, 0, 397, 0, 0, 0, 0, 861, 375, 0, - 94, 95, 0, 0, 380, 47, 782, 783, 0, 0, - 0, 0, 773, 0, 797, 0, 0, 0, 647, 0, - 0, 645, 871, 870, 883, 896, 820, 818, 0, 910, - 0, 902, 905, 901, 904, 57, 0, 58, 185, 186, - 200, 203, 0, 0, 0, 413, 410, 411, 0, 0, - 97, 98, 0, 0, 0, 738, 740, 739, 741, 0, - 0, 0, 743, 761, 762, 646, 648, 649, 606, 889, - 0, 882, 0, -2, 891, 0, 0, 0, 897, 0, - 900, 0, 618, 0, 0, 0, 853, 608, 0, 0, - 0, 382, 742, 0, 0, 0, 876, 874, 874, 884, - 885, 0, 0, 892, 0, 0, 0, 908, 906, 853, - 0, 0, 0, 372, 855, 99, 100, 317, 318, 319, - 93, 774, 0, 777, 879, 0, 872, 875, 873, 886, - 0, 0, 893, 0, 895, 89, 414, 415, 251, 0, - 856, 857, 96, 775, 868, 0, 877, 878, 887, 888, - 894, 252, 253, 0, 0, 379, 0, 880, 881, 254, - 0, 0, 0, 854, 0, 256, 258, 259, 0, 0, - 257, 776, 260, 261, 262, + 481, 481, 534, 0, 537, 0, 668, 0, 688, 671, + 730, 731, 0, 805, 829, 46, 0, 197, 197, 784, + 197, 201, 787, 197, 789, 197, 792, 0, 0, 0, + 0, 0, 0, 0, 796, 744, 802, 0, 0, 0, + 0, 0, 0, 0, 0, 208, 869, 866, 45, 819, + 0, 651, 589, 49, 53, 0, 907, 898, 909, 911, + 0, 0, 0, 903, 0, 821, 0, 0, 613, 620, + 0, 0, 614, 0, 615, 635, 637, -2, 821, 650, + 60, 61, 0, 80, 81, 82, 272, 138, 139, 0, + 142, 143, 145, 172, 173, 208, 0, 208, 0, 202, + 0, 255, 267, 0, 834, 835, 0, 0, 221, 223, + 0, 939, 103, 0, 0, 0, 0, 0, 127, 325, + 0, 215, 0, 0, 412, 409, 342, 343, 607, 850, + 851, 852, 0, 862, 96, 0, 0, 0, 0, 418, + 419, 420, 65, 428, 434, 536, 556, 672, 732, 864, + 735, 781, 208, 785, 786, 788, 790, 791, 793, 737, + 736, 0, 0, 0, 0, 0, 829, 0, 800, 0, + 0, 0, 0, 0, 625, 208, 889, 50, 0, 0, + 0, 54, 0, 912, 0, 0, 0, 0, 71, 829, + 916, 917, 617, 0, 622, 829, 59, 140, 212, 196, + 212, 0, 0, 268, 838, 839, 840, 841, 842, 843, + 844, 607, 104, 105, 106, 331, 610, 0, 0, 389, + 0, 397, 0, 0, 0, 0, 861, 375, 0, 94, + 95, 0, 0, 380, 47, 782, 783, 0, 0, 0, + 0, 773, 0, 797, 0, 0, 0, 647, 0, 0, + 645, 871, 870, 883, 896, 820, 818, 0, 910, 0, + 902, 905, 901, 904, 57, 0, 58, 185, 186, 200, + 203, 0, 0, 0, 413, 410, 411, 0, 0, 97, + 98, 0, 0, 0, 738, 740, 739, 741, 0, 0, + 0, 743, 761, 762, 646, 648, 649, 606, 889, 0, + 882, 0, -2, 891, 0, 0, 0, 897, 0, 900, + 0, 618, 0, 0, 0, 853, 608, 0, 0, 0, + 382, 742, 0, 0, 0, 876, 874, 874, 884, 885, + 0, 0, 892, 0, 0, 0, 908, 906, 853, 0, + 0, 0, 372, 855, 99, 100, 317, 318, 319, 93, + 774, 0, 777, 879, 0, 872, 875, 873, 886, 0, + 0, 893, 0, 895, 89, 414, 415, 251, 0, 856, + 857, 96, 775, 868, 0, 877, 878, 887, 888, 894, + 252, 253, 0, 0, 379, 0, 880, 881, 254, 0, + 0, 0, 854, 0, 256, 258, 259, 0, 0, 257, + 776, 260, 261, 262, } var yyTok1 = [...]int{ @@ -8697,11 +8684,11 @@ yydefault: } yyVAL.union = yyLOCAL case 422: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement //line sql.y:2344 { - yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[4].strs), DBName: yyDollar[6].tableIdent, IfExists: yyDollar[5].booleanUnion()} + yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[2].strs), DBName: yyDollar[5].tableIdent, IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL case 423: diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 675fa4f9284..9171e6570db 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -2340,9 +2340,9 @@ drop_statement: { $$ = &DropView{FromTables: $5, IfExists: $4} } -| DROP comment_opt database_or_schema comment_opt exists_opt table_id +| DROP comment_opt database_or_schema exists_opt table_id { - $$ = &DropDatabase{Comments: Comments($4), DBName: $6, IfExists: $5} + $$ = &DropDatabase{Comments: Comments($2), DBName: $5, IfExists: $4} } truncate_statement: From be290ef8b20f7aba038dc776fa44f335f366ecca Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Fri, 2 Apr 2021 08:31:28 +0300 Subject: [PATCH 04/64] minor comment spacing change Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vtgate/engine/online_ddl.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/vt/vtgate/engine/online_ddl.go b/go/vt/vtgate/engine/online_ddl.go index a6778c04bd0..eec5755ba06 100644 --- a/go/vt/vtgate/engine/online_ddl.go +++ b/go/vt/vtgate/engine/online_ddl.go @@ -31,7 +31,7 @@ import ( var _ Primitive = (*OnlineDDL)(nil) -//OnlineDDL represents the instructions to perform an online schema change via vtctld +// OnlineDDL represents the instructions to perform an online schema change via vtctld type OnlineDDL struct { Keyspace *vindexes.Keyspace DDL sqlparser.DDLStatement From ef5172fa6d0c76e733518258d07f4b6611bd3265 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Sat, 3 Apr 2021 16:27:39 +0300 Subject: [PATCH 05/64] DDL statement: SetComments Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/sqlparser/ast.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 8a57a9701f1..2d4f566479c 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -64,6 +64,7 @@ type ( AffectedTables() TableNames SetTable(qualifier string, name string) SetFromTables(tables TableNames) + SetComments(comments Comments) Statement } @@ -1065,6 +1066,46 @@ func (node *AlterView) SetFromTables(tables TableNames) { // irrelevant } +// SetComments implements DDLStatement. +func (node *RenameTable) SetComments(comments Comments) { + // irrelevant +} + +// SetComments implements DDLStatement. +func (node *TruncateTable) SetComments(comments Comments) { + // irrelevant +} + +// SetComments implements DDLStatement. +func (node *AlterTable) SetComments(comments Comments) { + node.Comments = comments +} + +// SetComments implements DDLStatement. +func (node *CreateTable) SetComments(comments Comments) { + node.Comments = comments +} + +// SetComments implements DDLStatement. +func (node *CreateView) SetComments(comments Comments) { + // irrelevant +} + +// SetComments implements DDLStatement. +func (node *DropTable) SetComments(comments Comments) { + node.Comments = comments +} + +// SetComments implements DDLStatement. +func (node *DropView) SetComments(comments Comments) { + // irrelevant +} + +// SetComments implements DDLStatement. +func (node *AlterView) SetComments(comments Comments) { + // irrelevant +} + // GetToTables implements the DDLStatement interface func (node *RenameTable) GetToTables() TableNames { var toTables TableNames From cf8d8558b8acf457e22cdcd8811d1b9b878525a8 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 10:25:52 +0300 Subject: [PATCH 06/64] online ddl refactor: - introducing DDLStrategySetting, formal wrapper for strategy+options - NewOnlineDDLs generates multiple OnlineDDL from a given statement, instead of parser generating multiple statements - OnlineDDL utilizes DDLStrategySetting; some logic moved out from OnlineDDL and into DDLStrategySetting Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/cached_size.go | 33 ++++++ go/vt/schema/ddl_strategy.go | 152 ++++++++++++++++++++++++ go/vt/schema/ddl_strategy_test.go | 109 +++++++++++++++++ go/vt/schema/online_ddl.go | 157 +++++++++++-------------- go/vt/schema/online_ddl_test.go | 188 +++++++++++++++++------------- go/vt/schema/parser.go | 22 ---- go/vt/schema/parser_test.go | 42 ------- 7 files changed, 464 insertions(+), 239 deletions(-) create mode 100644 go/vt/schema/cached_size.go create mode 100644 go/vt/schema/ddl_strategy.go create mode 100644 go/vt/schema/ddl_strategy_test.go diff --git a/go/vt/schema/cached_size.go b/go/vt/schema/cached_size.go new file mode 100644 index 00000000000..511bdae8753 --- /dev/null +++ b/go/vt/schema/cached_size.go @@ -0,0 +1,33 @@ +/* +Copyright 2021 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +// Code generated by Sizegen. DO NOT EDIT. + +package schema + +func (cached *DDLStrategySetting) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(32) + } + // field Strategy vitess.io/vitess/go/vt/schema.DDLStrategy + size += int64(len(cached.Strategy)) + // field Options string + size += int64(len(cached.Options)) + return size +} diff --git a/go/vt/schema/ddl_strategy.go b/go/vt/schema/ddl_strategy.go new file mode 100644 index 00000000000..c3a6ac36df0 --- /dev/null +++ b/go/vt/schema/ddl_strategy.go @@ -0,0 +1,152 @@ +/* +Copyright 2019 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package schema + +import ( + "fmt" + "regexp" + + "github.com/google/shlex" +) + +var ( + strategyParserRegexp = regexp.MustCompile(`^([\S]+)\s+(.*)$`) +) + +const ( + declarativeFlag = "declarative" + singletonFlag = "singleton" +) + +// DDLStrategy suggests how an ALTER TABLE should run (e.g. "direct", "online", "gh-ost" or "pt-osc") +type DDLStrategy string + +const ( + // DDLStrategyDirect means not an online-ddl migration. Just a normal MySQL ALTER TABLE + DDLStrategyDirect DDLStrategy = "direct" + // DDLStrategyOnline requests vreplication to run the migration + DDLStrategyOnline DDLStrategy = "online" + // DDLStrategyGhost requests gh-ost to run the migration + DDLStrategyGhost DDLStrategy = "gh-ost" + // DDLStrategyPTOSC requests pt-online-schema-change to run the migration + DDLStrategyPTOSC DDLStrategy = "pt-osc" +) + +// IsDirect returns true if this strategy is a direct strategy +// A strategy is direct if it's not explciitly one of the online DDL strategies +func (s DDLStrategy) IsDirect() bool { + switch s { + case DDLStrategyOnline, DDLStrategyGhost, DDLStrategyPTOSC: + return false + } + return true +} + +// DDLStrategySetting is a formal breakdown of the @@ddl_strategy variable, into strategy and options +type DDLStrategySetting struct { + Strategy DDLStrategy `json:"strategy,omitempty"` + Options string `json:"options,omitempty"` +} + +// NewDDLStrategySetting instantiates a new setting +func NewDDLStrategySetting(strategy DDLStrategy, options string) *DDLStrategySetting { + return &DDLStrategySetting{ + Strategy: strategy, + Options: options, + } +} + +// ParseDDLStrategy parses and validates the value of @@ddl_strategy or -ddl_strategy variables +func ParseDDLStrategy(strategyVariable string) (*DDLStrategySetting, error) { + setting := &DDLStrategySetting{} + strategyName := strategyVariable + if submatch := strategyParserRegexp.FindStringSubmatch(strategyVariable); len(submatch) > 0 { + strategyName = submatch[1] + setting.Options = submatch[2] + } + + switch strategy := DDLStrategy(strategyName); strategy { + case "": // backward compatiblity and to handle unspecified values + setting.Strategy = DDLStrategyDirect + case DDLStrategyOnline, DDLStrategyGhost, DDLStrategyPTOSC, DDLStrategyDirect: + setting.Strategy = strategy + default: + return nil, fmt.Errorf("Unknown online DDL strategy: '%v'", strategy) + } + return setting, nil +} + +// isFlag return true when the given string is a CLI flag of the given name +func isFlag(s string, name string) bool { + if s == fmt.Sprintf("-%s", name) { + return true + } + if s == fmt.Sprintf("--%s", name) { + return true + } + return false +} + +// hasFlag returns true when Options include named flag +func (setting *DDLStrategySetting) hasFlag(name string) bool { + opts, _ := shlex.Split(setting.Options) + for _, opt := range opts { + if isFlag(opt, name) { + return true + } + } + return false +} + +// IsDeclarative checks if strategy options include -declarative +func (setting *DDLStrategySetting) IsDeclarative() bool { + return setting.hasFlag(declarativeFlag) +} + +// IsSingleton checks if strategy options include -singleton +func (setting *DDLStrategySetting) IsSingleton() bool { + return setting.hasFlag(singletonFlag) +} + +// RuntimeOptions returns the options used as runtime flags for given strategy, removing any internal hint options +func (setting *DDLStrategySetting) RuntimeOptions() []string { + opts, _ := shlex.Split(setting.Options) + validOpts := []string{} + for _, opt := range opts { + switch { + case isFlag(opt, declarativeFlag): + case isFlag(opt, singletonFlag): + default: + validOpts = append(validOpts, opt) + } + } + return validOpts +} + +// IsSkipTopo suggests that DDL should apply to tables bypassing global topo request +func (setting *DDLStrategySetting) IsSkipTopo() bool { + switch { + case setting.IsSingleton(): + return true + } + return false +} + +// ToString returns a simple string representation of this instance +func (setting *DDLStrategySetting) ToString() string { + return fmt.Sprintf("DDLStrategySetting: strategy=%v, options=%s", setting.Strategy, setting.Options) +} diff --git a/go/vt/schema/ddl_strategy_test.go b/go/vt/schema/ddl_strategy_test.go new file mode 100644 index 00000000000..5711620aa12 --- /dev/null +++ b/go/vt/schema/ddl_strategy_test.go @@ -0,0 +1,109 @@ +/* +Copyright 2019 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package schema + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestIsDirect(t *testing.T) { + assert.True(t, DDLStrategyDirect.IsDirect()) + assert.False(t, DDLStrategyOnline.IsDirect()) + assert.False(t, DDLStrategyGhost.IsDirect()) + assert.False(t, DDLStrategyPTOSC.IsDirect()) + assert.True(t, DDLStrategy("").IsDirect()) + assert.False(t, DDLStrategy("gh-ost").IsDirect()) + assert.False(t, DDLStrategy("pt-osc").IsDirect()) + assert.True(t, DDLStrategy("something").IsDirect()) +} + +func TestParseDDLStrategy(t *testing.T) { + tt := []struct { + strategyVariable string + strategy DDLStrategy + options string + isDeclarative bool + isSingleton bool + runtimeOptions string + err error + }{ + { + strategyVariable: "direct", + strategy: DDLStrategyDirect, + }, + { + strategyVariable: "online", + strategy: DDLStrategyOnline, + }, + { + strategyVariable: "gh-ost", + strategy: DDLStrategyGhost, + }, + { + strategyVariable: "pt-osc", + strategy: DDLStrategyPTOSC, + }, + { + strategy: DDLStrategyDirect, + }, + { + strategyVariable: "gh-ost --max-load=Threads_running=100 --allow-master", + strategy: DDLStrategyGhost, + options: "--max-load=Threads_running=100 --allow-master", + runtimeOptions: "--max-load=Threads_running=100 --allow-master", + }, + { + strategyVariable: "gh-ost --max-load=Threads_running=100 -declarative", + strategy: DDLStrategyGhost, + options: "--max-load=Threads_running=100 -declarative", + runtimeOptions: "--max-load=Threads_running=100", + isDeclarative: true, + }, + { + strategyVariable: "gh-ost --declarative --max-load=Threads_running=100", + strategy: DDLStrategyGhost, + options: "--declarative --max-load=Threads_running=100", + runtimeOptions: "--max-load=Threads_running=100", + isDeclarative: true, + }, + { + strategyVariable: "pt-osc -singleton", + strategy: DDLStrategyPTOSC, + options: "-singleton", + runtimeOptions: "", + isSingleton: true, + }, + } + for _, ts := range tt { + setting, err := ParseDDLStrategy(ts.strategyVariable) + assert.NoError(t, err) + assert.Equal(t, ts.strategy, setting.Strategy) + assert.Equal(t, ts.options, setting.Options) + assert.Equal(t, ts.isDeclarative, setting.IsDeclarative()) + assert.Equal(t, ts.isSingleton, setting.IsSingleton()) + + runtimeOptions := strings.Join(setting.RuntimeOptions(), " ") + assert.Equal(t, ts.runtimeOptions, runtimeOptions) + } + { + _, err := ParseDDLStrategy("other") + assert.Error(t, err) + } +} diff --git a/go/vt/schema/online_ddl.go b/go/vt/schema/online_ddl.go index e7adfa451e6..89fa2e89bfb 100644 --- a/go/vt/schema/online_ddl.go +++ b/go/vt/schema/online_ddl.go @@ -21,11 +21,10 @@ import ( "encoding/json" "fmt" "regexp" + "strconv" "strings" "time" - "github.com/google/shlex" - "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/topo" ) @@ -33,7 +32,6 @@ import ( var ( migrationBasePath = "schema-migration" onlineDdlUUIDRegexp = regexp.MustCompile(`^[0-f]{8}_[0-f]{4}_[0-f]{4}_[0-f]{4}_[0-f]{12}$`) - strategyParserRegexp = regexp.MustCompile(`^([\S]+)\s+(.*)$`) onlineDDLGeneratedTableNameRegexp = regexp.MustCompile(`^_[0-f]{8}_[0-f]{4}_[0-f]{4}_[0-f]{4}_[0-f]{12}_([0-9]{14})_(gho|ghc|del|new|vrepl)$`) ptOSCGeneratedTableNameRegexp = regexp.MustCompile(`^_.*_old$`) revertStatementRegexp = regexp.MustCompile(`(?i)^revert\s+(.*)$`) @@ -42,7 +40,6 @@ var ( const ( SchemaMigrationsTableName = "schema_migrations" RevertActionStr = "revert" - declarativeFlag = "declarative" ) // MigrationBasePath is the root for all schema migration entries @@ -85,30 +82,6 @@ const ( OnlineDDLStatusFailed OnlineDDLStatus = "failed" ) -// DDLStrategy suggests how an ALTER TABLE should run (e.g. "" for normal, "gh-ost" or "pt-osc") -type DDLStrategy string - -const ( - // DDLStrategyDirect means not an online-ddl migration. Just a normal MySQL ALTER TABLE - DDLStrategyDirect DDLStrategy = "direct" - // DDLStrategyOnline requests vreplication to run the migration - DDLStrategyOnline DDLStrategy = "online" - // DDLStrategyGhost requests gh-ost to run the migration - DDLStrategyGhost DDLStrategy = "gh-ost" - // DDLStrategyPTOSC requests pt-online-schema-change to run the migration - DDLStrategyPTOSC DDLStrategy = "pt-osc" -) - -// IsDirect returns true if this strategy is a direct strategy -// A strategy is direct if it's not explciitly one of the online DDL strategies -func (s DDLStrategy) IsDirect() bool { - switch s { - case DDLStrategyOnline, DDLStrategyGhost, DDLStrategyPTOSC: - return false - } - return true -} - // OnlineDDL encapsulates the relevant information in an online schema change request type OnlineDDL struct { Keyspace string `json:"keyspace,omitempty"` @@ -125,24 +98,6 @@ type OnlineDDL struct { Retries int64 `json:"retries,omitempty"` } -// ParseDDLStrategy validates the given ddl_strategy variable value , and parses the strategy and options parts. -func ParseDDLStrategy(strategyVariable string) (strategy DDLStrategy, options string, err error) { - strategyName := strategyVariable - if submatch := strategyParserRegexp.FindStringSubmatch(strategyVariable); len(submatch) > 0 { - strategyName = submatch[1] - options = submatch[2] - } - - switch strategy = DDLStrategy(strategyName); strategy { - case "": // backwards compatiblity and to handle unspecified values - return DDLStrategyDirect, options, nil - case DDLStrategyOnline, DDLStrategyGhost, DDLStrategyPTOSC, DDLStrategyDirect: - return strategy, options, nil - default: - return DDLStrategyDirect, options, fmt.Errorf("Unknown online DDL strategy: '%v'", strategy) - } -} - // FromJSON creates an OnlineDDL from json func FromJSON(bytes []byte) (*OnlineDDL, error) { onlineDDL := &OnlineDDL{} @@ -177,25 +132,80 @@ func ParseOnlineDDLStatement(sql string) (ddlStmt sqlparser.DDLStatement, action return ddlStmt, action, fmt.Errorf("Unsupported query type: %s", sql) } +// NewOnlineDDLs takes a single DDL statement, normalizes it (potentially break down into multiple statements), and generates one or more OnlineDDL instances, one for each normalized statement +func NewOnlineDDLs(keyspace string, ddlStmt sqlparser.DDLStatement, ddlStrategySetting *DDLStrategySetting, requestContext string) (onlineDDLs [](*OnlineDDL), err error) { + appendOnlineDDL := func(tableName string, ddlStmt sqlparser.DDLStatement) error { + onlineDDL, err := NewOnlineDDL(keyspace, tableName, sqlparser.String(ddlStmt), ddlStrategySetting, requestContext) + if err != nil { + return err + } + onlineDDLs = append(onlineDDLs, onlineDDL) + return nil + } + switch ddlStmt := ddlStmt.(type) { + case *sqlparser.DropTable: + tables := ddlStmt.GetFromTables() + for _, table := range tables { + ddlStmt.SetFromTables([]sqlparser.TableName{table}) + if err := appendOnlineDDL(table.Name.String(), ddlStmt); err != nil { + return nil, err + } + } + return onlineDDLs, nil + case *sqlparser.CreateTable: + // handled later on + case *sqlparser.AlterTable: + // handled later on + default: + return nil, fmt.Errorf("Unsupported statement for Online DDL: %v", sqlparser.String(ddlStmt)) + } + if err := appendOnlineDDL(ddlStmt.GetTable().Name.String(), ddlStmt); err != nil { + return nil, err + } + return onlineDDLs, nil +} + // NewOnlineDDL creates a schema change request with self generated UUID and RequestTime -func NewOnlineDDL(keyspace string, table string, sql string, strategy DDLStrategy, options string, requestContext string) (*OnlineDDL, error) { - u, err := createUUID("_") +func NewOnlineDDL(keyspace string, table string, sql string, ddlStrategySetting *DDLStrategySetting, requestContext string) (*OnlineDDL, error) { + if ddlStrategySetting == nil { + return nil, fmt.Errorf("NewOnlineDDL: found nil DDLStrategySetting") + } + u, err := CreateOnlineDDLUUID() if err != nil { return nil, err } + + if ddlStrategySetting.IsSkipTopo() { + ddlStmt, _, err := ParseOnlineDDLStatement(sql) + if err != nil { + return nil, err + } + var comments = sqlparser.Comments{ + fmt.Sprintf(`/*vt+ uuid=%s context=%s strategy=%s options=%s */`, strconv.Quote(u), strconv.Quote(requestContext), strconv.Quote(string(ddlStrategySetting.Strategy)), strconv.Quote(ddlStrategySetting.Options)), + } + ddlStmt.SetComments(comments) + if ddlStmt.IsFullyParsed() { + sql = sqlparser.String(ddlStmt) + } + } return &OnlineDDL{ Keyspace: keyspace, Table: table, SQL: sql, UUID: u, - Strategy: strategy, - Options: options, + Strategy: ddlStrategySetting.Strategy, + Options: ddlStrategySetting.Options, RequestTime: time.Now().UnixNano(), RequestContext: requestContext, Status: OnlineDDLStatusRequested, }, nil } +// StrategySetting returns the ddl strategy setting associated with this online DDL +func (onlineDDL *OnlineDDL) StrategySetting() *DDLStrategySetting { + return NewDDLStrategySetting(onlineDDL.Strategy, onlineDDL.Options) +} + // RequestTimeSeconds converts request time to seconds (losing nano precision) func (onlineDDL *OnlineDDL) RequestTimeSeconds() int64 { return onlineDDL.RequestTime / int64(time.Second) @@ -250,47 +260,6 @@ func (onlineDDL *OnlineDDL) GetRevertUUID() (uuid string, err error) { return "", fmt.Errorf("Not a Revert DDL: '%s'", onlineDDL.SQL) } -// isFlag return true when the given string is a CLI flag of the given name -func isFlag(s string, name string) bool { - if s == fmt.Sprintf("-%s", name) { - return true - } - if s == fmt.Sprintf("--%s", name) { - return true - } - return false -} - -// hasFlag returns true when Options include named flag -func (onlineDDL *OnlineDDL) hasFlag(name string) bool { - opts, _ := shlex.Split(onlineDDL.Options) - for _, opt := range opts { - if isFlag(opt, name) { - return true - } - } - return false -} - -// IsDeclarative checks if strategy options include -declarative -func (onlineDDL *OnlineDDL) IsDeclarative() bool { - return onlineDDL.hasFlag(declarativeFlag) -} - -// RuntimeOptions returns the options used as runtime flags for given strategy, removing any internal hint options -func (onlineDDL *OnlineDDL) RuntimeOptions() []string { - opts, _ := shlex.Split(onlineDDL.Options) - validOpts := []string{} - for _, opt := range opts { - switch { - case isFlag(opt, declarativeFlag): - default: - validOpts = append(validOpts, opt) - } - } - return validOpts -} - // ToString returns a simple string representation of this instance func (onlineDDL *OnlineDDL) ToString() string { return fmt.Sprintf("OnlineDDL: keyspace=%s, table=%s, sql=%s", onlineDDL.Keyspace, onlineDDL.Table, onlineDDL.SQL) @@ -317,6 +286,12 @@ func (onlineDDL *OnlineDDL) GetGCUUID() string { return OnlineDDLToGCUUID(onlineDDL.UUID) } +// CreateOnlineDDLUUID creates a UUID in OnlineDDL format, e.g.: +// a0638f6b_ec7b_11ea_9bf8_000d3a9b8a9a +func CreateOnlineDDLUUID() (string, error) { + return createUUID("_") +} + // IsOnlineDDLUUID answers 'true' when the given string is an online-ddl UUID, e.g.: // a0638f6b_ec7b_11ea_9bf8_000d3a9b8a9a func IsOnlineDDLUUID(uuid string) bool { diff --git a/go/vt/schema/online_ddl_test.go b/go/vt/schema/online_ddl_test.go index 024bc953b02..c0d122caf28 100644 --- a/go/vt/schema/online_ddl_test.go +++ b/go/vt/schema/online_ddl_test.go @@ -30,95 +30,18 @@ func TestCreateUUID(t *testing.T) { assert.NoError(t, err) } -func TestIsDirect(t *testing.T) { - assert.True(t, DDLStrategyDirect.IsDirect()) - assert.False(t, DDLStrategyOnline.IsDirect()) - assert.False(t, DDLStrategyGhost.IsDirect()) - assert.False(t, DDLStrategyPTOSC.IsDirect()) - assert.True(t, DDLStrategy("").IsDirect()) - assert.False(t, DDLStrategy("gh-ost").IsDirect()) - assert.False(t, DDLStrategy("pt-osc").IsDirect()) - assert.True(t, DDLStrategy("something").IsDirect()) -} - -func TestParseDDLStrategy(t *testing.T) { - tt := []struct { - strategyVariable string - strategy DDLStrategy - options string - isDeclarative bool - runtimeOptions string - err error - }{ - { - strategyVariable: "direct", - strategy: DDLStrategyDirect, - }, - { - strategyVariable: "online", - strategy: DDLStrategyOnline, - }, - { - strategyVariable: "gh-ost", - strategy: DDLStrategyGhost, - }, - { - strategyVariable: "pt-osc", - strategy: DDLStrategyPTOSC, - }, - { - strategy: DDLStrategyDirect, - }, - { - strategyVariable: "gh-ost --max-load=Threads_running=100 --allow-master", - strategy: DDLStrategyGhost, - options: "--max-load=Threads_running=100 --allow-master", - runtimeOptions: "--max-load=Threads_running=100 --allow-master", - }, - { - strategyVariable: "gh-ost --max-load=Threads_running=100 -declarative", - strategy: DDLStrategyGhost, - options: "--max-load=Threads_running=100 -declarative", - runtimeOptions: "--max-load=Threads_running=100", - isDeclarative: true, - }, - { - strategyVariable: "gh-ost --declarative --max-load=Threads_running=100", - strategy: DDLStrategyGhost, - options: "--declarative --max-load=Threads_running=100", - runtimeOptions: "--max-load=Threads_running=100", - isDeclarative: true, - }, - } - for _, ts := range tt { - strategy, options, err := ParseDDLStrategy(ts.strategyVariable) - assert.NoError(t, err) - assert.Equal(t, ts.strategy, strategy) - assert.Equal(t, ts.options, options) - onlineDDL := &OnlineDDL{Options: options} - assert.Equal(t, ts.isDeclarative, onlineDDL.IsDeclarative()) - - runtimeOptions := strings.Join(onlineDDL.RuntimeOptions(), " ") - assert.Equal(t, ts.runtimeOptions, runtimeOptions) - } - { - _, _, err := ParseDDLStrategy("other") - assert.Error(t, err) - } -} - func TestIsOnlineDDLUUID(t *testing.T) { for i := 0; i < 20; i++ { - uuid, err := createUUID("_") + uuid, err := CreateOnlineDDLUUID() assert.NoError(t, err) assert.True(t, IsOnlineDDLUUID(uuid)) } tt := []string{ - "a0638f6b_ec7b_11ea_9bf8_000d3a9b8a9a_", - "_a0638f6b_ec7b_11ea_9bf8_000d3a9b8a9a", - "a0638f6b_ec7b_11ea_9bf8_000d3a9b8a9z", - "a0638f6b-ec7b-11ea-9bf8-000d3a9b8a9a", - "a0638f6b_ec7b_11ea_9bf8_000d3a9b8a9", + "a0638f6b_ec7b_11ea_9bf8_000d3a9b8a9a_", // suffix invalid + "_a0638f6b_ec7b_11ea_9bf8_000d3a9b8a9a", // prefix invalid + "a0638f6b_ec7b_11ea_9bf8_000d3a9b8a9z", // "z" character invalid + "a0638f6b-ec7b-11ea-9bf8-000d3a9b8a9a", // dash invalid + "a0638f6b_ec7b_11ea_9bf8_000d3a9b8a9", // too short } for _, tc := range tt { assert.False(t, IsOnlineDDLUUID(tc)) @@ -129,7 +52,7 @@ func TestGetGCUUID(t *testing.T) { uuids := map[string]bool{} count := 20 for i := 0; i < count; i++ { - onlineDDL, err := NewOnlineDDL("ks", "tbl", "alter table t drop column c", DDLStrategyDirect, "", "") + onlineDDL, err := NewOnlineDDL("ks", "tbl", "alter table t drop column c", NewDDLStrategySetting(DDLStrategyDirect, ""), "") assert.NoError(t, err) gcUUID := onlineDDL.GetGCUUID() assert.True(t, IsGCUUID(gcUUID)) @@ -238,3 +161,100 @@ func TestGetRevertUUID(t *testing.T) { }) } } + +func TestNewOnlineDDL(t *testing.T) { + migrationContext := "354b-11eb-82cd-f875a4d24e90" + tt := []struct { + sql string + isError bool + }{ + { + sql: "drop table t", + }, + { + sql: "create table t (id int primary key)", + }, + { + sql: "alter table t engine=innodb", + }, + { + sql: "select id from t", + isError: true, + }, + } + for _, ts := range tt { + t.Run(ts.sql, func(t *testing.T) { + onlineDDL, err := NewOnlineDDL("test_ks", "t", ts.sql, NewDDLStrategySetting(DDLStrategyOnline, ""), migrationContext) + if ts.isError { + assert.Error(t, err) + } else { + assert.NoError(t, err) + // onlineDDL.SQL enriched with /*vt+ ... */ comment + assert.Contains(t, onlineDDL.SQL, onlineDDL.UUID) + assert.Contains(t, onlineDDL.SQL, migrationContext) + assert.Contains(t, onlineDDL.SQL, string(DDLStrategyOnline)) + } + }) + } +} + +func TestNewOnlineDDLs(t *testing.T) { + type expect struct { + sqls []string + notDDL bool + parseError bool + isError bool + } + tests := map[string]expect{ + "alter table t add column i int, drop column d": {sqls: []string{"alter table t add column i int, drop column d"}}, + "create table t (id int primary key)": {sqls: []string{"create table t (id int primary key)"}}, + "drop table t": {sqls: []string{"drop table t"}}, + "drop table if exists t": {sqls: []string{"drop table if exists t"}}, + "drop table t1, t2, t3": {sqls: []string{"drop table t1", "drop table t2", "drop table t3"}}, + "drop table if exists t1, t2, t3": {sqls: []string{"drop table if exists t1", "drop table if exists t2", "drop table if exists t3"}}, + "create index i_idx on t(id)": {sqls: []string{"alter table t add index i_idx (id)"}}, + "create index i_idx on t(name(12))": {sqls: []string{"alter table t add index i_idx (`name`(12))"}}, + "create index i_idx on t(id, `ts`, name(12))": {sqls: []string{"alter table t add index i_idx (id, ts, `name`(12))"}}, + "create unique index i_idx on t(id)": {sqls: []string{"alter table t add unique index i_idx (id)"}}, + "create index i_idx using btree on t(id)": {sqls: []string{"alter table t add index i_idx (id) using btree"}}, + "create index with syntax error i_idx on t(id)": {parseError: true}, + "select * from t": {notDDL: true}, + "drop database t": {notDDL: true}, + "truncate table t": {isError: true}, + "drop view t": {isError: true}, + "rename table t to t1": {isError: true}, + } + migrationContext := "354b-11eb-82cd-f875a4d24e90" + for query, expect := range tests { + t.Run(query, func(t *testing.T) { + stmt, err := sqlparser.Parse(query) + if expect.parseError { + assert.Error(t, err) + return + } + assert.NoError(t, err) + ddlStmt, ok := stmt.(sqlparser.DDLStatement) + if expect.notDDL { + assert.False(t, ok) + return + } + assert.True(t, ok) + + onlineDDLs, err := NewOnlineDDLs("test_ks", ddlStmt, NewDDLStrategySetting(DDLStrategyOnline, ""), migrationContext) + if expect.isError { + assert.Error(t, err) + return + } + assert.NoError(t, err) + + sqls := []string{} + for _, onlineDDL := range onlineDDLs { + sql := onlineDDL.SQL + sql = strings.ReplaceAll(sql, "\n", "") + sql = strings.ReplaceAll(sql, "\t", "") + sqls = append(sqls, sql) + } + assert.Equal(t, expect.sqls, sqls) + }) + } +} diff --git a/go/vt/schema/parser.go b/go/vt/schema/parser.go index 2708715da32..647cbeaf187 100644 --- a/go/vt/schema/parser.go +++ b/go/vt/schema/parser.go @@ -87,25 +87,3 @@ func ParseAlterTableOptions(alterStatement string) (explicitSchema, explicitTabl } return explicitSchema, explicitTable, alterOptions } - -// NormalizeOnlineDDL normalizes a given query for OnlineDDL, possibly exploding it into multiple distinct queries -func NormalizeOnlineDDL(sql string) (normalized []*NormalizedDDLQuery, err error) { - ddlStmt, action, err := ParseOnlineDDLStatement(sql) - if err != nil { - return normalized, err - } - switch action { - case sqlparser.DropDDLAction: - tables := ddlStmt.GetFromTables() - for _, table := range tables { - ddlStmt.SetFromTables([]sqlparser.TableName{table}) - normalized = append(normalized, &NormalizedDDLQuery{SQL: sqlparser.String(ddlStmt), TableName: table}) - } - return normalized, nil - } - if ddlStmt.IsFullyParsed() { - sql = sqlparser.String(ddlStmt) - } - n := &NormalizedDDLQuery{SQL: sql, TableName: ddlStmt.GetTable()} - return []*NormalizedDDLQuery{n}, nil -} diff --git a/go/vt/schema/parser_test.go b/go/vt/schema/parser_test.go index 237d986bc78..e7ef88a6392 100644 --- a/go/vt/schema/parser_test.go +++ b/go/vt/schema/parser_test.go @@ -17,7 +17,6 @@ limitations under the License. package schema import ( - "strings" "testing" "github.com/stretchr/testify/assert" @@ -49,47 +48,6 @@ func TestParseAlterTableOptions(t *testing.T) { } } -func TestNormalizeOnlineDDL(t *testing.T) { - type expect struct { - sqls []string - isError bool - } - tests := map[string]expect{ - "alter table t add column i int, drop column d": {sqls: []string{"alter table t add column i int, drop column d"}}, - "create table t (id int primary key)": {sqls: []string{"create table t (id int primary key)"}}, - "drop table t": {sqls: []string{"drop table t"}}, - "drop table if exists t": {sqls: []string{"drop table if exists t"}}, - "drop table t1, t2, t3": {sqls: []string{"drop table t1", "drop table t2", "drop table t3"}}, - "drop table if exists t1, t2, t3": {sqls: []string{"drop table if exists t1", "drop table if exists t2", "drop table if exists t3"}}, - "create index i_idx on t(id)": {sqls: []string{"alter table t add index i_idx (id)"}}, - "create index i_idx on t(name(12))": {sqls: []string{"alter table t add index i_idx (`name`(12))"}}, - "create index i_idx on t(id, `ts`, name(12))": {sqls: []string{"alter table t add index i_idx (id, ts, `name`(12))"}}, - "create unique index i_idx on t(id)": {sqls: []string{"alter table t add unique index i_idx (id)"}}, - "create index i_idx using btree on t(id)": {sqls: []string{"alter table t add index i_idx (id) using btree"}}, - "create index with syntax error i_idx on t(id)": {isError: true}, - "select * from t": {isError: true}, - "drop database t": {isError: true}, - } - for query, expect := range tests { - t.Run(query, func(t *testing.T) { - normalized, err := NormalizeOnlineDDL(query) - if expect.isError { - assert.Error(t, err) - } else { - assert.NoError(t, err) - sqls := []string{} - for _, n := range normalized { - sql := n.SQL - sql = strings.ReplaceAll(sql, "\n", "") - sql = strings.ReplaceAll(sql, "\t", "") - sqls = append(sqls, sql) - } - assert.Equal(t, expect.sqls, sqls) - } - }) - } -} - func TestReplaceTableNameInCreateTableStatement(t *testing.T) { replacementTableName := `my_table` tt := []struct { From 552b50add01b208e3122bfdc5917a175ab5d3f39 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 10:28:33 +0300 Subject: [PATCH 07/64] TabletExecutor utilizes DDLStrategySetting, now more DRY and more formal; also uses NewOnlineDDLs to break down queries Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schemamanager/tablet_executor.go | 51 ++++++++++----------- go/vt/schemamanager/tablet_executor_test.go | 6 +-- 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/go/vt/schemamanager/tablet_executor.go b/go/vt/schemamanager/tablet_executor.go index 9c43416f2b7..d84faad31a1 100644 --- a/go/vt/schemamanager/tablet_executor.go +++ b/go/vt/schemamanager/tablet_executor.go @@ -41,7 +41,7 @@ type TabletExecutor struct { allowBigSchemaChange bool keyspace string waitReplicasTimeout time.Duration - ddlStrategy string + ddlStrategySetting *schema.DDLStrategySetting skipPreflight bool } @@ -70,10 +70,11 @@ func (exec *TabletExecutor) DisallowBigSchemaChange() { // SetDDLStrategy applies ddl_strategy from command line flags func (exec *TabletExecutor) SetDDLStrategy(ddlStrategy string) error { - if _, _, err := schema.ParseDDLStrategy(ddlStrategy); err != nil { + ddlStrategySetting, err := schema.ParseDDLStrategy(ddlStrategy) + if err != nil { return err } - exec.ddlStrategy = ddlStrategy + exec.ddlStrategySetting = ddlStrategySetting return nil } @@ -159,20 +160,19 @@ func (exec *TabletExecutor) parseDDLs(sqls []string) ([]sqlparser.DDLStatement, } // IsOnlineSchemaDDL returns true if we expect to run a online schema change DDL -func (exec *TabletExecutor) isOnlineSchemaDDL(ddlStmt sqlparser.DDLStatement) (isOnline bool, strategy schema.DDLStrategy, options string) { +func (exec *TabletExecutor) isOnlineSchemaDDL(ddlStmt sqlparser.DDLStatement) (isOnline bool) { switch ddlStmt.GetAction() { case sqlparser.CreateDDLAction, sqlparser.DropDDLAction, sqlparser.AlterDDLAction: default: - return false, strategy, options + return false } - strategy, options, err := schema.ParseDDLStrategy(exec.ddlStrategy) - if err != nil { - return false, strategy, options + if exec.ddlStrategySetting == nil { + return false } - if strategy.IsDirect() { - return false, strategy, options + if exec.ddlStrategySetting.Strategy.IsDirect() { + return false } - return true, strategy, options + return true } // a schema change that satisfies any following condition is considered @@ -194,7 +194,7 @@ func (exec *TabletExecutor) detectBigSchemaChanges(ctx context.Context, parsedDD tableWithCount[tableSchema.Name] = tableSchema.RowCount } for _, ddl := range parsedDDLs { - if isOnline, _, _ := exec.isOnlineSchemaDDL(ddl); isOnline { + if exec.isOnlineSchemaDDL(ddl) { // Since this is an online schema change, there is no need to worry about big changes continue } @@ -228,20 +228,23 @@ func (exec *TabletExecutor) preflightSchemaChanges(ctx context.Context, sqls []s // executeSQL executes a single SQL statement either as online DDL or synchronously on all tablets. // In online DDL case, the query may be exploded into multiple queries during func (exec *TabletExecutor) executeSQL(ctx context.Context, sql string, execResult *ExecuteResult) error { - stat, err := sqlparser.Parse(sql) + stmt, err := sqlparser.Parse(sql) if err != nil { return err } - switch stat := stat.(type) { + switch stmt := stmt.(type) { case sqlparser.DDLStatement: - if isOnlineDDL, strategy, options := exec.isOnlineSchemaDDL(stat); isOnlineDDL { - exec.wr.Logger().Infof("Received DDL request. strategy=%+v", strategy) - normalizedQueries, err := schema.NormalizeOnlineDDL(sql) + if exec.isOnlineSchemaDDL(stmt) { + + onlineDDLs, err := schema.NewOnlineDDLs(exec.keyspace, stmt, exec.ddlStrategySetting, exec.requestContext) if err != nil { + execResult.ExecutorErr = err.Error() return err } - for _, normalized := range normalizedQueries { - exec.executeOnlineDDL(ctx, execResult, normalized.SQL, normalized.TableName.Name.String(), strategy, options) + + exec.wr.Logger().Infof("Received DDL request. strategy settings=%+v", exec.ddlStrategySetting) + for _, onlineDDL := range onlineDDLs { + exec.executeOnlineDDL(ctx, execResult, onlineDDL) } return nil } @@ -300,18 +303,12 @@ func (exec *TabletExecutor) Execute(ctx context.Context, sqls []string) *Execute // executeOnlineDDL submits an online DDL request; this runs on topo, not on tablets, and is a quick operation. func (exec *TabletExecutor) executeOnlineDDL( - ctx context.Context, execResult *ExecuteResult, sql string, - tableName string, strategy schema.DDLStrategy, options string, + ctx context.Context, execResult *ExecuteResult, onlineDDL *schema.OnlineDDL, ) { - if strategy.IsDirect() { + if exec.ddlStrategySetting == nil || exec.ddlStrategySetting.Strategy.IsDirect() { execResult.ExecutorErr = "Not an online DDL strategy" return } - onlineDDL, err := schema.NewOnlineDDL(exec.keyspace, tableName, sql, strategy, options, exec.requestContext) - if err != nil { - execResult.ExecutorErr = err.Error() - return - } conn, err := exec.wr.TopoServer().ConnForCell(ctx, topo.GlobalCell) if err != nil { execResult.ExecutorErr = fmt.Sprintf("online DDL ConnForCell error:%s", err.Error()) diff --git a/go/vt/schemamanager/tablet_executor_test.go b/go/vt/schemamanager/tablet_executor_test.go index ab6c1f16e83..cfee0bed56c 100644 --- a/go/vt/schemamanager/tablet_executor_test.go +++ b/go/vt/schemamanager/tablet_executor_test.go @@ -291,11 +291,11 @@ func TestIsOnlineSchemaDDL(t *testing.T) { ddlStmt, ok := stmt.(sqlparser.DDLStatement) assert.True(t, ok) - isOnlineDDL, strategy, options := e.isOnlineSchemaDDL(ddlStmt) + isOnlineDDL := e.isOnlineSchemaDDL(ddlStmt) assert.Equal(t, ts.isOnlineDDL, isOnlineDDL) if isOnlineDDL { - assert.Equal(t, ts.strategy, strategy) - assert.Equal(t, ts.options, options) + assert.Equal(t, ts.strategy, e.ddlStrategySetting.Strategy) + assert.Equal(t, ts.options, e.ddlStrategySetting.Options) } } } From 6df2060f2a735d46448a099d277fb52409b6e8b4 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 10:29:11 +0300 Subject: [PATCH 08/64] vtctl utilizes new DDLStrategySetting Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vtctl/vtctl.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 3d39dffb5e9..8a9ceb55c36 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -2930,7 +2930,8 @@ func commandOnlineDDL(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag } requestContext := fmt.Sprintf("vtctl:%s", contextUUID) - onlineDDL, err := schema.NewOnlineDDL(keyspace, "", fmt.Sprintf("revert %s", uuid), schema.DDLStrategyOnline, "", requestContext) + ddlStrategySetting := schema.NewDDLStrategySetting(schema.DDLStrategyOnline, "") + onlineDDL, err := schema.NewOnlineDDL(keyspace, "", fmt.Sprintf("revert %s", uuid), ddlStrategySetting, requestContext) if err != nil { return err } From 8fd62220927da505949ed34981c46151ca635882 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 10:31:21 +0300 Subject: [PATCH 09/64] onlineddl.Executor utilizes new DDLStrategySetting. Also, it ensures to clean up VT comments from query Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vttablet/onlineddl/executor.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/go/vt/vttablet/onlineddl/executor.go b/go/vt/vttablet/onlineddl/executor.go index a6135e1d882..c10d23f40e7 100644 --- a/go/vt/vttablet/onlineddl/executor.go +++ b/go/vt/vttablet/onlineddl/executor.go @@ -874,7 +874,7 @@ curl -s 'http://localhost:%d/schema-migration/report-status?uuid=%s&status=%s&dr fmt.Sprintf(`--panic-flag-file=%s`, e.ghostPanicFlagFileName(onlineDDL.UUID)), fmt.Sprintf(`--execute=%t`, execute), } - args = append(args, onlineDDL.RuntimeOptions()...) + args = append(args, onlineDDL.StrategySetting().RuntimeOptions()...) _, err := execCmd("bash", args, os.Environ(), "/tmp", nil, nil) return err } @@ -1096,7 +1096,7 @@ export MYSQL_PWD `--no-drop-old-table`, ) } - args = append(args, onlineDDL.RuntimeOptions()...) + args = append(args, onlineDDL.StrategySetting().RuntimeOptions()...) _, err = execCmd("bash", args, os.Environ(), "/tmp", nil, nil) return err } @@ -1634,7 +1634,7 @@ func (e *Executor) executeMigration(ctx context.Context, onlineDDL *schema.Onlin return failMigration(err) } - if onlineDDL.IsDeclarative() { + if onlineDDL.StrategySetting().IsDeclarative() { switch ddlAction { case sqlparser.RevertDDLAction: // No special action. Declarative Revert migrations are handled like any normal Revert migration. @@ -1865,6 +1865,14 @@ func (e *Executor) runNextMigration(ctx context.Context) error { Options: row["options"].ToString(), Status: schema.OnlineDDLStatus(row["migration_status"].ToString()), } + // We strip out any VT query comments because our simplified parser doesn't work well with comments + ddlStmt, _, err := schema.ParseOnlineDDLStatement(onlineDDL.SQL) + if err != nil { + return err + } + ddlStmt.SetComments(sqlparser.Comments{}) + onlineDDL.SQL = sqlparser.String(ddlStmt) + e.executeMigration(ctx, onlineDDL) // the query should only ever return a single row at the most // but let's make it also explicit here that we only run a single migration From 6d4db178eee810e85ff99ee224a272e018acf409 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 10:34:41 +0300 Subject: [PATCH 10/64] endtoend tests adapt to new DDLStrategySetting Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- .../onlineddl/declarative/onlineddl_declarative_test.go | 4 ++-- go/test/endtoend/onlineddl/ghost/onlineddl_ghost_test.go | 4 ++-- go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go | 4 ++-- go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go | 4 ++-- .../vrepl_stress/onlineddl_vrepl_mini_stress_test.go | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/go/test/endtoend/onlineddl/declarative/onlineddl_declarative_test.go b/go/test/endtoend/onlineddl/declarative/onlineddl_declarative_test.go index dd37ba18cee..3ac09e84687 100644 --- a/go/test/endtoend/onlineddl/declarative/onlineddl_declarative_test.go +++ b/go/test/endtoend/onlineddl/declarative/onlineddl_declarative_test.go @@ -422,10 +422,10 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str fmt.Println("# Generated UUID (for debug purposes):") fmt.Printf("<%s>\n", uuid) - strategy, _, err := schema.ParseDDLStrategy(ddlStrategy) + strategySetting, err := schema.ParseDDLStrategy(ddlStrategy) assert.NoError(t, err) - if !strategy.IsDirect() { + if !strategySetting.Strategy.IsDirect() { time.Sleep(time.Second * 20) } diff --git a/go/test/endtoend/onlineddl/ghost/onlineddl_ghost_test.go b/go/test/endtoend/onlineddl/ghost/onlineddl_ghost_test.go index 67fd294d700..bd6c8f14a27 100644 --- a/go/test/endtoend/onlineddl/ghost/onlineddl_ghost_test.go +++ b/go/test/endtoend/onlineddl/ghost/onlineddl_ghost_test.go @@ -316,9 +316,9 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str fmt.Println("# Generated UUID (for debug purposes):") fmt.Printf("<%s>\n", uuid) - strategy, _, err := schema.ParseDDLStrategy(ddlStrategy) + strategySetting, err := schema.ParseDDLStrategy(ddlStrategy) assert.NoError(t, err) - if !strategy.IsDirect() { + if !strategySetting.Strategy.IsDirect() { time.Sleep(time.Second * 20) } diff --git a/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go b/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go index d5c0ddaa98c..53490f8a4a8 100644 --- a/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go +++ b/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go @@ -476,10 +476,10 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str fmt.Println("# Generated UUID (for debug purposes):") fmt.Printf("<%s>\n", uuid) - strategy, _, err := schema.ParseDDLStrategy(ddlStrategy) + strategySetting, err := schema.ParseDDLStrategy(ddlStrategy) assert.NoError(t, err) - if !strategy.IsDirect() { + if !strategySetting.Strategy.IsDirect() { time.Sleep(time.Second * 20) } diff --git a/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go b/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go index 7971a128b75..21319dfa65b 100644 --- a/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go +++ b/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go @@ -401,10 +401,10 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str fmt.Println("# Generated UUID (for debug purposes):") fmt.Printf("<%s>\n", uuid) - strategy, _, err := schema.ParseDDLStrategy(ddlStrategy) + strategySetting, err := schema.ParseDDLStrategy(ddlStrategy) assert.NoError(t, err) - if !strategy.IsDirect() { + if !strategySetting.Strategy.IsDirect() { time.Sleep(time.Second * 20) } diff --git a/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go b/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go index 1189619e2d4..dd7d332b791 100644 --- a/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go +++ b/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go @@ -300,10 +300,10 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str fmt.Println("# Generated UUID (for debug purposes):") fmt.Printf("<%s>\n", uuid) - strategy, _, err := schema.ParseDDLStrategy(ddlStrategy) + strategySetting, err := schema.ParseDDLStrategy(ddlStrategy) assert.NoError(t, err) - if !strategy.IsDirect() { + if !strategySetting.Strategy.IsDirect() { time.Sleep(time.Second * 20) } From 852e9a7f3ba93ed85714a90bdc4133ffad3265eb Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 10:35:22 +0300 Subject: [PATCH 11/64] go.sum Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go.sum | 1 + 1 file changed, 1 insertion(+) diff --git a/go.sum b/go.sum index b51f497094b..0c54c07b428 100644 --- a/go.sum +++ b/go.sum @@ -669,6 +669,7 @@ github.com/spyzhov/ajson v0.4.2 h1:JMByd/jZApPKDvNsmO90X2WWGbmT2ahDFp73QhZbg3s= github.com/spyzhov/ajson v0.4.2/go.mod h1:63V+CGM6f1Bu/p4nLIN8885ojBdt88TbLoSFzyqMuVA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= From 63fac67d878799b0aa0c6502c44e8fc66bec9847 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 10:52:48 +0300 Subject: [PATCH 12/64] utilizing DDLStrategySetting to validate @@ddl_strategy Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vtgate/vtgate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/vt/vtgate/vtgate.go b/go/vt/vtgate/vtgate.go index 37c4650cc9a..50a7609958b 100644 --- a/go/vt/vtgate/vtgate.go +++ b/go/vt/vtgate/vtgate.go @@ -179,7 +179,7 @@ func Init(ctx context.Context, serv srvtopo.Server, cell string, tabletTypesToWa } } - if _, _, err := schema.ParseDDLStrategy(*defaultDDLStrategy); err != nil { + if _, err := schema.ParseDDLStrategy(*defaultDDLStrategy); err != nil { log.Fatalf("Invalid value for -ddl_strategy: %v", err.Error()) } tc := NewTxConn(gw, getTxMode()) From 7124709a72a9e328e5e7cb05201dbb9ff5048d94 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 10:53:30 +0300 Subject: [PATCH 13/64] adapt to DDLStrategySetting Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vtgate/engine/revert_migration.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/go/vt/vtgate/engine/revert_migration.go b/go/vt/vtgate/engine/revert_migration.go index a2facc7c201..781cb372181 100644 --- a/go/vt/vtgate/engine/revert_migration.go +++ b/go/vt/vtgate/engine/revert_migration.go @@ -70,7 +70,8 @@ func (v *RevertMigration) GetTableName() string { // Execute implements the Primitive interface func (v *RevertMigration) Execute(vcursor VCursor, bindVars map[string]*query.BindVariable, wantfields bool) (result *sqltypes.Result, err error) { sql := fmt.Sprintf("revert %s", v.Stmt.UUID) - onlineDDL, err := schema.NewOnlineDDL(v.GetKeyspaceName(), "", sql, schema.DDLStrategyOnline, "", fmt.Sprintf("vtgate:%s", vcursor.Session().GetSessionUUID())) + ddlStrategySetting := schema.NewDDLStrategySetting(schema.DDLStrategyOnline, "") + onlineDDL, err := schema.NewOnlineDDL(v.GetKeyspaceName(), "", sql, ddlStrategySetting, fmt.Sprintf("vtgate:%s", vcursor.Session().GetSessionUUID())) if err != nil { return result, err } From 1e4ace270f7b06e1985d35293dae0f8254005619 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 10:53:43 +0300 Subject: [PATCH 14/64] adapt to DDLStrategySetting Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vtgate/engine/set.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/vt/vtgate/engine/set.go b/go/vt/vtgate/engine/set.go index 51ee9934b9d..33112c37d01 100644 --- a/go/vt/vtgate/engine/set.go +++ b/go/vt/vtgate/engine/set.go @@ -404,7 +404,7 @@ func (svss *SysVarSetAware) Execute(vcursor VCursor, env evalengine.ExpressionEn if err != nil { return err } - if _, _, err := schema.ParseDDLStrategy(str); err != nil { + if _, err := schema.ParseDDLStrategy(str); err != nil { return vterrors.NewErrorf(vtrpcpb.Code_INVALID_ARGUMENT, vterrors.WrongValueForVar, "invalid DDL strategy: %s", str) } vcursor.Session().SetDDLStrategy(str) From dfe69b0cb4f918741a2e217c0adf0339e7fca43f Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 10:55:33 +0300 Subject: [PATCH 15/64] OnlineDDL engine can choose to use Send to pus online DDL statements, instead of writing them to topo. It utilizes new DDLStrategySetting, and uses samd TaretDestination as non-online DDL engine. Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vtgate/engine/cached_size.go | 12 +++--- go/vt/vtgate/engine/ddl.go | 7 ++-- go/vt/vtgate/engine/online_ddl.go | 61 ++++++++++++++++++------------ go/vt/vtgate/planbuilder/ddl.go | 14 +++---- 4 files changed, 54 insertions(+), 40 deletions(-) diff --git a/go/vt/vtgate/engine/cached_size.go b/go/vt/vtgate/engine/cached_size.go index 07139186e29..9f85fc6e5a3 100644 --- a/go/vt/vtgate/engine/cached_size.go +++ b/go/vt/vtgate/engine/cached_size.go @@ -344,7 +344,7 @@ func (cached *OnlineDDL) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(72) + size += int64(64) } // field Keyspace *vitess.io/vitess/go/vt/vtgate/vindexes.Keyspace size += cached.Keyspace.CachedSize(true) @@ -354,10 +354,12 @@ func (cached *OnlineDDL) CachedSize(alloc bool) int64 { } // field SQL string size += int64(len(cached.SQL)) - // field Strategy vitess.io/vitess/go/vt/schema.DDLStrategy - size += int64(len(cached.Strategy)) - // field Options string - size += int64(len(cached.Options)) + // field DDLStrategySetting *vitess.io/vitess/go/vt/schema.DDLStrategySetting + size += cached.DDLStrategySetting.CachedSize(true) + // field TargetDestination vitess.io/vitess/go/vt/key.Destination + if cc, ok := cached.TargetDestination.(cachedObject); ok { + size += cc.CachedSize(true) + } return size } func (cached *OrderedAggregate) CachedSize(alloc bool) int64 { diff --git a/go/vt/vtgate/engine/ddl.go b/go/vt/vtgate/engine/ddl.go index 26b3e305b70..059240f1ccc 100644 --- a/go/vt/vtgate/engine/ddl.go +++ b/go/vt/vtgate/engine/ddl.go @@ -77,7 +77,7 @@ func (ddl *DDL) GetTableName() string { func (ddl *DDL) isOnlineSchemaDDL() bool { switch ddl.DDL.GetAction() { case sqlparser.CreateDDLAction, sqlparser.DropDDLAction, sqlparser.AlterDDLAction: - return !ddl.OnlineDDL.Strategy.IsDirect() + return !ddl.OnlineDDL.DDLStrategySetting.Strategy.IsDirect() } return false } @@ -90,12 +90,11 @@ func (ddl *DDL) Execute(vcursor VCursor, bindVars map[string]*query.BindVariable return ddl.NormalDDL.Execute(vcursor, bindVars, wantfields) } - strategy, options, err := schema.ParseDDLStrategy(vcursor.Session().GetDDLStrategy()) + ddlStrategySetting, err := schema.ParseDDLStrategy(vcursor.Session().GetDDLStrategy()) if err != nil { return nil, err } - ddl.OnlineDDL.Strategy = strategy - ddl.OnlineDDL.Options = options + ddl.OnlineDDL.DDLStrategySetting = ddlStrategySetting if ddl.isOnlineSchemaDDL() { return ddl.OnlineDDL.Execute(vcursor, bindVars, wantfields) diff --git a/go/vt/vtgate/engine/online_ddl.go b/go/vt/vtgate/engine/online_ddl.go index eec5755ba06..9bb4b45702f 100644 --- a/go/vt/vtgate/engine/online_ddl.go +++ b/go/vt/vtgate/engine/online_ddl.go @@ -20,6 +20,7 @@ import ( "fmt" "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/vt/key" "vitess.io/vitess/go/vt/proto/query" querypb "vitess.io/vitess/go/vt/proto/query" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" @@ -33,11 +34,12 @@ var _ Primitive = (*OnlineDDL)(nil) // OnlineDDL represents the instructions to perform an online schema change via vtctld type OnlineDDL struct { - Keyspace *vindexes.Keyspace - DDL sqlparser.DDLStatement - SQL string - Strategy schema.DDLStrategy - Options string + Keyspace *vindexes.Keyspace + DDL sqlparser.DDLStatement + SQL string + DDLStrategySetting *schema.DDLStrategySetting + // TargetDestination specifies an explicit target destination to send the query to. + TargetDestination key.Destination noTxNeeded @@ -71,24 +73,6 @@ func (v *OnlineDDL) GetTableName() string { // Execute implements the Primitive interface func (v *OnlineDDL) Execute(vcursor VCursor, bindVars map[string]*query.BindVariable, wantfields bool) (result *sqltypes.Result, err error) { - normalizedQueries, err := schema.NormalizeOnlineDDL(v.SQL) - if err != nil { - return result, err - } - rows := [][]sqltypes.Value{} - for _, normalized := range normalizedQueries { - onlineDDL, err := schema.NewOnlineDDL(v.GetKeyspaceName(), normalized.TableName.Name.String(), normalized.SQL, v.Strategy, v.Options, fmt.Sprintf("vtgate:%s", vcursor.Session().GetSessionUUID())) - if err != nil { - return result, err - } - err = vcursor.SubmitOnlineDDL(onlineDDL) - if err != nil { - return result, err - } - rows = append(rows, []sqltypes.Value{ - sqltypes.NewVarChar(onlineDDL.UUID), - }) - } result = &sqltypes.Result{ Fields: []*querypb.Field{ { @@ -96,7 +80,36 @@ func (v *OnlineDDL) Execute(vcursor VCursor, bindVars map[string]*query.BindVari Type: sqltypes.VarChar, }, }, - Rows: rows, + Rows: [][]sqltypes.Value{}, + } + onlineDDLs, err := schema.NewOnlineDDLs(v.GetKeyspaceName(), v.DDL, + v.DDLStrategySetting, fmt.Sprintf("vtgate:%s", vcursor.Session().GetSessionUUID()), + ) + if err != nil { + return result, err + } + for _, onlineDDL := range onlineDDLs { + if onlineDDL.StrategySetting().IsSkipTopo() { + // Go directly to tablets, much like Send primitive does + s := Send{ + Keyspace: v.Keyspace, + TargetDestination: v.TargetDestination, + Query: onlineDDL.SQL, + IsDML: false, + SingleShardOnly: false, + } + if _, err := s.Execute(vcursor, bindVars, wantfields); err != nil { + return result, err + } + } else { + // Submit a request entry in topo. vtctld will take it from there + if err := vcursor.SubmitOnlineDDL(onlineDDL); err != nil { + return result, err + } + } + result.Rows = append(result.Rows, []sqltypes.Value{ + sqltypes.NewVarChar(onlineDDL.UUID), + }) } return result, err } diff --git a/go/vt/vtgate/planbuilder/ddl.go b/go/vt/vtgate/planbuilder/ddl.go index be3c6bb4b74..1801c4786dd 100644 --- a/go/vt/vtgate/planbuilder/ddl.go +++ b/go/vt/vtgate/planbuilder/ddl.go @@ -1,13 +1,12 @@ package planbuilder import ( - vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" - "vitess.io/vitess/go/vt/vterrors" - "vitess.io/vitess/go/vt/vtgate/vindexes" - "vitess.io/vitess/go/vt/key" + vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vtgate/engine" + "vitess.io/vitess/go/vt/vtgate/vindexes" ) // Error messages for CreateView queries @@ -110,9 +109,10 @@ func buildDDLPlans(sql string, ddlStatement sqlparser.DDLStatement, reservedVars IsDML: false, SingleShardOnly: false, }, &engine.OnlineDDL{ - Keyspace: keyspace, - DDL: ddlStatement, - SQL: query, + Keyspace: keyspace, + TargetDestination: destination, + DDL: ddlStatement, + SQL: query, }, nil } From 9c604036879ce41756efa171bd97eb6893409a9e Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 13:16:50 +0300 Subject: [PATCH 16/64] REVERT supports comment_opt Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/sqlparser/ast.go | 3 +- go/vt/sqlparser/ast_clone.go | 1 + go/vt/sqlparser/ast_equals.go | 3 +- go/vt/sqlparser/ast_rewrite.go | 13 +- go/vt/sqlparser/ast_visit.go | 3 + go/vt/sqlparser/cached_size.go | 9 +- go/vt/sqlparser/sql.go | 2795 ++++++++++++++++---------------- go/vt/sqlparser/sql.y | 4 +- 8 files changed, 1427 insertions(+), 1404 deletions(-) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 2d4f566479c..effdfa8f47a 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -412,7 +412,8 @@ type ( // RevertMigration represents a REVERT VITESS_MIGRATION statement RevertMigration struct { - UUID string + UUID string + Comments Comments } // AlterMigrationType represents the type of operation in an ALTER VITESS_MIGRATION statement diff --git a/go/vt/sqlparser/ast_clone.go b/go/vt/sqlparser/ast_clone.go index 5e117628922..948140af1b3 100644 --- a/go/vt/sqlparser/ast_clone.go +++ b/go/vt/sqlparser/ast_clone.go @@ -1296,6 +1296,7 @@ func CloneRefOfRevertMigration(n *RevertMigration) *RevertMigration { return nil } out := *n + out.Comments = CloneComments(n.Comments) return &out } diff --git a/go/vt/sqlparser/ast_equals.go b/go/vt/sqlparser/ast_equals.go index 4fba1195e51..f2441b3b660 100644 --- a/go/vt/sqlparser/ast_equals.go +++ b/go/vt/sqlparser/ast_equals.go @@ -2095,7 +2095,8 @@ func EqualsRefOfRevertMigration(a, b *RevertMigration) bool { if a == nil || b == nil { return false } - return a.UUID == b.UUID + return a.UUID == b.UUID && + EqualsComments(a.Comments, b.Comments) } // EqualsRefOfRollback does deep equals between the two objects. diff --git a/go/vt/sqlparser/ast_rewrite.go b/go/vt/sqlparser/ast_rewrite.go index 15c46feba7d..8a1b1abaf53 100644 --- a/go/vt/sqlparser/ast_rewrite.go +++ b/go/vt/sqlparser/ast_rewrite.go @@ -3205,12 +3205,15 @@ func (a *application) rewriteRefOfRevertMigration(parent SQLNode, node *RevertMi return true } } + if !a.rewriteComments(node, node.Comments, func(newNode, parent SQLNode) { + parent.(*RevertMigration).Comments = newNode.(Comments) + }) { + return false + } if a.post != nil { - if a.pre == nil { - a.cur.replacer = replacer - a.cur.parent = parent - a.cur.node = node - } + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node if !a.post(&a.cur) { return false } diff --git a/go/vt/sqlparser/ast_visit.go b/go/vt/sqlparser/ast_visit.go index 3bc96521ace..ecc564b6509 100644 --- a/go/vt/sqlparser/ast_visit.go +++ b/go/vt/sqlparser/ast_visit.go @@ -1621,6 +1621,9 @@ func VisitRefOfRevertMigration(in *RevertMigration, f Visit) error { if cont, err := f(in); err != nil || !cont { return err } + if err := VisitComments(in.Comments, f); err != nil { + return err + } return nil } func VisitRefOfRollback(in *Rollback, f Visit) error { diff --git a/go/vt/sqlparser/cached_size.go b/go/vt/sqlparser/cached_size.go index 4e6009df211..71eb82467a1 100644 --- a/go/vt/sqlparser/cached_size.go +++ b/go/vt/sqlparser/cached_size.go @@ -1609,10 +1609,17 @@ func (cached *RevertMigration) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(16) + size += int64(40) } // field UUID string size += int64(len(cached.UUID)) + // field Comments vitess.io/vitess/go/vt/sqlparser.Comments + { + size += int64(cap(cached.Comments)) * int64(16) + for _, elem := range cached.Comments { + size += int64(len(elem)) + } + } return size } func (cached *SRollback) CachedSize(alloc bool) int64 { diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index d8baa5086dd..b05418857a6 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -1072,768 +1072,540 @@ var yyExca = [...]int{ -1, 1391, 150, 960, -2, 954, - -1, 1483, + -1, 1484, 74, 66, 82, 66, -2, 70, - -1, 1504, + -1, 1505, 1, 270, 474, 270, -2, 118, - -1, 1927, + -1, 1928, 5, 821, 18, 821, 20, 821, 32, 821, 83, 821, -2, 604, - -1, 2152, + -1, 2153, 46, 896, -2, 890, } const yyPrivate = 57344 -const yyLast = 27857 +const yyLast = 27922 var yyAct = [...]int{ - 561, 2244, 2231, 2077, 1984, 2179, 2153, 2102, 2192, 2130, - 1804, 83, 3, 1720, 533, 1907, 2074, 1687, 1428, 1501, - 2205, 1721, 1908, 519, 1904, 1784, 1157, 1569, 1001, 1847, - 502, 574, 1534, 1055, 1519, 1808, 1554, 1785, 919, 1048, - 1539, 504, 1786, 814, 137, 1480, 1919, 872, 1866, 165, - 1385, 1647, 165, 1291, 467, 165, 751, 1183, 1567, 123, - 483, 608, 165, 1377, 1600, 1707, 1778, 81, 1541, 1092, - 165, 1553, 899, 779, 1462, 1085, 1469, 1076, 1058, 1053, - 1430, 583, 1078, 506, 1040, 568, 1354, 1411, 1082, 937, - 1075, 1288, 483, 1190, 495, 483, 165, 483, 792, 782, - 1551, 1445, 1274, 759, 1530, 758, 780, 781, 755, 1388, - 785, 1091, 1485, 1201, 79, 1089, 1065, 917, 1296, 100, - 101, 140, 1520, 1014, 857, 490, 33, 8, 1152, 7, - 605, 1017, 78, 6, 1827, 1826, 1598, 1175, 1260, 106, - 1854, 1855, 107, 2104, 167, 168, 169, 1425, 1426, 1343, - 1342, 1341, 1340, 1339, 1338, 493, 2219, 494, 1331, 1685, - 2149, 1953, 762, 2053, 2126, 590, 594, 102, 752, 816, - 2125, 767, 2072, 819, 818, 2073, 442, 938, 817, 1637, - 2250, 2202, 830, 831, 108, 834, 835, 836, 837, 491, - 1546, 840, 841, 842, 843, 844, 845, 846, 847, 848, - 849, 850, 851, 852, 853, 854, 569, 602, 84, 796, - 795, 1544, 2243, 2174, 609, 2235, 80, 2078, 1586, 773, - 772, 102, 2201, 2173, 1883, 774, 2017, 1166, 1686, 820, - 821, 822, 1093, 35, 1094, 827, 72, 39, 40, 1934, - 1935, 1486, 1933, 948, 1853, 86, 87, 88, 89, 90, - 91, 1834, 1635, 97, 768, 1833, 162, 833, 1751, 437, - 906, 1750, 908, 832, 1752, 1496, 1497, 1495, 892, 1427, - 860, 885, 775, 471, 771, 915, 866, 867, 161, 546, - 891, 552, 553, 550, 551, 102, 549, 548, 547, 1803, - 565, 1543, 167, 168, 169, 564, 554, 555, 1768, 905, - 907, 879, 880, 103, 1513, 125, 1986, 2176, 71, 2008, - 771, 2006, 763, 481, 145, 1330, 485, 766, 479, 1280, - 765, 764, 936, 1332, 1333, 1334, 470, 167, 168, 169, - 1250, 769, 567, 1568, 856, 877, 1980, 1809, 944, 878, - 879, 880, 1830, 1606, 1981, 135, 1611, 1609, 1610, 1601, - 124, 938, 2242, 1275, 896, 897, 771, 855, 914, 894, - 895, 1414, 893, 912, 898, 886, 862, 769, 142, 1842, - 143, 1616, 1251, 471, 1252, 1177, 1178, 134, 133, 160, - 839, 2220, 1987, 838, 1605, 1988, 1603, 459, 471, 1613, - 2122, 1614, 2067, 1615, 1570, 803, 458, 1607, 1463, 801, - 812, 811, 904, 810, 809, 903, 909, 456, 808, 807, - 2251, 806, 805, 800, 776, 1169, 2068, 948, 813, 1289, - 859, 902, 1486, 2233, 756, 1604, 470, 129, 1179, 136, - 1846, 1176, 794, 130, 131, 1952, 770, 165, 146, 165, - 787, 470, 165, 596, 2248, 577, 453, 756, 151, 1552, - 756, 1843, 788, 1960, 754, 465, 1189, 1188, 1592, 1281, - 910, 1285, 924, 1545, 823, 1688, 1690, 471, 483, 483, - 483, 1829, 770, 889, 943, 940, 941, 942, 947, 949, - 946, 1892, 945, 794, 858, 1891, 483, 483, 804, 939, - 1890, 875, 802, 881, 882, 883, 884, 1832, 2172, 930, - 1164, 911, 471, 1163, 1162, 1819, 1636, 1286, 1160, 441, - 436, 2160, 944, 2037, 916, 1932, 829, 1588, 770, 1849, - 470, 2177, 794, 99, 1848, 1765, 1760, 1849, 1712, 443, - 445, 446, 1848, 462, 464, 472, 913, 986, 987, 460, - 461, 473, 447, 448, 477, 476, 463, 1655, 452, 449, - 451, 457, 794, 1666, 138, 470, 455, 474, 2193, 1578, - 794, 73, 1689, 1841, 1491, 165, 1840, 1663, 793, 1761, - 1262, 1261, 1263, 1264, 1265, 787, 790, 791, 1069, 756, - 999, 870, 1046, 784, 788, 984, 921, 922, 876, 1502, - 974, 1763, 2246, 483, 1758, 2247, 165, 2245, 165, 165, - 865, 483, 1045, 1747, 888, 1441, 1759, 483, 132, 868, - 964, 1326, 954, 974, 94, 933, 890, 931, 2168, 793, - 126, 932, 794, 127, 815, 2139, 963, 962, 972, 973, - 965, 966, 967, 968, 969, 970, 971, 964, 1917, 605, - 974, 1587, 1867, 1074, 900, 1297, 951, 1041, 943, 940, - 941, 942, 947, 949, 946, 1885, 945, 874, 793, 95, - 828, 1002, 954, 939, 1279, 1059, 1766, 1764, 1602, 1282, - 1016, 1019, 1021, 1023, 1024, 1026, 1028, 1029, 1095, 1020, - 1022, 475, 1025, 1027, 934, 1030, 1869, 861, 793, 1038, - 1057, 1412, 986, 987, 797, 787, 793, 1797, 1412, 468, - 1673, 1585, 797, 787, 798, 1583, 986, 987, 1349, 1351, - 1352, 803, 798, 499, 469, 167, 168, 169, 801, 1379, - 1350, 1361, 799, 609, 139, 144, 141, 147, 148, 149, - 150, 152, 153, 154, 155, 1359, 1360, 1358, 1580, 1937, - 156, 157, 158, 159, 1276, 2229, 1277, 1580, 1871, 1278, - 1875, 165, 1870, 1062, 1868, 1153, 2236, 2252, 793, 1873, - 901, 1298, 1584, 1443, 1161, 787, 790, 791, 1872, 756, - 873, 1582, 1090, 784, 788, 1380, 2052, 1762, 953, 951, - 1047, 1874, 1876, 483, 2237, 1185, 967, 968, 969, 970, - 971, 964, 783, 1194, 974, 954, 1661, 1198, 1269, 2051, - 483, 483, 595, 483, 1660, 483, 483, 2225, 483, 483, - 483, 483, 483, 483, 952, 953, 951, 1958, 1167, 1168, - 167, 168, 169, 483, 1773, 2253, 1442, 165, 1234, 952, - 953, 951, 954, 71, 1782, 2226, 1894, 1195, 1174, 1181, - 952, 953, 951, 1247, 2140, 1357, 1781, 954, 1887, 1783, - 1193, 952, 953, 951, 483, 2228, 165, 1268, 954, 1640, - 1641, 1642, 1229, 1230, 600, 1549, 1270, 1287, 1255, 954, - 1254, 165, 1253, 952, 953, 951, 1237, 1238, 1245, 1231, - 1774, 1239, 1243, 1244, 1895, 1192, 1159, 165, 1236, 1191, - 1191, 954, 597, 598, 165, 167, 168, 169, 1235, 1754, - 2227, 165, 165, 165, 165, 165, 165, 165, 165, 165, - 483, 483, 483, 1184, 1203, 1171, 1204, 1172, 1206, 1208, - 1170, 1267, 1212, 1214, 1216, 1218, 1220, 167, 168, 169, - 1210, 1562, 1293, 1301, 167, 168, 169, 165, 1560, 2213, - 1305, 1257, 1307, 1308, 1309, 1310, 1232, 1312, 2211, 2093, - 1299, 1300, 965, 966, 967, 968, 969, 970, 971, 964, - 1290, 1327, 974, 2049, 1304, 167, 168, 169, 2025, 1248, - 1940, 1311, 1355, 1896, 1662, 1378, 1165, 167, 168, 169, - 1266, 773, 772, 102, 1381, 963, 962, 972, 973, 965, - 966, 967, 968, 969, 970, 971, 964, 1791, 483, 974, - 1256, 1779, 1631, 1596, 1595, 1294, 1303, 972, 973, 965, - 966, 967, 968, 969, 970, 971, 964, 1382, 1383, 974, - 1258, 1446, 1447, 1246, 1242, 1337, 1241, 1322, 1323, 1324, - 1240, 1044, 483, 483, 1983, 578, 1395, 2120, 1389, 1967, - 2217, 1356, 80, 165, 2119, 1648, 1967, 2199, 2076, 1400, - 1403, 1967, 2166, 1390, 1811, 1413, 82, 483, 952, 953, - 951, 1391, 1967, 2161, 165, 1967, 578, 483, 2070, 578, - 1794, 165, 1435, 165, 1580, 578, 954, 1436, 1510, 2035, - 578, 165, 165, 1967, 1972, 1419, 1420, 1448, 483, 1950, - 1949, 483, 1481, 1946, 1947, 1946, 1945, 1454, 578, 1486, - 1828, 1916, 483, 952, 953, 951, 1156, 1813, 1389, 1806, - 1807, 35, 1002, 1396, 1397, 1392, 1708, 1402, 1405, 1406, - 578, 954, 1454, 1460, 1466, 578, 605, 1487, 1487, 605, - 35, 1391, 950, 578, 1455, 1514, 1715, 1515, 1516, 1517, - 1518, 1456, 1708, 1418, 1581, 1505, 1421, 1422, 1156, 1155, - 1521, 1522, 1523, 1526, 1527, 1528, 1529, 483, 1506, 1716, - 1101, 1100, 1905, 1555, 1556, 1557, 2054, 2032, 1559, 1561, - 1484, 1916, 1741, 2167, 950, 1509, 1967, 35, 2109, 1948, - 1486, 483, 1466, 1458, 1536, 1466, 71, 483, 1494, 1488, - 1488, 1194, 1542, 1194, 1678, 1465, 1489, 1490, 1486, 1580, - 1493, 1579, 1677, 1492, 1454, 71, 571, 1225, 1508, 1507, - 609, 1916, 1454, 609, 2055, 2056, 2057, 1580, 1788, 1563, - 1444, 988, 989, 990, 991, 992, 993, 994, 995, 996, - 997, 483, 1423, 1378, 1335, 860, 1284, 1566, 1378, 1378, - 522, 521, 524, 525, 526, 527, 1466, 1087, 1576, 523, - 1577, 528, 71, 1532, 1533, 1226, 1227, 1228, 778, 1548, - 1547, 1537, 1550, 777, 2164, 71, 1558, 2132, 2075, 1926, - 2043, 1158, 1535, 165, 1982, 1573, 1531, 1525, 796, 795, - 165, 71, 1524, 1575, 562, 165, 165, 1589, 1191, 165, - 1590, 165, 1572, 1537, 1272, 1571, 1591, 165, 958, 1186, - 961, 1593, 1594, 1182, 165, 1154, 975, 976, 977, 978, - 979, 980, 981, 96, 959, 960, 957, 963, 962, 972, - 973, 965, 966, 967, 968, 969, 970, 971, 964, 165, - 483, 974, 1787, 166, 1920, 1921, 166, 578, 1985, 166, - 2133, 1546, 2239, 2232, 484, 1965, 166, 1626, 1627, 1964, - 2058, 1963, 1629, 1923, 166, 1905, 1925, 1798, 1620, 1630, - 1328, 1599, 1393, 1394, 1734, 2020, 1475, 1476, 1471, 1474, - 1475, 1476, 1472, 1355, 1473, 1477, 484, 1788, 1619, 484, - 166, 484, 1729, 963, 962, 972, 973, 965, 966, 967, - 968, 969, 970, 971, 964, 2059, 2060, 974, 1222, 1471, - 1474, 1475, 1476, 1472, 1728, 1473, 1477, 2222, 1437, 1920, - 1921, 2200, 963, 962, 972, 973, 965, 966, 967, 968, - 969, 970, 971, 964, 165, 1634, 974, 1657, 1732, 1730, - 1897, 1697, 165, 1733, 1731, 1056, 2036, 2154, 2156, 1970, - 1706, 1705, 1356, 1223, 1224, 1643, 2157, 2181, 2224, 2204, - 2206, 1695, 2184, 2151, 1283, 2180, 165, 563, 1792, 1696, - 1408, 825, 824, 1995, 1787, 1049, 1852, 165, 165, 165, - 165, 165, 923, 1821, 1717, 1409, 1694, 1050, 1656, 165, - 1820, 103, 2107, 165, 1942, 1941, 165, 165, 1701, 1574, - 165, 165, 165, 1200, 1739, 1199, 1652, 1653, 1672, 1187, - 2030, 1710, 1439, 1753, 1446, 1447, 1041, 1722, 1684, 1961, - 1623, 2162, 1692, 2127, 1479, 572, 573, 1670, 1704, 569, - 1612, 1772, 1639, 575, 1700, 2212, 1703, 1713, 2210, 2209, - 2185, 1742, 2183, 1709, 2029, 1744, 1966, 1564, 1711, 1771, - 576, 1775, 1776, 1777, 82, 1724, 1725, 483, 1727, 1756, - 1769, 1770, 165, 1293, 1735, 2028, 1900, 1723, 1740, 165, - 1726, 1708, 2241, 2240, 1748, 483, 1745, 1667, 1664, 1070, - 1063, 483, 2241, 2158, 483, 1939, 1194, 1542, 1440, 571, - 1757, 483, 80, 85, 1814, 77, 1, 1790, 454, 1424, - 1039, 466, 1780, 1825, 2230, 1259, 588, 584, 1249, 2079, - 2129, 1973, 588, 584, 165, 165, 165, 165, 165, 1789, - 1810, 1824, 585, 1540, 786, 1795, 128, 1816, 585, 1503, - 165, 165, 1504, 1174, 2195, 93, 1823, 1799, 1800, 1801, - 749, 92, 1390, 1815, 789, 1060, 1061, 587, 887, 586, - 1391, 581, 582, 587, 1565, 586, 2071, 1767, 1822, 1512, - 1107, 1105, 1106, 1104, 1109, 1108, 483, 1103, 1329, 480, - 1478, 163, 1378, 1096, 1064, 826, 444, 1951, 1325, 1597, - 1353, 450, 982, 1362, 1363, 1364, 1365, 1366, 1367, 1368, - 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1702, 1749, - 1864, 606, 483, 599, 1863, 1911, 1856, 1865, 1850, 2178, - 2150, 1851, 2152, 165, 1884, 1862, 2103, 2155, 1844, 2148, - 2223, 1878, 2203, 483, 1511, 1438, 1052, 2027, 1899, 483, - 483, 166, 1671, 166, 1011, 1877, 166, 1410, 1079, 1906, - 505, 1909, 1415, 1434, 1348, 520, 517, 518, 1449, 1714, - 956, 503, 165, 1650, 497, 1903, 1071, 1651, 1470, 1468, - 1467, 1863, 484, 484, 484, 1621, 1083, 1722, 1658, 1659, - 1922, 1918, 1077, 1453, 1665, 1831, 1979, 1668, 1669, 935, - 484, 484, 580, 1924, 492, 1675, 761, 1676, 1407, 2138, - 1679, 1680, 1681, 1682, 1683, 1638, 1915, 1929, 2016, 1943, - 1944, 579, 61, 1959, 38, 487, 1693, 2218, 926, 165, - 1936, 589, 32, 31, 30, 1893, 1928, 483, 1930, 29, - 1931, 28, 23, 22, 21, 20, 19, 25, 18, 17, - 165, 16, 98, 48, 1955, 45, 43, 105, 1954, 104, - 165, 1956, 1957, 1914, 46, 42, 863, 27, 26, 15, - 14, 13, 1737, 1738, 165, 12, 1974, 165, 11, 166, - 1542, 1969, 1976, 10, 1971, 9, 1996, 5, 1977, 2019, - 4, 929, 24, 1968, 1000, 2, 0, 0, 534, 34, - 0, 1991, 0, 0, 1990, 0, 0, 484, 0, 0, - 166, 0, 166, 166, 0, 484, 0, 0, 0, 0, - 0, 484, 0, 0, 2001, 2002, 1999, 2003, 1993, 1994, - 2005, 0, 2007, 34, 2004, 0, 963, 962, 972, 973, - 965, 966, 967, 968, 969, 970, 971, 964, 0, 0, - 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2026, 2031, 0, 0, 0, 0, 0, 0, 2040, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 570, 2039, - 0, 0, 0, 0, 0, 0, 0, 0, 1722, 0, - 0, 165, 2045, 2047, 165, 165, 165, 483, 483, 0, - 0, 0, 0, 0, 0, 0, 0, 2065, 0, 0, - 2048, 0, 2050, 0, 0, 0, 2080, 483, 483, 483, + 561, 2245, 2232, 2078, 1985, 2180, 1805, 2206, 2103, 919, + 2154, 2131, 533, 2193, 1908, 1570, 1721, 1001, 83, 3, + 1688, 2075, 1909, 519, 574, 1055, 1502, 1428, 504, 1722, + 1905, 1157, 1535, 1785, 1809, 1048, 1848, 502, 1555, 1540, + 1708, 1786, 1481, 814, 1920, 1377, 1867, 1787, 137, 165, + 1648, 751, 165, 1291, 467, 165, 1568, 1385, 1183, 81, + 483, 1601, 165, 123, 1082, 1779, 1554, 872, 608, 1542, + 165, 779, 1092, 1085, 1463, 1075, 1470, 583, 1053, 1430, + 1058, 1078, 1040, 495, 568, 1411, 506, 1354, 758, 937, + 33, 755, 483, 1552, 785, 483, 165, 483, 899, 759, + 1520, 605, 1274, 1288, 1076, 1190, 1446, 782, 780, 781, + 1091, 1531, 1486, 1065, 1089, 79, 1296, 140, 1175, 1201, + 100, 106, 792, 101, 857, 490, 8, 7, 6, 78, + 1152, 1014, 1828, 1827, 1599, 917, 1260, 1855, 107, 1017, + 1856, 2105, 167, 168, 169, 1343, 1342, 1425, 1426, 1341, + 1340, 1339, 1338, 938, 1331, 1686, 167, 168, 169, 1521, + 493, 2150, 494, 102, 2220, 108, 752, 590, 594, 816, + 569, 767, 1954, 762, 534, 34, 938, 819, 2054, 2127, + 2126, 2073, 830, 831, 2074, 834, 835, 836, 837, 491, + 818, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 602, 817, 2251, 34, + 2203, 1638, 2244, 442, 80, 2175, 459, 102, 795, 948, + 773, 2236, 1547, 772, 2079, 458, 84, 1587, 2202, 2174, + 1884, 2018, 1166, 796, 1935, 1936, 456, 820, 821, 822, + 1497, 1498, 948, 1545, 1835, 1687, 1934, 1752, 1834, 1854, + 1751, 609, 35, 1753, 570, 72, 39, 40, 1093, 827, + 1094, 1636, 774, 86, 87, 88, 89, 90, 91, 1427, + 860, 97, 1496, 1487, 162, 453, 771, 437, 866, 867, + 833, 102, 471, 891, 465, 565, 906, 892, 908, 167, + 168, 169, 775, 885, 879, 880, 564, 567, 936, 1769, + 832, 2140, 963, 962, 972, 973, 965, 966, 967, 968, + 969, 970, 971, 964, 944, 1514, 974, 915, 2177, 1332, + 1333, 1334, 2009, 1544, 877, 905, 907, 71, 878, 879, + 880, 471, 768, 769, 856, 470, 546, 944, 552, 553, + 550, 551, 2007, 549, 548, 547, 1987, 481, 1330, 479, + 485, 1280, 1044, 554, 555, 1810, 771, 855, 443, 445, + 446, 1250, 462, 464, 472, 1388, 1569, 1831, 460, 461, + 473, 447, 448, 477, 476, 463, 1607, 452, 449, 451, + 457, 893, 592, 1602, 470, 455, 474, 886, 771, 2221, + 763, 1612, 1610, 1611, 1981, 766, 471, 2243, 765, 764, + 914, 1275, 1982, 1251, 898, 1252, 912, 1614, 471, 1615, + 862, 1616, 1989, 1868, 896, 897, 894, 895, 1843, 2068, + 859, 1617, 1988, 839, 838, 1606, 1604, 1571, 904, 2123, + 1608, 903, 909, 803, 801, 1464, 812, 165, 770, 165, + 811, 810, 165, 809, 808, 769, 1953, 902, 496, 470, + 943, 940, 941, 942, 947, 949, 946, 1870, 945, 807, + 910, 470, 776, 806, 471, 939, 1605, 805, 483, 483, + 483, 800, 1169, 943, 940, 941, 942, 947, 949, 946, + 813, 945, 1487, 2069, 858, 794, 483, 483, 939, 756, + 1833, 1281, 1766, 1761, 788, 1546, 889, 756, 2252, 911, + 1847, 754, 2234, 1289, 2173, 794, 930, 756, 1189, 1188, + 475, 875, 787, 881, 882, 883, 884, 470, 770, 1872, + 2141, 1876, 794, 1871, 1553, 1869, 804, 802, 468, 829, + 1874, 596, 2178, 1844, 916, 794, 1762, 1593, 1637, 1873, + 1285, 1689, 1691, 469, 924, 823, 1961, 1830, 1893, 1892, + 770, 1891, 1875, 1877, 1164, 1163, 2194, 1162, 1764, 1820, + 1286, 1759, 913, 1160, 2161, 165, 441, 436, 1262, 1261, + 1263, 1264, 1265, 1760, 99, 1842, 986, 987, 1841, 1850, + 73, 2038, 794, 1589, 1849, 1933, 876, 1279, 984, 1046, + 1713, 1656, 1579, 483, 1045, 2249, 165, 1850, 165, 165, + 1667, 483, 1849, 1492, 921, 922, 1748, 483, 1069, 868, + 605, 865, 1503, 1664, 933, 931, 932, 999, 870, 964, + 974, 793, 974, 794, 1442, 1002, 1326, 888, 787, 790, + 791, 900, 756, 1767, 1765, 951, 784, 788, 1690, 890, + 1074, 793, 918, 918, 918, 1297, 1041, 954, 787, 790, + 791, 954, 756, 953, 951, 783, 784, 788, 793, 2169, + 815, 1059, 34, 1886, 797, 787, 1918, 1276, 1603, 1277, + 954, 793, 1278, 828, 798, 983, 985, 1282, 1016, 1019, + 1021, 1023, 1024, 1026, 1028, 1029, 874, 1020, 1022, 1038, + 1025, 1027, 799, 1030, 963, 962, 972, 973, 965, 966, + 967, 968, 969, 970, 971, 964, 998, 1588, 974, 1095, + 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 793, 1013, + 1015, 1018, 1018, 1018, 1015, 1018, 1018, 1015, 1018, 1031, + 1032, 1033, 1034, 1035, 1036, 1037, 934, 94, 861, 986, + 987, 1043, 1361, 2247, 1763, 34, 2248, 901, 2246, 1412, + 1798, 165, 986, 987, 1649, 1153, 1359, 1360, 1358, 793, + 609, 1298, 1938, 1586, 1161, 797, 787, 1584, 1581, 167, + 168, 169, 1080, 1379, 1444, 798, 967, 968, 969, 970, + 971, 964, 95, 483, 974, 1185, 167, 168, 169, 1412, + 1774, 1674, 1585, 1194, 803, 801, 1581, 1198, 1047, 873, + 483, 483, 2237, 483, 2253, 483, 483, 2226, 483, 483, + 483, 483, 483, 483, 952, 953, 951, 1062, 1167, 1168, + 1583, 2053, 1888, 483, 1195, 1269, 1090, 165, 1234, 1380, + 2238, 2052, 954, 1784, 1181, 2227, 1959, 1443, 1641, 1642, + 1643, 1783, 1174, 1247, 578, 1782, 1775, 1550, 1270, 1229, + 1230, 1193, 1447, 1448, 483, 1255, 165, 952, 953, 951, + 1414, 71, 952, 953, 951, 1254, 1253, 1287, 1267, 1984, + 1245, 165, 2254, 1357, 1231, 954, 1237, 1238, 595, 1257, + 954, 955, 1243, 1244, 1268, 1895, 1159, 165, 1349, 1351, + 1352, 167, 168, 169, 165, 1755, 1171, 1192, 1239, 1172, + 1350, 165, 165, 165, 165, 165, 165, 165, 165, 165, + 483, 483, 483, 1191, 1191, 1184, 1170, 496, 600, 1236, + 1203, 1235, 1204, 1210, 1206, 1208, 1012, 1266, 1212, 1214, + 1216, 1218, 1220, 1896, 952, 953, 951, 165, 1256, 1293, + 2230, 167, 168, 169, 577, 1563, 1057, 167, 168, 169, + 2229, 1561, 954, 1301, 2228, 952, 953, 951, 1051, 1054, + 1305, 2214, 1307, 1308, 1309, 1310, 578, 1312, 597, 598, + 1355, 2121, 1290, 954, 2212, 1378, 1299, 1300, 2094, 102, + 2050, 1327, 773, 1232, 1381, 772, 2026, 167, 168, 169, + 1304, 1248, 1941, 1897, 1165, 1792, 1780, 1311, 483, 1632, + 1597, 1337, 1596, 1436, 1303, 167, 168, 169, 1294, 1389, + 1258, 1246, 963, 962, 972, 973, 965, 966, 967, 968, + 969, 970, 971, 964, 1382, 1383, 974, 1242, 1395, 1241, + 1240, 2120, 483, 483, 1968, 2218, 1400, 1403, 1968, 2200, + 1968, 2167, 1413, 165, 1356, 1322, 1323, 1324, 1968, 2162, + 1968, 578, 2077, 1390, 2071, 578, 2021, 483, 1581, 578, + 1812, 1435, 2036, 578, 165, 1968, 1973, 483, 1391, 80, + 1437, 165, 1709, 165, 1951, 1950, 1002, 1795, 2020, 1389, + 1449, 165, 165, 1511, 918, 918, 918, 1906, 483, 1917, + 1663, 483, 1419, 1420, 1947, 1948, 1917, 605, 2033, 1482, + 605, 2168, 483, 963, 962, 972, 973, 965, 966, 967, + 968, 969, 970, 971, 964, 950, 1392, 974, 1947, 1946, + 1455, 578, 35, 1461, 82, 963, 962, 972, 973, 965, + 966, 967, 968, 969, 970, 971, 964, 1457, 1391, 974, + 1515, 1467, 1516, 1517, 1518, 1519, 1485, 578, 1742, 1506, + 1487, 1829, 35, 1507, 1156, 1814, 1487, 483, 1527, 1528, + 1529, 1530, 1466, 1556, 1557, 1558, 1807, 1808, 1560, 1562, + 1467, 578, 1968, 1510, 952, 953, 951, 1716, 950, 578, + 1459, 483, 1582, 1488, 1537, 1156, 1155, 483, 1101, 1100, + 1455, 1194, 954, 1194, 1543, 35, 1490, 71, 1709, 1494, + 1717, 1580, 1493, 1949, 2015, 1467, 1495, 1662, 1679, 1678, + 1509, 1508, 1455, 1467, 1581, 1661, 1522, 1523, 1524, 965, + 966, 967, 968, 969, 970, 971, 964, 71, 571, 974, + 1488, 483, 1567, 1378, 1564, 1456, 1445, 1581, 1378, 1378, + 952, 953, 951, 2110, 1538, 1489, 1423, 609, 1335, 1577, + 609, 1578, 1284, 1491, 1087, 1483, 1548, 1295, 954, 1559, + 1533, 1534, 1551, 778, 1549, 777, 1986, 1917, 2165, 71, + 71, 2133, 2076, 165, 2044, 1573, 1538, 1158, 1592, 1572, + 165, 1536, 1590, 1594, 1595, 165, 165, 795, 1591, 165, + 562, 165, 1489, 1983, 1574, 1576, 2014, 165, 2055, 1788, + 1487, 1532, 796, 71, 165, 1455, 1526, 1525, 1272, 1186, + 1182, 1154, 1191, 963, 962, 972, 973, 965, 966, 967, + 968, 969, 970, 971, 964, 96, 1789, 974, 1225, 165, + 483, 860, 2134, 1344, 1345, 1346, 1347, 1600, 2059, 166, + 1927, 2223, 166, 1547, 1789, 166, 2056, 2057, 2058, 1222, + 484, 2240, 166, 522, 521, 524, 525, 526, 527, 2233, + 166, 1966, 523, 1965, 528, 1921, 1922, 1627, 1628, 1396, + 1397, 1355, 1630, 1402, 1405, 1406, 1226, 1227, 1228, 1631, + 1964, 2201, 484, 2060, 2061, 484, 166, 484, 1398, 1399, + 1620, 1924, 1926, 1906, 1223, 1224, 1799, 1621, 1328, 1418, + 1730, 1729, 1421, 1422, 1898, 963, 962, 972, 973, 965, + 966, 967, 968, 969, 970, 971, 964, 1733, 1731, 974, + 1658, 1698, 1734, 1732, 165, 1635, 496, 1735, 1056, 1476, + 1477, 2037, 165, 963, 962, 972, 973, 965, 966, 967, + 968, 969, 970, 971, 964, 1356, 1644, 974, 1472, 1475, + 1476, 1477, 1473, 1971, 1474, 1478, 1707, 165, 1921, 1922, + 1472, 1475, 1476, 1477, 1473, 1706, 1474, 1478, 165, 165, + 165, 165, 165, 1695, 588, 584, 2225, 1657, 1501, 2205, + 165, 2182, 1718, 569, 165, 1702, 2185, 165, 165, 2181, + 585, 165, 165, 165, 2207, 1723, 1673, 2152, 1283, 1711, + 2155, 2157, 1740, 1714, 1754, 1041, 1685, 563, 1696, 2158, + 1793, 1693, 1408, 1060, 1061, 587, 1697, 586, 825, 824, + 1049, 1996, 1773, 1788, 1701, 1853, 923, 1409, 1822, 1743, + 2031, 1821, 1050, 1745, 103, 1712, 1710, 1539, 2108, 1943, + 1942, 1575, 1200, 1724, 1199, 1187, 1727, 1772, 483, 1776, + 1777, 1778, 1440, 165, 1757, 1736, 1447, 1448, 2013, 1741, + 165, 1293, 1613, 1962, 1655, 1746, 483, 570, 1749, 1624, + 2163, 2128, 483, 1725, 1726, 483, 1728, 1194, 1480, 1758, + 1543, 1815, 483, 572, 573, 1705, 1640, 575, 1791, 1817, + 2029, 2213, 1781, 1704, 1826, 2211, 2210, 2186, 1811, 2184, + 2030, 1967, 1565, 576, 1692, 165, 165, 165, 165, 165, + 82, 1790, 1901, 1796, 1709, 2242, 2241, 1770, 1771, 1825, + 1668, 165, 165, 1800, 1801, 1802, 1824, 1665, 1174, 1070, + 1063, 1080, 2242, 1390, 2159, 1816, 1940, 1441, 1719, 1720, + 571, 80, 1080, 1080, 1080, 1080, 1080, 1823, 1391, 85, + 77, 1, 454, 1424, 1039, 466, 2231, 483, 1483, 1259, + 1249, 1080, 2080, 1378, 2130, 1080, 1864, 963, 962, 972, + 973, 965, 966, 967, 968, 969, 970, 971, 964, 1974, + 1541, 974, 786, 1865, 128, 1845, 1504, 1505, 2196, 93, + 749, 92, 789, 483, 1866, 887, 1857, 1885, 1566, 2072, + 1768, 588, 584, 1513, 165, 1107, 1105, 1106, 1878, 1104, + 1879, 1109, 1108, 1863, 483, 1103, 1329, 585, 480, 1479, + 483, 483, 163, 1864, 1096, 1851, 1064, 166, 1852, 166, + 1910, 826, 166, 1907, 444, 1952, 1325, 1598, 450, 1904, + 581, 582, 587, 165, 586, 1723, 982, 1703, 1750, 606, + 599, 1912, 1653, 1654, 2012, 2179, 2151, 1819, 484, 484, + 484, 2153, 1916, 2104, 2156, 2149, 2224, 2204, 1512, 1439, + 1052, 2028, 1925, 1671, 1900, 1672, 484, 484, 1011, 1410, + 1079, 505, 1929, 1434, 1931, 1930, 1932, 1348, 520, 517, + 518, 1450, 1715, 956, 1960, 1675, 503, 1944, 1945, 497, + 165, 1071, 1471, 1469, 1468, 1937, 1622, 1083, 483, 1923, + 1919, 1077, 1894, 1454, 1832, 1980, 935, 580, 492, 761, + 1407, 165, 2139, 1639, 2017, 579, 1699, 1700, 1054, 1956, + 61, 165, 1957, 1958, 1955, 1975, 38, 487, 2219, 1970, + 1915, 926, 589, 32, 31, 165, 30, 29, 165, 28, + 23, 22, 21, 1543, 1972, 166, 20, 1997, 1978, 1969, + 1977, 1393, 1394, 963, 962, 972, 973, 965, 966, 967, + 968, 969, 970, 971, 964, 19, 25, 974, 18, 17, + 1992, 16, 1991, 484, 98, 48, 166, 45, 166, 166, + 2000, 484, 1911, 43, 34, 105, 104, 484, 46, 42, + 2002, 2003, 1858, 2004, 863, 2005, 2006, 1438, 2008, 27, + 26, 15, 14, 13, 12, 11, 10, 1080, 9, 1994, + 1995, 5, 963, 962, 972, 973, 965, 966, 967, 968, + 969, 970, 971, 964, 4, 929, 974, 24, 2032, 1000, + 2, 0, 2040, 0, 0, 0, 1723, 2041, 0, 0, 0, 0, 0, 0, 0, 2046, 0, 0, 0, 0, - 0, 0, 0, 2086, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1860, 1861, 0, 0, 0, 0, - 0, 0, 483, 483, 483, 165, 0, 0, 0, 0, - 0, 0, 2096, 2098, 2099, 166, 483, 2085, 483, 2084, - 0, 0, 0, 2100, 483, 0, 2110, 1909, 2092, 0, - 0, 1909, 2112, 0, 2115, 2108, 0, 0, 2106, 0, - 2101, 0, 0, 0, 0, 0, 0, 484, 2117, 165, - 2118, 2114, 0, 1644, 1645, 1646, 483, 2116, 2121, 483, - 1912, 0, 0, 0, 484, 484, 2128, 484, 0, 484, - 484, 0, 484, 484, 484, 484, 484, 484, 2124, 0, - 0, 1927, 0, 0, 0, 0, 0, 484, 0, 0, - 0, 166, 0, 0, 0, 0, 0, 2131, 2147, 0, - 0, 0, 0, 0, 1909, 2159, 0, 0, 0, 0, - 0, 0, 0, 483, 165, 0, 0, 0, 484, 2165, - 166, 0, 0, 2169, 0, 0, 0, 0, 0, 0, - 532, 0, 0, 0, 0, 166, 2175, 0, 0, 2182, - 0, 483, 0, 0, 0, 483, 0, 0, 483, 483, - 0, 166, 2186, 0, 2188, 2191, 0, 2194, 166, 0, - 2014, 0, 0, 0, 2208, 166, 166, 166, 166, 166, - 166, 166, 166, 166, 484, 484, 484, 2214, 2207, 164, - 1722, 0, 440, 0, 2221, 478, 2131, 2196, 0, 0, - 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, - 440, 166, 592, 0, 1998, 2234, 0, 0, 2000, 161, - 0, 0, 0, 2238, 0, 0, 0, 593, 593, 2009, - 2010, 0, 0, 2249, 0, 0, 440, 0, 0, 0, - 0, 0, 0, 0, 103, 2024, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, - 0, 0, 2033, 2034, 0, 0, 2038, 0, 0, 0, - 0, 0, 484, 0, 0, 0, 0, 0, 496, 963, - 962, 972, 973, 965, 966, 967, 968, 969, 970, 971, - 964, 0, 0, 974, 0, 0, 1755, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 484, 484, 0, 142, - 0, 143, 0, 0, 0, 0, 0, 166, 0, 0, - 160, 0, 0, 0, 0, 2069, 918, 918, 918, 0, - 0, 484, 0, 0, 0, 0, 0, 0, 166, 0, - 0, 484, 0, 0, 0, 166, 34, 166, 0, 0, - 0, 0, 1858, 1859, 0, 166, 166, 2013, 0, 983, - 985, 0, 484, 0, 0, 484, 0, 1879, 1880, 0, - 1881, 1882, 0, 2097, 0, 0, 484, 0, 0, 146, - 0, 1888, 1889, 0, 0, 0, 0, 0, 0, 151, - 998, 0, 0, 0, 1003, 1004, 1005, 1006, 1007, 1008, - 1009, 1010, 2012, 1013, 1015, 1018, 1018, 1018, 1015, 1018, - 1018, 1015, 1018, 1031, 1032, 1033, 1034, 1035, 1036, 1037, - 2011, 0, 0, 0, 0, 1043, 0, 0, 0, 34, - 0, 484, 0, 0, 0, 0, 0, 0, 0, 2134, - 2135, 2136, 2137, 0, 2141, 0, 2142, 2143, 2144, 0, - 2145, 2146, 0, 0, 0, 484, 1080, 0, 0, 0, - 0, 484, 0, 0, 1938, 0, 963, 962, 972, 973, - 965, 966, 967, 968, 969, 970, 971, 964, 0, 0, - 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2171, 0, 0, 0, 0, 138, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, - 0, 963, 962, 972, 973, 965, 966, 967, 968, 969, - 970, 971, 964, 0, 0, 974, 0, 0, 0, 963, - 962, 972, 973, 965, 966, 967, 968, 969, 970, 971, - 964, 2215, 2216, 974, 0, 0, 0, 166, 0, 0, - 0, 0, 0, 0, 166, 0, 0, 0, 0, 166, - 166, 1997, 0, 166, 1857, 166, 0, 0, 0, 0, - 0, 166, 0, 0, 0, 0, 0, 440, 166, 440, - 0, 0, 440, 0, 963, 962, 972, 973, 965, 966, - 967, 968, 969, 970, 971, 964, 1649, 0, 974, 0, - 0, 0, 0, 166, 484, 0, 0, 161, 0, 0, - 0, 0, 0, 0, 0, 0, 963, 962, 972, 973, - 965, 966, 967, 968, 969, 970, 971, 964, 0, 0, - 974, 0, 103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 145, 963, 962, 972, 973, 965, 966, - 967, 968, 969, 970, 971, 964, 0, 0, 974, 0, - 0, 0, 0, 0, 0, 139, 144, 141, 147, 148, - 149, 150, 152, 153, 154, 155, 0, 0, 0, 0, - 0, 156, 157, 158, 159, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 142, 166, 143, - 0, 0, 531, 0, 0, 440, 166, 0, 160, 0, - 0, 955, 0, 0, 0, 2087, 2088, 2089, 2090, 2091, - 0, 593, 0, 2094, 2095, 0, 0, 0, 0, 0, - 166, 0, 0, 0, 0, 0, 440, 0, 440, 1086, - 0, 166, 166, 166, 166, 166, 0, 496, 0, 0, - 0, 0, 0, 166, 0, 0, 1012, 166, 0, 0, - 166, 166, 482, 0, 166, 166, 166, 146, 918, 918, - 918, 0, 0, 0, 0, 0, 0, 151, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1051, 1054, - 0, 0, 0, 0, 607, 0, 0, 753, 0, 760, - 962, 972, 973, 965, 966, 967, 968, 969, 970, 971, - 964, 0, 0, 974, 0, 0, 0, 0, 0, 0, - 0, 484, 0, 0, 0, 0, 166, 0, 0, 0, - 0, 0, 0, 166, 0, 0, 0, 0, 0, 484, - 0, 0, 0, 0, 0, 484, 0, 0, 484, 0, - 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2189, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, - 166, 166, 166, 138, 0, 0, 0, 0, 0, 0, - 0, 440, 0, 0, 166, 166, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 165, 0, 2048, 165, 165, 165, 483, 483, + 0, 2047, 0, 0, 2066, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1650, 0, 2081, 483, 483, + 483, 0, 0, 0, 0, 0, 0, 2027, 0, 0, + 0, 0, 0, 0, 2087, 963, 962, 972, 973, 965, + 966, 967, 968, 969, 970, 971, 964, 0, 0, 974, + 0, 0, 0, 483, 483, 483, 165, 0, 0, 2097, + 2099, 2100, 0, 0, 0, 0, 2085, 483, 0, 483, + 0, 166, 2093, 0, 0, 483, 1910, 2049, 2107, 2051, + 1910, 2116, 2113, 2101, 2111, 0, 2109, 1887, 0, 2016, + 0, 0, 0, 0, 0, 2115, 2022, 2023, 2024, 0, + 165, 2117, 0, 484, 0, 0, 2118, 483, 2119, 0, + 483, 0, 0, 2129, 2122, 0, 0, 2125, 0, 2132, + 484, 484, 1902, 484, 0, 484, 484, 0, 484, 484, + 484, 484, 484, 484, 2086, 0, 0, 0, 0, 0, + 0, 0, 0, 484, 0, 499, 0, 166, 0, 532, + 0, 0, 2148, 1910, 0, 2160, 0, 2102, 0, 0, + 0, 0, 0, 0, 483, 165, 0, 0, 0, 0, + 2170, 0, 0, 0, 484, 0, 166, 2166, 972, 973, + 965, 966, 967, 968, 969, 970, 971, 964, 2176, 0, + 974, 166, 483, 0, 2183, 0, 483, 0, 164, 483, + 483, 440, 2192, 0, 478, 0, 2187, 166, 2132, 2197, + 2195, 440, 2189, 0, 166, 2209, 2208, 0, 1723, 440, + 0, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 484, 484, 484, 2215, 0, 2222, 593, 593, 1911, 0, + 34, 0, 1911, 0, 0, 440, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2235, 166, 0, 0, + 0, 0, 0, 0, 2239, 0, 0, 0, 0, 0, + 0, 0, 1651, 0, 2250, 0, 1652, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1659, 1660, 0, + 0, 0, 0, 1666, 0, 0, 1669, 1670, 0, 0, + 0, 2019, 0, 0, 1676, 0, 1677, 0, 0, 1680, + 1681, 1682, 1683, 1684, 0, 1911, 0, 0, 484, 0, + 0, 0, 0, 0, 496, 1694, 0, 0, 2164, 0, + 0, 2042, 0, 34, 2043, 0, 0, 2045, 962, 972, + 973, 965, 966, 967, 968, 969, 970, 971, 964, 0, + 0, 974, 484, 484, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 166, 0, 0, 0, 0, 34, 0, + 0, 0, 1738, 1739, 0, 0, 0, 484, 0, 0, + 0, 0, 0, 0, 166, 0, 0, 484, 0, 0, + 161, 166, 0, 166, 0, 0, 0, 0, 0, 0, + 0, 166, 166, 0, 0, 0, 0, 0, 484, 0, + 0, 484, 0, 0, 0, 103, 0, 0, 0, 0, + 0, 0, 484, 0, 0, 0, 145, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 958, 0, 961, 0, + 0, 0, 2106, 496, 975, 976, 977, 978, 979, 980, + 981, 0, 959, 960, 957, 963, 962, 972, 973, 965, + 966, 967, 968, 969, 970, 971, 964, 1756, 0, 974, + 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, + 142, 0, 143, 0, 0, 0, 0, 0, 0, 0, + 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 484, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 484, 0, 0, 0, 0, 0, 1197, 0, 0, 1482, - 0, 0, 0, 1042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1197, 1197, 0, 0, 0, 484, 440, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, - 0, 0, 0, 484, 484, 439, 440, 0, 0, 0, - 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, - 0, 1292, 0, 566, 0, 0, 166, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, - 0, 0, 0, 0, 440, 0, 0, 0, 0, 757, - 0, 1313, 1314, 440, 440, 440, 440, 440, 440, 440, - 0, 0, 0, 139, 144, 141, 147, 148, 149, 150, - 152, 153, 154, 155, 0, 0, 0, 0, 0, 156, - 157, 158, 159, 166, 0, 0, 0, 440, 0, 0, - 0, 484, 0, 0, 0, 0, 0, 1295, 0, 0, - 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1861, 1862, 161, 0, 0, 0, + 146, 484, 0, 0, 0, 0, 0, 0, 0, 0, + 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 103, 0, 125, 0, 0, 0, 0, 0, 0, + 0, 0, 145, 0, 0, 0, 440, 0, 440, 0, + 0, 440, 0, 166, 0, 0, 0, 0, 0, 0, + 166, 0, 0, 0, 0, 166, 166, 0, 0, 166, + 1913, 166, 0, 135, 0, 0, 0, 166, 124, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, - 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, - 1292, 0, 0, 0, 593, 593, 0, 0, 593, 593, - 593, 0, 0, 0, 1197, 0, 0, 0, 0, 0, - 0, 0, 0, 1344, 1345, 1346, 1347, 0, 0, 0, - 607, 607, 607, 0, 593, 593, 593, 593, 593, 0, - 0, 0, 0, 1432, 0, 0, 0, 0, 925, 927, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, - 1292, 440, 0, 440, 0, 0, 0, 0, 1398, 1399, - 0, 440, 440, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 166, 0, 0, 166, 166, - 166, 484, 484, 0, 0, 0, 0, 0, 1654, 0, - 0, 570, 0, 0, 0, 0, 496, 0, 0, 0, - 0, 484, 484, 484, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1691, 0, - 0, 0, 0, 0, 0, 1067, 484, 484, 484, 166, - 0, 0, 0, 607, 0, 0, 0, 0, 1500, 1097, - 484, 0, 484, 0, 1080, 0, 0, 0, 484, 0, - 0, 1718, 1719, 0, 0, 1080, 1080, 1080, 1080, 1080, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1482, 0, 166, 1080, 0, 0, 0, 1080, 0, - 484, 0, 0, 484, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1538, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 864, 0, 869, 0, 0, 871, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 484, 166, 0, - 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, - 440, 0, 0, 0, 0, 440, 440, 0, 0, 440, - 0, 1624, 0, 0, 0, 484, 0, 440, 0, 484, - 1818, 0, 484, 484, 440, 0, 0, 0, 0, 0, + 0, 1928, 0, 0, 0, 0, 142, 0, 143, 0, + 0, 0, 0, 112, 113, 134, 133, 160, 0, 166, + 484, 0, 0, 988, 989, 990, 991, 992, 993, 994, + 995, 996, 997, 0, 0, 0, 138, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 129, 110, 136, 117, 109, + 0, 130, 131, 0, 0, 0, 146, 0, 0, 0, + 0, 0, 0, 0, 440, 0, 151, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 593, 121, 119, 114, 115, 116, 120, 0, 0, 0, + 0, 111, 0, 0, 166, 440, 0, 440, 1086, 0, + 122, 0, 166, 0, 1999, 0, 0, 0, 2001, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2010, + 2011, 0, 0, 0, 0, 0, 0, 166, 0, 0, + 0, 0, 0, 0, 0, 2025, 0, 0, 166, 166, + 166, 166, 166, 0, 0, 0, 0, 0, 0, 0, + 166, 0, 2034, 2035, 166, 0, 2039, 166, 166, 0, + 0, 166, 166, 166, 0, 0, 0, 0, 0, 0, + 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 139, 144, 141, 147, + 148, 149, 150, 152, 153, 154, 155, 0, 0, 0, + 0, 531, 156, 157, 158, 159, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2070, 0, 0, 484, 0, + 0, 0, 0, 166, 0, 0, 132, 0, 0, 0, + 166, 0, 0, 0, 0, 0, 484, 0, 126, 0, + 0, 127, 484, 0, 0, 484, 0, 0, 0, 0, + 440, 0, 484, 0, 0, 0, 0, 0, 0, 0, + 0, 482, 0, 2098, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 166, 166, 166, 166, 166, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 166, 166, 607, 0, 1197, 753, 0, 760, 0, + 0, 0, 1042, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1197, 1197, 0, 0, 0, 0, 440, 484, 0, 2135, + 2136, 2137, 2138, 0, 2142, 0, 2143, 2144, 2145, 0, + 2146, 2147, 139, 144, 141, 147, 148, 149, 150, 152, + 153, 154, 155, 0, 439, 440, 0, 0, 156, 157, + 158, 159, 0, 484, 486, 0, 0, 0, 0, 0, + 1292, 0, 566, 0, 166, 0, 0, 0, 0, 0, + 2172, 0, 0, 0, 484, 0, 440, 0, 0, 0, + 484, 484, 0, 440, 0, 0, 0, 0, 757, 0, + 1313, 1314, 440, 440, 440, 440, 440, 440, 440, 0, + 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2216, 2217, 0, 0, 0, 440, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1353, 0, 0, 1362, 1363, 1364, 1365, 1366, + 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, + 166, 0, 0, 0, 0, 0, 0, 0, 484, 0, + 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, + 0, 166, 0, 0, 0, 0, 0, 0, 593, 1292, + 0, 166, 0, 593, 593, 0, 0, 593, 593, 593, + 0, 103, 0, 1197, 1415, 166, 0, 0, 166, 0, + 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 593, 593, 593, 593, 593, 0, 0, + 0, 0, 1432, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 440, 0, 0, 0, 0, 0, 1292, + 440, 0, 440, 0, 0, 0, 142, 0, 143, 0, + 440, 440, 161, 0, 0, 0, 0, 160, 0, 0, + 0, 0, 0, 1804, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 103, 0, 125, + 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 166, 0, 0, 166, 166, 166, 484, 484, + 0, 0, 0, 0, 0, 0, 146, 0, 0, 135, + 0, 0, 0, 0, 124, 0, 151, 0, 484, 484, + 484, 0, 0, 0, 0, 0, 0, 0, 0, 607, + 607, 607, 142, 0, 143, 0, 0, 0, 0, 1177, + 1178, 134, 133, 160, 0, 0, 0, 925, 927, 0, + 0, 0, 0, 484, 484, 484, 166, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 484, 0, 484, + 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, + 0, 129, 1179, 136, 0, 1176, 0, 130, 131, 864, + 166, 869, 146, 0, 871, 0, 0, 484, 0, 0, + 484, 0, 151, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 440, 0, 0, 0, 0, 0, 0, 440, + 0, 0, 0, 0, 440, 440, 0, 0, 440, 0, + 1625, 0, 0, 0, 1067, 0, 440, 0, 0, 0, + 0, 0, 607, 440, 484, 166, 0, 0, 1097, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, + 0, 0, 484, 0, 0, 0, 484, 0, 0, 484, + 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1645, 1646, 1647, 138, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 593, 593, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1073, 0, + 0, 1084, 0, 0, 0, 0, 0, 593, 0, 0, + 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 440, 126, 0, 0, 127, 0, 0, + 0, 1432, 139, 144, 141, 147, 148, 149, 150, 152, + 153, 154, 155, 0, 0, 0, 0, 0, 156, 157, + 158, 159, 0, 0, 0, 593, 440, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1197, 440, 440, 440, + 440, 440, 0, 0, 0, 0, 0, 0, 0, 1737, + 0, 0, 0, 440, 753, 0, 440, 440, 0, 0, + 440, 1747, 1292, 0, 0, 0, 0, 1196, 0, 0, + 0, 1202, 1202, 0, 1202, 0, 1202, 1202, 0, 1211, + 1202, 1202, 1202, 1202, 1202, 0, 0, 0, 0, 0, + 0, 0, 1196, 1196, 753, 0, 0, 0, 139, 144, + 141, 147, 148, 149, 150, 152, 153, 154, 155, 0, + 0, 0, 0, 0, 156, 157, 158, 159, 0, 0, + 0, 0, 440, 1102, 0, 1271, 0, 0, 0, 1803, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1197, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1292, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 440, 440, 440, 440, 440, 0, + 0, 607, 607, 607, 0, 0, 0, 0, 0, 0, + 440, 440, 0, 0, 0, 0, 0, 0, 0, 1233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1196, 0, - 0, 0, 1202, 1202, 0, 1202, 0, 1202, 1202, 0, - 1211, 1202, 1202, 1202, 1202, 1202, 0, 0, 0, 0, - 0, 0, 0, 1196, 1196, 753, 0, 593, 593, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1073, - 0, 0, 1084, 0, 0, 0, 0, 0, 593, 0, - 0, 0, 0, 0, 0, 0, 1271, 0, 0, 0, - 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, - 0, 0, 1432, 0, 0, 1910, 0, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 593, 440, 0, 0, 0, - 1080, 0, 0, 0, 0, 0, 1197, 440, 440, 440, - 440, 440, 607, 607, 607, 0, 0, 0, 0, 1736, - 0, 0, 0, 440, 0, 1674, 440, 440, 0, 0, - 440, 1746, 1292, 0, 0, 0, 0, 0, 35, 36, - 37, 72, 39, 40, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1698, 1699, 1054, 76, 0, - 0, 0, 0, 41, 67, 68, 0, 65, 69, 0, - 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 440, 0, 1102, 0, 0, 0, 0, 1802, - 1384, 0, 607, 54, 0, 0, 0, 0, 0, 1197, - 0, 0, 0, 71, 0, 0, 1196, 0, 0, 1292, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1416, 1417, 0, 0, 0, 0, - 0, 0, 2015, 0, 440, 440, 440, 440, 440, 2021, - 2022, 2023, 0, 0, 0, 0, 0, 0, 0, 1450, - 440, 440, 0, 0, 0, 0, 0, 0, 0, 1067, - 1233, 0, 607, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 44, 47, 50, 49, 52, - 607, 64, 0, 607, 70, 593, 0, 0, 0, 1273, - 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 53, 75, 74, - 0, 0, 62, 63, 51, 0, 0, 0, 0, 0, - 1302, 0, 0, 0, 0, 0, 0, 1306, 0, 0, - 0, 0, 0, 440, 0, 0, 1315, 1316, 1317, 1318, - 1319, 1320, 1321, 0, 0, 0, 1197, 0, 0, 760, - 0, 0, 0, 55, 56, 0, 57, 58, 59, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1084, 0, 440, 753, 0, 0, 1886, 0, 0, 760, - 0, 1910, 0, 34, 0, 1910, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1901, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 753, 0, 0, 0, 0, 0, 440, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1197, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 440, 0, 0, 0, 0, 0, 73, 0, 1910, 0, + 0, 0, 0, 0, 0, 1859, 1860, 0, 0, 0, + 0, 0, 0, 0, 0, 593, 0, 0, 1273, 0, + 1880, 1881, 0, 1882, 1883, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1889, 1890, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1302, + 0, 0, 0, 0, 0, 0, 1306, 0, 0, 1384, + 0, 607, 0, 440, 0, 1315, 1316, 1317, 1318, 1319, + 1320, 1321, 0, 0, 0, 1196, 1197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1416, 1417, 0, 0, 0, 0, 1084, + 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, + 0, 161, 0, 0, 0, 0, 0, 1939, 1451, 1124, + 0, 0, 1173, 0, 0, 0, 0, 0, 1067, 0, + 0, 607, 0, 0, 0, 0, 103, 0, 125, 0, + 0, 0, 0, 0, 0, 0, 0, 145, 0, 607, + 0, 0, 607, 0, 0, 0, 0, 0, 0, 440, + 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, + 1197, 0, 0, 0, 0, 0, 0, 0, 135, 0, + 440, 0, 0, 124, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2163, 0, 0, 440, 0, 34, 440, 161, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1457, 0, 0, - 0, 0, 0, 103, 1461, 125, 1464, 0, 0, 0, - 0, 34, 0, 0, 145, 1483, 0, 0, 0, 0, - 0, 0, 1633, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 135, 0, 1197, 0, 0, - 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, - 143, 0, 0, 0, 0, 112, 113, 134, 133, 160, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2018, 440, 0, 0, 440, 440, 440, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, - 2041, 0, 0, 2042, 0, 0, 2044, 129, 110, 136, - 117, 109, 0, 130, 131, 0, 0, 0, 146, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 151, 118, - 0, 0, 0, 0, 0, 1432, 0, 0, 1196, 0, - 0, 0, 0, 121, 119, 114, 115, 116, 120, 0, - 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, - 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, + 0, 142, 0, 143, 440, 0, 0, 440, 1177, 1178, + 134, 133, 160, 0, 1998, 0, 0, 0, 760, 0, + 0, 0, 0, 0, 0, 0, 1458, 0, 0, 0, + 0, 0, 1112, 1462, 0, 1465, 0, 0, 0, 0, + 0, 0, 753, 0, 1484, 0, 0, 0, 760, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 129, 1179, 136, 0, 1176, 0, 130, 131, 0, 0, + 0, 146, 0, 0, 0, 0, 1125, 1197, 0, 0, + 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 440, 0, 0, 440, 440, 440, 1138, 1141, 1142, + 1143, 1144, 1145, 1146, 0, 1147, 1148, 1149, 1150, 1151, + 1126, 1127, 1128, 1129, 1110, 1111, 1139, 0, 1113, 0, + 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, + 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 2088, 2089, + 2090, 2091, 2092, 0, 0, 0, 2095, 2096, 0, 0, + 0, 0, 0, 0, 0, 1432, 0, 138, 0, 0, + 0, 1634, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, - 161, 0, 0, 0, 0, 0, 1084, 0, 0, 0, - 0, 1173, 0, 1608, 0, 0, 0, 0, 1617, 1618, - 0, 0, 1622, 0, 0, 103, 0, 125, 0, 0, - 1625, 2105, 496, 0, 0, 0, 145, 1628, 0, 1793, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 138, 0, 0, 1805, 0, 0, - 0, 1196, 1632, 1812, 440, 0, 1805, 135, 0, 0, - 0, 607, 124, 1817, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1140, 0, 1084, 0, 0, 0, 0, + 0, 132, 1609, 0, 0, 0, 0, 1618, 1619, 0, + 0, 1623, 0, 126, 0, 0, 127, 0, 0, 1626, + 0, 0, 0, 0, 0, 0, 1629, 0, 0, 0, + 0, 0, 35, 36, 37, 72, 39, 40, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1633, 76, 0, 440, 0, 0, 41, 67, 68, + 0, 65, 69, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1197, - 142, 0, 143, 0, 0, 0, 0, 1177, 1178, 134, - 133, 160, 0, 0, 0, 0, 0, 0, 132, 0, + 2190, 0, 0, 0, 0, 0, 0, 0, 1196, 0, + 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 139, 144, 141, + 147, 148, 149, 150, 152, 153, 154, 155, 0, 0, + 0, 0, 0, 156, 157, 158, 159, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1794, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, + 47, 50, 49, 52, 0, 64, 0, 1806, 70, 0, + 0, 1196, 0, 1813, 0, 0, 1806, 0, 0, 0, + 0, 607, 0, 1818, 0, 0, 0, 0, 0, 0, + 1744, 53, 75, 74, 0, 0, 62, 63, 51, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, + 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1797, 0, 0, 607, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 126, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1124, 607, 129, - 1179, 136, 0, 1176, 0, 130, 131, 0, 0, 0, - 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1202, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1836, 1837, 1838, + 1839, 1840, 0, 0, 0, 607, 0, 0, 1196, 0, + 0, 1914, 1202, 1084, 1846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 607, 0, 0, 1196, 0, - 0, 1913, 1202, 0, 0, 0, 0, 0, 0, 0, - 1743, 0, 0, 0, 139, 144, 141, 147, 148, 149, - 150, 152, 153, 154, 155, 0, 0, 0, 0, 0, - 156, 157, 158, 159, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1112, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, - 0, 0, 0, 0, 0, 1796, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, - 0, 0, 1196, 0, 1125, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 0, 0, 0, 0, 0, 0, 1835, 1836, 1837, - 1838, 1839, 126, 0, 0, 127, 0, 0, 0, 0, - 0, 0, 0, 1084, 1845, 1138, 1141, 1142, 1143, 1144, - 1145, 1146, 0, 1147, 1148, 1149, 1150, 1151, 1126, 1127, - 1128, 1129, 1110, 1111, 1139, 0, 1113, 0, 1114, 1115, - 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1130, 1131, - 1132, 1133, 1134, 1135, 1136, 1137, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1196, + 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1898, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 139, 144, 141, 147, - 148, 149, 150, 152, 153, 154, 155, 0, 0, 1805, - 2066, 1140, 156, 157, 158, 159, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2081, - 2082, 2083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1805, 1805, 1805, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2111, 0, - 2113, 0, 1962, 0, 0, 0, 1805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1975, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1978, 0, 0, 0, 0, 1805, 0, - 0, 607, 0, 0, 0, 0, 0, 1989, 0, 0, - 1992, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1899, 0, 0, 753, + 0, 0, 1196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1196, 0, 2187, 0, 0, 0, 1805, 0, 0, - 607, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2061, 0, 0, 2062, 2063, 2064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 732, 719, 0, 0, 668, - 735, 639, 657, 744, 659, 662, 702, 618, 681, 312, - 654, 0, 643, 614, 650, 615, 641, 670, 222, 674, - 638, 721, 684, 734, 270, 0, 620, 644, 326, 704, - 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, - 285, 324, 382, 318, 741, 274, 691, 0, 373, 297, - 0, 0, 0, 672, 724, 679, 715, 667, 703, 628, - 690, 736, 655, 699, 737, 260, 206, 175, 309, 374, - 236, 0, 0, 0, 167, 168, 169, 0, 2197, 2198, - 0, 0, 2123, 0, 0, 197, 0, 204, 696, 731, - 652, 698, 218, 258, 224, 217, 389, 701, 747, 613, - 693, 0, 616, 619, 743, 727, 647, 648, 0, 0, - 0, 0, 0, 0, 0, 671, 680, 712, 665, 0, - 0, 0, 0, 0, 0, 0, 0, 645, 0, 689, - 0, 0, 0, 624, 617, 0, 0, 0, 0, 669, - 0, 0, 0, 627, 0, 646, 713, 2170, 611, 244, - 621, 298, 0, 717, 726, 666, 420, 730, 664, 663, - 733, 708, 625, 723, 658, 269, 623, 266, 171, 186, - 0, 656, 308, 347, 353, 722, 642, 651, 209, 649, - 351, 322, 406, 193, 234, 344, 327, 349, 688, 706, - 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, - 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, - 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, - 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, - 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, - 211, 311, 397, 398, 210, 434, 189, 417, 182, 920, - 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, - 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, - 0, 176, 0, 375, 410, 435, 195, 637, 718, 388, - 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, - 425, 427, 428, 430, 194, 334, 247, 315, 405, 233, - 413, 303, 190, 253, 371, 267, 276, 710, 746, 321, - 352, 199, 408, 372, 632, 636, 630, 631, 682, 683, - 633, 738, 739, 740, 714, 626, 0, 634, 635, 0, - 720, 728, 729, 687, 170, 183, 272, 742, 341, 237, - 433, 415, 411, 612, 629, 215, 640, 0, 0, 653, - 660, 661, 673, 675, 676, 677, 678, 686, 694, 695, - 697, 705, 707, 709, 711, 716, 725, 745, 172, 173, - 184, 192, 202, 214, 227, 235, 245, 249, 252, 255, - 256, 259, 264, 281, 286, 287, 288, 289, 305, 306, - 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, - 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, - 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, - 396, 407, 419, 423, 246, 403, 424, 0, 280, 685, - 692, 282, 231, 248, 257, 700, 414, 377, 188, 348, - 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, - 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, - 385, 387, 294, 219, 732, 719, 0, 0, 668, 735, - 639, 657, 744, 659, 662, 702, 618, 681, 312, 654, - 0, 643, 614, 650, 615, 641, 670, 222, 674, 638, - 721, 684, 734, 270, 0, 620, 644, 326, 704, 364, - 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, - 324, 382, 318, 741, 274, 691, 0, 373, 297, 0, - 0, 0, 672, 724, 679, 715, 667, 703, 628, 690, - 736, 655, 699, 737, 260, 206, 175, 309, 374, 236, - 0, 0, 0, 167, 168, 169, 0, 0, 0, 0, - 0, 0, 0, 0, 197, 0, 204, 696, 731, 652, - 698, 218, 258, 224, 217, 389, 701, 747, 613, 693, - 0, 616, 619, 743, 727, 647, 648, 0, 0, 0, - 0, 0, 0, 0, 671, 680, 712, 665, 0, 0, - 0, 0, 0, 0, 1902, 0, 645, 0, 689, 0, - 0, 0, 624, 617, 0, 0, 0, 0, 669, 0, - 0, 0, 627, 0, 646, 713, 0, 611, 244, 621, - 298, 0, 717, 726, 666, 420, 730, 664, 663, 733, - 708, 625, 723, 658, 269, 623, 266, 171, 186, 0, - 656, 308, 347, 353, 722, 642, 651, 209, 649, 351, - 322, 406, 193, 234, 344, 327, 349, 688, 706, 350, - 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, - 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, - 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, - 178, 381, 402, 198, 362, 0, 0, 0, 180, 400, - 378, 292, 262, 263, 179, 0, 343, 220, 240, 211, - 311, 397, 398, 210, 434, 189, 417, 182, 920, 416, - 304, 393, 401, 293, 284, 181, 399, 291, 283, 268, - 230, 250, 337, 278, 338, 251, 300, 299, 301, 0, - 176, 0, 375, 410, 435, 195, 637, 718, 388, 426, - 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, - 427, 428, 430, 194, 334, 247, 315, 405, 233, 413, - 303, 190, 253, 371, 267, 276, 710, 746, 321, 352, - 199, 408, 372, 632, 636, 630, 631, 682, 683, 633, - 738, 739, 740, 714, 626, 0, 634, 635, 0, 720, - 728, 729, 687, 170, 183, 272, 742, 341, 237, 433, - 415, 411, 612, 629, 215, 640, 0, 0, 653, 660, - 661, 673, 675, 676, 677, 678, 686, 694, 695, 697, - 705, 707, 709, 711, 716, 725, 745, 172, 173, 184, - 192, 202, 214, 227, 235, 245, 249, 252, 255, 256, - 259, 264, 281, 286, 287, 288, 289, 305, 306, 307, - 310, 313, 314, 317, 319, 320, 323, 329, 330, 331, - 332, 333, 335, 342, 346, 354, 355, 356, 357, 358, - 360, 361, 365, 366, 367, 368, 376, 380, 395, 396, - 407, 419, 423, 246, 403, 424, 0, 280, 685, 692, - 282, 231, 248, 257, 700, 414, 377, 188, 348, 238, - 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, - 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, - 387, 294, 219, 732, 719, 0, 0, 668, 735, 639, - 657, 744, 659, 662, 702, 618, 681, 312, 654, 0, - 643, 614, 650, 615, 641, 670, 222, 674, 638, 721, - 684, 734, 270, 0, 620, 644, 326, 704, 364, 208, - 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, - 382, 318, 741, 274, 691, 0, 373, 297, 0, 0, - 0, 672, 724, 679, 715, 667, 703, 628, 690, 736, - 655, 699, 737, 260, 206, 175, 309, 374, 236, 0, - 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, - 0, 0, 0, 197, 0, 204, 696, 731, 652, 698, - 218, 258, 224, 217, 389, 701, 747, 613, 693, 0, - 616, 619, 743, 727, 647, 648, 0, 0, 0, 0, - 0, 0, 0, 671, 680, 712, 665, 0, 0, 0, - 0, 0, 0, 1747, 0, 645, 0, 689, 0, 0, - 0, 624, 617, 0, 0, 0, 0, 669, 0, 0, - 0, 627, 0, 646, 713, 0, 611, 244, 621, 298, - 0, 717, 726, 666, 420, 730, 664, 663, 733, 708, - 625, 723, 658, 269, 623, 266, 171, 186, 0, 656, - 308, 347, 353, 722, 642, 651, 209, 649, 351, 322, - 406, 193, 234, 344, 327, 349, 688, 706, 350, 275, - 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, - 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, - 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, - 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, - 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, - 397, 398, 210, 434, 189, 417, 182, 920, 416, 304, - 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, - 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, - 0, 375, 410, 435, 195, 637, 718, 388, 426, 431, - 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, - 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, - 190, 253, 371, 267, 276, 710, 746, 321, 352, 199, - 408, 372, 632, 636, 630, 631, 682, 683, 633, 738, - 739, 740, 714, 626, 0, 634, 635, 0, 720, 728, - 729, 687, 170, 183, 272, 742, 341, 237, 433, 415, - 411, 612, 629, 215, 640, 0, 0, 653, 660, 661, - 673, 675, 676, 677, 678, 686, 694, 695, 697, 705, - 707, 709, 711, 716, 725, 745, 172, 173, 184, 192, - 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, - 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, - 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, - 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, - 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, - 419, 423, 246, 403, 424, 0, 280, 685, 692, 282, - 231, 248, 257, 700, 414, 377, 188, 348, 238, 177, - 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, - 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, - 294, 219, 732, 719, 0, 0, 668, 735, 639, 657, - 744, 659, 662, 702, 618, 681, 312, 654, 0, 643, - 614, 650, 615, 641, 670, 222, 674, 638, 721, 684, - 734, 270, 0, 620, 644, 326, 704, 364, 208, 279, - 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, - 318, 741, 274, 691, 0, 373, 297, 0, 0, 0, - 672, 724, 679, 715, 667, 703, 628, 690, 736, 655, - 699, 737, 260, 206, 175, 309, 374, 236, 0, 0, - 0, 167, 168, 169, 0, 0, 0, 0, 0, 0, - 0, 0, 197, 0, 204, 696, 731, 652, 698, 218, - 258, 224, 217, 389, 701, 747, 613, 693, 0, 616, - 619, 743, 727, 647, 648, 0, 0, 0, 0, 0, - 0, 0, 671, 680, 712, 665, 0, 0, 0, 0, - 0, 0, 1459, 0, 645, 0, 689, 0, 0, 0, - 624, 617, 0, 0, 0, 0, 669, 0, 0, 0, - 627, 0, 646, 713, 0, 611, 244, 621, 298, 0, - 717, 726, 666, 420, 730, 664, 663, 733, 708, 625, - 723, 658, 269, 623, 266, 171, 186, 0, 656, 308, - 347, 353, 722, 642, 651, 209, 649, 351, 322, 406, - 193, 234, 344, 327, 349, 688, 706, 350, 275, 394, - 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, - 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, - 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, - 402, 198, 362, 0, 0, 0, 180, 400, 378, 292, - 262, 263, 179, 0, 343, 220, 240, 211, 311, 397, - 398, 210, 434, 189, 417, 182, 920, 416, 304, 393, - 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, - 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, - 375, 410, 435, 195, 637, 718, 388, 426, 431, 0, - 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, - 430, 194, 334, 247, 315, 405, 233, 413, 303, 190, - 253, 371, 267, 276, 710, 746, 321, 352, 199, 408, - 372, 632, 636, 630, 631, 682, 683, 633, 738, 739, - 740, 714, 626, 0, 634, 635, 0, 720, 728, 729, - 687, 170, 183, 272, 742, 341, 237, 433, 415, 411, - 612, 629, 215, 640, 0, 0, 653, 660, 661, 673, - 675, 676, 677, 678, 686, 694, 695, 697, 705, 707, - 709, 711, 716, 725, 745, 172, 173, 184, 192, 202, - 214, 227, 235, 245, 249, 252, 255, 256, 259, 264, - 281, 286, 287, 288, 289, 305, 306, 307, 310, 313, - 314, 317, 319, 320, 323, 329, 330, 331, 332, 333, - 335, 342, 346, 354, 355, 356, 357, 358, 360, 361, - 365, 366, 367, 368, 376, 380, 395, 396, 407, 419, - 423, 246, 403, 424, 0, 280, 685, 692, 282, 231, - 248, 257, 700, 414, 377, 188, 348, 238, 177, 205, - 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, - 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, - 219, 732, 719, 0, 0, 668, 735, 639, 657, 744, - 659, 662, 702, 618, 681, 312, 654, 0, 643, 614, - 650, 615, 641, 670, 222, 674, 638, 721, 684, 734, - 270, 0, 620, 644, 326, 704, 364, 208, 279, 277, - 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, - 741, 274, 691, 0, 373, 297, 0, 0, 0, 672, - 724, 679, 715, 667, 703, 628, 690, 736, 655, 699, - 737, 260, 206, 175, 309, 374, 236, 71, 0, 0, - 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, - 0, 197, 0, 204, 696, 731, 652, 698, 218, 258, - 224, 217, 389, 701, 747, 613, 693, 0, 616, 619, - 743, 727, 647, 648, 0, 0, 0, 0, 0, 0, - 0, 671, 680, 712, 665, 0, 0, 0, 0, 0, - 0, 0, 0, 645, 0, 689, 0, 0, 0, 624, - 617, 0, 0, 0, 0, 669, 0, 0, 0, 627, - 0, 646, 713, 0, 611, 244, 621, 298, 0, 717, - 726, 666, 420, 730, 664, 663, 733, 708, 625, 723, - 658, 269, 623, 266, 171, 186, 0, 656, 308, 347, - 353, 722, 642, 651, 209, 649, 351, 322, 406, 193, - 234, 344, 327, 349, 688, 706, 350, 275, 394, 339, - 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, - 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, - 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, - 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, - 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, - 210, 434, 189, 417, 182, 920, 416, 304, 393, 401, - 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, - 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, - 410, 435, 195, 637, 718, 388, 426, 431, 0, 340, - 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, - 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, - 371, 267, 276, 710, 746, 321, 352, 199, 408, 372, - 632, 636, 630, 631, 682, 683, 633, 738, 739, 740, - 714, 626, 0, 634, 635, 0, 720, 728, 729, 687, - 170, 183, 272, 742, 341, 237, 433, 415, 411, 612, - 629, 215, 640, 0, 0, 653, 660, 661, 673, 675, - 676, 677, 678, 686, 694, 695, 697, 705, 707, 709, - 711, 716, 725, 745, 172, 173, 184, 192, 202, 214, - 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, - 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, - 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, - 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, - 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, - 246, 403, 424, 0, 280, 685, 692, 282, 231, 248, - 257, 700, 414, 377, 188, 348, 238, 177, 205, 191, - 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, - 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, + 0, 0, 1963, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1196, + 0, 0, 0, 1976, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1979, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1990, 0, 0, + 1993, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, + 2067, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2082, + 2083, 2084, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1806, 1806, 1806, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2112, 0, + 2114, 0, 0, 0, 0, 0, 1806, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2062, 0, 0, 2063, 2064, 2065, + 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, + 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1196, 0, 2188, 0, 0, 0, 1806, 0, 0, + 607, 607, 2124, 0, 0, 0, 0, 0, 0, 0, 732, 719, 0, 0, 668, 735, 639, 657, 744, 659, 662, 702, 618, 681, 312, 654, 0, 643, 614, 650, 615, 641, 670, 222, 674, 638, 721, 684, 734, 270, 0, 620, 644, 326, 704, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 741, - 274, 691, 0, 373, 297, 0, 0, 0, 672, 724, + 274, 691, 0, 373, 297, 0, 0, 2171, 672, 724, 679, 715, 667, 703, 628, 690, 736, 655, 699, 737, 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, - 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, + 168, 169, 0, 2198, 2199, 0, 0, 0, 0, 0, 197, 0, 204, 696, 731, 652, 698, 218, 258, 224, 217, 389, 701, 747, 613, 693, 0, 616, 619, 743, 727, 647, 648, 0, 0, 0, 0, 0, 0, 0, @@ -1884,7 +1656,7 @@ var yyAct = [...]int{ 0, 204, 696, 731, 652, 698, 218, 258, 224, 217, 389, 701, 747, 613, 693, 0, 616, 619, 743, 727, 647, 648, 0, 0, 0, 0, 0, 0, 0, 671, - 680, 712, 665, 0, 0, 0, 0, 0, 0, 0, + 680, 712, 665, 0, 0, 0, 0, 0, 0, 1903, 0, 645, 0, 689, 0, 0, 0, 624, 617, 0, 0, 0, 0, 669, 0, 0, 0, 627, 0, 646, 713, 0, 611, 244, 621, 298, 0, 717, 726, 666, @@ -1897,12 +1669,12 @@ var yyAct = [...]int{ 273, 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, 434, - 189, 417, 182, 622, 416, 304, 393, 401, 293, 284, + 189, 417, 182, 920, 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, 637, 718, 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, 334, - 247, 315, 405, 233, 413, 610, 748, 604, 603, 267, + 247, 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, 710, 746, 321, 352, 199, 408, 372, 632, 636, 630, 631, 682, 683, 633, 738, 739, 740, 714, 626, 0, 634, 635, 0, 720, 728, 729, 687, 170, 183, @@ -1931,7 +1703,7 @@ var yyAct = [...]int{ 204, 696, 731, 652, 698, 218, 258, 224, 217, 389, 701, 747, 613, 693, 0, 616, 619, 743, 727, 647, 648, 0, 0, 0, 0, 0, 0, 0, 671, 680, - 712, 665, 0, 0, 0, 0, 0, 0, 0, 0, + 712, 665, 0, 0, 0, 0, 0, 0, 1748, 0, 645, 0, 689, 0, 0, 0, 624, 617, 0, 0, 0, 0, 669, 0, 0, 0, 627, 0, 646, 713, 0, 611, 244, 621, 298, 0, 717, 726, 666, 420, @@ -1941,15 +1713,15 @@ var yyAct = [...]int{ 349, 688, 706, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, - 429, 185, 359, 201, 178, 381, 1088, 198, 362, 0, + 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, - 417, 182, 622, 416, 304, 393, 401, 293, 284, 181, + 417, 182, 920, 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, 637, 718, 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, - 315, 405, 233, 413, 610, 748, 604, 603, 267, 276, + 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, 710, 746, 321, 352, 199, 408, 372, 632, 636, 630, 631, 682, 683, 633, 738, 739, 740, 714, 626, 0, 634, 635, 0, 720, 728, 729, 687, 170, 183, 272, @@ -1978,7 +1750,7 @@ var yyAct = [...]int{ 696, 731, 652, 698, 218, 258, 224, 217, 389, 701, 747, 613, 693, 0, 616, 619, 743, 727, 647, 648, 0, 0, 0, 0, 0, 0, 0, 671, 680, 712, - 665, 0, 0, 0, 0, 0, 0, 0, 0, 645, + 665, 0, 0, 0, 0, 0, 0, 1460, 0, 645, 0, 689, 0, 0, 0, 624, 617, 0, 0, 0, 0, 669, 0, 0, 0, 627, 0, 646, 713, 0, 611, 244, 621, 298, 0, 717, 726, 666, 420, 730, @@ -1988,15 +1760,15 @@ var yyAct = [...]int{ 688, 706, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, - 185, 359, 201, 178, 381, 601, 198, 362, 0, 0, + 185, 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, 417, - 182, 622, 416, 304, 393, 401, 293, 284, 181, 399, + 182, 920, 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, 637, 718, 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, 315, - 405, 233, 413, 610, 748, 604, 603, 267, 276, 710, + 405, 233, 413, 303, 190, 253, 371, 267, 276, 710, 746, 321, 352, 199, 408, 372, 632, 636, 630, 631, 682, 683, 633, 738, 739, 740, 714, 626, 0, 634, 635, 0, 720, 728, 729, 687, 170, 183, 272, 742, @@ -2012,64 +1784,253 @@ var yyAct = [...]int{ 280, 685, 692, 282, 231, 248, 257, 700, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, - 383, 384, 385, 387, 294, 219, 312, 0, 0, 1386, - 0, 501, 0, 0, 0, 222, 0, 500, 0, 0, - 0, 270, 0, 0, 1387, 326, 0, 364, 208, 279, + 383, 384, 385, 387, 294, 219, 732, 719, 0, 0, + 668, 735, 639, 657, 744, 659, 662, 702, 618, 681, + 312, 654, 0, 643, 614, 650, 615, 641, 670, 222, + 674, 638, 721, 684, 734, 270, 0, 620, 644, 326, + 704, 364, 208, 279, 277, 392, 232, 225, 221, 207, + 254, 285, 324, 382, 318, 741, 274, 691, 0, 373, + 297, 0, 0, 0, 672, 724, 679, 715, 667, 703, + 628, 690, 736, 655, 699, 737, 260, 206, 175, 309, + 374, 236, 71, 0, 0, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 696, + 731, 652, 698, 218, 258, 224, 217, 389, 701, 747, + 613, 693, 0, 616, 619, 743, 727, 647, 648, 0, + 0, 0, 0, 0, 0, 0, 671, 680, 712, 665, + 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, + 689, 0, 0, 0, 624, 617, 0, 0, 0, 0, + 669, 0, 0, 0, 627, 0, 646, 713, 0, 611, + 244, 621, 298, 0, 717, 726, 666, 420, 730, 664, + 663, 733, 708, 625, 723, 658, 269, 623, 266, 171, + 186, 0, 656, 308, 347, 353, 722, 642, 651, 209, + 649, 351, 322, 406, 193, 234, 344, 327, 349, 688, + 706, 350, 275, 394, 339, 404, 421, 422, 216, 302, + 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, + 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, + 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, + 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, + 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, + 920, 416, 304, 393, 401, 293, 284, 181, 399, 291, + 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, + 301, 0, 176, 0, 375, 410, 435, 195, 637, 718, + 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, + 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, + 233, 413, 303, 190, 253, 371, 267, 276, 710, 746, + 321, 352, 199, 408, 372, 632, 636, 630, 631, 682, + 683, 633, 738, 739, 740, 714, 626, 0, 634, 635, + 0, 720, 728, 729, 687, 170, 183, 272, 742, 341, + 237, 433, 415, 411, 612, 629, 215, 640, 0, 0, + 653, 660, 661, 673, 675, 676, 677, 678, 686, 694, + 695, 697, 705, 707, 709, 711, 716, 725, 745, 172, + 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, + 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, + 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, + 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, + 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, + 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, + 685, 692, 282, 231, 248, 257, 700, 414, 377, 188, + 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, + 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, + 384, 385, 387, 294, 219, 732, 719, 0, 0, 668, + 735, 639, 657, 744, 659, 662, 702, 618, 681, 312, + 654, 0, 643, 614, 650, 615, 641, 670, 222, 674, + 638, 721, 684, 734, 270, 0, 620, 644, 326, 704, + 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, + 285, 324, 382, 318, 741, 274, 691, 0, 373, 297, + 0, 0, 0, 672, 724, 679, 715, 667, 703, 628, + 690, 736, 655, 699, 737, 260, 206, 175, 309, 374, + 236, 0, 0, 0, 167, 168, 169, 0, 0, 0, + 0, 0, 0, 0, 0, 197, 0, 204, 696, 731, + 652, 698, 218, 258, 224, 217, 389, 701, 747, 613, + 693, 0, 616, 619, 743, 727, 647, 648, 0, 0, + 0, 0, 0, 0, 0, 671, 680, 712, 665, 0, + 0, 0, 0, 0, 0, 0, 0, 645, 0, 689, + 0, 0, 0, 624, 617, 0, 0, 0, 0, 669, + 0, 0, 0, 627, 0, 646, 713, 0, 611, 244, + 621, 298, 0, 717, 726, 666, 420, 730, 664, 663, + 733, 708, 625, 723, 658, 269, 623, 266, 171, 186, + 0, 656, 308, 347, 353, 722, 642, 651, 209, 649, + 351, 322, 406, 193, 234, 344, 327, 349, 688, 706, + 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, + 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, + 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, + 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, + 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, + 211, 311, 397, 398, 210, 434, 189, 417, 182, 920, + 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, + 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, + 0, 176, 0, 375, 410, 435, 195, 637, 718, 388, + 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, + 425, 427, 428, 430, 194, 334, 247, 315, 405, 233, + 413, 303, 190, 253, 371, 267, 276, 710, 746, 321, + 352, 199, 408, 372, 632, 636, 630, 631, 682, 683, + 633, 738, 739, 740, 714, 626, 0, 634, 635, 0, + 720, 728, 729, 687, 170, 183, 272, 742, 341, 237, + 433, 415, 411, 612, 629, 215, 640, 0, 0, 653, + 660, 661, 673, 675, 676, 677, 678, 686, 694, 695, + 697, 705, 707, 709, 711, 716, 725, 745, 172, 173, + 184, 192, 202, 214, 227, 235, 245, 249, 252, 255, + 256, 259, 264, 281, 286, 287, 288, 289, 305, 306, + 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, + 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, + 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, + 396, 407, 419, 423, 246, 403, 424, 0, 280, 685, + 692, 282, 231, 248, 257, 700, 414, 377, 188, 348, + 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, + 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, + 385, 387, 294, 219, 732, 719, 0, 0, 668, 735, + 639, 657, 744, 659, 662, 702, 618, 681, 312, 654, + 0, 643, 614, 650, 615, 641, 670, 222, 674, 638, + 721, 684, 734, 270, 0, 620, 644, 326, 704, 364, + 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, + 324, 382, 318, 741, 274, 691, 0, 373, 297, 0, + 0, 0, 672, 724, 679, 715, 667, 703, 628, 690, + 736, 655, 699, 737, 260, 206, 175, 309, 374, 236, + 0, 0, 0, 167, 168, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 197, 0, 204, 696, 731, 652, + 698, 218, 258, 224, 217, 389, 701, 747, 613, 693, + 0, 616, 619, 743, 727, 647, 648, 0, 0, 0, + 0, 0, 0, 0, 671, 680, 712, 665, 0, 0, + 0, 0, 0, 0, 0, 0, 645, 0, 689, 0, + 0, 0, 624, 617, 0, 0, 0, 0, 669, 0, + 0, 0, 627, 0, 646, 713, 0, 611, 244, 621, + 298, 0, 717, 726, 666, 420, 730, 664, 663, 733, + 708, 625, 723, 658, 269, 623, 266, 171, 186, 0, + 656, 308, 347, 353, 722, 642, 651, 209, 649, 351, + 322, 406, 193, 234, 344, 327, 349, 688, 706, 350, + 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, + 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, + 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, + 178, 381, 402, 198, 362, 0, 0, 0, 180, 400, + 378, 292, 262, 263, 179, 0, 343, 220, 240, 211, + 311, 397, 398, 210, 434, 189, 417, 182, 622, 416, + 304, 393, 401, 293, 284, 181, 399, 291, 283, 268, + 230, 250, 337, 278, 338, 251, 300, 299, 301, 0, + 176, 0, 375, 410, 435, 195, 637, 718, 388, 426, + 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, + 427, 428, 430, 194, 334, 247, 315, 405, 233, 413, + 610, 748, 604, 603, 267, 276, 710, 746, 321, 352, + 199, 408, 372, 632, 636, 630, 631, 682, 683, 633, + 738, 739, 740, 714, 626, 0, 634, 635, 0, 720, + 728, 729, 687, 170, 183, 272, 742, 341, 237, 433, + 415, 411, 612, 629, 215, 640, 0, 0, 653, 660, + 661, 673, 675, 676, 677, 678, 686, 694, 695, 697, + 705, 707, 709, 711, 716, 725, 745, 172, 173, 184, + 192, 202, 214, 227, 235, 245, 249, 252, 255, 256, + 259, 264, 281, 286, 287, 288, 289, 305, 306, 307, + 310, 313, 314, 317, 319, 320, 323, 329, 330, 331, + 332, 333, 335, 342, 346, 354, 355, 356, 357, 358, + 360, 361, 365, 366, 367, 368, 376, 380, 395, 396, + 407, 419, 423, 246, 403, 424, 0, 280, 685, 692, + 282, 231, 248, 257, 700, 414, 377, 188, 348, 238, + 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, + 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, + 387, 294, 219, 732, 719, 0, 0, 668, 735, 639, + 657, 744, 659, 662, 702, 618, 681, 312, 654, 0, + 643, 614, 650, 615, 641, 670, 222, 674, 638, 721, + 684, 734, 270, 0, 620, 644, 326, 704, 364, 208, + 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, + 382, 318, 741, 274, 691, 0, 373, 297, 0, 0, + 0, 672, 724, 679, 715, 667, 703, 628, 690, 736, + 655, 699, 737, 260, 206, 175, 309, 374, 236, 0, + 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, + 0, 0, 0, 197, 0, 204, 696, 731, 652, 698, + 218, 258, 224, 217, 389, 701, 747, 613, 693, 0, + 616, 619, 743, 727, 647, 648, 0, 0, 0, 0, + 0, 0, 0, 671, 680, 712, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 645, 0, 689, 0, 0, + 0, 624, 617, 0, 0, 0, 0, 669, 0, 0, + 0, 627, 0, 646, 713, 0, 611, 244, 621, 298, + 0, 717, 726, 666, 420, 730, 664, 663, 733, 708, + 625, 723, 658, 269, 623, 266, 171, 186, 0, 656, + 308, 347, 353, 722, 642, 651, 209, 649, 351, 322, + 406, 193, 234, 344, 327, 349, 688, 706, 350, 275, + 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, + 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, + 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, + 381, 1088, 198, 362, 0, 0, 0, 180, 400, 378, + 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, + 397, 398, 210, 434, 189, 417, 182, 622, 416, 304, + 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, + 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, + 0, 375, 410, 435, 195, 637, 718, 388, 426, 431, + 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, + 428, 430, 194, 334, 247, 315, 405, 233, 413, 610, + 748, 604, 603, 267, 276, 710, 746, 321, 352, 199, + 408, 372, 632, 636, 630, 631, 682, 683, 633, 738, + 739, 740, 714, 626, 0, 634, 635, 0, 720, 728, + 729, 687, 170, 183, 272, 742, 341, 237, 433, 415, + 411, 612, 629, 215, 640, 0, 0, 653, 660, 661, + 673, 675, 676, 677, 678, 686, 694, 695, 697, 705, + 707, 709, 711, 716, 725, 745, 172, 173, 184, 192, + 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, + 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, + 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, + 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, + 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, + 419, 423, 246, 403, 424, 0, 280, 685, 692, 282, + 231, 248, 257, 700, 414, 377, 188, 348, 238, 177, + 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, + 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, + 294, 219, 732, 719, 0, 0, 668, 735, 639, 657, + 744, 659, 662, 702, 618, 681, 312, 654, 0, 643, + 614, 650, 615, 641, 670, 222, 674, 638, 721, 684, + 734, 270, 0, 620, 644, 326, 704, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, - 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, - 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, - 0, 0, 260, 206, 175, 309, 374, 236, 71, 0, - 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, - 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, - 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, - 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 512, 513, 591, 0, 0, 0, 559, 0, 514, 0, - 0, 507, 508, 510, 509, 511, 516, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, - 558, 0, 0, 420, 0, 0, 556, 0, 0, 0, - 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, - 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, - 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, + 318, 741, 274, 691, 0, 373, 297, 0, 0, 0, + 672, 724, 679, 715, 667, 703, 628, 690, 736, 655, + 699, 737, 260, 206, 175, 309, 374, 236, 0, 0, + 0, 167, 168, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 197, 0, 204, 696, 731, 652, 698, 218, + 258, 224, 217, 389, 701, 747, 613, 693, 0, 616, + 619, 743, 727, 647, 648, 0, 0, 0, 0, 0, + 0, 0, 671, 680, 712, 665, 0, 0, 0, 0, + 0, 0, 0, 0, 645, 0, 689, 0, 0, 0, + 624, 617, 0, 0, 0, 0, 669, 0, 0, 0, + 627, 0, 646, 713, 0, 611, 244, 621, 298, 0, + 717, 726, 666, 420, 730, 664, 663, 733, 708, 625, + 723, 658, 269, 623, 266, 171, 186, 0, 656, 308, + 347, 353, 722, 642, 651, 209, 649, 351, 322, 406, + 193, 234, 344, 327, 349, 688, 706, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, - 402, 198, 362, 0, 0, 0, 180, 400, 378, 292, + 601, 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, 397, - 398, 210, 434, 189, 417, 182, 0, 416, 304, 393, + 398, 210, 434, 189, 417, 182, 622, 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, - 375, 410, 435, 195, 0, 0, 388, 426, 431, 0, + 375, 410, 435, 195, 637, 718, 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, - 430, 194, 334, 247, 315, 405, 233, 413, 303, 190, - 253, 371, 267, 276, 0, 0, 321, 352, 199, 408, - 372, 546, 557, 552, 553, 550, 551, 545, 549, 548, - 547, 560, 537, 538, 539, 540, 542, 0, 554, 555, - 541, 170, 183, 272, 0, 341, 237, 433, 415, 411, - 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 172, 173, 184, 192, 202, + 430, 194, 334, 247, 315, 405, 233, 413, 610, 748, + 604, 603, 267, 276, 710, 746, 321, 352, 199, 408, + 372, 632, 636, 630, 631, 682, 683, 633, 738, 739, + 740, 714, 626, 0, 634, 635, 0, 720, 728, 729, + 687, 170, 183, 272, 742, 341, 237, 433, 415, 411, + 612, 629, 215, 640, 0, 0, 653, 660, 661, 673, + 675, 676, 677, 678, 686, 694, 695, 697, 705, 707, + 709, 711, 716, 725, 745, 172, 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, 419, - 423, 246, 403, 424, 0, 280, 0, 0, 282, 231, - 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, + 423, 246, 403, 424, 0, 280, 685, 692, 282, 231, + 248, 257, 700, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, - 219, 312, 0, 0, 0, 0, 501, 0, 0, 0, - 222, 0, 500, 0, 0, 0, 270, 0, 0, 0, + 219, 312, 0, 0, 1386, 0, 501, 0, 0, 0, + 222, 0, 500, 0, 0, 0, 270, 0, 0, 1387, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, - 0, 0, 0, 0, 0, 1498, 0, 260, 206, 175, + 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 71, 0, 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, - 528, 529, 530, 1499, 218, 258, 224, 217, 389, 0, + 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 512, 513, 0, 0, 0, + 0, 0, 0, 0, 0, 512, 513, 591, 0, 0, 0, 559, 0, 514, 0, 0, 507, 508, 510, 509, 511, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, 558, 0, 0, 420, 0, @@ -2109,9 +2070,9 @@ var yyAct = [...]int{ 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, - 0, 0, 260, 206, 175, 309, 374, 236, 71, 0, - 578, 167, 168, 169, 522, 521, 524, 525, 526, 527, - 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, + 1499, 0, 260, 206, 175, 309, 374, 236, 71, 0, + 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, + 0, 0, 197, 523, 204, 528, 529, 530, 1500, 218, 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2155,12 +2116,12 @@ var yyAct = [...]int{ 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, - 309, 374, 236, 71, 0, 0, 167, 168, 169, 522, + 309, 374, 236, 71, 0, 578, 167, 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 512, 513, 591, 0, 0, + 0, 0, 0, 0, 0, 512, 513, 0, 0, 0, 0, 559, 0, 514, 0, 0, 507, 508, 510, 509, 511, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, 558, 0, 0, 420, 0, @@ -2201,7 +2162,7 @@ var yyAct = [...]int{ 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 71, 0, - 0, 167, 168, 169, 522, 1404, 524, 525, 526, 527, + 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2247,7 +2208,7 @@ var yyAct = [...]int{ 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 71, 0, 0, 167, 168, 169, 522, - 1401, 524, 525, 526, 527, 0, 0, 197, 523, 204, + 1404, 524, 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2285,54 +2246,54 @@ var yyAct = [...]int{ 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, - 383, 384, 385, 387, 294, 219, 571, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, - 0, 0, 0, 0, 501, 0, 0, 0, 222, 0, - 500, 0, 0, 0, 270, 0, 0, 0, 326, 0, - 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, - 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, - 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, - 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, - 236, 71, 0, 0, 167, 168, 169, 522, 521, 524, - 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, - 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, - 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, + 383, 384, 385, 387, 294, 219, 312, 0, 0, 0, + 0, 501, 0, 0, 0, 222, 0, 500, 0, 0, + 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, + 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, + 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, + 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, + 0, 0, 260, 206, 175, 309, 374, 236, 71, 0, + 0, 167, 168, 169, 522, 1401, 524, 525, 526, 527, + 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, + 258, 224, 217, 389, 0, 0, 0, 498, 515, 0, + 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 512, 513, 0, 0, 0, 0, 559, - 0, 514, 0, 0, 507, 508, 510, 509, 511, 516, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, - 0, 298, 0, 558, 0, 0, 420, 0, 0, 556, - 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, - 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, - 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, - 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, - 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, - 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, - 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, - 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, - 211, 311, 397, 398, 210, 434, 189, 417, 182, 0, - 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, - 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, - 0, 176, 0, 375, 410, 435, 195, 0, 0, 388, - 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, - 425, 427, 428, 430, 194, 334, 247, 315, 405, 233, - 413, 303, 190, 253, 371, 267, 276, 0, 0, 321, - 352, 199, 408, 372, 546, 557, 552, 553, 550, 551, - 545, 549, 548, 547, 560, 537, 538, 539, 540, 542, - 0, 554, 555, 541, 170, 183, 272, 0, 341, 237, - 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, + 512, 513, 591, 0, 0, 0, 559, 0, 514, 0, + 0, 507, 508, 510, 509, 511, 516, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, + 558, 0, 0, 420, 0, 0, 556, 0, 0, 0, + 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, + 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, + 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, + 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, + 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, + 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, + 402, 198, 362, 0, 0, 0, 180, 400, 378, 292, + 262, 263, 179, 0, 343, 220, 240, 211, 311, 397, + 398, 210, 434, 189, 417, 182, 0, 416, 304, 393, + 401, 293, 284, 181, 399, 291, 283, 268, 230, 250, + 337, 278, 338, 251, 300, 299, 301, 0, 176, 0, + 375, 410, 435, 195, 0, 0, 388, 426, 431, 0, + 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, + 430, 194, 334, 247, 315, 405, 233, 413, 303, 190, + 253, 371, 267, 276, 0, 0, 321, 352, 199, 408, + 372, 546, 557, 552, 553, 550, 551, 545, 549, 548, + 547, 560, 537, 538, 539, 540, 542, 0, 554, 555, + 541, 170, 183, 272, 0, 341, 237, 433, 415, 411, + 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 172, 173, - 184, 192, 202, 214, 227, 235, 245, 249, 252, 255, - 256, 259, 264, 281, 286, 287, 288, 289, 305, 306, - 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, - 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, - 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, - 396, 407, 419, 423, 246, 403, 424, 0, 280, 0, - 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, - 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, - 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, - 385, 387, 294, 219, 312, 0, 0, 0, 0, 501, + 0, 0, 0, 0, 0, 172, 173, 184, 192, 202, + 214, 227, 235, 245, 249, 252, 255, 256, 259, 264, + 281, 286, 287, 288, 289, 305, 306, 307, 310, 313, + 314, 317, 319, 320, 323, 329, 330, 331, 332, 333, + 335, 342, 346, 354, 355, 356, 357, 358, 360, 361, + 365, 366, 367, 368, 376, 380, 395, 396, 407, 419, + 423, 246, 403, 424, 0, 280, 0, 0, 282, 231, + 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, + 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, + 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, + 219, 571, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 0, 0, 0, 501, 0, 0, 0, 222, 0, 500, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, @@ -2378,8 +2339,8 @@ var yyAct = [...]int{ 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, - 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, - 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, + 0, 0, 0, 0, 501, 0, 0, 0, 222, 0, + 500, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, @@ -2387,7 +2348,7 @@ var yyAct = [...]int{ 236, 71, 0, 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, - 0, 515, 0, 543, 0, 0, 0, 0, 0, 0, + 498, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, 0, 0, 0, 0, 559, 0, 514, 0, 0, 507, 508, 510, 509, 511, 516, @@ -2395,7 +2356,7 @@ var yyAct = [...]int{ 0, 298, 0, 558, 0, 0, 420, 0, 0, 556, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, - 351, 322, 406, 193, 234, 344, 327, 349, 2190, 0, + 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, @@ -2429,7 +2390,7 @@ var yyAct = [...]int{ 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, - 260, 206, 175, 309, 374, 236, 71, 0, 578, 167, + 260, 206, 175, 309, 374, 236, 71, 0, 0, 167, 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 515, 0, 543, 0, @@ -2441,7 +2402,7 @@ var yyAct = [...]int{ 0, 420, 0, 0, 556, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, - 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, + 344, 327, 349, 2191, 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, @@ -2475,7 +2436,7 @@ var yyAct = [...]int{ 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, - 236, 71, 0, 0, 167, 168, 169, 522, 521, 524, + 236, 71, 0, 578, 167, 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 515, 0, 543, 0, 0, 0, 0, 0, 0, @@ -2517,19 +2478,19 @@ var yyAct = [...]int{ 385, 387, 294, 219, 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, - 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, + 232, 225, 221, 207, 254, 285, 324, 382, 318, 544, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, + 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, + 260, 206, 175, 309, 374, 236, 71, 0, 0, 167, + 168, 169, 522, 521, 524, 525, 526, 527, 0, 0, + 197, 523, 204, 528, 529, 530, 0, 218, 258, 224, + 217, 389, 0, 0, 0, 0, 515, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, - 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, - 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, - 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 963, 962, 972, 973, 965, 966, - 967, 968, 969, 970, 971, 964, 0, 0, 974, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 244, 0, 298, 0, 0, 0, - 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, + 0, 0, 0, 0, 559, 0, 514, 0, 0, 507, + 508, 510, 509, 511, 516, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 0, 298, 0, 558, 0, + 0, 420, 0, 0, 556, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, @@ -2544,9 +2505,9 @@ var yyAct = [...]int{ 435, 195, 0, 0, 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, 371, - 267, 276, 0, 0, 321, 352, 199, 408, 372, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, + 267, 276, 0, 0, 321, 352, 199, 408, 372, 546, + 557, 552, 553, 550, 551, 545, 549, 548, 547, 560, + 537, 538, 539, 540, 542, 0, 554, 555, 541, 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2560,7 +2521,7 @@ var yyAct = [...]int{ 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, - 0, 0, 0, 0, 0, 0, 0, 0, 222, 794, + 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, @@ -2570,13 +2531,13 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 963, + 962, 972, 973, 965, 966, 967, 968, 969, 970, 971, + 964, 0, 0, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, - 0, 298, 0, 0, 0, 793, 420, 0, 0, 0, - 0, 0, 0, 790, 791, 269, 756, 266, 171, 186, - 784, 788, 308, 347, 353, 0, 0, 0, 209, 0, + 0, 298, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, + 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, @@ -2605,23 +2566,23 @@ var yyAct = [...]int{ 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, - 385, 387, 294, 219, 312, 0, 0, 0, 1066, 0, - 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, + 385, 387, 294, 219, 312, 0, 0, 0, 0, 0, + 0, 0, 0, 222, 794, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, - 168, 169, 0, 1068, 0, 0, 0, 0, 0, 0, + 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, - 217, 389, 952, 953, 951, 0, 0, 0, 0, 0, + 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, 0, - 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, + 793, 420, 0, 0, 0, 0, 0, 0, 790, 791, + 269, 756, 266, 171, 186, 784, 788, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, @@ -2650,61 +2611,61 @@ var yyAct = [...]int{ 403, 424, 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, - 345, 200, 363, 383, 384, 385, 387, 294, 219, 35, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, - 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, - 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, - 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, - 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, - 175, 309, 374, 236, 71, 0, 578, 167, 168, 169, - 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, - 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, + 0, 0, 0, 1066, 0, 0, 0, 0, 222, 0, + 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, + 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, + 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, + 236, 0, 0, 0, 167, 168, 169, 0, 1068, 0, + 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, + 0, 0, 218, 258, 224, 217, 389, 952, 953, 951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, - 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, - 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, - 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, - 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, - 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, - 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, - 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, - 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, - 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, - 417, 182, 0, 416, 304, 393, 401, 293, 284, 181, - 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, - 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, - 0, 0, 388, 426, 431, 0, 340, 196, 241, 229, - 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, - 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, - 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 170, 183, 272, - 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, + 0, 298, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, + 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, + 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, + 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, + 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, + 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, + 201, 178, 381, 402, 198, 362, 0, 0, 0, 180, + 400, 378, 292, 262, 263, 179, 0, 343, 220, 240, + 211, 311, 397, 398, 210, 434, 189, 417, 182, 0, + 416, 304, 393, 401, 293, 284, 181, 399, 291, 283, + 268, 230, 250, 337, 278, 338, 251, 300, 299, 301, + 0, 176, 0, 375, 410, 435, 195, 0, 0, 388, + 426, 431, 0, 340, 196, 241, 229, 336, 239, 271, + 425, 427, 428, 430, 194, 334, 247, 315, 405, 233, + 413, 303, 190, 253, 371, 267, 276, 0, 0, 321, + 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 170, 183, 272, 0, 341, 237, + 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 172, 173, 184, 192, 202, 214, 227, 235, 245, - 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, - 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, - 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, - 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, - 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, - 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, - 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, - 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, - 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, - 0, 1431, 0, 0, 0, 0, 222, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 172, 173, + 184, 192, 202, 214, 227, 235, 245, 249, 252, 255, + 256, 259, 264, 281, 286, 287, 288, 289, 305, 306, + 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, + 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, + 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, + 396, 407, 419, 423, 246, 403, 424, 0, 280, 0, + 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, + 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, + 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, + 385, 387, 294, 219, 35, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, + 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, - 0, 0, 167, 168, 169, 0, 1433, 0, 0, 0, + 0, 0, 0, 260, 206, 175, 309, 374, 236, 71, + 0, 578, 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2715,7 +2676,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, - 406, 193, 234, 344, 327, 349, 0, 1429, 350, 275, + 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, @@ -2743,25 +2704,25 @@ var yyAct = [...]int{ 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, - 294, 219, 312, 0, 0, 0, 0, 0, 0, 0, + 294, 219, 312, 0, 0, 0, 1431, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, - 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, + 0, 1433, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, - 0, 0, 0, 0, 0, 0, 0, 0, 269, 756, - 266, 171, 186, 754, 0, 308, 347, 353, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, - 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, + 349, 0, 1429, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, @@ -2789,22 +2750,22 @@ var yyAct = [...]int{ 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, - 0, 1431, 0, 0, 0, 0, 222, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, - 0, 0, 167, 168, 169, 0, 1433, 0, 0, 0, + 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, + 0, 0, 0, 269, 756, 266, 171, 186, 754, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, @@ -2834,61 +2795,61 @@ var yyAct = [...]int{ 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, - 294, 219, 35, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, - 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, - 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, - 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, - 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, + 294, 219, 312, 0, 0, 0, 1431, 0, 0, 0, + 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, + 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, + 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, + 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, + 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, + 0, 1433, 0, 0, 0, 0, 0, 0, 197, 0, + 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 260, 206, 175, 309, 374, 236, 71, 0, 0, - 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, - 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, - 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 244, 0, 298, 0, 0, - 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, - 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, - 234, 344, 327, 349, 0, 0, 350, 275, 394, 339, - 404, 421, 422, 216, 302, 412, 386, 418, 432, 187, - 213, 316, 379, 409, 370, 295, 390, 391, 265, 369, - 242, 174, 273, 429, 185, 359, 201, 178, 381, 402, - 198, 362, 0, 0, 0, 180, 400, 378, 292, 262, - 263, 179, 0, 343, 220, 240, 211, 311, 397, 398, - 210, 434, 189, 417, 182, 0, 416, 304, 393, 401, - 293, 284, 181, 399, 291, 283, 268, 230, 250, 337, - 278, 338, 251, 300, 299, 301, 0, 176, 0, 375, - 410, 435, 195, 0, 0, 388, 426, 431, 0, 340, - 196, 241, 229, 336, 239, 271, 425, 427, 428, 430, - 194, 334, 247, 315, 405, 233, 413, 303, 190, 253, - 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, + 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, + 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, + 349, 0, 0, 350, 275, 394, 339, 404, 421, 422, + 216, 302, 412, 386, 418, 432, 187, 213, 316, 379, + 409, 370, 295, 390, 391, 265, 369, 242, 174, 273, + 429, 185, 359, 201, 178, 381, 402, 198, 362, 0, + 0, 0, 180, 400, 378, 292, 262, 263, 179, 0, + 343, 220, 240, 211, 311, 397, 398, 210, 434, 189, + 417, 182, 0, 416, 304, 393, 401, 293, 284, 181, + 399, 291, 283, 268, 230, 250, 337, 278, 338, 251, + 300, 299, 301, 0, 176, 0, 375, 410, 435, 195, + 0, 0, 388, 426, 431, 0, 340, 196, 241, 229, + 336, 239, 271, 425, 427, 428, 430, 194, 334, 247, + 315, 405, 233, 413, 303, 190, 253, 371, 267, 276, + 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 183, 272, + 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, - 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 172, 173, 184, 192, 202, 214, - 227, 235, 245, 249, 252, 255, 256, 259, 264, 281, - 286, 287, 288, 289, 305, 306, 307, 310, 313, 314, - 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, - 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, - 366, 367, 368, 376, 380, 395, 396, 407, 419, 423, - 246, 403, 424, 0, 280, 0, 0, 282, 231, 248, - 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, - 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, - 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, + 0, 172, 173, 184, 192, 202, 214, 227, 235, 245, + 249, 252, 255, 256, 259, 264, 281, 286, 287, 288, + 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, + 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, + 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, + 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, + 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, + 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, + 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, + 363, 383, 384, 385, 387, 294, 219, 35, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, - 374, 236, 0, 0, 0, 167, 168, 169, 0, 0, - 1451, 0, 0, 1452, 0, 0, 197, 0, 204, 0, + 374, 236, 71, 0, 0, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2927,13 +2888,13 @@ var yyAct = [...]int{ 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, - 0, 0, 0, 0, 222, 0, 1099, 0, 0, 0, + 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, - 167, 168, 169, 0, 1098, 0, 0, 0, 0, 0, + 167, 168, 169, 0, 0, 1452, 0, 0, 1453, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2973,12 +2934,12 @@ var yyAct = [...]int{ 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, - 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, + 0, 1099, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, - 374, 236, 0, 0, 578, 167, 168, 169, 0, 0, + 374, 236, 0, 0, 0, 167, 168, 169, 0, 1098, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3023,7 +2984,7 @@ var yyAct = [...]int{ 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 260, 206, 175, 309, 374, 236, 71, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 0, 0, 578, 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, @@ -3069,7 +3030,7 @@ var yyAct = [...]int{ 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, - 374, 236, 0, 0, 0, 167, 168, 169, 0, 1433, + 374, 236, 71, 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3115,7 +3076,7 @@ var yyAct = [...]int{ 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, - 167, 168, 169, 0, 1068, 0, 0, 0, 0, 0, + 167, 168, 169, 0, 1433, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3160,7 +3121,7 @@ var yyAct = [...]int{ 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, - 374, 236, 0, 0, 0, 167, 168, 169, 0, 0, + 374, 236, 0, 0, 0, 167, 168, 169, 0, 1068, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3186,7 +3147,7 @@ var yyAct = [...]int{ 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 170, 183, 272, 1336, 341, + 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, @@ -3199,7 +3160,7 @@ var yyAct = [...]int{ 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, - 384, 385, 387, 294, 219, 312, 0, 1221, 0, 0, + 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, @@ -3232,7 +3193,7 @@ var yyAct = [...]int{ 371, 267, 276, 0, 0, 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 170, 183, 272, 0, 341, 237, 433, 415, 411, 0, + 170, 183, 272, 1336, 341, 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 173, 184, 192, 202, 214, @@ -3245,7 +3206,7 @@ var yyAct = [...]int{ 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, - 312, 0, 1219, 0, 0, 0, 0, 0, 0, 222, + 312, 0, 1221, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, @@ -3290,7 +3251,7 @@ var yyAct = [...]int{ 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, - 384, 385, 387, 294, 219, 312, 0, 1217, 0, 0, + 384, 385, 387, 294, 219, 312, 0, 1219, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, @@ -3336,7 +3297,7 @@ var yyAct = [...]int{ 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, - 312, 0, 1215, 0, 0, 0, 0, 0, 0, 222, + 312, 0, 1217, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, @@ -3381,7 +3342,7 @@ var yyAct = [...]int{ 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, - 384, 385, 387, 294, 219, 312, 0, 1213, 0, 0, + 384, 385, 387, 294, 219, 312, 0, 1215, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, @@ -3427,7 +3388,7 @@ var yyAct = [...]int{ 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, - 312, 0, 1209, 0, 0, 0, 0, 0, 0, 222, + 312, 0, 1213, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, @@ -3472,7 +3433,7 @@ var yyAct = [...]int{ 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, - 384, 385, 387, 294, 219, 312, 0, 1207, 0, 0, + 384, 385, 387, 294, 219, 312, 0, 1209, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, @@ -3518,7 +3479,7 @@ var yyAct = [...]int{ 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, - 312, 0, 1205, 0, 0, 0, 0, 0, 0, 222, + 312, 0, 1207, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, @@ -3563,13 +3524,13 @@ var yyAct = [...]int{ 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, - 384, 385, 387, 294, 219, 312, 0, 0, 0, 0, + 384, 385, 387, 294, 219, 312, 0, 1205, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 260, 206, 175, 309, 374, 236, 1180, 0, 0, + 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, @@ -3609,54 +3570,54 @@ var yyAct = [...]int{ 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, - 1081, 0, 0, 0, 0, 0, 0, 312, 0, 0, - 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, - 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, - 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, - 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, + 312, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, + 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, + 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, + 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, + 374, 236, 1180, 0, 0, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, + 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, - 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, - 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, - 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, - 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, - 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, - 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, - 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, - 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, - 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, - 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, - 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, - 397, 398, 210, 434, 189, 417, 182, 0, 416, 304, - 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, - 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, - 0, 375, 410, 435, 195, 0, 0, 388, 426, 431, - 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, - 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, - 190, 253, 371, 267, 276, 0, 0, 321, 352, 199, - 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, + 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, + 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, + 0, 350, 275, 394, 339, 404, 421, 422, 216, 302, + 412, 386, 418, 432, 187, 213, 316, 379, 409, 370, + 295, 390, 391, 265, 369, 242, 174, 273, 429, 185, + 359, 201, 178, 381, 402, 198, 362, 0, 0, 0, + 180, 400, 378, 292, 262, 263, 179, 0, 343, 220, + 240, 211, 311, 397, 398, 210, 434, 189, 417, 182, + 0, 416, 304, 393, 401, 293, 284, 181, 399, 291, + 283, 268, 230, 250, 337, 278, 338, 251, 300, 299, + 301, 0, 176, 0, 375, 410, 435, 195, 0, 0, + 388, 426, 431, 0, 340, 196, 241, 229, 336, 239, + 271, 425, 427, 428, 430, 194, 334, 247, 315, 405, + 233, 413, 303, 190, 253, 371, 267, 276, 0, 0, + 321, 352, 199, 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 170, 183, 272, 0, 341, 237, 433, 415, - 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 183, 272, 0, 341, + 237, 433, 415, 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 172, 173, 184, 192, - 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, - 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, - 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, - 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, - 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, - 419, 423, 246, 403, 424, 0, 280, 0, 0, 282, - 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, - 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, - 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, - 294, 219, 312, 0, 0, 0, 0, 0, 0, 0, - 1072, 222, 0, 0, 0, 0, 0, 270, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 173, 184, 192, 202, 214, 227, 235, 245, 249, 252, + 255, 256, 259, 264, 281, 286, 287, 288, 289, 305, + 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, + 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, + 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, + 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, + 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, + 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, + 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, + 384, 385, 387, 294, 219, 1081, 0, 0, 0, 0, + 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, + 0, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, @@ -3701,13 +3662,13 @@ var yyAct = [...]int{ 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, - 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, + 0, 0, 0, 0, 0, 1072, 222, 0, 0, 0, 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, - 0, 0, 167, 168, 169, 0, 928, 0, 0, 0, + 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3753,14 +3714,14 @@ var yyAct = [...]int{ 0, 373, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, 0, 0, 167, 168, 169, - 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, + 0, 928, 0, 0, 0, 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 489, 0, 244, 0, 298, 0, 0, 0, 0, 420, + 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, @@ -3787,7 +3748,7 @@ var yyAct = [...]int{ 289, 305, 306, 307, 310, 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, - 376, 380, 395, 396, 407, 419, 423, 488, 403, 424, + 376, 380, 395, 396, 407, 419, 423, 246, 403, 424, 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, @@ -3805,8 +3766,8 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, - 0, 0, 438, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 489, 0, 244, 0, 298, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, @@ -3833,7 +3794,7 @@ var yyAct = [...]int{ 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, - 419, 423, 246, 403, 424, 0, 280, 0, 0, 282, + 419, 423, 488, 403, 424, 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, @@ -3851,7 +3812,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 244, 0, 298, 0, 0, 0, 0, 420, + 0, 0, 244, 0, 298, 0, 0, 438, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, 406, 193, 234, 344, 327, @@ -3882,27 +3843,73 @@ var yyAct = [...]int{ 0, 280, 0, 0, 282, 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, 243, 223, 203, 345, 200, - 363, 383, 384, 385, 387, 294, 219, + 363, 383, 384, 385, 387, 294, 219, 312, 0, 0, + 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, + 0, 0, 270, 0, 0, 0, 326, 0, 364, 208, + 279, 277, 392, 232, 225, 221, 207, 254, 285, 324, + 382, 318, 0, 274, 0, 0, 373, 297, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 260, 206, 175, 309, 374, 236, 0, + 0, 0, 167, 168, 169, 0, 0, 0, 0, 0, + 0, 0, 0, 197, 0, 204, 0, 0, 0, 0, + 218, 258, 224, 217, 389, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 244, 0, 298, + 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 266, 171, 186, 0, 0, + 308, 347, 353, 0, 0, 0, 209, 0, 351, 322, + 406, 193, 234, 344, 327, 349, 0, 0, 350, 275, + 394, 339, 404, 421, 422, 216, 302, 412, 386, 418, + 432, 187, 213, 316, 379, 409, 370, 295, 390, 391, + 265, 369, 242, 174, 273, 429, 185, 359, 201, 178, + 381, 402, 198, 362, 0, 0, 0, 180, 400, 378, + 292, 262, 263, 179, 0, 343, 220, 240, 211, 311, + 397, 398, 210, 434, 189, 417, 182, 0, 416, 304, + 393, 401, 293, 284, 181, 399, 291, 283, 268, 230, + 250, 337, 278, 338, 251, 300, 299, 301, 0, 176, + 0, 375, 410, 435, 195, 0, 0, 388, 426, 431, + 0, 340, 196, 241, 229, 336, 239, 271, 425, 427, + 428, 430, 194, 334, 247, 315, 405, 233, 413, 303, + 190, 253, 371, 267, 276, 0, 0, 321, 352, 199, + 408, 372, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 170, 183, 272, 0, 341, 237, 433, 415, + 411, 0, 0, 215, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 172, 173, 184, 192, + 202, 214, 227, 235, 245, 249, 252, 255, 256, 259, + 264, 281, 286, 287, 288, 289, 305, 306, 307, 310, + 313, 314, 317, 319, 320, 323, 329, 330, 331, 332, + 333, 335, 342, 346, 354, 355, 356, 357, 358, 360, + 361, 365, 366, 367, 368, 376, 380, 395, 396, 407, + 419, 423, 246, 403, 424, 0, 280, 0, 0, 282, + 231, 248, 257, 0, 414, 377, 188, 348, 238, 177, + 205, 191, 212, 226, 228, 261, 290, 296, 325, 328, + 243, 223, 203, 345, 200, 363, 383, 384, 385, 387, + 294, 219, } var yyPact = [...]int{ - 3642, -1000, -342, 1577, -1000, -1000, -1000, -1000, -1000, -1000, + 4226, -1000, -345, 1636, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1528, 1171, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 533, 1232, -1000, 1451, 3993, -1000, 27383, 346, - -1000, 26928, 345, 243, 27383, -1000, 85, -1000, 75, 27383, - 80, 26473, -1000, -1000, -283, 12335, 1416, 6, 1, 27383, - 105, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1200, - 1494, 1505, 1523, 1037, 1581, -1000, 10502, 10502, 275, 275, - 275, 8682, -1000, -1000, 16443, 27383, 27383, 147, -1000, 1451, - -1000, -1000, 129, -1000, 217, 1181, -1000, 1176, -1000, 593, - 523, 214, 293, 289, 213, 212, 210, 209, 205, 204, - 202, 201, 222, -1000, 506, 506, -173, -177, 2612, 268, - 268, 268, 297, 1428, 1427, -1000, 493, -1000, 506, 506, - 114, 506, 506, 506, 506, 176, 173, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 193, 1451, 157, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1594, 1116, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 656, 1244, -1000, 1504, 2511, -1000, 27448, 403, + -1000, 26993, 402, 72, 27448, -1000, 116, -1000, 109, 27448, + 114, 26538, -1000, -1000, -278, 12400, 1466, 7, -4, 27448, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1222, + 1562, 1569, 1586, 1064, 1680, -1000, 10567, 10567, 363, 363, + 363, 8747, -1000, -1000, 16508, 27448, 27448, 225, -1000, 1504, + -1000, -1000, 149, -1000, 265, 1183, -1000, 1181, -1000, 456, + 493, 272, 328, 327, 268, 264, 260, 245, 244, 242, + 241, 237, 284, -1000, 542, 542, -144, -161, 3101, 340, + 340, 340, 378, 1485, 1484, -1000, 506, -1000, 542, 542, + 137, 542, 542, 542, 542, 217, 216, 542, 542, 542, + 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, + 542, 542, 193, 1504, 201, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -3929,26 +3936,26 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 27383, 111, 27383, -1000, - 431, 27383, 644, 644, 46, 644, 644, 644, 644, 61, - 439, -9, -1000, 58, 149, 144, 154, 632, 96, 60, - -1000, -1000, 152, 632, 69, -1000, 644, 6806, 6806, 6806, - -1000, 1441, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 295, -1000, -1000, -1000, -1000, 27383, 26018, 227, 566, -1000, - -1000, -1000, 33, -1000, -1000, 1092, 707, -1000, 12335, 1188, - 1184, 1184, -1000, -1000, 386, -1000, -1000, 13700, 13700, 13700, - 13700, 13700, 13700, 13700, 13700, 13700, 13700, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 27448, 113, 27448, -1000, + 468, 27448, 673, 673, 35, 673, 673, 673, 673, 83, + 462, -6, -1000, 77, 206, 204, 194, 619, 122, 58, + -1000, -1000, 195, 619, 111, -1000, 673, 6871, 6871, 6871, + -1000, 1495, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 377, -1000, -1000, -1000, -1000, 27448, 26083, 246, 618, -1000, + -1000, -1000, 9, -1000, -1000, 1033, 848, -1000, 12400, 2296, + 1188, 1188, -1000, -1000, 425, -1000, -1000, 13765, 13765, 13765, + 13765, 13765, 13765, 13765, 13765, 13765, 13765, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 1184, 430, -1000, 11880, 1184, 1184, 1184, 1184, 1184, - 1184, 1184, 1184, 12335, 1184, 1184, 1184, 1184, 1184, 1184, - 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, - 1184, -1000, -1000, -1000, 27383, -1000, 1184, 943, 1528, -1000, - 1171, -1000, -1000, -1000, 1445, 12335, 12335, 1528, -1000, 1379, - 10502, -1000, -1000, 1575, -1000, -1000, -1000, -1000, -1000, 659, - 1558, -1000, 15065, 428, 1557, 25563, -1000, 19186, 25108, 1165, - 8213, -83, -1000, -1000, -1000, 560, 18276, -1000, -1000, -1000, + -1000, 1188, 467, -1000, 11945, 1188, 1188, 1188, 1188, 1188, + 1188, 1188, 1188, 12400, 1188, 1188, 1188, 1188, 1188, 1188, + 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, + 1188, -1000, -1000, -1000, 27448, -1000, 1188, 125, 1594, -1000, + 1116, -1000, -1000, -1000, 1500, 12400, 12400, 1594, -1000, 1372, + 10567, -1000, -1000, 1453, -1000, -1000, -1000, -1000, -1000, 723, + 1618, -1000, 15130, 458, 1617, 25628, -1000, 19251, 25173, 1172, + 8278, -57, -1000, -1000, -1000, 591, 18341, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1441, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1495, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -3960,190 +3967,190 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1078, - 27383, -1000, -1000, 4336, 893, -1000, 1224, -1000, 1066, -1000, - 1190, 1158, 344, 893, 339, 338, 335, -1000, -107, -1000, - -1000, -1000, -1000, -1000, 506, 506, 219, 3993, 4215, -1000, - -1000, -1000, 24646, 1222, 893, -1000, 1218, -1000, 1470, 286, - 454, 454, 893, -1000, -1000, 27383, 893, 1466, 1464, 27383, - 27383, -1000, 24191, -1000, 23736, 23281, 841, 27383, 22826, 22371, - 21916, 21461, 21006, -1000, 1368, -1000, 1177, -1000, -1000, -1000, - 27383, 27383, 27383, 14, -1000, -1000, 27383, 893, -1000, -1000, - 809, 799, 506, 506, 792, 942, 938, 936, 506, 506, - 789, 935, 881, 148, 783, 781, 779, 911, 932, 108, - 891, 768, 777, 27383, 1213, 27383, -1000, 139, 591, 231, - 551, 1451, 1413, 1154, 294, 343, 893, 250, 250, -1000, - 7275, -1000, -1000, 917, 12335, -1000, 633, 632, 632, -1000, - -1000, -1000, -1000, -1000, -1000, 644, 27383, 633, -1000, -1000, - -1000, 632, 644, 27383, 644, 644, 644, 644, 632, 644, - 27383, 27383, 27383, 27383, 27383, 27383, 27383, 27383, 27383, 6806, - 6806, 6806, 485, 644, -1000, 1287, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 79, -1000, -1000, -1000, -1000, -1000, - 1577, -1000, -1000, -1000, -112, 1152, 20551, -1000, -287, -288, - -289, -290, -1000, -1000, -1000, -291, -292, -1000, -1000, -1000, - 12335, 12335, 12335, 12335, 610, 487, 13700, 752, 609, 13700, - 13700, 13700, 13700, 13700, 13700, 13700, 13700, 13700, 13700, 13700, - 13700, 13700, 13700, 13700, 631, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 893, -1000, 1573, 1153, 1153, 447, 447, - 447, 447, 447, 447, 447, 447, 447, 14155, 9137, 7275, - 1037, 1050, 1528, 10502, 10502, 12335, 12335, 11412, 10957, 10502, - 1438, 577, 707, 27383, -1000, 952, -1000, -1000, 13245, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1106, + 27448, -1000, -1000, 3848, 921, -1000, 1230, -1000, 1103, -1000, + 1196, 1254, 399, 921, 392, 390, 389, -1000, -102, -1000, + -1000, -1000, -1000, -1000, 542, 542, 276, 2511, 3866, -1000, + -1000, -1000, 24711, 1229, 921, -1000, 1228, -1000, 1516, 338, + 553, 553, 921, -1000, -1000, 27448, 921, 1515, 1513, 27448, + 27448, -1000, 24256, -1000, 23801, 23346, 834, 27448, 22891, 22436, + 21981, 21526, 21071, -1000, 1319, -1000, 1298, -1000, -1000, -1000, + 27448, 27448, 27448, 23, -1000, -1000, 27448, 921, -1000, -1000, + 832, 830, 542, 542, 809, 942, 941, 939, 542, 542, + 781, 923, 903, 179, 777, 776, 766, 849, 922, 106, + 838, 795, 759, 27448, 1227, 27448, -1000, 187, 514, 263, + 559, 1504, 1457, 1170, 373, 396, 921, 334, 334, -1000, + 7340, -1000, -1000, 920, 12400, -1000, 633, 619, 619, -1000, + -1000, -1000, -1000, -1000, -1000, 673, 27448, 633, -1000, -1000, + -1000, 619, 673, 27448, 673, 673, 673, 673, 619, 673, + 27448, 27448, 27448, 27448, 27448, 27448, 27448, 27448, 27448, 6871, + 6871, 6871, 500, 673, -1000, 1325, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 112, -1000, -1000, -1000, -1000, -1000, + 1636, -1000, -1000, -1000, -116, 1166, 20616, -1000, -289, -290, + -291, -292, -1000, -1000, -1000, -295, -296, -1000, -1000, -1000, + 12400, 12400, 12400, 12400, 790, 522, 13765, 780, 630, 13765, + 13765, 13765, 13765, 13765, 13765, 13765, 13765, 13765, 13765, 13765, + 13765, 13765, 13765, 13765, 685, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 921, -1000, 1634, 1266, 1266, 477, 477, + 477, 477, 477, 477, 477, 477, 477, 14220, 9202, 7340, + 1064, 1096, 1594, 10567, 10567, 12400, 12400, 11477, 11022, 10567, + 1490, 635, 848, 27448, -1000, 761, -1000, -1000, 13310, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 27383, 27383, 10502, 10502, 10502, 10502, 10502, -1000, 1150, - -1000, -170, 15988, 12335, -1000, 1505, 1037, 1575, 1475, 1568, - 477, 744, 1138, -1000, 996, 1505, 17821, 1122, -1000, 1575, - -1000, -1000, -1000, 27383, -1000, -1000, 20096, -1000, -1000, 6337, - 27383, 199, 27383, -1000, 1164, 1305, -1000, -1000, -1000, 1491, - 17366, 27383, 1116, 1115, -1000, -1000, 414, 7744, -83, -1000, - 7744, 1106, -1000, -49, -53, 9592, 446, -1000, -1000, -1000, - 2612, 14610, 995, -1000, 20, -1000, -1000, -1000, 1190, -1000, - 1190, 1190, 1190, 1190, 14, 14, 14, 14, -1000, -1000, - -1000, -1000, -1000, 1201, 1196, -1000, 1190, 1190, 1190, 1190, + -1000, 27448, 27448, 10567, 10567, 10567, 10567, 10567, -1000, 1164, + -1000, -170, 16053, 12400, 915, 1569, 1064, 1453, 1525, 1627, + 496, 755, 1154, -1000, 827, 1569, 17886, 1223, -1000, 1453, + -1000, -1000, -1000, 27448, -1000, -1000, 20161, -1000, -1000, 6402, + 27448, 236, 27448, -1000, 1131, 1397, -1000, -1000, -1000, 1555, + 17431, 27448, 1218, 1171, -1000, -1000, 453, 7809, -57, -1000, + 7809, 1124, -1000, -44, -78, 9657, 469, -1000, -1000, -1000, + 3101, 14675, 1000, -1000, 31, -1000, -1000, -1000, 1196, -1000, + 1196, 1196, 1196, 1196, 23, 23, 23, 23, -1000, -1000, + -1000, -1000, -1000, 1226, 1225, -1000, 1196, 1196, 1196, 1196, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1195, 1195, 1195, - 1191, 1191, 248, -1000, 12335, 116, 27383, 1479, 776, 139, - 280, 1267, 893, 893, 893, 280, -1000, 850, 843, -1000, - 1137, -1000, -1000, 1520, -1000, -1000, 403, 612, 605, 531, - 27383, 109, 195, -1000, 271, -1000, 27383, 1194, 1460, 454, - 893, -1000, 893, -1000, -1000, -1000, -1000, 409, -1000, -1000, - 893, 1135, -1000, 1117, 665, 599, 656, 595, 1135, -1000, - -1000, -129, 1135, -1000, 1135, -1000, 1135, -1000, 1135, -1000, - 1135, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 486, - 27383, 109, 631, -1000, 291, -1000, -1000, 631, 631, -1000, - -1000, -1000, -1000, 916, 915, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1220, 1220, 1220, + 1200, 1200, 331, -1000, 12400, 148, 27448, 1531, 758, 187, + 355, 1269, 921, 921, 921, 355, -1000, 863, 857, -1000, + 1152, -1000, -1000, 1585, -1000, -1000, 476, 689, 688, 594, + 27448, 142, 228, -1000, 313, -1000, 27448, 1213, 1512, 553, + 921, -1000, 921, -1000, -1000, -1000, -1000, 442, -1000, -1000, + 921, 1132, -1000, 1155, 714, 661, 686, 657, 1132, -1000, + -1000, -120, 1132, -1000, 1132, -1000, 1132, -1000, 1132, -1000, + 1132, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 552, + 27448, 142, 685, -1000, 370, -1000, -1000, 685, 685, -1000, + -1000, -1000, -1000, 914, 912, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -335, 27383, -1000, 133, 550, 181, 220, 179, 27383, - 118, 1499, 172, 164, 27383, 27383, 250, 1285, 27383, 1486, - 27383, -1000, -1000, -1000, -1000, 707, 27383, -1000, -1000, 644, - 644, -1000, -1000, 27383, 644, -1000, -1000, -1000, -1000, -1000, - -1000, 644, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 914, -1000, 27383, 27383, - -1000, -1000, -1000, -1000, -1000, 207, -65, 159, -1000, -1000, - -1000, -1000, 1502, -1000, 707, 487, 670, 537, -1000, -1000, - 761, -1000, -1000, 2525, -1000, -1000, -1000, -1000, 752, 13700, - 13700, 13700, 856, 2525, 2497, 876, 2680, 447, 651, 651, - 470, 470, 470, 470, 470, 819, 819, -1000, -1000, -1000, - -1000, 952, -1000, -1000, -1000, 952, 10502, 10502, 1130, 1184, - 397, -1000, 1200, -1000, -1000, 1505, 1015, 1015, 722, 951, - 555, 1556, 1015, 541, 1555, 1015, 1015, 10502, -1000, -1000, - 584, -1000, 12335, 952, -1000, 1254, 1120, 1112, 1015, 952, - 952, 1015, 1015, 27383, -1000, -279, -1000, -90, 394, 1184, - -1000, 19641, -1000, -1000, 952, 1092, 1445, -1000, -1000, 1412, - -1000, 1373, 12335, 12335, 12335, -1000, -1000, -1000, 1445, 1506, - -1000, 1387, 1386, 1548, 10502, 19186, 1575, -1000, -1000, -1000, - 378, 1548, 1105, 1184, -1000, 27383, 19186, 19186, 19186, 19186, - 19186, -1000, 1341, 1319, -1000, 1366, 1365, 1301, 27383, -1000, - 1042, 1037, 17366, 199, 1098, 19186, 27383, -1000, -1000, 19186, - 27383, 5868, -1000, 1106, -83, -59, -1000, -1000, -1000, -1000, - 707, -1000, 811, -1000, 2224, -1000, 274, -1000, -1000, -1000, - -1000, 496, 13, -1000, -1000, 14, 14, -1000, -1000, 446, - 736, 446, 446, 446, 913, 913, -1000, -1000, -1000, -1000, - -1000, 757, -1000, -1000, -1000, 745, -1000, -1000, 766, 1300, - 116, -1000, -1000, 506, 909, 1420, 27383, -1000, -1000, 987, - 133, 27383, 587, 1284, -1000, 1267, 1267, 1267, 27383, -1000, - -1000, -1000, -1000, 273, 27383, 1027, -1000, 112, 27383, 971, - 27383, -1000, 1024, 27383, -1000, 893, -1000, -1000, 7275, -1000, - 27383, 1184, -1000, -1000, -1000, -1000, 341, 1450, 1443, 109, - 112, 446, 893, -1000, -1000, -1000, -1000, -1000, -338, 1017, - 305, 119, 167, 27383, 27383, 27383, 27383, 27383, 408, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 161, 284, -1000, 27383, - 27383, 348, -1000, -1000, -1000, 632, -1000, -1000, 632, -1000, - -1000, -1000, -1000, -1000, -1000, 1434, -73, -310, -1000, -307, - -1000, -1000, -1000, -1000, 856, 2525, 2465, -1000, 13700, 13700, - -1000, -1000, 1015, 1015, 10502, 7275, 1528, 1445, -1000, -1000, - 498, 631, 498, 13700, 13700, -1000, 13700, 13700, -1000, -120, - 1040, 538, -1000, 12335, 733, -1000, -1000, 13700, 13700, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 325, 320, - 316, 27383, -1000, -1000, -1000, 796, 885, 1371, 707, 707, - -1000, -1000, 27383, -1000, -1000, -1000, -1000, 1542, 12335, -1000, - 1100, -1000, 5399, 1505, 1282, 27383, 1184, 1577, 15533, 27383, - 1129, -1000, 520, 1305, 1261, 1280, 1336, -1000, -1000, -1000, - -1000, 1293, -1000, 1206, -1000, -1000, -1000, -1000, -1000, 1037, - 1548, 19186, 1103, -1000, 1103, -1000, 365, -1000, -1000, -1000, - -75, -82, -1000, -1000, -1000, 2612, -1000, -1000, -1000, 641, - 13700, 1565, -1000, 882, 1456, -1000, 1455, -1000, -1000, 446, - 446, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1013, -1000, - 1011, 1097, 1007, 51, -1000, 1141, 1432, 506, 506, -1000, - 728, -1000, 893, -1000, -1000, 287, -1000, 1485, 27383, 1278, - 1276, 1272, -1000, 1519, 1094, -1000, 27383, -1000, -1000, 27383, - -1000, -1000, 1385, 116, 1001, -1000, -1000, -1000, 195, 27383, - -1000, 1153, 112, -1000, -1000, -1000, -1000, -1000, -1000, 27383, - 122, -1000, 1193, 949, -1000, 1264, -1000, -1000, -1000, -1000, - 101, 180, -1000, 27383, 340, 1300, 27383, -1000, -1000, -1000, - 644, 644, -1000, 1431, -1000, 893, -1000, 13700, 2525, 2525, - -1000, -1000, 952, -1000, 1505, -1000, 952, 1190, 1190, -1000, - 1190, 1191, -1000, 1190, 67, 1190, 65, 952, 952, 2410, - 2392, 2347, 2160, 1184, -114, -1000, 707, 12335, 1777, 1283, - 1184, 1184, 1184, 992, 880, 14, -1000, -1000, -1000, 1540, - 1517, 707, -1000, -1000, -1000, 1472, 1089, 1085, -1000, -1000, - 10047, 997, 1382, 363, 992, 1528, 27383, 12335, -1000, -1000, - 12335, 1189, -1000, 12335, -1000, -1000, -1000, 1528, 1528, 1103, - -1000, -1000, 468, -1000, -1000, -1000, -1000, -1000, 2525, -45, - -1000, -1000, -1000, -1000, -1000, 14, 875, 14, 710, -1000, - 687, -1000, -1000, -221, -1000, -1000, 1136, 1320, -1000, -1000, - 27383, -1000, -1000, 27383, 27383, 27383, 27383, 27383, -1000, -1000, - 191, -1000, 233, 986, -1000, -175, -1000, -1000, 1187, -1000, - -1000, -1000, 965, -1000, -130, 893, 27383, 27383, 27383, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2525, -1000, 1445, - -1000, -1000, 208, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 13700, 13700, 13700, 13700, 13700, 1505, 861, 707, 13700, - 13700, 18731, 27383, 27383, 16898, 14, 7, -1000, 12335, 12335, - 1453, -1000, 1184, -1000, 1124, 27383, 1184, 27383, -1000, 1505, - -1000, 707, 707, 27383, 707, 1505, -1000, -1000, 446, -1000, - 446, 961, 954, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 1187, -1000, -1000, -1000, 1094, -1000, 188, 27383, -1000, - 195, -1000, -181, -187, 1490, 27383, -1000, -1000, 7275, -1000, - -1000, 1186, 1266, -1000, -1000, -1000, -1000, 1254, 1254, 1254, - 1254, 497, 952, -1000, 1254, 1254, 983, -1000, 983, 983, - 394, -274, -1000, 1410, 1393, 707, 1092, 1563, -1000, 1184, - 1577, 361, 1085, -1000, -1000, 980, -1000, -1000, -1000, -1000, - -1000, 1488, 1184, 1183, -1000, -1000, -1000, 1171, 969, 1091, - -1000, 500, 27383, 27383, -1000, -1000, -1000, -1000, 952, 153, - -135, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 7, 259, - -1000, 1403, 1393, -1000, 1515, 1406, 1513, -1000, 27383, 1085, - 27383, -1000, 1171, 12790, 27383, 211, -1000, 7275, 4930, 964, - -1000, -1000, 1352, -124, -168, 1399, 1401, 1401, 1403, -1000, - 1512, 1511, -1000, 860, 1508, 851, 1019, -1000, 211, 1254, - 952, 957, -1000, -57, -1000, -1000, -1000, -1000, -1000, 1264, - -1000, 1348, -1000, 1397, 734, -1000, -1000, -1000, -1000, 812, - 767, -1000, 657, -1000, -1000, -1000, -1000, 1270, 247, -1000, - -1000, -130, -132, -1000, 683, -1000, -1000, -1000, -1000, -1000, - 1269, -1000, 1552, 137, -1000, -136, -1000, -1000, -1000, 1562, - 413, 413, -1000, -169, -1000, -1000, -1000, 232, 727, -1000, - -1000, -1000, -1000, -1000, + -1000, -337, 27448, -1000, 167, 550, 221, 261, 212, 27448, + 163, 1541, 190, 214, 27448, 27448, 334, 1324, 27448, 1545, + 27448, -1000, -1000, -1000, -1000, 848, 27448, -1000, -1000, 673, + 673, -1000, -1000, 27448, 673, -1000, -1000, -1000, -1000, -1000, + -1000, 673, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 911, -1000, 27448, 27448, + -1000, -1000, -1000, -1000, -1000, 32, -56, 191, -1000, -1000, + -1000, -1000, 1566, -1000, 848, 522, 545, 526, -1000, -1000, + 740, -1000, -1000, 1304, -1000, -1000, -1000, -1000, 780, 13765, + 13765, 13765, 565, 1304, 1876, 2017, 2178, 477, 641, 641, + 479, 479, 479, 479, 479, 1086, 1086, -1000, -1000, -1000, + -1000, 761, -1000, -1000, -1000, 761, 10567, 10567, 1130, 1188, + 441, -1000, 1222, -1000, -1000, 1569, 1038, 1038, 1133, 1067, + 601, 1615, 1038, 588, 1608, 1038, 1038, 10567, -1000, -1000, + 675, -1000, 12400, 761, -1000, 883, 1127, 1126, 1038, 761, + 761, 1038, 1038, 27448, -1000, -283, -1000, -73, 470, 1188, + -1000, 19706, -1000, -1000, 761, 1033, -1000, 1500, -1000, -1000, + 1469, -1000, 1363, 12400, 12400, 12400, -1000, -1000, -1000, 1500, + 1573, -1000, 1411, 1402, 1601, 10567, 19251, 1453, -1000, -1000, + -1000, 440, 1601, 1146, 1188, -1000, 27448, 19251, 19251, 19251, + 19251, 19251, -1000, 1338, 1337, -1000, 1355, 1354, 1364, 27448, + -1000, 1088, 1064, 17431, 236, 1074, 19251, 27448, -1000, -1000, + 19251, 27448, 5933, -1000, 1124, -57, -70, -1000, -1000, -1000, + -1000, 848, -1000, 807, -1000, 2355, -1000, 321, -1000, -1000, + -1000, -1000, 463, 14, -1000, -1000, 23, 23, -1000, -1000, + 469, 702, 469, 469, 469, 908, 908, -1000, -1000, -1000, + -1000, -1000, 756, -1000, -1000, -1000, 752, -1000, -1000, 750, + 1267, 148, -1000, -1000, 542, 907, 1472, 27448, -1000, -1000, + 994, 167, 27448, 640, 1323, -1000, 1269, 1269, 1269, 27448, + -1000, -1000, -1000, -1000, 3197, 27448, 1084, -1000, 130, 27448, + 977, 27448, -1000, 1072, 27448, -1000, 921, -1000, -1000, 7340, + -1000, 27448, 1188, -1000, -1000, -1000, -1000, 395, 1501, 1498, + 142, 130, 469, 921, -1000, -1000, -1000, -1000, -1000, -340, + 1068, 381, 144, 160, 27448, 27448, 27448, 27448, 27448, 420, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 210, 366, -1000, + 27448, 27448, 418, -1000, -1000, -1000, 619, -1000, -1000, 619, + -1000, -1000, -1000, -1000, -1000, -1000, 1493, -68, -313, -1000, + -308, -1000, -1000, -1000, -1000, 565, 1304, 1793, -1000, 13765, + 13765, -1000, -1000, 1038, 1038, 10567, 7340, 1594, 1500, -1000, + -1000, 269, 685, 269, 13765, 13765, -1000, 13765, 13765, -1000, + -114, 1108, 546, -1000, 12400, 707, -1000, -1000, 13765, 13765, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 386, + 384, 383, 27448, -1000, -1000, -1000, 845, 905, 1345, 848, + 848, -1000, -1000, 27448, -1000, -1000, -1000, -1000, 1598, 12400, + -1000, 1123, -1000, 5464, 1569, 1320, 27448, 1188, 1636, 15598, + 27448, 1185, -1000, 548, 1397, 1292, 1318, 1385, -1000, -1000, + -1000, -1000, 1329, -1000, 1277, -1000, -1000, -1000, -1000, -1000, + 1064, 1601, 19251, 1059, -1000, 1059, -1000, 435, -1000, -1000, + -1000, -71, -87, -1000, -1000, -1000, 3101, -1000, -1000, -1000, + 664, 13765, 1626, -1000, 904, 1511, -1000, 1510, -1000, -1000, + 469, 469, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1036, + -1000, 1012, 1121, 992, 62, -1000, 1249, 1491, 542, 542, + -1000, 747, -1000, 921, -1000, -1000, 380, -1000, 1539, 27448, + 1307, 1290, 1288, -1000, 1584, 1090, -1000, 27448, -1000, -1000, + 27448, -1000, -1000, 1399, 148, 983, -1000, -1000, -1000, 228, + 27448, -1000, 1266, 130, -1000, -1000, -1000, -1000, -1000, -1000, + 27448, 180, -1000, 1212, 784, -1000, 1192, -1000, -1000, -1000, + -1000, 141, 207, -1000, 27448, 400, 1267, 27448, -1000, -1000, + -1000, 673, 673, -1000, 1489, -1000, 921, -1000, 13765, 1304, + 1304, -1000, -1000, 761, -1000, 1569, -1000, 761, 1196, 1196, + -1000, 1196, 1200, -1000, 1196, 98, 1196, 78, 761, 761, + 1734, 1538, 1276, 1184, 1188, -109, -1000, 848, 12400, 996, + 974, 1188, 1188, 1188, 976, 898, 23, -1000, -1000, -1000, + 1575, 1583, 848, -1000, -1000, -1000, 1502, 1014, 1016, -1000, + -1000, 10112, 980, 1377, 431, 976, 1594, 27448, 12400, -1000, + -1000, 12400, 1193, -1000, 12400, -1000, -1000, -1000, 1594, 1594, + 1059, -1000, -1000, 471, -1000, -1000, -1000, -1000, -1000, 1304, + 12, -1000, -1000, -1000, -1000, -1000, 23, 892, 23, 742, + -1000, 732, -1000, -1000, -206, -1000, -1000, 1268, 1308, -1000, + -1000, 27448, -1000, -1000, 27448, 27448, 27448, 27448, 27448, -1000, + -1000, 218, -1000, 300, 972, -1000, -166, -1000, -1000, 1191, + -1000, -1000, -1000, 969, -1000, -123, 921, 27448, 27448, 27448, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1304, -1000, + 1500, -1000, -1000, 205, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 13765, 13765, 13765, 13765, 13765, 1569, 890, 848, + 13765, 13765, 18796, 27448, 27448, 16963, 23, 0, -1000, 12400, + 12400, 1509, -1000, 1188, -1000, 1189, 27448, 1188, 27448, -1000, + 1569, -1000, 848, 848, 27448, 848, 1569, -1000, -1000, 469, + -1000, 469, 948, 888, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1191, -1000, -1000, -1000, 1090, -1000, 227, 27448, + -1000, 228, -1000, -171, -172, 1548, 27448, -1000, -1000, 7340, + -1000, -1000, 1190, 1258, -1000, -1000, -1000, -1000, 883, 883, + 883, 883, 173, 761, -1000, 883, 883, 968, -1000, 968, + 968, 470, -273, -1000, 1454, 1456, 848, 1033, 1624, -1000, + 1188, 1636, 414, 1016, -1000, -1000, 966, -1000, -1000, -1000, + -1000, -1000, 1547, 1188, 1187, -1000, -1000, -1000, 1116, 958, + 1019, -1000, 541, 27448, 27448, -1000, -1000, -1000, -1000, 761, + 159, -133, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 0, + 270, -1000, 1437, 1456, -1000, 1582, 1440, 1580, -1000, 27448, + 1016, 27448, -1000, 1116, 12855, 27448, 209, -1000, 7340, 4995, + 956, -1000, -1000, 1322, -118, -139, 1429, 1445, 1445, 1437, + -1000, 1579, 1578, -1000, 886, 1574, 873, 1007, -1000, 209, + 883, 761, 952, -1000, -49, -1000, -1000, -1000, -1000, -1000, + 1192, -1000, 1282, -1000, 1425, 734, -1000, -1000, -1000, -1000, + 866, 862, -1000, 852, -1000, -1000, -1000, -1000, 1286, 326, + -1000, -1000, -123, -126, -1000, 729, -1000, -1000, -1000, -1000, + -1000, 1278, -1000, 1605, 182, -1000, -136, -1000, -1000, -1000, + 1622, 564, 564, -1000, -141, -1000, -1000, -1000, 320, 774, + -1000, -1000, -1000, -1000, -1000, } var yyPgo = [...]int{ - 0, 1865, 1864, 11, 126, 85, 1862, 1861, 1860, 1857, - 133, 129, 127, 1855, 1853, 1848, 1845, 1841, 1840, 1839, - 1838, 1837, 1836, 1835, 1834, 59, 137, 37, 42, 142, - 1829, 1827, 25, 1826, 1825, 1823, 120, 119, 523, 1822, - 121, 1821, 1819, 1818, 1817, 1816, 1815, 1814, 1813, 1812, - 1811, 1809, 1804, 1803, 1802, 208, 1801, 1798, 8, 1797, - 29, 1795, 1794, 1792, 1791, 1788, 89, 1785, 1779, 1778, - 114, 1776, 1774, 51, 109, 50, 78, 1772, 1769, 81, - 124, 1766, 64, 102, 1765, 2222, 1763, 45, 90, 77, - 1762, 46, 1761, 1760, 88, 1756, 1755, 1750, 76, 1749, - 1748, 2953, 1746, 75, 82, 17, 65, 1744, 1741, 1740, - 1739, 30, 713, 1738, 1737, 23, 1736, 1735, 131, 1734, - 86, 28, 1733, 15, 14, 22, 1730, 83, 1728, 41, - 58, 35, 1727, 87, 1724, 1722, 1718, 1717, 33, 1716, - 79, 101, 31, 1715, 1714, 20, 7, 1712, 1710, 1709, - 1707, 1706, 1702, 6, 1700, 5, 1699, 39, 1695, 10, - 16, 74, 113, 24, 13, 1693, 122, 1691, 21, 115, - 69, 111, 1689, 1688, 1672, 802, 143, 1671, 1669, 47, - 1668, 91, 100, 1667, 162, 1666, 1665, 61, 1284, 2712, - 38, 116, 1664, 1663, 2150, 53, 80, 18, 1661, 72, - 1660, 1659, 1658, 125, 117, 63, 772, 48, 1657, 1655, - 1654, 1653, 1652, 1651, 1650, 26, 34, 19, 104, 32, - 1649, 1647, 1646, 66, 56, 1644, 107, 106, 73, 98, - 1638, 118, 93, 57, 1634, 43, 1631, 1630, 1625, 1624, - 44, 1622, 1619, 1616, 1614, 103, 105, 68, 36, 1613, - 40, 71, 110, 108, 1601, 27, 139, 9, 1600, 3, - 0, 1599, 4, 128, 171, 99, 1598, 1595, 1, 1594, - 2, 1591, 1590, 84, 1589, 1588, 1586, 1585, 1868, 361, - 112, 1583, 123, + 0, 1940, 1939, 18, 90, 84, 1937, 1935, 1934, 1921, + 128, 127, 126, 1918, 1916, 1915, 1914, 1913, 1912, 1911, + 1910, 1909, 1904, 1899, 1898, 63, 118, 41, 47, 138, + 1896, 1895, 33, 1893, 1887, 1885, 123, 120, 574, 1884, + 117, 1881, 1879, 1878, 1876, 1875, 1856, 1852, 1851, 1850, + 1849, 1847, 1846, 1844, 1843, 226, 1842, 1841, 13, 1838, + 36, 1837, 1836, 1830, 1825, 1824, 89, 1823, 1822, 1820, + 115, 1819, 1818, 50, 365, 57, 80, 1817, 1816, 77, + 124, 1815, 61, 102, 1814, 382, 1813, 42, 75, 104, + 1811, 44, 1810, 1809, 64, 1807, 1806, 1804, 76, 1803, + 1802, 2922, 1801, 73, 81, 20, 40, 1799, 1796, 1793, + 1792, 37, 2115, 1791, 1790, 23, 1789, 1788, 139, 1787, + 87, 17, 1783, 14, 12, 22, 1781, 86, 1780, 28, + 56, 34, 1779, 85, 1778, 1775, 1774, 1771, 25, 1770, + 78, 106, 24, 1769, 1768, 7, 8, 1767, 1766, 1765, + 1764, 1763, 1761, 10, 1756, 5, 1755, 35, 1751, 6, + 21, 74, 119, 30, 16, 1750, 159, 1749, 29, 114, + 72, 110, 1748, 1747, 1746, 878, 141, 1738, 1737, 67, + 1736, 103, 93, 1735, 173, 1734, 1731, 68, 1290, 2821, + 9, 113, 1726, 1724, 2119, 53, 79, 27, 1722, 98, + 1719, 1718, 1716, 125, 135, 45, 826, 46, 1715, 1712, + 1711, 1709, 1707, 1706, 1705, 31, 100, 26, 111, 32, + 1703, 1700, 1699, 65, 51, 1698, 109, 108, 71, 122, + 1695, 116, 105, 58, 1692, 43, 1691, 1690, 1689, 1688, + 48, 1687, 1686, 1684, 1682, 99, 88, 69, 38, 1680, + 39, 66, 94, 91, 1679, 15, 121, 11, 1664, 3, + 0, 1662, 4, 130, 171, 107, 1660, 1659, 1, 1656, + 2, 1655, 1654, 82, 1653, 1652, 1651, 1650, 174, 860, + 112, 1649, 131, } //line sql.y:5200 @@ -4777,7 +4784,7 @@ var yyR2 = [...]int{ 2, 3, 0, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 3, 3, 2, 2, 3, 1, 3, 2, 1, 2, 1, 2, - 2, 3, 3, 3, 6, 4, 7, 6, 1, 3, + 2, 4, 3, 3, 6, 4, 7, 6, 1, 3, 2, 2, 2, 2, 1, 1, 1, 3, 2, 1, 1, 1, 0, 1, 1, 0, 3, 0, 2, 0, 2, 1, 2, 2, 0, 1, 1, 0, 1, 1, @@ -4920,7 +4927,7 @@ var yyChk = [...]int{ 100, -189, -194, -124, -278, 65, 66, 335, 336, 337, 338, 343, 339, 113, 54, 330, 324, 333, 332, 331, 328, 329, 326, 327, 341, 342, 169, 325, 163, 139, - 334, -260, -188, 41, 289, 289, -101, 227, -5, -4, + 334, -260, -188, 41, 289, 289, -101, -55, -5, -4, -278, 6, 21, 22, -142, 18, 17, -279, 83, -64, -77, 60, 61, -79, 22, 37, 64, 62, 21, -56, -76, 135, -85, -194, -76, -175, 168, -175, -175, -165, @@ -4968,7 +4975,7 @@ var yyChk = [...]int{ -278, -134, -85, -278, -282, -278, -282, -118, -278, -282, -118, -282, -118, -282, -282, -118, -282, -118, -282, -282, -118, -278, -278, -278, -278, -278, -278, -278, -203, -272, - -273, -104, -101, -278, 88, -138, -3, -55, -157, 20, + -273, -104, -101, -278, 227, -138, -3, -55, -157, 20, 32, -85, -139, -140, -85, -138, 56, -74, -76, -79, 60, 61, 94, 12, -192, -191, 23, -189, 88, 150, 12, -102, 27, -101, -87, -88, -89, -90, -104, -128, @@ -5007,89 +5014,89 @@ var yyChk = [...]int{ -129, 88, -74, -129, 88, -74, -74, -69, 22, 37, -132, -133, 114, -129, -279, -112, -189, -189, -74, -75, -75, -74, -74, 82, -274, 317, 318, 439, -197, 199, - -196, 23, -194, 88, -122, -121, -142, -279, -143, 27, - 10, 128, 82, 19, 82, -141, 25, 26, -142, -113, - -189, 89, 92, -86, 82, 12, -79, -101, -191, 135, - -195, -101, -161, 199, -101, 31, 82, -97, -99, -98, - -100, 63, 67, 69, 64, 65, 66, 70, -200, 23, - -87, -3, -278, -101, -94, -280, 82, 12, 74, -280, - 82, 150, -169, -171, 82, 316, 318, 319, 73, 101, - -85, -217, 143, -242, -241, -240, -224, -226, -227, -228, - 83, -144, -220, 284, -215, -215, -215, -215, -215, -216, - -166, -216, -216, -216, 81, 81, -215, -215, -215, -215, - -218, 81, -218, -218, -219, 81, -219, -253, -85, -250, - -249, -247, -248, 175, 95, 347, 74, -245, -141, 89, - -83, -182, 169, -251, -248, -260, -260, -260, -182, -260, - 88, -260, 88, 82, 17, -225, -224, -130, 224, -255, - 199, -252, -246, 81, 29, -232, -233, -233, 150, -260, - 82, 27, 106, 106, 106, 106, 347, 155, 31, -224, - -130, -205, 167, -205, -205, 88, 88, -178, 471, -94, - -82, 216, 118, 205, 205, 164, 164, 218, -101, 229, - 230, 228, 21, 217, 219, 221, 207, -101, -101, -181, - 73, -96, -101, 24, -194, -101, -179, -179, -101, -179, - -179, 88, -101, -189, -66, 317, 347, 20, -67, 20, - 98, 99, 100, -120, -112, -112, -112, -73, 189, 109, - -279, -279, -74, -74, -278, 150, -5, -142, -279, -279, - 82, 74, 23, 12, 12, -279, 12, 12, -279, -279, - -74, -135, -133, 116, -85, -279, -279, 82, 82, -279, - -279, -279, -279, -279, -273, 438, 318, -105, 71, 168, - 72, -278, -196, -279, -157, 39, 47, 58, -85, -85, - -140, -157, -173, 20, 12, 54, 54, -106, 13, -76, - -87, -79, 150, -106, -110, 31, 54, -3, -278, -278, - -164, -168, -129, -88, -89, -89, -88, -89, 63, 63, - 63, 68, 63, 68, 63, -98, -194, -279, -279, -3, - -161, 74, -87, -101, -87, -103, -194, 135, -170, -172, - 320, 317, 323, -260, 88, 82, -240, -228, 98, 110, - 30, 73, 281, 95, 171, 29, 170, -221, 285, -216, - -216, -217, -260, 88, 144, -217, -217, -217, -223, 88, - -223, 89, 89, 83, -32, -27, -28, 32, 77, -247, - -235, 88, 38, -189, 83, -82, -101, 110, 73, -251, - -251, -251, -194, 16, -159, -189, 82, 83, -131, 225, - -129, 83, -189, 83, -159, -233, -190, -189, -278, 164, - 30, 30, -130, -131, -217, -260, 473, 472, 83, 166, - 223, -84, 330, 88, 84, -101, -101, -101, -101, -101, - 158, 155, 208, 167, -94, -101, 82, -60, 184, 179, - -199, -199, 32, 317, 450, 448, -73, 109, -112, -112, - -279, -279, -75, -190, -138, -157, -207, 144, 256, 188, - 254, 250, 270, 261, 283, 252, 284, -205, -207, -112, - -112, -112, -112, 344, -138, 117, -85, 115, -112, -112, - 165, 165, 165, -162, 40, 88, 88, 59, -101, -136, - 14, -85, 135, -142, -163, 73, -164, -123, -125, -124, - -278, -158, -279, -189, -162, -106, 82, 118, -92, -91, - 73, 74, -93, 73, -91, 63, 63, -279, -106, -87, - -106, -106, 150, 317, 321, 322, -240, 98, -112, 10, - 88, 29, 29, -217, -217, 83, 82, 83, 82, 83, - 82, -183, 384, 110, -28, -27, -235, -235, 89, -260, - 166, 24, -101, 73, 73, 73, 17, 82, -224, -129, - 54, -250, 83, -254, -255, -101, -111, -131, -101, -81, - 214, 222, 81, 85, -262, 74, 205, 281, 205, -101, - -60, -32, -101, -179, -179, 32, -260, -112, -279, -142, - -279, -215, -215, -215, -219, -215, 244, -215, 244, -279, - -279, 20, 20, 20, 20, -278, -65, 340, -85, 82, - 82, -278, -278, -278, -279, 88, -216, -137, 15, 17, - 28, -163, 82, -279, -279, 82, 54, 150, -279, -138, - -168, -85, -85, 81, -85, -138, -106, -115, -216, 88, - -216, 89, 89, 384, 30, 78, 79, 80, 30, 75, - 76, -101, -101, -101, -101, -159, -189, 201, 183, -279, - 82, -222, 347, 350, -160, 81, 83, -259, 347, -261, - -260, -189, -189, -189, -157, -216, -260, -112, -112, -112, - -112, -112, -142, 88, -112, -112, -159, -279, -159, -159, - -197, -216, -146, -151, -176, -85, -121, 29, -125, 54, - -3, -189, -123, -189, -142, -159, -142, -217, -217, 83, - 83, -160, 202, -101, -255, 351, 351, 23, -159, -258, - -257, -190, 81, 74, -279, -279, -279, -279, -68, 128, - 347, -279, -279, -279, -279, -279, -279, -105, -149, 434, - -154, 43, -152, -153, 44, -150, 45, 53, 10, -123, - 150, 83, 23, -278, 81, -3, 83, 82, 118, -159, - -101, -279, 345, 70, 348, -146, 48, 262, -156, -155, - 52, 44, -153, 17, 46, 17, -164, -189, -3, -112, - 198, -159, -58, 347, -257, -239, -190, 88, 89, 83, - 59, 346, 349, -147, 50, -145, 49, -145, -155, 17, - 17, 88, 17, 88, -58, -279, -279, 83, -59, 213, - 438, -262, 59, -148, 51, 73, 101, 88, 88, 88, - -269, -270, 73, 176, -259, 347, 73, 101, -270, 73, - 11, 10, 215, 348, -268, 184, 179, 182, 31, -268, - 349, 178, 30, 98, + -196, 23, -194, 88, -122, -121, 88, -142, -279, -143, + 27, 10, 128, 82, 19, 82, -141, 25, 26, -142, + -113, -189, 89, 92, -86, 82, 12, -79, -101, -191, + 135, -195, -101, -161, 199, -101, 31, 82, -97, -99, + -98, -100, 63, 67, 69, 64, 65, 66, 70, -200, + 23, -87, -3, -278, -101, -94, -280, 82, 12, 74, + -280, 82, 150, -169, -171, 82, 316, 318, 319, 73, + 101, -85, -217, 143, -242, -241, -240, -224, -226, -227, + -228, 83, -144, -220, 284, -215, -215, -215, -215, -215, + -216, -166, -216, -216, -216, 81, 81, -215, -215, -215, + -215, -218, 81, -218, -218, -219, 81, -219, -253, -85, + -250, -249, -247, -248, 175, 95, 347, 74, -245, -141, + 89, -83, -182, 169, -251, -248, -260, -260, -260, -182, + -260, 88, -260, 88, 82, 17, -225, -224, -130, 224, + -255, 199, -252, -246, 81, 29, -232, -233, -233, 150, + -260, 82, 27, 106, 106, 106, 106, 347, 155, 31, + -224, -130, -205, 167, -205, -205, 88, 88, -178, 471, + -94, -82, 216, 118, 205, 205, 164, 164, 218, -101, + 229, 230, 228, 21, 217, 219, 221, 207, -101, -101, + -181, 73, -96, -101, 24, -194, -101, -179, -179, -101, + -179, -179, 88, -101, -189, -66, 317, 347, 20, -67, + 20, 98, 99, 100, -120, -112, -112, -112, -73, 189, + 109, -279, -279, -74, -74, -278, 150, -5, -142, -279, + -279, 82, 74, 23, 12, 12, -279, 12, 12, -279, + -279, -74, -135, -133, 116, -85, -279, -279, 82, 82, + -279, -279, -279, -279, -279, -273, 438, 318, -105, 71, + 168, 72, -278, -196, -279, -157, 39, 47, 58, -85, + -85, -140, -157, -173, 20, 12, 54, 54, -106, 13, + -76, -87, -79, 150, -106, -110, 31, 54, -3, -278, + -278, -164, -168, -129, -88, -89, -89, -88, -89, 63, + 63, 63, 68, 63, 68, 63, -98, -194, -279, -279, + -3, -161, 74, -87, -101, -87, -103, -194, 135, -170, + -172, 320, 317, 323, -260, 88, 82, -240, -228, 98, + 110, 30, 73, 281, 95, 171, 29, 170, -221, 285, + -216, -216, -217, -260, 88, 144, -217, -217, -217, -223, + 88, -223, 89, 89, 83, -32, -27, -28, 32, 77, + -247, -235, 88, 38, -189, 83, -82, -101, 110, 73, + -251, -251, -251, -194, 16, -159, -189, 82, 83, -131, + 225, -129, 83, -189, 83, -159, -233, -190, -189, -278, + 164, 30, 30, -130, -131, -217, -260, 473, 472, 83, + 166, 223, -84, 330, 88, 84, -101, -101, -101, -101, + -101, 158, 155, 208, 167, -94, -101, 82, -60, 184, + 179, -199, -199, 32, 317, 450, 448, -73, 109, -112, + -112, -279, -279, -75, -190, -138, -157, -207, 144, 256, + 188, 254, 250, 270, 261, 283, 252, 284, -205, -207, + -112, -112, -112, -112, 344, -138, 117, -85, 115, -112, + -112, 165, 165, 165, -162, 40, 88, 88, 59, -101, + -136, 14, -85, 135, -142, -163, 73, -164, -123, -125, + -124, -278, -158, -279, -189, -162, -106, 82, 118, -92, + -91, 73, 74, -93, 73, -91, 63, 63, -279, -106, + -87, -106, -106, 150, 317, 321, 322, -240, 98, -112, + 10, 88, 29, 29, -217, -217, 83, 82, 83, 82, + 83, 82, -183, 384, 110, -28, -27, -235, -235, 89, + -260, 166, 24, -101, 73, 73, 73, 17, 82, -224, + -129, 54, -250, 83, -254, -255, -101, -111, -131, -101, + -81, 214, 222, 81, 85, -262, 74, 205, 281, 205, + -101, -60, -32, -101, -179, -179, 32, -260, -112, -279, + -142, -279, -215, -215, -215, -219, -215, 244, -215, 244, + -279, -279, 20, 20, 20, 20, -278, -65, 340, -85, + 82, 82, -278, -278, -278, -279, 88, -216, -137, 15, + 17, 28, -163, 82, -279, -279, 82, 54, 150, -279, + -138, -168, -85, -85, 81, -85, -138, -106, -115, -216, + 88, -216, 89, 89, 384, 30, 78, 79, 80, 30, + 75, 76, -101, -101, -101, -101, -159, -189, 201, 183, + -279, 82, -222, 347, 350, -160, 81, 83, -259, 347, + -261, -260, -189, -189, -189, -157, -216, -260, -112, -112, + -112, -112, -112, -142, 88, -112, -112, -159, -279, -159, + -159, -197, -216, -146, -151, -176, -85, -121, 29, -125, + 54, -3, -189, -123, -189, -142, -159, -142, -217, -217, + 83, 83, -160, 202, -101, -255, 351, 351, 23, -159, + -258, -257, -190, 81, 74, -279, -279, -279, -279, -68, + 128, 347, -279, -279, -279, -279, -279, -279, -105, -149, + 434, -154, 43, -152, -153, 44, -150, 45, 53, 10, + -123, 150, 83, 23, -278, 81, -3, 83, 82, 118, + -159, -101, -279, 345, 70, 348, -146, 48, 262, -156, + -155, 52, 44, -153, 17, 46, 17, -164, -189, -3, + -112, 198, -159, -58, 347, -257, -239, -190, 88, 89, + 83, 59, 346, 349, -147, 50, -145, 49, -145, -155, + 17, 17, 88, 17, 88, -58, -279, -279, 83, -59, + 213, 438, -262, 59, -148, 51, 73, 101, 88, 88, + 88, -269, -270, 73, 176, -259, 347, 73, 101, -270, + 73, 11, 10, 215, 348, -268, 184, 179, 182, 31, + -268, 349, 178, 30, 98, } var yyDef = [...]int{ @@ -5100,7 +5107,7 @@ var yyDef = [...]int{ 557, 557, 0, 0, 557, -2, -2, 557, 957, 0, 557, 0, 0, -2, 490, 491, 0, 493, -2, 0, 0, 502, 1366, 1366, 552, 0, 0, 0, 0, 0, - 0, 1364, 55, 56, 508, 509, 510, 1, 3, 0, + 557, 1364, 55, 56, 508, 509, 510, 1, 3, 0, 561, 829, 0, 0, -2, 559, 0, 0, 940, 940, 940, 0, 86, 87, 0, 0, 0, -2, 90, -2, 114, 115, 0, 119, 368, 329, 371, 327, 357, -2, @@ -5197,7 +5204,7 @@ var yyDef = [...]int{ 567, 0, 795, 0, 746, 0, 747, 755, 0, 748, 756, 749, 757, 750, 751, 758, 752, 759, 753, 754, 760, 0, 0, 0, 570, 570, 0, 0, 41, 522, - 523, 0, 625, 946, 531, 829, 0, 572, 867, 0, + 523, 0, 625, 946, 0, 829, 0, 572, 867, 0, 0, 830, 822, 823, 826, 829, 0, 595, 584, 574, 577, 578, 560, 0, 587, 591, 0, 593, 594, 0, 0, 70, 0, 641, 0, 597, 599, 600, 601, 623, @@ -5236,89 +5243,89 @@ var yyDef = [...]int{ 697, 806, 0, 697, 806, 0, 0, 0, 568, 569, 801, 798, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 526, 528, 0, 645, 0, - 626, 0, 628, 629, 0, 947, 864, 52, 42, 0, - 865, 0, 0, 0, 0, 825, 827, 828, 864, 0, - 814, 0, 0, 650, 0, 0, 575, 48, 592, 588, - 0, 650, 0, 0, 640, 0, 0, 0, 0, 0, - 0, 630, 0, 0, 633, 0, 0, 0, 0, 624, - 0, 0, 0, -2, 0, 0, 0, 62, 63, 0, - 0, 0, 919, 73, 0, 0, 78, 79, 920, 921, - 922, 923, 0, 111, -2, 271, 130, 132, 133, 134, - 125, 135, 206, 205, 151, 208, 208, 174, 175, 212, - 0, 212, 212, 212, 0, 0, 168, 169, 170, 171, - 162, 0, 163, 164, 165, 0, 166, 249, 0, 833, - 217, 218, 220, 224, 0, 0, 0, 245, 246, 0, - 849, 0, 0, 0, 949, 948, 948, 948, 0, 120, - 121, 122, 123, 118, 0, 0, 126, 324, 0, 0, - 0, 247, 0, 0, 226, 242, 227, 228, 0, 353, - 0, 0, 390, 391, 392, 393, 0, 0, 0, 322, - 324, 212, 0, 278, 279, 284, 285, 303, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, - 384, 385, 386, 846, 847, 848, 0, 0, 417, 0, - 0, 263, 64, 937, 422, 478, 443, 459, 478, 435, - 442, 485, 464, 495, 539, 0, 0, 0, 547, 0, - 675, 677, 679, 666, 687, 670, 0, 667, 0, 0, - 661, 729, 0, 0, 570, 0, 821, 864, 733, 734, - 0, 0, 0, 0, 0, 771, 0, 0, 772, 0, - 821, 0, 799, 0, 0, 745, 765, 0, 0, 766, - 767, 768, 769, 770, 524, 527, 529, 605, 0, 0, - 0, 0, 627, 945, 44, 0, 0, 0, 831, 832, - 824, 43, 0, 932, 933, 815, 816, 817, 0, 585, - 596, 576, 0, 829, 907, 0, 0, 899, 0, 0, - 650, 915, 0, 598, 619, 621, 0, 616, 631, 632, - 634, 0, 636, 0, 638, 639, 602, 603, 604, 0, - 650, 0, 650, 67, 650, 69, 0, 644, 76, 77, - 0, 0, 83, 213, 214, 118, 273, 131, 137, 0, - 0, 0, 141, 0, 0, 144, 146, 147, 207, 212, - 212, 176, 209, 210, 211, 177, 178, 179, 0, 195, - 0, 0, 0, 266, 88, 837, 836, 224, 224, 219, - 0, 222, 0, 950, 198, 0, 101, 0, 0, 0, - 0, 0, 107, 0, 328, 609, 0, 339, 340, 0, - 323, 387, 0, 216, 0, 229, 804, 612, 0, 0, - 341, 0, 324, 344, 345, 356, 306, 307, 304, 0, - 0, 859, 860, 0, 863, 93, 376, 378, 377, 381, - 0, 0, 374, 0, 263, 833, 0, 421, 264, 265, - 481, 481, 534, 0, 537, 0, 668, 0, 688, 671, - 730, 731, 0, 805, 829, 46, 0, 197, 197, 784, - 197, 201, 787, 197, 789, 197, 792, 0, 0, 0, - 0, 0, 0, 0, 796, 744, 802, 0, 0, 0, - 0, 0, 0, 0, 0, 208, 869, 866, 45, 819, - 0, 651, 589, 49, 53, 0, 907, 898, 909, 911, - 0, 0, 0, 903, 0, 821, 0, 0, 613, 620, - 0, 0, 614, 0, 615, 635, 637, -2, 821, 650, - 60, 61, 0, 80, 81, 82, 272, 138, 139, 0, - 142, 143, 145, 172, 173, 208, 0, 208, 0, 202, - 0, 255, 267, 0, 834, 835, 0, 0, 221, 223, - 0, 939, 103, 0, 0, 0, 0, 0, 127, 325, - 0, 215, 0, 0, 412, 409, 342, 343, 607, 850, - 851, 852, 0, 862, 96, 0, 0, 0, 0, 418, - 419, 420, 65, 428, 434, 536, 556, 672, 732, 864, - 735, 781, 208, 785, 786, 788, 790, 791, 793, 737, - 736, 0, 0, 0, 0, 0, 829, 0, 800, 0, - 0, 0, 0, 0, 625, 208, 889, 50, 0, 0, - 0, 54, 0, 912, 0, 0, 0, 0, 71, 829, - 916, 917, 617, 0, 622, 829, 59, 140, 212, 196, - 212, 0, 0, 268, 838, 839, 840, 841, 842, 843, - 844, 607, 104, 105, 106, 331, 610, 0, 0, 389, - 0, 397, 0, 0, 0, 0, 861, 375, 0, 94, - 95, 0, 0, 380, 47, 782, 783, 0, 0, 0, - 0, 773, 0, 797, 0, 0, 0, 647, 0, 0, - 645, 871, 870, 883, 896, 820, 818, 0, 910, 0, - 902, 905, 901, 904, 57, 0, 58, 185, 186, 200, - 203, 0, 0, 0, 413, 410, 411, 0, 0, 97, - 98, 0, 0, 0, 738, 740, 739, 741, 0, 0, - 0, 743, 761, 762, 646, 648, 649, 606, 889, 0, - 882, 0, -2, 891, 0, 0, 0, 897, 0, 900, - 0, 618, 0, 0, 0, 853, 608, 0, 0, 0, - 382, 742, 0, 0, 0, 876, 874, 874, 884, 885, - 0, 0, 892, 0, 0, 0, 908, 906, 853, 0, - 0, 0, 372, 855, 99, 100, 317, 318, 319, 93, - 774, 0, 777, 879, 0, 872, 875, 873, 886, 0, - 0, 893, 0, 895, 89, 414, 415, 251, 0, 856, - 857, 96, 775, 868, 0, 877, 878, 887, 888, 894, - 252, 253, 0, 0, 379, 0, 880, 881, 254, 0, - 0, 0, 854, 0, 256, 258, 259, 0, 0, 257, - 776, 260, 261, 262, + 626, 0, 628, 629, 0, 947, 531, 864, 52, 42, + 0, 865, 0, 0, 0, 0, 825, 827, 828, 864, + 0, 814, 0, 0, 650, 0, 0, 575, 48, 592, + 588, 0, 650, 0, 0, 640, 0, 0, 0, 0, + 0, 0, 630, 0, 0, 633, 0, 0, 0, 0, + 624, 0, 0, 0, -2, 0, 0, 0, 62, 63, + 0, 0, 0, 919, 73, 0, 0, 78, 79, 920, + 921, 922, 923, 0, 111, -2, 271, 130, 132, 133, + 134, 125, 135, 206, 205, 151, 208, 208, 174, 175, + 212, 0, 212, 212, 212, 0, 0, 168, 169, 170, + 171, 162, 0, 163, 164, 165, 0, 166, 249, 0, + 833, 217, 218, 220, 224, 0, 0, 0, 245, 246, + 0, 849, 0, 0, 0, 949, 948, 948, 948, 0, + 120, 121, 122, 123, 118, 0, 0, 126, 324, 0, + 0, 0, 247, 0, 0, 226, 242, 227, 228, 0, + 353, 0, 0, 390, 391, 392, 393, 0, 0, 0, + 322, 324, 212, 0, 278, 279, 284, 285, 303, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 383, 384, 385, 386, 846, 847, 848, 0, 0, 417, + 0, 0, 263, 64, 937, 422, 478, 443, 459, 478, + 435, 442, 485, 464, 495, 539, 0, 0, 0, 547, + 0, 675, 677, 679, 666, 687, 670, 0, 667, 0, + 0, 661, 729, 0, 0, 570, 0, 821, 864, 733, + 734, 0, 0, 0, 0, 0, 771, 0, 0, 772, + 0, 821, 0, 799, 0, 0, 745, 765, 0, 0, + 766, 767, 768, 769, 770, 524, 527, 529, 605, 0, + 0, 0, 0, 627, 945, 44, 0, 0, 0, 831, + 832, 824, 43, 0, 932, 933, 815, 816, 817, 0, + 585, 596, 576, 0, 829, 907, 0, 0, 899, 0, + 0, 650, 915, 0, 598, 619, 621, 0, 616, 631, + 632, 634, 0, 636, 0, 638, 639, 602, 603, 604, + 0, 650, 0, 650, 67, 650, 69, 0, 644, 76, + 77, 0, 0, 83, 213, 214, 118, 273, 131, 137, + 0, 0, 0, 141, 0, 0, 144, 146, 147, 207, + 212, 212, 176, 209, 210, 211, 177, 178, 179, 0, + 195, 0, 0, 0, 266, 88, 837, 836, 224, 224, + 219, 0, 222, 0, 950, 198, 0, 101, 0, 0, + 0, 0, 0, 107, 0, 328, 609, 0, 339, 340, + 0, 323, 387, 0, 216, 0, 229, 804, 612, 0, + 0, 341, 0, 324, 344, 345, 356, 306, 307, 304, + 0, 0, 859, 860, 0, 863, 93, 376, 378, 377, + 381, 0, 0, 374, 0, 263, 833, 0, 421, 264, + 265, 481, 481, 534, 0, 537, 0, 668, 0, 688, + 671, 730, 731, 0, 805, 829, 46, 0, 197, 197, + 784, 197, 201, 787, 197, 789, 197, 792, 0, 0, + 0, 0, 0, 0, 0, 796, 744, 802, 0, 0, + 0, 0, 0, 0, 0, 0, 208, 869, 866, 45, + 819, 0, 651, 589, 49, 53, 0, 907, 898, 909, + 911, 0, 0, 0, 903, 0, 821, 0, 0, 613, + 620, 0, 0, 614, 0, 615, 635, 637, -2, 821, + 650, 60, 61, 0, 80, 81, 82, 272, 138, 139, + 0, 142, 143, 145, 172, 173, 208, 0, 208, 0, + 202, 0, 255, 267, 0, 834, 835, 0, 0, 221, + 223, 0, 939, 103, 0, 0, 0, 0, 0, 127, + 325, 0, 215, 0, 0, 412, 409, 342, 343, 607, + 850, 851, 852, 0, 862, 96, 0, 0, 0, 0, + 418, 419, 420, 65, 428, 434, 536, 556, 672, 732, + 864, 735, 781, 208, 785, 786, 788, 790, 791, 793, + 737, 736, 0, 0, 0, 0, 0, 829, 0, 800, + 0, 0, 0, 0, 0, 625, 208, 889, 50, 0, + 0, 0, 54, 0, 912, 0, 0, 0, 0, 71, + 829, 916, 917, 617, 0, 622, 829, 59, 140, 212, + 196, 212, 0, 0, 268, 838, 839, 840, 841, 842, + 843, 844, 607, 104, 105, 106, 331, 610, 0, 0, + 389, 0, 397, 0, 0, 0, 0, 861, 375, 0, + 94, 95, 0, 0, 380, 47, 782, 783, 0, 0, + 0, 0, 773, 0, 797, 0, 0, 0, 647, 0, + 0, 645, 871, 870, 883, 896, 820, 818, 0, 910, + 0, 902, 905, 901, 904, 57, 0, 58, 185, 186, + 200, 203, 0, 0, 0, 413, 410, 411, 0, 0, + 97, 98, 0, 0, 0, 738, 740, 739, 741, 0, + 0, 0, 743, 761, 762, 646, 648, 649, 606, 889, + 0, 882, 0, -2, 891, 0, 0, 0, 897, 0, + 900, 0, 618, 0, 0, 0, 853, 608, 0, 0, + 0, 382, 742, 0, 0, 0, 876, 874, 874, 884, + 885, 0, 0, 892, 0, 0, 0, 908, 906, 853, + 0, 0, 0, 372, 855, 99, 100, 317, 318, 319, + 93, 774, 0, 777, 879, 0, 872, 875, 873, 886, + 0, 0, 893, 0, 895, 89, 414, 415, 251, 0, + 856, 857, 96, 775, 868, 0, 877, 878, 887, 888, + 894, 252, 253, 0, 0, 379, 0, 880, 881, 254, + 0, 0, 0, 854, 0, 256, 258, 259, 0, 0, + 257, 776, 260, 261, 262, } var yyTok1 = [...]int{ @@ -9515,11 +9522,11 @@ yydefault: } yyVAL.union = yyLOCAL case 531: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:2842 { - yyLOCAL = &RevertMigration{UUID: string(yyDollar[3].str)} + yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL case 532: diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 9171e6570db..ddf0bceed88 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -2838,9 +2838,9 @@ unlock_statement: } revert_statement: - REVERT VITESS_MIGRATION STRING + REVERT comment_opt VITESS_MIGRATION STRING { - $$ = &RevertMigration{UUID: string($3)} + $$ = &RevertMigration{Comments: Comments($2), UUID: string($4)} } flush_statement: From b637c0b8ca7b0d604ced9885aa5920458483637f Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 13:19:12 +0300 Subject: [PATCH 17/64] NewOnlineDDL now expects DDLStatement. NewOnlineDDLBySQL supports an SQL string, but validates that it parses as a DDLStatement Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/online_ddl.go | 27 +++++++++++-------- go/vt/schema/online_ddl_test.go | 36 ++++++++++++++++++------- go/vt/vtctl/vtctl.go | 2 +- go/vt/vtgate/engine/revert_migration.go | 35 +++++++++++++----------- 4 files changed, 63 insertions(+), 37 deletions(-) diff --git a/go/vt/schema/online_ddl.go b/go/vt/schema/online_ddl.go index 89fa2e89bfb..e2282d27cd7 100644 --- a/go/vt/schema/online_ddl.go +++ b/go/vt/schema/online_ddl.go @@ -135,7 +135,7 @@ func ParseOnlineDDLStatement(sql string) (ddlStmt sqlparser.DDLStatement, action // NewOnlineDDLs takes a single DDL statement, normalizes it (potentially break down into multiple statements), and generates one or more OnlineDDL instances, one for each normalized statement func NewOnlineDDLs(keyspace string, ddlStmt sqlparser.DDLStatement, ddlStrategySetting *DDLStrategySetting, requestContext string) (onlineDDLs [](*OnlineDDL), err error) { appendOnlineDDL := func(tableName string, ddlStmt sqlparser.DDLStatement) error { - onlineDDL, err := NewOnlineDDL(keyspace, tableName, sqlparser.String(ddlStmt), ddlStrategySetting, requestContext) + onlineDDL, err := NewOnlineDDL(keyspace, tableName, ddlStmt, ddlStrategySetting, requestContext) if err != nil { return err } @@ -165,8 +165,20 @@ func NewOnlineDDLs(keyspace string, ddlStmt sqlparser.DDLStatement, ddlStrategyS return onlineDDLs, nil } -// NewOnlineDDL creates a schema change request with self generated UUID and RequestTime -func NewOnlineDDL(keyspace string, table string, sql string, ddlStrategySetting *DDLStrategySetting, requestContext string) (*OnlineDDL, error) { +// NewOnlineDDLBySQL creates a schema change request with self generated UUID and RequestTime, based on SQL string, which must be a DDLStatement +func NewOnlineDDLBySQL(keyspace string, table string, sql string, ddlStrategySetting *DDLStrategySetting, requestContext string) (*OnlineDDL, error) { + ddlStmt, _, err := ParseOnlineDDLStatement(sql) + if err != nil { + return nil, err + } + return NewOnlineDDL(keyspace, table, ddlStmt, ddlStrategySetting, requestContext) +} + +// NewOnlineDDL creates a schema change request with self generated UUID and RequestTime based ona a DDL statement +func NewOnlineDDL(keyspace string, table string, ddlStmt sqlparser.DDLStatement, ddlStrategySetting *DDLStrategySetting, requestContext string) (*OnlineDDL, error) { + if !ddlStmt.IsFullyParsed() { + return nil, fmt.Errorf("NewOnlineDDL: cannot fully parse statement %v", ddlStmt) + } if ddlStrategySetting == nil { return nil, fmt.Errorf("NewOnlineDDL: found nil DDLStrategySetting") } @@ -176,22 +188,15 @@ func NewOnlineDDL(keyspace string, table string, sql string, ddlStrategySetting } if ddlStrategySetting.IsSkipTopo() { - ddlStmt, _, err := ParseOnlineDDLStatement(sql) - if err != nil { - return nil, err - } var comments = sqlparser.Comments{ fmt.Sprintf(`/*vt+ uuid=%s context=%s strategy=%s options=%s */`, strconv.Quote(u), strconv.Quote(requestContext), strconv.Quote(string(ddlStrategySetting.Strategy)), strconv.Quote(ddlStrategySetting.Options)), } ddlStmt.SetComments(comments) - if ddlStmt.IsFullyParsed() { - sql = sqlparser.String(ddlStmt) - } } return &OnlineDDL{ Keyspace: keyspace, Table: table, - SQL: sql, + SQL: sqlparser.String(ddlStmt), UUID: u, Strategy: ddlStrategySetting.Strategy, Options: ddlStrategySetting.Options, diff --git a/go/vt/schema/online_ddl_test.go b/go/vt/schema/online_ddl_test.go index c0d122caf28..56f01772d79 100644 --- a/go/vt/schema/online_ddl_test.go +++ b/go/vt/schema/online_ddl_test.go @@ -21,6 +21,7 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "vitess.io/vitess/go/vt/sqlparser" ) @@ -52,7 +53,7 @@ func TestGetGCUUID(t *testing.T) { uuids := map[string]bool{} count := 20 for i := 0; i < count; i++ { - onlineDDL, err := NewOnlineDDL("ks", "tbl", "alter table t drop column c", NewDDLStrategySetting(DDLStrategyDirect, ""), "") + onlineDDL, err := NewOnlineDDLBySQL("ks", "tbl", "alter table t drop column c", NewDDLStrategySetting(DDLStrategyDirect, ""), "") assert.NoError(t, err) gcUUID := onlineDDL.GetGCUUID() assert.True(t, IsGCUUID(gcUUID)) @@ -182,17 +183,32 @@ func TestNewOnlineDDL(t *testing.T) { isError: true, }, } + strategies := []*DDLStrategySetting{ + NewDDLStrategySetting(DDLStrategyDirect, ""), + NewDDLStrategySetting(DDLStrategyOnline, ""), + NewDDLStrategySetting(DDLStrategyOnline, "-singleton"), + } + require.False(t, strategies[0].IsSkipTopo()) + require.False(t, strategies[1].IsSkipTopo()) + require.True(t, strategies[2].IsSkipTopo()) + for _, ts := range tt { t.Run(ts.sql, func(t *testing.T) { - onlineDDL, err := NewOnlineDDL("test_ks", "t", ts.sql, NewDDLStrategySetting(DDLStrategyOnline, ""), migrationContext) - if ts.isError { - assert.Error(t, err) - } else { - assert.NoError(t, err) - // onlineDDL.SQL enriched with /*vt+ ... */ comment - assert.Contains(t, onlineDDL.SQL, onlineDDL.UUID) - assert.Contains(t, onlineDDL.SQL, migrationContext) - assert.Contains(t, onlineDDL.SQL, string(DDLStrategyOnline)) + for _, stgy := range strategies { + t.Run(stgy.ToString(), func(t *testing.T) { + onlineDDL, err := NewOnlineDDLBySQL("test_ks", "t", ts.sql, stgy, migrationContext) + if ts.isError { + assert.Error(t, err) + return + } + assert.NoError(t, err) + if stgy.IsSkipTopo() { + // onlineDDL.SQL enriched with /*vt+ ... */ comment + assert.Contains(t, onlineDDL.SQL, onlineDDL.UUID) + assert.Contains(t, onlineDDL.SQL, migrationContext) + assert.Contains(t, onlineDDL.SQL, string(stgy.Strategy)) + } + }) } }) } diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 8a9ceb55c36..a69fe6e61fe 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -2931,7 +2931,7 @@ func commandOnlineDDL(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag requestContext := fmt.Sprintf("vtctl:%s", contextUUID) ddlStrategySetting := schema.NewDDLStrategySetting(schema.DDLStrategyOnline, "") - onlineDDL, err := schema.NewOnlineDDL(keyspace, "", fmt.Sprintf("revert %s", uuid), ddlStrategySetting, requestContext) + onlineDDL, err := schema.NewOnlineDDLBySQL(keyspace, "", fmt.Sprintf("revert %s", uuid), ddlStrategySetting, requestContext) if err != nil { return err } diff --git a/go/vt/vtgate/engine/revert_migration.go b/go/vt/vtgate/engine/revert_migration.go index 781cb372181..ef21785ff8b 100644 --- a/go/vt/vtgate/engine/revert_migration.go +++ b/go/vt/vtgate/engine/revert_migration.go @@ -69,20 +69,6 @@ func (v *RevertMigration) GetTableName() string { // Execute implements the Primitive interface func (v *RevertMigration) Execute(vcursor VCursor, bindVars map[string]*query.BindVariable, wantfields bool) (result *sqltypes.Result, err error) { - sql := fmt.Sprintf("revert %s", v.Stmt.UUID) - ddlStrategySetting := schema.NewDDLStrategySetting(schema.DDLStrategyOnline, "") - onlineDDL, err := schema.NewOnlineDDL(v.GetKeyspaceName(), "", sql, ddlStrategySetting, fmt.Sprintf("vtgate:%s", vcursor.Session().GetSessionUUID())) - if err != nil { - return result, err - } - err = vcursor.SubmitOnlineDDL(onlineDDL) - if err != nil { - return result, err - } - rows := [][]sqltypes.Value{} - rows = append(rows, []sqltypes.Value{ - sqltypes.NewVarChar(onlineDDL.UUID), - }) result = &sqltypes.Result{ Fields: []*querypb.Field{ { @@ -90,8 +76,27 @@ func (v *RevertMigration) Execute(vcursor VCursor, bindVars map[string]*query.Bi Type: sqltypes.VarChar, }, }, - Rows: rows, + Rows: [][]sqltypes.Value{}, } + + sql := fmt.Sprintf("revert %s", v.Stmt.UUID) + ddlStrategySetting := schema.NewDDLStrategySetting(schema.DDLStrategyOnline, "") + onlineDDL, err := schema.NewOnlineDDLBySQL(v.GetKeyspaceName(), "", sql, ddlStrategySetting, fmt.Sprintf("vtgate:%s", vcursor.Session().GetSessionUUID())) + if err != nil { + return result, err + } + + if onlineDDL.StrategySetting().IsSkipTopo() { + // TODO(shlomi): implement before this branch is merged + } else { + // Submit a request entry in topo. vtctld will take it from there + if err := vcursor.SubmitOnlineDDL(onlineDDL); err != nil { + return result, err + } + } + result.Rows = append(result.Rows, []sqltypes.Value{ + sqltypes.NewVarChar(onlineDDL.UUID), + }) return result, err } From 42710636e27dad50775ebc843dee60da8fa1de58 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 14:00:28 +0300 Subject: [PATCH 18/64] RevertMigration prints comments in Format, supports SetComments() Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/sqlparser/ast.go | 5 +++++ go/vt/sqlparser/ast_format.go | 2 +- go/vt/sqlparser/ast_format_fast.go | 4 +++- go/vt/sqlparser/parse_test.go | 2 ++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index effdfa8f47a..860c594a228 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -1107,6 +1107,11 @@ func (node *AlterView) SetComments(comments Comments) { // irrelevant } +// SetComments for RevertMigration, does not implement DDLStatement +func (node *RevertMigration) SetComments(comments Comments) { + node.Comments = comments +} + // GetToTables implements the DDLStatement interface func (node *RenameTable) GetToTables() TableNames { var toTables TableNames diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go index 4d07fae005f..2e3c83f5521 100644 --- a/go/vt/sqlparser/ast_format.go +++ b/go/vt/sqlparser/ast_format.go @@ -239,7 +239,7 @@ func (node *AlterMigration) Format(buf *TrackedBuffer) { // Format formats the node. func (node *RevertMigration) Format(buf *TrackedBuffer) { - buf.astPrintf(node, "revert vitess_migration '%s'", node.UUID) + buf.astPrintf(node, "revert %vvitess_migration '%s'", node.Comments, node.UUID) } // Format formats the node. diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go index 9008feb0553..f1275bba9f4 100644 --- a/go/vt/sqlparser/ast_format_fast.go +++ b/go/vt/sqlparser/ast_format_fast.go @@ -369,7 +369,9 @@ func (node *AlterMigration) formatFast(buf *TrackedBuffer) { // formatFast formats the node. func (node *RevertMigration) formatFast(buf *TrackedBuffer) { - buf.WriteString("revert vitess_migration '") + buf.WriteString("revert ") + node.Comments.formatFast(buf) + buf.WriteString("vitess_migration '") buf.WriteString(node.UUID) buf.WriteByte('\'') } diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index 58ec005db81..cde3347ac38 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -1559,6 +1559,8 @@ var ( input: "show vitess_migrations like '9748c3b7_7fdb_11eb_ac2c_f875a4d24e90'", }, { input: "revert vitess_migration '9748c3b7_7fdb_11eb_ac2c_f875a4d24e90'", + }, { + input: "revert /*vt+ uuid=123 */ vitess_migration '9748c3b7_7fdb_11eb_ac2c_f875a4d24e90'", }, { input: "alter vitess_migration '9748c3b7_7fdb_11eb_ac2c_f875a4d24e90' retry", }, { From 55e3c3156081367f7b0b407c597b8709fee6d89b Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 14:01:42 +0300 Subject: [PATCH 19/64] removed 'NewOnlineDDLBySQL()' introduced in previous commit. NewOnlineDDL now parses query and expects either DDLStatement or RevertMigration Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/online_ddl.go | 48 +++++++++++++++++++-------------- go/vt/schema/online_ddl_test.go | 19 ++++++++----- 2 files changed, 41 insertions(+), 26 deletions(-) diff --git a/go/vt/schema/online_ddl.go b/go/vt/schema/online_ddl.go index e2282d27cd7..8133caf6cb4 100644 --- a/go/vt/schema/online_ddl.go +++ b/go/vt/schema/online_ddl.go @@ -135,7 +135,7 @@ func ParseOnlineDDLStatement(sql string) (ddlStmt sqlparser.DDLStatement, action // NewOnlineDDLs takes a single DDL statement, normalizes it (potentially break down into multiple statements), and generates one or more OnlineDDL instances, one for each normalized statement func NewOnlineDDLs(keyspace string, ddlStmt sqlparser.DDLStatement, ddlStrategySetting *DDLStrategySetting, requestContext string) (onlineDDLs [](*OnlineDDL), err error) { appendOnlineDDL := func(tableName string, ddlStmt sqlparser.DDLStatement) error { - onlineDDL, err := NewOnlineDDL(keyspace, tableName, ddlStmt, ddlStrategySetting, requestContext) + onlineDDL, err := NewOnlineDDL(keyspace, tableName, sqlparser.String(ddlStmt), ddlStrategySetting, requestContext) if err != nil { return err } @@ -165,20 +165,8 @@ func NewOnlineDDLs(keyspace string, ddlStmt sqlparser.DDLStatement, ddlStrategyS return onlineDDLs, nil } -// NewOnlineDDLBySQL creates a schema change request with self generated UUID and RequestTime, based on SQL string, which must be a DDLStatement -func NewOnlineDDLBySQL(keyspace string, table string, sql string, ddlStrategySetting *DDLStrategySetting, requestContext string) (*OnlineDDL, error) { - ddlStmt, _, err := ParseOnlineDDLStatement(sql) - if err != nil { - return nil, err - } - return NewOnlineDDL(keyspace, table, ddlStmt, ddlStrategySetting, requestContext) -} - -// NewOnlineDDL creates a schema change request with self generated UUID and RequestTime based ona a DDL statement -func NewOnlineDDL(keyspace string, table string, ddlStmt sqlparser.DDLStatement, ddlStrategySetting *DDLStrategySetting, requestContext string) (*OnlineDDL, error) { - if !ddlStmt.IsFullyParsed() { - return nil, fmt.Errorf("NewOnlineDDL: cannot fully parse statement %v", ddlStmt) - } +// NewOnlineDDL creates a schema change request with self generated UUID and RequestTime +func NewOnlineDDL(keyspace string, table string, sql string, ddlStrategySetting *DDLStrategySetting, requestContext string) (*OnlineDDL, error) { if ddlStrategySetting == nil { return nil, fmt.Errorf("NewOnlineDDL: found nil DDLStrategySetting") } @@ -187,16 +175,36 @@ func NewOnlineDDL(keyspace string, table string, ddlStmt sqlparser.DDLStatement, return nil, err } - if ddlStrategySetting.IsSkipTopo() { - var comments = sqlparser.Comments{ - fmt.Sprintf(`/*vt+ uuid=%s context=%s strategy=%s options=%s */`, strconv.Quote(u), strconv.Quote(requestContext), strconv.Quote(string(ddlStrategySetting.Strategy)), strconv.Quote(ddlStrategySetting.Options)), + { + // query validation and rebuilding + var comments sqlparser.Comments + if ddlStrategySetting.IsSkipTopo() { + comments = sqlparser.Comments{ + fmt.Sprintf(`/*vt+ uuid=%s context=%s strategy=%s options=%s */`, strconv.Quote(u), strconv.Quote(requestContext), strconv.Quote(string(ddlStrategySetting.Strategy)), strconv.Quote(ddlStrategySetting.Options)), + } + } + stmt, err := sqlparser.Parse(sql) + if err != nil { + return nil, err } - ddlStmt.SetComments(comments) + switch stmt := stmt.(type) { + case sqlparser.DDLStatement: + if !stmt.IsFullyParsed() { + return nil, fmt.Errorf("NewOnlineDDL: cannot fully parse statement %v", sqlparser.String(stmt)) + } + stmt.SetComments(comments) + case *sqlparser.RevertMigration: + stmt.SetComments(comments) + default: + return nil, fmt.Errorf("Unsupported statement for Online DDL: %v", sqlparser.String(stmt)) + } + sql = sqlparser.String(stmt) } + return &OnlineDDL{ Keyspace: keyspace, Table: table, - SQL: sqlparser.String(ddlStmt), + SQL: sql, UUID: u, Strategy: ddlStrategySetting.Strategy, Options: ddlStrategySetting.Options, diff --git a/go/vt/schema/online_ddl_test.go b/go/vt/schema/online_ddl_test.go index 56f01772d79..25182020eb8 100644 --- a/go/vt/schema/online_ddl_test.go +++ b/go/vt/schema/online_ddl_test.go @@ -53,7 +53,7 @@ func TestGetGCUUID(t *testing.T) { uuids := map[string]bool{} count := 20 for i := 0; i < count; i++ { - onlineDDL, err := NewOnlineDDLBySQL("ks", "tbl", "alter table t drop column c", NewDDLStrategySetting(DDLStrategyDirect, ""), "") + onlineDDL, err := NewOnlineDDL("ks", "tbl", "alter table t drop column c", NewDDLStrategySetting(DDLStrategyDirect, ""), "") assert.NoError(t, err) gcUUID := onlineDDL.GetGCUUID() assert.True(t, IsGCUUID(gcUUID)) @@ -133,12 +133,12 @@ func TestGetRevertUUID(t *testing.T) { isError bool }{ { - statement: "revert 4e5dcf80_354b_11eb_82cd_f875a4d24e90_20201203114014", - uuid: "4e5dcf80_354b_11eb_82cd_f875a4d24e90_20201203114014", + statement: "revert 4e5dcf80_354b_11eb_82cd_f875a4d24e90", + uuid: "4e5dcf80_354b_11eb_82cd_f875a4d24e90", }, { - statement: "REVERT 4e5dcf80_354b_11eb_82cd_f875a4d24e90_20201203114014", - uuid: "4e5dcf80_354b_11eb_82cd_f875a4d24e90_20201203114014", + statement: "REVERT 4e5dcf80_354b_11eb_82cd_f875a4d24e90", + uuid: "4e5dcf80_354b_11eb_82cd_f875a4d24e90", }, { statement: "REVERT", @@ -178,6 +178,13 @@ func TestNewOnlineDDL(t *testing.T) { { sql: "alter table t engine=innodb", }, + { + sql: "revert vitess_migration '4e5dcf80_354b_11eb_82cd_f875a4d24e90'", + }, + { + sql: "alter vitess_migration '4e5dcf80_354b_11eb_82cd_f875a4d24e90' cancel", + isError: true, + }, { sql: "select id from t", isError: true, @@ -196,7 +203,7 @@ func TestNewOnlineDDL(t *testing.T) { t.Run(ts.sql, func(t *testing.T) { for _, stgy := range strategies { t.Run(stgy.ToString(), func(t *testing.T) { - onlineDDL, err := NewOnlineDDLBySQL("test_ks", "t", ts.sql, stgy, migrationContext) + onlineDDL, err := NewOnlineDDL("test_ks", "t", ts.sql, stgy, migrationContext) if ts.isError { assert.Error(t, err) return From 617656a3d7a1656ff76034158b0e52df817eb981 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 14:02:06 +0300 Subject: [PATCH 20/64] revert schema.NewOnlineDDLBySQL Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vtctl/vtctl.go | 2 +- go/vt/vtgate/engine/revert_migration.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index a69fe6e61fe..8a9ceb55c36 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -2931,7 +2931,7 @@ func commandOnlineDDL(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag requestContext := fmt.Sprintf("vtctl:%s", contextUUID) ddlStrategySetting := schema.NewDDLStrategySetting(schema.DDLStrategyOnline, "") - onlineDDL, err := schema.NewOnlineDDLBySQL(keyspace, "", fmt.Sprintf("revert %s", uuid), ddlStrategySetting, requestContext) + onlineDDL, err := schema.NewOnlineDDL(keyspace, "", fmt.Sprintf("revert %s", uuid), ddlStrategySetting, requestContext) if err != nil { return err } diff --git a/go/vt/vtgate/engine/revert_migration.go b/go/vt/vtgate/engine/revert_migration.go index ef21785ff8b..f047a7ca6d0 100644 --- a/go/vt/vtgate/engine/revert_migration.go +++ b/go/vt/vtgate/engine/revert_migration.go @@ -81,7 +81,7 @@ func (v *RevertMigration) Execute(vcursor VCursor, bindVars map[string]*query.Bi sql := fmt.Sprintf("revert %s", v.Stmt.UUID) ddlStrategySetting := schema.NewDDLStrategySetting(schema.DDLStrategyOnline, "") - onlineDDL, err := schema.NewOnlineDDLBySQL(v.GetKeyspaceName(), "", sql, ddlStrategySetting, fmt.Sprintf("vtgate:%s", vcursor.Session().GetSessionUUID())) + onlineDDL, err := schema.NewOnlineDDL(v.GetKeyspaceName(), "", sql, ddlStrategySetting, fmt.Sprintf("vtgate:%s", vcursor.Session().GetSessionUUID())) if err != nil { return result, err } From 417c1c4b53ac9d99997638648375fac46f0d8058 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Mon, 5 Apr 2021 15:40:54 +0300 Subject: [PATCH 21/64] formalizing 'revert ' into 'revert vitess_migration ''' Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/online_ddl.go | 16 ++++++++++++---- go/vt/schema/online_ddl_test.go | 25 ++++++++++++++++++------- go/vt/schema/parser.go | 16 +++++++++++++++- go/vt/schema/parser_test.go | 17 +++++++++++++++++ go/vt/vttablet/onlineddl/executor.go | 14 +++++++------- 5 files changed, 69 insertions(+), 19 deletions(-) diff --git a/go/vt/schema/online_ddl.go b/go/vt/schema/online_ddl.go index 8133caf6cb4..17b41643a7d 100644 --- a/go/vt/schema/online_ddl.go +++ b/go/vt/schema/online_ddl.go @@ -34,7 +34,6 @@ var ( onlineDdlUUIDRegexp = regexp.MustCompile(`^[0-f]{8}_[0-f]{4}_[0-f]{4}_[0-f]{4}_[0-f]{12}$`) onlineDDLGeneratedTableNameRegexp = regexp.MustCompile(`^_[0-f]{8}_[0-f]{4}_[0-f]{4}_[0-f]{4}_[0-f]{12}_([0-9]{14})_(gho|ghc|del|new|vrepl)$`) ptOSCGeneratedTableNameRegexp = regexp.MustCompile(`^_.*_old$`) - revertStatementRegexp = regexp.MustCompile(`(?i)^revert\s+(.*)$`) ) const ( @@ -177,6 +176,10 @@ func NewOnlineDDL(keyspace string, table string, sql string, ddlStrategySetting { // query validation and rebuilding + if uuid, err := ParseRevertUUID(sql); err == nil { + sql = fmt.Sprintf("revert vitess_migration '%s'", uuid) + } + var comments sqlparser.Comments if ddlStrategySetting.IsSkipTopo() { comments = sqlparser.Comments{ @@ -236,7 +239,7 @@ func (onlineDDL *OnlineDDL) ToJSON() ([]byte, error) { // GetAction extracts the DDL action type from the online DDL statement func (onlineDDL *OnlineDDL) GetAction() (action sqlparser.DDLAction, err error) { - if revertStatementRegexp.MatchString(onlineDDL.SQL) { + if _, err := onlineDDL.GetRevertUUID(); err == nil { return sqlparser.RevertDDLAction, nil } @@ -267,8 +270,13 @@ func (onlineDDL *OnlineDDL) GetActionStr() (action sqlparser.DDLAction, actionSt // fo the reverted migration. // The function returns error when this is not a revert migration. func (onlineDDL *OnlineDDL) GetRevertUUID() (uuid string, err error) { - if submatch := revertStatementRegexp.FindStringSubmatch(onlineDDL.SQL); len(submatch) > 0 { - return submatch[1], nil + if uuid, err := ParseRevertUUID(onlineDDL.SQL); err == nil { + return uuid, nil + } + if stmt, err := sqlparser.Parse(onlineDDL.SQL); err == nil { + if revert, ok := stmt.(*sqlparser.RevertMigration); ok { + return revert.UUID, nil + } } return "", fmt.Errorf("Not a Revert DDL: '%s'", onlineDDL.SQL) } diff --git a/go/vt/schema/online_ddl_test.go b/go/vt/schema/online_ddl_test.go index 25182020eb8..e69a8518deb 100644 --- a/go/vt/schema/online_ddl_test.go +++ b/go/vt/schema/online_ddl_test.go @@ -140,10 +140,6 @@ func TestGetRevertUUID(t *testing.T) { statement: "REVERT 4e5dcf80_354b_11eb_82cd_f875a4d24e90", uuid: "4e5dcf80_354b_11eb_82cd_f875a4d24e90", }, - { - statement: "REVERT", - isError: true, - }, { statement: "alter table t drop column c", isError: true, @@ -155,10 +151,25 @@ func TestGetRevertUUID(t *testing.T) { uuid, err := onlineDDL.GetRevertUUID() if ts.isError { assert.Error(t, err) - } else { - assert.NoError(t, err) - assert.Equal(t, uuid, ts.uuid) + return } + assert.NoError(t, err) + assert.Equal(t, ts.uuid, uuid) + }) + } + migrationContext := "354b-11eb-82cd-f875a4d24e90" + for _, ts := range tt { + t.Run(ts.statement, func(t *testing.T) { + onlineDDL, err := NewOnlineDDL("test_ks", "t", ts.statement, NewDDLStrategySetting(DDLStrategyOnline, ""), migrationContext) + assert.NoError(t, err) + require.NotNil(t, onlineDDL) + uuid, err := onlineDDL.GetRevertUUID() + if ts.isError { + assert.Error(t, err) + return + } + assert.NoError(t, err) + assert.Equal(t, ts.uuid, uuid) }) } } diff --git a/go/vt/schema/parser.go b/go/vt/schema/parser.go index 647cbeaf187..15c86ea4a73 100644 --- a/go/vt/schema/parser.go +++ b/go/vt/schema/parser.go @@ -49,7 +49,8 @@ var ( // ALTER TABLE tbl something regexp.MustCompile(alterTableBasicPattern + `([\S]+)\s+(.*$)`), } - createTableRegexp = regexp.MustCompile(`(?s)(?i)(CREATE\s+TABLE\s+)` + "`" + `([^` + "`" + `]+)` + "`" + `(\s*[(].*$)`) + createTableRegexp = regexp.MustCompile(`(?s)(?i)(CREATE\s+TABLE\s+)` + "`" + `([^` + "`" + `]+)` + "`" + `(\s*[(].*$)`) + revertStatementRegexp = regexp.MustCompile(`(?i)^revert\s+([\S]*)$`) ) // ReplaceTableNameInCreateTableStatement returns a modified CREATE TABLE statement, such that the table name is replaced with given name. @@ -87,3 +88,16 @@ func ParseAlterTableOptions(alterStatement string) (explicitSchema, explicitTabl } return explicitSchema, explicitTable, alterOptions } + +// ParseRevertUUID expects a query like "revert 4e5dcf80_354b_11eb_82cd_f875a4d24e90" and returns the UUID value. +func ParseRevertUUID(sql string) (uuid string, err error) { + submatch := revertStatementRegexp.FindStringSubmatch(sql) + if len(submatch) == 0 { + return "", fmt.Errorf("Not a Revert DDL: '%s'", sql) + } + uuid = submatch[1] + if !IsOnlineDDLUUID(uuid) { + return "", fmt.Errorf("Not an online DDL UUID: '%s'", uuid) + } + return uuid, nil +} diff --git a/go/vt/schema/parser_test.go b/go/vt/schema/parser_test.go index e7ef88a6392..b436932e3e6 100644 --- a/go/vt/schema/parser_test.go +++ b/go/vt/schema/parser_test.go @@ -92,3 +92,20 @@ func TestReplaceTableNameInCreateTableStatement(t *testing.T) { }) } } + +func TestParseRevertUUID(t *testing.T) { + + { + uuid, err := ParseRevertUUID("revert 4e5dcf80_354b_11eb_82cd_f875a4d24e90") + assert.NoError(t, err) + assert.Equal(t, "4e5dcf80_354b_11eb_82cd_f875a4d24e90", uuid) + } + { + _, err := ParseRevertUUID("revert 4e5dcf80_354b_11eb_82cd_f875a4") + assert.Error(t, err) + } + { + _, err := ParseRevertUUID("revert vitess_migration '4e5dcf80_354b_11eb_82cd_f875a4d24e90'") + assert.Error(t, err) + } +} diff --git a/go/vt/vttablet/onlineddl/executor.go b/go/vt/vttablet/onlineddl/executor.go index c10d23f40e7..058455a3790 100644 --- a/go/vt/vttablet/onlineddl/executor.go +++ b/go/vt/vttablet/onlineddl/executor.go @@ -1865,14 +1865,14 @@ func (e *Executor) runNextMigration(ctx context.Context) error { Options: row["options"].ToString(), Status: schema.OnlineDDLStatus(row["migration_status"].ToString()), } - // We strip out any VT query comments because our simplified parser doesn't work well with comments - ddlStmt, _, err := schema.ParseOnlineDDLStatement(onlineDDL.SQL) - if err != nil { - return err + { + // We strip out any VT query comments because our simplified parser doesn't work well with comments + ddlStmt, _, err := schema.ParseOnlineDDLStatement(onlineDDL.SQL) + if err == nil { + ddlStmt.SetComments(sqlparser.Comments{}) + onlineDDL.SQL = sqlparser.String(ddlStmt) + } } - ddlStmt.SetComments(sqlparser.Comments{}) - onlineDDL.SQL = sqlparser.String(ddlStmt) - e.executeMigration(ctx, onlineDDL) // the query should only ever return a single row at the most // but let's make it also explicit here that we only run a single migration From cc2aa0081909ddc000449978291ce16f75b20da4 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 10:06:47 +0300 Subject: [PATCH 22/64] support legacy revert statement parser; only generate new formal revert statement on IsSkipTopo() Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/online_ddl.go | 46 +++++++++++++++++++++------------ go/vt/schema/online_ddl_test.go | 7 +++++ go/vt/schema/parser.go | 4 +-- go/vt/schema/parser_test.go | 8 +++--- 4 files changed, 42 insertions(+), 23 deletions(-) diff --git a/go/vt/schema/online_ddl.go b/go/vt/schema/online_ddl.go index 17b41643a7d..c54da56bd81 100644 --- a/go/vt/schema/online_ddl.go +++ b/go/vt/schema/online_ddl.go @@ -175,33 +175,45 @@ func NewOnlineDDL(keyspace string, table string, sql string, ddlStrategySetting } { - // query validation and rebuilding - if uuid, err := ParseRevertUUID(sql); err == nil { - sql = fmt.Sprintf("revert vitess_migration '%s'", uuid) - } var comments sqlparser.Comments if ddlStrategySetting.IsSkipTopo() { comments = sqlparser.Comments{ fmt.Sprintf(`/*vt+ uuid=%s context=%s strategy=%s options=%s */`, strconv.Quote(u), strconv.Quote(requestContext), strconv.Quote(string(ddlStrategySetting.Strategy)), strconv.Quote(ddlStrategySetting.Options)), } + if uuid, err := legacyParseRevertUUID(sql); err == nil { + sql = fmt.Sprintf("revert vitess_migration '%s'", uuid) + } } + stmt, err := sqlparser.Parse(sql) if err != nil { - return nil, err - } - switch stmt := stmt.(type) { - case sqlparser.DDLStatement: - if !stmt.IsFullyParsed() { - return nil, fmt.Errorf("NewOnlineDDL: cannot fully parse statement %v", sqlparser.String(stmt)) + isLegacyRevertStatement := false + // query validation and rebuilding + if _, err := legacyParseRevertUUID(sql); err == nil { + // This is a revert statement of the form "revert ". We allow this for now. Future work will + // make sure the statement is a valid, parseable "revert vitess_migration ''", but we must + // be backwards compatible for now. + isLegacyRevertStatement = true + } + if !isLegacyRevertStatement { + // otherwise the statement should have been parseable! + return nil, err + } + } else { + switch stmt := stmt.(type) { + case sqlparser.DDLStatement: + if !stmt.IsFullyParsed() { + return nil, fmt.Errorf("NewOnlineDDL: cannot fully parse statement %v", sqlparser.String(stmt)) + } + stmt.SetComments(comments) + case *sqlparser.RevertMigration: + stmt.SetComments(comments) + default: + return nil, fmt.Errorf("Unsupported statement for Online DDL: %v", sqlparser.String(stmt)) } - stmt.SetComments(comments) - case *sqlparser.RevertMigration: - stmt.SetComments(comments) - default: - return nil, fmt.Errorf("Unsupported statement for Online DDL: %v", sqlparser.String(stmt)) + sql = sqlparser.String(stmt) } - sql = sqlparser.String(stmt) } return &OnlineDDL{ @@ -270,7 +282,7 @@ func (onlineDDL *OnlineDDL) GetActionStr() (action sqlparser.DDLAction, actionSt // fo the reverted migration. // The function returns error when this is not a revert migration. func (onlineDDL *OnlineDDL) GetRevertUUID() (uuid string, err error) { - if uuid, err := ParseRevertUUID(onlineDDL.SQL); err == nil { + if uuid, err := legacyParseRevertUUID(onlineDDL.SQL); err == nil { return uuid, nil } if stmt, err := sqlparser.Parse(onlineDDL.SQL); err == nil { diff --git a/go/vt/schema/online_ddl_test.go b/go/vt/schema/online_ddl_test.go index e69a8518deb..4530c49fe72 100644 --- a/go/vt/schema/online_ddl_test.go +++ b/go/vt/schema/online_ddl_test.go @@ -189,6 +189,9 @@ func TestNewOnlineDDL(t *testing.T) { { sql: "alter table t engine=innodb", }, + { + sql: "revert 4e5dcf80_354b_11eb_82cd_f875a4d24e90", // legacy syntax; kept one release version for backwards compatibility. Can remove after v11.0 is released + }, { sql: "revert vitess_migration '4e5dcf80_354b_11eb_82cd_f875a4d24e90'", }, @@ -225,6 +228,10 @@ func TestNewOnlineDDL(t *testing.T) { assert.Contains(t, onlineDDL.SQL, onlineDDL.UUID) assert.Contains(t, onlineDDL.SQL, migrationContext) assert.Contains(t, onlineDDL.SQL, string(stgy.Strategy)) + } else { + assert.NotContains(t, onlineDDL.SQL, onlineDDL.UUID) + assert.NotContains(t, onlineDDL.SQL, migrationContext) + assert.NotContains(t, onlineDDL.SQL, string(stgy.Strategy)) } }) } diff --git a/go/vt/schema/parser.go b/go/vt/schema/parser.go index 15c86ea4a73..aaac0b7e7b5 100644 --- a/go/vt/schema/parser.go +++ b/go/vt/schema/parser.go @@ -89,8 +89,8 @@ func ParseAlterTableOptions(alterStatement string) (explicitSchema, explicitTabl return explicitSchema, explicitTable, alterOptions } -// ParseRevertUUID expects a query like "revert 4e5dcf80_354b_11eb_82cd_f875a4d24e90" and returns the UUID value. -func ParseRevertUUID(sql string) (uuid string, err error) { +// legacyParseRevertUUID expects a query like "revert 4e5dcf80_354b_11eb_82cd_f875a4d24e90" and returns the UUID value. +func legacyParseRevertUUID(sql string) (uuid string, err error) { submatch := revertStatementRegexp.FindStringSubmatch(sql) if len(submatch) == 0 { return "", fmt.Errorf("Not a Revert DDL: '%s'", sql) diff --git a/go/vt/schema/parser_test.go b/go/vt/schema/parser_test.go index b436932e3e6..f16dc8122f3 100644 --- a/go/vt/schema/parser_test.go +++ b/go/vt/schema/parser_test.go @@ -93,19 +93,19 @@ func TestReplaceTableNameInCreateTableStatement(t *testing.T) { } } -func TestParseRevertUUID(t *testing.T) { +func TestLegacyParseRevertUUID(t *testing.T) { { - uuid, err := ParseRevertUUID("revert 4e5dcf80_354b_11eb_82cd_f875a4d24e90") + uuid, err := legacyParseRevertUUID("revert 4e5dcf80_354b_11eb_82cd_f875a4d24e90") assert.NoError(t, err) assert.Equal(t, "4e5dcf80_354b_11eb_82cd_f875a4d24e90", uuid) } { - _, err := ParseRevertUUID("revert 4e5dcf80_354b_11eb_82cd_f875a4") + _, err := legacyParseRevertUUID("revert 4e5dcf80_354b_11eb_82cd_f875a4") assert.Error(t, err) } { - _, err := ParseRevertUUID("revert vitess_migration '4e5dcf80_354b_11eb_82cd_f875a4d24e90'") + _, err := legacyParseRevertUUID("revert vitess_migration '4e5dcf80_354b_11eb_82cd_f875a4d24e90'") assert.Error(t, err) } } From e3d29b618bbffb14362152054772e5e821bbe064 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 10:07:26 +0300 Subject: [PATCH 23/64] vtgate/plan: revert uses Send when IsSkipTopo() Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vtgate/engine/revert_migration.go | 28 ++++++++++++++++++++----- go/vt/vtgate/planbuilder/migration.go | 13 ++++++++---- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/go/vt/vtgate/engine/revert_migration.go b/go/vt/vtgate/engine/revert_migration.go index f047a7ca6d0..327bd412d3a 100644 --- a/go/vt/vtgate/engine/revert_migration.go +++ b/go/vt/vtgate/engine/revert_migration.go @@ -20,6 +20,7 @@ import ( "fmt" "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/vt/key" "vitess.io/vitess/go/vt/proto/query" querypb "vitess.io/vitess/go/vt/proto/query" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" @@ -33,9 +34,11 @@ var _ Primitive = (*RevertMigration)(nil) //RevertMigration represents the instructions to perform an online schema change via vtctld type RevertMigration struct { - Keyspace *vindexes.Keyspace - Stmt *sqlparser.RevertMigration - Query string + Keyspace *vindexes.Keyspace + Stmt *sqlparser.RevertMigration + Query string + DDLStrategySetting *schema.DDLStrategySetting + TargetDestination key.Destination noTxNeeded @@ -80,14 +83,29 @@ func (v *RevertMigration) Execute(vcursor VCursor, bindVars map[string]*query.Bi } sql := fmt.Sprintf("revert %s", v.Stmt.UUID) - ddlStrategySetting := schema.NewDDLStrategySetting(schema.DDLStrategyOnline, "") + + ddlStrategySetting, err := schema.ParseDDLStrategy(vcursor.Session().GetDDLStrategy()) + if err != nil { + return nil, err + } + ddlStrategySetting.Strategy = schema.DDLStrategyOnline // and we keep the options as they were onlineDDL, err := schema.NewOnlineDDL(v.GetKeyspaceName(), "", sql, ddlStrategySetting, fmt.Sprintf("vtgate:%s", vcursor.Session().GetSessionUUID())) if err != nil { return result, err } - if onlineDDL.StrategySetting().IsSkipTopo() { + if ddlStrategySetting.IsSkipTopo() { // TODO(shlomi): implement before this branch is merged + s := Send{ + Keyspace: v.Keyspace, + TargetDestination: v.TargetDestination, + Query: onlineDDL.SQL, + IsDML: false, + SingleShardOnly: false, + } + if _, err := s.Execute(vcursor, bindVars, wantfields); err != nil { + return result, err + } } else { // Submit a request entry in topo. vtctld will take it from there if err := vcursor.SubmitOnlineDDL(onlineDDL); err != nil { diff --git a/go/vt/vtgate/planbuilder/migration.go b/go/vt/vtgate/planbuilder/migration.go index 19ca220c872..fb7289f71f3 100644 --- a/go/vt/vtgate/planbuilder/migration.go +++ b/go/vt/vtgate/planbuilder/migration.go @@ -50,7 +50,7 @@ func buildAlterMigrationPlan(query string, vschema ContextVSchema) (engine.Primi } func buildRevertMigrationPlan(query string, stmt *sqlparser.RevertMigration, vschema ContextVSchema) (engine.Primitive, error) { - _, ks, tabletType, err := vschema.TargetDestination("") + dest, ks, tabletType, err := vschema.TargetDestination("") if err != nil { return nil, err } @@ -62,9 +62,14 @@ func buildRevertMigrationPlan(query string, stmt *sqlparser.RevertMigration, vsc return nil, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "REVERT VITESS_MIGRATION works only on primary tablet") } + if dest == nil { + dest = key.DestinationAllShards{} + } + return &engine.RevertMigration{ - Keyspace: ks, - Stmt: stmt, - Query: query, + Keyspace: ks, + TargetDestination: dest, + Stmt: stmt, + Query: query, }, nil } From beaff2297e1f56ce45331bad52317c17300e41e4 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 10:22:11 +0300 Subject: [PATCH 24/64] initial implementation for RevertMigration plan in tabletserver Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vttablet/tabletserver/planbuilder/permission.go | 2 +- go/vt/vttablet/tabletserver/planbuilder/plan.go | 4 ++++ go/vt/vttablet/tabletserver/query_executor.go | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/go/vt/vttablet/tabletserver/planbuilder/permission.go b/go/vt/vttablet/tabletserver/planbuilder/permission.go index a762160758e..325f555c676 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/permission.go +++ b/go/vt/vttablet/tabletserver/planbuilder/permission.go @@ -51,7 +51,7 @@ func BuildPermissions(stmt sqlparser.Statement) []Permission { for _, t := range node.AffectedTables() { permissions = buildTableNamePermissions(t, tableacl.ADMIN, permissions) } - case *sqlparser.AlterMigration: + case *sqlparser.AlterMigration, *sqlparser.RevertMigration: permissions = []Permission{} // TODO(shlomi) what are the correct permissions here? Table is unknown case *sqlparser.Flush: for _, t := range node.TableNames { diff --git a/go/vt/vttablet/tabletserver/planbuilder/plan.go b/go/vt/vttablet/tabletserver/planbuilder/plan.go index b4eb9718960..25cff9b12b1 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/plan.go +++ b/go/vt/vttablet/tabletserver/planbuilder/plan.go @@ -73,6 +73,7 @@ const ( PlanUnlockTables PlanCallProc PlanAlterMigration + PlanRevertMigration NumPlans ) @@ -103,6 +104,7 @@ var planName = []string{ "UnlockTables", "CallProcedure", "AlterMigration", + "RevertMigration", } func (pt PlanType) String() string { @@ -216,6 +218,8 @@ func Build(statement sqlparser.Statement, tables map[string]*schema.Table, isRes plan = &Plan{PlanID: PlanDDL, FullQuery: fullQuery} case *sqlparser.AlterMigration: plan, err = &Plan{PlanID: PlanAlterMigration, FullStmt: stmt}, nil + case *sqlparser.RevertMigration: + plan, err = &Plan{PlanID: PlanRevertMigration, FullStmt: stmt}, nil case *sqlparser.Show: plan, err = analyzeShow(stmt, dbName) case *sqlparser.OtherRead, sqlparser.Explain: diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index a74c64ca778..19613bd42db 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -147,6 +147,8 @@ func (qre *QueryExecutor) Execute() (reply *sqltypes.Result, err error) { return qre.execCallProc() case p.PlanAlterMigration: return qre.execAlterMigration() + case p.PlanRevertMigration: + return qre.execRevertMigration() } return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "%s unexpected plan type", qre.plan.PlanID.String()) } @@ -761,6 +763,10 @@ func (qre *QueryExecutor) execAlterMigration() (*sqltypes.Result, error) { return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "ALTER VITESS_MIGRATION not implemented") } +func (qre *QueryExecutor) execRevertMigration() (*sqltypes.Result, error) { + return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "REVERT VITESS_MIGRATION not implemented") +} + func (qre *QueryExecutor) drainResultSetOnConn(conn *connpool.DBConn) error { more := true for more { From 3736bf2b45f96888d37815a047b11ba1b5f31eba Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 10:33:15 +0300 Subject: [PATCH 25/64] sizegen Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vtgate/engine/cached_size.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/go/vt/vtgate/engine/cached_size.go b/go/vt/vtgate/engine/cached_size.go index 3b3a94401f2..7a5b322c7d5 100644 --- a/go/vt/vtgate/engine/cached_size.go +++ b/go/vt/vtgate/engine/cached_size.go @@ -509,7 +509,7 @@ func (cached *RevertMigration) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(32) + size += int64(56) } // field Keyspace *vitess.io/vitess/go/vt/vtgate/vindexes.Keyspace size += cached.Keyspace.CachedSize(true) @@ -517,6 +517,12 @@ func (cached *RevertMigration) CachedSize(alloc bool) int64 { size += cached.Stmt.CachedSize(true) // field Query string size += int64(len(cached.Query)) + // field DDLStrategySetting *vitess.io/vitess/go/vt/schema.DDLStrategySetting + size += cached.DDLStrategySetting.CachedSize(true) + // field TargetDestination vitess.io/vitess/go/vt/key.Destination + if cc, ok := cached.TargetDestination.(cachedObject); ok { + size += cc.CachedSize(true) + } return size } func (cached *Route) CachedSize(alloc bool) int64 { From 2badbcfcec550f7f006beb0463f2901de50b6e34 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 13:13:29 +0300 Subject: [PATCH 26/64] encode online DDL params using encoding/hex to safeguard against potential quotes and spaces in text. OnlineDDLFromCommentedStatement() function reads a commented statement and reconstructs an OnlineDDL instance Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/online_ddl.go | 74 +++++++++++++++++++++++++++++++-- go/vt/schema/online_ddl_test.go | 42 ++++++++++++++++--- 2 files changed, 107 insertions(+), 9 deletions(-) diff --git a/go/vt/schema/online_ddl.go b/go/vt/schema/online_ddl.go index 07249e86560..8c1724088cf 100644 --- a/go/vt/schema/online_ddl.go +++ b/go/vt/schema/online_ddl.go @@ -18,6 +18,7 @@ package schema import ( "context" + "encoding/hex" "encoding/json" "errors" "fmt" @@ -180,12 +181,19 @@ func NewOnlineDDL(keyspace string, table string, sql string, ddlStrategySetting } { - + encodeDirective := func(directive string) string { + return strconv.Quote(hex.EncodeToString([]byte(directive))) + } var comments sqlparser.Comments if ddlStrategySetting.IsSkipTopo() { comments = sqlparser.Comments{ - fmt.Sprintf(`/*vt+ uuid=%s context=%s strategy=%s options=%s */`, strconv.Quote(u), strconv.Quote(requestContext), strconv.Quote(string(ddlStrategySetting.Strategy)), strconv.Quote(ddlStrategySetting.Options)), - } + fmt.Sprintf(`/*vt+ uuid=%s context=%s table=%s strategy=%s options=%s */`, + encodeDirective(u), + encodeDirective(requestContext), + encodeDirective(table), + encodeDirective(string(ddlStrategySetting.Strategy)), + encodeDirective(ddlStrategySetting.Options), + )} if uuid, err := legacyParseRevertUUID(sql); err == nil { sql = fmt.Sprintf("revert vitess_migration '%s'", uuid) } @@ -234,6 +242,66 @@ func NewOnlineDDL(keyspace string, table string, sql string, ddlStrategySetting }, nil } +// OnlineDDLFromCommentedStatement creates a schema instance based on a commented query. The query is expected +// to be commented as e.g. `CREATE /*vt+ uuid=... context=... table=... strategy=... options=... */ TABLE ...` +func OnlineDDLFromCommentedStatement(stmt sqlparser.Statement) (onlineDDL *OnlineDDL, err error) { + var comments sqlparser.Comments + switch stmt := stmt.(type) { + case sqlparser.DDLStatement: + comments = stmt.GetComments() + stmt.SetComments(sqlparser.Comments{}) + case *sqlparser.RevertMigration: + comments = stmt.Comments + stmt.SetComments(sqlparser.Comments{}) + default: + return nil, fmt.Errorf("Unsupported statement for Online DDL: %v", sqlparser.String(stmt)) + } + if len(comments) == 0 { + return nil, fmt.Errorf("No comments found in statement: %v", sqlparser.String(stmt)) + } + directives := sqlparser.ExtractCommentDirectives(comments) + + decodeDirective := func(name string) (string, error) { + value := fmt.Sprintf("%s", directives[name]) + if value == "" { + return "", fmt.Errorf("No value found for comment directive %s", name) + } + unquoted, err := strconv.Unquote(value) + if err != nil { + return "", err + } + b, err := hex.DecodeString(unquoted) + if err != nil { + return "", err + } + return string(b), nil + } + + onlineDDL = &OnlineDDL{ + SQL: sqlparser.String(stmt), + } + if onlineDDL.Table, err = decodeDirective("table"); err != nil { + return nil, err + } + if onlineDDL.UUID, err = decodeDirective("uuid"); err != nil { + return nil, err + } + if strategy, err := decodeDirective("strategy"); err == nil { + onlineDDL.Strategy = DDLStrategy(strategy) + } else { + return nil, err + } + if options, err := decodeDirective("options"); err == nil { + onlineDDL.Options = options + } else { + return nil, err + } + if onlineDDL.RequestContext, err = decodeDirective("context"); err != nil { + return nil, err + } + return onlineDDL, nil +} + // StrategySetting returns the ddl strategy setting associated with this online DDL func (onlineDDL *OnlineDDL) StrategySetting() *DDLStrategySetting { return NewDDLStrategySetting(onlineDDL.Strategy, onlineDDL.Options) diff --git a/go/vt/schema/online_ddl_test.go b/go/vt/schema/online_ddl_test.go index 4530c49fe72..681f91e1379 100644 --- a/go/vt/schema/online_ddl_test.go +++ b/go/vt/schema/online_ddl_test.go @@ -17,6 +17,7 @@ limitations under the License. package schema import ( + "encoding/hex" "strings" "testing" @@ -225,13 +226,13 @@ func TestNewOnlineDDL(t *testing.T) { assert.NoError(t, err) if stgy.IsSkipTopo() { // onlineDDL.SQL enriched with /*vt+ ... */ comment - assert.Contains(t, onlineDDL.SQL, onlineDDL.UUID) - assert.Contains(t, onlineDDL.SQL, migrationContext) - assert.Contains(t, onlineDDL.SQL, string(stgy.Strategy)) + assert.Contains(t, onlineDDL.SQL, hex.EncodeToString([]byte(onlineDDL.UUID))) + assert.Contains(t, onlineDDL.SQL, hex.EncodeToString([]byte(migrationContext))) + assert.Contains(t, onlineDDL.SQL, hex.EncodeToString([]byte(string(stgy.Strategy)))) } else { - assert.NotContains(t, onlineDDL.SQL, onlineDDL.UUID) - assert.NotContains(t, onlineDDL.SQL, migrationContext) - assert.NotContains(t, onlineDDL.SQL, string(stgy.Strategy)) + assert.NotContains(t, onlineDDL.SQL, hex.EncodeToString([]byte(onlineDDL.UUID))) + assert.NotContains(t, onlineDDL.SQL, hex.EncodeToString([]byte(migrationContext))) + assert.NotContains(t, onlineDDL.SQL, hex.EncodeToString([]byte(string(stgy.Strategy)))) } }) } @@ -299,3 +300,32 @@ func TestNewOnlineDDLs(t *testing.T) { }) } } + +func TestOnlineDDLFromCommentedStatement(t *testing.T) { + queries := []string{ + `create table t (id int primary key)`, + `alter table t drop primary key`, + `drop table if exists t`, + `revert vitess_migration '4e5dcf80_354b_11eb_82cd_f875a4d24e90'`, + } + strategySetting := NewDDLStrategySetting(DDLStrategyGhost, `-singleton -declarative --max-load="Threads_running=5"`) + migrationContext := "354b-11eb-82cd-f875a4d24e90" + for _, query := range queries { + t.Run(query, func(t *testing.T) { + o1, err := NewOnlineDDL("ks", "t", query, strategySetting, migrationContext) + require.NoError(t, err) + + stmt, err := sqlparser.Parse(o1.SQL) + require.NoError(t, err) + + o2, err := OnlineDDLFromCommentedStatement(stmt) + require.NoError(t, err) + assert.True(t, IsOnlineDDLUUID(o2.UUID)) + assert.Equal(t, o1.UUID, o2.UUID) + assert.Equal(t, migrationContext, o2.RequestContext) + assert.Equal(t, "t", o2.Table) + assert.Equal(t, strategySetting.Strategy, o2.Strategy) + assert.Equal(t, strategySetting.Options, o2.Options) + }) + } +} From 45508e0bafeecc5e9b7ee254a11b1ce5172f67d0 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 13:15:49 +0300 Subject: [PATCH 27/64] DDLStatement supports GetComments() Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/sqlparser/ast.go | 46 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 860c594a228..5985ce43f75 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -65,6 +65,7 @@ type ( SetTable(qualifier string, name string) SetFromTables(tables TableNames) SetComments(comments Comments) + GetComments() Comments Statement } @@ -1112,6 +1113,51 @@ func (node *RevertMigration) SetComments(comments Comments) { node.Comments = comments } +// GetComments implements DDLStatement. +func (node *RenameTable) GetComments() Comments { + // irrelevant + return nil +} + +// GetComments implements DDLStatement. +func (node *TruncateTable) GetComments() Comments { + // irrelevant + return nil +} + +// GetComments implements DDLStatement. +func (node *AlterTable) GetComments() Comments { + return node.Comments +} + +// GetComments implements DDLStatement. +func (node *CreateTable) GetComments() Comments { + return node.Comments +} + +// GetComments implements DDLStatement. +func (node *CreateView) GetComments() Comments { + // irrelevant + return nil +} + +// GetComments implements DDLStatement. +func (node *DropTable) GetComments() Comments { + return node.Comments +} + +// GetComments implements DDLStatement. +func (node *DropView) GetComments() Comments { + // irrelevant + return nil +} + +// GetComments implements DDLStatement. +func (node *AlterView) GetComments() Comments { + // irrelevant + return nil +} + // GetToTables implements the DDLStatement interface func (node *RenameTable) GetToTables() TableNames { var toTables TableNames From f59340841cf2ed34f3c334f68db3554801b228ed Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 14:11:26 +0300 Subject: [PATCH 28/64] extra sanity check for UUID Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/online_ddl.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/go/vt/schema/online_ddl.go b/go/vt/schema/online_ddl.go index 8c1724088cf..f113b884140 100644 --- a/go/vt/schema/online_ddl.go +++ b/go/vt/schema/online_ddl.go @@ -280,10 +280,13 @@ func OnlineDDLFromCommentedStatement(stmt sqlparser.Statement) (onlineDDL *Onlin onlineDDL = &OnlineDDL{ SQL: sqlparser.String(stmt), } - if onlineDDL.Table, err = decodeDirective("table"); err != nil { + if onlineDDL.UUID, err = decodeDirective("uuid"); err != nil { return nil, err } - if onlineDDL.UUID, err = decodeDirective("uuid"); err != nil { + if !IsOnlineDDLUUID(onlineDDL.UUID) { + return nil, fmt.Errorf("Invalid UUID read from statement %s", sqlparser.String(stmt)) + } + if onlineDDL.Table, err = decodeDirective("table"); err != nil { return nil, err } if strategy, err := decodeDirective("strategy"); err == nil { From 268b233c7d9fb77b4f25ed2bfbe5cd340e9ab86b Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 14:50:30 +0300 Subject: [PATCH 29/64] go.sum Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go.sum | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/go.sum b/go.sum index 0843ee40795..36fa37641d0 100644 --- a/go.sum +++ b/go.sum @@ -52,6 +52,7 @@ github.com/BurntSushi/xgbutil v0.0.0-20160919175755-f7c97cef3b4e h1:4ZrkT/RzpnRO github.com/BurntSushi/xgbutil v0.0.0-20160919175755-f7c97cef3b4e/go.mod h1:uw9h2sd4WWHOPdJ13MQpwK5qYWKYDumDqxWWIknEQ+k= github.com/DataDog/datadog-go v2.2.0+incompatible h1:V5BKkxACZLjzHjSgBbr2gvLA2Ae49yhc6CSY7MLy5k4= github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/GeertJohan/go.incremental v1.0.0 h1:7AH+pY1XUgQE4Y1HcXYaMqAI0m9yrFqo/jt0CW30vsg= github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= github.com/GeertJohan/go.rice v1.0.0 h1:KkI6O9uMaQU3VEKaj01ulavtF7o1fWT7+pk/4voiMLQ= github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0= @@ -75,6 +76,7 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdko github.com/VividCortex/mysqlerr v0.0.0-20170204212430-6c6b55f8796f h1:HR5nRmUQgXrwqZOwZ2DAc/aCi3Bu3xENpspW935vxu0= github.com/VividCortex/mysqlerr v0.0.0-20170204212430-6c6b55f8796f/go.mod h1:f3HiCrHjHBdcm6E83vGaXh1KomZMA2P6aeo3hKx/wg0= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/akavel/rsrc v0.8.0 h1:zjWn7ukO9Kc5Q62DOJCcxGpXC18RawVtYAGdz2aLlfw= github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= @@ -407,6 +409,7 @@ github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -529,6 +532,7 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/ngdinhtoan/glide-cleanup v0.2.0/go.mod h1:UQzsmiDOb8YV3nOsCxK/c9zPpCZVNoHScRE3EO9pVMM= +github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229 h1:E2B8qYyeSgv5MXpmzZXRNp8IAQ4vjxIjhpAf5hv/tAg= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= github.com/nozzle/throttler v0.0.0-20180817012639-2ea982251481 h1:Up6+btDp321ZG5/zdSLo48H9Iaq0UQGthrhWC6pCxzE= github.com/nozzle/throttler v0.0.0-20180817012639-2ea982251481/go.mod h1:yKZQO8QE2bHlgozqWDiRVqTFlLQSj30K/6SAK8EeYFw= @@ -695,7 +699,9 @@ github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6 github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.0.1 h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8WdUSz8= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= From 250dc5a71135b1124ac6fb0e3313e7689b17733b Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 14:52:11 +0300 Subject: [PATCH 30/64] only remove comments temporarily Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/online_ddl.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/go/vt/schema/online_ddl.go b/go/vt/schema/online_ddl.go index f113b884140..c1f08f29695 100644 --- a/go/vt/schema/online_ddl.go +++ b/go/vt/schema/online_ddl.go @@ -245,14 +245,21 @@ func NewOnlineDDL(keyspace string, table string, sql string, ddlStrategySetting // OnlineDDLFromCommentedStatement creates a schema instance based on a commented query. The query is expected // to be commented as e.g. `CREATE /*vt+ uuid=... context=... table=... strategy=... options=... */ TABLE ...` func OnlineDDLFromCommentedStatement(stmt sqlparser.Statement) (onlineDDL *OnlineDDL, err error) { + var sql string var comments sqlparser.Comments switch stmt := stmt.(type) { case sqlparser.DDLStatement: comments = stmt.GetComments() + // We want sql to be clean of comments, so we temporarily remove, then restore the comments stmt.SetComments(sqlparser.Comments{}) + sql = sqlparser.String(stmt) + stmt.SetComments(comments) case *sqlparser.RevertMigration: - comments = stmt.Comments + comments = stmt.Comments[:] + // We want sql to be clean of comments, so we temporarily remove, then restore the comments stmt.SetComments(sqlparser.Comments{}) + sql = sqlparser.String(stmt) + stmt.SetComments(comments) default: return nil, fmt.Errorf("Unsupported statement for Online DDL: %v", sqlparser.String(stmt)) } @@ -278,7 +285,7 @@ func OnlineDDLFromCommentedStatement(stmt sqlparser.Statement) (onlineDDL *Onlin } onlineDDL = &OnlineDDL{ - SQL: sqlparser.String(stmt), + SQL: sql, } if onlineDDL.UUID, err = decodeDirective("uuid"); err != nil { return nil, err From 6a675e43eed0324b596607e79cdb76ec319254e0 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 15:04:04 +0300 Subject: [PATCH 31/64] run online DDL from within vttablet/query executor Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vttablet/onlineddl/executor.go | 36 +++++++++++++++++++ go/vt/vttablet/onlineddl/schema.go | 18 ++++++++++ .../vttablet/tabletserver/planbuilder/plan.go | 2 +- go/vt/vttablet/tabletserver/query_executor.go | 16 ++++++++- 4 files changed, 70 insertions(+), 2 deletions(-) diff --git a/go/vt/vttablet/onlineddl/executor.go b/go/vt/vttablet/onlineddl/executor.go index 058455a3790..ba4e355415d 100644 --- a/go/vt/vttablet/onlineddl/executor.go +++ b/go/vt/vttablet/onlineddl/executor.go @@ -2496,6 +2496,42 @@ func (e *Executor) RetryMigration(ctx context.Context, uuid string) (result *sql return e.execQuery(ctx, query) } +// SubmitMigration inserts a new migration request +func (e *Executor) SubmitMigration( + ctx context.Context, + stmt sqlparser.Statement, +) (result *sqltypes.Result, err error) { + + onlineDDL, err := schema.OnlineDDLFromCommentedStatement(stmt) + if err != nil { + return nil, fmt.Errorf("Error submitting migration %s: %v", sqlparser.String(stmt), err) + } + _, actionStr, err := onlineDDL.GetActionStr() + if err != nil { + return nil, err + } + + query, err := sqlparser.ParseAndBind(sqlInsertMigration, + sqltypes.StringBindVariable(onlineDDL.UUID), + sqltypes.StringBindVariable(e.keyspace), + sqltypes.StringBindVariable(e.shard), + sqltypes.StringBindVariable(e.dbName), + sqltypes.StringBindVariable(onlineDDL.Table), + sqltypes.StringBindVariable(onlineDDL.SQL), + sqltypes.StringBindVariable(string(onlineDDL.Strategy)), + sqltypes.StringBindVariable(onlineDDL.Options), + sqltypes.StringBindVariable(actionStr), + sqltypes.StringBindVariable(onlineDDL.RequestContext), + sqltypes.StringBindVariable(string(schema.OnlineDDLStatusQueued)), + sqltypes.StringBindVariable(e.TabletAliasString()), + ) + if err != nil { + return nil, err + } + + return e.execQuery(ctx, query) +} + // onSchemaMigrationStatus is called when a status is set/changed for a running migration func (e *Executor) onSchemaMigrationStatus(ctx context.Context, uuid string, status schema.OnlineDDLStatus, dryRun bool, progressPct float64, etaSeconds int64) (err error) { if dryRun && status != schema.OnlineDDLStatusFailed { diff --git a/go/vt/vttablet/onlineddl/schema.go b/go/vt/vttablet/onlineddl/schema.go index f96a75c505f..e73ad6e3fd7 100644 --- a/go/vt/vttablet/onlineddl/schema.go +++ b/go/vt/vttablet/onlineddl/schema.go @@ -57,6 +57,24 @@ const ( alterSchemaMigrationsTableTableCompleteIndex = "ALTER TABLE _vt.schema_migrations add KEY table_complete_idx (migration_status, keyspace(64), mysql_table(64), completed_timestamp)" alterSchemaMigrationsTableETASeconds = "ALTER TABLE _vt.schema_migrations add column eta_seconds bigint NOT NULL DEFAULT -1" + sqlInsertMigration = `INSERT IGNORE INTO _vt.schema_migrations ( + migration_uuid, + keyspace, + shard, + mysql_schema, + mysql_table, + migration_statement, + strategy, + options, + ddl_action, + requested_timestamp, + migration_context, + migration_status, + tablet + ) VALUES ( + %a, %a, %a, %a, %a, %a, %a, %a, %a, FROM_UNIXTIME(0), %a, %a, %a + )` + sqlScheduleSingleMigration = `UPDATE _vt.schema_migrations SET migration_status='ready', diff --git a/go/vt/vttablet/tabletserver/planbuilder/plan.go b/go/vt/vttablet/tabletserver/planbuilder/plan.go index 25cff9b12b1..a79174b2484 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/plan.go +++ b/go/vt/vttablet/tabletserver/planbuilder/plan.go @@ -215,7 +215,7 @@ func Build(statement sqlparser.Statement, tables map[string]*schema.Table, isRes if stmt.IsFullyParsed() { fullQuery = GenerateFullQuery(stmt) } - plan = &Plan{PlanID: PlanDDL, FullQuery: fullQuery} + plan = &Plan{PlanID: PlanDDL, FullQuery: fullQuery, FullStmt: stmt} case *sqlparser.AlterMigration: plan, err = &Plan{PlanID: PlanAlterMigration, FullStmt: stmt}, nil case *sqlparser.RevertMigration: diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index 19613bd42db..645a1036b4f 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -32,6 +32,7 @@ import ( "vitess.io/vitess/go/vt/callerid" "vitess.io/vitess/go/vt/callinfo" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/schema" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/tableacl" "vitess.io/vitess/go/vt/vterrors" @@ -386,6 +387,16 @@ func (qre *QueryExecutor) checkAccess(authorized *tableacl.ACLResult, tableName } func (qre *QueryExecutor) execDDL(conn *StatefulConnection) (*sqltypes.Result, error) { + // Let's see if this is a normal DDL statement or an Online DDL statement. + // An Online DDL statement is identified by /*vt+ .. */ comment with expected directives, like uuid etc. + if onlineDDL, err := schema.OnlineDDLFromCommentedStatement(qre.plan.FullStmt); err == nil { + // Parsing is successful. + if !onlineDDL.Strategy.IsDirect() { + // This is an online DDL. + return qre.tsv.onlineDDLExecutor.SubmitMigration(qre.ctx, qre.plan.FullStmt) + } + } + defer func() { if err := qre.tsv.se.Reload(qre.ctx); err != nil { log.Errorf("failed to reload schema %v", err) @@ -764,7 +775,10 @@ func (qre *QueryExecutor) execAlterMigration() (*sqltypes.Result, error) { } func (qre *QueryExecutor) execRevertMigration() (*sqltypes.Result, error) { - return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "REVERT VITESS_MIGRATION not implemented") + if _, ok := qre.plan.FullStmt.(*sqlparser.RevertMigration); !ok { + return nil, vterrors.New(vtrpcpb.Code_INTERNAL, "Expecting REVERT VITESS_MIGRATION plan") + } + return qre.tsv.onlineDDLExecutor.SubmitMigration(qre.ctx, qre.plan.FullStmt) } func (qre *QueryExecutor) drainResultSetOnConn(conn *connpool.DBConn) error { From f44fa0d8e8fd705af78e56aeeab4506e060c8fe2 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 16:48:03 +0300 Subject: [PATCH 32/64] removed redundant field Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vtgate/engine/cached_size.go | 4 +--- go/vt/vtgate/engine/revert_migration.go | 10 ++++------ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/go/vt/vtgate/engine/cached_size.go b/go/vt/vtgate/engine/cached_size.go index 7a5b322c7d5..722fe5dfab2 100644 --- a/go/vt/vtgate/engine/cached_size.go +++ b/go/vt/vtgate/engine/cached_size.go @@ -509,7 +509,7 @@ func (cached *RevertMigration) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(56) + size += int64(48) } // field Keyspace *vitess.io/vitess/go/vt/vtgate/vindexes.Keyspace size += cached.Keyspace.CachedSize(true) @@ -517,8 +517,6 @@ func (cached *RevertMigration) CachedSize(alloc bool) int64 { size += cached.Stmt.CachedSize(true) // field Query string size += int64(len(cached.Query)) - // field DDLStrategySetting *vitess.io/vitess/go/vt/schema.DDLStrategySetting - size += cached.DDLStrategySetting.CachedSize(true) // field TargetDestination vitess.io/vitess/go/vt/key.Destination if cc, ok := cached.TargetDestination.(cachedObject); ok { size += cc.CachedSize(true) diff --git a/go/vt/vtgate/engine/revert_migration.go b/go/vt/vtgate/engine/revert_migration.go index 327bd412d3a..b3c8594e49d 100644 --- a/go/vt/vtgate/engine/revert_migration.go +++ b/go/vt/vtgate/engine/revert_migration.go @@ -34,11 +34,10 @@ var _ Primitive = (*RevertMigration)(nil) //RevertMigration represents the instructions to perform an online schema change via vtctld type RevertMigration struct { - Keyspace *vindexes.Keyspace - Stmt *sqlparser.RevertMigration - Query string - DDLStrategySetting *schema.DDLStrategySetting - TargetDestination key.Destination + Keyspace *vindexes.Keyspace + Stmt *sqlparser.RevertMigration + Query string + TargetDestination key.Destination noTxNeeded @@ -95,7 +94,6 @@ func (v *RevertMigration) Execute(vcursor VCursor, bindVars map[string]*query.Bi } if ddlStrategySetting.IsSkipTopo() { - // TODO(shlomi): implement before this branch is merged s := Send{ Keyspace: v.Keyspace, TargetDestination: v.TargetDestination, From 5697f179c542d2607f0445b873bdf4b99a60c30a Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 17:04:26 +0300 Subject: [PATCH 33/64] triggering next check upon SubmitMigration Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vttablet/onlineddl/executor.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/go/vt/vttablet/onlineddl/executor.go b/go/vt/vttablet/onlineddl/executor.go index ba4e355415d..e11812c0926 100644 --- a/go/vt/vttablet/onlineddl/executor.go +++ b/go/vt/vttablet/onlineddl/executor.go @@ -105,7 +105,7 @@ var ghostOverridePath = flag.String("gh-ost-path", "", "override default gh-ost var ptOSCOverridePath = flag.String("pt-osc-path", "", "override default pt-online-schema-change binary full path") var migrationCheckInterval = flag.Duration("migration_check_interval", 1*time.Minute, "Interval between migration checks") var retainOnlineDDLTables = flag.Duration("retain_online_ddl_tables", 24*time.Hour, "How long should vttablet keep an old migrated table before purging it") -var migrationNextCheckInterval = 5 * time.Second +var migrationNextCheckIntervals = []time.Duration{1 * time.Second, 5 * time.Second} const ( maxPasswordLength = 32 // MySQL's *replication* password may not exceed 32 characters @@ -283,7 +283,9 @@ func (e *Executor) Close() { // triggerNextCheckInterval the next tick sooner than normal func (e *Executor) triggerNextCheckInterval() { - e.ticks.TriggerAfter(migrationNextCheckInterval) + for _, interval := range migrationNextCheckIntervals { + e.ticks.TriggerAfter(interval) + } } // isAnyMigrationRunning sees if there's any migration running right now @@ -2528,6 +2530,7 @@ func (e *Executor) SubmitMigration( if err != nil { return nil, err } + defer e.triggerNextCheckInterval() return e.execQuery(ctx, query) } From ae7ab35818aa9e40f1fc95d3ce4e3b3579cf853b Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 6 Apr 2021 17:04:45 +0300 Subject: [PATCH 34/64] -skip-topo flag Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/ddl_strategy.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/go/vt/schema/ddl_strategy.go b/go/vt/schema/ddl_strategy.go index c3a6ac36df0..1f04c6764e3 100644 --- a/go/vt/schema/ddl_strategy.go +++ b/go/vt/schema/ddl_strategy.go @@ -29,6 +29,7 @@ var ( const ( declarativeFlag = "declarative" + skipTopoFlag = "skip-topo" singletonFlag = "singleton" ) @@ -129,6 +130,7 @@ func (setting *DDLStrategySetting) RuntimeOptions() []string { for _, opt := range opts { switch { case isFlag(opt, declarativeFlag): + case isFlag(opt, skipTopoFlag): case isFlag(opt, singletonFlag): default: validOpts = append(validOpts, opt) @@ -142,6 +144,8 @@ func (setting *DDLStrategySetting) IsSkipTopo() bool { switch { case setting.IsSingleton(): return true + case setting.hasFlag(skipTopoFlag): + return true } return false } From 8e0c77d475d6f181223bac24491ac8fa3064c780 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Wed, 7 Apr 2021 10:58:08 +0300 Subject: [PATCH 35/64] fix timestamp Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vttablet/onlineddl/schema.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/vt/vttablet/onlineddl/schema.go b/go/vt/vttablet/onlineddl/schema.go index e73ad6e3fd7..90adc05cd76 100644 --- a/go/vt/vttablet/onlineddl/schema.go +++ b/go/vt/vttablet/onlineddl/schema.go @@ -72,7 +72,7 @@ const ( migration_status, tablet ) VALUES ( - %a, %a, %a, %a, %a, %a, %a, %a, %a, FROM_UNIXTIME(0), %a, %a, %a + %a, %a, %a, %a, %a, %a, %a, %a, %a, FROM_UNIXTIME(NOW()), %a, %a, %a )` sqlScheduleSingleMigration = `UPDATE _vt.schema_migrations From 4374d2459bbf1cd12dc1d3ae67361c7175323efd Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Wed, 7 Apr 2021 16:33:09 +0300 Subject: [PATCH 36/64] Adding tabletmanager.ExecuteQuery() which runs QueryExecutor.Execute() for arbitrary queries; support for same in TabletManagerClient. Tablet executor utilizes the above to apply -skip-topo schema changes on tabletmanager Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- .../tabletmanagerdata/tabletmanagerdata.pb.go | 882 +++++++++++++----- .../tabletmanagerservice.pb.go | 166 ++-- go/vt/schemamanager/tablet_executor.go | 32 +- go/vt/vtcombo/tablet_map.go | 4 + go/vt/vttablet/faketmclient/fake_client.go | 5 + go/vt/vttablet/grpctmclient/client.go | 19 + go/vt/vttablet/grpctmserver/server.go | 12 + go/vt/vttablet/tabletmanager/rpc_agent.go | 2 + go/vt/vttablet/tabletmanager/rpc_query.go | 9 + go/vt/vttablet/tmclient/rpc_client_api.go | 2 + go/vt/vttablet/tmrpctest/test_tm_rpc.go | 11 + proto/tabletmanagerdata.proto | 10 + proto/tabletmanagerservice.proto | 2 + 13 files changed, 871 insertions(+), 285 deletions(-) diff --git a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go index b2da2486d5b..70a09fb3a43 100644 --- a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go +++ b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go @@ -1925,6 +1925,116 @@ func (m *UnlockTablesResponse) XXX_DiscardUnknown() { var xxx_messageInfo_UnlockTablesResponse proto.InternalMessageInfo +type ExecuteQueryRequest struct { + Query []byte `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` + DbName string `protobuf:"bytes,2,opt,name=db_name,json=dbName,proto3" json:"db_name,omitempty"` + MaxRows uint64 `protobuf:"varint,3,opt,name=max_rows,json=maxRows,proto3" json:"max_rows,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ExecuteQueryRequest) Reset() { *m = ExecuteQueryRequest{} } +func (m *ExecuteQueryRequest) String() string { return proto.CompactTextString(m) } +func (*ExecuteQueryRequest) ProtoMessage() {} +func (*ExecuteQueryRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_ff9ac4f89e61ffa4, []int{38} +} +func (m *ExecuteQueryRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExecuteQueryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ExecuteQueryRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ExecuteQueryRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExecuteQueryRequest.Merge(m, src) +} +func (m *ExecuteQueryRequest) XXX_Size() int { + return m.Size() +} +func (m *ExecuteQueryRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ExecuteQueryRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ExecuteQueryRequest proto.InternalMessageInfo + +func (m *ExecuteQueryRequest) GetQuery() []byte { + if m != nil { + return m.Query + } + return nil +} + +func (m *ExecuteQueryRequest) GetDbName() string { + if m != nil { + return m.DbName + } + return "" +} + +func (m *ExecuteQueryRequest) GetMaxRows() uint64 { + if m != nil { + return m.MaxRows + } + return 0 +} + +type ExecuteQueryResponse struct { + Result *query.QueryResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ExecuteQueryResponse) Reset() { *m = ExecuteQueryResponse{} } +func (m *ExecuteQueryResponse) String() string { return proto.CompactTextString(m) } +func (*ExecuteQueryResponse) ProtoMessage() {} +func (*ExecuteQueryResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_ff9ac4f89e61ffa4, []int{39} +} +func (m *ExecuteQueryResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExecuteQueryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ExecuteQueryResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ExecuteQueryResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExecuteQueryResponse.Merge(m, src) +} +func (m *ExecuteQueryResponse) XXX_Size() int { + return m.Size() +} +func (m *ExecuteQueryResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ExecuteQueryResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ExecuteQueryResponse proto.InternalMessageInfo + +func (m *ExecuteQueryResponse) GetResult() *query.QueryResult { + if m != nil { + return m.Result + } + return nil +} + type ExecuteFetchAsDbaRequest struct { Query []byte `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` DbName string `protobuf:"bytes,2,opt,name=db_name,json=dbName,proto3" json:"db_name,omitempty"` @@ -1940,7 +2050,7 @@ func (m *ExecuteFetchAsDbaRequest) Reset() { *m = ExecuteFetchAsDbaReque func (m *ExecuteFetchAsDbaRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteFetchAsDbaRequest) ProtoMessage() {} func (*ExecuteFetchAsDbaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{38} + return fileDescriptor_ff9ac4f89e61ffa4, []int{40} } func (m *ExecuteFetchAsDbaRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2015,7 +2125,7 @@ func (m *ExecuteFetchAsDbaResponse) Reset() { *m = ExecuteFetchAsDbaResp func (m *ExecuteFetchAsDbaResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteFetchAsDbaResponse) ProtoMessage() {} func (*ExecuteFetchAsDbaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{39} + return fileDescriptor_ff9ac4f89e61ffa4, []int{41} } func (m *ExecuteFetchAsDbaResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2065,7 +2175,7 @@ func (m *ExecuteFetchAsAllPrivsRequest) Reset() { *m = ExecuteFetchAsAll func (m *ExecuteFetchAsAllPrivsRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteFetchAsAllPrivsRequest) ProtoMessage() {} func (*ExecuteFetchAsAllPrivsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{40} + return fileDescriptor_ff9ac4f89e61ffa4, []int{42} } func (m *ExecuteFetchAsAllPrivsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2133,7 +2243,7 @@ func (m *ExecuteFetchAsAllPrivsResponse) Reset() { *m = ExecuteFetchAsAl func (m *ExecuteFetchAsAllPrivsResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteFetchAsAllPrivsResponse) ProtoMessage() {} func (*ExecuteFetchAsAllPrivsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{41} + return fileDescriptor_ff9ac4f89e61ffa4, []int{43} } func (m *ExecuteFetchAsAllPrivsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2181,7 +2291,7 @@ func (m *ExecuteFetchAsAppRequest) Reset() { *m = ExecuteFetchAsAppReque func (m *ExecuteFetchAsAppRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteFetchAsAppRequest) ProtoMessage() {} func (*ExecuteFetchAsAppRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{42} + return fileDescriptor_ff9ac4f89e61ffa4, []int{44} } func (m *ExecuteFetchAsAppRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2235,7 +2345,7 @@ func (m *ExecuteFetchAsAppResponse) Reset() { *m = ExecuteFetchAsAppResp func (m *ExecuteFetchAsAppResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteFetchAsAppResponse) ProtoMessage() {} func (*ExecuteFetchAsAppResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{43} + return fileDescriptor_ff9ac4f89e61ffa4, []int{45} } func (m *ExecuteFetchAsAppResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2281,7 +2391,7 @@ func (m *ReplicationStatusRequest) Reset() { *m = ReplicationStatusReque func (m *ReplicationStatusRequest) String() string { return proto.CompactTextString(m) } func (*ReplicationStatusRequest) ProtoMessage() {} func (*ReplicationStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{44} + return fileDescriptor_ff9ac4f89e61ffa4, []int{46} } func (m *ReplicationStatusRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2321,7 +2431,7 @@ func (m *ReplicationStatusResponse) Reset() { *m = ReplicationStatusResp func (m *ReplicationStatusResponse) String() string { return proto.CompactTextString(m) } func (*ReplicationStatusResponse) ProtoMessage() {} func (*ReplicationStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{45} + return fileDescriptor_ff9ac4f89e61ffa4, []int{47} } func (m *ReplicationStatusResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2367,7 +2477,7 @@ func (m *MasterStatusRequest) Reset() { *m = MasterStatusRequest{} } func (m *MasterStatusRequest) String() string { return proto.CompactTextString(m) } func (*MasterStatusRequest) ProtoMessage() {} func (*MasterStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{46} + return fileDescriptor_ff9ac4f89e61ffa4, []int{48} } func (m *MasterStatusRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2407,7 +2517,7 @@ func (m *MasterStatusResponse) Reset() { *m = MasterStatusResponse{} } func (m *MasterStatusResponse) String() string { return proto.CompactTextString(m) } func (*MasterStatusResponse) ProtoMessage() {} func (*MasterStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{47} + return fileDescriptor_ff9ac4f89e61ffa4, []int{49} } func (m *MasterStatusResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2453,7 +2563,7 @@ func (m *MasterPositionRequest) Reset() { *m = MasterPositionRequest{} } func (m *MasterPositionRequest) String() string { return proto.CompactTextString(m) } func (*MasterPositionRequest) ProtoMessage() {} func (*MasterPositionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{48} + return fileDescriptor_ff9ac4f89e61ffa4, []int{50} } func (m *MasterPositionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2493,7 +2603,7 @@ func (m *MasterPositionResponse) Reset() { *m = MasterPositionResponse{} func (m *MasterPositionResponse) String() string { return proto.CompactTextString(m) } func (*MasterPositionResponse) ProtoMessage() {} func (*MasterPositionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{49} + return fileDescriptor_ff9ac4f89e61ffa4, []int{51} } func (m *MasterPositionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2540,7 +2650,7 @@ func (m *WaitForPositionRequest) Reset() { *m = WaitForPositionRequest{} func (m *WaitForPositionRequest) String() string { return proto.CompactTextString(m) } func (*WaitForPositionRequest) ProtoMessage() {} func (*WaitForPositionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{50} + return fileDescriptor_ff9ac4f89e61ffa4, []int{52} } func (m *WaitForPositionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2586,7 +2696,7 @@ func (m *WaitForPositionResponse) Reset() { *m = WaitForPositionResponse func (m *WaitForPositionResponse) String() string { return proto.CompactTextString(m) } func (*WaitForPositionResponse) ProtoMessage() {} func (*WaitForPositionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{51} + return fileDescriptor_ff9ac4f89e61ffa4, []int{53} } func (m *WaitForPositionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2625,7 +2735,7 @@ func (m *StopReplicationRequest) Reset() { *m = StopReplicationRequest{} func (m *StopReplicationRequest) String() string { return proto.CompactTextString(m) } func (*StopReplicationRequest) ProtoMessage() {} func (*StopReplicationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{52} + return fileDescriptor_ff9ac4f89e61ffa4, []int{54} } func (m *StopReplicationRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2664,7 +2774,7 @@ func (m *StopReplicationResponse) Reset() { *m = StopReplicationResponse func (m *StopReplicationResponse) String() string { return proto.CompactTextString(m) } func (*StopReplicationResponse) ProtoMessage() {} func (*StopReplicationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{53} + return fileDescriptor_ff9ac4f89e61ffa4, []int{55} } func (m *StopReplicationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2705,7 +2815,7 @@ func (m *StopReplicationMinimumRequest) Reset() { *m = StopReplicationMi func (m *StopReplicationMinimumRequest) String() string { return proto.CompactTextString(m) } func (*StopReplicationMinimumRequest) ProtoMessage() {} func (*StopReplicationMinimumRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{54} + return fileDescriptor_ff9ac4f89e61ffa4, []int{56} } func (m *StopReplicationMinimumRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2759,7 +2869,7 @@ func (m *StopReplicationMinimumResponse) Reset() { *m = StopReplicationM func (m *StopReplicationMinimumResponse) String() string { return proto.CompactTextString(m) } func (*StopReplicationMinimumResponse) ProtoMessage() {} func (*StopReplicationMinimumResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{55} + return fileDescriptor_ff9ac4f89e61ffa4, []int{57} } func (m *StopReplicationMinimumResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2805,7 +2915,7 @@ func (m *StartReplicationRequest) Reset() { *m = StartReplicationRequest func (m *StartReplicationRequest) String() string { return proto.CompactTextString(m) } func (*StartReplicationRequest) ProtoMessage() {} func (*StartReplicationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{56} + return fileDescriptor_ff9ac4f89e61ffa4, []int{58} } func (m *StartReplicationRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2844,7 +2954,7 @@ func (m *StartReplicationResponse) Reset() { *m = StartReplicationRespon func (m *StartReplicationResponse) String() string { return proto.CompactTextString(m) } func (*StartReplicationResponse) ProtoMessage() {} func (*StartReplicationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{57} + return fileDescriptor_ff9ac4f89e61ffa4, []int{59} } func (m *StartReplicationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2885,7 +2995,7 @@ func (m *StartReplicationUntilAfterRequest) Reset() { *m = StartReplicat func (m *StartReplicationUntilAfterRequest) String() string { return proto.CompactTextString(m) } func (*StartReplicationUntilAfterRequest) ProtoMessage() {} func (*StartReplicationUntilAfterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{58} + return fileDescriptor_ff9ac4f89e61ffa4, []int{60} } func (m *StartReplicationUntilAfterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2938,7 +3048,7 @@ func (m *StartReplicationUntilAfterResponse) Reset() { *m = StartReplica func (m *StartReplicationUntilAfterResponse) String() string { return proto.CompactTextString(m) } func (*StartReplicationUntilAfterResponse) ProtoMessage() {} func (*StartReplicationUntilAfterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{59} + return fileDescriptor_ff9ac4f89e61ffa4, []int{61} } func (m *StartReplicationUntilAfterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2977,7 +3087,7 @@ func (m *GetReplicasRequest) Reset() { *m = GetReplicasRequest{} } func (m *GetReplicasRequest) String() string { return proto.CompactTextString(m) } func (*GetReplicasRequest) ProtoMessage() {} func (*GetReplicasRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{60} + return fileDescriptor_ff9ac4f89e61ffa4, []int{62} } func (m *GetReplicasRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3017,7 +3127,7 @@ func (m *GetReplicasResponse) Reset() { *m = GetReplicasResponse{} } func (m *GetReplicasResponse) String() string { return proto.CompactTextString(m) } func (*GetReplicasResponse) ProtoMessage() {} func (*GetReplicasResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{61} + return fileDescriptor_ff9ac4f89e61ffa4, []int{63} } func (m *GetReplicasResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3063,7 +3173,7 @@ func (m *ResetReplicationRequest) Reset() { *m = ResetReplicationRequest func (m *ResetReplicationRequest) String() string { return proto.CompactTextString(m) } func (*ResetReplicationRequest) ProtoMessage() {} func (*ResetReplicationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{62} + return fileDescriptor_ff9ac4f89e61ffa4, []int{64} } func (m *ResetReplicationRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3102,7 +3212,7 @@ func (m *ResetReplicationResponse) Reset() { *m = ResetReplicationRespon func (m *ResetReplicationResponse) String() string { return proto.CompactTextString(m) } func (*ResetReplicationResponse) ProtoMessage() {} func (*ResetReplicationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{63} + return fileDescriptor_ff9ac4f89e61ffa4, []int{65} } func (m *ResetReplicationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3142,7 +3252,7 @@ func (m *VReplicationExecRequest) Reset() { *m = VReplicationExecRequest func (m *VReplicationExecRequest) String() string { return proto.CompactTextString(m) } func (*VReplicationExecRequest) ProtoMessage() {} func (*VReplicationExecRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{64} + return fileDescriptor_ff9ac4f89e61ffa4, []int{66} } func (m *VReplicationExecRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3189,7 +3299,7 @@ func (m *VReplicationExecResponse) Reset() { *m = VReplicationExecRespon func (m *VReplicationExecResponse) String() string { return proto.CompactTextString(m) } func (*VReplicationExecResponse) ProtoMessage() {} func (*VReplicationExecResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{65} + return fileDescriptor_ff9ac4f89e61ffa4, []int{67} } func (m *VReplicationExecResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3237,7 +3347,7 @@ func (m *VReplicationWaitForPosRequest) Reset() { *m = VReplicationWaitF func (m *VReplicationWaitForPosRequest) String() string { return proto.CompactTextString(m) } func (*VReplicationWaitForPosRequest) ProtoMessage() {} func (*VReplicationWaitForPosRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{66} + return fileDescriptor_ff9ac4f89e61ffa4, []int{68} } func (m *VReplicationWaitForPosRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3290,7 +3400,7 @@ func (m *VReplicationWaitForPosResponse) Reset() { *m = VReplicationWait func (m *VReplicationWaitForPosResponse) String() string { return proto.CompactTextString(m) } func (*VReplicationWaitForPosResponse) ProtoMessage() {} func (*VReplicationWaitForPosResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{67} + return fileDescriptor_ff9ac4f89e61ffa4, []int{69} } func (m *VReplicationWaitForPosResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3329,7 +3439,7 @@ func (m *InitMasterRequest) Reset() { *m = InitMasterRequest{} } func (m *InitMasterRequest) String() string { return proto.CompactTextString(m) } func (*InitMasterRequest) ProtoMessage() {} func (*InitMasterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{68} + return fileDescriptor_ff9ac4f89e61ffa4, []int{70} } func (m *InitMasterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3369,7 +3479,7 @@ func (m *InitMasterResponse) Reset() { *m = InitMasterResponse{} } func (m *InitMasterResponse) String() string { return proto.CompactTextString(m) } func (*InitMasterResponse) ProtoMessage() {} func (*InitMasterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{69} + return fileDescriptor_ff9ac4f89e61ffa4, []int{71} } func (m *InitMasterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3419,7 +3529,7 @@ func (m *PopulateReparentJournalRequest) Reset() { *m = PopulateReparent func (m *PopulateReparentJournalRequest) String() string { return proto.CompactTextString(m) } func (*PopulateReparentJournalRequest) ProtoMessage() {} func (*PopulateReparentJournalRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{70} + return fileDescriptor_ff9ac4f89e61ffa4, []int{72} } func (m *PopulateReparentJournalRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3486,7 +3596,7 @@ func (m *PopulateReparentJournalResponse) Reset() { *m = PopulateReparen func (m *PopulateReparentJournalResponse) String() string { return proto.CompactTextString(m) } func (*PopulateReparentJournalResponse) ProtoMessage() {} func (*PopulateReparentJournalResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{71} + return fileDescriptor_ff9ac4f89e61ffa4, []int{73} } func (m *PopulateReparentJournalResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3528,7 +3638,7 @@ func (m *InitReplicaRequest) Reset() { *m = InitReplicaRequest{} } func (m *InitReplicaRequest) String() string { return proto.CompactTextString(m) } func (*InitReplicaRequest) ProtoMessage() {} func (*InitReplicaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{72} + return fileDescriptor_ff9ac4f89e61ffa4, []int{74} } func (m *InitReplicaRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3588,7 +3698,7 @@ func (m *InitReplicaResponse) Reset() { *m = InitReplicaResponse{} } func (m *InitReplicaResponse) String() string { return proto.CompactTextString(m) } func (*InitReplicaResponse) ProtoMessage() {} func (*InitReplicaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{73} + return fileDescriptor_ff9ac4f89e61ffa4, []int{75} } func (m *InitReplicaResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3627,7 +3737,7 @@ func (m *DemoteMasterRequest) Reset() { *m = DemoteMasterRequest{} } func (m *DemoteMasterRequest) String() string { return proto.CompactTextString(m) } func (*DemoteMasterRequest) ProtoMessage() {} func (*DemoteMasterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{74} + return fileDescriptor_ff9ac4f89e61ffa4, []int{76} } func (m *DemoteMasterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3670,7 +3780,7 @@ func (m *DemoteMasterResponse) Reset() { *m = DemoteMasterResponse{} } func (m *DemoteMasterResponse) String() string { return proto.CompactTextString(m) } func (*DemoteMasterResponse) ProtoMessage() {} func (*DemoteMasterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{75} + return fileDescriptor_ff9ac4f89e61ffa4, []int{77} } func (m *DemoteMasterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3724,7 +3834,7 @@ func (m *UndoDemoteMasterRequest) Reset() { *m = UndoDemoteMasterRequest func (m *UndoDemoteMasterRequest) String() string { return proto.CompactTextString(m) } func (*UndoDemoteMasterRequest) ProtoMessage() {} func (*UndoDemoteMasterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{76} + return fileDescriptor_ff9ac4f89e61ffa4, []int{78} } func (m *UndoDemoteMasterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3763,7 +3873,7 @@ func (m *UndoDemoteMasterResponse) Reset() { *m = UndoDemoteMasterRespon func (m *UndoDemoteMasterResponse) String() string { return proto.CompactTextString(m) } func (*UndoDemoteMasterResponse) ProtoMessage() {} func (*UndoDemoteMasterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{77} + return fileDescriptor_ff9ac4f89e61ffa4, []int{79} } func (m *UndoDemoteMasterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3802,7 +3912,7 @@ func (m *ReplicaWasPromotedRequest) Reset() { *m = ReplicaWasPromotedReq func (m *ReplicaWasPromotedRequest) String() string { return proto.CompactTextString(m) } func (*ReplicaWasPromotedRequest) ProtoMessage() {} func (*ReplicaWasPromotedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{78} + return fileDescriptor_ff9ac4f89e61ffa4, []int{80} } func (m *ReplicaWasPromotedRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3841,7 +3951,7 @@ func (m *ReplicaWasPromotedResponse) Reset() { *m = ReplicaWasPromotedRe func (m *ReplicaWasPromotedResponse) String() string { return proto.CompactTextString(m) } func (*ReplicaWasPromotedResponse) ProtoMessage() {} func (*ReplicaWasPromotedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{79} + return fileDescriptor_ff9ac4f89e61ffa4, []int{81} } func (m *ReplicaWasPromotedResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3884,7 +3994,7 @@ func (m *SetMasterRequest) Reset() { *m = SetMasterRequest{} } func (m *SetMasterRequest) String() string { return proto.CompactTextString(m) } func (*SetMasterRequest) ProtoMessage() {} func (*SetMasterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{80} + return fileDescriptor_ff9ac4f89e61ffa4, []int{82} } func (m *SetMasterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3951,7 +4061,7 @@ func (m *SetMasterResponse) Reset() { *m = SetMasterResponse{} } func (m *SetMasterResponse) String() string { return proto.CompactTextString(m) } func (*SetMasterResponse) ProtoMessage() {} func (*SetMasterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{81} + return fileDescriptor_ff9ac4f89e61ffa4, []int{83} } func (m *SetMasterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3992,7 +4102,7 @@ func (m *ReplicaWasRestartedRequest) Reset() { *m = ReplicaWasRestartedR func (m *ReplicaWasRestartedRequest) String() string { return proto.CompactTextString(m) } func (*ReplicaWasRestartedRequest) ProtoMessage() {} func (*ReplicaWasRestartedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{82} + return fileDescriptor_ff9ac4f89e61ffa4, []int{84} } func (m *ReplicaWasRestartedRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4038,7 +4148,7 @@ func (m *ReplicaWasRestartedResponse) Reset() { *m = ReplicaWasRestarted func (m *ReplicaWasRestartedResponse) String() string { return proto.CompactTextString(m) } func (*ReplicaWasRestartedResponse) ProtoMessage() {} func (*ReplicaWasRestartedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{83} + return fileDescriptor_ff9ac4f89e61ffa4, []int{85} } func (m *ReplicaWasRestartedResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4078,7 +4188,7 @@ func (m *StopReplicationAndGetStatusRequest) Reset() { *m = StopReplicat func (m *StopReplicationAndGetStatusRequest) String() string { return proto.CompactTextString(m) } func (*StopReplicationAndGetStatusRequest) ProtoMessage() {} func (*StopReplicationAndGetStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{84} + return fileDescriptor_ff9ac4f89e61ffa4, []int{86} } func (m *StopReplicationAndGetStatusRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4130,7 +4240,7 @@ func (m *StopReplicationAndGetStatusResponse) Reset() { *m = StopReplica func (m *StopReplicationAndGetStatusResponse) String() string { return proto.CompactTextString(m) } func (*StopReplicationAndGetStatusResponse) ProtoMessage() {} func (*StopReplicationAndGetStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{85} + return fileDescriptor_ff9ac4f89e61ffa4, []int{87} } func (m *StopReplicationAndGetStatusResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4184,7 +4294,7 @@ func (m *PromoteReplicaRequest) Reset() { *m = PromoteReplicaRequest{} } func (m *PromoteReplicaRequest) String() string { return proto.CompactTextString(m) } func (*PromoteReplicaRequest) ProtoMessage() {} func (*PromoteReplicaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{86} + return fileDescriptor_ff9ac4f89e61ffa4, []int{88} } func (m *PromoteReplicaRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4224,7 +4334,7 @@ func (m *PromoteReplicaResponse) Reset() { *m = PromoteReplicaResponse{} func (m *PromoteReplicaResponse) String() string { return proto.CompactTextString(m) } func (*PromoteReplicaResponse) ProtoMessage() {} func (*PromoteReplicaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{87} + return fileDescriptor_ff9ac4f89e61ffa4, []int{89} } func (m *PromoteReplicaResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4272,7 +4382,7 @@ func (m *BackupRequest) Reset() { *m = BackupRequest{} } func (m *BackupRequest) String() string { return proto.CompactTextString(m) } func (*BackupRequest) ProtoMessage() {} func (*BackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{88} + return fileDescriptor_ff9ac4f89e61ffa4, []int{90} } func (m *BackupRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4326,7 +4436,7 @@ func (m *BackupResponse) Reset() { *m = BackupResponse{} } func (m *BackupResponse) String() string { return proto.CompactTextString(m) } func (*BackupResponse) ProtoMessage() {} func (*BackupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{89} + return fileDescriptor_ff9ac4f89e61ffa4, []int{91} } func (m *BackupResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4372,7 +4482,7 @@ func (m *RestoreFromBackupRequest) Reset() { *m = RestoreFromBackupReque func (m *RestoreFromBackupRequest) String() string { return proto.CompactTextString(m) } func (*RestoreFromBackupRequest) ProtoMessage() {} func (*RestoreFromBackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{90} + return fileDescriptor_ff9ac4f89e61ffa4, []int{92} } func (m *RestoreFromBackupRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4412,7 +4522,7 @@ func (m *RestoreFromBackupResponse) Reset() { *m = RestoreFromBackupResp func (m *RestoreFromBackupResponse) String() string { return proto.CompactTextString(m) } func (*RestoreFromBackupResponse) ProtoMessage() {} func (*RestoreFromBackupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{91} + return fileDescriptor_ff9ac4f89e61ffa4, []int{93} } func (m *RestoreFromBackupResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4461,7 +4571,7 @@ func (m *VExecRequest) Reset() { *m = VExecRequest{} } func (m *VExecRequest) String() string { return proto.CompactTextString(m) } func (*VExecRequest) ProtoMessage() {} func (*VExecRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{92} + return fileDescriptor_ff9ac4f89e61ffa4, []int{94} } func (m *VExecRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4522,7 +4632,7 @@ func (m *VExecResponse) Reset() { *m = VExecResponse{} } func (m *VExecResponse) String() string { return proto.CompactTextString(m) } func (*VExecResponse) ProtoMessage() {} func (*VExecResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ff9ac4f89e61ffa4, []int{93} + return fileDescriptor_ff9ac4f89e61ffa4, []int{95} } func (m *VExecResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4600,6 +4710,8 @@ func init() { proto.RegisterType((*LockTablesResponse)(nil), "tabletmanagerdata.LockTablesResponse") proto.RegisterType((*UnlockTablesRequest)(nil), "tabletmanagerdata.UnlockTablesRequest") proto.RegisterType((*UnlockTablesResponse)(nil), "tabletmanagerdata.UnlockTablesResponse") + proto.RegisterType((*ExecuteQueryRequest)(nil), "tabletmanagerdata.ExecuteQueryRequest") + proto.RegisterType((*ExecuteQueryResponse)(nil), "tabletmanagerdata.ExecuteQueryResponse") proto.RegisterType((*ExecuteFetchAsDbaRequest)(nil), "tabletmanagerdata.ExecuteFetchAsDbaRequest") proto.RegisterType((*ExecuteFetchAsDbaResponse)(nil), "tabletmanagerdata.ExecuteFetchAsDbaResponse") proto.RegisterType((*ExecuteFetchAsAllPrivsRequest)(nil), "tabletmanagerdata.ExecuteFetchAsAllPrivsRequest") @@ -4661,145 +4773,146 @@ func init() { func init() { proto.RegisterFile("tabletmanagerdata.proto", fileDescriptor_ff9ac4f89e61ffa4) } var fileDescriptor_ff9ac4f89e61ffa4 = []byte{ - // 2206 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x39, 0x4b, 0x73, 0xdb, 0xd6, - 0xd5, 0x1f, 0xa8, 0x87, 0xa5, 0xc3, 0x87, 0x28, 0x90, 0x12, 0x21, 0xfa, 0x33, 0x2d, 0xc3, 0x4e, - 0xe2, 0x49, 0xa6, 0x54, 0x23, 0x27, 0x99, 0x4c, 0xd2, 0x76, 0x22, 0xdb, 0x92, 0x9d, 0x58, 0x8e, - 0x15, 0xc8, 0x8f, 0x4e, 0xa6, 0x53, 0x0c, 0x08, 0x5c, 0x91, 0x18, 0x81, 0xb8, 0xf0, 0xbd, 0x17, - 0xa4, 0xb8, 0xe9, 0x4f, 0x68, 0xb7, 0x5d, 0x75, 0xd3, 0x99, 0x76, 0xdf, 0x1f, 0xd1, 0xe9, 0xb2, - 0xab, 0x74, 0xdb, 0x71, 0x7f, 0x44, 0x17, 0x5d, 0xb4, 0x73, 0x1f, 0x20, 0x01, 0x02, 0xb2, 0x65, - 0x8d, 0x3b, 0xd3, 0x8d, 0x06, 0xe7, 0xfd, 0xb8, 0xe7, 0x9e, 0x73, 0x2e, 0x05, 0x2d, 0xe6, 0xf4, - 0x02, 0xc4, 0x86, 0x4e, 0xe8, 0xf4, 0x11, 0xf1, 0x1c, 0xe6, 0x74, 0x23, 0x82, 0x19, 0xd6, 0xd7, - 0x73, 0x84, 0x76, 0xf9, 0x65, 0x8c, 0xc8, 0x44, 0xd2, 0xdb, 0x35, 0x86, 0x23, 0x3c, 0xe3, 0x6f, - 0x6f, 0x10, 0x14, 0x05, 0xbe, 0xeb, 0x30, 0x1f, 0x87, 0x29, 0x74, 0x35, 0xc0, 0xfd, 0x98, 0xf9, - 0x81, 0x04, 0xcd, 0x7f, 0x6b, 0xb0, 0xf6, 0x94, 0x2b, 0xbe, 0x8f, 0x4e, 0xfc, 0xd0, 0xe7, 0xcc, - 0xba, 0x0e, 0x8b, 0xa1, 0x33, 0x44, 0x86, 0xb6, 0xad, 0xdd, 0x5e, 0xb5, 0xc4, 0xb7, 0xbe, 0x09, - 0xcb, 0xd4, 0x1d, 0xa0, 0xa1, 0x63, 0x94, 0x04, 0x56, 0x41, 0xba, 0x01, 0x57, 0x5c, 0x1c, 0xc4, - 0xc3, 0x90, 0x1a, 0x0b, 0xdb, 0x0b, 0xb7, 0x57, 0xad, 0x04, 0xd4, 0xbb, 0xd0, 0x88, 0x88, 0x3f, - 0x74, 0xc8, 0xc4, 0x3e, 0x45, 0x13, 0x3b, 0xe1, 0x5a, 0x14, 0x5c, 0xeb, 0x8a, 0xf4, 0x08, 0x4d, - 0xee, 0x29, 0x7e, 0x1d, 0x16, 0xd9, 0x24, 0x42, 0xc6, 0x92, 0xb4, 0xca, 0xbf, 0xf5, 0xeb, 0x50, - 0xe6, 0xae, 0xdb, 0x01, 0x0a, 0xfb, 0x6c, 0x60, 0x2c, 0x6f, 0x6b, 0xb7, 0x17, 0x2d, 0xe0, 0xa8, - 0x43, 0x81, 0xd1, 0xaf, 0xc2, 0x2a, 0xc1, 0x63, 0xdb, 0xc5, 0x71, 0xc8, 0x8c, 0x2b, 0x82, 0xbc, - 0x42, 0xf0, 0xf8, 0x1e, 0x87, 0xf5, 0x5b, 0xb0, 0x7c, 0xe2, 0xa3, 0xc0, 0xa3, 0xc6, 0xca, 0xf6, - 0xc2, 0xed, 0xf2, 0x6e, 0xa5, 0x2b, 0xf3, 0x75, 0xc0, 0x91, 0x96, 0xa2, 0x99, 0x7f, 0xd0, 0xa0, - 0x7e, 0x2c, 0x82, 0x49, 0xa5, 0xe0, 0x03, 0x58, 0xe3, 0x56, 0x7a, 0x0e, 0x45, 0xb6, 0x8a, 0x5b, - 0x66, 0xa3, 0x96, 0xa0, 0xa5, 0x88, 0xfe, 0x04, 0xe4, 0xb9, 0xd8, 0xde, 0x54, 0x98, 0x1a, 0x25, - 0x61, 0xce, 0xec, 0xe6, 0x8f, 0x72, 0x2e, 0xd5, 0x56, 0x9d, 0x65, 0x11, 0x94, 0x27, 0x74, 0x84, - 0x08, 0xf5, 0x71, 0x68, 0x2c, 0x08, 0x8b, 0x09, 0xc8, 0x1d, 0xd5, 0xa5, 0xd5, 0x7b, 0x03, 0x27, - 0xec, 0x23, 0x0b, 0xd1, 0x38, 0x60, 0xfa, 0x43, 0xa8, 0xf6, 0xd0, 0x09, 0x26, 0x19, 0x47, 0xcb, - 0xbb, 0x37, 0x0b, 0xac, 0xcf, 0x87, 0x69, 0x55, 0xa4, 0xa4, 0x8a, 0xe5, 0x00, 0x2a, 0xce, 0x09, - 0x43, 0xc4, 0x4e, 0x9d, 0xf4, 0x05, 0x15, 0x95, 0x85, 0xa0, 0x44, 0x9b, 0xff, 0xd4, 0xa0, 0xf6, - 0x8c, 0x22, 0x72, 0x84, 0xc8, 0xd0, 0xa7, 0x54, 0x95, 0xd4, 0x00, 0x53, 0x96, 0x94, 0x14, 0xff, - 0xe6, 0xb8, 0x98, 0x22, 0xa2, 0x0a, 0x4a, 0x7c, 0xeb, 0x1f, 0xc1, 0x7a, 0xe4, 0x50, 0x3a, 0xc6, - 0xc4, 0xb3, 0xdd, 0x01, 0x72, 0x4f, 0x69, 0x3c, 0x14, 0x79, 0x58, 0xb4, 0xea, 0x09, 0xe1, 0x9e, - 0xc2, 0xeb, 0xdf, 0x01, 0x44, 0xc4, 0x1f, 0xf9, 0x01, 0xea, 0x23, 0x59, 0x58, 0xe5, 0xdd, 0x8f, - 0x0b, 0xbc, 0xcd, 0xfa, 0xd2, 0x3d, 0x9a, 0xca, 0xec, 0x87, 0x8c, 0x4c, 0xac, 0x94, 0x92, 0xf6, - 0x4f, 0x61, 0x6d, 0x8e, 0xac, 0xd7, 0x61, 0xe1, 0x14, 0x4d, 0x94, 0xe7, 0xfc, 0x53, 0x6f, 0xc2, - 0xd2, 0xc8, 0x09, 0x62, 0xa4, 0x3c, 0x97, 0xc0, 0x17, 0xa5, 0xcf, 0x35, 0xf3, 0x07, 0x0d, 0x2a, - 0xf7, 0x7b, 0x6f, 0x88, 0xbb, 0x06, 0x25, 0xaf, 0xa7, 0x64, 0x4b, 0x5e, 0x6f, 0x9a, 0x87, 0x85, - 0x54, 0x1e, 0x9e, 0x14, 0x84, 0xb6, 0x53, 0x10, 0x5a, 0xda, 0xd8, 0x7f, 0x33, 0xb0, 0xdf, 0x6b, - 0x50, 0x9e, 0x59, 0xa2, 0xfa, 0x21, 0xd4, 0xb9, 0x9f, 0x76, 0x34, 0xc3, 0x19, 0x9a, 0xf0, 0xf2, - 0xc6, 0x1b, 0x0f, 0xc0, 0x5a, 0x8b, 0x33, 0x30, 0xd5, 0x0f, 0xa0, 0xe6, 0xf5, 0x32, 0xba, 0xe4, - 0x0d, 0xba, 0xfe, 0x86, 0x88, 0xad, 0xaa, 0x97, 0x82, 0xa8, 0xf9, 0x01, 0x94, 0x8f, 0xfc, 0xb0, - 0x6f, 0xa1, 0x97, 0x31, 0xa2, 0x8c, 0x5f, 0xa5, 0xc8, 0x99, 0x04, 0xd8, 0xf1, 0x54, 0x90, 0x09, - 0x68, 0xde, 0x86, 0x8a, 0x64, 0xa4, 0x11, 0x0e, 0x29, 0x7a, 0x0d, 0xe7, 0x87, 0x50, 0x39, 0x0e, - 0x10, 0x8a, 0x12, 0x9d, 0x6d, 0x58, 0xf1, 0x62, 0x22, 0x9a, 0xaa, 0x60, 0x5d, 0xb0, 0xa6, 0xb0, - 0xb9, 0x06, 0x55, 0xc5, 0x2b, 0xd5, 0x9a, 0x7f, 0xd3, 0x40, 0xdf, 0x3f, 0x43, 0x6e, 0xcc, 0xd0, - 0x43, 0x8c, 0x4f, 0x13, 0x1d, 0x45, 0xfd, 0xb5, 0x03, 0x10, 0x39, 0xc4, 0x19, 0x22, 0x86, 0x88, - 0x0c, 0x7f, 0xd5, 0x4a, 0x61, 0xf4, 0x23, 0x58, 0x45, 0x67, 0x8c, 0x38, 0x36, 0x0a, 0x47, 0xa2, - 0xd3, 0x96, 0x77, 0xef, 0x14, 0x64, 0x27, 0x6f, 0xad, 0xbb, 0xcf, 0xc5, 0xf6, 0xc3, 0x91, 0xac, - 0x89, 0x15, 0xa4, 0xc0, 0xf6, 0x97, 0x50, 0xcd, 0x90, 0xde, 0xaa, 0x1e, 0x4e, 0xa0, 0x91, 0x31, - 0xa5, 0xf2, 0x78, 0x1d, 0xca, 0xe8, 0xcc, 0x67, 0x36, 0x65, 0x0e, 0x8b, 0xa9, 0x4a, 0x10, 0x70, - 0xd4, 0xb1, 0xc0, 0x88, 0x31, 0xc2, 0x3c, 0x1c, 0xb3, 0xe9, 0x18, 0x11, 0x90, 0xc2, 0x23, 0x92, - 0xdc, 0x02, 0x05, 0x99, 0x23, 0xa8, 0x3f, 0x40, 0x4c, 0xf6, 0x95, 0x24, 0x7d, 0x9b, 0xb0, 0x2c, - 0x02, 0x97, 0x15, 0xb7, 0x6a, 0x29, 0x48, 0xbf, 0x09, 0x55, 0x3f, 0x74, 0x83, 0xd8, 0x43, 0xf6, - 0xc8, 0x47, 0x63, 0x2a, 0x4c, 0xac, 0x58, 0x15, 0x85, 0x7c, 0xce, 0x71, 0xfa, 0x7b, 0x50, 0x43, - 0x67, 0x92, 0x49, 0x29, 0x91, 0x63, 0xab, 0xaa, 0xb0, 0xa2, 0x41, 0x53, 0x13, 0xc1, 0x7a, 0xca, - 0xae, 0x8a, 0xee, 0x08, 0xd6, 0x65, 0x67, 0x4c, 0x35, 0xfb, 0xb7, 0xe9, 0xb6, 0x75, 0x3a, 0x87, - 0x31, 0x5b, 0xb0, 0xf1, 0x00, 0xb1, 0x54, 0x09, 0xab, 0x18, 0xcd, 0xef, 0x61, 0x73, 0x9e, 0xa0, - 0x9c, 0xf8, 0x0a, 0xca, 0xd9, 0x4b, 0xc7, 0xcd, 0x77, 0x0a, 0xcc, 0xa7, 0x85, 0xd3, 0x22, 0x66, - 0x13, 0xf4, 0x63, 0xc4, 0x2c, 0xe4, 0x78, 0x4f, 0xc2, 0x60, 0x92, 0x58, 0xdc, 0x80, 0x46, 0x06, - 0xab, 0x4a, 0x78, 0x86, 0x7e, 0x41, 0x7c, 0x86, 0x12, 0xee, 0x4d, 0x68, 0x66, 0xd1, 0x8a, 0xfd, - 0x1b, 0x58, 0x97, 0xc3, 0xe9, 0xe9, 0x24, 0x4a, 0x98, 0xf5, 0x4f, 0xa1, 0x2c, 0xdd, 0xb3, 0xc5, - 0x80, 0xe7, 0x2e, 0xd7, 0x76, 0x9b, 0xdd, 0xe9, 0xbe, 0x22, 0x72, 0xce, 0x84, 0x04, 0xb0, 0xe9, - 0x37, 0xf7, 0x33, 0xad, 0x6b, 0xe6, 0x90, 0x85, 0x4e, 0x08, 0xa2, 0x03, 0x5e, 0x52, 0x69, 0x87, - 0xb2, 0x68, 0xc5, 0xde, 0x82, 0x0d, 0x2b, 0x0e, 0x1f, 0x22, 0x27, 0x60, 0x03, 0x31, 0x38, 0x12, - 0x01, 0x03, 0x36, 0xe7, 0x09, 0x4a, 0xe4, 0x13, 0x30, 0xbe, 0xee, 0x87, 0x98, 0x20, 0x49, 0xdc, - 0x27, 0x04, 0x93, 0x4c, 0x4b, 0x61, 0x0c, 0x91, 0x70, 0xd6, 0x28, 0x04, 0x68, 0x5e, 0x85, 0xad, - 0x02, 0x29, 0xa5, 0xf2, 0x0b, 0xee, 0x34, 0xef, 0x27, 0xd9, 0x4a, 0xbe, 0x09, 0xd5, 0xb1, 0xe3, - 0x33, 0x3b, 0xc2, 0x74, 0x56, 0x4c, 0xab, 0x56, 0x85, 0x23, 0x8f, 0x14, 0x4e, 0x46, 0x96, 0x96, - 0x55, 0x3a, 0x77, 0x61, 0xf3, 0x88, 0xa0, 0x93, 0xc0, 0xef, 0x0f, 0xe6, 0x2e, 0x08, 0xdf, 0xc9, - 0x44, 0xe2, 0x92, 0x1b, 0x92, 0x80, 0x66, 0x1f, 0x5a, 0x39, 0x19, 0x55, 0x57, 0x87, 0x50, 0x93, - 0x5c, 0x36, 0x11, 0x7b, 0x45, 0xd2, 0xcf, 0xdf, 0x3b, 0xb7, 0xb2, 0xd3, 0x5b, 0x88, 0x55, 0x75, - 0x53, 0x10, 0x35, 0xff, 0xa5, 0x81, 0xbe, 0x17, 0x45, 0xc1, 0x24, 0xeb, 0x59, 0x1d, 0x16, 0xe8, - 0xcb, 0x20, 0x69, 0x31, 0xf4, 0x65, 0xc0, 0x5b, 0xcc, 0x09, 0x26, 0x2e, 0x52, 0x97, 0x55, 0x02, - 0x7c, 0x0d, 0x70, 0x82, 0x00, 0x8f, 0xed, 0xd4, 0x0e, 0x2b, 0x3a, 0xc3, 0x8a, 0x55, 0x17, 0x04, - 0x6b, 0x86, 0xcf, 0x2f, 0x40, 0x8b, 0xef, 0x6a, 0x01, 0x5a, 0xba, 0xe4, 0x02, 0xf4, 0x47, 0x0d, - 0x1a, 0x99, 0xe8, 0x55, 0x8e, 0xff, 0xf7, 0x56, 0xb5, 0x06, 0xac, 0x1f, 0x62, 0xf7, 0x54, 0x76, - 0xbd, 0xe4, 0x6a, 0x34, 0x41, 0x4f, 0x23, 0x67, 0x17, 0xef, 0x59, 0x18, 0xe4, 0x98, 0x37, 0xa1, - 0x99, 0x45, 0x2b, 0xf6, 0x3f, 0x69, 0x60, 0xa8, 0x11, 0x71, 0x80, 0x98, 0x3b, 0xd8, 0xa3, 0xf7, - 0x7b, 0xd3, 0x3a, 0x68, 0xc2, 0x92, 0x58, 0xc5, 0x45, 0x02, 0x2a, 0x96, 0x04, 0xf4, 0x16, 0x5c, - 0xf1, 0x7a, 0xb6, 0x18, 0x8d, 0x6a, 0x3a, 0x78, 0xbd, 0x6f, 0xf9, 0x70, 0xdc, 0x82, 0x95, 0xa1, - 0x73, 0x66, 0x13, 0x3c, 0xa6, 0x6a, 0x19, 0xbc, 0x32, 0x74, 0xce, 0x2c, 0x3c, 0xa6, 0x62, 0x51, - 0xf7, 0xa9, 0xd8, 0xc0, 0x7b, 0x7e, 0x18, 0xe0, 0x3e, 0x15, 0xc7, 0xbf, 0x62, 0xd5, 0x14, 0xfa, - 0xae, 0xc4, 0xf2, 0xbb, 0x46, 0xc4, 0x35, 0x4a, 0x1f, 0xee, 0x8a, 0x55, 0x21, 0xa9, 0xbb, 0x65, - 0x3e, 0x80, 0xad, 0x02, 0x9f, 0xd5, 0xe9, 0x7d, 0x08, 0xcb, 0xf2, 0x6a, 0xa8, 0x63, 0xd3, 0xd5, - 0x73, 0xe2, 0x3b, 0xfe, 0x57, 0x5d, 0x03, 0xc5, 0x61, 0xfe, 0x5a, 0x83, 0x6b, 0x59, 0x4d, 0x7b, - 0x41, 0xc0, 0x17, 0x30, 0xfa, 0xee, 0x53, 0x90, 0x8b, 0x6c, 0xb1, 0x20, 0xb2, 0x43, 0xe8, 0x9c, - 0xe7, 0xcf, 0x25, 0xc2, 0x7b, 0x34, 0x7f, 0xb6, 0x7b, 0x51, 0xf4, 0xfa, 0xc0, 0xd2, 0xfe, 0x97, - 0x32, 0xfe, 0xe7, 0x93, 0x2e, 0x94, 0x5d, 0xc2, 0xab, 0x36, 0x18, 0xa9, 0xbe, 0x20, 0x37, 0x8e, - 0xa4, 0x4c, 0x0f, 0x61, 0xab, 0x80, 0xa6, 0x8c, 0xec, 0xf0, 0xed, 0x63, 0xba, 0xb1, 0x94, 0x77, - 0x5b, 0xdd, 0xf9, 0xb7, 0xb3, 0x12, 0x50, 0x6c, 0xfc, 0x2e, 0x3c, 0x76, 0x28, 0xbf, 0x46, 0x19, - 0x23, 0x8f, 0xa1, 0x99, 0x45, 0x2b, 0xfd, 0x9f, 0xce, 0xe9, 0xbf, 0x96, 0xd3, 0x9f, 0x11, 0x4b, - 0xac, 0xb4, 0x60, 0x43, 0xe2, 0x93, 0x59, 0x90, 0xd8, 0xf9, 0x04, 0x36, 0xe7, 0x09, 0xca, 0x52, - 0x1b, 0x56, 0xe6, 0x86, 0xc9, 0x14, 0xe6, 0x52, 0x2f, 0x1c, 0x9f, 0x1d, 0xe0, 0x79, 0x7d, 0xaf, - 0x95, 0xda, 0x82, 0x56, 0x4e, 0x4a, 0x5d, 0x71, 0x03, 0x36, 0x8f, 0x19, 0x8e, 0x52, 0x79, 0x4d, - 0x1c, 0xdc, 0x82, 0x56, 0x8e, 0xa2, 0x84, 0x7e, 0x09, 0xd7, 0xe6, 0x48, 0x8f, 0xfd, 0xd0, 0x1f, - 0xc6, 0xc3, 0x0b, 0x38, 0xa3, 0xdf, 0x00, 0x31, 0x1b, 0x6d, 0xe6, 0x0f, 0x51, 0xb2, 0x44, 0x2e, - 0x58, 0x65, 0x8e, 0x7b, 0x2a, 0x51, 0xe6, 0x4f, 0xa0, 0x73, 0x9e, 0xfe, 0x0b, 0xe4, 0x48, 0x38, - 0xee, 0x10, 0x56, 0x10, 0x53, 0x1b, 0x8c, 0x3c, 0x49, 0x05, 0xd5, 0x83, 0x1b, 0xf3, 0xb4, 0x67, - 0x21, 0xf3, 0x83, 0x3d, 0xde, 0x6a, 0xdf, 0x51, 0x60, 0xb7, 0xc0, 0x7c, 0x9d, 0x0d, 0xe5, 0x49, - 0x13, 0xf4, 0x07, 0x28, 0xe1, 0x99, 0x16, 0xe6, 0x47, 0xd0, 0xc8, 0x60, 0x55, 0x26, 0x9a, 0xb0, - 0xe4, 0x78, 0x1e, 0x49, 0xd6, 0x04, 0x09, 0xf0, 0x1c, 0x58, 0x88, 0xa2, 0x73, 0x72, 0x90, 0x27, - 0x29, 0xcb, 0x3b, 0xd0, 0x7a, 0x9e, 0xc2, 0xf3, 0x2b, 0x5d, 0xd8, 0x12, 0x56, 0x55, 0x4b, 0x30, - 0x0f, 0xc0, 0xc8, 0x0b, 0x5c, 0xaa, 0x19, 0x5d, 0x4b, 0xeb, 0x99, 0x55, 0x6b, 0x62, 0xbe, 0x06, - 0x25, 0xdf, 0x53, 0x8f, 0x91, 0x92, 0xef, 0x65, 0x0e, 0xa2, 0x34, 0x57, 0x00, 0xdb, 0xd0, 0x39, - 0x4f, 0x99, 0x8a, 0xb3, 0x01, 0xeb, 0x5f, 0x87, 0x3e, 0x93, 0x17, 0x30, 0x49, 0xcc, 0x8f, 0x41, - 0x4f, 0x23, 0x2f, 0x50, 0x69, 0x3f, 0x68, 0xd0, 0x39, 0xc2, 0x51, 0x1c, 0x88, 0x6d, 0x35, 0x72, - 0x08, 0x0a, 0xd9, 0x37, 0x38, 0x26, 0xa1, 0x13, 0x24, 0x7e, 0xbf, 0x0f, 0x6b, 0xbc, 0x1e, 0x6c, - 0x97, 0x20, 0x87, 0x21, 0xcf, 0x0e, 0x93, 0x17, 0x55, 0x95, 0xa3, 0xef, 0x49, 0xec, 0xb7, 0x94, - 0xbf, 0xba, 0x1c, 0x97, 0x2b, 0x4d, 0x0f, 0x0e, 0x90, 0x28, 0x31, 0x3c, 0x3e, 0x87, 0xca, 0x50, - 0x78, 0x66, 0x3b, 0x81, 0xef, 0xc8, 0x01, 0x52, 0xde, 0xdd, 0x98, 0xdf, 0xc0, 0xf7, 0x38, 0xd1, - 0x2a, 0x4b, 0x56, 0x01, 0xe8, 0x1f, 0x43, 0x33, 0xd5, 0xaa, 0x66, 0x8b, 0xea, 0xa2, 0xb0, 0xd1, - 0x48, 0xd1, 0xa6, 0xfb, 0xea, 0x0d, 0xb8, 0x7e, 0x6e, 0x5c, 0x2a, 0x85, 0xbf, 0xd3, 0x64, 0xba, - 0x54, 0xa2, 0x93, 0x78, 0x7f, 0x04, 0xcb, 0x92, 0x5f, 0x1d, 0xfa, 0x39, 0x0e, 0x2a, 0xa6, 0x73, - 0x7d, 0x2b, 0x9d, 0xeb, 0x5b, 0x51, 0x46, 0x17, 0x0a, 0x32, 0xca, 0xfb, 0x7b, 0xc6, 0xbf, 0xd9, - 0x0a, 0x74, 0x1f, 0x0d, 0x31, 0x43, 0xd9, 0xc3, 0xff, 0x8d, 0x06, 0xcd, 0x2c, 0x5e, 0x9d, 0xff, - 0x1d, 0x68, 0x78, 0x28, 0x22, 0xc8, 0x15, 0xc6, 0xb2, 0xa5, 0x70, 0xb7, 0x64, 0x68, 0x96, 0x3e, - 0x23, 0x4f, 0x7d, 0xbc, 0x0b, 0x55, 0x75, 0x58, 0x6a, 0x66, 0x94, 0x2e, 0x32, 0x33, 0xd4, 0x01, - 0x4b, 0x88, 0x5f, 0xe1, 0x67, 0xa1, 0x87, 0x8b, 0x9c, 0x6d, 0x83, 0x91, 0x27, 0xa9, 0xf8, 0xae, - 0x4e, 0x87, 0xe4, 0x0b, 0x87, 0x1e, 0x11, 0xcc, 0x59, 0xbc, 0x44, 0xf0, 0xff, 0xa1, 0x5d, 0x44, - 0x54, 0xa2, 0x7f, 0xd6, 0xa0, 0x7e, 0x8c, 0xb2, 0xb7, 0xe2, 0x6d, 0x0f, 0xb4, 0xe0, 0x74, 0x4a, - 0x45, 0xf5, 0xfe, 0x19, 0xb4, 0xc4, 0x33, 0x81, 0x27, 0x88, 0xb0, 0x82, 0x37, 0xc2, 0x86, 0x20, - 0xcf, 0x77, 0xcb, 0xfc, 0x73, 0x6b, 0xb1, 0xe0, 0xb9, 0xd5, 0x80, 0xf5, 0x54, 0x1c, 0x2a, 0xba, - 0x47, 0xe9, 0xd8, 0x2d, 0x24, 0xec, 0x4e, 0x33, 0xf3, 0x96, 0x61, 0x9a, 0xd7, 0xe0, 0x6a, 0xa1, - 0x32, 0x65, 0xeb, 0x57, 0xbc, 0xcf, 0x67, 0x06, 0xd8, 0x5e, 0xe8, 0x3d, 0x40, 0x2c, 0xb3, 0x6a, - 0xe8, 0x3f, 0x87, 0x0d, 0xca, 0x70, 0x94, 0x0e, 0xde, 0x1e, 0x62, 0x2f, 0x79, 0x5d, 0xdf, 0x2a, - 0xd8, 0x60, 0xb2, 0x43, 0x11, 0x7b, 0xc8, 0x6a, 0xd0, 0x3c, 0x92, 0x3f, 0x5e, 0x6e, 0xbe, 0xd6, - 0x81, 0xe9, 0x0f, 0x11, 0xd5, 0xc1, 0xa4, 0x47, 0x7c, 0xcf, 0xbe, 0xd0, 0xee, 0x24, 0xea, 0xbd, - 0x22, 0x25, 0xd4, 0x8f, 0x41, 0x3f, 0x9b, 0xae, 0x45, 0xb2, 0xc4, 0xdf, 0x7f, 0x93, 0xd3, 0xf9, - 0xfd, 0x48, 0xd5, 0x61, 0xb6, 0x91, 0xf0, 0x4d, 0x67, 0x9e, 0x70, 0x81, 0x8e, 0x7c, 0x0c, 0xd5, - 0xbb, 0x8e, 0x7b, 0x1a, 0x4f, 0x37, 0xd9, 0x6d, 0x28, 0xbb, 0x38, 0x74, 0x63, 0x42, 0x50, 0xe8, - 0x4e, 0x54, 0xef, 0x4d, 0xa3, 0x38, 0x87, 0x78, 0x8e, 0xca, 0x72, 0x51, 0x6f, 0xd8, 0x34, 0xca, - 0xfc, 0x0c, 0x6a, 0x89, 0x52, 0xe5, 0xc2, 0x2d, 0x58, 0x42, 0xa3, 0x59, 0xb1, 0xd4, 0xba, 0xc9, - 0x3f, 0x64, 0xf6, 0x39, 0xd6, 0x92, 0x44, 0x35, 0x69, 0x19, 0x26, 0xe8, 0x80, 0xe0, 0x61, 0xc6, - 0x2f, 0x73, 0x8f, 0x5f, 0xd3, 0x1c, 0xed, 0xad, 0xd4, 0xff, 0x02, 0x2a, 0xcf, 0xdf, 0x38, 0xa1, - 0x79, 0xb6, 0xc6, 0x98, 0x9c, 0x9e, 0x04, 0x78, 0x9c, 0x0c, 0xca, 0x04, 0xe6, 0xb4, 0x53, 0x34, - 0xa1, 0x91, 0xe3, 0x22, 0xf5, 0x9b, 0xdd, 0x14, 0x36, 0xbf, 0x84, 0xea, 0xf3, 0xcb, 0x8e, 0xf3, - 0xbb, 0x5f, 0xfd, 0xe5, 0x55, 0x47, 0xfb, 0xeb, 0xab, 0x8e, 0xf6, 0xf7, 0x57, 0x1d, 0xed, 0xb7, - 0xff, 0xe8, 0xfc, 0xdf, 0xf7, 0xdd, 0x91, 0xcf, 0x10, 0xa5, 0x5d, 0x1f, 0xef, 0xc8, 0xaf, 0x9d, - 0x3e, 0xde, 0x19, 0xb1, 0x1d, 0xf1, 0x1f, 0xac, 0x9d, 0xdc, 0x93, 0xb7, 0xb7, 0x2c, 0x08, 0x77, - 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x11, 0xbb, 0x4b, 0xec, 0x4b, 0x1b, 0x00, 0x00, + // 2221 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x39, 0x4b, 0x6f, 0x1b, 0xd7, + 0xd5, 0xdf, 0x50, 0x0f, 0x4b, 0x87, 0x0f, 0x49, 0x43, 0x4a, 0xa4, 0xe8, 0xcf, 0xb2, 0x3c, 0x76, + 0x12, 0x23, 0x41, 0xa9, 0x46, 0x4e, 0x82, 0x20, 0x69, 0x8b, 0x48, 0xb6, 0x64, 0x27, 0x96, 0x63, + 0x65, 0xe4, 0x47, 0x11, 0x14, 0x1d, 0x5c, 0x72, 0xae, 0xa8, 0x81, 0x86, 0x73, 0xc7, 0xf7, 0xde, + 0x91, 0xc4, 0x4d, 0x7f, 0x42, 0xbb, 0xed, 0xaa, 0x9b, 0x02, 0xed, 0xbe, 0x3f, 0xa2, 0xe8, 0xb2, + 0xab, 0x74, 0x5b, 0xb8, 0x3f, 0xa2, 0x8b, 0x2e, 0x5a, 0xdc, 0x17, 0x39, 0xc3, 0x19, 0xd9, 0x92, + 0xe0, 0x02, 0xdd, 0xcd, 0x79, 0x3f, 0xee, 0xb9, 0xe7, 0x9c, 0x4b, 0x42, 0x93, 0xa3, 0x6e, 0x88, + 0xf9, 0x00, 0x45, 0xa8, 0x8f, 0xa9, 0x8f, 0x38, 0xea, 0xc4, 0x94, 0x70, 0x62, 0x2f, 0xe5, 0x08, + 0xed, 0xf2, 0xab, 0x04, 0xd3, 0xa1, 0xa2, 0xb7, 0x6b, 0x9c, 0xc4, 0x64, 0xcc, 0xdf, 0x5e, 0xa6, + 0x38, 0x0e, 0x83, 0x1e, 0xe2, 0x01, 0x89, 0x52, 0xe8, 0x6a, 0x48, 0xfa, 0x09, 0x0f, 0x42, 0x05, + 0x3a, 0xff, 0xb6, 0x60, 0xe1, 0x99, 0x50, 0xfc, 0x00, 0x1f, 0x06, 0x51, 0x20, 0x98, 0x6d, 0x1b, + 0xa6, 0x23, 0x34, 0xc0, 0x2d, 0x6b, 0xdd, 0xba, 0x3b, 0xef, 0xca, 0x6f, 0x7b, 0x05, 0x66, 0x59, + 0xef, 0x08, 0x0f, 0x50, 0xab, 0x24, 0xb1, 0x1a, 0xb2, 0x5b, 0x70, 0xad, 0x47, 0xc2, 0x64, 0x10, + 0xb1, 0xd6, 0xd4, 0xfa, 0xd4, 0xdd, 0x79, 0xd7, 0x80, 0x76, 0x07, 0xea, 0x31, 0x0d, 0x06, 0x88, + 0x0e, 0xbd, 0x63, 0x3c, 0xf4, 0x0c, 0xd7, 0xb4, 0xe4, 0x5a, 0xd2, 0xa4, 0xc7, 0x78, 0x78, 0x5f, + 0xf3, 0xdb, 0x30, 0xcd, 0x87, 0x31, 0x6e, 0xcd, 0x28, 0xab, 0xe2, 0xdb, 0xbe, 0x09, 0x65, 0xe1, + 0xba, 0x17, 0xe2, 0xa8, 0xcf, 0x8f, 0x5a, 0xb3, 0xeb, 0xd6, 0xdd, 0x69, 0x17, 0x04, 0x6a, 0x4f, + 0x62, 0xec, 0xeb, 0x30, 0x4f, 0xc9, 0xa9, 0xd7, 0x23, 0x49, 0xc4, 0x5b, 0xd7, 0x24, 0x79, 0x8e, + 0x92, 0xd3, 0xfb, 0x02, 0xb6, 0xef, 0xc0, 0xec, 0x61, 0x80, 0x43, 0x9f, 0xb5, 0xe6, 0xd6, 0xa7, + 0xee, 0x96, 0x37, 0x2b, 0x1d, 0x95, 0xaf, 0x5d, 0x81, 0x74, 0x35, 0xcd, 0xf9, 0x83, 0x05, 0x8b, + 0x07, 0x32, 0x98, 0x54, 0x0a, 0x3e, 0x80, 0x05, 0x61, 0xa5, 0x8b, 0x18, 0xf6, 0x74, 0xdc, 0x2a, + 0x1b, 0x35, 0x83, 0x56, 0x22, 0xf6, 0x53, 0x50, 0xe7, 0xe2, 0xf9, 0x23, 0x61, 0xd6, 0x2a, 0x49, + 0x73, 0x4e, 0x27, 0x7f, 0x94, 0x13, 0xa9, 0x76, 0x17, 0x79, 0x16, 0xc1, 0x44, 0x42, 0x4f, 0x30, + 0x65, 0x01, 0x89, 0x5a, 0x53, 0xd2, 0xa2, 0x01, 0x85, 0xa3, 0xb6, 0xb2, 0x7a, 0xff, 0x08, 0x45, + 0x7d, 0xec, 0x62, 0x96, 0x84, 0xdc, 0x7e, 0x04, 0xd5, 0x2e, 0x3e, 0x24, 0x34, 0xe3, 0x68, 0x79, + 0xf3, 0x76, 0x81, 0xf5, 0xc9, 0x30, 0xdd, 0x8a, 0x92, 0xd4, 0xb1, 0xec, 0x42, 0x05, 0x1d, 0x72, + 0x4c, 0xbd, 0xd4, 0x49, 0x5f, 0x50, 0x51, 0x59, 0x0a, 0x2a, 0xb4, 0xf3, 0x4f, 0x0b, 0x6a, 0xcf, + 0x19, 0xa6, 0xfb, 0x98, 0x0e, 0x02, 0xc6, 0x74, 0x49, 0x1d, 0x11, 0xc6, 0x4d, 0x49, 0x89, 0x6f, + 0x81, 0x4b, 0x18, 0xa6, 0xba, 0xa0, 0xe4, 0xb7, 0xfd, 0x11, 0x2c, 0xc5, 0x88, 0xb1, 0x53, 0x42, + 0x7d, 0xaf, 0x77, 0x84, 0x7b, 0xc7, 0x2c, 0x19, 0xc8, 0x3c, 0x4c, 0xbb, 0x8b, 0x86, 0x70, 0x5f, + 0xe3, 0xed, 0xef, 0x00, 0x62, 0x1a, 0x9c, 0x04, 0x21, 0xee, 0x63, 0x55, 0x58, 0xe5, 0xcd, 0x8f, + 0x0b, 0xbc, 0xcd, 0xfa, 0xd2, 0xd9, 0x1f, 0xc9, 0xec, 0x44, 0x9c, 0x0e, 0xdd, 0x94, 0x92, 0xf6, + 0x4f, 0x61, 0x61, 0x82, 0x6c, 0x2f, 0xc2, 0xd4, 0x31, 0x1e, 0x6a, 0xcf, 0xc5, 0xa7, 0xdd, 0x80, + 0x99, 0x13, 0x14, 0x26, 0x58, 0x7b, 0xae, 0x80, 0x2f, 0x4a, 0x9f, 0x5b, 0xce, 0x0f, 0x16, 0x54, + 0x1e, 0x74, 0xdf, 0x12, 0x77, 0x0d, 0x4a, 0x7e, 0x57, 0xcb, 0x96, 0xfc, 0xee, 0x28, 0x0f, 0x53, + 0xa9, 0x3c, 0x3c, 0x2d, 0x08, 0x6d, 0xa3, 0x20, 0xb4, 0xb4, 0xb1, 0xff, 0x66, 0x60, 0xbf, 0xb7, + 0xa0, 0x3c, 0xb6, 0xc4, 0xec, 0x3d, 0x58, 0x14, 0x7e, 0x7a, 0xf1, 0x18, 0xd7, 0xb2, 0xa4, 0x97, + 0xb7, 0xde, 0x7a, 0x00, 0xee, 0x42, 0x92, 0x81, 0x99, 0xbd, 0x0b, 0x35, 0xbf, 0x9b, 0xd1, 0xa5, + 0x6e, 0xd0, 0xcd, 0xb7, 0x44, 0xec, 0x56, 0xfd, 0x14, 0xc4, 0x9c, 0x0f, 0xa0, 0xbc, 0x1f, 0x44, + 0x7d, 0x17, 0xbf, 0x4a, 0x30, 0xe3, 0xe2, 0x2a, 0xc5, 0x68, 0x18, 0x12, 0xe4, 0xeb, 0x20, 0x0d, + 0xe8, 0xdc, 0x85, 0x8a, 0x62, 0x64, 0x31, 0x89, 0x18, 0x7e, 0x03, 0xe7, 0x87, 0x50, 0x39, 0x08, + 0x31, 0x8e, 0x8d, 0xce, 0x36, 0xcc, 0xf9, 0x09, 0x95, 0x4d, 0x55, 0xb2, 0x4e, 0xb9, 0x23, 0xd8, + 0x59, 0x80, 0xaa, 0xe6, 0x55, 0x6a, 0x9d, 0xbf, 0x59, 0x60, 0xef, 0x9c, 0xe1, 0x5e, 0xc2, 0xf1, + 0x23, 0x42, 0x8e, 0x8d, 0x8e, 0xa2, 0xfe, 0xba, 0x06, 0x10, 0x23, 0x8a, 0x06, 0x98, 0x63, 0xaa, + 0xc2, 0x9f, 0x77, 0x53, 0x18, 0x7b, 0x1f, 0xe6, 0xf1, 0x19, 0xa7, 0xc8, 0xc3, 0xd1, 0x89, 0xec, + 0xb4, 0xe5, 0xcd, 0x7b, 0x05, 0xd9, 0xc9, 0x5b, 0xeb, 0xec, 0x08, 0xb1, 0x9d, 0xe8, 0x44, 0xd5, + 0xc4, 0x1c, 0xd6, 0x60, 0xfb, 0x4b, 0xa8, 0x66, 0x48, 0x97, 0xaa, 0x87, 0x43, 0xa8, 0x67, 0x4c, + 0xe9, 0x3c, 0xde, 0x84, 0x32, 0x3e, 0x0b, 0xb8, 0xc7, 0x38, 0xe2, 0x09, 0xd3, 0x09, 0x02, 0x81, + 0x3a, 0x90, 0x18, 0x39, 0x46, 0xb8, 0x4f, 0x12, 0x3e, 0x1a, 0x23, 0x12, 0xd2, 0x78, 0x4c, 0xcd, + 0x2d, 0xd0, 0x90, 0x73, 0x02, 0x8b, 0x0f, 0x31, 0x57, 0x7d, 0xc5, 0xa4, 0x6f, 0x05, 0x66, 0x65, + 0xe0, 0xaa, 0xe2, 0xe6, 0x5d, 0x0d, 0xd9, 0xb7, 0xa1, 0x1a, 0x44, 0xbd, 0x30, 0xf1, 0xb1, 0x77, + 0x12, 0xe0, 0x53, 0x26, 0x4d, 0xcc, 0xb9, 0x15, 0x8d, 0x7c, 0x21, 0x70, 0xf6, 0x7b, 0x50, 0xc3, + 0x67, 0x8a, 0x49, 0x2b, 0x51, 0x63, 0xab, 0xaa, 0xb1, 0xb2, 0x41, 0x33, 0x07, 0xc3, 0x52, 0xca, + 0xae, 0x8e, 0x6e, 0x1f, 0x96, 0x54, 0x67, 0x4c, 0x35, 0xfb, 0xcb, 0x74, 0xdb, 0x45, 0x36, 0x81, + 0x71, 0x9a, 0xb0, 0xfc, 0x10, 0xf3, 0x54, 0x09, 0xeb, 0x18, 0x9d, 0xef, 0x61, 0x65, 0x92, 0xa0, + 0x9d, 0xf8, 0x0a, 0xca, 0xd9, 0x4b, 0x27, 0xcc, 0xaf, 0x15, 0x98, 0x4f, 0x0b, 0xa7, 0x45, 0x9c, + 0x06, 0xd8, 0x07, 0x98, 0xbb, 0x18, 0xf9, 0x4f, 0xa3, 0x70, 0x68, 0x2c, 0x2e, 0x43, 0x3d, 0x83, + 0xd5, 0x25, 0x3c, 0x46, 0xbf, 0xa4, 0x01, 0xc7, 0x86, 0x7b, 0x05, 0x1a, 0x59, 0xb4, 0x66, 0xff, + 0x06, 0x96, 0xd4, 0x70, 0x7a, 0x36, 0x8c, 0x0d, 0xb3, 0xfd, 0x29, 0x94, 0x95, 0x7b, 0x9e, 0x1c, + 0xf0, 0xc2, 0xe5, 0xda, 0x66, 0xa3, 0x33, 0xda, 0x57, 0x64, 0xce, 0xb9, 0x94, 0x00, 0x3e, 0xfa, + 0x16, 0x7e, 0xa6, 0x75, 0x8d, 0x1d, 0x72, 0xf1, 0x21, 0xc5, 0xec, 0x48, 0x94, 0x54, 0xda, 0xa1, + 0x2c, 0x5a, 0xb3, 0x37, 0x61, 0xd9, 0x4d, 0xa2, 0x47, 0x18, 0x85, 0xfc, 0x48, 0x0e, 0x0e, 0x23, + 0xd0, 0x82, 0x95, 0x49, 0x82, 0x16, 0xf9, 0x04, 0x5a, 0x5f, 0xf7, 0x23, 0x42, 0xb1, 0x22, 0xee, + 0x50, 0x4a, 0x68, 0xa6, 0xa5, 0x70, 0x8e, 0x69, 0x34, 0x6e, 0x14, 0x12, 0x74, 0xae, 0xc3, 0x6a, + 0x81, 0x94, 0x56, 0xf9, 0x85, 0x70, 0x5a, 0xf4, 0x93, 0x6c, 0x25, 0xdf, 0x86, 0xea, 0x29, 0x0a, + 0xb8, 0x17, 0x13, 0x36, 0x2e, 0xa6, 0x79, 0xb7, 0x22, 0x90, 0xfb, 0x1a, 0xa7, 0x22, 0x4b, 0xcb, + 0x6a, 0x9d, 0x9b, 0xb0, 0xb2, 0x4f, 0xf1, 0x61, 0x18, 0xf4, 0x8f, 0x26, 0x2e, 0x88, 0xd8, 0xc9, + 0x64, 0xe2, 0xcc, 0x0d, 0x31, 0xa0, 0xd3, 0x87, 0x66, 0x4e, 0x46, 0xd7, 0xd5, 0x1e, 0xd4, 0x14, + 0x97, 0x47, 0xe5, 0x5e, 0x61, 0xfa, 0xf9, 0x7b, 0xe7, 0x56, 0x76, 0x7a, 0x0b, 0x71, 0xab, 0xbd, + 0x14, 0xc4, 0x9c, 0x7f, 0x59, 0x60, 0x6f, 0xc5, 0x71, 0x38, 0xcc, 0x7a, 0xb6, 0x08, 0x53, 0xec, + 0x55, 0x68, 0x5a, 0x0c, 0x7b, 0x15, 0x8a, 0x16, 0x73, 0x48, 0x68, 0x0f, 0xeb, 0xcb, 0xaa, 0x00, + 0xb1, 0x06, 0xa0, 0x30, 0x24, 0xa7, 0x5e, 0x6a, 0x87, 0x95, 0x9d, 0x61, 0xce, 0x5d, 0x94, 0x04, + 0x77, 0x8c, 0xcf, 0x2f, 0x40, 0xd3, 0xef, 0x6a, 0x01, 0x9a, 0xb9, 0xe2, 0x02, 0xf4, 0x47, 0x0b, + 0xea, 0x99, 0xe8, 0x75, 0x8e, 0xff, 0xf7, 0x56, 0xb5, 0x3a, 0x2c, 0xed, 0x91, 0xde, 0xb1, 0xea, + 0x7a, 0xe6, 0x6a, 0x34, 0xc0, 0x4e, 0x23, 0xc7, 0x17, 0xef, 0x79, 0x14, 0xe6, 0x98, 0x57, 0xa0, + 0x91, 0x45, 0x6b, 0x76, 0x6f, 0x34, 0x21, 0xbe, 0x13, 0x4b, 0xb7, 0xa9, 0x80, 0x06, 0xcc, 0xc8, + 0x25, 0x5c, 0x86, 0x5e, 0x71, 0x15, 0x60, 0x37, 0xe1, 0x9a, 0xdf, 0xf5, 0xe4, 0x50, 0xd4, 0x73, + 0xc1, 0xef, 0x7e, 0x2b, 0xc6, 0xe2, 0x2a, 0xcc, 0x0d, 0xd0, 0x99, 0x47, 0xc9, 0x29, 0xd3, 0x6b, + 0xe0, 0xb5, 0x01, 0x3a, 0x73, 0xc9, 0x29, 0x73, 0xb6, 0xa1, 0x91, 0x35, 0xa0, 0x93, 0xfc, 0x21, + 0xcc, 0xaa, 0x0a, 0xd6, 0xd9, 0xb5, 0xf5, 0xd6, 0x6f, 0xb8, 0x44, 0xb5, 0x6a, 0x0e, 0xe7, 0x4f, + 0x16, 0xb4, 0xb4, 0x92, 0x5d, 0xcc, 0x7b, 0x47, 0x5b, 0xec, 0x41, 0x17, 0xbd, 0x73, 0x57, 0xe5, + 0x6b, 0x22, 0x60, 0xf2, 0x99, 0xd0, 0x0d, 0xa2, 0x90, 0xf4, 0x99, 0xac, 0xd1, 0x39, 0xb7, 0xa6, + 0xd1, 0xdb, 0x0a, 0x2b, 0x1a, 0x02, 0x95, 0x77, 0x3d, 0x5d, 0x81, 0x73, 0x6e, 0x85, 0xa6, 0x1a, + 0x80, 0xf3, 0x10, 0x56, 0x0b, 0x7c, 0xbe, 0x42, 0xf4, 0xbf, 0xb6, 0xe0, 0x46, 0x56, 0xd3, 0x56, + 0x18, 0x8a, 0x2d, 0x91, 0xbd, 0xfb, 0x14, 0xe4, 0x22, 0x9b, 0x2e, 0x88, 0x6c, 0x0f, 0xd6, 0xce, + 0xf3, 0xe7, 0x0a, 0xe1, 0x3d, 0x9e, 0x3c, 0xdb, 0xad, 0x38, 0x7e, 0x73, 0x60, 0x69, 0xff, 0x4b, + 0xd9, 0x6a, 0xcb, 0x25, 0x5d, 0x2a, 0xbb, 0x82, 0x57, 0x6d, 0x68, 0xa5, 0x9a, 0x97, 0x5a, 0x8b, + 0xcc, 0x5d, 0xda, 0x83, 0xd5, 0x02, 0x9a, 0x36, 0xb2, 0x21, 0x56, 0xa4, 0xd1, 0x5a, 0x55, 0xde, + 0x6c, 0x76, 0x26, 0x1f, 0xf8, 0x5a, 0x40, 0xb3, 0x89, 0x0b, 0xfb, 0x04, 0x31, 0x71, 0xd7, 0x33, + 0x46, 0x9e, 0x40, 0x23, 0x8b, 0xd6, 0xfa, 0x3f, 0x9d, 0xd0, 0x7f, 0x23, 0xa7, 0x3f, 0x23, 0x66, + 0xac, 0x34, 0x61, 0x59, 0xe1, 0xcd, 0xc0, 0x32, 0x76, 0x3e, 0x81, 0x95, 0x49, 0x82, 0xb6, 0xd4, + 0x86, 0xb9, 0x89, 0x89, 0x37, 0x82, 0x85, 0xd4, 0x4b, 0x14, 0xf0, 0x5d, 0x32, 0xa9, 0xef, 0x8d, + 0x52, 0xab, 0xd0, 0xcc, 0x49, 0xe9, 0x3e, 0xd4, 0x82, 0x95, 0x03, 0x4e, 0xe2, 0x54, 0x5e, 0x8d, + 0x83, 0xab, 0xd0, 0xcc, 0x51, 0xb4, 0xd0, 0x2f, 0xe1, 0xc6, 0x04, 0xe9, 0x49, 0x10, 0x05, 0x83, + 0x64, 0x70, 0x01, 0x67, 0xec, 0x5b, 0x20, 0x07, 0xb8, 0xc7, 0x83, 0x01, 0x36, 0x9b, 0xee, 0x94, + 0x5b, 0x16, 0xb8, 0x67, 0x0a, 0xe5, 0xfc, 0x04, 0xd6, 0xce, 0xd3, 0x7f, 0x81, 0x1c, 0x49, 0xc7, + 0x11, 0xe5, 0x05, 0x31, 0xb5, 0xa1, 0x95, 0x27, 0xe9, 0xa0, 0xba, 0x70, 0x6b, 0x92, 0xf6, 0x3c, + 0xe2, 0x41, 0xb8, 0x25, 0xe6, 0xc1, 0x3b, 0x0a, 0xec, 0x0e, 0x38, 0x6f, 0xb2, 0xa1, 0x3d, 0x69, + 0x80, 0xfd, 0x10, 0x1b, 0x9e, 0x51, 0x61, 0x7e, 0x04, 0xf5, 0x0c, 0x56, 0x67, 0xa2, 0x01, 0x33, + 0xc8, 0xf7, 0xa9, 0xd9, 0x65, 0x14, 0x20, 0x72, 0xe0, 0x62, 0x86, 0xcf, 0xc9, 0x41, 0x9e, 0xa4, + 0x2d, 0x6f, 0x40, 0xf3, 0x45, 0x0a, 0x2f, 0xae, 0x74, 0x61, 0x4b, 0x98, 0xd7, 0x2d, 0xc1, 0xd9, + 0x85, 0x56, 0x5e, 0xe0, 0x4a, 0xcd, 0xe8, 0x46, 0x5a, 0xcf, 0xb8, 0x5a, 0x8d, 0xf9, 0x1a, 0x94, + 0x02, 0x5f, 0xbf, 0x98, 0x4a, 0x81, 0x9f, 0x39, 0x88, 0xd2, 0x44, 0x01, 0xac, 0xc3, 0xda, 0x79, + 0xca, 0x74, 0x9c, 0x75, 0x58, 0xfa, 0x3a, 0x0a, 0xb8, 0xba, 0x80, 0x26, 0x31, 0x3f, 0x06, 0x3b, + 0x8d, 0xbc, 0x40, 0xa5, 0xfd, 0x60, 0xc1, 0xda, 0x3e, 0x89, 0x93, 0x50, 0xae, 0xd4, 0x31, 0xa2, + 0x38, 0xe2, 0xdf, 0x90, 0x84, 0x46, 0x28, 0x34, 0x7e, 0xbf, 0x0f, 0x0b, 0xa2, 0x1e, 0xbc, 0x1e, + 0xc5, 0x88, 0x63, 0xdf, 0x8b, 0xcc, 0xb3, 0xaf, 0x2a, 0xd0, 0xf7, 0x15, 0xf6, 0x5b, 0x26, 0x9e, + 0x86, 0xa8, 0x27, 0x94, 0xa6, 0x07, 0x07, 0x28, 0x94, 0x1c, 0x1e, 0x9f, 0x43, 0x65, 0x20, 0x3d, + 0xf3, 0x50, 0x18, 0x20, 0x35, 0x40, 0xca, 0x9b, 0xcb, 0x93, 0xcf, 0x84, 0x2d, 0x41, 0x74, 0xcb, + 0x8a, 0x55, 0x02, 0xf6, 0xc7, 0xd0, 0x48, 0xb5, 0xaa, 0xf1, 0x36, 0x3d, 0x2d, 0x6d, 0xd4, 0x53, + 0xb4, 0xd1, 0x52, 0x7d, 0x0b, 0x6e, 0x9e, 0x1b, 0x97, 0x4e, 0xe1, 0xef, 0x2c, 0x95, 0x2e, 0x9d, + 0x68, 0x13, 0xef, 0x8f, 0x60, 0x56, 0xf1, 0xeb, 0x43, 0x3f, 0xc7, 0x41, 0xcd, 0x74, 0xae, 0x6f, + 0xa5, 0x73, 0x7d, 0x2b, 0xca, 0xe8, 0x54, 0x41, 0x46, 0x45, 0x7f, 0xcf, 0xf8, 0x37, 0xde, 0xd3, + 0x1e, 0xe0, 0x01, 0xe1, 0x38, 0x7b, 0xf8, 0xbf, 0xb1, 0xa0, 0x91, 0xc5, 0xeb, 0xf3, 0xbf, 0x07, + 0x75, 0x1f, 0xc7, 0x14, 0xf7, 0xa4, 0xb1, 0x6c, 0x29, 0x6c, 0x97, 0x5a, 0x96, 0x6b, 0x8f, 0xc9, + 0x23, 0x1f, 0xb7, 0xa1, 0xaa, 0x0f, 0x4b, 0xcf, 0x8c, 0xd2, 0x45, 0x66, 0x86, 0x3e, 0x60, 0x05, + 0x89, 0x2b, 0xfc, 0x3c, 0xf2, 0x49, 0x91, 0xb3, 0x6d, 0x68, 0xe5, 0x49, 0x3a, 0xbe, 0xeb, 0xa3, + 0x21, 0xf9, 0x12, 0xb1, 0x7d, 0x4a, 0x04, 0x8b, 0x6f, 0x04, 0xff, 0x1f, 0xda, 0x45, 0x44, 0x2d, + 0xfa, 0x67, 0x0b, 0x16, 0x0f, 0x70, 0xf6, 0x56, 0x5c, 0xf6, 0x40, 0x0b, 0x4e, 0xa7, 0x54, 0x54, + 0xef, 0x9f, 0x41, 0x53, 0xbe, 0x65, 0x44, 0x82, 0x28, 0x2f, 0x78, 0xc8, 0x2c, 0x4b, 0xf2, 0x64, + 0xb7, 0xcc, 0xbf, 0x09, 0xa7, 0x0b, 0xde, 0x84, 0x75, 0x58, 0x4a, 0xc5, 0xa1, 0xa3, 0x7b, 0x9c, + 0x8e, 0xdd, 0xc5, 0xd2, 0xee, 0x28, 0x33, 0x97, 0x0c, 0xd3, 0xb9, 0x01, 0xd7, 0x0b, 0x95, 0x69, + 0x5b, 0xbf, 0x12, 0x7d, 0x3e, 0x33, 0xc0, 0xb6, 0x22, 0xff, 0x21, 0xe6, 0x99, 0x55, 0xc3, 0xfe, + 0x39, 0x2c, 0x33, 0x4e, 0xe2, 0x74, 0xf0, 0xde, 0x80, 0xf8, 0xe6, 0x27, 0x80, 0x3b, 0x05, 0x1b, + 0x4c, 0x76, 0x28, 0x12, 0x1f, 0xbb, 0x75, 0x96, 0x47, 0x8a, 0x17, 0xd6, 0xed, 0x37, 0x3a, 0x30, + 0xfa, 0xb5, 0xa4, 0x7a, 0x34, 0xec, 0xd2, 0xc0, 0xf7, 0x2e, 0xb4, 0x3b, 0xc9, 0x7a, 0xaf, 0x28, + 0x09, 0xfd, 0x8b, 0xd5, 0xcf, 0x46, 0x6b, 0x91, 0x2a, 0xf1, 0xf7, 0xdf, 0xe6, 0x74, 0x7e, 0x3f, + 0xd2, 0x75, 0x98, 0x6d, 0x24, 0x62, 0xd3, 0x99, 0x24, 0x5c, 0xa0, 0x23, 0x1f, 0x40, 0x75, 0x1b, + 0xf5, 0x8e, 0x93, 0xd1, 0x26, 0xbb, 0x0e, 0xe5, 0x1e, 0x89, 0x7a, 0x09, 0xa5, 0x38, 0xea, 0x0d, + 0x75, 0xef, 0x4d, 0xa3, 0x04, 0x87, 0x7c, 0x33, 0xab, 0x72, 0xd1, 0x0f, 0xed, 0x34, 0xca, 0xf9, + 0x0c, 0x6a, 0x46, 0xa9, 0x76, 0xe1, 0x0e, 0xcc, 0xe0, 0x93, 0x71, 0xb1, 0xd4, 0x3a, 0xe6, 0x5f, + 0xa3, 0x1d, 0x81, 0x75, 0x15, 0x51, 0x4f, 0x5a, 0x4e, 0x28, 0xde, 0xa5, 0x64, 0x90, 0xf1, 0xcb, + 0xd9, 0x12, 0xd7, 0x34, 0x47, 0xbb, 0x94, 0xfa, 0x5f, 0x40, 0xe5, 0xc5, 0x5b, 0x27, 0xb4, 0xc8, + 0xd6, 0x29, 0xa1, 0xc7, 0x87, 0x21, 0x39, 0x35, 0x83, 0xd2, 0xc0, 0x82, 0x76, 0x8c, 0x87, 0x2c, + 0x46, 0x3d, 0xac, 0x7f, 0x58, 0x1c, 0xc1, 0xce, 0x97, 0x50, 0x7d, 0x71, 0xd5, 0x71, 0xbe, 0xfd, + 0xd5, 0x5f, 0x5e, 0xaf, 0x59, 0x7f, 0x7d, 0xbd, 0x66, 0xfd, 0xfd, 0xf5, 0x9a, 0xf5, 0xdb, 0x7f, + 0xac, 0xfd, 0xdf, 0xf7, 0x9d, 0x93, 0x80, 0x63, 0xc6, 0x3a, 0x01, 0xd9, 0x50, 0x5f, 0x1b, 0x7d, + 0xb2, 0x71, 0xc2, 0x37, 0xe4, 0xdf, 0x6c, 0x1b, 0xb9, 0x77, 0x79, 0x77, 0x56, 0x12, 0xee, 0xfd, + 0x27, 0x00, 0x00, 0xff, 0xff, 0x82, 0x56, 0x16, 0xa4, 0xf0, 0x1b, 0x00, 0x00, } func (m *TableDefinition) Marshal() (dAtA []byte, err error) { @@ -6291,6 +6404,91 @@ func (m *UnlockTablesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ExecuteQueryRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ExecuteQueryRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExecuteQueryRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.MaxRows != 0 { + i = encodeVarintTabletmanagerdata(dAtA, i, uint64(m.MaxRows)) + i-- + dAtA[i] = 0x18 + } + if len(m.DbName) > 0 { + i -= len(m.DbName) + copy(dAtA[i:], m.DbName) + i = encodeVarintTabletmanagerdata(dAtA, i, uint64(len(m.DbName))) + i-- + dAtA[i] = 0x12 + } + if len(m.Query) > 0 { + i -= len(m.Query) + copy(dAtA[i:], m.Query) + i = encodeVarintTabletmanagerdata(dAtA, i, uint64(len(m.Query))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ExecuteQueryResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ExecuteQueryResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExecuteQueryResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Result != nil { + { + size, err := m.Result.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTabletmanagerdata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *ExecuteFetchAsDbaRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -8883,27 +9081,51 @@ func (m *ApplySchemaRequest) Size() (n int) { return n } -func (m *ApplySchemaResponse) Size() (n int) { +func (m *ApplySchemaResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.BeforeSchema != nil { + l = m.BeforeSchema.Size() + n += 1 + l + sovTabletmanagerdata(uint64(l)) + } + if m.AfterSchema != nil { + l = m.AfterSchema.Size() + n += 1 + l + sovTabletmanagerdata(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *LockTablesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *LockTablesResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.BeforeSchema != nil { - l = m.BeforeSchema.Size() - n += 1 + l + sovTabletmanagerdata(uint64(l)) - } - if m.AfterSchema != nil { - l = m.AfterSchema.Size() - n += 1 + l + sovTabletmanagerdata(uint64(l)) - } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } -func (m *LockTablesRequest) Size() (n int) { +func (m *UnlockTablesRequest) Size() (n int) { if m == nil { return 0 } @@ -8915,7 +9137,7 @@ func (m *LockTablesRequest) Size() (n int) { return n } -func (m *LockTablesResponse) Size() (n int) { +func (m *UnlockTablesResponse) Size() (n int) { if m == nil { return 0 } @@ -8927,24 +9149,39 @@ func (m *LockTablesResponse) Size() (n int) { return n } -func (m *UnlockTablesRequest) Size() (n int) { +func (m *ExecuteQueryRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l + l = len(m.Query) + if l > 0 { + n += 1 + l + sovTabletmanagerdata(uint64(l)) + } + l = len(m.DbName) + if l > 0 { + n += 1 + l + sovTabletmanagerdata(uint64(l)) + } + if m.MaxRows != 0 { + n += 1 + sovTabletmanagerdata(uint64(m.MaxRows)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } -func (m *UnlockTablesResponse) Size() (n int) { +func (m *ExecuteQueryResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l + if m.Result != nil { + l = m.Result.Size() + n += 1 + l + sovTabletmanagerdata(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -13668,6 +13905,235 @@ func (m *UnlockTablesResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *ExecuteQueryRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTabletmanagerdata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExecuteQueryRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExecuteQueryRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Query", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTabletmanagerdata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTabletmanagerdata + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTabletmanagerdata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Query = append(m.Query[:0], dAtA[iNdEx:postIndex]...) + if m.Query == nil { + m.Query = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DbName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTabletmanagerdata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTabletmanagerdata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTabletmanagerdata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DbName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxRows", wireType) + } + m.MaxRows = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTabletmanagerdata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxRows |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTabletmanagerdata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTabletmanagerdata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTabletmanagerdata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExecuteQueryResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTabletmanagerdata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExecuteQueryResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExecuteQueryResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTabletmanagerdata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTabletmanagerdata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTabletmanagerdata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Result == nil { + m.Result = &query.QueryResult{} + } + if err := m.Result.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTabletmanagerdata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTabletmanagerdata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTabletmanagerdata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ExecuteFetchAsDbaRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go b/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go index 5df76707ca2..76dce7250f9 100644 --- a/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go +++ b/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go @@ -29,72 +29,72 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("tabletmanagerservice.proto", fileDescriptor_9ee75fe63cfd9360) } var fileDescriptor_9ee75fe63cfd9360 = []byte{ - // 1025 bytes of a gzipped FileDescriptorProto + // 1039 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x98, 0xdf, 0x6f, 0x1b, 0x45, - 0x10, 0xc7, 0x6b, 0x89, 0x56, 0x62, 0xf9, 0xbd, 0x20, 0x2a, 0x05, 0xc9, 0x14, 0x9a, 0x42, 0x69, - 0x21, 0x6e, 0x0b, 0xe5, 0xdd, 0x4d, 0x9b, 0x34, 0x28, 0x11, 0xc6, 0x6e, 0x12, 0x04, 0x12, 0xd2, - 0xc6, 0x9e, 0xd8, 0x47, 0xce, 0xb7, 0xc7, 0xee, 0xda, 0x22, 0x4f, 0x48, 0xbc, 0x22, 0xf1, 0xcc, - 0xdf, 0xc2, 0x5f, 0xc0, 0x23, 0x7f, 0x02, 0x0a, 0xff, 0x48, 0x75, 0xe7, 0xdb, 0xbd, 0xd9, 0xbb, - 0xb9, 0xf5, 0xf9, 0xcd, 0xf2, 0x7c, 0x66, 0xbe, 0xbb, 0x73, 0xb3, 0x33, 0x7b, 0xc7, 0xb6, 0x8c, - 0x38, 0x8b, 0xc1, 0xcc, 0x45, 0x22, 0xa6, 0xa0, 0x34, 0xa8, 0x65, 0x34, 0x86, 0x9d, 0x54, 0x49, - 0x23, 0xf9, 0x7b, 0x94, 0x6d, 0xeb, 0xa6, 0xf7, 0xef, 0x44, 0x18, 0xb1, 0xc2, 0x1f, 0xfd, 0xbd, - 0xcd, 0xde, 0x78, 0x91, 0xdb, 0x8e, 0x56, 0x36, 0x7e, 0xc0, 0x5e, 0x19, 0x44, 0xc9, 0x94, 0x77, - 0x77, 0xea, 0x3e, 0x99, 0x61, 0x08, 0xbf, 0x2c, 0x40, 0x9b, 0xad, 0x0f, 0x1b, 0xed, 0x3a, 0x95, - 0x89, 0x86, 0x8f, 0xaf, 0xf1, 0x43, 0x76, 0x7d, 0x14, 0x03, 0xa4, 0x9c, 0x62, 0x73, 0x8b, 0x0d, - 0x76, 0xab, 0x19, 0x70, 0xd1, 0x7e, 0x62, 0xaf, 0x3d, 0xfb, 0x15, 0xc6, 0x0b, 0x03, 0xcf, 0xa5, - 0xbc, 0xe0, 0x77, 0x08, 0x17, 0x64, 0xb7, 0x91, 0x3f, 0x59, 0x87, 0xb9, 0xf8, 0xdf, 0xb3, 0x57, - 0xf7, 0xc1, 0x8c, 0xc6, 0x33, 0x98, 0x0b, 0x7e, 0x9b, 0x70, 0x73, 0x56, 0x1b, 0x7b, 0x3b, 0x0c, - 0xb9, 0xc8, 0x53, 0xf6, 0xe6, 0x3e, 0x98, 0x01, 0xa8, 0x79, 0xa4, 0x75, 0x24, 0x13, 0xcd, 0xef, - 0xd2, 0x9e, 0x08, 0xb1, 0x1a, 0x9f, 0xb5, 0x20, 0x71, 0x8a, 0x46, 0x60, 0x86, 0x20, 0x26, 0xdf, - 0x26, 0xf1, 0x25, 0x99, 0x22, 0x64, 0x0f, 0xa5, 0xc8, 0xc3, 0x5c, 0x7c, 0xc1, 0x5e, 0x2f, 0x0c, - 0xa7, 0x2a, 0x32, 0xc0, 0x03, 0x9e, 0x39, 0x60, 0x15, 0x3e, 0x5d, 0xcb, 0x39, 0x89, 0x1f, 0x19, - 0xdb, 0x9d, 0x89, 0x64, 0x0a, 0x2f, 0x2e, 0x53, 0xe0, 0x54, 0x86, 0x4b, 0xb3, 0x0d, 0x7f, 0x67, - 0x0d, 0x85, 0xd7, 0x3f, 0x84, 0x73, 0x05, 0x7a, 0x36, 0x32, 0xa2, 0x61, 0xfd, 0x18, 0x08, 0xad, - 0xdf, 0xe7, 0xf0, 0xb3, 0x1e, 0x2e, 0x92, 0xe7, 0x20, 0x62, 0x33, 0xdb, 0x9d, 0xc1, 0xf8, 0x82, - 0x7c, 0xd6, 0x3e, 0x12, 0x7a, 0xd6, 0x55, 0xd2, 0x09, 0xa5, 0xec, 0x9d, 0x83, 0x69, 0x22, 0x15, - 0xac, 0xcc, 0xcf, 0x94, 0x92, 0x8a, 0xdf, 0x27, 0x22, 0xd4, 0x28, 0x2b, 0xf7, 0x79, 0x3b, 0xd8, - 0xcf, 0x5e, 0x2c, 0xc5, 0xa4, 0x38, 0x23, 0x74, 0xf6, 0x4a, 0x20, 0x9c, 0x3d, 0xcc, 0x39, 0x89, - 0x9f, 0xd9, 0x5b, 0x03, 0x05, 0xe7, 0x71, 0x34, 0x9d, 0xd9, 0x93, 0x48, 0x25, 0xa5, 0xc2, 0x58, - 0xa1, 0x7b, 0x6d, 0x50, 0x7c, 0x58, 0xfa, 0x69, 0x1a, 0x5f, 0x16, 0x3a, 0x54, 0x11, 0x21, 0x7b, - 0xe8, 0xb0, 0x78, 0x18, 0xae, 0xe4, 0x43, 0x39, 0xbe, 0xc8, 0xbb, 0xab, 0x26, 0x2b, 0xb9, 0x34, - 0x87, 0x2a, 0x19, 0x53, 0xf8, 0x59, 0x1c, 0x27, 0x71, 0x19, 0x9e, 0x5a, 0x16, 0x06, 0x42, 0xcf, - 0xc2, 0xe7, 0x70, 0x81, 0x15, 0x8d, 0x72, 0x0f, 0xcc, 0x78, 0xd6, 0xd7, 0x4f, 0xcf, 0x04, 0x59, - 0x60, 0x35, 0x2a, 0x54, 0x60, 0x04, 0xec, 0x14, 0x7f, 0x63, 0xef, 0xfb, 0xe6, 0x7e, 0x1c, 0x0f, - 0x54, 0xb4, 0xd4, 0xfc, 0xc1, 0xda, 0x48, 0x16, 0xb5, 0xda, 0x0f, 0x37, 0xf0, 0x68, 0xde, 0x72, - 0x3f, 0x4d, 0x5b, 0x6c, 0xb9, 0x9f, 0xa6, 0xed, 0xb7, 0x9c, 0xc3, 0x58, 0x71, 0x08, 0x69, 0x1c, - 0x8d, 0x85, 0x89, 0x64, 0x92, 0x35, 0x93, 0x85, 0x26, 0x15, 0x6b, 0x54, 0x48, 0x91, 0x80, 0x71, - 0xe5, 0x1c, 0x09, 0x6d, 0x40, 0x15, 0x62, 0x54, 0xe5, 0x60, 0x20, 0x54, 0x39, 0x3e, 0x87, 0x7b, - 0xe0, 0xca, 0x32, 0x90, 0x3a, 0xca, 0x16, 0x41, 0xf6, 0x40, 0x1f, 0x09, 0xf5, 0xc0, 0x2a, 0x89, - 0xdb, 0xc5, 0xa9, 0x88, 0xcc, 0x9e, 0x2c, 0x95, 0x28, 0xff, 0x0a, 0x13, 0x6a, 0x17, 0x35, 0x14, - 0x6b, 0x8d, 0x8c, 0x4c, 0x51, 0x6a, 0x49, 0xad, 0x0a, 0x13, 0xd2, 0xaa, 0xa1, 0xf8, 0x20, 0x54, - 0x8c, 0x47, 0x51, 0x12, 0xcd, 0x17, 0x73, 0xf2, 0x20, 0xd0, 0x68, 0xe8, 0x20, 0x34, 0x79, 0xb8, - 0x05, 0xcc, 0xd9, 0xdb, 0x23, 0x23, 0x94, 0xc1, 0xbb, 0xa5, 0xb7, 0xe0, 0x43, 0x56, 0xf4, 0x7e, - 0x2b, 0xd6, 0xc9, 0xfd, 0xd1, 0x61, 0x5b, 0x55, 0xf3, 0x71, 0x62, 0xa2, 0xb8, 0x7f, 0x6e, 0x40, - 0xf1, 0xaf, 0x5a, 0x44, 0x2b, 0x71, 0xbb, 0x86, 0xc7, 0x1b, 0x7a, 0xe1, 0xc1, 0xb0, 0x0f, 0x96, - 0xd2, 0xe4, 0x60, 0x40, 0xf6, 0xd0, 0x60, 0xf0, 0x30, 0x9c, 0xdc, 0x13, 0xb4, 0x86, 0xac, 0x3d, - 0x90, 0xc9, 0xad, 0x42, 0xa1, 0xe4, 0xd6, 0x59, 0x5c, 0x4c, 0xd8, 0x5a, 0x56, 0x38, 0x59, 0x4c, - 0x34, 0x1a, 0x2a, 0xa6, 0x26, 0x0f, 0xbc, 0xdf, 0x21, 0x68, 0x58, 0x5b, 0x4c, 0x55, 0x28, 0xb4, - 0xdf, 0x3a, 0x8b, 0xe7, 0xee, 0x41, 0x12, 0x99, 0x55, 0xd3, 0x20, 0xe7, 0x6e, 0x69, 0x0e, 0xcd, - 0x5d, 0x4c, 0xb9, 0xe0, 0xbf, 0x77, 0xd8, 0xcd, 0x81, 0x4c, 0x17, 0x71, 0x7e, 0xeb, 0x4b, 0x85, - 0x82, 0xc4, 0x7c, 0x23, 0x17, 0x2a, 0x11, 0x31, 0xa7, 0x92, 0xd3, 0xc0, 0x5a, 0xdd, 0x47, 0x9b, - 0xb8, 0xe0, 0x02, 0xcd, 0x16, 0x57, 0x6c, 0x9f, 0x37, 0x2d, 0xbe, 0xb0, 0x87, 0x0a, 0xd4, 0xc3, - 0xf0, 0x88, 0x78, 0x0a, 0x73, 0x69, 0xa0, 0xc8, 0x21, 0xe5, 0x89, 0x81, 0xd0, 0x88, 0xf0, 0x39, - 0x5c, 0x13, 0xc7, 0xc9, 0x44, 0x7a, 0x32, 0xf7, 0xc8, 0xbb, 0x89, 0x0f, 0x85, 0x6a, 0xa2, 0xce, - 0x3a, 0x39, 0xcd, 0x78, 0xb1, 0xcd, 0x53, 0xa1, 0x07, 0x4a, 0x66, 0xd0, 0x84, 0x07, 0x46, 0x27, - 0xc2, 0xac, 0xe4, 0x17, 0x2d, 0x69, 0xfc, 0x42, 0x39, 0x02, 0x5b, 0x87, 0xb7, 0xe9, 0x57, 0x20, - 0x7f, 0x57, 0xdb, 0x61, 0xc8, 0x45, 0x5e, 0xb2, 0x77, 0x4b, 0xe5, 0x21, 0xe8, 0xac, 0xab, 0xc1, - 0x84, 0x87, 0x57, 0xe8, 0x38, 0xab, 0xb6, 0xd3, 0x16, 0x77, 0xba, 0x7f, 0x76, 0xd8, 0x07, 0x95, - 0xd9, 0xd1, 0x4f, 0x26, 0xd9, 0x2b, 0xef, 0xea, 0x2e, 0xf1, 0x78, 0xfd, 0xac, 0xc1, 0xbc, 0x5d, - 0xc8, 0xd7, 0x9b, 0xba, 0xe1, 0x9b, 0x46, 0x91, 0x78, 0x7b, 0x18, 0xee, 0x92, 0xef, 0x00, 0x18, - 0x09, 0xdd, 0x34, 0xaa, 0xa4, 0x13, 0xfa, 0x8e, 0xdd, 0x78, 0x22, 0xc6, 0x17, 0x8b, 0x94, 0x53, - 0x9f, 0x2a, 0x56, 0x26, 0x1b, 0xf8, 0xa3, 0x00, 0x61, 0x03, 0x3e, 0xe8, 0x70, 0x95, 0x5d, 0xfd, - 0xb4, 0x91, 0x0a, 0xf6, 0x94, 0x9c, 0x17, 0xd1, 0x1b, 0x7a, 0x9d, 0x4f, 0x85, 0xaf, 0x7e, 0x35, - 0x18, 0x69, 0x1e, 0xb2, 0xeb, 0x27, 0xf9, 0xbc, 0xa1, 0xbe, 0xc8, 0x9c, 0xe0, 0x21, 0x73, 0xab, - 0x19, 0xb0, 0xf1, 0x9e, 0xec, 0xfe, 0x73, 0xd5, 0xed, 0xfc, 0x7b, 0xd5, 0xed, 0xfc, 0x77, 0xd5, - 0xed, 0xfc, 0xf5, 0x7f, 0xf7, 0xda, 0x0f, 0x0f, 0x97, 0x91, 0x01, 0xad, 0x77, 0x22, 0xd9, 0x5b, - 0xfd, 0xea, 0x4d, 0x65, 0x6f, 0x69, 0x7a, 0xf9, 0xc7, 0xa6, 0x1e, 0xf5, 0x69, 0xea, 0xec, 0x46, - 0x6e, 0xfb, 0xf2, 0x65, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8d, 0x51, 0x5d, 0x35, 0xd5, 0x12, 0x00, - 0x00, + 0x10, 0xc7, 0x6b, 0x89, 0x56, 0x62, 0xf9, 0xbd, 0x20, 0x2a, 0x05, 0x29, 0x14, 0xda, 0x40, 0x69, + 0x21, 0x6e, 0x0b, 0xe5, 0xdd, 0x4d, 0x9b, 0x34, 0x28, 0x11, 0xae, 0xdd, 0x24, 0x08, 0x24, 0xa4, + 0x8d, 0x3d, 0xb1, 0x8f, 0x9c, 0x6f, 0x8f, 0xdd, 0x3d, 0x8b, 0x3c, 0x21, 0xf1, 0x8a, 0xc4, 0x33, + 0x2f, 0xfc, 0x3f, 0x3c, 0xf2, 0x27, 0xa0, 0xf0, 0x8f, 0xa0, 0x3b, 0xdf, 0xee, 0xcd, 0xde, 0xcd, + 0xad, 0x2f, 0x6f, 0x96, 0xe7, 0x33, 0xf3, 0xdd, 0x9d, 0x9b, 0x9d, 0xd9, 0x3b, 0xb6, 0x61, 0xc4, + 0x69, 0x0c, 0x66, 0x21, 0x12, 0x31, 0x03, 0xa5, 0x41, 0x2d, 0xa3, 0x09, 0x6c, 0xa7, 0x4a, 0x1a, + 0xc9, 0xdf, 0xa3, 0x6c, 0x1b, 0x37, 0xbd, 0x7f, 0xa7, 0xc2, 0x88, 0x15, 0xfe, 0xe8, 0xaf, 0x2d, + 0xf6, 0xc6, 0xcb, 0xc2, 0x76, 0xb8, 0xb2, 0xf1, 0x7d, 0xf6, 0xca, 0x30, 0x4a, 0x66, 0x7c, 0x73, + 0xbb, 0xe9, 0x93, 0x1b, 0x46, 0xf0, 0x73, 0x06, 0xda, 0x6c, 0x7c, 0xd8, 0x6a, 0xd7, 0xa9, 0x4c, + 0x34, 0x7c, 0x7c, 0x8d, 0x1f, 0xb0, 0xeb, 0xe3, 0x18, 0x20, 0xe5, 0x14, 0x5b, 0x58, 0x6c, 0xb0, + 0x5b, 0xed, 0x80, 0x8b, 0xf6, 0x23, 0x7b, 0xed, 0xd9, 0x2f, 0x30, 0xc9, 0x0c, 0x3c, 0x97, 0xf2, + 0x9c, 0x6f, 0x11, 0x2e, 0xc8, 0x6e, 0x23, 0x7f, 0xb2, 0x0e, 0x73, 0xf1, 0xbf, 0x63, 0xaf, 0xee, + 0x81, 0x19, 0x4f, 0xe6, 0xb0, 0x10, 0xfc, 0x36, 0xe1, 0xe6, 0xac, 0x36, 0xf6, 0x9d, 0x30, 0xe4, + 0x22, 0xcf, 0xd8, 0x9b, 0x7b, 0x60, 0x86, 0xa0, 0x16, 0x91, 0xd6, 0x91, 0x4c, 0x34, 0xbf, 0x4b, + 0x7b, 0x22, 0xc4, 0x6a, 0x7c, 0xd6, 0x81, 0xc4, 0x29, 0x1a, 0x83, 0x19, 0x81, 0x98, 0x7e, 0x9b, + 0xc4, 0x17, 0x64, 0x8a, 0x90, 0x3d, 0x94, 0x22, 0x0f, 0x73, 0xf1, 0x05, 0x7b, 0xbd, 0x34, 0x9c, + 0xa8, 0xc8, 0x00, 0x0f, 0x78, 0x16, 0x80, 0x55, 0xf8, 0x74, 0x2d, 0xe7, 0x24, 0x7e, 0x60, 0x6c, + 0x67, 0x2e, 0x92, 0x19, 0xbc, 0xbc, 0x48, 0x81, 0x53, 0x19, 0xae, 0xcc, 0x36, 0xfc, 0xd6, 0x1a, + 0x0a, 0xaf, 0x7f, 0x04, 0x67, 0x0a, 0xf4, 0x7c, 0x6c, 0x44, 0xcb, 0xfa, 0x31, 0x10, 0x5a, 0xbf, + 0xcf, 0xe1, 0x67, 0x3d, 0xca, 0x92, 0xe7, 0x20, 0x62, 0x33, 0xdf, 0x99, 0xc3, 0xe4, 0x9c, 0x7c, + 0xd6, 0x3e, 0x12, 0x7a, 0xd6, 0x75, 0xd2, 0x09, 0xa5, 0xec, 0x9d, 0xfd, 0x59, 0x22, 0x15, 0xac, + 0xcc, 0xcf, 0x94, 0x92, 0x8a, 0xdf, 0x27, 0x22, 0x34, 0x28, 0x2b, 0xf7, 0x79, 0x37, 0xd8, 0xcf, + 0x5e, 0x2c, 0xc5, 0xb4, 0x3c, 0x23, 0x74, 0xf6, 0x2a, 0x20, 0x9c, 0x3d, 0xcc, 0x39, 0x89, 0x9f, + 0xd8, 0x5b, 0x43, 0x05, 0x67, 0x71, 0x34, 0x9b, 0xdb, 0x93, 0x48, 0x25, 0xa5, 0xc6, 0x58, 0xa1, + 0x7b, 0x5d, 0x50, 0x7c, 0x58, 0x06, 0x69, 0x1a, 0x5f, 0x94, 0x3a, 0x54, 0x11, 0x21, 0x7b, 0xe8, + 0xb0, 0x78, 0x18, 0xae, 0xe4, 0x03, 0x39, 0x39, 0x2f, 0xba, 0xab, 0x26, 0x2b, 0xb9, 0x32, 0x87, + 0x2a, 0x19, 0x53, 0xf8, 0x59, 0x1c, 0x25, 0x71, 0x15, 0x9e, 0x5a, 0x16, 0x06, 0x42, 0xcf, 0xc2, + 0xe7, 0xb0, 0x44, 0xd9, 0x28, 0x5f, 0x64, 0xa0, 0x2e, 0x78, 0xa0, 0x93, 0x16, 0x40, 0x48, 0xc2, + 0xe7, 0x70, 0x0d, 0x97, 0x96, 0x5d, 0x30, 0x93, 0xf9, 0x40, 0x3f, 0x3d, 0x15, 0x64, 0x0d, 0x37, + 0xa8, 0x50, 0x0d, 0x13, 0xb0, 0x53, 0xfc, 0x95, 0xbd, 0xef, 0x9b, 0x07, 0x71, 0x3c, 0x54, 0xd1, + 0x52, 0xf3, 0x07, 0x6b, 0x23, 0x59, 0xd4, 0x6a, 0x3f, 0xbc, 0x82, 0x47, 0xfb, 0x96, 0x07, 0x69, + 0xda, 0x61, 0xcb, 0x83, 0x34, 0xed, 0xbe, 0xe5, 0x02, 0xc6, 0x8a, 0x23, 0x48, 0xe3, 0x68, 0x22, + 0x4c, 0x24, 0x93, 0xbc, 0x5f, 0x65, 0x9a, 0x54, 0x6c, 0x50, 0x21, 0x45, 0x02, 0xc6, 0x95, 0x73, + 0x28, 0xb4, 0x01, 0x55, 0x8a, 0x51, 0x95, 0x83, 0x81, 0x50, 0xe5, 0xf8, 0x1c, 0x6e, 0xb3, 0x2b, + 0xcb, 0x50, 0xea, 0x28, 0x5f, 0x04, 0xd9, 0x66, 0x7d, 0x24, 0xd4, 0x66, 0xeb, 0x24, 0xee, 0x48, + 0x27, 0x22, 0x32, 0xbb, 0xb2, 0x52, 0xa2, 0xfc, 0x6b, 0x4c, 0xa8, 0x23, 0x35, 0x50, 0xac, 0x35, + 0x36, 0x32, 0x45, 0xa9, 0x25, 0xb5, 0x6a, 0x4c, 0x48, 0xab, 0x81, 0xe2, 0x83, 0x50, 0x33, 0x1e, + 0x46, 0x49, 0xb4, 0xc8, 0x16, 0xe4, 0x41, 0xa0, 0xd1, 0xd0, 0x41, 0x68, 0xf3, 0x70, 0x0b, 0x58, + 0xb0, 0xb7, 0xc7, 0x46, 0x28, 0x83, 0x77, 0x4b, 0x6f, 0xc1, 0x87, 0xac, 0xe8, 0xfd, 0x4e, 0xac, + 0x93, 0xfb, 0xbd, 0xc7, 0x36, 0xea, 0xe6, 0xa3, 0xc4, 0x44, 0xf1, 0xe0, 0xcc, 0x80, 0xe2, 0x5f, + 0x75, 0x88, 0x56, 0xe1, 0x76, 0x0d, 0x8f, 0xaf, 0xe8, 0x85, 0x67, 0xcf, 0x1e, 0x58, 0x4a, 0x93, + 0xb3, 0x07, 0xd9, 0x43, 0xb3, 0xc7, 0xc3, 0x70, 0x72, 0x8f, 0xd1, 0x1a, 0xf2, 0xf6, 0x40, 0x26, + 0xb7, 0x0e, 0x85, 0x92, 0xdb, 0x64, 0x71, 0x31, 0x61, 0x6b, 0x55, 0xe1, 0x64, 0x31, 0xd1, 0x68, + 0xa8, 0x98, 0xda, 0x3c, 0xf0, 0x7e, 0x47, 0xa0, 0x61, 0x6d, 0x31, 0xd5, 0xa1, 0xd0, 0x7e, 0x9b, + 0x2c, 0x1e, 0xed, 0xfb, 0x49, 0x64, 0x56, 0x4d, 0x83, 0x1c, 0xed, 0x95, 0x39, 0x34, 0xda, 0x31, + 0xe5, 0x82, 0xff, 0xd6, 0x63, 0x37, 0x87, 0x32, 0xcd, 0xe2, 0xe2, 0x62, 0x99, 0x0a, 0x05, 0x89, + 0xf9, 0x46, 0x66, 0x2a, 0x11, 0x31, 0xa7, 0x92, 0xd3, 0xc2, 0x5a, 0xdd, 0x47, 0x57, 0x71, 0xc1, + 0x05, 0x9a, 0x2f, 0xae, 0xdc, 0x3e, 0x6f, 0x5b, 0x7c, 0x69, 0x0f, 0x15, 0xa8, 0x87, 0xe1, 0x11, + 0xf1, 0x14, 0x16, 0xd2, 0x40, 0x99, 0x43, 0xca, 0x13, 0x03, 0xa1, 0x11, 0xe1, 0x73, 0xb8, 0x26, + 0x8e, 0x92, 0xa9, 0xf4, 0x64, 0xee, 0x91, 0xd7, 0x1f, 0x1f, 0x0a, 0xd5, 0x44, 0x93, 0x75, 0x72, + 0x9a, 0xf1, 0x72, 0x9b, 0x27, 0x42, 0x0f, 0x95, 0xcc, 0xa1, 0x29, 0x0f, 0x8c, 0x4e, 0x84, 0x59, + 0xc9, 0x2f, 0x3a, 0xd2, 0xf8, 0x9d, 0x75, 0x0c, 0xb6, 0x0e, 0x6f, 0xd3, 0x6f, 0x59, 0xfe, 0xae, + 0xee, 0x84, 0x21, 0x17, 0x79, 0xc9, 0xde, 0xad, 0x94, 0x47, 0xa0, 0xf3, 0xae, 0x06, 0x53, 0x1e, + 0x5e, 0xa1, 0xe3, 0xac, 0xda, 0x76, 0x57, 0xdc, 0xe9, 0xfe, 0xd1, 0x63, 0x1f, 0xd4, 0x66, 0xc7, + 0x20, 0x99, 0xe6, 0x6f, 0xd5, 0xab, 0xbb, 0xc4, 0xe3, 0xf5, 0xb3, 0x06, 0xf3, 0x76, 0x21, 0x5f, + 0x5f, 0xd5, 0x0d, 0xdf, 0x34, 0xca, 0xc4, 0xdb, 0xc3, 0x70, 0x97, 0x7c, 0xcd, 0xc0, 0x48, 0xe8, + 0xa6, 0x51, 0x27, 0x9d, 0xd0, 0x0b, 0x76, 0xe3, 0x89, 0x98, 0x9c, 0x67, 0x29, 0xa7, 0xbe, 0x86, + 0xac, 0x4c, 0x36, 0xf0, 0x47, 0x01, 0xc2, 0x06, 0x7c, 0xd0, 0xe3, 0x2a, 0xbf, 0xfa, 0x69, 0x23, + 0x15, 0xec, 0x2a, 0xb9, 0x28, 0xa3, 0xb7, 0xf4, 0x3a, 0x9f, 0x0a, 0x5f, 0xfd, 0x1a, 0x30, 0xd2, + 0x3c, 0x60, 0xd7, 0x8f, 0x8b, 0x79, 0x43, 0x7d, 0xf4, 0x39, 0xc6, 0x43, 0xe6, 0x56, 0x3b, 0x60, + 0xe3, 0x3d, 0xd9, 0xf9, 0xfb, 0x72, 0xb3, 0xf7, 0xcf, 0xe5, 0x66, 0xef, 0xdf, 0xcb, 0xcd, 0xde, + 0x9f, 0xff, 0x6d, 0x5e, 0xfb, 0xfe, 0xe1, 0x32, 0x32, 0xa0, 0xf5, 0x76, 0x24, 0xfb, 0xab, 0x5f, + 0xfd, 0x99, 0xec, 0x2f, 0x4d, 0xbf, 0xf8, 0x9e, 0xd5, 0xa7, 0xbe, 0x7e, 0x9d, 0xde, 0x28, 0x6c, + 0x5f, 0xfe, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x44, 0xd6, 0xa8, 0x1f, 0x38, 0x13, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -131,6 +131,7 @@ type TabletManagerClient interface { ApplySchema(ctx context.Context, in *tabletmanagerdata.ApplySchemaRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ApplySchemaResponse, error) LockTables(ctx context.Context, in *tabletmanagerdata.LockTablesRequest, opts ...grpc.CallOption) (*tabletmanagerdata.LockTablesResponse, error) UnlockTables(ctx context.Context, in *tabletmanagerdata.UnlockTablesRequest, opts ...grpc.CallOption) (*tabletmanagerdata.UnlockTablesResponse, error) + ExecuteQuery(ctx context.Context, in *tabletmanagerdata.ExecuteQueryRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ExecuteQueryResponse, error) ExecuteFetchAsDba(ctx context.Context, in *tabletmanagerdata.ExecuteFetchAsDbaRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ExecuteFetchAsDbaResponse, error) ExecuteFetchAsAllPrivs(ctx context.Context, in *tabletmanagerdata.ExecuteFetchAsAllPrivsRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ExecuteFetchAsAllPrivsResponse, error) ExecuteFetchAsApp(ctx context.Context, in *tabletmanagerdata.ExecuteFetchAsAppRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ExecuteFetchAsAppResponse, error) @@ -340,6 +341,15 @@ func (c *tabletManagerClient) UnlockTables(ctx context.Context, in *tabletmanage return out, nil } +func (c *tabletManagerClient) ExecuteQuery(ctx context.Context, in *tabletmanagerdata.ExecuteQueryRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ExecuteQueryResponse, error) { + out := new(tabletmanagerdata.ExecuteQueryResponse) + err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/ExecuteQuery", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *tabletManagerClient) ExecuteFetchAsDba(ctx context.Context, in *tabletmanagerdata.ExecuteFetchAsDbaRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ExecuteFetchAsDbaResponse, error) { out := new(tabletmanagerdata.ExecuteFetchAsDbaResponse) err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/ExecuteFetchAsDba", in, out, opts...) @@ -662,6 +672,7 @@ type TabletManagerServer interface { ApplySchema(context.Context, *tabletmanagerdata.ApplySchemaRequest) (*tabletmanagerdata.ApplySchemaResponse, error) LockTables(context.Context, *tabletmanagerdata.LockTablesRequest) (*tabletmanagerdata.LockTablesResponse, error) UnlockTables(context.Context, *tabletmanagerdata.UnlockTablesRequest) (*tabletmanagerdata.UnlockTablesResponse, error) + ExecuteQuery(context.Context, *tabletmanagerdata.ExecuteQueryRequest) (*tabletmanagerdata.ExecuteQueryResponse, error) ExecuteFetchAsDba(context.Context, *tabletmanagerdata.ExecuteFetchAsDbaRequest) (*tabletmanagerdata.ExecuteFetchAsDbaResponse, error) ExecuteFetchAsAllPrivs(context.Context, *tabletmanagerdata.ExecuteFetchAsAllPrivsRequest) (*tabletmanagerdata.ExecuteFetchAsAllPrivsResponse, error) ExecuteFetchAsApp(context.Context, *tabletmanagerdata.ExecuteFetchAsAppRequest) (*tabletmanagerdata.ExecuteFetchAsAppResponse, error) @@ -771,6 +782,9 @@ func (*UnimplementedTabletManagerServer) LockTables(ctx context.Context, req *ta func (*UnimplementedTabletManagerServer) UnlockTables(ctx context.Context, req *tabletmanagerdata.UnlockTablesRequest) (*tabletmanagerdata.UnlockTablesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UnlockTables not implemented") } +func (*UnimplementedTabletManagerServer) ExecuteQuery(ctx context.Context, req *tabletmanagerdata.ExecuteQueryRequest) (*tabletmanagerdata.ExecuteQueryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ExecuteQuery not implemented") +} func (*UnimplementedTabletManagerServer) ExecuteFetchAsDba(ctx context.Context, req *tabletmanagerdata.ExecuteFetchAsDbaRequest) (*tabletmanagerdata.ExecuteFetchAsDbaResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ExecuteFetchAsDba not implemented") } @@ -1148,6 +1162,24 @@ func _TabletManager_UnlockTables_Handler(srv interface{}, ctx context.Context, d return interceptor(ctx, in, info, handler) } +func _TabletManager_ExecuteQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(tabletmanagerdata.ExecuteQueryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TabletManagerServer).ExecuteQuery(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/tabletmanagerservice.TabletManager/ExecuteQuery", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TabletManagerServer).ExecuteQuery(ctx, req.(*tabletmanagerdata.ExecuteQueryRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _TabletManager_ExecuteFetchAsDba_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(tabletmanagerdata.ExecuteFetchAsDbaRequest) if err := dec(in); err != nil { @@ -1726,6 +1758,10 @@ var _TabletManager_serviceDesc = grpc.ServiceDesc{ MethodName: "UnlockTables", Handler: _TabletManager_UnlockTables_Handler, }, + { + MethodName: "ExecuteQuery", + Handler: _TabletManager_ExecuteQuery_Handler, + }, { MethodName: "ExecuteFetchAsDba", Handler: _TabletManager_ExecuteFetchAsDba_Handler, diff --git a/go/vt/schemamanager/tablet_executor.go b/go/vt/schemamanager/tablet_executor.go index d84faad31a1..65eacd2ae89 100644 --- a/go/vt/schemamanager/tablet_executor.go +++ b/go/vt/schemamanager/tablet_executor.go @@ -24,12 +24,12 @@ import ( "context" "vitess.io/vitess/go/sync2" + querypb "vitess.io/vitess/go/vt/proto/query" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" "vitess.io/vitess/go/vt/schema" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/wrangler" - - topodatapb "vitess.io/vitess/go/vt/proto/topodata" ) // TabletExecutor applies schema changes to all tablets. @@ -235,22 +235,24 @@ func (exec *TabletExecutor) executeSQL(ctx context.Context, sql string, execResu switch stmt := stmt.(type) { case sqlparser.DDLStatement: if exec.isOnlineSchemaDDL(stmt) { - onlineDDLs, err := schema.NewOnlineDDLs(exec.keyspace, stmt, exec.ddlStrategySetting, exec.requestContext) if err != nil { execResult.ExecutorErr = err.Error() return err } - - exec.wr.Logger().Infof("Received DDL request. strategy settings=%+v", exec.ddlStrategySetting) for _, onlineDDL := range onlineDDLs { - exec.executeOnlineDDL(ctx, execResult, onlineDDL) + if exec.ddlStrategySetting.IsSkipTopo() { + exec.executeOnAllTablets(ctx, execResult, onlineDDL.SQL, true) + exec.wr.Logger().Printf("%s\n", onlineDDL.UUID) + } else { + exec.executeOnlineDDL(ctx, execResult, onlineDDL) + } } return nil } } exec.wr.Logger().Infof("Received DDL request. strategy=%+v", schema.DDLStrategyDirect) - exec.executeOnAllTablets(ctx, execResult, sql) + exec.executeOnAllTablets(ctx, execResult, sql, false) return nil } @@ -323,9 +325,7 @@ func (exec *TabletExecutor) executeOnlineDDL( } // executeOnAllTablets runs a query on all tablets, synchronously. This can be a long running operation. -func (exec *TabletExecutor) executeOnAllTablets( - ctx context.Context, execResult *ExecuteResult, sql string, -) { +func (exec *TabletExecutor) executeOnAllTablets(ctx context.Context, execResult *ExecuteResult, sql string, viaQueryService bool) { var wg sync.WaitGroup numOfMasterTablets := len(exec.tablets) wg.Add(numOfMasterTablets) @@ -334,7 +334,7 @@ func (exec *TabletExecutor) executeOnAllTablets( for _, tablet := range exec.tablets { go func(tablet *topodatapb.Tablet) { defer wg.Done() - exec.executeOneTablet(ctx, tablet, sql, errChan, successChan) + exec.executeOneTablet(ctx, tablet, sql, viaQueryService, errChan, successChan) }(tablet) } wg.Wait() @@ -373,9 +373,17 @@ func (exec *TabletExecutor) executeOneTablet( ctx context.Context, tablet *topodatapb.Tablet, sql string, + viaQueryService bool, errChan chan ShardWithError, successChan chan ShardResult) { - result, err := exec.wr.TabletManagerClient().ExecuteFetchAsDba(ctx, tablet, false, []byte(sql), 10, false, true) + + var result *querypb.QueryResult + var err error + if viaQueryService { + result, err = exec.wr.TabletManagerClient().ExecuteQuery(ctx, tablet, []byte(sql), 10) + } else { + result, err = exec.wr.TabletManagerClient().ExecuteFetchAsDba(ctx, tablet, false, []byte(sql), 10, false, true) + } if err != nil { errChan <- ShardWithError{Shard: tablet.Shard, Err: err.Error()} return diff --git a/go/vt/vtcombo/tablet_map.go b/go/vt/vtcombo/tablet_map.go index eacfbefee1e..be87ad5dd99 100644 --- a/go/vt/vtcombo/tablet_map.go +++ b/go/vt/vtcombo/tablet_map.go @@ -645,6 +645,10 @@ func (itmc *internalTabletManagerClient) ApplySchema(ctx context.Context, tablet return t.tm.ApplySchema(ctx, change) } +func (itmc *internalTabletManagerClient) ExecuteQuery(ctx context.Context, tablet *topodatapb.Tablet, query []byte, maxrows int) (*querypb.QueryResult, error) { + return nil, fmt.Errorf("not implemented in vtcombo") +} + func (itmc *internalTabletManagerClient) ExecuteFetchAsDba(ctx context.Context, tablet *topodatapb.Tablet, usePool bool, query []byte, maxRows int, disableBinlogs, reloadSchema bool) (*querypb.QueryResult, error) { return nil, fmt.Errorf("not implemented in vtcombo") } diff --git a/go/vt/vttablet/faketmclient/fake_client.go b/go/vt/vttablet/faketmclient/fake_client.go index 26c5c4b3d7d..a545a2140ee 100644 --- a/go/vt/vttablet/faketmclient/fake_client.go +++ b/go/vt/vttablet/faketmclient/fake_client.go @@ -152,6 +152,11 @@ func (client *FakeTabletManagerClient) ApplySchema(ctx context.Context, tablet * return &tabletmanagerdatapb.SchemaChangeResult{}, nil } +// ExecuteQuery is part of the tmclient.TabletManagerClient interface. +func (client *FakeTabletManagerClient) ExecuteQuery(ctx context.Context, tablet *topodatapb.Tablet, query []byte, maxrows int) (*querypb.QueryResult, error) { + return &querypb.QueryResult{}, nil +} + // ExecuteFetchAsDba is part of the tmclient.TabletManagerClient interface. func (client *FakeTabletManagerClient) ExecuteFetchAsDba(ctx context.Context, tablet *topodatapb.Tablet, usePool bool, query []byte, maxRows int, disableBinlogs, reloadSchema bool) (*querypb.QueryResult, error) { return &querypb.QueryResult{}, nil diff --git a/go/vt/vttablet/grpctmclient/client.go b/go/vt/vttablet/grpctmclient/client.go index 59cb4922fa7..9c78bff933f 100644 --- a/go/vt/vttablet/grpctmclient/client.go +++ b/go/vt/vttablet/grpctmclient/client.go @@ -369,6 +369,25 @@ func (client *Client) UnlockTables(ctx context.Context, tablet *topodatapb.Table return err } +// ExecuteQuery is part of the tmclient.TabletManagerClient interface. +func (client *Client) ExecuteQuery(ctx context.Context, tablet *topodatapb.Tablet, query []byte, maxrows int) (*querypb.QueryResult, error) { + cc, c, err := client.dial(tablet) + if err != nil { + return nil, err + } + defer cc.Close() + + response, err := c.ExecuteQuery(ctx, &tabletmanagerdatapb.ExecuteQueryRequest{ + Query: query, + DbName: topoproto.TabletDbName(tablet), + MaxRows: uint64(maxrows), + }) + if err != nil { + return nil, err + } + return response.Result, nil +} + // ExecuteFetchAsDba is part of the tmclient.TabletManagerClient interface. func (client *Client) ExecuteFetchAsDba(ctx context.Context, tablet *topodatapb.Tablet, usePool bool, query []byte, maxRows int, disableBinlogs, reloadSchema bool) (*querypb.QueryResult, error) { var c tabletmanagerservicepb.TabletManagerClient diff --git a/go/vt/vttablet/grpctmserver/server.go b/go/vt/vttablet/grpctmserver/server.go index 298fb4ee3b2..7879ccff555 100644 --- a/go/vt/vttablet/grpctmserver/server.go +++ b/go/vt/vttablet/grpctmserver/server.go @@ -195,6 +195,18 @@ func (s *server) UnlockTables(ctx context.Context, req *tabletmanagerdatapb.Unlo return &tabletmanagerdatapb.UnlockTablesResponse{}, nil } +func (s *server) ExecuteQuery(ctx context.Context, request *tabletmanagerdatapb.ExecuteQueryRequest) (response *tabletmanagerdatapb.ExecuteQueryResponse, err error) { + defer s.tm.HandleRPCPanic(ctx, "ExecuteQuery", request, response, false /*verbose*/, &err) + ctx = callinfo.GRPCCallInfo(ctx) + response = &tabletmanagerdatapb.ExecuteQueryResponse{} + qr, err := s.tm.ExecuteQuery(ctx, request.Query, request.DbName, int(request.MaxRows)) + if err != nil { + return nil, vterrors.ToGRPC(err) + } + response.Result = qr + return response, nil +} + func (s *server) ExecuteFetchAsDba(ctx context.Context, request *tabletmanagerdatapb.ExecuteFetchAsDbaRequest) (response *tabletmanagerdatapb.ExecuteFetchAsDbaResponse, err error) { defer s.tm.HandleRPCPanic(ctx, "ExecuteFetchAsDba", request, response, false /*verbose*/, &err) ctx = callinfo.GRPCCallInfo(ctx) diff --git a/go/vt/vttablet/tabletmanager/rpc_agent.go b/go/vt/vttablet/tabletmanager/rpc_agent.go index 3751e8f1233..473cac18aff 100644 --- a/go/vt/vttablet/tabletmanager/rpc_agent.go +++ b/go/vt/vttablet/tabletmanager/rpc_agent.go @@ -70,6 +70,8 @@ type RPCTM interface { UnlockTables(ctx context.Context) error + ExecuteQuery(ctx context.Context, query []byte, dbName string, maxrows int) (*querypb.QueryResult, error) + ExecuteFetchAsDba(ctx context.Context, query []byte, dbName string, maxrows int, disableBinlogs bool, reloadSchema bool) (*querypb.QueryResult, error) ExecuteFetchAsAllPrivs(ctx context.Context, query []byte, dbName string, maxrows int, reloadSchema bool) (*querypb.QueryResult, error) diff --git a/go/vt/vttablet/tabletmanager/rpc_query.go b/go/vt/vttablet/tabletmanager/rpc_query.go index 1ab2da0504f..1372052643c 100644 --- a/go/vt/vttablet/tabletmanager/rpc_query.go +++ b/go/vt/vttablet/tabletmanager/rpc_query.go @@ -109,3 +109,12 @@ func (tm *TabletManager) ExecuteFetchAsApp(ctx context.Context, query []byte, ma result, err := conn.ExecuteFetch(string(query), maxrows, true /*wantFields*/) return sqltypes.ResultToProto3(result), err } + +// ExecuteQuery submits a new online DDL request +func (tm *TabletManager) ExecuteQuery(ctx context.Context, query []byte, dbName string, maxrows int) (*querypb.QueryResult, error) { + // get the db name from the tablet + tablet := tm.Tablet() + target := &querypb.Target{Keyspace: tablet.Keyspace, Shard: tablet.Shard, TabletType: tablet.Type} + result, err := tm.QueryServiceControl.QueryService().Execute(ctx, target, string(query), nil, 0, 0, nil) + return sqltypes.ResultToProto3(result), err +} diff --git a/go/vt/vttablet/tmclient/rpc_client_api.go b/go/vt/vttablet/tmclient/rpc_client_api.go index 448158cf0e4..217821bc044 100644 --- a/go/vt/vttablet/tmclient/rpc_client_api.go +++ b/go/vt/vttablet/tmclient/rpc_client_api.go @@ -93,6 +93,8 @@ type TabletManagerClient interface { UnlockTables(ctx context.Context, tablet *topodatapb.Tablet) error + ExecuteQuery(ctx context.Context, tablet *topodatapb.Tablet, query []byte, maxRows int) (*querypb.QueryResult, error) + // ExecuteFetchAsDba executes a query remotely using the DBA pool. // If usePool is set, a connection pool may be used to make the // query faster. Close() should close the pool in that case. diff --git a/go/vt/vttablet/tmrpctest/test_tm_rpc.go b/go/vt/vttablet/tmrpctest/test_tm_rpc.go index 8a430fec4de..222194b01f9 100644 --- a/go/vt/vttablet/tmrpctest/test_tm_rpc.go +++ b/go/vt/vttablet/tmrpctest/test_tm_rpc.go @@ -596,6 +596,17 @@ func tmRPCTestApplySchemaPanic(ctx context.Context, t *testing.T, client tmclien expectHandleRPCPanic(t, "ApplySchema", true /*verbose*/, err) } +var testExecuteQueryQuery = []byte("drop table t") + +func (fra *fakeRPCTM) ExecuteQuery(ctx context.Context, query []byte, dbName string, maxrows int) (*querypb.QueryResult, error) { + if fra.panics { + panic(fmt.Errorf("test-triggered panic")) + } + compare(fra.t, "ExecuteQuery query", query, testExecuteQueryQuery) + + return testExecuteFetchResult, nil +} + var testExecuteFetchQuery = []byte("fetch this invalid utf8 character \x80") var testExecuteFetchMaxRows = 100 var testExecuteFetchResult = &querypb.QueryResult{ diff --git a/proto/tabletmanagerdata.proto b/proto/tabletmanagerdata.proto index 99dd8a49784..5ebb9668405 100644 --- a/proto/tabletmanagerdata.proto +++ b/proto/tabletmanagerdata.proto @@ -229,6 +229,16 @@ message UnlockTablesRequest { message UnlockTablesResponse { } +message ExecuteQueryRequest { + bytes query = 1; + string db_name = 2; + uint64 max_rows = 3; +} + +message ExecuteQueryResponse { + query.QueryResult result = 1; +} + message ExecuteFetchAsDbaRequest { bytes query = 1; string db_name = 2; diff --git a/proto/tabletmanagerservice.proto b/proto/tabletmanagerservice.proto index 609e289ba08..9d8f91f6b3a 100644 --- a/proto/tabletmanagerservice.proto +++ b/proto/tabletmanagerservice.proto @@ -72,6 +72,8 @@ service TabletManager { rpc UnlockTables(tabletmanagerdata.UnlockTablesRequest) returns (tabletmanagerdata.UnlockTablesResponse) {}; + rpc ExecuteQuery(tabletmanagerdata.ExecuteQueryRequest) returns (tabletmanagerdata.ExecuteQueryResponse) {}; + rpc ExecuteFetchAsDba(tabletmanagerdata.ExecuteFetchAsDbaRequest) returns (tabletmanagerdata.ExecuteFetchAsDbaResponse) {}; rpc ExecuteFetchAsAllPrivs(tabletmanagerdata.ExecuteFetchAsAllPrivsRequest) returns (tabletmanagerdata.ExecuteFetchAsAllPrivsResponse) {}; From 885de27dda80fe909867f245b64ca9b9570905f1 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 8 Apr 2021 09:10:19 +0300 Subject: [PATCH 37/64] reject -singleton migratio submission if another migration is pending Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vttablet/onlineddl/executor.go | 34 +++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/go/vt/vttablet/onlineddl/executor.go b/go/vt/vttablet/onlineddl/executor.go index e11812c0926..488a21763fb 100644 --- a/go/vt/vttablet/onlineddl/executor.go +++ b/go/vt/vttablet/onlineddl/executor.go @@ -1177,6 +1177,19 @@ func (e *Executor) readMigration(ctx context.Context, uuid string) (onlineDDL *s return onlineDDL, row, nil } +// readPendingMigrationsUUIDs returns UUIDs for migrations in pending state (queued/ready/running) +func (e *Executor) readPendingMigrationsUUIDs(ctx context.Context) (uuids []string, err error) { + r, err := e.execQuery(ctx, sqlSelectPendingMigrations) + if err != nil { + return uuids, err + } + for _, row := range r.Named().Rows { + uuid := row["migration_uuid"].ToString() + uuids = append(uuids, uuid) + } + return uuids, err +} + // terminateMigration attempts to interrupt and hard-stop a running migration func (e *Executor) terminateMigration(ctx context.Context, onlineDDL *schema.OnlineDDL, lastMigrationUUID string) (foundRunning bool, err error) { switch onlineDDL.Strategy { @@ -1278,15 +1291,10 @@ func (e *Executor) cancelMigrations(ctx context.Context, uuids []string, message // CancelPendingMigrations cancels all pending migrations (that are expected to run or are running) // for this keyspace func (e *Executor) CancelPendingMigrations(ctx context.Context, message string) (result *sqltypes.Result, err error) { - r, err := e.execQuery(ctx, sqlSelectPendingMigrations) + uuids, err := e.readPendingMigrationsUUIDs(ctx) if err != nil { return result, err } - var uuids []string - for _, row := range r.Named().Rows { - uuid := row["migration_uuid"].ToString() - uuids = append(uuids, uuid) - } result = &sqltypes.Result{} for _, uuid := range uuids { @@ -2530,6 +2538,20 @@ func (e *Executor) SubmitMigration( if err != nil { return nil, err } + + if onlineDDL.StrategySetting().IsSingleton() { + e.migrationMutex.Lock() + defer e.migrationMutex.Unlock() + + uuids, err := e.readPendingMigrationsUUIDs(ctx) + if err != nil { + return result, err + } + if len(uuids) > 0 { + return result, fmt.Errorf("singleton migration rejected: found pending migrations [%s]", strings.Join(uuids, ", ")) + } + } + defer e.triggerNextCheckInterval() return e.execQuery(ctx, query) From 453d2efc723055d8daa9ad4a721bddbc60db6f36 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 8 Apr 2021 10:34:26 +0300 Subject: [PATCH 38/64] onlineddl/singleton endtoend tests Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- .../cluster_endtoend_onlineddl_singleton.yml | 40 ++ ...uster_endtoend_tabletmanager_throttler.yml | 2 +- ..._tabletmanager_throttler_custom_config.yml | 2 +- .../singleton/onlineddl_singleton_test.go | 350 ++++++++++++++++++ test/ci_workflow_gen.go | 1 + test/config.json | 9 + 6 files changed, 402 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/cluster_endtoend_onlineddl_singleton.yml create mode 100644 go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go diff --git a/.github/workflows/cluster_endtoend_onlineddl_singleton.yml b/.github/workflows/cluster_endtoend_onlineddl_singleton.yml new file mode 100644 index 00000000000..78ef2ed5633 --- /dev/null +++ b/.github/workflows/cluster_endtoend_onlineddl_singleton.yml @@ -0,0 +1,40 @@ +# DO NOT MODIFY: THIS FILE IS GENERATED USING "make generate_ci_workflows" + +name: Cluster (onlineddl_singleton) +on: [push, pull_request] +jobs: + + build: + name: Run endtoend tests on Cluster (onlineddl_singleton) + runs-on: ubuntu-18.04 + + steps: + - name: Set up Go + uses: actions/setup-go@v1 + with: + go-version: 1.15 + + - name: Check out code + uses: actions/checkout@v2 + + - name: Get dependencies + run: | + sudo apt-get update + sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd curl git wget eatmydata + sudo service mysql stop + sudo service etcd stop + sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ + sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld + go mod download + + wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb + sudo apt-get install -y gnupg2 + sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb + sudo apt-get update + sudo apt-get install percona-xtrabackup-24 + + - name: Run cluster endtoend test + timeout-minutes: 30 + run: | + source build.env + eatmydata -- go run test.go -docker=false -print-log -follow -shard onlineddl_singleton diff --git a/.github/workflows/cluster_endtoend_tabletmanager_throttler.yml b/.github/workflows/cluster_endtoend_tabletmanager_throttler.yml index f7c9e7bdd2e..daecf6e23c3 100644 --- a/.github/workflows/cluster_endtoend_tabletmanager_throttler.yml +++ b/.github/workflows/cluster_endtoend_tabletmanager_throttler.yml @@ -6,7 +6,7 @@ jobs: build: name: Run endtoend tests on Cluster (tabletmanager_throttler) - runs-on: ubuntu-latest + runs-on: ubuntu-18.04 steps: - name: Set up Go diff --git a/.github/workflows/cluster_endtoend_tabletmanager_throttler_custom_config.yml b/.github/workflows/cluster_endtoend_tabletmanager_throttler_custom_config.yml index c48d42e5c58..897cfc1d7c0 100644 --- a/.github/workflows/cluster_endtoend_tabletmanager_throttler_custom_config.yml +++ b/.github/workflows/cluster_endtoend_tabletmanager_throttler_custom_config.yml @@ -6,7 +6,7 @@ jobs: build: name: Run endtoend tests on Cluster (tabletmanager_throttler_custom_config) - runs-on: ubuntu-latest + runs-on: ubuntu-18.04 steps: - name: Set up Go diff --git a/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go b/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go new file mode 100644 index 00000000000..f752c74ec0c --- /dev/null +++ b/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go @@ -0,0 +1,350 @@ +/* +Copyright 2021 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package singleton + +import ( + "flag" + "fmt" + "os" + "path" + "strings" + "sync" + "testing" + "time" + + "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/vt/schema" + + "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/test/endtoend/onlineddl" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +type WriteMetrics struct { + mu sync.Mutex + insertsAttempts, insertsFailures, insertsNoops, inserts int64 + updatesAttempts, updatesFailures, updatesNoops, updates int64 + deletesAttempts, deletesFailures, deletesNoops, deletes int64 +} + +func (w *WriteMetrics) Clear() { + w.mu.Lock() + defer w.mu.Unlock() + + w.inserts = 0 + w.updates = 0 + w.deletes = 0 + + w.insertsAttempts = 0 + w.insertsFailures = 0 + w.insertsNoops = 0 + + w.updatesAttempts = 0 + w.updatesFailures = 0 + w.updatesNoops = 0 + + w.deletesAttempts = 0 + w.deletesFailures = 0 + w.deletesNoops = 0 +} + +func (w *WriteMetrics) String() string { + return fmt.Sprintf(`WriteMetrics: inserts-deletes=%d, updates-deletes=%d, +insertsAttempts=%d, insertsFailures=%d, insertsNoops=%d, inserts=%d, +updatesAttempts=%d, updatesFailures=%d, updatesNoops=%d, updates=%d, +deletesAttempts=%d, deletesFailures=%d, deletesNoops=%d, deletes=%d, +`, + w.inserts-w.deletes, w.updates-w.deletes, + w.insertsAttempts, w.insertsFailures, w.insertsNoops, w.inserts, + w.updatesAttempts, w.updatesFailures, w.updatesNoops, w.updates, + w.deletesAttempts, w.deletesFailures, w.deletesNoops, w.deletes, + ) +} + +var ( + clusterInstance *cluster.LocalProcessCluster + vtParams mysql.ConnParams + + hostname = "localhost" + keyspaceName = "ks" + cell = "zone1" + schemaChangeDirectory = "" + tableName = `stress_test` + createStatement = ` + CREATE TABLE stress_test ( + id bigint(20) not null, + rand_val varchar(32) null default '', + hint_col varchar(64) not null default 'just-created', + created_timestamp timestamp not null default current_timestamp, + updates int unsigned not null default 0, + PRIMARY KEY (id), + key created_idx(created_timestamp), + key updates_idx(updates) + ) ENGINE=InnoDB + ` + // We will run this query with "gh-ost --max-load=Threads_running=1" + alterTableThrottlingStatement = ` + ALTER TABLE stress_test DROP COLUMN created_timestamp + ` + // A trivial statement which must succeed and does not change the schema + alterTableTrivialStatement = ` + ALTER TABLE stress_test ENGINE=InnoDB + ` +) + +func TestMain(m *testing.M) { + defer cluster.PanicHandler(nil) + flag.Parse() + + exitcode, err := func() (int, error) { + clusterInstance = cluster.NewCluster(cell, hostname) + schemaChangeDirectory = path.Join("/tmp", fmt.Sprintf("schema_change_dir_%d", clusterInstance.GetAndReserveTabletUID())) + defer os.RemoveAll(schemaChangeDirectory) + defer clusterInstance.Teardown() + + if _, err := os.Stat(schemaChangeDirectory); os.IsNotExist(err) { + _ = os.Mkdir(schemaChangeDirectory, 0700) + } + + clusterInstance.VtctldExtraArgs = []string{ + "-schema_change_dir", schemaChangeDirectory, + "-schema_change_controller", "local", + "-schema_change_check_interval", "1"} + + clusterInstance.VtTabletExtraArgs = []string{ + "-enable-lag-throttler", + "-throttle_threshold", "1s", + "-heartbeat_enable", + "-heartbeat_interval", "250ms", + "-migration_check_interval", "5s", + } + clusterInstance.VtGateExtraArgs = []string{ + "-ddl_strategy", "online", + } + + if err := clusterInstance.StartTopo(); err != nil { + return 1, err + } + + // Start keyspace + keyspace := &cluster.Keyspace{ + Name: keyspaceName, + } + + // No need for replicas in this stress test + if err := clusterInstance.StartKeyspace(*keyspace, []string{"1"}, 0, false); err != nil { + return 1, err + } + + vtgateInstance := clusterInstance.NewVtgateInstance() + // set the gateway we want to use + vtgateInstance.GatewayImplementation = "tabletgateway" + // Start vtgate + if err := vtgateInstance.Setup(); err != nil { + return 1, err + } + // ensure it is torn down during cluster TearDown + clusterInstance.VtgateProcess = *vtgateInstance + vtParams = mysql.ConnParams{ + Host: clusterInstance.Hostname, + Port: clusterInstance.VtgateMySQLPort, + } + + return m.Run(), nil + }() + if err != nil { + fmt.Printf("%v\n", err) + os.Exit(1) + } else { + os.Exit(exitcode) + } + +} + +func TestSchemaChange(t *testing.T) { + defer cluster.PanicHandler(t) + shards := clusterInstance.Keyspaces[0].Shards + require.Equal(t, 1, len(shards)) + + var uuids []string + // CREATE + t.Run("CREATE TABLE", func(t *testing.T) { + // The table does not exist + uuid := testOnlineDDLStatement(t, createStatement, "online -singleton", "vtgate", "", "", false) + uuids = append(uuids, uuid) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) + checkTable(t, tableName, true) + }) + t.Run("revert CREATE TABLE", func(t *testing.T) { + // The table existed, so it will now be dropped (renamed) + uuid := testRevertMigration(t, uuids[len(uuids)-1], "", false) + uuids = append(uuids, uuid) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) + checkTable(t, tableName, false) + }) + t.Run("revert revert CREATE TABLE", func(t *testing.T) { + // Table was dropped (renamed) so it will now be restored + uuid := testRevertMigration(t, uuids[len(uuids)-1], "", false) + uuids = append(uuids, uuid) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) + checkTable(t, tableName, true) + }) + + var throttledUUID string + t.Run("throttled migration", func(t *testing.T) { + throttledUUID = testOnlineDDLStatement(t, alterTableThrottlingStatement, "gh-ost -singleton --max-load=Threads_running=1", "vtgate", "hint_col", "", false) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, throttledUUID, schema.OnlineDDLStatusRunning) + }) + t.Run("failed singleton migration, vtgate", func(t *testing.T) { + uuid := testOnlineDDLStatement(t, alterTableThrottlingStatement, "gh-ost -singleton --max-load=Threads_running=1", "vtgate", "hint_col", "rejected", true) + assert.Empty(t, uuid) + }) + t.Run("failed singleton migration, vtctl", func(t *testing.T) { + uuid := testOnlineDDLStatement(t, alterTableThrottlingStatement, "gh-ost -singleton --max-load=Threads_running=1", "vtctl", "hint_col", "rejected", true) + assert.Empty(t, uuid) + }) + t.Run("failed revert migration", func(t *testing.T) { + uuid := testRevertMigration(t, throttledUUID, "rejected", true) + assert.Empty(t, uuid) + }) + t.Run("terminate throttled migration", func(t *testing.T) { + onlineddl.CheckMigrationStatus(t, &vtParams, shards, throttledUUID, schema.OnlineDDLStatusRunning) + onlineddl.CheckCancelMigration(t, &vtParams, shards, throttledUUID, true) + time.Sleep(2 * time.Second) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, throttledUUID, schema.OnlineDDLStatusFailed) + }) + t.Run("successful online alter, vtctl", func(t *testing.T) { + uuid := testOnlineDDLStatement(t, alterTableTrivialStatement, "gh-ost -singleton", "vtctl", "hint_col", "", false) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) + onlineddl.CheckCancelMigration(t, &vtParams, shards, uuid, false) + onlineddl.CheckRetryMigration(t, &vtParams, shards, uuid, false) + }) + t.Run("successful online alter, vtgate", func(t *testing.T) { + uuid := testOnlineDDLStatement(t, alterTableTrivialStatement, "gh-ost -singleton", "vtgate", "hint_col", "", false) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) + onlineddl.CheckCancelMigration(t, &vtParams, shards, uuid, false) + onlineddl.CheckRetryMigration(t, &vtParams, shards, uuid, false) + }) + + // Last two tests (we run an incomplete migration) + t.Run("submit successful migration, no wait, vtgate", func(t *testing.T) { + _ = testOnlineDDLStatement(t, alterTableTrivialStatement, "gh-ost -singleton", "vtgate", "hint_col", "", true) + }) + t.Run("fail submit migration, no wait, vtgate", func(t *testing.T) { + _ = testOnlineDDLStatement(t, alterTableTrivialStatement, "gh-ost -singleton", "vtgate", "hint_col", "rejected", true) + }) +} + +// testOnlineDDLStatement runs an online DDL, ALTER statement +func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy string, executeStrategy string, expectHint string, expectError string, skipWait bool) (uuid string) { + strategySetting, err := schema.ParseDDLStrategy(ddlStrategy) + require.NoError(t, err) + + if executeStrategy == "vtgate" { + result := onlineddl.VtgateExecDDL(t, &vtParams, ddlStrategy, alterStatement, expectError) + if result != nil { + row := result.Named().Row() + if row != nil { + uuid = row.AsString("uuid", "") + } + } + } else { + output, err := clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, alterStatement, ddlStrategy) + if expectError == "" { + assert.NoError(t, err) + uuid = output + } else { + assert.Error(t, err) + assert.Contains(t, output, expectError) + } + } + uuid = strings.TrimSpace(uuid) + fmt.Println("# Generated UUID (for debug purposes):") + fmt.Printf("<%s>\n", uuid) + + if !strategySetting.Strategy.IsDirect() && !skipWait { + time.Sleep(time.Second * 20) + } + + if expectHint != "" { + checkMigratedTable(t, tableName, expectHint) + } + return uuid +} + +// testRevertMigration reverts a given migration +func testRevertMigration(t *testing.T, revertUUID string, expectError string, skipWait bool) (uuid string) { + revertQuery := fmt.Sprintf("revert vitess_migration '%s'", revertUUID) + r := onlineddl.VtgateExecDDL(t, &vtParams, "online -singleton", revertQuery, expectError) + + if expectError == "" { + require.NotNil(t, r) + row := r.Named().Row() + require.NotNil(t, row) + uuid = row["uuid"].ToString() + + fmt.Println("# Generated UUID (for debug purposes):") + fmt.Printf("<%s>\n", uuid) + } + if !skipWait { + time.Sleep(time.Second * 20) + } + return uuid +} + +// checkTable checks the number of tables in the first two shards. +func checkTable(t *testing.T, showTableName string, expectExists bool) bool { + expectCount := 0 + if expectExists { + expectCount = 1 + } + for i := range clusterInstance.Keyspaces[0].Shards { + if !checkTablesCount(t, clusterInstance.Keyspaces[0].Shards[i].Vttablets[0], showTableName, expectCount) { + return false + } + } + return true +} + +// checkTablesCount checks the number of tables in the given tablet +func checkTablesCount(t *testing.T, tablet *cluster.Vttablet, showTableName string, expectCount int) bool { + query := fmt.Sprintf(`show tables like '%%%s%%';`, showTableName) + queryResult, err := tablet.VttabletProcess.QueryTablet(query, keyspaceName, true) + require.Nil(t, err) + return assert.Equal(t, expectCount, len(queryResult.Rows)) +} + +// checkMigratedTables checks the CREATE STATEMENT of a table after migration +func checkMigratedTable(t *testing.T, tableName, expectHint string) { + for i := range clusterInstance.Keyspaces[0].Shards { + createStatement := getCreateTableStatement(t, clusterInstance.Keyspaces[0].Shards[i].Vttablets[0], tableName) + assert.Contains(t, createStatement, expectHint) + } +} + +// getCreateTableStatement returns the CREATE TABLE statement for a given table +func getCreateTableStatement(t *testing.T, tablet *cluster.Vttablet, tableName string) (statement string) { + queryResult, err := tablet.VttabletProcess.QueryTablet(fmt.Sprintf("show create table %s;", tableName), keyspaceName, true) + require.Nil(t, err) + + assert.Equal(t, len(queryResult.Rows), 1) + assert.Equal(t, len(queryResult.Rows[0]), 2) // table name, create statement + statement = queryResult.Rows[0][1].ToString() + return statement +} diff --git a/test/ci_workflow_gen.go b/test/ci_workflow_gen.go index 02c6f7f8a54..45170806b74 100644 --- a/test/ci_workflow_gen.go +++ b/test/ci_workflow_gen.go @@ -62,6 +62,7 @@ var ( "vreplication_migrate", "onlineddl_revert", "onlineddl_declarative", + "onlineddl_singleton", "tabletmanager_throttler", "tabletmanager_throttler_custom_config", } diff --git a/test/config.json b/test/config.json index e111dfe4832..c3c9bd930ce 100644 --- a/test/config.json +++ b/test/config.json @@ -311,6 +311,15 @@ "RetryMax": 0, "Tags": [] }, + "onlineddl_singleton": { + "File": "unused.go", + "Args": ["vitess.io/vitess/go/test/endtoend/onlineddl/singleton"], + "Command": [], + "Manual": false, + "Shard": "onlineddl_singleton", + "RetryMax": 0, + "Tags": [] + }, "pitr": { "File": "unused.go", "Args": ["vitess.io/vitess/go/test/endtoend/recovery/pitr"], From a8c31116710c0675a2aaf167d32d6b8eb8e60a4f Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 8 Apr 2021 12:41:14 +0300 Subject: [PATCH 39/64] cleanup Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- .../singleton/onlineddl_singleton_test.go | 47 +------------------ 1 file changed, 1 insertion(+), 46 deletions(-) diff --git a/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go b/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go index f752c74ec0c..c6bcccb7d4e 100644 --- a/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go +++ b/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go @@ -22,7 +22,6 @@ import ( "os" "path" "strings" - "sync" "testing" "time" @@ -36,47 +35,6 @@ import ( "github.com/stretchr/testify/require" ) -type WriteMetrics struct { - mu sync.Mutex - insertsAttempts, insertsFailures, insertsNoops, inserts int64 - updatesAttempts, updatesFailures, updatesNoops, updates int64 - deletesAttempts, deletesFailures, deletesNoops, deletes int64 -} - -func (w *WriteMetrics) Clear() { - w.mu.Lock() - defer w.mu.Unlock() - - w.inserts = 0 - w.updates = 0 - w.deletes = 0 - - w.insertsAttempts = 0 - w.insertsFailures = 0 - w.insertsNoops = 0 - - w.updatesAttempts = 0 - w.updatesFailures = 0 - w.updatesNoops = 0 - - w.deletesAttempts = 0 - w.deletesFailures = 0 - w.deletesNoops = 0 -} - -func (w *WriteMetrics) String() string { - return fmt.Sprintf(`WriteMetrics: inserts-deletes=%d, updates-deletes=%d, -insertsAttempts=%d, insertsFailures=%d, insertsNoops=%d, inserts=%d, -updatesAttempts=%d, updatesFailures=%d, updatesNoops=%d, updates=%d, -deletesAttempts=%d, deletesFailures=%d, deletesNoops=%d, deletes=%d, -`, - w.inserts-w.deletes, w.updates-w.deletes, - w.insertsAttempts, w.insertsFailures, w.insertsNoops, w.inserts, - w.updatesAttempts, w.updatesFailures, w.updatesNoops, w.updates, - w.deletesAttempts, w.deletesFailures, w.deletesNoops, w.deletes, - ) -} - var ( clusterInstance *cluster.LocalProcessCluster vtParams mysql.ConnParams @@ -132,11 +90,8 @@ func TestMain(m *testing.M) { "-throttle_threshold", "1s", "-heartbeat_enable", "-heartbeat_interval", "250ms", - "-migration_check_interval", "5s", - } - clusterInstance.VtGateExtraArgs = []string{ - "-ddl_strategy", "online", } + clusterInstance.VtGateExtraArgs = []string{} if err := clusterInstance.StartTopo(); err != nil { return 1, err From 895693c55db5a0f8de1793e40eb74fb4f69074c6 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 8 Apr 2021 13:52:41 +0300 Subject: [PATCH 40/64] ApplySchema supports 'revert vitess_migration' queries Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schemamanager/tablet_executor.go | 63 +++++++++++++++++--------- 1 file changed, 42 insertions(+), 21 deletions(-) diff --git a/go/vt/schemamanager/tablet_executor.go b/go/vt/schemamanager/tablet_executor.go index 65eacd2ae89..be7354de8c9 100644 --- a/go/vt/schemamanager/tablet_executor.go +++ b/go/vt/schemamanager/tablet_executor.go @@ -124,7 +124,7 @@ func (exec *TabletExecutor) Validate(ctx context.Context, sqls []string) error { // We ignore DATABASE-level DDLs here because detectBigSchemaChanges doesn't // look at them anyway. - parsedDDLs, _, err := exec.parseDDLs(sqls) + parsedDDLs, _, _, err := exec.parseDDLs(sqls) if err != nil { return err } @@ -137,42 +137,49 @@ func (exec *TabletExecutor) Validate(ctx context.Context, sqls []string) error { return err } -func (exec *TabletExecutor) parseDDLs(sqls []string) ([]sqlparser.DDLStatement, []sqlparser.DBDDLStatement, error) { +func (exec *TabletExecutor) parseDDLs(sqls []string) ([]sqlparser.DDLStatement, []sqlparser.DBDDLStatement, [](*sqlparser.RevertMigration), error) { parsedDDLs := make([]sqlparser.DDLStatement, 0) parsedDBDDLs := make([]sqlparser.DBDDLStatement, 0) + revertStatements := make([](*sqlparser.RevertMigration), 0) for _, sql := range sqls { - stat, err := sqlparser.Parse(sql) + stmt, err := sqlparser.Parse(sql) if err != nil { - return nil, nil, fmt.Errorf("failed to parse sql: %s, got error: %v", sql, err) + return nil, nil, nil, fmt.Errorf("failed to parse sql: %s, got error: %v", sql, err) } - switch ddl := stat.(type) { + switch stmt := stmt.(type) { case sqlparser.DDLStatement: - parsedDDLs = append(parsedDDLs, ddl) + parsedDDLs = append(parsedDDLs, stmt) case sqlparser.DBDDLStatement: - parsedDBDDLs = append(parsedDBDDLs, ddl) + parsedDBDDLs = append(parsedDBDDLs, stmt) + case *sqlparser.RevertMigration: + revertStatements = append(revertStatements, stmt) default: if len(exec.tablets) != 1 { - return nil, nil, fmt.Errorf("non-ddl statements can only be executed for single shard keyspaces: %s", sql) + return nil, nil, nil, fmt.Errorf("non-ddl statements can only be executed for single shard keyspaces: %s", sql) } } } - return parsedDDLs, parsedDBDDLs, nil + return parsedDDLs, parsedDBDDLs, revertStatements, nil } // IsOnlineSchemaDDL returns true if we expect to run a online schema change DDL -func (exec *TabletExecutor) isOnlineSchemaDDL(ddlStmt sqlparser.DDLStatement) (isOnline bool) { - switch ddlStmt.GetAction() { - case sqlparser.CreateDDLAction, sqlparser.DropDDLAction, sqlparser.AlterDDLAction: - default: - return false - } - if exec.ddlStrategySetting == nil { - return false - } - if exec.ddlStrategySetting.Strategy.IsDirect() { - return false +func (exec *TabletExecutor) isOnlineSchemaDDL(stmt sqlparser.Statement) (isOnline bool) { + switch stmt := stmt.(type) { + case sqlparser.DDLStatement: + if exec.ddlStrategySetting == nil { + return false + } + if exec.ddlStrategySetting.Strategy.IsDirect() { + return false + } + switch stmt.GetAction() { + case sqlparser.CreateDDLAction, sqlparser.DropDDLAction, sqlparser.AlterDDLAction: + return true + } + case *sqlparser.RevertMigration: + return true } - return true + return false } // a schema change that satisfies any following condition is considered @@ -250,6 +257,20 @@ func (exec *TabletExecutor) executeSQL(ctx context.Context, sql string, execResu } return nil } + case *sqlparser.RevertMigration: + strategySetting := schema.NewDDLStrategySetting(schema.DDLStrategyOnline, exec.ddlStrategySetting.Options) + onlineDDL, err := schema.NewOnlineDDL(exec.keyspace, "", sqlparser.String(stmt), strategySetting, exec.requestContext) + if err != nil { + execResult.ExecutorErr = err.Error() + return err + } + if exec.ddlStrategySetting.IsSkipTopo() { + exec.executeOnAllTablets(ctx, execResult, onlineDDL.SQL, true) + exec.wr.Logger().Printf("%s\n", onlineDDL.UUID) + } else { + exec.executeOnlineDDL(ctx, execResult, onlineDDL) + } + return nil } exec.wr.Logger().Infof("Received DDL request. strategy=%+v", schema.DDLStrategyDirect) exec.executeOnAllTablets(ctx, execResult, sql, false) From 2771b09a2a3b9c608e1484749dc96d76f224ceb5 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 8 Apr 2021 14:08:47 +0300 Subject: [PATCH 41/64] testing REVERT statements on vtctl Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- .../singleton/onlineddl_singleton_test.go | 75 +++++++++++++++---- 1 file changed, 62 insertions(+), 13 deletions(-) diff --git a/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go b/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go index c6bcccb7d4e..12502db8187 100644 --- a/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go +++ b/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go @@ -44,6 +44,7 @@ var ( cell = "zone1" schemaChangeDirectory = "" tableName = `stress_test` + onlineDDLStrategy = "online -singleton" createStatement = ` CREATE TABLE stress_test ( id bigint(20) not null, @@ -64,6 +65,9 @@ var ( alterTableTrivialStatement = ` ALTER TABLE stress_test ENGINE=InnoDB ` + dropStatement = ` + DROP TABLE stress_test + ` ) func TestMain(m *testing.M) { @@ -141,21 +145,21 @@ func TestSchemaChange(t *testing.T) { // CREATE t.Run("CREATE TABLE", func(t *testing.T) { // The table does not exist - uuid := testOnlineDDLStatement(t, createStatement, "online -singleton", "vtgate", "", "", false) + uuid := testOnlineDDLStatement(t, createStatement, onlineDDLStrategy, "vtgate", "", "", false) uuids = append(uuids, uuid) onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) checkTable(t, tableName, true) }) t.Run("revert CREATE TABLE", func(t *testing.T) { // The table existed, so it will now be dropped (renamed) - uuid := testRevertMigration(t, uuids[len(uuids)-1], "", false) + uuid := testRevertMigration(t, uuids[len(uuids)-1], "vtgate", "", false) uuids = append(uuids, uuid) onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) checkTable(t, tableName, false) }) t.Run("revert revert CREATE TABLE", func(t *testing.T) { // Table was dropped (renamed) so it will now be restored - uuid := testRevertMigration(t, uuids[len(uuids)-1], "", false) + uuid := testRevertMigration(t, uuids[len(uuids)-1], "vtgate", "", false) uuids = append(uuids, uuid) onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) checkTable(t, tableName, true) @@ -175,7 +179,7 @@ func TestSchemaChange(t *testing.T) { assert.Empty(t, uuid) }) t.Run("failed revert migration", func(t *testing.T) { - uuid := testRevertMigration(t, throttledUUID, "rejected", true) + uuid := testRevertMigration(t, throttledUUID, "vtgate", "rejected", true) assert.Empty(t, uuid) }) t.Run("terminate throttled migration", func(t *testing.T) { @@ -184,19 +188,51 @@ func TestSchemaChange(t *testing.T) { time.Sleep(2 * time.Second) onlineddl.CheckMigrationStatus(t, &vtParams, shards, throttledUUID, schema.OnlineDDLStatusFailed) }) - t.Run("successful online alter, vtctl", func(t *testing.T) { + t.Run("successful gh-ost alter, vtctl", func(t *testing.T) { uuid := testOnlineDDLStatement(t, alterTableTrivialStatement, "gh-ost -singleton", "vtctl", "hint_col", "", false) onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) onlineddl.CheckCancelMigration(t, &vtParams, shards, uuid, false) onlineddl.CheckRetryMigration(t, &vtParams, shards, uuid, false) }) - t.Run("successful online alter, vtgate", func(t *testing.T) { + t.Run("successful gh-ost alter, vtgate", func(t *testing.T) { uuid := testOnlineDDLStatement(t, alterTableTrivialStatement, "gh-ost -singleton", "vtgate", "hint_col", "", false) onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) onlineddl.CheckCancelMigration(t, &vtParams, shards, uuid, false) onlineddl.CheckRetryMigration(t, &vtParams, shards, uuid, false) }) + t.Run("successful online alter, vtgate", func(t *testing.T) { + uuid := testOnlineDDLStatement(t, alterTableTrivialStatement, onlineDDLStrategy, "vtgate", "hint_col", "", false) + uuids = append(uuids, uuid) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) + onlineddl.CheckCancelMigration(t, &vtParams, shards, uuid, false) + onlineddl.CheckRetryMigration(t, &vtParams, shards, uuid, false) + checkTable(t, tableName, true) + }) + t.Run("revert ALTER TABLE, vttablet", func(t *testing.T) { + // The table existed, so it will now be dropped (renamed) + uuid := testRevertMigration(t, uuids[len(uuids)-1], "vttablet", "", false) + uuids = append(uuids, uuid) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) + checkTable(t, tableName, true) + }) + + //DROP + + t.Run("online DROP TABLE", func(t *testing.T) { + uuid := testOnlineDDLStatement(t, dropStatement, onlineDDLStrategy, "vtgate", "hint_col", "", false) + uuids = append(uuids, uuid) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) + checkTable(t, tableName, false) + }) + t.Run("revert DROP TABLE", func(t *testing.T) { + // This will recreate the table (well, actually, rename it back into place) + uuid := testRevertMigration(t, uuids[len(uuids)-1], "vttablet", "", false) + uuids = append(uuids, uuid) + onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) + checkTable(t, tableName, true) + }) + // Last two tests (we run an incomplete migration) t.Run("submit successful migration, no wait, vtgate", func(t *testing.T) { _ = testOnlineDDLStatement(t, alterTableTrivialStatement, "gh-ost -singleton", "vtgate", "hint_col", "", true) @@ -244,16 +280,29 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str } // testRevertMigration reverts a given migration -func testRevertMigration(t *testing.T, revertUUID string, expectError string, skipWait bool) (uuid string) { +func testRevertMigration(t *testing.T, revertUUID string, executeStrategy string, expectError string, skipWait bool) (uuid string) { revertQuery := fmt.Sprintf("revert vitess_migration '%s'", revertUUID) - r := onlineddl.VtgateExecDDL(t, &vtParams, "online -singleton", revertQuery, expectError) + if executeStrategy == "vtgate" { + result := onlineddl.VtgateExecDDL(t, &vtParams, onlineDDLStrategy, revertQuery, expectError) + if result != nil { + row := result.Named().Row() + if row != nil { + uuid = row.AsString("uuid", "") + } + } + } else { + output, err := clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, revertQuery, onlineDDLStrategy) + if expectError == "" { + assert.NoError(t, err) + uuid = output + } else { + assert.Error(t, err) + assert.Contains(t, output, expectError) + } + } if expectError == "" { - require.NotNil(t, r) - row := r.Named().Row() - require.NotNil(t, row) - uuid = row["uuid"].ToString() - + uuid = strings.TrimSpace(uuid) fmt.Println("# Generated UUID (for debug purposes):") fmt.Printf("<%s>\n", uuid) } From 585b373936d0e62b31b8c4c18bac4ef0be4abe7d Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 8 Apr 2021 14:11:58 +0300 Subject: [PATCH 42/64] skip_preflight Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/test/endtoend/cluster/vtctlclient_process.go | 1 + 1 file changed, 1 insertion(+) diff --git a/go/test/endtoend/cluster/vtctlclient_process.go b/go/test/endtoend/cluster/vtctlclient_process.go index 99b68b7cba4..ce0b75faaf0 100644 --- a/go/test/endtoend/cluster/vtctlclient_process.go +++ b/go/test/endtoend/cluster/vtctlclient_process.go @@ -53,6 +53,7 @@ func (vtctlclient *VtctlClientProcess) InitShardMaster(Keyspace string, Shard st func (vtctlclient *VtctlClientProcess) ApplySchemaWithOutput(Keyspace string, SQL string, ddlStrategy string) (result string, err error) { args := []string{ "ApplySchema", + "-skip_preflight", "-sql", SQL, } if ddlStrategy != "" { From 22ae22c2ad2e37ca3c032ecc9609c04fdbd749b3 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 8 Apr 2021 14:46:39 +0300 Subject: [PATCH 43/64] fixed endtoendt test Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- .../endtoend/onlineddl/singleton/onlineddl_singleton_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go b/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go index 12502db8187..c07be27c225 100644 --- a/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go +++ b/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go @@ -220,7 +220,7 @@ func TestSchemaChange(t *testing.T) { //DROP t.Run("online DROP TABLE", func(t *testing.T) { - uuid := testOnlineDDLStatement(t, dropStatement, onlineDDLStrategy, "vtgate", "hint_col", "", false) + uuid := testOnlineDDLStatement(t, dropStatement, onlineDDLStrategy, "vtgate", "", "", false) uuids = append(uuids, uuid) onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete) checkTable(t, tableName, false) @@ -273,7 +273,7 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str time.Sleep(time.Second * 20) } - if expectHint != "" { + if expectError == "" && expectHint != "" { checkMigratedTable(t, tableName, expectHint) } return uuid From 479525a19db170dfb0ae4b311ee0e2aebade2aa5 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 20 Apr 2021 11:05:24 +0300 Subject: [PATCH 44/64] apply /etc/hosts patch Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- .github/workflows/cluster_endtoend_onlineddl_singleton.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/cluster_endtoend_onlineddl_singleton.yml b/.github/workflows/cluster_endtoend_onlineddl_singleton.yml index 78ef2ed5633..cfbc82ebfd2 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_singleton.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_singleton.yml @@ -14,6 +14,12 @@ jobs: with: go-version: 1.15 + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 + - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file + run: | + echo -e "$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)\t$(hostname -f) $(hostname -s)" | sudo tee -a /etc/hosts + # DON'T FORGET TO REMOVE CODE ABOVE WHEN ISSUE IS ADRESSED! + - name: Check out code uses: actions/checkout@v2 From fdbdf06e1a54ea1ab10c7e3c796084b45304d9de Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 20 Apr 2021 11:33:48 +0300 Subject: [PATCH 45/64] extend CI port range Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- test/templates/cluster_endtoend_test.tpl | 4 ++++ test/templates/unit_test.tpl | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/test/templates/cluster_endtoend_test.tpl b/test/templates/cluster_endtoend_test.tpl index 662f7cb9ecb..7a6548a71a0 100644 --- a/test/templates/cluster_endtoend_test.tpl +++ b/test/templates/cluster_endtoend_test.tpl @@ -12,6 +12,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/test/templates/unit_test.tpl b/test/templates/unit_test.tpl index 6488d07558f..6cdd5273ae2 100644 --- a/test/templates/unit_test.tpl +++ b/test/templates/unit_test.tpl @@ -11,6 +11,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | From b5127c5a461ef16c8fa9c159e5d12f54e1eb6feb Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 20 Apr 2021 11:33:54 +0300 Subject: [PATCH 46/64] extend CI port range: apply Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- .github/workflows/cluster_endtoend_11.yml | 4 ++++ .github/workflows/cluster_endtoend_12.yml | 4 ++++ .github/workflows/cluster_endtoend_13.yml | 4 ++++ .github/workflows/cluster_endtoend_14.yml | 4 ++++ .github/workflows/cluster_endtoend_15.yml | 4 ++++ .github/workflows/cluster_endtoend_16.yml | 4 ++++ .github/workflows/cluster_endtoend_17.yml | 4 ++++ .github/workflows/cluster_endtoend_18.yml | 4 ++++ .github/workflows/cluster_endtoend_19.yml | 4 ++++ .github/workflows/cluster_endtoend_20.yml | 4 ++++ .github/workflows/cluster_endtoend_21.yml | 4 ++++ .github/workflows/cluster_endtoend_22.yml | 4 ++++ .github/workflows/cluster_endtoend_23.yml | 4 ++++ .github/workflows/cluster_endtoend_24.yml | 4 ++++ .github/workflows/cluster_endtoend_26.yml | 4 ++++ .github/workflows/cluster_endtoend_27.yml | 4 ++++ .github/workflows/cluster_endtoend_onlineddl_declarative.yml | 4 ++++ .github/workflows/cluster_endtoend_onlineddl_ghost.yml | 4 ++++ .github/workflows/cluster_endtoend_onlineddl_revert.yml | 4 ++++ .github/workflows/cluster_endtoend_onlineddl_singleton.yml | 4 ++++ .github/workflows/cluster_endtoend_onlineddl_vrepl.yml | 4 ++++ .github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml | 4 ++++ .../workflows/cluster_endtoend_tabletmanager_throttler.yml | 4 ++++ ...cluster_endtoend_tabletmanager_throttler_custom_config.yml | 4 ++++ .github/workflows/cluster_endtoend_vreplication_basic.yml | 4 ++++ .github/workflows/cluster_endtoend_vreplication_cellalias.yml | 4 ++++ .github/workflows/cluster_endtoend_vreplication_migrate.yml | 4 ++++ .github/workflows/cluster_endtoend_vreplication_multicell.yml | 4 ++++ .github/workflows/cluster_endtoend_vreplication_v2.yml | 4 ++++ .github/workflows/unit_test_mariadb101.yml | 4 ++++ .github/workflows/unit_test_mariadb103.yml | 4 ++++ .github/workflows/unit_test_mysql57.yml | 4 ++++ .github/workflows/unit_test_mysql80.yml | 4 ++++ .github/workflows/unit_test_percona56.yml | 4 ++++ 34 files changed, 136 insertions(+) diff --git a/.github/workflows/cluster_endtoend_11.yml b/.github/workflows/cluster_endtoend_11.yml index 92880758045..5ec5d45cc72 100644 --- a/.github/workflows/cluster_endtoend_11.yml +++ b/.github/workflows/cluster_endtoend_11.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_12.yml b/.github/workflows/cluster_endtoend_12.yml index ab5f53c7309..77934b909bd 100644 --- a/.github/workflows/cluster_endtoend_12.yml +++ b/.github/workflows/cluster_endtoend_12.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_13.yml b/.github/workflows/cluster_endtoend_13.yml index af71f68ebb8..c3604cef464 100644 --- a/.github/workflows/cluster_endtoend_13.yml +++ b/.github/workflows/cluster_endtoend_13.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_14.yml b/.github/workflows/cluster_endtoend_14.yml index 6c1b82eae99..e5873512672 100644 --- a/.github/workflows/cluster_endtoend_14.yml +++ b/.github/workflows/cluster_endtoend_14.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_15.yml b/.github/workflows/cluster_endtoend_15.yml index d40c0d3d6c6..0661e084b26 100644 --- a/.github/workflows/cluster_endtoend_15.yml +++ b/.github/workflows/cluster_endtoend_15.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_16.yml b/.github/workflows/cluster_endtoend_16.yml index c4119955d59..a21072bf604 100644 --- a/.github/workflows/cluster_endtoend_16.yml +++ b/.github/workflows/cluster_endtoend_16.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_17.yml b/.github/workflows/cluster_endtoend_17.yml index 5d3e7f94f1d..38944c257f1 100644 --- a/.github/workflows/cluster_endtoend_17.yml +++ b/.github/workflows/cluster_endtoend_17.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_18.yml b/.github/workflows/cluster_endtoend_18.yml index 803d1495e4c..85b25419b48 100644 --- a/.github/workflows/cluster_endtoend_18.yml +++ b/.github/workflows/cluster_endtoend_18.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_19.yml b/.github/workflows/cluster_endtoend_19.yml index 06a8e05ee30..582b7db0227 100644 --- a/.github/workflows/cluster_endtoend_19.yml +++ b/.github/workflows/cluster_endtoend_19.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_20.yml b/.github/workflows/cluster_endtoend_20.yml index c1606cb90de..d53175a88f3 100644 --- a/.github/workflows/cluster_endtoend_20.yml +++ b/.github/workflows/cluster_endtoend_20.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_21.yml b/.github/workflows/cluster_endtoend_21.yml index d9591e5f779..10f52f04178 100644 --- a/.github/workflows/cluster_endtoend_21.yml +++ b/.github/workflows/cluster_endtoend_21.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_22.yml b/.github/workflows/cluster_endtoend_22.yml index 015691f68bb..c1bcb675bae 100644 --- a/.github/workflows/cluster_endtoend_22.yml +++ b/.github/workflows/cluster_endtoend_22.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_23.yml b/.github/workflows/cluster_endtoend_23.yml index 6bc9bebc4d2..f7105bc96cd 100644 --- a/.github/workflows/cluster_endtoend_23.yml +++ b/.github/workflows/cluster_endtoend_23.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_24.yml b/.github/workflows/cluster_endtoend_24.yml index 4a555c270fe..ef3eaa00ce8 100644 --- a/.github/workflows/cluster_endtoend_24.yml +++ b/.github/workflows/cluster_endtoend_24.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_26.yml b/.github/workflows/cluster_endtoend_26.yml index 24d7bc135af..fdee5988cf0 100644 --- a/.github/workflows/cluster_endtoend_26.yml +++ b/.github/workflows/cluster_endtoend_26.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_27.yml b/.github/workflows/cluster_endtoend_27.yml index bac37c72a41..dea2e7336b9 100644 --- a/.github/workflows/cluster_endtoend_27.yml +++ b/.github/workflows/cluster_endtoend_27.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_onlineddl_declarative.yml b/.github/workflows/cluster_endtoend_onlineddl_declarative.yml index 538e76f4833..3a7381b37f2 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_declarative.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_declarative.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_onlineddl_ghost.yml b/.github/workflows/cluster_endtoend_onlineddl_ghost.yml index 41756651338..22b049e9347 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_ghost.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_ghost.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_onlineddl_revert.yml b/.github/workflows/cluster_endtoend_onlineddl_revert.yml index c81a039c4e5..a6937a9eb85 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_revert.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_revert.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_onlineddl_singleton.yml b/.github/workflows/cluster_endtoend_onlineddl_singleton.yml index cfbc82ebfd2..0a04c6af9ba 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_singleton.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_singleton.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_onlineddl_vrepl.yml b/.github/workflows/cluster_endtoend_onlineddl_vrepl.yml index 24fe0240437..5bd8a46a61c 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_vrepl.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_vrepl.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml b/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml index 714ae2aff06..56dd0231a4b 100644 --- a/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml +++ b/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_tabletmanager_throttler.yml b/.github/workflows/cluster_endtoend_tabletmanager_throttler.yml index fcbee2a3217..7caa3ccde42 100644 --- a/.github/workflows/cluster_endtoend_tabletmanager_throttler.yml +++ b/.github/workflows/cluster_endtoend_tabletmanager_throttler.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_tabletmanager_throttler_custom_config.yml b/.github/workflows/cluster_endtoend_tabletmanager_throttler_custom_config.yml index d31f144bbc6..875efbed6da 100644 --- a/.github/workflows/cluster_endtoend_tabletmanager_throttler_custom_config.yml +++ b/.github/workflows/cluster_endtoend_tabletmanager_throttler_custom_config.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_vreplication_basic.yml b/.github/workflows/cluster_endtoend_vreplication_basic.yml index 0cf9553ce3c..427d8675d06 100644 --- a/.github/workflows/cluster_endtoend_vreplication_basic.yml +++ b/.github/workflows/cluster_endtoend_vreplication_basic.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_vreplication_cellalias.yml b/.github/workflows/cluster_endtoend_vreplication_cellalias.yml index 0f7c8f79c4d..efdf95423d6 100644 --- a/.github/workflows/cluster_endtoend_vreplication_cellalias.yml +++ b/.github/workflows/cluster_endtoend_vreplication_cellalias.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_vreplication_migrate.yml b/.github/workflows/cluster_endtoend_vreplication_migrate.yml index f9891931964..1e9f02b0153 100644 --- a/.github/workflows/cluster_endtoend_vreplication_migrate.yml +++ b/.github/workflows/cluster_endtoend_vreplication_migrate.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_vreplication_multicell.yml b/.github/workflows/cluster_endtoend_vreplication_multicell.yml index 8ca6350f16c..72c92ebf610 100644 --- a/.github/workflows/cluster_endtoend_vreplication_multicell.yml +++ b/.github/workflows/cluster_endtoend_vreplication_multicell.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/cluster_endtoend_vreplication_v2.yml b/.github/workflows/cluster_endtoend_vreplication_v2.yml index 3f11a78593f..a80745f35c7 100644 --- a/.github/workflows/cluster_endtoend_vreplication_v2.yml +++ b/.github/workflows/cluster_endtoend_vreplication_v2.yml @@ -14,6 +14,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/unit_test_mariadb101.yml b/.github/workflows/unit_test_mariadb101.yml index f886d0ddc8c..f2103fb9baf 100644 --- a/.github/workflows/unit_test_mariadb101.yml +++ b/.github/workflows/unit_test_mariadb101.yml @@ -13,6 +13,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/unit_test_mariadb103.yml b/.github/workflows/unit_test_mariadb103.yml index 8d3c5380c2c..167b960fde6 100644 --- a/.github/workflows/unit_test_mariadb103.yml +++ b/.github/workflows/unit_test_mariadb103.yml @@ -13,6 +13,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/unit_test_mysql57.yml b/.github/workflows/unit_test_mysql57.yml index e8120d4c1d0..5fe87fd09e4 100644 --- a/.github/workflows/unit_test_mysql57.yml +++ b/.github/workflows/unit_test_mysql57.yml @@ -13,6 +13,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/unit_test_mysql80.yml b/.github/workflows/unit_test_mysql80.yml index 3b030662db3..6086d368c01 100644 --- a/.github/workflows/unit_test_mysql80.yml +++ b/.github/workflows/unit_test_mysql80.yml @@ -13,6 +13,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | diff --git a/.github/workflows/unit_test_percona56.yml b/.github/workflows/unit_test_percona56.yml index b5ba5c39611..f7f71e6e518 100644 --- a/.github/workflows/unit_test_percona56.yml +++ b/.github/workflows/unit_test_percona56.yml @@ -13,6 +13,10 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file run: | From 3737c8f05de0e0a6fe95284989df58d4e467d4d0 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 20 Apr 2021 12:45:16 +0300 Subject: [PATCH 47/64] copyright year Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/ddl_strategy.go | 2 +- go/vt/schema/ddl_strategy_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/go/vt/schema/ddl_strategy.go b/go/vt/schema/ddl_strategy.go index 1f04c6764e3..0b2fb8fada0 100644 --- a/go/vt/schema/ddl_strategy.go +++ b/go/vt/schema/ddl_strategy.go @@ -1,5 +1,5 @@ /* -Copyright 2019 The Vitess Authors. +Copyright 2021 The Vitess Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/go/vt/schema/ddl_strategy_test.go b/go/vt/schema/ddl_strategy_test.go index 5711620aa12..dd82f33479e 100644 --- a/go/vt/schema/ddl_strategy_test.go +++ b/go/vt/schema/ddl_strategy_test.go @@ -1,5 +1,5 @@ /* -Copyright 2019 The Vitess Authors. +Copyright 2021 The Vitess Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From ed94bb93b90a82f26f5330c6ad579e5be7cd2103 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 20 Apr 2021 12:48:22 +0300 Subject: [PATCH 48/64] clarifies case statement Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/online_ddl.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/vt/schema/online_ddl.go b/go/vt/schema/online_ddl.go index c1f08f29695..3f7668d74a2 100644 --- a/go/vt/schema/online_ddl.go +++ b/go/vt/schema/online_ddl.go @@ -158,9 +158,9 @@ func NewOnlineDDLs(keyspace string, ddlStmt sqlparser.DDLStatement, ddlStrategyS } return onlineDDLs, nil case *sqlparser.CreateTable: - // handled later on + // No particular treatment for CreateTable. "case" is here to acknowledge this is a supported type case *sqlparser.AlterTable: - // handled later on + // No particular treatment for AlterTable. "case" is here to acknowledge this is a supported type default: return nil, fmt.Errorf("Unsupported statement for Online DDL: %v", sqlparser.String(ddlStmt)) } From 2f81d427a1bf9c9af182e653a40fd22ab410976d Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 20 Apr 2021 12:59:18 +0300 Subject: [PATCH 49/64] vterrors Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/online_ddl.go | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/go/vt/schema/online_ddl.go b/go/vt/schema/online_ddl.go index 3f7668d74a2..1e1160dacfc 100644 --- a/go/vt/schema/online_ddl.go +++ b/go/vt/schema/online_ddl.go @@ -27,8 +27,10 @@ import ( "strings" "time" + vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/vterrors" ) var ( @@ -114,11 +116,11 @@ func FromJSON(bytes []byte) (*OnlineDDL, error) { func ReadTopo(ctx context.Context, conn topo.Conn, entryPath string) (*OnlineDDL, error) { bytes, _, err := conn.Get(ctx, entryPath) if err != nil { - return nil, fmt.Errorf("ReadTopo Get %s error: %s", entryPath, err.Error()) + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "ReadTopo Get %s error: %s", entryPath, err.Error()) } onlineDDL, err := FromJSON(bytes) if err != nil { - return nil, fmt.Errorf("ReadTopo unmarshal %s error: %s", entryPath, err.Error()) + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "ReadTopo unmarshal %s error: %s", entryPath, err.Error()) } return onlineDDL, nil } @@ -128,13 +130,13 @@ func ReadTopo(ctx context.Context, conn topo.Conn, entryPath string) (*OnlineDDL func ParseOnlineDDLStatement(sql string) (ddlStmt sqlparser.DDLStatement, action sqlparser.DDLAction, err error) { stmt, err := sqlparser.Parse(sql) if err != nil { - return nil, 0, fmt.Errorf("Error parsing statement: SQL=%s, error=%+v", sql, err) + return nil, 0, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "error parsing statement: SQL=%s, error=%+v", sql, err) } switch ddlStmt := stmt.(type) { case sqlparser.DDLStatement: return ddlStmt, ddlStmt.GetAction(), nil } - return ddlStmt, action, fmt.Errorf("Unsupported query type: %s", sql) + return ddlStmt, action, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported query type: %s", sql) } // NewOnlineDDLs takes a single DDL statement, normalizes it (potentially break down into multiple statements), and generates one or more OnlineDDL instances, one for each normalized statement @@ -162,7 +164,7 @@ func NewOnlineDDLs(keyspace string, ddlStmt sqlparser.DDLStatement, ddlStrategyS case *sqlparser.AlterTable: // No particular treatment for AlterTable. "case" is here to acknowledge this is a supported type default: - return nil, fmt.Errorf("Unsupported statement for Online DDL: %v", sqlparser.String(ddlStmt)) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported statement for Online DDL: %v", sqlparser.String(ddlStmt)) } if err := appendOnlineDDL(ddlStmt.GetTable().Name.String(), ddlStmt); err != nil { return nil, err @@ -173,7 +175,7 @@ func NewOnlineDDLs(keyspace string, ddlStmt sqlparser.DDLStatement, ddlStrategyS // NewOnlineDDL creates a schema change request with self generated UUID and RequestTime func NewOnlineDDL(keyspace string, table string, sql string, ddlStrategySetting *DDLStrategySetting, requestContext string) (*OnlineDDL, error) { if ddlStrategySetting == nil { - return nil, fmt.Errorf("NewOnlineDDL: found nil DDLStrategySetting") + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "NewOnlineDDL: found nil DDLStrategySetting") } u, err := CreateOnlineDDLUUID() if err != nil { @@ -217,13 +219,13 @@ func NewOnlineDDL(keyspace string, table string, sql string, ddlStrategySetting switch stmt := stmt.(type) { case sqlparser.DDLStatement: if !stmt.IsFullyParsed() { - return nil, fmt.Errorf("NewOnlineDDL: cannot fully parse statement %v", sqlparser.String(stmt)) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "NewOnlineDDL: cannot fully parse statement %v", sqlparser.String(stmt)) } stmt.SetComments(comments) case *sqlparser.RevertMigration: stmt.SetComments(comments) default: - return nil, fmt.Errorf("Unsupported statement for Online DDL: %v", sqlparser.String(stmt)) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "Unsupported statement for Online DDL: %v", sqlparser.String(stmt)) } sql = sqlparser.String(stmt) } @@ -261,17 +263,17 @@ func OnlineDDLFromCommentedStatement(stmt sqlparser.Statement) (onlineDDL *Onlin sql = sqlparser.String(stmt) stmt.SetComments(comments) default: - return nil, fmt.Errorf("Unsupported statement for Online DDL: %v", sqlparser.String(stmt)) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported statement for Online DDL: %v", sqlparser.String(stmt)) } if len(comments) == 0 { - return nil, fmt.Errorf("No comments found in statement: %v", sqlparser.String(stmt)) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "no comments found in statement: %v", sqlparser.String(stmt)) } directives := sqlparser.ExtractCommentDirectives(comments) decodeDirective := func(name string) (string, error) { value := fmt.Sprintf("%s", directives[name]) if value == "" { - return "", fmt.Errorf("No value found for comment directive %s", name) + return "", vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "no value found for comment directive %s", name) } unquoted, err := strconv.Unquote(value) if err != nil { @@ -291,7 +293,7 @@ func OnlineDDLFromCommentedStatement(stmt sqlparser.Statement) (onlineDDL *Onlin return nil, err } if !IsOnlineDDLUUID(onlineDDL.UUID) { - return nil, fmt.Errorf("Invalid UUID read from statement %s", sqlparser.String(stmt)) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid UUID read from statement %s", sqlparser.String(stmt)) } if onlineDDL.Table, err = decodeDirective("table"); err != nil { return nil, err @@ -358,7 +360,7 @@ func (onlineDDL *OnlineDDL) GetActionStr() (action sqlparser.DDLAction, actionSt case sqlparser.DropDDLAction: return action, sqlparser.DropStr, nil } - return action, "", fmt.Errorf("Unsupported online DDL action. SQL=%s", onlineDDL.SQL) + return action, "", vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported online DDL action. SQL=%s", onlineDDL.SQL) } // GetRevertUUID works when this migration is a revert for another migration. It returns the UUID @@ -373,7 +375,7 @@ func (onlineDDL *OnlineDDL) GetRevertUUID() (uuid string, err error) { return revert.UUID, nil } } - return "", fmt.Errorf("Not a Revert DDL: '%s'", onlineDDL.SQL) + return "", vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "not a Revert DDL: '%s'", onlineDDL.SQL) } // ToString returns a simple string representation of this instance @@ -384,15 +386,15 @@ func (onlineDDL *OnlineDDL) ToString() string { // WriteTopo writes this online DDL to given topo connection, based on basePath and and this DDL's UUID func (onlineDDL *OnlineDDL) WriteTopo(ctx context.Context, conn topo.Conn, basePath string) error { if onlineDDL.UUID == "" { - return fmt.Errorf("onlineDDL UUID not found; keyspace=%s, sql=%s", onlineDDL.Keyspace, onlineDDL.SQL) + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "onlineDDL UUID not found; keyspace=%s, sql=%s", onlineDDL.Keyspace, onlineDDL.SQL) } bytes, err := onlineDDL.ToJSON() if err != nil { - return fmt.Errorf("onlineDDL marshall error:%s, keyspace=%s, sql=%s", err.Error(), onlineDDL.Keyspace, onlineDDL.SQL) + return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "onlineDDL marshall error:%s, keyspace=%s, sql=%s", err.Error(), onlineDDL.Keyspace, onlineDDL.SQL) } _, err = conn.Create(ctx, fmt.Sprintf("%s/%s", basePath, onlineDDL.UUID), bytes) if err != nil { - return fmt.Errorf("onlineDDL topo create error:%s, keyspace=%s, sql=%s", err.Error(), onlineDDL.Keyspace, onlineDDL.SQL) + return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "onlineDDL topo create error:%s, keyspace=%s, sql=%s", err.Error(), onlineDDL.Keyspace, onlineDDL.SQL) } return nil } From 942ad9ba4b14a70f1d3c2ef38dea601589d2dbef Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 20 Apr 2021 14:54:21 +0300 Subject: [PATCH 50/64] patch OS fo rupgrade test Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- .github/workflows/cluster_endtoend_upgrade.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/cluster_endtoend_upgrade.yml b/.github/workflows/cluster_endtoend_upgrade.yml index 336b175ac06..85528a34425 100644 --- a/.github/workflows/cluster_endtoend_upgrade.yml +++ b/.github/workflows/cluster_endtoend_upgrade.yml @@ -13,6 +13,16 @@ jobs: with: go-version: 1.15 + - name: Tune the OS + run: | + echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range + + # TEMPORARY WHILE GITHUB FIXES THIS https://github.com/actions/virtual-environments/issues/3185 + - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file + run: | + echo -e "$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)\t$(hostname -f) $(hostname -s)" | sudo tee -a /etc/hosts + # DON'T FORGET TO REMOVE CODE ABOVE WHEN ISSUE IS ADRESSED! + - name: Check out v9.0.0 uses: actions/checkout@v2 with: From f027d4608dfa52a8094657a60ecb995b4ff7fcbd Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Tue, 20 Apr 2021 20:48:12 +0300 Subject: [PATCH 51/64] more verbose execution of vtctlclient Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/test/endtoend/versionupgrade/upgrade_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/test/endtoend/versionupgrade/upgrade_test.go b/go/test/endtoend/versionupgrade/upgrade_test.go index f341bf792e0..ea105c4c995 100644 --- a/go/test/endtoend/versionupgrade/upgrade_test.go +++ b/go/test/endtoend/versionupgrade/upgrade_test.go @@ -150,8 +150,8 @@ func TestDeploySchema(t *testing.T) { { sqlQuery := fmt.Sprintf(createTable, tableName) - _, err := clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, sqlQuery, "") - require.Nil(t, err) + result, err := clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, sqlQuery, "") + require.Nil(t, err, result) } for i := range clusterInstance.Keyspaces[0].Shards { sqlQuery := fmt.Sprintf(insertIntoTable, tableName) From 051bb2a9ca15390ddfce4f1de79d0918e0dddc54 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Wed, 21 Apr 2021 09:11:40 +0300 Subject: [PATCH 52/64] -skip_preflight must be v9.0.0 compatible Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- .../endtoend/cluster/vtctlclient_process.go | 18 +++++++++++++----- .../declarative/onlineddl_declarative_test.go | 2 +- .../onlineddl/ghost/onlineddl_ghost_test.go | 2 +- .../onlineddl/revert/onlineddl_revert_test.go | 2 +- .../singleton/onlineddl_singleton_test.go | 4 ++-- .../onlineddl/vrepl/onlineddl_vrepl_test.go | 2 +- .../onlineddl_vrepl_mini_stress_test.go | 2 +- .../endtoend/versionupgrade/upgrade_test.go | 2 +- 8 files changed, 21 insertions(+), 13 deletions(-) diff --git a/go/test/endtoend/cluster/vtctlclient_process.go b/go/test/endtoend/cluster/vtctlclient_process.go index ce0b75faaf0..beaa704d5ef 100644 --- a/go/test/endtoend/cluster/vtctlclient_process.go +++ b/go/test/endtoend/cluster/vtctlclient_process.go @@ -36,6 +36,12 @@ type VtctlClientProcess struct { ZoneName string } +// VtctlClientParams encapsulated params to provide if non-default +type VtctlClientParams struct { + DDLStrategy string + SkipPreflight bool +} + // InitShardMaster executes vtctlclient command to make one of tablet as master func (vtctlclient *VtctlClientProcess) InitShardMaster(Keyspace string, Shard string, Cell string, TabletUID int) (err error) { output, err := vtctlclient.ExecuteCommandWithOutput( @@ -50,14 +56,16 @@ func (vtctlclient *VtctlClientProcess) InitShardMaster(Keyspace string, Shard st } // ApplySchemaWithOutput applies SQL schema to the keyspace -func (vtctlclient *VtctlClientProcess) ApplySchemaWithOutput(Keyspace string, SQL string, ddlStrategy string) (result string, err error) { +func (vtctlclient *VtctlClientProcess) ApplySchemaWithOutput(Keyspace string, SQL string, params VtctlClientParams) (result string, err error) { args := []string{ "ApplySchema", - "-skip_preflight", "-sql", SQL, } - if ddlStrategy != "" { - args = append(args, "-ddl_strategy", ddlStrategy) + if params.DDLStrategy != "" { + args = append(args, "-ddl_strategy", params.DDLStrategy) + } + if params.SkipPreflight { + args = append(args, "-skip_preflight") } args = append(args, Keyspace) return vtctlclient.ExecuteCommandWithOutput(args...) @@ -65,7 +73,7 @@ func (vtctlclient *VtctlClientProcess) ApplySchemaWithOutput(Keyspace string, SQ // ApplySchema applies SQL schema to the keyspace func (vtctlclient *VtctlClientProcess) ApplySchema(Keyspace string, SQL string) error { - message, err := vtctlclient.ApplySchemaWithOutput(Keyspace, SQL, "direct") + message, err := vtctlclient.ApplySchemaWithOutput(Keyspace, SQL, VtctlClientParams{DDLStrategy: "direct"}) return vterrors.Wrap(err, message) } diff --git a/go/test/endtoend/onlineddl/declarative/onlineddl_declarative_test.go b/go/test/endtoend/onlineddl/declarative/onlineddl_declarative_test.go index 3ac09e84687..0090dbbb78d 100644 --- a/go/test/endtoend/onlineddl/declarative/onlineddl_declarative_test.go +++ b/go/test/endtoend/onlineddl/declarative/onlineddl_declarative_test.go @@ -415,7 +415,7 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str } } else { var err error - uuid, err = clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, alterStatement, ddlStrategy) + uuid, err = clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, alterStatement, cluster.VtctlClientParams{DDLStrategy: ddlStrategy}) assert.NoError(t, err) } uuid = strings.TrimSpace(uuid) diff --git a/go/test/endtoend/onlineddl/ghost/onlineddl_ghost_test.go b/go/test/endtoend/onlineddl/ghost/onlineddl_ghost_test.go index 15cea07875a..44842a6cc0d 100644 --- a/go/test/endtoend/onlineddl/ghost/onlineddl_ghost_test.go +++ b/go/test/endtoend/onlineddl/ghost/onlineddl_ghost_test.go @@ -315,7 +315,7 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str } } else { var err error - uuid, err = clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, sqlQuery, ddlStrategy) + uuid, err = clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, sqlQuery, cluster.VtctlClientParams{DDLStrategy: ddlStrategy}) assert.NoError(t, err) } uuid = strings.TrimSpace(uuid) diff --git a/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go b/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go index da4a3348257..7c6046ccca5 100644 --- a/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go +++ b/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go @@ -471,7 +471,7 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str } } else { var err error - uuid, err = clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, alterStatement, ddlStrategy) + uuid, err = clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, alterStatement, cluster.VtctlClientParams{DDLStrategy: ddlStrategy}) assert.NoError(t, err) } uuid = strings.TrimSpace(uuid) diff --git a/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go b/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go index c07be27c225..71db3ff4fe7 100644 --- a/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go +++ b/go/test/endtoend/onlineddl/singleton/onlineddl_singleton_test.go @@ -256,7 +256,7 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str } } } else { - output, err := clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, alterStatement, ddlStrategy) + output, err := clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, alterStatement, cluster.VtctlClientParams{DDLStrategy: ddlStrategy, SkipPreflight: true}) if expectError == "" { assert.NoError(t, err) uuid = output @@ -291,7 +291,7 @@ func testRevertMigration(t *testing.T, revertUUID string, executeStrategy string } } } else { - output, err := clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, revertQuery, onlineDDLStrategy) + output, err := clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, revertQuery, cluster.VtctlClientParams{DDLStrategy: onlineDDLStrategy, SkipPreflight: true}) if expectError == "" { assert.NoError(t, err) uuid = output diff --git a/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go b/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go index 2d9a3efeb40..9e014079cc9 100644 --- a/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go +++ b/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go @@ -396,7 +396,7 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str } } else { var err error - uuid, err = clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, sqlQuery, ddlStrategy) + uuid, err = clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, sqlQuery, cluster.VtctlClientParams{DDLStrategy: ddlStrategy}) assert.NoError(t, err) } uuid = strings.TrimSpace(uuid) diff --git a/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go b/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go index 811c2f11480..4de900ec5aa 100644 --- a/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go +++ b/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go @@ -295,7 +295,7 @@ func testOnlineDDLStatement(t *testing.T, alterStatement string, ddlStrategy str } } else { var err error - uuid, err = clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, alterStatement, ddlStrategy) + uuid, err = clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, alterStatement, cluster.VtctlClientParams{DDLStrategy: ddlStrategy}) assert.NoError(t, err) } uuid = strings.TrimSpace(uuid) diff --git a/go/test/endtoend/versionupgrade/upgrade_test.go b/go/test/endtoend/versionupgrade/upgrade_test.go index ea105c4c995..f95ce9ea4f4 100644 --- a/go/test/endtoend/versionupgrade/upgrade_test.go +++ b/go/test/endtoend/versionupgrade/upgrade_test.go @@ -150,7 +150,7 @@ func TestDeploySchema(t *testing.T) { { sqlQuery := fmt.Sprintf(createTable, tableName) - result, err := clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, sqlQuery, "") + result, err := clusterInstance.VtctlclientProcess.ApplySchemaWithOutput(keyspaceName, sqlQuery, cluster.VtctlClientParams{DDLStrategy: ""}) require.Nil(t, err, result) } for i := range clusterInstance.Keyspaces[0].Shards { From 86f4b27257d867bf035fb2507955bbdc86677f88 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Wed, 21 Apr 2021 10:53:34 +0300 Subject: [PATCH 53/64] empty commit to kick CI Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> From 10d95ad2f9eaf8ee4fb622b8ca9300e73e9a4f7d Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Wed, 21 Apr 2021 12:23:23 +0300 Subject: [PATCH 54/64] empty commit to kick CI Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> From 09e3e9081b43c329a492bbcfa917704f1a8623b9 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 22 Apr 2021 09:20:54 +0300 Subject: [PATCH 55/64] more verbose logging on 'xtrabackup failed with error' Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/mysqlctl/xtrabackupengine.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/vt/mysqlctl/xtrabackupengine.go b/go/vt/mysqlctl/xtrabackupengine.go index 0c4c5d938c0..a87b6e9beee 100644 --- a/go/vt/mysqlctl/xtrabackupengine.go +++ b/go/vt/mysqlctl/xtrabackupengine.go @@ -359,7 +359,7 @@ func (be *XtrabackupEngine) backupFiles(ctx context.Context, params BackupParams sterrOutput := stderrBuilder.String() if err := backupCmd.Wait(); err != nil { - return replicationPosition, vterrors.Wrap(err, "xtrabackup failed with error") + return replicationPosition, vterrors.Wrap(err, fmt.Sprintf("xtrabackup failed with error. Output=%s", sterrOutput)) } replicationPosition, rerr := findReplicationPosition(sterrOutput, flavor, params.Logger) From 86fa94b18f535643bbb2f8388c1e3679986a1091 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 22 Apr 2021 11:05:30 +0300 Subject: [PATCH 56/64] experiment: sleep 20sec Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/test/endtoend/backup/vtctlbackup/backup_utils.go | 1 + 1 file changed, 1 insertion(+) diff --git a/go/test/endtoend/backup/vtctlbackup/backup_utils.go b/go/test/endtoend/backup/vtctlbackup/backup_utils.go index 7ca79b2b896..cb530ea05b2 100644 --- a/go/test/endtoend/backup/vtctlbackup/backup_utils.go +++ b/go/test/endtoend/backup/vtctlbackup/backup_utils.go @@ -392,6 +392,7 @@ func testRestoreOldMaster(t *testing.T, method restoreMethod) { // insert data on master, wait for replica to get it verifyInitialReplication(t) + time.Sleep(20 * time.Second) // backup the replica err := localCluster.VtctlclientProcess.ExecuteCommand("Backup", replica1.Alias) require.Nil(t, err) From cab62e2d5361421b31ba62873d64ea71b8f3363b Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 22 Apr 2021 11:18:26 +0300 Subject: [PATCH 57/64] lower sleep Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/test/endtoend/backup/vtctlbackup/backup_utils.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/go/test/endtoend/backup/vtctlbackup/backup_utils.go b/go/test/endtoend/backup/vtctlbackup/backup_utils.go index cb530ea05b2..1c221d96b9b 100644 --- a/go/test/endtoend/backup/vtctlbackup/backup_utils.go +++ b/go/test/endtoend/backup/vtctlbackup/backup_utils.go @@ -392,7 +392,11 @@ func testRestoreOldMaster(t *testing.T, method restoreMethod) { // insert data on master, wait for replica to get it verifyInitialReplication(t) - time.Sleep(20 * time.Second) + // TODO: The following Sleep in introduced as it seems like the previous step doesn't fully complete, causing + // this test to be flaky. Sleep seems to solve the problem. Need to fix this in a better way and Wait for + // previous test to complete (suspicion: MySQL does not fully start) + time.Sleep(5 * time.Second) + // backup the replica err := localCluster.VtctlclientProcess.ExecuteCommand("Backup", replica1.Alias) require.Nil(t, err) From 54a472178f7737fb8e791e295d29ed8a785e0add Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 22 Apr 2021 11:53:16 +0300 Subject: [PATCH 58/64] 10 secs Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/test/endtoend/backup/vtctlbackup/backup_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/test/endtoend/backup/vtctlbackup/backup_utils.go b/go/test/endtoend/backup/vtctlbackup/backup_utils.go index 1c221d96b9b..d26f6e3c2fd 100644 --- a/go/test/endtoend/backup/vtctlbackup/backup_utils.go +++ b/go/test/endtoend/backup/vtctlbackup/backup_utils.go @@ -395,7 +395,7 @@ func testRestoreOldMaster(t *testing.T, method restoreMethod) { // TODO: The following Sleep in introduced as it seems like the previous step doesn't fully complete, causing // this test to be flaky. Sleep seems to solve the problem. Need to fix this in a better way and Wait for // previous test to complete (suspicion: MySQL does not fully start) - time.Sleep(5 * time.Second) + time.Sleep(10 * time.Second) // backup the replica err := localCluster.VtctlclientProcess.ExecuteCommand("Backup", replica1.Alias) From 036cb43e61f1e17de7eab9ab81d3b4122b765342 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 22 Apr 2021 12:32:13 +0300 Subject: [PATCH 59/64] 20 secs Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/test/endtoend/backup/vtctlbackup/backup_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/test/endtoend/backup/vtctlbackup/backup_utils.go b/go/test/endtoend/backup/vtctlbackup/backup_utils.go index d26f6e3c2fd..0954740a7b7 100644 --- a/go/test/endtoend/backup/vtctlbackup/backup_utils.go +++ b/go/test/endtoend/backup/vtctlbackup/backup_utils.go @@ -395,7 +395,7 @@ func testRestoreOldMaster(t *testing.T, method restoreMethod) { // TODO: The following Sleep in introduced as it seems like the previous step doesn't fully complete, causing // this test to be flaky. Sleep seems to solve the problem. Need to fix this in a better way and Wait for // previous test to complete (suspicion: MySQL does not fully start) - time.Sleep(10 * time.Second) + time.Sleep(20 * time.Second) // backup the replica err := localCluster.VtctlclientProcess.ExecuteCommand("Backup", replica1.Alias) From 4512c319b6a0294a2903030ca3f330716f83250f Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 22 Apr 2021 13:05:00 +0300 Subject: [PATCH 60/64] 30 secs Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/test/endtoend/backup/vtctlbackup/backup_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/test/endtoend/backup/vtctlbackup/backup_utils.go b/go/test/endtoend/backup/vtctlbackup/backup_utils.go index 0954740a7b7..6310b894e5f 100644 --- a/go/test/endtoend/backup/vtctlbackup/backup_utils.go +++ b/go/test/endtoend/backup/vtctlbackup/backup_utils.go @@ -395,7 +395,7 @@ func testRestoreOldMaster(t *testing.T, method restoreMethod) { // TODO: The following Sleep in introduced as it seems like the previous step doesn't fully complete, causing // this test to be flaky. Sleep seems to solve the problem. Need to fix this in a better way and Wait for // previous test to complete (suspicion: MySQL does not fully start) - time.Sleep(20 * time.Second) + time.Sleep(30 * time.Second) // backup the replica err := localCluster.VtctlclientProcess.ExecuteCommand("Backup", replica1.Alias) From 71d576fb25b54c83d4ec7ba6611dae84ca8cb2d5 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 22 Apr 2021 13:06:43 +0300 Subject: [PATCH 61/64] sleep on terminatedRestore Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/test/endtoend/backup/vtctlbackup/backup_utils.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/go/test/endtoend/backup/vtctlbackup/backup_utils.go b/go/test/endtoend/backup/vtctlbackup/backup_utils.go index 6310b894e5f..8be8487be0f 100644 --- a/go/test/endtoend/backup/vtctlbackup/backup_utils.go +++ b/go/test/endtoend/backup/vtctlbackup/backup_utils.go @@ -395,7 +395,7 @@ func testRestoreOldMaster(t *testing.T, method restoreMethod) { // TODO: The following Sleep in introduced as it seems like the previous step doesn't fully complete, causing // this test to be flaky. Sleep seems to solve the problem. Need to fix this in a better way and Wait for // previous test to complete (suspicion: MySQL does not fully start) - time.Sleep(30 * time.Second) + time.Sleep(20 * time.Second) // backup the replica err := localCluster.VtctlclientProcess.ExecuteCommand("Backup", replica1.Alias) @@ -493,6 +493,11 @@ func terminatedRestore(t *testing.T) { // insert data on master, wait for replica to get it verifyInitialReplication(t) + // TODO: The following Sleep in introduced as it seems like the previous step doesn't fully complete, causing + // this test to be flaky. Sleep seems to solve the problem. Need to fix this in a better way and Wait for + // previous test to complete (suspicion: MySQL does not fully start) + time.Sleep(20 * time.Second) + // backup the replica err := localCluster.VtctlclientProcess.ExecuteCommand("Backup", replica1.Alias) require.Nil(t, err) From 7397b8b9b69becfa681e5af8c3917bc862a205f8 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 22 Apr 2021 13:28:05 +0300 Subject: [PATCH 62/64] refactor switch statement per review Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/schema/online_ddl.go | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/go/vt/schema/online_ddl.go b/go/vt/schema/online_ddl.go index 1e1160dacfc..761d767a70a 100644 --- a/go/vt/schema/online_ddl.go +++ b/go/vt/schema/online_ddl.go @@ -150,6 +150,11 @@ func NewOnlineDDLs(keyspace string, ddlStmt sqlparser.DDLStatement, ddlStrategyS return nil } switch ddlStmt := ddlStmt.(type) { + case *sqlparser.CreateTable, *sqlparser.AlterTable: + if err := appendOnlineDDL(ddlStmt.GetTable().Name.String(), ddlStmt); err != nil { + return nil, err + } + return onlineDDLs, nil case *sqlparser.DropTable: tables := ddlStmt.GetFromTables() for _, table := range tables { @@ -159,17 +164,9 @@ func NewOnlineDDLs(keyspace string, ddlStmt sqlparser.DDLStatement, ddlStrategyS } } return onlineDDLs, nil - case *sqlparser.CreateTable: - // No particular treatment for CreateTable. "case" is here to acknowledge this is a supported type - case *sqlparser.AlterTable: - // No particular treatment for AlterTable. "case" is here to acknowledge this is a supported type default: return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported statement for Online DDL: %v", sqlparser.String(ddlStmt)) } - if err := appendOnlineDDL(ddlStmt.GetTable().Name.String(), ddlStmt); err != nil { - return nil, err - } - return onlineDDLs, nil } // NewOnlineDDL creates a schema change request with self generated UUID and RequestTime From 34e0a4c627962f1caca84b9aac5f26f7210c4671 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 22 Apr 2021 14:37:42 +0300 Subject: [PATCH 63/64] fixed race condition Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/vt/vtexplain/vtexplain.go | 3 ++- go/vt/vtexplain/vtexplain_vttablet.go | 21 +++++++++++++++++---- go/vt/vtexplain/vtexplain_vttablet_test.go | 7 ++++--- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/go/vt/vtexplain/vtexplain.go b/go/vt/vtexplain/vtexplain.go index cf97a324528..3dee8d40515 100644 --- a/go/vt/vtexplain/vtexplain.go +++ b/go/vt/vtexplain/vtexplain.go @@ -155,10 +155,11 @@ func Init(vSchemaStr, sqlSchema, ksShardMapStr string, opts *Options) error { return fmt.Errorf("parseSchema: %v", err) } - globalTabletEnv, err = newTabletEnvironment(parsedDDLs, opts) + tabletEnv, err := newTabletEnvironment(parsedDDLs, opts) if err != nil { return fmt.Errorf("initTabletEnvironment: %v", err) } + setGlobalTabletEnv(tabletEnv) err = initVtgateExecutor(vSchemaStr, ksShardMapStr, opts) if err != nil { diff --git a/go/vt/vtexplain/vtexplain_vttablet.go b/go/vt/vtexplain/vtexplain_vttablet.go index 7f1c76f2c0e..f05c9653ede 100644 --- a/go/vt/vtexplain/vtexplain_vttablet.go +++ b/go/vt/vtexplain/vtexplain_vttablet.go @@ -54,10 +54,23 @@ type tabletEnv struct { var ( // time simulator - batchTime *sync2.Batcher - globalTabletEnv *tabletEnv + batchTime *sync2.Batcher + globalTabletEnv *tabletEnv + globalTabletEnvMu sync.Mutex ) +func setGlobalTabletEnv(env *tabletEnv) { + globalTabletEnvMu.Lock() + defer globalTabletEnvMu.Unlock() + globalTabletEnv = env +} + +func getGlobalTabletEnv() *tabletEnv { + globalTabletEnvMu.Lock() + defer globalTabletEnvMu.Unlock() + return globalTabletEnv +} + // explainTablet is the query service that simulates a tablet. // // To avoid needing to boilerplate implement the unneeded portions of the @@ -458,7 +471,7 @@ func (t *explainTablet) HandleQuery(c *mysql.Conn, query string, callback func(* } // return the pre-computed results for any schema introspection queries - result, ok := globalTabletEnv.schemaQueries[query] + result, ok := getGlobalTabletEnv().schemaQueries[query] if ok { return callback(result) } @@ -491,7 +504,7 @@ func (t *explainTablet) HandleQuery(c *mysql.Conn, query string, callback func(* colTypeMap := map[string]querypb.Type{} for _, table := range tables { tableName := sqlparser.String(table) - columns, exists := globalTabletEnv.tableColumns[tableName] + columns, exists := getGlobalTabletEnv().tableColumns[tableName] if !exists && tableName != "" && tableName != "dual" { return fmt.Errorf("unable to resolve table name %s", tableName) } diff --git a/go/vt/vtexplain/vtexplain_vttablet_test.go b/go/vt/vtexplain/vtexplain_vttablet_test.go index 60e5b457915..866bb3efc3d 100644 --- a/go/vt/vtexplain/vtexplain_vttablet_test.go +++ b/go/vt/vtexplain/vtexplain_vttablet_test.go @@ -67,9 +67,10 @@ create table test_partitioned ( if err != nil { t.Fatalf("parseSchema: %v", err) } - - globalTabletEnv, _ = newTabletEnvironment(ddls, defaultTestOpts()) - + { + tabletEnv, _ := newTabletEnvironment(ddls, defaultTestOpts()) + setGlobalTabletEnv(tabletEnv) + } tablet := newTablet(defaultTestOpts(), &topodatapb.Tablet{ Keyspace: "test_keyspace", Shard: "-80", From 5bb8ffdb6e255b6b0b48f88385a7573b3f9e8171 Mon Sep 17 00:00:00 2001 From: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Date: Thu, 22 Apr 2021 14:38:06 +0300 Subject: [PATCH 64/64] reduce sleep time Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> --- go/test/endtoend/backup/vtctlbackup/backup_utils.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/test/endtoend/backup/vtctlbackup/backup_utils.go b/go/test/endtoend/backup/vtctlbackup/backup_utils.go index 8be8487be0f..896e6e4038d 100644 --- a/go/test/endtoend/backup/vtctlbackup/backup_utils.go +++ b/go/test/endtoend/backup/vtctlbackup/backup_utils.go @@ -395,7 +395,7 @@ func testRestoreOldMaster(t *testing.T, method restoreMethod) { // TODO: The following Sleep in introduced as it seems like the previous step doesn't fully complete, causing // this test to be flaky. Sleep seems to solve the problem. Need to fix this in a better way and Wait for // previous test to complete (suspicion: MySQL does not fully start) - time.Sleep(20 * time.Second) + time.Sleep(5 * time.Second) // backup the replica err := localCluster.VtctlclientProcess.ExecuteCommand("Backup", replica1.Alias) @@ -496,7 +496,7 @@ func terminatedRestore(t *testing.T) { // TODO: The following Sleep in introduced as it seems like the previous step doesn't fully complete, causing // this test to be flaky. Sleep seems to solve the problem. Need to fix this in a better way and Wait for // previous test to complete (suspicion: MySQL does not fully start) - time.Sleep(20 * time.Second) + time.Sleep(5 * time.Second) // backup the replica err := localCluster.VtctlclientProcess.ExecuteCommand("Backup", replica1.Alias)