neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

version.c (96032B)


      1 /// @file version.c
      2 ///
      3 /// Nvim was forked from Vim 7.4.160.
      4 /// Vim originated from Stevie version 3.6 (Fish disk 217) by GRWalter (Fred).
      5 
      6 #include <assert.h>
      7 #include <limits.h>
      8 #include <stdbool.h>
      9 #include <stdio.h>
     10 #include <stdlib.h>
     11 #include <string.h>
     12 
     13 #include "auto/versiondef.h"  // version info generated by the build system
     14 #include "auto/versiondef_git.h"
     15 #include "nvim/api/private/helpers.h"
     16 #include "nvim/ascii_defs.h"
     17 #include "nvim/buffer.h"
     18 #include "nvim/buffer_defs.h"
     19 #include "nvim/charset.h"
     20 #include "nvim/drawscreen.h"
     21 #include "nvim/ex_cmds_defs.h"
     22 #include "nvim/getchar.h"
     23 #include "nvim/gettext_defs.h"
     24 #include "nvim/globals.h"
     25 #include "nvim/grid.h"
     26 #include "nvim/grid_defs.h"
     27 #include "nvim/highlight.h"
     28 #include "nvim/highlight_defs.h"
     29 #include "nvim/lua/executor.h"
     30 #include "nvim/mbyte.h"
     31 #include "nvim/memory.h"
     32 #include "nvim/message.h"
     33 #include "nvim/option_vars.h"
     34 #include "nvim/os/os.h"
     35 #include "nvim/strings.h"
     36 #include "nvim/ui.h"
     37 #include "nvim/ui_defs.h"
     38 #include "nvim/version.h"
     39 #include "nvim/window.h"
     40 
     41 // for ":version", ":intro", and "nvim --version"
     42 #ifndef NVIM_VERSION_MEDIUM
     43 # define NVIM_VERSION_MEDIUM "v" STR(NVIM_VERSION_MAJOR) \
     44  "." STR(NVIM_VERSION_MINOR) "." STR(NVIM_VERSION_PATCH) \
     45  NVIM_VERSION_PRERELEASE
     46 #endif
     47 #define NVIM_VERSION_LONG "NVIM " NVIM_VERSION_MEDIUM  // NOLINT(bugprone-suspicious-missing-comma)
     48 
     49 char *Versions[] = { "8.1", "8.2", "9.0", "9.1", "9.2" };
     50 char *longVersion = NVIM_VERSION_LONG;
     51 char *version_buildtype = "Build type: " NVIM_VERSION_BUILD_TYPE;
     52 // Reproducible builds: omit compile info in Release builds. #15424
     53 #ifndef NDEBUG
     54 char *version_cflags = "Compilation: " NVIM_VERSION_CFLAGS;
     55 #endif
     56 
     57 #include "version.c.generated.h"
     58 
     59 // clang-format off
     60 static const int vim_versions[] = { 801, 802, 900, 901, 902 };
     61 
     62 static const int num_patches[] = { 2331, 3803, 1574, 1609, 31 };
     63 
     64 static const int *included_patchsets[] = {
     65  (const int[]) {  // 801
     66    2424, 2423, 2422, 2421, 2420, 2419,
     67    // 2418
     68    2417, 2416,
     69    // 2415
     70    2414, 2413, 2412, 2411, 2410, 2409, 2408, 2407, 2406, 2405, 2404, 2403, 2402, 2401, 2400,
     71    // 2399
     72    2398, 2397, 2396, 2395, 2394, 2393, 2392, 2391, 2390, 2389, 2388, 2387,
     73    // 2386
     74    2385, 2384, 2383, 2382,
     75    // 2381
     76    2380, 2379, 2378, 2377, 2376, 2375, 2374, 2373, 2372, 2371, 2370, 2369, 2368, 2367, 2366, 2365,
     77    2364, 2363,
     78    // 2362
     79    2361, 2360, 2359, 2358, 2357, 2356, 2355, 2354, 2353, 2352,
     80    // 2351
     81    2350, 2349, 2348, 2347, 2346, 2345, 2344, 2343, 2342, 2341, 2340, 2339, 2338, 2337, 2336, 2335,
     82    2334, 2333, 2332, 2331, 2330, 2329, 2328, 2327, 2326, 2325,
     83    // 2324
     84    2323, 2322, 2321, 2320, 2319, 2318, 2317, 2316, 2315, 2314, 2313, 2312, 2311, 2310, 2309, 2308,
     85    2307, 2306, 2305, 2304, 2303, 2302, 2301, 2300, 2299, 2298, 2297, 2296, 2295,
     86    // 2294
     87    2293,
     88    // 2292
     89    2291, 2290, 2289, 2288, 2287, 2286, 2285, 2284, 2283, 2282, 2281, 2280,
     90    // 2279
     91    2278, 2277, 2276, 2275, 2274,
     92    // 2273
     93    2272, 2271, 2270, 2269, 2268, 2267, 2266, 2265, 2264, 2263, 2262, 2261, 2260, 2259, 2258, 2257,
     94    2256, 2255, 2254, 2253, 2252,
     95    // 2250-2251
     96    2249, 2248, 2247, 2246, 2245, 2244, 2243, 2242,
     97    // 2241
     98    2240, 2239, 2238, 2237, 2236, 2235, 2234, 2233,
     99    // 2232
    100    2231,
    101    // 2230
    102    2229, 2228, 2227, 2226, 2225, 2224, 2223, 2222, 2221, 2220,
    103    // 2219
    104    2218, 2217, 2216, 2215, 2214, 2213, 2212, 2211, 2210, 2209,
    105    // 2208
    106    2207, 2206, 2205, 2204, 2203, 2202, 2201, 2200, 2199, 2198, 2197, 2196,
    107    // 2195
    108    2194,
    109    // 2192-2193
    110    2191, 2190,
    111    // 2189
    112    2188, 2187, 2186, 2185, 2184, 2183, 2182,
    113    // 2181
    114    2180, 2179, 2178, 2177,
    115    // 2176
    116    2175, 2174, 2173, 2172, 2171, 2170, 2169, 2168, 2167, 2166, 2165, 2164, 2163, 2162, 2161, 2160,
    117    2159,
    118    // 2158
    119    2157,
    120    // 2155-2156
    121    2154,
    122    // 2153
    123    2152, 2151, 2150, 2149, 2148, 2147, 2146, 2145, 2144, 2143,
    124    // 2142
    125    2141, 2140,
    126    // 2139
    127    2138, 2137, 2136, 2135, 2134, 2133, 2132, 2131, 2130, 2129, 2128, 2127, 2126, 2125, 2124, 2123,
    128    2122,
    129    // 2121
    130    2120, 2119, 2118, 2117, 2116, 2115, 2114, 2113, 2112, 2111, 2110, 2109, 2108, 2107, 2106, 2105,
    131    2104, 2103, 2102, 2101, 2100, 2099, 2098, 2097, 2096, 2095, 2094,
    132    // 2092-2093
    133    2091, 2090, 2089, 2088, 2087, 2086, 2085, 2084, 2083, 2082, 2081, 2080, 2079, 2078, 2077,
    134    // 2076
    135    2075, 2074, 2073, 2072, 2071, 2070, 2069, 2068, 2067, 2066, 2065, 2064, 2063, 2062, 2061, 2060,
    136    2059, 2058, 2057, 2056, 2055, 2054, 2053, 2052, 2051, 2050, 2049, 2048, 2047, 2046, 2045, 2044,
    137    2043, 2042, 2041,
    138    // 2039-2040
    139    2038, 2037, 2036, 2035, 2034, 2033, 2032, 2031, 2030, 2029, 2028, 2027, 2026, 2025, 2024, 2023,
    140    // 2022
    141    2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006,
    142    2005, 2004, 2003, 2002, 2001, 2000,
    143    // 1999
    144    1998, 1997, 1996, 1995, 1994, 1993, 1992, 1991, 1990, 1989, 1988, 1987, 1986,
    145    // 1985
    146    1984, 1983, 1982, 1981, 1980, 1979, 1978, 1977, 1976, 1975, 1974, 1973, 1972, 1971, 1970,
    147    // 1969
    148    1968, 1967, 1966, 1965, 1964, 1963, 1962, 1961, 1960, 1959, 1958, 1957, 1956, 1955, 1954, 1953,
    149    1952, 1951, 1950, 1949, 1948, 1947, 1946, 1945,
    150    // 1944
    151    1943, 1942, 1941, 1940, 1939, 1938, 1937, 1936, 1935, 1934, 1933, 1932, 1931, 1930, 1929,
    152    // 1928
    153    1927, 1926, 1925, 1924, 1923, 1922, 1921, 1920, 1919, 1918, 1917, 1916, 1915, 1914, 1913, 1912,
    154    1911, 1910, 1909,
    155    // 1908
    156    1907,
    157    // 1904-1906
    158    1903, 1902, 1901, 1900, 1899, 1898, 1897, 1896, 1895, 1894, 1893,
    159    // 1892
    160    1891, 1890, 1889, 1888, 1887, 1886, 1885,
    161    // 1884
    162    1883,
    163    // 1882
    164    1881,
    165    // 1880
    166    1879, 1878, 1877, 1876, 1875, 1874, 1873, 1872, 1871, 1870, 1869, 1868, 1867, 1866, 1865, 1864,
    167    1863, 1862, 1861, 1860, 1859, 1858, 1857, 1856, 1855, 1854, 1853, 1852,
    168    // 1851
    169    1850, 1849, 1848, 1847, 1846, 1845, 1844, 1843, 1842, 1841, 1840, 1839, 1838, 1837, 1836, 1835,
    170    1834, 1833, 1832, 1831, 1830, 1829, 1828, 1827, 1826, 1825, 1824, 1823, 1822, 1821, 1820,
    171    // 1819
    172    1818, 1817, 1816, 1815, 1814,
    173    // 1813
    174    1812, 1811, 1810, 1809, 1808, 1807, 1806, 1805, 1804, 1803, 1802, 1801, 1800,
    175    // 1799
    176    1798, 1797, 1796, 1795, 1794, 1793, 1792, 1791, 1790, 1789, 1788,
    177    // 1787
    178    1786, 1785,
    179    // 1784
    180    1783, 1782, 1781, 1780, 1779, 1778, 1777, 1776, 1775, 1774, 1773, 1772, 1771,
    181    // 1770
    182    1769, 1768, 1767, 1766, 1765, 1764, 1763, 1762, 1761, 1760, 1759, 1758, 1757, 1756, 1755, 1754,
    183    1753, 1752, 1751, 1750, 1749, 1748, 1747, 1746, 1745, 1744, 1743, 1742, 1741, 1740, 1739, 1738,
    184    1737, 1736, 1735, 1734, 1733, 1732, 1731, 1730, 1729, 1728, 1727, 1726, 1725, 1724, 1723, 1722,
    185    1721, 1720, 1719,
    186    // 1718
    187    1717, 1716, 1715,
    188    // 1713-1714
    189    1712, 1711, 1710, 1709, 1708, 1707, 1706, 1705, 1704, 1703, 1702, 1701, 1700, 1699, 1698, 1697,
    190    1696, 1695, 1694, 1693, 1692, 1691,
    191    // 1690
    192    1689, 1688, 1687, 1686, 1685, 1684, 1683, 1682, 1681, 1680, 1679, 1678, 1677, 1676, 1675, 1674,
    193    // 1673
    194    1672, 1671, 1670, 1669, 1668, 1667, 1666, 1665, 1664, 1663, 1662, 1661, 1660,
    195    // 1659
    196    1658, 1657, 1656, 1655, 1654, 1653, 1652, 1651, 1650, 1649, 1648, 1647, 1646, 1645, 1644, 1643,
    197    1642, 1641, 1640, 1639, 1638, 1637, 1636, 1635, 1634, 1633, 1632, 1631, 1630, 1629,
    198    // 1628
    199    1627,
    200    // 1626
    201    1625, 1624, 1623, 1622, 1621, 1620, 1619, 1618, 1617, 1616, 1615, 1614, 1613,
    202    // 1612
    203    1611, 1610,
    204    // 1609
    205    1608,
    206    // 1607
    207    1606, 1605, 1604, 1603, 1602, 1601, 1600, 1599, 1598,
    208    // 1597
    209    1596, 1595, 1594, 1593, 1592, 1591, 1590,
    210    // 1589
    211    1588, 1587, 1586, 1585, 1584, 1583, 1582, 1581,
    212    // 1580
    213    1579, 1578,
    214    // 1577
    215    1576, 1575,
    216    // 1574
    217    1573, 1572, 1571, 1570, 1569, 1568, 1567, 1566, 1565, 1564, 1563, 1562,
    218    // 1561
    219    1560,
    220    // 1558-1559
    221    1557, 1556, 1555, 1554,
    222    // 1553
    223    1552, 1551, 1550, 1549,
    224    // 1548
    225    1547, 1546, 1545, 1544, 1543, 1542, 1541, 1540, 1539,
    226    // 1537-1538
    227    1536, 1535, 1534, 1533, 1532, 1531, 1530, 1529, 1528, 1527, 1526,
    228    // 1525
    229    1524,
    230    // 1523
    231    1522, 1521, 1520, 1519, 1518, 1517, 1516, 1515, 1514, 1513, 1512, 1511, 1510, 1509, 1508, 1507,
    232    1506, 1505, 1504, 1503, 1502, 1501, 1500, 1499, 1498, 1497, 1496, 1495, 1494, 1493, 1492, 1491,
    233    1490, 1489, 1488, 1487, 1486, 1485, 1484, 1483, 1482, 1481, 1480, 1479, 1478, 1477, 1476, 1475,
    234    1474,
    235    // 1473
    236    1472, 1471, 1470, 1469, 1468, 1467, 1466, 1465, 1464, 1463, 1462, 1461, 1460, 1459, 1458, 1457,
    237    1456, 1455, 1454, 1453, 1452, 1451, 1450, 1449, 1448, 1447, 1446, 1445, 1444, 1443, 1442, 1441,
    238    1440, 1439, 1438, 1437, 1436, 1435, 1434, 1433, 1432, 1431, 1430, 1429, 1428, 1427, 1426, 1425,
    239    1424, 1423, 1422, 1421, 1420, 1419, 1418,
    240    // 1417
    241    1416, 1415, 1414, 1413, 1412, 1411, 1410, 1409, 1408, 1407, 1406, 1405, 1404, 1403, 1402, 1401,
    242    1400, 1399, 1398, 1397, 1396, 1395, 1394, 1393, 1392, 1391, 1390, 1389, 1388, 1387, 1386, 1385,
    243    1384, 1383, 1382, 1381, 1380, 1379, 1378, 1377, 1376, 1375, 1374, 1373, 1372, 1371, 1370, 1369,
    244    1368, 1367, 1366, 1365, 1364, 1363, 1362, 1361, 1360, 1359, 1358, 1357, 1356, 1355, 1354, 1353,
    245    1352, 1351, 1350, 1349, 1348, 1347, 1346, 1345, 1344, 1343, 1342, 1341, 1340, 1339, 1338, 1337,
    246    1336, 1335, 1334, 1333, 1332, 1331, 1330, 1329, 1328, 1327, 1326, 1325, 1324, 1323, 1322, 1321,
    247    1320, 1319, 1318, 1317, 1316, 1315, 1314, 1313, 1312, 1311, 1310, 1309, 1308, 1307, 1306, 1305,
    248    1304, 1303, 1302, 1301, 1300, 1299, 1298, 1297, 1296, 1295, 1294, 1293, 1292, 1291, 1290, 1289,
    249    1288, 1287, 1286, 1285, 1284, 1283, 1282, 1281, 1280, 1279, 1278, 1277, 1276, 1275, 1274, 1273,
    250    1272, 1271, 1270, 1269, 1268, 1267, 1266, 1265, 1264, 1263, 1262, 1261, 1260, 1259, 1258, 1257,
    251    1256, 1255, 1254, 1253, 1252, 1251, 1250, 1249, 1248, 1247, 1246, 1245, 1244, 1243, 1242, 1241,
    252    1240, 1239, 1238, 1237, 1236, 1235, 1234, 1233, 1232, 1231, 1230, 1229, 1228, 1227, 1226, 1225,
    253    // 1224
    254    1223, 1222, 1221, 1220, 1219,
    255    // 1218
    256    1217, 1216, 1215, 1214, 1213, 1212, 1211, 1210, 1209, 1208, 1207, 1206, 1205, 1204, 1203, 1202,
    257    1201, 1200, 1199, 1198, 1197, 1196, 1195, 1194, 1193, 1192, 1191, 1190, 1189, 1188, 1187, 1186,
    258    1185, 1184, 1183, 1182, 1181, 1180, 1179, 1178, 1177, 1176, 1175, 1174, 1173, 1172, 1171, 1170,
    259    1169, 1168, 1167, 1166, 1165, 1164, 1163, 1162, 1161, 1160, 1159, 1158, 1157, 1156, 1155, 1154,
    260    1153, 1152, 1151, 1150, 1149, 1148, 1147, 1146, 1145, 1144, 1143, 1142, 1141, 1140, 1139, 1138,
    261    1137, 1136, 1135, 1134, 1133, 1132, 1131, 1130, 1129, 1128, 1127, 1126, 1125, 1124, 1123, 1122,
    262    1121, 1120, 1119, 1118, 1117, 1116, 1115, 1114, 1113, 1112, 1111, 1110, 1109, 1108, 1107, 1106,
    263    1105, 1104, 1103, 1102, 1101, 1100, 1099, 1098, 1097, 1096, 1095, 1094, 1093, 1092, 1091, 1090,
    264    1089, 1088, 1087, 1086, 1085, 1084, 1083, 1082, 1081, 1080, 1079, 1078, 1077, 1076, 1075, 1074,
    265    1073, 1072, 1071, 1070, 1069, 1068, 1067, 1066, 1065, 1064, 1063, 1062, 1061, 1060, 1059, 1058,
    266    1057, 1056, 1055, 1054, 1053, 1052, 1051, 1050, 1049, 1048, 1047, 1046, 1045,
    267    // 1044
    268    1043, 1042, 1041, 1040, 1039, 1038, 1037, 1036, 1035, 1034, 1033, 1032, 1031, 1030, 1029, 1028,
    269    1027, 1026, 1025, 1024, 1023, 1022, 1021, 1020, 1019, 1018, 1017, 1016, 1015, 1014, 1013, 1012,
    270    1011, 1010, 1009, 1008, 1007, 1006, 1005, 1004, 1003, 1002, 1001, 1000, 999, 998, 997, 996,
    271    995, 994, 993, 992, 991, 990, 989, 988, 987, 986, 985, 984, 983, 982, 981, 980,
    272    979, 978, 977, 976, 975, 974, 973, 972, 971, 970, 969, 968, 967, 966, 965, 964,
    273    963, 962, 961, 960, 959, 958, 957, 956, 955, 954,
    274    // 953
    275    952, 951, 950, 949, 948, 947, 946, 945, 944, 943, 942, 941, 940, 939, 938, 937,
    276    936, 935, 934, 933, 932, 931, 930, 929, 928, 927, 926, 925, 924, 923, 922, 921,
    277    920, 919, 918, 917, 916, 915, 914, 913, 912, 911, 910, 909, 908, 907, 906, 905,
    278    904, 903, 902, 901, 900, 899, 898, 897, 896, 895,
    279    // 894
    280    893, 892, 891, 890, 889, 888, 887, 886, 885, 884, 883, 882, 881, 880, 879, 878,
    281    877,
    282    // 876
    283    875, 874, 873, 872, 871, 870, 869, 868, 867, 866, 865, 864,
    284    // 863
    285    862, 861, 860, 859, 858, 857, 856, 855, 854, 853, 852, 851, 850, 849, 848, 847,
    286    846, 845, 844, 843, 842, 841, 840, 839, 838, 837, 836, 835, 834, 833, 832, 831,
    287    830, 829, 828, 827, 826, 825, 824, 823, 822, 821, 820, 819, 818, 817, 816, 815,
    288    814, 813, 812, 811, 810, 809, 808, 807, 806, 805, 804, 803, 802, 801, 800, 799,
    289    798, 797, 796, 795, 794, 793, 792, 791, 790, 789, 788, 787, 786, 785, 784, 783,
    290    782, 781, 780, 779, 778, 777, 776, 775, 774, 773, 772, 771, 770, 769,
    291    // 768
    292    767, 766, 765, 764, 763, 762, 761, 760, 759, 758, 757, 756, 755, 754, 753, 752,
    293    751, 750, 749, 748, 747, 746, 745, 744, 743, 742, 741, 740, 739, 738, 737, 736,
    294    735, 734, 733, 732, 731, 730, 729, 728, 727, 726, 725, 724, 723, 722, 721, 720,
    295    719, 718, 717, 716, 715, 714, 713, 712, 711, 710, 709, 708, 707, 706, 705, 704,
    296    703, 702, 701, 700, 699, 698, 697, 696, 695, 694, 693, 692, 691, 690, 689, 688,
    297    687, 686, 685, 684, 683, 682, 681, 680, 679, 678, 677, 676, 675, 674, 673, 672,
    298    671, 670, 669, 668, 667, 666, 665, 664, 663, 662, 661, 660, 659, 658, 657, 656,
    299    655, 654, 653, 652, 651, 650, 649, 648, 647, 646, 645, 644, 643, 642, 641, 640,
    300    639, 638, 637, 636, 635, 634, 633, 632, 631, 630, 629, 628, 627, 626, 625, 624,
    301    623, 622, 621, 620, 619, 618, 617, 616, 615, 614, 613, 612, 611, 610, 609, 608,
    302    607, 606, 605, 604, 603, 602, 601, 600, 599, 598, 597, 596, 595, 594, 593, 592,
    303    591, 590, 589, 588, 587, 586, 585, 584, 583, 582, 581, 580, 579, 578, 577, 576,
    304    575, 574, 573, 572, 571, 570, 569, 568, 567, 566, 565, 564, 563, 562, 561, 560,
    305    559, 558, 557, 556, 555, 554, 553, 552, 551, 550, 549, 548, 547, 546, 545, 544,
    306    543, 542, 541, 540, 539, 538, 537, 536, 535, 534, 533, 532, 531, 530, 529, 528,
    307    527, 526, 525, 524, 523, 522, 521, 520, 519, 518, 517, 516, 515, 514, 513, 512,
    308    511, 510, 509, 508, 507, 506, 505, 504, 503, 502, 501, 500, 499, 498, 497, 496,
    309    495, 494, 493, 492, 491, 490, 489, 488, 487, 486, 485, 484, 483, 482, 481, 480,
    310    479, 478, 477, 476, 475, 474, 473, 472, 471, 470, 469, 468, 467, 466, 465, 464,
    311    463, 462, 461, 460, 459, 458, 457, 456, 455, 454, 453, 452, 451, 450, 449, 448,
    312    447, 446, 445, 444, 443, 442, 441, 440, 439, 438, 437, 436, 435, 434, 433, 432,
    313    431, 430, 429, 428, 427, 426, 425, 424, 423, 422, 421, 420, 419, 418, 417, 416,
    314    415, 414, 413, 412, 411, 410, 409, 408, 407, 406, 405, 404, 403, 402, 401, 400,
    315    399, 398, 397, 396, 395, 394, 393, 392, 391, 390, 389, 388, 387, 386, 385, 384,
    316    383, 382, 381, 380, 379, 378, 377, 376, 375, 374, 373, 372, 371, 370, 369, 368,
    317    367, 366, 365, 364, 363, 362, 361, 360, 359, 358, 357, 356, 355, 354, 353, 352,
    318    351, 350, 349, 348, 347, 346, 345, 344, 343, 342, 341, 340, 339, 338, 337, 336,
    319    335, 334, 333, 332, 331, 330, 329, 328, 327, 326, 325, 324, 323, 322, 321, 320,
    320    319, 318, 317, 316, 315, 314, 313, 312, 311, 310, 309, 308, 307, 306, 305, 304,
    321    303, 302, 301, 300, 299, 298, 297, 296, 295, 294, 293, 292, 291, 290, 289, 288,
    322    287, 286, 285, 284, 283, 282, 281, 280, 279, 278, 277, 276, 275, 274, 273, 272,
    323    271, 270, 269, 268, 267, 266, 265, 264, 263, 262, 261, 260, 259, 258, 257, 256,
    324    255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240,
    325    239, 238, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224,
    326    223, 222, 221, 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 208,
    327    207, 206, 205, 204, 203, 202, 201, 200, 199, 198, 197, 196, 195, 194, 193, 192,
    328    191, 190, 189, 188, 187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, 176,
    329    175, 174, 173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160,
    330    159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146, 145, 144,
    331    143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128,
    332    127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112,
    333    111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96,
    334    95, 94, 93, 92, 91, 90, 89, 88,
    335    // 87
    336    86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71,
    337    70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55,
    338    54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39,
    339    38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23,
    340    22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7,
    341    6, 5, 4, 3, 2, 1, 0,
    342  },
    343  (const int[]) {  // 802
    344    5171, 5170,
    345    // 5169
    346    5168, 5167, 5166, 5165, 5164, 5163, 5162, 5161,
    347    // 5160
    348    5159, 5158, 5157,
    349    // 5156
    350    5155, 5154, 5153, 5152, 5151, 5150, 5149, 5148,
    351    // 5147
    352    5146, 5145,
    353    // 5143-5144
    354    5142,
    355    // 5139-5141
    356    5138, 5137,
    357    // 5136
    358    5135,
    359    // 5134
    360    5133, 5132,
    361    // 5131
    362    5130,
    363    // 5127-5129
    364    5126, 5125,
    365    // 5124
    366    5123, 5122, 5121, 5120, 5119,
    367    // 5118
    368    5117, 5116,
    369    // 5111-5115
    370    5110, 5109, 5108, 5107, 5106, 5105, 5104, 5103, 5102, 5101,
    371    // 5100
    372    5099, 5098, 5097, 5096, 5095,
    373    // 5093-5094
    374    5092, 5091, 5090,
    375    // 5089
    376    5088, 5087, 5086, 5085,
    377    // 5084
    378    5083, 5082, 5081, 5080, 5079, 5078, 5077, 5076, 5075, 5074, 5073, 5072, 5071, 5070, 5069, 5068,
    379    5067, 5066,
    380    // 5065
    381    5064, 5063,
    382    // 5061-5062
    383    5060, 5059, 5058,
    384    // 5056-5057
    385    5055, 5054,
    386    // 5053
    387    5052,
    388    // 5051
    389    5050,
    390    // 5048-5049
    391    5047, 5046, 5045, 5044, 5043, 5042, 5041, 5040,
    392    // 5039
    393    5038, 5037,
    394    // 5036
    395    5035, 5034,
    396    // 5032-5033
    397    5031,
    398    // 5030
    399    5029,
    400    // 5028
    401    5027,
    402    // 5026
    403    5025, 5024, 5023, 5022, 5021,
    404    // 5020
    405    5019, 5018, 5017, 5016, 5015, 5014, 5013, 5012,
    406    // 5011
    407    5010, 5009, 5008, 5007,
    408    // 5006
    409    5005,
    410    // 5003-5004
    411    5002, 5001,
    412    // 5000
    413    4999, 4998,
    414    // 4997
    415    4996, 4995,
    416    // 4994
    417    4993,
    418    // 4992
    419    4991, 4990, 4989,
    420    // 4988
    421    4987, 4986, 4985, 4984,
    422    // 4981-4983
    423    4980, 4979, 4978, 4977, 4976, 4975, 4974, 4973, 4972,
    424    // 4970-4971
    425    4969, 4968,
    426    // 4964-4967
    427    4963,
    428    // 4962
    429    4961, 4960, 4959,
    430    // 4958
    431    4957, 4956,
    432    // 4955
    433    4954, 4953,
    434    // 4952
    435    4951, 4950, 4949, 4948, 4947, 4946,
    436    // 4945
    437    4944, 4943,
    438    // 4942
    439    4941, 4940, 4939, 4938,
    440    // 4937
    441    4936, 4935, 4934,
    442    // 4933
    443    4932, 4931, 4930, 4929, 4928,
    444    // 4927
    445    4926, 4925, 4924, 4923, 4922, 4921, 4920, 4919, 4918, 4917, 4916,
    446    // 4915
    447    4914,
    448    // 4912-4913
    449    4911, 4910,
    450    // 4909
    451    4908, 4907,
    452    // 4906
    453    4905, 4904, 4903,
    454    // 4902
    455    4901, 4900, 4899, 4898,
    456    // 4896-4897
    457    4895,
    458    // 4894
    459    4893, 4892,
    460    // 4891
    461    4890, 4889,
    462    // 4886-4888
    463    4885, 4884, 4883, 4882, 4881,
    464    // 4879-4880
    465    4878,
    466    // 4875-4877
    467    4874,
    468    // 4872-4873
    469    4871,
    470    // 4869-4870
    471    4868, 4867, 4866, 4865, 4864, 4863, 4862, 4861, 4860, 4859, 4858, 4857, 4856, 4855,
    472    // 4854
    473    4853,
    474    // 4852
    475    4851, 4850, 4849, 4848,
    476    // 4847
    477    4846, 4845, 4844, 4843, 4842, 4841, 4840, 4839, 4838, 4837, 4836, 4835, 4834, 4833,
    478    // 4832
    479    4831, 4830, 4829, 4828, 4827, 4826, 4825, 4824, 4823,
    480    // 4821-4822
    481    4820, 4819, 4818, 4817, 4816, 4815,
    482    // 4814
    483    4813, 4812, 4811, 4810, 4809, 4808, 4807, 4806, 4805,
    484    // 4803-4804
    485    4802, 4801,
    486    // 4800
    487    4799,
    488    // 4798
    489    4797, 4796, 4795, 4794, 4793, 4792, 4791, 4790,
    490    // 4789
    491    4788, 4787, 4786, 4785,
    492    // 4784
    493    4783,
    494    // 4782
    495    4781,
    496    // 4780
    497    4779, 4778,
    498    // 4777
    499    4776,
    500    // 4774-4775
    501    4773, 4772, 4771, 4770, 4769, 4768, 4767, 4766, 4765, 4764, 4763, 4762,
    502    // 4761
    503    4760, 4759,
    504    // 4758
    505    4757, 4756,
    506    // 4755
    507    4754, 4753, 4752,
    508    // 4751
    509    4750, 4749,
    510    // 4748
    511    4747, 4746, 4745, 4744, 4743,
    512    // 4742
    513    4741, 4740, 4739, 4738, 4737,
    514    // 4736
    515    4735, 4734, 4733, 4732, 4731, 4730, 4729, 4728,
    516    // 4727
    517    4726, 4725, 4724, 4723, 4722, 4721, 4720, 4719, 4718,
    518    // 4717
    519    4716, 4715, 4714, 4713,
    520    // 4712
    521    4711, 4710,
    522    // 4709
    523    4708, 4707, 4706, 4705, 4704, 4703, 4702, 4701, 4700, 4699,
    524    // 4698
    525    4697, 4696, 4695,
    526    // 4694
    527    4693, 4692, 4691, 4690, 4689, 4688, 4687, 4686, 4685,
    528    // 4682-4684
    529    4681, 4680, 4679, 4678, 4677, 4676, 4675, 4674,
    530    // 4673
    531    4672, 4671, 4670,
    532    // 4669
    533    4668, 4667, 4666, 4665, 4664,
    534    // 4662-4663
    535    4661, 4660,
    536    // 4659
    537    4658,
    538    // 4656-4657
    539    4655, 4654,
    540    // 4653
    541    4652, 4651,
    542    // 4650
    543    4649,
    544    // 4648
    545    4647, 4646, 4645, 4644, 4643,
    546    // 4642
    547    4641, 4640, 4639, 4638, 4637, 4636,
    548    // 4634-4635
    549    4633, 4632, 4631, 4630, 4629, 4628, 4627, 4626, 4625, 4624, 4623,
    550    // 4622
    551    4621, 4620,
    552    // 4619
    553    4618, 4617,
    554    // 4615-4616
    555    4614, 4613, 4612, 4611,
    556    // 4610
    557    4609, 4608, 4607,
    558    // 4604-4606
    559    4603, 4602, 4601, 4600, 4599, 4598,
    560    // 4597
    561    4596, 4595, 4594, 4593, 4592, 4591, 4590,
    562    // 4588-4589
    563    4587,
    564    // 4586
    565    4585,
    566    // 4584
    567    4583,
    568    // 4582
    569    4581, 4580, 4579,
    570    // 4578
    571    4577,
    572    // 4575-4576
    573    4574,
    574    // 4573
    575    4572, 4571, 4570, 4569, 4568,
    576    // 4567
    577    4566, 4565, 4564, 4563, 4562, 4561, 4560, 4559, 4558, 4557, 4556, 4555, 4554, 4553, 4552,
    578    // 4551
    579    4550, 4549, 4548, 4547, 4546, 4545, 4544, 4543, 4542, 4541,
    580    // 4539-4540
    581    4538, 4537,
    582    // 4534-4536
    583    4533, 4532, 4531,
    584    // 4530
    585    4529, 4528, 4527,
    586    // 4525-4526
    587    4524, 4523,
    588    // 4522
    589    4521, 4520,
    590    // 4519
    591    4518, 4517, 4516,
    592    // 4514-4515
    593    4513, 4512,
    594    // 4508-4511
    595    4507,
    596    // 4505-4506
    597    4504,
    598    // 4503
    599    4502, 4501,
    600    // 4499-4500
    601    4498, 4497, 4496, 4495, 4494,
    602    // 4493
    603    4492, 4491,
    604    // 4489-4490
    605    4488,
    606    // 4487
    607    4486, 4485, 4484, 4483, 4482, 4481,
    608    // 4480
    609    4479, 4478, 4477, 4476, 4475, 4474, 4473,
    610    // 4472
    611    4471, 4470, 4469, 4468, 4467, 4466, 4465, 4464, 4463, 4462, 4461,
    612    // 4457-4460
    613    4456, 4455, 4454, 4453, 4452, 4451, 4450,
    614    // 4448-4449
    615    4447, 4446, 4445, 4444, 4443, 4442,
    616    // 4441
    617    4440,
    618    // 4439
    619    4438, 4437, 4436,
    620    // 4435
    621    4434, 4433, 4432,
    622    // 4429-4431
    623    4428, 4427,
    624    // 4425-4426
    625    4424, 4423, 4422, 4421, 4420, 4419, 4418, 4417, 4416,
    626    // 4415
    627    4414, 4413, 4412, 4411, 4410, 4409,
    628    // 4408
    629    4407, 4406, 4405, 4404, 4403, 4402, 4401, 4400, 4399, 4398, 4397, 4396, 4395, 4394, 4393, 4392,
    630    4391, 4390, 4389, 4388, 4387, 4386, 4385,
    631    // 4384
    632    4383, 4382,
    633    // 4380-4381
    634    4379, 4378, 4377, 4376,
    635    // 4375
    636    4374, 4373,
    637    // 4371-4372
    638    4370, 4369, 4368,
    639    // 4367
    640    4366,
    641    // 4365
    642    4364, 4363, 4362, 4361, 4360, 4359, 4358,
    643    // 4357
    644    4356, 4355,
    645    // 4354
    646    4353, 4352, 4351,
    647    // 4350
    648    4349,
    649    // 4347-4348
    650    4346, 4345,
    651    // 4344
    652    4343, 4342, 4341, 4340, 4339, 4338, 4337, 4336, 4335, 4334,
    653    // 4332-4333
    654    4331,
    655    // 4330
    656    4329, 4328, 4327, 4326, 4325, 4324, 4323,
    657    // 4321-4322
    658    4320, 4319, 4318,
    659    // 4317
    660    4316, 4315, 4314, 4313, 4312, 4311, 4310, 4309,
    661    // 4308
    662    4307, 4306, 4305,
    663    // 4304
    664    4303,
    665    // 4301-4302
    666    4300, 4299, 4298, 4297, 4296,
    667    // 4295
    668    4294,
    669    // 4293
    670    4292,
    671    // 4291
    672    4290, 4289, 4288, 4287,
    673    // 4286
    674    4285, 4284, 4283,
    675    // 4282
    676    4281, 4280,
    677    // 4279
    678    4278,
    679    // 4276-4277
    680    4275, 4274, 4273, 4272, 4271,
    681    // 4269-4270
    682    4268, 4267,
    683    // 4263-4266
    684    4262, 4261,
    685    // 4259-4260
    686    4258,
    687    // 4255-4257
    688    4254, 4253,
    689    // 4252
    690    4251,
    691    // 4250
    692    4249, 4248, 4247,
    693    // 4246
    694    4245, 4244,
    695    // 4243
    696    4242, 4241,
    697    // 4240
    698    4239, 4238, 4237, 4236, 4235, 4234, 4233,
    699    // 4231-4232
    700    4230,
    701    // 4229
    702    4228, 4227,
    703    // 4223-4226
    704    4222, 4221, 4220, 4219, 4218, 4217, 4216, 4215, 4214, 4213, 4212, 4211, 4210,
    705    // 4209
    706    4208, 4207, 4206,
    707    // 4205
    708    4204, 4203,
    709    // 4201-4202
    710    4200,
    711    // 4199
    712    4198, 4197, 4196,
    713    // 4195
    714    4194, 4193,
    715    // 4192
    716    4191, 4190, 4189, 4188, 4187, 4186, 4185, 4184, 4183, 4182, 4181, 4180, 4179, 4178, 4177, 4176,
    717    // 4174-4175
    718    4173, 4172,
    719    // 4170-4171
    720    4169, 4168,
    721    // 4167
    722    4166, 4165,
    723    // 4164
    724    4163,
    725    // 4162
    726    4161, 4160, 4159, 4158,
    727    // 4157
    728    4156, 4155, 4154,
    729    // 4153
    730    4152, 4151, 4150,
    731    // 4147-4149
    732    4146,
    733    // 4145
    734    4144, 4143, 4142, 4141, 4140, 4139, 4138, 4137,
    735    // 4135-4136
    736    4134, 4133, 4132, 4131, 4130, 4129,
    737    // 4128
    738    4127, 4126,
    739    // 4125
    740    4124,
    741    // 4122-4123
    742    4121, 4120, 4119,
    743    // 4117-4118
    744    4116, 4115,
    745    // 4113-4114
    746    4112,
    747    // 4111
    748    4110, 4109,
    749    // 4104-4108
    750    4103, 4102,
    751    // 4101
    752    4100,
    753    // 4099
    754    4098, 4097, 4096, 4095, 4094, 4093, 4092, 4091, 4090, 4089, 4088,
    755    // 4086-4087
    756    4085,
    757    // 4082-4084
    758    4081, 4080, 4079, 4078, 4077, 4076, 4075, 4074, 4073, 4072, 4071, 4070,
    759    // 4067-4069
    760    4066, 4065, 4064,
    761    // 4063
    762    4062, 4061, 4060,
    763    // 4059
    764    4058, 4057,
    765    // 4056
    766    4055, 4054,
    767    // 4053
    768    4052,
    769    // 4050-4051
    770    4049, 4048,
    771    // 4044-4047
    772    4043, 4042,
    773    // 4039-4041
    774    4038, 4037, 4036,
    775    // 4035
    776    4034, 4033, 4032,
    777    // 4030-4031
    778    4029, 4028, 4027, 4026,
    779    // 4024-4025
    780    4023,
    781    // 4022
    782    4021, 4020,
    783    // 4019
    784    4018, 4017, 4016, 4015, 4014, 4013,
    785    // 4008-4012
    786    4007,
    787    // 4003-4006
    788    4002, 4001,
    789    // 4000
    790    3999, 3998,
    791    // 3996-3997
    792    3995,
    793    // 3994
    794    3993, 3992,
    795    // 3991
    796    3990, 3989, 3988,
    797    // 3985-3987
    798    3984,
    799    // 3983
    800    3982, 3981, 3980,
    801    // 3979
    802    3978,
    803    // 3975-3977
    804    3974, 3973,
    805    // 3970-3972
    806    3969, 3968,
    807    // 3967
    808    3966,
    809    // 3965
    810    3964, 3963, 3962,
    811    // 3959-3961
    812    3958,
    813    // 3957
    814    3956,
    815    // 3955
    816    3954, 3953, 3952, 3951, 3950, 3949, 3948, 3947, 3946,
    817    // 3945
    818    3944, 3943, 3942,
    819    // 3941
    820    3940, 3939, 3938, 3937, 3936, 3935, 3934, 3933, 3932, 3931,
    821    // 3927-3930
    822    3926, 3925,
    823    // 3923-3924
    824    3922, 3921, 3920, 3919,
    825    // 3918
    826    3917,
    827    // 3916
    828    3915, 3914,
    829    // 3913
    830    3912,
    831    // 3910-3911
    832    3909, 3908,
    833    // 3907
    834    3906, 3905,
    835    // 3904
    836    3903,
    837    // 3901-3902
    838    3900,
    839    // 3899
    840    3898,
    841    // 3897
    842    3896,
    843    // 3894-3895
    844    3893,
    845    // 3892
    846    3891,
    847    // 3890
    848    3889, 3888, 3887, 3886, 3885, 3884, 3883, 3882,
    849    // 3881
    850    3880, 3879, 3878,
    851    // 3877
    852    3876, 3875, 3874, 3873,
    853    // 3871-3872
    854    3870, 3869, 3868, 3867,
    855    // 3866
    856    3865,
    857    // 3864
    858    3863, 3862, 3861, 3860,
    859    // 3859
    860    3858,
    861    // 3857
    862    3856, 3855,
    863    // 3854
    864    3853, 3852,
    865    // 3851
    866    3850,
    867    // 3849
    868    3848,
    869    // 3847
    870    3846, 3845, 3844, 3843,
    871    // 3842
    872    3841,
    873    // 3840
    874    3839, 3838,
    875    // 3835-3837
    876    3834, 3833,
    877    // 3832
    878    3831,
    879    // 3830
    880    3829,
    881    // 3828
    882    3827, 3826, 3825, 3824, 3823, 3822, 3821, 3820, 3819, 3818,
    883    // 3815-3817
    884    3814, 3813,
    885    // 3812
    886    3811,
    887    // 3809-3810
    888    3808,
    889    // 3807
    890    3806, 3805, 3804, 3803, 3802,
    891    // 3801
    892    3800,
    893    // 3798-3799
    894    3797, 3796, 3795,
    895    // 3794
    896    3793, 3792, 3791, 3790,
    897    // 3789
    898    3788, 3787, 3786, 3785, 3784, 3783, 3782, 3781, 3780, 3779, 3778, 3777, 3776, 3775, 3774, 3773,
    899    3772,
    900    // 3771
    901    3770, 3769, 3768, 3767, 3766, 3765,
    902    // 3763-3764
    903    3762,
    904    // 3760-3761
    905    3759, 3758, 3757, 3756, 3755, 3754,
    906    // 3753
    907    3752, 3751,
    908    // 3749-3750
    909    3748, 3747, 3746, 3745, 3744, 3743, 3742, 3741, 3740, 3739,
    910    // 3738
    911    3737, 3736, 3735, 3734,
    912    // 3731-3733
    913    3730, 3729,
    914    // 3727-3728
    915    3726, 3725, 3724,
    916    // 3720-3723
    917    3719, 3718, 3717, 3716, 3715, 3714, 3713, 3712, 3711, 3710, 3709, 3708, 3707,
    918    // 3706
    919    3705,
    920    // 3704
    921    3703, 3702, 3701,
    922    // 3700
    923    3699, 3698,
    924    // 3696-3697
    925    3695,
    926    // 3694
    927    3693,
    928    // 3692
    929    3691,
    930    // 3690
    931    3689, 3688, 3687, 3686, 3685, 3684,
    932    // 3682-3683
    933    3681, 3680, 3679, 3678, 3677, 3676, 3675, 3674, 3673, 3672, 3671, 3670, 3669,
    934    // 3668
    935    3667, 3666, 3665, 3664, 3663, 3662, 3661, 3660, 3659, 3658, 3657,
    936    // 3656
    937    3655, 3654, 3653, 3652,
    938    // 3649-3651
    939    3648, 3647,
    940    // 3645-3646
    941    3644, 3643, 3642, 3641, 3640, 3639, 3638,
    942    // 3637
    943    3636, 3635,
    944    // 3633-3634
    945    3632,
    946    // 3631
    947    3630, 3629,
    948    // 3628
    949    3627, 3626, 3625,
    950    // 3624
    951    3623, 3622, 3621,
    952    // 3620
    953    3619, 3618, 3617, 3616, 3615,
    954    // 3614
    955    3613, 3612, 3611, 3610, 3609,
    956    // 3608
    957    3607, 3606,
    958    // 3605
    959    3604, 3603, 3602, 3601, 3600, 3599, 3598,
    960    // 3597
    961    3596, 3595, 3594, 3593,
    962    // 3592
    963    3591,
    964    // 3589-3590
    965    3588, 3587, 3586, 3585, 3584, 3583, 3582, 3581, 3580, 3579,
    966    // 3578
    967    3577, 3576, 3575, 3574, 3573, 3572, 3571, 3570,
    968    // 3569
    969    3568, 3567, 3566, 3565, 3564, 3563,
    970    // 3562
    971    3561,
    972    // 3559-3560
    973    3558,
    974    // 3557
    975    3556, 3555, 3554, 3553, 3552, 3551, 3550, 3549,
    976    // 3548
    977    3547, 3546, 3545,
    978    // 3544
    979    3543, 3542, 3541, 3540, 3539,
    980    // 3538
    981    3537,
    982    // 3535-3536
    983    3534, 3533, 3532, 3531, 3530, 3529, 3528, 3527, 3526, 3525,
    984    // 3524
    985    3523, 3522, 3521, 3520, 3519, 3518, 3517,
    986    // 3516
    987    3515, 3514, 3513, 3512,
    988    // 3511
    989    3510, 3509, 3508, 3507, 3506, 3505, 3504,
    990    // 3502-3503
    991    3501, 3500, 3499, 3498, 3497, 3496, 3495, 3494, 3493, 3492, 3491, 3490, 3489, 3488, 3487, 3486,
    992    // 3485
    993    3484, 3483, 3482,
    994    // 3481
    995    3480,
    996    // 3479
    997    3478, 3477, 3476, 3475,
    998    // 3474
    999    3473, 3472, 3471, 3470, 3469, 3468, 3467, 3466, 3465, 3464, 3463, 3462, 3461, 3460, 3459, 3458,
   1000    3457,
   1001    // 3456
   1002    3455, 3454, 3453, 3452, 3451, 3450, 3449, 3448,
   1003    // 3447
   1004    3446,
   1005    // 3444-3445
   1006    3443, 3442, 3441, 3440, 3439, 3438, 3437,
   1007    // 3436
   1008    3435, 3434, 3433, 3432, 3431, 3430,
   1009    // 3429
   1010    3428,
   1011    // 3427
   1012    3426, 3425, 3424,
   1013    // 3422-3423
   1014    3421, 3420, 3419,
   1015    // 3418
   1016    3417, 3416, 3415, 3414,
   1017    // 3413
   1018    3412,
   1019    // 3411
   1020    3410, 3409, 3408, 3407, 3406,
   1021    // 3404-3405
   1022    3403, 3402,
   1023    // 3401
   1024    3400, 3399, 3398, 3397,
   1025    // 3396
   1026    3395, 3394, 3393, 3392, 3391, 3390, 3389, 3388, 3387, 3386, 3385, 3384, 3383, 3382, 3381,
   1027    // 3380
   1028    3379, 3378, 3377,
   1029    // 3376
   1030    3375, 3374, 3373, 3372,
   1031    // 3370-3371
   1032    3369, 3368,
   1033    // 3367
   1034    3366,
   1035    // 3365
   1036    3364, 3363, 3362, 3361, 3360,
   1037    // 3359
   1038    3358, 3357,
   1039    // 3356
   1040    3355, 3354, 3353,
   1041    // 3351-3352
   1042    3350, 3349, 3348,
   1043    // 3346-3347
   1044    3345,
   1045    // 3339-3344
   1046    3338, 3337, 3336,
   1047    // 3335
   1048    3334, 3333, 3332, 3331, 3330, 3329, 3328, 3327, 3326, 3325,
   1049    // 3323-3324
   1050    3322, 3321,
   1051    // 3320
   1052    3319,
   1053    // 3315-3318
   1054    3314, 3313, 3312, 3311, 3310, 3309, 3308, 3307, 3306,
   1055    // 3305
   1056    3304,
   1057    // 3303
   1058    3302,
   1059    // 3299-3301
   1060    3298,
   1061    // 3297
   1062    3296, 3295, 3294, 3293, 3292, 3291, 3290, 3289,
   1063    // 3287-3288
   1064    3286, 3285, 3284, 3283, 3282, 3281, 3280,
   1065    // 3279
   1066    3278, 3277,
   1067    // 3273-3276
   1068    3272,
   1069    // 3271
   1070    3270,
   1071    // 3268-3269
   1072    3267, 3266, 3265, 3264, 3263, 3262,
   1073    // 3261
   1074    3260, 3259,
   1075    // 3258
   1076    3257, 3256, 3255, 3254, 3253, 3252,
   1077    // 3251
   1078    3250,
   1079    // 3249
   1080    3248, 3247, 3246, 3245,
   1081    // 3244
   1082    3243, 3242,
   1083    // 3237-3241
   1084    3236,
   1085    // 3234-3235
   1086    3233,
   1087    // 3232
   1088    3231, 3230,
   1089    // 3228-3229
   1090    3227, 3226, 3225, 3224,
   1091    // 3223
   1092    3222, 3221, 3220, 3219, 3218,
   1093    // 3217
   1094    3216,
   1095    // 3215
   1096    3214, 3213, 3212,
   1097    // 3211
   1098    3210, 3209, 3208, 3207,
   1099    // 3206
   1100    3205, 3204,
   1101    // 3203
   1102    3202,
   1103    // 3200-3201
   1104    3199, 3198,
   1105    // 3197
   1106    3196, 3195,
   1107    // 3194
   1108    3193, 3192, 3191,
   1109    // 3188-3190
   1110    3187,
   1111    // 3185-3186
   1112    3184,
   1113    // 3182-3183
   1114    3181,
   1115    // 3179-3180
   1116    3178,
   1117    // 3175-3177
   1118    3174,
   1119    // 3173
   1120    3172,
   1121    // 3169-3171
   1122    3168, 3167, 3166, 3165, 3164, 3163,
   1123    // 3161-3162
   1124    3160, 3159, 3158, 3157, 3156, 3155,
   1125    // 3154
   1126    3153,
   1127    // 3152
   1128    3151,
   1129    // 3148-3150
   1130    3147,
   1131    // 3146
   1132    3145,
   1133    // 3144
   1134    3143,
   1135    // 3142
   1136    3141, 3140, 3139, 3138,
   1137    // 3137
   1138    3136, 3135, 3134,
   1139    // 3133
   1140    3132, 3131, 3130,
   1141    // 3126-3129
   1142    3125,
   1143    // 3123-3124
   1144    3122, 3121, 3120, 3119, 3118,
   1145    // 3117
   1146    3116, 3115, 3114,
   1147    // 3111-3113
   1148    3110, 3109, 3108,
   1149    // 3107
   1150    3106,
   1151    // 3104-3105
   1152    3103, 3102, 3101,
   1153    // 3099-3100
   1154    3098, 3097, 3096, 3095, 3094, 3093, 3092,
   1155    // 3090-3091
   1156    3089, 3088, 3087, 3086, 3085,
   1157    // 3084
   1158    3083, 3082, 3081, 3080,
   1159    // 3079
   1160    3078, 3077, 3076, 3075,
   1161    // 3074
   1162    3073, 3072, 3071, 3070,
   1163    // 3067-3069
   1164    3066, 3065, 3064, 3063, 3062, 3061,
   1165    // 3058-3060
   1166    3057,
   1167    // 3056
   1168    3055,
   1169    // 3054
   1170    3053, 3052, 3051, 3050, 3049,
   1171    // 3047-3048
   1172    3046, 3045, 3044, 3043, 3042, 3041, 3040, 3039, 3038, 3037,
   1173    // 3036
   1174    3035, 3034, 3033, 3032,
   1175    // 3031
   1176    3030,
   1177    // 3028-3029
   1178    3027, 3026, 3025,
   1179    // 3021-3024
   1180    3020, 3019, 3018, 3017, 3016,
   1181    // 3015
   1182    3014, 3013, 3012, 3011,
   1183    // 3010
   1184    3009, 3008, 3007, 3006,
   1185    // 3004-3005
   1186    3003, 3002, 3001, 3000, 2999,
   1187    // 2998
   1188    2997, 2996, 2995, 2994, 2993, 2992,
   1189    // 2991
   1190    2990, 2989,
   1191    // 2988
   1192    2987, 2986, 2985, 2984,
   1193    // 2982-2983
   1194    2981, 2980, 2979, 2978, 2977, 2976,
   1195    // 2975
   1196    2974, 2973,
   1197    // 2972
   1198    2971, 2970, 2969,
   1199    // 2967-2968
   1200    2966,
   1201    // 2962-2965
   1202    2961, 2960,
   1203    // 2958-2959
   1204    2957,
   1205    // 2955-2956
   1206    2954, 2953, 2952,
   1207    // 2950-2951
   1208    2949, 2948, 2947, 2946, 2945,
   1209    // 2944
   1210    2943,
   1211    // 2942
   1212    2941, 2940, 2939, 2938, 2937, 2936, 2935, 2934, 2933,
   1213    // 2930-2932
   1214    2929,
   1215    // 2928
   1216    2927,
   1217    // 2925-2926
   1218    2924, 2923, 2922, 2921, 2920, 2919, 2918, 2917, 2916,
   1219    // 2915
   1220    2914, 2913, 2912, 2911, 2910, 2909, 2908, 2907, 2906, 2905, 2904, 2903, 2902, 2901, 2900, 2899,
   1221    2898,
   1222    // 2897
   1223    2896,
   1224    // 2892-2895
   1225    2891, 2890, 2889,
   1226    // 2888
   1227    2887, 2886, 2885, 2884, 2883,
   1228    // 2881-2882
   1229    2880, 2879, 2878, 2877, 2876, 2875,
   1230    // 2874
   1231    2873,
   1232    // 2872
   1233    2871, 2870, 2869, 2868,
   1234    // 2866-2867
   1235    2865,
   1236    // 2864
   1237    2863, 2862, 2861,
   1238    // 2860
   1239    2859, 2858, 2857, 2856,
   1240    // 2855
   1241    2854,
   1242    // 2853
   1243    2852,
   1244    // 2851
   1245    2850, 2849, 2848,
   1246    // 2846-2847
   1247    2845,
   1248    // 2844
   1249    2843,
   1250    // 2842
   1251    2841, 2840, 2839, 2838, 2837, 2836, 2835, 2834, 2833, 2832, 2831, 2830, 2829, 2828, 2827, 2826,
   1252    2825,
   1253    // 2824
   1254    2823,
   1255    // 2821-2822
   1256    2820, 2819, 2818,
   1257    // 2815-2817
   1258    2814, 2813, 2812,
   1259    // 2811
   1260    2810, 2809, 2808, 2807,
   1261    // 2805-2806
   1262    2804,
   1263    // 2802-2803
   1264    2801,
   1265    // 2799-2800
   1266    2798, 2797, 2796, 2795, 2794,
   1267    // 2793
   1268    2792, 2791, 2790, 2789, 2788,
   1269    // 2787
   1270    2786,
   1271    // 2785
   1272    2784, 2783, 2782, 2781, 2780, 2779, 2778, 2777, 2776,
   1273    // 2775
   1274    2774, 2773, 2772,
   1275    // 2771
   1276    2770, 2769, 2768, 2767, 2766, 2765, 2764,
   1277    // 2763
   1278    2762, 2761,
   1279    // 2758-2760
   1280    2757, 2756, 2755,
   1281    // 2751-2754
   1282    2750, 2749, 2748, 2747,
   1283    // 2742-2746
   1284    2741,
   1285    // 2739-2740
   1286    2738, 2737, 2736, 2735, 2734,
   1287    // 2733
   1288    2732,
   1289    // 2731
   1290    2730, 2729, 2728, 2727, 2726,
   1291    // 2725
   1292    2724, 2723, 2722, 2721, 2720, 2719, 2718, 2717, 2716, 2715, 2714, 2713, 2712, 2711,
   1293    // 2710
   1294    2709,
   1295    // 2708
   1296    2707, 2706, 2705, 2704, 2703, 2702, 2701, 2700,
   1297    // 2698-2699
   1298    2697,
   1299    // 2696
   1300    2695, 2694, 2693, 2692, 2691, 2690, 2689, 2688, 2687, 2686,
   1301    // 2685
   1302    2684, 2683, 2682,
   1303    // 2679-2681
   1304    2678,
   1305    // 2675-2677
   1306    2674, 2673,
   1307    // 2672
   1308    2671, 2670,
   1309    // 2668-2669
   1310    2667,
   1311    // 2665-2666
   1312    2664,
   1313    // 2663
   1314    2662, 2661,
   1315    // 2660
   1316    2659, 2658,
   1317    // 2657
   1318    2656, 2655, 2654, 2653,
   1319    // 2652
   1320    2651, 2650,
   1321    // 2649
   1322    2648, 2647, 2646,
   1323    // 2645
   1324    2644, 2643,
   1325    // 2642
   1326    2641, 2640, 2639,
   1327    // 2638
   1328    2637,
   1329    // 2635-2636
   1330    2634,
   1331    // 2633
   1332    2632, 2631,
   1333    // 2628-2630
   1334    2627, 2626, 2625, 2624, 2623, 2622,
   1335    // 2620-2621
   1336    2619, 2618, 2617,
   1337    // 2616
   1338    2615,
   1339    // 2614
   1340    2613, 2612, 2611, 2610, 2609, 2608, 2607, 2606, 2605, 2604,
   1341    // 2603
   1342    2602, 2601, 2600, 2599,
   1343    // 2597-2598
   1344    2596, 2595, 2594, 2593, 2592, 2591, 2590, 2589, 2588, 2587, 2586, 2585, 2584,
   1345    // 2583
   1346    2582,
   1347    // 2581
   1348    2580,
   1349    // 2578-2579
   1350    2577,
   1351    // 2576
   1352    2575, 2574,
   1353    // 2573
   1354    2572, 2571, 2570,
   1355    // 2565-2569
   1356    2564,
   1357    // 2562-2563
   1358    2561, 2560, 2559,
   1359    // 2558
   1360    2557, 2556, 2555, 2554,
   1361    // 2552-2553
   1362    2551, 2550, 2549, 2548, 2547,
   1363    // 2546
   1364    2545,
   1365    // 2544
   1366    2543, 2542, 2541,
   1367    // 2540
   1368    2539,
   1369    // 2537-2538
   1370    2536, 2535, 2534, 2533, 2532,
   1371    // 2525-2531
   1372    2524, 2523, 2522,
   1373    // 2521
   1374    2520,
   1375    // 2519
   1376    2518, 2517, 2516, 2515, 2514, 2513,
   1377    // 2511-2512
   1378    2510, 2509, 2508, 2507, 2506, 2505, 2504, 2503, 2502,
   1379    // 2501
   1380    2500, 2499,
   1381    // 2497-2498
   1382    2496, 2495,
   1383    // 2493-2494
   1384    2492, 2491, 2490, 2489, 2488, 2487,
   1385    // 2484-2486
   1386    2483,
   1387    // 2480-2482
   1388    2479,
   1389    // 2478
   1390    2477, 2476, 2475, 2474, 2473, 2472, 2471, 2470, 2469, 2468, 2467, 2466, 2465, 2464, 2463, 2462,
   1391    2461, 2460, 2459, 2458, 2457, 2456,
   1392    // 2455
   1393    2454,
   1394    // 2453
   1395    2452,
   1396    // 2450-2451
   1397    2449, 2448, 2447, 2446,
   1398    // 2445
   1399    2444,
   1400    // 2443
   1401    2442,
   1402    // 2440-2441
   1403    2439, 2438, 2437, 2436, 2435,
   1404    // 2434
   1405    2433, 2432, 2431, 2430, 2429,
   1406    // 2428
   1407    2427, 2426, 2425, 2424, 2423, 2422, 2421, 2420, 2419, 2418,
   1408    // 2415-2417
   1409    2414, 2413, 2412, 2411, 2410, 2409, 2408, 2407, 2406,
   1410    // 2405
   1411    2404, 2403, 2402, 2401,
   1412    // 2400
   1413    2399,
   1414    // 2393-2398
   1415    2392,
   1416    // 2391
   1417    2390, 2389, 2388, 2387, 2386, 2385, 2384, 2383, 2382,
   1418    // 2380-2381
   1419    2379,
   1420    // 2378
   1421    2377, 2376, 2375, 2374, 2373,
   1422    // 2371-2372
   1423    2370,
   1424    // 2369
   1425    2368,
   1426    // 2367
   1427    2366,
   1428    // 2364-2365
   1429    2363,
   1430    // 2362
   1431    2361, 2360, 2359, 2358,
   1432    // 2357
   1433    2356, 2355, 2354, 2353, 2352, 2351, 2350, 2349, 2348, 2347, 2346, 2345, 2344, 2343, 2342, 2341,
   1434    2340,
   1435    // 2338-2339
   1436    2337, 2336, 2335, 2334, 2333, 2332,
   1437    // 2331
   1438    2330, 2329, 2328, 2327, 2326,
   1439    // 2325
   1440    2324, 2323,
   1441    // 2320-2322
   1442    2319, 2318,
   1443    // 2317
   1444    2316,
   1445    // 2315
   1446    2314, 2313, 2312,
   1447    // 2310-2311
   1448    2309,
   1449    // 2308
   1450    2307,
   1451    // 2305-2306
   1452    2304, 2303,
   1453    // 2302
   1454    2301, 2300, 2299,
   1455    // 2296-2298
   1456    2295, 2294, 2293,
   1457    // 2292
   1458    2291,
   1459    // 2290
   1460    2289, 2288, 2287, 2286, 2285, 2284, 2283,
   1461    // 2282
   1462    2281, 2280, 2279, 2278, 2277, 2276,
   1463    // 2275
   1464    2274, 2273,
   1465    // 2271-2272
   1466    2270, 2269,
   1467    // 2264-2268
   1468    2263,
   1469    // 2262
   1470    2261, 2260, 2259, 2258,
   1471    // 2256-2257
   1472    2255, 2254,
   1473    // 2253
   1474    2252,
   1475    // 2250-2251
   1476    2249, 2248, 2247, 2246,
   1477    // 2245
   1478    2244, 2243,
   1479    // 2242
   1480    2241, 2240,
   1481    // 2238-2239
   1482    2237, 2236, 2235, 2234, 2233, 2232, 2231,
   1483    // 2230
   1484    2229,
   1485    // 2228
   1486    2227,
   1487    // 2222-2226
   1488    2221,
   1489    // 2220
   1490    2219, 2218, 2217,
   1491    // 2216
   1492    2215,
   1493    // 2212-2214
   1494    2211, 2210,
   1495    // 2208-2209
   1496    2207, 2206,
   1497    // 2204-2205
   1498    2203, 2202, 2201, 2200, 2199, 2198, 2197, 2196,
   1499    // 2193-2195
   1500    2192, 2191, 2190, 2189,
   1501    // 2187-2188
   1502    2186, 2185, 2184,
   1503    // 2183
   1504    2182, 2181, 2180,
   1505    // 2178-2179
   1506    2177, 2176, 2175, 2174,
   1507    // 2173
   1508    2172, 2171,
   1509    // 2169-2170
   1510    2168, 2167, 2166,
   1511    // 2164-2165
   1512    2163,
   1513    // 2162
   1514    2161,
   1515    // 2160
   1516    2159, 2158,
   1517    // 2157
   1518    2156, 2155, 2154, 2153, 2152, 2151, 2150, 2149,
   1519    // 2148
   1520    2147,
   1521    // 2146
   1522    2145, 2144, 2143, 2142, 2141, 2140, 2139, 2138,
   1523    // 2137
   1524    2136,
   1525    // 2135
   1526    2134,
   1527    // 2133
   1528    2132,
   1529    // 2131
   1530    2130,
   1531    // 2128-2129
   1532    2127, 2126,
   1533    // 2125
   1534    2124, 2123,
   1535    // 2122
   1536    2121,
   1537    // 2120
   1538    2119, 2118,
   1539    // 2117
   1540    2116, 2115, 2114, 2113, 2112, 2111, 2110, 2109, 2108, 2107, 2106,
   1541    // 2105
   1542    2104, 2103, 2102,
   1543    // 2101
   1544    2100, 2099, 2098,
   1545    // 2097
   1546    2096, 2095, 2094, 2093,
   1547    // 2092
   1548    2091,
   1549    // 2090
   1550    2089, 2088, 2087, 2086, 2085, 2084, 2083,
   1551    // 2082
   1552    2081, 2080, 2079, 2078, 2077, 2076, 2075,
   1553    // 2074
   1554    2073, 2072,
   1555    // 2071
   1556    2070, 2069, 2068, 2067,
   1557    // 2065-2066
   1558    2064,
   1559    // 2063
   1560    2062,
   1561    // 2061
   1562    2060, 2059, 2058,
   1563    // 2057
   1564    2056,
   1565    // 2055
   1566    2054,
   1567    // 2052-2053
   1568    2051, 2050, 2049, 2048, 2047, 2046, 2045, 2044, 2043, 2042, 2041,
   1569    // 2039-2040
   1570    2038, 2037, 2036,
   1571    // 2034-2035
   1572    2033, 2032, 2031, 2030, 2029, 2028, 2027, 2026, 2025, 2024, 2023,
   1573    // 2021-2022
   1574    2020, 2019, 2018,
   1575    // 2017
   1576    2016,
   1577    // 2015
   1578    2014, 2013,
   1579    // 2012
   1580    2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002,
   1581    // 2001
   1582    2000, 1999, 1998,
   1583    // 1996-1997
   1584    1995, 1994, 1993, 1992, 1991,
   1585    // 1988-1990
   1586    1987, 1986, 1985, 1984, 1983, 1982, 1981, 1980, 1979, 1978,
   1587    // 1977
   1588    1976, 1975, 1974, 1973, 1972, 1971, 1970, 1969,
   1589    // 1968
   1590    1967, 1966, 1965, 1964, 1963, 1962, 1961, 1960, 1959, 1958, 1957,
   1591    // 1956
   1592    1955,
   1593    // 1954
   1594    1953, 1952,
   1595    // 1951
   1596    1950, 1949,
   1597    // 1948
   1598    1947, 1946, 1945, 1944,
   1599    // 1943
   1600    1942, 1941, 1940, 1939, 1938,
   1601    // 1937
   1602    1936, 1935,
   1603    // 1934
   1604    1933, 1932,
   1605    // 1930-1931
   1606    1929, 1928, 1927, 1926, 1925,
   1607    // 1923-1924
   1608    1922, 1921, 1920, 1919,
   1609    // 1917-1918
   1610    1916, 1915,
   1611    // 1914
   1612    1913, 1912, 1911, 1910, 1909, 1908, 1907, 1906, 1905, 1904, 1903, 1902, 1901, 1900, 1899, 1898,
   1613    1897, 1896,
   1614    // 1894-1895
   1615    1893, 1892,
   1616    // 1891
   1617    1890,
   1618    // 1888-1889
   1619    1887, 1886, 1885,
   1620    // 1884
   1621    1883, 1882, 1881, 1880,
   1622    // 1879
   1623    1878, 1877,
   1624    // 1876
   1625    1875, 1874, 1873, 1872, 1871,
   1626    // 1870
   1627    1869, 1868, 1867, 1866, 1865, 1864, 1863, 1862,
   1628    // 1861
   1629    1860, 1859,
   1630    // 1858
   1631    1857, 1856,
   1632    // 1853-1855
   1633    1852,
   1634    // 1851
   1635    1850,
   1636    // 1849
   1637    1848, 1847,
   1638    // 1845-1846
   1639    1844, 1843, 1842, 1841,
   1640    // 1840
   1641    1839,
   1642    // 1838
   1643    1837,
   1644    // 1836
   1645    1835, 1834, 1833,
   1646    // 1832
   1647    1831, 1830, 1829, 1828, 1827,
   1648    // 1824-1826
   1649    1823, 1822,
   1650    // 1821
   1651    1820,
   1652    // 1819
   1653    1818, 1817, 1816, 1815,
   1654    // 1813-1814
   1655    1812,
   1656    // 1811
   1657    1810,
   1658    // 1809
   1659    1808,
   1660    // 1807
   1661    1806, 1805, 1804, 1803, 1802, 1801, 1800, 1799, 1798, 1797,
   1662    // 1795-1796
   1663    1794, 1793, 1792, 1791, 1790,
   1664    // 1789
   1665    1788, 1787, 1786, 1785, 1784, 1783,
   1666    // 1782
   1667    1781, 1780, 1779, 1778, 1777, 1776, 1775, 1774, 1773, 1772,
   1668    // 1771
   1669    1770,
   1670    // 1769
   1671    1768, 1767, 1766, 1765, 1764, 1763, 1762, 1761, 1760, 1759, 1758, 1757, 1756,
   1672    // 1755
   1673    1754,
   1674    // 1752-1753
   1675    1751, 1750, 1749, 1748, 1747, 1746, 1745,
   1676    // 1744
   1677    1743, 1742, 1741, 1740, 1739, 1738, 1737, 1736, 1735, 1734, 1733,
   1678    // 1732
   1679    1731, 1730,
   1680    // 1729
   1681    1728, 1727, 1726, 1725, 1724,
   1682    // 1723
   1683    1722, 1721, 1720,
   1684    // 1718-1719
   1685    1717, 1716, 1715, 1714, 1713,
   1686    // 1711-1712
   1687    1710, 1709, 1708, 1707, 1706, 1705, 1704, 1703, 1702,
   1688    // 1701
   1689    1700,
   1690    // 1699
   1691    1698, 1697, 1696, 1695,
   1692    // 1694
   1693    1693,
   1694    // 1690-1692
   1695    1689,
   1696    // 1688
   1697    1687, 1686,
   1698    // 1685
   1699    1684,
   1700    // 1682-1683
   1701    1681, 1680, 1679, 1678, 1677, 1676, 1675, 1674, 1673, 1672,
   1702    // 1671
   1703    1670,
   1704    // 1669
   1705    1668, 1667, 1666, 1665,
   1706    // 1664
   1707    1663,
   1708    // 1662
   1709    1661, 1660, 1659, 1658,
   1710    // 1657
   1711    1656, 1655, 1654, 1653, 1652, 1651,
   1712    // 1650
   1713    1649, 1648, 1647, 1646, 1645,
   1714    // 1644
   1715    1643, 1642,
   1716    // 1641
   1717    1640, 1639, 1638,
   1718    // 1636-1637
   1719    1635, 1634, 1633, 1632, 1631, 1630, 1629,
   1720    // 1627-1628
   1721    1626, 1625, 1624, 1623, 1622, 1621,
   1722    // 1619-1620
   1723    1618,
   1724    // 1614-1617
   1725    1613, 1612,
   1726    // 1610-1611
   1727    1609, 1608, 1607,
   1728    // 1606
   1729    1605,
   1730    // 1601-1604
   1731    1600, 1599, 1598,
   1732    // 1597
   1733    1596, 1595, 1594,
   1734    // 1592-1593
   1735    1591,
   1736    // 1590
   1737    1589, 1588, 1587, 1586, 1585, 1584, 1583,
   1738    // 1581-1582
   1739    1580, 1579, 1578,
   1740    // 1571-1577
   1741    1570,
   1742    // 1569
   1743    1568, 1567, 1566, 1565, 1564,
   1744    // 1562-1563
   1745    1561, 1560, 1559,
   1746    // 1558
   1747    1557,
   1748    // 1556
   1749    1555, 1554, 1553, 1552,
   1750    // 1550-1551
   1751    1549, 1548, 1547, 1546, 1545, 1544, 1543, 1542,
   1752    // 1541
   1753    1540,
   1754    // 1538-1539
   1755    1537, 1536, 1535,
   1756    // 1533-1534
   1757    1532, 1531, 1530, 1529, 1528,
   1758    // 1527
   1759    1526,
   1760    // 1525
   1761    1524, 1523, 1522, 1521, 1520,
   1762    // 1518-1519
   1763    1517, 1516, 1515,
   1764    // 1514
   1765    1513, 1512, 1511, 1510,
   1766    // 1509
   1767    1508, 1507, 1506, 1505,
   1768    // 1504
   1769    1503,
   1770    // 1502
   1771    1501, 1500,
   1772    // 1498-1499
   1773    1497,
   1774    // 1496
   1775    1495,
   1776    // 1494
   1777    1493,
   1778    // 1491-1492
   1779    1490, 1489, 1488, 1487,
   1780    // 1485-1486
   1781    1484, 1483,
   1782    // 1482
   1783    1481,
   1784    // 1480
   1785    1479,
   1786    // 1477-1478
   1787    1476,
   1788    // 1475
   1789    1474, 1473, 1472, 1471, 1470, 1469,
   1790    // 1468
   1791    1467, 1466, 1465, 1464, 1463, 1462, 1461,
   1792    // 1459-1460
   1793    1458, 1457, 1456, 1455, 1454, 1453, 1452, 1451, 1450, 1449, 1448,
   1794    // 1447
   1795    1446, 1445,
   1796    // 1444
   1797    1443, 1442, 1441, 1440,
   1798    // 1439
   1799    1438,
   1800    // 1437
   1801    1436,
   1802    // 1435
   1803    1434, 1433,
   1804    // 1430-1432
   1805    1429, 1428, 1427,
   1806    // 1426
   1807    1425, 1424,
   1808    // 1423
   1809    1422, 1421, 1420, 1419,
   1810    // 1418
   1811    1417,
   1812    // 1416
   1813    1415, 1414, 1413,
   1814    // 1412
   1815    1411, 1410, 1409, 1408, 1407, 1406, 1405, 1404,
   1816    // 1403
   1817    1402, 1401, 1400,
   1818    // 1399
   1819    1398, 1397, 1396, 1395, 1394, 1393,
   1820    // 1392
   1821    1391, 1390, 1389, 1388,
   1822    // 1387
   1823    1386, 1385, 1384, 1383,
   1824    // 1382
   1825    1381,
   1826    // 1380
   1827    1379, 1378, 1377,
   1828    // 1376
   1829    1375, 1374,
   1830    // 1371-1373
   1831    1370, 1369,
   1832    // 1367-1368
   1833    1366,
   1834    // 1365
   1835    1364,
   1836    // 1362-1363
   1837    1361, 1360,
   1838    // 1359
   1839    1358, 1357, 1356,
   1840    // 1355
   1841    1354, 1353, 1352, 1351, 1350,
   1842    // 1349
   1843    1348, 1347, 1346, 1345, 1344,
   1844    // 1341-1343
   1845    1340, 1339, 1338, 1337, 1336, 1335, 1334,
   1846    // 1332-1333
   1847    1331, 1330,
   1848    // 1328-1329
   1849    1327,
   1850    // 1322-1326
   1851    1321, 1320, 1319, 1318, 1317, 1316, 1315,
   1852    // 1313-1314
   1853    1312, 1311, 1310, 1309,
   1854    // 1308
   1855    1307, 1306, 1305, 1304, 1303, 1302, 1301,
   1856    // 1300
   1857    1299, 1298, 1297, 1296, 1295, 1294, 1293, 1292, 1291,
   1858    // 1290
   1859    1289,
   1860    // 1288
   1861    1287,
   1862    // 1286
   1863    1285, 1284, 1283, 1282, 1281, 1280, 1279, 1278, 1277,
   1864    // 1276
   1865    1275, 1274, 1273,
   1866    // 1272
   1867    1271, 1270, 1269,
   1868    // 1268
   1869    1267, 1266, 1265, 1264,
   1870    // 1263
   1871    1262, 1261, 1260, 1259,
   1872    // 1257-1258
   1873    1256, 1255, 1254,
   1874    // 1253
   1875    1252, 1251, 1250, 1249, 1248, 1247, 1246, 1245, 1244,
   1876    // 1243
   1877    1242, 1241, 1240,
   1878    // 1239
   1879    1238,
   1880    // 1237
   1881    1236,
   1882    // 1235
   1883    1234, 1233, 1232, 1231, 1230,
   1884    // 1229
   1885    1228,
   1886    // 1227
   1887    1226, 1225, 1224, 1223, 1222, 1221,
   1888    // 1220
   1889    1219,
   1890    // 1218
   1891    1217, 1216, 1215, 1214,
   1892    // 1213
   1893    1212, 1211, 1210, 1209, 1208, 1207, 1206,
   1894    // 1204-1205
   1895    1203, 1202, 1201, 1200, 1199, 1198, 1197, 1196, 1195, 1194, 1193,
   1896    // 1191-1192
   1897    1190, 1189, 1188, 1187, 1186,
   1898    // 1185
   1899    1184,
   1900    // 1182-1183
   1901    1181, 1180, 1179,
   1902    // 1178
   1903    1177,
   1904    // 1176
   1905    1175, 1174, 1173, 1172, 1171, 1170, 1169, 1168,
   1906    // 1167
   1907    1166, 1165, 1164, 1163, 1162, 1161,
   1908    // 1160
   1909    1159,
   1910    // 1157-1158
   1911    1156,
   1912    // 1154-1155
   1913    1153, 1152,
   1914    // 1150-1151
   1915    1149, 1148, 1147,
   1916    // 1146
   1917    1145,
   1918    // 1140-1144
   1919    1139,
   1920    // 1136-1138
   1921    1135, 1134,
   1922    // 1132-1133
   1923    1131, 1130, 1129, 1128, 1127,
   1924    // 1126
   1925    1125, 1124, 1123,
   1926    // 1122
   1927    1121,
   1928    // 1120
   1929    1119, 1118, 1117,
   1930    // 1116
   1931    1115, 1114, 1113,
   1932    // 1112
   1933    1111, 1110, 1109, 1108, 1107, 1106,
   1934    // 1105
   1935    1104, 1103, 1102, 1101, 1100, 1099, 1098,
   1936    // 1096-1097
   1937    1095, 1094, 1093, 1092,
   1938    // 1090-1091
   1939    1089, 1088, 1087, 1086, 1085, 1084, 1083, 1082,
   1940    // 1081
   1941    1080, 1079, 1078,
   1942    // 1077
   1943    1076, 1075, 1074, 1073, 1072, 1071, 1070, 1069, 1068, 1067,
   1944    // 1066
   1945    1065, 1064, 1063, 1062, 1061, 1060, 1059, 1058, 1057, 1056, 1055, 1054, 1053, 1052, 1051, 1050,
   1946    1049, 1048, 1047, 1046, 1045, 1044, 1043,
   1947    // 1042
   1948    1041, 1040,
   1949    // 1039
   1950    1038, 1037, 1036, 1035, 1034, 1033,
   1951    // 1032
   1952    1031, 1030, 1029,
   1953    // 1028
   1954    1027, 1026, 1025,
   1955    // 1023-1024
   1956    1022, 1021, 1020,
   1957    // 1019
   1958    1018, 1017, 1016,
   1959    // 1015
   1960    1014, 1013,
   1961    // 1011-1012
   1962    1010, 1009, 1008, 1007, 1006, 1005, 1004,
   1963    // 1003
   1964    1002, 1001, 1000, 999, 998, 997, 996,
   1965    // 995
   1966    994, 993,
   1967    // 992
   1968    991,
   1969    // 990
   1970    989,
   1971    // 988
   1972    987, 986, 985, 984, 983, 982, 981, 980, 979, 978,
   1973    // 977
   1974    976, 975, 974,
   1975    // 972-973
   1976    971,
   1977    // 970
   1978    969, 968, 967, 966, 965, 964, 963, 962,
   1979    // 960-961
   1980    959, 958, 957, 956, 955, 954, 953, 952, 951, 950, 949, 948,
   1981    // 947
   1982    946, 945, 944, 943, 942, 941, 940, 939, 938, 937, 936, 935, 934, 933, 932, 931,
   1983    930, 929, 928, 927, 926, 925, 924, 923, 922, 921, 920, 919, 918, 917, 916, 915,
   1984    914, 913, 912, 911, 910, 909, 908, 907,
   1985    // 906
   1986    905,
   1987    // 904
   1988    903, 902, 901,
   1989    // 900
   1990    899,
   1991    // 897-898
   1992    896, 895, 894, 893, 892, 891, 890, 889,
   1993    // 888
   1994    887, 886, 885, 884, 883, 882, 881, 880, 879,
   1995    // 878
   1996    877, 876,
   1997    // 875
   1998    874, 873, 872, 871, 870, 869, 868, 867, 866, 865, 864,
   1999    // 863
   2000    862, 861, 860, 859,
   2001    // 858
   2002    857, 856, 855, 854, 853, 852, 851,
   2003    // 850
   2004    849,
   2005    // 847-848
   2006    846, 845, 844, 843, 842, 841, 840, 839, 838, 837, 836, 835,
   2007    // 834
   2008    833, 832, 831, 830, 829, 828, 827, 826, 825, 824, 823, 822, 821,
   2009    // 820
   2010    819, 818, 817, 816, 815, 814, 813, 812, 811, 810, 809, 808, 807, 806, 805, 804,
   2011    803, 802, 801, 800, 799, 798, 797, 796, 795, 794, 793, 792, 791, 790, 789, 788,
   2012    787, 786, 785, 784, 783, 782, 781, 780, 779, 778, 777, 776,
   2013    // 775
   2014    774, 773, 772,
   2015    // 771
   2016    770, 769, 768, 767, 766, 765, 764, 763, 762, 761, 760, 759, 758, 757, 756,
   2017    // 755
   2018    754, 753, 752,
   2019    // 751
   2020    750, 749,
   2021    // 747-748
   2022    746,
   2023    // 745
   2024    744,
   2025    // 743
   2026    742, 741, 740, 739,
   2027    // 737-738
   2028    736, 735, 734, 733, 732, 731,
   2029    // 729-730
   2030    728, 727, 726, 725, 724, 723, 722, 721, 720, 719,
   2031    // 718
   2032    717, 716, 715, 714, 713, 712, 711, 710, 709, 708, 707, 706, 705, 704, 703, 702,
   2033    701, 700,
   2034    // 699
   2035    698, 697, 696, 695,
   2036    // 694
   2037    693, 692, 691, 690, 689, 688, 687, 686, 685,
   2038    // 683-684
   2039    682, 681, 680,
   2040    // 679
   2041    678,
   2042    // 677
   2043    676,
   2044    // 675
   2045    674, 673, 672, 671, 670, 669, 668, 667, 666, 665, 664, 663,
   2046    // 661-662
   2047    660, 659, 658, 657,
   2048    // 656
   2049    655, 654,
   2050    // 652-653
   2051    651,
   2052    // 650
   2053    649, 648,
   2054    // 647
   2055    646, 645, 644, 643, 642,
   2056    // 641
   2057    640, 639, 638, 637, 636, 635, 634, 633, 632, 631, 630, 629, 628,
   2058    // 626-627
   2059    625,
   2060    // 624
   2061    623, 622, 621, 620, 619, 618, 617, 616, 615, 614,
   2062    // 613
   2063    612,
   2064    // 611
   2065    610, 609, 608, 607, 606, 605,
   2066    // 604
   2067    603, 602,
   2068    // 601
   2069    600, 599, 598, 597,
   2070    // 595-596
   2071    594, 593, 592, 591, 590, 589,
   2072    // 588
   2073    587,
   2074    // 585-586
   2075    584, 583,
   2076    // 582
   2077    581, 580, 579, 578, 577, 576, 575,
   2078    // 574
   2079    573, 572,
   2080    // 570-571
   2081    569, 568,
   2082    // 567
   2083    566, 565, 564,
   2084    // 562-563
   2085    561, 560, 559, 558,
   2086    // 557
   2087    556, 555, 554, 553, 552, 551, 550, 549, 548, 547, 546, 545, 544,
   2088    // 543
   2089    542, 541, 540, 539, 538,
   2090    // 536-537
   2091    535, 534, 533, 532, 531,
   2092    // 528-530
   2093    527,
   2094    // 526
   2095    525, 524,
   2096    // 523
   2097    522, 521, 520, 519,
   2098    // 516-518
   2099    515,
   2100    // 514
   2101    513, 512, 511, 510, 509, 508, 507, 506, 505, 504, 503, 502, 501,
   2102    // 500
   2103    499, 498, 497, 496, 495, 494,
   2104    // 493
   2105    492, 491, 490, 489, 488, 487,
   2106    // 486
   2107    485, 484, 483, 482, 481, 480, 479, 478, 477, 476, 475, 474, 473, 472, 471, 470,
   2108    469, 468,
   2109    // 467
   2110    466, 465, 464, 463, 462, 461, 460,
   2111    // 459
   2112    458, 457, 456, 455, 454,
   2113    // 453
   2114    452, 451, 450, 449, 448, 447, 446, 445, 444, 443, 442, 441, 440, 439, 438, 437,
   2115    436, 435, 434, 433,
   2116    // 432
   2117    431, 430, 429, 428,
   2118    // 427
   2119    426,
   2120    // 425
   2121    424, 423, 422,
   2122    // 421
   2123    420, 419, 418, 417, 416, 415, 414, 413, 412, 411, 410, 409, 408, 407, 406, 405,
   2124    404, 403, 402, 401, 400,
   2125    // 399
   2126    398, 397, 396, 395, 394, 393, 392, 391, 390, 389, 388, 387,
   2127    // 386
   2128    385, 384, 383, 382, 381, 380, 379, 378, 377, 376, 375, 374, 373, 372, 371, 370,
   2129    369, 368,
   2130    // 367
   2131    366, 365,
   2132    // 364
   2133    363, 362, 361, 360, 359, 358, 357,
   2134    // 356
   2135    355, 354, 353, 352, 351, 350, 349, 348, 347,
   2136    // 346
   2137    345,
   2138    // 344
   2139    343, 342,
   2140    // 341
   2141    340,
   2142    // 339
   2143    338, 337, 336, 335,
   2144    // 334
   2145    333, 332,
   2146    // 331
   2147    330, 329,
   2148    // 328
   2149    327, 326, 325,
   2150    // 324
   2151    323,
   2152    // 322
   2153    321,
   2154    // 318-320
   2155    317, 316, 315, 314, 313, 312,
   2156    // 311
   2157    310, 309, 308, 307,
   2158    // 306
   2159    305, 304, 303, 302, 301, 300,
   2160    // 298-299
   2161    297, 296, 295, 294, 293, 292,
   2162    // 290-291
   2163    289, 288, 287,
   2164    // 286
   2165    285, 284, 283, 282, 281, 280,
   2166    // 279
   2167    278, 277, 276, 275, 274, 273, 272, 271, 270, 269, 268, 267, 266, 265, 264, 263,
   2168    262, 261, 260, 259,
   2169    // 258
   2170    257,
   2171    // 256
   2172    255, 254,
   2173    // 253
   2174    252,
   2175    // 251
   2176    250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240, 239,
   2177    // 238
   2178    237, 236, 235, 234, 233,
   2179    // 232
   2180    231, 230, 229, 228, 227, 226, 225, 224, 223,
   2181    // 222
   2182    221, 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, 210,
   2183    // 209
   2184    208,
   2185    // 207
   2186    206, 205,
   2187    // 204
   2188    203,
   2189    // 201-202
   2190    200,
   2191    // 199
   2192    198, 197,
   2193    // 196
   2194    195,
   2195    // 194
   2196    193, 192,
   2197    // 191
   2198    190, 189, 188, 187, 186,
   2199    // 185
   2200    184, 183,
   2201    // 182
   2202    181, 180, 179, 178, 177, 176, 175, 174,
   2203    // 173
   2204    172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161,
   2205    // 159-160
   2206    158, 157, 156, 155, 154, 153, 152, 151,
   2207    // 149-150
   2208    148, 147, 146, 145, 144, 143,
   2209    // 142
   2210    141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131,
   2211    // 130
   2212    129, 128,
   2213    // 127
   2214    126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111,
   2215    // 110
   2216    109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94,
   2217    93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78,
   2218    77, 76, 75, 74,
   2219    // 73
   2220    72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57,
   2221    56, 55, 54, 53, 52, 51, 50, 49,
   2222    // 48
   2223    47, 46, 45, 44,
   2224    // 43
   2225    42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27,
   2226    26, 25, 24, 23, 22,
   2227    // 20-21
   2228    19, 18, 17, 16, 15, 14, 13, 12,
   2229    // 11
   2230    10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
   2231    // 0
   2232  },
   2233  (const int[]) {  // 900
   2234    2190, 2189, 2188, 2187,
   2235    // 2186
   2236    2185,
   2237    // 2184
   2238    2183, 2182,
   2239    // 2181
   2240    2180, 2179, 2178, 2177,
   2241    // 2176
   2242    2175,
   2243    // 2174
   2244    2173,
   2245    // 2169-2172
   2246    2168,
   2247    // 2167
   2248    2166,
   2249    // 2164-2165
   2250    2163,
   2251    // 2162
   2252    2161,
   2253    // 2160
   2254    2159, 2158,
   2255    // 2156-2157
   2256    2155, 2154,
   2257    // 2152-2153
   2258    2151, 2150, 2149, 2148,
   2259    // 2147
   2260    2146, 2145,
   2261    // 2144
   2262    2143, 2142, 2141, 2140, 2139, 2138, 2137, 2136, 2135, 2134, 2133,
   2263    // 2132
   2264    2131,
   2265    // 2130
   2266    2129, 2128,
   2267    // 2127
   2268    2126, 2125, 2124,
   2269    // 2123
   2270    2122, 2121, 2120, 2119, 2118, 2117, 2116, 2115, 2114, 2113, 2112, 2111, 2110, 2109, 2108, 2107,
   2271    2106, 2105, 2104, 2103, 2102, 2101, 2100,
   2272    // 2099
   2273    2098, 2097,
   2274    // 2096
   2275    2095, 2094,
   2276    // 2093
   2277    2092, 2091, 2090,
   2278    // 2089
   2279    2088, 2087,
   2280    // 2084-2086
   2281    2083,
   2282    // 2082
   2283    2081, 2080, 2079,
   2284    // 2078
   2285    2077,
   2286    // 2076
   2287    2075, 2074, 2073, 2072, 2071, 2070,
   2288    // 2069
   2289    2068, 2067, 2066, 2065, 2064, 2063, 2062, 2061, 2060, 2059, 2058, 2057, 2056,
   2290    // 2054-2055
   2291    2053, 2052, 2051, 2050, 2049, 2048, 2047, 2046, 2045, 2044, 2043, 2042, 2041, 2040, 2039, 2038,
   2292    2037, 2036, 2035,
   2293    // 2034
   2294    2033, 2032, 2031, 2030,
   2295    // 2029
   2296    2028,
   2297    // 2026-2027
   2298    2025, 2024, 2023, 2022, 2021,
   2299    // 2019-2020
   2300    2018, 2017, 2016,
   2301    // 2015
   2302    2014,
   2303    // 2012-2013
   2304    2011, 2010, 2009, 2008, 2007, 2006,
   2305    // 2005
   2306    2004, 2003, 2002,
   2307    // 2001
   2308    2000,
   2309    // 1999
   2310    1998, 1997, 1996, 1995,
   2311    // 1994
   2312    1993, 1992,
   2313    // 1991
   2314    1990, 1989, 1988, 1987,
   2315    // 1986
   2316    1985, 1984, 1983,
   2317    // 1982
   2318    1981,
   2319    // 1980
   2320    1979, 1978,
   2321    // 1977
   2322    1976, 1975, 1974, 1973, 1972, 1971, 1970, 1969, 1968, 1967, 1966, 1965, 1964, 1963, 1962, 1961,
   2323    1960,
   2324    // 1959
   2325    1958,
   2326    // 1957
   2327    1956,
   2328    // 1955
   2329    1954,
   2330    // 1953
   2331    1952,
   2332    // 1951
   2333    1950, 1949,
   2334    // 1948
   2335    1947, 1946,
   2336    // 1945
   2337    1944, 1943, 1942,
   2338    // 1941
   2339    1940, 1939, 1938, 1937, 1936,
   2340    // 1935
   2341    1934,
   2342    // 1933
   2343    1932, 1931, 1930, 1929,
   2344    // 1928
   2345    1927,
   2346    // 1926
   2347    1925,
   2348    // 1924
   2349    1923, 1922, 1921,
   2350    // 1920
   2351    1919, 1918, 1917,
   2352    // 1916
   2353    1915,
   2354    // 1914
   2355    1913, 1912, 1911,
   2356    // 1909-1910
   2357    1908, 1907,
   2358    // 1906
   2359    1905, 1904, 1903, 1902,
   2360    // 1901
   2361    1900, 1899,
   2362    // 1898
   2363    1897, 1896, 1895, 1894, 1893, 1892, 1891,
   2364    // 1890
   2365    1889, 1888, 1887,
   2366    // 1885-1886
   2367    1884, 1883, 1882, 1881, 1880, 1879, 1878, 1877,
   2368    // 1876
   2369    1875, 1874, 1873, 1872, 1871, 1870,
   2370    // 1869
   2371    1868,
   2372    // 1867
   2373    1866,
   2374    // 1865
   2375    1864, 1863,
   2376    // 1862
   2377    1861, 1860, 1859, 1858, 1857, 1856,
   2378    // 1855
   2379    1854, 1853, 1852,
   2380    // 1851
   2381    1850, 1849, 1848, 1847, 1846, 1845, 1844, 1843,
   2382    // 1842
   2383    1841, 1840, 1839, 1838, 1837,
   2384    // 1836
   2385    1835, 1834, 1833, 1832, 1831, 1830,
   2386    // 1829
   2387    1828,
   2388    // 1827
   2389    1826, 1825, 1824, 1823,
   2390    // 1821-1822
   2391    1820, 1819,
   2392    // 1818
   2393    1817, 1816, 1815,
   2394    // 1814
   2395    1813, 1812, 1811, 1810, 1809, 1808, 1807,
   2396    // 1806
   2397    1805,
   2398    // 1804
   2399    1803, 1802,
   2400    // 1801
   2401    1800, 1799, 1798, 1797,
   2402    // 1796
   2403    1795, 1794, 1793, 1792, 1791, 1790,
   2404    // 1788-1789
   2405    1787,
   2406    // 1786
   2407    1785,
   2408    // 1784
   2409    1783,
   2410    // 1782
   2411    1781, 1780, 1779, 1778, 1777, 1776, 1775, 1774, 1773, 1772, 1771,
   2412    // 1769-1770
   2413    1768, 1767, 1766, 1765, 1764, 1763, 1762, 1761,
   2414    // 1760
   2415    1759, 1758, 1757,
   2416    // 1756
   2417    1755, 1754, 1753, 1752, 1751, 1750,
   2418    // 1749
   2419    1748, 1747, 1746, 1745,
   2420    // 1744
   2421    1743, 1742,
   2422    // 1740-1741
   2423    1739, 1738, 1737, 1736, 1735, 1734, 1733, 1732, 1731, 1730, 1729, 1728,
   2424    // 1727
   2425    1726, 1725, 1724, 1723, 1722, 1721, 1720,
   2426    // 1719
   2427    1718, 1717, 1716, 1715, 1714, 1713, 1712, 1711, 1710, 1709, 1708, 1707, 1706, 1705, 1704, 1703,
   2428    1702, 1701, 1700,
   2429    // 1699
   2430    1698, 1697, 1696,
   2431    // 1695
   2432    1694, 1693, 1692, 1691, 1690, 1689, 1688, 1687, 1686, 1685, 1684, 1683, 1682, 1681, 1680, 1679,
   2433    1678, 1677, 1676, 1675,
   2434    // 1674
   2435    1673, 1672, 1671, 1670, 1669, 1668, 1667, 1666, 1665, 1664, 1663, 1662, 1661,
   2436    // 1660
   2437    1659, 1658, 1657, 1656, 1655, 1654, 1653, 1652, 1651,
   2438    // 1650
   2439    1649, 1648, 1647, 1646, 1645, 1644, 1643, 1642,
   2440    // 1641
   2441    1640, 1639, 1638, 1637, 1636, 1635, 1634, 1633, 1632, 1631, 1630, 1629, 1628, 1627, 1626,
   2442    // 1623-1625
   2443    1622, 1621, 1620,
   2444    // 1619
   2445    1618, 1617, 1616, 1615, 1614, 1613, 1612,
   2446    // 1611
   2447    1610, 1609, 1608, 1607, 1606,
   2448    // 1604-1605
   2449    1603, 1602, 1601, 1600, 1599, 1598, 1597, 1596, 1595,
   2450    // 1592-1594
   2451    1591,
   2452    // 1589-1590
   2453    1588, 1587, 1586, 1585, 1584, 1583, 1582,
   2454    // 1581
   2455    1580,
   2456    // 1579
   2457    1578, 1577,
   2458    // 1576
   2459    1575,
   2460    // 1574
   2461    1573,
   2462    // 1569-1572
   2463    1568, 1567,
   2464    // 1566
   2465    1565, 1564, 1563, 1562, 1561,
   2466    // 1557-1560
   2467    1556, 1555, 1554, 1553, 1552, 1551,
   2468    // 1550
   2469    1549, 1548, 1547, 1546, 1545,
   2470    // 1544
   2471    1543, 1542, 1541, 1540, 1539, 1538,
   2472    // 1537
   2473    1536, 1535, 1534, 1533, 1532,
   2474    // 1531
   2475    1530,
   2476    // 1528-1529
   2477    1527, 1526, 1525, 1524, 1523, 1522, 1521, 1520,
   2478    // 1519
   2479    1518, 1517, 1516, 1515, 1514, 1513, 1512, 1511,
   2480    // 1510
   2481    1509, 1508, 1507, 1506, 1505,
   2482    // 1504
   2483    1503, 1502, 1501, 1500, 1499, 1498, 1497,
   2484    // 1496
   2485    1495, 1494, 1493, 1492, 1491, 1490, 1489, 1488, 1487, 1486, 1485, 1484, 1483,
   2486    // 1481-1482
   2487    1480, 1479, 1478, 1477, 1476, 1475, 1474, 1473, 1472,
   2488    // 1471
   2489    1470, 1469, 1468, 1467, 1466, 1465, 1464,
   2490    // 1463
   2491    1462, 1461, 1460,
   2492    // 1459
   2493    1458,
   2494    // 1457
   2495    1456, 1455,
   2496    // 1453-1454
   2497    1452, 1451,
   2498    // 1450
   2499    1449, 1448, 1447, 1446, 1445, 1444, 1443, 1442, 1441,
   2500    // 1440
   2501    1439, 1438, 1437, 1436, 1435, 1434, 1433,
   2502    // 1432
   2503    1431, 1430, 1429, 1428, 1427, 1426, 1425,
   2504    // 1424
   2505    1423, 1422, 1421, 1420, 1419,
   2506    // 1418
   2507    1417, 1416, 1415,
   2508    // 1413-1414
   2509    1412,
   2510    // 1410-1411
   2511    1409, 1408, 1407, 1406, 1405,
   2512    // 1403-1404
   2513    1402, 1401, 1400,
   2514    // 1398-1399
   2515    1397,
   2516    // 1396
   2517    1395, 1394, 1393, 1392, 1391,
   2518    // 1390
   2519    1389, 1388,
   2520    // 1387
   2521    1386, 1385, 1384, 1383, 1382,
   2522    // 1381
   2523    1380,
   2524    // 1379
   2525    1378,
   2526    // 1377
   2527    1376,
   2528    // 1375
   2529    1374, 1373, 1372, 1371, 1370, 1369, 1368, 1367, 1366, 1365, 1364, 1363, 1362, 1361, 1360, 1359,
   2530    1358, 1357, 1356, 1355, 1354, 1353, 1352, 1351, 1350, 1349, 1348, 1347, 1346, 1345,
   2531    // 1343-1344
   2532    1342, 1341, 1340, 1339,
   2533    // 1338
   2534    1337, 1336, 1335,
   2535    // 1333-1334
   2536    1332, 1331, 1330, 1329,
   2537    // 1325-1328
   2538    1324, 1323, 1322,
   2539    // 1320-1321
   2540    1319, 1318,
   2541    // 1317
   2542    1316, 1315, 1314,
   2543    // 1313
   2544    1312, 1311, 1310, 1309, 1308, 1307, 1306,
   2545    // 1304-1305
   2546    1303,
   2547    // 1301-1302
   2548    1300, 1299, 1298, 1297, 1296, 1295, 1294, 1293, 1292, 1291, 1290, 1289, 1288,
   2549    // 1283-1287
   2550    1282, 1281, 1280, 1279, 1278, 1277,
   2551    // 1275-1276
   2552    1274, 1273, 1272, 1271, 1270, 1269, 1268,
   2553    // 1266-1267
   2554    1265,
   2555    // 1264
   2556    1263,
   2557    // 1262
   2558    1261, 1260, 1259, 1258, 1257, 1256, 1255,
   2559    // 1254
   2560    1253,
   2561    // 1251-1252
   2562    1250,
   2563    // 1248-1249
   2564    1247, 1246, 1245, 1244, 1243, 1242,
   2565    // 1241
   2566    1240,
   2567    // 1239
   2568    1238,
   2569    // 1237
   2570    1236,
   2571    // 1234-1235
   2572    1233,
   2573    // 1232
   2574    1231, 1230, 1229, 1228, 1227,
   2575    // 1226
   2576    1225,
   2577    // 1224
   2578    1223, 1222, 1221,
   2579    // 1220
   2580    1219,
   2581    // 1218
   2582    1217, 1216, 1215, 1214, 1213, 1212, 1211,
   2583    // 1209-1210
   2584    1208, 1207, 1206, 1205, 1204,
   2585    // 1203
   2586    1202, 1201, 1200,
   2587    // 1198-1199
   2588    1197,
   2589    // 1196
   2590    1195, 1194,
   2591    // 1193
   2592    1192, 1191, 1190, 1189,
   2593    // 1188
   2594    1187,
   2595    // 1184-1186
   2596    1183, 1182, 1181, 1180,
   2597    // 1178-1179
   2598    1177, 1176, 1175, 1174, 1173, 1172, 1171, 1170,
   2599    // 1168-1169
   2600    1167,
   2601    // 1166
   2602    1165, 1164, 1163, 1162,
   2603    // 1159-1161
   2604    1158,
   2605    // 1157
   2606    1156, 1155, 1154, 1153,
   2607    // 1148-1152
   2608    1147,
   2609    // 1146
   2610    1145, 1144, 1143, 1142, 1141,
   2611    // 1140
   2612    1139, 1138, 1137, 1136, 1135,
   2613    // 1133-1134
   2614    1132, 1131,
   2615    // 1130
   2616    1129,
   2617    // 1128
   2618    1127,
   2619    // 1126
   2620    1125,
   2621    // 1123-1124
   2622    1122, 1121, 1120, 1119,
   2623    // 1117-1118
   2624    1116, 1115, 1114, 1113,
   2625    // 1111-1112
   2626    1110, 1109,
   2627    // 1108
   2628    1107, 1106, 1105, 1104, 1103, 1102, 1101, 1100, 1099, 1098, 1097, 1096,
   2629    // 1095
   2630    1094, 1093, 1092, 1091, 1090, 1089, 1088,
   2631    // 1086-1087
   2632    1085, 1084, 1083, 1082,
   2633    // 1080-1081
   2634    1079, 1078,
   2635    // 1077
   2636    1076, 1075,
   2637    // 1073-1074
   2638    1072, 1071,
   2639    // 1068-1070
   2640    1067, 1066,
   2641    // 1065
   2642    1064,
   2643    // 1063
   2644    1062, 1061,
   2645    // 1060
   2646    1059,
   2647    // 1058
   2648    1057, 1056, 1055,
   2649    // 1053-1054
   2650    1052, 1051, 1050, 1049,
   2651    // 1048
   2652    1047, 1046,
   2653    // 1044-1045
   2654    1043, 1042,
   2655    // 1039-1041
   2656    1038, 1037, 1036,
   2657    // 1035
   2658    1034, 1033, 1032,
   2659    // 1031
   2660    1030, 1029, 1028, 1027, 1026, 1025, 1024,
   2661    // 1022-1023
   2662    1021, 1020,
   2663    // 1018-1019
   2664    1017, 1016, 1015, 1014,
   2665    // 1013
   2666    1012, 1011, 1010, 1009, 1008, 1007,
   2667    // 1006
   2668    1005,
   2669    // 1004
   2670    1003,
   2671    // 1001-1002
   2672    1000,
   2673    // 999
   2674    998, 997,
   2675    // 995-996
   2676    994, 993, 992, 991, 990, 989,
   2677    // 988
   2678    987, 986,
   2679    // 985
   2680    984,
   2681    // 982-983
   2682    981,
   2683    // 973-980
   2684    972,
   2685    // 971
   2686    970, 969,
   2687    // 968
   2688    967, 966, 965, 964, 963,
   2689    // 959-962
   2690    958,
   2691    // 954-957
   2692    953, 952, 951, 950,
   2693    // 948-949
   2694    947, 946,
   2695    // 945
   2696    944,
   2697    // 943
   2698    942, 941,
   2699    // 938-940
   2700    937, 936, 935,
   2701    // 933-934
   2702    932, 931,
   2703    // 930
   2704    929, 928, 927, 926, 925,
   2705    // 923-924
   2706    922, 921, 920, 919,
   2707    // 917-918
   2708    916, 915, 914, 913,
   2709    // 912
   2710    911, 910, 909, 908,
   2711    // 907
   2712    906,
   2713    // 905
   2714    904,
   2715    // 903
   2716    902, 901, 900,
   2717    // 899
   2718    898, 897,
   2719    // 896
   2720    895,
   2721    // 894
   2722    893, 892,
   2723    // 889-891
   2724    888,
   2725    // 887
   2726    886,
   2727    // 885
   2728    884, 883, 882,
   2729    // 880-881
   2730    879, 878,
   2731    // 877
   2732    876, 875, 874,
   2733    // 873
   2734    872,
   2735    // 871
   2736    870, 869,
   2737    // 868
   2738    867, 866, 865, 864, 863, 862, 861, 860, 859, 858, 857,
   2739    // 856
   2740    855, 854, 853, 852, 851,
   2741    // 850
   2742    849,
   2743    // 848
   2744    847, 846, 845, 844, 843,
   2745    // 842
   2746    841, 840, 839, 838, 837, 836, 835, 834,
   2747    // 833
   2748    832, 831, 830, 829,
   2749    // 827-828
   2750    826, 825, 824, 823, 822, 821, 820, 819, 818, 817, 816, 815, 814,
   2751    // 812-813
   2752    811, 810,
   2753    // 809
   2754    808, 807, 806, 805, 804, 803,
   2755    // 799-802
   2756    798,
   2757    // 796-797
   2758    795,
   2759    // 793-794
   2760    792,
   2761    // 791
   2762    790, 789, 788, 787, 786, 785,
   2763    // 784
   2764    783, 782,
   2765    // 781
   2766    780, 779, 778,
   2767    // 777
   2768    776,
   2769    // 775
   2770    774, 773, 772, 771, 770,
   2771    // 767-769
   2772    766, 765, 764,
   2773    // 763
   2774    762, 761, 760, 759, 758, 757, 756, 755, 754,
   2775    // 753
   2776    752, 751, 750, 749,
   2777    // 748
   2778    747, 746, 745,
   2779    // 744
   2780    743, 742, 741,
   2781    // 740
   2782    739, 738,
   2783    // 737
   2784    736, 735, 734, 733,
   2785    // 732
   2786    731,
   2787    // 730
   2788    729, 728, 727, 726,
   2789    // 725
   2790    724,
   2791    // 718-723
   2792    717, 716, 715,
   2793    // 714
   2794    713, 712, 711,
   2795    // 708-710
   2796    707, 706,
   2797    // 705
   2798    704,
   2799    // 703
   2800    702, 701, 700, 699,
   2801    // 698
   2802    697, 696, 695,
   2803    // 693-694
   2804    692, 691, 690, 689, 688,
   2805    // 687
   2806    686, 685, 684,
   2807    // 682-683
   2808    681, 680, 679, 678, 677, 676, 675,
   2809    // 674
   2810    673, 672, 671, 670,
   2811    // 669
   2812    668, 667, 666, 665, 664,
   2813    // 663
   2814    662, 661,
   2815    // 659-660
   2816    658, 657, 656,
   2817    // 655
   2818    654,
   2819    // 653
   2820    652,
   2821    // 651
   2822    650, 649,
   2823    // 648
   2824    647, 646, 645, 644, 643, 642, 641, 640,
   2825    // 636-639
   2826    635, 634, 633, 632,
   2827    // 629-631
   2828    628,
   2829    // 625-627
   2830    624,
   2831    // 623
   2832    622, 621, 620,
   2833    // 617-619
   2834    616,
   2835    // 615
   2836    614,
   2837    // 613
   2838    612,
   2839    // 611
   2840    610, 609, 608, 607,
   2841    // 606
   2842    605, 604, 603, 602, 601, 600, 599, 598, 597, 596, 595, 594, 593,
   2843    // 591-592
   2844    590, 589, 588,
   2845    // 587
   2846    586, 585, 584, 583, 582, 581, 580, 579,
   2847    // 578
   2848    577, 576,
   2849    // 574-575
   2850    573, 572,
   2851    // 571
   2852    570,
   2853    // 569
   2854    568, 567, 566, 565,
   2855    // 564
   2856    563, 562, 561, 560, 559,
   2857    // 558
   2858    557,
   2859    // 556
   2860    555,
   2861    // 552-554
   2862    551, 550, 549, 548,
   2863    // 547
   2864    546, 545, 544, 543, 542, 541, 540, 539,
   2865    // 538
   2866    537, 536,
   2867    // 534-535
   2868    533, 532,
   2869    // 531
   2870    530, 529, 528, 527, 526, 525, 524, 523, 522, 521,
   2871    // 520
   2872    519,
   2873    // 518
   2874    517,
   2875    // 515-516
   2876    514,
   2877    // 513
   2878    512, 511, 510, 509, 508, 507,
   2879    // 506
   2880    505, 504, 503,
   2881    // 502
   2882    501,
   2883    // 500
   2884    499,
   2885    // 498
   2886    497,
   2887    // 496
   2888    495, 494, 493, 492,
   2889    // 491
   2890    490,
   2891    // 487-489
   2892    486,
   2893    // 485
   2894    484, 483,
   2895    // 480-482
   2896    479, 478, 477, 476, 475,
   2897    // 472-474
   2898    471, 470, 469,
   2899    // 468
   2900    467, 466, 465, 464,
   2901    // 463
   2902    462, 461,
   2903    // 459-460
   2904    458, 457, 456, 455, 454,
   2905    // 453
   2906    452,
   2907    // 450-451
   2908    449, 448,
   2909    // 447
   2910    446, 445,
   2911    // 444
   2912    443,
   2913    // 442
   2914    441, 440,
   2915    // 435-439
   2916    434, 433,
   2917    // 431-432
   2918    430,
   2919    // 429
   2920    428, 427, 426, 425, 424, 423, 422, 421, 420, 419,
   2921    // 418
   2922    417,
   2923    // 416
   2924    415, 414, 413, 412, 411, 410, 409, 408, 407, 406,
   2925    // 405
   2926    404, 403, 402, 401,
   2927    // 399-400
   2928    398, 397,
   2929    // 396
   2930    395, 394, 393,
   2931    // 392
   2932    391, 390, 389, 388,
   2933    // 387
   2934    386, 385,
   2935    // 383-384
   2936    382,
   2937    // 381
   2938    380, 379, 378,
   2939    // 373-377
   2940    372,
   2941    // 371
   2942    370, 369, 368, 367,
   2943    // 366
   2944    365,
   2945    // 363-364
   2946    362, 361, 360, 359, 358,
   2947    // 356-357
   2948    355,
   2949    // 354
   2950    353,
   2951    // 350-352
   2952    349,
   2953    // 347-348
   2954    346,
   2955    // 344-345
   2956    343, 342, 341,
   2957    // 340
   2958    339,
   2959    // 337-338
   2960    336, 335, 334, 333, 332, 331, 330,
   2961    // 323-329
   2962    322,
   2963    // 321
   2964    320, 319, 318,
   2965    // 317
   2966    316,
   2967    // 315
   2968    314, 313,
   2969    // 306-312
   2970    305, 304, 303, 302,
   2971    // 301
   2972    300, 299,
   2973    // 291-298
   2974    290,
   2975    // 287-289
   2976    286, 285, 284, 283,
   2977    // 282
   2978    281,
   2979    // 280
   2980    279, 278, 277, 276, 275, 274,
   2981    // 273
   2982    272, 271, 270, 269, 268, 267, 266, 265, 264, 263, 262, 261, 260, 259, 258, 257,
   2983    256, 255, 254,
   2984    // 253
   2985    252, 251, 250, 249, 248,
   2986    // 247
   2987    246, 245, 244, 243, 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, 232, 231,
   2988    230,
   2989    // 229
   2990    228, 227, 226,
   2991    // 225
   2992    224, 223, 222, 221, 220, 219, 218, 217, 216,
   2993    // 214-215
   2994    213, 212, 211, 210, 209,
   2995    // 208
   2996    207, 206, 205, 204, 203,
   2997    // 201-202
   2998    200,
   2999    // 199
   3000    198, 197, 196, 195, 194, 193, 192, 191, 190,
   3001    // 188-189
   3002    187,
   3003    // 184-186
   3004    183, 182, 181, 180, 179, 178, 177, 176, 175, 174, 173, 172,
   3005    // 170-171
   3006    169, 168, 167, 166,
   3007    // 162-165
   3008    161,
   3009    // 160
   3010    159,
   3011    // 155-158
   3012    154,
   3013    // 153
   3014    152,
   3015    // 150-151
   3016    149,
   3017    // 148
   3018    147,
   3019    // 146
   3020    145,
   3021    // 144
   3022    143,
   3023    // 142
   3024    141,
   3025    // 139-140
   3026    138, 137, 136, 135,
   3027    // 134
   3028    133, 132, 131, 130, 129,
   3029    // 128
   3030    127, 126,
   3031    // 125
   3032    124, 123,
   3033    // 121-122
   3034    120,
   3035    // 119
   3036    118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108,
   3037    // 107
   3038    106, 105, 104, 103, 102, 101,
   3039    // 100
   3040    99, 98, 97, 96, 95, 94, 93, 92,
   3041    // 91
   3042    90, 89, 88, 87, 86, 85, 84, 83, 82, 81,
   3043    // 80
   3044    79,
   3045    // 78
   3046    77, 76,
   3047    // 75
   3048    74, 73,
   3049    // 72
   3050    71, 70,
   3051    // 69
   3052    68, 67, 66, 65, 64, 63, 62, 61, 60, 59,
   3053    // 58
   3054    57,
   3055    // 56
   3056    55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45,
   3057    // 44
   3058    43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33,
   3059    // 32
   3060    31, 30, 29,
   3061    // 27-28
   3062    26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15,
   3063    // 13-14
   3064    12, 11, 10, 9, 8,
   3065    // 7
   3066    6, 5, 4, 3, 2, 1,
   3067    // 0
   3068  },
   3069  (const int[]) {  // 901
   3070    2147, 2146,
   3071    // 2139-2145
   3072    2138,
   3073    // 2137
   3074    2136, 2135,
   3075    // 2134
   3076    2133, 2132,
   3077    // 2131
   3078    2130,
   3079    // 2129
   3080    2128, 2127,
   3081    // 2126
   3082    2125,
   3083    // 2124
   3084    2123, 2122,
   3085    // 2120-2121
   3086    2119, 2118, 2117, 2116,
   3087    // 2113-2115
   3088    2112, 2111, 2110, 2109, 2108, 2107,
   3089    // 2106
   3090    2105,
   3091    // 2104
   3092    2103, 2102, 2101, 2100, 2099, 2098, 2097, 2096, 2095, 2094, 2093,
   3093    // 2092
   3094    2091, 2090,
   3095    // 2089
   3096    2088, 2087, 2086, 2085,
   3097    // 2080-2084
   3098    2079, 2078,
   3099    // 2076-2077
   3100    2075, 2074, 2073,
   3101    // 2072
   3102    2071, 2070, 2069, 2068, 2067, 2066, 2065, 2064,
   3103    // 2063
   3104    2062, 2061, 2060, 2059, 2058,
   3105    // 2057
   3106    2056, 2055,
   3107    // 2054
   3108    2053, 2052, 2051, 2050,
   3109    // 2049
   3110    2048, 2047,
   3111    // 2044-2046
   3112    2043, 2042, 2041, 2040, 2039, 2038, 2037, 2036, 2035, 2034,
   3113    // 2033
   3114    2032, 2031, 2030,
   3115    // 2029
   3116    2028, 2027, 2026, 2025, 2024, 2023,
   3117    // 2022
   3118    2021, 2020, 2019, 2018, 2017, 2016,
   3119    // 2012-2015
   3120    2011, 2010, 2009, 2008, 2007,
   3121    // 2003-2006
   3122    2002, 2001,
   3123    // 1999-2000
   3124    1998, 1997,
   3125    // 1992-1996
   3126    1991, 1990, 1989, 1988, 1987,
   3127    // 1985-1986
   3128    1984, 1983,
   3129    // 1982
   3130    1981, 1980, 1979, 1978, 1977,
   3131    // 1975-1976
   3132    1974,
   3133    // 1972-1973
   3134    1971, 1970, 1969,
   3135    // 1968
   3136    1967,
   3137    // 1966
   3138    1965, 1964, 1963, 1962, 1961, 1960,
   3139    // 1959
   3140    1958, 1957,
   3141    // 1955-1956
   3142    1954, 1953, 1952, 1951, 1950, 1949, 1948, 1947,
   3143    // 1946
   3144    1945, 1944, 1943, 1942, 1941,
   3145    // 1940
   3146    1939, 1938, 1937, 1936, 1935, 1934, 1933,
   3147    // 1932
   3148    1931, 1930, 1929, 1928,
   3149    // 1926-1927
   3150    1925, 1924, 1923, 1922,
   3151    // 1921
   3152    1920, 1919, 1918, 1917, 1916, 1915, 1914, 1913, 1912,
   3153    // 1911
   3154    1910, 1909, 1908,
   3155    // 1907
   3156    1906, 1905,
   3157    // 1904
   3158    1903,
   3159    // 1902
   3160    1901,
   3161    // 1894-1900
   3162    1893, 1892, 1891, 1890, 1889, 1888,
   3163    // 1887
   3164    1886, 1885, 1884, 1883,
   3165    // 1882
   3166    1881, 1880, 1879, 1878, 1877, 1876, 1875,
   3167    // 1873-1874
   3168    1872, 1871, 1870, 1869, 1868, 1867,
   3169    // 1862-1866
   3170    1861,
   3171    // 1860
   3172    1859, 1858,
   3173    // 1856-1857
   3174    1855, 1854, 1853, 1852, 1851, 1850, 1849,
   3175    // 1847-1848
   3176    1846, 1845, 1844, 1843, 1842, 1841, 1840, 1839, 1838,
   3177    // 1837
   3178    1836,
   3179    // 1835
   3180    1834, 1833, 1832, 1831,
   3181    // 1830
   3182    1829,
   3183    // 1828
   3184    1827,
   3185    // 1826
   3186    1825, 1824, 1823, 1822, 1821, 1820, 1819, 1818, 1817, 1816, 1815, 1814,
   3187    // 1813
   3188    1812, 1811, 1810, 1809, 1808, 1807, 1806, 1805, 1804,
   3189    // 1803
   3190    1802, 1801, 1800, 1799, 1798, 1797,
   3191    // 1795-1796
   3192    1794, 1793,
   3193    // 1791-1792
   3194    1790, 1789,
   3195    // 1788
   3196    1787, 1786,
   3197    // 1784-1785
   3198    1783,
   3199    // 1782
   3200    1781, 1780, 1779, 1778, 1777, 1776, 1775, 1774, 1773, 1772, 1771,
   3201    // 1770
   3202    1769, 1768, 1767, 1766, 1765, 1764, 1763, 1762, 1761, 1760, 1759, 1758,
   3203    // 1756-1757
   3204    1755, 1754, 1753, 1752, 1751, 1750, 1749,
   3205    // 1748
   3206    1747, 1746,
   3207    // 1745
   3208    1744,
   3209    // 1743
   3210    1742,
   3211    // 1741
   3212    1740, 1739, 1738, 1737,
   3213    // 1736
   3214    1735, 1734,
   3215    // 1733
   3216    1732, 1731, 1730, 1729,
   3217    // 1725-1728
   3218    1724, 1723, 1722,
   3219    // 1719-1721
   3220    1718, 1717, 1716,
   3221    // 1715
   3222    1714, 1713,
   3223    // 1710-1712
   3224    1709,
   3225    // 1708
   3226    1707,
   3227    // 1706
   3228    1705,
   3229    // 1703-1704
   3230    1702, 1701, 1700,
   3231    // 1699
   3232    1698, 1697,
   3233    // 1696
   3234    1695, 1694, 1693,
   3235    // 1692
   3236    1691, 1690, 1689, 1688, 1687, 1686, 1685,
   3237    // 1684
   3238    1683,
   3239    // 1682
   3240    1681, 1680, 1679, 1678, 1677, 1676,
   3241    // 1674-1675
   3242    1673, 1672, 1671, 1670,
   3243    // 1668-1669
   3244    1667,
   3245    // 1666
   3246    1665, 1664, 1663, 1662, 1661, 1660, 1659, 1658, 1657,
   3247    // 1655-1656
   3248    1654,
   3249    // 1651-1653
   3250    1650, 1649, 1648, 1647, 1646, 1645, 1644,
   3251    // 1643
   3252    1642,
   3253    // 1641
   3254    1640,
   3255    // 1639
   3256    1638,
   3257    // 1634-1637
   3258    1633, 1632, 1631, 1630, 1629, 1628, 1627, 1626, 1625, 1624, 1623, 1622, 1621, 1620, 1619, 1618,
   3259    // 1617
   3260    1616, 1615, 1614, 1613, 1612, 1611, 1610, 1609, 1608, 1607, 1606, 1605, 1604, 1603, 1602, 1601,
   3261    1600, 1599, 1598, 1597, 1596,
   3262    // 1595
   3263    1594, 1593, 1592,
   3264    // 1591
   3265    1590,
   3266    // 1586-1589
   3267    1585,
   3268    // 1584
   3269    1583, 1582, 1581, 1580,
   3270    // 1579
   3271    1578,
   3272    // 1577
   3273    1576,
   3274    // 1574-1575
   3275    1573, 1572, 1571, 1570, 1569,
   3276    // 1568
   3277    1567,
   3278    // 1566
   3279    1565,
   3280    // 1564
   3281    1563,
   3282    // 1562
   3283    1561, 1560, 1559,
   3284    // 1558
   3285    1557, 1556, 1555, 1554, 1553, 1552, 1551, 1550, 1549, 1548, 1547, 1546,
   3286    // 1545
   3287    1544,
   3288    // 1542-1543
   3289    1541,
   3290    // 1540
   3291    1539, 1538,
   3292    // 1537
   3293    1536, 1535,
   3294    // 1533-1534
   3295    1532,
   3296    // 1529-1531
   3297    1528, 1527, 1526,
   3298    // 1522-1525
   3299    1521, 1520, 1519, 1518, 1517, 1516, 1515,
   3300    // 1513-1514
   3301    1512, 1511, 1510, 1509, 1508, 1507, 1506, 1505, 1504, 1503, 1502, 1501,
   3302    // 1499-1500
   3303    1498, 1497,
   3304    // 1494-1496
   3305    1493,
   3306    // 1492
   3307    1491, 1490,
   3308    // 1489
   3309    1488,
   3310    // 1484-1487
   3311    1483, 1482, 1481,
   3312    // 1480
   3313    1479, 1478, 1477, 1476, 1475, 1474, 1473, 1472, 1471, 1470,
   3314    // 1469
   3315    1468, 1467, 1466,
   3316    // 1465
   3317    1464, 1463,
   3318    // 1460-1462
   3319    1459,
   3320    // 1457-1458
   3321    1456, 1455, 1454, 1453, 1452,
   3322    // 1451
   3323    1450, 1449,
   3324    // 1448
   3325    1447, 1446, 1445, 1444, 1443, 1442, 1441, 1440, 1439,
   3326    // 1438
   3327    1437,
   3328    // 1436
   3329    1435, 1434, 1433, 1432, 1431,
   3330    // 1429-1430
   3331    1428,
   3332    // 1427
   3333    1426,
   3334    // 1425
   3335    1424,
   3336    // 1423
   3337    1422, 1421, 1420, 1419,
   3338    // 1418
   3339    1417, 1416,
   3340    // 1414-1415
   3341    1413,
   3342    // 1411-1412
   3343    1410, 1409, 1408, 1407,
   3344    // 1406
   3345    1405, 1404,
   3346    // 1403
   3347    1402, 1401,
   3348    // 1400
   3349    1399, 1398,
   3350    // 1397
   3351    1396, 1395,
   3352    // 1394
   3353    1393,
   3354    // 1390-1392
   3355    1389, 1388, 1387, 1386, 1385, 1384, 1383, 1382, 1381, 1380, 1379, 1378, 1377, 1376, 1375, 1374,
   3356    1373,
   3357    // 1371-1372
   3358    1370, 1369,
   3359    // 1368
   3360    1367,
   3361    // 1366
   3362    1365,
   3363    // 1363-1364
   3364    1362, 1361, 1360, 1359, 1358, 1357, 1356,
   3365    // 1355
   3366    1354, 1353,
   3367    // 1352
   3368    1351, 1350, 1349, 1348, 1347, 1346, 1345, 1344, 1343, 1342, 1341, 1340, 1339, 1338, 1337, 1336,
   3369    // 1333-1335
   3370    1332, 1331,
   3371    // 1330
   3372    1329, 1328, 1327, 1326, 1325,
   3373    // 1324
   3374    1323, 1322, 1321, 1320, 1319, 1318, 1317, 1316, 1315, 1314, 1313, 1312, 1311, 1310, 1309, 1308,
   3375    1307, 1306, 1305, 1304, 1303, 1302, 1301, 1300, 1299, 1298, 1297, 1296,
   3376    // 1294-1295
   3377    1293, 1292, 1291, 1290, 1289, 1288, 1287, 1286,
   3378    // 1285
   3379    1284, 1283,
   3380    // 1280-1282
   3381    1279, 1278, 1277, 1276, 1275,
   3382    // 1274
   3383    1273, 1272, 1271, 1270, 1269, 1268,
   3384    // 1267
   3385    1266, 1265, 1264, 1263, 1262, 1261, 1260, 1259, 1258, 1257, 1256, 1255, 1254, 1253, 1252, 1251,
   3386    1250, 1249, 1248, 1247, 1246, 1245,
   3387    // 1244
   3388    1243,
   3389    // 1241-1242
   3390    1240,
   3391    // 1239
   3392    1238,
   3393    // 1237
   3394    1236, 1235,
   3395    // 1232-1234
   3396    1231,
   3397    // 1230
   3398    1229, 1228,
   3399    // 1227
   3400    1226,
   3401    // 1225
   3402    1224,
   3403    // 1223
   3404    1222, 1221, 1220, 1219, 1218, 1217, 1216, 1215, 1214, 1213, 1212, 1211, 1210,
   3405    // 1207-1209
   3406    1206, 1205, 1204, 1203, 1202, 1201, 1200, 1199, 1198, 1197, 1196, 1195, 1194, 1193,
   3407    // 1192
   3408    1191, 1190, 1189, 1188, 1187, 1186, 1185, 1184,
   3409    // 1183
   3410    1182, 1181,
   3411    // 1179-1180
   3412    1178, 1177, 1176, 1175, 1174, 1173, 1172, 1171, 1170, 1169, 1168, 1167, 1166, 1165, 1164,
   3413    // 1162-1163
   3414    1161, 1160,
   3415    // 1159
   3416    1158, 1157, 1156, 1155,
   3417    // 1154
   3418    1153, 1152, 1151,
   3419    // 1150
   3420    1149, 1148, 1147,
   3421    // 1146
   3422    1145,
   3423    // 1144
   3424    1143,
   3425    // 1142
   3426    1141, 1140, 1139,
   3427    // 1138
   3428    1137, 1136, 1135, 1134, 1133, 1132, 1131, 1130, 1129, 1128, 1127, 1126, 1125, 1124,
   3429    // 1123
   3430    1122, 1121,
   3431    // 1118-1120
   3432    1117, 1116,
   3433    // 1113-1115
   3434    1112, 1111,
   3435    // 1110
   3436    1109, 1108, 1107,
   3437    // 1105-1106
   3438    1104, 1103, 1102, 1101,
   3439    // 1099-1100
   3440    1098,
   3441    // 1097
   3442    1096, 1095,
   3443    // 1094
   3444    1093, 1092, 1091, 1090,
   3445    // 1088-1089
   3446    1087, 1086, 1085,
   3447    // 1084
   3448    1083,
   3449    // 1082
   3450    1081, 1080, 1079,
   3451    // 1078
   3452    1077, 1076, 1075, 1074, 1073, 1072, 1071, 1070, 1069, 1068, 1067, 1066, 1065,
   3453    // 1064
   3454    1063,
   3455    // 1062
   3456    1061,
   3457    // 1060
   3458    1059,
   3459    // 1058
   3460    1057, 1056, 1055,
   3461    // 1054
   3462    1053, 1052,
   3463    // 1050-1051
   3464    1049, 1048, 1047, 1046, 1045,
   3465    // 1044
   3466    1043, 1042, 1041,
   3467    // 1039-1040
   3468    1038,
   3469    // 1037
   3470    1036,
   3471    // 1035
   3472    1034, 1033, 1032,
   3473    // 1031
   3474    1030,
   3475    // 1029
   3476    1028, 1027, 1026,
   3477    // 1024-1025
   3478    1023, 1022, 1021, 1020, 1019, 1018, 1017,
   3479    // 1016
   3480    1015,
   3481    // 1014
   3482    1013, 1012, 1011, 1010, 1009, 1008, 1007, 1006, 1005,
   3483    // 1004
   3484    1003, 1002, 1001, 1000, 999, 998, 997, 996, 995,
   3485    // 994
   3486    993, 992, 991, 990, 989,
   3487    // 988
   3488    987, 986,
   3489    // 985
   3490    984, 983, 982, 981,
   3491    // 979-980
   3492    978, 977, 976,
   3493    // 975
   3494    974,
   3495    // 973
   3496    972, 971, 970,
   3497    // 969
   3498    968, 967,
   3499    // 966
   3500    965, 964, 963, 962, 961, 960, 959, 958, 957, 956, 955, 954, 953,
   3501    // 952
   3502    951, 950,
   3503    // 949
   3504    948, 947, 946, 945,
   3505    // 944
   3506    943, 942, 941, 940, 939, 938,
   3507    // 937
   3508    936, 935, 934, 933,
   3509    // 931-932
   3510    930, 929, 928, 927, 926, 925, 924, 923, 922, 921, 920, 919, 918, 917,
   3511    // 916
   3512    915, 914, 913, 912, 911, 910,
   3513    // 909
   3514    908, 907, 906, 905, 904, 903, 902, 901, 900, 899, 898, 897, 896, 895, 894, 893,
   3515    892, 891, 890, 889, 888,
   3516    // 887
   3517    886,
   3518    // 885
   3519    884, 883,
   3520    // 882
   3521    881, 880,
   3522    // 878-879
   3523    877, 876, 875, 874, 873,
   3524    // 871-872
   3525    870, 869,
   3526    // 868
   3527    867, 866, 865, 864,
   3528    // 863
   3529    862, 861, 860,
   3530    // 859
   3531    858, 857,
   3532    // 856
   3533    855,
   3534    // 854
   3535    853,
   3536    // 851-852
   3537    850, 849,
   3538    // 848
   3539    847, 846, 845,
   3540    // 843-844
   3541    842, 841, 840, 839, 838, 837,
   3542    // 836
   3543    835,
   3544    // 834
   3545    833, 832, 831, 830, 829,
   3546    // 828
   3547    827, 826, 825, 824, 823, 822, 821, 820, 819,
   3548    // 817-818
   3549    816,
   3550    // 815
   3551    814,
   3552    // 813
   3553    812, 811, 810, 809,
   3554    // 807-808
   3555    806, 805, 804, 803, 802,
   3556    // 800-801
   3557    799, 798, 797, 796, 795, 794, 793, 792, 791, 790, 789,
   3558    // 788
   3559    787, 786, 785,
   3560    // 784
   3561    783, 782, 781,
   3562    // 780
   3563    779, 778, 777, 776, 775, 774, 773, 772, 771, 770, 769,
   3564    // 768
   3565    767, 766, 765, 764, 763, 762, 761, 760, 759, 758,
   3566    // 757
   3567    756, 755, 754, 753, 752,
   3568    // 750-751
   3569    749, 748,
   3570    // 747
   3571    746, 745, 744, 743, 742, 741, 740, 739, 738,
   3572    // 736-737
   3573    735, 734, 733, 732, 731, 730, 729, 728, 727, 726, 725, 724, 723, 722, 721, 720,
   3574    719,
   3575    // 718
   3576    717, 716,
   3577    // 714-715
   3578    713,
   3579    // 712
   3580    711, 710,
   3581    // 709
   3582    708, 707, 706, 705, 704, 703, 702, 701, 700, 699, 698, 697, 696, 695, 694, 693,
   3583    692, 691, 690, 689, 688, 687, 686,
   3584    // 685
   3585    684, 683,
   3586    // 680-682
   3587    679, 678, 677, 676, 675, 674, 673, 672, 671,
   3588    // 670
   3589    669, 668, 667, 666,
   3590    // 664-665
   3591    663, 662, 661,
   3592    // 660
   3593    659, 658, 657, 656, 655, 654, 653, 652, 651, 650, 649, 648, 647,
   3594    // 646
   3595    645, 644, 643, 642, 641, 640, 639, 638, 637, 636, 635, 634, 633, 632, 631, 630,
   3596    629, 628, 627, 626,
   3597    // 624-625
   3598    623, 622, 621,
   3599    // 620
   3600    619, 618, 617, 616, 615, 614,
   3601    // 613
   3602    612,
   3603    // 611
   3604    610, 609,
   3605    // 607-608
   3606    606, 605, 604, 603, 602, 601,
   3607    // 600
   3608    599, 598,
   3609    // 597
   3610    596,
   3611    // 595
   3612    594, 593, 592, 591,
   3613    // 589-590
   3614    588,
   3615    // 587
   3616    586, 585,
   3617    // 584
   3618    583, 582,
   3619    // 581
   3620    580, 579,
   3621    // 578
   3622    577,
   3623    // 576
   3624    575, 574, 573, 572,
   3625    // 570-571
   3626    569, 568, 567, 566, 565,
   3627    // 563-564
   3628    562, 561,
   3629    // 559-560
   3630    558, 557, 556, 555, 554, 553, 552, 551, 550, 549,
   3631    // 548
   3632    547, 546,
   3633    // 545
   3634    544, 543,
   3635    // 542
   3636    541, 540,
   3637    // 539
   3638    538, 537, 536,
   3639    // 535
   3640    534, 533, 532, 531, 530, 529, 528,
   3641    // 527
   3642    526, 525, 524,
   3643    // 522-523
   3644    521, 520, 519, 518, 517, 516, 515,
   3645    // 513-514
   3646    512, 511,
   3647    // 508-510
   3648    507, 506, 505, 504, 503,
   3649    // 500-502
   3650    499, 498,
   3651    // 497
   3652    496, 495, 494, 493, 492, 491, 490, 489, 488, 487, 486, 485, 484, 483,
   3653    // 481-482
   3654    480, 479, 478, 477, 476, 475, 474, 473, 472,
   3655    // 471
   3656    470, 469, 468, 467, 466, 465, 464, 463,
   3657    // 461-462
   3658    460,
   3659    // 459
   3660    458,
   3661    // 457
   3662    456,
   3663    // 455
   3664    454, 453, 452, 451,
   3665    // 450
   3666    449,
   3667    // 448
   3668    447, 446,
   3669    // 445
   3670    444, 443, 442, 441, 440, 439, 438, 437, 436, 435, 434, 433, 432,
   3671    // 431
   3672    430,
   3673    // 429
   3674    428, 427, 426, 425, 424, 423,
   3675    // 422
   3676    421,
   3677    // 420
   3678    419, 418,
   3679    // 417
   3680    416, 415, 414, 413, 412, 411, 410, 409, 408, 407, 406, 405, 404,
   3681    // 403
   3682    402, 401, 400, 399,
   3683    // 398
   3684    397, 396, 395, 394,
   3685    // 393
   3686    392,
   3687    // 391
   3688    390, 389, 388,
   3689    // 387
   3690    386,
   3691    // 385
   3692    384, 383, 382, 381, 380,
   3693    // 379
   3694    378,
   3695    // 376-377
   3696    375, 374,
   3697    // 373
   3698    372, 371,
   3699    // 368-370
   3700    367, 366, 365, 364, 363, 362, 361,
   3701    // 360
   3702    359,
   3703    // 358
   3704    357,
   3705    // 356
   3706    355, 354, 353,
   3707    // 352
   3708    351, 350,
   3709    // 349
   3710    348,
   3711    // 347
   3712    346,
   3713    // 345
   3714    344, 343,
   3715    // 342
   3716    341, 340,
   3717    // 336-339
   3718    335, 334,
   3719    // 333
   3720    332, 331,
   3721    // 330
   3722    329, 328,
   3723    // 327
   3724    326, 325, 324, 323, 322, 321, 320, 319, 318, 317, 316, 315,
   3725    // 314
   3726    313, 312, 311, 310,
   3727    // 309
   3728    308, 307, 306, 305, 304, 303, 302, 301, 300, 299, 298, 297, 296, 295, 294, 293,
   3729    292, 291, 290, 289,
   3730    // 288
   3731    287, 286, 285,
   3732    // 284
   3733    283,
   3734    // 282
   3735    281, 280, 279, 278, 277, 276, 275, 274, 273, 272,
   3736    // 270-271
   3737    269, 268, 267, 266, 265,
   3738    // 263-264
   3739    262,
   3740    // 261
   3741    260, 259, 258,
   3742    // 255-257
   3743    254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240, 239,
   3744    238, 237, 236, 235, 234,
   3745    // 233
   3746    232, 231, 230,
   3747    // 229
   3748    228, 227, 226, 225, 224,
   3749    // 221-223
   3750    220,
   3751    // 219
   3752    218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 208, 207,
   3753    // 206
   3754    205, 204, 203,
   3755    // 200-202
   3756    199, 198, 197, 196, 195, 194,
   3757    // 193
   3758    192, 191, 190, 189, 188, 187, 186,
   3759    // 185
   3760    184, 183, 182, 181, 180,
   3761    // 179
   3762    178, 177, 176, 175, 174,
   3763    // 173
   3764    172, 171, 170, 169, 168, 167, 166,
   3765    // 165
   3766    164, 163, 162, 161,
   3767    // 160
   3768    159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149,
   3769    // 148
   3770    147, 146, 145, 144, 143, 142, 141, 140,
   3771    // 139
   3772    138, 137,
   3773    // 136
   3774    135, 134,
   3775    // 133
   3776    132, 131, 130, 129, 128, 127, 126,
   3777    // 125
   3778    124,
   3779    // 122-123
   3780    121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108,
   3781    // 107
   3782    106, 105, 104, 103, 102, 101, 100,
   3783    // 99
   3784    98, 97,
   3785    // 95-96
   3786    94, 93, 92,
   3787    // 90-91
   3788    89, 88, 87, 86, 85, 84, 83, 82, 81,
   3789    // 80
   3790    79, 78, 77, 76, 75, 74, 73, 72,
   3791    // 69-71
   3792    68, 67, 66, 65,
   3793    // 64
   3794    63,
   3795    // 62
   3796    61, 60, 59, 58,
   3797    // 57
   3798    56,
   3799    // 55
   3800    54,
   3801    // 53
   3802    52,
   3803    // 50-51
   3804    49, 48, 47, 46,
   3805    // 44-45
   3806    43, 42, 41, 40, 39, 38, 37, 36, 35,
   3807    // 34
   3808    33, 32, 31,
   3809    // 26-30
   3810    25,
   3811    // 24
   3812    23, 22, 21, 20,
   3813    // 19
   3814    18,
   3815    // 17
   3816    16, 15, 14, 13, 12, 11, 10, 9, 8, 7,
   3817    // 6
   3818    5, 4, 3, 2, 1,
   3819    // 0
   3820  },
   3821  (const int[]) {  // 902
   3822    59, 58, 57, 56, 55, 54,
   3823    // 47-53
   3824    46,
   3825    // 45
   3826    44,
   3827    // 42-43
   3828    41, 40,
   3829    // 39
   3830    38,
   3831    // 37
   3832    36,
   3833    // 34-35
   3834    33, 32, 31, 30,
   3835    // 29
   3836    28, 27,
   3837    // 26
   3838    25, 24, 23, 22,
   3839    // 21
   3840    20,
   3841    // 19
   3842    18,
   3843    // 14-17
   3844    13, 12,
   3845    // 11
   3846    10, 9, 8, 7,
   3847    // 5-6
   3848    4,
   3849    // 0-3
   3850  },
   3851 };
   3852 // clang-format on
   3853 
   3854 /// Compares a version string to the current Nvim version.
   3855 ///
   3856 /// @param version Version string like "1.3.42"
   3857 ///
   3858 /// @return true if Nvim is at or above the version.
   3859 bool has_nvim_version(const char *const version_str)
   3860  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
   3861 {
   3862  const char *p = version_str;
   3863  int minor = 0;
   3864  int patch = 0;
   3865 
   3866  if (!ascii_isdigit(*p)) {
   3867    return false;
   3868  }
   3869  int major = atoi(p);
   3870  p = strchr(p, '.');  // Find the next dot.
   3871 
   3872  if (p) {
   3873    p++;  // Advance past the dot.
   3874    if (!ascii_isdigit(*p)) {
   3875      return false;
   3876    }
   3877    minor = atoi(p);
   3878    p = strchr(p, '.');
   3879    if (p) {
   3880      p++;
   3881      if (!ascii_isdigit(*p)) {
   3882        return false;
   3883      }
   3884      patch = atoi(p);
   3885    }
   3886  }
   3887 
   3888  return (major < NVIM_VERSION_MAJOR
   3889          || (major == NVIM_VERSION_MAJOR
   3890              && (minor < NVIM_VERSION_MINOR
   3891                  || (minor == NVIM_VERSION_MINOR
   3892                      && patch <= NVIM_VERSION_PATCH))));
   3893 }
   3894 
   3895 int min_vim_version(void)
   3896  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
   3897 {
   3898  return vim_versions[0];
   3899 }
   3900 
   3901 int highest_patch(void)
   3902  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
   3903 {
   3904  // this relies on the highest patch number to be the first entry
   3905  return included_patchsets[0][0];
   3906 }
   3907 
   3908 /// Checks whether a Vim patch has been included.
   3909 ///
   3910 /// @param n Patch number.
   3911 /// @param major_minor_version (major * 100 + minor) Vim version or 0 (alias to min_vim_version())
   3912 ///
   3913 /// @return true if patch `n` has been included.
   3914 bool has_vim_patch(int n, int major_minor_version)
   3915  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
   3916 {
   3917  int v_i;
   3918  if (major_minor_version > 0) {
   3919    if (major_minor_version < vim_versions[0]) {
   3920      return true;
   3921    }
   3922    const size_t size = ARRAY_SIZE(vim_versions);
   3923    v_i = -1;
   3924    for (size_t i = 0; i < size; i++) {
   3925      if (vim_versions[i] == major_minor_version) {
   3926        v_i = (int)i;
   3927        break;
   3928      }
   3929    }
   3930    if (v_i == -1) {
   3931      return false;
   3932    }
   3933  } else {
   3934    v_i = 0;
   3935  }
   3936  // Perform a binary search.
   3937  int l = 0;
   3938  int h = num_patches[v_i] - 1;
   3939  while (true) {
   3940    const int m = (l + h) / 2;
   3941    if (included_patchsets[v_i][m] == n) {
   3942      return true;
   3943    }
   3944    if (l == h) {
   3945      break;
   3946    }
   3947    if (included_patchsets[v_i][m] < n) {
   3948      h = m;
   3949    } else {
   3950      l = m + 1;
   3951    }
   3952  }
   3953  return false;
   3954 }
   3955 
   3956 void ex_version(exarg_T *eap)
   3957 {
   3958  // Ignore a ":version 9.99" command.
   3959  if (*eap->arg == NUL) {
   3960    if (!ui_has(kUIMessages)) {
   3961      msg_putchar('\n');
   3962    }
   3963    list_version();
   3964  }
   3965 }
   3966 
   3967 /// Output a string for the version message.  If it's going to wrap, output a
   3968 /// newline, unless the message is too long to fit on the screen anyway.
   3969 /// When "wrap" is true wrap the string in [].
   3970 /// @param s
   3971 /// @param wrap
   3972 static void version_msg_wrap(char *s, bool wrap)
   3973 {
   3974  int len = vim_strsize(s) + (wrap ? 2 : 0);
   3975 
   3976  if (!got_int
   3977      && (len < Columns)
   3978      && (msg_col + len >= Columns)
   3979      && (*s != '\n')) {
   3980    msg_putchar('\n');
   3981  }
   3982 
   3983  if (!got_int) {
   3984    if (wrap) {
   3985      msg_puts("[");
   3986    }
   3987    msg_puts(s);
   3988    if (wrap) {
   3989      msg_puts("]");
   3990    }
   3991  }
   3992 }
   3993 
   3994 static void version_msg(char *s)
   3995 {
   3996  version_msg_wrap(s, false);
   3997 }
   3998 
   3999 /// List string items nicely aligned in columns.
   4000 /// When "size" is < 0 then the last entry is marked with NULL.
   4001 /// The entry with index "current" is inclosed in [].
   4002 void list_in_columns(char **items, int size, int current)
   4003 {
   4004  int item_count = 0;
   4005  int width = 0;
   4006 
   4007  // Find the length of the longest item, use that + 1 as the column width.
   4008  for (int i = 0; size < 0 ? items[i] != NULL : i < size; i++) {
   4009    int l = vim_strsize(items[i]) + (i == current ? 2 : 0);
   4010 
   4011    if (l > width) {
   4012      width = l;
   4013    }
   4014    item_count++;
   4015  }
   4016  width += 1;
   4017 
   4018  if (Columns < width) {
   4019    // Not enough screen columns - show one per line
   4020    for (int i = 0; i < item_count; i++) {
   4021      version_msg_wrap(items[i], i == current);
   4022      if (msg_col > 0 && i < item_count - 1) {
   4023        msg_putchar('\n');
   4024      }
   4025    }
   4026    return;
   4027  }
   4028 
   4029  // The rightmost column doesn't need a separator.
   4030  // Sacrifice it to fit in one more column if possible.
   4031  int ncol = (Columns + 1) / width;
   4032  int nrow = item_count / ncol + (item_count % ncol ? 1 : 0);
   4033  int cur_row = 1;
   4034 
   4035  // "i" counts columns then rows.  "idx" counts rows then columns.
   4036  for (int i = 0; !got_int && i < nrow * ncol; i++) {
   4037    int idx = (i / ncol) + (i % ncol) * nrow;
   4038    if (idx < item_count) {
   4039      bool last_col = (i + 1) % ncol == 0;
   4040      if (idx == current) {
   4041        msg_putchar('[');
   4042      }
   4043      msg_puts(items[idx]);
   4044      if (idx == current) {
   4045        msg_putchar(']');
   4046      }
   4047      if (last_col) {
   4048        if (msg_col > 0 && cur_row < nrow) {
   4049          msg_putchar('\n');
   4050        }
   4051        cur_row++;
   4052      } else {
   4053        while (msg_col % width) {
   4054          msg_putchar(' ');
   4055        }
   4056      }
   4057    } else {
   4058      // this row is out of items, thus at the end of the row
   4059      if (msg_col > 0) {
   4060        if (cur_row < nrow) {
   4061          msg_putchar('\n');
   4062        }
   4063        cur_row++;
   4064      }
   4065    }
   4066  }
   4067 }
   4068 
   4069 void list_lua_version(void)
   4070 {
   4071  Error err = ERROR_INIT;
   4072  Object ret = NLUA_EXEC_STATIC("return ((jit and jit.version) and jit.version or _VERSION)",
   4073                                (Array)ARRAY_DICT_INIT, kRetObject, NULL, &err);
   4074  assert(!ERROR_SET(&err));
   4075  assert(ret.type == kObjectTypeString);
   4076  msg_puts(ret.data.string.data);
   4077  api_free_object(ret);
   4078 }
   4079 
   4080 void list_version(void)
   4081 {
   4082  msg_ext_set_kind("list_cmd");
   4083  msg_puts(longVersion);
   4084  msg_putchar('\n');
   4085  msg_puts(version_buildtype);
   4086  msg_putchar('\n');
   4087  list_lua_version();
   4088 
   4089  if (p_verbose > 0) {
   4090    msg_putchar('\n');
   4091    msg_puts("Vim versions: ");
   4092 
   4093    for (size_t i = 0; i < ARRAY_SIZE(vim_versions); i++) {
   4094      if (i) {
   4095        msg_puts(", ");
   4096      }
   4097      msg_puts(Versions[i]);
   4098    }
   4099 
   4100 #ifndef NDEBUG
   4101    msg_putchar('\n');
   4102    msg_puts(version_cflags);
   4103 #endif
   4104    version_msg("\n\n");
   4105 
   4106 #ifdef SYS_VIMRC_FILE
   4107    version_msg(_("   system vimrc file: \""));
   4108    version_msg(SYS_VIMRC_FILE);
   4109    version_msg("\"\n");
   4110 #endif
   4111 
   4112    if (*default_vim_dir != NUL) {
   4113      version_msg(_("  fall-back for $VIM: \""));
   4114      version_msg(default_vim_dir);
   4115      version_msg("\"\n");
   4116    }
   4117 
   4118    if (*default_vimruntime_dir != NUL) {
   4119      version_msg(_(" f-b for $VIMRUNTIME: \""));
   4120      version_msg(default_vimruntime_dir);
   4121      version_msg("\"\n");
   4122    }
   4123  }
   4124 
   4125  version_msg(p_verbose > 0
   4126              ? "\nRun :checkhealth for more info"
   4127              : (starting
   4128                 ? "\nRun \"nvim -V1 -v\" for more info"
   4129                 : "\nRun \":verbose version\" for more info"));
   4130 }
   4131 
   4132 /// Whether it still is not too late to show an intro message
   4133 bool may_show_intro(void)
   4134 {
   4135  return (buf_is_empty(curbuf)
   4136          && (curbuf->b_fname == NULL)
   4137          && (curbuf->handle == 1)
   4138          && (curwin->handle == LOWEST_WIN_ID)
   4139          && one_window(curwin, NULL)
   4140          && (vim_strchr(p_shm, SHM_INTRO) == NULL));
   4141 }
   4142 
   4143 /// Give an introductory message about Vim.
   4144 /// Only used when starting Vim on an empty file, without a file name.
   4145 /// Or with the ":intro" command (for Sven :-).
   4146 ///
   4147 /// @param colon true for ":intro"
   4148 void intro_message(bool colon)
   4149 {
   4150  static char *(lines[]) = {
   4151    N_(NVIM_VERSION_LONG),
   4152    "",
   4153    N_("Nvim is open source and freely distributable"),
   4154    "https://neovim.io/#chat",
   4155    "",
   4156    N_("type  :help nvim<Enter>       if you are new! "),
   4157    N_("type  :checkhealth<Enter>     to optimize Nvim"),
   4158    N_("type  :q<Enter>               to exit         "),
   4159    N_("type  :help<Enter>            for help        "),
   4160    "",
   4161    N_("type  :help news<Enter> to see changes in v%s.%s"),
   4162    "",
   4163    N_("Help poor children in Uganda!"),
   4164    N_("type  :help Kuwasha<Enter>    for information "),
   4165  };
   4166 
   4167  // blanklines = screen height - # message lines
   4168  size_t lines_size = ARRAY_SIZE(lines);
   4169  assert(lines_size <= LONG_MAX);
   4170 
   4171  int blanklines = Rows - ((int)lines_size - 1);
   4172 
   4173  // Don't overwrite a statusline.  Depends on 'cmdheight'.
   4174  if (p_ls > 1) {
   4175    blanklines -= Rows - topframe->fr_height;
   4176  }
   4177 
   4178  if (blanklines < 0) {
   4179    blanklines = 0;
   4180  }
   4181 
   4182  // start displaying the message lines after half of the blank lines
   4183  int row = blanklines / 2;
   4184 
   4185  if (((row >= 2) && (Columns >= 50)) || colon) {
   4186    for (int i = 0; i < (int)ARRAY_SIZE(lines); i++) {
   4187      char *p = lines[i];
   4188      char *mesg = NULL;
   4189      int mesg_size = 0;
   4190 
   4191      if (strstr(p, "news") != NULL) {
   4192        p = _(p);
   4193        mesg_size = snprintf(NULL, 0, p,
   4194                             STR(NVIM_VERSION_MAJOR), STR(NVIM_VERSION_MINOR));
   4195        assert(mesg_size > 0);
   4196        mesg = xmallocz((size_t)mesg_size);
   4197        snprintf(mesg, (size_t)mesg_size + 1, p,
   4198                 STR(NVIM_VERSION_MAJOR), STR(NVIM_VERSION_MINOR));
   4199      }
   4200 
   4201      if (mesg == NULL) {
   4202        if (*p != NUL) {
   4203          mesg = _(p);
   4204        } else {
   4205          mesg = "";
   4206        }
   4207      }
   4208 
   4209      if (*mesg != NUL) {
   4210        do_intro_line(row, mesg, colon);
   4211      }
   4212      row++;
   4213 
   4214      if (mesg_size > 0) {
   4215        XFREE_CLEAR(mesg);
   4216      }
   4217    }
   4218  }
   4219 }
   4220 
   4221 static void do_intro_line(int row, char *mesg, bool colon)
   4222 {
   4223  int l;
   4224 
   4225  // Center the message horizontally.
   4226  int col = vim_strsize(mesg);
   4227 
   4228  col = (Columns - col) / 2;
   4229 
   4230  if (col < 0) {
   4231    col = 0;
   4232  }
   4233 
   4234  grid_line_start((!colon && ui_has(kUIMultigrid)) ? &firstwin->w_grid : &default_gridview, row);
   4235 
   4236  // Split up in parts to highlight <> items differently.
   4237  for (char *p = mesg; *p != NUL; p += l) {
   4238    for (l = 0;
   4239         p[l] != NUL && (l == 0 || (p[l] != '<' && p[l - 1] != '>'));
   4240         l++) {
   4241      l += utfc_ptr2len(p + l) - 1;
   4242    }
   4243    assert(row <= INT_MAX && col <= INT_MAX);
   4244    col += grid_line_puts(col, p, l, *p == '<' ? HL_ATTR(HLF_8) : 0);
   4245  }
   4246  grid_line_flush();
   4247 }
   4248 
   4249 /// ":intro": clear screen, display intro screen and wait for return.
   4250 ///
   4251 /// @param eap
   4252 void ex_intro(exarg_T *eap)
   4253 {
   4254  // TODO(bfredl): use msg_grid instead!
   4255  screenclear();
   4256  intro_message(true);
   4257  plain_vgetc();
   4258 }