From df90a4cd6e17165581572d30ee77612ec905f05b Mon Sep 17 00:00:00 2001 From: Matt Jibson Date: Wed, 13 Feb 2019 15:42:33 -0500 Subject: [PATCH 1/2] sql/pgwire/hba: parse options --- pkg/sql/pgwire/hba/Makefile | 3 +- pkg/sql/pgwire/hba/conf.go | 4972 +++++++++++++++++------------ pkg/sql/pgwire/hba/conf.rl | 31 +- pkg/sql/pgwire/hba/testdata/parse | 6 + 4 files changed, 2929 insertions(+), 2083 deletions(-) diff --git a/pkg/sql/pgwire/hba/Makefile b/pkg/sql/pgwire/hba/Makefile index a88de356b5a0..b36841d269e7 100644 --- a/pkg/sql/pgwire/hba/Makefile +++ b/pkg/sql/pgwire/hba/Makefile @@ -7,5 +7,4 @@ conf.go: conf.rl echo "// GENERATED FILE DO NOT EDIT"; \ cat conf.go) > conf.go.tmp mv conf.go.tmp conf.go - ../../../../bin/gofmt -w -s conf.go - ../../../../bin/goimports -w conf.go + ../../../../bin/crlfmt -w conf.go >/dev/null diff --git a/pkg/sql/pgwire/hba/conf.go b/pkg/sql/pgwire/hba/conf.go index 1276226f4a16..8a0f754fb360 100644 --- a/pkg/sql/pgwire/hba/conf.go +++ b/pkg/sql/pgwire/hba/conf.go @@ -2,7 +2,6 @@ // GENERATED FILE DO NOT EDIT //line conf.rl:1 - // Copyright 2018 The Cockroach Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,156 +33,181 @@ func Parse(input string) (*Conf, error) { // To ease parsing, ensure a newline at EOF. data := []rune(input + "\n") - //line conf.rl:33 - //line conf.rl:34 - //line conf.go:40 +//line conf.rl:33 + +//line conf.rl:34 +//line conf.go:40 var _scanner_actions []byte = []byte{ 0, 1, 0, 1, 4, 1, 9, 1, 13, - 1, 14, 2, 1, 3, 2, 2, 3, - 2, 2, 8, 2, 2, 12, 2, 4, - 0, 2, 5, 7, 2, 6, 7, 2, - 14, 15, 3, 0, 1, 3, 3, 0, - 2, 3, 3, 0, 2, 12, 3, 1, - 2, 3, 3, 1, 3, 0, 3, 1, - 3, 2, 3, 1, 3, 10, 3, 1, - 3, 11, 3, 2, 3, 0, 3, 2, - 3, 1, 3, 2, 3, 10, 3, 2, - 3, 11, 3, 2, 8, 12, 4, 0, - 1, 2, 3, 4, 0, 1, 3, 11, - 4, 0, 2, 3, 1, 4, 0, 2, - 3, 10, 4, 0, 2, 3, 11, 4, - 1, 2, 3, 0, 4, 1, 2, 3, - 10, 4, 1, 2, 3, 11, 4, 1, - 3, 0, 2, 4, 1, 3, 0, 11, - 4, 1, 3, 2, 0, 4, 1, 3, - 2, 11, 4, 1, 3, 10, 0, 4, - 1, 3, 10, 11, 4, 2, 3, 0, - 1, 4, 2, 3, 0, 10, 4, 2, - 3, 0, 11, 4, 2, 3, 1, 10, - 4, 2, 3, 1, 11, 4, 2, 3, - 10, 11, 4, 2, 3, 10, 12, 4, - 2, 3, 11, 8, 4, 2, 3, 11, - 12, 4, 5, 7, 2, 12, 4, 6, - 7, 2, 12, 5, 0, 1, 2, 3, - 10, 5, 0, 1, 2, 3, 11, 5, - 0, 2, 3, 1, 11, 5, 0, 2, - 3, 10, 11, 5, 0, 2, 3, 10, - 12, 5, 0, 2, 3, 11, 12, 5, - 1, 2, 3, 0, 11, 5, 1, 2, - 3, 10, 11, 5, 1, 2, 3, 10, - 12, 5, 1, 2, 3, 11, 12, 5, - 1, 3, 0, 2, 11, 5, 1, 3, - 10, 0, 11, 5, 1, 3, 10, 2, - 11, 5, 1, 3, 10, 2, 12, 5, - 1, 3, 11, 2, 12, 5, 2, 3, - 0, 1, 10, 5, 2, 3, 0, 1, - 11, 5, 2, 3, 10, 0, 11, 5, - 2, 3, 10, 1, 11, 5, 2, 3, - 10, 11, 12, 5, 2, 3, 11, 5, - 7, 6, 0, 1, 2, 3, 10, 11, - 6, 0, 1, 2, 3, 10, 12, 6, - 0, 1, 2, 3, 11, 12, 6, 0, - 2, 3, 10, 1, 11, 6, 0, 2, - 3, 10, 11, 12, 6, 1, 2, 3, - 10, 11, 12, 6, 1, 3, 10, 0, - 2, 11, 6, 1, 3, 10, 2, 0, - 11, 6, 1, 3, 10, 11, 2, 12, - 6, 2, 3, 10, 0, 1, 11, 7, - 0, 1, 2, 3, 10, 11, 12, + 1, 14, 1, 15, 2, 1, 3, 2, + 2, 3, 2, 2, 8, 2, 2, 12, + 2, 4, 0, 2, 5, 7, 2, 6, + 7, 2, 15, 16, 3, 0, 1, 3, + 3, 0, 2, 3, 3, 0, 2, 12, + 3, 1, 2, 3, 3, 1, 3, 0, + 3, 1, 3, 2, 3, 1, 3, 10, + 3, 1, 3, 11, 3, 2, 3, 0, + 3, 2, 3, 1, 3, 2, 3, 10, + 3, 2, 3, 11, 3, 2, 8, 12, + 3, 2, 12, 13, 4, 0, 1, 2, + 3, 4, 0, 1, 3, 11, 4, 0, + 2, 3, 1, 4, 0, 2, 3, 10, + 4, 0, 2, 3, 11, 4, 1, 2, + 3, 0, 4, 1, 2, 3, 10, 4, + 1, 2, 3, 11, 4, 1, 3, 0, + 2, 4, 1, 3, 0, 11, 4, 1, + 3, 2, 0, 4, 1, 3, 2, 11, + 4, 1, 3, 10, 0, 4, 1, 3, + 10, 11, 4, 2, 3, 0, 1, 4, + 2, 3, 0, 10, 4, 2, 3, 0, + 11, 4, 2, 3, 1, 10, 4, 2, + 3, 1, 11, 4, 2, 3, 10, 11, + 4, 2, 3, 10, 12, 4, 2, 3, + 11, 8, 4, 2, 3, 11, 12, 4, + 2, 3, 11, 13, 4, 5, 7, 2, + 12, 4, 6, 7, 2, 12, 5, 0, + 1, 2, 3, 10, 5, 0, 1, 2, + 3, 11, 5, 0, 2, 3, 1, 11, + 5, 0, 2, 3, 10, 11, 5, 0, + 2, 3, 10, 12, 5, 0, 2, 3, + 11, 12, 5, 1, 2, 3, 0, 11, + 5, 1, 2, 3, 10, 11, 5, 1, + 2, 3, 10, 12, 5, 1, 2, 3, + 11, 12, 5, 1, 3, 0, 2, 11, + 5, 1, 3, 10, 0, 11, 5, 1, + 3, 10, 2, 11, 5, 1, 3, 10, + 2, 12, 5, 1, 3, 11, 2, 12, + 5, 2, 3, 0, 1, 10, 5, 2, + 3, 0, 1, 11, 5, 2, 3, 10, + 0, 11, 5, 2, 3, 10, 1, 11, + 5, 2, 3, 10, 11, 12, 5, 2, + 3, 11, 5, 7, 6, 0, 1, 2, + 3, 10, 11, 6, 0, 1, 2, 3, + 10, 12, 6, 0, 1, 2, 3, 11, + 12, 6, 0, 2, 3, 10, 1, 11, + 6, 0, 2, 3, 10, 11, 12, 6, + 1, 2, 3, 10, 11, 12, 6, 1, + 3, 10, 0, 2, 11, 6, 1, 3, + 10, 2, 0, 11, 6, 1, 3, 10, + 11, 2, 12, 6, 2, 3, 10, 0, + 1, 11, 7, 0, 1, 2, 3, 10, + 11, 12, } var _scanner_key_offsets []int16 = []int16{ 0, 0, 1, 2, 3, 4, 6, 11, 14, 19, 24, 27, 32, 46, 53, 58, - 61, 67, 71, 72, 78, 87, 91, 95, - 97, 101, 115, 122, 128, 136, 143, 147, - 153, 159, 165, 180, 181, 184, 188, 191, - 196, 202, 208, 214, 219, 225, 231, 232, - 240, 245, 249, 256, 261, 263, 267, 282, - 290, 296, 306, 311, 316, 319, 324, 339, - 347, 354, 362, 367, 371, 377, 384, 391, - 398, 414, 423, 429, 434, 441, 448, 455, - 461, 468, 476, 484, 492, 499, 507, 515, - 522, 533, 539, 545, 549, 555, 571, 579, - 587, 596, 602, 609, 616, 618, 625, 641, - 648, 654, 661, 669, 677, 685, 702, 712, - 717, 722, 725, 730, 745, 752, 759, 768, - 775, 782, 790, 798, 805, 810, 816, 822, - 828, 834, 840, 845, 849, 855, 870, 871, - 874, 878, 881, 886, 892, 898, 904, 909, - 915, 921, 922, 930, 935, 939, 946, 951, - 953, 957, 963, 967, 973, 980, 987, 994, - 1000, 1007, 1014, 1019, 1023, 1029, 1036, 1043, - 1050, 1056, 1061, 1068, 1084, 1093, 1099, 1104, - 1111, 1118, 1125, 1131, 1138, 1146, 1154, 1162, - 1169, 1177, 1185, 1192, 1203, 1209, 1215, 1219, - 1225, 1241, 1249, 1257, 1266, 1272, 1290, 1300, - 1311, 1329, 1339, 1350, 1362, 1375, 1383, 1391, - 1408, 1426, 1438, 1451, 1467, 1479, 1487, 1495, - 1512, 1530, 1549, 1563, 1578, 1585, 1591, 1597, - 1604, 1611, 1618, 1636, 1641, 1648, 1664, 1666, - 1667, 1670, 1687, 1696, 1706, 1723, 1732, 1743, - 1754, 1767, 1773, 1781, 1789, 1805, 1823, 1832, - 1843, 1855, 1870, 1881, 1888, 1895, 1911, 1928, - 1946, 1959, 1974, 1978, 1981, 1986, 1992, 1998, - 2004, 2021, 2025, 2031, 2046, 2054, 2059, 2063, - 2070, 2075, 2082, 2101, 2108, 2114, 2121, 2128, - 2136, 2144, 2152, 2159, 2167, 2175, 2183, 2191, - 2199, 2218, 2222, 2239, 2243, 2249, 2254, 2260, - 2266, 2270, 2274, 2278, 2284, 2289, 2295, 2301, - 2305, 2309, 2313, 2317, 2327, 2338, 2355, 2365, - 2377, 2389, 2403, 2410, 2419, 2428, 2445, 2464, - 2473, 2485, 2498, 2514, 2526, 2534, 2542, 2559, - 2577, 2595, 2609, 2625, 2629, 2633, 2639, 2644, - 2650, 2656, 2661, 2667, 2673, 2677, 2681, 2685, - 2691, 2696, 2702, 2707, 2713, 2719, 2725, 2742, - 2746, 2756, 2767, 2779, 2792, 2800, 2808, 2825, - 2843, 2849, 2855, 2861, 2867, 2873, 2879, 2885, - 2891, 2897, 2903, 2909, 2913, 2917, 2921, 2931, - 2936, 2942, 2948, 2954, 2960, 2966, 2972, 2978, - 2984, 2995, 3012, 3022, 3034, 3041, 3046, 3053, - 3060, 3067, 3073, 3080, 3092, 3097, 3102, 3116, - 3123, 3132, 3141, 3158, 3165, 3172, 3181, 3200, - 3209, 3221, 3234, 3250, 3260, 3263, 3268, 3280, - 3295, 3303, 3311, 3328, 3346, 3364, 3378, 3394, - 3401, 3409, 3417, 3424, 3425, 3429, 3434, 3438, - 3440, 3449, 3455, 3466, 3472, 3478, 3482, 3488, - 3504, 3512, 3520, 3529, 3536, 3543, 3561, 3566, - 3571, 3576, 3581, 3588, 3594, 3601, 3608, 3613, - 3618, 3623, 3628, 3639, 3651, 3669, 3680, 3692, - 3705, 3719, 3728, 3737, 3755, 3774, 3787, 3801, - 3818, 3831, 3840, 3849, 3867, 3886, 3905, 3920, - 3936, 3943, 3950, 3957, 3963, 3970, 3977, 3983, - 3990, 3997, 4004, 4011, 4018, 4025, 4030, 4048, - 4053, 4060, 4066, 4073, 4080, 4091, 4103, 4116, - 4130, 4139, 4148, 4166, 4185, 4190, 4195, 4202, - 4209, 4214, 4219, 4224, 4231, 4237, 4244, 4251, - 4258, 4265, 4272, 4279, 4286, 4293, 4300, 4307, - 4312, 4317, 4322, 4333, 4345, 4363, 4374, 4386, - 4399, 4413, 4422, 4431, 4449, 4468, 4481, 4495, - 4512, 4525, 4534, 4543, 4561, 4580, 4599, 4614, - 4630, 4637, 4644, 4651, 4656, 4662, 4667, 4672, - 4679, 4685, 4692, 4698, 4705, 4712, 4719, 4737, - 4748, 4760, 4778, 4789, 4801, 4814, 4828, 4837, - 4846, 4864, 4883, 4896, 4910, 4927, 4940, 4949, - 4958, 4976, 4995, 5014, 5029, 5045, 5052, 5059, - 5066, 5072, 5078, 5085, 5092, 5098, 5105, 5112, - 5119, 5126, 5133, 5140, 5147, 5154, 5161, 5166, - 5171, 5176, 5183, 5190, 5195, 5201, 5206, 5211, - 5218, 5225, 5232, 5239, 5241, 5248, 5255, 5262, - 5268, 5275, 5283, 5291, 5299, 5306, 5310, 5315, - 5319, 5323, 5329, 5334, 5340, 5345, 5351, 5357, - 5363, 5380, 5390, 5401, 5418, 5428, 5440, 5447, - 5459, 5464, 5469, 5483, 5490, 5499, 5508, 5525, - 5532, 5539, 5548, 5567, 5576, 5582, 5594, 5607, - 5623, 5633, 5636, 5641, 5653, 5668, 5676, 5684, - 5701, 5719, 5737, 5751, 5767, 5773, 5779, 5785, - 5790, 5795, 5801, 5807, 5813, 5819, 5825, 5831, - 5837, 5843, 5849, 5855, 5861, 5865, 5869, 5873, - 5879, 5885, 5889, 5894, 5898, 5902, 5908, 5914, - 5921, 5929, 5937, 5944, 5949, 5955, 5961, 5966, - 5971, 5972, 5973, + 61, 67, 80, 81, 91, 100, 113, 119, + 131, 142, 152, 165, 174, 178, 182, 184, + 188, 202, 209, 215, 223, 239, 243, 256, + 272, 287, 302, 308, 314, 320, 335, 336, + 339, 343, 346, 351, 357, 363, 369, 374, + 380, 386, 387, 395, 400, 404, 411, 425, + 427, 431, 446, 454, 460, 470, 475, 480, + 483, 488, 503, 511, 518, 526, 541, 555, + 571, 586, 601, 606, 610, 616, 623, 630, + 637, 653, 662, 668, 673, 680, 693, 705, + 716, 730, 737, 754, 767, 785, 803, 810, + 816, 823, 831, 839, 847, 865, 879, 898, + 904, 910, 914, 920, 931, 950, 958, 966, + 975, 990, 1005, 1022, 1038, 1054, 1061, 1069, + 1077, 1084, 1100, 1106, 1113, 1120, 1122, 1133, + 1143, 1157, 1164, 1182, 1194, 1211, 1228, 1235, + 1241, 1248, 1256, 1264, 1272, 1291, 1304, 1322, + 1327, 1332, 1335, 1340, 1350, 1368, 1375, 1382, + 1391, 1407, 1421, 1438, 1454, 1470, 1477, 1485, + 1493, 1500, 1515, 1520, 1526, 1532, 1538, 1544, + 1550, 1555, 1559, 1565, 1580, 1581, 1584, 1588, + 1591, 1596, 1602, 1608, 1614, 1619, 1625, 1631, + 1632, 1640, 1645, 1649, 1656, 1670, 1672, 1676, + 1682, 1686, 1692, 1699, 1706, 1713, 1719, 1726, + 1733, 1738, 1742, 1748, 1755, 1762, 1769, 1775, + 1780, 1787, 1803, 1812, 1818, 1823, 1830, 1843, + 1855, 1866, 1880, 1887, 1902, 1916, 1932, 1947, + 1963, 1970, 1976, 1983, 1991, 1999, 2007, 2022, + 2027, 2033, 2038, 2045, 2051, 2058, 2065, 2070, + 2075, 2080, 2087, 2093, 2100, 2107, 2112, 2117, + 2122, 2127, 2132, 2137, 2144, 2150, 2168, 2178, + 2189, 2207, 2217, 2228, 2240, 2253, 2265, 2278, + 2286, 2294, 2311, 2329, 2344, 2359, 2375, 2387, + 2400, 2416, 2428, 2436, 2444, 2461, 2479, 2498, + 2512, 2527, 2534, 2540, 2546, 2553, 2560, 2567, + 2585, 2590, 2597, 2613, 2615, 2616, 2619, 2636, + 2645, 2655, 2672, 2681, 2692, 2703, 2716, 2729, + 2741, 2749, 2757, 2773, 2791, 2807, 2821, 2837, + 2848, 2860, 2875, 2886, 2893, 2900, 2916, 2933, + 2951, 2964, 2979, 2983, 2986, 2991, 2997, 3003, + 3009, 3026, 3030, 3036, 3051, 3059, 3064, 3068, + 3075, 3089, 3100, 3110, 3124, 3131, 3152, 3166, + 3181, 3196, 3210, 3226, 3245, 3265, 3284, 3304, + 3317, 3324, 3330, 3337, 3344, 3364, 3379, 3395, + 3415, 3436, 3456, 3477, 3485, 3493, 3501, 3521, + 3526, 3544, 3555, 3567, 3585, 3596, 3608, 3621, + 3635, 3648, 3662, 3671, 3680, 3698, 3717, 3732, + 3748, 3765, 3778, 3792, 3809, 3822, 3831, 3840, + 3858, 3877, 3896, 3911, 3927, 3932, 3937, 3944, + 3950, 3957, 3964, 3970, 3977, 3984, 3989, 3993, + 3998, 4002, 4004, 4009, 4014, 4021, 4027, 4034, + 4040, 4047, 4054, 4061, 4079, 4084, 4095, 4107, + 4120, 4134, 4143, 4152, 4170, 4189, 4196, 4203, + 4210, 4217, 4224, 4231, 4238, 4245, 4252, 4259, + 4266, 4271, 4276, 4281, 4297, 4303, 4308, 4315, + 4328, 4340, 4351, 4365, 4372, 4379, 4385, 4392, + 4398, 4405, 4412, 4419, 4426, 4433, 4440, 4447, + 4454, 4471, 4489, 4500, 4512, 4527, 4542, 4559, + 4575, 4591, 4604, 4610, 4616, 4630, 4643, 4657, + 4666, 4675, 4693, 4701, 4709, 4718, 4737, 4752, + 4768, 4785, 4802, 4818, 4835, 4853, 4867, 4886, + 4890, 4896, 4907, 4926, 4947, 4969, 4986, 4995, + 5008, 5024, 5033, 5042, 5056, 5069, 5090, 5112, + 5131, 5146, 5162, 5177, 5184, 5192, 5200, 5208, + 5216, 5224, 5245, 5249, 5266, 5270, 5276, 5281, + 5287, 5293, 5297, 5301, 5305, 5311, 5316, 5322, + 5328, 5332, 5336, 5340, 5344, 5354, 5365, 5382, + 5392, 5404, 5416, 5430, 5444, 5457, 5466, 5475, + 5492, 5511, 5527, 5542, 5559, 5571, 5584, 5600, + 5612, 5620, 5628, 5645, 5663, 5681, 5695, 5711, + 5715, 5719, 5725, 5730, 5736, 5742, 5747, 5753, + 5759, 5763, 5767, 5771, 5777, 5782, 5788, 5793, + 5799, 5805, 5811, 5828, 5832, 5842, 5853, 5865, + 5878, 5886, 5894, 5911, 5929, 5935, 5941, 5947, + 5953, 5959, 5965, 5971, 5977, 5983, 5989, 5995, + 5999, 6003, 6007, 6022, 6027, 6033, 6039, 6045, + 6051, 6057, 6063, 6069, 6075, 6091, 6108, 6118, + 6130, 6146, 6160, 6177, 6193, 6209, 6221, 6226, + 6231, 6245, 6259, 6272, 6281, 6290, 6307, 6314, + 6321, 6330, 6349, 6365, 6380, 6397, 6413, 6428, + 6445, 6464, 6477, 6495, 6498, 6503, 6513, 6531, + 6551, 6572, 6588, 6600, 6615, 6623, 6631, 6644, + 6656, 6676, 6697, 6715, 6729, 6745, 6759, 6766, + 6774, 6782, 6789, 6799, 6810, 6827, 6845, 6846, + 6857, 6869, 6887, 6906, 6913, 6920, 6927, 6945, + 6956, 6968, 6986, 6997, 7009, 7024, 7039, 7056, + 7072, 7088, 7101, 7107, 7113, 7127, 7140, 7154, + 7163, 7172, 7190, 7198, 7206, 7215, 7234, 7249, + 7265, 7282, 7289, 7302, 7316, 7333, 7344, 7348, + 7354, 7367, 7383, 7392, 7401, 7419, 7438, 7457, + 7472, 7488, 7495, 7502, 7509, 7515, 7521, 7528, + 7535, 7541, 7548, 7555, 7562, 7569, 7576, 7583, + 7590, 7597, 7604, 7609, 7614, 7619, 7626, 7633, + 7638, 7644, 7649, 7654, 7661, 7668, 7683, 7700, + 7716, 7733, 7751, 7765, 7784, 7803, 7810, 7818, + 7826, 7833, 7840, 7847, 7849, 7860, 7870, 7884, + 7891, 7907, 7914, 7920, 7927, 7935, 7943, 7951, + 7967, 7971, 7976, 7980, 7984, 7990, 7995, 8001, + 8006, 8012, 8018, 8024, 8041, 8051, 8062, 8079, + 8089, 8101, 8117, 8131, 8148, 8164, 8180, 8192, + 8197, 8202, 8216, 8230, 8243, 8252, 8261, 8278, + 8285, 8292, 8301, 8320, 8336, 8351, 8368, 8374, + 8386, 8399, 8415, 8425, 8428, 8433, 8445, 8460, + 8468, 8476, 8493, 8511, 8529, 8543, 8559, 8565, + 8571, 8577, 8582, 8587, 8593, 8599, 8605, 8611, + 8617, 8623, 8629, 8635, 8641, 8647, 8653, 8657, + 8661, 8665, 8671, 8677, 8681, 8686, 8690, 8694, + 8700, 8706, 8720, 8736, 8751, 8768, 8787, 8800, + 8818, 8836, 8843, 8851, 8859, 8866, 8871, 8877, + 8883, 8888, 8893, 8894, 8895, } var _scanner_trans_keys []int32 = []int32{ @@ -195,18 +219,193 @@ func Parse(input string) (*Conf, error) { 71, 90, 97, 102, 103, 122, 9, 32, 45, 65, 90, 97, 122, 9, 32, 34, 10, 13, 32, 9, 13, 9, 10, 32, - 35, 11, 13, 9, 10, 32, 35, 10, - 9, 10, 32, 35, 11, 13, 9, 32, - 47, 46, 58, 65, 70, 97, 102, 9, - 32, 48, 57, 9, 32, 48, 57, 48, - 57, 9, 32, 48, 57, 9, 32, 45, + 35, 11, 13, 9, 10, 32, 35, 95, + 45, 46, 48, 57, 65, 90, 97, 122, + 10, 61, 95, 45, 46, 48, 57, 65, + 90, 97, 122, 95, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 35, + 95, 45, 46, 48, 57, 65, 90, 97, + 122, 9, 10, 32, 35, 11, 13, 9, + 10, 32, 95, 45, 46, 48, 57, 65, + 90, 97, 122, 10, 61, 95, 45, 46, + 48, 57, 65, 90, 97, 122, 10, 95, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 35, 95, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 32, 47, + 46, 58, 65, 70, 97, 102, 9, 32, + 48, 57, 9, 32, 48, 57, 48, 57, + 9, 32, 48, 57, 9, 32, 45, 47, + 46, 58, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 32, 34, 10, 13, 48, + 57, 9, 32, 10, 13, 48, 57, 9, + 10, 32, 35, 11, 13, 48, 57, 9, + 10, 32, 34, 35, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 10, + 32, 9, 13, 32, 61, 95, 9, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 35, 61, 95, 11, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 35, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 35, 95, 11, 13, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 32, + 34, 44, 10, 13, 9, 32, 34, 44, + 10, 13, 9, 32, 34, 44, 10, 13, + 9, 32, 34, 45, 46, 48, 58, 65, + 70, 71, 90, 97, 102, 103, 122, 34, + 9, 32, 44, 32, 34, 9, 13, 32, + 9, 13, 9, 32, 44, 10, 13, 9, + 32, 34, 44, 10, 13, 9, 32, 34, + 44, 10, 13, 9, 32, 34, 44, 10, + 13, 9, 32, 44, 10, 13, 9, 32, + 34, 44, 10, 13, 9, 32, 34, 44, + 10, 13, 34, 9, 32, 34, 45, 65, + 90, 97, 122, 9, 32, 34, 10, 13, + 32, 34, 9, 13, 9, 10, 32, 34, + 35, 11, 13, 9, 10, 32, 34, 35, + 95, 45, 46, 48, 57, 65, 90, 97, + 122, 10, 34, 9, 10, 32, 44, 9, + 10, 32, 45, 46, 48, 58, 65, 70, + 71, 90, 97, 102, 103, 122, 9, 10, + 32, 45, 65, 90, 97, 122, 9, 10, + 32, 34, 11, 13, 9, 10, 32, 47, + 46, 58, 65, 70, 97, 102, 9, 10, + 32, 48, 57, 9, 10, 32, 48, 57, + 10, 48, 57, 9, 10, 32, 48, 57, + 9, 10, 32, 45, 47, 46, 58, 65, + 70, 71, 90, 97, 102, 103, 122, 9, + 10, 32, 34, 11, 13, 48, 57, 9, + 10, 32, 11, 13, 48, 57, 9, 10, + 32, 35, 11, 13, 48, 57, 9, 10, + 32, 34, 95, 11, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 10, 32, 61, + 95, 9, 13, 45, 46, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 35, 61, + 95, 11, 13, 45, 46, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 35, 95, + 11, 13, 45, 46, 48, 57, 65, 90, + 97, 122, 9, 10, 32, 35, 95, 11, + 13, 45, 46, 48, 57, 65, 90, 97, + 122, 10, 32, 34, 9, 13, 10, 32, + 9, 13, 9, 10, 32, 44, 11, 13, + 9, 10, 32, 34, 44, 11, 13, 9, + 10, 32, 34, 44, 11, 13, 9, 10, + 32, 34, 44, 11, 13, 9, 10, 32, + 34, 45, 46, 48, 58, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 10, 32, + 34, 45, 65, 90, 97, 122, 9, 10, + 32, 34, 11, 13, 10, 32, 34, 9, + 13, 9, 10, 32, 34, 35, 11, 13, + 9, 10, 32, 34, 95, 45, 46, 48, + 57, 65, 90, 97, 122, 10, 34, 61, + 95, 45, 46, 48, 57, 65, 90, 97, + 122, 10, 34, 95, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 34, + 35, 95, 45, 46, 48, 57, 65, 90, + 97, 122, 9, 10, 32, 35, 44, 11, + 13, 9, 10, 32, 45, 46, 58, 95, + 48, 57, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 10, 32, 45, 46, 61, + 95, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 45, 47, 58, 61, 95, 46, + 57, 65, 70, 71, 90, 97, 102, 103, + 122, 9, 10, 32, 45, 47, 58, 61, + 95, 46, 57, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 10, 32, 34, 35, + 11, 13, 9, 10, 32, 35, 11, 13, + 9, 10, 32, 35, 44, 11, 13, 9, + 10, 32, 34, 35, 44, 11, 13, 9, + 10, 32, 34, 35, 44, 11, 13, 9, + 10, 32, 34, 35, 44, 11, 13, 9, + 10, 32, 34, 45, 46, 58, 95, 48, + 57, 65, 70, 71, 90, 97, 102, 103, + 122, 9, 10, 32, 34, 45, 46, 61, + 95, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 34, 45, 47, 58, 61, 95, + 46, 57, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 10, 32, 34, 48, 57, + 9, 10, 32, 34, 48, 57, 10, 34, + 48, 57, 9, 10, 32, 34, 48, 57, + 9, 10, 32, 34, 47, 46, 58, 65, + 70, 97, 102, 9, 10, 32, 34, 45, + 47, 58, 61, 95, 46, 57, 65, 70, + 71, 90, 97, 102, 103, 122, 9, 10, + 32, 34, 11, 13, 48, 57, 9, 10, + 32, 34, 11, 13, 48, 57, 9, 10, + 32, 34, 35, 11, 13, 48, 57, 9, + 10, 32, 34, 95, 11, 13, 45, 46, + 48, 57, 65, 90, 97, 122, 10, 32, + 34, 61, 95, 9, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 10, 32, + 34, 35, 61, 95, 11, 13, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 34, 35, 95, 11, 13, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 34, 35, 95, 11, 13, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 35, 44, 11, 13, 9, 10, 32, + 34, 35, 44, 11, 13, 9, 10, 32, + 34, 35, 44, 11, 13, 9, 10, 32, + 34, 35, 11, 13, 9, 10, 32, 34, + 45, 47, 46, 58, 65, 70, 71, 90, + 97, 102, 103, 122, 9, 10, 32, 44, + 11, 13, 9, 10, 32, 34, 44, 11, + 13, 9, 10, 32, 34, 44, 11, 13, + 10, 34, 34, 61, 95, 45, 46, 48, + 57, 65, 90, 97, 122, 34, 95, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 34, 35, 95, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 10, 32, + 35, 44, 11, 13, 9, 10, 32, 35, + 45, 46, 58, 95, 48, 57, 65, 70, + 71, 90, 97, 102, 103, 122, 9, 32, + 45, 46, 61, 95, 48, 57, 65, 90, + 97, 122, 9, 32, 45, 47, 58, 61, + 95, 46, 57, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 32, 45, 47, 58, + 61, 95, 46, 57, 65, 70, 71, 90, + 97, 102, 103, 122, 9, 10, 32, 34, + 35, 11, 13, 9, 10, 32, 35, 11, + 13, 9, 10, 32, 35, 44, 11, 13, + 9, 10, 32, 34, 35, 44, 11, 13, + 9, 10, 32, 34, 35, 44, 11, 13, + 9, 10, 32, 34, 35, 44, 11, 13, + 9, 10, 32, 34, 35, 45, 46, 58, + 95, 48, 57, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 32, 34, 45, 46, + 61, 95, 48, 57, 65, 90, 97, 122, + 9, 32, 34, 45, 47, 58, 61, 95, + 46, 57, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 32, 34, 48, 57, 9, + 32, 34, 48, 57, 34, 48, 57, 9, + 32, 34, 48, 57, 9, 32, 34, 47, + 46, 58, 65, 70, 97, 102, 9, 32, + 34, 45, 47, 58, 61, 95, 46, 57, + 65, 70, 71, 90, 97, 102, 103, 122, + 9, 32, 34, 10, 13, 48, 57, 9, + 32, 34, 10, 13, 48, 57, 9, 10, + 32, 34, 35, 11, 13, 48, 57, 9, + 10, 32, 34, 35, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 32, + 34, 61, 95, 9, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 10, 32, + 34, 35, 61, 95, 11, 13, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 34, 35, 95, 11, 13, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 34, 35, 95, 11, 13, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 35, 44, 11, 13, 9, 10, 32, + 34, 35, 44, 11, 13, 9, 10, 32, + 34, 35, 44, 11, 13, 9, 10, 32, + 34, 35, 11, 13, 9, 32, 34, 45, 47, 46, 58, 65, 70, 71, 90, 97, - 102, 103, 122, 9, 32, 34, 10, 13, - 48, 57, 9, 32, 10, 13, 48, 57, - 9, 10, 32, 35, 11, 13, 48, 57, - 9, 10, 32, 34, 35, 11, 13, 10, - 32, 9, 13, 9, 32, 34, 44, 10, - 13, 9, 32, 34, 44, 10, 13, 9, + 102, 103, 122, 9, 32, 44, 10, 13, + 9, 32, 34, 44, 10, 13, 9, 32, + 34, 44, 10, 13, 9, 32, 34, 44, + 10, 13, 9, 32, 34, 44, 10, 13, + 9, 32, 34, 44, 10, 13, 9, 32, + 34, 10, 13, 32, 34, 9, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 45, 46, 48, 58, 65, 70, 71, 90, 97, 102, 103, 122, 34, 9, 32, 44, @@ -219,453 +418,722 @@ func Parse(input string) (*Conf, error) { 9, 32, 34, 45, 65, 90, 97, 122, 9, 32, 34, 10, 13, 32, 34, 9, 13, 9, 10, 32, 34, 35, 11, 13, - 9, 10, 32, 34, 35, 10, 34, 9, - 10, 32, 44, 9, 10, 32, 45, 46, - 48, 58, 65, 70, 71, 90, 97, 102, - 103, 122, 9, 10, 32, 45, 65, 90, - 97, 122, 9, 10, 32, 34, 11, 13, - 9, 10, 32, 47, 46, 58, 65, 70, - 97, 102, 9, 10, 32, 48, 57, 9, - 10, 32, 48, 57, 10, 48, 57, 9, - 10, 32, 48, 57, 9, 10, 32, 45, - 47, 46, 58, 65, 70, 71, 90, 97, - 102, 103, 122, 9, 10, 32, 34, 11, - 13, 48, 57, 9, 10, 32, 11, 13, - 48, 57, 9, 10, 32, 35, 11, 13, - 48, 57, 10, 32, 34, 9, 13, 10, - 32, 9, 13, 9, 10, 32, 44, 11, - 13, 9, 10, 32, 34, 44, 11, 13, - 9, 10, 32, 34, 44, 11, 13, 9, + 9, 10, 32, 34, 35, 95, 45, 46, + 48, 57, 65, 90, 97, 122, 10, 34, + 9, 10, 32, 44, 9, 10, 32, 34, + 11, 13, 10, 32, 9, 13, 9, 10, + 32, 44, 11, 13, 9, 10, 32, 34, + 44, 11, 13, 9, 10, 32, 34, 44, + 11, 13, 9, 10, 32, 34, 44, 11, + 13, 9, 10, 32, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, - 32, 34, 45, 46, 48, 58, 65, 70, - 71, 90, 97, 102, 103, 122, 9, 10, - 32, 34, 45, 65, 90, 97, 122, 9, - 10, 32, 34, 11, 13, 10, 32, 34, - 9, 13, 9, 10, 32, 34, 35, 11, - 13, 9, 10, 32, 35, 44, 11, 13, - 9, 10, 32, 34, 35, 11, 13, 9, - 10, 32, 35, 11, 13, 9, 10, 32, - 35, 44, 11, 13, 9, 10, 32, 34, - 35, 44, 11, 13, 9, 10, 32, 34, - 35, 44, 11, 13, 9, 10, 32, 34, - 35, 44, 11, 13, 9, 10, 32, 35, - 44, 11, 13, 9, 10, 32, 34, 35, - 44, 11, 13, 9, 10, 32, 34, 35, - 44, 11, 13, 9, 10, 32, 34, 35, - 11, 13, 9, 10, 32, 34, 47, 46, + 32, 34, 44, 11, 13, 10, 32, 34, + 9, 13, 10, 32, 9, 13, 9, 10, + 32, 44, 11, 13, 9, 10, 32, 34, + 44, 11, 13, 9, 10, 32, 34, 44, + 11, 13, 9, 10, 32, 34, 44, 11, + 13, 9, 10, 32, 34, 11, 13, 10, + 32, 34, 9, 13, 9, 10, 32, 34, + 44, 11, 13, 9, 10, 32, 34, 45, + 46, 48, 58, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 10, 32, 34, 45, + 65, 90, 97, 122, 9, 10, 32, 34, + 11, 13, 10, 32, 34, 9, 13, 9, + 10, 32, 34, 35, 11, 13, 9, 10, + 32, 34, 95, 45, 46, 48, 57, 65, + 90, 97, 122, 10, 34, 61, 95, 45, + 46, 48, 57, 65, 90, 97, 122, 10, + 34, 95, 45, 46, 48, 57, 65, 90, + 97, 122, 9, 10, 32, 34, 35, 95, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 35, 44, 11, 13, 9, + 10, 32, 34, 95, 11, 13, 45, 46, + 48, 57, 65, 90, 97, 122, 10, 32, + 61, 95, 9, 13, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 44, + 61, 95, 11, 13, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 44, + 95, 11, 13, 45, 46, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 35, 44, + 95, 11, 13, 45, 46, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 34, 35, + 11, 13, 9, 10, 32, 35, 11, 13, + 9, 10, 32, 35, 44, 11, 13, 9, + 10, 32, 34, 35, 44, 11, 13, 9, + 10, 32, 34, 35, 44, 11, 13, 9, + 10, 32, 34, 35, 44, 11, 13, 9, + 10, 32, 34, 95, 11, 13, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 34, 44, 9, 10, 32, 34, 11, + 13, 10, 32, 34, 9, 13, 9, 10, + 32, 34, 44, 11, 13, 9, 10, 32, + 44, 11, 13, 9, 10, 32, 34, 44, + 11, 13, 9, 10, 32, 34, 44, 11, + 13, 9, 10, 32, 34, 44, 10, 32, + 34, 9, 13, 10, 32, 34, 9, 13, + 9, 10, 32, 34, 44, 11, 13, 9, + 10, 32, 44, 11, 13, 9, 10, 32, + 34, 44, 11, 13, 9, 10, 32, 34, + 44, 11, 13, 9, 10, 32, 34, 44, + 10, 32, 34, 9, 13, 10, 32, 34, + 9, 13, 9, 10, 32, 34, 44, 10, + 32, 34, 9, 13, 10, 32, 34, 9, + 13, 9, 10, 32, 34, 44, 11, 13, + 9, 10, 32, 44, 11, 13, 9, 10, + 32, 34, 45, 46, 11, 13, 48, 58, + 65, 70, 71, 90, 97, 102, 103, 122, + 9, 10, 32, 45, 11, 13, 65, 90, + 97, 122, 9, 10, 32, 44, 45, 11, + 13, 65, 90, 97, 122, 9, 10, 32, + 34, 45, 46, 11, 13, 48, 58, 65, + 70, 71, 90, 97, 102, 103, 122, 9, + 10, 32, 45, 11, 13, 65, 90, 97, + 122, 9, 10, 32, 35, 45, 11, 13, + 65, 90, 97, 122, 9, 10, 32, 47, + 11, 13, 46, 58, 65, 70, 97, 102, + 9, 10, 32, 35, 47, 11, 13, 46, 58, 65, 70, 97, 102, 9, 10, 32, - 34, 48, 57, 9, 10, 32, 34, 48, - 57, 10, 34, 48, 57, 9, 10, 32, - 34, 48, 57, 9, 10, 32, 34, 45, - 47, 46, 58, 65, 70, 71, 90, 97, - 102, 103, 122, 9, 10, 32, 34, 11, - 13, 48, 57, 9, 10, 32, 34, 11, - 13, 48, 57, 9, 10, 32, 34, 35, + 95, 45, 46, 48, 57, 65, 90, 97, + 122, 9, 10, 32, 61, 95, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 35, 11, 13, 48, 57, 9, 10, + 32, 35, 11, 13, 48, 57, 9, 10, + 32, 45, 47, 11, 13, 46, 58, 65, + 70, 71, 90, 97, 102, 103, 122, 9, + 10, 32, 35, 45, 47, 11, 13, 46, + 58, 65, 70, 71, 90, 97, 102, 103, + 122, 9, 10, 32, 34, 95, 11, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 61, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 35, 61, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 47, 11, 13, 46, 58, 65, + 70, 97, 102, 9, 10, 32, 44, 47, + 11, 13, 46, 58, 65, 70, 97, 102, + 9, 10, 32, 45, 46, 58, 48, 57, + 65, 70, 71, 90, 97, 102, 103, 122, + 9, 10, 32, 46, 47, 58, 48, 57, + 65, 70, 97, 102, 9, 10, 32, 44, 11, 13, 48, 57, 9, 10, 32, 44, + 11, 13, 48, 57, 9, 10, 32, 45, + 47, 11, 13, 46, 58, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 10, 32, + 44, 45, 47, 11, 13, 46, 58, 65, + 70, 71, 90, 97, 102, 103, 122, 9, + 10, 32, 34, 45, 46, 58, 11, 13, + 48, 57, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 10, 32, 46, 47, 58, + 11, 13, 48, 57, 65, 70, 97, 102, + 9, 10, 32, 35, 46, 47, 58, 11, + 13, 48, 57, 65, 70, 97, 102, 9, + 10, 32, 34, 44, 11, 13, 9, 10, + 32, 44, 11, 13, 9, 10, 32, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, - 10, 34, 9, 10, 32, 35, 44, 11, - 13, 9, 10, 32, 35, 45, 46, 48, + 9, 10, 32, 34, 44, 11, 13, 9, + 10, 32, 34, 45, 46, 11, 13, 48, 58, 65, 70, 71, 90, 97, 102, 103, - 122, 9, 10, 32, 34, 35, 11, 13, - 9, 10, 32, 35, 11, 13, 9, 10, - 32, 35, 44, 11, 13, 9, 10, 32, + 122, 10, 32, 34, 9, 13, 9, 10, + 32, 34, 44, 11, 13, 9, 10, 32, + 34, 45, 46, 48, 58, 65, 70, 71, + 90, 97, 102, 103, 122, 10, 34, 34, + 9, 32, 44, 9, 32, 34, 45, 46, + 10, 13, 48, 58, 65, 70, 71, 90, + 97, 102, 103, 122, 9, 32, 45, 10, + 13, 65, 90, 97, 122, 9, 32, 44, + 45, 10, 13, 65, 90, 97, 122, 9, + 32, 34, 45, 46, 10, 13, 48, 58, + 65, 70, 71, 90, 97, 102, 103, 122, + 9, 32, 45, 10, 13, 65, 90, 97, + 122, 9, 10, 32, 35, 45, 11, 13, + 65, 90, 97, 122, 9, 32, 47, 10, + 13, 46, 58, 65, 70, 97, 102, 9, + 10, 32, 35, 47, 11, 13, 46, 58, + 65, 70, 97, 102, 9, 10, 32, 35, + 95, 45, 46, 48, 57, 65, 90, 97, + 122, 9, 32, 61, 95, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 10, 32, + 35, 11, 13, 48, 57, 9, 10, 32, + 35, 11, 13, 48, 57, 9, 32, 45, + 47, 10, 13, 46, 58, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 10, 32, + 35, 45, 47, 11, 13, 46, 58, 65, + 70, 71, 90, 97, 102, 103, 122, 9, + 10, 32, 34, 35, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 32, 61, 95, 10, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 10, 32, + 35, 61, 95, 11, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 32, 47, + 10, 13, 46, 58, 65, 70, 97, 102, + 9, 32, 44, 47, 10, 13, 46, 58, + 65, 70, 97, 102, 9, 32, 45, 46, + 58, 48, 57, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 32, 46, 47, 58, + 48, 57, 65, 70, 97, 102, 9, 32, + 44, 10, 13, 48, 57, 9, 32, 44, + 10, 13, 48, 57, 9, 32, 45, 47, + 10, 13, 46, 58, 65, 70, 71, 90, + 97, 102, 103, 122, 9, 32, 44, 45, + 47, 10, 13, 46, 58, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 32, 34, + 45, 46, 58, 10, 13, 48, 57, 65, + 70, 71, 90, 97, 102, 103, 122, 9, + 32, 46, 47, 58, 10, 13, 48, 57, + 65, 70, 97, 102, 9, 10, 32, 35, + 46, 47, 58, 11, 13, 48, 57, 65, + 70, 97, 102, 32, 34, 9, 13, 32, + 9, 13, 9, 32, 44, 10, 13, 9, + 32, 34, 44, 10, 13, 9, 32, 34, + 44, 10, 13, 9, 32, 34, 44, 10, + 13, 9, 32, 34, 45, 46, 10, 13, + 48, 58, 65, 70, 71, 90, 97, 102, + 103, 122, 32, 34, 9, 13, 9, 32, + 34, 44, 10, 13, 9, 32, 34, 45, + 46, 48, 58, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 32, 34, 45, 65, + 90, 97, 122, 9, 32, 34, 10, 13, + 32, 34, 9, 13, 9, 10, 32, 34, + 35, 11, 13, 9, 10, 32, 34, 35, + 95, 45, 46, 48, 57, 65, 90, 97, + 122, 34, 61, 95, 45, 46, 48, 57, + 65, 90, 97, 122, 34, 95, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 34, 35, 95, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 35, + 44, 11, 13, 9, 10, 32, 34, 35, + 45, 46, 58, 95, 11, 13, 48, 57, + 65, 70, 71, 90, 97, 102, 103, 122, + 9, 32, 45, 46, 61, 95, 10, 13, + 48, 57, 65, 90, 97, 122, 9, 32, + 44, 45, 46, 61, 95, 10, 13, 48, + 57, 65, 90, 97, 122, 9, 32, 44, + 61, 95, 10, 13, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 32, 44, 95, + 10, 13, 45, 46, 48, 57, 65, 90, + 97, 122, 9, 10, 32, 35, 44, 95, + 11, 13, 45, 46, 48, 57, 65, 90, + 97, 122, 9, 32, 45, 47, 58, 61, + 95, 10, 13, 46, 57, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 32, 44, + 45, 47, 58, 61, 95, 10, 13, 46, + 57, 65, 70, 71, 90, 97, 102, 103, + 122, 9, 32, 45, 47, 58, 61, 95, + 10, 13, 46, 57, 65, 70, 71, 90, + 97, 102, 103, 122, 9, 32, 44, 45, + 47, 58, 61, 95, 10, 13, 46, 57, + 65, 70, 71, 90, 97, 102, 103, 122, + 32, 61, 95, 9, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 10, 32, + 34, 35, 11, 13, 9, 10, 32, 35, + 11, 13, 9, 10, 32, 35, 44, 11, + 13, 9, 10, 32, 35, 44, 11, 13, + 9, 10, 32, 34, 45, 46, 58, 95, + 11, 13, 48, 57, 65, 70, 71, 90, + 97, 102, 103, 122, 9, 10, 32, 45, + 46, 61, 95, 11, 13, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 44, 45, + 46, 61, 95, 11, 13, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 45, 47, + 58, 61, 95, 11, 13, 46, 57, 65, + 70, 71, 90, 97, 102, 103, 122, 9, + 10, 32, 44, 45, 47, 58, 61, 95, + 11, 13, 46, 57, 65, 70, 71, 90, + 97, 102, 103, 122, 9, 10, 32, 45, + 47, 58, 61, 95, 11, 13, 46, 57, + 65, 70, 71, 90, 97, 102, 103, 122, + 9, 10, 32, 44, 45, 47, 58, 61, + 95, 11, 13, 46, 57, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 10, 32, 34, 35, 44, 11, 13, 9, 10, 32, 34, 35, 44, 11, 13, 9, 10, 32, 34, 35, 44, 11, 13, 9, 10, 32, - 34, 35, 45, 46, 48, 58, 65, 70, - 71, 90, 97, 102, 103, 122, 9, 32, - 34, 47, 46, 58, 65, 70, 97, 102, - 9, 32, 34, 48, 57, 9, 32, 34, - 48, 57, 34, 48, 57, 9, 32, 34, - 48, 57, 9, 32, 34, 45, 47, 46, + 34, 45, 46, 58, 95, 11, 13, 48, + 57, 65, 70, 71, 90, 97, 102, 103, + 122, 9, 10, 32, 34, 44, 9, 10, + 32, 34, 45, 46, 11, 13, 48, 58, + 65, 70, 71, 90, 97, 102, 103, 122, + 9, 10, 32, 34, 45, 11, 13, 65, + 90, 97, 122, 9, 10, 32, 34, 44, + 45, 11, 13, 65, 90, 97, 122, 9, + 10, 32, 34, 45, 46, 11, 13, 48, 58, 65, 70, 71, 90, 97, 102, 103, - 122, 9, 32, 34, 10, 13, 48, 57, - 9, 32, 34, 10, 13, 48, 57, 9, + 122, 9, 10, 32, 34, 45, 11, 13, + 65, 90, 97, 122, 9, 10, 32, 34, + 35, 45, 11, 13, 65, 90, 97, 122, + 9, 10, 32, 34, 47, 11, 13, 46, + 58, 65, 70, 97, 102, 9, 10, 32, + 34, 35, 47, 11, 13, 46, 58, 65, + 70, 97, 102, 9, 10, 32, 34, 95, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 34, 61, 95, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 34, 35, 11, 13, 48, 57, 9, 10, 32, 34, 35, 11, 13, 48, 57, - 9, 10, 32, 34, 35, 11, 13, 9, - 10, 32, 35, 44, 11, 13, 9, 10, - 32, 34, 35, 44, 11, 13, 9, 10, - 32, 34, 35, 44, 11, 13, 9, 10, - 32, 34, 35, 11, 13, 9, 32, 44, - 10, 13, 9, 32, 34, 44, 10, 13, - 9, 32, 34, 44, 10, 13, 9, 32, - 34, 44, 10, 13, 9, 32, 34, 44, - 10, 13, 9, 32, 34, 44, 10, 13, - 9, 32, 34, 10, 13, 32, 34, 9, - 13, 9, 32, 34, 44, 10, 13, 9, - 32, 34, 45, 46, 48, 58, 65, 70, - 71, 90, 97, 102, 103, 122, 34, 9, - 32, 44, 32, 34, 9, 13, 32, 9, - 13, 9, 32, 44, 10, 13, 9, 32, - 34, 44, 10, 13, 9, 32, 34, 44, - 10, 13, 9, 32, 34, 44, 10, 13, - 9, 32, 44, 10, 13, 9, 32, 34, - 44, 10, 13, 9, 32, 34, 44, 10, - 13, 34, 9, 32, 34, 45, 65, 90, - 97, 122, 9, 32, 34, 10, 13, 32, - 34, 9, 13, 9, 10, 32, 34, 35, - 11, 13, 9, 10, 32, 34, 35, 10, - 34, 9, 10, 32, 44, 9, 10, 32, - 34, 11, 13, 10, 32, 9, 13, 9, - 10, 32, 44, 11, 13, 9, 10, 32, - 34, 44, 11, 13, 9, 10, 32, 34, + 9, 10, 32, 34, 45, 47, 11, 13, + 46, 58, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 10, 32, 34, 35, 45, + 47, 11, 13, 46, 58, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 10, 32, + 34, 95, 11, 13, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 34, + 61, 95, 11, 13, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 34, + 35, 61, 95, 11, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 10, 32, + 34, 47, 11, 13, 46, 58, 65, 70, + 97, 102, 9, 10, 32, 34, 44, 47, + 11, 13, 46, 58, 65, 70, 97, 102, + 9, 10, 32, 34, 45, 46, 58, 48, + 57, 65, 70, 71, 90, 97, 102, 103, + 122, 9, 10, 32, 34, 46, 47, 58, + 48, 57, 65, 70, 97, 102, 9, 10, + 32, 34, 44, 11, 13, 48, 57, 9, + 10, 32, 34, 44, 11, 13, 48, 57, + 9, 10, 32, 34, 45, 47, 11, 13, + 46, 58, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 10, 32, 34, 44, 45, + 47, 11, 13, 46, 58, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 10, 32, + 34, 45, 46, 58, 11, 13, 48, 57, + 65, 70, 71, 90, 97, 102, 103, 122, + 9, 10, 32, 34, 46, 47, 58, 11, + 13, 48, 57, 65, 70, 97, 102, 9, + 10, 32, 34, 35, 46, 47, 58, 11, + 13, 48, 57, 65, 70, 97, 102, 10, + 32, 34, 9, 13, 10, 32, 34, 9, + 13, 9, 10, 32, 34, 44, 11, 13, + 9, 10, 32, 44, 11, 13, 9, 10, + 32, 34, 44, 11, 13, 9, 10, 32, + 34, 44, 11, 13, 9, 10, 32, 44, + 11, 13, 9, 10, 32, 34, 44, 11, + 13, 9, 10, 32, 34, 44, 11, 13, + 9, 10, 32, 34, 44, 9, 10, 32, + 44, 10, 32, 34, 9, 13, 10, 32, + 9, 13, 10, 34, 10, 32, 34, 9, + 13, 10, 32, 34, 9, 13, 9, 10, + 32, 34, 44, 11, 13, 9, 10, 32, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, - 10, 32, 34, 44, 11, 13, 10, 32, - 34, 9, 13, 10, 32, 9, 13, 9, - 10, 32, 44, 11, 13, 9, 10, 32, + 10, 32, 34, 44, 11, 13, 9, 10, + 32, 34, 44, 11, 13, 9, 10, 32, + 34, 45, 46, 11, 13, 48, 58, 65, + 70, 71, 90, 97, 102, 103, 122, 10, + 32, 34, 9, 13, 9, 10, 32, 34, + 45, 11, 13, 65, 90, 97, 122, 9, + 10, 32, 34, 44, 45, 11, 13, 65, + 90, 97, 122, 9, 10, 32, 34, 47, + 11, 13, 46, 58, 65, 70, 97, 102, + 9, 10, 32, 34, 44, 47, 11, 13, + 46, 58, 65, 70, 97, 102, 9, 10, + 32, 34, 44, 11, 13, 48, 57, 9, + 10, 32, 34, 44, 11, 13, 48, 57, + 9, 10, 32, 34, 45, 47, 11, 13, + 46, 58, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 10, 32, 34, 44, 45, + 47, 11, 13, 46, 58, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, 44, - 11, 13, 9, 10, 32, 34, 11, 13, - 10, 32, 34, 9, 13, 9, 10, 32, + 11, 13, 9, 10, 32, 34, 44, 11, + 13, 9, 10, 32, 34, 44, 11, 13, + 9, 10, 32, 34, 44, 11, 13, 9, + 10, 32, 34, 44, 11, 13, 9, 10, + 32, 34, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, - 45, 46, 48, 58, 65, 70, 71, 90, - 97, 102, 103, 122, 9, 10, 32, 34, - 45, 65, 90, 97, 122, 9, 10, 32, - 34, 11, 13, 10, 32, 34, 9, 13, - 9, 10, 32, 34, 35, 11, 13, 9, - 10, 32, 35, 44, 11, 13, 9, 10, - 32, 34, 35, 11, 13, 9, 10, 32, - 35, 11, 13, 9, 10, 32, 35, 44, - 11, 13, 9, 10, 32, 34, 35, 44, - 11, 13, 9, 10, 32, 34, 35, 44, - 11, 13, 9, 10, 32, 34, 35, 44, - 11, 13, 9, 10, 32, 35, 44, 11, - 13, 9, 10, 32, 34, 35, 44, 11, - 13, 9, 10, 32, 34, 35, 44, 11, + 44, 11, 13, 9, 10, 32, 34, 44, + 11, 13, 9, 10, 32, 34, 44, 10, + 32, 34, 9, 13, 10, 32, 34, 9, + 13, 9, 10, 32, 34, 45, 46, 61, + 95, 11, 13, 48, 57, 65, 90, 97, + 122, 9, 10, 32, 34, 11, 13, 10, + 32, 34, 9, 13, 9, 10, 32, 34, + 35, 11, 13, 9, 10, 32, 34, 95, + 45, 46, 48, 57, 65, 90, 97, 122, + 10, 34, 61, 95, 45, 46, 48, 57, + 65, 90, 97, 122, 10, 34, 95, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 34, 35, 95, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 10, 32, + 35, 44, 11, 13, 9, 10, 32, 34, + 35, 11, 13, 9, 10, 32, 35, 11, 13, 9, 10, 32, 34, 35, 11, 13, - 9, 10, 32, 34, 47, 46, 58, 65, - 70, 97, 102, 9, 10, 32, 34, 48, - 57, 9, 10, 32, 34, 48, 57, 10, - 34, 48, 57, 9, 10, 32, 34, 48, - 57, 9, 10, 32, 34, 45, 47, 46, - 58, 65, 70, 71, 90, 97, 102, 103, - 122, 9, 10, 32, 34, 11, 13, 48, - 57, 9, 10, 32, 34, 11, 13, 48, - 57, 9, 10, 32, 34, 35, 11, 13, - 48, 57, 9, 10, 32, 44, 11, 13, - 9, 10, 32, 34, 45, 46, 11, 13, - 48, 58, 65, 70, 71, 90, 97, 102, - 103, 122, 9, 10, 32, 45, 11, 13, - 65, 90, 97, 122, 9, 10, 32, 44, - 45, 11, 13, 65, 90, 97, 122, 9, + 9, 10, 32, 44, 11, 13, 9, 10, + 32, 34, 44, 11, 13, 9, 10, 32, + 34, 44, 11, 13, 9, 10, 32, 34, + 44, 11, 13, 9, 10, 32, 34, 44, + 11, 13, 9, 10, 32, 34, 44, 11, + 13, 9, 10, 32, 34, 44, 11, 13, + 9, 10, 32, 34, 44, 11, 13, 9, + 10, 32, 34, 44, 11, 13, 9, 10, + 32, 34, 44, 45, 46, 61, 95, 11, + 13, 48, 57, 65, 90, 97, 122, 9, 10, 32, 34, 45, 46, 11, 13, 48, 58, 65, 70, 71, 90, 97, 102, 103, - 122, 9, 10, 32, 45, 11, 13, 65, - 90, 97, 122, 9, 10, 32, 35, 45, - 11, 13, 65, 90, 97, 122, 9, 10, - 32, 47, 11, 13, 46, 58, 65, 70, - 97, 102, 9, 10, 32, 35, 47, 11, - 13, 46, 58, 65, 70, 97, 102, 9, - 10, 32, 35, 11, 13, 48, 57, 9, - 10, 32, 35, 11, 13, 48, 57, 9, - 10, 32, 45, 47, 11, 13, 46, 58, - 65, 70, 71, 90, 97, 102, 103, 122, - 9, 10, 32, 35, 45, 47, 11, 13, - 46, 58, 65, 70, 71, 90, 97, 102, - 103, 122, 9, 10, 32, 47, 11, 13, + 122, 9, 10, 32, 34, 45, 11, 13, + 65, 90, 97, 122, 9, 10, 32, 34, + 35, 45, 11, 13, 65, 90, 97, 122, + 9, 10, 32, 34, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 10, + 32, 34, 61, 95, 9, 13, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 34, 35, 61, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 34, 35, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 34, 35, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 34, 47, 11, 13, 46, 58, + 65, 70, 97, 102, 9, 10, 32, 34, + 48, 57, 9, 10, 32, 34, 48, 57, + 9, 10, 32, 34, 35, 47, 11, 13, 46, 58, 65, 70, 97, 102, 9, 10, - 32, 44, 47, 11, 13, 46, 58, 65, - 70, 97, 102, 9, 10, 32, 45, 46, - 58, 48, 57, 65, 70, 71, 90, 97, - 102, 103, 122, 9, 10, 32, 46, 47, - 58, 48, 57, 65, 70, 97, 102, 9, - 10, 32, 44, 11, 13, 48, 57, 9, - 10, 32, 44, 11, 13, 48, 57, 9, - 10, 32, 45, 47, 11, 13, 46, 58, - 65, 70, 71, 90, 97, 102, 103, 122, - 9, 10, 32, 44, 45, 47, 11, 13, - 46, 58, 65, 70, 71, 90, 97, 102, - 103, 122, 9, 10, 32, 34, 45, 46, - 58, 11, 13, 48, 57, 65, 70, 71, + 32, 34, 95, 45, 46, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 34, 61, + 95, 45, 46, 48, 57, 65, 90, 97, + 122, 9, 10, 32, 34, 35, 11, 13, + 48, 57, 9, 10, 32, 34, 35, 11, + 13, 48, 57, 9, 10, 32, 34, 45, + 47, 11, 13, 46, 58, 65, 70, 71, 90, 97, 102, 103, 122, 9, 10, 32, - 46, 47, 58, 11, 13, 48, 57, 65, - 70, 97, 102, 9, 10, 32, 35, 46, - 47, 58, 11, 13, 48, 57, 65, 70, - 97, 102, 9, 10, 32, 34, 44, 11, - 13, 9, 10, 32, 44, 11, 13, 9, - 10, 32, 44, 11, 13, 9, 10, 32, - 34, 44, 11, 13, 9, 10, 32, 34, - 44, 11, 13, 9, 10, 32, 34, 44, - 11, 13, 9, 10, 32, 34, 45, 46, - 11, 13, 48, 58, 65, 70, 71, 90, - 97, 102, 103, 122, 10, 32, 34, 9, - 13, 9, 10, 32, 34, 44, 11, 13, - 9, 10, 32, 34, 45, 46, 48, 58, - 65, 70, 71, 90, 97, 102, 103, 122, - 10, 34, 34, 9, 32, 44, 9, 32, - 34, 45, 46, 10, 13, 48, 58, 65, - 70, 71, 90, 97, 102, 103, 122, 9, - 32, 45, 10, 13, 65, 90, 97, 122, - 9, 32, 44, 45, 10, 13, 65, 90, - 97, 122, 9, 32, 34, 45, 46, 10, - 13, 48, 58, 65, 70, 71, 90, 97, - 102, 103, 122, 9, 32, 45, 10, 13, - 65, 90, 97, 122, 9, 10, 32, 35, - 45, 11, 13, 65, 90, 97, 122, 9, - 32, 47, 10, 13, 46, 58, 65, 70, - 97, 102, 9, 10, 32, 35, 47, 11, - 13, 46, 58, 65, 70, 97, 102, 9, - 10, 32, 35, 48, 57, 9, 10, 32, - 35, 11, 13, 48, 57, 9, 10, 32, - 35, 11, 13, 48, 57, 9, 32, 45, - 47, 10, 13, 46, 58, 65, 70, 71, + 34, 11, 13, 48, 57, 9, 10, 32, + 34, 11, 13, 48, 57, 9, 10, 32, + 34, 35, 11, 13, 48, 57, 9, 10, + 32, 34, 35, 45, 47, 11, 13, 46, + 58, 65, 70, 71, 90, 97, 102, 103, + 122, 9, 10, 32, 34, 95, 11, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 34, 61, 95, 11, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 34, 35, 61, 95, 11, + 13, 45, 46, 48, 57, 65, 90, 97, + 122, 9, 10, 32, 34, 44, 61, 95, + 11, 13, 45, 46, 48, 57, 65, 90, + 97, 122, 9, 10, 32, 34, 44, 95, + 11, 13, 45, 46, 48, 57, 65, 90, + 97, 122, 9, 10, 32, 34, 35, 44, + 95, 11, 13, 45, 46, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 34, 45, + 46, 58, 95, 48, 57, 65, 70, 71, 90, 97, 102, 103, 122, 9, 10, 32, - 35, 45, 47, 11, 13, 46, 58, 65, - 70, 71, 90, 97, 102, 103, 122, 9, - 10, 32, 34, 35, 11, 13, 48, 57, - 9, 32, 47, 10, 13, 46, 58, 65, - 70, 97, 102, 9, 32, 44, 47, 10, - 13, 46, 58, 65, 70, 97, 102, 9, - 32, 45, 46, 58, 48, 57, 65, 70, + 34, 45, 46, 61, 95, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 34, 45, + 47, 58, 61, 95, 46, 57, 65, 70, + 71, 90, 97, 102, 103, 122, 10, 34, + 48, 57, 9, 10, 32, 34, 48, 57, + 9, 10, 32, 34, 47, 46, 58, 65, + 70, 97, 102, 9, 10, 32, 34, 45, + 47, 58, 61, 95, 46, 57, 65, 70, + 71, 90, 97, 102, 103, 122, 9, 10, + 32, 34, 45, 47, 58, 61, 95, 11, + 13, 46, 57, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 10, 32, 34, 44, + 45, 47, 58, 61, 95, 11, 13, 46, + 57, 65, 70, 71, 90, 97, 102, 103, + 122, 9, 10, 32, 34, 45, 46, 58, + 48, 57, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 10, 32, 34, 45, 65, + 90, 97, 122, 9, 10, 32, 34, 46, + 47, 58, 48, 57, 65, 70, 97, 102, + 9, 10, 32, 34, 45, 47, 46, 58, + 65, 70, 71, 90, 97, 102, 103, 122, + 9, 10, 32, 34, 44, 11, 13, 48, + 57, 9, 10, 32, 34, 44, 11, 13, + 48, 57, 9, 10, 32, 34, 44, 47, + 11, 13, 46, 58, 65, 70, 97, 102, + 9, 10, 32, 34, 47, 11, 13, 46, + 58, 65, 70, 97, 102, 9, 10, 32, + 34, 45, 47, 58, 61, 95, 11, 13, + 46, 57, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 10, 32, 34, 44, 45, + 47, 58, 61, 95, 11, 13, 46, 57, + 65, 70, 71, 90, 97, 102, 103, 122, + 9, 10, 32, 34, 45, 46, 58, 11, + 13, 48, 57, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 10, 32, 34, 46, + 47, 58, 11, 13, 48, 57, 65, 70, + 97, 102, 9, 10, 32, 34, 35, 46, + 47, 58, 11, 13, 48, 57, 65, 70, + 97, 102, 10, 32, 34, 61, 95, 9, + 13, 45, 46, 48, 57, 65, 90, 97, + 122, 9, 10, 32, 35, 44, 11, 13, + 9, 10, 32, 34, 35, 44, 11, 13, + 9, 10, 32, 34, 35, 44, 11, 13, + 9, 10, 32, 34, 35, 44, 11, 13, + 9, 10, 32, 34, 35, 44, 11, 13, + 9, 10, 32, 34, 35, 44, 11, 13, + 9, 10, 32, 34, 35, 45, 46, 58, + 95, 11, 13, 48, 57, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 32, 34, + 44, 9, 32, 34, 45, 46, 10, 13, + 48, 58, 65, 70, 71, 90, 97, 102, + 103, 122, 32, 34, 9, 13, 9, 32, + 34, 44, 10, 13, 9, 32, 44, 10, + 13, 9, 32, 34, 44, 10, 13, 9, + 32, 34, 44, 10, 13, 9, 32, 34, + 44, 32, 34, 9, 13, 32, 34, 9, + 13, 9, 32, 34, 44, 10, 13, 9, + 32, 44, 10, 13, 9, 32, 34, 44, + 10, 13, 9, 32, 34, 44, 10, 13, + 9, 32, 34, 44, 32, 34, 9, 13, + 32, 34, 9, 13, 9, 32, 34, 44, + 9, 32, 34, 45, 10, 13, 65, 90, + 97, 122, 9, 32, 34, 44, 45, 10, + 13, 65, 90, 97, 122, 9, 32, 34, + 45, 46, 10, 13, 48, 58, 65, 70, 71, 90, 97, 102, 103, 122, 9, 32, - 46, 47, 58, 48, 57, 65, 70, 97, - 102, 9, 32, 44, 10, 13, 48, 57, - 9, 32, 44, 10, 13, 48, 57, 9, - 32, 45, 47, 10, 13, 46, 58, 65, + 34, 45, 10, 13, 65, 90, 97, 122, + 9, 10, 32, 34, 35, 45, 11, 13, + 65, 90, 97, 122, 9, 32, 34, 47, + 10, 13, 46, 58, 65, 70, 97, 102, + 9, 10, 32, 34, 35, 47, 11, 13, + 46, 58, 65, 70, 97, 102, 9, 10, + 32, 34, 35, 95, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 32, 34, 61, + 95, 45, 46, 48, 57, 65, 90, 97, + 122, 9, 10, 32, 34, 35, 11, 13, + 48, 57, 9, 10, 32, 34, 35, 11, + 13, 48, 57, 9, 32, 34, 45, 47, + 10, 13, 46, 58, 65, 70, 71, 90, + 97, 102, 103, 122, 9, 10, 32, 34, + 35, 45, 47, 11, 13, 46, 58, 65, 70, 71, 90, 97, 102, 103, 122, 9, - 32, 44, 45, 47, 10, 13, 46, 58, + 10, 32, 34, 35, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 32, 34, 61, 95, 10, 13, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 34, 35, 61, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 32, 34, 47, 10, 13, 46, 58, 65, + 70, 97, 102, 9, 32, 34, 44, 47, + 10, 13, 46, 58, 65, 70, 97, 102, + 9, 32, 34, 45, 46, 58, 48, 57, 65, 70, 71, 90, 97, 102, 103, 122, - 9, 32, 34, 45, 46, 58, 10, 13, - 48, 57, 65, 70, 71, 90, 97, 102, - 103, 122, 9, 32, 46, 47, 58, 10, + 9, 32, 34, 46, 47, 58, 48, 57, + 65, 70, 97, 102, 9, 32, 34, 44, + 10, 13, 48, 57, 9, 32, 34, 44, + 10, 13, 48, 57, 9, 32, 34, 45, + 47, 10, 13, 46, 58, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 32, 34, + 44, 45, 47, 10, 13, 46, 58, 65, + 70, 71, 90, 97, 102, 103, 122, 9, + 32, 34, 45, 46, 58, 10, 13, 48, + 57, 65, 70, 71, 90, 97, 102, 103, + 122, 9, 32, 34, 46, 47, 58, 10, 13, 48, 57, 65, 70, 97, 102, 9, - 10, 32, 35, 46, 47, 58, 11, 13, - 48, 57, 65, 70, 97, 102, 32, 34, - 9, 13, 32, 9, 13, 9, 32, 44, + 10, 32, 34, 35, 46, 47, 58, 11, + 13, 48, 57, 65, 70, 97, 102, 32, + 34, 9, 13, 32, 34, 9, 13, 9, + 32, 34, 44, 10, 13, 9, 32, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, - 34, 44, 10, 13, 9, 32, 34, 45, - 46, 10, 13, 48, 58, 65, 70, 71, - 90, 97, 102, 103, 122, 32, 34, 9, + 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, - 32, 34, 45, 46, 48, 58, 65, 70, - 71, 90, 97, 102, 103, 122, 9, 32, - 34, 45, 65, 90, 97, 122, 9, 32, - 34, 10, 13, 32, 34, 9, 13, 9, - 10, 32, 34, 35, 11, 13, 9, 10, - 32, 34, 35, 9, 10, 32, 35, 44, - 11, 13, 9, 10, 32, 34, 35, 45, - 46, 11, 13, 48, 58, 65, 70, 71, - 90, 97, 102, 103, 122, 9, 10, 32, - 34, 35, 11, 13, 9, 10, 32, 35, - 11, 13, 9, 10, 32, 35, 44, 11, - 13, 9, 10, 32, 35, 44, 11, 13, - 9, 10, 32, 34, 35, 44, 11, 13, - 9, 10, 32, 34, 35, 44, 11, 13, - 9, 10, 32, 34, 35, 44, 11, 13, - 9, 10, 32, 35, 44, 11, 13, 9, - 10, 32, 34, 35, 44, 11, 13, 9, - 10, 32, 34, 35, 44, 11, 13, 9, - 10, 32, 34, 35, 44, 11, 13, 9, - 10, 32, 34, 35, 44, 11, 13, 9, - 10, 32, 34, 35, 44, 11, 13, 9, - 10, 32, 34, 35, 45, 46, 11, 13, - 48, 58, 65, 70, 71, 90, 97, 102, - 103, 122, 9, 32, 34, 44, 9, 32, - 34, 45, 46, 10, 13, 48, 58, 65, - 70, 71, 90, 97, 102, 103, 122, 32, + 32, 34, 44, 32, 34, 9, 13, 32, 34, 9, 13, 9, 32, 34, 44, 10, 13, 9, 32, 44, 10, 13, 9, 32, - 34, 44, 10, 13, 9, 32, 34, 44, - 10, 13, 9, 32, 34, 44, 32, 34, - 9, 13, 32, 34, 9, 13, 9, 32, 34, 44, 10, 13, 9, 32, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, - 44, 32, 34, 9, 13, 32, 34, 9, - 13, 9, 32, 34, 44, 9, 32, 34, - 45, 10, 13, 65, 90, 97, 122, 9, - 32, 34, 44, 45, 10, 13, 65, 90, - 97, 122, 9, 32, 34, 45, 46, 10, - 13, 48, 58, 65, 70, 71, 90, 97, - 102, 103, 122, 9, 32, 34, 45, 10, - 13, 65, 90, 97, 122, 9, 10, 32, - 34, 35, 45, 11, 13, 65, 90, 97, - 122, 9, 32, 34, 47, 10, 13, 46, - 58, 65, 70, 97, 102, 9, 10, 32, - 34, 35, 47, 11, 13, 46, 58, 65, - 70, 97, 102, 9, 10, 32, 34, 35, - 48, 57, 9, 10, 32, 34, 35, 11, - 13, 48, 57, 9, 10, 32, 34, 35, - 11, 13, 48, 57, 9, 32, 34, 45, - 47, 10, 13, 46, 58, 65, 70, 71, - 90, 97, 102, 103, 122, 9, 10, 32, - 34, 35, 45, 47, 11, 13, 46, 58, - 65, 70, 71, 90, 97, 102, 103, 122, - 9, 10, 32, 34, 35, 11, 13, 48, - 57, 9, 32, 34, 47, 10, 13, 46, - 58, 65, 70, 97, 102, 9, 32, 34, - 44, 47, 10, 13, 46, 58, 65, 70, - 97, 102, 9, 32, 34, 45, 46, 58, - 48, 57, 65, 70, 71, 90, 97, 102, - 103, 122, 9, 32, 34, 46, 47, 58, - 48, 57, 65, 70, 97, 102, 9, 32, + 44, 10, 13, 9, 32, 34, 45, 46, + 10, 13, 48, 58, 65, 70, 71, 90, + 97, 102, 103, 122, 32, 34, 9, 13, + 9, 32, 34, 45, 10, 13, 65, 90, + 97, 122, 9, 32, 34, 44, 45, 10, + 13, 65, 90, 97, 122, 9, 32, 34, + 47, 10, 13, 46, 58, 65, 70, 97, + 102, 9, 32, 34, 44, 47, 10, 13, + 46, 58, 65, 70, 97, 102, 9, 32, 34, 44, 10, 13, 48, 57, 9, 32, 34, 44, 10, 13, 48, 57, 9, 32, 34, 45, 47, 10, 13, 46, 58, 65, 70, 71, 90, 97, 102, 103, 122, 9, 32, 34, 44, 45, 47, 10, 13, 46, 58, 65, 70, 71, 90, 97, 102, 103, - 122, 9, 32, 34, 45, 46, 58, 10, - 13, 48, 57, 65, 70, 71, 90, 97, - 102, 103, 122, 9, 32, 34, 46, 47, - 58, 10, 13, 48, 57, 65, 70, 97, - 102, 9, 10, 32, 34, 35, 46, 47, - 58, 11, 13, 48, 57, 65, 70, 97, - 102, 32, 34, 9, 13, 32, 34, 9, - 13, 9, 32, 34, 44, 10, 13, 9, - 32, 44, 10, 13, 9, 32, 34, 44, - 10, 13, 9, 32, 34, 44, 10, 13, - 9, 32, 44, 10, 13, 9, 32, 34, - 44, 10, 13, 9, 32, 34, 44, 10, - 13, 9, 32, 34, 44, 32, 34, 9, - 13, 32, 34, 9, 13, 9, 32, 34, - 44, 10, 13, 9, 32, 44, 10, 13, - 9, 32, 34, 44, 10, 13, 9, 32, + 122, 9, 32, 34, 44, 10, 13, 9, + 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, - 45, 46, 10, 13, 48, 58, 65, 70, - 71, 90, 97, 102, 103, 122, 32, 34, - 9, 13, 9, 32, 34, 45, 10, 13, - 65, 90, 97, 122, 9, 32, 34, 44, - 45, 10, 13, 65, 90, 97, 122, 9, - 32, 34, 47, 10, 13, 46, 58, 65, - 70, 97, 102, 9, 32, 34, 44, 47, - 10, 13, 46, 58, 65, 70, 97, 102, - 9, 32, 34, 44, 10, 13, 48, 57, - 9, 32, 34, 44, 10, 13, 48, 57, - 9, 32, 34, 45, 47, 10, 13, 46, - 58, 65, 70, 71, 90, 97, 102, 103, - 122, 9, 32, 34, 44, 45, 47, 10, - 13, 46, 58, 65, 70, 71, 90, 97, - 102, 103, 122, 9, 32, 34, 44, 10, + 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, + 44, 10, 13, 9, 32, 34, 44, 32, + 34, 9, 13, 32, 34, 9, 13, 9, + 32, 34, 45, 46, 61, 95, 10, 13, + 48, 57, 65, 90, 97, 122, 9, 32, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, - 44, 32, 34, 9, 13, 32, 34, 9, - 13, 9, 32, 34, 45, 10, 13, 65, - 90, 97, 122, 9, 32, 44, 10, 13, - 9, 32, 34, 44, 10, 13, 9, 32, - 34, 44, 10, 13, 9, 32, 34, 44, - 10, 13, 9, 32, 34, 44, 10, 13, - 9, 32, 34, 44, 10, 13, 9, 32, - 34, 44, 10, 13, 9, 32, 34, 44, - 10, 13, 9, 32, 34, 44, 10, 13, - 9, 32, 34, 44, 45, 10, 13, 65, + 44, 10, 13, 9, 32, 34, 44, 45, + 46, 61, 95, 10, 13, 48, 57, 65, 90, 97, 122, 9, 32, 34, 45, 46, 10, 13, 48, 58, 65, 70, 71, 90, 97, 102, 103, 122, 9, 32, 34, 45, 10, 13, 65, 90, 97, 122, 9, 10, 32, 34, 35, 45, 11, 13, 65, 90, - 97, 122, 9, 10, 32, 34, 35, 11, - 13, 10, 32, 34, 9, 13, 9, 10, - 32, 34, 35, 11, 13, 9, 10, 32, - 35, 44, 11, 13, 9, 10, 32, 34, - 35, 11, 13, 9, 10, 32, 35, 11, - 13, 9, 10, 32, 34, 35, 11, 13, - 9, 32, 34, 47, 10, 13, 46, 58, - 65, 70, 97, 102, 9, 32, 34, 48, - 57, 9, 32, 34, 48, 57, 9, 10, - 32, 34, 35, 47, 11, 13, 46, 58, - 65, 70, 97, 102, 9, 10, 32, 34, - 35, 48, 57, 9, 10, 32, 34, 35, - 11, 13, 48, 57, 9, 10, 32, 34, - 35, 11, 13, 48, 57, 9, 32, 34, - 45, 47, 10, 13, 46, 58, 65, 70, - 71, 90, 97, 102, 103, 122, 9, 32, - 34, 10, 13, 48, 57, 9, 32, 34, - 10, 13, 48, 57, 9, 10, 32, 34, - 35, 11, 13, 48, 57, 9, 10, 32, - 34, 35, 45, 47, 11, 13, 46, 58, - 65, 70, 71, 90, 97, 102, 103, 122, - 9, 10, 32, 34, 35, 11, 13, 48, - 57, 9, 32, 34, 47, 10, 13, 46, + 97, 122, 9, 10, 32, 34, 35, 95, + 11, 13, 45, 46, 48, 57, 65, 90, + 97, 122, 32, 34, 61, 95, 9, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 34, 35, 61, 95, 11, + 13, 45, 46, 48, 57, 65, 90, 97, + 122, 9, 10, 32, 34, 35, 95, 11, + 13, 45, 46, 48, 57, 65, 90, 97, + 122, 9, 10, 32, 34, 35, 95, 11, + 13, 45, 46, 48, 57, 65, 90, 97, + 122, 9, 32, 34, 47, 10, 13, 46, 58, 65, 70, 97, 102, 9, 32, 34, - 44, 47, 10, 13, 46, 58, 65, 70, - 97, 102, 9, 32, 34, 45, 46, 58, - 48, 57, 65, 70, 71, 90, 97, 102, - 103, 122, 9, 32, 34, 47, 46, 58, - 65, 70, 97, 102, 34, 48, 57, 9, - 32, 34, 48, 57, 9, 32, 34, 46, + 48, 57, 9, 32, 34, 48, 57, 9, + 10, 32, 34, 35, 47, 11, 13, 46, + 58, 65, 70, 97, 102, 9, 10, 32, + 34, 35, 95, 45, 46, 48, 57, 65, + 90, 97, 122, 9, 32, 34, 61, 95, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 34, 35, 11, 13, 48, + 57, 9, 10, 32, 34, 35, 11, 13, + 48, 57, 9, 32, 34, 45, 47, 10, + 13, 46, 58, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 32, 34, 10, 13, + 48, 57, 9, 32, 34, 10, 13, 48, + 57, 9, 10, 32, 34, 35, 11, 13, + 48, 57, 9, 10, 32, 34, 35, 45, + 47, 11, 13, 46, 58, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 10, 32, + 34, 35, 95, 11, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 32, 34, + 61, 95, 10, 13, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 34, + 35, 61, 95, 11, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 32, 34, + 44, 61, 95, 10, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 32, 34, + 44, 95, 10, 13, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 34, + 35, 44, 95, 11, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 10, 32, + 34, 35, 45, 46, 58, 95, 48, 57, + 65, 70, 71, 90, 97, 102, 103, 122, + 9, 32, 34, 45, 46, 61, 95, 48, + 57, 65, 90, 97, 122, 9, 32, 34, + 45, 47, 58, 61, 95, 46, 57, 65, + 70, 71, 90, 97, 102, 103, 122, 34, + 48, 57, 9, 32, 34, 48, 57, 9, + 32, 34, 47, 46, 58, 65, 70, 97, + 102, 9, 32, 34, 45, 47, 58, 61, + 95, 46, 57, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 32, 34, 45, 47, + 58, 61, 95, 10, 13, 46, 57, 65, + 70, 71, 90, 97, 102, 103, 122, 9, + 32, 34, 44, 45, 47, 58, 61, 95, + 10, 13, 46, 57, 65, 70, 71, 90, + 97, 102, 103, 122, 9, 32, 34, 45, + 46, 58, 48, 57, 65, 70, 71, 90, + 97, 102, 103, 122, 9, 32, 34, 46, 47, 58, 48, 57, 65, 70, 97, 102, 9, 32, 34, 45, 47, 46, 58, 65, 70, 71, 90, 97, 102, 103, 122, 9, 32, 34, 44, 10, 13, 48, 57, 9, 32, 34, 44, 10, 13, 48, 57, 9, - 32, 34, 45, 47, 10, 13, 46, 58, - 65, 70, 71, 90, 97, 102, 103, 122, - 9, 32, 34, 44, 45, 47, 10, 13, - 46, 58, 65, 70, 71, 90, 97, 102, - 103, 122, 9, 32, 34, 45, 46, 58, - 10, 13, 48, 57, 65, 70, 71, 90, - 97, 102, 103, 122, 9, 32, 34, 46, - 47, 58, 10, 13, 48, 57, 65, 70, - 97, 102, 9, 10, 32, 34, 35, 46, - 47, 58, 11, 13, 48, 57, 65, 70, - 97, 102, 9, 10, 32, 35, 44, 11, - 13, 9, 10, 32, 34, 35, 44, 11, - 13, 9, 10, 32, 34, 35, 44, 11, - 13, 9, 10, 32, 34, 35, 11, 13, - 34, 9, 10, 32, 44, 10, 32, 34, - 9, 13, 10, 32, 9, 13, 10, 34, - 9, 10, 32, 34, 45, 65, 90, 97, - 122, 9, 10, 32, 34, 11, 13, 9, - 10, 32, 34, 47, 46, 58, 65, 70, - 97, 102, 9, 10, 32, 34, 48, 57, - 9, 10, 32, 34, 48, 57, 10, 34, - 48, 57, 9, 10, 32, 34, 48, 57, - 9, 10, 32, 34, 45, 47, 46, 58, - 65, 70, 71, 90, 97, 102, 103, 122, - 9, 10, 32, 34, 11, 13, 48, 57, - 9, 10, 32, 34, 11, 13, 48, 57, - 9, 10, 32, 34, 35, 11, 13, 48, - 57, 9, 10, 32, 34, 44, 11, 13, + 32, 34, 44, 47, 10, 13, 46, 58, + 65, 70, 97, 102, 9, 32, 34, 47, + 10, 13, 46, 58, 65, 70, 97, 102, + 9, 32, 34, 45, 47, 58, 61, 95, + 10, 13, 46, 57, 65, 70, 71, 90, + 97, 102, 103, 122, 9, 32, 34, 44, + 45, 47, 58, 61, 95, 10, 13, 46, + 57, 65, 70, 71, 90, 97, 102, 103, + 122, 9, 32, 34, 45, 46, 58, 10, + 13, 48, 57, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 32, 34, 46, 47, + 58, 10, 13, 48, 57, 65, 70, 97, + 102, 9, 10, 32, 34, 35, 46, 47, + 58, 11, 13, 48, 57, 65, 70, 97, + 102, 32, 34, 61, 95, 9, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 35, 44, 11, 13, 9, 10, + 32, 34, 35, 44, 11, 13, 9, 10, + 32, 34, 35, 44, 11, 13, 9, 10, + 32, 34, 35, 11, 13, 9, 32, 34, + 45, 10, 13, 65, 90, 97, 122, 9, + 32, 34, 44, 45, 10, 13, 65, 90, + 97, 122, 9, 32, 34, 45, 47, 10, + 13, 46, 58, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 32, 34, 44, 45, + 47, 10, 13, 46, 58, 65, 70, 71, + 90, 97, 102, 103, 122, 34, 9, 10, + 32, 34, 45, 11, 13, 65, 90, 97, + 122, 9, 10, 32, 34, 44, 45, 11, + 13, 65, 90, 97, 122, 9, 10, 32, + 34, 45, 47, 11, 13, 46, 58, 65, + 70, 71, 90, 97, 102, 103, 122, 9, + 10, 32, 34, 44, 45, 47, 11, 13, + 46, 58, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 10, 32, 34, 44, 11, + 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, 45, 46, 11, 13, 48, 58, 65, 70, 71, 90, 97, 102, 103, - 122, 10, 32, 34, 9, 13, 9, 10, - 32, 34, 44, 10, 32, 34, 9, 13, - 10, 32, 34, 9, 13, 9, 10, 32, - 34, 44, 11, 13, 9, 10, 32, 44, - 11, 13, 9, 10, 32, 34, 44, 11, - 13, 9, 10, 32, 34, 44, 11, 13, - 9, 10, 32, 34, 44, 10, 32, 34, - 9, 13, 10, 32, 34, 9, 13, 9, - 10, 32, 34, 44, 9, 10, 32, 34, - 45, 11, 13, 65, 90, 97, 122, 9, - 10, 32, 34, 44, 45, 11, 13, 65, - 90, 97, 122, 9, 10, 32, 34, 45, - 46, 11, 13, 48, 58, 65, 70, 71, - 90, 97, 102, 103, 122, 9, 10, 32, - 34, 45, 11, 13, 65, 90, 97, 122, - 9, 10, 32, 34, 35, 45, 11, 13, + 122, 9, 10, 32, 34, 45, 11, 13, 65, 90, 97, 122, 9, 10, 32, 34, - 47, 11, 13, 46, 58, 65, 70, 97, - 102, 9, 10, 32, 34, 35, 47, 11, + 44, 45, 11, 13, 65, 90, 97, 122, + 9, 10, 32, 34, 45, 46, 11, 13, + 48, 58, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 10, 32, 34, 45, 11, + 13, 65, 90, 97, 122, 9, 10, 32, + 34, 35, 45, 11, 13, 65, 90, 97, + 122, 9, 10, 32, 34, 95, 11, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 10, 32, 34, 61, 95, 9, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 34, 35, 61, 95, 11, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 34, 35, 95, 11, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 34, 35, 95, 11, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 34, 47, 11, 13, 46, + 58, 65, 70, 97, 102, 9, 10, 32, + 34, 48, 57, 9, 10, 32, 34, 48, + 57, 9, 10, 32, 34, 35, 47, 11, 13, 46, 58, 65, 70, 97, 102, 9, - 10, 32, 34, 35, 11, 13, 48, 57, - 9, 10, 32, 34, 35, 11, 13, 48, - 57, 9, 10, 32, 34, 45, 47, 11, - 13, 46, 58, 65, 70, 71, 90, 97, - 102, 103, 122, 9, 10, 32, 34, 35, + 10, 32, 34, 95, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 34, + 61, 95, 45, 46, 48, 57, 65, 90, + 97, 122, 9, 10, 32, 34, 35, 11, + 13, 48, 57, 9, 10, 32, 34, 35, + 11, 13, 48, 57, 9, 10, 32, 34, 45, 47, 11, 13, 46, 58, 65, 70, 71, 90, 97, 102, 103, 122, 9, 10, - 32, 34, 47, 11, 13, 46, 58, 65, - 70, 97, 102, 9, 10, 32, 34, 44, - 47, 11, 13, 46, 58, 65, 70, 97, - 102, 9, 10, 32, 34, 45, 46, 58, - 48, 57, 65, 70, 71, 90, 97, 102, - 103, 122, 9, 10, 32, 34, 46, 47, + 32, 34, 11, 13, 48, 57, 9, 10, + 32, 34, 11, 13, 48, 57, 9, 10, + 32, 34, 35, 11, 13, 48, 57, 9, + 10, 32, 34, 35, 45, 47, 11, 13, + 46, 58, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 10, 32, 34, 95, 11, + 13, 45, 46, 48, 57, 65, 90, 97, + 122, 9, 10, 32, 34, 61, 95, 11, + 13, 45, 46, 48, 57, 65, 90, 97, + 122, 9, 10, 32, 34, 35, 61, 95, + 11, 13, 45, 46, 48, 57, 65, 90, + 97, 122, 9, 10, 32, 34, 44, 11, + 13, 9, 10, 32, 34, 47, 11, 13, + 46, 58, 65, 70, 97, 102, 9, 10, + 32, 34, 44, 47, 11, 13, 46, 58, + 65, 70, 97, 102, 9, 10, 32, 34, + 45, 46, 58, 48, 57, 65, 70, 71, + 90, 97, 102, 103, 122, 9, 10, 32, + 34, 47, 46, 58, 65, 70, 97, 102, + 10, 34, 48, 57, 9, 10, 32, 34, + 48, 57, 9, 10, 32, 34, 46, 47, 58, 48, 57, 65, 70, 97, 102, 9, + 10, 32, 34, 45, 47, 46, 58, 65, + 70, 71, 90, 97, 102, 103, 122, 9, 10, 32, 34, 44, 11, 13, 48, 57, 9, 10, 32, 34, 44, 11, 13, 48, 57, 9, 10, 32, 34, 45, 47, 11, @@ -682,39 +1150,8 @@ func Parse(input string) (*Conf, error) { 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, - 44, 11, 13, 9, 10, 32, 34, 44, - 11, 13, 9, 10, 32, 34, 44, 11, - 13, 9, 10, 32, 44, 11, 13, 9, - 10, 32, 34, 44, 11, 13, 9, 10, - 32, 34, 44, 11, 13, 9, 10, 32, - 34, 44, 11, 13, 9, 10, 32, 34, - 44, 11, 13, 9, 10, 32, 34, 44, - 11, 13, 9, 10, 32, 34, 44, 11, - 13, 9, 10, 32, 34, 44, 9, 10, - 32, 34, 45, 46, 11, 13, 48, 58, - 65, 70, 71, 90, 97, 102, 103, 122, - 10, 32, 34, 9, 13, 9, 10, 32, - 34, 44, 11, 13, 9, 10, 32, 44, - 11, 13, 9, 10, 32, 34, 44, 11, + 34, 11, 13, 9, 10, 32, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, - 9, 10, 32, 34, 45, 11, 13, 65, - 90, 97, 122, 9, 10, 32, 34, 44, - 45, 11, 13, 65, 90, 97, 122, 9, - 10, 32, 34, 47, 11, 13, 46, 58, - 65, 70, 97, 102, 9, 10, 32, 34, - 44, 47, 11, 13, 46, 58, 65, 70, - 97, 102, 9, 10, 32, 34, 44, 11, - 13, 48, 57, 9, 10, 32, 34, 44, - 11, 13, 48, 57, 9, 10, 32, 34, - 45, 47, 11, 13, 46, 58, 65, 70, - 71, 90, 97, 102, 103, 122, 9, 10, - 32, 34, 44, 45, 47, 11, 13, 46, - 58, 65, 70, 71, 90, 97, 102, 103, - 122, 10, 32, 34, 9, 13, 10, 32, - 34, 9, 13, 9, 10, 32, 34, 44, - 11, 13, 9, 10, 32, 34, 44, 11, - 13, 9, 10, 32, 34, 44, 10, 32, - 34, 9, 13, 10, 32, 34, 9, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, @@ -725,165 +1162,101 @@ func Parse(input string) (*Conf, error) { 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, - 44, 11, 13, 9, 10, 32, 34, 44, - 10, 32, 34, 9, 13, 10, 32, 34, - 9, 13, 9, 10, 32, 34, 45, 11, - 13, 65, 90, 97, 122, 9, 10, 32, - 34, 44, 45, 11, 13, 65, 90, 97, - 122, 9, 10, 32, 34, 45, 46, 11, - 13, 48, 58, 65, 70, 71, 90, 97, - 102, 103, 122, 9, 10, 32, 34, 45, - 11, 13, 65, 90, 97, 122, 9, 10, - 32, 34, 35, 45, 11, 13, 65, 90, - 97, 122, 9, 10, 32, 34, 47, 11, - 13, 46, 58, 65, 70, 97, 102, 9, - 10, 32, 34, 35, 47, 11, 13, 46, - 58, 65, 70, 97, 102, 9, 10, 32, - 34, 35, 11, 13, 48, 57, 9, 10, - 32, 34, 35, 11, 13, 48, 57, 9, - 10, 32, 34, 45, 47, 11, 13, 46, - 58, 65, 70, 71, 90, 97, 102, 103, - 122, 9, 10, 32, 34, 35, 45, 47, - 11, 13, 46, 58, 65, 70, 71, 90, - 97, 102, 103, 122, 9, 10, 32, 34, - 47, 11, 13, 46, 58, 65, 70, 97, - 102, 9, 10, 32, 34, 44, 47, 11, - 13, 46, 58, 65, 70, 97, 102, 9, - 10, 32, 34, 45, 46, 58, 48, 57, - 65, 70, 71, 90, 97, 102, 103, 122, - 9, 10, 32, 34, 46, 47, 58, 48, - 57, 65, 70, 97, 102, 9, 10, 32, - 34, 44, 11, 13, 48, 57, 9, 10, - 32, 34, 44, 11, 13, 48, 57, 9, - 10, 32, 34, 45, 47, 11, 13, 46, - 58, 65, 70, 71, 90, 97, 102, 103, - 122, 9, 10, 32, 34, 44, 45, 47, - 11, 13, 46, 58, 65, 70, 71, 90, - 97, 102, 103, 122, 9, 10, 32, 34, - 45, 46, 58, 11, 13, 48, 57, 65, - 70, 71, 90, 97, 102, 103, 122, 9, - 10, 32, 34, 46, 47, 58, 11, 13, - 48, 57, 65, 70, 97, 102, 9, 10, - 32, 34, 35, 46, 47, 58, 11, 13, - 48, 57, 65, 70, 97, 102, 9, 10, - 32, 34, 44, 11, 13, 9, 10, 32, - 34, 44, 11, 13, 9, 10, 32, 34, - 44, 11, 13, 9, 10, 32, 34, 44, - 9, 10, 32, 34, 11, 13, 10, 32, - 34, 9, 13, 10, 32, 34, 9, 13, - 9, 10, 32, 34, 44, 11, 13, 9, - 10, 32, 44, 11, 13, 9, 10, 32, - 34, 44, 11, 13, 9, 10, 32, 44, + 44, 10, 32, 34, 9, 13, 10, 32, + 34, 9, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, 44, 11, - 13, 9, 10, 32, 34, 44, 11, 13, - 9, 10, 32, 34, 44, 11, 13, 9, - 10, 32, 34, 45, 46, 11, 13, 48, - 58, 65, 70, 71, 90, 97, 102, 103, - 122, 9, 10, 32, 34, 45, 11, 13, + 13, 9, 10, 32, 34, 44, 9, 10, + 32, 34, 11, 13, 10, 32, 34, 9, + 13, 10, 32, 34, 9, 13, 9, 10, + 32, 34, 44, 11, 13, 9, 10, 32, + 34, 44, 11, 13, 10, 32, 34, 61, + 95, 9, 13, 45, 46, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 34, 44, + 61, 95, 11, 13, 45, 46, 48, 57, 65, 90, 97, 122, 9, 10, 32, 34, - 44, 45, 11, 13, 65, 90, 97, 122, - 9, 10, 32, 34, 45, 46, 11, 13, - 48, 58, 65, 70, 71, 90, 97, 102, - 103, 122, 9, 10, 32, 34, 45, 11, - 13, 65, 90, 97, 122, 9, 10, 32, - 34, 35, 45, 11, 13, 65, 90, 97, - 122, 9, 10, 32, 34, 47, 11, 13, - 46, 58, 65, 70, 97, 102, 9, 10, - 32, 34, 35, 47, 11, 13, 46, 58, - 65, 70, 97, 102, 9, 10, 32, 34, - 35, 11, 13, 48, 57, 9, 10, 32, - 34, 35, 11, 13, 48, 57, 9, 10, - 32, 34, 45, 47, 11, 13, 46, 58, - 65, 70, 71, 90, 97, 102, 103, 122, - 9, 10, 32, 34, 35, 45, 47, 11, - 13, 46, 58, 65, 70, 71, 90, 97, - 102, 103, 122, 9, 10, 32, 34, 47, - 11, 13, 46, 58, 65, 70, 97, 102, - 9, 10, 32, 34, 44, 47, 11, 13, - 46, 58, 65, 70, 97, 102, 9, 10, - 32, 34, 45, 46, 58, 48, 57, 65, + 44, 95, 11, 13, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 34, + 35, 44, 95, 11, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 9, 10, 32, + 34, 45, 46, 58, 95, 48, 57, 65, 70, 71, 90, 97, 102, 103, 122, 9, - 10, 32, 34, 46, 47, 58, 48, 57, - 65, 70, 97, 102, 9, 10, 32, 34, - 44, 11, 13, 48, 57, 9, 10, 32, - 34, 44, 11, 13, 48, 57, 9, 10, - 32, 34, 45, 47, 11, 13, 46, 58, + 10, 32, 34, 45, 46, 61, 95, 48, + 57, 65, 90, 97, 122, 9, 10, 32, + 34, 45, 47, 58, 61, 95, 46, 57, 65, 70, 71, 90, 97, 102, 103, 122, - 9, 10, 32, 34, 44, 45, 47, 11, - 13, 46, 58, 65, 70, 71, 90, 97, - 102, 103, 122, 9, 10, 32, 34, 45, - 46, 58, 11, 13, 48, 57, 65, 70, - 71, 90, 97, 102, 103, 122, 9, 10, - 32, 34, 46, 47, 58, 11, 13, 48, - 57, 65, 70, 97, 102, 9, 10, 32, - 34, 35, 46, 47, 58, 11, 13, 48, - 57, 65, 70, 97, 102, 9, 10, 32, - 34, 44, 11, 13, 9, 10, 32, 34, - 44, 11, 13, 9, 10, 32, 34, 44, - 11, 13, 9, 10, 32, 34, 11, 13, - 9, 10, 32, 44, 11, 13, 9, 10, - 32, 34, 44, 11, 13, 9, 10, 32, - 34, 44, 11, 13, 9, 10, 32, 44, - 11, 13, 9, 10, 32, 34, 44, 11, - 13, 9, 10, 32, 34, 44, 11, 13, - 9, 10, 32, 34, 44, 11, 13, 9, - 10, 32, 34, 44, 11, 13, 9, 10, - 32, 34, 44, 11, 13, 9, 10, 32, - 34, 44, 11, 13, 9, 10, 32, 34, - 44, 11, 13, 9, 10, 32, 34, 44, - 11, 13, 9, 10, 32, 34, 44, 11, - 13, 9, 10, 32, 34, 44, 10, 32, - 34, 9, 13, 10, 32, 34, 9, 13, - 9, 10, 32, 34, 44, 11, 13, 9, - 10, 32, 34, 44, 11, 13, 9, 10, - 32, 34, 44, 9, 10, 32, 34, 11, - 13, 10, 32, 34, 9, 13, 10, 32, - 34, 9, 13, 9, 10, 32, 34, 44, - 11, 13, 9, 10, 32, 34, 44, 11, + 9, 10, 32, 34, 45, 47, 58, 61, + 95, 46, 57, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 10, 32, 35, 44, + 11, 13, 9, 10, 32, 34, 35, 44, + 11, 13, 9, 10, 32, 34, 35, 44, + 11, 13, 9, 10, 32, 34, 35, 11, 13, 9, 10, 32, 34, 44, 11, 13, 9, 10, 32, 34, 44, 11, 13, 10, - 34, 9, 10, 32, 35, 44, 11, 13, - 9, 10, 32, 34, 35, 11, 13, 9, - 10, 32, 34, 35, 11, 13, 9, 10, - 32, 35, 11, 13, 9, 10, 32, 35, - 44, 11, 13, 9, 10, 32, 34, 35, - 44, 11, 13, 9, 10, 32, 34, 35, - 44, 11, 13, 9, 10, 32, 34, 35, + 34, 34, 61, 95, 45, 46, 48, 57, + 65, 90, 97, 122, 34, 95, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 10, + 32, 34, 35, 95, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 35, 44, 11, 13, 9, 10, 32, 34, 35, - 11, 13, 9, 32, 34, 44, 9, 32, - 34, 10, 13, 32, 34, 9, 13, 32, - 34, 9, 13, 9, 32, 34, 44, 10, + 95, 11, 13, 45, 46, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 34, 35, + 11, 13, 9, 10, 32, 35, 11, 13, + 9, 10, 32, 35, 44, 11, 13, 9, + 10, 32, 34, 35, 44, 11, 13, 9, + 10, 32, 34, 35, 44, 11, 13, 9, + 10, 32, 34, 35, 44, 11, 13, 9, + 10, 32, 34, 35, 95, 11, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 32, 34, 44, 9, 32, 34, 10, 13, + 32, 34, 9, 13, 32, 34, 9, 13, + 9, 32, 34, 44, 10, 13, 9, 32, + 44, 10, 13, 9, 32, 34, 44, 10, 13, 9, 32, 44, 10, 13, 9, 32, - 34, 44, 10, 13, 9, 32, 44, 10, - 13, 9, 32, 34, 44, 10, 13, 9, - 32, 34, 44, 10, 13, 9, 32, 34, - 44, 10, 13, 9, 32, 34, 45, 46, - 10, 13, 48, 58, 65, 70, 71, 90, - 97, 102, 103, 122, 9, 32, 34, 45, + 34, 44, 10, 13, 9, 32, 34, 44, + 10, 13, 9, 32, 34, 44, 10, 13, + 9, 32, 34, 45, 46, 10, 13, 48, + 58, 65, 70, 71, 90, 97, 102, 103, + 122, 9, 32, 34, 45, 10, 13, 65, + 90, 97, 122, 9, 32, 34, 44, 45, 10, 13, 65, 90, 97, 122, 9, 32, - 34, 44, 45, 10, 13, 65, 90, 97, - 122, 9, 32, 34, 45, 46, 10, 13, - 48, 58, 65, 70, 71, 90, 97, 102, - 103, 122, 9, 32, 34, 45, 10, 13, + 34, 45, 46, 10, 13, 48, 58, 65, + 70, 71, 90, 97, 102, 103, 122, 9, + 32, 34, 45, 10, 13, 65, 90, 97, + 122, 9, 10, 32, 34, 35, 45, 11, + 13, 65, 90, 97, 122, 9, 10, 32, + 34, 35, 95, 11, 13, 45, 46, 48, + 57, 65, 90, 97, 122, 32, 34, 61, + 95, 9, 13, 45, 46, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 34, 35, + 61, 95, 11, 13, 45, 46, 48, 57, 65, 90, 97, 122, 9, 10, 32, 34, - 35, 45, 11, 13, 65, 90, 97, 122, - 9, 10, 32, 34, 35, 11, 13, 9, - 32, 34, 47, 10, 13, 46, 58, 65, - 70, 97, 102, 9, 32, 34, 48, 57, - 9, 32, 34, 48, 57, 9, 10, 32, - 34, 35, 47, 11, 13, 46, 58, 65, - 70, 97, 102, 9, 10, 32, 34, 35, - 48, 57, 9, 10, 32, 34, 35, 11, - 13, 48, 57, 9, 10, 32, 34, 35, - 11, 13, 48, 57, 9, 32, 34, 45, - 47, 10, 13, 46, 58, 65, 70, 71, - 90, 97, 102, 103, 122, 9, 32, 34, - 10, 13, 48, 57, 9, 32, 34, 10, - 13, 48, 57, 9, 10, 32, 34, 35, + 35, 95, 11, 13, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 10, 32, 34, + 35, 95, 11, 13, 45, 46, 48, 57, + 65, 90, 97, 122, 9, 32, 34, 47, + 10, 13, 46, 58, 65, 70, 97, 102, + 9, 32, 34, 48, 57, 9, 32, 34, + 48, 57, 9, 10, 32, 34, 35, 47, + 11, 13, 46, 58, 65, 70, 97, 102, + 9, 10, 32, 34, 35, 95, 45, 46, + 48, 57, 65, 90, 97, 122, 9, 32, + 34, 61, 95, 45, 46, 48, 57, 65, + 90, 97, 122, 9, 10, 32, 34, 35, 11, 13, 48, 57, 9, 10, 32, 34, - 35, 45, 47, 11, 13, 46, 58, 65, - 70, 71, 90, 97, 102, 103, 122, 9, - 10, 32, 34, 35, 11, 13, 48, 57, + 35, 11, 13, 48, 57, 9, 32, 34, + 45, 47, 10, 13, 46, 58, 65, 70, + 71, 90, 97, 102, 103, 122, 9, 32, + 34, 10, 13, 48, 57, 9, 32, 34, + 10, 13, 48, 57, 9, 10, 32, 34, + 35, 11, 13, 48, 57, 9, 10, 32, + 34, 35, 45, 47, 11, 13, 46, 58, + 65, 70, 71, 90, 97, 102, 103, 122, + 9, 10, 32, 34, 35, 95, 11, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 32, 34, 61, 95, 10, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 34, 35, 61, 95, 11, 13, + 45, 46, 48, 57, 65, 90, 97, 122, 9, 32, 34, 44, 10, 13, 9, 32, 34, 47, 10, 13, 46, 58, 65, 70, 97, 102, 9, 32, 34, 44, 47, 10, @@ -926,293 +1299,375 @@ func Parse(input string) (*Conf, error) { 44, 9, 32, 34, 10, 13, 32, 34, 9, 13, 32, 34, 9, 13, 9, 32, 34, 44, 10, 13, 9, 32, 34, 44, - 10, 13, 9, 10, 32, 35, 44, 11, - 13, 9, 10, 32, 34, 35, 44, 11, - 13, 9, 10, 32, 34, 35, 44, 11, - 13, 9, 10, 32, 34, 35, 11, 13, - 9, 32, 44, 10, 13, 9, 32, 34, - 44, 10, 13, 9, 32, 34, 44, 10, - 13, 32, 35, 104, 9, 13, 32, 35, - 104, 9, 13, 34, 34, 34, + 10, 13, 32, 34, 61, 95, 9, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 32, 34, 44, 61, 95, 10, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 32, 34, 44, 95, 10, 13, 45, + 46, 48, 57, 65, 90, 97, 122, 9, + 10, 32, 34, 35, 44, 95, 11, 13, + 45, 46, 48, 57, 65, 90, 97, 122, + 9, 10, 32, 34, 35, 45, 46, 58, + 95, 48, 57, 65, 70, 71, 90, 97, + 102, 103, 122, 9, 32, 34, 45, 46, + 61, 95, 48, 57, 65, 90, 97, 122, + 9, 32, 34, 45, 47, 58, 61, 95, + 46, 57, 65, 70, 71, 90, 97, 102, + 103, 122, 9, 32, 34, 45, 47, 58, + 61, 95, 46, 57, 65, 70, 71, 90, + 97, 102, 103, 122, 9, 10, 32, 35, + 44, 11, 13, 9, 10, 32, 34, 35, + 44, 11, 13, 9, 10, 32, 34, 35, + 44, 11, 13, 9, 10, 32, 34, 35, + 11, 13, 9, 32, 44, 10, 13, 9, + 32, 34, 44, 10, 13, 9, 32, 34, + 44, 10, 13, 32, 35, 104, 9, 13, + 32, 35, 104, 9, 13, 34, 34, 34, } var _scanner_single_lengths []byte = []byte{ 0, 1, 1, 1, 1, 2, 3, 1, 3, 3, 1, 3, 4, 3, 3, 1, - 4, 4, 1, 4, 3, 2, 2, 0, - 2, 4, 3, 2, 4, 5, 2, 4, - 4, 4, 5, 1, 3, 2, 1, 3, - 4, 4, 4, 3, 4, 4, 1, 4, - 3, 2, 5, 5, 2, 4, 5, 4, - 4, 4, 3, 3, 1, 3, 5, 4, - 3, 4, 3, 2, 4, 5, 5, 5, - 6, 5, 4, 3, 5, 5, 5, 4, - 5, 6, 6, 6, 5, 6, 6, 5, - 5, 4, 4, 2, 4, 6, 4, 4, - 5, 4, 5, 5, 2, 5, 6, 5, - 4, 5, 6, 6, 6, 7, 4, 3, - 3, 1, 3, 5, 3, 3, 5, 5, - 5, 6, 6, 5, 3, 4, 4, 4, - 4, 4, 3, 2, 4, 5, 1, 3, + 4, 5, 1, 2, 1, 5, 4, 4, + 3, 2, 5, 3, 2, 2, 0, 2, + 4, 3, 2, 4, 6, 2, 3, 6, + 5, 5, 4, 4, 4, 5, 1, 3, 2, 1, 3, 4, 4, 4, 3, 4, - 4, 1, 4, 3, 2, 5, 5, 2, - 4, 4, 2, 4, 5, 5, 5, 4, + 4, 1, 4, 3, 2, 5, 6, 2, + 4, 5, 4, 4, 4, 3, 3, 1, + 3, 5, 4, 3, 4, 5, 4, 6, 5, 5, 3, 2, 4, 5, 5, 5, - 4, 3, 5, 6, 5, 4, 3, 5, - 5, 5, 4, 5, 6, 6, 6, 5, - 6, 6, 5, 5, 4, 4, 2, 4, - 6, 4, 4, 5, 4, 6, 4, 5, - 6, 4, 5, 4, 5, 4, 4, 5, - 6, 4, 5, 6, 6, 4, 4, 5, - 6, 7, 6, 7, 5, 4, 4, 5, - 5, 5, 6, 3, 5, 6, 2, 1, - 3, 5, 3, 4, 5, 3, 5, 3, - 5, 4, 4, 4, 4, 6, 5, 3, + 6, 5, 4, 3, 5, 5, 4, 3, + 6, 5, 7, 7, 8, 8, 5, 4, + 5, 6, 6, 6, 8, 8, 9, 4, + 4, 2, 4, 5, 9, 4, 4, 5, + 5, 5, 7, 6, 6, 5, 6, 6, + 5, 6, 4, 5, 5, 2, 3, 2, + 6, 5, 8, 6, 7, 7, 5, 4, + 5, 6, 6, 6, 9, 7, 8, 3, + 3, 1, 3, 4, 8, 3, 3, 5, + 6, 4, 7, 6, 6, 5, 6, 6, + 5, 5, 3, 4, 4, 4, 4, 4, + 3, 2, 4, 5, 1, 3, 2, 1, + 3, 4, 4, 4, 3, 4, 4, 1, + 4, 3, 2, 5, 6, 2, 4, 4, + 2, 4, 5, 5, 5, 4, 5, 5, + 3, 2, 4, 5, 5, 5, 4, 3, + 5, 6, 5, 4, 3, 5, 5, 4, + 3, 6, 5, 5, 4, 6, 5, 6, + 5, 4, 5, 6, 6, 6, 5, 5, + 4, 3, 5, 4, 5, 5, 5, 3, + 3, 5, 4, 5, 5, 5, 3, 3, + 5, 3, 3, 5, 4, 6, 4, 5, + 6, 4, 5, 4, 5, 4, 5, 4, + 4, 5, 6, 5, 5, 6, 4, 5, + 6, 6, 4, 4, 5, 6, 7, 6, + 7, 5, 4, 4, 5, 5, 5, 6, + 3, 5, 6, 2, 1, 3, 5, 3, + 4, 5, 3, 5, 3, 5, 5, 4, + 4, 4, 4, 6, 6, 4, 6, 3, 4, 5, 5, 3, 3, 4, 5, 6, 5, 7, 2, 1, 3, 4, 4, 4, 5, 2, 4, 5, 4, 3, 2, 5, - 5, 5, 7, 5, 4, 5, 5, 6, - 6, 6, 5, 6, 6, 6, 6, 6, - 7, 4, 5, 2, 4, 3, 4, 4, - 4, 2, 2, 4, 3, 4, 4, 4, - 2, 2, 4, 4, 5, 5, 4, 6, - 4, 6, 5, 5, 5, 5, 7, 5, - 4, 5, 6, 6, 4, 4, 5, 6, - 6, 6, 8, 2, 2, 4, 3, 4, - 4, 3, 4, 4, 4, 2, 2, 4, - 3, 4, 3, 4, 4, 4, 5, 2, - 4, 5, 4, 5, 4, 4, 5, 6, - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 2, 2, 4, 3, - 4, 4, 4, 4, 4, 4, 4, 4, - 5, 5, 4, 6, 5, 3, 5, 5, - 5, 4, 5, 4, 3, 3, 6, 5, - 5, 5, 5, 3, 3, 5, 7, 5, - 4, 5, 6, 4, 1, 3, 6, 5, - 4, 4, 5, 6, 6, 6, 8, 5, - 6, 6, 5, 1, 4, 3, 2, 2, - 5, 4, 5, 4, 4, 2, 4, 6, - 4, 4, 5, 5, 5, 6, 3, 5, - 3, 3, 5, 4, 5, 5, 5, 3, - 3, 5, 5, 6, 6, 5, 6, 5, - 6, 5, 5, 6, 7, 5, 6, 7, - 7, 5, 5, 6, 7, 7, 7, 8, - 5, 5, 5, 4, 5, 5, 4, 5, - 5, 5, 5, 5, 5, 5, 6, 3, - 5, 4, 5, 5, 5, 6, 5, 6, - 5, 5, 6, 7, 3, 3, 5, 5, - 5, 3, 3, 5, 4, 5, 5, 5, + 6, 3, 2, 6, 5, 9, 6, 7, + 5, 4, 6, 7, 8, 7, 8, 3, + 5, 4, 5, 5, 8, 7, 8, 8, + 9, 8, 9, 6, 6, 6, 8, 5, + 6, 5, 6, 6, 5, 6, 5, 6, + 5, 6, 5, 5, 6, 7, 5, 6, + 7, 5, 6, 7, 7, 5, 5, 6, + 7, 7, 7, 8, 3, 3, 5, 4, + 5, 5, 4, 5, 5, 5, 4, 3, + 2, 2, 3, 3, 5, 4, 5, 4, + 5, 5, 5, 6, 3, 5, 6, 5, + 6, 5, 5, 6, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 3, 3, 5, 6, 6, 5, 6, 5, - 6, 5, 5, 6, 7, 5, 6, 7, - 7, 5, 5, 6, 7, 7, 7, 8, - 5, 5, 5, 5, 4, 3, 3, 5, - 4, 5, 4, 5, 5, 5, 6, 5, - 6, 6, 5, 6, 5, 6, 5, 5, - 6, 7, 5, 6, 7, 7, 5, 5, - 6, 7, 7, 7, 8, 5, 5, 5, - 4, 4, 5, 5, 4, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 3, - 3, 5, 5, 5, 4, 3, 3, 5, - 5, 5, 5, 2, 5, 5, 5, 4, - 5, 6, 6, 6, 5, 4, 3, 2, - 2, 4, 3, 4, 3, 4, 4, 4, - 5, 4, 5, 5, 4, 6, 5, 4, - 3, 3, 6, 5, 5, 5, 5, 3, - 3, 5, 7, 5, 4, 4, 5, 6, - 4, 1, 3, 6, 5, 4, 4, 5, - 6, 6, 6, 8, 4, 4, 4, 3, - 3, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 2, 2, 4, - 4, 4, 3, 2, 2, 4, 4, 5, - 6, 6, 5, 3, 4, 4, 3, 3, - 1, 1, 1, + 5, 3, 3, 8, 4, 3, 5, 5, + 4, 3, 6, 5, 5, 4, 5, 4, + 5, 5, 5, 5, 5, 5, 5, 5, + 9, 6, 5, 6, 5, 5, 7, 6, + 6, 5, 4, 4, 6, 5, 6, 5, + 5, 6, 4, 4, 5, 7, 5, 6, + 7, 7, 6, 7, 8, 8, 9, 2, + 4, 5, 9, 9, 10, 7, 5, 7, + 6, 5, 5, 6, 5, 9, 10, 7, + 7, 8, 5, 5, 6, 6, 6, 6, + 6, 9, 4, 5, 2, 4, 3, 4, + 4, 4, 2, 2, 4, 3, 4, 4, + 4, 2, 2, 4, 4, 5, 5, 4, + 6, 4, 6, 6, 5, 5, 5, 5, + 7, 6, 5, 7, 4, 5, 6, 6, + 4, 4, 5, 6, 6, 6, 8, 2, + 2, 4, 3, 4, 4, 3, 4, 4, + 4, 2, 2, 4, 3, 4, 3, 4, + 4, 4, 5, 2, 4, 5, 4, 5, + 4, 4, 5, 6, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 2, 2, 7, 3, 4, 4, 4, 4, + 4, 4, 4, 4, 8, 5, 4, 6, + 6, 4, 7, 6, 6, 4, 3, 3, + 6, 6, 5, 5, 5, 5, 3, 3, + 5, 7, 6, 5, 7, 6, 5, 7, + 9, 7, 8, 1, 3, 4, 8, 8, + 9, 6, 6, 5, 4, 4, 5, 4, + 8, 9, 6, 6, 8, 4, 5, 6, + 6, 5, 4, 5, 5, 6, 1, 5, + 6, 6, 7, 5, 5, 5, 6, 5, + 6, 6, 5, 6, 5, 5, 7, 6, + 6, 5, 4, 4, 6, 5, 6, 5, + 5, 6, 4, 4, 5, 7, 5, 6, + 7, 5, 5, 6, 7, 5, 2, 4, + 7, 6, 5, 5, 6, 7, 7, 7, + 8, 5, 5, 5, 4, 4, 5, 5, + 4, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 3, 3, 5, 5, 5, + 4, 3, 3, 5, 5, 5, 7, 6, + 7, 8, 8, 9, 9, 5, 6, 6, + 5, 5, 5, 2, 3, 2, 6, 5, + 6, 5, 4, 5, 6, 6, 6, 6, + 4, 3, 2, 2, 4, 3, 4, 3, + 4, 4, 4, 5, 4, 5, 5, 4, + 6, 6, 4, 7, 6, 6, 4, 3, + 3, 6, 6, 5, 5, 5, 5, 3, + 3, 5, 7, 6, 5, 7, 4, 4, + 5, 6, 4, 1, 3, 6, 5, 4, + 4, 5, 6, 6, 6, 8, 4, 4, + 4, 3, 3, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 2, + 2, 4, 4, 4, 3, 2, 2, 4, + 4, 4, 6, 5, 7, 9, 7, 8, + 8, 5, 6, 6, 5, 3, 4, 4, + 3, 3, 1, 1, 1, } var _scanner_range_lengths []byte = []byte{ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 5, 2, 1, 1, - 1, 0, 0, 1, 3, 1, 1, 1, - 1, 5, 2, 2, 2, 1, 1, 1, - 1, 1, 5, 0, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 2, - 1, 1, 1, 0, 0, 0, 5, 2, - 1, 3, 1, 1, 1, 1, 5, 2, - 2, 2, 1, 1, 1, 1, 1, 1, - 5, 2, 1, 1, 1, 1, 1, 1, + 1, 4, 0, 4, 4, 4, 1, 4, + 4, 4, 4, 3, 1, 1, 1, 1, + 5, 2, 2, 2, 5, 1, 5, 5, + 5, 5, 1, 1, 1, 5, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 1, 1, 1, 1, 5, 2, 2, - 2, 1, 1, 1, 0, 1, 5, 1, - 1, 1, 1, 1, 1, 5, 3, 1, - 1, 1, 1, 5, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 5, 0, 0, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 2, 1, 1, 1, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 2, 1, 1, 1, 4, 0, + 0, 5, 2, 1, 3, 1, 1, 1, + 1, 5, 2, 2, 2, 5, 5, 5, + 5, 5, 1, 1, 1, 1, 1, 1, + 5, 2, 1, 1, 1, 4, 4, 4, + 4, 1, 5, 3, 5, 5, 1, 1, + 1, 1, 1, 1, 5, 3, 5, 1, + 1, 1, 1, 3, 5, 2, 2, 2, + 5, 5, 5, 5, 5, 1, 1, 1, + 1, 5, 1, 1, 1, 0, 4, 4, + 4, 1, 5, 3, 5, 5, 1, 1, + 1, 1, 1, 1, 5, 3, 5, 1, + 1, 1, 1, 3, 5, 2, 2, 2, + 5, 5, 5, 5, 5, 1, 1, 1, + 1, 5, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 5, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, + 2, 1, 1, 1, 4, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 1, 1, 1, 1, - 5, 2, 2, 2, 1, 6, 3, 3, - 6, 3, 3, 4, 4, 2, 2, 6, - 6, 4, 4, 5, 3, 2, 2, 6, - 6, 6, 4, 4, 1, 1, 1, 1, - 1, 1, 6, 1, 1, 5, 0, 0, - 0, 6, 3, 3, 6, 3, 3, 4, - 4, 1, 2, 2, 6, 6, 2, 4, + 1, 5, 2, 1, 1, 1, 4, 4, + 4, 4, 1, 5, 5, 5, 5, 5, + 1, 1, 1, 1, 1, 1, 5, 0, + 1, 1, 1, 1, 1, 1, 0, 1, + 1, 1, 1, 1, 1, 0, 1, 1, + 0, 1, 1, 1, 1, 6, 3, 3, + 6, 3, 3, 4, 4, 4, 4, 2, + 2, 6, 6, 5, 5, 5, 4, 4, + 5, 3, 2, 2, 6, 6, 6, 4, + 4, 1, 1, 1, 1, 1, 1, 6, + 1, 1, 5, 0, 0, 0, 6, 3, + 3, 6, 3, 3, 4, 4, 4, 4, + 2, 2, 6, 6, 5, 5, 5, 4, 4, 5, 3, 2, 2, 6, 6, 6, 4, 4, 1, 1, 1, 1, 1, 1, 6, 1, 1, 5, 2, 1, 1, 1, - 0, 1, 6, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 6, 0, 6, 1, 1, 1, 1, 1, - 0, 1, 1, 1, 1, 1, 1, 0, - 1, 1, 0, 3, 3, 6, 3, 3, - 4, 4, 1, 2, 2, 6, 6, 2, - 4, 4, 5, 3, 2, 2, 6, 6, - 6, 4, 4, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 6, 1, - 3, 3, 4, 4, 2, 2, 6, 6, + 4, 4, 4, 4, 1, 6, 4, 4, + 5, 5, 5, 6, 6, 6, 6, 5, + 1, 1, 1, 1, 6, 4, 4, 6, + 6, 6, 6, 1, 1, 1, 6, 0, + 6, 3, 3, 6, 3, 3, 4, 4, + 4, 4, 2, 2, 6, 6, 5, 5, + 5, 4, 4, 5, 3, 2, 2, 6, + 6, 6, 4, 4, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 0, 1, + 1, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 6, 1, 3, 3, 4, + 4, 2, 2, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 3, 1, + 0, 1, 1, 4, 1, 1, 1, 4, + 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 6, 3, 3, 1, 1, 1, 1, - 1, 1, 1, 4, 1, 1, 4, 1, - 2, 2, 6, 2, 2, 2, 6, 2, - 4, 4, 5, 3, 1, 1, 3, 5, + 4, 6, 3, 3, 5, 5, 5, 5, + 5, 4, 1, 1, 4, 4, 4, 2, + 2, 6, 2, 2, 2, 6, 5, 5, + 5, 5, 5, 5, 5, 3, 5, 1, + 1, 3, 5, 6, 6, 5, 2, 3, + 5, 2, 2, 4, 4, 6, 6, 6, + 4, 4, 5, 1, 1, 1, 1, 1, + 1, 6, 0, 6, 1, 1, 1, 1, + 1, 0, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 0, 3, 3, 6, 3, + 3, 4, 4, 4, 4, 2, 2, 6, + 6, 5, 5, 5, 4, 4, 5, 3, 2, 2, 6, 6, 6, 4, 4, 1, - 1, 1, 1, 0, 0, 1, 1, 0, - 2, 1, 3, 1, 1, 1, 1, 5, - 2, 2, 2, 1, 1, 6, 1, 0, - 1, 1, 1, 1, 1, 1, 0, 1, - 1, 0, 3, 3, 6, 3, 3, 4, - 4, 2, 2, 6, 6, 4, 4, 5, - 3, 2, 2, 6, 6, 6, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 6, 1, - 1, 1, 1, 1, 3, 3, 4, 4, - 2, 2, 6, 6, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 6, 1, 3, 3, 4, 4, + 2, 2, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 1, 1, 3, 3, 6, 3, 3, 4, - 4, 2, 2, 6, 6, 4, 4, 5, - 3, 2, 2, 6, 6, 6, 4, 4, - 1, 1, 1, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 6, 3, - 3, 6, 3, 3, 4, 4, 2, 2, - 6, 6, 4, 4, 5, 3, 2, 2, - 6, 6, 6, 4, 4, 1, 1, 1, + 1, 1, 4, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 4, 6, 3, 3, + 5, 5, 5, 5, 5, 4, 1, 1, + 4, 4, 4, 2, 2, 6, 2, 2, + 2, 6, 5, 5, 5, 5, 5, 5, + 5, 3, 5, 1, 1, 3, 5, 6, + 6, 5, 3, 5, 2, 2, 4, 4, + 6, 6, 6, 4, 4, 5, 1, 1, + 1, 1, 3, 3, 6, 6, 0, 3, + 3, 6, 6, 1, 1, 1, 6, 3, + 3, 6, 3, 3, 5, 5, 5, 5, + 5, 4, 1, 1, 4, 4, 4, 2, + 2, 6, 2, 2, 2, 6, 5, 5, + 5, 1, 4, 4, 5, 3, 1, 1, + 3, 5, 2, 2, 6, 6, 6, 4, + 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 5, 5, 5, + 5, 5, 3, 5, 5, 1, 1, 1, + 1, 1, 1, 0, 4, 4, 4, 1, + 5, 1, 1, 1, 1, 1, 1, 5, + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 6, 3, 3, 6, 3, + 3, 5, 5, 5, 5, 5, 4, 1, + 1, 4, 4, 4, 2, 2, 6, 2, + 2, 2, 6, 5, 5, 5, 1, 4, + 4, 5, 3, 1, 1, 3, 5, 2, + 2, 6, 6, 6, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 6, 3, 3, 6, 3, 3, 1, 4, - 1, 1, 4, 1, 2, 2, 6, 2, - 2, 2, 6, 2, 1, 4, 4, 5, - 3, 1, 1, 3, 5, 2, 2, 6, - 6, 6, 4, 4, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 1, 1, 1, - 1, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, + 1, 5, 5, 5, 5, 5, 3, 5, + 5, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 0, 0, } var _scanner_index_offsets []int16 = []int16{ 0, 0, 2, 4, 6, 8, 11, 16, 19, 24, 29, 32, 37, 47, 53, 58, - 61, 67, 72, 74, 80, 87, 91, 95, - 97, 101, 111, 117, 122, 129, 136, 140, - 146, 152, 158, 169, 171, 175, 179, 182, - 187, 193, 199, 205, 210, 216, 222, 224, - 231, 236, 240, 247, 253, 256, 261, 272, - 279, 285, 293, 298, 303, 306, 311, 322, - 329, 335, 342, 347, 351, 357, 364, 371, - 378, 390, 398, 404, 409, 416, 423, 430, - 436, 443, 451, 459, 467, 474, 482, 490, - 497, 506, 512, 518, 522, 528, 540, 547, - 554, 562, 568, 575, 582, 585, 592, 604, - 611, 617, 624, 632, 640, 648, 661, 669, - 674, 679, 682, 687, 698, 704, 710, 718, - 725, 732, 740, 748, 755, 760, 766, 772, - 778, 784, 790, 795, 799, 805, 816, 818, - 822, 826, 829, 834, 840, 846, 852, 857, - 863, 869, 871, 878, 883, 887, 894, 900, - 903, 908, 914, 918, 924, 931, 938, 945, - 951, 958, 965, 970, 974, 980, 987, 994, - 1001, 1007, 1012, 1019, 1031, 1039, 1045, 1050, - 1057, 1064, 1071, 1077, 1084, 1092, 1100, 1108, - 1115, 1123, 1131, 1138, 1147, 1153, 1159, 1163, - 1169, 1181, 1188, 1195, 1203, 1209, 1222, 1230, - 1239, 1252, 1260, 1269, 1278, 1288, 1295, 1302, - 1314, 1327, 1336, 1346, 1358, 1368, 1375, 1382, - 1394, 1407, 1421, 1432, 1444, 1451, 1457, 1463, - 1470, 1477, 1484, 1497, 1502, 1509, 1521, 1524, - 1526, 1530, 1542, 1549, 1557, 1569, 1576, 1585, - 1593, 1603, 1609, 1616, 1623, 1634, 1647, 1655, - 1663, 1672, 1683, 1692, 1698, 1704, 1715, 1727, - 1740, 1750, 1762, 1766, 1769, 1774, 1780, 1786, - 1792, 1804, 1808, 1814, 1825, 1832, 1837, 1841, - 1848, 1854, 1861, 1875, 1882, 1888, 1895, 1902, - 1910, 1918, 1926, 1933, 1941, 1949, 1957, 1965, - 1973, 1987, 1992, 2004, 2008, 2014, 2019, 2025, - 2031, 2036, 2040, 2044, 2050, 2055, 2061, 2067, - 2072, 2076, 2080, 2085, 2093, 2102, 2114, 2122, - 2132, 2141, 2152, 2159, 2167, 2175, 2187, 2201, - 2209, 2218, 2228, 2240, 2250, 2257, 2264, 2276, - 2289, 2302, 2313, 2326, 2330, 2334, 2340, 2345, - 2351, 2357, 2362, 2368, 2374, 2379, 2383, 2387, - 2393, 2398, 2404, 2409, 2415, 2421, 2427, 2439, - 2443, 2451, 2460, 2469, 2479, 2486, 2493, 2505, - 2518, 2524, 2530, 2536, 2542, 2548, 2554, 2560, - 2566, 2572, 2578, 2584, 2589, 2593, 2597, 2605, - 2610, 2616, 2622, 2628, 2634, 2640, 2646, 2652, - 2658, 2667, 2679, 2687, 2697, 2704, 2709, 2716, - 2723, 2730, 2736, 2743, 2752, 2757, 2762, 2773, - 2780, 2788, 2796, 2808, 2814, 2820, 2828, 2842, - 2850, 2859, 2869, 2881, 2889, 2892, 2897, 2907, - 2918, 2925, 2932, 2944, 2957, 2970, 2981, 2994, - 3001, 3009, 3017, 3024, 3026, 3031, 3036, 3040, - 3043, 3051, 3057, 3066, 3072, 3078, 3082, 3088, - 3100, 3107, 3114, 3122, 3129, 3136, 3149, 3154, - 3160, 3165, 3170, 3177, 3183, 3190, 3197, 3203, - 3208, 3213, 3219, 3228, 3238, 3251, 3260, 3270, - 3280, 3291, 3299, 3307, 3320, 3334, 3344, 3355, - 3368, 3379, 3387, 3395, 3408, 3422, 3436, 3448, - 3461, 3468, 3475, 3482, 3488, 3495, 3502, 3508, - 3515, 3522, 3529, 3536, 3543, 3550, 3556, 3569, - 3574, 3581, 3587, 3594, 3601, 3610, 3620, 3630, - 3641, 3649, 3657, 3670, 3684, 3689, 3694, 3701, - 3708, 3714, 3719, 3724, 3731, 3737, 3744, 3751, - 3758, 3765, 3772, 3779, 3786, 3793, 3800, 3807, - 3813, 3818, 3823, 3832, 3842, 3855, 3864, 3874, - 3884, 3895, 3903, 3911, 3924, 3938, 3948, 3959, - 3972, 3983, 3991, 3999, 4012, 4026, 4040, 4052, - 4065, 4072, 4079, 4086, 4092, 4098, 4103, 4108, - 4115, 4121, 4128, 4134, 4141, 4148, 4155, 4168, - 4177, 4187, 4200, 4209, 4219, 4229, 4240, 4248, - 4256, 4269, 4283, 4293, 4304, 4317, 4328, 4336, - 4344, 4357, 4371, 4385, 4397, 4410, 4417, 4424, - 4431, 4437, 4443, 4450, 4457, 4463, 4470, 4477, - 4484, 4491, 4498, 4505, 4512, 4519, 4526, 4532, - 4537, 4542, 4549, 4556, 4562, 4568, 4573, 4578, - 4585, 4592, 4599, 4606, 4609, 4616, 4623, 4630, - 4636, 4643, 4651, 4659, 4667, 4674, 4679, 4684, - 4688, 4692, 4698, 4703, 4709, 4714, 4720, 4726, - 4732, 4744, 4752, 4761, 4773, 4781, 4791, 4798, - 4807, 4812, 4817, 4828, 4835, 4843, 4851, 4863, - 4869, 4875, 4883, 4897, 4905, 4911, 4920, 4930, - 4942, 4950, 4953, 4958, 4968, 4979, 4986, 4993, - 5005, 5018, 5031, 5042, 5055, 5061, 5067, 5073, - 5078, 5083, 5089, 5095, 5101, 5107, 5113, 5119, - 5125, 5131, 5137, 5143, 5149, 5154, 5158, 5162, - 5168, 5174, 5179, 5184, 5188, 5192, 5198, 5204, - 5211, 5219, 5227, 5234, 5239, 5245, 5251, 5256, - 5261, 5263, 5265, + 61, 67, 77, 79, 86, 92, 102, 108, + 117, 125, 132, 142, 149, 153, 157, 159, + 163, 173, 179, 184, 191, 203, 207, 216, + 228, 239, 250, 256, 262, 268, 279, 281, + 285, 289, 292, 297, 303, 309, 315, 320, + 326, 332, 334, 341, 346, 350, 357, 368, + 371, 376, 387, 394, 400, 408, 413, 418, + 421, 426, 437, 444, 450, 457, 468, 478, + 490, 501, 512, 517, 521, 527, 534, 541, + 548, 560, 568, 574, 579, 586, 596, 605, + 613, 624, 631, 644, 655, 669, 683, 690, + 696, 703, 711, 719, 727, 741, 753, 768, + 774, 780, 784, 790, 799, 814, 821, 828, + 836, 847, 858, 871, 883, 895, 902, 910, + 918, 925, 937, 943, 950, 957, 960, 968, + 975, 986, 993, 1007, 1017, 1030, 1043, 1050, + 1056, 1063, 1071, 1079, 1087, 1102, 1113, 1127, + 1132, 1137, 1140, 1145, 1153, 1167, 1173, 1179, + 1187, 1199, 1209, 1222, 1234, 1246, 1253, 1261, + 1269, 1276, 1287, 1292, 1298, 1304, 1310, 1316, + 1322, 1327, 1331, 1337, 1348, 1350, 1354, 1358, + 1361, 1366, 1372, 1378, 1384, 1389, 1395, 1401, + 1403, 1410, 1415, 1419, 1426, 1437, 1440, 1445, + 1451, 1455, 1461, 1468, 1475, 1482, 1488, 1495, + 1502, 1507, 1511, 1517, 1524, 1531, 1538, 1544, + 1549, 1556, 1568, 1576, 1582, 1587, 1594, 1604, + 1613, 1621, 1632, 1639, 1650, 1660, 1672, 1683, + 1695, 1702, 1708, 1715, 1723, 1731, 1739, 1750, + 1756, 1762, 1767, 1774, 1780, 1787, 1794, 1800, + 1805, 1810, 1817, 1823, 1830, 1837, 1843, 1848, + 1853, 1859, 1864, 1869, 1876, 1882, 1895, 1903, + 1912, 1925, 1933, 1942, 1951, 1961, 1970, 1980, + 1987, 1994, 2006, 2019, 2030, 2041, 2053, 2062, + 2072, 2084, 2094, 2101, 2108, 2120, 2133, 2147, + 2158, 2170, 2177, 2183, 2189, 2196, 2203, 2210, + 2223, 2228, 2235, 2247, 2250, 2252, 2256, 2268, + 2275, 2283, 2295, 2302, 2311, 2319, 2329, 2339, + 2348, 2355, 2362, 2373, 2386, 2398, 2408, 2420, + 2428, 2437, 2448, 2457, 2463, 2469, 2480, 2492, + 2505, 2515, 2527, 2531, 2534, 2539, 2545, 2551, + 2557, 2569, 2573, 2579, 2590, 2597, 2602, 2606, + 2613, 2624, 2632, 2639, 2650, 2657, 2673, 2684, + 2696, 2707, 2717, 2729, 2743, 2758, 2772, 2787, + 2796, 2803, 2809, 2816, 2823, 2838, 2850, 2863, + 2878, 2894, 2909, 2925, 2933, 2941, 2949, 2964, + 2970, 2983, 2992, 3002, 3015, 3024, 3034, 3044, + 3055, 3065, 3076, 3084, 3092, 3105, 3119, 3130, + 3142, 3155, 3165, 3176, 3189, 3200, 3208, 3216, + 3229, 3243, 3257, 3269, 3282, 3287, 3292, 3299, + 3305, 3312, 3319, 3325, 3332, 3339, 3345, 3350, + 3355, 3359, 3362, 3367, 3372, 3379, 3385, 3392, + 3398, 3405, 3412, 3419, 3432, 3437, 3446, 3456, + 3466, 3477, 3485, 3493, 3506, 3520, 3527, 3534, + 3541, 3548, 3555, 3562, 3569, 3576, 3583, 3590, + 3597, 3603, 3608, 3613, 3626, 3632, 3637, 3644, + 3654, 3663, 3671, 3682, 3689, 3696, 3702, 3709, + 3715, 3722, 3729, 3736, 3743, 3750, 3757, 3764, + 3771, 3785, 3798, 3807, 3817, 3828, 3839, 3852, + 3864, 3876, 3886, 3892, 3898, 3909, 3919, 3930, + 3938, 3946, 3959, 3966, 3973, 3981, 3995, 4006, + 4018, 4031, 4044, 4056, 4069, 4083, 4095, 4110, + 4114, 4120, 4129, 4144, 4160, 4177, 4190, 4198, + 4209, 4221, 4229, 4237, 4248, 4258, 4274, 4291, + 4305, 4317, 4330, 4341, 4348, 4356, 4364, 4372, + 4380, 4388, 4404, 4409, 4421, 4425, 4431, 4436, + 4442, 4448, 4453, 4457, 4461, 4467, 4472, 4478, + 4484, 4489, 4493, 4497, 4502, 4510, 4519, 4531, + 4539, 4549, 4558, 4569, 4580, 4590, 4598, 4606, + 4618, 4632, 4644, 4655, 4668, 4677, 4687, 4699, + 4709, 4716, 4723, 4735, 4748, 4761, 4772, 4785, + 4789, 4793, 4799, 4804, 4810, 4816, 4821, 4827, + 4833, 4838, 4842, 4846, 4852, 4857, 4863, 4868, + 4874, 4880, 4886, 4898, 4902, 4910, 4919, 4928, + 4938, 4945, 4952, 4964, 4977, 4983, 4989, 4995, + 5001, 5007, 5013, 5019, 5025, 5031, 5037, 5043, + 5048, 5052, 5056, 5068, 5073, 5079, 5085, 5091, + 5097, 5103, 5109, 5115, 5121, 5134, 5146, 5154, + 5164, 5176, 5186, 5199, 5211, 5223, 5232, 5237, + 5242, 5253, 5264, 5274, 5282, 5290, 5302, 5308, + 5314, 5322, 5336, 5348, 5359, 5372, 5384, 5395, + 5408, 5423, 5434, 5448, 5451, 5456, 5464, 5478, + 5493, 5509, 5521, 5531, 5542, 5549, 5556, 5566, + 5575, 5590, 5606, 5619, 5630, 5643, 5653, 5660, + 5668, 5676, 5683, 5691, 5700, 5712, 5725, 5727, + 5736, 5746, 5759, 5773, 5780, 5787, 5794, 5807, + 5816, 5826, 5839, 5848, 5858, 5869, 5880, 5893, + 5905, 5917, 5927, 5933, 5939, 5950, 5960, 5971, + 5979, 5987, 6000, 6007, 6014, 6022, 6036, 6047, + 6059, 6072, 6079, 6089, 6100, 6113, 6122, 6126, + 6132, 6143, 6155, 6163, 6171, 6184, 6198, 6212, + 6224, 6237, 6244, 6251, 6258, 6264, 6270, 6277, + 6284, 6290, 6297, 6304, 6311, 6318, 6325, 6332, + 6339, 6346, 6353, 6359, 6364, 6369, 6376, 6383, + 6389, 6395, 6400, 6405, 6412, 6419, 6430, 6443, + 6455, 6468, 6482, 6494, 6509, 6524, 6531, 6539, + 6547, 6554, 6561, 6568, 6571, 6579, 6586, 6597, + 6604, 6616, 6623, 6629, 6636, 6644, 6652, 6660, + 6672, 6677, 6682, 6686, 6690, 6696, 6701, 6707, + 6712, 6718, 6724, 6730, 6742, 6750, 6759, 6771, + 6779, 6789, 6801, 6811, 6824, 6836, 6848, 6857, + 6862, 6867, 6878, 6889, 6899, 6907, 6915, 6927, + 6933, 6939, 6947, 6961, 6973, 6984, 6997, 7003, + 7012, 7022, 7034, 7042, 7045, 7050, 7060, 7071, + 7078, 7085, 7097, 7110, 7123, 7134, 7147, 7153, + 7159, 7165, 7170, 7175, 7181, 7187, 7193, 7199, + 7205, 7211, 7217, 7223, 7229, 7235, 7241, 7246, + 7250, 7254, 7260, 7266, 7271, 7276, 7280, 7284, + 7290, 7296, 7306, 7318, 7329, 7342, 7357, 7368, + 7382, 7396, 7403, 7411, 7419, 7426, 7431, 7437, + 7443, 7448, 7453, 7455, 7457, } var _scanner_indicies []int16 = []int16{ @@ -1224,1091 +1679,1451 @@ func Parse(input string) (*Conf, error) { 21, 21, 22, 20, 22, 20, 2, 23, 23, 24, 24, 24, 2, 26, 26, 2, 2, 25, 2, 2, 27, 28, 29, 28, - 30, 2, 27, 31, 32, 31, 33, 2, - 32, 33, 35, 29, 35, 30, 33, 34, - 36, 36, 38, 37, 37, 37, 2, 36, - 36, 39, 2, 40, 40, 39, 2, 41, - 2, 42, 42, 41, 2, 43, 43, 24, - 38, 37, 44, 24, 44, 24, 2, 45, - 45, 2, 2, 46, 25, 40, 40, 2, - 47, 27, 48, 29, 48, 30, 2, 47, - 27, 49, 32, 49, 2, 50, 2, 25, - 32, 33, 33, 34, 17, 17, 52, 53, - 2, 51, 55, 55, 57, 58, 56, 54, - 60, 60, 62, 63, 61, 59, 64, 64, - 65, 66, 67, 67, 68, 66, 68, 66, - 61, 65, 61, 69, 69, 70, 2, 2, - 72, 2, 71, 2, 2, 73, 17, 17, - 74, 2, 73, 17, 17, 76, 77, 2, - 75, 79, 79, 80, 81, 56, 78, 60, - 60, 83, 84, 61, 82, 85, 85, 86, - 2, 73, 60, 60, 87, 81, 61, 78, - 88, 88, 80, 89, 56, 78, 90, 56, - 91, 91, 65, 92, 92, 92, 61, 94, - 94, 65, 61, 93, 61, 96, 61, 95, - 97, 98, 97, 96, 99, 61, 95, 100, - 101, 100, 65, 102, 61, 101, 103, 102, - 104, 32, 104, 105, 33, 106, 32, 106, - 107, 108, 108, 109, 107, 109, 107, 33, - 110, 32, 110, 111, 111, 111, 33, 112, - 32, 112, 33, 33, 50, 113, 32, 113, - 115, 114, 114, 114, 33, 113, 32, 113, - 116, 33, 117, 32, 117, 116, 33, 32, - 118, 33, 119, 32, 119, 118, 33, 120, - 32, 120, 111, 115, 114, 121, 111, 121, - 111, 33, 122, 32, 122, 33, 33, 123, - 50, 117, 32, 117, 33, 124, 34, 125, - 29, 125, 30, 33, 124, 34, 32, 33, - 127, 33, 126, 32, 33, 33, 128, 129, - 32, 129, 130, 33, 128, 129, 32, 129, - 132, 133, 33, 131, 135, 136, 135, 138, - 139, 137, 134, 141, 101, 141, 142, 143, - 102, 140, 144, 101, 144, 103, 145, 146, - 146, 147, 145, 147, 145, 102, 148, 101, - 148, 103, 149, 149, 149, 102, 151, 101, - 151, 103, 102, 150, 101, 102, 153, 102, - 152, 154, 98, 154, 153, 99, 102, 152, - 155, 29, 155, 30, 156, 33, 34, 35, - 29, 35, 158, 159, 33, 157, 35, 29, - 35, 161, 33, 160, 162, 29, 162, 161, - 163, 33, 160, 162, 29, 162, 165, 166, - 167, 33, 164, 169, 170, 169, 171, 172, - 173, 137, 168, 175, 98, 175, 176, 177, - 178, 102, 174, 179, 29, 179, 161, 180, - 33, 160, 175, 98, 175, 181, 172, 173, - 102, 168, 182, 170, 182, 171, 172, 183, - 137, 168, 185, 170, 185, 186, 187, 137, - 184, 188, 101, 188, 103, 190, 189, 189, - 189, 102, 188, 101, 188, 103, 191, 102, - 192, 101, 192, 103, 191, 102, 101, 103, - 193, 102, 194, 101, 194, 103, 193, 102, - 195, 101, 195, 103, 149, 190, 189, 196, - 149, 196, 149, 102, 197, 101, 197, 103, - 102, 198, 150, 192, 101, 192, 153, 102, - 199, 152, 200, 98, 200, 153, 99, 102, - 199, 152, 201, 32, 201, 202, 33, 128, - 141, 101, 141, 203, 139, 102, 134, 204, - 136, 204, 138, 205, 137, 134, 136, 206, - 137, 207, 29, 207, 30, 208, 2, 27, - 209, 32, 209, 33, 20, 21, 21, 22, - 20, 22, 20, 2, 28, 29, 28, 211, - 159, 2, 210, 28, 29, 28, 161, 2, - 212, 213, 29, 213, 161, 214, 2, 212, - 213, 29, 213, 216, 166, 217, 2, 215, - 219, 170, 219, 220, 172, 221, 56, 218, - 223, 98, 223, 224, 177, 225, 61, 222, - 226, 101, 226, 65, 102, 66, 67, 67, - 68, 66, 68, 66, 61, 227, 227, 65, - 229, 228, 228, 228, 61, 227, 227, 65, - 230, 61, 231, 231, 65, 230, 61, 65, - 232, 61, 233, 233, 65, 232, 61, 234, - 234, 65, 92, 229, 228, 235, 92, 235, - 92, 61, 236, 236, 65, 61, 237, 93, - 231, 231, 96, 61, 238, 95, 239, 98, - 239, 96, 99, 61, 238, 95, 240, 101, - 240, 65, 150, 61, 93, 241, 29, 241, - 161, 242, 2, 212, 223, 98, 223, 243, - 172, 221, 61, 218, 244, 170, 244, 220, - 172, 245, 56, 218, 247, 170, 247, 248, - 187, 56, 246, 249, 249, 250, 2, 16, - 60, 60, 251, 58, 61, 54, 252, 252, - 57, 253, 56, 54, 11, 11, 255, 256, - 2, 254, 258, 258, 260, 261, 259, 257, - 263, 263, 265, 266, 264, 262, 268, 268, - 269, 264, 267, 264, 271, 264, 270, 272, - 272, 271, 273, 264, 270, 274, 274, 275, - 276, 277, 277, 278, 276, 278, 276, 264, - 275, 264, 279, 279, 280, 2, 2, 282, - 2, 281, 2, 2, 283, 11, 11, 284, - 2, 283, 11, 11, 286, 287, 2, 285, - 289, 289, 290, 291, 259, 288, 263, 263, - 293, 294, 264, 292, 295, 295, 296, 2, - 283, 263, 263, 297, 291, 264, 288, 298, - 298, 290, 299, 259, 288, 300, 259, 301, - 301, 275, 302, 302, 302, 264, 304, 304, - 275, 264, 303, 264, 306, 264, 305, 307, - 308, 307, 306, 309, 264, 305, 310, 311, - 310, 275, 312, 264, 311, 313, 312, 314, - 32, 314, 315, 33, 317, 32, 317, 318, - 33, 316, 32, 33, 33, 319, 129, 32, - 129, 320, 33, 319, 129, 32, 129, 322, - 323, 33, 321, 325, 136, 325, 326, 327, - 137, 324, 141, 101, 141, 329, 330, 102, - 328, 331, 32, 331, 332, 33, 319, 141, - 101, 141, 333, 327, 102, 324, 334, 136, - 334, 326, 335, 137, 324, 32, 33, 337, - 33, 336, 32, 33, 33, 338, 339, 32, - 339, 340, 33, 338, 339, 32, 339, 342, - 343, 33, 341, 345, 346, 345, 348, 349, - 347, 344, 351, 311, 351, 352, 353, 312, - 350, 355, 311, 355, 356, 312, 354, 311, - 312, 358, 312, 357, 359, 311, 359, 358, - 360, 312, 357, 361, 311, 361, 313, 362, - 363, 363, 364, 362, 364, 362, 312, 365, - 311, 365, 313, 366, 366, 366, 312, 368, - 311, 368, 313, 312, 367, 311, 312, 370, - 312, 369, 371, 308, 371, 370, 309, 312, - 369, 372, 29, 372, 30, 373, 33, 34, - 35, 29, 35, 375, 376, 33, 374, 35, - 29, 35, 378, 33, 377, 379, 29, 379, - 378, 380, 33, 377, 379, 29, 379, 382, - 383, 384, 33, 381, 386, 387, 386, 388, - 389, 390, 347, 385, 392, 308, 392, 393, - 394, 395, 312, 391, 396, 29, 396, 378, - 397, 33, 377, 392, 308, 392, 398, 389, - 390, 312, 385, 399, 387, 399, 388, 389, - 400, 347, 385, 402, 387, 402, 403, 404, - 347, 401, 405, 311, 405, 313, 407, 406, - 406, 406, 312, 405, 311, 405, 313, 408, - 312, 409, 311, 409, 313, 408, 312, 311, - 313, 410, 312, 411, 311, 411, 313, 410, - 312, 412, 311, 412, 313, 366, 407, 406, - 413, 366, 413, 366, 312, 414, 311, 414, - 313, 312, 415, 367, 409, 311, 409, 370, - 312, 416, 369, 417, 308, 417, 370, 309, - 312, 416, 369, 418, 32, 418, 419, 33, - 319, 420, 32, 420, 318, 421, 422, 33, - 422, 423, 421, 423, 421, 316, 110, 32, - 110, 424, 33, 424, 424, 319, 425, 32, - 425, 320, 424, 33, 424, 424, 319, 426, - 32, 426, 33, 427, 428, 33, 428, 429, - 427, 429, 427, 50, 110, 32, 110, 430, - 33, 430, 430, 34, 431, 29, 431, 30, - 430, 33, 430, 430, 34, 113, 32, 113, - 433, 33, 432, 432, 432, 34, 434, 29, - 434, 30, 433, 33, 432, 432, 432, 34, - 35, 29, 35, 30, 33, 435, 34, 436, - 29, 436, 30, 33, 435, 34, 120, 32, - 120, 430, 433, 33, 432, 437, 430, 437, - 430, 34, 438, 29, 438, 30, 430, 433, - 33, 432, 437, 430, 437, 430, 34, 113, - 32, 113, 440, 33, 439, 439, 439, 319, - 441, 32, 441, 320, 440, 33, 439, 439, - 439, 319, 442, 32, 442, 107, 108, 108, - 443, 109, 107, 109, 107, 33, 444, 32, - 444, 114, 115, 114, 445, 114, 114, 33, - 129, 32, 129, 320, 33, 446, 319, 447, - 32, 447, 320, 33, 446, 319, 120, 32, - 120, 424, 440, 33, 439, 448, 424, 448, - 424, 319, 449, 32, 449, 320, 424, 440, - 33, 439, 448, 424, 448, 424, 319, 450, - 32, 450, 33, 427, 428, 428, 33, 451, - 429, 427, 429, 427, 50, 444, 32, 444, - 432, 433, 432, 33, 452, 432, 432, 34, - 453, 29, 453, 30, 432, 433, 432, 33, - 452, 432, 432, 34, 129, 32, 129, 455, - 456, 33, 454, 129, 32, 129, 458, 33, - 457, 459, 32, 459, 460, 33, 457, 459, - 32, 459, 462, 463, 33, 461, 465, 466, - 465, 468, 469, 467, 464, 471, 472, 471, - 474, 475, 473, 470, 477, 472, 477, 478, - 479, 480, 473, 480, 481, 479, 481, 479, - 476, 472, 473, 358, 473, 482, 483, 472, - 483, 358, 484, 473, 482, 485, 472, 485, - 486, 487, 488, 488, 489, 487, 489, 487, - 473, 472, 486, 473, 491, 490, 492, 492, - 493, 2, 494, 494, 15, 495, 496, 2, - 496, 497, 495, 497, 495, 13, 23, 23, - 498, 2, 498, 498, 16, 499, 499, 18, - 498, 2, 498, 498, 16, 500, 500, 2, - 501, 502, 2, 502, 503, 501, 503, 501, - 25, 23, 23, 504, 2, 504, 504, 27, - 505, 29, 505, 30, 504, 2, 504, 504, - 27, 36, 36, 507, 2, 506, 506, 506, - 27, 508, 29, 508, 30, 507, 2, 506, - 506, 506, 27, 509, 32, 509, 33, 39, - 2, 28, 29, 28, 30, 2, 510, 27, - 511, 29, 511, 30, 2, 510, 27, 43, - 43, 504, 507, 2, 506, 512, 504, 512, - 504, 27, 513, 29, 513, 30, 504, 507, - 2, 506, 512, 504, 512, 504, 27, 514, - 32, 514, 2, 50, 2, 46, 25, 36, - 36, 516, 2, 515, 515, 515, 16, 517, - 517, 18, 516, 2, 515, 515, 515, 16, - 518, 518, 20, 21, 21, 519, 22, 20, - 22, 20, 2, 520, 520, 37, 38, 37, - 521, 37, 37, 2, 17, 17, 18, 2, - 522, 16, 523, 523, 18, 2, 522, 16, - 43, 43, 498, 516, 2, 515, 524, 498, - 524, 498, 16, 525, 525, 18, 498, 516, - 2, 515, 524, 498, 524, 498, 16, 526, - 526, 2, 501, 502, 502, 2, 527, 503, - 501, 503, 501, 25, 520, 520, 506, 507, - 506, 2, 528, 506, 506, 27, 529, 29, - 529, 30, 506, 507, 506, 2, 528, 506, - 506, 27, 2, 531, 2, 530, 2, 2, - 532, 533, 533, 534, 2, 532, 533, 533, - 536, 537, 2, 535, 539, 539, 541, 542, - 540, 538, 544, 544, 545, 546, 490, 543, - 548, 548, 549, 550, 551, 490, 551, 552, - 550, 552, 550, 547, 490, 271, 490, 553, - 554, 554, 271, 555, 490, 553, 556, 556, - 491, 557, 558, 558, 559, 557, 559, 557, - 490, 560, 560, 491, 561, 561, 561, 490, - 563, 563, 491, 490, 562, 490, 565, 490, - 564, 566, 567, 566, 565, 568, 490, 564, - 569, 472, 569, 491, 473, 490, 570, 29, - 570, 30, 571, 2, 27, 572, 32, 572, - 15, 316, 495, 496, 2, 496, 497, 495, - 497, 495, 13, 28, 29, 28, 574, 575, - 2, 573, 28, 29, 28, 577, 2, 576, - 578, 29, 578, 577, 579, 2, 576, 581, - 29, 581, 577, 582, 33, 580, 581, 29, - 581, 584, 585, 586, 33, 583, 588, 589, - 588, 590, 591, 592, 467, 587, 594, 567, - 594, 595, 596, 597, 473, 593, 598, 29, - 598, 577, 599, 33, 580, 594, 567, 594, - 600, 591, 592, 473, 587, 601, 589, 601, - 590, 591, 602, 467, 587, 578, 29, 578, - 604, 585, 605, 2, 603, 607, 589, 607, - 608, 591, 609, 540, 606, 611, 567, 611, - 612, 596, 613, 490, 610, 614, 472, 614, - 549, 476, 550, 551, 490, 551, 552, 550, - 552, 550, 547, 615, 615, 90, 616, 56, - 618, 618, 619, 620, 621, 61, 621, 622, - 620, 622, 620, 617, 61, 624, 61, 623, - 60, 60, 624, 625, 61, 623, 85, 85, - 626, 2, 16, 60, 60, 628, 629, 61, - 627, 630, 630, 57, 631, 56, 54, 632, - 632, 90, 633, 56, 61, 635, 61, 634, - 61, 637, 61, 636, 60, 60, 637, 638, - 61, 636, 639, 639, 640, 2, 73, 60, - 60, 642, 643, 61, 641, 644, 644, 80, - 645, 56, 78, 646, 646, 90, 647, 56, - 61, 649, 61, 648, 61, 83, 61, 82, - 632, 632, 90, 650, 56, 91, 91, 624, - 651, 61, 651, 651, 623, 652, 652, 624, - 625, 651, 61, 651, 651, 623, 653, 653, - 65, 654, 655, 61, 655, 656, 654, 656, - 654, 93, 91, 91, 96, 657, 61, 657, - 657, 95, 658, 98, 658, 96, 99, 657, - 61, 657, 657, 95, 227, 227, 96, 660, - 61, 659, 659, 659, 95, 661, 98, 661, - 96, 99, 660, 61, 659, 659, 659, 95, - 662, 101, 662, 65, 102, 230, 61, 97, - 98, 97, 96, 99, 61, 663, 95, 664, - 98, 664, 96, 99, 61, 663, 95, 234, - 234, 96, 657, 660, 61, 659, 665, 657, - 665, 657, 95, 666, 98, 666, 96, 99, - 657, 660, 61, 659, 665, 657, 665, 657, - 95, 667, 101, 667, 65, 150, 61, 237, - 93, 227, 227, 624, 669, 61, 668, 668, - 668, 623, 670, 670, 624, 625, 669, 61, - 668, 668, 668, 623, 671, 671, 65, 66, - 67, 67, 672, 68, 66, 68, 66, 61, - 673, 673, 65, 228, 229, 228, 674, 228, - 228, 61, 60, 60, 624, 625, 61, 675, - 623, 676, 676, 624, 625, 61, 675, 623, - 234, 234, 624, 651, 669, 61, 668, 677, - 651, 677, 651, 623, 678, 678, 624, 625, - 651, 669, 61, 668, 677, 651, 677, 651, - 623, 679, 679, 65, 654, 655, 655, 61, - 680, 656, 654, 656, 654, 93, 673, 673, - 96, 659, 660, 659, 61, 681, 659, 659, - 95, 682, 98, 682, 96, 99, 659, 660, - 659, 61, 681, 659, 659, 95, 61, 684, - 61, 683, 61, 686, 61, 685, 687, 687, - 686, 688, 61, 685, 689, 689, 690, 2, - 532, 687, 687, 692, 693, 61, 691, 694, - 694, 541, 695, 540, 538, 696, 696, 697, - 2, 532, 544, 544, 698, 542, 490, 538, - 699, 699, 541, 700, 540, 538, 701, 701, - 702, 703, 540, 490, 705, 490, 704, 490, - 707, 490, 706, 554, 554, 707, 708, 490, - 706, 709, 709, 710, 2, 73, 17, 17, - 712, 713, 2, 711, 17, 17, 714, 2, - 532, 533, 533, 715, 716, 2, 535, 718, - 718, 719, 720, 56, 717, 722, 722, 686, - 723, 61, 721, 725, 725, 619, 726, 727, - 61, 727, 728, 726, 728, 726, 724, 61, - 62, 61, 59, 91, 91, 62, 729, 61, - 729, 729, 59, 652, 652, 62, 63, 729, - 61, 729, 729, 59, 227, 227, 62, 731, - 61, 730, 730, 730, 59, 670, 670, 62, - 63, 731, 61, 730, 730, 730, 59, 60, - 60, 62, 63, 61, 732, 59, 676, 676, - 62, 63, 61, 732, 59, 234, 234, 62, - 729, 731, 61, 730, 733, 729, 733, 729, - 59, 678, 678, 62, 63, 729, 731, 61, - 730, 733, 729, 733, 729, 59, 722, 722, - 692, 734, 61, 717, 736, 736, 737, 738, - 540, 735, 554, 554, 739, 738, 490, 735, - 740, 740, 80, 741, 56, 78, 60, 60, - 743, 744, 61, 742, 60, 60, 686, 745, - 61, 721, 722, 722, 746, 720, 61, 717, - 747, 747, 719, 748, 56, 717, 749, 749, - 737, 750, 540, 735, 60, 60, 746, 751, - 61, 717, 17, 17, 715, 752, 2, 535, - 753, 753, 90, 754, 56, 61, 684, 61, - 755, 61, 686, 61, 721, 560, 560, 271, - 756, 490, 756, 756, 553, 709, 709, 757, - 2, 16, 17, 17, 758, 759, 2, 711, - 736, 736, 761, 762, 540, 760, 554, 554, - 763, 764, 490, 760, 765, 765, 57, 766, - 56, 54, 60, 60, 767, 768, 61, 742, - 769, 769, 761, 770, 540, 760, 60, 60, - 746, 771, 61, 717, 17, 17, 715, 772, - 2, 535, 773, 773, 271, 555, 756, 490, - 756, 756, 553, 774, 774, 491, 775, 776, - 490, 776, 777, 775, 777, 775, 562, 560, - 560, 565, 778, 490, 778, 778, 564, 779, - 567, 779, 565, 568, 778, 490, 778, 778, - 564, 780, 472, 780, 491, 781, 490, 562, - 472, 473, 783, 473, 782, 784, 567, 784, - 783, 568, 473, 782, 785, 29, 785, 30, - 786, 33, 34, 35, 29, 35, 788, 575, - 33, 787, 35, 29, 35, 577, 33, 580, - 790, 589, 790, 791, 792, 467, 789, 793, - 793, 565, 795, 490, 794, 794, 794, 564, - 793, 793, 491, 796, 490, 797, 797, 491, - 796, 490, 798, 567, 798, 565, 568, 795, - 490, 794, 794, 794, 564, 799, 472, 799, - 491, 473, 796, 490, 566, 567, 566, 565, - 568, 490, 800, 564, 801, 567, 801, 565, - 568, 490, 800, 564, 802, 802, 565, 778, - 795, 490, 794, 803, 778, 803, 778, 564, - 804, 804, 491, 490, 805, 562, 797, 797, - 565, 490, 806, 564, 807, 567, 807, 565, - 568, 490, 806, 564, 808, 567, 808, 565, - 568, 778, 795, 490, 794, 803, 778, 803, - 778, 564, 809, 472, 809, 491, 781, 490, - 805, 562, 793, 793, 271, 811, 490, 810, - 810, 810, 553, 812, 812, 271, 555, 811, - 490, 810, 810, 810, 553, 813, 813, 491, - 557, 558, 558, 814, 559, 557, 559, 557, - 490, 793, 793, 491, 816, 815, 815, 815, - 490, 491, 817, 490, 818, 818, 491, 817, - 490, 819, 819, 491, 815, 816, 815, 820, - 815, 815, 490, 802, 802, 491, 561, 816, - 815, 821, 561, 821, 561, 490, 554, 554, - 271, 555, 490, 822, 553, 823, 823, 271, - 555, 490, 822, 553, 802, 802, 271, 756, - 811, 490, 810, 824, 756, 824, 756, 553, - 825, 825, 271, 555, 756, 811, 490, 810, - 824, 756, 824, 756, 553, 826, 826, 491, - 775, 776, 776, 490, 827, 777, 775, 777, - 775, 562, 819, 819, 565, 794, 795, 794, - 490, 828, 794, 794, 564, 829, 567, 829, - 565, 568, 794, 795, 794, 490, 828, 794, - 794, 564, 830, 29, 830, 577, 831, 2, - 576, 611, 567, 611, 832, 591, 609, 490, - 606, 833, 589, 833, 608, 591, 834, 540, - 606, 836, 589, 836, 837, 792, 540, 835, - 702, 540, 838, 32, 838, 839, 33, 32, - 33, 841, 33, 840, 32, 33, 33, 457, - 466, 842, 467, 843, 472, 843, 486, 844, - 844, 844, 473, 845, 472, 845, 486, 473, - 781, 846, 472, 846, 486, 848, 847, 847, - 847, 473, 846, 472, 846, 486, 849, 473, - 850, 472, 850, 486, 849, 473, 472, 486, - 851, 473, 852, 472, 852, 486, 851, 473, - 853, 472, 853, 486, 844, 848, 847, 854, - 844, 854, 844, 473, 855, 472, 855, 486, - 473, 856, 781, 850, 472, 850, 783, 473, - 857, 782, 858, 567, 858, 783, 568, 473, - 857, 782, 483, 472, 483, 860, 861, 473, - 859, 862, 136, 862, 326, 863, 137, 324, - 865, 101, 865, 866, 867, 868, 102, 868, - 869, 867, 869, 867, 864, 101, 102, 329, - 102, 328, 870, 136, 870, 206, 871, 137, - 101, 102, 873, 102, 872, 101, 102, 875, - 102, 874, 141, 101, 141, 875, 876, 102, - 874, 877, 32, 877, 878, 33, 128, 141, - 101, 141, 880, 881, 102, 879, 882, 136, - 882, 138, 883, 137, 134, 884, 136, 884, - 206, 885, 137, 101, 102, 887, 102, 886, - 101, 102, 142, 102, 140, 870, 136, 870, - 206, 888, 137, 148, 101, 148, 329, 889, - 102, 889, 889, 328, 890, 101, 890, 329, - 330, 889, 102, 889, 889, 328, 891, 101, - 891, 103, 892, 893, 102, 893, 894, 892, - 894, 892, 150, 148, 101, 148, 153, 895, - 102, 895, 895, 152, 896, 98, 896, 153, - 99, 895, 102, 895, 895, 152, 188, 101, - 188, 153, 898, 102, 897, 897, 897, 152, - 899, 98, 899, 153, 99, 898, 102, 897, - 897, 897, 152, 154, 98, 154, 153, 99, - 102, 900, 152, 901, 98, 901, 153, 99, - 102, 900, 152, 195, 101, 195, 153, 895, - 898, 102, 897, 902, 895, 902, 895, 152, - 903, 98, 903, 153, 99, 895, 898, 102, - 897, 902, 895, 902, 895, 152, 188, 101, - 188, 329, 905, 102, 904, 904, 904, 328, - 906, 101, 906, 329, 330, 905, 102, 904, - 904, 904, 328, 907, 101, 907, 103, 145, - 146, 146, 908, 147, 145, 147, 145, 102, - 909, 101, 909, 103, 189, 190, 189, 910, - 189, 189, 102, 141, 101, 141, 329, 330, - 102, 911, 328, 912, 101, 912, 329, 330, - 102, 911, 328, 195, 101, 195, 329, 889, - 905, 102, 904, 913, 889, 913, 889, 328, - 914, 101, 914, 329, 330, 889, 905, 102, - 904, 913, 889, 913, 889, 328, 915, 101, - 915, 103, 892, 893, 893, 102, 916, 894, - 892, 894, 892, 150, 909, 101, 909, 153, - 897, 898, 897, 102, 917, 897, 897, 152, - 918, 98, 918, 153, 99, 897, 898, 897, - 102, 917, 897, 897, 152, 141, 101, 141, - 920, 921, 102, 919, 141, 101, 141, 923, - 924, 102, 922, 925, 101, 925, 923, 926, - 102, 922, 927, 32, 927, 928, 33, 457, - 925, 101, 925, 930, 931, 102, 929, 932, - 466, 932, 468, 933, 467, 464, 934, 32, - 934, 935, 33, 457, 471, 472, 471, 936, - 469, 473, 464, 937, 466, 937, 468, 938, - 467, 464, 925, 101, 925, 939, 940, 102, - 929, 941, 136, 941, 942, 943, 137, 929, - 944, 466, 944, 945, 946, 467, 859, 141, - 101, 141, 939, 947, 102, 929, 948, 136, - 948, 206, 949, 137, 951, 101, 951, 866, - 952, 953, 102, 953, 954, 952, 954, 952, - 950, 101, 102, 956, 102, 955, 141, 101, - 141, 956, 957, 102, 955, 201, 32, 201, - 958, 33, 319, 141, 101, 141, 960, 961, - 102, 959, 962, 136, 962, 326, 963, 137, - 324, 148, 101, 148, 956, 964, 102, 964, - 964, 955, 890, 101, 890, 956, 957, 964, - 102, 964, 964, 955, 188, 101, 188, 956, - 966, 102, 965, 965, 965, 955, 906, 101, - 906, 956, 957, 966, 102, 965, 965, 965, - 955, 141, 101, 141, 956, 957, 102, 967, - 955, 912, 101, 912, 956, 957, 102, 967, - 955, 195, 101, 195, 956, 964, 966, 102, - 965, 968, 964, 968, 964, 955, 914, 101, - 914, 956, 957, 964, 966, 102, 965, 968, - 964, 968, 964, 955, 101, 102, 970, 102, - 969, 101, 102, 923, 102, 971, 972, 101, - 972, 923, 973, 102, 971, 972, 101, 972, - 930, 975, 102, 974, 976, 466, 976, 842, - 977, 467, 472, 473, 979, 473, 978, 472, - 473, 981, 473, 980, 483, 472, 483, 981, - 982, 473, 980, 418, 32, 418, 983, 33, - 128, 129, 32, 129, 984, 985, 33, 454, - 987, 466, 987, 988, 989, 467, 986, 483, - 472, 483, 990, 989, 473, 986, 991, 136, - 991, 138, 992, 137, 134, 141, 101, 141, - 993, 994, 102, 919, 995, 466, 995, 988, - 996, 467, 986, 141, 101, 141, 939, 997, - 102, 929, 129, 32, 129, 998, 999, 33, - 461, 1000, 136, 1000, 942, 940, 137, 929, - 459, 32, 459, 998, 1001, 33, 461, 1002, - 136, 1002, 206, 1003, 137, 101, 102, 970, - 102, 1004, 101, 102, 923, 102, 922, 843, - 472, 843, 358, 1005, 473, 1005, 1005, 482, - 1006, 472, 1006, 358, 484, 1005, 473, 1005, - 1005, 482, 1007, 472, 1007, 486, 1008, 1009, - 473, 1009, 1010, 1008, 1010, 1008, 781, 843, - 472, 843, 783, 1011, 473, 1011, 1011, 782, - 1012, 567, 1012, 783, 568, 1011, 473, 1011, - 1011, 782, 846, 472, 846, 783, 1014, 473, - 1013, 1013, 1013, 782, 1015, 567, 1015, 783, - 568, 1014, 473, 1013, 1013, 1013, 782, 784, - 567, 784, 783, 568, 473, 1016, 782, 1017, - 567, 1017, 783, 568, 473, 1016, 782, 853, - 472, 853, 783, 1011, 1014, 473, 1013, 1018, - 1011, 1018, 1011, 782, 1019, 567, 1019, 783, - 568, 1011, 1014, 473, 1013, 1018, 1011, 1018, - 1011, 782, 846, 472, 846, 358, 1021, 473, - 1020, 1020, 1020, 482, 1022, 472, 1022, 358, - 484, 1021, 473, 1020, 1020, 1020, 482, 1023, - 472, 1023, 486, 487, 488, 488, 1024, 489, - 487, 489, 487, 473, 1025, 472, 1025, 486, - 847, 848, 847, 1026, 847, 847, 473, 483, - 472, 483, 358, 484, 473, 1027, 482, 1028, - 472, 1028, 358, 484, 473, 1027, 482, 853, - 472, 853, 358, 1005, 1021, 473, 1020, 1029, - 1005, 1029, 1005, 482, 1030, 472, 1030, 358, - 484, 1005, 1021, 473, 1020, 1029, 1005, 1029, - 1005, 482, 1031, 472, 1031, 486, 1008, 1009, - 1009, 473, 1032, 1010, 1008, 1010, 1008, 781, - 1025, 472, 1025, 783, 1013, 1014, 1013, 473, - 1033, 1013, 1013, 782, 1034, 567, 1034, 783, - 568, 1013, 1014, 1013, 473, 1033, 1013, 1013, - 782, 987, 466, 987, 945, 1035, 467, 859, - 129, 32, 129, 998, 1036, 33, 461, 359, - 311, 359, 860, 1038, 312, 1037, 1039, 136, - 1039, 206, 1040, 137, 1041, 101, 1041, 866, - 102, 950, 101, 102, 1043, 102, 1042, 101, - 102, 1045, 102, 1044, 1046, 101, 1046, 1045, - 1047, 102, 1044, 927, 32, 927, 1048, 33, - 338, 339, 32, 339, 1050, 1051, 33, 1049, - 339, 32, 339, 1052, 33, 457, 459, 32, - 459, 1053, 463, 33, 461, 1055, 346, 1055, - 468, 1056, 347, 1054, 1058, 311, 1058, 474, - 1059, 312, 1057, 1060, 311, 1060, 356, 1061, - 1062, 312, 1062, 1063, 1061, 1063, 1061, 354, - 365, 311, 365, 358, 1064, 312, 1064, 1064, - 357, 1065, 311, 1065, 358, 360, 1064, 312, - 1064, 1064, 357, 1066, 311, 1066, 313, 1067, - 1068, 312, 1068, 1069, 1067, 1069, 1067, 367, - 365, 311, 365, 370, 1070, 312, 1070, 1070, - 369, 1071, 308, 1071, 370, 309, 1070, 312, - 1070, 1070, 369, 405, 311, 405, 370, 1073, - 312, 1072, 1072, 1072, 369, 1074, 308, 1074, - 370, 309, 1073, 312, 1072, 1072, 1072, 369, - 371, 308, 371, 370, 309, 312, 1075, 369, - 1076, 308, 1076, 370, 309, 312, 1075, 369, - 412, 311, 412, 370, 1070, 1073, 312, 1072, - 1077, 1070, 1077, 1070, 369, 1078, 308, 1078, - 370, 309, 1070, 1073, 312, 1072, 1077, 1070, - 1077, 1070, 369, 405, 311, 405, 358, 1080, - 312, 1079, 1079, 1079, 357, 1081, 311, 1081, - 358, 360, 1080, 312, 1079, 1079, 1079, 357, - 1082, 311, 1082, 313, 362, 363, 363, 1083, - 364, 362, 364, 362, 312, 1084, 311, 1084, - 313, 406, 407, 406, 1085, 406, 406, 312, - 359, 311, 359, 358, 360, 312, 1086, 357, - 1087, 311, 1087, 358, 360, 312, 1086, 357, - 412, 311, 412, 358, 1064, 1080, 312, 1079, - 1088, 1064, 1088, 1064, 357, 1089, 311, 1089, - 358, 360, 1064, 1080, 312, 1079, 1088, 1064, - 1088, 1064, 357, 1090, 311, 1090, 313, 1067, - 1068, 1068, 312, 1091, 1069, 1067, 1069, 1067, - 367, 1084, 311, 1084, 370, 1072, 1073, 1072, - 312, 1092, 1072, 1072, 369, 1093, 308, 1093, - 370, 309, 1072, 1073, 1072, 312, 1092, 1072, - 1072, 369, 1058, 311, 1058, 936, 1056, 312, - 1054, 1095, 466, 1095, 1096, 1097, 467, 1094, - 1099, 472, 1099, 1100, 1101, 473, 1098, 1102, - 472, 1102, 478, 473, 476, 934, 32, 934, - 1103, 33, 338, 1099, 472, 1099, 1104, 1097, - 473, 1094, 1105, 346, 1105, 348, 1106, 347, - 344, 1107, 32, 1107, 1108, 33, 338, 351, - 311, 351, 1110, 1111, 312, 1109, 351, 311, - 351, 474, 1112, 312, 1057, 1058, 311, 1058, - 1113, 1056, 312, 1054, 1105, 346, 1105, 468, - 1114, 347, 1054, 1115, 466, 1115, 1096, 1116, - 467, 1094, 351, 311, 351, 1113, 1117, 312, - 1054, 339, 32, 339, 1053, 1118, 33, 461, - 1046, 101, 1046, 1120, 1121, 102, 1119, 1122, - 346, 1122, 348, 1123, 347, 344, 1124, 346, - 1124, 1125, 1126, 347, 311, 312, 1128, 312, - 1127, 311, 312, 981, 312, 1129, 359, 311, - 359, 981, 1130, 312, 1129, 359, 311, 359, - 990, 1132, 312, 1131, 1133, 136, 1133, 206, - 1134, 137, 1135, 101, 1135, 866, 102, 864, - 101, 102, 1043, 102, 1136, 101, 102, 1045, - 102, 1137, 1138, 101, 1138, 1045, 1139, 102, - 1137, 1138, 101, 1138, 1120, 1141, 102, 1140, - 351, 311, 351, 1142, 349, 312, 344, 1143, - 346, 1143, 348, 1144, 347, 344, 346, 1125, - 347, 1145, 29, 1145, 30, 1146, 2, 27, - 1147, 32, 1147, 15, 316, 2, 13, 28, - 29, 28, 1149, 376, 2, 1148, 28, 29, - 28, 378, 2, 1150, 1151, 29, 1151, 378, - 1152, 2, 1150, 1151, 29, 1151, 1154, 383, - 1155, 2, 1153, 1157, 387, 1157, 1158, 389, - 1159, 259, 1156, 1161, 308, 1161, 1162, 394, - 1163, 264, 1160, 1164, 311, 1164, 269, 354, - 264, 267, 1165, 1165, 90, 1166, 56, 1167, - 1167, 619, 61, 617, 61, 1169, 61, 1168, - 61, 1171, 61, 1170, 1172, 1172, 1171, 1173, - 61, 1170, 689, 689, 1174, 2, 283, 11, - 11, 1176, 1177, 2, 1175, 11, 11, 1178, - 2, 532, 533, 533, 1179, 537, 2, 535, - 1181, 1181, 541, 1182, 259, 1180, 1184, 1184, - 545, 1185, 264, 1183, 1186, 1186, 269, 1187, - 1188, 264, 1188, 1189, 1187, 1189, 1187, 267, - 301, 301, 271, 1190, 264, 1190, 1190, 270, - 1191, 1191, 271, 273, 1190, 264, 1190, 1190, - 270, 1192, 1192, 275, 1193, 1194, 264, 1194, - 1195, 1193, 1195, 1193, 303, 301, 301, 306, - 1196, 264, 1196, 1196, 305, 1197, 308, 1197, - 306, 309, 1196, 264, 1196, 1196, 305, 1198, - 311, 1198, 275, 367, 264, 303, 1199, 1199, - 306, 1201, 264, 1200, 1200, 1200, 305, 1199, - 1199, 275, 1202, 264, 1203, 1203, 275, 1202, - 264, 1204, 308, 1204, 306, 309, 1201, 264, - 1200, 1200, 1200, 305, 1205, 311, 1205, 275, - 312, 1202, 264, 307, 308, 307, 306, 309, - 264, 1206, 305, 1207, 308, 1207, 306, 309, - 264, 1206, 305, 1208, 1208, 306, 1196, 1201, - 264, 1200, 1209, 1196, 1209, 1196, 305, 1210, - 1210, 275, 264, 1211, 303, 1203, 1203, 306, - 264, 1212, 305, 1213, 308, 1213, 306, 309, - 264, 1212, 305, 1214, 308, 1214, 306, 309, - 1196, 1201, 264, 1200, 1209, 1196, 1209, 1196, - 305, 1215, 311, 1215, 275, 367, 264, 1211, - 303, 272, 272, 763, 1217, 264, 1216, 1199, - 1199, 271, 1219, 264, 1218, 1218, 1218, 270, - 1220, 1220, 271, 273, 1219, 264, 1218, 1218, - 1218, 270, 1221, 1221, 275, 276, 277, 277, - 1222, 278, 276, 278, 276, 264, 1199, 1199, - 275, 1224, 1223, 1223, 1223, 264, 275, 1225, - 264, 1226, 1226, 275, 1225, 264, 1227, 1227, - 275, 1223, 1224, 1223, 1228, 1223, 1223, 264, - 1208, 1208, 275, 302, 1224, 1223, 1229, 302, - 1229, 302, 264, 272, 272, 271, 273, 264, - 1230, 270, 1231, 1231, 271, 273, 264, 1230, - 270, 1208, 1208, 271, 1190, 1219, 264, 1218, - 1232, 1190, 1232, 1190, 270, 1233, 1233, 271, - 273, 1190, 1219, 264, 1218, 1232, 1190, 1232, - 1190, 270, 1234, 1234, 275, 1193, 1194, 1194, - 264, 1235, 1195, 1193, 1195, 1193, 303, 1227, - 1227, 306, 1200, 1201, 1200, 264, 1236, 1200, - 1200, 305, 1237, 308, 1237, 306, 309, 1200, - 1201, 1200, 264, 1236, 1200, 1200, 305, 1184, - 1184, 698, 1182, 264, 1180, 1239, 1239, 1240, - 1241, 540, 1238, 1243, 1243, 1244, 1245, 490, - 1242, 1246, 1246, 549, 490, 547, 696, 696, - 1247, 2, 283, 1243, 1243, 1248, 1241, 490, - 1238, 1249, 1249, 290, 1250, 259, 288, 263, - 263, 1252, 1253, 264, 1251, 263, 263, 545, - 1254, 264, 1183, 1184, 1184, 1255, 1182, 264, - 1180, 1249, 1249, 541, 1256, 259, 1180, 1257, - 1257, 1240, 1258, 540, 1238, 263, 263, 1255, - 1259, 264, 1180, 11, 11, 1179, 1260, 2, - 535, 1172, 1172, 1262, 1263, 61, 1261, 1264, - 1264, 290, 1265, 259, 288, 1266, 1266, 300, - 1267, 259, 264, 1269, 264, 1268, 264, 707, - 264, 1270, 272, 272, 707, 1271, 264, 1270, - 272, 272, 739, 1273, 264, 1272, 1274, 1274, - 90, 1275, 56, 1276, 1276, 619, 61, 724, - 61, 1169, 61, 1277, 61, 1171, 61, 1278, - 1279, 1279, 1171, 1280, 61, 1278, 1279, 1279, - 1262, 1282, 61, 1281, 1283, 29, 1283, 378, - 1284, 2, 1150, 1161, 308, 1161, 1285, 389, - 1159, 264, 1156, 1286, 387, 1286, 1158, 389, - 1287, 259, 1156, 1289, 387, 1289, 1290, 404, - 259, 1288, 1291, 1291, 1292, 2, 10, 263, - 263, 1293, 261, 264, 257, 1294, 1294, 260, - 1295, 259, 257, 1, 0, 1297, 1, 1296, - 1298, 1299, 1300, 1298, 1296, 65, 61, 275, - 264, 491, 490, + 30, 2, 27, 31, 32, 31, 33, 34, + 34, 34, 34, 34, 2, 32, 33, 36, + 35, 35, 35, 35, 35, 2, 37, 37, + 37, 37, 37, 2, 38, 39, 38, 40, + 37, 37, 37, 37, 37, 2, 42, 29, + 42, 30, 33, 41, 43, 32, 43, 44, + 44, 44, 44, 44, 33, 32, 46, 45, + 45, 45, 45, 45, 33, 32, 47, 47, + 47, 47, 47, 33, 48, 39, 48, 40, + 47, 47, 47, 47, 47, 33, 49, 49, + 51, 50, 50, 50, 2, 49, 49, 52, + 2, 53, 53, 52, 2, 54, 2, 55, + 55, 54, 2, 56, 56, 24, 51, 50, + 57, 24, 57, 24, 2, 58, 58, 2, + 2, 59, 25, 53, 53, 2, 60, 27, + 61, 29, 61, 30, 2, 60, 27, 62, + 32, 62, 2, 63, 64, 2, 64, 64, + 64, 64, 25, 32, 33, 33, 41, 2, + 66, 65, 2, 65, 65, 65, 65, 27, + 28, 29, 28, 30, 66, 65, 2, 65, + 65, 65, 65, 27, 28, 29, 28, 30, + 67, 2, 67, 67, 67, 67, 27, 68, + 69, 68, 70, 67, 2, 67, 67, 67, + 67, 27, 17, 17, 72, 73, 2, 71, + 75, 75, 77, 78, 76, 74, 80, 80, + 82, 83, 81, 79, 84, 84, 85, 86, + 87, 87, 88, 86, 88, 86, 81, 85, + 81, 89, 89, 90, 2, 2, 92, 2, + 91, 2, 2, 93, 17, 17, 94, 2, + 93, 17, 17, 96, 97, 2, 95, 99, + 99, 100, 101, 76, 98, 80, 80, 103, + 104, 81, 102, 105, 105, 106, 2, 93, + 80, 80, 107, 101, 81, 98, 108, 108, + 100, 109, 76, 98, 110, 76, 111, 111, + 85, 112, 112, 112, 81, 114, 114, 85, + 81, 113, 81, 116, 81, 115, 117, 118, + 117, 116, 119, 81, 115, 120, 121, 120, + 85, 122, 123, 123, 123, 123, 123, 81, + 121, 124, 122, 125, 32, 125, 126, 33, + 127, 32, 127, 128, 129, 129, 130, 128, + 130, 128, 33, 131, 32, 131, 132, 132, + 132, 33, 133, 32, 133, 33, 33, 63, + 134, 32, 134, 136, 135, 135, 135, 33, + 134, 32, 134, 137, 33, 138, 32, 138, + 137, 33, 32, 139, 33, 140, 32, 140, + 139, 33, 141, 32, 141, 132, 136, 135, + 142, 132, 142, 132, 33, 143, 32, 143, + 33, 33, 144, 63, 138, 32, 138, 33, + 145, 41, 146, 29, 146, 30, 33, 145, + 41, 147, 32, 147, 33, 148, 33, 148, + 148, 148, 148, 63, 32, 33, 150, 149, + 33, 149, 149, 149, 149, 41, 42, 29, + 42, 30, 150, 149, 33, 149, 149, 149, + 149, 41, 42, 29, 42, 30, 151, 33, + 151, 151, 151, 151, 41, 152, 69, 152, + 70, 151, 33, 151, 151, 151, 151, 41, + 32, 33, 154, 33, 153, 32, 33, 33, + 155, 156, 32, 156, 157, 33, 155, 156, + 32, 156, 159, 160, 33, 158, 162, 163, + 162, 165, 166, 164, 161, 168, 121, 168, + 169, 170, 122, 167, 171, 121, 171, 124, + 172, 173, 173, 174, 172, 174, 172, 122, + 175, 121, 175, 124, 176, 176, 176, 122, + 178, 121, 178, 124, 122, 177, 121, 122, + 180, 122, 179, 181, 118, 181, 180, 119, + 122, 179, 182, 121, 182, 124, 183, 183, + 183, 183, 183, 122, 121, 124, 185, 184, + 184, 184, 184, 184, 122, 121, 124, 186, + 186, 186, 186, 186, 122, 187, 188, 187, + 124, 189, 186, 186, 186, 186, 186, 122, + 190, 29, 190, 30, 191, 33, 41, 192, + 32, 192, 193, 194, 129, 44, 194, 195, + 193, 195, 193, 33, 131, 32, 131, 196, + 45, 46, 45, 45, 196, 196, 33, 134, + 32, 134, 45, 136, 135, 46, 45, 197, + 197, 45, 197, 45, 33, 141, 32, 141, + 196, 136, 135, 46, 45, 197, 198, 196, + 198, 196, 33, 42, 29, 42, 200, 201, + 33, 199, 42, 29, 42, 203, 33, 202, + 204, 29, 204, 203, 205, 33, 202, 204, + 29, 204, 207, 208, 209, 33, 206, 211, + 212, 211, 213, 214, 215, 164, 210, 217, + 118, 217, 218, 219, 220, 122, 216, 221, + 121, 221, 124, 222, 223, 173, 183, 223, + 224, 222, 224, 222, 122, 175, 121, 175, + 124, 225, 184, 185, 184, 184, 225, 225, + 122, 226, 121, 226, 124, 184, 228, 229, + 185, 184, 227, 227, 184, 227, 184, 122, + 226, 121, 226, 124, 230, 122, 231, 121, + 231, 124, 230, 122, 121, 124, 232, 122, + 233, 121, 233, 124, 232, 122, 226, 121, + 226, 124, 228, 229, 229, 229, 122, 234, + 121, 234, 124, 225, 228, 229, 185, 184, + 227, 235, 225, 235, 225, 122, 236, 121, + 236, 124, 122, 237, 177, 231, 121, 231, + 180, 122, 238, 179, 239, 118, 239, 180, + 119, 122, 238, 179, 240, 121, 240, 124, + 241, 122, 241, 241, 241, 241, 177, 121, + 122, 180, 243, 242, 122, 242, 242, 242, + 242, 179, 181, 118, 181, 180, 119, 243, + 242, 122, 242, 242, 242, 242, 179, 181, + 118, 181, 180, 119, 244, 122, 244, 244, + 244, 244, 179, 245, 246, 245, 180, 247, + 244, 122, 244, 244, 244, 244, 179, 248, + 29, 248, 203, 249, 33, 202, 217, 118, + 217, 250, 214, 215, 122, 210, 251, 212, + 251, 213, 214, 252, 164, 210, 254, 212, + 254, 255, 256, 164, 253, 234, 121, 234, + 124, 176, 228, 229, 257, 176, 257, 176, + 122, 258, 32, 258, 259, 33, 155, 168, + 121, 168, 260, 166, 122, 161, 261, 163, + 261, 165, 262, 164, 161, 163, 263, 164, + 85, 265, 264, 264, 264, 264, 264, 81, + 85, 266, 266, 266, 266, 266, 81, 267, + 188, 267, 85, 189, 266, 266, 266, 266, + 266, 81, 268, 29, 268, 30, 269, 2, + 27, 270, 32, 270, 33, 271, 272, 21, + 34, 272, 273, 271, 273, 271, 2, 23, + 23, 274, 35, 36, 35, 35, 274, 274, + 2, 49, 49, 35, 51, 50, 36, 35, + 275, 275, 35, 275, 35, 2, 56, 56, + 274, 51, 50, 36, 35, 275, 276, 274, + 276, 274, 2, 28, 29, 28, 278, 201, + 2, 277, 28, 29, 28, 203, 2, 279, + 280, 29, 280, 203, 281, 2, 279, 280, + 29, 280, 283, 208, 284, 2, 282, 286, + 212, 286, 287, 214, 288, 76, 285, 290, + 118, 290, 291, 219, 292, 81, 289, 293, + 121, 293, 85, 122, 294, 295, 87, 123, + 295, 296, 294, 296, 294, 81, 111, 111, + 85, 297, 264, 265, 264, 264, 297, 297, + 81, 298, 298, 85, 264, 300, 301, 265, + 264, 299, 299, 264, 299, 264, 81, 298, + 298, 85, 302, 81, 303, 303, 85, 302, + 81, 85, 304, 81, 305, 305, 85, 304, + 81, 298, 298, 85, 300, 301, 301, 301, + 81, 306, 306, 85, 297, 300, 301, 265, + 264, 299, 307, 297, 307, 297, 81, 308, + 308, 85, 81, 309, 113, 303, 303, 116, + 81, 310, 115, 311, 118, 311, 116, 119, + 81, 310, 115, 312, 121, 312, 85, 177, + 313, 81, 313, 313, 313, 313, 113, 81, + 116, 315, 314, 81, 314, 314, 314, 314, + 115, 117, 118, 117, 116, 119, 315, 314, + 81, 314, 314, 314, 314, 115, 117, 118, + 117, 116, 119, 316, 81, 316, 316, 316, + 316, 115, 317, 246, 317, 116, 247, 316, + 81, 316, 316, 316, 316, 115, 318, 29, + 318, 203, 319, 2, 279, 290, 118, 290, + 320, 214, 288, 81, 285, 321, 212, 321, + 287, 214, 322, 76, 285, 324, 212, 324, + 325, 256, 76, 323, 306, 306, 85, 112, + 300, 301, 326, 112, 326, 112, 81, 327, + 327, 328, 2, 16, 80, 80, 329, 78, + 81, 74, 330, 330, 77, 331, 76, 74, + 11, 11, 333, 334, 2, 332, 336, 336, + 338, 339, 337, 335, 341, 341, 343, 344, + 342, 340, 346, 346, 347, 342, 345, 342, + 349, 342, 348, 350, 350, 349, 351, 342, + 348, 352, 352, 353, 354, 355, 355, 356, + 354, 356, 354, 342, 353, 342, 357, 357, + 358, 2, 2, 360, 2, 359, 2, 2, + 361, 11, 11, 362, 2, 361, 11, 11, + 364, 365, 2, 363, 367, 367, 368, 369, + 337, 366, 341, 341, 371, 372, 342, 370, + 373, 373, 374, 2, 361, 341, 341, 375, + 369, 342, 366, 376, 376, 368, 377, 337, + 366, 378, 337, 379, 379, 353, 380, 380, + 380, 342, 382, 382, 353, 342, 381, 342, + 384, 342, 383, 385, 386, 385, 384, 387, + 342, 383, 388, 389, 388, 353, 390, 391, + 391, 391, 391, 391, 342, 389, 392, 390, + 393, 32, 393, 394, 33, 396, 32, 396, + 397, 33, 395, 32, 33, 33, 398, 156, + 32, 156, 399, 33, 398, 156, 32, 156, + 401, 402, 33, 400, 404, 163, 404, 405, + 406, 164, 403, 168, 121, 168, 408, 409, + 122, 407, 410, 32, 410, 411, 33, 398, + 168, 121, 168, 412, 406, 122, 403, 413, + 163, 413, 405, 414, 164, 403, 32, 33, + 416, 33, 415, 32, 33, 33, 417, 418, + 32, 418, 419, 33, 417, 418, 32, 418, + 421, 422, 33, 420, 424, 425, 424, 427, + 428, 426, 423, 430, 389, 430, 431, 432, + 390, 429, 434, 389, 434, 435, 390, 433, + 389, 390, 437, 390, 436, 438, 389, 438, + 437, 439, 390, 436, 440, 389, 440, 392, + 441, 442, 442, 443, 441, 443, 441, 390, + 444, 389, 444, 392, 445, 445, 445, 390, + 447, 389, 447, 392, 390, 446, 389, 390, + 449, 390, 448, 450, 386, 450, 449, 387, + 390, 448, 451, 389, 451, 392, 452, 452, + 452, 452, 452, 390, 389, 392, 454, 453, + 453, 453, 453, 453, 390, 389, 392, 455, + 455, 455, 455, 455, 390, 456, 457, 456, + 392, 458, 455, 455, 455, 455, 455, 390, + 459, 29, 459, 30, 460, 33, 41, 461, + 32, 461, 397, 462, 33, 462, 462, 462, + 462, 395, 32, 33, 464, 463, 33, 463, + 463, 463, 463, 398, 156, 32, 156, 399, + 464, 463, 33, 463, 463, 463, 463, 398, + 156, 32, 156, 399, 465, 33, 465, 465, + 465, 465, 398, 466, 39, 466, 467, 399, + 465, 33, 465, 465, 465, 465, 398, 42, + 29, 42, 469, 470, 33, 468, 42, 29, + 42, 472, 33, 471, 473, 29, 473, 472, + 474, 33, 471, 473, 29, 473, 476, 477, + 478, 33, 475, 480, 481, 480, 482, 483, + 484, 426, 479, 486, 386, 486, 487, 488, + 489, 390, 485, 490, 389, 490, 435, 491, + 390, 491, 491, 491, 491, 433, 492, 163, + 492, 263, 493, 164, 495, 121, 495, 496, + 122, 494, 121, 122, 498, 122, 497, 168, + 121, 168, 498, 499, 122, 497, 258, 32, + 258, 500, 33, 398, 168, 121, 168, 502, + 503, 122, 501, 504, 163, 504, 405, 505, + 164, 403, 506, 163, 506, 263, 507, 164, + 121, 122, 509, 122, 508, 121, 122, 511, + 122, 510, 168, 121, 168, 511, 512, 122, + 510, 513, 32, 513, 514, 33, 155, 168, + 121, 168, 516, 517, 122, 515, 518, 163, + 518, 165, 519, 164, 161, 520, 163, 520, + 263, 521, 164, 121, 122, 523, 122, 522, + 121, 122, 169, 122, 167, 506, 163, 506, + 263, 524, 164, 121, 122, 526, 122, 525, + 121, 122, 528, 122, 527, 529, 121, 529, + 528, 530, 122, 527, 531, 32, 531, 532, + 33, 417, 533, 32, 533, 397, 534, 535, + 33, 535, 536, 534, 536, 534, 395, 131, + 32, 131, 537, 33, 537, 537, 398, 538, + 32, 538, 399, 537, 33, 537, 537, 398, + 539, 32, 539, 33, 540, 541, 33, 541, + 542, 540, 542, 540, 63, 131, 32, 131, + 543, 33, 543, 543, 41, 544, 29, 544, + 30, 543, 33, 543, 543, 41, 134, 32, + 134, 546, 33, 545, 545, 545, 41, 547, + 29, 547, 30, 546, 33, 545, 545, 545, + 41, 548, 32, 548, 44, 44, 549, 44, + 44, 33, 138, 32, 138, 46, 45, 45, + 550, 45, 45, 33, 42, 29, 42, 30, + 33, 551, 41, 552, 29, 552, 30, 33, + 551, 41, 141, 32, 141, 543, 546, 33, + 545, 553, 543, 553, 543, 41, 554, 29, + 554, 30, 543, 546, 33, 545, 553, 543, + 553, 543, 41, 555, 32, 555, 33, 148, + 33, 148, 556, 148, 148, 63, 138, 32, + 138, 150, 149, 33, 149, 557, 149, 149, + 41, 146, 29, 146, 30, 150, 149, 33, + 149, 557, 149, 149, 41, 134, 32, 134, + 559, 33, 558, 558, 558, 398, 560, 32, + 560, 399, 559, 33, 558, 558, 558, 398, + 561, 32, 561, 128, 129, 129, 562, 130, + 128, 130, 128, 33, 563, 32, 563, 135, + 136, 135, 564, 135, 135, 33, 156, 32, + 156, 399, 33, 565, 398, 566, 32, 566, + 399, 33, 565, 398, 141, 32, 141, 537, + 559, 33, 558, 567, 537, 567, 537, 398, + 568, 32, 568, 399, 537, 559, 33, 558, + 567, 537, 567, 537, 398, 569, 32, 569, + 33, 540, 541, 541, 33, 570, 542, 540, + 542, 540, 63, 563, 32, 563, 545, 546, + 545, 33, 571, 545, 545, 41, 572, 29, + 572, 30, 545, 546, 545, 33, 571, 545, + 545, 41, 418, 32, 418, 574, 575, 33, + 573, 418, 32, 418, 577, 33, 576, 578, + 32, 578, 579, 33, 576, 578, 32, 578, + 581, 582, 33, 580, 584, 585, 584, 587, + 588, 586, 583, 590, 591, 590, 593, 594, + 592, 589, 596, 591, 596, 597, 598, 599, + 592, 599, 600, 598, 600, 598, 595, 591, + 592, 437, 592, 601, 602, 591, 602, 437, + 603, 592, 601, 604, 591, 604, 605, 606, + 607, 607, 608, 606, 608, 606, 592, 591, + 605, 592, 610, 609, 611, 611, 612, 2, + 613, 613, 15, 614, 615, 2, 615, 616, + 614, 616, 614, 13, 23, 23, 617, 2, + 617, 617, 16, 618, 618, 18, 617, 2, + 617, 617, 16, 619, 619, 2, 620, 621, + 2, 621, 622, 620, 622, 620, 25, 23, + 23, 623, 2, 623, 623, 27, 624, 29, + 624, 30, 623, 2, 623, 623, 27, 49, + 49, 626, 2, 625, 625, 625, 27, 627, + 29, 627, 30, 626, 2, 625, 625, 625, + 27, 628, 32, 628, 33, 34, 34, 629, + 34, 34, 2, 53, 53, 36, 35, 35, + 630, 35, 35, 2, 28, 29, 28, 30, + 2, 631, 27, 632, 29, 632, 30, 2, + 631, 27, 56, 56, 623, 626, 2, 625, + 633, 623, 633, 623, 27, 634, 29, 634, + 30, 623, 626, 2, 625, 633, 623, 633, + 623, 27, 635, 32, 635, 2, 63, 64, + 2, 64, 636, 64, 64, 25, 53, 53, + 66, 65, 2, 65, 637, 65, 65, 27, + 61, 29, 61, 30, 66, 65, 2, 65, + 637, 65, 65, 27, 49, 49, 639, 2, + 638, 638, 638, 16, 640, 640, 18, 639, + 2, 638, 638, 638, 16, 641, 641, 20, + 21, 21, 642, 22, 20, 22, 20, 2, + 643, 643, 50, 51, 50, 644, 50, 50, + 2, 17, 17, 18, 2, 645, 16, 646, + 646, 18, 2, 645, 16, 56, 56, 617, + 639, 2, 638, 647, 617, 647, 617, 16, + 648, 648, 18, 617, 639, 2, 638, 647, + 617, 647, 617, 16, 649, 649, 2, 620, + 621, 621, 2, 650, 622, 620, 622, 620, + 25, 643, 643, 625, 626, 625, 2, 651, + 625, 625, 27, 652, 29, 652, 30, 625, + 626, 625, 2, 651, 625, 625, 27, 2, + 654, 2, 653, 2, 2, 655, 656, 656, + 657, 2, 655, 656, 656, 659, 660, 2, + 658, 662, 662, 664, 665, 663, 661, 667, + 667, 668, 669, 609, 666, 671, 671, 672, + 673, 674, 609, 674, 675, 673, 675, 673, + 670, 609, 349, 609, 676, 677, 677, 349, + 678, 609, 676, 679, 679, 610, 680, 681, + 681, 682, 680, 682, 680, 609, 683, 683, + 610, 684, 684, 684, 609, 686, 686, 610, + 609, 685, 609, 688, 609, 687, 689, 690, + 689, 688, 691, 609, 687, 692, 591, 692, + 610, 592, 693, 693, 693, 693, 693, 609, + 610, 695, 694, 694, 694, 694, 694, 609, + 610, 696, 696, 696, 696, 696, 609, 697, + 698, 697, 610, 699, 696, 696, 696, 696, + 696, 609, 700, 29, 700, 30, 701, 2, + 27, 702, 32, 702, 15, 395, 703, 704, + 615, 706, 2, 704, 705, 703, 705, 703, + 13, 23, 23, 707, 708, 709, 708, 2, + 708, 707, 707, 16, 618, 618, 18, 707, + 708, 709, 708, 2, 708, 707, 707, 16, + 17, 17, 18, 709, 708, 2, 708, 708, + 708, 708, 16, 17, 17, 18, 710, 2, + 710, 710, 710, 710, 16, 711, 39, 711, + 467, 18, 710, 2, 710, 710, 710, 710, + 16, 49, 49, 708, 639, 638, 709, 708, + 2, 712, 712, 708, 712, 708, 16, 640, + 640, 18, 708, 639, 638, 709, 708, 2, + 712, 712, 708, 712, 708, 16, 56, 56, + 707, 639, 638, 709, 708, 2, 712, 713, + 707, 713, 707, 16, 648, 648, 18, 707, + 639, 638, 709, 708, 2, 712, 713, 707, + 713, 707, 16, 2, 709, 708, 2, 708, + 708, 708, 708, 16, 28, 29, 28, 715, + 716, 2, 714, 28, 29, 28, 718, 2, + 717, 719, 29, 719, 718, 720, 2, 717, + 722, 29, 722, 718, 723, 33, 721, 724, + 32, 724, 397, 725, 726, 535, 462, 33, + 726, 727, 725, 727, 725, 395, 131, 32, + 131, 728, 463, 464, 463, 33, 463, 728, + 728, 398, 538, 32, 538, 399, 728, 463, + 464, 463, 33, 463, 728, 728, 398, 134, + 32, 134, 463, 559, 558, 464, 463, 33, + 729, 729, 463, 729, 463, 398, 560, 32, + 560, 399, 463, 559, 558, 464, 463, 33, + 729, 729, 463, 729, 463, 398, 141, 32, + 141, 728, 559, 558, 464, 463, 33, 729, + 730, 728, 730, 728, 398, 568, 32, 568, + 399, 728, 559, 558, 464, 463, 33, 729, + 730, 728, 730, 728, 398, 722, 29, 722, + 732, 733, 734, 33, 731, 736, 737, 736, + 738, 739, 740, 586, 735, 742, 690, 742, + 743, 744, 745, 592, 741, 746, 591, 746, + 597, 747, 748, 599, 750, 592, 748, 749, + 747, 749, 747, 595, 751, 163, 751, 263, + 752, 164, 753, 121, 753, 496, 754, 755, + 122, 755, 756, 754, 756, 754, 494, 175, + 121, 175, 498, 757, 122, 757, 757, 497, + 758, 121, 758, 498, 499, 757, 122, 757, + 757, 497, 759, 121, 759, 124, 760, 761, + 122, 761, 762, 760, 762, 760, 177, 175, + 121, 175, 180, 763, 122, 763, 763, 179, + 764, 118, 764, 180, 119, 763, 122, 763, + 763, 179, 226, 121, 226, 180, 766, 122, + 765, 765, 765, 179, 767, 118, 767, 180, + 119, 766, 122, 765, 765, 765, 179, 768, + 121, 768, 124, 183, 183, 769, 183, 183, + 122, 231, 121, 231, 124, 185, 184, 184, + 770, 184, 184, 122, 181, 118, 181, 180, + 119, 122, 771, 179, 772, 118, 772, 180, + 119, 122, 771, 179, 234, 121, 234, 180, + 763, 766, 122, 765, 773, 763, 773, 763, + 179, 774, 118, 774, 180, 119, 763, 766, + 122, 765, 773, 763, 773, 763, 179, 775, + 121, 775, 124, 241, 122, 241, 776, 241, + 241, 177, 231, 121, 231, 180, 243, 242, + 122, 242, 777, 242, 242, 179, 239, 118, + 239, 180, 119, 243, 242, 122, 242, 777, + 242, 242, 179, 226, 121, 226, 498, 779, + 122, 778, 778, 778, 497, 780, 121, 780, + 498, 499, 779, 122, 778, 778, 778, 497, + 781, 121, 781, 124, 172, 173, 173, 782, + 174, 172, 174, 172, 122, 783, 121, 783, + 124, 229, 228, 229, 784, 229, 229, 122, + 168, 121, 168, 498, 499, 122, 785, 497, + 786, 121, 786, 498, 499, 122, 785, 497, + 234, 121, 234, 498, 757, 779, 122, 778, + 787, 757, 787, 757, 497, 788, 121, 788, + 498, 499, 757, 779, 122, 778, 787, 757, + 787, 757, 497, 789, 121, 789, 124, 760, + 761, 761, 122, 790, 762, 760, 762, 760, + 177, 783, 121, 783, 180, 765, 766, 765, + 122, 791, 765, 765, 179, 792, 118, 792, + 180, 119, 765, 766, 765, 122, 791, 765, + 765, 179, 121, 122, 794, 122, 793, 121, + 122, 796, 122, 795, 797, 121, 797, 796, + 798, 122, 795, 531, 32, 531, 799, 33, + 576, 797, 121, 797, 801, 802, 122, 800, + 803, 585, 803, 587, 804, 586, 583, 805, + 32, 805, 806, 33, 576, 590, 591, 590, + 807, 588, 592, 583, 808, 585, 808, 587, + 809, 586, 583, 810, 585, 810, 811, 812, + 586, 813, 32, 813, 814, 33, 32, 33, + 816, 33, 815, 32, 33, 33, 576, 585, + 811, 586, 591, 592, 818, 592, 817, 591, + 592, 820, 592, 819, 602, 591, 602, 820, + 821, 592, 819, 822, 32, 822, 823, 33, + 155, 156, 32, 156, 825, 826, 33, 824, + 156, 32, 156, 827, 33, 576, 578, 32, + 578, 828, 829, 33, 580, 831, 163, 831, + 832, 833, 164, 830, 835, 121, 835, 796, + 836, 122, 834, 838, 121, 838, 496, 839, + 840, 122, 840, 841, 839, 841, 839, 837, + 121, 122, 408, 122, 407, 175, 121, 175, + 408, 842, 122, 842, 842, 407, 758, 121, + 758, 408, 409, 842, 122, 842, 842, 407, + 226, 121, 226, 408, 844, 122, 843, 843, + 843, 407, 780, 121, 780, 408, 409, 844, + 122, 843, 843, 843, 407, 168, 121, 168, + 408, 409, 122, 845, 407, 786, 121, 786, + 408, 409, 122, 845, 407, 234, 121, 234, + 408, 842, 844, 122, 843, 846, 842, 846, + 842, 407, 788, 121, 788, 408, 409, 842, + 844, 122, 843, 846, 842, 846, 842, 407, + 835, 121, 835, 801, 847, 122, 830, 849, + 585, 849, 850, 851, 586, 848, 602, 591, + 602, 852, 851, 592, 848, 853, 163, 853, + 165, 854, 164, 161, 168, 121, 168, 856, + 857, 122, 855, 168, 121, 168, 796, 858, + 122, 834, 835, 121, 835, 859, 833, 122, + 830, 860, 163, 860, 832, 861, 164, 830, + 862, 585, 862, 850, 863, 586, 848, 168, + 121, 168, 859, 864, 122, 830, 156, 32, + 156, 828, 865, 33, 580, 866, 163, 866, + 263, 867, 164, 121, 122, 794, 122, 868, + 121, 122, 796, 122, 834, 869, 591, 869, + 437, 870, 871, 872, 871, 592, 871, 870, + 870, 601, 874, 591, 874, 605, 592, 873, + 591, 592, 876, 592, 875, 877, 690, 877, + 876, 691, 592, 875, 878, 591, 878, 605, + 879, 879, 879, 879, 879, 592, 591, 605, + 881, 880, 880, 880, 880, 880, 592, 591, + 605, 882, 882, 882, 882, 882, 592, 883, + 698, 883, 605, 699, 882, 882, 882, 882, + 882, 592, 884, 29, 884, 30, 885, 33, + 41, 42, 29, 42, 887, 716, 33, 886, + 42, 29, 42, 718, 33, 721, 889, 737, + 889, 890, 891, 586, 888, 822, 32, 822, + 892, 33, 398, 156, 32, 156, 893, 894, + 33, 824, 849, 585, 849, 896, 897, 586, + 895, 602, 591, 602, 898, 899, 592, 895, + 900, 163, 900, 405, 901, 164, 403, 168, + 121, 168, 902, 903, 122, 855, 904, 585, + 904, 896, 905, 586, 895, 168, 121, 168, + 859, 906, 122, 830, 156, 32, 156, 828, + 907, 33, 580, 908, 591, 908, 437, 603, + 870, 871, 872, 871, 592, 871, 870, 870, + 601, 909, 591, 909, 605, 910, 911, 592, + 911, 912, 910, 912, 910, 873, 869, 591, + 869, 876, 913, 592, 913, 913, 875, 914, + 690, 914, 876, 691, 913, 592, 913, 913, + 875, 915, 591, 915, 605, 916, 592, 916, + 916, 916, 916, 873, 591, 592, 876, 918, + 917, 592, 917, 917, 917, 917, 875, 877, + 690, 877, 876, 691, 918, 917, 592, 917, + 917, 917, 917, 875, 877, 690, 877, 876, + 691, 919, 592, 919, 919, 919, 919, 875, + 920, 921, 920, 876, 922, 919, 592, 919, + 919, 919, 919, 875, 923, 591, 923, 876, + 925, 592, 924, 924, 924, 875, 923, 591, + 923, 605, 926, 592, 927, 591, 927, 605, + 926, 592, 928, 690, 928, 876, 691, 925, + 592, 924, 924, 924, 875, 929, 591, 929, + 605, 879, 879, 930, 879, 879, 592, 927, + 591, 927, 605, 881, 880, 880, 931, 880, + 880, 592, 877, 690, 877, 876, 691, 592, + 932, 875, 933, 690, 933, 876, 691, 592, + 932, 875, 934, 591, 934, 876, 913, 925, + 592, 924, 935, 913, 935, 913, 875, 936, + 591, 936, 605, 592, 937, 873, 927, 591, + 927, 876, 592, 938, 875, 939, 690, 939, + 876, 691, 592, 938, 875, 940, 690, 940, + 876, 691, 913, 925, 592, 924, 935, 913, + 935, 913, 875, 941, 591, 941, 605, 916, + 592, 916, 942, 916, 916, 873, 927, 591, + 927, 876, 918, 917, 592, 917, 943, 917, + 917, 875, 939, 690, 939, 876, 691, 918, + 917, 592, 917, 943, 917, 917, 875, 602, + 591, 602, 437, 603, 872, 871, 592, 871, + 871, 871, 871, 601, 602, 591, 602, 437, + 603, 944, 592, 944, 944, 944, 944, 601, + 945, 698, 945, 437, 946, 603, 944, 592, + 944, 944, 944, 944, 601, 947, 591, 947, + 605, 948, 949, 607, 879, 949, 950, 948, + 950, 948, 592, 869, 591, 869, 605, 951, + 880, 881, 880, 880, 951, 951, 592, 923, + 591, 923, 605, 880, 953, 954, 881, 880, + 952, 952, 880, 952, 880, 592, 591, 605, + 955, 592, 956, 591, 956, 605, 955, 592, + 923, 591, 923, 605, 953, 954, 954, 954, + 592, 934, 591, 934, 605, 951, 953, 954, + 881, 880, 952, 957, 951, 957, 951, 592, + 923, 591, 923, 437, 871, 959, 960, 872, + 871, 592, 958, 958, 871, 958, 871, 601, + 961, 591, 961, 437, 603, 871, 959, 960, + 872, 871, 592, 958, 958, 871, 958, 871, + 601, 962, 591, 962, 605, 606, 607, 607, + 963, 608, 606, 608, 606, 592, 869, 591, + 869, 605, 964, 964, 964, 592, 965, 591, + 965, 605, 954, 953, 954, 966, 954, 954, + 592, 934, 591, 934, 605, 964, 953, 954, + 967, 964, 967, 964, 592, 602, 591, 602, + 437, 603, 592, 968, 601, 969, 591, 969, + 437, 603, 592, 968, 601, 961, 591, 961, + 437, 603, 959, 592, 960, 960, 960, 601, + 923, 591, 923, 437, 959, 592, 960, 960, + 960, 601, 934, 591, 934, 437, 870, 959, + 960, 872, 871, 592, 958, 970, 870, 970, + 870, 601, 971, 591, 971, 437, 603, 870, + 959, 960, 872, 871, 592, 958, 970, 870, + 970, 870, 601, 972, 591, 972, 605, 910, + 911, 911, 592, 973, 912, 910, 912, 910, + 873, 965, 591, 965, 876, 924, 925, 924, + 592, 974, 924, 924, 875, 975, 690, 975, + 876, 691, 924, 925, 924, 592, 974, 924, + 924, 875, 591, 592, 437, 872, 871, 592, + 871, 871, 871, 871, 601, 976, 29, 976, + 718, 977, 33, 721, 742, 690, 742, 978, + 739, 740, 592, 735, 979, 737, 979, 738, + 739, 980, 586, 735, 719, 29, 719, 982, + 733, 983, 2, 981, 985, 737, 985, 986, + 739, 987, 663, 984, 989, 690, 989, 990, + 744, 991, 609, 988, 992, 591, 992, 672, + 595, 993, 994, 674, 996, 609, 994, 995, + 993, 995, 993, 670, 997, 997, 110, 998, + 76, 1000, 1000, 1001, 1002, 1003, 81, 1003, + 1004, 1002, 1004, 1002, 999, 81, 1006, 81, + 1005, 80, 80, 1006, 1007, 81, 1005, 105, + 105, 1008, 2, 16, 80, 80, 1010, 1011, + 81, 1009, 1012, 1012, 77, 1013, 76, 74, + 1014, 1014, 110, 1015, 76, 81, 1017, 81, + 1016, 81, 1019, 81, 1018, 80, 80, 1019, + 1020, 81, 1018, 1021, 1021, 1022, 2, 93, + 80, 80, 1024, 1025, 81, 1023, 1026, 1026, + 100, 1027, 76, 98, 1028, 1028, 110, 1029, + 76, 81, 1031, 81, 1030, 81, 103, 81, + 102, 1014, 1014, 110, 1032, 76, 111, 111, + 1006, 1033, 81, 1033, 1033, 1005, 1034, 1034, + 1006, 1007, 1033, 81, 1033, 1033, 1005, 1035, + 1035, 85, 1036, 1037, 81, 1037, 1038, 1036, + 1038, 1036, 113, 111, 111, 116, 1039, 81, + 1039, 1039, 115, 1040, 118, 1040, 116, 119, + 1039, 81, 1039, 1039, 115, 298, 298, 116, + 1042, 81, 1041, 1041, 1041, 115, 1043, 118, + 1043, 116, 119, 1042, 81, 1041, 1041, 1041, + 115, 1044, 121, 1044, 85, 122, 123, 123, + 1045, 123, 123, 81, 303, 303, 85, 265, + 264, 264, 1046, 264, 264, 81, 117, 118, + 117, 116, 119, 81, 1047, 115, 1048, 118, + 1048, 116, 119, 81, 1047, 115, 306, 306, + 116, 1039, 1042, 81, 1041, 1049, 1039, 1049, + 1039, 115, 1050, 118, 1050, 116, 119, 1039, + 1042, 81, 1041, 1049, 1039, 1049, 1039, 115, + 1051, 121, 1051, 85, 177, 313, 81, 313, + 1052, 313, 313, 113, 303, 303, 116, 315, + 314, 81, 314, 1053, 314, 314, 115, 311, + 118, 311, 116, 119, 315, 314, 81, 314, + 1053, 314, 314, 115, 298, 298, 1006, 1055, + 81, 1054, 1054, 1054, 1005, 1056, 1056, 1006, + 1007, 1055, 81, 1054, 1054, 1054, 1005, 1057, + 1057, 85, 86, 87, 87, 1058, 88, 86, + 88, 86, 81, 1059, 1059, 85, 301, 300, + 301, 1060, 301, 301, 81, 80, 80, 1006, + 1007, 81, 1061, 1005, 1062, 1062, 1006, 1007, + 81, 1061, 1005, 306, 306, 1006, 1033, 1055, + 81, 1054, 1063, 1033, 1063, 1033, 1005, 1064, + 1064, 1006, 1007, 1033, 1055, 81, 1054, 1063, + 1033, 1063, 1033, 1005, 1065, 1065, 85, 1036, + 1037, 1037, 81, 1066, 1038, 1036, 1038, 1036, + 113, 1059, 1059, 116, 1041, 1042, 1041, 81, + 1067, 1041, 1041, 115, 1068, 118, 1068, 116, + 119, 1041, 1042, 1041, 81, 1067, 1041, 1041, + 115, 81, 1070, 81, 1069, 81, 1072, 81, + 1071, 1073, 1073, 1072, 1074, 81, 1071, 1075, + 1075, 1076, 2, 655, 1073, 1073, 1078, 1079, + 81, 1077, 1080, 1080, 664, 1081, 663, 661, + 1082, 1082, 1083, 2, 655, 667, 667, 1084, + 665, 609, 661, 1085, 1085, 664, 1086, 663, + 661, 1087, 1087, 1088, 1089, 663, 609, 1091, + 609, 1090, 609, 1093, 609, 1092, 677, 677, + 1093, 1094, 609, 1092, 1095, 1095, 1096, 2, + 93, 17, 17, 1098, 1099, 2, 1097, 17, + 17, 1100, 2, 655, 656, 656, 1101, 1102, + 2, 658, 1104, 1104, 1105, 1106, 76, 1103, + 1108, 1108, 1072, 1109, 81, 1107, 1111, 1111, + 1001, 1112, 1113, 81, 1113, 1114, 1112, 1114, + 1112, 1110, 81, 82, 81, 79, 111, 111, + 82, 1115, 81, 1115, 1115, 79, 1034, 1034, + 82, 83, 1115, 81, 1115, 1115, 79, 298, + 298, 82, 1117, 81, 1116, 1116, 1116, 79, + 1056, 1056, 82, 83, 1117, 81, 1116, 1116, + 1116, 79, 80, 80, 82, 83, 81, 1118, + 79, 1062, 1062, 82, 83, 81, 1118, 79, + 306, 306, 82, 1115, 1117, 81, 1116, 1119, + 1115, 1119, 1115, 79, 1064, 1064, 82, 83, + 1115, 1117, 81, 1116, 1119, 1115, 1119, 1115, + 79, 1108, 1108, 1078, 1120, 81, 1103, 1122, + 1122, 1123, 1124, 663, 1121, 677, 677, 1125, + 1124, 609, 1121, 1126, 1126, 100, 1127, 76, + 98, 80, 80, 1129, 1130, 81, 1128, 80, + 80, 1072, 1131, 81, 1107, 1108, 1108, 1132, + 1106, 81, 1103, 1133, 1133, 1105, 1134, 76, + 1103, 1135, 1135, 1123, 1136, 663, 1121, 80, + 80, 1132, 1137, 81, 1103, 17, 17, 1101, + 1138, 2, 658, 1139, 1139, 110, 1140, 76, + 81, 1070, 81, 1141, 81, 1072, 81, 1107, + 683, 683, 349, 1142, 1143, 1144, 1143, 609, + 1143, 1142, 1142, 676, 1095, 1095, 1145, 2, + 16, 17, 17, 1146, 1147, 2, 1097, 1122, + 1122, 1149, 1150, 663, 1148, 677, 677, 1151, + 1152, 609, 1148, 1153, 1153, 77, 1154, 76, + 74, 80, 80, 1155, 1156, 81, 1128, 1157, + 1157, 1149, 1158, 663, 1148, 80, 80, 1132, + 1159, 81, 1103, 17, 17, 1101, 1160, 2, + 658, 1161, 1161, 349, 678, 1142, 1143, 1144, + 1143, 609, 1143, 1142, 1142, 676, 1162, 1162, + 610, 1163, 1164, 609, 1164, 1165, 1163, 1165, + 1163, 685, 683, 683, 688, 1166, 609, 1166, + 1166, 687, 1167, 690, 1167, 688, 691, 1166, + 609, 1166, 1166, 687, 1168, 591, 1168, 610, + 873, 1169, 609, 1169, 1169, 1169, 1169, 685, + 609, 688, 1171, 1170, 609, 1170, 1170, 1170, + 1170, 687, 689, 690, 689, 688, 691, 1171, + 1170, 609, 1170, 1170, 1170, 1170, 687, 689, + 690, 689, 688, 691, 1172, 609, 1172, 1172, + 1172, 1172, 687, 1173, 921, 1173, 688, 922, + 1172, 609, 1172, 1172, 1172, 1172, 687, 1174, + 1174, 688, 1176, 609, 1175, 1175, 1175, 687, + 1174, 1174, 610, 1177, 609, 1178, 1178, 610, + 1177, 609, 1179, 690, 1179, 688, 691, 1176, + 609, 1175, 1175, 1175, 687, 1180, 591, 1180, + 610, 592, 693, 693, 1181, 693, 693, 609, + 1178, 1178, 610, 695, 694, 694, 1182, 694, + 694, 609, 689, 690, 689, 688, 691, 609, + 1183, 687, 1184, 690, 1184, 688, 691, 609, + 1183, 687, 1185, 1185, 688, 1166, 1176, 609, + 1175, 1186, 1166, 1186, 1166, 687, 1187, 1187, + 610, 609, 1188, 685, 1178, 1178, 688, 609, + 1189, 687, 1190, 690, 1190, 688, 691, 609, + 1189, 687, 1191, 690, 1191, 688, 691, 1166, + 1176, 609, 1175, 1186, 1166, 1186, 1166, 687, + 1192, 591, 1192, 610, 873, 1169, 609, 1169, + 1193, 1169, 1169, 685, 1178, 1178, 688, 1171, + 1170, 609, 1170, 1194, 1170, 1170, 687, 1190, + 690, 1190, 688, 691, 1171, 1170, 609, 1170, + 1194, 1170, 1170, 687, 677, 677, 349, 678, + 1144, 1143, 609, 1143, 1143, 1143, 1143, 676, + 677, 677, 349, 678, 1195, 609, 1195, 1195, + 1195, 1195, 676, 1196, 698, 1196, 349, 946, + 678, 1195, 609, 1195, 1195, 1195, 1195, 676, + 1197, 591, 1197, 610, 592, 1198, 1199, 681, + 693, 1199, 1200, 1198, 1200, 1198, 609, 683, + 683, 610, 1201, 694, 695, 694, 694, 1201, + 1201, 609, 1174, 1174, 610, 694, 1203, 1204, + 695, 694, 1202, 1202, 694, 1202, 694, 609, + 610, 1205, 609, 1206, 1206, 610, 1205, 609, + 1174, 1174, 610, 1203, 1204, 1204, 1204, 609, + 1185, 1185, 610, 1201, 1203, 1204, 695, 694, + 1202, 1207, 1201, 1207, 1201, 609, 1174, 1174, + 349, 1143, 1209, 1210, 1144, 1143, 609, 1208, + 1208, 1143, 1208, 1143, 676, 1211, 1211, 349, + 678, 1143, 1209, 1210, 1144, 1143, 609, 1208, + 1208, 1143, 1208, 1143, 676, 1212, 1212, 610, + 680, 681, 681, 1213, 682, 680, 682, 680, + 609, 1214, 1214, 610, 1204, 1203, 1204, 1215, + 1204, 1204, 609, 1185, 1185, 610, 684, 1203, + 1204, 1216, 684, 1216, 684, 609, 677, 677, + 349, 678, 609, 1217, 676, 1218, 1218, 349, + 678, 609, 1217, 676, 1211, 1211, 349, 678, + 1209, 609, 1210, 1210, 1210, 676, 1174, 1174, + 349, 1209, 609, 1210, 1210, 1210, 676, 1185, + 1185, 349, 1142, 1209, 1210, 1144, 1143, 609, + 1208, 1219, 1142, 1219, 1142, 676, 1220, 1220, + 349, 678, 1142, 1209, 1210, 1144, 1143, 609, + 1208, 1219, 1142, 1219, 1142, 676, 1221, 1221, + 610, 1163, 1164, 1164, 609, 1222, 1165, 1163, + 1165, 1163, 685, 1214, 1214, 688, 1175, 1176, + 1175, 609, 1223, 1175, 1175, 687, 1224, 690, + 1224, 688, 691, 1175, 1176, 1175, 609, 1223, + 1175, 1175, 687, 609, 349, 1144, 1143, 609, + 1143, 1143, 1143, 1143, 676, 1225, 29, 1225, + 718, 1226, 2, 717, 989, 690, 989, 1227, + 739, 987, 609, 984, 1228, 737, 1228, 986, + 739, 1229, 663, 984, 1231, 737, 1231, 1232, + 891, 663, 1230, 683, 683, 349, 1233, 609, + 1233, 1233, 676, 1161, 1161, 349, 678, 1233, + 609, 1233, 1233, 676, 1185, 1185, 349, 1233, + 1209, 609, 1210, 1234, 1233, 1234, 1233, 676, + 1220, 1220, 349, 678, 1233, 1209, 609, 1210, + 1234, 1233, 1234, 1233, 676, 1088, 663, 869, + 591, 869, 437, 1235, 592, 1235, 1235, 601, + 908, 591, 908, 437, 603, 1235, 592, 1235, + 1235, 601, 934, 591, 934, 437, 1235, 959, + 592, 960, 1236, 1235, 1236, 1235, 601, 971, + 591, 971, 437, 603, 1235, 959, 592, 960, + 1236, 1235, 1236, 1235, 601, 578, 32, 578, + 1237, 582, 33, 580, 1239, 425, 1239, 587, + 1240, 426, 1238, 1242, 389, 1242, 593, 1243, + 390, 1241, 1244, 389, 1244, 435, 1245, 1246, + 390, 1246, 1247, 1245, 1247, 1245, 433, 444, + 389, 444, 437, 1248, 390, 1248, 1248, 436, + 1249, 389, 1249, 437, 439, 1248, 390, 1248, + 1248, 436, 1250, 389, 1250, 392, 1251, 1252, + 390, 1252, 1253, 1251, 1253, 1251, 446, 444, + 389, 444, 449, 1254, 390, 1254, 1254, 448, + 1255, 386, 1255, 449, 387, 1254, 390, 1254, + 1254, 448, 1256, 389, 1256, 392, 1257, 390, + 1257, 1257, 1257, 1257, 446, 389, 390, 449, + 1259, 1258, 390, 1258, 1258, 1258, 1258, 448, + 450, 386, 450, 449, 387, 1259, 1258, 390, + 1258, 1258, 1258, 1258, 448, 450, 386, 450, + 449, 387, 1260, 390, 1260, 1260, 1260, 1260, + 448, 1261, 1262, 1261, 449, 1263, 1260, 390, + 1260, 1260, 1260, 1260, 448, 1264, 389, 1264, + 449, 1266, 390, 1265, 1265, 1265, 448, 1264, + 389, 1264, 392, 1267, 390, 1268, 389, 1268, + 392, 1267, 390, 1269, 386, 1269, 449, 387, + 1266, 390, 1265, 1265, 1265, 448, 1270, 389, + 1270, 392, 452, 452, 1271, 452, 452, 390, + 1268, 389, 1268, 392, 454, 453, 453, 1272, + 453, 453, 390, 450, 386, 450, 449, 387, + 390, 1273, 448, 1274, 386, 1274, 449, 387, + 390, 1273, 448, 1275, 389, 1275, 449, 1254, + 1266, 390, 1265, 1276, 1254, 1276, 1254, 448, + 1277, 389, 1277, 392, 390, 1278, 446, 1268, + 389, 1268, 449, 390, 1279, 448, 1280, 386, + 1280, 449, 387, 390, 1279, 448, 1281, 386, + 1281, 449, 387, 1254, 1266, 390, 1265, 1276, + 1254, 1276, 1254, 448, 1282, 389, 1282, 392, + 1257, 390, 1257, 1283, 1257, 1257, 446, 1268, + 389, 1268, 449, 1259, 1258, 390, 1258, 1284, + 1258, 1258, 448, 1280, 386, 1280, 449, 387, + 1259, 1258, 390, 1258, 1284, 1258, 1258, 448, + 438, 389, 438, 898, 1286, 390, 1285, 1264, + 389, 1264, 437, 1288, 390, 1287, 1287, 1287, + 436, 1289, 389, 1289, 437, 439, 1288, 390, + 1287, 1287, 1287, 436, 1290, 389, 1290, 392, + 441, 442, 442, 1291, 443, 441, 443, 441, + 390, 1264, 389, 1264, 392, 1293, 1292, 1292, + 1292, 390, 389, 392, 1294, 390, 1295, 389, + 1295, 392, 1294, 390, 1296, 389, 1296, 392, + 1292, 1293, 1292, 1297, 1292, 1292, 390, 1275, + 389, 1275, 392, 445, 1293, 1292, 1298, 445, + 1298, 445, 390, 438, 389, 438, 437, 439, + 390, 1299, 436, 1300, 389, 1300, 437, 439, + 390, 1299, 436, 1275, 389, 1275, 437, 1248, + 1288, 390, 1287, 1301, 1248, 1301, 1248, 436, + 1302, 389, 1302, 437, 439, 1248, 1288, 390, + 1287, 1301, 1248, 1301, 1248, 436, 1303, 389, + 1303, 392, 1251, 1252, 1252, 390, 1304, 1253, + 1251, 1253, 1251, 446, 1296, 389, 1296, 449, + 1265, 1266, 1265, 390, 1305, 1265, 1265, 448, + 1306, 386, 1306, 449, 387, 1265, 1266, 1265, + 390, 1305, 1265, 1265, 448, 1242, 389, 1242, + 807, 1240, 390, 1238, 1308, 585, 1308, 1309, + 1310, 586, 1307, 1312, 591, 1312, 1313, 1314, + 592, 1311, 1315, 591, 1315, 597, 592, 595, + 805, 32, 805, 1316, 33, 417, 1312, 591, + 1312, 1317, 1310, 592, 1307, 1318, 425, 1318, + 427, 1319, 426, 423, 1320, 32, 1320, 1321, + 33, 417, 430, 389, 430, 1323, 1324, 390, + 1322, 430, 389, 430, 593, 1325, 390, 1241, + 1242, 389, 1242, 1326, 1240, 390, 1238, 1318, + 425, 1318, 587, 1327, 426, 1238, 1328, 585, + 1328, 1309, 1329, 586, 1307, 430, 389, 430, + 1326, 1330, 390, 1238, 418, 32, 418, 1237, + 1331, 33, 580, 529, 121, 529, 1333, 1334, + 122, 1332, 1335, 425, 1335, 427, 1336, 426, + 423, 1337, 425, 1337, 1338, 1339, 426, 389, + 390, 1341, 390, 1340, 389, 390, 820, 390, + 1342, 438, 389, 438, 820, 1343, 390, 1342, + 438, 389, 438, 852, 1345, 390, 1344, 1346, + 163, 1346, 263, 1347, 164, 1348, 121, 1348, + 496, 122, 837, 121, 122, 526, 122, 1349, + 121, 122, 528, 122, 1350, 1351, 121, 1351, + 528, 1352, 122, 1350, 1351, 121, 1351, 1333, + 1354, 122, 1353, 389, 390, 437, 1356, 1355, + 390, 1355, 1355, 1355, 1355, 436, 438, 389, + 438, 437, 439, 1356, 1355, 390, 1355, 1355, + 1355, 1355, 436, 438, 389, 438, 437, 439, + 1357, 390, 1357, 1357, 1357, 1357, 436, 1358, + 457, 1358, 437, 1359, 439, 1357, 390, 1357, + 1357, 1357, 1357, 436, 1360, 389, 1360, 392, + 1361, 1362, 442, 452, 1362, 1363, 1361, 1363, + 1361, 390, 444, 389, 444, 392, 1364, 453, + 454, 453, 453, 1364, 1364, 390, 1264, 389, + 1264, 392, 453, 1293, 1292, 454, 453, 1365, + 1365, 453, 1365, 453, 390, 1275, 389, 1275, + 392, 1364, 1293, 1292, 454, 453, 1365, 1366, + 1364, 1366, 1364, 390, 1367, 29, 1367, 472, + 1368, 33, 471, 486, 386, 486, 1369, 483, + 484, 390, 479, 1370, 481, 1370, 482, 483, + 1371, 426, 479, 1373, 481, 1373, 1374, 1375, + 426, 1372, 430, 389, 430, 1376, 428, 390, + 423, 1377, 425, 1377, 427, 1378, 426, 423, + 425, 1338, 426, 353, 1380, 1379, 1379, 1379, + 1379, 1379, 342, 353, 1381, 1381, 1381, 1381, + 1381, 342, 1382, 457, 1382, 353, 458, 1381, + 1381, 1381, 1381, 1381, 342, 1383, 29, 1383, + 30, 1384, 2, 27, 1385, 32, 1385, 15, + 395, 706, 2, 706, 706, 706, 706, 13, + 28, 29, 28, 1387, 470, 2, 1386, 28, + 29, 28, 472, 2, 1388, 1389, 29, 1389, + 472, 1390, 2, 1388, 1389, 29, 1389, 1392, + 477, 1393, 2, 1391, 1395, 481, 1395, 1396, + 483, 1397, 337, 1394, 1399, 386, 1399, 1400, + 488, 1401, 342, 1398, 1402, 389, 1402, 347, + 433, 1403, 342, 1403, 1403, 1403, 1403, 345, + 1404, 1404, 110, 1405, 76, 1406, 1406, 1001, + 81, 999, 81, 1408, 81, 1407, 81, 1410, + 81, 1409, 1411, 1411, 1410, 1412, 81, 1409, + 1075, 1075, 1413, 2, 361, 11, 11, 1415, + 1416, 2, 1414, 11, 11, 1417, 2, 655, + 656, 656, 1418, 660, 2, 658, 1420, 1420, + 664, 1421, 337, 1419, 1423, 1423, 668, 1424, + 342, 1422, 1425, 1425, 347, 1426, 1427, 342, + 1427, 1428, 1426, 1428, 1426, 345, 379, 379, + 349, 1429, 342, 1429, 1429, 348, 1430, 1430, + 349, 351, 1429, 342, 1429, 1429, 348, 1431, + 1431, 353, 1432, 1433, 342, 1433, 1434, 1432, + 1434, 1432, 381, 379, 379, 384, 1435, 342, + 1435, 1435, 383, 1436, 386, 1436, 384, 387, + 1435, 342, 1435, 1435, 383, 1437, 389, 1437, + 353, 446, 1438, 342, 1438, 1438, 1438, 1438, + 381, 342, 384, 1440, 1439, 342, 1439, 1439, + 1439, 1439, 383, 385, 386, 385, 384, 387, + 1440, 1439, 342, 1439, 1439, 1439, 1439, 383, + 385, 386, 385, 384, 387, 1441, 342, 1441, + 1441, 1441, 1441, 383, 1442, 1262, 1442, 384, + 1263, 1441, 342, 1441, 1441, 1441, 1441, 383, + 1443, 1443, 384, 1445, 342, 1444, 1444, 1444, + 383, 1443, 1443, 353, 1446, 342, 1447, 1447, + 353, 1446, 342, 1448, 386, 1448, 384, 387, + 1445, 342, 1444, 1444, 1444, 383, 1449, 389, + 1449, 353, 390, 391, 391, 1450, 391, 391, + 342, 1447, 1447, 353, 1380, 1379, 1379, 1451, + 1379, 1379, 342, 385, 386, 385, 384, 387, + 342, 1452, 383, 1453, 386, 1453, 384, 387, + 342, 1452, 383, 1454, 1454, 384, 1435, 1445, + 342, 1444, 1455, 1435, 1455, 1435, 383, 1456, + 1456, 353, 342, 1457, 381, 1447, 1447, 384, + 342, 1458, 383, 1459, 386, 1459, 384, 387, + 342, 1458, 383, 1460, 386, 1460, 384, 387, + 1435, 1445, 342, 1444, 1455, 1435, 1455, 1435, + 383, 1461, 389, 1461, 353, 446, 1438, 342, + 1438, 1462, 1438, 1438, 381, 1447, 1447, 384, + 1440, 1439, 342, 1439, 1463, 1439, 1439, 383, + 1459, 386, 1459, 384, 387, 1440, 1439, 342, + 1439, 1463, 1439, 1439, 383, 350, 350, 1151, + 1465, 342, 1464, 1443, 1443, 349, 1467, 342, + 1466, 1466, 1466, 348, 1468, 1468, 349, 351, + 1467, 342, 1466, 1466, 1466, 348, 1469, 1469, + 353, 354, 355, 355, 1470, 356, 354, 356, + 354, 342, 1443, 1443, 353, 1472, 1471, 1471, + 1471, 342, 353, 1473, 342, 1474, 1474, 353, + 1473, 342, 1475, 1475, 353, 1471, 1472, 1471, + 1476, 1471, 1471, 342, 1454, 1454, 353, 380, + 1472, 1471, 1477, 380, 1477, 380, 342, 350, + 350, 349, 351, 342, 1478, 348, 1479, 1479, + 349, 351, 342, 1478, 348, 1454, 1454, 349, + 1429, 1467, 342, 1466, 1480, 1429, 1480, 1429, + 348, 1481, 1481, 349, 351, 1429, 1467, 342, + 1466, 1480, 1429, 1480, 1429, 348, 1482, 1482, + 353, 1432, 1433, 1433, 342, 1483, 1434, 1432, + 1434, 1432, 381, 1475, 1475, 384, 1444, 1445, + 1444, 342, 1484, 1444, 1444, 383, 1485, 386, + 1485, 384, 387, 1444, 1445, 1444, 342, 1484, + 1444, 1444, 383, 1423, 1423, 1084, 1421, 342, + 1419, 1487, 1487, 1488, 1489, 663, 1486, 1491, + 1491, 1492, 1493, 609, 1490, 1494, 1494, 672, + 609, 670, 1082, 1082, 1495, 2, 361, 1491, + 1491, 1496, 1489, 609, 1486, 1497, 1497, 368, + 1498, 337, 366, 341, 341, 1500, 1501, 342, + 1499, 341, 341, 668, 1502, 342, 1422, 1423, + 1423, 1503, 1421, 342, 1419, 1497, 1497, 664, + 1504, 337, 1419, 1505, 1505, 1488, 1506, 663, + 1486, 341, 341, 1503, 1507, 342, 1419, 11, + 11, 1418, 1508, 2, 658, 1411, 1411, 1510, + 1511, 81, 1509, 1512, 1512, 368, 1513, 337, + 366, 1514, 1514, 378, 1515, 337, 342, 1517, + 342, 1516, 342, 1093, 342, 1518, 350, 350, + 1093, 1519, 342, 1518, 350, 350, 1125, 1521, + 342, 1520, 1522, 1522, 110, 1523, 76, 1524, + 1524, 1001, 81, 1110, 81, 1408, 81, 1525, + 81, 1410, 81, 1526, 1527, 1527, 1410, 1528, + 81, 1526, 1527, 1527, 1510, 1530, 81, 1529, + 342, 349, 1532, 1531, 342, 1531, 1531, 1531, + 1531, 348, 350, 350, 349, 351, 1532, 1531, + 342, 1531, 1531, 1531, 1531, 348, 350, 350, + 349, 351, 1533, 342, 1533, 1533, 1533, 1533, + 348, 1534, 457, 1534, 349, 1359, 351, 1533, + 342, 1533, 1533, 1533, 1533, 348, 1535, 389, + 1535, 353, 390, 1536, 1537, 355, 391, 1537, + 1538, 1536, 1538, 1536, 342, 379, 379, 353, + 1539, 1379, 1380, 1379, 1379, 1539, 1539, 342, + 1443, 1443, 353, 1379, 1472, 1471, 1380, 1379, + 1540, 1540, 1379, 1540, 1379, 342, 1454, 1454, + 353, 1539, 1472, 1471, 1380, 1379, 1540, 1541, + 1539, 1541, 1539, 342, 1542, 29, 1542, 472, + 1543, 2, 1388, 1399, 386, 1399, 1544, 483, + 1397, 342, 1394, 1545, 481, 1545, 1396, 483, + 1546, 337, 1394, 1548, 481, 1548, 1549, 1375, + 337, 1547, 1550, 1550, 1551, 2, 10, 341, + 341, 1552, 339, 342, 335, 1553, 1553, 338, + 1554, 337, 335, 1, 0, 1556, 1, 1555, + 1557, 1558, 1559, 1557, 1555, 85, 81, 353, + 342, 610, 609, } var _scanner_trans_targs []int16 = []int16{ - 1, 710, 0, 3, 4, 5, 6, 7, - 6, 145, 8, 9, 127, 10, 9, 46, - 11, 12, 31, 12, 13, 20, 25, 14, - 13, 15, 14, 16, 17, 711, 19, 17, - 711, 18, 19, 18, 21, 20, 23, 22, - 14, 24, 14, 26, 25, 26, 27, 28, - 29, 29, 30, 11, 32, 31, 33, 34, - 35, 124, 125, 33, 34, 35, 124, 125, - 34, 36, 47, 110, 115, 12, 37, 38, - 46, 39, 40, 39, 41, 40, 42, 34, - 43, 44, 42, 43, 44, 12, 40, 45, - 34, 44, 36, 48, 47, 49, 48, 50, - 101, 51, 712, 76, 51, 712, 52, 53, - 54, 66, 54, 55, 57, 62, 56, 55, - 56, 58, 57, 60, 59, 56, 61, 56, - 63, 62, 63, 64, 65, 56, 67, 100, - 68, 54, 69, 68, 70, 69, 71, 72, - 712, 52, 97, 98, 71, 72, 97, 98, - 72, 73, 88, 93, 74, 73, 75, 74, - 76, 77, 52, 54, 78, 79, 87, 79, - 80, 80, 54, 81, 80, 82, 80, 81, - 83, 72, 712, 84, 83, 85, 83, 72, - 84, 83, 85, 54, 81, 86, 72, 85, - 76, 52, 77, 76, 89, 88, 91, 90, - 74, 92, 74, 94, 93, 94, 95, 96, - 74, 54, 69, 99, 72, 98, 53, 102, - 103, 102, 104, 123, 105, 102, 106, 105, - 107, 106, 108, 109, 120, 121, 108, 109, - 120, 121, 109, 111, 110, 113, 112, 48, - 114, 48, 116, 115, 116, 117, 118, 119, - 119, 102, 106, 122, 109, 121, 50, 51, - 101, 12, 31, 126, 34, 125, 8, 128, - 127, 129, 130, 134, 707, 708, 129, 130, - 134, 707, 708, 131, 130, 629, 132, 375, - 133, 660, 133, 135, 146, 664, 668, 9, - 136, 137, 145, 138, 139, 138, 140, 139, - 141, 130, 142, 143, 141, 142, 143, 9, - 139, 144, 130, 143, 135, 147, 146, 148, - 147, 149, 620, 150, 713, 175, 150, 713, - 151, 152, 153, 162, 154, 153, 100, 155, - 156, 155, 157, 156, 158, 72, 159, 160, - 158, 159, 160, 54, 156, 161, 72, 160, - 163, 619, 164, 153, 165, 164, 166, 165, - 167, 168, 713, 151, 596, 617, 167, 168, - 596, 617, 169, 168, 555, 170, 196, 171, - 554, 171, 172, 187, 192, 173, 172, 174, - 173, 175, 176, 151, 153, 177, 178, 186, - 178, 179, 179, 153, 180, 179, 181, 179, - 180, 182, 168, 713, 183, 182, 184, 182, - 168, 183, 182, 184, 153, 180, 185, 168, - 184, 175, 151, 176, 175, 188, 187, 190, - 189, 173, 191, 173, 193, 192, 193, 194, - 195, 173, 197, 220, 197, 198, 209, 215, - 199, 200, 200, 201, 203, 207, 202, 56, - 204, 205, 58, 206, 56, 208, 63, 210, - 213, 211, 211, 212, 63, 212, 214, 200, - 216, 217, 217, 218, 219, 63, 221, 552, - 553, 222, 526, 197, 223, 222, 224, 223, - 225, 226, 714, 230, 486, 487, 225, 226, - 714, 230, 486, 487, 227, 226, 493, 530, - 541, 547, 228, 229, 443, 229, 428, 432, - 434, 439, 231, 232, 233, 258, 233, 234, - 247, 253, 235, 236, 236, 237, 239, 244, - 238, 29, 240, 242, 241, 241, 243, 29, - 245, 246, 246, 248, 251, 249, 249, 250, - 26, 250, 252, 236, 254, 255, 255, 256, - 257, 246, 259, 427, 260, 233, 261, 260, - 262, 261, 263, 264, 231, 337, 338, 263, - 264, 337, 338, 265, 264, 289, 374, 408, - 418, 266, 267, 378, 267, 268, 411, 415, - 269, 268, 270, 269, 271, 273, 272, 714, - 390, 272, 274, 275, 274, 276, 426, 393, - 277, 278, 274, 285, 278, 197, 279, 278, - 280, 278, 279, 281, 226, 714, 282, 281, - 283, 281, 226, 282, 281, 283, 197, 279, - 284, 226, 283, 277, 286, 285, 287, 288, - 423, 424, 287, 288, 423, 424, 288, 290, - 331, 291, 290, 296, 307, 320, 326, 292, - 293, 294, 31, 292, 295, 294, 34, 125, - 34, 297, 298, 303, 299, 300, 301, 12, - 40, 299, 302, 301, 34, 44, 34, 304, - 305, 306, 304, 308, 309, 309, 310, 312, - 317, 311, 119, 313, 315, 314, 314, 316, - 119, 318, 319, 319, 321, 324, 322, 322, - 323, 116, 323, 325, 309, 327, 328, 328, - 329, 330, 319, 332, 340, 333, 334, 290, - 335, 233, 261, 333, 336, 335, 264, 338, - 233, 261, 339, 264, 338, 267, 232, 341, - 342, 371, 343, 344, 362, 233, 345, 346, - 361, 370, 347, 348, 261, 349, 350, 334, - 360, 349, 350, 360, 351, 350, 352, 354, - 358, 353, 355, 356, 357, 359, 360, 343, - 267, 344, 362, 363, 350, 364, 365, 368, - 369, 366, 367, 350, 360, 267, 362, 366, - 347, 350, 372, 373, 384, 376, 377, 383, - 266, 375, 378, 379, 378, 350, 380, 381, - 382, 267, 378, 366, 347, 385, 385, 386, - 395, 402, 387, 388, 388, 389, 390, 391, - 230, 197, 392, 393, 394, 390, 230, 391, - 390, 396, 398, 400, 397, 269, 399, 399, - 401, 388, 403, 406, 403, 404, 405, 388, - 407, 407, 409, 416, 410, 410, 414, 411, - 412, 413, 269, 403, 414, 415, 417, 385, - 419, 420, 420, 421, 422, 407, 274, 285, - 425, 288, 424, 271, 272, 273, 197, 429, - 430, 431, 428, 433, 432, 433, 435, 434, - 437, 436, 433, 438, 433, 440, 439, 440, - 441, 442, 433, 228, 444, 443, 445, 480, - 446, 445, 447, 458, 469, 475, 72, 448, - 449, 454, 450, 451, 452, 54, 69, 450, - 453, 452, 72, 98, 72, 455, 456, 457, - 455, 459, 460, 460, 461, 463, 467, 462, - 74, 464, 465, 89, 466, 74, 468, 94, - 470, 473, 471, 471, 472, 94, 472, 474, - 460, 476, 477, 477, 478, 479, 94, 481, - 491, 492, 482, 483, 489, 445, 484, 197, - 223, 482, 485, 484, 226, 487, 197, 223, - 488, 226, 487, 490, 484, 445, 483, 484, - 229, 196, 443, 489, 494, 508, 495, 494, - 500, 502, 506, 496, 497, 498, 156, 496, - 499, 498, 72, 160, 501, 503, 504, 505, - 507, 509, 512, 510, 494, 511, 510, 511, - 229, 513, 514, 527, 515, 516, 519, 517, - 518, 524, 515, 229, 516, 519, 520, 445, - 521, 522, 523, 229, 519, 489, 525, 526, - 445, 223, 445, 528, 529, 531, 532, 532, - 533, 535, 539, 534, 433, 536, 537, 435, - 538, 433, 540, 440, 542, 545, 543, 543, - 544, 440, 544, 546, 532, 548, 549, 549, - 550, 551, 440, 443, 526, 170, 554, 556, - 557, 556, 558, 606, 559, 560, 556, 604, - 561, 562, 590, 603, 563, 564, 565, 566, - 589, 565, 566, 589, 566, 567, 578, 584, - 568, 569, 569, 570, 572, 576, 571, 173, - 573, 574, 188, 575, 173, 577, 193, 579, - 582, 580, 580, 581, 193, 581, 583, 569, - 585, 586, 586, 587, 588, 193, 591, 592, - 593, 594, 591, 592, 593, 594, 592, 561, - 595, 566, 597, 153, 165, 598, 601, 602, - 599, 600, 589, 592, 594, 599, 563, 559, - 605, 604, 566, 597, 171, 152, 607, 608, - 611, 609, 610, 609, 610, 612, 613, 612, - 614, 615, 612, 616, 615, 616, 618, 168, - 617, 621, 622, 621, 623, 706, 624, 621, - 625, 624, 626, 625, 627, 628, 703, 704, - 627, 628, 703, 704, 628, 630, 631, 630, - 632, 692, 633, 634, 630, 690, 635, 636, - 677, 689, 637, 638, 639, 640, 676, 639, - 640, 676, 640, 641, 661, 671, 642, 643, - 643, 644, 647, 654, 645, 646, 646, 648, - 650, 652, 649, 147, 651, 651, 653, 646, - 655, 658, 655, 656, 657, 646, 659, 659, - 132, 660, 662, 669, 663, 663, 667, 664, - 665, 666, 147, 655, 667, 668, 670, 643, - 672, 673, 673, 674, 675, 659, 678, 679, - 680, 681, 678, 679, 680, 681, 679, 635, - 682, 640, 683, 684, 687, 688, 685, 686, - 676, 679, 681, 685, 637, 633, 691, 690, - 640, 683, 133, 693, 694, 697, 695, 696, - 695, 696, 698, 699, 698, 700, 701, 698, - 702, 701, 702, 621, 625, 705, 628, 704, - 149, 150, 620, 9, 127, 709, 130, 708, - 0, 2, 710, 1, 2, + 1, 888, 0, 3, 4, 5, 6, 7, + 6, 191, 8, 9, 173, 10, 9, 57, + 11, 12, 42, 12, 13, 27, 32, 14, + 13, 15, 14, 16, 17, 889, 22, 17, + 889, 18, 19, 19, 20, 21, 17, 889, + 18, 22, 23, 23, 24, 24, 25, 26, + 23, 28, 27, 30, 29, 14, 31, 14, + 33, 32, 33, 34, 35, 36, 36, 37, + 38, 39, 40, 41, 17, 889, 22, 11, + 43, 42, 44, 45, 46, 170, 171, 44, + 45, 46, 170, 171, 45, 47, 58, 155, + 169, 12, 48, 49, 57, 50, 51, 50, + 52, 51, 53, 45, 54, 55, 53, 54, + 55, 12, 51, 56, 45, 55, 47, 59, + 58, 60, 59, 61, 137, 62, 890, 92, + 62, 890, 63, 134, 64, 65, 82, 65, + 66, 68, 73, 67, 66, 67, 69, 68, + 71, 70, 67, 72, 67, 74, 73, 74, + 75, 76, 77, 77, 78, 79, 80, 81, + 23, 83, 133, 84, 65, 85, 84, 86, + 85, 87, 88, 890, 63, 130, 131, 87, + 88, 130, 131, 88, 89, 115, 129, 90, + 89, 91, 90, 92, 97, 93, 93, 94, + 94, 95, 96, 93, 890, 63, 98, 102, + 98, 99, 100, 101, 99, 100, 101, 103, + 128, 103, 104, 104, 98, 105, 104, 106, + 104, 105, 107, 108, 890, 125, 107, 126, + 107, 108, 125, 107, 126, 108, 109, 110, + 116, 109, 111, 110, 113, 115, 112, 90, + 114, 90, 117, 116, 117, 118, 119, 120, + 120, 121, 122, 123, 124, 93, 890, 92, + 98, 105, 127, 108, 126, 92, 93, 97, + 92, 129, 65, 85, 132, 88, 131, 64, + 134, 135, 136, 62, 138, 142, 138, 139, + 140, 141, 139, 140, 141, 143, 168, 144, + 138, 145, 144, 146, 145, 147, 148, 165, + 166, 147, 148, 165, 166, 148, 149, 150, + 156, 149, 151, 150, 153, 155, 152, 59, + 154, 59, 157, 156, 157, 158, 159, 160, + 160, 161, 162, 163, 164, 62, 138, 145, + 167, 148, 166, 61, 62, 137, 169, 12, + 42, 172, 45, 171, 8, 174, 173, 175, + 176, 180, 885, 886, 175, 176, 180, 885, + 886, 177, 176, 792, 178, 619, 179, 830, + 179, 181, 192, 834, 838, 9, 182, 183, + 191, 184, 185, 184, 186, 185, 187, 176, + 188, 189, 187, 188, 189, 9, 185, 190, + 176, 189, 181, 193, 192, 194, 193, 195, + 783, 196, 891, 221, 196, 891, 197, 780, + 198, 199, 208, 200, 199, 133, 201, 202, + 201, 203, 202, 204, 88, 205, 206, 204, + 205, 206, 65, 202, 207, 88, 206, 209, + 779, 210, 199, 211, 210, 212, 211, 213, + 214, 891, 197, 744, 777, 213, 214, 744, + 777, 215, 214, 239, 216, 463, 217, 721, + 217, 218, 725, 729, 219, 218, 220, 219, + 221, 226, 222, 222, 223, 223, 224, 225, + 222, 891, 197, 227, 232, 227, 228, 229, + 230, 231, 98, 201, 233, 776, 233, 234, + 234, 227, 235, 234, 236, 234, 235, 237, + 238, 891, 773, 237, 774, 237, 238, 773, + 237, 774, 238, 765, 240, 257, 241, 240, + 246, 242, 243, 244, 202, 242, 245, 244, + 88, 206, 88, 247, 248, 253, 249, 250, + 251, 65, 85, 249, 252, 251, 88, 131, + 88, 254, 255, 256, 254, 258, 754, 259, + 260, 240, 752, 261, 289, 261, 262, 278, + 284, 263, 264, 264, 265, 267, 273, 266, + 77, 268, 271, 269, 269, 270, 270, 272, + 77, 274, 275, 275, 276, 277, 279, 282, + 280, 280, 281, 74, 281, 283, 264, 285, + 286, 286, 287, 288, 275, 290, 738, 751, + 291, 691, 261, 292, 291, 293, 292, 294, + 295, 892, 299, 410, 411, 294, 295, 892, + 299, 410, 411, 296, 295, 375, 687, 516, + 689, 297, 298, 466, 298, 414, 510, 505, + 512, 300, 301, 302, 330, 302, 303, 319, + 325, 304, 305, 305, 306, 308, 314, 307, + 36, 309, 312, 310, 310, 311, 311, 313, + 36, 315, 316, 316, 317, 318, 320, 323, + 321, 321, 322, 33, 322, 324, 305, 326, + 327, 327, 328, 329, 316, 331, 686, 332, + 302, 333, 332, 334, 333, 335, 336, 300, + 581, 582, 335, 336, 581, 582, 337, 336, + 530, 682, 671, 684, 338, 339, 622, 339, + 340, 661, 667, 341, 340, 342, 341, 343, + 348, 344, 892, 454, 344, 345, 345, 346, + 347, 344, 892, 299, 349, 360, 349, 350, + 355, 357, 359, 351, 352, 353, 354, 138, + 356, 358, 361, 681, 461, 362, 363, 349, + 526, 363, 364, 371, 364, 365, 367, 369, + 366, 368, 370, 363, 372, 363, 371, 373, + 374, 892, 523, 373, 524, 373, 374, 523, + 373, 524, 374, 451, 507, 517, 522, 376, + 404, 376, 377, 393, 399, 378, 379, 379, + 380, 382, 388, 381, 120, 383, 386, 384, + 384, 385, 385, 387, 120, 389, 390, 390, + 391, 392, 394, 397, 395, 395, 396, 117, + 396, 398, 379, 400, 401, 401, 402, 403, + 390, 405, 413, 406, 407, 376, 408, 292, + 406, 409, 408, 295, 411, 261, 292, 412, + 295, 411, 298, 414, 418, 261, 415, 416, + 417, 419, 448, 420, 421, 439, 261, 422, + 423, 438, 447, 424, 425, 292, 426, 427, + 407, 437, 426, 427, 437, 428, 427, 429, + 431, 435, 430, 432, 433, 434, 436, 437, + 420, 298, 421, 439, 440, 427, 441, 442, + 445, 446, 443, 444, 427, 437, 298, 439, + 443, 424, 427, 449, 450, 452, 472, 497, + 498, 453, 452, 454, 459, 455, 455, 456, + 456, 457, 458, 455, 364, 460, 461, 462, + 454, 455, 459, 454, 464, 465, 471, 297, + 463, 466, 467, 466, 427, 468, 469, 470, + 298, 466, 443, 424, 473, 473, 474, 481, + 489, 475, 476, 476, 477, 478, 479, 480, + 455, 892, 454, 482, 484, 487, 483, 452, + 485, 485, 486, 486, 488, 476, 490, 493, + 490, 491, 492, 476, 494, 494, 495, 496, + 499, 500, 297, 500, 501, 502, 506, 501, + 502, 503, 505, 504, 452, 506, 508, 513, + 515, 509, 509, 511, 510, 490, 511, 512, + 514, 473, 518, 519, 519, 520, 521, 494, + 364, 371, 525, 374, 524, 362, 527, 526, + 528, 529, 678, 679, 528, 529, 678, 679, + 529, 618, 663, 672, 677, 531, 575, 532, + 531, 537, 548, 564, 570, 533, 534, 535, + 42, 533, 536, 535, 45, 171, 45, 538, + 539, 544, 540, 541, 542, 12, 51, 540, + 543, 542, 45, 55, 45, 545, 546, 547, + 545, 549, 550, 550, 551, 553, 559, 552, + 160, 554, 557, 555, 555, 556, 556, 558, + 160, 560, 561, 561, 562, 563, 565, 568, + 566, 566, 567, 157, 567, 569, 550, 571, + 572, 572, 573, 574, 561, 576, 584, 577, + 578, 531, 579, 302, 333, 577, 580, 579, + 336, 582, 302, 333, 583, 336, 582, 339, + 301, 585, 586, 615, 587, 588, 606, 302, + 589, 590, 605, 614, 591, 592, 333, 593, + 594, 578, 604, 593, 594, 604, 595, 594, + 596, 598, 602, 597, 599, 600, 601, 603, + 604, 587, 339, 588, 606, 607, 594, 608, + 609, 612, 613, 610, 611, 594, 604, 339, + 606, 610, 591, 594, 616, 617, 628, 653, + 654, 620, 621, 627, 338, 619, 622, 623, + 622, 594, 624, 625, 626, 339, 622, 610, + 591, 629, 629, 630, 637, 645, 631, 632, + 632, 633, 634, 635, 636, 344, 638, 640, + 643, 639, 341, 641, 641, 642, 642, 644, + 632, 646, 649, 646, 647, 648, 632, 650, + 650, 651, 652, 655, 656, 656, 657, 658, + 662, 657, 658, 659, 661, 660, 341, 662, + 664, 668, 670, 665, 665, 666, 646, 666, + 667, 669, 629, 673, 674, 674, 675, 676, + 650, 349, 526, 680, 529, 679, 343, 344, + 348, 683, 685, 688, 690, 692, 693, 694, + 737, 693, 694, 737, 694, 695, 722, 732, + 696, 697, 697, 698, 705, 713, 699, 700, + 700, 701, 702, 703, 704, 222, 891, 221, + 706, 708, 711, 707, 219, 709, 709, 710, + 710, 712, 700, 714, 717, 714, 715, 716, + 700, 718, 718, 719, 720, 216, 721, 723, + 730, 724, 724, 728, 725, 726, 727, 219, + 714, 728, 729, 731, 697, 733, 734, 734, + 735, 736, 718, 739, 740, 741, 742, 739, + 740, 741, 742, 740, 289, 743, 694, 745, + 199, 211, 746, 749, 750, 747, 748, 737, + 740, 742, 747, 691, 259, 753, 752, 694, + 745, 217, 198, 755, 756, 759, 757, 758, + 757, 758, 760, 761, 760, 762, 763, 760, + 764, 763, 764, 766, 767, 768, 769, 216, + 769, 770, 771, 772, 770, 771, 772, 227, + 235, 775, 238, 774, 221, 222, 226, 221, + 778, 214, 777, 780, 781, 782, 196, 784, + 785, 784, 786, 884, 787, 784, 788, 787, + 789, 788, 790, 791, 881, 882, 790, 791, + 881, 882, 791, 873, 793, 794, 793, 795, + 862, 796, 797, 793, 860, 798, 799, 847, + 859, 800, 801, 802, 803, 846, 802, 803, + 846, 803, 804, 831, 841, 805, 806, 806, + 807, 814, 822, 808, 809, 809, 810, 811, + 812, 813, 196, 815, 817, 820, 816, 193, + 818, 818, 819, 819, 821, 809, 823, 826, + 823, 824, 825, 809, 827, 827, 828, 829, + 178, 830, 832, 839, 833, 833, 837, 834, + 835, 836, 193, 823, 837, 838, 840, 806, + 842, 843, 843, 844, 845, 827, 848, 849, + 850, 851, 848, 849, 850, 851, 849, 798, + 852, 803, 853, 854, 857, 858, 855, 856, + 846, 849, 851, 855, 800, 796, 861, 860, + 803, 853, 179, 863, 864, 867, 865, 866, + 865, 866, 868, 869, 868, 870, 871, 868, + 872, 871, 872, 874, 875, 876, 877, 877, + 878, 879, 880, 878, 879, 880, 784, 788, + 883, 791, 882, 195, 196, 783, 9, 173, + 887, 176, 886, 0, 2, 888, 1, 2, } var _scanner_trans_actions []int16 = []int16{ - 0, 0, 9, 0, 0, 0, 5, 23, - 0, 3, 0, 75, 14, 23, 0, 3, - 0, 79, 14, 0, 1, 1, 1, 17, - 0, 1, 0, 0, 20, 20, 20, 0, - 0, 0, 0, 20, 0, 0, 0, 0, - 29, 0, 26, 17, 0, 0, 1, 0, - 207, 0, 1, 1, 0, 67, 1, 167, - 1, 1, 67, 0, 79, 0, 0, 14, - 0, 0, 1, 1, 1, 63, 11, 1, - 0, 0, 14, 1, 0, 39, 1, 107, - 1, 39, 0, 0, 14, 122, 47, 0, - 218, 87, 1, 17, 0, 1, 0, 0, - 0, 20, 20, 20, 0, 0, 0, 0, - 63, 11, 0, 1, 1, 1, 17, 0, - 0, 0, 0, 0, 0, 29, 0, 26, - 17, 0, 0, 1, 0, 207, 1, 0, - 0, 79, 14, 1, 0, 39, 1, 107, - 1, 1, 1, 39, 0, 79, 0, 14, - 0, 1, 1, 1, 17, 0, 1, 0, - 0, 0, 20, 296, 11, 1, 0, 43, - 0, 20, 197, 14, 1, 0, 43, 39, - 1, 242, 43, 1, 43, 39, 0, 197, - 0, 20, 14, 266, 47, 0, 352, 87, - 1, 43, 1, 43, 0, 0, 0, 0, - 29, 0, 26, 17, 0, 0, 1, 0, - 207, 122, 47, 0, 218, 87, 1, 296, - 11, 0, 1, 0, 0, 197, 14, 1, - 0, 39, 1, 242, 1, 39, 0, 197, - 0, 14, 0, 0, 0, 0, 0, 29, - 0, 26, 17, 0, 0, 1, 0, 207, - 0, 266, 47, 0, 352, 87, 1, 43, - 1, 177, 71, 0, 308, 157, 1, 0, - 67, 1, 162, 1, 1, 67, 0, 75, - 0, 0, 14, 23, 0, 3, 0, 0, - 79, 14, 0, 0, 1, 1, 1, 59, - 11, 1, 0, 0, 14, 1, 0, 39, - 1, 102, 1, 39, 0, 0, 14, 117, - 47, 0, 212, 87, 1, 17, 0, 1, - 0, 0, 0, 20, 20, 20, 0, 0, - 0, 0, 59, 11, 23, 0, 3, 0, - 14, 1, 0, 67, 1, 167, 1, 67, - 0, 0, 14, 177, 71, 0, 308, 157, - 1, 0, 0, 75, 14, 1, 0, 39, - 1, 102, 1, 1, 1, 39, 0, 75, - 0, 14, 23, 0, 3, 0, 0, 79, - 14, 0, 1, 1, 1, 17, 0, 1, - 0, 0, 0, 20, 290, 11, 1, 0, - 43, 0, 20, 187, 14, 1, 0, 43, - 39, 1, 236, 43, 1, 43, 39, 0, - 187, 0, 20, 14, 260, 47, 0, 345, - 87, 1, 43, 1, 43, 0, 0, 0, - 0, 29, 0, 26, 17, 0, 0, 1, - 0, 207, 284, 55, 0, 23, 23, 23, - 0, 192, 0, 1, 1, 1, 0, 83, - 0, 0, 20, 0, 202, 0, 83, 0, - 0, 79, 0, 1, 29, 0, 0, 332, - 0, 192, 0, 1, 0, 207, 1, 0, - 39, 0, 14, 182, 14, 1, 0, 39, - 1, 230, 1, 1, 1, 39, 0, 182, - 0, 0, 0, 14, 23, 0, 3, 23, - 23, 23, 0, 79, 14, 0, 0, 1, - 1, 1, 0, 0, 152, 11, 0, 23, - 23, 23, 0, 192, 0, 1, 1, 1, - 0, 83, 0, 0, 20, 0, 0, 202, - 0, 83, 0, 0, 0, 79, 0, 1, - 29, 0, 0, 332, 0, 192, 0, 1, - 0, 207, 1, 0, 0, 182, 14, 1, - 0, 39, 1, 230, 1, 1, 39, 0, - 182, 0, 14, 23, 0, 3, 23, 23, - 23, 0, 79, 14, 0, 1, 1, 1, - 17, 0, 1, 0, 0, 0, 20, 20, - 20, 0, 394, 11, 0, 1, 0, 43, - 0, 20, 326, 14, 0, 326, 14, 1, - 0, 43, 39, 1, 366, 43, 1, 43, - 39, 0, 326, 0, 20, 14, 373, 47, - 0, 408, 87, 1, 0, 39, 1, 366, - 1, 39, 0, 326, 0, 14, 0, 278, - 51, 23, 0, 3, 23, 23, 23, 0, - 0, 14, 47, 1, 0, 67, 248, 112, - 92, 35, 1, 0, 0, 0, 14, 142, - 55, 1, 0, 39, 272, 127, 132, 51, - 1, 0, 35, 0, 192, 0, 1, 1, - 1, 0, 83, 0, 0, 20, 0, 0, - 202, 0, 83, 0, 0, 0, 79, 0, - 1, 29, 0, 0, 332, 0, 192, 0, - 1, 0, 207, 1, 0, 0, 0, 182, - 14, 320, 71, 1, 0, 39, 359, 97, - 254, 47, 0, 338, 87, 92, 1, 35, - 1, 0, 0, 0, 14, 284, 55, 1, - 0, 39, 14, 0, 67, 1, 314, 1, - 67, 0, 182, 14, 23, 0, 23, 23, - 23, 0, 0, 0, 0, 0, 39, 1, - 107, 1, 39, 0, 380, 127, 1, 0, - 39, 14, 0, 401, 157, 218, 87, 39, - 39, 278, 51, 1, 0, 55, 0, 39, - 1, 1, 39, 0, 67, 387, 137, 0, - 39, 224, 97, 67, 67, 192, 0, 1, - 1, 1, 0, 83, 0, 1, 0, 0, - 20, 394, 11, 1, 0, 1, 43, 1, - 43, 0, 0, 0, 0, 29, 20, 0, - 0, 202, 17, 0, 0, 1, 0, 207, - 83, 0, 0, 0, 79, 0, 1, 0, - 0, 0, 26, 29, 0, 0, 0, 332, - 0, 192, 0, 1, 0, 207, 373, 47, - 0, 408, 87, 1, 43, 1, 152, 11, - 1, 0, 1, 17, 0, 0, 0, 0, - 0, 0, 29, 0, 26, 17, 0, 0, - 1, 0, 207, 1, 0, 67, 387, 137, - 23, 0, 3, 23, 23, 23, 92, 35, - 1, 0, 0, 0, 14, 142, 55, 1, - 0, 39, 272, 127, 132, 51, 1, 0, - 35, 0, 192, 0, 1, 1, 1, 0, - 83, 0, 0, 20, 0, 202, 0, 83, - 0, 0, 79, 0, 1, 29, 0, 0, - 332, 0, 192, 0, 1, 0, 207, 1, - 0, 39, 0, 0, 14, 182, 14, 320, - 71, 1, 0, 39, 359, 97, 254, 47, - 0, 338, 87, 0, 67, 401, 1, 157, - 224, 1, 97, 67, 278, 51, 23, 0, - 23, 23, 23, 0, 0, 14, 47, 1, - 0, 67, 248, 112, 0, 0, 0, 0, - 0, 1, 0, 0, 182, 14, 1, 39, - 92, 35, 1, 0, 0, 0, 14, 55, - 0, 39, 1, 107, 1, 39, 0, 380, - 127, 0, 39, 218, 87, 39, 0, 39, - 314, 67, 278, 51, 1, 0, 192, 0, - 1, 1, 1, 0, 83, 0, 0, 20, - 0, 202, 0, 83, 0, 0, 79, 0, - 1, 29, 0, 0, 332, 0, 192, 0, - 1, 0, 207, 39, 67, 1, 67, 147, - 51, 0, 1, 0, 0, 0, 75, 14, - 71, 1, 0, 39, 14, 0, 1, 230, - 39, 0, 182, 14, 0, 23, 23, 23, - 0, 192, 0, 1, 1, 1, 0, 83, - 0, 0, 20, 0, 202, 0, 83, 0, - 0, 79, 0, 1, 29, 0, 0, 332, - 0, 192, 0, 1, 0, 207, 1, 102, - 1, 39, 0, 75, 0, 14, 0, 47, - 0, 338, 87, 117, 47, 1, 0, 39, - 14, 0, 87, 212, 87, 39, 39, 1, - 0, 39, 359, 97, 92, 1, 35, 1, - 0, 0, 14, 1, 39, 147, 51, 0, - 1, 0, 75, 14, 1, 39, 0, 212, - 87, 290, 11, 0, 1, 0, 0, 187, - 14, 1, 0, 39, 1, 236, 1, 39, - 0, 187, 0, 14, 0, 147, 51, 0, - 1, 0, 0, 0, 75, 14, 71, 1, - 0, 39, 14, 0, 1, 230, 39, 0, - 182, 14, 0, 23, 23, 23, 0, 192, - 0, 1, 1, 1, 0, 83, 0, 0, - 0, 0, 0, 29, 20, 0, 0, 202, - 17, 0, 0, 1, 0, 207, 83, 0, - 1, 67, 0, 0, 79, 0, 1, 0, - 0, 0, 26, 29, 0, 0, 0, 332, - 0, 192, 0, 1, 0, 207, 1, 102, - 1, 39, 0, 75, 0, 14, 0, 47, - 0, 338, 87, 1, 0, 39, 14, 0, - 87, 212, 87, 39, 39, 1, 0, 39, - 359, 97, 92, 35, 1, 0, 0, 14, - 1, 39, 147, 51, 0, 1, 0, 75, - 14, 1, 39, 260, 47, 0, 345, 87, - 1, 43, 1, 172, 71, 0, 302, 157, - 32, 0, 7, 7, 7, + 0, 0, 11, 0, 0, 0, 5, 25, + 0, 3, 0, 77, 16, 25, 0, 3, + 0, 81, 16, 0, 1, 1, 1, 19, + 0, 1, 0, 0, 22, 22, 22, 0, + 0, 0, 1, 0, 0, 0, 7, 7, + 7, 0, 22, 0, 1, 0, 0, 0, + 7, 0, 0, 0, 0, 31, 0, 28, + 19, 0, 0, 1, 0, 218, 0, 1, + 1, 0, 0, 0, 89, 89, 89, 1, + 0, 69, 1, 173, 1, 1, 69, 0, + 81, 0, 0, 16, 0, 0, 1, 1, + 1, 65, 13, 1, 0, 0, 16, 1, + 0, 41, 1, 113, 1, 41, 0, 0, + 16, 128, 49, 0, 229, 93, 1, 19, + 0, 1, 0, 0, 0, 22, 22, 22, + 0, 0, 0, 1, 0, 65, 13, 0, + 1, 1, 1, 19, 0, 0, 0, 0, + 0, 0, 31, 0, 28, 19, 0, 0, + 1, 0, 218, 0, 1, 0, 0, 0, + 89, 1, 0, 0, 81, 16, 1, 0, + 41, 1, 113, 1, 1, 1, 41, 0, + 81, 0, 16, 0, 1, 1, 1, 19, + 0, 1, 0, 0, 0, 22, 0, 1, + 0, 0, 0, 7, 7, 7, 307, 13, + 0, 1, 1, 1, 0, 0, 0, 1, + 0, 45, 0, 22, 203, 16, 1, 0, + 45, 41, 1, 253, 45, 1, 45, 41, + 0, 203, 0, 22, 16, 0, 1, 1, + 1, 0, 0, 0, 0, 0, 0, 31, + 0, 28, 19, 0, 0, 1, 0, 218, + 0, 1, 0, 0, 0, 89, 89, 89, + 277, 49, 0, 363, 93, 1, 45, 1, + 45, 0, 128, 49, 0, 229, 93, 1, + 0, 0, 0, 7, 307, 13, 0, 1, + 1, 1, 0, 0, 0, 1, 0, 0, + 203, 16, 1, 0, 41, 1, 253, 1, + 41, 0, 203, 0, 16, 0, 1, 1, + 1, 0, 0, 0, 0, 0, 0, 31, + 0, 28, 19, 0, 0, 1, 0, 218, + 0, 1, 0, 0, 0, 89, 277, 49, + 0, 363, 93, 1, 45, 1, 0, 183, + 73, 0, 319, 163, 1, 0, 69, 1, + 168, 1, 1, 69, 0, 77, 0, 0, + 16, 25, 0, 3, 0, 0, 81, 16, + 0, 0, 1, 1, 1, 61, 13, 1, + 0, 0, 16, 1, 0, 41, 1, 108, + 1, 41, 0, 0, 16, 123, 49, 0, + 223, 93, 1, 19, 0, 1, 0, 0, + 0, 22, 22, 22, 0, 0, 0, 1, + 0, 61, 13, 25, 0, 3, 0, 16, + 1, 0, 69, 1, 173, 1, 69, 0, + 0, 16, 183, 73, 0, 319, 163, 1, + 0, 0, 77, 16, 1, 0, 41, 1, + 108, 1, 1, 1, 41, 0, 77, 0, + 16, 25, 0, 3, 0, 0, 81, 16, + 0, 1, 1, 1, 19, 0, 1, 0, + 0, 0, 22, 0, 1, 0, 0, 0, + 7, 7, 7, 301, 13, 0, 25, 0, + 0, 0, 208, 7, 1, 0, 45, 0, + 22, 193, 16, 1, 0, 45, 41, 1, + 247, 45, 1, 45, 41, 0, 193, 0, + 22, 16, 0, 25, 153, 53, 25, 0, + 3, 0, 0, 16, 49, 1, 0, 69, + 259, 118, 98, 37, 1, 0, 0, 0, + 16, 148, 57, 1, 0, 41, 283, 133, + 138, 53, 1, 0, 37, 1, 0, 0, + 0, 77, 16, 331, 73, 0, 25, 25, + 25, 0, 198, 0, 1, 1, 1, 0, + 85, 0, 0, 22, 0, 1, 0, 0, + 213, 0, 85, 0, 1, 0, 0, 0, + 81, 0, 1, 31, 0, 0, 343, 0, + 198, 0, 1, 0, 218, 1, 0, 41, + 0, 16, 188, 16, 1, 0, 41, 1, + 241, 1, 1, 1, 41, 0, 188, 0, + 0, 0, 16, 25, 0, 3, 25, 25, + 25, 0, 81, 16, 0, 0, 1, 1, + 1, 0, 0, 158, 13, 0, 25, 25, + 25, 0, 198, 0, 1, 1, 1, 0, + 85, 0, 0, 22, 0, 1, 0, 0, + 213, 0, 85, 0, 1, 0, 0, 0, + 81, 0, 1, 31, 0, 0, 343, 0, + 198, 0, 1, 0, 218, 1, 0, 0, + 188, 16, 1, 0, 41, 1, 241, 1, + 1, 41, 0, 188, 0, 16, 25, 0, + 3, 25, 25, 25, 0, 81, 16, 0, + 1, 1, 1, 19, 0, 1, 0, 0, + 0, 22, 22, 22, 0, 1, 0, 0, + 0, 7, 7, 7, 405, 13, 0, 25, + 25, 25, 25, 0, 0, 0, 0, 208, + 0, 0, 1, 0, 45, 0, 22, 337, + 16, 0, 337, 16, 0, 25, 25, 25, + 0, 0, 0, 1, 0, 45, 41, 1, + 377, 45, 1, 45, 41, 0, 337, 0, + 22, 16, 0, 25, 25, 25, 25, 289, + 53, 0, 25, 25, 25, 0, 198, 0, + 1, 1, 1, 0, 85, 0, 0, 22, + 0, 1, 0, 0, 213, 0, 85, 0, + 1, 0, 0, 0, 81, 0, 1, 31, + 0, 0, 343, 0, 198, 0, 1, 0, + 218, 1, 0, 0, 0, 188, 16, 73, + 1, 0, 41, 370, 103, 265, 49, 0, + 349, 93, 98, 1, 37, 158, 13, 1, + 0, 1, 0, 0, 0, 16, 295, 57, + 1, 0, 41, 16, 0, 69, 1, 325, + 1, 69, 0, 188, 16, 25, 0, 25, + 25, 25, 0, 0, 0, 0, 0, 41, + 1, 113, 1, 41, 0, 391, 133, 1, + 0, 41, 16, 0, 412, 163, 229, 93, + 41, 41, 289, 53, 1, 19, 0, 0, + 0, 1, 0, 0, 0, 22, 0, 1, + 0, 0, 0, 7, 405, 13, 1, 0, + 1, 45, 1, 45, 57, 0, 41, 1, + 1, 41, 0, 69, 398, 143, 0, 41, + 235, 103, 69, 69, 198, 0, 1, 1, + 1, 0, 85, 0, 1, 0, 0, 0, + 89, 89, 89, 0, 0, 0, 0, 31, + 22, 0, 1, 0, 0, 213, 19, 0, + 0, 1, 0, 218, 85, 0, 1, 0, + 0, 208, 7, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 28, 0, 0, 0, + 0, 81, 0, 1, 0, 31, 0, 0, + 0, 343, 0, 198, 0, 1, 0, 218, + 384, 49, 0, 419, 93, 1, 0, 41, + 1, 377, 1, 41, 0, 337, 0, 16, + 0, 25, 25, 25, 25, 289, 53, 25, + 0, 3, 25, 25, 25, 0, 0, 16, + 49, 1, 0, 69, 259, 118, 98, 37, + 1, 0, 0, 0, 16, 148, 57, 1, + 0, 41, 283, 133, 138, 53, 1, 0, + 37, 0, 198, 0, 1, 1, 1, 0, + 85, 0, 0, 22, 0, 1, 0, 0, + 213, 0, 85, 0, 1, 0, 0, 0, + 81, 0, 1, 31, 0, 0, 343, 0, + 198, 0, 1, 0, 218, 1, 0, 0, + 0, 188, 16, 331, 73, 1, 0, 41, + 370, 103, 265, 49, 0, 349, 93, 98, + 1, 37, 1, 0, 0, 0, 16, 295, + 57, 1, 0, 41, 16, 0, 69, 1, + 325, 1, 69, 0, 188, 16, 25, 0, + 25, 25, 25, 0, 0, 0, 0, 0, + 41, 1, 113, 1, 41, 0, 391, 133, + 1, 0, 41, 16, 0, 412, 163, 229, + 93, 41, 41, 289, 53, 1, 0, 0, + 0, 57, 0, 41, 1, 1, 41, 0, + 69, 398, 143, 0, 41, 235, 103, 69, + 69, 198, 0, 1, 1, 1, 0, 85, + 0, 1, 0, 0, 0, 89, 0, 0, + 0, 0, 31, 22, 0, 1, 0, 0, + 213, 19, 0, 0, 1, 0, 218, 85, + 0, 1, 0, 0, 208, 0, 1, 1, + 1, 0, 0, 0, 0, 0, 28, 0, + 0, 0, 0, 81, 0, 1, 31, 0, + 0, 0, 343, 0, 198, 0, 1, 0, + 218, 384, 49, 0, 419, 93, 1, 45, + 1, 0, 0, 0, 0, 0, 1, 241, + 41, 0, 188, 16, 0, 25, 25, 25, + 0, 198, 0, 1, 1, 1, 0, 85, + 0, 1, 0, 0, 0, 89, 89, 89, + 0, 0, 0, 0, 31, 22, 0, 1, + 0, 0, 213, 19, 0, 0, 1, 0, + 218, 85, 0, 1, 0, 1, 69, 0, + 0, 81, 0, 1, 0, 0, 0, 28, + 31, 0, 0, 0, 343, 0, 198, 0, + 1, 0, 218, 1, 108, 1, 41, 0, + 77, 0, 16, 0, 49, 0, 349, 93, + 123, 49, 1, 0, 41, 16, 0, 93, + 223, 93, 41, 41, 1, 0, 41, 370, + 103, 98, 1, 37, 1, 0, 0, 16, + 1, 41, 153, 53, 0, 1, 0, 77, + 16, 1, 41, 0, 0, 0, 208, 7, + 0, 1, 1, 1, 0, 0, 0, 271, + 49, 0, 356, 93, 1, 45, 1, 45, + 0, 223, 93, 0, 0, 0, 7, 301, + 13, 0, 1, 0, 0, 193, 16, 1, + 0, 41, 1, 247, 1, 41, 0, 193, + 0, 16, 0, 25, 153, 53, 0, 1, + 0, 0, 0, 77, 16, 73, 1, 0, + 41, 16, 0, 1, 241, 41, 0, 188, + 16, 0, 25, 25, 25, 0, 198, 0, + 1, 1, 1, 0, 85, 0, 1, 0, + 0, 0, 89, 0, 0, 0, 0, 31, + 22, 0, 1, 0, 0, 213, 19, 0, + 0, 1, 0, 218, 85, 0, 1, 0, + 1, 69, 0, 0, 81, 0, 1, 0, + 0, 0, 28, 31, 0, 0, 0, 343, + 0, 198, 0, 1, 0, 218, 1, 108, + 1, 41, 0, 77, 0, 16, 0, 49, + 0, 349, 93, 1, 0, 41, 16, 0, + 93, 223, 93, 41, 41, 1, 0, 41, + 370, 103, 98, 37, 1, 0, 0, 16, + 1, 41, 153, 53, 0, 1, 0, 77, + 16, 1, 41, 0, 0, 0, 208, 0, + 1, 1, 1, 0, 0, 0, 271, 49, + 0, 356, 93, 1, 45, 1, 178, 73, + 0, 313, 163, 34, 0, 9, 9, 9, } var _scanner_eof_actions []int16 = []int16{ - 0, 0, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 7, - 7, 7, 7, + 0, 0, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 0, 9, 9, 9, 9, } - const scanner_start int = 710 - const scanner_first_final int = 710 + const scanner_start int = 888 + const scanner_first_final int = 888 const scanner_error int = 0 - const scanner_en_main int = 710 + const scanner_en_main int = 888 - //line conf.rl:35 +//line conf.rl:35 // These are generated by ragel. Reference them to avoid unused lint errors. _, _, _ = scanner_first_final, scanner_error, scanner_en_main @@ -2316,23 +3131,23 @@ func Parse(input string) (*Conf, error) { cs, p, pe, eof := 0, 0, len(data), len(data) var ( - mark int - ms []String - s String - ipn *net.IPNet - e Entry - err error - d string - conf Conf + mark int + ms []String + s String + ipn *net.IPNet + e Entry + err error + d string + option [2]string + conf Conf ) - //line conf.go:2331 - +//line conf.go:3148 { cs = scanner_start } - //line conf.go:2336 +//line conf.go:3153 { var _klen int var _trans int @@ -2413,37 +3228,40 @@ func Parse(input string) (*Conf, error) { _acts++ switch _scanner_actions[_acts-1] { case 0: - //line conf.rl:53 +//line conf.rl:54 mark = p case 1: - //line conf.rl:55 +//line conf.rl:56 + s = String{ Value: string(data[mark : p-1]), Quoted: true, } case 2: - //line conf.rl:61 +//line conf.rl:62 + s = String{Value: string(data[mark:p])} case 3: - //line conf.rl:74 - +//line conf.rl:75 ms = append(ms, s) case 4: - //line conf.rl:76 +//line conf.rl:77 ms = nil case 5: - //line conf.rl:80 +//line conf.rl:81 d = string(data[mark:p]) case 6: - //line conf.rl:83 +//line conf.rl:84 + d = strings.Join(strings.Fields(string(data[mark:p])), "/") case 7: - //line conf.rl:86 +//line conf.rl:87 + _, ipn, err = net.ParseCIDR(d) if err != nil { return nil, err @@ -2451,40 +3269,48 @@ func Parse(input string) (*Conf, error) { e.Address = ipn case 8: - //line conf.rl:93 +//line conf.rl:94 + e.Address = s case 9: - //line conf.rl:111 +//line conf.rl:112 e = Entry{Type: "host"} case 10: - //line conf.rl:114 +//line conf.rl:115 + e.Database = ms case 11: - //line conf.rl:117 +//line conf.rl:118 + e.User = ms case 12: - //line conf.rl:120 +//line conf.rl:121 + e.Method = string(data[mark:p]) case 13: - //line conf.rl:123 - conf.Entries = append(conf.Entries, e) +//line conf.rl:124 + + copy(option[:], strings.Split(string(data[mark:p]), "=")) + e.Options = append(e.Options, option) case 14: - //line conf.rl:134 +//line conf.rl:134 - return nil, errors.Errorf("entry %d invalid", len(conf.Entries)+1) - case 15: - //line conf.rl:140 + conf.Entries = append(conf.Entries, e) + case 15: +//line conf.rl:149 + return nil, errors.Errorf("entry %d invalid", len(conf.Entries)+1) + case 16: +//line conf.rl:155 return nil, errors.New("invalid") - //line conf.go:2492 - +//line conf.go:3315 } } @@ -2506,16 +3332,15 @@ func Parse(input string) (*Conf, error) { for ; __nacts > 0; __nacts-- { __acts++ switch _scanner_actions[__acts-1] { - case 13: - //line conf.rl:123 - conf.Entries = append(conf.Entries, e) - case 14: - //line conf.rl:134 +//line conf.rl:134 - return nil, errors.Errorf("entry %d invalid", len(conf.Entries)+1) - //line conf.go:2519 + conf.Entries = append(conf.Entries, e) + case 15: +//line conf.rl:149 + return nil, errors.Errorf("entry %d invalid", len(conf.Entries)+1) +//line conf.go:3342 } } } @@ -2525,7 +3350,8 @@ func Parse(input string) (*Conf, error) { } } - //line conf.rl:148 +//line conf.rl:163 + if len(conf.Entries) == 0 { return nil, errors.New("no entries") } diff --git a/pkg/sql/pgwire/hba/conf.rl b/pkg/sql/pgwire/hba/conf.rl index 76257e9e34b0..df28d6057919 100644 --- a/pkg/sql/pgwire/hba/conf.rl +++ b/pkg/sql/pgwire/hba/conf.rl @@ -39,14 +39,15 @@ func Parse(input string) (*Conf, error) { cs, p, pe, eof := 0, 0, len(data), len(data) var ( - mark int - ms []String - s String - ipn *net.IPNet - e Entry - err error - d string - conf Conf + mark int + ms []String + s String + ipn *net.IPNet + e Entry + err error + d string + option [2]string + conf Conf ) %%{ @@ -120,6 +121,16 @@ func Parse(input string) (*Conf, error) { action method { e.Method = string(data[mark:p]) } + action option { + copy(option[:], strings.Split(string(data[mark:p]), "=")) + e.Options = append(e.Options, option) + } + token = alnum | '.' | '_' | '-'; + option = + token+ >mark + '=' + token+ %option + ; action host { conf.Entries = append(conf.Entries, e) } @@ -129,6 +140,10 @@ func Parse(input string) (*Conf, error) { multiString %user ws address >mark ws method >mark %method + ( + ws + option >mark %option + )* ws? (comment | '\n') ; action invalidHost { return nil, errors.Errorf("entry %d invalid", len(conf.Entries) + 1) } diff --git a/pkg/sql/pgwire/hba/testdata/parse b/pkg/sql/pgwire/hba/testdata/parse index e1aeb3c500b6..28b2482b9737 100644 --- a/pkg/sql/pgwire/hba/testdata/parse +++ b/pkg/sql/pgwire/hba/testdata/parse @@ -41,3 +41,9 @@ parse host "all all 0.0.0.0/0 trust ---- error: entry 1 invalid + +# options +parse +host all all all gss include_realm=0 krb_realm=te-st12.COM +---- +host all all all gss include_realm=0 krb_realm=te-st12.COM From 668a74abb92ead4fd8715c7b7aabee7f73325301 Mon Sep 17 00:00:00 2001 From: Matt Jibson Date: Mon, 10 Dec 2018 17:13:11 -0500 Subject: [PATCH 2/2] ccl/gssapiccl: add GSS authentication support on Linux GSS support uses the same logic from postgres. It works by calling a C method statically compiled into cockroach in a loop, passing back and forth various GSS tokens until a completed authentication is done. Enterprise license checks are done at the end of a GSS auth session. This allows administrators to test and verify their GSS setup before needing to buy an enterprise license. We directly include the krb5 library so we can statically compile an exact version into the binary. The builder image has been changed to add (well, keep) bison/yacc which is needed to build krb5. Testing is done by using a docker-compose file. It defines containers for the kdc, cockroach server, and psql binary. This has proven to be the easiest way to get a correct test written. We support (and require) the include_realm=0 option to be present, which strips the realm from the GSS username. This removes the immediate need to either add user identity mapping or for allowing additional characters in usernames. The krb_realm option is also supported, with the addition that it can be specified more than once to support multiple realms at once. Release note (enterprise change): Add a GSS auth method configurable by the server.host_based_authentication.configuration cluster setting. --- .gitmodules | 3 + Makefile | 37 +++- build/builder.sh | 2 +- build/builder/Dockerfile | 1 - build/variables.mk | 2 + build/verify-archive.sh | 2 +- c-deps/krb5 | 1 + c-deps/krb5-rebuild | 4 + pkg/acceptance/cluster/certs.go | 7 + pkg/acceptance/compose/gss/docker-compose.yml | 34 ++++ pkg/acceptance/compose/gss/kdc/Dockerfile | 13 ++ pkg/acceptance/compose/gss/kdc/krb5.conf | 32 +++ pkg/acceptance/compose/gss/kdc/start.sh | 10 + pkg/acceptance/compose/gss/psql/Dockerfile | 24 +++ pkg/acceptance/compose/gss/psql/empty.go | 11 + pkg/acceptance/compose/gss/psql/gss_test.go | 125 ++++++++++++ pkg/acceptance/compose/gss/psql/start.sh | 7 + pkg/acceptance/compose_test.go | 35 ++++ pkg/ccl/ccl_init.go | 1 + pkg/ccl/gssapiccl/empty.go | 12 ++ pkg/ccl/gssapiccl/gssapi.go | 188 ++++++++++++++++++ pkg/sql/pgwire/conn.go | 101 +++++++--- pkg/sql/pgwire/hba/hba.go | 27 +++ pkg/sql/pgwire/hba/testdata/parse | 4 +- pkg/sql/pgwire/server.go | 8 + 25 files changed, 657 insertions(+), 34 deletions(-) create mode 160000 c-deps/krb5 create mode 100644 c-deps/krb5-rebuild create mode 100644 pkg/acceptance/compose/gss/docker-compose.yml create mode 100644 pkg/acceptance/compose/gss/kdc/Dockerfile create mode 100644 pkg/acceptance/compose/gss/kdc/krb5.conf create mode 100755 pkg/acceptance/compose/gss/kdc/start.sh create mode 100644 pkg/acceptance/compose/gss/psql/Dockerfile create mode 100644 pkg/acceptance/compose/gss/psql/empty.go create mode 100644 pkg/acceptance/compose/gss/psql/gss_test.go create mode 100755 pkg/acceptance/compose/gss/psql/start.sh create mode 100644 pkg/acceptance/compose_test.go create mode 100644 pkg/ccl/gssapiccl/empty.go create mode 100644 pkg/ccl/gssapiccl/gssapi.go diff --git a/.gitmodules b/.gitmodules index b5f414ae68f9..3e7d61ad1938 100644 --- a/.gitmodules +++ b/.gitmodules @@ -23,3 +23,6 @@ [submodule "pkg/ui/yarn-vendor"] path = pkg/ui/yarn-vendor url = https://github.com/cockroachdb/yarn-vendored +[submodule "c-deps/krb5"] + path = c-deps/krb5 + url = https://github.com/cockroachdb/krb5.git diff --git a/Makefile b/Makefile index 4f67eec7defc..ad7607bc103c 100644 --- a/Makefile +++ b/Makefile @@ -404,6 +404,7 @@ PROTOBUF_SRC_DIR := $(C_DEPS_DIR)/protobuf ROCKSDB_SRC_DIR := $(C_DEPS_DIR)/rocksdb SNAPPY_SRC_DIR := $(C_DEPS_DIR)/snappy LIBROACH_SRC_DIR := $(C_DEPS_DIR)/libroach +KRB5_SRC_DIR := $(C_DEPS_DIR)/krb5 # Derived build variants. use-stdmalloc := $(findstring stdmalloc,$(TAGS)) @@ -429,6 +430,7 @@ PROTOBUF_DIR := $(BUILD_DIR)/protobuf$(if $(use-msan),_msan) ROCKSDB_DIR := $(BUILD_DIR)/rocksdb$(if $(use-msan),_msan)$(if $(use-stdmalloc),_stdmalloc)$(if $(USE_ROCKSDB_ASSERTIONS),_assert) SNAPPY_DIR := $(BUILD_DIR)/snappy$(if $(use-msan),_msan) LIBROACH_DIR := $(BUILD_DIR)/libroach$(if $(use-msan),_msan) +KRB5_DIR := $(BUILD_DIR)/krb5$(if $(use-msan),_msan) # Can't share with protobuf because protoc is always built for the host. PROTOC_DIR := $(GOPATH)/native/$(HOST_TRIPLE)/protobuf @@ -439,12 +441,20 @@ LIBROCKSDB := $(ROCKSDB_DIR)/librocksdb.a LIBSNAPPY := $(SNAPPY_DIR)/libsnappy.a LIBROACH := $(LIBROACH_DIR)/libroach.a LIBROACHCCL := $(LIBROACH_DIR)/libroachccl.a +LIBKRB5 := $(KRB5_DIR)/lib/libgssapi_krb5.a PROTOC := $(PROTOC_DIR)/protoc C_LIBS_COMMON = $(if $(use-stdmalloc),,$(LIBJEMALLOC)) $(LIBPROTOBUF) $(LIBSNAPPY) $(LIBROCKSDB) C_LIBS_OSS = $(C_LIBS_COMMON) $(LIBROACH) C_LIBS_CCL = $(C_LIBS_COMMON) $(LIBCRYPTOPP) $(LIBROACHCCL) +# We only include krb5 on linux. +ifeq "$(findstring linux,$(TARGET_TRIPLE))" "linux" +C_LIBS_CCL += $(LIBKRB5) +KRB_CPPFLAGS := -I$(KRB5_DIR)/include +KRB_DIR := $(KRB5_DIR)/lib +endif + # Go does not permit dashes in build tags. This is undocumented. native-tag := $(subst -,_,$(TARGET_TRIPLE))$(if $(use-stdmalloc),_stdmalloc)$(if $(use-msan),_msan) @@ -466,7 +476,7 @@ native-tag := $(subst -,_,$(TARGET_TRIPLE))$(if $(use-stdmalloc),_stdmalloc)$(if # constraint `{native-tag}` and are built the first time a Make-driven build # encounters a given native tag. These tags are unset when building with the Go # toolchain directly, so these files are only compiled when building with Make. -CGO_PKGS := cli server/status storage/engine ccl/storageccl/engineccl +CGO_PKGS := cli server/status storage/engine ccl/storageccl/engineccl ccl/gssapiccl CGO_UNSUFFIXED_FLAGS_FILES := $(addprefix ./pkg/,$(addsuffix /zcgo_flags.go,$(CGO_PKGS))) CGO_SUFFIXED_FLAGS_FILES := $(addprefix ./pkg/,$(addsuffix /zcgo_flags_$(native-tag).go,$(CGO_PKGS))) CGO_FLAGS_FILES := $(CGO_UNSUFFIXED_FLAGS_FILES) $(CGO_SUFFIXED_FLAGS_FILES) @@ -480,8 +490,8 @@ $(CGO_FLAGS_FILES): Makefile @echo >> $@ @echo 'package $(notdir $(@D))' >> $@ @echo >> $@ - @echo '// #cgo CPPFLAGS: -I$(JEMALLOC_DIR)/include' >> $@ - @echo '// #cgo LDFLAGS: $(addprefix -L,$(CRYPTOPP_DIR) $(PROTOBUF_DIR) $(JEMALLOC_DIR)/lib $(SNAPPY_DIR) $(ROCKSDB_DIR) $(LIBROACH_DIR))' >> $@ + @echo '// #cgo CPPFLAGS: -I$(JEMALLOC_DIR)/include $(KRB_CPPFLAGS)' >> $@ + @echo '// #cgo LDFLAGS: $(addprefix -L,$(CRYPTOPP_DIR) $(PROTOBUF_DIR) $(JEMALLOC_DIR)/lib $(SNAPPY_DIR) $(ROCKSDB_DIR) $(LIBROACH_DIR) $(KRB_DIR))' >> $@ @echo 'import "C"' >> $@ # BUILD ARTIFACT CACHING @@ -531,6 +541,19 @@ $(JEMALLOC_DIR)/Makefile: $(C_DEPS_DIR)/jemalloc-rebuild $(JEMALLOC_SRC_DIR)/con @# https://github.com/jemalloc/jemalloc/issues/585. cd $(JEMALLOC_DIR) && $(JEMALLOC_SRC_DIR)/configure $(xconfigure-flags) $(if $(findstring musl,$(TARGET_TRIPLE)),,--enable-prof) +$(KRB5_SRC_DIR)/src/configure.in: | bin/.submodules-initialized + +$(KRB5_SRC_DIR)/src/configure: $(KRB5_SRC_DIR)/src/configure.in + cd $(KRB5_SRC_DIR)/src && autoreconf + +$(KRB5_DIR)/Makefile: $(C_DEPS_DIR)/krb5-rebuild $(KRB5_SRC_DIR)/src/configure + rm -rf $(KRB5_DIR) + mkdir -p $(KRB5_DIR) + @# NOTE: If you change the configure flags below, bump the version in + @# $(C_DEPS_DIR)/krb5-rebuild. See above for rationale. + @# If CFLAGS is set to -g1 then make will fail. Use "env -" to clear the environment. + cd $(KRB5_DIR) && env -u CFLAGS -u CXXFLAGS $(KRB5_SRC_DIR)/src/configure $(xconfigure-flags) --enable-static --disable-shared + $(PROTOBUF_DIR)/Makefile: $(C_DEPS_DIR)/protobuf-rebuild | bin/.submodules-initialized rm -rf $(PROTOBUF_DIR) mkdir -p $(PROTOBUF_DIR) @@ -639,8 +662,11 @@ $(LIBROACH): $(LIBROACH_DIR)/Makefile bin/uptodate .ALWAYS_REBUILD $(LIBROACHCCL): $(LIBROACH_DIR)/Makefile bin/uptodate .ALWAYS_REBUILD @uptodate $@ $(libroach-inputs) || $(MAKE) --no-print-directory -C $(LIBROACH_DIR) roachccl +$(LIBKRB5): $(KRB5_DIR)/Makefile bin/uptodate .ALWAYS_REBUILD + @uptodate $@ $(KRB5_SRC_DIR)/src || $(MAKE) --no-print-directory -C $(KRB5_DIR) + # Convenient names for maintainers. Not used by other targets in the Makefile. -.PHONY: protoc libcryptopp libjemalloc libprotobuf libsnappy librocksdb libroach libroachccl +.PHONY: protoc libcryptopp libjemalloc libprotobuf libsnappy librocksdb libroach libroachccl libkrb5 protoc: $(PROTOC) libcryptopp: $(LIBCRYPTOPP) libjemalloc: $(LIBJEMALLOC) @@ -649,6 +675,7 @@ libsnappy: $(LIBSNAPPY) librocksdb: $(LIBROCKSDB) libroach: $(LIBROACH) libroachccl: $(LIBROACHCCL) +libkrb5: $(LIBKRB5) PHONY: check-libroach check-libroach: ## Run libroach tests. @@ -1404,6 +1431,7 @@ clean-c-deps: rm -rf $(ROCKSDB_DIR) rm -rf $(SNAPPY_DIR) rm -rf $(LIBROACH_DIR) + rm -rf $(KRB5_DIR) .PHONY: unsafe-clean-c-deps unsafe-clean-c-deps: @@ -1413,6 +1441,7 @@ unsafe-clean-c-deps: git -C $(ROCKSDB_SRC_DIR) clean -dxf git -C $(SNAPPY_SRC_DIR) clean -dxf git -C $(LIBROACH_SRC_DIR) clean -dxf + git -C $(KRB5_SRC_DIR) clean -dxf .PHONY: clean clean: ## Remove build artifacts. diff --git a/build/builder.sh b/build/builder.sh index 72c6f8963f30..53e659edfc39 100755 --- a/build/builder.sh +++ b/build/builder.sh @@ -3,7 +3,7 @@ set -euo pipefail image=cockroachdb/builder -version=20190115-153202 +version=20190124-062428 function init() { docker build --tag="${image}" "$(dirname "${0}")/builder" diff --git a/build/builder/Dockerfile b/build/builder/Dockerfile index e29647db2308..b6e95e373294 100644 --- a/build/builder/Dockerfile +++ b/build/builder/Dockerfile @@ -260,7 +260,6 @@ RUN apt-get purge -y \ apt-transport-https \ automake \ autopoint \ - bison \ bzip2 \ file \ flex \ diff --git a/build/variables.mk b/build/variables.mk index d564d7841d0a..bdab725aeabe 100644 --- a/build/variables.mk +++ b/build/variables.mk @@ -75,6 +75,8 @@ define VALID_VARS JEMALLOC_SRC_DIR JS_PROTOS_CCL KARMA + KRB_CPPFLAGS + KRB_DIR LC_ALL LDFLAGS LIBCRYPTOPP diff --git a/build/verify-archive.sh b/build/verify-archive.sh index 45d78964cf5a..8cdc02e4335e 100755 --- a/build/verify-archive.sh +++ b/build/verify-archive.sh @@ -9,7 +9,7 @@ set -euo pipefail apt-get update -apt-get install -y autoconf cmake libncurses-dev +apt-get install -y autoconf bison cmake libncurses-dev workdir=$(mktemp -d) tar xzf cockroach.src.tgz -C "$workdir" diff --git a/c-deps/krb5 b/c-deps/krb5 new file mode 160000 index 000000000000..97e3c42b2a89 --- /dev/null +++ b/c-deps/krb5 @@ -0,0 +1 @@ +Subproject commit 97e3c42b2a89a2ec60eb93d3f974769e3e3cbdc5 diff --git a/c-deps/krb5-rebuild b/c-deps/krb5-rebuild new file mode 100644 index 000000000000..158981f79b5c --- /dev/null +++ b/c-deps/krb5-rebuild @@ -0,0 +1,4 @@ +Bump the version below when changing krb5 configure flags. Search for "BUILD +ARTIFACT CACHING" in build/common.mk for rationale. + +1 diff --git a/pkg/acceptance/cluster/certs.go b/pkg/acceptance/cluster/certs.go index 88c22aa81a78..6d3307c8f24e 100644 --- a/pkg/acceptance/cluster/certs.go +++ b/pkg/acceptance/cluster/certs.go @@ -40,14 +40,21 @@ func GenerateCerts(ctx context.Context) func() { certsDir, filepath.Join(certsDir, security.EmbeddedCAKey), keyLen, 96*time.Hour, false, false)) + // Root user. maybePanic(security.CreateClientPair( certsDir, filepath.Join(certsDir, security.EmbeddedCAKey), 512, 48*time.Hour, false, security.RootUser, true /* generate pk8 key */)) + // Test user. maybePanic(security.CreateClientPair( certsDir, filepath.Join(certsDir, security.EmbeddedCAKey), 512, 48*time.Hour, false, "testuser", true /* generate pk8 key */)) + // Certs for starting a cockroach server. Key size is from cli/cert.go:defaultKeySize. + maybePanic(security.CreateNodePair( + certsDir, filepath.Join(certsDir, security.EmbeddedCAKey), + 2048, 48*time.Hour, false, []string{"localhost", "cockroach"})) + // Store a copy of the client certificate and private key in a PKCS#12 // bundle, which is the only format understood by Npgsql (.NET). { diff --git a/pkg/acceptance/compose/gss/docker-compose.yml b/pkg/acceptance/compose/gss/docker-compose.yml new file mode 100644 index 000000000000..cee2135cb548 --- /dev/null +++ b/pkg/acceptance/compose/gss/docker-compose.yml @@ -0,0 +1,34 @@ +version: '3' +services: + kdc: + build: ./kdc + volumes: + - ./kdc/start.sh:/start.sh + - keytab:/keytab + cockroach: + image: ubuntu:xenial-20170214 + depends_on: + - kdc + command: /cockroach/cockroach --certs-dir=/certs start --listen-addr cockroach + environment: + - KRB5_KTNAME=/keytab/crdb.keytab + volumes: + - ../../.localcluster.certs:/certs + - keytab:/keytab + - ../../../../cockroach-linux-2.6.32-gnu-amd64:/cockroach/cockroach + psql: + build: ./psql + depends_on: + - cockroach + environment: + - PGHOST=cockroach + - PGPORT=26257 + - PGSSLCERT=/certs/node.crt + - PGSSLKEY=/certs/node.key + volumes: + - ./kdc/krb5.conf:/etc/krb5.conf + - ./psql/gss_test.go:/test/gss_test.go + - ./psql/start.sh:/start.sh + - ../../.localcluster.certs:/certs +volumes: + keytab: diff --git a/pkg/acceptance/compose/gss/kdc/Dockerfile b/pkg/acceptance/compose/gss/kdc/Dockerfile new file mode 100644 index 000000000000..02f61ffac877 --- /dev/null +++ b/pkg/acceptance/compose/gss/kdc/Dockerfile @@ -0,0 +1,13 @@ +FROM alpine:3.9 + +RUN apk add --no-cache \ + krb5-server \ + && rm -rf /var/cache/apk/* + +COPY krb5.conf /etc/krb5.conf + +RUN kdb5_util create -s -P kpass \ + && kadmin.local -q "addprinc -pw psql tester@MY.EX" \ + && kadmin.local -q "addprinc -randkey postgres/gss_cockroach_1.gss_default@MY.EX" + +CMD ["/start.sh"] diff --git a/pkg/acceptance/compose/gss/kdc/krb5.conf b/pkg/acceptance/compose/gss/kdc/krb5.conf new file mode 100644 index 000000000000..8d22cf4c44e1 --- /dev/null +++ b/pkg/acceptance/compose/gss/kdc/krb5.conf @@ -0,0 +1,32 @@ +[logging] + default = FILE:/var/log/krb5libs.log + kdc = FILE:/var/log/krb5kdc.log + admin_server = FILE:/var/log/kadmind.log + +[libdefaults] + default_realm = MY.EX + dns_lookup_realm = false + dns_lookup_kdc = false + ticket_lifetime = 24h + renew_lifetime = 7d + forwardable = yes + +[realms] + MY.EX = { + kdc = kdc:88 + admin_server = kdc:74 + default_domain = my.ex + } + +[domain_realm] + .my.ex = MY.EX + my.ex = MY.EX + +[appdefaults] + pam = { + debug = false + ticket_lifetime = 36000 + renew_lifetime = 36000 + forwardable = true + krb4_convert = false + } diff --git a/pkg/acceptance/compose/gss/kdc/start.sh b/pkg/acceptance/compose/gss/kdc/start.sh new file mode 100755 index 000000000000..9e451e776d56 --- /dev/null +++ b/pkg/acceptance/compose/gss/kdc/start.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +set -e + +# The /keytab directory is volume mounted on both kdc and cockroach. kdc +# can create the keytab with kadmin.local here and it is then useable +# by cockroach. +kadmin.local -q "ktadd -k /keytab/crdb.keytab postgres/gss_cockroach_1.gss_default@MY.EX" + +krb5kdc -n diff --git a/pkg/acceptance/compose/gss/psql/Dockerfile b/pkg/acceptance/compose/gss/psql/Dockerfile new file mode 100644 index 000000000000..e400b4fe4b2c --- /dev/null +++ b/pkg/acceptance/compose/gss/psql/Dockerfile @@ -0,0 +1,24 @@ +FROM postgres:11 + +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends \ + build-essential \ + ca-certificates \ + curl \ + git \ + krb5-user + +RUN curl https://dl.google.com/go/go1.11.5.linux-amd64.tar.gz | tar xz -C /usr/local + +ENV PATH="/usr/local/go/bin:${PATH}" + +COPY gss_test.go /test/ + +# Fetch the go packages we need but remove the script so it can be +# volume mounted at run-time enabling it to be changed without rebuilding +# the image. +RUN cd /test \ + && go get -d -t -tags gss \ + && rm -rf /test + +ENTRYPOINT ["/start.sh"] diff --git a/pkg/acceptance/compose/gss/psql/empty.go b/pkg/acceptance/compose/gss/psql/empty.go new file mode 100644 index 000000000000..39a60a305ef9 --- /dev/null +++ b/pkg/acceptance/compose/gss/psql/empty.go @@ -0,0 +1,11 @@ +// Copyright 2019 The Cockroach Authors. +// +// Licensed as a CockroachDB Enterprise file under the Cockroach Community +// License (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// https://github.com/cockroachdb/cockroach/blob/master/licenses/CCL.txt + +package gss + +// This file is here so go test always finds at least one file. diff --git a/pkg/acceptance/compose/gss/psql/gss_test.go b/pkg/acceptance/compose/gss/psql/gss_test.go new file mode 100644 index 000000000000..6a5fb8dfa44e --- /dev/null +++ b/pkg/acceptance/compose/gss/psql/gss_test.go @@ -0,0 +1,125 @@ +// Copyright 2019 The Cockroach 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. + +// "make test" would normall test this file, but it should only be tested +// within docker compose. +// +build gss + +package gss + +import ( + gosql "database/sql" + "fmt" + "os/exec" + "regexp" + "strings" + "testing" + + "github.com/lib/pq" + "github.com/pkg/errors" +) + +func TestGSS(t *testing.T) { + connector, err := pq.NewConnector("user=root sslmode=require") + if err != nil { + t.Fatal(err) + } + db := gosql.OpenDB(connector) + defer db.Close() + + tests := []struct { + // The hba.conf file/setting. + conf string + user string + // Error message of hba conf + hbaErr string + // Error message of gss login. + gssErr string + }{ + { + conf: `host all all all gss include_realm=0 nope=1`, + hbaErr: `unsupported option`, + }, + { + conf: `host all all all gss include_realm=1`, + hbaErr: `include_realm must be set to 0`, + }, + { + conf: `host all all all gss`, + hbaErr: `missing "include_realm=0"`, + }, + { + conf: `host all all all gss include_realm=0`, + user: "tester", + gssErr: `GSS authentication requires an enterprise license`, + }, + { + conf: `host all tester all gss include_realm=0`, + user: "tester", + gssErr: `GSS authentication requires an enterprise license`, + }, + { + conf: `host all nope all gss include_realm=0`, + user: "tester", + gssErr: "no server.host_based_authentication.configuration entry", + }, + { + conf: `host all all all gss include_realm=0 krb_realm=MY.EX`, + user: "tester", + gssErr: `GSS authentication requires an enterprise license`, + }, + { + conf: `host all all all gss include_realm=0 krb_realm=NOPE.EX`, + user: "tester", + gssErr: `GSSAPI realm \(MY.EX\) didn't match any configured realm`, + }, + { + conf: `host all all all gss include_realm=0 krb_realm=NOPE.EX krb_realm=MY.EX`, + user: "tester", + gssErr: `GSS authentication requires an enterprise license`, + }, + } + for i, tc := range tests { + t.Run(fmt.Sprint(i), func(t *testing.T) { + if _, err := db.Exec(`SET CLUSTER SETTING server.host_based_authentication.configuration = $1`, tc.conf); !IsError(err, tc.hbaErr) { + t.Fatalf("expected err %v, got %v", tc.hbaErr, err) + } + if tc.hbaErr != "" { + return + } + if _, err := db.Exec(fmt.Sprintf(`CREATE USER IF NOT EXISTS '%s'`, tc.user)); err != nil { + t.Fatal(err) + } + out, err := exec.Command("psql", "-c", "SELECT 1", "-U", tc.user).CombinedOutput() + err = errors.Wrap(err, strings.TrimSpace(string(out))) + if !IsError(err, tc.gssErr) { + t.Errorf("expected err %v, got %v", tc.gssErr, err) + } + }) + } +} + +func IsError(err error, re string) bool { + if err == nil && re == "" { + return true + } + if err == nil || re == "" { + return false + } + matched, merr := regexp.MatchString(re, err.Error()) + if merr != nil { + return false + } + return matched +} diff --git a/pkg/acceptance/compose/gss/psql/start.sh b/pkg/acceptance/compose/gss/psql/start.sh new file mode 100755 index 000000000000..e00fbb5a0049 --- /dev/null +++ b/pkg/acceptance/compose/gss/psql/start.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +set -e + +echo psql | kinit tester@MY.EX + +go test -tags gss /test/gss_test.go diff --git a/pkg/acceptance/compose_test.go b/pkg/acceptance/compose_test.go new file mode 100644 index 000000000000..2168e6dce0fc --- /dev/null +++ b/pkg/acceptance/compose_test.go @@ -0,0 +1,35 @@ +// Copyright 2019 The Cockroach 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 acceptance + +import ( + "os/exec" + "path/filepath" + "testing" +) + +func TestComposeGSS(t *testing.T) { + out, err := exec.Command( + "docker-compose", + "-f", filepath.Join("compose", "gss", "docker-compose.yml"), + "up", + "--build", + "--exit-code-from", "psql", + ).CombinedOutput() + if err != nil { + t.Log(string(out)) + t.Fatal(err) + } +} diff --git a/pkg/ccl/ccl_init.go b/pkg/ccl/ccl_init.go index f71cbd030b1f..234edaec4bd7 100644 --- a/pkg/ccl/ccl_init.go +++ b/pkg/ccl/ccl_init.go @@ -18,6 +18,7 @@ import ( _ "github.com/cockroachdb/cockroach/pkg/ccl/buildccl" _ "github.com/cockroachdb/cockroach/pkg/ccl/changefeedccl" _ "github.com/cockroachdb/cockroach/pkg/ccl/followerreadsccl" + _ "github.com/cockroachdb/cockroach/pkg/ccl/gssapiccl" _ "github.com/cockroachdb/cockroach/pkg/ccl/importccl" _ "github.com/cockroachdb/cockroach/pkg/ccl/partitionccl" _ "github.com/cockroachdb/cockroach/pkg/ccl/roleccl" diff --git a/pkg/ccl/gssapiccl/empty.go b/pkg/ccl/gssapiccl/empty.go new file mode 100644 index 000000000000..6f7a587b8939 --- /dev/null +++ b/pkg/ccl/gssapiccl/empty.go @@ -0,0 +1,12 @@ +// Copyright 2018 The Cockroach Authors. +// +// Licensed as a CockroachDB Enterprise file under the Cockroach Community +// License (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// https://github.com/cockroachdb/cockroach/blob/master/licenses/CCL.txt + +package gssapiccl + +// This file is here so on platforms where gssapi.go isn't built there's at +// least one .go file to build. diff --git a/pkg/ccl/gssapiccl/gssapi.go b/pkg/ccl/gssapiccl/gssapi.go new file mode 100644 index 000000000000..110ed1bc622f --- /dev/null +++ b/pkg/ccl/gssapiccl/gssapi.go @@ -0,0 +1,188 @@ +// Copyright 2018 The Cockroach Authors. +// +// Licensed as a CockroachDB Enterprise file under the Cockroach Community +// License (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// https://github.com/cockroachdb/cockroach/blob/master/licenses/CCL.txt + +// +build linux + +package gssapiccl + +import ( + "crypto/tls" + "strings" + "unsafe" + + "github.com/cockroachdb/cockroach/pkg/ccl/utilccl" + "github.com/cockroachdb/cockroach/pkg/security" + "github.com/cockroachdb/cockroach/pkg/sql" + "github.com/cockroachdb/cockroach/pkg/sql/pgwire" + "github.com/cockroachdb/cockroach/pkg/sql/pgwire/hba" + "github.com/pkg/errors" +) + +// #cgo LDFLAGS: -lgssapi_krb5 -lcom_err -lkrb5 -lkrb5support -ldl -lk5crypto -lresolv +// +// #include +// #include +import "C" + +const ( + authTypeGSS int32 = 7 + authTypeGSSContinue int32 = 8 +) + +// authGSS performs GSS authentication. See: +// https:github.com/postgres/postgres/blob/0f9cdd7dca694d487ab663d463b308919f591c02/src/backend/libpq/auth.c#L1090 +func authGSS( + c pgwire.AuthConn, + tlsState tls.ConnectionState, + insecure bool, + hashedPassword []byte, + execCfg *sql.ExecutorConfig, + entry *hba.Entry, +) (security.UserAuthHook, error) { + return func(requestedUser string, clientConnection bool) error { + var ( + majStat, minStat, lminS, gflags C.OM_uint32 + gbuf C.gss_buffer_desc + contextHandle C.gss_ctx_id_t = C.GSS_C_NO_CONTEXT + acceptorCredHandle C.gss_cred_id_t = C.GSS_C_NO_CREDENTIAL + srcName C.gss_name_t + outputToken C.gss_buffer_desc + + token []byte + err error + ) + + if err = c.SendAuthRequest(authTypeGSS, nil); err != nil { + return err + } + + for { + token, err = c.ReadPasswordBytes() + if err != nil { + return err + } + + gbuf.length = C.ulong(len(token)) + gbuf.value = C.CBytes([]byte(token)) + + majStat = C.gss_accept_sec_context( + &minStat, + &contextHandle, + acceptorCredHandle, + &gbuf, + C.GSS_C_NO_CHANNEL_BINDINGS, + &srcName, + nil, + &outputToken, + &gflags, + nil, + nil, + ) + C.free(unsafe.Pointer(gbuf.value)) + + if outputToken.length != 0 { + outputBytes := C.GoBytes(outputToken.value, C.int(outputToken.length)) + C.gss_release_buffer(&lminS, &outputToken) + if err = c.SendAuthRequest(authTypeGSSContinue, outputBytes); err != nil { + return err + } + } + if majStat != C.GSS_S_COMPLETE && majStat != C.GSS_S_CONTINUE_NEEDED { + C.gss_delete_sec_context(&lminS, &contextHandle, C.GSS_C_NO_BUFFER) + return gssError("accepting GSS security context failed", majStat, minStat) + } + if majStat != C.GSS_S_CONTINUE_NEEDED { + break + } + } + + majStat = C.gss_display_name(&minStat, srcName, &gbuf, nil) + if majStat != C.GSS_S_COMPLETE { + return gssError("retrieving GSS user name failed", majStat, minStat) + } + gssUser := C.GoStringN((*C.char)(gbuf.value), C.int(gbuf.length)) + C.gss_release_buffer(&lminS, &gbuf) + + realms := entry.GetOptions("krb_realm") + + if idx := strings.IndexByte(gssUser, '@'); idx >= 0 { + if len(realms) > 0 { + realm := gssUser[idx+1:] + matched := false + for _, krbRealm := range realms { + if realm == krbRealm { + matched = true + break + } + } + if !matched { + return errors.Errorf("GSSAPI realm (%s) didn't match any configured realm", realm) + } + } + if entry.GetOption("include_realm") != "1" { + gssUser = gssUser[:idx] + } + } else if len(realms) > 0 { + return errors.New("GSSAPI did not return realm but realm matching was requested") + } + + if !strings.EqualFold(gssUser, requestedUser) { + return errors.Errorf("requested user is %s, but GSSAPI auth is for %s", requestedUser, gssUser) + } + + // Do the license check last so that administrators are able to test whether + // their GSS configuration is correct. That is, the presence of this error + // message means they have a correctly functioning GSS/Kerberos setup, + // but now need to enable enterprise features. + return utilccl.CheckEnterpriseEnabled(execCfg.Settings, execCfg.ClusterID(), execCfg.Organization(), "GSS authentication") + }, nil +} + +func gssError(msg string, majStat, minStat C.OM_uint32) error { + var ( + gmsg C.gss_buffer_desc + lminS, msgCtx C.OM_uint32 + ) + + msgCtx = 0 + C.gss_display_status(&lminS, majStat, C.GSS_C_GSS_CODE, C.GSS_C_NO_OID, &msgCtx, &gmsg) + msgMajor := C.GoString((*C.char)(gmsg.value)) + C.gss_release_buffer(&lminS, &gmsg) + + msgCtx = 0 + C.gss_display_status(&lminS, minStat, C.GSS_C_MECH_CODE, C.GSS_C_NO_OID, &msgCtx, &gmsg) + msgMinor := C.GoString((*C.char)(gmsg.value)) + C.gss_release_buffer(&lminS, &gmsg) + + return errors.Errorf("%s: %s: %s", msg, msgMajor, msgMinor) +} + +func checkEntry(entry hba.Entry) error { + hasInclude0 := false + for _, op := range entry.Options { + switch op[0] { + case "include_realm": + if op[1] == "0" { + hasInclude0 = true + } else { + return errors.Errorf("include_realm must be set to 0: %s", op[1]) + } + case "krb_realm": + default: + return errors.Errorf("unsupported option %s", op[0]) + } + } + if !hasInclude0 { + return errors.New(`missing "include_realm=0" option in GSS entry`) + } + return nil +} + +func init() { + pgwire.RegisterAuthMethod("gss", authGSS, checkEntry) +} diff --git a/pkg/sql/pgwire/conn.go b/pkg/sql/pgwire/conn.go index 460509ff2930..3f369d9baba6 100644 --- a/pkg/sql/pgwire/conn.go +++ b/pkg/sql/pgwire/conn.go @@ -157,7 +157,7 @@ func serveConn( c := newConn(netConn, sArgs, metrics) - if err := c.handleAuthentication(ctx, insecure, ie, auth); err != nil { + if err := c.handleAuthentication(ctx, insecure, ie, auth, sqlServer.GetExecutorConfig()); err != nil { _ = c.conn.Close() reserved.Close(ctx) return err @@ -1299,7 +1299,11 @@ func (r *pgwireReader) ReadByte() (byte, error) { // point the sql.Session does not exist yet! If need exists to access the // database to look up authentication data, use the internal executor. func (c *conn) handleAuthentication( - ctx context.Context, insecure bool, ie *sql.InternalExecutor, auth *hba.Conf, + ctx context.Context, + insecure bool, + ie *sql.InternalExecutor, + auth *hba.Conf, + execCfg *sql.ExecutorConfig, ) error { sendError := func(err error) error { _ /* err */ = writeErr(err, &c.msgBuilder, c.conn) @@ -1321,6 +1325,7 @@ func (c *conn) handleAuthentication( if tlsConn, ok := c.conn.(*tls.Conn); ok { tlsState := tlsConn.ConnectionState() var methodFn AuthMethod + var hbaEntry *hba.Entry if auth == nil { methodFn = authCertPassword @@ -1367,6 +1372,7 @@ func (c *conn) handleAuthentication( if methodFn == nil { return sendError(errors.Errorf("unknown auth method %s", entry.Method)) } + hbaEntry = &entry break } if methodFn == nil { @@ -1374,7 +1380,7 @@ func (c *conn) handleAuthentication( } } - authenticationHook, err := methodFn(c, tlsState, insecure, hashedPassword) + authenticationHook, err := methodFn(c, tlsState, insecure, hashedPassword, execCfg, hbaEntry) if err != nil { return sendError(err) } @@ -1414,6 +1420,11 @@ var connAuthConf = settings.RegisterValidatedStringSetting( if hbaAuthMethods[entry.Method] == nil { return errors.Errorf("unknown auth method %q", entry.Method) } + if check := hbaCheckHBAEntries[entry.Method]; check != nil { + if err := check(entry); err != nil { + return err + } + } } return nil }, @@ -1421,23 +1432,44 @@ var connAuthConf = settings.RegisterValidatedStringSetting( // AuthConn defines exported methods of a conn needed for pgwire authentication. type AuthConn interface { - SendAuthPasswordRequest() (string, error) + SendAuthRequest(authType int32, data []byte) error + ReadPasswordString() (string, error) + ReadPasswordBytes() ([]byte, error) } -// AuthMethod defines a method for authentication of a connection. -type AuthMethod func(c AuthConn, tlsState tls.ConnectionState, insecure bool, hashedPassword []byte) (security.UserAuthHook, error) +type ( + // AuthMethod defines a method for authentication of a connection. + AuthMethod func(c AuthConn, tlsState tls.ConnectionState, insecure bool, hashedPassword []byte, execCfg *sql.ExecutorConfig, entry *hba.Entry) (security.UserAuthHook, error) + + // CheckHBAEntry defines a method for error checking an hba Entry. + CheckHBAEntry func(hba.Entry) error +) -var hbaAuthMethods = map[string]AuthMethod{} +var ( + hbaAuthMethods = map[string]AuthMethod{} + hbaCheckHBAEntries = map[string]CheckHBAEntry{} +) // RegisterAuthMethod registers an AuthMethod for pgwire authentication. -func RegisterAuthMethod(method string, fn AuthMethod) { +func RegisterAuthMethod(method string, fn AuthMethod, checkEntry CheckHBAEntry) { hbaAuthMethods[method] = fn + if checkEntry != nil { + hbaCheckHBAEntries[method] = checkEntry + } } func authPassword( - c AuthConn, tlsState tls.ConnectionState, insecure bool, hashedPassword []byte, + c AuthConn, + tlsState tls.ConnectionState, + insecure bool, + hashedPassword []byte, + execCfg *sql.ExecutorConfig, + entry *hba.Entry, ) (security.UserAuthHook, error) { - password, err := c.SendAuthPasswordRequest() + if err := c.SendAuthRequest(authCleartextPassword, nil); err != nil { + return nil, err + } + password, err := c.ReadPasswordString() if err != nil { return nil, err } @@ -1447,7 +1479,12 @@ func authPassword( } func authCert( - c AuthConn, tlsState tls.ConnectionState, insecure bool, hashedPassword []byte, + c AuthConn, + tlsState tls.ConnectionState, + insecure bool, + hashedPassword []byte, + execCfg *sql.ExecutorConfig, + entry *hba.Entry, ) (security.UserAuthHook, error) { if len(tlsState.PeerCertificates) == 0 { return nil, errors.New("no TLS peer certificates, but required for auth") @@ -1460,7 +1497,12 @@ func authCert( } func authCertPassword( - c AuthConn, tlsState tls.ConnectionState, insecure bool, hashedPassword []byte, + c AuthConn, + tlsState tls.ConnectionState, + insecure bool, + hashedPassword []byte, + execCfg *sql.ExecutorConfig, + entry *hba.Entry, ) (security.UserAuthHook, error) { var fn AuthMethod if len(tlsState.PeerCertificates) == 0 { @@ -1468,37 +1510,46 @@ func authCertPassword( } else { fn = authCert } - return fn(c, tlsState, insecure, hashedPassword) + return fn(c, tlsState, insecure, hashedPassword, execCfg, entry) } func init() { - RegisterAuthMethod("password", authPassword) - RegisterAuthMethod("cert", authCert) - RegisterAuthMethod("cert-password", authCertPassword) + RegisterAuthMethod("password", authPassword, nil) + RegisterAuthMethod("cert", authCert, nil) + RegisterAuthMethod("cert-password", authCertPassword, nil) } -// SendAuthPasswordRequest requests a cleartext password from the client and -// returns it. -func (c *conn) SendAuthPasswordRequest() (string, error) { +func (c *conn) SendAuthRequest(authType int32, data []byte) error { c.msgBuilder.initMsg(pgwirebase.ServerMsgAuth) - c.msgBuilder.putInt32(authCleartextPassword) - if err := c.msgBuilder.finishMsg(c.conn); err != nil { - return "", err - } + c.msgBuilder.putInt32(authType) + c.msgBuilder.write(data) + return c.msgBuilder.finishMsg(c.conn) +} +func (c *conn) ReadPasswordString() (string, error) { typ, n, err := c.readBuf.ReadTypedMsg(&c.rd) c.metrics.BytesInCount.Inc(int64(n)) if err != nil { return "", err } - if typ != pgwirebase.ClientMsgPassword { return "", errors.Errorf("invalid response to authentication request: %s", typ) } - return c.readBuf.GetString() } +func (c *conn) ReadPasswordBytes() ([]byte, error) { + typ, n, err := c.readBuf.ReadTypedMsg(&c.rd) + c.metrics.BytesInCount.Inc(int64(n)) + if err != nil { + return nil, err + } + if typ != pgwirebase.ClientMsgPassword { + return nil, errors.Errorf("invalid response to authentication request: %s", typ) + } + return c.readBuf.GetBytes(n - 4) +} + // statusReportParams is a list of session variables that are also // reported as server run-time parameters in the pgwire connection // initialization. diff --git a/pkg/sql/pgwire/hba/hba.go b/pkg/sql/pgwire/hba/hba.go index 9929b90cb399..4d548f739742 100644 --- a/pkg/sql/pgwire/hba/hba.go +++ b/pkg/sql/pgwire/hba/hba.go @@ -51,6 +51,33 @@ type Entry struct { Options [][2]string } +// GetOption returns the value of option name if there is exactly one +// occurrence of name in the options list, otherwise the empty string. +func (h Entry) GetOption(name string) string { + var val string + for _, opt := range h.Options { + if opt[0] == name { + // If there is more than one entry, return empty string. + if val != "" { + return "" + } + val = opt[1] + } + } + return val +} + +// GetOptions returns all values of option name. +func (h Entry) GetOptions(name string) []string { + var val []string + for _, opt := range h.Options { + if opt[0] == name { + val = append(val, opt[1]) + } + } + return val +} + func (h Entry) String() string { var sb strings.Builder sb.WriteString("host ") diff --git a/pkg/sql/pgwire/hba/testdata/parse b/pkg/sql/pgwire/hba/testdata/parse index 28b2482b9737..d8f6dfba4e14 100644 --- a/pkg/sql/pgwire/hba/testdata/parse +++ b/pkg/sql/pgwire/hba/testdata/parse @@ -44,6 +44,6 @@ error: entry 1 invalid # options parse -host all all all gss include_realm=0 krb_realm=te-st12.COM +host all all all gss krb_realm=other include_realm=0 krb_realm=te-st12.COM ---- -host all all all gss include_realm=0 krb_realm=te-st12.COM +host all all all gss krb_realm=other include_realm=0 krb_realm=te-st12.COM diff --git a/pkg/sql/pgwire/server.go b/pkg/sql/pgwire/server.go index 1a56cc19f31d..0ffcedeb5bc9 100644 --- a/pkg/sql/pgwire/server.go +++ b/pkg/sql/pgwire/server.go @@ -234,6 +234,14 @@ func MakeServer( log.Warningf(ambientCtx.AnnotateCtx(context.Background()), "invalid %s: %v", serverHBAConfSetting, err) conf = nil } + // Usernames are normalized during session init. Normalize the HBA usernames + // in the same way. + for _, entry := range conf.Entries { + for iu := range entry.User { + user := &entry.User[iu] + user.Value = tree.Name(user.Value).Normalize() + } + } server.auth.conf = conf })