forked from tseip/fourinarow
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfourbynine_features.h
670 lines (667 loc) · 29 KB
/
fourbynine_features.h
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
#ifndef FOURBYNINE_FEATURES_H_INCLUDED
#define FOURBYNINE_FEATURES_H_INCLUDED
#include <vector>
#include "ninarow_board.h"
#include "ninarow_heuristic_feature.h"
namespace NInARow {
static const std::vector<std::vector<HeuristicFeature<Board<4, 9, 4>>>>
FourByNineFeatures{
{{0x3ULL, 0xcULL, 2},
{0x600ULL, 0x1800ULL, 2},
{0xc0000ULL, 0x300000ULL, 2},
{0x18000000ULL, 0x60000000ULL, 2},
{0x6ULL, 0x18ULL, 2},
{0xc00ULL, 0x3000ULL, 2},
{0x180000ULL, 0x600000ULL, 2},
{0x30000000ULL, 0xc0000000ULL, 2},
{0xcULL, 0x30ULL, 2},
{0x1800ULL, 0x6000ULL, 2},
{0x300000ULL, 0xc00000ULL, 2},
{0x60000000ULL, 0x180000000ULL, 2},
{0x18ULL, 0x60ULL, 2},
{0x3000ULL, 0xc000ULL, 2},
{0x600000ULL, 0x1800000ULL, 2},
{0xc0000000ULL, 0x300000000ULL, 2},
{0x30ULL, 0xc0ULL, 2},
{0x6000ULL, 0x18000ULL, 2},
{0xc00000ULL, 0x3000000ULL, 2},
{0x180000000ULL, 0x600000000ULL, 2},
{0x60ULL, 0x180ULL, 2},
{0xc000ULL, 0x30000ULL, 2},
{0x1800000ULL, 0x6000000ULL, 2},
{0x300000000ULL, 0xc00000000ULL, 2},
{0xcULL, 0x3ULL, 2},
{0x1800ULL, 0x600ULL, 2},
{0x300000ULL, 0xc0000ULL, 2},
{0x60000000ULL, 0x18000000ULL, 2},
{0x18ULL, 0x6ULL, 2},
{0x3000ULL, 0xc00ULL, 2},
{0x600000ULL, 0x180000ULL, 2},
{0xc0000000ULL, 0x30000000ULL, 2},
{0x30ULL, 0xcULL, 2},
{0x6000ULL, 0x1800ULL, 2},
{0xc00000ULL, 0x300000ULL, 2},
{0x180000000ULL, 0x60000000ULL, 2},
{0x60ULL, 0x18ULL, 2},
{0xc000ULL, 0x3000ULL, 2},
{0x1800000ULL, 0x600000ULL, 2},
{0x300000000ULL, 0xc0000000ULL, 2},
{0xc0ULL, 0x30ULL, 2},
{0x18000ULL, 0x6000ULL, 2},
{0x3000000ULL, 0xc00000ULL, 2},
{0x600000000ULL, 0x180000000ULL, 2},
{0x180ULL, 0x60ULL, 2},
{0x30000ULL, 0xc000ULL, 2},
{0x6000000ULL, 0x1800000ULL, 2},
{0xc00000000ULL, 0x300000000ULL, 2},
{0x6ULL, 0x9ULL, 2},
{0xc00ULL, 0x1200ULL, 2},
{0x180000ULL, 0x240000ULL, 2},
{0x30000000ULL, 0x48000000ULL, 2},
{0xcULL, 0x12ULL, 2},
{0x1800ULL, 0x2400ULL, 2},
{0x300000ULL, 0x480000ULL, 2},
{0x60000000ULL, 0x90000000ULL, 2},
{0x18ULL, 0x24ULL, 2},
{0x3000ULL, 0x4800ULL, 2},
{0x600000ULL, 0x900000ULL, 2},
{0xc0000000ULL, 0x120000000ULL, 2},
{0x30ULL, 0x48ULL, 2},
{0x6000ULL, 0x9000ULL, 2},
{0xc00000ULL, 0x1200000ULL, 2},
{0x180000000ULL, 0x240000000ULL, 2},
{0x60ULL, 0x90ULL, 2},
{0xc000ULL, 0x12000ULL, 2},
{0x1800000ULL, 0x2400000ULL, 2},
{0x300000000ULL, 0x480000000ULL, 2},
{0xc0ULL, 0x120ULL, 2},
{0x18000ULL, 0x24000ULL, 2},
{0x3000000ULL, 0x4800000ULL, 2},
{0x600000000ULL, 0x900000000ULL, 2}},
{{0x5ULL, 0xaULL, 2},
{0xa00ULL, 0x1400ULL, 2},
{0x140000ULL, 0x280000ULL, 2},
{0x28000000ULL, 0x50000000ULL, 2},
{0xaULL, 0x14ULL, 2},
{0x1400ULL, 0x2800ULL, 2},
{0x280000ULL, 0x500000ULL, 2},
{0x50000000ULL, 0xa0000000ULL, 2},
{0x14ULL, 0x28ULL, 2},
{0x2800ULL, 0x5000ULL, 2},
{0x500000ULL, 0xa00000ULL, 2},
{0xa0000000ULL, 0x140000000ULL, 2},
{0x28ULL, 0x50ULL, 2},
{0x5000ULL, 0xa000ULL, 2},
{0xa00000ULL, 0x1400000ULL, 2},
{0x140000000ULL, 0x280000000ULL, 2},
{0x50ULL, 0xa0ULL, 2},
{0xa000ULL, 0x14000ULL, 2},
{0x1400000ULL, 0x2800000ULL, 2},
{0x280000000ULL, 0x500000000ULL, 2},
{0xa0ULL, 0x140ULL, 2},
{0x14000ULL, 0x28000ULL, 2},
{0x2800000ULL, 0x5000000ULL, 2},
{0x500000000ULL, 0xa00000000ULL, 2},
{0xaULL, 0x5ULL, 2},
{0x1400ULL, 0xa00ULL, 2},
{0x280000ULL, 0x140000ULL, 2},
{0x50000000ULL, 0x28000000ULL, 2},
{0x14ULL, 0xaULL, 2},
{0x2800ULL, 0x1400ULL, 2},
{0x500000ULL, 0x280000ULL, 2},
{0xa0000000ULL, 0x50000000ULL, 2},
{0x28ULL, 0x14ULL, 2},
{0x5000ULL, 0x2800ULL, 2},
{0xa00000ULL, 0x500000ULL, 2},
{0x140000000ULL, 0xa0000000ULL, 2},
{0x50ULL, 0x28ULL, 2},
{0xa000ULL, 0x5000ULL, 2},
{0x1400000ULL, 0xa00000ULL, 2},
{0x280000000ULL, 0x140000000ULL, 2},
{0xa0ULL, 0x50ULL, 2},
{0x14000ULL, 0xa000ULL, 2},
{0x2800000ULL, 0x1400000ULL, 2},
{0x500000000ULL, 0x280000000ULL, 2},
{0x140ULL, 0xa0ULL, 2},
{0x28000ULL, 0x14000ULL, 2},
{0x5000000ULL, 0x2800000ULL, 2},
{0xa00000000ULL, 0x500000000ULL, 2},
{0x9ULL, 0x6ULL, 2},
{0x1200ULL, 0xc00ULL, 2},
{0x240000ULL, 0x180000ULL, 2},
{0x48000000ULL, 0x30000000ULL, 2},
{0x12ULL, 0xcULL, 2},
{0x2400ULL, 0x1800ULL, 2},
{0x480000ULL, 0x300000ULL, 2},
{0x90000000ULL, 0x60000000ULL, 2},
{0x24ULL, 0x18ULL, 2},
{0x4800ULL, 0x3000ULL, 2},
{0x900000ULL, 0x600000ULL, 2},
{0x120000000ULL, 0xc0000000ULL, 2},
{0x48ULL, 0x30ULL, 2},
{0x9000ULL, 0x6000ULL, 2},
{0x1200000ULL, 0xc00000ULL, 2},
{0x240000000ULL, 0x180000000ULL, 2},
{0x90ULL, 0x60ULL, 2},
{0x12000ULL, 0xc000ULL, 2},
{0x2400000ULL, 0x1800000ULL, 2},
{0x480000000ULL, 0x300000000ULL, 2},
{0x120ULL, 0xc0ULL, 2},
{0x24000ULL, 0x18000ULL, 2},
{0x4800000ULL, 0x3000000ULL, 2},
{0x900000000ULL, 0x600000000ULL, 2}},
{{0xeULL, 0x1ULL, 1},
{0x1c00ULL, 0x200ULL, 1},
{0x380000ULL, 0x40000ULL, 1},
{0x70000000ULL, 0x8000000ULL, 1},
{0x1cULL, 0x2ULL, 1},
{0x3800ULL, 0x400ULL, 1},
{0x700000ULL, 0x80000ULL, 1},
{0xe0000000ULL, 0x10000000ULL, 1},
{0x38ULL, 0x4ULL, 1},
{0x7000ULL, 0x800ULL, 1},
{0xe00000ULL, 0x100000ULL, 1},
{0x1c0000000ULL, 0x20000000ULL, 1},
{0x70ULL, 0x8ULL, 1},
{0xe000ULL, 0x1000ULL, 1},
{0x1c00000ULL, 0x200000ULL, 1},
{0x380000000ULL, 0x40000000ULL, 1},
{0xe0ULL, 0x10ULL, 1},
{0x1c000ULL, 0x2000ULL, 1},
{0x3800000ULL, 0x400000ULL, 1},
{0x700000000ULL, 0x80000000ULL, 1},
{0x1c0ULL, 0x20ULL, 1},
{0x38000ULL, 0x4000ULL, 1},
{0x7000000ULL, 0x800000ULL, 1},
{0xe00000000ULL, 0x100000000ULL, 1},
{0xdULL, 0x2ULL, 1},
{0x1a00ULL, 0x400ULL, 1},
{0x340000ULL, 0x80000ULL, 1},
{0x68000000ULL, 0x10000000ULL, 1},
{0x1aULL, 0x4ULL, 1},
{0x3400ULL, 0x800ULL, 1},
{0x680000ULL, 0x100000ULL, 1},
{0xd0000000ULL, 0x20000000ULL, 1},
{0x34ULL, 0x8ULL, 1},
{0x6800ULL, 0x1000ULL, 1},
{0xd00000ULL, 0x200000ULL, 1},
{0x1a0000000ULL, 0x40000000ULL, 1},
{0x68ULL, 0x10ULL, 1},
{0xd000ULL, 0x2000ULL, 1},
{0x1a00000ULL, 0x400000ULL, 1},
{0x340000000ULL, 0x80000000ULL, 1},
{0xd0ULL, 0x20ULL, 1},
{0x1a000ULL, 0x4000ULL, 1},
{0x3400000ULL, 0x800000ULL, 1},
{0x680000000ULL, 0x100000000ULL, 1},
{0x1a0ULL, 0x40ULL, 1},
{0x34000ULL, 0x8000ULL, 1},
{0x6800000ULL, 0x1000000ULL, 1},
{0xd00000000ULL, 0x200000000ULL, 1},
{0xbULL, 0x4ULL, 1},
{0x1600ULL, 0x800ULL, 1},
{0x2c0000ULL, 0x100000ULL, 1},
{0x58000000ULL, 0x20000000ULL, 1},
{0x16ULL, 0x8ULL, 1},
{0x2c00ULL, 0x1000ULL, 1},
{0x580000ULL, 0x200000ULL, 1},
{0xb0000000ULL, 0x40000000ULL, 1},
{0x2cULL, 0x10ULL, 1},
{0x5800ULL, 0x2000ULL, 1},
{0xb00000ULL, 0x400000ULL, 1},
{0x160000000ULL, 0x80000000ULL, 1},
{0x58ULL, 0x20ULL, 1},
{0xb000ULL, 0x4000ULL, 1},
{0x1600000ULL, 0x800000ULL, 1},
{0x2c0000000ULL, 0x100000000ULL, 1},
{0xb0ULL, 0x40ULL, 1},
{0x16000ULL, 0x8000ULL, 1},
{0x2c00000ULL, 0x1000000ULL, 1},
{0x580000000ULL, 0x200000000ULL, 1},
{0x160ULL, 0x80ULL, 1},
{0x2c000ULL, 0x10000ULL, 1},
{0x5800000ULL, 0x2000000ULL, 1},
{0xb00000000ULL, 0x400000000ULL, 1},
{0x7ULL, 0x8ULL, 1},
{0xe00ULL, 0x1000ULL, 1},
{0x1c0000ULL, 0x200000ULL, 1},
{0x38000000ULL, 0x40000000ULL, 1},
{0xeULL, 0x10ULL, 1},
{0x1c00ULL, 0x2000ULL, 1},
{0x380000ULL, 0x400000ULL, 1},
{0x70000000ULL, 0x80000000ULL, 1},
{0x1cULL, 0x20ULL, 1},
{0x3800ULL, 0x4000ULL, 1},
{0x700000ULL, 0x800000ULL, 1},
{0xe0000000ULL, 0x100000000ULL, 1},
{0x38ULL, 0x40ULL, 1},
{0x7000ULL, 0x8000ULL, 1},
{0xe00000ULL, 0x1000000ULL, 1},
{0x1c0000000ULL, 0x200000000ULL, 1},
{0x70ULL, 0x80ULL, 1},
{0xe000ULL, 0x10000ULL, 1},
{0x1c00000ULL, 0x2000000ULL, 1},
{0x380000000ULL, 0x400000000ULL, 1},
{0xe0ULL, 0x100ULL, 1},
{0x1c000ULL, 0x20000ULL, 1},
{0x3800000ULL, 0x4000000ULL, 1},
{0x700000000ULL, 0x800000000ULL, 1}},
{{0xfULL, 0x0ULL, 0}, {0x1e00ULL, 0x0ULL, 0},
{0x3c0000ULL, 0x0ULL, 0}, {0x78000000ULL, 0x0ULL, 0},
{0x1eULL, 0x0ULL, 0}, {0x3c00ULL, 0x0ULL, 0},
{0x780000ULL, 0x0ULL, 0}, {0xf0000000ULL, 0x0ULL, 0},
{0x3cULL, 0x0ULL, 0}, {0x7800ULL, 0x0ULL, 0},
{0xf00000ULL, 0x0ULL, 0}, {0x1e0000000ULL, 0x0ULL, 0},
{0x78ULL, 0x0ULL, 0}, {0xf000ULL, 0x0ULL, 0},
{0x1e00000ULL, 0x0ULL, 0}, {0x3c0000000ULL, 0x0ULL, 0},
{0xf0ULL, 0x0ULL, 0}, {0x1e000ULL, 0x0ULL, 0},
{0x3c00000ULL, 0x0ULL, 0}, {0x780000000ULL, 0x0ULL, 0},
{0x1e0ULL, 0x0ULL, 0}, {0x3c000ULL, 0x0ULL, 0},
{0x7800000ULL, 0x0ULL, 0}, {0xf00000000ULL, 0x0ULL, 0}},
{{0x201ULL, 0x8040000ULL, 2}, {0x402ULL, 0x10080000ULL, 2},
{0x804ULL, 0x20100000ULL, 2}, {0x1008ULL, 0x40200000ULL, 2},
{0x2010ULL, 0x80400000ULL, 2}, {0x4020ULL, 0x100800000ULL, 2},
{0x8040ULL, 0x201000000ULL, 2}, {0x10080ULL, 0x402000000ULL, 2},
{0x20100ULL, 0x804000000ULL, 2}, {0x40200ULL, 0x8000001ULL, 2},
{0x80400ULL, 0x10000002ULL, 2}, {0x100800ULL, 0x20000004ULL, 2},
{0x201000ULL, 0x40000008ULL, 2}, {0x402000ULL, 0x80000010ULL, 2},
{0x804000ULL, 0x100000020ULL, 2}, {0x1008000ULL, 0x200000040ULL, 2},
{0x2010000ULL, 0x400000080ULL, 2}, {0x4020000ULL, 0x800000100ULL, 2},
{0x8040000ULL, 0x201ULL, 2}, {0x10080000ULL, 0x402ULL, 2},
{0x20100000ULL, 0x804ULL, 2}, {0x40200000ULL, 0x1008ULL, 2},
{0x80400000ULL, 0x2010ULL, 2}, {0x100800000ULL, 0x4020ULL, 2},
{0x201000000ULL, 0x8040ULL, 2}, {0x402000000ULL, 0x10080ULL, 2},
{0x804000000ULL, 0x20100ULL, 2}},
{{0x40001ULL, 0x8000200ULL, 2}, {0x80002ULL, 0x10000400ULL, 2},
{0x100004ULL, 0x20000800ULL, 2}, {0x200008ULL, 0x40001000ULL, 2},
{0x400010ULL, 0x80002000ULL, 2}, {0x800020ULL, 0x100004000ULL, 2},
{0x1000040ULL, 0x200008000ULL, 2}, {0x2000080ULL, 0x400010000ULL, 2},
{0x4000100ULL, 0x800020000ULL, 2}, {0x8000200ULL, 0x40001ULL, 2},
{0x10000400ULL, 0x80002ULL, 2}, {0x20000800ULL, 0x100004ULL, 2},
{0x40001000ULL, 0x200008ULL, 2}, {0x80002000ULL, 0x400010ULL, 2},
{0x100004000ULL, 0x800020ULL, 2}, {0x200008000ULL, 0x1000040ULL, 2},
{0x400010000ULL, 0x2000080ULL, 2}, {0x800020000ULL, 0x4000100ULL, 2},
{0x8000001ULL, 0x40200ULL, 2}, {0x10000002ULL, 0x80400ULL, 2},
{0x20000004ULL, 0x100800ULL, 2}, {0x40000008ULL, 0x201000ULL, 2},
{0x80000010ULL, 0x402000ULL, 2}, {0x100000020ULL, 0x804000ULL, 2},
{0x200000040ULL, 0x1008000ULL, 2}, {0x400000080ULL, 0x2010000ULL, 2},
{0x800000100ULL, 0x4020000ULL, 2}},
{{0x40201ULL, 0x8000000ULL, 1}, {0x80402ULL, 0x10000000ULL, 1},
{0x100804ULL, 0x20000000ULL, 1}, {0x201008ULL, 0x40000000ULL, 1},
{0x402010ULL, 0x80000000ULL, 1}, {0x804020ULL, 0x100000000ULL, 1},
{0x1008040ULL, 0x200000000ULL, 1}, {0x2010080ULL, 0x400000000ULL, 1},
{0x4020100ULL, 0x800000000ULL, 1}, {0x8000201ULL, 0x40000ULL, 1},
{0x10000402ULL, 0x80000ULL, 1}, {0x20000804ULL, 0x100000ULL, 1},
{0x40001008ULL, 0x200000ULL, 1}, {0x80002010ULL, 0x400000ULL, 1},
{0x100004020ULL, 0x800000ULL, 1}, {0x200008040ULL, 0x1000000ULL, 1},
{0x400010080ULL, 0x2000000ULL, 1}, {0x800020100ULL, 0x4000000ULL, 1},
{0x8040001ULL, 0x200ULL, 1}, {0x10080002ULL, 0x400ULL, 1},
{0x20100004ULL, 0x800ULL, 1}, {0x40200008ULL, 0x1000ULL, 1},
{0x80400010ULL, 0x2000ULL, 1}, {0x100800020ULL, 0x4000ULL, 1},
{0x201000040ULL, 0x8000ULL, 1}, {0x402000080ULL, 0x10000ULL, 1},
{0x804000100ULL, 0x20000ULL, 1}, {0x8040200ULL, 0x1ULL, 1},
{0x10080400ULL, 0x2ULL, 1}, {0x20100800ULL, 0x4ULL, 1},
{0x40201000ULL, 0x8ULL, 1}, {0x80402000ULL, 0x10ULL, 1},
{0x100804000ULL, 0x20ULL, 1}, {0x201008000ULL, 0x40ULL, 1},
{0x402010000ULL, 0x80ULL, 1}, {0x804020000ULL, 0x100ULL, 1}},
{{0x8040201ULL, 0x0ULL, 0},
{0x10080402ULL, 0x0ULL, 0},
{0x20100804ULL, 0x0ULL, 0},
{0x40201008ULL, 0x0ULL, 0},
{0x80402010ULL, 0x0ULL, 0},
{0x100804020ULL, 0x0ULL, 0},
{0x201008040ULL, 0x0ULL, 0},
{0x402010080ULL, 0x0ULL, 0},
{0x804020100ULL, 0x0ULL, 0}},
{{0x401ULL, 0x40100000ULL, 2},
{0x802ULL, 0x80200000ULL, 2},
{0x1004ULL, 0x100400000ULL, 2},
{0x2008ULL, 0x200800000ULL, 2},
{0x4010ULL, 0x401000000ULL, 2},
{0x8020ULL, 0x802000000ULL, 2},
{0x40100000ULL, 0x401ULL, 2},
{0x80200000ULL, 0x802ULL, 2},
{0x100400000ULL, 0x1004ULL, 2},
{0x200800000ULL, 0x2008ULL, 2},
{0x401000000ULL, 0x4010ULL, 2},
{0x802000000ULL, 0x8020ULL, 2},
{0x100400ULL, 0x40000001ULL, 2},
{0x200800ULL, 0x80000002ULL, 2},
{0x401000ULL, 0x100000004ULL, 2},
{0x802000ULL, 0x200000008ULL, 2},
{0x1004000ULL, 0x400000010ULL, 2},
{0x2008000ULL, 0x800000020ULL, 2}},
{{0x40000400ULL, 0x100001ULL, 2},
{0x80000800ULL, 0x200002ULL, 2},
{0x100001000ULL, 0x400004ULL, 2},
{0x200002000ULL, 0x800008ULL, 2},
{0x400004000ULL, 0x1000010ULL, 2},
{0x800008000ULL, 0x2000020ULL, 2},
{0x100001ULL, 0x40000400ULL, 2},
{0x200002ULL, 0x80000800ULL, 2},
{0x400004ULL, 0x100001000ULL, 2},
{0x800008ULL, 0x200002000ULL, 2},
{0x1000010ULL, 0x400004000ULL, 2},
{0x2000020ULL, 0x800008000ULL, 2},
{0x40000001ULL, 0x100400ULL, 2},
{0x80000002ULL, 0x200800ULL, 2},
{0x100000004ULL, 0x401000ULL, 2},
{0x200000008ULL, 0x802000ULL, 2},
{0x400000010ULL, 0x1004000ULL, 2},
{0x800000020ULL, 0x2008000ULL, 2}},
{{0x100401ULL, 0x40000000ULL, 1}, {0x200802ULL, 0x80000000ULL, 1},
{0x401004ULL, 0x100000000ULL, 1}, {0x802008ULL, 0x200000000ULL, 1},
{0x1004010ULL, 0x400000000ULL, 1}, {0x2008020ULL, 0x800000000ULL, 1},
{0x40000401ULL, 0x100000ULL, 1}, {0x80000802ULL, 0x200000ULL, 1},
{0x100001004ULL, 0x400000ULL, 1}, {0x200002008ULL, 0x800000ULL, 1},
{0x400004010ULL, 0x1000000ULL, 1}, {0x800008020ULL, 0x2000000ULL, 1},
{0x40100001ULL, 0x400ULL, 1}, {0x80200002ULL, 0x800ULL, 1},
{0x100400004ULL, 0x1000ULL, 1}, {0x200800008ULL, 0x2000ULL, 1},
{0x401000010ULL, 0x4000ULL, 1}, {0x802000020ULL, 0x8000ULL, 1},
{0x40100400ULL, 0x1ULL, 1}, {0x80200800ULL, 0x2ULL, 1},
{0x100401000ULL, 0x4ULL, 1}, {0x200802000ULL, 0x8ULL, 1},
{0x401004000ULL, 0x10ULL, 1}, {0x802008000ULL, 0x20ULL, 1}},
{{0x40100401ULL, 0x0ULL, 0},
{0x80200802ULL, 0x0ULL, 0},
{0x100401004ULL, 0x0ULL, 0},
{0x200802008ULL, 0x0ULL, 0},
{0x401004010ULL, 0x0ULL, 0},
{0x802008020ULL, 0x0ULL, 0}},
{{0x8080000ULL, 0x808ULL, 2},
{0x10100000ULL, 0x1010ULL, 2},
{0x20200000ULL, 0x2020ULL, 2},
{0x40400000ULL, 0x4040ULL, 2},
{0x80800000ULL, 0x8080ULL, 2},
{0x101000000ULL, 0x10100ULL, 2},
{0x80800ULL, 0x8000008ULL, 2},
{0x101000ULL, 0x10000010ULL, 2},
{0x202000ULL, 0x20000020ULL, 2},
{0x404000ULL, 0x40000040ULL, 2},
{0x808000ULL, 0x80000080ULL, 2},
{0x1010000ULL, 0x100000100ULL, 2},
{0x808ULL, 0x8080000ULL, 2},
{0x1010ULL, 0x10100000ULL, 2},
{0x2020ULL, 0x20200000ULL, 2},
{0x4040ULL, 0x40400000ULL, 2},
{0x8080ULL, 0x80800000ULL, 2},
{0x10100ULL, 0x101000000ULL, 2}},
{{0x8000800ULL, 0x80008ULL, 2},
{0x10001000ULL, 0x100010ULL, 2},
{0x20002000ULL, 0x200020ULL, 2},
{0x40004000ULL, 0x400040ULL, 2},
{0x80008000ULL, 0x800080ULL, 2},
{0x100010000ULL, 0x1000100ULL, 2},
{0x80008ULL, 0x8000800ULL, 2},
{0x100010ULL, 0x10001000ULL, 2},
{0x200020ULL, 0x20002000ULL, 2},
{0x400040ULL, 0x40004000ULL, 2},
{0x800080ULL, 0x80008000ULL, 2},
{0x1000100ULL, 0x100010000ULL, 2},
{0x8000008ULL, 0x80800ULL, 2},
{0x10000010ULL, 0x101000ULL, 2},
{0x20000020ULL, 0x202000ULL, 2},
{0x40000040ULL, 0x404000ULL, 2},
{0x80000080ULL, 0x808000ULL, 2},
{0x100000100ULL, 0x1010000ULL, 2}},
{{0x80808ULL, 0x8000000ULL, 1}, {0x101010ULL, 0x10000000ULL, 1},
{0x202020ULL, 0x20000000ULL, 1}, {0x404040ULL, 0x40000000ULL, 1},
{0x808080ULL, 0x80000000ULL, 1}, {0x1010100ULL, 0x100000000ULL, 1},
{0x8000808ULL, 0x80000ULL, 1}, {0x10001010ULL, 0x100000ULL, 1},
{0x20002020ULL, 0x200000ULL, 1}, {0x40004040ULL, 0x400000ULL, 1},
{0x80008080ULL, 0x800000ULL, 1}, {0x100010100ULL, 0x1000000ULL, 1},
{0x8080008ULL, 0x800ULL, 1}, {0x10100010ULL, 0x1000ULL, 1},
{0x20200020ULL, 0x2000ULL, 1}, {0x40400040ULL, 0x4000ULL, 1},
{0x80800080ULL, 0x8000ULL, 1}, {0x101000100ULL, 0x10000ULL, 1},
{0x8080800ULL, 0x8ULL, 1}, {0x10101000ULL, 0x10ULL, 1},
{0x20202000ULL, 0x20ULL, 1}, {0x40404000ULL, 0x40ULL, 1},
{0x80808000ULL, 0x80ULL, 1}, {0x101010000ULL, 0x100ULL, 1}},
{{0x8080808ULL, 0x0ULL, 0},
{0x10101010ULL, 0x0ULL, 0},
{0x20202020ULL, 0x0ULL, 0},
{0x40404040ULL, 0x0ULL, 0},
{0x80808080ULL, 0x0ULL, 0},
{0x101010100ULL, 0x0ULL, 0}},
{{0xc0400ULL, 0x10100006ULL, 3},
{0x18080000ULL, 0x20000c00ULL, 3},
{0xc04ULL, 0x141200ULL, 3},
{0x180800ULL, 0x2824000cULL, 3},
{0x30100000ULL, 0x48001800ULL, 3},
{0x1808ULL, 0x282400ULL, 3},
{0x301000ULL, 0x50480018ULL, 3},
{0x60200000ULL, 0x90003000ULL, 3},
{0x3010ULL, 0x504800ULL, 3},
{0x602000ULL, 0xa0900030ULL, 3},
{0xc0400000ULL, 0x120006000ULL, 3},
{0x6020ULL, 0xa09000ULL, 3},
{0xc04000ULL, 0x141200060ULL, 3},
{0x180800000ULL, 0x24000c000ULL, 3},
{0xc040ULL, 0x1412000ULL, 3},
{0x1808000ULL, 0x2824000c0ULL, 3},
{0x301000000ULL, 0x480018000ULL, 3},
{0x18080ULL, 0x2824000ULL, 3},
{0x3010000ULL, 0x504800180ULL, 3},
{0x602000000ULL, 0x900030000ULL, 3},
{0x30100ULL, 0x5008000ULL, 3},
{0x6020000ULL, 0xa01000100ULL, 3},
{0x601ULL, 0x140800ULL, 3},
{0xc0200ULL, 0x28100001ULL, 3},
{0xc02ULL, 0x281200ULL, 3},
{0x180400ULL, 0x50240003ULL, 3},
{0x30080000ULL, 0x48000600ULL, 3},
{0x1804ULL, 0x502400ULL, 3},
{0x300800ULL, 0xa0480006ULL, 3},
{0x60100000ULL, 0x90000c00ULL, 3},
{0x3008ULL, 0xa04800ULL, 3},
{0x601000ULL, 0x14090000cULL, 3},
{0xc0200000ULL, 0x120001800ULL, 3},
{0x6010ULL, 0x1409000ULL, 3},
{0xc02000ULL, 0x281200018ULL, 3},
{0x180400000ULL, 0x240003000ULL, 3},
{0xc020ULL, 0x2812000ULL, 3},
{0x1804000ULL, 0x502400030ULL, 3},
{0x300800000ULL, 0x480006000ULL, 3},
{0x18040ULL, 0x5024000ULL, 3},
{0x3008000ULL, 0xa04800060ULL, 3},
{0x601000000ULL, 0x90000c000ULL, 3},
{0x6010000ULL, 0x4010000c0ULL, 3},
{0xc02000000ULL, 0x200018000ULL, 3},
{0x40600ULL, 0x8000805ULL, 3},
{0x80c0000ULL, 0x100a00ULL, 3},
{0x406ULL, 0xc0009ULL, 3},
{0x80c00ULL, 0x1800120aULL, 3},
{0x10180000ULL, 0x241400ULL, 3},
{0x80cULL, 0x180012ULL, 3},
{0x101800ULL, 0x30002414ULL, 3},
{0x20300000ULL, 0x482800ULL, 3},
{0x1018ULL, 0x300024ULL, 3},
{0x203000ULL, 0x60004828ULL, 3},
{0x40600000ULL, 0x905000ULL, 3},
{0x2030ULL, 0x600048ULL, 3},
{0x406000ULL, 0xc0009050ULL, 3},
{0x80c00000ULL, 0x120a000ULL, 3},
{0x4060ULL, 0xc00090ULL, 3},
{0x80c000ULL, 0x1800120a0ULL, 3},
{0x101800000ULL, 0x2414000ULL, 3},
{0x80c0ULL, 0x1800120ULL, 3},
{0x1018000ULL, 0x300024140ULL, 3},
{0x203000000ULL, 0x4828000ULL, 3},
{0x10180ULL, 0x3000040ULL, 3},
{0x2030000ULL, 0x600008080ULL, 3},
{0x403ULL, 0x180004ULL, 3},
{0x80600ULL, 0x30000802ULL, 3},
{0x806ULL, 0x300009ULL, 3},
{0x100c00ULL, 0x60001205ULL, 3},
{0x20180000ULL, 0x240a00ULL, 3},
{0x100cULL, 0x600012ULL, 3},
{0x201800ULL, 0xc000240aULL, 3},
{0x40300000ULL, 0x481400ULL, 3},
{0x2018ULL, 0xc00024ULL, 3},
{0x403000ULL, 0x180004814ULL, 3},
{0x80600000ULL, 0x902800ULL, 3},
{0x4030ULL, 0x1800048ULL, 3},
{0x806000ULL, 0x300009028ULL, 3},
{0x100c00000ULL, 0x1205000ULL, 3},
{0x8060ULL, 0x3000090ULL, 3},
{0x100c000ULL, 0x600012050ULL, 3},
{0x201800000ULL, 0x240a000ULL, 3},
{0x100c0ULL, 0x6000120ULL, 3},
{0x2018000ULL, 0xc000240a0ULL, 3},
{0x403000000ULL, 0x4814000ULL, 3},
{0x4030000ULL, 0x800008140ULL, 3},
{0x806000000ULL, 0x1028000ULL, 3},
{0x40401ULL, 0x180206ULL, 3},
{0x8080200ULL, 0x30040c00ULL, 3},
{0x80802ULL, 0x30060cULL, 3},
{0x10100400ULL, 0x600c1800ULL, 3},
{0x101004ULL, 0x600c18ULL, 3},
{0x20200800ULL, 0xc0183000ULL, 3},
{0x202008ULL, 0xc01830ULL, 3},
{0x40401000ULL, 0x180306000ULL, 3},
{0x404010ULL, 0x1803060ULL, 3},
{0x80802000ULL, 0x30060c000ULL, 3},
{0x808020ULL, 0x30060c0ULL, 3},
{0x101004000ULL, 0x600c18000ULL, 3},
{0x1010040ULL, 0x600c180ULL, 3},
{0x202008000ULL, 0xc01830000ULL, 3},
{0x2020080ULL, 0x4018100ULL, 3},
{0x404010000ULL, 0x803020000ULL, 3},
{0x405ULL, 0x140a02ULL, 3},
{0x80a00ULL, 0x28140402ULL, 3},
{0x10140000ULL, 0x28080400ULL, 3},
{0x80aULL, 0x281404ULL, 3},
{0x101400ULL, 0x50280804ULL, 3},
{0x20280000ULL, 0x50100800ULL, 3},
{0x1014ULL, 0x502808ULL, 3},
{0x202800ULL, 0xa0501008ULL, 3},
{0x40500000ULL, 0xa0201000ULL, 3},
{0x2028ULL, 0xa05010ULL, 3},
{0x405000ULL, 0x140a02010ULL, 3},
{0x80a00000ULL, 0x140402000ULL, 3},
{0x4050ULL, 0x140a020ULL, 3},
{0x80a000ULL, 0x281404020ULL, 3},
{0x101400000ULL, 0x280804000ULL, 3},
{0x80a0ULL, 0x2814040ULL, 3},
{0x1014000ULL, 0x502808040ULL, 3},
{0x202800000ULL, 0x501008000ULL, 3},
{0x10140ULL, 0x5028080ULL, 3},
{0x2028000ULL, 0xa05010080ULL, 3},
{0x405000000ULL, 0xa02010000ULL, 3},
{0xa02ULL, 0x80405ULL, 3},
{0x140400ULL, 0x10080a05ULL, 3},
{0x28080000ULL, 0x10140a00ULL, 3},
{0x1404ULL, 0x10080aULL, 3},
{0x280800ULL, 0x2010140aULL, 3},
{0x50100000ULL, 0x20281400ULL, 3},
{0x2808ULL, 0x201014ULL, 3},
{0x501000ULL, 0x40202814ULL, 3},
{0xa0200000ULL, 0x40502800ULL, 3},
{0x5010ULL, 0x402028ULL, 3},
{0xa02000ULL, 0x80405028ULL, 3},
{0x140400000ULL, 0x80a05000ULL, 3},
{0xa020ULL, 0x804050ULL, 3},
{0x1404000ULL, 0x10080a050ULL, 3},
{0x280800000ULL, 0x10140a000ULL, 3},
{0x14040ULL, 0x10080a0ULL, 3},
{0x2808000ULL, 0x2010140a0ULL, 3},
{0x501000000ULL, 0x202814000ULL, 3},
{0x28080ULL, 0x2010140ULL, 3},
{0x5010000ULL, 0x402028140ULL, 3},
{0xa02000000ULL, 0x405028000ULL, 3},
{0x80202ULL, 0x40c01ULL, 3},
{0x10040400ULL, 0x8180200ULL, 3},
{0x100404ULL, 0xc1803ULL, 3},
{0x20080800ULL, 0x18300600ULL, 3},
{0x200808ULL, 0x183006ULL, 3},
{0x40101000ULL, 0x30600c00ULL, 3},
{0x401010ULL, 0x30600cULL, 3},
{0x80202000ULL, 0x60c01800ULL, 3},
{0x802020ULL, 0x60c018ULL, 3},
{0x100404000ULL, 0xc1803000ULL, 3},
{0x1004040ULL, 0xc18030ULL, 3},
{0x200808000ULL, 0x183006000ULL, 3},
{0x2008080ULL, 0x1830060ULL, 3},
{0x401010000ULL, 0x30600c000ULL, 3},
{0x4010100ULL, 0x30200c0ULL, 3},
{0x802020000ULL, 0x604018000ULL, 3},
{0x206ULL, 0xc01ULL, 3},
{0x40c00ULL, 0x180204ULL, 3},
{0x8180000ULL, 0x30040800ULL, 3},
{0x40cULL, 0x41803ULL, 3},
{0x81800ULL, 0x8300608ULL, 3},
{0x10300000ULL, 0x600c1000ULL, 3},
{0x818ULL, 0x83006ULL, 3},
{0x103000ULL, 0x10600c10ULL, 3},
{0x20600000ULL, 0xc0182000ULL, 3},
{0x1030ULL, 0x10600cULL, 3},
{0x206000ULL, 0x20c01820ULL, 3},
{0x40c00000ULL, 0x180304000ULL, 3},
{0x2060ULL, 0x20c018ULL, 3},
{0x40c000ULL, 0x41803040ULL, 3},
{0x81800000ULL, 0x300608000ULL, 3},
{0x40c0ULL, 0x418030ULL, 3},
{0x818000ULL, 0x83006080ULL, 3},
{0x103000000ULL, 0x600c10000ULL, 3},
{0x8180ULL, 0x830060ULL, 3},
{0x1030000ULL, 0x10600c100ULL, 3},
{0x206000000ULL, 0xc01820000ULL, 3},
{0x40202ULL, 0x80401ULL, 3},
{0x8040400ULL, 0x10080205ULL, 3},
{0x80404ULL, 0x140802ULL, 3},
{0x10080800ULL, 0x2810040aULL, 3},
{0x100808ULL, 0x281004ULL, 3},
{0x20101000ULL, 0x50200814ULL, 3},
{0x201010ULL, 0x502008ULL, 3},
{0x40202000ULL, 0xa0401028ULL, 3},
{0x402020ULL, 0xa04010ULL, 3},
{0x80404000ULL, 0x140802050ULL, 3},
{0x804040ULL, 0x1408020ULL, 3},
{0x100808000ULL, 0x2810040a0ULL, 3},
{0x1008080ULL, 0x2810040ULL, 3},
{0x201010000ULL, 0x502008140ULL, 3},
{0x2010100ULL, 0x5020080ULL, 3},
{0x402020000ULL, 0xa04010080ULL, 3},
{0x80201ULL, 0x28040402ULL, 3},
{0x10040200ULL, 0x8080400ULL, 3},
{0x100402ULL, 0x50080805ULL, 3},
{0x20080400ULL, 0x10100a00ULL, 3},
{0x200804ULL, 0xa010100aULL, 3},
{0x40100800ULL, 0x20201400ULL, 3},
{0x401008ULL, 0x140202014ULL, 3},
{0x80201000ULL, 0x40402800ULL, 3},
{0x802010ULL, 0x280404028ULL, 3},
{0x100402000ULL, 0x80805000ULL, 3},
{0x1004020ULL, 0x500808050ULL, 3},
{0x200804000ULL, 0x10100a000ULL, 3},
{0x2008040ULL, 0xa010100a0ULL, 3},
{0x401008000ULL, 0x202014000ULL, 3},
{0x4010080ULL, 0x402020140ULL, 3},
{0x802010000ULL, 0x404028000ULL, 3},
{0x803ULL, 0x20060cULL, 3},
{0x100600ULL, 0x400c1801ULL, 3},
{0x200c0000ULL, 0x18300200ULL, 3},
{0x1006ULL, 0x400c18ULL, 3},
{0x200c00ULL, 0x80183002ULL, 3},
{0x40180000ULL, 0x30600400ULL, 3},
{0x200cULL, 0x801830ULL, 3},
{0x401800ULL, 0x100306004ULL, 3},
{0x80300000ULL, 0x60c00800ULL, 3},
{0x4018ULL, 0x1003060ULL, 3},
{0x803000ULL, 0x20060c008ULL, 3},
{0x100600000ULL, 0xc1801000ULL, 3},
{0x8030ULL, 0x20060c0ULL, 3},
{0x1006000ULL, 0x400c18010ULL, 3},
{0x200c00000ULL, 0x183002000ULL, 3},
{0x10060ULL, 0x400c180ULL, 3},
{0x200c000ULL, 0x801830020ULL, 3},
{0x401800000ULL, 0x306004000ULL, 3},
{0x200c0ULL, 0x18100ULL, 3},
{0x4018000ULL, 0x3020040ULL, 3},
{0x803000000ULL, 0x604008000ULL, 3}}};
static const std::vector<double> DefaultFourByNineParameters = {
10000.0, 2.0, 0.02, 0.05, 1, 1, 0.8, 1.0, 0.4, 3.5, 5.0, 1.0,
0.4, 3.5, 5.0, 1.0, 0.4, 3.5, 5.0, 1.0, 0.4, 3.5, 5.0, 0,
1.2, 0.48, 4.2, 6.0, 1.2, 0.48, 4.2, 6.0, 1.2, 0.48, 4.2, 6.0,
1.2, 0.48, 4.2, 6.0, 0, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2};
} // namespace NInARow
#endif // FOURBYNINE_FEATURES_H_INCLUDED