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