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