1 /** 2 Whirlpool hashing algorithm implementation. This module conforms to the APIs defined in std.digest.digest. 3 4 Based on the original Whirlpool implementation by Paulo S.L.M. Barreto and Vincent Rijmen. 5 */ 6 module digestx.whirlpool; 7 8 9 public import std.digest.digest; 10 import std.range; 11 12 13 /** 14 * Template API Whirlpool implementation. 15 */ 16 struct Whirlpool 17 { 18 /// Initializes the digest calculation. 19 void start() @safe pure nothrow @nogc 20 { 21 _lenBuf = 0; 22 _bufferPos = 0; 23 _hash[] = 0; 24 _tailBlock = false; 25 _bitLength[] = 0; 26 } 27 28 /// Feed the digest with data. 29 void put(scope const(ubyte)[] data...) @trusted pure nothrow @nogc 30 { 31 bufLength(data.length); 32 33 while (true) 34 { 35 immutable cap = _buffer.length - _bufferPos; 36 if (cap <= data.length) 37 { 38 _buffer[_bufferPos .. $] = data[0 .. cap]; 39 processBuffer(); 40 _bufferPos = 0; 41 42 data = data[cap .. $]; 43 } 44 else 45 { 46 _buffer[_bufferPos .. _bufferPos + data.length] = data; 47 _bufferPos += data.length; 48 49 data = null; 50 break; 51 } 52 } 53 } 54 55 void put(R)(R r) if (isInputRange!R && hasLength!R) 56 { 57 bufLength(r.length); 58 59 foreach (immutable i; r) 60 { 61 _buffer[_bufferPos] = i; 62 _bufferPos++; 63 if (_bufferPos == _buffer.length) 64 { 65 processBuffer(); 66 _bufferPos = 0; 67 } 68 } 69 } 70 71 /// Returns the Whirlpool hash. This also calls start to reset the internal state. 72 ubyte[64] finish() @trusted pure nothrow @nogc 73 { 74 // append a '1'-bit 75 // As the buffer is byte-wise in this implementation, _buffer[_bufferPos] is not used yet. 76 _buffer[_bufferPos] = 0x80; 77 _bufferPos++; 78 79 if (_bufferPos > 32) 80 { 81 _buffer[_bufferPos .. $] = 0; 82 processBuffer(); 83 _bufferPos = 0; 84 } 85 86 if (_bufferPos < 32) _buffer[_bufferPos .. 32] = 0; 87 if (_lenBuf != 0) addLength(_lenBuf); 88 _buffer[32 .. $] = _bitLength; 89 processBuffer(); 90 91 ubyte[64] digest = void; 92 93 for (int i = 0, j = 0; i < 8; i++, j += 8) 94 { 95 immutable h = _hash[i]; 96 digest[j ] = cast(ubyte)(h >> 56); 97 digest[j + 1] = cast(ubyte)(h >> 48); 98 digest[j + 2] = cast(ubyte)(h >> 40); 99 digest[j + 3] = cast(ubyte)(h >> 32); 100 digest[j + 4] = cast(ubyte)(h >> 24); 101 digest[j + 5] = cast(ubyte)(h >> 16); 102 digest[j + 6] = cast(ubyte)(h >> 8); 103 digest[j + 7] = cast(ubyte)h; 104 } 105 106 start(); 107 108 return digest; 109 } 110 111 private: 112 113 // buffers sum of data length and add into _bitLength when necessary, 114 // to reduce bignum operation. 115 ulong _lenBuf = void; 116 117 void bufLength(ulong bytes) @safe pure nothrow @nogc 118 { 119 ulong sum = _lenBuf + bytes; 120 if (sum < _lenBuf || sum < bytes) 121 { 122 addLength(_lenBuf); 123 _lenBuf = bytes; 124 } 125 else 126 { 127 _lenBuf = sum; 128 } 129 } 130 131 ubyte[32] _bitLength = void; 132 133 void addLength(ulong bytes) @trusted pure nothrow @nogc 134 { 135 uint carry = _bitLength[31] + ((bytes << 3) & 0xFF); 136 _bitLength[31] = cast(ubyte)carry; 137 carry >>= 8; 138 bytes >>= 5; 139 for (int i = 30; i >= 0; i--) 140 { 141 carry += _bitLength[i] + (bytes & 0xFF); 142 _bitLength[i] = cast(ubyte)carry; 143 carry >>= 8; 144 bytes >>= 8; 145 } 146 } 147 148 ubyte[64] _buffer = void; 149 size_t _bufferPos = void; 150 151 ulong[8] _hash = void; 152 153 bool _tailBlock; 154 155 void processBuffer() @trusted pure nothrow @nogc 156 { 157 ulong[8] block = void; 158 159 // map the buffer to a block 160 for (int i = 0, j = 0; i < 8; i++, j += 8) 161 { 162 block[i] = 163 (cast(ulong)_buffer[j ] << 56) ^ 164 (cast(ulong)_buffer[j + 1] << 48) ^ 165 (cast(ulong)_buffer[j + 2] << 40) ^ 166 (cast(ulong)_buffer[j + 3] << 32) ^ 167 (cast(ulong)_buffer[j + 4] << 24) ^ 168 (cast(ulong)_buffer[j + 5] << 16) ^ 169 (cast(ulong)_buffer[j + 6] << 8) ^ 170 (cast(ulong)_buffer[j + 7] ); 171 } 172 173 // compute and apply K^0 to the cipher state 174 ulong[8] state = void; 175 state[] = block[] ^ _hash[]; 176 177 // iterate over all rounds 178 if (_tailBlock) // not the first block 179 { 180 ulong[8] K = _hash; 181 182 foreach (immutable rcr; rc) 183 { 184 ulong[8] L = void; 185 186 // compute K^r from K^{r-1} 187 mixin(genTransform("L", "K")); 188 L[0] ^= rcr; 189 190 K = L; 191 192 // apply the r-th round transformation 193 mixin(genTransform("L", "state")); 194 195 state[] = L[] ^ K[]; 196 } 197 } 198 else // use precompiled K[] for first block 199 { 200 foreach (immutable k; pcK) 201 { 202 ulong[8] L = void; 203 mixin(genTransform("L", "state")); 204 state[] = L[] ^ k[]; 205 } 206 207 _tailBlock = true; 208 } 209 210 // apply the Miyaguchi-Preneel compression function: 211 _hash[] ^= state[] ^ block[]; 212 } 213 } 214 215 /// Convenience alias for digest function in std.digest.digest using the Whirlpool implementation. 216 auto whirlpoolOf(T...)(T data) 217 { 218 return digest!(Whirlpool, T)(data); 219 } 220 221 /// OOP API for Whirlpool 222 alias WhirlpoolDigest = WrapperDigest!Whirlpool; 223 224 /// 225 unittest 226 { 227 import digestx.whirlpool; 228 229 ubyte[1024] data; 230 Whirlpool wp; 231 wp.start(); 232 wp.put(data[]); 233 wp.start(); 234 wp.put(data[]); 235 ubyte[64] hash = wp.finish(); 236 237 // Template API 238 239 ubyte[64] hash2 = whirlpoolOf("abc"); 240 assert(digest!Whirlpool("abc") == hash2); 241 assert(hexDigest!Whirlpool("abc") == toHexString(hash2)); 242 243 // OOP API 244 245 Digest wpDigest = new WhirlpoolDigest; 246 ubyte[] hash3 = wpDigest.digest("abc"); 247 assert(toHexString(hash3) == "4E2448A4C6F486BB16B6562C73B4020BF3043E3A731BCE721AE1B303D97E6D4C" ~ 248 "7181EEBDB6C57E277D0E34957114CBD6C797FC9D95D8B582D225292076D4EEF5"); 249 } 250 251 @safe pure nothrow @nogc 252 unittest 253 { 254 static assert(isDigest!Whirlpool); 255 256 assert(digest!Whirlpool("The quick brown fox jumps over the lazy dog") == 257 x"B97DE512E91E3828B40D2B0FDCE9CEB3C4A71F9BEA8D88E75C4FA854DF36725F" ~ 258 x"D2B52EB6544EDCACD6F8BEDDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35"); 259 260 // ISO test vectors 261 262 assert(digest!Whirlpool("") == 263 x"19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A7" ~ 264 x"3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3"); 265 266 assert(digest!Whirlpool("a") == 267 x"8ACA2602792AEC6F11A67206531FB7D7F0DFF59413145E6973C45001D0087B42" ~ 268 x"D11BC645413AEFF63A42391A39145A591A92200D560195E53B478584FDAE231A"); 269 270 assert(digest!Whirlpool("abc") == 271 x"4E2448A4C6F486BB16B6562C73B4020BF3043E3A731BCE721AE1B303D97E6D4C" ~ 272 x"7181EEBDB6C57E277D0E34957114CBD6C797FC9D95D8B582D225292076D4EEF5"); 273 274 assert(digest!Whirlpool("message digest") == 275 x"378C84A4126E2DC6E56DCC7458377AAC838D00032230F53CE1F5700C0FFB4D3B" ~ 276 x"8421557659EF55C106B4B52AC5A4AAA692ED920052838F3362E86DBD37A8903E"); 277 278 assert(digest!Whirlpool("abcdefghijklmnopqrstuvwxyz") == 279 x"F1D754662636FFE92C82EBB9212A484A8D38631EAD4238F5442EE13B8054E41B" ~ 280 x"08BF2A9251C30B6A0B8AAE86177AB4A6F68F673E7207865D5D9819A3DBA4EB3B"); 281 282 assert(digest!Whirlpool("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") == 283 x"DC37E008CF9EE69BF11F00ED9ABA26901DD7C28CDEC066CC6AF42E40F82F3A1E" ~ 284 x"08EBA26629129D8FB7CB57211B9281A65517CC879D7B962142C65F5A7AF01467"); 285 286 assert(digest!Whirlpool("1234567890123456789012345678901234567890" ~ 287 "1234567890123456789012345678901234567890") == 288 x"466EF18BABB0154D25B9D38A6414F5C08784372BCCB204D6549C4AFADB601429" ~ 289 x"4D5BD8DF2A6C44E538CD047B2681A51A2C60481E88C5A20B2C2A80CF3A9A083B"); 290 291 assert(digest!Whirlpool("abcdbcdecdefdefgefghfghighijhijk") == 292 x"2A987EA40F917061F5D6F0A0E4644F488A7A5A52DEEE656207C562F988E95C69" ~ 293 x"16BDC8031BC5BE1B7B947639FE050B56939BAAA0ADFF9AE6745B7B181C3BE3FD"); 294 } 295 296 pure nothrow @nogc 297 unittest 298 { 299 import std.range : repeat; 300 assert(digest!Whirlpool(repeat('a', 10 ^^ 6)) == 301 x"0C99005BEB57EFF50A7CF005560DDF5D29057FD86B20BFD62DECA0F1CCEA4AF5" ~ 302 x"1FC15490EDDC47AF32BB2B66C34FF9AD8C6008AD677F77126953B226E4ED8B01"); 303 } 304 305 @safe pure nothrow @nogc 306 unittest 307 { 308 import std..string : representation; 309 310 Whirlpool wp; 311 wp.put(representation("abc")); 312 wp.start(); 313 wp.put(representation("abc")); 314 assert(wp.finish() == 315 x"4E2448A4C6F486BB16B6562C73B4020BF3043E3A731BCE721AE1B303D97E6D4C" ~ 316 x"7181EEBDB6C57E277D0E34957114CBD6C797FC9D95D8B582D225292076D4EEF5"); 317 } 318 319 320 private: 321 322 string genTransform(string assignTo, string from) 323 { 324 import std..string : format; 325 326 string ret; 327 foreach (i; 0 .. 8) 328 { 329 ret ~= format("%s[%s]=", assignTo, i); 330 for (int t = 0, s = 56; t < 8; t++, s -= 8) 331 { 332 ret ~= format("C[%s][(%s[%s] >> %s) & 0xFF]", t, from, (i - t) & 7, s); 333 if (t != 7) ret ~= "^"; 334 } 335 ret ~= ";\n"; 336 } 337 return ret; 338 } 339 340 341 // number of rounds 342 enum int numRounds = 10; 343 344 345 // circulant table 346 immutable ulong[256][8] C = [[ 347 0x18186018c07830d8UL, 0x23238c2305af4626UL, 0xc6c63fc67ef991b8UL, 0xe8e887e8136fcdfbUL, 348 0x878726874ca113cbUL, 0xb8b8dab8a9626d11UL, 0x0101040108050209UL, 0x4f4f214f426e9e0dUL, 349 0x3636d836adee6c9bUL, 0xa6a6a2a6590451ffUL, 0xd2d26fd2debdb90cUL, 0xf5f5f3f5fb06f70eUL, 350 0x7979f979ef80f296UL, 0x6f6fa16f5fcede30UL, 0x91917e91fcef3f6dUL, 0x52525552aa07a4f8UL, 351 0x60609d6027fdc047UL, 0xbcbccabc89766535UL, 0x9b9b569baccd2b37UL, 0x8e8e028e048c018aUL, 352 0xa3a3b6a371155bd2UL, 0x0c0c300c603c186cUL, 0x7b7bf17bff8af684UL, 0x3535d435b5e16a80UL, 353 0x1d1d741de8693af5UL, 0xe0e0a7e05347ddb3UL, 0xd7d77bd7f6acb321UL, 0xc2c22fc25eed999cUL, 354 0x2e2eb82e6d965c43UL, 0x4b4b314b627a9629UL, 0xfefedffea321e15dUL, 0x575741578216aed5UL, 355 0x15155415a8412abdUL, 0x7777c1779fb6eee8UL, 0x3737dc37a5eb6e92UL, 0xe5e5b3e57b56d79eUL, 356 0x9f9f469f8cd92313UL, 0xf0f0e7f0d317fd23UL, 0x4a4a354a6a7f9420UL, 0xdada4fda9e95a944UL, 357 0x58587d58fa25b0a2UL, 0xc9c903c906ca8fcfUL, 0x2929a429558d527cUL, 0x0a0a280a5022145aUL, 358 0xb1b1feb1e14f7f50UL, 0xa0a0baa0691a5dc9UL, 0x6b6bb16b7fdad614UL, 0x85852e855cab17d9UL, 359 0xbdbdcebd8173673cUL, 0x5d5d695dd234ba8fUL, 0x1010401080502090UL, 0xf4f4f7f4f303f507UL, 360 0xcbcb0bcb16c08bddUL, 0x3e3ef83eedc67cd3UL, 0x0505140528110a2dUL, 0x676781671fe6ce78UL, 361 0xe4e4b7e47353d597UL, 0x27279c2725bb4e02UL, 0x4141194132588273UL, 0x8b8b168b2c9d0ba7UL, 362 0xa7a7a6a7510153f6UL, 0x7d7de97dcf94fab2UL, 0x95956e95dcfb3749UL, 0xd8d847d88e9fad56UL, 363 0xfbfbcbfb8b30eb70UL, 0xeeee9fee2371c1cdUL, 0x7c7ced7cc791f8bbUL, 0x6666856617e3cc71UL, 364 0xdddd53dda68ea77bUL, 0x17175c17b84b2eafUL, 0x4747014702468e45UL, 0x9e9e429e84dc211aUL, 365 0xcaca0fca1ec589d4UL, 0x2d2db42d75995a58UL, 0xbfbfc6bf9179632eUL, 0x07071c07381b0e3fUL, 366 0xadad8ead012347acUL, 0x5a5a755aea2fb4b0UL, 0x838336836cb51befUL, 0x3333cc3385ff66b6UL, 367 0x636391633ff2c65cUL, 0x02020802100a0412UL, 0xaaaa92aa39384993UL, 0x7171d971afa8e2deUL, 368 0xc8c807c80ecf8dc6UL, 0x19196419c87d32d1UL, 0x494939497270923bUL, 0xd9d943d9869aaf5fUL, 369 0xf2f2eff2c31df931UL, 0xe3e3abe34b48dba8UL, 0x5b5b715be22ab6b9UL, 0x88881a8834920dbcUL, 370 0x9a9a529aa4c8293eUL, 0x262698262dbe4c0bUL, 0x3232c8328dfa64bfUL, 0xb0b0fab0e94a7d59UL, 371 0xe9e983e91b6acff2UL, 0x0f0f3c0f78331e77UL, 0xd5d573d5e6a6b733UL, 0x80803a8074ba1df4UL, 372 0xbebec2be997c6127UL, 0xcdcd13cd26de87ebUL, 0x3434d034bde46889UL, 0x48483d487a759032UL, 373 0xffffdbffab24e354UL, 0x7a7af57af78ff48dUL, 0x90907a90f4ea3d64UL, 0x5f5f615fc23ebe9dUL, 374 0x202080201da0403dUL, 0x6868bd6867d5d00fUL, 0x1a1a681ad07234caUL, 0xaeae82ae192c41b7UL, 375 0xb4b4eab4c95e757dUL, 0x54544d549a19a8ceUL, 0x93937693ece53b7fUL, 0x222288220daa442fUL, 376 0x64648d6407e9c863UL, 0xf1f1e3f1db12ff2aUL, 0x7373d173bfa2e6ccUL, 0x12124812905a2482UL, 377 0x40401d403a5d807aUL, 0x0808200840281048UL, 0xc3c32bc356e89b95UL, 0xecec97ec337bc5dfUL, 378 0xdbdb4bdb9690ab4dUL, 0xa1a1bea1611f5fc0UL, 0x8d8d0e8d1c830791UL, 0x3d3df43df5c97ac8UL, 379 0x97976697ccf1335bUL, 0x0000000000000000UL, 0xcfcf1bcf36d483f9UL, 0x2b2bac2b4587566eUL, 380 0x7676c57697b3ece1UL, 0x8282328264b019e6UL, 0xd6d67fd6fea9b128UL, 0x1b1b6c1bd87736c3UL, 381 0xb5b5eeb5c15b7774UL, 0xafaf86af112943beUL, 0x6a6ab56a77dfd41dUL, 0x50505d50ba0da0eaUL, 382 0x45450945124c8a57UL, 0xf3f3ebf3cb18fb38UL, 0x3030c0309df060adUL, 0xefef9bef2b74c3c4UL, 383 0x3f3ffc3fe5c37edaUL, 0x55554955921caac7UL, 0xa2a2b2a2791059dbUL, 0xeaea8fea0365c9e9UL, 384 0x656589650fecca6aUL, 0xbabad2bab9686903UL, 0x2f2fbc2f65935e4aUL, 0xc0c027c04ee79d8eUL, 385 0xdede5fdebe81a160UL, 0x1c1c701ce06c38fcUL, 0xfdfdd3fdbb2ee746UL, 0x4d4d294d52649a1fUL, 386 0x92927292e4e03976UL, 0x7575c9758fbceafaUL, 0x06061806301e0c36UL, 0x8a8a128a249809aeUL, 387 0xb2b2f2b2f940794bUL, 0xe6e6bfe66359d185UL, 0x0e0e380e70361c7eUL, 0x1f1f7c1ff8633ee7UL, 388 0x6262956237f7c455UL, 0xd4d477d4eea3b53aUL, 0xa8a89aa829324d81UL, 0x96966296c4f43152UL, 389 0xf9f9c3f99b3aef62UL, 0xc5c533c566f697a3UL, 0x2525942535b14a10UL, 0x59597959f220b2abUL, 390 0x84842a8454ae15d0UL, 0x7272d572b7a7e4c5UL, 0x3939e439d5dd72ecUL, 0x4c4c2d4c5a619816UL, 391 0x5e5e655eca3bbc94UL, 0x7878fd78e785f09fUL, 0x3838e038ddd870e5UL, 0x8c8c0a8c14860598UL, 392 0xd1d163d1c6b2bf17UL, 0xa5a5aea5410b57e4UL, 0xe2e2afe2434dd9a1UL, 0x616199612ff8c24eUL, 393 0xb3b3f6b3f1457b42UL, 0x2121842115a54234UL, 0x9c9c4a9c94d62508UL, 0x1e1e781ef0663ceeUL, 394 0x4343114322528661UL, 0xc7c73bc776fc93b1UL, 0xfcfcd7fcb32be54fUL, 0x0404100420140824UL, 395 0x51515951b208a2e3UL, 0x99995e99bcc72f25UL, 0x6d6da96d4fc4da22UL, 0x0d0d340d68391a65UL, 396 0xfafacffa8335e979UL, 0xdfdf5bdfb684a369UL, 0x7e7ee57ed79bfca9UL, 0x242490243db44819UL, 397 0x3b3bec3bc5d776feUL, 0xabab96ab313d4b9aUL, 0xcece1fce3ed181f0UL, 0x1111441188552299UL, 398 0x8f8f068f0c890383UL, 0x4e4e254e4a6b9c04UL, 0xb7b7e6b7d1517366UL, 0xebeb8beb0b60cbe0UL, 399 0x3c3cf03cfdcc78c1UL, 0x81813e817cbf1ffdUL, 0x94946a94d4fe3540UL, 0xf7f7fbf7eb0cf31cUL, 400 0xb9b9deb9a1676f18UL, 0x13134c13985f268bUL, 0x2c2cb02c7d9c5851UL, 0xd3d36bd3d6b8bb05UL, 401 0xe7e7bbe76b5cd38cUL, 0x6e6ea56e57cbdc39UL, 0xc4c437c46ef395aaUL, 0x03030c03180f061bUL, 402 0x565645568a13acdcUL, 0x44440d441a49885eUL, 0x7f7fe17fdf9efea0UL, 0xa9a99ea921374f88UL, 403 0x2a2aa82a4d825467UL, 0xbbbbd6bbb16d6b0aUL, 0xc1c123c146e29f87UL, 0x53535153a202a6f1UL, 404 0xdcdc57dcae8ba572UL, 0x0b0b2c0b58271653UL, 0x9d9d4e9d9cd32701UL, 0x6c6cad6c47c1d82bUL, 405 0x3131c43195f562a4UL, 0x7474cd7487b9e8f3UL, 0xf6f6fff6e309f115UL, 0x464605460a438c4cUL, 406 0xacac8aac092645a5UL, 0x89891e893c970fb5UL, 0x14145014a04428b4UL, 0xe1e1a3e15b42dfbaUL, 407 0x16165816b04e2ca6UL, 0x3a3ae83acdd274f7UL, 0x6969b9696fd0d206UL, 0x09092409482d1241UL, 408 0x7070dd70a7ade0d7UL, 0xb6b6e2b6d954716fUL, 0xd0d067d0ceb7bd1eUL, 0xeded93ed3b7ec7d6UL, 409 0xcccc17cc2edb85e2UL, 0x424215422a578468UL, 0x98985a98b4c22d2cUL, 0xa4a4aaa4490e55edUL, 410 0x2828a0285d885075UL, 0x5c5c6d5cda31b886UL, 0xf8f8c7f8933fed6bUL, 0x8686228644a411c2UL, 411 ], [ 412 0xd818186018c07830UL, 0x2623238c2305af46UL, 0xb8c6c63fc67ef991UL, 0xfbe8e887e8136fcdUL, 413 0xcb878726874ca113UL, 0x11b8b8dab8a9626dUL, 0x0901010401080502UL, 0x0d4f4f214f426e9eUL, 414 0x9b3636d836adee6cUL, 0xffa6a6a2a6590451UL, 0x0cd2d26fd2debdb9UL, 0x0ef5f5f3f5fb06f7UL, 415 0x967979f979ef80f2UL, 0x306f6fa16f5fcedeUL, 0x6d91917e91fcef3fUL, 0xf852525552aa07a4UL, 416 0x4760609d6027fdc0UL, 0x35bcbccabc897665UL, 0x379b9b569baccd2bUL, 0x8a8e8e028e048c01UL, 417 0xd2a3a3b6a371155bUL, 0x6c0c0c300c603c18UL, 0x847b7bf17bff8af6UL, 0x803535d435b5e16aUL, 418 0xf51d1d741de8693aUL, 0xb3e0e0a7e05347ddUL, 0x21d7d77bd7f6acb3UL, 0x9cc2c22fc25eed99UL, 419 0x432e2eb82e6d965cUL, 0x294b4b314b627a96UL, 0x5dfefedffea321e1UL, 0xd5575741578216aeUL, 420 0xbd15155415a8412aUL, 0xe87777c1779fb6eeUL, 0x923737dc37a5eb6eUL, 0x9ee5e5b3e57b56d7UL, 421 0x139f9f469f8cd923UL, 0x23f0f0e7f0d317fdUL, 0x204a4a354a6a7f94UL, 0x44dada4fda9e95a9UL, 422 0xa258587d58fa25b0UL, 0xcfc9c903c906ca8fUL, 0x7c2929a429558d52UL, 0x5a0a0a280a502214UL, 423 0x50b1b1feb1e14f7fUL, 0xc9a0a0baa0691a5dUL, 0x146b6bb16b7fdad6UL, 0xd985852e855cab17UL, 424 0x3cbdbdcebd817367UL, 0x8f5d5d695dd234baUL, 0x9010104010805020UL, 0x07f4f4f7f4f303f5UL, 425 0xddcbcb0bcb16c08bUL, 0xd33e3ef83eedc67cUL, 0x2d0505140528110aUL, 0x78676781671fe6ceUL, 426 0x97e4e4b7e47353d5UL, 0x0227279c2725bb4eUL, 0x7341411941325882UL, 0xa78b8b168b2c9d0bUL, 427 0xf6a7a7a6a7510153UL, 0xb27d7de97dcf94faUL, 0x4995956e95dcfb37UL, 0x56d8d847d88e9fadUL, 428 0x70fbfbcbfb8b30ebUL, 0xcdeeee9fee2371c1UL, 0xbb7c7ced7cc791f8UL, 0x716666856617e3ccUL, 429 0x7bdddd53dda68ea7UL, 0xaf17175c17b84b2eUL, 0x454747014702468eUL, 0x1a9e9e429e84dc21UL, 430 0xd4caca0fca1ec589UL, 0x582d2db42d75995aUL, 0x2ebfbfc6bf917963UL, 0x3f07071c07381b0eUL, 431 0xacadad8ead012347UL, 0xb05a5a755aea2fb4UL, 0xef838336836cb51bUL, 0xb63333cc3385ff66UL, 432 0x5c636391633ff2c6UL, 0x1202020802100a04UL, 0x93aaaa92aa393849UL, 0xde7171d971afa8e2UL, 433 0xc6c8c807c80ecf8dUL, 0xd119196419c87d32UL, 0x3b49493949727092UL, 0x5fd9d943d9869aafUL, 434 0x31f2f2eff2c31df9UL, 0xa8e3e3abe34b48dbUL, 0xb95b5b715be22ab6UL, 0xbc88881a8834920dUL, 435 0x3e9a9a529aa4c829UL, 0x0b262698262dbe4cUL, 0xbf3232c8328dfa64UL, 0x59b0b0fab0e94a7dUL, 436 0xf2e9e983e91b6acfUL, 0x770f0f3c0f78331eUL, 0x33d5d573d5e6a6b7UL, 0xf480803a8074ba1dUL, 437 0x27bebec2be997c61UL, 0xebcdcd13cd26de87UL, 0x893434d034bde468UL, 0x3248483d487a7590UL, 438 0x54ffffdbffab24e3UL, 0x8d7a7af57af78ff4UL, 0x6490907a90f4ea3dUL, 0x9d5f5f615fc23ebeUL, 439 0x3d202080201da040UL, 0x0f6868bd6867d5d0UL, 0xca1a1a681ad07234UL, 0xb7aeae82ae192c41UL, 440 0x7db4b4eab4c95e75UL, 0xce54544d549a19a8UL, 0x7f93937693ece53bUL, 0x2f222288220daa44UL, 441 0x6364648d6407e9c8UL, 0x2af1f1e3f1db12ffUL, 0xcc7373d173bfa2e6UL, 0x8212124812905a24UL, 442 0x7a40401d403a5d80UL, 0x4808082008402810UL, 0x95c3c32bc356e89bUL, 0xdfecec97ec337bc5UL, 443 0x4ddbdb4bdb9690abUL, 0xc0a1a1bea1611f5fUL, 0x918d8d0e8d1c8307UL, 0xc83d3df43df5c97aUL, 444 0x5b97976697ccf133UL, 0x0000000000000000UL, 0xf9cfcf1bcf36d483UL, 0x6e2b2bac2b458756UL, 445 0xe17676c57697b3ecUL, 0xe68282328264b019UL, 0x28d6d67fd6fea9b1UL, 0xc31b1b6c1bd87736UL, 446 0x74b5b5eeb5c15b77UL, 0xbeafaf86af112943UL, 0x1d6a6ab56a77dfd4UL, 0xea50505d50ba0da0UL, 447 0x5745450945124c8aUL, 0x38f3f3ebf3cb18fbUL, 0xad3030c0309df060UL, 0xc4efef9bef2b74c3UL, 448 0xda3f3ffc3fe5c37eUL, 0xc755554955921caaUL, 0xdba2a2b2a2791059UL, 0xe9eaea8fea0365c9UL, 449 0x6a656589650feccaUL, 0x03babad2bab96869UL, 0x4a2f2fbc2f65935eUL, 0x8ec0c027c04ee79dUL, 450 0x60dede5fdebe81a1UL, 0xfc1c1c701ce06c38UL, 0x46fdfdd3fdbb2ee7UL, 0x1f4d4d294d52649aUL, 451 0x7692927292e4e039UL, 0xfa7575c9758fbceaUL, 0x3606061806301e0cUL, 0xae8a8a128a249809UL, 452 0x4bb2b2f2b2f94079UL, 0x85e6e6bfe66359d1UL, 0x7e0e0e380e70361cUL, 0xe71f1f7c1ff8633eUL, 453 0x556262956237f7c4UL, 0x3ad4d477d4eea3b5UL, 0x81a8a89aa829324dUL, 0x5296966296c4f431UL, 454 0x62f9f9c3f99b3aefUL, 0xa3c5c533c566f697UL, 0x102525942535b14aUL, 0xab59597959f220b2UL, 455 0xd084842a8454ae15UL, 0xc57272d572b7a7e4UL, 0xec3939e439d5dd72UL, 0x164c4c2d4c5a6198UL, 456 0x945e5e655eca3bbcUL, 0x9f7878fd78e785f0UL, 0xe53838e038ddd870UL, 0x988c8c0a8c148605UL, 457 0x17d1d163d1c6b2bfUL, 0xe4a5a5aea5410b57UL, 0xa1e2e2afe2434dd9UL, 0x4e616199612ff8c2UL, 458 0x42b3b3f6b3f1457bUL, 0x342121842115a542UL, 0x089c9c4a9c94d625UL, 0xee1e1e781ef0663cUL, 459 0x6143431143225286UL, 0xb1c7c73bc776fc93UL, 0x4ffcfcd7fcb32be5UL, 0x2404041004201408UL, 460 0xe351515951b208a2UL, 0x2599995e99bcc72fUL, 0x226d6da96d4fc4daUL, 0x650d0d340d68391aUL, 461 0x79fafacffa8335e9UL, 0x69dfdf5bdfb684a3UL, 0xa97e7ee57ed79bfcUL, 0x19242490243db448UL, 462 0xfe3b3bec3bc5d776UL, 0x9aabab96ab313d4bUL, 0xf0cece1fce3ed181UL, 0x9911114411885522UL, 463 0x838f8f068f0c8903UL, 0x044e4e254e4a6b9cUL, 0x66b7b7e6b7d15173UL, 0xe0ebeb8beb0b60cbUL, 464 0xc13c3cf03cfdcc78UL, 0xfd81813e817cbf1fUL, 0x4094946a94d4fe35UL, 0x1cf7f7fbf7eb0cf3UL, 465 0x18b9b9deb9a1676fUL, 0x8b13134c13985f26UL, 0x512c2cb02c7d9c58UL, 0x05d3d36bd3d6b8bbUL, 466 0x8ce7e7bbe76b5cd3UL, 0x396e6ea56e57cbdcUL, 0xaac4c437c46ef395UL, 0x1b03030c03180f06UL, 467 0xdc565645568a13acUL, 0x5e44440d441a4988UL, 0xa07f7fe17fdf9efeUL, 0x88a9a99ea921374fUL, 468 0x672a2aa82a4d8254UL, 0x0abbbbd6bbb16d6bUL, 0x87c1c123c146e29fUL, 0xf153535153a202a6UL, 469 0x72dcdc57dcae8ba5UL, 0x530b0b2c0b582716UL, 0x019d9d4e9d9cd327UL, 0x2b6c6cad6c47c1d8UL, 470 0xa43131c43195f562UL, 0xf37474cd7487b9e8UL, 0x15f6f6fff6e309f1UL, 0x4c464605460a438cUL, 471 0xa5acac8aac092645UL, 0xb589891e893c970fUL, 0xb414145014a04428UL, 0xbae1e1a3e15b42dfUL, 472 0xa616165816b04e2cUL, 0xf73a3ae83acdd274UL, 0x066969b9696fd0d2UL, 0x4109092409482d12UL, 473 0xd77070dd70a7ade0UL, 0x6fb6b6e2b6d95471UL, 0x1ed0d067d0ceb7bdUL, 0xd6eded93ed3b7ec7UL, 474 0xe2cccc17cc2edb85UL, 0x68424215422a5784UL, 0x2c98985a98b4c22dUL, 0xeda4a4aaa4490e55UL, 475 0x752828a0285d8850UL, 0x865c5c6d5cda31b8UL, 0x6bf8f8c7f8933fedUL, 0xc28686228644a411UL, 476 ], [ 477 0x30d818186018c078UL, 0x462623238c2305afUL, 0x91b8c6c63fc67ef9UL, 0xcdfbe8e887e8136fUL, 478 0x13cb878726874ca1UL, 0x6d11b8b8dab8a962UL, 0x0209010104010805UL, 0x9e0d4f4f214f426eUL, 479 0x6c9b3636d836adeeUL, 0x51ffa6a6a2a65904UL, 0xb90cd2d26fd2debdUL, 0xf70ef5f5f3f5fb06UL, 480 0xf2967979f979ef80UL, 0xde306f6fa16f5fceUL, 0x3f6d91917e91fcefUL, 0xa4f852525552aa07UL, 481 0xc04760609d6027fdUL, 0x6535bcbccabc8976UL, 0x2b379b9b569baccdUL, 0x018a8e8e028e048cUL, 482 0x5bd2a3a3b6a37115UL, 0x186c0c0c300c603cUL, 0xf6847b7bf17bff8aUL, 0x6a803535d435b5e1UL, 483 0x3af51d1d741de869UL, 0xddb3e0e0a7e05347UL, 0xb321d7d77bd7f6acUL, 0x999cc2c22fc25eedUL, 484 0x5c432e2eb82e6d96UL, 0x96294b4b314b627aUL, 0xe15dfefedffea321UL, 0xaed5575741578216UL, 485 0x2abd15155415a841UL, 0xeee87777c1779fb6UL, 0x6e923737dc37a5ebUL, 0xd79ee5e5b3e57b56UL, 486 0x23139f9f469f8cd9UL, 0xfd23f0f0e7f0d317UL, 0x94204a4a354a6a7fUL, 0xa944dada4fda9e95UL, 487 0xb0a258587d58fa25UL, 0x8fcfc9c903c906caUL, 0x527c2929a429558dUL, 0x145a0a0a280a5022UL, 488 0x7f50b1b1feb1e14fUL, 0x5dc9a0a0baa0691aUL, 0xd6146b6bb16b7fdaUL, 0x17d985852e855cabUL, 489 0x673cbdbdcebd8173UL, 0xba8f5d5d695dd234UL, 0x2090101040108050UL, 0xf507f4f4f7f4f303UL, 490 0x8bddcbcb0bcb16c0UL, 0x7cd33e3ef83eedc6UL, 0x0a2d050514052811UL, 0xce78676781671fe6UL, 491 0xd597e4e4b7e47353UL, 0x4e0227279c2725bbUL, 0x8273414119413258UL, 0x0ba78b8b168b2c9dUL, 492 0x53f6a7a7a6a75101UL, 0xfab27d7de97dcf94UL, 0x374995956e95dcfbUL, 0xad56d8d847d88e9fUL, 493 0xeb70fbfbcbfb8b30UL, 0xc1cdeeee9fee2371UL, 0xf8bb7c7ced7cc791UL, 0xcc716666856617e3UL, 494 0xa77bdddd53dda68eUL, 0x2eaf17175c17b84bUL, 0x8e45474701470246UL, 0x211a9e9e429e84dcUL, 495 0x89d4caca0fca1ec5UL, 0x5a582d2db42d7599UL, 0x632ebfbfc6bf9179UL, 0x0e3f07071c07381bUL, 496 0x47acadad8ead0123UL, 0xb4b05a5a755aea2fUL, 0x1bef838336836cb5UL, 0x66b63333cc3385ffUL, 497 0xc65c636391633ff2UL, 0x041202020802100aUL, 0x4993aaaa92aa3938UL, 0xe2de7171d971afa8UL, 498 0x8dc6c8c807c80ecfUL, 0x32d119196419c87dUL, 0x923b494939497270UL, 0xaf5fd9d943d9869aUL, 499 0xf931f2f2eff2c31dUL, 0xdba8e3e3abe34b48UL, 0xb6b95b5b715be22aUL, 0x0dbc88881a883492UL, 500 0x293e9a9a529aa4c8UL, 0x4c0b262698262dbeUL, 0x64bf3232c8328dfaUL, 0x7d59b0b0fab0e94aUL, 501 0xcff2e9e983e91b6aUL, 0x1e770f0f3c0f7833UL, 0xb733d5d573d5e6a6UL, 0x1df480803a8074baUL, 502 0x6127bebec2be997cUL, 0x87ebcdcd13cd26deUL, 0x68893434d034bde4UL, 0x903248483d487a75UL, 503 0xe354ffffdbffab24UL, 0xf48d7a7af57af78fUL, 0x3d6490907a90f4eaUL, 0xbe9d5f5f615fc23eUL, 504 0x403d202080201da0UL, 0xd00f6868bd6867d5UL, 0x34ca1a1a681ad072UL, 0x41b7aeae82ae192cUL, 505 0x757db4b4eab4c95eUL, 0xa8ce54544d549a19UL, 0x3b7f93937693ece5UL, 0x442f222288220daaUL, 506 0xc86364648d6407e9UL, 0xff2af1f1e3f1db12UL, 0xe6cc7373d173bfa2UL, 0x248212124812905aUL, 507 0x807a40401d403a5dUL, 0x1048080820084028UL, 0x9b95c3c32bc356e8UL, 0xc5dfecec97ec337bUL, 508 0xab4ddbdb4bdb9690UL, 0x5fc0a1a1bea1611fUL, 0x07918d8d0e8d1c83UL, 0x7ac83d3df43df5c9UL, 509 0x335b97976697ccf1UL, 0x0000000000000000UL, 0x83f9cfcf1bcf36d4UL, 0x566e2b2bac2b4587UL, 510 0xece17676c57697b3UL, 0x19e68282328264b0UL, 0xb128d6d67fd6fea9UL, 0x36c31b1b6c1bd877UL, 511 0x7774b5b5eeb5c15bUL, 0x43beafaf86af1129UL, 0xd41d6a6ab56a77dfUL, 0xa0ea50505d50ba0dUL, 512 0x8a5745450945124cUL, 0xfb38f3f3ebf3cb18UL, 0x60ad3030c0309df0UL, 0xc3c4efef9bef2b74UL, 513 0x7eda3f3ffc3fe5c3UL, 0xaac755554955921cUL, 0x59dba2a2b2a27910UL, 0xc9e9eaea8fea0365UL, 514 0xca6a656589650fecUL, 0x6903babad2bab968UL, 0x5e4a2f2fbc2f6593UL, 0x9d8ec0c027c04ee7UL, 515 0xa160dede5fdebe81UL, 0x38fc1c1c701ce06cUL, 0xe746fdfdd3fdbb2eUL, 0x9a1f4d4d294d5264UL, 516 0x397692927292e4e0UL, 0xeafa7575c9758fbcUL, 0x0c3606061806301eUL, 0x09ae8a8a128a2498UL, 517 0x794bb2b2f2b2f940UL, 0xd185e6e6bfe66359UL, 0x1c7e0e0e380e7036UL, 0x3ee71f1f7c1ff863UL, 518 0xc4556262956237f7UL, 0xb53ad4d477d4eea3UL, 0x4d81a8a89aa82932UL, 0x315296966296c4f4UL, 519 0xef62f9f9c3f99b3aUL, 0x97a3c5c533c566f6UL, 0x4a102525942535b1UL, 0xb2ab59597959f220UL, 520 0x15d084842a8454aeUL, 0xe4c57272d572b7a7UL, 0x72ec3939e439d5ddUL, 0x98164c4c2d4c5a61UL, 521 0xbc945e5e655eca3bUL, 0xf09f7878fd78e785UL, 0x70e53838e038ddd8UL, 0x05988c8c0a8c1486UL, 522 0xbf17d1d163d1c6b2UL, 0x57e4a5a5aea5410bUL, 0xd9a1e2e2afe2434dUL, 0xc24e616199612ff8UL, 523 0x7b42b3b3f6b3f145UL, 0x42342121842115a5UL, 0x25089c9c4a9c94d6UL, 0x3cee1e1e781ef066UL, 524 0x8661434311432252UL, 0x93b1c7c73bc776fcUL, 0xe54ffcfcd7fcb32bUL, 0x0824040410042014UL, 525 0xa2e351515951b208UL, 0x2f2599995e99bcc7UL, 0xda226d6da96d4fc4UL, 0x1a650d0d340d6839UL, 526 0xe979fafacffa8335UL, 0xa369dfdf5bdfb684UL, 0xfca97e7ee57ed79bUL, 0x4819242490243db4UL, 527 0x76fe3b3bec3bc5d7UL, 0x4b9aabab96ab313dUL, 0x81f0cece1fce3ed1UL, 0x2299111144118855UL, 528 0x03838f8f068f0c89UL, 0x9c044e4e254e4a6bUL, 0x7366b7b7e6b7d151UL, 0xcbe0ebeb8beb0b60UL, 529 0x78c13c3cf03cfdccUL, 0x1ffd81813e817cbfUL, 0x354094946a94d4feUL, 0xf31cf7f7fbf7eb0cUL, 530 0x6f18b9b9deb9a167UL, 0x268b13134c13985fUL, 0x58512c2cb02c7d9cUL, 0xbb05d3d36bd3d6b8UL, 531 0xd38ce7e7bbe76b5cUL, 0xdc396e6ea56e57cbUL, 0x95aac4c437c46ef3UL, 0x061b03030c03180fUL, 532 0xacdc565645568a13UL, 0x885e44440d441a49UL, 0xfea07f7fe17fdf9eUL, 0x4f88a9a99ea92137UL, 533 0x54672a2aa82a4d82UL, 0x6b0abbbbd6bbb16dUL, 0x9f87c1c123c146e2UL, 0xa6f153535153a202UL, 534 0xa572dcdc57dcae8bUL, 0x16530b0b2c0b5827UL, 0x27019d9d4e9d9cd3UL, 0xd82b6c6cad6c47c1UL, 535 0x62a43131c43195f5UL, 0xe8f37474cd7487b9UL, 0xf115f6f6fff6e309UL, 0x8c4c464605460a43UL, 536 0x45a5acac8aac0926UL, 0x0fb589891e893c97UL, 0x28b414145014a044UL, 0xdfbae1e1a3e15b42UL, 537 0x2ca616165816b04eUL, 0x74f73a3ae83acdd2UL, 0xd2066969b9696fd0UL, 0x124109092409482dUL, 538 0xe0d77070dd70a7adUL, 0x716fb6b6e2b6d954UL, 0xbd1ed0d067d0ceb7UL, 0xc7d6eded93ed3b7eUL, 539 0x85e2cccc17cc2edbUL, 0x8468424215422a57UL, 0x2d2c98985a98b4c2UL, 0x55eda4a4aaa4490eUL, 540 0x50752828a0285d88UL, 0xb8865c5c6d5cda31UL, 0xed6bf8f8c7f8933fUL, 0x11c28686228644a4UL, 541 ], [ 542 0x7830d818186018c0UL, 0xaf462623238c2305UL, 0xf991b8c6c63fc67eUL, 0x6fcdfbe8e887e813UL, 543 0xa113cb878726874cUL, 0x626d11b8b8dab8a9UL, 0x0502090101040108UL, 0x6e9e0d4f4f214f42UL, 544 0xee6c9b3636d836adUL, 0x0451ffa6a6a2a659UL, 0xbdb90cd2d26fd2deUL, 0x06f70ef5f5f3f5fbUL, 545 0x80f2967979f979efUL, 0xcede306f6fa16f5fUL, 0xef3f6d91917e91fcUL, 0x07a4f852525552aaUL, 546 0xfdc04760609d6027UL, 0x766535bcbccabc89UL, 0xcd2b379b9b569bacUL, 0x8c018a8e8e028e04UL, 547 0x155bd2a3a3b6a371UL, 0x3c186c0c0c300c60UL, 0x8af6847b7bf17bffUL, 0xe16a803535d435b5UL, 548 0x693af51d1d741de8UL, 0x47ddb3e0e0a7e053UL, 0xacb321d7d77bd7f6UL, 0xed999cc2c22fc25eUL, 549 0x965c432e2eb82e6dUL, 0x7a96294b4b314b62UL, 0x21e15dfefedffea3UL, 0x16aed55757415782UL, 550 0x412abd15155415a8UL, 0xb6eee87777c1779fUL, 0xeb6e923737dc37a5UL, 0x56d79ee5e5b3e57bUL, 551 0xd923139f9f469f8cUL, 0x17fd23f0f0e7f0d3UL, 0x7f94204a4a354a6aUL, 0x95a944dada4fda9eUL, 552 0x25b0a258587d58faUL, 0xca8fcfc9c903c906UL, 0x8d527c2929a42955UL, 0x22145a0a0a280a50UL, 553 0x4f7f50b1b1feb1e1UL, 0x1a5dc9a0a0baa069UL, 0xdad6146b6bb16b7fUL, 0xab17d985852e855cUL, 554 0x73673cbdbdcebd81UL, 0x34ba8f5d5d695dd2UL, 0x5020901010401080UL, 0x03f507f4f4f7f4f3UL, 555 0xc08bddcbcb0bcb16UL, 0xc67cd33e3ef83eedUL, 0x110a2d0505140528UL, 0xe6ce78676781671fUL, 556 0x53d597e4e4b7e473UL, 0xbb4e0227279c2725UL, 0x5882734141194132UL, 0x9d0ba78b8b168b2cUL, 557 0x0153f6a7a7a6a751UL, 0x94fab27d7de97dcfUL, 0xfb374995956e95dcUL, 0x9fad56d8d847d88eUL, 558 0x30eb70fbfbcbfb8bUL, 0x71c1cdeeee9fee23UL, 0x91f8bb7c7ced7cc7UL, 0xe3cc716666856617UL, 559 0x8ea77bdddd53dda6UL, 0x4b2eaf17175c17b8UL, 0x468e454747014702UL, 0xdc211a9e9e429e84UL, 560 0xc589d4caca0fca1eUL, 0x995a582d2db42d75UL, 0x79632ebfbfc6bf91UL, 0x1b0e3f07071c0738UL, 561 0x2347acadad8ead01UL, 0x2fb4b05a5a755aeaUL, 0xb51bef838336836cUL, 0xff66b63333cc3385UL, 562 0xf2c65c636391633fUL, 0x0a04120202080210UL, 0x384993aaaa92aa39UL, 0xa8e2de7171d971afUL, 563 0xcf8dc6c8c807c80eUL, 0x7d32d119196419c8UL, 0x70923b4949394972UL, 0x9aaf5fd9d943d986UL, 564 0x1df931f2f2eff2c3UL, 0x48dba8e3e3abe34bUL, 0x2ab6b95b5b715be2UL, 0x920dbc88881a8834UL, 565 0xc8293e9a9a529aa4UL, 0xbe4c0b262698262dUL, 0xfa64bf3232c8328dUL, 0x4a7d59b0b0fab0e9UL, 566 0x6acff2e9e983e91bUL, 0x331e770f0f3c0f78UL, 0xa6b733d5d573d5e6UL, 0xba1df480803a8074UL, 567 0x7c6127bebec2be99UL, 0xde87ebcdcd13cd26UL, 0xe468893434d034bdUL, 0x75903248483d487aUL, 568 0x24e354ffffdbffabUL, 0x8ff48d7a7af57af7UL, 0xea3d6490907a90f4UL, 0x3ebe9d5f5f615fc2UL, 569 0xa0403d202080201dUL, 0xd5d00f6868bd6867UL, 0x7234ca1a1a681ad0UL, 0x2c41b7aeae82ae19UL, 570 0x5e757db4b4eab4c9UL, 0x19a8ce54544d549aUL, 0xe53b7f93937693ecUL, 0xaa442f222288220dUL, 571 0xe9c86364648d6407UL, 0x12ff2af1f1e3f1dbUL, 0xa2e6cc7373d173bfUL, 0x5a24821212481290UL, 572 0x5d807a40401d403aUL, 0x2810480808200840UL, 0xe89b95c3c32bc356UL, 0x7bc5dfecec97ec33UL, 573 0x90ab4ddbdb4bdb96UL, 0x1f5fc0a1a1bea161UL, 0x8307918d8d0e8d1cUL, 0xc97ac83d3df43df5UL, 574 0xf1335b97976697ccUL, 0x0000000000000000UL, 0xd483f9cfcf1bcf36UL, 0x87566e2b2bac2b45UL, 575 0xb3ece17676c57697UL, 0xb019e68282328264UL, 0xa9b128d6d67fd6feUL, 0x7736c31b1b6c1bd8UL, 576 0x5b7774b5b5eeb5c1UL, 0x2943beafaf86af11UL, 0xdfd41d6a6ab56a77UL, 0x0da0ea50505d50baUL, 577 0x4c8a574545094512UL, 0x18fb38f3f3ebf3cbUL, 0xf060ad3030c0309dUL, 0x74c3c4efef9bef2bUL, 578 0xc37eda3f3ffc3fe5UL, 0x1caac75555495592UL, 0x1059dba2a2b2a279UL, 0x65c9e9eaea8fea03UL, 579 0xecca6a656589650fUL, 0x686903babad2bab9UL, 0x935e4a2f2fbc2f65UL, 0xe79d8ec0c027c04eUL, 580 0x81a160dede5fdebeUL, 0x6c38fc1c1c701ce0UL, 0x2ee746fdfdd3fdbbUL, 0x649a1f4d4d294d52UL, 581 0xe0397692927292e4UL, 0xbceafa7575c9758fUL, 0x1e0c360606180630UL, 0x9809ae8a8a128a24UL, 582 0x40794bb2b2f2b2f9UL, 0x59d185e6e6bfe663UL, 0x361c7e0e0e380e70UL, 0x633ee71f1f7c1ff8UL, 583 0xf7c4556262956237UL, 0xa3b53ad4d477d4eeUL, 0x324d81a8a89aa829UL, 0xf4315296966296c4UL, 584 0x3aef62f9f9c3f99bUL, 0xf697a3c5c533c566UL, 0xb14a102525942535UL, 0x20b2ab59597959f2UL, 585 0xae15d084842a8454UL, 0xa7e4c57272d572b7UL, 0xdd72ec3939e439d5UL, 0x6198164c4c2d4c5aUL, 586 0x3bbc945e5e655ecaUL, 0x85f09f7878fd78e7UL, 0xd870e53838e038ddUL, 0x8605988c8c0a8c14UL, 587 0xb2bf17d1d163d1c6UL, 0x0b57e4a5a5aea541UL, 0x4dd9a1e2e2afe243UL, 0xf8c24e616199612fUL, 588 0x457b42b3b3f6b3f1UL, 0xa542342121842115UL, 0xd625089c9c4a9c94UL, 0x663cee1e1e781ef0UL, 589 0x5286614343114322UL, 0xfc93b1c7c73bc776UL, 0x2be54ffcfcd7fcb3UL, 0x1408240404100420UL, 590 0x08a2e351515951b2UL, 0xc72f2599995e99bcUL, 0xc4da226d6da96d4fUL, 0x391a650d0d340d68UL, 591 0x35e979fafacffa83UL, 0x84a369dfdf5bdfb6UL, 0x9bfca97e7ee57ed7UL, 0xb44819242490243dUL, 592 0xd776fe3b3bec3bc5UL, 0x3d4b9aabab96ab31UL, 0xd181f0cece1fce3eUL, 0x5522991111441188UL, 593 0x8903838f8f068f0cUL, 0x6b9c044e4e254e4aUL, 0x517366b7b7e6b7d1UL, 0x60cbe0ebeb8beb0bUL, 594 0xcc78c13c3cf03cfdUL, 0xbf1ffd81813e817cUL, 0xfe354094946a94d4UL, 0x0cf31cf7f7fbf7ebUL, 595 0x676f18b9b9deb9a1UL, 0x5f268b13134c1398UL, 0x9c58512c2cb02c7dUL, 0xb8bb05d3d36bd3d6UL, 596 0x5cd38ce7e7bbe76bUL, 0xcbdc396e6ea56e57UL, 0xf395aac4c437c46eUL, 0x0f061b03030c0318UL, 597 0x13acdc565645568aUL, 0x49885e44440d441aUL, 0x9efea07f7fe17fdfUL, 0x374f88a9a99ea921UL, 598 0x8254672a2aa82a4dUL, 0x6d6b0abbbbd6bbb1UL, 0xe29f87c1c123c146UL, 0x02a6f153535153a2UL, 599 0x8ba572dcdc57dcaeUL, 0x2716530b0b2c0b58UL, 0xd327019d9d4e9d9cUL, 0xc1d82b6c6cad6c47UL, 600 0xf562a43131c43195UL, 0xb9e8f37474cd7487UL, 0x09f115f6f6fff6e3UL, 0x438c4c464605460aUL, 601 0x2645a5acac8aac09UL, 0x970fb589891e893cUL, 0x4428b414145014a0UL, 0x42dfbae1e1a3e15bUL, 602 0x4e2ca616165816b0UL, 0xd274f73a3ae83acdUL, 0xd0d2066969b9696fUL, 0x2d12410909240948UL, 603 0xade0d77070dd70a7UL, 0x54716fb6b6e2b6d9UL, 0xb7bd1ed0d067d0ceUL, 0x7ec7d6eded93ed3bUL, 604 0xdb85e2cccc17cc2eUL, 0x578468424215422aUL, 0xc22d2c98985a98b4UL, 0x0e55eda4a4aaa449UL, 605 0x8850752828a0285dUL, 0x31b8865c5c6d5cdaUL, 0x3fed6bf8f8c7f893UL, 0xa411c28686228644UL, 606 ], [ 607 0xc07830d818186018UL, 0x05af462623238c23UL, 0x7ef991b8c6c63fc6UL, 0x136fcdfbe8e887e8UL, 608 0x4ca113cb87872687UL, 0xa9626d11b8b8dab8UL, 0x0805020901010401UL, 0x426e9e0d4f4f214fUL, 609 0xadee6c9b3636d836UL, 0x590451ffa6a6a2a6UL, 0xdebdb90cd2d26fd2UL, 0xfb06f70ef5f5f3f5UL, 610 0xef80f2967979f979UL, 0x5fcede306f6fa16fUL, 0xfcef3f6d91917e91UL, 0xaa07a4f852525552UL, 611 0x27fdc04760609d60UL, 0x89766535bcbccabcUL, 0xaccd2b379b9b569bUL, 0x048c018a8e8e028eUL, 612 0x71155bd2a3a3b6a3UL, 0x603c186c0c0c300cUL, 0xff8af6847b7bf17bUL, 0xb5e16a803535d435UL, 613 0xe8693af51d1d741dUL, 0x5347ddb3e0e0a7e0UL, 0xf6acb321d7d77bd7UL, 0x5eed999cc2c22fc2UL, 614 0x6d965c432e2eb82eUL, 0x627a96294b4b314bUL, 0xa321e15dfefedffeUL, 0x8216aed557574157UL, 615 0xa8412abd15155415UL, 0x9fb6eee87777c177UL, 0xa5eb6e923737dc37UL, 0x7b56d79ee5e5b3e5UL, 616 0x8cd923139f9f469fUL, 0xd317fd23f0f0e7f0UL, 0x6a7f94204a4a354aUL, 0x9e95a944dada4fdaUL, 617 0xfa25b0a258587d58UL, 0x06ca8fcfc9c903c9UL, 0x558d527c2929a429UL, 0x5022145a0a0a280aUL, 618 0xe14f7f50b1b1feb1UL, 0x691a5dc9a0a0baa0UL, 0x7fdad6146b6bb16bUL, 0x5cab17d985852e85UL, 619 0x8173673cbdbdcebdUL, 0xd234ba8f5d5d695dUL, 0x8050209010104010UL, 0xf303f507f4f4f7f4UL, 620 0x16c08bddcbcb0bcbUL, 0xedc67cd33e3ef83eUL, 0x28110a2d05051405UL, 0x1fe6ce7867678167UL, 621 0x7353d597e4e4b7e4UL, 0x25bb4e0227279c27UL, 0x3258827341411941UL, 0x2c9d0ba78b8b168bUL, 622 0x510153f6a7a7a6a7UL, 0xcf94fab27d7de97dUL, 0xdcfb374995956e95UL, 0x8e9fad56d8d847d8UL, 623 0x8b30eb70fbfbcbfbUL, 0x2371c1cdeeee9feeUL, 0xc791f8bb7c7ced7cUL, 0x17e3cc7166668566UL, 624 0xa68ea77bdddd53ddUL, 0xb84b2eaf17175c17UL, 0x02468e4547470147UL, 0x84dc211a9e9e429eUL, 625 0x1ec589d4caca0fcaUL, 0x75995a582d2db42dUL, 0x9179632ebfbfc6bfUL, 0x381b0e3f07071c07UL, 626 0x012347acadad8eadUL, 0xea2fb4b05a5a755aUL, 0x6cb51bef83833683UL, 0x85ff66b63333cc33UL, 627 0x3ff2c65c63639163UL, 0x100a041202020802UL, 0x39384993aaaa92aaUL, 0xafa8e2de7171d971UL, 628 0x0ecf8dc6c8c807c8UL, 0xc87d32d119196419UL, 0x7270923b49493949UL, 0x869aaf5fd9d943d9UL, 629 0xc31df931f2f2eff2UL, 0x4b48dba8e3e3abe3UL, 0xe22ab6b95b5b715bUL, 0x34920dbc88881a88UL, 630 0xa4c8293e9a9a529aUL, 0x2dbe4c0b26269826UL, 0x8dfa64bf3232c832UL, 0xe94a7d59b0b0fab0UL, 631 0x1b6acff2e9e983e9UL, 0x78331e770f0f3c0fUL, 0xe6a6b733d5d573d5UL, 0x74ba1df480803a80UL, 632 0x997c6127bebec2beUL, 0x26de87ebcdcd13cdUL, 0xbde468893434d034UL, 0x7a75903248483d48UL, 633 0xab24e354ffffdbffUL, 0xf78ff48d7a7af57aUL, 0xf4ea3d6490907a90UL, 0xc23ebe9d5f5f615fUL, 634 0x1da0403d20208020UL, 0x67d5d00f6868bd68UL, 0xd07234ca1a1a681aUL, 0x192c41b7aeae82aeUL, 635 0xc95e757db4b4eab4UL, 0x9a19a8ce54544d54UL, 0xece53b7f93937693UL, 0x0daa442f22228822UL, 636 0x07e9c86364648d64UL, 0xdb12ff2af1f1e3f1UL, 0xbfa2e6cc7373d173UL, 0x905a248212124812UL, 637 0x3a5d807a40401d40UL, 0x4028104808082008UL, 0x56e89b95c3c32bc3UL, 0x337bc5dfecec97ecUL, 638 0x9690ab4ddbdb4bdbUL, 0x611f5fc0a1a1bea1UL, 0x1c8307918d8d0e8dUL, 0xf5c97ac83d3df43dUL, 639 0xccf1335b97976697UL, 0x0000000000000000UL, 0x36d483f9cfcf1bcfUL, 0x4587566e2b2bac2bUL, 640 0x97b3ece17676c576UL, 0x64b019e682823282UL, 0xfea9b128d6d67fd6UL, 0xd87736c31b1b6c1bUL, 641 0xc15b7774b5b5eeb5UL, 0x112943beafaf86afUL, 0x77dfd41d6a6ab56aUL, 0xba0da0ea50505d50UL, 642 0x124c8a5745450945UL, 0xcb18fb38f3f3ebf3UL, 0x9df060ad3030c030UL, 0x2b74c3c4efef9befUL, 643 0xe5c37eda3f3ffc3fUL, 0x921caac755554955UL, 0x791059dba2a2b2a2UL, 0x0365c9e9eaea8feaUL, 644 0x0fecca6a65658965UL, 0xb9686903babad2baUL, 0x65935e4a2f2fbc2fUL, 0x4ee79d8ec0c027c0UL, 645 0xbe81a160dede5fdeUL, 0xe06c38fc1c1c701cUL, 0xbb2ee746fdfdd3fdUL, 0x52649a1f4d4d294dUL, 646 0xe4e0397692927292UL, 0x8fbceafa7575c975UL, 0x301e0c3606061806UL, 0x249809ae8a8a128aUL, 647 0xf940794bb2b2f2b2UL, 0x6359d185e6e6bfe6UL, 0x70361c7e0e0e380eUL, 0xf8633ee71f1f7c1fUL, 648 0x37f7c45562629562UL, 0xeea3b53ad4d477d4UL, 0x29324d81a8a89aa8UL, 0xc4f4315296966296UL, 649 0x9b3aef62f9f9c3f9UL, 0x66f697a3c5c533c5UL, 0x35b14a1025259425UL, 0xf220b2ab59597959UL, 650 0x54ae15d084842a84UL, 0xb7a7e4c57272d572UL, 0xd5dd72ec3939e439UL, 0x5a6198164c4c2d4cUL, 651 0xca3bbc945e5e655eUL, 0xe785f09f7878fd78UL, 0xddd870e53838e038UL, 0x148605988c8c0a8cUL, 652 0xc6b2bf17d1d163d1UL, 0x410b57e4a5a5aea5UL, 0x434dd9a1e2e2afe2UL, 0x2ff8c24e61619961UL, 653 0xf1457b42b3b3f6b3UL, 0x15a5423421218421UL, 0x94d625089c9c4a9cUL, 0xf0663cee1e1e781eUL, 654 0x2252866143431143UL, 0x76fc93b1c7c73bc7UL, 0xb32be54ffcfcd7fcUL, 0x2014082404041004UL, 655 0xb208a2e351515951UL, 0xbcc72f2599995e99UL, 0x4fc4da226d6da96dUL, 0x68391a650d0d340dUL, 656 0x8335e979fafacffaUL, 0xb684a369dfdf5bdfUL, 0xd79bfca97e7ee57eUL, 0x3db4481924249024UL, 657 0xc5d776fe3b3bec3bUL, 0x313d4b9aabab96abUL, 0x3ed181f0cece1fceUL, 0x8855229911114411UL, 658 0x0c8903838f8f068fUL, 0x4a6b9c044e4e254eUL, 0xd1517366b7b7e6b7UL, 0x0b60cbe0ebeb8bebUL, 659 0xfdcc78c13c3cf03cUL, 0x7cbf1ffd81813e81UL, 0xd4fe354094946a94UL, 0xeb0cf31cf7f7fbf7UL, 660 0xa1676f18b9b9deb9UL, 0x985f268b13134c13UL, 0x7d9c58512c2cb02cUL, 0xd6b8bb05d3d36bd3UL, 661 0x6b5cd38ce7e7bbe7UL, 0x57cbdc396e6ea56eUL, 0x6ef395aac4c437c4UL, 0x180f061b03030c03UL, 662 0x8a13acdc56564556UL, 0x1a49885e44440d44UL, 0xdf9efea07f7fe17fUL, 0x21374f88a9a99ea9UL, 663 0x4d8254672a2aa82aUL, 0xb16d6b0abbbbd6bbUL, 0x46e29f87c1c123c1UL, 0xa202a6f153535153UL, 664 0xae8ba572dcdc57dcUL, 0x582716530b0b2c0bUL, 0x9cd327019d9d4e9dUL, 0x47c1d82b6c6cad6cUL, 665 0x95f562a43131c431UL, 0x87b9e8f37474cd74UL, 0xe309f115f6f6fff6UL, 0x0a438c4c46460546UL, 666 0x092645a5acac8aacUL, 0x3c970fb589891e89UL, 0xa04428b414145014UL, 0x5b42dfbae1e1a3e1UL, 667 0xb04e2ca616165816UL, 0xcdd274f73a3ae83aUL, 0x6fd0d2066969b969UL, 0x482d124109092409UL, 668 0xa7ade0d77070dd70UL, 0xd954716fb6b6e2b6UL, 0xceb7bd1ed0d067d0UL, 0x3b7ec7d6eded93edUL, 669 0x2edb85e2cccc17ccUL, 0x2a57846842421542UL, 0xb4c22d2c98985a98UL, 0x490e55eda4a4aaa4UL, 670 0x5d8850752828a028UL, 0xda31b8865c5c6d5cUL, 0x933fed6bf8f8c7f8UL, 0x44a411c286862286UL, 671 ], [ 672 0x18c07830d8181860UL, 0x2305af462623238cUL, 0xc67ef991b8c6c63fUL, 0xe8136fcdfbe8e887UL, 673 0x874ca113cb878726UL, 0xb8a9626d11b8b8daUL, 0x0108050209010104UL, 0x4f426e9e0d4f4f21UL, 674 0x36adee6c9b3636d8UL, 0xa6590451ffa6a6a2UL, 0xd2debdb90cd2d26fUL, 0xf5fb06f70ef5f5f3UL, 675 0x79ef80f2967979f9UL, 0x6f5fcede306f6fa1UL, 0x91fcef3f6d91917eUL, 0x52aa07a4f8525255UL, 676 0x6027fdc04760609dUL, 0xbc89766535bcbccaUL, 0x9baccd2b379b9b56UL, 0x8e048c018a8e8e02UL, 677 0xa371155bd2a3a3b6UL, 0x0c603c186c0c0c30UL, 0x7bff8af6847b7bf1UL, 0x35b5e16a803535d4UL, 678 0x1de8693af51d1d74UL, 0xe05347ddb3e0e0a7UL, 0xd7f6acb321d7d77bUL, 0xc25eed999cc2c22fUL, 679 0x2e6d965c432e2eb8UL, 0x4b627a96294b4b31UL, 0xfea321e15dfefedfUL, 0x578216aed5575741UL, 680 0x15a8412abd151554UL, 0x779fb6eee87777c1UL, 0x37a5eb6e923737dcUL, 0xe57b56d79ee5e5b3UL, 681 0x9f8cd923139f9f46UL, 0xf0d317fd23f0f0e7UL, 0x4a6a7f94204a4a35UL, 0xda9e95a944dada4fUL, 682 0x58fa25b0a258587dUL, 0xc906ca8fcfc9c903UL, 0x29558d527c2929a4UL, 0x0a5022145a0a0a28UL, 683 0xb1e14f7f50b1b1feUL, 0xa0691a5dc9a0a0baUL, 0x6b7fdad6146b6bb1UL, 0x855cab17d985852eUL, 684 0xbd8173673cbdbdceUL, 0x5dd234ba8f5d5d69UL, 0x1080502090101040UL, 0xf4f303f507f4f4f7UL, 685 0xcb16c08bddcbcb0bUL, 0x3eedc67cd33e3ef8UL, 0x0528110a2d050514UL, 0x671fe6ce78676781UL, 686 0xe47353d597e4e4b7UL, 0x2725bb4e0227279cUL, 0x4132588273414119UL, 0x8b2c9d0ba78b8b16UL, 687 0xa7510153f6a7a7a6UL, 0x7dcf94fab27d7de9UL, 0x95dcfb374995956eUL, 0xd88e9fad56d8d847UL, 688 0xfb8b30eb70fbfbcbUL, 0xee2371c1cdeeee9fUL, 0x7cc791f8bb7c7cedUL, 0x6617e3cc71666685UL, 689 0xdda68ea77bdddd53UL, 0x17b84b2eaf17175cUL, 0x4702468e45474701UL, 0x9e84dc211a9e9e42UL, 690 0xca1ec589d4caca0fUL, 0x2d75995a582d2db4UL, 0xbf9179632ebfbfc6UL, 0x07381b0e3f07071cUL, 691 0xad012347acadad8eUL, 0x5aea2fb4b05a5a75UL, 0x836cb51bef838336UL, 0x3385ff66b63333ccUL, 692 0x633ff2c65c636391UL, 0x02100a0412020208UL, 0xaa39384993aaaa92UL, 0x71afa8e2de7171d9UL, 693 0xc80ecf8dc6c8c807UL, 0x19c87d32d1191964UL, 0x497270923b494939UL, 0xd9869aaf5fd9d943UL, 694 0xf2c31df931f2f2efUL, 0xe34b48dba8e3e3abUL, 0x5be22ab6b95b5b71UL, 0x8834920dbc88881aUL, 695 0x9aa4c8293e9a9a52UL, 0x262dbe4c0b262698UL, 0x328dfa64bf3232c8UL, 0xb0e94a7d59b0b0faUL, 696 0xe91b6acff2e9e983UL, 0x0f78331e770f0f3cUL, 0xd5e6a6b733d5d573UL, 0x8074ba1df480803aUL, 697 0xbe997c6127bebec2UL, 0xcd26de87ebcdcd13UL, 0x34bde468893434d0UL, 0x487a75903248483dUL, 698 0xffab24e354ffffdbUL, 0x7af78ff48d7a7af5UL, 0x90f4ea3d6490907aUL, 0x5fc23ebe9d5f5f61UL, 699 0x201da0403d202080UL, 0x6867d5d00f6868bdUL, 0x1ad07234ca1a1a68UL, 0xae192c41b7aeae82UL, 700 0xb4c95e757db4b4eaUL, 0x549a19a8ce54544dUL, 0x93ece53b7f939376UL, 0x220daa442f222288UL, 701 0x6407e9c86364648dUL, 0xf1db12ff2af1f1e3UL, 0x73bfa2e6cc7373d1UL, 0x12905a2482121248UL, 702 0x403a5d807a40401dUL, 0x0840281048080820UL, 0xc356e89b95c3c32bUL, 0xec337bc5dfecec97UL, 703 0xdb9690ab4ddbdb4bUL, 0xa1611f5fc0a1a1beUL, 0x8d1c8307918d8d0eUL, 0x3df5c97ac83d3df4UL, 704 0x97ccf1335b979766UL, 0x0000000000000000UL, 0xcf36d483f9cfcf1bUL, 0x2b4587566e2b2bacUL, 705 0x7697b3ece17676c5UL, 0x8264b019e6828232UL, 0xd6fea9b128d6d67fUL, 0x1bd87736c31b1b6cUL, 706 0xb5c15b7774b5b5eeUL, 0xaf112943beafaf86UL, 0x6a77dfd41d6a6ab5UL, 0x50ba0da0ea50505dUL, 707 0x45124c8a57454509UL, 0xf3cb18fb38f3f3ebUL, 0x309df060ad3030c0UL, 0xef2b74c3c4efef9bUL, 708 0x3fe5c37eda3f3ffcUL, 0x55921caac7555549UL, 0xa2791059dba2a2b2UL, 0xea0365c9e9eaea8fUL, 709 0x650fecca6a656589UL, 0xbab9686903babad2UL, 0x2f65935e4a2f2fbcUL, 0xc04ee79d8ec0c027UL, 710 0xdebe81a160dede5fUL, 0x1ce06c38fc1c1c70UL, 0xfdbb2ee746fdfdd3UL, 0x4d52649a1f4d4d29UL, 711 0x92e4e03976929272UL, 0x758fbceafa7575c9UL, 0x06301e0c36060618UL, 0x8a249809ae8a8a12UL, 712 0xb2f940794bb2b2f2UL, 0xe66359d185e6e6bfUL, 0x0e70361c7e0e0e38UL, 0x1ff8633ee71f1f7cUL, 713 0x6237f7c455626295UL, 0xd4eea3b53ad4d477UL, 0xa829324d81a8a89aUL, 0x96c4f43152969662UL, 714 0xf99b3aef62f9f9c3UL, 0xc566f697a3c5c533UL, 0x2535b14a10252594UL, 0x59f220b2ab595979UL, 715 0x8454ae15d084842aUL, 0x72b7a7e4c57272d5UL, 0x39d5dd72ec3939e4UL, 0x4c5a6198164c4c2dUL, 716 0x5eca3bbc945e5e65UL, 0x78e785f09f7878fdUL, 0x38ddd870e53838e0UL, 0x8c148605988c8c0aUL, 717 0xd1c6b2bf17d1d163UL, 0xa5410b57e4a5a5aeUL, 0xe2434dd9a1e2e2afUL, 0x612ff8c24e616199UL, 718 0xb3f1457b42b3b3f6UL, 0x2115a54234212184UL, 0x9c94d625089c9c4aUL, 0x1ef0663cee1e1e78UL, 719 0x4322528661434311UL, 0xc776fc93b1c7c73bUL, 0xfcb32be54ffcfcd7UL, 0x0420140824040410UL, 720 0x51b208a2e3515159UL, 0x99bcc72f2599995eUL, 0x6d4fc4da226d6da9UL, 0x0d68391a650d0d34UL, 721 0xfa8335e979fafacfUL, 0xdfb684a369dfdf5bUL, 0x7ed79bfca97e7ee5UL, 0x243db44819242490UL, 722 0x3bc5d776fe3b3becUL, 0xab313d4b9aabab96UL, 0xce3ed181f0cece1fUL, 0x1188552299111144UL, 723 0x8f0c8903838f8f06UL, 0x4e4a6b9c044e4e25UL, 0xb7d1517366b7b7e6UL, 0xeb0b60cbe0ebeb8bUL, 724 0x3cfdcc78c13c3cf0UL, 0x817cbf1ffd81813eUL, 0x94d4fe354094946aUL, 0xf7eb0cf31cf7f7fbUL, 725 0xb9a1676f18b9b9deUL, 0x13985f268b13134cUL, 0x2c7d9c58512c2cb0UL, 0xd3d6b8bb05d3d36bUL, 726 0xe76b5cd38ce7e7bbUL, 0x6e57cbdc396e6ea5UL, 0xc46ef395aac4c437UL, 0x03180f061b03030cUL, 727 0x568a13acdc565645UL, 0x441a49885e44440dUL, 0x7fdf9efea07f7fe1UL, 0xa921374f88a9a99eUL, 728 0x2a4d8254672a2aa8UL, 0xbbb16d6b0abbbbd6UL, 0xc146e29f87c1c123UL, 0x53a202a6f1535351UL, 729 0xdcae8ba572dcdc57UL, 0x0b582716530b0b2cUL, 0x9d9cd327019d9d4eUL, 0x6c47c1d82b6c6cadUL, 730 0x3195f562a43131c4UL, 0x7487b9e8f37474cdUL, 0xf6e309f115f6f6ffUL, 0x460a438c4c464605UL, 731 0xac092645a5acac8aUL, 0x893c970fb589891eUL, 0x14a04428b4141450UL, 0xe15b42dfbae1e1a3UL, 732 0x16b04e2ca6161658UL, 0x3acdd274f73a3ae8UL, 0x696fd0d2066969b9UL, 0x09482d1241090924UL, 733 0x70a7ade0d77070ddUL, 0xb6d954716fb6b6e2UL, 0xd0ceb7bd1ed0d067UL, 0xed3b7ec7d6eded93UL, 734 0xcc2edb85e2cccc17UL, 0x422a578468424215UL, 0x98b4c22d2c98985aUL, 0xa4490e55eda4a4aaUL, 735 0x285d8850752828a0UL, 0x5cda31b8865c5c6dUL, 0xf8933fed6bf8f8c7UL, 0x8644a411c2868622UL, 736 ], [ 737 0x6018c07830d81818UL, 0x8c2305af46262323UL, 0x3fc67ef991b8c6c6UL, 0x87e8136fcdfbe8e8UL, 738 0x26874ca113cb8787UL, 0xdab8a9626d11b8b8UL, 0x0401080502090101UL, 0x214f426e9e0d4f4fUL, 739 0xd836adee6c9b3636UL, 0xa2a6590451ffa6a6UL, 0x6fd2debdb90cd2d2UL, 0xf3f5fb06f70ef5f5UL, 740 0xf979ef80f2967979UL, 0xa16f5fcede306f6fUL, 0x7e91fcef3f6d9191UL, 0x5552aa07a4f85252UL, 741 0x9d6027fdc0476060UL, 0xcabc89766535bcbcUL, 0x569baccd2b379b9bUL, 0x028e048c018a8e8eUL, 742 0xb6a371155bd2a3a3UL, 0x300c603c186c0c0cUL, 0xf17bff8af6847b7bUL, 0xd435b5e16a803535UL, 743 0x741de8693af51d1dUL, 0xa7e05347ddb3e0e0UL, 0x7bd7f6acb321d7d7UL, 0x2fc25eed999cc2c2UL, 744 0xb82e6d965c432e2eUL, 0x314b627a96294b4bUL, 0xdffea321e15dfefeUL, 0x41578216aed55757UL, 745 0x5415a8412abd1515UL, 0xc1779fb6eee87777UL, 0xdc37a5eb6e923737UL, 0xb3e57b56d79ee5e5UL, 746 0x469f8cd923139f9fUL, 0xe7f0d317fd23f0f0UL, 0x354a6a7f94204a4aUL, 0x4fda9e95a944dadaUL, 747 0x7d58fa25b0a25858UL, 0x03c906ca8fcfc9c9UL, 0xa429558d527c2929UL, 0x280a5022145a0a0aUL, 748 0xfeb1e14f7f50b1b1UL, 0xbaa0691a5dc9a0a0UL, 0xb16b7fdad6146b6bUL, 0x2e855cab17d98585UL, 749 0xcebd8173673cbdbdUL, 0x695dd234ba8f5d5dUL, 0x4010805020901010UL, 0xf7f4f303f507f4f4UL, 750 0x0bcb16c08bddcbcbUL, 0xf83eedc67cd33e3eUL, 0x140528110a2d0505UL, 0x81671fe6ce786767UL, 751 0xb7e47353d597e4e4UL, 0x9c2725bb4e022727UL, 0x1941325882734141UL, 0x168b2c9d0ba78b8bUL, 752 0xa6a7510153f6a7a7UL, 0xe97dcf94fab27d7dUL, 0x6e95dcfb37499595UL, 0x47d88e9fad56d8d8UL, 753 0xcbfb8b30eb70fbfbUL, 0x9fee2371c1cdeeeeUL, 0xed7cc791f8bb7c7cUL, 0x856617e3cc716666UL, 754 0x53dda68ea77bddddUL, 0x5c17b84b2eaf1717UL, 0x014702468e454747UL, 0x429e84dc211a9e9eUL, 755 0x0fca1ec589d4cacaUL, 0xb42d75995a582d2dUL, 0xc6bf9179632ebfbfUL, 0x1c07381b0e3f0707UL, 756 0x8ead012347acadadUL, 0x755aea2fb4b05a5aUL, 0x36836cb51bef8383UL, 0xcc3385ff66b63333UL, 757 0x91633ff2c65c6363UL, 0x0802100a04120202UL, 0x92aa39384993aaaaUL, 0xd971afa8e2de7171UL, 758 0x07c80ecf8dc6c8c8UL, 0x6419c87d32d11919UL, 0x39497270923b4949UL, 0x43d9869aaf5fd9d9UL, 759 0xeff2c31df931f2f2UL, 0xabe34b48dba8e3e3UL, 0x715be22ab6b95b5bUL, 0x1a8834920dbc8888UL, 760 0x529aa4c8293e9a9aUL, 0x98262dbe4c0b2626UL, 0xc8328dfa64bf3232UL, 0xfab0e94a7d59b0b0UL, 761 0x83e91b6acff2e9e9UL, 0x3c0f78331e770f0fUL, 0x73d5e6a6b733d5d5UL, 0x3a8074ba1df48080UL, 762 0xc2be997c6127bebeUL, 0x13cd26de87ebcdcdUL, 0xd034bde468893434UL, 0x3d487a7590324848UL, 763 0xdbffab24e354ffffUL, 0xf57af78ff48d7a7aUL, 0x7a90f4ea3d649090UL, 0x615fc23ebe9d5f5fUL, 764 0x80201da0403d2020UL, 0xbd6867d5d00f6868UL, 0x681ad07234ca1a1aUL, 0x82ae192c41b7aeaeUL, 765 0xeab4c95e757db4b4UL, 0x4d549a19a8ce5454UL, 0x7693ece53b7f9393UL, 0x88220daa442f2222UL, 766 0x8d6407e9c8636464UL, 0xe3f1db12ff2af1f1UL, 0xd173bfa2e6cc7373UL, 0x4812905a24821212UL, 767 0x1d403a5d807a4040UL, 0x2008402810480808UL, 0x2bc356e89b95c3c3UL, 0x97ec337bc5dfececUL, 768 0x4bdb9690ab4ddbdbUL, 0xbea1611f5fc0a1a1UL, 0x0e8d1c8307918d8dUL, 0xf43df5c97ac83d3dUL, 769 0x6697ccf1335b9797UL, 0x0000000000000000UL, 0x1bcf36d483f9cfcfUL, 0xac2b4587566e2b2bUL, 770 0xc57697b3ece17676UL, 0x328264b019e68282UL, 0x7fd6fea9b128d6d6UL, 0x6c1bd87736c31b1bUL, 771 0xeeb5c15b7774b5b5UL, 0x86af112943beafafUL, 0xb56a77dfd41d6a6aUL, 0x5d50ba0da0ea5050UL, 772 0x0945124c8a574545UL, 0xebf3cb18fb38f3f3UL, 0xc0309df060ad3030UL, 0x9bef2b74c3c4efefUL, 773 0xfc3fe5c37eda3f3fUL, 0x4955921caac75555UL, 0xb2a2791059dba2a2UL, 0x8fea0365c9e9eaeaUL, 774 0x89650fecca6a6565UL, 0xd2bab9686903babaUL, 0xbc2f65935e4a2f2fUL, 0x27c04ee79d8ec0c0UL, 775 0x5fdebe81a160dedeUL, 0x701ce06c38fc1c1cUL, 0xd3fdbb2ee746fdfdUL, 0x294d52649a1f4d4dUL, 776 0x7292e4e039769292UL, 0xc9758fbceafa7575UL, 0x1806301e0c360606UL, 0x128a249809ae8a8aUL, 777 0xf2b2f940794bb2b2UL, 0xbfe66359d185e6e6UL, 0x380e70361c7e0e0eUL, 0x7c1ff8633ee71f1fUL, 778 0x956237f7c4556262UL, 0x77d4eea3b53ad4d4UL, 0x9aa829324d81a8a8UL, 0x6296c4f431529696UL, 779 0xc3f99b3aef62f9f9UL, 0x33c566f697a3c5c5UL, 0x942535b14a102525UL, 0x7959f220b2ab5959UL, 780 0x2a8454ae15d08484UL, 0xd572b7a7e4c57272UL, 0xe439d5dd72ec3939UL, 0x2d4c5a6198164c4cUL, 781 0x655eca3bbc945e5eUL, 0xfd78e785f09f7878UL, 0xe038ddd870e53838UL, 0x0a8c148605988c8cUL, 782 0x63d1c6b2bf17d1d1UL, 0xaea5410b57e4a5a5UL, 0xafe2434dd9a1e2e2UL, 0x99612ff8c24e6161UL, 783 0xf6b3f1457b42b3b3UL, 0x842115a542342121UL, 0x4a9c94d625089c9cUL, 0x781ef0663cee1e1eUL, 784 0x1143225286614343UL, 0x3bc776fc93b1c7c7UL, 0xd7fcb32be54ffcfcUL, 0x1004201408240404UL, 785 0x5951b208a2e35151UL, 0x5e99bcc72f259999UL, 0xa96d4fc4da226d6dUL, 0x340d68391a650d0dUL, 786 0xcffa8335e979fafaUL, 0x5bdfb684a369dfdfUL, 0xe57ed79bfca97e7eUL, 0x90243db448192424UL, 787 0xec3bc5d776fe3b3bUL, 0x96ab313d4b9aababUL, 0x1fce3ed181f0ceceUL, 0x4411885522991111UL, 788 0x068f0c8903838f8fUL, 0x254e4a6b9c044e4eUL, 0xe6b7d1517366b7b7UL, 0x8beb0b60cbe0ebebUL, 789 0xf03cfdcc78c13c3cUL, 0x3e817cbf1ffd8181UL, 0x6a94d4fe35409494UL, 0xfbf7eb0cf31cf7f7UL, 790 0xdeb9a1676f18b9b9UL, 0x4c13985f268b1313UL, 0xb02c7d9c58512c2cUL, 0x6bd3d6b8bb05d3d3UL, 791 0xbbe76b5cd38ce7e7UL, 0xa56e57cbdc396e6eUL, 0x37c46ef395aac4c4UL, 0x0c03180f061b0303UL, 792 0x45568a13acdc5656UL, 0x0d441a49885e4444UL, 0xe17fdf9efea07f7fUL, 0x9ea921374f88a9a9UL, 793 0xa82a4d8254672a2aUL, 0xd6bbb16d6b0abbbbUL, 0x23c146e29f87c1c1UL, 0x5153a202a6f15353UL, 794 0x57dcae8ba572dcdcUL, 0x2c0b582716530b0bUL, 0x4e9d9cd327019d9dUL, 0xad6c47c1d82b6c6cUL, 795 0xc43195f562a43131UL, 0xcd7487b9e8f37474UL, 0xfff6e309f115f6f6UL, 0x05460a438c4c4646UL, 796 0x8aac092645a5acacUL, 0x1e893c970fb58989UL, 0x5014a04428b41414UL, 0xa3e15b42dfbae1e1UL, 797 0x5816b04e2ca61616UL, 0xe83acdd274f73a3aUL, 0xb9696fd0d2066969UL, 0x2409482d12410909UL, 798 0xdd70a7ade0d77070UL, 0xe2b6d954716fb6b6UL, 0x67d0ceb7bd1ed0d0UL, 0x93ed3b7ec7d6ededUL, 799 0x17cc2edb85e2ccccUL, 0x15422a5784684242UL, 0x5a98b4c22d2c9898UL, 0xaaa4490e55eda4a4UL, 800 0xa0285d8850752828UL, 0x6d5cda31b8865c5cUL, 0xc7f8933fed6bf8f8UL, 0x228644a411c28686UL, 801 ], [ 802 0x186018c07830d818UL, 0x238c2305af462623UL, 0xc63fc67ef991b8c6UL, 0xe887e8136fcdfbe8UL, 803 0x8726874ca113cb87UL, 0xb8dab8a9626d11b8UL, 0x0104010805020901UL, 0x4f214f426e9e0d4fUL, 804 0x36d836adee6c9b36UL, 0xa6a2a6590451ffa6UL, 0xd26fd2debdb90cd2UL, 0xf5f3f5fb06f70ef5UL, 805 0x79f979ef80f29679UL, 0x6fa16f5fcede306fUL, 0x917e91fcef3f6d91UL, 0x525552aa07a4f852UL, 806 0x609d6027fdc04760UL, 0xbccabc89766535bcUL, 0x9b569baccd2b379bUL, 0x8e028e048c018a8eUL, 807 0xa3b6a371155bd2a3UL, 0x0c300c603c186c0cUL, 0x7bf17bff8af6847bUL, 0x35d435b5e16a8035UL, 808 0x1d741de8693af51dUL, 0xe0a7e05347ddb3e0UL, 0xd77bd7f6acb321d7UL, 0xc22fc25eed999cc2UL, 809 0x2eb82e6d965c432eUL, 0x4b314b627a96294bUL, 0xfedffea321e15dfeUL, 0x5741578216aed557UL, 810 0x155415a8412abd15UL, 0x77c1779fb6eee877UL, 0x37dc37a5eb6e9237UL, 0xe5b3e57b56d79ee5UL, 811 0x9f469f8cd923139fUL, 0xf0e7f0d317fd23f0UL, 0x4a354a6a7f94204aUL, 0xda4fda9e95a944daUL, 812 0x587d58fa25b0a258UL, 0xc903c906ca8fcfc9UL, 0x29a429558d527c29UL, 0x0a280a5022145a0aUL, 813 0xb1feb1e14f7f50b1UL, 0xa0baa0691a5dc9a0UL, 0x6bb16b7fdad6146bUL, 0x852e855cab17d985UL, 814 0xbdcebd8173673cbdUL, 0x5d695dd234ba8f5dUL, 0x1040108050209010UL, 0xf4f7f4f303f507f4UL, 815 0xcb0bcb16c08bddcbUL, 0x3ef83eedc67cd33eUL, 0x05140528110a2d05UL, 0x6781671fe6ce7867UL, 816 0xe4b7e47353d597e4UL, 0x279c2725bb4e0227UL, 0x4119413258827341UL, 0x8b168b2c9d0ba78bUL, 817 0xa7a6a7510153f6a7UL, 0x7de97dcf94fab27dUL, 0x956e95dcfb374995UL, 0xd847d88e9fad56d8UL, 818 0xfbcbfb8b30eb70fbUL, 0xee9fee2371c1cdeeUL, 0x7ced7cc791f8bb7cUL, 0x66856617e3cc7166UL, 819 0xdd53dda68ea77bddUL, 0x175c17b84b2eaf17UL, 0x47014702468e4547UL, 0x9e429e84dc211a9eUL, 820 0xca0fca1ec589d4caUL, 0x2db42d75995a582dUL, 0xbfc6bf9179632ebfUL, 0x071c07381b0e3f07UL, 821 0xad8ead012347acadUL, 0x5a755aea2fb4b05aUL, 0x8336836cb51bef83UL, 0x33cc3385ff66b633UL, 822 0x6391633ff2c65c63UL, 0x020802100a041202UL, 0xaa92aa39384993aaUL, 0x71d971afa8e2de71UL, 823 0xc807c80ecf8dc6c8UL, 0x196419c87d32d119UL, 0x4939497270923b49UL, 0xd943d9869aaf5fd9UL, 824 0xf2eff2c31df931f2UL, 0xe3abe34b48dba8e3UL, 0x5b715be22ab6b95bUL, 0x881a8834920dbc88UL, 825 0x9a529aa4c8293e9aUL, 0x2698262dbe4c0b26UL, 0x32c8328dfa64bf32UL, 0xb0fab0e94a7d59b0UL, 826 0xe983e91b6acff2e9UL, 0x0f3c0f78331e770fUL, 0xd573d5e6a6b733d5UL, 0x803a8074ba1df480UL, 827 0xbec2be997c6127beUL, 0xcd13cd26de87ebcdUL, 0x34d034bde4688934UL, 0x483d487a75903248UL, 828 0xffdbffab24e354ffUL, 0x7af57af78ff48d7aUL, 0x907a90f4ea3d6490UL, 0x5f615fc23ebe9d5fUL, 829 0x2080201da0403d20UL, 0x68bd6867d5d00f68UL, 0x1a681ad07234ca1aUL, 0xae82ae192c41b7aeUL, 830 0xb4eab4c95e757db4UL, 0x544d549a19a8ce54UL, 0x937693ece53b7f93UL, 0x2288220daa442f22UL, 831 0x648d6407e9c86364UL, 0xf1e3f1db12ff2af1UL, 0x73d173bfa2e6cc73UL, 0x124812905a248212UL, 832 0x401d403a5d807a40UL, 0x0820084028104808UL, 0xc32bc356e89b95c3UL, 0xec97ec337bc5dfecUL, 833 0xdb4bdb9690ab4ddbUL, 0xa1bea1611f5fc0a1UL, 0x8d0e8d1c8307918dUL, 0x3df43df5c97ac83dUL, 834 0x976697ccf1335b97UL, 0x0000000000000000UL, 0xcf1bcf36d483f9cfUL, 0x2bac2b4587566e2bUL, 835 0x76c57697b3ece176UL, 0x82328264b019e682UL, 0xd67fd6fea9b128d6UL, 0x1b6c1bd87736c31bUL, 836 0xb5eeb5c15b7774b5UL, 0xaf86af112943beafUL, 0x6ab56a77dfd41d6aUL, 0x505d50ba0da0ea50UL, 837 0x450945124c8a5745UL, 0xf3ebf3cb18fb38f3UL, 0x30c0309df060ad30UL, 0xef9bef2b74c3c4efUL, 838 0x3ffc3fe5c37eda3fUL, 0x554955921caac755UL, 0xa2b2a2791059dba2UL, 0xea8fea0365c9e9eaUL, 839 0x6589650fecca6a65UL, 0xbad2bab9686903baUL, 0x2fbc2f65935e4a2fUL, 0xc027c04ee79d8ec0UL, 840 0xde5fdebe81a160deUL, 0x1c701ce06c38fc1cUL, 0xfdd3fdbb2ee746fdUL, 0x4d294d52649a1f4dUL, 841 0x927292e4e0397692UL, 0x75c9758fbceafa75UL, 0x061806301e0c3606UL, 0x8a128a249809ae8aUL, 842 0xb2f2b2f940794bb2UL, 0xe6bfe66359d185e6UL, 0x0e380e70361c7e0eUL, 0x1f7c1ff8633ee71fUL, 843 0x62956237f7c45562UL, 0xd477d4eea3b53ad4UL, 0xa89aa829324d81a8UL, 0x966296c4f4315296UL, 844 0xf9c3f99b3aef62f9UL, 0xc533c566f697a3c5UL, 0x25942535b14a1025UL, 0x597959f220b2ab59UL, 845 0x842a8454ae15d084UL, 0x72d572b7a7e4c572UL, 0x39e439d5dd72ec39UL, 0x4c2d4c5a6198164cUL, 846 0x5e655eca3bbc945eUL, 0x78fd78e785f09f78UL, 0x38e038ddd870e538UL, 0x8c0a8c148605988cUL, 847 0xd163d1c6b2bf17d1UL, 0xa5aea5410b57e4a5UL, 0xe2afe2434dd9a1e2UL, 0x6199612ff8c24e61UL, 848 0xb3f6b3f1457b42b3UL, 0x21842115a5423421UL, 0x9c4a9c94d625089cUL, 0x1e781ef0663cee1eUL, 849 0x4311432252866143UL, 0xc73bc776fc93b1c7UL, 0xfcd7fcb32be54ffcUL, 0x0410042014082404UL, 850 0x515951b208a2e351UL, 0x995e99bcc72f2599UL, 0x6da96d4fc4da226dUL, 0x0d340d68391a650dUL, 851 0xfacffa8335e979faUL, 0xdf5bdfb684a369dfUL, 0x7ee57ed79bfca97eUL, 0x2490243db4481924UL, 852 0x3bec3bc5d776fe3bUL, 0xab96ab313d4b9aabUL, 0xce1fce3ed181f0ceUL, 0x1144118855229911UL, 853 0x8f068f0c8903838fUL, 0x4e254e4a6b9c044eUL, 0xb7e6b7d1517366b7UL, 0xeb8beb0b60cbe0ebUL, 854 0x3cf03cfdcc78c13cUL, 0x813e817cbf1ffd81UL, 0x946a94d4fe354094UL, 0xf7fbf7eb0cf31cf7UL, 855 0xb9deb9a1676f18b9UL, 0x134c13985f268b13UL, 0x2cb02c7d9c58512cUL, 0xd36bd3d6b8bb05d3UL, 856 0xe7bbe76b5cd38ce7UL, 0x6ea56e57cbdc396eUL, 0xc437c46ef395aac4UL, 0x030c03180f061b03UL, 857 0x5645568a13acdc56UL, 0x440d441a49885e44UL, 0x7fe17fdf9efea07fUL, 0xa99ea921374f88a9UL, 858 0x2aa82a4d8254672aUL, 0xbbd6bbb16d6b0abbUL, 0xc123c146e29f87c1UL, 0x535153a202a6f153UL, 859 0xdc57dcae8ba572dcUL, 0x0b2c0b582716530bUL, 0x9d4e9d9cd327019dUL, 0x6cad6c47c1d82b6cUL, 860 0x31c43195f562a431UL, 0x74cd7487b9e8f374UL, 0xf6fff6e309f115f6UL, 0x4605460a438c4c46UL, 861 0xac8aac092645a5acUL, 0x891e893c970fb589UL, 0x145014a04428b414UL, 0xe1a3e15b42dfbae1UL, 862 0x165816b04e2ca616UL, 0x3ae83acdd274f73aUL, 0x69b9696fd0d20669UL, 0x092409482d124109UL, 863 0x70dd70a7ade0d770UL, 0xb6e2b6d954716fb6UL, 0xd067d0ceb7bd1ed0UL, 0xed93ed3b7ec7d6edUL, 864 0xcc17cc2edb85e2ccUL, 0x4215422a57846842UL, 0x985a98b4c22d2c98UL, 0xa4aaa4490e55eda4UL, 865 0x28a0285d88507528UL, 0x5c6d5cda31b8865cUL, 0xf8c7f8933fed6bf8UL, 0x86228644a411c286UL, 866 ]]; 867 868 immutable ulong[numRounds] rc = [ 869 0x1823c6e887b8014fUL, 870 0x36a6d2f5796f9152UL, 871 0x60bc9b8ea30c7b35UL, 872 0x1de0d7c22e4bfe57UL, 873 0x157737e59ff04adaUL, 874 0x58c9290ab1a06b85UL, 875 0xbd5d10f4cb3e0567UL, 876 0xe427418ba77d95d8UL, 877 0xfbee7c66dd17479eUL, 878 0xca2dbf07ad5a8333UL, 879 ]; 880 881 // precomputed K[] based on the initial state 882 immutable ulong[8][numRounds] pcK = [ 883 [0x300BEEC0AF902967, 0x2828282828282828, 0x2828282828282828, 0x2828282828282828, 884 0x2828282828282828, 0x2828282828282828, 0x2828282828282828, 0x2828282828282828], 885 [0x3BAB89F8EAD1AE24, 0x4445456645E9CBAF, 0x70FEA4A4C5A4B289, 0xC5FAA9E1E1CCE1A0, 886 0x48ACC05CFCFCB8FC, 0x8FF70E26908F8F69, 0x96791407D7857979, 0xF8A8F868B8C878F8], 887 [0xD319BFDB30467058, 0x295B23D1AFCF37DB, 0x12C8AC28B95AC98, 0x81639EB1C0B206A7, 888 0x445E607AB0B209DB, 0x735B2CCFBC8CBC71, 0xDC670924EFEDDDD3, 0x7B8D3BF0D73B7D19], 889 [0x38BEAAC1DE116586, 0x687CF3D04A87337F, 0xF337FADB98ADF057, 0xC5E24258EE358DBC, 890 0x1109F0E8996E247E, 0x1C5D6ED10B03401, 0xFBC952F17B28ECD3, 0x3256DC0CC7F12740], 891 [0xAF25A520949BCF14, 0xC13626A9E3C4534D, 0xE60F7D867740F9E1, 0x915DE6BBE26A0629, 892 0x965A54CC4CFE5E8D, 0xBEE931CB62323AA6, 0xB17B591896846A47, 0xD4F0C9362759AF31], 893 [0xE2F9B5C025370BB0, 0x392BCBA2168494A5, 0x608AF8CEFA348C14, 0x7AA53764418C9219, 894 0xB3F346A1FA833F89, 0x97493F487802CF7C, 0xDCADE8BA1E008F23, 0x92774F49EDB0323D], 895 [0x75416382774DFF2F, 0xFFFA38D055034600, 0xBF7D02493E98F361, 0xF4A860C29AE5CE0B, 896 0xC8DF5A44EE5D9D27, 0x23F45A55047500A4, 0xB016101202F9E28C, 0xAC30CD296833331D], 897 [0x36BF1826884AD89, 0x9940C662D8467163, 0x4C433E174B19C210, 0xE29CCFD34CFF86C5, 898 0x21FF11A042DF2653, 0x1B8E00CB6CE44B13, 0xA6123BF7A347B7CE, 0xD918900E3B2833CA], 899 [0xD01C677A0A9A2CF9, 0x2A942F534A63B6B2, 0x88422246FEACA8B4, 0x474A5CC73D583559, 900 0x74A6925DA55C6FA1, 0x7717E68CC4735C39, 0x82A3B0B53EC1AC6, 0x2AF658EB814DE762], 901 [0x489548B601EEBC3A, 0xA50D6BC66BED8E81, 0xE0CE3DCF88265A75, 0xC28C4ADBC0F69CE9, 902 0x54B79CD57F718513, 0x43414B8A977D0B7B, 0x631935BBDBF6157A, 0x6A7A4EF637018227], 903 ];