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