1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
use std::boxed::Box;
use std::default::Default;
use std::sync::Once;
use fnv::FnvHashMap;
use m4ri_rust::friendly::BinMatrix;
use m4ri_rust::friendly::BinVector;
use crate::codes::BinaryCode;
/// ``[24, 13]`` Guava code
///
/// Best code found from the GUAVA database version 3.15
///
/// Decodes using Syndrome decoding
#[derive(Clone, Serialize)]
pub struct GuavaCode24_13;
static INIT: Once = Once::new();
static mut GENERATOR_MATRIX: *const BinMatrix = 0 as *const BinMatrix;
static mut PARITY_MATRIX: *const BinMatrix = 0 as *const BinMatrix;
static mut PARITY_MATRIX_T: *const BinMatrix = 0 as *const BinMatrix;
static mut SYNDROME_MAP: *const FnvHashMap<u64, &'static [usize; 1]> = 0 as *const FnvHashMap<u64, &'static [usize; 1]>;
fn init() {
INIT.call_once(|| {
unsafe {
let matrix = Box::new(BinMatrix::from_slices(&[
&[ 3817473 ],
&[ 1884162 ],
&[ 2342916 ],
&[ 10330120 ],
&[ 10207248 ],
&[ 10788896 ],
&[ 11927616 ],
&[ 11886720 ],
&[ 9085184 ],
&[ 385536 ],
&[ 3793920 ],
&[ 3352576 ],
&[ 3510272 ],
], 24));
GENERATOR_MATRIX = Box::into_raw(matrix);
let matrix = Box::new(BinMatrix::from_slices(&[
&[ 9954817 ],
&[ 1725954 ],
&[ 2446852 ],
&[ 1830920 ],
&[ 11457040 ],
&[ 12198432 ],
&[ 12182592 ],
&[ 422528 ],
&[ 3184384 ],
&[ 9902080 ],
&[ 4194304 ],
], 24));
let matrix_t = Box::new(matrix.transposed());
PARITY_MATRIX = Box::into_raw(matrix);
PARITY_MATRIX_T = Box::into_raw(matrix_t);
let mut map = Box::new(FnvHashMap::with_capacity_and_hasher(2048, Default::default()));
map.insert(0, &[0]); // 0 => [0]
map.insert(1, &[1]); // 1 => [1]
map.insert(2, &[2]); // 2 => [2]
map.insert(4, &[4]); // 4 => [4]
map.insert(8, &[8]); // 8 => [8]
map.insert(16, &[16]); // 16 => [16]
map.insert(32, &[32]); // 32 => [32]
map.insert(64, &[64]); // 64 => [64]
map.insert(128, &[128]); // 128 => [128]
map.insert(256, &[256]); // 256 => [256]
map.insert(439, &[512]); // 439 => [512]
map.insert(327, &[1024]); // 327 => [1024]
map.insert(512, &[2048]); // 512 => [2048]
map.insert(926, &[4096]); // 926 => [4096]
map.insert(233, &[8192]); // 233 => [8192]
map.insert(223, &[16384]); // 223 => [16384]
map.insert(345, &[32768]); // 345 => [32768]
map.insert(589, &[65536]); // 589 => [65536]
map.insert(699, &[131072]); // 699 => [131072]
map.insert(661, &[262144]); // 661 => [262144]
map.insert(122, &[524288]); // 122 => [524288]
map.insert(875, &[1048576]); // 875 => [1048576]
map.insert(372, &[2097152]); // 372 => [2097152]
map.insert(1024, &[4194304]); // 1024 => [4194304]
map.insert(625, &[8388608]); // 625 => [8388608]
map.insert(3, &[3]); // 3 => [3]
map.insert(5, &[5]); // 5 => [5]
map.insert(9, &[9]); // 9 => [9]
map.insert(17, &[17]); // 17 => [17]
map.insert(33, &[33]); // 33 => [33]
map.insert(65, &[65]); // 65 => [65]
map.insert(129, &[129]); // 129 => [129]
map.insert(257, &[257]); // 257 => [257]
map.insert(438, &[513]); // 438 => [513]
map.insert(326, &[1025]); // 326 => [1025]
map.insert(513, &[2049]); // 513 => [2049]
map.insert(927, &[4097]); // 927 => [4097]
map.insert(232, &[8193]); // 232 => [8193]
map.insert(222, &[16385]); // 222 => [16385]
map.insert(344, &[32769]); // 344 => [32769]
map.insert(588, &[65537]); // 588 => [65537]
map.insert(698, &[131073]); // 698 => [131073]
map.insert(660, &[262145]); // 660 => [262145]
map.insert(123, &[524289]); // 123 => [524289]
map.insert(874, &[1048577]); // 874 => [1048577]
map.insert(373, &[2097153]); // 373 => [2097153]
map.insert(1025, &[4194305]); // 1025 => [4194305]
map.insert(624, &[8388609]); // 624 => [8388609]
map.insert(6, &[6]); // 6 => [6]
map.insert(10, &[10]); // 10 => [10]
map.insert(18, &[18]); // 18 => [18]
map.insert(34, &[34]); // 34 => [34]
map.insert(66, &[66]); // 66 => [66]
map.insert(130, &[130]); // 130 => [130]
map.insert(258, &[258]); // 258 => [258]
map.insert(437, &[514]); // 437 => [514]
map.insert(325, &[1026]); // 325 => [1026]
map.insert(514, &[2050]); // 514 => [2050]
map.insert(924, &[4098]); // 924 => [4098]
map.insert(235, &[8194]); // 235 => [8194]
map.insert(221, &[16386]); // 221 => [16386]
map.insert(347, &[32770]); // 347 => [32770]
map.insert(591, &[65538]); // 591 => [65538]
map.insert(697, &[131074]); // 697 => [131074]
map.insert(663, &[262146]); // 663 => [262146]
map.insert(120, &[524290]); // 120 => [524290]
map.insert(873, &[1048578]); // 873 => [1048578]
map.insert(374, &[2097154]); // 374 => [2097154]
map.insert(1026, &[4194306]); // 1026 => [4194306]
map.insert(627, &[8388610]); // 627 => [8388610]
map.insert(12, &[12]); // 12 => [12]
map.insert(20, &[20]); // 20 => [20]
map.insert(36, &[36]); // 36 => [36]
map.insert(68, &[68]); // 68 => [68]
map.insert(132, &[132]); // 132 => [132]
map.insert(260, &[260]); // 260 => [260]
map.insert(435, &[516]); // 435 => [516]
map.insert(323, &[1028]); // 323 => [1028]
map.insert(516, &[2052]); // 516 => [2052]
map.insert(922, &[4100]); // 922 => [4100]
map.insert(237, &[8196]); // 237 => [8196]
map.insert(219, &[16388]); // 219 => [16388]
map.insert(349, &[32772]); // 349 => [32772]
map.insert(585, &[65540]); // 585 => [65540]
map.insert(703, &[131076]); // 703 => [131076]
map.insert(657, &[262148]); // 657 => [262148]
map.insert(126, &[524292]); // 126 => [524292]
map.insert(879, &[1048580]); // 879 => [1048580]
map.insert(368, &[2097156]); // 368 => [2097156]
map.insert(1028, &[4194308]); // 1028 => [4194308]
map.insert(629, &[8388612]); // 629 => [8388612]
map.insert(24, &[24]); // 24 => [24]
map.insert(40, &[40]); // 40 => [40]
map.insert(72, &[72]); // 72 => [72]
map.insert(136, &[136]); // 136 => [136]
map.insert(264, &[264]); // 264 => [264]
map.insert(447, &[520]); // 447 => [520]
map.insert(335, &[1032]); // 335 => [1032]
map.insert(520, &[2056]); // 520 => [2056]
map.insert(918, &[4104]); // 918 => [4104]
map.insert(225, &[8200]); // 225 => [8200]
map.insert(215, &[16392]); // 215 => [16392]
map.insert(337, &[32776]); // 337 => [32776]
map.insert(581, &[65544]); // 581 => [65544]
map.insert(691, &[131080]); // 691 => [131080]
map.insert(669, &[262152]); // 669 => [262152]
map.insert(114, &[524296]); // 114 => [524296]
map.insert(867, &[1048584]); // 867 => [1048584]
map.insert(380, &[2097160]); // 380 => [2097160]
map.insert(1032, &[4194312]); // 1032 => [4194312]
map.insert(633, &[8388616]); // 633 => [8388616]
map.insert(48, &[48]); // 48 => [48]
map.insert(80, &[80]); // 80 => [80]
map.insert(144, &[144]); // 144 => [144]
map.insert(272, &[272]); // 272 => [272]
map.insert(423, &[528]); // 423 => [528]
map.insert(343, &[1040]); // 343 => [1040]
map.insert(528, &[2064]); // 528 => [2064]
map.insert(910, &[4112]); // 910 => [4112]
map.insert(249, &[8208]); // 249 => [8208]
map.insert(207, &[16400]); // 207 => [16400]
map.insert(329, &[32784]); // 329 => [32784]
map.insert(605, &[65552]); // 605 => [65552]
map.insert(683, &[131088]); // 683 => [131088]
map.insert(645, &[262160]); // 645 => [262160]
map.insert(106, &[524304]); // 106 => [524304]
map.insert(891, &[1048592]); // 891 => [1048592]
map.insert(356, &[2097168]); // 356 => [2097168]
map.insert(1040, &[4194320]); // 1040 => [4194320]
map.insert(609, &[8388624]); // 609 => [8388624]
map.insert(96, &[96]); // 96 => [96]
map.insert(160, &[160]); // 160 => [160]
map.insert(288, &[288]); // 288 => [288]
map.insert(407, &[544]); // 407 => [544]
map.insert(359, &[1056]); // 359 => [1056]
map.insert(544, &[2080]); // 544 => [2080]
map.insert(958, &[4128]); // 958 => [4128]
map.insert(201, &[8224]); // 201 => [8224]
map.insert(255, &[16416]); // 255 => [16416]
map.insert(377, &[32800]); // 377 => [32800]
map.insert(621, &[65568]); // 621 => [65568]
map.insert(667, &[131104]); // 667 => [131104]
map.insert(693, &[262176]); // 693 => [262176]
map.insert(90, &[524320]); // 90 => [524320]
map.insert(843, &[1048608]); // 843 => [1048608]
map.insert(340, &[2097184]); // 340 => [2097184]
map.insert(1056, &[4194336]); // 1056 => [4194336]
map.insert(593, &[8388640]); // 593 => [8388640]
map.insert(192, &[192]); // 192 => [192]
map.insert(320, &[320]); // 320 => [320]
map.insert(503, &[576]); // 503 => [576]
map.insert(263, &[1088]); // 263 => [1088]
map.insert(576, &[2112]); // 576 => [2112]
map.insert(990, &[4160]); // 990 => [4160]
map.insert(169, &[8256]); // 169 => [8256]
map.insert(159, &[16448]); // 159 => [16448]
map.insert(281, &[32832]); // 281 => [32832]
map.insert(525, &[65600]); // 525 => [65600]
map.insert(763, &[131136]); // 763 => [131136]
map.insert(725, &[262208]); // 725 => [262208]
map.insert(58, &[524352]); // 58 => [524352]
map.insert(811, &[1048640]); // 811 => [1048640]
map.insert(308, &[2097216]); // 308 => [2097216]
map.insert(1088, &[4194368]); // 1088 => [4194368]
map.insert(561, &[8388672]); // 561 => [8388672]
map.insert(384, &[384]); // 384 => [384]
map.insert(311, &[640]); // 311 => [640]
map.insert(455, &[1152]); // 455 => [1152]
map.insert(640, &[2176]); // 640 => [2176]
map.insert(798, &[4224]); // 798 => [4224]
map.insert(105, &[8320]); // 105 => [8320]
map.insert(95, &[16512]); // 95 => [16512]
map.insert(473, &[32896]); // 473 => [32896]
map.insert(717, &[65664]); // 717 => [65664]
map.insert(571, &[131200]); // 571 => [131200]
map.insert(533, &[262272]); // 533 => [262272]
map.insert(250, &[524416]); // 250 => [524416]
map.insert(1003, &[1048704]); // 1003 => [1048704]
map.insert(500, &[2097280]); // 500 => [2097280]
map.insert(1152, &[4194432]); // 1152 => [4194432]
map.insert(753, &[8388736]); // 753 => [8388736]
map.insert(183, &[768]); // 183 => [768]
map.insert(71, &[1280]); // 71 => [1280]
map.insert(768, &[2304]); // 768 => [2304]
map.insert(670, &[4352]); // 670 => [4352]
map.insert(489, &[8448]); // 489 => [8448]
map.insert(479, &[16640]); // 479 => [16640]
map.insert(89, &[33024]); // 89 => [33024]
map.insert(845, &[65792]); // 845 => [65792]
map.insert(955, &[131328]); // 955 => [131328]
map.insert(917, &[262400]); // 917 => [262400]
map.insert(378, &[524544]); // 378 => [524544]
map.insert(619, &[1048832]); // 619 => [1048832]
map.insert(116, &[2097408]); // 116 => [2097408]
map.insert(1280, &[4194560]); // 1280 => [4194560]
map.insert(881, &[8388864]); // 881 => [8388864]
map.insert(240, &[1536]); // 240 => [1536]
map.insert(951, &[2560]); // 951 => [2560]
map.insert(553, &[4608]); // 553 => [4608]
map.insert(350, &[8704]); // 350 => [8704]
map.insert(360, &[16896]); // 360 => [16896]
map.insert(238, &[33280]); // 238 => [33280]
map.insert(1018, &[66048]); // 1018 => [66048]
map.insert(780, &[131584]); // 780 => [131584]
map.insert(802, &[262656]); // 802 => [262656]
map.insert(461, &[524800]); // 461 => [524800]
map.insert(732, &[1049088]); // 732 => [1049088]
map.insert(195, &[2097664]); // 195 => [2097664]
map.insert(1463, &[4194816]); // 1463 => [4194816]
map.insert(966, &[8389120]); // 966 => [8389120]
map.insert(839, &[3072]); // 839 => [3072]
map.insert(729, &[5120]); // 729 => [5120]
map.insert(430, &[9216]); // 430 => [9216]
map.insert(408, &[17408]); // 408 => [17408]
map.insert(30, &[33792]); // 30 => [33792]
map.insert(778, &[66560]); // 778 => [66560]
map.insert(1020, &[132096]); // 1020 => [132096]
map.insert(978, &[263168]); // 978 => [263168]
map.insert(317, &[525312]); // 317 => [525312]
map.insert(556, &[1049600]); // 556 => [1049600]
map.insert(51, &[2098176]); // 51 => [2098176]
map.insert(1351, &[4195328]); // 1351 => [4195328]
map.insert(822, &[8389632]); // 822 => [8389632]
map.insert(414, &[6144]); // 414 => [6144]
map.insert(745, &[10240]); // 745 => [10240]
map.insert(735, &[18432]); // 735 => [18432]
map.insert(857, &[34816]); // 857 => [34816]
map.insert(77, &[67584]); // 77 => [67584]
map.insert(187, &[133120]); // 187 => [133120]
map.insert(149, &[264192]); // 149 => [264192]
map.insert(634, &[526336]); // 634 => [526336]
map.insert(363, &[1050624]); // 363 => [1050624]
map.insert(884, &[2099200]); // 884 => [2099200]
map.insert(1536, &[4196352]); // 1536 => [4196352]
map.insert(113, &[8390656]); // 113 => [8390656]
map.insert(887, &[12288]); // 887 => [12288]
map.insert(833, &[20480]); // 833 => [20480]
map.insert(711, &[36864]); // 711 => [36864]
map.insert(467, &[69632]); // 467 => [69632]
map.insert(293, &[135168]); // 293 => [135168]
map.insert(267, &[266240]); // 267 => [266240]
map.insert(996, &[528384]); // 996 => [528384]
map.insert(245, &[1052672]); // 245 => [1052672]
map.insert(746, &[2101248]); // 746 => [2101248]
map.insert(1950, &[4198400]); // 1950 => [4198400]
map.insert(495, &[8392704]); // 495 => [8392704]
map.insert(54, &[24576]); // 54 => [24576]
map.insert(432, &[40960]); // 432 => [40960]
map.insert(676, &[73728]); // 676 => [73728]
map.insert(594, &[139264]); // 594 => [139264]
map.insert(636, &[270336]); // 636 => [270336]
map.insert(147, &[532480]); // 147 => [532480]
map.insert(898, &[1056768]); // 898 => [1056768]
map.insert(413, &[2105344]); // 413 => [2105344]
map.insert(1257, &[4202496]); // 1257 => [4202496]
map.insert(664, &[8396800]); // 664 => [8396800]
map.insert(390, &[49152]); // 390 => [49152]
map.insert(658, &[81920]); // 658 => [81920]
map.insert(612, &[147456]); // 612 => [147456]
map.insert(586, &[278528]); // 586 => [278528]
map.insert(165, &[540672]); // 165 => [540672]
map.insert(948, &[1064960]); // 948 => [1064960]
map.insert(427, &[2113536]); // 427 => [2113536]
map.insert(1247, &[4210688]); // 1247 => [4210688]
map.insert(686, &[8404992]); // 686 => [8404992]
map.insert(788, &[98304]); // 788 => [98304]
map.insert(994, &[163840]); // 994 => [163840]
map.insert(972, &[294912]); // 972 => [294912]
map.insert(291, &[557056]); // 291 => [557056]
map.insert(562, &[1081344]); // 562 => [1081344]
map.insert(45, &[2129920]); // 45 => [2129920]
map.insert(1369, &[4227072]); // 1369 => [4227072]
map.insert(808, &[8421376]); // 808 => [8421376]
map.insert(246, &[196608]); // 246 => [196608]
map.insert(216, &[327680]); // 216 => [327680]
map.insert(567, &[589824]); // 567 => [589824]
map.insert(294, &[1114112]); // 294 => [1114112]
map.insert(825, &[2162688]); // 825 => [2162688]
map.insert(1613, &[4259840]); // 1613 => [4259840]
map.insert(60, &[8454144]); // 60 => [8454144]
map.insert(46, &[393216]); // 46 => [393216]
map.insert(705, &[655360]); // 705 => [655360]
map.insert(464, &[1179648]); // 464 => [1179648]
map.insert(975, &[2228224]); // 975 => [2228224]
map.insert(1723, &[4325376]); // 1723 => [4325376]
map.insert(202, &[8519680]); // 202 => [8519680]
map.insert(751, &[786432]); // 751 => [786432]
map.insert(510, &[1310720]); // 510 => [1310720]
map.insert(993, &[2359296]); // 993 => [2359296]
map.insert(1685, &[4456448]); // 1685 => [4456448]
map.insert(228, &[8650752]); // 228 => [8650752]
map.insert(785, &[1572864]); // 785 => [1572864]
map.insert(270, &[2621440]); // 270 => [2621440]
map.insert(1146, &[4718592]); // 1146 => [4718592]
map.insert(523, &[8912896]); // 523 => [8912896]
map.insert(543, &[3145728]); // 543 => [3145728]
map.insert(1899, &[5242880]); // 1899 => [5242880]
map.insert(282, &[9437184]); // 282 => [9437184]
map.insert(1396, &[6291456]); // 1396 => [6291456]
map.insert(773, &[10485760]); // 773 => [10485760]
map.insert(1649, &[12582912]); // 1649 => [12582912]
map.insert(7, &[7]); // 7 => [7]
map.insert(11, &[11]); // 11 => [11]
map.insert(19, &[19]); // 19 => [19]
map.insert(35, &[35]); // 35 => [35]
map.insert(67, &[67]); // 67 => [67]
map.insert(131, &[131]); // 131 => [131]
map.insert(259, &[259]); // 259 => [259]
map.insert(436, &[515]); // 436 => [515]
map.insert(324, &[1027]); // 324 => [1027]
map.insert(515, &[2051]); // 515 => [2051]
map.insert(925, &[4099]); // 925 => [4099]
map.insert(234, &[8195]); // 234 => [8195]
map.insert(220, &[16387]); // 220 => [16387]
map.insert(346, &[32771]); // 346 => [32771]
map.insert(590, &[65539]); // 590 => [65539]
map.insert(696, &[131075]); // 696 => [131075]
map.insert(662, &[262147]); // 662 => [262147]
map.insert(121, &[524291]); // 121 => [524291]
map.insert(872, &[1048579]); // 872 => [1048579]
map.insert(375, &[2097155]); // 375 => [2097155]
map.insert(1027, &[4194307]); // 1027 => [4194307]
map.insert(626, &[8388611]); // 626 => [8388611]
map.insert(13, &[13]); // 13 => [13]
map.insert(21, &[21]); // 21 => [21]
map.insert(37, &[37]); // 37 => [37]
map.insert(69, &[69]); // 69 => [69]
map.insert(133, &[133]); // 133 => [133]
map.insert(261, &[261]); // 261 => [261]
map.insert(434, &[517]); // 434 => [517]
map.insert(322, &[1029]); // 322 => [1029]
map.insert(517, &[2053]); // 517 => [2053]
map.insert(923, &[4101]); // 923 => [4101]
map.insert(236, &[8197]); // 236 => [8197]
map.insert(218, &[16389]); // 218 => [16389]
map.insert(348, &[32773]); // 348 => [32773]
map.insert(584, &[65541]); // 584 => [65541]
map.insert(702, &[131077]); // 702 => [131077]
map.insert(656, &[262149]); // 656 => [262149]
map.insert(127, &[524293]); // 127 => [524293]
map.insert(878, &[1048581]); // 878 => [1048581]
map.insert(369, &[2097157]); // 369 => [2097157]
map.insert(1029, &[4194309]); // 1029 => [4194309]
map.insert(628, &[8388613]); // 628 => [8388613]
map.insert(25, &[25]); // 25 => [25]
map.insert(41, &[41]); // 41 => [41]
map.insert(73, &[73]); // 73 => [73]
map.insert(137, &[137]); // 137 => [137]
map.insert(265, &[265]); // 265 => [265]
map.insert(446, &[521]); // 446 => [521]
map.insert(334, &[1033]); // 334 => [1033]
map.insert(521, &[2057]); // 521 => [2057]
map.insert(919, &[4105]); // 919 => [4105]
map.insert(224, &[8201]); // 224 => [8201]
map.insert(214, &[16393]); // 214 => [16393]
map.insert(336, &[32777]); // 336 => [32777]
map.insert(580, &[65545]); // 580 => [65545]
map.insert(690, &[131081]); // 690 => [131081]
map.insert(668, &[262153]); // 668 => [262153]
map.insert(115, &[524297]); // 115 => [524297]
map.insert(866, &[1048585]); // 866 => [1048585]
map.insert(381, &[2097161]); // 381 => [2097161]
map.insert(1033, &[4194313]); // 1033 => [4194313]
map.insert(632, &[8388617]); // 632 => [8388617]
map.insert(49, &[49]); // 49 => [49]
map.insert(81, &[81]); // 81 => [81]
map.insert(145, &[145]); // 145 => [145]
map.insert(273, &[273]); // 273 => [273]
map.insert(422, &[529]); // 422 => [529]
map.insert(342, &[1041]); // 342 => [1041]
map.insert(529, &[2065]); // 529 => [2065]
map.insert(911, &[4113]); // 911 => [4113]
map.insert(248, &[8209]); // 248 => [8209]
map.insert(206, &[16401]); // 206 => [16401]
map.insert(328, &[32785]); // 328 => [32785]
map.insert(604, &[65553]); // 604 => [65553]
map.insert(682, &[131089]); // 682 => [131089]
map.insert(644, &[262161]); // 644 => [262161]
map.insert(107, &[524305]); // 107 => [524305]
map.insert(890, &[1048593]); // 890 => [1048593]
map.insert(357, &[2097169]); // 357 => [2097169]
map.insert(1041, &[4194321]); // 1041 => [4194321]
map.insert(608, &[8388625]); // 608 => [8388625]
map.insert(97, &[97]); // 97 => [97]
map.insert(161, &[161]); // 161 => [161]
map.insert(289, &[289]); // 289 => [289]
map.insert(406, &[545]); // 406 => [545]
map.insert(358, &[1057]); // 358 => [1057]
map.insert(545, &[2081]); // 545 => [2081]
map.insert(959, &[4129]); // 959 => [4129]
map.insert(200, &[8225]); // 200 => [8225]
map.insert(254, &[16417]); // 254 => [16417]
map.insert(376, &[32801]); // 376 => [32801]
map.insert(620, &[65569]); // 620 => [65569]
map.insert(666, &[131105]); // 666 => [131105]
map.insert(692, &[262177]); // 692 => [262177]
map.insert(91, &[524321]); // 91 => [524321]
map.insert(842, &[1048609]); // 842 => [1048609]
map.insert(341, &[2097185]); // 341 => [2097185]
map.insert(1057, &[4194337]); // 1057 => [4194337]
map.insert(592, &[8388641]); // 592 => [8388641]
map.insert(193, &[193]); // 193 => [193]
map.insert(321, &[321]); // 321 => [321]
map.insert(502, &[577]); // 502 => [577]
map.insert(262, &[1089]); // 262 => [1089]
map.insert(577, &[2113]); // 577 => [2113]
map.insert(991, &[4161]); // 991 => [4161]
map.insert(168, &[8257]); // 168 => [8257]
map.insert(158, &[16449]); // 158 => [16449]
map.insert(280, &[32833]); // 280 => [32833]
map.insert(524, &[65601]); // 524 => [65601]
map.insert(762, &[131137]); // 762 => [131137]
map.insert(724, &[262209]); // 724 => [262209]
map.insert(59, &[524353]); // 59 => [524353]
map.insert(810, &[1048641]); // 810 => [1048641]
map.insert(309, &[2097217]); // 309 => [2097217]
map.insert(1089, &[4194369]); // 1089 => [4194369]
map.insert(560, &[8388673]); // 560 => [8388673]
map.insert(385, &[385]); // 385 => [385]
map.insert(310, &[641]); // 310 => [641]
map.insert(454, &[1153]); // 454 => [1153]
map.insert(641, &[2177]); // 641 => [2177]
map.insert(799, &[4225]); // 799 => [4225]
map.insert(104, &[8321]); // 104 => [8321]
map.insert(94, &[16513]); // 94 => [16513]
map.insert(472, &[32897]); // 472 => [32897]
map.insert(716, &[65665]); // 716 => [65665]
map.insert(570, &[131201]); // 570 => [131201]
map.insert(532, &[262273]); // 532 => [262273]
map.insert(251, &[524417]); // 251 => [524417]
map.insert(1002, &[1048705]); // 1002 => [1048705]
map.insert(501, &[2097281]); // 501 => [2097281]
map.insert(1153, &[4194433]); // 1153 => [4194433]
map.insert(752, &[8388737]); // 752 => [8388737]
map.insert(182, &[769]); // 182 => [769]
map.insert(70, &[1281]); // 70 => [1281]
map.insert(769, &[2305]); // 769 => [2305]
map.insert(671, &[4353]); // 671 => [4353]
map.insert(488, &[8449]); // 488 => [8449]
map.insert(478, &[16641]); // 478 => [16641]
map.insert(88, &[33025]); // 88 => [33025]
map.insert(844, &[65793]); // 844 => [65793]
map.insert(954, &[131329]); // 954 => [131329]
map.insert(916, &[262401]); // 916 => [262401]
map.insert(379, &[524545]); // 379 => [524545]
map.insert(618, &[1048833]); // 618 => [1048833]
map.insert(117, &[2097409]); // 117 => [2097409]
map.insert(1281, &[4194561]); // 1281 => [4194561]
map.insert(880, &[8388865]); // 880 => [8388865]
map.insert(241, &[1537]); // 241 => [1537]
map.insert(950, &[2561]); // 950 => [2561]
map.insert(552, &[4609]); // 552 => [4609]
map.insert(351, &[8705]); // 351 => [8705]
map.insert(361, &[16897]); // 361 => [16897]
map.insert(239, &[33281]); // 239 => [33281]
map.insert(1019, &[66049]); // 1019 => [66049]
map.insert(781, &[131585]); // 781 => [131585]
map.insert(803, &[262657]); // 803 => [262657]
map.insert(460, &[524801]); // 460 => [524801]
map.insert(733, &[1049089]); // 733 => [1049089]
map.insert(194, &[2097665]); // 194 => [2097665]
map.insert(1462, &[4194817]); // 1462 => [4194817]
map.insert(967, &[8389121]); // 967 => [8389121]
map.insert(838, &[3073]); // 838 => [3073]
map.insert(728, &[5121]); // 728 => [5121]
map.insert(431, &[9217]); // 431 => [9217]
map.insert(409, &[17409]); // 409 => [17409]
map.insert(31, &[33793]); // 31 => [33793]
map.insert(779, &[66561]); // 779 => [66561]
map.insert(1021, &[132097]); // 1021 => [132097]
map.insert(979, &[263169]); // 979 => [263169]
map.insert(316, &[525313]); // 316 => [525313]
map.insert(557, &[1049601]); // 557 => [1049601]
map.insert(50, &[2098177]); // 50 => [2098177]
map.insert(1350, &[4195329]); // 1350 => [4195329]
map.insert(823, &[8389633]); // 823 => [8389633]
map.insert(415, &[6145]); // 415 => [6145]
map.insert(744, &[10241]); // 744 => [10241]
map.insert(734, &[18433]); // 734 => [18433]
map.insert(856, &[34817]); // 856 => [34817]
map.insert(76, &[67585]); // 76 => [67585]
map.insert(186, &[133121]); // 186 => [133121]
map.insert(148, &[264193]); // 148 => [264193]
map.insert(635, &[526337]); // 635 => [526337]
map.insert(362, &[1050625]); // 362 => [1050625]
map.insert(885, &[2099201]); // 885 => [2099201]
map.insert(1537, &[4196353]); // 1537 => [4196353]
map.insert(112, &[8390657]); // 112 => [8390657]
map.insert(886, &[12289]); // 886 => [12289]
map.insert(832, &[20481]); // 832 => [20481]
map.insert(710, &[36865]); // 710 => [36865]
map.insert(466, &[69633]); // 466 => [69633]
map.insert(292, &[135169]); // 292 => [135169]
map.insert(266, &[266241]); // 266 => [266241]
map.insert(997, &[528385]); // 997 => [528385]
map.insert(244, &[1052673]); // 244 => [1052673]
map.insert(747, &[2101249]); // 747 => [2101249]
map.insert(1951, &[4198401]); // 1951 => [4198401]
map.insert(494, &[8392705]); // 494 => [8392705]
map.insert(55, &[24577]); // 55 => [24577]
map.insert(433, &[40961]); // 433 => [40961]
map.insert(677, &[73729]); // 677 => [73729]
map.insert(595, &[139265]); // 595 => [139265]
map.insert(637, &[270337]); // 637 => [270337]
map.insert(146, &[532481]); // 146 => [532481]
map.insert(899, &[1056769]); // 899 => [1056769]
map.insert(412, &[2105345]); // 412 => [2105345]
map.insert(1256, &[4202497]); // 1256 => [4202497]
map.insert(665, &[8396801]); // 665 => [8396801]
map.insert(391, &[49153]); // 391 => [49153]
map.insert(659, &[81921]); // 659 => [81921]
map.insert(613, &[147457]); // 613 => [147457]
map.insert(587, &[278529]); // 587 => [278529]
map.insert(164, &[540673]); // 164 => [540673]
map.insert(949, &[1064961]); // 949 => [1064961]
map.insert(426, &[2113537]); // 426 => [2113537]
map.insert(1246, &[4210689]); // 1246 => [4210689]
map.insert(687, &[8404993]); // 687 => [8404993]
map.insert(789, &[98305]); // 789 => [98305]
map.insert(995, &[163841]); // 995 => [163841]
map.insert(973, &[294913]); // 973 => [294913]
map.insert(290, &[557057]); // 290 => [557057]
map.insert(563, &[1081345]); // 563 => [1081345]
map.insert(44, &[2129921]); // 44 => [2129921]
map.insert(1368, &[4227073]); // 1368 => [4227073]
map.insert(809, &[8421377]); // 809 => [8421377]
map.insert(247, &[196609]); // 247 => [196609]
map.insert(217, &[327681]); // 217 => [327681]
map.insert(566, &[589825]); // 566 => [589825]
map.insert(295, &[1114113]); // 295 => [1114113]
map.insert(824, &[2162689]); // 824 => [2162689]
map.insert(1612, &[4259841]); // 1612 => [4259841]
map.insert(61, &[8454145]); // 61 => [8454145]
map.insert(47, &[393217]); // 47 => [393217]
map.insert(704, &[655361]); // 704 => [655361]
map.insert(465, &[1179649]); // 465 => [1179649]
map.insert(974, &[2228225]); // 974 => [2228225]
map.insert(1722, &[4325377]); // 1722 => [4325377]
map.insert(203, &[8519681]); // 203 => [8519681]
map.insert(750, &[786433]); // 750 => [786433]
map.insert(511, &[1310721]); // 511 => [1310721]
map.insert(992, &[2359297]); // 992 => [2359297]
map.insert(1684, &[4456449]); // 1684 => [4456449]
map.insert(229, &[8650753]); // 229 => [8650753]
map.insert(784, &[1572865]); // 784 => [1572865]
map.insert(271, &[2621441]); // 271 => [2621441]
map.insert(1147, &[4718593]); // 1147 => [4718593]
map.insert(522, &[8912897]); // 522 => [8912897]
map.insert(542, &[3145729]); // 542 => [3145729]
map.insert(1898, &[5242881]); // 1898 => [5242881]
map.insert(283, &[9437185]); // 283 => [9437185]
map.insert(1397, &[6291457]); // 1397 => [6291457]
map.insert(772, &[10485761]); // 772 => [10485761]
map.insert(1648, &[12582913]); // 1648 => [12582913]
map.insert(14, &[14]); // 14 => [14]
map.insert(22, &[22]); // 22 => [22]
map.insert(38, &[38]); // 38 => [38]
map.insert(134, &[134]); // 134 => [134]
map.insert(518, &[2054]); // 518 => [2054]
map.insert(920, &[4102]); // 920 => [4102]
map.insert(701, &[131078]); // 701 => [131078]
map.insert(124, &[524294]); // 124 => [524294]
map.insert(877, &[1048582]); // 877 => [1048582]
map.insert(370, &[2097158]); // 370 => [2097158]
map.insert(1030, &[4194310]); // 1030 => [4194310]
map.insert(631, &[8388614]); // 631 => [8388614]
map.insert(26, &[26]); // 26 => [26]
map.insert(42, &[42]); // 42 => [42]
map.insert(74, &[74]); // 74 => [74]
map.insert(138, &[138]); // 138 => [138]
map.insert(445, &[522]); // 445 => [522]
map.insert(333, &[1034]); // 333 => [1034]
map.insert(227, &[8202]); // 227 => [8202]
map.insert(213, &[16394]); // 213 => [16394]
map.insert(339, &[32778]); // 339 => [32778]
map.insert(583, &[65546]); // 583 => [65546]
map.insert(689, &[131082]); // 689 => [131082]
map.insert(865, &[1048586]); // 865 => [1048586]
map.insert(382, &[2097162]); // 382 => [2097162]
map.insert(1034, &[4194314]); // 1034 => [4194314]
map.insert(82, &[82]); // 82 => [82]
map.insert(274, &[274]); // 274 => [274]
map.insert(421, &[530]); // 421 => [530]
map.insert(530, &[2066]); // 530 => [2066]
map.insert(908, &[4114]); // 908 => [4114]
map.insert(205, &[16402]); // 205 => [16402]
map.insert(331, &[32786]); // 331 => [32786]
map.insert(607, &[65554]); // 607 => [65554]
map.insert(681, &[131090]); // 681 => [131090]
map.insert(647, &[262162]); // 647 => [262162]
map.insert(889, &[1048594]); // 889 => [1048594]
map.insert(1042, &[4194322]); // 1042 => [4194322]
map.insert(611, &[8388626]); // 611 => [8388626]
map.insert(98, &[98]); // 98 => [98]
map.insert(162, &[162]); // 162 => [162]
map.insert(405, &[546]); // 405 => [546]
map.insert(546, &[2082]); // 546 => [2082]
map.insert(956, &[4130]); // 956 => [4130]
map.insert(253, &[16418]); // 253 => [16418]
map.insert(623, &[65570]); // 623 => [65570]
map.insert(695, &[262178]); // 695 => [262178]
map.insert(841, &[1048610]); // 841 => [1048610]
map.insert(1058, &[4194338]); // 1058 => [4194338]
map.insert(578, &[2114]); // 578 => [2114]
map.insert(988, &[4162]); // 988 => [4162]
map.insert(171, &[8258]); // 171 => [8258]
map.insert(157, &[16450]); // 157 => [16450]
map.insert(527, &[65602]); // 527 => [65602]
map.insert(761, &[131138]); // 761 => [131138]
map.insert(727, &[262210]); // 727 => [262210]
map.insert(56, &[524354]); // 56 => [524354]
map.insert(1090, &[4194370]); // 1090 => [4194370]
map.insert(386, &[386]); // 386 => [386]
map.insert(453, &[1154]); // 453 => [1154]
map.insert(642, &[2178]); // 642 => [2178]
map.insert(796, &[4226]); // 796 => [4226]
map.insert(93, &[16514]); // 93 => [16514]
map.insert(475, &[32898]); // 475 => [32898]
map.insert(719, &[65666]); // 719 => [65666]
map.insert(569, &[131202]); // 569 => [131202]
map.insert(535, &[262274]); // 535 => [262274]
map.insert(1001, &[1048706]); // 1001 => [1048706]
map.insert(1154, &[4194434]); // 1154 => [4194434]
map.insert(755, &[8388738]); // 755 => [8388738]
map.insert(181, &[770]); // 181 => [770]
map.insert(770, &[2306]); // 770 => [2306]
map.insert(491, &[8450]); // 491 => [8450]
map.insert(477, &[16642]); // 477 => [16642]
map.insert(847, &[65794]); // 847 => [65794]
map.insert(953, &[131330]); // 953 => [131330]
map.insert(617, &[1048834]); // 617 => [1048834]
map.insert(118, &[2097410]); // 118 => [2097410]
map.insert(1282, &[4194562]); // 1282 => [4194562]
map.insert(883, &[8388866]); // 883 => [8388866]
map.insert(242, &[1538]); // 242 => [1538]
map.insert(555, &[4610]); // 555 => [4610]
map.insert(1016, &[66050]); // 1016 => [66050]
map.insert(782, &[131586]); // 782 => [131586]
map.insert(800, &[262658]); // 800 => [262658]
map.insert(463, &[524802]); // 463 => [524802]
map.insert(1461, &[4194818]); // 1461 => [4194818]
map.insert(964, &[8389122]); // 964 => [8389122]
map.insert(837, &[3074]); // 837 => [3074]
map.insert(731, &[5122]); // 731 => [5122]
map.insert(428, &[9218]); // 428 => [9218]
map.insert(410, &[17410]); // 410 => [17410]
map.insert(28, &[33794]); // 28 => [33794]
map.insert(776, &[66562]); // 776 => [66562]
map.insert(1022, &[132098]); // 1022 => [132098]
map.insert(976, &[263170]); // 976 => [263170]
map.insert(319, &[525314]); // 319 => [525314]
map.insert(558, &[1049602]); // 558 => [1049602]
map.insert(1349, &[4195330]); // 1349 => [4195330]
map.insert(820, &[8389634]); // 820 => [8389634]
map.insert(859, &[34818]); // 859 => [34818]
map.insert(79, &[67586]); // 79 => [67586]
map.insert(185, &[133122]); // 185 => [133122]
map.insert(151, &[264194]); // 151 => [264194]
map.insert(1538, &[4196354]); // 1538 => [4196354]
map.insert(835, &[20482]); // 835 => [20482]
map.insert(709, &[36866]); // 709 => [36866]
map.insert(998, &[528386]); // 998 => [528386]
map.insert(1948, &[4198402]); // 1948 => [4198402]
map.insert(493, &[8392706]); // 493 => [8392706]
map.insert(52, &[24578]); // 52 => [24578]
map.insert(678, &[73730]); // 678 => [73730]
map.insert(638, &[270338]); // 638 => [270338]
map.insert(896, &[1056770]); // 896 => [1056770]
map.insert(1259, &[4202498]); // 1259 => [4202498]
map.insert(388, &[49154]); // 388 => [49154]
map.insert(614, &[147458]); // 614 => [147458]
map.insert(167, &[540674]); // 167 => [540674]
map.insert(425, &[2113538]); // 425 => [2113538]
map.insert(1245, &[4210690]); // 1245 => [4210690]
map.insert(684, &[8404994]); // 684 => [8404994]
map.insert(790, &[98306]); // 790 => [98306]
map.insert(1371, &[4227074]); // 1371 => [4227074]
map.insert(565, &[589826]); // 565 => [589826]
map.insert(827, &[2162690]); // 827 => [2162690]
map.insert(1615, &[4259842]); // 1615 => [4259842]
map.insert(62, &[8454146]); // 62 => [8454146]
map.insert(707, &[655362]); // 707 => [655362]
map.insert(1721, &[4325378]); // 1721 => [4325378]
map.insert(749, &[786434]); // 749 => [786434]
map.insert(508, &[1310722]); // 508 => [1310722]
map.insert(1687, &[4456450]); // 1687 => [4456450]
map.insert(230, &[8650754]); // 230 => [8650754]
map.insert(787, &[1572866]); // 787 => [1572866]
map.insert(268, &[2621442]); // 268 => [2621442]
map.insert(1144, &[4718594]); // 1144 => [4718594]
map.insert(541, &[3145730]); // 541 => [3145730]
map.insert(1897, &[5242882]); // 1897 => [5242882]
map.insert(1398, &[6291458]); // 1398 => [6291458]
map.insert(775, &[10485762]); // 775 => [10485762]
map.insert(1651, &[12582914]); // 1651 => [12582914]
map.insert(140, &[140]); // 140 => [140]
map.insert(443, &[524]); // 443 => [524]
map.insert(914, &[4108]); // 914 => [4108]
map.insert(211, &[16396]); // 211 => [16396]
map.insert(871, &[1048588]); // 871 => [1048588]
map.insert(1036, &[4194316]); // 1036 => [4194316]
map.insert(84, &[84]); // 84 => [84]
map.insert(276, &[276]); // 276 => [276]
map.insert(419, &[532]); // 419 => [532]
map.insert(906, &[4116]); // 906 => [4116]
map.insert(601, &[65556]); // 601 => [65556]
map.insert(110, &[524308]); // 110 => [524308]
map.insert(895, &[1048596]); // 895 => [1048596]
map.insert(352, &[2097172]); // 352 => [2097172]
map.insert(1044, &[4194324]); // 1044 => [4194324]
map.insert(100, &[100]); // 100 => [100]
map.insert(403, &[548]); // 403 => [548]
map.insert(355, &[1060]); // 355 => [1060]
map.insert(548, &[2084]); // 548 => [2084]
map.insert(1060, &[4194340]); // 1060 => [4194340]
map.insert(597, &[8388644]); // 597 => [8388644]
map.insert(196, &[196]); // 196 => [196]
map.insert(499, &[580]); // 499 => [580]
map.insert(986, &[4164]); // 986 => [4164]
map.insert(173, &[8260]); // 173 => [8260]
map.insert(155, &[16452]); // 155 => [16452]
map.insert(285, &[32836]); // 285 => [32836]
map.insert(767, &[131140]); // 767 => [131140]
map.insert(721, &[262212]); // 721 => [262212]
map.insert(815, &[1048644]); // 815 => [1048644]
map.insert(304, &[2097220]); // 304 => [2097220]
map.insert(1092, &[4194372]); // 1092 => [4194372]
map.insert(307, &[644]); // 307 => [644]
map.insert(451, &[1156]); // 451 => [1156]
map.insert(794, &[4228]); // 794 => [4228]
map.insert(109, &[8324]); // 109 => [8324]
map.insert(713, &[65668]); // 713 => [65668]
map.insert(575, &[131204]); // 575 => [131204]
map.insert(1007, &[1048708]); // 1007 => [1048708]
map.insert(496, &[2097284]); // 496 => [2097284]
map.insert(1156, &[4194436]); // 1156 => [4194436]
map.insert(757, &[8388740]); // 757 => [8388740]
map.insert(179, &[772]); // 179 => [772]
map.insert(913, &[262404]); // 913 => [262404]
map.insert(1284, &[4194564]); // 1284 => [4194564]
map.insert(947, &[2564]); // 947 => [2564]
map.insert(364, &[16900]); // 364 => [16900]
map.insert(806, &[262660]); // 806 => [262660]
map.insert(457, &[524804]); // 457 => [524804]
map.insert(199, &[2097668]); // 199 => [2097668]
map.insert(1459, &[4194820]); // 1459 => [4194820]
map.insert(962, &[8389124]); // 962 => [8389124]
map.insert(982, &[263172]); // 982 => [263172]
map.insert(313, &[525316]); // 313 => [525316]
map.insert(1347, &[4195332]); // 1347 => [4195332]
map.insert(818, &[8389636]); // 818 => [8389636]
map.insert(861, &[34820]); // 861 => [34820]
map.insert(191, &[133124]); // 191 => [133124]
map.insert(367, &[1050628]); // 367 => [1050628]
map.insert(1540, &[4196356]); // 1540 => [4196356]
map.insert(471, &[69636]); // 471 => [69636]
map.insert(1946, &[4198404]); // 1946 => [4198404]
map.insert(672, &[73732]); // 672 => [73732]
map.insert(598, &[139268]); // 598 => [139268]
map.insert(902, &[1056772]); // 902 => [1056772]
map.insert(1261, &[4202500]); // 1261 => [4202500]
map.insert(944, &[1064964]); // 944 => [1064964]
map.insert(1243, &[4210692]); // 1243 => [4210692]
map.insert(968, &[294916]); // 968 => [294916]
map.insert(1373, &[4227076]); // 1373 => [4227076]
map.insert(812, &[8421380]); // 812 => [8421380]
map.insert(829, &[2162692]); // 829 => [2162692]
map.insert(1609, &[4259844]); // 1609 => [4259844]
map.insert(468, &[1179652]); // 468 => [1179652]
map.insert(971, &[2228228]); // 971 => [2228228]
map.insert(1727, &[4325380]); // 1727 => [4325380]
map.insert(506, &[1310724]); // 506 => [1310724]
map.insert(1681, &[4456452]); // 1681 => [4456452]
map.insert(1150, &[4718596]); // 1150 => [4718596]
map.insert(539, &[3145732]); // 539 => [3145732]
map.insert(1903, &[5242884]); // 1903 => [5242884]
map.insert(286, &[9437188]); // 286 => [9437188]
map.insert(1392, &[6291460]); // 1392 => [6291460]
map.insert(1653, &[12582916]); // 1653 => [12582916]
map.insert(152, &[152]); // 152 => [152]
map.insert(536, &[2072]); // 536 => [2072]
map.insert(675, &[131096]); // 675 => [131096]
map.insert(653, &[262168]); // 653 => [262168]
map.insert(1048, &[4194328]); // 1048 => [4194328]
map.insert(296, &[296]); // 296 => [296]
map.insert(1064, &[4194344]); // 1064 => [4194344]
map.insert(1096, &[4194376]); // 1096 => [4194376]
map.insert(392, &[392]); // 392 => [392]
map.insert(648, &[2184]); // 648 => [2184]
map.insert(87, &[16520]); // 87 => [16520]
map.insert(1160, &[4194440]); // 1160 => [4194440]
map.insert(481, &[8456]); // 481 => [8456]
map.insert(1288, &[4194568]); // 1288 => [4194568]
map.insert(1010, &[66056]); // 1010 => [66056]
map.insert(1471, &[4194824]); // 1471 => [4194824]
map.insert(400, &[17416]); // 400 => [17416]
map.insert(1012, &[132104]); // 1012 => [132104]
map.insert(1359, &[4195336]); // 1359 => [4195336]
map.insert(830, &[8389640]); // 830 => [8389640]
map.insert(737, &[10248]); // 737 => [10248]
map.insert(849, &[34824]); // 849 => [34824]
map.insert(892, &[2099208]); // 892 => [2099208]
map.insert(1544, &[4196360]); // 1544 => [4196360]
map.insert(301, &[135176]); // 301 => [135176]
map.insert(1004, &[528392]); // 1004 => [528392]
map.insert(738, &[2101256]); // 738 => [2101256]
map.insert(1942, &[4198408]); // 1942 => [4198408]
map.insert(487, &[8392712]); // 487 => [8392712]
map.insert(440, &[40968]); // 440 => [40968]
map.insert(602, &[139272]); // 602 => [139272]
map.insert(1249, &[4202504]); // 1249 => [4202504]
map.insert(398, &[49160]); // 398 => [49160]
map.insert(1239, &[4210696]); // 1239 => [4210696]
map.insert(299, &[557064]); // 299 => [557064]
map.insert(1361, &[4227080]); // 1361 => [4227080]
map.insert(208, &[327688]); // 208 => [327688]
map.insert(302, &[1114120]); // 302 => [1114120]
map.insert(817, &[2162696]); // 817 => [2162696]
map.insert(1605, &[4259848]); // 1605 => [4259848]
map.insert(1715, &[4325384]); // 1715 => [4325384]
map.insert(743, &[786440]); // 743 => [786440]
map.insert(1693, &[4456456]); // 1693 => [4456456]
map.insert(793, &[1572872]); // 793 => [1572872]
map.insert(1138, &[4718600]); // 1138 => [4718600]
map.insert(1891, &[5242888]); // 1891 => [5242888]
map.insert(1404, &[6291464]); // 1404 => [6291464]
map.insert(1657, &[12582920]); // 1657 => [12582920]
map.insert(176, &[176]); // 176 => [176]
map.insert(942, &[4144]); // 942 => [4144]
map.insert(651, &[131120]); // 651 => [131120]
map.insert(1072, &[4194352]); // 1072 => [4194352]
map.insert(279, &[1104]); // 279 => [1104]
map.insert(143, &[16464]); // 143 => [16464]
map.insert(1104, &[4194384]); // 1104 => [4194384]
map.insert(484, &[2097296]); // 484 => [2097296]
map.insert(1168, &[4194448]); // 1168 => [4194448]
map.insert(654, &[4368]); // 654 => [4368]
map.insert(505, &[8464]); // 505 => [8464]
map.insert(939, &[131344]); // 939 => [131344]
map.insert(901, &[262416]); // 901 => [262416]
map.insert(1296, &[4194576]); // 1296 => [4194576]
map.insert(935, &[2576]); // 935 => [2576]
map.insert(1447, &[4194832]); // 1447 => [4194832]
map.insert(855, &[3088]); // 855 => [3088]
map.insert(572, &[1049616]); // 572 => [1049616]
map.insert(1367, &[4195344]); // 1367 => [4195344]
map.insert(868, &[2099216]); // 868 => [2099216]
map.insert(1552, &[4196368]); // 1552 => [4196368]
map.insert(1934, &[4198416]); // 1934 => [4198416]
map.insert(416, &[40976]); // 416 => [40976]
map.insert(397, &[2105360]); // 397 => [2105360]
map.insert(1273, &[4202512]); // 1273 => [4202512]
map.insert(932, &[1064976]); // 932 => [1064976]
map.insert(1231, &[4210704]); // 1231 => [4210704]
map.insert(1353, &[4227088]); // 1353 => [4227088]
map.insert(551, &[589840]); // 551 => [589840]
map.insert(1629, &[4259856]); // 1629 => [4259856]
map.insert(448, &[1179664]); // 448 => [1179664]
map.insert(1707, &[4325392]); // 1707 => [4325392]
map.insert(1009, &[2359312]); // 1009 => [2359312]
map.insert(1669, &[4456464]); // 1669 => [4456464]
map.insert(1130, &[4718608]); // 1130 => [4718608]
map.insert(1915, &[5242896]); // 1915 => [5242896]
map.insert(1380, &[6291472]); // 1380 => [6291472]
map.insert(1633, &[12582928]); // 1633 => [12582928]
map.insert(1120, &[4194400]); // 1120 => [4194400]
map.insert(1184, &[4194464]); // 1184 => [4194464]
map.insert(103, &[1312]); // 103 => [1312]
map.insert(1312, &[4194592]); // 1312 => [4194592]
map.insert(764, &[1049120]); // 764 => [1049120]
map.insert(1431, &[4194848]); // 1431 => [4194848]
map.insert(1383, &[4195360]); // 1383 => [4195360]
map.insert(852, &[2099232]); // 852 => [2099232]
map.insert(1568, &[4196384]); // 1568 => [4196384]
map.insert(714, &[2101280]); // 714 => [2101280]
map.insert(1982, &[4198432]); // 1982 => [4198432]
map.insert(930, &[1056800]); // 930 => [1056800]
map.insert(1225, &[4202528]); // 1225 => [4202528]
map.insert(395, &[2113568]); // 395 => [2113568]
map.insert(1279, &[4210720]); // 1279 => [4210720]
map.insert(1401, &[4227104]); // 1401 => [4227104]
map.insert(1645, &[4259872]); // 1645 => [4259872]
map.insert(1691, &[4325408]); // 1691 => [4325408]
map.insert(961, &[2359328]); // 961 => [2359328]
map.insert(1717, &[4456480]); // 1717 => [4456480]
map.insert(1114, &[4718624]); // 1114 => [4718624]
map.insert(1867, &[5242912]); // 1867 => [5242912]
map.insert(314, &[9437216]); // 314 => [9437216]
map.insert(1364, &[6291488]); // 1364 => [6291488]
map.insert(805, &[10485792]); // 805 => [10485792]
map.insert(1617, &[12582944]); // 1617 => [12582944]
map.insert(862, &[4288]); // 862 => [4288]
map.insert(1216, &[4194496]); // 1216 => [4194496]
map.insert(981, &[262464]); // 981 => [262464]
map.insert(1344, &[4194624]); // 1344 => [4194624]
map.insert(1015, &[2624]); // 1015 => [2624]
map.insert(174, &[33344]); // 174 => [33344]
map.insert(1527, &[4194880]); // 1527 => [4194880]
map.insert(1287, &[4195392]); // 1287 => [4195392]
map.insert(1600, &[4196416]); // 1600 => [4196416]
map.insert(2014, &[4198464]); // 2014 => [4198464]
map.insert(740, &[73792]); // 740 => [73792]
map.insert(1193, &[4202560]); // 1193 => [4202560]
map.insert(722, &[81984]); // 722 => [81984]
map.insert(1183, &[4210752]); // 1183 => [4210752]
map.insert(1305, &[4227136]); // 1305 => [4227136]
map.insert(1549, &[4259904]); // 1549 => [4259904]
map.insert(1787, &[4325440]); // 1787 => [4325440]
map.insert(929, &[2359360]); // 929 => [2359360]
map.insert(1749, &[4456512]); // 1749 => [4456512]
map.insert(1082, &[4718656]); // 1082 => [4718656]
map.insert(1835, &[5242944]); // 1835 => [5242944]
map.insert(1332, &[6291520]); // 1332 => [6291520]
map.insert(1585, &[12582976]); // 1585 => [12582976]
map.insert(1408, &[4194688]); // 1408 => [4194688]
map.insert(1335, &[4194944]); // 1335 => [4194944]
map.insert(850, &[263296]); // 850 => [263296]
map.insert(1479, &[4195456]); // 1479 => [4195456]
map.insert(985, &[34944]); // 985 => [34944]
map.insert(1664, &[4196480]); // 1664 => [4196480]
map.insert(1822, &[4198528]); // 1822 => [4198528]
map.insert(1129, &[4202624]); // 1129 => [4202624]
map.insert(1119, &[4210816]); // 1119 => [4210816]
map.insert(1497, &[4227200]); // 1497 => [4227200]
map.insert(936, &[8421504]); // 936 => [8421504]
map.insert(1741, &[4259968]); // 1741 => [4259968]
map.insert(188, &[8454272]); // 188 => [8454272]
map.insert(1595, &[4325504]); // 1595 => [4325504]
map.insert(1557, &[4456576]); // 1557 => [4456576]
map.insert(1274, &[4718720]); // 1274 => [4718720]
map.insert(2027, &[5243008]); // 2027 => [5243008]
map.insert(1524, &[6291584]); // 1524 => [6291584]
map.insert(1777, &[12583040]); // 1777 => [12583040]
map.insert(1207, &[4195072]); // 1207 => [4195072]
map.insert(1095, &[4195584]); // 1095 => [4195584]
map.insert(1792, &[4196608]); // 1792 => [4196608]
map.insert(1694, &[4198656]); // 1694 => [4198656]
map.insert(1513, &[4202752]); // 1513 => [4202752]
map.insert(1503, &[4210944]); // 1503 => [4210944]
map.insert(1113, &[4227328]); // 1113 => [4227328]
map.insert(1869, &[4260096]); // 1869 => [4260096]
map.insert(1979, &[4325632]); // 1979 => [4325632]
map.insert(458, &[8519936]); // 458 => [8519936]
map.insert(1941, &[4456704]); // 1941 => [4456704]
map.insert(1402, &[4718848]); // 1402 => [4718848]
map.insert(1643, &[5243136]); // 1643 => [5243136]
map.insert(1140, &[6291712]); // 1140 => [6291712]
map.insert(1905, &[12583168]); // 1905 => [12583168]
map.insert(1264, &[4195840]); // 1264 => [4195840]
map.insert(1975, &[4196864]); // 1975 => [4196864]
map.insert(758, &[20992]); // 758 => [20992]
map.insert(1577, &[4198912]); // 1577 => [4198912]
map.insert(1374, &[4203008]); // 1374 => [4203008]
map.insert(1384, &[4211200]); // 1384 => [4211200]
map.insert(1262, &[4227584]); // 1262 => [4227584]
map.insert(2042, &[4260352]); // 2042 => [4260352]
map.insert(1804, &[4325888]); // 1804 => [4325888]
map.insert(1826, &[4456960]); // 1826 => [4456960]
map.insert(1485, &[4719104]); // 1485 => [4719104]
map.insert(1756, &[5243392]); // 1756 => [5243392]
map.insert(1219, &[6291968]); // 1219 => [6291968]
map.insert(1990, &[12583424]); // 1990 => [12583424]
map.insert(1863, &[4197376]); // 1863 => [4197376]
map.insert(941, &[2102272]); // 941 => [2102272]
map.insert(1753, &[4199424]); // 1753 => [4199424]
map.insert(1454, &[4203520]); // 1454 => [4203520]
map.insert(482, &[541696]); // 482 => [541696]
map.insert(1432, &[4211712]); // 1432 => [4211712]
map.insert(1054, &[4228096]); // 1054 => [4228096]
map.insert(1802, &[4260864]); // 1802 => [4260864]
map.insert(2044, &[4326400]); // 2044 => [4326400]
map.insert(2002, &[4457472]); // 2002 => [4457472]
map.insert(1341, &[4719616]); // 1341 => [4719616]
map.insert(1580, &[5243904]); // 1580 => [5243904]
map.insert(1075, &[6292480]); // 1075 => [6292480]
map.insert(1846, &[12583936]); // 1846 => [12583936]
map.insert(1438, &[4200448]); // 1438 => [4200448]
map.insert(1769, &[4204544]); // 1769 => [4204544]
map.insert(1759, &[4212736]); // 1759 => [4212736]
map.insert(1881, &[4229120]); // 1881 => [4229120]
map.insert(1101, &[4261888]); // 1101 => [4261888]
map.insert(1211, &[4327424]); // 1211 => [4327424]
map.insert(1173, &[4458496]); // 1173 => [4458496]
map.insert(1658, &[4720640]); // 1658 => [4720640]
map.insert(1387, &[5244928]); // 1387 => [5244928]
map.insert(1908, &[6293504]); // 1908 => [6293504]
map.insert(1137, &[12584960]); // 1137 => [12584960]
map.insert(1911, &[4206592]); // 1911 => [4206592]
map.insert(1857, &[4214784]); // 1857 => [4214784]
map.insert(1735, &[4231168]); // 1735 => [4231168]
map.insert(1491, &[4263936]); // 1491 => [4263936]
map.insert(1317, &[4329472]); // 1317 => [4329472]
map.insert(1291, &[4460544]); // 1291 => [4460544]
map.insert(2020, &[4722688]); // 2020 => [4722688]
map.insert(1269, &[5246976]); // 1269 => [5246976]
map.insert(1770, &[6295552]); // 1770 => [6295552]
map.insert(1519, &[12587008]); // 1519 => [12587008]
map.insert(1078, &[4218880]); // 1078 => [4218880]
map.insert(1456, &[4235264]); // 1456 => [4235264]
map.insert(1700, &[4268032]); // 1700 => [4268032]
map.insert(1618, &[4333568]); // 1618 => [4333568]
map.insert(1660, &[4464640]); // 1660 => [4464640]
map.insert(1171, &[4726784]); // 1171 => [4726784]
map.insert(1922, &[5251072]); // 1922 => [5251072]
map.insert(1437, &[6299648]); // 1437 => [6299648]
map.insert(1688, &[12591104]); // 1688 => [12591104]
map.insert(1414, &[4243456]); // 1414 => [4243456]
map.insert(1682, &[4276224]); // 1682 => [4276224]
map.insert(1636, &[4341760]); // 1636 => [4341760]
map.insert(1610, &[4472832]); // 1610 => [4472832]
map.insert(1189, &[4734976]); // 1189 => [4734976]
map.insert(1972, &[5259264]); // 1972 => [5259264]
map.insert(1451, &[6307840]); // 1451 => [6307840]
map.insert(1710, &[12599296]); // 1710 => [12599296]
map.insert(1812, &[4292608]); // 1812 => [4292608]
map.insert(2018, &[4358144]); // 2018 => [4358144]
map.insert(1996, &[4489216]); // 1996 => [4489216]
map.insert(1315, &[4751360]); // 1315 => [4751360]
map.insert(1586, &[5275648]); // 1586 => [5275648]
map.insert(1069, &[6324224]); // 1069 => [6324224]
map.insert(1832, &[12615680]); // 1832 => [12615680]
map.insert(1270, &[4390912]); // 1270 => [4390912]
map.insert(1240, &[4521984]); // 1240 => [4521984]
map.insert(1591, &[4784128]); // 1591 => [4784128]
map.insert(1318, &[5308416]); // 1318 => [5308416]
map.insert(1849, &[6356992]); // 1849 => [6356992]
map.insert(1084, &[12648448]); // 1084 => [12648448]
map.insert(1070, &[4587520]); // 1070 => [4587520]
map.insert(1729, &[4849664]); // 1729 => [4849664]
map.insert(1488, &[5373952]); // 1488 => [5373952]
map.insert(1999, &[6422528]); // 1999 => [6422528]
map.insert(1226, &[12713984]); // 1226 => [12713984]
map.insert(1775, &[4980736]); // 1775 => [4980736]
map.insert(1534, &[5505024]); // 1534 => [5505024]
map.insert(2017, &[6553600]); // 2017 => [6553600]
map.insert(1252, &[12845056]); // 1252 => [12845056]
map.insert(1809, &[5767168]); // 1809 => [5767168]
map.insert(1294, &[6815744]); // 1294 => [6815744]
map.insert(1547, &[13107200]); // 1547 => [13107200]
map.insert(1567, &[7340032]); // 1567 => [7340032]
map.insert(1306, &[13631488]); // 1306 => [13631488]
map.insert(1797, &[14680064]); // 1797 => [14680064]
map.insert(15, &[15]); // 15 => [15]
map.insert(23, &[23]); // 23 => [23]
map.insert(39, &[39]); // 39 => [39]
map.insert(135, &[135]); // 135 => [135]
map.insert(519, &[2055]); // 519 => [2055]
map.insert(921, &[4103]); // 921 => [4103]
map.insert(700, &[131079]); // 700 => [131079]
map.insert(125, &[524295]); // 125 => [524295]
map.insert(876, &[1048583]); // 876 => [1048583]
map.insert(371, &[2097159]); // 371 => [2097159]
map.insert(1031, &[4194311]); // 1031 => [4194311]
map.insert(630, &[8388615]); // 630 => [8388615]
map.insert(27, &[27]); // 27 => [27]
map.insert(43, &[43]); // 43 => [43]
map.insert(75, &[75]); // 75 => [75]
map.insert(139, &[139]); // 139 => [139]
map.insert(444, &[523]); // 444 => [523]
map.insert(332, &[1035]); // 332 => [1035]
map.insert(226, &[8203]); // 226 => [8203]
map.insert(212, &[16395]); // 212 => [16395]
map.insert(338, &[32779]); // 338 => [32779]
map.insert(582, &[65547]); // 582 => [65547]
map.insert(688, &[131083]); // 688 => [131083]
map.insert(864, &[1048587]); // 864 => [1048587]
map.insert(383, &[2097163]); // 383 => [2097163]
map.insert(1035, &[4194315]); // 1035 => [4194315]
map.insert(83, &[83]); // 83 => [83]
map.insert(275, &[275]); // 275 => [275]
map.insert(420, &[531]); // 420 => [531]
map.insert(531, &[2067]); // 531 => [2067]
map.insert(909, &[4115]); // 909 => [4115]
map.insert(204, &[16403]); // 204 => [16403]
map.insert(330, &[32787]); // 330 => [32787]
map.insert(606, &[65555]); // 606 => [65555]
map.insert(680, &[131091]); // 680 => [131091]
map.insert(646, &[262163]); // 646 => [262163]
map.insert(888, &[1048595]); // 888 => [1048595]
map.insert(1043, &[4194323]); // 1043 => [4194323]
map.insert(610, &[8388627]); // 610 => [8388627]
map.insert(99, &[99]); // 99 => [99]
map.insert(163, &[163]); // 163 => [163]
map.insert(404, &[547]); // 404 => [547]
map.insert(547, &[2083]); // 547 => [2083]
map.insert(957, &[4131]); // 957 => [4131]
map.insert(252, &[16419]); // 252 => [16419]
map.insert(622, &[65571]); // 622 => [65571]
map.insert(694, &[262179]); // 694 => [262179]
map.insert(840, &[1048611]); // 840 => [1048611]
map.insert(1059, &[4194339]); // 1059 => [4194339]
map.insert(579, &[2115]); // 579 => [2115]
map.insert(989, &[4163]); // 989 => [4163]
map.insert(170, &[8259]); // 170 => [8259]
map.insert(156, &[16451]); // 156 => [16451]
map.insert(526, &[65603]); // 526 => [65603]
map.insert(760, &[131139]); // 760 => [131139]
map.insert(726, &[262211]); // 726 => [262211]
map.insert(57, &[524355]); // 57 => [524355]
map.insert(1091, &[4194371]); // 1091 => [4194371]
map.insert(387, &[387]); // 387 => [387]
map.insert(452, &[1155]); // 452 => [1155]
map.insert(643, &[2179]); // 643 => [2179]
map.insert(797, &[4227]); // 797 => [4227]
map.insert(92, &[16515]); // 92 => [16515]
map.insert(474, &[32899]); // 474 => [32899]
map.insert(718, &[65667]); // 718 => [65667]
map.insert(568, &[131203]); // 568 => [131203]
map.insert(534, &[262275]); // 534 => [262275]
map.insert(1000, &[1048707]); // 1000 => [1048707]
map.insert(1155, &[4194435]); // 1155 => [4194435]
map.insert(754, &[8388739]); // 754 => [8388739]
map.insert(180, &[771]); // 180 => [771]
map.insert(771, &[2307]); // 771 => [2307]
map.insert(490, &[8451]); // 490 => [8451]
map.insert(476, &[16643]); // 476 => [16643]
map.insert(846, &[65795]); // 846 => [65795]
map.insert(952, &[131331]); // 952 => [131331]
map.insert(616, &[1048835]); // 616 => [1048835]
map.insert(119, &[2097411]); // 119 => [2097411]
map.insert(1283, &[4194563]); // 1283 => [4194563]
map.insert(882, &[8388867]); // 882 => [8388867]
map.insert(243, &[1539]); // 243 => [1539]
map.insert(554, &[4611]); // 554 => [4611]
map.insert(1017, &[66051]); // 1017 => [66051]
map.insert(783, &[131587]); // 783 => [131587]
map.insert(801, &[262659]); // 801 => [262659]
map.insert(462, &[524803]); // 462 => [524803]
map.insert(1460, &[4194819]); // 1460 => [4194819]
map.insert(965, &[8389123]); // 965 => [8389123]
map.insert(836, &[3075]); // 836 => [3075]
map.insert(730, &[5123]); // 730 => [5123]
map.insert(429, &[9219]); // 429 => [9219]
map.insert(411, &[17411]); // 411 => [17411]
map.insert(29, &[33795]); // 29 => [33795]
map.insert(777, &[66563]); // 777 => [66563]
map.insert(1023, &[132099]); // 1023 => [132099]
map.insert(977, &[263171]); // 977 => [263171]
map.insert(318, &[525315]); // 318 => [525315]
map.insert(559, &[1049603]); // 559 => [1049603]
map.insert(1348, &[4195331]); // 1348 => [4195331]
map.insert(821, &[8389635]); // 821 => [8389635]
map.insert(858, &[34819]); // 858 => [34819]
map.insert(78, &[67587]); // 78 => [67587]
map.insert(184, &[133123]); // 184 => [133123]
map.insert(150, &[264195]); // 150 => [264195]
map.insert(1539, &[4196355]); // 1539 => [4196355]
map.insert(834, &[20483]); // 834 => [20483]
map.insert(708, &[36867]); // 708 => [36867]
map.insert(999, &[528387]); // 999 => [528387]
map.insert(1949, &[4198403]); // 1949 => [4198403]
map.insert(492, &[8392707]); // 492 => [8392707]
map.insert(53, &[24579]); // 53 => [24579]
map.insert(679, &[73731]); // 679 => [73731]
map.insert(639, &[270339]); // 639 => [270339]
map.insert(897, &[1056771]); // 897 => [1056771]
map.insert(1258, &[4202499]); // 1258 => [4202499]
map.insert(389, &[49155]); // 389 => [49155]
map.insert(615, &[147459]); // 615 => [147459]
map.insert(166, &[540675]); // 166 => [540675]
map.insert(424, &[2113539]); // 424 => [2113539]
map.insert(1244, &[4210691]); // 1244 => [4210691]
map.insert(685, &[8404995]); // 685 => [8404995]
map.insert(791, &[98307]); // 791 => [98307]
map.insert(1370, &[4227075]); // 1370 => [4227075]
map.insert(564, &[589827]); // 564 => [589827]
map.insert(826, &[2162691]); // 826 => [2162691]
map.insert(1614, &[4259843]); // 1614 => [4259843]
map.insert(63, &[8454147]); // 63 => [8454147]
map.insert(706, &[655363]); // 706 => [655363]
map.insert(1720, &[4325379]); // 1720 => [4325379]
map.insert(748, &[786435]); // 748 => [786435]
map.insert(509, &[1310723]); // 509 => [1310723]
map.insert(1686, &[4456451]); // 1686 => [4456451]
map.insert(231, &[8650755]); // 231 => [8650755]
map.insert(786, &[1572867]); // 786 => [1572867]
map.insert(269, &[2621443]); // 269 => [2621443]
map.insert(1145, &[4718595]); // 1145 => [4718595]
map.insert(540, &[3145731]); // 540 => [3145731]
map.insert(1896, &[5242883]); // 1896 => [5242883]
map.insert(1399, &[6291459]); // 1399 => [6291459]
map.insert(774, &[10485763]); // 774 => [10485763]
map.insert(1650, &[12582915]); // 1650 => [12582915]
map.insert(141, &[141]); // 141 => [141]
map.insert(442, &[525]); // 442 => [525]
map.insert(915, &[4109]); // 915 => [4109]
map.insert(210, &[16397]); // 210 => [16397]
map.insert(870, &[1048589]); // 870 => [1048589]
map.insert(1037, &[4194317]); // 1037 => [4194317]
map.insert(85, &[85]); // 85 => [85]
map.insert(277, &[277]); // 277 => [277]
map.insert(418, &[533]); // 418 => [533]
map.insert(907, &[4117]); // 907 => [4117]
map.insert(600, &[65557]); // 600 => [65557]
map.insert(111, &[524309]); // 111 => [524309]
map.insert(894, &[1048597]); // 894 => [1048597]
map.insert(353, &[2097173]); // 353 => [2097173]
map.insert(1045, &[4194325]); // 1045 => [4194325]
map.insert(101, &[101]); // 101 => [101]
map.insert(402, &[549]); // 402 => [549]
map.insert(354, &[1061]); // 354 => [1061]
map.insert(549, &[2085]); // 549 => [2085]
map.insert(1061, &[4194341]); // 1061 => [4194341]
map.insert(596, &[8388645]); // 596 => [8388645]
map.insert(197, &[197]); // 197 => [197]
map.insert(498, &[581]); // 498 => [581]
map.insert(987, &[4165]); // 987 => [4165]
map.insert(172, &[8261]); // 172 => [8261]
map.insert(154, &[16453]); // 154 => [16453]
map.insert(284, &[32837]); // 284 => [32837]
map.insert(766, &[131141]); // 766 => [131141]
map.insert(720, &[262213]); // 720 => [262213]
map.insert(814, &[1048645]); // 814 => [1048645]
map.insert(305, &[2097221]); // 305 => [2097221]
map.insert(1093, &[4194373]); // 1093 => [4194373]
map.insert(306, &[645]); // 306 => [645]
map.insert(450, &[1157]); // 450 => [1157]
map.insert(795, &[4229]); // 795 => [4229]
map.insert(108, &[8325]); // 108 => [8325]
map.insert(712, &[65669]); // 712 => [65669]
map.insert(574, &[131205]); // 574 => [131205]
map.insert(1006, &[1048709]); // 1006 => [1048709]
map.insert(497, &[2097285]); // 497 => [2097285]
map.insert(1157, &[4194437]); // 1157 => [4194437]
map.insert(756, &[8388741]); // 756 => [8388741]
map.insert(178, &[773]); // 178 => [773]
map.insert(912, &[262405]); // 912 => [262405]
map.insert(1285, &[4194565]); // 1285 => [4194565]
map.insert(946, &[2565]); // 946 => [2565]
map.insert(365, &[16901]); // 365 => [16901]
map.insert(807, &[262661]); // 807 => [262661]
map.insert(456, &[524805]); // 456 => [524805]
map.insert(198, &[2097669]); // 198 => [2097669]
map.insert(1458, &[4194821]); // 1458 => [4194821]
map.insert(963, &[8389125]); // 963 => [8389125]
map.insert(983, &[263173]); // 983 => [263173]
map.insert(312, &[525317]); // 312 => [525317]
map.insert(1346, &[4195333]); // 1346 => [4195333]
map.insert(819, &[8389637]); // 819 => [8389637]
map.insert(860, &[34821]); // 860 => [34821]
map.insert(190, &[133125]); // 190 => [133125]
map.insert(366, &[1050629]); // 366 => [1050629]
map.insert(1541, &[4196357]); // 1541 => [4196357]
map.insert(470, &[69637]); // 470 => [69637]
map.insert(1947, &[4198405]); // 1947 => [4198405]
map.insert(673, &[73733]); // 673 => [73733]
map.insert(599, &[139269]); // 599 => [139269]
map.insert(903, &[1056773]); // 903 => [1056773]
map.insert(1260, &[4202501]); // 1260 => [4202501]
map.insert(945, &[1064965]); // 945 => [1064965]
map.insert(1242, &[4210693]); // 1242 => [4210693]
map.insert(969, &[294917]); // 969 => [294917]
map.insert(1372, &[4227077]); // 1372 => [4227077]
map.insert(813, &[8421381]); // 813 => [8421381]
map.insert(828, &[2162693]); // 828 => [2162693]
map.insert(1608, &[4259845]); // 1608 => [4259845]
map.insert(469, &[1179653]); // 469 => [1179653]
map.insert(970, &[2228229]); // 970 => [2228229]
map.insert(1726, &[4325381]); // 1726 => [4325381]
map.insert(507, &[1310725]); // 507 => [1310725]
map.insert(1680, &[4456453]); // 1680 => [4456453]
map.insert(1151, &[4718597]); // 1151 => [4718597]
map.insert(538, &[3145733]); // 538 => [3145733]
map.insert(1902, &[5242885]); // 1902 => [5242885]
map.insert(287, &[9437189]); // 287 => [9437189]
map.insert(1393, &[6291461]); // 1393 => [6291461]
map.insert(1652, &[12582917]); // 1652 => [12582917]
map.insert(153, &[153]); // 153 => [153]
map.insert(537, &[2073]); // 537 => [2073]
map.insert(674, &[131097]); // 674 => [131097]
map.insert(652, &[262169]); // 652 => [262169]
map.insert(1049, &[4194329]); // 1049 => [4194329]
map.insert(297, &[297]); // 297 => [297]
map.insert(1065, &[4194345]); // 1065 => [4194345]
map.insert(1097, &[4194377]); // 1097 => [4194377]
map.insert(393, &[393]); // 393 => [393]
map.insert(649, &[2185]); // 649 => [2185]
map.insert(86, &[16521]); // 86 => [16521]
map.insert(1161, &[4194441]); // 1161 => [4194441]
map.insert(480, &[8457]); // 480 => [8457]
map.insert(1289, &[4194569]); // 1289 => [4194569]
map.insert(1011, &[66057]); // 1011 => [66057]
map.insert(1470, &[4194825]); // 1470 => [4194825]
map.insert(401, &[17417]); // 401 => [17417]
map.insert(1013, &[132105]); // 1013 => [132105]
map.insert(1358, &[4195337]); // 1358 => [4195337]
map.insert(831, &[8389641]); // 831 => [8389641]
map.insert(736, &[10249]); // 736 => [10249]
map.insert(848, &[34825]); // 848 => [34825]
map.insert(893, &[2099209]); // 893 => [2099209]
map.insert(1545, &[4196361]); // 1545 => [4196361]
map.insert(300, &[135177]); // 300 => [135177]
map.insert(1005, &[528393]); // 1005 => [528393]
map.insert(739, &[2101257]); // 739 => [2101257]
map.insert(1943, &[4198409]); // 1943 => [4198409]
map.insert(486, &[8392713]); // 486 => [8392713]
map.insert(441, &[40969]); // 441 => [40969]
map.insert(603, &[139273]); // 603 => [139273]
map.insert(1248, &[4202505]); // 1248 => [4202505]
map.insert(399, &[49161]); // 399 => [49161]
map.insert(1238, &[4210697]); // 1238 => [4210697]
map.insert(298, &[557065]); // 298 => [557065]
map.insert(1360, &[4227081]); // 1360 => [4227081]
map.insert(209, &[327689]); // 209 => [327689]
map.insert(303, &[1114121]); // 303 => [1114121]
map.insert(816, &[2162697]); // 816 => [2162697]
map.insert(1604, &[4259849]); // 1604 => [4259849]
map.insert(1714, &[4325385]); // 1714 => [4325385]
map.insert(742, &[786441]); // 742 => [786441]
map.insert(1692, &[4456457]); // 1692 => [4456457]
map.insert(792, &[1572873]); // 792 => [1572873]
map.insert(1139, &[4718601]); // 1139 => [4718601]
map.insert(1890, &[5242889]); // 1890 => [5242889]
map.insert(1405, &[6291465]); // 1405 => [6291465]
map.insert(1656, &[12582921]); // 1656 => [12582921]
map.insert(177, &[177]); // 177 => [177]
map.insert(943, &[4145]); // 943 => [4145]
map.insert(650, &[131121]); // 650 => [131121]
map.insert(1073, &[4194353]); // 1073 => [4194353]
map.insert(278, &[1105]); // 278 => [1105]
map.insert(142, &[16465]); // 142 => [16465]
map.insert(1105, &[4194385]); // 1105 => [4194385]
map.insert(485, &[2097297]); // 485 => [2097297]
map.insert(1169, &[4194449]); // 1169 => [4194449]
map.insert(655, &[4369]); // 655 => [4369]
map.insert(504, &[8465]); // 504 => [8465]
map.insert(938, &[131345]); // 938 => [131345]
map.insert(900, &[262417]); // 900 => [262417]
map.insert(1297, &[4194577]); // 1297 => [4194577]
map.insert(934, &[2577]); // 934 => [2577]
map.insert(1446, &[4194833]); // 1446 => [4194833]
map.insert(854, &[3089]); // 854 => [3089]
map.insert(573, &[1049617]); // 573 => [1049617]
map.insert(1366, &[4195345]); // 1366 => [4195345]
map.insert(869, &[2099217]); // 869 => [2099217]
map.insert(1553, &[4196369]); // 1553 => [4196369]
map.insert(1935, &[4198417]); // 1935 => [4198417]
map.insert(417, &[40977]); // 417 => [40977]
map.insert(396, &[2105361]); // 396 => [2105361]
map.insert(1272, &[4202513]); // 1272 => [4202513]
map.insert(933, &[1064977]); // 933 => [1064977]
map.insert(1230, &[4210705]); // 1230 => [4210705]
map.insert(1352, &[4227089]); // 1352 => [4227089]
map.insert(550, &[589841]); // 550 => [589841]
map.insert(1628, &[4259857]); // 1628 => [4259857]
map.insert(449, &[1179665]); // 449 => [1179665]
map.insert(1706, &[4325393]); // 1706 => [4325393]
map.insert(1008, &[2359313]); // 1008 => [2359313]
map.insert(1668, &[4456465]); // 1668 => [4456465]
map.insert(1131, &[4718609]); // 1131 => [4718609]
map.insert(1914, &[5242897]); // 1914 => [5242897]
map.insert(1381, &[6291473]); // 1381 => [6291473]
map.insert(1632, &[12582929]); // 1632 => [12582929]
map.insert(1121, &[4194401]); // 1121 => [4194401]
map.insert(1185, &[4194465]); // 1185 => [4194465]
map.insert(102, &[1313]); // 102 => [1313]
map.insert(1313, &[4194593]); // 1313 => [4194593]
map.insert(765, &[1049121]); // 765 => [1049121]
map.insert(1430, &[4194849]); // 1430 => [4194849]
map.insert(1382, &[4195361]); // 1382 => [4195361]
map.insert(853, &[2099233]); // 853 => [2099233]
map.insert(1569, &[4196385]); // 1569 => [4196385]
map.insert(715, &[2101281]); // 715 => [2101281]
map.insert(1983, &[4198433]); // 1983 => [4198433]
map.insert(931, &[1056801]); // 931 => [1056801]
map.insert(1224, &[4202529]); // 1224 => [4202529]
map.insert(394, &[2113569]); // 394 => [2113569]
map.insert(1278, &[4210721]); // 1278 => [4210721]
map.insert(1400, &[4227105]); // 1400 => [4227105]
map.insert(1644, &[4259873]); // 1644 => [4259873]
map.insert(1690, &[4325409]); // 1690 => [4325409]
map.insert(960, &[2359329]); // 960 => [2359329]
map.insert(1716, &[4456481]); // 1716 => [4456481]
map.insert(1115, &[4718625]); // 1115 => [4718625]
map.insert(1866, &[5242913]); // 1866 => [5242913]
map.insert(315, &[9437217]); // 315 => [9437217]
map.insert(1365, &[6291489]); // 1365 => [6291489]
map.insert(804, &[10485793]); // 804 => [10485793]
map.insert(1616, &[12582945]); // 1616 => [12582945]
map.insert(863, &[4289]); // 863 => [4289]
map.insert(1217, &[4194497]); // 1217 => [4194497]
map.insert(980, &[262465]); // 980 => [262465]
map.insert(1345, &[4194625]); // 1345 => [4194625]
map.insert(1014, &[2625]); // 1014 => [2625]
map.insert(175, &[33345]); // 175 => [33345]
map.insert(1526, &[4194881]); // 1526 => [4194881]
map.insert(1286, &[4195393]); // 1286 => [4195393]
map.insert(1601, &[4196417]); // 1601 => [4196417]
map.insert(2015, &[4198465]); // 2015 => [4198465]
map.insert(741, &[73793]); // 741 => [73793]
map.insert(1192, &[4202561]); // 1192 => [4202561]
map.insert(723, &[81985]); // 723 => [81985]
map.insert(1182, &[4210753]); // 1182 => [4210753]
map.insert(1304, &[4227137]); // 1304 => [4227137]
map.insert(1548, &[4259905]); // 1548 => [4259905]
map.insert(1786, &[4325441]); // 1786 => [4325441]
map.insert(928, &[2359361]); // 928 => [2359361]
map.insert(1748, &[4456513]); // 1748 => [4456513]
map.insert(1083, &[4718657]); // 1083 => [4718657]
map.insert(1834, &[5242945]); // 1834 => [5242945]
map.insert(1333, &[6291521]); // 1333 => [6291521]
map.insert(1584, &[12582977]); // 1584 => [12582977]
map.insert(1409, &[4194689]); // 1409 => [4194689]
map.insert(1334, &[4194945]); // 1334 => [4194945]
map.insert(851, &[263297]); // 851 => [263297]
map.insert(1478, &[4195457]); // 1478 => [4195457]
map.insert(984, &[34945]); // 984 => [34945]
map.insert(1665, &[4196481]); // 1665 => [4196481]
map.insert(1823, &[4198529]); // 1823 => [4198529]
map.insert(1128, &[4202625]); // 1128 => [4202625]
map.insert(1118, &[4210817]); // 1118 => [4210817]
map.insert(1496, &[4227201]); // 1496 => [4227201]
map.insert(937, &[8421505]); // 937 => [8421505]
map.insert(1740, &[4259969]); // 1740 => [4259969]
map.insert(189, &[8454273]); // 189 => [8454273]
map.insert(1594, &[4325505]); // 1594 => [4325505]
map.insert(1556, &[4456577]); // 1556 => [4456577]
map.insert(1275, &[4718721]); // 1275 => [4718721]
map.insert(2026, &[5243009]); // 2026 => [5243009]
map.insert(1525, &[6291585]); // 1525 => [6291585]
map.insert(1776, &[12583041]); // 1776 => [12583041]
map.insert(1206, &[4195073]); // 1206 => [4195073]
map.insert(1094, &[4195585]); // 1094 => [4195585]
map.insert(1793, &[4196609]); // 1793 => [4196609]
map.insert(1695, &[4198657]); // 1695 => [4198657]
map.insert(1512, &[4202753]); // 1512 => [4202753]
map.insert(1502, &[4210945]); // 1502 => [4210945]
map.insert(1112, &[4227329]); // 1112 => [4227329]
map.insert(1868, &[4260097]); // 1868 => [4260097]
map.insert(1978, &[4325633]); // 1978 => [4325633]
map.insert(459, &[8519937]); // 459 => [8519937]
map.insert(1940, &[4456705]); // 1940 => [4456705]
map.insert(1403, &[4718849]); // 1403 => [4718849]
map.insert(1642, &[5243137]); // 1642 => [5243137]
map.insert(1141, &[6291713]); // 1141 => [6291713]
map.insert(1904, &[12583169]); // 1904 => [12583169]
map.insert(1265, &[4195841]); // 1265 => [4195841]
map.insert(1974, &[4196865]); // 1974 => [4196865]
map.insert(759, &[20993]); // 759 => [20993]
map.insert(1576, &[4198913]); // 1576 => [4198913]
map.insert(1375, &[4203009]); // 1375 => [4203009]
map.insert(1385, &[4211201]); // 1385 => [4211201]
map.insert(1263, &[4227585]); // 1263 => [4227585]
map.insert(2043, &[4260353]); // 2043 => [4260353]
map.insert(1805, &[4325889]); // 1805 => [4325889]
map.insert(1827, &[4456961]); // 1827 => [4456961]
map.insert(1484, &[4719105]); // 1484 => [4719105]
map.insert(1757, &[5243393]); // 1757 => [5243393]
map.insert(1218, &[6291969]); // 1218 => [6291969]
map.insert(1991, &[12583425]); // 1991 => [12583425]
map.insert(1862, &[4197377]); // 1862 => [4197377]
map.insert(940, &[2102273]); // 940 => [2102273]
map.insert(1752, &[4199425]); // 1752 => [4199425]
map.insert(1455, &[4203521]); // 1455 => [4203521]
map.insert(483, &[541697]); // 483 => [541697]
map.insert(1433, &[4211713]); // 1433 => [4211713]
map.insert(1055, &[4228097]); // 1055 => [4228097]
map.insert(1803, &[4260865]); // 1803 => [4260865]
map.insert(2045, &[4326401]); // 2045 => [4326401]
map.insert(2003, &[4457473]); // 2003 => [4457473]
map.insert(1340, &[4719617]); // 1340 => [4719617]
map.insert(1581, &[5243905]); // 1581 => [5243905]
map.insert(1074, &[6292481]); // 1074 => [6292481]
map.insert(1847, &[12583937]); // 1847 => [12583937]
map.insert(1439, &[4200449]); // 1439 => [4200449]
map.insert(1768, &[4204545]); // 1768 => [4204545]
map.insert(1758, &[4212737]); // 1758 => [4212737]
map.insert(1880, &[4229121]); // 1880 => [4229121]
map.insert(1100, &[4261889]); // 1100 => [4261889]
map.insert(1210, &[4327425]); // 1210 => [4327425]
map.insert(1172, &[4458497]); // 1172 => [4458497]
map.insert(1659, &[4720641]); // 1659 => [4720641]
map.insert(1386, &[5244929]); // 1386 => [5244929]
map.insert(1909, &[6293505]); // 1909 => [6293505]
map.insert(1136, &[12584961]); // 1136 => [12584961]
map.insert(1910, &[4206593]); // 1910 => [4206593]
map.insert(1856, &[4214785]); // 1856 => [4214785]
map.insert(1734, &[4231169]); // 1734 => [4231169]
map.insert(1490, &[4263937]); // 1490 => [4263937]
map.insert(1316, &[4329473]); // 1316 => [4329473]
map.insert(1290, &[4460545]); // 1290 => [4460545]
map.insert(2021, &[4722689]); // 2021 => [4722689]
map.insert(1268, &[5246977]); // 1268 => [5246977]
map.insert(1771, &[6295553]); // 1771 => [6295553]
map.insert(1518, &[12587009]); // 1518 => [12587009]
map.insert(1079, &[4218881]); // 1079 => [4218881]
map.insert(1457, &[4235265]); // 1457 => [4235265]
map.insert(1701, &[4268033]); // 1701 => [4268033]
map.insert(1619, &[4333569]); // 1619 => [4333569]
map.insert(1661, &[4464641]); // 1661 => [4464641]
map.insert(1170, &[4726785]); // 1170 => [4726785]
map.insert(1923, &[5251073]); // 1923 => [5251073]
map.insert(1436, &[6299649]); // 1436 => [6299649]
map.insert(1689, &[12591105]); // 1689 => [12591105]
map.insert(1415, &[4243457]); // 1415 => [4243457]
map.insert(1683, &[4276225]); // 1683 => [4276225]
map.insert(1637, &[4341761]); // 1637 => [4341761]
map.insert(1611, &[4472833]); // 1611 => [4472833]
map.insert(1188, &[4734977]); // 1188 => [4734977]
map.insert(1973, &[5259265]); // 1973 => [5259265]
map.insert(1450, &[6307841]); // 1450 => [6307841]
map.insert(1711, &[12599297]); // 1711 => [12599297]
map.insert(1813, &[4292609]); // 1813 => [4292609]
map.insert(2019, &[4358145]); // 2019 => [4358145]
map.insert(1997, &[4489217]); // 1997 => [4489217]
map.insert(1314, &[4751361]); // 1314 => [4751361]
map.insert(1587, &[5275649]); // 1587 => [5275649]
map.insert(1068, &[6324225]); // 1068 => [6324225]
map.insert(1833, &[12615681]); // 1833 => [12615681]
map.insert(1271, &[4390913]); // 1271 => [4390913]
map.insert(1241, &[4521985]); // 1241 => [4521985]
map.insert(1590, &[4784129]); // 1590 => [4784129]
map.insert(1319, &[5308417]); // 1319 => [5308417]
map.insert(1848, &[6356993]); // 1848 => [6356993]
map.insert(1085, &[12648449]); // 1085 => [12648449]
map.insert(1071, &[4587521]); // 1071 => [4587521]
map.insert(1728, &[4849665]); // 1728 => [4849665]
map.insert(1489, &[5373953]); // 1489 => [5373953]
map.insert(1998, &[6422529]); // 1998 => [6422529]
map.insert(1227, &[12713985]); // 1227 => [12713985]
map.insert(1774, &[4980737]); // 1774 => [4980737]
map.insert(1535, &[5505025]); // 1535 => [5505025]
map.insert(2016, &[6553601]); // 2016 => [6553601]
map.insert(1253, &[12845057]); // 1253 => [12845057]
map.insert(1808, &[5767169]); // 1808 => [5767169]
map.insert(1295, &[6815745]); // 1295 => [6815745]
map.insert(1546, &[13107201]); // 1546 => [13107201]
map.insert(1566, &[7340033]); // 1566 => [7340033]
map.insert(1307, &[13631489]); // 1307 => [13631489]
map.insert(1796, &[14680065]); // 1796 => [14680065]
map.insert(1038, &[4194318]); // 1038 => [4194318]
map.insert(904, &[4118]); // 904 => [4118]
map.insert(1046, &[4194326]); // 1046 => [4194326]
map.insert(1062, &[4194342]); // 1062 => [4194342]
map.insert(1158, &[4194438]); // 1158 => [4194438]
map.insert(1542, &[4196358]); // 1542 => [4196358]
map.insert(1944, &[4198406]); // 1944 => [4198406]
map.insert(1725, &[4325382]); // 1725 => [4325382]
map.insert(1148, &[4718598]); // 1148 => [4718598]
map.insert(1901, &[5242886]); // 1901 => [5242886]
map.insert(1394, &[6291462]); // 1394 => [6291462]
map.insert(1655, &[12582918]); // 1655 => [12582918]
map.insert(1050, &[4194330]); // 1050 => [4194330]
map.insert(1066, &[4194346]); // 1066 => [4194346]
map.insert(1098, &[4194378]); // 1098 => [4194378]
map.insert(1162, &[4194442]); // 1162 => [4194442]
map.insert(1469, &[4194826]); // 1469 => [4194826]
map.insert(1357, &[4195338]); // 1357 => [4195338]
map.insert(1251, &[4202506]); // 1251 => [4202506]
map.insert(1237, &[4210698]); // 1237 => [4210698]
map.insert(1363, &[4227082]); // 1363 => [4227082]
map.insert(1607, &[4259850]); // 1607 => [4259850]
map.insert(1713, &[4325386]); // 1713 => [4325386]
map.insert(1889, &[5242890]); // 1889 => [5242890]
map.insert(1406, &[6291466]); // 1406 => [6291466]
map.insert(1106, &[4194386]); // 1106 => [4194386]
map.insert(1298, &[4194578]); // 1298 => [4194578]
map.insert(1445, &[4194834]); // 1445 => [4194834]
map.insert(1554, &[4196370]); // 1554 => [4196370]
map.insert(1932, &[4198418]); // 1932 => [4198418]
map.insert(1229, &[4210706]); // 1229 => [4210706]
map.insert(1355, &[4227090]); // 1355 => [4227090]
map.insert(1631, &[4259858]); // 1631 => [4259858]
map.insert(1705, &[4325394]); // 1705 => [4325394]
map.insert(1671, &[4456466]); // 1671 => [4456466]
map.insert(1913, &[5242898]); // 1913 => [5242898]
map.insert(1635, &[12582930]); // 1635 => [12582930]
map.insert(1122, &[4194402]); // 1122 => [4194402]
map.insert(1186, &[4194466]); // 1186 => [4194466]
map.insert(1429, &[4194850]); // 1429 => [4194850]
map.insert(1570, &[4196386]); // 1570 => [4196386]
map.insert(1980, &[4198434]); // 1980 => [4198434]
map.insert(1277, &[4210722]); // 1277 => [4210722]
map.insert(1647, &[4259874]); // 1647 => [4259874]
map.insert(1719, &[4456482]); // 1719 => [4456482]
map.insert(1865, &[5242914]); // 1865 => [5242914]
map.insert(1602, &[4196418]); // 1602 => [4196418]
map.insert(2012, &[4198466]); // 2012 => [4198466]
map.insert(1195, &[4202562]); // 1195 => [4202562]
map.insert(1181, &[4210754]); // 1181 => [4210754]
map.insert(1551, &[4259906]); // 1551 => [4259906]
map.insert(1785, &[4325442]); // 1785 => [4325442]
map.insert(1751, &[4456514]); // 1751 => [4456514]
map.insert(1080, &[4718658]); // 1080 => [4718658]
map.insert(1410, &[4194690]); // 1410 => [4194690]
map.insert(1477, &[4195458]); // 1477 => [4195458]
map.insert(1666, &[4196482]); // 1666 => [4196482]
map.insert(1820, &[4198530]); // 1820 => [4198530]
map.insert(1117, &[4210818]); // 1117 => [4210818]
map.insert(1499, &[4227202]); // 1499 => [4227202]
map.insert(1743, &[4259970]); // 1743 => [4259970]
map.insert(1593, &[4325506]); // 1593 => [4325506]
map.insert(1559, &[4456578]); // 1559 => [4456578]
map.insert(2025, &[5243010]); // 2025 => [5243010]
map.insert(1779, &[12583042]); // 1779 => [12583042]
map.insert(1205, &[4195074]); // 1205 => [4195074]
map.insert(1794, &[4196610]); // 1794 => [4196610]
map.insert(1515, &[4202754]); // 1515 => [4202754]
map.insert(1501, &[4210946]); // 1501 => [4210946]
map.insert(1871, &[4260098]); // 1871 => [4260098]
map.insert(1977, &[4325634]); // 1977 => [4325634]
map.insert(1641, &[5243138]); // 1641 => [5243138]
map.insert(1142, &[6291714]); // 1142 => [6291714]
map.insert(1907, &[12583170]); // 1907 => [12583170]
map.insert(1266, &[4195842]); // 1266 => [4195842]
map.insert(1579, &[4198914]); // 1579 => [4198914]
map.insert(2040, &[4260354]); // 2040 => [4260354]
map.insert(1806, &[4325890]); // 1806 => [4325890]
map.insert(1824, &[4456962]); // 1824 => [4456962]
map.insert(1487, &[4719106]); // 1487 => [4719106]
map.insert(1988, &[12583426]); // 1988 => [12583426]
map.insert(1861, &[4197378]); // 1861 => [4197378]
map.insert(1755, &[4199426]); // 1755 => [4199426]
map.insert(1452, &[4203522]); // 1452 => [4203522]
map.insert(1434, &[4211714]); // 1434 => [4211714]
map.insert(1052, &[4228098]); // 1052 => [4228098]
map.insert(1800, &[4260866]); // 1800 => [4260866]
map.insert(2046, &[4326402]); // 2046 => [4326402]
map.insert(2000, &[4457474]); // 2000 => [4457474]
map.insert(1343, &[4719618]); // 1343 => [4719618]
map.insert(1582, &[5243906]); // 1582 => [5243906]
map.insert(1844, &[12583938]); // 1844 => [12583938]
map.insert(1883, &[4229122]); // 1883 => [4229122]
map.insert(1103, &[4261890]); // 1103 => [4261890]
map.insert(1209, &[4327426]); // 1209 => [4327426]
map.insert(1175, &[4458498]); // 1175 => [4458498]
map.insert(1859, &[4214786]); // 1859 => [4214786]
map.insert(1733, &[4231170]); // 1733 => [4231170]
map.insert(2022, &[4722690]); // 2022 => [4722690]
map.insert(1517, &[12587010]); // 1517 => [12587010]
map.insert(1076, &[4218882]); // 1076 => [4218882]
map.insert(1702, &[4268034]); // 1702 => [4268034]
map.insert(1662, &[4464642]); // 1662 => [4464642]
map.insert(1920, &[5251074]); // 1920 => [5251074]
map.insert(1412, &[4243458]); // 1412 => [4243458]
map.insert(1638, &[4341762]); // 1638 => [4341762]
map.insert(1191, &[4734978]); // 1191 => [4734978]
map.insert(1449, &[6307842]); // 1449 => [6307842]
map.insert(1708, &[12599298]); // 1708 => [12599298]
map.insert(1814, &[4292610]); // 1814 => [4292610]
map.insert(1589, &[4784130]); // 1589 => [4784130]
map.insert(1851, &[6356994]); // 1851 => [6356994]
map.insert(1086, &[12648450]); // 1086 => [12648450]
map.insert(1731, &[4849666]); // 1731 => [4849666]
map.insert(1773, &[4980738]); // 1773 => [4980738]
map.insert(1532, &[5505026]); // 1532 => [5505026]
map.insert(1254, &[12845058]); // 1254 => [12845058]
map.insert(1811, &[5767170]); // 1811 => [5767170]
map.insert(1292, &[6815746]); // 1292 => [6815746]
map.insert(1565, &[7340034]); // 1565 => [7340034]
map.insert(1799, &[14680066]); // 1799 => [14680066]
map.insert(1164, &[4194444]); // 1164 => [4194444]
map.insert(1467, &[4194828]); // 1467 => [4194828]
map.insert(1938, &[4198412]); // 1938 => [4198412]
map.insert(1235, &[4210700]); // 1235 => [4210700]
map.insert(1895, &[5242892]); // 1895 => [5242892]
map.insert(1108, &[4194388]); // 1108 => [4194388]
map.insert(1300, &[4194580]); // 1300 => [4194580]
map.insert(1443, &[4194836]); // 1443 => [4194836]
map.insert(1930, &[4198420]); // 1930 => [4198420]
map.insert(1625, &[4259860]); // 1625 => [4259860]
map.insert(1134, &[4718612]); // 1134 => [4718612]
map.insert(1919, &[5242900]); // 1919 => [5242900]
map.insert(1376, &[6291476]); // 1376 => [6291476]
map.insert(1124, &[4194404]); // 1124 => [4194404]
map.insert(1427, &[4194852]); // 1427 => [4194852]
map.insert(1379, &[4195364]); // 1379 => [4195364]
map.insert(1572, &[4196388]); // 1572 => [4196388]
map.insert(1621, &[12582948]); // 1621 => [12582948]
map.insert(1220, &[4194500]); // 1220 => [4194500]
map.insert(1523, &[4194884]); // 1523 => [4194884]
map.insert(2010, &[4198468]); // 2010 => [4198468]
map.insert(1197, &[4202564]); // 1197 => [4202564]
map.insert(1179, &[4210756]); // 1179 => [4210756]
map.insert(1309, &[4227140]); // 1309 => [4227140]
map.insert(1791, &[4325444]); // 1791 => [4325444]
map.insert(1745, &[4456516]); // 1745 => [4456516]
map.insert(1839, &[5242948]); // 1839 => [5242948]
map.insert(1328, &[6291524]); // 1328 => [6291524]
map.insert(1331, &[4194948]); // 1331 => [4194948]
map.insert(1475, &[4195460]); // 1475 => [4195460]
map.insert(1818, &[4198532]); // 1818 => [4198532]
map.insert(1133, &[4202628]); // 1133 => [4202628]
map.insert(1737, &[4259972]); // 1737 => [4259972]
map.insert(1599, &[4325508]); // 1599 => [4325508]
map.insert(2031, &[5243012]); // 2031 => [5243012]
map.insert(1520, &[6291588]); // 1520 => [6291588]
map.insert(1781, &[12583044]); // 1781 => [12583044]
map.insert(1203, &[4195076]); // 1203 => [4195076]
map.insert(1937, &[4456708]); // 1937 => [4456708]
map.insert(1971, &[4196868]); // 1971 => [4196868]
map.insert(1388, &[4211204]); // 1388 => [4211204]
map.insert(1830, &[4456964]); // 1830 => [4456964]
map.insert(1481, &[4719108]); // 1481 => [4719108]
map.insert(1223, &[6291972]); // 1223 => [6291972]
map.insert(1986, &[12583428]); // 1986 => [12583428]
map.insert(2006, &[4457476]); // 2006 => [4457476]
map.insert(1337, &[4719620]); // 1337 => [4719620]
map.insert(1842, &[12583940]); // 1842 => [12583940]
map.insert(1885, &[4229124]); // 1885 => [4229124]
map.insert(1215, &[4327428]); // 1215 => [4327428]
map.insert(1391, &[5244932]); // 1391 => [5244932]
map.insert(1495, &[4263940]); // 1495 => [4263940]
map.insert(1696, &[4268036]); // 1696 => [4268036]
map.insert(1622, &[4333572]); // 1622 => [4333572]
map.insert(1926, &[5251076]); // 1926 => [5251076]
map.insert(1968, &[5259268]); // 1968 => [5259268]
map.insert(1992, &[4489220]); // 1992 => [4489220]
map.insert(1836, &[12615684]); // 1836 => [12615684]
map.insert(1853, &[6356996]); // 1853 => [6356996]
map.insert(1492, &[5373956]); // 1492 => [5373956]
map.insert(1995, &[6422532]); // 1995 => [6422532]
map.insert(1530, &[5505028]); // 1530 => [5505028]
map.insert(1563, &[7340036]); // 1563 => [7340036]
map.insert(1310, &[13631492]); // 1310 => [13631492]
map.insert(1176, &[4194456]); // 1176 => [4194456]
map.insert(1560, &[4196376]); // 1560 => [4196376]
map.insert(1699, &[4325400]); // 1699 => [4325400]
map.insert(1677, &[4456472]); // 1677 => [4456472]
map.insert(1320, &[4194600]); // 1320 => [4194600]
map.insert(1416, &[4194696]); // 1416 => [4194696]
map.insert(1672, &[4196488]); // 1672 => [4196488]
map.insert(1111, &[4210824]); // 1111 => [4210824]
map.insert(1505, &[4202760]); // 1505 => [4202760]
map.insert(2034, &[4260360]); // 2034 => [4260360]
map.insert(1424, &[4211720]); // 1424 => [4211720]
map.insert(2036, &[4326408]); // 2036 => [4326408]
map.insert(1854, &[12583944]); // 1854 => [12583944]
map.insert(1761, &[4204552]); // 1761 => [4204552]
map.insert(1873, &[4229128]); // 1873 => [4229128]
map.insert(1916, &[6293512]); // 1916 => [6293512]
map.insert(1325, &[4329480]); // 1325 => [4329480]
map.insert(2028, &[4722696]); // 2028 => [4722696]
map.insert(1762, &[6295560]); // 1762 => [6295560]
map.insert(1511, &[12587016]); // 1511 => [12587016]
map.insert(1464, &[4235272]); // 1464 => [4235272]
map.insert(1626, &[4333576]); // 1626 => [4333576]
map.insert(1422, &[4243464]); // 1422 => [4243464]
map.insert(1323, &[4751368]); // 1323 => [4751368]
map.insert(1232, &[4521992]); // 1232 => [4521992]
map.insert(1326, &[5308424]); // 1326 => [5308424]
map.insert(1841, &[6357000]); // 1841 => [6357000]
map.insert(1767, &[4980744]); // 1767 => [4980744]
map.insert(1817, &[5767176]); // 1817 => [5767176]
map.insert(1200, &[4194480]); // 1200 => [4194480]
map.insert(1966, &[4198448]); // 1966 => [4198448]
map.insert(1675, &[4325424]); // 1675 => [4325424]
map.insert(1303, &[4195408]); // 1303 => [4195408]
map.insert(1167, &[4210768]); // 1167 => [4210768]
map.insert(1508, &[6291600]); // 1508 => [6291600]
map.insert(1678, &[4198672]); // 1678 => [4198672]
map.insert(1529, &[4202768]); // 1529 => [4202768]
map.insert(1963, &[4325648]); // 1963 => [4325648]
map.insert(1925, &[4456720]); // 1925 => [4456720]
map.insert(1959, &[4196880]); // 1959 => [4196880]
map.insert(1879, &[4197392]); // 1879 => [4197392]
map.insert(1596, &[5243920]); // 1596 => [5243920]
map.insert(1892, &[6293520]); // 1892 => [6293520]
map.insert(1440, &[4235280]); // 1440 => [4235280]
map.insert(1421, &[6299664]); // 1421 => [6299664]
map.insert(1956, &[5259280]); // 1956 => [5259280]
map.insert(1575, &[4784144]); // 1575 => [4784144]
map.insert(1472, &[5373968]); // 1472 => [5373968]
map.insert(2033, &[6553616]); // 2033 => [6553616]
map.insert(1127, &[4195616]); // 1127 => [4195616]
map.insert(1788, &[5243424]); // 1788 => [5243424]
map.insert(1876, &[6293536]); // 1876 => [6293536]
map.insert(1738, &[6295584]); // 1738 => [6295584]
map.insert(1954, &[5251104]); // 1954 => [5251104]
map.insert(1419, &[6307872]); // 1419 => [6307872]
map.insert(1985, &[6553632]); // 1985 => [6553632]
map.insert(1338, &[13631520]); // 1338 => [13631520]
map.insert(1829, &[14680096]); // 1829 => [14680096]
map.insert(1886, &[4198592]); // 1886 => [4198592]
map.insert(2005, &[4456768]); // 2005 => [4456768]
map.insert(2039, &[4196928]); // 2039 => [4196928]
map.insert(1198, &[4227648]); // 1198 => [4227648]
map.insert(1764, &[4268096]); // 1764 => [4268096]
map.insert(1746, &[4276288]); // 1746 => [4276288]
map.insert(1953, &[6553664]); // 1953 => [6553664]
map.insert(1874, &[4457600]); // 1874 => [4457600]
map.insert(2009, &[4229248]); // 2009 => [4229248]
map.insert(1960, &[12615808]); // 1960 => [12615808]
map.insert(1212, &[12648576]); // 1212 => [12648576]
map.insert(1482, &[12714240]); // 1482 => [12714240]
map.insert(1782, &[4215296]); // 1782 => [4215296]
map.insert(1965, &[6296576]); // 1965 => [6296576]
map.insert(1506, &[4736000]); // 1506 => [4736000]
map.insert(1039, &[4194319]); // 1039 => [4194319]
map.insert(905, &[4119]); // 905 => [4119]
map.insert(1047, &[4194327]); // 1047 => [4194327]
map.insert(1063, &[4194343]); // 1063 => [4194343]
map.insert(1159, &[4194439]); // 1159 => [4194439]
map.insert(1543, &[4196359]); // 1543 => [4196359]
map.insert(1945, &[4198407]); // 1945 => [4198407]
map.insert(1724, &[4325383]); // 1724 => [4325383]
map.insert(1149, &[4718599]); // 1149 => [4718599]
map.insert(1900, &[5242887]); // 1900 => [5242887]
map.insert(1395, &[6291463]); // 1395 => [6291463]
map.insert(1654, &[12582919]); // 1654 => [12582919]
map.insert(1051, &[4194331]); // 1051 => [4194331]
map.insert(1067, &[4194347]); // 1067 => [4194347]
map.insert(1099, &[4194379]); // 1099 => [4194379]
map.insert(1163, &[4194443]); // 1163 => [4194443]
map.insert(1468, &[4194827]); // 1468 => [4194827]
map.insert(1356, &[4195339]); // 1356 => [4195339]
map.insert(1250, &[4202507]); // 1250 => [4202507]
map.insert(1236, &[4210699]); // 1236 => [4210699]
map.insert(1362, &[4227083]); // 1362 => [4227083]
map.insert(1606, &[4259851]); // 1606 => [4259851]
map.insert(1712, &[4325387]); // 1712 => [4325387]
map.insert(1888, &[5242891]); // 1888 => [5242891]
map.insert(1407, &[6291467]); // 1407 => [6291467]
map.insert(1107, &[4194387]); // 1107 => [4194387]
map.insert(1299, &[4194579]); // 1299 => [4194579]
map.insert(1444, &[4194835]); // 1444 => [4194835]
map.insert(1555, &[4196371]); // 1555 => [4196371]
map.insert(1933, &[4198419]); // 1933 => [4198419]
map.insert(1228, &[4210707]); // 1228 => [4210707]
map.insert(1354, &[4227091]); // 1354 => [4227091]
map.insert(1630, &[4259859]); // 1630 => [4259859]
map.insert(1704, &[4325395]); // 1704 => [4325395]
map.insert(1670, &[4456467]); // 1670 => [4456467]
map.insert(1912, &[5242899]); // 1912 => [5242899]
map.insert(1634, &[12582931]); // 1634 => [12582931]
map.insert(1123, &[4194403]); // 1123 => [4194403]
map.insert(1187, &[4194467]); // 1187 => [4194467]
map.insert(1428, &[4194851]); // 1428 => [4194851]
map.insert(1571, &[4196387]); // 1571 => [4196387]
map.insert(1981, &[4198435]); // 1981 => [4198435]
map.insert(1276, &[4210723]); // 1276 => [4210723]
map.insert(1646, &[4259875]); // 1646 => [4259875]
map.insert(1718, &[4456483]); // 1718 => [4456483]
map.insert(1864, &[5242915]); // 1864 => [5242915]
map.insert(1603, &[4196419]); // 1603 => [4196419]
map.insert(2013, &[4198467]); // 2013 => [4198467]
map.insert(1194, &[4202563]); // 1194 => [4202563]
map.insert(1180, &[4210755]); // 1180 => [4210755]
map.insert(1550, &[4259907]); // 1550 => [4259907]
map.insert(1784, &[4325443]); // 1784 => [4325443]
map.insert(1750, &[4456515]); // 1750 => [4456515]
map.insert(1081, &[4718659]); // 1081 => [4718659]
map.insert(1411, &[4194691]); // 1411 => [4194691]
map.insert(1476, &[4195459]); // 1476 => [4195459]
map.insert(1667, &[4196483]); // 1667 => [4196483]
map.insert(1821, &[4198531]); // 1821 => [4198531]
map.insert(1116, &[4210819]); // 1116 => [4210819]
map.insert(1498, &[4227203]); // 1498 => [4227203]
map.insert(1742, &[4259971]); // 1742 => [4259971]
map.insert(1592, &[4325507]); // 1592 => [4325507]
map.insert(1558, &[4456579]); // 1558 => [4456579]
map.insert(2024, &[5243011]); // 2024 => [5243011]
map.insert(1778, &[12583043]); // 1778 => [12583043]
map.insert(1204, &[4195075]); // 1204 => [4195075]
map.insert(1795, &[4196611]); // 1795 => [4196611]
map.insert(1514, &[4202755]); // 1514 => [4202755]
map.insert(1500, &[4210947]); // 1500 => [4210947]
map.insert(1870, &[4260099]); // 1870 => [4260099]
map.insert(1976, &[4325635]); // 1976 => [4325635]
map.insert(1640, &[5243139]); // 1640 => [5243139]
map.insert(1143, &[6291715]); // 1143 => [6291715]
map.insert(1906, &[12583171]); // 1906 => [12583171]
map.insert(1267, &[4195843]); // 1267 => [4195843]
map.insert(1578, &[4198915]); // 1578 => [4198915]
map.insert(2041, &[4260355]); // 2041 => [4260355]
map.insert(1807, &[4325891]); // 1807 => [4325891]
map.insert(1825, &[4456963]); // 1825 => [4456963]
map.insert(1486, &[4719107]); // 1486 => [4719107]
map.insert(1989, &[12583427]); // 1989 => [12583427]
map.insert(1860, &[4197379]); // 1860 => [4197379]
map.insert(1754, &[4199427]); // 1754 => [4199427]
map.insert(1453, &[4203523]); // 1453 => [4203523]
map.insert(1435, &[4211715]); // 1435 => [4211715]
map.insert(1053, &[4228099]); // 1053 => [4228099]
map.insert(1801, &[4260867]); // 1801 => [4260867]
map.insert(2047, &[4326403]); // 2047 => [4326403]
map.insert(2001, &[4457475]); // 2001 => [4457475]
map.insert(1342, &[4719619]); // 1342 => [4719619]
map.insert(1583, &[5243907]); // 1583 => [5243907]
map.insert(1845, &[12583939]); // 1845 => [12583939]
map.insert(1882, &[4229123]); // 1882 => [4229123]
map.insert(1102, &[4261891]); // 1102 => [4261891]
map.insert(1208, &[4327427]); // 1208 => [4327427]
map.insert(1174, &[4458499]); // 1174 => [4458499]
map.insert(1858, &[4214787]); // 1858 => [4214787]
map.insert(1732, &[4231171]); // 1732 => [4231171]
map.insert(2023, &[4722691]); // 2023 => [4722691]
map.insert(1516, &[12587011]); // 1516 => [12587011]
map.insert(1077, &[4218883]); // 1077 => [4218883]
map.insert(1703, &[4268035]); // 1703 => [4268035]
map.insert(1663, &[4464643]); // 1663 => [4464643]
map.insert(1921, &[5251075]); // 1921 => [5251075]
map.insert(1413, &[4243459]); // 1413 => [4243459]
map.insert(1639, &[4341763]); // 1639 => [4341763]
map.insert(1190, &[4734979]); // 1190 => [4734979]
map.insert(1448, &[6307843]); // 1448 => [6307843]
map.insert(1709, &[12599299]); // 1709 => [12599299]
map.insert(1815, &[4292611]); // 1815 => [4292611]
map.insert(1588, &[4784131]); // 1588 => [4784131]
map.insert(1850, &[6356995]); // 1850 => [6356995]
map.insert(1087, &[12648451]); // 1087 => [12648451]
map.insert(1730, &[4849667]); // 1730 => [4849667]
map.insert(1772, &[4980739]); // 1772 => [4980739]
map.insert(1533, &[5505027]); // 1533 => [5505027]
map.insert(1255, &[12845059]); // 1255 => [12845059]
map.insert(1810, &[5767171]); // 1810 => [5767171]
map.insert(1293, &[6815747]); // 1293 => [6815747]
map.insert(1564, &[7340035]); // 1564 => [7340035]
map.insert(1798, &[14680067]); // 1798 => [14680067]
map.insert(1165, &[4194445]); // 1165 => [4194445]
map.insert(1466, &[4194829]); // 1466 => [4194829]
map.insert(1939, &[4198413]); // 1939 => [4198413]
map.insert(1234, &[4210701]); // 1234 => [4210701]
map.insert(1894, &[5242893]); // 1894 => [5242893]
map.insert(1109, &[4194389]); // 1109 => [4194389]
map.insert(1301, &[4194581]); // 1301 => [4194581]
map.insert(1442, &[4194837]); // 1442 => [4194837]
map.insert(1931, &[4198421]); // 1931 => [4198421]
map.insert(1624, &[4259861]); // 1624 => [4259861]
map.insert(1135, &[4718613]); // 1135 => [4718613]
map.insert(1918, &[5242901]); // 1918 => [5242901]
map.insert(1377, &[6291477]); // 1377 => [6291477]
map.insert(1125, &[4194405]); // 1125 => [4194405]
map.insert(1426, &[4194853]); // 1426 => [4194853]
map.insert(1378, &[4195365]); // 1378 => [4195365]
map.insert(1573, &[4196389]); // 1573 => [4196389]
map.insert(1620, &[12582949]); // 1620 => [12582949]
map.insert(1221, &[4194501]); // 1221 => [4194501]
map.insert(1522, &[4194885]); // 1522 => [4194885]
map.insert(2011, &[4198469]); // 2011 => [4198469]
map.insert(1196, &[4202565]); // 1196 => [4202565]
map.insert(1178, &[4210757]); // 1178 => [4210757]
map.insert(1308, &[4227141]); // 1308 => [4227141]
map.insert(1790, &[4325445]); // 1790 => [4325445]
map.insert(1744, &[4456517]); // 1744 => [4456517]
map.insert(1838, &[5242949]); // 1838 => [5242949]
map.insert(1329, &[6291525]); // 1329 => [6291525]
map.insert(1330, &[4194949]); // 1330 => [4194949]
map.insert(1474, &[4195461]); // 1474 => [4195461]
map.insert(1819, &[4198533]); // 1819 => [4198533]
map.insert(1132, &[4202629]); // 1132 => [4202629]
map.insert(1736, &[4259973]); // 1736 => [4259973]
map.insert(1598, &[4325509]); // 1598 => [4325509]
map.insert(2030, &[5243013]); // 2030 => [5243013]
map.insert(1521, &[6291589]); // 1521 => [6291589]
map.insert(1780, &[12583045]); // 1780 => [12583045]
map.insert(1202, &[4195077]); // 1202 => [4195077]
map.insert(1936, &[4456709]); // 1936 => [4456709]
map.insert(1970, &[4196869]); // 1970 => [4196869]
map.insert(1389, &[4211205]); // 1389 => [4211205]
map.insert(1831, &[4456965]); // 1831 => [4456965]
map.insert(1480, &[4719109]); // 1480 => [4719109]
map.insert(1222, &[6291973]); // 1222 => [6291973]
map.insert(1987, &[12583429]); // 1987 => [12583429]
map.insert(2007, &[4457477]); // 2007 => [4457477]
map.insert(1336, &[4719621]); // 1336 => [4719621]
map.insert(1843, &[12583941]); // 1843 => [12583941]
map.insert(1884, &[4229125]); // 1884 => [4229125]
map.insert(1214, &[4327429]); // 1214 => [4327429]
map.insert(1390, &[5244933]); // 1390 => [5244933]
map.insert(1494, &[4263941]); // 1494 => [4263941]
map.insert(1697, &[4268037]); // 1697 => [4268037]
map.insert(1623, &[4333573]); // 1623 => [4333573]
map.insert(1927, &[5251077]); // 1927 => [5251077]
map.insert(1969, &[5259269]); // 1969 => [5259269]
map.insert(1993, &[4489221]); // 1993 => [4489221]
map.insert(1837, &[12615685]); // 1837 => [12615685]
map.insert(1852, &[6356997]); // 1852 => [6356997]
map.insert(1493, &[5373957]); // 1493 => [5373957]
map.insert(1994, &[6422533]); // 1994 => [6422533]
map.insert(1531, &[5505029]); // 1531 => [5505029]
map.insert(1562, &[7340037]); // 1562 => [7340037]
map.insert(1311, &[13631493]); // 1311 => [13631493]
map.insert(1177, &[4194457]); // 1177 => [4194457]
map.insert(1561, &[4196377]); // 1561 => [4196377]
map.insert(1698, &[4325401]); // 1698 => [4325401]
map.insert(1676, &[4456473]); // 1676 => [4456473]
map.insert(1321, &[4194601]); // 1321 => [4194601]
map.insert(1417, &[4194697]); // 1417 => [4194697]
map.insert(1673, &[4196489]); // 1673 => [4196489]
map.insert(1110, &[4210825]); // 1110 => [4210825]
map.insert(1504, &[4202761]); // 1504 => [4202761]
map.insert(2035, &[4260361]); // 2035 => [4260361]
map.insert(1425, &[4211721]); // 1425 => [4211721]
map.insert(2037, &[4326409]); // 2037 => [4326409]
map.insert(1855, &[12583945]); // 1855 => [12583945]
map.insert(1760, &[4204553]); // 1760 => [4204553]
map.insert(1872, &[4229129]); // 1872 => [4229129]
map.insert(1917, &[6293513]); // 1917 => [6293513]
map.insert(1324, &[4329481]); // 1324 => [4329481]
map.insert(2029, &[4722697]); // 2029 => [4722697]
map.insert(1763, &[6295561]); // 1763 => [6295561]
map.insert(1510, &[12587017]); // 1510 => [12587017]
map.insert(1465, &[4235273]); // 1465 => [4235273]
map.insert(1627, &[4333577]); // 1627 => [4333577]
map.insert(1423, &[4243465]); // 1423 => [4243465]
map.insert(1322, &[4751369]); // 1322 => [4751369]
map.insert(1233, &[4521993]); // 1233 => [4521993]
map.insert(1327, &[5308425]); // 1327 => [5308425]
map.insert(1840, &[6357001]); // 1840 => [6357001]
map.insert(1766, &[4980745]); // 1766 => [4980745]
map.insert(1816, &[5767177]); // 1816 => [5767177]
map.insert(1201, &[4194481]); // 1201 => [4194481]
map.insert(1967, &[4198449]); // 1967 => [4198449]
map.insert(1674, &[4325425]); // 1674 => [4325425]
map.insert(1302, &[4195409]); // 1302 => [4195409]
map.insert(1166, &[4210769]); // 1166 => [4210769]
map.insert(1509, &[6291601]); // 1509 => [6291601]
map.insert(1679, &[4198673]); // 1679 => [4198673]
map.insert(1528, &[4202769]); // 1528 => [4202769]
map.insert(1962, &[4325649]); // 1962 => [4325649]
map.insert(1924, &[4456721]); // 1924 => [4456721]
map.insert(1958, &[4196881]); // 1958 => [4196881]
map.insert(1878, &[4197393]); // 1878 => [4197393]
map.insert(1597, &[5243921]); // 1597 => [5243921]
map.insert(1893, &[6293521]); // 1893 => [6293521]
map.insert(1441, &[4235281]); // 1441 => [4235281]
map.insert(1420, &[6299665]); // 1420 => [6299665]
map.insert(1957, &[5259281]); // 1957 => [5259281]
map.insert(1574, &[4784145]); // 1574 => [4784145]
map.insert(1473, &[5373969]); // 1473 => [5373969]
map.insert(2032, &[6553617]); // 2032 => [6553617]
map.insert(1126, &[4195617]); // 1126 => [4195617]
map.insert(1789, &[5243425]); // 1789 => [5243425]
map.insert(1877, &[6293537]); // 1877 => [6293537]
map.insert(1739, &[6295585]); // 1739 => [6295585]
map.insert(1955, &[5251105]); // 1955 => [5251105]
map.insert(1418, &[6307873]); // 1418 => [6307873]
map.insert(1984, &[6553633]); // 1984 => [6553633]
map.insert(1339, &[13631521]); // 1339 => [13631521]
map.insert(1828, &[14680097]); // 1828 => [14680097]
map.insert(1887, &[4198593]); // 1887 => [4198593]
map.insert(2004, &[4456769]); // 2004 => [4456769]
map.insert(2038, &[4196929]); // 2038 => [4196929]
map.insert(1199, &[4227649]); // 1199 => [4227649]
map.insert(1765, &[4268097]); // 1765 => [4268097]
map.insert(1747, &[4276289]); // 1747 => [4276289]
map.insert(1952, &[6553665]); // 1952 => [6553665]
map.insert(1875, &[4457601]); // 1875 => [4457601]
map.insert(2008, &[4229249]); // 2008 => [4229249]
map.insert(1961, &[12615809]); // 1961 => [12615809]
map.insert(1213, &[12648577]); // 1213 => [12648577]
map.insert(1483, &[12714241]); // 1483 => [12714241]
map.insert(1783, &[4215297]); // 1783 => [4215297]
map.insert(1964, &[6296577]); // 1964 => [6296577]
map.insert(1507, &[4736001]); // 1507 => [4736001]
map.insert(1928, &[4198422]); // 1928 => [4198422]
map.insert(1929, &[4198423]); // 1929 => [4198423]
SYNDROME_MAP = Box::into_raw(map);
}
});
}
impl GuavaCode24_13 {
fn parity_check_matrix_transposed(&self) -> &BinMatrix {
init();
unsafe {
PARITY_MATRIX_T.as_ref().unwrap()
}
}
}
impl BinaryCode for GuavaCode24_13 {
fn name(&self) -> String {
"[24, 13] Guava code".to_owned()
}
fn length(&self) -> usize {
24
}
fn dimension(&self) -> usize {
13
}
fn generator_matrix(&self) -> &BinMatrix {
init();
unsafe {
GENERATOR_MATRIX.as_ref().unwrap()
}
}
fn parity_check_matrix(&self) -> &BinMatrix {
init();
unsafe {
PARITY_MATRIX.as_ref().unwrap()
}
}
fn decode_to_code(&self, c: &BinVector) -> Result<BinVector, &str> {
init();
let map = unsafe {
SYNDROME_MAP.as_ref().unwrap()
};
debug_assert_eq!(c.len(), self.length(), "the length doesn't match the expected length (length of the code)");
let he = c * self.parity_check_matrix_transposed();
let mut error = BinVector::with_capacity(24);
let stor = unsafe { error.get_storage_mut() };
let errbytes = map[&he.as_u64()];
debug_assert_eq!(errbytes.len(), 24 / 64 + if 24 % 64 != 0 { 1 } else { 0 });
stor.clear();
stor.extend_from_slice(&errbytes[..]);
unsafe { error.set_len(24) };
debug_assert_eq!(error.len(), self.length(), "internal: the error vector is of the wrong length");
let result = c + &error;
debug_assert_eq!(result.len(), self.length(), "internal: the result vector is of the wrong length");
debug_assert_eq!((&result * self.parity_check_matrix_transposed()).count_ones(), 0);
Ok(result)
}
fn decode_to_message(&self, c: &BinVector) -> Result<BinVector, &str> {
let mut codeword = self.decode_to_code(c)?;
codeword.truncate(13);
Ok(codeword)
}
fn decode_slice(&self, c: &mut [u64]) {
init();
debug_assert_eq!(c[24 / 64] & !((1 << 24) - 1), 0, "this message has excess bits");
let map = unsafe {
SYNDROME_MAP.as_ref().unwrap()
};
let he = &BinMatrix::from_slices(&[&c[..]], self.length()) * self.parity_check_matrix_transposed();
let error = map[unsafe { &he.get_word_unchecked(0, 0) }];
c.iter_mut().zip(error.iter().copied()).for_each(|(sample, error)| *sample ^= error as u64);
}
}
#[cfg(test)]
mod tests {
use super::*;
use m4ri_rust::friendly::BinVector;
use crate::oracle::Sample;
#[test]
fn size() {
let code = GuavaCode24_13.generator_matrix();
assert_eq!(code.ncols(), 24);
assert_eq!(code.nrows(), 13);
}
#[test]
fn test_decode_sample() {
let code = GuavaCode24_13;
for _ in 0..1000 {
// setup
let vec = BinVector::random(code.length());
let mut sample_a = Sample::from_binvector(&vec, false);
let mut sample_b = Sample::from_binvector(&vec, true);
let decoded_vec = code.decode_to_message(&vec).unwrap();
println!("decoded_vec: {:?}", decoded_vec);
// test vectors
let decoded_vec_sample_a = Sample::from_binvector(&decoded_vec, false);
let decoded_vec_sample_b = Sample::from_binvector(&decoded_vec, true);
code.decode_sample(&mut sample_a);
code.decode_sample(&mut sample_b);
assert_eq!(sample_a.get_product(), false);
assert_eq!(sample_b.get_product(), true);
assert_eq!(sample_a, decoded_vec_sample_a);
assert_eq!(sample_b, decoded_vec_sample_b);
}
}
#[test]
fn random_decode_tests() {
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[false, false, false, true, false, true, false, false, true, false, true, true, false, true, true, true, true, true, false, true, true, true, true, true]);
let codeword = BinVector::from_bools(&[false, false, false, true, false, true, false, false, true, false, true, true, false, true, true, false, true, false, false, true, true, true, false, true]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[false, true, true, false, true, true, true, true, false, true, false, false, true, true, true, true, false, false, true, false, true, false, true, true]);
let codeword = BinVector::from_bools(&[true, false, true, false, true, true, true, true, false, true, false, false, true, true, true, true, true, false, true, false, true, false, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[false, false, true, true, false, true, false, false, false, false, true, true, true, true, true, false, true, true, false, true, true, false, true, false]);
let codeword = BinVector::from_bools(&[true, false, true, true, false, false, false, false, false, false, true, true, true, true, true, false, true, true, false, true, true, true, false, true]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[true, false, false, true, false, false, true, true, false, true, true, true, false, false, true, false, true, true, false, true, true, false, true, false]);
let codeword = BinVector::from_bools(&[false, false, false, true, false, false, true, true, true, true, true, true, false, false, true, false, true, true, false, true, true, false, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[false, true, true, true, false, false, true, false, true, false, true, true, true, true, false, false, true, false, false, false, true, false, false, true]);
let codeword = BinVector::from_bools(&[false, true, true, true, false, false, true, false, true, true, true, true, false, true, false, false, true, false, false, false, true, false, false, true]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[true, false, true, false, true, true, true, true, false, true, false, false, true, true, false, false, false, true, true, false, false, false, true, false]);
let codeword = BinVector::from_bools(&[true, false, false, false, true, true, true, true, false, true, false, false, true, true, false, false, false, true, true, false, true, true, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[false, true, true, true, false, true, true, false, true, false, true, false, false, false, false, false, false, true, false, false, true, true, false, false]);
let codeword = BinVector::from_bools(&[true, true, false, false, false, true, true, true, true, false, true, false, false, false, false, false, false, true, false, false, true, true, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[false, true, true, false, false, true, false, true, true, false, false, false, true, false, true, false, false, false, true, true, false, false, false, true]);
let codeword = BinVector::from_bools(&[false, true, true, true, false, true, false, true, true, false, false, false, true, false, true, false, false, false, true, true, false, false, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[true, false, false, true, true, true, false, true, false, true, false, true, true, true, false, true, true, false, true, true, false, false, true, false]);
let codeword = BinVector::from_bools(&[true, true, false, true, true, true, false, false, true, true, false, true, true, true, false, true, true, false, true, true, false, false, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[true, true, true, false, true, true, false, false, true, true, false, false, false, true, true, false, true, true, true, true, true, true, true, true]);
let codeword = BinVector::from_bools(&[true, true, true, false, true, true, false, false, true, true, false, false, false, true, true, false, true, false, true, false, true, true, false, true]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[false, false, true, false, false, false, true, true, false, false, true, true, true, false, false, false, true, true, false, true, false, true, false, true]);
let codeword = BinVector::from_bools(&[true, false, true, false, false, false, true, true, true, false, true, true, true, false, false, false, true, true, true, true, false, true, false, true]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[true, false, false, false, true, true, true, false, true, true, false, true, false, false, true, false, true, false, false, false, true, false, false, true]);
let codeword = BinVector::from_bools(&[false, false, false, true, true, true, true, false, true, true, true, true, false, false, true, false, true, false, false, false, true, false, false, true]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[false, false, false, false, true, true, false, true, true, false, false, false, true, false, true, true, false, false, false, true, false, true, false, false]);
let codeword = BinVector::from_bools(&[false, true, false, false, true, true, false, true, true, false, false, false, true, true, true, true, true, false, false, true, false, true, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[false, true, false, false, false, false, false, false, false, true, true, false, false, true, true, false, true, true, false, true, false, true, false, true]);
let codeword = BinVector::from_bools(&[false, true, false, false, false, false, false, false, true, true, true, false, false, true, true, false, false, true, false, true, false, true, false, true]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[false, false, true, true, true, false, true, false, true, false, false, true, false, false, false, false, false, false, true, true, false, false, false, true]);
let codeword = BinVector::from_bools(&[false, false, false, true, true, false, true, false, true, true, false, true, false, false, false, false, false, false, true, true, false, false, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[true, false, false, false, false, true, true, true, true, false, true, false, true, true, true, true, true, true, true, false, false, true, false, false]);
let codeword = BinVector::from_bools(&[true, false, false, false, false, true, false, true, false, false, true, false, true, true, true, true, true, true, true, false, false, true, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[false, true, true, false, false, true, true, false, true, true, false, false, true, true, true, true, true, true, false, false, false, true, false, false]);
let codeword = BinVector::from_bools(&[false, true, true, false, false, false, true, false, true, true, false, false, true, false, true, true, true, true, false, false, true, true, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[false, true, true, false, false, false, true, false, false, true, true, true, true, false, true, false, true, false, false, false, false, true, true, false]);
let codeword = BinVector::from_bools(&[true, false, true, false, false, false, true, true, false, true, true, true, true, false, true, false, false, false, false, false, false, true, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[true, true, true, false, true, true, true, true, true, true, true, true, false, true, true, true, false, false, false, true, true, false, true, false]);
let codeword = BinVector::from_bools(&[true, true, true, false, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
{
let code = GuavaCode24_13;
let randvec = BinVector::from_bools(&[true, false, true, false, false, false, true, false, true, false, false, false, true, false, true, true, true, false, true, true, false, false, true, false]);
let codeword = BinVector::from_bools(&[false, true, true, false, false, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, false, false, false, false]);
assert_eq!(code.decode_to_code(&randvec), Ok(codeword));
}
}
#[test]
fn test_generator_representation() {
init();
let generator_matrix = unsafe { GENERATOR_MATRIX.as_ref().unwrap() };
let first_row = generator_matrix.get_window(0, 0, 1, generator_matrix.ncols());
let vector = BinVector::from_bools(&[ true, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, true, false, true, true, true, false, false ]);
assert_eq!(vector, first_row.as_vector());
}
}