-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdata.h
executable file
·222 lines (197 loc) · 59.8 KB
/
data.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
#pragma once
#include "engine.h"
#include <iostream>
using namespace std;
const int StartPosition[ 64 ] =
{
BR, BN, BB, BQ, BK, BB, BN, BR,
BP, BP, BP, BP, BP, BP, BP, BP,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
WP, WP, WP, WP, WP, WP, WP, WP,
WR, WN, WB, WQ, WK, WB, WN, WR
};
//this contains random numbers used to generate Position hashes
const bitboard PieceSquareHashes[ 2 ][ 6 ][ 64 ] =
{
{
{0x8fbaea75e979e45,0x255c3f7209def7b7,0x366fb5fc307fe97f,0x77f55d2a153add8f,0x766e7c6e76367df2,0x4bec6ae12c7effe7,0xf7efbf6421f7e02,0x255ffdad5bbe7757,0x16edf6536dffb7dd,0x2ebdc32e6b667d8d,0x16bf69a50f198ae5,0x6739e9cb70bcffdb,0x47ff574d22db7f60,0x5c7d3a3352cf5f03,0x61ce2f03335f4b5d,0xeaef513297f5f41,0x3bbe7f380cdfdfe9,0x5c7cdd1427cbf799,0x393e77ad486f4972,0xe7f5f187a9fdf62,0x3e35775438fd1d7b,0x657f7eb448fe3d13,0x2796ff6609fdff80,0x3bea2bf041fccf4c,0x67fffc417767d2b,0x258e7b3d60f3dd28,0x123d55924ceffbb8,0x1c29afb65e5f7fc0,0x1adfff121a7ffda6,0x1affef9a677f4f02,0x65ff7ebd447b7f9f,0x467ebe091bf1fbb4,0x456f7ea722fed9a8,0x78f9dffe71bd7fc3,0x527f0f1415b9f78b,0x5176ff8d6bfd5fd0,0x16555f563d778f84,0x21797f5d56dc7ffc,0x157fffe940fe7e2b,0x5360ef676e197df2,0x785f5ed030fd3fa1,0x2afef7f01e3f6e35,0x5673c531526bb7fe,0x71c7ebc34a7ffeac,0x53448f2f5afffcf9,0x795f4bb342fffe6a,0x12b575076c74ffd8,0xdd75505a72fec2,0x3f77f66d5ddfd69a,0x655e31e843fd7c8b,0x17dfff28197ce963,0x32f37bc123e7fdaf,0x4a7fbbec1efb8b27,0x72f5fe9406f569f9,0xfbefa7773cfff9a,0x57747f4b20f6ff1f,0x49b7bfee11ef3f56,0x19befeff0909f60e,0x1c3efd79197dff4e,0x2c7dfb2c59f73b75,0x3e4f1f1c58fe7b72,0x1bfbfe36607ff593,0x1f39dd872efffa2,0x3a7379204e6fdf44},
{0x486bbc02303eafd8,0x6edc778a0dfbd54a,0x64c34ae247f83d91,0x48715fec30f577d8,0x293f588f2bece67c,0x3084df101e3d8e64,0x12dd4b0924ed9d65,0x56fd5ed56d757bac,0x5a7edf9746fb6d63,0x31fddc221b9d3b09,0x5feacf6310ff7740,0x3378d42704f77ff3,0x2deb57533ddbbb28,0xb7d7edb4fbe25d5,0x10edbe29136d8e95,0x144839b135ff7812,0x1e857dd3f6ffb79,0x467feb9c546d9b57,0x57f7eb3908dfbead,0x4bf73a4675fd3523,0x675adb667afff99,0x14cfff8b75f9fe93,0x5e7bd99648effb25,0x47fef3c3b9d4a71,0xed54f430efaafdf,0x1679e31164776f7f,0x62ea55e61adf7f6c,0x12fe33ee18f57b00,0x765f3e49661f8a33,0x33fff95a33545a88,0x61bfdef17d7d5c47,0x537f7f3b21a67004,0x12ffee77657eff96,0x27ff7d72f6d7f0c,0x536f7326397f534f,0x1b7dde07288e7c67,0x38ff57db08fa7c98,0x3dcdffbc7b43badf,0x75fed718497f6e70,0x377cbfb746bf3d46,0x4eff62695e4dfae2,0x4f7f7784047777c8,0x2975e6fa0dbb7f6b,0x7b59dfb8356b7f73,0x7177ee7962fe6aac,0x65af7d6b42df6703,0x59fcf92953ee7d52,0x60de7bf777ec9df2,0x256e6b47307a5c45,0x1b3b65f14af2bdbf,0x7efdfba129696f10,0x393fff675474ff7e,0x1bff87737a4f4d91,0x2dd72d5b2f6aaba0,0x213f6e840379dfe1,0x6a7bcf801eabbf03,0x73da0815cfbdd84,0x47ff7f3332aee63c,0x7bfb7b9933ea72d4,0x3fdf2fbc4fee1d23,0x7c39675978f7fdaa,0x55fd7cc6487e579f,0x2353fec82e0ffe4e,0x4971761b726dbdb3},
{0x6733bfc6617759a0,0x6eeb9ba3666c2dc9,0x442d5fa11d299f87,0x4b76f79e57f5fc3e,0xec97ef85ad75d9a,0x4bfd6d2126fb7d2d,0x6c3a5dd448fa7f0d,0x3cfd6fce26fd6f7f,0x279f5f0466775fde,0x4f7da3d7393eff32,0x677baab94b777b3f,0x594d6f3430f3b9e9,0x77fdf76120f3ff45,0x1cfffd2324263db4,0x2bccfdc717abfbd1,0x3e3ffae01dd36321,0xb5ccf6b6f3ffebf,0x3f7ffda656ecdf82,0x52577c1f4d5b654d,0x1afbebe565777b80,0x74ab65e27d7d1fcd,0x6277ffc40b2fd7e0,0x265f7b005e7f3f8e,0x716dfed9167e5e93,0x24837d6a0aff7f07,0x19fe512675adf704,0x3d7bbe52073fd344,0x6325ee577457f69d,0x49feab0a076fe996,0x367b663a4877b79a,0x247f781e0ffffe75,0x13f7f37f5cfd7d12,0x470b6daf02fb3fb8,0x311799b00469bd42,0x1c67be1265cf7bf9,0x16df3f72033c5f1c,0x34ff3fa968f77f41,0x1fb7dffd197f6e0f,0x637bdb007e3f74fb,0x6ebdfed979d25b17,0x765f7f2a0dbf7817,0x3dfa5fda5aef9e08,0x110d7e5d0cef4d7c,0x1da7ff5d0b7fc717,0x5b7f76cc0df7ddb3,0x3bb7dc33cfd3fa9,0x37de7c40a7f2fd2,0x43fe5f2e647ce65f,0x555cfb0a7aeffea5,0x4e4d377b6a3fef61,0x58acfb73076b7623,0x50ff3e7f0c7bf2e9,0x3a7fefc357f7ff0f,0x166f548422bf4713,0x7acefdcb54ff7eec,0x4079c306303bcfe3,0x18dfbbbd66fe7b27,0x376fbea96df7fe97,0x3c4f6fd2777f177f,0x6c7aff7e3aeefa2e,0x18fff71e494f5db7,0x490a97771c573738,0x297fbb26df7757e,0x6afdf5273e737fe0},
{0x747925f368bfff9e,0x43fecbd193bfe36,0x1edb839467d7f63,0x7ebf75422fbfadc1,0x74d3f7ab39327f4e,0x3c77e4120c2e5e44,0x8cf6d59046f3bfa,0x15059f986d7377cf,0xc2efa9a42bb7f4d,0x667b3f4d499ff609,0x5b7f7ba854ff4be3,0x57df7ff21a771fbc,0x74df5e79018b39b7,0x2eff730c15deffa0,0x1f6dd3df161f7d13,0x4a7ffea048367f6c,0x65bf7de21247e5b9,0x2472fc303572ef1a,0x575fff5d2afbdc52,0x7a7f33f56f1efb7a,0x577bfcd72fc37516,0x6cc7dd5d4effdef9,0x6cefbfa3213b3ebc,0x3fb9f6c7385fb3b2,0x55767e3a00c5f6a4,0xd7f7f7d1bf437b5,0x4f3ffed7279dec42,0xb3d27f11759df97,0x635bad54343fefcd,0x417f7f3c6cdf7f3a,0x1bfff644527e3628,0x465f73d333975fdc,0x7077fa51716fff10,0x643d778b766b1b65,0x5af77fd631663e87,0x41dd97ce21bd5fed,0x587222c012afab7f,0x65cc5d1f7757ff8c,0x4ad436a1358b9dca,0x376bfccb6d7f6766,0x7bed5b153467ff41,0x546cfff026fd2ff5,0x3c6f675965ffd633,0x573b32b37236f698,0x5e687e2812594f10,0x716cbfbd77ddfb5b,0x7d7fb6d865fff756,0x68365ef7063ebe09,0x5db574b533ff9dba,0x5d7bba8528ff536f,0x53bd5d9d4a3d779a,0x773f7f0771f75ef2,0x742c12dd6cdf6ba2,0x49f35d0e27779f53,0xa77fb4a3e547fbd,0x172f2ddc3bfbe3c1,0xbeb7fa2263d7a3e,0x467b976040fff71f,0xbf577237a5dcd4f,0x2fef3f713f75df96,0x62a3e66c7ff43b99,0x13753f49227d5f5e,0xdf57294085e7f33,0x5d2fd943197fefc9},
{0x7ce39b893bff3fd0,0xcbee5d82c5e8f90,0x4c7debaa59fe9f24,0x607d4dd75e6f3f61,0x29775ea67c6f6b96,0x1ff75ee4147e1fa7,0x56fb3f972cfe7f2c,0x1dffdd33275b6f9c,0x163f5f59519d6fb2,0x53777784533db78c,0x69f3bb30434a4f2c,0x2c6d0a6167fff76b,0x71bfff99165f7d7e,0x5fedee966b7fd99a,0x5a9fdf7064afee5a,0x763f67f11aff57f4,0x1f7e7b431eee5d69,0x547b1a3b7579ad1f,0x13fb7df4387ffcbc,0x677e2e7639bbff11,0x7b9f5b9534ef7274,0x517d5e5706776de0,0x20f9fb7f66fefaaf,0x2e7df606075d1dce,0x2ef3dfb466e4ffb6,0x4edf73145cb3f994,0x475cdf76126a7f64,0x97ff7bc27edefed,0x10781f27228f2ad9,0x72ef3f5e65dd7a66,0x35de77631a7ddf60,0x27d57f380c56fb64,0x1baddf5b26fb529d,0x797957660bfdff75,0x3cceec74321f6ffa,0x1a6d7d1c2a772edb,0x71bf75203cff3752,0x2dcfbf215afacc56,0x1b7fbdfb4576f5df,0x4f7b738e076e7f31,0x6dffff2848deff61,0x704562c86f66fe8f,0x593a7eed2eecb98f,0x262afbbb0fbff2f6,0x48abfe8d257db7c2,0x4cc9575838f6f51b,0x357dfd653cfd76df,0xb7f6f5042eb3eef,0x4c67754a5176fd84,0x256f7f110c1dbdeb,0x1dc72f2107fd6f76,0x2aeef7012b0bf797,0x16efbbbf6f67394a,0x677d3ff9037eef60,0x3dcc6f0215b26753,0x2ca77704273b4f9b,0x6f736f30106fffcb,0x527fcf5830ffdbd4,0x17ffbe8e52bef644,0x77ffb9404aa7d5c,0x26fe3f44537eba4f,0x52ffff3c1fffef11,0x327fbe70537fef6e,0x5dfb7f7168d23d6f},
{0xef7a38850fefe37,0x6666fff425ffbfd6,0x51f71ff46d6f19c9,0x6eed7f5d0a667f1d,0x7aefefeb5b71fe74,0x13ecf39704bf0f58,0x44bebd8d197d7fa3,0x14fe6f9e3a673de5,0x53ef4b41092ebf0c,0x75ae7f7c5bdd57bc,0x407dfc512c257f1b,0x54ffff813eed77f8,0x3cfe3ec3153f6b9a,0x4cf77fc269bf7ea0,0x4af2e579597ef7a5,0x7ffbd37b65ffba,0x467fbd8c0af2f5cd,0x2cdfe9c71d7f7c91,0x36fdf1e40b5fbf8b,0x60dfed686afbbd45,0x3056d61b42fbf0e6,0x2ebff8b377fbff94,0x2f7adf9405787767,0x7a5d7e9668a5d4e7,0x3f7fcfd632fdaf3d,0x3cfbdeec3e5c23a0,0x535a7f2d5daf7fac,0x5ab7efb94b2f7ea1,0x1f7fde8308765bbb,0x67d17fa179bfeb1f,0x60d75d7b3e3c7e1d,0x777f6fae4c3d3ba9,0x58485fce18feff5f,0x4e7e6b434aff9d73,0x7096bfea7dc1e952,0x1e0b115a42ff5fe7,0x4e7bfbc81d7b1dba,0x15bcfe050a77576d,0x41bdfa0e03ffbf38,0x74ffe5232d7c5a79,0x5a5ffe6540effd75,0x6ffe576139bf3fd6,0x15797f1b7d7f7f90,0x873df730a7f7731,0x682d7ffb7d7466c8,0x33cfaf9346ed5be8,0x197cfe6c6547ff6d,0x6bfadc3b00fa0b13,0x2eff1ac8497f7e03,0x56ed51e1a7dffd3,0x6537f6fe557dfbb8,0x697f776b5d9ec3da,0x70fd5f6a15edff08,0xbf74d457c9f373b,0x37ffff330fefdad,0x3f6bca7d586d3f73,0x506f79661bf73bcc,0x39dcfb9144f2bab6,0xf2de612163d7e5e,0x7225fbe93078fc7e,0x3459dba478ef6ddb,0x256f8e505bffbf51,0x5eff7f44257df62d,0x2b4cf6b0133f7bd2},
},
{
{0x38fabcf01daeffd3,0x6e7ffe110beded0a,0x3f79db1716b1ef54,0x27fd7fd4596f67f7,0x367d7b780afef6e6,0x370faa2b243d6755,0x3fef7d3d1f42ef5f,0x37ef3fdb0d5ddfac,0x52ebac525f7ae35b,0x2a7b3f3569b7379a,0xd96eb0b25cff7ae,0x4fff6b5245db5a61,0x24737ff6342fdd0c,0x15797f8e57ef7bb3,0x5edf76fc4a6776f6,0x2674e546503e7dbc,0x682d5dbe4bf76fe7,0xb716fd533397f70,0x6e19452e3987febe,0x63c67acb287faa16,0x42ad6d6b0f7e5f6e,0x222a636f69f7af15,0x77b6ee152fbf6e5,0x627f3f77436ffcfd,0x14e35fa15af5f939,0x357f6e064659dfd8,0x2139b6fd1efeef18,0x7ddb7be628333bb2,0x5e5fff681bdc6f71,0x3f6d7b066ebff666,0xa67ff8c13bbd75f,0x727f7f365a244daa,0x337df5ab3dfe7f55,0x41ff0920394bf55d,0x23dd2e3a2a9b6f8f,0x4b5f5d8911ec7f0f,0x3cfb6fba6a7c57b7,0x3bd53fc94b363fd1,0x2cfe05da466f7dd7,0x65d33f88461fbf3e,0x4ef953ca12df5a7e,0x317d6fba0c7ffdc9,0x1efcf7e167df7d35,0x7bb7fadd077ef549,0xb6bff7250799f24,0x447d677066a73dc1,0x182c6feb346f1b00,0x476df7b6262f7c74,0x13ff432e11777137,0x5afe59ac597baf29,0x57cd5f3449fe5c5e,0x307f7d472fbf78ba,0x4fdf36de163fffda,0x55f6f0f258ed73e2,0x48fefc1e667d7fcd,0xc5d794635ff7347,0x3dff7f463e7fff43,0x5aed710b0267b3c5,0x1f7dcfaf5aef5f9d,0x6d8a7e6f67cf5dfd,0x5859fd8e277edb3c,0x296f35851b7eed1e,0x16bd61153df2f71,0x3775e007def38f2},
{0x87f76c11865eba4,0x3f75b2f63df3d2b,0x43f57b136c79fdc4,0x8f7fb3b7175ffee,0x2ad67d4f423c77ee,0x2753f3a0387c5da0,0x36e26ba51464b160,0x45d2fbe9053bbff0,0x20ebff8d49fe7b9f,0x5073ffb0027bdc24,0x7f0d535e4674f3e6,0x1b38f2d422f777a8,0x7646ef3128f7ddd2,0x55db3efb7bbeffd3,0x37b45f80d7f6b4b,0x26f6374a7f7ee5fb,0x137d51d9589acdb5,0x4eddeb633cff5fbc,0x675b9bd059ef3757,0x6eeb5a9f186fb784,0x1777f8450dd7e0b,0x4a1df78c223fff63,0x16215868257f9727,0x245e7fa97c8f7d10,0x3d5d6c15553aebaa,0x15db4f607ab9f53e,0x5effbfe76cef6baa,0x70f56d44641edf20,0x1b09bfd6127b7afd,0x16e65d8b0a7feb39,0x20ceff9670f2f625,0x56fc8bce1b774669,0x3ad333f00bf6f781,0x30ffdbff5cbb4f34,0x4dbdb624e775fb1,0x207f7faa3c5c1955,0xabdf9f5597b644a,0x3d7fdb6f63fb7b82,0x4abfff5f635f57ba,0x5faa6ebe377fae80,0x5a3d4d5933eb7f7d,0x12fbe7d56cef7d6a,0x23d89641045c7780,0x7e5e7ff72cffdf3e,0x7f7f75f3546f3fd5,0x1cfefdee5f3fffa8,0x1ec67fe300ff7998,0x5c61e7c218567912,0x8fa7d7e20546b20,0x3e7dfba4f2735eb,0x235dfbc27affbf6a,0x7edac693476e7f36,0x193bf1c2628fec1,0x633f75ff5e7fef56,0x7c6d4d810b5f3fb2,0x526fb76124bffb18,0x44ff6fcf6e01af2f,0x12cb1fc66f7f5f02,0x762d6f6537175f01,0x77bc5f2551cbfeda,0x60e7bd0013fff572,0x7c684eda24ef5178,0x7377fd834ffff3b,0x23dd7f600f7abfcf},
{0xbd6fcfa36ffdfab,0x4753f4e347ff639,0xceafde803bf6f18,0x10fa5d94782f7f02,0x25ee3d6e3679ed8a,0x22fbdf6075afd37,0x16de7bc74ef675a6,0x7bf655c808fff9b0,0x4cef74f03f4effd8,0x44f2ffeb2c7e7c5c,0x42ef4e4a23c773c3,0x34ef57077b2dbfcb,0x7dbd7629fb05ed,0x2d3f3d091affff00,0x27eff16c78fe6fa6,0x3f59f9df6e4f7678,0x55df77dd26af5d39,0x54d36b72405e3775,0x50a9efcb015bde55,0x7ffd59e4613d7c90,0x3a125e663cef6ebd,0x447efa0b669ddb7d,0x49eff72852c7362e,0x7e2ebb2c7afbfc20,0x465bde3317bf7f90,0x3ca67efc61ebdfd0,0x3afb7de95cf5ff60,0x31adced325776feb,0x237f9dcd22ffb75d,0xca85732137f369a,0x11f5bd982b7cff71,0x62fbdd7776e77fe4,0x7d3f4e9f78975be2,0x7a79abde3b7bfdf8,0x417f3f647f2fffb8,0x1a75d8bb68fe6fb7,0x5fbdf792077f571,0x38fff7f51a767e80,0x8ffff9d30ef87e3,0x215f4ec666ad3740,0x9fc7f101ad7d570,0x71df39b161aff3b8,0x52337f3a682edf70,0xe7f5bc321d55b10,0x135dff7c3f7fe3da,0x5afebe0d765ef59c,0x1bdd7b542075e735,0x67bf76603df65eed,0x1c3ef5b76aef7fbe,0x5e2d7e4a01ef7f1b,0x75ff79aa7e9ebdda,0x527639514a7fbd50,0x549f6e227bf6ffbe,0x51f0b76e537f7d98,0xbf6f51d766fee5b,0x4f7f66cc0bfffee7,0x73bf7f0120daaf8f,0x3fde0bc2122d7f6b,0x41ffbd3440747f8a,0xe79bf0d13fffd13,0x1c9f7ffb757f3d7d,0x3c3f4f513e87335f,0x5eef7f971efc7f89,0x4b0d7bd22dff3769},
{0x50fefd9d6f6ef3e6,0x4e753d6e035eff33,0x487f5d9673636752,0x3d16fede13fb7e33,0x753f7bd71e7b7fbc,0x65fbf52d56af551c,0x4e9f69a124f47a31,0x17ffd3787db5f6ee,0x63e27f7c354bf706,0x65fbf7e76d7e7f40,0x71b79cf53f77f46,0x1a5febeb757fa7cc,0x111ebfc46c943f5d,0x395f4eb87b5fa53b,0x395a165a62577f05,0x2dfbbf0503ef7f31,0x3d8379cb2bf73571,0x7b7ff80243b0769b,0x586b3f1f4626cfb8,0x155ed59a287abd38,0x3adf6b1009c66384,0x2f7bffea7d7eff65,0x10bf3f21313357fa,0x2ddf7f01244ef72d,0x3ebed9f9187ffbeb,0x7f1fdd8017dae90,0x623dbf0405183e3c,0x3df7db93125ffd12,0x45ddfb4c027f9e92,0x3ebf2ff94f3f1487,0x4bffc79419effc42,0x547fff315142b71d,0x85f7fb67a7e7277,0x7bcf6fbf5bba54aa,0x7f7bb3e53796da5,0x38767fbd3dbf6f36,0x7cf9d74675efff2d,0x4c8e7f5d347b9bcb,0x55bd5d9404dfff50,0x67ff579e3a7f787c,0x6c6d79f13d7f5f58,0x2ccb3b4d7075f7b3,0x57bc7ccb29febf05,0x292fbc3f0afc6cbf,0x142fff0e47d7fe35,0x1c7f9dcc71de5f9c,0x7d1f7b3e692f07d7,0x28df3d8e7c554c05,0x5bb57fd868746711,0x4836d65b777b7db7,0x7d9ee5eb6aa5dbaf,0x28777f7f5f5ff707,0x16aefdf14d5fe3cf,0x406fd53e7d437da6,0x657bf4f27d6f7fca,0x416bdf8950bd7fb2,0x58fb9ddc4cf37b65,0x40765bff707e3701,0x30b3d71c0d2f7e38,0x2fff632654ae7ba9,0x58f8f38000ff195d,0x77f7de92e176ed3,0x767b5550676fea5c,0x36ed7d553e5f67c0},
{0x659dd7a937f87f56,0x3efe3c8f566fff1b,0x24fffe1d515d1e70,0xbccf7196af3e781,0x6733ba882ef7ca82,0x70ae0b456cdff64e,0x4bd37d356c7eff01,0x58aa1ef949f67fa9,0x74eceb3121fbf528,0x126ebca44ba6d7d1,0x79bddeed6cfdf66d,0x4a7ffd80375768a9,0x75dfaf1a274b7122,0x187f7f09637b6f82,0x25b2efc11fef7d6a,0x303db6bc24edff27,0x585f1da15e9b3f5e,0x207b6f144cf7a32e,0x2bfe7fcc3ed7ff80,0x2c1adec113df6d7d,0x51bd7f846d5fdf5f,0x286fe72a2c56d71a,0x58773b5316495e8b,0x71677b265e3f5f37,0x33f469684cdaddbb,0x555e7bf55ffd7b7d,0x37fe9397baf3a3d,0x143fce84507d5497,0x4fe3af5567d95b9d,0x4aafbfe203fb6b02,0x3ce8ee89124fe798,0x69d5fbfc11ffeb13,0x6a6ffa3706f3c742,0x12f47fa0437e6f48,0x5b7fff2602e3476,0x7775d7b16076efd3,0x3dcffd5c0fecdf7e,0x15ff6fa6786ee063,0x1ee9fe44357e6f02,0x71fd1d4818fdfb35,0xedbfefb117f1c36,0x21e62eab1f5f7d5b,0x62ffe2f65facff3e,0x4d78796c0f3bd64b,0x506cefa922ef7de5,0x7fcfbe2d17d7beaa,0x30fc3da1317f3f7e,0x5c6c2f4e3a7e5659,0x55775de30dfcf319,0x1fb07fed357f7fc1,0x68fd7f84556e51ea,0x7fbffb1f2b6e6e5a,0x15daad8950ff7df5,0x4beff36f2275fe81,0x773c6701767c6dfe,0x65cf7f97596afe7b,0x1ffd35f67fff3af,0x723bff7c107f6fc4,0x70457f1c3375fb0b,0x5a7ebc6f395d3f9c,0x643f7f8d6d3f7f12,0x7bef7fa239db1bd4,0x3bbeff01649dfdb5,0x2566cfe827fd49d4},
{0x57f9fa1e05e3fffb,0x34747db133ae3ef0,0x4febff7d32ee6f74,0x7afffe4522f8fcec,0x49cf1f831ef7ffde,0x4073ff3e0ff679cc,0x7ccfe7817afd4916,0x7baff74b53ae8fe0,0xcaecf0f7b3b9f40,0x26ed1f224cb77b10,0x48fd75a404ff7339,0x427a3dc5671fdf64,0x7d7a577a1032fd3c,0x6778dbfa18cffed6,0x5bbf3fa007fb4bd3,0x4ed2d0438777b5b,0x347ef56034bffe01,0x21e9ffa661d75f2e,0x7992fad300fbbbad,0x437f64594a5efb5f,0x4cef16c11db2ff50,0x4e77f7cc39276f9c,0xf7f5abd587fffe2,0x6bfd79c0f5ef63e,0x33fe7e812bb70e00,0x33b7f5402ef4b96,0x4ccfdf8656d6fd62,0x31ff7fa7056ef579,0xfcdd7e7084eff7c,0x4ef6b6eb77fdab09,0x51ff7a7769db5673,0x60aeb3d91de27bc5,0x30af3e20143fdf42,0x1e66ff83781f7fd3,0x68fc7f7e3c37772c,0x5627bf95773d378c,0x15be1fbb23977f64,0x337b77cf2bd17748,0x52ff47ad181d7ffa,0x7d777dc2676cfe6b,0x7fde022d0d3fdf08,0x2e66efca7477beb0,0x213317b91f75391d,0x78feac4b540f59b4,0x15d7ff4d06fff5e9,0x22dfd72f2e3afdc5,0x247dff7e4e737f2a,0x417ddd9e5cfbe7eb,0x173f9fd751df6fd6,0x42dfbeff42e1ef37,0x64fcff7754a6d989,0x55fe2e3054f7ff4b,0x205bdfeb3bc1ff30,0x12dbff0108ffdb2a,0x2ebeff48377f33f6,0x7b5f3bf50c2f5540,0x7cbbef8c67bffd6f,0x337d7e3b77fdbdb4,0x2ebaef364899bd03,0xb3a77ea685c7fed,0xc7ef9236ff37f9c,0x37e53f7c277bee62,0x1ce7fcab6c9f8f92,0x541d7b8d4fff1fa5},
}
};
//this contains the Position position values for each piece at each position
const int PieceSquareTable[ 6 ][ 64 ] =
{
//Pawn
{
0, 0, 0, 0, 0, 0, 0, 0,
40, 40, 40, 40, 40, 40, 40, 40,
10, 10, 10, 20, 20, 10, 10, 10,
6, 6, 6, 16, 16, 6, 6, 6,
3, 3, 3, 13, 13, 3, 3, 3,
1, 1, 1, 10, 10, 1, 1, 1,
0, 0, 0, -5, -5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
},
//Knight
{
-60, -30, -30, -30, -30, -30, -30, -60,
-30, -24, -10, -10, -10, -10, -24, -30,
-30, -6, -6, -6, -6, -6, -6, -30,
-30, -6, -2, 0, 0, -2, -6, -30,
-30, -6, -2, 0, 0, -2, -6, -30,
-30, -6, -6, -6, -6, -6, -6, -30,
-30, -24, -10, -10, -10, -10, -24, -30,
-60, -30, -30, -30, -30, -30, -30, -60
},
//Bishop
{
-20, -20, -20, -20, -20, -20, -20, -20,
-20, 6, 6, 3, 3, 6, 6, -20,
-20, 6, 8, 6, 6, 8, 6, -20,
-20, 3, 6, 10, 10, 6, 3, -20,
-20, 3, 6, 10, 10, 6, 3, -20,
-20, 6, 8, 6, 6, 8, 6, -20,
-20, 6, 6, 3, 3, 6, 6, -20,
-20, -20, -20, -20, -20, -20, -20, -20
},
//Rook
{
-10, -6, -2, 2, 2, -2, -6, -10,
14, 18, 22, 26, 26, 22, 18, 14,
-10, -6, -2, 2, 2, -2, -6, -10,
-10, -6, -2, 2, 2, -2, -6, -10,
-10, -6, -2, 2, 2, -2, -6, -10,
-10, -6, -2, 2, 2, -2, -6, -10,
-10, -6, -2, 2, 2, -2, -6, -10,
-10, -6, -2, 2, 2, -2, -6, -10
},
//Queen
{
-20, -20, 0, 0, 0, 0, -20, -20,
-20, 0, 8, 8, 8, 8, 0, -20,
0, 8, 8, 12, 12, 8, 8, 0,
0, 8, 12, 16, 16, 12, 8, 0,
0, 8, 12, 16, 16, 12, 8, 0,
0, 8, 8, 12, 12, 8, 8, 0,
-20, 0, 8, 8, 8, 8, 0, -20,
-20, -20, 0, 0, 0, 0, -20, -20
},
//King
{
-40, -40, -40, -40, -40, -40, -40, -40,
-40, -40, -40, -40, -40, -40, -40, -40,
-40, -40, -40, -40, -40, -40, -40, -40,
-40, -40, -40, -40, -40, -40, -40, -40,
-40, -40, -40, -40, -40, -40, -40, -40,
-40, -40, -40, -40, -40, -40, -40, -40,
-20, -20, -20, -20, -20, -20, -20, -20,
0, 20, 40, -20, 0, -20, 40, 20
}
};
const int EndGameKingPositionValues[ 64 ] =
{
-60, -60, -60, -60, -60, -60, -60, -60,
-60, -50, -50, -50, -50, -50, -50, -60,
-60, -50, -40, -40, -40, -40, -50, -60,
-60, -50, -40, -10, -10, -40, -50, -60,
-60, -50, -40, -10, -10, -40, -50, -60,
-60, -50, -40, -40, -40, -40, -50, -60,
-60, -50, -50, -50, -50, -50, -50, -60,
-60, -60, -60, -60, -60, -60, -60, -60
};
const int EndGamePawnPositionValues[ 64 ] =
{
550, 550, 500, 500, 500, 500, 550, 550,
450, 450, 400, 400, 400, 400, 450, 450,
100, 100, 100, 200, 200, 100, 100, 100,
60, 60, 60, 160, 160, 60, 60, 60,
30, 30, 30, 130, 130, 30, 30, 30,
10, 10, 10, 100, 100, 10, 10, 10,
0, 0, 0, -5, -5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
};
//this contains all the possible moves for kings and knights
const bitboard KingMoveBitboards[ 64 ] = { 0x303,0x707,0xe0e,0x1c1c,0x3838,0x7070,0xe0e0,0xc0c0,0x30303,0x70707,0xe0e0e,0x1c1c1c,0x383838,0x707070,0xe0e0e0,0xc0c0c0,0x3030300,0x7070700,0xe0e0e00,0x1c1c1c00,0x38383800,0x70707000,0xe0e0e000,0xc0c0c000,0x303030000,0x707070000,0xe0e0e0000,0x1c1c1c0000,0x3838380000,0x7070700000,0xe0e0e00000,0xc0c0c00000,0x30303000000,0x70707000000,0xe0e0e000000,0x1c1c1c000000,0x383838000000,0x707070000000,0xe0e0e0000000,0xc0c0c0000000,0x3030300000000,0x7070700000000,0xe0e0e00000000,0x1c1c1c00000000,0x38383800000000,0x70707000000000,0xe0e0e000000000,0xc0c0c000000000,0x303030000000000,0x707070000000000,0xe0e0e0000000000,0x1c1c1c0000000000,0x3838380000000000,0x7070700000000000,0xe0e0e00000000000,0xc0c0c00000000000,0x303000000000000,0x707000000000000,0xe0e000000000000,0x1c1c000000000000,0x3838000000000000,0x7070000000000000,0xe0e0000000000000,0xc0c0000000000000 };
const bitboard KnightMoveBitboards[ 64 ] = { 0x20400,0x50800,0xa1100,0x142200,0x284400,0x508800,0xa01000,0x402000,0x2040004,0x5080008,0xa110011,0x14220022,0x28440044,0x50880088,0xa0100010,0x40200020,0x204000402,0x508000805,0xa1100110a,0x1422002214,0x2844004428,0x5088008850,0xa0100010a0,0x4020002040,0x20400040200,0x50800080500,0xa1100110a00,0x142200221400,0x284400442800,0x508800885000,0xa0100010a000,0x402000204000,0x2040004020000,0x5080008050000,0xa1100110a0000,0x14220022140000,0x28440044280000,0x50880088500000,0xa0100010a00000,0x40200020400000,0x204000402000000,0x508000805000000,0xa1100110a000000,0x1422002214000000,0x2844004428000000,0x5088008850000000,0xa0100010a0000000,0x4020002040000000,0x400040200000000,0x800080500000000,0x1100110a00000000,0x2200221400000000,0x4400442800000000,0x8800885000000000,0x100010a000000000,0x2000204000000000,0x4020000000000,0x8050000000000,0x110a0000000000,0x22140000000000,0x44280000000000,0x88500000000000,0x10a00000000000,0x20400000000000 };
//values of pieces
const int PieceValues[ 6 ] =
{
1, //pawn
3, //knight
3, //bishop
5, //rook
9, //queen
0x1000 //king
};
//the other color based on the color
const int OtherColor[ 2 ] = { WHITE, BLACK };
//the possible rook moves
const row RookMoves[ 8 ][ 256 ] =
{
{0xfe,0xfe,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x1e,0x1e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x3e,0x3e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x1e,0x1e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x7e,0x7e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x1e,0x1e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x3e,0x3e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x1e,0x1e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0xfe,0xfe,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x1e,0x1e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x3e,0x3e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x1e,0x1e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x7e,0x7e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x1e,0x1e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x3e,0x3e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2,0x1e,0x1e,0x2,0x2,0x6,0x6,0x2,0x2,0xe,0xe,0x2,0x2,0x6,0x6,0x2,0x2},
{0xfd,0xfd,0xfd,0xfd,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x1d,0x1d,0x1d,0x1d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x3d,0x3d,0x3d,0x3d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x1d,0x1d,0x1d,0x1d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x7d,0x7d,0x7d,0x7d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x1d,0x1d,0x1d,0x1d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x3d,0x3d,0x3d,0x3d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x1d,0x1d,0x1d,0x1d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0xfd,0xfd,0xfd,0xfd,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x1d,0x1d,0x1d,0x1d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x3d,0x3d,0x3d,0x3d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x1d,0x1d,0x1d,0x1d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x7d,0x7d,0x7d,0x7d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x1d,0x1d,0x1d,0x1d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x3d,0x3d,0x3d,0x3d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5,0x1d,0x1d,0x1d,0x1d,0x5,0x5,0x5,0x5,0xd,0xd,0xd,0xd,0x5,0x5,0x5,0x5},
{0xfb,0xfb,0xfa,0xfa,0xfb,0xfb,0xfa,0xfa,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x3b,0x3b,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x7b,0x7b,0x7a,0x7a,0x7b,0x7b,0x7a,0x7a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x3b,0x3b,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0xfb,0xfb,0xfa,0xfa,0xfb,0xfb,0xfa,0xfa,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x3b,0x3b,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x7b,0x7b,0x7a,0x7a,0x7b,0x7b,0x7a,0x7a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x3b,0x3b,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0xb,0xb,0xa,0xa,0xb,0xb,0xa,0xa},
{0xf7,0xf7,0xf6,0xf6,0xf4,0xf4,0xf4,0xf4,0xf7,0xf7,0xf6,0xf6,0xf4,0xf4,0xf4,0xf4,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x37,0x37,0x36,0x36,0x34,0x34,0x34,0x34,0x37,0x37,0x36,0x36,0x34,0x34,0x34,0x34,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x77,0x77,0x76,0x76,0x74,0x74,0x74,0x74,0x77,0x77,0x76,0x76,0x74,0x74,0x74,0x74,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x37,0x37,0x36,0x36,0x34,0x34,0x34,0x34,0x37,0x37,0x36,0x36,0x34,0x34,0x34,0x34,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0xf7,0xf7,0xf6,0xf6,0xf4,0xf4,0xf4,0xf4,0xf7,0xf7,0xf6,0xf6,0xf4,0xf4,0xf4,0xf4,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x37,0x37,0x36,0x36,0x34,0x34,0x34,0x34,0x37,0x37,0x36,0x36,0x34,0x34,0x34,0x34,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x77,0x77,0x76,0x76,0x74,0x74,0x74,0x74,0x77,0x77,0x76,0x76,0x74,0x74,0x74,0x74,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x37,0x37,0x36,0x36,0x34,0x34,0x34,0x34,0x37,0x37,0x36,0x36,0x34,0x34,0x34,0x34,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14,0x17,0x17,0x16,0x16,0x14,0x14,0x14,0x14},
{0xef,0xef,0xee,0xee,0xec,0xec,0xec,0xec,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xef,0xef,0xee,0xee,0xec,0xec,0xec,0xec,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x2f,0x2f,0x2e,0x2e,0x2c,0x2c,0x2c,0x2c,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2f,0x2f,0x2e,0x2e,0x2c,0x2c,0x2c,0x2c,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x6f,0x6f,0x6e,0x6e,0x6c,0x6c,0x6c,0x6c,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x6f,0x6f,0x6e,0x6e,0x6c,0x6c,0x6c,0x6c,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x2f,0x2f,0x2e,0x2e,0x2c,0x2c,0x2c,0x2c,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2f,0x2f,0x2e,0x2e,0x2c,0x2c,0x2c,0x2c,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0xef,0xef,0xee,0xee,0xec,0xec,0xec,0xec,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xef,0xef,0xee,0xee,0xec,0xec,0xec,0xec,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x2f,0x2f,0x2e,0x2e,0x2c,0x2c,0x2c,0x2c,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2f,0x2f,0x2e,0x2e,0x2c,0x2c,0x2c,0x2c,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x6f,0x6f,0x6e,0x6e,0x6c,0x6c,0x6c,0x6c,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x6f,0x6f,0x6e,0x6e,0x6c,0x6c,0x6c,0x6c,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x2f,0x2f,0x2e,0x2e,0x2c,0x2c,0x2c,0x2c,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2f,0x2f,0x2e,0x2e,0x2c,0x2c,0x2c,0x2c,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28},
{0xdf,0xdf,0xde,0xde,0xdc,0xdc,0xdc,0xdc,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xdf,0xdf,0xde,0xde,0xdc,0xdc,0xdc,0xdc,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0x5f,0x5f,0x5e,0x5e,0x5c,0x5c,0x5c,0x5c,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x5f,0x5f,0x5e,0x5e,0x5c,0x5c,0x5c,0x5c,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0xdf,0xdf,0xde,0xde,0xdc,0xdc,0xdc,0xdc,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xdf,0xdf,0xde,0xde,0xdc,0xdc,0xdc,0xdc,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0x5f,0x5f,0x5e,0x5e,0x5c,0x5c,0x5c,0x5c,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x5f,0x5f,0x5e,0x5e,0x5c,0x5c,0x5c,0x5c,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50},
{0xbf,0xbf,0xbe,0xbe,0xbc,0xbc,0xbc,0xbc,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xbf,0xbf,0xbe,0xbe,0xbc,0xbc,0xbc,0xbc,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xbf,0xbf,0xbe,0xbe,0xbc,0xbc,0xbc,0xbc,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xbf,0xbf,0xbe,0xbe,0xbc,0xbc,0xbc,0xbc,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0},
{0x7f,0x7f,0x7e,0x7e,0x7c,0x7c,0x7c,0x7c,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x7f,0x7e,0x7e,0x7c,0x7c,0x7c,0x7c,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40},
};
const bitboard VerticalRookMoves[ 8 ][ 256 ] =
{
{0x101010101010100,0x101010101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x101010100,0x101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x10101010100,0x10101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x101010100,0x101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010101010100,0x1010101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x101010100,0x101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x10101010100,0x10101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x101010100,0x101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x101010101010100,0x101010101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x101010100,0x101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x10101010100,0x10101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x101010100,0x101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010101010100,0x1010101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x101010100,0x101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x10101010100,0x10101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x101010100,0x101010100,0x100,0x100,0x10100,0x10100,0x100,0x100,0x1010100,0x1010100,0x100,0x100,0x10100,0x10100,0x100,0x100,},
{0x101010101010001,0x101010101010001,0x101010101010001,0x101010101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x101010001,0x101010001,0x101010001,0x101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x10101010001,0x10101010001,0x10101010001,0x10101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x101010001,0x101010001,0x101010001,0x101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x1010101010001,0x1010101010001,0x1010101010001,0x1010101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x101010001,0x101010001,0x101010001,0x101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x10101010001,0x10101010001,0x10101010001,0x10101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x101010001,0x101010001,0x101010001,0x101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x101010101010001,0x101010101010001,0x101010101010001,0x101010101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x101010001,0x101010001,0x101010001,0x101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x10101010001,0x10101010001,0x10101010001,0x10101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x101010001,0x101010001,0x101010001,0x101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x1010101010001,0x1010101010001,0x1010101010001,0x1010101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x101010001,0x101010001,0x101010001,0x101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x10101010001,0x10101010001,0x10101010001,0x10101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,0x101010001,0x101010001,0x101010001,0x101010001,0x10001,0x10001,0x10001,0x10001,0x1010001,0x1010001,0x1010001,0x1010001,0x10001,0x10001,0x10001,0x10001,},
{0x101010101000101,0x101010101000101,0x101010101000100,0x101010101000100,0x101010101000101,0x101010101000101,0x101010101000100,0x101010101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x101000101,0x101000101,0x101000100,0x101000100,0x101000101,0x101000101,0x101000100,0x101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x10101000101,0x10101000101,0x10101000100,0x10101000100,0x10101000101,0x10101000101,0x10101000100,0x10101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x101000101,0x101000101,0x101000100,0x101000100,0x101000101,0x101000101,0x101000100,0x101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1010101000101,0x1010101000101,0x1010101000100,0x1010101000100,0x1010101000101,0x1010101000101,0x1010101000100,0x1010101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x101000101,0x101000101,0x101000100,0x101000100,0x101000101,0x101000101,0x101000100,0x101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x10101000101,0x10101000101,0x10101000100,0x10101000100,0x10101000101,0x10101000101,0x10101000100,0x10101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x101000101,0x101000101,0x101000100,0x101000100,0x101000101,0x101000101,0x101000100,0x101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x101010101000101,0x101010101000101,0x101010101000100,0x101010101000100,0x101010101000101,0x101010101000101,0x101010101000100,0x101010101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x101000101,0x101000101,0x101000100,0x101000100,0x101000101,0x101000101,0x101000100,0x101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x10101000101,0x10101000101,0x10101000100,0x10101000100,0x10101000101,0x10101000101,0x10101000100,0x10101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x101000101,0x101000101,0x101000100,0x101000100,0x101000101,0x101000101,0x101000100,0x101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1010101000101,0x1010101000101,0x1010101000100,0x1010101000100,0x1010101000101,0x1010101000101,0x1010101000100,0x1010101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x101000101,0x101000101,0x101000100,0x101000100,0x101000101,0x101000101,0x101000100,0x101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x10101000101,0x10101000101,0x10101000100,0x10101000100,0x10101000101,0x10101000101,0x10101000100,0x10101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,0x101000101,0x101000101,0x101000100,0x101000100,0x101000101,0x101000101,0x101000100,0x101000100,0x1000101,0x1000101,0x1000100,0x1000100,0x1000101,0x1000101,0x1000100,0x1000100,},
{0x101010100010101,0x101010100010101,0x101010100010100,0x101010100010100,0x101010100010000,0x101010100010000,0x101010100010000,0x101010100010000,0x101010100010101,0x101010100010101,0x101010100010100,0x101010100010100,0x101010100010000,0x101010100010000,0x101010100010000,0x101010100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x10100010101,0x10100010101,0x10100010100,0x10100010100,0x10100010000,0x10100010000,0x10100010000,0x10100010000,0x10100010101,0x10100010101,0x10100010100,0x10100010100,0x10100010000,0x10100010000,0x10100010000,0x10100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x1010100010101,0x1010100010101,0x1010100010100,0x1010100010100,0x1010100010000,0x1010100010000,0x1010100010000,0x1010100010000,0x1010100010101,0x1010100010101,0x1010100010100,0x1010100010100,0x1010100010000,0x1010100010000,0x1010100010000,0x1010100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x10100010101,0x10100010101,0x10100010100,0x10100010100,0x10100010000,0x10100010000,0x10100010000,0x10100010000,0x10100010101,0x10100010101,0x10100010100,0x10100010100,0x10100010000,0x10100010000,0x10100010000,0x10100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x101010100010101,0x101010100010101,0x101010100010100,0x101010100010100,0x101010100010000,0x101010100010000,0x101010100010000,0x101010100010000,0x101010100010101,0x101010100010101,0x101010100010100,0x101010100010100,0x101010100010000,0x101010100010000,0x101010100010000,0x101010100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x10100010101,0x10100010101,0x10100010100,0x10100010100,0x10100010000,0x10100010000,0x10100010000,0x10100010000,0x10100010101,0x10100010101,0x10100010100,0x10100010100,0x10100010000,0x10100010000,0x10100010000,0x10100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x1010100010101,0x1010100010101,0x1010100010100,0x1010100010100,0x1010100010000,0x1010100010000,0x1010100010000,0x1010100010000,0x1010100010101,0x1010100010101,0x1010100010100,0x1010100010100,0x1010100010000,0x1010100010000,0x1010100010000,0x1010100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x10100010101,0x10100010101,0x10100010100,0x10100010100,0x10100010000,0x10100010000,0x10100010000,0x10100010000,0x10100010101,0x10100010101,0x10100010100,0x10100010100,0x10100010000,0x10100010000,0x10100010000,0x10100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,0x100010101,0x100010101,0x100010100,0x100010100,0x100010000,0x100010000,0x100010000,0x100010000,},
{0x101010001010101,0x101010001010101,0x101010001010100,0x101010001010100,0x101010001010000,0x101010001010000,0x101010001010000,0x101010001010000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001010101,0x101010001010101,0x101010001010100,0x101010001010100,0x101010001010000,0x101010001010000,0x101010001010000,0x101010001010000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x10001010101,0x10001010101,0x10001010100,0x10001010100,0x10001010000,0x10001010000,0x10001010000,0x10001010000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001010101,0x10001010101,0x10001010100,0x10001010100,0x10001010000,0x10001010000,0x10001010000,0x10001010000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x1010001010101,0x1010001010101,0x1010001010100,0x1010001010100,0x1010001010000,0x1010001010000,0x1010001010000,0x1010001010000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001010101,0x1010001010101,0x1010001010100,0x1010001010100,0x1010001010000,0x1010001010000,0x1010001010000,0x1010001010000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x10001010101,0x10001010101,0x10001010100,0x10001010100,0x10001010000,0x10001010000,0x10001010000,0x10001010000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001010101,0x10001010101,0x10001010100,0x10001010100,0x10001010000,0x10001010000,0x10001010000,0x10001010000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x101010001010101,0x101010001010101,0x101010001010100,0x101010001010100,0x101010001010000,0x101010001010000,0x101010001010000,0x101010001010000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001010101,0x101010001010101,0x101010001010100,0x101010001010100,0x101010001010000,0x101010001010000,0x101010001010000,0x101010001010000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x101010001000000,0x10001010101,0x10001010101,0x10001010100,0x10001010100,0x10001010000,0x10001010000,0x10001010000,0x10001010000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001010101,0x10001010101,0x10001010100,0x10001010100,0x10001010000,0x10001010000,0x10001010000,0x10001010000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x1010001010101,0x1010001010101,0x1010001010100,0x1010001010100,0x1010001010000,0x1010001010000,0x1010001010000,0x1010001010000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001010101,0x1010001010101,0x1010001010100,0x1010001010100,0x1010001010000,0x1010001010000,0x1010001010000,0x1010001010000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x1010001000000,0x10001010101,0x10001010101,0x10001010100,0x10001010100,0x10001010000,0x10001010000,0x10001010000,0x10001010000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001010101,0x10001010101,0x10001010100,0x10001010100,0x10001010000,0x10001010000,0x10001010000,0x10001010000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,0x10001000000,},
{0x101000101010101,0x101000101010101,0x101000101010100,0x101000101010100,0x101000101010000,0x101000101010000,0x101000101010000,0x101000101010000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000101010101,0x101000101010101,0x101000101010100,0x101000101010100,0x101000101010000,0x101000101010000,0x101000101010000,0x101000101010000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x1000101010101,0x1000101010101,0x1000101010100,0x1000101010100,0x1000101010000,0x1000101010000,0x1000101010000,0x1000101010000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000101010101,0x1000101010101,0x1000101010100,0x1000101010100,0x1000101010000,0x1000101010000,0x1000101010000,0x1000101010000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x101000101010101,0x101000101010101,0x101000101010100,0x101000101010100,0x101000101010000,0x101000101010000,0x101000101010000,0x101000101010000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000101010101,0x101000101010101,0x101000101010100,0x101000101010100,0x101000101010000,0x101000101010000,0x101000101010000,0x101000101010000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000101000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x101000100000000,0x1000101010101,0x1000101010101,0x1000101010100,0x1000101010100,0x1000101010000,0x1000101010000,0x1000101010000,0x1000101010000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000101010101,0x1000101010101,0x1000101010100,0x1000101010100,0x1000101010000,0x1000101010000,0x1000101010000,0x1000101010000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000101000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,0x1000100000000,},
{0x100010101010101,0x100010101010101,0x100010101010100,0x100010101010100,0x100010101010000,0x100010101010000,0x100010101010000,0x100010101010000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010101010101,0x100010101010101,0x100010101010100,0x100010101010100,0x100010101010000,0x100010101010000,0x100010101010000,0x100010101010000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010101010101,0x100010101010101,0x100010101010100,0x100010101010100,0x100010101010000,0x100010101010000,0x100010101010000,0x100010101010000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010101010101,0x100010101010101,0x100010101010100,0x100010101010100,0x100010101010000,0x100010101010000,0x100010101010000,0x100010101010000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010101000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010100000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,0x100010000000000,},
{0x1010101010101,0x1010101010101,0x1010101010100,0x1010101010100,0x1010101010000,0x1010101010000,0x1010101010000,0x1010101010000,0x1010101000000,0x1010101000000,0x1010101000000,0x1010101000000,0x1010101000000,0x1010101000000,0x1010101000000,0x1010101000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1010101010101,0x1010101010101,0x1010101010100,0x1010101010100,0x1010101010000,0x1010101010000,0x1010101010000,0x1010101010000,0x1010101000000,0x1010101000000,0x1010101000000,0x1010101000000,0x1010101000000,0x1010101000000,0x1010101000000,0x1010101000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010100000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1010000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,0x1000000000000,},
};
const row Castling[ 2 ][ 256 ] =
{
{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
const int Rotate90Map[ 64 ] =
{
0, 8, 16, 24, 32, 40, 48, 56,
1, 9, 17, 25, 33, 41, 49, 57,
2, 10, 18, 26, 34, 42, 50, 58,
3, 11, 19, 27, 35, 43, 51, 59,
4, 12, 20, 28, 36, 44, 52, 60,
5, 13, 21, 29, 37, 45, 53, 61,
6, 14, 22, 30, 38, 46, 54, 62,
7, 15, 23, 31, 39, 47, 55, 63
};
const int FlipMap[ 64 ] =
{
56, 57, 58, 59, 60, 61, 62, 63,
48, 49, 50, 51, 52, 53, 54, 55,
40, 41, 42, 43, 44, 45, 46, 47,
32, 33, 34, 35, 36, 37, 38, 39,
24, 25, 26, 27, 28, 29, 30, 31,
16, 17, 18, 19, 20, 21, 22, 23,
8, 9, 10, 11, 12, 13, 14, 15,
0, 1, 2, 3, 4, 5, 6, 7
};
const int Margins[ 10 ] = { 0, 0, 0, 500, 500, 700, 700, 900, 900, 1500 };
const string StartingPositionFEN = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
const char PieceChars[ 6 ] = { 'P', 'N', 'B', 'R', 'Q', 'K' };
const bitboard RankMasks[ 8 ] = { 0xff,0xff00,0xff0000,0xff000000,0xff00000000,0xff0000000000,0xff000000000000,0xff00000000000000 };
const bitboard FileMasks[ 8 ] = { 0x101010101010101,0x202020202020202,0x404040404040404,0x808080808080808,0x1010101010101010,0x2020202020202020,0x4040404040404040,0x8080808080808080 };