github.com/quinndk/ethereum_read@v0.0.0-20181211143958-29c55eec3237/go-ethereum-master_read/consensus/ethash/algorithm.go (about) 1 // Copyright 2017 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-ethereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package ethash 18 19 import ( 20 "encoding/binary" 21 "hash" 22 "math/big" 23 "reflect" 24 "runtime" 25 "sync" 26 "sync/atomic" 27 "time" 28 "unsafe" 29 30 "github.com/ethereum/go-ethereum/common" 31 "github.com/ethereum/go-ethereum/common/bitutil" 32 "github.com/ethereum/go-ethereum/crypto" 33 "github.com/ethereum/go-ethereum/crypto/sha3" 34 "github.com/ethereum/go-ethereum/log" 35 ) 36 37 const ( 38 // 初始dataset的字节数 1GB 39 datasetInitBytes = 1 << 30 // Bytes in dataset at genesis 40 // 每epoch dataset数据集的增长量 41 datasetGrowthBytes = 1 << 23 // Dataset growth per epoch 42 // 初始cache的字节数 16MB 43 cacheInitBytes = 1 << 24 // Bytes in cache at genesis 44 // 每epoch cache的字节数增长 45 cacheGrowthBytes = 1 << 17 // Cache growth per epoch 46 // 每个epoch包含的区块数 47 epochLength = 30000 // Blocks per epoch 48 // mix位宽 49 mixBytes = 128 // Width of mix 50 // hash长度 51 hashBytes = 64 // Hash length in bytes 52 // 散列中的32位无符号整数的个数 DAG是个uint32s类型的二维数组,每个uint32s的元素个数为hashWords 53 hashWords = 16 // Number of 32 bit ints in a hash 54 // 每个数据集元素datasetItem的父数 从datasetParents个伪随机选择的缓存数据得到一个datasetItem 55 datasetParents = 256 // Number of parents of each dataset element 56 // 一次cache生成的循环次数 57 cacheRounds = 3 // Number of rounds in cache production 58 // hashimoto循环中的访问次数 59 loopAccesses = 64 // Number of accesses in hashimoto loop 60 ) 61 62 // cacheSize returns the size of the ethash verification cache that belongs to a certain 63 // block number. 64 func cacheSize(block uint64) uint64 { 65 epoch := int(block / epochLength) 66 if epoch < maxEpoch { 67 return cacheSizes[epoch] 68 } 69 return calcCacheSize(epoch) 70 } 71 72 // calcCacheSize calculates the cache size for epoch. The cache size grows linearly, 73 // however, we always take the highest prime below the linearly growing threshold in order 74 // to reduce the risk of accidental regularities leading to cyclic behavior. 75 func calcCacheSize(epoch int) uint64 { 76 size := cacheInitBytes + cacheGrowthBytes*uint64(epoch) - hashBytes 77 for !new(big.Int).SetUint64(size / hashBytes).ProbablyPrime(1) { // Always accurate for n < 2^64 78 size -= 2 * hashBytes 79 } 80 return size 81 } 82 83 // datasetSize returns the size of the ethash mining dataset that belongs to a certain 84 // block number. 85 func datasetSize(block uint64) uint64 { 86 epoch := int(block / epochLength) 87 if epoch < maxEpoch { 88 return datasetSizes[epoch] 89 } 90 return calcDatasetSize(epoch) 91 } 92 93 // calcDatasetSize calculates the dataset size for epoch. The dataset size grows linearly, 94 // however, we always take the highest prime below the linearly growing threshold in order 95 // to reduce the risk of accidental regularities leading to cyclic behavior. 96 func calcDatasetSize(epoch int) uint64 { 97 size := datasetInitBytes + datasetGrowthBytes*uint64(epoch) - mixBytes 98 for !new(big.Int).SetUint64(size / mixBytes).ProbablyPrime(1) { // Always accurate for n < 2^64 99 size -= 2 * mixBytes 100 } 101 return size 102 } 103 104 // hasher is a repetitive hasher allowing the same hash data structures to be 105 // reused between hash runs instead of requiring new ones to be created. 106 type hasher func(dest []byte, data []byte) 107 108 // makeHasher creates a repetitive hasher, allowing the same hash data structures to 109 // be reused between hash runs instead of requiring new ones to be created. The returned 110 // function is not thread safe! 111 func makeHasher(h hash.Hash) hasher { 112 // sha3.state supports Read to get the sum, use it to avoid the overhead of Sum. 113 // Read alters the state but we reset the hash before every operation. 114 type readerHash interface { 115 hash.Hash 116 Read([]byte) (int, error) 117 } 118 rh, ok := h.(readerHash) 119 if !ok { 120 panic("can't find Read method on hash") 121 } 122 outputLen := rh.Size() 123 return func(dest []byte, data []byte) { 124 rh.Reset() 125 rh.Write(data) 126 rh.Read(dest[:outputLen]) 127 } 128 } 129 130 // seedHash is the seed to use for generating a verification cache and the mining 131 // dataset. 132 func seedHash(block uint64) []byte { 133 seed := make([]byte, 32) 134 if block < epochLength { 135 return seed 136 } 137 keccak256 := makeHasher(sha3.NewKeccak256()) 138 for i := 0; i < int(block/epochLength); i++ { 139 keccak256(seed, seed) 140 } 141 return seed 142 } 143 144 // generateCache creates a verification cache of a given size for an input seed. 145 // The cache production process involves first sequentially filling up 32 MB of 146 // memory, then performing two passes of Sergio Demian Lerner's RandMemoHash 147 // algorithm from Strict Memory Hard Hashing Functions (2014). The output is a 148 // set of 524288 64-byte values. 149 // This method places the result into dest in machine byte order. 150 func generateCache(dest []uint32, epoch uint64, seed []byte) { 151 // Print some debug logs to allow analysis on low end devices 152 logger := log.New("epoch", epoch) 153 154 start := time.Now() 155 defer func() { 156 elapsed := time.Since(start) 157 158 logFn := logger.Debug 159 if elapsed > 3*time.Second { 160 logFn = logger.Info 161 } 162 logFn("Generated ethash verification cache", "elapsed", common.PrettyDuration(elapsed)) 163 }() 164 // Convert our destination slice to a byte buffer 165 header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest)) 166 header.Len *= 4 167 header.Cap *= 4 168 cache := *(*[]byte)(unsafe.Pointer(&header)) 169 170 // Calculate the number of theoretical rows (we'll store in one buffer nonetheless) 171 size := uint64(len(cache)) 172 rows := int(size) / hashBytes 173 174 // Start a monitoring goroutine to report progress on low end devices 175 var progress uint32 176 177 done := make(chan struct{}) 178 defer close(done) 179 180 go func() { 181 for { 182 select { 183 case <-done: 184 return 185 case <-time.After(3 * time.Second): 186 logger.Info("Generating ethash verification cache", "percentage", atomic.LoadUint32(&progress)*100/uint32(rows)/4, "elapsed", common.PrettyDuration(time.Since(start))) 187 } 188 } 189 }() 190 // Create a hasher to reuse between invocations 191 keccak512 := makeHasher(sha3.NewKeccak512()) 192 193 // Sequentially produce the initial dataset 194 keccak512(cache, seed) 195 for offset := uint64(hashBytes); offset < size; offset += hashBytes { 196 keccak512(cache[offset:], cache[offset-hashBytes:offset]) 197 atomic.AddUint32(&progress, 1) 198 } 199 // Use a low-round version of randmemohash 200 temp := make([]byte, hashBytes) 201 202 for i := 0; i < cacheRounds; i++ { 203 for j := 0; j < rows; j++ { 204 var ( 205 srcOff = ((j - 1 + rows) % rows) * hashBytes 206 dstOff = j * hashBytes 207 xorOff = (binary.LittleEndian.Uint32(cache[dstOff:]) % uint32(rows)) * hashBytes 208 ) 209 bitutil.XORBytes(temp, cache[srcOff:srcOff+hashBytes], cache[xorOff:xorOff+hashBytes]) 210 keccak512(cache[dstOff:], temp) 211 212 atomic.AddUint32(&progress, 1) 213 } 214 } 215 // Swap the byte order on big endian systems and return 216 if !isLittleEndian() { 217 swap(cache) 218 } 219 } 220 221 // swap changes the byte order of the buffer assuming a uint32 representation. 222 func swap(buffer []byte) { 223 for i := 0; i < len(buffer); i += 4 { 224 binary.BigEndian.PutUint32(buffer[i:], binary.LittleEndian.Uint32(buffer[i:])) 225 } 226 } 227 228 // prepare converts an ethash cache or dataset from a byte stream into the internal 229 // int representation. All ethash methods work with ints to avoid constant byte to 230 // int conversions as well as to handle both little and big endian systems. 231 func prepare(dest []uint32, src []byte) { 232 for i := 0; i < len(dest); i++ { 233 dest[i] = binary.LittleEndian.Uint32(src[i*4:]) 234 } 235 } 236 237 // fnv is an algorithm inspired by the FNV hash, which in some cases is used as 238 // a non-associative substitute for XOR. Note that we multiply the prime with 239 // the full 32-bit input, in contrast with the FNV-1 spec which multiplies the 240 // prime with one byte (octet) in turn. 241 // fnv算法 242 func fnv(a, b uint32) uint32 { 243 return a*0x01000193 ^ b 244 } 245 246 // fnvHash mixes in data into mix using the ethash fnv method. 247 // fnv哈希算法 248 func fnvHash(mix []uint32, data []uint32) { 249 for i := 0; i < len(mix); i++ { 250 mix[i] = mix[i]*0x01000193 ^ data[i] 251 } 252 } 253 254 // generateDatasetItem combines data from 256 pseudorandomly selected cache nodes, 255 // and hashes that to compute a single dataset node. 256 // 组合来自256个伪随机选择的缓存节点的数据,用于计算单个数据集节点的哈希值 257 func generateDatasetItem(cache []uint32, index uint32, keccak512 hasher) []byte { 258 // Calculate the number of theoretical rows (we use one buffer nonetheless) 259 // 计算理论行数 260 rows := uint32(len(cache) / hashWords) 261 262 // Initialize the mix 263 mix := make([]byte, hashBytes) 264 265 binary.LittleEndian.PutUint32(mix, cache[(index%rows)*hashWords]^index) 266 for i := 1; i < hashWords; i++ { 267 binary.LittleEndian.PutUint32(mix[i*4:], cache[(index%rows)*hashWords+uint32(i)]) 268 } 269 keccak512(mix, mix) 270 271 // Convert the mix to uint32s to avoid constant bit shifting 272 // 将mix转换为uint32类型,前面讲过DAG是一个uint32s类型的二维数组 273 intMix := make([]uint32, hashWords) 274 for i := 0; i < len(intMix); i++ { 275 intMix[i] = binary.LittleEndian.Uint32(mix[i*4:]) 276 } 277 // fnv it with a lot of random cache nodes based on index 278 // fnv运算从256个伪随机选择的缓存节点的数据得到一个datasetItem的值 279 for i := uint32(0); i < datasetParents; i++ { 280 parent := fnv(index^i, intMix[i%16]) % rows 281 fnvHash(intMix, cache[parent*hashWords:]) 282 } 283 // Flatten the uint32 mix into a binary one and return 284 // uint32转化成二进制小端格式 285 for i, val := range intMix { 286 binary.LittleEndian.PutUint32(mix[i*4:], val) 287 } 288 keccak512(mix, mix) 289 return mix 290 } 291 292 // generateDataset generates the entire ethash dataset for mining. 293 // This method places the result into dest in machine byte order. 294 // 创建用于挖掘的DAG数据集,将结果按机器字节顺序存放到dest 295 func generateDataset(dest []uint32, epoch uint64, cache []uint32) { 296 // Print some debug logs to allow analysis on low end devices 297 logger := log.New("epoch", epoch) 298 299 start := time.Now() 300 defer func() { 301 elapsed := time.Since(start) 302 303 logFn := logger.Debug 304 if elapsed > 3*time.Second { 305 logFn = logger.Info 306 } 307 logFn("Generated ethash verification cache", "elapsed", common.PrettyDuration(elapsed)) 308 }() 309 310 // Figure out whether the bytes need to be swapped for the machine 311 // 判断是否是小端模式 312 swapped := !isLittleEndian() 313 314 // Convert our destination slice to a byte buffer 315 // 将dest转化为字节缓冲区dataset 316 header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest)) 317 header.Len *= 4 318 header.Cap *= 4 319 dataset := *(*[]byte)(unsafe.Pointer(&header)) 320 321 // Generate the dataset on many goroutines since it takes a while 322 // 我们知道一个dataset庞大到需要占用月1GB空间 323 // 所以这里为了加快创建速度,开启多协程来创建它 324 325 // 协程数 326 threads := runtime.NumCPU() 327 size := uint64(len(dataset)) 328 329 // 创建一个等待信号量,目的是为了等所有协程执行完毕再结束主协程 330 var pend sync.WaitGroup 331 pend.Add(threads) 332 333 var progress uint32 334 for i := 0; i < threads; i++ { 335 go func(id int) { 336 defer pend.Done() 337 338 // Create a hasher to reuse between invocations 339 // 一个在调用之间重用的哈希 340 keccak512 := makeHasher(sha3.NewKeccak512()) 341 342 // Calculate the data segment this thread should generate 343 // 计算当前协程应该计算的数据量 344 batch := uint32((size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads))) 345 first := uint32(id) * batch 346 limit := first + batch 347 if limit > uint32(size/hashBytes) { 348 limit = uint32(size / hashBytes) 349 } 350 // Calculate the dataset segment 351 // 计算dataset数据 352 percent := uint32(size / hashBytes / 100) 353 for index := first; index < limit; index++ { 354 355 // dataset数据集由若干个datasetItem组成 356 item := generateDatasetItem(cache, index, keccak512) 357 358 // 字节序反转,以保证最后按小端模式存储 359 if swapped { 360 swap(item) 361 } 362 //将计算好的一个datasetItem添加到dataset 363 copy(dataset[index*hashBytes:], item) 364 365 if status := atomic.AddUint32(&progress, 1); status%percent == 0 { 366 logger.Info("Generating DAG in progress", "percentage", uint64(status*100)/(size/hashBytes), "elapsed", common.PrettyDuration(time.Since(start))) 367 } 368 } 369 }(i) 370 } 371 // Wait for all the generators to finish and return 372 pend.Wait() 373 } 374 375 // hashimoto aggregates data from the full dataset in order to produce our final 376 // value for a particular header hash and nonce. 377 // 在传入的数据集中通过hash和nonce值计算加密值 378 func hashimoto(hash []byte, nonce uint64, size uint64, lookup func(index uint32) []uint32) ([]byte, []byte) { 379 // Calculate the number of theoretical rows (we use one buffer nonetheless) 380 // 计算数据集理论的行数 381 rows := uint32(size / mixBytes) 382 383 // Combine header+nonce into a 64 byte seed 384 // 合并header和nonce到一个40bytes的seed 385 seed := make([]byte, 40) 386 copy(seed, hash) 387 binary.LittleEndian.PutUint64(seed[32:], nonce) 388 389 // 将seed进行Keccak512加密 390 seed = crypto.Keccak512(seed) 391 // 从seed中获取区块头 392 seedHead := binary.LittleEndian.Uint32(seed) 393 394 // Start the mix with replicated seed 395 // 开始与重复seed的混合 mixBytes/4 = 128/4=32 396 // 长度32,元素uint32 mix占4*32=128bytes 397 mix := make([]uint32, mixBytes/4) 398 for i := 0; i < len(mix); i++ { 399 mix[i] = binary.LittleEndian.Uint32(seed[i%16*4:]) 400 } 401 // Mix in random dataset nodes 402 // 定义一个temp,与mix结构相同,长度相同 403 temp := make([]uint32, len(mix)) 404 405 for i := 0; i < loopAccesses; i++ { 406 parent := fnv(uint32(i)^seedHead, mix[i%len(mix)]) % rows 407 for j := uint32(0); j < mixBytes/hashBytes; j++ { 408 copy(temp[j*hashWords:], lookup(2*parent+j)) 409 } 410 // 将mix中所有元素都与temp中对应位置的元素进行FNV hash运算 411 fnvHash(mix, temp) 412 } 413 // Compress mix 414 // 对Mix进行混淆 415 for i := 0; i < len(mix); i += 4 { 416 mix[i/4] = fnv(fnv(fnv(mix[i], mix[i+1]), mix[i+2]), mix[i+3]) 417 } 418 // 保留32个字节有效数据 419 mix = mix[:len(mix)/4] 420 421 // 将长度为8的mix分散到32位的digest中去 422 digest := make([]byte, common.HashLength) 423 for i, val := range mix { 424 binary.LittleEndian.PutUint32(digest[i*4:], val) 425 } 426 return digest, crypto.Keccak256(append(seed, digest...)) 427 } 428 429 // hashimotoLight aggregates data from the full dataset (using only a small 430 // in-memory cache) in order to produce our final value for a particular header 431 // hash and nonce. 432 func hashimotoLight(size uint64, cache []uint32, hash []byte, nonce uint64) ([]byte, []byte) { 433 keccak512 := makeHasher(sha3.NewKeccak512()) 434 435 lookup := func(index uint32) []uint32 { 436 rawData := generateDatasetItem(cache, index, keccak512) 437 438 data := make([]uint32, len(rawData)/4) 439 for i := 0; i < len(data); i++ { 440 data[i] = binary.LittleEndian.Uint32(rawData[i*4:]) 441 } 442 return data 443 } 444 return hashimoto(hash, nonce, size, lookup) 445 } 446 447 // hashimotoFull aggregates data from the full dataset (using the full in-memory 448 // dataset) in order to produce our final value for a particular header hash and 449 // nonce. 450 // 在传入的数据集中通过hash和nonce值计算加密值 451 func hashimotoFull(dataset []uint32, hash []byte, nonce uint64) ([]byte, []byte) { 452 // 定义一个lookup函数,用于在数据集中查找数据 453 lookup := func(index uint32) []uint32 { 454 offset := index * hashWords 455 return dataset[offset : offset+hashWords] 456 } 457 458 // 将原始数据集进行了读取分割,然后传给hashimoto函数 459 return hashimoto(hash, nonce, uint64(len(dataset))*4, lookup) 460 } 461 462 const maxEpoch = 2048 463 464 // datasetSizes is a lookup table for the ethash dataset size for the first 2048 465 // epochs (i.e. 61440000 blocks). 466 var datasetSizes = [maxEpoch]uint64{ 467 1073739904, 1082130304, 1090514816, 1098906752, 1107293056, 468 1115684224, 1124070016, 1132461952, 1140849536, 1149232768, 469 1157627776, 1166013824, 1174404736, 1182786944, 1191180416, 470 1199568512, 1207958912, 1216345216, 1224732032, 1233124736, 471 1241513344, 1249902464, 1258290304, 1266673792, 1275067264, 472 1283453312, 1291844992, 1300234112, 1308619904, 1317010048, 473 1325397376, 1333787776, 1342176128, 1350561664, 1358954368, 474 1367339392, 1375731584, 1384118144, 1392507008, 1400897408, 475 1409284736, 1417673344, 1426062464, 1434451072, 1442839168, 476 1451229056, 1459615616, 1468006016, 1476394112, 1484782976, 477 1493171584, 1501559168, 1509948032, 1518337664, 1526726528, 478 1535114624, 1543503488, 1551892096, 1560278656, 1568669056, 479 1577056384, 1585446272, 1593831296, 1602219392, 1610610304, 480 1619000192, 1627386752, 1635773824, 1644164224, 1652555648, 481 1660943488, 1669332608, 1677721216, 1686109312, 1694497664, 482 1702886272, 1711274624, 1719661184, 1728047744, 1736434816, 483 1744829056, 1753218944, 1761606272, 1769995904, 1778382464, 484 1786772864, 1795157888, 1803550592, 1811937664, 1820327552, 485 1828711552, 1837102976, 1845488768, 1853879936, 1862269312, 486 1870656896, 1879048064, 1887431552, 1895825024, 1904212096, 487 1912601216, 1920988544, 1929379456, 1937765504, 1946156672, 488 1954543232, 1962932096, 1971321728, 1979707264, 1988093056, 489 1996487552, 2004874624, 2013262208, 2021653888, 2030039936, 490 2038430848, 2046819968, 2055208576, 2063596672, 2071981952, 491 2080373632, 2088762752, 2097149056, 2105539712, 2113928576, 492 2122315136, 2130700672, 2139092608, 2147483264, 2155872128, 493 2164257664, 2172642176, 2181035392, 2189426048, 2197814912, 494 2206203008, 2214587264, 2222979712, 2231367808, 2239758208, 495 2248145024, 2256527744, 2264922752, 2273312128, 2281701248, 496 2290086272, 2298476672, 2306867072, 2315251072, 2323639168, 497 2332032128, 2340420224, 2348808064, 2357196416, 2365580416, 498 2373966976, 2382363008, 2390748544, 2399139968, 2407530368, 499 2415918976, 2424307328, 2432695424, 2441084288, 2449472384, 500 2457861248, 2466247808, 2474637184, 2483026816, 2491414144, 501 2499803776, 2508191872, 2516582272, 2524970368, 2533359232, 502 2541743488, 2550134144, 2558525056, 2566913408, 2575301504, 503 2583686528, 2592073856, 2600467328, 2608856192, 2617240448, 504 2625631616, 2634022016, 2642407552, 2650796416, 2659188352, 505 2667574912, 2675965312, 2684352896, 2692738688, 2701130624, 506 2709518464, 2717907328, 2726293376, 2734685056, 2743073152, 507 2751462016, 2759851648, 2768232832, 2776625536, 2785017728, 508 2793401984, 2801794432, 2810182016, 2818571648, 2826959488, 509 2835349376, 2843734144, 2852121472, 2860514432, 2868900992, 510 2877286784, 2885676928, 2894069632, 2902451584, 2910843008, 511 2919234688, 2927622784, 2936011648, 2944400768, 2952789376, 512 2961177728, 2969565568, 2977951616, 2986338944, 2994731392, 513 3003120256, 3011508352, 3019895936, 3028287104, 3036675968, 514 3045063808, 3053452928, 3061837696, 3070228352, 3078615424, 515 3087003776, 3095394944, 3103782272, 3112173184, 3120562048, 516 3128944768, 3137339264, 3145725056, 3154109312, 3162505088, 517 3170893184, 3179280256, 3187669376, 3196056704, 3204445568, 518 3212836736, 3221224064, 3229612928, 3238002304, 3246391168, 519 3254778496, 3263165824, 3271556224, 3279944576, 3288332416, 520 3296719232, 3305110912, 3313500032, 3321887104, 3330273152, 521 3338658944, 3347053184, 3355440512, 3363827072, 3372220288, 522 3380608384, 3388997504, 3397384576, 3405774208, 3414163072, 523 3422551936, 3430937984, 3439328384, 3447714176, 3456104576, 524 3464493952, 3472883584, 3481268864, 3489655168, 3498048896, 525 3506434432, 3514826368, 3523213952, 3531603584, 3539987072, 526 3548380288, 3556763264, 3565157248, 3573545344, 3581934464, 527 3590324096, 3598712704, 3607098752, 3615488384, 3623877248, 528 3632265856, 3640646528, 3649043584, 3657430144, 3665821568, 529 3674207872, 3682597504, 3690984832, 3699367808, 3707764352, 530 3716152448, 3724541056, 3732925568, 3741318016, 3749706368, 531 3758091136, 3766481536, 3774872704, 3783260032, 3791650432, 532 3800036224, 3808427648, 3816815488, 3825204608, 3833592704, 533 3841981568, 3850370432, 3858755968, 3867147904, 3875536256, 534 3883920512, 3892313728, 3900702592, 3909087872, 3917478784, 535 3925868416, 3934256512, 3942645376, 3951032192, 3959422336, 536 3967809152, 3976200064, 3984588416, 3992974976, 4001363584, 537 4009751168, 4018141312, 4026530432, 4034911616, 4043308928, 538 4051695488, 4060084352, 4068472448, 4076862848, 4085249408, 539 4093640576, 4102028416, 4110413696, 4118805632, 4127194496, 540 4135583104, 4143971968, 4152360832, 4160746112, 4169135744, 541 4177525888, 4185912704, 4194303616, 4202691968, 4211076736, 542 4219463552, 4227855488, 4236246656, 4244633728, 4253022848, 543 4261412224, 4269799808, 4278184832, 4286578048, 4294962304, 544 4303349632, 4311743104, 4320130432, 4328521088, 4336909184, 545 4345295488, 4353687424, 4362073472, 4370458496, 4378852736, 546 4387238528, 4395630208, 4404019072, 4412407424, 4420790656, 547 4429182848, 4437571456, 4445962112, 4454344064, 4462738048, 548 4471119232, 4479516544, 4487904128, 4496289664, 4504682368, 549 4513068416, 4521459584, 4529846144, 4538232704, 4546619776, 550 4555010176, 4563402112, 4571790208, 4580174464, 4588567936, 551 4596957056, 4605344896, 4613734016, 4622119808, 4630511488, 552 4638898816, 4647287936, 4655675264, 4664065664, 4672451968, 553 4680842624, 4689231488, 4697620352, 4706007424, 4714397056, 554 4722786176, 4731173248, 4739562368, 4747951744, 4756340608, 555 4764727936, 4773114496, 4781504384, 4789894784, 4798283648, 556 4806667648, 4815059584, 4823449472, 4831835776, 4840226176, 557 4848612224, 4857003392, 4865391488, 4873780096, 4882169728, 558 4890557312, 4898946944, 4907333248, 4915722368, 4924110976, 559 4932499328, 4940889728, 4949276032, 4957666432, 4966054784, 560 4974438016, 4982831488, 4991221376, 4999607168, 5007998848, 561 5016386432, 5024763776, 5033164672, 5041544576, 5049941888, 562 5058329728, 5066717056, 5075107456, 5083494272, 5091883904, 563 5100273536, 5108662144, 5117048192, 5125436032, 5133827456, 564 5142215296, 5150605184, 5158993024, 5167382144, 5175769472, 565 5184157568, 5192543872, 5200936064, 5209324928, 5217711232, 566 5226102656, 5234490496, 5242877312, 5251263872, 5259654016, 567 5268040832, 5276434304, 5284819328, 5293209728, 5301598592, 568 5309986688, 5318374784, 5326764416, 5335151488, 5343542144, 569 5351929472, 5360319872, 5368706944, 5377096576, 5385484928, 570 5393871232, 5402263424, 5410650496, 5419040384, 5427426944, 571 5435816576, 5444205952, 5452594816, 5460981376, 5469367936, 572 5477760896, 5486148736, 5494536832, 5502925952, 5511315328, 573 5519703424, 5528089984, 5536481152, 5544869504, 5553256064, 574 5561645696, 5570032768, 5578423936, 5586811264, 5595193216, 575 5603585408, 5611972736, 5620366208, 5628750464, 5637143936, 576 5645528192, 5653921408, 5662310272, 5670694784, 5679082624, 577 5687474048, 5695864448, 5704251008, 5712641408, 5721030272, 578 5729416832, 5737806208, 5746194304, 5754583936, 5762969984, 579 5771358592, 5779748224, 5788137856, 5796527488, 5804911232, 580 5813300608, 5821692544, 5830082176, 5838468992, 5846855552, 581 5855247488, 5863636096, 5872024448, 5880411008, 5888799872, 582 5897186432, 5905576832, 5913966976, 5922352768, 5930744704, 583 5939132288, 5947522432, 5955911296, 5964299392, 5972688256, 584 5981074304, 5989465472, 5997851008, 6006241408, 6014627968, 585 6023015552, 6031408256, 6039796096, 6048185216, 6056574848, 586 6064963456, 6073351808, 6081736064, 6090128768, 6098517632, 587 6106906496, 6115289216, 6123680896, 6132070016, 6140459648, 588 6148849024, 6157237376, 6165624704, 6174009728, 6182403712, 589 6190792064, 6199176064, 6207569792, 6215952256, 6224345216, 590 6232732544, 6241124224, 6249510272, 6257899136, 6266287744, 591 6274676864, 6283065728, 6291454336, 6299843456, 6308232064, 592 6316620928, 6325006208, 6333395584, 6341784704, 6350174848, 593 6358562176, 6366951296, 6375337856, 6383729536, 6392119168, 594 6400504192, 6408895616, 6417283456, 6425673344, 6434059136, 595 6442444672, 6450837376, 6459223424, 6467613056, 6476004224, 596 6484393088, 6492781952, 6501170048, 6509555072, 6517947008, 597 6526336384, 6534725504, 6543112832, 6551500672, 6559888768, 598 6568278656, 6576662912, 6585055616, 6593443456, 6601834112, 599 6610219648, 6618610304, 6626999168, 6635385472, 6643777408, 600 6652164224, 6660552832, 6668941952, 6677330048, 6685719424, 601 6694107776, 6702493568, 6710882176, 6719274112, 6727662976, 602 6736052096, 6744437632, 6752825984, 6761213824, 6769604224, 603 6777993856, 6786383488, 6794770816, 6803158144, 6811549312, 604 6819937664, 6828326528, 6836706176, 6845101696, 6853491328, 605 6861880448, 6870269312, 6878655104, 6887046272, 6895433344, 606 6903822208, 6912212864, 6920596864, 6928988288, 6937377152, 607 6945764992, 6954149248, 6962544256, 6970928768, 6979317376, 608 6987709312, 6996093824, 7004487296, 7012875392, 7021258624, 609 7029652352, 7038038912, 7046427776, 7054818944, 7063207808, 610 7071595136, 7079980928, 7088372608, 7096759424, 7105149824, 611 7113536896, 7121928064, 7130315392, 7138699648, 7147092352, 612 7155479168, 7163865728, 7172249984, 7180648064, 7189036672, 613 7197424768, 7205810816, 7214196608, 7222589824, 7230975104, 614 7239367552, 7247755904, 7256145536, 7264533376, 7272921472, 615 7281308032, 7289694848, 7298088832, 7306471808, 7314864512, 616 7323253888, 7331643008, 7340029568, 7348419712, 7356808832, 617 7365196672, 7373585792, 7381973888, 7390362752, 7398750592, 618 7407138944, 7415528576, 7423915648, 7432302208, 7440690304, 619 7449080192, 7457472128, 7465860992, 7474249088, 7482635648, 620 7491023744, 7499412608, 7507803008, 7516192384, 7524579968, 621 7532967296, 7541358464, 7549745792, 7558134656, 7566524032, 622 7574912896, 7583300992, 7591690112, 7600075136, 7608466816, 623 7616854912, 7625244544, 7633629824, 7642020992, 7650410368, 624 7658794112, 7667187328, 7675574912, 7683961984, 7692349568, 625 7700739712, 7709130368, 7717519232, 7725905536, 7734295424, 626 7742683264, 7751069056, 7759457408, 7767849088, 7776238208, 627 7784626816, 7793014912, 7801405312, 7809792128, 7818179968, 628 7826571136, 7834957184, 7843347328, 7851732352, 7860124544, 629 7868512384, 7876902016, 7885287808, 7893679744, 7902067072, 630 7910455936, 7918844288, 7927230848, 7935622784, 7944009344, 631 7952400256, 7960786048, 7969176704, 7977565312, 7985953408, 632 7994339968, 8002730368, 8011119488, 8019508096, 8027896192, 633 8036285056, 8044674688, 8053062272, 8061448832, 8069838464, 634 8078227328, 8086616704, 8095006592, 8103393664, 8111783552, 635 8120171392, 8128560256, 8136949376, 8145336704, 8153726848, 636 8162114944, 8170503296, 8178891904, 8187280768, 8195669632, 637 8204058496, 8212444544, 8220834176, 8229222272, 8237612672, 638 8246000768, 8254389376, 8262775168, 8271167104, 8279553664, 639 8287944064, 8296333184, 8304715136, 8313108352, 8321497984, 640 8329885568, 8338274432, 8346663296, 8355052928, 8363441536, 641 8371828352, 8380217984, 8388606592, 8396996224, 8405384576, 642 8413772672, 8422161536, 8430549376, 8438939008, 8447326592, 643 8455715456, 8464104832, 8472492928, 8480882048, 8489270656, 644 8497659776, 8506045312, 8514434944, 8522823808, 8531208832, 645 8539602304, 8547990656, 8556378752, 8564768384, 8573154176, 646 8581542784, 8589933952, 8598322816, 8606705024, 8615099264, 647 8623487872, 8631876992, 8640264064, 8648653952, 8657040256, 648 8665430656, 8673820544, 8682209152, 8690592128, 8698977152, 649 8707374464, 8715763328, 8724151424, 8732540032, 8740928384, 650 8749315712, 8757704576, 8766089344, 8774480768, 8782871936, 651 8791260032, 8799645824, 8808034432, 8816426368, 8824812928, 652 8833199488, 8841591424, 8849976448, 8858366336, 8866757248, 653 8875147136, 8883532928, 8891923328, 8900306816, 8908700288, 654 8917088384, 8925478784, 8933867392, 8942250368, 8950644608, 655 8959032704, 8967420544, 8975809664, 8984197504, 8992584064, 656 9000976256, 9009362048, 9017752448, 9026141312, 9034530688, 657 9042917504, 9051307904, 9059694208, 9068084864, 9076471424, 658 9084861824, 9093250688, 9101638528, 9110027648, 9118416512, 659 9126803584, 9135188096, 9143581312, 9151969664, 9160356224, 660 9168747136, 9177134464, 9185525632, 9193910144, 9202302848, 661 9210690688, 9219079552, 9227465344, 9235854464, 9244244864, 662 9252633472, 9261021824, 9269411456, 9277799296, 9286188928, 663 9294574208, 9302965888, 9311351936, 9319740032, 9328131968, 664 9336516736, 9344907392, 9353296768, 9361685888, 9370074752, 665 9378463616, 9386849408, 9395239808, 9403629184, 9412016512, 666 9420405376, 9428795008, 9437181568, 9445570688, 9453960832, 667 9462346624, 9470738048, 9479121536, 9487515008, 9495903616, 668 9504289664, 9512678528, 9521067904, 9529456256, 9537843584, 669 9546233728, 9554621312, 9563011456, 9571398784, 9579788672, 670 9588178304, 9596567168, 9604954496, 9613343104, 9621732992, 671 9630121856, 9638508416, 9646898816, 9655283584, 9663675776, 672 9672061312, 9680449664, 9688840064, 9697230464, 9705617536, 673 9714003584, 9722393984, 9730772608, 9739172224, 9747561088, 674 9755945344, 9764338816, 9772726144, 9781116544, 9789503872, 675 9797892992, 9806282624, 9814670464, 9823056512, 9831439232, 676 9839833984, 9848224384, 9856613504, 9865000576, 9873391232, 677 9881772416, 9890162816, 9898556288, 9906940544, 9915333248, 678 9923721088, 9932108672, 9940496512, 9948888448, 9957276544, 679 9965666176, 9974048384, 9982441088, 9990830464, 9999219584, 680 10007602816, 10015996544, 10024385152, 10032774016, 10041163648, 681 10049548928, 10057940096, 10066329472, 10074717824, 10083105152, 682 10091495296, 10099878784, 10108272256, 10116660608, 10125049216, 683 10133437312, 10141825664, 10150213504, 10158601088, 10166991232, 684 10175378816, 10183766144, 10192157312, 10200545408, 10208935552, 685 10217322112, 10225712768, 10234099328, 10242489472, 10250876032, 686 10259264896, 10267656064, 10276042624, 10284429184, 10292820352, 687 10301209472, 10309598848, 10317987712, 10326375296, 10334763392, 688 10343153536, 10351541632, 10359930752, 10368318592, 10376707456, 689 10385096576, 10393484672, 10401867136, 10410262144, 10418647424, 690 10427039104, 10435425664, 10443810176, 10452203648, 10460589952, 691 10468982144, 10477369472, 10485759104, 10494147712, 10502533504, 692 10510923392, 10519313536, 10527702656, 10536091264, 10544478592, 693 10552867712, 10561255808, 10569642368, 10578032768, 10586423168, 694 10594805632, 10603200128, 10611588992, 10619976064, 10628361344, 695 10636754048, 10645143424, 10653531776, 10661920384, 10670307968, 696 10678696832, 10687086464, 10695475072, 10703863168, 10712246144, 697 10720639616, 10729026688, 10737414784, 10745806208, 10754190976, 698 10762581376, 10770971264, 10779356288, 10787747456, 10796135552, 699 10804525184, 10812915584, 10821301888, 10829692288, 10838078336, 700 10846469248, 10854858368, 10863247232, 10871631488, 10880023424, 701 10888412032, 10896799616, 10905188992, 10913574016, 10921964672, 702 10930352768, 10938742912, 10947132544, 10955518592, 10963909504, 703 10972298368, 10980687488, 10989074816, 10997462912, 11005851776, 704 11014241152, 11022627712, 11031017344, 11039403904, 11047793024, 705 11056184704, 11064570752, 11072960896, 11081343872, 11089737856, 706 11098128256, 11106514816, 11114904448, 11123293568, 11131680128, 707 11140065152, 11148458368, 11156845696, 11165236864, 11173624192, 708 11182013824, 11190402688, 11198790784, 11207179136, 11215568768, 709 11223957376, 11232345728, 11240734592, 11249122688, 11257511296, 710 11265899648, 11274285952, 11282675584, 11291065472, 11299452544, 711 11307842432, 11316231296, 11324616832, 11333009024, 11341395584, 712 11349782656, 11358172288, 11366560384, 11374950016, 11383339648, 713 11391721856, 11400117376, 11408504192, 11416893568, 11425283456, 714 11433671552, 11442061184, 11450444672, 11458837888, 11467226752, 715 11475611776, 11484003968, 11492392064, 11500780672, 11509169024, 716 11517550976, 11525944448, 11534335616, 11542724224, 11551111808, 717 11559500672, 11567890304, 11576277376, 11584667008, 11593056128, 718 11601443456, 11609830016, 11618221952, 11626607488, 11634995072, 719 11643387776, 11651775104, 11660161664, 11668552576, 11676940928, 720 11685330304, 11693718656, 11702106496, 11710496128, 11718882688, 721 11727273088, 11735660416, 11744050048, 11752437376, 11760824704, 722 11769216128, 11777604736, 11785991296, 11794381952, 11802770048, 723 11811157888, 11819548544, 11827932544, 11836324736, 11844713344, 724 11853100928, 11861486464, 11869879936, 11878268032, 11886656896, 725 11895044992, 11903433088, 11911822976, 11920210816, 11928600448, 726 11936987264, 11945375872, 11953761152, 11962151296, 11970543488, 727 11978928512, 11987320448, 11995708288, 12004095104, 12012486272, 728 12020875136, 12029255552, 12037652096, 12046039168, 12054429568, 729 12062813824, 12071206528, 12079594624, 12087983744, 12096371072, 730 12104759936, 12113147264, 12121534592, 12129924992, 12138314624, 731 12146703232, 12155091584, 12163481216, 12171864704, 12180255872, 732 12188643968, 12197034112, 12205424512, 12213811328, 12222199424, 733 12230590336, 12238977664, 12247365248, 12255755392, 12264143488, 734 12272531584, 12280920448, 12289309568, 12297694592, 12306086528, 735 12314475392, 12322865024, 12331253632, 12339640448, 12348029312, 736 12356418944, 12364805248, 12373196672, 12381580928, 12389969024, 737 12398357632, 12406750592, 12415138432, 12423527552, 12431916416, 738 12440304512, 12448692352, 12457081216, 12465467776, 12473859968, 739 12482245504, 12490636672, 12499025536, 12507411584, 12515801728, 740 12524190592, 12532577152, 12540966272, 12549354368, 12557743232, 741 12566129536, 12574523264, 12582911872, 12591299456, 12599688064, 742 12608074624, 12616463488, 12624845696, 12633239936, 12641631616, 743 12650019968, 12658407296, 12666795136, 12675183232, 12683574656, 744 12691960192, 12700350592, 12708740224, 12717128576, 12725515904, 745 12733906816, 12742295168, 12750680192, 12759071872, 12767460736, 746 12775848832, 12784236928, 12792626816, 12801014656, 12809404288, 747 12817789312, 12826181504, 12834568832, 12842954624, 12851345792, 748 12859732352, 12868122496, 12876512128, 12884901248, 12893289088, 749 12901672832, 12910067584, 12918455168, 12926842496, 12935232896, 750 12943620736, 12952009856, 12960396928, 12968786816, 12977176192, 751 12985563776, 12993951104, 13002341504, 13010730368, 13019115392, 752 13027506304, 13035895168, 13044272512, 13052673152, 13061062528, 753 13069446272, 13077838976, 13086227072, 13094613632, 13103000192, 754 13111393664, 13119782528, 13128157568, 13136559232, 13144945024, 755 13153329536, 13161724288, 13170111872, 13178502784, 13186884736, 756 13195279744, 13203667072, 13212057472, 13220445824, 13228832128, 757 13237221248, 13245610624, 13254000512, 13262388352, 13270777472, 758 13279166336, 13287553408, 13295943296, 13304331904, 13312719488, 759 13321108096, 13329494656, 13337885824, 13346274944, 13354663808, 760 13363051136, 13371439232, 13379825024, 13388210816, 13396605056, 761 13404995456, 13413380224, 13421771392, 13430159744, 13438546048, 762 13446937216, 13455326848, 13463708288, 13472103808, 13480492672, 763 13488875648, 13497269888, 13505657728, 13514045312, 13522435712, 764 13530824576, 13539210112, 13547599232, 13555989376, 13564379008, 765 13572766336, 13581154432, 13589544832, 13597932928, 13606320512, 766 13614710656, 13623097472, 13631477632, 13639874944, 13648264064, 767 13656652928, 13665041792, 13673430656, 13681818496, 13690207616, 768 13698595712, 13706982272, 13715373184, 13723762048, 13732150144, 769 13740536704, 13748926592, 13757316224, 13765700992, 13774090112, 770 13782477952, 13790869376, 13799259008, 13807647872, 13816036736, 771 13824425344, 13832814208, 13841202304, 13849591424, 13857978752, 772 13866368896, 13874754688, 13883145344, 13891533184, 13899919232, 773 13908311168, 13916692096, 13925085056, 13933473152, 13941866368, 774 13950253696, 13958643584, 13967032192, 13975417216, 13983807616, 775 13992197504, 14000582272, 14008973696, 14017363072, 14025752192, 776 14034137984, 14042528384, 14050918016, 14059301504, 14067691648, 777 14076083584, 14084470144, 14092852352, 14101249664, 14109635968, 778 14118024832, 14126407552, 14134804352, 14143188608, 14151577984, 779 14159968384, 14168357248, 14176741504, 14185127296, 14193521024, 780 14201911424, 14210301824, 14218685056, 14227067264, 14235467392, 781 14243855488, 14252243072, 14260630144, 14269021568, 14277409408, 782 14285799296, 14294187904, 14302571392, 14310961792, 14319353728, 783 14327738752, 14336130944, 14344518784, 14352906368, 14361296512, 784 14369685376, 14378071424, 14386462592, 14394848128, 14403230848, 785 14411627392, 14420013952, 14428402304, 14436793472, 14445181568, 786 14453569664, 14461959808, 14470347904, 14478737024, 14487122816, 787 14495511424, 14503901824, 14512291712, 14520677504, 14529064832, 788 14537456768, 14545845632, 14554234496, 14562618496, 14571011456, 789 14579398784, 14587789184, 14596172672, 14604564608, 14612953984, 790 14621341312, 14629724288, 14638120832, 14646503296, 14654897536, 791 14663284864, 14671675264, 14680061056, 14688447616, 14696835968, 792 14705228416, 14713616768, 14722003328, 14730392192, 14738784128, 793 14747172736, 14755561088, 14763947648, 14772336512, 14780725376, 794 14789110144, 14797499776, 14805892736, 14814276992, 14822670208, 795 14831056256, 14839444352, 14847836032, 14856222848, 14864612992, 796 14872997504, 14881388672, 14889775744, 14898165376, 14906553472, 797 14914944896, 14923329664, 14931721856, 14940109696, 14948497024, 798 14956887424, 14965276544, 14973663616, 14982053248, 14990439808, 799 14998830976, 15007216768, 15015605888, 15023995264, 15032385152, 800 15040768384, 15049154944, 15057549184, 15065939072, 15074328448, 801 15082715008, 15091104128, 15099493504, 15107879296, 15116269184, 802 15124659584, 15133042304, 15141431936, 15149824384, 15158214272, 803 15166602368, 15174991232, 15183378304, 15191760512, 15200154496, 804 15208542592, 15216931712, 15225323392, 15233708416, 15242098048, 805 15250489216, 15258875264, 15267265408, 15275654528, 15284043136, 806 15292431488, 15300819584, 15309208192, 15317596544, 15325986176, 807 15334374784, 15342763648, 15351151744, 15359540608, 15367929728, 808 15376318336, 15384706432, 15393092992, 15401481856, 15409869952, 809 15418258816, 15426649984, 15435037568, 15443425664, 15451815296, 810 15460203392, 15468589184, 15476979328, 15485369216, 15493755776, 811 15502146944, 15510534272, 15518924416, 15527311232, 15535699072, 812 15544089472, 15552478336, 15560866688, 15569254528, 15577642624, 813 15586031488, 15594419072, 15602809472, 15611199104, 15619586432, 814 15627975296, 15636364928, 15644753792, 15653141888, 15661529216, 815 15669918848, 15678305152, 15686696576, 15695083136, 15703474048, 816 15711861632, 15720251264, 15728636288, 15737027456, 15745417088, 817 15753804928, 15762194048, 15770582656, 15778971008, 15787358336, 818 15795747712, 15804132224, 15812523392, 15820909696, 15829300096, 819 15837691264, 15846071936, 15854466944, 15862855808, 15871244672, 820 15879634816, 15888020608, 15896409728, 15904799104, 15913185152, 821 15921577088, 15929966464, 15938354816, 15946743424, 15955129472, 822 15963519872, 15971907968, 15980296064, 15988684928, 15997073024, 823 16005460864, 16013851264, 16022241152, 16030629248, 16039012736, 824 16047406976, 16055794816, 16064181376, 16072571264, 16080957824, 825 16089346688, 16097737856, 16106125184, 16114514816, 16122904192, 826 16131292544, 16139678848, 16148066944, 16156453504, 16164839552, 827 16173236096, 16181623424, 16190012032, 16198401152, 16206790528, 828 16215177344, 16223567744, 16231956352, 16240344704, 16248731008, 829 16257117824, 16265504384, 16273898624, 16282281856, 16290668672, 830 16299064192, 16307449216, 16315842176, 16324230016, 16332613504, 831 16341006464, 16349394304, 16357783168, 16366172288, 16374561664, 832 16382951296, 16391337856, 16399726208, 16408116352, 16416505472, 833 16424892032, 16433282176, 16441668224, 16450058624, 16458448768, 834 16466836864, 16475224448, 16483613056, 16492001408, 16500391808, 835 16508779648, 16517166976, 16525555328, 16533944192, 16542330752, 836 16550719616, 16559110528, 16567497088, 16575888512, 16584274816, 837 16592665472, 16601051008, 16609442944, 16617832064, 16626218624, 838 16634607488, 16642996096, 16651385728, 16659773824, 16668163712, 839 16676552576, 16684938112, 16693328768, 16701718144, 16710095488, 840 16718492288, 16726883968, 16735272832, 16743661184, 16752049792, 841 16760436608, 16768827008, 16777214336, 16785599104, 16793992832, 842 16802381696, 16810768768, 16819151744, 16827542656, 16835934848, 843 16844323712, 16852711552, 16861101952, 16869489536, 16877876864, 844 16886265728, 16894653056, 16903044736, 16911431296, 16919821696, 845 16928207488, 16936592768, 16944987776, 16953375616, 16961763968, 846 16970152832, 16978540928, 16986929536, 16995319168, 17003704448, 847 17012096896, 17020481152, 17028870784, 17037262208, 17045649536, 848 17054039936, 17062426496, 17070814336, 17079205504, 17087592064, 849 17095978112, 17104369024, 17112759424, 17121147776, 17129536384, 850 17137926016, 17146314368, 17154700928, 17163089792, 17171480192, 851 17179864192, 17188256896, 17196644992, 17205033856, 17213423488, 852 17221811072, 17230198912, 17238588032, 17246976896, 17255360384, 853 17263754624, 17272143232, 17280530048, 17288918912, 17297309312, 854 17305696384, 17314085504, 17322475136, 17330863744, 17339252096, 855 17347640192, 17356026496, 17364413824, 17372796544, 17381190016, 856 17389583488, 17397972608, 17406360704, 17414748544, 17423135872, 857 17431527296, 17439915904, 17448303232, 17456691584, 17465081728, 858 17473468288, 17481857408, 17490247552, 17498635904, 17507022464, 859 17515409024, 17523801728, 17532189824, 17540577664, 17548966016, 860 17557353344, 17565741184, 17574131584, 17582519168, 17590907008, 861 17599296128, 17607687808, 17616076672, 17624455808, 17632852352, 862 17641238656, 17649630848, 17658018944, 17666403968, 17674794112, 863 17683178368, 17691573376, 17699962496, 17708350592, 17716739968, 864 17725126528, 17733517184, 17741898112, 17750293888, 17758673024, 865 17767070336, 17775458432, 17783848832, 17792236928, 17800625536, 866 17809012352, 17817402752, 17825785984, 17834178944, 17842563968, 867 17850955648, 17859344512, 17867732864, 17876119424, 17884511872, 868 17892900224, 17901287296, 17909677696, 17918058112, 17926451072, 869 17934843776, 17943230848, 17951609216, 17960008576, 17968397696, 870 17976784256, 17985175424, 17993564032, 18001952128, 18010339712, 871 18018728576, 18027116672, 18035503232, 18043894144, 18052283264, 872 18060672128, 18069056384, 18077449856, 18085837184, 18094225792, 873 18102613376, 18111004544, 18119388544, 18127781248, 18136170368, 874 18144558976, 18152947328, 18161336192, 18169724288, 18178108544, 875 18186498944, 18194886784, 18203275648, 18211666048, 18220048768, 876 18228444544, 18236833408, 18245220736} 877 878 // cacheSizes is a lookup table for the ethash verification cache size for the 879 // first 2048 epochs (i.e. 61440000 blocks). 880 var cacheSizes = [maxEpoch]uint64{ 881 16776896, 16907456, 17039296, 17170112, 17301056, 17432512, 17563072, 882 17693888, 17824192, 17955904, 18087488, 18218176, 18349504, 18481088, 883 18611392, 18742336, 18874304, 19004224, 19135936, 19267264, 19398208, 884 19529408, 19660096, 19791424, 19922752, 20053952, 20184896, 20315968, 885 20446912, 20576576, 20709184, 20840384, 20971072, 21102272, 21233216, 886 21364544, 21494848, 21626816, 21757376, 21887552, 22019392, 22151104, 887 22281536, 22412224, 22543936, 22675264, 22806464, 22935872, 23068096, 888 23198272, 23330752, 23459008, 23592512, 23723968, 23854912, 23986112, 889 24116672, 24247616, 24378688, 24509504, 24640832, 24772544, 24903488, 890 25034432, 25165376, 25296704, 25427392, 25558592, 25690048, 25820096, 891 25951936, 26081728, 26214208, 26345024, 26476096, 26606656, 26737472, 892 26869184, 26998208, 27131584, 27262528, 27393728, 27523904, 27655744, 893 27786688, 27917888, 28049344, 28179904, 28311488, 28441792, 28573504, 894 28700864, 28835648, 28966208, 29096768, 29228608, 29359808, 29490752, 895 29621824, 29752256, 29882816, 30014912, 30144448, 30273728, 30406976, 896 30538432, 30670784, 30799936, 30932672, 31063744, 31195072, 31325248, 897 31456192, 31588288, 31719232, 31850432, 31981504, 32110784, 32243392, 898 32372672, 32505664, 32636608, 32767808, 32897344, 33029824, 33160768, 899 33289664, 33423296, 33554368, 33683648, 33816512, 33947456, 34076992, 900 34208704, 34340032, 34471744, 34600256, 34734016, 34864576, 34993984, 901 35127104, 35258176, 35386688, 35518528, 35650624, 35782336, 35910976, 902 36044608, 36175808, 36305728, 36436672, 36568384, 36699968, 36830656, 903 36961984, 37093312, 37223488, 37355072, 37486528, 37617472, 37747904, 904 37879232, 38009792, 38141888, 38272448, 38403392, 38535104, 38660672, 905 38795584, 38925632, 39059264, 39190336, 39320768, 39452096, 39581632, 906 39713984, 39844928, 39974848, 40107968, 40238144, 40367168, 40500032, 907 40631744, 40762816, 40894144, 41023552, 41155904, 41286208, 41418304, 908 41547712, 41680448, 41811904, 41942848, 42073792, 42204992, 42334912, 909 42467008, 42597824, 42729152, 42860096, 42991552, 43122368, 43253696, 910 43382848, 43515712, 43646912, 43777088, 43907648, 44039104, 44170432, 911 44302144, 44433344, 44564288, 44694976, 44825152, 44956864, 45088448, 912 45219008, 45350464, 45481024, 45612608, 45744064, 45874496, 46006208, 913 46136768, 46267712, 46399424, 46529344, 46660672, 46791488, 46923328, 914 47053504, 47185856, 47316928, 47447872, 47579072, 47710144, 47839936, 915 47971648, 48103232, 48234176, 48365248, 48496192, 48627136, 48757312, 916 48889664, 49020736, 49149248, 49283008, 49413824, 49545152, 49675712, 917 49807168, 49938368, 50069056, 50200256, 50331584, 50462656, 50593472, 918 50724032, 50853952, 50986048, 51117632, 51248576, 51379904, 51510848, 919 51641792, 51773248, 51903296, 52035136, 52164032, 52297664, 52427968, 920 52557376, 52690112, 52821952, 52952896, 53081536, 53213504, 53344576, 921 53475776, 53608384, 53738816, 53870528, 54000832, 54131776, 54263744, 922 54394688, 54525248, 54655936, 54787904, 54918592, 55049152, 55181248, 923 55312064, 55442752, 55574336, 55705024, 55836224, 55967168, 56097856, 924 56228672, 56358592, 56490176, 56621888, 56753728, 56884928, 57015488, 925 57146816, 57278272, 57409216, 57540416, 57671104, 57802432, 57933632, 926 58064576, 58195264, 58326976, 58457408, 58588864, 58720192, 58849984, 927 58981696, 59113024, 59243456, 59375552, 59506624, 59637568, 59768512, 928 59897792, 60030016, 60161984, 60293056, 60423872, 60554432, 60683968, 929 60817216, 60948032, 61079488, 61209664, 61341376, 61471936, 61602752, 930 61733696, 61865792, 61996736, 62127808, 62259136, 62389568, 62520512, 931 62651584, 62781632, 62910784, 63045056, 63176128, 63307072, 63438656, 932 63569216, 63700928, 63831616, 63960896, 64093888, 64225088, 64355392, 933 64486976, 64617664, 64748608, 64879424, 65009216, 65142464, 65273792, 934 65402816, 65535424, 65666752, 65797696, 65927744, 66060224, 66191296, 935 66321344, 66453056, 66584384, 66715328, 66846656, 66977728, 67108672, 936 67239104, 67370432, 67501888, 67631296, 67763776, 67895104, 68026304, 937 68157248, 68287936, 68419264, 68548288, 68681408, 68811968, 68942912, 938 69074624, 69205568, 69337024, 69467584, 69599168, 69729472, 69861184, 939 69989824, 70122944, 70253888, 70385344, 70515904, 70647232, 70778816, 940 70907968, 71040832, 71171648, 71303104, 71432512, 71564992, 71695168, 941 71826368, 71958464, 72089536, 72219712, 72350144, 72482624, 72613568, 942 72744512, 72875584, 73006144, 73138112, 73268672, 73400128, 73530944, 943 73662272, 73793344, 73924544, 74055104, 74185792, 74316992, 74448832, 944 74579392, 74710976, 74841664, 74972864, 75102784, 75233344, 75364544, 945 75497024, 75627584, 75759296, 75890624, 76021696, 76152256, 76283072, 946 76414144, 76545856, 76676672, 76806976, 76937792, 77070016, 77200832, 947 77331392, 77462464, 77593664, 77725376, 77856448, 77987776, 78118336, 948 78249664, 78380992, 78511424, 78642496, 78773056, 78905152, 79033664, 949 79166656, 79297472, 79429568, 79560512, 79690816, 79822784, 79953472, 950 80084672, 80214208, 80346944, 80477632, 80608576, 80740288, 80870848, 951 81002048, 81133504, 81264448, 81395648, 81525952, 81657536, 81786304, 952 81919808, 82050112, 82181312, 82311616, 82443968, 82573376, 82705984, 953 82835776, 82967744, 83096768, 83230528, 83359552, 83491264, 83622464, 954 83753536, 83886016, 84015296, 84147776, 84277184, 84409792, 84540608, 955 84672064, 84803008, 84934336, 85065152, 85193792, 85326784, 85458496, 956 85589312, 85721024, 85851968, 85982656, 86112448, 86244416, 86370112, 957 86506688, 86637632, 86769344, 86900672, 87031744, 87162304, 87293632, 958 87424576, 87555392, 87687104, 87816896, 87947968, 88079168, 88211264, 959 88341824, 88473152, 88603712, 88735424, 88862912, 88996672, 89128384, 960 89259712, 89390272, 89521984, 89652544, 89783872, 89914816, 90045376, 961 90177088, 90307904, 90438848, 90569152, 90700096, 90832832, 90963776, 962 91093696, 91223744, 91356992, 91486784, 91618496, 91749824, 91880384, 963 92012224, 92143552, 92273344, 92405696, 92536768, 92666432, 92798912, 964 92926016, 93060544, 93192128, 93322816, 93453632, 93583936, 93715136, 965 93845056, 93977792, 94109504, 94240448, 94371776, 94501184, 94632896, 966 94764224, 94895552, 95023424, 95158208, 95287744, 95420224, 95550016, 967 95681216, 95811904, 95943872, 96075328, 96203584, 96337856, 96468544, 968 96599744, 96731072, 96860992, 96992576, 97124288, 97254848, 97385536, 969 97517248, 97647808, 97779392, 97910464, 98041408, 98172608, 98303168, 970 98434496, 98565568, 98696768, 98827328, 98958784, 99089728, 99220928, 971 99352384, 99482816, 99614272, 99745472, 99876416, 100007104, 972 100138048, 100267072, 100401088, 100529984, 100662592, 100791872, 973 100925248, 101056064, 101187392, 101317952, 101449408, 101580608, 974 101711296, 101841728, 101973824, 102104896, 102235712, 102366016, 975 102498112, 102628672, 102760384, 102890432, 103021888, 103153472, 976 103284032, 103415744, 103545152, 103677248, 103808576, 103939648, 977 104070976, 104201792, 104332736, 104462528, 104594752, 104725952, 978 104854592, 104988608, 105118912, 105247808, 105381184, 105511232, 979 105643072, 105774784, 105903296, 106037056, 106167872, 106298944, 980 106429504, 106561472, 106691392, 106822592, 106954304, 107085376, 981 107216576, 107346368, 107478464, 107609792, 107739712, 107872192, 982 108003136, 108131392, 108265408, 108396224, 108527168, 108657344, 983 108789568, 108920384, 109049792, 109182272, 109312576, 109444928, 984 109572928, 109706944, 109837888, 109969088, 110099648, 110230976, 985 110362432, 110492992, 110624704, 110755264, 110886208, 111017408, 986 111148864, 111279296, 111410752, 111541952, 111673024, 111803456, 987 111933632, 112066496, 112196416, 112328512, 112457792, 112590784, 988 112715968, 112852672, 112983616, 113114944, 113244224, 113376448, 989 113505472, 113639104, 113770304, 113901376, 114031552, 114163264, 990 114294592, 114425536, 114556864, 114687424, 114818624, 114948544, 991 115080512, 115212224, 115343296, 115473472, 115605184, 115736128, 992 115867072, 115997248, 116128576, 116260288, 116391488, 116522944, 993 116652992, 116784704, 116915648, 117046208, 117178304, 117308608, 994 117440192, 117569728, 117701824, 117833024, 117964096, 118094656, 995 118225984, 118357312, 118489024, 118617536, 118749632, 118882112, 996 119012416, 119144384, 119275328, 119406016, 119537344, 119668672, 997 119798464, 119928896, 120061376, 120192832, 120321728, 120454336, 998 120584512, 120716608, 120848192, 120979136, 121109056, 121241408, 999 121372352, 121502912, 121634752, 121764416, 121895744, 122027072, 1000 122157632, 122289088, 122421184, 122550592, 122682944, 122813888, 1001 122945344, 123075776, 123207488, 123338048, 123468736, 123600704, 1002 123731264, 123861952, 123993664, 124124608, 124256192, 124386368, 1003 124518208, 124649024, 124778048, 124911296, 125041088, 125173696, 1004 125303744, 125432896, 125566912, 125696576, 125829056, 125958592, 1005 126090304, 126221248, 126352832, 126483776, 126615232, 126746432, 1006 126876608, 127008704, 127139392, 127270336, 127401152, 127532224, 1007 127663552, 127794752, 127925696, 128055232, 128188096, 128319424, 1008 128449856, 128581312, 128712256, 128843584, 128973632, 129103808, 1009 129236288, 129365696, 129498944, 129629888, 129760832, 129892288, 1010 130023104, 130154048, 130283968, 130416448, 130547008, 130678336, 1011 130807616, 130939456, 131071552, 131202112, 131331776, 131464384, 1012 131594048, 131727296, 131858368, 131987392, 132120256, 132250816, 1013 132382528, 132513728, 132644672, 132774976, 132905792, 133038016, 1014 133168832, 133299392, 133429312, 133562048, 133692992, 133823296, 1015 133954624, 134086336, 134217152, 134348608, 134479808, 134607296, 1016 134741056, 134872384, 135002944, 135134144, 135265472, 135396544, 1017 135527872, 135659072, 135787712, 135921472, 136052416, 136182848, 1018 136313792, 136444864, 136576448, 136707904, 136837952, 136970048, 1019 137099584, 137232064, 137363392, 137494208, 137625536, 137755712, 1020 137887424, 138018368, 138149824, 138280256, 138411584, 138539584, 1021 138672832, 138804928, 138936128, 139066688, 139196864, 139328704, 1022 139460032, 139590208, 139721024, 139852864, 139984576, 140115776, 1023 140245696, 140376512, 140508352, 140640064, 140769856, 140902336, 1024 141032768, 141162688, 141294016, 141426496, 141556544, 141687488, 1025 141819584, 141949888, 142080448, 142212544, 142342336, 142474432, 1026 142606144, 142736192, 142868288, 142997824, 143129408, 143258944, 1027 143392448, 143523136, 143653696, 143785024, 143916992, 144045632, 1028 144177856, 144309184, 144440768, 144570688, 144701888, 144832448, 1029 144965056, 145096384, 145227584, 145358656, 145489856, 145620928, 1030 145751488, 145883072, 146011456, 146144704, 146275264, 146407232, 1031 146538176, 146668736, 146800448, 146931392, 147062336, 147193664, 1032 147324224, 147455936, 147586624, 147717056, 147848768, 147979456, 1033 148110784, 148242368, 148373312, 148503232, 148635584, 148766144, 1034 148897088, 149028416, 149159488, 149290688, 149420224, 149551552, 1035 149683136, 149814976, 149943616, 150076352, 150208064, 150338624, 1036 150470464, 150600256, 150732224, 150862784, 150993088, 151125952, 1037 151254976, 151388096, 151519168, 151649728, 151778752, 151911104, 1038 152042944, 152174144, 152304704, 152435648, 152567488, 152698816, 1039 152828992, 152960576, 153091648, 153222976, 153353792, 153484096, 1040 153616192, 153747008, 153878336, 154008256, 154139968, 154270912, 1041 154402624, 154533824, 154663616, 154795712, 154926272, 155057984, 1042 155188928, 155319872, 155450816, 155580608, 155712064, 155843392, 1043 155971136, 156106688, 156237376, 156367424, 156499264, 156630976, 1044 156761536, 156892352, 157024064, 157155008, 157284416, 157415872, 1045 157545536, 157677248, 157810496, 157938112, 158071744, 158203328, 1046 158334656, 158464832, 158596288, 158727616, 158858048, 158988992, 1047 159121216, 159252416, 159381568, 159513152, 159645632, 159776192, 1048 159906496, 160038464, 160169536, 160300352, 160430656, 160563008, 1049 160693952, 160822208, 160956352, 161086784, 161217344, 161349184, 1050 161480512, 161611456, 161742272, 161873216, 162002752, 162135872, 1051 162266432, 162397888, 162529216, 162660032, 162790976, 162922048, 1052 163052096, 163184576, 163314752, 163446592, 163577408, 163707968, 1053 163839296, 163969984, 164100928, 164233024, 164364224, 164494912, 1054 164625856, 164756672, 164887616, 165019072, 165150016, 165280064, 1055 165412672, 165543104, 165674944, 165805888, 165936832, 166067648, 1056 166198336, 166330048, 166461248, 166591552, 166722496, 166854208, 1057 166985408, 167116736, 167246656, 167378368, 167508416, 167641024, 1058 167771584, 167903168, 168034112, 168164032, 168295744, 168427456, 1059 168557632, 168688448, 168819136, 168951616, 169082176, 169213504, 1060 169344832, 169475648, 169605952, 169738048, 169866304, 169999552, 1061 170131264, 170262464, 170393536, 170524352, 170655424, 170782016, 1062 170917696, 171048896, 171179072, 171310784, 171439936, 171573184, 1063 171702976, 171835072, 171966272, 172097216, 172228288, 172359232, 1064 172489664, 172621376, 172747712, 172883264, 173014208, 173144512, 1065 173275072, 173407424, 173539136, 173669696, 173800768, 173931712, 1066 174063424, 174193472, 174325696, 174455744, 174586816, 174718912, 1067 174849728, 174977728, 175109696, 175242688, 175374272, 175504832, 1068 175636288, 175765696, 175898432, 176028992, 176159936, 176291264, 1069 176422592, 176552512, 176684864, 176815424, 176946496, 177076544, 1070 177209152, 177340096, 177470528, 177600704, 177731648, 177864256, 1071 177994816, 178126528, 178257472, 178387648, 178518464, 178650176, 1072 178781888, 178912064, 179044288, 179174848, 179305024, 179436736, 1073 179568448, 179698496, 179830208, 179960512, 180092608, 180223808, 1074 180354752, 180485696, 180617152, 180748096, 180877504, 181009984, 1075 181139264, 181272512, 181402688, 181532608, 181663168, 181795136, 1076 181926592, 182057536, 182190016, 182320192, 182451904, 182582336, 1077 182713792, 182843072, 182976064, 183107264, 183237056, 183368384, 1078 183494848, 183631424, 183762752, 183893824, 184024768, 184154816, 1079 184286656, 184417984, 184548928, 184680128, 184810816, 184941248, 1080 185072704, 185203904, 185335616, 185465408, 185596352, 185727296, 1081 185859904, 185989696, 186121664, 186252992, 186383552, 186514112, 1082 186645952, 186777152, 186907328, 187037504, 187170112, 187301824, 1083 187429184, 187562048, 187693504, 187825472, 187957184, 188087104, 1084 188218304, 188349376, 188481344, 188609728, 188743616, 188874304, 1085 189005248, 189136448, 189265088, 189396544, 189528128, 189660992, 1086 189791936, 189923264, 190054208, 190182848, 190315072, 190447424, 1087 190577984, 190709312, 190840768, 190971328, 191102656, 191233472, 1088 191364032, 191495872, 191626816, 191758016, 191888192, 192020288, 1089 192148928, 192282176, 192413504, 192542528, 192674752, 192805952, 1090 192937792, 193068608, 193198912, 193330496, 193462208, 193592384, 1091 193723456, 193854272, 193985984, 194116672, 194247232, 194379712, 1092 194508352, 194641856, 194772544, 194900672, 195035072, 195166016, 1093 195296704, 195428032, 195558592, 195690304, 195818176, 195952576, 1094 196083392, 196214336, 196345792, 196476736, 196607552, 196739008, 1095 196869952, 197000768, 197130688, 197262784, 197394368, 197523904, 1096 197656384, 197787584, 197916608, 198049472, 198180544, 198310208, 1097 198442432, 198573632, 198705088, 198834368, 198967232, 199097792, 1098 199228352, 199360192, 199491392, 199621696, 199751744, 199883968, 1099 200014016, 200146624, 200276672, 200408128, 200540096, 200671168, 1100 200801984, 200933312, 201062464, 201194944, 201326144, 201457472, 1101 201588544, 201719744, 201850816, 201981632, 202111552, 202244032, 1102 202374464, 202505152, 202636352, 202767808, 202898368, 203030336, 1103 203159872, 203292608, 203423296, 203553472, 203685824, 203816896, 1104 203947712, 204078272, 204208192, 204341056, 204472256, 204603328, 1105 204733888, 204864448, 204996544, 205125568, 205258304, 205388864, 1106 205517632, 205650112, 205782208, 205913536, 206044736, 206176192, 1107 206307008, 206434496, 206569024, 206700224, 206831168, 206961856, 1108 207093056, 207223616, 207355328, 207486784, 207616832, 207749056, 1109 207879104, 208010048, 208141888, 208273216, 208404032, 208534336, 1110 208666048, 208796864, 208927424, 209059264, 209189824, 209321792, 1111 209451584, 209582656, 209715136, 209845568, 209976896, 210106432, 1112 210239296, 210370112, 210501568, 210630976, 210763712, 210894272, 1113 211024832, 211156672, 211287616, 211418176, 211549376, 211679296, 1114 211812032, 211942592, 212074432, 212204864, 212334016, 212467648, 1115 212597824, 212727616, 212860352, 212991424, 213120832, 213253952, 1116 213385024, 213515584, 213645632, 213777728, 213909184, 214040128, 1117 214170688, 214302656, 214433728, 214564544, 214695232, 214826048, 1118 214956992, 215089088, 215219776, 215350592, 215482304, 215613248, 1119 215743552, 215874752, 216005312, 216137024, 216267328, 216399296, 1120 216530752, 216661696, 216790592, 216923968, 217054528, 217183168, 1121 217316672, 217448128, 217579072, 217709504, 217838912, 217972672, 1122 218102848, 218233024, 218364736, 218496832, 218627776, 218759104, 1123 218888896, 219021248, 219151936, 219281728, 219413056, 219545024, 1124 219675968, 219807296, 219938624, 220069312, 220200128, 220331456, 1125 220461632, 220592704, 220725184, 220855744, 220987072, 221117888, 1126 221249216, 221378368, 221510336, 221642048, 221772736, 221904832, 1127 222031808, 222166976, 222297536, 222428992, 222559936, 222690368, 1128 222820672, 222953152, 223083968, 223213376, 223345984, 223476928, 1129 223608512, 223738688, 223869376, 224001472, 224132672, 224262848, 1130 224394944, 224524864, 224657344, 224788288, 224919488, 225050432, 1131 225181504, 225312704, 225443776, 225574592, 225704768, 225834176, 1132 225966784, 226097216, 226229824, 226360384, 226491712, 226623424, 1133 226754368, 226885312, 227015104, 227147456, 227278528, 227409472, 1134 227539904, 227669696, 227802944, 227932352, 228065216, 228196288, 1135 228326464, 228457792, 228588736, 228720064, 228850112, 228981056, 1136 229113152, 229243328, 229375936, 229505344, 229636928, 229769152, 1137 229894976, 230030272, 230162368, 230292416, 230424512, 230553152, 1138 230684864, 230816704, 230948416, 231079616, 231210944, 231342016, 1139 231472448, 231603776, 231733952, 231866176, 231996736, 232127296, 1140 232259392, 232388672, 232521664, 232652608, 232782272, 232914496, 1141 233043904, 233175616, 233306816, 233438528, 233569984, 233699776, 1142 233830592, 233962688, 234092224, 234221888, 234353984, 234485312, 1143 234618304, 234749888, 234880832, 235011776, 235142464, 235274048, 1144 235403456, 235535936, 235667392, 235797568, 235928768, 236057152, 1145 236190272, 236322752, 236453312, 236583616, 236715712, 236846528, 1146 236976448, 237108544, 237239104, 237371072, 237501632, 237630784, 1147 237764416, 237895232, 238026688, 238157632, 238286912, 238419392, 1148 238548032, 238681024, 238812608, 238941632, 239075008, 239206336, 1149 239335232, 239466944, 239599168, 239730496, 239861312, 239992384, 1150 240122816, 240254656, 240385856, 240516928, 240647872, 240779072, 1151 240909632, 241040704, 241171904, 241302848, 241433408, 241565248, 1152 241696192, 241825984, 241958848, 242088256, 242220224, 242352064, 1153 242481856, 242611648, 242744896, 242876224, 243005632, 243138496, 1154 243268672, 243400384, 243531712, 243662656, 243793856, 243924544, 1155 244054592, 244187072, 244316608, 244448704, 244580032, 244710976, 1156 244841536, 244972864, 245104448, 245233984, 245365312, 245497792, 1157 245628736, 245759936, 245889856, 246021056, 246152512, 246284224, 1158 246415168, 246545344, 246675904, 246808384, 246939584, 247070144, 1159 247199552, 247331648, 247463872, 247593536, 247726016, 247857088, 1160 247987648, 248116928, 248249536, 248380736, 248512064, 248643008, 1161 248773312, 248901056, 249036608, 249167552, 249298624, 249429184, 1162 249560512, 249692096, 249822784, 249954112, 250085312, 250215488, 1163 250345792, 250478528, 250608704, 250739264, 250870976, 251002816, 1164 251133632, 251263552, 251395136, 251523904, 251657792, 251789248, 1165 251919424, 252051392, 252182464, 252313408, 252444224, 252575552, 1166 252706624, 252836032, 252968512, 253099712, 253227584, 253361728, 1167 253493056, 253623488, 253754432, 253885504, 254017216, 254148032, 1168 254279488, 254410432, 254541376, 254672576, 254803264, 254933824, 1169 255065792, 255196736, 255326528, 255458752, 255589952, 255721408, 1170 255851072, 255983296, 256114624, 256244416, 256374208, 256507712, 1171 256636096, 256768832, 256900544, 257031616, 257162176, 257294272, 1172 257424448, 257555776, 257686976, 257818432, 257949632, 258079552, 1173 258211136, 258342464, 258473408, 258603712, 258734656, 258867008, 1174 258996544, 259127744, 259260224, 259391296, 259522112, 259651904, 1175 259784384, 259915328, 260045888, 260175424, 260308544, 260438336, 1176 260570944, 260700992, 260832448, 260963776, 261092672, 261226304, 1177 261356864, 261487936, 261619648, 261750592, 261879872, 262011968, 1178 262143424, 262274752, 262404416, 262537024, 262667968, 262799296, 1179 262928704, 263061184, 263191744, 263322944, 263454656, 263585216, 1180 263716672, 263847872, 263978944, 264108608, 264241088, 264371648, 1181 264501184, 264632768, 264764096, 264895936, 265024576, 265158464, 1182 265287488, 265418432, 265550528, 265681216, 265813312, 265943488, 1183 266075968, 266206144, 266337728, 266468032, 266600384, 266731072, 1184 266862272, 266993344, 267124288, 267255616, 267386432, 267516992, 1185 267648704, 267777728, 267910592, 268040512, 268172096, 268302784, 1186 268435264, 268566208, 268696256, 268828096, 268959296, 269090368, 1187 269221312, 269352256, 269482688, 269614784, 269745856, 269876416, 1188 270007616, 270139328, 270270272, 270401216, 270531904, 270663616, 1189 270791744, 270924736, 271056832, 271186112, 271317184, 271449536, 1190 271580992, 271711936, 271843136, 271973056, 272105408, 272236352, 1191 272367296, 272498368, 272629568, 272759488, 272891456, 273022784, 1192 273153856, 273284672, 273415616, 273547072, 273677632, 273808448, 1193 273937088, 274071488, 274200896, 274332992, 274463296, 274595392, 1194 274726208, 274857536, 274988992, 275118656, 275250496, 275382208, 1195 275513024, 275643968, 275775296, 275906368, 276037184, 276167872, 1196 276297664, 276429376, 276560576, 276692672, 276822976, 276955072, 1197 277085632, 277216832, 277347008, 277478848, 277609664, 277740992, 1198 277868608, 278002624, 278134336, 278265536, 278395328, 278526784, 1199 278657728, 278789824, 278921152, 279052096, 279182912, 279313088, 1200 279443776, 279576256, 279706048, 279838528, 279969728, 280099648, 1201 280230976, 280361408, 280493632, 280622528, 280755392, 280887104, 1202 281018176, 281147968, 281278912, 281411392, 281542592, 281673152, 1203 281803712, 281935552, 282066496, 282197312, 282329024, 282458816, 1204 282590272, 282720832, 282853184, 282983744, 283115072, 283246144, 1205 283377344, 283508416, 283639744, 283770304, 283901504, 284032576, 1206 284163136, 284294848, 284426176, 284556992, 284687296, 284819264, 1207 284950208, 285081536}