keysym: speed up the perfect hash function Make it use a bit operation instead of an expensive modulo. perf diff: Baseline Delta Abs Shared Object Symbol ........ ......... ................. ................................... 28.15% -6.57% bench-compose [.] xkb_keysym_from_name Signed-off-by: Ran Benita <ran@unusedvar.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635
diff --git a/scripts/perfect_hash.py b/scripts/perfect_hash.py
index 0d7df42..b94ed98 100644
--- a/scripts/perfect_hash.py
+++ b/scripts/perfect_hash.py
@@ -195,7 +195,9 @@ class StrSaltHash(object):
self.salt = ''
def __call__(self, key):
- while len(self.salt) < len(key): # add more salt as necessary
+ # XXX: xkbcommon modification: make the salt length a power of 2
+ # so that the % operation in the hash is fast.
+ while len(self.salt) < max(len(key), 32): # add more salt as necessary
self.salt += random.choice(self.chars)
return sum(ord(self.salt[i]) * ord(c)
diff --git a/src/ks_tables.h b/src/ks_tables.h
index 95e4ac0..46d6f98 100644
--- a/src/ks_tables.h
+++ b/src/ks_tables.h
@@ -2567,300 +2567,301 @@ static const char *keysym_names =
#endif
static const uint16_t keysym_name_G[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1274, 3136, 0,
- 0, 0, 713, 2993, 3990, 2827, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2265, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 1778, 0, 1415, 0, 0, 0, 0, 1506,
- 0, 0, 0, 0, 0, 0, 0, 4395, 0, 0, 0, 0, 1271, 0, 0, 0, 1007, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 3407, 0, 0, 0, 0, 693, 0, 1554, 0,
- 0, 0, 0, 0, 0, 1354, 0, 0, 0, 0, 0, 0, 2516, 0, 0, 0, 0, 0, 1135, 0, 0,
- 522, 0, 0, 2241, 0, 4521, 536, 0, 0, 0, 2028, 0, 1848, 0, 0, 0, 0, 0,
- 94, 904, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 3458, 0, 0, 0, 0, 0, 0, 0, 58,
- 1747, 3044, 47, 1541, 0, 405, 765, 623, 0, 0, 0, 0, 0, 2309, 0, 0, 0,
- 0, 279, 4523, 1068, 0, 0, 1939, 0, 0, 2124, 0, 0, 0, 0, 0, 0, 2111,
- 2470, 0, 0, 0, 212, 0, 948, 0, 4505, 0, 1703, 0, 0, 623, 1398, 0, 0, 0,
- 0, 581, 0, 0, 0, 1984, 0, 0, 0, 466, 0, 1711, 0, 0, 0, 0, 947, 3707, 0,
- 0, 0, 0, 0, 0, 2227, 1360, 0, 0, 1030, 0, 3184, 0, 0, 0, 1672, 171,
- 1466, 2710, 0, 0, 0, 4267, 0, 0, 0, 0, 0, 0, 0, 0, 1337, 0, 0, 3261,
- 2460, 0, 4080, 0, 68, 1238, 0, 0, 0, 0, 827, 0, 1030, 490, 0, 0, 0, 0,
- 0, 0, 841, 0, 0, 1549, 0, 534, 0, 0, 3054, 0, 0, 1516, 0, 0, 0, 4536,
- 0, 4191, 0, 0, 0, 2718, 729, 0, 4284, 1692, 0, 0, 0, 0, 0, 1523, 0, 0,
- 0, 236, 303, 4502, 3826, 0, 415, 0, 0, 0, 1212, 0, 4319, 0, 0, 0, 1674,
- 1388, 0, 0, 0, 349, 0, 0, 0, 0, 1694, 0, 0, 0, 0, 195, 0, 2394, 1080,
- 0, 4417, 1576, 0, 0, 0, 0, 0, 0, 3053, 0, 0, 2672, 0, 0, 0, 0, 3696, 0,
- 0, 797, 0, 1347, 0, 1310, 0, 0, 3245, 3847, 4557, 0, 0, 0, 0, 0, 0, 0,
- 1364, 0, 0, 1040, 0, 1846, 0, 0, 0, 0, 0, 0, 0, 0, 4359, 0, 2423, 0,
- 2131, 3376, 1546, 100, 0, 0, 144, 3882, 1223, 4112, 0, 0, 0, 1412, 0,
- 0, 0, 3654, 0, 1829, 1867, 2909, 0, 0, 0, 0, 3999, 0, 0, 0, 0, 0, 0,
- 2337, 0, 0, 4146, 2438, 2760, 2123, 0, 4297, 1330, 4058, 0, 3738, 0, 0,
- 0, 0, 0, 0, 0, 1801, 2018, 0, 1839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4254,
- 4517, 3576, 0, 0, 0, 468, 0, 0, 0, 551, 0, 0, 0, 1793, 4503, 0, 1917,
- 0, 0, 698, 526, 3910, 0, 1591, 1653, 0, 0, 4080, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2186, 0, 0, 882, 609, 0, 199, 826, 0, 0, 0, 1318, 0, 0, 711,
- 1363, 116, 4177, 2263, 3662, 0, 1336, 3223, 2345, 0, 0, 0, 4534, 0, 0,
- 0, 3575, 0, 0, 1634, 798, 0, 4568, 0, 0, 0, 3310, 1001, 0, 4557, 0, 0,
- 2243, 0, 1377, 0, 0, 0, 0, 3277, 2965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1206, 0, 2524, 1099, 3439, 4511, 0, 4100, 0, 0, 0, 0, 0, 0, 766, 2397,
- 0, 1688, 0, 0, 1178, 0, 0, 625, 2834, 0, 3809, 0, 0, 252, 4008, 275,
- 2524, 92, 0, 0, 0, 0, 118, 2307, 2100, 4504, 584, 2, 284, 0, 0, 0, 0,
- 0, 1655, 1898, 0, 2934, 0, 143, 0, 3018, 0, 0, 130, 0, 1873, 1047, 0,
- 0, 0, 391, 0, 0, 0, 2176, 62, 0, 3442, 2708, 115, 920, 459, 0, 138,
- 4523, 2500, 0, 0, 0, 3600, 0, 511, 0, 375, 3713, 0, 0, 0, 2779, 624,
- 2236, 0, 0, 691, 0, 0, 0, 0, 258, 1136, 221, 2140, 1007, 0, 202, 0, 0,
- 0, 0, 125, 0, 27, 1009, 4271, 1739, 3059, 0, 313, 0, 0, 899, 476, 0, 0,
- 1408, 3778, 3718, 3003, 1111, 3592, 523, 0, 0, 560, 0, 1826, 0, 0, 0,
- 0, 4391, 0, 108, 0, 0, 1000, 1585, 2184, 3598, 2591, 0, 0, 0, 2440, 0,
- 0, 61, 0, 1183, 0, 3010, 770, 0, 48, 1995, 1049, 0, 3545, 1637, 1497,
- 439, 1028, 765, 0, 2189, 0, 0, 0, 0, 3564, 2136, 0, 1164, 618, 0, 0,
- 3697, 1048, 0, 0, 0, 0, 0, 2079, 3237, 926, 0, 0, 0, 0, 4094, 0, 1088,
- 0, 0, 0, 0, 1759, 0, 0, 0, 0, 556, 1148, 4075, 37, 2306, 0, 1471, 0,
- 3960, 2892, 3941, 1380, 0, 0, 2220, 0, 109, 0, 2195, 1862, 2434, 606,
- 0, 1470, 3689, 3828, 551, 0, 455, 0, 3387, 0, 1234, 0, 2991, 0, 0, 0,
- 0, 3550, 2421, 0, 0, 0, 0, 0, 0, 3909, 0, 0, 0, 2990, 0, 0, 0, 360,
- 865, 0, 4353, 0, 0, 327, 1840, 0, 3632, 1611, 0, 2150, 2033, 0, 0, 576,
- 0, 3467, 3689, 3824, 1718, 498, 1013, 0, 1517, 4370, 0, 0, 425, 1241,
- 1250, 0, 2605, 588, 0, 3811, 1003, 2662, 0, 0, 2122, 0, 1347, 0, 836,
- 2520, 3652, 0, 4344, 4513, 0, 0, 4233, 0, 834, 0, 0, 0, 0, 0, 1473, 0,
- 1040, 0, 0, 0, 3042, 0, 0, 3810, 2114, 0, 1001, 4360, 0, 2967, 2163, 0,
- 0, 0, 0, 31, 0, 3237, 0, 0, 3264, 0, 1494, 3098, 0, 2333, 0, 3318,
- 3187, 1168, 0, 1836, 227, 4509, 347, 0, 4216, 0, 410, 624, 384, 2523,
- 2408, 1203, 3917, 0, 4039, 2009, 0, 2375, 2523, 0, 0, 0, 962, 0, 0,
- 4354, 0, 3950, 2159, 2068, 1846, 706, 0, 0, 0, 4183, 213, 0, 1492,
- 2533, 0, 0, 0, 0, 0, 0, 0, 2830, 0, 951, 0, 1724, 1734, 741, 4100, 0,
- 0, 0, 513, 0, 0, 4218, 0, 0, 2678, 1214, 1750, 640, 0, 0, 0, 0, 0, 0,
- 1023, 0, 239, 0, 2145, 2066, 1791, 0, 147, 2084, 2897, 3270, 0, 2568,
- 615, 0, 0, 1549, 4182, 0, 0, 0, 0, 0, 873, 807, 1999, 4378, 0, 1032, 0,
- 0, 1251, 671, 0, 4368, 3166, 0, 0, 0, 1618, 0, 4142, 3890, 2587, 0,
- 994, 0, 0, 0, 0, 1623, 1204, 572, 1299, 0, 3406, 0, 141, 3557, 0, 3266,
- 0, 2936, 0, 1280, 0, 4298, 0, 0, 0, 0, 1450, 10, 4442, 658, 0, 0, 0,
- 47, 344, 0, 0, 0, 0, 0, 3103, 0, 0, 0, 0, 0, 1288, 0, 1312, 0, 1729,
- 1822, 0, 0, 0, 0, 0, 0, 3495, 477, 0, 0, 1456, 362, 0, 2390, 4571,
- 1068, 0, 0, 3958, 1862, 1275, 0, 0, 2197, 3707, 3851, 1821, 0, 4398,
- 565, 0, 1592, 3356, 0, 0, 1449, 1752, 0, 0, 0, 0, 3297, 0, 0, 0, 288,
- 1484, 0, 0, 0, 0, 0, 495, 3725, 0, 0, 0, 1154, 525, 385, 4490, 0, 0,
- 2089, 0, 0, 0, 4567, 3296, 523, 0, 3480, 468, 600, 0, 0, 0, 0, 0, 0, 0,
- 0, 2792, 670, 0, 89, 3833, 2297, 0, 0, 0, 0, 4496, 1546, 0, 1594, 0, 0,
- 0, 2303, 1950, 2808, 0, 899, 0, 3940, 2347, 0, 3065, 1798, 0, 1392,
- 3304, 0, 4143, 2499, 2037, 1793, 0, 0, 0, 3478, 1774, 0, 4214, 0, 1502,
- 1086, 0, 0, 2232, 2730, 2513, 0, 0, 1095, 0, 1480, 1316, 1620, 889, 0,
- 4459, 1326, 1440, 1246, 2509, 0, 0, 321, 1450, 2845, 0, 1040, 0, 0,
- 898, 1612, 1366, 0, 589, 0, 2084, 738, 2634, 0, 1332, 2533, 3867, 1956,
- 0, 627, 0, 2628, 1041, 1644, 1204, 0, 0, 0, 2135, 0, 0, 4446, 3467, 0,
- 401, 0, 0, 0, 1380, 0, 3298, 0, 1991, 3715, 4383, 0, 0, 0, 4413, 2256,
- 0, 0, 3913, 0, 0, 4201, 3080, 3458, 2459, 1006, 3915, 0, 3775, 0, 102,
- 3601, 664, 0, 51, 0, 0, 1147, 4198, 0, 543, 0, 4571, 4460, 0, 0, 0,
- 1674, 359, 4493, 0, 0, 0, 0, 1957, 0, 2706, 0, 0, 2630, 473, 3918,
- 2485, 0, 0, 1314, 0, 2086, 2977, 0, 1816, 584, 0, 1110, 1391, 0, 0,
- 2001, 1709, 2445, 0, 0, 864, 1848, 2392, 3824, 754, 0, 0, 0, 2308, 0,
- 0, 644, 3700, 0, 1303, 0, 0, 1255, 0, 0, 0, 3224, 0, 1727, 1528, 0,
- 2702, 3122, 3815, 4454, 1674, 0, 0, 1479, 2293, 0, 0, 0, 2575, 950,
- 1784, 0, 2415, 0, 3908, 3869, 1685, 0, 0, 4401, 1719, 3917, 0, 0, 0,
- 388, 3113, 2530, 0, 3860, 1424, 3688, 0, 3475, 2585, 4093, 2667, 0, 0,
- 0, 0, 4220, 780, 4026, 15, 0, 386, 0, 0, 4116, 545, 0, 0, 2190, 2144,
- 1199, 88, 4008, 80, 0, 0, 0, 1933, 796, 2108, 1181, 2460, 4306, 547,
- 2935, 4073, 0, 0, 0, 28, 2327, 1291, 3644, 2142, 1338, 0, 1276, 2309,
- 0, 3903, 4551, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 806, 308, 0, 2404,
- 0, 0, 0, 896, 3457, 0, 0, 0, 0, 1748, 4170, 0, 3850, 0, 2045, 4282,
- 675, 0, 0, 0, 3089, 0, 0, 3880, 0, 43, 3705, 3474, 0, 2435, 0, 2999, 0,
- 0, 2438, 629, 1082, 0, 2046, 3271, 329, 0, 0, 0, 0, 0, 0, 2268, 1678,
- 0, 3364, 2471, 0, 555, 4333, 2528, 0, 3397, 1403, 0, 3000, 1431, 1449,
- 0, 1940, 0, 2748, 535, 0, 4322, 1815, 1925, 2252, 1160, 2063, 0, 0,
- 2325, 0, 0, 0, 1839, 0, 2430, 0, 3954, 1420, 0, 0, 2075, 3449, 2928,
- 179, 0, 2146, 0, 0, 0, 0, 624, 0, 1300, 459, 0, 457, 0, 1624, 2003, 0,
- 0, 2071, 1465, 1402, 0, 3982, 0, 2724, 3912, 1716, 4294, 0, 0, 2240,
- 1224, 1295, 420, 0, 0, 1701, 1593, 0, 0, 2822, 4325, 3845, 3580, 0, 0,
- 0, 3883, 0, 2255, 635, 0, 0, 0, 1728, 0, 3083, 0, 559, 468, 0, 0, 4185,
- 887, 0, 123, 2042, 207, 4026, 0, 799, 0, 67, 4225, 0, 0, 0, 0, 3483,
- 2066, 0, 1212, 1269, 2722, 4082, 0, 1261, 0, 0, 2644, 3721, 0, 334, 0,
- 0, 0, 0, 3273, 669, 0, 1348, 0, 0, 2819, 809, 0, 0, 2926, 4365, 0, 0,
- 0, 0, 3948, 0, 0, 3762, 4449, 3815, 0, 361, 4135, 1119, 0, 3828, 0,
- 221, 1019, 3455, 4136, 0, 0, 3347, 2545, 3099, 368, 3242, 0, 2445,
- 4224, 862, 0, 0, 2469, 67, 530, 1476, 0, 3278, 3894, 0, 2402, 0, 363,
- 0, 892, 3105, 0, 1498, 775, 0, 0, 1470, 1827, 0, 0, 0, 167, 3946, 0, 0,
- 0, 111, 919, 0, 0, 1621, 0, 0, 0, 0, 3196, 3335, 1094, 0, 3879, 667, 0,
- 2433, 4342, 0, 0, 948, 0, 0, 4546, 2936, 0, 2630, 0, 0, 0, 0, 0, 3247,
- 719, 4570, 1393, 1228, 0, 0, 0, 4431, 4227, 0, 0, 0, 0, 1676, 0, 1211,
- 4195, 0, 0, 0, 3958, 0, 225, 31, 0, 0, 0, 3305, 0, 0, 0, 2398, 0, 1246,
- 4277, 0, 0, 4497, 0, 0, 3499, 0, 0, 0, 0, 1394, 565, 4060, 0, 4103, 0,
- 3960, 2348, 415, 3687, 0, 4233, 0, 0, 1970, 0, 2851, 0, 253, 0, 0,
- 1241, 3798, 0, 0, 0, 887, 928, 0, 0, 0, 0, 0, 4044, 0, 0, 2384, 1566,
- 3534, 4265, 2239, 651, 0, 723, 0, 1843, 4252, 315, 0, 598, 1152, 0,
- 748, 671, 4132, 71, 1664, 2253, 0, 0, 3536, 0, 0, 1373, 0, 0, 1135, 0,
- 614, 2996, 4176, 4494, 0, 0, 0, 0, 1266, 1066, 2040, 3214, 285, 0, 939,
- 2776, 0, 4165, 2155, 1463, 0, 2425, 2233, 1919, 0, 4025, 2289, 1432,
- 4105, 0, 0, 4206, 2830, 792, 4328, 889, 4564, 0, 0, 0, 150, 0, 3472, 0,
- 0, 0, 1196, 32, 4344, 2043, 3440, 1131, 526, 0, 1874, 1175, 637, 0,
- 3467, 0, 0, 0, 1097, 804, 0, 0, 1498, 0, 1183, 534, 2557, 4437, 0, 0,
- 0, 4011, 1605, 2411, 1726, 2572, 1121, 1586, 0, 0, 1431, 0, 0, 0, 2343,
- 3469, 286, 0, 1299, 2353, 0, 0, 612, 2810, 2358, 0, 2256, 0, 556, 38,
- 2074, 3295, 220, 4360, 2152, 486, 639, 87, 0, 0, 3278, 0, 0, 4081, 0,
- 0, 2310, 3650, 530, 0, 2653, 1568, 0, 1521, 0, 2566, 1654, 3427, 3371,
- 1002, 0, 1704, 1124, 593, 3384, 542, 0, 0, 2815, 0, 1068, 0, 0, 196,
- 2485, 1523, 0, 485, 177, 1419, 37, 1541, 947, 0, 0, 0, 0, 0, 2206, 699,
- 17, 2046, 0, 2354, 484, 1330, 3149, 4023, 0, 0, 1076, 0, 937, 3380, 0,
- 3048, 0, 0, 4124, 184, 0, 650, 2351, 3996, 4094, 107, 0, 3708, 532,
- 4104, 1499, 0, 0, 0, 0, 247, 559, 0, 1948, 0, 1656, 0, 0, 3342, 1858,
- 546, 1797, 1889, 0, 0, 0, 1376, 0, 2225, 1617, 4255, 144, 4565, 1171,
- 0, 0, 324, 550, 0, 0, 0, 0, 0, 0, 0, 2931, 827, 2345, 0, 3283, 2988, 0,
- 1451, 840, 3747, 0, 3877, 0, 2398, 892, 0, 3558, 1949, 242, 506, 464,
- 1738, 0, 1878, 220, 3627, 686, 683, 0, 339, 938, 878, 3736, 0, 3494, 0,
- 1031, 3790, 0, 784, 2497, 3172, 0, 1234, 0, 1860, 0, 926, 487, 1355, 0,
- 0, 931, 0, 1729, 0, 0, 185, 1311, 1134, 1887, 1152, 554, 0, 362, 714,
- 1864, 2680, 2566, 0, 0, 1536, 153, 0, 1379, 2011, 2346, 548, 1009, 0,
- 1696, 4459, 0, 1564, 0, 893, 0, 0, 337, 1503, 3224, 0, 1406, 2399, 0,
- 0, 358, 0, 3095, 3576, 0, 0, 0, 0, 239, 0, 2705, 3344, 0, 0, 1135,
- 1895, 1687, 2134, 2286, 0, 410, 1905, 35, 0, 0, 0, 0, 0, 82, 0, 4472,
- 2399, 2200, 0, 4117, 1371, 1433, 0, 1084, 1605, 3732, 2091, 4484, 1714,
- 1725, 0, 2578, 3154, 2785, 0, 2488, 0, 0, 558, 4210, 3785, 0, 3603, 0,
- 891, 3063, 163, 4442, 891, 2881, 932, 0, 393, 0, 2705, 0, 2003, 0, 0,
- 0, 1027, 0, 2402, 1792, 2484, 1685, 0, 2959, 0, 1516, 1856, 0, 0, 0,
- 2970, 18, 1264, 0, 443, 2058, 4108, 3660, 1285, 0, 0, 665, 2883, 0,
- 4170, 647, 4193, 0, 0, 0, 0, 0, 0, 3271, 3986, 0, 123, 1092, 0, 1349,
- 0, 345, 2034, 333, 560, 0, 3620, 2414, 327, 2730, 1265, 1684, 895,
- 3481, 2358, 0, 0, 4053, 820, 0, 4105, 884, 878, 3854, 609, 0, 0, 1831,
- 0, 0, 3334, 0, 0, 0, 1643, 1874, 0, 213, 1736, 0, 1298, 0, 0, 2365, 0,
- 2161, 0, 0, 0, 2565, 4424, 3617, 541, 0, 0, 377, 0, 3596, 1299, 0,
- 2886, 3013, 0, 0, 608, 590, 2582, 567, 3241, 1699, 0, 0, 4086, 156,
- 1293, 1386, 0, 262, 1581, 4107, 1844, 2130, 1611, 773, 4571, 0, 0,
- 3029, 2515, 0, 952, 624, 1887, 6, 906, 0, 0, 1402, 645, 0, 1562, 4078,
- 1430, 0, 2882, 1354, 4455, 349, 0, 2969, 0, 715, 0, 2375, 0, 0, 0, 0,
- 56, 0, 852, 0, 0, 530, 3625, 0, 3152, 1233, 4547, 0, 3880, 6, 821, 0,
- 479, 905, 1721, 1417, 0, 197, 0, 0, 0, 1475, 0, 3634, 0, 0, 0, 0, 721,
- 860, 2195, 133, 830, 1907, 4355, 3547, 3521, 0, 0, 2970, 229, 4509,
- 934, 796, 0, 443, 185, 0, 0, 1198, 1010, 0, 3196, 1852, 4368, 3413,
- 3810, 38, 1274, 0, 266, 386, 441, 0, 955, 0, 249, 177, 75, 0, 0, 2126,
- 3969, 0, 705, 0, 365, 0, 0, 2028, 3081, 0, 4070, 0, 806, 4148, 353,
- 1662, 3552, 3470, 1090, 657, 0, 2419, 3816, 0, 0, 3206, 0, 1510, 1947,
- 0, 0, 898, 0, 2300, 0, 1215, 0, 2649, 2370, 1057, 0, 588, 343, 0, 676,
- 25, 0, 0, 0, 2136, 3086, 0, 743, 0, 3387, 0, 0, 0, 4183, 0, 0, 0, 0,
- 1222, 2162, 3066, 0, 0, 3720, 0, 0, 707, 4153, 454, 445, 2999, 0, 1379,
- 0, 2494, 0, 3340, 0, 208, 820, 1701, 4472, 434, 260, 0, 0, 1852, 0, 0,
- 0, 0, 220, 790, 0, 0, 1024, 0, 0, 811, 0, 0, 3951, 0, 4307, 3446, 0,
- 1220, 3944, 624, 3937, 2947, 1531, 4380, 3696, 2831, 2210, 1038, 623,
- 3497, 1187, 0, 696, 4497, 1176, 596, 0, 0, 1820, 0, 1175, 4501, 0, 0,
- 2061, 0, 3708, 1582, 2371, 3866, 0, 0, 79, 794, 3135, 0, 2246, 1223,
- 154, 0, 941, 1774, 157, 716, 0, 1346, 0, 4411, 3364, 1478, 2230, 1563,
- 2293, 1819, 788, 1700, 155, 108, 44, 0, 3613, 449, 0, 0, 3772, 170,
- 2889, 1145, 0, 2388, 0, 0, 0, 3739, 0, 1953, 0, 312, 1006, 4495, 0, 0,
- 1004, 1936, 2417, 4432, 842, 0, 2430, 0, 1594, 0, 0, 14, 0, 0, 2195, 0,
- 0, 4108, 3124, 3136, 0, 0, 0, 0, 3905, 357, 756, 3113, 3589, 0, 1606,
- 3438, 1013, 0, 1661, 128, 4228, 0, 1348, 1306, 0, 193, 636, 2160, 3215,
- 4150, 0, 3369, 2408, 0, 3674, 2995, 0, 594, 4276, 1379, 0, 2660, 0,
- 1255, 773, 689, 4449, 2292, 3161, 607, 0, 2120, 587, 0, 0, 265, 0, 0,
- 0, 1140, 3562, 0, 0, 2053, 1788, 0, 2530, 457, 1481, 3006, 283, 0, 0,
- 1989, 670, 0, 0, 2170, 1477, 4068, 2586, 2447, 0, 2631, 1309, 2087,
- 2322, 4121, 0, 1824, 0, 0, 2845, 0, 451, 0, 0, 1514, 3756, 0, 0, 0,
- 1278, 1967, 1860, 0, 3379, 798, 3191, 2335, 392, 1595, 522, 2029, 0, 0,
- 368, 0, 0, 2019, 411, 1136, 241, 0, 0, 0, 0, 0, 0, 0, 0, 288, 4280, 0,
- 508, 701, 0, 0, 4527, 0, 1193, 1951, 1577, 2744, 0, 3953, 0, 0, 0,
- 3924, 0, 4156, 0, 1095, 53, 1380, 3147, 0, 1969, 0, 0, 0, 66, 880,
- 4451, 2133, 4571, 3317, 0, 0, 4144, 0, 1908, 1370, 0, 4106, 0, 0, 0, 0,
- 3380, 0, 4474, 1457, 664, 432, 1304, 0, 1982, 806, 0, 2434, 0, 0, 0,
- 566, 0, 169, 3834, 0, 4472, 572, 2975, 2908, 0, 2112, 0, 2410, 1189, 0,
- 1522, 0, 83, 1762, 872, 0, 87, 3289, 1699, 0, 4002, 413, 4259, 1778, 0,
- 0, 0, 4423, 1639, 4189, 1941, 0, 0, 0, 110, 0, 3907, 2569, 0, 0, 1163,
- 0, 0, 0, 2207, 2297, 2128, 1514, 0, 1211, 0, 3831, 0, 0, 3719, 3892,
- 2261, 0, 1243, 0, 0, 330, 2990, 0, 757, 0, 0, 2918, 1822, 0, 0, 401,
- 1008, 782, 934, 2522, 0, 0, 1338, 1148, 0, 0, 3051, 0, 262, 1452, 103,
- 0, 755, 0, 0, 689, 1382, 300, 0, 0, 0, 0, 924, 256, 2291, 1621, 2337,
- 2592, 0, 2448, 183, 2584, 0, 1515, 4062, 404, 0, 1111, 4425, 0, 0,
- 2894, 0, 0, 3137, 0, 0, 0, 2039, 287, 0, 0, 4130, 4522, 1779, 0, 0, 0,
- 507, 4241, 0, 3439, 314, 1890, 0, 207, 0, 4371, 0, 165, 0, 831, 0,
- 1376, 3418, 1992, 618, 2899, 764, 0, 0, 673, 346, 0, 0, 1079, 989,
- 3310, 0, 0, 576, 4131, 1024, 0, 138, 977, 185, 1730, 450, 0, 0, 0,
- 4118, 425, 2249, 3295, 0, 1001, 0, 0, 0, 3945, 1156, 0, 1716, 0, 1706,
- 1638, 3503, 0, 0, 0, 846, 2395, 1228, 0, 2238, 880, 3836, 0, 0, 0,
- 3963, 0, 0, 974, 0, 3635, 1295, 0, 2760, 687, 3754, 24, 4494, 313,
- 2814, 0, 140, 410, 0, 899, 271, 2034, 0, 0, 663, 1174, 1200, 509, 395,
- 1780, 0, 2002, 2746, 2185, 0, 195, 0, 0, 0, 0, 0, 3255, 0, 0, 0, 0,
- 1051, 0, 1354, 0, 2197, 0, 34, 0, 0, 3821, 0, 0, 0, 0, 3585, 2865, 0,
- 144, 2152, 2237, 1479, 1760, 238, 0, 458, 200, 609, 1941, 540, 0, 620,
- 0, 489, 1875, 1178, 1149, 4376, 2933, 0, 1856, 2998, 3541, 276, 1942,
- 1996, 0, 3894, 1539, 90, 0, 0, 0, 752, 0, 0, 803, 0, 4332, 0, 0, 804,
- 1525, 701, 0, 763, 3174, 1902, 0, 626, 3469, 0, 0, 3151, 1585, 0, 0,
- 163, 0, 474, 2644, 0, 1259, 2043, 0, 1932, 513, 323, 0, 0, 2205, 3636,
- 4275, 3650, 1020, 73, 2189, 0, 2848, 724, 0, 0, 684, 0, 625, 1867, 867,
- 4435, 0, 1383, 0, 0, 30, 1265, 3329, 0, 958, 1380, 965, 0, 0, 0, 3010,
- 0, 3590, 0, 80, 638, 0, 2056, 0, 1062, 1923, 0, 1400, 970, 1163, 2802,
- 363, 4340, 3853, 2718, 6, 1772, 1594, 0, 2512, 692, 2305, 328, 72,
- 3371, 133, 2729, 503, 0, 0, 0, 0, 1816, 4319, 2285, 264, 3409, 458,
- 4058, 1994, 3412, 0, 2318, 1209, 0, 119, 76, 0, 0, 0, 2629, 1969, 530,
- 4327, 0, 2247, 0, 0, 0, 999, 4169, 0, 2040, 0, 518, 0, 934, 0, 1803, 0,
- 0, 1782, 0, 0, 3814, 40, 2562, 1756, 4511, 3597, 1058, 0, 1983, 4472,
- 723, 2866, 0, 1773, 3817, 172, 0, 0, 3119, 918, 646, 822, 0, 390, 0,
- 1756, 0, 2208, 0, 4271, 2810, 80, 1249, 0, 1512, 0, 0, 3530, 0, 1325,
- 578, 1238, 2979, 3714, 0, 0, 2587, 1849, 1200, 3996, 2045, 1279, 0, 0,
- 353, 0, 712, 18, 0, 0, 1598, 1673, 1227, 0, 0, 0, 1603, 4017, 0, 893,
- 4216, 2048, 2466, 0, 1121, 0, 571, 3242, 1929, 1203, 4285, 1669, 0,
- 4344, 4061, 0, 2220, 0, 4211, 4070, 599, 0, 0, 3466, 3175, 0, 0, 2168,
- 2410, 3863, 4, 2479, 217, 2673, 1783, 2294, 4085, 0, 109, 0, 3131, 0,
- 1744, 3679, 0, 3613, 0, 0, 757, 3400, 59, 3072, 0, 1091, 432, 0, 356,
- 2399, 2031, 81, 1614, 383, 1659, 0, 2694, 0, 2218, 1558, 0, 0, 0, 623,
- 3248, 102, 1057, 0, 1612, 0, 201, 0, 796, 19, 2513, 0, 0, 490, 2901,
- 396, 0, 0, 742, 2383, 3053, 85, 0, 4504, 743, 3757, 13, 328, 0, 2485,
- 1419, 0, 0, 2621, 1981, 0, 934, 0, 1081, 0, 0, 735, 0, 0, 0, 1622, 0,
- 0, 252, 0, 0, 2222, 0, 0, 655, 1912, 0, 0, 0, 4105, 0, 3236, 4412,
- 1627, 1388, 4211, 0, 0, 1526, 1784, 892, 2843, 4195, 0, 0, 0, 578, 710,
- 0, 2506, 0, 0, 0, 3075, 2753, 0, 0, 448, 3916, 1939, 0, 1751, 0, 0, 0,
- 2009, 0, 96, 4257, 1033, 678, 1685, 0, 0, 2960, 0, 0, 1941, 2215, 117,
- 1301, 0, 0, 3806, 0, 0, 3061, 0, 942, 667, 0, 0, 2380, 2154, 647, 0, 0,
- 1070, 4496, 0, 3270, 1712, 0, 4436, 0, 0, 1855, 299, 0, 3156, 408,
- 2773, 0, 0, 2803, 0, 1009, 0, 2447, 0, 3915, 1414, 4367, 2648, 0, 56,
- 0, 456, 4297, 1730, 0, 1746, 0, 1803, 261, 0, 2132, 1495, 0, 1853, 0,
- 0, 3651, 1429, 4264, 2360, 1785, 4130, 1488, 624, 4550, 4287, 713, 396,
- 3085, 3959, 2609, 1375, 301, 2165, 796, 0, 0, 0, 3761, 3815, 2984, 0,
- 0, 853, 0, 2174, 3323, 969, 231, 922, 0, 0, 707, 2036, 0, 951, 0, 2088,
- 2129, 3954, 4241, 1988, 1584, 744, 948, 1525, 956, 263, 149, 1370, 497,
- 3452, 0, 3159, 0, 0, 1582, 1131, 3481, 1546, 3777, 3252, 0, 3776, 699,
- 0, 0, 4090, 1220, 0, 1309, 0, 1640, 0, 1922, 2236, 2497, 0, 964, 0,
- 485, 873, 0, 2818, 0, 0, 0, 1564, 48, 1156, 1181, 178, 17, 0, 1098,
- 4254, 0, 0, 0, 733, 4412, 3857, 0, 1529, 0, 2604, 0, 752, 0, 3717, 0,
- 2247, 0, 718, 188, 3402, 833, 0, 3734, 0, 986, 4217, 0, 0, 0, 3450,
- 1213, 0, 1185, 2605, 0, 2457, 1195, 4487, 3493, 0, 1628, 0, 437, 3372,
- 0, 357, 2593, 3050, 1812, 3884, 0, 0, 2319, 4303, 0, 2524, 403, 0, 0,
- 2182, 656, 0, 655, 774, 3919, 0, 1954, 1478, 1088, 196, 226, 0, 4179,
- 0, 0, 2402, 3940, 1576, 1765, 556, 0, 0, 0, 0, 0, 849, 837, 0, 546,
- 2396, 0, 1675, 0, 0, 2044, 0, 1582, 324, 2070, 0, 0, 777, 600, 0, 1042,
- 2064, 28, 871, 0, 3814, 827, 0, 3803, 2057, 0, 3294, 2760, 652, 0,
- 2987, 268, 544, 463, 1945, 0, 174, 0, 0, 2027, 275, 4251, 0, 3996,
- 1030, 144, 2234, 1229, 580, 2394, 1156, 0, 0, 0, 3661, 1642, 0, 0, 35,
- 0, 809, 978, 0, 0, 703, 813, 2387, 0, 637, 0, 0, 1185, 1723, 0, 2329,
- 1040, 3978, 879, 0, 0, 0, 3842, 3161, 0, 4368, 0, 53, 0, 3356, 203,
- 159, 3120, 1848, 1339, 1155, 787, 661, 3396, 974, 750, 2778, 0, 0, 136,
- 0, 0, 4197, 157, 0, 0, 0, 0, 1818, 251, 2491, 3772, 0, 1345, 2096, 815,
- 0, 0, 3211, 2277, 0, 1756, 1705, 4200, 2165, 0, 2025, 1716, 2766, 1562,
- 0, 1469, 1726, 2383, 412, 233, 0, 2101, 263, 0, 1013, 1104, 0, 520,
- 2619, 266, 1325, 0, 1486, 4396, 1495, 2887, 0, 0, 0, 3461, 0, 0, 0, 0,
- 0, 0, 981, 3351, 148, 0, 0, 1804, 0, 0, 3039, 593, 0, 1545, 0, 2323, 0,
- 3429, 1689, 1974, 308, 0, 0, 0, 0, 708, 1611, 1685, 1546, 0, 0, 0, 983,
- 0, 1284, 0, 0, 2744, 0, 1697, 2061, 1561, 2, 0, 230, 0, 961, 0, 0,
- 2400, 1583, 3664, 0, 0, 662, 0, 4252, 0, 3851, 1924, 1611, 749, 0, 0,
- 2492, 0, 2461, 0, 526, 2526, 4, 4421, 1046, 0, 76, 4486, 0, 0, 0, 0,
- 402, 310, 1851, 0, 768, 946, 1123, 1619, 692, 2021, 496, 2156, 2953,
- 1973, 0, 0, 0, 2282, 0, 0, 3199, 1428, 0, 0, 2517, 0, 0, 524, 2534,
- 4323, 2550, 0, 1077, 523, 0, 968, 0, 2923, 0, 0, 4058, 0, 312, 1638,
- 3977, 4188, 3540, 2457, 0, 1266, 2023, 0, 1109, 0, 0, 374, 703, 212, 0,
- 0, 353, 0, 393, 0, 0, 0, 0, 3141, 0, 1018, 1834, 0, 1310, 847, 0, 1852,
- 0, 0, 0, 0, 0, 3457, 0, 0, 4235, 496, 3606, 2068, 0, 1364, 2368, 4044,
- 0, 4053, 4357, 2562, 0, 3966, 1574, 2563, 0, 1096, 586, 0, 1363, 348,
- 1799, 2334, 0, 1896, 0, 0, 0, 269, 147, 66, 1989, 420, 1770, 1320, 40,
- 145, 0, 0, 1989, 780, 2146, 0, 34, 0, 1641, 0, 0, 1441, 656, 0, 3687,
- 2618, 194, 1003, 4464, 1002, 3696, 1182, 1489, 0, 3082, 122, 1200,
- 1225, 0, 1020, 0, 212, 0, 1571, 0, 0, 0, 3655, 0, 0, 786, 201, 1123,
- 1410, 0, 1721, 3007, 14, 0, 2905, 805, 0, 0, 1391, 0, 0, 0, 1095, 3990,
- 3241, 2310, 0, 3083, 0, 3538, 4414, 3027, 0, 0, 0, 4344, 0, 0, 2576,
- 4572, 2427, 0, 0, 0, 2155, 0, 1085, 2425, 0, 0, 1918, 0, 1808, 564,
- 4401, 4255, 557, 401, 3667, 2574, 2067, 0, 1738, 3622, 2265, 0, 0,
- 2597, 0, 1932, 680, 331, 0, 0, 3656, 2620, 1607, 2507, 1598, 1814,
- 2052, 0, 1230, 24, 175, 0, 2040, 2437, 925, 1398, 4414, 0, 0, 245,
- 1453, 2389, 695, 991, 2947, 2074, 0, 949, 0, 0, 3646, 1700, 0, 3708,
- 3165, 2216, 3551, 0, 0, 832, 2156, 48, 0, 630, 0, 994, 0, 0, 2157,
- 4262, 384, 2055, 2999, 0, 0, 1666, 0, 0, 4361, 1326, 882, 0, 672, 730,
- 4454, 2013, 0, 1017, 3375, 3795, 0, 1600, 3459, 3600, 2107, 1926, 712,
- 12, 2950, 2014, 435, 844, 0, 2004, 0, 0, 636, 0, 0, 2756, 4568, 0, 502,
- 1023, 2854, 0, 1247, 1165, 1437, 0, 2574, 0, 2650, 0, 2041, 0, 1443, 0,
- 0, 0, 1627, 1057, 0, 269, 0, 1920, 2309, 2124, 0, 4058, 975, 3215,
- 4226, 1434, 0, 0, 3977, 0, 889, 1403, 0, 458, 0, 1756, 417, 847, 2454,
- 4237, 3904, 0, 188, 0, 769, 0, 1168, 0, 3939, 4182, 0, 0, 160, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1650, 0, 0, 0, 0,
+ 0, 1245, 0, 3310, 4490, 0, 0, 0, 0, 4529, 0, 0, 0, 0, 3857, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2266, 0, 0, 0, 0, 0,
+ 3688, 0, 0, 4511, 0, 0, 0, 0, 0, 0, 0, 3299, 0, 0, 0, 0, 0, 544, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1200, 3223, 4207, 0, 672, 0, 0, 0, 0, 0, 3303,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4369, 0, 2211, 0, 0, 0, 2592, 0, 0,
+ 0, 0, 1606, 0, 2530, 1223, 0, 0, 727, 0, 0, 297, 0, 4204, 0, 0, 0, 0,
+ 0, 2370, 0, 0, 3160, 0, 0, 0, 0, 3661, 0, 0, 0, 0, 1253, 0, 0, 2229,
+ 4008, 4269, 0, 0, 0, 0, 1572, 0, 1730, 3284, 0, 3643, 0, 0, 0, 4448,
+ 783, 0, 0, 0, 419, 0, 0, 564, 0, 0, 0, 0, 0, 1896, 2895, 0, 303, 0,
+ 3482, 1037, 0, 0, 0, 888, 0, 0, 0, 0, 3829, 0, 486, 0, 0, 0, 244, 0,
+ 1731, 0, 0, 0, 0, 1609, 417, 2333, 2106, 4289, 1503, 0, 0, 0, 0, 0,
+ 1880, 0, 0, 0, 0, 1740, 0, 0, 1273, 1470, 0, 0, 188, 0, 0, 0, 0, 1001,
+ 0, 0, 3155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2269, 3789, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1492, 3200, 0, 0, 0, 0, 0, 2009, 24, 0, 0, 0, 80, 3123, 0, 0, 0, 0,
+ 0, 0, 0, 1126, 0, 0, 0, 0, 3585, 858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 811, 0, 4003, 3813, 0, 0, 2583, 113, 4408, 0, 386, 4182, 0, 0, 142,
+ 1325, 0, 0, 3074, 2313, 1469, 0, 0, 0, 3369, 2485, 0, 0, 4129, 1512, 0,
+ 0, 0, 0, 0, 771, 0, 0, 0, 767, 0, 0, 0, 1664, 0, 1616, 0, 0, 2363, 0,
+ 0, 0, 0, 2513, 0, 496, 1054, 0, 2211, 0, 0, 0, 0, 0, 1986, 348, 0, 0,
+ 2203, 0, 2784, 1635, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 347, 3512, 0,
+ 0, 0, 1129, 4390, 0, 4273, 0, 0, 1171, 0, 0, 0, 114, 874, 4517, 0, 0,
+ 0, 0, 0, 0, 1747, 0, 0, 0, 0, 0, 4188, 0, 2430, 0, 0, 0, 0, 0, 0, 2788,
+ 0, 2921, 0, 0, 874, 0, 0, 0, 0, 0, 2047, 0, 1604, 0, 0, 3995, 2895, 0,
+ 0, 0, 0, 0, 2604, 0, 0, 1881, 0, 0, 0, 4253, 1024, 4228, 0, 0, 1914,
+ 4001, 1011, 1639, 0, 0, 0, 0, 0, 3540, 0, 0, 2461, 0, 0, 3833, 0, 0,
+ 2013, 0, 0, 0, 2245, 0, 3283, 2902, 2494, 0, 610, 1708, 0, 0, 0, 0, 0,
+ 2934, 4383, 0, 1636, 0, 0, 0, 0, 3355, 0, 1971, 482, 1599, 0, 3749,
+ 2152, 0, 0, 0, 0, 1097, 982, 3592, 2806, 0, 0, 0, 0, 173, 780, 0, 2659,
+ 3730, 0, 599, 361, 382, 0, 574, 571, 0, 158, 0, 0, 0, 4332, 654, 0,
+ 478, 2666, 0, 0, 4354, 0, 723, 745, 0, 2334, 0, 0, 0, 315, 0, 0, 0,
+ 2285, 0, 0, 0, 0, 0, 0, 0, 0, 190, 2779, 2749, 0, 0, 0, 0, 0, 2127, 0,
+ 0, 168, 0, 2437, 2837, 3502, 0, 0, 0, 0, 0, 0, 1849, 1598, 0, 4373, 0,
+ 1200, 0, 238, 3420, 0, 3178, 0, 1571, 372, 0, 0, 1495, 3121, 0, 4099,
+ 0, 3109, 0, 0, 0, 0, 0, 1373, 0, 4432, 0, 0, 3370, 3279, 0, 0, 2799, 0,
+ 0, 0, 0, 2953, 3278, 1971, 1613, 0, 0, 0, 0, 0, 0, 0, 0, 1369, 2843, 0,
+ 989, 0, 358, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 964, 3811, 0, 0, 0, 0,
+ 1364, 0, 0, 344, 2501, 0, 0, 1167, 1318, 137, 0, 0, 0, 930, 0, 1340,
+ 1404, 873, 0, 0, 0, 0, 0, 391, 0, 2376, 3115, 2659, 1273, 2214, 0,
+ 1769, 0, 194, 0, 3009, 0, 0, 1100, 2540, 1308, 1729, 3882, 0, 0, 1925,
+ 0, 0, 0, 0, 3324, 3605, 1221, 0, 0, 0, 644, 4360, 4557, 0, 0, 0, 0,
+ 1224, 2656, 0, 4378, 4065, 0, 0, 0, 0, 0, 203, 0, 173, 0, 0, 0, 435,
+ 2916, 3546, 288, 0, 0, 0, 0, 0, 3744, 2681, 0, 0, 4396, 0, 0, 0, 3078,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 1523, 0, 0, 2313, 4347, 3320, 0, 0,
+ 3360, 566, 0, 88, 0, 0, 0, 0, 0, 2736, 0, 0, 4062, 0, 1939, 0, 2354, 0,
+ 4354, 4398, 0, 2328, 1976, 270, 0, 0, 2344, 1040, 0, 0, 3016, 4339,
+ 1220, 1136, 0, 1813, 0, 0, 990, 1892, 2453, 3252, 0, 2452, 2497, 2007,
+ 3329, 508, 0, 4500, 0, 0, 0, 0, 4293, 1207, 0, 719, 257, 0, 4532, 3884,
+ 2899, 2065, 967, 0, 0, 0, 4561, 0, 0, 1197, 0, 0, 0, 2578, 3109, 0,
+ 112, 0, 1923, 0, 809, 0, 4444, 3287, 0, 3693, 4508, 0, 0, 0, 0, 0, 0,
+ 0, 2024, 0, 0, 0, 0, 0, 2196, 0, 0, 0, 0, 3174, 3287, 0, 1813, 0, 0,
+ 3626, 2618, 2811, 0, 0, 0, 0, 910, 0, 1874, 0, 290, 1791, 0, 1291, 0,
+ 4027, 0, 3605, 0, 0, 0, 3275, 874, 3363, 0, 0, 1321, 0, 1500, 0, 0,
+ 4206, 2033, 4437, 2991, 0, 0, 0, 0, 4382, 3870, 1984, 0, 0, 0, 1096, 0,
+ 0, 4036, 0, 0, 3578, 1230, 0, 0, 2550, 0, 978, 3007, 0, 140, 0, 1157,
+ 0, 0, 0, 0, 0, 0, 4544, 4453, 0, 0, 0, 0, 504, 1136, 1395, 0, 0, 0,
+ 1736, 0, 2745, 952, 0, 0, 2650, 0, 0, 3808, 0, 0, 1148, 0, 0, 1821,
+ 622, 1626, 4464, 0, 0, 3930, 2404, 117, 0, 0, 10, 0, 2283, 1235, 4224,
+ 0, 0, 0, 0, 2917, 0, 0, 0, 2356, 0, 156, 1142, 0, 0, 0, 0, 1677, 0,
+ 3796, 3689, 602, 0, 0, 737, 0, 0, 1591, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0,
+ 25, 0, 0, 0, 0, 0, 3265, 0, 0, 0, 0, 621, 2329, 2059, 2850, 0, 0, 0, 0,
+ 40, 0, 0, 1095, 0, 743, 3541, 0, 0, 0, 3625, 4459, 1580, 4164, 1255, 0,
+ 0, 0, 1599, 0, 1036, 0, 0, 3438, 2656, 0, 0, 0, 1261, 224, 3600, 0,
+ 3943, 949, 2512, 0, 2796, 4233, 0, 1863, 0, 3283, 175, 0, 148, 0, 0,
+ 4320, 2004, 1503, 0, 0, 1438, 2823, 402, 1019, 0, 3343, 4216, 0, 0,
+ 2357, 0, 0, 0, 0, 1547, 0, 0, 3307, 0, 2347, 256, 0, 853, 0, 0, 0,
+ 1785, 0, 0, 0, 0, 1663, 0, 3095, 2419, 1711, 0, 4493, 0, 0, 1144, 0, 0,
+ 0, 1492, 370, 0, 0, 1007, 3167, 2813, 0, 562, 2721, 2083, 0, 2706, 0,
+ 0, 0, 0, 2937, 0, 0, 1876, 568, 0, 1859, 0, 0, 0, 0, 0, 3006, 3663,
+ 3429, 0, 1369, 0, 1599, 0, 0, 771, 1338, 0, 0, 0, 0, 0, 0, 2529, 0, 0,
+ 178, 2516, 0, 0, 2130, 2859, 1920, 0, 1992, 0, 4554, 0, 0, 0, 0, 0,
+ 2702, 4463, 688, 0, 0, 1500, 2711, 0, 0, 206, 3960, 0, 0, 0, 1051,
+ 4456, 1089, 0, 0, 712, 879, 621, 0, 0, 1353, 779, 0, 1075, 0, 1778, 0,
+ 1311, 3544, 0, 1373, 0, 0, 650, 0, 1475, 4297, 1100, 0, 343, 2758,
+ 1764, 0, 4163, 1327, 3569, 1363, 0, 2967, 0, 0, 137, 2277, 0, 0, 2411,
+ 0, 2685, 0, 2001, 948, 0, 159, 870, 1921, 1561, 0, 0, 2183, 0, 1004, 0,
+ 0, 0, 2363, 0, 0, 3473, 0, 0, 0, 2218, 0, 1021, 1919, 0, 0, 0, 0, 0,
+ 2324, 0, 1031, 0, 3739, 185, 0, 1932, 2109, 1363, 0, 0, 35, 2104, 1041,
+ 573, 0, 1518, 0, 0, 1515, 0, 0, 0, 2500, 1426, 1422, 0, 0, 2395, 706,
+ 0, 214, 889, 3801, 4108, 0, 0, 0, 2087, 0, 0, 2881, 1904, 2258, 0, 0,
+ 2408, 0, 454, 3224, 0, 0, 0, 0, 1337, 1509, 3638, 0, 0, 0, 3689, 0, 0,
+ 1774, 0, 0, 0, 0, 0, 1252, 1139, 0, 0, 0, 0, 75, 3651, 0, 1656, 0,
+ 1937, 0, 0, 4027, 0, 0, 0, 911, 1719, 0, 0, 3449, 0, 0, 0, 0, 4342,
+ 3593, 0, 0, 3476, 1690, 2585, 4484, 4479, 0, 0, 3932, 0, 3837, 3028,
+ 4047, 0, 705, 2616, 3782, 0, 0, 0, 108, 0, 0, 0, 1874, 1744, 0, 0,
+ 1147, 0, 0, 0, 166, 4277, 513, 0, 3623, 415, 0, 1574, 3753, 2473, 734,
+ 1129, 0, 0, 0, 0, 2241, 862, 0, 0, 0, 0, 2103, 1999, 2605, 821, 0, 0,
+ 0, 1653, 3756, 0, 0, 0, 2470, 0, 400, 2791, 717, 0, 154, 3490, 197,
+ 2675, 1405, 0, 2048, 0, 0, 1560, 4143, 4495, 0, 0, 0, 1299, 4554, 3847,
+ 0, 4308, 1560, 0, 3992, 0, 3209, 0, 452, 0, 2346, 0, 0, 225, 3030, 0,
+ 4370, 12, 239, 881, 0, 1561, 4251, 3310, 494, 0, 0, 232, 2509, 3198, 0,
+ 0, 0, 3390, 2956, 0, 1255, 0, 2148, 2692, 3865, 3864, 2586, 293, 0,
+ 4220, 4073, 0, 3423, 1262, 0, 1410, 2104, 0, 2074, 0, 0, 980, 0, 1684,
+ 1686, 0, 0, 429, 0, 358, 161, 0, 0, 0, 2029, 0, 2511, 817, 0, 3331, 0,
+ 1552, 0, 3380, 0, 0, 0, 3240, 0, 3499, 4041, 2450, 0, 0, 0, 0, 2214,
+ 787, 2906, 464, 1122, 3813, 0, 0, 2034, 0, 0, 0, 1037, 961, 0, 0, 3884,
+ 0, 0, 2764, 0, 0, 915, 0, 1417, 0, 6, 4134, 0, 2797, 1881, 259, 795, 0,
+ 15, 0, 2863, 0, 0, 0, 0, 0, 223, 720, 0, 1702, 0, 0, 0, 984, 1110, 0,
+ 547, 1906, 0, 0, 4286, 1875, 0, 0, 0, 1324, 0, 3589, 3911, 0, 0, 0, 0,
+ 2520, 844, 2801, 1149, 656, 0, 1837, 3441, 2127, 0, 0, 1325, 377, 1012,
+ 4280, 2404, 0, 1286, 0, 0, 0, 855, 0, 1793, 0, 4512, 2776, 2200, 2056,
+ 0, 2144, 1763, 0, 0, 549, 2475, 845, 1493, 0, 0, 306, 1398, 0, 0, 3775,
+ 0, 1451, 597, 2130, 0, 232, 2836, 957, 0, 619, 0, 2041, 0, 0, 295, 0,
+ 4361, 0, 2223, 0, 3727, 0, 0, 4294, 0, 33, 4397, 4511, 3626, 3329, 0,
+ 40, 0, 0, 0, 0, 478, 0, 0, 0, 2925, 0, 0, 3779, 1880, 0, 1556, 0, 1545,
+ 3249, 0, 0, 0, 1080, 0, 4112, 0, 3086, 46, 0, 0, 3165, 3414, 0, 0, 342,
+ 1885, 0, 0, 0, 0, 3071, 3404, 0, 0, 35, 0, 0, 0, 0, 857, 0, 627, 21, 0,
+ 0, 0, 0, 1021, 2099, 3483, 0, 0, 2693, 1014, 11, 0, 3352, 0, 3751,
+ 2476, 3014, 0, 1327, 974, 3502, 0, 611, 1838, 0, 4467, 2970, 1191, 474,
+ 0, 1366, 230, 1879, 3942, 0, 0, 0, 0, 1406, 0, 1304, 0, 0, 0, 277,
+ 3398, 0, 735, 165, 0, 0, 4185, 0, 3404, 0, 3821, 0, 0, 3450, 4161, 0,
+ 761, 0, 0, 0, 1807, 0, 0, 0, 0, 0, 0, 3962, 0, 0, 1833, 0, 1710, 0,
+ 1670, 2946, 1186, 56, 0, 533, 991, 246, 141, 0, 0, 0, 0, 687, 3830, 0,
+ 2495, 245, 0, 0, 2921, 2534, 706, 3729, 3941, 4335, 4295, 1671, 549,
+ 2015, 1777, 3057, 0, 1399, 1197, 2741, 4091, 0, 938, 0, 4322, 561, 0,
+ 527, 0, 481, 2496, 0, 0, 1771, 3444, 0, 2951, 0, 0, 0, 2244, 1013, 256,
+ 0, 1672, 0, 3115, 2720, 0, 1458, 0, 1476, 0, 2729, 0, 0, 1889, 2226,
+ 3945, 0, 1937, 0, 0, 0, 0, 4254, 1906, 4260, 2108, 0, 197, 4071, 2688,
+ 1691, 0, 0, 4467, 0, 1271, 0, 2029, 1625, 0, 0, 4259, 1222, 4139, 1497,
+ 0, 2919, 0, 86, 0, 0, 1685, 2585, 0, 1363, 0, 0, 0, 1548, 3807, 1891,
+ 4369, 774, 409, 4191, 0, 0, 3898, 1893, 4164, 765, 893, 1340, 0, 0, 0,
+ 4086, 2119, 173, 3518, 0, 0, 742, 0, 2059, 0, 0, 2955, 612, 0, 1660,
+ 4201, 2466, 485, 3476, 0, 945, 1441, 0, 3974, 0, 1551, 0, 664, 2978, 0,
+ 0, 1798, 2640, 0, 0, 0, 349, 0, 0, 3992, 0, 4168, 0, 0, 3294, 308,
+ 1332, 1191, 0, 0, 3821, 3969, 411, 1184, 0, 1417, 4191, 0, 4509, 881,
+ 593, 407, 1659, 0, 4237, 0, 1285, 2877, 2965, 3187, 0, 2725, 997, 530,
+ 2675, 0, 541, 4405, 1975, 0, 0, 2067, 801, 0, 0, 0, 0, 3746, 3215,
+ 3657, 0, 82, 0, 0, 0, 1624, 221, 0, 0, 2193, 483, 1281, 669, 2430, 0,
+ 1340, 4426, 0, 2419, 0, 2303, 0, 2691, 0, 305, 0, 0, 4276, 2246, 0,
+ 2533, 1139, 0, 626, 0, 9, 0, 2276, 2052, 178, 527, 2479, 2242, 762,
+ 212, 0, 860, 1718, 537, 0, 0, 1190, 4038, 1017, 0, 0, 0, 0, 1271, 0, 0,
+ 2261, 732, 4062, 2896, 4335, 1570, 3121, 0, 1791, 1798, 3642, 0, 125,
+ 3588, 2802, 0, 1162, 4276, 3536, 4314, 999, 0, 1518, 34, 0, 264, 4085,
+ 85, 4152, 2133, 1519, 1367, 0, 0, 3903, 420, 0, 2737, 490, 1704, 4389,
+ 0, 1631, 3809, 0, 1758, 0, 1162, 154, 980, 0, 0, 1188, 0, 0, 0, 1634,
+ 2486, 0, 0, 2972, 3280, 0, 0, 1909, 1386, 915, 2446, 0, 0, 0, 2371, 0,
+ 4499, 1915, 656, 2964, 4228, 0, 0, 0, 0, 910, 0, 0, 0, 1505, 3300, 0,
+ 2754, 2586, 2505, 3028, 135, 1124, 2602, 34, 2658, 1047, 885, 0, 0, 0,
+ 2117, 221, 2841, 153, 2240, 0, 3880, 0, 1101, 4095, 3147, 1757, 692,
+ 2280, 3049, 0, 2319, 1519, 0, 0, 0, 0, 4291, 4464, 164, 0, 1108, 4291,
+ 2707, 3843, 0, 0, 1160, 4318, 2473, 0, 4391, 0, 0, 0, 2743, 2146, 1050,
+ 0, 0, 0, 58, 191, 1754, 1704, 0, 0, 2581, 1920, 2443, 0, 3264, 0, 1379,
+ 0, 3933, 1049, 4127, 0, 2030, 0, 1363, 1411, 720, 945, 0, 367, 1312, 0,
+ 0, 0, 0, 1257, 2000, 0, 0, 260, 2860, 3118, 0, 85, 2600, 1842, 3727,
+ 554, 0, 0, 3763, 111, 0, 2993, 2128, 4103, 620, 0, 4018, 3867, 967,
+ 3281, 808, 482, 0, 2321, 0, 0, 943, 574, 256, 4177, 574, 0, 4048, 212,
+ 3917, 0, 4026, 0, 4161, 3004, 0, 3974, 0, 668, 426, 1194, 0, 0, 0,
+ 2099, 3538, 0, 1951, 0, 0, 0, 2892, 0, 0, 451, 0, 3417, 2937, 0, 0,
+ 2086, 0, 406, 0, 0, 0, 0, 4572, 1399, 3622, 894, 824, 195, 2309, 0, 0,
+ 2169, 0, 1898, 2616, 0, 626, 1848, 7, 0, 3290, 2404, 0, 3593, 0, 4205,
+ 1884, 0, 0, 3522, 1862, 2700, 0, 946, 2876, 1349, 0, 4208, 0, 0, 0,
+ 670, 0, 0, 0, 2742, 145, 776, 0, 63, 850, 781, 0, 0, 3548, 1898, 1220,
+ 490, 0, 875, 0, 0, 0, 520, 877, 1172, 1527, 0, 897, 0, 2415, 1127, 638,
+ 4329, 0, 523, 4283, 1165, 0, 15, 2321, 978, 0, 1307, 0, 816, 1025,
+ 3393, 0, 240, 145, 0, 3635, 3382, 2315, 3567, 3047, 0, 1752, 49, 4512,
+ 4482, 3417, 0, 0, 4282, 463, 4462, 0, 128, 0, 23, 4462, 836, 0, 1029,
+ 0, 2019, 0, 0, 2658, 0, 4525, 0, 3862, 0, 1577, 0, 0, 2372, 4416, 2195,
+ 0, 516, 0, 0, 551, 849, 1716, 2507, 522, 550, 0, 1543, 1983, 4223,
+ 3500, 0, 0, 1262, 502, 1512, 0, 0, 898, 292, 1236, 0, 0, 1004, 1963,
+ 1952, 0, 0, 287, 2341, 3718, 1251, 4119, 1321, 3407, 0, 0, 0, 0, 2423,
+ 251, 573, 3729, 4519, 1526, 4165, 2557, 0, 788, 0, 1448, 0, 0, 618, 0,
+ 850, 0, 161, 1350, 644, 853, 1374, 0, 1767, 1315, 1539, 596, 753, 0,
+ 467, 0, 4512, 970, 1730, 0, 0, 527, 3617, 2164, 2371, 0, 2418, 0, 0,
+ 2504, 405, 0, 3599, 1925, 0, 1064, 0, 370, 0, 4526, 325, 1972, 0, 3356,
+ 1134, 3930, 1318, 421, 2514, 2476, 638, 3571, 0, 0, 2142, 3054, 0,
+ 2064, 2541, 1652, 3622, 0, 823, 1941, 878, 1673, 0, 3435, 0, 0, 0, 661,
+ 3064, 0, 627, 0, 0, 0, 2359, 4291, 2531, 0, 4000, 0, 296, 0, 3074, 225,
+ 0, 0, 2491, 99, 0, 0, 0, 0, 0, 0, 695, 1499, 0, 0, 2403, 3941, 558, 0,
+ 0, 2265, 1068, 0, 845, 0, 0, 2485, 1864, 0, 1349, 598, 1415, 0, 544, 0,
+ 3472, 0, 392, 113, 3942, 3088, 1266, 1235, 0, 540, 169, 436, 4186,
+ 1878, 4206, 4094, 0, 662, 0, 2003, 2545, 3270, 708, 0, 0, 4359, 59, 0,
+ 2044, 1527, 4373, 0, 528, 736, 0, 0, 0, 1621, 1206, 4202, 0, 0, 2613,
+ 4059, 0, 844, 0, 2071, 0, 1126, 1719, 448, 3767, 2876, 1428, 925, 0, 0,
+ 2965, 1816, 64, 0, 0, 3750, 0, 0, 1995, 0, 0, 1647, 0, 0, 0, 755, 0, 0,
+ 0, 0, 0, 3336, 3374, 123, 0, 2172, 0, 0, 0, 2338, 519, 2630, 3573, 0,
+ 0, 1269, 2325, 0, 1935, 485, 0, 0, 2310, 2413, 4405, 2397, 1122, 1824,
+ 2055, 4062, 1449, 671, 412, 446, 4007, 286, 3846, 1387, 1978, 2443,
+ 534, 0, 1061, 2005, 2269, 597, 2272, 0, 0, 3738, 0, 0, 1562, 741, 0, 0,
+ 0, 0, 2349, 0, 2030, 0, 0, 0, 0, 0, 991, 0, 2416, 0, 2178, 1493, 0,
+ 2163, 0, 17, 1651, 1348, 4337, 2029, 0, 117, 1605, 0, 3444, 1965, 0,
+ 1776, 458, 397, 3063, 5, 4058, 535, 2807, 977, 314, 3613, 105, 3191,
+ 153, 4397, 2752, 1412, 4069, 0, 0, 0, 0, 1089, 0, 1968, 0, 768, 2132,
+ 0, 2582, 0, 0, 3753, 3512, 0, 909, 3256, 3999, 2436, 710, 0, 700, 248,
+ 4078, 4347, 1222, 3669, 0, 0, 882, 0, 0, 0, 0, 2293, 362, 81, 1667,
+ 3662, 2259, 0, 433, 4306, 3200, 0, 2445, 786, 3554, 0, 0, 0, 704, 0,
+ 2695, 3256, 3676, 881, 2107, 1637, 0, 778, 0, 2232, 1858, 1616, 2872,
+ 1467, 1545, 1613, 2512, 1587, 0, 1816, 4354, 1844, 0, 0, 3707, 3982,
+ 3115, 2408, 1957, 0, 0, 4180, 177, 0, 759, 2615, 0, 2657, 208, 286, 0,
+ 0, 0, 3075, 174, 1690, 2099, 0, 1345, 2018, 19, 1714, 0, 4440, 0, 3433,
+ 0, 2951, 3090, 0, 1572, 1834, 3590, 0, 0, 443, 0, 3912, 0, 3850, 0,
+ 497, 0, 2180, 2326, 1839, 0, 4155, 2871, 767, 0, 1249, 1687, 32, 4323,
+ 4213, 2276, 1015, 0, 0, 2246, 327, 3992, 580, 1752, 3376, 2986, 2046,
+ 2680, 0, 3862, 1306, 1087, 0, 50, 0, 0, 1553, 307, 0, 2332, 2418, 2474,
+ 0, 1160, 1935, 1511, 0, 2082, 1193, 0, 0, 4054, 0, 367, 0, 1201, 1052,
+ 0, 4550, 0, 1202, 1630, 0, 3705, 0, 0, 1923, 1124, 0, 508, 0, 2268, 0,
+ 1205, 977, 2839, 0, 1054, 577, 3807, 1596, 0, 0, 1252, 0, 2653, 805,
+ 2845, 942, 2231, 4007, 0, 2601, 277, 0, 1288, 1431, 0, 236, 3253, 0,
+ 544, 1633, 928, 1446, 3652, 2, 467, 555, 1602, 0, 1105, 0, 10, 163, 0,
+ 0, 1877, 0, 0, 0, 162, 1367, 4327, 0, 2915, 2460, 0, 0, 3361, 719,
+ 1406, 201, 0, 467, 0, 0, 4303, 3609, 1599, 330, 108, 316, 0, 0, 0, 0,
+ 2013, 18, 120, 1763, 3139, 0, 3485, 2025, 855, 0, 0, 572, 2308, 2496,
+ 4410, 1711, 0, 3226, 0, 543, 0, 1621, 76, 3210, 3215, 17, 384, 0, 3294,
+ 4505, 0, 0, 0, 1675, 1668, 1035, 0, 119, 0, 2789, 0, 3570, 4549, 98,
+ 204, 2275, 0, 0, 0, 1949, 0, 0, 717, 0, 0, 0, 0, 113, 202, 0, 1557, 0,
+ 1485, 840, 1002, 0, 0, 4427, 626, 4249, 0, 0, 2078, 165, 0, 929, 705,
+ 1441, 0, 0, 1210, 972, 2190, 0, 0, 0, 0, 1931, 869, 0, 3521, 1203, 346,
+ 0, 0, 0, 0, 0, 318, 1320, 667, 2715, 699, 1811, 0, 129, 813, 133, 1170,
+ 0, 2082, 97, 0, 3526, 326, 0, 3954, 0, 4154, 0, 4309, 2381, 3528, 0,
+ 30, 871, 4124, 4443, 2937, 0, 1725, 0, 0, 0, 2310, 455, 1619, 0, 1311,
+ 0, 1380, 0, 0, 1836, 0, 0, 1089, 2913, 4345, 246, 0, 26, 961, 0, 0,
+ 4157, 784, 0, 0, 2551, 3071, 485, 939, 2498, 0, 0, 0, 780, 4229, 1715,
+ 0, 0, 0, 0, 70, 347, 3277, 639, 0, 0, 1504, 583, 0, 3743, 1826, 0, 45,
+ 0, 0, 1008, 2163, 334, 1442, 0, 3030, 2537, 2051, 2729, 233, 3286, 0,
+ 2576, 937, 950, 0, 2733, 0, 330, 4489, 2811, 0, 0, 0, 4544, 744, 2276,
+ 0, 0, 1033, 203, 1114, 4197, 0, 0, 0, 0, 0, 2414, 295, 2339, 320, 1012,
+ 0, 0, 3831, 2284, 0, 0, 1032, 134, 1726, 0, 0, 0, 3449, 0, 0, 3858,
+ 191, 0, 1722, 790, 0, 2422, 0, 0, 1274, 0, 2270, 0, 0, 1010, 0, 0, 0,
+ 1282, 1284, 0, 449, 0, 3027, 193, 0, 2027, 0, 1373, 0, 980, 3570, 1766,
+ 1599, 4117, 167, 2021, 0, 2297, 471, 4085, 3018, 0, 335, 2835, 0, 2171,
+ 0, 1360, 0, 1099, 3721, 1043, 0, 0, 0, 475, 3827, 16, 0, 672, 3315, 0,
+ 4339, 0, 4427, 2223, 0, 0, 337, 0, 501, 229, 355, 85, 2613, 1226, 2295,
+ 2336, 105, 0, 4538, 1538, 0, 0, 0, 2782, 3838, 0, 648, 0, 3778, 0, 0,
+ 0, 0, 0, 0, 1336, 0, 0, 0, 2497, 743, 2249, 4081, 1023, 1864, 0, 3566,
+ 2420, 1134, 1465, 1353, 1077, 149, 1704, 1778, 0, 0, 3553, 2079, 3287,
+ 0, 0, 0, 1268, 599, 0, 0, 1112, 3816, 2411, 2535, 508, 0, 1829, 3311,
+ 4312, 660, 2714, 0, 1657, 1994, 82, 3885, 1442, 0, 3432, 4337, 2665,
+ 2778, 1687, 2522, 0, 1835, 1945, 1097, 682, 3420, 0, 0, 1450, 2138,
+ 1006, 1376, 1456, 226, 3999, 982, 1417, 3602, 1964, 1894, 1525, 2505,
+ 0, 4288, 0, 0, 2350, 441, 0, 0, 4083, 925, 3113, 310, 2991, 189, 1721,
+ 544, 4105, 4546, 3498, 3022, 978, 0, 2007, 0, 1107, 0, 2286, 0, 1037,
+ 0, 0, 0, 285, 0, 1559, 0, 0, 1728, 0, 0, 0, 284, 624, 263, 303, 1181,
+ 2548, 1546, 2138, 0, 3610, 4024, 720, 2156, 0, 0, 446, 0, 0, 0, 0, 747,
+ 0, 3594, 461, 3128, 505, 0, 67, 0, 2413, 0, 2775, 0, 0, 1780, 802, 0,
+ 0, 0, 401, 1834, 2278, 4251, 0, 0, 0, 413, 0, 3070, 1726, 0, 0, 475, 0,
+ 1857, 685, 2597, 981, 0, 0, 1655, 1180, 2228, 1253, 132, 63, 4266,
+ 3166, 78, 0, 2635, 1295, 344, 3971, 743, 1580, 320, 4562, 0, 4412,
+ 1166, 4460, 2660, 2264, 2579, 2733, 0, 2113, 3809, 2064, 1495, 0, 618,
+ 886, 0, 0, 0, 4410, 1989, 0, 3907, 1781, 0, 2385, 92, 330, 1729, 3966,
+ 1631, 4133, 2905, 2557, 3232, 0, 0, 0, 0, 0, 0, 291, 220, 3039, 465, 0,
+ 4496, 0, 315, 3140, 0, 781, 0, 0, 0, 0, 0, 1419, 325, 4515, 4243, 1209,
+ 2121, 0, 0, 2217, 2871, 417, 0, 0, 2310, 0, 2700, 4347, 1805, 1330,
+ 3905, 760, 3564, 0, 2297, 2413, 1603, 1234, 3139, 0, 3836, 1431, 833,
+ 1461, 146, 2173, 1111, 0, 1226, 1383, 0, 683, 2289, 783, 0, 0, 0, 0,
+ 2024, 2362, 0, 2822, 0, 2184, 3117, 2289, 2884, 3942, 0, 0, 1806, 2073,
+ 1039, 1332, 4148, 3602, 1500, 703, 0, 0, 0, 4304, 4271, 3563, 0, 214,
+ 27, 1267, 1882, 3233, 3015, 0, 0, 0, 0, 2139, 1571, 0, 0, 4364, 3885,
+ 3251, 0, 1662, 481, 9, 595, 0, 0, 1805, 0, 1783, 1270, 4365, 1375, 0,
+ 0, 0, 3269, 1077, 2763, 324, 0, 4353, 2358, 2675, 0, 1843, 0, 1649,
+ 333, 0, 0, 3961, 4484, 0, 0, 1368, 0, 3211, 4118, 4373, 3908, 1991, 0,
+ 2189, 1381, 0, 2168, 1463, 1308, 466, 145, 3355, 0, 0, 298, 298, 1183,
+ 0, 1145, 2060, 1516, 199, 0, 3088, 3607, 4408, 2304, 0, 2190, 2747, 0,
+ 474, 0, 0, 3078, 4275, 820, 876, 1004, 2364, 0, 0, 3908, 2394, 1474,
+ 2723, 1814, 2086, 294, 1788, 4408, 0, 2955, 3862, 912, 3296, 2130, 116,
+ 1388, 2762, 2870, 0, 165, 0, 1852, 2287, 0, 0, 489, 2160, 441, 0, 2625,
+ 349, 2280, 3030, 58, 0, 0, 4201, 0, 1229, 1760, 0, 4234, 791, 1053,
+ 1349, 1951, 0, 1694, 1742, 4365, 3099, 2439, 4373, 0, 413, 0, 0, 0, 0,
+ 3261, 1612, 0, 0, 3708, 1350, 252, 2326, 3770, 2427, 0, 1973, 3648,
+ 2213, 253, 2017, 1533, 2014, 0, 0, 0, 1254, 2047, 0, 285, 1208, 2385,
+ 0, 3284, 1586, 1396, 0, 0, 0, 1567, 1056, 0, 2370, 2208, 2196, 930,
+ 1787, 0, 0, 0, 101, 0, 4554, 589, 1093, 3184, 0, 1063, 2620, 0, 323,
+ 3160, 0, 1985, 2649, 0, 2950, 1670, 1932, 303, 630, 0, 1604, 0, 384,
+ 1160, 4004, 3476, 4046, 1701, 0, 1182, 0, 3666, 1562, 1622, 1384, 0, 0,
+ 0, 3622, 1340, 0, 3506, 2618, 2792, 1141, 1702, 4495, 2269, 0, 4344,
+ 2047, 0, 2506, 0, 604, 0, 1979, 1455, 148, 2255, 0, 1069, 0, 4532, 0,
+ 0, 3671, 265, 87, 0, 0, 4398, 4347, 1070, 970, 0, 1960, 3092, 943, 0,
+ 1007, 0, 2528, 2173, 313, 347, 1560, 946, 4204, 2101, 0, 991, 0, 2102,
+ 2053, 0, 680, 1979, 0, 1701, 0, 3621, 1556, 0, 331, 2707, 2448, 1240,
+ 4042, 1616, 0, 3662, 0, 0, 0, 53, 4001, 0, 3069, 1309, 1446, 304, 357,
+ 0, 3309, 2111, 3132, 264, 0, 103, 1400, 3319, 809, 2150, 2224, 0, 1528,
+ 1147, 1528, 2667, 0, 0, 415, 0, 175, 3613, 1402, 1905, 0, 803, 1744,
+ 2833, 804, 0, 0, 0, 0, 4466, 585, 2964, 1606, 3440, 297, 4247, 1275, 0,
+ 0, 0, 1508, 0, 2835, 3573, 0, 400, 0, 4481, 3301, 734, 1036, 823, 1398,
+ 706, 0, 0, 3880, 2284, 0, 0, 619, 0, 1317, 0, 0, 2219, 0, 4480, 628,
+ 983, 4502, 3011, 1487, 44, 0, 0, 30, 2527, 2246, 804, 0, 2016, 2001,
+ 1657, 0, 0, 1330, 739, 0, 0, 0, 0, 3978, 219, 974, 339, 3993, 2, 1118,
+ 1395, 2451, 3610, 1189, 2341, 53, 110, 2132, 4538, 4392, 393, 53, 2176,
+ 92, 2282, 0, 584, 885, 1401, 2282, 79, 1644, 0, 4316, 0, 4033, 0, 4235,
+ 3232, 2752, 0, 0, 2010, 2446, 0, 0, 4547, 0, 2203, 247, 4125, 0, 0,
+ 1261, 216, 0, 4138, 0, 0, 0, 0, 1637, 0, 0, 200, 750, 262, 0, 4510, 0,
+ 1506, 2069, 4241, 1589, 661, 0, 277, 3425, 1294, 14, 0, 1747, 2220,
+ 2297, 0, 0, 238, 0, 547, 476, 2223, 4221, 4355, 1385, 1724, 0, 0, 2139,
+ 1990, 902, 0, 1183, 18, 0, 1607, 0, 2513, 1427, 395, 975, 0, 3106,
+ 1756, 2038, 561, 0, 1217, 925, 158, 989, 4043, 0, 0, 0, 2342, 0, 2070,
+ 297, 457, 0, 3756, 451, 0, 4085, 0, 4111, 2184, 0, 0, 0, 3984, 373, 0,
+ 3175, 1178, 4351, 1137, 2453, 1709, 1594, 4546, 3060, 0, 1834, 3303, 0,
+ 1327, 1177, 553, 404, 4148, 1271, 0, 603, 0, 0, 1541, 0, 2530, 0, 0,
+ 2593, 1055, 0, 2346, 0, 424, 2332, 0, 1654, 0, 2249, 466, 1189, 700,
+ 4013, 852, 126, 1203, 221, 852, 667, 350, 0, 758, 4008, 0, 4389, 854,
+ 2392, 0, 2277, 782, 1516, 0, 2643, 766, 1171, 137, 3759, 733, 981, 0,
+ 0, 1208, 1949, 2894, 0, 1871, 4499, 0, 1179, 0, 263, 414, 3460, 3873,
+ 131, 1836, 528, 0, 0, 2185, 0, 2149, 0, 0, 1688, 1626, 4532, 0, 4415,
+ 0, 4262, 0, 0, 1962, 0, 0, 453, 2195, 3045, 648, 3824, 1109, 2294,
+ 3776, 0, 1433, 3623, 761, 2010, 0, 2049, 496, 0, 2094, 4421, 0, 420, 0,
+ 0, 90, 0, 0, 485, 0, 0, 2499, 1177, 0, 0, 4511, 2369, 1523, 0, 0, 3755,
+ 2071
};
static size_t
@@ -2868,7 +2869,7 @@ keysym_name_hash_f(const char *key, const char *T)
{
size_t sum = 0;
for (size_t i = 0; key[i] != '\0'; i++)
- sum += T[i % 27] * key[i];
+ sum += T[i % 32] * key[i];
return sum % 4573;
}
@@ -2876,8 +2877,8 @@ static size_t
keysym_name_perfect_hash(const char *key)
{
return (
- keysym_name_G[keysym_name_hash_f(key, "SkOf3HuNA56PIk6hejYLO1rtnca")] +
- keysym_name_G[keysym_name_hash_f(key, "vRGsBGmF6OJG3WFF6jLu5nTcL4c")]
+ keysym_name_G[keysym_name_hash_f(key, "xQ6s5AweQcmhYSjcMnXcbUZV5VlaPl27")] +
+ keysym_name_G[keysym_name_hash_f(key, "rCH1UKEZTzn9hlnUvX76Sw7VmrLuST7A")]
) % 4573;
}