├── .codecov.yml ├── .github ├── dependabot.yml ├── stale.yml └── workflows │ ├── pkg.yml │ └── x.yml ├── .gitignore ├── .golangci.yml ├── 128.go ├── 32.go ├── 64.go ├── LICENSE ├── Makefile ├── README.md ├── _testdata ├── ch128.csv └── data.json ├── ch_128.go ├── ch_128_test.go ├── ch_64.go ├── ch_64_test.go ├── city_test.go ├── data_test.go ├── doc.go ├── example_test.go ├── fuzz_test.go ├── go.coverage.sh ├── go.mod ├── go.test.sh └── internal └── citygen └── main.go /.codecov.yml: -------------------------------------------------------------------------------- 1 | ignore: 2 | # We have only auxiliary binaries in internal/ no actual user-facing code. 3 | - internal/** 4 | coverage: 5 | status: 6 | patch: false 7 | project: 8 | default: 9 | threshold: 0.5% 10 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: gomod 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | - package-ecosystem: github-actions 8 | directory: "/" 9 | schedule: 10 | interval: daily 11 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 366 3 | 4 | # Number of days of inactivity before a stale issue is closed 5 | daysUntilClose: 30 6 | 7 | # Issues with these labels will never be considered stale 8 | exemptLabels: 9 | - pinned 10 | - security 11 | - bug 12 | - blocked 13 | - protected 14 | - triaged 15 | 16 | # Label to use when marking an issue as stale 17 | staleLabel: stale 18 | 19 | # Comment to post when marking an issue as stale. Set to `false` to disable 20 | markComment: > 21 | This issue has been automatically marked as stale because it has not had 22 | recent activity. It will be closed if no further activity occurs. Thank you 23 | for your contributions. 24 | 25 | # Comment to post when closing a stale issue. Set to `false` to disable 26 | closeComment: false -------------------------------------------------------------------------------- /.github/workflows/pkg.yml: -------------------------------------------------------------------------------- 1 | name: pkg 2 | 3 | on: 4 | push: 5 | tags: 6 | - v* 7 | 8 | jobs: 9 | run: 10 | uses: go-faster/x/.github/workflows/release.yml@main 11 | -------------------------------------------------------------------------------- /.github/workflows/x.yml: -------------------------------------------------------------------------------- 1 | name: x 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | workflow_dispatch: 8 | 9 | # Common Go workflows from go faster 10 | # See https://github.com/go-faster/x 11 | jobs: 12 | test: 13 | uses: go-faster/x/.github/workflows/test.yml@main 14 | cover: 15 | uses: go-faster/x/.github/workflows/cover.yml@main 16 | lint: 17 | uses: go-faster/x/.github/workflows/lint.yml@main 18 | commit: 19 | uses: go-faster/x/.github/workflows/commit.yml@main 20 | nancy: 21 | uses: go-faster/x/.github/workflows/nancy.yml@main 22 | codeql: 23 | uses: go-faster/x/.github/workflows/codeql.yml@main 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.exe 3 | *.exe~ 4 | *.dll 5 | *.so 6 | *.dylib 7 | 8 | # Test binary, build with `go test -c` 9 | *.test 10 | 11 | # Output of the go coverage tool, specifically when used with LiteIDE 12 | *.out 13 | -------------------------------------------------------------------------------- /.golangci.yml: -------------------------------------------------------------------------------- 1 | linters-settings: 2 | govet: 3 | check-shadowing: true 4 | gocyclo: 5 | min-complexity: 15 6 | maligned: 7 | suggest-new: true 8 | dupl: 9 | threshold: 120 10 | goconst: 11 | min-len: 2 12 | min-occurrences: 3 13 | misspell: 14 | locale: US 15 | lll: 16 | line-length: 140 17 | goimports: 18 | local-prefixes: github.com/go-faster/ 19 | gocritic: 20 | enabled-tags: 21 | - diagnostic 22 | - experimental 23 | - opinionated 24 | - performance 25 | - style 26 | disabled-checks: 27 | - hugeParam 28 | - rangeValCopy 29 | - exitAfterDefer 30 | - whyNoLint 31 | - singleCaseSwitch 32 | - commentedOutCode 33 | - appendAssign 34 | - unnecessaryBlock 35 | - redundantSprint 36 | 37 | linters: 38 | disable-all: true 39 | enable: 40 | - deadcode 41 | - depguard 42 | - dogsled 43 | - errcheck 44 | - goconst 45 | - gocritic 46 | - gofmt 47 | - goimports 48 | - revive 49 | - gosec 50 | - gosimple 51 | - govet 52 | - ineffassign 53 | - misspell 54 | - nakedret 55 | - staticcheck 56 | - structcheck 57 | - stylecheck 58 | - typecheck 59 | - unconvert 60 | - unparam 61 | - unused 62 | - varcheck 63 | - whitespace 64 | 65 | # Do not enable: 66 | # - wsl (too opinionated about newlines) 67 | # - godox (todos are OK) 68 | # - bodyclose (false positives on helper functions) 69 | # - prealloc (not worth it in scope of this project) 70 | # - maligned (same as prealloc) 71 | # - funlen (gocyclo is enough) 72 | # - gochecknoglobals (we know when it is ok to use globals) 73 | 74 | issues: 75 | exclude-use-default: false 76 | exclude-rules: 77 | # Disable linters that are annoying in tests. 78 | - path: _test\.go 79 | linters: 80 | - gocyclo 81 | - errcheck 82 | - dupl 83 | - gosec 84 | - funlen 85 | - goconst 86 | - gocognit 87 | - scopelint 88 | - lll 89 | 90 | - path: _test\.go 91 | text: "Combine" 92 | linters: 93 | - gocritic 94 | 95 | # Check that equal to self is true 96 | - linters: [gocritic] 97 | source: '(assert|require).+Equal' 98 | text: 'dupArg' 99 | path: _test\.go 100 | 101 | # Ignore shadowing of err. 102 | - linters: [ govet ] 103 | text: 'declaration of "(err|ctx|log|c)"' 104 | 105 | # Ignore linters in main packages. 106 | - path: main\.go 107 | linters: [ goconst, funlen, gocognit, gocyclo ] 108 | 109 | # Ignore run-once generator 110 | - path: citygen 111 | linters: [ revive, gosec ] 112 | -------------------------------------------------------------------------------- /128.go: -------------------------------------------------------------------------------- 1 | package city 2 | 3 | import "encoding/binary" 4 | 5 | // much faster than uint64[2] 6 | 7 | // U128 is uint128. 8 | type U128 struct { 9 | Low uint64 // first 64 bits 10 | High uint64 // last 64 bits 11 | } 12 | 13 | // A subroutine for Hash128(). Returns a decent 128-bit hash for strings 14 | // of any length representable in signed long. Based on City and Mumur. 15 | func cityMurmur(s []byte, seed U128) U128 { 16 | length := len(s) 17 | a := seed.Low 18 | b := seed.High 19 | c := uint64(0) 20 | d := uint64(0) 21 | l := length - 16 22 | if l <= 0 { // length <= 16 23 | a = shiftMix(a*k1) * k1 24 | c = b*k1 + hash0to16(s, length) 25 | 26 | tmp := c 27 | if length >= 8 { 28 | tmp = binary.LittleEndian.Uint64(s) 29 | } 30 | d = shiftMix(a + tmp) 31 | } else { // length > 16 32 | c = hash16(binary.LittleEndian.Uint64(s[length-8:])+k1, a) 33 | d = hash16(b+uint64(length), c+binary.LittleEndian.Uint64(s[length-16:])) 34 | a += d 35 | for { 36 | a ^= shiftMix(binary.LittleEndian.Uint64(s)*k1) * k1 37 | a *= k1 38 | b ^= a 39 | c ^= shiftMix(binary.LittleEndian.Uint64(s[8:])*k1) * k1 40 | c *= k1 41 | d ^= c 42 | s = s[16:] 43 | l -= 16 44 | if l <= 0 { 45 | break 46 | } 47 | } 48 | } 49 | a = hash16(a, c) 50 | b = hash16(d, b) 51 | return U128{a ^ b, hash16(b, a)} 52 | } 53 | 54 | // Hash128Seed return a 128-bit hash with a seed. 55 | func Hash128Seed(s []byte, seed U128) U128 { 56 | if len(s) < 128 { 57 | return cityMurmur(s, seed) 58 | } 59 | 60 | // Saving initial input for tail hashing. 61 | t := s 62 | 63 | // We expect len >= 128 to be the common case. Keep 56 bytes of state: 64 | // v, w, x, y and z. 65 | var v, w U128 66 | x := seed.Low 67 | y := seed.High 68 | z := uint64(len(s)) * k1 69 | 70 | v.Low = rot64(y^k1, 49)*k1 + binary.LittleEndian.Uint64(s) 71 | v.High = rot64(v.Low, 42)*k1 + binary.LittleEndian.Uint64(s[8:]) 72 | w.Low = rot64(y+z, 35)*k1 + x 73 | w.High = rot64(x+binary.LittleEndian.Uint64(s[88:]), 53) * k1 74 | 75 | // This is the same inner loop as Hash64(), manually unrolled. 76 | for len(s) >= 128 { 77 | // Roll 1. 78 | x = rot64(x+y+v.Low+binary.LittleEndian.Uint64(s[8:]), 37) * k1 79 | y = rot64(y+v.High+binary.LittleEndian.Uint64(s[48:]), 42) * k1 80 | x ^= w.High 81 | y += v.Low + binary.LittleEndian.Uint64(s[40:]) 82 | z = rot64(z+w.Low, 33) * k1 83 | v = weakHash32SeedsByte(s, v.High*k1, x+w.Low) 84 | w = weakHash32SeedsByte(s[32:], z+w.High, y+binary.LittleEndian.Uint64(s[16:])) 85 | z, x = x, z 86 | s = s[64:] 87 | 88 | // Roll 2. 89 | x = rot64(x+y+v.Low+binary.LittleEndian.Uint64(s[8:]), 37) * k1 90 | y = rot64(y+v.High+binary.LittleEndian.Uint64(s[48:]), 42) * k1 91 | x ^= w.High 92 | y += v.Low + binary.LittleEndian.Uint64(s[40:]) 93 | z = rot64(z+w.Low, 33) * k1 94 | v = weakHash32SeedsByte(s, v.High*k1, x+w.Low) 95 | w = weakHash32SeedsByte(s[32:], z+w.High, y+binary.LittleEndian.Uint64(s[16:])) 96 | z, x = x, z 97 | s = s[64:] 98 | } 99 | 100 | x += rot64(v.Low+z, 49) * k0 101 | y = y*k0 + rot64(w.High, 37) 102 | z = z*k0 + rot64(w.Low, 27) 103 | w.Low *= 9 104 | v.Low *= k0 105 | 106 | // If 0 < length < 128, hash up to 4 chunks of 32 bytes each from the end of s. 107 | for i := 0; i < len(s); { 108 | i += 32 109 | y = rot64(x+y, 42)*k0 + v.High 110 | w.Low += binary.LittleEndian.Uint64(t[len(t)-i+16:]) 111 | x = x*k0 + w.Low 112 | z += w.High + binary.LittleEndian.Uint64(t[len(t)-i:]) 113 | w.High += v.Low 114 | v = weakHash32SeedsByte(t[len(t)-i:], v.Low+z, v.High) 115 | v.Low *= k0 116 | } 117 | 118 | // At this point our 56 bytes of state should contain more than 119 | // enough information for a strong 128-bit hash. We use two different 120 | // 56-byte-to-8-byte hashes to get a 16-byte final result. 121 | x = hash16(x, v.Low) 122 | y = hash16(y+z, w.Low) 123 | 124 | return U128{ 125 | Low: hash16(x+v.High, w.High) + y, 126 | High: hash16(x+w.High, y+v.High), 127 | } 128 | } 129 | 130 | // Hash128 returns a 128-bit hash and are tuned for strings of at least 131 | // a few hundred bytes. Depending on your compiler and hardware, 132 | // it's likely faster than Hash64() on sufficiently long strings. 133 | // It's slower than necessary on shorter strings, but we expect 134 | // that case to be relatively unimportant. 135 | func Hash128(s []byte) U128 { 136 | if len(s) >= 16 { 137 | return Hash128Seed(s[16:], U128{ 138 | Low: binary.LittleEndian.Uint64(s), 139 | High: binary.LittleEndian.Uint64(s[8:]) + k0}, 140 | ) 141 | } 142 | return Hash128Seed(s, U128{Low: k0, High: k1}) 143 | } 144 | -------------------------------------------------------------------------------- /32.go: -------------------------------------------------------------------------------- 1 | package city 2 | 3 | import "encoding/binary" 4 | 5 | // Some primes between 2^63 and 2^64 for various uses. 6 | const ( 7 | k0 uint64 = 0xc3a5c85c97cb3127 8 | k1 uint64 = 0xb492b66fbe98f273 9 | k2 uint64 = 0x9ae16a3b2f90404f 10 | ) 11 | 12 | // Magic numbers for 32-bit hashing. Copied from Murmur3. 13 | const ( 14 | c1 uint32 = 0xcc9e2d51 15 | c2 uint32 = 0x1b873593 16 | ) 17 | 18 | func bswap32(x uint32) uint32 { 19 | return ((x & 0xff000000) >> 24) | 20 | ((x & 0x00ff0000) >> 8) | 21 | ((x & 0x0000ff00) << 8) | 22 | ((x & 0x000000ff) << 24) 23 | } 24 | 25 | func fetch32(p []byte) uint32 { 26 | return binary.LittleEndian.Uint32(p) 27 | } 28 | 29 | // A 32-bit to 32-bit integer hash copied from Murmr3. 30 | func fmix(h uint32) uint32 { 31 | h ^= h >> 16 32 | h *= 0x85ebca6b 33 | h ^= h >> 13 34 | h *= 0xc2b2ae35 35 | h ^= h >> 16 36 | return h 37 | } 38 | 39 | func rotate32(val uint32, shift int) uint32 { 40 | // Avoid shifting by 32: doing so yields and undefined result. 41 | if shift == 0 { 42 | return val 43 | } 44 | return (val >> uint32(shift)) | (val << (32 - uint32(shift))) 45 | } 46 | 47 | func mur(a, h uint32) uint32 { 48 | // Helper from Murmur3 for combining two 32-bit values. 49 | a *= c1 50 | a = rotate32(a, 17) 51 | a *= c2 52 | h ^= a 53 | h = rotate32(h, 19) 54 | return h*5 + 0xe6546b64 55 | } 56 | 57 | func hash32Len13to24(s []byte, length int) uint32 { 58 | a := fetch32(s[(length>>1)-4:]) 59 | b := fetch32(s[4:]) 60 | c := fetch32(s[length-8:]) 61 | d := fetch32(s[length>>1:]) 62 | e := fetch32(s) 63 | f := fetch32(s[length-4:]) 64 | h := uint32(length) 65 | return fmix(mur(f, mur(e, mur(d, mur(c, mur(b, mur(a, h))))))) 66 | } 67 | 68 | func hash32Len0to4(s []byte, length int) uint32 { 69 | b := uint32(0) 70 | c := uint32(9) 71 | for _, v := range s[:length] { 72 | b = uint32(int64(b)*int64(c1) + int64(int8(v))) 73 | c ^= b 74 | } 75 | return fmix(mur(b, mur(uint32(length), c))) 76 | } 77 | 78 | func hash32Len5to12(s []byte, length int) uint32 { 79 | a := uint32(length) 80 | b := uint32(length) * 5 81 | c := uint32(9) 82 | d := b 83 | a += fetch32(s) 84 | b += fetch32(s[length-4:]) 85 | c += fetch32(s[(length>>1)&4:]) 86 | return fmix(mur(c, mur(b, mur(a, d)))) 87 | } 88 | 89 | // Hash32 return 32-bit hash. 90 | func Hash32(s []byte) uint32 { 91 | length := len(s) 92 | if length <= 4 { 93 | return hash32Len0to4(s, length) 94 | } 95 | if length <= 12 { 96 | return hash32Len5to12(s, length) 97 | } 98 | if length <= 24 { 99 | return hash32Len13to24(s, length) 100 | } 101 | 102 | // len > 24 103 | h := uint32(length) 104 | g := c1 * uint32(length) 105 | f := g 106 | a0 := rotate32(fetch32(s[length-4:])*c1, 17) * c2 107 | a1 := rotate32(fetch32(s[length-8:])*c1, 17) * c2 108 | a2 := rotate32(fetch32(s[length-16:])*c1, 17) * c2 109 | a3 := rotate32(fetch32(s[length-12:])*c1, 17) * c2 110 | a4 := rotate32(fetch32(s[length-20:])*c1, 17) * c2 111 | h ^= a0 112 | h = rotate32(h, 19) 113 | h = h*5 + 0xe6546b64 114 | h ^= a2 115 | h = rotate32(h, 19) 116 | h = h*5 + 0xe6546b64 117 | g ^= a1 118 | g = rotate32(g, 19) 119 | g = g*5 + 0xe6546b64 120 | g ^= a3 121 | g = rotate32(g, 19) 122 | g = g*5 + 0xe6546b64 123 | f += a4 124 | f = rotate32(f, 19) 125 | f = f*5 + 0xe6546b64 126 | iters := (length - 1) / 20 127 | for { 128 | a0 := rotate32(fetch32(s)*c1, 17) * c2 129 | a1 := fetch32(s[4:]) 130 | a2 := rotate32(fetch32(s[8:])*c1, 17) * c2 131 | a3 := rotate32(fetch32(s[12:])*c1, 17) * c2 132 | a4 := fetch32(s[16:]) 133 | h ^= a0 134 | h = rotate32(h, 18) 135 | h = h*5 + 0xe6546b64 136 | f += a1 137 | f = rotate32(f, 19) 138 | f *= c1 139 | g += a2 140 | g = rotate32(g, 18) 141 | g = g*5 + 0xe6546b64 142 | h ^= a3 + a1 143 | h = rotate32(h, 19) 144 | h = h*5 + 0xe6546b64 145 | g ^= a4 146 | g = bswap32(g) * 5 147 | h += a4 * 5 148 | h = bswap32(h) 149 | f += a0 150 | f, h, g = g, f, h 151 | s = s[20:] 152 | 153 | iters-- 154 | if iters == 0 { 155 | break 156 | } 157 | } 158 | g = rotate32(g, 11) * c1 159 | g = rotate32(g, 17) * c1 160 | f = rotate32(f, 11) * c1 161 | f = rotate32(f, 17) * c1 162 | h = rotate32(h+g, 19) 163 | h = h*5 + 0xe6546b64 164 | h = rotate32(h, 17) * c1 165 | h = rotate32(h+f, 19) 166 | h = h*5 + 0xe6546b64 167 | h = rotate32(h, 17) * c1 168 | return h 169 | } 170 | -------------------------------------------------------------------------------- /64.go: -------------------------------------------------------------------------------- 1 | package city 2 | 3 | import "encoding/binary" 4 | 5 | func bswap64(x uint64) uint64 { 6 | return ((x & 0xff00000000000000) >> 56) | 7 | ((x & 0x00ff000000000000) >> 40) | 8 | ((x & 0x0000ff0000000000) >> 24) | 9 | ((x & 0x000000ff00000000) >> 8) | 10 | ((x & 0x00000000ff000000) << 8) | 11 | ((x & 0x0000000000ff0000) << 24) | 12 | ((x & 0x000000000000ff00) << 40) | 13 | ((x & 0x00000000000000ff) << 56) 14 | } 15 | 16 | // Bitwise right rotate. 17 | func rot64(val uint64, shift uint) uint64 { 18 | // Avoid shifting by 64: doing so yields an undefined result. 19 | if shift == 0 { 20 | return val 21 | } 22 | return (val >> shift) | val<<(64-shift) 23 | } 24 | 25 | func shiftMix(val uint64) uint64 { 26 | return val ^ (val >> 47) 27 | } 28 | 29 | func hash128to64(x U128) uint64 { 30 | const mul = uint64(0x9ddfea08eb382d69) 31 | a := (x.Low ^ x.High) * mul 32 | a ^= a >> 47 33 | b := (x.High ^ a) * mul 34 | b ^= b >> 47 35 | b *= mul 36 | return b 37 | } 38 | 39 | func hash16(u, v uint64) uint64 { 40 | return hash128to64(U128{u, v}) 41 | } 42 | 43 | func hash16mul(u, v, mul uint64) uint64 { 44 | // Murmur-inspired hashing. 45 | a := (u ^ v) * mul 46 | a ^= a >> 47 47 | b := (v ^ a) * mul 48 | b ^= b >> 47 49 | b *= mul 50 | return b 51 | } 52 | 53 | func hash0to16(s []byte, length int) uint64 { 54 | if length >= 8 { 55 | mul := k2 + uint64(length)*2 56 | a := binary.LittleEndian.Uint64(s) + k2 57 | b := binary.LittleEndian.Uint64(s[length-8:]) 58 | c := rot64(b, 37)*mul + a 59 | d := (rot64(a, 25) + b) * mul 60 | return hash16mul(c, d, mul) 61 | } 62 | if length >= 4 { 63 | mul := k2 + uint64(length)*2 64 | a := uint64(fetch32(s)) 65 | first := uint64(length) + (a << 3) 66 | second := uint64(fetch32(s[length-4:])) 67 | result := hash16mul( 68 | first, 69 | second, 70 | mul) 71 | return result 72 | } 73 | if length > 0 { 74 | a := s[0] 75 | b := s[length>>1] 76 | c := s[length-1] 77 | y := uint32(a) + (uint32(b) << 8) 78 | z := uint32(length) + (uint32(c) << 2) 79 | return shiftMix(uint64(y)*k2^uint64(z)*k0) * k2 80 | } 81 | return k2 82 | } 83 | 84 | // This probably works well for 16-byte strings as well, but is may be overkill 85 | // in that case 86 | func hash17to32(s []byte, length int) uint64 { 87 | mul := k2 + uint64(length)*2 88 | a := binary.LittleEndian.Uint64(s) * k1 89 | b := binary.LittleEndian.Uint64(s[8:]) 90 | c := binary.LittleEndian.Uint64(s[length-8:]) * mul 91 | d := binary.LittleEndian.Uint64(s[length-16:]) * k2 92 | return hash16mul( 93 | rot64(a+b, 43)+rot64(c, 30)+d, 94 | a+rot64(b+k2, 18)+c, 95 | mul, 96 | ) 97 | } 98 | 99 | // Return a 16-byte hash for 48 bytes. Quick and dirty. 100 | // callers do best to use "random-looking" values for a and b. 101 | func weakHash32Seeds(w, x, y, z, a, b uint64) U128 { 102 | a += w 103 | b = rot64(b+a+z, 21) 104 | c := a 105 | a += x 106 | a += y 107 | b += rot64(a, 44) 108 | return U128{a + z, b + c} 109 | } 110 | 111 | // Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty. 112 | func weakHash32SeedsByte(s []byte, a, b uint64) U128 { 113 | _ = s[31] 114 | return weakHash32Seeds( 115 | binary.LittleEndian.Uint64(s[0:0+8:0+8]), 116 | binary.LittleEndian.Uint64(s[8:8+8:8+8]), 117 | binary.LittleEndian.Uint64(s[16:16+8:16+8]), 118 | binary.LittleEndian.Uint64(s[24:24+8:24+8]), 119 | a, 120 | b, 121 | ) 122 | } 123 | 124 | // Return an 8-byte hash for 33 to 64 bytes. 125 | func hash33to64(s []byte, length int) uint64 { 126 | mul := k2 + uint64(length)*2 127 | a := binary.LittleEndian.Uint64(s) * k2 128 | b := binary.LittleEndian.Uint64(s[8:]) 129 | c := binary.LittleEndian.Uint64(s[length-24:]) 130 | d := binary.LittleEndian.Uint64(s[length-32:]) 131 | e := binary.LittleEndian.Uint64(s[16:]) * k2 132 | f := binary.LittleEndian.Uint64(s[24:]) * 9 133 | g := binary.LittleEndian.Uint64(s[length-8:]) 134 | h := binary.LittleEndian.Uint64(s[length-16:]) * mul 135 | u := rot64(a+g, 43) + (rot64(b, 30)+c)*9 136 | v := ((a + g) ^ d) + f + 1 137 | w := bswap64((u+v)*mul) + h 138 | x := rot64(e+f, 42) + c 139 | y := (bswap64((v+w)*mul) + g) * mul 140 | z := e + f + c 141 | a = bswap64((x+z)*mul+y) + b 142 | b = shiftMix((z+a)*mul+d+h) * mul 143 | return b + x 144 | } 145 | 146 | // nearestMultiple64 returns the nearest multiple of 64 for length of 147 | // provided byte slice. 148 | func nearestMultiple64(b []byte) int { 149 | return ((len(b)) - 1) & ^63 150 | } 151 | 152 | // Hash64 return a 64-bit hash. 153 | func Hash64(s []byte) uint64 { 154 | length := len(s) 155 | if length <= 16 { 156 | return hash0to16(s, length) 157 | } 158 | if length <= 32 { 159 | return hash17to32(s, length) 160 | } 161 | if length <= 64 { 162 | return hash33to64(s, length) 163 | } 164 | 165 | // For string over 64 bytes we hash the end first, and then as we 166 | // loop we keep 56 bytes of state: v, w, x, y and z. 167 | x := binary.LittleEndian.Uint64(s[length-40:]) 168 | y := binary.LittleEndian.Uint64(s[length-16:]) + binary.LittleEndian.Uint64(s[length-56:]) 169 | z := hash16(binary.LittleEndian.Uint64(s[length-48:])+uint64(length), binary.LittleEndian.Uint64(s[length-24:])) 170 | v := weakHash32SeedsByte(s[length-64:], uint64(length), z) 171 | w := weakHash32SeedsByte(s[length-32:], y+k1, x) 172 | x = x*k1 + binary.LittleEndian.Uint64(s) 173 | 174 | // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks. 175 | s = s[:nearestMultiple64(s)] 176 | for len(s) > 0 { 177 | x = rot64(x+y+v.Low+binary.LittleEndian.Uint64(s[8:]), 37) * k1 178 | y = rot64(y+v.High+binary.LittleEndian.Uint64(s[48:]), 42) * k1 179 | x ^= w.High 180 | y += v.Low + binary.LittleEndian.Uint64(s[40:]) 181 | z = rot64(z+w.Low, 33) * k1 182 | v = weakHash32SeedsByte(s, v.High*k1, x+w.Low) 183 | w = weakHash32SeedsByte(s[32:], z+w.High, y+binary.LittleEndian.Uint64(s[16:])) 184 | 185 | z, x = x, z 186 | s = s[64:] 187 | } 188 | 189 | return hash16( 190 | hash16(v.Low, w.Low)+shiftMix(y)*k1+z, 191 | hash16(v.High, w.High)+x, 192 | ) 193 | } 194 | 195 | // Hash64WithSeed return a 64-bit hash with a seed. 196 | func Hash64WithSeed(s []byte, seed uint64) uint64 { 197 | return Hash64WithSeeds(s, k2, seed) 198 | } 199 | 200 | // Hash64WithSeeds return a 64-bit hash with two seeds. 201 | func Hash64WithSeeds(s []byte, seed0, seed1 uint64) uint64 { 202 | return hash16(Hash64(s)-seed0, seed1) 203 | } 204 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 tenfy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | test: 2 | @./go.test.sh 3 | .PHONY: test 4 | 5 | coverage: 6 | @./go.coverage.sh 7 | .PHONY: coverage 8 | 9 | test_fast: 10 | go test ./... 11 | 12 | tidy: 13 | go mod tidy 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # city [![](https://img.shields.io/badge/go-pkg-00ADD8)](https://pkg.go.dev/github.com/go-faster/city#section-documentation) [![](https://img.shields.io/codecov/c/github/go-faster/city?label=cover)](https://codecov.io/gh/go-faster/city) [![stable](https://img.shields.io/badge/-stable-brightgreen)](https://go-faster.org/docs/projects/status#stable) 2 | [CityHash](https://github.com/google/cityhash) in Go. Fork of [tenfyzhong/cityhash](https://github.com/tenfyzhong/cityhash). 3 | 4 | Note: **prefer [xxhash](https://github.com/cespare/xxhash) as non-cryptographic hash algorithm**, this package is intended 5 | for places where CityHash is already used. 6 | 7 | CityHash **is not compatible** to [FarmHash](https://github.com/google/farmhash), use [go-farm](https://github.com/dgryski/go-farm). 8 | 9 | ```console 10 | go get github.com/go-faster/city 11 | ``` 12 | 13 | ```go 14 | city.Hash128([]byte("hello")) 15 | ``` 16 | 17 | * Faster 18 | * Supports ClickHouse hash 19 | 20 | ``` 21 | name old time/op new time/op delta 22 | CityHash64-32 333ns ± 2% 108ns ± 3% -67.57% (p=0.000 n=10+10) 23 | CityHash128-32 347ns ± 2% 112ns ± 2% -67.74% (p=0.000 n=9+10) 24 | 25 | name old speed new speed delta 26 | CityHash64-32 3.08GB/s ± 2% 9.49GB/s ± 3% +208.40% (p=0.000 n=10+10) 27 | CityHash128-32 2.95GB/s ± 2% 9.14GB/s ± 2% +209.98% (p=0.000 n=9+10) 28 | ``` 29 | 30 | ## Examples 31 | 32 | Let's take 64-bit hash from `Moscow` string. 33 | 34 | ```sql 35 | :) SELECT cityHash64('Moscow') 36 | 12507901496292878638 37 | ``` 38 | 39 | ```go 40 | s := []byte("Moscow") 41 | fmt.Print("ClickHouse: ") 42 | fmt.Println(city.CH64(s)) 43 | fmt.Print("CityHash: ") 44 | fmt.Println(city.Hash64(s)) 45 | // Output: 46 | // ClickHouse: 12507901496292878638 47 | // CityHash: 5992710078453357409 48 | ``` 49 | 50 | You can use [test data corpus](https://github.com/go-faster/city/blob/main/_testdata/data.json) to check your implementation of ClickHouse CityHash variant if needed. 51 | 52 | ```json 53 | { 54 | "Seed": { 55 | "Low": 5577006791947779410, 56 | "High": 8674665223082153551 57 | }, 58 | "entries": [ 59 | { 60 | "Input": "Moscow", 61 | "City32": 431367057, 62 | "City64": 5992710078453357409, 63 | "City128": { 64 | "Low": 10019773792274861915, 65 | "High": 12276543986707912152 66 | }, 67 | "City128Seed": { 68 | "Low": 13396466470330251720, 69 | "High": 5508504338941663328 70 | }, 71 | "ClickHouse64": 12507901496292878638, 72 | "ClickHouse128": { 73 | "Low": 3377444358654451565, 74 | "High": 2499202049363713365 75 | }, 76 | "ClickHouse128Seed": { 77 | "Low": 568168482305327346, 78 | "High": 1719721512326527886 79 | } 80 | } 81 | ] 82 | } 83 | ``` 84 | 85 | ## Benchmarks 86 | 87 | ``` 88 | goos: linux 89 | goarch: amd64 90 | pkg: github.com/go-faster/city 91 | cpu: AMD Ryzen 9 5950X 16-Core Processor 92 | BenchmarkClickHouse128/16 2213.98 MB/s 93 | BenchmarkClickHouse128/64 4712.24 MB/s 94 | BenchmarkClickHouse128/256 7561.58 MB/s 95 | BenchmarkClickHouse128/1024 10158.98 MB/s 96 | BenchmarkClickHouse64 10379.89 MB/s 97 | BenchmarkCityHash32 3140.54 MB/s 98 | BenchmarkCityHash64 9508.45 MB/s 99 | BenchmarkCityHash128 9304.27 MB/s 100 | BenchmarkCityHash64Small 2700.84 MB/s 101 | BenchmarkCityHash128Small 1175.65 MB/s 102 | ``` 103 | -------------------------------------------------------------------------------- /_testdata/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "Seed": { 3 | "Low": 5577006791947779410, 4 | "High": 8674665223082153551 5 | }, 6 | "Entries": [ 7 | { 8 | "Input": "Moscow", 9 | "City32": 431367057, 10 | "City64": 5992710078453357409, 11 | "City128": { 12 | "Low": 10019773792274861915, 13 | "High": 12276543986707912152 14 | }, 15 | "City128Seed": { 16 | "Low": 13396466470330251720, 17 | "High": 5508504338941663328 18 | }, 19 | "ClickHouse64": 12507901496292878638, 20 | "ClickHouse128": { 21 | "Low": 3377444358654451565, 22 | "High": 2499202049363713365 23 | }, 24 | "ClickHouse128Seed": { 25 | "Low": 568168482305327346, 26 | "High": 1719721512326527886 27 | } 28 | }, 29 | { 30 | "Input": "ClickHouse", 31 | "City32": 1586074392, 32 | "City64": 4321509792407916471, 33 | "City128": { 34 | "Low": 9486725109875734340, 35 | "High": 16384911740144003974 36 | }, 37 | "City128Seed": { 38 | "Low": 3162881111231059478, 39 | "High": 242154728339077522 40 | }, 41 | "ClickHouse64": 12904064065176299341, 42 | "ClickHouse128": { 43 | "Low": 3964518429637719570, 44 | "High": 8562533408163042306 45 | }, 46 | "ClickHouse128Seed": { 47 | "Low": 11747148340984707200, 48 | "High": 5004447335901390541 49 | } 50 | }, 51 | { 52 | "Input": "", 53 | "City32": 3696677242, 54 | "City64": 11160318154034397263, 55 | "City128": { 56 | "Low": 4463240938071824939, 57 | "High": 4374473821787594281 58 | }, 59 | "City128Seed": { 60 | "Low": 1935026918320664179, 61 | "High": 61008715075980643 62 | }, 63 | "ClickHouse64": 11160318154034397263, 64 | "ClickHouse128": { 65 | "Low": 4463240938071824939, 66 | "High": 4374473821787594281 67 | }, 68 | "ClickHouse128Seed": { 69 | "Low": 1935026918320664179, 70 | "High": 61008715075980643 71 | } 72 | }, 73 | { 74 | "Input": "a", 75 | "City32": 1016544589, 76 | "City64": 12917804110809363939, 77 | "City128": { 78 | "Low": 7969074168056553668, 79 | "High": 5955762262185338209 80 | }, 81 | "City128Seed": { 82 | "Low": 1400159176211212734, 83 | "High": 7006252670599176803 84 | }, 85 | "ClickHouse64": 2603192927274642682, 86 | "ClickHouse128": { 87 | "Low": 15163964786936388304, 88 | "High": 18266194243813403894 89 | }, 90 | "ClickHouse128Seed": { 91 | "Low": 13217532337516305979, 92 | "High": 1008127206705474693 93 | } 94 | }, 95 | { 96 | "Input": "ab", 97 | "City32": 1098068221, 98 | "City64": 12289600257749001502, 99 | "City128": { 100 | "Low": 1434454701921568952, 101 | "High": 14977791492677394990 102 | }, 103 | "City128Seed": { 104 | "Low": 2966951454887751226, 105 | "High": 6042003622446212611 106 | }, 107 | "ClickHouse64": 1725057946192985918, 108 | "ClickHouse128": { 109 | "Low": 12124403134182352952, 110 | "High": 15690918305607184567 111 | }, 112 | "ClickHouse128Seed": { 113 | "Low": 18137244581640236126, 114 | "High": 6054456767937016215 115 | } 116 | }, 117 | { 118 | "Input": "abc", 119 | "City32": 795041479, 120 | "City64": 2640714258260161385, 121 | "City128": { 122 | "Low": 4143508125394299908, 123 | "High": 11566915719555882565 124 | }, 125 | "City128Seed": { 126 | "Low": 5546025195476126621, 127 | "High": 300167305778777761 128 | }, 129 | "ClickHouse64": 4220206313085259313, 130 | "ClickHouse128": { 131 | "Low": 10380781289832139006, 132 | "High": 1416689273191665022 133 | }, 134 | "ClickHouse128Seed": { 135 | "Low": 6600600954358357539, 136 | "High": 4743764779043705706 137 | } 138 | }, 139 | { 140 | "Input": "abcd", 141 | "City32": 2562006677, 142 | "City64": 1897425971756105985, 143 | "City128": { 144 | "Low": 13319140115757694594, 145 | "High": 650444106621073625 146 | }, 147 | "City128Seed": { 148 | "Low": 17178203873417712244, 149 | "High": 3336035505985400967 150 | }, 151 | "ClickHouse64": 17823623939509273229, 152 | "ClickHouse128": { 153 | "Low": 15137505341054233748, 154 | "High": 14767571255030181100 155 | }, 156 | "ClickHouse128Seed": { 157 | "Low": 15458233570287844165, 158 | "High": 10874336093089746093 159 | } 160 | }, 161 | { 162 | "Input": "abcde", 163 | "City32": 2750637740, 164 | "City64": 13992479962126222548, 165 | "City128": { 166 | "Low": 10668970051761944655, 167 | "High": 17831839097762972641 168 | }, 169 | "City128Seed": { 170 | "Low": 7975962826736918869, 171 | "High": 15630740011956937235 172 | }, 173 | "ClickHouse64": 10649408139150141320, 174 | "ClickHouse128": { 175 | "Low": 9414485032960459596, 176 | "High": 14709035636812719000 177 | }, 178 | "ClickHouse128Seed": { 179 | "Low": 5847158233341230782, 180 | "High": 7961910190340331137 181 | } 182 | }, 183 | { 184 | "Input": "abcdef", 185 | "City32": 260127396, 186 | "City64": 14062832464964076237, 187 | "City128": { 188 | "Low": 8033370924408288235, 189 | "High": 9054869399155703984 190 | }, 191 | "City128Seed": { 192 | "Low": 16252882215651111084, 193 | "High": 16281023255203441355 194 | }, 195 | "ClickHouse64": 18226839071476555706, 196 | "ClickHouse128": { 197 | "Low": 8111314733931880642, 198 | "High": 6673974175531983573 199 | }, 200 | "ClickHouse128Seed": { 201 | "Low": 9917700338070043528, 202 | "High": 14460308921024715958 203 | } 204 | }, 205 | { 206 | "Input": "abcdefg", 207 | "City32": 568243927, 208 | "City64": 4341691227789030229, 209 | "City128": { 210 | "Low": 11411464479028692339, 211 | "High": 14967103466825869657 212 | }, 213 | "City128Seed": { 214 | "Low": 12508134884942962827, 215 | "High": 6863945294244523105 216 | }, 217 | "ClickHouse64": 9365486912795408122, 218 | "ClickHouse128": { 219 | "Low": 6752956416143810332, 220 | "High": 14163614211583527179 221 | }, 222 | "ClickHouse128Seed": { 223 | "Low": 10660279888702515142, 224 | "High": 8412579963838460174 225 | } 226 | }, 227 | { 228 | "Input": "abcdefgh", 229 | "City32": 4252944569, 230 | "City64": 18368443631171807497, 231 | "City128": { 232 | "Low": 6985830856738084079, 233 | "High": 6264954680145817547 234 | }, 235 | "City128Seed": { 236 | "Low": 599243959736057765, 237 | "High": 7617370314539711527 238 | }, 239 | "ClickHouse64": 4864636163090995991, 240 | "ClickHouse128": { 241 | "Low": 5450273043562147764, 242 | "High": 18090582611594380852 243 | }, 244 | "ClickHouse128Seed": { 245 | "Low": 9854692397719424074, 246 | "High": 4241976427614969063 247 | } 248 | }, 249 | { 250 | "Input": "abcdefghi", 251 | "City32": 1872288902, 252 | "City64": 3687479239766293058, 253 | "City128": { 254 | "Low": 8890062993969196433, 255 | "High": 7037508719533800860 256 | }, 257 | "City128Seed": { 258 | "Low": 13838229045843743197, 259 | "High": 6355279803720300117 260 | }, 261 | "ClickHouse64": 7406163328168016081, 262 | "ClickHouse128": { 263 | "Low": 13097897060372010631, 264 | "High": 18038557244115978387 265 | }, 266 | "ClickHouse128Seed": { 267 | "Low": 14921651653417540907, 268 | "High": 4325066116193311443 269 | } 270 | }, 271 | { 272 | "Input": "0123456789", 273 | "City32": 2537671194, 274 | "City64": 12467408821976941803, 275 | "City128": { 276 | "Low": 14944365093319411317, 277 | "High": 8028990795869858245 278 | }, 279 | "City128Seed": { 280 | "Low": 4135233689678050158, 281 | "High": 14292642417673547990 282 | }, 283 | "ClickHouse64": 12631666426400459317, 284 | "ClickHouse128": { 285 | "Low": 14515581804035899301, 286 | "High": 2781397614462516649 287 | }, 288 | "ClickHouse128Seed": { 289 | "Low": 14274644166387490967, 290 | "High": 17936016335134578406 291 | } 292 | }, 293 | { 294 | "Input": "0123456789 ", 295 | "City32": 3390544809, 296 | "City64": 4536462058872409207, 297 | "City128": { 298 | "Low": 14422655756510523550, 299 | "High": 10807170490693841681 300 | }, 301 | "City128Seed": { 302 | "Low": 13460238696312406241, 303 | "High": 14581636626186431312 304 | }, 305 | "ClickHouse64": 4510811903646916973, 306 | "ClickHouse128": { 307 | "Low": 5044271118502291767, 308 | "High": 2524955506903539452 309 | }, 310 | "ClickHouse128Seed": { 311 | "Low": 2430388293984791025, 312 | "High": 15140868548079466020 313 | } 314 | }, 315 | { 316 | "Input": "0123456789-0", 317 | "City32": 4174149928, 318 | "City64": 5289550228011338897, 319 | "City128": { 320 | "Low": 3693401906109609355, 321 | "High": 16132609523982559933 322 | }, 323 | "City128Seed": { 324 | "Low": 9532254578070461842, 325 | "High": 4941811860950821770 326 | }, 327 | "ClickHouse64": 11745345441536878567, 328 | "ClickHouse128": { 329 | "Low": 9131605731435243666, 330 | "High": 8787875700370564002 331 | }, 332 | "ClickHouse128Seed": { 333 | "Low": 12100873890967083096, 334 | "High": 10635169672829915710 335 | } 336 | }, 337 | { 338 | "Input": "0123456789~01", 339 | "City32": 449308148, 340 | "City64": 15572264021237804044, 341 | "City128": { 342 | "Low": 6003158511865826907, 343 | "High": 3737564584554176412 344 | }, 345 | "City128Seed": { 346 | "Low": 9643021165563036625, 347 | "High": 9512026419363204349 348 | }, 349 | "ClickHouse64": 870179535238924845, 350 | "ClickHouse128": { 351 | "Low": 9589757001657349743, 352 | "High": 13331779877298589970 353 | }, 354 | "ClickHouse128Seed": { 355 | "Low": 9128218908004110350, 356 | "High": 2619188771085606852 357 | } 358 | }, 359 | { 360 | "Input": "0123456789#012", 361 | "City32": 3454629345, 362 | "City64": 6747982827503355638, 363 | "City128": { 364 | "Low": 5763709159022012033, 365 | "High": 5196006665423943320 366 | }, 367 | "City128Seed": { 368 | "Low": 10039373043883223877, 369 | "High": 5163840641189738397 370 | }, 371 | "ClickHouse64": 10733516691078016323, 372 | "ClickHouse128": { 373 | "Low": 2061992899476626284, 374 | "High": 9554017049967394074 375 | }, 376 | "ClickHouse128Seed": { 377 | "Low": 12876435802543189428, 378 | "High": 18302256517868786149 379 | } 380 | }, 381 | { 382 | "Input": "0123456789@0123", 383 | "City32": 3910001282, 384 | "City64": 6008341632059963068, 385 | "City128": { 386 | "Low": 10279453844029536256, 387 | "High": 2877882647449872029 388 | }, 389 | "City128Seed": { 390 | "Low": 3927165613843697680, 391 | "High": 17405345318156560082 392 | }, 393 | "ClickHouse64": 5014980926110993296, 394 | "ClickHouse128": { 395 | "Low": 4226269686736976323, 396 | "High": 5069520701909446915 397 | }, 398 | "ClickHouse128Seed": { 399 | "Low": 9487039182666900838, 400 | "High": 9261137871475871095 401 | } 402 | }, 403 | { 404 | "Input": "0123456789'01234", 405 | "City32": 2257095711, 406 | "City64": 4792908552545140580, 407 | "City128": { 408 | "Low": 13501142762230597207, 409 | "High": 7062831230494719979 410 | }, 411 | "City128Seed": { 412 | "Low": 12378113031751840032, 413 | "High": 17183492847139963738 414 | }, 415 | "ClickHouse64": 342587571233817010, 416 | "ClickHouse128": { 417 | "Low": 5376997234998077898, 418 | "High": 10566044557984082456 419 | }, 420 | "ClickHouse128Seed": { 421 | "Low": 3479676595728104980, 422 | "High": 6809670944765885942 423 | } 424 | }, 425 | { 426 | "Input": "0123456789=012345", 427 | "City32": 2706011940, 428 | "City64": 5091109848033402427, 429 | "City128": { 430 | "Low": 1765766646833811366, 431 | "High": 12051273517542422384 432 | }, 433 | "City128Seed": { 434 | "Low": 12785887590699192351, 435 | "High": 4081098352252701601 436 | }, 437 | "ClickHouse64": 9851079735554060767, 438 | "ClickHouse128": { 439 | "Low": 624285883343621191, 440 | "High": 8956332536468243975 441 | }, 442 | "ClickHouse128Seed": { 443 | "Low": 12785887590699192351, 444 | "High": 4081098352252701601 445 | } 446 | }, 447 | { 448 | "Input": "0123456789+0123456", 449 | "City32": 3921085037, 450 | "City64": 11865776521063717196, 451 | "City128": { 452 | "Low": 13289712651245365241, 453 | "High": 15168162835762199023 454 | }, 455 | "City128Seed": { 456 | "Low": 12349267569130584790, 457 | "High": 2814253378211005042 458 | }, 459 | "ClickHouse64": 5773761936480509791, 460 | "ClickHouse128": { 461 | "Low": 16695864222237453375, 462 | "High": 13870199499492916551 463 | }, 464 | "ClickHouse128Seed": { 465 | "Low": 12349267569130584790, 466 | "High": 2814253378211005042 467 | } 468 | }, 469 | { 470 | "Input": "0123456789*01234567", 471 | "City32": 1436288216, 472 | "City64": 14923940956839318037, 473 | "City128": { 474 | "Low": 14427993897349513082, 475 | "High": 8822259841034806555 476 | }, 477 | "City128Seed": { 478 | "Low": 13566851651084859020, 479 | "High": 14268550325409499922 480 | }, 481 | "ClickHouse64": 2062097475356277865, 482 | "ClickHouse128": { 483 | "Low": 12149229310290560347, 484 | "High": 8324728103061300 485 | }, 486 | "ClickHouse128Seed": { 487 | "Low": 13566851651084859020, 488 | "High": 14268550325409499922 489 | } 490 | }, 491 | { 492 | "Input": "0123456789\u0026012345678", 493 | "City32": 2744390090, 494 | "City64": 553367757547595004, 495 | "City128": { 496 | "Low": 9157163523314904644, 497 | "High": 7450964159509581364 498 | }, 499 | "City128Seed": { 500 | "Low": 18273776522954695091, 501 | "High": 9290471827519053323 502 | }, 503 | "ClickHouse64": 3631961974025564808, 504 | "ClickHouse128": { 505 | "Low": 15864714011363128807, 506 | "High": 14791165821937113924 507 | }, 508 | "ClickHouse128Seed": { 509 | "Low": 18273776522954695091, 510 | "High": 9290471827519053323 511 | } 512 | }, 513 | { 514 | "Input": "0123456789^0123456789", 515 | "City32": 2729133335, 516 | "City64": 16049908292956105681, 517 | "City128": { 518 | "Low": 3610933135361606132, 519 | "High": 14171968471499035780 520 | }, 521 | "City128Seed": { 522 | "Low": 2797525655316092226, 523 | "High": 5968123281241573382 524 | }, 525 | "ClickHouse64": 9695149554465931411, 526 | "ClickHouse128": { 527 | "Low": 15763356469259115904, 528 | "High": 17034853217782965881 529 | }, 530 | "ClickHouse128Seed": { 531 | "Low": 2797525655316092226, 532 | "High": 5968123281241573382 533 | } 534 | }, 535 | { 536 | "Input": "0123456789%0123456789£", 537 | "City32": 2909187230, 538 | "City64": 5601653899545901032, 539 | "City128": { 540 | "Low": 7962544162379928918, 541 | "High": 746916849896426328 542 | }, 543 | "City128Seed": { 544 | "Low": 16600321598579969136, 545 | "High": 17173066250112817686 546 | }, 547 | "ClickHouse64": 16395530686949663467, 548 | "ClickHouse128": { 549 | "Low": 17588020885154525590, 550 | "High": 17748006011810928901 551 | }, 552 | "ClickHouse128Seed": { 553 | "Low": 16600321598579969136, 554 | "High": 17173066250112817686 555 | } 556 | }, 557 | { 558 | "Input": "0123456789$0123456789!0", 559 | "City32": 3861773724, 560 | "City64": 15532175715466358378, 561 | "City128": { 562 | "Low": 16795709482798739833, 563 | "High": 4519591268767170108 564 | }, 565 | "City128Seed": { 566 | "Low": 14026279332704891529, 567 | "High": 9180856307156703776 568 | }, 569 | "ClickHouse64": 5583302547385282329, 570 | "ClickHouse128": { 571 | "Low": 5558050013456622826, 572 | "High": 9815888199424230554 573 | }, 574 | "ClickHouse128Seed": { 575 | "Low": 14026279332704891529, 576 | "High": 9180856307156703776 577 | } 578 | }, 579 | { 580 | "Input": "size: a.out: bad magic", 581 | "City32": 3507392003, 582 | "City64": 9283954595969990072, 583 | "City128": { 584 | "Low": 1345271854579481199, 585 | "High": 2770399054099358643 586 | }, 587 | "City128Seed": { 588 | "Low": 12408208737420565519, 589 | "High": 3405226454683422015 590 | }, 591 | "ClickHouse64": 50265519040903215, 592 | "ClickHouse128": { 593 | "Low": 18153091936184608554, 594 | "High": 14295249992360344248 595 | }, 596 | "ClickHouse128Seed": { 597 | "Low": 12408208737420565519, 598 | "High": 3405226454683422015 599 | } 600 | }, 601 | { 602 | "Input": "Nepal premier won't resign.", 603 | "City32": 4256981495, 604 | "City64": 10282703717779097465, 605 | "City128": { 606 | "Low": 11981530587919579776, 607 | "High": 14249603174773263794 608 | }, 609 | "City128Seed": { 610 | "Low": 4051447877476147132, 611 | "High": 10578696136104733238 612 | }, 613 | "ClickHouse64": 2758531837809990903, 614 | "ClickHouse128": { 615 | "Low": 7453362807235106578, 616 | "High": 10968532034493255540 617 | }, 618 | "ClickHouse128Seed": { 619 | "Low": 4051447877476147132, 620 | "High": 10578696136104733238 621 | } 622 | }, 623 | { 624 | "Input": "C is as portable as Stonehedge!!", 625 | "City32": 3518948724, 626 | "City64": 13350068567456998420, 627 | "City128": { 628 | "Low": 2180301073154366071, 629 | "High": 618951093331176254 630 | }, 631 | "City128Seed": { 632 | "Low": 116362807437870375, 633 | "High": 698206839111187466 634 | }, 635 | "ClickHouse64": 8484165492542029813, 636 | "ClickHouse128": { 637 | "Low": 4713802179786725992, 638 | "High": 16559183759426220143 639 | }, 640 | "ClickHouse128Seed": { 641 | "Low": 116362807437870375, 642 | "High": 698206839111187466 643 | } 644 | }, 645 | { 646 | "Input": "Discard medicine more than two years old.", 647 | "City32": 1057971048, 648 | "City64": 14637730629324758636, 649 | "City128": { 650 | "Low": 14323956728075046893, 651 | "High": 10303342857365697077 652 | }, 653 | "City128Seed": { 654 | "Low": 5926057719386518751, 655 | "High": 5883941503897891971 656 | }, 657 | "ClickHouse64": 7167111705706377561, 658 | "ClickHouse128": { 659 | "Low": 17100540181678511821, 660 | "High": 14516600393780501222 661 | }, 662 | "ClickHouse128Seed": { 663 | "Low": 5926057719386518751, 664 | "High": 5883941503897891971 665 | } 666 | }, 667 | { 668 | "Input": "I wouldn't marry him with a ten foot pole.", 669 | "City32": 2530799898, 670 | "City64": 18142860887665219312, 671 | "City128": { 672 | "Low": 16900625814905586193, 673 | "High": 16302962471182084499 674 | }, 675 | "City128Seed": { 676 | "Low": 13455389572057652442, 677 | "High": 12676394210126329085 678 | }, 679 | "ClickHouse64": 9555326654470078682, 680 | "ClickHouse128": { 681 | "Low": 10472938205269449350, 682 | "High": 1680970999901096477 683 | }, 684 | "ClickHouse128Seed": { 685 | "Low": 13455389572057652442, 686 | "High": 12676394210126329085 687 | } 688 | }, 689 | { 690 | "Input": "If the enemy is within range, then so are you.", 691 | "City32": 3501065226, 692 | "City64": 17911410438186840238, 693 | "City128": { 694 | "Low": 6167029722808524288, 695 | "High": 14798455976575164321 696 | }, 697 | "City128Seed": { 698 | "Low": 10369972700887415199, 699 | "High": 9236974185214846521 700 | }, 701 | "ClickHouse64": 18100256812616293767, 702 | "ClickHouse128": { 703 | "Low": 133426820351620853, 704 | "High": 13499957205779794967 705 | }, 706 | "ClickHouse128Seed": { 707 | "Low": 10369972700887415199, 708 | "High": 9236974185214846521 709 | } 710 | }, 711 | { 712 | "Input": "The major problem is with sendmail. -Mark Horton", 713 | "City32": 157569722, 714 | "City64": 18098739481239317989, 715 | "City128": { 716 | "Low": 4743226681022166756, 717 | "High": 14214665363906268667 718 | }, 719 | "City128Seed": { 720 | "Low": 15285832006964529364, 721 | "High": 8946779561215487164 722 | }, 723 | "ClickHouse64": 6113083948763379553, 724 | "ClickHouse128": { 725 | "Low": 10016869154748627446, 726 | "High": 15375495703408606501 727 | }, 728 | "ClickHouse128Seed": { 729 | "Low": 15285832006964529364, 730 | "High": 8946779561215487164 731 | } 732 | }, 733 | { 734 | "Input": "How can you write a big system without C++? -Paul Glick", 735 | "City32": 2405378429, 736 | "City64": 749291162957442504, 737 | "City128": { 738 | "Low": 10958369456055860403, 739 | "High": 14239663389869316885 740 | }, 741 | "City128Seed": { 742 | "Low": 16293038340474093629, 743 | "High": 5046329602178592353 744 | }, 745 | "ClickHouse64": 6237945311650045625, 746 | "ClickHouse128": { 747 | "Low": 17554648324305308321, 748 | "High": 15970109859030977686 749 | }, 750 | "ClickHouse128Seed": { 751 | "Low": 16293038340474093629, 752 | "High": 5046329602178592353 753 | } 754 | }, 755 | { 756 | "Input": "He who has a shady past knows that nice guys finish last.", 757 | "City32": 1308756331, 758 | "City64": 12773272487727932308, 759 | "City128": { 760 | "Low": 2827967514863011179, 761 | "High": 12137961880067556918 762 | }, 763 | "City128Seed": { 764 | "Low": 1618584177890338681, 765 | "High": 7692179231749118013 766 | }, 767 | "ClickHouse64": 5881143248985027108, 768 | "ClickHouse128": { 769 | "Low": 16986997577771433243, 770 | "High": 11575454934117215543 771 | }, 772 | "ClickHouse128Seed": { 773 | "Low": 1618584177890338681, 774 | "High": 7692179231749118013 775 | } 776 | }, 777 | { 778 | "Input": "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave", 779 | "City32": 1598063825, 780 | "City64": 17447573211648233347, 781 | "City128": { 782 | "Low": 5193728322932930136, 783 | "High": 8315808240122436918 784 | }, 785 | "City128Seed": { 786 | "Low": 493553442229101054, 787 | "High": 17022247975424937906 788 | }, 789 | "ClickHouse64": 17241272464062950471, 790 | "ClickHouse128": { 791 | "Low": 17381921775399257709, 792 | "High": 9492523054659953786 793 | }, 794 | "ClickHouse128Seed": { 795 | "Low": 493553442229101054, 796 | "High": 17022247975424937906 797 | } 798 | }, 799 | { 800 | "Input": "His money is twice tainted: 'taint yours and 'taint mine.", 801 | "City32": 317615806, 802 | "City64": 13860510713913349705, 803 | "City128": { 804 | "Low": 16185146595480326780, 805 | "High": 17015401319849236038 806 | }, 807 | "City128Seed": { 808 | "Low": 17619985641870144822, 809 | "High": 17562113001629793159 810 | }, 811 | "ClickHouse64": 3171291129933422128, 812 | "ClickHouse128": { 813 | "Low": 5132622071024137889, 814 | "High": 17963481264634437175 815 | }, 816 | "ClickHouse128Seed": { 817 | "Low": 17619985641870144822, 818 | "High": 17562113001629793159 819 | } 820 | }, 821 | { 822 | "Input": "The days of the digital watch are numbered. -Tom Stoppard", 823 | "City32": 3844681619, 824 | "City64": 17500208954721178989, 825 | "City128": { 826 | "Low": 14757460113087850494, 827 | "High": 10331888883348011295 828 | }, 829 | "City128Seed": { 830 | "Low": 2301414823397359937, 831 | "High": 17049037887102958097 832 | }, 833 | "ClickHouse64": 10176971017375701784, 834 | "ClickHouse128": { 835 | "Low": 5276445359578238019, 836 | "High": 3125500923501439530 837 | }, 838 | "ClickHouse128Seed": { 839 | "Low": 2301414823397359937, 840 | "High": 17049037887102958097 841 | } 842 | }, 843 | { 844 | "Input": "For every action there is an equal and opposite government program.", 845 | "City32": 3300028065, 846 | "City64": 17925857084733277335, 847 | "City128": { 848 | "Low": 4477605944974842917, 849 | "High": 6686874442343478863 850 | }, 851 | "City128Seed": { 852 | "Low": 12819270835010133372, 853 | "High": 13619377119526745439 854 | }, 855 | "ClickHouse64": 15417296343442759947, 856 | "ClickHouse128": { 857 | "Low": 8159663689782685251, 858 | "High": 5300800888114925128 859 | }, 860 | "ClickHouse128Seed": { 861 | "Low": 12819270835010133372, 862 | "High": 13619377119526745439 863 | } 864 | }, 865 | { 866 | "Input": "You remind me of a TV show, but that's all right: I watch it anyway.", 867 | "City32": 2741039484, 868 | "City64": 3238539480550029839, 869 | "City128": { 870 | "Low": 15564174535996278620, 871 | "High": 13215320424975362198 872 | }, 873 | "City128Seed": { 874 | "Low": 2022138833546455130, 875 | "High": 2531757673095573549 876 | }, 877 | "ClickHouse64": 4266387439628799592, 878 | "ClickHouse128": { 879 | "Low": 18335492873395227390, 880 | "High": 2667437297135991813 881 | }, 882 | "ClickHouse128Seed": { 883 | "Low": 2022138833546455130, 884 | "High": 2531757673095573549 885 | } 886 | }, 887 | { 888 | "Input": "It's well we cannot hear the screams/That we create in others' dreams.", 889 | "City32": 692054856, 890 | "City64": 15172153012307172858, 891 | "City128": { 892 | "Low": 1189672716042796327, 893 | "High": 3403354538628189761 894 | }, 895 | "City128Seed": { 896 | "Low": 9169921690981628519, 897 | "High": 6480392904083726364 898 | }, 899 | "ClickHouse64": 15559714866293990128, 900 | "ClickHouse128": { 901 | "Low": 5855705637943324017, 902 | "High": 12364061065010858999 903 | }, 904 | "ClickHouse128Seed": { 905 | "Low": 9169921690981628519, 906 | "High": 6480392904083726364 907 | } 908 | }, 909 | { 910 | "Input": "Give me a rock, paper and scissors and I will move the world. CCFestoon", 911 | "City32": 1752517648, 912 | "City64": 17399428652093956601, 913 | "City128": { 914 | "Low": 2079284227713321727, 915 | "High": 2944023020554257207 916 | }, 917 | "City128Seed": { 918 | "Low": 5203258229714618739, 919 | "High": 8564560395228980633 920 | }, 921 | "ClickHouse64": 918380186659093353, 922 | "ClickHouse128": { 923 | "Low": 14732236451004011055, 924 | "High": 4324668585637671116 925 | }, 926 | "ClickHouse128Seed": { 927 | "Low": 5203258229714618739, 928 | "High": 8564560395228980633 929 | } 930 | }, 931 | { 932 | "Input": "It's a tiny change to the code and not completely disgusting. - Bob Manchek", 933 | "City32": 2278862467, 934 | "City64": 6928626454709594388, 935 | "City128": { 936 | "Low": 12376110963306160882, 937 | "High": 1149447028796037550 938 | }, 939 | "City128Seed": { 940 | "Low": 11452973915677342183, 941 | "High": 3550708038227708783 942 | }, 943 | "ClickHouse64": 9411844461811906051, 944 | "ClickHouse128": { 945 | "Low": 6084801553430540176, 946 | "High": 11297466570154729305 947 | }, 948 | "ClickHouse128Seed": { 949 | "Low": 11452973915677342183, 950 | "High": 3550708038227708783 951 | } 952 | }, 953 | { 954 | "Input": "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977", 955 | "City32": 1245548766, 956 | "City64": 14156572111887213399, 957 | "City128": { 958 | "Low": 3547689611939963773, 959 | "High": 352412539875473798 960 | }, 961 | "City128Seed": { 962 | "Low": 15532645007301689041, 963 | "High": 5699972195609356665 964 | }, 965 | "ClickHouse64": 3783629113178694861, 966 | "ClickHouse128": { 967 | "Low": 8781435428258980073, 968 | "High": 16244111399632244224 969 | }, 970 | "ClickHouse128Seed": { 971 | "Low": 15532645007301689041, 972 | "High": 5699972195609356665 973 | } 974 | }, 975 | { 976 | "Input": "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley", 977 | "City32": 690100832, 978 | "City64": 1686264634911748486, 979 | "City128": { 980 | "Low": 9890796143636688770, 981 | "High": 14819942077093428433 982 | }, 983 | "City128Seed": { 984 | "Low": 5044051242799634426, 985 | "High": 15748472499127526836 986 | }, 987 | "ClickHouse64": 6551603257315194044, 988 | "ClickHouse128": { 989 | "Low": 11501772505812601437, 990 | "High": 4717818413439733863 991 | }, 992 | "ClickHouse128Seed": { 993 | "Low": 5044051242799634426, 994 | "High": 15748472499127526836 995 | } 996 | }, 997 | { 998 | "Input": "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule", 999 | "City32": 2205048114, 1000 | "City64": 8130438665348453365, 1001 | "City128": { 1002 | "Low": 8204438510737850165, 1003 | "High": 18389267343627278416 1004 | }, 1005 | "City128Seed": { 1006 | "Low": 16595094829861910529, 1007 | "High": 6838303732999132125 1008 | }, 1009 | "ClickHouse64": 2974938966899249022, 1010 | "ClickHouse128": { 1011 | "Low": 7700392045108955753, 1012 | "High": 2925538868447122654 1013 | }, 1014 | "ClickHouse128Seed": { 1015 | "Low": 1863972280396719366, 1016 | "High": 9157617392947605544 1017 | } 1018 | }, 1019 | { 1020 | "Input": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", 1021 | "City32": 3403419501, 1022 | "City64": 5309349425077012460, 1023 | "City128": { 1024 | "Low": 2311150269084127084, 1025 | "High": 16671388968946027466 1026 | }, 1027 | "City128Seed": { 1028 | "Low": 14023773754950110810, 1029 | "High": 15953067525758124872 1030 | }, 1031 | "ClickHouse64": 5005829707294311127, 1032 | "ClickHouse128": { 1033 | "Low": 1094330655266133783, 1034 | "High": 14354420013925076183 1035 | }, 1036 | "ClickHouse128Seed": { 1037 | "Low": 15583653857129052776, 1038 | "High": 8170114626718433132 1039 | } 1040 | }, 1041 | { 1042 | "Input": "Anj lRpP.goh*j*AcuNShBnbkNZ+HuuKrgkQZXIFmCEUhFB%FTyqkYpz_fjm@tSix!xhErMvBh.+$vdzzP *xPFlCQtvO(se=@n(ox$Fwphj ^$%tVbKv?UaZzvoCtdQm+*jn*SvKj_RqAol!Y?kRhhVkEZ#M^a)yH%%-(hQaGZxOLQj=kHk@P-Np.IAJis-FlsYuEyP", 1043 | "City32": 3455980892, 1044 | "City64": 12329288824191864498, 1045 | "City128": { 1046 | "Low": 14924260978314091794, 1047 | "High": 199209500917736932 1048 | }, 1049 | "City128Seed": { 1050 | "Low": 17471239889489304064, 1051 | "High": 11413437389712639115 1052 | }, 1053 | "ClickHouse64": 1806991548799798990, 1054 | "ClickHouse128": { 1055 | "Low": 9991928335763527278, 1056 | "High": 9943747019497616234 1057 | }, 1058 | "ClickHouse128Seed": { 1059 | "Low": 1336384004467077937, 1060 | "High": 17591406366307480973 1061 | } 1062 | }, 1063 | { 1064 | "Input": "ilrg)QRZPQ", 1065 | "City32": 4124728996, 1066 | "City64": 2302212067639460797, 1067 | "City128": { 1068 | "Low": 9973750434165696234, 1069 | "High": 9219481510906933430 1070 | }, 1071 | "City128Seed": { 1072 | "Low": 6806077154596870677, 1073 | "High": 15867465420740414714 1074 | }, 1075 | "ClickHouse64": 1481793775145840474, 1076 | "ClickHouse128": { 1077 | "Low": 14868341796132072894, 1078 | "High": 15589457705282644011 1079 | }, 1080 | "ClickHouse128Seed": { 1081 | "Low": 2592810698026030684, 1082 | "High": 16930898606069945064 1083 | } 1084 | }, 1085 | { 1086 | "Input": ",RVU(KFMtumnFIJ", 1087 | "City32": 2783712726, 1088 | "City64": 350522703217383896, 1089 | "City128": { 1090 | "Low": 10351961775840891986, 1091 | "High": 16740239293439759896 1092 | }, 1093 | "City128Seed": { 1094 | "Low": 4600512636867581565, 1095 | "High": 17493533692235572545 1096 | }, 1097 | "ClickHouse64": 18429690245096591555, 1098 | "ClickHouse128": { 1099 | "Low": 12669515727173899101, 1100 | "High": 9368109536426551273 1101 | }, 1102 | "ClickHouse128Seed": { 1103 | "Low": 5464936815862341237, 1104 | "High": 6406788864034962376 1105 | } 1106 | }, 1107 | { 1108 | "Input": "P+KV#CoHadTEcTJl#IvXwMwiD%JqQoLA(_s_OAU$qkv(-msg_@.ZhVz$FLxUZAyWkuZQf?Nh?+IbY+Uo(@%a(EW_nh(zlzqaensNhTUwR#vqQCNRrQcX*ssj*agyd +r_BAdVdpMTkEvZWVqWSF!Brm*j_sWU.OwnlSRRZ@nN,TsKZlK)Dk.QVSJH", 1109 | "City32": 698640112, 1110 | "City64": 14755248863261294565, 1111 | "City128": { 1112 | "Low": 14350455725169727621, 1113 | "High": 17402460960897450466 1114 | }, 1115 | "City128Seed": { 1116 | "Low": 2527196243419791556, 1117 | "High": 3479058664757123837 1118 | }, 1119 | "ClickHouse64": 8912191930370128835, 1120 | "ClickHouse128": { 1121 | "Low": 6092040975282313701, 1122 | "High": 3258229015626463200 1123 | }, 1124 | "ClickHouse128Seed": { 1125 | "Low": 3687302935795212105, 1126 | "High": 10988937907583256601 1127 | } 1128 | }, 1129 | { 1130 | "Input": "PQTr^#b-e!R#ysE$(+D=MTB,mE%fJXM$rBbSkWIMzs W_YiEmCk,tD,vwNthgOy#bxcBTkRo$QrI)RKeLFYySmY=E)?m?Mbv%AO^kQ*DsP)u^LP+(U_QI)qy^^a!ejc-EXuOrwpbrvGxGVBrDE_qahnlQvhkBcAh@vb-WIKhGscATS .NPhP =x!yI", 1131 | "City32": 934044943, 1132 | "City64": 1761171816838911985, 1133 | "City128": { 1134 | "Low": 13313819601465295041, 1135 | "High": 15469535967676905700 1136 | }, 1137 | "City128Seed": { 1138 | "Low": 17523302842842747715, 1139 | "High": 14065098026458552937 1140 | }, 1141 | "ClickHouse64": 11548566765750632392, 1142 | "ClickHouse128": { 1143 | "Low": 5860772921707063635, 1144 | "High": 885576976069993412 1145 | }, 1146 | "ClickHouse128Seed": { 1147 | "Low": 8715321472388972391, 1148 | "High": 830927941107161549 1149 | } 1150 | }, 1151 | { 1152 | "Input": "TjXg*RsDwmYrG#P#Szjtv.jSQ.cSgaKnb?X^,sWB_)b=@hS!DJt)KvX+b@YSahLtyIlG@TaRE^mzbZifmnGBhhL@DinCeUG,Hh+XX)$YoCx?@DfqJ@tMzShUcZ", 1153 | "City32": 502949642, 1154 | "City64": 6125387249390855292, 1155 | "City128": { 1156 | "Low": 1967969290047781624, 1157 | "High": 4581379416590133807 1158 | }, 1159 | "City128Seed": { 1160 | "Low": 16787990795536330771, 1161 | "High": 11041930018039790359 1162 | }, 1163 | "ClickHouse64": 8545334793957001611, 1164 | "ClickHouse128": { 1165 | "Low": 8837605784817871926, 1166 | "High": 13747196132616268921 1167 | }, 1168 | "ClickHouse128Seed": { 1169 | "Low": 16787990795536330771, 1170 | "High": 11041930018039790359 1171 | } 1172 | }, 1173 | { 1174 | "Input": "sZNhSS_wbZRyxPUG*PoDWnYx.j.zfbitrw).RaubdiKH+Mnkd^Mb+YgNgREyKf?=#@NH", 1175 | "City32": 1567801837, 1176 | "City64": 14391835876820600478, 1177 | "City128": { 1178 | "Low": 17604553291554186082, 1179 | "High": 2134002456328291193 1180 | }, 1181 | "City128Seed": { 1182 | "Low": 5238695213702044393, 1183 | "High": 13620123017012141284 1184 | }, 1185 | "ClickHouse64": 4515928171636108397, 1186 | "ClickHouse128": { 1187 | "Low": 9751617232078799873, 1188 | "High": 6308534615140274791 1189 | }, 1190 | "ClickHouse128Seed": { 1191 | "Low": 5238695213702044393, 1192 | "High": 13620123017012141284 1193 | } 1194 | }, 1195 | { 1196 | "Input": ".U+U(D_% y#wO=O,mPkbpj w_dp,HsX%-)ZMNEFK?BPQX*DX)p.UQMBMLgI?^%z$=fUH*pnAT?o*mVJFfdz(.wjFsDTgqp_* GCVR.Xhavj-BtTK X?S+NNpTh!A@A?Td_tAyGHTlc*J_lo!KUiLybsanTU@?vm,yvSeIGk(Xrbl@V=Knc!UZ", 1197 | "City32": 1283448383, 1198 | "City64": 9637455337848845955, 1199 | "City128": { 1200 | "Low": 17042986483076167414, 1201 | "High": 15305792403223768604 1202 | }, 1203 | "City128Seed": { 1204 | "Low": 1422869030462094907, 1205 | "High": 3368325400639706656 1206 | }, 1207 | "ClickHouse64": 4052263652260448419, 1208 | "ClickHouse128": { 1209 | "Low": 11964304483576550465, 1210 | "High": 14286032838748707858 1211 | }, 1212 | "ClickHouse128Seed": { 1213 | "Low": 8015255481831788381, 1214 | "High": 4875702607097673535 1215 | } 1216 | }, 1217 | { 1218 | "Input": "ph?EV?FkC-DA+ $Twgr=J!_z!Da%d*UbZUgjjHOO%Vyu@fk oR-CX@vUhy.^w^-dKDIoli#(,gFcT,xQFNUyfglex eXzz^ukFim_WqkqVdy=LRNlk.dVDzhKoviaAhcl$lZXidm^mtErugajq", 1219 | "City32": 516429072, 1220 | "City64": 7429231230607263930, 1221 | "City128": { 1222 | "Low": 6276507861415164767, 1223 | "High": 7853465464810892448 1224 | }, 1225 | "City128Seed": { 1226 | "Low": 6628466428325006308, 1227 | "High": 17579407271801774446 1228 | }, 1229 | "ClickHouse64": 25228093145735692, 1230 | "ClickHouse128": { 1231 | "Low": 1727768636662756674, 1232 | "High": 16298946358691807970 1233 | }, 1234 | "ClickHouse128Seed": { 1235 | "Low": 17832817817036612634, 1236 | "High": 11609541559657480528 1237 | } 1238 | }, 1239 | { 1240 | "Input": "Z=JsEurqIVm+Ki#Gi#kubWth@f(wWQYXPpsxisq_F*qVTGLhVIvLWB$IAUUDqPI-Yp(*dD,_Vrr,LOUaWAp*.NE-ry?mRcm I-YOOi%xeP=coW!*x_WZvG,g_GwKFaiaaBHVU-%DW^FfiOyF.Oh)Eqi+m)^JsSnhsIlpWqa(BV_mVLowV%@FzSOGIkcwwzZC^@,LGi", 1241 | "City32": 4172669370, 1242 | "City64": 4961671881386476261, 1243 | "City128": { 1244 | "Low": 14819843007708067963, 1245 | "High": 2712692876572478980 1246 | }, 1247 | "City128Seed": { 1248 | "Low": 227115690684222068, 1249 | "High": 15973676532921400187 1250 | }, 1251 | "ClickHouse64": 16443597820201492581, 1252 | "ClickHouse128": { 1253 | "Low": 4024495065587983269, 1254 | "High": 5735333729924990192 1255 | }, 1256 | "ClickHouse128Seed": { 1257 | "Low": 18292823935382723418, 1258 | "High": 3757719590843420989 1259 | } 1260 | } 1261 | ] 1262 | } 1263 | -------------------------------------------------------------------------------- /ch_128.go: -------------------------------------------------------------------------------- 1 | package city 2 | 3 | import "encoding/binary" 4 | 5 | // A subroutine for CH128(). Returns a decent 128-bit hash for strings 6 | // of any length representable in signed long. Based on City and Mumur. 7 | func chMurmur(s []byte, seed U128) U128 { 8 | length := len(s) 9 | a := seed.Low 10 | b := seed.High 11 | c := uint64(0) 12 | d := uint64(0) 13 | l := length - 16 14 | if len(s) <= 16 { // length <= 16 15 | a = shiftMix(a*k1) * k1 16 | c = b*k1 + ch0to16(s, length) 17 | 18 | if length >= 8 { 19 | d = shiftMix(a + binary.LittleEndian.Uint64(s)) 20 | } else { 21 | d = shiftMix(a + c) 22 | } 23 | } else { // length > 16 24 | c = ch16(binary.LittleEndian.Uint64(s[length-8:])+k1, a) 25 | d = ch16(b+uint64(length), c+binary.LittleEndian.Uint64(s[length-16:])) 26 | a += d 27 | 28 | { 29 | a ^= shiftMix(binary.LittleEndian.Uint64(s[0:8:8])*k1) * k1 30 | a *= k1 31 | b ^= a 32 | c ^= shiftMix(binary.LittleEndian.Uint64(s[8:8+8:8+8])*k1) * k1 33 | c *= k1 34 | d ^= c 35 | s = s[16:] 36 | l -= 16 37 | } 38 | 39 | if l > 0 { 40 | for len(s) >= 16 { 41 | a ^= shiftMix(binary.LittleEndian.Uint64(s[0:8:8])*k1) * k1 42 | a *= k1 43 | b ^= a 44 | c ^= shiftMix(binary.LittleEndian.Uint64(s[8:8+8:8+8])*k1) * k1 45 | c *= k1 46 | d ^= c 47 | s = s[16:] 48 | l -= 16 49 | 50 | if l <= 0 { 51 | break 52 | } 53 | } 54 | } 55 | } 56 | a = ch16(a, c) 57 | b = ch16(d, b) 58 | return U128{a ^ b, ch16(b, a)} 59 | } 60 | 61 | // CH128 returns 128-bit ClickHouse CityHash. 62 | func CH128(s []byte) U128 { 63 | if len(s) >= 16 { 64 | return CH128Seed(s[16:], U128{ 65 | Low: binary.LittleEndian.Uint64(s[0:8:8]) ^ k3, 66 | High: binary.LittleEndian.Uint64(s[8 : 8+8 : 8+8]), 67 | }) 68 | } 69 | if len(s) >= 8 { 70 | l := uint64(len(s)) 71 | return CH128Seed(nil, U128{ 72 | Low: binary.LittleEndian.Uint64(s) ^ (l * k0), 73 | High: binary.LittleEndian.Uint64(s[l-8:]) ^ k1, 74 | }) 75 | } 76 | return CH128Seed(s, U128{Low: k0, High: k1}) 77 | } 78 | 79 | // CH128Seed returns 128-bit seeded ClickHouse CityHash. 80 | func CH128Seed(s []byte, seed U128) U128 { 81 | if len(s) < 128 { 82 | return chMurmur(s, seed) 83 | } 84 | 85 | // Saving initial input for tail hashing. 86 | t := s 87 | 88 | // We expect len >= 128 to be the common case. Keep 56 bytes of state: 89 | // v, w, x, y and z. 90 | var v, w U128 91 | x := seed.Low 92 | y := seed.High 93 | z := uint64(len(s)) * k1 94 | 95 | { 96 | subSlice := (*[96]byte)(s[0:]) 97 | v.Low = rot64(y^k1, 49)*k1 + binary.LittleEndian.Uint64(subSlice[0:]) 98 | v.High = rot64(v.Low, 42)*k1 + binary.LittleEndian.Uint64(subSlice[8:]) 99 | w.Low = rot64(y+z, 35)*k1 + x 100 | w.High = rot64(x+binary.LittleEndian.Uint64(subSlice[88:]), 53) * k1 101 | } 102 | 103 | // This is the same inner loop as CH64(), manually unrolled. 104 | for len(s) >= 128 { 105 | // Roll 1. 106 | { 107 | x = rot64(x+y+v.Low+binary.LittleEndian.Uint64(s[16:16+8:16+8]), 37) * k1 108 | y = rot64(y+v.High+binary.LittleEndian.Uint64(s[48:48+8:48+8]), 42) * k1 109 | 110 | x ^= w.High 111 | y ^= v.Low 112 | 113 | z = rot64(z^w.Low, 33) 114 | v = weakHash32SeedsByte(s, v.High*k1, x+w.Low) 115 | w = weakHash32SeedsByte(s[32:], z+w.High, y) 116 | z, x = x, z 117 | } 118 | 119 | // Roll 2. 120 | { 121 | const offset = 64 122 | x = rot64(x+y+v.Low+binary.LittleEndian.Uint64(s[offset+16:offset+16+8:offset+16+8]), 37) * k1 123 | y = rot64(y+v.High+binary.LittleEndian.Uint64(s[offset+48:offset+48+8:offset+48+8]), 42) * k1 124 | x ^= w.High 125 | y ^= v.Low 126 | 127 | z = rot64(z^w.Low, 33) 128 | v = weakHash32SeedsByte(s[offset:], v.High*k1, x+w.Low) 129 | w = weakHash32SeedsByte(s[offset+32:], z+w.High, y) 130 | z, x = x, z 131 | } 132 | s = s[128:] 133 | } 134 | 135 | y += rot64(w.Low, 37)*k0 + z 136 | x += rot64(v.Low+z, 49) * k0 137 | 138 | // If 0 < length < 128, hash up to 4 chunks of 32 bytes each from the end of s. 139 | for i := 0; i < len(s); { 140 | i += 32 141 | y = rot64(y-x, 42)*k0 + v.High 142 | w.Low += binary.LittleEndian.Uint64(t[len(t)-i+16:]) 143 | x = rot64(x, 49)*k0 + w.Low 144 | w.Low += v.Low 145 | v = weakHash32SeedsByte(t[len(t)-i:], v.Low, v.High) 146 | } 147 | 148 | // At this point our 48 bytes of state should contain more than 149 | // enough information for a strong 128-bit hash. We use two 150 | // different 48-byte-to-8-byte hashes to get a 16-byte final result. 151 | x = ch16(x, v.Low) 152 | y = ch16(y, w.Low) 153 | 154 | return U128{ 155 | Low: ch16(x+v.High, w.High) + y, 156 | High: ch16(x+w.High, y+v.High), 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /ch_128_test.go: -------------------------------------------------------------------------------- 1 | package city 2 | 3 | import ( 4 | "bufio" 5 | "bytes" 6 | _ "embed" 7 | "fmt" 8 | "strconv" 9 | "strings" 10 | "testing" 11 | ) 12 | 13 | //go:embed _testdata/ch128.csv 14 | var ch128data []byte 15 | 16 | func TestCH128(t *testing.T) { 17 | r := bufio.NewScanner(bytes.NewReader(ch128data)) 18 | for r.Scan() { 19 | elems := strings.Split(r.Text(), ",") 20 | 21 | s := []byte(elems[0]) 22 | 23 | lo, _ := strconv.ParseUint(elems[1], 16, 64) 24 | hi, _ := strconv.ParseUint(elems[2], 16, 64) 25 | 26 | v := CH128(s) 27 | if lo != v.Low || hi != v.High { 28 | t.Errorf("mismatch %d", len(s)) 29 | } 30 | } 31 | } 32 | 33 | func benchmarkClickHouse128(n int) func(b *testing.B) { 34 | return func(b *testing.B) { 35 | b.ReportAllocs() 36 | b.SetBytes(int64(n)) 37 | b.ResetTimer() 38 | 39 | for i := 0; i < b.N; i++ { 40 | CH128(data[:n]) 41 | } 42 | } 43 | } 44 | 45 | func BenchmarkClickHouse128(b *testing.B) { 46 | setup() 47 | 48 | for _, size := range []int{ 49 | 16, 64, 256, 1024, 50 | } { 51 | b.Run(fmt.Sprintf("%d", size), benchmarkClickHouse128(size)) 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /ch_64.go: -------------------------------------------------------------------------------- 1 | package city 2 | 3 | import "encoding/binary" 4 | 5 | // Ref: 6 | // https://github.com/xzkostyan/python-cityhash/commit/f4091154ff2c6c0de11d5d6673b5007fdd6355ad 7 | 8 | const k3 uint64 = 0xc949d7c7509e6557 9 | 10 | func ch16(u, v uint64) uint64 { 11 | return hash128to64(U128{u, v}) 12 | } 13 | 14 | // Return an 8-byte hash for 33 to 64 bytes. 15 | func ch33to64(s []byte, length int) uint64 { 16 | z := binary.LittleEndian.Uint64(s[24:]) 17 | a := binary.LittleEndian.Uint64(s) + (uint64(length)+binary.LittleEndian.Uint64(s[length-16:]))*k0 18 | b := rot64(a+z, 52) 19 | c := rot64(a, 37) 20 | 21 | a += binary.LittleEndian.Uint64(s[8:]) 22 | c += rot64(a, 7) 23 | a += binary.LittleEndian.Uint64(s[16:]) 24 | 25 | vf := a + z 26 | vs := b + rot64(a, 31) + c 27 | 28 | a = binary.LittleEndian.Uint64(s[16:]) + binary.LittleEndian.Uint64(s[length-32:]) 29 | z = binary.LittleEndian.Uint64(s[length-8:]) 30 | b = rot64(a+z, 52) 31 | c = rot64(a, 37) 32 | a += binary.LittleEndian.Uint64(s[length-24:]) 33 | c += rot64(a, 7) 34 | a += binary.LittleEndian.Uint64(s[length-16:]) 35 | 36 | wf := a + z 37 | ws := b + rot64(a, 31) + c 38 | r := shiftMix((vf+ws)*k2 + (wf+vs)*k0) 39 | return shiftMix(r*k0+vs) * k2 40 | } 41 | 42 | func ch17to32(s []byte, length int) uint64 { 43 | a := binary.LittleEndian.Uint64(s) * k1 44 | b := binary.LittleEndian.Uint64(s[8:]) 45 | c := binary.LittleEndian.Uint64(s[length-8:]) * k2 46 | d := binary.LittleEndian.Uint64(s[length-16:]) * k0 47 | return hash16( 48 | rot64(a-b, 43)+rot64(c, 30)+d, 49 | a+rot64(b^k3, 20)-c+uint64(length), 50 | ) 51 | } 52 | 53 | func ch0to16(s []byte, length int) uint64 { 54 | if length > 8 { 55 | a := binary.LittleEndian.Uint64(s) 56 | b := binary.LittleEndian.Uint64(s[length-8:]) 57 | return ch16(a, rot64(b+uint64(length), uint(length))) ^ b 58 | } 59 | if length >= 4 { 60 | a := uint64(fetch32(s)) 61 | return ch16(uint64(length)+(a<<3), uint64(fetch32(s[length-4:]))) 62 | } 63 | if length > 0 { 64 | a := s[0] 65 | b := s[length>>1] 66 | c := s[length-1] 67 | y := uint32(a) + (uint32(b) << 8) 68 | z := uint32(length) + (uint32(c) << 2) 69 | return shiftMix(uint64(y)*k2^uint64(z)*k3) * k2 70 | } 71 | return k2 72 | } 73 | 74 | // CH64 returns ClickHouse version of Hash64. 75 | func CH64(s []byte) uint64 { 76 | length := len(s) 77 | if length <= 16 { 78 | return ch0to16(s, length) 79 | } 80 | if length <= 32 { 81 | return ch17to32(s, length) 82 | } 83 | if length <= 64 { 84 | return ch33to64(s, length) 85 | } 86 | 87 | x := binary.LittleEndian.Uint64(s) 88 | y := binary.LittleEndian.Uint64(s[length-16:]) ^ k1 89 | z := binary.LittleEndian.Uint64(s[length-56:]) ^ k0 90 | 91 | v := weakHash32SeedsByte(s[length-64:], uint64(length), y) 92 | w := weakHash32SeedsByte(s[length-32:], uint64(length)*k1, k0) 93 | z += shiftMix(v.High) * k1 94 | x = rot64(z+x, 39) * k1 95 | y = rot64(y, 33) * k1 96 | 97 | // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks. 98 | s = s[:nearestMultiple64(s)] 99 | for len(s) > 0 { 100 | x = rot64(x+y+v.Low+binary.LittleEndian.Uint64(s[16:]), 37) * k1 101 | y = rot64(y+v.High+binary.LittleEndian.Uint64(s[48:]), 42) * k1 102 | 103 | x ^= w.High 104 | y ^= v.Low 105 | 106 | z = rot64(z^w.Low, 33) 107 | v = weakHash32SeedsByte(s, v.High*k1, x+w.Low) 108 | w = weakHash32SeedsByte(s[32:], z+w.High, y) 109 | 110 | z, x = x, z 111 | s = s[64:] 112 | } 113 | 114 | return ch16( 115 | ch16(v.Low, w.Low)+shiftMix(y)*k1+z, 116 | ch16(v.High, w.High)+x, 117 | ) 118 | } 119 | -------------------------------------------------------------------------------- /ch_64_test.go: -------------------------------------------------------------------------------- 1 | package city 2 | 3 | import ( 4 | "testing" 5 | ) 6 | 7 | func BenchmarkClickHouse64(b *testing.B) { 8 | setup() 9 | b.ResetTimer() 10 | b.ReportAllocs() 11 | b.SetBytes(1024) 12 | 13 | for i := 0; i < b.N; i++ { 14 | CH64(data[:1024]) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /city_test.go: -------------------------------------------------------------------------------- 1 | package city 2 | 3 | import "testing" 4 | 5 | const ( 6 | seed0 uint64 = 1234567 7 | seed1 uint64 = k0 8 | dataSize int = 1 << 20 9 | testSize int = 300 10 | ) 11 | 12 | var ( 13 | seed128 = U128{seed0, seed1} 14 | data [dataSize]byte 15 | ) 16 | 17 | // Initialize data to pseudorandom value. 18 | func setup() { 19 | a := uint64(9) 20 | b := uint64(777) 21 | for i := 0; i < dataSize; i++ { 22 | a += b 23 | b += a 24 | a = (a ^ (a >> 41)) * k0 25 | b = (b^(b>>41))*k0 + uint64(i) 26 | u := byte(b >> 37) 27 | data[i] = u 28 | } 29 | } 30 | 31 | var testdata = [testSize][]uint64{ 32 | { 33 | 0x9ae16a3b2f90404f, 0x75106db890237a4a, 0x3feac5f636039766, 0x3df09dfc64c09a2b, 34 | 0x3cb540c392e51e29, 0x6b56343feac0663, 0x5b7bc50fd8e8ad92, 0x3df09dfc64c09a2b, 35 | 0x3cb540c392e51e29, 0x6b56343feac0663, 0x5b7bc50fd8e8ad92, 0x95162f24e6a5f930, 36 | 0x6808bdf4f1eb06e0, 0xb3b1f3a67b624d82, 0xc9a62f12bd4cd80b, 0xdc56d17a, 37 | }, 38 | { 39 | 0x541150e87f415e96, 0x1aef0d24b3148a1a, 0xbacc300e1e82345a, 0xc3cdc41e1df33513, 40 | 0x2c138ff2596d42f6, 0xf58e9082aed3055f, 0x162e192b2957163d, 0xc3cdc41e1df33513, 41 | 0x2c138ff2596d42f6, 0xf58e9082aed3055f, 0x162e192b2957163d, 0xfb99e85e0d16f90c, 42 | 0x608462c15bdf27e8, 0xe7d2c5c943572b62, 0x1baaa9327642798c, 0x99929334, 43 | }, 44 | { 45 | 0xf3786a4b25827c1, 0x34ee1a2bf767bd1c, 0x2f15ca2ebfb631f2, 0x3149ba1dac77270d, 46 | 0x70e2e076e30703c, 0x59bcc9659bc5296, 0x9ecbc8132ae2f1d7, 0x3149ba1dac77270d, 47 | 0x70e2e076e30703c, 0x59bcc9659bc5296, 0x9ecbc8132ae2f1d7, 0xa01d30789bad7cf2, 48 | 0xae03fe371981a0e0, 0x127e3883b8788934, 0xd0ac3d4c0a6fca32, 0x4252edb7, 49 | }, 50 | { 51 | 0xef923a7a1af78eab, 0x79163b1e1e9a9b18, 0xdf3b2aca6e1e4a30, 0x2193fb7620cbf23b, 52 | 0x8b6a8ff06cda8302, 0x1a44469afd3e091f, 0x8b0449376612506, 0x2193fb7620cbf23b, 53 | 0x8b6a8ff06cda8302, 0x1a44469afd3e091f, 0x8b0449376612506, 0xe9d9d41c32ad91d1, 54 | 0xb44ab09f58e3c608, 0x19e9175f9fcf784, 0x839b3c9581b4a480, 0xebc34f3c, 55 | }, 56 | { 57 | 0x11df592596f41d88, 0x843ec0bce9042f9c, 0xcce2ea1e08b1eb30, 0x4d09e42f09cc3495, 58 | 0x666236631b9f253b, 0xd28b3763cd02b6a3, 0x43b249e57c4d0c1b, 0x4d09e42f09cc3495, 59 | 0x666236631b9f253b, 0xd28b3763cd02b6a3, 0x43b249e57c4d0c1b, 0x3887101c8adea101, 60 | 0x8a9355d4efc91df0, 0x3e610944cc9fecfd, 0x5bf9eb60b08ac0ce, 0x26f2b463, 61 | }, 62 | { 63 | 0x831f448bdc5600b3, 0x62a24be3120a6919, 0x1b44098a41e010da, 0xdc07df53b949c6b, 64 | 0xd2b11b2081aeb002, 0xd212b02c1b13f772, 0xc0bed297b4be1912, 0xdc07df53b949c6b, 65 | 0xd2b11b2081aeb002, 0xd212b02c1b13f772, 0xc0bed297b4be1912, 0x682d3d2ad304e4af, 66 | 0x40e9112a655437a1, 0x268b09f7ee09843f, 0x6b9698d43859ca47, 0xb042c047, 67 | }, 68 | { 69 | 0x3eca803e70304894, 0xd80de767e4a920a, 0xa51cfbb292efd53d, 0xd183dcda5f73edfa, 70 | 0x3a93cbf40f30128c, 0x1a92544d0b41dbda, 0xaec2c4bee81975e1, 0xd183dcda5f73edfa, 71 | 0x3a93cbf40f30128c, 0x1a92544d0b41dbda, 0xaec2c4bee81975e1, 0x5f91814d1126ba4b, 72 | 0xf8ac57eee87fcf1f, 0xc55c644a5d0023cd, 0xadb761e827825ff2, 0xe73bb0a8, 73 | }, 74 | { 75 | 0x1b5a063fb4c7f9f1, 0x318dbc24af66dee9, 0x10ef7b32d5c719af, 0xb140a02ef5c97712, 76 | 0xb7d00ef065b51b33, 0x635121d532897d98, 0x532daf21b312a6d6, 0xb140a02ef5c97712, 77 | 0xb7d00ef065b51b33, 0x635121d532897d98, 0x532daf21b312a6d6, 0xc0b09b75d943910, 78 | 0x8c84dfb5ef2a8e96, 0xe5c06034b0353433, 0x3170faf1c33a45dd, 0x91dfdd75, 79 | }, 80 | { 81 | 0xa0f10149a0e538d6, 0x69d008c20f87419f, 0x41b36376185b3e9e, 0x26b6689960ccf81d, 82 | 0x55f23b27bb9efd94, 0x3a17f6166dd765db, 0xc891a8a62931e782, 0x26b6689960ccf81d, 83 | 0x55f23b27bb9efd94, 0x3a17f6166dd765db, 0xc891a8a62931e782, 0x23852dc37ddd2607, 84 | 0x8b7f1b1ec897829e, 0xd1d69452a54eed8a, 0x56431f2bd766ec24, 0xc87f95de, 85 | }, 86 | { 87 | 0xfb8d9c70660b910b, 0xa45b0cc3476bff1b, 0xb28d1996144f0207, 0x98ec31113e5e35d2, 88 | 0x5e4aeb853f1b9aa7, 0xbcf5c8fe4465b7c8, 0xb1ea3a8243996f15, 0x98ec31113e5e35d2, 89 | 0x5e4aeb853f1b9aa7, 0xbcf5c8fe4465b7c8, 0xb1ea3a8243996f15, 0xcabbccedb6407571, 90 | 0xd1e40a84c445ec3a, 0x33302aa908cf4039, 0x9f15f79211b5cdf8, 0x3f5538ef, 91 | }, 92 | { 93 | 0x236827beae282a46, 0xe43970221139c946, 0x4f3ac6faa837a3aa, 0x71fec0f972248915, 94 | 0x2170ec2061f24574, 0x9eb346b6caa36e82, 0x2908f0fdbca48e73, 0x71fec0f972248915, 95 | 0x2170ec2061f24574, 0x9eb346b6caa36e82, 0x2908f0fdbca48e73, 0x8101c99f07c64abb, 96 | 0xb9f4b02b1b6a96a7, 0x583a2b10cd222f88, 0x199dae4cf9db24c, 0x70eb1a1f, 97 | }, 98 | { 99 | 0xc385e435136ecf7c, 0xd9d17368ff6c4a08, 0x1b31eed4e5251a67, 0xdf01a322c43a6200, 100 | 0x298b65a1714b5a7e, 0x933b83f0aedf23c, 0x157bcb44d63f765a, 0xdf01a322c43a6200, 101 | 0x298b65a1714b5a7e, 0x933b83f0aedf23c, 0x157bcb44d63f765a, 0xd6e9fc7a272d8b51, 102 | 0x3ee5073ef1a9b777, 0x63149e31fac02c59, 0x2f7979ff636ba1d8, 0xcfd63b83, 103 | }, 104 | { 105 | 0xe3f6828b6017086d, 0x21b4d1900554b3b0, 0xbef38be1809e24f1, 0xd93251758985ee6c, 106 | 0x32a9e9f82ba2a932, 0x3822aacaa95f3329, 0xdb349b2f90a490d8, 0xd93251758985ee6c, 107 | 0x32a9e9f82ba2a932, 0x3822aacaa95f3329, 0xdb349b2f90a490d8, 0x8d49194a894a19ca, 108 | 0x79a78b06e42738e6, 0x7e0f1eda3d390c66, 0x1c291d7e641100a5, 0x894a52ef, 109 | }, 110 | { 111 | 0x851fff285561dca0, 0x4d1277d73cdf416f, 0x28ccffa61010ebe2, 0x77a4ccacd131d9ee, 112 | 0xe1d08eeb2f0e29aa, 0x70b9e3051383fa45, 0x582d0120425caba, 0x77a4ccacd131d9ee, 113 | 0xe1d08eeb2f0e29aa, 0x70b9e3051383fa45, 0x582d0120425caba, 0xa740eef1846e4564, 114 | 0x572dddb74ac3ae00, 0xfdb5ca9579163bbd, 0xa649b9b799c615d2, 0x9cde6a54, 115 | }, 116 | { 117 | 0x61152a63595a96d9, 0xd1a3a91ef3a7ba45, 0x443b6bb4a493ad0c, 0xa154296d11362d06, 118 | 0xd0f0bf1f1cb02fc1, 0xccb87e09309f90d1, 0xb24a8e4881911101, 0xa154296d11362d06, 119 | 0xd0f0bf1f1cb02fc1, 0xccb87e09309f90d1, 0xb24a8e4881911101, 0x1a481b4528559f58, 120 | 0xbf837a3150896995, 0x4989ef6b941a3757, 0x2e725ab72d0b2948, 0x6c4898d5, 121 | }, 122 | { 123 | 0x44473e03be306c88, 0x30097761f872472a, 0x9fd1b669bfad82d7, 0x3bab18b164396783, 124 | 0x47e385ff9d4c06f, 0x18062081bf558df, 0x63416eb68f104a36, 0x3bab18b164396783, 125 | 0x47e385ff9d4c06f, 0x18062081bf558df, 0x63416eb68f104a36, 0x4abda1560c47ac80, 126 | 0x1ea0e63dc6587aee, 0x33ec79d92ebc1de, 0x94f9dccef771e048, 0x13e1978e, 127 | }, 128 | { 129 | 0x3ead5f21d344056, 0xfb6420393cfb05c3, 0x407932394cbbd303, 0xac059617f5906673, 130 | 0x94d50d3dcd3069a7, 0x2b26c3b92dea0f0, 0x99b7374cc78fc3fb, 0xac059617f5906673, 131 | 0x94d50d3dcd3069a7, 0x2b26c3b92dea0f0, 0x99b7374cc78fc3fb, 0x1a8e3c73cdd40ee8, 132 | 0xcbb5fca06747f45b, 0xceec44238b291841, 0x28bf35cce9c90a25, 0x51b4ba8, 133 | }, 134 | { 135 | 0x6abbfde37ee03b5b, 0x83febf188d2cc113, 0xcda7b62d94d5b8ee, 0xa4375590b8ae7c82, 136 | 0x168fd42f9ecae4ff, 0x23bbde43de2cb214, 0xa8c333112a243c8c, 0xa4375590b8ae7c82, 137 | 0x168fd42f9ecae4ff, 0x23bbde43de2cb214, 0xa8c333112a243c8c, 0x10ac012e8c518b49, 138 | 0x64a44605d8b29458, 0xa67e701d2a679075, 0x3a3a20f43ec92303, 0xb6b06e40, 139 | }, 140 | { 141 | 0x943e7ed63b3c080, 0x1ef207e9444ef7f8, 0xef4a9f9f8c6f9b4a, 0x6b54fc38d6a84108, 142 | 0x32f4212a47a4665, 0x6b5a9a8f64ee1da6, 0x9f74e86c6da69421, 0x6b54fc38d6a84108, 143 | 0x32f4212a47a4665, 0x6b5a9a8f64ee1da6, 0x9f74e86c6da69421, 0x946dd0cb30c1a08e, 144 | 0xfdf376956907eaaa, 0xa59074c6eec03028, 0xb1a3abcf283f34ac, 0x240a2f2, 145 | }, 146 | { 147 | 0xd72ce05171ef8a1a, 0xc6bd6bd869203894, 0xc760e6396455d23a, 0xf86af0b40dcce7b, 148 | 0x8d3c15d613394d3c, 0x491e400491cd4ece, 0x7c19d3530ea3547f, 0xf86af0b40dcce7b, 149 | 0x8d3c15d613394d3c, 0x491e400491cd4ece, 0x7c19d3530ea3547f, 0x1362963a1dc32af9, 150 | 0xfb9bc11762e1385c, 0x9e164ef1f5376083, 0x6c15819b5e828a7e, 0x5dcefc30, 151 | }, 152 | { 153 | 0x4182832b52d63735, 0x337097e123eea414, 0xb5a72ca0456df910, 0x7ebc034235bc122f, 154 | 0xd9a7783d4edd8049, 0x5f8b04a15ae42361, 0xfc193363336453dd, 0x7ebc034235bc122f, 155 | 0xd9a7783d4edd8049, 0x5f8b04a15ae42361, 0xfc193363336453dd, 0x9b6c50224ef8c4f8, 156 | 0xba225c7942d16c3f, 0x6f6d55226a73c412, 0xabca061fe072152a, 0x7a48b105, 157 | }, 158 | { 159 | 0xd6cdae892584a2cb, 0x58de0fa4eca17dcd, 0x43df30b8f5f1cb00, 0x9e4ea5a4941e097d, 160 | 0x547e048d5a9daaba, 0xeb6ecbb0b831d185, 0xe0168df5fad0c670, 0x9e4ea5a4941e097d, 161 | 0x547e048d5a9daaba, 0xeb6ecbb0b831d185, 0xe0168df5fad0c670, 0xafa9705f98c2c96a, 162 | 0x749436f48137a96b, 0x759c041fc21df486, 0xb23bf400107aa2ec, 0xfd55007b, 163 | }, 164 | { 165 | 0x5c8e90bc267c5ee4, 0xe9ae044075d992d9, 0xf234cbfd1f0a1e59, 0xce2744521944f14c, 166 | 0x104f8032f99dc152, 0x4e7f425bfac67ca7, 0x9461b911a1c6d589, 0xce2744521944f14c, 167 | 0x104f8032f99dc152, 0x4e7f425bfac67ca7, 0x9461b911a1c6d589, 0x5e5ecc726db8b60d, 168 | 0xcce68b0586083b51, 0x8a7f8e54a9cba0fc, 0x42f010181d16f049, 0x6b95894c, 169 | }, 170 | { 171 | 0xbbd7f30ac310a6f3, 0xb23b570d2666685f, 0xfb13fb08c9814fe7, 0x4ee107042e512374, 172 | 0x1e2c8c0d16097e13, 0x210c7500995aa0e6, 0x6c13190557106457, 0x4ee107042e512374, 173 | 0x1e2c8c0d16097e13, 0x210c7500995aa0e6, 0x6c13190557106457, 0xa99b31c96777f381, 174 | 0x8312ae8301d386c0, 0xed5042b2a4fa96a3, 0xd71d1bb23907fe97, 0x3360e827, 175 | }, 176 | { 177 | 0x36a097aa49519d97, 0x8204380a73c4065, 0x77c2004bdd9e276a, 0x6ee1f817ce0b7aee, 178 | 0xe9dcb3507f0596ca, 0x6bc63c666b5100e2, 0xe0b056f1821752af, 0x6ee1f817ce0b7aee, 179 | 0xe9dcb3507f0596ca, 0x6bc63c666b5100e2, 0xe0b056f1821752af, 0x8ea1114e60292678, 180 | 0x904b80b46becc77, 0x46cd9bb6e9dff52f, 0x4c91e3b698355540, 0x45177e0b, 181 | }, 182 | { 183 | 0xdc78cb032c49217, 0x112464083f83e03a, 0x96ae53e28170c0f5, 0xd367ff54952a958, 184 | 0xcdad930657371147, 0xaa24dc2a9573d5fe, 0xeb136daa89da5110, 0xd367ff54952a958, 185 | 0xcdad930657371147, 0xaa24dc2a9573d5fe, 0xeb136daa89da5110, 0xde623005f6d46057, 186 | 0xb50c0c92b95e9b7f, 0xa8aa54050b81c978, 0x573fb5c7895af9b5, 0x7c6fffe4, 187 | }, 188 | { 189 | 0x441593e0da922dfe, 0x936ef46061469b32, 0x204a1921197ddd87, 0x50d8a70e7a8d8f56, 190 | 0x256d150ae75dab76, 0xe81f4c4a1989036a, 0xd0f8db365f9d7e00, 0x50d8a70e7a8d8f56, 191 | 0x256d150ae75dab76, 0xe81f4c4a1989036a, 0xd0f8db365f9d7e00, 0x753d686677b14522, 192 | 0x9f76e0cb6f2d0a66, 0xab14f95988ec0d39, 0x97621d9da9c9812f, 0xbbc78da4, 193 | }, 194 | { 195 | 0x2ba3883d71cc2133, 0x72f2bbb32bed1a3c, 0x27e1bd96d4843251, 0xa90f761e8db1543a, 196 | 0xc339e23c09703cd8, 0xf0c6624c4b098fd3, 0x1bae2053e41fa4d9, 0xa90f761e8db1543a, 197 | 0xc339e23c09703cd8, 0xf0c6624c4b098fd3, 0x1bae2053e41fa4d9, 0x3589e273c22ba059, 198 | 0x63798246e5911a0b, 0x18e710ec268fc5dc, 0x714a122de1d074f3, 0xc5c25d39, 199 | }, 200 | { 201 | 0xf2b6d2adf8423600, 0x7514e2f016a48722, 0x43045743a50396ba, 0x23dacb811652ad4f, 202 | 0xc982da480e0d4c7d, 0x3a9c8ed5a399d0a9, 0x951b8d084691d4e4, 0x23dacb811652ad4f, 203 | 0xc982da480e0d4c7d, 0x3a9c8ed5a399d0a9, 0x951b8d084691d4e4, 0xd9f87b4988cff2f7, 204 | 0x217a191d986aa3bc, 0x6ad23c56b480350, 0xdd78673938ceb2e7, 0xb6e5d06e, 205 | }, 206 | { 207 | 0x38fffe7f3680d63c, 0xd513325255a7a6d1, 0x31ed47790f6ca62f, 0xc801faaa0a2e331f, 208 | 0x491dbc58279c7f88, 0x9c0178848321c97a, 0x9d934f814f4d6a3c, 0xc801faaa0a2e331f, 209 | 0x491dbc58279c7f88, 0x9c0178848321c97a, 0x9d934f814f4d6a3c, 0x606a3e4fc8763192, 210 | 0xbc15cb36a677ee84, 0x52d5904157e1fe71, 0x1588dd8b1145b79b, 0x6178504e, 211 | }, 212 | { 213 | 0xb7477bf0b9ce37c6, 0x63b1c580a7fd02a4, 0xf6433b9f10a5dac, 0x68dd76db9d64eca7, 214 | 0x36297682b64b67, 0x42b192d71f414b7a, 0x79692cef44fa0206, 0x68dd76db9d64eca7, 215 | 0x36297682b64b67, 0x42b192d71f414b7a, 0x79692cef44fa0206, 0xf0979252f4776d07, 216 | 0x4b87cd4f1c9bbf52, 0x51b84bbc6312c710, 0x150720fbf85428a7, 0xbd4c3637, 217 | }, 218 | { 219 | 0x55bdb0e71e3edebd, 0xc7ab562bcf0568bc, 0x43166332f9ee684f, 0xb2e25964cd409117, 220 | 0xa010599d6287c412, 0xfa5d6461e768dda2, 0xcb3ce74e8ec4f906, 0xb2e25964cd409117, 221 | 0xa010599d6287c412, 0xfa5d6461e768dda2, 0xcb3ce74e8ec4f906, 0x6120abfd541a2610, 222 | 0xaa88b148cc95794d, 0x2686ca35df6590e3, 0xc6b02d18616ce94d, 0x6e7ac474, 223 | }, 224 | { 225 | 0x782fa1b08b475e7, 0xfb7138951c61b23b, 0x9829105e234fb11e, 0x9a8c431f500ef06e, 226 | 0xd848581a580b6c12, 0xfecfe11e13a2bdb4, 0x6c4fa0273d7db08c, 0x9a8c431f500ef06e, 227 | 0xd848581a580b6c12, 0xfecfe11e13a2bdb4, 0x6c4fa0273d7db08c, 0x482f43bf5ae59fcb, 228 | 0xf651fbca105d79e6, 0xf09f78695d865817, 0x7a99d0092085cf47, 0x1fb4b518, 229 | }, 230 | { 231 | 0xc5dc19b876d37a80, 0x15ffcff666cfd710, 0xe8c30c72003103e2, 0x7870765b470b2c5d, 232 | 0x78a9103ff960d82, 0x7bb50ffc9fac74b3, 0x477e70ab2b347db2, 0x7870765b470b2c5d, 233 | 0x78a9103ff960d82, 0x7bb50ffc9fac74b3, 0x477e70ab2b347db2, 0xa625238bdf7c07cf, 234 | 0x1128d515174809f5, 0xb0f1647e82f45873, 0x17792d1c4f222c39, 0x31d13d6d, 235 | }, 236 | { 237 | 0x5e1141711d2d6706, 0xb537f6dee8de6933, 0x3af0a1fbbe027c54, 0xea349dbc16c2e441, 238 | 0x38a7455b6a877547, 0x5f97b9750e365411, 0xe8cde7f93af49a3, 0xea349dbc16c2e441, 239 | 0x38a7455b6a877547, 0x5f97b9750e365411, 0xe8cde7f93af49a3, 0xba101925ec1f7e26, 240 | 0xd5e84cab8192c71e, 0xe256427726fdd633, 0xa4f38e2c6116890d, 0x26fa72e3, 241 | }, 242 | { 243 | 0x782edf6da001234f, 0xf48cbd5c66c48f3, 0x808754d1e64e2a32, 0x5d9dde77353b1a6d, 244 | 0x11f58c54581fa8b1, 0xda90fa7c28c37478, 0x5e9a2eafc670a88a, 0x5d9dde77353b1a6d, 245 | 0x11f58c54581fa8b1, 0xda90fa7c28c37478, 0x5e9a2eafc670a88a, 0xe35e1bc172e011ef, 246 | 0xbf9255a4450ae7fe, 0x55f85194e26bc55f, 0x4f327873e14d0e54, 0x6a7433bf, 247 | }, 248 | { 249 | 0xd26285842ff04d44, 0x8f38d71341eacca9, 0x5ca436f4db7a883c, 0xbf41e5376b9f0eec, 250 | 0x2252d21eb7e1c0e9, 0xf4b70a971855e732, 0x40c7695aa3662afd, 0xbf41e5376b9f0eec, 251 | 0x2252d21eb7e1c0e9, 0xf4b70a971855e732, 0x40c7695aa3662afd, 0x770fe19e16ab73bb, 252 | 0xd603ebda6393d749, 0xe58c62439aa50dbd, 0x96d51e5a02d2d7cf, 0x4e6df758, 253 | }, 254 | { 255 | 0xc6ab830865a6bae6, 0x6aa8e8dd4b98815c, 0xefe3846713c371e5, 0xa1924cbf0b5f9222, 256 | 0x7f4872369c2b4258, 0xcd6da30530f3ea89, 0xb7f8b9a704e6cea1, 0xa1924cbf0b5f9222, 257 | 0x7f4872369c2b4258, 0xcd6da30530f3ea89, 0xb7f8b9a704e6cea1, 0xfa06ff40433fd535, 258 | 0xfb1c36fe8f0737f1, 0xbb7050561171f80, 0xb1bc23235935d897, 0xd57f63ea, 259 | }, 260 | { 261 | 0x44b3a1929232892, 0x61dca0e914fc217, 0xa607cc142096b964, 0xf7dbc8433c89b274, 262 | 0x2f5f70581c9b7d32, 0x39bf5e5fec82dcca, 0x8ade56388901a619, 0xf7dbc8433c89b274, 263 | 0x2f5f70581c9b7d32, 0x39bf5e5fec82dcca, 0x8ade56388901a619, 0xc1c6a725caab3ea9, 264 | 0xc1c7906c2f80b898, 0x9c3871a04cc884e6, 0xdf01813cbbdf217f, 0x52ef73b3, 265 | }, 266 | { 267 | 0x4b603d7932a8de4f, 0xfae64c464b8a8f45, 0x8fafab75661d602a, 0x8ffe870ef4adc087, 268 | 0x65bea2be41f55b54, 0x82f3503f636aef1, 0x5f78a282378b6bb0, 0x8ffe870ef4adc087, 269 | 0x65bea2be41f55b54, 0x82f3503f636aef1, 0x5f78a282378b6bb0, 0x7bf2422c0beceddb, 270 | 0x9d238d4780114bd, 0x7ad198311906597f, 0xec8f892c0422aca3, 0x3cb36c3, 271 | }, 272 | { 273 | 0x4ec0b54cf1566aff, 0x30d2c7269b206bf4, 0x77c22e82295e1061, 0x3df9b04434771542, 274 | 0xfeddce785ccb661f, 0xa644aff716928297, 0xdd46aee73824b4ed, 0x3df9b04434771542, 275 | 0xfeddce785ccb661f, 0xa644aff716928297, 0xdd46aee73824b4ed, 0xbf8d71879da29b02, 276 | 0xfc82dccbfc8022a0, 0x31bfcd0d9f48d1d3, 0xc64ee24d0e7b5f8b, 0x72c39bea, 277 | }, 278 | { 279 | 0xed8b7a4b34954ff7, 0x56432de31f4ee757, 0x85bd3abaa572b155, 0x7d2c38a926dc1b88, 280 | 0x5245b9eb4cd6791d, 0xfb53ab03b9ad0855, 0x3664026c8fc669d7, 0x7d2c38a926dc1b88, 281 | 0x5245b9eb4cd6791d, 0xfb53ab03b9ad0855, 0x3664026c8fc669d7, 0x45024d5080bc196, 282 | 0xb236ebec2cc2740, 0x27231ad0e3443be4, 0x145780b63f809250, 0xa65aa25c, 283 | }, 284 | { 285 | 0x5d28b43694176c26, 0x714cc8bc12d060ae, 0x3437726273a83fe6, 0x864b1b28ec16ea86, 286 | 0x6a78a5a4039ec2b9, 0x8e959533e35a766, 0x347b7c22b75ae65f, 0x864b1b28ec16ea86, 287 | 0x6a78a5a4039ec2b9, 0x8e959533e35a766, 0x347b7c22b75ae65f, 0x5005892bb61e647c, 288 | 0xfe646519b4a1894d, 0xcd801026f74a8a53, 0x8713463e9a1ab9ce, 0x74740539, 289 | }, 290 | { 291 | 0x6a1ef3639e1d202e, 0x919bc1bd145ad928, 0x30f3f7e48c28a773, 0x2e8c49d7c7aaa527, 292 | 0x5e2328fc8701db7c, 0x89ef1afca81f7de8, 0xb1857db11985d296, 0x2e8c49d7c7aaa527, 293 | 0x5e2328fc8701db7c, 0x89ef1afca81f7de8, 0xb1857db11985d296, 0x17763d695f616115, 294 | 0xb8f7bf1fcdc8322c, 0xcf0c61938ab07a27, 0x1122d3e6edb4e866, 0xc3ae3c26, 295 | }, 296 | { 297 | 0x159f4d9e0307b111, 0x3e17914a5675a0c, 0xaf849bd425047b51, 0x3b69edadf357432b, 298 | 0x3a2e311c121e6bf2, 0x380fad1e288d57e5, 0xbf7c7e8ef0e3b83a, 0x3b69edadf357432b, 299 | 0x3a2e311c121e6bf2, 0x380fad1e288d57e5, 0xbf7c7e8ef0e3b83a, 0x92966d5f4356ae9b, 300 | 0x2a03fc66c4d6c036, 0x2516d8bddb0d5259, 0xb3ffe9737ff5090, 0xf29db8a2, 301 | }, 302 | { 303 | 0xcc0a840725a7e25b, 0x57c69454396e193a, 0x976eaf7eee0b4540, 0xcd7a46850b95e901, 304 | 0xc57f7d060dda246f, 0x6b9406ead64079bf, 0x11b28e20a573b7bd, 0xcd7a46850b95e901, 305 | 0xc57f7d060dda246f, 0x6b9406ead64079bf, 0x11b28e20a573b7bd, 0x2d6db356e9369ace, 306 | 0xdc0afe10fba193, 0x5cdb10885dbbfce, 0x5c700e205782e35a, 0x1ef4cbf4, 307 | }, 308 | { 309 | 0xa2b27ee22f63c3f1, 0x9ebde0ce1b3976b2, 0x2fe6a92a257af308, 0x8c1df927a930af59, 310 | 0xa462f4423c9e384e, 0x236542255b2ad8d9, 0x595d201a2c19d5bc, 0x8c1df927a930af59, 311 | 0xa462f4423c9e384e, 0x236542255b2ad8d9, 0x595d201a2c19d5bc, 0x22c87d4604a67f3, 312 | 0x585a06eb4bc44c4f, 0xb4175a7ac7eabcd8, 0xa457d3eeba14ab8c, 0xa9be6c41, 313 | }, 314 | { 315 | 0xd8f2f234899bcab3, 0xb10b037297c3a168, 0xdebea2c510ceda7f, 0x9498fefb890287ce, 316 | 0xae68c2be5b1a69a6, 0x6189dfba34ed656c, 0x91658f95836e5206, 0x9498fefb890287ce, 317 | 0xae68c2be5b1a69a6, 0x6189dfba34ed656c, 0x91658f95836e5206, 0xc0bb4fff32aecd4d, 318 | 0x94125f505a50eef9, 0x6ac406e7cfbce5bb, 0x344a4b1dcdb7f5d8, 0xfa31801, 319 | }, 320 | { 321 | 0x584f28543864844f, 0xd7cee9fc2d46f20d, 0xa38dca5657387205, 0x7a0b6dbab9a14e69, 322 | 0xc6d0a9d6b0e31ac4, 0xa674d85812c7cf6, 0x63538c0351049940, 0x7a0b6dbab9a14e69, 323 | 0xc6d0a9d6b0e31ac4, 0xa674d85812c7cf6, 0x63538c0351049940, 0x9710e5f0bc93d1d, 324 | 0xc2bea5bd7c54ddd4, 0x48739af2bed0d32d, 0xba2c4e09e21fba85, 0x8331c5d8, 325 | }, 326 | { 327 | 0xa94be46dd9aa41af, 0xa57e5b7723d3f9bd, 0x34bf845a52fd2f, 0x843b58463c8df0ae, 328 | 0x74b258324e916045, 0xbdd7353230eb2b38, 0xfad31fced7abade5, 0x843b58463c8df0ae, 329 | 0x74b258324e916045, 0xbdd7353230eb2b38, 0xfad31fced7abade5, 0x2436aeafb0046f85, 330 | 0x65bc9af9e5e33161, 0x92733b1b3ae90628, 0xf48143eaf78a7a89, 0xe9876db8, 331 | }, 332 | { 333 | 0x9a87bea227491d20, 0xa468657e2b9c43e7, 0xaf9ba60db8d89ef7, 0xcc76f429ea7a12bb, 334 | 0x5f30eaf2bb14870a, 0x434e824cb3e0cd11, 0x431a4d382e39d16e, 0xcc76f429ea7a12bb, 335 | 0x5f30eaf2bb14870a, 0x434e824cb3e0cd11, 0x431a4d382e39d16e, 0x9e51f913c4773a8, 336 | 0x32ab1925823d0add, 0x99c61b54c1d8f69d, 0x38cfb80f02b43b1f, 0x27b0604e, 337 | }, 338 | { 339 | 0x27688c24958d1a5c, 0xe3b4a1c9429cf253, 0x48a95811f70d64bc, 0x328063229db22884, 340 | 0x67e9c95f8ba96028, 0x7c6bf01c60436075, 0xfa55161e7d9030b2, 0x328063229db22884, 341 | 0x67e9c95f8ba96028, 0x7c6bf01c60436075, 0xfa55161e7d9030b2, 0xdadbc2f0dab91681, 342 | 0xda39d7a4934ca11, 0x162e845d24c1b45c, 0xeb5b9dcd8c6ed31b, 0xdcec07f2, 343 | }, 344 | { 345 | 0x5d1d37790a1873ad, 0xed9cd4bcc5fa1090, 0xce51cde05d8cd96a, 0xf72c26e624407e66, 346 | 0xa0eb541bdbc6d409, 0xc3f40a2f40b3b213, 0x6a784de68794492d, 0xf72c26e624407e66, 347 | 0xa0eb541bdbc6d409, 0xc3f40a2f40b3b213, 0x6a784de68794492d, 0x10a38a23dbef7937, 348 | 0x6a5560f853252278, 0xc3387bbf3c7b82ba, 0xfbee7c12eb072805, 0xcff0a82a, 349 | }, 350 | { 351 | 0x1f03fd18b711eea9, 0x566d89b1946d381a, 0x6e96e83fc92563ab, 0x405f66cf8cae1a32, 352 | 0xd7261740d8f18ce6, 0xfea3af64a413d0b2, 0xd64d1810e83520fe, 0x405f66cf8cae1a32, 353 | 0xd7261740d8f18ce6, 0xfea3af64a413d0b2, 0xd64d1810e83520fe, 0xe1334a00a580c6e8, 354 | 0x454049e1b52c15f, 0x8895d823d9778247, 0xefa7f2e88b826618, 0xfec83621, 355 | }, 356 | { 357 | 0xf0316f286cf527b6, 0xf84c29538de1aa5a, 0x7612ed3c923d4a71, 0xd4eccebe9393ee8a, 358 | 0x2eb7867c2318cc59, 0x1ce621fd700fe396, 0x686450d7a346878a, 0xd4eccebe9393ee8a, 359 | 0x2eb7867c2318cc59, 0x1ce621fd700fe396, 0x686450d7a346878a, 0x75a5f37579f8b4cb, 360 | 0x500cc16eb6541dc7, 0xb7b02317b539d9a6, 0x3519ddff5bc20a29, 0x743d8dc, 361 | }, 362 | { 363 | 0x297008bcb3e3401d, 0x61a8e407f82b0c69, 0xa4a35bff0524fa0e, 0x7a61d8f552a53442, 364 | 0x821d1d8d8cfacf35, 0x7cc06361b86d0559, 0x119b617a8c2be199, 0x7a61d8f552a53442, 365 | 0x821d1d8d8cfacf35, 0x7cc06361b86d0559, 0x119b617a8c2be199, 0x2996487da6721759, 366 | 0x61a901376070b91d, 0xd88dee12ae9c9b3c, 0x5665491be1fa53a7, 0x64d41d26, 367 | }, 368 | { 369 | 0x43c6252411ee3be, 0xb4ca1b8077777168, 0x2746dc3f7da1737f, 0x2247a4b2058d1c50, 370 | 0x1b3fa184b1d7bcc0, 0xdeb85613995c06ed, 0xcbe1d957485a3ccd, 0x2247a4b2058d1c50, 371 | 0x1b3fa184b1d7bcc0, 0xdeb85613995c06ed, 0xcbe1d957485a3ccd, 0xdfe241f8f33c96b6, 372 | 0x6597eb05019c2109, 0xda344b2a63a219cf, 0x79b8e3887612378a, 0xacd90c81, 373 | }, 374 | { 375 | 0xce38a9a54fad6599, 0x6d6f4a90b9e8755e, 0xc3ecc79ff105de3f, 0xe8b9ee96efa2d0e, 376 | 0x90122905c4ab5358, 0x84f80c832d71979c, 0x229310f3ffbbf4c6, 0xe8b9ee96efa2d0e, 377 | 0x90122905c4ab5358, 0x84f80c832d71979c, 0x229310f3ffbbf4c6, 0xcc9eb42100cd63a7, 378 | 0x7a283f2f3da7b9f, 0x359b061d314e7a72, 0xd0d959720028862, 0x7c746a4b, 379 | }, 380 | { 381 | 0x270a9305fef70cf, 0x600193999d884f3a, 0xf4d49eae09ed8a1, 0x2e091b85660f1298, 382 | 0xbfe37fae1cdd64c9, 0x8dddfbab930f6494, 0x2ccf4b08f5d417a, 0x2e091b85660f1298, 383 | 0xbfe37fae1cdd64c9, 0x8dddfbab930f6494, 0x2ccf4b08f5d417a, 0x365c2ee85582fe6, 384 | 0xdee027bcd36db62a, 0xb150994d3c7e5838, 0xfdfd1a0e692e436d, 0xb1047e99, 385 | }, 386 | { 387 | 0xe71be7c28e84d119, 0xeb6ace59932736e6, 0x70c4397807ba12c5, 0x7a9d77781ac53509, 388 | 0x4489c3ccfda3b39c, 0xfa722d4f243b4964, 0x25f15800bffdd122, 0x7a9d77781ac53509, 389 | 0x4489c3ccfda3b39c, 0xfa722d4f243b4964, 0x25f15800bffdd122, 0xed85e4157fbd3297, 390 | 0xaab1967227d59efd, 0x2199631212eb3839, 0x3e4c19359aae1cc2, 0xd1fd1068, 391 | }, 392 | { 393 | 0xb5b58c24b53aaa19, 0xd2a6ab0773dd897f, 0xef762fe01ecb5b97, 0x9deefbcfa4cab1f1, 394 | 0xb58f5943cd2492ba, 0xa96dcc4d1f4782a7, 0x102b62a82309dde5, 0x9deefbcfa4cab1f1, 395 | 0xb58f5943cd2492ba, 0xa96dcc4d1f4782a7, 0x102b62a82309dde5, 0x35fe52684763b338, 396 | 0xafe2616651eaad1f, 0x43e38715bdfa05e7, 0x83c9ba83b5ec4a40, 0x56486077, 397 | }, 398 | { 399 | 0x44dd59bd301995cf, 0x3ccabd76493ada1a, 0x540db4c87d55ef23, 0xcfc6d7adda35797, 400 | 0x14c7d1f32332cf03, 0x2d553ffbff3be99d, 0xc91c4ee0cb563182, 0xcfc6d7adda35797, 401 | 0x14c7d1f32332cf03, 0x2d553ffbff3be99d, 0xc91c4ee0cb563182, 0x9aa5e507f49136f0, 402 | 0x760c5dd1a82c4888, 0xbeea7e974a1cfb5c, 0x640b247774fe4bf7, 0x6069be80, 403 | }, 404 | { 405 | 0xb4d4789eb6f2630b, 0xbf6973263ce8ef0e, 0xd1c75c50844b9d3, 0xbce905900c1ec6ea, 406 | 0xc30f304f4045487d, 0xa5c550166b3a142b, 0x2f482b4e35327287, 0xbce905900c1ec6ea, 407 | 0xc30f304f4045487d, 0xa5c550166b3a142b, 0x2f482b4e35327287, 0x15b21ddddf355438, 408 | 0x496471fa3006bab, 0x2a8fd458d06c1a32, 0xdb91e8ae812f0b8d, 0x2078359b, 409 | }, 410 | { 411 | 0x12807833c463737c, 0x58e927ea3b3776b4, 0x72dd20ef1c2f8ad0, 0x910b610de7a967bf, 412 | 0x801bc862120f6bf5, 0x9653efeed5897681, 0xf5367ff83e9ebbb3, 0x910b610de7a967bf, 413 | 0x801bc862120f6bf5, 0x9653efeed5897681, 0xf5367ff83e9ebbb3, 0xcf56d489afd1b0bf, 414 | 0xc7c793715cae3de8, 0x631f91d64abae47c, 0x5f1f42fb14a444a2, 0x9ea21004, 415 | }, 416 | { 417 | 0xe88419922b87176f, 0xbcf32f41a7ddbf6f, 0xd6ebefd8085c1a0f, 0xd1d44fe99451ef72, 418 | 0xec951ba8e51e3545, 0xc0ca86b360746e96, 0xaa679cc066a8040b, 0xd1d44fe99451ef72, 419 | 0xec951ba8e51e3545, 0xc0ca86b360746e96, 0xaa679cc066a8040b, 0x51065861ece6ffc1, 420 | 0x76777368a2997e11, 0x87f278f46731100c, 0xbbaa4140bdba4527, 0x9c9cfe88, 421 | }, 422 | { 423 | 0x105191e0ec8f7f60, 0x5918dbfcca971e79, 0x6b285c8a944767b9, 0xd3e86ac4f5eccfa4, 424 | 0xe5399df2b106ca1, 0x814aadfacd217f1d, 0x2754e3def1c405a9, 0xd3e86ac4f5eccfa4, 425 | 0xe5399df2b106ca1, 0x814aadfacd217f1d, 0x2754e3def1c405a9, 0x99290323b9f06e74, 426 | 0xa9782e043f271461, 0x13c8b3b8c275a860, 0x6038d620e581e9e7, 0xb70a6ddd, 427 | }, 428 | { 429 | 0xa5b88bf7399a9f07, 0xfca3ddfd96461cc4, 0xebe738fdc0282fc6, 0x69afbc800606d0fb, 430 | 0x6104b97a9db12df7, 0xfcc09198bb90bf9f, 0xc5e077e41a65ba91, 0x69afbc800606d0fb, 431 | 0x6104b97a9db12df7, 0xfcc09198bb90bf9f, 0xc5e077e41a65ba91, 0xdb261835ee8aa08e, 432 | 0xdb0ee662e5796dc9, 0xfc1880ecec499e5f, 0x648866fbe1502034, 0xdea37298, 433 | }, 434 | { 435 | 0xd08c3f5747d84f50, 0x4e708b27d1b6f8ac, 0x70f70fd734888606, 0x909ae019d761d019, 436 | 0x368bf4aab1b86ef9, 0x308bd616d5460239, 0x4fd33269f76783ea, 0x909ae019d761d019, 437 | 0x368bf4aab1b86ef9, 0x308bd616d5460239, 0x4fd33269f76783ea, 0x7d53b37c19713eab, 438 | 0x6bba6eabda58a897, 0x91abb50efc116047, 0x4e902f347e0e0e35, 0x8f480819, 439 | }, 440 | { 441 | 0x2f72d12a40044b4b, 0x889689352fec53de, 0xf03e6ad87eb2f36, 0xef79f28d874b9e2d, 442 | 0xb512089e8e63b76c, 0x24dc06833bf193a9, 0x3c23308ba8e99d7e, 0xef79f28d874b9e2d, 443 | 0xb512089e8e63b76c, 0x24dc06833bf193a9, 0x3c23308ba8e99d7e, 0x5ceff7b85cacefb7, 444 | 0xef390338898cd73, 0xb12967d7d2254f54, 0xde874cbd8aef7b75, 0x30b3b16, 445 | }, 446 | { 447 | 0xaa1f61fdc5c2e11e, 0xc2c56cd11277ab27, 0xa1e73069fdf1f94f, 0x8184bab36bb79df0, 448 | 0xc81929ce8655b940, 0x301b11bf8a4d8ce8, 0x73126fd45ab75de9, 0x8184bab36bb79df0, 449 | 0xc81929ce8655b940, 0x301b11bf8a4d8ce8, 0x73126fd45ab75de9, 0x4bd6f76e4888229a, 450 | 0x9aae355b54a756d5, 0xca3de9726f6e99d5, 0x83f80cac5bc36852, 0xf31bc4e8, 451 | }, 452 | { 453 | 0x9489b36fe2246244, 0x3355367033be74b8, 0x5f57c2277cbce516, 0xbc61414f9802ecaf, 454 | 0x8edd1e7a50562924, 0x48f4ab74a35e95f2, 0xcc1afcfd99a180e7, 0xbc61414f9802ecaf, 455 | 0x8edd1e7a50562924, 0x48f4ab74a35e95f2, 0xcc1afcfd99a180e7, 0x517dd5e3acf66110, 456 | 0x7dd3ad9e8978b30d, 0x1f6d5dfc70de812b, 0x947daaba6441aaf3, 0x419f953b, 457 | }, 458 | { 459 | 0x358d7c0476a044cd, 0xe0b7b47bcbd8854f, 0xffb42ec696705519, 0xd45e44c263e95c38, 460 | 0xdf61db53923ae3b1, 0xf2bc948cc4fc027c, 0x8a8000c6066772a3, 0xd45e44c263e95c38, 461 | 0xdf61db53923ae3b1, 0xf2bc948cc4fc027c, 0x8a8000c6066772a3, 0x9fd93c942d31fa17, 462 | 0xd7651ecebe09cbd3, 0x68682cefb6a6f165, 0x541eb99a2dcee40e, 0x20e9e76d, 463 | }, 464 | { 465 | 0xb0c48df14275265a, 0x9da4448975905efa, 0xd716618e414ceb6d, 0x30e888af70df1e56, 466 | 0x4bee54bd47274f69, 0x178b4059e1a0afe5, 0x6e2c96b7f58e5178, 0x30e888af70df1e56, 467 | 0x4bee54bd47274f69, 0x178b4059e1a0afe5, 0x6e2c96b7f58e5178, 0xbb429d3b9275e9bc, 468 | 0xc198013f09cafdc6, 0xec0a6ee4fb5de348, 0x744e1e8ed2eb1eb0, 0x646f0ff8, 469 | }, 470 | { 471 | 0xdaa70bb300956588, 0x410ea6883a240c6d, 0xf5c8239fb5673eb3, 0x8b1d7bb4903c105f, 472 | 0xcfb1c322b73891d4, 0x5f3b792b22f07297, 0xfd64061f8be86811, 0x8b1d7bb4903c105f, 473 | 0xcfb1c322b73891d4, 0x5f3b792b22f07297, 0xfd64061f8be86811, 0x1d2db712921cfc2b, 474 | 0xcd1b2b2f2cee18ae, 0x6b6f8790dc7feb09, 0x46c179efa3f0f518, 0xeeb7eca8, 475 | }, 476 | { 477 | 0x4ec97a20b6c4c7c2, 0x5913b1cd454f29fd, 0xa9629f9daf06d685, 0x852c9499156a8f3, 478 | 0x3a180a6abfb79016, 0x9fc3c4764037c3c9, 0x2890c42fc0d972cf, 0x852c9499156a8f3, 479 | 0x3a180a6abfb79016, 0x9fc3c4764037c3c9, 0x2890c42fc0d972cf, 0x1f92231d4e537651, 480 | 0xfab8bb07aa54b7b9, 0xe05d2d771c485ed4, 0xd50b34bf808ca731, 0x8112bb9, 481 | }, 482 | { 483 | 0x5c3323628435a2e8, 0x1bea45ce9e72a6e3, 0x904f0a7027ddb52e, 0x939f31de14dcdc7b, 484 | 0xa68fdf4379df068, 0xf169e1f0b835279d, 0x7498e432f9619b27, 0x939f31de14dcdc7b, 485 | 0xa68fdf4379df068, 0xf169e1f0b835279d, 0x7498e432f9619b27, 0x1aa2a1f11088e785, 486 | 0xd6ad72f45729de78, 0x9a63814157c80267, 0x55538e35c648e435, 0x85a6d477, 487 | }, 488 | { 489 | 0xc1ef26bea260abdb, 0x6ee423f2137f9280, 0xdf2118b946ed0b43, 0x11b87fb1b900cc39, 490 | 0xe33e59b90dd815b1, 0xaa6cb5c4bafae741, 0x739699951ca8c713, 0x11b87fb1b900cc39, 491 | 0xe33e59b90dd815b1, 0xaa6cb5c4bafae741, 0x739699951ca8c713, 0x2b4389a967310077, 492 | 0x1d5382568a31c2c9, 0x55d1e787fbe68991, 0x277c254bc31301e7, 0x56f76c84, 493 | }, 494 | { 495 | 0x6be7381b115d653a, 0xed046190758ea511, 0xde6a45ffc3ed1159, 0xa64760e4041447d0, 496 | 0xe3eac49f3e0c5109, 0xdd86c4d4cb6258e2, 0xefa9857afd046c7f, 0xa64760e4041447d0, 497 | 0xe3eac49f3e0c5109, 0xdd86c4d4cb6258e2, 0xefa9857afd046c7f, 0xfab793dae8246f16, 498 | 0xc9e3b121b31d094c, 0xa2a0f55858465226, 0xdba6f0ff39436344, 0x9af45d55, 499 | }, 500 | { 501 | 0xae3eece1711b2105, 0x14fd3f4027f81a4a, 0xabb7e45177d151db, 0x501f3e9b18861e44, 502 | 0x465201170074e7d8, 0x96d5c91970f2cb12, 0x40fd28c43506c95d, 0x501f3e9b18861e44, 503 | 0x465201170074e7d8, 0x96d5c91970f2cb12, 0x40fd28c43506c95d, 0xe86c4b07802aaff3, 504 | 0xf317d14112372a70, 0x641b13e587711650, 0x4915421ab1090eaa, 0xd1c33760, 505 | }, 506 | { 507 | 0x376c28588b8fb389, 0x6b045e84d8491ed2, 0x4e857effb7d4e7dc, 0x154dd79fd2f984b4, 508 | 0xf11171775622c1c3, 0x1fbe30982e78e6f0, 0xa460a15dcf327e44, 0x154dd79fd2f984b4, 509 | 0xf11171775622c1c3, 0x1fbe30982e78e6f0, 0xa460a15dcf327e44, 0xf359e0900cc3d582, 510 | 0x7e11070447976d00, 0x324e6daf276ea4b5, 0x7aa6e2df0cc94fa2, 0xc56bbf69, 511 | }, 512 | { 513 | 0x58d943503bb6748f, 0x419c6c8e88ac70f6, 0x586760cbf3d3d368, 0xb7e164979d5ccfc1, 514 | 0x12cb4230d26bf286, 0xf1bf910d44bd84cb, 0xb32c24c6a40272, 0xb7e164979d5ccfc1, 515 | 0x12cb4230d26bf286, 0xf1bf910d44bd84cb, 0xb32c24c6a40272, 0x11ed12e34c48c039, 516 | 0xb0c2538e51d0a6ac, 0x4269bb773e1d553a, 0xe35a9dbabd34867, 0xabecfb9b, 517 | }, 518 | { 519 | 0xdfff5989f5cfd9a1, 0xbcee2e7ea3a96f83, 0x681c7874adb29017, 0x3ff6c8ac7c36b63a, 520 | 0x48bc8831d849e326, 0x30b078e76b0214e2, 0x42954e6ad721b920, 0x3ff6c8ac7c36b63a, 521 | 0x48bc8831d849e326, 0x30b078e76b0214e2, 0x42954e6ad721b920, 0xf9aeb33d164b4472, 522 | 0x7b353b110831dbdc, 0x16f64c82f44ae17b, 0xb71244cc164b3b2b, 0x8de13255, 523 | }, 524 | { 525 | 0x7fb19eb1a496e8f5, 0xd49e5dfdb5c0833f, 0xc0d5d7b2f7c48dc7, 0x1a57313a32f22dde, 526 | 0x30af46e49850bf8b, 0xaa0fe8d12f808f83, 0x443e31d70873bb6b, 0x1a57313a32f22dde, 527 | 0x30af46e49850bf8b, 0xaa0fe8d12f808f83, 0x443e31d70873bb6b, 0xbbeb67c49c9fdc13, 528 | 0x18f1e2a88f59f9d5, 0xfb1b05038e5def11, 0xd0450b5ce4c39c52, 0xa98ee299, 529 | }, 530 | { 531 | 0x5dba5b0dadccdbaa, 0x4ba8da8ded87fcdc, 0xf693fdd25badf2f0, 0xe9029e6364286587, 532 | 0xae69f49ecb46726c, 0x18e002679217c405, 0xbd6d66e85332ae9f, 0xe9029e6364286587, 533 | 0xae69f49ecb46726c, 0x18e002679217c405, 0xbd6d66e85332ae9f, 0x6bf330b1c353dd2a, 534 | 0x74e9f2e71e3a4152, 0x3f85560b50f6c413, 0xd33a52a47eaed2b4, 0x3015f556, 535 | }, 536 | { 537 | 0x688bef4b135a6829, 0x8d31d82abcd54e8e, 0xf95f8a30d55036d7, 0x3d8c90e27aa2e147, 538 | 0x2ec937ce0aa236b4, 0x89b563996d3a0b78, 0x39b02413b23c3f08, 0x3d8c90e27aa2e147, 539 | 0x2ec937ce0aa236b4, 0x89b563996d3a0b78, 0x39b02413b23c3f08, 0x8d475a2e64faf2d2, 540 | 0x48567f7dca46ecaf, 0x254cda08d5f87a6d, 0xec6ae9f729c47039, 0x5a430e29, 541 | }, 542 | { 543 | 0xd8323be05433a412, 0x8d48fa2b2b76141d, 0x3d346f23978336a5, 0x4d50c7537562033f, 544 | 0x57dc7625b61dfe89, 0x9723a9f4c08ad93a, 0x5309596f48ab456b, 0x4d50c7537562033f, 545 | 0x57dc7625b61dfe89, 0x9723a9f4c08ad93a, 0x5309596f48ab456b, 0x7e453088019d220f, 546 | 0x8776067ba6ab9714, 0x67e1d06bd195de39, 0x74a1a32f8994b918, 0x2797add0, 547 | }, 548 | { 549 | 0x3b5404278a55a7fc, 0x23ca0b327c2d0a81, 0xa6d65329571c892c, 0x45504801e0e6066b, 550 | 0x86e6c6d6152a3d04, 0x4f3db1c53eca2952, 0xd24d69b3e9ef10f3, 0x45504801e0e6066b, 551 | 0x86e6c6d6152a3d04, 0x4f3db1c53eca2952, 0xd24d69b3e9ef10f3, 0x93a0de2219e66a70, 552 | 0x8932c7115ccb1f8a, 0x5ef503fdf2841a8c, 0x38064dd9efa80a41, 0x27d55016, 553 | }, 554 | { 555 | 0x2a96a3f96c5e9bbc, 0x8caf8566e212dda8, 0x904de559ca16e45e, 0xf13bc2d9c2fe222e, 556 | 0xbe4ccec9a6cdccfd, 0x37b2cbdd973a3ac9, 0x7b3223cd9c9497be, 0xf13bc2d9c2fe222e, 557 | 0xbe4ccec9a6cdccfd, 0x37b2cbdd973a3ac9, 0x7b3223cd9c9497be, 0xd5904440f376f889, 558 | 0x62b13187699c473c, 0x4751b89251f26726, 0x9500d84fa3a61ba8, 0x84945a82, 559 | }, 560 | { 561 | 0x22bebfdcc26d18ff, 0x4b4d8dcb10807ba1, 0x40265eee30c6b896, 0x3752b423073b119a, 562 | 0x377dc5eb7c662bdb, 0x2b9f07f93a6c25b9, 0x96f24ede2bdc0718, 0x3752b423073b119a, 563 | 0x377dc5eb7c662bdb, 0x2b9f07f93a6c25b9, 0x96f24ede2bdc0718, 0xf7699b12c31417bd, 564 | 0x17b366f401c58b2, 0xbf60188d5f437b37, 0x484436e56df17f04, 0x3ef7e224, 565 | }, 566 | { 567 | 0x627a2249ec6bbcc2, 0xc0578b462a46735a, 0x4974b8ee1c2d4f1f, 0xebdbb918eb6d837f, 568 | 0x8fb5f218dd84147c, 0xc77dd1f881df2c54, 0x62eac298ec226dc3, 0xebdbb918eb6d837f, 569 | 0x8fb5f218dd84147c, 0xc77dd1f881df2c54, 0x62eac298ec226dc3, 0x43eded83c4b60bd0, 570 | 0x9a0a403b5487503b, 0x25f305d9147f0bda, 0x3ad417f511bc1e64, 0x35ed8dc8, 571 | }, 572 | { 573 | 0x3abaf1667ba2f3e0, 0xee78476b5eeadc1, 0x7e56ac0a6ca4f3f4, 0xf1b9b413df9d79ed, 574 | 0xa7621b6fd02db503, 0xd92f7ba9928a4ffe, 0x53f56babdcae96a6, 0xf1b9b413df9d79ed, 575 | 0xa7621b6fd02db503, 0xd92f7ba9928a4ffe, 0x53f56babdcae96a6, 0x5302b89fc48713ab, 576 | 0xd03e3b04dbe7a2f2, 0xfa74ef8af6d376a7, 0x103c8cdea1050ef2, 0x6a75e43d, 577 | }, 578 | { 579 | 0x3931ac68c5f1b2c9, 0xefe3892363ab0fb0, 0x40b707268337cd36, 0xa53a6b64b1ac85c9, 580 | 0xd50e7f86ee1b832b, 0x7bab08fdd26ba0a4, 0x7587743c18fe2475, 0xa53a6b64b1ac85c9, 581 | 0xd50e7f86ee1b832b, 0x7bab08fdd26ba0a4, 0x7587743c18fe2475, 0xe3b5d5d490cf5761, 582 | 0xdfc053f7d065edd5, 0x42ffd8d5fb70129f, 0x599ca38677cccdc3, 0x235d9805, 583 | }, 584 | { 585 | 0xb98fb0606f416754, 0x46a6e5547ba99c1e, 0xc909d82112a8ed2, 0xdbfaae9642b3205a, 586 | 0xf676a1339402bcb9, 0xf4f12a5b1ac11f29, 0x7db8bad81249dee4, 0xdbfaae9642b3205a, 587 | 0xf676a1339402bcb9, 0xf4f12a5b1ac11f29, 0x7db8bad81249dee4, 0xb26e46f2da95922e, 588 | 0x2aaedd5e12e3c611, 0xa0e2d9082966074, 0xc64da8a167add63d, 0xf7d69572, 589 | }, 590 | { 591 | 0x7f7729a33e58fcc4, 0x2e4bc1e7a023ead4, 0xe707008ea7ca6222, 0x47418a71800334a0, 592 | 0xd10395d8fc64d8a4, 0x8257a30062cb66f, 0x6786f9b2dc1ff18a, 0x47418a71800334a0, 593 | 0xd10395d8fc64d8a4, 0x8257a30062cb66f, 0x6786f9b2dc1ff18a, 0x5633f437bb2f180f, 594 | 0xe5a3a405737d22d6, 0xca0ff1ef6f7f0b74, 0xd0ae600684b16df8, 0xbacd0199, 595 | }, 596 | { 597 | 0x42a0aa9ce82848b3, 0x57232730e6bee175, 0xf89bb3f370782031, 0xcaa33cf9b4f6619c, 598 | 0xb2c8648ad49c209f, 0x9e89ece0712db1c0, 0x101d8274a711a54b, 0xcaa33cf9b4f6619c, 599 | 0xb2c8648ad49c209f, 0x9e89ece0712db1c0, 0x101d8274a711a54b, 0x538e79f1e70135cd, 600 | 0xe1f5a76f983c844e, 0x653c082fd66088fc, 0x1b9c9b464b654958, 0xe428f50e, 601 | }, 602 | { 603 | 0x6b2c6d38408a4889, 0xde3ef6f68fb25885, 0x20754f456c203361, 0x941f5023c0c943f9, 604 | 0xdfdeb9564fd66f24, 0x2140cec706b9d406, 0x7b22429b131e9c72, 0x941f5023c0c943f9, 605 | 0xdfdeb9564fd66f24, 0x2140cec706b9d406, 0x7b22429b131e9c72, 0x94215c22eb940f45, 606 | 0xd28b9ed474f7249a, 0x6f25e88f2fbf9f56, 0xb6718f9e605b38ac, 0x81eaaad3, 607 | }, 608 | { 609 | 0x930380a3741e862a, 0x348d28638dc71658, 0x89dedcfd1654ea0d, 0x7e7f61684080106, 610 | 0x837ace9794582976, 0x5ac8ca76a357eb1b, 0x32b58308625661fb, 0x7e7f61684080106, 611 | 0x837ace9794582976, 0x5ac8ca76a357eb1b, 0x32b58308625661fb, 0xc09705c4572025d9, 612 | 0xf9187f6af0291303, 0x1c0edd8ee4b02538, 0xe6cb105daa0578a, 0xaddbd3e3, 613 | }, 614 | { 615 | 0x94808b5d2aa25f9a, 0xcec72968128195e0, 0xd9f4da2bdc1e130f, 0x272d8dd74f3006cc, 616 | 0xec6c2ad1ec03f554, 0x4ad276b249a5d5dd, 0x549a22a17c0cde12, 0x272d8dd74f3006cc, 617 | 0xec6c2ad1ec03f554, 0x4ad276b249a5d5dd, 0x549a22a17c0cde12, 0x602119cb824d7cde, 618 | 0xf4d3cef240ef35fa, 0xe889895e01911bc7, 0x785a7e5ac20e852b, 0xe66dbca0, 619 | }, 620 | { 621 | 0xb31abb08ae6e3d38, 0x9eb9a95cbd9e8223, 0x8019e79b7ee94ea9, 0x7b2271a7a3248e22, 622 | 0x3b4f700e5a0ba523, 0x8ebc520c227206fe, 0xda3f861490f5d291, 0x7b2271a7a3248e22, 623 | 0x3b4f700e5a0ba523, 0x8ebc520c227206fe, 0xda3f861490f5d291, 0xd08a689f9f3aa60e, 624 | 0x547c1b97a068661f, 0x4b15a67fa29172f0, 0xeaf40c085191d80f, 0xafe11fd5, 625 | }, 626 | { 627 | 0xdccb5534a893ea1a, 0xce71c398708c6131, 0xfe2396315457c164, 0x3f1229f4d0fd96fb, 628 | 0x33130aa5fa9d43f2, 0xe42693d5b34e63ab, 0x2f4ef2be67f62104, 0x3f1229f4d0fd96fb, 629 | 0x33130aa5fa9d43f2, 0xe42693d5b34e63ab, 0x2f4ef2be67f62104, 0x372e5153516e37b9, 630 | 0xaf9ec142ab12cc86, 0x777920c09345e359, 0xe7c4a383bef8adc6, 0xa71a406f, 631 | }, 632 | { 633 | 0x6369163565814de6, 0x8feb86fb38d08c2f, 0x4976933485cc9a20, 0x7d3e82d5ba29a90d, 634 | 0xd5983cc93a9d126a, 0x37e9dfd950e7b692, 0x80673be6a7888b87, 0x7d3e82d5ba29a90d, 635 | 0xd5983cc93a9d126a, 0x37e9dfd950e7b692, 0x80673be6a7888b87, 0x57f732dc600808bc, 636 | 0x59477199802cc78b, 0xf824810eb8f2c2de, 0xc4a3437f05b3b61c, 0x9d90eaf5, 637 | }, 638 | { 639 | 0xedee4ff253d9f9b3, 0x96ef76fb279ef0ad, 0xa4d204d179db2460, 0x1f3dcdfa513512d6, 640 | 0x4dc7ec07283117e4, 0x4438bae88ae28bf9, 0xaa7eae72c9244a0d, 0x1f3dcdfa513512d6, 641 | 0x4dc7ec07283117e4, 0x4438bae88ae28bf9, 0xaa7eae72c9244a0d, 0xb9aedc8d3ecc72df, 642 | 0xb75a8eb090a77d62, 0x6b15677f9cd91507, 0x51d8282cb3a9ddbf, 0x6665db10, 643 | }, 644 | { 645 | 0x941993df6e633214, 0x929bc1beca5b72c6, 0x141fc52b8d55572d, 0xb3b782ad308f21ed, 646 | 0x4f2676485041dee0, 0xbfe279aed5cb4bc8, 0x2a62508a467a22ff, 0xb3b782ad308f21ed, 647 | 0x4f2676485041dee0, 0xbfe279aed5cb4bc8, 0x2a62508a467a22ff, 0xe74d29eab742385d, 648 | 0x56b05cd90ecfc293, 0xc603728ea73f8844, 0x8638fcd21bc692c4, 0x9c977cbf, 649 | }, 650 | { 651 | 0x859838293f64cd4c, 0x484403b39d44ad79, 0xbf674e64d64b9339, 0x44d68afda9568f08, 652 | 0x478568ed51ca1d65, 0x679c204ad3d9e766, 0xb28e788878488dc1, 0x44d68afda9568f08, 653 | 0x478568ed51ca1d65, 0x679c204ad3d9e766, 0xb28e788878488dc1, 0xd001a84d3a84fae6, 654 | 0xd376958fe4cb913e, 0x17435277e36c86f0, 0x23657b263c347aa6, 0xee83ddd4, 655 | }, 656 | { 657 | 0xc19b5648e0d9f555, 0x328e47b2b7562993, 0xe756b92ba4bd6a51, 0xc3314e362764ddb8, 658 | 0x6481c084ee9ec6b5, 0xede23fb9a251771, 0xbd617f2643324590, 0xc3314e362764ddb8, 659 | 0x6481c084ee9ec6b5, 0xede23fb9a251771, 0xbd617f2643324590, 0xd2d30c9b95e030f5, 660 | 0x8a517312ffc5795e, 0x8b1f325033bd535e, 0x3ee6e867e03f2892, 0x26519cc, 661 | }, 662 | { 663 | 0xf963b63b9006c248, 0x9e9bf727ffaa00bc, 0xc73bacc75b917e3a, 0x2c6aa706129cc54c, 664 | 0x17a706f59a49f086, 0xc7c1eec455217145, 0x6adfdc6e07602d42, 0x2c6aa706129cc54c, 665 | 0x17a706f59a49f086, 0xc7c1eec455217145, 0x6adfdc6e07602d42, 0xfb75fca30d848dd2, 666 | 0x5228c9ed14653ed4, 0x953958910153b1a2, 0xa430103a24f42a5d, 0xa485a53f, 667 | }, 668 | { 669 | 0x6a8aa0852a8c1f3b, 0xc8f1e5e206a21016, 0x2aa554aed1ebb524, 0xfc3e3c322cd5d89b, 670 | 0xb7e3911dc2bd4ebb, 0xfcd6da5e5fae833a, 0x51ed3c41f87f9118, 0xfc3e3c322cd5d89b, 671 | 0xb7e3911dc2bd4ebb, 0xfcd6da5e5fae833a, 0x51ed3c41f87f9118, 0xf31750cbc19c420a, 672 | 0x186dab1abada1d86, 0xca7f88cb894b3cd7, 0x2859eeb1c373790c, 0xf62bc412, 673 | }, 674 | { 675 | 0x740428b4d45e5fb8, 0x4c95a4ce922cb0a5, 0xe99c3ba78feae796, 0x914f1ea2fdcebf5c, 676 | 0x9566453c07cd0601, 0x9841bf66d0462cd, 0x79140c1c18536aeb, 0x914f1ea2fdcebf5c, 677 | 0x9566453c07cd0601, 0x9841bf66d0462cd, 0x79140c1c18536aeb, 0xa963b930b05820c2, 678 | 0x6a7d9fa0c8c45153, 0x64214c40d07cf39b, 0x7057daf1d806c014, 0x8975a436, 679 | }, 680 | { 681 | 0x658b883b3a872b86, 0x2f0e303f0f64827a, 0x975337e23dc45e1, 0x99468a917986162b, 682 | 0x7b31434aac6e0af0, 0xf6915c1562c7d82f, 0xe4071d82a6dd71db, 0x99468a917986162b, 683 | 0x7b31434aac6e0af0, 0xf6915c1562c7d82f, 0xe4071d82a6dd71db, 0x5f5331f077b5d996, 684 | 0x7b314ba21b747a4f, 0x5a73cb9521da17f5, 0x12ed435fae286d86, 0x94ff7f41, 685 | }, 686 | { 687 | 0x6df0a977da5d27d4, 0x891dd0e7cb19508, 0xfd65434a0b71e680, 0x8799e4740e573c50, 688 | 0x9e739b52d0f341e8, 0xcdfd34ba7d7b03eb, 0x5061812ce6c88499, 0x8799e4740e573c50, 689 | 0x9e739b52d0f341e8, 0xcdfd34ba7d7b03eb, 0x5061812ce6c88499, 0x612b8d8f2411dc5c, 690 | 0x878bd883d29c7787, 0x47a846727182bb, 0xec4949508c8b3b9a, 0x760aa031, 691 | }, 692 | { 693 | 0xa900275464ae07ef, 0x11f2cfda34beb4a3, 0x9abf91e5a1c38e4, 0x8063d80ab26f3d6d, 694 | 0x4177b4b9b4f0393f, 0x6de42ba8672b9640, 0xd0bccdb72c51c18, 0x8063d80ab26f3d6d, 695 | 0x4177b4b9b4f0393f, 0x6de42ba8672b9640, 0xd0bccdb72c51c18, 0xaf3f611b7f22cf12, 696 | 0x3863c41492645755, 0x928c7a616a8f14f9, 0xa82c78eb2eadc58b, 0x3bda76df, 697 | }, 698 | { 699 | 0x810bc8aa0c40bcb0, 0x448a019568d01441, 0xf60ec52f60d3aeae, 0x52c44837aa6dfc77, 700 | 0x15d8d8fccdd6dc5b, 0x345b793ccfa93055, 0x932160fe802ca975, 0x52c44837aa6dfc77, 701 | 0x15d8d8fccdd6dc5b, 0x345b793ccfa93055, 0x932160fe802ca975, 0xa624b0dd93fc18cd, 702 | 0xd955b254c2037f1e, 0xe540533d370a664c, 0x2ba4ec12514e9d7, 0x498e2e65, 703 | }, 704 | { 705 | 0x22036327deb59ed7, 0xadc05ceb97026a02, 0x48bff0654262672b, 0xc791b313aba3f258, 706 | 0x443c7757a4727bee, 0xe30e4b2372171bdf, 0xf3db986c4156f3cb, 0xc791b313aba3f258, 707 | 0x443c7757a4727bee, 0xe30e4b2372171bdf, 0xf3db986c4156f3cb, 0xa939aefab97c6e15, 708 | 0xdbeb8acf1d5b0e6c, 0x1e0eab667a795bba, 0x80dd539902df4d50, 0xd38deb48, 709 | }, 710 | { 711 | 0x7d14dfa9772b00c8, 0x595735efc7eeaed7, 0x29872854f94c3507, 0xbc241579d8348401, 712 | 0x16dc832804d728f0, 0xe9cc71ae64e3f09e, 0xbef634bc978bac31, 0xbc241579d8348401, 713 | 0x16dc832804d728f0, 0xe9cc71ae64e3f09e, 0xbef634bc978bac31, 0x7f64b1fa2a9129e, 714 | 0x71d831bd530ac7f3, 0xc7ad0a8a6d5be6f1, 0x82a7d3a815c7aaab, 0x82b3fb6b, 715 | }, 716 | { 717 | 0x2d777cddb912675d, 0x278d7b10722a13f9, 0xf5c02bfb7cc078af, 0x4283001239888836, 718 | 0xf44ca39a6f79db89, 0xed186122d71bcc9f, 0x8620017ab5f3ba3b, 0x4283001239888836, 719 | 0xf44ca39a6f79db89, 0xed186122d71bcc9f, 0x8620017ab5f3ba3b, 0xe787472187f176c, 720 | 0x267e64c4728cf181, 0xf1ba4b3007c15e30, 0x8e3a75d5b02ecfc0, 0xe500e25f, 721 | }, 722 | { 723 | 0xf2ec98824e8aa613, 0x5eb7e3fb53fe3bed, 0x12c22860466e1dd4, 0x374dd4288e0b72e5, 724 | 0xff8916db706c0df4, 0xcb1a9e85de5e4b8d, 0xd4d12afb67a27659, 0x374dd4288e0b72e5, 725 | 0xff8916db706c0df4, 0xcb1a9e85de5e4b8d, 0xd4d12afb67a27659, 0xfeb69095d1ba175a, 726 | 0xe2003aab23a47fad, 0x8163a3ecab894b49, 0x46d356674ce041f6, 0xbd2bb07c, 727 | }, 728 | { 729 | 0x5e763988e21f487f, 0x24189de8065d8dc5, 0xd1519d2403b62aa0, 0x9136456740119815, 730 | 0x4d8ff7733b27eb83, 0xea3040bc0c717ef8, 0x7617ab400dfadbc, 0x9136456740119815, 731 | 0x4d8ff7733b27eb83, 0xea3040bc0c717ef8, 0x7617ab400dfadbc, 0xfb336770c10b17a1, 732 | 0x6123b68b5b31f151, 0x1e147d5f295eccf2, 0x9ecbb1333556f977, 0x3a2b431d, 733 | }, 734 | { 735 | 0x48949dc327bb96ad, 0xe1fd21636c5c50b4, 0x3f6eb7f13a8712b4, 0x14cf7f02dab0eee8, 736 | 0x6d01750605e89445, 0x4f1cf4006e613b78, 0x57c40c4db32bec3b, 0x14cf7f02dab0eee8, 737 | 0x6d01750605e89445, 0x4f1cf4006e613b78, 0x57c40c4db32bec3b, 0x1fde5a347f4a326e, 738 | 0xcb5a54308adb0e3f, 0x14994b2ba447a23c, 0x7067d0abb4257b68, 0x7322a83d, 739 | }, 740 | { 741 | 0xb7c4209fb24a85c5, 0xb35feb319c79ce10, 0xf0d3de191833b922, 0x570d62758ddf6397, 742 | 0x5e0204fb68a7b800, 0x4383a9236f8b5a2b, 0x7bc1a64641d803a4, 0x570d62758ddf6397, 743 | 0x5e0204fb68a7b800, 0x4383a9236f8b5a2b, 0x7bc1a64641d803a4, 0x5434d61285099f7a, 744 | 0xd49449aacdd5dd67, 0x97855ba0e9a7d75d, 0xda67328062f3a62f, 0xa645ca1c, 745 | }, 746 | { 747 | 0x9c9e5be0943d4b05, 0xb73dc69e45201cbb, 0xaab17180bfe5083d, 0xc738a77a9a55f0e2, 748 | 0x705221addedd81df, 0xfd9bd8d397abcfa3, 0x8ccf0004aa86b795, 0xc738a77a9a55f0e2, 749 | 0x705221addedd81df, 0xfd9bd8d397abcfa3, 0x8ccf0004aa86b795, 0x2bb5db2280068206, 750 | 0x8c22d29f307a01d, 0x274a22de02f473c8, 0xb8791870f4268182, 0x8909a45a, 751 | }, 752 | { 753 | 0x3898bca4dfd6638d, 0xf911ff35efef0167, 0x24bdf69e5091fc88, 0x9b82567ab6560796, 754 | 0x891b69462b41c224, 0x8eccc7e4f3af3b51, 0x381e54c3c8f1c7d0, 0x9b82567ab6560796, 755 | 0x891b69462b41c224, 0x8eccc7e4f3af3b51, 0x381e54c3c8f1c7d0, 0xc80fbc489a558a55, 756 | 0x1ba88e062a663af7, 0xaf7b1ef1c0116303, 0xbd20e1a5a6b1a0cd, 0xbd30074c, 757 | }, 758 | { 759 | 0x5b5d2557400e68e7, 0x98d610033574cee, 0xdfd08772ce385deb, 0x3c13e894365dc6c2, 760 | 0x26fc7bbcda3f0ef, 0xdbb71106cdbfea36, 0x785239a742c6d26d, 0x3c13e894365dc6c2, 761 | 0x26fc7bbcda3f0ef, 0xdbb71106cdbfea36, 0x785239a742c6d26d, 0xf810c415ae05b2f4, 762 | 0xbb9b9e7398526088, 0x70128f1bf830a32b, 0xbcc73f82b6410899, 0xc17cf001, 763 | }, 764 | { 765 | 0xa927ed8b2bf09bb6, 0x606e52f10ae94eca, 0x71c2203feb35a9ee, 0x6e65ec14a8fb565, 766 | 0x34bff6f2ee5a7f79, 0x2e329a5be2c011b, 0x73161c93331b14f9, 0x6e65ec14a8fb565, 767 | 0x34bff6f2ee5a7f79, 0x2e329a5be2c011b, 0x73161c93331b14f9, 0x15d13f2408aecf88, 768 | 0x9f5b61b8a4b55b31, 0x8fe25a43b296dba6, 0xbdad03b7300f284e, 0x26ffd25a, 769 | }, 770 | { 771 | 0x8d25746414aedf28, 0x34b1629d28b33d3a, 0x4d5394aea5f82d7b, 0x379f76458a3c8957, 772 | 0x79dd080f9843af77, 0xc46f0a7847f60c1d, 0xaf1579c5797703cc, 0x379f76458a3c8957, 773 | 0x79dd080f9843af77, 0xc46f0a7847f60c1d, 0xaf1579c5797703cc, 0x8b7d31f338755c14, 774 | 0x2eff97679512aaa8, 0xdf07d68e075179ed, 0xc8fa6c7a729e7f1f, 0xf1d8ce3c, 775 | }, 776 | { 777 | 0xb5bbdb73458712f2, 0x1ff887b3c2a35137, 0x7f7231f702d0ace9, 0x1e6f0910c3d25bd8, 778 | 0xad9e250862102467, 0x1c842a07abab30cd, 0xcd8124176bac01ac, 0x1e6f0910c3d25bd8, 779 | 0xad9e250862102467, 0x1c842a07abab30cd, 0xcd8124176bac01ac, 0xea6ebe7a79b67edc, 780 | 0x73f598ac9db26713, 0x4f4e72d7460b8fc, 0x365dc4b9fdf13f21, 0x3ee8fb17, 781 | }, 782 | { 783 | 0x3d32a26e3ab9d254, 0xfc4070574dc30d3a, 0xf02629579c2b27c9, 0xb1cf09b0184a4834, 784 | 0x5c03db48eb6cc159, 0xf18c7fcf34d1df47, 0xdfb043419ecf1fa9, 0xb1cf09b0184a4834, 785 | 0x5c03db48eb6cc159, 0xf18c7fcf34d1df47, 0xdfb043419ecf1fa9, 0xdcd78d13f9ca658f, 786 | 0x4355d408ffe8e49f, 0x81eefee908b593b4, 0x590c213c20e981a3, 0xa77acc2a, 787 | }, 788 | { 789 | 0x9371d3c35fa5e9a5, 0x42967cf4d01f30, 0x652d1eeae704145c, 0xceaf1a0d15234f15, 790 | 0x1450a54e45ba9b9, 0x65e9c1fd885aa932, 0x354d4bc034ba8cbe, 0xceaf1a0d15234f15, 791 | 0x1450a54e45ba9b9, 0x65e9c1fd885aa932, 0x354d4bc034ba8cbe, 0x8fd4ff484c08fb4b, 792 | 0xbf46749866f69ba0, 0xcf1c21ede82c9477, 0x4217548c43da109, 0xf4556dee, 793 | }, 794 | { 795 | 0xcbaa3cb8f64f54e0, 0x76c3b48ee5c08417, 0x9f7d24e87e61ce9, 0x85b8e53f22e19507, 796 | 0xbb57137739ca486b, 0xc77f131cca38f761, 0xc56ac3cf275be121, 0x85b8e53f22e19507, 797 | 0xbb57137739ca486b, 0xc77f131cca38f761, 0xc56ac3cf275be121, 0x9ec1a6c9109d2685, 798 | 0x3dad0922e76afdb0, 0xfd58cbf952958103, 0x7b04c908e78639a1, 0xde287a64, 799 | }, 800 | { 801 | 0xb2e23e8116c2ba9f, 0x7e4d9c0060101151, 0x3310da5e5028f367, 0xadc52dddb76f6e5e, 802 | 0x4aad4e925a962b68, 0x204b79b7f7168e64, 0xdf29ed6671c36952, 0xadc52dddb76f6e5e, 803 | 0x4aad4e925a962b68, 0x204b79b7f7168e64, 0xdf29ed6671c36952, 0xe02927cac396d210, 804 | 0x5d500e71742b638a, 0x5c9998af7f27b124, 0x3fba9a2573dc2f7, 0x878e55b9, 805 | }, 806 | { 807 | 0x8aa77f52d7868eb9, 0x4d55bd587584e6e2, 0xd2db37041f495f5, 0xce030d15b5fe2f4, 808 | 0x86b4a7a0780c2431, 0xee070a9ae5b51db7, 0xedc293d9595be5d8, 0xce030d15b5fe2f4, 809 | 0x86b4a7a0780c2431, 0xee070a9ae5b51db7, 0xedc293d9595be5d8, 0x3dfc5ec108260a2b, 810 | 0x8afe28c7123bf4e2, 0xda82ef38023a7a5f, 0x3e1f77b0174b77c3, 0x7648486, 811 | }, 812 | { 813 | 0x858fea922c7fe0c3, 0xcfe8326bf733bc6f, 0x4e5e2018cf8f7dfc, 0x64fd1bc011e5bab7, 814 | 0x5c9e858728015568, 0x97ac42c2b00b29b1, 0x7f89caf08c109aee, 0x64fd1bc011e5bab7, 815 | 0x5c9e858728015568, 0x97ac42c2b00b29b1, 0x7f89caf08c109aee, 0x9a8af34fd0e9dacf, 816 | 0xbbc54161aa1507e0, 0x7cda723ccbbfe5ee, 0x2c289d839fb93f58, 0x57ac0fb1, 817 | }, 818 | { 819 | 0x46ef25fdec8392b1, 0xe48d7b6d42a5cd35, 0x56a6fe1c175299ca, 0xfdfa836b41dcef62, 820 | 0x2f8db8030e847e1b, 0x5ba0a49ac4f9b0f8, 0xdae897ed3e3fce44, 0xfdfa836b41dcef62, 821 | 0x2f8db8030e847e1b, 0x5ba0a49ac4f9b0f8, 0xdae897ed3e3fce44, 0x9c432e31aef626e7, 822 | 0x9a36e1c6cd6e3dd, 0x5095a167c34d19d, 0xa70005cfa6babbea, 0xd01967ca, 823 | }, 824 | { 825 | 0x8d078f726b2df464, 0xb50ee71cdcabb299, 0xf4af300106f9c7ba, 0x7d222caae025158a, 826 | 0xcc028d5fd40241b9, 0xdd42515b639e6f97, 0xe08e86531a58f87f, 0x7d222caae025158a, 827 | 0xcc028d5fd40241b9, 0xdd42515b639e6f97, 0xe08e86531a58f87f, 0xd93612c835b37d7b, 828 | 0x91dd61729b2fa7f4, 0xba765a1bdda09db7, 0x55258b451b2b1297, 0x96ecdf74, 829 | }, 830 | { 831 | 0x35ea86e6960ca950, 0x34fe1fe234fc5c76, 0xa00207a3dc2a72b7, 0x80395e48739e1a67, 832 | 0x74a67d8f7f43c3d7, 0xdd2bdd1d62246c6e, 0xa1f44298ba80acf6, 0x80395e48739e1a67, 833 | 0x74a67d8f7f43c3d7, 0xdd2bdd1d62246c6e, 0xa1f44298ba80acf6, 0xad86d86c187bf38, 834 | 0x26feea1f2eee240d, 0xed7f1fd066b23897, 0xa768cf1e0fbb502, 0x779f5506, 835 | }, 836 | { 837 | 0x8aee9edbc15dd011, 0x51f5839dc8462695, 0xb2213e17c37dca2d, 0x133b299a939745c5, 838 | 0x796e2aac053f52b3, 0xe8d9fe1521a4a222, 0x819a8863e5d1c290, 0x133b299a939745c5, 839 | 0x796e2aac053f52b3, 0xe8d9fe1521a4a222, 0x819a8863e5d1c290, 0xc0737f0fe34d36ad, 840 | 0xe6d6d4a267a5cc31, 0x98300a7911674c23, 0xbef189661c257098, 0x3c94c2de, 841 | }, 842 | { 843 | 0xc3e142ba98432dda, 0x911d060cab126188, 0xb753fbfa8365b844, 0xfd1a9ba5e71b08a2, 844 | 0x7ac0dc2ed7778533, 0xb543161ff177188a, 0x492fc08a6186f3f4, 0xfd1a9ba5e71b08a2, 845 | 0x7ac0dc2ed7778533, 0xb543161ff177188a, 0x492fc08a6186f3f4, 0xfc4745f516afd3b6, 846 | 0x88c30370a53080e, 0x65a1bb34abc465e2, 0xabbd14662911c8b3, 0x39f98faf, 847 | }, 848 | { 849 | 0x123ba6b99c8cd8db, 0x448e582672ee07c4, 0xcebe379292db9e65, 0x938f5bbab544d3d6, 850 | 0xd2a95f9f2d376d73, 0x68b2f16149e81aa3, 0xad7e32f82d86c79d, 0x938f5bbab544d3d6, 851 | 0xd2a95f9f2d376d73, 0x68b2f16149e81aa3, 0xad7e32f82d86c79d, 0x4574015ae8626ce2, 852 | 0x455aa6137386a582, 0x658ad2542e8ec20, 0xe31d7be2ca35d00, 0x7af31199, 853 | }, 854 | { 855 | 0xba87acef79d14f53, 0xb3e0fcae63a11558, 0xd5ac313a593a9f45, 0xeea5f5a9f74af591, 856 | 0x578710bcc36fbea2, 0x7a8393432188931d, 0x705cfc5ec7cc172, 0xeea5f5a9f74af591, 857 | 0x578710bcc36fbea2, 0x7a8393432188931d, 0x705cfc5ec7cc172, 0xda85ebe5fc427976, 858 | 0xbfa5c7a454df54c8, 0x4632b72a81bf66d2, 0x5dd72877db539ee2, 0xe341a9d6, 859 | }, 860 | { 861 | 0xbcd3957d5717dc3, 0x2da746741b03a007, 0x873816f4b1ece472, 0x2b826f1a2c08c289, 862 | 0xda50f56863b55e74, 0xb18712f6b3eed83b, 0xbdc7cc05ab4c685f, 0x2b826f1a2c08c289, 863 | 0xda50f56863b55e74, 0xb18712f6b3eed83b, 0xbdc7cc05ab4c685f, 0x9e45fb833d1b0af, 864 | 0xd7213081db29d82e, 0xd2a6b6c6a09ed55e, 0x98a7686cba323ca9, 0xca24aeeb, 865 | }, 866 | { 867 | 0x61442ff55609168e, 0x6447c5fc76e8c9cf, 0x6a846de83ae15728, 0xeffc2663cffc777f, 868 | 0x93214f8f463afbed, 0xa156ef06066f4e4e, 0xa407b6ed8769d51e, 0xeffc2663cffc777f, 869 | 0x93214f8f463afbed, 0xa156ef06066f4e4e, 0xa407b6ed8769d51e, 0xbb2f9ed29745c02a, 870 | 0x981eecd435b36ad9, 0x461a5a05fb9cdff4, 0xbd6cb2a87b9f910c, 0xb2252b57, 871 | }, 872 | { 873 | 0xdbe4b1b2d174757f, 0x506512da18712656, 0x6857f3e0b8dd95f, 0x5a4fc2728a9bb671, 874 | 0xebb971522ec38759, 0x1a5a093e6cf1f72b, 0x729b057fe784f504, 0x5a4fc2728a9bb671, 875 | 0xebb971522ec38759, 0x1a5a093e6cf1f72b, 0x729b057fe784f504, 0x71fcbf42a767f9cf, 876 | 0x114cfe772da6cdd, 0x60cdf9cb629d9d7a, 0xe270d10ad088b24e, 0x72c81da1, 877 | }, 878 | { 879 | 0x531e8e77b363161c, 0xeece0b43e2dae030, 0x8294b82c78f34ed1, 0xe777b1fd580582f2, 880 | 0x7b880f58da112699, 0x562c6b189a6333f4, 0x139d64f88a611d4, 0xe777b1fd580582f2, 881 | 0x7b880f58da112699, 0x562c6b189a6333f4, 0x139d64f88a611d4, 0x53d8ef17eda64fa4, 882 | 0xbf3eded14dc60a04, 0x2b5c559cf5ec07c5, 0x8895f7339d03a48a, 0x6b9fce95, 883 | }, 884 | { 885 | 0xf71e9c926d711e2b, 0xd77af2853a4ceaa1, 0x9aa0d6d76a36fae7, 0xdd16cd0fbc08393, 886 | 0x29a414a5d8c58962, 0x72793d8d1022b5b2, 0x2e8e69cf7cbffdf0, 0xdd16cd0fbc08393, 887 | 0x29a414a5d8c58962, 0x72793d8d1022b5b2, 0x2e8e69cf7cbffdf0, 0x3721c0473aa99c9a, 888 | 0x1cff4ed9c31cd91c, 0x4990735033cc482b, 0x7fdf8c701c72f577, 0x19399857, 889 | }, 890 | { 891 | 0xcb20ac28f52df368, 0xe6705ee7880996de, 0x9b665cc3ec6972f2, 0x4260e8c254e9924b, 892 | 0xf197a6eb4591572d, 0x8e867ff0fb7ab27c, 0xf95502fb503efaf3, 0x4260e8c254e9924b, 893 | 0xf197a6eb4591572d, 0x8e867ff0fb7ab27c, 0xf95502fb503efaf3, 0x30c41876b08e3e22, 894 | 0x958e2419e3cd22f4, 0xf0f3aa1fe119a107, 0x481662310a379100, 0x3c57a994, 895 | }, 896 | { 897 | 0xe4a794b4acb94b55, 0x89795358057b661b, 0x9c4cdcec176d7a70, 0x4890a83ee435bc8b, 898 | 0xd8c1c00fceb00914, 0x9e7111ba234f900f, 0xeb8dbab364d8b604, 0x4890a83ee435bc8b, 899 | 0xd8c1c00fceb00914, 0x9e7111ba234f900f, 0xeb8dbab364d8b604, 0xb3261452963eebb, 900 | 0x6cf94b02792c4f95, 0xd88fa815ef1e8fc, 0x2d687af66604c73, 0xc053e729, 901 | }, 902 | { 903 | 0xcb942e91443e7208, 0xe335de8125567c2a, 0xd4d74d268b86df1f, 0x8ba0fdd2ffc8b239, 904 | 0xf413b366c1ffe02f, 0xc05b2717c59a8a28, 0x981188eab4fcc8fb, 0x8ba0fdd2ffc8b239, 905 | 0xf413b366c1ffe02f, 0xc05b2717c59a8a28, 0x981188eab4fcc8fb, 0xe563f49a1d9072ba, 906 | 0x3c6a3aa4a26367dc, 0xba0db13448653f34, 0x31065d756074d7d6, 0x51cbbba7, 907 | }, 908 | { 909 | 0xecca7563c203f7ba, 0x177ae2423ef34bb2, 0xf60b7243400c5731, 0xcf1edbfe7330e94e, 910 | 0x881945906bcb3cc6, 0x4acf0293244855da, 0x65ae042c1c2a28c2, 0xcf1edbfe7330e94e, 911 | 0x881945906bcb3cc6, 0x4acf0293244855da, 0x65ae042c1c2a28c2, 0xb25fa0a1cab33559, 912 | 0xd98e8daa28124131, 0xfce17f50b9c351b3, 0x3f995ccf7386864b, 0x1acde79a, 913 | }, 914 | { 915 | 0x1652cb940177c8b5, 0x8c4fe7d85d2a6d6d, 0xf6216ad097e54e72, 0xf6521b912b368ae6, 916 | 0xa9fe4eff81d03e73, 0xd6f623629f80d1a3, 0x2b9604f32cb7dc34, 0xf6521b912b368ae6, 917 | 0xa9fe4eff81d03e73, 0xd6f623629f80d1a3, 0x2b9604f32cb7dc34, 0x2a43d84dcf59c7e2, 918 | 0xd0a197c70c5dae0b, 0x6e84d4bbc71d76a0, 0xc7e94620378c6cb2, 0x2d160d13, 919 | }, 920 | { 921 | 0x31fed0fc04c13ce8, 0x3d5d03dbf7ff240a, 0x727c5c9b51581203, 0x6b5ffc1f54fecb29, 922 | 0xa8e8e7ad5b9a21d9, 0xc4d5a32cd6aac22d, 0xd7e274ad22d4a79a, 0x6b5ffc1f54fecb29, 923 | 0xa8e8e7ad5b9a21d9, 0xc4d5a32cd6aac22d, 0xd7e274ad22d4a79a, 0x368841ea5731a112, 924 | 0xfeaf7bc2e73ca48f, 0x636fb272e9ea1f6, 0x5d9cb7580c3f6207, 0x787f5801, 925 | }, 926 | { 927 | 0xe7b668947590b9b3, 0xbaa41ad32938d3fa, 0xabcbc8d4ca4b39e4, 0x381ee1b7ea534f4e, 928 | 0xda3759828e3de429, 0x3e015d76729f9955, 0xcbbec51a6485fbde, 0x381ee1b7ea534f4e, 929 | 0xda3759828e3de429, 0x3e015d76729f9955, 0xcbbec51a6485fbde, 0x9b86605281f20727, 930 | 0xfc6fcf508676982a, 0x3b135f7a813a1040, 0xd3a4706bea1db9c9, 0xc9629828, 931 | }, 932 | { 933 | 0x1de2119923e8ef3c, 0x6ab27c096cf2fe14, 0x8c3658edca958891, 0x4cc8ed3ada5f0f2, 934 | 0x4a496b77c1f1c04e, 0x9085b0a862084201, 0xa1894bde9e3dee21, 0x4cc8ed3ada5f0f2, 935 | 0x4a496b77c1f1c04e, 0x9085b0a862084201, 0xa1894bde9e3dee21, 0x367fb472dc5b277d, 936 | 0x7d39ccca16fc6745, 0x763f988d70db9106, 0xa8b66f7fecb70f02, 0xbe139231, 937 | }, 938 | { 939 | 0x1269df1e69e14fa7, 0x992f9d58ac5041b7, 0xe97fcf695a7cbbb4, 0xe5d0549802d15008, 940 | 0x424c134ecd0db834, 0x6fc44fd91be15c6c, 0xa1a5ef95d50e537d, 0xe5d0549802d15008, 941 | 0x424c134ecd0db834, 0x6fc44fd91be15c6c, 0xa1a5ef95d50e537d, 0xd1e3daf5d05f5308, 942 | 0x4c7f81600eaa1327, 0x109d1b8d1f9d0d2b, 0x871e8699e0aeb862, 0x7df699ef, 943 | }, 944 | { 945 | 0x820826d7aba567ff, 0x1f73d28e036a52f3, 0x41c4c5a73f3b0893, 0xaa0d74d4a98db89b, 946 | 0x36fd486d07c56e1d, 0xd0ad23cbb6660d8a, 0x1264a84665b35e19, 0xaa0d74d4a98db89b, 947 | 0x36fd486d07c56e1d, 0xd0ad23cbb6660d8a, 0x1264a84665b35e19, 0x789682bf7d781b33, 948 | 0x6bfa6abd2fb5722d, 0x6779cb3623d33900, 0x435ca5214e1ee5f0, 0x8ce6b96d, 949 | }, 950 | { 951 | 0xffe0547e4923cef9, 0x3534ed49b9da5b02, 0x548a273700fba03d, 0x28ac84ca70958f7e, 952 | 0xd8ae575a68faa731, 0x2aaaee9b9dcffd4c, 0x6c7faab5c285c6da, 0x28ac84ca70958f7e, 953 | 0xd8ae575a68faa731, 0x2aaaee9b9dcffd4c, 0x6c7faab5c285c6da, 0x45d94235f99ba78f, 954 | 0xab5ea16f39497f5b, 0xfb4d6c86fccbdca3, 0x8104e6310a5fd2c7, 0x6f9ed99c, 955 | }, 956 | { 957 | 0x72da8d1b11d8bc8b, 0xba94b56b91b681c6, 0x4e8cc51bd9b0fc8c, 0x43505ed133be672a, 958 | 0xe8f2f9d973c2774e, 0x677b9b9c7cad6d97, 0x4e1f5d56ef17b906, 0x43505ed133be672a, 959 | 0xe8f2f9d973c2774e, 0x677b9b9c7cad6d97, 0x4e1f5d56ef17b906, 0xeea3a6038f983767, 960 | 0x87109f077f86db01, 0xecc1ca41f74d61cc, 0x34a87e86e83bed17, 0xe0244796, 961 | }, 962 | { 963 | 0xd62ab4e3f88fc797, 0xea86c7aeb6283ae4, 0xb5b93e09a7fe465, 0x4344a1a0134afe2, 964 | 0xff5c17f02b62341d, 0x3214c6a587ce4644, 0xa905e7ed0629d05c, 0x4344a1a0134afe2, 965 | 0xff5c17f02b62341d, 0x3214c6a587ce4644, 0xa905e7ed0629d05c, 0xb5c72690cd716e82, 966 | 0x7c6097649e6ebe7b, 0x7ceee8c6e56a4dcd, 0x80ca849dc53eb9e4, 0x4ccf7e75, 967 | }, 968 | { 969 | 0xd0f06c28c7b36823, 0x1008cb0874de4bb8, 0xd6c7ff816c7a737b, 0x489b697fe30aa65f, 970 | 0x4da0fb621fdc7817, 0xdc43583b82c58107, 0x4b0261debdec3cd6, 0x489b697fe30aa65f, 971 | 0x4da0fb621fdc7817, 0xdc43583b82c58107, 0x4b0261debdec3cd6, 0xa9748d7b6c0e016c, 972 | 0x7e8828f7ba4b034b, 0xda0fa54348a2512a, 0xebf9745c0962f9ad, 0x915cef86, 973 | }, 974 | { 975 | 0x99b7042460d72ec6, 0x2a53e5e2b8e795c2, 0x53a78132d9e1b3e3, 0xc043e67e6fc64118, 976 | 0xff0abfe926d844d3, 0xf2a9fe5db2e910fe, 0xce352cdc84a964dd, 0xc043e67e6fc64118, 977 | 0xff0abfe926d844d3, 0xf2a9fe5db2e910fe, 0xce352cdc84a964dd, 0xb89bc028aa5e6063, 978 | 0xa354e7fdac04459c, 0x68d6547e6e980189, 0xc968dddfd573773e, 0x5cb59482, 979 | }, 980 | { 981 | 0x4f4dfcfc0ec2bae5, 0x841233148268a1b8, 0x9248a76ab8be0d3, 0x334c5a25b5903a8c, 982 | 0x4c94fef443122128, 0x743e7d8454655c40, 0x1ab1e6d1452ae2cd, 0x334c5a25b5903a8c, 983 | 0x4c94fef443122128, 0x743e7d8454655c40, 0x1ab1e6d1452ae2cd, 0xfec766de4a8e476c, 984 | 0xcc0929da9567e71b, 0x5f9ef5b5f150c35a, 0x87659cabd649768f, 0x6ca3f532, 985 | }, 986 | { 987 | 0xfe86bf9d4422b9ae, 0xebce89c90641ef9c, 0x1c84e2292c0b5659, 0x8bde625a10a8c50d, 988 | 0xeb8271ded1f79a0b, 0x14dc6844f0de7a3c, 0xf85b2f9541e7e6da, 0x8bde625a10a8c50d, 989 | 0xeb8271ded1f79a0b, 0x14dc6844f0de7a3c, 0xf85b2f9541e7e6da, 0x2fe22cfd1683b961, 990 | 0xea1d75c5b7aa01ca, 0x9eef60a44876bb95, 0x950c818e505c6f7f, 0xe24f3859, 991 | }, 992 | { 993 | 0xa90d81060932dbb0, 0x8acfaa88c5fbe92b, 0x7c6f3447e90f7f3f, 0xdd52fc14c8dd3143, 994 | 0x1bc7508516e40628, 0x3059730266ade626, 0xffa526822f391c2, 0xdd52fc14c8dd3143, 995 | 0x1bc7508516e40628, 0x3059730266ade626, 0xffa526822f391c2, 0xe25232d7afc8a406, 996 | 0xd2b8a5a3f3b5f670, 0x6630f33edb7dfe32, 0xc71250ba68c4ea86, 0xadf5a9c7, 997 | }, 998 | { 999 | 0x17938a1b0e7f5952, 0x22cadd2f56f8a4be, 0x84b0d1183d5ed7c1, 0xc1336b92fef91bf6, 1000 | 0x80332a3945f33fa9, 0xa0f68b86f726ff92, 0xa3db5282cf5f4c0b, 0xc1336b92fef91bf6, 1001 | 0x80332a3945f33fa9, 0xa0f68b86f726ff92, 0xa3db5282cf5f4c0b, 0x82640b6fc4916607, 1002 | 0x2dc2a3aa1a894175, 0x8b4c852bdee7cc9, 0x10b9d0a08b55ff83, 0x32264b75, 1003 | }, 1004 | { 1005 | 0xde9e0cb0e16f6e6d, 0x238e6283aa4f6594, 0x4fb9c914c2f0a13b, 0x497cb912b670f3b, 1006 | 0xd963a3f02ff4a5b6, 0x4fccefae11b50391, 0x42ba47db3f7672f, 0x497cb912b670f3b, 1007 | 0xd963a3f02ff4a5b6, 0x4fccefae11b50391, 0x42ba47db3f7672f, 0x1d6b655a1889feef, 1008 | 0x5f319abf8fafa19f, 0x715c2e49deb14620, 0x8d9153082ecdcea4, 0xa64b3376, 1009 | }, 1010 | { 1011 | 0x6d4b876d9b146d1a, 0xaab2d64ce8f26739, 0xd315f93600e83fe5, 0x2fe9fabdbe7fdd4, 1012 | 0x755db249a2d81a69, 0xf27929f360446d71, 0x79a1bf957c0c1b92, 0x2fe9fabdbe7fdd4, 1013 | 0x755db249a2d81a69, 0xf27929f360446d71, 0x79a1bf957c0c1b92, 0x3c8a28d4c936c9cd, 1014 | 0xdf0d3d13b2c6a902, 0xc76702dd97cd2edd, 0x1aa220f7be16517, 0xd33890e, 1015 | }, 1016 | { 1017 | 0xe698fa3f54e6ea22, 0xbd28e20e7455358c, 0x9ace161f6ea76e66, 0xd53fb7e3c93a9e4, 1018 | 0x737ae71b051bf108, 0x7ac71feb84c2df42, 0x3d8075cd293a15b4, 0xd53fb7e3c93a9e4, 1019 | 0x737ae71b051bf108, 0x7ac71feb84c2df42, 0x3d8075cd293a15b4, 0xbf8cee5e095d8a7c, 1020 | 0xe7086b3c7608143a, 0xe55b0c2fa938d70c, 0xfffb5f58e643649c, 0x926d4b63, 1021 | }, 1022 | { 1023 | 0x7bc0deed4fb349f7, 0x1771aff25dc722fa, 0x19ff0644d9681917, 0xcf7d7f25bd70cd2c, 1024 | 0x9464ed9baeb41b4f, 0xb9064f5c3cb11b71, 0x237e39229b012b20, 0xcf7d7f25bd70cd2c, 1025 | 0x9464ed9baeb41b4f, 0xb9064f5c3cb11b71, 0x237e39229b012b20, 0xdd54d3f5d982dffe, 1026 | 0x7fc7562dbfc81dbf, 0x5b0dd1924f70945, 0xf1760537d8261135, 0xd51ba539, 1027 | }, 1028 | { 1029 | 0xdb4b15e88533f622, 0x256d6d2419b41ce9, 0x9d7c5378396765d5, 0x9040e5b936b8661b, 1030 | 0x276e08fa53ac27fd, 0x8c944d39c2bdd2cc, 0xe2514c9802a5743c, 0x9040e5b936b8661b, 1031 | 0x276e08fa53ac27fd, 0x8c944d39c2bdd2cc, 0xe2514c9802a5743c, 0xe82107b11ac90386, 1032 | 0x7d6a22bc35055e6, 0xfd6ea9d1c438d8ae, 0xbe6015149e981553, 0x7f37636d, 1033 | }, 1034 | { 1035 | 0x922834735e86ecb2, 0x363382685b88328e, 0xe9c92960d7144630, 0x8431b1bfd0a2379c, 1036 | 0x90383913aea283f9, 0xa6163831eb4924d2, 0x5f3921b4f9084aee, 0x8431b1bfd0a2379c, 1037 | 0x90383913aea283f9, 0xa6163831eb4924d2, 0x5f3921b4f9084aee, 0x7a70061a1473e579, 1038 | 0x5b19d80dcd2c6331, 0x6196b97931faad27, 0x869bf6828e237c3f, 0xb98026c0, 1039 | }, 1040 | { 1041 | 0x30f1d72c812f1eb8, 0xb567cd4a69cd8989, 0x820b6c992a51f0bc, 0xc54677a80367125e, 1042 | 0x3204fbdba462e606, 0x8563278afc9eae69, 0x262147dd4bf7e566, 0xc54677a80367125e, 1043 | 0x3204fbdba462e606, 0x8563278afc9eae69, 0x262147dd4bf7e566, 0x2178b63e7ee2d230, 1044 | 0xe9c61ad81f5bff26, 0x9af7a81b3c501eca, 0x44104a3859f0238f, 0xb877767e, 1045 | }, 1046 | { 1047 | 0x168884267f3817e9, 0x5b376e050f637645, 0x1c18314abd34497a, 0x9598f6ab0683fcc2, 1048 | 0x1c805abf7b80e1ee, 0xdec9ac42ee0d0f32, 0x8cd72e3912d24663, 0x9598f6ab0683fcc2, 1049 | 0x1c805abf7b80e1ee, 0xdec9ac42ee0d0f32, 0x8cd72e3912d24663, 0x1f025d405f1c1d87, 1050 | 0xbf7b6221e1668f8f, 0x52316f64e692dbb0, 0x7bf43df61ec51b39, 0xaefae77, 1051 | }, 1052 | { 1053 | 0x82e78596ee3e56a7, 0x25697d9c87f30d98, 0x7600a8342834924d, 0x6ba372f4b7ab268b, 1054 | 0x8c3237cf1fe243df, 0x3833fc51012903df, 0x8e31310108c5683f, 0x6ba372f4b7ab268b, 1055 | 0x8c3237cf1fe243df, 0x3833fc51012903df, 0x8e31310108c5683f, 0x126593715c2de429, 1056 | 0x48ca8f35a3f54b90, 0xb9322b632f4f8b0, 0x926bb169b7337693, 0xf686911, 1057 | }, 1058 | { 1059 | 0xaa2d6cf22e3cc252, 0x9b4dec4f5e179f16, 0x76fb0fba1d99a99a, 0x9a62af3dbba140da, 1060 | 0x27857ea044e9dfc1, 0x33abce9da2272647, 0xb22a7993aaf32556, 0x9a62af3dbba140da, 1061 | 0x27857ea044e9dfc1, 0x33abce9da2272647, 0xb22a7993aaf32556, 0xbf8f88f8019bedf0, 1062 | 0xed2d7f01fb273905, 0x6b45f15901b481cd, 0xf88ebb413ba6a8d5, 0x3deadf12, 1063 | }, 1064 | { 1065 | 0x7bf5ffd7f69385c7, 0xfc077b1d8bc82879, 0x9c04e36f9ed83a24, 0x82065c62e6582188, 1066 | 0x8ef787fd356f5e43, 0x2922e53e36e17dfa, 0x9805f223d385010b, 0x82065c62e6582188, 1067 | 0x8ef787fd356f5e43, 0x2922e53e36e17dfa, 0x9805f223d385010b, 0x692154f3491b787d, 1068 | 0xe7e64700e414fbf, 0x757d4d4ab65069a0, 0xcd029446a8e348e2, 0xccf02a4e, 1069 | }, 1070 | { 1071 | 0xe89c8ff9f9c6e34b, 0xf54c0f669a49f6c4, 0xfc3e46f5d846adef, 0x22f2aa3df2221cc, 1072 | 0xf66fea90f5d62174, 0xb75defaeaa1dd2a7, 0x9b994cd9a7214fd5, 0x22f2aa3df2221cc, 1073 | 0xf66fea90f5d62174, 0xb75defaeaa1dd2a7, 0x9b994cd9a7214fd5, 0xfac675a31804b773, 1074 | 0x98bcb3b820c50fc6, 0xe14af64d28cf0885, 0x27466fbd2b360eb5, 0x176c1722, 1075 | }, 1076 | { 1077 | 0xa18fbcdccd11e1f4, 0x8248216751dfd65e, 0x40c089f208d89d7c, 0x229b79ab69ae97d, 1078 | 0xa87aabc2ec26e582, 0xbe2b053721eb26d2, 0x10febd7f0c3d6fcb, 0x229b79ab69ae97d, 1079 | 0xa87aabc2ec26e582, 0xbe2b053721eb26d2, 0x10febd7f0c3d6fcb, 0x9cc5b9b2f6e3bf7b, 1080 | 0x655d8495fe624a86, 0x6381a9f3d1f2bd7e, 0x79ebabbfc25c83e2, 0x26f82ad, 1081 | }, 1082 | { 1083 | 0x2d54f40cc4088b17, 0x59d15633b0cd1399, 0xa8cc04bb1bffd15b, 0xd332cdb073d8dc46, 1084 | 0x272c56466868cb46, 0x7e7fcbe35ca6c3f3, 0xee8f51e5a70399d4, 0xd332cdb073d8dc46, 1085 | 0x272c56466868cb46, 0x7e7fcbe35ca6c3f3, 0xee8f51e5a70399d4, 0x16737a9c7581fe7b, 1086 | 0xed04bf52f4b75dcb, 0x9707ffb36bd30c1a, 0x1390f236fdc0de3e, 0xb5244f42, 1087 | }, 1088 | { 1089 | 0x69276946cb4e87c7, 0x62bdbe6183be6fa9, 0x3ba9773dac442a1a, 0x702e2afc7f5a1825, 1090 | 0x8c49b11ea8151fdc, 0xcaf3fef61f5a86fa, 0xef0b2ee8649d7272, 0x702e2afc7f5a1825, 1091 | 0x8c49b11ea8151fdc, 0xcaf3fef61f5a86fa, 0xef0b2ee8649d7272, 0x9e34a4e08d9441e1, 1092 | 0x7bdc0cd64d5af533, 0xa926b14d99e3d868, 0xfca923a17788cce4, 0x49a689e5, 1093 | }, 1094 | { 1095 | 0x668174a3f443df1d, 0x407299392da1ce86, 0xc2a3f7d7f2c5be28, 0xa590b202a7a5807b, 1096 | 0x968d2593f7ccb54e, 0x9dd8d669e3e95dec, 0xee0cc5dd58b6e93a, 0xa590b202a7a5807b, 1097 | 0x968d2593f7ccb54e, 0x9dd8d669e3e95dec, 0xee0cc5dd58b6e93a, 0xac65d5a9466fb483, 1098 | 0x221be538b2c9d806, 0x5cbe9441784f9fd9, 0xd4c7d5d6e3c122b8, 0x59fcdd3, 1099 | }, 1100 | { 1101 | 0x5e29be847bd5046, 0xb561c7f19c8f80c3, 0x5e5abd5021ccaeaf, 0x7432d63888e0c306, 1102 | 0x74bbceeed479cb71, 0x6471586599575fdf, 0x6a859ad23365cba2, 0x7432d63888e0c306, 1103 | 0x74bbceeed479cb71, 0x6471586599575fdf, 0x6a859ad23365cba2, 0xf9ceec84acd18dcc, 1104 | 0x74a242ff1907437c, 0xf70890194e1ee913, 0x777dfcb4bb01f0ba, 0x4f4b04e9, 1105 | }, 1106 | { 1107 | 0xcd0d79f2164da014, 0x4c386bb5c5d6ca0c, 0x8e771b03647c3b63, 0x69db23875cb0b715, 1108 | 0xada8dd91504ae37f, 0x46bf18dbf045ed6a, 0xe1b5f67b0645ab63, 0x69db23875cb0b715, 1109 | 0xada8dd91504ae37f, 0x46bf18dbf045ed6a, 0xe1b5f67b0645ab63, 0x877be8f5dcddff4, 1110 | 0x6d471b5f9ca2e2d1, 0x802c86d6f495b9bb, 0xa1f9b9b22b3be704, 0x8b00f891, 1111 | }, 1112 | { 1113 | 0xe0e6fc0b1628af1d, 0x29be5fb4c27a2949, 0x1c3f781a604d3630, 0xc4af7faf883033aa, 1114 | 0x9bd296c4e9453cac, 0xca45426c1f7e33f9, 0xa6bbdcf7074d40c5, 0xc4af7faf883033aa, 1115 | 0x9bd296c4e9453cac, 0xca45426c1f7e33f9, 0xa6bbdcf7074d40c5, 0xe13a005d7142733b, 1116 | 0xc02b7925c5eeefaf, 0xd39119a60441e2d5, 0x3c24c710df8f4d43, 0x16e114f3, 1117 | }, 1118 | { 1119 | 0x2058927664adfd93, 0x6e8f968c7963baa5, 0xaf3dced6fff7c394, 0x42e34cf3d53c7876, 1120 | 0x9cddbb26424dc5e, 0x64f6340a6d8eddad, 0x2196e488eb2a3a4b, 0x42e34cf3d53c7876, 1121 | 0x9cddbb26424dc5e, 0x64f6340a6d8eddad, 0x2196e488eb2a3a4b, 0xc9e9da25911a16fd, 1122 | 0xe21b4683f3e196a8, 0xcb80bf1a4c6fdbb4, 0x53792e9b3c3e67f8, 0xd6b6dadc, 1123 | }, 1124 | { 1125 | 0xdc107285fd8e1af7, 0xa8641a0609321f3f, 0xdb06e89ffdc54466, 0xbcc7a81ed5432429, 1126 | 0xb6d7bdc6ad2e81f1, 0x93605ec471aa37db, 0xa2a73f8a85a8e397, 0xbcc7a81ed5432429, 1127 | 0xb6d7bdc6ad2e81f1, 0x93605ec471aa37db, 0xa2a73f8a85a8e397, 0x10a012b8ca7ac24b, 1128 | 0xaac5fd63351595cf, 0x5bb4c648a226dea0, 0x9d11ecb2b5c05c5f, 0x897e20ac, 1129 | }, 1130 | { 1131 | 0xfbba1afe2e3280f1, 0x755a5f392f07fce, 0x9e44a9a15402809a, 0x6226a32e25099848, 1132 | 0xea895661ecf53004, 0x4d7e0158db2228b9, 0xe5a7d82922f69842, 0x6226a32e25099848, 1133 | 0xea895661ecf53004, 0x4d7e0158db2228b9, 0xe5a7d82922f69842, 0x2cea7713b69840ca, 1134 | 0x18de7b9ae938375b, 0xf127cca08f3cc665, 0xb1c22d727665ad2, 0xf996e05d, 1135 | }, 1136 | { 1137 | 0xbfa10785ddc1011b, 0xb6e1c4d2f670f7de, 0x517d95604e4fcc1f, 0xca6552a0dfb82c73, 1138 | 0xb024cdf09e34ba07, 0x66cd8c5a95d7393b, 0xe3939acf790d4a74, 0xca6552a0dfb82c73, 1139 | 0xb024cdf09e34ba07, 0x66cd8c5a95d7393b, 0xe3939acf790d4a74, 0x97827541a1ef051e, 1140 | 0xac2fce47ebe6500c, 0xb3f06d3bddf3bd6a, 0x1d74afb25e1ce5fe, 0xc4306af6, 1141 | }, 1142 | { 1143 | 0x534cc35f0ee1eb4e, 0xb703820f1f3b3dce, 0x884aa164cf22363, 0xf14ef7f47d8a57a3, 1144 | 0x80d1f86f2e061d7c, 0x401d6c2f151b5a62, 0xe988460224108944, 0xf14ef7f47d8a57a3, 1145 | 0x80d1f86f2e061d7c, 0x401d6c2f151b5a62, 0xe988460224108944, 0x7804d4135f68cd19, 1146 | 0x5487b4b39e69fe8e, 0x8cc5999015358a27, 0x8f3729b61c2d5601, 0x6dcad433, 1147 | }, 1148 | { 1149 | 0x7ca6e3933995dac, 0xfd118c77daa8188, 0x3aceb7b5e7da6545, 0xc8389799445480db, 1150 | 0x5389f5df8aacd50d, 0xd136581f22fab5f, 0xc2f31f85991da417, 0xc8389799445480db, 1151 | 0x5389f5df8aacd50d, 0xd136581f22fab5f, 0xc2f31f85991da417, 0xaefbf9ff84035a43, 1152 | 0x8accbaf44adadd7c, 0xe57f3657344b67f5, 0x21490e5e8abdec51, 0x3c07374d, 1153 | }, 1154 | { 1155 | 0xf0d6044f6efd7598, 0xe044d6ba4369856e, 0x91968e4f8c8a1a4c, 0x70bd1968996bffc2, 1156 | 0x4c613de5d8ab32ac, 0xfe1f4f97206f79d8, 0xac0434f2c4e213a9, 0x70bd1968996bffc2, 1157 | 0x4c613de5d8ab32ac, 0xfe1f4f97206f79d8, 0xac0434f2c4e213a9, 0x7490e9d82cfe22ca, 1158 | 0x5fbbf7f987454238, 0xc39e0dc8368ce949, 0x22201d3894676c71, 0xf0f4602c, 1159 | }, 1160 | { 1161 | 0x3d69e52049879d61, 0x76610636ea9f74fe, 0xe9bf5602f89310c0, 0x8eeb177a86053c11, 1162 | 0xe390122c345f34a2, 0x1e30e47afbaaf8d6, 0x7b892f68e5f91732, 0x8eeb177a86053c11, 1163 | 0xe390122c345f34a2, 0x1e30e47afbaaf8d6, 0x7b892f68e5f91732, 0xb87922525fa44158, 1164 | 0xf440a1ee1a1a766b, 0xee8efad279d08c5c, 0x421f910c5b60216e, 0x3e1ea071, 1165 | }, 1166 | { 1167 | 0x79da242a16acae31, 0x183c5f438e29d40, 0x6d351710ae92f3de, 0x27233b28b5b11e9b, 1168 | 0xc7dfe8988a942700, 0x570ed11c4abad984, 0x4b4c04632f48311a, 0x27233b28b5b11e9b, 1169 | 0xc7dfe8988a942700, 0x570ed11c4abad984, 0x4b4c04632f48311a, 0x12f33235442cbf9, 1170 | 0xa35315ca0b5b8cdb, 0xd8abde62ead5506b, 0xfc0fcf8478ad5266, 0x67580f0c, 1171 | }, 1172 | { 1173 | 0x461c82656a74fb57, 0xd84b491b275aa0f7, 0x8f262cb29a6eb8b2, 0x49fa3070bc7b06d0, 1174 | 0xf12ed446bd0c0539, 0x6d43ac5d1dd4b240, 0x7609524fe90bec93, 0x49fa3070bc7b06d0, 1175 | 0xf12ed446bd0c0539, 0x6d43ac5d1dd4b240, 0x7609524fe90bec93, 0x391c2b2e076ec241, 1176 | 0xf5e62deda7839f7b, 0x3c7b3186a10d870f, 0x77ef4f2cba4f1005, 0x4e109454, 1177 | }, 1178 | { 1179 | 0x53c1a66d0b13003, 0x731f060e6fe797fc, 0xdaa56811791371e3, 0x57466046cf6896ed, 1180 | 0x8ac37e0e8b25b0c6, 0x3e6074b52ad3cf18, 0xaa491ce7b45db297, 0x57466046cf6896ed, 1181 | 0x8ac37e0e8b25b0c6, 0x3e6074b52ad3cf18, 0xaa491ce7b45db297, 0xf7a9227c5e5e22c3, 1182 | 0x3d92e0841e29ce28, 0x2d30da5b2859e59d, 0xff37fa1c9cbfafc2, 0x88a474a7, 1183 | }, 1184 | { 1185 | 0xd3a2efec0f047e9, 0x1cabce58853e58ea, 0x7a17b2eae3256be4, 0xc2dcc9758c910171, 1186 | 0xcb5cddaeff4ddb40, 0x5d7cc5869baefef1, 0x9644c5853af9cfeb, 0xc2dcc9758c910171, 1187 | 0xcb5cddaeff4ddb40, 0x5d7cc5869baefef1, 0x9644c5853af9cfeb, 0x255c968184694ee1, 1188 | 0x4e4d726eda360927, 0x7d27dd5b6d100377, 0x9a300e2020ddea2c, 0x5b5bedd, 1189 | }, 1190 | { 1191 | 0x43c64d7484f7f9b2, 0x5da002b64aafaeb7, 0xb576c1e45800a716, 0x3ee84d3d5b4ca00b, 1192 | 0x5cbc6d701894c3f9, 0xd9e946f5ae1ca95, 0x24ca06e67f0b1833, 0x3ee84d3d5b4ca00b, 1193 | 0x5cbc6d701894c3f9, 0xd9e946f5ae1ca95, 0x24ca06e67f0b1833, 0x3413d46b4152650e, 1194 | 0xcbdfdbc2ab516f9c, 0x2aad8acb739e0c6c, 0x2bfc950d9f9fa977, 0x1aaddfa7, 1195 | }, 1196 | { 1197 | 0xa7dec6ad81cf7fa1, 0x180c1ab708683063, 0x95e0fd7008d67cff, 0x6b11c5073687208, 1198 | 0x7e0a57de0d453f3, 0xe48c267d4f646867, 0x2168e9136375f9cb, 0x6b11c5073687208, 1199 | 0x7e0a57de0d453f3, 0xe48c267d4f646867, 0x2168e9136375f9cb, 0x64da194aeeea7fdf, 1200 | 0xa3b9f01fa5885678, 0xc316f8ee2eb2bd17, 0xa7e4d80f83e4427f, 0x5be07fd8, 1201 | }, 1202 | { 1203 | 0x5408a1df99d4aff, 0xb9565e588740f6bd, 0xabf241813b08006e, 0x7da9e81d89fda7ad, 1204 | 0x274157cabe71440d, 0x2c22d9a480b331f7, 0xe835c8ac746472d5, 0x7da9e81d89fda7ad, 1205 | 0x274157cabe71440d, 0x2c22d9a480b331f7, 0xe835c8ac746472d5, 0x2038ce817a201ae4, 1206 | 0x46f3289dfe1c5e40, 0x435578a42d4b7c56, 0xf96d9f409fcf561, 0xcbca8606, 1207 | }, 1208 | { 1209 | 0xa8b27a6bcaeeed4b, 0xaec1eeded6a87e39, 0x9daf246d6fed8326, 0xd45a938b79f54e8f, 1210 | 0x366b219d6d133e48, 0x5b14be3c25c49405, 0xfdd791d48811a572, 0xd45a938b79f54e8f, 1211 | 0x366b219d6d133e48, 0x5b14be3c25c49405, 0xfdd791d48811a572, 0x3de67b8d9e95d335, 1212 | 0x903c01307cfbeed5, 0xaf7d65f32274f1d1, 0x4dba141b5fc03c42, 0xbde64d01, 1213 | }, 1214 | { 1215 | 0x9a952a8246fdc269, 0xd0dcfcac74ef278c, 0x250f7139836f0f1f, 0xc83d3c5f4e5f0320, 1216 | 0x694e7adeb2bf32e5, 0x7ad09538a3da27f5, 0x2b5c18f934aa5303, 0xc83d3c5f4e5f0320, 1217 | 0x694e7adeb2bf32e5, 0x7ad09538a3da27f5, 0x2b5c18f934aa5303, 0xc4dad7703d34326e, 1218 | 0x825569e2bcdc6a25, 0xb83d267709ca900d, 0x44ed05151f5d74e6, 0xee90cf33, 1219 | }, 1220 | { 1221 | 0xc930841d1d88684f, 0x5eb66eb18b7f9672, 0xe455d413008a2546, 0xbc271bc0df14d647, 1222 | 0xb071100a9ff2edbb, 0x2b1a4c1cc31a119a, 0xb5d7caa1bd946cef, 0xbc271bc0df14d647, 1223 | 0xb071100a9ff2edbb, 0x2b1a4c1cc31a119a, 0xb5d7caa1bd946cef, 0xe02623ae10f4aadd, 1224 | 0xd79f600389cd06fd, 0x1e8da7965303e62b, 0x86f50e10eeab0925, 0x4305c3ce, 1225 | }, 1226 | { 1227 | 0x94dc6971e3cf071a, 0x994c7003b73b2b34, 0xea16e85978694e5, 0x336c1b59a1fc19f6, 1228 | 0xc173acaecc471305, 0xdb1267d24f3f3f36, 0xe9a5ee98627a6e78, 0x336c1b59a1fc19f6, 1229 | 0xc173acaecc471305, 0xdb1267d24f3f3f36, 0xe9a5ee98627a6e78, 0x718f334204305ae5, 1230 | 0xe3b53c148f98d22c, 0xa184012df848926, 0x6e96386127d51183, 0x4b3a1d76, 1231 | }, 1232 | { 1233 | 0x7fc98006e25cac9, 0x77fee0484cda86a7, 0x376ec3d447060456, 0x84064a6dcf916340, 1234 | 0xfbf55a26790e0ebb, 0x2e7f84151c31a5c2, 0x9f7f6d76b950f9bf, 0x84064a6dcf916340, 1235 | 0xfbf55a26790e0ebb, 0x2e7f84151c31a5c2, 0x9f7f6d76b950f9bf, 0x125e094fbee2b146, 1236 | 0x5706aa72b2eef7c2, 0x1c4a2daa905ee66e, 0x83d48029b5451694, 0xa8bb6d80, 1237 | }, 1238 | { 1239 | 0xbd781c4454103f6, 0x612197322f49c931, 0xb9cf17fd7e5462d5, 0xe38e526cd3324364, 1240 | 0x85f2b63a5b5e840a, 0x485d7cef5aaadd87, 0xd2b837a462f6db6d, 0xe38e526cd3324364, 1241 | 0x85f2b63a5b5e840a, 0x485d7cef5aaadd87, 0xd2b837a462f6db6d, 0x3e41cef031520d9a, 1242 | 0x82df73902d7f67e, 0x3ba6fd54c15257cb, 0x22f91f079be42d40, 0x1f9fa607, 1243 | }, 1244 | { 1245 | 0xda60e6b14479f9df, 0x3bdccf69ece16792, 0x18ebf45c4fecfdc9, 0x16818ee9d38c6664, 1246 | 0x5519fa9a1e35a329, 0xcbd0001e4b08ed8, 0x41a965e37a0c731b, 0x16818ee9d38c6664, 1247 | 0x5519fa9a1e35a329, 0xcbd0001e4b08ed8, 0x41a965e37a0c731b, 0x66e7b5dcca1ca28f, 1248 | 0x963b2d993614347d, 0x9b6fc6f41d411106, 0xaaaecaccf7848c0c, 0x8d0e4ed2, 1249 | }, 1250 | { 1251 | 0x4ca56a348b6c4d3, 0x60618537c3872514, 0x2fbb9f0e65871b09, 0x30278016830ddd43, 1252 | 0xf046646d9012e074, 0xc62a5804f6e7c9da, 0x98d51f5830e2bc1e, 0x30278016830ddd43, 1253 | 0xf046646d9012e074, 0xc62a5804f6e7c9da, 0x98d51f5830e2bc1e, 0x7b2cbe5d37e3f29e, 1254 | 0x7b8c3ed50bda4aa0, 0x3ea60cc24639e038, 0xf7706de9fb0b5801, 0x1bf31347, 1255 | }, 1256 | { 1257 | 0xebd22d4b70946401, 0x6863602bf7139017, 0xc0b1ac4e11b00666, 0x7d2782b82bd494b6, 1258 | 0x97159ba1c26b304b, 0x42b3b0fd431b2ac2, 0xfaa81f82691c830c, 0x7d2782b82bd494b6, 1259 | 0x97159ba1c26b304b, 0x42b3b0fd431b2ac2, 0xfaa81f82691c830c, 0x7cc6449234c7e185, 1260 | 0xaeaa6fa643ca86a5, 0x1412db1c0f2e0133, 0x4df2fe3e4072934f, 0x1ae3fc5b, 1261 | }, 1262 | { 1263 | 0x3cc4693d6cbcb0c, 0x501689ea1c70ffa, 0x10a4353e9c89e364, 0x58c8aba7475e2d95, 1264 | 0x3e2f291698c9427a, 0xe8710d19c9de9e41, 0x65dda22eb04cf953, 0x58c8aba7475e2d95, 1265 | 0x3e2f291698c9427a, 0xe8710d19c9de9e41, 0x65dda22eb04cf953, 0xd7729c48c250cffa, 1266 | 0xef76162b2ddfba4b, 0x52371e17f4d51f6d, 0xddd002112ff0c833, 0x459c3930, 1267 | }, 1268 | { 1269 | 0x38908e43f7ba5ef0, 0x1ab035d4e7781e76, 0x41d133e8c0a68ff7, 0xd1090893afaab8bc, 1270 | 0x96c4fe6922772807, 0x4522426c2b4205eb, 0xefad99a1262e7e0d, 0xd1090893afaab8bc, 1271 | 0x96c4fe6922772807, 0x4522426c2b4205eb, 0xefad99a1262e7e0d, 0xc7696029abdb465e, 1272 | 0x4e18eaf03d517651, 0xd006bced54c86ac8, 0x4330326d1021860c, 0xe00c4184, 1273 | }, 1274 | { 1275 | 0x34983ccc6aa40205, 0x21802cad34e72bc4, 0x1943e8fb3c17bb8, 0xfc947167f69c0da5, 1276 | 0xae79cfdb91b6f6c1, 0x7b251d04c26cbda3, 0x128a33a79060d25e, 0xfc947167f69c0da5, 1277 | 0xae79cfdb91b6f6c1, 0x7b251d04c26cbda3, 0x128a33a79060d25e, 0x1eca842dbfe018dd, 1278 | 0x50a4cd2ee0ba9c63, 0xc2f5c97d8399682f, 0x3f929fc7cbe8ecbb, 0xffc7a781, 1279 | }, 1280 | { 1281 | 0x86215c45dcac9905, 0xea546afe851cae4b, 0xd85b6457e489e374, 0xb7609c8e70386d66, 1282 | 0x36e6ccc278d1636d, 0x2f873307c08e6a1c, 0x10f252a758505289, 0xb7609c8e70386d66, 1283 | 0x36e6ccc278d1636d, 0x2f873307c08e6a1c, 0x10f252a758505289, 0xc8977646e81ab4b6, 1284 | 0x8017b745cd80213b, 0x960687db359bea0, 0xef4a470660799488, 0x6a125480, 1285 | }, 1286 | { 1287 | 0x420fc255c38db175, 0xd503cd0f3c1208d1, 0xd4684e74c825a0bc, 0x4c10537443152f3d, 1288 | 0x720451d3c895e25d, 0xaff60c4d11f513fd, 0x881e8d6d2d5fb953, 0x4c10537443152f3d, 1289 | 0x720451d3c895e25d, 0xaff60c4d11f513fd, 0x881e8d6d2d5fb953, 0x9dec034a043f1f55, 1290 | 0xe27a0c22e7bfb39d, 0x2220b959128324, 0x53240272152dbd8b, 0x88a1512b, 1291 | }, 1292 | { 1293 | 0x1d7a31f5bc8fe2f9, 0x4763991092dcf836, 0xed695f55b97416f4, 0xf265edb0c1c411d7, 1294 | 0x30e1e9ec5262b7e6, 0xc2c3ba061ce7957a, 0xd975f93b89a16409, 0xf265edb0c1c411d7, 1295 | 0x30e1e9ec5262b7e6, 0xc2c3ba061ce7957a, 0xd975f93b89a16409, 0xe9d703123f43450a, 1296 | 0x41383fedfed67c82, 0x6e9f43ecbbbd6004, 0xc7ccd23a24e77b8, 0x549bbbe5, 1297 | }, 1298 | { 1299 | 0x94129a84c376a26e, 0xc245e859dc231933, 0x1b8f74fecf917453, 0xe9369d2e9007e74b, 1300 | 0xb1375915d1136052, 0x926c2021fe1d2351, 0x1d943addaaa2e7e6, 0xe9369d2e9007e74b, 1301 | 0xb1375915d1136052, 0x926c2021fe1d2351, 0x1d943addaaa2e7e6, 0xf5f515869c246738, 1302 | 0x7e309cd0e1c0f2a0, 0x153c3c36cf523e3b, 0x4931c66872ea6758, 0xc133d38c, 1303 | }, 1304 | { 1305 | 0x1d3a9809dab05c8d, 0xadddeb4f71c93e8, 0xef342eb36631edb, 0x301d7a61c4b3dbca, 1306 | 0x861336c3f0552d61, 0x12c6db947471300f, 0xa679ef0ed761deb9, 0x301d7a61c4b3dbca, 1307 | 0x861336c3f0552d61, 0x12c6db947471300f, 0xa679ef0ed761deb9, 0x5f713b720efcd147, 1308 | 0x37ac330a333aa6b, 0x3309dc9ec1616eef, 0x52301d7a908026b5, 0xfcace348, 1309 | }, 1310 | { 1311 | 0x90fa3ccbd60848da, 0xdfa6e0595b569e11, 0xe585d067a1f5135d, 0x6cef866ec295abea, 1312 | 0xc486c0d9214beb2d, 0xd6e490944d5fe100, 0x59df3175d72c9f38, 0x6cef866ec295abea, 1313 | 0xc486c0d9214beb2d, 0xd6e490944d5fe100, 0x59df3175d72c9f38, 0x3f23aeb4c04d1443, 1314 | 0x9bf0515cd8d24770, 0x958554f60ccaade2, 0x5182863c90132fe8, 0xed7b6f9a, 1315 | }, 1316 | { 1317 | 0x2dbb4fc71b554514, 0x9650e04b86be0f82, 0x60f2304fba9274d3, 0xfcfb9443e997cab, 1318 | 0xf13310d96dec2772, 0x709cad2045251af2, 0xafd0d30cc6376dad, 0xfcfb9443e997cab, 1319 | 0xf13310d96dec2772, 0x709cad2045251af2, 0xafd0d30cc6376dad, 0x59d4bed30d550d0d, 1320 | 0x58006d4e22d8aad1, 0xeee12d2362d1f13b, 0x35cf1d7faaf1d228, 0x6d907dda, 1321 | }, 1322 | { 1323 | 0xb98bf4274d18374a, 0x1b669fd4c7f9a19a, 0xb1f5972b88ba2b7a, 0x73119c99e6d508be, 1324 | 0x5d4036a187735385, 0x8fa66e192fd83831, 0x2abf64b6b592ed57, 0x73119c99e6d508be, 1325 | 0x5d4036a187735385, 0x8fa66e192fd83831, 0x2abf64b6b592ed57, 0xd4501f95dd84b08c, 1326 | 0xbf1552439c8bea02, 0x4f56fe753ba7e0ba, 0x4ca8d35cc058cfcd, 0x7a4d48d5, 1327 | }, 1328 | { 1329 | 0xd6781d0b5e18eb68, 0xb992913cae09b533, 0x58f6021caaee3a40, 0xaafcb77497b5a20b, 1330 | 0x411819e5e79b77a3, 0xbd779579c51c77ce, 0x58d11f5dcf5d075d, 0xaafcb77497b5a20b, 1331 | 0x411819e5e79b77a3, 0xbd779579c51c77ce, 0x58d11f5dcf5d075d, 0x9eae76cde1cb4233, 1332 | 0x32fe25a9bf657970, 0x1c0c807948edb06a, 0xb8f29a3dfaee254d, 0xe686f3db, 1333 | }, 1334 | { 1335 | 0x226651cf18f4884c, 0x595052a874f0f51c, 0xc9b75162b23bab42, 0x3f44f873be4812ec, 1336 | 0x427662c1dbfaa7b2, 0xa207ff9638fb6558, 0xa738d919e45f550f, 0x3f44f873be4812ec, 1337 | 0x427662c1dbfaa7b2, 0xa207ff9638fb6558, 0xa738d919e45f550f, 0xcb186ea05717e7d6, 1338 | 0x1ca7d68a5871fdc1, 0x5d4c119ea8ef3750, 0x72b6a10fa2ff9406, 0xcce7c55, 1339 | }, 1340 | { 1341 | 0xa734fb047d3162d6, 0xe523170d240ba3a5, 0x125a6972809730e8, 0xd396a297799c24a1, 1342 | 0x8fee992e3069bad5, 0x2e3a01b0697ccf57, 0xee9c7390bd901cfa, 0xd396a297799c24a1, 1343 | 0x8fee992e3069bad5, 0x2e3a01b0697ccf57, 0xee9c7390bd901cfa, 0x56f2d9da0af28af2, 1344 | 0x3fdd37b2fe8437cb, 0x3d13eeeb60d6aec0, 0x2432ae62e800a5ce, 0xf58b96b, 1345 | }, 1346 | { 1347 | 0xc6df6364a24f75a3, 0xc294e2c84c4f5df8, 0xa88df65c6a89313b, 0x895fe8443183da74, 1348 | 0xc7f2f6f895a67334, 0xa0d6b6a506691d31, 0x24f51712b459a9f0, 0x895fe8443183da74, 1349 | 0xc7f2f6f895a67334, 0xa0d6b6a506691d31, 0x24f51712b459a9f0, 0x173a699481b9e088, 1350 | 0x1dee9b77bcbf45d3, 0x32b98a646a8667d0, 0x3adcd4ee28f42a0e, 0x1bbf6f60, 1351 | }, 1352 | { 1353 | 0xd8d1364c1fbcd10, 0x2d7cc7f54832deaa, 0x4e22c876a7c57625, 0xa3d5d1137d30c4bd, 1354 | 0x1e7d706a49bdfb9e, 0xc63282b20ad86db2, 0xaec97fa07916bfd6, 0xa3d5d1137d30c4bd, 1355 | 0x1e7d706a49bdfb9e, 0xc63282b20ad86db2, 0xaec97fa07916bfd6, 0x7c9ba3e52d44f73e, 1356 | 0xaf62fd245811185d, 0x8a9d2dacd8737652, 0xbd2cce277d5fbec0, 0xce5e0cc2, 1357 | }, 1358 | { 1359 | 0xaae06f9146db885f, 0x3598736441e280d9, 0xfba339b117083e55, 0xb22bf08d9f8aecf7, 1360 | 0xc182730de337b922, 0x2b9adc87a0450a46, 0x192c29a9cfc00aad, 0xb22bf08d9f8aecf7, 1361 | 0xc182730de337b922, 0x2b9adc87a0450a46, 0x192c29a9cfc00aad, 0x9fd733f1d84a59d9, 1362 | 0xd86bd5c9839ace15, 0xaf20b57303172876, 0x9f63cb7161b5364c, 0x584cfd6f, 1363 | }, 1364 | { 1365 | 0x8955ef07631e3bcc, 0x7d70965ea3926f83, 0x39aed4134f8b2db6, 0x882efc2561715a9c, 1366 | 0xef8132a18a540221, 0xb20a3c87a8c257c1, 0xf541b8628fad6c23, 0x882efc2561715a9c, 1367 | 0xef8132a18a540221, 0xb20a3c87a8c257c1, 0xf541b8628fad6c23, 0x9552aed57a6e0467, 1368 | 0x4d9fdd56867611a7, 0xc330279bf23b9eab, 0x44dbbaea2fcb8eba, 0x8f9bbc33, 1369 | }, 1370 | { 1371 | 0xad611c609cfbe412, 0xd3c00b18bf253877, 0x90b2172e1f3d0bfd, 0x371a98b2cb084883, 1372 | 0x33a2886ee9f00663, 0xbe9568818ed6e6bd, 0xf244a0fa2673469a, 0x371a98b2cb084883, 1373 | 0x33a2886ee9f00663, 0xbe9568818ed6e6bd, 0xf244a0fa2673469a, 0xb447050bd3e559e9, 1374 | 0xd3b695dae7a13383, 0xded0bb65be471188, 0xca3c7a2b78922cae, 0xd7640d95, 1375 | }, 1376 | { 1377 | 0xd5339adc295d5d69, 0xb633cc1dcb8b586a, 0xee84184cf5b1aeaf, 0x89f3aab99afbd636, 1378 | 0xf420e004f8148b9a, 0x6818073faa797c7c, 0xdd3b4e21cbbf42ca, 0x89f3aab99afbd636, 1379 | 0xf420e004f8148b9a, 0x6818073faa797c7c, 0xdd3b4e21cbbf42ca, 0x6a2b7db261164844, 1380 | 0xcbead63d1895852a, 0x93d37e1eae05e2f9, 0x5d06db2703fbc3ae, 0x3d12a2b, 1381 | }, 1382 | { 1383 | 0x40d0aeff521375a8, 0x77ba1ad7ecebd506, 0x547c6f1a7d9df427, 0x21c2be098327f49b, 1384 | 0x7e035065ac7bbef5, 0x6d7348e63023fb35, 0x9d427dc1b67c3830, 0x21c2be098327f49b, 1385 | 0x7e035065ac7bbef5, 0x6d7348e63023fb35, 0x9d427dc1b67c3830, 0x4e3d018a43858341, 1386 | 0xcf924bb44d6b43c5, 0x4618b6a26e3446ae, 0x54d3013fac3ed469, 0xaaeafed0, 1387 | }, 1388 | { 1389 | 0x8b2d54ae1a3df769, 0x11e7adaee3216679, 0x3483781efc563e03, 0x9d097dd3152ab107, 1390 | 0x51e21d24126e8563, 0xcba56cac884a1354, 0x39abb1b595f0a977, 0x9d097dd3152ab107, 1391 | 0x51e21d24126e8563, 0xcba56cac884a1354, 0x39abb1b595f0a977, 0x81e6dd1c1109848f, 1392 | 0x1644b209826d7b15, 0x6ac67e4e4b4812f0, 0xb3a9f5622c935bf7, 0x95b9b814, 1393 | }, 1394 | { 1395 | 0x99c175819b4eae28, 0x932e8ff9f7a40043, 0xec78dcab07ca9f7c, 0xc1a78b82ba815b74, 1396 | 0x458cbdfc82eb322a, 0x17f4a192376ed8d7, 0x6f9e92968bc8ccef, 0xc1a78b82ba815b74, 1397 | 0x458cbdfc82eb322a, 0x17f4a192376ed8d7, 0x6f9e92968bc8ccef, 0x93e098c333b39905, 1398 | 0xd59b1cace44b7fdc, 0xf7a64ed78c64c7c5, 0x7c6eca5dd87ec1ce, 0x45fbe66e, 1399 | }, 1400 | { 1401 | 0x2a418335779b82fc, 0xaf0295987849a76b, 0xc12bc5ff0213f46e, 0x5aeead8d6cb25bb9, 1402 | 0x739315f7743ec3ff, 0x9ab48d27111d2dcc, 0x5b87bd35a975929b, 0x5aeead8d6cb25bb9, 1403 | 0x739315f7743ec3ff, 0x9ab48d27111d2dcc, 0x5b87bd35a975929b, 0xc3dd8d6d95a46bb3, 1404 | 0x7bf9093215a4f483, 0xcb557d6ed84285bd, 0xdaf58422f261fdb5, 0xb4baa7a8, 1405 | }, 1406 | { 1407 | 0x3b1fc6a3d279e67d, 0x70ea1e49c226396, 0x25505adcf104697c, 0xba1ffba29f0367aa, 1408 | 0xa20bec1dd15a8b6c, 0xe9bf61d2dab0f774, 0xf4f35bf5870a049c, 0xba1ffba29f0367aa, 1409 | 0xa20bec1dd15a8b6c, 0xe9bf61d2dab0f774, 0xf4f35bf5870a049c, 0x26787efa5b92385, 1410 | 0x3d9533590ce30b59, 0xa4da3e40530a01d4, 0x6395deaefb70067c, 0x83e962fe, 1411 | }, 1412 | { 1413 | 0xd97eacdf10f1c3c9, 0xb54f4654043a36e0, 0xb128f6eb09d1234, 0xd8ad7ec84a9c9aa2, 1414 | 0xe256cffed11f69e6, 0x2cf65e4958ad5bda, 0xcfbf9b03245989a7, 0xd8ad7ec84a9c9aa2, 1415 | 0xe256cffed11f69e6, 0x2cf65e4958ad5bda, 0xcfbf9b03245989a7, 0x9fa51e6686cf4444, 1416 | 0x9425c117a34609d5, 0xb25f7e2c6f30e96, 0xea5477c3f2b5afd1, 0xaac3531c, 1417 | }, 1418 | { 1419 | 0x293a5c1c4e203cd4, 0x6b3329f1c130cefe, 0xf2e32f8ec76aac91, 0x361e0a62c8187bff, 1420 | 0x6089971bb84d7133, 0x93df7741588dd50b, 0xc2a9b6abcd1d80b1, 0x361e0a62c8187bff, 1421 | 0x6089971bb84d7133, 0x93df7741588dd50b, 0xc2a9b6abcd1d80b1, 0x4d2f86869d79bc59, 1422 | 0x85cd24d8aa570ff, 0xb0dcf6ef0e94bbb5, 0x2037c69aa7a78421, 0x2b1db7cc, 1423 | }, 1424 | { 1425 | 0x4290e018ffaedde7, 0xa14948545418eb5e, 0x72d851b202284636, 0x4ec02f3d2f2b23f2, 1426 | 0xab3580708aa7c339, 0xcdce066fbab3f65, 0xd8ed3ecf3c7647b9, 0x4ec02f3d2f2b23f2, 1427 | 0xab3580708aa7c339, 0xcdce066fbab3f65, 0xd8ed3ecf3c7647b9, 0x6d2204b3e31f344a, 1428 | 0x61a4d87f80ee61d7, 0x446c43dbed4b728f, 0x73130ac94f58747e, 0xcf00cd31, 1429 | }, 1430 | { 1431 | 0xf919a59cbde8bf2f, 0xa56d04203b2dc5a5, 0x38b06753ac871e48, 0xc2c9fc637dbdfcfa, 1432 | 0x292ab8306d149d75, 0x7f436b874b9ffc07, 0xa5b56b0129218b80, 0xc2c9fc637dbdfcfa, 1433 | 0x292ab8306d149d75, 0x7f436b874b9ffc07, 0xa5b56b0129218b80, 0x9188f7bdc47ec050, 1434 | 0xcfe9345d03a15ade, 0x40b520fb2750c49e, 0xc2e83d343968af2e, 0x7d3c43b8, 1435 | }, 1436 | { 1437 | 0x1d70a3f5521d7fa4, 0xfb97b3fdc5891965, 0x299d49bbbe3535af, 0xe1a8286a7d67946e, 1438 | 0x52bd956f047b298, 0xcbd74332dd4204ac, 0x12b5be7752721976, 0xe1a8286a7d67946e, 1439 | 0x52bd956f047b298, 0xcbd74332dd4204ac, 0x12b5be7752721976, 0x278426e27f6204b6, 1440 | 0x932ca7a7cd610181, 0x41647321f0a5914d, 0x48f4aa61a0ae80db, 0xcbd5fac6, 1441 | }, 1442 | { 1443 | 0x6af98d7b656d0d7c, 0xd2e99ae96d6b5c0c, 0xf63bd1603ef80627, 0xbde51033ac0413f8, 1444 | 0xbc0272f691aec629, 0x6204332651bebc44, 0x1cbf00de026ea9bd, 0xbde51033ac0413f8, 1445 | 0xbc0272f691aec629, 0x6204332651bebc44, 0x1cbf00de026ea9bd, 0xb9c7ed6a75f3ff1e, 1446 | 0x7e310b76a5808e4f, 0xacbbd1aad5531885, 0xfc245f2473adeb9c, 0x76d0fec4, 1447 | }, 1448 | { 1449 | 0x395b7a8adb96ab75, 0x582df7165b20f4a, 0xe52bd30e9ff657f9, 0x6c71064996cbec8b, 1450 | 0x352c535edeefcb89, 0xac7f0aba15cd5ecd, 0x3aba1ca8353e5c60, 0x6c71064996cbec8b, 1451 | 0x352c535edeefcb89, 0xac7f0aba15cd5ecd, 0x3aba1ca8353e5c60, 0x5c30a288a80ce646, 1452 | 0xc2940488b6617674, 0x925f8cc66b370575, 0xaa65d1283b9bb0ef, 0x405e3402, 1453 | }, 1454 | { 1455 | 0x3822dd82c7df012f, 0xb9029b40bd9f122b, 0xfd25b988468266c4, 0x43e47bd5bab1e0ef, 1456 | 0x4a71f363421f282f, 0x880b2f32a2b4e289, 0x1299d4eda9d3eadf, 0x43e47bd5bab1e0ef, 1457 | 0x4a71f363421f282f, 0x880b2f32a2b4e289, 0x1299d4eda9d3eadf, 0xd713a40226f5564, 1458 | 0x4d8d34fedc769406, 0xa85001b29cd9cac3, 0xcae92352a41fd2b0, 0xc732c481, 1459 | }, 1460 | { 1461 | 0x79f7efe4a80b951a, 0xdd3a3fddfc6c9c41, 0xab4c812f9e27aa40, 0x832954ec9d0de333, 1462 | 0x94c390aa9bcb6b8a, 0xf3b32afdc1f04f82, 0xd229c3b72e4b9a74, 0x832954ec9d0de333, 1463 | 0x94c390aa9bcb6b8a, 0xf3b32afdc1f04f82, 0xd229c3b72e4b9a74, 0x1d11860d7ed624a6, 1464 | 0xcadee20b3441b984, 0x75307079bf306f7b, 0x87902aa3b9753ba4, 0xa8d123c9, 1465 | }, 1466 | { 1467 | 0xae6e59f5f055921a, 0xe9d9b7bf68e82, 0x5ce4e4a5b269cc59, 0x4960111789727567, 1468 | 0x149b8a37c7125ab6, 0x78c7a13ab9749382, 0x1c61131260ca151a, 0x4960111789727567, 1469 | 0x149b8a37c7125ab6, 0x78c7a13ab9749382, 0x1c61131260ca151a, 0x1e93276b35c309a0, 1470 | 0x2618f56230acde58, 0xaf61130a18e4febf, 0x7145deb18e89befe, 0x1e80ad7d, 1471 | }, 1472 | { 1473 | 0x8959dbbf07387d36, 0xb4658afce48ea35d, 0x8f3f82437d8cb8d6, 0x6566d74954986ba5, 1474 | 0x99d5235cc82519a7, 0x257a23805c2d825, 0xad75ccb968e93403, 0x6566d74954986ba5, 1475 | 0x99d5235cc82519a7, 0x257a23805c2d825, 0xad75ccb968e93403, 0xb45bd4cf78e11f7f, 1476 | 0x80c5536bdc487983, 0xa4fd76ecbf018c8a, 0x3b9dac78a7a70d43, 0x52aeb863, 1477 | }, 1478 | { 1479 | 0x4739613234278a49, 0x99ea5bcd340bf663, 0x258640912e712b12, 0xc8a2827404991402, 1480 | 0x7ee5e78550f02675, 0x2ec53952db5ac662, 0x1526405a9df6794b, 0xc8a2827404991402, 1481 | 0x7ee5e78550f02675, 0x2ec53952db5ac662, 0x1526405a9df6794b, 0xeddc6271170c5e1f, 1482 | 0xf5a85f986001d9d6, 0x95427c677bf58d58, 0x53ed666dfa85cb29, 0xef7c0c18, 1483 | }, 1484 | { 1485 | 0x420e6c926bc54841, 0x96dbbf6f4e7c75cd, 0xd8d40fa70c3c67bb, 0x3edbc10e4bfee91b, 1486 | 0xf0d681304c28ef68, 0x77ea602029aaaf9c, 0x90f070bd24c8483c, 0x3edbc10e4bfee91b, 1487 | 0xf0d681304c28ef68, 0x77ea602029aaaf9c, 0x90f070bd24c8483c, 0x28bc8e41e08ceb86, 1488 | 0x1eb56e48a65691ef, 0x9fea5301c9202f0e, 0x3fcb65091aa9f135, 0xb6ad4b68, 1489 | }, 1490 | { 1491 | 0xc8601bab561bc1b7, 0x72b26272a0ff869a, 0x56fdfc986d6bc3c4, 0x83707730cad725d4, 1492 | 0xc9ca88c3a779674a, 0xe1c696fbbd9aa933, 0x723f3baab1c17a45, 0x83707730cad725d4, 1493 | 0xc9ca88c3a779674a, 0xe1c696fbbd9aa933, 0x723f3baab1c17a45, 0xf82abc7a1d851682, 1494 | 0x30683836818e857d, 0x78bfa3e89a5ab23f, 0x6928234482b31817, 0xc1e46b17, 1495 | }, 1496 | { 1497 | 0xb2d294931a0e20eb, 0x284ffd9a0815bc38, 0x1f8a103aac9bbe6, 0x1ef8e98e1ea57269, 1498 | 0x5971116272f45a8b, 0x187ad68ce95d8eac, 0xe94e93ee4e8ecaa6, 0x1ef8e98e1ea57269, 1499 | 0x5971116272f45a8b, 0x187ad68ce95d8eac, 0xe94e93ee4e8ecaa6, 0xa0ff2a58611838b5, 1500 | 0xb01e03849bfbae6f, 0xd081e202e28ea3ab, 0x51836bcee762bf13, 0x57b8df25, 1501 | }, 1502 | { 1503 | 0x7966f53c37b6c6d7, 0x8e6abcfb3aa2b88f, 0x7f2e5e0724e5f345, 0x3eeb60c3f5f8143d, 1504 | 0xa25aec05c422a24f, 0xb026b03ad3cca4db, 0xe6e030028cc02a02, 0x3eeb60c3f5f8143d, 1505 | 0xa25aec05c422a24f, 0xb026b03ad3cca4db, 0xe6e030028cc02a02, 0x16fe679338b34bfc, 1506 | 0xc1be385b5c8a9de4, 0x65af5df6567530eb, 0xed3b303df4dc6335, 0xe9fa36d6, 1507 | }, 1508 | { 1509 | 0xbe9bb0abd03b7368, 0x13bca93a3031be55, 0xe864f4f52b55b472, 0x36a8d13a2cbb0939, 1510 | 0x254ac73907413230, 0x73520d1522315a70, 0x8c9fdb5cf1e1a507, 0x36a8d13a2cbb0939, 1511 | 0x254ac73907413230, 0x73520d1522315a70, 0x8c9fdb5cf1e1a507, 0xb3640570b926886, 1512 | 0xfba2344ee87f7bab, 0xde57341ab448df05, 0x385612ee094fa977, 0x8f8daefc, 1513 | }, 1514 | { 1515 | 0xa08d128c5f1649be, 0xa8166c3dbbe19aad, 0xcb9f914f829ec62c, 0x5b2b7ca856fad1c3, 1516 | 0x8093022d682e375d, 0xea5d163ba7ea231f, 0xd6181d012c0de641, 0x5b2b7ca856fad1c3, 1517 | 0x8093022d682e375d, 0xea5d163ba7ea231f, 0xd6181d012c0de641, 0xe7d40d0ab8b08159, 1518 | 0x2e82320f51b3a67e, 0x27c2e356ea0b63a3, 0x58842d01a2b1d077, 0x6e1bb7e, 1519 | }, 1520 | { 1521 | 0x7c386f0ffe0465ac, 0x530419c9d843dbf3, 0x7450e3a4f72b8d8c, 0x48b218e3b721810d, 1522 | 0xd3757ac8609bc7fc, 0x111ba02a88aefc8, 0xe86343137d3bfc2a, 0x48b218e3b721810d, 1523 | 0xd3757ac8609bc7fc, 0x111ba02a88aefc8, 0xe86343137d3bfc2a, 0x44ad26b51661b507, 1524 | 0xdb1268670274f51e, 0x62a5e75beae875f3, 0xe266e7a44c5f28c6, 0xfd0076f0, 1525 | }, 1526 | { 1527 | 0xbb362094e7ef4f8, 0xff3c2a48966f9725, 0x55152803acd4a7fe, 0x15747d8c505ffd00, 1528 | 0x438a15f391312cd6, 0xe46ca62c26d821f5, 0xbe78d74c9f79cb44, 0x15747d8c505ffd00, 1529 | 0x438a15f391312cd6, 0xe46ca62c26d821f5, 0xbe78d74c9f79cb44, 0xa8aa19f3aa59f09a, 1530 | 0xeffb3cddab2c9267, 0xd78e41ad97cb16a5, 0xace6821513527d32, 0x899b17b6, 1531 | }, 1532 | { 1533 | 0xcd80dea24321eea4, 0x52b4fdc8130c2b15, 0xf3ea100b154bfb82, 0xd9ccef1d4be46988, 1534 | 0x5ede0c4e383a5e66, 0xda69683716a54d1e, 0xbfc3fdf02d242d24, 0xd9ccef1d4be46988, 1535 | 0x5ede0c4e383a5e66, 0xda69683716a54d1e, 0xbfc3fdf02d242d24, 0x20ed30274651b3f5, 1536 | 0x4c659824169e86c6, 0x637226dae5b52a0e, 0x7e050dbd1c71dc7f, 0xe3e84e31, 1537 | }, 1538 | { 1539 | 0xd599a04125372c3a, 0x313136c56a56f363, 0x1e993c3677625832, 0x2870a99c76a587a4, 1540 | 0x99f74cc0b182dda4, 0x8a5e895b2f0ca7b6, 0x3d78882d5e0bb1dc, 0x2870a99c76a587a4, 1541 | 0x99f74cc0b182dda4, 0x8a5e895b2f0ca7b6, 0x3d78882d5e0bb1dc, 0xf466123732a3e25e, 1542 | 0xaca5e59716a40e50, 0x261d2e7383d0e686, 0xce9362d6a42c15a7, 0xeef79b6b, 1543 | }, 1544 | { 1545 | 0xdbbf541e9dfda0a, 0x1479fceb6db4f844, 0x31ab576b59062534, 0xa3335c417687cf3a, 1546 | 0x92ff114ac45cda75, 0xc3b8a627384f13b5, 0xc4f25de33de8b3f7, 0xa3335c417687cf3a, 1547 | 0x92ff114ac45cda75, 0xc3b8a627384f13b5, 0xc4f25de33de8b3f7, 0xeacbf520578c5964, 1548 | 0x4cb19c5ab24f3215, 0xe7d8a6f67f0c6e7, 0x325c2413eb770ada, 0x868e3315, 1549 | }, 1550 | { 1551 | 0xc2ee3288be4fe2bf, 0xc65d2f5ddf32b92, 0xaf6ecdf121ba5485, 0xc7cd48f7abf1fe59, 1552 | 0xce600656ace6f53a, 0x8a94a4381b108b34, 0xf9d1276c64bf59fb, 0xc7cd48f7abf1fe59, 1553 | 0xce600656ace6f53a, 0x8a94a4381b108b34, 0xf9d1276c64bf59fb, 0x219ce70ff5a112a5, 1554 | 0xe6026c576e2d28d7, 0xb8e467f25015e3a6, 0x950cb904f37af710, 0x4639a426, 1555 | }, 1556 | { 1557 | 0xd86603ced1ed4730, 0xf9de718aaada7709, 0xdb8b9755194c6535, 0xd803e1eead47604c, 1558 | 0xad00f7611970a71b, 0xbc50036b16ce71f5, 0xafba96210a2ca7d6, 0xd803e1eead47604c, 1559 | 0xad00f7611970a71b, 0xbc50036b16ce71f5, 0xafba96210a2ca7d6, 0x28f7a7be1d6765f0, 1560 | 0x97bd888b93938c68, 0x6ad41d1b407ded49, 0xb9bfec098dc543e4, 0xf3213646, 1561 | }, 1562 | { 1563 | 0x915263c671b28809, 0xa815378e7ad762fd, 0xabec6dc9b669f559, 0xd17c928c5342477f, 1564 | 0x745130b795254ad5, 0x8c5db926fe88f8ba, 0x742a95c953e6d974, 0xd17c928c5342477f, 1565 | 0x745130b795254ad5, 0x8c5db926fe88f8ba, 0x742a95c953e6d974, 0x279db8057b5d3e96, 1566 | 0x98168411565b4ec4, 0x50a72c54fa1125fa, 0x27766a635db73638, 0x17f148e9, 1567 | }, 1568 | { 1569 | 0x2b67cdd38c307a5e, 0xcb1d45bb5c9fe1c, 0x800baf2a02ec18ad, 0x6531c1fe32bcb417, 1570 | 0x8c970d8df8cdbeb4, 0x917ba5fc67e72b40, 0x4b65e4e263e0a426, 0x6531c1fe32bcb417, 1571 | 0x8c970d8df8cdbeb4, 0x917ba5fc67e72b40, 0x4b65e4e263e0a426, 0xe0de33ce88a8b3a9, 1572 | 0xf8ef98a437e16b08, 0xa5162c0c7c5f7b62, 0xdbdac43361b2b881, 0xbfd94880, 1573 | }, 1574 | { 1575 | 0x2d107419073b9cd0, 0xa96db0740cef8f54, 0xec41ee91b3ecdc1b, 0xffe319654c8e7ebc, 1576 | 0x6a67b8f13ead5a72, 0x6dd10a34f80d532f, 0x6e9cfaece9fbca4, 0xffe319654c8e7ebc, 1577 | 0x6a67b8f13ead5a72, 0x6dd10a34f80d532f, 0x6e9cfaece9fbca4, 0xb4468eb6a30aa7e9, 1578 | 0xe87995bee483222a, 0xd036c2c90c609391, 0x853306e82fa32247, 0xbb1fa7f3, 1579 | }, 1580 | { 1581 | 0xf3e9487ec0e26dfc, 0x1ab1f63224e837fa, 0x119983bb5a8125d8, 0x8950cfcf4bdf622c, 1582 | 0x8847dca82efeef2f, 0x646b75b026708169, 0x21cab4b1687bd8b, 0x8950cfcf4bdf622c, 1583 | 0x8847dca82efeef2f, 0x646b75b026708169, 0x21cab4b1687bd8b, 0x243b489a9eae6231, 1584 | 0x5f3e634c4b779876, 0xff8abd1548eaf646, 0xc7962f5f0151914b, 0x88816b1, 1585 | }, 1586 | { 1587 | 0x1160987c8fe86f7d, 0x879e6db1481eb91b, 0xd7dcb802bfe6885d, 0x14453b5cc3d82396, 1588 | 0x4ef700c33ed278bc, 0x1639c72ffc00d12e, 0xfb140ee6155f700d, 0x14453b5cc3d82396, 1589 | 0x4ef700c33ed278bc, 0x1639c72ffc00d12e, 0xfb140ee6155f700d, 0x2e6b5c96a6620862, 1590 | 0xa1f136998cbe19c, 0x74e058a3b6c5a712, 0x93dcf6bd33928b17, 0x5c2faeb3, 1591 | }, 1592 | { 1593 | 0xeab8112c560b967b, 0x97f550b58e89dbae, 0x846ed506d304051f, 0x276aa37744b5a028, 1594 | 0x8c10800ee90ea573, 0xe6e57d2b33a1e0b7, 0x91f83563cd3b9dda, 0x276aa37744b5a028, 1595 | 0x8c10800ee90ea573, 0xe6e57d2b33a1e0b7, 0x91f83563cd3b9dda, 0xafbb4739570738a1, 1596 | 0x440ba98da5d8f69, 0xfde4e9b0eda20350, 0xe67dfa5a2138fa1, 0x51b5fc6f, 1597 | }, 1598 | { 1599 | 0x1addcf0386d35351, 0xb5f436561f8f1484, 0x85d38e22181c9bb1, 0xff5c03f003c1fefe, 1600 | 0xe1098670afe7ff6, 0xea445030cf86de19, 0xf155c68b5c2967f8, 0xff5c03f003c1fefe, 1601 | 0xe1098670afe7ff6, 0xea445030cf86de19, 0xf155c68b5c2967f8, 0x95d31b145dbb2e9e, 1602 | 0x914fe1ca3deb3265, 0x6066020b1358ccc1, 0xc74bb7e2dee15036, 0x33d94752, 1603 | }, 1604 | { 1605 | 0xd445ba84bf803e09, 0x1216c2497038f804, 0x2293216ea2237207, 0xe2164451c651adfb, 1606 | 0xb2534e65477f9823, 0x4d70691a69671e34, 0x15be4963dbde8143, 0xe2164451c651adfb, 1607 | 0xb2534e65477f9823, 0x4d70691a69671e34, 0x15be4963dbde8143, 0x762e75c406c5e9a3, 1608 | 0x7b7579f7e0356841, 0x480533eb066dfce5, 0x90ae14ea6bfeb4ae, 0xb0c92948, 1609 | }, 1610 | { 1611 | 0x37235a096a8be435, 0xd9b73130493589c2, 0x3b1024f59378d3be, 0xad159f542d81f04e, 1612 | 0x49626a97a946096, 0xd8d3998bf09fd304, 0xd127a411eae69459, 0xad159f542d81f04e, 1613 | 0x49626a97a946096, 0xd8d3998bf09fd304, 0xd127a411eae69459, 0x8f3253c4eb785a7b, 1614 | 0x4049062f37e62397, 0xb9fa04d3b670e5c1, 0x1211a7967ac9350f, 0xc7171590, 1615 | }, 1616 | { 1617 | 0x763ad6ea2fe1c99d, 0xcf7af5368ac1e26b, 0x4d5e451b3bb8d3d4, 0x3712eb913d04e2f2, 1618 | 0x2f9500d319c84d89, 0x4ac6eb21a8cf06f9, 0x7d1917afcde42744, 0x3712eb913d04e2f2, 1619 | 0x2f9500d319c84d89, 0x4ac6eb21a8cf06f9, 0x7d1917afcde42744, 0x6b58604b5dd10903, 1620 | 0xc4288dfbc1e319fc, 0x230f75ca96817c6e, 0x8894cba3b763756c, 0x240a67fb, 1621 | }, 1622 | { 1623 | 0xea627fc84cd1b857, 0x85e372494520071f, 0x69ec61800845780b, 0xa3c1c5ca1b0367, 1624 | 0xeb6933997272bb3d, 0x76a72cb62692a655, 0x140bb5531edf756e, 0xa3c1c5ca1b0367, 1625 | 0xeb6933997272bb3d, 0x76a72cb62692a655, 0x140bb5531edf756e, 0x8d0d8067d1c925f4, 1626 | 0x7b3fa56d8d77a10c, 0x2bd00287b0946d88, 0xf08c8e4bd65b8970, 0xe1843cd5, 1627 | }, 1628 | { 1629 | 0x1f2ffd79f2cdc0c8, 0x726a1bc31b337aaa, 0x678b7f275ef96434, 0x5aa82bfaa99d3978, 1630 | 0xc18f96cade5ce18d, 0x38404491f9e34c03, 0x891fb8926ba0418c, 0x5aa82bfaa99d3978, 1631 | 0xc18f96cade5ce18d, 0x38404491f9e34c03, 0x891fb8926ba0418c, 0xe5f69a6398114c15, 1632 | 0x7b8ded3623bc6b1d, 0x2f3e5c5da5ff70e8, 0x1ab142addea6a9ec, 0xfda1452b, 1633 | }, 1634 | { 1635 | 0x39a9e146ec4b3210, 0xf63f75802a78b1ac, 0xe2e22539c94741c3, 0x8b305d532e61226e, 1636 | 0xcaeae80da2ea2e, 0x88a6289a76ac684e, 0x8ce5b5f9df1cbd85, 0x8b305d532e61226e, 1637 | 0xcaeae80da2ea2e, 0x88a6289a76ac684e, 0x8ce5b5f9df1cbd85, 0x8ae1fc4798e00d57, 1638 | 0xe7164b8fb364fc46, 0x6a978c9bd3a66943, 0xef10d5ae4dd08dc, 0xa2cad330, 1639 | }, 1640 | { 1641 | 0x74cba303e2dd9d6d, 0x692699b83289fad1, 0xdfb9aa7874678480, 0x751390a8a5c41bdc, 1642 | 0x6ee5fbf87605d34, 0x6ca73f610f3a8f7c, 0xe898b3c996570ad, 0x751390a8a5c41bdc, 1643 | 0x6ee5fbf87605d34, 0x6ca73f610f3a8f7c, 0xe898b3c996570ad, 0x98168a5858fc7110, 1644 | 0x6f987fa27aa0daa2, 0xf25e3e180d4b36a3, 0xd0b03495aeb1be8a, 0x53467e16, 1645 | }, 1646 | { 1647 | 0x4cbc2b73a43071e0, 0x56c5db4c4ca4e0b7, 0x1b275a162f46bd3d, 0xb87a326e413604bf, 1648 | 0xd8f9a5fa214b03ab, 0x8a8bb8265771cf88, 0xa655319054f6e70f, 0xb87a326e413604bf, 1649 | 0xd8f9a5fa214b03ab, 0x8a8bb8265771cf88, 0xa655319054f6e70f, 0xb499cb8e65a9af44, 1650 | 0xbee7fafcc8307491, 0x5d2e55fa9b27cda2, 0x63b120f5fb2d6ee5, 0xda14a8d0, 1651 | }, 1652 | { 1653 | 0x875638b9715d2221, 0xd9ba0615c0c58740, 0x616d4be2dfe825aa, 0x5df25f13ea7bc284, 1654 | 0x165edfaafd2598fb, 0xaf7215c5c718c696, 0xe9f2f9ca655e769, 0x5df25f13ea7bc284, 1655 | 0x165edfaafd2598fb, 0xaf7215c5c718c696, 0xe9f2f9ca655e769, 0xe459cfcb565d3d2d, 1656 | 0x41d032631be2418a, 0xc505db05fd946f60, 0x54990394a714f5de, 0x67333551, 1657 | }, 1658 | { 1659 | 0xfb686b2782994a8d, 0xedee60693756bb48, 0xe6bc3cae0ded2ef5, 0x58eb4d03b2c3ddf5, 1660 | 0x6d2542995f9189f1, 0xc0beec58a5f5fea2, 0xed67436f42e2a78b, 0x58eb4d03b2c3ddf5, 1661 | 0x6d2542995f9189f1, 0xc0beec58a5f5fea2, 0xed67436f42e2a78b, 0xdfec763cdb2b5193, 1662 | 0x724a8d5345bd2d6, 0x94d4fd1b81457c23, 0x28e87c50cdede453, 0xa0ebd66e, 1663 | }, 1664 | { 1665 | 0xab21d81a911e6723, 0x4c31b07354852f59, 0x835da384c9384744, 0x7f759dddc6e8549a, 1666 | 0x616dd0ca022c8735, 0x94717ad4bc15ceb3, 0xf66c7be808ab36e, 0x7f759dddc6e8549a, 1667 | 0x616dd0ca022c8735, 0x94717ad4bc15ceb3, 0xf66c7be808ab36e, 0xaf8286b550b2f4b7, 1668 | 0x745bd217d20a9f40, 0xc73bfb9c5430f015, 0x55e65922666e3fc2, 0x4b769593, 1669 | }, 1670 | { 1671 | 0x33d013cc0cd46ecf, 0x3de726423aea122c, 0x116af51117fe21a9, 0xf271ba474edc562d, 1672 | 0xe6596e67f9dd3ebd, 0xc0a288edf808f383, 0xb3def70681c6babc, 0xf271ba474edc562d, 1673 | 0xe6596e67f9dd3ebd, 0xc0a288edf808f383, 0xb3def70681c6babc, 0x7da7864e9989b095, 1674 | 0xbf2f8718693cd8a1, 0x264a9144166da776, 0x61ad90676870beb6, 0x6aa75624, 1675 | }, 1676 | { 1677 | 0x8ca92c7cd39fae5d, 0x317e620e1bf20f1, 0x4f0b33bf2194b97f, 0x45744afcf131dbee, 1678 | 0x97222392c2559350, 0x498a19b280c6d6ed, 0x83ac2c36acdb8d49, 0x45744afcf131dbee, 1679 | 0x97222392c2559350, 0x498a19b280c6d6ed, 0x83ac2c36acdb8d49, 0x7a69645c294daa62, 1680 | 0xabe9d2be8275b3d2, 0x39542019de371085, 0x7f4efac8488cd6ad, 0x602a3f96, 1681 | }, 1682 | { 1683 | 0xfdde3b03f018f43e, 0x38f932946c78660, 0xc84084ce946851ee, 0xb6dd09ba7851c7af, 1684 | 0x570de4e1bb13b133, 0xc4e784eb97211642, 0x8285a7fcdcc7c58d, 0xb6dd09ba7851c7af, 1685 | 0x570de4e1bb13b133, 0xc4e784eb97211642, 0x8285a7fcdcc7c58d, 0xd421f47990da899b, 1686 | 0x8aed409c997eaa13, 0x7a045929c2e29ccf, 0xb373682a6202c86b, 0xcd183c4d, 1687 | }, 1688 | { 1689 | 0x9c8502050e9c9458, 0xd6d2a1a69964beb9, 0x1675766f480229b5, 0x216e1d6c86cb524c, 1690 | 0xd01cf6fd4f4065c0, 0xfffa4ec5b482ea0f, 0xa0e20ee6a5404ac1, 0x216e1d6c86cb524c, 1691 | 0xd01cf6fd4f4065c0, 0xfffa4ec5b482ea0f, 0xa0e20ee6a5404ac1, 0xc1b037e4eebaf85e, 1692 | 0x634e3d7c3ebf89eb, 0xbcda972358c67d1, 0xfd1352181e5b8578, 0x960a4d07, 1693 | }, 1694 | { 1695 | 0x348176ca2fa2fdd2, 0x3a89c514cc360c2d, 0x9f90b8afb318d6d0, 0xbceee07c11a9ac30, 1696 | 0x2e2d47dff8e77eb7, 0x11a394cd7b6d614a, 0x1d7c41d54e15cb4a, 0xbceee07c11a9ac30, 1697 | 0x2e2d47dff8e77eb7, 0x11a394cd7b6d614a, 0x1d7c41d54e15cb4a, 0x15baa5ae7312b0fc, 1698 | 0xf398f596cc984635, 0x8ab8fdf87a6788e8, 0xb2b5c1234ab47e2, 0x9ae998c4, 1699 | }, 1700 | { 1701 | 0x4a3d3dfbbaea130b, 0x4e221c920f61ed01, 0x553fd6cd1304531f, 0xbd2b31b5608143fe, 1702 | 0xab717a10f2554853, 0x293857f04d194d22, 0xd51be8fa86f254f0, 0xbd2b31b5608143fe, 1703 | 0xab717a10f2554853, 0x293857f04d194d22, 0xd51be8fa86f254f0, 0x1eee39e07686907e, 1704 | 0x639039fe0e8d3052, 0xd6ec1470cef97ff, 0x370c82b860034f0f, 0x74e2179d, 1705 | }, 1706 | { 1707 | 0xb371f768cdf4edb9, 0xbdef2ace6d2de0f0, 0xe05b4100f7f1baec, 0xb9e0d415b4ebd534, 1708 | 0xc97c2a27efaa33d7, 0x591cdb35f84ef9da, 0xa57d02d0e8e3756c, 0xb9e0d415b4ebd534, 1709 | 0xc97c2a27efaa33d7, 0x591cdb35f84ef9da, 0xa57d02d0e8e3756c, 0x23f55f12d7c5c87b, 1710 | 0x4c7ca0fe23221101, 0xdbc3020480334564, 0xd985992f32c236b1, 0xee9bae25, 1711 | }, 1712 | { 1713 | 0x7a1d2e96934f61f, 0xeb1760ae6af7d961, 0x887eb0da063005df, 0x2228d6725e31b8ab, 1714 | 0x9b98f7e4d0142e70, 0xb6a8c2115b8e0fe7, 0xb591e2f5ab9b94b1, 0x2228d6725e31b8ab, 1715 | 0x9b98f7e4d0142e70, 0xb6a8c2115b8e0fe7, 0xb591e2f5ab9b94b1, 0x6c1feaa8065318e0, 1716 | 0x4e7e2ca21c2e81fb, 0xe9fe5d8ce7993c45, 0xee411fa2f12cf8df, 0xb66edf10, 1717 | }, 1718 | { 1719 | 0x8be53d466d4728f2, 0x86a5ac8e0d416640, 0x984aa464cdb5c8bb, 0x87049e68f5d38e59, 1720 | 0x7d8ce44ec6bd7751, 0xcc28d08ab414839c, 0x6c8f0bd34fe843e3, 0x87049e68f5d38e59, 1721 | 0x7d8ce44ec6bd7751, 0xcc28d08ab414839c, 0x6c8f0bd34fe843e3, 0xb8496dcdc01f3e47, 1722 | 0x2f03125c282ac26, 0x82a8797ba3f5ef07, 0x7c977a4d10bf52b8, 0xd6209737, 1723 | }, 1724 | { 1725 | 0x829677eb03abf042, 0x43cad004b6bc2c0, 0xf2f224756803971a, 0x98d0dbf796480187, 1726 | 0xfbcb5f3e1bef5742, 0x5af2a0463bf6e921, 0xad9555bf0120b3a3, 0x98d0dbf796480187, 1727 | 0xfbcb5f3e1bef5742, 0x5af2a0463bf6e921, 0xad9555bf0120b3a3, 0x283e39b3dc99f447, 1728 | 0xbedaa1a4a0250c28, 0x9d50546624ff9a57, 0x4abaf523d1c090f6, 0xb994a88, 1729 | }, 1730 | { 1731 | 0x754435bae3496fc, 0x5707fc006f094dcf, 0x8951c86ab19d8e40, 0x57c5208e8f021a77, 1732 | 0xf7653fbb69cd9276, 0xa484410af21d75cb, 0xf19b6844b3d627e8, 0x57c5208e8f021a77, 1733 | 0xf7653fbb69cd9276, 0xa484410af21d75cb, 0xf19b6844b3d627e8, 0xf37400fc3ffd9514, 1734 | 0x36ae0d821734edfd, 0x5f37820af1f1f306, 0xbe637d40e6a5ad0, 0xa05d43c0, 1735 | }, 1736 | { 1737 | 0xfda9877ea8e3805f, 0x31e868b6ffd521b7, 0xb08c90681fb6a0fd, 0x68110a7f83f5d3ff, 1738 | 0x6d77e045901b85a8, 0x84ef681113036d8b, 0x3b9f8e3928f56160, 0x68110a7f83f5d3ff, 1739 | 0x6d77e045901b85a8, 0x84ef681113036d8b, 0x3b9f8e3928f56160, 0xfc8b7f56c130835, 1740 | 0xa11f3e800638e841, 0xd9572267f5cf28c1, 0x7897c8149803f2aa, 0xc79f73a8, 1741 | }, 1742 | { 1743 | 0x2e36f523ca8f5eb5, 0x8b22932f89b27513, 0x331cd6ecbfadc1bb, 0xd1bfe4df12b04cbf, 1744 | 0xf58c17243fd63842, 0x3a453cdba80a60af, 0x5737b2ca7470ea95, 0xd1bfe4df12b04cbf, 1745 | 0xf58c17243fd63842, 0x3a453cdba80a60af, 0x5737b2ca7470ea95, 0x54d44a3f4477030c, 1746 | 0x8168e02d4869aa7f, 0x77f383a17778559d, 0x95e1737d77a268fc, 0xa490aff5, 1747 | }, 1748 | { 1749 | 0x21a378ef76828208, 0xa5c13037fa841da2, 0x506d22a53fbe9812, 0x61c9c95d91017da5, 1750 | 0x16f7c83ba68f5279, 0x9c0619b0808d05f7, 0x83c117ce4e6b70a3, 0x61c9c95d91017da5, 1751 | 0x16f7c83ba68f5279, 0x9c0619b0808d05f7, 0x83c117ce4e6b70a3, 0xcfb4c8af7fd01413, 1752 | 0xfdef04e602e72296, 0xed6124d337889b1, 0x4919c86707b830da, 0xdfad65b4, 1753 | }, 1754 | { 1755 | 0xccdd5600054b16ca, 0xf78846e84204cb7b, 0x1f9faec82c24eac9, 0x58634004c7b2d19a, 1756 | 0x24bb5f51ed3b9073, 0x46409de018033d00, 0x4a9805eed5ac802e, 0x58634004c7b2d19a, 1757 | 0x24bb5f51ed3b9073, 0x46409de018033d00, 0x4a9805eed5ac802e, 0xe18de8db306baf82, 1758 | 0x46bbf75f1fa025ff, 0x5faf2fb09be09487, 0x3fbc62bd4e558fb3, 0x1d07dfb, 1759 | }, 1760 | { 1761 | 0x7854468f4e0cabd0, 0x3a3f6b4f098d0692, 0xae2423ec7799d30d, 0x29c3529eb165eeba, 1762 | 0x443de3703b657c35, 0x66acbce31ae1bc8d, 0x1acc99effe1d547e, 0x29c3529eb165eeba, 1763 | 0x443de3703b657c35, 0x66acbce31ae1bc8d, 0x1acc99effe1d547e, 0xcf07f8a57906573d, 1764 | 0x31bafb0bbb9a86e7, 0x40c69492702a9346, 0x7df61fdaa0b858af, 0x416df9a0, 1765 | }, 1766 | { 1767 | 0x7f88db5346d8f997, 0x88eac9aacc653798, 0x68a4d0295f8eefa1, 0xae59ca86f4c3323d, 1768 | 0x25906c09906d5c4c, 0x8dd2aa0c0a6584ae, 0x232a7d96b38f40e9, 0xae59ca86f4c3323d, 1769 | 0x25906c09906d5c4c, 0x8dd2aa0c0a6584ae, 0x232a7d96b38f40e9, 0x8986ee00a2ed0042, 1770 | 0xc49ae7e428c8a7d1, 0xb7dd8280713ac9c2, 0xe018720aed1ebc28, 0x1f8fb9cc, 1771 | }, 1772 | { 1773 | 0xbb3fb5fb01d60fcf, 0x1b7cc0847a215eb6, 0x1246c994437990a1, 0xd4edc954c07cd8f3, 1774 | 0x224f47e7c00a30ab, 0xd5ad7ad7f41ef0c6, 0x59e089281d869fd7, 0xd4edc954c07cd8f3, 1775 | 0x224f47e7c00a30ab, 0xd5ad7ad7f41ef0c6, 0x59e089281d869fd7, 0xf29340d07a14b6f1, 1776 | 0xc87c5ef76d9c4ef3, 0x463118794193a9a, 0x2922dcb0540f0dbc, 0x7abf48e3, 1777 | }, 1778 | { 1779 | 0x2e783e1761acd84d, 0x39158042bac975a0, 0x1cd21c5a8071188d, 0xb1b7ec44f9302176, 1780 | 0x5cb476450dc0c297, 0xdc5ef652521ef6a2, 0x3cc79a9e334e1f84, 0xb1b7ec44f9302176, 1781 | 0x5cb476450dc0c297, 0xdc5ef652521ef6a2, 0x3cc79a9e334e1f84, 0x769e2a283dbcc651, 1782 | 0x9f24b105c8511d3f, 0xc31c15575de2f27e, 0xecfecf32c3ae2d66, 0xdea4e3dd, 1783 | }, 1784 | { 1785 | 0x392058251cf22acc, 0x944ec4475ead4620, 0xb330a10b5cb94166, 0x54bc9bee7cbe1767, 1786 | 0x485820bdbe442431, 0x54d6120ea2972e90, 0xf437a0341f29b72a, 0x54bc9bee7cbe1767, 1787 | 0x485820bdbe442431, 0x54d6120ea2972e90, 0xf437a0341f29b72a, 0x8f30885c784d5704, 1788 | 0xaa95376b16c7906a, 0xe826928cfaf93dc3, 0x20e8f54d1c16d7d8, 0xc6064f22, 1789 | }, 1790 | { 1791 | 0xadf5c1e5d6419947, 0x2a9747bc659d28aa, 0x95c5b8cb1f5d62c, 0x80973ea532b0f310, 1792 | 0xa471829aa9c17dd9, 0xc2ff3479394804ab, 0x6bf44f8606753636, 0x80973ea532b0f310, 1793 | 0xa471829aa9c17dd9, 0xc2ff3479394804ab, 0x6bf44f8606753636, 0x5184d2973e6dd827, 1794 | 0x121b96369a332d9a, 0x5c25d3475ab69e50, 0x26d2961d62884168, 0x743bed9c, 1795 | }, 1796 | { 1797 | 0x6bc1db2c2bee5aba, 0xe63b0ed635307398, 0x7b2eca111f30dbbc, 0x230d2b3e47f09830, 1798 | 0xec8624a821c1caf4, 0xea6ec411cdbf1cb1, 0x5f38ae82af364e27, 0x230d2b3e47f09830, 1799 | 0xec8624a821c1caf4, 0xea6ec411cdbf1cb1, 0x5f38ae82af364e27, 0xa519ef515ea7187c, 1800 | 0x6bad5efa7ebae05f, 0x748abacb11a74a63, 0xa28eef963d1396eb, 0xfce254d5, 1801 | }, 1802 | { 1803 | 0xb00f898229efa508, 0x83b7590ad7f6985c, 0x2780e70a0592e41d, 0x7122413bdbc94035, 1804 | 0xe7f90fae33bf7763, 0x4b6bd0fb30b12387, 0x557359c0c44f48ca, 0x7122413bdbc94035, 1805 | 0xe7f90fae33bf7763, 0x4b6bd0fb30b12387, 0x557359c0c44f48ca, 0xd5656c3d6bc5f0d, 1806 | 0x983ff8e5e784da99, 0x628479671b445bf, 0xe179a1e27ce68f5d, 0xe47ec9d1, 1807 | }, 1808 | { 1809 | 0xb56eb769ce0d9a8c, 0xce196117bfbcaf04, 0xb26c3c3797d66165, 0x5ed12338f630ab76, 1810 | 0xfab19fcb319116d, 0x167f5f42b521724b, 0xc4aa56c409568d74, 0x5ed12338f630ab76, 1811 | 0xfab19fcb319116d, 0x167f5f42b521724b, 0xc4aa56c409568d74, 0x75fff4b42f8e9778, 1812 | 0x94218f94710c1ea3, 0xb7b05efb738b06a6, 0x83fff2deabf9cd3, 0x334a145c, 1813 | }, 1814 | { 1815 | 0x70c0637675b94150, 0x259e1669305b0a15, 0x46e1dd9fd387a58d, 0xfca4e5bc9292788e, 1816 | 0xcd509dc1facce41c, 0xbbba575a59d82fe, 0x4e2e71c15b45d4d3, 0xfca4e5bc9292788e, 1817 | 0xcd509dc1facce41c, 0xbbba575a59d82fe, 0x4e2e71c15b45d4d3, 0x5dc54582ead999c, 1818 | 0x72612d1571963c6f, 0x30318a9d2d3d1829, 0x785dd00f4cc9c9a0, 0xadec1e3c, 1819 | }, 1820 | { 1821 | 0x74c0b8a6821faafe, 0xabac39d7491370e7, 0xfaf0b2a48a4e6aed, 0x967e970df9673d2a, 1822 | 0xd465247cffa415c0, 0x33a1df0ca1107722, 0x49fc2a10adce4a32, 0x967e970df9673d2a, 1823 | 0xd465247cffa415c0, 0x33a1df0ca1107722, 0x49fc2a10adce4a32, 0xc5707e079a284308, 1824 | 0x573028266635dda6, 0xf786f5eee6127fa0, 0xb30d79cebfb51266, 0xf6a9fbf8, 1825 | }, 1826 | { 1827 | 0x5fb5e48ac7b7fa4f, 0xa96170f08f5acbc7, 0xbbf5c63d4f52a1e5, 0x6cc09e60700563e9, 1828 | 0xd18f23221e964791, 0xffc23eeef7af26eb, 0x693a954a3622a315, 0x815308a32a9b0daf, 1829 | 0xefb2ab27bf6fd0bd, 0x9f1ffc0986111118, 0xf9a3aa1778ea3985, 0x698fe54b2b93933b, 1830 | 0xdacc2b28404d0f10, 0x815308a32a9b0daf, 0xefb2ab27bf6fd0bd, 0x5398210c, 1831 | }, 1832 | } 1833 | 1834 | func check(t *testing.T, expected, actual uint64, offset, length int) { 1835 | if expected != actual { 1836 | t.Errorf("ERROR, offset: %d, length: %d, expected: %x, but got %x\n", offset, length, expected, actual) 1837 | } 1838 | } 1839 | 1840 | func test(t *testing.T, expected []uint64, offset, length int) { 1841 | u := Hash128(data[offset : offset+length]) 1842 | v := Hash128Seed(data[offset:offset+length], seed128) 1843 | check(t, expected[0], Hash64(data[offset:offset+length]), offset, length) 1844 | check(t, expected[15], uint64(Hash32(data[offset:offset+length])), offset, length) 1845 | check(t, expected[1], Hash64WithSeed(data[offset:offset+length], seed0), offset, length) 1846 | check(t, expected[2], Hash64WithSeeds(data[offset:offset+length], seed0, seed1), offset, length) 1847 | check(t, expected[3], u.Low, offset, length) 1848 | check(t, expected[4], u.High, offset, length) 1849 | check(t, expected[5], v.Low, offset, length) 1850 | check(t, expected[6], v.High, offset, length) 1851 | } 1852 | 1853 | func TestCityHash(t *testing.T) { 1854 | setup() 1855 | i := 0 1856 | for ; i < testSize-1; i++ { 1857 | test(t, testdata[i], i*i, i) 1858 | } 1859 | test(t, testdata[i], 0, dataSize) 1860 | } 1861 | 1862 | func BenchmarkCityHash32(b *testing.B) { 1863 | setup() 1864 | b.ResetTimer() 1865 | b.ReportAllocs() 1866 | b.SetBytes(1024) 1867 | 1868 | for i := 0; i < b.N; i++ { 1869 | Hash32(data[:1024]) 1870 | } 1871 | } 1872 | 1873 | func BenchmarkCityHash64(b *testing.B) { 1874 | setup() 1875 | b.ResetTimer() 1876 | b.ReportAllocs() 1877 | b.SetBytes(1024) 1878 | 1879 | for i := 0; i < b.N; i++ { 1880 | Hash64(data[:1024]) 1881 | } 1882 | } 1883 | 1884 | func BenchmarkCityHash128(b *testing.B) { 1885 | setup() 1886 | b.ResetTimer() 1887 | 1888 | b.ReportAllocs() 1889 | b.SetBytes(1024) 1890 | 1891 | for i := 0; i < b.N; i++ { 1892 | Hash128(data[:1024]) 1893 | } 1894 | } 1895 | 1896 | func BenchmarkCityHash64Small(b *testing.B) { 1897 | setup() 1898 | b.ResetTimer() 1899 | b.ReportAllocs() 1900 | b.SetBytes(10) 1901 | 1902 | for i := 0; i < b.N; i++ { 1903 | Hash64(data[:10]) 1904 | } 1905 | } 1906 | 1907 | func BenchmarkCityHash128Small(b *testing.B) { 1908 | setup() 1909 | b.ResetTimer() 1910 | 1911 | b.ReportAllocs() 1912 | b.SetBytes(10) 1913 | 1914 | for i := 0; i < b.N; i++ { 1915 | Hash128(data[:10]) 1916 | } 1917 | } 1918 | 1919 | func TestRotate(t *testing.T) { 1920 | t.Run("32", func(t *testing.T) { 1921 | if rotate32(100, 0) != 100 { 1922 | t.Error("unexpected rot64") 1923 | } 1924 | }) 1925 | t.Run("64", func(t *testing.T) { 1926 | if rot64(100, 0) != 100 { 1927 | t.Error("unexpected rot64") 1928 | } 1929 | }) 1930 | } 1931 | 1932 | func TestClickhouse(t *testing.T) { 1933 | for _, tt := range []struct { 1934 | Value string 1935 | Expected uint64 1936 | }{ 1937 | {Value: "", Expected: 11160318154034397263}, 1938 | {Value: "Moscow", Expected: 12507901496292878638}, 1939 | {Value: "CH", Expected: 15020278857692564095}, 1940 | {Value: "ClickHouse", Expected: 12904064065176299341}, 1941 | 1942 | { 1943 | Value: "ClickHouseIsAnOpenSource", 1944 | Expected: 15757221730003458568, 1945 | }, 1946 | { 1947 | Value: "ClickHouseIsAnOpenSourceAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 1948 | Expected: 11821112606263625207, 1949 | }, 1950 | { 1951 | Value: "ClickHouseIsAnOpenSourceAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 1952 | Expected: 6686391753024203911, 1953 | }, 1954 | { 1955 | Value: "ClickHouse is an open-source, high performance columnar OLAP database management system for real-time analytics using SQL", 1956 | Expected: 12510537841872258940, 1957 | }, 1958 | } { 1959 | v := CH64([]byte(tt.Value)) 1960 | if v != tt.Expected { 1961 | t.Errorf("CH64(%q) %d (got) != %d (expected)", tt.Value, v, tt.Expected) 1962 | } 1963 | } 1964 | } 1965 | -------------------------------------------------------------------------------- /data_test.go: -------------------------------------------------------------------------------- 1 | package city_test 2 | 3 | import ( 4 | _ "embed" 5 | "encoding/json" 6 | "testing" 7 | 8 | "github.com/go-faster/city" 9 | ) 10 | 11 | // Generated with: 12 | // go run ./internal/citygen > _testdata/data.json 13 | // Not worth it to use go:generate here. 14 | 15 | //go:embed _testdata/data.json 16 | var testData []byte 17 | 18 | func TestData(t *testing.T) { 19 | var data struct { 20 | Seed city.U128 21 | Entries []struct { 22 | Input string 23 | City32 uint32 24 | City64 uint64 25 | City128 city.U128 26 | City128Seed city.U128 27 | ClickHouse64 uint64 28 | ClickHouse128 city.U128 29 | ClickHouse128Seed city.U128 30 | } 31 | } 32 | if err := json.Unmarshal(testData, &data); err != nil { 33 | t.Fatal(err) 34 | } 35 | 36 | for _, e := range data.Entries { 37 | input := []byte(e.Input) 38 | 39 | if v := city.Hash32(input); v != e.City32 { 40 | t.Errorf("Hash32(%q) %d (got) != %d (expected)", input, v, e.City32) 41 | } 42 | if v := city.Hash64(input); v != e.City64 { 43 | t.Errorf("Hash64(%q) %d (got) != %d (expected)", input, v, e.City64) 44 | } 45 | if v := city.Hash128(input); v != e.City128 { 46 | t.Errorf("Hash128(%q) %v (got) != %v (expected)", input, v, e.City128) 47 | } 48 | if v := city.Hash128Seed(input, data.Seed); v != e.City128Seed { 49 | t.Errorf("Hash128Seed(%q, %v) %v (got) != %v (expected)", input, data.Seed, v, e.City128Seed) 50 | } 51 | if v := city.CH64(input); v != e.ClickHouse64 { 52 | t.Errorf("CH64(%q) %v (got) != %v (expected)", input, v, e.City64) 53 | } 54 | if v := city.CH128(input); v != e.ClickHouse128 { 55 | t.Errorf("CH128(%q) %v (got) != %v (expected)", input, v, e.ClickHouse128) 56 | } 57 | if v := city.CH128Seed(input, data.Seed); v != e.ClickHouse128Seed { 58 | t.Errorf("CH128Seed(%q, %v) %v (got) != %v (expected)", input, data.Seed, v, e.ClickHouse128Seed) 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /doc.go: -------------------------------------------------------------------------------- 1 | // Package city implements CityHash in go. 2 | package city 3 | -------------------------------------------------------------------------------- /example_test.go: -------------------------------------------------------------------------------- 1 | package city_test 2 | 3 | import ( 4 | "fmt" 5 | 6 | "github.com/go-faster/city" 7 | ) 8 | 9 | func ExampleHash32() { 10 | s := []byte("hello") 11 | hash32 := city.Hash32(s) 12 | fmt.Printf("the 32-bit hash of 'hello' is: %#x\n", hash32) 13 | 14 | // Output: 15 | // the 32-bit hash of 'hello' is: 0x79969366 16 | } 17 | 18 | func ExampleHash64() { 19 | s := []byte("hello") 20 | hash64 := city.Hash64(s) 21 | fmt.Printf("the 64-bit hash of 'hello' is: %#x\n", hash64) 22 | 23 | // Output: 24 | // the 64-bit hash of 'hello' is: 0xb48be5a931380ce8 25 | } 26 | 27 | func ExampleHash128() { 28 | fmt.Println(city.Hash128([]byte("hello"))) 29 | 30 | // Output: {8030732511675000650 7283604105673962311} 31 | } 32 | 33 | func ExampleCH64() { 34 | // See https://github.com/ClickHouse/ClickHouse/issues/8354 35 | /* 36 | SELECT cityHash64('Moscow') 37 | ┌─cityHash64('Moscow')─┐ 38 | │ 12507901496292878638 │ 39 | └──────────────────────┘ 40 | SELECT farmHash64('Moscow') 41 | ┌─farmHash64('Moscow')─┐ 42 | │ 5992710078453357409 │ 43 | └──────────────────────┘ 44 | */ 45 | s := []byte("Moscow") 46 | fmt.Print("ClickHouse: ") 47 | fmt.Println(city.CH64(s)) 48 | fmt.Print("CityHash: ") 49 | fmt.Println(city.Hash64(s)) 50 | // Output: 51 | // ClickHouse: 12507901496292878638 52 | // CityHash: 5992710078453357409 53 | } 54 | -------------------------------------------------------------------------------- /fuzz_test.go: -------------------------------------------------------------------------------- 1 | //go:build go1.18 2 | // +build go1.18 3 | 4 | package city 5 | 6 | import ( 7 | "bytes" 8 | "testing" 9 | ) 10 | 11 | var _defaultCorpus = [][]byte{ 12 | nil, 13 | {}, 14 | {1, 2, 3}, 15 | {1, 2, 3, 4, 5, 6}, 16 | []byte("hello"), 17 | []byte("hello world"), 18 | bytes.Repeat([]byte("hello"), 100), 19 | } 20 | 21 | func FuzzHash128(f *testing.F) { 22 | for _, s := range _defaultCorpus { 23 | f.Add(s) 24 | } 25 | f.Fuzz(func(t *testing.T, data []byte) { 26 | Hash128(data) 27 | }) 28 | } 29 | 30 | func FuzzHash64(f *testing.F) { 31 | for _, s := range _defaultCorpus { 32 | f.Add(s) 33 | } 34 | f.Fuzz(func(t *testing.T, data []byte) { 35 | Hash64(data) 36 | }) 37 | } 38 | 39 | func FuzzHash32(f *testing.F) { 40 | for _, s := range _defaultCorpus { 41 | f.Add(s) 42 | } 43 | f.Fuzz(func(t *testing.T, data []byte) { 44 | Hash32(data) 45 | }) 46 | } 47 | 48 | func FuzzCH64(f *testing.F) { 49 | for _, s := range _defaultCorpus { 50 | f.Add(s) 51 | } 52 | f.Fuzz(func(t *testing.T, data []byte) { 53 | CH64(data) 54 | }) 55 | } 56 | 57 | func FuzzCH128(f *testing.F) { 58 | for _, s := range _defaultCorpus { 59 | f.Add(s) 60 | } 61 | f.Fuzz(func(t *testing.T, data []byte) { 62 | CH128(data) 63 | }) 64 | } 65 | -------------------------------------------------------------------------------- /go.coverage.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | go test -race -v -coverpkg=./... -coverprofile=profile.out ./... 6 | go tool cover -func profile.out 7 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/go-faster/city 2 | 3 | go 1.17 4 | -------------------------------------------------------------------------------- /go.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | echo "test" 6 | go test --timeout 5m ./... 7 | 8 | echo "test -race" 9 | go test --timeout 5m -race ./... 10 | -------------------------------------------------------------------------------- /internal/citygen/main.go: -------------------------------------------------------------------------------- 1 | // Binary citygen generates 2 | package main 3 | 4 | import ( 5 | "encoding/json" 6 | "math/rand" 7 | "os" 8 | 9 | "github.com/go-faster/city" 10 | ) 11 | 12 | type Entry struct { 13 | Input string 14 | City32 uint32 15 | City64 uint64 16 | City128 city.U128 17 | City128Seed city.U128 18 | ClickHouse64 uint64 19 | ClickHouse128 city.U128 20 | ClickHouse128Seed city.U128 21 | } 22 | 23 | type Data struct { 24 | Seed city.U128 25 | Entries []Entry 26 | } 27 | 28 | type testDataStruct struct { 29 | in string 30 | } 31 | 32 | var testData = []testDataStruct{ 33 | {""}, 34 | {"a"}, 35 | {"ab"}, 36 | {"abc"}, 37 | {"abcd"}, 38 | {"abcde"}, 39 | {"abcdef"}, 40 | {"abcdefg"}, 41 | {"abcdefgh"}, 42 | {"abcdefghi"}, 43 | {"0123456789"}, 44 | {"0123456789 "}, 45 | {"0123456789-0"}, 46 | {"0123456789~01"}, 47 | {"0123456789#012"}, 48 | {"0123456789@0123"}, 49 | {"0123456789'01234"}, 50 | {"0123456789=012345"}, 51 | {"0123456789+0123456"}, 52 | {"0123456789*01234567"}, 53 | {"0123456789&012345678"}, 54 | {"0123456789^0123456789"}, 55 | {"0123456789%0123456789£"}, 56 | {"0123456789$0123456789!0"}, 57 | {"size: a.out: bad magic"}, 58 | {"Nepal premier won't resign."}, 59 | {"C is as portable as Stonehedge!!"}, 60 | {"Discard medicine more than two years old."}, 61 | {"I wouldn't marry him with a ten foot pole."}, 62 | {"If the enemy is within range, then so are you."}, 63 | {"The major problem is with sendmail. -Mark Horton"}, 64 | {"How can you write a big system without C++? -Paul Glick"}, 65 | {"He who has a shady past knows that nice guys finish last."}, 66 | {"Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave"}, 67 | {"His money is twice tainted: 'taint yours and 'taint mine."}, 68 | {"The days of the digital watch are numbered. -Tom Stoppard"}, 69 | {"For every action there is an equal and opposite government program."}, 70 | {"You remind me of a TV show, but that's all right: I watch it anyway."}, 71 | {"It's well we cannot hear the screams/That we create in others' dreams."}, 72 | {"Give me a rock, paper and scissors and I will move the world. CCFestoon"}, 73 | {"It's a tiny change to the code and not completely disgusting. - Bob Manchek"}, 74 | {"There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977"}, 75 | {"Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley"}, 76 | {"The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule"}, 77 | {"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."}, 78 | } 79 | 80 | var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !@#$%^*()_-+=,.?") 81 | 82 | func randStr(n int) string { 83 | b := make([]rune, n) 84 | for i := range b { 85 | b[i] = letterRunes[rand.Intn(len(letterRunes))] 86 | } 87 | return string(b) 88 | } 89 | 90 | func main() { 91 | rand.Seed(1) 92 | seed := city.U128{ 93 | Low: uint64(rand.Int63()), High: uint64(rand.Int63()), 94 | } 95 | d := Data{ 96 | Seed: seed, 97 | } 98 | inputs := []string{ 99 | "Moscow", 100 | "ClickHouse", 101 | } 102 | 103 | for _, v := range testData { 104 | inputs = append(inputs, v.in) 105 | } 106 | 107 | for i := 0; i < 10; i++ { 108 | l := rand.Intn(256) + 1 109 | inputs = append(inputs, randStr(l)) 110 | } 111 | 112 | for _, in := range inputs { 113 | s := []byte(in) 114 | e := Entry{ 115 | Input: in, 116 | City32: city.Hash32(s), 117 | City64: city.Hash64(s), 118 | City128: city.Hash128(s), 119 | City128Seed: city.Hash128Seed(s, seed), 120 | ClickHouse64: city.CH64(s), 121 | ClickHouse128: city.CH128(s), 122 | ClickHouse128Seed: city.CH128Seed(s, seed), 123 | } 124 | d.Entries = append(d.Entries, e) 125 | } 126 | 127 | e := json.NewEncoder(os.Stdout) 128 | e.SetIndent("", " ") 129 | if err := e.Encode(d); err != nil { 130 | panic(err) 131 | } 132 | } 133 | --------------------------------------------------------------------------------