github.com/phillinzzz/newBsc@v1.1.6/consensus/ethash/algorithm.go (about)

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