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