Update
This commit is contained in:
1 parent
3530afb854
commit
6903fcff27
2146 files changed
+112256
-190703
No files matched your search
+242
@@ -0,0 +1,242 @@
|
||||
//go:build generate
|
||||
|
||||
//go:generate go run $GOFILE
|
||||
|
||||
// Copyright (c) 2026 Karl Gaissmaier
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
// Package main generates a lookup table for longest-prefix-match (LPM) operations
|
||||
// in the BART routing table.
|
||||
//
|
||||
// This generator creates a precomputed lookup table (LookupTbl) that enables fast
|
||||
// prefix matching by replacing iterative backtracking with a single bitset intersection.
|
||||
//
|
||||
// The core idea:
|
||||
//
|
||||
// In a complete binary tree representation of prefixes, finding the longest matching
|
||||
// prefix requires checking a node and all its ancestors (parent, grandparent, etc.).
|
||||
// Instead of iterating through ancestors at runtime (idx >>= 1 in a loop), this table
|
||||
// precomputes all ancestors for each index.
|
||||
//
|
||||
// Binary tree structure:
|
||||
// - Each index i has a parent at i>>1 (integer division by 2)
|
||||
// - Index 1 is the root (represents the default route)
|
||||
// - Indices 2-255 form a 7-level binary tree
|
||||
//
|
||||
// Example: Index 13 (binary: 0b1101) has ancestors:
|
||||
// - 13 itself (0b1101)
|
||||
// - 6 = 13>>1 (0b0110) - parent
|
||||
// - 3 = 6>>1 (0b0011) - grandparent
|
||||
// - 1 = 3>>1 (0b0001) - root
|
||||
//
|
||||
// With this table, checking if any ancestor exists in a node's prefix set becomes:
|
||||
//
|
||||
// node.prefixes.Intersects(&LookupTbl[idx])
|
||||
//
|
||||
// instead of a loop with multiple Test() calls.
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"github.com/gaissmai/bart/internal/bitset"
|
||||
)
|
||||
|
||||
var (
|
||||
thisFname = os.Getenv("GOFILE")
|
||||
outFname = "lookuptblgenerated.go"
|
||||
)
|
||||
|
||||
// data holds the template variables for code generation.
|
||||
// The LookupTbl field is populated immediately with the generated table string
|
||||
var data = struct {
|
||||
File string
|
||||
LookupTbl string
|
||||
}{
|
||||
File: thisFname,
|
||||
LookupTbl: genLookupTbl(),
|
||||
}
|
||||
|
||||
// colored prefix for informational and error messages
|
||||
const (
|
||||
INFO = "\x1b[34mINFO:\x1b[0m"
|
||||
DIE = "\x1b[31mERROR:\x1b[0m"
|
||||
)
|
||||
|
||||
func main() {
|
||||
outFile, err := os.Create(outFname)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%s %v\n", DIE, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Parse the template ...
|
||||
t := template.Must(template.New("foo").Parse(codeTemplate))
|
||||
|
||||
// ... and execute it with our data
|
||||
err = t.Execute(outFile, data)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%s %v\n", DIE, err)
|
||||
_ = outFile.Close()
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Ensure the file is properly closed before formatting
|
||||
if err := outFile.Close(); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%s %v\n", DIE, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Fprintf(os.Stdout, "%s ✓ Generated %s\n", INFO, outFname)
|
||||
|
||||
// Run goimports to organize imports and format the code
|
||||
goimports := exec.Command("goimports", "-w", outFname)
|
||||
fmt.Fprintf(os.Stdout, "%s Running goimports on %s\n", INFO, outFname)
|
||||
if out, err := goimports.CombinedOutput(); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%s %s\n", DIE, string(out))
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Fprintf(os.Stdout, "%s ✓ goimports completed\n", INFO)
|
||||
|
||||
// Run gofumpt for additional formatting consistency
|
||||
gofumpt := exec.Command("gofumpt", "-w", outFname)
|
||||
fmt.Fprintf(os.Stdout, "%s Running gofumpt on %s\n", INFO, outFname)
|
||||
if out, err := gofumpt.CombinedOutput(); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%s %s\n", DIE, string(out))
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Fprintf(os.Stdout, "%s ✓ gofumpt completed\n", INFO)
|
||||
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
// genLookupTbl generates the lookup table as a formatted string.
|
||||
//
|
||||
// For each index i (1-255), the table stores a bitset containing:
|
||||
// - i itself
|
||||
// - all binary ancestors of i (i>>1, i>>2, i>>3, ...)
|
||||
//
|
||||
// Example: For index 13 (binary: 1101):
|
||||
// - Set bit 13 (1101)
|
||||
// - Set bit 6 (0110) = 13>>1
|
||||
// - Set bit 3 (0011) = 6>>1
|
||||
// - Set bit 1 (0001) = 3>>1
|
||||
//
|
||||
// This precomputation allows replacing a loop of bitset tests
|
||||
// with a single bitset intersection operation during longest-prefix-match.
|
||||
|
||||
// genLookupTbl generates the lookup table as a formatted string.
|
||||
//
|
||||
// For each index i (1-255), the table stores a BitSet256 containing:
|
||||
// - i itself (the current node)
|
||||
// - all binary ancestors of i (obtained by repeatedly right-shifting: i>>1, i>>2, ...)
|
||||
//
|
||||
// The algorithm walks up the binary tree from each leaf to the root (index 1).
|
||||
// Each right-shift operation (i >>= 1) moves from a child to its parent node:
|
||||
// - Even indices (LSB=0) are left children: parent = i/2
|
||||
// - Odd indices (LSB=1) are right children: parent = (i-1)/2
|
||||
// - Both cases are handled by integer division via right-shift
|
||||
//
|
||||
// Example walkthrough for index 13 (binary: 0b00001101):
|
||||
//
|
||||
// Iteration 1: i=13 (0b00001101) => Set bit 13
|
||||
// Iteration 2: i=6 (0b00000110) => Set bit 6 (parent of 13)
|
||||
// Iteration 3: i=3 (0b00000011) => Set bit 3 (parent of 6)
|
||||
// Iteration 4: i=1 (0b00000001) => Set bit 1 (root)
|
||||
// Iteration 5: i=0 → Loop terminates
|
||||
//
|
||||
// Result: BitSet256 with bits {1, 3, 6, 13} set
|
||||
//
|
||||
// This allows longest-prefix-match to be computed with a single bitset intersection:
|
||||
//
|
||||
// // Fast O(1) check using precomputed ancestors
|
||||
// return node.prefixes.Intersects(&LookupTbl[idx])
|
||||
//
|
||||
// instead of iterative backtracking:
|
||||
//
|
||||
// // Slow O(log n) loop checking each ancestor individually
|
||||
// for ; idx > 0; idx >>= 1 {
|
||||
// if node.prefixes.Test(idx) {
|
||||
// return true
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// The generated string is formatted for embedding into Go source code.
|
||||
func genLookupTbl() string {
|
||||
// Initialize the lookup table with 256 entries (one per uint8 value)
|
||||
lookupTbl := [256]bitset.BitSet256{}
|
||||
|
||||
for idx := 1; idx <= 255; idx++ {
|
||||
// Walk up the binary tree by repeatedly right-shifting
|
||||
// Each iteration moves to the parent node (idx >> 1)
|
||||
for i := idx; i > 0; i >>= 1 {
|
||||
lookupTbl[idx].Set(uint8(i))
|
||||
}
|
||||
}
|
||||
|
||||
// Convert the lookup table to a formatted string for the generated code
|
||||
builder := strings.Builder{}
|
||||
|
||||
// Index 0 is invalid (no valid prefix maps to 0)
|
||||
fmt.Fprintf(&builder, " /* idx: %3d */ %#v, // %s\n", 0, lookupTbl[0], "invalid")
|
||||
|
||||
// Format each valid index with its bitset and the list of set bits, e.g.
|
||||
// /* idx: 13 */ {0x204a, 0x0, 0x0, 0x0}, // [1 3 6 13]
|
||||
for idx := 1; idx < 256; idx++ {
|
||||
fmt.Fprintf(&builder, " /* idx: %3d */ %#v, // %v\n", idx, lookupTbl[idx], lookupTbl[idx].Bits())
|
||||
}
|
||||
|
||||
return builder.String()
|
||||
}
|
||||
|
||||
// codeTemplate is the Go source template for the generated lookuptbl_gen.go file.
|
||||
// It embeds the precomputed lookup table and includes comprehensive documentation
|
||||
// about its structure, usage, and performance benefits.
|
||||
//
|
||||
// The template defines:
|
||||
// - Package-level documentation explaining the LPM optimization
|
||||
// - The LookupTbl variable with all 256 precomputed bitsets
|
||||
// - Usage examples comparing the fast (Intersects) vs slow (loop) approach
|
||||
// - Warnings about not mutating the read-only table
|
||||
const codeTemplate = `// Code generated by {{.File}}; DO NOT EDIT.
|
||||
|
||||
// Copyright (c) 2026 Karl Gaissmaier
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
// Package lpm (longest-prefix-match) contains the lookup table with which
|
||||
// the backtracking for the lpm in the complete binary tree of the prefixes
|
||||
// can be replaced by a fast bitset operation.
|
||||
package lpm
|
||||
|
||||
// LookupTbl is a precomputed read‑only table used in hot paths.
|
||||
//
|
||||
// It allows a one-shot bitset intersection algorithm:
|
||||
// Each entry i encodes i and all its binary ancestors (i>>1, i>>2, ...).
|
||||
//
|
||||
// idx must be the uint8 produced by art.OctetToIdx or art.PfxToIdx (0 is invalid).
|
||||
//
|
||||
// Usage:
|
||||
//
|
||||
// func (n *bartNode[V]) contains(idx uint8) bool {
|
||||
// return n.prefixes.Intersects(&lpm.LookupTbl[idx])
|
||||
// }
|
||||
//
|
||||
// instead of a sequence of single bitset tests:
|
||||
//
|
||||
// func (n *bartNode[V]) contains(idx uint8) bool {
|
||||
// for ; idx > 0; idx >>= 1 {
|
||||
// if n.prefixes.Test(idx) {
|
||||
// return true
|
||||
// }
|
||||
// }
|
||||
// return false
|
||||
// }
|
||||
//
|
||||
// DO NOT MUTATE: Precomputed read‑only table used in hot paths.
|
||||
//
|
||||
//nolint:gochecknoglobals
|
||||
var LookupTbl = [256]bitset.BitSet256{
|
||||
{{.LookupTbl}} }`
|
||||
+297
@@ -0,0 +1,297 @@
|
||||
// Code generated by generate_lookuptbl.go; DO NOT EDIT.
|
||||
|
||||
// Copyright (c) 2026 Karl Gaissmaier
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
// Package lpm (longest-prefix-match) contains the lookup table with which
|
||||
// the backtracking for the lpm in the complete binary tree of the prefixes
|
||||
// can be replaced by a fast bitset operation.
|
||||
package lpm
|
||||
|
||||
import "github.com/gaissmai/bart/internal/bitset"
|
||||
|
||||
// LookupTbl is a precomputed read‑only table used in hot paths.
|
||||
//
|
||||
// It allows a one-shot bitset intersection algorithm:
|
||||
// Each entry i encodes i and all its binary ancestors (i>>1, i>>2, ...).
|
||||
//
|
||||
// idx must be the uint8 produced by art.OctetToIdx or art.PfxToIdx (0 is invalid).
|
||||
//
|
||||
// Usage:
|
||||
//
|
||||
// func (n *bartNode[V]) contains(idx uint8) bool {
|
||||
// return n.prefixes.Intersects(&lpm.LookupTbl[idx])
|
||||
// }
|
||||
//
|
||||
// instead of a sequence of single bitset tests:
|
||||
//
|
||||
// func (n *bartNode[V]) contains(idx uint8) bool {
|
||||
// for ; idx > 0; idx >>= 1 {
|
||||
// if n.prefixes.Test(idx) {
|
||||
// return true
|
||||
// }
|
||||
// }
|
||||
// return false
|
||||
// }
|
||||
//
|
||||
// DO NOT MUTATE: Precomputed read‑only table used in hot paths.
|
||||
//
|
||||
//nolint:gochecknoglobals
|
||||
var LookupTbl = [256]bitset.BitSet256{
|
||||
/* idx: 0 */ {0x0, 0x0, 0x0, 0x0}, // invalid
|
||||
/* idx: 1 */ {0x2, 0x0, 0x0, 0x0}, // [1]
|
||||
/* idx: 2 */ {0x6, 0x0, 0x0, 0x0}, // [1 2]
|
||||
/* idx: 3 */ {0xa, 0x0, 0x0, 0x0}, // [1 3]
|
||||
/* idx: 4 */ {0x16, 0x0, 0x0, 0x0}, // [1 2 4]
|
||||
/* idx: 5 */ {0x26, 0x0, 0x0, 0x0}, // [1 2 5]
|
||||
/* idx: 6 */ {0x4a, 0x0, 0x0, 0x0}, // [1 3 6]
|
||||
/* idx: 7 */ {0x8a, 0x0, 0x0, 0x0}, // [1 3 7]
|
||||
/* idx: 8 */ {0x116, 0x0, 0x0, 0x0}, // [1 2 4 8]
|
||||
/* idx: 9 */ {0x216, 0x0, 0x0, 0x0}, // [1 2 4 9]
|
||||
/* idx: 10 */ {0x426, 0x0, 0x0, 0x0}, // [1 2 5 10]
|
||||
/* idx: 11 */ {0x826, 0x0, 0x0, 0x0}, // [1 2 5 11]
|
||||
/* idx: 12 */ {0x104a, 0x0, 0x0, 0x0}, // [1 3 6 12]
|
||||
/* idx: 13 */ {0x204a, 0x0, 0x0, 0x0}, // [1 3 6 13]
|
||||
/* idx: 14 */ {0x408a, 0x0, 0x0, 0x0}, // [1 3 7 14]
|
||||
/* idx: 15 */ {0x808a, 0x0, 0x0, 0x0}, // [1 3 7 15]
|
||||
/* idx: 16 */ {0x10116, 0x0, 0x0, 0x0}, // [1 2 4 8 16]
|
||||
/* idx: 17 */ {0x20116, 0x0, 0x0, 0x0}, // [1 2 4 8 17]
|
||||
/* idx: 18 */ {0x40216, 0x0, 0x0, 0x0}, // [1 2 4 9 18]
|
||||
/* idx: 19 */ {0x80216, 0x0, 0x0, 0x0}, // [1 2 4 9 19]
|
||||
/* idx: 20 */ {0x100426, 0x0, 0x0, 0x0}, // [1 2 5 10 20]
|
||||
/* idx: 21 */ {0x200426, 0x0, 0x0, 0x0}, // [1 2 5 10 21]
|
||||
/* idx: 22 */ {0x400826, 0x0, 0x0, 0x0}, // [1 2 5 11 22]
|
||||
/* idx: 23 */ {0x800826, 0x0, 0x0, 0x0}, // [1 2 5 11 23]
|
||||
/* idx: 24 */ {0x100104a, 0x0, 0x0, 0x0}, // [1 3 6 12 24]
|
||||
/* idx: 25 */ {0x200104a, 0x0, 0x0, 0x0}, // [1 3 6 12 25]
|
||||
/* idx: 26 */ {0x400204a, 0x0, 0x0, 0x0}, // [1 3 6 13 26]
|
||||
/* idx: 27 */ {0x800204a, 0x0, 0x0, 0x0}, // [1 3 6 13 27]
|
||||
/* idx: 28 */ {0x1000408a, 0x0, 0x0, 0x0}, // [1 3 7 14 28]
|
||||
/* idx: 29 */ {0x2000408a, 0x0, 0x0, 0x0}, // [1 3 7 14 29]
|
||||
/* idx: 30 */ {0x4000808a, 0x0, 0x0, 0x0}, // [1 3 7 15 30]
|
||||
/* idx: 31 */ {0x8000808a, 0x0, 0x0, 0x0}, // [1 3 7 15 31]
|
||||
/* idx: 32 */ {0x100010116, 0x0, 0x0, 0x0}, // [1 2 4 8 16 32]
|
||||
/* idx: 33 */ {0x200010116, 0x0, 0x0, 0x0}, // [1 2 4 8 16 33]
|
||||
/* idx: 34 */ {0x400020116, 0x0, 0x0, 0x0}, // [1 2 4 8 17 34]
|
||||
/* idx: 35 */ {0x800020116, 0x0, 0x0, 0x0}, // [1 2 4 8 17 35]
|
||||
/* idx: 36 */ {0x1000040216, 0x0, 0x0, 0x0}, // [1 2 4 9 18 36]
|
||||
/* idx: 37 */ {0x2000040216, 0x0, 0x0, 0x0}, // [1 2 4 9 18 37]
|
||||
/* idx: 38 */ {0x4000080216, 0x0, 0x0, 0x0}, // [1 2 4 9 19 38]
|
||||
/* idx: 39 */ {0x8000080216, 0x0, 0x0, 0x0}, // [1 2 4 9 19 39]
|
||||
/* idx: 40 */ {0x10000100426, 0x0, 0x0, 0x0}, // [1 2 5 10 20 40]
|
||||
/* idx: 41 */ {0x20000100426, 0x0, 0x0, 0x0}, // [1 2 5 10 20 41]
|
||||
/* idx: 42 */ {0x40000200426, 0x0, 0x0, 0x0}, // [1 2 5 10 21 42]
|
||||
/* idx: 43 */ {0x80000200426, 0x0, 0x0, 0x0}, // [1 2 5 10 21 43]
|
||||
/* idx: 44 */ {0x100000400826, 0x0, 0x0, 0x0}, // [1 2 5 11 22 44]
|
||||
/* idx: 45 */ {0x200000400826, 0x0, 0x0, 0x0}, // [1 2 5 11 22 45]
|
||||
/* idx: 46 */ {0x400000800826, 0x0, 0x0, 0x0}, // [1 2 5 11 23 46]
|
||||
/* idx: 47 */ {0x800000800826, 0x0, 0x0, 0x0}, // [1 2 5 11 23 47]
|
||||
/* idx: 48 */ {0x100000100104a, 0x0, 0x0, 0x0}, // [1 3 6 12 24 48]
|
||||
/* idx: 49 */ {0x200000100104a, 0x0, 0x0, 0x0}, // [1 3 6 12 24 49]
|
||||
/* idx: 50 */ {0x400000200104a, 0x0, 0x0, 0x0}, // [1 3 6 12 25 50]
|
||||
/* idx: 51 */ {0x800000200104a, 0x0, 0x0, 0x0}, // [1 3 6 12 25 51]
|
||||
/* idx: 52 */ {0x1000000400204a, 0x0, 0x0, 0x0}, // [1 3 6 13 26 52]
|
||||
/* idx: 53 */ {0x2000000400204a, 0x0, 0x0, 0x0}, // [1 3 6 13 26 53]
|
||||
/* idx: 54 */ {0x4000000800204a, 0x0, 0x0, 0x0}, // [1 3 6 13 27 54]
|
||||
/* idx: 55 */ {0x8000000800204a, 0x0, 0x0, 0x0}, // [1 3 6 13 27 55]
|
||||
/* idx: 56 */ {0x10000001000408a, 0x0, 0x0, 0x0}, // [1 3 7 14 28 56]
|
||||
/* idx: 57 */ {0x20000001000408a, 0x0, 0x0, 0x0}, // [1 3 7 14 28 57]
|
||||
/* idx: 58 */ {0x40000002000408a, 0x0, 0x0, 0x0}, // [1 3 7 14 29 58]
|
||||
/* idx: 59 */ {0x80000002000408a, 0x0, 0x0, 0x0}, // [1 3 7 14 29 59]
|
||||
/* idx: 60 */ {0x100000004000808a, 0x0, 0x0, 0x0}, // [1 3 7 15 30 60]
|
||||
/* idx: 61 */ {0x200000004000808a, 0x0, 0x0, 0x0}, // [1 3 7 15 30 61]
|
||||
/* idx: 62 */ {0x400000008000808a, 0x0, 0x0, 0x0}, // [1 3 7 15 31 62]
|
||||
/* idx: 63 */ {0x800000008000808a, 0x0, 0x0, 0x0}, // [1 3 7 15 31 63]
|
||||
/* idx: 64 */ {0x100010116, 0x1, 0x0, 0x0}, // [1 2 4 8 16 32 64]
|
||||
/* idx: 65 */ {0x100010116, 0x2, 0x0, 0x0}, // [1 2 4 8 16 32 65]
|
||||
/* idx: 66 */ {0x200010116, 0x4, 0x0, 0x0}, // [1 2 4 8 16 33 66]
|
||||
/* idx: 67 */ {0x200010116, 0x8, 0x0, 0x0}, // [1 2 4 8 16 33 67]
|
||||
/* idx: 68 */ {0x400020116, 0x10, 0x0, 0x0}, // [1 2 4 8 17 34 68]
|
||||
/* idx: 69 */ {0x400020116, 0x20, 0x0, 0x0}, // [1 2 4 8 17 34 69]
|
||||
/* idx: 70 */ {0x800020116, 0x40, 0x0, 0x0}, // [1 2 4 8 17 35 70]
|
||||
/* idx: 71 */ {0x800020116, 0x80, 0x0, 0x0}, // [1 2 4 8 17 35 71]
|
||||
/* idx: 72 */ {0x1000040216, 0x100, 0x0, 0x0}, // [1 2 4 9 18 36 72]
|
||||
/* idx: 73 */ {0x1000040216, 0x200, 0x0, 0x0}, // [1 2 4 9 18 36 73]
|
||||
/* idx: 74 */ {0x2000040216, 0x400, 0x0, 0x0}, // [1 2 4 9 18 37 74]
|
||||
/* idx: 75 */ {0x2000040216, 0x800, 0x0, 0x0}, // [1 2 4 9 18 37 75]
|
||||
/* idx: 76 */ {0x4000080216, 0x1000, 0x0, 0x0}, // [1 2 4 9 19 38 76]
|
||||
/* idx: 77 */ {0x4000080216, 0x2000, 0x0, 0x0}, // [1 2 4 9 19 38 77]
|
||||
/* idx: 78 */ {0x8000080216, 0x4000, 0x0, 0x0}, // [1 2 4 9 19 39 78]
|
||||
/* idx: 79 */ {0x8000080216, 0x8000, 0x0, 0x0}, // [1 2 4 9 19 39 79]
|
||||
/* idx: 80 */ {0x10000100426, 0x10000, 0x0, 0x0}, // [1 2 5 10 20 40 80]
|
||||
/* idx: 81 */ {0x10000100426, 0x20000, 0x0, 0x0}, // [1 2 5 10 20 40 81]
|
||||
/* idx: 82 */ {0x20000100426, 0x40000, 0x0, 0x0}, // [1 2 5 10 20 41 82]
|
||||
/* idx: 83 */ {0x20000100426, 0x80000, 0x0, 0x0}, // [1 2 5 10 20 41 83]
|
||||
/* idx: 84 */ {0x40000200426, 0x100000, 0x0, 0x0}, // [1 2 5 10 21 42 84]
|
||||
/* idx: 85 */ {0x40000200426, 0x200000, 0x0, 0x0}, // [1 2 5 10 21 42 85]
|
||||
/* idx: 86 */ {0x80000200426, 0x400000, 0x0, 0x0}, // [1 2 5 10 21 43 86]
|
||||
/* idx: 87 */ {0x80000200426, 0x800000, 0x0, 0x0}, // [1 2 5 10 21 43 87]
|
||||
/* idx: 88 */ {0x100000400826, 0x1000000, 0x0, 0x0}, // [1 2 5 11 22 44 88]
|
||||
/* idx: 89 */ {0x100000400826, 0x2000000, 0x0, 0x0}, // [1 2 5 11 22 44 89]
|
||||
/* idx: 90 */ {0x200000400826, 0x4000000, 0x0, 0x0}, // [1 2 5 11 22 45 90]
|
||||
/* idx: 91 */ {0x200000400826, 0x8000000, 0x0, 0x0}, // [1 2 5 11 22 45 91]
|
||||
/* idx: 92 */ {0x400000800826, 0x10000000, 0x0, 0x0}, // [1 2 5 11 23 46 92]
|
||||
/* idx: 93 */ {0x400000800826, 0x20000000, 0x0, 0x0}, // [1 2 5 11 23 46 93]
|
||||
/* idx: 94 */ {0x800000800826, 0x40000000, 0x0, 0x0}, // [1 2 5 11 23 47 94]
|
||||
/* idx: 95 */ {0x800000800826, 0x80000000, 0x0, 0x0}, // [1 2 5 11 23 47 95]
|
||||
/* idx: 96 */ {0x100000100104a, 0x100000000, 0x0, 0x0}, // [1 3 6 12 24 48 96]
|
||||
/* idx: 97 */ {0x100000100104a, 0x200000000, 0x0, 0x0}, // [1 3 6 12 24 48 97]
|
||||
/* idx: 98 */ {0x200000100104a, 0x400000000, 0x0, 0x0}, // [1 3 6 12 24 49 98]
|
||||
/* idx: 99 */ {0x200000100104a, 0x800000000, 0x0, 0x0}, // [1 3 6 12 24 49 99]
|
||||
/* idx: 100 */ {0x400000200104a, 0x1000000000, 0x0, 0x0}, // [1 3 6 12 25 50 100]
|
||||
/* idx: 101 */ {0x400000200104a, 0x2000000000, 0x0, 0x0}, // [1 3 6 12 25 50 101]
|
||||
/* idx: 102 */ {0x800000200104a, 0x4000000000, 0x0, 0x0}, // [1 3 6 12 25 51 102]
|
||||
/* idx: 103 */ {0x800000200104a, 0x8000000000, 0x0, 0x0}, // [1 3 6 12 25 51 103]
|
||||
/* idx: 104 */ {0x1000000400204a, 0x10000000000, 0x0, 0x0}, // [1 3 6 13 26 52 104]
|
||||
/* idx: 105 */ {0x1000000400204a, 0x20000000000, 0x0, 0x0}, // [1 3 6 13 26 52 105]
|
||||
/* idx: 106 */ {0x2000000400204a, 0x40000000000, 0x0, 0x0}, // [1 3 6 13 26 53 106]
|
||||
/* idx: 107 */ {0x2000000400204a, 0x80000000000, 0x0, 0x0}, // [1 3 6 13 26 53 107]
|
||||
/* idx: 108 */ {0x4000000800204a, 0x100000000000, 0x0, 0x0}, // [1 3 6 13 27 54 108]
|
||||
/* idx: 109 */ {0x4000000800204a, 0x200000000000, 0x0, 0x0}, // [1 3 6 13 27 54 109]
|
||||
/* idx: 110 */ {0x8000000800204a, 0x400000000000, 0x0, 0x0}, // [1 3 6 13 27 55 110]
|
||||
/* idx: 111 */ {0x8000000800204a, 0x800000000000, 0x0, 0x0}, // [1 3 6 13 27 55 111]
|
||||
/* idx: 112 */ {0x10000001000408a, 0x1000000000000, 0x0, 0x0}, // [1 3 7 14 28 56 112]
|
||||
/* idx: 113 */ {0x10000001000408a, 0x2000000000000, 0x0, 0x0}, // [1 3 7 14 28 56 113]
|
||||
/* idx: 114 */ {0x20000001000408a, 0x4000000000000, 0x0, 0x0}, // [1 3 7 14 28 57 114]
|
||||
/* idx: 115 */ {0x20000001000408a, 0x8000000000000, 0x0, 0x0}, // [1 3 7 14 28 57 115]
|
||||
/* idx: 116 */ {0x40000002000408a, 0x10000000000000, 0x0, 0x0}, // [1 3 7 14 29 58 116]
|
||||
/* idx: 117 */ {0x40000002000408a, 0x20000000000000, 0x0, 0x0}, // [1 3 7 14 29 58 117]
|
||||
/* idx: 118 */ {0x80000002000408a, 0x40000000000000, 0x0, 0x0}, // [1 3 7 14 29 59 118]
|
||||
/* idx: 119 */ {0x80000002000408a, 0x80000000000000, 0x0, 0x0}, // [1 3 7 14 29 59 119]
|
||||
/* idx: 120 */ {0x100000004000808a, 0x100000000000000, 0x0, 0x0}, // [1 3 7 15 30 60 120]
|
||||
/* idx: 121 */ {0x100000004000808a, 0x200000000000000, 0x0, 0x0}, // [1 3 7 15 30 60 121]
|
||||
/* idx: 122 */ {0x200000004000808a, 0x400000000000000, 0x0, 0x0}, // [1 3 7 15 30 61 122]
|
||||
/* idx: 123 */ {0x200000004000808a, 0x800000000000000, 0x0, 0x0}, // [1 3 7 15 30 61 123]
|
||||
/* idx: 124 */ {0x400000008000808a, 0x1000000000000000, 0x0, 0x0}, // [1 3 7 15 31 62 124]
|
||||
/* idx: 125 */ {0x400000008000808a, 0x2000000000000000, 0x0, 0x0}, // [1 3 7 15 31 62 125]
|
||||
/* idx: 126 */ {0x800000008000808a, 0x4000000000000000, 0x0, 0x0}, // [1 3 7 15 31 63 126]
|
||||
/* idx: 127 */ {0x800000008000808a, 0x8000000000000000, 0x0, 0x0}, // [1 3 7 15 31 63 127]
|
||||
/* idx: 128 */ {0x100010116, 0x1, 0x1, 0x0}, // [1 2 4 8 16 32 64 128]
|
||||
/* idx: 129 */ {0x100010116, 0x1, 0x2, 0x0}, // [1 2 4 8 16 32 64 129]
|
||||
/* idx: 130 */ {0x100010116, 0x2, 0x4, 0x0}, // [1 2 4 8 16 32 65 130]
|
||||
/* idx: 131 */ {0x100010116, 0x2, 0x8, 0x0}, // [1 2 4 8 16 32 65 131]
|
||||
/* idx: 132 */ {0x200010116, 0x4, 0x10, 0x0}, // [1 2 4 8 16 33 66 132]
|
||||
/* idx: 133 */ {0x200010116, 0x4, 0x20, 0x0}, // [1 2 4 8 16 33 66 133]
|
||||
/* idx: 134 */ {0x200010116, 0x8, 0x40, 0x0}, // [1 2 4 8 16 33 67 134]
|
||||
/* idx: 135 */ {0x200010116, 0x8, 0x80, 0x0}, // [1 2 4 8 16 33 67 135]
|
||||
/* idx: 136 */ {0x400020116, 0x10, 0x100, 0x0}, // [1 2 4 8 17 34 68 136]
|
||||
/* idx: 137 */ {0x400020116, 0x10, 0x200, 0x0}, // [1 2 4 8 17 34 68 137]
|
||||
/* idx: 138 */ {0x400020116, 0x20, 0x400, 0x0}, // [1 2 4 8 17 34 69 138]
|
||||
/* idx: 139 */ {0x400020116, 0x20, 0x800, 0x0}, // [1 2 4 8 17 34 69 139]
|
||||
/* idx: 140 */ {0x800020116, 0x40, 0x1000, 0x0}, // [1 2 4 8 17 35 70 140]
|
||||
/* idx: 141 */ {0x800020116, 0x40, 0x2000, 0x0}, // [1 2 4 8 17 35 70 141]
|
||||
/* idx: 142 */ {0x800020116, 0x80, 0x4000, 0x0}, // [1 2 4 8 17 35 71 142]
|
||||
/* idx: 143 */ {0x800020116, 0x80, 0x8000, 0x0}, // [1 2 4 8 17 35 71 143]
|
||||
/* idx: 144 */ {0x1000040216, 0x100, 0x10000, 0x0}, // [1 2 4 9 18 36 72 144]
|
||||
/* idx: 145 */ {0x1000040216, 0x100, 0x20000, 0x0}, // [1 2 4 9 18 36 72 145]
|
||||
/* idx: 146 */ {0x1000040216, 0x200, 0x40000, 0x0}, // [1 2 4 9 18 36 73 146]
|
||||
/* idx: 147 */ {0x1000040216, 0x200, 0x80000, 0x0}, // [1 2 4 9 18 36 73 147]
|
||||
/* idx: 148 */ {0x2000040216, 0x400, 0x100000, 0x0}, // [1 2 4 9 18 37 74 148]
|
||||
/* idx: 149 */ {0x2000040216, 0x400, 0x200000, 0x0}, // [1 2 4 9 18 37 74 149]
|
||||
/* idx: 150 */ {0x2000040216, 0x800, 0x400000, 0x0}, // [1 2 4 9 18 37 75 150]
|
||||
/* idx: 151 */ {0x2000040216, 0x800, 0x800000, 0x0}, // [1 2 4 9 18 37 75 151]
|
||||
/* idx: 152 */ {0x4000080216, 0x1000, 0x1000000, 0x0}, // [1 2 4 9 19 38 76 152]
|
||||
/* idx: 153 */ {0x4000080216, 0x1000, 0x2000000, 0x0}, // [1 2 4 9 19 38 76 153]
|
||||
/* idx: 154 */ {0x4000080216, 0x2000, 0x4000000, 0x0}, // [1 2 4 9 19 38 77 154]
|
||||
/* idx: 155 */ {0x4000080216, 0x2000, 0x8000000, 0x0}, // [1 2 4 9 19 38 77 155]
|
||||
/* idx: 156 */ {0x8000080216, 0x4000, 0x10000000, 0x0}, // [1 2 4 9 19 39 78 156]
|
||||
/* idx: 157 */ {0x8000080216, 0x4000, 0x20000000, 0x0}, // [1 2 4 9 19 39 78 157]
|
||||
/* idx: 158 */ {0x8000080216, 0x8000, 0x40000000, 0x0}, // [1 2 4 9 19 39 79 158]
|
||||
/* idx: 159 */ {0x8000080216, 0x8000, 0x80000000, 0x0}, // [1 2 4 9 19 39 79 159]
|
||||
/* idx: 160 */ {0x10000100426, 0x10000, 0x100000000, 0x0}, // [1 2 5 10 20 40 80 160]
|
||||
/* idx: 161 */ {0x10000100426, 0x10000, 0x200000000, 0x0}, // [1 2 5 10 20 40 80 161]
|
||||
/* idx: 162 */ {0x10000100426, 0x20000, 0x400000000, 0x0}, // [1 2 5 10 20 40 81 162]
|
||||
/* idx: 163 */ {0x10000100426, 0x20000, 0x800000000, 0x0}, // [1 2 5 10 20 40 81 163]
|
||||
/* idx: 164 */ {0x20000100426, 0x40000, 0x1000000000, 0x0}, // [1 2 5 10 20 41 82 164]
|
||||
/* idx: 165 */ {0x20000100426, 0x40000, 0x2000000000, 0x0}, // [1 2 5 10 20 41 82 165]
|
||||
/* idx: 166 */ {0x20000100426, 0x80000, 0x4000000000, 0x0}, // [1 2 5 10 20 41 83 166]
|
||||
/* idx: 167 */ {0x20000100426, 0x80000, 0x8000000000, 0x0}, // [1 2 5 10 20 41 83 167]
|
||||
/* idx: 168 */ {0x40000200426, 0x100000, 0x10000000000, 0x0}, // [1 2 5 10 21 42 84 168]
|
||||
/* idx: 169 */ {0x40000200426, 0x100000, 0x20000000000, 0x0}, // [1 2 5 10 21 42 84 169]
|
||||
/* idx: 170 */ {0x40000200426, 0x200000, 0x40000000000, 0x0}, // [1 2 5 10 21 42 85 170]
|
||||
/* idx: 171 */ {0x40000200426, 0x200000, 0x80000000000, 0x0}, // [1 2 5 10 21 42 85 171]
|
||||
/* idx: 172 */ {0x80000200426, 0x400000, 0x100000000000, 0x0}, // [1 2 5 10 21 43 86 172]
|
||||
/* idx: 173 */ {0x80000200426, 0x400000, 0x200000000000, 0x0}, // [1 2 5 10 21 43 86 173]
|
||||
/* idx: 174 */ {0x80000200426, 0x800000, 0x400000000000, 0x0}, // [1 2 5 10 21 43 87 174]
|
||||
/* idx: 175 */ {0x80000200426, 0x800000, 0x800000000000, 0x0}, // [1 2 5 10 21 43 87 175]
|
||||
/* idx: 176 */ {0x100000400826, 0x1000000, 0x1000000000000, 0x0}, // [1 2 5 11 22 44 88 176]
|
||||
/* idx: 177 */ {0x100000400826, 0x1000000, 0x2000000000000, 0x0}, // [1 2 5 11 22 44 88 177]
|
||||
/* idx: 178 */ {0x100000400826, 0x2000000, 0x4000000000000, 0x0}, // [1 2 5 11 22 44 89 178]
|
||||
/* idx: 179 */ {0x100000400826, 0x2000000, 0x8000000000000, 0x0}, // [1 2 5 11 22 44 89 179]
|
||||
/* idx: 180 */ {0x200000400826, 0x4000000, 0x10000000000000, 0x0}, // [1 2 5 11 22 45 90 180]
|
||||
/* idx: 181 */ {0x200000400826, 0x4000000, 0x20000000000000, 0x0}, // [1 2 5 11 22 45 90 181]
|
||||
/* idx: 182 */ {0x200000400826, 0x8000000, 0x40000000000000, 0x0}, // [1 2 5 11 22 45 91 182]
|
||||
/* idx: 183 */ {0x200000400826, 0x8000000, 0x80000000000000, 0x0}, // [1 2 5 11 22 45 91 183]
|
||||
/* idx: 184 */ {0x400000800826, 0x10000000, 0x100000000000000, 0x0}, // [1 2 5 11 23 46 92 184]
|
||||
/* idx: 185 */ {0x400000800826, 0x10000000, 0x200000000000000, 0x0}, // [1 2 5 11 23 46 92 185]
|
||||
/* idx: 186 */ {0x400000800826, 0x20000000, 0x400000000000000, 0x0}, // [1 2 5 11 23 46 93 186]
|
||||
/* idx: 187 */ {0x400000800826, 0x20000000, 0x800000000000000, 0x0}, // [1 2 5 11 23 46 93 187]
|
||||
/* idx: 188 */ {0x800000800826, 0x40000000, 0x1000000000000000, 0x0}, // [1 2 5 11 23 47 94 188]
|
||||
/* idx: 189 */ {0x800000800826, 0x40000000, 0x2000000000000000, 0x0}, // [1 2 5 11 23 47 94 189]
|
||||
/* idx: 190 */ {0x800000800826, 0x80000000, 0x4000000000000000, 0x0}, // [1 2 5 11 23 47 95 190]
|
||||
/* idx: 191 */ {0x800000800826, 0x80000000, 0x8000000000000000, 0x0}, // [1 2 5 11 23 47 95 191]
|
||||
/* idx: 192 */ {0x100000100104a, 0x100000000, 0x0, 0x1}, // [1 3 6 12 24 48 96 192]
|
||||
/* idx: 193 */ {0x100000100104a, 0x100000000, 0x0, 0x2}, // [1 3 6 12 24 48 96 193]
|
||||
/* idx: 194 */ {0x100000100104a, 0x200000000, 0x0, 0x4}, // [1 3 6 12 24 48 97 194]
|
||||
/* idx: 195 */ {0x100000100104a, 0x200000000, 0x0, 0x8}, // [1 3 6 12 24 48 97 195]
|
||||
/* idx: 196 */ {0x200000100104a, 0x400000000, 0x0, 0x10}, // [1 3 6 12 24 49 98 196]
|
||||
/* idx: 197 */ {0x200000100104a, 0x400000000, 0x0, 0x20}, // [1 3 6 12 24 49 98 197]
|
||||
/* idx: 198 */ {0x200000100104a, 0x800000000, 0x0, 0x40}, // [1 3 6 12 24 49 99 198]
|
||||
/* idx: 199 */ {0x200000100104a, 0x800000000, 0x0, 0x80}, // [1 3 6 12 24 49 99 199]
|
||||
/* idx: 200 */ {0x400000200104a, 0x1000000000, 0x0, 0x100}, // [1 3 6 12 25 50 100 200]
|
||||
/* idx: 201 */ {0x400000200104a, 0x1000000000, 0x0, 0x200}, // [1 3 6 12 25 50 100 201]
|
||||
/* idx: 202 */ {0x400000200104a, 0x2000000000, 0x0, 0x400}, // [1 3 6 12 25 50 101 202]
|
||||
/* idx: 203 */ {0x400000200104a, 0x2000000000, 0x0, 0x800}, // [1 3 6 12 25 50 101 203]
|
||||
/* idx: 204 */ {0x800000200104a, 0x4000000000, 0x0, 0x1000}, // [1 3 6 12 25 51 102 204]
|
||||
/* idx: 205 */ {0x800000200104a, 0x4000000000, 0x0, 0x2000}, // [1 3 6 12 25 51 102 205]
|
||||
/* idx: 206 */ {0x800000200104a, 0x8000000000, 0x0, 0x4000}, // [1 3 6 12 25 51 103 206]
|
||||
/* idx: 207 */ {0x800000200104a, 0x8000000000, 0x0, 0x8000}, // [1 3 6 12 25 51 103 207]
|
||||
/* idx: 208 */ {0x1000000400204a, 0x10000000000, 0x0, 0x10000}, // [1 3 6 13 26 52 104 208]
|
||||
/* idx: 209 */ {0x1000000400204a, 0x10000000000, 0x0, 0x20000}, // [1 3 6 13 26 52 104 209]
|
||||
/* idx: 210 */ {0x1000000400204a, 0x20000000000, 0x0, 0x40000}, // [1 3 6 13 26 52 105 210]
|
||||
/* idx: 211 */ {0x1000000400204a, 0x20000000000, 0x0, 0x80000}, // [1 3 6 13 26 52 105 211]
|
||||
/* idx: 212 */ {0x2000000400204a, 0x40000000000, 0x0, 0x100000}, // [1 3 6 13 26 53 106 212]
|
||||
/* idx: 213 */ {0x2000000400204a, 0x40000000000, 0x0, 0x200000}, // [1 3 6 13 26 53 106 213]
|
||||
/* idx: 214 */ {0x2000000400204a, 0x80000000000, 0x0, 0x400000}, // [1 3 6 13 26 53 107 214]
|
||||
/* idx: 215 */ {0x2000000400204a, 0x80000000000, 0x0, 0x800000}, // [1 3 6 13 26 53 107 215]
|
||||
/* idx: 216 */ {0x4000000800204a, 0x100000000000, 0x0, 0x1000000}, // [1 3 6 13 27 54 108 216]
|
||||
/* idx: 217 */ {0x4000000800204a, 0x100000000000, 0x0, 0x2000000}, // [1 3 6 13 27 54 108 217]
|
||||
/* idx: 218 */ {0x4000000800204a, 0x200000000000, 0x0, 0x4000000}, // [1 3 6 13 27 54 109 218]
|
||||
/* idx: 219 */ {0x4000000800204a, 0x200000000000, 0x0, 0x8000000}, // [1 3 6 13 27 54 109 219]
|
||||
/* idx: 220 */ {0x8000000800204a, 0x400000000000, 0x0, 0x10000000}, // [1 3 6 13 27 55 110 220]
|
||||
/* idx: 221 */ {0x8000000800204a, 0x400000000000, 0x0, 0x20000000}, // [1 3 6 13 27 55 110 221]
|
||||
/* idx: 222 */ {0x8000000800204a, 0x800000000000, 0x0, 0x40000000}, // [1 3 6 13 27 55 111 222]
|
||||
/* idx: 223 */ {0x8000000800204a, 0x800000000000, 0x0, 0x80000000}, // [1 3 6 13 27 55 111 223]
|
||||
/* idx: 224 */ {0x10000001000408a, 0x1000000000000, 0x0, 0x100000000}, // [1 3 7 14 28 56 112 224]
|
||||
/* idx: 225 */ {0x10000001000408a, 0x1000000000000, 0x0, 0x200000000}, // [1 3 7 14 28 56 112 225]
|
||||
/* idx: 226 */ {0x10000001000408a, 0x2000000000000, 0x0, 0x400000000}, // [1 3 7 14 28 56 113 226]
|
||||
/* idx: 227 */ {0x10000001000408a, 0x2000000000000, 0x0, 0x800000000}, // [1 3 7 14 28 56 113 227]
|
||||
/* idx: 228 */ {0x20000001000408a, 0x4000000000000, 0x0, 0x1000000000}, // [1 3 7 14 28 57 114 228]
|
||||
/* idx: 229 */ {0x20000001000408a, 0x4000000000000, 0x0, 0x2000000000}, // [1 3 7 14 28 57 114 229]
|
||||
/* idx: 230 */ {0x20000001000408a, 0x8000000000000, 0x0, 0x4000000000}, // [1 3 7 14 28 57 115 230]
|
||||
/* idx: 231 */ {0x20000001000408a, 0x8000000000000, 0x0, 0x8000000000}, // [1 3 7 14 28 57 115 231]
|
||||
/* idx: 232 */ {0x40000002000408a, 0x10000000000000, 0x0, 0x10000000000}, // [1 3 7 14 29 58 116 232]
|
||||
/* idx: 233 */ {0x40000002000408a, 0x10000000000000, 0x0, 0x20000000000}, // [1 3 7 14 29 58 116 233]
|
||||
/* idx: 234 */ {0x40000002000408a, 0x20000000000000, 0x0, 0x40000000000}, // [1 3 7 14 29 58 117 234]
|
||||
/* idx: 235 */ {0x40000002000408a, 0x20000000000000, 0x0, 0x80000000000}, // [1 3 7 14 29 58 117 235]
|
||||
/* idx: 236 */ {0x80000002000408a, 0x40000000000000, 0x0, 0x100000000000}, // [1 3 7 14 29 59 118 236]
|
||||
/* idx: 237 */ {0x80000002000408a, 0x40000000000000, 0x0, 0x200000000000}, // [1 3 7 14 29 59 118 237]
|
||||
/* idx: 238 */ {0x80000002000408a, 0x80000000000000, 0x0, 0x400000000000}, // [1 3 7 14 29 59 119 238]
|
||||
/* idx: 239 */ {0x80000002000408a, 0x80000000000000, 0x0, 0x800000000000}, // [1 3 7 14 29 59 119 239]
|
||||
/* idx: 240 */ {0x100000004000808a, 0x100000000000000, 0x0, 0x1000000000000}, // [1 3 7 15 30 60 120 240]
|
||||
/* idx: 241 */ {0x100000004000808a, 0x100000000000000, 0x0, 0x2000000000000}, // [1 3 7 15 30 60 120 241]
|
||||
/* idx: 242 */ {0x100000004000808a, 0x200000000000000, 0x0, 0x4000000000000}, // [1 3 7 15 30 60 121 242]
|
||||
/* idx: 243 */ {0x100000004000808a, 0x200000000000000, 0x0, 0x8000000000000}, // [1 3 7 15 30 60 121 243]
|
||||
/* idx: 244 */ {0x200000004000808a, 0x400000000000000, 0x0, 0x10000000000000}, // [1 3 7 15 30 61 122 244]
|
||||
/* idx: 245 */ {0x200000004000808a, 0x400000000000000, 0x0, 0x20000000000000}, // [1 3 7 15 30 61 122 245]
|
||||
/* idx: 246 */ {0x200000004000808a, 0x800000000000000, 0x0, 0x40000000000000}, // [1 3 7 15 30 61 123 246]
|
||||
/* idx: 247 */ {0x200000004000808a, 0x800000000000000, 0x0, 0x80000000000000}, // [1 3 7 15 30 61 123 247]
|
||||
/* idx: 248 */ {0x400000008000808a, 0x1000000000000000, 0x0, 0x100000000000000}, // [1 3 7 15 31 62 124 248]
|
||||
/* idx: 249 */ {0x400000008000808a, 0x1000000000000000, 0x0, 0x200000000000000}, // [1 3 7 15 31 62 124 249]
|
||||
/* idx: 250 */ {0x400000008000808a, 0x2000000000000000, 0x0, 0x400000000000000}, // [1 3 7 15 31 62 125 250]
|
||||
/* idx: 251 */ {0x400000008000808a, 0x2000000000000000, 0x0, 0x800000000000000}, // [1 3 7 15 31 62 125 251]
|
||||
/* idx: 252 */ {0x800000008000808a, 0x4000000000000000, 0x0, 0x1000000000000000}, // [1 3 7 15 31 63 126 252]
|
||||
/* idx: 253 */ {0x800000008000808a, 0x4000000000000000, 0x0, 0x2000000000000000}, // [1 3 7 15 31 63 126 253]
|
||||
/* idx: 254 */ {0x800000008000808a, 0x8000000000000000, 0x0, 0x4000000000000000}, // [1 3 7 15 31 63 127 254]
|
||||
/* idx: 255 */ {0x800000008000808a, 0x8000000000000000, 0x0, 0x8000000000000000}, // [1 3 7 15 31 63 127 255]
|
||||
}
|
||||
Reference in new issue
Block a user