# Independent epb2 reader This reference reconstructs the earlier **epb2** Library volume from its complete address. It runs locally, without an Every Possible Book account, API, database, submitted passage, or search service. It reconstructs the whole volume before selecting a page; new EPB3 books use their separate direct-page decoder. Save these files together in a directory on your computer: - [reconstruct.mjs](reconstruct.mjs) - [package.json](package.json) and [package-lock.json](package-lock.json) - [golden-vectors.json](golden-vectors.json) and [epb2-primitives.json](epb2-primitives.json) - [reference.test.mjs](reference.test.mjs) - [specification.md](specification.md) Install Node.js 24 or later. In that directory, run: ```sh npm ci --ignore-scripts npm test node reconstruct.mjs --self-test node reconstruct.mjs --address-file address.epb --page 173 --output page.txt ``` Use the complete private `address.epb` from your purchased package, not the short volume identifier or abbreviated location on the record PDF. Keep your address and output private if you want your selected page to remain private. The dependency installation requires the npm registry; reconstruction afterward runs locally without network calls. The script never sends your address anywhere. `--page` uses one-based page numbers, 1 through 410. If omitted, the `/pN` suffix in the saved address selects the page. An address without that suffix requires an explicit `--page`. `--output` is required: page content is written to the chosen file, while standard output contains only page geometry and a SHA-256 hash. Output has exactly 40 rows of 80 ASCII characters separated by 39 LF bytes, with no final newline. The SHA-256 covers those exact 3,239 bytes. Addresses are case-sensitive canonical `epb2` strings. One final LF in the input file is accepted as a file delimiter; otherwise whitespace, leading zeroes, unsupported glyphs, bad slots, overflow and inverse volumes with adjacent spaces are rejected. Files exceeding 1,400,000 bytes are rejected. Existing output files are overwritten: choose a new output filename for each page you retain. The full-volume golden fixture uses a disclosed synthetic base-29 pattern and public phrase. Its volume, scrambled location, canonical address and first, 173rd and final page hashes were generated from the current Library core and checked against this independently implemented reader. No customer data appears in the fixture. The compact primitive vectors are copied unchanged from the current `epb2` contract. These are compatibility witnesses, not a guarantee of service availability or a replacement for keeping your downloaded package. The address itself contains no inline checksum. The package's calculation audit records its BLAKE3 digest; its signed manifest lists SHA-256 hashes for package files. This reader's page hashes do not independently verify package signatures, payment status, copyright, or legal ownership. Reference implementation: Fly Strategic Group, LLC. No additional software license grant is made here. The separately installed `@noble/hashes` **2.4.0** dependency is by Paul Miller and contributors, distributed under its own MIT license: . Its source is not vendored in this download.